diff --git a/04_transfer_learning_in_tensorflow_part_1_feature_extraction.ipynb b/04_transfer_learning_in_tensorflow_part_1_feature_extraction.ipynb index a48d45b..29b7400 100644 --- a/04_transfer_learning_in_tensorflow_part_1_feature_extraction.ipynb +++ b/04_transfer_learning_in_tensorflow_part_1_feature_extraction.ipynb @@ -4,29 +4,15 @@ "metadata": { "colab": { "provenance": [], - "machine_shape": "hm", - "gpuType": "A100", - "authorship_tag": "ABX9TyMfSTrYBa7FpMXwjPOrjT7b", - "include_colab_link": true + "gpuType": "T4" }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, - "accelerator": "GPU", - "gpuClass": "standard" + "accelerator": "GPU" }, "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "view-in-github", - "colab_type": "text" - }, - "source": [ - "\"Open" - ] - }, { "cell_type": "markdown", "metadata": { @@ -78,6 +64,30 @@ "Don't worry if you make mistakes, we all do. The way to get better and make less mistakes is to **write more code**." ] }, + { + "cell_type": "code", + "source": [ + "# Load the TensorBoard notebook extension\n", + "%load_ext tensorboard" + ], + "metadata": { + "id": "5oTniUY17uuq" + }, + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Clear any logs from previous runs\n", + "!rm -rf ./logs/" + ], + "metadata": { + "id": "09mLcRXF7wei" + }, + "execution_count": 5, + "outputs": [] + }, { "cell_type": "code", "source": [ @@ -90,15 +100,15 @@ "base_uri": "https://localhost:8080/" }, "id": "cCVdvbhzHoht", - "outputId": "68f85f57-1410-438d-d559-e438952157d1" + "outputId": "93de9c1f-8335-4fed-e73d-2b4c878bb3f4" }, - "execution_count": 23, + "execution_count": 6, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Notebook last run (end-to-end): 2023-05-11 04:43:01.173110\n" + "Notebook last run (end-to-end): 2023-12-09 14:21:35.655154\n" ] } ] @@ -121,29 +131,29 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "9ed28bd4-c291-4644-95a2-7fa87f97b18f" + "outputId": "070ba8fb-f1c6-4016-d524-ae8c9cff397b" }, "source": [ "# Are we using a GPU?\n", "!nvidia-smi" ], - "execution_count": 1, + "execution_count": 7, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Thu May 11 04:22:37 2023 \n", + "Sat Dec 9 14:21:36 2023 \n", "+-----------------------------------------------------------------------------+\n", - "| NVIDIA-SMI 525.85.12 Driver Version: 525.85.12 CUDA Version: 12.0 |\n", + "| NVIDIA-SMI 525.105.17 Driver Version: 525.105.17 CUDA Version: 12.0 |\n", "|-------------------------------+----------------------+----------------------+\n", "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n", "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n", "| | | MIG M. |\n", "|===============================+======================+======================|\n", - "| 0 NVIDIA A100-SXM... Off | 00000000:00:04.0 Off | 0 |\n", - "| N/A 40C P0 46W / 400W | 0MiB / 40960MiB | 0% Default |\n", - "| | | Disabled |\n", + "| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n", + "| N/A 57C P8 10W / 70W | 0MiB / 15360MiB | 0% Default |\n", + "| | | N/A |\n", "+-------------------------------+----------------------+----------------------+\n", " \n", "+-----------------------------------------------------------------------------+\n", @@ -199,7 +209,7 @@ "source": [ "## Transfer leanring with TensorFlow Hub: Getting great results with 10% of the data\n", "\n", - "If you've been thinking, \"surely someone else has spent the time crafting the right model for the job...\" then you're in luck. \n", + "If you've been thinking, \"surely someone else has spent the time crafting the right model for the job...\" then you're in luck.\n", "\n", "For many of the problems you'll want to use deep learning for, chances are, a working model already exists.\n", "\n", @@ -248,7 +258,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "173ffe95-bb45-473b-94a7-dafca9158c07" + "outputId": "e3f4186a-9cd2-4b07-de05-54f7d04e9c57" }, "source": [ "# Get data (10% of labels)\n", @@ -262,22 +272,22 @@ "zip_ref.extractall()\n", "zip_ref.close()" ], - "execution_count": 2, + "execution_count": 8, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "--2023-05-11 04:22:37-- https://storage.googleapis.com/ztm_tf_course/food_vision/10_food_classes_10_percent.zip\n", - "Resolving storage.googleapis.com (storage.googleapis.com)... 74.125.68.128, 74.125.24.128, 142.250.4.128, ...\n", - "Connecting to storage.googleapis.com (storage.googleapis.com)|74.125.68.128|:443... connected.\n", + "--2023-12-09 14:21:37-- https://storage.googleapis.com/ztm_tf_course/food_vision/10_food_classes_10_percent.zip\n", + "Resolving storage.googleapis.com (storage.googleapis.com)... 74.125.142.207, 74.125.195.207, 172.253.117.207, ...\n", + "Connecting to storage.googleapis.com (storage.googleapis.com)|74.125.142.207|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 168546183 (161M) [application/zip]\n", "Saving to: ‘10_food_classes_10_percent.zip’\n", "\n", - "10_food_classes_10_ 100%[===================>] 160.74M 19.2MB/s in 9.7s \n", + "10_food_classes_10_ 100%[===================>] 160.74M 152MB/s in 1.1s \n", "\n", - "2023-05-11 04:22:48 (16.5 MB/s) - ‘10_food_classes_10_percent.zip’ saved [168546183/168546183]\n", + "2023-12-09 14:21:38 (152 MB/s) - ‘10_food_classes_10_percent.zip’ saved [168546183/168546183]\n", "\n" ] } @@ -290,7 +300,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "269dbc74-88ae-4546-fbed-251133541a85" + "outputId": "43c48c55-b589-443d-c22d-13733abf58b4" }, "source": [ "# How many images in each folder?\n", @@ -300,7 +310,7 @@ "for dirpath, dirnames, filenames in os.walk(\"10_food_classes_10_percent\"):\n", " print(f\"There are {len(dirnames)} directories and {len(filenames)} images in '{dirpath}'.\")" ], - "execution_count": 3, + "execution_count": 9, "outputs": [ { "output_type": "stream", @@ -308,27 +318,27 @@ "text": [ "There are 2 directories and 0 images in '10_food_classes_10_percent'.\n", "There are 10 directories and 0 images in '10_food_classes_10_percent/test'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/chicken_wings'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/sushi'.\n", "There are 0 directories and 250 images in '10_food_classes_10_percent/test/fried_rice'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/ice_cream'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/pizza'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/ramen'.\n", "There are 0 directories and 250 images in '10_food_classes_10_percent/test/grilled_salmon'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/chicken_curry'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/chicken_wings'.\n", "There are 0 directories and 250 images in '10_food_classes_10_percent/test/hamburger'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/ice_cream'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/chicken_curry'.\n", "There are 0 directories and 250 images in '10_food_classes_10_percent/test/steak'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/pizza'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/sushi'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/ramen'.\n", "There are 10 directories and 0 images in '10_food_classes_10_percent/train'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/chicken_wings'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/sushi'.\n", "There are 0 directories and 75 images in '10_food_classes_10_percent/train/fried_rice'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/ice_cream'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/pizza'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/ramen'.\n", "There are 0 directories and 75 images in '10_food_classes_10_percent/train/grilled_salmon'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/chicken_curry'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/chicken_wings'.\n", "There are 0 directories and 75 images in '10_food_classes_10_percent/train/hamburger'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/steak'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/pizza'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/sushi'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/ramen'.\n" + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/ice_cream'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/chicken_curry'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/steak'.\n" ] } ] @@ -362,7 +372,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "e847d896-1d24-40f1-9d8e-4f72fc76471f" + "outputId": "c7e717fd-bdca-44e1-94c1-fb13664435b0" }, "source": [ "# Setup data inputs\n", @@ -389,7 +399,7 @@ " batch_size=BATCH_SIZE,\n", " class_mode=\"categorical\")" ], - "execution_count": 4, + "execution_count": 10, "outputs": [ { "output_type": "stream", @@ -431,7 +441,7 @@ "\n", "We'll explore each of these overtime but for this notebook, we'll see how the TensorBoard callback can be used.\n", "\n", - "The TensorBoard callback can be accessed using [`tf.keras.callbacks.TensorBoard()`](https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/TensorBoard). \n", + "The TensorBoard callback can be accessed using [`tf.keras.callbacks.TensorBoard()`](https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/TensorBoard).\n", "\n", "Its main functionality is saving a model's training performance metrics to a specified `log_dir`.\n", "\n", @@ -451,15 +461,17 @@ "source": [ "# Create tensorboard callback (functionized because need to create a new one for each model)\n", "import datetime\n", - "def create_tensorboard_callback(dir_name, experiment_name):\n", - " log_dir = dir_name + \"/\" + experiment_name + \"/\" + datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\")\n", + "import os\n", + "def create_tensorboard_callback(experiment_name):\n", + " logfit_dir = \"logs/fit/\"\n", + " path_experiment = os.path.join(logfit_dir, experiment_name, datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\"))\n", " tensorboard_callback = tf.keras.callbacks.TensorBoard(\n", - " log_dir=log_dir\n", + " log_dir=path_experiment\n", " )\n", - " print(f\"Saving TensorBoard log files to: {log_dir}\")\n", + " print(f\"Saving TensorBoard log files to: {logfit_dir}\")\n", " return tensorboard_callback" ], - "execution_count": 5, + "execution_count": 11, "outputs": [] }, { @@ -504,7 +516,7 @@ "1. Go to [tfhub.dev](https://tfhub.dev/).\n", "2. Choose your problem domain, e.g. \"Image\" (we're using food images).\n", "3. Select your TF version, which in our case is TF2.\n", - "4. Remove all \"Problem domanin\" filters except for the problem you're working on. \n", + "4. Remove all \"Problem domanin\" filters except for the problem you're working on.\n", " * **Note:** \"Image feature vector\" can be used alongside almost any problem, we'll get to this soon.\n", "5. The models listed are all models which could potentially be used for your problem.\n", "\n", @@ -518,9 +530,9 @@ "\n", "To find our models, let's narrow down our search using the Architecture tab.\n", "\n", - "6. Select the Architecture tab on TensorFlow Hub and you'll see a dropdown menu of architecture names appear. \n", + "6. Select the Architecture tab on TensorFlow Hub and you'll see a dropdown menu of architecture names appear.\n", " * The rule of thumb here is generally, names with larger numbers means better performing models. For example, EfficientNetB4 performs better than EfficientNetB0.\n", - " * However, the tradeoff with larger numbers can mean they take longer to compute. \n", + " * However, the tradeoff with larger numbers can mean they take longer to compute.\n", "7. Select EfficientNetB0 and you should see [something like the following](https://tfhub.dev/s?module-type=image-classification,image-feature-vector&network-architecture=efficientnet-b0&tf-version=tf2):\n", "![](https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/images/04-tensorflow-hub-efficientnetb0.png)\n", "8. Clicking the one titled \"[efficientnet/b0/feature-vector](https://tfhub.dev/tensorflow/efficientnet/b0/feature-vector/1)\" brings us to a page with a button that says \"Copy URL\". That URL is what we can use to harness the power of EfficientNetB0.\n", @@ -530,19 +542,19 @@ "\n", "Great observation. This is where the differnet types of transfer learning come into play, as is, feature extraction and fine-tuning.\n", "\n", - "1. **\"As is\" transfer learning** is when you take a pretrained model as it is and apply it to your task without any changes. \n", + "1. **\"As is\" transfer learning** is when you take a pretrained model as it is and apply it to your task without any changes.\n", "\n", - " * For example, many computer vision models are pretrained on the ImageNet dataset which contains 1000 different classes of images. This means passing a single image to this model will produce 1000 different prediction probability values (1 for each class). \n", + " * For example, many computer vision models are pretrained on the ImageNet dataset which contains 1000 different classes of images. This means passing a single image to this model will produce 1000 different prediction probability values (1 for each class).\n", "\n", " * This is helpful if you have 1000 classes of image you'd like to classify and they're all the same as the ImageNet classes, however, it's not helpful if you want to classify only a small subset of classes (such as 10 different kinds of food). Model's with `\"/classification\"` in their name on TensorFlow Hub provide this kind of functionality.\n", "\n", - "2. **Feature extraction transfer learning** is when you take the underlying patterns (also called weights) a pretrained model has learned and adjust its outputs to be more suited to your problem. \n", + "2. **Feature extraction transfer learning** is when you take the underlying patterns (also called weights) a pretrained model has learned and adjust its outputs to be more suited to your problem.\n", "\n", - " * For example, say the pretrained model you were using had 236 different layers (EfficientNetB0 has 236 layers), but the top layer outputs 1000 classes because it was pretrained on ImageNet. To adjust this to your own problem, you might remove the original activation layer and replace it with your own but with the right number of output classes. The important part here is that **only the top few layers become trainable, the rest remain frozen**. \n", + " * For example, say the pretrained model you were using had 236 different layers (EfficientNetB0 has 236 layers), but the top layer outputs 1000 classes because it was pretrained on ImageNet. To adjust this to your own problem, you might remove the original activation layer and replace it with your own but with the right number of output classes. The important part here is that **only the top few layers become trainable, the rest remain frozen**.\n", "\n", " * This way all the underlying patterns remain in the rest of the layers and you can utilise them for your own problem. This kind of transfer learning is very helpful when your data is similar to the data a model has been pretrained on.\n", "\n", - "3. **Fine-tuning transfer learning** is when you take the underlying patterns (also called weights) of a pretrained model and adjust (fine-tune) them to your own problem. \n", + "3. **Fine-tuning transfer learning** is when you take the underlying patterns (also called weights) of a pretrained model and adjust (fine-tune) them to your own problem.\n", "\n", " * This usually means training **some, many or all** of the layers in the pretrained model. This is useful when you've got a large dataset (e.g. 100+ images per class) where your data is slightly different to the data the original model was trained on.\n", "\n", @@ -572,7 +584,7 @@ "import tensorflow_hub as hub\n", "from tensorflow.keras import layers" ], - "execution_count": 6, + "execution_count": 12, "outputs": [] }, { @@ -605,7 +617,7 @@ "# # New: EfficientNetB0 feature vector (version 2)\n", "# efficientnet_url = \"https://tfhub.dev/google/imagenet/efficientnet_v2_imagenet1k_b0/feature_vector/2\"" ], - "execution_count": 7, + "execution_count": 13, "outputs": [] }, { @@ -631,7 +643,7 @@ "source": [ "def create_model(model_url, num_classes=10):\n", " \"\"\"Takes a TensorFlow Hub URL and creates a Keras Sequential model with it.\n", - " \n", + "\n", " Args:\n", " model_url (str): A TensorFlow Hub feature extraction URL.\n", " num_classes (int): Number of output neurons in output layer,\n", @@ -646,16 +658,16 @@ " trainable=False, # freeze the underlying patterns\n", " name='feature_extraction_layer',\n", " input_shape=IMAGE_SHAPE+(3,)) # define the input image shape\n", - " \n", + "\n", " # Create our own model\n", " model = tf.keras.Sequential([\n", " feature_extractor_layer, # use the feature extraction layer as the base\n", - " layers.Dense(num_classes, activation='softmax', name='output_layer') # create our own output layer \n", + " layers.Dense(num_classes, activation='softmax', name='output_layer') # create our own output layer\n", " ])\n", "\n", " return model" ], - "execution_count": 8, + "execution_count": 14, "outputs": [] }, { @@ -683,7 +695,7 @@ " optimizer=tf.keras.optimizers.Adam(),\n", " metrics=['accuracy'])" ], - "execution_count": 9, + "execution_count": 15, "outputs": [] }, { @@ -715,7 +727,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "6fa89e67-d9e7-43c0-f2a9-93cb92a7f011" + "outputId": "7be7711c-d788-4273-b523-b116f831ddf7" }, "source": [ "# Fit the model\n", @@ -725,26 +737,25 @@ " validation_data=test_data,\n", " validation_steps=len(test_data),\n", " # Add TensorBoard callback to model (callbacks parameter takes a list)\n", - " callbacks=[create_tensorboard_callback(dir_name=\"tensorflow_hub\", # save experiment logs here\n", - " experiment_name=\"resnet50V2\")]) # name of log files" + " callbacks=[create_tensorboard_callback(experiment_name=\"resnet50V2\")]) # name of log files" ], - "execution_count": 10, + "execution_count": 16, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Saving TensorBoard log files to: tensorflow_hub/resnet50V2/20230511-042304\n", + "Saving TensorBoard log files to: logs/fit/\n", "Epoch 1/5\n", - "24/24 [==============================] - 28s 680ms/step - loss: 1.7915 - accuracy: 0.3880 - val_loss: 1.1463 - val_accuracy: 0.6368\n", + "24/24 [==============================] - 25s 536ms/step - loss: 1.8709 - accuracy: 0.3787 - val_loss: 1.1472 - val_accuracy: 0.6352\n", "Epoch 2/5\n", - "24/24 [==============================] - 14s 620ms/step - loss: 0.8710 - accuracy: 0.7560 - val_loss: 0.8359 - val_accuracy: 0.7352\n", + "24/24 [==============================] - 10s 427ms/step - loss: 0.8842 - accuracy: 0.7413 - val_loss: 0.8406 - val_accuracy: 0.7360\n", "Epoch 3/5\n", - "24/24 [==============================] - 14s 618ms/step - loss: 0.6160 - accuracy: 0.8373 - val_loss: 0.7385 - val_accuracy: 0.7676\n", + "24/24 [==============================] - 11s 457ms/step - loss: 0.5991 - accuracy: 0.8373 - val_loss: 0.7487 - val_accuracy: 0.7640\n", "Epoch 4/5\n", - "24/24 [==============================] - 15s 624ms/step - loss: 0.4705 - accuracy: 0.8907 - val_loss: 0.7016 - val_accuracy: 0.7728\n", + "24/24 [==============================] - 11s 465ms/step - loss: 0.4632 - accuracy: 0.8760 - val_loss: 0.7091 - val_accuracy: 0.7644\n", "Epoch 5/5\n", - "24/24 [==============================] - 15s 640ms/step - loss: 0.3744 - accuracy: 0.9200 - val_loss: 0.6764 - val_accuracy: 0.7772\n" + "24/24 [==============================] - 12s 526ms/step - loss: 0.3769 - accuracy: 0.9147 - val_loss: 0.6749 - val_accuracy: 0.7828\n" ] } ] @@ -755,7 +766,7 @@ "id": "i5SuOe672UJi" }, "source": [ - "Wow! \n", + "Wow!\n", "\n", "It seems that after only 5 epochs, the ResNetV250 feature extraction model was able to blow any of the architectures we made out of the water, achieving around 90% accuracy on the training set and nearly 80% accuracy on the test set...**with only 10 percent of the training images!**\n", "\n", @@ -777,7 +788,7 @@ "def plot_loss_curves(history):\n", " \"\"\"\n", " Returns separate loss curves for training and validation metrics.\n", - " \"\"\" \n", + " \"\"\"\n", " loss = history.history['loss']\n", " val_loss = history.history['val_loss']\n", "\n", @@ -801,7 +812,7 @@ " plt.xlabel('Epochs')\n", " plt.legend();" ], - "execution_count": 11, + "execution_count": 17, "outputs": [] }, { @@ -812,12 +823,12 @@ "base_uri": "https://localhost:8080/", "height": 927 }, - "outputId": "67fb28a3-7ff5-4d01-d516-b37bd3b3cf2e" + "outputId": "20c25e2d-7bf1-4c56-9622-4d084ce95500" }, "source": [ "plot_loss_curves(resnet_history)" ], - "execution_count": 12, + "execution_count": 18, "outputs": [ { "output_type": "display_data", @@ -825,7 +836,7 @@ "text/plain": [ "
" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgE0lEQVR4nO3dd3wVVf7/8de96YUkhISQhNCTGHqoUhSQrsuK61oWVsBeAFHEwnd3LevuD10VUUGsyK4NywqyikBAijSpoYaEEgglCQRIJ/XO748LV2MCJCHJpLyfj8d9aGbO3PmMl3DfnjnnjMUwDAMRERERk1jNLkBEREQaNoURERERMZXCiIiIiJhKYURERERMpTAiIiIiplIYEREREVMpjIiIiIipFEZERETEVAojIiIiYiqFERERETGVwoiIXJX58+djsVjYunWr2aWISB2lMCIiIiKmUhgRERERUymMiEi127FjByNHjsTHxwdvb28GDx7Mpk2bSrQpLCzkhRdeIDw8HHd3d5o0aUL//v2JiYlxtElJSeHuu++mefPmuLm5ERwczM0338yRI0dq+IpEpCo5m12AiNRve/fu5brrrsPHx4ennnoKFxcX3n33XQYOHMiaNWvo3bs3AM8//zwzZszgvvvuo1evXmRmZrJ161a2b9/O0KFDAbj11lvZu3cvkydPplWrVpw6dYqYmBiSkpJo1aqViVcpIlfDYhiGYXYRIlJ3zZ8/n7vvvpstW7bQo0ePUvtvueUWlixZQlxcHG3atAEgOTmZyMhIoqOjWbNmDQBdu3alefPmfPfdd2WeJz09ncaNG/PKK68wbdq06rsgEalxuk0jItWmuLiY5cuXM3r0aEcQAQgODmbMmDGsW7eOzMxMAPz8/Ni7dy8HDhwo8708PDxwdXVl9erVnDt3rkbqF5GaoTAiItXm9OnT5ObmEhkZWWpfVFQUNpuNY8eOAfD3v/+d9PR0IiIi6NSpE08++SS7du1ytHdzc+Pll1/mhx9+ICgoiOuvv55//etfpKSk1Nj1iEj1UBgRkVrh+uuv59ChQ8ybN4+OHTvywQcf0K1bNz744ANHm8cee4yEhARmzJiBu7s7f/vb34iKimLHjh0mVi4iV0thRESqTWBgIJ6ensTHx5fat3//fqxWK2FhYY5t/v7+3H333Xz++eccO3aMzp078/zzz5c4rm3btjzxxBMsX76cPXv2UFBQwGuvvVbdlyIi1UhhRESqjZOTE8OGDePbb78tMf02NTWVzz77jP79++Pj4wPAmTNnShzr7e1Nu3btyM/PByA3N5e8vLwSbdq2bUujRo0cbUSkbtLUXhGpEvPmzWPp0qWltj///PPExMTQv39/HnnkEZydnXn33XfJz8/nX//6l6Nd+/btGThwIN27d8ff35+tW7fy9ddfM2nSJAASEhIYPHgwt99+O+3bt8fZ2ZmFCxeSmprKnXfeWWPXKSJVT1N7ReSqXJzaeynHjh3j9OnTTJ8+nfXr12Oz2ejduzf//Oc/6dOnj6PdP//5TxYvXkxCQgL5+fm0bNmSu+66iyeffBIXFxfOnDnDc889x8qVKzl27BjOzs5cc801PPHEE9x22201cakiUk0URkRERMRUGjMiIiIiplIYEREREVMpjIiIiIipFEZERETEVAojIiIiYiqFERERETFVnVj0zGazcfLkSRo1aoTFYjG7HBERESkHwzDIysoiJCQEq/XS/R91IoycPHmyxPMrREREpO44duwYzZs3v+T+OhFGGjVqBNgv5uJzLERERKR2y8zMJCwszPE9fil1IoxcvDXj4+OjMCIiIlLHXGmIhQawioiIiKkURkRERMRUCiMiIiJiqjoxZkRERMxVXFxMYWGh2WVILePi4oKTk9NVv4/CiIiIXJJhGKSkpJCenm52KVJL+fn50axZs6taB0xhRERELuliEGnatCmenp5aeFIcDMMgNzeXU6dOARAcHFzp91IYERGRMhUXFzuCSJMmTcwuR2ohDw8PAE6dOkXTpk0rfctGA1hFRKRMF8eIeHp6mlyJ1GYX/3xczZiiCoeRtWvXMmrUKEJCQrBYLCxatOiKx3z66ad06dIFT09PgoODueeeezhz5kxl6hURkRqmWzNyOVXx56PCYSQnJ4cuXbowZ86ccrVfv34948aN495772Xv3r189dVXbN68mfvvv7/CxYqIiEj9U+EwMnLkSP7xj39wyy23lKv9xo0badWqFY8++iitW7emf//+PPjgg2zevLnCxYqIiNS0Vq1aMWvWrHK3X716NRaLpUZnIA0cOJDHHnusxs5X1ap9zEifPn04duwYS5YswTAMUlNT+frrr7nxxhsveUx+fj6ZmZklXiIiIuVVlV/OW7Zs4YEHHih3+759+5KcnIyv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7bff8sknn2Cz2ejbty/Hjx+viZKr3aU+w8zMTM6fP29SVVUnODiYd955h//+97/897//JSwsjIEDB7J9+3azS7sim83GY489Rr9+/ejYseMl29W138OLynt9dfF3cPfu3Xh7e+Pm5sZDDz3EwoULad++fZlt6+LnV5Hrq4uf34IFC9i+fTszZswoV3szPsM68dReqTp9+vQpkfj79u1LVFQU7777Li+++KKJlUl5REZGEhkZ6fi5b9++HDp0iNdff52PP/7YxMqubOLEiezZs4d169aZXUq1KO/11cXfwcjISGJjY8nIyODrr79m/PjxrFmz5pJf2HVNRa6vrn1+x44dY8qUKcTExNTqgbb1NowEBATg5OREampqie2pqak0a9aszGOaNWtWofZmq8w1/paLiwvR0dEcPHiwOkqscZf6DH18fPDw8DCpqurVq1evWv8FP2nSJL777jvWrl1L8+bNL9u2rv0eQsWu77fqwu+gq6sr7dq1A6B79+5s2bKFN954g3fffbdU27r4+VXk+n6rtn9+27Zt49SpU3Tr1s2xrbi4mLVr1zJ79mzy8/NxcnIqcYwZn2G9vU3j6upK9+7dWblypWObzWZj5cqVl7wX2KdPnxLtAWJiYi5779BMlbnG3youLmb37t0EBwdXV5k1qq59hlUhNja21n5+hmEwadIkFi5cyI8//kjr1q2veExd+gwrc32/VRd/B202G/n5+WXuq0uf36Vc7vp+q7Z/foMHD2b37t3ExsY6Xj169GDs2LHExsaWCiJg0mdYbUNja4EFCxYYbm5uxvz58419+/YZDzzwgOHn52ekpKQYhmEYd911l/HMM8842q9fv95wdnY2Xn31VSMuLs547rnnDBcXF2P37t1mXcIVVfQaX3jhBWPZsmXGoUOHjG3bthl33nmn4e7ubuzdu9esS7isrKwsY8eOHcaOHTsMwJg5c6axY8cO4+jRo4ZhGMYzzzxj3HXXXY72hw8fNjw9PY0nn3zSiIuLM+bMmWM4OTkZS5cuNesSLqui1/f6668bixYtMg4cOGDs3r3bmDJlimG1Wo0VK1aYdQmX9fDDDxu+vr7G6tWrjeTkZMcrNzfX0aYu/x5W5vrq2u/gM888Y6xZs8ZITEw0du3aZTzzzDOGxWIxli9fbhhG3f78DKPi11fXPr+y/HY2TW34DOt1GDEMw3jrrbeMFi1aGK6urkavXr2MTZs2OfYNGDDAGD9+fIn2X375pREREWG4uroaHTp0ML7//vsarrjiKnKNjz32mKNtUFCQceONNxrbt283oeryuTiV9bevi9c0fvx4Y8CAAaWO6dq1q+Hq6mq0adPG+Oijj2q87vKq6PW9/PLLRtu2bQ13d3fD39/fGDhwoPHjjz+aU3w5lHVtQInPpC7/Hlbm+ura7+A999xjtGzZ0nB1dTUCAwONwYMHO76oDaNuf36GUfHrq2ufX1l+G0Zqw2doMQzDqL5+FxEREZHLq7djRkRERKRuUBgRERERUymMiIiIiKkURkRERMRUCiMiIiJiKoURERERMZXCiIiIiJhKYURE6gSLxcKiRYvMLkNEqoHCiIhc0YQJE7BYLKVeI0aMMLs0EakH6u1Te0Wkao0YMYKPPvqoxDY3NzeTqhGR+kQ9IyJSLm5ubjRr1qzEq3HjxoD9FsrcuXMZOXIkHh4etGnThq+//rrE8bt37+aGG27Aw8ODJk2a8MADD5CdnV2izbx58+jQoQNubm4EBwczadKkEvvT0tK45ZZb8PT0JDw8nMWLFzv2nTt3jrFjxxIYGIiHhwfh4eGlwpOI1E4KIyJSJf72t79x6623snPnTsaOHcudd95JXFwcADk5OQwfPpzGjRuzZcsWvvrqK1asWFEibMydO5eJEyfywAMPsHv3bhYvXky7du1KnOOFF17g9ttvZ9euXdx4442MHTuWs2fPOs6/b98+fvjhB+Li4pg7dy4BAQE19x9ARCqvWh/DJyL1wvjx4w0nJyfDy8urxOuf//ynYRj2p9c+9NBDJY7p3bu38fDDDxuGYRjvvfee0bhxYyM7O9ux//vvvzesVquRkpJiGIZhhISEGH/5y18uWQNg/PWvf3X8nJ2dbQDGDz/8YBiGYYwaNcq4++67q+aCRaRGacyIiJTLoEGDmDt3bolt/v7+jn/v06dPiX19+vQhNjYWgLi4OLp06YKXl5djf79+/bDZbMTHx2OxWDh58iSDBw++bA2dO3d2/LuXlxc+Pj6cOnUKgIcffphbb72V7du3M2zYMEaPHk3fvn0rda0iUrMURkSkXLy8vErdNqkqHh4e5Wrn4uJS4meLxYLNZgNg5MiRHD16lCVLlhATE8PgwYOZOHEir776apXXKyJVS2NGRKRKbNq0qdTPUVFRAERFRbFz505ycnIc+9evX4/VaiUyMpJGjRrRqlUrVq5ceVU1BAYGMn78eD755BNmzZrFe++9d1XvJyI1Qz0jIlIu+fn5pKSklNjm7OzsGCT61Vdf0aNHD/r378+nn37K5s2b+fDDDwEYO3Yszz33HOPHj+f555/n9OnTTJ48mbvuuougoCAAnn/+eR566CGaNm3KyJEjycrKYv369UyePLlc9T377LN0796dDh06kJ+fz3fffecIQyJSuymMiEi5LF26lODg4BLbIiMj2b9/P2Cf6bJgwQIeeeQRgoOD+fzzz2nfvj0Anp6eLFu2jClTptCzZ088PT259dZbmTlzpuO9xo8fT15eHq+//jrTpk0jICCAP/7xj+Wuz9XVlenTp3PkyBE8PDy47rrrWLBgQRVcuYhUN4thGIbZRYhI3WaxWFi4cCGjR482uxQRqYM0ZkRERERMpTAiIiIiptKYERG5arrbKyJXQz0jIiIiYiqFERERETGVwoiIiIiYSmFERERETKUwIiIiIqZSGBERERFTKYyIiIiIqRRGRERExFQKIyIiImKq/w+Ko6rf7YbKTQAAAABJRU5ErkJggg==\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABeo0lEQVR4nO3dd3wUdf7H8ddueichhQCBAEkwgECkGUAFQRGVE7vCCegpFkAQ9YS7E/txng0VxA53duUE+QmC9CZKDVIChJpQEgiQTurO74+FlUCAJCSZbPJ+Ph7zgMzO7HzGNe7bz3znOxbDMAxERERETGI1uwARERGp3xRGRERExFQKIyIiImIqhRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMickmmT5+OxWJh3bp1ZpciIk5KYURERERMpTAiIiIiplIYEZFqt3HjRvr374+/vz++vr706dOHX3/9tdQ2RUVFvPDCC0RHR+Pp6UnDhg3p2bMnCxYscGyTmprK/fffT9OmTfHw8CA8PJxbbrmFffv21fAZiUhVcjW7ABGp27Zu3cpVV12Fv78/f/3rX3Fzc+ODDz6gV69eLFu2jG7dugHw/PPPM3HiRB588EG6du1KVlYW69atY8OGDVx33XUA3H777WzdupVRo0YRGRnJkSNHWLBgAcnJyURGRpp4liJyKSyGYRhmFyEizmv69Oncf//9rF27ls6dO5/z+q233srcuXNJTEykZcuWABw+fJjWrVsTFxfHsmXLAOjYsSNNmzblxx9/LPM4GRkZBAYG8tprr/HUU09V3wmJSI3TZRoRqTYlJSX8/PPPDBw40BFEAMLDwxk0aBArV64kKysLgAYNGrB161aSkpLKfC8vLy/c3d1ZunQpJ06cqJH6RaRmKIyISLU5evQoeXl5tG7d+pzXYmNjsdlspKSkAPDiiy+SkZFBTEwMl19+OU8//TS///67Y3sPDw9effVVfvrpJ8LCwrj66qv597//TWpqao2dj4hUD4UREakVrr76anbv3s2nn35Ku3bt+Pjjj7niiiv4+OOPHduMGTOGnTt3MnHiRDw9PXn22WeJjY1l48aNJlYuIpdKYUREqk1ISAje3t7s2LHjnNe2b9+O1WolIiLCsS4oKIj777+fr776ipSUFNq3b8/zzz9far9WrVrx5JNP8vPPP7NlyxYKCwt54403qvtURKQaKYyISLVxcXHh+uuv54cffih1+21aWhpffvklPXv2xN/fH4Bjx46V2tfX15eoqCgKCgoAyMvLIz8/v9Q2rVq1ws/Pz7GNiDgn3dorIlXi008/Zd68eeesf/7551mwYAE9e/bksccew9XVlQ8++ICCggL+/e9/O7Zr06YNvXr1olOnTgQFBbFu3TpmzJjByJEjAdi5cyd9+vThrrvuok2bNri6ujJz5kzS0tK45557auw8RaTq6dZeEbkkp2/tPZ+UlBSOHj3K+PHjWbVqFTabjW7duvHKK68QHx/v2O6VV15h9uzZ7Ny5k4KCApo3b859993H008/jZubG8eOHeO5555j0aJFpKSk4OrqymWXXcaTTz7JnXfeWROnKiLVRGFERERETKUxIyIiImIqhRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUznFpGc2m41Dhw7h5+eHxWIxuxwREREpB8MwyM7OpnHjxlit5+9/OEUYOXToUKnnV4iIiIjzSElJoWnTpud93SnCiJ+fH2A/mdPPsRAREZHaLSsri4iICMf3+Pk4RRg5fWnG399fYURERMTJXGyIhQawioiIiKkURkRERMRUCiMiIiJiKqcYMyIiIuYqKSmhqKjI7DKklnFzc8PFxeWS30dhREREzsswDFJTU8nIyDC7FKmlGjRoQKNGjS5pHjCFEREROa/TQSQ0NBRvb29NPCkOhmGQl5fHkSNHAAgPD6/0eymMiIhImUpKShxBpGHDhmaXI7WQl5cXAEeOHCE0NLTSl2w0gFVERMp0eoyIt7e3yZVIbXb6349LGVOkMCIiIhekSzNyIVXx74fCiIiIiJhKYUREROQCIiMjmTRpUrm3X7p0KRaLpUbvQOrVqxdjxoypseNVNQ1gFRGROqdXr1507NixQiHifNauXYuPj0+5t+/evTuHDx8mICDgko9dX9TrzohhGCzfeRSbzTC7FBERqUGGYVBcXFyubUNCQio0iNfd3f2S592ob+ptGDEMgyGfrmHIp2v4cfNhs8sREZEqMmzYMJYtW8bbb7+NxWLBYrEwffp0LBYLP/30E506dcLDw4OVK1eye/dubrnlFsLCwvD19aVLly4sXLiw1PudfZnGYrHw8ccfc+utt+Lt7U10dDSzZ892vH72ZZrp06fToEED5s+fT2xsLL6+vtxwww0cPvzHd09xcTGPP/44DRo0oGHDhjzzzDMMHTqUgQMHVuqfwYkTJxgyZAiBgYF4e3vTv39/kpKSHK/v37+fAQMGEBgYiI+PD23btmXu3LmOfQcPHkxISAheXl5ER0czbdq0StVRXvU2jFgsFrpGBgEwaeFOStQdERG5KMMwyCssNmUxjPL9d/rtt98mPj6ehx56iMOHD3P48GEiIiIAGDduHP/6179ITEykffv25OTkcOONN7Jo0SI2btzIDTfcwIABA0hOTr7gMV544QXuuusufv/9d2688UYGDx7M8ePHz7t9Xl4er7/+Op999hnLly8nOTmZp556yvH6q6++yhdffMG0adNYtWoVWVlZzJo1q1znW5Zhw4axbt06Zs+ezerVqzEMgxtvvNFx++2IESMoKChg+fLlbN68mVdffRVfX18Ann32WbZt28ZPP/1EYmIiU6dOJTg4uNK1lEe9HjMyrEckn6zay56juczedJBb45qaXZKISK12sqiENhPmm3LsbS/2w9v94l9bAQEBuLu74+3tTaNGjQDYvn07AC+++CLXXXedY9ugoCA6dOjg+Pmll15i5syZzJ49m5EjR573GMOGDePee+8F4J///CfvvPMOa9as4YYbbihz+6KiIt5//31atWoFwMiRI3nxxRcdr7/77ruMHz+eW2+9FYDJkyc7OhUVlZSUxOzZs1m1ahXdu3cH4IsvviAiIoJZs2Zx5513kpyczO23387ll18OQMuWLR37JycnExcXR+fOnQF7Z6i61dvOCICfpxvDr7Z/AG8vTKK4xGZyRSIiUp1Of8GelpOTw1NPPUVsbCwNGjTA19eXxMTEi3ZG2rdv7/i7j48P/v7+jmnRy+Lt7e0IImCfOv309pmZmaSlpdG1a1fH6y4uLnTq1KlC53ZaYmIirq6udOvWzbGuYcOGtG7dmsTERAAef/xxXn75ZXr06MFzzz3H77//7tj20Ucf5euvv6Zjx4789a9/5ZdffqlUHRVRrzsjAEPjI/l4xV72Hctj5saD3Nk5wuySRERqLS83F7a92M+0Y1+qs++Keeqpp1iwYAGvv/46UVFReHl5cccdd1BYWHjB93Fzcyv1s8ViwWY7///QlrV9eS87VYcHH3yQfv36MWfOHH7++WcmTpzIG2+8wahRo+jfvz/79+9n7ty5LFiwgD59+jBixAhef/31aqunXndGAHw8XHnkGnt35J3FSRSpOyIicl4WiwVvd1dTlorcneLu7k5JSclFt1u1ahXDhg3j1ltv5fLLL6dRo0bs27fvEv4JVVxAQABhYWGsXbvWsa6kpIQNGzZU6v1iY2MpLi7mt99+c6w7duwYO3bsoE2bNo51ERERPPLII3z//fc8+eSTfPTRR47XQkJCGDp0KJ9//jmTJk3iww8/rFQt5VXvwwjAfVdGEuzrQcrxk/xv/QGzyxERkUsUGRnJb7/9xr59+0hPTz9v1yI6Oprvv/+ehIQENm3axKBBgy7Y4aguo0aNYuLEifzwww/s2LGD0aNHc+LEiUrdHhwdHc0tt9zCQw89xMqVK9m0aRN//vOfadKkCbfccgsAY8aMYf78+ezdu5cNGzawZMkSYmNjAZgwYQI//PADu3btYuvWrfz444+O16qLwgjg5e7Co73s1/LeXbyLwmJ1R0REnNlTTz2Fi4sLbdq0ISQk5LxjQN58800CAwPp3r07AwYMoF+/flxxxRU1XC0888wz3HvvvQwZMoT4+Hh8fX3p168fnp6elXq/adOm0alTJ26++Wbi4+MxDIO5c+c6LheVlJQwYsQIYmNjueGGG4iJieG9994D7F2l8ePH0759e66++mpcXFz4+uuvq+xcy2IxzLxoVU5ZWVkEBASQmZmJv79/tRwjv6iEa15bQlpWAS8PbMefr2xeLccREXEW+fn57N27lxYtWlT6S1Eqx2azERsby1133cVLL71kdjkXdKF/T8r7/a3OyCmebi6M6B0FwJQlu8gvuvi1RhERkaqwf/9+PvroI3bu3MnmzZt59NFH2bt3L4MGDTK7tBqhMHKGu7tEEB7gyeHMfL5Zm2J2OSIiUk9YrVamT59Oly5d6NGjB5s3b2bhwoXExsaSnJyMr6/veZeL3YbsDOr9rb1n8nB1YeS1Ufx95hamLNnF3V0i8KyCW8lEREQuJCIiglWrVpX5WuPGjUlISDjvvo0bN66mqmqOwshZ7uwUwXtLdnMw4yRf/JbMX3q2MLskERGpx1xdXYmKijK7jGpV4cs0y5cvZ8CAATRu3BiLxVKuufO/+OILOnTogLe3N+Hh4TzwwAMcO3asMvVWO3dXK4/3sX/oU5fuIq+wfE91FBERkcqpcBjJzc2lQ4cOTJkypVzbr1q1iiFDhvCXv/yFrVu38t1337FmzRoeeuihChdbU267oinNgrxJzynk81/3m12OiIhInVbhMNK/f39efvllx8N8Lmb16tVERkby+OOP06JFC3r27MnDDz/MmjVrKlxsTXFzsfJ4n2gA3l+2h9wCdUdERESqS7XfTRMfH09KSgpz587FMAzS0tKYMWMGN95443n3KSgoICsrq9RS0wZ2bEyLYB+O5xbyn9X7avz4IiIi9UW1h5EePXrwxRdfcPfdd+Pu7k6jRo0ICAi44GWeiRMnEhAQ4FgiImr+4XWuLlZGn+qOfLh8D9n5RTVeg4iISH1Q7WFk27ZtjB49mgkTJrB+/XrmzZvHvn37eOSRR867z/jx48nMzHQsKSnmzPkxoENjWoX4kJFXxLRV+0ypQUREal5kZCSTJk0q17blvZlDzq/aw8jEiRPp0aMHTz/9NO3bt6dfv3689957fPrppxw+fLjMfTw8PPD39y+1mMHFamFM3xgAPlqxh8yT6o6IiIhUtWoPI3l5eVitpQ/j4mKfSMwJHovDTZeHExPmS3Z+MZ+s3Gt2OSIiInVOhcNITk4OCQkJjtng9u7dS0JCgmM62vHjxzNkyBDH9gMGDOD7779n6tSp7Nmzh1WrVvH444/TtWtXp5g1zmq18MSp7sinK/eSkVdockUiInIhH374IY0bN8ZmK/0E9ltuuYUHHniA3bt3c8sttxAWFoavry9dunRh4cKFVXb8zZs3c+211+Ll5UXDhg0ZPnw4OTk5jteXLl1K165d8fHxoUGDBvTo0YP9++3TSGzatInevXvj5+eHv78/nTp1Yt26dVVWW21V4TCybt064uLiiIuLA2Ds2LHExcUxYcIEAA4fPlxqnvxhw4bx5ptvMnnyZNq1a8edd95J69at+f7776voFKpfv7aNiA33J6egmI9W7DG7HBER8xgGFOaas5Szm37nnXdy7NgxlixZ4lh3/Phx5s2bx+DBg8nJyeHGG29k0aJFbNy4kRtuuIEBAwZUyTNecnNz6devH4GBgaxdu5bvvvuOhQsXMnLkSACKi4sZOHAg11xzDb///jurV69m+PDhWCwWAAYPHkzTpk1Zu3Yt69evZ9y4cbi5uV1yXbVdhaeD79Wr1wUvr0yfPv2cdaNGjWLUqFEVPVStYe+ORDP8s/VMW7WPv/RsSZCPu9lliYjUvKI8+KdJXe2/HQJ3n4tuFhgYSP/+/fnyyy/p06cPADNmzCA4OJjevXtjtVrp0KGDY/uXXnqJmTNnMnv2bEdoqKwvv/yS/Px8/vvf/+LjY6918uTJDBgwgFdffRU3NzcyMzO5+eabadWqFQCxsbGO/ZOTk3n66ae57LLLAIiOjr6kepyFntpbTte1CaNdE3/yCkv4YPlus8sREZELGDx4MP/73/8oKCgA7I8lueeee7BareTk5PDUU08RGxtLgwYN8PX1JTExsUo6I4mJiXTo0MERRMA+xYXNZmPHjh0EBQUxbNgw+vXrx4ABA3j77bdL3cwxduxYHnzwQfr27cu//vUvdu+uH983elBeOVksFsZeF8MD09fx31/282DPloT4eZhdlohIzXLztncozDp2OQ0YMADDMJgzZw5dunRhxYoVvPXWWwA89dRTLFiwgNdff52oqCi8vLy44447KCysmTGB06ZN4/HHH2fevHl88803/OMf/2DBggVceeWVPP/88wwaNIg5c+bw008/8dxzz/H111+Xe9ZzZ6XOSAX0bh1Kh4gGnCwq4YNl9SOtioiUYrHYL5WYsZwaV1Eenp6e3HbbbXzxxRd89dVXtG7dmiuuuAKwPzNt2LBh3HrrrVx++eU0atSIffv2Vck/ntjYWDZt2kRubq5j3apVq7BarbRu3dqxLi4ujvHjx/PLL7/Qrl07vvzyS8drMTExPPHEE/z888/cdtttTJs2rUpqq80URirgdHcE4LNf93MkK9/kikRE5HwGDx7MnDlz+PTTTxk8eLBjfXR0NN9//z0JCQls2rSJQYMGnXPnzaUc09PTk6FDh7JlyxaWLFnCqFGjuO+++wgLC2Pv3r2MHz+e1atXs3//fn7++WeSkpKIjY3l5MmTjBw5kqVLl7J//35WrVrF2rVrS40pqasURiro6uhgOjcPpKDYxntL1R0REamtrr32WoKCgtixYweDBg1yrH/zzTcJDAyke/fuDBgwgH79+jm6JpfK29ub+fPnc/z4cbp06cIdd9xBnz59mDx5suP17du3c/vttxMTE8Pw4cMZMWIEDz/8MC4uLhw7dowhQ4YQExPDXXfdRf/+/XnhhReqpLbazGI4wcxjWVlZBAQEkJmZadpsrGf6ZVc6gz7+DXdXK8ue7kV4gJfZJYmIVLn8/Hz27t1LixYt8PT0NLscqaUu9O9Jeb+/1RmphPhWDenWIojCYhvvLVF3RERE5FIojFSCxWLhiVNjR75em8zBjJMmVyQiItXhiy++wNfXt8ylbdu2ZpdXZ+jW3kq6smVDekQ1ZNWuY0xevIuJt11udkkiIlLF/vSnP9GtW7cyX6sPM6PWFIWRS/BE3xhW7VrNd+tSeKxXKyKCyn8PvIiI1H5+fn74+fmZXUadp8s0l6BzZBBXx4RQbDN4d3GS2eWIiIg4JYWRS/REX/tzA/634SD70nMvsrWIiPOpqjk4pG6qin8/dJnmEsU1C+Tay0JZvP0I7yxK4s27O5pdkohIlXB3d8dqtXLo0CFCQkJwd3d3PF1WxDAMCgsLOXr0KFarFXf3yj9AVmGkCjzRN4bF248wK+Egj/WOIirU1+ySREQumdVqpUWLFhw+fJhDh0x6Ho3Uet7e3jRr1gyrtfIXWxRGqsDlTQO4rk0YC7al8c6iJN65N87skkREqoS7uzvNmjWjuLiYkpISs8uRWsbFxQVXV9dL7pgpjFSRMX2jWbAtjf/7/RAjr40iJkyjr0WkbrBYLLi5uelWVqk2GsBaRdo2DqB/u0YYBry9UHfWiIiIlJfCSBUa0zcGiwXmbD5M4uEss8sRERFxCgojVah1Iz9uujwcgEkLd5pcjYiIiHNQGKliY/pGY7HA/K1pbDmYaXY5IiIitZ7CSBWLCvXjlg6NAXVHREREykNhpBo83icaqwUWJh5hU0qG2eWIiIjUagoj1aBliC+3xjUF4C11R0RERC5IYaSajO4TjYvVwtIdR1m//4TZ5YiIiNRaCiPVpFlDb+7sZO+OaOyIiIjI+SmMVKMRvaNwc7GwIimdNXuPm12OiIhIraQwUo0igry5q3MEAG8tUHdERESkLAoj1WxE7yjcXays3nOMX3anm12OiIhIraMwUs0aN/Di3q727sikBUkYhmFyRSIiIrWLwkgNeKx3FO6uVtbsO86qXcfMLkdERKRWURipAWH+nvy5W3MA3liwQ90RERGRMyiM1JBHerXE083KxuQMlu48anY5IiIitYbCSA0J9fNkSHwkYL+zRt0RERERO4WRGvTw1S3xdnfh9wOZLEo8YnY5IiIitUKFw8jy5csZMGAAjRs3xmKxMGvWrIvuU1BQwN///neaN2+Oh4cHkZGRfPrpp5Wp16k19PVgaPdIAN5Ud0RERASoRBjJzc2lQ4cOTJkypdz73HXXXSxatIhPPvmEHTt28NVXX9G6deuKHrpOGH5VS3zcXdh2OIv5W9PMLkdERMR0rhXdoX///vTv37/c28+bN49ly5axZ88egoKCAIiMjKzoYeuMQB93HujZgncX72LSwp1c3yYMq9VidlkiIiKmqfYxI7Nnz6Zz5878+9//pkmTJsTExPDUU09x8uTJ8+5TUFBAVlZWqaUuebBnS/w8XNmems1PW1LNLkdERMRU1R5G9uzZw8qVK9myZQszZ85k0qRJzJgxg8cee+y8+0ycOJGAgADHEhERUd1l1qgAbzf+clULwP5E3xKbxo6IiEj9Ve1hxGazYbFY+OKLL+jatSs33ngjb775Jv/5z3/O2x0ZP348mZmZjiUlJaW6y6xxD/Rsgb+nK0lHcvjx90NmlyMiImKaag8j4eHhNGnShICAAMe62NhYDMPgwIEDZe7j4eGBv79/qaWu8fd0Y/jVLQF4e2ESxSU2kysSERExR7WHkR49enDo0CFycnIc63bu3InVaqVp06bVffhabViPFgR6u7EnPZfZm9QdERGR+qnCYSQnJ4eEhAQSEhIA2Lt3LwkJCSQnJwP2SyxDhgxxbD9o0CAaNmzI/fffz7Zt21i+fDlPP/00DzzwAF5eXlVzFk7K18OVh69pBcDbi9QdERGR+qnCYWTdunXExcURFxcHwNixY4mLi2PChAkAHD582BFMAHx9fVmwYAEZGRl07tyZwYMHM2DAAN55550qOgXnNiS+OQ193Nl/LI/vNx40uxwREZEaZzGcYBrQrKwsAgICyMzMrJPjRz5esYeX5yTSNNCLJU/1ws1Fs/SLiIjzK+/3t771aoHB3ZoT4ufBgRMnmbG+7EG9IiIidZXCSC3g5e7CY73sY0cmL95FQXGJyRWJiIjUHIWRWuLers0I8/fgYMZJvl2n7oiIiNQfCiO1hKebCyN7RwEwZfEu8ovUHRERkfpBYaQWuatLBI0DPEnNyuerNckX30FERKQOUBipRTxcXRh5bTQA7y3dzclCdUdERKTuUxipZe7o1JSmgV4czS7gi9/2m12OiIhItVMYqWXcXa08fqo7MnXpbvIKi02uSEREpHopjNRCt17RhOYNvTmWW8h/V6s7IiIidZvCSC3k5vJHd+SDZbvJKVB3RERE6i6FkVrqlo6NaRnsw4m8Iv7zyz6zyxEREak2CiO1lKuLldF97d2RD5fvISu/yOSKREREqofCSC12c/vGRIX6knmyiGkr95ldjoiISLVQGKnFXKwWxpzqjny8cg+ZeeqOiIhI3aMwUsvd2C6cyxr5kZ1fzCcr95hdjoiISJVTGKnlrFYLY/rGAPDpqn2cyC00uSIREZGqpTDiBPq1DaNtY39yCor5aIW6IyIiUrcojDgBi8XCE6e6I9N/2cexnAKTKxIREak6CiNOok9sKO2bBpBXWMKHy9UdERGRukNhxElYLBaeuM7eHfnP6n0czVZ3RERE6gaFESfSKyaEuGYNyC+yMXXpbrPLERERqRIKI07EYrEw9lR35PPf9pOWlW9yRSIiIpdOYcTJ9IwKpktkIIXFNt5bssvsckRERC6ZwoiTOXPsyFdrUjiUcdLkikRERC6NwogT6t4qmCtbBlFYYmOKuiMiIuLkFEac1Ol5R75dl0LK8TyTqxEREak8hREn1a1lQ3pGBVNUYqg7IiIiTk1hxIk9cZ39ib7frT/A/mO5JlcjIiJSOQojTqxT8yCuiQmhxGbw7mJ1R0RExDkpjDi503fWfL/hAHvT1R0RERHnozDi5DpGNKDPZaHYDHhnUZLZ5YiIiFSYwkgdcLo78kPCQXYdyTa5GhERkYpRGKkD2jUJ4Po2YdgMeHuRxo6IiIhzURipI053R378/RA7UtUdERER51HhMLJ8+XIGDBhA48aNsVgszJo1q9z7rlq1CldXVzp27FjRw8pFxIb7c9Pl4RgGvL1op9nliIiIlFuFw0hubi4dOnRgypQpFdovIyODIUOG0KdPn4oeUsppdN9oLBaYuzmVbYeyzC5HRESkXCocRvr378/LL7/MrbfeWqH9HnnkEQYNGkR8fHxFDynlFBPmx4D2jQGYtFDdERERcQ41MmZk2rRp7Nmzh+eee65c2xcUFJCVlVVqkfJ5vE80Vgv8vC2NzQcyzS5HRETkoqo9jCQlJTFu3Dg+//xzXF1dy7XPxIkTCQgIcCwRERHVXGXdERXqy8COTQB4S90RERFxAtUaRkpKShg0aBAvvPACMTEx5d5v/PjxZGZmOpaUlJRqrLLuGdUnGherhcXbj7Ax+YTZ5YiIiFxQtYaR7Oxs1q1bx8iRI3F1dcXV1ZUXX3yRTZs24erqyuLFi8vcz8PDA39//1KLlF+LYB9uizvdHdGsrCIiUruV77pJJfn7+7N58+ZS69577z0WL17MjBkzaNGiRXUevl4bdW00MzceZPnOo6zbd5zOkUFmlyQiIlKmCoeRnJwcdu36Y5bPvXv3kpCQQFBQEM2aNWP8+PEcPHiQ//73v1itVtq1a1dq/9DQUDw9Pc9ZL1WrWUNv7uzclK/WpPDWwp188eCVZpckIiJSpgpfplm3bh1xcXHExcUBMHbsWOLi4pgwYQIAhw8fJjk5uWqrlEoZ0TsKNxcLq3Yd49c9x8wuR0REpEwWwzAMs4u4mKysLAICAsjMzNT4kQr6x6zNfP5rMl1bBPHN8CuxWCxmlyQiIvVEeb+/9WyaOm5E7yjcXays2Xuc1bvVHRERkdpHYaSOCw/wYlC3ZgC8uWAnTtAIExGRekZhpB54tFcrPFytrNt/ghVJ6WaXIyIiUorCSD0Q5u/Jn69sDqg7IiIitY/CSD3xyDWt8HSzkpCSwdIdR80uR0RExEFhpJ4I8fNgaHwkoO6IiIjULgoj9cjwq1vi7e7C5oOZLEw8YnY5IiIigMJIvdLQ14Nh3SMBe3fEZlN3REREzKcwUs8Mv7olvh6uJB7O4udtqWaXIyIiojBS3zTwdueBnvYHFL61IEndERERMZ3CSD30l54t8PN0ZUdaNnO3HDa7HBERqecURuqhAC83HrqqJQCTFiZRou6IiIiYSGGknrq/RyQBXm7sOpLD/206ZHY5IiJSjymM1FN+nm4Mv9reHXl7URLFJTaTKxIRkfpKYaQeG9o9kiAfd/am5zIrQd0RERExh8JIPebr4crDp7oj7yxKokjdERERMYHCSD13X3xzgn3dST6ex/cbDphdjoiI1EMKI/Wct7srj1zTCoB3Fu2isFjdERERqVkKI8Kfr2xOiJ8HBzNO8t36FLPLERGRekZhRPB0c2FEL3t3ZPLiXRQUl5hckYiI1CcKIwLAPV2b0cjfk8OZ+XyzVt0RERGpOQojApzqjlwbBcCUJbvIL1J3REREaobCiDjc1bkpTRp4kZZVwJe/JZtdjoiI1BMKI+Lg4erCyFPdkfeW7uZkobojIiJS/RRGpJQ7OjUlIsiL9JwCPv91v9nliIhIPaAwIqW4uVgZdW00AO8v201uQbHJFYmISF2nMCLnuC2uCZENvTmWW8h/V6s7IiIi1UthRM7h6mJldF97d+SD5bvJzi8yuSIREanLFEakTH/q0ISWIT5k5BXxn1/2mV2OiIjUYQojUiYXq4UxfWMA+HD5HjJPqjsiIiLVQ2FEzuumy8OJCfMlK7+YT1fuNbscERGpoxRG5LzO7I58unIvGXmFJlckIiJ1kcKIXNANbRtxWSM/sguK+XiFuiMiIlL1FEbkgqxWC09cZ++OTFu1l+O56o6IiEjVqnAYWb58OQMGDKBx48ZYLBZmzZp1we2///57rrvuOkJCQvD39yc+Pp758+dXtl4xwfVtwmjb2J/cwhI+XL7H7HJERKSOqXAYyc3NpUOHDkyZMqVc2y9fvpzrrruOuXPnsn79enr37s2AAQPYuHFjhYsVc1gsFsae6o7855d9pOcUmFyRiIjUJRbDMIxK72yxMHPmTAYOHFih/dq2bcvdd9/NhAkTyrV9VlYWAQEBZGZm4u/vX4lK5VIZhsHAKavYdCCTh65qwd9vamN2SSIiUsuV9/u7xseM2Gw2srOzCQoKOu82BQUFZGVllVrEXBbLH2NH/rt6P0ey8k2uSERE6ooaDyOvv/46OTk53HXXXefdZuLEiQQEBDiWiIiIGqxQzueamBCuaNaAgmIbU5ftNrscERGpI2o0jHz55Ze88MILfPvtt4SGhp53u/Hjx5OZmelYUlJSarBKOR/72JHWAHzxWzKpmeqOiIjIpauxMPL111/z4IMP8u2339K3b98Lbuvh4YG/v3+pRWqHHlEN6RoZRGGxjfeW7jK7HBERqQNqJIx89dVX3H///Xz11VfcdNNNNXFIqSZnjh35ek0KBzNOmlyRiIg4uwqHkZycHBISEkhISABg7969JCQkkJycDNgvsQwZMsSx/ZdffsmQIUN444036NatG6mpqaSmppKZmVk1ZyA1Lr5VQ+JbNqSwxMaUJeqOiIjIpalwGFm3bh1xcXHExcUBMHbsWOLi4hy36R4+fNgRTAA+/PBDiouLGTFiBOHh4Y5l9OjRVXQKYobT3ZFv16aQcjzP5GpERMSZXdI8IzVF84zUTvd98hsrktK5u3MEr97R3uxyRESklqm184xI3XG6OzJjwwH2H8s1uRoREXFWCiNSaVc0C6R36xBKbAbvLNLYERERqRyFEbkkp7sjMzceYPfRHJOrERERZ1S/w8ix3bDiDSguNLsSp9W+aQP6xoZhM+CdRUlmlyMiIk6o/oYRw4C5T8OiF+H9HrB3udkVOa0xfaMBmL3pEElp2SZXIyIizqb+hhGADveATwik74T/DID/PQTZaWZX5XTaNQnghraNMAyYpO6IiIhUUP0NIxYLtL8LRq6DLg8CFtj8LUzuAms+AluJ2RU6lTHX2bsjc34/zPZUPWVZRETKr/6GkdO8GsBNb8BDiyG8IxRkwtyn4KNr4eAGs6tzGpc18uem9uEATFqg7oiIiJSfwshpTa6wB5IbXwePADicYA8kc56EkxlmV+cUxvSJxmKBeVtT2XJQ0/2LiEj5KIycyeoCXR+CkWuh/d2AAWs/hsmdYdM39kGvcl7RYX78qUNjACYtVHdERETKR2GkLH5hcNuHMPT/IDgGco/CzOH2Qa5Hd5hdXa32eJ9orBZYmJjG7wcyzC5HREScgMLIhbS4Gh5ZBX0mgKsX7FsBU3vAwhegUA+HK0urEF8GxjUB4K0FO02uRkREnIHCyMW4usNVT8KIXyHmBrAVwco3YUo32PGT2dXVSo9fG42L1cKSHUfZkHzC7HJERKSWUxgpr8BIGPQN3PMlBERAZjJ8dQ98dS9kJJtdXa0SGezD7VeoOyIiIuWjMFJRl90EI36DHmPA6go75tq7JCvf0rTyZxh1bTSuVgsrktJZu++42eWIiEgtpjBSGe4+cN0L8MhKaN4DivJg4fPwwVWwb6XZ1dUKEUHe3Nk5AlB3RERELkxh5FKExsKwOTDwffAOhqPbYfpNMPMRyDlqdnWmG3ltFG4uFn7ZfYzVu4+ZXY6IiNRSCiOXymKBjvfCqHXQ+QHAApu+gsmd7HOU1ONp5Zs08OKeLs0AeGvhTgzN0yIiImVQGKkqXoFw81vw4CII7wD5mfbZWz/uC4cSzK7ONCN6R+HuamXN3uP8ou6IiIiUQWGkqjXtBA8tgf6vgYc/HNoAH/WGuU/bA0o90yjAk8Hd7N2RNxeoOyIiIudSGKkOVhfoNtw+rXy7O8CwwZoP4d3O8Pt39W5a+Ud7tcLTzcr6/SdYtlNjaUREpDSFkerk1wju+ASG/AANoyD3CHz/IPz3FkivP89uCfXz5L4rmwP2O2vUHRERkTMpjNSElr3g0V+g9z/A1RP2LoP34mHRS1B00uzqasTD17TCy82FTQcyWbz9iNnliIhILaIwUlNcPeCap+GxXyH6evu08itet0+YtnO+2dVVu2BfD4Z2jwQ0dkREREpTGKlpQS1g0Ldw9+fg3wQy9sOXd8HXgyEjxezqqtXwq1vi4+7C1kNZ/LwtzexyRESkllAYMYPFArEDYMQa6P64fVr57T/ClK6w6m0oKTK7wmoR5OPO/T1aAPaxIzabuiMiIqIwYi4PX7j+JXh4BTSLt08rv2ACvH8V7P/F7OqqxYNXtcDPw5XtqdnM25pqdjkiIlILKIzUBmFt4P6f4Jb3wLshHE2Eaf1h5qOQm252dVWqgbc7D/T8oztSou6IiEi9pzBSW1gsEDcYRq6DTsPs6zZ9Ce92gnXTwGYztbyq9EDPFvh7upJ0JIc5mw+bXY6IiJhMYaS28Q6CAW/DXxZC2OWQnwE/joFProPDm8yurkoEeLnx0FUtAZi0UN0REZH6TmGktoroAsOXwg3/Anc/OLgOPuwFPz0D+VlmV3fJhvWIpIG3G3uO5jJ700GzyxERERMpjNRmLq5w5aP2aeXb3mafVv6392FyF9jyP6eeVt7P043hV9u7I28vTKK4pO5chhIRkYpRGHEG/uFw5zS4byYEtYKcVJjxAHw2ENJ3mV1dpQ2NjyTIx519x/KYuVHdERGR+qrCYWT58uUMGDCAxo0bY7FYmDVr1kX3Wbp0KVdccQUeHh5ERUUxffr0SpQqtLrWPq18r7+BiwfsWQpT42HxK045rbyPhyuPXGPvjryzOIkidUdEROqlCoeR3NxcOnTowJQpU8q1/d69e7npppvo3bs3CQkJjBkzhgcffJD58+v+FOjVws0Tej0DI36FqL5QUgjL/w3vXQlJC8yursLuuzKSYF8PUo6f5H/rD5hdjoiImMBiXMJDQiwWCzNnzmTgwIHn3eaZZ55hzpw5bNmyxbHunnvuISMjg3nz5pXrOFlZWQQEBJCZmYm/v39ly617DAMSZ8NP4yD7kH1d7J/sg14DmphbWwV8snIvL/24jSYNvFjyVC/cXXX1UESkLijv93e1/1d/9erV9O3bt9S6fv36sXr16uo+dN1nsUCbW2DkGogfCRYXeziZ3AV+eddpppUf3K0ZoX4eHMw4ybfr6vbzeURE5FzVHkZSU1MJCwsrtS4sLIysrCxOnix7nENBQQFZWVmlFrkADz/o9wo8vBwiukFRLvz8D/jgGkj+1ezqLsrTzYURvaMAmLJkF/lFJSZXJCIiNalW9sMnTpxIQECAY4mIiDC7JOfQqB3cPw/+NBm8guDIVvi0H/wwAnKPmV3dBd3TNYLwAE8OZ+bz9Zpks8sREZEaVO1hpFGjRqSllX5cfFpaGv7+/nh5eZW5z/jx48nMzHQsKSlq3Zeb1QpX3Aej1sMVQ+zrNn4OkzvB+v/U2mnlPVxdGHntqe7I0t3qjoiI1CPVHkbi4+NZtGhRqXULFiwgPj7+vPt4eHjg7+9fapEK8g6CP70LD/wMYe3g5An4v8ftnZLUzWZXV6Y7O0XQpIEXR7ML+PzX/WaXIyIiNaTCYSQnJ4eEhAQSEhIA+627CQkJJCfbW+vjx49nyJAhju0feeQR9uzZw1//+le2b9/Oe++9x7fffssTTzxRNWcgF9asGwxfBv3+Ce6+cGCNfSzJvL9BQbbZ1ZXi7mrl8T727sj7y3aTV1hsckUiIlITKhxG1q1bR1xcHHFxcQCMHTuWuLg4JkyYAMDhw4cdwQSgRYsWzJkzhwULFtChQwfeeOMNPv74Y/r161dFpyAX5eIK8SNgxBpoMxCMEvh1iv2um60za9W08rdd0ZRmQd6k5xTy2Wp1R0RE6oNLmmekpmiekSqWtBDmPgUn9tp/btUHbnwNGrYyt65TZqw/wFPfbSLQ240Vz1yLr4er2SWJiEgl1Jp5RqQWiu4Lj62Ga8aBizvsXgTvxcOSiVCUb3Z1DOzYmBbBPpzIK+I/v+wzuxwREalmCiP1lZsX9B4Pj/1qf+ZNSQEs+5f9WTe7Fl18/2rk6mJldJ9oAD5cvofsfOeYvE1ERCpHYaS+a9gK/vw93DENfBvB8T3w+W3w7VDIOmRaWQM6NKZViA+ZJ4uYtmqfaXWIiEj1UxgR+7Ty7W6DkWvhysfAYoVts+wDXFdPgZKav6vFxWphTN8YAD5asYfMk+qOiIjUVQoj8gdPf7hhov1W4KZdoDAH5v8NPrwGkn+r8XJuujycmDBfsvOL+WTl3ho/voiI1AyFETlXeHv7ZGkD3gbPBpC2BT69HmaPgrzjNVaG1WrhiVPdkU9X7iUjr7DGji0iIjVHYUTKZrVCp2H2aeU7/tm+bsN/4d1OsOGzGptWvl/bRsSG+5NTUMxHK/bUyDFFRKRmKYzIhfkEw8Ap9gfwhbaBk8dh9kiY1h/Stlb74e3dEfudNdNW7eN4rrojIiJ1jcKIlE/zeHh4OVz/Mrj5QMqv8P5VMP/v1T6t/HVtwmjXxJ+8whI+WL67Wo8lIiI1T2FEys/FDbqPgpFrIHaAfVr51ZNhclfY9kO1TStvsVgYe5197Mh/f9nP0eyCajmOiIiYQ2FEKi6gKdz9OQz6DgIjIfsQfDsEvrjDPk9JNejdOpQOEQ04WVTCB8vUHRERqUsURqTyYq63z+B69V/t08rvWmifVn7Zv6G4arsXZ3ZHPvt1P0eyzJ+2XkREqobCiFwaNy+49u/w6C/Q4hoozoclr9hDye4lVXqoq6OD6dQ8kIJiG+8tVXdERKSuUBiRqhEcDUN+gNs/Ad8wOL4bPhsI390PWYer5BAWi4UnT3VHvvwtmcOZJ6vkfUVExFwKI1J1LBa4/A77tPLdHrFPK7/1e/u08r9OrZJp5eNbNaRbiyAKS2xMWbKrCooWERGzKYxI1fMMgP6vwkNLoEknKMyGeePgo95wYN0lvbXFYuGJU92Rb9amcOBEXlVULCIiJlIYkerTuCP8ZSHc/JY9oKT+Dh/3hf8bfUnTyl/ZsiE9ohpSVGKoOyIiUgcojEj1slqh8wMwcj10GAQYsH46TO4MG7+o9Nwkp59Z8926AyQfU3dERMSZKYxIzfANgVunwrC5EHIZ5B2DHx6DaTdC2rYKv13nyCCujgmh2Gbw7uKkaihYRERqisKI1KzIHvDISuj7Arh5Q/Iv8MFV8POzUJBTobc6/cyaGRsOMP77zaTnaGZWERFnpDAiNc/FDXqOgRFr4LKbwVYMv7wDU7pB4v+V+9JNXLNA7u8RiWHAV2uS6fXaUt5ftpuC4pLqrV9ERKqUxTCq6YEiVSgrK4uAgAAyMzPx9/c3uxypajvmwU9PQ0ay/efofnDjv+1TzZfDmr3HeenHbWw+mAlAsyBvxve/jBvaNcJisVRT0SIicjHl/f5WGJHaoTAPVrwBq94GWxG4esLVT0H3x8HV46K722wG3288yL/nbefIqQfpdW0RxISb29CuSUB1Vy8iImVQGBHndHQnzBkL+1bYf24YDTe9Di17lWv33IJiPli2mw+W76Gg2IbFAndc0ZSn+7Um1N+z+uoWEZFzKIyI8zIM2DwD5v8Nco/Y17W7A/r9E/zCyvUWBzNO8u952/kh4RAA3u4ujOgdxV96tsDTzaW6KhcRkTMojIjzO5lhf+jemo8AAzz84dpnoctfwFq+QLEh+QQv/t82ElIyAGjSwItx/S/j5vbhGk8iIlLNFEak7ji0EX58wv4nQHgH+6yuTTqVa3fDMJi96RCv/rSdQ5n5AHRqHsizN7ehY0SDaipaREQURqRusZXA+mmw8EUoyAQs9pld+zwLXoHleouThSV8tGIPU5fu5mSR/fbf2+Ka8PQNrQkP8KrG4kVE6ieFEambco7YJ0j7/Wv7z97B0GscNLsSgluDq/tF3yI1M5/X5u/gfxsOAODpZuWRa1rx8NWt8HLXeBIRkaqiMCJ1294VMOdJSN/xxzqrG4S0hrB20KjdqT8vB5/gMt/i9wMZvPTjNtbuOwFAeIAnf72hNbd0aILVqvEkIiKXSmFE6r7iQljzAez4CVK3nLp8UwbfRqXDSVg7aBgFLq4YhsHczan8c24iBzNOAtAhogETbm5Dp+blu/wjIiJlUxiR+sUwIDPFHkrStkLaZvvfj+8ByvhX3MUDQi+DsMuhUTsKg9vw2V4/3lxxhNxC+3iSAR0a88wNrWka6F2z5yIiUkcojIiA/eF7RxL/CCdpp8JKYdkP5Svxa8IOmrP4RCjbbM3YbY3kup7debR3ND4erjVcvIiIc1MYETkfmw0y9v0RTlK32MPK6WfjnCXP8GC3tRneER1p0bYb1vDLIawtePjVbN0iIk6mWsPIlClTeO2110hNTaVDhw68++67dO3a9bzbT5o0ialTp5KcnExwcDB33HEHEydOxNOzfNNzK4xIjcjPtHdNToUTI3ULtrRtuJTkl719YGTpcSiN2kGD5qDJ1EREgPJ/f1e47/zNN98wduxY3n//fbp168akSZPo168fO3bsIDQ09Jztv/zyS8aNG8enn35K9+7d2blzJ8OGDcNisfDmm29W9PAi1cczAJp3ty+ABXCxlVB4ZCfLVyxh75bfaGXbR6w1mXDLcTixz75s//GP9/Dwt3dNzryjJ7QNuGvciYjI+VS4M9KtWze6dOnC5MmTAbDZbERERDBq1CjGjRt3zvYjR44kMTGRRYsWOdY9+eST/Pbbb6xcubJcx1RnRGqDYzkFvLVwJ1/+loy/kU171xSGtMzmGv803NK3wdHtUFJYxp4WaNjqjIBiHzSLfxN1UUSkTquWzkhhYSHr169n/PjxjnVWq5W+ffuyevXqMvfp3r07n3/+OWvWrKFr167s2bOHuXPnct9991Xk0CKma+jrwcsDL+e+KyN5ec42lif5sXwnBPu68+T1rbkrrhEux3edGoey+Y/xKLlH4Ngu+7Jt1h9v6BVoDyhndlFCLgM3PV1YROqXCoWR9PR0SkpKCAsr/eTUsLAwtm/fXuY+gwYNIj09nZ49e2IYBsXFxTzyyCP87W9/O+9xCgoKKCgocPyclZVVkTJFqlXrRn7894GuLNlxhJd/TGRPei7jv9/Mf37Zx4Sb29C9/V3Q/q4/dsg5UjqcpG2B9J1w8gTsW2FfTrO4QHDMGfOinOqklPNpxSIizqja71VcunQp//znP3nvvffo1q0bu3btYvTo0bz00ks8++yzZe4zceJEXnjhheouTaTSLBYL114WxlXRIXy2ej9vL0pie2o2gz7+jevahPG3G2NpEexj39g3FKL62JfTigvsl3Ucd/ScCisnT8DRRPuy+bs/tvcJKR1OwtraZ5t1cavZExcRqQYVGjNSWFiIt7c3M2bMYODAgY71Q4cOJSMjgx9++OGcfa666iquvPJKXnvtNce6zz//nOHDh5OTk4PVaj1nn7I6IxERERozIrXWidxC3l6UxGe/7qfEZuDmYmFofCSj+kQT4FXOwGAYkHXo3Ms8x3eDYTt3e6ub/bLO2V0Un4ZVe3IiIpVULWNG3N3d6dSpE4sWLXKEEZvNxqJFixg5cmSZ++Tl5Z0TOFxc7A8jO18O8vDwwMPDoyKliZgq0Med5//Ulj9f2YxX5iSyZMdRPl65l/9tOMDY62K4t2szXF3ODd6lWCwQ0MS+xPT7Y31hXtkTtxVk2delbS79Pn7h5z6fp2EUWPUQQBGpnSp8N80333zD0KFD+eCDD+jatSuTJk3i22+/Zfv27YSFhTFkyBCaNGnCxIkTAXj++ed58803+fDDDx2XaR599FE6derEN998U65j6m4acTbLdh7l5R+3kXTEPtNrdKgv/7i5DdfEhFTNAQzDPknbmZO2pW6BE3vL3t7VE0JjS8+LEtYWvBpUTT0iImWo1knPJk+e7Jj0rGPHjrzzzjt069YNgF69ehEZGcn06dMBKC4u5pVXXuGzzz7j4MGDhISEMGDAAF555RUaNGhQpScjUpsUl9j4ak0yby7YyYm8IgB6tw7h7ze1ISrUt3oOWpANadvO6qJsg6LcsrcPaHbWZZ52ENgCyrh8KiJSUZoOXqSWyMwr4t3FSUz/ZR/FNgMXq4X7rmzO6D7RBPq4V38BNpu9Y3L2HT2ZKWVv7+5rn6gtrO0ZA2bbaPp7EakwhRGRWmbP0Rz+OXc7CxPTAAjwcmN0n2jui2+O28XGk1SHkydKTX9P6hb72JSSgrK3D2xRetK2sHbQoJkmbhOR81IYEamlVu1K56Uft7E9NRuAliE+/P3GWK69LBSL2V/sJcX2ydnStpTuomQfLnt7j4AzOiinLvWEtgE3r5qtW0RqJYURkVqsxGbw7boU3vh5B+k59inkr4oO5h83taF1o1p4OSQ3vXQ4Sd1inyfFVnTuthar/e6ds6e/9wtXF0WknlEYEXEC2flFTFmym09X7qWwxIbVAvd2bcbY62Jo6FvLb28vLrTPJHv2vCh56WVv7xV01mWetvZ5Ulxr+XmKSKUpjIg4keRjefxrXiJzN6cC4Ofhyqg+UQztHomHqxPND2IYkJNWehxK2hZITwKj5Nztra726e8DI8E7CLwbnlqCz/h7EPgE25+IrM6KiFNRGBFxQr/tOcaLP25j6yH785iaN/TmbzfGcn2bMPPHk1yKonz7FPdnXuZJ2wz5meV/D6vrGQGljMUn+KxA01BjV0RMpjAi4qRsNoP/bTjAv+fv4Gi2/c6WK1sG8ezNbWjbOMDk6qqQYUDmAfsdPTmp9nEpecch79ipJf3Un8ehMKdyx3Dz+aO74ggsDc/fhfEKBJdqf2SXSL2hMCLi5HILipm6dDcfrdhDQbENiwXu7hzB2OtjCPXzNLu8mlWUf0ZIOfZHSHEEllNL7hl/L2tw7UVZ7LPSluq6BJ112eh0J+bUn7p8JHJeCiMidcSBE3m8Om8H/7fpEAA+7i6MuDaKB3q0wNPNicaT1CTDsM9Ge06AOXaqA3Ps3C7MyROVO5bj8lEZl4nO6cSc+tmtnoVJqbcURkTqmPX7j/Pij4lsSskAoGmgF+P7x3Lj5Y2cezxJbVFSDPkZZwWWi3RhzjfN/sWcefnI56zBuucM4D21Xg86FCekMCJSB9lsBj9sOsirP+0gNSsfgC6RgUy4uS2XN61D40mcRdHJMzosZ495OU8XpsouH5U1gPeMQKPLR1ILKIyI1GF5hcV8uHwP7y/bTX6RDYDbr2jKX29oTZi/LgHUWoYBBVmlA8o5XZizlkpfPnI7t+PiU0bH5cwujC4fSRVTGBGpBw5nnuS1eTv4fuNBALzcXHi0VyseuqolXu5q69cJJcX2QFIqpJTRcTnzbqRLvXzkc4EOzJmdGK9AXT6SC1IYEalHElIyePH/trIhOQOAxgGePNP/Mv7UobHGk9RHRSfLGPNykS6MrbgSBzrj8pFXIHg2sP/p1eACP5/6u2berRcURkTqGcMw+PH3w/zrp+0czDgJQFyzBjx7cxuuaBZocnVSq515+Sj37KCSXnagyc+4tGO6ep0/uJwZWrwagOeZ2wWoG+NEFEZE6qn8ohI+WbmXKUt2kVdon4L9lo6NeeaGy2jcQDOSShUpdfkoHU5m2H/OP/XnyYzSf3e8lgFc4teORwB4BVy8+3L2a+6+GtRbwxRGROq5I1n5vP7zDr5bfwDDAE83K8OvasnD17TCx0OzjIpJbDZ7F6a8weXMnys7E+9pVtc/wkpFLil5NtDg3kpSGBERALYczOTFH7exZu9xAML8PXi632XcFtcEq1X/lyhOpLjQ/jyjMoPLhULNCSgpvLRju3qVr/ty9uUmz4B6/YgBhRERcTAMg/lbU3llbiIpx+3jSdo3DeDZm9vQJTLI5OpEqplh2Af1luq4nLhwqDn9c34mGLZLO76H/wW6MQ3OH2o8/Jz+spLCiIico6C4hOmr9vHu4l3kFNjvnrjp8nDG9b+MiCBvk6sTqYVOX1YqdzfmjJ8v9bKSxeXil5TO91otuaykMCIi53U0u4A3F+zkm7XJ2Axwd7XyYM8WPNY7Cl+NJxGpGiVFZ4STjPJ3Y6rkspJnOS8pnfF3/3Bw97m0455FYURELirxcBYvz9nGql3HAAj29eDpfjHc0SkCF40nETHH6ctKlRkbcymXlQZOhY6Dqugk7BRGRKRcDMNgYeIR/jk3kb3p9pk724T78+zNbYhv1dDk6kSkQkpdVsq4eDfmzLuWbv8IWvev0nIURkSkQgqLbfx39T7eXpREdr59PEm/tmH87cZYmjes2tatiNQPCiMiUinHcwuZtHAnX/yWTInNwM3Fwv09WjDy2ij8Pd3MLk9EnIjCiIhckqS0bF6ak8jynUcBaOjjzhPXxXBPlwhcXawmVycizkBhRESqxJIdR3hlTiK7jthvU2wd5sc/bo7lqugQkysTkdpOYUREqkxRiY0vf0vmrYU7ycgrAqDPZaH87aZYWoX4mlydiNRWCiMiUuUy84p4e1ES/129j2KbgavVwn3xzRndJ5oG3u5mlycitYzCiIhUm91Hc5g4N5GFiUcAaODtxpg+0Qy+sjluGk8iIqcojIhItVuRdJSXf0xkR1o2AK1CfPjHzW3o3TrU5MpEpDZQGBGRGlFcYuObdSm88fNOjufap7C+OiaEf9wUS0yYn8nViYiZFEZEpEZl5RcxZfEuPl21l6ISAxerhUFdm/HEdTEE+Wg8iUh9pDAiIqbYl57LxJ8Smb81DQA/T1dG94lmSHwk7q4aTyJSn5T3+7tS/2WYMmUKkZGReHp60q1bN9asWXPB7TMyMhgxYgTh4eF4eHgQExPD3LlzK3NoEanlIoN9+OC+znz10JW0CfcnO7+Yl+ck0m/SchZsS8MJ/v9HRGpYhcPIN998w9ixY3nuuefYsGEDHTp0oF+/fhw5cqTM7QsLC7nuuuvYt28fM2bMYMeOHXz00Uc0adLkkosXkdorvlVD/m9UT169/XKCfT3Ym57LQ/9dx58/+Y3Ew1lmlycitUiFL9N069aNLl26MHnyZABsNhsRERGMGjWKcePGnbP9+++/z2uvvcb27dtxc6vccy10mUbEueUUFPPekl18vHIvhcU2rBa4u0sznrw+hmBfD7PLE5FqUi2XaQoLC1m/fj19+/b94w2sVvr27cvq1avL3Gf27NnEx8czYsQIwsLCaNeuHf/85z8pKSmpyKFFxIn5erjy1xsuY9HYa7ipfTg2A75ak0yv15by/rLd5Bfpvwci9ZlrRTZOT0+npKSEsLCwUuvDwsLYvn17mfvs2bOHxYsXM3jwYObOncuuXbt47LHHKCoq4rnnnitzn4KCAgoKChw/Z2WppStSF0QEeTNl0BUM636cl37cxu8HMvnXT9t5d1ESV7ZsyFXRwfSMDqFViA8Wi8XsckWkhlQojFSGzWYjNDSUDz/8EBcXFzp16sTBgwd57bXXzhtGJk6cyAsvvFDdpYmISbpEBjHrsR7M3HiQN37ewaHMfBZtP8Ki7faxZ40DPOkZHcxV0SH0iArWrcEidVyFwkhwcDAuLi6kpaWVWp+WlkajRo3K3Cc8PBw3NzdcXFwc62JjY0lNTaWwsBB393P/IzN+/HjGjh3r+DkrK4uIiIiKlCoitZzVauH2Tk25Na4J2w5nsSIpnZW7jrJ23wkOZebz7boDfLvuABYLtGscYA8nUcF0igzEw9Xl4gcQEadRoTDi7u5Op06dWLRoEQMHDgTsnY9FixYxcuTIMvfp0aMHX375JTabDavVPkRl586dhIeHlxlEADw8PPDw0KA2kfrAarXQrkkA7ZoE8GivVpwsLGHNvuOsTDrKiqR0tqdms/lgJpsPZjJ16W683Fzo2iKIq051TmLCfHVJR8TJVfhumm+++YahQ4fywQcf0LVrVyZNmsS3337L9u3bCQsLY8iQITRp0oSJEycCkJKSQtu2bRk6dCijRo0iKSmJBx54gMcff5y///3v5Tqm7qYRqb+OZOWzclc6K5PSWbErnaPZBaVeD/XzOHVJJ5geUcGE+nmaVKmInK28398VHjNy9913c/ToUSZMmEBqaiodO3Zk3rx5jkGtycnJjg4IQEREBPPnz+eJJ56gffv2NGnShNGjR/PMM89U4rREpL4J9ffktiuactsVTTEMgx1p2azYaQ8ma/Ye40h2Ad9vOMj3Gw4CcFkjP66OCaFnVDBdWwTh6aZLOiK1naaDFxGnlV9Uwvr9J1iRlM6KpKNsPVT6zjt3VytdI4McnZPYRv5YrbqkI1JT9GwaEal3juUUsGr3MVbsPMrKXekczswv9XpDH3d6RgfTM8o+3qRRgC7piFQnhRERqdcMw2D30ZxTXZN0ft1zjLzC0pOrRYf60jM6mKujQ+jWMghv92qf7UCkXlEYERE5Q2GxjY3Jpy7p7Ern9wMZnPlfPzcXC52aB3JVdAhXRQfTtnEALrqkI3JJFEZERC4gI6+QX3YfY8WpW4gPnDhZ6vUG3m70iLLPbdIzOpimgd4mVSrivBRGRETKyTAM9h/LcwST1buPkV1QXGqblsE+jllhr2wZhJ9n5R78KVKfKIyIiFRScYmNTQcyWL4znZW70klIyaDE9sd/Kl2sFq5o1oCeUSH0jA6mQ9MAXF0q9NxRkXpBYUREpIpk5Rexevcx+8RrSUfZdyyv1Ot+nq50b9XQMd6keUMfkyoVqV0URkREqknK8TzHs3RWJqWTlV/6kk5EkJc9mEQF071VMAHeuqQj9ZPCiIhIDSixGWw+mMnKpKMsT0pnw/4TFJ9xScdqgfZNG3B1dDA9o0OIa9YAN13SkXpCYURExAQ5BcX8tueYY1bY3UdzS73u4+5CfKuG9onXYkJoGeyjB/1JnaUwIiJSCxzKOMnKXfaJ11btSud4bmGp1xsHeHJVtH0gbI+oYIJ8yn6auYgzUhgREallbDaDbYezHF2TdftOUFhic7xusUC7xgFcFW2f26RT80A8XPWgP3FeCiMiIrXcycIS1uw77niWzvbU7FKve7m50K1lED2jgrk6JoToUF9d0hGnojAiIuJkjmTlOy7prEhKJz2noNTrYf4e9IiyP0unR1QwIX4eJlUqUj4KIyIiTswwDLanZtvnNtmVzm97jlFQbCu1TWy4P1dFB3NVdDBdIoPwdNMlHaldFEZEROqQ/KIS1u8/wfIk+9wmWw9llXrd3dVK18ggx3iT2Eb+WPWgPzGZwoiISB2WnlPAql3pp2aFTSc1K7/U68G+7vYH/Z2aFTbM39OkSqU+UxgREaknDMNg99Ecx7N0ft1zjLzCklLbRIf6OoJJt5ZBeLu7mlSt1CcKIyIi9VRhsY0NySccz9L5/WAmZ/6X3s3FQqfmgY5w0q5xgC7pSLVQGBEREQBO5Bbyy+5jrNx1lOU70zmYcbLU64HebnSPCnZMWd+kgZdJlUpdozAiIiLnMAyDfcfyWJF0lBVJ6azefYycgtIP+msZ7HNqIGwIV7YMws9TD/qTylEYERGRiyoqsbEpJcMxK+ymA5mUnPGgP1erhbhmDegZFcJVMcG0bxKAqx70J+WkMCIiIhWWebKI1acu6axMSmffsbxSr/t5utKjlf324aujQ2jW0NukSsUZKIyIiMglSzme5+iarNqVTlZ+6Us6zYK86Rlt75jENPIjJswPXw/dqSN2CiMiIlKlSmwGvx/IcMwKu2H/CYpt536FNA30onWYHzGN/Ox/hvnRKtRHD/2rhxRGRESkWuUUFPPbnmP8uucY21Oz2ZmWTVpWQZnbulgtRDb0pvWp7knrMD9aN/KjeUMfXHRbcZ2lMCIiIjUuI6+QnWk57EjNYkdaNjtTc9iRlk3myaIyt3d3tRId6lu6k9LIj8YBnnpCcR2gMCIiIrWCYRgcyS5gx6nuyek/d6blcLKopMx9fD1ciQnz/aOTciqoNPTVk4qdicKIiIjUajabwYETJ9mRln2qk5LDztRsdh/NKXMsCtifuRMT9kdAsf/dV3Oh1FIKIyIi4pQKi23sO5Z7Tidl//E8zveN1aSBFzFhvo5LPa0b+dEqxBdPNw2aNZPCiIiI1CknC0vYdSSH7alZ9pByqpNy9hOLT7NaIDLYx3FHz+lOSmRDb03cVkMURkREpF7IzCti55HsUp2UHWnZZOSdZ9Csi5VWob60PtVJuexUSGnSwEuDZquYwoiIiNRbhmFwNKeAnamlOylJadnkFZ5/0Gx0mO85nZRgX3eFlEpSGBERETmLzWZwMOOko3tyupOy+2gORSVlfx0G+bjb7+w5ddvxZY38iA7zw1+DZi+qWsPIlClTeO2110hNTaVDhw68++67dO3a9aL7ff3119x7773ccsstzJo1q9zHUxgREZHqVFRiY/+xXPvkbY6gksO+Y7nnHTTbOMCz1CyzrRv5ERWqQbNnqrYw8s033zBkyBDef/99unXrxqRJk/juu+/YsWMHoaGh591v37599OzZk5YtWxIUFKQwIiIitd7JwhJ2H835YzxKmj2sHMo8/6DZ5g19Ts2R4n/qzh5fmjf0wa0eDpqttjDSrVs3unTpwuTJkwGw2WxEREQwatQoxo0bV+Y+JSUlXH311TzwwAOsWLGCjIwMhREREXFamSeL2HUku1QnZUdqNicuMGi2ZYjPOdPhN2nghbUOT4df3u/vCj1asbCwkPXr1zN+/HjHOqvVSt++fVm9evV593vxxRcJDQ3lL3/5CytWrKjIIUVERGqdAC83OjUPolPzIMc6wzBIzyksNTfK6U5KbmEJ21Pt4eVM3u4uRIf50fqMTkpMI19CfD3q1aDZCoWR9PR0SkpKCAsLK7U+LCyM7du3l7nPypUr+eSTT0hISCj3cQoKCigo+ONhS1lZWRUpU0REpMZZLBZC/DwI8fOgR1SwY73NZnAo84xBs6n2O3t2H8khr7CETSkZbErJKPVegd5upe7oad3Ij5hQPwK86+ag2QqFkYrKzs7mvvvu46OPPiI4OPjiO5wyceJEXnjhhWqsTEREpGZYrRaaBnrTNNCbPrF//M98cYmNfcfyzumk7EvP5UReEb/tPc5ve4+Xeq9G/p6l5kZpHWYfNOvl7tyDZis0ZqSwsBBvb29mzJjBwIEDHeuHDh1KRkYGP/zwQ6ntExISiIuLw8Xlj39INpsNsF/e2bFjB61atTrnOGV1RiIiIjRmRERE6rz8oj8GzZ7upOxMy+Fgxskyt7dYoHmQ9zmdlBbB5g+arZYxI+7u7nTq1IlFixY5wojNZmPRokWMHDnynO0vu+wyNm/eXGrdP/7xD7Kzs3n77beJiIgo8zgeHh54eOjJjCIiUv94urnQtnEAbRsHlFqflV9EUlrOWU8+ziY9p5B9x/LYdyyPn7elObZ3c7HQMtj+5OMzB842Dax9g2YrfJlm7NixDB06lM6dO9O1a1cmTZpEbm4u999/PwBDhgyhSZMmTJw4EU9PT9q1a1dq/wYNGgCcs15ERETOz9/TjU7NA+nUPLDU+vScgtKXek51UnIKiu13+aRlw6Y/tvdyc7E/VPCsTkqon3mDZiscRu6++26OHj3KhAkTSE1NpWPHjsybN88xqDU5ORmrtf7dSy0iImKGYF8Pgn096N7qj7GZhmFwKDP/jwncTv2ZdCSHk0UlbDqQyaYDmaXe56Vb2nJffGQNV2+n6eBFRETqieISG8nH886ZDn/fsTw+e6Ar3aPKf7NJeVTLmBERERFxXq4uVlqG+NIyxJf+l4c71ucXleBi4jgShREREZF6zuzn6Whwh4iIiJhKYURERERMpTAiIiIiplIYEREREVMpjIiIiIipFEZERETEVAojIiIiYiqFERERETGVwoiIiIiYSmFERERETKUwIiIiIqZSGBERERFTKYyIiIiIqZziqb2GYQCQlZVlciUiIiJSXqe/t09/j5+PU4SR7OxsACIiIkyuRERERCoqOzubgICA875uMS4WV2oBm83GoUOH8PPzw2KxVNn7ZmVlERERQUpKCv7+/lX2vrVJXT9HnZ/zq+vnWNfPD+r+Oer8Ks8wDLKzs2ncuDFW6/lHhjhFZ8RqtdK0adNqe39/f/86+S/Ymer6Oer8nF9dP8e6fn5Q989R51c5F+qInKYBrCIiImIqhRERERExVb0OIx4eHjz33HN4eHiYXUq1qevnqPNzfnX9HOv6+UHdP0edX/VzigGsIiIiUnfV686IiIiImE9hREREREylMCIiIiKmUhgRERERU9X5MDJlyhQiIyPx9PSkW7durFmz5oLbf/fdd1x22WV4enpy+eWXM3fu3BqqtPIqco7Tp0/HYrGUWjw9PWuw2opZvnw5AwYMoHHjxlgsFmbNmnXRfZYuXcoVV1yBh4cHUVFRTJ8+vdrrrKyKnt/SpUvP+fwsFgupqak1U3AFTZw4kS5duuDn50doaCgDBw5kx44dF93PWX4PK3N+zvY7OHXqVNq3b++YECs+Pp6ffvrpgvs4y+cHFT8/Z/v8zvavf/0Li8XCmDFjLrhdTX+GdTqMfPPNN4wdO5bnnnuODRs20KFDB/r168eRI0fK3P6XX37h3nvv5S9/+QsbN25k4MCBDBw4kC1bttRw5eVX0XME+yx7hw8fdiz79++vwYorJjc3lw4dOjBlypRybb93715uuukmevfuTUJCAmPGjOHBBx9k/vz51Vxp5VT0/E7bsWNHqc8wNDS0miq8NMuWLWPEiBH8+uuvLFiwgKKiIq6//npyc3PPu48z/R5W5vzAuX4HmzZtyr/+9S/Wr1/PunXruPbaa7nlllvYunVrmds70+cHFT8/cK7P70xr167lgw8+oH379hfczpTP0KjDunbtaowYMcLxc0lJidG4cWNj4sSJZW5/1113GTfddFOpdd26dTMefvjhaq3zUlT0HKdNm2YEBATUUHVVCzBmzpx5wW3++te/Gm3bti217u677zb69etXjZVVjfKc35IlSwzAOHHiRI3UVNWOHDliAMayZcvOu40z/h6eVp7zc+bfwdMCAwONjz/+uMzXnPnzO+1C5+esn192drYRHR1tLFiwwLjmmmuM0aNHn3dbMz7DOtsZKSwsZP369fTt29exzmq10rdvX1avXl3mPqtXry61PUC/fv3Ou73ZKnOOADk5OTRv3pyIiIiL/h+As3G2z7CyOnbsSHh4ONdddx2rVq0yu5xyy8zMBCAoKOi82zjzZ1ie8wPn/R0sKSnh66+/Jjc3l/j4+DK3cebPrzznB875+Y0YMYKbbrrpnM+mLGZ8hnU2jKSnp1NSUkJYWFip9WFhYee9vp6amlqh7c1WmXNs3bo1n376KT/88AOff/45NpuN7t27c+DAgZooudqd7zPMysri5MmTJlVVdcLDw3n//ff53//+x//+9z8iIiLo1asXGzZsMLu0i7LZbIwZM4YePXrQrl27827nbL+Hp5X3/Jzxd3Dz5s34+vri4eHBI488wsyZM2nTpk2Z2zrj51eR83PGz+/rr79mw4YNTJw4sVzbm/EZOsVTe6XqxMfHl0r83bt3JzY2lg8++ICXXnrJxMqkPFq3bk3r1q0dP3fv3p3du3fz1ltv8dlnn5lY2cWNGDGCLVu2sHLlSrNLqRblPT9n/B1s3bo1CQkJZGZmMmPGDIYOHcqyZcvO+4XtbCpyfs72+aWkpDB69GgWLFhQqwfa1tkwEhwcjIuLC2lpaaXWp6Wl0ahRozL3adSoUYW2N1tlzvFsbm5uxMXFsWvXruooscad7zP09/fHy8vLpKqqV9euXWv9F/zIkSP58ccfWb58OU2bNr3gts72ewgVO7+zOcPvoLu7O1FRUQB06tSJtWvX8vbbb/PBBx+cs60zfn4VOb+z1fbPb/369Rw5coQrrrjCsa6kpITly5czefJkCgoKcHFxKbWPGZ9hnb1M4+7uTqdOnVi0aJFjnc1mY9GiRee9FhgfH19qe4AFCxZc8NqhmSpzjmcrKSlh8+bNhIeHV1eZNcrZPsOqkJCQUGs/P8MwGDlyJDNnzmTx4sW0aNHiovs402dYmfM7mzP+DtpsNgoKCsp8zZk+v/O50PmdrbZ/fn369GHz5s0kJCQ4ls6dOzN48GASEhLOCSJg0mdYbUNja4Gvv/7a8PDwMKZPn25s27bNGD58uNGgQQMjNTXVMAzDuO+++4xx48Y5tl+1apXh6upqvP7660ZiYqLx3HPPGW5ubsbmzZvNOoWLqug5vvDCC8b8+fON3bt3G+vXrzfuuecew9PT09i6datZp3BB2dnZxsaNG42NGzcagPHmm28aGzduNPbv328YhmGMGzfOuO+++xzb79mzx/D29jaefvppIzEx0ZgyZYrh4uJizJs3z6xTuKCKnt9bb71lzJo1y0hKSjI2b95sjB492rBarcbChQvNOoULevTRR42AgABj6dKlxuHDhx1LXl6eYxtn/j2szPk52+/guHHjjGXLlhl79+41fv/9d2PcuHGGxWIxfv75Z8MwnPvzM4yKn5+zfX5lOftumtrwGdbpMGIYhvHuu+8azZo1M9zd3Y2uXbsav/76q+O1a665xhg6dGip7b/99lsjJibGcHd3N9q2bWvMmTOnhiuuuIqc45gxYxzbhoWFGTfeeKOxYcMGE6oun9O3sp69nD6noUOHGtdcc805+3Ts2NFwd3c3WrZsaUybNq3G6y6vip7fq6++arRq1crw9PQ0goKCjF69ehmLFy82p/hyKOvcgFKfiTP/Hlbm/Jztd/CBBx4wmjdvbri7uxshISFGnz59HF/UhuHcn59hVPz8nO3zK8vZYaQ2fIYWwzCM6uu7iIiIiFxYnR0zIiIiIs5BYURERERMpTAiIiIiplIYEREREVMpjIiIiIipFEZERETEVAojIiIiYiqFERFxChaLhVmzZpldhohUA4UREbmoYcOGYbFYzlluuOEGs0sTkTqgzj61V0Sq1g033MC0adNKrfPw8DCpGhGpS9QZEZFy8fDwoFGjRqWWwMBAwH4JZerUqfTv3x8vLy9atmzJjBkzSu2/efNmrr32Wry8vGjYsCHDhw8nJyen1Daffvopbdu2xcPDg/DwcEaOHFnq9fT0dG699Va8vb2Jjo5m9uzZjtdOnDjB4MGDCQkJwcvLi+jo6HPCk4jUTgojIlIlnn32WW6//XY2bdrE4MGDueeee0hMTAQgNzeXfv36ERgYyNq1a/nuu+9YuHBhqbAxdepURowYwfDhw9m8eTOzZ88mKiqq1DFeeOEF7rrrLn7//XduvPFGBg8ezPHjxx3H37ZtGz/99BOJiYlMnTqV4ODgmvsHICKVV62P4ROROmHo0KGGi4uL4ePjU2p55ZVXDMOwP732kUceKbVPt27djEcffdQwDMP48MMPjcDAQCMnJ8fx+pw5cwyr1WqkpqYahmEYjRs3Nv7+97+ftwbA+Mc//uH4OScnxwCMn376yTAMwxgwYIBx//33V80Ji0iN0pgRESmX3r17M3Xq1FLrgoKCHH+Pj48v9Vp8fDwJCQkAJCYm0qFDB3x8fByv9+jRA5vNxo4dO7BYLBw6dIg+ffpcsIb27ds7/u7j44O/vz9HjhwB4NFHH+X2229nw4YNXH/99QwcOJDu3btX6lxFpGYpjIhIufj4+Jxz2aSqeHl5lWs7Nze3Uj9bLBZsNhsA/fv3Z//+/cydO5cFCxbQp08fRowYweuvv17l9YpI1dKYERGpEr/++us5P8fGxgIQGxvLpk2byM3Ndby+atUqrFYrrVu3xs/Pj8jISBYtWnRJNYSEhDB06FA+//xzJk2axIcffnhJ7yciNUOdEREpl4KCAlJTU0utc3V1dQwS/e677+jcuTM9e/bkiy++YM2aNXzyyScADB48mOeee46hQ4fy/PPPc/ToUUaNGsV9991HWFgYAM8//zyPPPIIoaGh9O/fn+zsbFatWsWoUaPKVd+ECRPo1KkTbdu2paCggB9//NERhkSkdlMYEZFymTdvHuHh4aXWtW7dmu3btwP2O12+/vprHnvsMcLDw/nqq69o06YNAN7e3syfP5/Ro0fTpUsXvL29uf3223nzzTcd7zV06FDy8/N56623eOqppwgODuaOO+4od33u7u6MHz+effv24eXlxVVXXcXXX39dBWcuItXNYhiGYXYRIuLcLBYLM2fOZODAgWaXIiJOSGNGRERExFQKIyIiImIqjRkRkUumq70icinUGRERERFTKYyIiIiIqRRGRERExFQKIyIiImIqhRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERU/0/7tHpNxMrILEAAAAASUVORK5CYII=\n" }, "metadata": {} }, @@ -835,7 +846,7 @@ "text/plain": [ "
" ], - "image/png": "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339Pz549XevfcsstJCQkFGtz+PBh7r33XurWrYu/vz+dOnVi3bp1rsf/+9//0rlzZ3x8fAgNDeW2224rts1fffVVseerU6cO8+bNA+DAgQNYLBY++eQT+vTpg4+PDwsWLOD48ePce++9NGzYED8/P9q2bcvHH39c7HkcDgf/+Mc/iIuLw2az0bhxY1577TUA+vfvz9ixY4u1T0tLw9vbm/j4+DK9NyIiVSEnv4jfDp/i842H+dv/dvHQvzfQ55/LaDXxe25+axUHjueYVluNO0xjGAanC+2mvLavl0eZehumTp3Knj17aNOmDa+88goA27dvB2D8+PG88cYbxMTEEBISwqFDh7jpppt47bXXsNlsfPDBBwwePJjdu3fTuHHjUl/j5Zdf5h//+Af//Oc/mTZtGsOGDePgwYPUrVu3xPa5ubm88cYbfPjhh1itVu677z6efvppFixYAMDf//53FixYwPvvv0+rVq2YOnUqX331Ff369SvTe5OTk8O4ceNo164d2dnZTJw4kdtuu40tW7ZgtVrJzs6mT58+NGzYkEWLFlG/fn02bdrkmlX322+/5bbbbuO5557jgw8+oKCggO+++65Mr32+8ePH8+abb3L11Vfj4+NDXl4eHTt25NlnnyUoKIhvv/2W+++/n9jYWLp06QLAhAkTmD17Nv/617/o2bMnx44dY9euXQA89NBDjB07ljfffBObzQbA/PnzadiwIf379y93fSIiVyorr5B9qdnsTc12/puSxZ6UbI6cOl3qOnX8vEjNyicuPLAKKz2nxoWR04V2Wk/8wZTX3vHKIPy8L/2WBgcH4+3tjZ+fH/Xr1wdw7dxeeeUVrrvuOlfbunXr0r59e9f9V199lS+//JJFixZd8Bf5+UaOHMm9994LwOuvv85bb73F+vXrueGGG0psX1hYyMyZM4mNjQVg7NixrqAEMG3aNCZMmODqjZg+fXq5wsAdd9xR7P7cuXMJCwtjx44dtGnTho8++oi0tDQ2bNjgCkxxcXGu9q+99hr33HMPL7/8smvZ+e9LWT311FPcfvvtxZY9/fTTrp+feOIJfvjhB/7zn//QpUsXsrKymDp1KtOnT2fEiBEAxMbG0rNnTwBuv/12xo4dy9dff83dd98NOHuaRo4cWesPg4lI5crILWRvahZ7U7PZm5LN3tQs9qVmcywjr9R1QgO8iQsP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1avp27cvfn5+hISEMGjQIE6ePAk4Byr/4x//IC4uDpvNRuPGjXnttdcAZ2+YxWLh1KlTrufasmULFovFNTPrvHnzqFOnDosWLaJ169bYbDaSkpLYsGED1113HaGhoQQHB9OnTx82bdpUrK5Tp07xyCOPEBERgY+PD23atOGbb74hJyeHoKCgC6Zh/+qrr/D39ycrK+uy3y+R2ux4dj6fbTzMY/M3cs2ri7l/znrmrTlA0olcvD2s9Gkexqu3XsWqZ/vx/VO9efaGltzUNpJmEYEKInJZal7PiGFAYe6l21UGLz/naKwyuOuuu3jiiSdYtmwZAwYMAODEiRN8//33fPfdd2RnZ3PTTTfx2muvYbPZ+OCDDxg8eDC7d+++rOu8WK1W3nrrLZo2bUpiYiKPP/44zzzzDG+//TbgDA8DBgzggQceYOrUqXh6erJs2TLX5HQTJkxg9uzZ/Otf/6Jnz54cO3as1InuSpObm8vf//533nvvPerVq0d4eDiJiYmMGDGCadOmYRgGb775JjfddBN79+4lMDAQh8PBjTfeSFZWFvPnzyc2NpYdO3bg4eGBv78/99xzD++//z533nmn63XO3g8MDCz3+yRSGxmGwe6ULOJ3Og+/bD50qtispaEBNga0DKd/q3B6xoXir4GlUsFq3v+owlx4vYE5r/3/joK3f5mahoSEcOONN/LRRx+5wshnn31GaGgo/fr1w2q10r59e1f7V199lS+//JJFixZd8jTqkpw/yDU6Opq//vWvPProo64w8o9//INOnTq57gNcddVVAGRlZTF16lSmT5/OiBEjAIiNjaVnz57lqqGwsJC333672Hb179+/WJtZs2ZRp04dVqxYwS233MKSJUtYv349O3fupHnz5gDF5qh56KGH6N69O8eOHSMyMpLU1FS+++67K+pFEqkN8grt/Jx4nKW7UonfmXrBDKZXNQhiQMtwBrSKoG3DYF2TRSpVzQsjbmTYsGE8/PDDvP3229hsNhYsWMA999yD1WolOzubl156iW+//ZZjx45RVFTE6dOnSUpKuqzXWrJkCZMmTWLXrl1kZmZSVFREXl4eubm5+Pn5sWXLFu66664S1925cyf5+fmu0HS5vL29adeuXbFlKSkpPP/88yxfvpzU1FTsdju5ubmu7dyyZQuNGjVyBZHf69KlC1dddRX//ve/GT9+PPPn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q666CpvNRmRkJGPHji32eHp6Orfddht+fn40a9aMRYsWuR47efIkw4YNIywsDF9fX5o1a3ZBeBKR6klhREQqxAsvvMAdd9zBr7/+yrBhw7jnnnvYuXMnADk5OQwaNIiQkBA2bNjAp59+ypIlS4qFjXfeeYcxY8YwevRotm7dyqJFi4iLiyv2Gi+//DJ33303v/32GzfddBPDhg3jxIkTrtffsWMH//vf/9i5cyfvvPMOoaGhVfcGiMjlq9TL8IlIjTBixAjDw8PD8Pf3L3Z77bXXDMNwXr320UcfLbZO165djccee8wwDMOYNWuWERISYmRnZ7se//bbbw2r1WokJycbhmEYDRo0MJ577rlSawCM559/3nU/OzvbAIz//e9/hmEYxuDBg41Ro0ZVzAaLSJXSmBERKZN+/frxzjvvFFtWt25d18/dunUr9li3bt3YsmULADt37qR9+/b4+/u7Hu/RowcOh4Pdu3djsVg4evQoAwYMuGgN7dq1c/3s7+9PUFAQqampADz22GPccccdbNq0ieuvv54hQ4bQvXv3y9pWEalaCiMiUib+/v4XHDapKL6+vmVq5+XlVey+xWLB4XAAcOONN3Lw4EG+++47Fi9ezIABAxgzZgxvvPFGhdcrIhVLY0ZEpEL8/PPPF9xv1aoVAK1ateLXX38lJyfH9fjq1auxWq20aNGCwMBAoqOjiY+Pv6IawsLCGDFiBPPnz2fKlCnMmjXrip5PRKqGekZEpEzy8/NJTk4utszT09M1SPTTTz+lU6dO9OzZkwULFrB+/XrmzJkDwLBhw3jxxRcZMWIEL730EmlpaTzxxBPcf//9REREAPDSSy/x6KOPEh4ezo033khWVharV6/miSeeKFN9EydOpGPHjlx11VXk5+fzzTffuMKQiFRvCiMiUibff/89kZGRxZa1aNGCXbt2Ac4zXRYuXMjjjz9OZGQkH3/8Ma1btwbAz8+PH374gSeffJLOnTvj5+fHHXfcweTJk13PNWLECPLy8vjXv/7F008/TWhoKHfeeWeZ6/P29mbChAkcOHAAX19fevXqxcKFCytgy0WkslkMwzDMLkJE3JvFYuHLL79kyJAhZpciIm5IY0ZERETEVAojIiIiYiqNGRGRK6ajvSJyJdQzIiIiIqZSGBERERFTKYyIiIiIqRRGRERExFQKIyIiImIqhRERERExlcKIiIiImEphREREREylMCIiIiKm+v+6qdqFF56mUwAAAABJRU5ErkJggg==\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABf+0lEQVR4nO3deVhUZf8G8HtmYIZ9k31RFBB3cSXc1zDLX1rm8pqipqapr8ZrqW8ulRmtpqlpmUulpmVavmmaklouiam4i4oioKwqOwwwc35/DIyMLDIIHGbm/lwXV86Zc2a+h5G4/T7PeY5EEAQBRERERCKRil0AERERmTaGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISFcMIkQn74osvIJFIEBwcLHYpRGTCJLw3DZHp6t69O+7evYu4uDhcv34d/v7+YpdERCaInREiE3Xr1i0cP34cy5Ytg4uLC7Zs2SJ2SRXKzc0VuwQiqmMMI0QmasuWLXB0dMSzzz6L4cOHVxhGMjIy8Prrr8PX1xcKhQLe3t4YN24c0tPTtfsUFBTg7bffRvPmzWFhYQEPDw+88MILiI2NBQAcPnwYEokEhw8f1nntuLg4SCQSbNq0Sbtt/PjxsLGxQWxsLAYPHgxbW1uMGTMGAPDXX3/hpZdeQuPGjaFQKODj44PXX38d+fn55eq+evUqRowYARcXF1haWiIwMBBvvfUWAODQoUOQSCTYtWtXueO2bt0KiUSCEydO6P39JKKaMxO7ACISx5YtW/DCCy9ALpdj9OjRWLNmDU6dOoUuXboAAHJyctCzZ09cuXIFEydORMeOHZGeno7du3cjMTERzs7OUKlUeO655xAZGYlRo0Zh1qxZyM7OxoEDB3Dx4kX4+fnpXVdxcTFCQ0PRo0cPfPLJJ7CysgIA/Pjjj8jLy8O0adPQqFEjREVFYeXKlUhMTMSPP/6oPf78+fPo2bMnzM3NMWXKFPj6+iI2Nhb/+9//sHTpUvTp0wc+Pj7YsmULhg0bVu574ufnh5CQkCf4zhKR3gQiMjn//POPAEA4cOCAIAiCoFarBW9vb2HWrFnafRYtWiQAEHbu3FnueLVaLQiCIGzYsEEAICxbtqzSfQ4dOiQAEA4dOqTz/K1btwQAwsaNG7XbwsLCBADCvHnzyr1eXl5euW0RERGCRCIRbt++rd3Wq1cvwdbWVmdb2XoEQRDmz58vKBQKISMjQ7stNTVVMDMzExYvXlzufYiobnGYhsgEbdmyBW5ubujbty8AQCKRYOTIkdi2bRtUKhUA4KeffkL79u3LdQ9K9y/dx9nZGTNnzqx0n5qYNm1auW2WlpbaP+fm5iI9PR3dunWDIAg4e/YsACAtLQ1//vknJk6ciMaNG1daz7hx46BUKrFjxw7ttu3bt6O4uBgvv/xyjesmopphGCEyMSqVCtu2bUPfvn1x69Yt3LhxAzdu3EBwcDBSUlIQGRkJAIiNjUWbNm2qfK3Y2FgEBgbCzKz2RnzNzMzg7e1dbnt8fDzGjx8PJycn2NjYwMXFBb179wYAZGZmAgBu3rwJAI+tu0WLFujSpYvOPJktW7bgqaee4hVFRCLgnBEiE/PHH38gKSkJ27Ztw7Zt28o9v2XLFjz99NO19n6VdUhKOzCPUigUkEql5fYdOHAg7t+/j7lz56JFixawtrbGnTt3MH78eKjVar3rGjduHGbNmoXExEQolUr8/fffWLVqld6vQ0RPjmGEyMRs2bIFrq6uWL16dbnndu7ciV27dmHt2rXw8/PDxYsXq3wtPz8/nDx5EkVFRTA3N69wH0dHRwCaK3PKun37drVrvnDhAq5du4ZvvvkG48aN024/cOCAzn7NmjUDgMfWDQCjRo1CeHg4vv/+e+Tn58Pc3BwjR46sdk1EVHs4TENkQvLz87Fz504899xzGD58eLmvGTNmIDs7G7t378aLL76Ic+fOVXgJrFCyVuKLL76I9PT0CjsKpfs0adIEMpkMf/75p87zX3zxRbXrlslkOq9Z+ucVK1bo7Ofi4oJevXphw4YNiI+Pr7CeUs7OznjmmWewefNmbNmyBYMGDYKzs3O1ayKi2sPOCJEJ2b17N7Kzs/F///d/FT7/1FNPaRdA27p1K3bs2IGXXnoJEydORKdOnXD//n3s3r0ba9euRfv27TFu3Dh8++23CA8PR1RUFHr27Inc3FwcPHgQr732Gp5//nnY29vjpZdewsqVKyGRSODn54dff/0Vqamp1a67RYsW8PPzw5w5c3Dnzh3Y2dnhp59+woMHD8rt+/nnn6NHjx7o2LEjpkyZgqZNmyIuLg579uxBdHS0zr7jxo3D8OHDAQBLliyp/jeSiGqXmJfyEFH9GjJkiGBhYSHk5uZWus/48eMFc3NzIT09Xbh3754wY8YMwcvLS5DL5YK3t7cQFhYmpKena/fPy8sT3nrrLaFp06aCubm54O7uLgwfPlyIjY3V7pOWlia8+OKLgpWVleDo6Ci8+uqrwsWLFyu8tNfa2rrCui5fviwMGDBAsLGxEZydnYXJkycL586dK/cagiAIFy9eFIYNGyY4ODgIFhYWQmBgoLBw4cJyr6lUKgVHR0fB3t5eyM/Pr+Z3kYhqG+9NQ0Qmq7i4GJ6enhgyZAjWr18vdjlEJotzRojIZP38889IS0vTmRRLRPWPnREiMjknT57E+fPnsWTJEjg7O+PMmTNil0Rk0tgZISKTs2bNGkybNg2urq749ttvxS6HyOSxM0JERESiYmeEiIiIRMUwQkRERKIyiEXP1Go17t69C1tb2ye6EygRERHVH0EQkJ2dDU9Pz3L3nCrLIMLI3bt34ePjI3YZREREVAMJCQkV3o27lEGEEVtbWwCak7GzsxO5GiIiIqqOrKws+Pj4aH+PV8Ygwkjp0IydnR3DCBERkYF53BQLTmAlIiIiUTGMEBERkagYRoiIiEhUBjFnpDrUajUKCwvFLoPosczNzSGTycQug4iowTCKMFJYWIhbt25BrVaLXQpRtTg4OMDd3Z3r5hARwQjCiCAISEpKgkwmg4+PT5WLqhCJTRAE5OXlITU1FQDg4eEhckVEROIz+DBSXFyMvLw8eHp6wsrKSuxyiB7L0tISAJCamgpXV1cO2RCRyTP4NoJKpQIAyOVykSshqr7S4FxUVCRyJURE4jP4MFKKY+9kSPj3lYjoIaMJI0RERGSYGEaMgK+vL5YvX17t/Q8fPgyJRIKMjIw6q4mIiKi6DH4Cq6Hq06cPgoKC9AoRlTl16hSsra2rvX+3bt2QlJQEe3v7J35vIiKiJ8XOSAMlCAKKi4urta+Li4teVxLJ5XKucQFOHiUiAgBlsQpn4x9ArRZEq4FhRATjx4/HkSNHsGLFCkgkEkgkEmzatAkSiQS//fYbOnXqBIVCgaNHjyI2NhbPP/883NzcYGNjgy5duuDgwYM6r/foMI1EIsHXX3+NYcOGwcrKCgEBAdi9e7f2+UeHaTZt2gQHBwfs378fLVu2hI2NDQYNGoSkpCTtMcXFxfj3v/8NBwcHNGrUCHPnzkVYWBiGDh1arXPet28fevTooT3+ueeeQ2xsrM4+iYmJGD16NJycnGBtbY3OnTvj5MmT2uf/97//oUuXLrCwsICzszOGDRumc84///yzzus5ODhg06ZNAIC4uDhIJBJs374dvXv3hoWFBbZs2YJ79+5h9OjR8PLygpWVFdq2bYvvv/9e53XUajU++ugj+Pv7Q6FQoHHjxli6dCkAoF+/fpgxY4bO/mlpaZDL5YiMjKzW94aIqL4IgoBb6bnYdTYRi3+5iOdXHUWbxfsx7IvjuHUvV7S6jC6MCIKAvMJiUb4EoXqpcsWKFQgJCcHkyZORlJSEpKQk+Pj4AADmzZuHDz74AFeuXEG7du2Qk5ODwYMHIzIyEmfPnsWgQYMwZMgQxMfHV/ke77zzDkaMGIHz589j8ODBGDNmDO7fv1/p/nl5efjkk0/w3Xff4c8//0R8fDzmzJmjff7DDz/Eli1bsHHjRhw7dgxZWVnlfvlXJTc3F+Hh4fjnn38QGRkJqVSKYcOGaVfNzcnJQe/evXHnzh3s3r0b586dw5tvvql9fs+ePRg2bBgGDx6Ms2fPIjIyEl27dq32+5eaN28eZs2ahStXriA0NBQFBQXo1KkT9uzZg4sXL2LKlCkYO3YsoqKitMfMnz8fH3zwARYuXIjLly9j69atcHNzAwBMmjQJW7duhVKp1O6/efNmeHl5oV+/fnrXR0RUmzLyCnE4JhXLD15D2IYodFhyAH0/OYzXt5/DNydu41xiJopUApys5UjOLBCtTqObM5JfpEKrRftFee/L74bCSv74b6m9vT3kcjmsrKzg7u4OALh69SoA4N1338XAgQO1+zo5OaF9+/bax0uWLMGuXbuwe/fucv8iL2v8+PEYPXo0AOD999/H559/jqioKAwaNKjC/YuKirB27Vr4+fkBAGbMmIF3331X+/zKlSsxf/58bTdi1apV2Lt372PPtdSLL76o83jDhg1wcXHB5cuX0aZNG2zduhVpaWk4deoUnJycAAD+/v7a/ZcuXYpRo0bhnXfe0W4r+32prtmzZ+OFF17Q2VY2dM2cORP79+/HDz/8gK5duyI7OxsrVqzAqlWrEBYWBgDw8/NDjx49AAAvvPACZsyYgV9++QUjRowAoOk0jR8/3uSHwYiofhUWq3ElKQvRCRnar1vp5bsdcpkUrb3sEOTjgCAfB3TwcYSPk6Wo/88yujBi6Dp37qzzOCcnB2+//Tb27NmDpKQkFBcXIz8//7GdkXbt2mn/bG1tDTs7O+0S5BWxsrLSBhFAs0x56f6ZmZlISUnR6UTIZDJ06tSp2vcDun79OhYtWoSTJ08iPT1de1x8fDzatGmD6OhodOjQQRtEHhUdHY3JkydX672q8uj3V6VS4f3338cPP/yAO3fuoLCwEEqlUjsH58qVK1Aqlejfv3+Fr2dhYYGxY8diw4YNGDFiBM6cOYOLFy/qDIsREdU2QRCQcD8fZxMeaIPHpbtZKCwu//9k30ZW2uAR1NgRLT1soTBrWCs/G10YsTSX4fK7oaK995N69KqYOXPm4MCBA/jkk0/g7+8PS0tLDB8+/LF3KDY3N9d5LJFIqgwOFe1f3WGn6hgyZAiaNGmCdevWwdPTE2q1Gm3atNGeR+kS6ZV53PMV1VvRBNVHv78ff/wxVqxYgeXLl6Nt27awtrbG7Nmzq10XoBmqCQoKQmJiIjZu3Ih+/fqhSZMmjz2OiKi6MvOLcK5Mx+NcQgbu5Zb/PeBgZY723qXBwwFB3g5wtG74K5QbXRiRSCTVGioRm1wu1y5lX5Vjx45h/Pjx2uGRnJwcxMXF1XF1uuzt7eHm5oZTp06hV69eADQdhTNnziAoKOixx9+7dw8xMTFYt24devbsCQA4evSozj7t2rXD119/jfv371fYHWnXrh0iIyMxYcKECt/DxcVFZ8Lt9evXkZeX99jajh07hueffx4vv/wyAM1k1WvXrqFVq1YAgICAAFhaWiIyMhKTJk2q8DXatm2Lzp07Y926ddi6dStWrVr12PclIqpMkUqNmORsnE3IQHR8Bs4mPMDNtPLDLeYyCVp52D0MHj6O8G1kZZBDxDX6rb169Wp8/PHHSE5ORvv27bFy5cpKJxMWFRUhIiIC33zzDe7cuYPAwEB8+OGHlc5dMBW+vr44efIk4uLiYGNjU2nXIiAgADt37sSQIUMgkUiwcOHCag+N1KaZM2ciIiIC/v7+aNGiBVauXIkHDx5U6y+9o6MjGjVqhK+++goeHh6Ij4/HvHnzdPYZPXo03n//fQwdOhQRERHw8PDA2bNn4enpiZCQECxevBj9+/eHn58fRo0aheLiYuzduxdz584FoLmqZdWqVQgJCYFKpcLcuXPLdXsqEhAQgB07duD48eNwdHTEsmXLkJKSog0jFhYWmDt3Lt58803I5XJ0794daWlpuHTpEl555RXt60yaNAkzZsyAtbW1zlU+RERVEQQBdzLyNR2PeE3X48KdTCgrGG5p7FR2uMUBrTzsYFELHfmGQO8wsn37doSHh2Pt2rUIDg7G8uXLERoaipiYGLi6upbbf8GCBdi8eTPWrVuHFi1aYP/+/Rg2bBiOHz+ODh061MpJGKI5c+YgLCwMrVq1Qn5+PjZu3FjhfsuWLcPEiRPRrVs3ODs7Y+7cucjKyqrnaoG5c+ciOTkZ48aNg0wmw5QpUxAaGlqtO85KpVJs27YN//73v9GmTRsEBgbi888/R58+fbT7yOVy/P777/jPf/6DwYMHo7i4GK1atcLq1asBaBaJ+/HHH7FkyRJ88MEHsLOz03ZpAODTTz/FhAkT0LNnT3h6emLFihU4ffr0Y2tbsGABbt68idDQUFhZWWHKlCkYOnQoMjMztfssXLgQZmZmWLRoEe7evQsPDw9MnTpV53VGjx6N2bNnY/To0bCwsHjs+xKRacouKML5xExEJ2TgbEn4SM9RltvPzsIM7X0c0KEkeLT3dkAjG4UIFdcPiaDnxIDg4GB06dJF24pWq9Xw8fHBzJkzy/1rFwA8PT3x1ltvYfr06dptL774IiwtLbF58+ZqvWdWVhbs7e2RmZkJOzs7necKCgpw69YtNG3alL8E6pFarUbLli0xYsQILFmyROxyRBcXFwc/Pz+cOnUKHTt2fOz+/HtLZPyKVWrEpGTrdD1upOXg0d+6ZlIJWnjYlnQ9HBHk44BmztaQSg1vuOVRVf3+LkuvzkhhYSFOnz6N+fPna7dJpVIMGDAAJ06cqPAYpVJZ7n+2lpaW5eYMPHpM2XUbxOgEkK7bt2/j999/R+/evaFUKrFq1SrcunUL//rXv8QuTVRFRUW4d+8eFixYgKeeeqpaQYSIjFNSZr42dJyN1wy35BeVnxvo5WCJoMYlXQ8fB7Txsjea4Zaa0iuMpKenQ6VSaRd8KuXm5qZdJ+NRoaGhWLZsGXr16gU/Pz9ERkZi586dVU7ejIiI0FlPgsQnlUqxadMmzJkzB4IgoE2bNjh48CBatmyJ+Ph47RyLily+fBmNGzeux2rrz7Fjx9C3b180b94cO3bsELscIqonucpi7XBLdMnltSlZ5YdbbBVmaOdjr9P1cLE13uGWmqrzy05WrFiByZMno0WLFpBIJPDz88OECROwYcOGSo+ZP38+wsPDtY+zsrK0K5SSOHx8fHDs2LEKn/P09ER0dHSlx3p6etZRVeLr06dPrV4CTUQNj0ot4HpqtrbrEZ2QgWsp2Xj0Vi4yqQSBbrYlV7ZoOh9+LjZGMdxS1/QKI87OzpDJZEhJSdHZnpKSol1J9FEuLi74+eefUVBQgHv37sHT0xPz5s1Ds2bNKn0fhUIBhYLJ0VCYmZnprJZKRGTIUrIKtJNLoxMe4EJiJnILy3fzPe0ttMEjyMcRbbzsDGJpiYZIr++aXC5Hp06dEBkZqb1BmlqtRmRkZJVLkwOaSyS9vLxQVFSEn376Sbt0NhERkVjyC1W4cCcT0QkPtAEkqYJ7tFjLZWjrbY8OjR21XQ9XO04+ry16R7jw8HCEhYWhc+fO6Nq1K5YvX47c3FztYlTjxo2Dl5cXIiIiAAAnT57EnTt3EBQUhDt37uDtt9+GWq3Gm2++WbtnQkREVAW1WkBsWo5mMbGSK1xiUrKhemS8RSoBmrvZ6qzpEeBqCxmHW+qM3mFk5MiRSEtLw6JFi5CcnIygoCDs27dPO6k1Pj4eUunDmwEXFBRo13KwsbHB4MGD8d1338HBwaHWToKIiOhRadlKnQmm5xMyka0sLrefm51CZ4JpO297WCs43FKf9F5nRAxcZ4SMDf/eEtWugiIVLt4pWUyspOtxJyO/3H6W5iXDLWW6Hh72j78HFdVMnawzQkREJDa1WsCte7na+7ZEJ2TgalI2ih8ZbpFIgABXG52uR3M3G5jJpJW8MomFYcSA+fr6Yvbs2Zg9e7bYpRAR1Zn7uYWaoZZ4TdfjXEIGsgrKD7c422iGWzqULCjW1tsethaPv0cViY9hhIiIGgxlsQqX7mbprOkRf7/8HbgVZlK09bIvc8daB3g5WBrkHWuJYYREolKpIJFIdCY7E5FpEQQBcffytF2P6IQMXE7KQpGq/FRGPxdrzVBLSdcj0N0W5hxuMRr8JEXy1VdfwdPTE2q17m2in3/+eUycOBGxsbF4/vnn4ebmBhsbG3Tp0gUHDx6s8fstW7YMbdu2hbW1NXx8fPDaa68hJydHZ59jx46hT58+sLKygqOjI0JDQ/HgwQMAmvVkPvroI/j7+0OhUKBx48ZYunQpAODw4cOQSCTIyMjQvlZ0dDQkEgni4uIAAJs2bYKDgwN2796NVq1aQaFQID4+HqdOncLAgQPh7OwMe3t79O7dG2fOnNGpKyMjA6+++irc3NxgYWGBNm3a4Ndff0Vubi7s7OzKLcP+888/w9raGtnZ2TX+fhFR7XuQW4hDMan47MA1hG2IQoclB9D3k8N4ffs5fHPiNs4lZqJIJaCRtRz9W7jiPwOb47tXuuLc4qcR+Z8++HREe4x9qgnaeNkziBgZ4+uMCAJQVL6lVy/MrTQzpqrhpZdewsyZM3Ho0CH0798fAHD//n3s27cPe/fuRU5ODgYPHoylS5dCoVDg22+/xZAhQxATE1Oj+7xIpVJ8/vnnaNq0KW7evInXXnsNb775Jr744gsAmvDQv39/TJw4EStWrICZmRkOHTqkvYfQ/PnzsW7dOnz22Wfo0aMHkpKSKr0fUWXy8vLw4Ycf4uuvv0ajRo3g6uqKmzdvIiwsDCtXroQgCPj0008xePBgXL9+Hba2tlCr1XjmmWeQnZ2NzZs3w8/PD5cvX4ZMJoO1tTVGjRqFjRs3Yvjw4dr3KX1sa2ur9/eJiGpHYbEaV5KytEMt0QkZuJWeW24/uZkUbTztdLoe3o4cbjE1xhdGivKA90W6F8p/7wJy62rt6ujoiGeeeQZbt27VhpEdO3bA2dkZffv2hVQqRfv27bX7L1myBLt27cLu3bsfu9ptRcpOcvX19cV7772HqVOnasPIRx99hM6dO2sfA0Dr1q0BANnZ2VixYgVWrVqFsLAwAICfnx969OihVw1FRUX44osvdM6rX79+Ovt89dVXcHBwwJEjR/Dcc8/h4MGDiIqKwpUrV9C8eXMA0LmVwKRJk9CtWzckJSXBw8MDqamp2Lt37xN1kYhIP4IgIOF+vvbKluiEDFy6m4XCYnW5fZs6W2sXE+vQ2AEt3O0gN2OXw9QZXxgxIGPGjMHkyZPxxRdfQKFQYMuWLRg1ahSkUilycnLw9ttvY8+ePUhKSkJxcTHy8/MRHx9fo/c6ePAgIiIicPXqVWRlZaG4uBgFBQXIy8uDlZUVoqOj8dJLL1V47JUrV6BUKrWhqabkcjnatWunsy0lJQULFizA4cOHkZqaCpVKhby8PO15RkdHw9vbWxtEHtW1a1e0bt0a33zzDebNm4fNmzejSZMm6NWr1xPVSkSVy8wvwrkyHY9zCRm4l1tYbj8HK/OHq5iWfDlYyUWomBo64wsj5laaDoVY762HIUOGQBAE7NmzB126dMFff/2Fzz77DAAwZ84cHDhwAJ988gn8/f1haWmJ4cOHo7Cw/A/848TFxeG5557DtGnTsHTpUjg5OeHo0aN45ZVXUFhYCCsrK1haVr7oT1XPAdBOQi27fl5RUVGFr/No6zUsLAz37t3DihUr0KRJEygUCoSEhGjP83HvDWi6I6tXr8a8efOwceNGTJgwgS1eolpSpFLjalK25t4tJeHjZloFwy0yKVp62j1cTMzHAU0aWfFnkarF+MKIRFLtoRKxWVhY4IUXXsCWLVtw48YNBAYGomPHjgA0k0nHjx+PYcOGAQBycnK0k0H1dfr0aajVanz66afa4PDDDz/o7NOuXTtERkbinXfeKXd8QEAALC0tERkZiUmTJpV73sXFBQCQlJQER0dHAJqORnUcO3YMX3zxBQYPHgwASEhIQHp6uk5diYmJuHbtWqXdkZdffhlvvvkmPv/8c1y+fFk7lERE+hEEAXcy8rX3bTmbkIGLdzKhrGC4pUkjK52ORytPOyjMZCJUTcbA+MKIgRkzZgyee+45XLp0CS+//LJ2e0BAAHbu3IkhQ4ZAIpFg4cKF5a68qS5/f38UFRVh5cqVGDJkCI4dO4a1a9fq7DN//ny0bdsWr732GqZOnQq5XI5Dhw7hpZdegrOzM+bOnYs333wTcrkc3bt3R1paGi5duoRXXnkF/v7+8PHxwdtvv42lS5fi2rVr+PTTT6tVW0BAAL777jt07twZWVlZeOONN3S6Ib1790avXr3w4osvYtmyZfD398fVq1chkUgwaNAgAJr5Ny+88ALeeOMNPP300/D29q7R94nI1GQXFOF8YskS6iWX1qbnKMvtZ29pjval8zx8HNDexwFO1hxuodrDMCKyfv36wcnJCTExMfjXv/6l3b5s2TJMnDgR3bp104aBrKysGr1H+/btsWzZMnz44YeYP38+evXqhYiICIwbN067T/PmzfH777/jv//9L7p27QpLS0sEBwdj9OjRAICFCxfCzMwMixYtwt27d+Hh4YGpU6cCAMzNzfH9999j2rRpaNeuHbp06YL33nuv0jkoZa1fvx5TpkxBx44d4ePjg/fffx9z5szR2eenn37CnDlzMHr0aOTm5sLf3x8ffPCBzj6vvPIKtm7diokTJ9boe0Rk7IpVasSkZGu7HtEJGbiRloNH705mJpWgpYedziTTps7WHG6hOsUb5ZFR+O677/D666/j7t27kMsb/r/Y+PeW6pIgCEjKLHh4WW18Bi7cyUR+karcvt6OljrBo7WnPSzMOdxCtYM3yiOTkJeXh6SkJHzwwQd49dVXDSKIENW2HGUxzidm6HQ9UrPLD7fYKsy0wy1BJcMtLrYKESom0sUwYgS2bNmCV199tcLnmjRpgkuXLtVzRfXno48+wtKlS9GrVy/Mnz9f7HKI6pxKLeB6arbOvVuupWTjkRvWQiaVoIW7rU7Xo5mzDaRSDrdQw8NhGiOQnZ2NlJSUCp8zNzdHkyZN6rkiehz+vaXqSskq0E4ujU54gAuJmcgtLD/c4uXwcLglqLED2njaw1LO4RYSF4dpTIitrS2XPicyAnmFxbhQcnVL6VdSZkG5/azlMrTzfni32g4+DnC1Y6glw8UwQkQkArVawI20HO16HqXDLapHxlukEqC5my06NC6d6+EIf1cbyDjcQkbEaMKIAYw2EWnVdM0YMlyp2QU68zzOJ2YiR1lcbj93OwvtUEuQjwPaetnDWmE0/6smqpDB/w03NzeHRCJBWloaXFxceC08NWiCIKCwsBBpaWmQSqW8+sdIFRSpcPFOyWJiJVe43MnIL7eflVyGtl722rvVBvk4wt2ewy1kegw+jMhkMnh7eyMxMbHGy6UT1TcrKys0btxYuzw/GS61WsDN9FztBNPohAxcTcpG8SPDLRIJ0NzVVqfrEeBqAzMZ/w4QGXwYAQAbGxsEBARUeHM2ooZGJpPBzMyMXTwDdS9HqTPBNDohA9kF5YdbXGwVDy+r9XFAW2972FqYi1AxUcNnFGEE0PwPXibjZWxEVHsKilS4dDerTPB4gIT75YdbLMylmuGWkqGWoMYO8LS3YOAkqiajCSNERE9CEATc0g63aL6uJGWhSFV+cry/q43OHWsD3W1hzuEWohpjGCEik/QgtxDRiQ+XTz+XmIGMvPJDvc428jLBwxHtfOxhx+EWolrFMEJERk9ZrMKVpGxExz/Qdj3i7uWV209hJkUb7XCL5svb0ZLDLUR1jGGEiIyKIAiIv5+nuay2pOtx+W4WClXl13Zp5mytvW9LkI8jWnhwuIVIDAwjRGTQMvOKygy3PMC5xEzczy0st5+jlbnOBNMgbwfYW3G4haghYBghIoNRpFLjalI2ziY80M71uJmeW24/uUyKVp52ZboeDmjsZMXhFqIGimGEiBokQRCQ+CBf5+qWi3cyoSwuP9zi28iqzB1rHdHSwxYKM17qT2QoGEaIqEHIKijC+YRM7Sqm0QkZSM8pP9xib2leJnhohlscrbmsPpEhYxghItHEpuXg679u4VTcfcSm5eDR+12ayyRo6WGnM8nUtxGHW4iMDcMIEdW75MwCrIi8hh/+SYSqzD1cfJwsNRNMSzofrT3tYGHO4RYiY8cwQkT1JjOvCGuOxGLjsVvauR8DWrpiVJfGCGrsAGcbhcgVEpEYGEaIqM7lF6qw6Xgc1hy+gaySm8p1buKIuc+0QBdfJ5GrIyKxMYwQUZ0pVqnxwz+JWBF5DSlZSgBAoJst3hwUiH4tXDn3g4gAMIwQUR0QBAG/XUzGJ/tjtOuAeDlY4j9PN8fzQV6QSRlCiOghhhEiqlXHbqTjw31XcT4xEwDgZC3HjL7+GPNUY679QUQVYhgholpxITETH+2/ir+upwMArOUyTOrZDJN7NYONgv+rIaLK8f8QRPREbqXn4pPfY7DnfBIAzdogY4KbYEY/f14dQ0TVwjBCRDWSmlWA5ZHXsf1UAlRqARIJMDTIC+EDm8PHyUrs8ojIgDCMEJFeMvOL8OWRWGw4dgsFRZq1Qvq1cMUboYFo6WEncnVEZIgYRoioWgqKVPjmeBy+OByLzPwiAEDHxg6Y90xLdG3KtUKIqOYYRoioSsUqNX46k4jlB68jKbMAANDczQZvhLbAgJZcK4SInhzDCBFVSBAE7L+UjI/3xyA2TbNWiKe9BV4f2BwvdPTmWiFEVGsYRoionOOx6fhwXwzOJWQAABytzDG9rz9efqoJb1xHRLWOYYSItC7eycRH+2Pw57U0AICVXIZJPZpicq9msLUwF7k6IjJWDCNEhLj0XHx64Br+d+4uAMBMKsG/ghtjZr8AuNhyrRAiqlsMI0QmLDW7AJ9HXse2qAQUqwUAwPNBnvjPwEA0bsS1QoiofjCMEJmgrIIifHXkJtYfvYX8IhUAoE+gC94IDURrT3uRqyMiU8MwQmRCCopU+O7Ebaw+fAMZeZq1Qjo0dsDcQS3wVLNGIldHRKaKYYTIBBSr1Nh55g4+O3hNu1aIv6sN3ggNxNOt3LhWCBGJSlqTg1avXg1fX19YWFggODgYUVFRVe6/fPlyBAYGwtLSEj4+Pnj99ddRUFBQo4KJqPpK1woZtOIvvPnTeSRlFsDT3gIfDW+HfbN6IrS1O4MIEYlO787I9u3bER4ejrVr1yI4OBjLly9HaGgoYmJi4OrqWm7/rVu3Yt68ediwYQO6deuGa9euYfz48ZBIJFi2bFmtnAQRlff3zXv4cN9VnI3PAAA4WJljeh9/jA3hWiFE1LBIBEEQ9DkgODgYXbp0wapVqwAAarUaPj4+mDlzJubNm1du/xkzZuDKlSuIjIzUbvvPf/6DkydP4ujRo9V6z6ysLNjb2yMzMxN2drwRF1FVLt3NxMf7Y3A4RrNWiKW5DK/0aIopvZvBjmuFEFE9qu7vb706I4WFhTh9+jTmz5+v3SaVSjFgwACcOHGiwmO6deuGzZs3IyoqCl27dsXNmzexd+9ejB07ttL3USqVUCqVOidDRFWLv5eHTw/E4Jfoh2uFjOrqg3/3C4CrnYXI1RERVU6vMJKeng6VSgU3Nzed7W5ubrh69WqFx/zrX/9Ceno6evToAUEQUFxcjKlTp+K///1vpe8TERGBd955R5/SiExWWrYSq/64jq1R8ShSaRqdQ9p74j8Dm8PX2Vrk6oiIHq9GE1j1cfjwYbz//vv44osvcObMGezcuRN79uzBkiVLKj1m/vz5yMzM1H4lJCTUdZlEBie7oAjLfo9B748P4ZsTt1GkEtCruQt+ndkDK0d3YBAhIoOhV2fE2dkZMpkMKSkpOttTUlLg7u5e4TELFy7E2LFjMWnSJABA27ZtkZubiylTpuCtt96CVFo+DykUCigUXIKaqCIFRSps/vs2Vh+6gQcla4W093HA3EGB6ObnLHJ1RET60yuMyOVydOrUCZGRkRg6dCgAzQTWyMhIzJgxo8Jj8vLyygUOmUwzk1/PubNEJk2lFrDzTCKWH7yOOxn5AIBmLtZ4MzSQl+gSkUHT+9Le8PBwhIWFoXPnzujatSuWL1+O3NxcTJgwAQAwbtw4eHl5ISIiAgAwZMgQLFu2DB06dEBwcDBu3LiBhQsXYsiQIdpQQkSVEwQBB6+k4uP9V3EtJQcA4G5ngdkDAjC8kzfMZHU+2kpEVKf0DiMjR45EWloaFi1ahOTkZAQFBWHfvn3aSa3x8fE6nZAFCxZAIpFgwYIFuHPnDlxcXDBkyBAsXbq09s6CyEhF3bqPD/ddxenbDwAA9pbmeK2PH8K6+XKtECIyGnqvMyIGrjNCpuZKUhY+3h+DP66mAgAszKWY2L0pXu3tB3tLrhVCRIahTtYZIaK6lXA/D8sOXMPP0XcgCIBMKsHILj6Y1T8AblwrhIiMFMMIUQOQnqPEqj9uYMvJ29q1Qp5t54E5TweiKS/RJSIjxzBCJKLsgiJ8/dctfP3XTeQWqgAAPQOc8WZoC7T1the5OiIySmo1kJcOZCcB2clA1l3Nf4NfBaycRCmJYYRIBMpiFbb8HY9Vh27gfm4hAKCdtz3mDmqB7v5cK4SIakAQgIIMTbDITgKykh4GjrL/zUkB1MXljw8YyDBCZApUagE/n72DZQeuPVwrxNkac0ID8UwbrhVCRJUozH1MyCjpbhQXVPMFJYC1C2DnAdh6ALbugEK8C0QYRojqgSAI+ONqKj7aF4OYlGwAgJudArP6N8dLnb1hzrVCiExTsVLTqSg7XKITNEr+rNTjhrEWDoCdpyZglAYNW48yX+6AjSsgazhX5jGMENWxf+I0a4WcitOsFWJnYYZpffwxvpsvLOVcK4TIKKlVQG5a1cMl2UlA3r3qv6a5tW4no6KQYesOmFvW3XnVEYYRojoSk5yNj/dfxcErmrVCFGZSTOjeFNN6+8HequH8i4SI9CAIQP6DSroYZYZLclIAQV2915TJq+5iaIdRbAEjHcplGCGqZYkPNGuF7Dr7cK2QEZ01a4W423OtEKIGS5ldyXDJI49VhdV7PYkUsHF7JGhUMHxi5WS0IaO6GEaIasm9HCVWHbqBLX/Ho1Cl+RfR4Lbu+M/TgfBzsRG5OiITVlRQ+TBJ2W2FOdV/TatGjwyXVBAybFwBKYdiq4NhhOgJ5SiLsf6vW1j3103kKDWXy3Xza4S5g1qgvY+DuMURGTNV8cPJn+XCRZk/5z+o/msq7KoOGKXPmSnq7rxMEMMIUQ0VFqux9eRtrPzjBu6VrBXSxssOcwe1QM8AF5GrIzJgarVmYmdl8zFKH+ekAqjm7dXMLKqej2HnqRlSUbCLKQaGESI9qdUCdp+7i08PxCDhvmatEN9GVpgTGojBbTwglZr22C9RpQQBKMisZLik9HHJl7qoeq8pkVVwZckjIcPWXXO5q4nPy2jIGEaIqkkQBByOScOH+67iarJmrRAXWwVm9Q/AyC4+XCuETFthXvXmZRTlVf81rV0qDhi2Hg8vcbVyBqT82TN0DCNE1XD69gN8+NtVRMXdBwDYWphham8/TOjuCys5f4z0UpgH3LsB3LsOpF/X/Lm4QPOv5rIEAdoWvPY5oQ6eq433K3ms13Oo4XG18H5PfL6PPKcu1nNRLvuK52OUXUPDxq1BLcpFdYv/FyWqwrWUbHy8PwYHLqcAAORmUkzo5otpffzgYCUXuboGTBA0EwvTrwPp13T/mxkvdnVUV8ytyi/AVS5kuANyK7ErpQaGYYSoAncy8vHZgWvYeSYRagGQSoCXOvlg9sAAeNgb3uqGdaa4EHhwqyRoPBI6qvqXsqUj4BwIOPsDjQI0izkBZcb0JWUeS+rgOTzmOUkdPYcaHlfFc9U6X4nOplr//kpkgI2L5koUzsugGmAYISrjfm4hVh+6ge9O3NauFTKotTvmhAbC39WEZ9nn3S8TNMqEjgdxgKCq+BiJFHD01YQN5wDAufnDL+tG9Vk9ETVwDCNEAHKVxdhw9Ba++vMmskvWCnmqmRPmDmqBDo0dRa6unqhVQMbtR0LHDc1/89IrP05uq+lwODfXDR1OzbgWAxFVC8MImbTCYjW2nYrH55E3kJ6jBAC08rDD3GdaoFeAMyTG2HJWZpcEjpLQUXYiaVXLXNt5lwkbZUKHrTtb80T0RBhGyCSp1QL+d/4uPv39GuLvay41bNLICv95OhDPtTWCtUIEAci6o9vdKB1eyb5b+XFmFkAj/0eGVQI02+TW9Vc/EZkUhhEyKYIg4Mi1NHy0LwaXkzQTLJ1tFJjV3x8juzSG3MzA1isoygfuxT7sbpQdXinKrfw4a9fyHQ7nAMDeh2s2EFG9Yxghk3EmXrNWyMlbJWuFKMzwau9mmNijacNeK0QQgNy0Ci6TvQZkxKPS5bClZpp5G4+Gjkb+gKVDfZ4BEVGVGvD/gYlqx41UzVoh+y89XCskLKQJXuvjD0frBrRWiKpIc3VKuctkr2mW0K6MhX3JZbKloaMkeDj6ctEoIjIIDCNktO5m5GP5wWvYcfrhWiEvdvTG7IHN4eUg4loh+Q/Kz+NIv6ZZr0NdXMlBEsCxiW53Q3uZrDMnkBKRQWMYIaPzILcQa47EYtPxOBQWa9YKebqVG94IDUSAm239FKFWAZkJFazNcR3ITa38OHPrR65YKfmzkx9gblE/tRMR1TOGETIaeYXF2HgsDmsPx2rXCunaVLNWSKcmdbRWiDJHc0lsRZfJFhdUfpydl253ozR02Hmyy0FEJodhhAxekUqNbacS8HnkdaRla9YKaelhhzcHBaJPc5cnXytEEDR3HC3b3Sj9c1Zi5cfJFEAjv4ovk1XUU4eGiMgAMIyQQfvjagre/d9lxN3TrBXi42SJOU8HYkg7T/3XCilWlrlM9pH7rBTmVH6clXPFl8k6NAaksic4OyIi08AwQgbrVnouJn97Giq1AGcbOWb2C8DortVYKyT3Xpl5HGVCR8ZtQFBXfIxEBjg1rfgyWSun2j85IiITwjBCBmvVHzegUgvo7t8IX43tDGtFmb/OquKS+6xUEDryH1T+ogr7ipc8d/QFzBrQZcBEREaEYYQM0u17ufg5+g4soMTijgWwvvKjbui4fxNQF1VytARw8Ck/ebRRAGDjygmkRET1jGGEDNKag1cwXrIHr1v9Apvd2RXvZG5VwRUrAZrLZOVW9VswERFVimGEDIsgIC1qB6ZeXgBf82RADcDaBXBt+bC7ob1M1ov3WSEiMgAMI2Q47pwB9r8Fl/jjcJEAGVJHODz7DtDhZV61QkRkwBhGqOHLTAQi3wXObwcA5AtyrFMNRs/x76GDv4/IxRER0ZNiGKGGS5kNHF0OnFilXc30jEMopic/B/+AQPybQYSIyCgwjFDDo1YBZ78D/lj68D4uTbojJWQBRnybgWIIWNk/QNwaiYio1jCMUMNyIxL4fQGQelnz2KkZMHAJ0OJZrPj5IorVD9DdvxE6+3KhMSIiY8EwQg1D6hVNCLlxUPPYwgHoMw/o/ApgJsedjHz8+E8CAGBW/+bi1UlERLWOYYTElZMKHHofOPONZil2qTnQdTLQ6w2dZdbXHL6BIpWAkGaN0LUpuyJERMaEYYTEUZQP/P0F8NdnQGHJomUthwAD3tHc6baMpMx8/HBKc3fcWQM4V4SIyNgwjFD9UquBiz8Bke8AmZphF3h2AJ5eCvh2r/CQNYdjUahSI7ipE55q1qgeiyUiovrAMEL1J/5vYP9/gTunNY/tvID+i4G2L1W6UmpyZgG2RZXMFWFXhIjIKDGMUN27fxM4+DZw+RfNY7kN0GM28NT0x94jZu0RTVeki68jQtgVISIySgwjVHfyHwB/fgKc/FJzB12JFOgwFuj7FmDr9tjDU7IKsDUqHoDmChoJ76ZLRGSUGEao9qmKgH82AIcjNIEEAJr1BUKXAm6tq/0ya4/EorBYjU5NHNHdn10RIiJjxTBCtUcQgJjfgAMLgXs3NNtcWgBPvwf4DwD06GykZhdg68nSrkgAuyJEREaMYYRqx91ozaJlcX9pHls5A/3eAjqMA2T6/zX76shNKIvV6NDYAT0DnGu3ViIialAYRujJZN0FIpcA574HIAAyBRAyHejxOmBhV6OXTMtWYvPJ2wDYFSEiMgUMI1Qzyhzg+OfA8ZVAUZ5mW5vhwIDFgEPjJ3rpdX/dREGRGu19HNC7uUstFEtERA1ZxYs7PMbq1avh6+sLCwsLBAcHIyoqqtJ9+/TpA4lEUu7r2WefrXHRJCK1CjjzHbCyE3DkQ00Q8XkKmBQJDF//xEEkPUeJ705ouiKz2RUhIjIJendGtm/fjvDwcKxduxbBwcFYvnw5QkNDERMTA1dX13L779y5E4WFhdrH9+7dQ/v27fHSSy89WeVU/24eBvYvAFIuaB47+mqWb2/1vF6TU6uy7q+byC9SoZ23PfoEsitCRGQK9O6MLFu2DJMnT8aECRPQqlUrrF27FlZWVtiwYUOF+zs5OcHd3V37deDAAVhZWTGMGJK0a8DWkcC3z2uCiMJec4XM9Cig9dBaCyL3cwu1XRHOFSEiMh16dUYKCwtx+vRpzJ8/X7tNKpViwIABOHHiRLVeY/369Rg1ahSsra0r3UepVEKpVGofZ2Vl6VMm1ZbcdODwB5o1QwQVIDUDOr8C9J4LWNf+uh/r/rqJvEIV2nrZo1+L8l02IiIyTnqFkfT0dKhUKri56a6e6ebmhqtXrz72+KioKFy8eBHr16+vcr+IiAi88847+pRGtalYCZxcq1k9VVkSBAMHAwPfBZzr5v4wD3IL8e3xOADAv9kVISIyKfV6Nc369evRtm1bdO3atcr95s+fj/DwcO3jrKws+Pj41HV5JAjApV2a+8hkaIZL4N4WCH0faNqrTt/666M3kVuoQmtPOwxoya4IEZEp0SuMODs7QyaTISUlRWd7SkoK3N3dqzw2NzcX27Ztw7vvvvvY91EoFFAoFPqURk8q4ZTmjrqJJVdG2XoA/RYC7UcBUlmdvnVGXiG+Oa4JP+yKEBGZHr0msMrlcnTq1AmRkZHabWq1GpGRkQgJCany2B9//BFKpRIvv/xyzSqluvHgNrBjIrB+gCaImFsBff4LzDwNdBhT50EEANYfvYUcZTFaetjh6VaPv4EeEREZF72HacLDwxEWFobOnTuja9euWL58OXJzczFhwgQAwLhx4+Dl5YWIiAid49avX4+hQ4eiUSPe8KxBKMgE/loG/L0GUCkBSDTho+8CwM6j3srIzCvCpmNxAIBZ/f3ZFSEiMkF6h5GRI0ciLS0NixYtQnJyMoKCgrBv3z7tpNb4+HhIpboNl5iYGBw9ehS///577VRNNacqBk5v1NxRN++eZlvTXsDTSwGPdvVezvpjt5CtLEYLd1s83arqoT4iIjJOEkEQBLGLeJysrCzY29sjMzMTdnY1u9+JyRME4PoBzc3s0mM025ybAwOXAM1Da22tEH1k5hehx4d/ILugGKv/1RHPtqu/jgwREdW96v7+5r1pTEHyReD3tzQrqAKAVSOgz3yg03hAZi5aWRuP3UJ2QTGau9ngmTbsihARmSqGEWOWnQz88R5wdjM0d9SVA8FTgZ7/ASwdRC0tq6AIG47eAgDM7BcAqZRzRYiITBXDiDEqzANOrAKOLgeKcjXbWg8DBrytuZ9MA/DNsThkFRTD39UGg9tyeIaIyJQxjBgTtRo4vx2IfBfIvqvZ5t1FMzm1cbC4tZWRXVCEr7VdEX/I2BUhIjJpDCPGIu6oZtGypHOax/aNgYFvA61fEGVyalW+PXEbmflF8HOxxnPtPMUuh4iIRMYwYujSbwAHFgExezSPFXZAz3AgeBpgbiFubRXIURZj3V83AWjmirArQkREDCOGKu8+cOQj4NQ6QF0MSGRA5wmaq2SsncWurlLfnohDRl4RmjlbY0h7dkWIiIhhxPAUF2oCyJEPNauoAkBAKPD0EsAlUNzaHiNXWYx1f2q6IjM4V4SIiEowjBgKQQCu7AYOLAYeaCZ/wq0N8PR7gF9fcWurpu/+vo0HeUXwbWSF/2NXhIiISjCMGII7p4H9bwHxJzSPbdyAfguAoPq5kV1tyCss2xUJgJlMr3s0EhGREWMYacgyEjSX6V74QfPYzBLoNhPoPgtQ2Ihbm542/30b93IL0aSRFYYGsStCREQPMYw0RMps4OhnwInVQHGBZlv70UC/hYC9l7i11UB+oQpflXRFpvf1Z1eEiIh0MIw0JKpi4Ox3wKGlQG6aZluTHkDoe4BnB3FrewJbTt5Gek4hfJwsMayD4YUpIiKqWwwjDcWNg8DvC4HUy5rHTn6aK2QCBze4Rcv0kV+owtojJXNF+vrDnF0RIiJ6BMOI2FKvAL8v0IQRALB0BHrPAzpPBMzk4tZWC7ZGxSM9RwkvB0u80NFb7HKIiKgBYhgRS04qcOh94Mw3gKAGpOZA8KtArzmaQGIECopUWHskFoBmrgi7IkREVBGGkfpWlA/8/QXw12dAYbZmW8v/09xRt5GfqKXVtu+j4pGWremKDO/ErggREVWMYaS+qNXAxZ+AyHeAzATNNs+OQOhSoEk3cWurA2W7ItP6+EFuxq4IERFVjGGkPtw+obmj7t0zmsd23sCAxUCb4YDUOH9J//BPAlKylPCwt8BLndkVISKiyjGM1KX7NzXLt1/ZrXkstwF6vA6ETAfMLcWtrQ4pi1VYc1jTFXmtjx8UZoaxSiwREYmDYaQu5D8A/vwEOPkloC4CJFKg4zig71uAjavY1dW5H/5JRFJmAdztLDCii4/Y5RARUQPHMFKbVEXAqfXAkQ80gQQA/Pprbmbn1krc2uqJsliFNYduANDMFWFXhIiIHodhpDYIAhCzFziwCLin+UUMl5aaEBIwQNza6tmO04m4m1kANzsFRrIrQkRE1cAw8qTuRmsWLYv7S/PY2kUzHNNhLCAzrW9vYbEaXxzSzBWZ2tsPFubsihAR0eOZ1m/L2pR1F4hcApz7HoAAmFloJqZ2nw1Y2IldnSh+OpOIOxn5cLFVYHTXxmKXQ0REBoJhRF/KHOD458Cxz4HifM22tiOA/osAB9MdlihSqbG6ZK4IuyJERKQPhpHqUquA6K3AH+8BOcmabY1DgKeXAt6dxK2tAdh5JhGJD/LhbKPAmGB2RYiIqPoYRqrj5mFg/1tAykXNY8emwMB3NMu4G/AddWtLkUqNVdquSDN2RYiISC8MI1VJuwYcWAhc26d5bGEP9HoT6DoZMFOIW1sDsuvsHSTcz4ezjRxjgpuIXQ4RERkYhpGK5KYDhyOAfzYCggqQmgFdJgG95wJWTmJX16AUl5krMqVXM1jK2RUhIiL9MIyUVVQARH2pWT1VmaXZFvgsMPBdwNlf3NoaqJ+j7+L2vTw4Wcvx8lPsihARkf4YRgDNomWXdgIH3wYy4jXbPNprJqc27SlqaQ1ZsUqNVX9cBwBM7tkMVnL+dSIiIv3xt0dClGZyamKU5rGtp+Yy3XYjjfaOurVl97m7iLuXB0crc4wLYVeEiIhqxnTDSLES2DVV0xEBAHNroMdsIGQGILcStTRDoFILWPWHZq7IpJ7NYK0w3b9KRET0ZEz3N4iZAlBmA5AAHV4G+i0AbN3Frspg/Hr+Lm6m58LByhxh3XzFLoeIiAyY6YYRAHjmQ6AoD3BvK3YlBkWlFvB5pGauyKQeTWHDrggRET0B0/4t0shP7AoM0p4LSYhNy4W9JbsiRET05DhDk/SiVgtYWdIVeaVHU9hamItcERERGTqGEdLL3otJuJ6aAzsLM4zv7it2OUREZAQYRqja1GXmikzs0RR27IoQEVEtYBihatt3KRnXUnJga2GGCd2bil0OEREZCYYRqpayXZEJ3ZvC3pJdESIiqh0MI1Qtv19OxtXkbNgqzPAKuyJERFSLGEbosdRqASsiNautju/uC3srdkWIiKj2MIzQYx24koIrSVmwUZjhlR7sihARUe1iGKEqCcLDuSJh3ZrAwUouckVERGRsGEaoSgevpOLS3SxYy2WY1KOZ2OUQEZERYhihSgmCgBWR1wAA47r5wtGaXREiIqp9DCNUqT+upuLinSxYmsswiXNFiIiojjCMUIXKzhUZF9IEjWwUIldERETGimGEKnT4WhrOJWbC0lyGyb04V4SIiOoOwwiVIwgCVhzUdEVefqoxnNkVISKiOlSjMLJ69Wr4+vrCwsICwcHBiIqKqnL/jIwMTJ8+HR4eHlAoFGjevDn27t1bo4Kp7v15PR3RCRmwMJdiSi8/scshIiIjZ6bvAdu3b0d4eDjWrl2L4OBgLF++HKGhoYiJiYGrq2u5/QsLCzFw4EC4urpix44d8PLywu3bt+Hg4FAb9VMt03RFNFfQjAluAhdbdkWIiKhu6R1Gli1bhsmTJ2PChAkAgLVr12LPnj3YsGED5s2bV27/DRs24P79+zh+/DjMzTXLiPv6+j5Z1VRnjt5Ix5n4DCjMpHi1N+eKEBFR3dNrmKawsBCnT5/GgAEDHr6AVIoBAwbgxIkTFR6ze/duhISEYPr06XBzc0ObNm3w/vvvQ6VSVfo+SqUSWVlZOl9U98rOFflXcGO42lqIXBEREZkCvcJIeno6VCoV3NzcdLa7ubkhOTm5wmNu3ryJHTt2QKVSYe/evVi4cCE+/fRTvPfee5W+T0REBOzt7bVfPj4++pRJNXQ89h7+uf0AcjMppvbmXBEiIqofdX41jVqthqurK7766it06tQJI0eOxFtvvYW1a9dWesz8+fORmZmp/UpISKjrMk2eTleka2O42bErQkRE9UOvOSPOzs6QyWRISUnR2Z6SkgJ3d/cKj/Hw8IC5uTlkMpl2W8uWLZGcnIzCwkLI5eWXGFcoFFAoOHGyPp24eQ9Rcfchl7ErQkRE9UuvzohcLkenTp0QGRmp3aZWqxEZGYmQkJAKj+nevTtu3LgBtVqt3Xbt2jV4eHhUGERIHKVdkVFdfeBuz64IERHVH72HacLDw7Fu3Tp88803uHLlCqZNm4bc3Fzt1TXjxo3D/PnztftPmzYN9+/fx6xZs3Dt2jXs2bMH77//PqZPn157Z0FP5O+b93DylqYrMq0PuyJERFS/9L60d+TIkUhLS8OiRYuQnJyMoKAg7Nu3TzupNT4+HlLpw4zj4+OD/fv34/XXX0e7du3g5eWFWbNmYe7cubV3FvRESrsiI7p4w8PeUuRqiIjI1EgEQRDELuJxsrKyYG9vj8zMTNjZ2YldjlGJunUfI748AXOZBIff6AsvB4YRIiKqHdX9/c1705i4FZGa1VZf6uzDIEJERKJgGDFh/8Tdx7Eb92AmlWAar6AhIiKRMIyYsBWRmrkiwzt5w8fJSuRqiIjIVDGMmKgz8Q/w1/V0mEklmN7XX+xyiIjIhDGMmKjSK2he6OjFrggREYmKYcQERSdk4Mi1NMikEszoGyB2OUREZOIYRkzQioOaK2iGdfBC40bsihARkbgYRkzMuYQMHIop7YpwrggREYmPYcTEfF5yBc3zQZ7wdbYWuRoiIiKGEZNyITETkVdTIZUAM/txrggRETUMDCMmZIW2K+KFpuyKEBFRA8EwYiIu3snEwSspkEqAGf04V4SIiBoOhhETUTpXZEh7T/i52IhcDRER0UMMIybg8t0s/H45BRIJMJNdESIiamAYRkxAaVfkuXae8He1FbkaIiIiXQwjRu5KUhb2XUqGRAL8m10RIiJqgBhGjNzKPzRdkcFtPRDgxq4IERE1PAwjRiwmORt7LyQD4FwRIiJquBhGjFhpV+SZNu5o4W4ncjVEREQVYxgxUtdTsrHnQhIA4N/9udoqERE1XAwjRmrlHzcgCEBoaze09GBXhIiIGi6GESN0IzUH/zt/FwC7IkRE1PAxjBihVX9chyAAA1u5obWnvdjlEBERVYlhxMjcTMvB7nOarsgsdkWIiMgAMIwYmVV/3IBaAAa0dEUbL3ZFiIio4WMYMSK30nPxc/QdAMCs/s1FroaIiKh6GEaMSGlXpF8LV7T1ZleEiIgMA8OIkbh9r2xXhHNFiIjIcDCMGIlVf9yASi2gT6AL2vs4iF0OERFRtTGMGIH4e3nYeZZdESIiMkwMI0Zg9SFNV6RXcxd0aOwodjlERER6YRgxcAn38/DTmUQA7IoQEZFhYhgxcF8cvoFitYCeAc7o1IRdESIiMjwMIwYs8UEefvxH0xXhPWiIiMhQMYwYsDWHY1GsFtDNrxG6+DqJXQ4REVGNMIwYqLsZ+fjhnwQAnCtCRESGjWHEQK05HIsilYCnmjkhuFkjscshIiKqMYYRA5SUmY/tp0q7IrwHDRERGTaGEQO09nAsClVqdG3qhBA/dkWIiMiwMYwYmJSsAnxf0hWZzbkiRERkBBhGDMyaw7EoLFaji68juyJERGQUGEYMSGpWAb6PigegmSsikUhEroiIiOjJMYwYkLVHbkJZrEanJo7o7s+uCBERGQeGEQORml2ALSdvA9CsK8KuCBERGQuGEQPxVUlXpENjB/QMcBa7HCIiolrDMGIA0rKV2MyuCBERGSmGEQOw7q+bKChSo72PA3o3dxG7HCIiolrFMNLApeco8d0JTVdkNrsiRERkhBhGGrh1f91EfpEK7bzt0SeQXREiIjI+DCMN2P3cQm1XhHNFiIjIWDGMNGBf/3UTeYUqtPGyQ78WrmKXQ0REVCcYRhqoB7mF+OZ4HADg3/3YFSEiIuNVozCyevVq+Pr6wsLCAsHBwYiKiqp0302bNkEikeh8WVhY1LhgU7H+6C3kFqrQysMOA1u5iV0OERFRndE7jGzfvh3h4eFYvHgxzpw5g/bt2yM0NBSpqamVHmNnZ4ekpCTt1+3bt5+oaGOXkVeITaVdEc4VISIiI6d3GFm2bBkmT56MCRMmoFWrVli7di2srKywYcOGSo+RSCRwd3fXfrm58V/6Vdlw9BZylMVo4W6Lp9kVISIiI6dXGCksLMTp06cxYMCAhy8glWLAgAE4ceJEpcfl5OSgSZMm8PHxwfPPP49Lly5V+T5KpRJZWVk6X6YiM68IG4/FAdBcQSOVsitCRETGTa8wkp6eDpVKVa6z4ebmhuTk5AqPCQwMxIYNG/DLL79g8+bNUKvV6NatGxITEyt9n4iICNjb22u/fHx89CnToG04dgvZymIEutkitLW72OUQERHVuTq/miYkJATjxo1DUFAQevfujZ07d8LFxQVffvllpcfMnz8fmZmZ2q+EhIS6LrNByMwvwoZjtwBo5oqwK0JERKbATJ+dnZ2dIZPJkJKSorM9JSUF7u7V+1e8ubk5OnTogBs3blS6j0KhgEKh0Kc0o7DpWByyC4rR3M0Gz7RhV4SIiEyDXp0RuVyOTp06ITIyUrtNrVYjMjISISEh1XoNlUqFCxcuwMPDQ79KjVxWQRHWH70JAJjZj10RIiIyHXp1RgAgPDwcYWFh6Ny5M7p27Yrly5cjNzcXEyZMAACMGzcOXl5eiIiIAAC8++67eOqpp+Dv74+MjAx8/PHHuH37NiZNmlS7Z2LgvjkWh6yCYvi72mBwWwY1IiIyHXqHkZEjRyItLQ2LFi1CcnIygoKCsG/fPu2k1vj4eEilDxsuDx48wOTJk5GcnAxHR0d06tQJx48fR6tWrWrvLAxcdkERvj6qmSsys58/ZOyKEBGRCZEIgiCIXcTjZGVlwd7eHpmZmbCzsxO7nFq3+tANfLw/Bn4u1vj99d4MI0REZBSq+/ub96YRWY6yGOv+ejhXhEGEiIhMDcOIyL49EYeMvCI0c7bGkPaeYpdDRERU7xhGRJSrLMa6PzVdkRmcK0JERCaKYUREm/++jQd5RfBtZIX/Y1eEiIhMFMOISPIKi/FVSVdkel9/mMn4URARkWnib0CRbPk7HvdyC9HYyQrDOniJXQ4REZFoGEZEkF+owpd/xgIAZrArQkREJo6/BUWw5eRtpOcUwsfJEsM6sitCRESmjWGknhUUqfBl6VyRPv4wZ1eEiIhMHH8T1rOtJ+ORlq2El4MlXujoLXY5REREomMYqUcFRSqsPaKZKzK9rz/kZvz2ExER8bdhPdoWFY/Ukq7I8E7sihAREQEMI/WmoEiFNSVdkWl9/NgVISIiKsHfiPXkh38SkJKlhIe9BV7qzK4IERFRKYaReqAsVmHNYU1X5LU+flCYyUSuiIiIqOFgGKkHP/yTiKTMArjbWWBEFx+xyyEiImpQGEbqmLJYhTWHbgDQzBVhV4SIiEgXw0gd23E6EXczC+Bmp8BIdkWIiIjKYRipQ4XFanxxSDNXZGpvP1iYsytCRET0KIaROrTzTCLuZOTDxVaB0V0bi10OERFRg8QwUkeKVGqsKpkr8mqvZuyKEBERVYJhpI7sOnMHiQ/y4WyjwJjgJmKXQ0RE1GAxjNSBR7silnJ2RYiIiCrDMFIHfj57B/H389DIWo4xT3GuCBERUVUYRmpZcZmuyJRezWAlNxO5IiIiooaNYaSW/RJ9F7fv5cHJWo6xIZwrQkRE9DgMI7WobFdkck92RYiIiKqDYaQW/e/8XdxKz4WjlTnGsStCRERULQwjtUSlFrDyD01XZFLPZrBWsCtCRERUHQwjteTX83dxMy0XDlbmCOvmK3Y5REREBoNhpBao1AI+j7wOAJjUoyls2BUhIiKqNoaRWrDnQhJi03Jhb8muCBERkb4YRp6QWi1gZUlX5JUeTWFrYS5yRURERIaFYeQJ7b2YhOupObCzMMP47r5il0NERGRwGEaegLrMXJGJPZrCjl0RIiIivTGMPIH9l5JxLSUHtgozTOjWVOxyiIiIDBLDSA2p1QJWlHRFJnT3hb0VuyJEREQ1wTBSQ79fTsHV5GzYKMwwsQe7IkRERDXFMFIDgvBwrsj4br5wsJKLXBEREZHhYhipgQOXU3A5KQvWchleYVeEiIjoiTCM6EkQHs4VCevmC0drdkWIiIieBMOIniKvpOLS3SxYyWWY1LOZ2OUQEREZPIYRPZTtiowL8YUTuyJERERPjGFED4diUnHhTiYszWWY3JNzRYiIiGoDw0g1CYKAFQdLuyJN0MhGIXJFRERExoFhpJoOX0vDucSSrkgvzhUhIiKqLQwj1VC2K/LyU43hzK4IERFRrWEYqYY/r6cjOiEDFuZSTOnlJ3Y5RERERoVh5DE0XZFrAIAxwU3gYsuuCBERUW1iGHmMozfScSY+AwozKV7tzbkiREREtY1hpApl54r8K7gxXG0tRK6IiIjI+NQojKxevRq+vr6wsLBAcHAwoqKiqnXctm3bIJFIMHTo0Jq8bb07EXsP/9x+ALmZFFN7c64IERFRXdA7jGzfvh3h4eFYvHgxzpw5g/bt2yM0NBSpqalVHhcXF4c5c+agZ8+eNS62vi0vWW11dBcfuNmxK0JERFQX9A4jy5Ytw+TJkzFhwgS0atUKa9euhZWVFTZs2FDpMSqVCmPGjME777yDZs0MY97Fidh7iLp1H3KZFFP7sCtCRERUV/QKI4WFhTh9+jQGDBjw8AWkUgwYMAAnTpyo9Lh3330Xrq6ueOWVV2peaT1bEam5gmZkFx942FuKXA0REZHxMtNn5/T0dKhUKri5uelsd3Nzw9WrVys85ujRo1i/fj2io6Or/T5KpRJKpVL7OCsrS58yn9jJm/fw9837MJdJMI1dESIiojpVp1fTZGdnY+zYsVi3bh2cnZ2rfVxERATs7e21Xz4+PnVYZXmld+Yd0dkHng7sihAREdUlvTojzs7OkMlkSElJ0dmekpICd3f3cvvHxsYiLi4OQ4YM0W5Tq9WaNzYzQ0xMDPz8ynce5s+fj/DwcO3jrKysegskp+Lu43jsPZjLJHitr3+9vCcREZEp0yuMyOVydOrUCZGRkdrLc9VqNSIjIzFjxoxy+7do0QIXLlzQ2bZgwQJkZ2djxYoVlQYMhUIBhUKclU5L1xUZ3skHXuyKEBER1Tm9wggAhIeHIywsDJ07d0bXrl2xfPly5ObmYsKECQCAcePGwcvLCxEREbCwsECbNm10jndwcACActsbgtO37+PojXSYSSV4jXNFiIiI6oXeYWTkyJFIS0vDokWLkJycjKCgIOzbt087qTU+Ph5SqWEu7Lpc2xXxho+TlcjVEBERmQaJIAiC2EU8TlZWFuzt7ZGZmQk7O7s6eY8z8Q/wwhfHYSaV4NCcPgwjRERET6i6v78Ns4VRB0rnirzQ0YtBhIiIqB4xjACITsjAkWtpkEklmNE3QOxyiIiITArDCIAVBzWrrQ7r4IXGjdgVISIiqk8mH0bOJWTgUExpV4TrihAREdU3kw8jn5estvp8kCd8na1FroaIiMj0mHQYuXgnE5FXUyGVgF0RIiIikZh0GCm9B83/tfdEMxcbkashIiIyTSYbRgqL1VCpBU1XpB+voCEiIhKL3iuwGgu5mRQbxndBwv08ritCREQkIpPtjJRiECEiIhKXyYcRIiIiEhfDCBEREYmKYYSIiIhExTBCREREomIYISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRmYldQHUIggAAyMrKErkSIiIiqq7S39ulv8crYxBhJDs7GwDg4+MjciVERESkr+zsbNjb21f6vER4XFxpANRqNe7evQtbW1tIJJJae92srCz4+PggISEBdnZ2tfa6DYmxnyPPz/AZ+zny/AyfsZ9jXZ6fIAjIzs6Gp6cnpNLKZ4YYRGdEKpXC29u7zl7fzs7OKP+ClWXs58jzM3zGfo48P8Nn7OdYV+dXVUekFCewEhERkagYRoiIiEhUJh1GFAoFFi9eDIVCIXYpdcbYz5HnZ/iM/Rx5fobP2M+xIZyfQUxgJSIiIuNl0p0RIiIiEh/DCBEREYmKYYSIiIhExTBCREREojL6MLJ69Wr4+vrCwsICwcHBiIqKqnL/H3/8ES1atICFhQXatm2LvXv31lOlNafPOW7atAkSiUTny8LCoh6r1c+ff/6JIUOGwNPTExKJBD///PNjjzl8+DA6duwIhUIBf39/bNq0qc7rrCl9z+/w4cPlPj+JRILk5OT6KVhPERER6NKlC2xtbeHq6oqhQ4ciJibmsccZys9hTc7P0H4G16xZg3bt2mkXxAoJCcFvv/1W5TGG8vkB+p+foX1+j/rggw8gkUgwe/bsKver78/QqMPI9u3bER4ejsWLF+PMmTNo3749QkNDkZqaWuH+x48fx+jRo/HKK6/g7NmzGDp0KIYOHYqLFy/Wc+XVp+85AppV9pKSkrRft2/frseK9ZObm4v27dtj9erV1dr/1q1bePbZZ9G3b19ER0dj9uzZmDRpEvbv31/HldaMvudXKiYmRuczdHV1raMKn8yRI0cwffp0/P333zhw4ACKiorw9NNPIzc3t9JjDOnnsCbnBxjWz6C3tzc++OADnD59Gv/88w/69euH559/HpcuXapwf0P6/AD9zw8wrM+vrFOnTuHLL79Eu3btqtxPlM9QMGJdu3YVpk+frn2sUqkET09PISIiosL9R4wYITz77LM624KDg4VXX321Tut8Evqe48aNGwV7e/t6qq52ARB27dpV5T5vvvmm0Lp1a51tI0eOFEJDQ+uwstpRnfM7dOiQAEB48OBBvdRU21JTUwUAwpEjRyrdxxB/DktV5/wM+WewlKOjo/D1119X+Jwhf36lqjo/Q/38srOzhYCAAOHAgQNC7969hVmzZlW6rxifodF2RgoLC3H69GkMGDBAu00qlWLAgAE4ceJEhcecOHFCZ38ACA0NrXR/sdXkHAEgJycHTZo0gY+Pz2P/BWBoDO0zrKmgoCB4eHhg4MCBOHbsmNjlVFtmZiYAwMnJqdJ9DPkzrM75AYb7M6hSqbBt2zbk5uYiJCSkwn0M+fOrzvkBhvn5TZ8+Hc8++2y5z6YiYnyGRhtG0tPToVKp4ObmprPdzc2t0vH15ORkvfYXW03OMTAwEBs2bMAvv/yCzZs3Q61Wo1u3bkhMTKyPkutcZZ9hVlYW8vPzRaqq9nh4eGDt2rX46aef8NNPP8HHxwd9+vTBmTNnxC7tsdRqNWbPno3u3bujTZs2le5naD+Hpap7fob4M3jhwgXY2NhAoVBg6tSp2LVrF1q1alXhvob4+elzfob4+W3btg1nzpxBREREtfYX4zM0iLv2Uu0JCQnRSfzdunVDy5Yt8eWXX2LJkiUiVkbVERgYiMDAQO3jbt26ITY2Fp999hm+++47ESt7vOnTp+PixYs4evSo2KXUieqenyH+DAYGBiI6OhqZmZnYsWMHwsLCcOTIkUp/YRsafc7P0D6/hIQEzJo1CwcOHGjQE22NNow4OztDJpMhJSVFZ3tKSgrc3d0rPMbd3V2v/cVWk3N8lLm5OTp06IAbN27URYn1rrLP0M7ODpaWliJVVbe6du3a4H/Bz5gxA7/++iv+/PNPeHt7V7mvof0cAvqd36MM4WdQLpfD398fANCpUyecOnUKK1aswJdfflluX0P8/PQ5v0c19M/v9OnTSE1NRceOHbXbVCoV/vzzT6xatQpKpRIymUznGDE+Q6MdppHL5ejUqRMiIyO129RqNSIjIysdCwwJCdHZHwAOHDhQ5dihmGpyjo9SqVS4cOECPDw86qrMemVon2FtiI6ObrCfnyAImDFjBnbt2oU//vgDTZs2fewxhvQZ1uT8HmWIP4NqtRpKpbLC5wzp86tMVef3qIb++fXv3x8XLlxAdHS09qtz584YM2YMoqOjywURQKTPsM6mxjYA27ZtExQKhbBp0ybh8uXLwpQpUwQHBwchOTlZEARBGDt2rDBv3jzt/seOHRPMzMyETz75RLhy5YqwePFiwdzcXLhw4YJYp/BY+p7jO++8I+zfv1+IjY0VTp8+LYwaNUqwsLAQLl26JNYpVCk7O1s4e/ascPbsWQGAsGzZMuHs2bPC7du3BUEQhHnz5gljx47V7n/z5k3ByspKeOONN4QrV64Iq1evFmQymbBv3z6xTqFK+p7fZ599Jvz888/C9evXhQsXLgizZs0SpFKpcPDgQbFOoUrTpk0T7O3thcOHDwtJSUnar7y8PO0+hvxzWJPzM7SfwXnz5glHjhwRbt26JZw/f16YN2+eIJFIhN9//10QBMP+/ARB//MztM+vIo9eTdMQPkOjDiOCIAgrV64UGjduLMjlcqFr167C33//rX2ud+/eQlhYmM7+P/zwg9C8eXNBLpcLrVu3Fvbs2VPPFetPn3OcPXu2dl83Nzdh8ODBwpkzZ0SounpKL2V99Kv0nMLCwoTevXuXOyYoKEiQy+VCs2bNhI0bN9Z73dWl7/l9+OGHgp+fn2BhYSE4OTkJffr0Ef744w9xiq+Gis4NgM5nYsg/hzU5P0P7GZw4caLQpEkTQS6XCy4uLkL//v21v6gFwbA/P0HQ//wM7fOryKNhpCF8hhJBEIS667sQERERVc1o54wQERGRYWAYISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimGEiAyCRCLBzz//LHYZRFQHGEaI6LHGjx8PiURS7mvQoEFil0ZERsBo79pLRLVr0KBB2Lhxo842hUIhUjVEZEzYGSGialEoFHB3d9f5cnR0BKAZQlmzZg2eeeYZWFpaolmzZtixY4fO8RcuXEC/fv1gaWmJRo0aYcqUKcjJydHZZ8OGDWjdujUUCgU8PDwwY8YMnefT09MxbNgwWFlZISAgALt379Y+9+DBA4wZMwYuLi6wtLREQEBAufBERA0TwwgR1YqFCxfixRdfxLlz5zBmzBiMGjUKV65cAQDk5uYiNDQUjo6OOHXqFH788UccPHhQJ2ysWbMG06dPx5QpU3DhwgXs3r0b/v7+Ou/xzjvvYMSIETh//jwGDx6MMWPG4P79+9r3v3z5Mn777TdcuXIFa9asgbOzc/19A4io5ur0NnxEZBTCwsIEmUwmWFtb63wtXbpUEATN3WunTp2qc0xwcLAwbdo0QRAE4auvvhIcHR2FnJwc7fN79uwRpFKpkJycLAiCIHh6egpvvfVWpTUAEBYsWKB9nJOTIwAQfvvtN0EQBGHIkCHChAkTaueEiahecc4IEVVL3759sWbNGp1tTk5O2j+HhIToPBcSEoLo6GgAwJUrV9C+fXtYW1trn+/evTvUajViYmIgkUhw9+5d9O/fv8oa2rVrp/2ztbU17OzskJqaCgCYNm0aXnzxRZw5cwZPP/00hg4dim7dutXoXImofjGMEFG1WFtblxs2qS2WlpbV2s/c3FznsUQigVqtBgA888wzuH37Nvbu3YsDBw6gf//+mD59Oj755JNar5eIahfnjBBRrfj777/LPW7ZsiUAoGXLljh37hxyc3O1zx87dgxSqRSBgYGwtbWFr68vIiMjn6gGFxcXhIWFYfPmzVi+fDm++uqrJ3o9Iqof7IwQUbUolUokJyfrbDMzM9NOEv3xxx/RuXNn9OjRA1u2bEFUVBTWr18PABgzZgwWL16MsLAwvP3220hLS8PMmTMxduxYuLm5AQDefvttTJ06Fa6urnjmmWeQnZ2NY8eOYebMmdWqb9GiRejUqRNat24NpVKJX3/9VRuGiKhhYxghomrZt28fPDw8dLYFBgbi6tWrADRXumzbtg2vvfYaPDw88P3336NVq1YAACsrK+zfvx+zZs1Cly5dYGVlhRdffBHLli3TvlZYWBgKCgrw2WefYc6cOXB2dsbw4cOrXZ9cLsf8+fMRFxcHS0tL9OzZE9u2bauFMyeiuiYRBEEQuwgiMmwSiQS7du3C0KFDxS6FiAwQ54wQERGRqBhGiIiISFScM0JET4yjvUT0JNgZISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJR/T/IEcy3MgflogAAAABJRU5ErkJggg==\n" }, "metadata": {} } @@ -857,13 +868,13 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "5090ca6c-4fb4-436e-f727-b07412feea17" + "outputId": "51a006ee-fbeb-4be3-be83-2b0e904a2b91" }, "source": [ - "# Resnet summary \n", + "# Resnet summary\n", "resnet_model.summary()" ], - "execution_count": 13, + "execution_count": 19, "outputs": [ { "output_type": "stream", @@ -873,15 +884,15 @@ "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", - " feature_extraction_layer (K (None, 2048) 23564800 \n", - " erasLayer) \n", + " feature_extraction_layer ( (None, 2048) 23564800 \n", + " KerasLayer) \n", " \n", " output_layer (Dense) (None, 10) 20490 \n", " \n", "=================================================================\n", - "Total params: 23,585,290\n", - "Trainable params: 20,490\n", - "Non-trainable params: 23,564,800\n", + "Total params: 23585290 (89.97 MB)\n", + "Trainable params: 20490 (80.04 KB)\n", + "Non-trainable params: 23564800 (89.89 MB)\n", "_________________________________________________________________\n" ] } @@ -909,7 +920,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "7c0e639d-2986-401a-e2b3-7214df57645d" + "outputId": "1303a27e-4375-402b-f517-b9491ba35daa" }, "source": [ "# Create model\n", @@ -921,33 +932,31 @@ " optimizer=tf.keras.optimizers.Adam(),\n", " metrics=['accuracy'])\n", "\n", - "# Fit EfficientNet model \n", + "# Fit EfficientNet model\n", "efficientnet_history = efficientnet_model.fit(train_data_10_percent, # only use 10% of training data\n", " epochs=5, # train for 5 epochs\n", " steps_per_epoch=len(train_data_10_percent),\n", " validation_data=test_data,\n", " validation_steps=len(test_data),\n", - " callbacks=[create_tensorboard_callback(dir_name=\"tensorflow_hub\", \n", - " # Track logs under different experiment name\n", - " experiment_name=\"efficientnetB0\")])" + " callbacks=[create_tensorboard_callback(experiment_name=\"efficientnetB0\")])" ], - "execution_count": 14, + "execution_count": 20, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Saving TensorBoard log files to: tensorflow_hub/efficientnetB0/20230511-042443\n", + "Saving TensorBoard log files to: logs/fit/\n", "Epoch 1/5\n", - "24/24 [==============================] - 26s 693ms/step - loss: 1.7622 - accuracy: 0.5053 - val_loss: 1.2434 - val_accuracy: 0.7268\n", + "24/24 [==============================] - 21s 513ms/step - loss: 1.8954 - accuracy: 0.3960 - val_loss: 1.3485 - val_accuracy: 0.7032\n", "Epoch 2/5\n", - "24/24 [==============================] - 15s 634ms/step - loss: 1.0120 - accuracy: 0.7693 - val_loss: 0.8459 - val_accuracy: 0.8240\n", + "24/24 [==============================] - 13s 579ms/step - loss: 1.0871 - accuracy: 0.7827 - val_loss: 0.8911 - val_accuracy: 0.8028\n", "Epoch 3/5\n", - "24/24 [==============================] - 15s 642ms/step - loss: 0.7289 - accuracy: 0.8347 - val_loss: 0.6823 - val_accuracy: 0.8460\n", + "24/24 [==============================] - 13s 555ms/step - loss: 0.7688 - accuracy: 0.8347 - val_loss: 0.7111 - val_accuracy: 0.8380\n", "Epoch 4/5\n", - "24/24 [==============================] - 15s 637ms/step - loss: 0.5871 - accuracy: 0.8667 - val_loss: 0.6004 - val_accuracy: 0.8592\n", + "24/24 [==============================] - 12s 534ms/step - loss: 0.6170 - accuracy: 0.8613 - val_loss: 0.6215 - val_accuracy: 0.8488\n", "Epoch 5/5\n", - "24/24 [==============================] - 14s 620ms/step - loss: 0.5013 - accuracy: 0.8947 - val_loss: 0.5504 - val_accuracy: 0.8636\n" + "24/24 [==============================] - 12s 535ms/step - loss: 0.5195 - accuracy: 0.8827 - val_loss: 0.5655 - val_accuracy: 0.8564\n" ] } ] @@ -975,12 +984,12 @@ "base_uri": "https://localhost:8080/", "height": 927 }, - "outputId": "98a2f8a4-ffaf-48ad-8cab-22f532f8097a" + "outputId": "73e4b2ca-0814-4182-ece6-035e64479698" }, "source": [ "plot_loss_curves(efficientnet_history)" ], - "execution_count": 15, + "execution_count": 21, "outputs": [ { "output_type": "display_data", @@ -988,7 +997,7 @@ "text/plain": [ "
" ], - "image/png": "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\n" + "image/png": "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X6aZOnUqgYGBLFmyhMjISHx9fenbty/Jycn2Y/Ly8njyyScJDAykZs2aPP/88wwdOpT+/ftf0Z/BqVOnGDJkCDVq1MDb25uYmBh27dplf/7AgQPExsZSo0YNfHx8aNWqFQsXLrQfO3jwYIKDg/Hy8qJp06ZMmTLliuoorWobRiwWC50b1ADg9UXbOZOTb3JFIiJVn2EYnM7JM+VR2lHsd999l65du/Lwww+TnJxMcnIyERERAIwZM4bXX3+dhIQE2rZtS2ZmJv369WP58uVs3LiRvn37EhsbS2Ji4iVf46WXXmLgwIFs3ryZfv36MXjwYE6ePHnR/U+fPs1bb73Fl19+yapVq0hMTGT06NH259944w2mTZvGlClTWL16Nenp6cyZM6dU51uSYcOGsW7dOubNm8eaNWswDIN+/frZ22+HDx9OdnY2q1atIj4+njfeeANfX18A/vnPf7Jt2zYWLVpEQkICH374IbVq1briWkqjWs8Zeei6RnzzRxKHUs/wyaq9jOzd1OySRESqtDO5+bQct8SU1972ch+83S//sRUQEIC7uzve3t6EhoYCsH37dgBefvllbrrpJvu+QUFBREVF2b9+5ZVXmD17NvPmzWPEiBEXfY1hw4Zx3333AfCvf/2L//znP/zxxx/07du3xP1zc3P56KOPaNy4MQAjRozg5Zdftj//3nvvMXbsWAYMGADA+++/bx+pKKtdu3Yxb948Vq9eTbdu3QCYNm0aERERzJkzh7vvvpvExETuvPNO2rRpA0CjRo3sxycmJhIdHU3Hjh0B28hQRau2IyMAnm4ujO3XAoCPVu4hOe2MyRWJiEhFOvcBe05mZiajR48mMjKSwMBAfH19SUhIuOzISNu2be2/9/Hxwd/f374sekm8vb3tQQRsS6ef2z8tLY0jR47QuXNn+/MuLi506NChTOd2TkJCAq6urnTp0sW+rWbNmjRv3pyEhAQAnnzySV599VW6d+/O+PHj2bx5s33fxx9/nOnTp9OuXTuee+45fv311yuqoyyq9cgIwC1twphafz/rDpzi34t38M497cwuSUSkyvJyc2Hby31Me+2r9eeumNGjR7Ns2TLeeustmjRpgpeXF3fddRc5OTmX/D5ubm7FvrZYLBQUFJRpfzObJx566CH69OnDggULWLp0KRMmTODtt9/miSeeICYmhgMHDrBw4UKW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48cffzSn+FIo6dyAYu+JI/8cXsn5OdrP4IMPPmjUr1/fcHd3N4KDg41evXrZP6gNw7HfP8Mo+/k52vtXkj+HkarwHloMwzAqbtxFRERE5NKcds6IiIiIOAaFERERETGVwoiIiIiYSmFERERETKUwIiIiIqZSGBERERFTKYyIiIiIqRRGRMQhWCwW5syZY3YZIlIBFEZE5LKGDRuGxWK54NG3b1+zSxMRJ+C0d+0VkfLVt29fpkyZUmybh4eHSdWIiDPRyIiIlIqHhwehoaHFHjVq1ABsl1A+/PBDYmJi8PLyolGjRsyaNavY8fHx8dx44414eXlRs2ZNHnnkETIzM4vt89lnn9GqVSs8PDwICwtjxIgRxZ4/fvw4AwYMwNvbm6ZNmzJv3jz7c6dOnWLw4MEEBwfj5eVF06ZNLwhPIlI1KYyISLn45z//yZ133smmTZsYPHgw9957LwkJCQBkZWXRp08fatSowdq1a5k5cyY//PBDsbDx4YcfMnz4cB555BHi4+OZN28eTZo0KfYaL730EgMHDmTz5s3069ePwYMHc/LkSfvrb9u2jUWLFpGQkMCHH35IrVq1Ku8PQESuXIXehk9EnMLQoUMNFxcXw8fHp9jjtddeMwzDdvfaxx57rNgxXbp0MR5//HHDMAzjk08+MWrUqGFkZmban1+wYIFhtVqNlJQUwzAMIzw83HjhhRcuWgNg/OMf/7B/nZmZaQDGokWLDMMwjNjYWOOBBx4onxMWkUqlOSMiUio33HADH374YbFtQUFB9t937dq12HNdu3YlLi4OgISEBKKiovDx8bE/3717dwoKCtixYwcWi4XDhw/Tq1evS9bQtm1b++99fHzw9/fn6NGjADz++OPceeedbNiwgZtvvpn+/fvTrVu3KzpXEalcCiMiUio+Pj4XXDYpL15eXqXaz83NrdjXFouFgoICAGJiYjhw4AALFy5k2bJl9OrVi+HDh/PWW2+Ve70iUr40Z0REysVvv/12wdeRkZEAREZGsmnTJrKysuzPr169GqvVSvPmzfHz86NBgwYsX778qmoIDg5m6NChfPXVV0yaNIlPPvnkqr6fiFQOjYyISKlkZ2eTkpJSbJurq6t9kujMmTPp2LEj1157LdOmTeOPP/7gf//7HwCDBw9m/PjxDB06lBdffJFjx47xxBNPcP/99xMSEgLAiy++yGOPPUbt2rWJiYkhIyOD1atX88QTT5SqvnHjxtGhQwdatWpFdnY28+fPt4chEanaFEZEpFQWL15MWFhYsW3Nmzdn+/btgK3TZfr06fztb38jLCyMb775hpYtWwLg7e3NkiVLGDlyJJ06dcLb25s777yTiRMn2r/X0KFDOXv2LO+88w6jR4+mVq1a3HXXXaWuz93dnbFjx7J//368vLy47rrrmD59ejmcuYhUNIthGIbZRYiIY7NYLMyePZv+/fubXYqIOCDNGRERERFTKYyIiIiIqTRnRESumq72isjV0MiIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMiIiJiKoURERERMZXCiIiIiJjq/wHV66WD1LTKRQAAAABJRU5ErkJggg==\n" }, "metadata": {} }, @@ -998,7 +1007,7 @@ "text/plain": [ "
" ], - "image/png": "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\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgaElEQVR4nO3dd3hUZf7+8fekTXojlRCI9N4JRRQRFCysWAERInZX/OmyrMCq2FaxIqyirK7YwAW7fhcFMWtFEKQovUMoqZT0OnN+f0wyEEggCUlOJrlf1zVXMmfOmfmcTMLcPOcpFsMwDERERERM4mZ2ASIiItK0KYyIiIiIqRRGRERExFQKIyIiImIqhRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkSasNdeew2LxUL//v3NLkVEmjCL1qYRabouvPBCjhw5wv79+9m1axdt27Y1uyQRaYLUMiLSRO3bt49ffvmF2bNnEx4ezqJFi8wuqUK5ublmlyAidUxhRKSJWrRoESEhIVx11VXccMMNFYaREydO8Je//IW4uDisVistWrRg4sSJZGRkOPcpKCjg8ccfp3379nh7exMdHc11113Hnj17APj++++xWCx8//335Z57//79WCwW3nnnHee2W2+9FX9/f/bs2cOVV15JQEAA48ePB+Cnn37ixhtvpGXLllitVmJjY/nLX/5Cfn7+GXVv376dm266ifDwcHx8fOjQoQMPP/wwAN999x0Wi4XPPvvsjOM++OADLBYLq1atqvbPU0RqzsPsAkTEHIsWLeK6667Dy8uLcePG8frrr7N27Vr69esHQE5ODhdddBHbtm3jtttuo3fv3mRkZPDll19y6NAhwsLCsNlsXH311SQmJjJ27FgeeOABsrOzWbFiBZs3b6ZNmzbVrqukpIQRI0YwePBgXnzxRXx9fQH46KOPyMvL495776VZs2asWbOGV155hUOHDvHRRx85j//jjz+46KKL8PT05K677iIuLo49e/bwf//3fzz99NNccsklxMbGsmjRIq699tozfiZt2rRh4MCB5/GTFZFqM0Skyfntt98MwFixYoVhGIZht9uNFi1aGA888IBzn5kzZxqA8emnn55xvN1uNwzDMBYsWGAAxuzZsyvd57vvvjMA47vvviv3+L59+wzAePvtt53bEhISDMCY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9vQsn3ItFstZg0NF+9fmfHijRo2iVatWvPnmmzRv3hy73U7Xrl2d51E2RXplzvV4RfVW1EH19J/vCy+8wNy5c5kzZw7dunXDz8+PBx98sMp1geNSTc+ePTl06BBvv/02l156Ka1atTrncSLSdBiGwfG84nKXT8pCR9KxPI6cyKfkHJdSArw9aBla1rJRegvxITbUl5hgH7xr4TPILI0ujFgslipdKjGbl5eXcyr7s1m5ciW33nqr8/JITk4O+/fvr+PqygsKCiIyMpK1a9dy8cUXA44WhfXr19OzZ89zHn/06FF27NjBm2++yUUXXQTAzz//XG6f7t278+9//5tjx45V2DrSvXt3EhMTnWsgnS48PLxch9tdu3aRl5d3ztpWrlzJNddcwy233AI4Oqvu3LmTzp07A9CuXTt8fHxITEzkjjvuqPA5unXrRt++fXnzzTf54IMPePXVV8/5uiLS+OQX2Th0vPQyylFH/42kY3nOPhy5VbmUEuJDi9KQURY6ylo5gnzNvZRSlxr+p3YjFRcXx6+//sr+/fvx9/evtNWiXbt2fPrpp4waNQqLxcKjjz5a5Usjten+++9n1qxZtG3blo4dO/LKK69w/PjxKvWLCAkJoVmzZrzxxhtER0eTlJTE9OnTy+0zbtw4nnnmGUaPHs2sWbOIjo5mw4YNNG/enIEDB/LYY48xbNgw2rRpw9ixYykpKeGrr75i2rRpgGNUy6uvvsrAgQOx2WxMmzbtjNaeirRr146PP/6YX375hZCQEGbPnk1qaqozjHh7ezNt2jQeeughvLy8uPDCC0lPT2fLli3cfvvtzucp68jq5+dXbpSPiDQeNrtBSlaBs99G+Y6i+aRnn/1SCkBkoNXZb6OFM2j40LKZL5EB3g36UkpdUhgxydSpU0lISKBz587k5+fz9ttvV7jf7Nmzue222xg0aBBhYWFMmzaNrKyseq4Wpk2bRkpKChMnTsTd3Z277rqLESNGVGmRNzc3NxYvXsz/+3//j65du9KhQwf++c9/cskllzj38fLy4ptvvuGvf/0rV155JSUlJXTu3Jl58+YBjkniPvroI5566imeffZZAgMDna00AC+99BKTJk3ioosuonnz5sydO5d169ads7ayRRxHjBiBr68vd911F6NHjyYzM9O5z6OPPoqHhwczZ87kyJEjREdHc88995R7nnHjxvHggw8ybtw4rTUj4qIMw+BEXnH5DqKnhI7DJ/Iptp3jUorVo/QSis9pl1N8aRHi2pdS6pIWypMasdvtdOrUiZtuuomnnnrK7HJMt3//ftq0acPatWvp3bv3OffX762IOQqKbRw6fnIUysnRKfkcOpZHduHZJ5v0dLcQE+xTLmScOjolyMdTI+lOUdWF8tQyIlVy4MABvvnmG4YMGUJhYSGvvvoq+/bt4+abbza7NFMVFxdz9OhRHnnkEQYMGFClICIidcdmN0jNKih3+eTUyylpVbiUEh5gPXn55NTLKaG+RAV6495EL6XUJYURqRI3Nzfeeecdpk6dimEYdO3alW+//ZZOnTqRlJTk7GNRka1bt551gjZXtnLlSoYOHUr79u35+OOPzS5HpEnIzCt2jkhJOiVoHDqez+Hj+RTZzt6vzt/qQYvTO4ieMu+GLqXUP4URqZLY2FhWrlxZ4WPNmzdn48aNlR7bvHnzOqrKfJdcckmtDoEWEcellMMnHCNRDpW2bpw62Vd2wdkvpXi4WYgJcUzwVdZ/4+TlFF9CfHUppaFRGJHz5uHhUW62VBGRs7HbDVKzC5wziJ4+70ZKVsE5nyPM33qyk6hzdIrjflSgNx7uWnrNlSiMiIhIrcvML3b21Th9+vJDJ/LPuUKsr5e787JJy9NGp7QI8XGJ+aSk6vRuiohItRmGwdHcInal5rAnPee0Fo58MvPPnAH5VO5uFpoHeztbNk6dUbRlqC+hfl66lNKEKIyIiEilDMMx0dfutBx2peawKy2H3WnZ7ErL4UTe2QNHmL+XcyG2lqf124gO0qUUOUlhREREsNsNDp/IZ1da9mnBI4ecSubesFggNsSXthH+5dZMaVl6KcXPqo8YqRr9poiINCElNjtJx/KcQWN3Wo4zgBQUV9yPw93NQlwzR+hoFxFAu0h/2kb40ybcX8NgG4uyZUbczGmtUhhxYXFxcTz44IM8+OCDZpciIg1MUYmd/UdzS1s4HJdV9qTlsDc9t9J5OLzc3Wgd7kfbCP9ywSOumR9eHrqk0mCUFEFRDhTlnnLLOfP74ryKt1d0vzgP7v4RonuYckoKIyIiLqyg2Mae9JxTLq04Wjn2H83DVsmS9N6ebs6wcTJ4OC61qB9HLbLbSwNBJUGgwsfOFjJKb/az99WpsaLcunneKlAYEVPYbDYsFgtuJjUJirianMIS9qQ5+nHsSstmd2mfjoPH86hs3j1/q4czaJRdWmkXEUBMsE+TXR22UhW1NhSfo+XhjO9Pa4koruMPd3crePmBl3/pV79T7vue5bHTvvf0dXzvE1K39Z6FwohJ3njjDR5//HEOHTpU7gP5mmuuoVmzZjz88MNMmTKF1atXk5ubS6dOnZg1axbDhw+v0evNnj2bt99+m7179xIaGsqoUaN4/vnn8ff3d+6zcuVKHn74YdasWYPVaiU+Pp7FixcTEhKC3W7nxRdf5I033uDgwYNERkZy99138/DDD/P9998zdOhQjh8/TnBwMAAbN26kV69e7Nu3j7i4ON555x0efPBB3nvvPaZPn87OnTvZvXs36enp/P3vf2fDhg0UFxfTs2dPXn755XJrvJw4cYJp06bx+eefk5mZSdu2bXn22WcZOnQo0dHRLFiwgBtuuMG5/+eff8748eNJSUkhICCgRj8vEbNk5hWzOz3b2YF0V1oOu1OzOZJZ+URgwb6etIvwp21EQLngERXo3fiGx5a1NlTnEoTz+9OPOeWxumptAMBSe4Hh1P3cPeuw5vrV+MKIYTh+Sc3g6evoXl4FN954I/fffz/fffcdw4YNA+DYsWMsW7aMr776ipycHK688kqefvpprFYr7733HqNGjWLHjh01WufFzc2Nf/7zn1xwwQXs3buXP//5zzz00EO89tprgCM8DBs2jNtuu425c+fi4eHBd999h81mA2DGjBm8+eabvPzyywwePJjk5GS2b99erRry8vJ47rnn+Pe//02zZs2IiIhg7969JCQk8Morr2AYBi+99BJXXnklu3btIiAgALvdzhVXXEF2djYLFy6kTZs2bN26FXd3d/z8/Bg7dixvv/12uTBSdl9BRBqqU+fo2J3uCBtlwSP9LAu5hQdYaRvuCBvO8BHpT7OGOieHrbj6lyDO2behvlsbKgoMZwkPnhVs9/Sp8mdDU9X4wkhxHjxj0loofz/i+MWrgpCQEK644go++OADZxj5+OOPCQsLY+jQobi5udGjx8mORE899RSfffYZX375JZMnT652aad2co2Li+Mf//gH99xzjzOMPP/88/Tt29d5H6BLly4AZGdnM3fuXF599VUSEhIAaNOmDYMHD65WDcXFxbz22mvlzuvSSy8tt88bb7xBcHAwP/zwA1dffTXffvsta9asYdu2bbRv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RKQ+KIyUStyWyuET+YT4enJ192izyxEREWkyFEZKlXVcHRvfEm9Pd5OrERERaTpqFEbmzZtHXFwc3t7e9O/fnzVr1lTpuMWLF2OxWBg9enRNXrbO7E7L5ufdGbhZHHOLiIiISP2pdhhZsmQJU6ZM4bHHHmP9+vX06NGDESNGkJaWdtbj9u/fz9SpU7noootqXGxdeb+0VWR4p0hahPiaXI2IiEjTUu0wMnv2bO68804mTZpE586dmT9/Pr6+vixYsKDSY2w2G+PHj+eJJ56gdevW51VwbcsuKObjdYcArUMjIiJihmqFkaKiItatW8fw4cNPPoGbG8OHD2fVqlWVHvfkk08SERHB7bffXqXXKSwsJCsrq9ytrny6/jC5RTbahPsxqE2zOnsdERERqVi1wkhGRgY2m43IyPKLx0VGRpKSklLhMT///DNvvfUWb775ZpVfZ9asWQQFBTlvsbGx1SmzygzD4N1V+wEN5xURETFLnY6myc7OZsKECbz55puEhYVV+bgZM2aQmZnpvB08eLBO6lu5+yh703Pxt3pwXe8WdfIaIiIicnYe1dk5LCwMd3d3UlNTy21PTU0lKirqjP337NnD/v37GTVqlHOb3W53vLCHBzt27KBNmzZnHGe1WrFa635dmLJWket7x+BvrdaPQkRERGpJtVpGvLy86NOnD4mJic5tdrudxMREBg4ceMb+HTt2ZNOmTWzcuNF5+9Of/sTQoUPZuHFjnV1+qYoSm52iEjsWC0wYGGdaHSIiIk1dtZsDpkyZQkJCAn379iU+Pp45c+aQm5vLpEmTAJg4cSIxMTHMmjULb29vunbtWu744OBggDO21zcPdzfevS2ewyfyiQn2MbUWERGRpqzaYWTMmDGkp6czc+ZMUlJS6NmzJ8uWLXN2ak1KSsLNzXUmdlUQERERMZfFMAzD7CLOJSsri6CgIDIzMwkMDDS7HBEREamCqn5+u04ThoiIiDRKCiMiIiJiKoURERERMZXCiIiIiJhKYURERERMpTAiIiIiplIYEREREVMpjIiIiIipFEZERETEVAojIiIiYiqFERERETGVwoiIiIiYqtqr9pqhbC2/rKwskysRERGRqir73D7XmrwuEUays7MBiI2NNbkSERERqa7s7GyCgoIqfdxinCuuNAB2u50jR44QEBCAxWKptefNysoiNjaWgwcPnnVp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\n" }, "metadata": {} } @@ -1022,12 +1031,12 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "5b8f7da3-f0db-4f8e-fe53-1a2124c223ff" + "outputId": "95ea8168-32de-4cb7-8c16-91b433e1f7ba" }, "source": [ "efficientnet_model.summary()" ], - "execution_count": 16, + "execution_count": 22, "outputs": [ { "output_type": "stream", @@ -1037,15 +1046,15 @@ "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", - " feature_extraction_layer (K (None, 1280) 4049564 \n", - " erasLayer) \n", + " feature_extraction_layer ( (None, 1280) 4049564 \n", + " KerasLayer) \n", " \n", " output_layer (Dense) (None, 10) 12810 \n", " \n", "=================================================================\n", - "Total params: 4,062,374\n", - "Trainable params: 12,810\n", - "Non-trainable params: 4,049,564\n", + "Total params: 4062374 (15.50 MB)\n", + "Trainable params: 12810 (50.04 KB)\n", + "Non-trainable params: 4049564 (15.45 MB)\n", "_________________________________________________________________\n" ] } @@ -1068,7 +1077,7 @@ "source": [ "## Comparing models using TensorBoard\n", "\n", - "Alright, even though we've already compared the performance of our two models by looking at the accuracy scores. But what if you had more than two models? \n", + "Alright, even though we've already compared the performance of our two models by looking at the accuracy scores. But what if you had more than two models?\n", "\n", "That's where an experiment tracking tool like [TensorBoard](https://www.tensorflow.org/tensorboard) (preinstalled in Google Colab) comes in.\n", "\n", @@ -1086,8 +1095,8 @@ "Upload TensorBoard dev records\n", "\n", "!tensorboard dev upload --logdir ./tensorflow_hub/ \\\n", - " --name \"EfficientNetB0 vs. ResNet50V2\" \\ \n", - " --description \"Comparing two different TF Hub feature extraction models architectures using 10% of training images\" \\ \n", + " --name \"EfficientNetB0 vs. ResNet50V2\" \\\n", + " --description \"Comparing two different TF Hub feature extraction models architectures using 10% of training images\" \\\n", " --one_shot\n", "```\n", "\n", @@ -1100,6 +1109,252 @@ "Running the `tensorboard dev upload` command will first ask you to authorize the upload to TensorBoard.dev. After you've authorized the upload, your log files will be uploaded." ] }, + { + "cell_type": "code", + "source": [ + "%tensorboard --logdir logs/fit" + ], + "metadata": { + "colab": { + "resources": { + "https://localhost:6006/?tensorboardColab=true": { + "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlM2QoMCwgMCwgMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2xlZnQ6MH1bZGlyPXJ0bF0gLmNkay12aXN1YWxseS1oaWRkZW57bGVmdDphdXRvO3JpZ2h0OjB9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcHt0cmFuc2l0aW9uOnZpc2liaWxpdHkgMW1zIGxpbmVhcixvcGFjaXR5IDFtcyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eToxfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MDt2aXNpYmlsaXR5OnZpc2libGV9LmNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9ue3RyYW5zaXRpb246bm9uZX0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1cywgNHB4KX0ubWF0LWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6dmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItc3R5bGUsIHNvbGlkKSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXMsIDRweCl9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOmZvY3VzOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZley0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgxLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MzJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDozMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSBoM3tmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjhweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWg0LC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgaDR7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktc3Ryb25nLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MjRweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHkgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb24sLm1hdC10eXBvZ3JhcGh5IC5tYXQtc21hbGwsLm1hdC10eXBvZ3JhcGh5IC5tYXQtY2FwdGlvbntmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250LXNpemU6MTEycHg7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjExMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udC1zaXplOjU2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250LXNpemU6NDVweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDhweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250LXNpemU6MzRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyLC5tYXQtZ3JpZC10aWxlLWZvb3Rlcntmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LXN0ZXBwZXItdmVydGljYWwsLm1hdC1zdGVwcGVyLWhvcml6b250YWx7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcntmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9ye2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDozMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10cmVle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoyNHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWRjLWJ1dHRvbnstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxpbmUtaGVpZ2h0LCAxNHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC13ZWlnaHQsIDUwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxldHRlci1zcGFjaW5nLCBub3JtYWwpO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tdGV4dC1kZWNvcmF0aW9uLCBub25lKTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LWNoZWNrYm94e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVse2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1ncm91cHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWxpc3QtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntjb2xvcjojMjEyMTIxO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXJhaXNlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNTdjMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmY5ODAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtd2FybnstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtdGV4dC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmOTgwMDstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtZmlsbGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWVsZXZhdGlvbjowfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbnstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmY5ODAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1kaXNhYmxlZC1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wNH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2ZmOTgwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDE1MiwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXdhcm4sLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wNH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtd2FybnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b257LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjU3YzAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZmY5ODAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC13YXJuey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6I2Y0NDMzNn0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7aGVpZ2h0OjM2cHh9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MTJweH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0OHB4O21heC13aWR0aDo0OHB4fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHg7bWFyZ2luLXJpZ2h0OjRweDttYXJnaW4tbGVmdDo0cHh9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tYXQtb3B0aW9ue2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjU3YzAwfS5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Lm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6I2IwYjBiMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y1N2MwMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojYjBiMGIwfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejh7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDlweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEwe2JveC1zaGFkb3c6MHB4IDZweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA0cHggMThweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTF7Ym94LXNoYWRvdzowcHggNnB4IDdweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDExcHggMTVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEze2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTR7Ym94LXNoYWRvdzowcHggN3B4IDlweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE0cHggMjFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTVweCAyMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE2e2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE3e2JveC1zaGFkb3c6MHB4IDhweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTdweCAyNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMThweCAyOHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE5e2JveC1zaGFkb3c6MHB4IDlweCAxMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggN3B4IDM2cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIwe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIwcHggMzFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMXB4IDMzcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjJ7Ym94LXNoYWRvdzowcHggMTBweCAxNHB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDQycHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIze2JveC1zaGFkb3c6MHB4IDExcHggMTRweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIzcHggMzZweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2FyZC5tYXQtY2FyZC1mbGF0Om5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjojNjE2MTYxfS5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmRkZWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZGRlYmZ9Lm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZmU1YmZ9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZlNWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmNkMGNkfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmY2QwY2R9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6I2Y1N2MwMH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZmY5ODAwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn0ubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6Izc1NzU3NX0ubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y1N2MwMH0ubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeHtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWhpbnR7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjojNjE2MTYxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNDIpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNDIpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjAyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojMjEyMTIxfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojNzU3NTc1fS5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1pbnZhbGlkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6Izc1NzU3NX0ubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZmZn0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmZmICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6IzAwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjU3YzAwfS5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojMjEyMTIxfS5tYXQtZGlhbG9nLWNvbnRhaW5lcntib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiMyMTIxMjF9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6IzIxMjEyMTtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojMDAwfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojNjE2MTYxfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjU3YzAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnk6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmZjk4MDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2Y0NDMzNn0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuOmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjIpfS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjIpfS5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNyksIHJnYmEoMCwgMCwgMCwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2NvbG9yOiMyMTIxMjF9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LW1lbnUtc3VibWVudS1pY29uLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvciwubWF0LW1lbnUtc3VibWVudS1pY29ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Y29sb3I6IzIxMjEyMX0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntjb2xvcjojNjE2MTYxfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjojNzU3NTc1fS5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1saXN0LW9wdGlvbjpmb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXMsLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpob3ZlciwubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmhvdmVyLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6I2ZmZn0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjojNjE2MTYxfS5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCwubWF0LXBhZ2luYXRvci1pbmNyZW1lbnR7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpO2JvcmRlci1yaWdodDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpfS5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpfS5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcGFnaW5hdG9yLWNvbnRhaW5lcnttaW4taGVpZ2h0OjU2cHh9Lm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1ib3R0b206bm9uZX0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2NvbG9yOiMyMTIxMjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojMjEyMTIxfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM3NTc1NzV9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE2NywzOCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI0LDE3OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI0LDE3OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kOiMzMjMyMzI7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOiNmZjk4MDB9Lm1hdC10YWJsZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10YWJsZSB0aGVhZCwubWF0LXRhYmxlIHRib2R5LC5tYXQtdGFibGUgdGZvb3QsbWF0LWhlYWRlci1yb3csbWF0LXJvdyxtYXQtZm9vdGVyLXJvdyxbbWF0LWhlYWRlci1yb3ddLFttYXQtcm93XSxbbWF0LWZvb3Rlci1yb3ddLC5tYXQtdGFibGUtc3RpY2t5e2JhY2tncm91bmQ6aW5oZXJpdH1tYXQtcm93LG1hdC1oZWFkZXItcm93LG1hdC1mb290ZXItcm93LHRoLm1hdC1oZWFkZXItY2VsbCx0ZC5tYXQtY2VsbCx0ZC5tYXQtZm9vdGVyLWNlbGx7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1oZWFkZXItY2VsbHtjb2xvcjojNjE2MTYxfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2NvbG9yOiMyMTIxMjF9Lm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJhZGdlLm1hdC1iYWRnZXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYmFkZ2UtaGlkZGVuIC5tYXQtYmFkZ2UtY29udGVudHtkaXNwbGF5Om5vbmV9Lm1hdC1iYWRnZS1jb250ZW50e3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246dHJhbnNmb3JtIDIwMG1zIGVhc2UtaW4tb3V0O3RyYW5zZm9ybTpzY2FsZSgwLjYpO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztwb2ludGVyLWV2ZW50czpub25lfS5uZy1hbmltYXRlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudCwubWF0LWJhZGdlLWNvbnRlbnQuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lfS5tYXQtYmFkZ2UtY29udGVudC5tYXQtYmFkZ2UtYWN0aXZle3RyYW5zZm9ybTpub25lfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi04cHh9Lm1hdC1iYWRnZS1tZWRpdW0gLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjIycHg7aGVpZ2h0OjIycHg7bGluZS1oZWlnaHQ6MjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xMXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTE0cHh9Lm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjU3YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH0ubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNiZGJkYmQ7Y29sb3I6Izc1NzU3NX0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzpub25lfS5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjE7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6IzAwMH0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0OnNvbGlkIDFweCAjZTBlMGUwfVtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjZTBlMGUwfS5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOnNvbGlkIDFweCAjZTBlMGUwfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtjb2xvcjojNjE2MTYxfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6IzIxMjEyMX0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6I2VlZX0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2xpbmUtaGVpZ2h0OjQ4cHh9Lm1hdC1jYWxlbmRhci1hcnJvd3tmaWxsOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQsLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojMjEyMTIxO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6Izc1NzU3NX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcHJldmlld3tjb2xvcjpyZ2JhKDAsMCwwLC4yNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTgpfS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDUsMTI0LDAsLjIpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC40KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXsubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNmNTdjMDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNzU3NTc1fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6OHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDowcHg7bWFyZ2luLWJvdHRvbTowcHg7bWFyZ2luLXJpZ2h0OjBweDttYXJnaW4tbGVmdDowcHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX190b3VjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0MHB4O2xlZnQ6NTAlO3dpZHRoOjQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtkaXNwbGF5Om5vbmV9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojZmZmfX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6IzIxMjEyMX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjojNjE2MTYxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Lm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNmNTdjMDB9Lm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRyYXdlci1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjYpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6IzYxNjE2MX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6IzYxNjE2MTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojMjEyMTIxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSwubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC10b29sYmFye2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojMjEyMTIxfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LXZhbHVlLC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOmluaGVyaXR9Lm1hdC10b29sYmFyIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo2NHB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjY0cHh9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NTZweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo1NnB4fX0ubWF0LXRyZWV7YmFja2dyb3VuZDojZmZmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtjb2xvcjojMjEyMTIxfS5tYXQtdHJlZS1ub2Rle21pbi1oZWlnaHQ6NDhweH1ib2R5e292ZXJmbG93OmhpZGRlbn0uY2RrLW92ZXJsYXktY29udGFpbmVye2NvbnRhaW46c3RyaWN0fWE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiMxOTc2ZDJ9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojN2IxZmEyfWJvZHkuZGFyay1tb2Rle2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSBhOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKXtjb2xvcjojNDJhNWY1fWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC13YXJuey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy10ZXh0LWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6IzQyNDI0MjstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2VmNmMwMDstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtZmlsbGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojNDI0MjQyOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2VmNmMwMDstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2VmNmMwMDstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItZWxldmF0aW9uOjB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1kaXNhYmxlZC1vdXRsaW5lLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wOH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wOH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtd2FybnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b257LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDIzOSwgMTA4LCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC13YXJuey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLWljb24tYnV0dG9uLWRpc2FibGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle2hlaWdodDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjEycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDhweDttYXgtd2lkdGg6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX3JpcHBsZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi10b3A6NHB4O21hcmdpbi1ib3R0b206NHB4O21hcmdpbi1yaWdodDo0cHg7bWFyZ2luLWxlZnQ6NHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX190b3VjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb246Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2NvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtYXBwLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejN7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo0e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDVweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Nntib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16N3tib3gtc2hhZG93OjBweCA0cHggNXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggN3B4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTZweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTB7Ym94LXNoYWRvdzowcHggNnB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTN7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MHB4IDhweCA5cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMjhweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTZ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowcHggOXB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzRweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTl7Ym94LXNoYWRvdzowcHggOXB4IDEycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMntib3gtc2hhZG93OjBweCAxMHB4IDE0cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlcntkaXNwbGF5Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJke2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkLm1hdC1jYXJkLWZsYXQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojNjAzZjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojNjAzZjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojNjEzNTMyfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Om5vdCgubWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDpub3QoLm1hdC1uYXRpdmUtc2VsZWN0LWlubGluZSkgb3B0aW9uOmRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtcHJlZml4LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtc3VmZml4e2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjE1KX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1pbnZhbGlkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tmaWxsOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6IzMwMzAzMCAhaW1wb3J0YW50fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQ6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGlhbG9nLWNvbnRhaW5lcntib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnk6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuOmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXI6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWVudS1zdWJtZW51LWljb24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LXN1Ym1lbnUtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cyxib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnR7Ym9yZGVyLXRvcDoycHggc29saWQgI2ZmZjtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLW5hdi1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cFtjbGFzcyo9bWF0LWJhY2tncm91bmQtXT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhcltjbGFzcyo9bWF0LWJhY2tncm91bmQtXXtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLXRvcDpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbmFjay1iYXItY29udGFpbmVye2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kOiNmYWZhZmE7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWJsZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0aGVhZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRib2R5LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGZvb3QsYm9keS5kYXJrLW1vZGUgbWF0LWhlYWRlci1yb3csYm9keS5kYXJrLW1vZGUgbWF0LXJvdyxib2R5LmRhcmstbW9kZSBtYXQtZm9vdGVyLXJvdyxib2R5LmRhcmstbW9kZSBbbWF0LWhlYWRlci1yb3ddLGJvZHkuZGFyay1tb2RlIFttYXQtcm93XSxib2R5LmRhcmstbW9kZSBbbWF0LWZvb3Rlci1yb3ddLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUtc3RpY2t5e2JhY2tncm91bmQ6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSBtYXQtcm93LGJvZHkuZGFyay1tb2RlIG1hdC1oZWFkZXItcm93LGJvZHkuZGFyay1tb2RlIG1hdC1mb290ZXItcm93LGJvZHkuZGFyay1tb2RlIHRoLm1hdC1oZWFkZXItY2VsbCxib2R5LmRhcmstbW9kZSB0ZC5tYXQtY2VsbCxib2R5LmRhcmstbW9kZSB0ZC5tYXQtZm9vdGVyLWNlbGx7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1oZWFkZXItY2VsbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNlbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1mb290ZXItY2VsbHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2VmNmMwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojNmU2ZTZlO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0OnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzIxMjEyMTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym9yZGVyOnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2xpbmUtaGVpZ2h0OjQ4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1hcnJvd3tmaWxsOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojZmZmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tcHJldmlld3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1pbm5lcltkaXNhYmxlZF17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjhweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX3JpcHBsZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi10b3A6MHB4O21hcmdpbi1ib3R0b206MHB4O21hcmdpbi1yaWdodDowcHg7bWFyZ2luLWxlZnQ6MHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDBweDtsZWZ0OjUwJTt3aWR0aDo0MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXR7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfUBtZWRpYShob3Zlcjogbm9uZSl7Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6IzQyNDI0Mn19Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjppbmhlcml0fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntoZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo2NHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi5tYXQtcHJpbWFyeXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE4OSwxODksMTg5LC42KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH1ib2R5LmRhcmstbW9kZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiNjNmM2YzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFye2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LXZhbHVlLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo2NHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjY0cHh9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpe2JvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NTZweH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItcm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo1NnB4fX1ib2R5LmRhcmstbW9kZSAubWF0LXRyZWV7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZS1ub2RlLGJvZHkuZGFyay1tb2RlIC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZS1ub2Rle21pbi1oZWlnaHQ6NDhweH0KPC9zdHlsZT4KCjxzdHlsZT4KICBodG1sLAogIGJvZHkgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIGZvbnQtZmFtaWx5OiBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKTsKCiAgICAvKiBMZWdhY3kgbWVjaGFuaXNtIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHN1YnBpeGVsIGFudGktYWxpYXNpbmcgb24gbWFjT1MuCiAgICAgKgogICAgICogSW4gdGhlIHBhc3QgWzFdLCBtYWNPUyBzdWJwaXhlbCBBQSBjYXVzZWQgZXhjZXNzaXZlIGJvbGRpbmcgZm9yIGxpZ2h0LW9uLWRhcmsgdGV4dDsgdGhpcyBydWxlCiAgICAgKiBhdm9pZHMgdGhhdCBieSByZXF1ZXN0aW5nIG5vbi1zdWJwaXhlbCBBQSBhbHdheXMsIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB3aGljaCBpcwogICAgICogdG8gdXNlIHN1YnBpeGVsIEFBIHdoZW4gYXZhaWxhYmxlLiBUaGUgb3JpZ2luYWwgaXNzdWUgd2FzICJmaXhlZCIgYnkgcmVtb3Zpbmcgc3VicGl4ZWwgQUEgaW4KICAgICAqIG1hY09TIDE0IChNb2phdmUpLCBidXQgZm9yIGxlZ2FjeSByZWFzb25zIHRoZXkgcHJlc2VydmVkIHRoZSBib2xkaW5nIGVmZmVjdCBhcyBhbiBvcHRpb24uCiAgICAgKiBDaHJvbWUgdGhlbiBpbiB0dXJuIHVwZGF0ZWQgaXRzIGZvbnQgcmVuZGVyaW5nIHRvIGFwcGx5IHRoYXQgYm9sZGluZyBlZmZlY3QgWzJdLCB3aGljaCBtZWFucwogICAgICogdGhhdCBldmVuIHRob3VnaCB0aGUgYC13ZWJraXQtZm9udC1zbW9vdGhpbmdgIGRvY3MgWzNdIHN1Z2dlc3QgdGhhdCBzZXR0aW5nIGBhbnRpYWxpYXNlZGAKICAgICAqIHdvdWxkIGhhdmUgbm8gZWZmZWN0IGZvciByZWNlbnQgdmVyc2lvbnMgb2YgbWFjT1MsIGl0IHN0aWxsIGlzIG5lZWRlZCB0byBhdm9pZCB0aGUgYm9sZGluZy4KICAgICAqCiAgICAgKiBbMV06IGh0dHA6Ly93d3cubGlnaHRlcnJhLmNvbS9hcnRpY2xlcy9tYWNvc3h0ZXh0YWFidWcvCiAgICAgKiBbMl06IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTg1ODg2MQogICAgICogWzNdOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZm9udC1zbW9vdGgKICAgICAqCiAgICAgKi8KCiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICB9CiAgbm9zY3JpcHQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIG1heC13aWR0aDogNjAwcHg7CiAgICBwYWRkaW5nOiAxMHB4OwogIH0KPC9zdHlsZT4KCjwvaGVhZD48Ym9keT48bm9zY3JpcHQ+CiAgICA8aDE+VGVuc29yQm9hcmQgcmVxdWlyZXMgSmF2YVNjcmlwdDwvaDE+CiAgICA8cD5QbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQgYW5kIHJlbG9hZCB0aGlzIHBhZ2UuPC9wPgogIDwvbm9zY3JpcHQ+PHRiLXdlYmFwcD48L3RiLXdlYmFwcD48c2NyaXB0IHNyYz0iaW5kZXguanM/X2ZpbGVfaGFzaD03NTFhODVmNyI+PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4=", + "ok": true, + "headers": [ + [ + "content-type", + "text/html; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/index.js?_file_hash=751a85f7": { + "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7KCgpPT57dmFyIHZ2ZT1PYmplY3QuY3JlYXRlO3ZhciBCTT1PYmplY3QuZGVmaW5lUHJvcGVydHkseHZlPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGJ2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHd2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxTdmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaGR0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsTXZlPU9iamVjdC5nZXRQcm90b3R5cGVPZixwZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFdmU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgVEk9TWF0aC5wb3csZmR0PShlLHQscik9PnQgaW4gZT9CTShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTplW3RdPXIsS2w9KGUsdCk9Pntmb3IodmFyIHIgaW4gdHx8KHQ9e30pKXBkdC5jYWxsKHQscikmJmZkdChlLHIsdFtyXSk7aWYoaGR0KWZvcih2YXIgciBvZiBoZHQodCkpRXZlLmNhbGwodCxyKSYmZmR0KGUscix0W3JdKTtyZXR1cm4gZX0sTXg9KGUsdCk9Pnh2ZShlLHd2ZSh0KSk7dmFyIEV4PShlPT50eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0eXBlb2YgUHJveHkhPSJ1bmRlZmluZWQiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTT0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBIPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyksS3M9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClCTShlLHIse2dldDp0W3JdLGVudW1lcmFibGU6ITB9KX0sZGR0PShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIFN2ZSh0KSkhcGR0LmNhbGwoZSxpKSYmaSE9PXImJkJNKGUsaSx7Z2V0OigpPT50W2ldLGVudW1lcmFibGU6IShuPWJ2ZSh0LGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBFZT0oZSx0LHIpPT4ocj1lIT1udWxsP3Z2ZShNdmUoZSkpOnt9LGRkdCh0fHwhZXx8IWUuX19lc01vZHVsZT9CTShyLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSksVXQ9ZT0+ZGR0KEJNKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTt2YXIgUmk9KGUsdCxyKT0+bmV3IFByb21pc2UoKG4saSk9Pnt2YXIgbz1sPT57dHJ5e3Moci5uZXh0KGwpKX1jYXRjaChjKXtpKGMpfX0sYT1sPT57dHJ5e3Moci50aHJvdyhsKSl9Y2F0Y2goYyl7aShjKX19LHM9bD0+bC5kb25lP24obC52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGwudmFsdWUpLnRoZW4obyxhKTtzKChyPXIuYXBwbHkoZSx0KSkubmV4dCgpKX0pO3ZhciBIZHQ9SCgocF9yLFBJKT0+e3ZhciBtZHQsZ2R0LF9kdCx5ZHQsdmR0LHhkdCxiZHQsd2R0LFNkdCxNZHQsRWR0LFRkdCxDZHQsQ0ksaEcsQWR0LFBkdCxJZHQsVHgsTGR0LGtkdCxSZHQsTmR0LERkdCxPZHQsemR0LEZkdCxCZHQsQUk7KGZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiP2dsb2JhbDp0eXBlb2Ygc2VsZj09Im9iamVjdCI/c2VsZjp0eXBlb2YgdGhpcz09Im9iamVjdCI/dGhpczp7fTt0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZSgidHNsaWIiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKG4pe2Uocih0LHIobikpKX0pOnR5cGVvZiBQST09Im9iamVjdCImJnR5cGVvZiBQSS5leHBvcnRzPT0ib2JqZWN0Ij9lKHIodCxyKFBJLmV4cG9ydHMpKSk6ZShyKHQpKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG4hPT10JiYodHlwZW9mIE9iamVjdC5jcmVhdGU9PSJmdW5jdGlvbiI/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pOm4uX19lc01vZHVsZT0hMCksZnVuY3Rpb24obyxhKXtyZXR1cm4gbltvXT1pP2kobyxhKTphfX19KShmdW5jdGlvbihlKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24obixpKXtuLl9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24obixpKXtmb3IodmFyIG8gaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmKG5bb109aVtvXSl9O21kdD1mdW5jdGlvbihuLGkpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iJiZpIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGkpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO3QobixpKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufW4ucHJvdG90eXBlPWk9PT1udWxsP09iamVjdC5jcmVhdGUoaSk6KG8ucHJvdG90eXBlPWkucHJvdG90eXBlLG5ldyBvKX0sZ2R0PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSxvPTEsYT1hcmd1bWVudHMubGVuZ3RoO288YTtvKyspe2k9YXJndW1lbnRzW29dO2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiYobltzXT1pW3NdKX1yZXR1cm4gbn0sX2R0PWZ1bmN0aW9uKG4saSl7dmFyIG89e307Zm9yKHZhciBhIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sYSkmJmkuaW5kZXhPZihhKTwwJiYob1thXT1uW2FdKTtpZihuIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIHM9MCxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobik7czxhLmxlbmd0aDtzKyspaS5pbmRleE9mKGFbc10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChuLGFbc10pJiYob1thW3NdXT1uW2Fbc11dKTtyZXR1cm4gb30seWR0PWZ1bmN0aW9uKG4saSxvLGEpe3ZhciBzPWFyZ3VtZW50cy5sZW5ndGgsbD1zPDM/aTphPT09bnVsbD9hPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTphLGM7aWYodHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZ0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZT09ImZ1bmN0aW9uIilsPVJlZmxlY3QuZGVjb3JhdGUobixpLG8sYSk7ZWxzZSBmb3IodmFyIHU9bi5sZW5ndGgtMTt1Pj0wO3UtLSkoYz1uW3VdKSYmKGw9KHM8Mz9jKGwpOnM+Mz9jKGksbyxsKTpjKGksbykpfHxsKTtyZXR1cm4gcz4zJiZsJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxvLGwpLGx9LHZkdD1mdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihvLGEpe2kobyxhLG4pfX0seGR0PWZ1bmN0aW9uKG4saSxvLGEscyxsKXtmdW5jdGlvbiBjKFMpe2lmKFMhPT12b2lkIDAmJnR5cGVvZiBTIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIFN9Zm9yKHZhciB1PWEua2luZCxoPXU9PT0iZ2V0dGVyIj8iZ2V0Ijp1PT09InNldHRlciI/InNldCI6InZhbHVlIixmPSFpJiZuP2Euc3RhdGljP246bi5wcm90b3R5cGU6bnVsbCxwPWl8fChmP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZixhLm5hbWUpOnt9KSxkLGc9ITEsXz1vLmxlbmd0aC0xO18+PTA7Xy0tKXt2YXIgeT17fTtmb3IodmFyIHggaW4gYSl5W3hdPXg9PT0iYWNjZXNzIj97fTphW3hdO2Zvcih2YXIgeCBpbiBhLmFjY2Vzcyl5LmFjY2Vzc1t4XT1hLmFjY2Vzc1t4XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKFMpe2lmKGcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7bC5wdXNoKGMoU3x8bnVsbCkpfTt2YXIgYj0oMCxvW19dKSh1PT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtoXSx5KTtpZih1PT09ImFjY2Vzc29yIil7aWYoYj09PXZvaWQgMCljb250aW51ZTtpZihiPT09bnVsbHx8dHlwZW9mIGIhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPWMoYi5nZXQpKSYmKHAuZ2V0PWQpLChkPWMoYi5zZXQpKSYmKHAuc2V0PWQpLChkPWMoYi5pbml0KSkmJnMucHVzaChkKX1lbHNlKGQ9YyhiKSkmJih1PT09ImZpZWxkIj9zLnB1c2goZCk6cFtoXT1kKX1mJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZixhLm5hbWUscCksZz0hMH0sYmR0PWZ1bmN0aW9uKG4saSxvKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aD4yLHM9MDtzPGkubGVuZ3RoO3MrKylvPWE/aVtzXS5jYWxsKG4sbyk6aVtzXS5jYWxsKG4pO3JldHVybiBhP286dm9pZCAwfSx3ZHQ9ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT0ic3ltYm9sIj9uOiIiLmNvbmNhdChuKX0sU2R0PWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gdHlwZW9mIGk9PSJzeW1ib2wiJiYoaT1pLmRlc2NyaXB0aW9uPyJbIi5jb25jYXQoaS5kZXNjcmlwdGlvbiwiXSIpOiIiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwibmFtZSIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpvPyIiLmNvbmNhdChvLCIgIixpKTppfSl9LE1kdD1mdW5jdGlvbihuLGkpe2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QubWV0YWRhdGE9PSJmdW5jdGlvbiIpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobixpKX0sRWR0PWZ1bmN0aW9uKG4saSxvLGEpe2Z1bmN0aW9uIHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBvP2w6bmV3IG8oZnVuY3Rpb24oYyl7YyhsKX0pfXJldHVybiBuZXcob3x8KG89UHJvbWlzZSkpKGZ1bmN0aW9uKGwsYyl7ZnVuY3Rpb24gdShwKXt0cnl7ZihhLm5leHQocCkpfWNhdGNoKGQpe2MoZCl9fWZ1bmN0aW9uIGgocCl7dHJ5e2YoYS50aHJvdyhwKSl9Y2F0Y2goZCl7YyhkKX19ZnVuY3Rpb24gZihwKXtwLmRvbmU/bChwLnZhbHVlKTpzKHAudmFsdWUpLnRoZW4odSxoKX1mKChhPWEuYXBwbHkobixpfHxbXSkpLm5leHQoKSl9KX0sVGR0PWZ1bmN0aW9uKG4saSl7dmFyIG89e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKGxbMF0mMSl0aHJvdyBsWzFdO3JldHVybiBsWzFdfSx0cnlzOltdLG9wczpbXX0sYSxzLGwsYztyZXR1cm4gYz17bmV4dDp1KDApLHRocm93OnUoMSkscmV0dXJuOnUoMil9LHR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJihjW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGM7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIGgoW2YscF0pfX1mdW5jdGlvbiBoKGYpe2lmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YyYmKGM9MCxmWzBdJiYobz0wKSksbzspdHJ5e2lmKGE9MSxzJiYobD1mWzBdJjI/cy5yZXR1cm46ZlswXT9zLnRocm93fHwoKGw9cy5yZXR1cm4pJiZsLmNhbGwocyksMCk6cy5uZXh0KSYmIShsPWwuY2FsbChzLGZbMV0pKS5kb25lKXJldHVybiBsO3N3aXRjaChzPTAsbCYmKGY9W2ZbMF0mMixsLnZhbHVlXSksZlswXSl7Y2FzZSAwOmNhc2UgMTpsPWY7YnJlYWs7Y2FzZSA0OnJldHVybiBvLmxhYmVsKysse3ZhbHVlOmZbMV0sZG9uZTohMX07Y2FzZSA1Om8ubGFiZWwrKyxzPWZbMV0sZj1bMF07Y29udGludWU7Y2FzZSA3OmY9by5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobD1vLnRyeXMsIShsPWwubGVuZ3RoPjAmJmxbbC5sZW5ndGgtMV0pJiYoZlswXT09PTZ8fGZbMF09PT0yKSl7bz0wO2NvbnRpbnVlfWlmKGZbMF09PT0zJiYoIWx8fGZbMV0+bFswXSYmZlsxXTxsWzNdKSl7by5sYWJlbD1mWzFdO2JyZWFrfWlmKGZbMF09PT02JiZvLmxhYmVsPGxbMV0pe28ubGFiZWw9bFsxXSxsPWY7YnJlYWt9aWYobCYmby5sYWJlbDxsWzJdKXtvLmxhYmVsPWxbMl0sby5vcHMucHVzaChmKTticmVha31sWzJdJiZvLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWV9Zj1pLmNhbGwobixvKX1jYXRjaChwKXtmPVs2LHBdLHM9MH1maW5hbGx5e2E9bD0wfWlmKGZbMF0mNSl0aHJvdyBmWzFdO3JldHVybnt2YWx1ZTpmWzBdP2ZbMV06dm9pZCAwLGRvbmU6ITB9fX0sQ2R0PWZ1bmN0aW9uKG4saSl7Zm9yKHZhciBvIGluIG4pbyE9PSJkZWZhdWx0IiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiZBSShpLG4sbyl9LEFJPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obixpLG8sYSl7YT09PXZvaWQgMCYmKGE9byk7dmFyIHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLG8pOyghc3x8KCJnZXQiaW4gcz8haS5fX2VzTW9kdWxlOnMud3JpdGFibGV8fHMuY29uZmlndXJhYmxlKSkmJihzPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpW29dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGEscyl9OmZ1bmN0aW9uKG4saSxvLGEpe2E9PT12b2lkIDAmJihhPW8pLG5bYV09aVtvXX0sQ0k9ZnVuY3Rpb24obil7dmFyIGk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLml0ZXJhdG9yLG89aSYmbltpXSxhPTA7aWYobylyZXR1cm4gby5jYWxsKG4pO2lmKG4mJnR5cGVvZiBuLmxlbmd0aD09Im51bWJlciIpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbiYmYT49bi5sZW5ndGgmJihuPXZvaWQgMCkse3ZhbHVlOm4mJm5bYSsrXSxkb25lOiFufX19O3Rocm93IG5ldyBUeXBlRXJyb3IoaT8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9LGhHPWZ1bmN0aW9uKG4saSl7dmFyIG89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmbltTeW1ib2wuaXRlcmF0b3JdO2lmKCFvKXJldHVybiBuO3ZhciBhPW8uY2FsbChuKSxzLGw9W10sYzt0cnl7Zm9yKDsoaT09PXZvaWQgMHx8aS0tID4wKSYmIShzPWEubmV4dCgpKS5kb25lOylsLnB1c2gocy52YWx1ZSl9Y2F0Y2godSl7Yz17ZXJyb3I6dX19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG89YS5yZXR1cm4pJiZvLmNhbGwoYSl9ZmluYWxseXtpZihjKXRocm93IGMuZXJyb3J9fXJldHVybiBsfSxBZHQ9ZnVuY3Rpb24oKXtmb3IodmFyIG49W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbj1uLmNvbmNhdChoRyhhcmd1bWVudHNbaV0pKTtyZXR1cm4gbn0sUGR0PWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsaT0wLG89YXJndW1lbnRzLmxlbmd0aDtpPG87aSsrKW4rPWFyZ3VtZW50c1tpXS5sZW5ndGg7Zm9yKHZhciBhPUFycmF5KG4pLHM9MCxpPTA7aTxvO2krKylmb3IodmFyIGw9YXJndW1lbnRzW2ldLGM9MCx1PWwubGVuZ3RoO2M8dTtjKysscysrKWFbc109bFtjXTtyZXR1cm4gYX0sSWR0PWZ1bmN0aW9uKG4saSxvKXtpZihvfHxhcmd1bWVudHMubGVuZ3RoPT09Milmb3IodmFyIGE9MCxzPWkubGVuZ3RoLGw7YTxzO2ErKykobHx8IShhIGluIGkpKSYmKGx8fChsPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGksMCxhKSksbFthXT1pW2FdKTtyZXR1cm4gbi5jb25jYXQobHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpfSxUeD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFR4Pyh0aGlzLnY9bix0aGlzKTpuZXcgVHgobil9LExkdD1mdW5jdGlvbihuLGksbyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhPW8uYXBwbHkobixpfHxbXSkscyxsPVtdO3JldHVybiBzPXt9LGMoIm5leHQiKSxjKCJ0aHJvdyIpLGMoInJldHVybiIpLHNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHM7ZnVuY3Rpb24gYyhnKXthW2ddJiYoc1tnXT1mdW5jdGlvbihfKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeSx4KXtsLnB1c2goW2csXyx5LHhdKT4xfHx1KGcsXyl9KX0pfWZ1bmN0aW9uIHUoZyxfKXt0cnl7aChhW2ddKF8pKX1jYXRjaCh5KXtkKGxbMF1bM10seSl9fWZ1bmN0aW9uIGgoZyl7Zy52YWx1ZSBpbnN0YW5jZW9mIFR4P1Byb21pc2UucmVzb2x2ZShnLnZhbHVlLnYpLnRoZW4oZixwKTpkKGxbMF1bMl0sZyl9ZnVuY3Rpb24gZihnKXt1KCJuZXh0IixnKX1mdW5jdGlvbiBwKGcpe3UoInRocm93IixnKX1mdW5jdGlvbiBkKGcsXyl7ZyhfKSxsLnNoaWZ0KCksbC5sZW5ndGgmJnUobFswXVswXSxsWzBdWzFdKX19LGtkdD1mdW5jdGlvbihuKXt2YXIgaSxvO3JldHVybiBpPXt9LGEoIm5leHQiKSxhKCJ0aHJvdyIsZnVuY3Rpb24ocyl7dGhyb3cgc30pLGEoInJldHVybiIpLGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxpO2Z1bmN0aW9uIGEocyxsKXtpW3NdPW5bc10/ZnVuY3Rpb24oYyl7cmV0dXJuKG89IW8pP3t2YWx1ZTpUeChuW3NdKGMpKSxkb25lOiExfTpsP2woYyk6Y306bH19LFJkdD1mdW5jdGlvbihuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGk9bltTeW1ib2wuYXN5bmNJdGVyYXRvcl0sbztyZXR1cm4gaT9pLmNhbGwobik6KG49dHlwZW9mIENJPT0iZnVuY3Rpb24iP0NJKG4pOm5bU3ltYm9sLml0ZXJhdG9yXSgpLG89e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gYShsKXtvW2xdPW5bbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1LGgpe2M9bltsXShjKSxzKHUsaCxjLmRvbmUsYy52YWx1ZSl9KX19ZnVuY3Rpb24gcyhsLGMsdSxoKXtQcm9taXNlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbihmKXtsKHt2YWx1ZTpmLGRvbmU6dX0pfSxjKX19LE5kdD1mdW5jdGlvbihuLGkpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInJhdyIse3ZhbHVlOml9KTpuLnJhdz1pLG59O3ZhciByPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obixpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6aX0pfTpmdW5jdGlvbihuLGkpe24uZGVmYXVsdD1pfTtEZHQ9ZnVuY3Rpb24obil7aWYobiYmbi5fX2VzTW9kdWxlKXJldHVybiBuO3ZhciBpPXt9O2lmKG4hPW51bGwpZm9yKHZhciBvIGluIG4pbyE9PSJkZWZhdWx0IiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sbykmJkFJKGksbixvKTtyZXR1cm4gcihpLG4pLGl9LE9kdD1mdW5jdGlvbihuKXtyZXR1cm4gbiYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn19LHpkdD1mdW5jdGlvbihuLGksbyxhKXtpZihvPT09ImEiJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZih0eXBlb2YgaT09ImZ1bmN0aW9uIj9uIT09aXx8IWE6IWkuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBvPT09Im0iP2E6bz09PSJhIj9hLmNhbGwobik6YT9hLnZhbHVlOmkuZ2V0KG4pfSxGZHQ9ZnVuY3Rpb24obixpLG8sYSxzKXtpZihhPT09Im0iKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpO2lmKGE9PT0iYSImJiFzKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iP24hPT1pfHwhczohaS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTtyZXR1cm4gYT09PSJhIj9zLmNhbGwobixvKTpzP3MudmFsdWU9bzppLnNldChuLG8pLG99LEJkdD1mdW5jdGlvbihuLGkpe2lmKGk9PT1udWxsfHx0eXBlb2YgaSE9Im9iamVjdCImJnR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0Iik7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP2k9PT1uOm4uaGFzKGkpfSxlKCJfX2V4dGVuZHMiLG1kdCksZSgiX19hc3NpZ24iLGdkdCksZSgiX19yZXN0IixfZHQpLGUoIl9fZGVjb3JhdGUiLHlkdCksZSgiX19wYXJhbSIsdmR0KSxlKCJfX2VzRGVjb3JhdGUiLHhkdCksZSgiX19ydW5Jbml0aWFsaXplcnMiLGJkdCksZSgiX19wcm9wS2V5Iix3ZHQpLGUoIl9fc2V0RnVuY3Rpb25OYW1lIixTZHQpLGUoIl9fbWV0YWRhdGEiLE1kdCksZSgiX19hd2FpdGVyIixFZHQpLGUoIl9fZ2VuZXJhdG9yIixUZHQpLGUoIl9fZXhwb3J0U3RhciIsQ2R0KSxlKCJfX2NyZWF0ZUJpbmRpbmciLEFJKSxlKCJfX3ZhbHVlcyIsQ0kpLGUoIl9fcmVhZCIsaEcpLGUoIl9fc3ByZWFkIixBZHQpLGUoIl9fc3ByZWFkQXJyYXlzIixQZHQpLGUoIl9fc3ByZWFkQXJyYXkiLElkdCksZSgiX19hd2FpdCIsVHgpLGUoIl9fYXN5bmNHZW5lcmF0b3IiLExkdCksZSgiX19hc3luY0RlbGVnYXRvciIsa2R0KSxlKCJfX2FzeW5jVmFsdWVzIixSZHQpLGUoIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixOZHQpLGUoIl9faW1wb3J0U3RhciIsRGR0KSxlKCJfX2ltcG9ydERlZmF1bHQiLE9kdCksZSgiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsemR0KSxlKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixGZHQpLGUoIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsQmR0KX0pfSk7dmFyIE9lPUgoKFJ4LCRNKT0+eyhmdW5jdGlvbigpe3ZhciBlLHQ9IjQuMTcuMjEiLHI9MjAwLG49IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIsaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbz0iSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiLGE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHM9NTAwLGw9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGM9MSx1PTIsaD00LGY9MSxwPTIsZD0xLGc9MixfPTQseT04LHg9MTYsYj0zMixTPTY0LEM9MTI4LFA9MjU2LGs9NTEyLE89MzAsRD0iLi4uIixCPTgwMCxJPTE2LEw9MSxSPTIsRj0zLHo9MS8wLFU9OTAwNzE5OTI1NDc0MDk5MSxXPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixaPTAvMCxydD00Mjk0OTY3Mjk1LG90PXJ0LTEsc3Q9cnQ+Pj4xLFN0PVtbImFyeSIsQ10sWyJiaW5kIixkXSxbImJpbmRLZXkiLGddLFsiY3VycnkiLHldLFsiY3VycnlSaWdodCIseF0sWyJmbGlwIixrXSxbInBhcnRpYWwiLGJdLFsicGFydGlhbFJpZ2h0IixTXSxbInJlYXJnIixQXV0sYnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTXQ9IltvYmplY3QgQXJyYXldIixsdD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsS3Q9IltvYmplY3QgQm9vbGVhbl0iLF90PSJbb2JqZWN0IERhdGVdIixjdD0iW29iamVjdCBET01FeGNlcHRpb25dIixYPSJbb2JqZWN0IEVycm9yXSIsZXQ9IltvYmplY3QgRnVuY3Rpb25dIixkdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHE9IltvYmplY3QgTWFwXSIscHQ9IltvYmplY3QgTnVtYmVyXSIsaHQ9IltvYmplY3QgTnVsbF0iLHd0PSJbb2JqZWN0IE9iamVjdF0iLGt0PSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBQcm94eV0iLGVlPSJbb2JqZWN0IFJlZ0V4cF0iLExlPSJbb2JqZWN0IFNldF0iLGFyPSJbb2JqZWN0IFN0cmluZ10iLGZyPSJbb2JqZWN0IFN5bWJvbF0iLHR0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLCQ9IltvYmplY3QgV2Vha01hcF0iLEl0PSJbb2JqZWN0IFdlYWtTZXRdIiwkdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGhlPSJbb2JqZWN0IERhdGFWaWV3XSIsVHQ9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbnQ9IltvYmplY3QgSW50OEFycmF5XSIsQ3Q9IltvYmplY3QgSW50MTZBcnJheV0iLFd0PSJbb2JqZWN0IEludDMyQXJyYXldIixmZT0iW29iamVjdCBVaW50OEFycmF5XSIsYXQ9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixzZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFF0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ2U9L1xiX19wIFwrPSAnJzsvZyxQdD0vXGIoX19wIFwrPSkgJycgXCsvZyxOdD0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLHplPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx5bj0vWyY8PiInXS9nLFdpPVJlZ0V4cCh6ZS5zb3VyY2UpLEFyPVJlZ0V4cCh5bi5zb3VyY2UpLFBhPS88JS0oW1xzXFNdKz8pJT4vZyxobz0vPCUoW1xzXFNdKz8pJT4vZyxJYT0vPCU9KFtcc1xTXSs/KSU+L2csbHg9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sY209L15cdyokLyxKMD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjbj0vW1xcXiQuKis/KClbXF17fXxdL2csY3g9UmVnRXhwKGNuLnNvdXJjZSkscnA9L15ccysvLEs9L1xzLyxndD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLEV0PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLHh0PS8sPyAmIC8sRnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxWZT0vWygpPSx7fVxbXF1cL1xzXS8sVWU9L1xcKFxcKT8vZyx0cj0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csS2U9L1x3KiQvLFhyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLF9yPS9eMGJbMDFdKyQvaSxQcj0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxqbj0vXjBvWzAtN10rJC9pLG5wPS9eKD86MHxbMS05XVxkKikkLyx1bT0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXI9LygkXikvLEZsPS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZyxYbj0iXFx1ZDgwMC1cXHVkZmZmIixCbD0iXFx1MDMwMC1cXHUwMzZmIix1eD0iXFx1ZmUyMC1cXHVmZTJmIixIbD0iXFx1MjBkMC1cXHUyMGZmIixWbD1CbCt1eCtIbCxZaT0iXFx1MjcwMC1cXHUyN2JmIixobT0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIscXM9IlxceGFjXFx4YjFcXHhkN1xceGY3IixncGU9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixfcGU9IlxcdTIwMDAtXFx1MjA2ZiIseXBlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLHFodD0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIsR2h0PSJcXHVmZTBlXFx1ZmUwZiIsV2h0PXFzK2dwZStfcGUreXBlLGVxPSJbJ1x1MjAxOV0iLHZwZT0iWyIrWG4rIl0iLFlodD0iWyIrV2h0KyJdIixINj0iWyIrVmwrIl0iLGpodD0iXFxkKyIseHBlPSJbIitZaSsiXSIsWGh0PSJbIitobSsiXSIsJGh0PSJbXiIrWG4rV2h0K2podCtZaStobStxaHQrIl0iLHJxPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGJwZT0iKD86IitINisifCIrcnErIikiLEtodD0iW14iK1huKyJdIixucT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsaXE9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGh4PSJbIitxaHQrIl0iLFpodD0iXFx1MjAwZCIsSmh0PSIoPzoiK1hodCsifCIrJGh0KyIpIix3cGU9Iig/OiIraHgrInwiKyRodCsiKSIsUWh0PSIoPzoiK2VxKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iix0ZnQ9Iig/OiIrZXErIig/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLGVmdD1icGUrIj8iLHJmdD0iWyIrR2h0KyJdPyIsU3BlPSIoPzoiK1podCsiKD86IitbS2h0LG5xLGlxXS5qb2luKCJ8IikrIikiK3JmdCtlZnQrIikqIixNcGU9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIsRXBlPSJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLG5mdD1yZnQrZWZ0K1NwZSxUcGU9Iig/OiIrW3hwZSxucSxpcV0uam9pbigifCIpKyIpIituZnQsQ3BlPSIoPzoiK1tLaHQrSDYrIj8iLEg2LG5xLGlxLHZwZV0uam9pbigifCIpKyIpIixBcGU9UmVnRXhwKGVxLCJnIiksUHBlPVJlZ0V4cChINiwiZyIpLG9xPVJlZ0V4cChycSsiKD89IitycSsiKXwiK0NwZStuZnQsImciKSxJcGU9UmVnRXhwKFtoeCsiPyIrWGh0KyIrIitRaHQrIig/PSIrW1lodCxoeCwiJCJdLmpvaW4oInwiKSsiKSIsd3BlKyIrIit0ZnQrIig/PSIrW1lodCxoeCtKaHQsIiQiXS5qb2luKCJ8IikrIikiLGh4KyI/IitKaHQrIisiK1FodCxoeCsiKyIrdGZ0LEVwZSxNcGUsamh0LFRwZV0uam9pbigifCIpLCJnIiksTHBlPVJlZ0V4cCgiWyIrWmh0K1huK1ZsK0dodCsiXSIpLGtwZT0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxScGU9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxOcGU9LTEsa249e307a25bVHRdPWtuW2JlXT1rbltudF09a25bQ3RdPWtuW1d0XT1rbltmZV09a25bYXRdPWtuW3NlXT1rbltRdF09ITAsa25bYnRdPWtuW010XT1rblskdF09a25bS3RdPWtuW2hlXT1rbltfdF09a25bWF09a25bZXRdPWtuW3FdPWtuW3B0XT1rblt3dF09a25bZWVdPWtuW0xlXT1rblthcl09a25bJF09ITE7dmFyIFRuPXt9O1RuW2J0XT1UbltNdF09VG5bJHRdPVRuW2hlXT1UbltLdF09VG5bX3RdPVRuW1R0XT1UbltiZV09VG5bbnRdPVRuW0N0XT1UbltXdF09VG5bcV09VG5bcHRdPVRuW3d0XT1UbltlZV09VG5bTGVdPVRuW2FyXT1Ubltmcl09VG5bZmVdPVRuW2F0XT1UbltzZV09VG5bUXRdPSEwLFRuW1hdPVRuW2V0XT1UblskXT0hMTt2YXIgRHBlPXtcdTAwQzA6IkEiLFx1MDBDMToiQSIsXHUwMEMyOiJBIixcdTAwQzM6IkEiLFx1MDBDNDoiQSIsXHUwMEM1OiJBIixcdTAwRTA6ImEiLFx1MDBFMToiYSIsXHUwMEUyOiJhIixcdTAwRTM6ImEiLFx1MDBFNDoiYSIsXHUwMEU1OiJhIixcdTAwQzc6IkMiLFx1MDBFNzoiYyIsXHUwMEQwOiJEIixcdTAwRjA6ImQiLFx1MDBDODoiRSIsXHUwMEM5OiJFIixcdTAwQ0E6IkUiLFx1MDBDQjoiRSIsXHUwMEU4OiJlIixcdTAwRTk6ImUiLFx1MDBFQToiZSIsXHUwMEVCOiJlIixcdTAwQ0M6IkkiLFx1MDBDRDoiSSIsXHUwMENFOiJJIixcdTAwQ0Y6IkkiLFx1MDBFQzoiaSIsXHUwMEVEOiJpIixcdTAwRUU6ImkiLFx1MDBFRjoiaSIsXHUwMEQxOiJOIixcdTAwRjE6Im4iLFx1MDBEMjoiTyIsXHUwMEQzOiJPIixcdTAwRDQ6Ik8iLFx1MDBENToiTyIsXHUwMEQ2OiJPIixcdTAwRDg6Ik8iLFx1MDBGMjoibyIsXHUwMEYzOiJvIixcdTAwRjQ6Im8iLFx1MDBGNToibyIsXHUwMEY2OiJvIixcdTAwRjg6Im8iLFx1MDBEOToiVSIsXHUwMERBOiJVIixcdTAwREI6IlUiLFx1MDBEQzoiVSIsXHUwMEY5OiJ1IixcdTAwRkE6InUiLFx1MDBGQjoidSIsXHUwMEZDOiJ1IixcdTAwREQ6IlkiLFx1MDBGRDoieSIsXHUwMEZGOiJ5IixcdTAwQzY6IkFlIixcdTAwRTY6ImFlIixcdTAwREU6IlRoIixcdTAwRkU6InRoIixcdTAwREY6InNzIixcdTAxMDA6IkEiLFx1MDEwMjoiQSIsXHUwMTA0OiJBIixcdTAxMDE6ImEiLFx1MDEwMzoiYSIsXHUwMTA1OiJhIixcdTAxMDY6IkMiLFx1MDEwODoiQyIsXHUwMTBBOiJDIixcdTAxMEM6IkMiLFx1MDEwNzoiYyIsXHUwMTA5OiJjIixcdTAxMEI6ImMiLFx1MDEwRDoiYyIsXHUwMTBFOiJEIixcdTAxMTA6IkQiLFx1MDEwRjoiZCIsXHUwMTExOiJkIixcdTAxMTI6IkUiLFx1MDExNDoiRSIsXHUwMTE2OiJFIixcdTAxMTg6IkUiLFx1MDExQToiRSIsXHUwMTEzOiJlIixcdTAxMTU6ImUiLFx1MDExNzoiZSIsXHUwMTE5OiJlIixcdTAxMUI6ImUiLFx1MDExQzoiRyIsXHUwMTFFOiJHIixcdTAxMjA6IkciLFx1MDEyMjoiRyIsXHUwMTFEOiJnIixcdTAxMUY6ImciLFx1MDEyMToiZyIsXHUwMTIzOiJnIixcdTAxMjQ6IkgiLFx1MDEyNjoiSCIsXHUwMTI1OiJoIixcdTAxMjc6ImgiLFx1MDEyODoiSSIsXHUwMTJBOiJJIixcdTAxMkM6IkkiLFx1MDEyRToiSSIsXHUwMTMwOiJJIixcdTAxMjk6ImkiLFx1MDEyQjoiaSIsXHUwMTJEOiJpIixcdTAxMkY6ImkiLFx1MDEzMToiaSIsXHUwMTM0OiJKIixcdTAxMzU6ImoiLFx1MDEzNjoiSyIsXHUwMTM3OiJrIixcdTAxMzg6ImsiLFx1MDEzOToiTCIsXHUwMTNCOiJMIixcdTAxM0Q6IkwiLFx1MDEzRjoiTCIsXHUwMTQxOiJMIixcdTAxM0E6ImwiLFx1MDEzQzoibCIsXHUwMTNFOiJsIixcdTAxNDA6ImwiLFx1MDE0MjoibCIsXHUwMTQzOiJOIixcdTAxNDU6Ik4iLFx1MDE0NzoiTiIsXHUwMTRBOiJOIixcdTAxNDQ6Im4iLFx1MDE0NjoibiIsXHUwMTQ4OiJuIixcdTAxNEI6Im4iLFx1MDE0QzoiTyIsXHUwMTRFOiJPIixcdTAxNTA6Ik8iLFx1MDE0RDoibyIsXHUwMTRGOiJvIixcdTAxNTE6Im8iLFx1MDE1NDoiUiIsXHUwMTU2OiJSIixcdTAxNTg6IlIiLFx1MDE1NToiciIsXHUwMTU3OiJyIixcdTAxNTk6InIiLFx1MDE1QToiUyIsXHUwMTVDOiJTIixcdTAxNUU6IlMiLFx1MDE2MDoiUyIsXHUwMTVCOiJzIixcdTAxNUQ6InMiLFx1MDE1RjoicyIsXHUwMTYxOiJzIixcdTAxNjI6IlQiLFx1MDE2NDoiVCIsXHUwMTY2OiJUIixcdTAxNjM6InQiLFx1MDE2NToidCIsXHUwMTY3OiJ0IixcdTAxNjg6IlUiLFx1MDE2QToiVSIsXHUwMTZDOiJVIixcdTAxNkU6IlUiLFx1MDE3MDoiVSIsXHUwMTcyOiJVIixcdTAxNjk6InUiLFx1MDE2QjoidSIsXHUwMTZEOiJ1IixcdTAxNkY6InUiLFx1MDE3MToidSIsXHUwMTczOiJ1IixcdTAxNzQ6IlciLFx1MDE3NToidyIsXHUwMTc2OiJZIixcdTAxNzc6InkiLFx1MDE3ODoiWSIsXHUwMTc5OiJaIixcdTAxN0I6IloiLFx1MDE3RDoiWiIsXHUwMTdBOiJ6IixcdTAxN0M6InoiLFx1MDE3RToieiIsXHUwMTMyOiJJSiIsXHUwMTMzOiJpaiIsXHUwMTUyOiJPZSIsXHUwMTUzOiJvZSIsXHUwMTQ5OiInbiIsXHUwMTdGOiJzIn0sT3BlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSx6cGU9eyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9LEZwZT17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxCcGU9cGFyc2VGbG9hdCxIcGU9cGFyc2VJbnQsaWZ0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxWcGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmbz1pZnR8fFZwZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhcT10eXBlb2YgUng9PSJvYmplY3QiJiZSeCYmIVJ4Lm5vZGVUeXBlJiZSeCxRMD1hcSYmdHlwZW9mICRNPT0ib2JqZWN0IiYmJE0mJiEkTS5ub2RlVHlwZSYmJE0sb2Z0PVEwJiZRMC5leHBvcnRzPT09YXEsc3E9b2Z0JiZpZnQucHJvY2VzcyxVbD1mdW5jdGlvbigpe3RyeXt2YXIgdXQ9UTAmJlEwLnJlcXVpcmUmJlEwLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdXR8fHNxJiZzcS5iaW5kaW5nJiZzcS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goQXQpe319KCksYWZ0PVVsJiZVbC5pc0FycmF5QnVmZmVyLHNmdD1VbCYmVWwuaXNEYXRlLGxmdD1VbCYmVWwuaXNNYXAsY2Z0PVVsJiZVbC5pc1JlZ0V4cCx1ZnQ9VWwmJlVsLmlzU2V0LGhmdD1VbCYmVWwuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEdzKHV0LEF0LHZ0KXtzd2l0Y2godnQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHV0LmNhbGwoQXQpO2Nhc2UgMTpyZXR1cm4gdXQuY2FsbChBdCx2dFswXSk7Y2FzZSAyOnJldHVybiB1dC5jYWxsKEF0LHZ0WzBdLHZ0WzFdKTtjYXNlIDM6cmV0dXJuIHV0LmNhbGwoQXQsdnRbMF0sdnRbMV0sdnRbMl0pfXJldHVybiB1dC5hcHBseShBdCx2dCl9ZnVuY3Rpb24gVXBlKHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrV2U8JHI7KXt2YXIgamk9dXRbV2VdO0F0KGdlLGppLHZ0KGppKSx1dCl9cmV0dXJuIGdlfWZ1bmN0aW9uIHFsKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrdnQ8Z2UmJkF0KHV0W3Z0XSx2dCx1dCkhPT0hMTspO3JldHVybiB1dH1mdW5jdGlvbiBxcGUodXQsQXQpe2Zvcih2YXIgdnQ9dXQ9PW51bGw/MDp1dC5sZW5ndGg7dnQtLSYmQXQodXRbdnRdLHZ0LHV0KSE9PSExOyk7cmV0dXJuIHV0fWZ1bmN0aW9uIGZmdCh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZighQXQodXRbdnRdLHZ0LHV0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmbSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdO0F0KGppLHZ0LHV0KSYmKCRyW1dlKytdPWppKX1yZXR1cm4gJHJ9ZnVuY3Rpb24gVjYodXQsQXQpe3ZhciB2dD11dD09bnVsbD8wOnV0Lmxlbmd0aDtyZXR1cm4hIXZ0JiZmeCh1dCxBdCwwKT4tMX1mdW5jdGlvbiBscSh1dCxBdCx2dCl7Zm9yKHZhciBnZT0tMSxXZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK2dlPFdlOylpZih2dChBdCx1dFtnZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRuKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoLFdlPUFycmF5KGdlKTsrK3Z0PGdlOylXZVt2dF09QXQodXRbdnRdLHZ0LHV0KTtyZXR1cm4gV2V9ZnVuY3Rpb24gcG0odXQsQXQpe2Zvcih2YXIgdnQ9LTEsZ2U9QXQubGVuZ3RoLFdlPXV0Lmxlbmd0aDsrK3Z0PGdlOyl1dFtXZSt2dF09QXRbdnRdO3JldHVybiB1dH1mdW5jdGlvbiBjcSh1dCxBdCx2dCxnZSl7dmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoO2ZvcihnZSYmJHImJih2dD11dFsrK1dlXSk7KytXZTwkcjspdnQ9QXQodnQsdXRbV2VdLFdlLHV0KTtyZXR1cm4gdnR9ZnVuY3Rpb24gR3BlKHV0LEF0LHZ0LGdlKXt2YXIgV2U9dXQ9PW51bGw/MDp1dC5sZW5ndGg7Zm9yKGdlJiZXZSYmKHZ0PXV0Wy0tV2VdKTtXZS0tOyl2dD1BdCh2dCx1dFtXZV0sV2UsdXQpO3JldHVybiB2dH1mdW5jdGlvbiB1cSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZihBdCh1dFt2dF0sdnQsdXQpKXJldHVybiEwO3JldHVybiExfXZhciBXcGU9aHEoImxlbmd0aCIpO2Z1bmN0aW9uIFlwZSh1dCl7cmV0dXJuIHV0LnNwbGl0KCIiKX1mdW5jdGlvbiBqcGUodXQpe3JldHVybiB1dC5tYXRjaChGdCl8fFtdfWZ1bmN0aW9uIHBmdCh1dCxBdCx2dCl7dmFyIGdlO3JldHVybiB2dCh1dCxmdW5jdGlvbihXZSwkcixqaSl7aWYoQXQoV2UsJHIsamkpKXJldHVybiBnZT0kciwhMX0pLGdlfWZ1bmN0aW9uIFU2KHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPXV0Lmxlbmd0aCwkcj12dCsoZ2U/MTotMSk7Z2U/JHItLTorKyRyPFdlOylpZihBdCh1dFskcl0sJHIsdXQpKXJldHVybiAkcjtyZXR1cm4tMX1mdW5jdGlvbiBmeCh1dCxBdCx2dCl7cmV0dXJuIEF0PT09QXQ/b2RlKHV0LEF0LHZ0KTpVNih1dCxkZnQsdnQpfWZ1bmN0aW9uIFhwZSh1dCxBdCx2dCxnZSl7Zm9yKHZhciBXZT12dC0xLCRyPXV0Lmxlbmd0aDsrK1dlPCRyOylpZihnZSh1dFtXZV0sQXQpKXJldHVybiBXZTtyZXR1cm4tMX1mdW5jdGlvbiBkZnQodXQpe3JldHVybiB1dCE9PXV0fWZ1bmN0aW9uIG1mdCh1dCxBdCl7dmFyIHZ0PXV0PT1udWxsPzA6dXQubGVuZ3RoO3JldHVybiB2dD9wcSh1dCxBdCkvdnQ6Wn1mdW5jdGlvbiBocSh1dCl7cmV0dXJuIGZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQ9PW51bGw/ZTpBdFt1dF19fWZ1bmN0aW9uIGZxKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dD09bnVsbD9lOnV0W0F0XX19ZnVuY3Rpb24gZ2Z0KHV0LEF0LHZ0LGdlLFdlKXtyZXR1cm4gV2UodXQsZnVuY3Rpb24oJHIsamksdm4pe3Z0PWdlPyhnZT0hMSwkcik6QXQodnQsJHIsamksdm4pfSksdnR9ZnVuY3Rpb24gJHBlKHV0LEF0KXt2YXIgdnQ9dXQubGVuZ3RoO2Zvcih1dC5zb3J0KEF0KTt2dC0tOyl1dFt2dF09dXRbdnRdLnZhbHVlO3JldHVybiB1dH1mdW5jdGlvbiBwcSh1dCxBdCl7Zm9yKHZhciB2dCxnZT0tMSxXZT11dC5sZW5ndGg7KytnZTxXZTspe3ZhciAkcj1BdCh1dFtnZV0pOyRyIT09ZSYmKHZ0PXZ0PT09ZT8kcjp2dCskcil9cmV0dXJuIHZ0fWZ1bmN0aW9uIGRxKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPUFycmF5KHV0KTsrK3Z0PHV0OylnZVt2dF09QXQodnQpO3JldHVybiBnZX1mdW5jdGlvbiBLcGUodXQsQXQpe3JldHVybiAkbihBdCxmdW5jdGlvbih2dCl7cmV0dXJuW3Z0LHV0W3Z0XV19KX1mdW5jdGlvbiBfZnQodXQpe3JldHVybiB1dCYmdXQuc2xpY2UoMCxiZnQodXQpKzEpLnJlcGxhY2UocnAsIiIpfWZ1bmN0aW9uIFdzKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dChBdCl9fWZ1bmN0aW9uIG1xKHV0LEF0KXtyZXR1cm4gJG4oQXQsZnVuY3Rpb24odnQpe3JldHVybiB1dFt2dF19KX1mdW5jdGlvbiBNTSh1dCxBdCl7cmV0dXJuIHV0LmhhcyhBdCl9ZnVuY3Rpb24geWZ0KHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aDsrK3Z0PGdlJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gdmZ0KHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aDt2dC0tJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gWnBlKHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxnZT0wO3Z0LS07KXV0W3Z0XT09PUF0JiYrK2dlO3JldHVybiBnZX12YXIgSnBlPWZxKERwZSksUXBlPWZxKE9wZSk7ZnVuY3Rpb24gdGRlKHV0KXtyZXR1cm4iXFwiK0ZwZVt1dF19ZnVuY3Rpb24gZWRlKHV0LEF0KXtyZXR1cm4gdXQ9PW51bGw/ZTp1dFtBdF19ZnVuY3Rpb24gcHgodXQpe3JldHVybiBMcGUudGVzdCh1dCl9ZnVuY3Rpb24gcmRlKHV0KXtyZXR1cm4ga3BlLnRlc3QodXQpfWZ1bmN0aW9uIG5kZSh1dCl7Zm9yKHZhciBBdCx2dD1bXTshKEF0PXV0Lm5leHQoKSkuZG9uZTspdnQucHVzaChBdC52YWx1ZSk7cmV0dXJuIHZ0fWZ1bmN0aW9uIGdxKHV0KXt2YXIgQXQ9LTEsdnQ9QXJyYXkodXQuc2l6ZSk7cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oZ2UsV2Upe3Z0WysrQXRdPVtXZSxnZV19KSx2dH1mdW5jdGlvbiB4ZnQodXQsQXQpe3JldHVybiBmdW5jdGlvbih2dCl7cmV0dXJuIHV0KEF0KHZ0KSl9fWZ1bmN0aW9uIGRtKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdOyhqaT09PUF0fHxqaT09PWwpJiYodXRbdnRdPWwsJHJbV2UrK109dnQpfXJldHVybiAkcn1mdW5jdGlvbiBxNih1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1nZX0pLHZ0fWZ1bmN0aW9uIGlkZSh1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1bZ2UsZ2VdfSksdnR9ZnVuY3Rpb24gb2RlKHV0LEF0LHZ0KXtmb3IodmFyIGdlPXZ0LTEsV2U9dXQubGVuZ3RoOysrZ2U8V2U7KWlmKHV0W2dlXT09PUF0KXJldHVybiBnZTtyZXR1cm4tMX1mdW5jdGlvbiBhZGUodXQsQXQsdnQpe2Zvcih2YXIgZ2U9dnQrMTtnZS0tOylpZih1dFtnZV09PT1BdClyZXR1cm4gZ2U7cmV0dXJuIGdlfWZ1bmN0aW9uIGR4KHV0KXtyZXR1cm4gcHgodXQpP2xkZSh1dCk6V3BlKHV0KX1mdW5jdGlvbiB0dSh1dCl7cmV0dXJuIHB4KHV0KT9jZGUodXQpOllwZSh1dCl9ZnVuY3Rpb24gYmZ0KHV0KXtmb3IodmFyIEF0PXV0Lmxlbmd0aDtBdC0tJiZLLnRlc3QodXQuY2hhckF0KEF0KSk7KTtyZXR1cm4gQXR9dmFyIHNkZT1mcSh6cGUpO2Z1bmN0aW9uIGxkZSh1dCl7Zm9yKHZhciBBdD1vcS5sYXN0SW5kZXg9MDtvcS50ZXN0KHV0KTspKytBdDtyZXR1cm4gQXR9ZnVuY3Rpb24gY2RlKHV0KXtyZXR1cm4gdXQubWF0Y2gob3EpfHxbXX1mdW5jdGlvbiB1ZGUodXQpe3JldHVybiB1dC5tYXRjaChJcGUpfHxbXX12YXIgaGRlPWZ1bmN0aW9uIHV0KEF0KXtBdD1BdD09bnVsbD9mbzptbS5kZWZhdWx0cyhmby5PYmplY3QoKSxBdCxtbS5waWNrKGZvLFJwZSkpO3ZhciB2dD1BdC5BcnJheSxnZT1BdC5EYXRlLFdlPUF0LkVycm9yLCRyPUF0LkZ1bmN0aW9uLGppPUF0Lk1hdGgsdm49QXQuT2JqZWN0LF9xPUF0LlJlZ0V4cCxmZGU9QXQuU3RyaW5nLEdsPUF0LlR5cGVFcnJvcixHNj12dC5wcm90b3R5cGUscGRlPSRyLnByb3RvdHlwZSxteD12bi5wcm90b3R5cGUsVzY9QXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFk2PXBkZS50b1N0cmluZyx1bj1teC5oYXNPd25Qcm9wZXJ0eSxkZGU9MCx3ZnQ9ZnVuY3Rpb24oKXt2YXIgbT0vW14uXSskLy5leGVjKFc2JiZXNi5rZXlzJiZXNi5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG0/IlN5bWJvbChzcmMpXzEuIittOiIifSgpLGo2PW14LnRvU3RyaW5nLG1kZT1ZNi5jYWxsKHZuKSxnZGU9Zm8uXyxfZGU9X3EoIl4iK1k2LmNhbGwodW4pLnJlcGxhY2UoY24sIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksWDY9b2Z0P0F0LkJ1ZmZlcjplLGdtPUF0LlN5bWJvbCwkNj1BdC5VaW50OEFycmF5LFNmdD1YNj9YNi5hbGxvY1Vuc2FmZTplLEs2PXhmdCh2bi5nZXRQcm90b3R5cGVPZix2biksTWZ0PXZuLmNyZWF0ZSxFZnQ9bXgucHJvcGVydHlJc0VudW1lcmFibGUsWjY9RzYuc3BsaWNlLFRmdD1nbT9nbS5pc0NvbmNhdFNwcmVhZGFibGU6ZSxFTT1nbT9nbS5pdGVyYXRvcjplLHRfPWdtP2dtLnRvU3RyaW5nVGFnOmUsSjY9ZnVuY3Rpb24oKXt0cnl7dmFyIG09b18odm4sImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG0oe30sIiIse30pLG19Y2F0Y2godil7fX0oKSx5ZGU9QXQuY2xlYXJUaW1lb3V0IT09Zm8uY2xlYXJUaW1lb3V0JiZBdC5jbGVhclRpbWVvdXQsdmRlPWdlJiZnZS5ub3chPT1mby5EYXRlLm5vdyYmZ2Uubm93LHhkZT1BdC5zZXRUaW1lb3V0IT09Zm8uc2V0VGltZW91dCYmQXQuc2V0VGltZW91dCxRNj1qaS5jZWlsLHRJPWppLmZsb29yLHlxPXZuLmdldE93blByb3BlcnR5U3ltYm9scyxiZGU9WDY/WDYuaXNCdWZmZXI6ZSxDZnQ9QXQuaXNGaW5pdGUsd2RlPUc2LmpvaW4sU2RlPXhmdCh2bi5rZXlzLHZuKSxYaT1qaS5tYXgscmE9amkubWluLE1kZT1nZS5ub3csRWRlPUF0LnBhcnNlSW50LEFmdD1qaS5yYW5kb20sVGRlPUc2LnJldmVyc2UsdnE9b18oQXQsIkRhdGFWaWV3IiksVE09b18oQXQsIk1hcCIpLHhxPW9fKEF0LCJQcm9taXNlIiksZ3g9b18oQXQsIlNldCIpLENNPW9fKEF0LCJXZWFrTWFwIiksQU09b18odm4sImNyZWF0ZSIpLGVJPUNNJiZuZXcgQ00sX3g9e30sQ2RlPWFfKHZxKSxBZGU9YV8oVE0pLFBkZT1hXyh4cSksSWRlPWFfKGd4KSxMZGU9YV8oQ00pLHJJPWdtP2dtLnByb3RvdHlwZTplLFBNPXJJP3JJLnZhbHVlT2Y6ZSxQZnQ9ckk/ckkudG9TdHJpbmc6ZTtmdW5jdGlvbiBHKG0pe2lmKHNpKG0pJiYhJGUobSkmJiEobSBpbnN0YW5jZW9mIGdyKSl7aWYobSBpbnN0YW5jZW9mIFdsKXJldHVybiBtO2lmKHVuLmNhbGwobSwiX193cmFwcGVkX18iKSlyZXR1cm4gSXB0KG0pfXJldHVybiBuZXcgV2wobSl9dmFyIHl4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4gZnVuY3Rpb24odil7aWYoIWVpKHYpKXJldHVybnt9O2lmKE1mdClyZXR1cm4gTWZ0KHYpO20ucHJvdG90eXBlPXY7dmFyIFQ9bmV3IG07cmV0dXJuIG0ucHJvdG90eXBlPWUsVH19KCk7ZnVuY3Rpb24gbkkoKXt9ZnVuY3Rpb24gV2wobSx2KXt0aGlzLl9fd3JhcHBlZF9fPW0sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXYsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189ZX1HLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYSxldmFsdWF0ZTpobyxpbnRlcnBvbGF0ZTpJYSx2YXJpYWJsZToiIixpbXBvcnRzOntfOkd9fSxHLnByb3RvdHlwZT1uSS5wcm90b3R5cGUsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxXbC5wcm90b3R5cGU9eXgobkkucHJvdG90eXBlKSxXbC5wcm90b3R5cGUuY29uc3RydWN0b3I9V2w7ZnVuY3Rpb24gZ3IobSl7dGhpcy5fX3dyYXBwZWRfXz1tLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1ydCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBrZGUoKXt2YXIgbT1uZXcgZ3IodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIG0uX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyksbS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxtLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxtLl9faXRlcmF0ZWVzX189cHModGhpcy5fX2l0ZXJhdGVlc19fKSxtLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLG0uX192aWV3c19fPXBzKHRoaXMuX192aWV3c19fKSxtfWZ1bmN0aW9uIFJkZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbT1uZXcgZ3IodGhpcyk7bS5fX2Rpcl9fPS0xLG0uX19maWx0ZXJlZF9fPSEwfWVsc2UgbT10aGlzLmNsb25lKCksbS5fX2Rpcl9fKj0tMTtyZXR1cm4gbX1mdW5jdGlvbiBOZGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdj10aGlzLl9fZGlyX18sVD0kZShtKSxOPXY8MCxWPVQ/bS5sZW5ndGg6MCxZPVltZSgwLFYsdGhpcy5fX3ZpZXdzX18pLEo9WS5zdGFydCxpdD1ZLmVuZCxmdD1pdC1KLER0PU4/aXQ6Si0xLE90PXRoaXMuX19pdGVyYXRlZXNfXyxWdD1PdC5sZW5ndGgsb2U9MCxUZT1yYShmdCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFUfHwhTiYmVj09ZnQmJlRlPT1mdClyZXR1cm4gUWZ0KG0sdGhpcy5fX2FjdGlvbnNfXyk7dmFyIE5lPVtdO3Q6Zm9yKDtmdC0tJiZvZTxUZTspe0R0Kz12O2Zvcih2YXIgZXI9LTEsRGU9bVtEdF07KytlcjxWdDspe3ZhciBwcj1PdFtlcl0seXI9cHIuaXRlcmF0ZWUsWHM9cHIudHlwZSxSYT15cihEZSk7aWYoWHM9PVIpRGU9UmE7ZWxzZSBpZighUmEpe2lmKFhzPT1MKWNvbnRpbnVlIHQ7YnJlYWsgdH19TmVbb2UrK109RGV9cmV0dXJuIE5lfWdyLnByb3RvdHlwZT15eChuSS5wcm90b3R5cGUpLGdyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ncjtmdW5jdGlvbiBlXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBEZGUoKXt0aGlzLl9fZGF0YV9fPUFNP0FNKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIE9kZShtKXt2YXIgdj10aGlzLmhhcyhtKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bbV07cmV0dXJuIHRoaXMuc2l6ZS09dj8xOjAsdn1mdW5jdGlvbiB6ZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXztpZihBTSl7dmFyIFQ9dlttXTtyZXR1cm4gVD09PWE/ZTpUfXJldHVybiB1bi5jYWxsKHYsbSk/dlttXTplfWZ1bmN0aW9uIEZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fO3JldHVybiBBTT92W21dIT09ZTp1bi5jYWxsKHYsbSl9ZnVuY3Rpb24gQmRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhtKT8wOjEsVFttXT1BTSYmdj09PWU/YTp2LHRoaXN9ZV8ucHJvdG90eXBlLmNsZWFyPURkZSxlXy5wcm90b3R5cGUuZGVsZXRlPU9kZSxlXy5wcm90b3R5cGUuZ2V0PXpkZSxlXy5wcm90b3R5cGUuaGFzPUZkZSxlXy5wcm90b3R5cGUuc2V0PUJkZTtmdW5jdGlvbiBpcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBIZGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIFZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtpZihUPDApcmV0dXJuITE7dmFyIE49di5sZW5ndGgtMTtyZXR1cm4gVD09Tj92LnBvcCgpOlo2LmNhbGwodixULDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIFVkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtyZXR1cm4gVDwwP2U6dltUXVsxXX1mdW5jdGlvbiBxZGUobSl7cmV0dXJuIGlJKHRoaXMuX19kYXRhX18sbSk+LTF9ZnVuY3Rpb24gR2RlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXyxOPWlJKFQsbSk7cmV0dXJuIE48MD8oKyt0aGlzLnNpemUsVC5wdXNoKFttLHZdKSk6VFtOXVsxXT12LHRoaXN9aXAucHJvdG90eXBlLmNsZWFyPUhkZSxpcC5wcm90b3R5cGUuZGVsZXRlPVZkZSxpcC5wcm90b3R5cGUuZ2V0PVVkZSxpcC5wcm90b3R5cGUuaGFzPXFkZSxpcC5wcm90b3R5cGUuc2V0PUdkZTtmdW5jdGlvbiBvcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBXZGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlXyxtYXA6bmV3KFRNfHxpcCksc3RyaW5nOm5ldyBlX319ZnVuY3Rpb24gWWRlKG0pe3ZhciB2PWdJKHRoaXMsbSkuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemUtPXY/MTowLHZ9ZnVuY3Rpb24gamRlKG0pe3JldHVybiBnSSh0aGlzLG0pLmdldChtKX1mdW5jdGlvbiBYZGUobSl7cmV0dXJuIGdJKHRoaXMsbSkuaGFzKG0pfWZ1bmN0aW9uICRkZShtLHYpe3ZhciBUPWdJKHRoaXMsbSksTj1ULnNpemU7cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplKz1ULnNpemU9PU4/MDoxLHRoaXN9b3AucHJvdG90eXBlLmNsZWFyPVdkZSxvcC5wcm90b3R5cGUuZGVsZXRlPVlkZSxvcC5wcm90b3R5cGUuZ2V0PWpkZSxvcC5wcm90b3R5cGUuaGFzPVhkZSxvcC5wcm90b3R5cGUuc2V0PSRkZTtmdW5jdGlvbiByXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgb3A7Kyt2PFQ7KXRoaXMuYWRkKG1bdl0pfWZ1bmN0aW9uIEtkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobSxhKSx0aGlzfWZ1bmN0aW9uIFpkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobSl9cl8ucHJvdG90eXBlLmFkZD1yXy5wcm90b3R5cGUucHVzaD1LZGUscl8ucHJvdG90eXBlLmhhcz1aZGU7ZnVuY3Rpb24gZXUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXz1uZXcgaXAobSk7dGhpcy5zaXplPXYuc2l6ZX1mdW5jdGlvbiBKZGUoKXt0aGlzLl9fZGF0YV9fPW5ldyBpcCx0aGlzLnNpemU9MH1mdW5jdGlvbiBRZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXyxUPXYuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemU9di5zaXplLFR9ZnVuY3Rpb24gdG1lKG0pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChtKX1mdW5jdGlvbiBlbWUobSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG0pfWZ1bmN0aW9uIHJtZShtLHYpe3ZhciBUPXRoaXMuX19kYXRhX187aWYoVCBpbnN0YW5jZW9mIGlwKXt2YXIgTj1ULl9fZGF0YV9fO2lmKCFUTXx8Ti5sZW5ndGg8ci0xKXJldHVybiBOLnB1c2goW20sdl0pLHRoaXMuc2l6ZT0rK1Quc2l6ZSx0aGlzO1Q9dGhpcy5fX2RhdGFfXz1uZXcgb3AoTil9cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplPVQuc2l6ZSx0aGlzfWV1LnByb3RvdHlwZS5jbGVhcj1KZGUsZXUucHJvdG90eXBlLmRlbGV0ZT1RZGUsZXUucHJvdG90eXBlLmdldD10bWUsZXUucHJvdG90eXBlLmhhcz1lbWUsZXUucHJvdG90eXBlLnNldD1ybWU7ZnVuY3Rpb24gSWZ0KG0sdil7dmFyIFQ9JGUobSksTj0hVCYmc18obSksVj0hVCYmIU4mJmJtKG0pLFk9IVQmJiFOJiYhViYmd3gobSksSj1UfHxOfHxWfHxZLGl0PUo/ZHEobS5sZW5ndGgsZmRlKTpbXSxmdD1pdC5sZW5ndGg7Zm9yKHZhciBEdCBpbiBtKSh2fHx1bi5jYWxsKG0sRHQpKSYmIShKJiYoRHQ9PSJsZW5ndGgifHxWJiYoRHQ9PSJvZmZzZXQifHxEdD09InBhcmVudCIpfHxZJiYoRHQ9PSJidWZmZXIifHxEdD09ImJ5dGVMZW5ndGgifHxEdD09ImJ5dGVPZmZzZXQiKXx8Y3AoRHQsZnQpKSkmJml0LnB1c2goRHQpO3JldHVybiBpdH1mdW5jdGlvbiBMZnQobSl7dmFyIHY9bS5sZW5ndGg7cmV0dXJuIHY/bVtMcSgwLHYtMSldOmV9ZnVuY3Rpb24gbm1lKG0sdil7cmV0dXJuIF9JKHBzKG0pLG5fKHYsMCxtLmxlbmd0aCkpfWZ1bmN0aW9uIGltZShtKXtyZXR1cm4gX0kocHMobSkpfWZ1bmN0aW9uIGJxKG0sdixUKXsoVCE9PWUmJiFydShtW3ZdLFQpfHxUPT09ZSYmISh2IGluIG0pKSYmYXAobSx2LFQpfWZ1bmN0aW9uIElNKG0sdixUKXt2YXIgTj1tW3ZdOyghKHVuLmNhbGwobSx2KSYmcnUoTixUKSl8fFQ9PT1lJiYhKHYgaW4gbSkpJiZhcChtLHYsVCl9ZnVuY3Rpb24gaUkobSx2KXtmb3IodmFyIFQ9bS5sZW5ndGg7VC0tOylpZihydShtW1RdWzBdLHYpKXJldHVybiBUO3JldHVybi0xfWZ1bmN0aW9uIG9tZShtLHYsVCxOKXtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7dihOLFYsVChWKSxKKX0pLE59ZnVuY3Rpb24ga2Z0KG0sdil7cmV0dXJuIG0mJmdoKHYscG8odiksbSl9ZnVuY3Rpb24gYW1lKG0sdil7cmV0dXJuIG0mJmdoKHYsbXModiksbSl9ZnVuY3Rpb24gYXAobSx2LFQpe3Y9PSJfX3Byb3RvX18iJiZKNj9KNihtLHYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlQsd3JpdGFibGU6ITB9KTptW3ZdPVR9ZnVuY3Rpb24gd3EobSx2KXtmb3IodmFyIFQ9LTEsTj12Lmxlbmd0aCxWPXZ0KE4pLFk9bT09bnVsbDsrK1Q8TjspVltUXT1ZP2U6ckcobSx2W1RdKTtyZXR1cm4gVn1mdW5jdGlvbiBuXyhtLHYsVCl7cmV0dXJuIG09PT1tJiYoVCE9PWUmJihtPW08PVQ/bTpUKSx2IT09ZSYmKG09bT49dj9tOnYpKSxtfWZ1bmN0aW9uIFlsKG0sdixULE4sVixZKXt2YXIgSixpdD12JmMsZnQ9diZ1LER0PXYmaDtpZihUJiYoSj1WP1QobSxOLFYsWSk6VChtKSksSiE9PWUpcmV0dXJuIEo7aWYoIWVpKG0pKXJldHVybiBtO3ZhciBPdD0kZShtKTtpZihPdCl7aWYoSj1YbWUobSksIWl0KXJldHVybiBwcyhtLEopfWVsc2V7dmFyIFZ0PW5hKG0pLG9lPVZ0PT1ldHx8VnQ9PWR0O2lmKGJtKG0pKXJldHVybiBycHQobSxpdCk7aWYoVnQ9PXd0fHxWdD09YnR8fG9lJiYhVil7aWYoSj1mdHx8b2U/e306YnB0KG0pLCFpdClyZXR1cm4gZnQ/em1lKG0sYW1lKEosbSkpOk9tZShtLGtmdChKLG0pKX1lbHNle2lmKCFUbltWdF0pcmV0dXJuIFY/bTp7fTtKPSRtZShtLFZ0LGl0KX19WXx8KFk9bmV3IGV1KTt2YXIgVGU9WS5nZXQobSk7aWYoVGUpcmV0dXJuIFRlO1kuc2V0KG0sSiksS3B0KG0pP20uZm9yRWFjaChmdW5jdGlvbihEZSl7Si5hZGQoWWwoRGUsdixULERlLG0sWSkpfSk6WHB0KG0pJiZtLmZvckVhY2goZnVuY3Rpb24oRGUscHIpe0ouc2V0KHByLFlsKERlLHYsVCxwcixtLFkpKX0pO3ZhciBOZT1EdD9mdD9VcTpWcTpmdD9tczpwbyxlcj1PdD9lOk5lKG0pO3JldHVybiBxbChlcnx8bSxmdW5jdGlvbihEZSxwcil7ZXImJihwcj1EZSxEZT1tW3ByXSksSU0oSixwcixZbChEZSx2LFQscHIsbSxZKSl9KSxKfWZ1bmN0aW9uIHNtZShtKXt2YXIgdj1wbyhtKTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFJmdChULG0sdil9fWZ1bmN0aW9uIFJmdChtLHYsVCl7dmFyIE49VC5sZW5ndGg7aWYobT09bnVsbClyZXR1cm4hTjtmb3IobT12bihtKTtOLS07KXt2YXIgVj1UW05dLFk9dltWXSxKPW1bVl07aWYoSj09PWUmJiEoViBpbiBtKXx8IVkoSikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTmZ0KG0sdixUKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHpNKGZ1bmN0aW9uKCl7bS5hcHBseShlLFQpfSx2KX1mdW5jdGlvbiBMTShtLHYsVCxOKXt2YXIgVj0tMSxZPVY2LEo9ITAsaXQ9bS5sZW5ndGgsZnQ9W10sRHQ9di5sZW5ndGg7aWYoIWl0KXJldHVybiBmdDtUJiYodj0kbih2LFdzKFQpKSksTj8oWT1scSxKPSExKTp2Lmxlbmd0aD49ciYmKFk9TU0sSj0hMSx2PW5ldyByXyh2KSk7dDpmb3IoOysrVjxpdDspe3ZhciBPdD1tW1ZdLFZ0PVQ9PW51bGw/T3Q6VChPdCk7aWYoT3Q9Tnx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1EdDtvZS0tOylpZih2W29lXT09PVZ0KWNvbnRpbnVlIHQ7ZnQucHVzaChPdCl9ZWxzZSBZKHYsVnQsTil8fGZ0LnB1c2goT3QpfXJldHVybiBmdH12YXIgX209c3B0KG1oKSxEZnQ9c3B0KE1xLCEwKTtmdW5jdGlvbiBsbWUobSx2KXt2YXIgVD0hMDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9ISF2KE4sVixZKSxUfSksVH1mdW5jdGlvbiBvSShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5sZW5ndGg7KytOPFY7KXt2YXIgWT1tW05dLEo9dihZKTtpZihKIT1udWxsJiYoaXQ9PT1lP0o9PT1KJiYhanMoSik6VChKLGl0KSkpdmFyIGl0PUosZnQ9WX1yZXR1cm4gZnR9ZnVuY3Rpb24gY21lKG0sdixULE4pe3ZhciBWPW0ubGVuZ3RoO2ZvcihUPVFlKFQpLFQ8MCYmKFQ9LVQ+Vj8wOlYrVCksTj1OPT09ZXx8Tj5WP1Y6UWUoTiksTjwwJiYoTis9ViksTj1UPk4/MDpKcHQoTik7VDxOOyltW1QrK109djtyZXR1cm4gbX1mdW5jdGlvbiBPZnQobSx2KXt2YXIgVD1bXTtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7dihOLFYsWSkmJlQucHVzaChOKX0pLFR9ZnVuY3Rpb24gUm8obSx2LFQsTixWKXt2YXIgWT0tMSxKPW0ubGVuZ3RoO2ZvcihUfHwoVD1abWUpLFZ8fChWPVtdKTsrK1k8Sjspe3ZhciBpdD1tW1ldO3Y+MCYmVChpdCk/dj4xP1JvKGl0LHYtMSxULE4sVik6cG0oVixpdCk6Tnx8KFZbVi5sZW5ndGhdPWl0KX1yZXR1cm4gVn12YXIgU3E9bHB0KCksemZ0PWxwdCghMCk7ZnVuY3Rpb24gbWgobSx2KXtyZXR1cm4gbSYmU3EobSx2LHBvKX1mdW5jdGlvbiBNcShtLHYpe3JldHVybiBtJiZ6ZnQobSx2LHBvKX1mdW5jdGlvbiBhSShtLHYpe3JldHVybiBmbSh2LGZ1bmN0aW9uKFQpe3JldHVybiB1cChtW1RdKX0pfWZ1bmN0aW9uIGlfKG0sdil7dj12bSh2LG0pO2Zvcih2YXIgVD0wLE49di5sZW5ndGg7bSE9bnVsbCYmVDxOOyltPW1bX2godltUKytdKV07cmV0dXJuIFQmJlQ9PU4/bTplfWZ1bmN0aW9uIEZmdChtLHYsVCl7dmFyIE49dihtKTtyZXR1cm4gJGUobSk/TjpwbShOLFQobSkpfWZ1bmN0aW9uIExhKG0pe3JldHVybiBtPT1udWxsP209PT1lP3R0Omh0OnRfJiZ0XyBpbiB2bihtKT9XbWUobSk6aWdlKG0pfWZ1bmN0aW9uIEVxKG0sdil7cmV0dXJuIG0+dn1mdW5jdGlvbiB1bWUobSx2KXtyZXR1cm4gbSE9bnVsbCYmdW4uY2FsbChtLHYpfWZ1bmN0aW9uIGhtZShtLHYpe3JldHVybiBtIT1udWxsJiZ2IGluIHZuKG0pfWZ1bmN0aW9uIGZtZShtLHYsVCl7cmV0dXJuIG0+PXJhKHYsVCkmJm08WGkodixUKX1mdW5jdGlvbiBUcShtLHYsVCl7Zm9yKHZhciBOPVQ/bHE6VjYsVj1tWzBdLmxlbmd0aCxZPW0ubGVuZ3RoLEo9WSxpdD12dChZKSxmdD0xLzAsRHQ9W107Si0tOyl7dmFyIE90PW1bSl07SiYmdiYmKE90PSRuKE90LFdzKHYpKSksZnQ9cmEoT3QubGVuZ3RoLGZ0KSxpdFtKXT0hVCYmKHZ8fFY+PTEyMCYmT3QubGVuZ3RoPj0xMjApP25ldyByXyhKJiZPdCk6ZX1PdD1tWzBdO3ZhciBWdD0tMSxvZT1pdFswXTt0OmZvcig7KytWdDxWJiZEdC5sZW5ndGg8ZnQ7KXt2YXIgVGU9T3RbVnRdLE5lPXY/dihUZSk6VGU7aWYoVGU9VHx8VGUhPT0wP1RlOjAsIShvZT9NTShvZSxOZSk6TihEdCxOZSxUKSkpe2ZvcihKPVk7LS1KOyl7dmFyIGVyPWl0W0pdO2lmKCEoZXI/TU0oZXIsTmUpOk4obVtKXSxOZSxUKSkpY29udGludWUgdH1vZSYmb2UucHVzaChOZSksRHQucHVzaChUZSl9fXJldHVybiBEdH1mdW5jdGlvbiBwbWUobSx2LFQsTil7cmV0dXJuIG1oKG0sZnVuY3Rpb24oVixZLEope3YoTixUKFYpLFksSil9KSxOfWZ1bmN0aW9uIGtNKG0sdixUKXt2PXZtKHYsbSksbT1FcHQobSx2KTt2YXIgTj1tPT1udWxsP206bVtfaChYbCh2KSldO3JldHVybiBOPT1udWxsP2U6R3MoTixtLFQpfWZ1bmN0aW9uIEJmdChtKXtyZXR1cm4gc2kobSkmJkxhKG0pPT1idH1mdW5jdGlvbiBkbWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09JHR9ZnVuY3Rpb24gbW1lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PV90fWZ1bmN0aW9uIFJNKG0sdixULE4sVil7cmV0dXJuIG09PT12PyEwOm09PW51bGx8fHY9PW51bGx8fCFzaShtKSYmIXNpKHYpP20hPT1tJiZ2IT09djpnbWUobSx2LFQsTixSTSxWKX1mdW5jdGlvbiBnbWUobSx2LFQsTixWLFkpe3ZhciBKPSRlKG0pLGl0PSRlKHYpLGZ0PUo/TXQ6bmEobSksRHQ9aXQ/TXQ6bmEodik7ZnQ9ZnQ9PWJ0P3d0OmZ0LER0PUR0PT1idD93dDpEdDt2YXIgT3Q9ZnQ9PXd0LFZ0PUR0PT13dCxvZT1mdD09RHQ7aWYob2UmJmJtKG0pKXtpZighYm0odikpcmV0dXJuITE7Sj0hMCxPdD0hMX1pZihvZSYmIU90KXJldHVybiBZfHwoWT1uZXcgZXUpLEp8fHd4KG0pP3lwdChtLHYsVCxOLFYsWSk6cW1lKG0sdixmdCxULE4sVixZKTtpZighKFQmZikpe3ZhciBUZT1PdCYmdW4uY2FsbChtLCJfX3dyYXBwZWRfXyIpLE5lPVZ0JiZ1bi5jYWxsKHYsIl9fd3JhcHBlZF9fIik7aWYoVGV8fE5lKXt2YXIgZXI9VGU/bS52YWx1ZSgpOm0sRGU9TmU/di52YWx1ZSgpOnY7cmV0dXJuIFl8fChZPW5ldyBldSksVihlcixEZSxULE4sWSl9fXJldHVybiBvZT8oWXx8KFk9bmV3IGV1KSxHbWUobSx2LFQsTixWLFkpKTohMX1mdW5jdGlvbiBfbWUobSl7cmV0dXJuIHNpKG0pJiZuYShtKT09cX1mdW5jdGlvbiBDcShtLHYsVCxOKXt2YXIgVj1ULmxlbmd0aCxZPVYsSj0hTjtpZihtPT1udWxsKXJldHVybiFZO2ZvcihtPXZuKG0pO1YtLTspe3ZhciBpdD1UW1ZdO2lmKEomJml0WzJdP2l0WzFdIT09bVtpdFswXV06IShpdFswXWluIG0pKXJldHVybiExfWZvcig7KytWPFk7KXtpdD1UW1ZdO3ZhciBmdD1pdFswXSxEdD1tW2Z0XSxPdD1pdFsxXTtpZihKJiZpdFsyXSl7aWYoRHQ9PT1lJiYhKGZ0IGluIG0pKXJldHVybiExfWVsc2V7dmFyIFZ0PW5ldyBldTtpZihOKXZhciBvZT1OKER0LE90LGZ0LG0sdixWdCk7aWYoIShvZT09PWU/Uk0oT3QsRHQsZnxwLE4sVnQpOm9lKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSGZ0KG0pe2lmKCFlaShtKXx8UW1lKG0pKXJldHVybiExO3ZhciB2PXVwKG0pP19kZTpQcjtyZXR1cm4gdi50ZXN0KGFfKG0pKX1mdW5jdGlvbiB5bWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09ZWV9ZnVuY3Rpb24gdm1lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PUxlfWZ1bmN0aW9uIHhtZShtKXtyZXR1cm4gc2kobSkmJlNJKG0ubGVuZ3RoKSYmISFrbltMYShtKV19ZnVuY3Rpb24gVmZ0KG0pe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9tOm09PW51bGw/Z3M6dHlwZW9mIG09PSJvYmplY3QiPyRlKG0pP0dmdChtWzBdLG1bMV0pOnFmdChtKTpjZHQobSl9ZnVuY3Rpb24gQXEobSl7aWYoIU9NKG0pKXJldHVybiBTZGUobSk7dmFyIHY9W107Zm9yKHZhciBUIGluIHZuKG0pKXVuLmNhbGwobSxUKSYmVCE9ImNvbnN0cnVjdG9yIiYmdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIGJtZShtKXtpZighZWkobSkpcmV0dXJuIG5nZShtKTt2YXIgdj1PTShtKSxUPVtdO2Zvcih2YXIgTiBpbiBtKU49PSJjb25zdHJ1Y3RvciImJih2fHwhdW4uY2FsbChtLE4pKXx8VC5wdXNoKE4pO3JldHVybiBUfWZ1bmN0aW9uIFBxKG0sdil7cmV0dXJuIG08dn1mdW5jdGlvbiBVZnQobSx2KXt2YXIgVD0tMSxOPWRzKG0pP3Z0KG0ubGVuZ3RoKTpbXTtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7TlsrK1RdPXYoVixZLEopfSksTn1mdW5jdGlvbiBxZnQobSl7dmFyIHY9R3EobSk7cmV0dXJuIHYubGVuZ3RoPT0xJiZ2WzBdWzJdP1NwdCh2WzBdWzBdLHZbMF1bMV0pOmZ1bmN0aW9uKFQpe3JldHVybiBUPT09bXx8Q3EoVCxtLHYpfX1mdW5jdGlvbiBHZnQobSx2KXtyZXR1cm4gWXEobSkmJndwdCh2KT9TcHQoX2gobSksdik6ZnVuY3Rpb24oVCl7dmFyIE49ckcoVCxtKTtyZXR1cm4gTj09PWUmJk49PT12P25HKFQsbSk6Uk0odixOLGZ8cCl9fWZ1bmN0aW9uIHNJKG0sdixULE4sVil7bSE9PXYmJlNxKHYsZnVuY3Rpb24oWSxKKXtpZihWfHwoVj1uZXcgZXUpLGVpKFkpKXdtZShtLHYsSixULHNJLE4sVik7ZWxzZXt2YXIgaXQ9Tj9OKFhxKG0sSiksWSxKKyIiLG0sdixWKTplO2l0PT09ZSYmKGl0PVkpLGJxKG0sSixpdCl9fSxtcyl9ZnVuY3Rpb24gd21lKG0sdixULE4sVixZLEope3ZhciBpdD1YcShtLFQpLGZ0PVhxKHYsVCksRHQ9Si5nZXQoZnQpO2lmKER0KXticShtLFQsRHQpO3JldHVybn12YXIgT3Q9WT9ZKGl0LGZ0LFQrIiIsbSx2LEopOmUsVnQ9T3Q9PT1lO2lmKFZ0KXt2YXIgb2U9JGUoZnQpLFRlPSFvZSYmYm0oZnQpLE5lPSFvZSYmIVRlJiZ3eChmdCk7T3Q9ZnQsb2V8fFRlfHxOZT8kZShpdCk/T3Q9aXQ6eGkoaXQpP090PXBzKGl0KTpUZT8oVnQ9ITEsT3Q9cnB0KGZ0LCEwKSk6TmU/KFZ0PSExLE90PW5wdChmdCwhMCkpOk90PVtdOkZNKGZ0KXx8c18oZnQpPyhPdD1pdCxzXyhpdCk/T3Q9UXB0KGl0KTooIWVpKGl0KXx8dXAoaXQpKSYmKE90PWJwdChmdCkpKTpWdD0hMX1WdCYmKEouc2V0KGZ0LE90KSxWKE90LGZ0LE4sWSxKKSxKLmRlbGV0ZShmdCkpLGJxKG0sVCxPdCl9ZnVuY3Rpb24gV2Z0KG0sdil7dmFyIFQ9bS5sZW5ndGg7aWYoISFUKXJldHVybiB2Kz12PDA/VDowLGNwKHYsVCk/bVt2XTplfWZ1bmN0aW9uIFlmdChtLHYsVCl7di5sZW5ndGg/dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiAkZShZKT9mdW5jdGlvbihKKXtyZXR1cm4gaV8oSixZLmxlbmd0aD09PTE/WVswXTpZKX06WX0pOnY9W2dzXTt2YXIgTj0tMTt2PSRuKHYsV3Moa2UoKSkpO3ZhciBWPVVmdChtLGZ1bmN0aW9uKFksSixpdCl7dmFyIGZ0PSRuKHYsZnVuY3Rpb24oRHQpe3JldHVybiBEdChZKX0pO3JldHVybntjcml0ZXJpYTpmdCxpbmRleDorK04sdmFsdWU6WX19KTtyZXR1cm4gJHBlKFYsZnVuY3Rpb24oWSxKKXtyZXR1cm4gRG1lKFksSixUKX0pfWZ1bmN0aW9uIFNtZShtLHYpe3JldHVybiBqZnQobSx2LGZ1bmN0aW9uKFQsTil7cmV0dXJuIG5HKG0sTil9KX1mdW5jdGlvbiBqZnQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9e307KytOPFY7KXt2YXIgSj12W05dLGl0PWlfKG0sSik7VChpdCxKKSYmTk0oWSx2bShKLG0pLGl0KX1yZXR1cm4gWX1mdW5jdGlvbiBNbWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBpXyh2LG0pfX1mdW5jdGlvbiBJcShtLHYsVCxOKXt2YXIgVj1OP1hwZTpmeCxZPS0xLEo9di5sZW5ndGgsaXQ9bTtmb3IobT09PXYmJih2PXBzKHYpKSxUJiYoaXQ9JG4obSxXcyhUKSkpOysrWTxKOylmb3IodmFyIGZ0PTAsRHQ9dltZXSxPdD1UP1QoRHQpOkR0OyhmdD1WKGl0LE90LGZ0LE4pKT4tMTspaXQhPT1tJiZaNi5jYWxsKGl0LGZ0LDEpLFo2LmNhbGwobSxmdCwxKTtyZXR1cm4gbX1mdW5jdGlvbiBYZnQobSx2KXtmb3IodmFyIFQ9bT92Lmxlbmd0aDowLE49VC0xO1QtLTspe3ZhciBWPXZbVF07aWYoVD09Tnx8ViE9PVkpe3ZhciBZPVY7Y3AoVik/WjYuY2FsbChtLFYsMSk6TnEobSxWKX19cmV0dXJuIG19ZnVuY3Rpb24gTHEobSx2KXtyZXR1cm4gbSt0SShBZnQoKSoodi1tKzEpKX1mdW5jdGlvbiBFbWUobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9WGkoUTYoKHYtbSkvKFR8fDEpKSwwKSxKPXZ0KFkpO1ktLTspSltOP1k6KytWXT1tLG0rPVQ7cmV0dXJuIEp9ZnVuY3Rpb24ga3EobSx2KXt2YXIgVD0iIjtpZighbXx8djwxfHx2PlUpcmV0dXJuIFQ7ZG8gdiUyJiYoVCs9bSksdj10SSh2LzIpLHYmJihtKz1tKTt3aGlsZSh2KTtyZXR1cm4gVH1mdW5jdGlvbiBucihtLHYpe3JldHVybiAkcShNcHQobSx2LGdzKSxtKyIiKX1mdW5jdGlvbiBUbWUobSl7cmV0dXJuIExmdChTeChtKSl9ZnVuY3Rpb24gQ21lKG0sdil7dmFyIFQ9U3gobSk7cmV0dXJuIF9JKFQsbl8odiwwLFQubGVuZ3RoKSl9ZnVuY3Rpb24gTk0obSx2LFQsTil7aWYoIWVpKG0pKXJldHVybiBtO3Y9dm0odixtKTtmb3IodmFyIFY9LTEsWT12Lmxlbmd0aCxKPVktMSxpdD1tO2l0IT1udWxsJiYrK1Y8WTspe3ZhciBmdD1faCh2W1ZdKSxEdD1UO2lmKGZ0PT09Il9fcHJvdG9fXyJ8fGZ0PT09ImNvbnN0cnVjdG9yInx8ZnQ9PT0icHJvdG90eXBlIilyZXR1cm4gbTtpZihWIT1KKXt2YXIgT3Q9aXRbZnRdO0R0PU4/TihPdCxmdCxpdCk6ZSxEdD09PWUmJihEdD1laShPdCk/T3Q6Y3AodltWKzFdKT9bXTp7fSl9SU0oaXQsZnQsRHQpLGl0PWl0W2Z0XX1yZXR1cm4gbX12YXIgJGZ0PWVJP2Z1bmN0aW9uKG0sdil7cmV0dXJuIGVJLnNldChtLHYpLG19OmdzLEFtZT1KNj9mdW5jdGlvbihtLHYpe3JldHVybiBKNihtLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOm9HKHYpLHdyaXRhYmxlOiEwfSl9OmdzO2Z1bmN0aW9uIFBtZShtKXtyZXR1cm4gX0koU3gobSkpfWZ1bmN0aW9uIGpsKG0sdixUKXt2YXIgTj0tMSxWPW0ubGVuZ3RoO3Y8MCYmKHY9LXY+Vj8wOlYrdiksVD1UPlY/VjpULFQ8MCYmKFQrPVYpLFY9dj5UPzA6VC12Pj4+MCx2Pj4+PTA7Zm9yKHZhciBZPXZ0KFYpOysrTjxWOylZW05dPW1bTit2XTtyZXR1cm4gWX1mdW5jdGlvbiBJbWUobSx2KXt2YXIgVDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9dihOLFYsWSksIVR9KSwhIVR9ZnVuY3Rpb24gbEkobSx2LFQpe3ZhciBOPTAsVj1tPT1udWxsP046bS5sZW5ndGg7aWYodHlwZW9mIHY9PSJudW1iZXIiJiZ2PT09diYmVjw9c3Qpe2Zvcig7TjxWOyl7dmFyIFk9TitWPj4+MSxKPW1bWV07SiE9PW51bGwmJiFqcyhKKSYmKFQ/Sjw9djpKPHYpP049WSsxOlY9WX1yZXR1cm4gVn1yZXR1cm4gUnEobSx2LGdzLFQpfWZ1bmN0aW9uIFJxKG0sdixULE4pe3ZhciBWPTAsWT1tPT1udWxsPzA6bS5sZW5ndGg7aWYoWT09PTApcmV0dXJuIDA7dj1UKHYpO2Zvcih2YXIgSj12IT09dixpdD12PT09bnVsbCxmdD1qcyh2KSxEdD12PT09ZTtWPFk7KXt2YXIgT3Q9dEkoKFYrWSkvMiksVnQ9VChtW090XSksb2U9VnQhPT1lLFRlPVZ0PT09bnVsbCxOZT1WdD09PVZ0LGVyPWpzKFZ0KTtpZihKKXZhciBEZT1OfHxOZTtlbHNlIER0P0RlPU5lJiYoTnx8b2UpOml0P0RlPU5lJiZvZSYmKE58fCFUZSk6ZnQ/RGU9TmUmJm9lJiYhVGUmJihOfHwhZXIpOlRlfHxlcj9EZT0hMTpEZT1OP1Z0PD12OlZ0PHY7RGU/Vj1PdCsxOlk9T3R9cmV0dXJuIHJhKFksb3QpfWZ1bmN0aW9uIEtmdChtLHYpe2Zvcih2YXIgVD0tMSxOPW0ubGVuZ3RoLFY9MCxZPVtdOysrVDxOOyl7dmFyIEo9bVtUXSxpdD12P3YoSik6SjtpZighVHx8IXJ1KGl0LGZ0KSl7dmFyIGZ0PWl0O1lbVisrXT1KPT09MD8wOkp9fXJldHVybiBZfWZ1bmN0aW9uIFpmdChtKXtyZXR1cm4gdHlwZW9mIG09PSJudW1iZXIiP206anMobSk/WjorbX1mdW5jdGlvbiBZcyhtKXtpZih0eXBlb2YgbT09InN0cmluZyIpcmV0dXJuIG07aWYoJGUobSkpcmV0dXJuICRuKG0sWXMpKyIiO2lmKGpzKG0pKXJldHVybiBQZnQ/UGZ0LmNhbGwobSk6IiI7dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiB5bShtLHYsVCl7dmFyIE49LTEsVj1WNixZPW0ubGVuZ3RoLEo9ITAsaXQ9W10sZnQ9aXQ7aWYoVClKPSExLFY9bHE7ZWxzZSBpZihZPj1yKXt2YXIgRHQ9dj9udWxsOlZtZShtKTtpZihEdClyZXR1cm4gcTYoRHQpO0o9ITEsVj1NTSxmdD1uZXcgcl99ZWxzZSBmdD12P1tdOml0O3Q6Zm9yKDsrK048WTspe3ZhciBPdD1tW05dLFZ0PXY/dihPdCk6T3Q7aWYoT3Q9VHx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1mdC5sZW5ndGg7b2UtLTspaWYoZnRbb2VdPT09VnQpY29udGludWUgdDt2JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KX1lbHNlIFYoZnQsVnQsVCl8fChmdCE9PWl0JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KSl9cmV0dXJuIGl0fWZ1bmN0aW9uIE5xKG0sdil7cmV0dXJuIHY9dm0odixtKSxtPUVwdChtLHYpLG09PW51bGx8fGRlbGV0ZSBtW19oKFhsKHYpKV19ZnVuY3Rpb24gSmZ0KG0sdixULE4pe3JldHVybiBOTShtLHYsVChpXyhtLHYpKSxOKX1mdW5jdGlvbiBjSShtLHYsVCxOKXtmb3IodmFyIFY9bS5sZW5ndGgsWT1OP1Y6LTE7KE4/WS0tOisrWTxWKSYmdihtW1ldLFksbSk7KTtyZXR1cm4gVD9qbChtLE4/MDpZLE4/WSsxOlYpOmpsKG0sTj9ZKzE6MCxOP1Y6WSl9ZnVuY3Rpb24gUWZ0KG0sdil7dmFyIFQ9bTtyZXR1cm4gVCBpbnN0YW5jZW9mIGdyJiYoVD1ULnZhbHVlKCkpLGNxKHYsZnVuY3Rpb24oTixWKXtyZXR1cm4gVi5mdW5jLmFwcGx5KFYudGhpc0FyZyxwbShbTl0sVi5hcmdzKSl9LFQpfWZ1bmN0aW9uIERxKG0sdixUKXt2YXIgTj1tLmxlbmd0aDtpZihOPDIpcmV0dXJuIE4/eW0obVswXSk6W107Zm9yKHZhciBWPS0xLFk9dnQoTik7KytWPE47KWZvcih2YXIgSj1tW1ZdLGl0PS0xOysraXQ8TjspaXQhPVYmJihZW1ZdPUxNKFlbVl18fEosbVtpdF0sdixUKSk7cmV0dXJuIHltKFJvKFksMSksdixUKX1mdW5jdGlvbiB0cHQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPW0ubGVuZ3RoLFk9di5sZW5ndGgsSj17fTsrK048Vjspe3ZhciBpdD1OPFk/dltOXTplO1QoSixtW05dLGl0KX1yZXR1cm4gSn1mdW5jdGlvbiBPcShtKXtyZXR1cm4geGkobSk/bTpbXX1mdW5jdGlvbiB6cShtKXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bTpnc31mdW5jdGlvbiB2bShtLHYpe3JldHVybiAkZShtKT9tOllxKG0sdik/W21dOlBwdChvbihtKSl9dmFyIExtZT1ucjtmdW5jdGlvbiB4bShtLHYsVCl7dmFyIE49bS5sZW5ndGg7cmV0dXJuIFQ9VD09PWU/TjpULCF2JiZUPj1OP206amwobSx2LFQpfXZhciBlcHQ9eWRlfHxmdW5jdGlvbihtKXtyZXR1cm4gZm8uY2xlYXJUaW1lb3V0KG0pfTtmdW5jdGlvbiBycHQobSx2KXtpZih2KXJldHVybiBtLnNsaWNlKCk7dmFyIFQ9bS5sZW5ndGgsTj1TZnQ/U2Z0KFQpOm5ldyBtLmNvbnN0cnVjdG9yKFQpO3JldHVybiBtLmNvcHkoTiksTn1mdW5jdGlvbiBGcShtKXt2YXIgdj1uZXcgbS5jb25zdHJ1Y3RvcihtLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgJDYodikuc2V0KG5ldyAkNihtKSksdn1mdW5jdGlvbiBrbWUobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBSbWUobSl7dmFyIHY9bmV3IG0uY29uc3RydWN0b3IobS5zb3VyY2UsS2UuZXhlYyhtKSk7cmV0dXJuIHYubGFzdEluZGV4PW0ubGFzdEluZGV4LHZ9ZnVuY3Rpb24gTm1lKG0pe3JldHVybiBQTT92bihQTS5jYWxsKG0pKTp7fX1mdW5jdGlvbiBucHQobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5sZW5ndGgpfWZ1bmN0aW9uIGlwdChtLHYpe2lmKG0hPT12KXt2YXIgVD1tIT09ZSxOPW09PT1udWxsLFY9bT09PW0sWT1qcyhtKSxKPXYhPT1lLGl0PXY9PT1udWxsLGZ0PXY9PT12LER0PWpzKHYpO2lmKCFpdCYmIUR0JiYhWSYmbT52fHxZJiZKJiZmdCYmIWl0JiYhRHR8fE4mJkomJmZ0fHwhVCYmZnR8fCFWKXJldHVybiAxO2lmKCFOJiYhWSYmIUR0JiZtPHZ8fER0JiZUJiZWJiYhTiYmIVl8fGl0JiZUJiZWfHwhSiYmVnx8IWZ0KXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIERtZShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5jcml0ZXJpYSxZPXYuY3JpdGVyaWEsSj1WLmxlbmd0aCxpdD1ULmxlbmd0aDsrK048Sjspe3ZhciBmdD1pcHQoVltOXSxZW05dKTtpZihmdCl7aWYoTj49aXQpcmV0dXJuIGZ0O3ZhciBEdD1UW05dO3JldHVybiBmdCooRHQ9PSJkZXNjIj8tMToxKX19cmV0dXJuIG0uaW5kZXgtdi5pbmRleH1mdW5jdGlvbiBvcHQobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9bS5sZW5ndGgsSj1ULmxlbmd0aCxpdD0tMSxmdD12Lmxlbmd0aCxEdD1YaShZLUosMCksT3Q9dnQoZnQrRHQpLFZ0PSFOOysraXQ8ZnQ7KU90W2l0XT12W2l0XTtmb3IoOysrVjxKOykoVnR8fFY8WSkmJihPdFtUW1ZdXT1tW1ZdKTtmb3IoO0R0LS07KU90W2l0KytdPW1bVisrXTtyZXR1cm4gT3R9ZnVuY3Rpb24gYXB0KG0sdixULE4pe2Zvcih2YXIgVj0tMSxZPW0ubGVuZ3RoLEo9LTEsaXQ9VC5sZW5ndGgsZnQ9LTEsRHQ9di5sZW5ndGgsT3Q9WGkoWS1pdCwwKSxWdD12dChPdCtEdCksb2U9IU47KytWPE90OylWdFtWXT1tW1ZdO2Zvcih2YXIgVGU9VjsrK2Z0PER0OylWdFtUZStmdF09dltmdF07Zm9yKDsrK0o8aXQ7KShvZXx8VjxZKSYmKFZ0W1RlK1RbSl1dPW1bVisrXSk7cmV0dXJuIFZ0fWZ1bmN0aW9uIHBzKG0sdil7dmFyIFQ9LTEsTj1tLmxlbmd0aDtmb3Iodnx8KHY9dnQoTikpOysrVDxOOyl2W1RdPW1bVF07cmV0dXJuIHZ9ZnVuY3Rpb24gZ2gobSx2LFQsTil7dmFyIFY9IVQ7VHx8KFQ9e30pO2Zvcih2YXIgWT0tMSxKPXYubGVuZ3RoOysrWTxKOyl7dmFyIGl0PXZbWV0sZnQ9Tj9OKFRbaXRdLG1baXRdLGl0LFQsbSk6ZTtmdD09PWUmJihmdD1tW2l0XSksVj9hcChULGl0LGZ0KTpJTShULGl0LGZ0KX1yZXR1cm4gVH1mdW5jdGlvbiBPbWUobSx2KXtyZXR1cm4gZ2gobSxXcShtKSx2KX1mdW5jdGlvbiB6bWUobSx2KXtyZXR1cm4gZ2gobSx2cHQobSksdil9ZnVuY3Rpb24gdUkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVj0kZShUKT9VcGU6b21lLFk9dj92KCk6e307cmV0dXJuIFYoVCxtLGtlKE4sMiksWSl9fWZ1bmN0aW9uIHZ4KG0pe3JldHVybiBucihmdW5jdGlvbih2LFQpe3ZhciBOPS0xLFY9VC5sZW5ndGgsWT1WPjE/VFtWLTFdOmUsSj1WPjI/VFsyXTplO2ZvcihZPW0ubGVuZ3RoPjMmJnR5cGVvZiBZPT0iZnVuY3Rpb24iPyhWLS0sWSk6ZSxKJiZrYShUWzBdLFRbMV0sSikmJihZPVY8Mz9lOlksVj0xKSx2PXZuKHYpOysrTjxWOyl7dmFyIGl0PVRbTl07aXQmJm0odixpdCxOLFkpfXJldHVybiB2fSl9ZnVuY3Rpb24gc3B0KG0sdil7cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD09bnVsbClyZXR1cm4gVDtpZighZHMoVCkpcmV0dXJuIG0oVCxOKTtmb3IodmFyIFY9VC5sZW5ndGgsWT12P1Y6LTEsSj12bihUKTsodj9ZLS06KytZPFYpJiZOKEpbWV0sWSxKKSE9PSExOyk7cmV0dXJuIFR9fWZ1bmN0aW9uIGxwdChtKXtyZXR1cm4gZnVuY3Rpb24odixULE4pe2Zvcih2YXIgVj0tMSxZPXZuKHYpLEo9Tih2KSxpdD1KLmxlbmd0aDtpdC0tOyl7dmFyIGZ0PUpbbT9pdDorK1ZdO2lmKFQoWVtmdF0sZnQsWSk9PT0hMSlicmVha31yZXR1cm4gdn19ZnVuY3Rpb24gRm1lKG0sdixUKXt2YXIgTj12JmQsVj1ETShtKTtmdW5jdGlvbiBZKCl7dmFyIEo9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgWT9WOm07cmV0dXJuIEouYXBwbHkoTj9UOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gWX1mdW5jdGlvbiBjcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3Y9b24odik7dmFyIFQ9cHgodik/dHUodik6ZSxOPVQ/VFswXTp2LmNoYXJBdCgwKSxWPVQ/eG0oVCwxKS5qb2luKCIiKTp2LnNsaWNlKDEpO3JldHVybiBOW21dKCkrVn19ZnVuY3Rpb24geHgobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBjcShzZHQoYWR0KHYpLnJlcGxhY2UoQXBlLCIiKSksbSwiIil9fWZ1bmN0aW9uIERNKG0pe3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWFyZ3VtZW50cztzd2l0Y2godi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG07Y2FzZSAxOnJldHVybiBuZXcgbSh2WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSx2WzJdLHZbM10sdls0XSk7Y2FzZSA2OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSk7Y2FzZSA3OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSx2WzZdKX12YXIgVD15eChtLnByb3RvdHlwZSksTj1tLmFwcGx5KFQsdik7cmV0dXJuIGVpKE4pP046VH19ZnVuY3Rpb24gQm1lKG0sdixUKXt2YXIgTj1ETShtKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsSj12dChZKSxpdD1ZLGZ0PWJ4KFYpO2l0LS07KUpbaXRdPWFyZ3VtZW50c1tpdF07dmFyIER0PVk8MyYmSlswXSE9PWZ0JiZKW1ktMV0hPT1mdD9bXTpkbShKLGZ0KTtpZihZLT1EdC5sZW5ndGgsWTxUKXJldHVybiBkcHQobSx2LGhJLFYucGxhY2Vob2xkZXIsZSxKLER0LGUsZSxULVkpO3ZhciBPdD10aGlzJiZ0aGlzIT09Zm8mJnRoaXMgaW5zdGFuY2VvZiBWP046bTtyZXR1cm4gR3MoT3QsdGhpcyxKKX1yZXR1cm4gVn1mdW5jdGlvbiB1cHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYsVCxOKXt2YXIgVj12bih2KTtpZighZHModikpe3ZhciBZPWtlKFQsMyk7dj1wbyh2KSxUPWZ1bmN0aW9uKGl0KXtyZXR1cm4gWShWW2l0XSxpdCxWKX19dmFyIEo9bSh2LFQsTik7cmV0dXJuIEo+LTE/VltZP3ZbSl06Sl06ZX19ZnVuY3Rpb24gaHB0KG0pe3JldHVybiBscChmdW5jdGlvbih2KXt2YXIgVD12Lmxlbmd0aCxOPVQsVj1XbC5wcm90b3R5cGUudGhydTtmb3IobSYmdi5yZXZlcnNlKCk7Ti0tOyl7dmFyIFk9dltOXTtpZih0eXBlb2YgWSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7aWYoViYmIUomJm1JKFkpPT0id3JhcHBlciIpdmFyIEo9bmV3IFdsKFtdLCEwKX1mb3IoTj1KP046VDsrK048VDspe1k9dltOXTt2YXIgaXQ9bUkoWSksZnQ9aXQ9PSJ3cmFwcGVyIj9xcShZKTplO2Z0JiZqcShmdFswXSkmJmZ0WzFdPT0oQ3x5fGJ8UCkmJiFmdFs0XS5sZW5ndGgmJmZ0WzldPT0xP0o9SlttSShmdFswXSldLmFwcGx5KEosZnRbM10pOko9WS5sZW5ndGg9PTEmJmpxKFkpP0pbaXRdKCk6Si50aHJ1KFkpfXJldHVybiBmdW5jdGlvbigpe3ZhciBEdD1hcmd1bWVudHMsT3Q9RHRbMF07aWYoSiYmRHQubGVuZ3RoPT0xJiYkZShPdCkpcmV0dXJuIEoucGxhbnQoT3QpLnZhbHVlKCk7Zm9yKHZhciBWdD0wLG9lPVQ/dltWdF0uYXBwbHkodGhpcyxEdCk6T3Q7KytWdDxUOylvZT12W1Z0XS5jYWxsKHRoaXMsb2UpO3JldHVybiBvZX19KX1mdW5jdGlvbiBoSShtLHYsVCxOLFYsWSxKLGl0LGZ0LER0KXt2YXIgT3Q9diZDLFZ0PXYmZCxvZT12JmcsVGU9diYoeXx4KSxOZT12JmssZXI9b2U/ZTpETShtKTtmdW5jdGlvbiBEZSgpe2Zvcih2YXIgcHI9YXJndW1lbnRzLmxlbmd0aCx5cj12dChwciksWHM9cHI7WHMtLTspeXJbWHNdPWFyZ3VtZW50c1tYc107aWYoVGUpdmFyIFJhPWJ4KERlKSwkcz1acGUoeXIsUmEpO2lmKE4mJih5cj1vcHQoeXIsTixWLFRlKSksWSYmKHlyPWFwdCh5cixZLEosVGUpKSxwci09JHMsVGUmJnByPER0KXt2YXIgYmk9ZG0oeXIsUmEpO3JldHVybiBkcHQobSx2LGhJLERlLnBsYWNlaG9sZGVyLFQseXIsYmksaXQsZnQsRHQtcHIpfXZhciBudT1WdD9UOnRoaXMsZnA9b2U/bnVbbV06bTtyZXR1cm4gcHI9eXIubGVuZ3RoLGl0P3lyPW9nZSh5cixpdCk6TmUmJnByPjEmJnlyLnJldmVyc2UoKSxPdCYmZnQ8cHImJih5ci5sZW5ndGg9ZnQpLHRoaXMmJnRoaXMhPT1mbyYmdGhpcyBpbnN0YW5jZW9mIERlJiYoZnA9ZXJ8fERNKGZwKSksZnAuYXBwbHkobnUseXIpfXJldHVybiBEZX1mdW5jdGlvbiBmcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXtyZXR1cm4gcG1lKFQsbSx2KE4pLHt9KX19ZnVuY3Rpb24gZkkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVjtpZihUPT09ZSYmTj09PWUpcmV0dXJuIHY7aWYoVCE9PWUmJihWPVQpLE4hPT1lKXtpZihWPT09ZSlyZXR1cm4gTjt0eXBlb2YgVD09InN0cmluZyJ8fHR5cGVvZiBOPT0ic3RyaW5nIj8oVD1ZcyhUKSxOPVlzKE4pKTooVD1aZnQoVCksTj1aZnQoTikpLFY9bShULE4pfXJldHVybiBWfX1mdW5jdGlvbiBCcShtKXtyZXR1cm4gbHAoZnVuY3Rpb24odil7cmV0dXJuIHY9JG4odixXcyhrZSgpKSksbnIoZnVuY3Rpb24oVCl7dmFyIE49dGhpcztyZXR1cm4gbSh2LGZ1bmN0aW9uKFYpe3JldHVybiBHcyhWLE4sVCl9KX0pfSl9ZnVuY3Rpb24gcEkobSx2KXt2PXY9PT1lPyIgIjpZcyh2KTt2YXIgVD12Lmxlbmd0aDtpZihUPDIpcmV0dXJuIFQ/a3EodixtKTp2O3ZhciBOPWtxKHYsUTYobS9keCh2KSkpO3JldHVybiBweCh2KT94bSh0dShOKSwwLG0pLmpvaW4oIiIpOk4uc2xpY2UoMCxtKX1mdW5jdGlvbiBIbWUobSx2LFQsTil7dmFyIFY9diZkLFk9RE0obSk7ZnVuY3Rpb24gSigpe2Zvcih2YXIgaXQ9LTEsZnQ9YXJndW1lbnRzLmxlbmd0aCxEdD0tMSxPdD1OLmxlbmd0aCxWdD12dChPdCtmdCksb2U9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgSj9ZOm07KytEdDxPdDspVnRbRHRdPU5bRHRdO2Zvcig7ZnQtLTspVnRbRHQrK109YXJndW1lbnRzWysraXRdO3JldHVybiBHcyhvZSxWP1Q6dGhpcyxWdCl9cmV0dXJuIEp9ZnVuY3Rpb24gcHB0KG0pe3JldHVybiBmdW5jdGlvbih2LFQsTil7cmV0dXJuIE4mJnR5cGVvZiBOIT0ibnVtYmVyIiYma2EodixULE4pJiYoVD1OPWUpLHY9aHAodiksVD09PWU/KFQ9dix2PTApOlQ9aHAoVCksTj1OPT09ZT92PFQ/MTotMTpocChOKSxFbWUodixULE4sbSl9fWZ1bmN0aW9uIGRJKG0pe3JldHVybiBmdW5jdGlvbih2LFQpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyImJnR5cGVvZiBUPT0ic3RyaW5nInx8KHY9JGwodiksVD0kbChUKSksbSh2LFQpfX1mdW5jdGlvbiBkcHQobSx2LFQsTixWLFksSixpdCxmdCxEdCl7dmFyIE90PXYmeSxWdD1PdD9KOmUsb2U9T3Q/ZTpKLFRlPU90P1k6ZSxOZT1PdD9lOlk7dnw9T3Q/YjpTLHYmPX4oT3Q/UzpiKSx2Jl98fCh2Jj1+KGR8ZykpO3ZhciBlcj1bbSx2LFYsVGUsVnQsTmUsb2UsaXQsZnQsRHRdLERlPVQuYXBwbHkoZSxlcik7cmV0dXJuIGpxKG0pJiZUcHQoRGUsZXIpLERlLnBsYWNlaG9sZGVyPU4sQ3B0KERlLG0sdil9ZnVuY3Rpb24gSHEobSl7dmFyIHY9amlbbV07cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD0kbChUKSxOPU49PW51bGw/MDpyYShRZShOKSwyOTIpLE4mJkNmdChUKSl7dmFyIFY9KG9uKFQpKyJlIikuc3BsaXQoImUiKSxZPXYoVlswXSsiZSIrKCtWWzFdK04pKTtyZXR1cm4gVj0ob24oWSkrImUiKS5zcGxpdCgiZSIpLCsoVlswXSsiZSIrKCtWWzFdLU4pKX1yZXR1cm4gdihUKX19dmFyIFZtZT1neCYmMS9xNihuZXcgZ3goWywtMF0pKVsxXT09ej9mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGd4KG0pfTpsRztmdW5jdGlvbiBtcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciBUPW5hKHYpO3JldHVybiBUPT1xP2dxKHYpOlQ9PUxlP2lkZSh2KTpLcGUodixtKHYpKX19ZnVuY3Rpb24gc3AobSx2LFQsTixWLFksSixpdCl7dmFyIGZ0PXYmZztpZighZnQmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2YXIgRHQ9Tj9OLmxlbmd0aDowO2lmKER0fHwodiY9fihifFMpLE49Vj1lKSxKPUo9PT1lP0o6WGkoUWUoSiksMCksaXQ9aXQ9PT1lP2l0OlFlKGl0KSxEdC09Vj9WLmxlbmd0aDowLHYmUyl7dmFyIE90PU4sVnQ9VjtOPVY9ZX12YXIgb2U9ZnQ/ZTpxcShtKSxUZT1bbSx2LFQsTixWLE90LFZ0LFksSixpdF07aWYob2UmJnJnZShUZSxvZSksbT1UZVswXSx2PVRlWzFdLFQ9VGVbMl0sTj1UZVszXSxWPVRlWzRdLGl0PVRlWzldPVRlWzldPT09ZT9mdD8wOm0ubGVuZ3RoOlhpKFRlWzldLUR0LDApLCFpdCYmdiYoeXx4KSYmKHYmPX4oeXx4KSksIXZ8fHY9PWQpdmFyIE5lPUZtZShtLHYsVCk7ZWxzZSB2PT15fHx2PT14P05lPUJtZShtLHYsaXQpOih2PT1ifHx2PT0oZHxiKSkmJiFWLmxlbmd0aD9OZT1IbWUobSx2LFQsTik6TmU9aEkuYXBwbHkoZSxUZSk7dmFyIGVyPW9lPyRmdDpUcHQ7cmV0dXJuIENwdChlcihOZSxUZSksbSx2KX1mdW5jdGlvbiBncHQobSx2LFQsTil7cmV0dXJuIG09PT1lfHxydShtLG14W1RdKSYmIXVuLmNhbGwoTixUKT92Om19ZnVuY3Rpb24gX3B0KG0sdixULE4sVixZKXtyZXR1cm4gZWkobSkmJmVpKHYpJiYoWS5zZXQodixtKSxzSShtLHYsZSxfcHQsWSksWS5kZWxldGUodikpLG19ZnVuY3Rpb24gVW1lKG0pe3JldHVybiBGTShtKT9lOm19ZnVuY3Rpb24geXB0KG0sdixULE4sVixZKXt2YXIgSj1UJmYsaXQ9bS5sZW5ndGgsZnQ9di5sZW5ndGg7aWYoaXQhPWZ0JiYhKEomJmZ0Pml0KSlyZXR1cm4hMTt2YXIgRHQ9WS5nZXQobSksT3Q9WS5nZXQodik7aWYoRHQmJk90KXJldHVybiBEdD09diYmT3Q9PW07dmFyIFZ0PS0xLG9lPSEwLFRlPVQmcD9uZXcgcl86ZTtmb3IoWS5zZXQobSx2KSxZLnNldCh2LG0pOysrVnQ8aXQ7KXt2YXIgTmU9bVtWdF0sZXI9dltWdF07aWYoTil2YXIgRGU9Sj9OKGVyLE5lLFZ0LHYsbSxZKTpOKE5lLGVyLFZ0LG0sdixZKTtpZihEZSE9PWUpe2lmKERlKWNvbnRpbnVlO29lPSExO2JyZWFrfWlmKFRlKXtpZighdXEodixmdW5jdGlvbihwcix5cil7aWYoIU1NKFRlLHlyKSYmKE5lPT09cHJ8fFYoTmUscHIsVCxOLFkpKSlyZXR1cm4gVGUucHVzaCh5cil9KSl7b2U9ITE7YnJlYWt9fWVsc2UgaWYoIShOZT09PWVyfHxWKE5lLGVyLFQsTixZKSkpe29lPSExO2JyZWFrfX1yZXR1cm4gWS5kZWxldGUobSksWS5kZWxldGUodiksb2V9ZnVuY3Rpb24gcW1lKG0sdixULE4sVixZLEope3N3aXRjaChUKXtjYXNlIGhlOmlmKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHxtLmJ5dGVPZmZzZXQhPXYuYnl0ZU9mZnNldClyZXR1cm4hMTttPW0uYnVmZmVyLHY9di5idWZmZXI7Y2FzZSAkdDpyZXR1cm4hKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHwhWShuZXcgJDYobSksbmV3ICQ2KHYpKSk7Y2FzZSBLdDpjYXNlIF90OmNhc2UgcHQ6cmV0dXJuIHJ1KCttLCt2KTtjYXNlIFg6cmV0dXJuIG0ubmFtZT09di5uYW1lJiZtLm1lc3NhZ2U9PXYubWVzc2FnZTtjYXNlIGVlOmNhc2UgYXI6cmV0dXJuIG09PXYrIiI7Y2FzZSBxOnZhciBpdD1ncTtjYXNlIExlOnZhciBmdD1OJmY7aWYoaXR8fChpdD1xNiksbS5zaXplIT12LnNpemUmJiFmdClyZXR1cm4hMTt2YXIgRHQ9Si5nZXQobSk7aWYoRHQpcmV0dXJuIER0PT12O058PXAsSi5zZXQobSx2KTt2YXIgT3Q9eXB0KGl0KG0pLGl0KHYpLE4sVixZLEopO3JldHVybiBKLmRlbGV0ZShtKSxPdDtjYXNlIGZyOmlmKFBNKXJldHVybiBQTS5jYWxsKG0pPT1QTS5jYWxsKHYpfXJldHVybiExfWZ1bmN0aW9uIEdtZShtLHYsVCxOLFYsWSl7dmFyIEo9VCZmLGl0PVZxKG0pLGZ0PWl0Lmxlbmd0aCxEdD1WcSh2KSxPdD1EdC5sZW5ndGg7aWYoZnQhPU90JiYhSilyZXR1cm4hMTtmb3IodmFyIFZ0PWZ0O1Z0LS07KXt2YXIgb2U9aXRbVnRdO2lmKCEoSj9vZSBpbiB2OnVuLmNhbGwodixvZSkpKXJldHVybiExfXZhciBUZT1ZLmdldChtKSxOZT1ZLmdldCh2KTtpZihUZSYmTmUpcmV0dXJuIFRlPT12JiZOZT09bTt2YXIgZXI9ITA7WS5zZXQobSx2KSxZLnNldCh2LG0pO2Zvcih2YXIgRGU9SjsrK1Z0PGZ0Oyl7b2U9aXRbVnRdO3ZhciBwcj1tW29lXSx5cj12W29lXTtpZihOKXZhciBYcz1KP04oeXIscHIsb2UsdixtLFkpOk4ocHIseXIsb2UsbSx2LFkpO2lmKCEoWHM9PT1lP3ByPT09eXJ8fFYocHIseXIsVCxOLFkpOlhzKSl7ZXI9ITE7YnJlYWt9RGV8fChEZT1vZT09ImNvbnN0cnVjdG9yIil9aWYoZXImJiFEZSl7dmFyIFJhPW0uY29uc3RydWN0b3IsJHM9di5jb25zdHJ1Y3RvcjtSYSE9JHMmJiJjb25zdHJ1Y3RvciJpbiBtJiYiY29uc3RydWN0b3IiaW4gdiYmISh0eXBlb2YgUmE9PSJmdW5jdGlvbiImJlJhIGluc3RhbmNlb2YgUmEmJnR5cGVvZiAkcz09ImZ1bmN0aW9uIiYmJHMgaW5zdGFuY2VvZiAkcykmJihlcj0hMSl9cmV0dXJuIFkuZGVsZXRlKG0pLFkuZGVsZXRlKHYpLGVyfWZ1bmN0aW9uIGxwKG0pe3JldHVybiAkcShNcHQobSxlLFJwdCksbSsiIil9ZnVuY3Rpb24gVnEobSl7cmV0dXJuIEZmdChtLHBvLFdxKX1mdW5jdGlvbiBVcShtKXtyZXR1cm4gRmZ0KG0sbXMsdnB0KX12YXIgcXE9ZUk/ZnVuY3Rpb24obSl7cmV0dXJuIGVJLmdldChtKX06bEc7ZnVuY3Rpb24gbUkobSl7Zm9yKHZhciB2PW0ubmFtZSsiIixUPV94W3ZdLE49dW4uY2FsbChfeCx2KT9ULmxlbmd0aDowO04tLTspe3ZhciBWPVRbTl0sWT1WLmZ1bmM7aWYoWT09bnVsbHx8WT09bSlyZXR1cm4gVi5uYW1lfXJldHVybiB2fWZ1bmN0aW9uIGJ4KG0pe3ZhciB2PXVuLmNhbGwoRywicGxhY2Vob2xkZXIiKT9HOm07cmV0dXJuIHYucGxhY2Vob2xkZXJ9ZnVuY3Rpb24ga2UoKXt2YXIgbT1HLml0ZXJhdGVlfHxhRztyZXR1cm4gbT1tPT09YUc/VmZ0Om0sYXJndW1lbnRzLmxlbmd0aD9tKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm19ZnVuY3Rpb24gZ0kobSx2KXt2YXIgVD1tLl9fZGF0YV9fO3JldHVybiBKbWUodik/VFt0eXBlb2Ygdj09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpULm1hcH1mdW5jdGlvbiBHcShtKXtmb3IodmFyIHY9cG8obSksVD12Lmxlbmd0aDtULS07KXt2YXIgTj12W1RdLFY9bVtOXTt2W1RdPVtOLFYsd3B0KFYpXX1yZXR1cm4gdn1mdW5jdGlvbiBvXyhtLHYpe3ZhciBUPWVkZShtLHYpO3JldHVybiBIZnQoVCk/VDplfWZ1bmN0aW9uIFdtZShtKXt2YXIgdj11bi5jYWxsKG0sdF8pLFQ9bVt0X107dHJ5e21bdF9dPWU7dmFyIE49ITB9Y2F0Y2goWSl7fXZhciBWPWo2LmNhbGwobSk7cmV0dXJuIE4mJih2P21bdF9dPVQ6ZGVsZXRlIG1bdF9dKSxWfXZhciBXcT15cT9mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9bXToobT12bihtKSxmbSh5cShtKSxmdW5jdGlvbih2KXtyZXR1cm4gRWZ0LmNhbGwobSx2KX0pKX06Y0csdnB0PXlxP2Z1bmN0aW9uKG0pe2Zvcih2YXIgdj1bXTttOylwbSh2LFdxKG0pKSxtPUs2KG0pO3JldHVybiB2fTpjRyxuYT1MYTsodnEmJm5hKG5ldyB2cShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aGV8fFRNJiZuYShuZXcgVE0pIT1xfHx4cSYmbmEoeHEucmVzb2x2ZSgpKSE9a3R8fGd4JiZuYShuZXcgZ3gpIT1MZXx8Q00mJm5hKG5ldyBDTSkhPSQpJiYobmE9ZnVuY3Rpb24obSl7dmFyIHY9TGEobSksVD12PT13dD9tLmNvbnN0cnVjdG9yOmUsTj1UP2FfKFQpOiIiO2lmKE4pc3dpdGNoKE4pe2Nhc2UgQ2RlOnJldHVybiBoZTtjYXNlIEFkZTpyZXR1cm4gcTtjYXNlIFBkZTpyZXR1cm4ga3Q7Y2FzZSBJZGU6cmV0dXJuIExlO2Nhc2UgTGRlOnJldHVybiAkfXJldHVybiB2fSk7ZnVuY3Rpb24gWW1lKG0sdixUKXtmb3IodmFyIE49LTEsVj1ULmxlbmd0aDsrK048Vjspe3ZhciBZPVRbTl0sSj1ZLnNpemU7c3dpdGNoKFkudHlwZSl7Y2FzZSJkcm9wIjptKz1KO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0Ijp2LT1KO2JyZWFrO2Nhc2UidGFrZSI6dj1yYSh2LG0rSik7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOm09WGkobSx2LUopO2JyZWFrfX1yZXR1cm57c3RhcnQ6bSxlbmQ6dn19ZnVuY3Rpb24gam1lKG0pe3ZhciB2PW0ubWF0Y2goRXQpO3JldHVybiB2P3ZbMV0uc3BsaXQoeHQpOltdfWZ1bmN0aW9uIHhwdChtLHYsVCl7dj12bSh2LG0pO2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9ITE7KytOPFY7KXt2YXIgSj1faCh2W05dKTtpZighKFk9bSE9bnVsbCYmVChtLEopKSlicmVhazttPW1bSl19cmV0dXJuIFl8fCsrTiE9Vj9ZOihWPW09PW51bGw/MDptLmxlbmd0aCwhIVYmJlNJKFYpJiZjcChKLFYpJiYoJGUobSl8fHNfKG0pKSl9ZnVuY3Rpb24gWG1lKG0pe3ZhciB2PW0ubGVuZ3RoLFQ9bmV3IG0uY29uc3RydWN0b3Iodik7cmV0dXJuIHYmJnR5cGVvZiBtWzBdPT0ic3RyaW5nIiYmdW4uY2FsbChtLCJpbmRleCIpJiYoVC5pbmRleD1tLmluZGV4LFQuaW5wdXQ9bS5pbnB1dCksVH1mdW5jdGlvbiBicHQobSl7cmV0dXJuIHR5cGVvZiBtLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhT00obSk/eXgoSzYobSkpOnt9fWZ1bmN0aW9uICRtZShtLHYsVCl7dmFyIE49bS5jb25zdHJ1Y3Rvcjtzd2l0Y2godil7Y2FzZSAkdDpyZXR1cm4gRnEobSk7Y2FzZSBLdDpjYXNlIF90OnJldHVybiBuZXcgTigrbSk7Y2FzZSBoZTpyZXR1cm4ga21lKG0sVCk7Y2FzZSBUdDpjYXNlIGJlOmNhc2UgbnQ6Y2FzZSBDdDpjYXNlIFd0OmNhc2UgZmU6Y2FzZSBhdDpjYXNlIHNlOmNhc2UgUXQ6cmV0dXJuIG5wdChtLFQpO2Nhc2UgcTpyZXR1cm4gbmV3IE47Y2FzZSBwdDpjYXNlIGFyOnJldHVybiBuZXcgTihtKTtjYXNlIGVlOnJldHVybiBSbWUobSk7Y2FzZSBMZTpyZXR1cm4gbmV3IE47Y2FzZSBmcjpyZXR1cm4gTm1lKG0pfX1mdW5jdGlvbiBLbWUobSx2KXt2YXIgVD12Lmxlbmd0aDtpZighVClyZXR1cm4gbTt2YXIgTj1ULTE7cmV0dXJuIHZbTl09KFQ+MT8iJiAiOiIiKSt2W05dLHY9di5qb2luKFQ+Mj8iLCAiOiIgIiksbS5yZXBsYWNlKGd0LGB7Ci8qIFt3cmFwcGVkIHdpdGggYCt2K2BdICovCmApfWZ1bmN0aW9uIFptZShtKXtyZXR1cm4gJGUobSl8fHNfKG0pfHwhIShUZnQmJm0mJm1bVGZ0XSl9ZnVuY3Rpb24gY3AobSx2KXt2YXIgVD10eXBlb2YgbTtyZXR1cm4gdj12PT1udWxsP1U6diwhIXYmJihUPT0ibnVtYmVyInx8VCE9InN5bWJvbCImJm5wLnRlc3QobSkpJiZtPi0xJiZtJTE9PTAmJm08dn1mdW5jdGlvbiBrYShtLHYsVCl7aWYoIWVpKFQpKXJldHVybiExO3ZhciBOPXR5cGVvZiB2O3JldHVybihOPT0ibnVtYmVyIj9kcyhUKSYmY3AodixULmxlbmd0aCk6Tj09InN0cmluZyImJnYgaW4gVCk/cnUoVFt2XSxtKTohMX1mdW5jdGlvbiBZcShtLHYpe2lmKCRlKG0pKXJldHVybiExO3ZhciBUPXR5cGVvZiBtO3JldHVybiBUPT0ibnVtYmVyInx8VD09InN5bWJvbCJ8fFQ9PSJib29sZWFuInx8bT09bnVsbHx8anMobSk/ITA6Y20udGVzdChtKXx8IWx4LnRlc3QobSl8fHYhPW51bGwmJm0gaW4gdm4odil9ZnVuY3Rpb24gSm1lKG0pe3ZhciB2PXR5cGVvZiBtO3JldHVybiB2PT0ic3RyaW5nInx8dj09Im51bWJlciJ8fHY9PSJzeW1ib2wifHx2PT0iYm9vbGVhbiI/bSE9PSJfX3Byb3RvX18iOm09PT1udWxsfWZ1bmN0aW9uIGpxKG0pe3ZhciB2PW1JKG0pLFQ9R1t2XTtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uInx8ISh2IGluIGdyLnByb3RvdHlwZSkpcmV0dXJuITE7aWYobT09PVQpcmV0dXJuITA7dmFyIE49cXEoVCk7cmV0dXJuISFOJiZtPT09TlswXX1mdW5jdGlvbiBRbWUobSl7cmV0dXJuISF3ZnQmJndmdCBpbiBtfXZhciB0Z2U9VzY/dXA6dUc7ZnVuY3Rpb24gT00obSl7dmFyIHY9bSYmbS5jb25zdHJ1Y3RvcixUPXR5cGVvZiB2PT0iZnVuY3Rpb24iJiZ2LnByb3RvdHlwZXx8bXg7cmV0dXJuIG09PT1UfWZ1bmN0aW9uIHdwdChtKXtyZXR1cm4gbT09PW0mJiFlaShtKX1mdW5jdGlvbiBTcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQ9PW51bGw/ITE6VFttXT09PXYmJih2IT09ZXx8bSBpbiB2bihUKSl9fWZ1bmN0aW9uIGVnZShtKXt2YXIgdj1iSShtLGZ1bmN0aW9uKE4pe3JldHVybiBULnNpemU9PT1zJiZULmNsZWFyKCksTn0pLFQ9di5jYWNoZTtyZXR1cm4gdn1mdW5jdGlvbiByZ2UobSx2KXt2YXIgVD1tWzFdLE49dlsxXSxWPVR8TixZPVY8KGR8Z3xDKSxKPU49PUMmJlQ9PXl8fE49PUMmJlQ9PVAmJm1bN10ubGVuZ3RoPD12WzhdfHxOPT0oQ3xQKSYmdls3XS5sZW5ndGg8PXZbOF0mJlQ9PXk7aWYoIShZfHxKKSlyZXR1cm4gbTtOJmQmJihtWzJdPXZbMl0sVnw9VCZkPzA6Xyk7dmFyIGl0PXZbM107aWYoaXQpe3ZhciBmdD1tWzNdO21bM109ZnQ/b3B0KGZ0LGl0LHZbNF0pOml0LG1bNF09ZnQ/ZG0obVszXSxsKTp2WzRdfXJldHVybiBpdD12WzVdLGl0JiYoZnQ9bVs1XSxtWzVdPWZ0P2FwdChmdCxpdCx2WzZdKTppdCxtWzZdPWZ0P2RtKG1bNV0sbCk6dls2XSksaXQ9dls3XSxpdCYmKG1bN109aXQpLE4mQyYmKG1bOF09bVs4XT09bnVsbD92WzhdOnJhKG1bOF0sdls4XSkpLG1bOV09PW51bGwmJihtWzldPXZbOV0pLG1bMF09dlswXSxtWzFdPVYsbX1mdW5jdGlvbiBuZ2UobSl7dmFyIHY9W107aWYobSE9bnVsbClmb3IodmFyIFQgaW4gdm4obSkpdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIGlnZShtKXtyZXR1cm4gajYuY2FsbChtKX1mdW5jdGlvbiBNcHQobSx2LFQpe3JldHVybiB2PVhpKHY9PT1lP20ubGVuZ3RoLTE6diwwKSxmdW5jdGlvbigpe2Zvcih2YXIgTj1hcmd1bWVudHMsVj0tMSxZPVhpKE4ubGVuZ3RoLXYsMCksSj12dChZKTsrK1Y8WTspSltWXT1OW3YrVl07Vj0tMTtmb3IodmFyIGl0PXZ0KHYrMSk7KytWPHY7KWl0W1ZdPU5bVl07cmV0dXJuIGl0W3ZdPVQoSiksR3MobSx0aGlzLGl0KX19ZnVuY3Rpb24gRXB0KG0sdil7cmV0dXJuIHYubGVuZ3RoPDI/bTppXyhtLGpsKHYsMCwtMSkpfWZ1bmN0aW9uIG9nZShtLHYpe2Zvcih2YXIgVD1tLmxlbmd0aCxOPXJhKHYubGVuZ3RoLFQpLFY9cHMobSk7Ti0tOyl7dmFyIFk9dltOXTttW05dPWNwKFksVCk/VltZXTplfXJldHVybiBtfWZ1bmN0aW9uIFhxKG0sdil7aWYoISh2PT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIG1bdl09PSJmdW5jdGlvbiIpJiZ2IT0iX19wcm90b19fIilyZXR1cm4gbVt2XX12YXIgVHB0PUFwdCgkZnQpLHpNPXhkZXx8ZnVuY3Rpb24obSx2KXtyZXR1cm4gZm8uc2V0VGltZW91dChtLHYpfSwkcT1BcHQoQW1lKTtmdW5jdGlvbiBDcHQobSx2LFQpe3ZhciBOPXYrIiI7cmV0dXJuICRxKG0sS21lKE4sYWdlKGptZShOKSxUKSkpfWZ1bmN0aW9uIEFwdChtKXt2YXIgdj0wLFQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTj1NZGUoKSxWPUktKE4tVCk7aWYoVD1OLFY+MCl7aWYoKyt2Pj1CKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB2PTA7cmV0dXJuIG0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBfSShtLHYpe3ZhciBUPS0xLE49bS5sZW5ndGgsVj1OLTE7Zm9yKHY9dj09PWU/Tjp2OysrVDx2Oyl7dmFyIFk9THEoVCxWKSxKPW1bWV07bVtZXT1tW1RdLG1bVF09Sn1yZXR1cm4gbS5sZW5ndGg9dixtfXZhciBQcHQ9ZWdlKGZ1bmN0aW9uKG0pe3ZhciB2PVtdO3JldHVybiBtLmNoYXJDb2RlQXQoMCk9PT00NiYmdi5wdXNoKCIiKSxtLnJlcGxhY2UoSjAsZnVuY3Rpb24oVCxOLFYsWSl7di5wdXNoKFY/WS5yZXBsYWNlKFVlLCIkMSIpOk58fFQpfSksdn0pO2Z1bmN0aW9uIF9oKG0pe2lmKHR5cGVvZiBtPT0ic3RyaW5nInx8anMobSkpcmV0dXJuIG07dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiBhXyhtKXtpZihtIT1udWxsKXt0cnl7cmV0dXJuIFk2LmNhbGwobSl9Y2F0Y2godil7fXRyeXtyZXR1cm4gbSsiIn1jYXRjaCh2KXt9fXJldHVybiIifWZ1bmN0aW9uIGFnZShtLHYpe3JldHVybiBxbChTdCxmdW5jdGlvbihUKXt2YXIgTj0iXy4iK1RbMF07diZUWzFdJiYhVjYobSxOKSYmbS5wdXNoKE4pfSksbS5zb3J0KCl9ZnVuY3Rpb24gSXB0KG0pe2lmKG0gaW5zdGFuY2VvZiBncilyZXR1cm4gbS5jbG9uZSgpO3ZhciB2PW5ldyBXbChtLl9fd3JhcHBlZF9fLG0uX19jaGFpbl9fKTtyZXR1cm4gdi5fX2FjdGlvbnNfXz1wcyhtLl9fYWN0aW9uc19fKSx2Ll9faW5kZXhfXz1tLl9faW5kZXhfXyx2Ll9fdmFsdWVzX189bS5fX3ZhbHVlc19fLHZ9ZnVuY3Rpb24gc2dlKG0sdixUKXsoVD9rYShtLHYsVCk6dj09PWUpP3Y9MTp2PVhpKFFlKHYpLDApO3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTnx8djwxKXJldHVybltdO2Zvcih2YXIgVj0wLFk9MCxKPXZ0KFE2KE4vdikpO1Y8TjspSltZKytdPWpsKG0sVixWKz12KTtyZXR1cm4gSn1mdW5jdGlvbiBsZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49MCxWPVtdOysrdjxUOyl7dmFyIFk9bVt2XTtZJiYoVltOKytdPVkpfXJldHVybiBWfWZ1bmN0aW9uIGNnZSgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW0pcmV0dXJuW107Zm9yKHZhciB2PXZ0KG0tMSksVD1hcmd1bWVudHNbMF0sTj1tO04tLTspdltOLTFdPWFyZ3VtZW50c1tOXTtyZXR1cm4gcG0oJGUoVCk/cHMoVCk6W1RdLFJvKHYsMSkpfXZhciB1Z2U9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4geGkobSk/TE0obSxSbyh2LDEseGksITApKTpbXX0pLGhnZT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPVhsKHYpO3JldHVybiB4aShUKSYmKFQ9ZSkseGkobSk/TE0obSxSbyh2LDEseGksITApLGtlKFQsMikpOltdfSksZmdlPW5yKGZ1bmN0aW9uKG0sdil7dmFyIFQ9WGwodik7cmV0dXJuIHhpKFQpJiYoVD1lKSx4aShtKT9MTShtLFJvKHYsMSx4aSwhMCksZSxUKTpbXX0pO2Z1bmN0aW9uIHBnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBkZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gTj8odj1UfHx2PT09ZT8xOlFlKHYpLHY9Ti12LGpsKG0sMCx2PDA/MDp2KSk6W119ZnVuY3Rpb24gbWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCwhMCk6W119ZnVuY3Rpb24gZ2dlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCk6W119ZnVuY3Rpb24gX2dlKG0sdixULE4pe3ZhciBWPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gVj8oVCYmdHlwZW9mIFQhPSJudW1iZXIiJiZrYShtLHYsVCkmJihUPTAsTj1WKSxjbWUobSx2LFQsTikpOltdfWZ1bmN0aW9uIExwdChtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO2lmKCFOKXJldHVybi0xO3ZhciBWPVQ9PW51bGw/MDpRZShUKTtyZXR1cm4gVjwwJiYoVj1YaShOK1YsMCkpLFU2KG0sa2UodiwzKSxWKX1mdW5jdGlvbiBrcHQobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1OLTE7cmV0dXJuIFQhPT1lJiYoVj1RZShUKSxWPVQ8MD9YaShOK1YsMCk6cmEoVixOLTEpKSxVNihtLGtlKHYsMyksViwhMCl9ZnVuY3Rpb24gUnB0KG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9SbyhtLDEpOltdfWZ1bmN0aW9uIHlnZShtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/Um8obSx6KTpbXX1mdW5jdGlvbiB2Z2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIFQ/KHY9dj09PWU/MTpRZSh2KSxSbyhtLHYpKTpbXX1mdW5jdGlvbiB4Z2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49e307Kyt2PFQ7KXt2YXIgVj1tW3ZdO05bVlswXV09VlsxXX1yZXR1cm4gTn1mdW5jdGlvbiBOcHQobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP21bMF06ZX1mdW5jdGlvbiBiZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1UPT1udWxsPzA6UWUoVCk7cmV0dXJuIFY8MCYmKFY9WGkoTitWLDApKSxmeChtLHYsVil9ZnVuY3Rpb24gd2dlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDAsLTEpOltdfXZhciBTZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9JG4obSxPcSk7cmV0dXJuIHYubGVuZ3RoJiZ2WzBdPT09bVswXT9UcSh2KTpbXX0pLE1nZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKSxUPSRuKG0sT3EpO3JldHVybiB2PT09WGwoVCk/dj1lOlQucG9wKCksVC5sZW5ndGgmJlRbMF09PT1tWzBdP1RxKFQsa2UodiwyKSk6W119KSxFZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSksVD0kbihtLE9xKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsdiYmVC5wb3AoKSxULmxlbmd0aCYmVFswXT09PW1bMF0/VHEoVCxlLHYpOltdfSk7ZnVuY3Rpb24gVGdlKG0sdil7cmV0dXJuIG09PW51bGw/IiI6d2RlLmNhbGwobSx2KX1mdW5jdGlvbiBYbChtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/bVt2LTFdOmV9ZnVuY3Rpb24gQ2dlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7aWYoIU4pcmV0dXJuLTE7dmFyIFY9TjtyZXR1cm4gVCE9PWUmJihWPVFlKFQpLFY9VjwwP1hpKE4rViwwKTpyYShWLE4tMSkpLHY9PT12P2FkZShtLHYsVik6VTYobSxkZnQsViwhMCl9ZnVuY3Rpb24gQWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP1dmdChtLFFlKHYpKTplfXZhciBQZ2U9bnIoRHB0KTtmdW5jdGlvbiBEcHQobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdik6bX1mdW5jdGlvbiBJZ2UobSx2LFQpe3JldHVybiBtJiZtLmxlbmd0aCYmdiYmdi5sZW5ndGg/SXEobSx2LGtlKFQsMikpOm19ZnVuY3Rpb24gTGdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdixlLFQpOm19dmFyIGtnZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aCxOPXdxKG0sdik7cmV0dXJuIFhmdChtLCRuKHYsZnVuY3Rpb24oVil7cmV0dXJuIGNwKFYsVCk/K1Y6Vn0pLnNvcnQoaXB0KSksTn0pO2Z1bmN0aW9uIFJnZShtLHYpe3ZhciBUPVtdO2lmKCEobSYmbS5sZW5ndGgpKXJldHVybiBUO3ZhciBOPS0xLFY9W10sWT1tLmxlbmd0aDtmb3Iodj1rZSh2LDMpOysrTjxZOyl7dmFyIEo9bVtOXTt2KEosTixtKSYmKFQucHVzaChKKSxWLnB1c2goTikpfXJldHVybiBYZnQobSxWKSxUfWZ1bmN0aW9uIEtxKG0pe3JldHVybiBtPT1udWxsP206VGRlLmNhbGwobSl9ZnVuY3Rpb24gTmdlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIE4/KFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpPyh2PTAsVD1OKToodj12PT1udWxsPzA6UWUodiksVD1UPT09ZT9OOlFlKFQpKSxqbChtLHYsVCkpOltdfWZ1bmN0aW9uIERnZShtLHYpe3JldHVybiBsSShtLHYpfWZ1bmN0aW9uIE9nZShtLHYsVCl7cmV0dXJuIFJxKG0sdixrZShULDIpKX1mdW5jdGlvbiB6Z2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7aWYoVCl7dmFyIE49bEkobSx2KTtpZihOPFQmJnJ1KG1bTl0sdikpcmV0dXJuIE59cmV0dXJuLTF9ZnVuY3Rpb24gRmdlKG0sdil7cmV0dXJuIGxJKG0sdiwhMCl9ZnVuY3Rpb24gQmdlKG0sdixUKXtyZXR1cm4gUnEobSx2LGtlKFQsMiksITApfWZ1bmN0aW9uIEhnZShtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aDtpZihUKXt2YXIgTj1sSShtLHYsITApLTE7aWYocnUobVtOXSx2KSlyZXR1cm4gTn1yZXR1cm4tMX1mdW5jdGlvbiBWZ2UobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP0tmdChtKTpbXX1mdW5jdGlvbiBVZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/S2Z0KG0sa2UodiwyKSk6W119ZnVuY3Rpb24gcWdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDEsdik6W119ZnVuY3Rpb24gR2dlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGg/KHY9VHx8dj09PWU/MTpRZSh2KSxqbChtLDAsdjwwPzA6dikpOltdfWZ1bmN0aW9uIFdnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksdj1OLXYsamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBZZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpLCExLCEwKTpbXX1mdW5jdGlvbiBqZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpKTpbXX12YXIgWGdlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiB5bShSbyhtLDEseGksITApKX0pLCRnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4geGkodikmJih2PWUpLHltKFJvKG0sMSx4aSwhMCksa2UodiwyKSl9KSxLZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLHltKFJvKG0sMSx4aSwhMCksZSx2KX0pO2Z1bmN0aW9uIFpnZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/eW0obSk6W119ZnVuY3Rpb24gSmdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP3ltKG0sa2UodiwyKSk6W119ZnVuY3Rpb24gUWdlKG0sdil7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLG0mJm0ubGVuZ3RoP3ltKG0sZSx2KTpbXX1mdW5jdGlvbiBacShtKXtpZighKG0mJm0ubGVuZ3RoKSlyZXR1cm5bXTt2YXIgdj0wO3JldHVybiBtPWZtKG0sZnVuY3Rpb24oVCl7aWYoeGkoVCkpcmV0dXJuIHY9WGkoVC5sZW5ndGgsdiksITB9KSxkcSh2LGZ1bmN0aW9uKFQpe3JldHVybiAkbihtLGhxKFQpKX0pfWZ1bmN0aW9uIE9wdChtLHYpe2lmKCEobSYmbS5sZW5ndGgpKXJldHVybltdO3ZhciBUPVpxKG0pO3JldHVybiB2PT1udWxsP1Q6JG4oVCxmdW5jdGlvbihOKXtyZXR1cm4gR3ModixlLE4pfSl9dmFyIHQwZT1ucihmdW5jdGlvbihtLHYpe3JldHVybiB4aShtKT9MTShtLHYpOltdfSksZTBlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiBEcShmbShtLHhpKSl9KSxyMGU9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHhpKHYpJiYodj1lKSxEcShmbShtLHhpKSxrZSh2LDIpKX0pLG4wZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsRHEoZm0obSx4aSksZSx2KX0pLGkwZT1ucihacSk7ZnVuY3Rpb24gbzBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxJTSl9ZnVuY3Rpb24gYTBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxOTSl9dmFyIHMwZT1ucihmdW5jdGlvbihtKXt2YXIgdj1tLmxlbmd0aCxUPXY+MT9tW3YtMV06ZTtyZXR1cm4gVD10eXBlb2YgVD09ImZ1bmN0aW9uIj8obS5wb3AoKSxUKTplLE9wdChtLFQpfSk7ZnVuY3Rpb24genB0KG0pe3ZhciB2PUcobSk7cmV0dXJuIHYuX19jaGFpbl9fPSEwLHZ9ZnVuY3Rpb24gbDBlKG0sdil7cmV0dXJuIHYobSksbX1mdW5jdGlvbiB5SShtLHYpe3JldHVybiB2KG0pfXZhciBjMGU9bHAoZnVuY3Rpb24obSl7dmFyIHY9bS5sZW5ndGgsVD12P21bMF06MCxOPXRoaXMuX193cmFwcGVkX18sVj1mdW5jdGlvbihZKXtyZXR1cm4gd3EoWSxtKX07cmV0dXJuIHY+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEoTiBpbnN0YW5jZW9mIGdyKXx8IWNwKFQpP3RoaXMudGhydShWKTooTj1OLnNsaWNlKFQsK1QrKHY/MTowKSksTi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOnlJLGFyZ3M6W1ZdLHRoaXNBcmc6ZX0pLG5ldyBXbChOLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKFkpe3JldHVybiB2JiYhWS5sZW5ndGgmJlkucHVzaChlKSxZfSkpfSk7ZnVuY3Rpb24gdTBlKCl7cmV0dXJuIHpwdCh0aGlzKX1mdW5jdGlvbiBoMGUoKXtyZXR1cm4gbmV3IFdsKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9ZnVuY3Rpb24gZjBlKCl7dGhpcy5fX3ZhbHVlc19fPT09ZSYmKHRoaXMuX192YWx1ZXNfXz1acHQodGhpcy52YWx1ZSgpKSk7dmFyIG09dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdj1tP2U6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybntkb25lOm0sdmFsdWU6dn19ZnVuY3Rpb24gcDBlKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZDBlKG0pe2Zvcih2YXIgdixUPXRoaXM7VCBpbnN0YW5jZW9mIG5JOyl7dmFyIE49SXB0KFQpO04uX19pbmRleF9fPTAsTi5fX3ZhbHVlc19fPWUsdj9WLl9fd3JhcHBlZF9fPU46dj1OO3ZhciBWPU47VD1ULl9fd3JhcHBlZF9ffXJldHVybiBWLl9fd3JhcHBlZF9fPW0sdn1mdW5jdGlvbiBtMGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fO2lmKG0gaW5zdGFuY2VvZiBncil7dmFyIHY9bTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih2PW5ldyBncih0aGlzKSksdj12LnJldmVyc2UoKSx2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6eUksYXJnczpbS3FdLHRoaXNBcmc6ZX0pLG5ldyBXbCh2LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEtxKX1mdW5jdGlvbiBnMGUoKXtyZXR1cm4gUWZ0KHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9dmFyIF8wZT11SShmdW5jdGlvbihtLHYsVCl7dW4uY2FsbChtLFQpPysrbVtUXTphcChtLFQsMSl9KTtmdW5jdGlvbiB5MGUobSx2LFQpe3ZhciBOPSRlKG0pP2ZmdDpsbWU7cmV0dXJuIFQmJmthKG0sdixUKSYmKHY9ZSksTihtLGtlKHYsMykpfWZ1bmN0aW9uIHYwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciB4MGU9dXB0KExwdCksYjBlPXVwdChrcHQpO2Z1bmN0aW9uIHcwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLDEpfWZ1bmN0aW9uIFMwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLHopfWZ1bmN0aW9uIE0wZShtLHYsVCl7cmV0dXJuIFQ9VD09PWU/MTpRZShUKSxSbyh2SShtLHYpLFQpfWZ1bmN0aW9uIEZwdChtLHYpe3ZhciBUPSRlKG0pP3FsOl9tO3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gQnB0KG0sdil7dmFyIFQ9JGUobSk/cXBlOkRmdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBFMGU9dUkoZnVuY3Rpb24obSx2LFQpe3VuLmNhbGwobSxUKT9tW1RdLnB1c2godik6YXAobSxULFt2XSl9KTtmdW5jdGlvbiBUMGUobSx2LFQsTil7bT1kcyhtKT9tOlN4KG0pLFQ9VCYmIU4/UWUoVCk6MDt2YXIgVj1tLmxlbmd0aDtyZXR1cm4gVDwwJiYoVD1YaShWK1QsMCkpLE1JKG0pP1Q8PVYmJm0uaW5kZXhPZih2LFQpPi0xOiEhViYmZngobSx2LFQpPi0xfXZhciBDMGU9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPS0xLFY9dHlwZW9mIHY9PSJmdW5jdGlvbiIsWT1kcyhtKT92dChtLmxlbmd0aCk6W107cmV0dXJuIF9tKG0sZnVuY3Rpb24oSil7WVsrK05dPVY/R3ModixKLFQpOmtNKEosdixUKX0pLFl9KSxBMGU9dUkoZnVuY3Rpb24obSx2LFQpe2FwKG0sVCx2KX0pO2Z1bmN0aW9uIHZJKG0sdil7dmFyIFQ9JGUobSk/JG46VWZ0O3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gUDBlKG0sdixULE4pe3JldHVybiBtPT1udWxsP1tdOigkZSh2KXx8KHY9dj09bnVsbD9bXTpbdl0pLFQ9Tj9lOlQsJGUoVCl8fChUPVQ9PW51bGw/W106W1RdKSxZZnQobSx2LFQpKX12YXIgSTBlPXVJKGZ1bmN0aW9uKG0sdixUKXttW1Q/MDoxXS5wdXNoKHYpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiBMMGUobSx2LFQpe3ZhciBOPSRlKG0pP2NxOmdmdCxWPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gTihtLGtlKHYsNCksVCxWLF9tKX1mdW5jdGlvbiBrMGUobSx2LFQpe3ZhciBOPSRlKG0pP0dwZTpnZnQsVj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIE4obSxrZSh2LDQpLFQsVixEZnQpfWZ1bmN0aW9uIFIwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLHdJKGtlKHYsMykpKX1mdW5jdGlvbiBOMGUobSl7dmFyIHY9JGUobSk/TGZ0OlRtZTtyZXR1cm4gdihtKX1mdW5jdGlvbiBEMGUobSx2LFQpeyhUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodik7dmFyIE49JGUobSk/bm1lOkNtZTtyZXR1cm4gTihtLHYpfWZ1bmN0aW9uIE8wZShtKXt2YXIgdj0kZShtKT9pbWU6UG1lO3JldHVybiB2KG0pfWZ1bmN0aW9uIHowZShtKXtpZihtPT1udWxsKXJldHVybiAwO2lmKGRzKG0pKXJldHVybiBNSShtKT9keChtKTptLmxlbmd0aDt2YXIgdj1uYShtKTtyZXR1cm4gdj09cXx8dj09TGU/bS5zaXplOkFxKG0pLmxlbmd0aH1mdW5jdGlvbiBGMGUobSx2LFQpe3ZhciBOPSRlKG0pP3VxOkltZTtyZXR1cm4gVCYma2EobSx2LFQpJiYodj1lKSxOKG0sa2UodiwzKSl9dmFyIEIwZT1ucihmdW5jdGlvbihtLHYpe2lmKG09PW51bGwpcmV0dXJuW107dmFyIFQ9di5sZW5ndGg7cmV0dXJuIFQ+MSYma2EobSx2WzBdLHZbMV0pP3Y9W106VD4yJiZrYSh2WzBdLHZbMV0sdlsyXSkmJih2PVt2WzBdXSksWWZ0KG0sUm8odiwxKSxbXSl9KSx4ST12ZGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZvLkRhdGUubm93KCl9O2Z1bmN0aW9uIEgwZShtLHYpe2lmKHR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gbT1RZShtKSxmdW5jdGlvbigpe2lmKC0tbTwxKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHB0KG0sdixUKXtyZXR1cm4gdj1UP2U6dix2PW0mJnY9PW51bGw/bS5sZW5ndGg6dixzcChtLEMsZSxlLGUsZSx2KX1mdW5jdGlvbiBWcHQobSx2KXt2YXIgVDtpZih0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIG09UWUobSksZnVuY3Rpb24oKXtyZXR1cm4tLW0+MCYmKFQ9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG08PTEmJih2PWUpLFR9fXZhciBKcT1ucihmdW5jdGlvbihtLHYsVCl7dmFyIE49ZDtpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChKcSkpO058PWJ9cmV0dXJuIHNwKG0sTix2LFQsVil9KSxVcHQ9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPWR8ZztpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChVcHQpKTtOfD1ifXJldHVybiBzcCh2LE4sbSxULFYpfSk7ZnVuY3Rpb24gcXB0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seSxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9cXB0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gR3B0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seCxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9R3B0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gV3B0KG0sdixUKXt2YXIgTixWLFksSixpdCxmdCxEdD0wLE90PSExLFZ0PSExLG9lPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2PSRsKHYpfHwwLGVpKFQpJiYoT3Q9ISFULmxlYWRpbmcsVnQ9Im1heFdhaXQiaW4gVCxZPVZ0P1hpKCRsKFQubWF4V2FpdCl8fDAsdik6WSxvZT0idHJhaWxpbmciaW4gVD8hIVQudHJhaWxpbmc6b2UpO2Z1bmN0aW9uIFRlKGJpKXt2YXIgbnU9TixmcD1WO3JldHVybiBOPVY9ZSxEdD1iaSxKPW0uYXBwbHkoZnAsbnUpLEp9ZnVuY3Rpb24gTmUoYmkpe3JldHVybiBEdD1iaSxpdD16TShwcix2KSxPdD9UZShiaSk6Sn1mdW5jdGlvbiBlcihiaSl7dmFyIG51PWJpLWZ0LGZwPWJpLUR0LHVkdD12LW51O3JldHVybiBWdD9yYSh1ZHQsWS1mcCk6dWR0fWZ1bmN0aW9uIERlKGJpKXt2YXIgbnU9YmktZnQsZnA9YmktRHQ7cmV0dXJuIGZ0PT09ZXx8bnU+PXZ8fG51PDB8fFZ0JiZmcD49WX1mdW5jdGlvbiBwcigpe3ZhciBiaT14SSgpO2lmKERlKGJpKSlyZXR1cm4geXIoYmkpO2l0PXpNKHByLGVyKGJpKSl9ZnVuY3Rpb24geXIoYmkpe3JldHVybiBpdD1lLG9lJiZOP1RlKGJpKTooTj1WPWUsSil9ZnVuY3Rpb24gWHMoKXtpdCE9PWUmJmVwdChpdCksRHQ9MCxOPWZ0PVY9aXQ9ZX1mdW5jdGlvbiBSYSgpe3JldHVybiBpdD09PWU/Sjp5cih4SSgpKX1mdW5jdGlvbiAkcygpe3ZhciBiaT14SSgpLG51PURlKGJpKTtpZihOPWFyZ3VtZW50cyxWPXRoaXMsZnQ9YmksbnUpe2lmKGl0PT09ZSlyZXR1cm4gTmUoZnQpO2lmKFZ0KXJldHVybiBlcHQoaXQpLGl0PXpNKHByLHYpLFRlKGZ0KX1yZXR1cm4gaXQ9PT1lJiYoaXQ9ek0ocHIsdikpLEp9cmV0dXJuICRzLmNhbmNlbD1Ycywkcy5mbHVzaD1SYSwkc312YXIgVjBlPW5yKGZ1bmN0aW9uKG0sdil7cmV0dXJuIE5mdChtLDEsdil9KSxVMGU9bnIoZnVuY3Rpb24obSx2LFQpe3JldHVybiBOZnQobSwkbCh2KXx8MCxUKX0pO2Z1bmN0aW9uIHEwZShtKXtyZXR1cm4gc3AobSxrKX1mdW5jdGlvbiBiSShtLHYpe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24ifHx2IT1udWxsJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7dmFyIFQ9ZnVuY3Rpb24oKXt2YXIgTj1hcmd1bWVudHMsVj12P3YuYXBwbHkodGhpcyxOKTpOWzBdLFk9VC5jYWNoZTtpZihZLmhhcyhWKSlyZXR1cm4gWS5nZXQoVik7dmFyIEo9bS5hcHBseSh0aGlzLE4pO3JldHVybiBULmNhY2hlPVkuc2V0KFYsSil8fFksSn07cmV0dXJuIFQuY2FjaGU9bmV3KGJJLkNhY2hlfHxvcCksVH1iSS5DYWNoZT1vcDtmdW5jdGlvbiB3SShtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9YXJndW1lbnRzO3N3aXRjaCh2Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFtLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFtLmNhbGwodGhpcyx2WzBdKTtjYXNlIDI6cmV0dXJuIW0uY2FsbCh0aGlzLHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiFtLmNhbGwodGhpcyx2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIW0uYXBwbHkodGhpcyx2KX19ZnVuY3Rpb24gRzBlKG0pe3JldHVybiBWcHQoMixtKX12YXIgVzBlPUxtZShmdW5jdGlvbihtLHYpe3Y9di5sZW5ndGg9PTEmJiRlKHZbMF0pPyRuKHZbMF0sV3Moa2UoKSkpOiRuKFJvKHYsMSksV3Moa2UoKSkpO3ZhciBUPXYubGVuZ3RoO3JldHVybiBucihmdW5jdGlvbihOKXtmb3IodmFyIFY9LTEsWT1yYShOLmxlbmd0aCxUKTsrK1Y8WTspTltWXT12W1ZdLmNhbGwodGhpcyxOW1ZdKTtyZXR1cm4gR3MobSx0aGlzLE4pfSl9KSxRcT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoUXEpKTtyZXR1cm4gc3AobSxiLGUsdixUKX0pLFlwdD1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoWXB0KSk7cmV0dXJuIHNwKG0sUyxlLHYsVCl9KSxZMGU9bHAoZnVuY3Rpb24obSx2KXtyZXR1cm4gc3AobSxQLGUsZSxlLHYpfSk7ZnVuY3Rpb24gajBlKG0sdil7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEdsKGkpO3JldHVybiB2PXY9PT1lP3Y6UWUodiksbnIobSx2KX1mdW5jdGlvbiBYMGUobSx2KXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHY9dj09bnVsbD8wOlhpKFFlKHYpLDApLG5yKGZ1bmN0aW9uKFQpe3ZhciBOPVRbdl0sVj14bShULDAsdik7cmV0dXJuIE4mJnBtKFYsTiksR3MobSx0aGlzLFYpfSl9ZnVuY3Rpb24gJDBlKG0sdixUKXt2YXIgTj0hMCxWPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gZWkoVCkmJihOPSJsZWFkaW5nImluIFQ/ISFULmxlYWRpbmc6TixWPSJ0cmFpbGluZyJpbiBUPyEhVC50cmFpbGluZzpWKSxXcHQobSx2LHtsZWFkaW5nOk4sbWF4V2FpdDp2LHRyYWlsaW5nOlZ9KX1mdW5jdGlvbiBLMGUobSl7cmV0dXJuIEhwdChtLDEpfWZ1bmN0aW9uIFowZShtLHYpe3JldHVybiBRcSh6cSh2KSxtKX1mdW5jdGlvbiBKMGUoKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgbT1hcmd1bWVudHNbMF07cmV0dXJuICRlKG0pP206W21dfWZ1bmN0aW9uIFEwZShtKXtyZXR1cm4gWWwobSxoKX1mdW5jdGlvbiB0X2UobSx2KXtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsWWwobSxoLHYpfWZ1bmN0aW9uIGVfZShtKXtyZXR1cm4gWWwobSxjfGgpfWZ1bmN0aW9uIHJfZShtLHYpe3JldHVybiB2PXR5cGVvZiB2PT0iZnVuY3Rpb24iP3Y6ZSxZbChtLGN8aCx2KX1mdW5jdGlvbiBuX2UobSx2KXtyZXR1cm4gdj09bnVsbHx8UmZ0KG0sdixwbyh2KSl9ZnVuY3Rpb24gcnUobSx2KXtyZXR1cm4gbT09PXZ8fG0hPT1tJiZ2IT09dn12YXIgaV9lPWRJKEVxKSxvX2U9ZEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbT49dn0pLHNfPUJmdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0JmdDpmdW5jdGlvbihtKXtyZXR1cm4gc2kobSkmJnVuLmNhbGwobSwiY2FsbGVlIikmJiFFZnQuY2FsbChtLCJjYWxsZWUiKX0sJGU9dnQuaXNBcnJheSxhX2U9YWZ0P1dzKGFmdCk6ZG1lO2Z1bmN0aW9uIGRzKG0pe3JldHVybiBtIT1udWxsJiZTSShtLmxlbmd0aCkmJiF1cChtKX1mdW5jdGlvbiB4aShtKXtyZXR1cm4gc2kobSkmJmRzKG0pfWZ1bmN0aW9uIHNfZShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF8fHNpKG0pJiZMYShtKT09S3R9dmFyIGJtPWJkZXx8dUcsbF9lPXNmdD9XcyhzZnQpOm1tZTtmdW5jdGlvbiBjX2UobSl7cmV0dXJuIHNpKG0pJiZtLm5vZGVUeXBlPT09MSYmIUZNKG0pfWZ1bmN0aW9uIHVfZShtKXtpZihtPT1udWxsKXJldHVybiEwO2lmKGRzKG0pJiYoJGUobSl8fHR5cGVvZiBtPT0ic3RyaW5nInx8dHlwZW9mIG0uc3BsaWNlPT0iZnVuY3Rpb24ifHxibShtKXx8d3gobSl8fHNfKG0pKSlyZXR1cm4hbS5sZW5ndGg7dmFyIHY9bmEobSk7aWYodj09cXx8dj09TGUpcmV0dXJuIW0uc2l6ZTtpZihPTShtKSlyZXR1cm4hQXEobSkubGVuZ3RoO2Zvcih2YXIgVCBpbiBtKWlmKHVuLmNhbGwobSxUKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBoX2UobSx2KXtyZXR1cm4gUk0obSx2KX1mdW5jdGlvbiBmX2UobSx2LFQpe1Q9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDplO3ZhciBOPVQ/VChtLHYpOmU7cmV0dXJuIE49PT1lP1JNKG0sdixlLFQpOiEhTn1mdW5jdGlvbiB0RyhtKXtpZighc2kobSkpcmV0dXJuITE7dmFyIHY9TGEobSk7cmV0dXJuIHY9PVh8fHY9PWN0fHx0eXBlb2YgbS5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG0ubmFtZT09InN0cmluZyImJiFGTShtKX1mdW5jdGlvbiBwX2UobSl7cmV0dXJuIHR5cGVvZiBtPT0ibnVtYmVyIiYmQ2Z0KG0pfWZ1bmN0aW9uIHVwKG0pe2lmKCFlaShtKSlyZXR1cm4hMTt2YXIgdj1MYShtKTtyZXR1cm4gdj09ZXR8fHY9PWR0fHx2PT1sdHx8dj09aWV9ZnVuY3Rpb24ganB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm09PVFlKG0pfWZ1bmN0aW9uIFNJKG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm0+LTEmJm0lMT09MCYmbTw9VX1mdW5jdGlvbiBlaShtKXt2YXIgdj10eXBlb2YgbTtyZXR1cm4gbSE9bnVsbCYmKHY9PSJvYmplY3QifHx2PT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBzaShtKXtyZXR1cm4gbSE9bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifXZhciBYcHQ9bGZ0P1dzKGxmdCk6X21lO2Z1bmN0aW9uIGRfZShtLHYpe3JldHVybiBtPT09dnx8Q3EobSx2LEdxKHYpKX1mdW5jdGlvbiBtX2UobSx2LFQpe3JldHVybiBUPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6ZSxDcShtLHYsR3EodiksVCl9ZnVuY3Rpb24gZ19lKG0pe3JldHVybiAkcHQobSkmJm0hPSttfWZ1bmN0aW9uIF9fZShtKXtpZih0Z2UobSkpdGhyb3cgbmV3IFdlKG4pO3JldHVybiBIZnQobSl9ZnVuY3Rpb24geV9lKG0pe3JldHVybiBtPT09bnVsbH1mdW5jdGlvbiB2X2UobSl7cmV0dXJuIG09PW51bGx9ZnVuY3Rpb24gJHB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciJ8fHNpKG0pJiZMYShtKT09cHR9ZnVuY3Rpb24gRk0obSl7aWYoIXNpKG0pfHxMYShtKSE9d3QpcmV0dXJuITE7dmFyIHY9SzYobSk7aWYodj09PW51bGwpcmV0dXJuITA7dmFyIFQ9dW4uY2FsbCh2LCJjb25zdHJ1Y3RvciIpJiZ2LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgVD09ImZ1bmN0aW9uIiYmVCBpbnN0YW5jZW9mIFQmJlk2LmNhbGwoVCk9PW1kZX12YXIgZUc9Y2Z0P1dzKGNmdCk6eW1lO2Z1bmN0aW9uIHhfZShtKXtyZXR1cm4ganB0KG0pJiZtPj0tVSYmbTw9VX12YXIgS3B0PXVmdD9Xcyh1ZnQpOnZtZTtmdW5jdGlvbiBNSShtKXtyZXR1cm4gdHlwZW9mIG09PSJzdHJpbmcifHwhJGUobSkmJnNpKG0pJiZMYShtKT09YXJ9ZnVuY3Rpb24ganMobSl7cmV0dXJuIHR5cGVvZiBtPT0ic3ltYm9sInx8c2kobSkmJkxhKG0pPT1mcn12YXIgd3g9aGZ0P1dzKGhmdCk6eG1lO2Z1bmN0aW9uIGJfZShtKXtyZXR1cm4gbT09PWV9ZnVuY3Rpb24gd19lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PSR9ZnVuY3Rpb24gU19lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PUl0fXZhciBNX2U9ZEkoUHEpLEVfZT1kSShmdW5jdGlvbihtLHYpe3JldHVybiBtPD12fSk7ZnVuY3Rpb24gWnB0KG0pe2lmKCFtKXJldHVybltdO2lmKGRzKG0pKXJldHVybiBNSShtKT90dShtKTpwcyhtKTtpZihFTSYmbVtFTV0pcmV0dXJuIG5kZShtW0VNXSgpKTt2YXIgdj1uYShtKSxUPXY9PXE/Z3E6dj09TGU/cTY6U3g7cmV0dXJuIFQobSl9ZnVuY3Rpb24gaHAobSl7aWYoIW0pcmV0dXJuIG09PT0wP206MDtpZihtPSRsKG0pLG09PT16fHxtPT09LXope3ZhciB2PW08MD8tMToxO3JldHVybiB2Kld9cmV0dXJuIG09PT1tP206MH1mdW5jdGlvbiBRZShtKXt2YXIgdj1ocChtKSxUPXYlMTtyZXR1cm4gdj09PXY/VD92LVQ6djowfWZ1bmN0aW9uIEpwdChtKXtyZXR1cm4gbT9uXyhRZShtKSwwLHJ0KTowfWZ1bmN0aW9uICRsKG0pe2lmKHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gbTtpZihqcyhtKSlyZXR1cm4gWjtpZihlaShtKSl7dmFyIHY9dHlwZW9mIG0udmFsdWVPZj09ImZ1bmN0aW9uIj9tLnZhbHVlT2YoKTptO209ZWkodik/disiIjp2fWlmKHR5cGVvZiBtIT0ic3RyaW5nIilyZXR1cm4gbT09PTA/bTorbTttPV9mdChtKTt2YXIgVD1fci50ZXN0KG0pO3JldHVybiBUfHxqbi50ZXN0KG0pP0hwZShtLnNsaWNlKDIpLFQ/Mjo4KTpYci50ZXN0KG0pP1o6K219ZnVuY3Rpb24gUXB0KG0pe3JldHVybiBnaChtLG1zKG0pKX1mdW5jdGlvbiBUX2UobSl7cmV0dXJuIG0/bl8oUWUobSksLVUsVSk6bT09PTA/bTowfWZ1bmN0aW9uIG9uKG0pe3JldHVybiBtPT1udWxsPyIiOllzKG0pfXZhciBDX2U9dngoZnVuY3Rpb24obSx2KXtpZihPTSh2KXx8ZHModikpe2doKHYscG8odiksbSk7cmV0dXJufWZvcih2YXIgVCBpbiB2KXVuLmNhbGwodixUKSYmSU0obSxULHZbVF0pfSksdGR0PXZ4KGZ1bmN0aW9uKG0sdil7Z2godixtcyh2KSxtKX0pLEVJPXZ4KGZ1bmN0aW9uKG0sdixULE4pe2doKHYsbXModiksbSxOKX0pLEFfZT12eChmdW5jdGlvbihtLHYsVCxOKXtnaCh2LHBvKHYpLG0sTil9KSxQX2U9bHAod3EpO2Z1bmN0aW9uIElfZShtLHYpe3ZhciBUPXl4KG0pO3JldHVybiB2PT1udWxsP1Q6a2Z0KFQsdil9dmFyIExfZT1ucihmdW5jdGlvbihtLHYpe209dm4obSk7dmFyIFQ9LTEsTj12Lmxlbmd0aCxWPU4+Mj92WzJdOmU7Zm9yKFYmJmthKHZbMF0sdlsxXSxWKSYmKE49MSk7KytUPE47KWZvcih2YXIgWT12W1RdLEo9bXMoWSksaXQ9LTEsZnQ9Si5sZW5ndGg7KytpdDxmdDspe3ZhciBEdD1KW2l0XSxPdD1tW0R0XTsoT3Q9PT1lfHxydShPdCxteFtEdF0pJiYhdW4uY2FsbChtLER0KSkmJihtW0R0XT1ZW0R0XSl9cmV0dXJuIG19KSxrX2U9bnIoZnVuY3Rpb24obSl7cmV0dXJuIG0ucHVzaChlLF9wdCksR3MoZWR0LGUsbSl9KTtmdW5jdGlvbiBSX2UobSx2KXtyZXR1cm4gcGZ0KG0sa2UodiwzKSxtaCl9ZnVuY3Rpb24gTl9lKG0sdil7cmV0dXJuIHBmdChtLGtlKHYsMyksTXEpfWZ1bmN0aW9uIERfZShtLHYpe3JldHVybiBtPT1udWxsP206U3EobSxrZSh2LDMpLG1zKX1mdW5jdGlvbiBPX2UobSx2KXtyZXR1cm4gbT09bnVsbD9tOnpmdChtLGtlKHYsMyksbXMpfWZ1bmN0aW9uIHpfZShtLHYpe3JldHVybiBtJiZtaChtLGtlKHYsMykpfWZ1bmN0aW9uIEZfZShtLHYpe3JldHVybiBtJiZNcShtLGtlKHYsMykpfWZ1bmN0aW9uIEJfZShtKXtyZXR1cm4gbT09bnVsbD9bXTphSShtLHBvKG0pKX1mdW5jdGlvbiBIX2UobSl7cmV0dXJuIG09PW51bGw/W106YUkobSxtcyhtKSl9ZnVuY3Rpb24gckcobSx2LFQpe3ZhciBOPW09PW51bGw/ZTppXyhtLHYpO3JldHVybiBOPT09ZT9UOk59ZnVuY3Rpb24gVl9lKG0sdil7cmV0dXJuIG0hPW51bGwmJnhwdChtLHYsdW1lKX1mdW5jdGlvbiBuRyhtLHYpe3JldHVybiBtIT1udWxsJiZ4cHQobSx2LGhtZSl9dmFyIFVfZT1mcHQoZnVuY3Rpb24obSx2LFQpe3YhPW51bGwmJnR5cGVvZiB2LnRvU3RyaW5nIT0iZnVuY3Rpb24iJiYodj1qNi5jYWxsKHYpKSxtW3ZdPVR9LG9HKGdzKSkscV9lPWZwdChmdW5jdGlvbihtLHYsVCl7diE9bnVsbCYmdHlwZW9mIHYudG9TdHJpbmchPSJmdW5jdGlvbiImJih2PWo2LmNhbGwodikpLHVuLmNhbGwobSx2KT9tW3ZdLnB1c2goVCk6bVt2XT1bVF19LGtlKSxHX2U9bnIoa00pO2Z1bmN0aW9uIHBvKG0pe3JldHVybiBkcyhtKT9JZnQobSk6QXEobSl9ZnVuY3Rpb24gbXMobSl7cmV0dXJuIGRzKG0pP0lmdChtLCEwKTpibWUobSl9ZnVuY3Rpb24gV19lKG0sdil7dmFyIFQ9e307cmV0dXJuIHY9a2UodiwzKSxtaChtLGZ1bmN0aW9uKE4sVixZKXthcChULHYoTixWLFkpLE4pfSksVH1mdW5jdGlvbiBZX2UobSx2KXt2YXIgVD17fTtyZXR1cm4gdj1rZSh2LDMpLG1oKG0sZnVuY3Rpb24oTixWLFkpe2FwKFQsVix2KE4sVixZKSl9KSxUfXZhciBqX2U9dngoZnVuY3Rpb24obSx2LFQpe3NJKG0sdixUKX0pLGVkdD12eChmdW5jdGlvbihtLHYsVCxOKXtzSShtLHYsVCxOKX0pLFhfZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPXt9O2lmKG09PW51bGwpcmV0dXJuIFQ7dmFyIE49ITE7dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiBZPXZtKFksbSksTnx8KE49WS5sZW5ndGg+MSksWX0pLGdoKG0sVXEobSksVCksTiYmKFQ9WWwoVCxjfHV8aCxVbWUpKTtmb3IodmFyIFY9di5sZW5ndGg7Vi0tOylOcShULHZbVl0pO3JldHVybiBUfSk7ZnVuY3Rpb24gJF9lKG0sdil7cmV0dXJuIHJkdChtLHdJKGtlKHYpKSl9dmFyIEtfZT1scChmdW5jdGlvbihtLHYpe3JldHVybiBtPT1udWxsP3t9OlNtZShtLHYpfSk7ZnVuY3Rpb24gcmR0KG0sdil7aWYobT09bnVsbClyZXR1cm57fTt2YXIgVD0kbihVcShtKSxmdW5jdGlvbihOKXtyZXR1cm5bTl19KTtyZXR1cm4gdj1rZSh2KSxqZnQobSxULGZ1bmN0aW9uKE4sVil7cmV0dXJuIHYoTixWWzBdKX0pfWZ1bmN0aW9uIFpfZShtLHYsVCl7dj12bSh2LG0pO3ZhciBOPS0xLFY9di5sZW5ndGg7Zm9yKFZ8fChWPTEsbT1lKTsrK048Vjspe3ZhciBZPW09PW51bGw/ZTptW19oKHZbTl0pXTtZPT09ZSYmKE49VixZPVQpLG09dXAoWSk/WS5jYWxsKG0pOll9cmV0dXJuIG19ZnVuY3Rpb24gSl9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOk5NKG0sdixUKX1mdW5jdGlvbiBRX2UobSx2LFQsTil7cmV0dXJuIE49dHlwZW9mIE49PSJmdW5jdGlvbiI/TjplLG09PW51bGw/bTpOTShtLHYsVCxOKX12YXIgbmR0PW1wdChwbyksaWR0PW1wdChtcyk7ZnVuY3Rpb24gdHllKG0sdixUKXt2YXIgTj0kZShtKSxWPU58fGJtKG0pfHx3eChtKTtpZih2PWtlKHYsNCksVD09bnVsbCl7dmFyIFk9bSYmbS5jb25zdHJ1Y3RvcjtWP1Q9Tj9uZXcgWTpbXTplaShtKT9UPXVwKFkpP3l4KEs2KG0pKTp7fTpUPXt9fXJldHVybihWP3FsOm1oKShtLGZ1bmN0aW9uKEosaXQsZnQpe3JldHVybiB2KFQsSixpdCxmdCl9KSxUfWZ1bmN0aW9uIGV5ZShtLHYpe3JldHVybiBtPT1udWxsPyEwOk5xKG0sdil9ZnVuY3Rpb24gcnllKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOkpmdChtLHYsenEoVCkpfWZ1bmN0aW9uIG55ZShtLHYsVCxOKXtyZXR1cm4gTj10eXBlb2YgTj09ImZ1bmN0aW9uIj9OOmUsbT09bnVsbD9tOkpmdChtLHYsenEoVCksTil9ZnVuY3Rpb24gU3gobSl7cmV0dXJuIG09PW51bGw/W106bXEobSxwbyhtKSl9ZnVuY3Rpb24gaXllKG0pe3JldHVybiBtPT1udWxsP1tdOm1xKG0sbXMobSkpfWZ1bmN0aW9uIG95ZShtLHYsVCl7cmV0dXJuIFQ9PT1lJiYoVD12LHY9ZSksVCE9PWUmJihUPSRsKFQpLFQ9VD09PVQ/VDowKSx2IT09ZSYmKHY9JGwodiksdj12PT09dj92OjApLG5fKCRsKG0pLHYsVCl9ZnVuY3Rpb24gYXllKG0sdixUKXtyZXR1cm4gdj1ocCh2KSxUPT09ZT8oVD12LHY9MCk6VD1ocChUKSxtPSRsKG0pLGZtZShtLHYsVCl9ZnVuY3Rpb24gc3llKG0sdixUKXtpZihUJiZ0eXBlb2YgVCE9ImJvb2xlYW4iJiZrYShtLHYsVCkmJih2PVQ9ZSksVD09PWUmJih0eXBlb2Ygdj09ImJvb2xlYW4iPyhUPXYsdj1lKTp0eXBlb2YgbT09ImJvb2xlYW4iJiYoVD1tLG09ZSkpLG09PT1lJiZ2PT09ZT8obT0wLHY9MSk6KG09aHAobSksdj09PWU/KHY9bSxtPTApOnY9aHAodikpLG0+dil7dmFyIE49bTttPXYsdj1OfWlmKFR8fG0lMXx8diUxKXt2YXIgVj1BZnQoKTtyZXR1cm4gcmEobStWKih2LW0rQnBlKCIxZS0iKygoVisiIikubGVuZ3RoLTEpKSksdil9cmV0dXJuIExxKG0sdil9dmFyIGx5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIHY9di50b0xvd2VyQ2FzZSgpLG0rKFQ/b2R0KHYpOnYpfSk7ZnVuY3Rpb24gb2R0KG0pe3JldHVybiBpRyhvbihtKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhZHQobSl7cmV0dXJuIG09b24obSksbSYmbS5yZXBsYWNlKHVtLEpwZSkucmVwbGFjZShQcGUsIiIpfWZ1bmN0aW9uIGN5ZShtLHYsVCl7bT1vbihtKSx2PVlzKHYpO3ZhciBOPW0ubGVuZ3RoO1Q9VD09PWU/TjpuXyhRZShUKSwwLE4pO3ZhciBWPVQ7cmV0dXJuIFQtPXYubGVuZ3RoLFQ+PTAmJm0uc2xpY2UoVCxWKT09dn1mdW5jdGlvbiB1eWUobSl7cmV0dXJuIG09b24obSksbSYmQXIudGVzdChtKT9tLnJlcGxhY2UoeW4sUXBlKTptfWZ1bmN0aW9uIGh5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZjeC50ZXN0KG0pP20ucmVwbGFjZShjbiwiXFwkJiIpOm19dmFyIGZ5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/Ii0iOiIiKSt2LnRvTG93ZXJDYXNlKCl9KSxweWU9eHgoZnVuY3Rpb24obSx2LFQpe3JldHVybiBtKyhUPyIgIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksZHllPWNwdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiBteWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7aWYoIXZ8fE4+PXYpcmV0dXJuIG07dmFyIFY9KHYtTikvMjtyZXR1cm4gcEkodEkoViksVCkrbStwSShRNihWKSxUKX1mdW5jdGlvbiBneWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7cmV0dXJuIHYmJk48dj9tK3BJKHYtTixUKTptfWZ1bmN0aW9uIF95ZShtLHYsVCl7bT1vbihtKSx2PVFlKHYpO3ZhciBOPXY/ZHgobSk6MDtyZXR1cm4gdiYmTjx2P3BJKHYtTixUKSttOm19ZnVuY3Rpb24geXllKG0sdixUKXtyZXR1cm4gVHx8dj09bnVsbD92PTA6diYmKHY9K3YpLEVkZShvbihtKS5yZXBsYWNlKHJwLCIiKSx2fHwwKX1mdW5jdGlvbiB2eWUobSx2LFQpe3JldHVybihUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodiksa3Eob24obSksdil9ZnVuY3Rpb24geHllKCl7dmFyIG09YXJndW1lbnRzLHY9b24obVswXSk7cmV0dXJuIG0ubGVuZ3RoPDM/djp2LnJlcGxhY2UobVsxXSxtWzJdKX12YXIgYnllPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHd5ZShtLHYsVCl7cmV0dXJuIFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpJiYodj1UPWUpLFQ9VD09PWU/cnQ6VD4+PjAsVD8obT1vbihtKSxtJiYodHlwZW9mIHY9PSJzdHJpbmcifHx2IT1udWxsJiYhZUcodikpJiYodj1Zcyh2KSwhdiYmcHgobSkpP3htKHR1KG0pLDAsVCk6bS5zcGxpdCh2LFQpKTpbXX12YXIgU3llPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iICI6IiIpK2lHKHYpfSk7ZnVuY3Rpb24gTXllKG0sdixUKXtyZXR1cm4gbT1vbihtKSxUPVQ9PW51bGw/MDpuXyhRZShUKSwwLG0ubGVuZ3RoKSx2PVlzKHYpLG0uc2xpY2UoVCxUK3YubGVuZ3RoKT09dn1mdW5jdGlvbiBFeWUobSx2LFQpe3ZhciBOPUcudGVtcGxhdGVTZXR0aW5ncztUJiZrYShtLHYsVCkmJih2PWUpLG09b24obSksdj1FSSh7fSx2LE4sZ3B0KTt2YXIgVj1FSSh7fSx2LmltcG9ydHMsTi5pbXBvcnRzLGdwdCksWT1wbyhWKSxKPW1xKFYsWSksaXQsZnQsRHQ9MCxPdD12LmludGVycG9sYXRlfHxtcixWdD0iX19wICs9ICciLG9lPV9xKCh2LmVzY2FwZXx8bXIpLnNvdXJjZSsifCIrT3Quc291cmNlKyJ8IisoT3Q9PT1JYT90cjptcikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8bXIpLnNvdXJjZSsifCQiLCJnIiksVGU9Ii8vIyBzb3VyY2VVUkw9IisodW4uY2FsbCh2LCJzb3VyY2VVUkwiKT8odi5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK05wZSsiXSIpK2AKYDttLnJlcGxhY2Uob2UsZnVuY3Rpb24oRGUscHIseXIsWHMsUmEsJHMpe3JldHVybiB5cnx8KHlyPVhzKSxWdCs9bS5zbGljZShEdCwkcykucmVwbGFjZShGbCx0ZGUpLHByJiYoaXQ9ITAsVnQrPWAnICsKX19lKGArcHIrYCkgKwonYCksUmEmJihmdD0hMCxWdCs9YCc7CmArUmErYDsKX19wICs9ICdgKSx5ciYmKFZ0Kz1gJyArCigoX190ID0gKGAreXIrYCkpID09IG51bGwgPyAnJyA6IF9fdCkgKwonYCksRHQ9JHMrRGUubGVuZ3RoLERlfSksVnQrPWAnOwpgO3ZhciBOZT11bi5jYWxsKHYsInZhcmlhYmxlIikmJnYudmFyaWFibGU7aWYoIU5lKVZ0PWB3aXRoIChvYmopIHsKYCtWdCtgCn0KYDtlbHNlIGlmKFZlLnRlc3QoTmUpKXRocm93IG5ldyBXZShvKTtWdD0oZnQ/VnQucmVwbGFjZShDZSwiIik6VnQpLnJlcGxhY2UoUHQsIiQxIikucmVwbGFjZShOdCwiJDE7IiksVnQ9ImZ1bmN0aW9uKCIrKE5lfHwib2JqIikrYCkgewpgKyhOZT8iIjpgb2JqIHx8IChvYmogPSB7fSk7CmApKyJ2YXIgX190LCBfX3AgPSAnJyIrKGl0PyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGZ0P2AsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luOwpmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH0KYDpgOwpgKStWdCtgcmV0dXJuIF9fcAp9YDt2YXIgZXI9bGR0KGZ1bmN0aW9uKCl7cmV0dXJuICRyKFksVGUrInJldHVybiAiK1Z0KS5hcHBseShlLEopfSk7aWYoZXIuc291cmNlPVZ0LHRHKGVyKSl0aHJvdyBlcjtyZXR1cm4gZXJ9ZnVuY3Rpb24gVHllKG0pe3JldHVybiBvbihtKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEN5ZShtKXtyZXR1cm4gb24obSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBBeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gX2Z0KG0pO2lmKCFtfHwhKHY9WXModikpKXJldHVybiBtO3ZhciBOPXR1KG0pLFY9dHUodiksWT15ZnQoTixWKSxKPXZmdChOLFYpKzE7cmV0dXJuIHhtKE4sWSxKKS5qb2luKCIiKX1mdW5jdGlvbiBQeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gbS5zbGljZSgwLGJmdChtKSsxKTtpZighbXx8ISh2PVlzKHYpKSlyZXR1cm4gbTt2YXIgTj10dShtKSxWPXZmdChOLHR1KHYpKSsxO3JldHVybiB4bShOLDAsVikuam9pbigiIil9ZnVuY3Rpb24gSXllKG0sdixUKXtpZihtPW9uKG0pLG0mJihUfHx2PT09ZSkpcmV0dXJuIG0ucmVwbGFjZShycCwiIik7aWYoIW18fCEodj1Zcyh2KSkpcmV0dXJuIG07dmFyIE49dHUobSksVj15ZnQoTix0dSh2KSk7cmV0dXJuIHhtKE4sVikuam9pbigiIil9ZnVuY3Rpb24gTHllKG0sdil7dmFyIFQ9TyxOPUQ7aWYoZWkodikpe3ZhciBWPSJzZXBhcmF0b3IiaW4gdj92LnNlcGFyYXRvcjpWO1Q9Imxlbmd0aCJpbiB2P1FlKHYubGVuZ3RoKTpULE49Im9taXNzaW9uImluIHY/WXModi5vbWlzc2lvbik6Tn1tPW9uKG0pO3ZhciBZPW0ubGVuZ3RoO2lmKHB4KG0pKXt2YXIgSj10dShtKTtZPUoubGVuZ3RofWlmKFQ+PVkpcmV0dXJuIG07dmFyIGl0PVQtZHgoTik7aWYoaXQ8MSlyZXR1cm4gTjt2YXIgZnQ9Sj94bShKLDAsaXQpLmpvaW4oIiIpOm0uc2xpY2UoMCxpdCk7aWYoVj09PWUpcmV0dXJuIGZ0K047aWYoSiYmKGl0Kz1mdC5sZW5ndGgtaXQpLGVHKFYpKXtpZihtLnNsaWNlKGl0KS5zZWFyY2goVikpe3ZhciBEdCxPdD1mdDtmb3IoVi5nbG9iYWx8fChWPV9xKFYuc291cmNlLG9uKEtlLmV4ZWMoVikpKyJnIikpLFYubGFzdEluZGV4PTA7RHQ9Vi5leGVjKE90KTspdmFyIFZ0PUR0LmluZGV4O2Z0PWZ0LnNsaWNlKDAsVnQ9PT1lP2l0OlZ0KX19ZWxzZSBpZihtLmluZGV4T2YoWXMoViksaXQpIT1pdCl7dmFyIG9lPWZ0Lmxhc3RJbmRleE9mKFYpO29lPi0xJiYoZnQ9ZnQuc2xpY2UoMCxvZSkpfXJldHVybiBmdCtOfWZ1bmN0aW9uIGt5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZXaS50ZXN0KG0pP20ucmVwbGFjZSh6ZSxzZGUpOm19dmFyIFJ5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/IiAiOiIiKSt2LnRvVXBwZXJDYXNlKCl9KSxpRz1jcHQoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gc2R0KG0sdixUKXtyZXR1cm4gbT1vbihtKSx2PVQ/ZTp2LHY9PT1lP3JkZShtKT91ZGUobSk6anBlKG0pOm0ubWF0Y2godil8fFtdfXZhciBsZHQ9bnIoZnVuY3Rpb24obSx2KXt0cnl7cmV0dXJuIEdzKG0sZSx2KX1jYXRjaChUKXtyZXR1cm4gdEcoVCk/VDpuZXcgV2UoVCl9fSksTnllPWxwKGZ1bmN0aW9uKG0sdil7cmV0dXJuIHFsKHYsZnVuY3Rpb24oVCl7VD1faChUKSxhcChtLFQsSnEobVtUXSxtKSl9KSxtfSk7ZnVuY3Rpb24gRHllKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aCxUPWtlKCk7cmV0dXJuIG09dj8kbihtLGZ1bmN0aW9uKE4pe2lmKHR5cGVvZiBOWzFdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm5bVChOWzBdKSxOWzFdXX0pOltdLG5yKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0tMTsrK1Y8djspe3ZhciBZPW1bVl07aWYoR3MoWVswXSx0aGlzLE4pKXJldHVybiBHcyhZWzFdLHRoaXMsTil9fSl9ZnVuY3Rpb24gT3llKG0pe3JldHVybiBzbWUoWWwobSxjKSl9ZnVuY3Rpb24gb0cobSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG19fWZ1bmN0aW9uIHp5ZShtLHYpe3JldHVybiBtPT1udWxsfHxtIT09bT92Om19dmFyIEZ5ZT1ocHQoKSxCeWU9aHB0KCEwKTtmdW5jdGlvbiBncyhtKXtyZXR1cm4gbX1mdW5jdGlvbiBhRyhtKXtyZXR1cm4gVmZ0KHR5cGVvZiBtPT0iZnVuY3Rpb24iP206WWwobSxjKSl9ZnVuY3Rpb24gSHllKG0pe3JldHVybiBxZnQoWWwobSxjKSl9ZnVuY3Rpb24gVnllKG0sdil7cmV0dXJuIEdmdChtLFlsKHYsYykpfXZhciBVeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKFQsbSx2KX19KSxxeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKG0sVCx2KX19KTtmdW5jdGlvbiBzRyhtLHYsVCl7dmFyIE49cG8odiksVj1hSSh2LE4pO1Q9PW51bGwmJiEoZWkodikmJihWLmxlbmd0aHx8IU4ubGVuZ3RoKSkmJihUPXYsdj1tLG09dGhpcyxWPWFJKHYscG8odikpKTt2YXIgWT0hKGVpKFQpJiYiY2hhaW4iaW4gVCl8fCEhVC5jaGFpbixKPXVwKG0pO3JldHVybiBxbChWLGZ1bmN0aW9uKGl0KXt2YXIgZnQ9dltpdF07bVtpdF09ZnQsSiYmKG0ucHJvdG90eXBlW2l0XT1mdW5jdGlvbigpe3ZhciBEdD10aGlzLl9fY2hhaW5fXztpZihZfHxEdCl7dmFyIE90PW0odGhpcy5fX3dyYXBwZWRfXyksVnQ9T3QuX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIFZ0LnB1c2goe2Z1bmM6ZnQsYXJnczphcmd1bWVudHMsdGhpc0FyZzptfSksT3QuX19jaGFpbl9fPUR0LE90fXJldHVybiBmdC5hcHBseShtLHBtKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxtfWZ1bmN0aW9uIEd5ZSgpe3JldHVybiBmby5fPT09dGhpcyYmKGZvLl89Z2RlKSx0aGlzfWZ1bmN0aW9uIGxHKCl7fWZ1bmN0aW9uIFd5ZShtKXtyZXR1cm4gbT1RZShtKSxucihmdW5jdGlvbih2KXtyZXR1cm4gV2Z0KHYsbSl9KX12YXIgWXllPUJxKCRuKSxqeWU9QnEoZmZ0KSxYeWU9QnEodXEpO2Z1bmN0aW9uIGNkdChtKXtyZXR1cm4gWXEobSk/aHEoX2gobSkpOk1tZShtKX1mdW5jdGlvbiAkeWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBtPT1udWxsP2U6aV8obSx2KX19dmFyIEt5ZT1wcHQoKSxaeWU9cHB0KCEwKTtmdW5jdGlvbiBjRygpe3JldHVybltdfWZ1bmN0aW9uIHVHKCl7cmV0dXJuITF9ZnVuY3Rpb24gSnllKCl7cmV0dXJue319ZnVuY3Rpb24gUXllKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gdHZlKCl7cmV0dXJuITB9ZnVuY3Rpb24gZXZlKG0sdil7aWYobT1RZShtKSxtPDF8fG0+VSlyZXR1cm5bXTt2YXIgVD1ydCxOPXJhKG0scnQpO3Y9a2UodiksbS09cnQ7Zm9yKHZhciBWPWRxKE4sdik7KytUPG07KXYoVCk7cmV0dXJuIFZ9ZnVuY3Rpb24gcnZlKG0pe3JldHVybiAkZShtKT8kbihtLF9oKTpqcyhtKT9bbV06cHMoUHB0KG9uKG0pKSl9ZnVuY3Rpb24gbnZlKG0pe3ZhciB2PSsrZGRlO3JldHVybiBvbihtKSt2fXZhciBpdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSt2fSwwKSxvdmU9SHEoImNlaWwiKSxhdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbS92fSwxKSxzdmU9SHEoImZsb29yIik7ZnVuY3Rpb24gbHZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGdzLEVxKTplfWZ1bmN0aW9uIGN2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGtlKHYsMiksRXEpOmV9ZnVuY3Rpb24gdXZlKG0pe3JldHVybiBtZnQobSxncyl9ZnVuY3Rpb24gaHZlKG0sdil7cmV0dXJuIG1mdChtLGtlKHYsMikpfWZ1bmN0aW9uIGZ2ZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxncyxQcSk6ZX1mdW5jdGlvbiBwdmUobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxrZSh2LDIpLFBxKTplfXZhciBkdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSp2fSwxKSxtdmU9SHEoInJvdW5kIiksZ3ZlPWZJKGZ1bmN0aW9uKG0sdil7cmV0dXJuIG0tdn0sMCk7ZnVuY3Rpb24gX3ZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGdzKTowfWZ1bmN0aW9uIHl2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGtlKHYsMikpOjB9cmV0dXJuIEcuYWZ0ZXI9SDBlLEcuYXJ5PUhwdCxHLmFzc2lnbj1DX2UsRy5hc3NpZ25Jbj10ZHQsRy5hc3NpZ25JbldpdGg9RUksRy5hc3NpZ25XaXRoPUFfZSxHLmF0PVBfZSxHLmJlZm9yZT1WcHQsRy5iaW5kPUpxLEcuYmluZEFsbD1OeWUsRy5iaW5kS2V5PVVwdCxHLmNhc3RBcnJheT1KMGUsRy5jaGFpbj16cHQsRy5jaHVuaz1zZ2UsRy5jb21wYWN0PWxnZSxHLmNvbmNhdD1jZ2UsRy5jb25kPUR5ZSxHLmNvbmZvcm1zPU95ZSxHLmNvbnN0YW50PW9HLEcuY291bnRCeT1fMGUsRy5jcmVhdGU9SV9lLEcuY3Vycnk9cXB0LEcuY3VycnlSaWdodD1HcHQsRy5kZWJvdW5jZT1XcHQsRy5kZWZhdWx0cz1MX2UsRy5kZWZhdWx0c0RlZXA9a19lLEcuZGVmZXI9VjBlLEcuZGVsYXk9VTBlLEcuZGlmZmVyZW5jZT11Z2UsRy5kaWZmZXJlbmNlQnk9aGdlLEcuZGlmZmVyZW5jZVdpdGg9ZmdlLEcuZHJvcD1wZ2UsRy5kcm9wUmlnaHQ9ZGdlLEcuZHJvcFJpZ2h0V2hpbGU9bWdlLEcuZHJvcFdoaWxlPWdnZSxHLmZpbGw9X2dlLEcuZmlsdGVyPXYwZSxHLmZsYXRNYXA9dzBlLEcuZmxhdE1hcERlZXA9UzBlLEcuZmxhdE1hcERlcHRoPU0wZSxHLmZsYXR0ZW49UnB0LEcuZmxhdHRlbkRlZXA9eWdlLEcuZmxhdHRlbkRlcHRoPXZnZSxHLmZsaXA9cTBlLEcuZmxvdz1GeWUsRy5mbG93UmlnaHQ9QnllLEcuZnJvbVBhaXJzPXhnZSxHLmZ1bmN0aW9ucz1CX2UsRy5mdW5jdGlvbnNJbj1IX2UsRy5ncm91cEJ5PUUwZSxHLmluaXRpYWw9d2dlLEcuaW50ZXJzZWN0aW9uPVNnZSxHLmludGVyc2VjdGlvbkJ5PU1nZSxHLmludGVyc2VjdGlvbldpdGg9RWdlLEcuaW52ZXJ0PVVfZSxHLmludmVydEJ5PXFfZSxHLmludm9rZU1hcD1DMGUsRy5pdGVyYXRlZT1hRyxHLmtleUJ5PUEwZSxHLmtleXM9cG8sRy5rZXlzSW49bXMsRy5tYXA9dkksRy5tYXBLZXlzPVdfZSxHLm1hcFZhbHVlcz1ZX2UsRy5tYXRjaGVzPUh5ZSxHLm1hdGNoZXNQcm9wZXJ0eT1WeWUsRy5tZW1vaXplPWJJLEcubWVyZ2U9al9lLEcubWVyZ2VXaXRoPWVkdCxHLm1ldGhvZD1VeWUsRy5tZXRob2RPZj1xeWUsRy5taXhpbj1zRyxHLm5lZ2F0ZT13SSxHLm50aEFyZz1XeWUsRy5vbWl0PVhfZSxHLm9taXRCeT0kX2UsRy5vbmNlPUcwZSxHLm9yZGVyQnk9UDBlLEcub3Zlcj1ZeWUsRy5vdmVyQXJncz1XMGUsRy5vdmVyRXZlcnk9anllLEcub3ZlclNvbWU9WHllLEcucGFydGlhbD1RcSxHLnBhcnRpYWxSaWdodD1ZcHQsRy5wYXJ0aXRpb249STBlLEcucGljaz1LX2UsRy5waWNrQnk9cmR0LEcucHJvcGVydHk9Y2R0LEcucHJvcGVydHlPZj0keWUsRy5wdWxsPVBnZSxHLnB1bGxBbGw9RHB0LEcucHVsbEFsbEJ5PUlnZSxHLnB1bGxBbGxXaXRoPUxnZSxHLnB1bGxBdD1rZ2UsRy5yYW5nZT1LeWUsRy5yYW5nZVJpZ2h0PVp5ZSxHLnJlYXJnPVkwZSxHLnJlamVjdD1SMGUsRy5yZW1vdmU9UmdlLEcucmVzdD1qMGUsRy5yZXZlcnNlPUtxLEcuc2FtcGxlU2l6ZT1EMGUsRy5zZXQ9Sl9lLEcuc2V0V2l0aD1RX2UsRy5zaHVmZmxlPU8wZSxHLnNsaWNlPU5nZSxHLnNvcnRCeT1CMGUsRy5zb3J0ZWRVbmlxPVZnZSxHLnNvcnRlZFVuaXFCeT1VZ2UsRy5zcGxpdD13eWUsRy5zcHJlYWQ9WDBlLEcudGFpbD1xZ2UsRy50YWtlPUdnZSxHLnRha2VSaWdodD1XZ2UsRy50YWtlUmlnaHRXaGlsZT1ZZ2UsRy50YWtlV2hpbGU9amdlLEcudGFwPWwwZSxHLnRocm90dGxlPSQwZSxHLnRocnU9eUksRy50b0FycmF5PVpwdCxHLnRvUGFpcnM9bmR0LEcudG9QYWlyc0luPWlkdCxHLnRvUGF0aD1ydmUsRy50b1BsYWluT2JqZWN0PVFwdCxHLnRyYW5zZm9ybT10eWUsRy51bmFyeT1LMGUsRy51bmlvbj1YZ2UsRy51bmlvbkJ5PSRnZSxHLnVuaW9uV2l0aD1LZ2UsRy51bmlxPVpnZSxHLnVuaXFCeT1KZ2UsRy51bmlxV2l0aD1RZ2UsRy51bnNldD1leWUsRy51bnppcD1acSxHLnVuemlwV2l0aD1PcHQsRy51cGRhdGU9cnllLEcudXBkYXRlV2l0aD1ueWUsRy52YWx1ZXM9U3gsRy52YWx1ZXNJbj1peWUsRy53aXRob3V0PXQwZSxHLndvcmRzPXNkdCxHLndyYXA9WjBlLEcueG9yPWUwZSxHLnhvckJ5PXIwZSxHLnhvcldpdGg9bjBlLEcuemlwPWkwZSxHLnppcE9iamVjdD1vMGUsRy56aXBPYmplY3REZWVwPWEwZSxHLnppcFdpdGg9czBlLEcuZW50cmllcz1uZHQsRy5lbnRyaWVzSW49aWR0LEcuZXh0ZW5kPXRkdCxHLmV4dGVuZFdpdGg9RUksc0coRyxHKSxHLmFkZD1pdmUsRy5hdHRlbXB0PWxkdCxHLmNhbWVsQ2FzZT1seWUsRy5jYXBpdGFsaXplPW9kdCxHLmNlaWw9b3ZlLEcuY2xhbXA9b3llLEcuY2xvbmU9UTBlLEcuY2xvbmVEZWVwPWVfZSxHLmNsb25lRGVlcFdpdGg9cl9lLEcuY2xvbmVXaXRoPXRfZSxHLmNvbmZvcm1zVG89bl9lLEcuZGVidXJyPWFkdCxHLmRlZmF1bHRUbz16eWUsRy5kaXZpZGU9YXZlLEcuZW5kc1dpdGg9Y3llLEcuZXE9cnUsRy5lc2NhcGU9dXllLEcuZXNjYXBlUmVnRXhwPWh5ZSxHLmV2ZXJ5PXkwZSxHLmZpbmQ9eDBlLEcuZmluZEluZGV4PUxwdCxHLmZpbmRLZXk9Ul9lLEcuZmluZExhc3Q9YjBlLEcuZmluZExhc3RJbmRleD1rcHQsRy5maW5kTGFzdEtleT1OX2UsRy5mbG9vcj1zdmUsRy5mb3JFYWNoPUZwdCxHLmZvckVhY2hSaWdodD1CcHQsRy5mb3JJbj1EX2UsRy5mb3JJblJpZ2h0PU9fZSxHLmZvck93bj16X2UsRy5mb3JPd25SaWdodD1GX2UsRy5nZXQ9ckcsRy5ndD1pX2UsRy5ndGU9b19lLEcuaGFzPVZfZSxHLmhhc0luPW5HLEcuaGVhZD1OcHQsRy5pZGVudGl0eT1ncyxHLmluY2x1ZGVzPVQwZSxHLmluZGV4T2Y9YmdlLEcuaW5SYW5nZT1heWUsRy5pbnZva2U9R19lLEcuaXNBcmd1bWVudHM9c18sRy5pc0FycmF5PSRlLEcuaXNBcnJheUJ1ZmZlcj1hX2UsRy5pc0FycmF5TGlrZT1kcyxHLmlzQXJyYXlMaWtlT2JqZWN0PXhpLEcuaXNCb29sZWFuPXNfZSxHLmlzQnVmZmVyPWJtLEcuaXNEYXRlPWxfZSxHLmlzRWxlbWVudD1jX2UsRy5pc0VtcHR5PXVfZSxHLmlzRXF1YWw9aF9lLEcuaXNFcXVhbFdpdGg9Zl9lLEcuaXNFcnJvcj10RyxHLmlzRmluaXRlPXBfZSxHLmlzRnVuY3Rpb249dXAsRy5pc0ludGVnZXI9anB0LEcuaXNMZW5ndGg9U0ksRy5pc01hcD1YcHQsRy5pc01hdGNoPWRfZSxHLmlzTWF0Y2hXaXRoPW1fZSxHLmlzTmFOPWdfZSxHLmlzTmF0aXZlPV9fZSxHLmlzTmlsPXZfZSxHLmlzTnVsbD15X2UsRy5pc051bWJlcj0kcHQsRy5pc09iamVjdD1laSxHLmlzT2JqZWN0TGlrZT1zaSxHLmlzUGxhaW5PYmplY3Q9Rk0sRy5pc1JlZ0V4cD1lRyxHLmlzU2FmZUludGVnZXI9eF9lLEcuaXNTZXQ9S3B0LEcuaXNTdHJpbmc9TUksRy5pc1N5bWJvbD1qcyxHLmlzVHlwZWRBcnJheT13eCxHLmlzVW5kZWZpbmVkPWJfZSxHLmlzV2Vha01hcD13X2UsRy5pc1dlYWtTZXQ9U19lLEcuam9pbj1UZ2UsRy5rZWJhYkNhc2U9ZnllLEcubGFzdD1YbCxHLmxhc3RJbmRleE9mPUNnZSxHLmxvd2VyQ2FzZT1weWUsRy5sb3dlckZpcnN0PWR5ZSxHLmx0PU1fZSxHLmx0ZT1FX2UsRy5tYXg9bHZlLEcubWF4Qnk9Y3ZlLEcubWVhbj11dmUsRy5tZWFuQnk9aHZlLEcubWluPWZ2ZSxHLm1pbkJ5PXB2ZSxHLnN0dWJBcnJheT1jRyxHLnN0dWJGYWxzZT11RyxHLnN0dWJPYmplY3Q9SnllLEcuc3R1YlN0cmluZz1ReWUsRy5zdHViVHJ1ZT10dmUsRy5tdWx0aXBseT1kdmUsRy5udGg9QWdlLEcubm9Db25mbGljdD1HeWUsRy5ub29wPWxHLEcubm93PXhJLEcucGFkPW15ZSxHLnBhZEVuZD1neWUsRy5wYWRTdGFydD1feWUsRy5wYXJzZUludD15eWUsRy5yYW5kb209c3llLEcucmVkdWNlPUwwZSxHLnJlZHVjZVJpZ2h0PWswZSxHLnJlcGVhdD12eWUsRy5yZXBsYWNlPXh5ZSxHLnJlc3VsdD1aX2UsRy5yb3VuZD1tdmUsRy5ydW5JbkNvbnRleHQ9dXQsRy5zYW1wbGU9TjBlLEcuc2l6ZT16MGUsRy5zbmFrZUNhc2U9YnllLEcuc29tZT1GMGUsRy5zb3J0ZWRJbmRleD1EZ2UsRy5zb3J0ZWRJbmRleEJ5PU9nZSxHLnNvcnRlZEluZGV4T2Y9emdlLEcuc29ydGVkTGFzdEluZGV4PUZnZSxHLnNvcnRlZExhc3RJbmRleEJ5PUJnZSxHLnNvcnRlZExhc3RJbmRleE9mPUhnZSxHLnN0YXJ0Q2FzZT1TeWUsRy5zdGFydHNXaXRoPU15ZSxHLnN1YnRyYWN0PWd2ZSxHLnN1bT1fdmUsRy5zdW1CeT15dmUsRy50ZW1wbGF0ZT1FeWUsRy50aW1lcz1ldmUsRy50b0Zpbml0ZT1ocCxHLnRvSW50ZWdlcj1RZSxHLnRvTGVuZ3RoPUpwdCxHLnRvTG93ZXI9VHllLEcudG9OdW1iZXI9JGwsRy50b1NhZmVJbnRlZ2VyPVRfZSxHLnRvU3RyaW5nPW9uLEcudG9VcHBlcj1DeWUsRy50cmltPUF5ZSxHLnRyaW1FbmQ9UHllLEcudHJpbVN0YXJ0PUl5ZSxHLnRydW5jYXRlPUx5ZSxHLnVuZXNjYXBlPWt5ZSxHLnVuaXF1ZUlkPW52ZSxHLnVwcGVyQ2FzZT1SeWUsRy51cHBlckZpcnN0PWlHLEcuZWFjaD1GcHQsRy5lYWNoUmlnaHQ9QnB0LEcuZmlyc3Q9TnB0LHNHKEcsZnVuY3Rpb24oKXt2YXIgbT17fTtyZXR1cm4gbWgoRyxmdW5jdGlvbih2LFQpe3VuLmNhbGwoRy5wcm90b3R5cGUsVCl8fChtW1RdPXYpfSksbX0oKSx7Y2hhaW46ITF9KSxHLlZFUlNJT049dCxxbChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG0pe0dbbV0ucGxhY2Vob2xkZXI9R30pLHFsKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihtLHYpe2dyLnByb3RvdHlwZVttXT1mdW5jdGlvbihUKXtUPVQ9PT1lPzE6WGkoUWUoVCksMCk7dmFyIE49dGhpcy5fX2ZpbHRlcmVkX18mJiF2P25ldyBncih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIE4uX19maWx0ZXJlZF9fP04uX190YWtlQ291bnRfXz1yYShULE4uX190YWtlQ291bnRfXyk6Ti5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpyYShULHJ0KSx0eXBlOm0rKE4uX19kaXJfXzwwPyJSaWdodCI6IiIpfSksTn0sZ3IucHJvdG90eXBlW20rIlJpZ2h0Il09ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21dKFQpLnJldmVyc2UoKX19KSxxbChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG0sdil7dmFyIFQ9disxLE49VD09THx8VD09Rjtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oVil7dmFyIFk9dGhpcy5jbG9uZSgpO3JldHVybiBZLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6a2UoViwzKSx0eXBlOlR9KSxZLl9fZmlsdGVyZWRfXz1ZLl9fZmlsdGVyZWRfX3x8TixZfX0pLHFsKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJ0YWtlIisodj8iUmlnaHQiOiIiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tUXSgxKS52YWx1ZSgpWzBdfX0pLHFsKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJkcm9wIisodj8iIjoiUmlnaHQiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IGdyKHRoaXMpOnRoaXNbVF0oMSl9fSksZ3IucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoZ3MpfSxnci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIobSkuaGVhZCgpfSxnci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQobSl9LGdyLnByb3RvdHlwZS5pbnZva2VNYXA9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bmV3IGdyKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBrTShULG0sdil9KX0pLGdyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZmlsdGVyKHdJKGtlKG0pKSl9LGdyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihtLHYpe209UWUobSk7dmFyIFQ9dGhpcztyZXR1cm4gVC5fX2ZpbHRlcmVkX18mJihtPjB8fHY8MCk/bmV3IGdyKFQpOihtPDA/VD1ULnRha2VSaWdodCgtbSk6bSYmKFQ9VC5kcm9wKG0pKSx2IT09ZSYmKHY9UWUodiksVD12PDA/VC5kcm9wUmlnaHQoLXYpOlQudGFrZSh2LW0pKSxUKX0sZ3IucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobSkucmV2ZXJzZSgpfSxnci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocnQpfSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh2KSxOPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodiksVj1HW04/InRha2UiKyh2PT0ibGFzdCI/IlJpZ2h0IjoiIik6dl0sWT1OfHwvXmZpbmQvLnRlc3Qodik7IVZ8fChHLnByb3RvdHlwZVt2XT1mdW5jdGlvbigpe3ZhciBKPXRoaXMuX193cmFwcGVkX18saXQ9Tj9bMV06YXJndW1lbnRzLGZ0PUogaW5zdGFuY2VvZiBncixEdD1pdFswXSxPdD1mdHx8JGUoSiksVnQ9ZnVuY3Rpb24ocHIpe3ZhciB5cj1WLmFwcGx5KEcscG0oW3ByXSxpdCkpO3JldHVybiBOJiZvZT95clswXTp5cn07T3QmJlQmJnR5cGVvZiBEdD09ImZ1bmN0aW9uIiYmRHQubGVuZ3RoIT0xJiYoZnQ9T3Q9ITEpO3ZhciBvZT10aGlzLl9fY2hhaW5fXyxUZT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLE5lPVkmJiFvZSxlcj1mdCYmIVRlO2lmKCFZJiZPdCl7Sj1lcj9KOm5ldyBncih0aGlzKTt2YXIgRGU9bS5hcHBseShKLGl0KTtyZXR1cm4gRGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzp5SSxhcmdzOltWdF0sdGhpc0FyZzplfSksbmV3IFdsKERlLG9lKX1yZXR1cm4gTmUmJmVyP20uYXBwbHkodGhpcyxpdCk6KERlPXRoaXMudGhydShWdCksTmU/Tj9EZS52YWx1ZSgpWzBdOkRlLnZhbHVlKCk6RGUpfSl9KSxxbChbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24obSl7dmFyIHY9RzZbbV0sVD0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobSk/InRhcCI6InRocnUiLE49L14oPzpwb3B8c2hpZnQpJC8udGVzdChtKTtHLnByb3RvdHlwZVttXT1mdW5jdGlvbigpe3ZhciBWPWFyZ3VtZW50cztpZihOJiYhdGhpcy5fX2NoYWluX18pe3ZhciBZPXRoaXMudmFsdWUoKTtyZXR1cm4gdi5hcHBseSgkZShZKT9ZOltdLFYpfXJldHVybiB0aGlzW1RdKGZ1bmN0aW9uKEope3JldHVybiB2LmFwcGx5KCRlKEopP0o6W10sVil9KX19KSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD1HW3ZdO2lmKFQpe3ZhciBOPVQubmFtZSsiIjt1bi5jYWxsKF94LE4pfHwoX3hbTl09W10pLF94W05dLnB1c2goe25hbWU6dixmdW5jOlR9KX19KSxfeFtoSShlLGcpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzplfV0sZ3IucHJvdG90eXBlLmNsb25lPWtkZSxnci5wcm90b3R5cGUucmV2ZXJzZT1SZGUsZ3IucHJvdG90eXBlLnZhbHVlPU5kZSxHLnByb3RvdHlwZS5hdD1jMGUsRy5wcm90b3R5cGUuY2hhaW49dTBlLEcucHJvdG90eXBlLmNvbW1pdD1oMGUsRy5wcm90b3R5cGUubmV4dD1mMGUsRy5wcm90b3R5cGUucGxhbnQ9ZDBlLEcucHJvdG90eXBlLnJldmVyc2U9bTBlLEcucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS52YWx1ZU9mPUcucHJvdG90eXBlLnZhbHVlPWcwZSxHLnByb3RvdHlwZS5maXJzdD1HLnByb3RvdHlwZS5oZWFkLEVNJiYoRy5wcm90b3R5cGVbRU1dPXAwZSksR30sbW09aGRlKCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPyhmby5fPW1tLGRlZmluZShmdW5jdGlvbigpe3JldHVybiBtbX0pKTpRMD8oKFEwLmV4cG9ydHM9bW0pLl89bW0sYXEuXz1tbSk6Zm8uXz1tbX0pLmNhbGwoUngpfSk7ZnVuY3Rpb24gX190KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEo5KHIpfWZ1bmN0aW9uIEo5KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGcyZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIF8yZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGdfdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09bTJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgbTJlLHZzLHlfdD1NKCgpPT57bTJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0o5LnByb3RvdHlwZT1fX3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKOSxvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWcyZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPV8yZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Z190KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Z190KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBKOShlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dnM9X190fSk7dmFyIGttPU0oKCk9Pnt5X3QoKX0pO2Z1bmN0aW9uIF9ZKGUpe3JldHVybitlfXZhciBDdnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlZKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gdlkoZSl7cmV0dXJuIGUqKDItZSl9ZnVuY3Rpb24gSUwoZSl7cmV0dXJuKChlKj0yKTw9MT9lKmU6LS1lKigyLWUpKzEpLzJ9dmFyIEF2dD1NKCgpPT57fSk7ZnVuY3Rpb24geFkoZSl7cmV0dXJuIGUqZSplfWZ1bmN0aW9uIGJZKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgUHZ0PU0oKCk9Pnt9KTt2YXIgd1ksU1ksTVksTEwsSXZ0PU0oKCk9Pnt3WT0zLFNZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0od1kpLE1ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiAxLU1hdGgucG93KDEtbix0KX1yZXR1cm4gci5leHBvbmVudD1lLHJ9KHdZKSxMTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfSh3WSl9KTtmdW5jdGlvbiBFWShlKXtyZXR1cm4rZT09MT8xOjEtTWF0aC5jb3MoZSprdnQpfWZ1bmN0aW9uIFRZKGUpe3JldHVybiBNYXRoLnNpbihlKmt2dCl9ZnVuY3Rpb24ga0woZSl7cmV0dXJuKDEtTWF0aC5jb3MoTHZ0KmUpKS8yfXZhciBMdnQsa3Z0LFJ2dD1NKCgpPT57THZ0PU1hdGguUEksa3Z0PUx2dC8yfSk7ZnVuY3Rpb24gRGgoZSl7cmV0dXJuKE1hdGgucG93KDIsLTEwKmUpLS4wMDA5NzY1NjI1KSoxLjAwMDk3NzUxNzEwNjU0OTR9dmFyIENZPU0oKCk9Pnt9KTtmdW5jdGlvbiBBWShlKXtyZXR1cm4gRGgoMS0rZSl9ZnVuY3Rpb24gUFkoZSl7cmV0dXJuIDEtRGgoZSl9ZnVuY3Rpb24gUkwoZSl7cmV0dXJuKChlKj0yKTw9MT9EaCgxLWUpOjItRGgoZS0xKSkvMn12YXIgTnZ0PU0oKCk9PntDWSgpfSk7ZnVuY3Rpb24gSVkoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBMWShlKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZSplKX1mdW5jdGlvbiBOTChlKXtyZXR1cm4oKGUqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtZSplKTpNYXRoLnNxcnQoMS0oZS09MikqZSkrMSkvMn12YXIgRHZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSWShlKXtyZXR1cm4gMS1QXygxLWUpfWZ1bmN0aW9uIFBfKGUpe3JldHVybihlPStlKTxrWT9ETCplKmU6ZTx1U2U/REwqKGUtPWNTZSkqZStoU2U6ZTxwU2U/REwqKGUtPWZTZSkqZStkU2U6REwqKGUtPW1TZSkqZStnU2V9ZnVuY3Rpb24gTlkoZSl7cmV0dXJuKChlKj0yKTw9MT8xLVBfKDEtZSk6UF8oZS0xKSsxKS8yfXZhciBrWSxjU2UsdVNlLGhTZSxmU2UscFNlLGRTZSxtU2UsZ1NlLERMLE92dD1NKCgpPT57a1k9LjM2MzYzNjM2MzYzNjM2MzY1LGNTZT02LzExLHVTZT04LzExLGhTZT0zLzQsZlNlPTkvMTEscFNlPTEwLzExLGRTZT0xNS8xNixtU2U9MjEvMjIsZ1NlPTYzLzY0LERMPTEva1kva1l9KTt2YXIgRFksT1kselksT0wsenZ0PU0oKCk9PntEWT0xLjcwMTU4LE9ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybihuPStuKSpuKih0KihuLTEpK24pfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSx6WT1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4tLW4qbiooKG4rMSkqdCtuKSsxfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSxPTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPDE/bipuKigodCsxKSpuLXQpOihuLT0yKSpuKigodCsxKSpuK3QpKzIpLzJ9cmV0dXJuIHIub3ZlcnNob290PWUscn0oRFkpfSk7dmFyIFNiLEZZLEJZLEhZLHpMLFZZLEZ2dD1NKCgpPT57Q1koKTtTYj0yKk1hdGguUEksRlk9MSxCWT0uMyxIWT1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gdCpEaCgtIC0tbykqTWF0aC5zaW4oKG4tbykvcil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8scipTYil9LGkucGVyaW9kPWZ1bmN0aW9uKG8pe3JldHVybiBlKHQsbyl9LGl9KEZZLEJZKSx6TD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gMS10KkRoKG89K28pKk1hdGguc2luKChvK24pL3IpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihvKXtyZXR1cm4gZShvLHIqU2IpfSxpLnBlcmlvZD1mdW5jdGlvbihvKXtyZXR1cm4gZSh0LG8pfSxpfShGWSxCWSksVlk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooci89U2IpO2Z1bmN0aW9uIGkobyl7cmV0dXJuKChvPW8qMi0xKTwwP3QqRGgoLW8pKk1hdGguc2luKChuLW8pL3IpOjItdCpEaChvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKlNiKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlksQlkpfSk7dmFyIEJ2dD17fTtLcyhCdnQse2Vhc2VCYWNrOigpPT5PTCxlYXNlQmFja0luOigpPT5PWSxlYXNlQmFja0luT3V0OigpPT5PTCxlYXNlQmFja091dDooKT0+elksZWFzZUJvdW5jZTooKT0+UF8sZWFzZUJvdW5jZUluOigpPT5SWSxlYXNlQm91bmNlSW5PdXQ6KCk9Pk5ZLGVhc2VCb3VuY2VPdXQ6KCk9PlBfLGVhc2VDaXJjbGU6KCk9Pk5MLGVhc2VDaXJjbGVJbjooKT0+SVksZWFzZUNpcmNsZUluT3V0OigpPT5OTCxlYXNlQ2lyY2xlT3V0OigpPT5MWSxlYXNlQ3ViaWM6KCk9PnhzLGVhc2VDdWJpY0luOigpPT54WSxlYXNlQ3ViaWNJbk91dDooKT0+eHMsZWFzZUN1YmljT3V0OigpPT5iWSxlYXNlRWxhc3RpYzooKT0+ekwsZWFzZUVsYXN0aWNJbjooKT0+SFksZWFzZUVsYXN0aWNJbk91dDooKT0+VlksZWFzZUVsYXN0aWNPdXQ6KCk9PnpMLGVhc2VFeHA6KCk9PlJMLGVhc2VFeHBJbjooKT0+QVksZWFzZUV4cEluT3V0OigpPT5STCxlYXNlRXhwT3V0OigpPT5QWSxlYXNlTGluZWFyOigpPT5fWSxlYXNlUG9seTooKT0+TEwsZWFzZVBvbHlJbjooKT0+U1ksZWFzZVBvbHlJbk91dDooKT0+TEwsZWFzZVBvbHlPdXQ6KCk9Pk1ZLGVhc2VRdWFkOigpPT5JTCxlYXNlUXVhZEluOigpPT55WSxlYXNlUXVhZEluT3V0OigpPT5JTCxlYXNlUXVhZE91dDooKT0+dlksZWFzZVNpbjooKT0+a0wsZWFzZVNpbkluOigpPT5FWSxlYXNlU2luSW5PdXQ6KCk9PmtMLGVhc2VTaW5PdXQ6KCk9PlRZfSk7dmFyIElfPU0oKCk9PntDdnQoKTtBdnQoKTtQdnQoKTtJdnQoKTtSdnQoKTtOdnQoKTtEdnQoKTtPdnQoKTt6dnQoKTtGdnQoKX0pO2Z1bmN0aW9uIFlMKCl7fWZ1bmN0aW9uIFF2dChlLHQpe3ZhciByPW5ldyBZTDtpZihlIGluc3RhbmNlb2YgWUwpZS5lYWNoKGZ1bmN0aW9uKHMsbCl7ci5zZXQobCxzKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG49LTEsaT1lLmxlbmd0aCxvO2lmKHQ9PW51bGwpZm9yKDsrK248aTspci5zZXQobixlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuc2V0KHQobz1lW25dLG4sZSksbyl9ZWxzZSBpZihlKWZvcih2YXIgYSBpbiBlKXIuc2V0KGEsZVthXSk7cmV0dXJuIHJ9dmFyIGVsLEppLGpMPU0oKCk9PntlbD0iJCI7WUwucHJvdG90eXBlPVF2dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllMLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZWwrZSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZWwrZV19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzW2VsK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWVsK2U7cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWVsJiZkZWxldGUgdGhpc1tlXX0sa2V5czpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUucHVzaCh0aGlzW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIGV9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1lbClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUodGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07Smk9UXZ0fSk7ZnVuY3Rpb24gcjF0KCl7dmFyIGU9W10sdD1bXSxyLG4saTtmdW5jdGlvbiBvKHMsbCxjLHUpe2lmKGw+PWUubGVuZ3RoKXJldHVybiByIT1udWxsJiZzLnNvcnQociksbiE9bnVsbD9uKHMpOnM7Zm9yKHZhciBoPS0xLGY9cy5sZW5ndGgscD1lW2wrK10sZCxnLF89SmkoKSx5LHg9YygpOysraDxmOykoeT1fLmdldChkPXAoZz1zW2hdKSsiIikpP3kucHVzaChnKTpfLnNldChkLFtnXSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihiLFMpe3UoeCxTLG8oYixsLGMsdSkpfSkseH1mdW5jdGlvbiBhKHMsbCl7aWYoKytsPmUubGVuZ3RoKXJldHVybiBzO3ZhciBjLHU9dFtsLTFdO3JldHVybiBuIT1udWxsJiZsPj1lLmxlbmd0aD9jPXMuZW50cmllcygpOihjPVtdLHMuZWFjaChmdW5jdGlvbihoLGYpe2MucHVzaCh7a2V5OmYsdmFsdWVzOmEoaCxsKX0pfSkpLHUhPW51bGw/Yy5zb3J0KGZ1bmN0aW9uKGgsZil7cmV0dXJuIHUoaC5rZXksZi5rZXkpfSk6Y31yZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxOU2UsRFNlKX0sbWFwOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCx0MXQsZTF0KX0sZW50cmllczpmdW5jdGlvbihzKXtyZXR1cm4gYShvKHMsMCx0MXQsZTF0KSwwKX0sa2V5OmZ1bmN0aW9uKHMpe3JldHVybiBlLnB1c2gocyksaX0sc29ydEtleXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRbZS5sZW5ndGgtMV09cyxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHMpe3JldHVybiByPXMsaX0scm9sbHVwOmZ1bmN0aW9uKHMpe3JldHVybiBuPXMsaX19fWZ1bmN0aW9uIE5TZSgpe3JldHVybnt9fWZ1bmN0aW9uIERTZShlLHQscil7ZVt0XT1yfWZ1bmN0aW9uIHQxdCgpe3JldHVybiBKaSgpfWZ1bmN0aW9uIGUxdChlLHQscil7ZS5zZXQodCxyKX12YXIgbjF0PU0oKCk9PntqTCgpfSk7ZnVuY3Rpb24gWEwoKXt9ZnVuY3Rpb24gaTF0KGUsdCl7dmFyIHI9bmV3IFhMO2lmKGUgaW5zdGFuY2VvZiBYTCllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIga18sbzF0LGExdD1NKCgpPT57akwoKTtrXz1KaS5wcm90b3R5cGU7WEwucHJvdG90eXBlPWkxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhMLGhhczprXy5oYXMsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiBlKz0iIix0aGlzW2VsK2VdPWUsdGhpc30scmVtb3ZlOmtfLnJlbW92ZSxjbGVhcjprXy5jbGVhcix2YWx1ZXM6a18ua2V5cyxzaXplOmtfLnNpemUsZW1wdHk6a18uZW1wdHksZWFjaDprXy5lYWNofTtvMXQ9aTF0fSk7ZnVuY3Rpb24gJEwoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBzMXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGwxdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIGMxdD1NKCgpPT57fSk7ZnVuY3Rpb24gdTF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBoMXQ9TSgoKT0+e30pO3ZhciBUYj1NKCgpPT57bjF0KCk7YTF0KCk7akwoKTtzMXQoKTtjMXQoKTtoMXQoKX0pO2Z1bmN0aW9uIHYxdChlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIityKyddIHx8ICIiJ30pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEdTZShlLHQpe3ZhciByPXYxdChlKTtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gdChyKG4pLGksZSl9fWZ1bmN0aW9uIHkxdChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIGkgaW4gbilpIGluIHR8fHIucHVzaCh0W2ldPWkpfSkscn1mdW5jdGlvbiB3cyhlLHQpe3ZhciByPWUrIiIsbj1yLmxlbmd0aDtyZXR1cm4gbjx0P25ldyBBcnJheSh0LW4rMSkuam9pbigwKStyOnJ9ZnVuY3Rpb24gV1NlKGUpe3JldHVybiBlPDA/Ii0iK3dzKC1lLDYpOmU+OTk5OT8iKyIrd3MoZSw2KTp3cyhlLDQpfWZ1bmN0aW9uIFlTZShlKXt2YXIgdD1lLmdldFVUQ0hvdXJzKCkscj1lLmdldFVUQ01pbnV0ZXMoKSxuPWUuZ2V0VVRDU2Vjb25kcygpLGk9ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4oZSk/IkludmFsaWQgRGF0ZSI6V1NlKGUuZ2V0VVRDRnVsbFllYXIoKSw0KSsiLSIrd3MoZS5nZXRVVENNb250aCgpKzEsMikrIi0iK3dzKGUuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyIuIit3cyhpLDMpKyJaIjpuPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyJaIjpyfHx0PyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyJaIjoiIil9ZnVuY3Rpb24gV20oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgnWyInK2UrYApccl1gKSxyPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuKGgsZil7dmFyIHAsZCxnPWkoaCxmdW5jdGlvbihfLHkpe2lmKHApcmV0dXJuIHAoXyx5LTEpO2Q9XyxwPWY/R1NlKF8sZik6djF0KF8pfSk7cmV0dXJuIGcuY29sdW1ucz1kfHxbXSxnfWZ1bmN0aW9uIGkoaCxmKXt2YXIgcD1bXSxkPWgubGVuZ3RoLGc9MCxfPTAseSx4PWQ8PTAsYj0hMTtoLmNoYXJDb2RlQXQoZC0xKT09PVVFJiYtLWQsaC5jaGFyQ29kZUF0KGQtMSk9PT1uaiYmLS1kO2Z1bmN0aW9uIFMoKXtpZih4KXJldHVybiBlajtpZihiKXJldHVybiBiPSExLF8xdDt2YXIgUCxrPWcsTztpZihoLmNoYXJDb2RlQXQoayk9PT1yail7Zm9yKDtnKys8ZCYmaC5jaGFyQ29kZUF0KGcpIT09cmp8fGguY2hhckNvZGVBdCgrK2cpPT09cmo7KTtyZXR1cm4oUD1nKT49ZD94PSEwOihPPWguY2hhckNvZGVBdChnKyspKT09PVVFP2I9ITA6Tz09PW5qJiYoYj0hMCxoLmNoYXJDb2RlQXQoZyk9PT1VRSYmKytnKSxoLnNsaWNlKGsrMSxQLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2c8ZDspe2lmKChPPWguY2hhckNvZGVBdChQPWcrKykpPT09VUUpYj0hMDtlbHNlIGlmKE89PT1uailiPSEwLGguY2hhckNvZGVBdChnKT09PVVFJiYrK2c7ZWxzZSBpZihPIT09ciljb250aW51ZTtyZXR1cm4gaC5zbGljZShrLFApfXJldHVybiB4PSEwLGguc2xpY2UoayxkKX1mb3IoOyh5PVMoKSkhPT1lajspe2Zvcih2YXIgQz1bXTt5IT09XzF0JiZ5IT09ZWo7KUMucHVzaCh5KSx5PVMoKTtmJiYoQz1mKEMsXysrKSk9PW51bGx8fHAucHVzaChDKX1yZXR1cm4gcH1mdW5jdGlvbiBvKGgsZil7cmV0dXJuIGgubWFwKGZ1bmN0aW9uKHApe3JldHVybiBmLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gdShwW2RdKX0pLmpvaW4oZSl9KX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXkxdChoKSksW2YubWFwKHUpLmpvaW4oZSldLmNvbmNhdChvKGgsZikpLmpvaW4oYApgKX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXkxdChoKSksbyhoLGYpLmpvaW4oYApgKX1mdW5jdGlvbiBsKGgpe3JldHVybiBoLm1hcChjKS5qb2luKGAKYCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5tYXAodSkuam9pbihlKX1mdW5jdGlvbiB1KGgpe3JldHVybiBoPT1udWxsPyIiOmggaW5zdGFuY2VvZiBEYXRlP1lTZShoKTp0LnRlc3QoaCs9IiIpPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aH1yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6YSxmb3JtYXRCb2R5OnMsZm9ybWF0Um93czpsLGZvcm1hdFJvdzpjLGZvcm1hdFZhbHVlOnV9fXZhciBfMXQsZWoscmosVUUsbmosdGs9TSgoKT0+e18xdD17fSxlaj17fSxyaj0zNCxVRT0xMCxuaj0xM30pO3ZhciBSXyxDYix4MXQsYjF0LHcxdCxTMXQsTTF0LEUxdCxUMXQ9TSgoKT0+e3RrKCk7Ul89V20oIiwiKSxDYj1SXy5wYXJzZSx4MXQ9Ul8ucGFyc2VSb3dzLGIxdD1SXy5mb3JtYXQsdzF0PVJfLmZvcm1hdEJvZHksUzF0PVJfLmZvcm1hdFJvd3MsTTF0PVJfLmZvcm1hdFJvdyxFMXQ9Ul8uZm9ybWF0VmFsdWV9KTt2YXIgTl8sQWIsQzF0LEExdCxQMXQsSTF0LEwxdCxrMXQsUjF0PU0oKCk9Pnt0aygpO05fPVdtKCIJIiksQWI9Tl8ucGFyc2UsQzF0PU5fLnBhcnNlUm93cyxBMXQ9Tl8uZm9ybWF0LFAxdD1OXy5mb3JtYXRCb2R5LEkxdD1OXy5mb3JtYXRSb3dzLEwxdD1OXy5mb3JtYXRSb3csazF0PU5fLmZvcm1hdFZhbHVlfSk7ZnVuY3Rpb24gaWooZSl7Zm9yKHZhciB0IGluIGUpe3ZhciByPWVbdF0udHJpbSgpLG4saTtpZighcilyPW51bGw7ZWxzZSBpZihyPT09InRydWUiKXI9ITA7ZWxzZSBpZihyPT09ImZhbHNlIilyPSExO2Vsc2UgaWYocj09PSJOYU4iKXI9TmFOO2Vsc2UgaWYoIWlzTmFOKG49K3IpKXI9bjtlbHNlIGlmKGk9ci5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKWpTZSYmISFpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpO2Vsc2UgY29udGludWU7ZVt0XT1yfXJldHVybiBlfXZhciBqU2UsTjF0PU0oKCk9PntqU2U9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCl9KTt2YXIgcUU9TSgoKT0+e3RrKCk7VDF0KCk7UjF0KCk7TjF0KCl9KTt2YXIgcGU9e307S3MocGUse19fYXNzaWduOigpPT55NWUsX19hc3luY0RlbGVnYXRvcjooKT0+QTVlLF9fYXN5bmNHZW5lcmF0b3I6KCk9PkM1ZSxfX2FzeW5jVmFsdWVzOigpPT5QNWUsX19hd2FpdDooKT0+VTUsX19hd2FpdGVyOigpPT5TNWUsX19kZWNvcmF0ZTooKT0+eDVlLF9fZXhwb3J0U3RhcjooKT0+RTVlLF9fZXh0ZW5kczooKT0+XzVlLF9fZ2VuZXJhdG9yOigpPT5NNWUsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9Pkk1ZSxfX21ldGFkYXRhOigpPT53NWUsX19wYXJhbTooKT0+YjVlLF9fcmVhZDooKT0+bk10LF9fcmVzdDooKT0+djVlLF9fc3ByZWFkOigpPT5UNWUsX192YWx1ZXM6KCk9PnkkfSk7ZnVuY3Rpb24gXzVlKGUsdCl7ZzVlKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9ZnVuY3Rpb24gdjVlKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQuaW5kZXhPZihuKTwwJiYocltuXT1lW25dKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIGk9MCxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxuLmxlbmd0aDtpKyspdC5pbmRleE9mKG5baV0pPDAmJihyW25baV1dPWVbbltpXV0pO3JldHVybiByfWZ1bmN0aW9uIHg1ZShlLHQscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89aTwzP3Q6bj09PW51bGw/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bixhO2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGU9PSJmdW5jdGlvbiIpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGE9ZVtzXSkmJihvPShpPDM/YShvKTppPjM/YSh0LHIsbyk6YSh0LHIpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixvKSxvfWZ1bmN0aW9uIGI1ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3QocixuLGUpfX1mdW5jdGlvbiB3NWUoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24gUzVlKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShjKXt0cnl7bChuLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIHMoYyl7dHJ5e2wobi50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/aShjLnZhbHVlKTpuZXcgcihmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihhLHMpfWwoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIE01ZShlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihvWzBdJjEpdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LG4saSxvLGE7cmV0dXJuIGE9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsKFtjLHVdKX19ZnVuY3Rpb24gbChjKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsaSYmKG89aVtjWzBdJjI/InJldHVybiI6Y1swXT8idGhyb3ciOiJuZXh0Il0pJiYhKG89by5jYWxsKGksY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKGk9MCxvJiYoYz1bMCxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiByLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OnIubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9ci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1yLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7ci5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZyLmxhYmVsPG9bMV0pe3IubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmci5sYWJlbDxvWzJdKXtyLmxhYmVsPW9bMl0sci5vcHMucHVzaChjKTticmVha31vWzJdJiZyLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxyKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e249bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiBFNWUoZSx0KXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX1mdW5jdGlvbiB5JChlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl0scj0wO3JldHVybiB0P3QuY2FsbChlKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX19ZnVuY3Rpb24gbk10KGUsdCl7dmFyIHI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFyKXJldHVybiBlO3ZhciBuPXIuY2FsbChlKSxpLG89W10sYTt0cnl7Zm9yKDsodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPW4ubmV4dCgpKS5kb25lOylvLnB1c2goaS52YWx1ZSl9Y2F0Y2gocyl7YT17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHI9bi5yZXR1cm4pJiZyLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBvfWZ1bmN0aW9uIFQ1ZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KG5NdChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBVNShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFU1Pyh0aGlzLnY9ZSx0aGlzKTpuZXcgVTUoZSl9ZnVuY3Rpb24gQzVlKGUsdCxyKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG49ci5hcHBseShlLHR8fFtdKSxpLG89W107cmV0dXJuIGk9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKGYpe25bZl0mJihpW2ZdPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGcpe28ucHVzaChbZixwLGQsZ10pPjF8fHMoZixwKX0pfSl9ZnVuY3Rpb24gcyhmLHApe3RyeXtsKG5bZl0ocCkpfWNhdGNoKGQpe2gob1swXVszXSxkKX19ZnVuY3Rpb24gbChmKXtmLnZhbHVlIGluc3RhbmNlb2YgVTU/UHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihjLHUpOmgob1swXVsyXSxmKX1mdW5jdGlvbiBjKGYpe3MoIm5leHQiLGYpfWZ1bmN0aW9uIHUoZil7cygidGhyb3ciLGYpfWZ1bmN0aW9uIGgoZixwKXtmKHApLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBBNWUoZSl7dmFyIHQscjtyZXR1cm4gdD17fSxuKCJuZXh0IiksbigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxuKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiBuKGksbyl7ZVtpXSYmKHRbaV09ZnVuY3Rpb24oYSl7cmV0dXJuKHI9IXIpP3t2YWx1ZTpVNShlW2ldKGEpKSxkb25lOmk9PT0icmV0dXJuIn06bz9vKGEpOmF9KX19ZnVuY3Rpb24gUDVlKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6dHlwZW9mIHkkPT0iZnVuY3Rpb24iP3kkKGUpOmVbU3ltYm9sLml0ZXJhdG9yXSgpfWZ1bmN0aW9uIEk1ZShlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGc1ZSx5NWUsZGU9TSgoKT0+e2c1ZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07eTVlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYodFtvXT1yW29dKX1yZXR1cm4gdH19KTt2YXIgaU10LG9NdD1NKCgpPT57aU10PSI0LjEzLjAifSk7ZnVuY3Rpb24gX2MoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHB5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1MNWUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBMNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9jKGUodCkscil9fXZhciB2JD1NKCgpPT57cHkoKX0pO3ZhciBhTXQseCQsc010LHNSLGIkPU0oKCk9PntweSgpO3YkKCk7YU10PWFSKF9jKSx4JD1hTXQucmlnaHQsc010PWFNdC5sZWZ0LHNSPXgkfSk7ZnVuY3Rpb24gbE10KGUsdCl7dD09bnVsbCYmKHQ9dyQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24gdyQoZSx0KXtyZXR1cm5bZSx0XX12YXIgUyQ9TSgoKT0+e30pO2Z1bmN0aW9uIGNNdChlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPXckKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfXZhciB1TXQ9TSgoKT0+e1MkKCl9KTtmdW5jdGlvbiBoTXQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGZNdD1NKCgpPT57fSk7ZnVuY3Rpb24gYWwoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgbDI9TSgoKT0+e30pO2Z1bmN0aW9uIGxSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPWFsKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1hbCh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfXZhciBNJD1NKCgpPT57bDIoKX0pO2Z1bmN0aW9uIGNSKGUsdCl7dmFyIHI9bFIoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfXZhciBFJD1NKCgpPT57TSQoKX0pO2Z1bmN0aW9uIHVSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIFQkPU0oKCk9Pnt9KTt2YXIgcE10LGRNdCxtTXQsQyQ9TSgoKT0+e3BNdD1BcnJheS5wcm90b3R5cGUsZE10PXBNdC5zbGljZSxtTXQ9cE10Lm1hcH0pO2Z1bmN0aW9uIHE1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZ010PU0oKCk9Pnt9KTtmdW5jdGlvbiBfTXQoZSl7cmV0dXJuIGV9dmFyIHlNdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFIoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIEEkPU0oKCk9Pnt9KTtmdW5jdGlvbiB2TXQoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1rJChlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gayQoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1QJD8xMDpvPj1JJD81Om8+PUwkPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49UCQ/MTA6bz49SSQ/NTpvPj1MJD8yOjEpfWZ1bmN0aW9uIGZSKGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1QJD9pKj0xMDpvPj1JJD9pKj01Om8+PUwkJiYoaSo9MiksdDxlPy1pOml9dmFyIFAkLEkkLEwkLFIkPU0oKCk9PntQJD1NYXRoLnNxcnQoNTApLEkkPU1hdGguc3FydCgxMCksTCQ9TWF0aC5zcXJ0KDIpfSk7ZnVuY3Rpb24gcFIoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIpKzF9dmFyIE4kPU0oKCk9Pnt9KTtmdW5jdGlvbiB4TXQoKXt2YXIgZT1fTXQsdD11UixyPXBSO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWZSKHUsaCxmKSxmPWhSKE1hdGguY2VpbCh1L2YpKmYsTWF0aC5mbG9vcihoL2YpKmYsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkPW5ldyBBcnJheShwKzEpLGc7Zm9yKG89MDtvPD1wOysrbylnPWRbb109W10sZy54MD1vPjA/ZltvLTFdOnUsZy54MT1vPHA/ZltvXTpoO2ZvcihvPTA7bzxhOysrbylzPWxbb10sdTw9cyYmczw9aCYmZFtzUihmLHMsMCxwKV0ucHVzaChpW29dKTtyZXR1cm4gZH1yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnE1KGkpLG4pOmV9LG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cTUoW2lbMF0saVsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkFycmF5LmlzQXJyYXkoaSk/cTUoZE10LmNhbGwoaSkpOnE1KGkpLG4pOnJ9LG59dmFyIGJNdD1NKCgpPT57QyQoKTtiJCgpO2dNdCgpO1QkKCk7eU10KCk7QSQoKTtSJCgpO04kKCl9KTtmdW5jdGlvbiBkeShlLHQscil7aWYocj09bnVsbCYmKHI9YWwpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX12YXIgZFI9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiB3TXQoZSx0LHIpe3JldHVybiBlPW1NdC5jYWxsKGUsYWwpLnNvcnQoX2MpLE1hdGguY2VpbCgoci10KS8oMiooZHkoZSwuNzUpLWR5KGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgU010PU0oKCk9PntDJCgpO3B5KCk7bDIoKTtkUigpfSk7ZnVuY3Rpb24gTU10KGUsdCxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLXQpLygzLjUqY1IoZSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgRU10PU0oKCk9PntFJCgpfSk7ZnVuY3Rpb24gVE10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfXZhciBDTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFNdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1hbChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPWFsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufXZhciBQTXQ9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBJTXQoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz1bXTtpZih0PT1udWxsKWZvcig7KytuPHI7KWlzTmFOKGk9YWwoZVtuXSkpfHxvLnB1c2goaSk7ZWxzZSBmb3IoOysrbjxyOylpc05hTihpPWFsKHQoZVtuXSxuLGUpKSl8fG8ucHVzaChpKTtyZXR1cm4gZHkoby5zb3J0KF9jKSwuNSl9dmFyIExNdD1NKCgpPT57cHkoKTtsMigpO2RSKCl9KTtmdW5jdGlvbiBrTXQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHIsbj0tMSxpPTAsbyxhOysrbjx0OylpKz1lW25dLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoaSk7LS10Pj0wOylmb3IoYT1lW3RdLHI9YS5sZW5ndGg7LS1yPj0wOylvWy0taV09YVtyXTtyZXR1cm4gb312YXIgUk10PU0oKCk9Pnt9KTtmdW5jdGlvbiBtUihlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvO2lmKHQ9PW51bGwpe2Zvcig7KytuPHI7KWlmKChpPWVbbl0pIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiZvPmkmJihvPWkpfWVsc2UgZm9yKDsrK248cjspaWYoKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmbz5pJiYobz1pKTtyZXR1cm4gb312YXIgRCQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5NdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn12YXIgRE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBPTXQoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9X2MpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX12YXIgek10PU0oKCk9PntweSgpfSk7ZnVuY3Rpb24gRk10KGUsdCxyKXtmb3IodmFyIG49KHI9PW51bGw/ZS5sZW5ndGg6ciktKHQ9dD09bnVsbD8wOit0KSxpLG87bjspbz1NYXRoLnJhbmRvbSgpKm4tLXwwLGk9ZVtuK3RdLGVbbit0XT1lW28rdF0sZVtvK3RdPWk7cmV0dXJuIGV9dmFyIEJNdD1NKCgpPT57fSk7ZnVuY3Rpb24gSE10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89MDtpZih0PT1udWxsKWZvcig7KytuPHI7KShpPStlW25dKSYmKG8rPWkpO2Vsc2UgZm9yKDsrK248cjspKGk9K3QoZVtuXSxuLGUpKSYmKG8rPWkpO3JldHVybiBvfXZhciBWTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdSKGUpe2lmKCEobz1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciB0PS0xLHI9bVIoZSxrNWUpLG49bmV3IEFycmF5KHIpOysrdDxyOylmb3IodmFyIGk9LTEsbyxhPW5bdF09bmV3IEFycmF5KG8pOysraTxvOylhW2ldPWVbaV1bdF07cmV0dXJuIG59ZnVuY3Rpb24gazVlKGUpe3JldHVybiBlLmxlbmd0aH12YXIgTyQ9TSgoKT0+e0QkKCl9KTtmdW5jdGlvbiBVTXQoKXtyZXR1cm4gZ1IoYXJndW1lbnRzKX12YXIgcU10PU0oKCk9PntPJCgpfSk7dmFyIEdNdD1NKCgpPT57YiQoKTtweSgpO3YkKCk7dU10KCk7Zk10KCk7RSQoKTtUJCgpO2JNdCgpO1NNdCgpO0VNdCgpO04kKCk7Q010KCk7UE10KCk7TE10KCk7Uk10KCk7RCQoKTtTJCgpO0RNdCgpO2RSKCk7QSQoKTt6TXQoKTtCTXQoKTtWTXQoKTtSJCgpO08kKCk7TSQoKTtxTXQoKX0pO3ZhciBfUixXTXQ9TSgoKT0+e19SPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFlNdChlKXtyZXR1cm4gZX12YXIgak10PU0oKCk9Pnt9KTtmdW5jdGlvbiBSNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhlKy41KSsiLDApIn1mdW5jdGlvbiBONWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBENWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybitlKHQpfX1mdW5jdGlvbiBPNWUoZSl7dmFyIHQ9TWF0aC5tYXgoMCxlLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIGUucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24ocil7cmV0dXJuK2UocikrdH19ZnVuY3Rpb24gejVlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHhSKGUsdCl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxvPTYsYT02LHM9MyxsPWU9PT15Unx8ZT09PUc1Py0xOjEsYz1lPT09RzV8fGU9PT12Uj8ieCI6InkiLHU9ZT09PXlSfHxlPT09eiQ/UjVlOk41ZTtmdW5jdGlvbiBoKGYpe3ZhciBwPW49PW51bGw/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQscik6dC5kb21haW4oKTpuLGQ9aT09bnVsbD90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQscik6WU10OmksZz1NYXRoLm1heChvLDApK3MsXz10LnJhbmdlKCkseT0rX1swXSsuNSx4PStfW18ubGVuZ3RoLTFdKy41LGI9KHQuYmFuZHdpZHRoP081ZTpENWUpKHQuY29weSgpKSxTPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixDPVMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFA9Uy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLHQpLm9yZGVyKCksaz1QLmV4aXQoKSxPPVAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxEPVAuc2VsZWN0KCJsaW5lIiksQj1QLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLGwqZykuYXR0cigiZHkiLGU9PT15Uj8iMGVtIjplPT09eiQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09UyYmKEM9Qy50cmFuc2l0aW9uKGYpLFA9UC50cmFuc2l0aW9uKGYpLEQ9RC50cmFuc2l0aW9uKGYpLEI9Qi50cmFuc2l0aW9uKGYpLGs9ay50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLFhNdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gaXNGaW5pdGUoST1iKEkpKT91KEkpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE8uYXR0cigib3BhY2l0eSIsWE10KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3ZhciBMPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoTCYmaXNGaW5pdGUoTD1MKEkpKT9MOmIoSSkpfSkpLGsucmVtb3ZlKCksQy5hdHRyKCJkIixlPT09RzV8fGU9PXZSPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYSksUC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiB1KGIoSSkpfSksRC5hdHRyKGMrIjIiLGwqbyksQi5hdHRyKGMsbCpnKS50ZXh0KGQpLFMuZmlsdGVyKHo1ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZT09PXZSPyJzdGFydCI6ZT09PUc1PyJlbmQiOiJtaWRkbGUiKSxTLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZixoKTp0fSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9X1IuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mPT1udWxsP1tdOl9SLmNhbGwoZiksaCk6ci5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOl9SLmNhbGwoZiksaCk6biYmbi5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZixoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K2YsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStmLGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZixoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStmLGgpOnN9LGh9ZnVuY3Rpb24gJE10KGUpe3JldHVybiB4Uih5UixlKX1mdW5jdGlvbiBLTXQoZSl7cmV0dXJuIHhSKHZSLGUpfWZ1bmN0aW9uIFpNdChlKXtyZXR1cm4geFIoeiQsZSl9ZnVuY3Rpb24gSk10KGUpe3JldHVybiB4UihHNSxlKX12YXIgeVIsdlIseiQsRzUsWE10LFFNdD1NKCgpPT57V010KCk7ak10KCk7eVI9MSx2Uj0yLHokPTMsRzU9NCxYTXQ9MWUtNn0pO3ZhciB0RXQ9TSgoKT0+e1FNdCgpfSk7ZnVuY3Rpb24gckV0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGJSKHIpfWZ1bmN0aW9uIGJSKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEI1ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIEg1ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGVFdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09RjVlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgRjVlLFc1LG5FdD1NKCgpPT57RjVlPXt2YWx1ZTpmdW5jdGlvbigpe319O2JSLnByb3RvdHlwZT1yRXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiUixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUI1ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPUg1ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09ZUV0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09ZUV0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBiUihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07VzU9ckV0fSk7dmFyIEYkPU0oKCk9PntuRXQoKX0pO3ZhciB3UixCJCxIJD1NKCgpPT57d1I9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEIkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3Uix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gVnAoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksQiQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkIkW3RdLGxvY2FsOmV9OmV9dmFyIFNSPU0oKCk9PntIJCgpfSk7ZnVuY3Rpb24gVjVlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09d1ImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXdSP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBVNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTVIoZSl7dmFyIHQ9VnAoZSk7cmV0dXJuKHQubG9jYWw/VTVlOlY1ZSkodCl9dmFyIFYkPU0oKCk9PntTUigpO0gkKCl9KTtmdW5jdGlvbiBxNWUoKXt9ZnVuY3Rpb24gbXkoZSl7cmV0dXJuIGU9PW51bGw/cTVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIEVSPU0oKCk9Pnt9KTtmdW5jdGlvbiBpRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgZmkobix0aGlzLl9wYXJlbnRzKX12YXIgb0V0PU0oKCk9Pnt3dSgpO0VSKCl9KTtmdW5jdGlvbiBHNWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBZNShlKXtyZXR1cm4gZT09bnVsbD9HNWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVSQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFFdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IGZpKG4saSl9dmFyIHNFdD1NKCgpPT57d3UoKTtVJCgpfSk7ZnVuY3Rpb24gajUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIHEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBsRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWo1KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBmaShuLHRoaXMuX3BhcmVudHMpfXZhciBjRXQ9TSgoKT0+e3d1KCk7cSQoKX0pO2Z1bmN0aW9uIFRSKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBHJD1NKCgpPT57fSk7ZnVuY3Rpb24gdUV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChUUiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gWDUoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFckPU0oKCk9PntHJCgpO3d1KCk7WDUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYNSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIGhFdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGZFdD1NKCgpPT57fSk7ZnVuY3Rpb24gVzVlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBYNShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gWTVlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9cEV0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9cEV0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IFg1KGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gZEV0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9ZNWU6VzVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9aEV0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBmaShhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIHBFdCxtRXQ9TSgoKT0+e3d1KCk7VyQoKTtmRXQoKTtwRXQ9IiQifSk7ZnVuY3Rpb24gZ0V0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFRSKSx0aGlzLl9wYXJlbnRzKX12YXIgX0V0PU0oKCk9PntHJCgpO3d1KCl9KTtmdW5jdGlvbiB5RXQoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIHZFdD1NKCgpPT57fSk7ZnVuY3Rpb24geEV0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBmaShhLHRoaXMuX3BhcmVudHMpfXZhciBiRXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB3RXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBTRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1FdChlKXtlfHwoZT1qNWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgZmkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGo1ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgRUV0PU0oKCk9Pnt3dSgpfSk7ZnVuY3Rpb24gVEV0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBDRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFFdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBQRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIElFdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIExFdD1NKCgpPT57fSk7ZnVuY3Rpb24ga0V0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgUkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBORXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIERFdD1NKCgpPT57fSk7ZnVuY3Rpb24gT0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgekV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uICQ1ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIEs1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIFo1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBKNWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFE1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBGRXQoZSx0KXt2YXIgcj1WcChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/JDVlOlg1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP1E1ZTpKNWU6ci5sb2NhbD9aNWU6SzVlKShyLHQpKX12YXIgQkV0PU0oKCk9PntTUigpfSk7ZnVuY3Rpb24gQ1IoZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBZJD1NKCgpPT57fSk7ZnVuY3Rpb24gdFRlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGVUZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIHJUZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBIRXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3RUZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yVGU6ZVRlKShlLHQscj09bnVsbD8iIjpyKSk6YWcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gYWcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxDUihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgaiQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBuVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIGlUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gb1RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIFZFdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP25UZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9vVGU6aVRlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgVUV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxRXQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFgkKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IEdFdChlKX1mdW5jdGlvbiBHRXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPXFFdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFdFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIFlFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGFUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtXRXQodGhpcyxlKX19ZnVuY3Rpb24gc1RlKGUpe3JldHVybiBmdW5jdGlvbigpe1lFdCh0aGlzLGUpfX1mdW5jdGlvbiBsVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/V0V0OllFdCkodGhpcyxlKX19ZnVuY3Rpb24gakV0KGUsdCl7dmFyIHI9cUV0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVgkKHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2xUZTp0P2FUZTpzVGUpKHIsdCkpfXZhciBYRXQ9TSgoKT0+e0dFdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBjVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHVUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIGhUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gJEV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP2NUZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/aFRlOnVUZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBLRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHBUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiBkVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBaRXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/ZlRlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9kVGU6cFRlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBKRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1UZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBRRXQoKXtyZXR1cm4gdGhpcy5lYWNoKG1UZSl9dmFyIHQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gZ1RlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gZTV0KCl7cmV0dXJuIHRoaXMuZWFjaChnVGUpfXZhciByNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG41dChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciBpNXQ9TSgoKT0+e1YkKCl9KTtmdW5jdGlvbiBfVGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBvNXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpLG49dD09bnVsbD9fVGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpteSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIGE1dD1NKCgpPT57ViQoKTtFUigpfSk7ZnVuY3Rpb24geVRlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gczV0KCl7cmV0dXJuIHRoaXMuZWFjaCh5VGUpfXZhciBsNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZUZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24geFRlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBjNXQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/eFRlOnZUZSl9dmFyIHU1dD1NKCgpPT57fSk7ZnVuY3Rpb24gaDV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZjV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBiVGUoZSx0LHIpe3JldHVybiBlPW01dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBtNXQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT13cjt3cj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXt3cj1pfX19ZnVuY3Rpb24gd1RlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBTVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gTVRlKGUsdCxyKXt2YXIgbj1kNXQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9iVGU6bTV0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGc1dChlLHQscil7dmFyIG49d1RlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9NVGU6U1RlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uICQkKGUsdCxyLG4pe3ZhciBpPXdyO2Uuc291cmNlRXZlbnQ9d3Isd3I9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3dyPWl9fXZhciBkNXQsd3IscDV0LEFSPU0oKCk9PntkNXQ9e30sd3I9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYocDV0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIHA1dHx8KGQ1dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBfNXQoZSx0LHIpe3ZhciBuPUNSKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEVUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBfNXQodGhpcyxlLHQpfX1mdW5jdGlvbiBUVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gXzV0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIHk1dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1RUZTpFVGUpKGUsdCkpfXZhciB2NXQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBmaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiB4NXQoKXtyZXR1cm4gbmV3IGZpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sSyQpfXZhciBLJCxVcCx3dT1NKCgpPT57b0V0KCk7c0V0KCk7Y0V0KCk7bUV0KCk7VyQoKTtfRXQoKTt2RXQoKTtiRXQoKTtTRXQoKTtFRXQoKTtDRXQoKTtQRXQoKTtMRXQoKTtSRXQoKTtERXQoKTt6RXQoKTtCRXQoKTtqJCgpO1VFdCgpO1hFdCgpO0tFdCgpO0pFdCgpO3Q1dCgpO3I1dCgpO2k1dCgpO2E1dCgpO2w1dCgpO3U1dCgpO2Y1dCgpO0FSKCk7djV0KCk7SyQ9W251bGxdO2ZpLnByb3RvdHlwZT14NXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmaSxzZWxlY3Q6aUV0LHNlbGVjdEFsbDphRXQsZmlsdGVyOmxFdCxkYXRhOmRFdCxlbnRlcjp1RXQsZXhpdDpnRXQsam9pbjp5RXQsbWVyZ2U6eEV0LG9yZGVyOndFdCxzb3J0Ok1FdCxjYWxsOlRFdCxub2RlczpBRXQsbm9kZTpJRXQsc2l6ZTprRXQsZW1wdHk6TkV0LGVhY2g6T0V0LGF0dHI6RkV0LHN0eWxlOkhFdCxwcm9wZXJ0eTpWRXQsY2xhc3NlZDpqRXQsdGV4dDokRXQsaHRtbDpaRXQscmFpc2U6UUV0LGxvd2VyOmU1dCxhcHBlbmQ6bjV0LGluc2VydDpvNXQscmVtb3ZlOnM1dCxjbG9uZTpjNXQsZGF0dW06aDV0LG9uOmc1dCxkaXNwYXRjaDp5NXR9O1VwPXg1dH0pO2Z1bmN0aW9uIHFwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IGZpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZmkoW1tlXV0sSyQpfXZhciBiNXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB3NXQoKXtmb3IodmFyIGU9d3IsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgUzV0PU0oKCk9PntBUigpfSk7ZnVuY3Rpb24gTTV0KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIEU1dD1NKCgpPT57fSk7ZnVuY3Rpb24gUFIoZSl7dmFyIHQ9dzV0KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLE01dChlLHQpfXZhciBUNXQ9TSgoKT0+e1M1dCgpO0U1dCgpfSk7dmFyIEVzPU0oKCk9PntxJCgpO1Q1dCgpO1NSKCk7YjV0KCk7d3UoKTtFUigpO1UkKCk7aiQoKTtBUigpfSk7ZnVuY3Rpb24gSVIoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBDNXQ9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBaJChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXFwKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsSVIsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsSVIsITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIEokKGUsdCl7dmFyIHI9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1xcChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihuLm9uKCJjbGljay5kcmFnIixJUiwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe24ub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gcj9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooci5zdHlsZS5Nb3pVc2VyU2VsZWN0PXIuX19ub3NlbGVjdCxkZWxldGUgci5fX25vc2VsZWN0KX12YXIgQTV0PU0oKCk9PntFcygpO0M1dCgpfSk7dmFyIFA1dD1NKCgpPT57QTV0KCl9KTtmdW5jdGlvbiBMUihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gUSQoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIEk1dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gazV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gTlRlKCl7cmV0dXJuIEY1dCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBSNXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBTdShlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1DVGUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9ONXQodCk6cj09PTM/bmV3IHNsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9rUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9rUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PUFUZS5leGVjKGUpKT9uZXcgc2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9UFRlLmV4ZWMoZSkpP25ldyBzbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1JVGUuZXhlYyhlKSk/a1IodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9TFRlLmV4ZWMoZSkpP2tSKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PWtUZS5leGVjKGUpKT96NXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1SVGUuZXhlYyhlKSk/ejV0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6TDV0Lmhhc093blByb3BlcnR5KGUpP041dChMNXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBzbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIE41dChlKXtyZXR1cm4gbmV3IHNsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBrUihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHNsKGUsdCxyLG4pfWZ1bmN0aW9uIERUZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFo1fHwoZT1TdShlKSksZT8oZT1lLnJnYigpLG5ldyBzbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgc2x9ZnVuY3Rpb24gdTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0RUZShlKTpuZXcgc2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHNsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBENXQoKXtyZXR1cm4iIyIrdEsodGhpcy5yKSt0Syh0aGlzLmcpK3RLKHRoaXMuYil9ZnVuY3Rpb24gTzV0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHRLKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHo1dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEtoKGUsdCxyLG4pfWZ1bmN0aW9uIEY1dChlKXtpZihlIGluc3RhbmNlb2YgS2gpcmV0dXJuIG5ldyBLaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBaNXx8KGU9U3UoZSkpLCFlKXJldHVybiBuZXcgS2g7aWYoZSBpbnN0YW5jZW9mIEtoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEtoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gQjV0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9GNXQoZSk6bmV3IEtoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBLaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZUsoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyICQ1LFJSLGMyLEs1LFpoLENUZSxBVGUsUFRlLElUZSxMVGUsa1RlLFJUZSxMNXQsSDV0PU0oKCk9PntJNXQoKTskNT0uNyxSUj0xLyQ1LGMyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixLNT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixaaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsQ1RlPS9eIyhbMC05YS1mXXszLDh9KSQvLEFUZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbYzIsYzIsYzJdKyJcXCkkIiksUFRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1taaCxaaCxaaF0rIlxcKSQiKSxJVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tjMixjMixjMixLNV0rIlxcKSQiKSxMVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1taaCxaaCxaaCxLNV0rIlxcKSQiKSxrVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0s1LFpoLFpoXSsiXFwpJCIpLFJUZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0s1LFpoLFpoLEs1XSsiXFwpJCIpLEw1dD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtMUihaNSxTdSx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDprNXQsZm9ybWF0SGV4Oms1dCxmb3JtYXRIc2w6TlRlLGZvcm1hdFJnYjpSNXQsdG9TdHJpbmc6UjV0fSk7TFIoc2wsdTIsUSQoWjUse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/UlI6TWF0aC5wb3coUlIsZSksbmV3IHNsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsPyQ1Ok1hdGgucG93KCQ1LGUpLG5ldyBzbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkQ1dCxmb3JtYXRIZXg6RDV0LGZvcm1hdFJnYjpPNXQsdG9TdHJpbmc6TzV0fSkpO0xSKEtoLEI1dCxRJChaNSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9SUjpNYXRoLnBvdyhSUixlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD8kNTpNYXRoLnBvdygkNSxlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBzbChlSyhlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxlSyhlLGksbiksZUsoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgTlI9TSgoKT0+e0g1dCgpfSk7ZnVuY3Rpb24gcksoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiBWNXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIHJLKChyLW4vdCkqdCxhLGksbyxzKX19dmFyIG5LPU0oKCk9Pnt9KTtmdW5jdGlvbiBVNXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBySygoci1uL3QpKnQsaSxvLGEscyl9fXZhciBxNXQ9TSgoKT0+e25LKCl9KTtmdW5jdGlvbiBKNShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGlLPU0oKCk9Pnt9KTtmdW5jdGlvbiBPVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiB6VGUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBHNXQoZSl7cmV0dXJuKGU9K2UpPT0xP0RSOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD96VGUodCxyLGUpOko1KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIERSKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP09UZShlLHIpOko1KGlzTmFOKGUpP3Q6ZSl9dmFyIFc1dD1NKCgpPT57aUsoKX0pO2Z1bmN0aW9uIFk1dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPXUyKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBneSxGVGUsQlRlLG9LPU0oKCk9PntOUigpO25LKCk7cTV0KCk7VzV0KCk7Z3k9ZnVuY3Rpb24gZSh0KXt2YXIgcj1HNXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9dTIoaSkpLnIsKG89dTIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1EUihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7RlRlPVk1dChWNXQpLEJUZT1ZNXQoVTV0KX0pO2Z1bmN0aW9uIGo1dChlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiBYNXQoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciAkNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEs1dChlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPV95KGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIFo1dD1NKCgpPT57T1IoKX0pO2Z1bmN0aW9uIEo1dChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19dmFyIFE1dD1NKCgpPT57fSk7ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIFE1PU0oKCk9Pnt9KTtmdW5jdGlvbiB0VHQoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1feShlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBlVHQ9TSgoKT0+e09SKCl9KTtmdW5jdGlvbiBIVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFZUZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHRUKGUsdCl7dmFyIHI9c0subGFzdEluZGV4PWFLLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPXNLLmV4ZWMoZSkpJiYoaT1hSy5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6VWEobixpKX0pKSxyPWFLLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9WVGUobFswXS54KTpIVGUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIHNLLGFLLGxLPU0oKCk9PntRNSgpO3NLPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxhSz1uZXcgUmVnRXhwKHNLLnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gX3koZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP0o1KHQpOihyPT09Im51bWJlciI/VWE6cj09PSJzdHJpbmciPyhuPVN1KHQpKT8odD1uLGd5KTp0VDp0IGluc3RhbmNlb2YgU3U/Z3k6dCBpbnN0YW5jZW9mIERhdGU/SjV0Olg1dCh0KT9qNXQ6QXJyYXkuaXNBcnJheSh0KT9LNXQ6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3RUdDpVYSkoZSx0KX12YXIgT1I9TSgoKT0+e05SKCk7b0soKTtaNXQoKTtRNXQoKTtRNSgpO2VUdCgpO2xLKCk7aUsoKTskNXQoKX0pO2Z1bmN0aW9uIGNLKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnJUdCxza2V3WDpNYXRoLmF0YW4obCkqclR0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgclR0LHpSLG5UdD1NKCgpPT57clR0PTE4MC9NYXRoLlBJLHpSPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gb1R0KGUpe3JldHVybiBlPT09Im5vbmUiP3pSOihlVHx8KGVUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHVLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpVHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGVULnN0eWxlLnRyYW5zZm9ybT1lLGU9aVR0LmdldENvbXB1dGVkU3R5bGUodUsuYXBwZW5kQ2hpbGQoZVQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHVLLnJlbW92ZUNoaWxkKGVUKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxjSygrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIGFUdChlKXtyZXR1cm4gZT09bnVsbD96UjooRlJ8fChGUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxGUi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9RlIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsY0soZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTp6Uil9dmFyIGVULHVLLGlUdCxGUixzVHQ9TSgoKT0+e25UdCgpfSk7ZnVuY3Rpb24gbFR0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6VWEoYyxoKX0se2k6Zy0yLHg6VWEodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpVYShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlVhKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpVYShjLGgpfSx7aTpnLTIseDpVYSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBoSyxmSyxjVHQ9TSgoKT0+e1E1KCk7c1R0KCk7aEs9bFR0KG9UdCwicHgsICIsInB4KSIsImRlZykiKSxmSz1sVHQoYVR0LCIsICIsIikiLCIpIil9KTt2YXIgclQ9TSgoKT0+e09SKCk7UTUoKTtsSygpO2NUdCgpO29LKCl9KTtmdW5jdGlvbiBmMigpe3JldHVybiB5eXx8KGZUdChVVGUpLHl5PWFULm5vdygpK1ZSKX1mdW5jdGlvbiBVVGUoKXt5eT0wfWZ1bmN0aW9uIHNUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBVUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gcFR0KCl7ZjIoKSwrK2gyO2Zvcih2YXIgZT1CUix0O2U7KSh0PXl5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1oMn1mdW5jdGlvbiB1VHQoKXt5eT0oSFI9YVQubm93KCkpK1ZSLGgyPWlUPTA7dHJ5e3BUdCgpfWZpbmFsbHl7aDI9MCxHVGUoKSx5eT0wfX1mdW5jdGlvbiBxVGUoKXt2YXIgZT1hVC5ub3coKSx0PWUtSFI7dD5oVHQmJihWUi09dCxIUj1lKX1mdW5jdGlvbiBHVGUoKXtmb3IodmFyIGUsdD1CUixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpCUj1yKTtvVD1lLHBLKG4pfWZ1bmN0aW9uIHBLKGUpe2lmKCFoMil7aVQmJihpVD1jbGVhclRpbWVvdXQoaVQpKTt2YXIgdD1lLXl5O3Q+MjQ/KGU8MS8wJiYoaVQ9c2V0VGltZW91dCh1VHQsZS1hVC5ub3coKS1WUikpLG5UJiYoblQ9Y2xlYXJJbnRlcnZhbChuVCkpKTooblR8fChIUj1hVC5ub3coKSxuVD1zZXRJbnRlcnZhbChxVGUsaFR0KSksaDI9MSxmVHQodVR0KSl9fXZhciBoMixpVCxuVCxoVHQsQlIsb1QsSFIseXksVlIsYVQsZlR0LGRLPU0oKCk9PntoMj0wLGlUPTAsblQ9MCxoVHQ9MWUzLEhSPTAseXk9MCxWUj0wLGFUPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGZUdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtzVC5wcm90b3R5cGU9VVIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzVCxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/ZjIoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJm9UIT09dGhpcyYmKG9UP29ULl9uZXh0PXRoaXM6QlI9dGhpcyxvVD10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLHBLKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHBLKCkpfX19KTtmdW5jdGlvbiBxUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIGRUdD1NKCgpPT57ZEsoKX0pO3ZhciBtSz1NKCgpPT57ZEsoKTtkVHQoKX0pO2Z1bmN0aW9uIHNnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47alRlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpXVGUsdHdlZW46WVRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmdUdH0pfWZ1bmN0aW9uIGNUKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPmdUdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIHFhKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPkdSKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFFpKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24galRlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVVSKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1nSyxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PWdLKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09R1IpcmV0dXJuIHFSKGEpO3Auc3RhdGU9PT1tVHQ/KHAuc3RhdGU9bFQscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1sVCxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHFSKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PUdSJiYoci5zdGF0ZT1tVHQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1XUixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09V1Ipe2ZvcihyLnN0YXRlPUdSLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVlSLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVlSJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9bFQsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFdUZSxZVGUsZ1R0LGdLLFdSLEdSLG1UdCxZUixsVCxUcz1NKCgpPT57RiQoKTttSygpO1dUZT1XNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxZVGU9W10sZ1R0PTAsZ0s9MSxXUj0yLEdSPTMsbVR0PTQsWVI9NSxsVD02fSk7ZnVuY3Rpb24gcDIoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+V1ImJm4uc3RhdGU8WVIsbi5zdGF0ZT1sVCxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBfSz1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIF9UdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cDIodGhpcyxlKX0pfXZhciB5VHQ9TSgoKT0+e19LKCl9KTtmdW5jdGlvbiBYVGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXFhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiAkVGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIHZUdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVFpKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP1hUZTokVGUpKHIsZSx0KSl9ZnVuY3Rpb24gZDIoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1xYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFFpKGksbikudmFsdWVbdF19fXZhciB1VD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGpSKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9VYTp0IGluc3RhbmNlb2YgU3U/Z3k6KHI9U3UodCkpPyh0PXIsZ3kpOnRUKShlLHQpfXZhciB5Sz1NKCgpPT57TlIoKTtyVCgpfSk7ZnVuY3Rpb24gS1RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBaVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBKVGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gUVRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiB0Q2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBlQ2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIHhUdChlLHQpe3ZhciByPVZwKGUpLG49cj09PSJ0cmFuc2Zvcm0iP2ZLOmpSO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP2VDZTp0Q2UpKHIsbixkMih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9aVGU6S1RlKShyKTooci5sb2NhbD9RVGU6SlRlKShyLG4sdCkpfXZhciBiVHQ9TSgoKT0+e3JUKCk7RXMoKTt1VCgpO3lLKCl9KTtmdW5jdGlvbiByQ2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIG5DZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIGlDZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJm5DZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gb0NlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmckNlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB3VHQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPVZwKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/aUNlOm9DZSkobix0KSl9dmFyIFNUdD1NKCgpPT57RXMoKX0pO2Z1bmN0aW9uIGFDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBzQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gTVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/YUNlOnNDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIEVUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGxDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBjQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gVFR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/bENlOmNDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIENUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIHVDZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtxYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gQVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh1Q2UodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZWFzZX12YXIgUFR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gSVR0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1qNShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgdWEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBMVHQ9TSgoKT0+e0VzKCk7R3AoKX0pO2Z1bmN0aW9uIGtUdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgdWEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBSVHQ9TSgoKT0+e0dwKCl9KTtmdW5jdGlvbiBoQ2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBmQ2UoZSx0LHIpe3ZhciBuLGksbz1oQ2UodCk/Y1Q6cWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gTlR0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goZkNlKHIsZSx0KSl9dmFyIERUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIHBDZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gT1R0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLHBDZSh0aGlzLl9pZCkpfXZhciB6VHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEZUdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsc2coY1tmXSx0LHIsZixjLFFpKHUscikpKTtyZXR1cm4gbmV3IHVhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBCVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gSFR0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9UWkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZzZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IHVhKG8sYSx0LHIpfXZhciBWVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gVVR0KCl7cmV0dXJuIG5ldyBkQ2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBkQ2UscVR0PU0oKCk9PntFcygpO2RDZT1VcC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBtQ2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLGFnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gR1R0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGdDZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIF9DZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxhZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiB5Q2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1xYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9R1R0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gV1R0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9oSzpqUjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxtQ2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsR1R0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxfQ2UoZSxuLGQyKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goeUNlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxnQ2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBZVHQ9TSgoKT0+e3JUKCk7RXMoKTtUcygpO3VUKCk7eUsoKX0pO2Z1bmN0aW9uIHZDZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24geENlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZ2Q2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24galR0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLHhDZShlLHQscj09bnVsbD8iIjpyKSl9dmFyIFhUdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gd0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uICRUdChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/d0NlKGQyKHRoaXMsInRleHQiLGUpKTpiQ2UoZT09bnVsbD8iIjplKyIiKSl9dmFyIEtUdD1NKCgpPT57dVQoKX0pO2Z1bmN0aW9uIFNDZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1lLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24gTUNlKGUpe3ZhciB0LHI7ZnVuY3Rpb24gbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKHQ9KHI9aSkmJlNDZShpKSksdH1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIFpUdChlKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQsTUNlKGUpKX12YXIgSlR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBRVHQoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9WFIoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PVFpKGwsdCk7c2cobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyB1YShuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgdEN0PU0oKCk9PntHcCgpO1RzKCl9KTtmdW5jdGlvbiBlQ3QoKXt2YXIgZSx0LHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7LS1pPT09MCYmbygpfX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9cWEodGhpcyxuKSx1PWMub247dSE9PWUmJih0PShlPXUpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gocyksdC5fLmludGVycnVwdC5wdXNoKHMpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX12YXIgckN0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gdWEoZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIHZLKGUpe3JldHVybiBVcCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gWFIoKXtyZXR1cm4rK0VDZX12YXIgRUNlLG0yLEdwPU0oKCk9PntFcygpO2JUdCgpO1NUdCgpO0VUdCgpO0NUdCgpO1BUdCgpO0xUdCgpO1JUdCgpO0RUdCgpO3pUdCgpO0JUdCgpO1ZUdCgpO3FUdCgpO1lUdCgpO1hUdCgpO0tUdCgpO0pUdCgpO3RDdCgpO3VUKCk7ckN0KCk7RUNlPTA7bTI9VXAucHJvdG90eXBlO3VhLnByb3RvdHlwZT12Sy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVhLHNlbGVjdDpGVHQsc2VsZWN0QWxsOkhUdCxmaWx0ZXI6SVR0LG1lcmdlOmtUdCxzZWxlY3Rpb246VVR0LHRyYW5zaXRpb246UVR0LGNhbGw6bTIuY2FsbCxub2RlczptMi5ub2Rlcyxub2RlOm0yLm5vZGUsc2l6ZTptMi5zaXplLGVtcHR5Om0yLmVtcHR5LGVhY2g6bTIuZWFjaCxvbjpOVHQsYXR0cjp4VHQsYXR0clR3ZWVuOndUdCxzdHlsZTpXVHQsc3R5bGVUd2VlbjpqVHQsdGV4dDokVHQsdGV4dFR3ZWVuOlpUdCxyZW1vdmU6T1R0LHR3ZWVuOnZUdCxkZWxheTpNVHQsZHVyYXRpb246VFR0LGVhc2U6QVR0LGVuZDplQ3R9fSk7ZnVuY3Rpb24gVENlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIHhLLnRpbWU9ZjIoKSx4SztyZXR1cm4gcn1mdW5jdGlvbiBuQ3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgdWE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1YUigpLChyPXhLKS50aW1lPWYyKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmc2cobCxlLHQsYyxhLHJ8fFRDZShsLHQpKTtyZXR1cm4gbmV3IHVhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciB4SyxpQ3Q9TSgoKT0+e0dwKCk7VHMoKTtJXygpO21LKCk7eEs9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBvQ3Q9TSgoKT0+e0VzKCk7eVR0KCk7aUN0KCk7VXAucHJvdG90eXBlLmludGVycnVwdD1fVHQ7VXAucHJvdG90eXBlLnRyYW5zaXRpb249bkN0fSk7dmFyIGFDdD1NKCgpPT57R3AoKTtUcygpfSk7dmFyIHNDdD1NKCgpPT57b0N0KCk7R3AoKTthQ3QoKTtfSygpfSk7ZnVuY3Rpb24gYksoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBsQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGNDdChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfXZhciB1Q3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdLKCl7d3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaFQoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBoQ3Q9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBmVChlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBJQ2UoKXtyZXR1cm4hd3IuYnV0dG9ufWZ1bmN0aW9uIExDZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBNSyhlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIEVLKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gbUN0KGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gZ0N0KCl7cmV0dXJuIFRLKCRSKX1mdW5jdGlvbiBfQ3QoKXtyZXR1cm4gVEsoS1IpfWZ1bmN0aW9uIHlDdCgpe3JldHVybiBUSyhDQ2UpfWZ1bmN0aW9uIFRLKGUpe3ZhciB0PUxDZSxyPUlDZSxuPVc1KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxpPTYsbztmdW5jdGlvbiBhKGYpe3ZhciBwPWYucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtmVCgib3ZlcmxheSIpXSk7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KS5tZXJnZShwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9TUsodGhpcykuZXh0ZW50O3FwKHRoaXMpLmF0dHIoIngiLGdbMF1bMF0pLmF0dHIoInkiLGdbMF1bMV0pLmF0dHIoIndpZHRoIixnWzFdWzBdLWdbMF1bMF0pLmF0dHIoImhlaWdodCIsZ1sxXVsxXS1nWzBdWzFdKX0pLGYuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbZlQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsV3Auc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGQ9Zi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlfSk7ZC5leGl0KCkucmVtb3ZlKCksZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihnKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitnLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGcpe3JldHVybiBXcFtnLnR5cGVdfSksZi5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9YS5tb3ZlPWZ1bmN0aW9uKGYscCl7Zi5zZWxlY3Rpb24/Zi5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxnPWQuX19icnVzaCxfPWwoZCxhcmd1bWVudHMpLHk9Zy5zZWxlY3Rpb24seD1lLmlucHV0KHR5cGVvZiBwPT0iZnVuY3Rpb24iP3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOnAsZy5leHRlbnQpLGI9X3koeSx4KTtmdW5jdGlvbiBTKEMpe2cuc2VsZWN0aW9uPUM9PT0xJiZFSyh4KT9udWxsOmIoQykscy5jYWxsKGQpLF8uYnJ1c2goKX1yZXR1cm4geSYmeD9TOlMoMSl9KTpmLmVhY2goZnVuY3Rpb24oKXt2YXIgZD10aGlzLGc9YXJndW1lbnRzLF89ZC5fX2JydXNoLHk9ZS5pbnB1dCh0eXBlb2YgcD09ImZ1bmN0aW9uIj9wLmFwcGx5KGQsZyk6cCxfLmV4dGVudCkseD1sKGQsZykuYmVmb3Jlc3RhcnQoKTtwMihkKSxfLnNlbGVjdGlvbj15PT1udWxsfHxFSyh5KT9udWxsOnkscy5jYWxsKGQpLHguc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9O2Z1bmN0aW9uIHMoKXt2YXIgZj1xcCh0aGlzKSxwPU1LKHRoaXMpLnNlbGVjdGlvbjtwPyhmLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixwWzBdWzBdKS5hdHRyKCJ5IixwWzBdWzFdKS5hdHRyKCJ3aWR0aCIscFsxXVswXS1wWzBdWzBdKS5hdHRyKCJoZWlnaHQiLHBbMV1bMV0tcFswXVsxXSksZi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoLTFdPT09ImUiP3BbMV1bMF0taS8yOnBbMF1bMF0taS8yfSkuYXR0cigieSIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVswXT09PSJzIj9wWzFdWzFdLWkvMjpwWzBdWzFdLWkvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbihkKXtyZXR1cm4gZC50eXBlPT09Im4ifHxkLnR5cGU9PT0icyI/cFsxXVswXS1wWzBdWzBdK2k6aX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZT09PSJlInx8ZC50eXBlPT09InciP3BbMV1bMV0tcFswXVsxXStpOml9KSk6Zi5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwoZixwKXtyZXR1cm4gZi5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKGYscCl9ZnVuY3Rpb24gYyhmLHApe3RoaXMudGhhdD1mLHRoaXMuYXJncz1wLHRoaXMuc3RhdGU9Zi5fX2JydXNoLHRoaXMuYWN0aXZlPTB9Yy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmKXskJChuZXcgY0N0KGEsZixlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG4uYXBwbHksbixbZix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiB1KCl7aWYod3IudG91Y2hlcyl7aWYod3IuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHdyLnRvdWNoZXMubGVuZ3RoKXJldHVybiBoVCgpfWVsc2UgaWYobylyZXR1cm47aWYoIXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgZj10aGlzLHA9d3IudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsZD0od3IubWV0YUtleT9wPSJvdmVybGF5IjpwKT09PSJzZWxlY3Rpb24iP2ZDdDp3ci5hbHRLZXk/XzI6ZzIsZz1lPT09S1I/bnVsbDpBQ2VbcF0sXz1lPT09JFI/bnVsbDpQQ2VbcF0seT1NSyhmKSx4PXkuZXh0ZW50LGI9eS5zZWxlY3Rpb24sUz14WzBdWzBdLEMsUCxrPXhbMF1bMV0sTyxELEI9eFsxXVswXSxJLEwsUj14WzFdWzFdLEYseixVLFcsWixydD1nJiZfJiZ3ci5zaGlmdEtleSxvdCxzdCxTdD1QUihmKSxidD1TdCxNdD1sKGYsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO3A9PT0ib3ZlcmxheSI/eS5zZWxlY3Rpb249Yj1bW0M9ZT09PUtSP1M6U3RbMF0sTz1lPT09JFI/azpTdFsxXV0sW0k9ZT09PUtSP0I6QyxGPWU9PT0kUj9SOk9dXTooQz1iWzBdWzBdLE89YlswXVsxXSxJPWJbMV1bMF0sRj1iWzFdWzFdKSxQPUMsRD1PLEw9SSx6PUY7dmFyIGx0PXFwKGYpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEt0PWx0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFdwW3BdKTtpZih3ci50b3VjaGVzKWx0Lm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGN0LCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGV0LCEwKTtlbHNle3ZhciBfdD1xcCh3ci52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZHQsITApLm9uKCJrZXl1cC5icnVzaCIscSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsY3QsITApLm9uKCJtb3VzZXVwLmJydXNoIixldCwhMCk7WiQod3Iudmlldyl9d0soKSxwMihmKSxzLmNhbGwoZiksTXQuc3RhcnQoKTtmdW5jdGlvbiBjdCgpe3ZhciBwdD1QUihmKTtydCYmIW90JiYhc3QmJihNYXRoLmFicyhwdFswXS1idFswXSk+TWF0aC5hYnMocHRbMV0tYnRbMV0pP3N0PSEwOm90PSEwKSxidD1wdCxaPSEwLGhUKCksWCgpfWZ1bmN0aW9uIFgoKXt2YXIgcHQ7c3dpdGNoKFU9YnRbMF0tU3RbMF0sVz1idFsxXS1TdFsxXSxkKXtjYXNlIFNLOmNhc2UgZkN0OntnJiYoVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1JLFUpKSxQPUMrVSxMPUkrVSksXyYmKFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItRixXKSksRD1PK1csej1GK1cpO2JyZWFrfWNhc2UgZzI6e2c8MD8oVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1DLFUpKSxQPUMrVSxMPUkpOmc+MCYmKFU9TWF0aC5tYXgoUy1JLE1hdGgubWluKEItSSxVKSksUD1DLEw9SStVKSxfPDA/KFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItTyxXKSksRD1PK1csej1GKTpfPjAmJihXPU1hdGgubWF4KGstRixNYXRoLm1pbihSLUYsVykpLEQ9Tyx6PUYrVyk7YnJlYWt9Y2FzZSBfMjp7ZyYmKFA9TWF0aC5tYXgoUyxNYXRoLm1pbihCLEMtVSpnKSksTD1NYXRoLm1heChTLE1hdGgubWluKEIsSStVKmcpKSksXyYmKEQ9TWF0aC5tYXgoayxNYXRoLm1pbihSLE8tVypfKSksej1NYXRoLm1heChrLE1hdGgubWluKFIsRitXKl8pKSk7YnJlYWt9fUw8UCYmKGcqPS0xLHB0PUMsQz1JLEk9cHQscHQ9UCxQPUwsTD1wdCxwIGluIHBDdCYmS3QuYXR0cigiY3Vyc29yIixXcFtwPXBDdFtwXV0pKSx6PEQmJihfKj0tMSxwdD1PLE89RixGPXB0LHB0PUQsRD16LHo9cHQscCBpbiBkQ3QmJkt0LmF0dHIoImN1cnNvciIsV3BbcD1kQ3RbcF1dKSkseS5zZWxlY3Rpb24mJihiPXkuc2VsZWN0aW9uKSxvdCYmKFA9YlswXVswXSxMPWJbMV1bMF0pLHN0JiYoRD1iWzBdWzFdLHo9YlsxXVsxXSksKGJbMF1bMF0hPT1QfHxiWzBdWzFdIT09RHx8YlsxXVswXSE9PUx8fGJbMV1bMV0hPT16KSYmKHkuc2VsZWN0aW9uPVtbUCxEXSxbTCx6XV0scy5jYWxsKGYpLE10LmJydXNoKCkpfWZ1bmN0aW9uIGV0KCl7aWYod0soKSx3ci50b3VjaGVzKXtpZih3ci50b3VjaGVzLmxlbmd0aClyZXR1cm47byYmY2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbH0sNTAwKSxsdC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIEokKHdyLnZpZXcsWiksX3Qub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2x0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksS3QuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KSx5LnNlbGVjdGlvbiYmKGI9eS5zZWxlY3Rpb24pLEVLKGIpJiYoeS5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZikpLE10LmVuZCgpfWZ1bmN0aW9uIGR0KCl7c3dpdGNoKHdyLmtleUNvZGUpe2Nhc2UgMTY6e3J0PWcmJl87YnJlYWt9Y2FzZSAxODp7ZD09PWcyJiYoZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMixYKCkpO2JyZWFrfWNhc2UgMzI6eyhkPT09ZzJ8fGQ9PT1fMikmJihnPDA/ST1MLVU6Zz4wJiYoQz1QLVUpLF88MD9GPXotVzpfPjAmJihPPUQtVyksZD1TSyxLdC5hdHRyKCJjdXJzb3IiLFdwLnNlbGVjdGlvbiksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfWZ1bmN0aW9uIHEoKXtzd2l0Y2god3Iua2V5Q29kZSl7Y2FzZSAxNjp7cnQmJihvdD1zdD1ydD0hMSxYKCkpO2JyZWFrfWNhc2UgMTg6e2Q9PT1fMiYmKGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMixYKCkpO2JyZWFrfWNhc2UgMzI6e2Q9PT1TSyYmKHdyLmFsdEtleT8oZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMik6KGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMiksS3QuYXR0cigiY3Vyc29yIixXcFtwXSksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfX1mdW5jdGlvbiBoKCl7dmFyIGY9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBmLmV4dGVudD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmLmRpbT1lLGZ9cmV0dXJuIGEuZXh0ZW50PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoW1srZlswXVswXSwrZlswXVsxXV0sWytmWzFdWzBdLCtmWzFdWzFdXV0pLGEpOnR9LGEuZmlsdGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoISFmKSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2YsYSk6aX0sYS5vbj1mdW5jdGlvbigpe3ZhciBmPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBmPT09bj9hOmZ9LGF9dmFyIGZDdCxTSyxnMixfMiwkUixLUixDQ2UsV3AscEN0LGRDdCxBQ2UsUENlLHZDdD1NKCgpPT57RiQoKTtQNXQoKTtyVCgpO0VzKCk7c0N0KCk7bEN0KCk7dUN0KCk7aEN0KCk7ZkN0PXtuYW1lOiJkcmFnIn0sU0s9e25hbWU6InNwYWNlIn0sZzI9e25hbWU6ImhhbmRsZSJ9LF8yPXtuYW1lOiJjZW50ZXIifSwkUj17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKGZUKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlJiZbW2VbMF0sdFswXVsxXV0sW2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sS1I9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChmVCksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LENDZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoZlQpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxXcD17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0scEN0PXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxkQ3Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LEFDZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxQQ2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX19KTt2YXIgeEN0PU0oKCk9Pnt2Q3QoKX0pO2Z1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciB2eT1NKCgpPT57fSk7ZnVuY3Rpb24gQ0soZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9a0NlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24ga0NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBsZyhlKHQpLHIpfX12YXIgQUs9TSgoKT0+e3Z5KCl9KTt2YXIgYkN0LFJDZSxOQ2UsUEs9TSgoKT0+e3Z5KCk7QUsoKTtiQ3Q9Q0sobGcpLFJDZT1iQ3QucmlnaHQsTkNlPWJDdC5sZWZ0fSk7dmFyIElLPU0oKCk9Pnt9KTt2YXIgd0N0PU0oKCk9PntJSygpfSk7dmFyIFNDdD1NKCgpPT57fSk7dmFyIHkyPU0oKCk9Pnt9KTt2YXIgTEs9TSgoKT0+e3kyKCl9KTt2YXIga0s9TSgoKT0+e0xLKCl9KTt2YXIgUks9TSgoKT0+e30pO3ZhciBNQ3QsT0NlLHpDZSxOSz1NKCgpPT57TUN0PUFycmF5LnByb3RvdHlwZSxPQ2U9TUN0LnNsaWNlLHpDZT1NQ3QubWFwfSk7dmFyIEVDdD1NKCgpPT57fSk7dmFyIFRDdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFQoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIERLPU0oKCk9Pnt9KTt2YXIgU2xuLE1sbixFbG4sT0s9TSgoKT0+e1Nsbj1NYXRoLnNxcnQoNTApLE1sbj1NYXRoLnNxcnQoMTApLEVsbj1NYXRoLnNxcnQoMil9KTt2YXIgeks9TSgoKT0+e30pO3ZhciBDQ3Q9TSgoKT0+e05LKCk7UEsoKTtFQ3QoKTtSSygpO1RDdCgpO0RLKCk7T0soKTt6SygpfSk7dmFyIEpSPU0oKCk9Pnt5MigpfSk7dmFyIFBDdD1NKCgpPT57TksoKTt2eSgpO3kyKCk7SlIoKX0pO3ZhciBJQ3Q9TSgoKT0+e2tLKCl9KTt2YXIgTEN0PU0oKCk9Pnt9KTt2YXIga0N0PU0oKCk9Pnt5MigpfSk7dmFyIFJDdD1NKCgpPT57dnkoKTt5MigpO0pSKCl9KTt2YXIgTkN0PU0oKCk9Pnt9KTt2YXIgRks9TSgoKT0+e30pO3ZhciBEQ3Q9TSgoKT0+e30pO3ZhciBPQ3Q9TSgoKT0+e3Z5KCl9KTt2YXIgekN0PU0oKCk9Pnt9KTt2YXIgRkN0PU0oKCk9Pnt9KTt2YXIgQks9TSgoKT0+e0ZLKCl9KTt2YXIgQkN0PU0oKCk9PntCSygpfSk7dmFyIEhDdD1NKCgpPT57UEsoKTt2eSgpO0FLKCk7d0N0KCk7U0N0KCk7a0soKTtSSygpO0NDdCgpO1BDdCgpO0lDdCgpO3pLKCk7TEN0KCk7a0N0KCk7UkN0KCk7TkN0KCk7RksoKTtJSygpO0RDdCgpO0pSKCk7REsoKTtPQ3QoKTt6Q3QoKTtGQ3QoKTtPSygpO0JLKCk7TEsoKTtCQ3QoKX0pO3ZhciBISyxWSyxWQ3QsZFQsVUsscUssR0s9TSgoKT0+e0hLPU1hdGguY29zLFZLPU1hdGguc2luLFZDdD1NYXRoLlBJLGRUPVZDdC8yLFVLPVZDdCoyLHFLPU1hdGgubWF4fSk7ZnVuY3Rpb24gV0NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gVUN0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1wVChhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChwVChhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9cUsoMCxVSy1lKmEpL3AsXz1wP2U6VUsvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cUsoMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPVdDZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgcUN0PU0oKCk9PntIQ3QoKTtHSygpfSk7dmFyIEdDdCxXQ3Q9TSgoKT0+e0dDdD1BcnJheS5wcm90b3R5cGUuc2xpY2V9KTtmdW5jdGlvbiBRUihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFlDdD1NKCgpPT57fSk7ZnVuY3Rpb24gaksoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBqQ3QoKXtyZXR1cm4gbmV3IGpLfXZhciBXSyxZSyx4eSxZQ2UsWEssWEN0PU0oKCk9PntXSz1NYXRoLlBJLFlLPTIqV0sseHk9MWUtNixZQ2U9WUsteHk7aksucHJvdG90eXBlPWpDdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpLLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD54eSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnh5KXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFdLLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnh5JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnh5fHxNYXRoLmFicyh0aGlzLl95MS1jKT54eSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJVlLK1lLKSxoPllDZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD54eSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49V0spKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtYSz1qQ3R9KTt2YXIgJEN0PU0oKCk9PntYQ3QoKX0pO2Z1bmN0aW9uIGpDZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gWENlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiAkQ2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIEtDZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIFpDZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBLQ3QoKXt2YXIgZT1qQ2UsdD1YQ2Uscj0kQ2Usbj1LQ2UsaT1aQ2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUdDdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLWRULHA9aS5hcHBseSh0aGlzLGwpLWRULGQ9aCpISyhmKSxnPWgqVksoZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLWRULHg9aS5hcHBseSh0aGlzLGwpLWRUO2lmKG98fChvPXM9WEsoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKkhLKHkpLF8qVksoeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpRUigrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9dmFyIFpDdD1NKCgpPT57V0N0KCk7WUN0KCk7R0soKTskQ3QoKX0pO3ZhciBKQ3Q9TSgoKT0+e3FDdCgpO1pDdCgpfSk7ZnVuY3Rpb24gdE4oKXt9ZnVuY3Rpb24gUUN0KGUsdCl7dmFyIHI9bmV3IHROO2lmKGUgaW5zdGFuY2VvZiB0TillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgbGwsYnksZU49TSgoKT0+e2xsPSIkIjt0Ti5wcm90b3R5cGU9UUN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dE4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBsbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tsbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbbGwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bGwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09bGwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWxsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtieT1RQ3R9KTtmdW5jdGlvbiByQXQoKXt2YXIgZT1bXSx0PVtdLHIsbixpO2Z1bmN0aW9uIG8ocyxsLGMsdSl7aWYobD49ZS5sZW5ndGgpcmV0dXJuIHIhPW51bGwmJnMuc29ydChyKSxuIT1udWxsP24ocyk6cztmb3IodmFyIGg9LTEsZj1zLmxlbmd0aCxwPWVbbCsrXSxkLGcsXz1ieSgpLHkseD1jKCk7KytoPGY7KSh5PV8uZ2V0KGQ9cChnPXNbaF0pKyIiKSk/eS5wdXNoKGcpOl8uc2V0KGQsW2ddKTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGIsUyl7dSh4LFMsbyhiLGwsYyx1KSl9KSx4fWZ1bmN0aW9uIGEocyxsKXtpZigrK2w+ZS5sZW5ndGgpcmV0dXJuIHM7dmFyIGMsdT10W2wtMV07cmV0dXJuIG4hPW51bGwmJmw+PWUubGVuZ3RoP2M9cy5lbnRyaWVzKCk6KGM9W10scy5lYWNoKGZ1bmN0aW9uKGgsZil7Yy5wdXNoKHtrZXk6Zix2YWx1ZXM6YShoLGwpfSl9KSksdSE9bnVsbD9jLnNvcnQoZnVuY3Rpb24oaCxmKXtyZXR1cm4gdShoLmtleSxmLmtleSl9KTpjfXJldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLEpDZSxRQ2UpfSxtYXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLHRBdCxlQXQpfSxlbnRyaWVzOmZ1bmN0aW9uKHMpe3JldHVybiBhKG8ocywwLHRBdCxlQXQpLDApfSxrZXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGUucHVzaChzKSxpfSxzb3J0S2V5czpmdW5jdGlvbihzKXtyZXR1cm4gdFtlLmxlbmd0aC0xXT1zLGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHI9cyxpfSxyb2xsdXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG49cyxpfX19ZnVuY3Rpb24gSkNlKCl7cmV0dXJue319ZnVuY3Rpb24gUUNlKGUsdCxyKXtlW3RdPXJ9ZnVuY3Rpb24gdEF0KCl7cmV0dXJuIGJ5KCl9ZnVuY3Rpb24gZUF0KGUsdCxyKXtlLnNldCh0LHIpfXZhciBuQXQ9TSgoKT0+e2VOKCl9KTtmdW5jdGlvbiByTigpe31mdW5jdGlvbiBpQXQoZSx0KXt2YXIgcj1uZXcgck47aWYoZSBpbnN0YW5jZW9mIHJOKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciB3eSxvQXQsYUF0PU0oKCk9PntlTigpO3d5PWJ5LnByb3RvdHlwZTtyTi5wcm90b3R5cGU9aUF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ck4saGFzOnd5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbbGwrZV09ZSx0aGlzfSxyZW1vdmU6d3kucmVtb3ZlLGNsZWFyOnd5LmNsZWFyLHZhbHVlczp3eS5rZXlzLHNpemU6d3kuc2l6ZSxlbXB0eTp3eS5lbXB0eSxlYWNoOnd5LmVhY2h9O29BdD1pQXR9KTtmdW5jdGlvbiBzQXQoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBsQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGNBdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIHVBdD1NKCgpPT57fSk7ZnVuY3Rpb24gaEF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBmQXQ9TSgoKT0+e30pO3ZhciBwQXQ9TSgoKT0+e25BdCgpO2FBdCgpO2VOKCk7bEF0KCk7dUF0KCk7ZkF0KCl9KTtmdW5jdGlvbiBZcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gY2coZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG5OPU0oKCk9Pnt9KTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB4MihlKXt2YXIgdDtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9dEFlLmV4ZWMoZSkpPyh0PXBhcnNlSW50KHRbMV0sMTYpLG5ldyB0byh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSkpOih0PWVBZS5leGVjKGUpKT9tQXQocGFyc2VJbnQodFsxXSwxNikpOih0PXJBZS5leGVjKGUpKT9uZXcgdG8odFsxXSx0WzJdLHRbM10sMSk6KHQ9bkFlLmV4ZWMoZSkpP25ldyB0byh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1pQWUuZXhlYyhlKSk/Z0F0KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PW9BZS5leGVjKGUpKT9nQXQodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9YUFlLmV4ZWMoZSkpP19BdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXNBZS5leGVjKGUpKT9fQXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpkQXQuaGFzT3duUHJvcGVydHkoZSk/bUF0KGRBdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IHRvKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gbUF0KGUpe3JldHVybiBuZXcgdG8oZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIGdBdChlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHRvKGUsdCxyLG4pfWZ1bmN0aW9uIGdUKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGZ8fChlPXgyKGUpKSxlPyhlPWUucmdiKCksbmV3IHRvKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB0b31mdW5jdGlvbiBLSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z1QoZSk6bmV3IHRvKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiB0byhlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gX0F0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgSmgoZSx0LHIsbil9ZnVuY3Rpb24gbEFlKGUpe2lmKGUgaW5zdGFuY2VvZiBKaClyZXR1cm4gbmV3IEpoKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIHRmfHwoZT14MihlKSksIWUpcmV0dXJuIG5ldyBKaDtpZihlIGluc3RhbmNlb2YgSmgpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSmgoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bEFlKGUpOm5ldyBKaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gSmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRLKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciB1ZyxTeSx2MixtVCxRaCx0QWUsZUFlLHJBZSxuQWUsaUFlLG9BZSxhQWUsc0FlLGRBdCxpTj1NKCgpPT57bk4oKTt1Zz0uNyxTeT0xL3VnLHYyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixtVD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixRaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsdEFlPS9eIyhbMC05YS1mXXszfSkkLyxlQWU9L14jKFswLTlhLWZdezZ9KSQvLHJBZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbdjIsdjIsdjJdKyJcXCkkIiksbkFlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tRaCxRaCxRaF0rIlxcKSQiKSxpQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2Mix2Mix2MixtVF0rIlxcKSQiKSxvQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tRaCxRaCxRaCxtVF0rIlxcKSQiKSxhQWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW21ULFFoLFFoXSsiXFwpJCIpLHNBZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW21ULFFoLFFoLG1UXSsiXFwpJCIpLGRBdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtZcCh0Zix4Mix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pO1lwKHRvLEtLLGNnKHRmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1N5Ok1hdGgucG93KFN5LGUpLG5ldyB0byh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91ZzpNYXRoLnBvdyh1ZyxlKSxuZXcgdG8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7WXAoSmgsWkssY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgdG8oJEsoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksJEsoZSxpLG4pLCRLKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpfSk7dmFyIG9OLGFOLEpLPU0oKCk9PntvTj1NYXRoLlBJLzE4MCxhTj0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIG5aKGUpe2lmKGUgaW5zdGFuY2VvZiBqcClyZXR1cm4gbmV3IGpwKGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhnKXt2YXIgdD1lLmgqb047cmV0dXJuIG5ldyBqcChlLmwsTWF0aC5jb3ModCkqZS5jLE1hdGguc2luKHQpKmUuYyxlLm9wYWNpdHkpfWUgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciByPXJaKGUuciksbj1yWihlLmcpLGk9clooZS5iKSxvPVFLKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkveUF0KSxhPVFLKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS92QXQpLHM9UUsoKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL3hBdCk7cmV0dXJuIG5ldyBqcCgxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLXMpLGUub3BhY2l0eSl9ZnVuY3Rpb24gbE4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP25aKGUpOm5ldyBqcChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24ganAoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFFLKGUpe3JldHVybiBlPmNBZT9NYXRoLnBvdyhlLDEvMyk6ZS93QXQrYkF0fWZ1bmN0aW9uIHRaKGUpe3JldHVybiBlPmIyP2UqZSplOndBdCooZS1iQXQpfWZ1bmN0aW9uIGVaKGUpe3JldHVybiAyNTUqKGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gclooZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gdUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBoZylyZXR1cm4gbmV3IGhnKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7ZSBpbnN0YW5jZW9mIGpwfHwoZT1uWihlKSk7dmFyIHQ9TWF0aC5hdGFuMihlLmIsZS5hKSphTjtyZXR1cm4gbmV3IGhnKHQ8MD90KzM2MDp0LE1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpLGUubCxlLm9wYWNpdHkpfWZ1bmN0aW9uIGlaKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT91QWUoZSk6bmV3IGhnKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoZyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHNOLHlBdCx2QXQseEF0LGJBdCxiMix3QXQsY0FlLFNBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7c049MTgseUF0PS45NTA0Nyx2QXQ9MSx4QXQ9MS4wODg4MyxiQXQ9NC8yOSxiMj02LzI5LHdBdD0zKmIyKmIyLGNBZT1iMipiMipiMjtZcChqcCxsTixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqcCh0aGlzLmwrc04qKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpwKHRoaXMubC1zTiooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIGU9dkF0KnRaKGUpLHQ9eUF0KnRaKHQpLHI9eEF0KnRaKHIpLG5ldyB0byhlWigzLjI0MDQ1NDIqdC0xLjUzNzEzODUqZS0uNDk4NTMxNCpyKSxlWigtLjk2OTI2Nip0KzEuODc2MDEwOCplKy4wNDE1NTYqciksZVooLjA1NTY0MzQqdC0uMjA0MDI1OSplKzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKTtZcChoZyxpWixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZyh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTiooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhnKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNOKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG5aKHRoaXMpLnJnYigpfX0pKX0pO2Z1bmN0aW9uIGhBZShlKXtpZihlIGluc3RhbmNlb2YgTXkpcmV0dXJuIG5ldyBNeShlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPShUQXQqbitNQXQqdC1FQXQqcikvKFRBdCtNQXQtRUF0KSxvPW4taSxhPShfVCooci1pKS1hWipvKS9jTixzPU1hdGguc3FydChhKmErbypvKS8oX1QqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSphTi0xMjA6TmFOO3JldHVybiBuZXcgTXkobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdU4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2hBZShlKTpuZXcgTXkoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIE15KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgQ0F0LG9aLGFaLGNOLF9ULE1BdCxFQXQsVEF0LEFBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7Q0F0PS0uMTQ4NjEsb1o9MS43ODI3NyxhWj0tLjI5MjI3LGNOPS0uOTA2NDksX1Q9MS45NzI5NCxNQXQ9X1QqY04sRUF0PV9UKm9aLFRBdD1vWiphWi1jTipDQXQ7WXAoTXksdU4sY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpvTix0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgdG8oMjU1Kih0K3IqKENBdCpuK29aKmkpKSwyNTUqKHQrciooYVoqbitjTippKSksMjU1Kih0K3IqKF9UKm4pKSx0aGlzLm9wYWNpdHkpfX0pKX0pO3ZhciBQQXQ9TSgoKT0+e2lOKCk7U0F0KCk7QUF0KCl9KTtmdW5jdGlvbiBMQXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGhOKHIpfWZ1bmN0aW9uIGhOKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIHBBZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGRBZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIElBdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09ZkFlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgZkFlLGtBdCxSQXQ9TSgoKT0+e2ZBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtoTi5wcm90b3R5cGU9TEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aE4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1wQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1kQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUlBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUlBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgaE4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O2tBdD1MQXR9KTt2YXIgTkF0PU0oKCk9PntSQXQoKX0pO2Z1bmN0aW9uIE9BdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBmTihyKX1mdW5jdGlvbiBmTihlKXt0aGlzLl89ZX1mdW5jdGlvbiBnQWUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBfQWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBEQXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPW1BZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIG1BZSxzWix6QXQ9TSgoKT0+e21BZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmTi5wcm90b3R5cGU9T0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zk4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1nQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1fQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPURBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPURBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgZk4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O3NaPU9BdH0pO3ZhciBGQXQ9TSgoKT0+e3pBdCgpfSk7dmFyIHBOLGxaLGNaPU0oKCk9PntwTj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbFo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnBOLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBkTihlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxsWi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6bFpbdF0sbG9jYWw6ZX06ZX12YXIgdVo9TSgoKT0+e2NaKCl9KTtmdW5jdGlvbiB5QWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1wTiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cE4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHZBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBtTihlKXt2YXIgdD1kTihlKTtyZXR1cm4odC5sb2NhbD92QWU6eUFlKSh0KX12YXIgaFo9TSgoKT0+e3VaKCk7Y1ooKX0pO2Z1bmN0aW9uIHhBZSgpe31mdW5jdGlvbiBnTihlKXtyZXR1cm4gZT09bnVsbD94QWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgZlo9TSgoKT0+e30pO2Z1bmN0aW9uIEJBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Z04oZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBIQXQ9TSgoKT0+e2VmKCk7ZlooKX0pO2Z1bmN0aW9uIGJBZSgpe3JldHVybltdfWZ1bmN0aW9uIFZBdChlKXtyZXR1cm4gZT09bnVsbD9iQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVUF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxQXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVZBdChlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgcGkobixpKX12YXIgR0F0PU0oKCk9PntlZigpO1VBdCgpfSk7ZnVuY3Rpb24gV0F0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBZQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGpBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9V0F0KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBYQXQ9TSgoKT0+e2VmKCk7WUF0KCl9KTtmdW5jdGlvbiBfTihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgcFo9TSgoKT0+e30pO2Z1bmN0aW9uICRBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoX04pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHlUKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBkWj1NKCgpPT57cFooKTtlZigpO3lULnByb3RvdHlwZT17Y29uc3RydWN0b3I6eVQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBLQXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBaQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHdBZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgeVQoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIFNBZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPUpBdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPUpBdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB5VChlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFFBdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/U0FlOndBZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUtBdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgcGkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBKQXQsdDR0PU0oKCk9PntlZigpO2RaKCk7WkF0KCk7SkF0PSIkIn0pO2Z1bmN0aW9uIGU0dCgpe3JldHVybiBuZXcgcGkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChfTiksdGhpcy5fcGFyZW50cyl9dmFyIHI0dD1NKCgpPT57cFooKTtlZigpfSk7ZnVuY3Rpb24gbjR0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBpNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIG80dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgcGkoYSx0aGlzLl9wYXJlbnRzKX12YXIgYTR0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gczR0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgbDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjNHQoZSl7ZXx8KGU9TUFlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IHBpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBNQWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHU0dD1NKCgpPT57ZWYoKX0pO2Z1bmN0aW9uIGg0dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgZjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwNHQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgZDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBtNHQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBnNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIF80dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIHk0dD1NKCgpPT57fSk7ZnVuY3Rpb24gdjR0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciB4NHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGI0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHc0dD1NKCgpPT57fSk7ZnVuY3Rpb24gRUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBUQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBDQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBBQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gUEFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBJQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gUzR0KGUsdCl7dmFyIHI9ZE4oZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP1RBZTpFQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9JQWU6UEFlOnIubG9jYWw/QUFlOkNBZSkocix0KSl9dmFyIE00dD1NKCgpPT57dVooKX0pO2Z1bmN0aW9uIHlOKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgbVo9TSgoKT0+e30pO2Z1bmN0aW9uIExBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBrQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBSQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gRTR0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9MQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UkFlOmtBZSkoZSx0LHI9PW51bGw/IiI6cikpOk5BZSh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBOQWUoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHx5TihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgVDR0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gREFlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBPQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIHpBZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBDNHQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9EQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ekFlOk9BZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIEE0dD1NKCgpPT57fSk7ZnVuY3Rpb24gUDR0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBnWihlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBJNHQoZSl9ZnVuY3Rpb24gSTR0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1QNHQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBMNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBrNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBGQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7TDR0KHRoaXMsZSl9fWZ1bmN0aW9uIEJBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtrNHQodGhpcyxlKX19ZnVuY3Rpb24gSEFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP0w0dDprNHQpKHRoaXMsZSl9fWZ1bmN0aW9uIFI0dChlLHQpe3ZhciByPVA0dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1nWih0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9IQWU6dD9GQWU6QkFlKShyLHQpKX12YXIgTjR0PU0oKCk9PntJNHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gVkFlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBVQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBxQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEQ0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9WQWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP3FBZTpVQWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgTzR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHQWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBXQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gWUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gejR0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0dBZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/WUFlOldBZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqQWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gQjR0KCl7cmV0dXJuIHRoaXMuZWFjaChqQWUpfXZhciBINHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhBZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFY0dCgpe3JldHVybiB0aGlzLmVhY2goWEFlKX12YXIgVTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxNHQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgRzR0PU0oKCk9PntoWigpfSk7ZnVuY3Rpb24gJEFlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVzR0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKSxuPXQ9PW51bGw/JEFlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6Z04odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBZNHQ9TSgoKT0+e2haKCk7ZlooKX0pO2Z1bmN0aW9uIEtBZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGo0dCgpe3JldHVybiB0aGlzLmVhY2goS0FlKX12YXIgWDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBaQWUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEpBZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gJDR0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP0pBZTpaQWUpfXZhciBLNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFo0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIEo0dD1NKCgpPT57fSk7ZnVuY3Rpb24gUUFlKGUsdCxyKXtyZXR1cm4gZT1lUHQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gZVB0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9c247c249bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7c249aX19fWZ1bmN0aW9uIHQ0ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gZTRlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIHI0ZShlLHQscil7dmFyIG49dFB0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UUFlOmVQdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiByUHQoZSx0LHIpe3ZhciBuPXQ0ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/cjRlOmU0ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiB2TihlLHQscixuKXt2YXIgaT1zbjtlLnNvdXJjZUV2ZW50PXNuLHNuPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtzbj1pfX12YXIgdFB0LHNuLFE0dCx4Tj1NKCgpPT57dFB0PXt9LHNuPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFE0dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBRNHR8fCh0UHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gblB0KGUsdCxyKXt2YXIgbj15TihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBuNGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gblB0KHRoaXMsZSx0KX19ZnVuY3Rpb24gaTRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5QdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBpUHQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9pNGU6bjRlKShlLHQpKX12YXIgb1B0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gcGkoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gbzRlKCl7cmV0dXJuIG5ldyBwaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLF9aKX12YXIgX1osZWY9TSgoKT0+e0hBdCgpO0dBdCgpO1hBdCgpO3Q0dCgpO2RaKCk7cjR0KCk7aTR0KCk7YTR0KCk7bDR0KCk7dTR0KCk7ZjR0KCk7ZDR0KCk7ZzR0KCk7eTR0KCk7eDR0KCk7dzR0KCk7TTR0KCk7VDR0KCk7QTR0KCk7TjR0KCk7TzR0KCk7RjR0KCk7SDR0KCk7VTR0KCk7RzR0KCk7WTR0KCk7WDR0KCk7SzR0KCk7SjR0KCk7eE4oKTtvUHQoKTtfWj1bbnVsbF07cGkucHJvdG90eXBlPW80ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBpLHNlbGVjdDpCQXQsc2VsZWN0QWxsOnFBdCxmaWx0ZXI6akF0LGRhdGE6UUF0LGVudGVyOiRBdCxleGl0OmU0dCxqb2luOm40dCxtZXJnZTpvNHQsb3JkZXI6czR0LHNvcnQ6YzR0LGNhbGw6aDR0LG5vZGVzOnA0dCxub2RlOm00dCxzaXplOl80dCxlbXB0eTp2NHQsZWFjaDpiNHQsYXR0cjpTNHQsc3R5bGU6RTR0LHByb3BlcnR5OkM0dCxjbGFzc2VkOlI0dCx0ZXh0OkQ0dCxodG1sOno0dCxyYWlzZTpCNHQsbG93ZXI6VjR0LGFwcGVuZDpxNHQsaW5zZXJ0Olc0dCxyZW1vdmU6ajR0LGNsb25lOiQ0dCxkYXR1bTpaNHQsb246clB0LGRpc3BhdGNoOmlQdH19KTtmdW5jdGlvbiBFeShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBwaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHBpKFtbZV1dLF9aKX12YXIgYVB0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gYk4oKXtmb3IodmFyIGU9c24sdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgeVo9TSgoKT0+e3hOKCl9KTtmdW5jdGlvbiB3TihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciB2Wj1NKCgpPT57fSk7ZnVuY3Rpb24geFooZSl7dmFyIHQ9Yk4oKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksd04oZSx0KX12YXIgc1B0PU0oKCk9Pnt5WigpO3ZaKCl9KTtmdW5jdGlvbiBiWihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9Yk4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3TihlLG8pO3JldHVybiBudWxsfXZhciBsUHQ9TSgoKT0+e3laKCk7dlooKX0pO3ZhciBTTj1NKCgpPT57c1B0KCk7YVB0KCk7bFB0KCk7eE4oKX0pO2Z1bmN0aW9uIE1OKCl7c24uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZmcoKXtzbi5wcmV2ZW50RGVmYXVsdCgpLHNuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB3Wj1NKCgpPT57U04oKX0pO2Z1bmN0aW9uIEVOKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9RXkoZSkub24oImRyYWdzdGFydC5kcmFnIixmZywhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixmZywhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gVE4oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUV5KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLGZnLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBTWj1NKCgpPT57U04oKTt3WigpfSk7ZnVuY3Rpb24gdlQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBjUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhUKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfXZhciB1UHQ9TSgoKT0+e3hULnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9fSk7ZnVuY3Rpb24gYTRlKCl7cmV0dXJuIXNuLmJ1dHRvbn1mdW5jdGlvbiBzNGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIGw0ZShlKXtyZXR1cm4gZT09bnVsbD97eDpzbi54LHk6c24ueX06ZX1mdW5jdGlvbiBjNGUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gaFB0KCl7dmFyIGU9YTRlLHQ9czRlLHI9bDRlLG49YzRlLGk9e30sbz1zWigic3RhcnQiLCJkcmFnIiwiZW5kIiksYT0wLHMsbCxjLHUsaD0wO2Z1bmN0aW9uIGYoUyl7Uy5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihuKS5vbigidG91Y2hzdGFydC5kcmFnIixfKS5vbigidG91Y2htb3ZlLmRyYWciLHkpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoISh1fHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKXt2YXIgUz1iKCJtb3VzZSIsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykseFosdGhpcyxhcmd1bWVudHMpOyFTfHwoRXkoc24udmlldykub24oIm1vdXNlbW92ZS5kcmFnIixkLCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxFTihzbi52aWV3KSxNTigpLGM9ITEscz1zbi5jbGllbnRYLGw9c24uY2xpZW50WSxTKCJzdGFydCIpKX19ZnVuY3Rpb24gZCgpe2lmKGZnKCksIWMpe3ZhciBTPXNuLmNsaWVudFgtcyxDPXNuLmNsaWVudFktbDtjPVMqUytDKkM+aH1pLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gZygpe0V5KHNuLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLFROKHNuLnZpZXcsYyksZmcoKSxpLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBfKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFM9c24uY2hhbmdlZFRvdWNoZXMsQz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQPVMubGVuZ3RoLGssTztmb3Ioaz0wO2s8UDsrK2spKE89YihTW2tdLmlkZW50aWZpZXIsQyxiWix0aGlzLGFyZ3VtZW50cykpJiYoTU4oKSxPKCJzdGFydCIpKX19ZnVuY3Rpb24geSgpe3ZhciBTPXNuLmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2ZvcihQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoZmcoKSxrKCJkcmFnIikpfWZ1bmN0aW9uIHgoKXt2YXIgUz1zbi5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IodSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sNTAwKSxQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoTU4oKSxrKCJlbmQiKSl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe3ZhciBEPVAoQyxTKSxCLEksTCxSPW8uY29weSgpO2lmKCEhdk4obmV3IHhUKGYsImJlZm9yZXN0YXJ0IixCLFMsYSxEWzBdLERbMV0sMCwwLFIpLGZ1bmN0aW9uKCl7cmV0dXJuKHNuLnN1YmplY3Q9Qj1yLmFwcGx5KGssTykpPT1udWxsPyExOihJPUIueC1EWzBdfHwwLEw9Qi55LURbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIEYoeil7dmFyIFU9RCxXO3N3aXRjaCh6KXtjYXNlInN0YXJ0IjppW1NdPUYsVz1hKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBpW1NdLC0tYTtjYXNlImRyYWciOkQ9UChDLFMpLFc9YTticmVha312TihuZXcgeFQoZix6LEIsUyxXLERbMF0rSSxEWzFdK0wsRFswXS1VWzBdLERbMV0tVVsxXSxSKSxSLmFwcGx5LFIsW3osayxPXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6ZX0sZi5jb250YWluZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTp0fSxmLnN1YmplY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTpyfSxmLnRvdWNoYWJsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6bn0sZi5vbj1mdW5jdGlvbigpe3ZhciBTPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBTPT09bz9mOlN9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0oUz0rUykqUyxmKTpNYXRoLnNxcnQoaCl9LGZ9dmFyIGZQdD1NKCgpPT57RkF0KCk7U04oKTtTWigpO3daKCk7Y1B0KCk7dVB0KCl9KTt2YXIgcFB0PU0oKCk9PntmUHQoKTtTWigpfSk7ZnVuY3Rpb24gbVB0KGUpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrZS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK3IrIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gdTRlKGUsdCl7dmFyIHI9bVB0KGUpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0KHIobiksaSxlKX19ZnVuY3Rpb24gaDRlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSBpbiBuKWkgaW4gdHx8ci5wdXNoKHRbaV09aSl9KSxyfWZ1bmN0aW9uIHcyKGUpe3ZhciB0PW5ldyBSZWdFeHAoJ1siJytlK2AKXHJdYCkscj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbihjLHUpe3ZhciBoLGYscD1pKGMsZnVuY3Rpb24oZCxnKXtpZihoKXJldHVybiBoKGQsZy0xKTtmPWQsaD11P3U0ZShkLHUpOm1QdChkKX0pO3JldHVybiBwLmNvbHVtbnM9Znx8W10scH1mdW5jdGlvbiBpKGMsdSl7dmFyIGg9W10sZj1jLmxlbmd0aCxwPTAsZD0wLGcsXz1mPD0wLHk9ITE7Yy5jaGFyQ29kZUF0KGYtMSk9PT1iVCYmLS1mLGMuY2hhckNvZGVBdChmLTEpPT09VFomJi0tZjtmdW5jdGlvbiB4KCl7aWYoXylyZXR1cm4gTVo7aWYoeSlyZXR1cm4geT0hMSxkUHQ7dmFyIFMsQz1wLFA7aWYoYy5jaGFyQ29kZUF0KEMpPT09RVope2Zvcig7cCsrPGYmJmMuY2hhckNvZGVBdChwKSE9PUVafHxjLmNoYXJDb2RlQXQoKytwKT09PUVaOyk7cmV0dXJuKFM9cCk+PWY/Xz0hMDooUD1jLmNoYXJDb2RlQXQocCsrKSk9PT1iVD95PSEwOlA9PT1UWiYmKHk9ITAsYy5jaGFyQ29kZUF0KHApPT09YlQmJisrcCksYy5zbGljZShDKzEsUy0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtwPGY7KXtpZigoUD1jLmNoYXJDb2RlQXQoUz1wKyspKT09PWJUKXk9ITA7ZWxzZSBpZihQPT09VFopeT0hMCxjLmNoYXJDb2RlQXQocCk9PT1iVCYmKytwO2Vsc2UgaWYoUCE9PXIpY29udGludWU7cmV0dXJuIGMuc2xpY2UoQyxTKX1yZXR1cm4gXz0hMCxjLnNsaWNlKEMsZil9Zm9yKDsoZz14KCkpIT09TVo7KXtmb3IodmFyIGI9W107ZyE9PWRQdCYmZyE9PU1aOyliLnB1c2goZyksZz14KCk7dSYmKGI9dShiLGQrKykpPT1udWxsfHxoLnB1c2goYil9cmV0dXJuIGh9ZnVuY3Rpb24gbyhjLHUpe3JldHVybiB1PT1udWxsJiYodT1oNGUoYykpLFt1Lm1hcChsKS5qb2luKGUpXS5jb25jYXQoYy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBsKGhbZl0pfSkuam9pbihlKX0pKS5qb2luKGAKYCl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5tYXAocykuam9pbihgCmApfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGMubWFwKGwpLmpvaW4oZSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09bnVsbD8iIjp0LnRlc3QoYys9IiIpPyciJytjLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Y31yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6byxmb3JtYXRSb3dzOmF9fXZhciBkUHQsTVosRVosYlQsVFosQ049TSgoKT0+e2RQdD17fSxNWj17fSxFWj0zNCxiVD0xMCxUWj0xM30pO3ZhciBBTixnUHQsX1B0LHlQdCx2UHQseFB0PU0oKCk9PntDTigpO0FOPXcyKCIsIiksZ1B0PUFOLnBhcnNlLF9QdD1BTi5wYXJzZVJvd3MseVB0PUFOLmZvcm1hdCx2UHQ9QU4uZm9ybWF0Um93c30pO3ZhciBQTixiUHQsd1B0LFNQdCxNUHQsRVB0PU0oKCk9PntDTigpO1BOPXcyKCIJIiksYlB0PVBOLnBhcnNlLHdQdD1QTi5wYXJzZVJvd3MsU1B0PVBOLmZvcm1hdCxNUHQ9UE4uZm9ybWF0Um93c30pO3ZhciBUUHQ9TSgoKT0+e0NOKCk7eFB0KCk7RVB0KCl9KTtmdW5jdGlvbiBDUHQoZSl7cmV0dXJuK2V9dmFyIEFQdD1NKCgpPT57fSk7ZnVuY3Rpb24gUFB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gSVB0KGUpe3JldHVybiBlKigyLWUpfWZ1bmN0aW9uIENaKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXZhciBMUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGtQdChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gUlB0KGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBBWihlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgTlB0PU0oKCk9Pnt9KTt2YXIgUFosRFB0LE9QdCxJWix6UHQ9TSgoKT0+e1BaPTMsRFB0PWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopLE9QdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gMS1NYXRoLnBvdygxLW4sdCl9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShQWiksSVo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdyhuLHQpOjItTWF0aC5wb3coMi1uLHQpKS8yfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopfSk7ZnVuY3Rpb24gSFB0KGUpe3JldHVybiAxLU1hdGguY29zKGUqQlB0KX1mdW5jdGlvbiBWUHQoZSl7cmV0dXJuIE1hdGguc2luKGUqQlB0KX1mdW5jdGlvbiBMWihlKXtyZXR1cm4oMS1NYXRoLmNvcyhGUHQqZSkpLzJ9dmFyIEZQdCxCUHQsVVB0PU0oKCk9PntGUHQ9TWF0aC5QSSxCUHQ9RlB0LzJ9KTtmdW5jdGlvbiBxUHQoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqZS0xMCl9ZnVuY3Rpb24gR1B0KGUpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmUpfWZ1bmN0aW9uIGtaKGUpe3JldHVybigoZSo9Mik8PTE/TWF0aC5wb3coMiwxMCplLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZSkpLzJ9dmFyIFdQdD1NKCgpPT57fSk7ZnVuY3Rpb24gWVB0KGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24galB0KGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIFJaKGUpe3JldHVybigoZSo9Mik8PTE/MS1NYXRoLnNxcnQoMS1lKmUpOk1hdGguc3FydCgxLShlLT0yKSplKSsxKS8yfXZhciBYUHQ9TSgoKT0+e30pO2Z1bmN0aW9uICRQdChlKXtyZXR1cm4gMS1TMigxLWUpfWZ1bmN0aW9uIFMyKGUpe3JldHVybihlPStlKTxOWj9JTiplKmU6ZTxwNGU/SU4qKGUtPWY0ZSkqZStkNGU6ZTxnNGU/SU4qKGUtPW00ZSkqZStfNGU6SU4qKGUtPXk0ZSkqZSt2NGV9ZnVuY3Rpb24gS1B0KGUpe3JldHVybigoZSo9Mik8PTE/MS1TMigxLWUpOlMyKGUtMSkrMSkvMn12YXIgTlosZjRlLHA0ZSxkNGUsbTRlLGc0ZSxfNGUseTRlLHY0ZSxJTixaUHQ9TSgoKT0+e05aPS4zNjM2MzYzNjM2MzYzNjM2NSxmNGU9Ni8xMSxwNGU9OC8xMSxkNGU9My80LG00ZT05LzExLGc0ZT0xMC8xMSxfNGU9MTUvMTYseTRlPTIxLzIyLHY0ZT02My82NCxJTj0xL05aL05afSk7dmFyIERaLEpQdCxRUHQsT1osdDZ0PU0oKCk9PntEWj0xLjcwMTU4LEpQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKSxRUHQ9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gci5vdmVyc2hvb3Q9ZSxyfShEWiksT1o9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTwxP24qbiooKHQrMSkqbi10KToobi09MikqbiooKHQrMSkqbit0KSsyKS8yfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKX0pO3ZhciBNMix6WixGWixlNnQsQloscjZ0LG42dD1NKCgpPT57TTI9MipNYXRoLlBJLHpaPTEsRlo9LjMsZTZ0PWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiB0Kk1hdGgucG93KDIsMTAqLS1vKSpNYXRoLnNpbigobi1vKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEJaPWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG89K28pKSpNYXRoLnNpbigobytuKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLHI2dD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1NMik7ZnVuY3Rpb24gaShvKXtyZXR1cm4oKG89byoyLTEpPDA/dCpNYXRoLnBvdygyLDEwKm8pKk1hdGguc2luKChuLW8pL3IpOjItdCpNYXRoLnBvdygyLC0xMCpvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopfSk7dmFyIGk2dD1NKCgpPT57QVB0KCk7TFB0KCk7TlB0KCk7elB0KCk7VVB0KCk7V1B0KCk7WFB0KCk7WlB0KCk7dDZ0KCk7bjZ0KCl9KTtmdW5jdGlvbiBvNnQoZSx0KXt2YXIgcjtlPT1udWxsJiYoZT0wKSx0PT1udWxsJiYodD0wKTtmdW5jdGlvbiBuKCl7dmFyIGksbz1yLmxlbmd0aCxhLHM9MCxsPTA7Zm9yKGk9MDtpPG87KytpKWE9cltpXSxzKz1hLngsbCs9YS55O2ZvcihzPXMvby1lLGw9bC9vLXQsaT0wO2k8bzsrK2kpYT1yW2ldLGEueC09cyxhLnktPWx9cmV0dXJuIG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihpKXtyPWl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0raSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2ksbik6dH0sbn12YXIgYTZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6bihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFR5PU0oKCk9Pnt9KTtmdW5jdGlvbiBNdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fXZhciBMTj1NKCgpPT57fSk7ZnVuY3Rpb24gczZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gbDZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gbDZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIGM2dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilsNnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIHU2dD1NKCgpPT57fSk7ZnVuY3Rpb24gaDZ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBmNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHA2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBkNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG02dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgZzZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIga049TSgoKT0+e30pO2Z1bmN0aW9uIF82dChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBTbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IFNvKHBbM10sXyx5LGwsYyksbmV3IFNvKHBbMl0sYSx5LF8sYyksbmV3IFNvKHBbMV0sXyxzLGwseSksbmV3IFNvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHk2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIHY2dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiB4NnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBiNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHc2dCgpe3JldHVybiB0aGlzLl9yb290fXZhciBTNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE02dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIEU2dD1NKCgpPT57fSk7ZnVuY3Rpb24gVDZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBTbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgU28oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgU28oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgU28oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgU28oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIEM2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIEE2dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgU28odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgU28obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgU28obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgU28obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgU28obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgUDZ0PU0oKCk9PntrTigpfSk7ZnVuY3Rpb24gSTZ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIEw2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIGs2dD1NKCgpPT57fSk7ZnVuY3Rpb24gUjZ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIE42dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIEQ2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQ3koZSx0LHIpe3ZhciBuPW5ldyBIWih0PT1udWxsP0k2dDp0LHI9PW51bGw/UjZ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIEhaKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gTzZ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgR2EsejZ0PU0oKCk9Pnt1NnQoKTtmNnQoKTtkNnQoKTtnNnQoKTt5NnQoKTtiNnQoKTtTNnQoKTtFNnQoKTtDNnQoKTtQNnQoKTtrNnQoKTtENnQoKTtHYT1DeS5wcm90b3R5cGU9SFoucHJvdG90eXBlO0dhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgSFoodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1PNnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1PNnQobikpO3JldHVybiBlfTtHYS5hZGQ9czZ0O0dhLmFkZEFsbD1jNnQ7R2EuY292ZXI9aDZ0O0dhLmRhdGE9cDZ0O0dhLmV4dGVudD1tNnQ7R2EuZmluZD1fNnQ7R2EucmVtb3ZlPXY2dDtHYS5yZW1vdmVBbGw9eDZ0O0dhLnJvb3Q9dzZ0O0dhLnNpemU9TTZ0O0dhLnZpc2l0PVQ2dDtHYS52aXNpdEFmdGVyPUE2dDtHYS54PUw2dDtHYS55PU42dH0pO3ZhciBWWj1NKCgpPT57ejZ0KCl9KTtmdW5jdGlvbiB4NGUoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIGI0ZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gRjZ0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9em4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUN5KHQseDRlLGI0ZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9TXUoKSxMKz1CKkIpLEk9PT0wJiYoST1NdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6em4oK2wpLHMoKSxvKTplfSxvfXZhciBCNnQ9TSgoKT0+e1R5KCk7TE4oKTtWWigpfSk7ZnVuY3Rpb24gUk4oKXt9ZnVuY3Rpb24gSDZ0KGUsdCl7dmFyIHI9bmV3IFJOO2lmKGUgaW5zdGFuY2VvZiBSTillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgY2wscGcsTk49TSgoKT0+e2NsPSIkIjtSTi5wcm90b3R5cGU9SDZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uk4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBjbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tjbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbY2wrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2wrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Y2wmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWNsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtwZz1INnR9KTt2YXIgVjZ0PU0oKCk9PntOTigpfSk7ZnVuY3Rpb24gRE4oKXt9ZnVuY3Rpb24gdzRlKGUsdCl7dmFyIHI9bmV3IEROO2lmKGUgaW5zdGFuY2VvZiBETillLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgQXksVTZ0PU0oKCk9PntOTigpO0F5PXBnLnByb3RvdHlwZTtETi5wcm90b3R5cGU9dzRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RE4saGFzOkF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbY2wrZV09ZSx0aGlzfSxyZW1vdmU6QXkucmVtb3ZlLGNsZWFyOkF5LmNsZWFyLHZhbHVlczpBeS5rZXlzLHNpemU6QXkuc2l6ZSxlbXB0eTpBeS5lbXB0eSxlYWNoOkF5LmVhY2h9fSk7dmFyIHE2dD1NKCgpPT57fSk7dmFyIEc2dD1NKCgpPT57fSk7dmFyIFc2dD1NKCgpPT57fSk7dmFyIFVaPU0oKCk9PntWNnQoKTtVNnQoKTtOTigpO3E2dCgpO0c2dCgpO1c2dCgpfSk7ZnVuY3Rpb24gUzRlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIFk2dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBqNnQoZSl7dmFyIHQ9UzRlLHI9dSxuLGk9em4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxNdSgpLGs9Qy55K0MudnktUy55LVMudnl8fE11KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1wZyhhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPVk2dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PVk2dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLGQoKSxoKTppfSxofXZhciBYNnQ9TSgoKT0+e1R5KCk7TE4oKTtVWigpfSk7ZnVuY3Rpb24gSzZ0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IE9OKHIpfWZ1bmN0aW9uIE9OKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEU0ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIFQ0ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uICQ2dChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09TTRlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgTTRlLHFaLFo2dD1NKCgpPT57TTRlPXt2YWx1ZTpmdW5jdGlvbigpe319O09OLnByb3RvdHlwZT1LNnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPTixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUU0ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPVQ0ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09JDZ0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09JDZ0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBPTihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07cVo9SzZ0fSk7dmFyIEo2dD1NKCgpPT57WjZ0KCl9KTtmdW5jdGlvbiBZWigpe3JldHVybiBQeXx8KGVJdChDNGUpLFB5PUVULm5vdygpK0JOKX1mdW5jdGlvbiBDNGUoKXtQeT0wfWZ1bmN0aW9uIEdaKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBITihlLHQscil7dmFyIG49bmV3IEdaO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gckl0KCl7WVooKSwrK0UyO2Zvcih2YXIgZT16Tix0O2U7KSh0PVB5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1FMn1mdW5jdGlvbiBRNnQoKXtQeT0oRk49RVQubm93KCkpK0JOLEUyPVNUPTA7dHJ5e3JJdCgpfWZpbmFsbHl7RTI9MCxQNGUoKSxQeT0wfX1mdW5jdGlvbiBBNGUoKXt2YXIgZT1FVC5ub3coKSx0PWUtRk47dD50SXQmJihCTi09dCxGTj1lKX1mdW5jdGlvbiBQNGUoKXtmb3IodmFyIGUsdD16TixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp6Tj1yKTtNVD1lLFdaKG4pfWZ1bmN0aW9uIFdaKGUpe2lmKCFFMil7U1QmJihTVD1jbGVhclRpbWVvdXQoU1QpKTt2YXIgdD1lLVB5O3Q+MjQ/KGU8MS8wJiYoU1Q9c2V0VGltZW91dChRNnQsZS1FVC5ub3coKS1CTikpLHdUJiYod1Q9Y2xlYXJJbnRlcnZhbCh3VCkpKTood1R8fChGTj1FVC5ub3coKSx3VD1zZXRJbnRlcnZhbChBNGUsdEl0KSksRTI9MSxlSXQoUTZ0KSl9fXZhciBFMixTVCx3VCx0SXQsek4sTVQsRk4sUHksQk4sRVQsZUl0LG5JdD1NKCgpPT57RTI9MCxTVD0wLHdUPTAsdEl0PTFlMyxGTj0wLFB5PTAsQk49MCxFVD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxlSXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07R1oucHJvdG90eXBlPUhOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6R1oscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1laKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZNVCE9PXRoaXMmJihNVD9NVC5fbmV4dD10aGlzOnpOPXRoaXMsTVQ9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixXWigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxXWigpKX19fSk7dmFyIGlJdD1NKCgpPT57bkl0KCl9KTtmdW5jdGlvbiBvSXQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBhSXQoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBzSXQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1wZygpLGw9SE4odSksYz1xWigidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKCl7dmFyIGQsZz1lLmxlbmd0aCxfO2ZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbih5KXt5KHIpfSksZD0wO2Q8ZzsrK2QpXz1lW2RdLF8uZng9PW51bGw/Xy54Kz1fLnZ4Kj1hOihfLng9Xy5meCxfLnZ4PTApLF8uZnk9PW51bGw/Xy55Kz1fLnZ5Kj1hOihfLnk9Xy5meSxfLnZ5PTApfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxpc05hTihfLngpfHxpc05hTihfLnkpKXt2YXIgeT1JNGUqTWF0aC5zcXJ0KGQpLHg9ZCpMNGU7Xy54PXkqTWF0aC5jb3MoeCksXy55PXkqTWF0aC5zaW4oeCl9KGlzTmFOKF8udngpfHxpc05hTihfLnZ5KSkmJihfLnZ4PV8udnk9MCl9fWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQuaW5pdGlhbGl6ZSYmZC5pbml0aWFsaXplKGUpLGR9cmV0dXJuIGYoKSx0PXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksdH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSx0fSxub2RlczpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kLGYoKSxzLmVhY2gocCksdCk6ZX0sYWxwaGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2QsdCk6cn0sYWxwaGFNaW46ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2QsdCk6bn0sYWxwaGFEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZCx0KToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2QsdCk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLWQsdCk6MS1hfSxmb3JjZTpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGc9PW51bGw/cy5yZW1vdmUoZCk6cy5zZXQoZCxwKGcpKSx0KTpzLmdldChkKX0sZmluZDpmdW5jdGlvbihkLGcsXyl7dmFyIHk9MCx4PWUubGVuZ3RoLGIsUyxDLFAsaztmb3IoXz09bnVsbD9fPTEvMDpfKj1fLHk9MDt5PHg7Kyt5KVA9ZVt5XSxiPWQtUC54LFM9Zy1QLnksQz1iKmIrUypTLEM8XyYmKGs9UCxfPUMpO3JldHVybiBrfSxvbjpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24oZCxnKSx0KTpjLm9uKGQpfX19dmFyIEk0ZSxMNGUsalo9TSgoKT0+e0o2dCgpO1VaKCk7aUl0KCk7STRlPTEwLEw0ZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSl9KTtmdW5jdGlvbiBsSXQoKXt2YXIgZSx0LHIsbj16bigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUN5KGUsb0l0LGFJdCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOnpuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH12YXIgY0l0PU0oKCk9PntUeSgpO0xOKCk7VlooKTtqWigpfSk7ZnVuY3Rpb24gdUl0KGUsdCxyKXt2YXIgbixpPXpuKC4xKSxvLGE7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKCtlKSksdD09bnVsbCYmKHQ9MCkscj09bnVsbCYmKHI9MCk7ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9MCxoPW4ubGVuZ3RoO3U8aDsrK3Upe3ZhciBmPW5bdV0scD1mLngtdHx8MWUtNixkPWYueS1yfHwxZS02LGc9TWF0aC5zcXJ0KHAqcCtkKmQpLF89KGFbdV0tZykqb1t1XSpjL2c7Zi52eCs9cCpfLGYudnkrPWQqX319ZnVuY3Rpb24gbCgpe2lmKCEhbil7dmFyIGMsdT1uLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkodSksYT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpYVtjXT0rZShuW2NdLGMsbiksb1tjXT1pc05hTihhW2NdKT8wOitpKG5bY10sYyxuKX19cmV0dXJuIHMuaW5pdGlhbGl6ZT1mdW5jdGlvbihjKXtuPWMsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6em4oK2MpLGwoKSxzKTppfSxzLnJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnpuKCtjKSxsKCkscyk6ZX0scy54PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStjLHMpOnR9LHMueT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYyxzKTpyfSxzfXZhciBoSXQ9TSgoKT0+e1R5KCl9KTtmdW5jdGlvbiBmSXQoZSl7dmFyIHQ9em4oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT16bihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6em4oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOmV9LG99dmFyIHBJdD1NKCgpPT57VHkoKX0pO2Z1bmN0aW9uIGRJdChlKXt2YXIgdD16biguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnpuKCtzKSxhKCksbyk6ZX0sb312YXIgbUl0PU0oKCk9PntUeSgpfSk7dmFyIGdJdD1NKCgpPT57YTZ0KCk7QjZ0KCk7WDZ0KCk7Y0l0KCk7aEl0KCk7alooKTtwSXQoKTttSXQoKX0pO2Z1bmN0aW9uIEl5KGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfXZhciBWTj1NKCgpPT57fSk7ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGU9SXkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59dmFyIFRUPU0oKCk9PntWTigpfSk7ZnVuY3Rpb24gX0l0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fXZhciB5SXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZJdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIHhJdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkl0KGUsdCl7ZT1lLnRvUHJlY2lzaW9uKHQpO3Q6Zm9yKHZhciByPWUubGVuZ3RoLG49MSxpPS0xLG87bjxyOysrbilzd2l0Y2goZVtuXSl7Y2FzZSIuIjppPW89bjticmVhaztjYXNlIjAiOmk9PT0wJiYoaT1uKSxvPW47YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP2Uuc2xpY2UoMCxpKStlLnNsaWNlKG8rMSk6ZX12YXIgd0l0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTSXQoZSx0KXt2YXIgcj1JeShlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oWFo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLGE9bi5sZW5ndGg7cmV0dXJuIG89PT1hP246bz5hP24rbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP24uc2xpY2UoMCxvKSsiLiIrbi5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStJeShlLE1hdGgubWF4KDAsdCtvLTEpKVswXX12YXIgWFosJFo9TSgoKT0+e1ZOKCl9KTtmdW5jdGlvbiBLWihlLHQpe3ZhciByPUl5KGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIE1JdD1NKCgpPT57Vk4oKX0pO3ZhciBVTixaWj1NKCgpPT57d0l0KCk7JFooKTtNSXQoKTtVTj17IiI6Ykl0LCIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtaKGUqMTAwLHQpfSxyOktaLHM6U0l0LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpfX19KTtmdW5jdGlvbiBMeShlKXtyZXR1cm4gbmV3IEpaKGUpfWZ1bmN0aW9uIEpaKGUpe2lmKCEodD1rNGUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdCxyPXRbMV18fCIgIixuPXRbMl18fCI+IixpPXRbM118fCItIixvPXRbNF18fCIiLGE9ISF0WzVdLHM9dFs2XSYmK3RbNl0sbD0hIXRbN10sYz10WzhdJiYrdFs4XS5zbGljZSgxKSx1PXRbOV18fCIiO3U9PT0ibiI/KGw9ITAsdT0iZyIpOlVOW3VdfHwodT0iIiksKGF8fHI9PT0iMCImJm49PT0iPSIpJiYoYT0hMCxyPSIwIixuPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1uLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD1zLHRoaXMuY29tbWE9bCx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT11fXZhciBrNGUsUVo9TSgoKT0+e1paKCk7azRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO0x5LnByb3RvdHlwZT1KWi5wcm90b3R5cGU7SloucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PW51bGw/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09bnVsbD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIHRKKGUpe3JldHVybiBlfXZhciBFSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFOKGUpe3ZhciB0PWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP19JdChlLmdyb3VwaW5nLGUudGhvdXNhbmRzKTp0SixyPWUuY3VycmVuY3ksbj1lLmRlY2ltYWwsaT1lLm51bWVyYWxzP3ZJdChlLm51bWVyYWxzKTp0SixvPWUucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGEobCl7bD1MeShsKTt2YXIgYz1sLmZpbGwsdT1sLmFsaWduLGg9bC5zaWduLGY9bC5zeW1ib2wscD1sLnplcm8sZD1sLndpZHRoLGc9bC5jb21tYSxfPWwucHJlY2lzaW9uLHk9bC50eXBlLHg9Zj09PSIkIj9yWzBdOmY9PT0iIyImJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPWY9PT0iJCI/clsxXTovWyVwXS8udGVzdCh5KT9vOiIiLFM9VU5beV0sQz0heXx8L1tkZWZncHJzJV0vLnRlc3QoeSk7Xz1fPT1udWxsP3k/NjoxMjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsXykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsXykpO2Z1bmN0aW9uIFAoayl7dmFyIE89eCxEPWIsQixJLEw7aWYoeT09PSJjIilEPVMoaykrRCxrPSIiO2Vsc2V7az0razt2YXIgUj1rPDA7aWYoaz1TKE1hdGguYWJzKGspLF8pLFImJitrPT0wJiYoUj0hMSksTz0oUj9oPT09IigiP2g6Ii0iOmg9PT0iLSJ8fGg9PT0iKCI/IiI6aCkrTyxEPSh5PT09InMiP1RJdFs4K1haLzNdOiIiKStEKyhSJiZoPT09IigiPyIpIjoiIiksQyl7Zm9yKEI9LTEsST1rLmxlbmd0aDsrK0I8STspaWYoTD1rLmNoYXJDb2RlQXQoQiksNDg+THx8TD41Nyl7RD0oTD09PTQ2P24ray5zbGljZShCKzEpOmsuc2xpY2UoQikpK0Qsaz1rLnNsaWNlKDAsQik7YnJlYWt9fX1nJiYhcCYmKGs9dChrLDEvMCkpO3ZhciBGPU8ubGVuZ3RoK2subGVuZ3RoK0QubGVuZ3RoLHo9RjxkP25ldyBBcnJheShkLUYrMSkuam9pbihjKToiIjtzd2l0Y2goZyYmcCYmKGs9dCh6K2ssei5sZW5ndGg/ZC1ELmxlbmd0aDoxLzApLHo9IiIpLHUpe2Nhc2UiPCI6az1PK2srRCt6O2JyZWFrO2Nhc2UiPSI6az1PK3oraytEO2JyZWFrO2Nhc2UiXiI6az16LnNsaWNlKDAsRj16Lmxlbmd0aD4+MSkrTytrK0Qrei5zbGljZShGKTticmVhaztkZWZhdWx0Oms9eitPK2srRDticmVha31yZXR1cm4gaShrKX1yZXR1cm4gUC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBsKyIifSxQfWZ1bmN0aW9uIHMobCxjKXt2YXIgdT1hKChsPUx5KGwpLGwudHlwZT0iZiIsbCkpLGg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJmKGMpLzMpKSkqMyxmPU1hdGgucG93KDEwLC1oKSxwPVRJdFs4K2gvM107cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiB1KGYqZCkrcH19cmV0dXJue2Zvcm1hdDphLGZvcm1hdFByZWZpeDpzfX12YXIgVEl0LGVKPU0oKCk9PntUVCgpO3lJdCgpO3hJdCgpO1FaKCk7WlooKTskWigpO0VJdCgpO1RJdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIFdOKGUpe3JldHVybiBHTj1xTihlKSxySj1HTi5mb3JtYXQsbko9R04uZm9ybWF0UHJlZml4LEdOfXZhciBHTixySixuSixDSXQ9TSgoKT0+e2VKKCk7V04oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSl9KTtmdW5jdGlvbiBBSXQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXJmKE1hdGguYWJzKGUpKSl9dmFyIFBJdD1NKCgpPT57VFQoKX0pO2Z1bmN0aW9uIElJdChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyZih0KS8zKSkpKjMtcmYoTWF0aC5hYnMoZSkpKX12YXIgTEl0PU0oKCk9PntUVCgpfSk7ZnVuY3Rpb24ga0l0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAscmYodCktcmYoZSkpKzF9dmFyIFJJdD1NKCgpPT57VFQoKX0pO3ZhciBOSXQ9TSgoKT0+e0NJdCgpO2VKKCk7UVooKTtQSXQoKTtMSXQoKTtSSXQoKX0pO2Z1bmN0aW9uIENzKCl7cmV0dXJuIG5ldyBqTn1mdW5jdGlvbiBqTigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiBESXQoZSx0LHIpe3ZhciBuPWUucz10K3IsaT1uLXQsbz1uLWk7ZS50PXQtbysoci1pKX12YXIgWU4sa3k9TSgoKT0+e2pOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ak4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXtESXQoWU4sZSx0aGlzLnQpLERJdCh0aGlzLFlOLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1ZTi50OnRoaXMucz1ZTi50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O1lOPW5ldyBqTn0pO2Z1bmN0aW9uIEtOKGUpe3JldHVybiBlPjE/MDplPC0xP3JyOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBabihlKXtyZXR1cm4gZT4xP0ZuOmU8LTE/LUZuOk1hdGguYXNpbihlKX1mdW5jdGlvbiBvSihlKXtyZXR1cm4oZT1KdChlLzIpKSplfXZhciBjZSxpSixycixGbixUMixCaSxVcix3ZSxZZSx5YyxTbixhZSxDVCxYTixSeSwkTixKdCxkZyxScixDMixscj1NKCgpPT57Y2U9MWUtNixpSj0xZS0xMixycj1NYXRoLlBJLEZuPXJyLzIsVDI9cnIvNCxCaT1ycioyLFVyPTE4MC9ycix3ZT1yci8xODAsWWU9TWF0aC5hYnMseWM9TWF0aC5hdGFuLFNuPU1hdGguYXRhbjIsYWU9TWF0aC5jb3MsQ1Q9TWF0aC5jZWlsLFhOPU1hdGguZXhwLFJ5PU1hdGgubG9nLCROPU1hdGgucG93LEp0PU1hdGguc2luLGRnPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSxScj1NYXRoLnNxcnQsQzI9TWF0aC50YW59KTtmdW5jdGlvbiBxcigpe312YXIgWHA9TSgoKT0+e30pO2Z1bmN0aW9uIFpOKGUsdCl7ZSYmekl0Lmhhc093blByb3BlcnR5KGUudHlwZSkmJnpJdFtlLnR5cGVdKGUsdCl9ZnVuY3Rpb24gYUooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gRkl0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspYUooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1vKGUsdCl7ZSYmT0l0Lmhhc093blByb3BlcnR5KGUudHlwZSk/T0l0W2UudHlwZV0oZSx0KTpaTihlLHQpfXZhciBPSXQsekl0LG1nPU0oKCk9PntPSXQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtaTihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspWk4ocltuXS5nZW9tZXRyeSx0KX19LHpJdD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2FKKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylhSihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtGSXQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylGSXQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KVpOKHJbbl0sdCl9fX0pO2Z1bmN0aW9uIFI0ZSgpe0V1LnBvaW50PUQ0ZX1mdW5jdGlvbiBONGUoKXtWSXQoQkl0LEhJdCl9ZnVuY3Rpb24gRDRlKGUsdCl7RXUucG9pbnQ9Vkl0LEJJdD1lLEhJdD10LGUqPXdlLHQqPXdlLHNKPWUsbEo9YWUodD10LzIrVDIpLGNKPUp0KHQpfWZ1bmN0aW9uIFZJdChlLHQpe2UqPXdlLHQqPXdlLHQ9dC8yK1QyO3ZhciByPWUtc0osbj1yPj0wPzE6LTEsaT1uKnIsbz1hZSh0KSxhPUp0KHQpLHM9Y0oqYSxsPWxKKm8rcyphZShpKSxjPXMqbipKdChpKTtBVC5hZGQoU24oYyxsKSksc0o9ZSxsSj1vLGNKPWF9ZnVuY3Rpb24gVUl0KGUpe3JldHVybiBKTi5yZXNldCgpLE1vKGUsRXUpLEpOKjJ9dmFyIEFULEpOLEJJdCxISXQsc0osbEosY0osRXUsdUo9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO21nKCk7QVQ9Q3MoKSxKTj1DcygpLEV1PXtwb2ludDpxcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtBVC5yZXNldCgpLEV1LmxpbmVTdGFydD1SNGUsRXUubGluZUVuZD1ONGV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rQVQ7Sk4uYWRkKGU8MD9CaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PXFyfSxzcGhlcmU6ZnVuY3Rpb24oKXtKTi5hZGQoQmkpfX19KTtmdW5jdGlvbiBOeShlKXtyZXR1cm5bU24oZVsxXSxlWzBdKSxabihlWzJdKV19ZnVuY3Rpb24gdmMoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1hZShyKTtyZXR1cm5bbiphZSh0KSxuKkp0KHQpLEp0KHIpXX1mdW5jdGlvbiBQVChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiAkcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gUU4oZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBJVChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gRHkoZSl7dmFyIHQ9UnIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBBMj1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGhKKGUsdCl7Z2cucHVzaChacD1bZGk9ZSxFaT1lXSksdDxobCYmKGhsPXQpLHQ+eGMmJih4Yz10KX1mdW5jdGlvbiBYSXQoZSx0KXt2YXIgcj12YyhbZSp3ZSx0KndlXSk7aWYoUDIpe3ZhciBuPSRwKFAyLHIpLGk9W25bMV0sLW5bMF0sMF0sbz0kcChpLG4pO0R5KG8pLG89Tnkobyk7dmFyIGE9ZS1PeSxzPWE+MD8xOi0xLGw9b1swXSpVcipzLGMsdT1ZZShhKT4xODA7dV4ocypPeTxsJiZsPHMqZSk/KGM9b1sxXSpVcixjPnhjJiYoeGM9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKk95PGwmJmw8cyplKT8oYz0tb1sxXSpVcixjPGhsJiYoaGw9YykpOih0PGhsJiYoaGw9dCksdD54YyYmKHhjPXQpKSksdT9lPE95P3VsKGRpLGUpPnVsKGRpLEVpKSYmKEVpPWUpOnVsKGUsRWkpPnVsKGRpLEVpKSYmKGRpPWUpOkVpPj1kaT8oZTxkaSYmKGRpPWUpLGU+RWkmJihFaT1lKSk6ZT5PeT91bChkaSxlKT51bChkaSxFaSkmJihFaT1lKTp1bChlLEVpKT51bChkaSxFaSkmJihkaT1lKX1lbHNlIGdnLnB1c2goWnA9W2RpPWUsRWk9ZV0pO3Q8aGwmJihobD10KSx0PnhjJiYoeGM9dCksUDI9cixPeT1lfWZ1bmN0aW9uIHFJdCgpe0twLnBvaW50PVhJdH1mdW5jdGlvbiBHSXQoKXtacFswXT1kaSxacFsxXT1FaSxLcC5wb2ludD1oSixQMj1udWxsfWZ1bmN0aW9uICRJdChlLHQpe2lmKFAyKXt2YXIgcj1lLU95O0xULmFkZChZZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIFlJdD1lLGpJdD10O0V1LnBvaW50KGUsdCksWEl0KGUsdCl9ZnVuY3Rpb24gTzRlKCl7RXUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gejRlKCl7JEl0KFlJdCxqSXQpLEV1LmxpbmVFbmQoKSxZZShMVCk+Y2UmJihkaT0tKEVpPTE4MCkpLFpwWzBdPWRpLFpwWzFdPUVpLFAyPW51bGx9ZnVuY3Rpb24gdWwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIEY0ZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gV0l0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBLSXQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoeGM9RWk9LShkaT1obD0xLzApLGdnPVtdLE1vKGUsS3ApLHI9Z2cubGVuZ3RoKXtmb3IoZ2cuc29ydChGNGUpLHQ9MSxuPWdnWzBdLG89W25dO3Q8cjsrK3QpaT1nZ1t0XSxXSXQobixpWzBdKXx8V0l0KG4saVsxXSk/KHVsKG5bMF0saVsxXSk+dWwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksdWwoaVswXSxuWzFdKT51bChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXVsKG5bMV0saVswXSkpPmEmJihhPXMsZGk9aVswXSxFaT1uWzFdKX1yZXR1cm4gZ2c9WnA9bnVsbCxkaT09PTEvMHx8aGw9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZGksaGxdLFtFaSx4Y11dfXZhciBkaSxobCxFaSx4YyxPeSxZSXQsakl0LFAyLExULGdnLFpwLEtwLFpJdD1NKCgpPT57a3koKTt1SigpO0EyKCk7bHIoKTttZygpO0xUPUNzKCksS3A9e3BvaW50OmhKLGxpbmVTdGFydDpxSXQsbGluZUVuZDpHSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3AucG9pbnQ9JEl0LEtwLmxpbmVTdGFydD1PNGUsS3AubGluZUVuZD16NGUsTFQucmVzZXQoKSxFdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0V1LnBvbHlnb25FbmQoKSxLcC5wb2ludD1oSixLcC5saW5lU3RhcnQ9cUl0LEtwLmxpbmVFbmQ9R0l0LEFUPDA/KGRpPS0oRWk9MTgwKSxobD0tKHhjPTkwKSk6TFQ+Y2U/eGM9OTA6TFQ8LWNlJiYoaGw9LTkwKSxacFswXT1kaSxacFsxXT1FaX19fSk7ZnVuY3Rpb24gbUooZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtSVChyKmFlKGUpLHIqSnQoZSksSnQodCkpfWZ1bmN0aW9uIFJUKGUsdCxyKXsrK2tULGVEKz0oZS1lRCkva1QsckQrPSh0LXJEKS9rVCxuRCs9KHItbkQpL2tUfWZ1bmN0aW9uIEpJdCgpe1R1LnBvaW50PUI0ZX1mdW5jdGlvbiBCNGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksVHUucG9pbnQ9SDRlLFJUKFdhLFlhLGphKX1mdW5jdGlvbiBINGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KSxuPXIqYWUoZSksaT1yKkp0KGUpLG89SnQodCksYT1TbihScigoYT1ZYSpvLWphKmkpKmErKGE9amEqbi1XYSpvKSphKyhhPVdhKmktWWEqbikqYSksV2EqbitZYSppK2phKm8pO3REKz1hLGlEKz1hKihXYSsoV2E9bikpLG9EKz1hKihZYSsoWWE9aSkpLGFEKz1hKihqYSsoamE9bykpLFJUKFdhLFlhLGphKX1mdW5jdGlvbiBRSXQoKXtUdS5wb2ludD1tSn1mdW5jdGlvbiBWNGUoKXtUdS5wb2ludD1xNGV9ZnVuY3Rpb24gVTRlKCl7cjl0KHQ5dCxlOXQpLFR1LnBvaW50PW1KfWZ1bmN0aW9uIHE0ZShlLHQpe3Q5dD1lLGU5dD10LGUqPXdlLHQqPXdlLFR1LnBvaW50PXI5dDt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksUlQoV2EsWWEsamEpfWZ1bmN0aW9uIHI5dChlLHQpe2UqPXdlLHQqPXdlO3ZhciByPWFlKHQpLG49ciphZShlKSxpPXIqSnQoZSksbz1KdCh0KSxhPVlhKm8tamEqaSxzPWphKm4tV2EqbyxsPVdhKmktWWEqbixjPVJyKGEqYStzKnMrbCpsKSx1PVpuKGMpLGg9YyYmLXUvYztmSis9aCphLHBKKz1oKnMsZEorPWgqbCx0RCs9dSxpRCs9dSooV2ErKFdhPW4pKSxvRCs9dSooWWErKFlhPWkpKSxhRCs9dSooamErKGphPW8pKSxSVChXYSxZYSxqYSl9ZnVuY3Rpb24gbjl0KGUpe2tUPXREPWVEPXJEPW5EPWlEPW9EPWFEPWZKPXBKPWRKPTAsTW8oZSxUdSk7dmFyIHQ9Zkoscj1wSixuPWRKLGk9dCp0K3IqcituKm47cmV0dXJuIGk8aUomJih0PWlELHI9b0Qsbj1hRCx0RDxjZSYmKHQ9ZUQscj1yRCxuPW5EKSxpPXQqdCtyKnIrbipuLGk8aUopP1tOYU4sTmFOXTpbU24ocix0KSpVcixabihuL1JyKGkpKSpVcl19dmFyIGtULHRELGVELHJELG5ELGlELG9ELGFELGZKLHBKLGRKLHQ5dCxlOXQsV2EsWWEsamEsVHUsaTl0PU0oKCk9PntscigpO1hwKCk7bWcoKTtUdT17c3BoZXJlOnFyLHBvaW50Om1KLGxpbmVTdGFydDpKSXQsbGluZUVuZDpRSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7VHUubGluZVN0YXJ0PVY0ZSxUdS5saW5lRW5kPVU0ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1R1LmxpbmVTdGFydD1KSXQsVHUubGluZUVuZD1RSXR9fX0pO2Z1bmN0aW9uIHp5KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgbzl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzRChlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9dmFyIGdKPU0oKCk9Pnt9KTtmdW5jdGlvbiBfSihlLHQpe3JldHVybltlPnJyP2UtQmk6ZTwtcnI/ZStCaTplLHRdfWZ1bmN0aW9uIE5UKGUsdCxyKXtyZXR1cm4oZSU9QmkpP3R8fHI/c0Qoczl0KGUpLGw5dCh0LHIpKTpzOXQoZSk6dHx8cj9sOXQodCxyKTpfSn1mdW5jdGlvbiBhOXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+cnI/dC1CaTp0PC1ycj90K0JpOnQscl19fWZ1bmN0aW9uIHM5dChlKXt2YXIgdD1hOXQoZSk7cmV0dXJuIHQuaW52ZXJ0PWE5dCgtZSksdH1mdW5jdGlvbiBsOXQoZSx0KXt2YXIgcj1hZShlKSxuPUp0KGUpLGk9YWUodCksbz1KdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZipyK3UqbjtyZXR1cm5bU24oaCppLXAqbyx1KnItZipuKSxabihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZippLWgqbztyZXR1cm5bU24oaCppK2Yqbyx1KnIrcCpuKSxabihwKnItdSpuKV19LGF9ZnVuY3Rpb24gbEQoZSl7ZT1OVChlWzBdKndlLGVbMV0qd2UsZS5sZW5ndGg+Mj9lWzJdKndlOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKndlLHJbMV0qd2UpLHJbMF0qPVVyLHJbMV0qPVVyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qd2UsclsxXSp3ZSksclswXSo9VXIsclsxXSo9VXIscn0sdH12YXIgRFQ9TSgoKT0+e2dKKCk7bHIoKTtfSi5pbnZlcnQ9X0p9KTtmdW5jdGlvbiB5SihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1hZSh0KSxzPUp0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKkJpLG89dC1sLzIpOihpPWM5dChhLGkpLG89Yzl0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qQmkpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1OeShbYSwtcyphZSh1KSwtcypKdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gYzl0KGUsdCl7dD12Yyh0KSx0WzBdLT1lLER5KHQpO3ZhciByPUtOKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrQmktY2UpJUJpfWZ1bmN0aW9uIHU5dCgpe3ZhciBlPXp5KFswLDBdKSx0PXp5KDkwKSxyPXp5KDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj1VcixsWzFdKj1Vcn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSp3ZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKndlO3JldHVybiBuPVtdLGk9TlQoLWxbMF0qd2UsLWxbMV0qd2UsMCkuaW52ZXJ0LHlKKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDp6eShbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTpyfSxzfXZhciB2Sj1NKCgpPT57QTIoKTtvOXQoKTtscigpO0RUKCl9KTtmdW5jdGlvbiBjRCgpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKFtyLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOnFyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fXZhciB4Sj1NKCgpPT57WHAoKX0pO2Z1bmN0aW9uIEkyKGUsdCl7cmV0dXJuIFllKGVbMF0tdFswXSk8Y2UmJlllKGVbMV0tdFsxXSk8Y2V9dmFyIGJKPU0oKCk9PntscigpfSk7ZnVuY3Rpb24gdUQoZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBoRChlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKEkyKF8seSkpe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufW8ucHVzaCh4PW5ldyB1RChfLGQsbnVsbCwhMCkpLGEucHVzaCh4Lm89bmV3IHVEKF8sbnVsbCx4LCExKSksby5wdXNoKHg9bmV3IHVEKHksZCxudWxsLCExKSksYS5wdXNoKHgubz1uZXcgdUQoeSxudWxsLHgsITApKX19KSwhIW8ubGVuZ3RoKXtmb3IoYS5zb3J0KHQpLGg5dChvKSxoOXQoYSkscz0wLGw9YS5sZW5ndGg7czxsOysrcylhW3NdLmU9cj0hcjtmb3IodmFyIGM9b1swXSx1LGg7Oyl7Zm9yKHZhciBmPWMscD0hMDtmLnY7KWlmKChmPWYubik9PT1jKXJldHVybjt1PWYueixpLmxpbmVTdGFydCgpO2Rve2lmKGYudj1mLm8udj0hMCxmLmUpe2lmKHApZm9yKHM9MCxsPXUubGVuZ3RoO3M8bDsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYubi54LDEsaSk7Zj1mLm59ZWxzZXtpZihwKWZvcih1PWYucC56LHM9dS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5wLngsLTEsaSk7Zj1mLnB9Zj1mLm8sdT1mLnoscD0hcH13aGlsZSghZi52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIGg5dChlKXtpZighISh0PWUubGVuZ3RoKSl7Zm9yKHZhciB0LHI9MCxuPWVbMF0saTsrK3I8dDspbi5uPWk9ZVtyXSxpLnA9bixuPWk7bi5uPWk9ZVswXSxpLnA9bn19dmFyIHdKPU0oKCk9PntiSigpfSk7ZnVuY3Rpb24gZkQoZSx0KXt2YXIgcj10WzBdLG49dFsxXSxpPVtKdChyKSwtYWUociksMF0sbz0wLGE9MDtTSi5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcylpZighISh1PShjPWVbc10pLmxlbmd0aCkpZm9yKHZhciBjLHUsaD1jW3UtMV0sZj1oWzBdLHA9aFsxXS8yK1QyLGQ9SnQocCksZz1hZShwKSxfPTA7Xzx1OysrXyxmPXgsZD1TLGc9QyxoPXkpe3ZhciB5PWNbX10seD15WzBdLGI9eVsxXS8yK1QyLFM9SnQoYiksQz1hZShiKSxQPXgtZixrPVA+PTA/MTotMSxPPWsqUCxEPU8+cnIsQj1kKlM7aWYoU0ouYWRkKFNuKEIqaypKdChPKSxnKkMrQiphZShPKSkpLG8rPUQ/UCtrKkJpOlAsRF5mPj1yXng+PXIpe3ZhciBJPSRwKHZjKGgpLHZjKHkpKTtEeShJKTt2YXIgTD0kcChpLEkpO0R5KEwpO3ZhciBSPShEXlA+PTA/LTE6MSkqWm4oTFsyXSk7KG4+Unx8bj09PVImJihJWzBdfHxJWzFdKSkmJihhKz1EXlA+PTA/MTotMSl9fXJldHVybihvPC1jZXx8bzxjZSYmU0o8LWNlKV5hJjF9dmFyIFNKLE1KPU0oKCk9PntreSgpO0EyKCk7bHIoKTtTSj1DcygpfSk7ZnVuY3Rpb24gX2coZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEZ5PU0oKCk9Pnt9KTtmdW5jdGlvbiBFSihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1HNGUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBHNGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9nKGUodCkscil9fXZhciBUSj1NKCgpPT57RnkoKX0pO3ZhciBmOXQsVzRlLFk0ZSxDSj1NKCgpPT57RnkoKTtUSigpO2Y5dD1FSihfZyksVzRlPWY5dC5yaWdodCxZNGU9Zjl0LmxlZnR9KTt2YXIgQUo9TSgoKT0+e30pO3ZhciBwOXQ9TSgoKT0+e0FKKCl9KTt2YXIgZDl0PU0oKCk9Pnt9KTt2YXIgTDI9TSgoKT0+e30pO3ZhciBQSj1NKCgpPT57TDIoKX0pO3ZhciBJSj1NKCgpPT57UEooKX0pO3ZhciBMSj1NKCgpPT57fSk7dmFyIG05dCxYNGUsJDRlLGtKPU0oKCk9PnttOXQ9QXJyYXkucHJvdG90eXBlLFg0ZT1tOXQuc2xpY2UsJDRlPW05dC5tYXB9KTt2YXIgZzl0PU0oKCk9Pnt9KTt2YXIgXzl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKcChlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgUko9TSgoKT0+e30pO3ZhciBrMG4sUjBuLE4wbixOSj1NKCgpPT57azBuPU1hdGguc3FydCg1MCksUjBuPU1hdGguc3FydCgxMCksTjBuPU1hdGguc3FydCgyKX0pO3ZhciBESj1NKCgpPT57fSk7dmFyIHk5dD1NKCgpPT57a0ooKTtDSigpO2c5dCgpO0xKKCk7Xzl0KCk7UkooKTtOSigpO0RKKCl9KTt2YXIgZEQ9TSgoKT0+e0wyKCl9KTt2YXIgeDl0PU0oKCk9PntrSigpO0Z5KCk7TDIoKTtkRCgpfSk7dmFyIGI5dD1NKCgpPT57SUooKX0pO3ZhciB3OXQ9TSgoKT0+e30pO3ZhciBTOXQ9TSgoKT0+e0wyKCl9KTt2YXIgTTl0PU0oKCk9PntGeSgpO0wyKCk7ZEQoKX0pO2Z1bmN0aW9uIE9UKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99dmFyIEU5dD1NKCgpPT57fSk7dmFyIE9KPU0oKCk9Pnt9KTt2YXIgVDl0PU0oKCk9Pnt9KTt2YXIgQzl0PU0oKCk9PntGeSgpfSk7dmFyIEE5dD1NKCgpPT57fSk7dmFyIFA5dD1NKCgpPT57fSk7dmFyIHpKPU0oKCk9PntPSigpfSk7dmFyIEk5dD1NKCgpPT57ekooKX0pO3ZhciBtRD1NKCgpPT57Q0ooKTtGeSgpO1RKKCk7cDl0KCk7ZDl0KCk7SUooKTtMSigpO3k5dCgpO3g5dCgpO2I5dCgpO0RKKCk7dzl0KCk7Uzl0KCk7TTl0KCk7RTl0KCk7T0ooKTtBSigpO1Q5dCgpO2REKCk7UkooKTtDOXQoKTtBOXQoKTtQOXQoKTtOSigpO3pKKCk7UEooKTtJOXQoKX0pO2Z1bmN0aW9uIGdEKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10KGkpLGE9Y0QoKSxzPXQoYSksbD0hMSxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6Xyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXksZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9Yix1PVtdLGM9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9Xyx1PU9UKHUpO3ZhciBTPWZEKGMsbik7dS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGhEKHUsaVBlLFMscixpKSk6UyYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLHU9Yz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoUyxDKXtlKFMsQykmJmkucG9pbnQoUyxDKX1mdW5jdGlvbiBkKFMsQyl7by5wb2ludChTLEMpfWZ1bmN0aW9uIGcoKXtmLnBvaW50PWQsby5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKCl7Zi5wb2ludD1wLG8ubGluZUVuZCgpfWZ1bmN0aW9uIHkoUyxDKXtoLnB1c2goW1MsQ10pLHMucG9pbnQoUyxDKX1mdW5jdGlvbiB4KCl7cy5saW5lU3RhcnQoKSxoPVtdfWZ1bmN0aW9uIGIoKXt5KGhbMF1bMF0saFswXVsxXSkscy5saW5lRW5kKCk7dmFyIFM9cy5jbGVhbigpLEM9YS5yZXN1bHQoKSxQLGs9Qy5sZW5ndGgsTyxELEI7aWYoaC5wb3AoKSxjLnB1c2goaCksaD1udWxsLCEhayl7aWYoUyYxKXtpZihEPUNbMF0sKE89RC5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksUD0wO1A8TzsrK1ApaS5wb2ludCgoQj1EW1BdKVswXSxCWzFdKTtpLmxpbmVFbmQoKX1yZXR1cm59az4xJiZTJjImJkMucHVzaChDLnBvcCgpLmNvbmNhdChDLnNoaWZ0KCkpKSx1LnB1c2goQy5maWx0ZXIoblBlKSl9fXJldHVybiBmfX1mdW5jdGlvbiBuUGUoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gaVBlKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUZuLWNlOkZuLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1Gbi1jZTpGbi10WzFdKX12YXIgRko9TSgoKT0+e3hKKCk7d0ooKTtscigpO01KKCk7bUQoKX0pO2Z1bmN0aW9uIG9QZShlKXt2YXIgdD1OYU4scj1OYU4sbj1OYU4saTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxpPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP3JyOi1ycixsPVllKG8tdCk7WWUobC1ycik8Y2U/KGUucG9pbnQodCxyPShyK2EpLzI+MD9GbjotRm4pLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxlLnBvaW50KG8sciksaT0wKTpuIT09cyYmbD49cnImJihZZSh0LW4pPGNlJiYodC09bipjZSksWWUoby1zKTxjZSYmKG8tPXMqY2UpLHI9YVBlKHQscixvLGEpLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxpPTApLGUucG9pbnQodD1vLHI9YSksbj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksdD1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1pfX19ZnVuY3Rpb24gYVBlKGUsdCxyLG4pe3ZhciBpLG8sYT1KdChlLXIpO3JldHVybiBZZShhKT5jZT95YygoSnQodCkqKG89YWUobikpKkp0KHIpLUp0KG4pKihpPWFlKHQpKSpKdChlKSkvKGkqbyphKSk6KHQrbikvMn1mdW5jdGlvbiBzUGUoZSx0LHIsbil7dmFyIGk7aWYoZT09bnVsbClpPXIqRm4sbi5wb2ludCgtcnIsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQocnIsaSksbi5wb2ludChyciwwKSxuLnBvaW50KHJyLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLXJyLC1pKSxuLnBvaW50KC1yciwwKSxuLnBvaW50KC1ycixpKTtlbHNlIGlmKFllKGVbMF0tdFswXSk+Y2Upe3ZhciBvPWVbMF08dFswXT9ycjotcnI7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KHRbMF0sdFsxXSl9dmFyIHpULEJKPU0oKCk9PntGSigpO2xyKCk7elQ9Z0QoZnVuY3Rpb24oKXtyZXR1cm4hMH0sb1BlLHNQZSxbLXJyLC1Gbl0pfSk7ZnVuY3Rpb24gX0QoZSl7dmFyIHQ9YWUoZSkscj02KndlLG49dD4wLGk9WWUodCk+Y2U7ZnVuY3Rpb24gbyh1LGgsZixwKXt5SihwLGUscixmLHUsaCl9ZnVuY3Rpb24gYSh1LGgpe3JldHVybiBhZSh1KSphZShoKT50fWZ1bmN0aW9uIHModSl7dmFyIGgsZixwLGQsZztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZD1wPSExLGc9MX0scG9pbnQ6ZnVuY3Rpb24oXyx5KXt2YXIgeD1bXyx5XSxiLFM9YShfLHkpLEM9bj9TPzA6YyhfLHkpOlM/YyhfKyhfPDA/cnI6LXJyKSx5KTowO2lmKCFoJiYoZD1wPVMpJiZ1LmxpbmVTdGFydCgpLFMhPT1wJiYoYj1sKGgseCksKCFifHxJMihoLGIpfHxJMih4LGIpKSYmKHhbMF0rPWNlLHhbMV0rPWNlLFM9YSh4WzBdLHhbMV0pKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0pLHUubGluZUVuZCgpKSxoPWI7ZWxzZSBpZihpJiZoJiZuXlMpe3ZhciBQOyEoQyZmKSYmKFA9bCh4LGgsITApKSYmKGc9MCxuPyh1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdKSx1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCkpOih1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSkpKX1TJiYoIWh8fCFJMihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPXZjKHUpLGQ9dmMoaCksZz1bMSwwLDBdLF89JHAocCxkKSx5PVBUKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD0kcChnLF8pLGs9SVQoZyxTKSxPPUlUKF8sQyk7UU4oayxPKTt2YXIgRD1QLEI9UFQoayxEKSxJPVBUKEQsRCksTD1CKkItSSooUFQoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPVJyKEwpLEY9SVQoRCwoLUItUikvSSk7aWYoUU4oRixrKSxGPU55KEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1ZZShvdC1ycik8Y2UsU3Q9c3R8fG90PGNlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoWWUoRlswXS16KTxjZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+cnJeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9SVQoRCwoLUIrUikvSSk7cmV0dXJuIFFOKGJ0LGspLFtGLE55KGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOnJyLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIGdEKGEscyxvLG4/WzAsLWVdOlstcnIsZS1ycl0pfXZhciBISj1NKCgpPT57QTIoKTt2SigpO2xyKCk7YkooKTtGSigpfSk7ZnVuY3Rpb24gTDl0KGUsdCxyLG4saSxvKXt2YXIgYT1lWzBdLHM9ZVsxXSxsPXRbMF0sYz10WzFdLHU9MCxoPTEsZj1sLWEscD1jLXMsZDtpZihkPXItYSwhKCFmJiZkPjApKXtpZihkLz1mLGY8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYoZj4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1pLWEsISghZiYmZDwwKSl7aWYoZC89ZixmPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKGY+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWlmKGQ9bi1zLCEoIXAmJmQ+MCkpe2lmKGQvPXAscDwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihwPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPW8tcywhKCFwJiZkPDApKXtpZihkLz1wLHA8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYocD4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9cmV0dXJuIHU+MCYmKGVbMF09YSt1KmYsZVsxXT1zK3UqcCksaDwxJiYodFswXT1hK2gqZix0WzFdPXMraCpwKSwhMH19fX19dmFyIGs5dD1NKCgpPT57fSk7ZnVuY3Rpb24gUXAoZSx0LHIsbil7ZnVuY3Rpb24gaShjLHUpe3JldHVybiBlPD1jJiZjPD1yJiZ0PD11JiZ1PD1ufWZ1bmN0aW9uIG8oYyx1LGgsZil7dmFyIHA9MCxkPTA7aWYoYz09bnVsbHx8KHA9YShjLGgpKSE9PShkPWEodSxoKSl8fGwoYyx1KTwwXmg+MClkbyBmLnBvaW50KHA9PT0wfHxwPT09Mz9lOnIscD4xP246dCk7d2hpbGUoKHA9KHAraCs0KSU0KSE9PWQpO2Vsc2UgZi5wb2ludCh1WzBdLHVbMV0pfWZ1bmN0aW9uIGEoYyx1KXtyZXR1cm4gWWUoY1swXS1lKTxjZT91PjA/MDozOlllKGNbMF0tcik8Y2U/dT4wPzI6MTpZZShjWzFdLXQpPGNlP3U+MD8xOjA6dT4wPzM6Mn1mdW5jdGlvbiBzKGMsdSl7cmV0dXJuIGwoYy54LHUueCl9ZnVuY3Rpb24gbChjLHUpe3ZhciBoPWEoYywxKSxmPWEodSwxKTtyZXR1cm4gaCE9PWY/aC1mOmg9PT0wP3VbMV0tY1sxXTpoPT09MT9jWzBdLXVbMF06aD09PTI/Y1sxXS11WzFdOnVbMF0tY1swXX1yZXR1cm4gZnVuY3Rpb24oYyl7dmFyIHU9YyxoPWNEKCksZixwLGQsZyxfLHkseCxiLFMsQyxQLGs9e3BvaW50Ok8sbGluZVN0YXJ0OkwsbGluZUVuZDpSLHBvbHlnb25TdGFydDpCLHBvbHlnb25FbmQ6SX07ZnVuY3Rpb24gTyh6LFUpe2koeixVKSYmdS5wb2ludCh6LFUpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHo9MCxVPTAsVz1wLmxlbmd0aDtVPFc7KytVKWZvcih2YXIgWj1wW1VdLHJ0PTEsb3Q9Wi5sZW5ndGgsc3Q9WlswXSxTdCxidCxNdD1zdFswXSxsdD1zdFsxXTtydDxvdDsrK3J0KVN0PU10LGJ0PWx0LHN0PVpbcnRdLE10PXN0WzBdLGx0PXN0WzFdLGJ0PD1uP2x0Pm4mJihNdC1TdCkqKG4tYnQpPihsdC1idCkqKGUtU3QpJiYrK3o6bHQ8PW4mJihNdC1TdCkqKG4tYnQpPChsdC1idCkqKGUtU3QpJiYtLXo7cmV0dXJuIHp9ZnVuY3Rpb24gQigpe3U9aCxmPVtdLHA9W10sUD0hMH1mdW5jdGlvbiBJKCl7dmFyIHo9RCgpLFU9UCYmeixXPShmPU9UKGYpKS5sZW5ndGg7KFV8fFcpJiYoYy5wb2x5Z29uU3RhcnQoKSxVJiYoYy5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpKSxXJiZoRChmLHMseixvLGMpLGMucG9seWdvbkVuZCgpKSx1PWMsZj1wPWQ9bnVsbH1mdW5jdGlvbiBMKCl7ay5wb2ludD1GLHAmJnAucHVzaChkPVtdKSxDPSEwLFM9ITEseD1iPU5hTn1mdW5jdGlvbiBSKCl7ZiYmKEYoZyxfKSx5JiZTJiZoLnJlam9pbigpLGYucHVzaChoLnJlc3VsdCgpKSksay5wb2ludD1PLFMmJnUubGluZUVuZCgpfWZ1bmN0aW9uIEYoeixVKXt2YXIgVz1pKHosVSk7aWYocCYmZC5wdXNoKFt6LFVdKSxDKWc9eixfPVUseT1XLEM9ITEsVyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpKTtlbHNlIGlmKFcmJlMpdS5wb2ludCh6LFUpO2Vsc2V7dmFyIFo9W3g9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQseCkpLGI9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQsYikpXSxydD1bej1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCx6KSksVT1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCxVKSldO0w5dChaLHJ0LGUsdCxyLG4pPyhTfHwodS5saW5lU3RhcnQoKSx1LnBvaW50KFpbMF0sWlsxXSkpLHUucG9pbnQocnRbMF0scnRbMV0pLFd8fHUubGluZUVuZCgpLFA9ITEpOlcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSxQPSExKX14PXosYj1VLFM9V31yZXR1cm4ga319dmFyIEZULHlELEJUPU0oKCk9PntscigpO3hKKCk7azl0KCk7d0ooKTttRCgpO0ZUPTFlOSx5RD0tRlR9KTtmdW5jdGlvbiBSOXQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9UXAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgTjl0PU0oKCk9PntCVCgpfSk7ZnVuY3Rpb24gbFBlKCl7azIucG9pbnQ9dVBlLGsyLmxpbmVFbmQ9Y1BlfWZ1bmN0aW9uIGNQZSgpe2syLnBvaW50PWsyLmxpbmVFbmQ9cXJ9ZnVuY3Rpb24gdVBlKGUsdCl7ZSo9d2UsdCo9d2UsVUo9ZSx2RD1KdCh0KSx4RD1hZSh0KSxrMi5wb2ludD1oUGV9ZnVuY3Rpb24gaFBlKGUsdCl7ZSo9d2UsdCo9d2U7dmFyIHI9SnQodCksbj1hZSh0KSxpPVllKGUtVUopLG89YWUoaSksYT1KdChpKSxzPW4qYSxsPXhEKnItdkQqbipvLGM9dkQqcit4RCpuKm87VkouYWRkKFNuKFJyKHMqcytsKmwpLGMpKSxVSj1lLHZEPXIseEQ9bn1mdW5jdGlvbiBiRChlKXtyZXR1cm4gVkoucmVzZXQoKSxNbyhlLGsyKSwrVkp9dmFyIFZKLFVKLHZELHhELGsyLHFKPU0oKCk9PntreSgpO2xyKCk7WHAoKTttZygpO1ZKPUNzKCksazI9e3NwaGVyZTpxcixwb2ludDpxcixsaW5lU3RhcnQ6bFBlLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OnFyLHBvbHlnb25FbmQ6cXJ9fSk7ZnVuY3Rpb24gQnkoZSx0KXtyZXR1cm4gR0pbMF09ZSxHSlsxXT10LGJEKGZQZSl9dmFyIEdKLGZQZSxXSj1NKCgpPT57cUooKTtHSj1bbnVsbCxudWxsXSxmUGU9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOkdKfX0pO2Z1bmN0aW9uIHdEKGUsdCl7cmV0dXJuIGUmJk85dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP085dFtlLnR5cGVdKGUsdCk6ITF9ZnVuY3Rpb24gejl0KGUsdCl7cmV0dXJuIEJ5KGUsdCk9PT0wfWZ1bmN0aW9uIEY5dChlLHQpe3ZhciByPUJ5KGVbMF0sZVsxXSksbj1CeShlWzBdLHQpLGk9QnkodCxlWzFdKTtyZXR1cm4gbitpPD1yK2NlfWZ1bmN0aW9uIEI5dChlLHQpe3JldHVybiEhZkQoZS5tYXAocFBlKSxIOXQodCkpfWZ1bmN0aW9uIHBQZShlKXtyZXR1cm4gZT1lLm1hcChIOXQpLGUucG9wKCksZX1mdW5jdGlvbiBIOXQoZSl7cmV0dXJuW2VbMF0qd2UsZVsxXSp3ZV19ZnVuY3Rpb24gVjl0KGUsdCl7cmV0dXJuKGUmJkQ5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0Q5dFtlLnR5cGVdOndEKShlLHQpfXZhciBEOXQsTzl0LFU5dD1NKCgpPT57TUooKTtXSigpO2xyKCk7RDl0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdEKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih3RChyW25dLmdlb21ldHJ5LHQpKXJldHVybiEwO3JldHVybiExfX0sTzl0PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gejl0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKHo5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEY5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEY5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEI5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEI5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYod0QocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19fSk7ZnVuY3Rpb24gcTl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gRzl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gU0QoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIEpwKENUKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSnAoQ1Qocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSnAoQ1QodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJXUpPmNlfSkubWFwKGYpKS5jb25jYXQoSnAoQ1Qoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJWgpPmNlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPXE5dChvLGksOTApLHA9Rzl0KHQsZSxfKSxkPXE5dChzLGEsOTApLGc9Rzl0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArY2VdLFsxODAsOTAtY2VdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1jZV0sWzE4MCw4MCtjZV1dKX1mdW5jdGlvbiBXOXQoKXtyZXR1cm4gU0QoKSgpfXZhciBZOXQ9TSgoKT0+e21EKCk7bHIoKX0pO2Z1bmN0aW9uIGo5dChlLHQpe3ZhciByPWVbMF0qd2Usbj1lWzFdKndlLGk9dFswXSp3ZSxvPXRbMV0qd2UsYT1hZShuKSxzPUp0KG4pLGw9YWUobyksYz1KdChvKSx1PWEqYWUociksaD1hKkp0KHIpLGY9bCphZShpKSxwPWwqSnQoaSksZD0yKlpuKFJyKG9KKG8tbikrYSpsKm9KKGktcikpKSxnPUp0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1KdCh5Kj1kKS9nLGI9SnQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltTbihDLFMpKlVyLFNuKFAsUnIoUypTK0MqQykpKlVyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipVcixuKlVyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffXZhciBYOXQ9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBuZihlKXtyZXR1cm4gZX12YXIgTUQ9TSgoKT0+e30pO2Z1bmN0aW9uIGRQZSgpe3lnLnBvaW50PW1QZX1mdW5jdGlvbiBtUGUoZSx0KXt5Zy5wb2ludD1aOXQsJDl0PVhKPWUsSzl0PSRKPXR9ZnVuY3Rpb24gWjl0KGUsdCl7akouYWRkKCRKKmUtWEoqdCksWEo9ZSwkSj10fWZ1bmN0aW9uIGdQZSgpe1o5dCgkOXQsSzl0KX12YXIgWUosakosJDl0LEs5dCxYSiwkSix5ZyxLSixKOXQ9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO1lKPUNzKCksako9Q3MoKSx5Zz17cG9pbnQ6cXIsbGluZVN0YXJ0OnFyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eWcubGluZVN0YXJ0PWRQZSx5Zy5saW5lRW5kPWdQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3lnLmxpbmVTdGFydD15Zy5saW5lRW5kPXlnLnBvaW50PXFyLFlKLmFkZChZZShqSikpLGpKLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVlKLzI7cmV0dXJuIFlKLnJlc2V0KCksZX19O0tKPXlnfSk7ZnVuY3Rpb24geVBlKGUsdCl7ZTxSMiYmKFIyPWUpLGU+SFQmJihIVD1lKSx0PEVEJiYoRUQ9dCksdD5URCYmKFREPXQpfXZhciBSMixFRCxIVCxURCxfUGUsTjIsWko9TSgoKT0+e1hwKCk7UjI9MS8wLEVEPVIyLEhUPS1SMixURD1IVCxfUGU9e3BvaW50OnlQZSxsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6cXIscG9seWdvbkVuZDpxcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW1IyLEVEXSxbSFQsVERdXTtyZXR1cm4gSFQ9VEQ9LShFRD1SMj0xLzApLGV9fTtOMj1fUGV9KTtmdW5jdGlvbiBIeShlLHQpe0pKKz1lLFFKKz10LCsrVlR9ZnVuY3Rpb24gUTl0KCl7Q3UucG9pbnQ9dlBlfWZ1bmN0aW9uIHZQZShlLHQpe0N1LnBvaW50PXhQZSxIeShvZj1lLGFmPXQpfWZ1bmN0aW9uIHhQZShlLHQpe3ZhciByPWUtb2Ysbj10LWFmLGk9UnIocipyK24qbik7Q0QrPWkqKG9mK2UpLzIsQUQrPWkqKGFmK3QpLzIsRDIrPWksSHkob2Y9ZSxhZj10KX1mdW5jdGlvbiB0THQoKXtDdS5wb2ludD1IeX1mdW5jdGlvbiBiUGUoKXtDdS5wb2ludD1TUGV9ZnVuY3Rpb24gd1BlKCl7bkx0KGVMdCxyTHQpfWZ1bmN0aW9uIFNQZShlLHQpe0N1LnBvaW50PW5MdCxIeShlTHQ9b2Y9ZSxyTHQ9YWY9dCl9ZnVuY3Rpb24gbkx0KGUsdCl7dmFyIHI9ZS1vZixuPXQtYWYsaT1ScihyKnIrbipuKTtDRCs9aSoob2YrZSkvMixBRCs9aSooYWYrdCkvMixEMis9aSxpPWFmKmUtb2YqdCx0USs9aSoob2YrZSksZVErPWkqKGFmK3QpLFVUKz1pKjMsSHkob2Y9ZSxhZj10KX12YXIgSkosUUosVlQsQ0QsQUQsRDIsdFEsZVEsVVQsZUx0LHJMdCxvZixhZixDdSxyUSxpTHQ9TSgoKT0+e2xyKCk7Sko9MCxRSj0wLFZUPTAsQ0Q9MCxBRD0wLEQyPTAsdFE9MCxlUT0wLFVUPTAsQ3U9e3BvaW50Okh5LGxpbmVTdGFydDpROXQsbGluZUVuZDp0THQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q3UubGluZVN0YXJ0PWJQZSxDdS5saW5lRW5kPXdQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0N1LnBvaW50PUh5LEN1LmxpbmVTdGFydD1ROXQsQ3UubGluZUVuZD10THR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVVUP1t0US9VVCxlUS9VVF06RDI/W0NEL0QyLEFEL0QyXTpWVD9bSkovVlQsUUovVlRdOltOYU4sTmFOXTtyZXR1cm4gSko9UUo9VlQ9Q0Q9QUQ9RDI9dFE9ZVE9VVQ9MCxlfX07clE9Q3V9KTtmdW5jdGlvbiBQRChlKXt0aGlzLl9jb250ZXh0PWV9dmFyIG9MdD1NKCgpPT57bHIoKTtYcCgpO1BELnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxCaSk7YnJlYWt9fX0scmVzdWx0OnFyfX0pO2Z1bmN0aW9uIE1QZShlLHQpe0lELnBvaW50PWxMdCxhTHQ9cVQ9ZSxzTHQ9R1Q9dH1mdW5jdGlvbiBsTHQoZSx0KXtxVC09ZSxHVC09dCxpUS5hZGQoUnIocVQqcVQrR1QqR1QpKSxxVD1lLEdUPXR9dmFyIGlRLG5RLGFMdCxzTHQscVQsR1QsSUQsb1EsY0x0PU0oKCk9PntreSgpO2xyKCk7WHAoKTtpUT1DcygpLElEPXtwb2ludDpxcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtJRC5wb2ludD1NUGV9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuUSYmbEx0KGFMdCxzTHQpLElELnBvaW50PXFyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuUT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe25RPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStpUTtyZXR1cm4gaVEucmVzZXQoKSxlfX07b1E9SUR9KTtmdW5jdGlvbiBMRCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB1THQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dmFyIGhMdD1NKCgpPT57TEQucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOnVMdCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPXVMdCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19fSk7ZnVuY3Rpb24gZkx0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxNbyhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihLSikpLEtKLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihvUSkpLG9RLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gTW8oYSxuKE4yKSksTjIucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihyUSkpLHJRLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLG5mKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgTEQpOm5ldyBQRCh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfXZhciBwTHQ9TSgoKT0+e01EKCk7bWcoKTtKOXQoKTtaSigpO2lMdCgpO29MdCgpO2NMdCgpO2hMdCgpfSk7ZnVuY3Rpb24gZEx0KGUpe3JldHVybntzdHJlYW06dmcoZSl9fWZ1bmN0aW9uIHZnKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgYVE7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIGFRKCl7fXZhciBXVD1NKCgpPT57YVEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphUSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fX0pO2Z1bmN0aW9uIHNRKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksTW8ocixlLnN0cmVhbShOMikpLHQoTjIucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFZ5KGUsdCxyKXtyZXR1cm4gc1EoZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gTzIoZSx0LHIpe3JldHVybiBWeShlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiB6MihlLHQscil7cmV0dXJuIHNRKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gRjIoZSx0LHIpe3JldHVybiBzUShlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBrRD1NKCgpPT57bWcoKTtaSigpfSk7ZnVuY3Rpb24gbFEoZSx0KXtyZXR1cm4rdD9DUGUoZSx0KTpUUGUoZSl9ZnVuY3Rpb24gVFBlKGUpe3JldHVybiB2Zyh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt0PWUodCxyKSx0aGlzLnN0cmVhbS5wb2ludCh0WzBdLHRbMV0pfX0pfWZ1bmN0aW9uIENQZShlLHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfKXt2YXIgeT1jLW4seD11LWksYj15KnkreCp4O2lmKGI+NCp0JiZnLS0pe3ZhciBTPWErZixDPXMrcCxQPWwrZCxrPVJyKFMqUytDKkMrUCpQKSxPPVpuKFAvPWspLEQ9WWUoWWUoUCktMSk8Y2V8fFllKG8taCk8Y2U/KG8raCkvMjpTbihDLFMpLEI9ZShELE8pLEk9QlswXSxMPUJbMV0sUj1JLW4sRj1MLWksej14KlIteSpGOyh6KnovYj50fHxZZSgoeSpSK3gqRikvYi0uNSk+LjN8fGEqZitzKnArbCpkPEVQZSkmJihyKG4saSxvLGEscyxsLEksTCxELFMvPWssQy89ayxQLGcsXyksXy5wb2ludChJLEwpLHIoSSxMLEQsUyxDLFAsYyx1LGgsZixwLGQsZyxfKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgaSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXz17cG9pbnQ6eSxsaW5lU3RhcnQ6eCxsaW5lRW5kOlMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSxfLmxpbmVTdGFydD1DfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksXy5saW5lU3RhcnQ9eH19O2Z1bmN0aW9uIHkoTyxEKXtPPWUoTyxEKSxuLnBvaW50KE9bMF0sT1sxXSl9ZnVuY3Rpb24geCgpe2g9TmFOLF8ucG9pbnQ9YixuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoTyxEKXt2YXIgQj12YyhbTyxEXSksST1lKE8sRCk7cihoLGYsdSxwLGQsZyxoPUlbMF0sZj1JWzFdLHU9TyxwPUJbMF0sZD1CWzFdLGc9QlsyXSxtTHQsbiksbi5wb2ludChoLGYpfWZ1bmN0aW9uIFMoKXtfLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gQygpe3goKSxfLnBvaW50PVAsXy5saW5lRW5kPWt9ZnVuY3Rpb24gUChPLEQpe2IoaT1PLEQpLG89aCxhPWYscz1wLGw9ZCxjPWcsXy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtyKGgsZix1LHAsZCxnLG8sYSxpLHMsbCxjLG1MdCxuKSxfLmxpbmVFbmQ9UyxTKCl9cmV0dXJuIF99fXZhciBtTHQsRVBlLGdMdD1NKCgpPT57QTIoKTtscigpO1dUKCk7bUx0PTE2LEVQZT1hZSgzMCp3ZSl9KTtmdW5jdGlvbiBQUGUoZSl7cmV0dXJuIHZnKHtwb2ludDpmdW5jdGlvbih0LHIpe3ZhciBuPWUodCxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gWVQoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9ZnVuY3Rpb24gWVQoZSl7dmFyIHQscj0xNTAsbj00ODAsaT0yNTAsbyxhLHM9MCxsPTAsYz0wLHU9MCxoPTAsZixwLGQ9bnVsbCxnPXpULF89bnVsbCx5LHgsYixTPW5mLEM9LjUsUD1sUShJLEMpLGssTztmdW5jdGlvbiBEKEYpe3JldHVybiBGPXAoRlswXSp3ZSxGWzFdKndlKSxbRlswXSpyK28sYS1GWzFdKnJdfWZ1bmN0aW9uIEIoRil7cmV0dXJuIEY9cC5pbnZlcnQoKEZbMF0tbykvciwoYS1GWzFdKS9yKSxGJiZbRlswXSpVcixGWzFdKlVyXX1mdW5jdGlvbiBJKEYseil7cmV0dXJuIEY9dChGLHopLFtGWzBdKnIrbyxhLUZbMV0qcl19RC5zdHJlYW09ZnVuY3Rpb24oRil7cmV0dXJuIGsmJk89PT1GP2s6az1BUGUoUFBlKGYpKGcoUChTKE89RikpKSkpfSxELnByZWNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9RixkPXZvaWQgMCxSKCkpOmd9LEQucG9zdGNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9RixfPXk9eD1iPW51bGwsUigpKTpTfSxELmNsaXBBbmdsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rRj9fRChkPUYqd2UpOihkPW51bGwselQpLFIoKSk6ZCpVcn0sRC5jbGlwRXh0ZW50PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPUY9PW51bGw/KF89eT14PWI9bnVsbCxuZik6UXAoXz0rRlswXVswXSx5PStGWzBdWzFdLHg9K0ZbMV1bMF0sYj0rRlsxXVsxXSksUigpKTpfPT1udWxsP251bGw6W1tfLHldLFt4LGJdXX0sRC5zY2FsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rRixMKCkpOnJ9LEQudHJhbnNsYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStGWzBdLGk9K0ZbMV0sTCgpKTpbbixpXX0sRC5jZW50ZXI9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RlswXSUzNjAqd2UsbD1GWzFdJTM2MCp3ZSxMKCkpOltzKlVyLGwqVXJdfSxELnJvdGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1GWzBdJTM2MCp3ZSx1PUZbMV0lMzYwKndlLGg9Ri5sZW5ndGg+Mj9GWzJdJTM2MCp3ZTowLEwoKSk6W2MqVXIsdSpVcixoKlVyXX0sRC5wcmVjaXNpb249ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9bFEoSSxDPUYqRiksUigpKTpScihDKX0sRC5maXRFeHRlbnQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gVnkoRCxGLHopfSxELmZpdFNpemU9ZnVuY3Rpb24oRix6KXtyZXR1cm4gTzIoRCxGLHopfSxELmZpdFdpZHRoPWZ1bmN0aW9uKEYseil7cmV0dXJuIHoyKEQsRix6KX0sRC5maXRIZWlnaHQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gRjIoRCxGLHopfTtmdW5jdGlvbiBMKCl7cD1zRChmPU5UKGMsdSxoKSx0KTt2YXIgRj10KHMsbCk7cmV0dXJuIG89bi1GWzBdKnIsYT1pK0ZbMV0qcixSKCl9ZnVuY3Rpb24gUigpe3JldHVybiBrPU89bnVsbCxEfXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQuaW52ZXJ0PXQuaW52ZXJ0JiZCLEwoKX19dmFyIEFQZSxBdT1NKCgpPT57QkooKTtISigpO0JUKCk7Z0ooKTtNRCgpO2xyKCk7RFQoKTtXVCgpO2tEKCk7Z0x0KCk7QVBlPXZnKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqd2UsdCp3ZSl9fSl9KTtmdW5jdGlvbiBCMihlKXt2YXIgdD0wLHI9cnIvMyxuPVlUKGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp3ZSxyPW9bMV0qd2UpOlt0KlVyLHIqVXJdfSxpfXZhciBSRD1NKCgpPT57bHIoKTtBdSgpfSk7ZnVuY3Rpb24gX0x0KGUpe3ZhciB0PWFlKGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LEp0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3QsWm4oaSp0KV19LHJ9dmFyIHlMdD1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGNRKGUsdCl7dmFyIHI9SnQoZSksbj0ocitKdCh0KSkvMjtpZihZZShuKTxjZSlyZXR1cm4gX0x0KGUpO3ZhciBpPTErciooMipuLXIpLG89UnIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9UnIoaS0yKm4qSnQobCkpL247cmV0dXJuW2MqSnQocyo9biksby1jKmFlKHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWw7cmV0dXJuW1NuKHMsWWUoYykpL24qZGcoYyksWm4oKGktKHMqcytjKmMpKm4qbikvKDIqbikpXX0sYX1mdW5jdGlvbiBVeSgpe3JldHVybiBCMihjUSkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX12YXIgTkQ9TSgoKT0+e2xyKCk7UkQoKTt5THQoKX0pO2Z1bmN0aW9uIEREKCl7cmV0dXJuIFV5KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9dmFyIHVRPU0oKCk9PntORCgpfSk7ZnVuY3Rpb24gSVBlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiB2THQoKXt2YXIgZSx0LHI9REQoKSxuLGk9VXkoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1VeSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1JUGUoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2NlLGcrLjEyKnArY2VdLFtkLS4yMTQqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArY2UsZysuMTY2KnArY2VdLFtkLS4xMTUqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBWeSh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBPMih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gejIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBGMih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX12YXIgeEx0PU0oKCk9PntscigpO3VRKCk7TkQoKTtrRCgpfSk7ZnVuY3Rpb24gT0QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49YWUodCksaT1hZShyKSxvPWUobippKTtyZXR1cm5bbyppKkp0KHQpLG8qSnQocildfX1mdW5jdGlvbiBzZihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1Scih0KnQrcipyKSxpPWUobiksbz1KdChpKSxhPWFlKGkpO3JldHVybltTbih0Km8sbiphKSxabihuJiZyKm8vbildfX12YXIgSDI9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBiTHQoKXtyZXR1cm4gZW8oekQpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE4MC0uMDAxKX12YXIgekQsd0x0PU0oKCk9PntscigpO0gyKCk7QXUoKTt6RD1PRChmdW5jdGlvbihlKXtyZXR1cm4gUnIoMi8oMStlKSl9KTt6RC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqWm4oZS8yKX0pfSk7ZnVuY3Rpb24gU0x0KCl7cmV0dXJuIGVvKEZEKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBGRCxNTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO0ZEPU9EKGZ1bmN0aW9uKGUpe3JldHVybihlPUtOKGUpKSYmZS9KdChlKX0pO0ZELmludmVydD1zZihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSk7ZnVuY3Rpb24gcXkoZSx0KXtyZXR1cm5bZSxSeShDMigoRm4rdCkvMikpXX1mdW5jdGlvbiBFTHQoKXtyZXR1cm4gaFEocXkpLnNjYWxlKDk2MS9CaSl9ZnVuY3Rpb24gaFEoZSl7dmFyIHQ9ZW8oZSkscj10LmNlbnRlcixuPXQuc2NhbGUsaT10LnRyYW5zbGF0ZSxvPXQuY2xpcEV4dGVudCxhPW51bGwscyxsLGM7dC5zY2FsZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obihoKSx1KCkpOm4oKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkoaCksdSgpKTppKCl9LHQuY2VudGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKGgpLHUoKSk6cigpfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9PW51bGw/YT1zPWw9Yz1udWxsOihhPStoWzBdWzBdLHM9K2hbMF1bMV0sbD0raFsxXVswXSxjPStoWzFdWzFdKSx1KCkpOmE9PW51bGw/bnVsbDpbW2Esc10sW2wsY11dfTtmdW5jdGlvbiB1KCl7dmFyIGg9cnIqbigpLGY9dChsRCh0LnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbyhhPT1udWxsP1tbZlswXS1oLGZbMV0taF0sW2ZbMF0raCxmWzFdK2hdXTplPT09cXk/W1tNYXRoLm1heChmWzBdLWgsYSksc10sW01hdGgubWluKGZbMF0raCxsKSxjXV06W1thLE1hdGgubWF4KGZbMV0taCxzKV0sW2wsTWF0aC5taW4oZlsxXStoLGMpXV0pfXJldHVybiB1KCl9dmFyIEJEPU0oKCk9PntscigpO0RUKCk7QXUoKTtxeS5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKnljKFhOKHQpKS1Gbl19fSk7ZnVuY3Rpb24gSEQoZSl7cmV0dXJuIEMyKChGbitlKS8yKX1mdW5jdGlvbiBmUShlLHQpe3ZhciByPWFlKGUpLG49ZT09PXQ/SnQoZSk6Unkoci9hZSh0KSkvUnkoSEQodCkvSEQoZSkpLGk9ciokTihIRChlKSxuKS9uO2lmKCFuKXJldHVybiBxeTtmdW5jdGlvbiBvKGEscyl7aT4wP3M8LUZuK2NlJiYocz0tRm4rY2UpOnM+Rm4tY2UmJihzPUZuLWNlKTt2YXIgbD1pLyROKEhEKHMpLG4pO3JldHVybltsKkp0KG4qYSksaS1sKmFlKG4qYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWRnKG4pKlJyKGEqYStsKmwpO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLDIqeWMoJE4oaS9jLDEvbikpLUZuXX0sb31mdW5jdGlvbiBUTHQoKXtyZXR1cm4gQjIoZlEpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9dmFyIENMdD1NKCgpPT57bHIoKTtSRCgpO0JEKCl9KTtmdW5jdGlvbiBHeShlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIEFMdCgpe3JldHVybiBlbyhHeSkuc2NhbGUoMTUyLjYzKX12YXIgcFE9TSgoKT0+e0F1KCk7R3kuaW52ZXJ0PUd5fSk7ZnVuY3Rpb24gZFEoZSx0KXt2YXIgcj1hZShlKSxuPWU9PT10P0p0KGUpOihyLWFlKHQpKS8odC1lKSxpPXIvbitlO2lmKFllKG4pPGNlKXJldHVybiBHeTtmdW5jdGlvbiBvKGEscyl7dmFyIGw9aS1zLGM9biphO3JldHVybltsKkp0KGMpLGktbCphZShjKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLGktZGcobikqUnIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIFBMdCgpe3JldHVybiBCMihkUSkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgSUx0PU0oKCk9PntscigpO1JEKCk7cFEoKX0pO2Z1bmN0aW9uIFZEKGUsdCl7dmFyIHI9YWUodCksbj1hZShlKSpyO3JldHVybltyKkp0KGUpL24sSnQodCkvbl19ZnVuY3Rpb24gTEx0KCl7cmV0dXJuIGVvKFZEKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfXZhciBrTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO1ZELmludmVydD1zZih5Yyl9KTtmdW5jdGlvbiBVRChlLHQscixuKXtyZXR1cm4gZT09PTEmJnQ9PT0xJiZyPT09MCYmbj09PTA/bmY6dmcoe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSplK3Isbyp0K24pfX0pfWZ1bmN0aW9uIFJMdCgpe3ZhciBlPTEsdD0wLHI9MCxuPTEsaT0xLG89bmYsYT1udWxsLHMsbCxjLHU9bmYsaCxmLHA7ZnVuY3Rpb24gZCgpe3JldHVybiBoPWY9bnVsbCxwfXJldHVybiBwPXtzdHJlYW06ZnVuY3Rpb24oZyl7cmV0dXJuIGgmJmY9PT1nP2g6aD1vKHUoZj1nKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWcsYT1zPWw9Yz1udWxsLGQoKSk6dX0sY2xpcEV4dGVudDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1nPT1udWxsPyhhPXM9bD1jPW51bGwsbmYpOlFwKGE9K2dbMF1bMF0scz0rZ1swXVsxXSxsPStnWzFdWzBdLGM9K2dbMV1bMV0pLGQoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19LHNjYWxlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKChlPStnKSpuLGUqaSx0LHIpLGQoKSk6ZX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKmksdD0rZ1swXSxyPStnWzFdKSxkKCkpOlt0LHJdfSxyZWZsZWN0WDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1VRChlKihuPWc/LTE6MSksZSppLHQsciksZCgpKTpuPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKihpPWc/LTE6MSksdCxyKSxkKCkpOmk8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIFZ5KHAsZyxfKX0sZml0U2l6ZTpmdW5jdGlvbihnLF8pe3JldHVybiBPMihwLGcsXyl9LGZpdFdpZHRoOmZ1bmN0aW9uKGcsXyl7cmV0dXJuIHoyKHAsZyxfKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIEYyKHAsZyxfKX19fXZhciBOTHQ9TSgoKT0+e0JUKCk7TUQoKTtXVCgpO2tEKCl9KTtmdW5jdGlvbiBxRChlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBETHQoKXtyZXR1cm4gZW8ocUQpLnNjYWxlKDE3NS4yOTUpfXZhciBPTHQ9TSgoKT0+e0F1KCk7bHIoKTtxRC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWWUoaSk+Y2UmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX19KTtmdW5jdGlvbiBHRChlLHQpe3JldHVyblthZSh0KSpKdChlKSxKdCh0KV19ZnVuY3Rpb24gekx0KCl7cmV0dXJuIGVvKEdEKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2NlKX12YXIgRkx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtHRC5pbnZlcnQ9c2YoWm4pfSk7ZnVuY3Rpb24gV0QoZSx0KXt2YXIgcj1hZSh0KSxuPTErYWUoZSkqcjtyZXR1cm5bcipKdChlKS9uLEp0KHQpL25dfWZ1bmN0aW9uIEJMdCgpe3JldHVybiBlbyhXRCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX12YXIgSEx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtXRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqeWMoZSl9KX0pO2Z1bmN0aW9uIFlEKGUsdCl7cmV0dXJuW1J5KEMyKChGbit0KS8yKSksLWVdfWZ1bmN0aW9uIFZMdCgpe3ZhciBlPWhRKFlEKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9dmFyIFVMdD1NKCgpPT57bHIoKTtCRCgpO1lELmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKnljKFhOKGUpKS1Gbl19fSk7dmFyIHFMdD1NKCgpPT57dUooKTtaSXQoKTtpOXQoKTt2SigpO0JKKCk7SEooKTtOOXQoKTtCVCgpO1U5dCgpO1dKKCk7WTl0KCk7WDl0KCk7cUooKTtwTHQoKTt1USgpO3hMdCgpO3dMdCgpO01MdCgpO0NMdCgpO05EKCk7SUx0KCk7cFEoKTtrTHQoKTtOTHQoKTtBdSgpO0JEKCk7T0x0KCk7Rkx0KCk7SEx0KCk7VUx0KCk7RFQoKTttZygpO1dUKCl9KTtmdW5jdGlvbiBMUGUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24ga1BlKGUpe3JldHVybiBlLnJlZHVjZShSUGUsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gUlBlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIE5QZShlKXtyZXR1cm4gMStlLnJlZHVjZShEUGUsMCl9ZnVuY3Rpb24gRFBlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBPUGUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIHpQZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gR0x0KCl7dmFyIGU9TFBlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1rUGUocCksZi55PU5QZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1PUGUobyksYz16UGUobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9dmFyIFdMdD1NKCgpPT57fSk7ZnVuY3Rpb24gRlBlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFlMdCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihGUGUpfXZhciBqTHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhMdChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc312YXIgJEx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc312YXIgWkx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9dmFyIFFMdD1NKCgpPT57fSk7ZnVuY3Rpb24gdGt0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9dmFyIGVrdD1NKCgpPT57fSk7ZnVuY3Rpb24gcmt0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9dmFyIG5rdD1NKCgpPT57fSk7ZnVuY3Rpb24gaWt0KGUpe2Zvcih2YXIgdD10aGlzLHI9QlBlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gQlBlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX12YXIgb2t0PU0oKCk9Pnt9KTtmdW5jdGlvbiBha3QoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9dmFyIHNrdD1NKCgpPT57fSk7ZnVuY3Rpb24gbGt0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfXZhciBja3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHVrdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX12YXIgaGt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBma3QoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9dmFyIHBrdD1NKCgpPT57fSk7ZnVuY3Rpb24galQoZSx0KXt2YXIgcj1uZXcgeGcoZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD1WUGUpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyB4ZyhzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKG1RKX1mdW5jdGlvbiBIUGUoKXtyZXR1cm4galQodGhpcykuZWFjaEJlZm9yZShVUGUpfWZ1bmN0aW9uIFZQZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBVUGUoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIG1RKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24geGcoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dmFyIGpEPU0oKCk9PntqTHQoKTskTHQoKTtaTHQoKTtRTHQoKTtla3QoKTtua3QoKTtva3QoKTtza3QoKTtja3QoKTtoa3QoKTtwa3QoKTt4Zy5wcm90b3R5cGU9alQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4Zyxjb3VudDpZTHQsZWFjaDpYTHQsZWFjaEFmdGVyOkpMdCxlYWNoQmVmb3JlOktMdCxzdW06dGt0LHNvcnQ6cmt0LHBhdGg6aWt0LGFuY2VzdG9yczpha3QsZGVzY2VuZGFudHM6bGt0LGxlYXZlczp1a3QsbGlua3M6Zmt0LGNvcHk6SFBlfX0pO2Z1bmN0aW9uIG1rdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX12YXIgZGt0LGdrdD1NKCgpPT57ZGt0PUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uICREKGUpe2Zvcih2YXIgdD0wLHI9KGU9bWt0KGRrdC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJl9rdChvLGkpPysrdDoobz1HUGUobj1xUGUobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBxUGUoZSx0KXt2YXIgcixuO2lmKGdRKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoWEQodCxlW3JdKSYmZ1EoWFQoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKFhEKFhUKGVbcl0sZVtuXSksdCkmJlhEKFhUKGVbcl0sdCksZVtuXSkmJlhEKFhUKGVbbl0sdCksZVtyXSkmJmdRKHlrdChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gWEQoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gX2t0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZ1EoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighX2t0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gR1BlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBXUGUoZVswXSk7Y2FzZSAyOnJldHVybiBYVChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4geWt0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gV1BlKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gWFQoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHlrdChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fXZhciBfUT1NKCgpPT57Z2t0KCl9KTtmdW5jdGlvbiB2a3QoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPXQucityLnIsYT1lLnIrci5yLHM9dC54LW4sbD10LnktaSxjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO3IueD1uK3UqcytoKmwsci55PWkrdSpsLWgqc31lbHNlIHIueD1uK2Esci55PWl9ZnVuY3Rpb24geGt0KGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksaT1lLnIrdC5yO3JldHVybiBpKmktMWUtNj5yKnIrbipufWZ1bmN0aW9uIGJrdChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBLRChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24geVEoZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7dmt0KHIsdCxuPWVbMl0pLHQ9bmV3IEtEKHQpLHI9bmV3IEtEKHIpLG49bmV3IEtEKG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXt2a3QodC5fLHIuXyxuPWVbc10pLG49bmV3IEtEKG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYoeGt0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoeGt0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPWJrdCh0KTsobj1uLm5leHQpIT09cjspKGE9Ymt0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj0kRCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiB3a3QoZSl7cmV0dXJuIHlRKGUpLGV9dmFyIHZRPU0oKCk9PntfUSgpfSk7ZnVuY3Rpb24gU2t0KGUpe3JldHVybiBlPT1udWxsP251bGw6VjIoZSl9ZnVuY3Rpb24gVjIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfXZhciBaRD1NKCgpPT57fSk7ZnVuY3Rpb24gdGQoKXtyZXR1cm4gMH1mdW5jdGlvbiBiZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHhRPU0oKCk9Pnt9KTtmdW5jdGlvbiBZUGUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBUa3QoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj10ZDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoTWt0KGUpKS5lYWNoQWZ0ZXIoYlEobiwuNSkpLmVhY2hCZWZvcmUoRWt0KDEpKTpvLmVhY2hCZWZvcmUoTWt0KFlQZSkpLmVhY2hBZnRlcihiUSh0ZCwxKSkuZWFjaEFmdGVyKGJRKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKEVrdChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Ta3QobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOmJnKCtvKSxpKTpufSxpfWZ1bmN0aW9uIE1rdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIGJRKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9eVEobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBFa3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19dmFyIENrdD1NKCgpPT57dlEoKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBKRChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9dmFyIHdRPU0oKCk9Pnt9KTtmdW5jdGlvbiBsZihlLHQscixuLGkpe2Zvcih2YXIgbz1lLmNoaWxkcmVuLGEscz0tMSxsPW8ubGVuZ3RoLGM9ZS52YWx1ZSYmKG4tdCkvZS52YWx1ZTsrK3M8bDspYT1vW3NdLGEueTA9cixhLnkxPWksYS54MD10LGEueDE9dCs9YS52YWx1ZSpjfXZhciBVMj1NKCgpPT57fSk7ZnVuY3Rpb24gQWt0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKEpEKSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmbGYobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIFBrdD1NKCgpPT57d1EoKTtVMigpfSk7ZnVuY3Rpb24gWFBlKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uICRQZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBra3QoKXt2YXIgZT1YUGUsdD0kUGU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IHhnKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9SWt0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP0xrdDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtJa3QraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1Ma3QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1qUGUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKG1RKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1WMihuKSxyKTp0fSxyfXZhciBJa3QsalBlLExrdCxSa3Q9TSgoKT0+e1pEKCk7akQoKTtJa3Q9IiQiLGpQZT17ZGVwdGg6LTF9LExrdD17fX0pO2Z1bmN0aW9uIEtQZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBTUShlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIE1RKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24gWlBlKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIEpQZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiBRUGUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gUUQoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1mdW5jdGlvbiB0NmUoZSl7Zm9yKHZhciB0PW5ldyBRRChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBRRChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgUUQobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gTmt0KCl7dmFyIGU9S1BlLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9dDZlKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe0pQZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD1NUShkKSxmPVNRKGYpLGQmJmY7KWc9U1EoZykscD1NUShwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoWlBlKFFQZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhTVEocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVNRKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfXZhciBEa3Q9TSgoKT0+e2pEKCk7UUQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGcucHJvdG90eXBlKX0pO2Z1bmN0aW9uIHdnKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyICRUPU0oKCk9Pnt9KTtmdW5jdGlvbiBUUShlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/bGYobCxyLG4saSxnP24rPWQqXy9nOm8pOndnKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgRVEsdE8sZU89TSgoKT0+e1UyKCk7JFQoKTtFUT0oMStNYXRoLnNxcnQoNSkpLzI7dE89ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7VFEodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KEVRKX0pO2Z1bmN0aW9uIE9rdCgpe3ZhciBlPXRPLHQ9ITEscj0xLG49MSxpPVswXSxvPXRkLGE9dGQscz10ZCxsPXRkLGM9dGQ7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKEpEKSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpiZygrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpjfSx1fXZhciB6a3Q9TSgoKT0+e3dRKCk7ZU8oKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBGa3QoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX12YXIgQmt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIa3QoZSx0LHIsbixpKXsoZS5kZXB0aCYxP3dnOmxmKShlLHQscixuLGkpfXZhciBWa3Q9TSgoKT0+e1UyKCk7JFQoKX0pO3ZhciBVa3QscWt0PU0oKCk9PntVMigpOyRUKCk7ZU8oKTtVa3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP2xmKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTp3ZyhjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9VFEodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShFUSl9KTt2YXIgR2t0PU0oKCk9PntXTHQoKTtqRCgpO0NrdCgpO3ZRKCk7X1EoKTtQa3QoKTtSa3QoKTtEa3QoKTt6a3QoKTtCa3QoKTtVMigpOyRUKCk7Vmt0KCk7ZU8oKTtxa3QoKX0pO2Z1bmN0aW9uIGVkKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBTZyhlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgck89TSgoKT0+e30pO2Z1bmN0aW9uIGhmKCl7fWZ1bmN0aW9uIFlrdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGw2ZSgpe3JldHVybiBKa3QodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gamt0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gRWcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9ZTZlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/WGt0KHQpOnI9PT0zP25ldyBybyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/bk8odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/bk8odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1yNmUuZXhlYyhlKSk/bmV3IHJvKHRbMV0sdFsyXSx0WzNdLDEpOih0PW42ZS5leGVjKGUpKT9uZXcgcm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9aTZlLmV4ZWMoZSkpP25PKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PW82ZS5leGVjKGUpKT9uTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1hNmUuZXhlYyhlKSk/Wmt0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9czZlLmV4ZWMoZSkpP1prdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOldrdC5oYXNPd25Qcm9wZXJ0eShlKT9Ya3QoV2t0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgcm8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBYa3QoZSl7cmV0dXJuIG5ldyBybyhlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gbk8oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBybyhlLHQscixuKX1mdW5jdGlvbiBaVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksZT8oZT1lLnJnYigpLG5ldyBybyhlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgcm99ZnVuY3Rpb24gRzIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1pUKGUpOm5ldyBybyhlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcm8oZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRrdCgpe3JldHVybiIjIitDUSh0aGlzLnIpK0NRKHRoaXMuZykrQ1EodGhpcy5iKX1mdW5jdGlvbiBLa3QoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gQ1EoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gWmt0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgY2YoZSx0LHIsbil9ZnVuY3Rpb24gSmt0KGUpe2lmKGUgaW5zdGFuY2VvZiBjZilyZXR1cm4gbmV3IGNmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksIWUpcmV0dXJuIG5ldyBjZjtpZihlIGluc3RhbmNlb2YgY2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgY2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Smt0KGUpOm5ldyBjZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gY2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEFRKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBNZyxXeSxxMixLVCx1ZixlNmUscjZlLG42ZSxpNmUsbzZlLGE2ZSxzNmUsV2t0LGlPPU0oKCk9PntyTygpO01nPS43LFd5PTEvTWcscTI9IlxccyooWystXT9cXGQrKVxccyoiLEtUPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHVmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixlNmU9L14jKFswLTlhLWZdezMsOH0pJC8scjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1txMixxMixxMl0rIlxcKSQiKSxuNmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3VmLHVmLHVmXSsiXFwpJCIpLGk2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3EyLHEyLHEyLEtUXSsiXFwpJCIpLG82ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3VmLHVmLHVmLEtUXSsiXFwpJCIpLGE2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbS1QsdWYsdWZdKyJcXCkkIiksczZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbS1QsdWYsdWYsS1RdKyJcXCkkIiksV2t0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2VkKGhmLEVnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OllrdCxmb3JtYXRIZXg6WWt0LGZvcm1hdEhzbDpsNmUsZm9ybWF0UmdiOmprdCx0b1N0cmluZzpqa3R9KTtlZChybyxHMixTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9XeTpNYXRoLnBvdyhXeSxlKSxuZXcgcm8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IHJvKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6JGt0LGZvcm1hdEhleDoka3QsZm9ybWF0UmdiOktrdCx0b1N0cmluZzpLa3R9KSk7ZWQoY2YsSlQsU2coaGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/V3k6TWF0aC5wb3coV3ksZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgcm8oQVEoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksQVEoZSxpLG4pLEFRKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIG9PLGFPLFBRPU0oKCk9PntvTz1NYXRoLlBJLzE4MCxhTz0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIGk4dChlKXtpZihlIGluc3RhbmNlb2YgZmYpcmV0dXJuIG5ldyBmZihlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiByZClyZXR1cm4gbzh0KGUpO2UgaW5zdGFuY2VvZiByb3x8KGU9WlQoZSkpO3ZhciB0PVJRKGUucikscj1SUShlLmcpLG49UlEoZS5iKSxpPUlRKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvdDh0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1JUSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL1FrdCksYT1JUSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL2U4dCkpLG5ldyBmZigxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gWTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2k4dChlKTpuZXcgZmYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGZmKGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBJUShlKXtyZXR1cm4gZT5jNmU/TWF0aC5wb3coZSwxLzMpOmUvbjh0K3I4dH1mdW5jdGlvbiBMUShlKXtyZXR1cm4gZT5XMj9lKmUqZTpuOHQqKGUtcjh0KX1mdW5jdGlvbiBrUShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFJRKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHU2ZShlKXtpZihlIGluc3RhbmNlb2YgcmQpcmV0dXJuIG5ldyByZChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBmZnx8KGU9aTh0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgcmQoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqYU87cmV0dXJuIG5ldyByZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBRVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dTZlKGUpOm5ldyByZChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcmQoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG84dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgZmYoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCpvTztyZXR1cm4gbmV3IGZmKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9dmFyIHNPLFFrdCx0OHQsZTh0LHI4dCxXMixuOHQsYzZlLGE4dD1NKCgpPT57ck8oKTtpTygpO1BRKCk7c089MTgsUWt0PS45NjQyMix0OHQ9MSxlOHQ9LjgyNTIxLHI4dD00LzI5LFcyPTYvMjksbjh0PTMqVzIqVzIsYzZlPVcyKlcyKlcyO2VkKGZmLFkyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZmKHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZmYodGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD1Ra3QqTFEodCksZT10OHQqTFEoZSkscj1lOHQqTFEociksbmV3IHJvKGtRKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLGtRKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksa1EoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtlZChyZCxRVCxTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByZCh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJkKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG84dCh0aGlzKS5yZ2IoKX19KSl9KTtmdW5jdGlvbiBoNmUoZSl7aWYoZSBpbnN0YW5jZW9mIFl5KXJldHVybiBuZXcgWXkoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2Ygcm98fChlPVpUKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oYzh0Km4rczh0KnQtbDh0KnIpLyhjOHQrczh0LWw4dCksbz1uLWksYT0odEMqKHItaSktRFEqbykvbE8scz1NYXRoLnNxcnQoYSphK28qbykvKHRDKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqYU8tMTIwOk5hTjtyZXR1cm4gbmV3IFl5KGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGoyKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9oNmUoZSk6bmV3IFl5KGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBZeShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHU4dCxOUSxEUSxsTyx0QyxzOHQsbDh0LGM4dCxoOHQ9TSgoKT0+e3JPKCk7aU8oKTtQUSgpO3U4dD0tLjE0ODYxLE5RPTEuNzgyNzcsRFE9LS4yOTIyNyxsTz0tLjkwNjQ5LHRDPTEuOTcyOTQsczh0PXRDKmxPLGw4dD10QypOUSxjOHQ9TlEqRFEtbE8qdTh0O2VkKFl5LGoyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1d5Ok1hdGgucG93KFd5LGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP01nOk1hdGgucG93KE1nLGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqb08sdD0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLG49TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IHJvKDI1NSoodCtyKih1OHQqbitOUSppKSksMjU1Kih0K3IqKERRKm4rbE8qaSkpLDI1NSoodCtyKih0QypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgank9TSgoKT0+e2lPKCk7YTh0KCk7aDh0KCl9KTtmdW5jdGlvbiBPUShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGNPKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBPUSgoci1uL3QpKnQsYSxpLG8scyl9fXZhciB1Tz1NKCgpPT57fSk7ZnVuY3Rpb24gaE8oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBPUSgoci1uL3QpKnQsaSxvLGEscyl9fXZhciB6UT1NKCgpPT57dU8oKX0pO2Z1bmN0aW9uIFgyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRlE9TSgoKT0+e30pO2Z1bmN0aW9uIGY4dChlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGY2ZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uICQyKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2Y4dChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6WDIoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBwOHQoZSl7cmV0dXJuKGU9K2UpPT0xP0puOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9mNmUodCxyLGUpOlgyKGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIEpuKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2Y4dChlLHIpOlgyKGlzTmFOKGUpP3Q6ZSl9dmFyIEsyPU0oKCk9PntGUSgpfSk7ZnVuY3Rpb24gZDh0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9RzIodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIGVDLG04dCxnOHQsQlE9TSgoKT0+e2p5KCk7dU8oKTt6USgpO0syKCk7ZUM9ZnVuY3Rpb24gZSh0KXt2YXIgcj1wOHQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9RzIoaSkpLnIsKG89RzIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7bTh0PWQ4dChjTyksZzh0PWQ4dChoTyl9KTtmdW5jdGlvbiBmTyhlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPVoyKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIEhRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gZE8oZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSt0Km4pLHJ9fXZhciBWUT1NKCgpPT57fSk7ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBlK3Qqcn19dmFyIHJDPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTyhlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPVoyKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIFVRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gcDZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBkNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBnTyhlLHQpe3ZhciByPUdRLmxhc3RJbmRleD1xUS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1HUS5leGVjKGUpKSYmKGk9cVEuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkFzKG4saSl9KSkscj1xUS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/ZDZlKGxbMF0ueCk6cDZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBHUSxxUSxXUT1NKCgpPT57ckMoKTtHUT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscVE9bmV3IFJlZ0V4cChHUS5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIFoyKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9YMih0KToocj09PSJudW1iZXIiP0FzOnI9PT0ic3RyaW5nIj8obj1FZyh0KSk/KHQ9bixlQyk6Z086dCBpbnN0YW5jZW9mIEVnP2VDOnQgaW5zdGFuY2VvZiBEYXRlP2RPOkFycmF5LmlzQXJyYXkodCk/Zk86dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP21POkFzKShlLHQpfXZhciBwTz1NKCgpPT57ankoKTtCUSgpO0hRKCk7VlEoKTtyQygpO1VRKCk7V1EoKTtGUSgpfSk7ZnVuY3Rpb24gXzh0KGUsdCl7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlK3Qqcil9fXZhciB5OHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlRKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnY4dCxza2V3WDpNYXRoLmF0YW4obCkqdjh0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgdjh0LF9PLHg4dD1NKCgpPT57djh0PTE4MC9NYXRoLlBJLF9PPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gdzh0KGUpe3JldHVybiBlPT09Im5vbmUiP19POihuQ3x8KG5DPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGpRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxiOHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLG5DLnN0eWxlLnRyYW5zZm9ybT1lLGU9Yjh0LmdldENvbXB1dGVkU3R5bGUoalEuYXBwZW5kQ2hpbGQobkMpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGpRLnJlbW92ZUNoaWxkKG5DKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxZUSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIFM4dChlKXtyZXR1cm4gZT09bnVsbD9fTzooeU98fCh5Tz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx5Ty5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9eU8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsWVEoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpfTyl9dmFyIG5DLGpRLGI4dCx5TyxNOHQ9TSgoKT0+e3g4dCgpfSk7ZnVuY3Rpb24gRTh0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6QXMoYyxoKX0se2k6Zy0yLHg6QXModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpBcyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkFzKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpBcyhjLGgpfSx7aTpnLTIseDpBcyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBUOHQsQzh0LEE4dD1NKCgpPT57ckMoKTtNOHQoKTtUOHQ9RTh0KHc4dCwicHgsICIsInB4KSIsImRlZykiKSxDOHQ9RTh0KFM4dCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gSTh0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIGc2ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBfNmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIEw4dChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8bTZlKWY9TWF0aC5sb2cocy9pKS9pQyxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKGlDKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK1A4dCp1KS8oMippKlhRKnApLGc9KHMqcy1pKmktUDh0KnUpLygyKnMqWFEqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL2lDLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9STh0KF8pLEM9aS8oWFEqcCkqKFMqXzZlKGlDKmIrXyktZzZlKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0k4dChpQypiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgaUMsWFEsUDh0LG02ZSxrOHQ9TSgoKT0+e2lDPU1hdGguU1FSVDIsWFE9MixQOHQ9NCxtNmU9MWUtMTJ9KTtmdW5jdGlvbiBSOHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1KVCh0KSkuaCwocj1KVChyKSkuaCksaT1Kbih0LnMsci5zKSxvPUpuKHQubCxyLmwpLGE9Sm4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LnM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIE44dCxEOHQsTzh0PU0oKCk9PntqeSgpO0syKCk7Tjh0PVI4dCgkMiksRDh0PVI4dChKbil9KTtmdW5jdGlvbiAkUShlLHQpe3ZhciByPUpuKChlPVkyKGUpKS5sLCh0PVkyKHQpKS5sKSxuPUpuKGUuYSx0LmEpLGk9Sm4oZS5iLHQuYiksbz1KbihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fXZhciB6OHQ9TSgoKT0+e2p5KCk7SzIoKX0pO2Z1bmN0aW9uIEY4dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVFUKHQpKS5oLChyPVFUKHIpKS5oKSxpPUpuKHQuYyxyLmMpLG89Sm4odC5sLHIubCksYT1Kbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgQjh0LEg4dCxWOHQ9TSgoKT0+e2p5KCk7SzIoKTtCOHQ9Rjh0KCQyKSxIOHQ9Rjh0KEpuKX0pO2Z1bmN0aW9uIFU4dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWoyKGkpKS5oLChvPWoyKG8pKS5oKSxzPUpuKGkucyxvLnMpLGw9Sm4oaS5sLG8ubCksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIHE4dCxHOHQsVzh0PU0oKCk9PntqeSgpO0syKCk7cTh0PVU4dCgkMiksRzh0PVU4dChKbil9KTtmdW5jdGlvbiBZOHQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn12YXIgajh0PU0oKCk9Pnt9KTt2YXIgWDh0PU0oKCk9PntwTygpO0hRKCk7dU8oKTt6USgpO1ZRKCk7ckMoKTtVUSgpO3k4dCgpO1dRKCk7QTh0KCk7azh0KCk7QlEoKTtPOHQoKTt6OHQoKTtWOHQoKTtXOHQoKTtqOHQoKX0pO2Z1bmN0aW9uIEpRKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gJDh0KCl7cmV0dXJuIG5ldyBKUX12YXIgS1EsWlEsWHkseTZlLEs4dCxaOHQ9TSgoKT0+e0tRPU1hdGguUEksWlE9MipLUSxYeT0xZS02LHk2ZT1aUS1YeTtKUS5wcm90b3R5cGU9JDh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SlEsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPlh5KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+WHkpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigoS1EtTWF0aC5hY29zKChkK2gtZykvKDIqXyp5KSkpLzIpLGI9eC95LFM9eC9fO01hdGguYWJzKGItMSk+WHkmJih0aGlzLl8rPSJMIisoZStiKmMpKyIsIisodCtiKnUpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsodSpmPmMqcCkrIiwiKyh0aGlzLl94MT1lK1MqcykrIiwiKyh0aGlzLl95MT10K1MqbCl9fSxhcmM6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2U9K2UsdD0rdCxyPStyO3ZhciBhPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGw9ZSthLGM9dCtzLHU9MV5vLGg9bz9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WHl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlh5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLHImJihoPDAmJihoPWglWlErWlEpLGg+eTZlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPlh5JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj1LUSkrIiwiK3UrIiwiKyh0aGlzLl94MT1lK3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9dCtyKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O0s4dD0kOHR9KTt2YXIgSjh0PU0oKCk9PntaOHQoKX0pO2Z1bmN0aW9uIFE4dChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuLGk9ZVtyLTFdLG89MDsrK3Q8cjspbj1pLGk9ZVt0XSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9dmFyIHRSdD1NKCgpPT57fSk7ZnVuY3Rpb24gZVJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG49MCxpPTAsbyxhPWVbci0xXSxzLGw9MDsrK3Q8cjspbz1hLGE9ZVt0XSxsKz1zPW9bMF0qYVsxXS1hWzBdKm9bMV0sbis9KG9bMF0rYVswXSkqcyxpKz0ob1sxXSthWzFdKSpzO3JldHVybiBsKj0zLFtuL2wsaS9sXX12YXIgclJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBuUnQoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pLSh0WzFdLWVbMV0pKihyWzBdLWVbMF0pfXZhciBpUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHY2ZShlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1mdW5jdGlvbiBvUnQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGk9MjtpPHQ7KytpKXtmb3IoO24+MSYmblJ0KGVbcltuLTJdXSxlW3Jbbi0xXV0sZVtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGFSdChlKXtpZigocj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxyLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpO2Zvcih0PTA7dDxyOysrdCluW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iobi5zb3J0KHY2ZSksdD0wO3Q8cjsrK3QpaVt0XT1bblt0XVswXSwtblt0XVsxXV07dmFyIG89b1J0KG4pLGE9b1J0KGkpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2Zvcih0PW8ubGVuZ3RoLTE7dD49MDstLXQpYy5wdXNoKGVbbltvW3RdXVsyXV0pO2Zvcih0PStzO3Q8YS5sZW5ndGgtbDsrK3QpYy5wdXNoKGVbblthW3RdXVsyXV0pO3JldHVybiBjfXZhciBzUnQ9TSgoKT0+e2lSdCgpfSk7ZnVuY3Rpb24gbFJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX12YXIgY1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiB1UnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9dmFyIGhSdD1NKCgpPT57fSk7dmFyIGZSdD1NKCgpPT57dFJ0KCk7clJ0KCk7c1J0KCk7Y1J0KCk7aFJ0KCl9KTtmdW5jdGlvbiBwUnQoZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLHI9K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiBkUnQodGhpcy5jb3Zlcih0LHIpLHQscixlKX1mdW5jdGlvbiBkUnQoZSx0LHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKHIpKXJldHVybiBlO3ZhciBpLG89ZS5fcm9vdCxhPXtkYXRhOm59LHM9ZS5feDAsbD1lLl95MCxjPWUuX3gxLHU9ZS5feTEsaCxmLHAsZCxnLF8seSx4O2lmKCFvKXJldHVybiBlLl9yb290PWEsZTtmb3IoO28ubGVuZ3RoOylpZigoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9ZixpPW8sIShvPW9beT1fPDwxfGddKSlyZXR1cm4gaVt5XT1hLGU7aWYocD0rZS5feC5jYWxsKG51bGwsby5kYXRhKSxkPStlLl95LmNhbGwobnVsbCxvLmRhdGEpLHQ9PT1wJiZyPT09ZClyZXR1cm4gYS5uZXh0PW8saT9pW3ldPWE6ZS5fcm9vdD1hLGU7ZG8gaT1pP2lbeV09bmV3IEFycmF5KDQpOmUuX3Jvb3Q9bmV3IEFycmF5KDQpLChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mO3doaWxlKCh5PV88PDF8Zyk9PT0oeD0oZD49Zik8PDF8cD49aCkpO3JldHVybiBpW3hdPW8saVt5XT1hLGV9ZnVuY3Rpb24gbVJ0KGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpLG8sYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iocj0wO3I8bjsrK3IpaXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsdD1lW3JdKSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKXx8KGFbcl09aSxzW3JdPW8saTxsJiYobD1pKSxpPnUmJih1PWkpLG88YyYmKGM9byksbz5oJiYoaD1vKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilkUnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGdSdD1NKCgpPT57fSk7ZnVuY3Rpb24gX1J0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZSBpZihyPmV8fGU+aXx8bj50fHx0Pm8pe3ZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3N3aXRjaChjPSh0PChuK28pLzIpPDwxfGU8KHIraSkvMil7Y2FzZSAwOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIsaT1yK2Esbz1uK2EsZT5pfHx0Pm8pO2JyZWFrfWNhc2UgMTp7ZG8gbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bDt3aGlsZShhKj0yLHI9aS1hLG89bithLHI+ZXx8dD5vKTticmVha31jYXNlIDI6e2RvIGw9bmV3IEFycmF5KDQpLGxbY109cyxzPWw7d2hpbGUoYSo9MixpPXIrYSxuPW8tYSxlPml8fG4+dCk7YnJlYWt9Y2FzZSAzOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIscj1pLWEsbj1vLWEscj5lfHxuPnQpO2JyZWFrfX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciB5UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZSdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciB4UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGJSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgd1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgdk89TSgoKT0+e30pO2Z1bmN0aW9uIFNSdChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBFbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IEVvKHBbM10sXyx5LGwsYyksbmV3IEVvKHBbMl0sYSx5LF8sYyksbmV3IEVvKHBbMV0sXyxzLGwseSksbmV3IEVvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIE1SdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIEVSdChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBUUnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBDUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFSdCgpe3JldHVybiB0aGlzLl9yb290fXZhciBQUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIElSdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIExSdD1NKCgpPT57fSk7ZnVuY3Rpb24ga1J0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBFbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgRW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgRW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgRW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgRW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFJSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIE5SdChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgRW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgRW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgRW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgRW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgRW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgRFJ0PU0oKCk9Pnt2TygpfSk7ZnVuY3Rpb24gT1J0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIHpSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIEZSdD1NKCgpPT57fSk7ZnVuY3Rpb24gQlJ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEhSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIFZSdD1NKCgpPT57fSk7ZnVuY3Rpb24geE8oZSx0LHIpe3ZhciBuPW5ldyBRUSh0PT1udWxsP09SdDp0LHI9PW51bGw/QlJ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIFFRKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gVVJ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgWGEscVJ0PU0oKCk9PntnUnQoKTt5UnQoKTt4UnQoKTt3UnQoKTtNUnQoKTtDUnQoKTtQUnQoKTtMUnQoKTtSUnQoKTtEUnQoKTtGUnQoKTtWUnQoKTtYYT14Ty5wcm90b3R5cGU9UVEucHJvdG90eXBlO1hhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgUVEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1VUnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1VUnQobikpO3JldHVybiBlfTtYYS5hZGQ9cFJ0O1hhLmFkZEFsbD1tUnQ7WGEuY292ZXI9X1J0O1hhLmRhdGE9dlJ0O1hhLmV4dGVudD1iUnQ7WGEuZmluZD1TUnQ7WGEucmVtb3ZlPUVSdDtYYS5yZW1vdmVBbGw9VFJ0O1hhLnJvb3Q9QVJ0O1hhLnNpemU9SVJ0O1hhLnZpc2l0PWtSdDtYYS52aXNpdEFmdGVyPU5SdDtYYS54PXpSdDtYYS55PUhSdH0pO3ZhciBHUnQ9TSgoKT0+e3FSdCgpfSk7dmFyIFdSdCxZUnQ9TSgoKT0+e1dSdD1bXS5zbGljZX0pO2Z1bmN0aW9uIHR0dChlKXt0aGlzLl9zaXplPWUsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBqUnQoZSl7aWYoIWUuX3N0YXJ0KXRyeXtiNmUoZSl9Y2F0Y2godCl7aWYoZS5fdGFza3NbZS5fZW5kZWQrZS5fYWN0aXZlLTFdKWV0dChlLHQpO2Vsc2UgaWYoIWUuX2RhdGEpdGhyb3cgdH19ZnVuY3Rpb24gYjZlKGUpe2Zvcig7ZS5fc3RhcnQ9ZS5fd2FpdGluZyYmZS5fYWN0aXZlPGUuX3NpemU7KXt2YXIgdD1lLl9lbmRlZCtlLl9hY3RpdmUscj1lLl90YXNrc1t0XSxuPXIubGVuZ3RoLTEsaT1yW25dO3Jbbl09dzZlKGUsdCksLS1lLl93YWl0aW5nLCsrZS5fYWN0aXZlLHI9aS5hcHBseShudWxsLHIpLGUuX3Rhc2tzW3RdJiYoZS5fdGFza3NbdF09cnx8eDZlKX19ZnVuY3Rpb24gdzZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7IWUuX3Rhc2tzW3RdfHwoLS1lLl9hY3RpdmUsKytlLl9lbmRlZCxlLl90YXNrc1t0XT1udWxsLGUuX2Vycm9yPT1udWxsJiYociE9bnVsbD9ldHQoZSxyKTooZS5fZGF0YVt0XT1uLGUuX3dhaXRpbmc/alJ0KGUpOmJPKGUpKSkpfX1mdW5jdGlvbiBldHQoZSx0KXt2YXIgcj1lLl90YXNrcy5sZW5ndGgsbjtmb3IoZS5fZXJyb3I9dCxlLl9kYXRhPXZvaWQgMCxlLl93YWl0aW5nPU5hTjstLXI+PTA7KWlmKChuPWUuX3Rhc2tzW3JdKSYmKGUuX3Rhc2tzW3JdPW51bGwsbi5hYm9ydCkpdHJ5e24uYWJvcnQoKX1jYXRjaChpKXt9ZS5fYWN0aXZlPU5hTixiTyhlKX1mdW5jdGlvbiBiTyhlKXtpZighZS5fYWN0aXZlJiZlLl9jYWxsKXt2YXIgdD1lLl9kYXRhO2UuX2RhdGE9dm9pZCAwLGUuX2NhbGwoZS5fZXJyb3IsdCl9fWZ1bmN0aW9uIHdPKGUpe2lmKGU9PW51bGwpZT0xLzA7ZWxzZSBpZighKChlPStlKT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbmN1cnJlbmN5Iik7cmV0dXJuIG5ldyB0dHQoZSl9dmFyIHg2ZSxYUnQ9TSgoKT0+e1lSdCgpO3g2ZT17fTt0dHQucHJvdG90eXBlPXdPLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHR0LGRlZmVyOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJkZWZlciBhZnRlciBhd2FpdCIpO2lmKHRoaXMuX2Vycm9yIT1udWxsKXJldHVybiB0aGlzO3ZhciB0PVdSdC5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdC5wdXNoKGUpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKHQpLGpSdCh0aGlzKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvcj09bnVsbCYmZXR0KHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgYXdhaXQiKTtyZXR1cm4gdGhpcy5fY2FsbD1mdW5jdGlvbih0LHIpe2UuYXBwbHkobnVsbCxbdF0uY29uY2F0KHIpKX0sYk8odGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZSxiTyh0aGlzKSx0aGlzfX19KTt2YXIgJFJ0PU0oKCk9PntYUnQoKX0pO2Z1bmN0aW9uIGJjKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyICR5PU0oKCk9Pnt9KTt2YXIgS1J0LFpSdD1NKCgpPT57JHkoKTtLUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGFyZ3VtZW50cy5sZW5ndGg9PT0xPyhpPW4sbj0wKTppLT1uLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSppK259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBTTyxydHQ9TSgoKT0+eyR5KCk7U089ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7dmFyIG8sYTtyZXR1cm4gbj1uPT1udWxsPzA6K24saT1pPT1udWxsPzE6K2ksZnVuY3Rpb24oKXt2YXIgcztpZihvIT1udWxsKXM9byxvPW51bGw7ZWxzZSBkbyBvPXQoKSoyLTEscz10KCkqMi0xLGE9bypvK3Mqczt3aGlsZSghYXx8YT4xKTtyZXR1cm4gbitpKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgSlJ0LFFSdD1NKCgpPT57JHkoKTtydHQoKTtKUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49U08uc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIE1PLG50dD1NKCgpPT57JHkoKTtNTz1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgdE50LGVOdD1NKCgpPT57JHkoKTtudHQoKTt0TnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3ZhciBpPU1PLnNvdXJjZSh0KShuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSgpL259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciByTnQsbk50PU0oKCk9PnskeSgpO3JOdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgaU50PU0oKCk9PntaUnQoKTtydHQoKTtRUnQoKTtlTnQoKTtudHQoKTtuTnQoKX0pO2Z1bmN0aW9uIEoyKGUsdCl7dmFyIHIsbj12cygiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksaSxvPUppKCksYT1uZXcgWE1MSHR0cFJlcXVlc3Qscz1udWxsLGw9bnVsbCxjLHUsaD0wO3R5cGVvZiBYRG9tYWluUmVxdWVzdCE9InVuZGVmaW5lZCImJiEoIndpdGhDcmVkZW50aWFscyJpbiBhKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpJiYoYT1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYT9hLm9ubG9hZD1hLm9uZXJyb3I9YS5vbnRpbWVvdXQ9ZjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihwKXthLnJlYWR5U3RhdGU+MyYmZihwKX07ZnVuY3Rpb24gZihwKXt2YXIgZD1hLnN0YXR1cyxnO2lmKCFkJiZNNmUoYSl8fGQ+PTIwMCYmZDwzMDB8fGQ9PT0zMDQpe2lmKGMpdHJ5e2c9Yy5jYWxsKHIsYSl9Y2F0Y2goXyl7bi5jYWxsKCJlcnJvciIscixfKTtyZXR1cm59ZWxzZSBnPWE7bi5jYWxsKCJsb2FkIixyLGcpfWVsc2Ugbi5jYWxsKCJlcnJvciIscixwKX1pZihhLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24ocCl7bi5jYWxsKCJwcm9ncmVzcyIscixwKX0scj17aGVhZGVyOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHA9KHArIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP28uZ2V0KHApOihkPT1udWxsP28ucmVtb3ZlKHApOm8uc2V0KHAsZCsiIikscil9LG1pbWVUeXBlOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXA9PW51bGw/bnVsbDpwKyIiLHIpOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1wLHIpOnV9LHRpbWVvdXQ6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3Ascik6aH0sdXNlcjpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3M6KHM9cD09bnVsbD9udWxsOnArIiIscil9LHBhc3N3b3JkOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/bDoobD1wPT1udWxsP251bGw6cCsiIixyKX0scmVzcG9uc2U6ZnVuY3Rpb24ocCl7cmV0dXJuIGM9cCxyfSxnZXQ6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJHRVQiLHAsZCl9LHBvc3Q6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJQT1NUIixwLGQpfSxzZW5kOmZ1bmN0aW9uKHAsZCxnKXtyZXR1cm4gYS5vcGVuKHAsZSwhMCxzLGwpLGkhPW51bGwmJiFvLmhhcygiYWNjZXB0IikmJm8uc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxhLnNldFJlcXVlc3RIZWFkZXImJm8uZWFjaChmdW5jdGlvbihfLHkpe2Euc2V0UmVxdWVzdEhlYWRlcih5LF8pfSksaSE9bnVsbCYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUoaSksdSE9bnVsbCYmKGEucmVzcG9uc2VUeXBlPXUpLGg+MCYmKGEudGltZW91dD1oKSxnPT1udWxsJiZ0eXBlb2YgZD09ImZ1bmN0aW9uIiYmKGc9ZCxkPW51bGwpLGchPW51bGwmJmcubGVuZ3RoPT09MSYmKGc9UzZlKGcpKSxnIT1udWxsJiZyLm9uKCJlcnJvciIsZykub24oImxvYWQiLGZ1bmN0aW9uKF8pe2cobnVsbCxfKX0pLG4uY2FsbCgiYmVmb3Jlc2VuZCIscixhKSxhLnNlbmQoZD09bnVsbD9udWxsOmQpLHJ9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYWJvcnQoKSxyfSxvbjpmdW5jdGlvbigpe3ZhciBwPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBwPT09bj9yOnB9fSx0IT1udWxsKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7cmV0dXJuIHIuZ2V0KHQpfXJldHVybiByfWZ1bmN0aW9uIFM2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQ9PW51bGw/cjpudWxsKX19ZnVuY3Rpb24gTTZlKGUpe3ZhciB0PWUucmVzcG9uc2VUeXBlO3JldHVybiB0JiZ0IT09InRleHQiP2UucmVzcG9uc2U6ZS5yZXNwb25zZVRleHR9dmFyIEVPPU0oKCk9PntUYigpO2ttKCl9KTtmdW5jdGlvbiBUZyhlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPUoyKHIpLm1pbWVUeXBlKGUpLnJlc3BvbnNlKHQpO2lmKG4hPW51bGwpe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtyZXR1cm4gaS5nZXQobil9cmV0dXJuIGl9fXZhciBvQz1NKCgpPT57RU8oKX0pO3ZhciBvTnQsYU50PU0oKCk9PntvQygpO29OdD1UZygidGV4dC9odG1sIixmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZS5yZXNwb25zZVRleHQpfSl9KTt2YXIgc050LGxOdD1NKCgpPT57b0MoKTtzTnQ9VGcoImFwcGxpY2F0aW9uL2pzb24iLGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVzcG9uc2VUZXh0KX0pfSk7dmFyIGNOdCx1TnQ9TSgoKT0+e29DKCk7Y050PVRnKCJ0ZXh0L3BsYWluIixmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNwb25zZVRleHR9KX0pO3ZhciBoTnQsZk50PU0oKCk9PntvQygpO2hOdD1UZygiYXBwbGljYXRpb24veG1sIixmdW5jdGlvbihlKXt2YXIgdD1lLnJlc3BvbnNlWE1MO2lmKCF0KXRocm93IG5ldyBFcnJvcigicGFyc2UgZXJyb3IiKTtyZXR1cm4gdH0pfSk7ZnVuY3Rpb24gVE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9bixuPW51bGwpO3ZhciBvPUoyKHIpLm1pbWVUeXBlKGUpO3JldHVybiBvLnJvdz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKEU2ZSh0LG49YSkpOm59LG8ucm93KG4pLGk/by5nZXQoaSk6b319ZnVuY3Rpb24gRTZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlKHIucmVzcG9uc2VUZXh0LHQpfX12YXIgaXR0PU0oKCk9PntFTygpfSk7dmFyIHBOdCxkTnQ9TSgoKT0+e3FFKCk7aXR0KCk7cE50PVRPKCJ0ZXh0L2NzdiIsQ2IpfSk7dmFyIG1OdCxnTnQ9TSgoKT0+e3FFKCk7aXR0KCk7bU50PVRPKCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIixBYil9KTt2YXIgX050PU0oKCk9PntFTygpO2FOdCgpO2xOdCgpO3VOdCgpO2ZOdCgpO2ROdCgpO2dOdCgpfSk7ZnVuY3Rpb24gcGYoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEt5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhQyhlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1UNmUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBUNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHBmKGUodCkscil9fXZhciBvdHQ9TSgoKT0+e0t5KCl9KTt2YXIgeU50LHZOdCxDNmUsZGYsYXR0PU0oKCk9PntLeSgpO290dCgpO3lOdD1hQyhwZiksdk50PXlOdC5yaWdodCxDNmU9eU50LmxlZnQsZGY9dk50fSk7dmFyIHN0dD1NKCgpPT57fSk7dmFyIHhOdD1NKCgpPT57c3R0KCl9KTt2YXIgYk50PU0oKCk9Pnt9KTtmdW5jdGlvbiBRMihlKXtyZXR1cm4gZT09PW51bGw/TmFOOitlfXZhciB0dz1NKCgpPT57fSk7dmFyIGx0dD1NKCgpPT57dHcoKX0pO3ZhciBjdHQ9TSgoKT0+e2x0dCgpfSk7dmFyIHV0dD1NKCgpPT57fSk7dmFyIHdOdCxQNmUsSTZlLGh0dD1NKCgpPT57d050PUFycmF5LnByb3RvdHlwZSxQNmU9d050LnNsaWNlLEk2ZT13TnQubWFwfSk7dmFyIFNOdD1NKCgpPT57fSk7dmFyIE1OdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ08oZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIGZ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gc0MoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1ldyhlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gZXcoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1wdHQ/MTA6bz49ZHR0PzU6bz49bXR0PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49cHR0PzEwOm8+PWR0dD81Om8+PW10dD8yOjEpfWZ1bmN0aW9uIFp5KGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1wdHQ/aSo9MTA6bz49ZHR0P2kqPTU6bz49bXR0JiYoaSo9MiksdDxlPy1pOml9dmFyIHB0dCxkdHQsbXR0LGd0dD1NKCgpPT57cHR0PU1hdGguc3FydCg1MCksZHR0PU1hdGguc3FydCgxMCksbXR0PU1hdGguc3FydCgyKX0pO3ZhciBfdHQ9TSgoKT0+e30pO3ZhciBFTnQ9TSgoKT0+e2h0dCgpO2F0dCgpO1NOdCgpO3V0dCgpO01OdCgpO2Z0dCgpO2d0dCgpO190dCgpfSk7ZnVuY3Rpb24gbEMoZSx0LHIpe2lmKHI9PW51bGwmJihyPVEyKSwhIShuPWUubGVuZ3RoKSl7aWYoKHQ9K3QpPD0wfHxuPDIpcmV0dXJuK3IoZVswXSwwLGUpO2lmKHQ+PTEpcmV0dXJuK3IoZVtuLTFdLG4tMSxlKTt2YXIgbixpPShuLTEpKnQsbz1NYXRoLmZsb29yKGkpLGE9K3IoZVtvXSxvLGUpLHM9K3IoZVtvKzFdLG8rMSxlKTtyZXR1cm4gYSsocy1hKSooaS1vKX19dmFyIEFPPU0oKCk9Pnt0dygpfSk7dmFyIFROdD1NKCgpPT57aHR0KCk7S3koKTt0dygpO0FPKCl9KTt2YXIgQ050PU0oKCk9PntjdHQoKX0pO3ZhciBBTnQ9TSgoKT0+e30pO3ZhciBQTnQ9TSgoKT0+e3R3KCl9KTt2YXIgSU50PU0oKCk9PntLeSgpO3R3KCk7QU8oKX0pO3ZhciBMTnQ9TSgoKT0+e30pO3ZhciB5dHQ9TSgoKT0+e30pO3ZhciBrTnQ9TSgoKT0+e30pO3ZhciBSTnQ9TSgoKT0+e0t5KCl9KTt2YXIgTk50PU0oKCk9Pnt9KTt2YXIgRE50PU0oKCk9Pnt9KTt2YXIgdnR0PU0oKCk9Pnt5dHQoKX0pO3ZhciBPTnQ9TSgoKT0+e3Z0dCgpfSk7dmFyIG1mPU0oKCk9PnthdHQoKTtLeSgpO290dCgpO3hOdCgpO2JOdCgpO2N0dCgpO3V0dCgpO0VOdCgpO1ROdCgpO0NOdCgpO190dCgpO0FOdCgpO1BOdCgpO0lOdCgpO0xOdCgpO3l0dCgpO3N0dCgpO2tOdCgpO0FPKCk7ZnR0KCk7Uk50KCk7Tk50KCk7RE50KCk7Z3R0KCk7dnR0KCk7bHR0KCk7T050KCl9KTtmdW5jdGlvbiBQTygpe31mdW5jdGlvbiB6TnQoZSx0KXt2YXIgcj1uZXcgUE87aWYoZSBpbnN0YW5jZW9mIFBPKWUuZWFjaChmdW5jdGlvbihzLGwpe3Iuc2V0KGwscyl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuPS0xLGk9ZS5sZW5ndGgsbztpZih0PT1udWxsKWZvcig7KytuPGk7KXIuc2V0KG4sZVtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLnNldCh0KG89ZVtuXSxuLGUpLG8pfWVsc2UgaWYoZSlmb3IodmFyIGEgaW4gZSlyLnNldChhLGVbYV0pO3JldHVybiByfXZhciBmbCxKeSxJTz1NKCgpPT57Zmw9IiQiO1BPLnByb3RvdHlwZT16TnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQTyxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGZsK2UgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2ZsK2VdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpc1tmbCtlXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD1mbCtlO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1mbCYmZGVsZXRlIHRoaXNbZV19LGtleXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gZX0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2godGhpc1t0XSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBlfSxzaXplOmZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJisrZTtyZXR1cm4gZX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcylpZihlWzBdPT09ZmwpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O0p5PXpOdH0pO3ZhciBGTnQ9TSgoKT0+e0lPKCl9KTtmdW5jdGlvbiBMTygpe31mdW5jdGlvbiBPNmUoZSx0KXt2YXIgcj1uZXcgTE87aWYoZSBpbnN0YW5jZW9mIExPKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciBReSxCTnQ9TSgoKT0+e0lPKCk7UXk9SnkucHJvdG90eXBlO0xPLnByb3RvdHlwZT1PNmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMTyxoYXM6UXkuaGFzLGFkZDpmdW5jdGlvbihlKXtyZXR1cm4gZSs9IiIsdGhpc1tmbCtlXT1lLHRoaXN9LHJlbW92ZTpReS5yZW1vdmUsY2xlYXI6UXkuY2xlYXIsdmFsdWVzOlF5LmtleXMsc2l6ZTpReS5zaXplLGVtcHR5OlF5LmVtcHR5LGVhY2g6UXkuZWFjaH19KTt2YXIgSE50PU0oKCk9Pnt9KTt2YXIgVk50PU0oKCk9Pnt9KTt2YXIgVU50PU0oKCk9Pnt9KTt2YXIgcU50PU0oKCk9PntGTnQoKTtCTnQoKTtJTygpO0hOdCgpO1ZOdCgpO1VOdCgpfSk7dmFyIEdOdCxydyxwbCxDZz1NKCgpPT57R050PUFycmF5LnByb3RvdHlwZSxydz1HTnQubWFwLHBsPUdOdC5zbGljZX0pO2Z1bmN0aW9uIG53KGUpe3ZhciB0PUp5KCkscj1bXSxuPWtPO2U9ZT09bnVsbD9bXTpwbC5jYWxsKGUpO2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPXQuZ2V0KGEpO2lmKCFzKXtpZihuIT09a08pcmV0dXJuIG47dC5zZXQoYSxzPXIucHVzaChvKSl9cmV0dXJuIGVbKHMtMSklZS5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W10sdD1KeSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspdC5oYXMoYz0obD1vW2FdKSsiIil8fHQuc2V0KGMsci5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wbC5jYWxsKG8pLGkpOmUuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG53KCkuZG9tYWluKHIpLnJhbmdlKGUpLnVua25vd24obil9LGl9dmFyIGtPLHh0dD1NKCgpPT57cU50KCk7Q2coKTtrTz17bmFtZToiaW1wbGljaXQifX0pO2Z1bmN0aW9uIGNDKCl7dmFyIGU9bncoKS51bmtub3duKHZvaWQgMCksdD1lLmRvbWFpbixyPWUucmFuZ2Usbj1bMCwxXSxpLG8sYT0hMSxzPTAsbD0wLGM9LjU7ZGVsZXRlIGUudW5rbm93bjtmdW5jdGlvbiB1KCl7dmFyIGg9dCgpLmxlbmd0aCxmPW5bMV08blswXSxwPW5bZi0wXSxkPW5bMS1mXTtpPShkLXApL01hdGgubWF4KDEsaC1zK2wqMiksYSYmKGk9TWF0aC5mbG9vcihpKSkscCs9KGQtcC1pKihoLXMpKSpjLG89aSooMS1zKSxhJiYocD1NYXRoLnJvdW5kKHApLG89TWF0aC5yb3VuZChvKSk7dmFyIGc9Q08oaCkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBwK2kqX30pO3JldHVybiByKGY/Zy5yZXZlcnNlKCk6Zyl9cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0KGgpLHUoKSk6dCgpfSxlLnJhbmdlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVsraFswXSwraFsxXV0sdSgpKTpuLnNsaWNlKCl9LGUucmFuZ2VSb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gbj1bK2hbMF0sK2hbMV1dLGE9ITAsdSgpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZS5yb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIWgsdSgpKTphfSxlLnBhZGRpbmc9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bD1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGgpKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpsfSxlLmFsaWduPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY0MoKS5kb21haW4odCgpKS5yYW5nZShuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx1KCl9ZnVuY3Rpb24gV050KGUpe3ZhciB0PWUuY29weTtyZXR1cm4gZS5wYWRkaW5nPWUucGFkZGluZ091dGVyLGRlbGV0ZSBlLnBhZGRpbmdJbm5lcixkZWxldGUgZS5wYWRkaW5nT3V0ZXIsZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFdOdCh0KCkpfSxlfWZ1bmN0aW9uIFlOdCgpe3JldHVybiBXTnQoY0MoKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBqTnQ9TSgoKT0+e21mKCk7eHR0KCl9KTtmdW5jdGlvbiBpdyhlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdUMoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGJ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gZXYoKXt9ZnVuY3Rpb24gJE50KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gRzZlKCl7cmV0dXJuIGVEdCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBLTnQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBQZyhlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD16NmUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9aTnQodCk6cj09PTM/bmV3IGhhKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9STyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9STyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PUY2ZS5leGVjKGUpKT9uZXcgaGEodFsxXSx0WzJdLHRbM10sMSk6KHQ9QjZlLmV4ZWMoZSkpP25ldyBoYSh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1INmUuZXhlYyhlKSk/Uk8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9VjZlLmV4ZWMoZSkpP1JPKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PVU2ZS5leGVjKGUpKT90RHQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1xNmUuZXhlYyhlKSk/dER0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6WE50Lmhhc093blByb3BlcnR5KGUpP1pOdChYTnRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBoYShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFpOdChlKXtyZXR1cm4gbmV3IGhhKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBSTyhlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGhhKGUsdCxyLG4pfWZ1bmN0aW9uIE10dChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGV2fHwoZT1QZyhlKSksZT8oZT1lLnJnYigpLG5ldyBoYShlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgaGF9ZnVuY3Rpb24gYXcoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP010dChlKTpuZXcgaGEoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGhhKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBKTnQoKXtyZXR1cm4iIyIrd3R0KHRoaXMucikrd3R0KHRoaXMuZykrd3R0KHRoaXMuYil9ZnVuY3Rpb24gUU50KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHd0dChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB0RHQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBnZihlLHQscixuKX1mdW5jdGlvbiBlRHQoZSl7aWYoZSBpbnN0YW5jZW9mIGdmKXJldHVybiBuZXcgZ2YoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgZXZ8fChlPVBnKGUpKSwhZSlyZXR1cm4gbmV3IGdmO2lmKGUgaW5zdGFuY2VvZiBnZilyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBnZihhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIHJEdChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/ZUR0KGUpOm5ldyBnZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFN0dChlLHQscil7cmV0dXJuKGU8NjA/dCsoci10KSplLzYwOmU8MTgwP3I6ZTwyNDA/dCsoci10KSooMjQwLWUpLzYwOnQpKjI1NX12YXIgQWcsdHYsb3csaEMsX2YsejZlLEY2ZSxCNmUsSDZlLFY2ZSxVNmUscTZlLFhOdCxFdHQ9TSgoKT0+e2J0dCgpO0FnPS43LHR2PTEvQWcsb3c9IlxccyooWystXT9cXGQrKVxccyoiLGhDPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLF9mPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIix6NmU9L14jKFswLTlhLWZdezMsOH0pJC8sRjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvdyxvdyxvd10rIlxcKSQiKSxCNmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW19mLF9mLF9mXSsiXFwpJCIpLEg2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW293LG93LG93LGhDXSsiXFwpJCIpLFY2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW19mLF9mLF9mLGhDXSsiXFwpJCIpLFU2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbaEMsX2YsX2ZdKyJcXCkkIikscTZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbaEMsX2YsX2YsaENdKyJcXCkkIiksWE50PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2l3KGV2LFBnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OiROdCxmb3JtYXRIZXg6JE50LGZvcm1hdEhzbDpHNmUsZm9ybWF0UmdiOktOdCx0b1N0cmluZzpLTnR9KTtpdyhoYSxhdyx1Qyhldix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90djpNYXRoLnBvdyh0dixlKSxuZXcgaGEodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/QWc6TWF0aC5wb3coQWcsZSksbmV3IGhhKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6Sk50LGZvcm1hdEhleDpKTnQsZm9ybWF0UmdiOlFOdCx0b1N0cmluZzpRTnR9KSk7aXcoZ2YsckR0LHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IGhhKFN0dChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxTdHQoZSxpLG4pLFN0dChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciBuRHQsaUR0LG9EdD1NKCgpPT57bkR0PU1hdGguUEkvMTgwLGlEdD0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIFc2ZShlKXtpZihlIGluc3RhbmNlb2YgcnYpcmV0dXJuIG5ldyBydihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiBoYXx8KGU9TXR0KGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0obER0Km4rYUR0KnQtc0R0KnIpLyhsRHQrYUR0LXNEdCksbz1uLWksYT0oZkMqKHItaSktQ3R0Km8pL05PLHM9TWF0aC5zcXJ0KGEqYStvKm8pLyhmQyppKigxLWkpKSxsPXM/TWF0aC5hdGFuMihhLG8pKmlEdC0xMjA6TmFOO3JldHVybiBuZXcgcnYobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gJGEoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1c2ZShlKTpuZXcgcnYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHJ2KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgY0R0LFR0dCxDdHQsTk8sZkMsYUR0LHNEdCxsRHQsdUR0PU0oKCk9PntidHQoKTtFdHQoKTtvRHQoKTtjRHQ9LS4xNDg2MSxUdHQ9MS43ODI3NyxDdHQ9LS4yOTIyNyxOTz0tLjkwNjQ5LGZDPTEuOTcyOTQsYUR0PWZDKk5PLHNEdD1mQypUdHQsbER0PVR0dCpDdHQtTk8qY0R0O2l3KHJ2LCRhLHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqbkR0LHQ9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqdCooMS10KSxuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSk7cmV0dXJuIG5ldyBoYSgyNTUqKHQrciooY0R0Km4rVHR0KmkpKSwyNTUqKHQrciooQ3R0Km4rTk8qaSkpLDI1NSoodCtyKihmQypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgc3c9TSgoKT0+e0V0dCgpO3VEdCgpfSk7ZnVuY3Rpb24gQXR0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gaER0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBBdHQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgUHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBmRHQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBBdHQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgcER0PU0oKCk9PntQdHQoKX0pO2Z1bmN0aW9uIGx3KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgSXR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBkRHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBZNmUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBtRHQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/ZER0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpsdyhpc05hTihlKT90OmUpfWZ1bmN0aW9uIGdEdChlKXtyZXR1cm4oZT0rZSk9PTE/bmQ6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P1k2ZSh0LHIsZSk6bHcoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gbmQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/ZER0KGUscik6bHcoaXNOYU4oZSk/dDplKX12YXIgTHR0PU0oKCk9PntJdHQoKX0pO2Z1bmN0aW9uIF9EdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPWF3KHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBrdHQsXzVuLHk1bix5RHQ9TSgoKT0+e3N3KCk7UHR0KCk7cER0KCk7THR0KCk7a3R0PWZ1bmN0aW9uIGUodCl7dmFyIHI9Z0R0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPWF3KGkpKS5yLChvPWF3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9bmQoaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO181bj1fRHQoaER0KSx5NW49X0R0KGZEdCl9KTtmdW5jdGlvbiB2RHQoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24geER0KGUpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJiEoZSBpbnN0YW5jZW9mIERhdGFWaWV3KX12YXIgYkR0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3RHQoZSx0KXt2YXIgcj10P3QubGVuZ3RoOjAsbj1lP01hdGgubWluKHIsZS5sZW5ndGgpOjAsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkociksYTtmb3IoYT0wO2E8bjsrK2EpaVthXT1udihlW2FdLHRbYV0pO2Zvcig7YTxyOysrYSlvW2FdPXRbYV07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihhPTA7YTxuOysrYSlvW2FdPWlbYV0ocyk7cmV0dXJuIG99fXZhciBTRHQ9TSgoKT0+e0RPKCl9KTtmdW5jdGlvbiBNRHQoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fXZhciBFRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlmKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fXZhciBPTz1NKCgpPT57fSk7ZnVuY3Rpb24gVER0KGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bnYoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgQ0R0PU0oKCk9PntETygpfSk7ZnVuY3Rpb24gajZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBYNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBBRHQoZSx0KXt2YXIgcj1OdHQubGFzdEluZGV4PVJ0dC5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1OdHQuZXhlYyhlKSkmJihpPVJ0dC5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6eWYobixpKX0pKSxyPVJ0dC5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/WDZlKGxbMF0ueCk6ajZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBOdHQsUnR0LFBEdD1NKCgpPT57T08oKTtOdHQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFJ0dD1uZXcgUmVnRXhwKE50dC5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIG52KGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9sdyh0KToocj09PSJudW1iZXIiP3lmOnI9PT0ic3RyaW5nIj8obj1QZyh0KSk/KHQ9bixrdHQpOkFEdDp0IGluc3RhbmNlb2YgUGc/a3R0OnQgaW5zdGFuY2VvZiBEYXRlP01EdDp4RHQodCk/dkR0OkFycmF5LmlzQXJyYXkodCk/d0R0OnR5cGVvZiB0LnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiB0LnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTih0KT9URHQ6eWYpKGUsdCl9dmFyIERPPU0oKCk9PntzdygpO3lEdCgpO1NEdCgpO0VEdCgpO09PKCk7Q0R0KCk7UER0KCk7SXR0KCk7YkR0KCl9KTtmdW5jdGlvbiBEdHQoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKGUqKDEtcikrdCpyKX19dmFyIElEdD1NKCgpPT57fSk7ZnVuY3Rpb24gTER0KGUpe3JldHVybiBmdW5jdGlvbiB0KHIpe3I9K3I7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPWUoKGk9JGEoaSkpLmgsKG89JGEobykpLmgpLHM9bmQoaS5zLG8ucyksbD1uZChpLmwsby5sKSxjPW5kKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5oPWEodSksaS5zPXModSksaS5sPWwoTWF0aC5wb3codSxyKSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9dCxufSgxKX12YXIgJDZlLGN3LGtEdD1NKCgpPT57c3coKTtMdHQoKTskNmU9TER0KG1EdCksY3c9TER0KG5kKX0pO3ZhciB1dz1NKCgpPT57RE8oKTtPTygpO0lEdCgpO2tEdCgpfSk7ZnVuY3Rpb24gaHcoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB6Tz1NKCgpPT57fSk7ZnVuY3Rpb24gRk8oZSl7cmV0dXJuK2V9dmFyIE90dD1NKCgpPT57fSk7ZnVuY3Rpb24gcEMoZSx0KXtyZXR1cm4odC09ZT0rZSk/ZnVuY3Rpb24ocil7cmV0dXJuKHItZSkvdH06aHcodCl9ZnVuY3Rpb24gSzZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodD0rdCxyPStyKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGk8PXQ/MDppPj1yPzE6bihpKX19fWZ1bmN0aW9uIFo2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQ9K3Qscj0rcik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpPD0wP3Q6aT49MT9yOm4oaSl9fX1mdW5jdGlvbiBKNmUoZSx0LHIsbil7dmFyIGk9ZVswXSxvPWVbMV0sYT10WzBdLHM9dFsxXTtyZXR1cm4gbzxpPyhpPXIobyxpKSxhPW4ocyxhKSk6KGk9cihpLG8pLGE9bihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShpKGwpKX19ZnVuY3Rpb24gUTZlKGUsdCxyLG4pe3ZhciBpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKGVbaV08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPXIoZVtzXSxlW3MrMV0pLGFbc109bih0W3NdLHRbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjPWRmKGUsbCwxLGkpLTE7cmV0dXJuIGFbY10ob1tjXShsKSl9fWZ1bmN0aW9uIElnKGUsdCl7cmV0dXJuIHQuZG9tYWluKGUuZG9tYWluKCkpLnJhbmdlKGUucmFuZ2UoKSkuaW50ZXJwb2xhdGUoZS5pbnRlcnBvbGF0ZSgpKS5jbGFtcChlLmNsYW1wKCkpfWZ1bmN0aW9uIGlkKGUsdCl7dmFyIHI9UkR0LG49UkR0LGk9bnYsbz0hMSxhLHMsbDtmdW5jdGlvbiBjKCl7cmV0dXJuIGE9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpPjI/UTZlOko2ZSxzPWw9bnVsbCx1fWZ1bmN0aW9uIHUoaCl7cmV0dXJuKHN8fChzPWEocixuLG8/SzZlKGUpOmUsaSkpKSgraCl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKGgpe3JldHVybihsfHwobD1hKG4scixwQyxvP1o2ZSh0KTp0KSkpKCtoKX0sdS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cncuY2FsbChoLEZPKSxjKCkpOnIuc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1wbC5jYWxsKGgpLGMoKSk6bi5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49cGwuY2FsbChoKSxpPUR0dCxjKCl9LHUuY2xhbXA9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISFoLGMoKSk6b30sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1oLGMoKSk6aX0sYygpfXZhciBSRHQsZEM9TSgoKT0+e21mKCk7dXcoKTtDZygpO3pPKCk7T3R0KCk7UkR0PVswLDFdfSk7ZnVuY3Rpb24gTkR0KGUpe3JldHVybiBNYXRoLmFicyhlPU1hdGgucm91bmQoZSkpPj0xZTIxP2UudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTplLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBpdihlLHQpe2lmKChyPShlPXQ/ZS50b0V4cG9uZW50aWFsKHQtMSk6ZS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPWUuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrZS5zbGljZShyKzEpXX12YXIgbUM9TSgoKT0+e30pO2Z1bmN0aW9uIHZmKGUpe3JldHVybiBlPWl2KE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfXZhciBnQz1NKCgpPT57bUMoKX0pO2Z1bmN0aW9uIEREdChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX12YXIgT0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6RHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBGRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIExnKGUpe2lmKCEodD10SWUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdDtyZXR1cm4gbmV3IEJPKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIEJPKGUpe3RoaXMuZmlsbD1lLmZpbGw9PT12b2lkIDA/IiAiOmUuZmlsbCsiIix0aGlzLmFsaWduPWUuYWxpZ249PT12b2lkIDA/Ij4iOmUuYWxpZ24rIiIsdGhpcy5zaWduPWUuc2lnbj09PXZvaWQgMD8iLSI6ZS5zaWduKyIiLHRoaXMuc3ltYm9sPWUuc3ltYm9sPT09dm9pZCAwPyIiOmUuc3ltYm9sKyIiLHRoaXMuemVybz0hIWUuemVybyx0aGlzLndpZHRoPWUud2lkdGg9PT12b2lkIDA/dm9pZCAwOitlLndpZHRoLHRoaXMuY29tbWE9ISFlLmNvbW1hLHRoaXMucHJlY2lzaW9uPWUucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDorZS5wcmVjaXNpb24sdGhpcy50cmltPSEhZS50cmltLHRoaXMudHlwZT1lLnR5cGU9PT12b2lkIDA/IiI6ZS50eXBlKyIifXZhciB0SWUsenR0PU0oKCk9Pnt0SWU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7TGcucHJvdG90eXBlPUJPLnByb3RvdHlwZTtCTy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIEJEdChlKXt0OmZvcih2YXIgdD1lLmxlbmd0aCxyPTEsbj0tMSxpO3I8dDsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoIStlW3JdKWJyZWFrIHQ7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP2Uuc2xpY2UoMCxuKStlLnNsaWNlKGkrMSk6ZX12YXIgSER0PU0oKCk9Pnt9KTtmdW5jdGlvbiBWRHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oRnR0PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxhPW4ubGVuZ3RoO3JldHVybiBvPT09YT9uOm8+YT9uK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9uLnNsaWNlKDAsbykrIi4iK24uc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikraXYoZSxNYXRoLm1heCgwLHQrby0xKSlbMF19dmFyIEZ0dCxCdHQ9TSgoKT0+e21DKCl9KTtmdW5jdGlvbiBIdHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBVRHQ9TSgoKT0+e21DKCl9KTt2YXIgVnR0LHFEdD1NKCgpPT57bUMoKTtCdHQoKTtVRHQoKTtWdHQ9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpORHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSHR0KGUqMTAwLHQpfSxyOkh0dCxzOlZEdCxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19fSk7ZnVuY3Rpb24gVXR0KGUpe3JldHVybiBlfXZhciBHRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGpEdChlKXt2YXIgdD1lLmdyb3VwaW5nPT09dm9pZCAwfHxlLnRob3VzYW5kcz09PXZvaWQgMD9VdHQ6RER0KFdEdC5jYWxsKGUuZ3JvdXBpbmcsTnVtYmVyKSxlLnRob3VzYW5kcysiIikscj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMF0rIiIsbj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMV0rIiIsaT1lLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmUuZGVjaW1hbCsiIixvPWUubnVtZXJhbHM9PT12b2lkIDA/VXR0OnpEdChXRHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxnKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6VnR0W0NdfHwoYj09PXZvaWQgMCYmKGI9MTIpLFM9ITAsQz0iZyIpLChffHxmPT09IjAiJiZwPT09Ij0iKSYmKF89ITAsZj0iMCIscD0iPSIpO3ZhciBQPWc9PT0iJCI/cjpnPT09IiMiJiYvW2JveFhdLy50ZXN0KEMpPyIwIitDLnRvTG93ZXJDYXNlKCk6IiIsaz1nPT09IiQiP246L1slcF0vLnRlc3QoQyk/YToiIixPPVZ0dFtDXSxEPS9bZGVmZ3BycyVdLy50ZXN0KEMpO2I9Yj09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoQyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxiKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxiKSk7ZnVuY3Rpb24gQihJKXt2YXIgTD1QLFI9ayxGLHosVTtpZihDPT09ImMiKVI9TyhJKStSLEk9IiI7ZWxzZXtJPStJO3ZhciBXPUk8MHx8MS9JPDA7aWYoST1pc05hTihJKT9sOk8oTWF0aC5hYnMoSSksYiksUyYmKEk9QkR0KEkpKSxXJiYrST09MCYmZCE9PSIrIiYmKFc9ITEpLEw9KFc/ZD09PSIoIj9kOnM6ZD09PSItInx8ZD09PSIoIj8iIjpkKStMLFI9KEM9PT0icyI/WUR0WzgrRnR0LzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1MZyhoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih2ZihmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1ZRHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIFdEdCxZRHQsWER0PU0oKCk9PntnQygpO09EdCgpO0ZEdCgpO3p0dCgpO0hEdCgpO3FEdCgpO0J0dCgpO0dEdCgpO1dEdD1BcnJheS5wcm90b3R5cGUubWFwLFlEdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIHF0dChlKXtyZXR1cm4gSE89akR0KGUpLGZ3PUhPLmZvcm1hdCxWTz1ITy5mb3JtYXRQcmVmaXgsSE99dmFyIEhPLGZ3LFZPLCREdD1NKCgpPT57WER0KCk7cXR0KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KX0pO2Z1bmN0aW9uIEd0dChlKXtyZXR1cm4gTWF0aC5tYXgoMCwtdmYoTWF0aC5hYnMoZSkpKX12YXIgS0R0PU0oKCk9PntnQygpfSk7ZnVuY3Rpb24gV3R0KGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHZmKHQpLzMpKSkqMy12ZihNYXRoLmFicyhlKSkpfXZhciBaRHQ9TSgoKT0+e2dDKCl9KTtmdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZT1NYXRoLmFicyhlKSx0PU1hdGguYWJzKHQpLWUsTWF0aC5tYXgoMCx2Zih0KS12ZihlKSkrMX12YXIgSkR0PU0oKCk9PntnQygpfSk7dmFyIGp0dD1NKCgpPT57JER0KCk7enR0KCk7S0R0KCk7WkR0KCk7SkR0KCl9KTtmdW5jdGlvbiBRRHQoZSx0LHIpe3ZhciBuPWVbMF0saT1lW2UubGVuZ3RoLTFdLG89WnkobixpLHQ9PW51bGw/MTA6dCksYTtzd2l0Y2gocj1MZyhyPT1udWxsPyIsZiI6ciksci50eXBlKXtjYXNlInMiOnt2YXIgcz1NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhpKSk7cmV0dXJuIHIucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1XdHQobyxzKSkmJihyLnByZWNpc2lvbj1hKSxWTyhyLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntyLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9WXR0KG8sTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMoaSkpKSkmJihyLnByZWNpc2lvbj1hLShyLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3IucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1HdHQobykpJiYoci5wcmVjaXNpb249YS0oci50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIGZ3KHIpfXZhciB0T3Q9TSgoKT0+e21mKCk7anR0KCl9KTtmdW5jdGlvbiBvZChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIHNDKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gUUR0KHQoKSxyLG4pfSxlLm5pY2U9ZnVuY3Rpb24ocil7cj09bnVsbCYmKHI9MTApO3ZhciBuPXQoKSxpPTAsbz1uLmxlbmd0aC0xLGE9bltpXSxzPW5bb10sbDtyZXR1cm4gczxhJiYobD1hLGE9cyxzPWwsbD1pLGk9byxvPWwpLGw9ZXcoYSxzLHIpLGw+MD8oYT1NYXRoLmZsb29yKGEvbCkqbCxzPU1hdGguY2VpbChzL2wpKmwsbD1ldyhhLHMscikpOmw8MCYmKGE9TWF0aC5jZWlsKGEqbCkvbCxzPU1hdGguZmxvb3IocypsKS9sLGw9ZXcoYSxzLHIpKSxsPjA/KG5baV09TWF0aC5mbG9vcihhL2wpKmwsbltvXT1NYXRoLmNlaWwocy9sKSpsLHQobikpOmw8MCYmKG5baV09TWF0aC5jZWlsKGEqbCkvbCxuW29dPU1hdGguZmxvb3IocypsKS9sLHQobikpLGV9LGV9ZnVuY3Rpb24gVU8oKXt2YXIgZT1pZChwQyx5Zik7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhlLFVPKCkpfSxvZChlKX12YXIgcHc9TSgoKT0+e21mKCk7dXcoKTtkQygpO3RPdCgpfSk7ZnVuY3Rpb24gcU8oKXt2YXIgZT1bMCwxXTtmdW5jdGlvbiB0KHIpe3JldHVybityfXJldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cncuY2FsbChyLEZPKSx0KTplLnNsaWNlKCl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBxTygpLmRvbWFpbihlKX0sb2QodCl9dmFyIGVPdD1NKCgpPT57Q2coKTtwdygpO090dCgpfSk7ZnVuY3Rpb24gR08oZSx0KXtlPWUuc2xpY2UoKTt2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbcl0sbz1lW25dLGE7cmV0dXJuIG88aSYmKGE9cixyPW4sbj1hLGE9aSxpPW8sbz1hKSxlW3JdPXQuZmxvb3IoaSksZVtuXT10LmNlaWwobyksZX12YXIgWHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBlSWUoZSx0KXtyZXR1cm4odD1NYXRoLmxvZyh0L2UpKT9mdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5sb2coci9lKS90fTpodyh0KX1mdW5jdGlvbiBySWUoZSx0KXtyZXR1cm4gZTwwP2Z1bmN0aW9uKHIpe3JldHVybi1NYXRoLnBvdygtdCxyKSpNYXRoLnBvdygtZSwxLXIpfTpmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCxyKSpNYXRoLnBvdyhlLDEtcil9fWZ1bmN0aW9uIG5JZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gck90KGUpe3JldHVybiBlPT09MTA/bkllOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIG5PdChlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gaU90KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIFdPKCl7dmFyIGU9aWQoZUllLHJJZSkuZG9tYWluKFsxLDEwXSksdD1lLmRvbWFpbixyPTEwLG49bk90KDEwKSxpPXJPdCgxMCk7ZnVuY3Rpb24gbygpe3JldHVybiBuPW5PdChyKSxpPXJPdChyKSx0KClbMF08MCYmKG49aU90KG4pLGk9aU90KGkpKSxlfXJldHVybiBlLmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2EsbygpKTpyfSxlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChhKSxvKCkpOnQoKX0sZS50aWNrcz1mdW5jdGlvbihhKXt2YXIgcz10KCksbD1zWzBdLGM9c1tzLmxlbmd0aC0xXSx1Oyh1PWM8bCkmJihoPWwsbD1jLGM9aCk7dmFyIGg9bihsKSxmPW4oYykscCxkLGcsXz1hPT1udWxsPzEwOithLHk9W107aWYoIShyJTEpJiZmLWg8Xyl7aWYoaD1NYXRoLnJvdW5kKGgpLTEsZj1NYXRoLnJvdW5kKGYpKzEsbD4wKXtmb3IoO2g8ZjsrK2gpZm9yKGQ9MSxwPWkoaCk7ZDxyOysrZClpZihnPXAqZCwhKGc8bCkpe2lmKGc+YylicmVhazt5LnB1c2goZyl9fWVsc2UgZm9yKDtoPGY7KytoKWZvcihkPXItMSxwPWkoaCk7ZD49MTstLWQpaWYoZz1wKmQsIShnPGwpKXtpZihnPmMpYnJlYWs7eS5wdXNoKGcpfX1lbHNlIHk9c0MoaCxmLE1hdGgubWluKGYtaCxfKSkubWFwKGkpO3JldHVybiB1P3kucmV2ZXJzZSgpOnl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihhLHMpe2lmKHM9PW51bGwmJihzPXI9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBzIT0iZnVuY3Rpb24iJiYocz1mdyhzKSksYT09PTEvMClyZXR1cm4gczthPT1udWxsJiYoYT0xMCk7dmFyIGw9TWF0aC5tYXgoMSxyKmEvZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciB1PWMvaShNYXRoLnJvdW5kKG4oYykpKTtyZXR1cm4gdSpyPHItLjUmJih1Kj1yKSx1PD1sP3MoYyk6IiJ9fSxlLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdChHTyh0KCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguZmxvb3IobihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguY2VpbChuKGEpKSl9fSkpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoZSxXTygpLmJhc2UocikpfSxlfXZhciBvT3Q9TSgoKT0+e21mKCk7anR0KCk7ek8oKTtYdHQoKTtkQygpfSk7ZnVuY3Rpb24gZHcoZSx0KXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfWZ1bmN0aW9uIF9DKCl7dmFyIGU9MSx0PWlkKG4saSkscj10LmRvbWFpbjtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuKGE9ZHcoYSxlKS0obz1kdyhvLGUpKSk/ZnVuY3Rpb24ocyl7cmV0dXJuKGR3KHMsZSktbykvYX06aHcoYSl9ZnVuY3Rpb24gaShvLGEpe3JldHVybiBhPWR3KGEsZSktKG89ZHcobyxlKSksZnVuY3Rpb24ocyl7cmV0dXJuIGR3KG8rYSpzLDEvZSl9fXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStvLHIocigpKSk6ZX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHQsX0MoKS5leHBvbmVudChlKSl9LG9kKHQpfWZ1bmN0aW9uIGFPdCgpe3JldHVybiBfQygpLmV4cG9uZW50KC41KX12YXIgc090PU0oKCk9Pnt6TygpO3B3KCk7ZEMoKX0pO2Z1bmN0aW9uIFlPKCl7dmFyIGU9W10sdD1bXSxyPVtdO2Z1bmN0aW9uIG4oKXt2YXIgbz0wLGE9TWF0aC5tYXgoMSx0Lmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KGEtMSk7KytvPGE7KXJbby0xXT1sQyhlLG8vYSk7cmV0dXJuIGl9ZnVuY3Rpb24gaShvKXtpZighaXNOYU4obz0rbykpcmV0dXJuIHRbZGYocixvKV19cmV0dXJuIGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG8pe3ZhciBhPXQuaW5kZXhPZihvKTtyZXR1cm4gYTwwP1tOYU4sTmFOXTpbYT4wP3JbYS0xXTplWzBdLGE8ci5sZW5ndGg/clthXTplW2UubGVuZ3RoLTFdXX0saS5kb21haW49ZnVuY3Rpb24obyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgYT0wLHM9by5sZW5ndGgsbDthPHM7KythKWw9b1thXSxsIT1udWxsJiYhaXNOYU4obD0rbCkmJmUucHVzaChsKTtyZXR1cm4gZS5zb3J0KHBmKSxuKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChvKSxuKCkpOnQuc2xpY2UoKX0saS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWU8oKS5kb21haW4oZSkucmFuZ2UodCl9LGl9dmFyIGxPdD1NKCgpPT57bWYoKTtDZygpfSk7ZnVuY3Rpb24gak8oKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV07ZnVuY3Rpb24gbyhzKXtpZihzPD1zKXJldHVybiBpW2RmKG4scywwLHIpXX1mdW5jdGlvbiBhKCl7dmFyIHM9LTE7Zm9yKG49bmV3IEFycmF5KHIpOysrczxyOyluW3NdPSgocysxKSp0LShzLXIpKmUpLyhyKzEpO3JldHVybiBvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rc1swXSx0PStzWzFdLGEoKSk6W2UsdF19LG8ucmFuZ2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGk9cGwuY2FsbChzKSkubGVuZ3RoLTEsYSgpKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHMpe3ZhciBsPWkuaW5kZXhPZihzKTtyZXR1cm4gbDwwP1tOYU4sTmFOXTpsPDE/W2UsblswXV06bD49cj9bbltyLTFdLHRdOltuW2wtMV0sbltsXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBqTygpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSl9LG9kKG8pfXZhciBjT3Q9TSgoKT0+e21mKCk7Q2coKTtwdygpfSk7ZnVuY3Rpb24gWE8oKXt2YXIgZT1bLjVdLHQ9WzAsMV0scj0xO2Z1bmN0aW9uIG4oaSl7aWYoaTw9aSlyZXR1cm4gdFtkZihlLGksMCxyKV19cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXBsLmNhbGwoaSkscj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxuKTplLnNsaWNlKCl9LG4ucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChpKSxyPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLG4pOnQuc2xpY2UoKX0sbi5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oaSl7dmFyIG89dC5pbmRleE9mKGkpO3JldHVybltlW28tMV0sZVtvXV19LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBYTygpLmRvbWFpbihlKS5yYW5nZSh0KX0sbn12YXIgdU90PU0oKCk9PnttZigpO0NnKCl9KTtmdW5jdGlvbiBOcihlLHQscixuKXtmdW5jdGlvbiBpKG8pe3JldHVybiBlKG89YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoK28pKSxvfSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBOcihmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuICR0dC5zZXRUaW1lKCtvKSxLdHQuc2V0VGltZSgrYSksZSgkdHQpLGUoS3R0KSxNYXRoLmZsb29yKHIoJHR0LEt0dCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciAkdHQsS3R0LEthPU0oKCk9PnskdHQ9bmV3IERhdGUsS3R0PW5ldyBEYXRlfSk7dmFyICRPLG13LGhPdCxmT3Q9TSgoKT0+e0thKCk7JE89TnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTskTy5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP05yKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOiRPfTttdz0kTyxoT3Q9JE8ucmFuZ2V9KTt2YXIgb3Ysd2MsZ3csS08sWk8seGY9TSgoKT0+e292PTFlMyx3Yz02ZTQsZ3c9MzZlNSxLTz04NjRlNSxaTz02MDQ4ZTV9KTt2YXIgcE90LF93LGRPdCxtT3Q9TSgoKT0+e0thKCk7eGYoKTtwT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqb3YpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL292fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxfdz1wT3QsZE90PXBPdC5yYW5nZX0pO3ZhciBnT3QsWnR0LGlJZSxfT3Q9TSgoKT0+e0thKCk7eGYoKTtnT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpvdil9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxadHQ9Z090LGlJZT1nT3QucmFuZ2V9KTt2YXIgeU90LEp0dCxvSWUsdk90PU0oKCk9PntLYSgpO3hmKCk7eU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqb3YtZS5nZXRNaW51dGVzKCkqd2MpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Kmd3KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9nd30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLEp0dD15T3Qsb0llPXlPdC5yYW5nZX0pO3ZhciB4T3QseXcsYUllLGJPdD1NKCgpPT57S2EoKTt4ZigpO3hPdD1OcihmdW5jdGlvbihlKXtlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvS099LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGUoKS0xfSkseXc9eE90LGFJZT14T3QucmFuZ2V9KTtmdW5jdGlvbiBhdihlKXtyZXR1cm4gTnIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctZSklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldERhdGUodC5nZXREYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10LShyLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvWk99KX12YXIgc3Ysdncsd090LFNPdCxrZyxNT3QsRU90LFRPdCxzSWUsbEllLGNJZSx1SWUsaEllLGZJZSxDT3Q9TSgoKT0+e0thKCk7eGYoKTtzdj1hdigwKSx2dz1hdigxKSx3T3Q9YXYoMiksU090PWF2KDMpLGtnPWF2KDQpLE1PdD1hdig1KSxFT3Q9YXYoNiksVE90PXN2LnJhbmdlLHNJZT12dy5yYW5nZSxsSWU9d090LnJhbmdlLGNJZT1TT3QucmFuZ2UsdUllPWtnLnJhbmdlLGhJZT1NT3QucmFuZ2UsZkllPUVPdC5yYW5nZX0pO3ZhciBBT3QsUXR0LHBJZSxQT3Q9TSgoKT0+e0thKCk7QU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLFF0dD1BT3QscEllPUFPdC5yYW5nZX0pO3ZhciB0ZXQsYWQsZEllLElPdD1NKCgpPT57S2EoKTt0ZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTt0ZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTthZD10ZXQsZEllPXRldC5yYW5nZX0pO3ZhciBMT3QsZWV0LG1JZSxrT3Q9TSgoKT0+e0thKCk7eGYoKTtMT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9KSxlZXQ9TE90LG1JZT1MT3QucmFuZ2V9KTt2YXIgUk90LHJldCxnSWUsTk90PU0oKCk9PntLYSgpO3hmKCk7Uk90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqZ3cpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL2d3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSkscmV0PVJPdCxnSWU9Uk90LnJhbmdlfSk7dmFyIERPdCx4dyxfSWUsT090PU0oKCk9PntLYSgpO3hmKCk7RE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0tPfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLHh3PURPdCxfSWU9RE90LnJhbmdlfSk7ZnVuY3Rpb24gbHYoZSl7cmV0dXJuIE5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvWk99KX12YXIgY3YsYncsek90LEZPdCxSZyxCT3QsSE90LFZPdCx5SWUsdkllLHhJZSxiSWUsd0llLFNJZSxVT3Q9TSgoKT0+e0thKCk7eGYoKTtjdj1sdigwKSxidz1sdigxKSx6T3Q9bHYoMiksRk90PWx2KDMpLFJnPWx2KDQpLEJPdD1sdig1KSxIT3Q9bHYoNiksVk90PWN2LnJhbmdlLHlJZT1idy5yYW5nZSx2SWU9ek90LnJhbmdlLHhJZT1GT3QucmFuZ2UsYkllPVJnLnJhbmdlLHdJZT1CT3QucmFuZ2UsU0llPUhPdC5yYW5nZX0pO3ZhciBxT3QsbmV0LE1JZSxHT3Q9TSgoKT0+e0thKCk7cU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLG5ldD1xT3QsTUllPXFPdC5yYW5nZX0pO3ZhciBpZXQsc2QsRUllLFdPdD1NKCgpPT57S2EoKTtpZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTtpZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvZSkqZSksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrciplKX0pfTtzZD1pZXQsRUllPWlldC5yYW5nZX0pO3ZhciBKTz1NKCgpPT57Zk90KCk7bU90KCk7X090KCk7dk90KCk7Yk90KCk7Q090KCk7UE90KCk7SU90KCk7a090KCk7Tk90KCk7T090KCk7VU90KCk7R090KCk7V090KCl9KTtmdW5jdGlvbiBvZXQoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGFldChlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiB5QyhlLHQscil7cmV0dXJue3k6ZSxtOnQsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gc2V0KGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPXZDKGkpLHU9eEMoaSksaD12QyhvKSxmPXhDKG8pLHA9dkMoYSksZD14QyhhKSxnPXZDKHMpLF89eEMocykseT12QyhsKSx4PXhDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOlpPdCxlOlpPdCxmOlhJZSxnOmk5ZSxHOmE5ZSxIOldJZSxJOllJZSxqOmpJZSxMOnI3dCxtOiRJZSxNOktJZSxwOnN0LHE6U3QsUTp0N3QsczplN3QsUzpaSWUsdTpKSWUsVTpRSWUsVjp0OWUsdzplOWUsVzpyOWUseDpudWxsLFg6bnVsbCx5Om45ZSxZOm85ZSxaOnM5ZSwiJSI6UU90fSxTPXthOmJ0LEE6TXQsYjpsdCxCOkt0LGM6bnVsbCxkOkpPdCxlOkpPdCxmOmg5ZSxnOmI5ZSxHOlM5ZSxIOmw5ZSxJOmM5ZSxqOnU5ZSxMOmk3dCxtOmY5ZSxNOnA5ZSxwOl90LHE6Y3QsUTp0N3QsczplN3QsUzpkOWUsdTptOWUsVTpnOWUsVjpfOWUsdzp5OWUsVzp2OWUseDpudWxsLFg6bnVsbCx5Ong5ZSxZOnc5ZSxaOk05ZSwiJSI6UU90fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6JE90LGU6JE90LGY6VkllLGc6WE90LEc6ak90LEg6S090LEk6S090LGo6ekllLEw6SEllLG06T0llLE06RkllLHA6RCxxOkRJZSxROnFJZSxzOkdJZSxTOkJJZSx1OklJZSxVOkxJZSxWOmtJZSx3OlBJZSxXOlJJZSx4OnosWDpVLHk6WE90LFk6ak90LFo6TkllLCIlIjpVSWV9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT1bXSxwdD0tMSxodD0wLHd0PVgubGVuZ3RoLGt0LGllLGVlO2ZvcihkdCBpbnN0YW5jZW9mIERhdGV8fChkdD1uZXcgRGF0ZSgrZHQpKTsrK3B0PHd0OylYLmNoYXJDb2RlQXQocHQpPT09MzcmJihxLnB1c2goWC5zbGljZShodCxwdCkpLChpZT1ZT3Rba3Q9WC5jaGFyQXQoKytwdCldKSE9bnVsbD9rdD1YLmNoYXJBdCgrK3B0KTppZT1rdD09PSJlIj8iICI6IjAiLChlZT1ldFtrdF0pJiYoa3Q9ZWUoZHQsaWUpKSxxLnB1c2goa3QpLGh0PXB0KzEpO3JldHVybiBxLnB1c2goWC5zbGljZShodCxwdCkpLHEuam9pbigiIil9fWZ1bmN0aW9uIGsoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT15QygxOTAwLHZvaWQgMCwxKSxwdD1PKHEsWCxkdCs9IiIsMCksaHQsd3Q7aWYocHQhPWR0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBxKXJldHVybiBuZXcgRGF0ZShxLlEpO2lmKCJzImluIHEpcmV0dXJuIG5ldyBEYXRlKHEucyoxZTMrKCJMImluIHE/cS5MOjApKTtpZihldCYmISgiWiJpbiBxKSYmKHEuWj0wKSwicCJpbiBxJiYocS5IPXEuSCUxMitxLnAqMTIpLHEubT09PXZvaWQgMCYmKHEubT0icSJpbiBxP3EucTowKSwiViJpbiBxKXtpZihxLlY8MXx8cS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHF8fChxLnc9MSksIloiaW4gcT8oaHQ9YWV0KHlDKHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/YncuY2VpbChodCk6YncoaHQpLGh0PXh3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9b2V0KHlDKHEueSwwLDEpKSx3dD1odC5nZXREYXkoKSxodD13dD40fHx3dD09PTA/dncuY2VpbChodCk6dncoaHQpLGh0PXl3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRGdWxsWWVhcigpLHEubT1odC5nZXRNb250aCgpLHEuZD1odC5nZXREYXRlKCkrKHEudys2KSU3KX1lbHNlKCJXImluIHF8fCJVImluIHEpJiYoInciaW4gcXx8KHEudz0idSJpbiBxP3EudSU3OiJXImluIHE/MTowKSx3dD0iWiJpbiBxP2FldCh5QyhxLnksMCwxKSkuZ2V0VVRDRGF5KCk6b2V0KHlDKHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYWV0KHEpKTpvZXQocSl9fWZ1bmN0aW9uIE8oWCxldCxkdCxxKXtmb3IodmFyIHB0PTAsaHQ9ZXQubGVuZ3RoLHd0PWR0Lmxlbmd0aCxrdCxpZTtwdDxodDspe2lmKHE+PXd0KXJldHVybi0xO2lmKGt0PWV0LmNoYXJDb2RlQXQocHQrKyksa3Q9PT0zNyl7aWYoa3Q9ZXQuY2hhckF0KHB0KyspLGllPUNba3QgaW4gWU90P2V0LmNoYXJBdChwdCsrKTprdF0sIWllfHwocT1pZShYLGR0LHEpKTwwKXJldHVybi0xfWVsc2UgaWYoa3QhPWR0LmNoYXJDb2RlQXQocSsrKSlyZXR1cm4tMX1yZXR1cm4gcX1mdW5jdGlvbiBEKFgsZXQsZHQpe3ZhciBxPWMuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnA9dVtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKFgsZXQsZHQpe3ZhciBxPXAuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKFgsZXQsZHQpe3ZhciBxPWguZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZltxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKFgsZXQsZHQpe3ZhciBxPXkuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09eFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKFgsZXQsZHQpe3ZhciBxPWcuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09X1txWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKFgsZXQsZHQpe3JldHVybiBPKFgsdCxldCxkdCl9ZnVuY3Rpb24geihYLGV0LGR0KXtyZXR1cm4gTyhYLHIsZXQsZHQpfWZ1bmN0aW9uIFUoWCxldCxkdCl7cmV0dXJuIE8oWCxuLGV0LGR0KX1mdW5jdGlvbiBXKFgpe3JldHVybiBhW1guZ2V0RGF5KCldfWZ1bmN0aW9uIFooWCl7cmV0dXJuIG9bWC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoWCl7cmV0dXJuIGxbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChYKXtyZXR1cm4gc1tYLmdldE1vbnRoKCldfWZ1bmN0aW9uIHN0KFgpe3JldHVybiBpWysoWC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KFgpe3JldHVybiAxK35+KFguZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBidChYKXtyZXR1cm4gYVtYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChYKXtyZXR1cm4gb1tYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBsdChYKXtyZXR1cm4gbFtYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KFgpe3JldHVybiBzW1guZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gX3QoWCl7cmV0dXJuIGlbKyhYLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gY3QoWCl7cmV0dXJuIDErfn4oWC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsYik7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSxwYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMSk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsUyk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNQYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMCk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fX19ZnVuY3Rpb24gR3IoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gQUllKGUpe3JldHVybiBlLnJlcGxhY2UoQ0llLCJcXCQmIil9ZnVuY3Rpb24gdkMoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKEFJZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHhDKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIFBJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTEllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGtJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gak90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5JZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICRPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6SWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS090KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSEllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBVSWUoZSx0LHIpe3ZhciBuPVRJZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIHFJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFpPdChlLHQpe3JldHVybiBHcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIFdJZShlLHQpe3JldHVybiBHcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBZSWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIGpJZShlLHQpe3JldHVybiBHcigxK3l3LmNvdW50KGFkKGUpLGUpLHQsMyl9ZnVuY3Rpb24gcjd0KGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBYSWUoZSx0KXtyZXR1cm4gcjd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gJEllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gS0llKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gWkllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gSkllKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBRSWUoZSx0KXtyZXR1cm4gR3Ioc3YuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIG43dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD9rZyhlKTprZy5jZWlsKGUpfWZ1bmN0aW9uIHQ5ZShlLHQpe3JldHVybiBlPW43dChlKSxHcihrZy5jb3VudChhZChlKSxlKSsoYWQoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIGU5ZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiByOWUoZSx0KXtyZXR1cm4gR3IodncuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIG45ZShlLHQpe3JldHVybiBHcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gaTllKGUsdCl7cmV0dXJuIGU9bjd0KGUpLEdyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBvOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGE5ZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/a2coZSk6a2cuY2VpbChlKSxHcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gczllKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrR3IodC82MHwwLCIwIiwyKStHcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBKT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBsOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gYzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiB1OWUoZSx0KXtyZXR1cm4gR3IoMSt4dy5jb3VudChzZChlKSxlKSx0LDMpfWZ1bmN0aW9uIGk3dChlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gaDllKGUsdCl7cmV0dXJuIGk3dChlLHQpKyIwMDAifWZ1bmN0aW9uIGY5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIHA5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIGQ5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIG05ZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gZzllKGUsdCl7cmV0dXJuIEdyKGN2LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBvN3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/UmcoZSk6UmcuY2VpbChlKX1mdW5jdGlvbiBfOWUoZSx0KXtyZXR1cm4gZT1vN3QoZSksR3IoUmcuY291bnQoc2QoZSksZSkrKHNkKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiB5OWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gdjllKGUsdCl7cmV0dXJuIEdyKGJ3LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB4OWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIGI5ZShlLHQpe3JldHVybiBlPW83dChlKSxHcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBTOWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP1JnKGUpOlJnLmNlaWwoZSksR3IoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIE05ZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gUU90KCl7cmV0dXJuIiUifWZ1bmN0aW9uIHQ3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBlN3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgWU90LFRvLFRJZSxDSWUsYTd0PU0oKCk9PntKTygpO1lPdD17Ii0iOiIiLF86IiAiLDA6IjAifSxUbz0vXlxzKlxkKy8sVEllPS9eJS8sQ0llPS9bXFxeJCorP3xbXF0oKS57fV0vZ30pO2Z1bmN0aW9uIGNldChlKXtyZXR1cm4gd3c9c2V0KGUpLFFPPXd3LmZvcm1hdCxzN3Q9d3cucGFyc2UsdDc9d3cudXRjRm9ybWF0LGw3dD13dy51dGNQYXJzZSx3d312YXIgd3csUU8sczd0LHQ3LGw3dCxjN3Q9TSgoKT0+e2E3dCgpO2NldCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pfSk7dmFyIHVldD1NKCgpPT57Yzd0KCl9KTtmdW5jdGlvbiBUOWUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIEM5ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/K2U6K25ldyBEYXRlKCtlKX1mdW5jdGlvbiBlNyhlLHQscixuLGksbyxhLHMsbCl7dmFyIGM9aWQocEMseWYpLHU9Yy5pbnZlcnQsaD1jLmRvbWFpbixmPWwoIi4lTCIpLHA9bCgiOiVTIiksZD1sKCIlSTolTSIpLGc9bCgiJUkgJXAiKSxfPWwoIiVhICVkIikseT1sKCIlYiAlZCIpLHg9bCgiJUIiKSxiPWwoIiVZIiksUz1bW2EsMSxiQ10sW2EsNSw1KmJDXSxbYSwxNSwxNSpiQ10sW2EsMzAsMzAqYkNdLFtvLDEsd0NdLFtvLDUsNSp3Q10sW28sMTUsMTUqd0NdLFtvLDMwLDMwKndDXSxbaSwxLFNDXSxbaSwzLDMqU0NdLFtpLDYsNipTQ10sW2ksMTIsMTIqU0NdLFtuLDEsTUNdLFtuLDIsMipNQ10sW3IsMSxFOWVdLFt0LDEsdTd0XSxbdCwzLDMqdTd0XSxbZSwxLGhldF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9YUMoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj1aeShPL2hldCxEL2hldCxrKSxrPWUpOkw/KEw9U1tJL1NbTC0xXVsyXTxTW0xdWzJdL0k/TC0xOkxdLEI9TFsxXSxrPUxbMF0pOihCPU1hdGgubWF4KFp5KE8sRCxrKSwxKSxrPXMpfXJldHVybiBCPT1udWxsP2s6ay5ldmVyeShCKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEYXRlKHUoaykpfSxjLmRvbWFpbj1mdW5jdGlvbihrKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKHJ3LmNhbGwoayxDOWUpKTpoKCkubWFwKFQ5ZSl9LGMudGlja3M9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCksQj1EWzBdLEk9RFtELmxlbmd0aC0xXSxMPUk8QixSO3JldHVybiBMJiYoUj1CLEI9SSxJPVIpLFI9UChrLEIsSSxPKSxSPVI/Ui5yYW5nZShCLEkrMSk6W10sTD9SLnJldmVyc2UoKTpSfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oayxPKXtyZXR1cm4gTz09bnVsbD9DOmwoTyl9LGMubmljZT1mdW5jdGlvbihrLE8pe3ZhciBEPWgoKTtyZXR1cm4oaz1QKGssRFswXSxEW0QubGVuZ3RoLTFdLE8pKT9oKEdPKEQsaykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhjLGU3KGUsdCxyLG4saSxvLGEscyxsKSl9LGN9ZnVuY3Rpb24gaDd0KCl7cmV0dXJuIGU3KGFkLFF0dCxzdix5dyxKdHQsWnR0LF93LG13LFFPKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9dmFyIGJDLHdDLFNDLE1DLEU5ZSx1N3QsaGV0LGZldD1NKCgpPT57bWYoKTt1dygpO0pPKCk7dWV0KCk7Q2coKTtkQygpO1h0dCgpO2JDPTFlMyx3Qz1iQyo2MCxTQz13Qyo2MCxNQz1TQyoyNCxFOWU9TUMqNyx1N3Q9TUMqMzAsaGV0PU1DKjM2NX0pO2Z1bmN0aW9uIGY3dCgpe3JldHVybiBlNyhzZCxuZXQsY3YseHcscmV0LGVldCxfdyxtdyx0NykuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfXZhciBwN3Q9TSgoKT0+e2ZldCgpO3VldCgpO0pPKCl9KTtmdW5jdGlvbiBkbChlKXtyZXR1cm4gZS5tYXRjaCgvLns2fS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiMiK3R9KX12YXIgU3c9TSgoKT0+e30pO3ZhciBkN3QsbTd0PU0oKCk9PntTdygpO2Q3dD1kbCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIil9KTt2YXIgZzd0LF83dD1NKCgpPT57U3coKTtnN3Q9ZGwoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpfSk7dmFyIHk3dCx2N3Q9TSgoKT0+e1N3KCk7eTd0PWRsKCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKX0pO3ZhciB4N3QsYjd0PU0oKCk9PntTdygpO3g3dD1kbCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1Iil9KTt2YXIgdzd0LFM3dD1NKCgpPT57c3coKTt1dygpO3c3dD1jdygkYSgzMDAsLjUsMCksJGEoLTI0MCwuNSwxKSl9KTtmdW5jdGlvbiBUN3QoZSl7KGU8MHx8ZT4xKSYmKGUtPU1hdGguZmxvb3IoZSkpO3ZhciB0PU1hdGguYWJzKGUtLjUpO3JldHVybiByNy5oPTM2MCplLTEwMCxyNy5zPTEuNS0xLjUqdCxyNy5sPS44LS45KnQscjcrIiJ9dmFyIE03dCxFN3QscjcsQzd0PU0oKCk9PntzdygpO3V3KCk7TTd0PWN3KCRhKC0xMDAsLjc1LC4zNSksJGEoODAsMS41LC44KSksRTd0PWN3KCRhKDI2MCwuNzUsLjM1KSwkYSg4MCwxLjUsLjgpKSxyNz0kYSgpfSk7ZnVuY3Rpb24gbjcoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4odC0xLE1hdGguZmxvb3Iocip0KSkpXX19dmFyIEE3dCxQN3QsSTd0LEw3dCxrN3Q9TSgoKT0+e1N3KCk7QTd0PW43KGRsKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksUDd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksSTd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksTDd0PW43KGRsKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSl9KTtmdW5jdGlvbiBpNyhlKXt2YXIgdD0wLHI9MSxuPSExO2Z1bmN0aW9uIGkobyl7dmFyIGE9KG8tdCkvKHItdCk7cmV0dXJuIGUobj9NYXRoLm1heCgwLE1hdGgubWluKDEsYSkpOmEpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rb1swXSxyPStvWzFdLGkpOlt0LHJdfSxpLmNsYW1wPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhbyxpKTpufSxpLmludGVycG9sYXRvcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBpNyhlKS5kb21haW4oW3Qscl0pLmNsYW1wKG4pfSxvZChpKX12YXIgUjd0PU0oKCk9PntwdygpfSk7dmFyIE43dD1NKCgpPT57ak50KCk7ZU90KCk7cHcoKTtvT3QoKTt4dHQoKTtzT3QoKTtsT3QoKTtjT3QoKTt1T3QoKTtmZXQoKTtwN3QoKTttN3QoKTtfN3QoKTt2N3QoKTtiN3QoKTtTN3QoKTtDN3QoKTtrN3QoKTtSN3QoKX0pO3ZhciBvNyxFQyxhNz1NKCgpPT57bzc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEVDPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvNyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gTXcoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksRUMuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkVDW3RdLGxvY2FsOmV9OmV9dmFyIHM3PU0oKCk9PnthNygpfSk7ZnVuY3Rpb24gQTllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09bzcmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PW83P3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBQOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTmcoZSl7dmFyIHQ9TXcoZSk7cmV0dXJuKHQubG9jYWw/UDllOkE5ZSkodCl9dmFyIFRDPU0oKCk9PntzNygpO2E3KCl9KTtmdW5jdGlvbiBJOWUoKXt9ZnVuY3Rpb24gRXcoZSl7cmV0dXJuIGU9PW51bGw/STllOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIGw3PU0oKCk9Pnt9KTtmdW5jdGlvbiBEN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUV3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgQm4obix0aGlzLl9wYXJlbnRzKX12YXIgTzd0PU0oKCk9PntTYygpO2w3KCl9KTtmdW5jdGlvbiBMOWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBjNyhlKXtyZXR1cm4gZT09bnVsbD9MOWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgcGV0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6N3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWM3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBCbihuLGkpfXZhciBGN3Q9TSgoKT0+e1NjKCk7cGV0KCl9KTt2YXIgSDd0LFR3LEI3dCx1NyxkZXQ9TSgoKT0+e0g3dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX07dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFR3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxUdy5tYXRjaGVzfHwoQjd0PVR3LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8VHcubXNNYXRjaGVzU2VsZWN0b3J8fFR3Lm1vek1hdGNoZXNTZWxlY3Rvcnx8VHcub01hdGNoZXNTZWxlY3RvcixIN3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEI3dC5jYWxsKHRoaXMsZSl9fSkpO3U3PUg3dH0pO2Z1bmN0aW9uIFY3dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dTcoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEJuKG4sdGhpcy5fcGFyZW50cyl9dmFyIFU3dD1NKCgpPT57U2MoKTtkZXQoKX0pO2Z1bmN0aW9uIGg3KGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBtZXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHE3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoaDcpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENDKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBnZXQ9TSgoKT0+e21ldCgpO1NjKCk7Q0MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDQyxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIEc3dChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFc3dD1NKCgpPT57fSk7ZnVuY3Rpb24gazllKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBDQyhlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gUjllKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9WTd0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9WTd0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IENDKGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gajd0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9SOWU6azllLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Rzd0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBCbihhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIFk3dCxYN3Q9TSgoKT0+e1NjKCk7Z2V0KCk7Vzd0KCk7WTd0PSIkIn0pO2Z1bmN0aW9uICQ3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChoNyksdGhpcy5fcGFyZW50cyl9dmFyIEs3dD1NKCgpPT57bWV0KCk7U2MoKX0pO2Z1bmN0aW9uIFo3dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgQm4oYSx0aGlzLl9wYXJlbnRzKX12YXIgSjd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gUTd0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmbyE9PWEubmV4dFNpYmxpbmcmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciB0enQ9TSgoKT0+e30pO2Z1bmN0aW9uIGV6dChlKXtlfHwoZT1OOWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgQm4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIE45ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgcnp0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gbnp0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBpenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG96dCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBhenQ9TSgoKT0+e30pO2Z1bmN0aW9uIHN6dCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGx6dD1NKCgpPT57fSk7ZnVuY3Rpb24gY3p0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgdXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBoenQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGZ6dD1NKCgpPT57fSk7ZnVuY3Rpb24gcHp0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgZHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBEOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIE85ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIHo5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIEY5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBCOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIEg5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBtenQoZSx0KXt2YXIgcj1NdyhlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/TzllOkQ5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP0g5ZTpCOWU6ci5sb2NhbD9GOWU6ejllKShyLHQpKX12YXIgZ3p0PU0oKCk9PntzNygpfSk7ZnVuY3Rpb24gQ3coZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBmNz1NKCgpPT57fSk7ZnVuY3Rpb24gVjllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFU5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIHE5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBfenQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP1Y5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9xOWU6VTllKShlLHQscj09bnVsbD8iIjpyKSk6X2V0KHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIF9ldChlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fEN3KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB5ZXQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBHOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIFc5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gWTllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHl6dChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0c5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ZOWU6VzllKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgdnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiB4enQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHZldChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBienQoZSl9ZnVuY3Rpb24gYnp0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz14enQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB3enQoZSx0KXtmb3IodmFyIHI9dmV0KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gU3p0KGUsdCl7Zm9yKHZhciByPXZldChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGo5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt3enQodGhpcyxlKX19ZnVuY3Rpb24gWDllKGUpe3JldHVybiBmdW5jdGlvbigpe1N6dCh0aGlzLGUpfX1mdW5jdGlvbiAkOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/d3p0OlN6dCkodGhpcyxlKX19ZnVuY3Rpb24gTXp0KGUsdCl7dmFyIHI9eHp0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPXZldCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj8kOWU6dD9qOWU6WDllKShyLHQpKX12YXIgRXp0PU0oKCk9PntienQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gSzllKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBaOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBKOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFR6dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9LOWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0o5ZTpaOWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgQ3p0PU0oKCk9Pnt9KTtmdW5jdGlvbiBROWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB0TGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gZUxlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gQXp0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP1E5ZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/ZUxlOnRMZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgUHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByTGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSXp0KCl7cmV0dXJuIHRoaXMuZWFjaChyTGUpfXZhciBMenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG5MZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGt6dCgpe3JldHVybiB0aGlzLmVhY2gobkxlKX12YXIgUnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBOenQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgRHp0PU0oKCk9PntUQygpfSk7ZnVuY3Rpb24gaUxlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gT3p0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKSxuPXQ9PW51bGw/aUxlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6RXcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciB6enQ9TSgoKT0+e1RDKCk7bDcoKX0pO2Z1bmN0aW9uIG9MZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIEZ6dCgpe3JldHVybiB0aGlzLmVhY2gob0xlKX12YXIgQnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhTGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gc0xlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIEh6dChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9zTGU6YUxlKX12YXIgVnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBVenQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBxenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGxMZShlLHQscil7cmV0dXJuIGU9WXp0KGUsdCxyKSxmdW5jdGlvbihuKXt2YXIgaT1uLnJlbGF0ZWRUYXJnZXQ7KCFpfHxpIT09dGhpcyYmIShpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpJjgpKSYmZS5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFl6dChlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPVB1O1B1PW47dHJ5e2UuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxyKX1maW5hbGx5e1B1PWl9fX1mdW5jdGlvbiBjTGUoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIHVMZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYoISF0KXtmb3IodmFyIHI9MCxuPS0xLGk9dC5sZW5ndGgsbztyPGk7KytyKW89dFtyXSwoIWUudHlwZXx8by50eXBlPT09ZS50eXBlKSYmby5uYW1lPT09ZS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOnRbKytuXT1vOysrbj90Lmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBoTGUoZSx0LHIpe3ZhciBuPVd6dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2xMZTpZenQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz10aGlzLl9fb24sbCxjPW4odCxvLGEpO2lmKHMpe2Zvcih2YXIgdT0wLGg9cy5sZW5ndGg7dTxoOysrdSlpZigobD1zW3VdKS50eXBlPT09ZS50eXBlJiZsLm5hbWU9PT1lLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1yKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoZS50eXBlLGMsciksbD17dHlwZTplLnR5cGUsbmFtZTplLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6cn0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24ganp0KGUsdCxyKXt2YXIgbj1jTGUoZSsiIiksaSxvPW4ubGVuZ3RoLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGgsdTtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8bzsrK2kpaWYoKGE9bltpXSkudHlwZT09PXUudHlwZSYmYS5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfXJldHVybn1mb3Iocz10P2hMZTp1TGUscj09bnVsbCYmKHI9ITEpLGk9MDtpPG87KytpKXRoaXMuZWFjaChzKG5baV0sdCxyKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWHp0KGUsdCxyLG4pe3ZhciBpPVB1O2Uuc291cmNlRXZlbnQ9UHUsUHU9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e1B1PWl9fXZhciBXenQsUHUsR3p0LHA3PU0oKCk9PntXenQ9e30sUHU9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoR3p0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIEd6dHx8KFd6dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiAkenQoZSx0LHIpe3ZhciBuPUN3KGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGZMZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAkenQodGhpcyxlLHQpfX1mdW5jdGlvbiBwTGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gJHp0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIEt6dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3BMZTpmTGUpKGUsdCkpfXZhciBaenQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBCbihlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBKenQoKXtyZXR1cm4gbmV3IEJuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQUMpfXZhciBBQyxRenQsU2M9TSgoKT0+e083dCgpO0Y3dCgpO1U3dCgpO1g3dCgpO2dldCgpO0s3dCgpO0o3dCgpO3R6dCgpO3J6dCgpO2l6dCgpO2F6dCgpO2x6dCgpO3V6dCgpO2Z6dCgpO2R6dCgpO2d6dCgpO3lldCgpO3Z6dCgpO0V6dCgpO0N6dCgpO1B6dCgpO0x6dCgpO1J6dCgpO0R6dCgpO3p6dCgpO0J6dCgpO1Z6dCgpO3F6dCgpO3A3KCk7Wnp0KCk7QUM9W251bGxdO0JuLnByb3RvdHlwZT1KenQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCbixzZWxlY3Q6RDd0LHNlbGVjdEFsbDp6N3QsZmlsdGVyOlY3dCxkYXRhOmo3dCxlbnRlcjpxN3QsZXhpdDokN3QsbWVyZ2U6Wjd0LG9yZGVyOlE3dCxzb3J0OmV6dCxjYWxsOm56dCxub2RlczpvenQsbm9kZTpzenQsc2l6ZTpjenQsZW1wdHk6aHp0LGVhY2g6cHp0LGF0dHI6bXp0LHN0eWxlOl96dCxwcm9wZXJ0eTp5enQsY2xhc3NlZDpNenQsdGV4dDpUenQsaHRtbDpBenQscmFpc2U6SXp0LGxvd2VyOmt6dCxhcHBlbmQ6Tnp0LGluc2VydDpPenQscmVtb3ZlOkZ6dCxjbG9uZTpIenQsZGF0dW06VXp0LG9uOmp6dCxkaXNwYXRjaDpLenR9O1F6dD1KenR9KTtmdW5jdGlvbiBkNyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBCbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEJuKFtbZV1dLEFDKX12YXIgeGV0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gdEZ0KGUpe3JldHVybiBkNyhOZyhlKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBlRnQ9TSgoKT0+e1RDKCk7eGV0KCl9KTtmdW5jdGlvbiBtNygpe3JldHVybiBuZXcgYmV0fWZ1bmN0aW9uIGJldCgpe3RoaXMuXz0iQCIrKCsrZExlKS50b1N0cmluZygzNil9dmFyIGRMZSxyRnQ9TSgoKT0+e2RMZT0wO2JldC5wcm90b3R5cGU9bTcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZXQsZ2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl87ISh0IGluIGUpOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIGVbdF19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlW3RoaXMuX109dH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl8gaW4gZSYmZGVsZXRlIGVbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX19KTtmdW5jdGlvbiBBdygpe2Zvcih2YXIgZT1QdSx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfXZhciBnNz1NKCgpPT57cDcoKX0pO2Z1bmN0aW9uIERnKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBDPU0oKCk9Pnt9KTtmdW5jdGlvbiBuRnQoZSl7dmFyIHQ9QXcoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRGcoZSx0KX12YXIgaUZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBvRnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgQm4oW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgQm4oW2U9PW51bGw/W106ZV0sQUMpfXZhciBhRnQ9TSgoKT0+e1NjKCl9KTtmdW5jdGlvbiBzRnQoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PUF3KCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRGcoZSxvKTtyZXR1cm4gbnVsbH12YXIgbEZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBjRnQoZSx0KXt0PT1udWxsJiYodD1BdygpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EZyhlLHRbcl0pO3JldHVybiBpfXZhciB1RnQ9TSgoKT0+e2c3KCk7UEMoKX0pO3ZhciBoRnQ9TSgoKT0+e2VGdCgpO1RDKCk7ckZ0KCk7ZGV0KCk7aUZ0KCk7czcoKTthNygpO1BDKCk7eGV0KCk7YUZ0KCk7U2MoKTtsNygpO3BldCgpO3lldCgpO2xGdCgpO3VGdCgpO2Y3KCk7cDcoKX0pO2Z1bmN0aW9uIEVldCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGZGdCgpe3JldHVybiBuZXcgRWV0fXZhciB3ZXQsTWV0LHV2LG1MZSxJdSxwRnQ9TSgoKT0+e3dldD1NYXRoLlBJLE1ldD0yKndldCx1dj0xZS02LG1MZT1NZXQtdXY7RWV0LnByb3RvdHlwZT1mRnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpFZXQsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPnV2KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+dXYpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigod2V0LU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnV2JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnV2fHxNYXRoLmFicyh0aGlzLl95MS1jKT51dikmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJU1ldCtNZXQpLGg+bUxlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPnV2JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj13ZXQpKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtJdT1mRnR9KTt2YXIgUHc9TSgoKT0+e3BGdCgpfSk7ZnVuY3Rpb24gR2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBPZz1NKCgpPT57fSk7ZnVuY3Rpb24gbUZ0KGUpe3JldHVybiBlPjE/MDplPC0xP2t1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBDZXQoZSl7cmV0dXJuIGU+PTE/SUM6ZTw9LTE/LUlDOk1hdGguYXNpbihlKX12YXIgVGV0LEhvLHpnLGRGdCxfNyxMdSxodixDbyxrdSxJQyxNYyxJdz1NKCgpPT57VGV0PU1hdGguYWJzLEhvPU1hdGguYXRhbjIsemc9TWF0aC5jb3MsZEZ0PU1hdGgubWF4LF83PU1hdGgubWluLEx1PU1hdGguc2luLGh2PU1hdGguc3FydCxDbz0xZS0xMixrdT1NYXRoLlBJLElDPWt1LzIsTWM9MiprdX0pO2Z1bmN0aW9uIGdMZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBfTGUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24geUxlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gdkxlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIHhMZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBiTGUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj0odSoodC1vKS1oKihlLWkpKS8oaCpsLXUqYyk7cmV0dXJuW2UrZipsLHQrZipjXX1mdW5jdGlvbiB5NyhlLHQscixuLGksbyxhKXt2YXIgcz1lLXIsbD10LW4sYz0oYT9vOi1vKS9odihzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZj1lK3UscD10K2gsZD1yK3UsZz1uK2gsXz0oZitkKS8yLHk9KHArZykvMix4PWQtZixiPWctcCxTPXgqeCtiKmIsQz1pLW8sUD1mKmctZCpwLGs9KGI8MD8tMToxKSpodihkRnQoMCxDKkMqUy1QKlApKSxPPShQKmIteCprKS9TLEQ9KC1QKngtYiprKS9TLEI9KFAqYit4KmspL1MsST0oLVAqeCtiKmspL1MsTD1PLV8sUj1ELXksRj1CLV8sej1JLXk7cmV0dXJuIEwqTCtSKlI+RipGK3oqeiYmKE89QixEPUkpLHtjeDpPLGN5OkQseDAxOi11LHkwMTotaCx4MTE6TyooaS9DLTEpLHkxMTpEKihpL0MtMSl9fWZ1bmN0aW9uIGdGdCgpe3ZhciBlPWdMZSx0PV9MZSxyPUdlKDApLG49bnVsbCxpPXlMZSxvPXZMZSxhPXhMZSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBjLHUsaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JQyxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUlDLGc9VGV0KGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1JdSgpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPkNvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5NYy1DbylzLm1vdmVUbyhmKnpnKHApLGYqTHUocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5DbyYmKHMubW92ZVRvKGgqemcoZCksaCpMdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPkNvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aHYoaCpoK2YqZikpLEQ9XzcoVGV0KGYtaCkvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEI9RCxJPUQsTCxSO2lmKE8+Q28pe3ZhciBGPUNldChPL2gqTHUoaykpLHo9Q2V0KE8vZipMdShrKSk7KEMtPUYqMik+Q28/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPkNvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKnpnKHkpLFc9ZipMdSh5KSxaPWgqemcoUykscnQ9aCpMdShTKTtpZihEPkNvKXt2YXIgb3Q9Zip6Zyh4KSxzdD1mKkx1KHgpLFN0PWgqemcoYiksYnQ9aCpMdShiKTtpZihnPGt1KXt2YXIgTXQ9Qz5Dbz9iTGUoVSxXLFN0LGJ0LG90LHN0LFoscnQpOltaLHJ0XSxsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL0x1KG1GdCgobHQqX3QrS3QqY3QpLyhodihsdCpsdCtLdCpLdCkqaHYoX3QqX3QrY3QqY3QpKSkvMiksZXQ9aHYoTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9XzcoRCwoaC1ldCkvKFgtMSkpLEk9XzcoRCwoZi1ldCkvKFgrMSkpfX1QPkNvP0k+Q28/KEw9eTcoU3QsYnQsVSxXLGYsSSxfKSxSPXk3KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEhvKEwueTAxLEwueDAxKSxIbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxIbyhMLnkwMSxMLngwMSksSG8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixIbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEhvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEhvKFIueTExLFIueDExKSxIbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Q28pfHwhKEM+Q28pP3MubGluZVRvKFoscnQpOkI+Q28/KEw9eTcoWixydCxvdCxzdCxoLC1CLF8pLFI9eTcoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsSG8oTC55MDEsTC54MDEpLEhvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEhvKEwueTAxLEwueDAxKSxIbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEhvKEwuY3krTC55MTEsTC5jeCtMLngxMSksSG8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixIbyhSLnkxMSxSLngxMSksSG8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWt1LzI7cmV0dXJuW3pnKHUpKmMsTHUodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH12YXIgX0Z0PU0oKCk9PntQdygpO09nKCk7SXcoKX0pO2Z1bmN0aW9uIHlGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRmcoZSl7cmV0dXJuIG5ldyB5RnQoZSl9dmFyIExDPU0oKCk9Pnt5RnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7YnJlYWt9fX19KTtmdW5jdGlvbiBMdyhlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBrdyhlKXtyZXR1cm4gZVsxXX12YXIgdjc9TSgoKT0+e30pO2Z1bmN0aW9uIFJ3KCl7dmFyIGU9THcsdD1rdyxyPUdlKCEwKSxuPW51bGwsaT1GZyxvPW51bGw7ZnVuY3Rpb24gYShzKXt2YXIgbCxjPXMubGVuZ3RoLHUsaD0hMSxmO2ZvcihuPT1udWxsJiYobz1pKGY9SXUoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmcih1PXNbbF0sbCxzKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK2UodSxsLHMpLCt0KHUsbCxzKSk7aWYoZilyZXR1cm4gbz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTplfSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6dH0sYS5kZWZpbmVkPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoISFzKSxhKTpyfSxhLmN1cnZlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXMsbiE9bnVsbCYmKG89aShuKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPT1udWxsP249bz1udWxsOm89aShuPXMpLGEpOm59LGF9dmFyIHg3PU0oKCk9PntQdygpO09nKCk7TEMoKTt2NygpfSk7ZnVuY3Rpb24gYjcoKXt2YXIgZT1Mdyx0PW51bGwscj1HZSgwKSxuPWt3LGk9R2UoITApLG89bnVsbCxhPUZnLHM9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBoLGYscCxkPXUubGVuZ3RoLGcsXz0hMSx5LHg9bmV3IEFycmF5KGQpLGI9bmV3IEFycmF5KGQpO2ZvcihvPT1udWxsJiYocz1hKHk9SXUoKSkpLGg9MDtoPD1kOysraCl7aWYoIShoPGQmJmkoZz11W2hdLGgsdSkpPT09XylpZihfPSFfKWY9aCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWgtMTtwPj1mOy0tcClzLnBvaW50KHhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9XyYmKHhbaF09K2UoZyxoLHUpLGJbaF09K3IoZyxoLHUpLHMucG9pbnQodD8rdChnLGgsdSk6eFtoXSxuPytuKGcsaCx1KTpiW2hdKSl9aWYoeSlyZXR1cm4gcz1udWxsLHkrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBSdygpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLHQ9bnVsbCxsKTplfSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOmV9LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dT09bnVsbD9udWxsOnR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxuPW51bGwsbCk6cn0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpyfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpufSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KHIpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSghIXUpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxvIT1udWxsJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bz1zPW51bGw6cz1hKG89dSksbCk6b30sbH12YXIgQWV0PU0oKCk9PntQdygpO09nKCk7TEMoKTt4NygpO3Y3KCl9KTtmdW5jdGlvbiB2RnQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIHhGdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkZ0KGUpe3JldHVybiBlfXZhciB3RnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFNGdCgpe3ZhciBlPWJGdCx0PXZGdCxyPW51bGwsbj1HZSgwKSxpPUdlKE1jKSxvPUdlKDApO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGgsZj0wLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLGc9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oTWMsTWF0aC5tYXgoLU1jLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5LHg9TWF0aC5taW4oTWF0aC5hYnMoXykvYyxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14KihfPDA/LTE6MSksUztmb3IobD0wO2w8YzsrK2wpKFM9ZFtwW2xdPWxdPStlKHNbbF0sbCxzKSk+MCYmKGYrPVMpO2Zvcih0IT1udWxsP3Auc29ydChmdW5jdGlvbihDLFApe3JldHVybiB0KGRbQ10sZFtQXSl9KTpyIT1udWxsJiZwLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gcihzW0NdLHNbUF0pfSksbD0wLGg9Zj8oXy1jKmIpL2Y6MDtsPGM7KytsLGc9eSl1PXBbbF0sUz1kW3VdLHk9ZysoUz4wP1MqaDowKStiLGRbdV09e2RhdGE6c1t1XSxpbmRleDpsLHZhbHVlOlMsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnkscGFkQW5nbGU6eH07cmV0dXJuIGR9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6ZX0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMscj1udWxsLGEpOnR9LGEuc29ydD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLHQ9bnVsbCxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm99LGF9dmFyIE1GdD1NKCgpPT57T2coKTt4RnQoKTt3RnQoKTtJdygpfSk7ZnVuY3Rpb24gRUZ0KGUpe3RoaXMuX2N1cnZlPWV9ZnVuY3Rpb24gTncoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEVGdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fXZhciB3NyxQZXQ9TSgoKT0+e0xDKCk7dzc9TncoRmcpO0VGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jdXJ2ZS5wb2ludCh0Kk1hdGguc2luKGUpLHQqLU1hdGguY29zKGUpKX19fSk7ZnVuY3Rpb24gRHcoZSl7dmFyIHQ9ZS5jdXJ2ZTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmN1cnZlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoTncocikpOnQoKS5fY3VydmV9LGV9ZnVuY3Rpb24gSWV0KCl7cmV0dXJuIER3KFJ3KCkuY3VydmUodzcpKX12YXIgTGV0PU0oKCk9PntQZXQoKTt4NygpfSk7ZnVuY3Rpb24ga2V0KCl7dmFyIGU9YjcoKS5jdXJ2ZSh3NyksdD1lLmN1cnZlLHI9ZS5saW5lWDAsbj1lLmxpbmVYMSxpPWUubGluZVkwLG89ZS5saW5lWTE7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5zdGFydEFuZ2xlPWUueDAsZGVsZXRlIGUueDAsZS5lbmRBbmdsZT1lLngxLGRlbGV0ZSBlLngxLGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuaW5uZXJSYWRpdXM9ZS55MCxkZWxldGUgZS55MCxlLm91dGVyUmFkaXVzPWUueTEsZGVsZXRlIGUueTEsZS5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBEdyhyKCkpfSxkZWxldGUgZS5saW5lWDAsZS5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHcobigpKX0sZGVsZXRlIGUubGluZVgxLGUubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIER3KGkoKSl9LGRlbGV0ZSBlLmxpbmVZMCxlLmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEdyhvKCkpfSxkZWxldGUgZS5saW5lWTEsZS5jdXJ2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KE53KGEpKTp0KCkuX2N1cnZlfSxlfXZhciBURnQ9TSgoKT0+e1BldCgpO0FldCgpO0xldCgpfSk7ZnVuY3Rpb24gZnYoZSx0KXtyZXR1cm5bKHQ9K3QpKk1hdGguY29zKGUtPU1hdGguUEkvMiksdCpNYXRoLnNpbihlKV19dmFyIFJldD1NKCgpPT57fSk7dmFyIGtDLE5ldD1NKCgpPT57a0M9QXJyYXkucHJvdG90eXBlLnNsaWNlfSk7ZnVuY3Rpb24gd0xlKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiBTTGUoZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIERldChlKXt2YXIgdD13TGUscj1TTGUsbj1MdyxpPWt3LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1rQy5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1JdSgpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIE1MZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIEVMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIFRMZShlLHQscixuLGkpe3ZhciBvPWZ2KHQsciksYT1mdih0LHI9KHIraSkvMikscz1mdihuLHIpLGw9ZnYobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gQ0Z0KCl7cmV0dXJuIERldChNTGUpfWZ1bmN0aW9uIEFGdCgpe3JldHVybiBEZXQoRUxlKX1mdW5jdGlvbiBQRnQoKXt2YXIgZT1EZXQoVExlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBJRnQ9TSgoKT0+e1B3KCk7TmV0KCk7T2coKTt2NygpO1JldCgpfSk7dmFyIFJDLE9ldD1NKCgpPT57SXcoKTtSQz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L2t1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsTWMpfX19KTt2YXIgUzcsemV0PU0oKCk9PntTNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0LzUpLzI7ZS5tb3ZlVG8oLTMqciwtciksZS5saW5lVG8oLXIsLXIpLGUubGluZVRvKC1yLC0zKnIpLGUubGluZVRvKHIsLTMqciksZS5saW5lVG8ociwtciksZS5saW5lVG8oMypyLC1yKSxlLmxpbmVUbygzKnIsciksZS5saW5lVG8ocixyKSxlLmxpbmVUbyhyLDMqciksZS5saW5lVG8oLXIsMypyKSxlLmxpbmVUbygtcixyKSxlLmxpbmVUbygtMypyLHIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBMRnQsQ0xlLE03LEZldD1NKCgpPT57TEZ0PU1hdGguc3FydCguMzMzMzMzMzMzMzMzMzMzMyksQ0xlPUxGdCoyLE03PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvQ0xlKSxuPXIqTEZ0O2UubW92ZVRvKDAsLXIpLGUubGluZVRvKG4sMCksZS5saW5lVG8oMCxyKSxlLmxpbmVUbygtbiwwKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgQUxlLGtGdCxQTGUsSUxlLEU3LEJldD1NKCgpPT57SXcoKTtBTGU9Ljg5MDgxMzA5MTUyOTI4NTIsa0Z0PU1hdGguc2luKGt1LzEwKS9NYXRoLnNpbig3Kmt1LzEwKSxQTGU9TWF0aC5zaW4oTWMvMTApKmtGdCxJTGU9LU1hdGguY29zKE1jLzEwKSprRnQsRTc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCpBTGUpLG49UExlKnIsaT1JTGUqcjtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPU1jKm8vNSxzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7ZS5saW5lVG8obCpyLC1zKnIpLGUubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9ZS5jbG9zZVBhdGgoKX19fSk7dmFyIFQ3LEhldD1NKCgpPT57VDc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19fSk7dmFyIFZldCxDNyxVZXQ9TSgoKT0+e1ZldD1NYXRoLnNxcnQoMyksQzc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKFZldCozKSk7ZS5tb3ZlVG8oMCxyKjIpLGUubGluZVRvKC1WZXQqciwtciksZS5saW5lVG8oVmV0KnIsLXIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBFYyxUYyxxZXQsTExlLEE3LEdldD1NKCgpPT57RWM9LS41LFRjPU1hdGguc3FydCgzKS8yLHFldD0xL01hdGguc3FydCgxMiksTExlPShxZXQvMisxKSozLEE3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvTExlKSxuPXIvMixpPXIqcWV0LG89bixhPXIqcWV0K3Iscz0tbyxsPWE7ZS5tb3ZlVG8obixpKSxlLmxpbmVUbyhvLGEpLGUubGluZVRvKHMsbCksZS5saW5lVG8oRWMqbi1UYyppLFRjKm4rRWMqaSksZS5saW5lVG8oRWMqby1UYyphLFRjKm8rRWMqYSksZS5saW5lVG8oRWMqcy1UYypsLFRjKnMrRWMqbCksZS5saW5lVG8oRWMqbitUYyppLEVjKmktVGMqbiksZS5saW5lVG8oRWMqbytUYyphLEVjKmEtVGMqbyksZS5saW5lVG8oRWMqcytUYypsLEVjKmwtVGMqcyksZS5jbG9zZVBhdGgoKX19fSk7ZnVuY3Rpb24gTkZ0KCl7dmFyIGU9R2UoUkMpLHQ9R2UoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIGk7aWYocnx8KHI9aT1JdSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiByPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoaSksbik6ZX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoK2kpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6aSxuKTpyfSxufXZhciBSRnQsREZ0PU0oKCk9PntQdygpO09ldCgpO3pldCgpO0ZldCgpO0JldCgpO0hldCgpO1VldCgpO0dldCgpO09nKCk7UkZ0PVtSQyxTNyxNNyxUNyxFNyxDNyxBN119KTtmdW5jdGlvbiBDYygpe312YXIgTkM9TSgoKT0+e30pO2Z1bmN0aW9uIE93KGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqZS5feDArZS5feDEpLzMsKDIqZS5feTArZS5feTEpLzMsKGUuX3gwKzIqZS5feDEpLzMsKGUuX3kwKzIqZS5feTEpLzMsKGUuX3gwKzQqZS5feDErdCkvNiwoZS5feTArNCplLl95MStyKS82KX1mdW5jdGlvbiBEQyhlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gT0Z0KGUpe3JldHVybiBuZXcgREMoZSl9dmFyIE9DPU0oKCk9PntEQy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk93KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIHpGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRkZ0KGUpe3JldHVybiBuZXcgekZ0KGUpfXZhciBCRnQ9TSgoKT0+e05DKCk7T0MoKTt6RnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIEhGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gVkZ0KGUpe3JldHVybiBuZXcgSEZ0KGUpfXZhciBVRnQ9TSgoKT0+e09DKCk7SEZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MSt0KS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T3codGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19fSk7ZnVuY3Rpb24gcUZ0KGUsdCl7dGhpcy5fYmFzaXM9bmV3IERDKGUpLHRoaXMuX2JldGE9dH12YXIgR0Z0LFdGdD1NKCgpPT57T0MoKTtxRnQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj1lWzBdLGk9dFswXSxvPWVbcl0tbixhPXRbcl0taSxzPS0xLGw7KytzPD1yOylsPXMvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmVbc10rKDEtdGhpcy5fYmV0YSkqKG4rbCpvKSx0aGlzLl9iZXRhKnRbc10rKDEtdGhpcy5fYmV0YSkqKGkrbCphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O0dGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ9PT0xP25ldyBEQyhuKTpuZXcgcUZ0KG4sdCl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC44NSl9KTtmdW5jdGlvbiB6dyhlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFA3KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn12YXIgWUZ0LHpDPU0oKCk9PntQNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6encodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtZRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgUDcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBJNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIGpGdCxXZXQ9TSgoKT0+e05DKCk7ekMoKTtJNy5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtqRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgSTcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBMNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIFhGdCxZZXQ9TSgoKT0+e3pDKCk7TDcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6encodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBMNyhuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKX0pO2Z1bmN0aW9uIEZDKGUsdCxyKXt2YXIgbj1lLl94MSxpPWUuX3kxLG89ZS5feDIsYT1lLl95MjtpZihlLl9sMDFfYT5Dbyl7dmFyIHM9MiplLl9sMDFfMmErMyplLl9sMDFfYSplLl9sMTJfYStlLl9sMTJfMmEsbD0zKmUuX2wwMV9hKihlLl9sMDFfYStlLl9sMTJfYSk7bj0obipzLWUuX3gwKmUuX2wxMl8yYStlLl94MiplLl9sMDFfMmEpL2wsaT0oaSpzLWUuX3kwKmUuX2wxMl8yYStlLl95MiplLl9sMDFfMmEpL2x9aWYoZS5fbDIzX2E+Q28pe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLHU9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO289KG8qYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL3UsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1yKmUuX2wxMl8yYSkvdX1lLl9jb250ZXh0LmJlemllckN1cnZlVG8obixpLG8sYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gJEZ0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIEtGdCxrNz1NKCgpPT57SXcoKTt6QygpOyRGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OkZDKHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07S0Z0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgJEZ0KG4sdCk6bmV3IFA3KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSl9KTtmdW5jdGlvbiBaRnQoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH12YXIgSkZ0LFFGdD1NKCgpPT57V2V0KCk7TkMoKTtrNygpO1pGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O0pGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IFpGdChuLHQpOm5ldyBJNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gdEJ0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIGVCdCxyQnQ9TSgoKT0+e1lldCgpO2s3KCk7dEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O2VCdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHRCdChuLHQpOm5ldyBMNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gbkJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBpQnQoZSl7cmV0dXJuIG5ldyBuQnQoZSl9dmFyIG9CdD1NKCgpPT57TkMoKTtuQnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0LHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSl9fX0pO2Z1bmN0aW9uIGFCdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gc0J0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKGFCdChvKSthQnQoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBsQnQoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGpldChlLHQscil7dmFyIG49ZS5feDAsaT1lLl95MCxvPWUuX3gxLGE9ZS5feTEscz0oby1uKS8zO2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK3MsaStzKnQsby1zLGEtcypyLG8sYSl9ZnVuY3Rpb24gUjcoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIGNCdChlKXt0aGlzLl9jb250ZXh0PW5ldyB1QnQoZSl9ZnVuY3Rpb24gdUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBoQnQoZSl7cmV0dXJuIG5ldyBSNyhlKX1mdW5jdGlvbiBmQnQoZSl7cmV0dXJuIG5ldyBjQnQoZSl9dmFyIHBCdD1NKCgpPT57UjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmpldCh0aGlzLHRoaXMuX3QwLGxCdCh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3ZhciByPU5hTjtpZihlPStlLHQ9K3QsIShlPT09dGhpcy5feDEmJnQ9PT10aGlzLl95MSkpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsamV0KHRoaXMsbEJ0KHRoaXMscj1zQnQodGhpcyxlLHQpKSxyKTticmVhaztkZWZhdWx0OmpldCh0aGlzLHRoaXMuX3QwLHI9c0J0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07KGNCdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSNy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihlLHQpe1I3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsdCxlKX07dUJ0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQsZSxuLHIsbyxpKX19fSk7ZnVuY3Rpb24gbUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBkQnQoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBnQnQoZSl7cmV0dXJuIG5ldyBtQnQoZSl9dmFyIF9CdD1NKCgpPT57bUJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3gsdD10aGlzLl95LHI9ZS5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGVbMF0sdFswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZVswXSx0WzBdKSxyPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhlWzFdLHRbMV0pO2Vsc2UgZm9yKHZhciBuPWRCdChlKSxpPWRCdCh0KSxvPTAsYT0xO2E8cjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW29dLGlbMF1bb10sblsxXVtvXSxpWzFdW29dLGVbYV0sdFthXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5feC5wdXNoKCtlKSx0aGlzLl95LnB1c2goK3QpfX19KTtmdW5jdGlvbiBONyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl90PXR9ZnVuY3Rpb24geUJ0KGUpe3JldHVybiBuZXcgTjcoZSwuNSl9ZnVuY3Rpb24gdkJ0KGUpe3JldHVybiBuZXcgTjcoZSwwKX1mdW5jdGlvbiB4QnQoZSl7cmV0dXJuIG5ldyBONyhlLDEpfXZhciBiQnQ9TSgoKT0+e043LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fX0pO2Z1bmN0aW9uIFJ1KGUsdCl7aWYoKGE9ZS5sZW5ndGgpPjEpZm9yKHZhciByPTEsbixpLG89ZVt0WzBdXSxhLHM9by5sZW5ndGg7cjxhOysrcilmb3IoaT1vLG89ZVt0W3JdXSxuPTA7bjxzOysrbilvW25dWzFdKz1vW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX12YXIgRnc9TSgoKT0+e30pO2Z1bmN0aW9uIE51KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn12YXIgQnc9TSgoKT0+e30pO2Z1bmN0aW9uIGtMZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIHdCdCgpe3ZhciBlPUdlKFtdKSx0PU51LHI9UnUsbj1rTGU7ZnVuY3Rpb24gaShvKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzLGw9by5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoO2ZvcihzPTA7czxjOysrcyl7Zm9yKHZhciBmPWFbc10scD11W3NdPW5ldyBBcnJheShsKSxkPTAsZztkPGw7KytkKXBbZF09Zz1bMCwrbihvW2RdLGYsZCxvKV0sZy5kYXRhPW9bZF07cC5rZXk9Zn1mb3Iocz0wLGg9dCh1KTtzPGM7KytzKXVbaFtzXV0uaW5kZXg9cztyZXR1cm4gcih1LGgpLHV9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkdlKGtDLmNhbGwobykpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpHZSgrbyksaSk6bn0saS5vcmRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vPT1udWxsP051OnR5cGVvZiBvPT0iZnVuY3Rpb24iP286R2Uoa0MuY2FsbChvKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bz09bnVsbD9SdTpvLGkpOnJ9LGl9dmFyIFNCdD1NKCgpPT57TmV0KCk7T2coKTtGdygpO0J3KCl9KTtmdW5jdGlvbiBNQnQoZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saT0wLG89ZVswXS5sZW5ndGgsYTtpPG87KytpKXtmb3IoYT1yPTA7cjxuOysrcilhKz1lW3JdW2ldWzFdfHwwO2lmKGEpZm9yKHI9MDtyPG47KytyKWVbcl1baV1bMV0vPWF9UnUoZSx0KX19dmFyIEVCdD1NKCgpPT57RncoKX0pO2Z1bmN0aW9uIFRCdChlLHQpe2lmKChsPWUubGVuZ3RoKT4xKWZvcih2YXIgcixuPTAsaSxvLGEscyxsLGM9ZVt0WzBdXS5sZW5ndGg7bjxjOysrbilmb3IoYT1zPTAscj0wO3I8bDsrK3IpKG89KGk9ZVt0W3JdXVtuXSlbMV0taVswXSk+PTA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6aVswXT1hfXZhciBDQnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFCdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfVJ1KGUsdCl9fXZhciBQQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBJQnQoZSx0KXtpZighKCEoKGE9ZS5sZW5ndGgpPjApfHwhKChvPShpPWVbdFswXV0pLmxlbmd0aCk+MCkpKXtmb3IodmFyIHI9MCxuPTEsaSxvLGE7bjxvOysrbil7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGE7KytzKXtmb3IodmFyIHU9ZVt0W3NdXSxoPXVbbl1bMV18fDAsZj11W24tMV1bMV18fDAscD0oaC1mKS8yLGQ9MDtkPHM7KytkKXt2YXIgZz1lW3RbZF1dLF89Z1tuXVsxXXx8MCx5PWdbbi0xXVsxXXx8MDtwKz1fLXl9bCs9aCxjKz1wKmh9aVtuLTFdWzFdKz1pW24tMV1bMF09cixsJiYoci09Yy9sKX1pW24tMV1bMV0rPWlbbi0xXVswXT1yLFJ1KGUsdCl9fXZhciBMQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBENyhlKXt2YXIgdD1lLm1hcChYZXQpO3JldHVybiBOdShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIFhldChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9dmFyIE83PU0oKCk9PntCdygpfSk7ZnVuY3Rpb24ga0J0KGUpe3JldHVybiBENyhlKS5yZXZlcnNlKCl9dmFyIFJCdD1NKCgpPT57TzcoKX0pO2Z1bmN0aW9uIE5CdChlKXt2YXIgdD1lLmxlbmd0aCxyLG4saT1lLm1hcChYZXQpLG89TnUoZSkuc29ydChmdW5jdGlvbih1LGgpe3JldHVybiBpW2hdLWlbdV19KSxhPTAscz0wLGw9W10sYz1bXTtmb3Iocj0wO3I8dDsrK3Ipbj1vW3JdLGE8cz8oYSs9aVtuXSxsLnB1c2gobikpOihzKz1pW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX12YXIgREJ0PU0oKCk9PntCdygpO083KCl9KTtmdW5jdGlvbiBPQnQoZSl7cmV0dXJuIE51KGUpLnJldmVyc2UoKX12YXIgekJ0PU0oKCk9PntCdygpfSk7dmFyIEZCdD1NKCgpPT57X0Z0KCk7QWV0KCk7eDcoKTtNRnQoKTtURnQoKTtMZXQoKTtSZXQoKTtJRnQoKTtERnQoKTtPZXQoKTt6ZXQoKTtGZXQoKTtIZXQoKTtCZXQoKTtVZXQoKTtHZXQoKTtCRnQoKTtVRnQoKTtPQygpO1dGdCgpO1dldCgpO1lldCgpO3pDKCk7UUZ0KCk7ckJ0KCk7azcoKTtvQnQoKTtMQygpO3BCdCgpO19CdCgpO2JCdCgpO1NCdCgpO0VCdCgpO0NCdCgpO0Z3KCk7UEJ0KCk7TEJ0KCk7TzcoKTtSQnQoKTtEQnQoKTtCdygpO3pCdCgpfSk7ZnVuY3Rpb24gU3IoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIFNyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gJGV0LnNldFRpbWUoK28pLEtldC5zZXRUaW1lKCthKSxlKCRldCksZShLZXQpLE1hdGguZmxvb3IocigkZXQsS2V0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyICRldCxLZXQsZmE9TSgoKT0+eyRldD1uZXcgRGF0ZSxLZXQ9bmV3IERhdGV9KTt2YXIgejcsWmV0LEpldCxCQnQ9TSgoKT0+e2ZhKCk7ejc9U3IoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTt6Ny5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP1NyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOno3fTtaZXQ9ejcsSmV0PXo3LnJhbmdlfSk7dmFyIEJDLFBzLGJmLEY3LEI3LHdmPU0oKCk9PntCQz0xZTMsUHM9NmU0LGJmPTM2ZTUsRjc9ODY0ZTUsQjc9NjA0OGU1fSk7dmFyIEhCdCxRZXQsdHJ0LFZCdD1NKCgpPT57ZmEoKTt3ZigpO0hCdD1TcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL0JDKSpCQyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqQkMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0JDfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRZXQ9SEJ0LHRydD1IQnQucmFuZ2V9KTt2YXIgVUJ0LHFCdCxHQnQsV0J0PU0oKCk9PntmYSgpO3dmKCk7VUJ0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvUHMpKlBzKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpQcyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvUHN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLHFCdD1VQnQsR0J0PVVCdC5yYW5nZX0pO3ZhciBZQnQsakJ0LFhCdCwkQnQ9TSgoKT0+e2ZhKCk7d2YoKTtZQnQ9U3IoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpKlBzJWJmO3Q8MCYmKHQrPWJmKSxlLnNldFRpbWUoTWF0aC5mbG9vcigoK2UtdCkvYmYpKmJmK3QpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLGpCdD1ZQnQsWEJ0PVlCdC5yYW5nZX0pO3ZhciBLQnQsWkJ0LEpCdCxRQnQ9TSgoKT0+e2ZhKCk7d2YoKTtLQnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqUHMpL0Y3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFpCdD1LQnQsSkJ0PUtCdC5yYW5nZX0pO2Z1bmN0aW9uIHB2KGUpe3JldHVybiBTcihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlBzKS9CN30pfXZhciBINyxlcnQscnJ0LG5ydCxpcnQsb3J0LGFydCxzcnQsdEh0LGVIdCxySHQsbkh0LGlIdCxvSHQsYUh0PU0oKCk9PntmYSgpO3dmKCk7SDc9cHYoMCksZXJ0PXB2KDEpLHJydD1wdigyKSxucnQ9cHYoMyksaXJ0PXB2KDQpLG9ydD1wdig1KSxhcnQ9cHYoNiksc3J0PUg3LnJhbmdlLHRIdD1lcnQucmFuZ2UsZUh0PXJydC5yYW5nZSxySHQ9bnJ0LnJhbmdlLG5IdD1pcnQucmFuZ2UsaUh0PW9ydC5yYW5nZSxvSHQ9YXJ0LnJhbmdlfSk7dmFyIHNIdCxsSHQsY0h0LHVIdD1NKCgpPT57ZmEoKTtzSHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCkrKHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSksbEh0PXNIdCxjSHQ9c0h0LnJhbmdlfSk7dmFyIGxydCxoSHQsZkh0LHBIdD1NKCgpPT57ZmEoKTtscnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTtscnQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOlNyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTtoSHQ9bHJ0LGZIdD1scnQucmFuZ2V9KTt2YXIgZEh0LG1IdCxnSHQsX0h0PU0oKCk9PntmYSgpO3dmKCk7ZEh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KlBzKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9Qc30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSksbUh0PWRIdCxnSHQ9ZEh0LnJhbmdlfSk7dmFyIHlIdCx2SHQseEh0LGJIdD1NKCgpPT57ZmEoKTt3ZigpO3lIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLHZIdD15SHQseEh0PXlIdC5yYW5nZX0pO3ZhciB3SHQsU0h0LE1IdCxFSHQ9TSgoKT0+e2ZhKCk7d2YoKTt3SHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvRjd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksU0h0PXdIdCxNSHQ9d0h0LnJhbmdlfSk7ZnVuY3Rpb24gZHYoZSl7cmV0dXJuIFNyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvQjd9KX12YXIgVjcsY3J0LHVydCxocnQsZnJ0LHBydCxkcnQsbXJ0LFRIdCxDSHQsQUh0LFBIdCxJSHQsTEh0LGtIdD1NKCgpPT57ZmEoKTt3ZigpO1Y3PWR2KDApLGNydD1kdigxKSx1cnQ9ZHYoMiksaHJ0PWR2KDMpLGZydD1kdig0KSxwcnQ9ZHYoNSksZHJ0PWR2KDYpLG1ydD1WNy5yYW5nZSxUSHQ9Y3J0LnJhbmdlLENIdD11cnQucmFuZ2UsQUh0PWhydC5yYW5nZSxQSHQ9ZnJ0LnJhbmdlLElIdD1wcnQucmFuZ2UsTEh0PWRydC5yYW5nZX0pO3ZhciBSSHQsTkh0LERIdCxPSHQ9TSgoKT0+e2ZhKCk7Ukh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLE5IdD1SSHQsREh0PVJIdC5yYW5nZX0pO3ZhciBncnQsekh0LEZIdCxCSHQ9TSgoKT0+e2ZhKCk7Z3J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSk7Z3J0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpTcihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07ekh0PWdydCxGSHQ9Z3J0LnJhbmdlfSk7dmFyIEhIdD1NKCgpPT57ZmEoKTtCQnQoKTtWQnQoKTtXQnQoKTskQnQoKTtRQnQoKTthSHQoKTt1SHQoKTtwSHQoKTtfSHQoKTtiSHQoKTtFSHQoKTtrSHQoKTtPSHQoKTtCSHQoKX0pO2Z1bmN0aW9uIHBhKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHBhKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gX3J0LnNldFRpbWUoK28pLHlydC5zZXRUaW1lKCthKSxlKF9ydCksZSh5cnQpLE1hdGguZmxvb3IocihfcnQseXJ0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIF9ydCx5cnQsbXY9TSgoKT0+e19ydD1uZXcgRGF0ZSx5cnQ9bmV3IERhdGV9KTt2YXIgVTcscTcsRzcsSEM9TSgoKT0+e1U3PTZlNCxxNz04NjRlNSxHNz02MDQ4ZTV9KTt2YXIgVkh0LFc3LFJMZSxVSHQ9TSgoKT0+e212KCk7SEMoKTtWSHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL3E3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFc3PVZIdCxSTGU9Vkh0LnJhbmdlfSk7ZnVuY3Rpb24gZ3YoZSl7cmV0dXJuIHBhKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL0c3fSl9dmFyIFZDLEh3LHFIdCxHSHQsVncsV0h0LFlIdCxqSHQsTkxlLERMZSxPTGUsekxlLEZMZSxCTGUsWEh0PU0oKCk9PnttdigpO0hDKCk7VkM9Z3YoMCksSHc9Z3YoMSkscUh0PWd2KDIpLEdIdD1ndigzKSxWdz1ndig0KSxXSHQ9Z3YoNSksWUh0PWd2KDYpLGpIdD1WQy5yYW5nZSxOTGU9SHcucmFuZ2UsRExlPXFIdC5yYW5nZSxPTGU9R0h0LnJhbmdlLHpMZT1Wdy5yYW5nZSxGTGU9V0h0LnJhbmdlLEJMZT1ZSHQucmFuZ2V9KTt2YXIgdnJ0LF92LEhMZSwkSHQ9TSgoKT0+e212KCk7dnJ0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7dnJ0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpwYShmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07X3Y9dnJ0LEhMZT12cnQucmFuZ2V9KTt2YXIgS0h0LFk3LFZMZSxaSHQ9TSgoKT0+e212KCk7SEMoKTtLSHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvcTd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksWTc9S0h0LFZMZT1LSHQucmFuZ2V9KTtmdW5jdGlvbiB5dihlKXtyZXR1cm4gcGEoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctZSklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10KS9HN30pfXZhciBVQyxVdyxKSHQsUUh0LHF3LHRWdCxlVnQsclZ0LFVMZSxxTGUsR0xlLFdMZSxZTGUsakxlLG5WdD1NKCgpPT57bXYoKTtIQygpO1VDPXl2KDApLFV3PXl2KDEpLEpIdD15digyKSxRSHQ9eXYoMykscXc9eXYoNCksdFZ0PXl2KDUpLGVWdD15dig2KSxyVnQ9VUMucmFuZ2UsVUxlPVV3LnJhbmdlLHFMZT1KSHQucmFuZ2UsR0xlPVFIdC5yYW5nZSxXTGU9cXcucmFuZ2UsWUxlPXRWdC5yYW5nZSxqTGU9ZVZ0LnJhbmdlfSk7dmFyIHhydCx2dixYTGUsaVZ0PU0oKCk9PnttdigpO3hydD1wYShmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO3hydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6cGEoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3Z2PXhydCxYTGU9eHJ0LnJhbmdlfSk7dmFyIG9WdD1NKCgpPT57VUh0KCk7WEh0KCk7JEh0KCk7Wkh0KCk7blZ0KCk7aVZ0KCl9KTtmdW5jdGlvbiAkTGUoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGo3KGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHFDKGUpe3JldHVybnt5OmUsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlDKGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPUdDKGkpLHU9V0MoaSksaD1HQyhvKSxmPVdDKG8pLHA9R0MoYSksZD1XQyhhKSxnPUdDKHMpLF89V0MocykseT1HQyhsKSx4PVdDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOmNWdCxlOmNWdCxmOnZrZSxIOmdrZSxJOl9rZSxqOnlrZSxMOmRWdCxtOnhrZSxNOmJrZSxwOnN0LFE6ZlZ0LHM6cFZ0LFM6d2tlLHU6U2tlLFU6TWtlLFY6RWtlLHc6VGtlLFc6Q2tlLHg6bnVsbCxYOm51bGwseTpBa2UsWTpQa2UsWjpJa2UsIiUiOmhWdH0sUz17YTpTdCxBOmJ0LGI6TXQsQjpsdCxjOm51bGwsZDp1VnQsZTp1VnQsZjpOa2UsSDpMa2UsSTpra2UsajpSa2UsTDptVnQsbTpEa2UsTTpPa2UscDpLdCxROmZWdCxzOnBWdCxTOnprZSx1OkZrZSxVOkJrZSxWOkhrZSx3OlZrZSxXOlVrZSx4Om51bGwsWDpudWxsLHk6cWtlLFk6R2tlLFo6V2tlLCIlIjpoVnR9LEM9e2E6QixBOkksYjpMLEI6UixjOkYsZDpzVnQsZTpzVnQsZjpma2UsSDpsVnQsSTpsVnQsajpsa2UsTDpoa2UsbTpza2UsTTpja2UscDpELFE6ZGtlLHM6bWtlLFM6dWtlLHU6dGtlLFU6ZWtlLFY6cmtlLHc6UUxlLFc6bmtlLHg6eixYOlUseTpva2UsWTppa2UsWjpha2UsIiUiOnBrZX07Yi54PVAocixiKSxiLlg9UChuLGIpLGIuYz1QKHQsYiksUy54PVAocixTKSxTLlg9UChuLFMpLFMuYz1QKHQsUyk7ZnVuY3Rpb24gUChfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1bXSxkdD0tMSxxPTAscHQ9X3QubGVuZ3RoLGh0LHd0LGt0O2ZvcihYIGluc3RhbmNlb2YgRGF0ZXx8KFg9bmV3IERhdGUoK1gpKTsrK2R0PHB0OylfdC5jaGFyQ29kZUF0KGR0KT09PTM3JiYoZXQucHVzaChfdC5zbGljZShxLGR0KSksKHd0PWFWdFtodD1fdC5jaGFyQXQoKytkdCldKSE9bnVsbD9odD1fdC5jaGFyQXQoKytkdCk6d3Q9aHQ9PT0iZSI/IiAiOiIwIiwoa3Q9Y3RbaHRdKSYmKGh0PWt0KFgsd3QpKSxldC5wdXNoKGh0KSxxPWR0KzEpO3JldHVybiBldC5wdXNoKF90LnNsaWNlKHEsZHQpKSxldC5qb2luKCIiKX19ZnVuY3Rpb24gayhfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1xQygxOTAwKSxkdD1PKGV0LF90LFgrPSIiLDApLHEscHQ7aWYoZHQhPVgubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGV0KXJldHVybiBuZXcgRGF0ZShldC5RKTtpZigicCJpbiBldCYmKGV0Lkg9ZXQuSCUxMitldC5wKjEyKSwiViJpbiBldCl7aWYoZXQuVjwxfHxldC5WPjUzKXJldHVybiBudWxsOyJ3ImluIGV0fHwoZXQudz0xKSwiWiJpbiBldD8ocT1qNyhxQyhldC55KSkscHQ9cS5nZXRVVENEYXkoKSxxPXB0PjR8fHB0PT09MD9Vdy5jZWlsKHEpOlV3KHEpLHE9WTcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldFVUQ0Z1bGxZZWFyKCksZXQubT1xLmdldFVUQ01vbnRoKCksZXQuZD1xLmdldFVUQ0RhdGUoKSsoZXQudys2KSU3KToocT1jdChxQyhldC55KSkscHQ9cS5nZXREYXkoKSxxPXB0PjR8fHB0PT09MD9Idy5jZWlsKHEpOkh3KHEpLHE9Vzcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldEZ1bGxZZWFyKCksZXQubT1xLmdldE1vbnRoKCksZXQuZD1xLmdldERhdGUoKSsoZXQudys2KSU3KX1lbHNlKCJXImluIGV0fHwiVSJpbiBldCkmJigidyJpbiBldHx8KGV0Lnc9InUiaW4gZXQ/ZXQudSU3OiJXImluIGV0PzE6MCkscHQ9IloiaW4gZXQ/ajcocUMoZXQueSkpLmdldFVUQ0RheSgpOmN0KHFDKGV0LnkpKS5nZXREYXkoKSxldC5tPTAsZXQuZD0iVyJpbiBldD8oZXQudys2KSU3K2V0LlcqNy0ocHQrNSklNzpldC53K2V0LlUqNy0ocHQrNiklNyk7cmV0dXJuIloiaW4gZXQ/KGV0LkgrPWV0LlovMTAwfDAsZXQuTSs9ZXQuWiUxMDAsajcoZXQpKTpjdChldCl9fWZ1bmN0aW9uIE8oX3QsY3QsWCxldCl7Zm9yKHZhciBkdD0wLHE9Y3QubGVuZ3RoLHB0PVgubGVuZ3RoLGh0LHd0O2R0PHE7KXtpZihldD49cHQpcmV0dXJuLTE7aWYoaHQ9Y3QuY2hhckNvZGVBdChkdCsrKSxodD09PTM3KXtpZihodD1jdC5jaGFyQXQoZHQrKyksd3Q9Q1todCBpbiBhVnQ/Y3QuY2hhckF0KGR0KyspOmh0XSwhd3R8fChldD13dChfdCxYLGV0KSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1YLmNoYXJDb2RlQXQoZXQrKykpcmV0dXJuLTF9cmV0dXJuIGV0fWZ1bmN0aW9uIEQoX3QsY3QsWCl7dmFyIGV0PWMuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5wPXVbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEIoX3QsY3QsWCl7dmFyIGV0PXAuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWRbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEkoX3QsY3QsWCl7dmFyIGV0PWguZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWZbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoX3QsY3QsWCl7dmFyIGV0PXkuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPXhbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIoX3QsY3QsWCl7dmFyIGV0PWcuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPV9bZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEYoX3QsY3QsWCl7cmV0dXJuIE8oX3QsdCxjdCxYKX1mdW5jdGlvbiB6KF90LGN0LFgpe3JldHVybiBPKF90LHIsY3QsWCl9ZnVuY3Rpb24gVShfdCxjdCxYKXtyZXR1cm4gTyhfdCxuLGN0LFgpfWZ1bmN0aW9uIFcoX3Qpe3JldHVybiBhW190LmdldERheSgpXX1mdW5jdGlvbiBaKF90KXtyZXR1cm4gb1tfdC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoX3Qpe3JldHVybiBsW190LmdldE1vbnRoKCldfWZ1bmN0aW9uIG90KF90KXtyZXR1cm4gc1tfdC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChfdCl7cmV0dXJuIGlbKyhfdC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KF90KXtyZXR1cm4gYVtfdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gYnQoX3Qpe3JldHVybiBvW190LmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChfdCl7cmV0dXJuIGxbX3QuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbHQoX3Qpe3JldHVybiBzW190LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KF90KXtyZXR1cm4gaVsrKF90LmdldFVUQ0hvdXJzKCk+PTEyKV19cmV0dXJue2Zvcm1hdDpmdW5jdGlvbihfdCl7dmFyIGN0PVAoX3QrPSIiLGIpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9LHBhcnNlOmZ1bmN0aW9uKF90KXt2YXIgY3Q9ayhfdCs9IiIsJExlKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1QKF90Kz0iIixTKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNQYXJzZTpmdW5jdGlvbihfdCl7dmFyIGN0PWsoX3QsajcpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9fX1mdW5jdGlvbiBnbihlLHQscil7dmFyIG49ZTwwPyItIjoiIixpPShuPy1lOmUpKyIiLG89aS5sZW5ndGg7cmV0dXJuIG4rKG88cj9uZXcgQXJyYXkoci1vKzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiBKTGUoZSl7cmV0dXJuIGUucmVwbGFjZShaTGUsIlxcJCYiKX1mdW5jdGlvbiBHQyhlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAoSkxlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV0MoZSl7Zm9yKHZhciB0PXt9LHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdFtlW3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIHR9ZnVuY3Rpb24gUUxlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBla2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5rZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNCkpO3JldHVybiBuPyhlLnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYWtlKGUsdCxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzVnQoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbGtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxWdChlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBja2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBma2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcGtlKGUsdCxyKXt2YXIgbj1LTGUuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBka2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBta2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSoxZTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gZ2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIF9rZShlLHQpe3JldHVybiBnbihlLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24geWtlKGUsdCl7cmV0dXJuIGduKDErVzcuY291bnQoX3YoZSksZSksdCwzKX1mdW5jdGlvbiBkVnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHZrZShlLHQpe3JldHVybiBkVnQoZSx0KSsiMDAwIn1mdW5jdGlvbiB4a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBia2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiB3a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBTa2UoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1rZShlLHQpe3JldHVybiBnbihWQy5jb3VudChfdihlKSxlKSx0LDIpfWZ1bmN0aW9uIEVrZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/VncoZSk6VncuY2VpbChlKSxnbihWdy5jb3VudChfdihlKSxlKSsoX3YoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIFRrZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBDa2UoZSx0KXtyZXR1cm4gZ24oSHcuY291bnQoX3YoZSksZSksdCwyKX1mdW5jdGlvbiBBa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFBrZShlLHQpe3JldHVybiBnbihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSWtlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrZ24odC82MHwwLCIwIiwyKStnbih0JTYwLCIwIiwyKX1mdW5jdGlvbiB1VnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBMa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24ga2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBSa2UoZSx0KXtyZXR1cm4gZ24oMStZNy5jb3VudCh2dihlKSxlKSx0LDMpfWZ1bmN0aW9uIG1WdChlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gTmtlKGUsdCl7cmV0dXJuIG1WdChlLHQpKyIwMDAifWZ1bmN0aW9uIERrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIE9rZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHprZShlLHQpe3JldHVybiBnbihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIEZrZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gQmtlKGUsdCl7cmV0dXJuIGduKFVDLmNvdW50KHZ2KGUpLGUpLHQsMil9ZnVuY3Rpb24gSGtlKGUsdCl7dmFyIHI9ZS5nZXRVVENEYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD9xdyhlKTpxdy5jZWlsKGUpLGduKHF3LmNvdW50KHZ2KGUpLGUpKyh2dihlKS5nZXRVVENEYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gVmtlKGUpe3JldHVybiBlLmdldFVUQ0RheSgpfWZ1bmN0aW9uIFVrZShlLHQpe3JldHVybiBnbihVdy5jb3VudCh2dihlKSxlKSx0LDIpfWZ1bmN0aW9uIHFrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gR2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBXa2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGhWdCgpe3JldHVybiIlIn1mdW5jdGlvbiBmVnQoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gcFZ0KGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9dmFyIGFWdCxWbyxLTGUsWkxlLGJydD1NKCgpPT57b1Z0KCk7YVZ0PXsiLSI6IiIsXzoiICIsMDoiMCJ9LFZvPS9eXHMqXGQrLyxLTGU9L14lLyxaTGU9L1tcXF4kKis/fFtcXSgpLnt9XS9nfSk7ZnVuY3Rpb24gWDcoZSl7cmV0dXJuIEd3PVlDKGUpLHdydD1Hdy5mb3JtYXQsU3J0PUd3LnBhcnNlLGpDPUd3LnV0Y0Zvcm1hdCxYQz1Hdy51dGNQYXJzZSxHd312YXIgR3csd3J0LFNydCxqQyxYQywkNz1NKCgpPT57YnJ0KCk7WDcoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KX0pO2Z1bmN0aW9uIFlrZShlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfXZhciBNcnQsamtlLGdWdCxFcnQ9TSgoKT0+eyQ3KCk7TXJ0PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiO2prZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9Za2U6akMoTXJ0KSxnVnQ9amtlfSk7ZnVuY3Rpb24gWGtlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyICRrZSxfVnQseVZ0PU0oKCk9PntFcnQoKTskNygpOyRrZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP1hrZTpYQyhNcnQpLF9WdD0ka2V9KTt2YXIgdlZ0PU0oKCk9PnskNygpO2JydCgpO0VydCgpO3lWdCgpfSk7ZnVuY3Rpb24gWXcoKXtyZXR1cm4geHZ8fCh3VnQoS2tlKSx4dj1KQy5ub3coKStKNyl9ZnVuY3Rpb24gS2tlKCl7eHY9MH1mdW5jdGlvbiBidigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gQ3J0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBBcnQoKXtZdygpLCsrV3c7Zm9yKHZhciBlPUs3LHQ7ZTspKHQ9eHYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLVd3fWZ1bmN0aW9uIHhWdCgpe3h2PShaNz1KQy5ub3coKSkrSjcsV3c9S0M9MDt0cnl7QXJ0KCl9ZmluYWxseXtXdz0wLEprZSgpLHh2PTB9fWZ1bmN0aW9uIFprZSgpe3ZhciBlPUpDLm5vdygpLHQ9ZS1aNzt0PmJWdCYmKEo3LT10LFo3PWUpfWZ1bmN0aW9uIEprZSgpe2Zvcih2YXIgZSx0PUs3LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOks3PXIpO1pDPWUsVHJ0KG4pfWZ1bmN0aW9uIFRydChlKXtpZighV3cpe0tDJiYoS0M9Y2xlYXJUaW1lb3V0KEtDKSk7dmFyIHQ9ZS14djt0PjI0PyhlPDEvMCYmKEtDPXNldFRpbWVvdXQoeFZ0LGUtSkMubm93KCktSjcpKSwkQyYmKCRDPWNsZWFySW50ZXJ2YWwoJEMpKSk6KCRDfHwoWjc9SkMubm93KCksJEM9c2V0SW50ZXJ2YWwoWmtlLGJWdCkpLFd3PTEsd1Z0KHhWdCkpfX12YXIgV3csS0MsJEMsYlZ0LEs3LFpDLFo3LHh2LEo3LEpDLHdWdCxRNz1NKCgpPT57V3c9MCxLQz0wLCRDPTAsYlZ0PTFlMyxaNz0wLHh2PTAsSjc9MCxKQz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx3VnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07YnYucHJvdG90eXBlPUNydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmJ2LHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9ZdygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmWkMhPT10aGlzJiYoWkM/WkMuX25leHQ9dGhpczpLNz10aGlzLFpDPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsVHJ0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFRydCgpKX19fSk7ZnVuY3Rpb24gU1Z0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgTVZ0PU0oKCk9PntRNygpfSk7ZnVuY3Rpb24gRVZ0KGUsdCxyKXt2YXIgbj1uZXcgYnYsaT10O3JldHVybiB0PT1udWxsPyhuLnJlc3RhcnQoZSx0LHIpLG4pOih0PSt0LHI9cj09bnVsbD9ZdygpOityLG4ucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPWksbi5yZXN0YXJ0KG8saSs9dCxyKSxlKGEpfSx0LHIpLG4pfXZhciBUVnQ9TSgoKT0+e1E3KCl9KTt2YXIgQ1Z0PU0oKCk9PntRNygpO01WdCgpO1RWdCgpfSk7dmFyIHR6LFBydCxJcnQ9TSgoKT0+e3R6PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixQcnQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnR6LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBsZChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxQcnQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOlBydFt0XSxsb2NhbDplfTplfXZhciBlej1NKCgpPT57SXJ0KCl9KTtmdW5jdGlvbiBRa2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT10eiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09dHo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHQ4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiByeihlKXt2YXIgdD1sZChlKTtyZXR1cm4odC5sb2NhbD90OGU6UWtlKSh0KX12YXIgTHJ0PU0oKCk9PntleigpO0lydCgpfSk7ZnVuY3Rpb24gZThlKCl7fWZ1bmN0aW9uIHd2KGUpe3JldHVybiBlPT1udWxsP2U4ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBuej1NKCgpPT57fSk7ZnVuY3Rpb24gQVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT13dihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IG5vKG4sdGhpcy5fcGFyZW50cyl9dmFyIFBWdD1NKCgpPT57U2YoKTtueigpfSk7ZnVuY3Rpb24gcjhlKCl7cmV0dXJuW119ZnVuY3Rpb24gUUMoZSl7cmV0dXJuIGU9PW51bGw/cjhlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIGtydD1NKCgpPT57fSk7ZnVuY3Rpb24gSVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1RQyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgbm8obixpKX12YXIgTFZ0PU0oKCk9PntTZigpO2tydCgpfSk7ZnVuY3Rpb24gdEEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIFJydD1NKCgpPT57fSk7ZnVuY3Rpb24ga1Z0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgbm8obix0aGlzLl9wYXJlbnRzKX12YXIgUlZ0PU0oKCk9PntTZigpO1JydCgpfSk7ZnVuY3Rpb24gaXooZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9dmFyIE5ydD1NKCgpPT57fSk7ZnVuY3Rpb24gTlZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChpeiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gZUEoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIERydD1NKCgpPT57TnJ0KCk7U2YoKTtlQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGUpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChlKX19fSk7ZnVuY3Rpb24gRFZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgT1Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiBuOGUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IGVBKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiBpOGUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD16VnQrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD16VnQrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgZUEoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBGVnQoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P2k4ZTpuOGUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1EVnQoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IG5vKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX12YXIgelZ0LEJWdD1NKCgpPT57U2YoKTtEcnQoKTtPVnQoKTt6VnQ9IiQifSk7ZnVuY3Rpb24gSFZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGl6KSx0aGlzLl9wYXJlbnRzKX12YXIgVlZ0PU0oKCk9PntOcnQoKTtTZigpfSk7ZnVuY3Rpb24gVVZ0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBxVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdWdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgbm8oYSx0aGlzLl9wYXJlbnRzKX12YXIgV1Z0PU0oKCk9PntTZigpfSk7ZnVuY3Rpb24gWVZ0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgalZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYVnQoZSl7ZXx8KGU9bzhlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IG5vKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBvOGUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyICRWdD1NKCgpPT57U2YoKX0pO2Z1bmN0aW9uIEtWdCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgWlZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKVnQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgUVZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB0VXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBlVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJVdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIG5VdD1NKCgpPT57fSk7ZnVuY3Rpb24gaVV0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBvVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFVdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHNVdD1NKCgpPT57fSk7ZnVuY3Rpb24gYThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBzOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBsOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBjOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gdThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBoOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gbFV0KGUsdCl7dmFyIHI9bGQoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP3M4ZTphOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9oOGU6dThlOnIubG9jYWw/YzhlOmw4ZSkocix0KSl9dmFyIGNVdD1NKCgpPT57ZXooKX0pO2Z1bmN0aW9uIG96KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgT3J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBmOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gcDhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gZDhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIHVVdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/ZjhlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP2Q4ZTpwOGUpKGUsdCxyPT1udWxsPyIiOnIpKTpCZyh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBCZyhlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fG96KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB6cnQ9TSgoKT0+e09ydCgpfSk7ZnVuY3Rpb24gbThlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBnOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIF84ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBoVXQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9tOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/XzhlOmc4ZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIGZVdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFV0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBGcnQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgZFV0KGUpfWZ1bmN0aW9uIGRVdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9cFV0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gbVV0KGUsdCl7Zm9yKHZhciByPUZydChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIGdVdChlLHQpe2Zvcih2YXIgcj1GcnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiB5OGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7bVV0KHRoaXMsZSl9fWZ1bmN0aW9uIHY4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtnVXQodGhpcyxlKX19ZnVuY3Rpb24geDhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP21VdDpnVXQpKHRoaXMsZSl9fWZ1bmN0aW9uIF9VdChlLHQpe3ZhciByPXBVdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1GcnQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/eDhlOnQ/eThlOnY4ZSkocix0KSl9dmFyIHlVdD1NKCgpPT57ZFV0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIGI4ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gdzhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gUzhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiB2VXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/YjhlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9TOGU6dzhlKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIHhVdD1NKCgpPT57fSk7ZnVuY3Rpb24gTThlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gRThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIFQ4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGJVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9NOGU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1Q4ZTpFOGUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIHdVdD1NKCgpPT57fSk7ZnVuY3Rpb24gQzhlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIFNVdCgpe3JldHVybiB0aGlzLmVhY2goQzhlKX12YXIgTVV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBBOGUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBFVXQoKXtyZXR1cm4gdGhpcy5lYWNoKEE4ZSl9dmFyIFRVdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ1V0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6cnooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIEFVdD1NKCgpPT57THJ0KCl9KTtmdW5jdGlvbiBQOGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBQVXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOnJ6KGUpLG49dD09bnVsbD9QOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp3dih0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIElVdD1NKCgpPT57THJ0KCk7bnooKX0pO2Z1bmN0aW9uIEk4ZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIExVdCgpe3JldHVybiB0aGlzLmVhY2goSThlKX12YXIga1V0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMOGUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIGs4ZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gUlV0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP2s4ZTpMOGUpfXZhciBOVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIERVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIE9VdD1NKCgpPT57fSk7ZnVuY3Rpb24gUjhlKGUsdCxyKXtyZXR1cm4gZT1CVXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gQlV0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9QnJ0O0JydD1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtCcnQ9aX19fWZ1bmN0aW9uIE44ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gRDhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIE84ZShlLHQscil7dmFyIG49RlV0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UjhlOkJVdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBIVXQoZSx0LHIpe3ZhciBuPU44ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/TzhlOkQ4ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc312YXIgRlV0LEJydCx6VXQsVlV0PU0oKCk9PntGVXQ9e30sQnJ0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKHpVdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiB6VXR8fChGVXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gVVV0KGUsdCxyKXt2YXIgbj1veihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiB6OGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVVV0KHRoaXMsZSx0KX19ZnVuY3Rpb24gRjhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFVVdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBxVXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9GOGU6ejhlKShlLHQpKX12YXIgR1V0PU0oKCk9PntPcnQoKX0pO2Z1bmN0aW9uIG5vKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFdVdCgpe3JldHVybiBuZXcgbm8oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxCOGUpfXZhciBCOGUsY2QsU2Y9TSgoKT0+e1BWdCgpO0xWdCgpO1JWdCgpO0JWdCgpO0RydCgpO1ZWdCgpO3FWdCgpO1dWdCgpO2pWdCgpOyRWdCgpO1pWdCgpO1FWdCgpO2VVdCgpO25VdCgpO29VdCgpO3NVdCgpO2NVdCgpO3pydCgpO2ZVdCgpO3lVdCgpO3hVdCgpO3dVdCgpO01VdCgpO1RVdCgpO0FVdCgpO0lVdCgpO2tVdCgpO05VdCgpO09VdCgpO1ZVdCgpO0dVdCgpO0I4ZT1bbnVsbF07bm8ucHJvdG90eXBlPVdVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5vLHNlbGVjdDpBVnQsc2VsZWN0QWxsOklWdCxmaWx0ZXI6a1Z0LGRhdGE6RlZ0LGVudGVyOk5WdCxleGl0OkhWdCxqb2luOlVWdCxtZXJnZTpHVnQsb3JkZXI6WVZ0LHNvcnQ6WFZ0LGNhbGw6S1Z0LG5vZGVzOkpWdCxub2RlOnRVdCxzaXplOnJVdCxlbXB0eTppVXQsZWFjaDphVXQsYXR0cjpsVXQsc3R5bGU6dVV0LHByb3BlcnR5OmhVdCxjbGFzc2VkOl9VdCx0ZXh0OnZVdCxodG1sOmJVdCxyYWlzZTpTVXQsbG93ZXI6RVV0LGFwcGVuZDpDVXQsaW5zZXJ0OlBVdCxyZW1vdmU6TFV0LGNsb25lOlJVdCxkYXR1bTpEVXQsb246SFV0LGRpc3BhdGNoOnFVdH07Y2Q9V1V0fSk7dmFyIE1mPU0oKCk9PntScnQoKTtleigpO1NmKCk7bnooKTtrcnQoKTt6cnQoKX0pO2Z1bmN0aW9uIGpVdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBheihyKX1mdW5jdGlvbiBheihlKXt0aGlzLl89ZX1mdW5jdGlvbiBWOGUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBVOGUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBZVXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPUg4ZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIEg4ZSxIcnQsWFV0PU0oKCk9PntIOGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07YXoucHJvdG90eXBlPWpVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF6LG9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fLG49VjhlKGUrIiIsciksaSxvPS0xLGE9bi5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrbzxhOylpZigoaT0oZT1uW29dKS50eXBlKSYmKGk9VThlKHJbaV0sZS5uYW1lKSkpcmV0dXJuIGk7cmV0dXJufWlmKHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxhOylpZihpPShlPW5bb10pLnR5cGUpcltpXT1ZVXQocltpXSxlLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihpIGluIHIpcltpXT1ZVXQocltpXSxlLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgZT17fSx0PXRoaXMuXztmb3IodmFyIHIgaW4gdCllW3JdPXRbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IGF6KGUpfSxjYWxsOmZ1bmN0aW9uKGUsdCl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcj1uZXcgQXJyYXkoaSksbj0wLGksbztuPGk7KytuKXJbbl09YXJndW1lbnRzW24rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3Iobz10aGlzLl9bZV0sbj0wLGk9by5sZW5ndGg7bjxpOysrbilvW25dLnZhbHVlLmFwcGx5KHQscil9LGFwcGx5OmZ1bmN0aW9uKGUsdCxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2Zvcih2YXIgbj10aGlzLl9bZV0saT0wLG89bi5sZW5ndGg7aTxvOysraSluW2ldLnZhbHVlLmFwcGx5KHQscil9fTtIcnQ9alV0fSk7dmFyICRVdD1NKCgpPT57WFV0KCl9KTtmdW5jdGlvbiBYdygpe3JldHVybiBTdnx8KEpVdChxOGUpLFN2PW9BLm5vdygpK2N6KX1mdW5jdGlvbiBxOGUoKXtTdj0wfWZ1bmN0aW9uIGFBKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1eihlLHQscil7dmFyIG49bmV3IGFBO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gUVV0KCl7WHcoKSwrK2p3O2Zvcih2YXIgZT1zeix0O2U7KSh0PVN2LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1qd31mdW5jdGlvbiBLVXQoKXtTdj0obHo9b0Eubm93KCkpK2N6LGp3PW5BPTA7dHJ5e1FVdCgpfWZpbmFsbHl7anc9MCxXOGUoKSxTdj0wfX1mdW5jdGlvbiBHOGUoKXt2YXIgZT1vQS5ub3coKSx0PWUtbHo7dD5aVXQmJihjei09dCxsej1lKX1mdW5jdGlvbiBXOGUoKXtmb3IodmFyIGUsdD1zeixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpzej1yKTtpQT1lLFZydChuKX1mdW5jdGlvbiBWcnQoZSl7aWYoIWp3KXtuQSYmKG5BPWNsZWFyVGltZW91dChuQSkpO3ZhciB0PWUtU3Y7dD4yND8oZTwxLzAmJihuQT1zZXRUaW1lb3V0KEtVdCxlLW9BLm5vdygpLWN6KSksckEmJihyQT1jbGVhckludGVydmFsKHJBKSkpOihyQXx8KGx6PW9BLm5vdygpLHJBPXNldEludGVydmFsKEc4ZSxaVXQpKSxqdz0xLEpVdChLVXQpKX19dmFyIGp3LG5BLHJBLFpVdCxzeixpQSxseixTdixjeixvQSxKVXQsVXJ0PU0oKCk9Pntqdz0wLG5BPTAsckE9MCxaVXQ9MWUzLGx6PTAsU3Y9MCxjej0wLG9BPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLEpVdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTthQS5wcm90b3R5cGU9dXoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphQSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/WHcoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmlBIT09dGhpcyYmKGlBP2lBLl9uZXh0PXRoaXM6c3o9dGhpcyxpQT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLFZydCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxWcnQoKSl9fX0pO2Z1bmN0aW9uIGh6KGUsdCxyKXt2YXIgbj1uZXcgYUE7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgdHF0PU0oKCk9PntVcnQoKX0pO3ZhciBxcnQ9TSgoKT0+e1VydCgpO3RxdCgpfSk7ZnVuY3Rpb24gSGcoZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtYOGUoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlk4ZSx0d2VlbjpqOGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6cnF0fSl9ZnVuY3Rpb24gY0EoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+cnF0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gRHUoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+bEEpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaW8oZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBYOGUoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9dXoobywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPWZ6LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09ZnopcmV0dXJuIGwoKTtmb3IodSBpbiBuKWlmKHA9blt1XSxwLm5hbWU9PT1yLm5hbWUpe2lmKHAuc3RhdGU9PT1HcnQpcmV0dXJuIGh6KGEpO3Auc3RhdGU9PT1lcXQ/KHAuc3RhdGU9c0EscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1zQSxwLnRpbWVyLnN0b3AoKSxkZWxldGUgblt1XSl9aWYoaHooZnVuY3Rpb24oKXtyLnN0YXRlPT09R3J0JiYoci5zdGF0ZT1lcXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1sQSxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09bEEpe2ZvcihyLnN0YXRlPUdydCxpPW5ldyBBcnJheShmPXIudHdlZW4ubGVuZ3RoKSx1PTAsaD0tMTt1PGY7Kyt1KShwPXIudHdlZW5bdV0udmFsdWUuY2FsbChlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysraF09cCk7aS5sZW5ndGg9aCsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT1jPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxjL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQobCksci5zdGF0ZT1weiwxKSxoPS0xLGY9aS5sZW5ndGg7KytoPGY7KWlbaF0uY2FsbChudWxsLHUpO3Iuc3RhdGU9PT1weiYmKHIub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtyLnN0YXRlPXNBLHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW3RdO2Zvcih2YXIgYyBpbiBuKXJldHVybjtkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBZOGUsajhlLHJxdCxmeixsQSxHcnQsZXF0LHB6LHNBLEFjPU0oKCk9PnskVXQoKTtxcnQoKTtZOGU9SHJ0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLGo4ZT1bXSxycXQ9MCxmej0xLGxBPTIsR3J0PTMsZXF0PTQscHo9NSxzQT02fSk7ZnVuY3Rpb24gZHooZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+bEEmJm4uc3RhdGU8cHosbi5zdGF0ZT1zQSxuLnRpbWVyLnN0b3AoKSxpJiZuLm9uLmNhbGwoImludGVycnVwdCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgV3J0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gbnF0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkeih0aGlzLGUpfSl9dmFyIGlxdD1NKCgpPT57V3J0KCl9KTtmdW5jdGlvbiBteihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gWXJ0KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfXZhciBvcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZBKCl7fWZ1bmN0aW9uIHNxdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIHJSZSgpe3JldHVybiBwcXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gbHF0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVmcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9JDhlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/Y3F0KHQpOnI9PT0zP25ldyBtbCh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/Z3oodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/Z3oodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1LOGUuZXhlYyhlKSk/bmV3IG1sKHRbMV0sdFsyXSx0WzNdLDEpOih0PVo4ZS5leGVjKGUpKT9uZXcgbWwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SjhlLmV4ZWMoZSkpP2d6KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PVE4ZS5leGVjKGUpKT9neih0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD10UmUuZXhlYyhlKSk/ZnF0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9ZVJlLmV4ZWMoZSkpP2ZxdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFxdC5oYXNPd25Qcm9wZXJ0eShlKT9jcXQoYXF0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgbWwoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBjcXQoZSl7cmV0dXJuIG5ldyBtbChlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gZ3ooZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBtbChlLHQscixuKX1mdW5jdGlvbiBuUmUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBmQXx8KGU9VmcoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgbWwoZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IG1sfWZ1bmN0aW9uIEt3KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9uUmUoZSk6bmV3IG1sKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBtbChlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gdXF0KCl7cmV0dXJuIiMiK2pydCh0aGlzLnIpK2pydCh0aGlzLmcpK2pydCh0aGlzLmIpfWZ1bmN0aW9uIGhxdCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBqcnQoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gZnF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgRWYoZSx0LHIsbil9ZnVuY3Rpb24gcHF0KGUpe2lmKGUgaW5zdGFuY2VvZiBFZilyZXR1cm4gbmV3IEVmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGZBfHwoZT1WZyhlKSksIWUpcmV0dXJuIG5ldyBFZjtpZihlIGluc3RhbmNlb2YgRWYpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgRWYoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBkcXQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BxdChlKTpuZXcgRWYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEVmKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYcnQoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIHVBLF96LCR3LGhBLFRmLCQ4ZSxLOGUsWjhlLEo4ZSxROGUsdFJlLGVSZSxhcXQsbXF0PU0oKCk9PntvcXQoKTt1QT0uNyxfej0xL3VBLCR3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixoQT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixUZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsJDhlPS9eIyhbMC05YS1mXXszLDh9KSQvLEs4ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbJHcsJHcsJHddKyJcXCkkIiksWjhlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tUZixUZixUZl0rIlxcKSQiKSxKOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skdywkdywkdyxoQV0rIlxcKSQiKSxROGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tUZixUZixUZixoQV0rIlxcKSQiKSx0UmU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2hBLFRmLFRmXSsiXFwpJCIpLGVSZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2hBLFRmLFRmLGhBXSsiXFwpJCIpLGFxdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtteihmQSxWZyx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpzcXQsZm9ybWF0SGV4OnNxdCxmb3JtYXRIc2w6clJlLGZvcm1hdFJnYjpscXQsdG9TdHJpbmc6bHF0fSk7bXoobWwsS3csWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBtbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91QTpNYXRoLnBvdyh1QSxlKSxuZXcgbWwodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDp1cXQsZm9ybWF0SGV4OnVxdCxmb3JtYXRSZ2I6aHF0LHRvU3RyaW5nOmhxdH0pKTtteihFZixkcXQsWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3VBOk1hdGgucG93KHVBLGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IG1sKFhydChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxYcnQoZSxpLG4pLFhydChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciAkcnQ9TSgoKT0+e21xdCgpfSk7ZnVuY3Rpb24gS3J0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gZ3F0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBLcnQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgWnJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfcXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBLcnQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgeXF0PU0oKCk9PntacnQoKX0pO2Z1bmN0aW9uIEpydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHZxdD1NKCgpPT57fSk7ZnVuY3Rpb24gaVJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gb1JlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24geHF0KGUpe3JldHVybihlPStlKT09MT95ejpmdW5jdGlvbih0LHIpe3JldHVybiByLXQ/b1JlKHQscixlKTpKcnQoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24geXooZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/aVJlKGUscik6SnJ0KGlzTmFOKGUpP3Q6ZSl9dmFyIGJxdD1NKCgpPT57dnF0KCl9KTtmdW5jdGlvbiB3cXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1Ldyh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgdnosYVJlLHNSZSxTcXQ9TSgoKT0+eyRydCgpO1pydCgpO3lxdCgpO2JxdCgpO3Z6PWZ1bmN0aW9uIGUodCl7dmFyIHI9eHF0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPUt3KGkpKS5yLChvPUt3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9eXooaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO2FSZT13cXQoZ3F0KSxzUmU9d3F0KF9xdCl9KTtmdW5jdGlvbiBQYyhlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIGUqKDEtcikrdCpyfX12YXIgeHo9TSgoKT0+e30pO2Z1bmN0aW9uIGxSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gY1JlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19ZnVuY3Rpb24gZW50KGUsdCl7dmFyIHI9dG50Lmxhc3RJbmRleD1RcnQubGFzdEluZGV4PTAsbixpLG8sYT0tMSxzPVtdLGw9W107Zm9yKGU9ZSsiIix0PXQrIiI7KG49dG50LmV4ZWMoZSkpJiYoaT1RcnQuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlBjKG4saSl9KSkscj1RcnQubGFzdEluZGV4O3JldHVybiByPHQubGVuZ3RoJiYobz10LnNsaWNlKHIpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP2NSZShsWzBdLngpOmxSZSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHU9MCxoO3U8dDsrK3Upc1soaD1sW3VdKS5pXT1oLngoYyk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgdG50LFFydCxNcXQ9TSgoKT0+e3h6KCk7dG50PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRcnQ9bmV3IFJlZ0V4cCh0bnQuc291cmNlLCJnIil9KTtmdW5jdGlvbiBybnQoZSx0LHIsbixpLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQoZSplK3QqdCkpJiYoZS89YSx0Lz1hKSwobD1lKnIrdCpuKSYmKHItPWUqbCxuLT10KmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksZSpuPHQqciYmKGU9LWUsdD0tdCxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsZSkqRXF0LHNrZXdYOk1hdGguYXRhbihsKSpFcXQsc2NhbGVYOmEsc2NhbGVZOnN9fXZhciBFcXQsYnosVHF0PU0oKCk9PntFcXQ9MTgwL01hdGguUEksYno9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX19KTtmdW5jdGlvbiBBcXQoZSl7cmV0dXJuIGU9PT0ibm9uZSI/Yno6KHBBfHwocEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbm50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxDcXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHBBLnN0eWxlLnRyYW5zZm9ybT1lLGU9Q3F0LmdldENvbXB1dGVkU3R5bGUobm50LmFwcGVuZENoaWxkKHBBKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxubnQucmVtb3ZlQ2hpbGQocEEpLGU9ZS5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHJudCgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIFBxdChlKXtyZXR1cm4gZT09bnVsbD9iejood3p8fCh3ej1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx3ei5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9d3oudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgscm50KGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6YnopfXZhciBwQSxubnQsQ3F0LHd6LElxdD1NKCgpPT57VHF0KCl9KTtmdW5jdGlvbiBMcXQoZSx0LHIsbil7ZnVuY3Rpb24gaShjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbyhjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLHIpO2QucHVzaCh7aTpnLTQseDpQYyhjLGgpfSx7aTpnLTIseDpQYyh1LGYpfSl9ZWxzZShofHxmKSYmcC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZityKX1mdW5jdGlvbiBhKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKGkoaCkrInJvdGF0ZSgiLG51bGwsbiktMix4OlBjKGMsdSl9KSk6dSYmaC5wdXNoKGkoaCkrInJvdGF0ZSgiK3Urbil9ZnVuY3Rpb24gcyhjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKGkoaCkrInNrZXdYKCIsbnVsbCxuKS0yLHg6UGMoYyx1KX0pOnUmJmgucHVzaChpKGgpKyJza2V3WCgiK3Urbil9ZnVuY3Rpb24gbChjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goaShwKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ZC5wdXNoKHtpOmctNCx4OlBjKGMsaCl9LHtpOmctMix4OlBjKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJnAucHVzaChpKHApKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPWUoYyksdT1lKHUpLG8oYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksYShjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLHMoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0tMSxnPWYubGVuZ3RoLF87KytkPGc7KWhbKF89ZltkXSkuaV09Xy54KHApO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGludCxvbnQsa3F0PU0oKCk9Pnt4eigpO0lxdCgpO2ludD1McXQoQXF0LCJweCwgIiwicHgpIiwiZGVnKSIpLG9udD1McXQoUHF0LCIsICIsIikiLCIpIil9KTt2YXIgU3o9TSgoKT0+e3h6KCk7TXF0KCk7a3F0KCk7U3F0KCl9KTtmdW5jdGlvbiB1UmUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUR1KHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBoUmUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUR1KHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFJxdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWlvKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3VSZTpoUmUpKHIsZSx0KSl9ZnVuY3Rpb24gWncoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1EdSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIGlvKGksbikudmFsdWVbdF19fXZhciBkQT1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE16KGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9QYzp0IGluc3RhbmNlb2YgVmc/dno6KHI9VmcodCkpPyh0PXIsdnopOmVudCkoZSx0KX12YXIgYW50PU0oKCk9PnskcnQoKTtTeigpfSk7ZnVuY3Rpb24gZlJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBwUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBkUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUoZSk7cmV0dXJuIG89PT1yP251bGw6bz09PW4/aTppPXQobj1vLHIpfX1mdW5jdGlvbiBtUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gZ1JlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSksYT09PXM/bnVsbDphPT09biYmcz09PWk/bzpvPXQobj1hLGk9cykpfX1mdW5jdGlvbiBfUmUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpLGE9PT1zP251bGw6YT09PW4mJnM9PT1pP286bz10KG49YSxpPXMpKX19ZnVuY3Rpb24gTnF0KGUsdCl7dmFyIHI9bGQoZSksbj1yPT09InRyYW5zZm9ybSI/b250Ok16O3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP19SZTpnUmUpKHIsbixadyh0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9wUmU6ZlJlKShyKTooci5sb2NhbD9tUmU6ZFJlKShyLG4sdCsiIikpfXZhciBEcXQ9TSgoKT0+e1N6KCk7TWYoKTtkQSgpO2FudCgpfSk7ZnVuY3Rpb24geVJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsaShvKSl9fXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gdlJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGUoZSxpKG8pKX19cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBPcXQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPWxkKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/eVJlOnZSZSkobix0KSl9dmFyIHpxdD1NKCgpPT57TWYoKX0pO2Z1bmN0aW9uIHhSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBiUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gRnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/eFJlOmJSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIEJxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHdSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBTUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gSHF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/d1JlOlNSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIFZxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE1SZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gVXF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChNUmUodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZWFzZX12YXIgcXF0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gR3F0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBXcXQ9TSgoKT0+e01mKCk7dWQoKX0pO2Z1bmN0aW9uIFlxdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgVW8oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBqcXQ9TSgoKT0+e3VkKCl9KTtmdW5jdGlvbiBFUmUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBUUmUoZSx0LHIpe3ZhciBuLGksbz1FUmUodCk/Y0E6RHU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gWHF0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pbyh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goVFJlKHIsZSx0KSl9dmFyICRxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIENSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gS3F0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLENSZSh0aGlzLl9pZCkpfXZhciBacXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEpxdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXd2KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsSGcoY1tmXSx0LHIsZixjLGlvKHUscikpKTtyZXR1cm4gbmV3IFVvKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBRcXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gdEd0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9aW8odSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZIZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IFVvKG8sYSx0LHIpfXZhciBlR3Q9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gckd0KCl7cmV0dXJuIG5ldyBBUmUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBBUmUsbkd0PU0oKCk9PntNZigpO0FSZT1jZC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBQUmUoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QmcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gSVJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIExSZShlLHQscil7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CZyh0aGlzLGUpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24ga1JlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9QmcodGhpcyxlKSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGwmJihzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpKSxhPT09cz9udWxsOmE9PT1uJiZzPT09aT9vOm89dChuPWEsaT1zKX19ZnVuY3Rpb24gaUd0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9pbnQ6TXo7cmV0dXJuIHQ9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGUsUFJlKGUsbikpLm9uKCJlbmQuc3R5bGUuIitlLElSZShlKSk6dGhpcy5zdHlsZVR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/a1JlKGUsbixadyh0aGlzLCJzdHlsZS4iK2UsdCkpOkxSZShlLG4sdCsiIikscil9dmFyIG9HdD1NKCgpPT57U3ooKTtNZigpO2RBKCk7YW50KCl9KTtmdW5jdGlvbiBSUmUoZSx0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgaT10aGlzLG89dC5hcHBseShpLGFyZ3VtZW50cyk7cmV0dXJuIG8mJmZ1bmN0aW9uKGEpe2kuc3R5bGUuc2V0UHJvcGVydHkoZSxvKGEpLHIpfX1yZXR1cm4gbi5fdmFsdWU9dCxufWZ1bmN0aW9uIGFHdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixSUmUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBzR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIE5SZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIERSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBsR3QoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0RSZShadyh0aGlzLCJ0ZXh0IixlKSk6TlJlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBjR3Q9TSgoKT0+e2RBKCl9KTtmdW5jdGlvbiB1R3QoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9RXooKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PWlvKGwsdCk7SGcobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgaEd0PU0oKCk9Pnt1ZCgpO0FjKCl9KTtmdW5jdGlvbiBVbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gVHooZSl7cmV0dXJuIGNkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBFeigpe3JldHVybisrT1JlfXZhciBPUmUsSncsdWQ9TSgoKT0+e01mKCk7RHF0KCk7enF0KCk7QnF0KCk7VnF0KCk7cXF0KCk7V3F0KCk7anF0KCk7JHF0KCk7WnF0KCk7UXF0KCk7ZUd0KCk7bkd0KCk7b0d0KCk7c0d0KCk7Y0d0KCk7aEd0KCk7ZEEoKTtPUmU9MDtKdz1jZC5wcm90b3R5cGU7VW8ucHJvdG90eXBlPVR6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VW8sc2VsZWN0OkpxdCxzZWxlY3RBbGw6dEd0LGZpbHRlcjpHcXQsbWVyZ2U6WXF0LHNlbGVjdGlvbjpyR3QsdHJhbnNpdGlvbjp1R3QsY2FsbDpKdy5jYWxsLG5vZGVzOkp3Lm5vZGVzLG5vZGU6Sncubm9kZSxzaXplOkp3LnNpemUsZW1wdHk6SncuZW1wdHksZWFjaDpKdy5lYWNoLG9uOlhxdCxhdHRyOk5xdCxhdHRyVHdlZW46T3F0LHN0eWxlOmlHdCxzdHlsZVR3ZWVuOmFHdCx0ZXh0OmxHdCxyZW1vdmU6S3F0LHR3ZWVuOlJxdCxkZWxheTpGcXQsZHVyYXRpb246SHF0LGVhc2U6VXF0fX0pO2Z1bmN0aW9uIHpSZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBzbnQudGltZT1YdygpLHNudDtyZXR1cm4gcn1mdW5jdGlvbiBmR3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgVW8/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1FeigpLChyPXNudCkudGltZT1YdygpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkhnKGwsZSx0LGMsYSxyfHx6UmUobCx0KSk7cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSx0KX12YXIgc250LHBHdD1NKCgpPT57dWQoKTtBYygpO0lfKCk7cXJ0KCk7c250PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTp4c319KTt2YXIgZEd0PU0oKCk9PntNZigpO2lxdCgpO3BHdCgpO2NkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9bnF0O2NkLnByb3RvdHlwZS50cmFuc2l0aW9uPWZHdH0pO2Z1bmN0aW9uIG1HdChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+ZnomJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBVbyhbW2VdXSxGUmUsdCwraSl9cmV0dXJuIG51bGx9dmFyIEZSZSxnR3Q9TSgoKT0+e3VkKCk7QWMoKTtGUmU9W251bGxdfSk7dmFyIF9HdD1NKCgpPT57ZEd0KCk7dWQoKTtnR3QoKTtXcnQoKX0pO2Z1bmN0aW9uIGxudChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHlHdD1NKCgpPT57fSk7ZnVuY3Rpb24gdkd0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIHhHdChlKXtyZXR1cm4gZVsxXX12YXIgYkd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjbnQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBRdyhlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfWZ1bmN0aW9uIG1BKGUsdCl7dmFyIHI9dCxuPXQuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBnQShlLHQpe3ZhciByPXQsbj10LkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24gd0d0KGUpe2Zvcig7ZS5MOyllPWUuTDtyZXR1cm4gZX12YXIgdW50LEN6PU0oKCk9PntjbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjbnQsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT13R3QodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQscj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LHI9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9cix0LkM9ITAsZT10O3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5SJiYobUEodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsZ0EodGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLGU9bik6KGU9PT1yLkwmJihnQSh0aGlzLHIpLGU9cixyPWUuVSksci5DPSExLG4uQz0hMCxtQSh0aGlzLG4pKSkscj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0PWUuVSxyLG49ZS5MLGk9ZS5SLG8sYTtpZihuP2k/bz13R3QoaSk6bz1uOm89aSx0P3QuTD09PWU/dC5MPW86dC5SPW86dGhpcy5fPW8sbiYmaT8oYT1vLkMsby5DPWUuQyxvLkw9bixuLlU9byxvIT09aT8odD1vLlUsby5VPWUuVSxlPW8uUix0Lkw9ZSxvLlI9aSxpLlU9byk6KG8uVT10LHQ9byxlPW8uUikpOihhPWUuQyxlPW8pLGUmJihlLlU9dCksIWEpe2lmKGUmJmUuQyl7ZS5DPSExO3JldHVybn1kb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT10Lkwpe2lmKHI9dC5SLHIuQyYmKHIuQz0hMSx0LkM9ITAsbUEodGhpcyx0KSxyPXQuUiksci5MJiZyLkwuQ3x8ci5SJiZyLlIuQyl7KCFyLlJ8fCFyLlIuQykmJihyLkwuQz0hMSxyLkM9ITAsZ0EodGhpcyxyKSxyPXQuUiksci5DPXQuQyx0LkM9ci5SLkM9ITEsbUEodGhpcyx0KSxlPXRoaXMuXzticmVha319ZWxzZSBpZihyPXQuTCxyLkMmJihyLkM9ITEsdC5DPSEwLGdBKHRoaXMsdCkscj10LkwpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5MfHwhci5MLkMpJiYoci5SLkM9ITEsci5DPSEwLG1BKHRoaXMscikscj10LkwpLHIuQz10LkMsdC5DPXIuTC5DPSExLGdBKHRoaXMsdCksZT10aGlzLl87YnJlYWt9ci5DPSEwLGU9dCx0PXQuVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fTt1bnQ9Y250fSk7ZnVuY3Rpb24gdFMoZSx0LHIsbil7dmFyIGk9W251bGwsbnVsbF0sbz1Bby5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD1lLGkucmlnaHQ9dCxyJiZfQShpLGUsdCxyKSxuJiZfQShpLHQsZSxuKSxaYVtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxaYVt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIGVTKGUsdCxyKXt2YXIgbj1bdCxyXTtyZXR1cm4gbi5sZWZ0PWUsbn1mdW5jdGlvbiBfQShlLHQscixuKXshZVswXSYmIWVbMV0/KGVbMF09bixlLmxlZnQ9dCxlLnJpZ2h0PXIpOmUubGVmdD09PXI/ZVsxXT1uOmVbMF09bn1mdW5jdGlvbiBCUmUoZSx0LHIsbixpKXt2YXIgbz1lWzBdLGE9ZVsxXSxzPW9bMF0sbD1vWzFdLGM9YVswXSx1PWFbMV0saD0wLGY9MSxwPWMtcyxkPXUtbCxnO2lmKGc9dC1zLCEoIXAmJmc+MCkpe2lmKGcvPXAscDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihwPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPW4tcywhKCFwJiZnPDApKXtpZihnLz1wLHA8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYocD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9aWYoZz1yLWwsISghZCYmZz4wKSl7aWYoZy89ZCxkPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKGQ+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9aS1sLCEoIWQmJmc8MCkpe2lmKGcvPWQsZDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihkPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1yZXR1cm4hKGg+MCkmJiEoZjwxKXx8KGg+MCYmKGVbMF09W3MraCpwLGwraCpkXSksZjwxJiYoZVsxXT1bcytmKnAsbCtmKmRdKSksITB9fX19fWZ1bmN0aW9uIEhSZShlLHQscixuLGkpe3ZhciBvPWVbMV07aWYobylyZXR1cm4hMDt2YXIgYT1lWzBdLHM9ZS5sZWZ0LGw9ZS5yaWdodCxjPXNbMF0sdT1zWzFdLGg9bFswXSxmPWxbMV0scD0oYytoKS8yLGQ9KHUrZikvMixnLF87aWYoZj09PXUpe2lmKHA8dHx8cD49bilyZXR1cm47aWYoYz5oKXtpZighYSlhPVtwLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bcCxpXX1lbHNle2lmKCFhKWE9W3AsaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289W3Ascl19fWVsc2UgaWYoZz0oYy1oKS8oZi11KSxfPWQtZypwLGc8LTF8fGc+MSlpZihjPmgpe2lmKCFhKWE9WyhyLV8pL2cscl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVsoaS1fKS9nLGldfWVsc2V7aWYoIWEpYT1bKGktXykvZyxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bKHItXykvZyxyXX1lbHNlIGlmKHU8Zil7aWYoIWEpYT1bdCxnKnQrX107ZWxzZSBpZihhWzBdPj1uKXJldHVybjtvPVtuLGcqbitfXX1lbHNle2lmKCFhKWE9W24sZypuK19dO2Vsc2UgaWYoYVswXTx0KXJldHVybjtvPVt0LGcqdCtfXX1yZXR1cm4gZVswXT1hLGVbMV09bywhMH1mdW5jdGlvbiBTR3QoZSx0LHIsbil7Zm9yKHZhciBpPUFvLmxlbmd0aCxvO2ktLTspKCFIUmUobz1Bb1tpXSxlLHQscixuKXx8IUJSZShvLGUsdCxyLG4pfHwhKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+V3J8fE1hdGguYWJzKG9bMF1bMV0tb1sxXVsxXSk+V3IpKSYmZGVsZXRlIEFvW2ldfXZhciBBej1NKCgpPT57clMoKX0pO2Z1bmN0aW9uIE1HdChlKXtyZXR1cm4gWmFbZS5pbmRleF09e3NpdGU6ZSxoYWxmZWRnZXM6W119fWZ1bmN0aW9uIFZSZShlLHQpe3ZhciByPWUuc2l0ZSxuPXQubGVmdCxpPXQucmlnaHQ7cmV0dXJuIHI9PT1pJiYoaT1uLG49ciksaT9NYXRoLmF0YW4yKGlbMV0tblsxXSxpWzBdLW5bMF0pOihyPT09bj8obj10WzFdLGk9dFswXSk6KG49dFswXSxpPXRbMV0pLE1hdGguYXRhbjIoblswXS1pWzBdLGlbMV0tblsxXSkpfWZ1bmN0aW9uIGhudChlLHQpe3JldHVybiB0WysodC5sZWZ0IT09ZS5zaXRlKV19ZnVuY3Rpb24gVVJlKGUsdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1lLnNpdGUpXX1mdW5jdGlvbiBFR3QoKXtmb3IodmFyIGU9MCx0PVphLmxlbmd0aCxyLG4saSxvO2U8dDsrK2UpaWYoKHI9WmFbZV0pJiYobz0obj1yLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlhW2ldPWksc1tpXT1WUmUocixBb1tuW2ldXSk7Zm9yKGEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBzW2NdLXNbbF19KSxpPTA7aTxvOysraSlzW2ldPW5bYVtpXV07Zm9yKGk9MDtpPG87KytpKW5baV09c1tpXX19ZnVuY3Rpb24gVEd0KGUsdCxyLG4pe3ZhciBpPVphLmxlbmd0aCxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyx5PSEwO2ZvcihvPTA7bzxpOysrbylpZihhPVphW29dKXtmb3Iocz1hLnNpdGUsYz1hLmhhbGZlZGdlcyxsPWMubGVuZ3RoO2wtLTspQW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspZD1VUmUoYSxBb1tjW2xdXSksZz1kWzBdLF89ZFsxXSxoPWhudChhLEFvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Xcnx8TWF0aC5hYnMoXy1wKT5XcikmJihjLnNwbGljZShsLDAsQW8ucHVzaChlUyhzLGQsTWF0aC5hYnMoZy1lKTxXciYmbi1fPldyP1tlLE1hdGguYWJzKGYtZSk8V3I/cDpuXTpNYXRoLmFicyhfLW4pPFdyJiZyLWc+V3I/W01hdGguYWJzKHAtbik8V3I/ZjpyLG5dOk1hdGguYWJzKGctcik8V3ImJl8tdD5Xcj9bcixNYXRoLmFicyhmLXIpPFdyP3A6dF06TWF0aC5hYnMoXy10KTxXciYmZy1lPldyP1tNYXRoLmFicyhwLXQpPFdyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9WmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKEFvLnB1c2goZVMocz15LnNpdGUsUCxrKSktMSxBby5wdXNoKGVTKHMsayxPKSktMSxBby5wdXNoKGVTKHMsTyxEKSktMSxBby5wdXNoKGVTKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1aYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBaYVtvXSl9dmFyIGZudD1NKCgpPT57QXooKTtyUygpfSk7ZnVuY3Rpb24gcVJlKCl7UXcodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE12KGUpe3ZhciB0PWUuUCxyPWUuTjtpZighKCF0fHwhcikpe3ZhciBuPXQuc2l0ZSxpPWUuc2l0ZSxvPXIuc2l0ZTtpZihuIT09byl7dmFyIGE9aVswXSxzPWlbMV0sbD1uWzBdLWEsYz1uWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZj0yKihsKmgtYyp1KTtpZighKGY+PS1BR3QpKXt2YXIgcD1sKmwrYypjLGQ9dSp1K2gqaCxnPShoKnAtYypkKS9mLF89KGwqZC11KnApL2YseT1DR3QucG9wKCl8fG5ldyBxUmU7eS5hcmM9ZSx5LnNpdGU9aSx5Lng9ZythLHkueT0oeS5jeT1fK3MpK01hdGguc3FydChnKmcrXypfKSxlLmNpcmNsZT15O2Zvcih2YXIgeD1udWxsLGI9blMuXztiOylpZih5Lnk8Yi55fHx5Lnk9PT1iLnkmJnkueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3g9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7eD1iO2JyZWFrfW5TLmluc2VydCh4LHkpLHh8fChQej15KX19fX1mdW5jdGlvbiBFdihlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwoUHo9dC5OKSxuUy5yZW1vdmUodCksQ0d0LnB1c2godCksUXcodCksZS5jaXJjbGU9bnVsbCl9dmFyIENHdCxQeixwbnQ9TSgoKT0+e0N6KCk7clMoKTtDR3Q9W119KTtmdW5jdGlvbiBHUmUoKXtRdyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gUEd0KGUpe3ZhciB0PUlHdC5wb3AoKXx8bmV3IEdSZTtyZXR1cm4gdC5zaXRlPWUsdH1mdW5jdGlvbiBkbnQoZSl7RXYoZSksVHYucmVtb3ZlKGUpLElHdC5wdXNoKGUpLFF3KGUpfWZ1bmN0aW9uIExHdChlKXt2YXIgdD1lLmNpcmNsZSxyPXQueCxuPXQuY3ksaT1bcixuXSxvPWUuUCxhPWUuTixzPVtlXTtkbnQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPFdyOylvPWwuUCxzLnVuc2hpZnQobCksZG50KGwpLGw9bztzLnVuc2hpZnQobCksRXYobCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKHItYy5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tYy5jaXJjbGUuY3kpPFdyOylhPWMuTixzLnB1c2goYyksZG50KGMpLGM9YTtzLnB1c2goYyksRXYoYyk7dmFyIHU9cy5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1zW2hdLGw9c1toLTFdLF9BKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSxjPXNbdS0xXSxjLmVkZ2U9dFMobC5zaXRlLGMuc2l0ZSxudWxsLGkpLE12KGwpLE12KGMpfWZ1bmN0aW9uIGtHdChlKXtmb3IodmFyIHQ9ZVswXSxyPWVbMV0sbixpLG8sYSxzPVR2Ll87czspaWYobz1SR3QocyxyKS10LG8+V3Ipcz1zLkw7ZWxzZSBpZihhPXQtV1JlKHMsciksYT5Xcil7aWYoIXMuUil7bj1zO2JyZWFrfXM9cy5SfWVsc2V7bz4tV3I/KG49cy5QLGk9cyk6YT4tV3I/KG49cyxpPXMuTik6bj1pPXM7YnJlYWt9TUd0KGUpO3ZhciBsPVBHdChlKTtpZihUdi5pbnNlcnQobixsKSwhKCFuJiYhaSkpe2lmKG49PT1pKXtFdihuKSxpPVBHdChuLnNpdGUpLFR2Lmluc2VydChsLGkpLGwuZWRnZT1pLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSksTXYobiksTXYoaSk7cmV0dXJufWlmKCFpKXtsLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSk7cmV0dXJufUV2KG4pLEV2KGkpO3ZhciBjPW4uc2l0ZSx1PWNbMF0saD1jWzFdLGY9ZVswXS11LHA9ZVsxXS1oLGQ9aS5zaXRlLGc9ZFswXS11LF89ZFsxXS1oLHk9MiooZipfLXAqZykseD1mKmYrcCpwLGI9ZypnK18qXyxTPVsoXyp4LXAqYikveSt1LChmKmItZyp4KS95K2hdO19BKGkuZWRnZSxjLGQsUyksbC5lZGdlPXRTKGMsZSxudWxsLFMpLGkuZWRnZT10UyhlLGQsbnVsbCxTKSxNdihuKSxNdihpKX19ZnVuY3Rpb24gUkd0KGUsdCl7dmFyIHI9ZS5zaXRlLG49clswXSxpPXJbMV0sbz1pLXQ7aWYoIW8pcmV0dXJuIG47dmFyIGE9ZS5QO2lmKCFhKXJldHVybi0xLzA7cj1hLnNpdGU7dmFyIHM9clswXSxsPXJbMV0sYz1sLXQ7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9vLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1vLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gV1JlKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIFJHdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gblsxXT09PXQ/blswXToxLzB9dmFyIElHdCxOR3Q9TSgoKT0+e0N6KCk7Zm50KCk7cG50KCk7QXooKTtyUygpO0lHdD1bXX0pO2Z1bmN0aW9uIFlSZShlLHQscil7cmV0dXJuKGVbMF0tclswXSkqKHRbMV0tZVsxXSktKGVbMF0tdFswXSkqKHJbMV0tZVsxXSl9ZnVuY3Rpb24galJlKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHlBKGUsdCl7dmFyIHI9ZS5zb3J0KGpSZSkucG9wKCksbixpLG87Zm9yKEFvPVtdLFphPW5ldyBBcnJheShlLmxlbmd0aCksVHY9bmV3IHVudCxuUz1uZXcgdW50OzspaWYobz1QeixyJiYoIW98fHJbMV08by55fHxyWzFdPT09by55JiZyWzBdPG8ueCkpKHJbMF0hPT1ufHxyWzFdIT09aSkmJihrR3Qociksbj1yWzBdLGk9clsxXSkscj1lLnBvcCgpO2Vsc2UgaWYobylMR3Qoby5hcmMpO2Vsc2UgYnJlYWs7aWYoRUd0KCksdCl7dmFyIGE9K3RbMF1bMF0scz0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07U0d0KGEscyxsLGMpLFRHdChhLHMsbCxjKX10aGlzLmVkZ2VzPUFvLHRoaXMuY2VsbHM9WmEsVHY9blM9QW89WmE9bnVsbH12YXIgV3IsQUd0LFR2LFphLG5TLEFvLHJTPU0oKCk9PntOR3QoKTtmbnQoKTtwbnQoKTtBeigpO0N6KCk7V3I9MWUtNixBR3Q9MWUtMTI7eUEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5QSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gaG50KHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZZUmUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX19KTtmdW5jdGlvbiBER3QoKXt2YXIgZT12R3QsdD14R3Qscj1udWxsO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIG5ldyB5QShpLm1hcChmdW5jdGlvbihvLGEpe3ZhciBzPVtNYXRoLnJvdW5kKGUobyxhLGkpL1dyKSpXcixNYXRoLnJvdW5kKHQobyxhLGkpL1dyKSpXcl07cmV0dXJuIHMuaW5kZXg9YSxzLmRhdGE9byxzfSkscil9cmV0dXJuIG4ucG9seWdvbnM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkucG9seWdvbnMoKX0sbi5saW5rcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS5saW5rcygpfSxuLnRyaWFuZ2xlcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS50cmlhbmdsZXMoKX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6bG50KCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpsbnQoK2kpLG4pOnR9LG4uZXh0ZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWytpWzBdWzBdLCtpWzBdWzFdXSxbK2lbMV1bMF0sK2lbMV1bMV1dXSxuKTpyJiZbW3JbMF1bMF0sclswXVsxXV0sW3JbMV1bMF0sclsxXVsxXV1dfSxuLnNpemU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbMCwwXSxbK2lbMF0sK2lbMV1dXSxuKTpyJiZbclsxXVswXS1yWzBdWzBdLHJbMV1bMV0tclswXVsxXV19LG59dmFyIE9HdD1NKCgpPT57eUd0KCk7Ykd0KCk7clMoKX0pO3ZhciB6R3Q9TSgoKT0+e09HdCgpfSk7ZnVuY3Rpb24gQkd0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEl6KHIpfWZ1bmN0aW9uIEl6KGUpe3RoaXMuXz1lfWZ1bmN0aW9uICRSZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIEtSZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIEZHdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09WFJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgWFJlLHZBLEhHdD1NKCgpPT57WFJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0l6LnByb3RvdHlwZT1CR3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJeixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPSRSZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPUtSZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Rkd0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Rkd0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBJeihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dkE9Qkd0fSk7dmFyIG1udD1NKCgpPT57SEd0KCl9KTt2YXIgTHosZ250LF9udD1NKCgpPT57THo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGdudD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6THoseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIGhkKGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLGdudC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6Z250W3RdLGxvY2FsOmV9OmV9dmFyIGt6PU0oKCk9PntfbnQoKX0pO2Z1bmN0aW9uIFpSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUx6JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Mej90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gSlJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFJ6KGUpe3ZhciB0PWhkKGUpO3JldHVybih0LmxvY2FsP0pSZTpaUmUpKHQpfXZhciB5bnQ9TSgoKT0+e2t6KCk7X250KCl9KTtmdW5jdGlvbiBRUmUoKXt9ZnVuY3Rpb24gQ3YoZSl7cmV0dXJuIGU9PW51bGw/UVJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIE56PU0oKCk9Pnt9KTtmdW5jdGlvbiBWR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUN2KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgbWkobix0aGlzLl9wYXJlbnRzKX12YXIgVUd0PU0oKCk9PntPdSgpO056KCl9KTtmdW5jdGlvbiB0TmUoKXtyZXR1cm5bXX1mdW5jdGlvbiB4QShlKXtyZXR1cm4gZT09bnVsbD90TmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgdm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBxR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXhBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBtaShuLGkpfXZhciBHR3Q9TSgoKT0+e091KCk7dm50KCl9KTtmdW5jdGlvbiBiQShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX12YXIgeG50PU0oKCk9Pnt9KTtmdW5jdGlvbiBXR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBtaShuLHRoaXMuX3BhcmVudHMpfXZhciBZR3Q9TSgoKT0+e091KCk7eG50KCl9KTtmdW5jdGlvbiBEeihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgYm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBqR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKER6KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB3QShlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH12YXIgd250PU0oKCk9PntibnQoKTtPdSgpO3dBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d0EsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBYR3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciAkR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGVOZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgd0EoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHJOZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPUtHdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPUtHdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB3QShlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFpHdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/ck5lOmVOZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVhHdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgbWkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBLR3QsSkd0PU0oKCk9PntPdSgpO3dudCgpOyRHdCgpO0tHdD0iJCJ9KTtmdW5jdGlvbiBRR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoRHopLHRoaXMuX3BhcmVudHMpfXZhciB0V3Q9TSgoKT0+e2JudCgpO091KCl9KTtmdW5jdGlvbiBlV3QoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIHJXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbld0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBtaShhLHRoaXMuX3BhcmVudHMpfXZhciBpV3Q9TSgoKT0+e091KCl9KTtmdW5jdGlvbiBvV3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBhV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHNXdChlKXtlfHwoZT1uTmUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgbWkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIG5OZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgbFd0PU0oKCk9PntPdSgpfSk7ZnVuY3Rpb24gY1d0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB1V3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGhXdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBmV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHBXdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGRXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbVd0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgZ1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfV3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIHlXdD1NKCgpPT57fSk7ZnVuY3Rpb24gdld0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgeFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBpTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIG9OZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIGFOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIHNOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBsTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIGNOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBiV3QoZSx0KXt2YXIgcj1oZChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/b05lOmlOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP2NOZTpsTmU6ci5sb2NhbD9zTmU6YU5lKShyLHQpKX12YXIgd1d0PU0oKCk9PntreigpfSk7ZnVuY3Rpb24gT3ooZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBTbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBoTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBmTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gU1d0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD91TmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/Zk5lOmhOZSkoZSx0LHI9PW51bGw/IiI6cikpOlVnKHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIFVnKGUsdCl7cmV0dXJuIGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8T3ooZSkuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9dmFyIE1udD1NKCgpPT57U250KCl9KTtmdW5jdGlvbiBwTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIGROZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gbU5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIE1XdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3BOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9tTmU6ZE5lKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgRVd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBUV3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEVudChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBDV3QoZSl9ZnVuY3Rpb24gQ1d0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1UV3QoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBBV3QoZSx0KXtmb3IodmFyIHI9RW50KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gUFd0KGUsdCl7Zm9yKHZhciByPUVudChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGdOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtBV3QodGhpcyxlKX19ZnVuY3Rpb24gX05lKGUpe3JldHVybiBmdW5jdGlvbigpe1BXdCh0aGlzLGUpfX1mdW5jdGlvbiB5TmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/QVd0OlBXdCkodGhpcyxlKX19ZnVuY3Rpb24gSVd0KGUsdCl7dmFyIHI9VFd0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPUVudCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj95TmU6dD9nTmU6X05lKShyLHQpKX12YXIgTFd0PU0oKCk9PntDV3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gdk5lKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB4TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBiTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGtXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD92TmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP2JOZTp4TmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgUld0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3TmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBTTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gTU5lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gTld0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3dOZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/TU5lOlNOZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFTmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gT1d0KCl7cmV0dXJuIHRoaXMuZWFjaChFTmUpfXZhciB6V3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFROZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEZXdCgpe3JldHVybiB0aGlzLmVhY2goVE5lKX12YXIgQld0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIV3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSeihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgVld0PU0oKCk9Pnt5bnQoKX0pO2Z1bmN0aW9uIENOZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFVXdChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6UnooZSksbj10PT1udWxsP0NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkN2KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgcVd0PU0oKCk9Pnt5bnQoKTtOeigpfSk7ZnVuY3Rpb24gQU5lKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gR1d0KCl7cmV0dXJuIHRoaXMuZWFjaChBTmUpfXZhciBXV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFBOZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gSU5lKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBZV3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/SU5lOlBOZSl9dmFyIGpXdD1NKCgpPT57fSk7ZnVuY3Rpb24gWFd0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgJFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMTmUoZSx0LHIpe3JldHVybiBlPUpXdChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBKV3QoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1ZcjtZcj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtZcj1pfX19ZnVuY3Rpb24ga05lKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBSTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gTk5lKGUsdCxyKXt2YXIgbj1aV3QuaGFzT3duUHJvcGVydHkoZS50eXBlKT9MTmU6Sld0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIFFXdChlLHQscil7dmFyIG49a05lKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9OTmU6Uk5lLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFRudChlLHQscixuKXt2YXIgaT1ZcjtlLnNvdXJjZUV2ZW50PVlyLFlyPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtZcj1pfX12YXIgWld0LFlyLEtXdCx6ej1NKCgpPT57Wld0PXt9LFlyPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKEtXdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBLV3R8fChaV3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gdFl0KGUsdCxyKXt2YXIgbj1PeihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBETmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdFl0KHRoaXMsZSx0KX19ZnVuY3Rpb24gT05lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRZdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBlWXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9PTmU6RE5lKShlLHQpKX12YXIgcll0PU0oKCk9PntTbnQoKX0pO2Z1bmN0aW9uIG1pKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG5ZdCgpe3JldHVybiBuZXcgbWkoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxDbnQpfXZhciBDbnQsZmQsT3U9TSgoKT0+e1VHdCgpO0dHdCgpO1lHdCgpO0pHdCgpO3dudCgpO3RXdCgpO3JXdCgpO2lXdCgpO2FXdCgpO2xXdCgpO3VXdCgpO2ZXdCgpO2RXdCgpO2dXdCgpO3lXdCgpO3hXdCgpO3dXdCgpO01udCgpO0VXdCgpO0xXdCgpO1JXdCgpO0RXdCgpO3pXdCgpO0JXdCgpO1ZXdCgpO3FXdCgpO1dXdCgpO2pXdCgpOyRXdCgpO3p6KCk7cll0KCk7Q250PVtudWxsXTttaS5wcm90b3R5cGU9bll0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bWksc2VsZWN0OlZHdCxzZWxlY3RBbGw6cUd0LGZpbHRlcjpXR3QsZGF0YTpaR3QsZW50ZXI6akd0LGV4aXQ6UUd0LGpvaW46ZVd0LG1lcmdlOm5XdCxvcmRlcjpvV3Qsc29ydDpzV3QsY2FsbDpjV3Qsbm9kZXM6aFd0LG5vZGU6cFd0LHNpemU6bVd0LGVtcHR5Ol9XdCxlYWNoOnZXdCxhdHRyOmJXdCxzdHlsZTpTV3QscHJvcGVydHk6TVd0LGNsYXNzZWQ6SVd0LHRleHQ6a1d0LGh0bWw6Tld0LHJhaXNlOk9XdCxsb3dlcjpGV3QsYXBwZW5kOkhXdCxpbnNlcnQ6VVd0LHJlbW92ZTpHV3QsY2xvbmU6WVd0LGRhdHVtOlhXdCxvbjpRV3QsZGlzcGF0Y2g6ZVl0fTtmZD1uWXR9KTtmdW5jdGlvbiBwZChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBtaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IG1pKFtbZV1dLENudCl9dmFyIGlZdD1NKCgpPT57T3UoKX0pO2Z1bmN0aW9uIEZ6KCl7Zm9yKHZhciBlPVlyLHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9dmFyIEFudD1NKCgpPT57enooKX0pO2Z1bmN0aW9uIEJ6KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBudD1NKCgpPT57fSk7ZnVuY3Rpb24gaVMoZSl7dmFyIHQ9RnooKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksQnooZSx0KX12YXIgb1l0PU0oKCk9PntBbnQoKTtQbnQoKX0pO2Z1bmN0aW9uIEh6KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1GeigpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIG49MCxpPXQ/dC5sZW5ndGg6MCxvO248aTsrK24paWYoKG89dFtuXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIEJ6KGUsbyk7cmV0dXJuIG51bGx9dmFyIGFZdD1NKCgpPT57QW50KCk7UG50KCl9KTt2YXIgSXM9TSgoKT0+e3hudCgpO29ZdCgpO2t6KCk7aVl0KCk7T3UoKTtOeigpO3ZudCgpO01udCgpO2FZdCgpO3p6KCl9KTtmdW5jdGlvbiBWeigpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIHNZdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIEludChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXBkKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsVnosITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsVnosITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIExudChlLHQpe3ZhciByPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49cGQoZSkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYobi5vbigiY2xpY2suZHJhZyIsVnosITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIHI/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KHIuc3R5bGUuTW96VXNlclNlbGVjdD1yLl9fbm9zZWxlY3QsZGVsZXRlIHIuX19ub3NlbGVjdCl9dmFyIGxZdD1NKCgpPT57SXMoKTtzWXQoKX0pO3ZhciBjWXQ9TSgoKT0+e2xZdCgpfSk7ZnVuY3Rpb24gVXooZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGtudChlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgdVl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFQSgpe31mdW5jdGlvbiBmWXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBHTmUoKXtyZXR1cm4geVl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIHBZdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHFnKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PXpOZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2RZdCh0KTpyPT09Mz9uZXcgZ2wodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P3F6KHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P3F6KHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9Rk5lLmV4ZWMoZSkpP25ldyBnbCh0WzFdLHRbMl0sdFszXSwxKToodD1CTmUuZXhlYyhlKSk/bmV3IGdsKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PUhOZS5leGVjKGUpKT9xeih0WzFdLHRbMl0sdFszXSx0WzRdKToodD1WTmUuZXhlYyhlKSk/cXoodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9VU5lLmV4ZWMoZSkpP19ZdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXFOZS5leGVjKGUpKT9fWXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpoWXQuaGFzT3duUHJvcGVydHkoZSk/ZFl0KGhZdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IGdsKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gZFl0KGUpe3JldHVybiBuZXcgZ2woZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIHF6KGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgZ2woZSx0LHIsbil9ZnVuY3Rpb24gV05lKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRUF8fChlPXFnKGUpKSxlPyhlPWUucmdiKCksbmV3IGdsKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyBnbH1mdW5jdGlvbiBhUyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/V05lKGUpOm5ldyBnbChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2woZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG1ZdCgpe3JldHVybiIjIitSbnQodGhpcy5yKStSbnQodGhpcy5nKStSbnQodGhpcy5iKX1mdW5jdGlvbiBnWXQoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gUm50KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIF9ZdChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IENmKGUsdCxyLG4pfWZ1bmN0aW9uIHlZdChlKXtpZihlIGluc3RhbmNlb2YgQ2YpcmV0dXJuIG5ldyBDZihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBFQXx8KGU9cWcoZSkpLCFlKXJldHVybiBuZXcgQ2Y7aWYoZSBpbnN0YW5jZW9mIENmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IENmKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gdll0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT95WXQoZSk6bmV3IENmKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBDZihlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTm50KGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBTQSxHeixvUyxNQSxBZix6TmUsRk5lLEJOZSxITmUsVk5lLFVOZSxxTmUsaFl0LHhZdD1NKCgpPT57dVl0KCk7U0E9LjcsR3o9MS9TQSxvUz0iXFxzKihbKy1dP1xcZCspXFxzKiIsTUE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsQWY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHpOZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxGTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW29TLG9TLG9TXSsiXFwpJCIpLEJOZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbQWYsQWYsQWZdKyJcXCkkIiksSE5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbb1Msb1Msb1MsTUFdKyJcXCkkIiksVk5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQWYsQWYsQWYsTUFdKyJcXCkkIiksVU5lPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tNQSxBZixBZl0rIlxcKSQiKSxxTmU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tNQSxBZixBZixNQV0rIlxcKSQiKSxoWXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07VXooRUEscWcse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6Zll0LGZvcm1hdEhleDpmWXQsZm9ybWF0SHNsOkdOZSxmb3JtYXRSZ2I6cFl0LHRvU3RyaW5nOnBZdH0pO1V6KGdsLGFTLGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgZ2wodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U0E6TWF0aC5wb3coU0EsZSksbmV3IGdsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6bVl0LGZvcm1hdEhleDptWXQsZm9ybWF0UmdiOmdZdCx0b1N0cmluZzpnWXR9KSk7VXooQ2Ysdll0LGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9TQTpNYXRoLnBvdyhTQSxlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBnbChObnQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksTm50KGUsaSxuKSxObnQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgRG50PU0oKCk9Pnt4WXQoKX0pO2Z1bmN0aW9uIE9udChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGJZdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gT250KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIHpudD1NKCgpPT57fSk7ZnVuY3Rpb24gd1l0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gT250KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIFNZdD1NKCgpPT57em50KCl9KTtmdW5jdGlvbiBGbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBNWXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlOZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGpOZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uIEVZdChlKXtyZXR1cm4oZT0rZSk9PTE/V3o6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P2pOZSh0LHIsZSk6Rm50KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFd6KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP1lOZShlLHIpOkZudChpc05hTihlKT90OmUpfXZhciBUWXQ9TSgoKT0+e01ZdCgpfSk7ZnVuY3Rpb24gQ1l0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9YVModFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIFl6LFhOZSwkTmUsQVl0PU0oKCk9PntEbnQoKTt6bnQoKTtTWXQoKTtUWXQoKTtZej1mdW5jdGlvbiBlKHQpe3ZhciByPUVZdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1hUyhpKSkuciwobz1hUyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPVd6KGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtYTmU9Q1l0KGJZdCksJE5lPUNZdCh3WXQpfSk7ZnVuY3Rpb24gSWMoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIGp6PU0oKCk9Pnt9KTtmdW5jdGlvbiBLTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFpOZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIFZudChlLHQpe3ZhciByPUhudC5sYXN0SW5kZXg9Qm50Lmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPUhudC5leGVjKGUpKSYmKGk9Qm50LmV4ZWModCkpOykobz1pLmluZGV4KT5yJiYobz10LnNsaWNlKHIsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpJYyhuLGkpfSkpLHI9Qm50Lmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9aTmUobFswXS54KTpLTmUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIEhudCxCbnQsUFl0PU0oKCk9PntqeigpO0hudD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQm50PW5ldyBSZWdFeHAoSG50LnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gVW50KGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKklZdCxza2V3WDpNYXRoLmF0YW4obCkqSVl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgSVl0LFh6LExZdD1NKCgpPT57SVl0PTE4MC9NYXRoLlBJLFh6PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gUll0KGUpe3JldHVybiBlPT09Im5vbmUiP1h6OihUQXx8KFRBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHFudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsa1l0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxUQS5zdHlsZS50cmFuc2Zvcm09ZSxlPWtZdC5nZXRDb21wdXRlZFN0eWxlKHFudC5hcHBlbmRDaGlsZChUQSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscW50LnJlbW92ZUNoaWxkKFRBKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxVbnQoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBOWXQoZSl7cmV0dXJuIGU9PW51bGw/WHo6KCR6fHwoJHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksJHouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPSR6LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LFVudChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZikpOlh6KX12YXIgVEEscW50LGtZdCwkeixEWXQ9TSgoKT0+e0xZdCgpfSk7ZnVuY3Rpb24gT1l0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6SWMoYyxoKX0se2k6Zy0yLHg6SWModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpJYyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkljKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpJYyhjLGgpfSx7aTpnLTIseDpJYyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBHbnQsV250LHpZdD1NKCgpPT57anooKTtEWXQoKTtHbnQ9T1l0KFJZdCwicHgsICIsInB4KSIsImRlZykiKSxXbnQ9T1l0KE5ZdCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gQll0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIFFOZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiB0RGUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIGpudChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8Sk5lKWY9TWF0aC5sb2cocy9pKS9DQSxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKENBKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK0ZZdCp1KS8oMippKlludCpwKSxnPShzKnMtaSppLUZZdCp1KS8oMipzKlludCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykvQ0EsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1CWXQoXyksQz1pLyhZbnQqcCkqKFMqdERlKENBKmIrXyktUU5lKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0JZdChDQSpiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgQ0EsWW50LEZZdCxKTmUsSFl0PU0oKCk9PntDQT1NYXRoLlNRUlQyLFludD0yLEZZdD00LEpOZT0xZS0xMn0pO3ZhciBBQT1NKCgpPT57anooKTtQWXQoKTt6WXQoKTtIWXQoKTtBWXQoKX0pO2Z1bmN0aW9uIGxTKCl7cmV0dXJuIEF2fHwocVl0KGVEZSksQXY9a0Eubm93KCkrSnopfWZ1bmN0aW9uIGVEZSgpe0F2PTB9ZnVuY3Rpb24gUkEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFF6KGUsdCxyKXt2YXIgbj1uZXcgUkE7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBHWXQoKXtsUygpLCsrc1M7Zm9yKHZhciBlPUt6LHQ7ZTspKHQ9QXYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLXNTfWZ1bmN0aW9uIFZZdCgpe0F2PShaej1rQS5ub3coKSkrSnosc1M9SUE9MDt0cnl7R1l0KCl9ZmluYWxseXtzUz0wLG5EZSgpLEF2PTB9fWZ1bmN0aW9uIHJEZSgpe3ZhciBlPWtBLm5vdygpLHQ9ZS1aejt0PlVZdCYmKEp6LT10LFp6PWUpfWZ1bmN0aW9uIG5EZSgpe2Zvcih2YXIgZSx0PUt6LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOkt6PXIpO0xBPWUsWG50KG4pfWZ1bmN0aW9uIFhudChlKXtpZighc1Mpe0lBJiYoSUE9Y2xlYXJUaW1lb3V0KElBKSk7dmFyIHQ9ZS1Bdjt0PjI0PyhlPDEvMCYmKElBPXNldFRpbWVvdXQoVll0LGUta0Eubm93KCktSnopKSxQQSYmKFBBPWNsZWFySW50ZXJ2YWwoUEEpKSk6KFBBfHwoWno9a0Eubm93KCksUEE9c2V0SW50ZXJ2YWwockRlLFVZdCkpLHNTPTEscVl0KFZZdCkpfX12YXIgc1MsSUEsUEEsVVl0LEt6LExBLFp6LEF2LEp6LGtBLHFZdCwkbnQ9TSgoKT0+e3NTPTAsSUE9MCxQQT0wLFVZdD0xZTMsWno9MCxBdj0wLEp6PTAsa0E9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUscVl0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O1JBLnByb3RvdHlwZT1Rei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJBLHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9sUygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmTEEhPT10aGlzJiYoTEE/TEEuX25leHQ9dGhpczpLej10aGlzLExBPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsWG50KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFhudCgpKX19fSk7ZnVuY3Rpb24gdEYoZSx0LHIpe3ZhciBuPW5ldyBSQTtyZXR1cm4gdD10PT1udWxsPzA6K3Qsbi5yZXN0YXJ0KGZ1bmN0aW9uKGkpe24uc3RvcCgpLGUoaSt0KX0sdCxyKSxufXZhciBXWXQ9TSgoKT0+eyRudCgpfSk7dmFyIEtudD1NKCgpPT57JG50KCk7V1l0KCl9KTtmdW5jdGlvbiBHZyhlLHQscixuLGksbyl7dmFyIGE9ZS5fX3RyYW5zaXRpb247aWYoIWEpZS5fX3RyYW5zaXRpb249e307ZWxzZSBpZihyIGluIGEpcmV0dXJuO2FEZShlLHIse25hbWU6dCxpbmRleDpuLGdyb3VwOmksb246aURlLHR3ZWVuOm9EZSx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpqWXR9KX1mdW5jdGlvbiBEQShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5qWXQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiBKYShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5lRil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiBvbyhlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9clt0XSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIGFEZShlLHQscil7dmFyIG49ZS5fX3RyYW5zaXRpb24saTtuW3RdPXIsci50aW1lcj1ReihvLDAsci50aW1lKTtmdW5jdGlvbiBvKGMpe3Iuc3RhdGU9Wm50LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09Wm50KXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09ZUYpcmV0dXJuIHRGKGEpO3Auc3RhdGU9PT1ZWXQ/KHAuc3RhdGU9TkEscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1OQSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHRGKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PWVGJiYoci5zdGF0ZT1ZWXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1yRixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09ckYpe2ZvcihyLnN0YXRlPWVGLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPW5GLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PW5GJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9TkEsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIGlEZSxvRGUsall0LFpudCxyRixlRixZWXQsbkYsTkEsTHM9TSgoKT0+e21udCgpO0tudCgpO2lEZT12QSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxvRGU9W10sall0PTAsWm50PTEsckY9MixlRj0zLFlZdD00LG5GPTUsTkE9Nn0pO2Z1bmN0aW9uIFB2KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpLG89ITAsYTtpZighIXIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGEgaW4gcil7aWYoKG49clthXSkubmFtZSE9PXQpe289ITE7Y29udGludWV9aT1uLnN0YXRlPnJGJiZuLnN0YXRlPG5GLG4uc3RhdGU9TkEsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgSm50PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gWFl0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtQdih0aGlzLGUpfSl9dmFyICRZdD1NKCgpPT57Sm50KCl9KTtmdW5jdGlvbiBzRGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUphKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBsRGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUphKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIEtZdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPW9vKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3NEZTpsRGUpKHIsZSx0KSl9ZnVuY3Rpb24gY1MoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1KYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIG9vKGksbikudmFsdWVbdF19fXZhciBPQT1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGlGKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9JYzp0IGluc3RhbmNlb2YgcWc/WXo6KHI9cWcodCkpPyh0PXIsWXopOlZudCkoZSx0KX12YXIgUW50PU0oKCk9PntEbnQoKTtBQSgpfSk7ZnVuY3Rpb24gY0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiB1RGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBoRGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gZkRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBwRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBkRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIFpZdChlLHQpe3ZhciByPWhkKGUpLG49cj09PSJ0cmFuc2Zvcm0iP1dudDppRjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSx0eXBlb2YgdD09ImZ1bmN0aW9uIj8oci5sb2NhbD9kRGU6cERlKShyLG4sY1ModGhpcywiYXR0ci4iK2UsdCkpOnQ9PW51bGw/KHIubG9jYWw/dURlOmNEZSkocik6KHIubG9jYWw/ZkRlOmhEZSkocixuLHQpKX12YXIgSll0PU0oKCk9PntBQSgpO0lzKCk7T0EoKTtRbnQoKX0pO2Z1bmN0aW9uIG1EZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gZ0RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gX0RlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmZ0RlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB5RGUoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZtRGUoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIFFZdChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49aGQoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9fRGU6eURlKShuLHQpKX12YXIgdGp0PU0oKCk9PntJcygpfSk7ZnVuY3Rpb24gdkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHhEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT10fX1mdW5jdGlvbiBlanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj92RGU6eERlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kZWxheX12YXIgcmp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gYkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHdEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBuanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9iRGU6d0RlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn12YXIgaWp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gU0RlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0phKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBvanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKFNEZSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5lYXNlfXZhciBhanQ9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBzanQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBkYShuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGxqdD1NKCgpPT57SXMoKTtkZCgpfSk7ZnVuY3Rpb24gY2p0KGUpe2lmKGUuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBkYShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIHVqdD1NKCgpPT57ZGQoKX0pO2Z1bmN0aW9uIE1EZShlKXtyZXR1cm4oZSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciByPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD10LnNsaWNlKDAscikpLCF0fHx0PT09InN0YXJ0In0pfWZ1bmN0aW9uIEVEZShlLHQscil7dmFyIG4saSxvPU1EZSh0KT9EQTpKYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsZSkscz1hLm9uO3MhPT1uJiYoaT0obj1zKS5jb3B5KCkpLm9uKHQsciksYS5vbj1pfX1mdW5jdGlvbiBoanQoZSx0KXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP29vKHRoaXMubm9kZSgpLHIpLm9uLm9uKGUpOnRoaXMuZWFjaChFRGUocixlLHQpKX12YXIgZmp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gVERlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBwanQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsVERlKHRoaXMuX2lkKSl9dmFyIGRqdD1NKCgpPT57fSk7ZnVuY3Rpb24gbWp0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Q3YoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHZyhjW2ZdLHQscixmLGMsb28odSxyKSkpO3JldHVybiBuZXcgZGEobyx0aGlzLl9wYXJlbnRzLHQscil9dmFyIGdqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBfanQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSxjPWwubGVuZ3RoLHUsaD0wO2g8YzsrK2gpaWYodT1sW2hdKXtmb3IodmFyIGY9ZS5jYWxsKHUsdS5fX2RhdGFfXyxoLGwpLHAsZD1vbyh1LHIpLGc9MCxfPWYubGVuZ3RoO2c8XzsrK2cpKHA9ZltnXSkmJkdnKHAsdCxyLGcsZixkKTtvLnB1c2goZiksYS5wdXNoKHUpfXJldHVybiBuZXcgZGEobyxhLHQscil9dmFyIHlqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiB2anQoKXtyZXR1cm4gbmV3IENEZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9dmFyIENEZSx4anQ9TSgoKT0+e0lzKCk7Q0RlPWZkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcn0pO2Z1bmN0aW9uIEFEZShlLHQpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1VZyh0aGlzLGUpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSksVWcodGhpcyxlKSk7cmV0dXJuIG89PT1hP251bGw6bz09PXImJmE9PT1uP2k6aT10KHI9byxuPWEpfX1mdW5jdGlvbiBianQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gUERlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1VZyh0aGlzLGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gSURlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9VWcodGhpcyxlKSxzPXIodGhpcyksbD1zKyIiO3JldHVybiBzPT1udWxsJiYobD1zPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFVnKHRoaXMsZSkpKSxhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSl9fWZ1bmN0aW9uIExEZShlLHQpe3ZhciByLG4saSxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUphKHRoaXMsZSksYz1sLm9uLHU9bC52YWx1ZVtvXT09bnVsbD9zfHwocz1ianQodCkpOnZvaWQgMDsoYyE9PXJ8fGkhPT11KSYmKG49KHI9YykuY29weSgpKS5vbihhLGk9dSksbC5vbj1ufX1mdW5jdGlvbiB3anQoZSx0LHIpe3ZhciBuPShlKz0iIik9PSJ0cmFuc2Zvcm0iP0dudDppRjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxBRGUoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsYmp0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxJRGUoZSxuLGNTKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goTERlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxQRGUoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBTanQ9TSgoKT0+e0FBKCk7SXMoKTtMcygpO09BKCk7UW50KCl9KTtmdW5jdGlvbiBrRGUoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdC5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIFJEZShlLHQscil7dmFyIG4saTtmdW5jdGlvbiBvKCl7dmFyIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYobj0oaT1hKSYma0RlKGUsYSxyKSksbn1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIE1qdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixSRGUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBFanQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5EZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIEREZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBUanQoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0REZShjUyh0aGlzLCJ0ZXh0IixlKSk6TkRlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBDanQ9TSgoKT0+e09BKCl9KTtmdW5jdGlvbiBPRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIHpEZShlKXt2YXIgdCxyO2Z1bmN0aW9uIG4oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJih0PShyPWkpJiZPRGUoaSkpLHR9cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiBBanQoZSl7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LHpEZShlKSl9dmFyIFBqdD1NKCgpPT57fSk7ZnVuY3Rpb24gSWp0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPW9GKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1vbyhsLHQpO0dnKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgZGEobix0aGlzLl9wYXJlbnRzLGUscil9dmFyIExqdD1NKCgpPT57ZGQoKTtMcygpfSk7ZnVuY3Rpb24ga2p0KCl7dmFyIGUsdCxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0taT09PTAmJm8oKX19O3IuZWFjaChmdW5jdGlvbigpe3ZhciBjPUphKHRoaXMsbiksdT1jLm9uO3UhPT1lJiYodD0oZT11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFJqdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGRhKGUsdCxyLG4pe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiB0aXQoZSl7cmV0dXJuIGZkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBvRigpe3JldHVybisrRkRlfXZhciBGRGUsdVMsZGQ9TSgoKT0+e0lzKCk7Sll0KCk7dGp0KCk7cmp0KCk7aWp0KCk7YWp0KCk7bGp0KCk7dWp0KCk7Zmp0KCk7ZGp0KCk7Z2p0KCk7eWp0KCk7eGp0KCk7U2p0KCk7RWp0KCk7Q2p0KCk7UGp0KCk7TGp0KCk7T0EoKTtSanQoKTtGRGU9MDt1Uz1mZC5wcm90b3R5cGU7ZGEucHJvdG90eXBlPXRpdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRhLHNlbGVjdDptanQsc2VsZWN0QWxsOl9qdCxmaWx0ZXI6c2p0LG1lcmdlOmNqdCxzZWxlY3Rpb246dmp0LHRyYW5zaXRpb246SWp0LGNhbGw6dVMuY2FsbCxub2Rlczp1Uy5ub2Rlcyxub2RlOnVTLm5vZGUsc2l6ZTp1Uy5zaXplLGVtcHR5OnVTLmVtcHR5LGVhY2g6dVMuZWFjaCxvbjpoanQsYXR0cjpaWXQsYXR0clR3ZWVuOlFZdCxzdHlsZTp3anQsc3R5bGVUd2VlbjpNanQsdGV4dDpUanQsdGV4dFR3ZWVuOkFqdCxyZW1vdmU6cGp0LHR3ZWVuOktZdCxkZWxheTplanQsZHVyYXRpb246bmp0LGVhc2U6b2p0LGVuZDpranR9fSk7ZnVuY3Rpb24gQkRlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIGVpdC50aW1lPWxTKCksZWl0O3JldHVybiByfWZ1bmN0aW9uIE5qdChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBkYT8odD1lLl9pZCxlPWUuX25hbWUpOih0PW9GKCksKHI9ZWl0KS50aW1lPWxTKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmR2cobCxlLHQsYyxhLHJ8fEJEZShsLHQpKTtyZXR1cm4gbmV3IGRhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciBlaXQsRGp0PU0oKCk9PntkZCgpO0xzKCk7SV8oKTtLbnQoKTtlaXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBPanQ9TSgoKT0+e0lzKCk7JFl0KCk7RGp0KCk7ZmQucHJvdG90eXBlLmludGVycnVwdD1YWXQ7ZmQucHJvdG90eXBlLnRyYW5zaXRpb249Tmp0fSk7dmFyIHpqdD1NKCgpPT57ZGQoKTtMcygpfSk7dmFyIEZqdD1NKCgpPT57T2p0KCk7ZGQoKTt6anQoKTtKbnQoKX0pO2Z1bmN0aW9uIHpBKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgQmp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByaXQoZSx0LHIpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy50cmFuc2Zvcm09cn12YXIgSGp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQZihlLHQscil7dGhpcy5rPWUsdGhpcy54PXQsdGhpcy55PXJ9ZnVuY3Rpb24gYUYoZSl7cmV0dXJuIGUuX196b29tfHxoU312YXIgaFMsbml0PU0oKCk9PntQZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBmLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBQZih0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IFBmKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07aFM9bmV3IFBmKDEsMCwwKTthRi5wcm90b3R5cGU9UGYucHJvdG90eXBlfSk7ZnVuY3Rpb24gc0YoKXtZci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmUygpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIFZqdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIEhEZSgpe3JldHVybiFZci5idXR0b259ZnVuY3Rpb24gVkRlKCl7dmFyIGU9dGhpcyx0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLHQ9ZS53aWR0aC5iYXNlVmFsLnZhbHVlLHI9ZS5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9ZS5jbGllbnRXaWR0aCxyPWUuY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3Qscl1dfWZ1bmN0aW9uIFVqdCgpe3JldHVybiB0aGlzLl9fem9vbXx8aFN9ZnVuY3Rpb24gVURlKCl7cmV0dXJuLVlyLmRlbHRhWSooWXIuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gcURlKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEdEZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gcWp0KCl7dmFyIGU9SERlLHQ9VkRlLHI9R0RlLG49VURlLGk9cURlLG89WzAsMS8wXSxhPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHM9MjUwLGw9am50LGM9W10sdT12QSgic3RhcnQiLCJ6b29tIiwiZW5kIiksaCxmLHA9NTAwLGQ9MTUwLGc9MDtmdW5jdGlvbiBfKFIpe1IucHJvcGVydHkoIl9fem9vbSIsVWp0KS5vbigid2hlZWwuem9vbSIsaykub24oIm1vdXNlZG93bi56b29tIixPKS5vbigiZGJsY2xpY2suem9vbSIsRCkuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEIpLm9uKCJ0b3VjaG1vdmUuem9vbSIsSSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsTCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfV8udHJhbnNmb3JtPWZ1bmN0aW9uKFIsRil7dmFyIHo9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSO3oucHJvcGVydHkoIl9fem9vbSIsVWp0KSxSIT09ej9TKFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Qyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RikuZW5kKCl9KX0sXy5zY2FsZUJ5PWZ1bmN0aW9uKFIsRil7Xy5zY2FsZVRvKFIsZnVuY3Rpb24oKXt2YXIgej10aGlzLl9fem9vbS5rLFU9dHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RjtyZXR1cm4geipVfSl9LF8uc2NhbGVUbz1mdW5jdGlvbihSLEYpe18udHJhbnNmb3JtKFIsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Yih6KSxaPVUuaW52ZXJ0KFcpLHJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkY7cmV0dXJuIHIoeCh5KFUscnQpLFcsWikseixhKX0pfSxfLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKFIsRix6KXtfLnRyYW5zZm9ybShSLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsdHlwZW9mIHo9PSJmdW5jdGlvbiI/ei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sXy50cmFuc2xhdGVUbz1mdW5jdGlvbihSLEYseil7Xy50cmFuc2Zvcm0oUixmdW5jdGlvbigpe3ZhciBVPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFc9dGhpcy5fX3pvb20sWj1iKFUpO3JldHVybiByKGhTLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iPy1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRix0eXBlb2Ygej09ImZ1bmN0aW9uIj8tei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXopLFUsYSl9KX07ZnVuY3Rpb24geShSLEYpe3JldHVybiBGPU1hdGgubWF4KG9bMF0sTWF0aC5taW4ob1sxXSxGKSksRj09PVIuaz9SOm5ldyBQZihGLFIueCxSLnkpfWZ1bmN0aW9uIHgoUixGLHope3ZhciBVPUZbMF0telswXSpSLmssVz1GWzFdLXpbMV0qUi5rO3JldHVybiBVPT09Ui54JiZXPT09Ui55P1I6bmV3IFBmKFIuayxVLFcpfWZ1bmN0aW9uIGIoUil7cmV0dXJuWygrUlswXVswXSsgK1JbMV1bMF0pLzIsKCtSWzBdWzFdKyArUlsxXVsxXSkvMl19ZnVuY3Rpb24gUyhSLEYseil7Ui5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtDKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe0ModGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIFU9dGhpcyxXPWFyZ3VtZW50cyxaPUMoVSxXKSxydD10LmFwcGx5KFUsVyksb3Q9enx8YihydCksc3Q9TWF0aC5tYXgocnRbMV1bMF0tcnRbMF1bMF0scnRbMV1bMV0tcnRbMF1bMV0pLFN0PVUuX196b29tLGJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkoVSxXKTpGLE10PWwoU3QuaW52ZXJ0KG90KS5jb25jYXQoc3QvU3QuayksYnQuaW52ZXJ0KG90KS5jb25jYXQoc3QvYnQuaykpO3JldHVybiBmdW5jdGlvbihsdCl7aWYobHQ9PT0xKWx0PWJ0O2Vsc2V7dmFyIEt0PU10KGx0KSxfdD1zdC9LdFsyXTtsdD1uZXcgUGYoX3Qsb3RbMF0tS3RbMF0qX3Qsb3RbMV0tS3RbMV0qX3QpfVouem9vbShudWxsLGx0KX19KX1mdW5jdGlvbiBDKFIsRil7Zm9yKHZhciB6PTAsVT1jLmxlbmd0aCxXO3o8VTsrK3opaWYoKFc9Y1t6XSkudGhhdD09PVIpcmV0dXJuIFc7cmV0dXJuIG5ldyBQKFIsRil9ZnVuY3Rpb24gUChSLEYpe3RoaXMudGhhdD1SLHRoaXMuYXJncz1GLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD10LmFwcGx5KFIsRil9UC5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLmluZGV4PWMucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihSLEYpe3JldHVybiB0aGlzLm1vdXNlJiZSIT09Im1vdXNlIiYmKHRoaXMubW91c2VbMV09Ri5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZSIT09InRvdWNoIiYmKHRoaXMudG91Y2gwWzFdPUYuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJlIhPT0idG91Y2giJiYodGhpcy50b3VjaDFbMV09Ri5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPUYsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuLS10aGlzLmFjdGl2ZT09PTAmJihjLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihSKXtUbnQobmV3IHJpdChfLFIsdGhpcy50aGF0Ll9fem9vbSksdS5hcHBseSx1LFtSLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIGsoKXtpZighZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9dGhpcy5fX3pvb20sej1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sRi5rKk1hdGgucG93KDIsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksVT1pUyh0aGlzKTtpZihSLndoZWVsKShSLm1vdXNlWzBdWzBdIT09VVswXXx8Ui5tb3VzZVswXVsxXSE9PVVbMV0pJiYoUi5tb3VzZVsxXT1GLmludmVydChSLm1vdXNlWzBdPVUpKSxjbGVhclRpbWVvdXQoUi53aGVlbCk7ZWxzZXtpZihGLms9PT16KXJldHVybjtSLm1vdXNlPVtVLEYuaW52ZXJ0KFUpXSxQdih0aGlzKSxSLnN0YXJ0KCl9ZlMoKSxSLndoZWVsPXNldFRpbWVvdXQoVyxkKSxSLnpvb20oIm1vdXNlIixyKHgoeShGLHopLFIubW91c2VbMF0sUi5tb3VzZVsxXSksUi5leHRlbnQsYSkpO2Z1bmN0aW9uIFcoKXtSLndoZWVsPW51bGwsUi5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKGZ8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIFI9Qyh0aGlzLGFyZ3VtZW50cyksRj1wZChZci52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLFosITApLm9uKCJtb3VzZXVwLnpvb20iLHJ0LCEwKSx6PWlTKHRoaXMpLFU9WXIuY2xpZW50WCxXPVlyLmNsaWVudFk7SW50KFlyLnZpZXcpLHNGKCksUi5tb3VzZT1beix0aGlzLl9fem9vbS5pbnZlcnQoeildLFB2KHRoaXMpLFIuc3RhcnQoKTtmdW5jdGlvbiBaKCl7aWYoZlMoKSwhUi5tb3ZlZCl7dmFyIG90PVlyLmNsaWVudFgtVSxzdD1Zci5jbGllbnRZLVc7Ui5tb3ZlZD1vdCpvdCtzdCpzdD5nfVIuem9vbSgibW91c2UiLHIoeChSLnRoYXQuX196b29tLFIubW91c2VbMF09aVMoUi50aGF0KSxSLm1vdXNlWzFdKSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gcnQoKXtGLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLExudChZci52aWV3LFIubW92ZWQpLGZTKCksUi5lbmQoKX19ZnVuY3Rpb24gRCgpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBSPXRoaXMuX196b29tLEY9aVModGhpcyksej1SLmludmVydChGKSxVPVIuayooWXIuc2hpZnRLZXk/LjU6MiksVz1yKHgoeShSLFUpLEYseiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7ZlMoKSxzPjA/cGQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoUyxXLEYpOnBkKHRoaXMpLmNhbGwoXy50cmFuc2Zvcm0sVyl9fWZ1bmN0aW9uIEIoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHosVT1GLmxlbmd0aCxXLFoscnQ7Zm9yKHNGKCksVz0wO1c8VTsrK1cpWj1GW1ddLHJ0PUh6KHRoaXMsRixaLmlkZW50aWZpZXIpLHJ0PVtydCx0aGlzLl9fem9vbS5pbnZlcnQocnQpLFouaWRlbnRpZmllcl0sUi50b3VjaDA/Ui50b3VjaDF8fChSLnRvdWNoMT1ydCk6KFIudG91Y2gwPXJ0LHo9ITApO2lmKGgmJihoPWNsZWFyVGltZW91dChoKSwhUi50b3VjaDEpKXtSLmVuZCgpLHJ0PXBkKHRoaXMpLm9uKCJkYmxjbGljay56b29tIikscnQmJnJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm59eiYmKGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0scCksUHYodGhpcyksUi5zdGFydCgpKX19ZnVuY3Rpb24gSSgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFcsWixydDtmb3IoZlMoKSxoJiYoaD1jbGVhclRpbWVvdXQoaCkpLFU9MDtVPHo7KytVKVc9RltVXSxaPUh6KHRoaXMsRixXLmlkZW50aWZpZXIpLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9SLnRvdWNoMFswXT1aOlIudG91Y2gxJiZSLnRvdWNoMVsyXT09PVcuaWRlbnRpZmllciYmKFIudG91Y2gxWzBdPVopO2lmKFc9Ui50aGF0Ll9fem9vbSxSLnRvdWNoMSl7dmFyIG90PVIudG91Y2gwWzBdLHN0PVIudG91Y2gwWzFdLFN0PVIudG91Y2gxWzBdLGJ0PVIudG91Y2gxWzFdLE10PShNdD1TdFswXS1vdFswXSkqTXQrKE10PVN0WzFdLW90WzFdKSpNdCxsdD0obHQ9YnRbMF0tc3RbMF0pKmx0KyhsdD1idFsxXS1zdFsxXSkqbHQ7Vz15KFcsTWF0aC5zcXJ0KE10L2x0KSksWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl0scnQ9WyhzdFswXStidFswXSkvMiwoc3RbMV0rYnRbMV0pLzJdfWVsc2UgaWYoUi50b3VjaDApWj1SLnRvdWNoMFswXSxydD1SLnRvdWNoMFsxXTtlbHNlIHJldHVybjtSLnpvb20oInRvdWNoIixyKHgoVyxaLHJ0KSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gTCgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFc7Zm9yKHNGKCksZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0scCksVT0wO1U8ejsrK1UpVz1GW1VdLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9kZWxldGUgUi50b3VjaDA6Ui50b3VjaDEmJlIudG91Y2gxWzJdPT09Vy5pZGVudGlmaWVyJiZkZWxldGUgUi50b3VjaDE7Ui50b3VjaDEmJiFSLnRvdWNoMCYmKFIudG91Y2gwPVIudG91Y2gxLGRlbGV0ZSBSLnRvdWNoMSksUi50b3VjaDA/Ui50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KFIudG91Y2gwWzBdKTpSLmVuZCgpfXJldHVybiBfLndoZWVsRGVsdGE9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSgrUiksXyk6bn0sXy5maWx0ZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSghIVIpLF8pOmV9LF8udG91Y2hhYmxlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6ekEoISFSKSxfKTppfSxfLmV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SOnpBKFtbK1JbMF1bMF0sK1JbMF1bMV1dLFsrUlsxXVswXSwrUlsxXVsxXV1dKSxfKTp0fSxfLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvWzBdPStSWzBdLG9bMV09K1JbMV0sXyk6W29bMF0sb1sxXV19LF8udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhWzBdWzBdPStSWzBdWzBdLGFbMV1bMF09K1JbMV1bMF0sYVswXVsxXT0rUlswXVsxXSxhWzFdWzFdPStSWzFdWzFdLF8pOltbYVswXVswXSxhWzBdWzFdXSxbYVsxXVswXSxhWzFdWzFdXV19LF8uY29uc3RyYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVIsXyk6cn0sXy5kdXJhdGlvbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rUixfKTpzfSxfLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVIsXyk6bH0sXy5vbj1mdW5jdGlvbigpe3ZhciBSPXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiBSPT09dT9fOlJ9LF8uY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0oUj0rUikqUixfKTpNYXRoLnNxcnQoZyl9LF99dmFyIEdqdD1NKCgpPT57bW50KCk7Y1l0KCk7QUEoKTtJcygpO0ZqdCgpO0JqdCgpO0hqdCgpO25pdCgpO1ZqdCgpfSk7dmFyIFdqdD1NKCgpPT57R2p0KCk7bml0KCl9KTt2YXIgTXI9e307S3MoTXIse2FjdGl2ZTooKT0+bUd0LGFyYzooKT0+Z0Z0LGFyZWE6KCk9PmI3LGFyZWFSYWRpYWw6KCk9PmtldCxhc2NlbmRpbmc6KCk9Pl9jLGF4aXNCb3R0b206KCk9PlpNdCxheGlzTGVmdDooKT0+Sk10LGF4aXNSaWdodDooKT0+S010LGF4aXNUb3A6KCk9PiRNdCxiaXNlY3Q6KCk9PnNSLGJpc2VjdExlZnQ6KCk9PnNNdCxiaXNlY3RSaWdodDooKT0+eCQsYmlzZWN0b3I6KCk9PmFSLGJydXNoOigpPT55Q3QsYnJ1c2hTZWxlY3Rpb246KCk9Pm1DdCxicnVzaFg6KCk9PmdDdCxicnVzaFk6KCk9Pl9DdCxjaG9yZDooKT0+VUN0LGNsaWVudFBvaW50OigpPT5EZyxjbHVzdGVyOigpPT5HTHQsY29sb3I6KCk9PngyLGNyZWF0ZTooKT0+dEZ0LGNyZWF0b3I6KCk9Pk5nLGNyb3NzOigpPT5jTXQsY3N2OigpPT5wTnQsY3N2Rm9ybWF0OigpPT55UHQsY3N2Rm9ybWF0Um93czooKT0+dlB0LGNzdlBhcnNlOigpPT5nUHQsY3N2UGFyc2VSb3dzOigpPT5fUHQsY3ViZWhlbGl4OigpPT51TixjdXJ2ZUJhc2lzOigpPT5PRnQsY3VydmVCYXNpc0Nsb3NlZDooKT0+RkZ0LGN1cnZlQmFzaXNPcGVuOigpPT5WRnQsY3VydmVCdW5kbGU6KCk9PkdGdCxjdXJ2ZUNhcmRpbmFsOigpPT5ZRnQsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+akZ0LGN1cnZlQ2FyZGluYWxPcGVuOigpPT5YRnQsY3VydmVDYXRtdWxsUm9tOigpPT5LRnQsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5KRnQsY3VydmVDYXRtdWxsUm9tT3BlbjooKT0+ZUJ0LGN1cnZlTGluZWFyOigpPT5GZyxjdXJ2ZUxpbmVhckNsb3NlZDooKT0+aUJ0LGN1cnZlTW9ub3RvbmVYOigpPT5oQnQsY3VydmVNb25vdG9uZVk6KCk9PmZCdCxjdXJ2ZU5hdHVyYWw6KCk9PmdCdCxjdXJ2ZVN0ZXA6KCk9PnlCdCxjdXJ2ZVN0ZXBBZnRlcjooKT0+eEJ0LGN1cnZlU3RlcEJlZm9yZTooKT0+dkJ0LGN1c3RvbUV2ZW50OigpPT5YenQsZGVzY2VuZGluZzooKT0+aE10LGRldmlhdGlvbjooKT0+Y1IsZGlzcGF0Y2g6KCk9PmtBdCxkcmFnOigpPT5oUHQsZHJhZ0Rpc2FibGU6KCk9PkVOLGRyYWdFbmFibGU6KCk9PlROLGRzdkZvcm1hdDooKT0+dzIsZWFzZUJhY2s6KCk9Pk9aLGVhc2VCYWNrSW46KCk9PkpQdCxlYXNlQmFja0luT3V0OigpPT5PWixlYXNlQmFja091dDooKT0+UVB0LGVhc2VCb3VuY2U6KCk9PlMyLGVhc2VCb3VuY2VJbjooKT0+JFB0LGVhc2VCb3VuY2VJbk91dDooKT0+S1B0LGVhc2VCb3VuY2VPdXQ6KCk9PlMyLGVhc2VDaXJjbGU6KCk9PlJaLGVhc2VDaXJjbGVJbjooKT0+WVB0LGVhc2VDaXJjbGVJbk91dDooKT0+UlosZWFzZUNpcmNsZU91dDooKT0+alB0LGVhc2VDdWJpYzooKT0+QVosZWFzZUN1YmljSW46KCk9PmtQdCxlYXNlQ3ViaWNJbk91dDooKT0+QVosZWFzZUN1YmljT3V0OigpPT5SUHQsZWFzZUVsYXN0aWM6KCk9PkJaLGVhc2VFbGFzdGljSW46KCk9PmU2dCxlYXNlRWxhc3RpY0luT3V0OigpPT5yNnQsZWFzZUVsYXN0aWNPdXQ6KCk9PkJaLGVhc2VFeHA6KCk9PmtaLGVhc2VFeHBJbjooKT0+cVB0LGVhc2VFeHBJbk91dDooKT0+a1osZWFzZUV4cE91dDooKT0+R1B0LGVhc2VMaW5lYXI6KCk9PkNQdCxlYXNlUG9seTooKT0+SVosZWFzZVBvbHlJbjooKT0+RFB0LGVhc2VQb2x5SW5PdXQ6KCk9PklaLGVhc2VQb2x5T3V0OigpPT5PUHQsZWFzZVF1YWQ6KCk9PkNaLGVhc2VRdWFkSW46KCk9PlBQdCxlYXNlUXVhZEluT3V0OigpPT5DWixlYXNlUXVhZE91dDooKT0+SVB0LGVhc2VTaW46KCk9PkxaLGVhc2VTaW5JbjooKT0+SFB0LGVhc2VTaW5Jbk91dDooKT0+TFosZWFzZVNpbk91dDooKT0+VlB0LGVudHJpZXM6KCk9PmhBdCxldmVudDooKT0+UHUsZXh0ZW50OigpPT51Uixmb3JjZUNlbnRlcjooKT0+bzZ0LGZvcmNlQ29sbGlkZTooKT0+RjZ0LGZvcmNlTGluazooKT0+ajZ0LGZvcmNlTWFueUJvZHk6KCk9PmxJdCxmb3JjZVJhZGlhbDooKT0+dUl0LGZvcmNlU2ltdWxhdGlvbjooKT0+c0l0LGZvcmNlWDooKT0+Zkl0LGZvcmNlWTooKT0+ZEl0LGZvcm1hdDooKT0+ckosZm9ybWF0RGVmYXVsdExvY2FsZTooKT0+V04sZm9ybWF0TG9jYWxlOigpPT5xTixmb3JtYXRQcmVmaXg6KCk9Pm5KLGZvcm1hdFNwZWNpZmllcjooKT0+THksZ2VvQWxiZXJzOigpPT5ERCxnZW9BbGJlcnNVc2E6KCk9PnZMdCxnZW9BcmVhOigpPT5VSXQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhOigpPT5iTHQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT56RCxnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+U0x0LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OigpPT5GRCxnZW9Cb3VuZHM6KCk9PktJdCxnZW9DZW50cm9pZDooKT0+bjl0LGdlb0NpcmNsZTooKT0+dTl0LGdlb0NsaXBBbnRpbWVyaWRpYW46KCk9PnpULGdlb0NsaXBDaXJjbGU6KCk9Pl9ELGdlb0NsaXBFeHRlbnQ6KCk9PlI5dCxnZW9DbGlwUmVjdGFuZ2xlOigpPT5RcCxnZW9Db25pY0NvbmZvcm1hbDooKT0+VEx0LGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT5mUSxnZW9Db25pY0VxdWFsQXJlYTooKT0+VXksZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PmNRLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PlBMdCxnZW9Db25pY0VxdWlkaXN0YW50UmF3OigpPT5kUSxnZW9Db250YWluczooKT0+Vjl0LGdlb0Rpc3RhbmNlOigpPT5CeSxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9PkFMdCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9Pkd5LGdlb0dub21vbmljOigpPT5MTHQsZ2VvR25vbW9uaWNSYXc6KCk9PlZELGdlb0dyYXRpY3VsZTooKT0+U0QsZ2VvR3JhdGljdWxlMTA6KCk9Plc5dCxnZW9JZGVudGl0eTooKT0+Ukx0LGdlb0ludGVycG9sYXRlOigpPT5qOXQsZ2VvTGVuZ3RoOigpPT5iRCxnZW9NZXJjYXRvcjooKT0+RUx0LGdlb01lcmNhdG9yUmF3OigpPT5xeSxnZW9OYXR1cmFsRWFydGgxOigpPT5ETHQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+cUQsZ2VvT3J0aG9ncmFwaGljOigpPT56THQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5HRCxnZW9QYXRoOigpPT5mTHQsZ2VvUHJvamVjdGlvbjooKT0+ZW8sZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9PllULGdlb1JvdGF0aW9uOigpPT5sRCxnZW9TdGVyZW9ncmFwaGljOigpPT5CTHQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+V0QsZ2VvU3RyZWFtOigpPT5NbyxnZW9UcmFuc2Zvcm06KCk9PmRMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PlZMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PllELGhjbDooKT0+aVosaGllcmFyY2h5OigpPT5qVCxoaXN0b2dyYW06KCk9PnhNdCxoc2w6KCk9PlpLLGh0bWw6KCk9Pm9OdCxpbnRlcnBvbGF0ZTooKT0+WjIsaW50ZXJwb2xhdGVBcnJheTooKT0+Zk8saW50ZXJwb2xhdGVCYXNpczooKT0+Y08saW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDooKT0+aE8saW50ZXJwb2xhdGVDb29sOigpPT5FN3QsaW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PnE4dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6KCk9Pnc3dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc6KCk9Pkc4dCxpbnRlcnBvbGF0ZURhdGU6KCk9PmRPLGludGVycG9sYXRlSGNsOigpPT5COHQsaW50ZXJwb2xhdGVIY2xMb25nOigpPT5IOHQsaW50ZXJwb2xhdGVIc2w6KCk9Pk44dCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9PkQ4dCxpbnRlcnBvbGF0ZUluZmVybm86KCk9Pkk3dCxpbnRlcnBvbGF0ZUxhYjooKT0+JFEsaW50ZXJwb2xhdGVNYWdtYTooKT0+UDd0LGludGVycG9sYXRlTnVtYmVyOigpPT5BcyxpbnRlcnBvbGF0ZU9iamVjdDooKT0+bU8saW50ZXJwb2xhdGVQbGFzbWE6KCk9Pkw3dCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PlQ3dCxpbnRlcnBvbGF0ZVJnYjooKT0+ZUMsaW50ZXJwb2xhdGVSZ2JCYXNpczooKT0+bTh0LGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pmc4dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5fOHQsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PmdPLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5UOHQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PkM4dCxpbnRlcnBvbGF0ZVZpcmlkaXM6KCk9PkE3dCxpbnRlcnBvbGF0ZVdhcm06KCk9Pk03dCxpbnRlcnBvbGF0ZVpvb206KCk9Pkw4dCxpbnRlcnJ1cHQ6KCk9PmR6LGludGVydmFsOigpPT5FVnQsaXNvRm9ybWF0OigpPT5nVnQsaXNvUGFyc2U6KCk9Pl9WdCxqc29uOigpPT5zTnQsa2V5czooKT0+c0F0LGxhYjooKT0+bE4sbGluZTooKT0+UncsbGluZVJhZGlhbDooKT0+SWV0LGxpbmtIb3Jpem9udGFsOigpPT5DRnQsbGlua1JhZGlhbDooKT0+UEZ0LGxpbmtWZXJ0aWNhbDooKT0+QUZ0LGxvY2FsOigpPT5tNyxtYXA6KCk9PmJ5LG1hdGNoZXI6KCk9PnU3LG1heDooKT0+VE10LG1lYW46KCk9PkFNdCxtZWRpYW46KCk9PklNdCxtZXJnZTooKT0+a010LG1pbjooKT0+bVIsbW91c2U6KCk9Pm5GdCxuYW1lc3BhY2U6KCk9Pk13LG5hbWVzcGFjZXM6KCk9PkVDLG5lc3Q6KCk9PnJBdCxub3c6KCk9Pll3LHBhY2s6KCk9PlRrdCxwYWNrRW5jbG9zZTooKT0+JEQscGFja1NpYmxpbmdzOigpPT53a3QscGFpcnM6KCk9PmxNdCxwYXJ0aXRpb246KCk9PkFrdCxwYXRoOigpPT5LOHQscGVybXV0ZTooKT0+Tk10LHBpZTooKT0+U0Z0LHBvaW50UmFkaWFsOigpPT5mdixwb2x5Z29uQXJlYTooKT0+UTh0LHBvbHlnb25DZW50cm9pZDooKT0+ZVJ0LHBvbHlnb25Db250YWluczooKT0+bFJ0LHBvbHlnb25IdWxsOigpPT5hUnQscG9seWdvbkxlbmd0aDooKT0+dVJ0LHByZWNpc2lvbkZpeGVkOigpPT5BSXQscHJlY2lzaW9uUHJlZml4OigpPT5JSXQscHJlY2lzaW9uUm91bmQ6KCk9PmtJdCxxdWFkdHJlZTooKT0+eE8scXVhbnRpbGU6KCk9PmR5LHF1YW50aXplOigpPT5ZOHQscXVldWU6KCk9PndPLHJhZGlhbEFyZWE6KCk9PmtldCxyYWRpYWxMaW5lOigpPT5JZXQscmFuZG9tQmF0ZXM6KCk9PnROdCxyYW5kb21FeHBvbmVudGlhbDooKT0+ck50LHJhbmRvbUlyd2luSGFsbDooKT0+TU8scmFuZG9tTG9nTm9ybWFsOigpPT5KUnQscmFuZG9tTm9ybWFsOigpPT5TTyxyYW5kb21Vbmlmb3JtOigpPT5LUnQscmFuZ2U6KCk9PmhSLHJlcXVlc3Q6KCk9PkoyLHJnYjooKT0+S0sscmliYm9uOigpPT5LQ3Qsc2NhbGVCYW5kOigpPT5jQyxzY2FsZUlkZW50aXR5OigpPT5xTyxzY2FsZUltcGxpY2l0OigpPT5rTyxzY2FsZUxpbmVhcjooKT0+VU8sc2NhbGVMb2c6KCk9PldPLHNjYWxlT3JkaW5hbDooKT0+bncsc2NhbGVQb2ludDooKT0+WU50LHNjYWxlUG93OigpPT5fQyxzY2FsZVF1YW50aWxlOigpPT5ZTyxzY2FsZVF1YW50aXplOigpPT5qTyxzY2FsZVNlcXVlbnRpYWw6KCk9Pmk3LHNjYWxlU3FydDooKT0+YU90LHNjYWxlVGhyZXNob2xkOigpPT5YTyxzY2FsZVRpbWU6KCk9Pmg3dCxzY2FsZVV0YzooKT0+Zjd0LHNjYW46KCk9Pk9NdCxzY2hlbWVDYXRlZ29yeTEwOigpPT5kN3Qsc2NoZW1lQ2F0ZWdvcnkyMDooKT0+eDd0LHNjaGVtZUNhdGVnb3J5MjBiOigpPT5nN3Qsc2NoZW1lQ2F0ZWdvcnkyMGM6KCk9Pnk3dCxzZWxlY3Q6KCk9PmQ3LHNlbGVjdEFsbDooKT0+b0Z0LHNlbGVjdGlvbjooKT0+UXp0LHNlbGVjdG9yOigpPT5FdyxzZWxlY3RvckFsbDooKT0+Yzcsc2V0OigpPT5vQXQsc2h1ZmZsZTooKT0+Rk10LHN0YWNrOigpPT53QnQsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PlRCdCxzdGFja09mZnNldEV4cGFuZDooKT0+TUJ0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+UnUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5BQnQsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PklCdCxzdGFja09yZGVyQXNjZW5kaW5nOigpPT5ENyxzdGFja09yZGVyRGVzY2VuZGluZzooKT0+a0J0LHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9Pk5CdCxzdGFja09yZGVyTm9uZTooKT0+TnUsc3RhY2tPcmRlclJldmVyc2U6KCk9Pk9CdCxzdHJhdGlmeTooKT0+a2t0LHN0eWxlOigpPT5fZXQsc3VtOigpPT5ITXQsc3ltYm9sOigpPT5ORnQsc3ltYm9sQ2lyY2xlOigpPT5SQyxzeW1ib2xDcm9zczooKT0+Uzcsc3ltYm9sRGlhbW9uZDooKT0+TTcsc3ltYm9sU3F1YXJlOigpPT5UNyxzeW1ib2xTdGFyOigpPT5FNyxzeW1ib2xUcmlhbmdsZTooKT0+Qzcsc3ltYm9sV3llOigpPT5BNyxzeW1ib2xzOigpPT5SRnQsdGV4dDooKT0+Y050LHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM6KCk9PndNdCx0aHJlc2hvbGRTY290dDooKT0+TU10LHRocmVzaG9sZFN0dXJnZXM6KCk9PnBSLHRpY2tJbmNyZW1lbnQ6KCk9PmskLHRpY2tTdGVwOigpPT5mUix0aWNrczooKT0+dk10LHRpbWVEYXk6KCk9PlpCdCx0aW1lRGF5czooKT0+SkJ0LHRpbWVGb3JtYXQ6KCk9PndydCx0aW1lRm9ybWF0RGVmYXVsdExvY2FsZTooKT0+WDcsdGltZUZvcm1hdExvY2FsZTooKT0+WUMsdGltZUZyaWRheTooKT0+b3J0LHRpbWVGcmlkYXlzOigpPT5pSHQsdGltZUhvdXI6KCk9PmpCdCx0aW1lSG91cnM6KCk9PlhCdCx0aW1lSW50ZXJ2YWw6KCk9PlNyLHRpbWVNaWxsaXNlY29uZDooKT0+WmV0LHRpbWVNaWxsaXNlY29uZHM6KCk9PkpldCx0aW1lTWludXRlOigpPT5xQnQsdGltZU1pbnV0ZXM6KCk9PkdCdCx0aW1lTW9uZGF5OigpPT5lcnQsdGltZU1vbmRheXM6KCk9PnRIdCx0aW1lTW9udGg6KCk9PmxIdCx0aW1lTW9udGhzOigpPT5jSHQsdGltZVBhcnNlOigpPT5TcnQsdGltZVNhdHVyZGF5OigpPT5hcnQsdGltZVNhdHVyZGF5czooKT0+b0h0LHRpbWVTZWNvbmQ6KCk9PlFldCx0aW1lU2Vjb25kczooKT0+dHJ0LHRpbWVTdW5kYXk6KCk9Pkg3LHRpbWVTdW5kYXlzOigpPT5zcnQsdGltZVRodXJzZGF5OigpPT5pcnQsdGltZVRodXJzZGF5czooKT0+bkh0LHRpbWVUdWVzZGF5OigpPT5ycnQsdGltZVR1ZXNkYXlzOigpPT5lSHQsdGltZVdlZG5lc2RheTooKT0+bnJ0LHRpbWVXZWRuZXNkYXlzOigpPT5ySHQsdGltZVdlZWs6KCk9Pkg3LHRpbWVXZWVrczooKT0+c3J0LHRpbWVZZWFyOigpPT5oSHQsdGltZVllYXJzOigpPT5mSHQsdGltZW91dDooKT0+U1Z0LHRpbWVyOigpPT5DcnQsdGltZXJGbHVzaDooKT0+QXJ0LHRvdWNoOigpPT5zRnQsdG91Y2hlczooKT0+Y0Z0LHRyYW5zaXRpb246KCk9PlR6LHRyYW5zcG9zZTooKT0+Z1IsdHJlZTooKT0+Tmt0LHRyZWVtYXA6KCk9Pk9rdCx0cmVlbWFwQmluYXJ5OigpPT5Ga3QsdHJlZW1hcERpY2U6KCk9PmxmLHRyZWVtYXBSZXNxdWFyaWZ5OigpPT5Va3QsdHJlZW1hcFNsaWNlOigpPT53Zyx0cmVlbWFwU2xpY2VEaWNlOigpPT5Ia3QsdHJlZW1hcFNxdWFyaWZ5OigpPT50Tyx0c3Y6KCk9Pm1OdCx0c3ZGb3JtYXQ6KCk9PlNQdCx0c3ZGb3JtYXRSb3dzOigpPT5NUHQsdHN2UGFyc2U6KCk9PmJQdCx0c3ZQYXJzZVJvd3M6KCk9PndQdCx1dGNEYXk6KCk9PlNIdCx1dGNEYXlzOigpPT5NSHQsdXRjRm9ybWF0OigpPT5qQyx1dGNGcmlkYXk6KCk9PnBydCx1dGNGcmlkYXlzOigpPT5JSHQsdXRjSG91cjooKT0+dkh0LHV0Y0hvdXJzOigpPT54SHQsdXRjTWlsbGlzZWNvbmQ6KCk9PlpldCx1dGNNaWxsaXNlY29uZHM6KCk9PkpldCx1dGNNaW51dGU6KCk9Pm1IdCx1dGNNaW51dGVzOigpPT5nSHQsdXRjTW9uZGF5OigpPT5jcnQsdXRjTW9uZGF5czooKT0+VEh0LHV0Y01vbnRoOigpPT5OSHQsdXRjTW9udGhzOigpPT5ESHQsdXRjUGFyc2U6KCk9PlhDLHV0Y1NhdHVyZGF5OigpPT5kcnQsdXRjU2F0dXJkYXlzOigpPT5MSHQsdXRjU2Vjb25kOigpPT5RZXQsdXRjU2Vjb25kczooKT0+dHJ0LHV0Y1N1bmRheTooKT0+VjcsdXRjU3VuZGF5czooKT0+bXJ0LHV0Y1RodXJzZGF5OigpPT5mcnQsdXRjVGh1cnNkYXlzOigpPT5QSHQsdXRjVHVlc2RheTooKT0+dXJ0LHV0Y1R1ZXNkYXlzOigpPT5DSHQsdXRjV2VkbmVzZGF5OigpPT5ocnQsdXRjV2VkbmVzZGF5czooKT0+QUh0LHV0Y1dlZWs6KCk9PlY3LHV0Y1dlZWtzOigpPT5tcnQsdXRjWWVhcjooKT0+ekh0LHV0Y1llYXJzOigpPT5GSHQsdmFsdWVzOigpPT5jQXQsdmFyaWFuY2U6KCk9PmxSLHZlcnNpb246KCk9PmlNdCx2b3Jvbm9pOigpPT5ER3Qsd2luZG93OigpPT5Ddyx4bWw6KCk9PmhOdCx6aXA6KCk9PlVNdCx6b29tOigpPT5xanQsem9vbUlkZW50aXR5OigpPT5oUyx6b29tVHJhbnNmb3JtOigpPT5hRn0pO3ZhciBFcj1NKCgpPT57b010KCk7R010KCk7dEV0KCk7eEN0KCk7SkN0KCk7cEF0KCk7UEF0KCk7TkF0KCk7cFB0KCk7VFB0KCk7aTZ0KCk7Z0l0KCk7Tkl0KCk7cUx0KCk7R2t0KCk7WDh0KCk7Sjh0KCk7ZlJ0KCk7R1J0KCk7JFJ0KCk7aU50KCk7X050KCk7Tjd0KCk7aEZ0KCk7RkJ0KCk7SEh0KCk7dlZ0KCk7Q1Z0KCk7X0d0KCk7ekd0KCk7V2p0KCl9KTt2YXIgJGp0PUgoWGp0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYanQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZanQ9KEVyKCksVXQoTXIpKSxXZz1ZanQsamp0PVlqdDtmdW5jdGlvbiBXRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5hdHRyKGkscltpXSl9KX1mdW5jdGlvbiBZRGUoZSx0KXtmb3IodmFyIHIgaW4gdCllLmF0dHIocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBqRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1dEZTpZRGUpKHRoaXMsZSl9ZnVuY3Rpb24gWERlKGUsdCxyKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBvIGluIG4paS5zdHlsZShvLG5bb10scil9KX1mdW5jdGlvbiAkRGUoZSx0LHIpe2Zvcih2YXIgbiBpbiB0KWUuc3R5bGUobix0W25dLHIpO3JldHVybiBlfWZ1bmN0aW9uIEtEZShlLHQpe3JldHVybih0eXBlb2YgZT09ImZ1bmN0aW9uIj9YRGU6JERlKSh0aGlzLGUsdD09bnVsbD8iIjp0KX1mdW5jdGlvbiBaRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5wcm9wZXJ0eShpLHJbaV0pfSl9ZnVuY3Rpb24gSkRlKGUsdCl7Zm9yKHZhciByIGluIHQpZS5wcm9wZXJ0eShyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIFFEZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/WkRlOkpEZSkodGhpcyxlKX1mdW5jdGlvbiB0T2UoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcykudHJhbnNpdGlvbihlKTtmb3IodmFyIGkgaW4gciluLmF0dHIoaSxyW2ldKX0pfWZ1bmN0aW9uIGVPZShlLHQpe2Zvcih2YXIgciBpbiB0KWUuYXR0cihyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIHJPZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/dE9lOmVPZSkodGhpcyxlKX1mdW5jdGlvbiBuT2UoZSx0LHIpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpPVdnLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKGUpO2Zvcih2YXIgbyBpbiBuKWkuc3R5bGUobyxuW29dLHIpfSl9ZnVuY3Rpb24gaU9lKGUsdCxyKXtmb3IodmFyIG4gaW4gdCllLnN0eWxlKG4sdFtuXSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBvT2UoZSx0KXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/bk9lOmlPZSkodGhpcyxlLHQ9PW51bGw/IiI6dCl9V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1qRGU7V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9S0RlO1dnLnNlbGVjdGlvbi5wcm90b3R5cGUucHJvcGVydGllcz1RRGU7amp0LnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPXJPZTtqanQudHJhbnNpdGlvbi5wcm90b3R5cGUuc3R5bGVzPW9PZX0pO3ZhciBZZz1IKGlpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS2p0PShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gYU9lKGUpe2lmKGUuYXR0cnM9PW51bGwpaWYoZS5ub2Rlcz09bnVsbCl7dmFyIHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3QucHVzaCh0aGlzKX0pLEtqdC5zZWxlY3RBbGwodCl9ZWxzZSByZXR1cm4gS2p0LnNlbGVjdEFsbChlLm5vZGVzKCkpO2Vsc2UgcmV0dXJuIGV9aWl0LmNvZXJjZUV4dGVybmFsRDM9YU9lfSk7dmFyIElmPUgob2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2Z1bmN0aW9uIHNPZShlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyXT1yLHR9LHt9KX1vaXQubWFrZUVudW09c09lfSk7dmFyIEpqdD1IKGxGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRyPShJXygpLFV0KEJ2dCkpLGxPZT1ZZygpLGNPZT1JZigpLFpqdD17bGluZWFyOmRyLmVhc2VMaW5lYXIscXVhZDpkci5lYXNlUXVhZCxxdWFkSW46ZHIuZWFzZVF1YWRJbixxdWFkT3V0OmRyLmVhc2VRdWFkT3V0LHF1YWRJbk91dDpkci5lYXNlUXVhZEluT3V0LGN1YmljOmRyLmVhc2VDdWJpYyxjdWJpY0luOmRyLmVhc2VDdWJpY0luLGN1YmljT3V0OmRyLmVhc2VDdWJpY091dCxjdWJpY0luT3V0OmRyLmVhc2VDdWJpY0luT3V0LHBvbHk6ZHIuZWFzZVBvbHkscG9seUluOmRyLmVhc2VQb2x5SW4scG9seU91dDpkci5lYXNlUG9seU91dCxwb2x5SW5PdXQ6ZHIuZWFzZVBvbHlJbk91dCxzaW46ZHIuZWFzZVNpbixzaW5Jbjpkci5lYXNlU2luSW4sc2luT3V0OmRyLmVhc2VTaW5PdXQsc2luSW5PdXQ6ZHIuZWFzZVNpbkluT3V0LGV4cDpkci5lYXNlRXhwLGV4cEluOmRyLmVhc2VFeHBJbixleHBPdXQ6ZHIuZWFzZUV4cE91dCxleHBJbk91dDpkci5lYXNlRXhwSW5PdXQsY2lyY2xlOmRyLmVhc2VDaXJjbGUsY2lyY2xlSW46ZHIuZWFzZUNpcmNsZUluLGNpcmNsZU91dDpkci5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmRyLmVhc2VDaXJjbGVJbk91dCxib3VuY2U6ZHIuZWFzZUJvdW5jZSxib3VuY2VJbjpkci5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmRyLmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6ZHIuZWFzZUJvdW5jZUluT3V0LGJhY2s6ZHIuZWFzZUJhY2ssYmFja0luOmRyLmVhc2VCYWNrSW4sYmFja091dDpkci5lYXNlQmFja091dCxiYWNrSW5PdXQ6ZHIuZWFzZUJhY2tJbk91dCxlbGFzdGljOmRyLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpkci5lYXNlRWxhc3RpY0luLGVsYXN0aWNPdXQ6ZHIuZWFzZUVsYXN0aWNPdXQsZWxhc3RpY0luT3V0OmRyLmVhc2VFbGFzdGljSW5PdXR9O2xGLkVhc2VOYW1lPWNPZS5tYWtlRW51bShbImxpbmVhciIsInF1YWQiLCJxdWFkSW4iLCJxdWFkT3V0IiwicXVhZEluT3V0IiwiY3ViaWMiLCJjdWJpY0luIiwiY3ViaWNPdXQiLCJjdWJpY0luT3V0IiwicG9seSIsInBvbHlJbiIsInBvbHlPdXQiLCJwb2x5SW5PdXQiLCJzaW4iLCJzaW5JbiIsInNpbk91dCIsInNpbkluT3V0IiwiZXhwIiwiZXhwSW4iLCJleHBPdXQiLCJleHBJbk91dCIsImNpcmNsZSIsImNpcmNsZUluIiwiY2lyY2xlT3V0IiwiY2lyY2xlSW5PdXQiLCJib3VuY2UiLCJib3VuY2VJbiIsImJvdW5jZU91dCIsImJvdW5jZUluT3V0IiwiYmFjayIsImJhY2tJbiIsImJhY2tPdXQiLCJiYWNrSW5PdXQiLCJlbGFzdGljIiwiZWxhc3RpY0luIiwiZWxhc3RpY091dCIsImVsYXN0aWNJbk91dCJdKTt2YXIgdU9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3N0YXJ0RGVsYXk9ZS5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcER1cmF0aW9uPWUuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcERlbGF5PWUuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUyx0aGlzLl9tYXhUb3RhbER1cmF0aW9uPWUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUyx0aGlzLl9lYXNpbmdNb2RlPWUuX0RFRkFVTFRfRUFTSU5HX01PREV9cmV0dXJuIGUucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHQpO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStyKk1hdGgubWF4KHQtMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfSxlLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpczt0PWxPZS5jb2VyY2VFeHRlcm5hbEQzKHQpO3ZhciBpPXQuc2l6ZSgpLG89dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheShpKTtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZWFzZSh0aGlzLl9nZXRFYXNlRmFjdG9yeSgpKS5kdXJhdGlvbih0aGlzLnN0ZXBEdXJhdGlvbigpKS5kZWxheShmdW5jdGlvbihhLHMpe3JldHVybiBuLnN0YXJ0RGVsYXkoKStvKnN9KS5hdHRycyhyKX0sZS5wcm90b3R5cGUuc3RhcnREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9zdGFydERlbGF5Oih0aGlzLl9zdGFydERlbGF5PXQsdGhpcyl9LGUucHJvdG90eXBlLnN0ZXBEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9NYXRoLm1pbih0aGlzLl9zdGVwRHVyYXRpb24sdGhpcy5fbWF4VG90YWxEdXJhdGlvbik6KHRoaXMuX3N0ZXBEdXJhdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fc3RlcERlbGF5Oih0aGlzLl9zdGVwRGVsYXk9dCx0aGlzKX0sZS5wcm90b3R5cGUubWF4VG90YWxEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhUb3RhbER1cmF0aW9uOih0aGlzLl9tYXhUb3RhbER1cmF0aW9uPXQsdGhpcyl9LGUucHJvdG90eXBlLmVhc2luZ01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZWFzaW5nTW9kZToodGhpcy5fZWFzaW5nTW9kZT10LHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0RWFzZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVhc2luZ01vZGUoKTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPVpqdFt0XTtyZXR1cm4gcj09bnVsbD9aanQubGluZWFyOnJ9ZWxzZSByZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtyPU1hdGgubWF4KHIsMCk7dmFyIG49ci9NYXRoLm1heCh0LTEsMSk7cmV0dXJuIE1hdGgubWluKHRoaXMuc3RlcERlbGF5KCksbil9LGUuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTPTAsZS5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDAsZS5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1LGUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz0xLzAsZS5fREVGQVVMVF9FQVNJTkdfTU9ERT0iZXhwT3V0IixlfSgpO2xGLkVhc2luZz11T2V9KTt2YXIgUWp0PUgoYWl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoT2U9WWcoKSxmT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1oT2UuY29lcmNlRXh0ZXJuYWxEMyh0KSx0LmF0dHJzKHIpfSxlfSgpO2FpdC5OdWxsPWZPZX0pO3ZhciBMZj1IKGNGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHRYdD0oZGUoKSxVdChwZSkpO3RYdC5fX2V4cG9ydFN0YXIoSmp0KCksY0YpO3RYdC5fX2V4cG9ydFN0YXIoUWp0KCksY0YpfSk7dmFyIGVYdD1IKHNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcE9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmNhY2hlPXt9LHRoaXMuY29tcHV0ZT10fXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmNhY2hlW3RdPXRoaXMuY29tcHV0ZSh0KSksdGhpcy5jYWNoZVt0XX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYWNoZT17fSx0aGlzfSxlfSgpO3NpdC5DYWNoZT1wT2V9KTt2YXIgclh0PUgobGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFycmF5RXE9ZnVuY3Rpb24odCxyKXtpZih0PT1udWxsfHxyPT1udWxsKXJldHVybiB0PT09cjtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0hPT1yW25dKXJldHVybiExO3JldHVybiEwfSxlLm9iakVxPWZ1bmN0aW9uKHQscil7aWYodD09bnVsbHx8cj09bnVsbClyZXR1cm4gdD09PXI7dmFyIG49T2JqZWN0LmtleXModCkuc29ydCgpLGk9T2JqZWN0LmtleXMocikuc29ydCgpLG89bi5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHRbc119KSxhPWkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiByW3NdfSk7cmV0dXJuIGUuYXJyYXlFcShuLGkpJiZlLmFycmF5RXEobyxhKX0sZS5zdHJpY3RFcT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09cn0sZS5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtpZih0PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8hPW51bGwpZm9yKHZhciBhIGluIG8pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sYSkmJihpW2FdPW9bYV0pfSksaX0sZX0oKTtsaXQuTWV0aG9kcz1kT2V9KTt2YXIgblh0PUgoY2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmNvbWJpbmVXaGl0ZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1sgXHRdKy9nLCIgIil9LGUuaXNOb3RFbXB0eVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC50cmltKCkhPT0iIn0sZS50cmltU3RhcnQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKSxpPXI/ZnVuY3Rpb24obyl7cmV0dXJuIG8uc3BsaXQocikuc29tZShlLmlzTm90RW1wdHlTdHJpbmcpfTplLmlzTm90RW1wdHlTdHJpbmc7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkobythKT9vK2E6b30sIiIpfSxlLnRyaW1FbmQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKTtyZXR1cm4gbi5yZXZlcnNlKCksbj1lLnRyaW1TdGFydChuLmpvaW4oIiIpLHIpLnNwbGl0KCIiKSxuLnJldmVyc2UoKSxuLmpvaW4oIiIpfSxlfSgpO2NpdC5TdHJpbmdNZXRob2RzPW1PZX0pO3ZhciBpWHQ9SCh1aXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLldvcmREaXZpZGVyUmVnRXhwPW5ldyBSZWdFeHAoIlxcVyIpLHRoaXMuV2hpdGVzcGFjZVJlZ0V4cD1uZXcgUmVnRXhwKCJcXHMiKX1yZXR1cm4gZS5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztyZXR1cm4gdC5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4uc2xpY2UoMCwtMSkuY29uY2F0KHIuc2hvdWxkQ3JlYXRlTmV3VG9rZW4obltuLmxlbmd0aC0xXSxpKSl9LFsiIl0pfSxlLnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LHIpe2lmKCF0KXJldHVybltyXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qocik/W3Qrcl06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KHIpP1t0LHJdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09cj9bdCtyXTpbdCxyXTpbdCtyXX0sZX0oKTt1aXQuVG9rZW5pemVyPWdPZX0pO3ZhciBwUz1IKHVGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGhGKGUpe2Zvcih2YXIgdCBpbiBlKXVGLmhhc093blByb3BlcnR5KHQpfHwodUZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtoRihlWHQoKSk7aEYoclh0KCkpO2hGKG5YdCgpKTtoRihpWHQoKSl9KTt2YXIgYVh0PUgoaGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvWHQ9cFMoKSxfT2U9e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifSxmRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1yLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sZS5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LGUucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LHIsbixpLG8pe2lmKGk9PT12b2lkIDAmJihpPXt9KSxpPW9YdC5NZXRob2RzLmRlZmF1bHRzKHt9LF9PZSxpKSxlLlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2YoaS50ZXh0Um90YXRpb24pPT09LTEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIraS50ZXh0Um90YXRpb24rIi4gU3VwcG9ydGVkIHJvdGF0aW9ucyBhcmUgIitlLlN1cHBvcnRlZFJvdGF0aW9uLmpvaW4oIiwgIikpO2lmKGkudGV4dFNoZWFyIT1udWxsJiZpLnRleHRTaGVhcjwtODB8fGkudGV4dFNoZWFyPjgwKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK2kudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIGE9TWF0aC5hYnMoTWF0aC5hYnMoaS50ZXh0Um90YXRpb24pLTkwKT40NSxzPWE/cjpuLGw9YT9uOnIsYz1pLnRleHRTaGVhcix1PWMqTWF0aC5QSS8xODAsaD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGY9aCpNYXRoLnRhbih1KSxwPXMvTWF0aC5jb3ModSktTWF0aC5hYnMoZiksZD1sKk1hdGguY29zKHUpLGc9b1h0LlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UodCksXz10aGlzLl93cmFwcGVyP3RoaXMuX3dyYXBwZXIud3JhcChnLHRoaXMuX21lYXN1cmVyLHAsZCkud3JhcHBlZFRleHQ6Zyx5PV8uc3BsaXQoYApgKSx4PWUuWE9mZnNldEZhY3RvcltpLnhBbGlnbl0qcCpNYXRoLnNpbih1KSxiPWUuWU9mZnNldEZhY3RvcltpLnlBbGlnbl0qKGQteS5sZW5ndGgqaCksUz14LWIsQz1bMCwwXSxQPWkudGV4dFJvdGF0aW9uK2M7c3dpdGNoKGkudGV4dFJvdGF0aW9uKXtjYXNlIDkwOkM9W3IrUywwXTticmVhaztjYXNlLTkwOkM9Wy1TLG5dO2JyZWFrO2Nhc2UgMTgwOkM9W3IsbitTXTticmVhaztkZWZhdWx0OkM9WzAsLVNdO2JyZWFrfXZhciBrPXRoaXMuX3BlbkZhY3RvcnkuY3JlYXRlUGVuKHQse3RyYW5zbGF0ZTpDLHJvdGF0ZTpQfSxvKTt0aGlzLndyaXRlTGluZXMoeSxrLHAsaCxmLGkueEFsaWduKSxrLmRlc3Ryb3khPW51bGwmJmsuZGVzdHJveSgpfSxlLnByb3RvdHlwZS53cml0ZUxpbmVzPWZ1bmN0aW9uKHQscixuLGksbyxhKXt0LmZvckVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1vPjA/KGwrMSkqbzpsKm87ci53cml0ZShzLG4sYSxjLChsKzEpKmkpfSl9LGV9KCk7ZkYuWE9mZnNldEZhY3Rvcj17Y2VudGVyOi41LGxlZnQ6MCxyaWdodDoxfTtmRi5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9O2ZGLlN1cHBvcnRlZFJvdGF0aW9uPVstOTAsMCwxODAsOTBdO2hpdC5Xcml0ZXI9ZkZ9KTt2YXIgRkE9SChwRj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5T2UoZSl7Zm9yKHZhciB0IGluIGUpcEYuaGFzT3duUHJvcGVydHkodCl8fChwRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkocEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3lPZShhWHQoKSl9KTt2YXIgZml0PUgoZEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gZS5hZGRDbGFzc2VzLmFwcGx5KGUsW2ldLmNvbmNhdChyKSksaX0sZS5hZGRDbGFzc2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3I9ci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGkhPW51bGx9KSx0LmNsYXNzTGlzdCE9bnVsbD9yLmZvckVhY2goZnVuY3Rpb24oaSl7dC5jbGFzc0xpc3QuYWRkKGkpfSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixyLmpvaW4oIiAiKSl9LGUuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtkRi5IdG1sVXRpbHM9QkE7dmFyIHZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPXIsdGhpcy5hZGRUaXRsZT1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGE9QkEuYXBwZW5kKGkuZWxlbWVudCwic3BhbiIsInRleHQtdG1wIixpLmNsYXNzTmFtZSk7YS50ZXh0Q29udGVudD1vO3ZhciBzPUJBLmdldERpbWVuc2lvbnMoYSk7cmV0dXJuIGkuZWxlbWVudC5yZW1vdmVDaGlsZChhKSxzfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9QkEuYXBwZW5kKHMsImRpdiIsInRleHQtYmxvY2siLGkuY2xhc3NOYW1lKTtyZXR1cm4gbC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGwuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwgLTFlbSkgIisoInRyYW5zbGF0ZSgiK2EudHJhbnNsYXRlWzBdKyJweCwgIithLnRyYW5zbGF0ZVsxXSsicHgpICIpKygicm90YXRlKCIrYS5yb3RhdGUrImRlZykiKSxsLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0iMCAxLjJlbSIsaS5hZGRUaXRsZSYmbC5zZXRBdHRyaWJ1dGUoInRpdGxlIixvKSxpLmNyZWF0ZUh0bWxMaW5lUGVuKGwpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0QWRkVGl0bGU9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZT10fSxlLnByb3RvdHlwZS5jcmVhdGVIdG1sTGluZVBlbj1mdW5jdGlvbih0KXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz1CQS5hcHBlbmQodCwiZGl2IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc3R5bGUud2lkdGg9bisicHgiLHMuc3R5bGUudGV4dEFsaWduPWkscy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIixzLnN0eWxlLnRvcD1hKyJweCIscy5zdHlsZS5sZWZ0PW8rInB4In19fSxlfSgpO2RGLkh0bWxDb250ZXh0PXZPZX0pO3ZhciBjWHQ9SChtRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB4T2U9RkEoKSxzWHQ9Zml0KCksamc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuU1ZHX05TLHQpO3JldHVybiBzWHQuSHRtbFV0aWxzLmFkZENsYXNzZXMuYXBwbHkoc1h0Lkh0bWxVdGlscyxbaV0uY29uY2F0KHIpKSxpfSxlLmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCQm94KXRyeXt2YXIgcj10LmdldEJCb3goKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtqZy5TVkdfTlM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjttRi5TdmdVdGlscz1qZzt2YXIgbFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9cix0aGlzLmFkZFRpdGxlRWxlbWVudD1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXt2YXIgbz1pLmdldFRleHRFbGVtZW50cyhpLmVsZW1lbnQpLGE9by5wYXJlbnRFbGVtZW50LHM9by5jb250YWluZXJFbGVtZW50LGw9by50ZXh0RWxlbWVudDtyZXR1cm4gZnVuY3Rpb24oYyl7YS5hcHBlbmRDaGlsZChzKSxsLnRleHRDb250ZW50PWM7dmFyIHU9amcuZ2V0RGltZW5zaW9ucyhsKTtyZXR1cm4gYS5yZW1vdmVDaGlsZChzKSx1fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9amcuYXBwZW5kKHMsImciLCJ0ZXh0LWNvbnRhaW5lciIsaS5jbGFzc05hbWUpO2kuYWRkVGl0bGVFbGVtZW50JiYoamcuYXBwZW5kKGwsInRpdGxlIikudGV4dENvbnRlbnQ9byxsLnNldEF0dHJpYnV0ZSgidGl0bGUiLG8pKTt2YXIgYz1qZy5hcHBlbmQobCwiZyIsInRleHQtYXJlYSIpO3JldHVybiBjLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS50cmFuc2xhdGVbMF0rIiwiK2EudHJhbnNsYXRlWzFdKyIpIisoInJvdGF0ZSgiK2Eucm90YXRlKyIpIikpLGkuY3JlYXRlU3ZnTGluZVBlbihjKX19cmV0dXJuIGUucHJvdG90eXBlLnNldEFkZFRpdGxlRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmFkZFRpdGxlRWxlbWVudD10fSxlLnByb3RvdHlwZS5jcmVhdGVTdmdMaW5lUGVuPWZ1bmN0aW9uKHQpe3JldHVybnt3cml0ZTpmdW5jdGlvbihyLG4saSxvLGEpe28rPW4qeE9lLldyaXRlci5YT2Zmc2V0RmFjdG9yW2ldO3ZhciBzPWpnLmFwcGVuZCh0LCJ0ZXh0IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsZS5BbmNob3JNYXBbaV0pLHMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIithKyIpIikscy5zZXRBdHRyaWJ1dGUoInkiLCItMC4yNWVtIil9fX0sZS5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2lmKHQudGFnTmFtZT09PSJ0ZXh0Iil7dmFyIHI9dC5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj10LnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQodCkse2NvbnRhaW5lckVsZW1lbnQ6dCxwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6dH19dmFyIG49dC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobiE9bnVsbCl7dmFyIHI9bi5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj1uLnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQobikse2NvbnRhaW5lckVsZW1lbnQ6bixwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6bn19dmFyIGk9amcuY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6aSxwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6aX19LGV9KCk7bFh0LkFuY2hvck1hcD17Y2VudGVyOiJtaWRkbGUiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07bUYuU3ZnQ29udGV4dD1sWHR9KTt2YXIgdVh0PUgocGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBiT2U9RkEoKSx3T2U9IiM0NDQiLFNPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3I9PT12b2lkIDAmJihyPTEwKSxuPT09dm9pZCAwJiYobj17fSk7dmFyIGk9dGhpczt0aGlzLmN0eD10LHRoaXMubGluZUhlaWdodD1yLHRoaXMuc3R5bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe2kuY3R4LmZvbnQ9aS5zdHlsZS5mb250O3ZhciBhPWkuY3R4Lm1lYXN1cmVUZXh0KG8pLndpZHRoO3JldHVybnt3aWR0aDphLGhlaWdodDppLmxpbmVIZWlnaHR9fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3JldHVybiBzPT1udWxsJiYocz1pLmN0eCkscy5zYXZlKCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGVbMF0sYS50cmFuc2xhdGVbMV0pLHMucm90YXRlKGEucm90YXRlKk1hdGguUEkvMTgwKSxpLmNyZWF0ZUNhbnZhc1BlbihzKX0sdGhpcy5zdHlsZS5maWxsPT09dm9pZCAwJiYodGhpcy5zdHlsZS5maWxsPXdPZSl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZUNhbnZhc1Blbj1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3JldHVybntkZXN0cm95OmZ1bmN0aW9uKCl7dC5yZXN0b3JlKCl9LHdyaXRlOmZ1bmN0aW9uKG4saSxvLGEscyl7YSs9aSpiT2UuV3JpdGVyLlhPZmZzZXRGYWN0b3Jbb10sdC50ZXh0QWxpZ249byxyLnN0eWxlLmZvbnQhPW51bGwmJih0LmZvbnQ9ci5zdHlsZS5mb250KSxyLnN0eWxlLmZpbGwhPW51bGwmJih0LmZpbGxTdHlsZT1yLnN0eWxlLmZpbGwsdC5maWxsVGV4dChuLGEscykpLHIuc3R5bGUuc3Ryb2tlIT1udWxsJiYodC5zdHJva2VTdHlsZT1yLnN0eWxlLmZpbGwsdC5zdHJva2VUZXh0KG4sYSxzKSl9fX0sZX0oKTtwaXQuQ2FudmFzQ29udGV4dD1TT2V9KTt2YXIgbWl0PUgoZ0Y9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZGl0KGUpe2Zvcih2YXIgdCBpbiBlKWdGLmhhc093blByb3BlcnR5KHQpfHwoZ0ZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGdGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtkaXQoY1h0KCkpO2RpdCh1WHQoKSk7ZGl0KGZpdCgpKX0pO3ZhciBfRj1IKGdpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0LmNyZWF0ZVJ1bGVyIT1udWxsP3RoaXMucnVsZXI9dC5jcmVhdGVSdWxlcigpOnRoaXMucnVsZXI9dH1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ZS5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcih0KX0sZX0oKTtoWHQuSEVJR0hUX1RFWFQ9ImJkcHFsIjtnaXQuQWJzdHJhY3RNZWFzdXJlcj1oWHR9KTt2YXIgX2l0PUgoSEE9PnsidXNlIHN0cmljdCI7dmFyIE1PZT1IQSYmSEEuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0W25dPXJbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlGPV9GKCksRU9lPWZ1bmN0aW9uKGUpe01PZSh0LGUpO2Z1bmN0aW9uIHQocixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIGkudXNlR3VhcmRzPW4saX1yZXR1cm4gdC5wcm90b3R5cGUuX2FkZEd1YXJkcz1mdW5jdGlvbihyKXtyZXR1cm4geUYuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtyK3lGLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFR9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzLnVzZUd1YXJkc3x8bnx8L15bXHQgXSQvLnRlc3Qociksbz1pP3RoaXMuX2FkZEd1YXJkcyhyKTpyLGE9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMsbyk7cmV0dXJuIGEud2lkdGgtPWk/Mip0aGlzLmdldEd1YXJkV2lkdGgoKTowLGF9LHQucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT09dm9pZCAwJiYocj15Ri5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKSxyLnRyaW0oKT09PSIiKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgaT1yLnRyaW0oKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbWVhc3VyZUxpbmUobyl9KTtyZXR1cm57aGVpZ2h0OmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8rYS5oZWlnaHR9LDApLHdpZHRoOmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIE1hdGgubWF4KG8sYS53aWR0aCl9LDApfX0sdC5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd1YXJkV2lkdGg9PW51bGwmJih0aGlzLmd1YXJkV2lkdGg9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LHR9KHlGLkFic3RyYWN0TWVhc3VyZXIpO0hBLk1lYXN1cmVyPUVPZX0pO3ZhciB5aXQ9SChWQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVE9lPVZBJiZWQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ09lPV9pdCgpLEFPZT1mdW5jdGlvbihlKXtUT2UodCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9tZWFzdXJlTGluZS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ci5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQ2hhcmFjdGVyKG8pfSk7cmV0dXJue2hlaWdodDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBNYXRoLm1heChvLGEuaGVpZ2h0KX0sMCksd2lkdGg6aS5yZWR1Y2UoZnVuY3Rpb24obyxhKXtyZXR1cm4gbythLndpZHRofSwwKX19LHR9KENPZS5NZWFzdXJlcik7VkEuQ2hhcmFjdGVyTWVhc3VyZXI9QU9lfSk7dmFyIHZpdD1IKFVBPT57InVzZSBzdHJpY3QiO3ZhciBQT2U9VUEmJlVBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJT2U9cFMoKSxMT2U9eWl0KCksa09lPWZ1bmN0aW9uKGUpe1BPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmNhY2hlPW5ldyBJT2UuQ2FjaGUoZnVuY3Rpb24obyl7cmV0dXJuIGkuX21lYXN1cmVDaGFyYWN0ZXJOb3RGcm9tQ2FjaGUobyl9KSxpfXJldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSx0fShMT2UuQ2hhcmFjdGVyTWVhc3VyZXIpO1VBLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXI9a09lfSk7dmFyIGZYdD1IKHFBPT57InVzZSBzdHJpY3QiO3ZhciBST2U9cUEmJnFBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOT2U9cFMoKSxET2U9X0YoKSxPT2U9dml0KCksek9lPWZ1bmN0aW9uKGUpe1JPZSh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uZGltQ2FjaGU9bmV3IE5PZS5DYWNoZShmdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZU5vdEZyb21DYWNoZShpKX0pLG59cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlTm90RnJvbUNhY2hlPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMCYmKHI9RE9lLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLHRoaXMuZGltQ2FjaGUuZ2V0KHIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKSxlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfSx0fShPT2UuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7cUEuQ2FjaGVNZWFzdXJlcj16T2V9KTt2YXIgeGl0PUgodkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gR0EoZSl7Zm9yKHZhciB0IGluIGUpdkYuaGFzT3duUHJvcGVydHkodCl8fCh2Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0dBKF9GKCkpO0dBKHZpdCgpKTtHQShmWHQoKSk7R0EoeWl0KCkpO0dBKF9pdCgpKX0pO3ZhciB3aXQ9SChiaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdBPXBTKCksRk9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWF4TGluZXMoMS8wKSx0aGlzLnRleHRUcmltbWluZygiZWxsaXBzaXMiKSx0aGlzLmFsbG93QnJlYWtpbmdXb3JkcyghMSksdGhpcy5fdG9rZW5pemVyPW5ldyBXQS5Ub2tlbml6ZXIsdGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXI9Ii0ifXJldHVybiBlLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzKX0sZS5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3RleHRUcmltbWluZztpZih0IT09ImVsbGlwc2lzIiYmdCE9PSJub25lIil0aHJvdyBuZXcgRXJyb3IodCsiIC0gdW5zdXBwb3J0ZWQgdGV4dCB0cmltbWluZyBvcHRpb24uIik7cmV0dXJuIHRoaXMuX3RleHRUcmltbWluZz10LHRoaXN9LGUucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9hbGxvd0JyZWFraW5nV29yZHM6KHRoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz10LHRoaXMpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXRoaXM7aT09PXZvaWQgMCYmKGk9MS8wKTt2YXIgYT17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDp0LHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9LHM9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IoaS9yLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpuLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6YX0sbD10LnNwbGl0KGAKYCk7cmV0dXJuIGwucmVkdWNlKGZ1bmN0aW9uKGMsdSxoKXtyZXR1cm4gby5icmVha0xpbmVUb0ZpdFdpZHRoKGMsdSxoIT09bC5sZW5ndGgtMSxyKX0scykud3JhcHBpbmd9LGUucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dGhpczshdC5jYW5GaXRUZXh0JiZ0LndyYXBwaW5nLnRydW5jYXRlZFRleHQhPT0iIiYmKHQud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9YApgKTt2YXIgYT10aGlzLl90b2tlbml6ZXIudG9rZW5pemUocik7dD1hLnJlZHVjZShmdW5jdGlvbihsLGMpe3JldHVybiBvLndyYXBOZXh0VG9rZW4oYyxsLGkpfSx0KTt2YXIgcz1XQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5jdXJyZW50TGluZSk7cmV0dXJuIHQud3JhcHBpbmcubm9MaW5lcys9KyhzIT09IiIpLHQud3JhcHBpbmcubm9MaW5lcz09PXQuYXZhaWxhYmxlTGluZXMmJnRoaXMuX3RleHRUcmltbWluZyE9PSJub25lIiYmbj90LmNhbkZpdFRleHQ9ITE6dC53cmFwcGluZy53cmFwcGVkVGV4dCs9cyx0LmN1cnJlbnRMaW5lPWAKYCx0fSxlLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbih0LHIsbil7dmFyIGk9dGhpcyxvPXQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhLHMpe3JldHVybiBzIT09dC5sZW5ndGgtMT9hK2kuX2JyZWFraW5nQ2hhcmFjdGVyOmF9KTtyZXR1cm4gbi5tZWFzdXJlKHQpLndpZHRoPD1yfHxvLmV2ZXJ5KGZ1bmN0aW9uKGEpe3JldHVybiBuLm1lYXN1cmUoYSkud2lkdGg8PXJ9KX0sZS5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24odCxyLG4pe2lmKHRoaXMuX3RleHRUcmltbWluZz09PSJub25lIilyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOnR9O3ZhciBpPXQuc3Vic3RyaW5nKDApLnRyaW0oKSxvPW4ubWVhc3VyZShpKS53aWR0aCxhPW4ubWVhc3VyZSgiLi4uIikud2lkdGgscz10Lmxlbmd0aD4wJiZ0WzBdPT09YApgP2AKYDoiIjtpZihyPD1hKXt2YXIgbD1hLzMsYz1NYXRoLmZsb29yKHIvbCk7cmV0dXJue3JlbWFpbmluZ1Rva2VuOnQsd3JhcHBlZFRva2VuOnMrIi4uLiIuc3Vic3RyKDAsYyl9fWZvcig7bythPnI7KWk9V0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKGkuc3Vic3RyKDAsaS5sZW5ndGgtMSkpLG89bi5tZWFzdXJlKGkpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpXQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5zdWJzdHJpbmcoaS5sZW5ndGgpLCItIikudHJpbSgpLHdyYXBwZWRUb2tlbjpzK2krIi4uLiJ9fSxlLnByb3RvdHlwZS53cmFwTmV4dFRva2VuPWZ1bmN0aW9uKHQscixuKXtpZighci5jYW5GaXRUZXh0fHxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzfHwhdGhpcy5jYW5GaXRUb2tlbih0LHIuYXZhaWxhYmxlV2lkdGgsbikpcmV0dXJuIHRoaXMuZmluaXNoV3JhcHBpbmcodCxyLG4pO2Zvcih2YXIgaT10O2k7KXt2YXIgbz10aGlzLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGgoaSxyLmN1cnJlbnRMaW5lLHIuYXZhaWxhYmxlV2lkdGgsbik7aWYoci5jdXJyZW50TGluZT1vLmxpbmUsaT1vLnJlbWFpbmluZ1Rva2VuLGkhPW51bGwpaWYoci53cmFwcGluZy5ub0Jyb2tlV29yZHMrPStvLmJyZWFrV29yZCwrK3Iud3JhcHBpbmcubm9MaW5lcyxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzKXt2YXIgYT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUsci5hdmFpbGFibGVXaWR0aCxuKTtyZXR1cm4gci53cmFwcGluZy53cmFwcGVkVGV4dCs9YS53cmFwcGVkVG9rZW4sci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1hLnJlbWFpbmluZ1Rva2VuK2ksci5jdXJyZW50TGluZT1gCmAscn1lbHNlIHIud3JhcHBpbmcud3JhcHBlZFRleHQrPVdBLlN0cmluZ01ldGhvZHMudHJpbUVuZChyLmN1cnJlbnRMaW5lKSxyLmN1cnJlbnRMaW5lPWAKYH1yZXR1cm4gcn0sZS5wcm90b3R5cGUuZmluaXNoV3JhcHBpbmc9ZnVuY3Rpb24odCxyLG4pe2lmKHIuY2FuRml0VGV4dCYmci5hdmFpbGFibGVMaW5lcyE9PXIud3JhcHBpbmcubm9MaW5lcyYmdGhpcy5fdGV4dFRyaW1taW5nIT09Im5vbmUiKXt2YXIgaT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUrdCxyLmF2YWlsYWJsZVdpZHRoLG4pO3Iud3JhcHBpbmcud3JhcHBlZFRleHQrPWkud3JhcHBlZFRva2VuLHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9aS5yZW1haW5pbmdUb2tlbixyLndyYXBwaW5nLm5vQnJva2VXb3Jkcys9KyhpLnJlbWFpbmluZ1Rva2VuLmxlbmd0aDx0Lmxlbmd0aCksci53cmFwcGluZy5ub0xpbmVzKz0rKGkud3JhcHBlZFRva2VuLmxlbmd0aD4wKSxyLmN1cnJlbnRMaW5lPSIifWVsc2Ugci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz10O3JldHVybiByLmNhbkZpdFRleHQ9ITEscn0sZS5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbih0LHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyKSxpLm1lYXN1cmUocit0KS53aWR0aDw9bilyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6cit0LHJlbWFpbmluZ1Rva2VuOm51bGx9O2lmKHQudHJpbSgpPT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJnIudHJpbSgpIT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46dH07Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aCYmaS5tZWFzdXJlKHIrdC5zdWJzdHJpbmcoMCxhKzEpK28pLndpZHRoPD1uOykrK2E7dmFyIHM9IiI7cmV0dXJuIGE+MCYmKHM9bykse2JyZWFrV29yZDphPjAsbGluZTpyK3Quc3Vic3RyaW5nKDAsYSkrcyxyZW1haW5pbmdUb2tlbjp0LnN1YnN0cmluZyhhKX19LGV9KCk7Yml0LldyYXBwZXI9Rk9lfSk7dmFyIGRYdD1IKFlBPT57InVzZSBzdHJpY3QiO3ZhciBCT2U9WUEmJllBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBIT2U9d2l0KCkscFh0PWZ1bmN0aW9uKGUpe0JPZSh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXM7bz09PXZvaWQgMCYmKG89MS8wKTt2YXIgcz1yLnNwbGl0KGAKYCk7aWYocy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBsPWZ1bmN0aW9uKGcpe3JldHVybiBlLnByb3RvdHlwZS53cmFwLmNhbGwoYSxyLG4sZyxvKX0sYz1sKGkpO2lmKGMubm9MaW5lczwyKXJldHVybiBjO2Zvcih2YXIgdT0wLGg9aSxmPTA7Zjx0Lk5PX1dSQVBfSVRFUkFUSU9OUyYmaD51OysrZil7dmFyIHA9KGgrdSkvMixkPWwocCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhjLGQpPyhoPXAsYz1kKTp1PXB9cmV0dXJuIGN9LHQucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHIubm9MaW5lcz09PW4ubm9MaW5lcyYmci50cnVuY2F0ZWRUZXh0PT09bi50cnVuY2F0ZWRUZXh0fSx0fShIT2UuV3JhcHBlcik7cFh0Lk5PX1dSQVBfSVRFUkFUSU9OUz01O1lBLlNpbmdsZUxpbmVXcmFwcGVyPXBYdH0pO3ZhciBTaXQ9SCh4Rj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtWHQoZSl7Zm9yKHZhciB0IGluIGUpeEYuaGFzT3duUHJvcGVydHkodCl8fCh4Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoeEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO21YdChkWHQoKSk7bVh0KHdpdCgpKX0pO3ZhciBnWHQ9SChFaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1pdD1taXQoKSxWT2U9eGl0KCksVU9lPVNpdCgpLHFPZT1GQSgpLEdPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5jb250ZXh0PXQsdGhpcy5tZWFzdXJlcj1uZXcgVk9lLkNhY2hlTWVhc3VyZXIodGhpcy5jb250ZXh0KSx0aGlzLndyYXBwZXI9bmV3IFVPZS5XcmFwcGVyLHRoaXMud3JpdGVyPW5ldyBxT2UuV3JpdGVyKHRoaXMubWVhc3VyZXIsdGhpcy5jb250ZXh0LHRoaXMud3JhcHBlcil9cmV0dXJuIGUuc3ZnPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5TdmdDb250ZXh0KHQscixuKSl9LGUuY2FudmFzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5DYW52YXNDb250ZXh0KHQscixuKSl9LGUuaHRtbD1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBNaXQuSHRtbENvbnRleHQodCxyLG4pKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4saSxvKXt0aGlzLndyaXRlci53cml0ZSh0LHIsbixpLG8pfSxlLnByb3RvdHlwZS5jbGVhck1lYXN1cmVyQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLm1lYXN1cmVyLnJlc2V0KCl9LGV9KCk7RWl0LlR5cGVzZXR0ZXI9R09lfSk7dmFyIF9sPUgoYkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZFMoZSl7Zm9yKHZhciB0IGluIGUpYkYuaGFzT3duUHJvcGVydHkodCl8fChiRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RTKG1pdCgpKTtkUyh4aXQoKSk7ZFMoZ1h0KCkpO2RTKHBTKCkpO2RTKFNpdCgpKTtkUyhGQSgpKX0pO3ZhciBfWHQ9SChtUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobVMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBXT2U9KEVyKCksVXQoTXIpKSxZT2U9d2luZG93LkFycmF5O2Z1bmN0aW9uIGpPZShlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRlbXB0ZWQgdG8gYWRkIGFycmF5cyBvZiB1bmVxdWFsIGxlbmd0aCIpO3JldHVybiBlLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlW25dK3Rbbl19KX1tUy5hZGQ9ak9lO2Z1bmN0aW9uIFhPZShlKXt2YXIgdD1XT2Uuc2V0KCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuaGFzKFN0cmluZyhuKSl8fCh0LmFkZChTdHJpbmcobikpLHIucHVzaChuKSl9KSxyfW1TLnVuaXE9WE9lO2Z1bmN0aW9uICRPZShlKXtyZXR1cm4gWU9lLnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSl9bVMuZmxhdHRlbj0kT2U7ZnVuY3Rpb24gS09lKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPHQ7bisrKXJbbl09dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTplO3JldHVybiByfW1TLmNyZWF0ZUZpbGxlZEFycmF5PUtPZX0pO3ZhciB4WHQ9SChqQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoakEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2WHQ9KEVyKCksVXQoTXIpKSxaT2U9d2luZG93Lk1hdGg7ZnVuY3Rpb24gSk9lKGUsdCl7dmFyIHI9eVh0KGUpKy4wNSxuPXlYdCh0KSsuMDU7cmV0dXJuIHI+bj9yL246bi9yfWpBLmNvbnRyYXN0PUpPZTtmdW5jdGlvbiBRT2UoZSx0KXt2YXIgcj12WHQuY29sb3IoZSkuYnJpZ2h0ZXIodCk7cmV0dXJuIHIucmdiKCkudG9TdHJpbmcoKX1qQS5saWdodGVuQ29sb3I9UU9lO2Z1bmN0aW9uIHQ3ZShlLHQpe2UuY2xhc3NlZCh0LCEwKTt2YXIgcj1lLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIik7aWYocj09PSJ0cmFuc3BhcmVudCIpcmV0dXJuIG51bGw7dmFyIG49L1woKC4rKVwpLy5leGVjKHIpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW5bMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9K2EsbD1zLnRvU3RyaW5nKDE2KTtyZXR1cm4gczwxNj8iMCIrbDpsfSk7aWYoaS5sZW5ndGg9PT00JiZpWzNdPT09IjAwIilyZXR1cm4gbnVsbDt2YXIgbz0iIyIraS5qb2luKCIiKTtyZXR1cm4gZS5jbGFzc2VkKHQsITEpLG99akEuY29sb3JUZXN0PXQ3ZTtmdW5jdGlvbiB5WHQoZSl7dmFyIHQ9dlh0LnJnYihlKSxyPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEvMjU1LGE8PS4wMzkyOD9hLzEyLjkyOlpPZS5wb3coKGErLjA1NSkvMS4wNTUsMi40KX0sbj1yKHQuciksaT1yKHQuZyksbz1yKHQuYik7cmV0dXJuIC4yMTI2Km4rLjcxNTIqaSsuMDcyMipvfX0pO3ZhciBDaXQ9SChhbz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYW8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUaXQ9KEVyKCksVXQoTXIpKSxtYT13aW5kb3cuTWF0aDtmdW5jdGlvbiBlN2UoZSx0KXtmb3IodmFyIHI9dDtyIT1udWxsJiZyIT09ZTspcj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT1lfWFvLmNvbnRhaW5zPWU3ZTtmdW5jdGlvbiB3WHQoZSl7dmFyIHQ7dHJ5e3Q9ZS5ub2RlKCkuZ2V0QkJveCgpfWNhdGNoKHIpe3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19cmV0dXJuIHR9YW8uZWxlbWVudEJCb3g9d1h0O2Z1bmN0aW9uIHI3ZShlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4gd1h0KFRpdC5zZWxlY3QoZSkpO2lmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDp0LmxlZnQseTp0LnRvcCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1hby5lbnRpdHlCb3VuZHM9cjdlO2FvLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFlMy82MDtmdW5jdGlvbiBuN2UoZSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSE9bnVsbD93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnNldFRpbWVvdXQoZSxhby5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9YW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGw9bjdlO2Z1bmN0aW9uIGk3ZShlKXt2YXIgdD1lIGluc3RhbmNlb2YgVGl0LnNlbGVjdGlvbj9lLm5vZGUoKTplLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGtmKHIsIndpZHRoIikra2YociwicGFkZGluZy1sZWZ0Iikra2YociwicGFkZGluZy1yaWdodCIpK2tmKHIsImJvcmRlci1sZWZ0LXdpZHRoIikra2YociwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9YW8uZWxlbWVudFdpZHRoPWk3ZTtmdW5jdGlvbiBvN2UoZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIFRpdC5zZWxlY3Rpb24/ZS5ub2RlKCk6ZSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBrZihyLCJoZWlnaHQiKStrZihyLCJwYWRkaW5nLXRvcCIpK2tmKHIsInBhZGRpbmctYm90dG9tIikra2YociwiYm9yZGVyLXRvcC13aWR0aCIpK2tmKHIsImJvcmRlci1ib3R0b20td2lkdGgiKX1hby5lbGVtZW50SGVpZ2h0PW83ZTt2YXIgTGM9IlxccyIsWEE9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKykiLFNYdD0iKD86KD86IitMYysiKyw/IitMYysiKil8KD86LCIrTGMrIiopKSIsYTdlPW5ldyBSZWdFeHAoInRyYW5zbGF0ZSIrTGMrIipcXCgiK0xjKyIqKCIrWEErIikoPzoiK1NYdCsiKCIrWEErIikpPyIrTGMrIipcXCkiKSxzN2U9bmV3IFJlZ0V4cCgicm90YXRlIitMYysiKlxcKCIrTGMrIiooIitYQSsiKSIrTGMrIipcXCkiKSxsN2U9bmV3IFJlZ0V4cCgic2NhbGUiK0xjKyIqXFwoIitMYysiKigiK1hBKyIpKD86IitTWHQrIigiK1hBKyIpKT8iK0xjKyIqXFwpIik7ZnVuY3Rpb24gYzdlKGUpe3ZhciB0PWE3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV0sbj10WzJdLGk9bj09PXZvaWQgMD8wOm47cmV0dXJuWytyLCtpXX1lbHNlIHJldHVyblswLDBdfWFvLmdldFRyYW5zbGF0ZVZhbHVlcz1jN2U7ZnVuY3Rpb24gdTdlKGUpe3ZhciB0PXM3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV07cmV0dXJuK3J9ZWxzZSByZXR1cm4gMH1hby5nZXRSb3RhdGU9dTdlO2Z1bmN0aW9uIGg3ZShlKXt2YXIgdD1sN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdLG49dFsyXTtyZXR1cm5bK3Isbj09bnVsbD8rcjorbl19ZWxzZSByZXR1cm5bMCwwXX1hby5nZXRTY2FsZVZhbHVlcz1oN2U7ZnVuY3Rpb24gZjdlKGUsdCl7cmV0dXJuIShtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LmxlZnQpfHxtYS5jZWlsKGUubGVmdCk+PW1hLmZsb29yKHQucmlnaHQpfHxtYS5mbG9vcihlLmJvdHRvbSk8PW1hLmNlaWwodC50b3ApfHxtYS5jZWlsKGUudG9wKT49bWEuZmxvb3IodC5ib3R0b20pKX1hby5jbGllbnRSZWN0c092ZXJsYXA9ZjdlO2Z1bmN0aW9uIHA3ZShlLHQpe3JldHVybntsZWZ0OmUubGVmdC10LHRvcDplLnRvcC10LHJpZ2h0OmUucmlnaHQrdCxib3R0b206ZS5ib3R0b20rdCx3aWR0aDplLndpZHRoK3QqMixoZWlnaHQ6ZS5oZWlnaHQrdCoyfX1hby5leHBhbmRSZWN0PXA3ZTtmdW5jdGlvbiBkN2UoZSx0KXtyZXR1cm4gbWEuZmxvb3IodC5sZWZ0KTw9bWEuY2VpbChlLmxlZnQpJiZtYS5mbG9vcih0LnRvcCk8PW1hLmNlaWwoZS50b3ApJiZtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LnJpZ2h0KSYmbWEuZmxvb3IoZS5ib3R0b20pPD1tYS5jZWlsKHQuYm90dG9tKX1hby5jbGllbnRSZWN0SW5zaWRlPWQ3ZTtmdW5jdGlvbiBtN2UoZSx0LHIsbil7bj09PXZvaWQgMCYmKG49LjUpO3ZhciBpPWJYdChlKSxvPWJYdCh0KTtyZXR1cm4gci54K3Iud2lkdGg+PWkubWluLW4mJnIueDw9aS5tYXgrbiYmci55K3IuaGVpZ2h0Pj1vLm1pbi1uJiZyLnk8PW8ubWF4K259YW8uaW50ZXJzZWN0c0JCb3g9bTdlO2Z1bmN0aW9uIGJYdChlKXtpZih0eXBlb2YgZT09Im51bWJlciIpe3ZhciB0PWU7cmV0dXJue21pbjp0LG1heDp0fX12YXIgcj1lO2lmKHIgaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4gciYmIm1heCJpbiByKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigiaW5wdXQgJyIrZSsiJyBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gUmFuZ2UiKX1mdW5jdGlvbiBrZihlLHQpe3ZhciByPWUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxuPXBhcnNlRmxvYXQocik7cmV0dXJuIG58fDB9ZnVuY3Rpb24gZzdlKGUpe2Zvcih2YXIgdD1bXTtlJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KXQucHVzaChlKSxlPWUucGFyZW50RWxlbWVudDtyZXR1cm4gdH1hby5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1nN2U7ZnVuY3Rpb24gXzdlKGUpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkscj10LmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8dC5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIHg3ZShyKX1hby5nZXRFbGVtZW50VHJhbnNmb3JtPV83ZTt2YXIgeTdlPS9ebWF0cml4XCgoW14pXSspXCkkLyx2N2U9L1ssIF0rLztmdW5jdGlvbiB4N2UoZSl7aWYoZT09bnVsbHx8ZT09PSJub25lIilyZXR1cm4gbnVsbDt2YXIgdD1lLm1hdGNoKHk3ZSk7aWYodD09bnVsbHx8dC5sZW5ndGg8MilyZXR1cm4gbnVsbDt2YXIgcj10WzFdLnNwbGl0KHY3ZSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KG4pfSk7cmV0dXJuIHIubGVuZ3RoIT02P251bGw6cn19KTt2YXIgQWl0PUgoc289PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU0Y9KEVyKCksVXQoTXIpKSxNWHQ9Q2l0KCksbWQ9d2luZG93Lk1hdGgsYjdlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gdzdlKGUsdCxyKXtyZXR1cm4gbWQubWluKHQscik8PWUmJmU8PW1kLm1heCh0LHIpfXNvLmluUmFuZ2U9dzdlO2Z1bmN0aW9uIFM3ZShlLHQscil7cmV0dXJuIG1kLm1pbihtZC5tYXgodCxlKSxyKX1zby5jbGFtcD1TN2U7ZnVuY3Rpb24gTTdlKGUsdCxyKXt2YXIgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90Om51bGwsaT1uPT1udWxsP3Q6cixvPW49PW51bGw/U0YubWF4KGUpOlNGLm1heChlLG4pO3JldHVybiBvIT09dm9pZCAwP286aX1zby5tYXg9TTdlO2Z1bmN0aW9uIEU3ZShlLHQscil7dmFyIG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsLGk9bj09bnVsbD90OnIsbz1uPT1udWxsP1NGLm1pbihlKTpTRi5taW4oZSxuKTtyZXR1cm4gbyE9PXZvaWQgMD9vOml9c28ubWluPUU3ZTtmdW5jdGlvbiBUN2UoZSl7cmV0dXJuIGUhPT1lfXNvLmlzTmFOPVQ3ZTtmdW5jdGlvbiBDN2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZS1lPDF9c28uaXNWYWxpZE51bWJlcj1DN2U7ZnVuY3Rpb24gQTdlKGUsdCxyKXtpZihyPT09dm9pZCAwJiYocj0xKSxyPT09MCl0aHJvdyBuZXcgRXJyb3IoInN0ZXAgY2Fubm90IGJlIDAiKTtmb3IodmFyIG49bWQubWF4KG1kLmNlaWwoKHQtZSkvciksMCksaT1bXSxvPTA7bzxuOysrbylpW29dPWUrcipvO3JldHVybiBpfXNvLnJhbmdlPUE3ZTtmdW5jdGlvbiBQN2UoZSx0KXtyZXR1cm4gbWQucG93KHQueS1lLnksMikrbWQucG93KHQueC1lLngsMil9c28uZGlzdGFuY2VTcXVhcmVkPVA3ZTtmdW5jdGlvbiBJN2UoZSl7cmV0dXJuIGUvMzYwKm1kLlBJKjJ9c28uZGVncmVlc1RvUmFkaWFucz1JN2U7ZnVuY3Rpb24gTDdlKGUsdCl7cmV0dXJuIHQudG9wTGVmdC54PD1lLngmJnQuYm90dG9tUmlnaHQueD49ZS54JiZ0LnRvcExlZnQueTw9ZS55JiZ0LmJvdHRvbVJpZ2h0Lnk+PWUueX1zby53aXRoaW49TDdlO2Z1bmN0aW9uIGs3ZShlLHQscixuLGksbyxhLHMpe3JldHVybiBlPD1pK2EmJmk8PWUrciYmdDw9bytzJiZvPD10K259c28uYm91bmRzSW50ZXJzZWN0cz1rN2U7ZnVuY3Rpb24gUjdlKGUpe2Zvcih2YXIgdD1NWHQuZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnMoZSkscj1iN2Usbj1udWxsLGk9MCxvPXQ7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV0scz1NWHQuZ2V0RWxlbWVudFRyYW5zZm9ybShhKTtpZihzIT1udWxsKXt2YXIgbD1hLmNsaWVudFdpZHRoLzIsYz1hLmNsaWVudEhlaWdodC8yO3I9d0YocixbbCxjXSkscj1FWHQocixUWHQocykpLHI9d0YocixbLWwsLWNdKX12YXIgdT1hLnNjcm9sbExlZnQsaD1hLnNjcm9sbFRvcDsobj09PW51bGx8fGE9PT1uKSYmKHUtPWEub2Zmc2V0TGVmdCthLmNsaWVudExlZnQsaC09YS5vZmZzZXRUb3ArYS5jbGllbnRUb3Asbj1hLm9mZnNldFBhcmVudCkscj13RihyLFt1LGhdKX1yZXR1cm4gcn1zby5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPVI3ZTtmdW5jdGlvbiBFWHQoZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zby5tdWx0aXBseU1hdHJpeD1FWHQ7ZnVuY3Rpb24gTjdlKGUsdCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLHRbM10sdFs0XStlWzBdLHRbNV0rZVsxXV19c28ucHJlbXVsdGlwbHlUcmFuc2xhdGU9TjdlO2Z1bmN0aW9uIHdGKGUsdCl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVswXSp0WzBdK2VbMl0qdFsxXStlWzRdLGVbMV0qdFswXStlWzNdKnRbMV0rZVs1XV19c28ubXVsdGlwbHlUcmFuc2xhdGU9d0Y7ZnVuY3Rpb24gVFh0KGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07aWYodD09PTApdGhyb3cgbmV3IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2YXIgcj0xL3Q7cmV0dXJuW3IqZVszXSxyKi1lWzFdLHIqLWVbMl0sciplWzBdLHIqKC1lWzNdKmVbNF0rZVsyXSplWzVdKSxyKihlWzFdKmVbNF0rLWVbMF0qZVs1XSldfXNvLmludmVydE1hdHJpeD1UWHQ7ZnVuY3Rpb24gRDdlKGUsdCl7cmV0dXJue3g6ZVswXSp0LngrZVsyXSp0LnkrZVs0XSx5OmVbMV0qdC54K2VbM10qdC55K2VbNV19fXNvLmFwcGx5VHJhbnNmb3JtPUQ3ZX0pO3ZhciBDWHQ9SChNRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLmNlaWwodC5sZW5ndGgvMiksaT0wO2k8bjtpKyspclswXS5pbnNlcnQodFtpXSk7Zm9yKHZhciBpPW47aTx0Lmxlbmd0aDtpKyspclsxXS5pbnNlcnQodFtpXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneVRyaXZpYWw9TzdlO3ZhciB6N2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxyKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxyKX0sZS5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj0wLGk9MCxvPXQubGVuZ3RoLTEsYT10Lmxlbmd0aC0xLHM9MTtzPHQubGVuZ3RoLTE7cysrKXt2YXIgbD10W3NdO2wuYm91bmRzLnhsPnRbb10uYm91bmRzLnhsP289czpsLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49cyksbC5ib3VuZHMueWw+dFthXS5ib3VuZHMueWw/YT1zOmwuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1zKX12YXIgYz1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W29dLmJvdW5kcy54bCksdT1NYXRoLmFicyh0W2ldLmJvdW5kcy55aC10W2FdLmJvdW5kcy55bCksaD1jPnU/W24sb106W2ksYV0sZj1oWzBdLHA9aFsxXTtmPT09cCYmKGY9MCxwPXQubGVuZ3RoLTEpLHJbMF0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWF4KGYscCksMSlbMF0pLHJbMV0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWluKGYscCksMSlbMF0pfSxlLnByb3RvdHlwZS5hZGROZXh0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPW51bGwsaT1udWxsLG89bnVsbCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV0sbD1yWzBdLnVuaW9uQXJlYURpZmZlcmVuY2Uocy5ib3VuZHMpLGM9clsxXS51bmlvbkFyZWFEaWZmZXJlbmNlKHMuYm91bmRzKTsobDxpfHxuPT1udWxsKSYmKG49YSxpPWwsbz1yWzBdKSxjPGkmJihuPWEsaT1jLG89clsxXSl9by5pbnNlcnQodC5zcGxpY2UobiwxKVswXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneUxpbmVhcj16N2V9KTt2YXIgSWl0PUgoZ2Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRjdlPUNYdCgpLEI3ZT01LEg3ZT1uZXcgRjdlLlNwbGl0U3RyYXRlZ3lMaW5lYXIsUmY7KGZ1bmN0aW9uKGUpe2VbZS5QQVNTPTBdPSJQQVNTIixlW2UuRkFJTD0xXT0iRkFJTCIsZVtlLlBBU1NfQU5EX09WRVJXUklURT0yXT0iUEFTU19BTkRfT1ZFUldSSVRFIn0pKFJmPWdkLlF1ZXJ5UHJlZGljYXRlUmVzdWx0fHwoZ2QuUXVlcnlQcmVkaWNhdGVSZXN1bHQ9e30pKTtmdW5jdGlvbiBFRihlLHQscil7dmFyIG49MS8wLGk9MS8wLG89MS8wO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz10KGEuYm91bmRzLGUpLGw9cihhLmJvdW5kcyxlKTtyZXR1cm4gYS52YWx1ZSE9bnVsbD9zPG4/KG49cyxpPXMsbz1sLFJmLlBBU1NfQU5EX09WRVJXUklURSk6cz09PW4/UmYuUEFTUzpSZi5GQUlMOnM+bz9SZi5GQUlMOihpPU1hdGgubWluKHMsaSksbz1NYXRoLm1heChsLG8pLFJmLlBBU1MpfX1nZC5jcmVhdGVNaW5pbWl6aW5nTm9kZVByZWRpY2F0ZT1FRjtmdW5jdGlvbiBQaXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdChuLmJvdW5kcyxlKS10KHIuYm91bmRzLGUpfX1nZC5jcmVhdGVOb2RlU29ydD1QaXQ7dmFyIFY3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0PT09dm9pZCAwJiYodD1CN2UpLHI9PT12b2lkIDAmJihyPUg3ZSksdGhpcy5tYXhOb2RlQ2hpbGRyZW49dCx0aGlzLnNwbGl0U3RyYXRlZ3k9cix0aGlzLnJvb3Q9bmV3IFRGKCEwKSx0aGlzLnNpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yb290PW5ldyBURighMCksdGhpcy5zaXplPTB9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj10aGlzLnJvb3Q7IW4ubGVhZjspbj1uLnN1YnRyZWUodCk7dmFyIGk9VEYudmFsdWVOb2RlKHQscik7Zm9yKG4uaW5zZXJ0KGkpLHRoaXMuc2l6ZSs9MTtuLm92ZXJmbG93KHRoaXMubWF4Tm9kZUNoaWxkcmVuKTspbj1uLnNwbGl0KHRoaXMuc3BsaXRTdHJhdGVneSksbi5wYXJlbnQ9PW51bGwmJih0aGlzLnJvb3Q9bik7cmV0dXJuIGl9LGUucHJvdG90eXBlLmxvY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihyKXtyZXR1cm4gci5jb250YWlucyh0KX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciByPUVGKHQsUWEuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZSxRYS5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2UpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WD1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWCksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WT1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWSksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhyLHQpfSl9LGUucHJvdG90eXBlLmludGVyc2VjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcFgocix0KX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBZKHIsdCl9KX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7dmFyIHI9W107aWYodGhpcy5yb290LmJvdW5kcyE9bnVsbCYmIXQodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHI7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KWZvcih2YXIgaT1uLnNoaWZ0KCksbz0wO288aS5lbnRyaWVzLmxlbmd0aDtvKyspe3ZhciBhPWkuZW50cmllc1tvXTt0KGEuYm91bmRzKSYmKGkubGVhZj9yLnB1c2goYS52YWx1ZSk6bi5wdXNoKGEpKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUucXVlcnlOb2Rlcz1mdW5jdGlvbih0KXt2YXIgcj1bXTtpZih0aGlzLnJvb3QuYm91bmRzIT1udWxsJiZ0KHRoaXMucm9vdCk9PT1SZi5GQUlMKXJldHVybiByO2Zvcih2YXIgbj1bdGhpcy5yb290XTtuLmxlbmd0aD4wOylmb3IodmFyIGk9bi5zaGlmdCgpLG89MDtvPGkuZW50cmllcy5sZW5ndGg7bysrKXt2YXIgYT1pLmVudHJpZXNbb10scz10KGEpO3M9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUmJihyPVtdKSwocz09PVJmLlBBU1N8fHM9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUpJiYoaS5sZWFmP3IucHVzaChhKTpuLnB1c2goYSkpfXJldHVybiByfSxlfSgpO2dkLlJUcmVlPVY3ZTt2YXIgVEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMubGVhZj10LHRoaXMuYm91bmRzPW51bGwsdGhpcy5lbnRyaWVzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy52YWx1ZT1udWxsfXJldHVybiBlLnZhbHVlTm9kZT1mdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBlKCEwKTtyZXR1cm4gbi5ib3VuZHM9dCxuLnZhbHVlPXIsbn0sZS5wcm90b3R5cGUub3ZlcmZsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg+dH0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5wdXNoKHQpLHQucGFyZW50PXRoaXM7Zm9yKHZhciByPXRoaXM7ciE9bnVsbDspci5ib3VuZHM9UWEudW5pb25BbGwoW3IuYm91bmRzLHQuYm91bmRzXSkscj1yLnBhcmVudDtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuZW50cmllcy5pbmRleE9mKHQpO2lmKHI+PTApe3RoaXMuZW50cmllcy5zcGxpY2UociwxKTtmb3IodmFyIG49dGhpcztuIT1udWxsOyluLmJvdW5kcz1RYS51bmlvbkFsbChuLmVudHJpZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLmJvdW5kc30pKSxuPW4ucGFyZW50fXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5zdWJ0cmVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xLzAsbj1udWxsLGk9MDtpPHRoaXMuZW50cmllcy5sZW5ndGg7aSsrKXt2YXIgbz10aGlzLmVudHJpZXNbaV0sYT1vLnVuaW9uQXJlYURpZmZlcmVuY2UodCk7KGE8cnx8YT09PXImJm4hPW51bGwmJm8uZW50cmllcy5sZW5ndGg8bi5lbnRyaWVzLmxlbmd0aCkmJihuPW8pfXJldHVybiBufSxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudCE9bnVsbCYmdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO3ZhciByPVtuZXcgZSh0aGlzLmxlYWYpLG5ldyBlKHRoaXMubGVhZildO3Quc3BsaXQodGhpcy5lbnRyaWVzLHIpO3ZhciBuPXRoaXMucGFyZW50IT1udWxsP3RoaXMucGFyZW50Om5ldyBlKCExKTtyZXR1cm4gbi5pbnNlcnQoclswXSksbi5pbnNlcnQoclsxXSksbi5sZWFmPSExLG59LGUucHJvdG90eXBlLnVuaW9uQXJlYURpZmZlcmVuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKFFhLnVuaW9uKHRoaXMuYm91bmRzLHQpLmFyZWEoKS10aGlzLmJvdW5kcy5hcmVhKCkpfSxlLnByb3RvdHlwZS5tYXhEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWY/MToxK3RoaXMuZW50cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4RGVwdGgoKX0pLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiBNYXRoLm1heCh0LHIpfSl9LGV9KCk7Z2QuUlRyZWVOb2RlPVRGO3ZhciBRYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7dGhpcy54bD10LHRoaXMueWw9cix0aGlzLnhoPW4sdGhpcy55aD1pLHRoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsLHRoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1yZXR1cm4gZS54eXdoPWZ1bmN0aW9uKHQscixuLGkpe3JldHVybiBuZXcgZSh0LHIsdCtuLHIraSl9LGUuZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LngsdC55LHQueCt0LndpZHRoLHQueSt0LmhlaWdodCl9LGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnBvaW50UGFpcih0LnRvcExlZnQsdC5ib3R0b21SaWdodCl9LGUucG9pbnRQYWlyPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKE1hdGgubWluKHQueCxyLngpLE1hdGgubWluKHQueSxyLnkpLE1hdGgubWF4KHQueCxyLngpLE1hdGgubWF4KHQueSxyLnkpKX0sZS5wb2ludHM9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIm5lZWQgYXQgbGVhc3QgMiBwb2ludHMgdG8gY3JlYXRlIGJvdW5kcyIpO3ZhciByPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnh9KSxuPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnl9KTtyZXR1cm4gbmV3IGUoci5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5taW4oaSxvKX0pLG4ucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWluKGksbyl9KSxyLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBNYXRoLm1heChpLG8pfSksbi5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5tYXgoaSxvKX0pKX0sZS51bmlvbj1mdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShNYXRoLm1pbih0LnhsLHIueGwpLE1hdGgubWluKHQueWwsci55bCksTWF0aC5tYXgodC54aCxyLnhoKSxNYXRoLm1heCh0LnloLHIueWgpKX0sZS51bmlvbkFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdD10LmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbH0pLHQubGVuZ3RoPT09MD9udWxsOnQucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUudW5pb24ocixuKX0pfSxlLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbih0LHIpe3JldHVybiBlLmlzQm91bmRzT3ZlcmxhcFgodCxyKSYmZS5pc0JvdW5kc092ZXJsYXBZKHQscil9LGUuaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbih0LHIpe3JldHVybiEodC54aDxyLnhsKSYmISh0LnhsPnIueGgpfSxlLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKHQueWg8ci55bCkmJiEodC55bD5yLnloKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVg9ZnVuY3Rpb24odCxyKXt2YXIgbj10LndpZHRoLzIsaT10LnhsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueC1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWT1mdW5jdGlvbih0LHIpe3ZhciBuPXQuaGVpZ2h0LzIsaT10LnlsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueS1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgodCxyKTtyZXR1cm4gbj09PTA/MDpuK3Qud2lkdGh9LGUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVk9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuPT09MD8wOm4rdC5oZWlnaHR9LGUuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKHQsciksaT1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuKm4raSppfSxlLmRpc3RhbmNlU3F1YXJlZFRvRmFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgodCxyKSxpPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkodCxyKTtyZXR1cm4gbipuK2kqaX0sZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZWFDYWNoZWQ9PW51bGwmJih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpLHRoaXMuYXJlYUNhY2hlZH0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGw8PXQueCYmdGhpcy54aD49dC54JiZ0aGlzLnlsPD10LnkmJnRoaXMueWg+PXQueX0sZX0oKTtnZC5SVHJlZUJvdW5kcz1RYX0pO3ZhciBJWHQ9SChfZD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBWHQ9KEVyKCksVXQoTXIpKSxVN2U9T2UoKSxYZz1GZSgpLHE3ZT1JZigpO19kLklTdGFja2luZ09yZGVyPXE3ZS5tYWtlRW51bShbInRvcGRvd24iLCJib3R0b211cCJdKTt2YXIgUFh0PXdpbmRvdy5NYXRoO2Z1bmN0aW9uIEc3ZShlLHQscixuKXtuPT09dm9pZCAwJiYobj0iYm90dG9tdXAiKTt2YXIgaT1BWHQubWFwKCksbz1BWHQubWFwKCksYT1uZXcgWGcuTWFwO249PT0idG9wZG93biImJihlPWUuc2xpY2UoKSxlLnJldmVyc2UoKSk7Zm9yKHZhciBzPTAsbD1lO3M8bC5sZW5ndGg7cysrKXtmb3IodmFyIGM9bFtzXSx1PW5ldyBYZy5NYXAsaD1jLmRhdGEoKSxmPWgubGVuZ3RoLHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdLGc9dChkLHAsYyksXz1fZC5ub3JtYWxpemVLZXkoZykseT0rcihkLHAsYykseD12b2lkIDAsYj15Pj0wP2k6bztiLmhhcyhfKT8oeD1iLmdldChfKSxiLnNldChfLHgreSkpOih4PTAsYi5zZXQoXyx5KSksdS5zZXQoXyx7b2Zmc2V0OngsdmFsdWU6eSxheGlzVmFsdWU6ZyxvcmlnaW5hbERhdHVtOmQsb3JpZ2luYWxEYXRhc2V0OmMsb3JpZ2luYWxJbmRleDpwfSl9YS5zZXQoYyx1KX1yZXR1cm4gYX1fZC5zdGFjaz1HN2U7ZnVuY3Rpb24gVzdlKGUpe3ZhciB0PW5ldyBYZy5NYXAscj1uZXcgWGcuTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7dmFyIGE9aS5vZmZzZXQraS52YWx1ZSxzPVhnLk1hdGgubWF4KFthLGkub2Zmc2V0XSxpLm9mZnNldCksbD1YZy5NYXRoLm1pbihbYSxpLm9mZnNldF0saS5vZmZzZXQpLGM9aS5heGlzVmFsdWU7dC5oYXMobyk/dC5nZXQobykuZXh0ZW50PHMmJnQuc2V0KG8se2V4dGVudDpzLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSk6dC5zZXQobyx7ZXh0ZW50OnMsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KSxyLmhhcyhvKT9yLmdldChvKS5leHRlbnQ+bCYmci5zZXQobyx7ZXh0ZW50OmwsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KTpyLnNldChvLHtleHRlbnQ6bCxheGlzVmFsdWU6YyxzdGFja2VkRGF0dW06aX0pfSl9KSx7bWF4aW11bUV4dGVudHM6dCxtaW5pbXVtRXh0ZW50czpyfX1fZC5zdGFja2VkRXh0ZW50cz1XN2U7ZnVuY3Rpb24gWTdlKGUsdCxyKXt2YXIgbj1bXTtlLmZvckVhY2goZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9cy5kYXRhKCksYz1sLmxlbmd0aCx1PTA7dTxjO3UrKyl7dmFyIGg9bFt1XTtpZighKHIhPW51bGwmJiFyKGgsdSxzKSkpe3ZhciBmPWEuZ2V0KF9kLm5vcm1hbGl6ZUtleSh0KGgsdSxzKSkpO24ucHVzaChmLnZhbHVlK2Yub2Zmc2V0KX19fSk7dmFyIGk9WGcuTWF0aC5tYXgobiwwKSxvPVhnLk1hdGgubWluKG4sMCk7cmV0dXJuW1BYdC5taW4obywwKSxQWHQubWF4KDAsaSldfV9kLnN0YWNrZWRFeHRlbnQ9WTdlO19kLm5vcm1hbGl6ZUtleT1VN2UubWVtb2l6ZShmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSl9KTt2YXIgJEE9SChDRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ0YsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0NGLlNIT1dfV0FSTklOR1M9ITA7Q0YuQUREX1RJVExFX0VMRU1FTlRTPSEwfSk7dmFyIEFGPUgoZ1M9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgajdlPSRBKCk7ZnVuY3Rpb24gTFh0KGUpeyFqN2UuU0hPV19XQVJOSU5HU3x8Y29uc29sZS53YXJuKGUpfWdTLndhcm49TFh0O2Z1bmN0aW9uIGtYdChlLHQpe2Zvcih2YXIgcj1bXSxuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMl09YXJndW1lbnRzW25dO3JldHVybiB0PT09MD8oZShyKSwtMSk6d2luZG93LnNldFRpbWVvdXQoZSx0LHIpfWdTLnNldFRpbWVvdXQ9a1h0O2Z1bmN0aW9uIFg3ZShlLHQscil7dmFyIG49bnVsbCxpPVtdLG89ZnVuY3Rpb24oKXt0LmFwcGx5KHIsaSl9O3JldHVybiBmdW5jdGlvbigpe2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQobiksbj1rWHQobyxlKX19Z1MuZGVib3VuY2U9WDdlO2Z1bmN0aW9uICQ3ZShlLHQscil7cj09PXZvaWQgMCYmKHI9IiIpLExYdCgiTWV0aG9kICIrZSsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiK3QrIi4gUGxlYXNlIHJlZmVyIHRvIHRoZSByZWxlYXNlIG5vdGVzLiAiK3IpfWdTLmRlcHJlY2F0ZWQ9JDdlfSk7dmFyIFJYdD1IKExpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSzdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9cix0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiBlLnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSxlLnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LHIpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PXIpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PXIpLHRoaXMuZXhpdEluZGV4PXJ9LGUucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PTB8fHIhPXRbbi0xXX0pfSxlfSgpO0xpdC5CdWNrZXQ9SzdlfSk7dmFyIFJpdD1IKGtpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoa2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWjdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuU2V0PT0iZnVuY3Rpb24iP3RoaXMuX2VzNlNldD1uZXcgd2luZG93LlNldDp0aGlzLl92YWx1ZXM9W10sdGhpcy5zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsPyh0aGlzLl9lczZTZXQuYWRkKHQpLHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSx0aGlzKToodGhpcy5oYXModCl8fCh0aGlzLl92YWx1ZXMucHVzaCh0KSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCksdGhpcyl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZTZXQhPW51bGwpe3ZhciByPXRoaXMuX2VzNlNldC5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSxyfXZhciBuPXRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpO3JldHVybiBuIT09LTE/KHRoaXMuX3ZhbHVlcy5zcGxpY2UobiwxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsP3RoaXMuX2VzNlNldC5oYXModCk6dGhpcy5fdmFsdWVzLmluZGV4T2YodCkhPT0tMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2U2V0IT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNlNldC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX3ZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe3QuY2FsbChyLG8sbyxuKX0pfSxlfSgpO2tpdC5TZXQ9WjdlfSk7dmFyIE5YdD1IKE5pdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSjdlPShkZSgpLFV0KHBlKSksUTdlPVJpdCgpLHR6ZT1mdW5jdGlvbihlKXtKN2UuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHI9dGhpcyxuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baV09YXJndW1lbnRzW2ldO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obyl7by5hcHBseShyLG4pfSksdGhpc30sdH0oUTdlLlNldCk7Tml0LkNhbGxiYWNrU2V0PXR6ZX0pO3ZhciBEWHQ9SChEaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRnPUlpdCgpLGV6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9lbnRpdGllcz1bXSx0aGlzLl9ydHJlZT1uZXcgJGcuUlRyZWV9cmV0dXJuIGUucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih0LHIsbil7aWYodGhpcy5fZW50aXRpZXM9dGhpcy5fZW50aXRpZXMuY29uY2F0KHQpLG4hPT12b2lkIDApZm9yKHZhciBpPSRnLlJUcmVlQm91bmRzLmJvdW5kcyhuKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7JGcuUlRyZWVCb3VuZHMuaXNCb3VuZHNPdmVybGFwQm91bmRzKGkscykmJnRoaXMuX3J0cmVlLmluc2VydChzLGEpfWVsc2UgZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7dGhpcy5fcnRyZWUuaW5zZXJ0KHMsYSl9fSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0KHQpLnBvcCgpfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFgodCkucG9wKCl9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WSh0KS5wb3AoKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RZKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzfSxlfSgpO0RpdC5FbnRpdHlTdG9yZT1lemV9KTt2YXIgT1h0PUgoT2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByemU9QWl0KCksbnplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuTWFwPT0iZnVuY3Rpb24iP3RoaXMuX2VzNk1hcD1uZXcgd2luZG93Lk1hcDp0aGlzLl9rZXlWYWx1ZVBhaXJzPVtdfXJldHVybiBlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtpZihyemUuaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCJOYU4gbWF5IG5vdCBiZSB1c2VkIGFzIGEga2V5IHRvIHRoZSBNYXAiKTtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5zZXQodCxyKSx0aGlzO2Zvcih2YXIgbj0wO248dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tuXS52YWx1ZT1yLHRoaXM7cmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMucHVzaCh7a2V5OnQsdmFsdWU6cn0pLHRoaXN9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5nZXQodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW3JdLnZhbHVlfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuaGFzKHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2TWFwIT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNk1hcC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX2tleVZhbHVlUGFpcnMuZm9yRWFjaChmdW5jdGlvbihvKXt0LmNhbGwocixvLnZhbHVlLG8ua2V5LG4pfSl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5kZWxldGUodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnNwbGljZShyLDEpLCEwO3JldHVybiExfSxlfSgpO09pdC5NYXA9bnplfSk7dmFyIHpYdD1IKHppdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBpemUoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKyspZm9yKHZhciBvPWlbbl0sYT1PYmplY3Qua2V5cyhvKSxzPTAsbD1hO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO3JbY109b1tjXX1yZXR1cm4gcn16aXQuYXNzaWduPWl6ZX0pO3ZhciBIWHQ9SChQRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGaXQ9RmUoKSxGWHQ9Il9fUGxvdHRhYmxlX0NsaWVudFRyYW5zbGF0b3IiO2Z1bmN0aW9uIG96ZShlKXt2YXIgdD1lLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxyPXRbRlh0XTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IEJYdCh0KSx0W0ZYdF09cikscn1QRi5nZXRUcmFuc2xhdG9yPW96ZTt2YXIgQlh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLl9yb290RWxlbWVudD10fXJldHVybiBlLnByb3RvdHlwZS5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24odCxyKXt2YXIgbj17eDp0LHk6cn0saT1GaXQuTWF0aC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtKHRoaXMuX3Jvb3RFbGVtZW50KTtpZihpPT1udWxsKXJldHVybiBuO3ZhciBvPUZpdC5NYXRoLmFwcGx5VHJhbnNmb3JtKGksbik7cmV0dXJuIG99LGUuaXNFdmVudEluc2lkZT1mdW5jdGlvbih0LHIpe3JldHVybiBGaXQuRE9NLmNvbnRhaW5zKHQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHIudGFyZ2V0KX0sZX0oKTtQRi5UcmFuc2xhdG9yPUJYdH0pO3ZhciBGZT1IKHFvPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtnPShkZSgpLFV0KHBlKSksYXplPV9YdCgpO3FvLkFycmF5PWF6ZTt2YXIgc3plPXhYdCgpO3FvLkNvbG9yPXN6ZTt2YXIgbHplPUNpdCgpO3FvLkRPTT1semU7dmFyIGN6ZT1BaXQoKTtxby5NYXRoPWN6ZTt2YXIgdXplPUlpdCgpO3FvLlJUcmVlPXV6ZTt2YXIgaHplPUlYdCgpO3FvLlN0YWNraW5nPWh6ZTt2YXIgZnplPUFGKCk7cW8uV2luZG93PWZ6ZTtLZy5fX2V4cG9ydFN0YXIoUlh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihOWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKFlnKCkscW8pO0tnLl9fZXhwb3J0U3RhcihEWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKE9YdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoelh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihSaXQoKSxxbyk7S2cuX19leHBvcnRTdGFyKEhYdCgpLHFvKX0pO3ZhciBIaXQ9SChLQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS0EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWWHQ9RmUoKSxCaXQ9SUYoKSxwemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtCaXQuZmx1c2goKX0sZX0oKTtLQS5JbW1lZGlhdGU9cHplO3ZhciBkemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtWWHQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKEJpdC5mbHVzaCl9LGV9KCk7S0EuQW5pbWF0aW9uRnJhbWU9ZHplO3ZhciBtemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fdGltZW91dE1zZWM9Vlh0LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChCaXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSxlfSgpO0tBLlRpbWVvdXQ9bXplfSk7dmFyIElGPUgoenU9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHp1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgX1M9RmUoKSxnemU9SWYoKSxMRj1IaXQoKSxKQT1uZXcgX1MuU2V0LFZpdD1uZXcgX1MuU2V0LGtGPSExLFVpdD0hMTt6dS5Qb2xpY3k9Z3plLm1ha2VFbnVtKFsiaW1tZWRpYXRlIiwiYW5pbWF0aW9uRnJhbWUiLCJ0aW1lb3V0Il0pO3ZhciBaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gX3plKGUpe2lmKGU9PW51bGwpcmV0dXJuIFpBO3N3aXRjaChlKXtjYXNlIHp1LlBvbGljeS5pbW1lZGlhdGU6WkE9bmV3IExGLkltbWVkaWF0ZTticmVhaztjYXNlIHp1LlBvbGljeS5hbmltYXRpb25GcmFtZTpaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7YnJlYWs7Y2FzZSB6dS5Qb2xpY3kudGltZW91dDpaQT1uZXcgTEYuVGltZW91dDticmVhaztkZWZhdWx0Ol9TLldpbmRvdy53YXJuKCJVbnJlY29nbml6ZWQgcmVuZGVyUG9saWN5OiAiK2UpfX16dS5yZW5kZXJQb2xpY3k9X3plO2Z1bmN0aW9uIHl6ZShlKXtVaXQmJl9TLldpbmRvdy53YXJuKCJSZWdpc3RlcmVkIHRvIHJlbmRlciB3aGlsZSBvdGhlciBjb21wb25lbnRzIGFyZSBmbHVzaGluZzogcmVxdWVzdCBtYXkgYmUgaWdub3JlZCIpLEpBLmFkZChlKSxxWHQoKX16dS5yZWdpc3RlclRvUmVuZGVyPXl6ZTtmdW5jdGlvbiBVWHQoZSl7Vml0LmFkZChlKSxKQS5hZGQoZSkscVh0KCl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9VVh0O2Z1bmN0aW9uIHZ6ZShlKXtVWHQoZSl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXQ9dnplO2Z1bmN0aW9uIHFYdCgpe2tGfHwoa0Y9ITAsWkEucmVuZGVyKCkpfWZ1bmN0aW9uIHh6ZSgpe2lmKGtGKXtWaXQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wdXRlTGF5b3V0KCl9KSxKQS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbmRlcigpfSksVWl0PSEwO3ZhciBlPW5ldyBfUy5TZXQ7SkEuZm9yRWFjaChmdW5jdGlvbih0KXt0cnl7dC5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKHIpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgcn0sMCksZS5hZGQodCl9fSksVml0PW5ldyBfUy5TZXQsSkE9ZSxrRj0hMSxVaXQ9ITF9fXp1LmZsdXNoPXh6ZX0pO3ZhciBrYz1IKFFBPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShRQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEdYdD0oRXIoKSxVdChNcikpLFJGPUlGKCkseVM9RmUoKSxiemU9T2UoKSxXWHQ9WWcoKSxZWHQ9SWYoKTtRQS5YQWxpZ25tZW50PVlYdC5tYWtlRW51bShbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdKTtRQS5ZQWxpZ25tZW50PVlYdC5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTt2YXIgd3plPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX292ZXJmbG93SGlkZGVuPSExLHRoaXMuX29yaWdpbj17eDowLHk6MH0sdGhpcy5feEFsaWdubWVudD0ibGVmdCIsdGhpcy5feUFsaWdubWVudD0idG9wIix0aGlzLl9pc1NldHVwPSExLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgeVMuQ2FsbGJhY2tTZXQsdGhpcy5fb25EZXRhY2hDYWxsYmFja3M9bmV3IHlTLkNhbGxiYWNrU2V0LHRoaXMuX2Nzc0NsYXNzZXMuYWRkKCJjb21wb25lbnQiKX1yZXR1cm4gZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHQ9V1h0LmNvZXJjZUV4dGVybmFsRDModCksdGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7cmV0dXJuIHRoaXMuaXNSb290KCkmJih0aGlzLl9yb290RWxlbWVudD10LHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKSx0aGlzLl9lbGVtZW50IT1udWxsP3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD10LmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSksdGhpcy5faXNBbmNob3JlZD0hMCx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLm9uQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0KHRoaXMpLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2V0dXB8fCh0aGlzLl9jc3NDbGFzc2VzLmZvckVhY2goZnVuY3Rpb24ocil7dC5fZWxlbWVudC5jbGFzc2VkKHIsITApfSksdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2JhY2tncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImJhY2tncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudD10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiY29udGVudCIsITApLHRoaXMuX2ZvcmVncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImZvcmVncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fb3ZlcmZsb3dIaWRkZW4/dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIiwhMCk6dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LHIpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbih0LHIsbil7aWYodD09bnVsbHx8cj09bnVsbHx8bj09bnVsbCl7aWYodGhpcy5fZWxlbWVudD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZih0aGlzLl9yb290RWxlbWVudCE9bnVsbCl7dD17eDowLHk6MH07dmFyIGk9dGhpcy5fcm9vdEVsZW1lbnQubm9kZSgpO3I9eVMuRE9NLmVsZW1lbnRXaWR0aChpKSxuPXlTLkRPTS5lbGVtZW50SGVpZ2h0KGkpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJudWxsIGFyZ3VtZW50cyBjYW5ub3QgYmUgcGFzc2VkIHRvIGNvbXB1dGVMYXlvdXQoKSBvbiBhIG5vbi1yb290LCB1bmFuY2hvcmVkIG5vZGUiKX12YXIgbz10aGlzLl9zaXplRnJvbU9mZmVyKHIsbiksYT1vLmhlaWdodCxzPW8ud2lkdGgsbD1lLl94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0sYz1lLl95QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feUFsaWdubWVudF0sdT10LngrKHItcykqbCxoPXQueSsobi1hKSpjO3JldHVybiB0aGlzLnNldEJvdW5kcyhzLGEsdSxoKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24odCxyLG4saSl7cmV0dXJuIG49PT12b2lkIDAmJihuPTApLGk9PT12b2lkIDAmJihpPTApLHRoaXMuX3dpZHRoPXQsdGhpcy5faGVpZ2h0PXIsdGhpcy5fb3JpZ2luPXt4Om4seTppfSx0aGlzLl9lbGVtZW50IT1udWxsJiZ0aGlzLl9lbGVtZW50LnN0eWxlcyh7bGVmdDpuKyJweCIsaGVpZ2h0OnIrInB4Iix0b3A6aSsicHgiLHdpZHRoOnQrInB4In0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIhPW51bGwmJnRoaXMuX3Jlc2l6ZUhhbmRsZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxyKTtyZXR1cm57d2lkdGg6dGhpcy5maXhlZFdpZHRoKCk/TWF0aC5taW4odCxuLm1pbldpZHRoKTp0LGhlaWdodDp0aGlzLmZpeGVkSGVpZ2h0KCk/TWF0aC5taW4ocixuLm1pbkhlaWdodCk6cn19LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZ0aGlzLndpZHRoKCk+PTAmJnRoaXMuaGVpZ2h0KCk+PTAmJlJGLnJlZ2lzdGVyVG9SZW5kZXIodGhpcyksdGhpc30sZS5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuX3NjaGVkdWxlQ29tcHV0ZUxheW91dD1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJlJGLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfSxlLnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzaXplSGFuZGxlcj10LHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKTp0aGlzLnBhcmVudCgpLnJlZHJhdygpKSx0aGlzfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGV0YWNoKCksdCE9bnVsbCl7dmFyIHI9dm9pZCAwO2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8YnplLmlzRWxlbWVudCh0KT9yPUdYdC5zZWxlY3QodCk6cj1XWHQuY29lcmNlRXh0ZXJuYWxEMyh0KSwhci5ub2RlKCl8fHIubm9kZSgpLm5vZGVOYW1lPT1udWxsKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKHIubm9kZSgpLm5vZGVOYW1lPT09InN2ZyIpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKHIpfWlmKHRoaXMuX2VsZW1lbnQ9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJJZiBhIENvbXBvbmVudCBoYXMgbmV2ZXIgYmVlbiByZW5kZXJlZCBiZWZvcmUsIHRoZW4gcmVuZGVyVG8gbXVzdCBiZSBnaXZlbiBhIG5vZGUgdG8gcmVuZGVyIHRvLCBvciBhIGQzLlNlbGVjdGlvbiwgb3IgYSBzZWxlY3RvciBzdHJpbmciKTtyZXR1cm4gUkYucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXIodGhpcyksUkYuZmx1c2goKSx0aGlzfSxlLnByb3RvdHlwZS54QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feEFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl94QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS55QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feUFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl95QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8hMTp0aGlzLl9lbGVtZW50PT1udWxsP3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0KX0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpczoodGhpcy5fZWxlbWVudD09bnVsbD90aGlzLl9jc3NDbGFzc2VzLmFkZCh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCwhMCksdGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXM6KHRoaXMuX2VsZW1lbnQ9PW51bGw/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITEpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudChudWxsKSx0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5vbkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJlbnQ7aWYodCE9PW51bGwmJiF0Lmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3JldHVybiB0aGlzLl9wYXJlbnQ9dCx0aGlzfSxlLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnQsYm90dG9tUmlnaHQ6e3g6dC54K3RoaXMud2lkdGgoKSx5OnQueSt0aGlzLmhlaWdodCgpfX19LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5kZXRhY2goKX0sZS5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LGUucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWlnaHR9LGUucHJvdG90eXBlLm9yaWdpbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuX29yaWdpbi54LHk6dGhpcy5fb3JpZ2luLnl9fSxlLnByb3RvdHlwZS5vcmlnaW5Ub1Jvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcmlnaW4oKSxyPXRoaXMucGFyZW50KCk7ciE9bnVsbDspe3ZhciBuPXIub3JpZ2luKCk7dC54Kz1uLngsdC55Kz1uLnkscj1yLnBhcmVudCgpfXJldHVybiB0fSxlLnByb3RvdHlwZS5yb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7IXQuaXNSb290KCk7KXQ9dC5wYXJlbnQoKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuaXNSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCk9PW51bGx9LGUucHJvdG90eXBlLmZvcmVncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcn0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LGUucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH0sZS5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfSxlLl94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sZS5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9LGV9KCk7UUEuQ29tcG9uZW50PXd6ZX0pO3ZhciBCdT1IKEZ1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZTPShFcigpLFV0KE1yKSksU3plPSExO2Z1bmN0aW9uIE16ZShlLHQscil7ZT09PXZvaWQgMCYmKGU9MiksdD09PXZvaWQgMCYmKHQ9IiQiKSxyPT09dm9pZCAwJiYocj0hMCk7dmFyIG49cWl0KGUpO3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz1uKE1hdGguYWJzKGkpKTtyZXR1cm4gbyE9PSIiJiYocj9vPXQrbzpvKz10LGk8MCYmKG89Ii0iK28pKSxvfX1GdS5jdXJyZW5jeT1NemU7ZnVuY3Rpb24gcWl0KGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKGUpfX1GdS5maXhlZD1xaXQ7ZnVuY3Rpb24gRXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtpZih0eXBlb2YgdD09Im51bWJlciIpe3ZhciByPU1hdGgucG93KDEwLGUpO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZCh0KnIpL3IpfWVsc2UgcmV0dXJuIFN0cmluZyh0KX19RnUuZ2VuZXJhbD1FemU7ZnVuY3Rpb24gVHplKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSl9fUZ1LmlkZW50aXR5PVR6ZTtmdW5jdGlvbiBDemUoZSl7ZT09PXZvaWQgMCYmKGU9MCk7dmFyIHQ9cWl0KGUpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yKjEwMCxpPXIudG9TdHJpbmcoKSxvPU1hdGgucG93KDEwLGkubGVuZ3RoLShpLmluZGV4T2YoIi4iKSsxKSk7cmV0dXJuIG49cGFyc2VJbnQoKG4qbykudG9TdHJpbmcoKSwxMCkvbyx0KG4pKyIlIn19RnUucGVyY2VudGFnZT1DemU7ZnVuY3Rpb24gQXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdlMuZm9ybWF0KCIuIitlKyJzIikodCl9fUZ1LnNpU3VmZml4PUF6ZTtmdW5jdGlvbiBQemUoZSl7ZT09PXZvaWQgMCYmKGU9MyksTkYoZSk7dmFyIHQ9IktNQlRRIixyPXZTLmZvcm1hdCgiLiIrZSsiZSIpLG49dlMuZm9ybWF0KCIuIitlKyJmIiksaT1NYXRoLnBvdygxMCwzKih0Lmxlbmd0aCsxKSksbz1NYXRoLnBvdygxMCwtZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPU1hdGguYWJzKGEpO2lmKChzPG98fHM+PWkpJiZzIT09MClyZXR1cm4gcihhKTtmb3IodmFyIGw9LTE7cz49TWF0aC5wb3coMWUzLGwrMikmJmw8dC5sZW5ndGgtMTspbCsrO3ZhciBjPSIiO3JldHVybiBsPT09LTE/Yz1uKGEpOmM9bihhL01hdGgucG93KDFlMyxsKzEpKSt0W2xdLChhPjAmJmMuc3Vic3RyKDAsNCk9PT0iMTAwMCJ8fGE8MCYmYy5zdWJzdHIoMCw1KT09PSItMTAwMCIpJiYobDx0Lmxlbmd0aC0xPyhsKyssYz1uKGEvTWF0aC5wb3coMWUzLGwrMSkpK3RbbF0pOmM9cihhKSksY319RnUuc2hvcnRTY2FsZT1QemU7ZnVuY3Rpb24gSXplKCl7dmFyIGU9W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpIT09MH19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSSAlcCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCkhPT0wfX0se3NwZWNpZmllcjoiJWEgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSE9PTAmJnQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKSE9PTB9fV07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpLnByZWRpY2F0ZSh0KX0pLG49ci5sZW5ndGg+MD9yWzBdLnNwZWNpZmllcjoiJVkiO3JldHVybiB2Uy50aW1lRm9ybWF0KG4pKHQpfX1GdS5tdWx0aVRpbWU9SXplO2Z1bmN0aW9uIEx6ZShlLHQpe3JldHVybiB0PT09dm9pZCAwJiYodD1TemUpLHQ/dlMudXRjRm9ybWF0KGUpOnZTLnRpbWVGb3JtYXQoZSl9RnUudGltZT1MemU7ZnVuY3Rpb24gTkYoZSl7aWYoZTwwfHxlPjIwKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYW4gaW50ZWdlciIpfX0pO3ZhciB0ND1IKERGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShERiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGt6ZT0oZGUoKSxVdChwZSkpLHlkPShFcigpLFV0KE1yKSksR2l0PV9sKCksUnplPWtjKCksalh0PUJ1KCkseFM9RmUoKSxOemU9SWYoKTtERi5BeGlzT3JpZW50YXRpb249TnplLm1ha2VFbnVtKFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pO3ZhciBEemU9ZnVuY3Rpb24oZSl7a3plLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEscj09bnVsbHx8bj09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9cixpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihqWHQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1qWHQuaWRlbnRpdHkoKSxpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZXNjYWxlQ2FsbGJhY2spfSx0LnByb3RvdHlwZS50aWNrTGFiZWxEYXRhT25FbGVtZW50PWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwpe2Zvcih2YXIgbjtyIT1udWxsJiZyLmNsYXNzTGlzdCYmbj09PXZvaWQgMDspci5jbGFzc0xpc3QuY29udGFpbnModC5USUNLX0xBQkVMX0NMQVNTKT9uPXI6cj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT12b2lkIDA/dm9pZCAwOnlkLnNlbGVjdChyKS5kYXR1bSgpfX0sdC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9MCxvPTA7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYobz10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HO28rPWEqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCl9fWVsc2UgaWYoaT10aGlzLl9jb21wdXRlV2lkdGgoKSt0aGlzLl9tYXJnaW4sdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMip0Ll9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc7aSs9YSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKX1yZXR1cm57bWluV2lkdGg6aSxtaW5IZWlnaHQ6b319LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0hvcml6b250YWwoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5fc2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5yZXF1ZXN0ZWRTcGFjZShyLG4pO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3t3aWR0aDpyLGhlaWdodDppLm1pbkhlaWdodH06e2hlaWdodDpuLHdpZHRoOmkubWluV2lkdGh9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90aWNrTWFya0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fYmFzZWxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxpbmUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tcmVjdC1jb250YWluZXIiLCEwKTt2YXIgcj10aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiwhMCksbj1uZXcgR2l0LlN2Z0NvbnRleHQoci5ub2RlKCkpO3RoaXMuX2Fubm90YXRpb25NZWFzdXJlcj1uZXcgR2l0LkNhY2hlTWVhc3VyZXIobiksdGhpcy5fYW5ub3RhdGlvbldyaXRlcj1uZXcgR2l0LldyaXRlcih0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIsbil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLG49dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxpPW4uZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShuKTtyZXR1cm4gaS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSkseWQuc2VsZWN0KGkubm9kZXMoKVswXSkuY2xhc3NlZCh0LkVORF9USUNLX01BUktfQ0xBU1MsITApLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCghMCkpLHlkLnNlbGVjdChpLm5vZGVzKClbci5sZW5ndGgtMV0pLmNsYXNzZWQodC5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyB4Uy5NYXAsbz10aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCk7by5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBrPXIuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKHIuYW5ub3RhdGlvbkZvcm1hdHRlcigpKFApKSxPPXt3aWR0aDprLndpZHRoKzIqbixoZWlnaHQ6ay5oZWlnaHQrMipufTtpLnNldChQLE8pfSk7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMipuLHM9dGhpcy5fYW5ub3RhdGlvblRvVGllcihpKSxsPW5ldyB4Uy5TZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHU9dGhpcy5fY29yZVNpemUoKSxoPU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGMtdSkvYSkpO3MuZm9yRWFjaChmdW5jdGlvbihQLGspeyhQPT09LTF8fFA+PWgpJiZsLmFkZChrKX0pO3ZhciBmPWZ1bmN0aW9uKFAsayxPKXt2YXIgRD1QLnNlbGVjdEFsbCgiLiIrTykuZGF0YShvKSxCPUQuZW50ZXIoKS5hcHBlbmQoaykuY2xhc3NlZChPLCEwKS5tZXJnZShEKTtyZXR1cm4gRC5leGl0KCkucmVtb3ZlKCksQn0scD1mdW5jdGlvbihQKXtzd2l0Y2goci5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6cmV0dXJuIHMuZ2V0KFApKmErdTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gYy11LXMuZ2V0KFApKmF9fSxkPWZ1bmN0aW9uKFApe3JldHVybiByLl9zY2FsZS5zY2FsZShQKX0sZz1mdW5jdGlvbihQKXtyZXR1cm4gbC5oYXMoUCk/ImhpZGRlbiI6InZpc2libGUifSxfO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpfPTA7YnJlYWs7Y2FzZSJ0b3AiOl89dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOl89dGhpcy53aWR0aCgpO2JyZWFrfXZhciB5PXRoaXMuaXNIb3Jpem9udGFsKCk7Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGluZS1jb250YWluZXIiKSwibGluZSIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1MpLmF0dHJzKHt4MTp5P2Q6Xyx4Mjp5P2Q6cCx5MTp5P186ZCx5Mjp5P3A6ZCx2aXNpYmlsaXR5Omd9KSxmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiksImNpcmNsZSIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUykuYXR0cnMoe2N4Onk/ZDpfLGN5Onk/XzpkLHI6M30pO3ZhciB4PWZ1bmN0aW9uKFApe3N3aXRjaChyLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpyZXR1cm4gcChQKTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gcChQKS1pLmdldChQKS5oZWlnaHR9fTtmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIpLCJyZWN0Iix0LkFOTk9UQVRJT05fUkVDVF9DTEFTUykuYXR0cnMoe3g6eT9kOngseTp5P3g6ZCx3aWR0aDp5P2Z1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS53aWR0aH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH0saGVpZ2h0Onk/ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLndpZHRofSx2aXNpYmlsaXR5Omd9KTt2YXIgYj10aGlzLl9hbm5vdGF0aW9uV3JpdGVyLFM9dGhpcy5hbm5vdGF0aW9uRm9ybWF0dGVyKCksQz1mKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiKSwiZyIsdC5BTk5PVEFUSU9OX0xBQkVMX0NMQVNTKTtDLnNlbGVjdEFsbCgiLnRleHQtY29udGFpbmVyIikucmVtb3ZlKCksQy5hdHRycyh7dHJhbnNmb3JtOmZ1bmN0aW9uKFApe3ZhciBrPXk/ZChQKTp4KFApLE89eT94KFApOmQoUCk7cmV0dXJuInRyYW5zbGF0ZSgiK2srIiwiK08rIikifSx2aXNpYmlsaXR5Omd9KS5lYWNoKGZ1bmN0aW9uKFApe2Iud3JpdGUoUyhQKSx5P2kuZ2V0KFApLndpZHRoOmkuZ2V0KFApLmhlaWdodCx5P2kuZ2V0KFApLmhlaWdodDppLmdldChQKS53aWR0aCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246eT8wOjkwfSx5ZC5zZWxlY3QodGhpcykubm9kZSgpKX0pfSx0LnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiB4Uy5BcnJheS51bmlxKHRoaXMuYW5ub3RhdGVkVGlja3MoKS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/ITE6eFMuTWF0aC5pblJhbmdlKHIuX3NjYWxlLnNjYWxlKGkpLG5bMF0sblsxXSl9KSl9LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX2NvbXB1dGVIZWlnaHQoKTp0aGlzLl9jb21wdXRlV2lkdGgoKTtyZXR1cm4gTWF0aC5taW4obixyKX0sdC5wcm90b3R5cGUuX2Fubm90YXRpb25UaWVySGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HfSx0LnByb3RvdHlwZS5fYW5ub3RhdGlvblRvVGllcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W1tdXSxvPW5ldyB4Uy5NYXAsYT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1uLl9zY2FsZS5zY2FsZShzKSxjPXIuZ2V0KHMpLndpZHRoO2lmKGw8MHx8bCtjPmEpe28uc2V0KHMsLTEpO3JldHVybn1mb3IodmFyIHU9ZnVuY3Rpb24oZil7cmV0dXJuIGlbZl0uc29tZShmdW5jdGlvbihwKXt2YXIgZD1uLl9zY2FsZS5zY2FsZShwKSxnPXIuZ2V0KHApLndpZHRoO3JldHVybiBsK2M+PWQmJmw8PWQrZ30pfSxoPTA7dShoKTspaCsrLGkubGVuZ3RoPT09aCYmaS5wdXNoKFtdKTtpW2hdLnB1c2gocyksby5zZXQocyxoKX0pLG99LHQucHJvdG90eXBlLl9yZW1vdmVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1saW5lIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWNpcmNsZSIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1yZWN0IikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxhYmVsIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2g9ZnVuY3Rpb24oKXt2YXIgcj17eDE6MCx5MTowLHgyOjAseTI6MH07c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6ci54Mj10aGlzLndpZHRoKCk7YnJlYWs7Y2FzZSJ0b3AiOnIueDI9dGhpcy53aWR0aCgpLHIueTE9dGhpcy5oZWlnaHQoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJsZWZ0IjpyLngxPXRoaXMud2lkdGgoKSxyLngyPXRoaXMud2lkdGgoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJyaWdodCI6ci55Mj10aGlzLmhlaWdodCgpO2JyZWFrfXJldHVybiByfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9ITEpO3ZhciBpPXt4MTowLHkxOjAseDI6MCx5MjowfSxvPWZ1bmN0aW9uKHMpe3JldHVybiBuLl9zY2FsZS5zY2FsZShzKX07dGhpcy5pc0hvcml6b250YWwoKT8oaS54MT1vLGkueDI9byk6KGkueTE9byxpLnkyPW8pO3ZhciBhPXI/dGhpcy5fZW5kVGlja0xlbmd0aDp0aGlzLl9pbm5lclRpY2tMZW5ndGg7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6aS55Mj1hO2JyZWFrO2Nhc2UidG9wIjppLnkxPXRoaXMuaGVpZ2h0KCksaS55Mj10aGlzLmhlaWdodCgpLWE7YnJlYWs7Y2FzZSJsZWZ0IjppLngxPXRoaXMud2lkdGgoKSxpLngyPXRoaXMud2lkdGgoKS1hO2JyZWFrO2Nhc2UicmlnaHQiOmkueDI9YTticmVha31yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3NldERlZmF1bHRBbGlnbm1lbnQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0aGlzLnlBbGlnbm1lbnQoInRvcCIpO2JyZWFrO2Nhc2UidG9wIjp0aGlzLnlBbGlnbm1lbnQoImJvdHRvbSIpO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy54QWxpZ25tZW50KCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMueEFsaWdubWVudCgibGVmdCIpO2JyZWFrfX0sdC5wcm90b3R5cGUuaXNIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09InRvcCJ8fHRoaXMuX29yaWVudGF0aW9uPT09ImJvdHRvbSJ9LHQucHJvdG90eXBlLmdldFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NjYWxlfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5pbm5lclRpY2tMZW5ndGg9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImlubmVyIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmRUaWNrTGVuZ3RoPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg7aWYocjwwKXRocm93IG5ldyBFcnJvcigiZW5kIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fZW5kVGlja0xlbmd0aD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuX21heExhYmVsVGlja0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCk/TWF0aC5tYXgodGhpcy5pbm5lclRpY2tMZW5ndGgoKSx0aGlzLmVuZFRpY2tMZW5ndGgoKSk6dGhpcy5pbm5lclRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUudGlja0xhYmVsUGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInRpY2sgbGFiZWwgcGFkZGluZyBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm1hcmdpbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9tYXJnaW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibWFyZ2luIHNpemUgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl9tYXJnaW49cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uO3ZhciBuPXIudG9Mb3dlckNhc2UoKTtpZihuIT09InRvcCImJm4hPT0iYm90dG9tIiYmbiE9PSJsZWZ0IiYmbiE9PSJyaWdodCIpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBvcmllbnRhdGlvbiIpO3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj1uLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuc2hvd0VuZFRpY2tMYWJlbHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc2hvd0VuZFRpY2tMYWJlbHM6KHRoaXMuX3Nob3dFbmRUaWNrTGFiZWxzPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3Nob3dBbGxUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19NQVJLX0NMQVNTKS5lYWNoKGZ1bmN0aW9uKCl7eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9LHQucHJvdG90eXBlLl9zaG93QWxsVGlja0xhYmVscz1mdW5jdGlvbigpe3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUykuZWFjaChmdW5jdGlvbigpe3lkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pfSx0LnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUyk7bi5lbXB0eSgpfHxuLmVhY2goZnVuY3Rpb24oaSxvKXt4Uy5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX01BUktfQ0xBU1MpLG49dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24obyxhKXt2YXIgcz15ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gcz09PSJpbmhlcml0Inx8cz09PSJ2aXNpYmxlIn0pLGk9bi5kYXRhKCk7ci5lYWNoKGZ1bmN0aW9uKG8sYSl7aS5pbmRleE9mKG8pPT09LTEmJnlkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSx0LkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLHQuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLHQuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsdC5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLHQuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsdH0oUnplLkNvbXBvbmVudCk7REYuQXhpcz1EemV9KTt2YXIgJFh0PUgoaml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPemU9KGRlKCksVXQocGUpKSxXaXQ9KEVyKCksVXQoTXIpKSxPRj1fbCgpLHp6ZT1rYygpLFhYdD1GZSgpLFlpdD10NCgpLEZ6ZT1mdW5jdGlvbihlKXtPemUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe249PT12b2lkIDAmJihuPSJib3R0b20iKTt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxBbmdsZT0wLGkuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MCxpLmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIiksaX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciByPW5ldyBPRi5XcmFwcGVyO3JldHVybiB0aGlzLl90aWNrTGFiZWxNYXhMaW5lcyE9bnVsbCYmci5tYXhMaW5lcyh0aGlzLl90aWNrTGFiZWxNYXhMaW5lcykscn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93cml0ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9GLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgT0YuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgT0YuQ2FjaGVNZWFzdXJlcih0aGlzLl90eXBlc2V0dGVyQ29udGV4dCl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3KCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5pc0hvcml6b250YWwoKT8wOnRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSt0aGlzLm1hcmdpbigpOjA7aWYodGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoPT09MClyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07aWYodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKTt0aGlzLmlzSG9yaXpvbnRhbCgpP28rPWE6aSs9YX12YXIgcz10aGlzLl9tZWFzdXJlVGlja0xhYmVscyhyLG4pO3JldHVybnttaW5XaWR0aDpzLnVzZWRXaWR0aCtpLG1pbkhlaWdodDpzLnVzZWRIZWlnaHQrb319LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMucmVxdWVzdGVkU3BhY2UodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpLm1pbkhlaWdodDp0aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5XaWR0aCxpPXRoaXMubWFyZ2luKCkrdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSxvPW4taTtyZXR1cm4gTWF0aC5taW4obyxyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm4genplLkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbil9LHQucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHIsbil7cj09PXZvaWQgMCYmKHI9dGhpcy5fc2NhbGUpLG49PT12b2lkIDAmJihuPXIuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9dGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxvPXQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKmksYT1NYXRoLmNlaWwoby9yLnN0ZXBXaWR0aCgpKTtyZXR1cm57ZG9tYWluOm4uZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIGwlYT09PTB9KSxzdGVwV2lkdGg6YSpyLnN0ZXBXaWR0aCgpfX0sdC5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYociE9PTAmJnIhPT05MCYmciE9PS05MCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrcisiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHI8LTgwfHxyPjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIityKyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sdC5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbyxhO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpvPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGE9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGE9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGE9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWt9bi5lYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPVdpdC5zZWxlY3QodGhpcyksYz1pLmlzSG9yaXpvbnRhbCgpP3I6aS53aWR0aCgpLWkuX3RpY2tTcGFjZVJlcXVpcmVkKCksdT1pLmlzSG9yaXpvbnRhbCgpP2kuaGVpZ2h0KCktaS5fdGlja1NwYWNlUmVxdWlyZWQoKTpyLGg9e3hBbGlnbjpvW2kub3JpZW50YXRpb24oKV0seUFsaWduOmFbaS5vcmllbnRhdGlvbigpXSx0ZXh0Um90YXRpb246aS50aWNrTGFiZWxBbmdsZSgpLHRleHRTaGVhcjppLnRpY2tMYWJlbFNoZWFyQW5nbGUoKX07aWYoaS5fdGlja0xhYmVsTWF4V2lkdGghPW51bGwpe2lmKGkub3JpZW50YXRpb24oKT09PSJsZWZ0IiYmYz5pLl90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIGY9Yy1pLl90aWNrTGFiZWxNYXhXaWR0aCxwPWwuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitmKyIsIDApIjtsLmF0dHIoInRyYW5zZm9ybSIscCl9Yz1NYXRoLm1pbihjLGkuX3RpY2tMYWJlbE1heFdpZHRoKX1pLl93cml0ZXIud3JpdGUoaS5mb3JtYXR0ZXIoKShzKSxjLHUsaCxsLm5vZGUoKSl9KX0sdC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX3NjYWxlLGE9by5jbG9uZVdpdGhvdXRQcm92aWRlcnMoKS5yYW5nZShbMCx0aGlzLmlzSG9yaXpvbnRhbCgpP3I6bl0pLHM9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhhKSxsPXMuZG9tYWluLGM9cy5zdGVwV2lkdGgsdT1yLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKHU9Yyx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJih1PW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksdT1NYXRoLm1heCh1LDApKTt2YXIgaD1jO3RoaXMuaXNIb3Jpem9udGFsKCkmJihoPW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJihoPXItdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksaD1NYXRoLm1heChoLDApKSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCE9bnVsbCYmKHU9TWF0aC5taW4odSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCkpO3ZhciBmPWwubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBpLl93cmFwcGVyLndyYXAoaS5mb3JtYXR0ZXIoKSh4KSxpLl9tZWFzdXJlcix1LGgpfSkscD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/V2l0LnN1bTpYWHQuTWF0aC5tYXgsZD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/WFh0Lk1hdGgubWF4OldpdC5zdW0sZz1wKGYsZnVuY3Rpb24oeCl7cmV0dXJuIGkuX21lYXN1cmVyLm1lYXN1cmUoeC53cmFwcGVkVGV4dCkud2lkdGh9LDApLF89ZChmLGZ1bmN0aW9uKHgpe3JldHVybiBpLl9tZWFzdXJlci5tZWFzdXJlKHgud3JhcHBlZFRleHQpLmhlaWdodH0sMCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlIT09MCYmKHk9W18sZ10sZz15WzBdLF89eVsxXSkse3VzZWRXaWR0aDpnLHVzZWRIZWlnaHQ6X307dmFyIHl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxvPWkuZG9tYWluLGE9aS5zdGVwV2lkdGgscz1hO3RoaXMuaXNIb3Jpem9udGFsKCkmJnRoaXMuX3RpY2tMYWJlbE1heFdpZHRoIT1udWxsJiYocz1NYXRoLm1pbihzLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIGw9ZnVuY3Rpb24ocCxkKXt2YXIgZz1uLnNjYWxlKHApLXMvMixfPXIuaXNIb3Jpem9udGFsKCk/ZzowLHk9ci5pc0hvcml6b250YWwoKT8wOmc7cmV0dXJuInRyYW5zbGF0ZSgiK18rIiwiK3krIikifSxjPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK1lpdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEobyksdT1jLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChZaXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShjKTtjLmV4aXQoKS5yZW1vdmUoKSx1LmF0dHIoInRyYW5zZm9ybSIsbCksdS50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MoYSx1KTt2YXIgaD10aGlzLm9yaWVudGF0aW9uKCk9PT0icmlnaHQiP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCxmPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwiK2YrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsdH0oWWl0LkF4aXMpO2ppdC5DYXRlZ29yeT1GemV9KTt2YXIgS1h0PUgoJGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCemU9KGRlKCksVXQocGUpKSx6Rj0oRXIoKSxVdChNcikpLFhpdD1fbCgpLEh6ZT1CdSgpLGJTPUZlKCksd1M9dDQoKSxWemU9ZnVuY3Rpb24oZSl7QnplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIixpLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMSxpLmZvcm1hdHRlcihIemUuZ2VuZXJhbCgpKSxpfXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgcj1uZXcgWGl0LlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSx3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO3RoaXMuX21lYXN1cmVyPW5ldyBYaXQuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBYaXQuV3JhcHBlcigpLm1heExpbmVzKDEpfSx0LnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24/dGhpcy5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoKCk6dGhpcy5fY29tcHV0ZUV4YWN0VGV4dFdpZHRoKCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVFeGFjdFRleHRXaWR0aD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXRUaWNrVmFsdWVzKCksaT1uLm1hcChmdW5jdGlvbihvKXt2YXIgYT1yLmZvcm1hdHRlcigpKG8pO3JldHVybiByLl9tZWFzdXJlci5tZWFzdXJlKGEpLndpZHRofSk7cmV0dXJuIGJTLk1hdGgubWF4KGksMCl9LHQucHJvdG90eXBlLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0VGlja1ZhbHVlcygpLGk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgiTSIpLndpZHRoLG89bi5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9ci5mb3JtYXR0ZXIoKShhKTtyZXR1cm4gcy5sZW5ndGgqaX0pO3JldHVybiBiUy5NYXRoLm1heChvLDApfSx0LnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQ7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9zY2FsZSxuPXIuZG9tYWluKCksaT1uWzBdPD1uWzFdP25bMF06blsxXSxvPW5bMF0+PW5bMV0/blswXTpuWzFdO3JldHVybiByLnRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhPj1pJiZhPD1vfSl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9pc1NldHVwKXtpZighdGhpcy5pc0hvcml6b250YWwoKSl7dmFyIHI9dGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYocj50aGlzLndpZHRoKCl8fHI8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0saT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSxvPXRoaXMudGlja0xhYmVsUGFkZGluZygpLGE9Im1pZGRsZSIscz0wLGw9MCxjPTAsdT0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlImxlZnQiOmE9ImVuZCIscz0tbyx1PW87YnJlYWs7Y2FzZSJjZW50ZXIiOnU9aStvO2JyZWFrO2Nhc2UicmlnaHQiOmE9InN0YXJ0IixzPW8sdT1vO2JyZWFrfWVsc2Ugc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlInRvcCI6bi5keT0iLTAuM2VtIixjPW8sbD0tbzticmVhaztjYXNlImNlbnRlciI6Yz1pK287YnJlYWs7Y2FzZSJib3R0b20iOm4uZHk9IjFlbSIsYz1vLGw9bzticmVha312YXIgaD10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6bi54PWgueDEsbi5keT0iMC45NWVtIixsPWgueTErdTticmVhaztjYXNlInRvcCI6bi54PWgueDEsbi5keT0iLS4yNWVtIixsPWgueTEtdTticmVhaztjYXNlImxlZnQiOmE9ImVuZCIscz1oLngxLWMsbi55PWgueTE7YnJlYWs7Y2FzZSJyaWdodCI6YT0ic3RhcnQiLHM9aC54MStjLG4ueT1oLnkxO2JyZWFrfXZhciBmPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxwPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShmKTtwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHApO2Quc3R5bGUoInRleHQtYW5jaG9yIixhKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKS5hdHRycyhuKS50ZXh0KGZ1bmN0aW9uKF8pe3JldHVybiByLmZvcm1hdHRlcigpKF8pfSk7dmFyIGc9InRyYW5zbGF0ZSgiK3MrIiwgIitsKyIpIjtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsZyksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKXx8dGhpcy5faGlkZUVuZFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscygpLHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nIT09ImNlbnRlciImJnRoaXMuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWwoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzt2YXIgbj1yLnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoIShuPT09ImxlZnQifHxuPT09ImNlbnRlciJ8fG49PT0icmlnaHQiKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgaG9yaXpvbnRhbCBOdW1lcmljQXhpcyIpfWVsc2UgaWYoIShuPT09InRvcCJ8fG49PT0iY2VudGVyInx8bj09PSJib3R0b20iKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgdmVydGljYWwgTnVtZXJpY0F4aXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc9bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uOih0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1yLHRoaXMpfSx0LnByb3RvdHlwZS5faGlkZUVuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO2lmKG4uc2l6ZSgpIT09MCl7dmFyIGk9bi5ub2RlcygpWzBdO2JTLkRPTS5jbGllbnRSZWN0SW5zaWRlKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscil8fHpGLnNlbGVjdChpKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO3ZhciBvPW4ubm9kZXMoKVtuLnNpemUoKS0xXTtiUy5ET00uY2xpZW50UmVjdEluc2lkZShvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx6Ri5zZWxlY3Qobykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX19LHQucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKG8sYSl7dmFyIHM9ekYuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIHM9PT0iaW5oZXJpdCJ8fHM9PT0idmlzaWJsZSJ9KSxuPXIubm9kZXMoKS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSxpPTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoaSxuKSYmaTxuLmxlbmd0aDspaSs9MTtyLmVhY2goZnVuY3Rpb24obyxhKXt2YXIgcz16Ri5zZWxlY3QodGhpcyk7YSVpIT09MCYmcy5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLl9oYXNPdmVybGFwV2l0aEludGVydmFsPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCkqMyxvPW4ubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBiUy5ET00uZXhwYW5kUmVjdChjLGkpfSksYT0wO2E8by5sZW5ndGgtcjthKz1yKXt2YXIgcz1vW2FdLGw9b1thK3JdO2lmKGJTLkRPTS5jbGllbnRSZWN0c092ZXJsYXAocyxsKSlyZXR1cm4hMX1yZXR1cm4hMH0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdH0od1MuQXhpcyk7JGl0Lk51bWVyaWM9VnplfSk7dmFyIFpYdD1IKEZGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFV6ZT1GZSgpO2Z1bmN0aW9uIHF6ZShlKXtpZihlPD0wKXRocm93IG5ldyBFcnJvcigiaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5kb21haW4oKSxuPU1hdGgubWluKHJbMF0sclsxXSksaT1NYXRoLm1heChyWzBdLHJbMV0pLG89TWF0aC5jZWlsKG4vZSkqZSxhPU1hdGguZmxvb3IoKGktbykvZSkrMSxzPW4lZT09PTA/W106W25dLGw9VXplLk1hdGgucmFuZ2UoMCxhKS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIG8rdSplfSksYz1pJWU9PT0wP1tdOltpXTtyZXR1cm4gcy5jb25jYXQobCkuY29uY2F0KGMpfX1GRi5pbnRlcnZhbFRpY2tHZW5lcmF0b3I9cXplO2Z1bmN0aW9uIEd6ZSgpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmRlZmF1bHRUaWNrcygpO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihyLG4pe3JldHVybiByJTE9PT0wfHxuPT09MHx8bj09PXQubGVuZ3RoLTF9KX19RkYuaW50ZWdlclRpY2tHZW5lcmF0b3I9R3plfSk7dmFyIGU0PUgoSXY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEl2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBaaXQoZSx0LHIpe3JldHVybiByLShyLWUpKnR9SXYuem9vbU91dD1aaXQ7ZnVuY3Rpb24gS2l0KGUsdCxyKXtyZXR1cm4oZSp0LXIpLyh0LTEpfWZ1bmN0aW9uIFd6ZShlLHQscixuLGksbyxhKXtyZXR1cm4gdD1KWHQoZSx0LG4saSksUVh0KGUsdCxyLG8sYSl9SXYuY29uc3RyYWluZWRab29tPVd6ZTtmdW5jdGlvbiBKWHQoZSx0LHIsbil7dmFyIGk9dD4xLG89aT9uOnI7aWYobz09bnVsbClyZXR1cm4gdDt2YXIgYT1lLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkscz1hWzBdLGw9YVsxXSxjPU1hdGguYWJzKGwtcyksdT1pP01hdGgubWluOk1hdGgubWF4O3JldHVybiB1KHQsby9jKX1Jdi5jb25zdHJhaW5ab29tRXh0ZW50cz1KWHQ7ZnVuY3Rpb24gUVh0KGUsdCxyLG4saSl7aWYodDw9MSlyZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OnR9O2lmKG49PW51bGwmJmk9PW51bGwpcmV0dXJue2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fTt2YXIgbz10JHQoZSksYT1qemUoZSkscz1hPzEvMDotMS8wLGw9YT8tMS8wOjEvMDtuPW49PW51bGw/czpuLGk9aT09bnVsbD9sOmk7dmFyIGM9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHU9Y1swXSxoPWNbMV0sZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaSkscD1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaCksZD1aaXQocCx0LHIpLGc9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKG4pLF89ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHUpLHk9Wml0KF8sdCxyKSx4PU1hdGguYWJzKGYtZyksYj1NYXRoLmFicyhkLXkpO2lmKGI+eCl7dmFyIFM9KGYtZykvKHAtXyk7aWYoUyE9PTEpe3ZhciBDPUtpdChwLFMsZik7cmV0dXJue2NlbnRlclBvaW50OkMsem9vbUFtb3VudDpTfX1lbHNlIHJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6U319ZWxzZSByZXR1cm4gZD5mIT1vP3tjZW50ZXJQb2ludDpLaXQocCx0LGYpLHpvb21BbW91bnQ6dH06eTxnIT1vP3tjZW50ZXJQb2ludDpLaXQoXyx0LGcpLHpvb21BbW91bnQ6dH06e2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fX1Jdi5jb25zdHJhaW5ab29tVmFsdWVzPVFYdDtmdW5jdGlvbiBZemUoZSx0LHIsbil7dmFyIGk9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLG89aVswXSxhPWlbMV0scz10JHQoZSk7aWYodD4wIT09cyl7dmFyIGw9bjtpZihsIT1udWxsKXt2YXIgYz1lLnNjYWxlVHJhbnNmb3JtYXRpb24oYSksdT1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1heDpNYXRoLm1pbikoYyt0LHUpLWN9fWVsc2V7dmFyIGw9cjtpZihsIT1udWxsKXt2YXIgaD1lLnNjYWxlVHJhbnNmb3JtYXRpb24obyksZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1pbjpNYXRoLm1heCkoaCt0LGYpLWh9fXJldHVybiB0fUl2LmNvbnN0cmFpbmVkVHJhbnNsYXRpb249WXplO2Z1bmN0aW9uIHQkdChlKXt2YXIgdD1lLnJhbmdlKCk7cmV0dXJuIHRbMV08dFswXX1mdW5jdGlvbiBqemUoZSl7dmFyIHQ9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3JldHVybiB0WzFdPHRbMF19fSk7dmFyIEx2PUgoSml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlJHQ9RmUoKSxYemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSx0aGlzLl91cGRhdGVJZD0wLHRoaXMuX2NhbGxiYWNrcz1uZXcgZSR0LkNhbGxiYWNrU2V0LHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzPW5ldyBlJHQuU2V0fXJldHVybiBlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sZS5wcm90b3R5cGUuX2dldEFsbEluY2x1ZGVkVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7dD09PXZvaWQgMCYmKHQ9ITEpO3ZhciBuPVtdO3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkocix0KTtuPW4uY29uY2F0KG8pfSksbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQrKyx0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX0sZS5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMCx0aGlzLl9zZXREb21haW4odGhpcy5fZ2V0RXh0ZW50KCkpLHRoaXN9LGUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseSYmdGhpcy5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGUiKX0sZS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldERvbWFpbigpOih0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMSx0aGlzLl9zZXREb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXREb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbih0KXt0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzfHwodGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMCx0aGlzLl9iYWNraW5nU2NhbGVEb21haW4odCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9iYWNraW5nRG9tYWluIil9LGUucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldFJhbmdlKCk6KHRoaXMuX3NldFJhbmdlKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXRSYW5nZSIpfSxlLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfc2V0UmFuZ2UiKX0sZS5wcm90b3R5cGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuYWRkKHQpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmRlbGV0ZSh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZX0oKTtKaXQuU2NhbGU9WHplfSk7dmFyIGVvdD1IKHRvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgJHplPShkZSgpLFV0KHBlKSksQkY9KEVyKCksVXQoTXIpKSxLemU9ZTQoKSxyJHQ9RmUoKSxaemU9THYoKSxRaXQ9WzAsMV0sSnplPWZ1bmN0aW9uKGUpeyR6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX3JhbmdlPVswLDFdLHIuX2QzU2NhbGU9QkYuc2NhbGVCYW5kKCksci5fZDNTY2FsZS5yYW5nZShRaXQpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZT1CRi5zY2FsZUxpbmVhcigpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oUWl0KTt2YXIgbj0uMztyZXR1cm4gci5faW5uZXJQYWRkaW5nPXQuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZyhuKSxyLl9vdXRlclBhZGRpbmc9dC5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nKC41LG4pLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lV2l0aG91dFByb3ZpZGVycz1mdW5jdGlvbigpe3ZhciByPW5ldyB0KCkuZG9tYWluKHRoaXMuZG9tYWluKCkpLnJhbmdlKHRoaXMucmFuZ2UoKSkuaW5uZXJQYWRkaW5nKHRoaXMuaW5uZXJQYWRkaW5nKCkpLm91dGVyUGFkZGluZyh0aGlzLm91dGVyUGFkZGluZygpKTtyZXR1cm4gci5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCkpLHJ9LHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiByJHQuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiByJHQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sdC5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5pbnZlcnRSYW5nZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPXRoaXMucmFuZ2UoKSk7dmFyIGk9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSxvPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzBdKSxhPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzFdKSxzPXRoaXMuX2QzU2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gbi5fZDNTY2FsZShoKStpLzJ9KSxjPUJGLmJpc2VjdChsLG8pLHU9QkYuYmlzZWN0KGwsYSk7cmV0dXJuIHMuc2xpY2UoYyx1KX0sdC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLnJhbmdlLmNhbGwodGhpcyxyKX0sdC5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiAxLygxLXIpLTF9LHQuX2NvbnZlcnRUb1Bsb3R0YWJsZU91dGVyUGFkZGluZz1mdW5jdGlvbihyLG4pe3JldHVybiByLygxLW4pfSx0LnByb3RvdHlwZS5fc2V0QmFuZHM9ZnVuY3Rpb24oKXt2YXIgcj0xLTEvKDErdGhpcy5pbm5lclBhZGRpbmcoKSksbj10aGlzLm91dGVyUGFkZGluZygpLygxK3RoaXMuaW5uZXJQYWRkaW5nKCkpO3RoaXMuX2QzU2NhbGUucGFkZGluZ0lubmVyKHIpLHRoaXMuX2QzU2NhbGUucGFkZGluZ091dGVyKG4pfSx0LnByb3RvdHlwZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzY2FsZUJhbmQodGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSl9LHQucHJvdG90eXBlLnN0ZXBXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKigxK3RoaXMuaW5uZXJQYWRkaW5nKCkpKX0sdC5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sdC5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2lubmVyUGFkZGluZzoodGhpcy5faW5uZXJQYWRkaW5nPXIsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLm91dGVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9vdXRlclBhZGRpbmc6KHRoaXMuX291dGVyUGFkZGluZz1yLHRoaXMucmFuZ2UodGhpcy5yYW5nZSgpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKG4pfSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KEt6ZS56b29tT3V0KGEscixuKSl9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKG8pKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KG8rcil9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKGkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFpdH0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHIpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcy5fc2V0QmFuZHMoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhbmdlfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fcmFuZ2U9cix0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UociksdGhpcy5fc2V0QmFuZHMoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGVCYW5kPWZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLmFicyh0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUociktdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKDApKX0sdH0oWnplLlNjYWxlKTt0b3QuQ2F0ZWdvcnk9SnplfSk7dmFyIG4kdD1IKHJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUXplPShkZSgpLFV0KHBlKSksTmY9KEVyKCksVXQoTXIpKSxTUz1GZSgpLHRGZT1MdigpLGVGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvdW50PTAsdGhpcy50cmFja2VyPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRJbmRleD1mdW5jdGlvbih0KXtpZih0aGlzLnRyYWNrZXJbdF0hPW51bGwpcmV0dXJuIHRoaXMudHJhY2tlclt0XTt2YXIgcj10aGlzLmNvdW50O3JldHVybiB0aGlzLnRyYWNrZXJbdF09cix0aGlzLmNvdW50Kz0xLHJ9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX0sZX0oKSxyRmU9ZnVuY3Rpb24oZSl7UXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX3JhbmdlTGVuZ3RoPTEsbi5fdHJhY2tlcj1uZXcgZUZlO3ZhciBpO3N3aXRjaChyKXtjYXNlIG51bGw6Y2FzZSB2b2lkIDA6dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT09bnVsbCYmKHQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9dC5fZ2V0UGxvdHRhYmxlQ29sb3JzKCkpLGk9TmYuc2NhbGVPcmRpbmFsKCkucmFuZ2UodC5fcGxvdHRhYmxlQ29sb3JDYWNoZSk7YnJlYWs7Y2FzZSJDYXRlZ29yeTEwIjpjYXNlImNhdGVnb3J5MTAiOmNhc2UiMTAiOmk9TmYuc2NhbGVPcmRpbmFsKE5mLnNjaGVtZUNhdGVnb3J5MTApO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMCI6Y2FzZSJjYXRlZ29yeTIwIjpjYXNlIjIwIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMGIpO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMGMiOmNhc2UiY2F0ZWdvcnkyMGMiOmNhc2UiMjBjIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvbG9yU2NhbGUgdHlwZSIpfXJldHVybiBuLl9kM1NjYWxlPWksbi5fcmFuZ2VMZW5ndGg9bi5fZDNTY2FsZS5yYW5nZSgpLmxlbmd0aCxufXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gU1MuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTUy5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfSx0LmludmFsaWRhdGVDb2xvckNhY2hlPWZ1bmN0aW9uKCl7dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT1udWxsfSx0Ll9nZXRQbG90dGFibGVDb2xvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9W10sbj1OZi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInBsb3R0YWJsZS1jb2xvci10ZXN0ZXIiKSxpPVNTLkNvbG9yLmNvbG9yVGVzdChuLCIiKSxvPTAsYT1TUy5Db2xvci5jb2xvclRlc3QobiwicGxvdHRhYmxlLWNvbG9ycy0wIik7YSE9bnVsbCYmbzx0aGlzLl9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUyYmIShhPT09aSYmYT09PXJbci5sZW5ndGgtMV0pOylyLnB1c2goYSksbysrLGE9U1MuQ29sb3IuY29sb3JUZXN0KG4sInBsb3R0YWJsZS1jb2xvcnMtIitvKTtyZXR1cm4gbi5yZW1vdmUoKSxyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpLGk9dGhpcy5fdHJhY2tlci5nZXRJbmRleChyKSxvPU1hdGguZmxvb3IoaS90aGlzLl9yYW5nZUxlbmd0aCk7aWYobz09PTApcmV0dXJuIG47dmFyIGE9TWF0aC5sb2cobyp0Ll9MT09QX0xJR0hURU5fRkFDVE9SKzEpO3JldHVybiBTUy5Db2xvci5saWdodGVuQ29sb3IobixhKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzLl90cmFja2VyLmNsZWFyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpLHRoaXMuX3JhbmdlTGVuZ3RoPXIubGVuZ3RofSx0Ll9MT09QX0xJR0hURU5fRkFDVE9SPTEuNix0Ll9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUz0yNTYsdH0odEZlLlNjYWxlKTtyb3QuQ29sb3I9ckZlfSk7dmFyIG8kdD1IKG5vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbkZlPShkZSgpLFV0KHBlKSksTVM9KEVyKCksVXQoTXIpKSxpJHQ9RmUoKSxpRmU9THYoKSxvRmU9ZnVuY3Rpb24oZSl7bkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9ImxpbmVhciIpO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVMaW5lYXIoKTticmVhaztjYXNlImxvZyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZUxvZygpO2JyZWFrO2Nhc2Uic3FydCI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVNxcnQoKTticmVhaztjYXNlInBvdyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVBvdygpO2JyZWFrfWlmKG4uX2NvbG9yU2NhbGU9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIFF1YW50aXRhdGl2ZVNjYWxlIHNjYWxlIHR5cGUgIityKTtyZXR1cm4gbi5yYW5nZSh0LlJFRFMpLG59cmV0dXJuIHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3ZhciBuPU1TLmV4dGVudChyKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS5fZDNJbnRlcnBvbGF0ZWRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnJhbmdlKFswLDFdKS5pbnRlcnBvbGF0ZSh0aGlzLl9pbnRlcnBvbGF0ZUNvbG9ycygpKX0sdC5wcm90b3R5cGUuX2ludGVycG9sYXRlQ29sb3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fY29sb3JSYW5nZTtpZihyLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2NhbGUgYXJyYXlzIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIik7cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8pe289TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTt2YXIgYT1vKihyLmxlbmd0aC0xKSxzPU1hdGguZmxvb3IoYSksbD1NYXRoLmNlaWwoYSksYz1hLXM7cmV0dXJuIE1TLmludGVycG9sYXRlTGFiKHJbc10scltsXSkoYyl9fX0sdC5wcm90b3R5cGUuX3Jlc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLl9kM1NjYWxlPXRoaXMuX2QzSW50ZXJwb2xhdGVkU2NhbGUoKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKTtyZXR1cm4gci5sZW5ndGg+MCYmdGhpcy5fc2V0RG9tYWluKFtpJHQuTWF0aC5taW4ociwwKSxpJHQuTWF0aC5tYXgociwwKV0pLHRoaXN9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JSYW5nZX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2NvbG9yUmFuZ2U9cix0aGlzLl9yZXNldFNjYWxlKCl9LHQuUkVEUz1bIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLHQuQkxVRVM9WyIjRkZGRkZGIiwiI0NDRkZGRiIsIiNBNUZGRkQiLCIjODVGN0ZCIiwiIzZFRDNFRiIsIiM1NUE3RTAiLCIjNDE3RkQwIiwiIzI1NDVEMyIsIiMwQjAyRTEiXSx0LlBPU05FRz1bIiMwQjAyRTEiLCIjMjU0NUQzIiwiIzQxN0ZEMCIsIiM1NUE3RTAiLCIjNkVEM0VGIiwiIzg1RjdGQiIsIiNBNUZGRkQiLCIjQ0NGRkZGIiwiI0ZGRkZGRiIsIiNGRkY2RTEiLCIjRkVGNEMwIiwiI0ZFRDk3NiIsIiNGRUIyNEMiLCIjRkQ4RDNDIiwiI0ZDNEUyQSIsIiNFMzFBMUMiLCIjQjEwMDI2Il0sdH0oaUZlLlNjYWxlKTtub3QuSW50ZXJwb2xhdGVkQ29sb3I9b0ZlfSk7dmFyIHZkPUgoaW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhRmU9KGRlKCksVXQocGUpKSxzRmU9KEVyKCksVXQoTXIpKSxsRmU9ZTQoKSxFUz1GZSgpLGNGZT1MdigpLHVGZT1mdW5jdGlvbihlKXthRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5kZWZhdWx0VGlja3MoKX0sci5fcGFkUHJvcG9ydGlvbj0uMDUsci5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLHIuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBFUy5TZXQscn1yZXR1cm4gdC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb21haW5NaW49bnVsbCx0aGlzLl9kb21haW5NYXg9bnVsbCxlLnByb3RvdHlwZS5hdXRvRG9tYWluLmNhbGwodGhpcyksdGhpc30sdC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe2lmKHRoaXMuX2RvbWFpbk1pbiE9bnVsbCYmdGhpcy5fZG9tYWluTWF4IT1udWxsKXt0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NYXhdKTtyZXR1cm59dmFyIHI9dGhpcy5fZ2V0RXh0ZW50KCk7aWYodGhpcy5fZG9tYWluTWluIT1udWxsKXt2YXIgbj1yWzFdO3RoaXMuX2RvbWFpbk1pbj49biYmKG49dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NaW5dKVsxXSksdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sbl0pO3JldHVybn1pZih0aGlzLl9kb21haW5NYXghPW51bGwpe3ZhciBpPXJbMF07dGhpcy5fZG9tYWluTWF4PD1pJiYoaT10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWF4LHRoaXMuX2RvbWFpbk1heF0pWzBdKSx0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSk7cmV0dXJufWUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX2dldFVuYm91bmRlZEV4dGVudD1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj0hMSk7dmFyIG49dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMociksaT10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYobi5sZW5ndGghPT0wKXt2YXIgbz1bRVMuTWF0aC5taW4obixpWzBdKSxFUy5NYXRoLm1heChuLGlbMV0pXTtpPXRoaXMuX3BhZERvbWFpbihvKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiB0aGlzLl9kb21haW5NaW4hPW51bGwmJihyWzBdPXRoaXMuX2RvbWFpbk1pbiksdGhpcy5fZG9tYWluTWF4IT1udWxsJiYoclsxXT10aGlzLl9kb21haW5NYXgpLHJ9LHQucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZChyKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUociksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyWzBdLnZhbHVlT2YoKT09PXJbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihyKTtpZih0aGlzLl9wYWRQcm9wb3J0aW9uPT09MClyZXR1cm4gcjt2YXIgaT10aGlzLl9wYWRQcm9wb3J0aW9uLzIsbz1yWzBdLGE9clsxXSxzPSExLGw9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mKG4pO3AuZm9yRWFjaChmdW5jdGlvbihkKXtkLnZhbHVlT2YoKT09PW8udmFsdWVPZigpJiYocz0hMCksZC52YWx1ZU9mKCk9PT1hLnZhbHVlT2YoKSYmKGw9ITApfSl9KTt2YXIgYz10aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocik7dmFyIHU9cz9vOnRoaXMuaW52ZXJ0KHRoaXMuc2NhbGUobyktKHRoaXMuc2NhbGUoYSktdGhpcy5zY2FsZShvKSkqaSksaD1sP2E6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShhKSsodGhpcy5zY2FsZShhKS10aGlzLnNjYWxlKG8pKSppKTtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKGMpLHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD90aGlzLl9uaWNlRG9tYWluKFt1LGhdKTpbdSxoXX0sdC5wcm90b3R5cGUuc25hcHBpbmdEb21haW5FbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZDoodGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0Iil9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbCYmKHRoaXMuX2RvbWFpbk1pbj1yWzBdLHRoaXMuX2RvbWFpbk1heD1yWzFdKSxlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5kb21haW5NaW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5kb21haW4oKVswXToodGhpcy5fZG9tYWluTWluPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLmRvbWFpbk1heD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLmRvbWFpbigpWzFdOih0aGlzLl9kb21haW5NYXg9cix0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7dmFyIG49c0ZlLmV4dGVudChyLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gRVMuTWF0aC5pc1ZhbGlkTnVtYmVyKCtpKX0pKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLmludmVydChsRmUuem9vbU91dChhLHIsbikpfTt0aGlzLmRvbWFpbih0aGlzLnJhbmdlKCkubWFwKG8pKX0sdC5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihvKXtyZXR1cm4gbi5pbnZlcnQobytyKX07dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChpKSl9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZVRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnRlZFRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBFUy5NYXRoLmlzTmFOKGkpfHxpPT09MS8wfHxpPT09LTEvMH07aWYobihyWzBdKXx8bihyWzFdKSl7RVMuV2luZG93Lndhcm4oIldhcm5pbmc6IFF1YW50aXRhdGl2ZVNjYWxlcyBjYW5ub3QgdGFrZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb21haW4gdmFsdWUuIElnbm9yaW5nLiIpO3JldHVybn1lLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RGVmYXVsdFRpY2tzIil9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tHZW5lcmF0b3IodGhpcyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfbmljZURvbWFpbiIpfSx0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2RlZmF1bHRFeHRlbnQiKX0sdC5wcm90b3R5cGUudGlja0dlbmVyYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl90aWNrR2VuZXJhdG9yOih0aGlzLl90aWNrR2VuZXJhdG9yPXIsdGhpcyl9LHQuX0RFRkFVTFRfTlVNX1RJQ0tTPTEwLHR9KGNGZS5TY2FsZSk7aW90LlF1YW50aXRhdGl2ZVNjYWxlPXVGZX0pO3ZhciBhJHQ9SChvb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGhGZT0oZGUoKSxVdChwZSkpLGZGZT0oRXIoKSxVdChNcikpLHBGZT12ZCgpLGRGZT1mdW5jdGlvbihlKXtoRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1mRmUuc2NhbGVMaW5lYXIoKSxyfXJldHVybiB0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLDFdfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJbMF09PT1yWzFdP1tyWzBdLTEsclsxXSsxXTpyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlLmludmVydChyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3ModC5fREVGQVVMVF9OVU1fVElDS1MpfSx0LnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocikubmljZShuKS5kb21haW4oKX0sdH0ocEZlLlF1YW50aXRhdGl2ZVNjYWxlKTtvb3QuTGluZWFyPWRGZX0pO3ZhciBzJHQ9SChhb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1GZT0oZGUoKSxVdChwZSkpLGdGZT0oRXIoKSxVdChNcikpLF9GZT12ZCgpLHlGZT1mdW5jdGlvbihlKXttRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXtyPT09dm9pZCAwJiYocj0xMCk7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kM1NjYWxlPWdGZS5zY2FsZUxvZygpLmJhc2Uociksbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gclswXT09PXJbMV0/W3JbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksclsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06cn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHIpLm5pY2UoKS5kb21haW4oKX0sdH0oX0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTthb3QuTG9nPXlGZX0pO3ZhciBsJHQ9SChsb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZGZT0oZGUoKSxVdChwZSkpLHI0PShFcigpLFV0KE1yKSksVFM9RmUoKSxzb3Q9a3MoKSx4RmU9dmQoKSxiRmU9ZnVuY3Rpb24oZSl7dkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9MTApO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9sb2dUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uKGkpe3ZhciBvPWZ1bmN0aW9uKHgsYixTKXtyZXR1cm5beCxiLFNdLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gQy1QfSlbMV19LGE9VFMuTWF0aC5taW4obi5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSxzPVRTLk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbD1hLGM9byhhLHMsLW4uX3Bpdm90KSx1PW8oYSxzLG4uX3Bpdm90KSxoPXMsZj1uLl9sb2dUaWNrcygtYywtbCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybi14fSkucmV2ZXJzZSgpLHA9bi5fbG9nVGlja3ModSxoKSxkPU1hdGgubWF4KGEsLW4uX3Bpdm90KSxnPU1hdGgubWluKHMsbi5fcGl2b3QpLF89cjQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2QsZ10pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhkLGcpKSx5PWYuY29uY2F0KF8pLmNvbmNhdChwKTtyZXR1cm4geS5sZW5ndGg8PTEmJih5PXI0LnNjYWxlTGluZWFyKCkuZG9tYWluKFthLHNdKS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKSkseX0sbi5fZDNTY2FsZT1yNC5zY2FsZUxpbmVhcigpLG4uX2Jhc2U9cixuLl9waXZvdD1uLl9iYXNlLG4uX3NldERvbWFpbihuLl9kZWZhdWx0RXh0ZW50KCkpLG4udGlja0dlbmVyYXRvcihuLl9sb2dUaWNrR2VuZXJhdG9yKSxyPD0xKXRocm93IG5ldyBFcnJvcigiTW9kaWZpZWRMb2dTY2FsZTogVGhlIGJhc2UgbXVzdCBiZSA+IDEiKTtyZXR1cm4gbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciBuPXI8MD8tMToxO3JldHVybiByKj1uLHI8dGhpcy5fcGl2b3QmJihyKz0odGhpcy5fcGl2b3QtcikvdGhpcy5fcGl2b3QpLHI9TWF0aC5sb2cocikvTWF0aC5sb2codGhpcy5fYmFzZSkscio9bixyfSx0LnByb3RvdHlwZS5faW52ZXJ0ZWRBZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgbj1yPDA/LTE6MTtyZXR1cm4gcio9bixyPU1hdGgucG93KHRoaXMuX2Jhc2Uscikscjx0aGlzLl9waXZvdCYmKHI9dGhpcy5fcGl2b3QqKHItMSkvKHRoaXMuX3Bpdm90LTEpKSxyKj1uLHJ9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHRoaXMuX2FkanVzdGVkTG9nKHIpKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9pbnZlcnRlZEFkanVzdGVkTG9nKHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj1yO3ZhciBuPVt0aGlzLl9hZGp1c3RlZExvZyhyWzBdKSx0aGlzLl9hZGp1c3RlZExvZyhyWzFdKV07ZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsbil9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9sb2dUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9ob3dNYW55VGlja3MocixuKTtpZihvPT09MClyZXR1cm5bXTt2YXIgYT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxzPU1hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLmxvZyh0aGlzLl9iYXNlKSksbD1yNC5yYW5nZShzLGEsLU1hdGguY2VpbCgocy1hKS9vKSksYz1yNC5yYW5nZSh0aGlzLl9iYXNlLDEsLSh0aGlzLl9iYXNlLTEpKS5tYXAoTWF0aC5mbG9vciksdT1UUy5BcnJheS51bmlxKGMpLGg9bC5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBNYXRoLnBvdyhpLl9iYXNlLGctMSkqX30pfSksZj1UUy5BcnJheS5mbGF0dGVuKGgpLHA9Zi5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIHI8PWcmJmc8PW59KSxkPXAuc29ydChmdW5jdGlvbihnLF8pe3JldHVybiBnLV99KTtyZXR1cm4gZH0sdC5wcm90b3R5cGUuX2hvd01hbnlUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2FkanVzdGVkTG9nKFRTLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLG89dGhpcy5fYWRqdXN0ZWRMb2coVFMuTWF0aC5tYXgodGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSksYT10aGlzLl9hZGp1c3RlZExvZyhyKSxzPXRoaXMuX2FkanVzdGVkTG9nKG4pLGw9KHMtYSkvKG8taSksYz1NYXRoLmNlaWwobCpzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKTtyZXR1cm4gY30sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCx0aGlzLl9iYXNlXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe2lmKHJbMF09PT1yWzFdKXt2YXIgbj1yWzBdO3JldHVybiBuPjA/W24vdGhpcy5fYmFzZSxuKnRoaXMuX2Jhc2VdOm49PT0wP1stdGhpcy5fYmFzZSx0aGlzLl9iYXNlXTpbbip0aGlzLl9iYXNlLG4vdGhpcy5fYmFzZV19cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdH0oeEZlLlF1YW50aXRhdGl2ZVNjYWxlKTtsb3QuTW9kaWZpZWRMb2c9YkZlfSk7dmFyIGMkdD1IKGNvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoY290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd0ZlPShkZSgpLFV0KHBlKSksZ2E9KEVyKCksVXQoTXIpKSxrdj1IRigpLFNGZT12ZCgpLE1GZT1mdW5jdGlvbihlKXt3RmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1nYS5zY2FsZVRpbWUoKSxyLmF1dG9Eb21haW4oKSxyfXJldHVybiB0LnByb3RvdHlwZS50aWNrSW50ZXJ2YWw9ZnVuY3Rpb24ocixuLGkpe249PT12b2lkIDAmJihuPTEpLGk9PT12b2lkIDAmJihpPSExKTt2YXIgbz1nYS5zY2FsZVRpbWUoKSxhPXQudGltZUludGVydmFsVG9EM1RpbWUocixpKS5ldmVyeShuKTtyZXR1cm4gby5kb21haW4odGhpcy5kb21haW4oKSksby5yYW5nZSh0aGlzLnJhbmdlKCkpLG8udGlja3MoYSl9LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7aWYoclsxXTxyWzBdKXRocm93IG5ldyBFcnJvcigiU2NhbGUuVGltZSBkb21haW4gdmFsdWVzIG11c3QgYmUgaW4gY2hyb25vbG9naWNhbCBvcmRlciIpO3JldHVybiBlLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bbmV3IERhdGUoIjE5NzAtMDEtMDEiKSxuZXcgRGF0ZSgiMTk3MC0wMS0wMiIpXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uZ2V0VGltZSgpLGk9clsxXS5nZXRUaW1lKCk7aWYobj09PWkpe3ZhciBvPW5ldyBEYXRlKG4pO28uc2V0RGF0ZShvLmdldERhdGUoKS0xKTt2YXIgYT1uZXcgRGF0ZShpKTtyZXR1cm4gYS5zZXREYXRlKGEuZ2V0RGF0ZSgpKzEpLFtvLGFdfXJldHVybiByfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShuZXcgRGF0ZShyKSl9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpLmdldFRpbWUoKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApO3JldHVybltyWzBdLnZhbHVlT2YoKSxyWzFdLnZhbHVlT2YoKV19LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5kb21haW4oKTtyZXR1cm5bclswXS52YWx1ZU9mKCksclsxXS52YWx1ZU9mKCldfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLGk9clsxXTt0aGlzLmRvbWFpbihbbmV3IERhdGUobiksbmV3IERhdGUoaSldKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbihyKS5uaWNlKCkuZG9tYWluKCl9LHQudGltZUludGVydmFsVG9EM1RpbWU9ZnVuY3Rpb24ocixuKXtzd2l0Y2gocil7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuc2Vjb25kOnJldHVybiBuP2dhLnV0Y1NlY29uZDpnYS50aW1lU2Vjb25kO2Nhc2Uga3YuVGltZUludGVydmFsLm1pbnV0ZTpyZXR1cm4gbj9nYS51dGNNaW51dGU6Z2EudGltZU1pbnV0ZTtjYXNlIGt2LlRpbWVJbnRlcnZhbC5ob3VyOnJldHVybiBuP2dhLnV0Y0hvdXI6Z2EudGltZUhvdXI7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuZGF5OnJldHVybiBuP2dhLnV0Y0RheTpnYS50aW1lRGF5O2Nhc2Uga3YuVGltZUludGVydmFsLndlZWs6cmV0dXJuIG4/Z2EudXRjV2VlazpnYS50aW1lV2VlaztjYXNlIGt2LlRpbWVJbnRlcnZhbC5tb250aDpyZXR1cm4gbj9nYS51dGNNb250aDpnYS50aW1lTW9udGg7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwueWVhcjpyZXR1cm4gbj9nYS51dGNZZWFyOmdhLnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrcil9fSx0fShTRmUuUXVhbnRpdGF0aXZlU2NhbGUpO2NvdC5UaW1lPU1GZX0pO3ZhciBrcz1IKEh1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJ2PShkZSgpLFV0KHBlKSksRUZlPVpYdCgpO0h1LlRpY2tHZW5lcmF0b3JzPUVGZTtSdi5fX2V4cG9ydFN0YXIoZW90KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihuJHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKG8kdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIoYSR0KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihzJHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGwkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIoYyR0KCksSHUpO3ZhciBURmU9ZW90KCksQ0ZlPXZkKCk7ZnVuY3Rpb24gQUZlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQ0ZlLlF1YW50aXRhdGl2ZVNjYWxlfHxlIGluc3RhbmNlb2YgVEZlLkNhdGVnb3J5fUh1LmlzVHJhbnNmb3JtYWJsZT1BRmV9KTt2YXIgSEY9SChTZT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBQRmU9KGRlKCksVXQocGUpKSxWdT0oRXIoKSxVdChNcikpLHUkdD1fbCgpLGgkdD1CdSgpLElGZT1rcygpLG40PUZlKCksdW90PUlmKCksdHM9dDQoKTtTZS5UaW1lSW50ZXJ2YWw9dW90Lm1ha2VFbnVtKFsic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIndlZWsiLCJtb250aCIsInllYXIiXSk7U2UuVGltZUF4aXNPcmllbnRhdGlvbj11b3QubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSk7U2UuVGllckxhYmVsUG9zaXRpb249dW90Lm1ha2VFbnVtKFsiYmV0d2VlbiIsImNlbnRlciJdKTt2YXIgTEZlPWZ1bmN0aW9uKGUpe1BGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbixpKXt2YXIgbz1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBvLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249bnVsbCxvLl90aWVyTGFiZWxQb3NpdGlvbnM9W10sby5fdXNlVVRDPWksby5hZGRDbGFzcygidGltZS1heGlzIiksby50aWNrTGFiZWxQYWRkaW5nKDUpLG8uYXhpc0NvbmZpZ3VyYXRpb25zKHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TKG8uX3VzZVVUQykpLG8uYW5ub3RhdGlvbkZvcm1hdHRlcihoJHQudGltZSgiJWEgJWIgJWQsICVZIixvLl91c2VVVEMpKSxvfXJldHVybiB0LnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCFyLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBuLnRvTG93ZXJDYXNlKCk9PT0iYmV0d2VlbiJ8fG4udG9Mb3dlckNhc2UoKT09PSJjZW50ZXIifSkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwb3NpdGlvbiBmb3IgdGllciBsYWJlbHMiKTtyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uOih0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jdXJyZW50QXhpc0NvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdfSx0LnByb3RvdHlwZS5heGlzQ29uZmlndXJhdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zO3RoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucz1yLHRoaXMuX251bVRpZXJzPW40Lk1hdGgubWF4KHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSksMCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO2Zvcih2YXIgbj10aGlzLnRpZXJMYWJlbFBvc2l0aW9ucygpLGk9W10sbz0wO288dGhpcy5fbnVtVGllcnM7bysrKWkucHVzaChuW29dfHwiYmV0d2VlbiIpO3JldHVybiB0aGlzLnRpZXJMYWJlbFBvc2l0aW9ucyhpKSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpLG8pe288biYmaS5ldmVyeShmdW5jdGlvbihhKXtyZXR1cm4gci5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKGEpfSkmJihuPW8pfSksbj09PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGgmJihuNC5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tbiksbn0sdC5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24ocil7aWYociYmKHIudG9Mb3dlckNhc2UoKT09PSJyaWdodCJ8fHIudG9Mb3dlckNhc2UoKT09PSJsZWZ0IikpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIGUucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgbj0wO248dGhpcy5fbnVtVGllcnM7bisrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2gocit0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImJldHdlZW4iPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gVnUuc3VtKHRoaXMuX3RpZXJIZWlnaHRzKX0sdC5wcm90b3R5cGUuX2dldEludGVydmFsTGVuZ3RoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpWzBdLGk9SUZlLlRpbWUudGltZUludGVydmFsVG9EM1RpbWUoci5pbnRlcnZhbCx0aGlzLl91c2VVVEMpLG89aS5vZmZzZXQobixyLnN0ZXApO2lmKG8+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0pcmV0dXJuIHRoaXMud2lkdGgoKTt2YXIgYT1NYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZShvKS10aGlzLl9zY2FsZS5zY2FsZShuKSk7cmV0dXJuIGF9LHQucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHIuZm9ybWF0dGVyKHQuX0xPTkdfREFURSkpLndpZHRofSx0LnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe2lmKHRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbiE9bnVsbCl7dmFyIG49dC5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxpPXQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3IuaW50ZXJ2YWxdO2lmKG4hPW51bGwmJmkhPW51bGwmJmk8bilyZXR1cm4hMX12YXIgbz10aGlzLl9tYXhXaWR0aEZvckludGVydmFsKHIpKzIqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7cmV0dXJuIE1hdGgubWluKHRoaXMuX2dldEludGVydmFsTGVuZ3RoKHIpLHRoaXMud2lkdGgoKSk+PW99LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbiksbz10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24ocyxsLGMsdSl7cmV0dXJuIHMrbD5pLmhlaWdodD9zOnMrbH0pLGE9dGhpcy5tYXJnaW4oKSsodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSp0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpOjApO3JldHVybiBpLmhlaWdodD1NYXRoLm1pbihpLmhlaWdodCxvK2EpLGl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3NldHVwRG9tRWxlbWVudHMoKX0sdC5wcm90b3R5cGUuX3NldHVwRG9tRWxlbWVudHM9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuVElNRV9BWElTX1RJRVJfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnM9W10sdGhpcy5fdGllck1hcmtDb250YWluZXJzPVtdLHRoaXMuX3RpZXJCYXNlbGluZXM9W10sdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX2Jhc2VsaW5lLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8dGhpcy5fbnVtVGllcnM7KytyKXt2YXIgbj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElNRV9BWElTX1RJRVJfQ0xBU1MsITApO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMucHVzaChuLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKG4uYXBwZW5kKCJnIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApKSx0aGlzLl90aWVyQmFzZWxpbmVzLnB1c2gobi5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApKX12YXIgaT1uZXcgdSR0LlN2Z0NvbnRleHQodGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1swXS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyB1JHQuQ2FjaGVNZWFzdXJlcihpKX0sdC5wcm90b3R5cGUuX2dldFRpY2tJbnRlcnZhbFZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fc2NhbGUudGlja0ludGVydmFsKHIuaW50ZXJ2YWwsci5zdGVwLHRoaXMuX3VzZVVUQyl9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuLmNvbmNhdChyLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXMoaSkpfSxbXSl9LHQucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPTA7cjx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDtyKyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19MQUJFTF9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJCYXNlbGluZXNbcl0uc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbChyLmludGVydmFsLHIuc3RlcCx0aGlzLl91c2VVVEMpLGk9dGhpcy5fc2NhbGUuZG9tYWluKCksbz1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZU9mKCl9KTtyZXR1cm4gby5pbmRleE9mKGlbMF0udmFsdWVPZigpKT09PS0xJiZuLnVuc2hpZnQoaVswXSksby5pbmRleE9mKGlbMV0udmFsdWVPZigpKT09PS0xJiZuLnB1c2goaVsxXSksbn0sdC5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMsYT10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbihuKSxzPVtdO3RoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJiZXR3ZWVuIiYmbi5zdGVwPT09MT9hLm1hcChmdW5jdGlvbihnLF8pe18rMT49YS5sZW5ndGh8fHMucHVzaChuZXcgRGF0ZSgoYVtfKzFdLnZhbHVlT2YoKS1hW19dLnZhbHVlT2YoKSkvMithW19dLnZhbHVlT2YoKSkpfSk6cz1hO3ZhciBsPXIuc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEocyxmdW5jdGlvbihnKXtyZXR1cm4gU3RyaW5nKGcudmFsdWVPZigpKX0pLGM9bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKTtjLmFwcGVuZCgidGV4dCIpO3ZhciB1PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIifHxuLnN0ZXA9PT0xPzA6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaDt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9oPVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIiP2g9dGhpcy5oZWlnaHQoKS1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6aD10aGlzLmhlaWdodCgpLVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgZj1sLm1lcmdlKGMpLHA9Zi5zZWxlY3RBbGwoInRleHQiKTtwLnNpemUoKT4wJiZwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK2grIikiKSxsLmV4aXQoKS5yZW1vdmUoKSxmLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZyl7cmV0dXJuInRyYW5zbGF0ZSgiK28uX3NjYWxlLnNjYWxlKGcpKyIsMCkifSk7dmFyIGQ9dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldPT09ImNlbnRlciJ8fG4uc3RlcD09PTE/Im1pZGRsZSI6InN0YXJ0IjtmLnNlbGVjdEFsbCgidGV4dCIpLnRleHQobi5mb3JtYXR0ZXIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZCl9LHQucHJvdG90eXBlLl9yZW5kZXJUaWNrTWFya3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbbl0uc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxvPWkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHRzLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShpKSxhPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLHM9dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKS5yZWR1Y2UoZnVuY3Rpb24obCxjKXtyZXR1cm4gbCtjfSwwKTt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpOihhLnkxPXRoaXMuaGVpZ2h0KCktcyxhLnkyPXRoaXMuaGVpZ2h0KCktKHMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKSksby5hdHRycyhhKSx0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKTooYS55MT10aGlzLmhlaWdodCgpLXMsYS55Mj10aGlzLmhlaWdodCgpLShzKyh0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl09PT0iY2VudGVyIj90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpW28uc2l6ZSgpLTFdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5jbGFzc2VkKHRzLkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksVnUuc2VsZWN0KG8ubm9kZXMoKVtvLnNpemUoKS0xXSkuY2xhc3NlZCh0cy5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLGkuZXhpdCgpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEociksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobiksbz10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtvLnkyPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuaGVpZ2h0KCktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaS5hdHRycyhvKSxuLmV4aXQoKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleDwxP1tdOnRoaXMuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleC0xXVswXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIG49dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKSxuLmZvckVhY2goZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fcmVuZGVyVGllckxhYmVscyhyLl90aWVyTGFiZWxDb250YWluZXJzW2ZdLGgsZil9KTtmb3IodmFyIGk9bi5tYXAoZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24oaCl9KSxvPTAsYT0wO2E8TWF0aC5tYXgobi5sZW5ndGgsMSk7KythKXt2YXIgcz10aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKTtzLnkxKz10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9vOi1vLHMueTI9cy55MSx0aGlzLl90aWVyQmFzZWxpbmVzW2FdLmF0dHJzKHMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLG8rPXRoaXMuX3RpZXJIZWlnaHRzW2FdfXZhciBsPVtdLGM9dGhpcy5fc2NhbGUuZG9tYWluKCksdT10aGlzLl9zY2FsZS5zY2FsZShjWzFdKS10aGlzLl9zY2FsZS5zY2FsZShjWzBdKTt0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChuWzBdKSoxLjU+PXUmJihsPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSksdGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKGwpLHRoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpdGhpcy5fcmVuZGVyVGlja01hcmtzKGlbYV0sYSksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKGEpO3JldHVybiB0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuX2RyYXdBbm5vdGF0aW9ucygpOnRoaXMuX3JlbW92ZUFubm90YXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuaGVpZ2h0KCksaT0wO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5USU1FX0FYSVNfVElFUl9DTEFTUykuYXR0cigidmlzaWJpbGl0eSIsZnVuY3Rpb24obyxhKXtyZXR1cm4gaSs9ci5fdGllckhlaWdodHNbYV0saTw9bj8iaW5oZXJpdCI6ImhpZGRlbiJ9KX0sdC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguZmxvb3IoaS5sZWZ0KTw9TWF0aC5jZWlsKHUubGVmdCkmJk1hdGguZmxvb3IoaS50b3ApPD1NYXRoLmNlaWwodS50b3ApJiZNYXRoLmZsb29yKHUucmlnaHQpPD1NYXRoLmNlaWwoaS5sZWZ0K24ud2lkdGgoKSkmJk1hdGguZmxvb3IodS5ib3R0b20pPD1NYXRoLmNlaWwoaS50b3Arbi5oZWlnaHQoKSl9LGE9dGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbih1LGgpe3ZhciBmPVZ1LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpO3JldHVybiBmPT09InZpc2libGUifHxmPT09ImluaGVyaXQifSkscz1hLm5vZGVzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiB1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksbD10aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24odSxoKXt2YXIgZj1WdS5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gZj09PSJ2aXNpYmxlInx8Zj09PSJpbmhlcml0In0pLGM7bC5lYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVZ1LnNlbGVjdCh0aGlzKSxkPXNbaF0sZz1zW2grMV0sXz1jIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsYykseT1kIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZCkseD1nIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZyk7IW8oZil8fF98fHl8fHg/cC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOihjPWYscC5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSl9KX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5USU1FX0FYSVNfVElFUl9DTEFTUz0idGltZS1heGlzLXRpZXIiLHQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYPSh4ZD17fSx4ZFtTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kXT0wLHhkW1NlLlRpbWVJbnRlcnZhbC5taW51dGVdPTEseGRbU2UuVGltZUludGVydmFsLmhvdXJdPTIseGRbU2UuVGltZUludGVydmFsLmRheV09Myx4ZFtTZS5UaW1lSW50ZXJ2YWwud2Vla109NCx4ZFtTZS5UaW1lSW50ZXJ2YWwubW9udGhdPTUseGRbU2UuVGltZUludGVydmFsLnllYXJdPTYseGQpLHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBoJHQudGltZShpLHIpfTtyZXR1cm5bW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDozMCxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjMsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6Nixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxMixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVhICVlIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJWUiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjMsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIleSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MTAwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjIwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDo1MDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MWUzLGZvcm1hdHRlcjpuKCIlWSIpfV1dfSx0Ll9MT05HX0RBVEU9bmV3IERhdGUoOTk5OSw4LDI5LDEyLDU5LDk5OTkpLHR9KHRzLkF4aXMpO1NlLlRpbWU9TEZlO3ZhciB4ZH0pO3ZhciBmJHQ9SChpND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBob3Q9KGRlKCksVXQocGUpKTtob3QuX19leHBvcnRTdGFyKCRYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEtYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEhGKCksaTQpfSk7dmFyIG80PUgoZm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrRmU9RmUoKSxSRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3Rbcl1dLnNpemUhPT0wKXJldHVybiExO3JldHVybiEwfSxlLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj10Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3JdLGk9cj09PSJ3aGVlbCI/e3Bhc3NpdmU6ITF9OnZvaWQgMDt0Ll9ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMCl9LGUucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb25uZWN0ZWQmJnRoaXMuX2hhc05vQ2FsbGJhY2tzKCkmJihPYmplY3Qua2V5cyh0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bcl07dC5fZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSksdGhpcy5fY29ubmVjdGVkPSExKX0sZS5wcm90b3R5cGUuX2FkZENhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxyKXt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPT1udWxsJiYodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XT1uZXcga0ZlLkNhbGxiYWNrU2V0KSx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmFkZChyKSx0aGlzLl9jb25uZWN0KCl9LGUucHJvdG90eXBlLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKHQscil7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XSE9bnVsbCYmdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XS5kZWxldGUociksdGhpcy5fZGlzY29ubmVjdCgpfSxlLnByb3RvdHlwZS5fY2FsbENhbGxiYWNrc0ZvckV2ZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF07aSE9bnVsbCYmaS5jYWxsQ2FsbGJhY2tzLmFwcGx5KGkscil9LGV9KCk7Zm90LkRpc3BhdGNoZXI9UkZlfSk7dmFyIHAkdD1IKHBvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTkZlPShkZSgpLFV0KHBlKSksREZlPW80KCksT0ZlPWZ1bmN0aW9uKGUpe05GZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obil7cmV0dXJuIHIuX3Byb2Nlc3NLZXlkb3duKG4pfSxyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG4pe3JldHVybiByLl9wcm9jZXNzS2V5dXAobil9LHJ9cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciByPWRvY3VtZW50W3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IHQsZG9jdW1lbnRbdC5fRElTUEFUQ0hFUl9LRVldPXIpLHJ9LHQucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIua2V5Q29kZSxyKX0sdC5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZVVBfRVZFTlRfTkFNRSxyLmtleUNvZGUscil9LHQucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25LZXlVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlVUF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX0tFWVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfS2V5Iix0Ll9LRVlET1dOX0VWRU5UX05BTUU9ImtleWRvd24iLHQuX0tFWVVQX0VWRU5UX05BTUU9ImtleXVwIix0fShERmUuRGlzcGF0Y2hlcik7cG90LktleT1PRmV9KTt2YXIgbSR0PUgoZG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6RmU9KGRlKCksVXQocGUpKSxkJHQ9RmUoKSxGRmU9bzQoKSxCRmU9ZnVuY3Rpb24oZSl7ekZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX2xhc3RNb3VzZVBvc2l0aW9uPXt4Oi0xLHk6LTF9LG4uX3RyYW5zbGF0b3I9ZCR0LmdldFRyYW5zbGF0b3Iocik7dmFyIGk9ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cmV0dXJuIG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VPVkVSX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRV09aSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFT1VUX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VET1dOX0VWRU5UX05BTUUpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VVUF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fV0hFRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fV0hFRUxfRVZFTlRfTkFNRSl9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSl9LG59cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihyKXt2YXIgbj1yLnJvb3QoKS5yb290RWxlbWVudCgpLGk9blt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIGk9PW51bGwmJihpPW5ldyB0KHIpLG5bdC5fRElTUEFUQ0hFUl9LRVldPWkpLGl9LHQucHJvdG90eXBlLm9uTW91c2VNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFTU9WRV9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZk1vdXNlTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRURPV05fRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Nb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbldoZWVsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1dIRUVMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmV2hlZWw9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fV0hFRUxfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX0RCTENMSUNLX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmRGJsQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPSJlbGVtZW50IiksbyE9PSJwYWdlIiYmbyE9PSJlbGVtZW50Iil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIrbysiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYobz09PSJwYWdlInx8dGhpcy5ldmVudEluc2lkZShyLG4pKXt2YXIgYT10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbihuLmNsaWVudFgsbi5jbGllbnRZKTt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1hLHRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChpLHRoaXMubGFzdE1vdXNlUG9zaXRpb24oKSxuKX19LHQucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGQkdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUocixuKX0sdC5wcm90b3R5cGUubGFzdE1vdXNlUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdE1vdXNlUG9zaXRpb259LHQuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIix0Ll9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIix0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIix0Ll9NT1VTRU9VVF9FVkVOVF9OQU1FPSJtb3VzZW91dCIsdC5fTU9VU0VET1dOX0VWRU5UX05BTUU9Im1vdXNlZG93biIsdC5fTU9VU0VVUF9FVkVOVF9OQU1FPSJtb3VzZXVwIix0Ll9XSEVFTF9FVkVOVF9OQU1FPSJ3aGVlbCIsdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRT0iZGJsY2xpY2siLHR9KEZGZS5EaXNwYXRjaGVyKTtkb3QuTW91c2U9QkZlfSk7dmFyIF8kdD1IKG1vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSEZlPShkZSgpLFV0KHBlKSksZyR0PUZlKCksVkZlPW80KCksVUZlPWZ1bmN0aW9uKGUpe0hGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdHJhbnNsYXRvcj1nJHQuZ2V0VHJhbnNsYXRvcihyKSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNITU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsInBhZ2UiKX0sbn1yZXR1cm4gdC5nZXREaXNwYXRjaGVyPWZ1bmN0aW9uKHIpe3ZhciBuPXIucm9vdCgpLnJvb3RFbGVtZW50KCksaT1uW3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gaT09bnVsbCYmKGk9bmV3IHQociksblt0Ll9ESVNQQVRDSEVSX0tFWV09aSksaX0sdC5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vblRvdWNoTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaE1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaEVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSEVORF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIRU5EX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaENhbmNlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbihyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz0iZWxlbWVudCIpLG8hPT0icGFnZSImJm8hPT0iZWxlbWVudCIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK28rIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKCEobz09PSJlbGVtZW50IiYmIXRoaXMuZXZlbnRJbnNpZGUocixuKSkpe2Zvcih2YXIgYT1uLmNoYW5nZWRUb3VjaGVzLHM9e30sbD1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD11LmlkZW50aWZpZXIsZj10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbih1LmNsaWVudFgsdS5jbGllbnRZKTtmIT1udWxsJiYoc1toXT1mLGwucHVzaChoKSl9bC5sZW5ndGg+MCYmdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KGksbCxzLG4pfX0sdC5wcm90b3R5cGUuZXZlbnRJbnNpZGU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gZyR0LlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShyLG4pfSx0Ll9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCIsdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0Iix0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIix0Ll9UT1VDSEVORF9FVkVOVF9OQU1FPSJ0b3VjaGVuZCIsdC5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRT0idG91Y2hjYW5jZWwiLHR9KFZGZS5EaXNwYXRjaGVyKTttb3QuVG91Y2g9VUZlfSk7dmFyIE52PUgoYTQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGE0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ290PShkZSgpLFV0KHBlKSk7Z290Ll9fZXhwb3J0U3RhcihwJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihtJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihfJHQoKSxhNCl9KTt2YXIgRHY9SChfb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuX2FuY2hvckNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0Ll9hbmNob3Iocil9LHRoaXMuX2VuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXNjb25uZWN0KCksdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz10LHRoaXMuX2Nvbm5lY3QoKSx0aGlzfSxlLnByb3RvdHlwZS5kZXRhY2hGcm9tPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRldGFjaCgpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89bnVsbCx0aGlzfSxlLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9dCx0aGlzLl9lbmFibGVkP3RoaXMuX2Nvbm5lY3QoKTp0aGlzLl9kaXNjb25uZWN0KCksdGhpcyl9LGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24odCl7dGhpcy5faXNBbmNob3JlZD0hMH0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZD0hMX0sZS5wcm90b3R5cGUuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2U9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vcmlnaW5Ub1Jvb3QoKTtyZXR1cm57eDp0Lngtci54LHk6dC55LXIueX19LGUucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMDw9dC54JiYwPD10LnkmJnQueDw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZ0Lnk8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCl9LGUucHJvdG90eXBlLl9jb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkKCkmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJiF0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9uQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZS5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl91bmFuY2hvcigpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub2ZmQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZX0oKTtfb3QuSW50ZXJhY3Rpb249cUZlfSk7dmFyIHgkdD1IKHlvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgR0ZlPShkZSgpLFV0KHBlKSkseSR0PU52KCksdiR0PUZlKCksV0ZlPUR2KCksWUZlPWZ1bmN0aW9uKGUpe0dGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9jbGlja2VkRG93bj0hMSxyLl9kb3VibGVDbGlja2luZz0hMSxyLl9vbkNsaWNrQ2FsbGJhY2tzPW5ldyB2JHQuQ2FsbGJhY2tTZXQsci5fb25Eb3VibGVDbGlja0NhbGxiYWNrcz1uZXcgdiR0LkNhbGxiYWNrU2V0LHIuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihuLGkpfSxyLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChuLGkpfSxyLl9kYmxDbGlja0NhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZURibENsaWNrKG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihpW25bMF1dLG8pfSxyLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChpW25bMF1dLG8pfSxyLl90b3VjaENhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2NsaWNrZWREb3duPSExfSxyfXJldHVybiB0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj15JHQuTW91c2UuZ2V0RGlzcGF0Y2hlcihyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25EYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9eSR0LlRvdWNoLmdldERpc3BhdGNoZXIociksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl9oYW5kbGVDbGlja0Rvd249ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYodGhpcy5fY2xpY2tlZERvd249ITAsdGhpcy5fY2xpY2tlZFBvaW50PWkpfSx0LnByb3RvdHlwZS5faGFuZGxlQ2xpY2tVcD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2NsaWNrZWREb3duJiZ0Ll9wb2ludHNFcXVhbChvLHRoaXMuX2NsaWNrZWRQb2ludCkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG8sbil9LDApLHRoaXMuX2NsaWNrZWREb3duPSExfSx0LnByb3RvdHlwZS5faGFuZGxlRGJsQ2xpY2s9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9kb3VibGVDbGlja2luZz0hMCx0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobyxuKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2RvdWJsZUNsaWNraW5nPSExfSwwKX0sdC5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24ocixuKXtyZXR1cm4gci54PT09bi54JiZyLnk9PT1uLnl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oV0ZlLkludGVyYWN0aW9uKTt5b3QuQ2xpY2s9WUZlfSk7dmFyIHckdD1IKHZvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgakZlPShkZSgpLFV0KHBlKSksYiR0PU52KCksczQ9RmUoKSxYRmU9RHYoKSwkRmU9ZnVuY3Rpb24oZSl7akZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kcmFnZ2luZz0hMSxuLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PSEwLG4uX21vdXNlRmlsdGVyPXQuX0RFRkFVTFRfTU9VU0VfRklMVEVSLG4uX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fc3RhcnREcmFnKGksbyl9LG4uX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX2RvRHJhZyhpLG8pfSxuLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fZW5kRHJhZyhpLG8pfSxuLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9zdGFydERyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9kb0RyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihpLG8sYSl7cmV0dXJuIG4uX2VuZERyYWcob1tpWzBdXSxhKX0sbi5fbW91c2VCdXR0b249ciE9PXZvaWQgMD9yOjAsbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9YiR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9YiR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDpzNC5NYXRoLmNsYW1wKG4ueCwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSkseTpzNC5NYXRoLmNsYW1wKG4ueSwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCkpfTpufSx0LnByb3RvdHlwZS5fc3RhcnREcmFnPWZ1bmN0aW9uKHIsbil7aWYoIShuIGluc3RhbmNlb2YgTW91c2VFdmVudCYmIXRoaXMuX21vdXNlRmlsdGVyKG4pKSl7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmKG4ucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnZ2luZz0hMCx0aGlzLl9kcmFnT3JpZ2luPWksdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbikpfX0sdC5wcm90b3R5cGUuX2RvRHJhZz1mdW5jdGlvbihyLG4pe3RoaXMuX2RyYWdnaW5nJiZ0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocikpfSx0LnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihyLG4pe24gaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiZuLmJ1dHRvbiE9PXRoaXMuX21vdXNlQnV0dG9ufHx0aGlzLl9kcmFnZ2luZyYmKHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihyKSkpfSx0LnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ6KHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9cix0aGlzKX0sdC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21vdXNlRmlsdGVyOih0aGlzLl9tb3VzZUZpbHRlcj1yLHRoaXMpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQuX0RFRkFVTFRfTU9VU0VfRklMVEVSPWZ1bmN0aW9uKHIpe3JldHVybiByLmJ1dHRvbj09PTB9LHR9KFhGZS5JbnRlcmFjdGlvbik7dm90LkRyYWc9JEZlfSk7dmFyIHdvdD1IKGJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS0ZlPShkZSgpLFV0KHBlKSksUyR0PU52KCkseG90PUZlKCksWkZlPUR2KCksSkZlPWZ1bmN0aW9uKGUpe0tGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9rZXlQcmVzc0NhbGxiYWNrcz17fSxyLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9LHIuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiExfSxyLl9kb3duZWRLZXlzPW5ldyB4b3QuU2V0LHIuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVLZXlEb3duRXZlbnQobixpKX0sci5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5faGFuZGxlS2V5VXBFdmVudChuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9UyR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPVMkdC5LZXkuZ2V0RGlzcGF0Y2hlcigpLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vbktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9bnVsbCx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleURvd24odGhpcy5fa2V5RG93bkNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXI9bnVsbH0sdC5wcm90b3R5cGUuX2hhbmRsZUtleURvd25FdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLmxhc3RNb3VzZVBvc2l0aW9uKCkpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYhbi5yZXBlYXQmJih0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXSYmdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uY2FsbENhbGxiYWNrcyhyKSx0aGlzLl9kb3duZWRLZXlzLmFkZChyKSl9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHIpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLmNhbGxDYWxsYmFja3MociksdGhpcy5fZG93bmVkS2V5cy5kZWxldGUocil9LHQucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXT1uZXcgeG90LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXS5hZGQobiksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uZGVsZXRlKG4pLHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLnNpemU9PT0wJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0sdGhpc30sdC5wcm90b3R5cGUub25LZXlSZWxlYXNlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdPW5ldyB4b3QuQ2FsbGJhY2tTZXQpLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uYWRkKG4pLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5kZWxldGUobiksdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5zaXplPT09MCYmZGVsZXRlIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0sdGhpc30sdH0oWkZlLkludGVyYWN0aW9uKTtib3QuS2V5PUpGZX0pO3ZhciBDJHQ9SChTb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFGZT0oZGUoKSxVdChwZSkpLHRCZT0oRXIoKSxVdChNcikpLE0kdD1OdigpLEUkdD1rcygpLHlsPUZlKCksZUJlPWw0KCksckJlPUR2KCksVCR0PWU0KCksbkJlPWZ1bmN0aW9uKGUpe1FGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl93aGVlbEZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4hMH0saS5fd2hlZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEpe3JldHVybiBpLl9oYW5kbGVXaGVlbEV2ZW50KG8sYSl9LGkuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoU3RhcnQobyxhLHMpfSxpLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVBpbmNoKG8sYSxzKX0saS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fcGFuRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl96b29tRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl94U2NhbGVzPW5ldyB5bC5TZXQsaS5feVNjYWxlcz1uZXcgeWwuU2V0LGkuX2RyYWdJbnRlcmFjdGlvbj1uZXcgZUJlLkRyYWcsaS5fc2V0dXBEcmFnSW50ZXJhY3Rpb24oKSxpLl90b3VjaElkcz10QmUubWFwKCksaS5fbWluRG9tYWluRXh0ZW50cz1uZXcgeWwuTWFwLGkuX21heERvbWFpbkV4dGVudHM9bmV3IHlsLk1hcCxpLl9taW5Eb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxpLl9tYXhEb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxyIT1udWxsJiZpLmFkZFhTY2FsZShyKSxuIT1udWxsJiZpLmFkZFlTY2FsZShuKSxpfXJldHVybiB0LnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSx0LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fd2hlZWxGaWx0ZXI6KHRoaXMuX3doZWVsRmlsdGVyPXIsdGhpcyl9LHQucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5wYW4obi5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihpLHIueCkpfSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihpKXtpLnBhbihuLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uKGksci55KSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcztpPT09dm9pZCAwJiYoaT0hMCk7dmFyIGEscztyZXR1cm4gbiE9bnVsbCYmKGE9bi54LHM9bi55LGkmJih0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPW8uX2NvbnN0cmFpbmVkWm9vbShsLHIsYSk7YT1jLmNlbnRlclBvaW50LHI9Yy56b29tQW1vdW50fSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1vLl9jb25zdHJhaW5lZFpvb20obCxyLHMpO3M9Yy5jZW50ZXJQb2ludCxyPWMuem9vbUFtb3VudH0pKSksdGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1sLnJhbmdlKCksdT1hPT1udWxsPyhjWzFdK2NbMF0pLzI6YTtsLnpvb20ocix1KX0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9bC5yYW5nZSgpLHU9cz09bnVsbD8oY1sxXStjWzBdKS8yOnM7bC56b29tKHIsdSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKSx7em9vbUFtb3VudDpyLGNlbnRlclZhbHVlOntjZW50ZXJYOmEsY2VudGVyWTpzfX19LHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1NJHQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9TSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGwsdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hTdGFydD1mdW5jdGlvbihyLG4saSl7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aCYmdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDI7bysrKXt2YXIgYT1yW29dO3RoaXMuX3RvdWNoSWRzLnNldChhLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW2FdKSl9fSx0LnByb3RvdHlwZS5faGFuZGxlUGluY2g9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7aWYoISh0aGlzLl90b3VjaElkcy5zaXplKCk8Mikpe3ZhciBhPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpO2lmKCEoIXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoYVswXSkpfHwhdGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShhWzFdKSkpKXt2YXIgcz10Ll9wb2ludERpc3RhbmNlKGFbMF0sYVsxXSk7aWYocyE9PTApe3IuZm9yRWFjaChmdW5jdGlvbihTKXtvLl90b3VjaElkcy5oYXMoUy50b1N0cmluZygpKSYmby5fdG91Y2hJZHMuc2V0KFMudG9TdHJpbmcoKSxvLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKG5bU10pKX0pO3ZhciBsPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpLGM9dC5fcG9pbnREaXN0YW5jZShsWzBdLGxbMV0pO2lmKGMhPT0wKXt2YXIgdT1zL2MsaD1sLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OihTLngtYVtDXS54KS91LHk6KFMueS1hW0NdLnkpL3V9fSksZj10LmNlbnRlclBvaW50KGFbMF0sYVsxXSkscD10aGlzLnpvb20odSxmKSxkPXAuY2VudGVyVmFsdWUsZz1wLnpvb21BbW91bnQsXz1kLmNlbnRlclgseT1kLmNlbnRlclkseD1hLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OmhbQ10ueCpnK1MueCx5OmhbQ10ueSpnK1MueX19KSxiPXt4Ol8tKHhbMF0ueCt4WzFdLngpLzIseTp5LSh4WzBdLnkreFsxXS55KS8yfTt0aGlzLnBhbihiKX19fX19LHQuY2VudGVyUG9pbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm57eDooaStvKS8yLHk6KHMrYSkvMn19LHQuX3BvaW50RGlzdGFuY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG8taSwyKStNYXRoLnBvdyhzLWEsMikpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFbmQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ci5mb3JFYWNoKGZ1bmN0aW9uKGEpe28uX3RvdWNoSWRzLnJlbW92ZShhLnRvU3RyaW5nKCkpfSksdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPjAmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSx0LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbihyLG4pe2lmKCEhdGhpcy5fd2hlZWxGaWx0ZXIobikpe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQoaSkpe24ucHJldmVudERlZmF1bHQoKTt2YXIgbz1uLmRlbHRhWSE9PTA/bi5kZWx0YVk6bi5kZWx0YVgsYT1vKihuLmRlbHRhTW9kZT90Ll9QSVhFTFNfUEVSX0xJTkU6MSkscz1NYXRoLnBvdygyLGEqLjAwMik7dGhpcy56b29tKHMsaSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9fX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIFQkdC5jb25zdHJhaW5lZFpvb20ocixuLGksdGhpcy5taW5Eb21haW5FeHRlbnQociksdGhpcy5tYXhEb21haW5FeHRlbnQociksdGhpcy5taW5Eb21haW5WYWx1ZShyKSx0aGlzLm1heERvbWFpblZhbHVlKHIpKX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24ocixuKXtyZXR1cm4gVCR0LmNvbnN0cmFpbmVkVHJhbnNsYXRpb24ocixuLHRoaXMubWluRG9tYWluVmFsdWUociksdGhpcy5tYXhEb21haW5WYWx1ZShyKSl9LHQucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoITEpO3ZhciBuO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChmdW5jdGlvbigpe3JldHVybiBuPW51bGx9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKGZ1bmN0aW9uKGksbyl7aWYoIShyLl90b3VjaElkcy5zaXplKCk+PTIpKXt2YXIgYT17eDoobj09bnVsbD9pLng6bi54KS1vLngseToobj09bnVsbD9pLnk6bi55KS1vLnl9O3IucGFuKGEpLG49b319KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3BhbkVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9KX0sdC5wcm90b3R5cGUuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHM9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMubWluRG9tYWluRXh0ZW50KHIpIT1udWxsJiZ0aGlzLm1heERvbWFpbkV4dGVudChyKSE9bnVsbCYmIShyIGluc3RhbmNlb2YgRSR0LkxpbmVhcikmJiEociBpbnN0YW5jZW9mIEUkdC5UaW1lKX0sdC5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PW51bGwpe3ZhciBpPVtdO3JldHVybiB0aGlzLl94U2NhbGVzLmZvckVhY2goZnVuY3Rpb24obyl7aS5wdXNoKG8pfSksaX1yZXR1cm4gdGhpcy5feFNjYWxlcz1uZXcgeWwuU2V0LHIuZm9yRWFjaChmdW5jdGlvbihvKXtuLmFkZFhTY2FsZShvKX0pLHRoaXN9LHQucHJvdG90eXBlLnlTY2FsZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT1udWxsKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5feVNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kucHVzaChvKX0pLGl9cmV0dXJuIHRoaXMuX3lTY2FsZXM9bmV3IHlsLlNldCxyLmZvckVhY2goZnVuY3Rpb24obyl7bi5hZGRZU2NhbGUobyl9KSx0aGlzfSx0LnByb3RvdHlwZS5hZGRYU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3hTY2FsZXMuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZVhTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feFNjYWxlcy5kZWxldGUociksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmFkZFlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feVNjYWxlcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlWVNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl95U2NhbGVzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fbWluRG9tYWluRXh0ZW50cy5nZXQocik7aWYobi52YWx1ZU9mKCk8MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3ZhciBpPXRoaXMubWF4RG9tYWluRXh0ZW50KHIpO2lmKGkhPW51bGwmJmkudmFsdWVPZigpPG4udmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWluRG9tYWluRXh0ZW50IG11c3QgYmUgc21hbGxlciB0aGFuIG1heERvbWFpbkV4dGVudCBmb3IgdGhlIHNhbWUgU2NhbGUiKTtyZXR1cm4gdGhpcy5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cyhyKSYmeWwuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhEb21haW5FeHRlbnQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldChyKTtpZihuLnZhbHVlT2YoKTw9MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIHBvc2l0aXZlIik7dmFyIGk9dGhpcy5taW5Eb21haW5FeHRlbnQocik7aWYoaSE9bnVsbCYmbi52YWx1ZU9mKCk8aS52YWx1ZU9mKCkpdGhyb3cgbmV3IEVycm9yKCJtYXhEb21haW5FeHRlbnQgbXVzdCBiZSBsYXJnZXIgdGhhbiBtaW5Eb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHMocikmJnlsLldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21heERvbWFpbkV4dGVudHMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbj09bnVsbD90aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KHIpOih0aGlzLl9taW5Eb21haW5WYWx1ZXMuc2V0KHIsbiksdGhpcyl9LHQucHJvdG90eXBlLm1heERvbWFpblZhbHVlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PW51bGw/dGhpcy5fbWF4RG9tYWluVmFsdWVzLmdldChyKToodGhpcy5fbWF4RG9tYWluVmFsdWVzLnNldChyLG4pLHRoaXMpfSx0LnByb3RvdHlwZS5zZXRNaW5NYXhEb21haW5WYWx1ZXNUbz1mdW5jdGlvbihyKXt0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUocik7dmFyIG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9blswXSxvPW5bMV07cmV0dXJuIHRoaXMubWluRG9tYWluVmFsdWUocixpKSx0aGlzLm1heERvbWFpblZhbHVlKHIsbyksdGhpc30sdC5wcm90b3R5cGUub25QYW5FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUGFuRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25QYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0Ll9QSVhFTFNfUEVSX0xJTkU9MTIwLHR9KHJCZS5JbnRlcmFjdGlvbik7U290LlBhblpvb209bkJlfSk7dmFyIFAkdD1IKEVvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaUJlPShkZSgpLFV0KHBlKSksQSR0PU52KCksTW90PUZlKCksb0JlPUR2KCksYUJlPWZ1bmN0aW9uKGUpe2lCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9vdmVyQ29tcG9uZW50PSExLHIuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz1uZXcgTW90LkNhbGxiYWNrU2V0LHIuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzPW5ldyBNb3QuQ2FsbGJhY2tTZXQsci5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IE1vdC5DYWxsYmFja1NldCxyLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVNb3VzZUV2ZW50KG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZVRvdWNoRXZlbnQoaVtuWzBdXSxvKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9QSR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9QSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5faGFuZGxlTW91c2VFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX21vdXNlRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlUG9pbnRlckV2ZW50PWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKSxvPXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpO28mJm4/KHRoaXMuX292ZXJDb21wb25lbnR8fHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpLHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSkpOnRoaXMuX292ZXJDb21wb25lbnQmJnRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSksdGhpcy5fb3ZlckNvbXBvbmVudD1vJiZufSx0LnByb3RvdHlwZS5vblBvaW50ZXJFbnRlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyRW50ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyRXhpdD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJFeGl0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0ob0JlLkludGVyYWN0aW9uKTtFb3QuUG9pbnRlcj1hQmV9KTt2YXIgbDQ9SChaZz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWmcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjND0oZGUoKSxVdChwZSkpO2M0Ll9fZXhwb3J0U3Rhcih4JHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKHckdCgpLFpnKTtjNC5fX2V4cG9ydFN0YXIod290KCksWmcpO2M0Ll9fZXhwb3J0U3RhcihDJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKFAkdCgpLFpnKTt2YXIgc0JlPWU0KCk7Wmcuem9vbU91dD1zQmUuem9vbU91dH0pO3ZhciBUb3Q9SCh1ND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsQmU9KGRlKCksVXQocGUpKSxWRj1GZSgpLGNCZT1rYygpLGVzOyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKGVzPXU0LlByb3BlcnR5TW9kZXx8KHU0LlByb3BlcnR5TW9kZT17fSkpO3ZhciB1QmU9ZnVuY3Rpb24oZSl7bEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2JveFZpc2libGU9ITEsci5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19LHIuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHIuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHIuYWRkQ2xhc3MoInNlbGVjdGlvbi1ib3gtbGF5ZXIiKSxyLl9hZGp1c3RCb3VuZHNDYWxsYmFjaz1mdW5jdGlvbigpe3IucmVuZGVyKCl9LHIuX292ZXJmbG93SGlkZGVuPSEwLHIuX3hFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHIuX3lFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzZWxlY3Rpb24tYm94IiwhMCkucmVtb3ZlKCksdGhpcy5fYm94QXJlYT10aGlzLl9ib3guYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2VsZWN0aW9uLWFyZWEiLCEwKX0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm57d2lkdGg6cixoZWlnaHQ6bn19LHQucHJvdG90eXBlLmJvdW5kcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRCb3VuZHMoKToodGhpcy5fc2V0Qm91bmRzKHIpLHRoaXMuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49e3g6TWF0aC5taW4oci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9LGk9e3g6TWF0aC5tYXgoci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWF4KHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9O3RoaXMuX2JveEJvdW5kcz17dG9wTGVmdDpuLGJvdHRvbVJpZ2h0Oml9fSx0LnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54OnRoaXMuX3hTY2FsZT09bnVsbD8wOk1hdGgubWluKHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1pbih0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9LGJvdHRvbVJpZ2h0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6dGhpcy5feFNjYWxlPT1udWxsPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1heCh0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9fX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2JveFZpc2libGUpe3ZhciByPXRoaXMuYm91bmRzKCksbj1yLnRvcExlZnQueSxpPXIuYm90dG9tUmlnaHQueSxvPXIudG9wTGVmdC54LGE9ci5ib3R0b21SaWdodC54O2lmKCEoVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZWRi5NYXRoLmlzVmFsaWROdW1iZXIoaSkmJlZGLk1hdGguaXNWYWxpZE51bWJlcihvKSYmVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6byx5Om4sd2lkdGg6YS1vLGhlaWdodDppLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3hTY2FsZToodGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9cix0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLl94U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl95U2NhbGU6KHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlPXIsdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5feVNjYWxlLm9uVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS54RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2dldFhFeHRlbnQoKToodGhpcy5fc2V0WEV4dGVudChyKSx0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PWVzLlZBTFVFP3RoaXMuX3hFeHRlbnQ6dGhpcy5feFNjYWxlPT1udWxsP1t2b2lkIDAsdm9pZCAwXTpbdGhpcy5feFNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54KSx0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54KV19LHQucHJvdG90eXBlLl9zZXRYRXh0ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX3hFeHRlbnQ9cn0sdC5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRZRXh0ZW50KCk6KHRoaXMuX3NldFlFeHRlbnQociksdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFlFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUJvdW5kc01vZGU9PT1lcy5WQUxVRT90aGlzLl95RXh0ZW50OnRoaXMuX3lTY2FsZT09bnVsbD9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSx0LnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbihyKXt0aGlzLl95RXh0ZW50PXJ9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LHR9KGNCZS5Db21wb25lbnQpO3U0LlNlbGVjdGlvbkJveExheWVyPXVCZX0pO3ZhciBxRj1IKEFvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaEJlPShkZSgpLFV0KHBlKSksZkJlPWw0KCksQ290PUZlKCkscEJlPVlnKCksVUY9UG90KCksZEJlPVRvdCgpLG1CZT1mdW5jdGlvbihlKXtoQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZGV0ZWN0aW9uUmFkaXVzPTMsci5fcmVzaXphYmxlPSExLHIuX21vdmFibGU9ITEsci5faGFzQ29ybmVycz0hMCxyLmFkZENsYXNzKCJkcmFnLWJveC1sYXllciIpLHIuX2RyYWdJbnRlcmFjdGlvbj1uZXcgZkJlLkRyYWcsci5fc2V0VXBDYWxsYmFja3MoKSxyLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8ociksci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBDb3QuQ2FsbGJhY2tTZXQsci5fZHJhZ0NhbGxiYWNrcz1uZXcgQ290LkNhbGxiYWNrU2V0LHIuX2RyYWdFbmRDYWxsYmFja3M9bmV3IENvdC5DYWxsYmFja1NldCxyfXJldHVybiB0LnByb3RvdHlwZS5fc2V0VXBDYWxsYmFja3M9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG4saSxvLGEscz17bmV3Qm94OjAscmVzaXplOjEsbW92ZToyfSxsPXMubmV3Qm94LGM9ZnVuY3Rpb24oZil7bj1yLl9nZXRSZXNpemluZ0VkZ2VzKGYpO3ZhciBwPXIuYm91bmRzKCksZD1wLnRvcExlZnQueDw9Zi54JiZmLng8PXAuYm90dG9tUmlnaHQueCYmcC50b3BMZWZ0Lnk8PWYueSYmZi55PD1wLmJvdHRvbVJpZ2h0Lnk7ci5ib3hWaXNpYmxlKCkmJihuLnRvcHx8bi5ib3R0b218fG4ubGVmdHx8bi5yaWdodCk/bD1zLnJlc2l6ZTpyLmJveFZpc2libGUoKSYmci5tb3ZhYmxlKCkmJmQ/bD1zLm1vdmU6KGw9cy5uZXdCb3gsci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pLHIuX3hCb3VuZHNNb2RlPT09VUYuUHJvcGVydHlNb2RlLlZBTFVFJiZyLnhTY2FsZSgpIT1udWxsJiZyLl9zZXRYRXh0ZW50KFtyLnhTY2FsZSgpLmludmVydChmLngpLHIueFNjYWxlKCkuaW52ZXJ0KGYueCldKSxyLl95Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci55U2NhbGUoKSE9bnVsbCYmci5fc2V0WUV4dGVudChbci55U2NhbGUoKS5pbnZlcnQoZi55KSxyLnlTY2FsZSgpLmludmVydChmLnkpXSksci5yZW5kZXIoKSksci5ib3hWaXNpYmxlKCEwKSxwPXIuYm91bmRzKCksaT17eDpwLnRvcExlZnQueCx5OnAudG9wTGVmdC55fSxvPXt4OnAuYm90dG9tUmlnaHQueCx5OnAuYm90dG9tUmlnaHQueX0sYT1mLHIuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHApfSx1PWZ1bmN0aW9uKGYscCl7c3dpdGNoKGwpe2Nhc2Ugcy5uZXdCb3g6by54PXAueCxvLnk9cC55O2JyZWFrO2Nhc2Ugcy5yZXNpemU6bi5ib3R0b20/by55PXAueTpuLnRvcCYmKGkueT1wLnkpLG4ucmlnaHQ/by54PXAueDpuLmxlZnQmJihpLng9cC54KTticmVhaztjYXNlIHMubW92ZTp2YXIgZD1wLngtYS54LGc9cC55LWEueTtpLngrPWQsaS55Kz1nLG8ueCs9ZCxvLnkrPWcsYT1wO2JyZWFrfXIuX3NldEJvdW5kcyh7dG9wTGVmdDppLGJvdHRvbVJpZ2h0Om99KSxyLl94Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci54U2NhbGUoKSE9bnVsbCYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoaS54KSxyLnhTY2FsZSgpLmludmVydChvLngpXSksci5feUJvdW5kc01vZGU9PT1VRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueVNjYWxlKCkhPW51bGwmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGkueSksci55U2NhbGUoKS5pbnZlcnQoby55KV0pLHIucmVuZGVyKCksci5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfSxoPWZ1bmN0aW9uKGYscCl7bD09PXMubmV3Qm94JiZmLng9PT1wLngmJmYueT09PXAueSYmci5ib3hWaXNpYmxlKCExKSxyLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3Moci5ib3VuZHMoKSl9O3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChjKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHUpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoaCksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7ci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChjKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyh1KSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChoKSxyLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9O2lmKHRoaXMuX2RldGVjdGlvbkVkZ2VUPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlQj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUw9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VSPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9oYXNDb3JuZXJzKXt2YXIgaT1mdW5jdGlvbigpe3JldHVybiByLl9ib3guYXBwZW5kKCJjaXJjbGUiKS5zdHlsZXMoe29wYWNpdHk6MCxmaWxsOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlRmlsbCJ9KX07dGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRyIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJyIiwhMCl9fSx0LnByb3RvdHlwZS5fZ2V0UmVzaXppbmdFZGdlcz1mdW5jdGlvbihyKXt2YXIgbj17dG9wOiExLGJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gbjt2YXIgaT10aGlzLmJvdW5kcygpLG89aS50b3BMZWZ0LnksYT1pLmJvdHRvbVJpZ2h0Lnkscz1pLnRvcExlZnQueCxsPWkuYm90dG9tUmlnaHQueCxjPXRoaXMuX2RldGVjdGlvblJhZGl1cztyZXR1cm4gcy1jPD1yLngmJnIueDw9bCtjJiYobi50b3A9by1jPD1yLnkmJnIueTw9bytjLG4uYm90dG9tPWEtYzw9ci55JiZyLnk8PWErYyksby1jPD1yLnkmJnIueTw9YStjJiYobi5sZWZ0PXMtYzw9ci54JiZyLng8PXMrYyxuLnJpZ2h0PWwtYzw9ci54JiZyLng8PWwrYyksbn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgcj10aGlzLmJvdW5kcygpLG49ci50b3BMZWZ0LnksaT1yLmJvdHRvbVJpZ2h0Lnksbz1yLnRvcExlZnQueCxhPXIuYm90dG9tUmlnaHQueDt0aGlzLl9kZXRlY3Rpb25FZGdlVC5hdHRycyh7eDE6byx5MTpuLHgyOmEseTI6biwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2RldGVjdGlvbkVkZ2VCLmF0dHJzKHt4MTpvLHkxOmkseDI6YSx5MjppLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUwuYXR0cnMoe3gxOm8seTE6bix4MjpvLHkyOmksInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9kZXRlY3Rpb25FZGdlUi5hdHRycyh7eDE6YSx5MTpuLHgyOmEseTI6aSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2hhc0Nvcm5lcnMmJih0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTC5hdHRycyh7Y3g6byxjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFIuYXR0cnMoe2N4OmEsY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDpvLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6YSxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImRldGVjdGlvbiByYWRpdXMgY2Fubm90IGJlIG5lZ2F0aXZlLiIpO3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM9cix0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9yZXNpemFibGU6KHRoaXMuX3Jlc2l6YWJsZT1yLHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXMociksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfSx0LnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21vdmFibGU6KHRoaXMuX21vdmFibGU9cix0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldE1vdmFibGVDbGFzcz1mdW5jdGlvbigpe3RoaXMubW92YWJsZSgpJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJtb3ZhYmxlIik6dGhpcy5yZW1vdmVDbGFzcygibW92YWJsZSIpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LHQucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKToodGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0aGlzLnJlc2l6YWJsZSgpKSx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpLGUucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj1wQmUuY29lcmNlRXh0ZXJuYWxEMyhyKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19KX0sdH0oZEJlLlNlbGVjdGlvbkJveExheWVyKTtBb3QuRHJhZ0JveExheWVyPW1CZX0pO3ZhciBMb3Q9SChJb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KElvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdCZT0oZGUoKSxVdChwZSkpLF9CZT1GZSgpLHlCZT1rYygpLE92OyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKE92fHwoT3Y9e30pKTt2YXIgdkJlPWZ1bmN0aW9uKGUpe2dCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9tb2RlPU92LlZBTFVFLHIhPT10Lk9SSUVOVEFUSU9OX1ZFUlRJQ0FMJiZyIT09dC5PUklFTlRBVElPTl9IT1JJWk9OVEFMKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEd1aWRlTGluZUxheWVyIik7cmV0dXJuIG4uX29yaWVudGF0aW9uPXIsbi5fb3ZlcmZsb3dIaWRkZW49ITAsbi5hZGRDbGFzcygiZ3VpZGUtbGluZS1sYXllciIpLG4uX2lzVmVydGljYWwoKT9uLmFkZENsYXNzKCJ2ZXJ0aWNhbCIpOm4uYWRkQ2xhc3MoImhvcml6b250YWwiKSxuLl9zY2FsZVVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7bi5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLG4ucmVuZGVyKCl9LG59cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2d1aWRlTGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJndWlkZS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PXQuT1JJRU5UQVRJT05fVkVSVElDQUx9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5zY2FsZSgpLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuc2NhbGUoKS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMuX2d1aWRlTGluZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5fbW9kZT09PU92LlZBTFVFJiZ0aGlzLnZhbHVlKCkhPW51bGw/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09T3YuUElYRUwmJnRoaXMucGl4ZWxQb3NpdGlvbigpIT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpKX0sdC5wcm90b3R5cGUuX3NldFBpeGVsUG9zaXRpb25XaXRob3V0Q2hhbmdpbmdNb2RlPWZ1bmN0aW9uKHIpe3RoaXMuX3BpeGVsUG9zaXRpb249cix0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl92YWx1ZT10aGlzLnNjYWxlKCkuaW52ZXJ0KHRoaXMucGl4ZWxQb3NpdGlvbigpKSksdGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fc2NhbGU7dmFyIG49dGhpcy5fc2NhbGU7cmV0dXJuIG4hPW51bGwmJm4ub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3NjYWxlPXIsdGhpcy5fc2NhbGUub25VcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fdmFsdWU6KHRoaXMuX3ZhbHVlPXIsdGhpcy5fbW9kZT1Pdi5WQUxVRSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uO2lmKCFfQmUuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpKXRocm93IG5ldyBFcnJvcigicGl4ZWxQb3NpdGlvbiBtdXN0IGJlIGEgZmluaXRlIG51bWJlciIpO3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uPXIsdGhpcy5fbW9kZT1Pdi5QSVhFTCx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuc2NhbGUoKSE9bnVsbCYmdGhpcy5zY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKX0sdC5PUklFTlRBVElPTl9WRVJUSUNBTD0idmVydGljYWwiLHQuT1JJRU5UQVRJT05fSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsdH0oeUJlLkNvbXBvbmVudCk7SW90Lkd1aWRlTGluZUxheWVyPXZCZX0pO3ZhciBJJHQ9SChSb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHhCZT0oZGUoKSxVdChwZSkpLGJCZT1Mb3QoKSx3QmU9bDQoKSxrb3Q9RmUoKSxTQmU9ZnVuY3Rpb24oZSl7eEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7bi5fZGV0ZWN0aW9uUmFkaXVzPTMsbi5fZW5hYmxlZD0hMCxuLmFkZENsYXNzKCJkcmFnLWxpbmUtbGF5ZXIiKSxuLmFkZENsYXNzKCJlbmFibGVkIiksbi5fZHJhZ0ludGVyYWN0aW9uPW5ldyB3QmUuRHJhZyxuLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8obik7dmFyIGk9ZnVuY3Rpb24oYyl7cmV0dXJuIG4uX2lzVmVydGljYWwoKSYmbi5waXhlbFBvc2l0aW9uKCktbi5kZXRlY3Rpb25SYWRpdXMoKTw9Yy54JiZjLng8PW4ucGl4ZWxQb3NpdGlvbigpK24uZGV0ZWN0aW9uUmFkaXVzKCl8fCFuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PWMueSYmYy55PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfSxvPSExLGE9ZnVuY3Rpb24oYyl7aShjKSYmKG89ITAsbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoYSk7dmFyIHM9ZnVuY3Rpb24oYyx1KXtvJiYobi5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUobi5faXNWZXJ0aWNhbCgpP3UueDp1LnkpLG4uX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcocyk7dmFyIGw9ZnVuY3Rpb24oYyx1KXtvJiYobz0hMSxuLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtyZXR1cm4gbi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChsKSxuLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KGEpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHMpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKGwpLG4uX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrb3QuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcga290LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGtvdC5DYWxsYmFja1NldCxufXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KS5jbGFzc2VkKCJkcmFnLWVkZ2UiLCEwKX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpc30sdC5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXIsdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9cixyP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIiksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcyl9LHQucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sdH0oYkJlLkd1aWRlTGluZUxheWVyKTtSb3QuRHJhZ0xpbmVMYXllcj1TQmV9KTt2YXIgTCR0PUgoTm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNQmU9KGRlKCksVXQocGUpKSxFQmU9a2MoKTtmdW5jdGlvbiBHRihlLHQscil7dmFyIG49e307aWYociE9PXZvaWQgMClmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpLTFdLGE9cltpXTtuW2FdPW99cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBsPWUuc2NhbGUocyk7aWYoIXQpcmV0dXJuIGw7dmFyIGMsdT1uW3NdPT09dm9pZCAwP3ZvaWQgMDplLnNjYWxlKG5bc10pO3JldHVybiB1IT09dm9pZCAwJiYoYz11KyhsLXUpLzIpLGN9fXZhciBUQmU9ZnVuY3Rpb24oZSl7TUJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImdyaWRsaW5lcyIpLGkuX3hTY2FsZT1yLGkuX3lTY2FsZT1uLGkuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbmRlcigpfSxpLl94U2NhbGUmJmkuX3hTY2FsZS5vblVwZGF0ZShpLl9yZW5kZXJDYWxsYmFjayksaS5feVNjYWxlJiZpLl95U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGl9cmV0dXJuIHQucHJvdG90eXBlLmJldHdlZW5YPWZ1bmN0aW9uKHIpe3JldHVybiByPT09dm9pZCAwP3RoaXMuX2JldHdlZW5YOihyIT09dGhpcy5fYmV0d2VlblgmJih0aGlzLl9iZXR3ZWVuWD1yLHRoaXMucmVuZGVyKCkpLHRoaXMpfSx0LnByb3RvdHlwZS5iZXR3ZWVuWT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMD90aGlzLl9iZXR3ZWVuWToociE9PXRoaXMuX2JldHdlZW5ZJiYodGhpcy5fYmV0d2Vlblk9cix0aGlzLnJlbmRlcigpKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApLHRoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3JlZHJhd1hMaW5lcygpLHRoaXMuX3JlZHJhd1lMaW5lcygpLHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLl95U2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9yZWRyYXdYTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl94U2NhbGUpe3ZhciByPXRoaXMuYmV0d2VlblgoKSxuPXRoaXMuX3hTY2FsZS50aWNrcygpLnNsaWNlKHI/MTowKSxpPXRoaXMuX3hMaW5lc0NvbnRhaW5lci5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKG4pLG89aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpO28uYXR0cigieDEiLEdGKHRoaXMuX3hTY2FsZSxyLHRoaXMuX3hTY2FsZS50aWNrcygpKSkuYXR0cigieTEiLDApLmF0dHIoIngyIixHRih0aGlzLl94U2NhbGUscix0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkyIix0aGlzLmhlaWdodCgpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscikuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09MH0pLGkuZXhpdCgpLnJlbW92ZSgpfX0sdC5wcm90b3R5cGUuX3JlZHJhd1lMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3lTY2FsZSl7dmFyIHI9dGhpcy5iZXR3ZWVuWSgpLG49dGhpcy5feVNjYWxlLnRpY2tzKCkuc2xpY2Uocj8xOjApLGk9dGhpcy5feUxpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEobiksbz1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UoaSk7by5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHIpLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PTB9KSxpLmV4aXQoKS5yZW1vdmUoKX19LHR9KEVCZS5Db21wb25lbnQpO05vdC5HcmlkbGluZXM9VEJlfSk7dmFyIFdGPUgoRG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDQmU9KGRlKCksVXQocGUpKSxBQmU9WWcoKSxQQmU9a2MoKSxJQmU9ZnVuY3Rpb24oZSl7Q0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2RldGFjaENhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiByLnJlbW92ZShuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9QUJlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBpLmFuY2hvcihuLmVsZW1lbnQoKSl9KSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gci5yZW5kZXIoKX0pLHRoaXN9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoImhhcygpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sdC5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPWZ1bmN0aW9uKHIpe3IucGFyZW50KHRoaXMpLHIub25EZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX2lzQW5jaG9yZWQmJnIuYW5jaG9yKHRoaXMuZWxlbWVudCgpKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmhhcyhyKSYmKHIub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUociksci5kZXRhY2goKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiExfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoIl9mb3JFYWNoKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuaW52YWxpZGF0ZUNhY2hlKCl9KX0sdH0oUEJlLkNvbXBvbmVudCk7RG90LkNvbXBvbmVudENvbnRhaW5lcj1JQmV9KTt2YXIgem90PUgoT290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBMQmU9KGRlKCksVXQocGUpKSxrJHQ9RmUoKSxrQmU9V0YoKSxSQmU9ZnVuY3Rpb24oZSl7TEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fY29tcG9uZW50cz1bXSxuLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uYXBwZW5kKGkpfSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChyKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmluZGV4T2Yocik+PTB9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fY29tcG9uZW50cy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVxdWVzdGVkU3BhY2UocixuKX0pO3JldHVybnttaW5XaWR0aDprJHQuTWF0aC5tYXgoaSxmdW5jdGlvbihvKXtyZXR1cm4gby5taW5XaWR0aH0sMCksbWluSGVpZ2h0OmskdC5NYXRoLm1heChpLGZ1bmN0aW9uKG8pe3JldHVybiBvLm1pbkhlaWdodH0sMCl9fSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fZm9yRWFjaChmdW5jdGlvbihhKXthLmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LG8ud2lkdGgoKSxvLmhlaWdodCgpKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRXaWR0aCgpfSl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRIZWlnaHQoKX0pfSx0LnByb3RvdHlwZS5jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuc2xpY2UoKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsJiYhdGhpcy5oYXMocikmJihyLmRldGFjaCgpLHRoaXMuX2NvbXBvbmVudHMucHVzaChyKSx0aGlzLl9hZG9wdEFuZEFuY2hvcihyKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZihyKTtyZXR1cm4gbj49MD8odGhpcy5fY29tcG9uZW50cy5zcGxpY2UobiwxKSwhMCk6ITF9LHR9KGtCZS5Db21wb25lbnRDb250YWluZXIpO09vdC5Hcm91cD1SQmV9KTt2YXIgUiR0PUgoRm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOQmU9KGRlKCksVXQocGUpKSxZRj1fbCgpLERCZT0kQSgpLE9CZT1CdSgpLHpCZT1GZSgpLEZCZT1rYygpLEJCZT1mdW5jdGlvbihlKXtOQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fdGV4dFBhZGRpbmc9NSxyPT1udWxsKXRocm93IG5ldyBFcnJvcigiSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQgcmVxdWlyZXMgYSBpbnRlcnBvbGF0ZWRDb2xvclNjYWxlIik7cmV0dXJuIG4uX3NjYWxlPXIsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24oaSl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX3NjYWxlLm9uVXBkYXRlKG4uX3JlZHJhd0NhbGxiYWNrKSxuLl9mb3JtYXR0ZXI9T0JlLmdlbmVyYWwoKSxuLl9vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsbi5fZXhwYW5kcz0hMSxuLmFkZENsYXNzKCJsZWdlbmQiKSxuLmFkZENsYXNzKCJpbnRlcnBvbGF0ZWQtY29sb3ItbGVnZW5kIiksbn1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5leHBhbmRzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2V4cGFuZHM6KHRoaXMuX2V4cGFuZHM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0Ll9lbnN1cmVPcmllbnRhdGlvbj1mdW5jdGlvbihyKXtpZihyPXIudG9Mb3dlckNhc2UoKSxyPT09Imhvcml6b250YWwifHxyPT09ImxlZnQifHxyPT09InJpZ2h0IilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoJyInK3IrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX29yaWVudGF0aW9uOih0aGlzLl9vcmllbnRhdGlvbj10Ll9lbnN1cmVPcmllbnRhdGlvbihyKSx0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHx0aGlzLl9pc1ZlcnRpY2FsKCl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHwhdGhpcy5faXNWZXJ0aWNhbCgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj10Ll9ERUZBVUxUX05VTV9TV0FUQ0hFUyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCk7aWYocj09PTEpcmV0dXJuW25bMF1dO2Zvcih2YXIgaT0oblsxXS1uWzBdKS8oci0xKSxvPVtdLGE9MDthPHI7YSsrKW8ucHVzaChuWzBdK2kqYSk7cmV0dXJuIG99LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3N3YXRjaENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzd2F0Y2gtY29udGFpbmVyIiwhMCksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoLWJvdW5kaW5nLWJveCIsITApLHRoaXMuX2xvd2VyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9MQUJFTF9DTEFTUywhMCksdGhpcy5fdXBwZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt2YXIgcj1uZXcgWUYuU3ZnQ29udGV4dCh0aGlzLmNvbnRlbnQoKS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBZRi5NZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBZRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgWUYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlcil9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1vLHM9dGhpcy5fc2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gaS5fbWVhc3VyZXIubWVhc3VyZShpLl9mb3JtYXR0ZXIocCkpLndpZHRofSksYyx1LGg9dC5fREVGQVVMVF9OVU1fU1dBVENIRVM7aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgZj16QmUuTWF0aC5tYXgobCwwKTt1PWErbyt0aGlzLl90ZXh0UGFkZGluZytmK3RoaXMuX3RleHRQYWRkaW5nLGM9aCpvfWVsc2UgYz1hK28rYSx1PXRoaXMuX3RleHRQYWRkaW5nK2xbMF0raCpvK2xbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOnUsbWluSGVpZ2h0OmN9fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbiE9PSJob3Jpem9udGFsIn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCksaT10aGlzLl9mb3JtYXR0ZXIoblswXSksbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGkpLndpZHRoLGE9dGhpcy5fZm9ybWF0dGVyKG5bMV0pLHM9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShhKS53aWR0aCxsPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYz10aGlzLl90ZXh0UGFkZGluZyx1PXt4OjAseTowfSxoPXt4OjAseTowfSxmPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxwPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxkLGcsXyx5LHg9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sYixTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7Uz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBDPU1hdGgubWF4KG8scyk7Yj0odGhpcy53aWR0aCgpLUMtMip0aGlzLl90ZXh0UGFkZGluZykvMixkPU1hdGgubWF4KHRoaXMud2lkdGgoKS1iLTIqYy1DLDApLGc9MSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIHIuaGVpZ2h0KCktKFIrMSl9LHAueUFsaWduPSJ0b3AiLHUueT0wLGYueUFsaWduPSJib3R0b20iLGgueT0wLHRoaXMuX29yaWVudGF0aW9uPT09ImxlZnQiPyhfPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGMrQytjfSxwLnhBbGlnbj0icmlnaHQiLHUueD0tKGIrZCtjKSxmLnhBbGlnbj0icmlnaHQiLGgueD0tKGIrZCtjKSk6KF89ZnVuY3Rpb24oTCxSKXtyZXR1cm4gYn0scC54QWxpZ249ImxlZnQiLHUueD1iK2QrYyxmLnhBbGlnbj0ibGVmdCIsaC54PWIrZCtjKSx4LndpZHRoPWQseC5oZWlnaHQ9UypnfWVsc2UgYj1NYXRoLm1heChjLCh0aGlzLmhlaWdodCgpLWwpLzIpLFM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktYyo0LW8tcyksMCksZD0xLGc9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKmIsMCksXz1mdW5jdGlvbihMLFIpe3JldHVybiBNYXRoLmZsb29yKG8rMipjKStSfSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIGJ9LHAueEFsaWduPSJyaWdodCIsdS54PS1jLGYueEFsaWduPSJsZWZ0IixoLng9Yyx4Lnk9Yix4LndpZHRoPVMqZCx4LmhlaWdodD1nO3gueD1fKG51bGwsMCksdGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoYSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxwLHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt2YXIgUD0idHJhbnNsYXRlKCIrdS54KyIsICIrdS55KyIpIjt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsUCksdGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoaSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxmLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt2YXIgaz0idHJhbnNsYXRlKCIraC54KyIsICIraC55KyIpIjt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsayksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoeCk7dmFyIE89dGhpcy5fZ2VuZXJhdGVUaWNrcyhTKSxEPXRoaXMuX3N3YXRjaENvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc3dhdGNoIikuZGF0YShPKSxCPUQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKSxJPUQubWVyZ2UoQik7cmV0dXJuIEQuZXhpdCgpLnJlbW92ZSgpLEkuYXR0cnMoe2ZpbGw6ZnVuY3Rpb24oTCxSKXtyZXR1cm4gci5fc2NhbGUuc2NhbGUoTCl9LHdpZHRoOmQsaGVpZ2h0OmcseDpfLHksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksREJlLkFERF9USVRMRV9FTEVNRU5UUyYmQi5hcHBlbmQoInRpdGxlIikudGV4dChmdW5jdGlvbihMKXtyZXR1cm4gci5fZm9ybWF0dGVyKEwpfSksdGhpc30sdC5fREVGQVVMVF9OVU1fU1dBVENIRVM9MTEsdC5MRUdFTkRfTEFCRUxfQ0xBU1M9ImxlZ2VuZC1sYWJlbCIsdH0oRkJlLkNvbXBvbmVudCk7Rm90LkludGVycG9sYXRlZENvbG9yTGVnZW5kPUJCZX0pO3ZhciBWb3Q9SChoND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaDQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCb3Q9KGRlKCksVXQocGUpKSxqRj1fbCgpLEhCZT1rYygpLEhvdD1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3I9PT12b2lkIDAmJihyPSIiKSxuPT09dm9pZCAwJiYobj0wKTt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KHIpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKHRoaXMuX3RleHQpLG89KHRoaXMuYW5nbGUoKT09PTA/aS53aWR0aDppLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxhPSh0aGlzLmFuZ2xlKCk9PT0wP2kuaGVpZ2h0Omkud2lkdGgpKzIqdGhpcy5wYWRkaW5nKCk7cmV0dXJue21pbldpZHRoOm8sbWluSGVpZ2h0OmF9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpO3ZhciByPW5ldyBqRi5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgakYuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBqRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgakYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSx0LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RleHQ7aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hbmdsZTtpZihyJT0zNjAscj4xODA/ci09MzYwOnI8LTE4MCYmKHIrPTM2MCkscj09PS05MHx8cj09PTB8fHI9PT05MCl0aGlzLl9hbmdsZT1yO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBhbmdsZSBmb3IgTGFiZWwiKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5wYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3BhZGRpbmc7aWYocj0rcixyPDApdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBwYWRkaW5nIHZhbHVlLiBDYW5ub3QgYmUgbGVzcyB0aGFuIDAuIik7cmV0dXJuIHRoaXMuX3BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxuPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLmhlaWdodCgpLXIuaGVpZ2h0KS8yLHRoaXMucGFkZGluZygpKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLndpZHRoKCktci53aWR0aCkvMix0aGlzLnBhZGRpbmcoKSksMCk7dGhpcy5fdGV4dENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIituKyIpIik7dmFyIG89dGhpcy53aWR0aCgpLTIqaSxhPXRoaXMuaGVpZ2h0KCktMipuLHM9e3hBbGlnbjp0aGlzLnhBbGlnbm1lbnQoKSx5QWxpZ246dGhpcy55QWxpZ25tZW50KCksdGV4dFJvdGF0aW9uOnRoaXMuYW5nbGUoKX07cmV0dXJuIHRoaXMuX3dyaXRlci53cml0ZSh0aGlzLl90ZXh0LG8sYSxzKSx0aGlzfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0fShIQmUuQ29tcG9uZW50KTtoNC5MYWJlbD1Ib3Q7dmFyIFZCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5USVRMRV9MQUJFTF9DTEFTUyksaX1yZXR1cm4gdC5USVRMRV9MQUJFTF9DTEFTUz0idGl0bGUtbGFiZWwiLHR9KEhvdCk7aDQuVGl0bGVMYWJlbD1WQmU7dmFyIFVCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5BWElTX0xBQkVMX0NMQVNTKSxpfXJldHVybiB0LkFYSVNfTEFCRUxfQ0xBU1M9ImF4aXMtbGFiZWwiLHR9KEhvdCk7aDQuQXhpc0xhYmVsPVVCZX0pO3ZhciBYRj1IKGJkPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJzPShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gcUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KGUvMiwyKSl9fWJkLmNpcmNsZT1xQmU7ZnVuY3Rpb24gR0JlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbFNxdWFyZSkuc2l6ZShNYXRoLnBvdyhlLDIpKX19YmQuc3F1YXJlPUdCZTtmdW5jdGlvbiBXQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KGUsMikpfX1iZC5jcm9zcz1XQmU7ZnVuY3Rpb24gWUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbERpYW1vbmQpLnNpemUoTWF0aC50YW4oTWF0aC5QSS82KSpNYXRoLnBvdyhlLDIpLzIpfX1iZC5kaWFtb25kPVlCZTtmdW5jdGlvbiBqQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sVHJpYW5nbGUpLnNpemUoTWF0aC5zcXJ0KDMpKk1hdGgucG93KGUvMiwyKSl9fWJkLnRyaWFuZ2xlPWpCZTt2YXIgWEJlPS44OTA4MTMwOTE1MjkyODUyO2Z1bmN0aW9uICRCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xTdGFyKS5zaXplKFhCZSpNYXRoLnBvdyhlLzIsMikpfX1iZC5zdGFyPSRCZTt2YXIgS0JlPSgxL01hdGguc3FydCgxMikvMisxKSozO2Z1bmN0aW9uIFpCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xXeWUpLnNpemUoS0JlKk1hdGgucG93KGUvMi40LDIpKX19YmQud3llPVpCZX0pO3ZhciBOJHQ9SChxb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEpCZT0oZGUoKSxVdChwZSkpLHp2PShFcigpLFV0KE1yKSksJEY9X2woKSxRQmU9JEEoKSx0SGU9QnUoKSxlSGU9WEYoKSxKZz1GZSgpLHJIZT1rYygpLFVvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0xLzApLHRoaXMuY29sdW1ucz10LHRoaXMuYm90dG9tUGFkZGluZz1yLHRoaXMubWF4V2lkdGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10aGlzLmdldFdpZHRoQXZhaWxhYmxlKCk7dC53aWR0aD1NYXRoLm1pbihuLHIpLHRoaXMuY29sdW1ucy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXRoaXMuY29sdW1uc1t0XSxuPTAsaT0wO2k8dDtpKyspbis9dGhpcy5jb2x1bW5zW2ldLndpZHRoO3JldHVybnt0b3BMZWZ0Ont4Om4seTowfSxib3R0b21SaWdodDp7eDpuK3Iud2lkdGgseTpyLmhlaWdodH19fSxlLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSmcuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhlaWdodDtyZXR1cm4gcn0pLDApK3RoaXMuYm90dG9tUGFkZGluZ30sZS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbih0LHIpe3ZhciBuPXIud2lkdGg7cmV0dXJuIHQrbn0sMCksdGhpcy5tYXhXaWR0aCl9LGUucHJvdG90eXBlLmdldFdpZHRoQXZhaWxhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRXaWR0aCgpO3JldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoLXQsMCl9LGV9KCksbkhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0xLzApLHI9PT12b2lkIDAmJihyPTEvMCksbj09PXZvaWQgMCYmKG49MCksaT09PXZvaWQgMCYmKGk9W10pLHRoaXMubWF4V2lkdGg9dCx0aGlzLm1heEhlaWdodD1yLHRoaXMucGFkZGluZz1uLHRoaXMucm93cz1pfXJldHVybiBlLnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24odCl7dC5tYXhXaWR0aD10aGlzLm1heFdpZHRoLXRoaXMucGFkZGluZyoyLHRoaXMucm93cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRDb2x1bW5Cb3VuZHM9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmdldFJvd0JvdW5kcyh0KSxpPXRoaXMucm93c1t0XS5nZXRCb3VuZHMocik7cmV0dXJuIGkudG9wTGVmdC54Kz1uLnRvcExlZnQueCxpLmJvdHRvbVJpZ2h0LngrPW4udG9wTGVmdC54LGkudG9wTGVmdC55Kz1uLnRvcExlZnQueSxpLmJvdHRvbVJpZ2h0LnkrPW4udG9wTGVmdC55LGl9LGUucHJvdG90eXBlLmdldFJvd0JvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIHI9dGhpcy5wYWRkaW5nLG49dGhpcy5wYWRkaW5nLGk9MDtpPHQ7aSsrKW4rPXRoaXMucm93c1tpXS5nZXRIZWlnaHQoKTt2YXIgbz17dG9wTGVmdDp7eDpyLHk6bn0sYm90dG9tUmlnaHQ6e3g6cit0aGlzLnJvd3NbdF0uZ2V0V2lkdGgoKSx5Om4rdGhpcy5yb3dzW3RdLmdldEhlaWdodCgpfX07cmV0dXJuIG99LGUucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrci5nZXRIZWlnaHQoKX0sMCkrdGhpcy5wYWRkaW5nKjIsdGhpcy5tYXhIZWlnaHQpfSxlLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbihKZy5NYXRoLm1heCh0aGlzLnJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFdpZHRoKCl9KSwwKSt0aGlzLnBhZGRpbmcqMix0aGlzLm1heFdpZHRoKX0sZX0oKSxpSGU9ZnVuY3Rpb24oZSl7SkJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3BhZGRpbmc9NSxuLl9yb3dCb3R0b21QYWRkaW5nPTMsbi5hZGRDbGFzcygibGVnZW5kIiksbi5tYXhFbnRyaWVzUGVyUm93KDEpLHI9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJMZWdlbmQgcmVxdWlyZXMgYSBjb2xvclNjYWxlIik7cmV0dXJuIG4uX2NvbG9yU2NhbGU9cixuLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbihpKXtyZXR1cm4gbi5yZWRyYXcoKX0sbi5fY29sb3JTY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPXRIZS5pZGVudGl0eSgpLG4ubWF4TGluZXNQZXJFbnRyeSgxKSxuLnhBbGlnbm1lbnQoInJpZ2h0IikueUFsaWdubWVudCgidG9wIiksbi5jb21wYXJhdG9yKGZ1bmN0aW9uKGksbyl7dmFyIGE9bi5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gbi5fZm9ybWF0dGVyKHMpfSk7cmV0dXJuIGEuaW5kZXhPZihpKS1hLmluZGV4T2Yobyl9KSxuLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gZUhlLmNpcmNsZSgpfSxuLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9ST1dfQ0xBU1MsITApLG49ci5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKTtuLmFwcGVuZCgidGV4dCIpO3ZhciBpPW5ldyAkRi5TdmdDb250ZXh0KHIubm9kZSgpLG51bGwsUUJlLkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3ICRGLkNhY2hlTWVhc3VyZXIoaSksdGhpcy5fd3JhcHBlcj1uZXcgJEYuV3JhcHBlcigpLm1heExpbmVzKHRoaXMubWF4TGluZXNQZXJFbnRyeSgpKSx0aGlzLl93cml0ZXI9bmV3ICRGLldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsPyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT1yLHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LHQucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1uZXcgbkhlKHIsbix0aGlzLl9wYWRkaW5nKSxzPXRoaXMuX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGkuX2NvbXBhcmF0b3IoaS5fZm9ybWF0dGVyKGMpLGkuX2Zvcm1hdHRlcih1KSl9KSxsPW5ldyBVb3Q7cmV0dXJuIGEuYWRkUm93KGwpLGwuYm90dG9tUGFkZGluZz10aGlzLl9yb3dCb3R0b21QYWRkaW5nLHMuZm9yRWFjaChmdW5jdGlvbihjLHUpe2wuY29sdW1ucy5sZW5ndGgvMj09PWkubWF4RW50cmllc1BlclJvdygpJiYobD1uZXcgVW90LGwuYm90dG9tUGFkZGluZz1pLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgaD1sLmdldFdpZHRoQXZhaWxhYmxlKCksZj1pLl9mb3JtYXR0ZXIoYykscD1pLl9tZWFzdXJlci5tZWFzdXJlKGYpLndpZHRoLGQ9aC1vLXA8MDtkJiZsLmNvbHVtbnMubGVuZ3RoPjEmJihsPW5ldyBVb3QsbC5ib3R0b21QYWRkaW5nPWkuX3Jvd0JvdHRvbVBhZGRpbmcsYS5hZGRSb3cobCkpO3ZhciBnPXt3aWR0aDpvLGhlaWdodDpvLGRhdGE6e25hbWU6Yyx0eXBlOiJzeW1ib2wifX07bC5hZGRDb2x1bW4oZyksaD1sLmdldFdpZHRoQXZhaWxhYmxlKCk7dmFyIF89TWF0aC5taW4oaCxwKTtpLl93cmFwcGVyLm1heExpbmVzKGkubWF4TGluZXNQZXJFbnRyeSgpKTt2YXIgeT1pLl93cmFwcGVyLndyYXAoZixpLl9tZWFzdXJlcixfKS5ub0xpbmVzLHg9eSpvLGI9e3dpZHRoOl8saGVpZ2h0OngsZGF0YTp7bmFtZTpjLHR5cGU6InRleHQifX07bC5hZGRDb2x1bW4oYil9KSxhfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoSmcuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSxyXSxyKSxuKTtyZXR1cm57bWluSGVpZ2h0OmkuZ2V0SGVpZ2h0KCksbWluV2lkdGg6aS5nZXRXaWR0aCgpfX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBpLnJvd3MucmVkdWNlKGZ1bmN0aW9uKG8sYSxzKXtpZihvLmxlbmd0aCE9PTApcmV0dXJuIG87dmFyIGw9aS5nZXRSb3dCb3VuZHMocyksYz1KZy5NYXRoLndpdGhpbihyLGwpO3JldHVybiBjP2EuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24odSxoLGYpe3ZhciBwPWkuZ2V0Q29sdW1uQm91bmRzKHMsZiksZD1KZy5NYXRoLndpdGhpbihyLHApO2lmKGQpe3ZhciBnPW4uY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfUk9XX0NMQVNTKS5ub2RlcygpW3NdLF89enYuc2VsZWN0KGcpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfRU5UUllfQ0xBU1MpLm5vZGVzKClbTWF0aC5mbG9vcihmLzIpXSx5PXp2LnNlbGVjdChfKS5zZWxlY3QoIi4iK3QuTEVHRU5EX1NZTUJPTF9DTEFTUykseD1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHp2LnNlbGVjdChnKSksYj1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHkpO3JldHVyblt7Ym91bmRzOkpnLkRPTS5lbGVtZW50QkJveCh6di5zZWxlY3QoZykpLGRhdHVtOmguZGF0YS5uYW1lLHBvc2l0aW9uOnt4OnhbMF0rYlswXSx5OnhbMV0rYlsxXX0sc2VsZWN0aW9uOnp2LnNlbGVjdChfKSxjb21wb25lbnQ6bn1dfXJldHVybiB1fSxvKTpvfSxbXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgcj10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgbj10aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9ST1dfQ0xBU1MpLmRhdGEoci5yb3dzKSxpPW4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX1JPV19DTEFTUywhMCkubWVyZ2Uobik7bi5leGl0KCkucmVtb3ZlKCksaS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGEscyl7dmFyIGw9ci5nZXRSb3dCb3VuZHMocyk7cmV0dXJuInRyYW5zbGF0ZSgiK2wudG9wTGVmdC54KyIsICIrbC50b3BMZWZ0LnkrIikifSk7dmFyIG89dGhpcztyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuY29sdW1ucy5sZW5ndGg7Yys9MilsLnB1c2goW2EuY29sdW1uc1tjXSxhLmNvbHVtbnNbYysxXV0pO3ZhciB1PXp2LnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9FTlRSWV9DTEFTUykuZGF0YShsKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKS5tZXJnZSh1KTtoLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXTtyZXR1cm4gby5zeW1ib2woKShkLmRhdGEubmFtZSxzKShkLmhlaWdodCouNikobnVsbCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXSxnPXIucm93c1tzXS5jb2x1bW5zLmluZGV4T2YoZCksXz1yLmdldENvbHVtbkJvdW5kcyhzLGcpO3JldHVybiJ0cmFuc2xhdGUoIisoXy50b3BMZWZ0LngrZC53aWR0aC8yKSsiLCAiK2QuaGVpZ2h0LzIrIikifSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oZil7cmV0dXJuIG8uX2NvbG9yU2NhbGUuc2NhbGUoZlswXS5kYXRhLm5hbWUpfSkuYXR0cigib3BhY2l0eSIsZnVuY3Rpb24oZixwKXtyZXR1cm4gby5zeW1ib2xPcGFjaXR5KCkoZlswXS5kYXRhLm5hbWUscyl9KS5jbGFzc2VkKHQuTEVHRU5EX1NZTUJPTF9DTEFTUywhMCksaC5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0LWNvbnRhaW5lciIsITApLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZixwKXt2YXIgZD1mWzFdLGc9ci5yb3dzW3NdLmNvbHVtbnMuaW5kZXhPZihkKSxfPXIuZ2V0Q29sdW1uQm91bmRzKHMsZyk7cmV0dXJuInRyYW5zbGF0ZSgiK18udG9wTGVmdC54KyIsIDApIn0pLmVhY2goZnVuY3Rpb24oZixwLGQpe3ZhciBnPXp2LnNlbGVjdCh0aGlzKSxfPWZbMV0seT17eEFsaWduOiJsZWZ0Iix5QWxpZ246InRvcCIsdGV4dFJvdGF0aW9uOjB9O28uX3dyaXRlci53cml0ZShvLl9mb3JtYXR0ZXIoXy5kYXRhLm5hbWUpLF8ud2lkdGgsby5oZWlnaHQoKSx5LGcubm9kZSgpKX0pLHUuZXhpdCgpLnJlbW92ZSgpfSksdGhpc30sdC5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I6KHR5cGVvZiByPT0ibnVtYmVyIj90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcn06dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0LkxFR0VORF9ST1dfQ0xBU1M9ImxlZ2VuZC1yb3ciLHQuTEVHRU5EX0VOVFJZX0NMQVNTPSJsZWdlbmQtZW50cnkiLHQuTEVHRU5EX1NZTUJPTF9DTEFTUz0ibGVnZW5kLXN5bWJvbCIsdH0ockhlLkNvbXBvbmVudCk7cW90LkxlZ2VuZD1pSGV9KTt2YXIgR290PUgoS0Y9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEtGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgb0hlOyhmdW5jdGlvbihlKXtlLk1BSU49Im1haW4iLGUuUkVTRVQ9InJlc2V0In0pKG9IZT1LRi5BbmltYXRvcnx8KEtGLkFuaW1hdG9yPXt9KSl9KTt2YXIgTyR0PUgoKGVHbixEJHQpPT57InVzZSBzdHJpY3QiO0QkdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJkFycmF5LmlzQXJyYXkodCk9PT0hMX19KTt2YXIgQiR0PUgoKHJHbixGJHQpPT57InVzZSBzdHJpY3QiO3ZhciBhSGU9TyR0KCk7ZnVuY3Rpb24geiR0KGUpe3JldHVybiBhSGUoZSk9PT0hMCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgT2JqZWN0XSJ9RiR0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIHIsbjtyZXR1cm4hKHokdCh0KT09PSExfHwocj10LmNvbnN0cnVjdG9yLHR5cGVvZiByIT0iZnVuY3Rpb24iKXx8KG49ci5wcm90b3R5cGUseiR0KG4pPT09ITEpfHxuLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9fSk7dmFyIFlvdD1IKFdvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc0hlPUZlKCksSCR0PTAsbEhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj17fSksdGhpcy5fdXBkYXRlSWQ9SCR0KyssdGhpcy5fZGF0YT10LHRoaXMuX21ldGFkYXRhPXIsdGhpcy5fY2FsbGJhY2tzPW5ldyBzSGUuQ2FsbGJhY2tTZXR9cmV0dXJuIGUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2RhdGE6KHRoaXMuX2RhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tZXRhZGF0YToodGhpcy5fbWV0YWRhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQ9SCR0KyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LGV9KCk7V290LkRhdGFzZXQ9bEhlfSk7dmFyICRvdD1IKFJjPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGpvdD0oZGUoKSxVdChwZSkpLGNIZT1CJHQoKSx1SGU9WW90KCksaEhlPUx2KCk7ZnVuY3Rpb24gWG90KGUpe3JldHVybiBlIGluc3RhbmNlb2YgcDQ/ZTplIGluc3RhbmNlb2YgRGF0ZT9mNChlLnZhbHVlT2YoKSk6ZSBpbnN0YW5jZW9mIGhIZS5TY2FsZT9WJHQoZSk6ZSBpbnN0YW5jZW9mIHVIZS5EYXRhc2V0P1UkdChlKTpjSGUoZSk/WkYoZSk6QXJyYXkuaXNBcnJheShlKT9xJHQoZSk6ZjQoZSl9UmMuc2lnbj1Yb3Q7ZnVuY3Rpb24gViR0KGUpe3ZhciB0PXtkb21haW46ZS5kb21haW4oKSxyYW5nZTplLnJhbmdlKCksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpLHJlZjpmNChlKX07cmV0dXJuIFpGKHQpfVJjLnNpZ25TY2FsZT1WJHQ7ZnVuY3Rpb24gVSR0KGUpe3ZhciB0PXtyZWY6ZjQoZSksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpfTtyZXR1cm4gWkYodCl9UmMuc2lnbkRhdGFzZXQ9VSR0O2Z1bmN0aW9uIGY0KGUpe3JldHVybiBuZXcgVyR0KGUpfVJjLnNpZ25SZWY9ZjQ7ZnVuY3Rpb24gcSR0KGUpe3JldHVybiBuZXcgRyR0KGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBYb3QodCl9KSl9UmMuc2lnbkFycmF5PXEkdDtmdW5jdGlvbiBaRihlKXt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1Yb3QoZVtyXSkpO3JldHVybiBuZXcgWSR0KHQpfVJjLnNpZ25PYmo9WkY7dmFyIHA0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3RoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQodCk6ITB9LGV9KCk7UmMuU2lnbmF0dXJlPXA0O3ZhciBHJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmFycmF5PXIsbn1yZXR1cm4gdC5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24ocil7aWYoci5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49MDtuPHRoaXMuYXJyYXkubGVuZ3RoO24rKylpZih0aGlzLmFycmF5W25dLmlzRGlmZmVyZW50KHIuYXJyYXlbbl0pKXJldHVybiEwO3JldHVybiExfSx0fShwNCk7UmMuQXJyYXlTaWduYXR1cmU9RyR0O3ZhciBXJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLnJlZj1yLG59cmV0dXJuIHQucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnJlZiE9PXIucmVmfSx0fShwNCk7UmMuUmVmZXJlbmNlU2lnbmF0dXJlPVckdDt2YXIgWSR0PWZ1bmN0aW9uKGUpe2pvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5vYmo9cixufXJldHVybiB0LnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihyKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLm9iaiksaT1PYmplY3Qua2V5cyhyLm9iaik7aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG89MCxhPW47bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYoIXIub2JqLmhhc093blByb3BlcnR5KHMpfHx0aGlzLm9ialtzXS5pc0RpZmZlcmVudChyLm9ialtzXSkpcmV0dXJuITB9cmV0dXJuITF9LHR9KHA0KTtSYy5PYmplY3RTaWduYXR1cmU9WSR0fSk7dmFyIGokdD1IKEtvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZkhlPSRvdCgpO2Z1bmN0aW9uIHBIZShlKXt2YXIgdD12b2lkIDAscixuPSExLGk9ITEsbz1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxzPTA7czxhcmd1bWVudHMubGVuZ3RoO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtpZihuKXJldHVybiByO3ZhciBsPWZIZS5zaWduQXJyYXkoYSk7cmV0dXJuIHQ9PT12b2lkIDB8fHQuaXNEaWZmZXJlbnQobCk/KGkmJmNvbnNvbGUud2FybigiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksdD1sLHI9ZS5hcHBseSh0aGlzLGEpKTppJiZjb25zb2xlLndhcm4oImNhY2hlIGhpdCEiKSxyfTtyZXR1cm4gby5kb0xvY2tlZD1mdW5jdGlvbihhKXtpZihuKXRocm93IG5ldyBFcnJvcigiTG9ja2luZyBhbiBhbHJlYWR5IGxvY2tlZCBtZW1vaXplIGZ1bmN0aW9uISIpO249ITA7dmFyIHM9YS5hcHBseSh0aGlzKTtyZXR1cm4gbj0hMSxzfSxvLmxvZ1BlcmZvcm1hbmNlPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT0hMCksaT1hLHRoaXN9LG99S290Lm1lbW9pemU9cEhlfSk7dmFyIEskdD1IKEpGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRIZT1PZSgpLFpvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcFt0XT1yLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LGV9KCksWCR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWFwPW5ldyBab3R9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuZ2V0KHRbMF0pLmdldCh0WzFdKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSkmJnRoaXMubWFwLmdldCh0WzBdKS5oYXModFsxXSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSl8fHRoaXMubWFwLnNldCh0WzBdLG5ldyBab3QpLHRoaXMubWFwLmdldCh0WzBdKS5zZXQodFsxXSxyKSx0aGlzfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0WzBdKSYmdGhpcy5tYXAuZ2V0KHRbMF0pLmRlbGV0ZSh0WzFdKSwhMH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcD1uZXcgWm90fSxlLnJlc29sdmVyPWZ1bmN0aW9uKHQscixuKXtyZXR1cm5bbi51cGRhdGVJZCgpLHJdfSxlfSgpO2Z1bmN0aW9uICQkdChlKXt2YXIgdD1kSGUubWVtb2l6ZShlLFgkdC5yZXNvbHZlcik7cmV0dXJuIHQuY2FjaGU9bmV3IFgkdCx0fUpGLm1lbW9pemVQcm9qZWN0b3I9JCR0O2Z1bmN0aW9uIG1IZShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPSQkdChlW3RdKX0pLGV9SkYubWVtb2l6ZVByb2plY3RvcnM9bUhlfSk7dmFyIFokdD1IKEpvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ0hlPUNTKCk7ZnVuY3Rpb24gX0hlKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3ZhciByPWUuc2xpY2UoMCwtMSksbj1lW2UubGVuZ3RoLTFdLGk9Z0hlLm1lbW9pemUobiksbz1mdW5jdGlvbigpe3ZhciBhPXRoaXMscz1yLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5hcHBseShhKX0pO3JldHVybiBpLmFwcGx5KHZvaWQgMCxzKX07cmV0dXJuIG99Sm90Lm1lbVRodW5rPV9IZX0pO3ZhciBDUz1IKEFTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFvdD0oZGUoKSxVdChwZSkpO1FvdC5fX2V4cG9ydFN0YXIoaiR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoSyR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoWiR0KCksQVMpO3ZhciB5SGU9JG90KCk7QVMuc2lnbj15SGUuc2lnbn0pO3ZhciBGdj1IKE5jPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEokdD0oRXIoKSxVdChNcikpLHZIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fZHJhd1N0ZXA9cn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RHJhd1N0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhd1N0ZXB9LGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj1yW3IubGVuZ3RoLTFdLmF0dHJUb0FwcGxpZWRQcm9qZWN0b3I7dGhpcy5fY29udGV4dC5zYXZlKCksdGhpcy5fZHJhd1N0ZXAodGhpcy5fY29udGV4dCx0LG4pLHRoaXMuX2NvbnRleHQucmVzdG9yZSgpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe30sZX0oKTtOYy5DYW52YXNEcmF3ZXI9dkhlO05jLkNvbnRleHRTdHlsZUF0dHJzPVsiZmlsbC1vcGFjaXR5IiwiZmlsbCIsIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiB4SGUoZSx0LHIsbil7dmFyIGk9TmMuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KHQpO3JldHVybiBRJHQoZSxpLHIsbil9TmMucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzPXhIZTtmdW5jdGlvbiBRJHQoZSx0LHIsbil7Zm9yKHZhciBpPXt9LG89MCxhPXQ7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109ZVtzXShyLG4pKX1yZXR1cm4gaX1OYy5yZXNvbHZlQXR0cmlidXRlcz1RJHQ7ZnVuY3Rpb24gYkhlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbInN0cm9rZS1vcGFjaXR5Il0hPW51bGw/cGFyc2VGbG9hdChlWyJzdHJva2Utb3BhY2l0eSJdKToxO3JldHVybiByKnR9ZnVuY3Rpb24gd0hlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbImZpbGwtb3BhY2l0eSJdIT1udWxsP3BhcnNlRmxvYXQoZVsiZmlsbC1vcGFjaXR5Il0pOjE7cmV0dXJuIHIqdH1mdW5jdGlvbiB0S3QoZSl7cmV0dXJuIGVbInN0cm9rZS13aWR0aCJdIT1udWxsP3BhcnNlRmxvYXQoZVsic3Ryb2tlLXdpZHRoIl0pOjF9TmMuZ2V0U3Ryb2tlV2lkdGg9dEt0O2Z1bmN0aW9uIGVLdChlKXt2YXIgdD1lWyJzdHJva2UtZGFzaGFycmF5Il07aWYodCE9bnVsbCl0cnl7cmV0dXJuIHQuc3BsaXQoL1sgLF0rLykubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBwYXJzZUludChyLDEwKX0pfWNhdGNoKHIpe3JldHVybiBjb25zb2xlLmVycm9yKCJnZXRTdHJva2VEYXNoQXJyYXkgZmFpbGVkIHdpdGg6ICIrciksW119cmV0dXJuW119TmMuZ2V0U3Ryb2tlRGFzaEFycmF5PWVLdDtmdW5jdGlvbiBTSGUoZSx0LHIsbil7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSx0LmNvbnRleHQoZSksdChyKSxlLmxpbmVKb2luPSJyb3VuZCIsdGF0KGUsbiksZS5yZXN0b3JlKCl9TmMucmVuZGVyQXJlYT1TSGU7ZnVuY3Rpb24gTUhlKGUsdCxyLG4pe2Uuc2F2ZSgpLGUuYmVnaW5QYXRoKCksdC5jb250ZXh0KGUpLHQociksZS5saW5lSm9pbj0icm91bmQiLHRhdChlLG4pLGUucmVzdG9yZSgpfU5jLnJlbmRlckxpbmU9TUhlO2Z1bmN0aW9uIHRhdChlLHQpe2lmKHQuc3Ryb2tlKXtlLmxpbmVXaWR0aD10S3QodCk7dmFyIHI9SiR0LmNvbG9yKHQuc3Ryb2tlKSxuPWVLdCh0KTtlLnNldExpbmVEYXNoKG4pLHIub3BhY2l0eSo9YkhlKHQpLGUuc3Ryb2tlU3R5bGU9ci50b1N0cmluZygpLGUuc3Ryb2tlKCl9aWYodC5maWxsKXt2YXIgaT1KJHQuY29sb3IodC5maWxsKTtpLm9wYWNpdHkqPXdIZSh0KSxlLmZpbGxTdHlsZT1pLnRvU3RyaW5nKCksZS5maWxsKCl9fU5jLnJlbmRlclBhdGhXaXRoU3R5bGU9dGF0fSk7dmFyIFV1PUgoZWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9cn1yZXR1cm4gZS5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe3RoaXMuX2N1cnJlbnREcmF3ZXIhPW51bGwmJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIHI9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO3IuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1yfSxlLnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7dGhpcy5fY3VycmVudERyYXdlciE9bnVsbCYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LGUucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50RHJhd2VyIT1udWxsJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQscil9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sZX0oKTtlYXQuUHJveHlEcmF3ZXI9RUhlfSk7dmFyIERmPUgocmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUSGU9KEVyKCksVXQoTXIpKSxyS3Q9RmUoKSxDSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fcm9vdD1USGUuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHRoaXMuX2NsYXNzTmFtZT1yLHRoaXMuX3N2Z0VsZW1lbnROYW1lPXR9cmV0dXJuIGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO3RoaXMuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cyh0KTtmb3IodmFyIGk9MCxvPXIubGVuZ3RoLGE9ZnVuY3Rpb24obCl7dmFyIGM9cltsXTtyS3QuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAoYyl9LGkpLGkrPWMuYW5pbWF0b3IudG90YWxUaW1lKHQubGVuZ3RoKX0scz0wO3M8bztzKyspYShzKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9PW51bGwmJih0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9dGhpcy5fc2VsZWN0aW9uLm5vZGVzKCkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlc30sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXA9PW51bGw/bnVsbDp0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZU1hcC5nZXQodCl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3Jvb3QucmVtb3ZlKCl9LGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3Qubm9kZSgpKX0sZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxlLnByb3RvdHlwZS5zZWxlY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdmdFbGVtZW50TmFtZX0sZS5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzPWZ1bmN0aW9uKHQpe3ZhciByPXQubWFwKGZ1bmN0aW9uKGEscyl7cmV0dXJuIGEhPW51bGw/e2Q6YSxpOnN9Om51bGx9KSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSksaT10aGlzLl9yb290LnNlbGVjdEFsbCh0aGlzLnNlbGVjdG9yKCkpLmRhdGEobik7dGhpcy5fc2VsZWN0aW9uPWkuZW50ZXIoKS5hcHBlbmQodGhpcy5fc3ZnRWxlbWVudE5hbWUpLm1lcmdlKGkpLGkuZXhpdCgpLnJlbW92ZSgpO3ZhciBvPW5ldyByS3QuTWFwO3RoaXMuX3NlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGEpe28uc2V0KGEuaSx0aGlzKX0pLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPW8sdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9YS5kO3JldHVybiBzfSkpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LGUucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49WyJmaWxsIiwic3Ryb2tlIl07bi5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuYXR0clRvQXBwbGllZFByb2plY3RvcltpXSE9bnVsbCYmci5fc2VsZWN0aW9uLmF0dHIoaSx0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbaV0pfSksdC5hbmltYXRvci5hbmltYXRlKHRoaXMuX3NlbGVjdGlvbix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3IpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKX0sZX0oKTtyYXQuU1ZHRHJhd2VyPUNIZX0pO3ZhciBpYXQ9SChuYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG5LdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuc2NhbGU9MCx0aGlzLnRyYW5zbGF0ZT0wLHRoaXMuY2FjaGVkRG9tYWluPVtudWxsLG51bGxdLHRoaXMubGFzdFNlZW5Eb21haW49W251bGwsbnVsbF0sdGhpcy51cGRhdGVEb21haW49ZnVuY3Rpb24ocil7dC5sYXN0U2VlbkRvbWFpbj1yLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7dmFyIG49ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzFdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLGk9ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMV0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKTt0LnNjYWxlPW4vaXx8MSx0LnRyYW5zbGF0ZT1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKSp0LnNjYWxlfHwwfX1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTEsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj10aGlzLmxhc3RTZWVuRG9tYWlufSxlLnByb3RvdHlwZS5zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5jYWNoZWREb21haW49dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpfSxlfSgpLEFIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9dCx0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9cix0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IG5LdCx0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IG5LdCx0aGlzLnJlbmRlckRlZmVycmVkPWZ1bmN0aW9uKCl7bi5hcHBseVRyYW5zZm9ybSgpLGNsZWFyVGltZW91dChuLnRpbWVvdXRUb2tlbiksbi50aW1lb3V0VG9rZW49c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVuZGVyQ2FsbGJhY2soKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVkpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbih0LHIpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4odCksciYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihyKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LGUucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9ZnVuY3Rpb24odCxyKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVgudXBkYXRlRG9tYWluKHQpLHImJnRoaXMuZG9tYWluVHJhbnNmb3JtWS51cGRhdGVEb21haW4ociksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSxlLnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpblRyYW5zZm9ybVgucmVzZXQoKSx0aGlzLmRvbWFpblRyYW5zZm9ybVkucmVzZXQoKSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrKHRoaXMuZG9tYWluVHJhbnNmb3JtWC50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVguc2NhbGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNjYWxlKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVk9MjAwLGV9KCk7bmF0LkRlZmVycmVkUmVuZGVyZXI9QUhlfSk7dmFyIHJzPUgoUUY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUEhlPShkZSgpLFV0KHBlKSksd2Q9KEVyKCksVXQoTXIpKSxkND1MZigpLFNkPUZlKCksaUt0PUdvdCgpLG9hdD1DUygpLElIZT1rYygpLExIZT1GdigpLGtIZT1VdSgpLFJIZT1EZigpLE5IZT1ZZygpLERIZT1JZigpLE9IZT1pYXQoKTtRRi5SZW5kZXJlcj1ESGUubWFrZUVudW0oWyJzdmciLCJjYW52YXMiXSk7dmFyIHpIZT1mdW5jdGlvbihlKXtQSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLl9kYXRhQ2hhbmdlZD0hMSxyLl9hdHRyRXh0ZW50cz17fSxyLl9hbmltYXRlPSExLHIuX2FuaW1hdG9ycz17fSxyLl9wcm9wZXJ0eUV4dGVudHM9e30sci5fcmVzZXRFbnRpdHlTdG9yZT1mdW5jdGlvbigpe3IuX2NhY2hlZEVudGl0eVN0b3JlPXZvaWQgMH0sci5fb3ZlcmZsb3dIaWRkZW49ITAsci5hZGRDbGFzcygicGxvdCIpLHIuX2RhdGFzZXRUb0RyYXdlcj1uZXcgU2QuTWFwLHIuX2F0dHJCaW5kaW5ncz13ZC5tYXAoKSxyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGUoaSxvKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5yZW5kZXIoKX0sci5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5fb25EYXRhc2V0VXBkYXRlKCl9LHIuX3Byb3BlcnR5QmluZGluZ3M9d2QubWFwKCk7dmFyIG49bmV3IGQ0LkVhc2luZygpLm1heFRvdGFsRHVyYXRpb24odC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7cmV0dXJuIHIuYW5pbWF0b3IoaUt0LkFuaW1hdG9yLk1BSU4sbiksci5hbmltYXRvcihpS3QuQW5pbWF0b3IuUkVTRVQsbmV3IGQ0Lk51bGwpLHIuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZT1TZC5XaW5kb3cuZGVib3VuY2UoT0hlLkRlZmVycmVkUmVuZGVyZXIuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZLHIuX3Jlc2V0RW50aXR5U3RvcmUpLHJ9cmV0dXJuIHQuZ2V0VG90YWxEcmF3VGltZT1mdW5jdGlvbihyLG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBpK28uYW5pbWF0b3IudG90YWxUaW1lKHIubGVuZ3RoKX0sMCl9LHQuYXBwbHlEcmF3U3RlcHM9ZnVuY3Rpb24ocixuKXt2YXIgaT1yLm1hcChmdW5jdGlvbihvKXt2YXIgYT1vLmF0dHJUb1Byb2plY3RvcixzPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3NbbF09ZnVuY3Rpb24oYyx1KXtyZXR1cm4gYVtsXShjLHUsbil9fSkse2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6cyxhbmltYXRvcjpvLmFuaW1hdG9yfX0pO3JldHVybiBpfSx0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9TkhlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9kYXRhQ2hhbmdlZD0hMCx0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5faXNTZXR1cHx8KGUucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2NhbnZhcyE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX3JlbmRlckFyZWE9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVuZGVyLWFyZWEiLCEwKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KG4pfSkpfSx0LnByb3RvdHlwZS5fYXBwZW5kQ2FudmFzTm9kZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLnNlbGVjdCgiLnBsb3QtY2FudmFzLWNvbnRhaW5lciIpO3IuZW1wdHkoKSYmKHI9dGhpcy5lbGVtZW50KCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90LWNhbnZhcy1jb250YWluZXIiLCEwKSxyLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jYW52YXMubm9kZSgpKSl9LHQucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbihyLG4saSxvKXtpZihlLnByb3RvdHlwZS5zZXRCb3VuZHMuY2FsbCh0aGlzLHIsbixpLG8pLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzLl9jYW52YXMhPW51bGwpe2lmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkKXt0aGlzLl9idWZmZXJDYW52YXMuYXR0cigid2lkdGgiLHRoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIpKSx0aGlzLl9idWZmZXJDYW52YXMuYXR0cigiaGVpZ2h0Iix0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IikpO3ZhciBhPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXt2YXIgcz10aGlzLl9jYW52YXMubm9kZSgpO3Mud2lkdGg+MCYmcy5oZWlnaHQ+MD9hLmNhbnZhcy53aWR0aD4wJiZhLmNhbnZhcy5oZWlnaHQ+MCYmYS5kcmF3SW1hZ2UocywwLDApOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgYnVmZmVyIGNhbnZhcyB3aXRoIHdpdGggMHgwIGNhbnZhcyIpfXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwfXZhciBsPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIT1udWxsP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7dGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixyKmwpLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLG4qbCk7dmFyIGM9dGhpcy5fY2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpO2lmKGMmJihjLnNldFRyYW5zZm9ybShsLDAsMCxsLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzKSl7dmFyIHU9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKTt1LndpZHRoPjAmJnUuaGVpZ2h0PjA/Yy5jYW52YXMud2lkdGg+MCYmYy5jYW52YXMuaGVpZ2h0PjAmJmMuZHJhd0ltYWdlKHUsMCwwLHIsbik6Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZmlsbCBjYW52YXMgd2l0aCAweDAgYnVmZmVyIGNhbnZhcyIpfX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4ub2ZmVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKX0pLHRoaXMuZGF0YXNldHMoW10pfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQocik7cmV0dXJuIHRoaXMucmVuZGVyZXIoKT09PSJzdmciP24udXNlU1ZHKHRoaXMuX3JlbmRlckFyZWEpOm4udXNlQ2FudmFzKHRoaXMuX2NhbnZhcyksbn0sdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IGtIZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgUkhlLlNWR0RyYXdlcigicGF0aCIsIiIpfSxmdW5jdGlvbihuKXtyZXR1cm4gbmV3IExIZS5DYW52YXNEcmF3ZXIobixmdW5jdGlvbigpe30pfSl9LHQucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpP3RoaXMuX2FuaW1hdG9yc1tyXXx8bmV3IGQ0Lk51bGw6bmV3IGQ0Lk51bGx9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMucmVuZGVyTG93UHJpb3JpdHkoKX0sdC5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihyLG4saSl7cmV0dXJuIG49PW51bGw/dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKToodGhpcy5fYmluZEF0dHIocixuLGkpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9iaW5kUHJvcGVydHk9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocikscz1hIT1udWxsP2Euc2NhbGU6bnVsbCxsPXR5cGVvZiBuPT0iZnVuY3Rpb24iP246ZnVuY3Rpb24oKXtyZXR1cm4gbn07dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQocix7YWNjZXNzb3I6bCxzY2FsZTppLHBvc3RTY2FsZTpvfSkscyE9bnVsbCYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkocyxyKSxpIT1udWxsJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkoaSxyKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LHQucHJvdG90eXBlLl9iaW5kQXR0cj1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKSxhPW8hPW51bGw/by5zY2FsZTpudWxsLHM9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpmdW5jdGlvbigpe3JldHVybiBufTt0aGlzLl9hdHRyQmluZGluZ3Muc2V0KHIse2FjY2Vzc29yOnMsc2NhbGU6aX0pLGEhPW51bGwmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KGEsciksaSE9bnVsbCYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KGksciksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfSx0LnByb3RvdHlwZS5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3J9LHQucHJvdG90eXBlLl9nZXRBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9PW51bGwpe3ZhciByPXRoaXMuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCk7dC5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlMmJihyPW9hdC5tZW1vaXplUHJvamVjdG9ycyhyKSksdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yPXJ9cmV0dXJuIFNkLmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihpLG8pe3Jbb109dC5fc2NhbGVkQWNjZXNzb3IoaSl9KTt2YXIgbj10aGlzLl9wcm9wZXJ0eVByb2plY3RvcnMoKTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihpKXtyW2ldPT1udWxsJiYocltpXT1uW2ldKX0pLHJ9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5faXNBbmNob3JlZCYmKHRoaXMuX3BhaW50KCksdGhpcy5fZGF0YUNoYW5nZWQ9ITEpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlckNhbGxiYWNrKCksdGhpc30sdC5wcm90b3R5cGUuYW5pbWF0ZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5pbWF0ZToodGhpcy5fYW5pbWF0ZT1yLHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gdGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSxyfSx0LnByb3RvdHlwZS5fdXBkYXRlRXh0ZW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcihyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fYXR0ckV4dGVudHNbcl09PW51bGwpe3ZhciBpPW9hdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBuLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2F0dHJCaW5kaW5ncy5nZXQocil9LGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGE9PW51bGx8fGEuYWNjZXNzb3I9PW51bGw/bnVsbDpvLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gb0t0KHMsYSxudWxsKX0pfSk7dGhpcy5fYXR0ckV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fYXR0ckV4dGVudHNbcl0oKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdPT1udWxsKXt2YXIgaT1vYXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBuLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fZmlsdGVyRm9yUHJvcGVydHkocil9LGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gYT09bnVsbHx8YS5hY2Nlc3Nvcj09bnVsbD9udWxsOm8ubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBvS3QobCxhLHMpfSl9KTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdKCl9LHQucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIW4pcmV0dXJuW107dmFyIG89W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKGEscyl7aWYoYS5zY2FsZT09PXIpe3ZhciBsPWkuZ2V0RXh0ZW50c0ZvckF0dHIocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24oYSxzKXtpZihhLnNjYWxlPT09cil7dmFyIGw9aS5nZXRFeHRlbnRzRm9yUHJvcGVydHkocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSxvfSx0LnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbihyLG4pe3JldHVybiBuPT09dm9pZCAwP3RoaXMuX2FuaW1hdG9yc1tyXToodGhpcy5fYW5pbWF0b3JzW3JdPW4sdGhpcyl9LHQucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fY2FudmFzPT1udWxsPyJzdmciOiJjYW52YXMiOih0aGlzLl9jYW52YXM9PW51bGwmJnI9PT0iY2FudmFzIj8odGhpcy5fY2FudmFzPXdkLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuY2xhc3NlZCgicGxvdC1jYW52YXMiLCEwKSx0aGlzLl9idWZmZXJDYW52YXM9d2Quc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSx0aGlzLmVsZW1lbnQoKSE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlQ2FudmFzKG4uX2NhbnZhcyl9KSx0aGlzLnJlbmRlcigpKTp0aGlzLl9jYW52YXMhPW51bGwmJnI9PSJzdmciJiYodGhpcy5fY2FudmFzLnJlbW92ZSgpLHRoaXMuX2NhbnZhcz1udWxsLHRoaXMuX2J1ZmZlckNhbnZhcz1udWxsLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlU1ZHKG4uX3JlbmRlckFyZWEpfSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQociksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7dGhpcy5fcmVtb3ZlRGF0YXNldChyKTt2YXIgbj10aGlzLl9jcmVhdGVEcmF3ZXIocik7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQocixuKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQociksci5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldChyKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmluZGV4T2Yocik9PT0tMT90aGlzOih0aGlzLl9yZW1vdmVEYXRhc2V0Tm9kZXMociksci5vZmZVcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5kZWxldGUociksdGhpcyl9LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldChyKTtuLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkucHVzaChhKX0pLHI9PW51bGw/aTooaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9yZW1vdmVEYXRhc2V0KG8pfSksci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9hZGREYXRhc2V0KG8pfSksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBkNC5OdWxsfV19LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7fSx0LnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvLGEpe2Zvcih2YXIgcz1uLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KG8pLGw9MCxjPW8uZGF0YSgpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihwKXt2YXIgZD1jW3BdLGc9bi5fcGl4ZWxQb2ludChkLHAsbyk7aWYoU2QuTWF0aC5pc05hTihnLngpfHxTZC5NYXRoLmlzTmFOKGcueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgXz1uO2kucHVzaCh7ZGF0dW06ZCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gXy5fcGl4ZWxQb2ludC5jYWxsKF8sZCxwLG8pfSxpbmRleDpwLGRhdGFzZXQ6byxkYXRhc2V0SW5kZXg6YSxjb21wb25lbnQ6bixkcmF3ZXI6cyx2YWxpZERhdHVtSW5kZXg6bH0pLGwrK30sZj0wO2Y8dTtmKyspaChmKX0pLGl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IFNkLk1hcDtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0KG4sbi5kYXRhKCkpfSkscn0sdC5wcm90b3R5cGUuX3BhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yO3ZhciBuPXRoaXMuX2dlbmVyYXRlRHJhd1N0ZXBzKCksaT10aGlzLl9nZXREYXRhVG9EcmF3KCksbz10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiByLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KHUpfSk7aWYodGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpe3ZhciBhPXRoaXMuX2NhbnZhcy5ub2RlKCkscz1hLmdldENvbnRleHQoIjJkIik7cy5jbGVhclJlY3QoMCwwLGEuY2xpZW50V2lkdGgsYS5jbGllbnRIZWlnaHQpLHRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSExfXRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dC5hcHBseURyYXdTdGVwcyhuLHUpO29baF0uZHJhdyhpLmdldCh1KSxmKX0pO3ZhciBsPXRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gdC5nZXRUb3RhbERyYXdUaW1lKGkuZ2V0KHUpLG4pfSksYz1TZC5NYXRoLm1heChsLDApO3RoaXMuX2FkZGl0aW9uYWxQYWludChjKX0sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSksdGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpcmV0dXJuIHdkLnNlbGVjdEFsbCgpO3ZhciBpPVtdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fZGF0YXNldFRvRHJhd2VyLmdldChvKTtpZihhIT1udWxsKXt2YXIgcz1hLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtpLnB1c2guYXBwbHkoaSxzKX19KSx3ZC5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKHIpLmVudGl0aWVzKCkubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoaSl9KX0sdC5wcm90b3R5cGUuZmlsdGVyRW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLmZpbHRlcihyKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShpKX0pfSx0LnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKGEpe3JldHVybiBuLl9lbnRpdHlCb3VuZHMoYSl9O2lmKHIhPT12b2lkIDApe3ZhciBvPW5ldyBTZC5FbnRpdHlTdG9yZTtyZXR1cm4gby5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyhyKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLG99ZWxzZSBpZih0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT09PXZvaWQgMCl7dmFyIG89bmV3IFNkLkVudGl0eVN0b3JlO28uYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPW99cmV0dXJuIHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlfSx0LnByb3RvdHlwZS5fbG9jYWxPcmlnaW5Cb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6dGhpcy5oZWlnaHQoKX19fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0LGE9dGhpcy5fcGl4ZWxQb2ludChuLGksbykscz1hLngsbD1hLnk7cmV0dXJue3g6cyx5Omwsd2lkdGg6MCxoZWlnaHQ6MH19LHQucHJvdG90eXBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHk9ZnVuY3Rpb24ocil7dmFyIG49e2JvdW5kczp0aGlzLl9lbnRpdHlCb3VuZHMociksY29tcG9uZW50OnIuY29tcG9uZW50LGRhdGFzZXQ6ci5kYXRhc2V0LGRhdGFzZXRJbmRleDpyLmRhdGFzZXRJbmRleCxkYXR1bTpyLmRhdHVtLGluZGV4OnIuaW5kZXgscG9zaXRpb246ci5wb3NpdGlvbixzZWxlY3Rpb246d2Quc2VsZWN0KHIuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgoci52YWxpZERhdHVtSW5kZXgpKX07cmV0dXJuIG59LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHIpO3JldHVybiBuPT09dm9pZCAwP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobil9LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaTtpZihuPT1udWxsKXt2YXIgbz1yO2k9e3g6by50b3BMZWZ0LngseTpvLnRvcExlZnQueSx3aWR0aDpvLmJvdHRvbVJpZ2h0Lngtby50b3BMZWZ0LngsaGVpZ2h0Om8uYm90dG9tUmlnaHQueS1vLnRvcExlZnQueX19ZWxzZXt2YXIgYT1yO2k9e3g6YS5taW4seTpuLm1pbix3aWR0aDphLm1heC1hLm1pbixoZWlnaHQ6bi5tYXgtbi5taW59fXJldHVybiB0aGlzLmVudGl0aWVzSW5Cb3VuZHMoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbkJvdW5kcyhyKTtpZighIWkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9KX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJblhCb3VuZHMocik7aWYoISFpKXJldHVybiBpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5ZQm91bmRzKHIpO2lmKCEhaSlyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShvKX0pfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksci5vZmZVcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSxyLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LHQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9uVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSxyLm9uVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJue319LHQuX3NjYWxlZEFjY2Vzc29yPWZ1bmN0aW9uKHIpe3ZhciBuPXIuc2NhbGUsaT1yLmFjY2Vzc29yLG89ci5wb3N0U2NhbGUsYT1uPT1udWxsP2k6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBuLnNjYWxlKGkobCxjLHUpKX0scz1vPT1udWxsP2E6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBvKGEobCxjLHUpLGwsYyx1KX07cmV0dXJuIHN9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm57eDowLHk6MH19LHQucHJvdG90eXBlLl9hbmltYXRlT25OZXh0UmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUmJnRoaXMuX2RhdGFDaGFuZ2VkfSx0Lk9QVElNSVpFX01FTU9JWkVfUFJPSkVDVE9SUz0hMSx0Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OPTYwMCx0fShJSGUuQ29tcG9uZW50KTtRRi5QbG90PXpIZTtmdW5jdGlvbiBvS3QoZSx0LHIpe3ZhciBuPXQuYWNjZXNzb3IsaT10LnNjYWxlO2lmKGk9PW51bGwpcmV0dXJuW107dmFyIG89ZS5kYXRhKCk7ciE9bnVsbCYmKG89by5maWx0ZXIoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsZSl9KSk7dmFyIGE9ZnVuY3Rpb24obCxjKXtyZXR1cm4gbihsLGMsZSl9LHM9by5tYXAoYSk7cmV0dXJuIGkuZXh0ZW50T2ZWYWx1ZXMocyl9fSk7dmFyIGFLdD1IKGFhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRkhlPShkZSgpLFV0KHBlKSksQkhlPXJzKCksSEhlPUZlKCksVkhlPXpvdCgpLFVIZT1mdW5jdGlvbihlKXtGSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT0xLzA7cmV0dXJuIHRoaXMuY29tcG9uZW50cygpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9byxzPWEuZW50aXR5TmVhcmVzdChyKTtpZihzIT1udWxsKXt2YXIgbD1ISGUuTWF0aC5kaXN0YW5jZVNxdWFyZWQocy5wb3NpdGlvbixyKTtsPD1pJiYoaT1sLG49cyl9fSksbn0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwmJiEociBpbnN0YW5jZW9mIEJIZS5QbG90KSl0aHJvdyBuZXcgRXJyb3IoIlBsb3QgR3JvdXAgb25seSBhY2NlcHRzIHBsb3RzIik7cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZC5jYWxsKHRoaXMsciksdGhpc30sdH0oVkhlLkdyb3VwKTthYXQuUGxvdEdyb3VwPVVIZX0pO3ZhciBzS3Q9SChzYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFIZT0oZGUoKSxVdChwZSkpLHF1PShFcigpLFV0KE1yKSksR289RmUoKSxHSGU9V0YoKSxXSGU9ZnVuY3Rpb24oZSl7cUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fcm93UGFkZGluZz0wLG4uX2NvbHVtblBhZGRpbmc9MCxuLl9yb3dzPVtdLG4uX3Jvd1dlaWdodHM9W10sbi5fY29sdW1uV2VpZ2h0cz1bXSxuLl9uUm93cz0wLG4uX25Db2xzPTAsbi5fY2FsY3VsYXRlZExheW91dD1udWxsLG4uYWRkQ2xhc3MoInRhYmxlIiksci5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7aS5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YSE9bnVsbCYmbi5hZGQoYSxvLHMpfSl9KSxufXJldHVybiB0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXtmb3IodmFyIG49MDtuPHRoaXMuX25Sb3dzO24rKylmb3IodmFyIGk9MDtpPHRoaXMuX25Db2xzO2krKyl0aGlzLl9yb3dzW25dW2ldIT1udWxsJiZyKHRoaXMuX3Jvd3Nbbl1baV0pfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuITA7cmV0dXJuITF9LHQucHJvdG90eXBlLmNvbXBvbmVudEF0PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI8MHx8cj49dGhpcy5fblJvd3N8fG48MHx8bj49dGhpcy5fbkNvbHM/bnVsbDp0aGlzLl9yb3dzW3JdW25dfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpdGhyb3cgRXJyb3IoIkNhbm5vdCBhZGQgbnVsbCB0byBhIHRhYmxlIGNlbGwiKTtpZighdGhpcy5oYXMocikpe3ZhciBvPXRoaXMuX3Jvd3Nbbl0mJnRoaXMuX3Jvd3Nbbl1baV07aWYobyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoImNlbGwgaXMgb2NjdXBpZWQiKTtyLmRldGFjaCgpLHRoaXMuX25Sb3dzPU1hdGgubWF4KG4rMSx0aGlzLl9uUm93cyksdGhpcy5fbkNvbHM9TWF0aC5tYXgoaSsxLHRoaXMuX25Db2xzKSx0aGlzLl9wYWRUYWJsZVRvU2l6ZSh0aGlzLl9uUm93cyx0aGlzLl9uQ29scyksdGhpcy5fcm93c1tuXVtpXT1yLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHIpLHRoaXMucmVkcmF3KCl9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuIHRoaXMuX3Jvd3Nbbl1baV09bnVsbCwhMDtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2l0ZXJhdGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTtmb3IodmFyIG89dGhpcy5fcm93cyxhPXF1LnRyYW5zcG9zZSh0aGlzLl9yb3dzKSxzPXItdGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSksbD1uLXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpLGM9dC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyxvLGZ1bmN0aW9uKHope3JldHVybiB6PT1udWxsfHx6LmZpeGVkSGVpZ2h0KCl9KSx1PXQuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX2NvbHVtbldlaWdodHMsYSxmdW5jdGlvbih6KXtyZXR1cm4gej09bnVsbHx8ei5maXhlZFdpZHRoKCl9KSxoPXUubWFwKGZ1bmN0aW9uKHope3JldHVybiB6PT09MD8uNTp6fSksZj1jLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej09PTA/LjU6en0pLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGgscyksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoZixsKSxnPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLF89R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uUm93cykseSx4LGI9MCxTLEMsUDs7KXt2YXIgaz1Hby5BcnJheS5hZGQoXyxkKSxPPUdvLkFycmF5LmFkZChnLHApO1M9dGhpcy5fZGV0ZXJtaW5lR3VhcmFudGVlcyhPLGssaSksZz1TLmd1YXJhbnRlZWRXaWR0aHMsXz1TLmd1YXJhbnRlZWRIZWlnaHRzLEM9Uy53YW50c1dpZHRoQXJyLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuIHp9KSxQPVMud2FudHNIZWlnaHRBcnIuc29tZShmdW5jdGlvbih6KXtyZXR1cm4gen0pO3ZhciBEPXksQj14O3k9cy1xdS5zdW0oUy5ndWFyYW50ZWVkV2lkdGhzKSx4PWwtcXUuc3VtKFMuZ3VhcmFudGVlZEhlaWdodHMpO3ZhciBJPXZvaWQgMDtDPyhJPVMud2FudHNXaWR0aEFyci5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo/LjE6MH0pLEk9R28uQXJyYXkuYWRkKEksdSkpOkk9dTt2YXIgTD12b2lkIDA7UD8oTD1TLndhbnRzSGVpZ2h0QXJyLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej8uMTowfSksTD1Hby5BcnJheS5hZGQoTCxjKSk6TD1jLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEkseSksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoTCx4KSxiKys7dmFyIFI9eT4wJiZ5IT09RCxGPXg+MCYmeCE9PUI7aWYoIShSfHxGKXx8Yj41KWJyZWFrfXJldHVybiB5PXMtcXUuc3VtKFMuZ3VhcmFudGVlZFdpZHRocykseD1sLXF1LnN1bShTLmd1YXJhbnRlZWRIZWlnaHRzKSxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh1LHkpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGMseCkse2NvbFByb3BvcnRpb25hbFNwYWNlOnAscm93UHJvcG9ydGlvbmFsU3BhY2U6ZCxndWFyYW50ZWVkV2lkdGhzOlMuZ3VhcmFudGVlZFdpZHRocyxndWFyYW50ZWVkSGVpZ2h0czpTLmd1YXJhbnRlZWRIZWlnaHRzLHdhbnRzV2lkdGg6Qyx3YW50c0hlaWdodDpQfX0sdC5wcm90b3R5cGUuX2RldGVybWluZUd1YXJhbnRlZXM9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTt2YXIgbz1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxhPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHM9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fbkNvbHMpLGw9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fblJvd3MpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oYyx1KXtjLmZvckVhY2goZnVuY3Rpb24oaCxmKXt2YXIgcDtoIT1udWxsP3A9aC5yZXF1ZXN0ZWRTcGFjZShyW2ZdLG5bdV0pOnA9e21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O3ZhciBkPWk/TWF0aC5taW4ocC5taW5XaWR0aCxyW2ZdKTpwLm1pbldpZHRoO29bZl09TWF0aC5tYXgob1tmXSxkKTt2YXIgZz1pP01hdGgubWluKHAubWluSGVpZ2h0LG5bdV0pOnAubWluSGVpZ2h0O2FbdV09TWF0aC5tYXgoYVt1XSxnKTt2YXIgXz1wLm1pbldpZHRoPnJbZl07c1tmXT1zW2ZdfHxfO3ZhciB5PXAubWluSGVpZ2h0Pm5bdV07bFt1XT1sW3VdfHx5fSl9KSx7Z3VhcmFudGVlZFdpZHRoczpvLGd1YXJhbnRlZWRIZWlnaHRzOmEsd2FudHNXaWR0aEFycjpzLHdhbnRzSGVpZ2h0QXJyOmx9fSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQocixuKSx7bWluV2lkdGg6cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZFdpZHRocyksbWluSGVpZ2h0OnF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBhPXF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLHM9cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZEhlaWdodHMpLGw9dGhpcy5fY2FsY3VsYXRlZExheW91dDsoYT50aGlzLndpZHRoKCl8fHM+dGhpcy5oZWlnaHQoKSkmJihsPXRoaXMuX2l0ZXJhdGVMYXlvdXQodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksITApKTt2YXIgYz0wLHU9R28uQXJyYXkuYWRkKGwucm93UHJvcG9ydGlvbmFsU3BhY2UsbC5ndWFyYW50ZWVkSGVpZ2h0cyksaD1Hby5BcnJheS5hZGQobC5jb2xQcm9wb3J0aW9uYWxTcGFjZSxsLmd1YXJhbnRlZWRXaWR0aHMpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oZixwKXt2YXIgZD0wO2YuZm9yRWFjaChmdW5jdGlvbihnLF8pe2chPW51bGwmJmcuY29tcHV0ZUxheW91dCh7eDpkLHk6Y30saFtfXSx1W3BdKSxkKz1oW19dK28uX2NvbHVtblBhZGRpbmd9KSxjKz11W3BdK28uX3Jvd1BhZGRpbmd9KSx0aGlzfSx0LnByb3RvdHlwZS5yb3dQYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc7aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihyKXx8cjwwKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmNvbHVtblBhZGRpbmc9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZztpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHxyPDApdGhyb3cgRXJyb3IoImNvbHVtblBhZGRpbmcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZz1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUucm93V2VpZ2h0PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1tyXTtpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKG4pfHxuPDApdGhyb3cgRXJyb3IoInJvd1dlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9yb3dXZWlnaHRzW3JdPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5jb2x1bW5XZWlnaHQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9jb2x1bW5XZWlnaHRzW3JdO2lmKCFHby5NYXRoLmlzVmFsaWROdW1iZXIobil8fG48MCl0aHJvdyBFcnJvcigiY29sdW1uV2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbcl09bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj1xdS50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHQuX2ZpeGVkU3BhY2UocixmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbHx8bi5maXhlZFdpZHRoKCl9KX0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsfHxyLmZpeGVkSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyl7dGhpcy5fcm93c1tpXT09PXZvaWQgMCYmKHRoaXMuX3Jvd3NbaV09W10sdGhpcy5fcm93V2VpZ2h0c1tpXT1udWxsKTtmb3IodmFyIG89MDtvPG47bysrKXRoaXMuX3Jvd3NbaV1bb109PT12b2lkIDAmJih0aGlzLl9yb3dzW2ldW29dPW51bGwpfWZvcih2YXIgbz0wO288bjtvKyspdGhpcy5fY29sdW1uV2VpZ2h0c1tvXT09PXZvaWQgMCYmKHRoaXMuX2NvbHVtbldlaWdodHNbb109bnVsbCl9LHQuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obyxhKXtpZihvIT1udWxsKXJldHVybiBvO3ZhciBzPW5bYV0ubWFwKGkpLGw9cy5yZWR1Y2UoZnVuY3Rpb24oYyx1KXtyZXR1cm4gYyYmdX0sITApO3JldHVybiBsPzA6MX0pfSx0Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1xdS5zdW0ocik7cmV0dXJuIGk9PT0wP0dvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsci5sZW5ndGgpOnIubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuKm8vaX0pfSx0Ll9maXhlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHMmJmx9LCEwKX0sbz1mdW5jdGlvbihhKXtyZXR1cm4gaShhLm1hcChuKSl9O3JldHVybiBpKHIubWFwKG8pKX0sdH0oR0hlLkNvbXBvbmVudENvbnRhaW5lcik7c2F0LlRhYmxlPVdIZX0pO3ZhciBsS3Q9SChsYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFlIZT0oZGUoKSxVdChwZSkpLGpIZT1Wb3QoKSxYSGU9MiwkSGU9ZnVuY3Rpb24oZSl7WUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHIuX21heExpbmVzPVhIZSxyfXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3RoaXMuX3dyYXBwZXIubWF4TGluZXModGhpcy5fbWF4TGluZXMpO3ZhciBpPXRoaXMuYW5nbGUoKT09PTA/cjpuO2k9PT0wJiYoaT0xLzApO3ZhciBvPXRoaXMuX3dyYXBwZXIud3JhcCh0aGlzLl90ZXh0LHRoaXMuX21lYXN1cmVyLGkpLGE9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShvLndyYXBwZWRUZXh0KSxzPSh0aGlzLmFuZ2xlKCk9PT0wP2Eud2lkdGg6YS5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCksbD0odGhpcy5hbmdsZSgpPT09MD9hLmhlaWdodDphLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpzLG1pbkhlaWdodDpsfX0sdC5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21heExpbmVzOih0aGlzLl9tYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHR9KGpIZS5MYWJlbCk7bGF0LldyYXBwZWRMYWJlbD0kSGV9KTt2YXIgY0t0PUgoY2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBLSGU9KGRlKCksVXQocGUpKSxaSGU9cUYoKSxKSGU9ZnVuY3Rpb24oZSl7S0hlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoIngtZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6ci50b3BMZWZ0LngseTowfSxib3R0b21SaWdodDp7eDpyLmJvdHRvbVJpZ2h0LngseTp0aGlzLmhlaWdodCgpfX0pfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIngtcmVzaXphYmxlIil9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55U2NhbGUuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIil9LHQucHJvdG90eXBlLnlFeHRlbnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueUV4dGVudC5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigiWERyYWdCb3hMYXllciBoYXMgbm8geUV4dGVudCIpfSx0fShaSGUuRHJhZ0JveExheWVyKTtjYXQuWERyYWdCb3hMYXllcj1KSGV9KTt2YXIgdUt0PUgodWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1YXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBRSGU9KGRlKCksVXQocGUpKSx0VmU9cUYoKSxlVmU9ZnVuY3Rpb24oZSl7UUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoInktZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5OnIudG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTpyLmJvdHRvbVJpZ2h0Lnl9fSl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieFNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFlEcmFnQm94TGF5ZXIiKX0sdC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iil9LHR9KHRWZS5EcmFnQm94TGF5ZXIpO3VhdC5ZRHJhZ0JveExheWVyPWVWZX0pO3ZhciBQb3Q9SChfYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOcz0oZGUoKSxVdChwZSkpO05zLl9fZXhwb3J0U3RhcihxRigpLF9hKTtOcy5fX2V4cG9ydFN0YXIoSSR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihMJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKHpvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoTG90KCksX2EpO05zLl9fZXhwb3J0U3RhcihSJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKFZvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoTiR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihhS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKFRvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoc0t0KCksX2EpO05zLl9fZXhwb3J0U3RhcihsS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKGNLdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIodUt0KCksX2EpfSk7dmFyIGZhdD1IKGhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgclZlPShkZSgpLFV0KHBlKSksblZlPURmKCksaVZlPWZ1bmN0aW9uKGUpe3JWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIGZpbGwiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0fShuVmUuU1ZHRHJhd2VyKTtoYXQuQXJjU1ZHRHJhd2VyPWlWZX0pO3ZhciBkYXQ9SChwYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG9WZT0oZGUoKSxVdChwZSkpLGFWZT1EZigpLHNWZT1mdW5jdGlvbihlKXtvVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyYyBvdXRsaW5lIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoImZpbGwiLCJub25lIil9LHR9KGFWZS5TVkdEcmF3ZXIpO3BhdC5BcmNPdXRsaW5lU1ZHRHJhd2VyPXNWZX0pO3ZhciBtYXQ9SChlQj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZUIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsVmU9KGRlKCksVXQocGUpKSx0Qj1GdigpLGNWZT1EZigpLHVWZT1mdW5jdGlvbihlKXtsVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0oY1ZlLlNWR0RyYXdlcik7ZUIuQXJlYVNWR0RyYXdlcj11VmU7dmFyIGhWZT1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0sZlZlPVsib3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCJdO2Z1bmN0aW9uIHBWZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIG89dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxoVmUsblswXSwwKTt0Qi5yZW5kZXJBcmVhKHIsZSgpLG5bMF0sbyk7dmFyIGE9dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxmVmUsblswXSwwKTt0Qi5yZW5kZXJMaW5lKHIsdCgpLG5bMF0sYSl9fWVCLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXA9cFZlfSk7dmFyIG5CPUgockI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZFZlPShkZSgpLFV0KHBlKSksaEt0PUZ2KCksbVZlPURmKCksZ1ZlPWZ1bmN0aW9uKGUpe2RWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwibGluZSIpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihyKXtyLnN0eWxlKCJmaWxsIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0obVZlLlNWR0RyYXdlcik7ckIuTGluZVNWR0RyYXdlcj1nVmU7dmFyIF9WZT1bIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiB5VmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1oS3QucmVzb2x2ZUF0dHJpYnV0ZXMobixfVmUsclswXSwwKTtoS3QucmVuZGVyTGluZSh0LGUoKSxyWzBdLGkpfX1yQi5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPXlWZX0pO3ZhciBvQj1IKFBTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShQUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZLdD0oZGUoKSxVdChwZSkpLGlCPUZ2KCksdlZlPURmKCkseFZlPWZ1bmN0aW9uKGUpe2ZLdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSIiKTt2YXIgbj1lLmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3JldHVybiBuLl9yb290Q2xhc3NOYW1lPXIsbi5fcm9vdC5jbGFzc2VkKG4uX3Jvb3RDbGFzc05hbWUsITApLG59cmV0dXJuIHR9KHZWZS5TVkdEcmF3ZXIpO1BTLlJlY3RhbmdsZVNWR0RyYXdlcj14VmU7dmFyIGJWZT1pQi5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0Il0pO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKGUsdCxyKXtlLnNhdmUoKTtmb3IodmFyIG49dC5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBvPXRbaV07aWYobyE9bnVsbCl7dmFyIGE9aUIucmVzb2x2ZUF0dHJpYnV0ZXMocixiVmUsbyxpKTtlLmJlZ2luUGF0aCgpLGUucmVjdChhLngsYS55LGEud2lkdGgsYS5oZWlnaHQpLGlCLnJlbmRlclBhdGhXaXRoU3R5bGUoZSxhKX19ZS5yZXN0b3JlKCl9O3ZhciB3VmU9ZnVuY3Rpb24oZSl7Zkt0Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsUFMuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXApfHx0aGlzfXJldHVybiB0fShpQi5DYW52YXNEcmF3ZXIpO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdlcj13VmV9KTt2YXIgX2F0PUgoZ2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTVmU9KGRlKCksVXQocGUpKSxNVmU9RGYoKSxFVmU9ZnVuY3Rpb24oZSl7U1ZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsImxpbmUiLCIiKXx8dGhpc31yZXR1cm4gdH0oTVZlLlNWR0RyYXdlcik7Z2F0LlNlZ21lbnRTVkdEcmF3ZXI9RVZlfSk7dmFyIHBLdD1IKHlhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVFZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49d2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuc2NyZWVuV2lkdGg9dCx0aGlzLnNjcmVlbkhlaWdodD1yLHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1uLHRoaXMucGl4ZWxXaWR0aD10Km4sdGhpcy5waXhlbEhlaWdodD1yKm4sdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLG4pfXJldHVybiBlLnNpemVQaXhlbHM9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dC5jYW52YXM7by53aWR0aD1yKmksby5oZWlnaHQ9bippLG8uc3R5bGUud2lkdGg9cisicHgiLG8uc3R5bGUuaGVpZ2h0PW4rInB4Iix0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdC5zY2FsZShpLGkpfSxlLnByb3RvdHlwZS5ibGl0PWZ1bmN0aW9uKHQscixuKXtyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0wKSx0LmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxyLG4sdGhpcy5zY3JlZW5XaWR0aCx0aGlzLnNjcmVlbkhlaWdodCl9LGUucHJvdG90eXBlLmJsaXRDZW50ZXI9ZnVuY3Rpb24odCxyLG4pe3I9PT12b2lkIDAmJihyPTApLG49PT12b2lkIDAmJihuPTApLHRoaXMuYmxpdCh0LE1hdGguZmxvb3Ioci10aGlzLnNjcmVlbldpZHRoLzIpLE1hdGguZmxvb3Iobi10aGlzLnNjcmVlbkhlaWdodC8yKSl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXMuZGV2aWNlUGl4ZWxSYXRpbztyZXR1cm4gdGhpcy5zY3JlZW5XaWR0aD10LHRoaXMuc2NyZWVuSGVpZ2h0PXIsdGhpcy5waXhlbFdpZHRoPXQqaSx0aGlzLnBpeGVsSGVpZ2h0PXIqaSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLGkpLG4mJnRoaXMuY3R4LnRyYW5zbGF0ZSh0LzIsdC8yKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49ci5waXhlbFdpZHRoLGk9ci5waXhlbEhlaWdodCxvPXIuY3R4O3JldHVybiBvLnNhdmUoKSxvLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdD09bnVsbD9vLmNsZWFyUmVjdCgwLDAsbixpKTooby5maWxsU3R5bGU9dCxvLmZpbGxSZWN0KDAsMCxuLGkpKSxvLnJlc3RvcmUoKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRJbWFnZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLnBpeGVsV2lkdGgsdGhpcy5waXhlbEhlaWdodCl9LGV9KCk7eWF0LkNhbnZhc0J1ZmZlcj1UVmV9KTt2YXIgdmF0PUgoYUI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ1ZlPShkZSgpLFV0KHBlKSksbTQ9RnYoKSxBVmU9cEt0KCksUFZlPURmKCksSVZlPWZ1bmN0aW9uKGUpe0NWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwic3ltYm9sIil8fHRoaXN9cmV0dXJuIHR9KFBWZS5TVkdEcmF3ZXIpO2FCLlN5bWJvbFNWR0RyYXdlcj1JVmU7dmFyIExWZT1tNC5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSJdKTtmdW5jdGlvbiBrVmUoZSx0LHIsbil7dmFyIGk9dGhpcztyZXR1cm4gZnVuY3Rpb24obyxhLHMpe2Zvcih2YXIgbD1vLmNhbnZhcyxjPWwuY2xpZW50V2lkdGgsdT1sLmNsaWVudEhlaWdodCxoPW49PT12b2lkIDA/bmV3IEFWZS5DYW52YXNCdWZmZXIoMCwwKTpuLGY9dCgpLHA9cigpLGQ9bnVsbCxnPW51bGwsXz1udWxsLHk9MDt5PGEubGVuZ3RoO3krKyl7dmFyIHg9YVt5XTtpZih4IT1udWxsKXt2YXIgYj1tNC5yZXNvbHZlQXR0cmlidXRlcyhzLExWZSx4LHkpLFM9cCh4LHksZSk7aWYoISFSVmUoYyx1LGIueCxiLnksUykpe3ZhciBDPU5WZShkLGIsbTQuQ29udGV4dFN0eWxlQXR0cnMpLFA9Zih4LHksaS5fZGF0YXNldCk7aWYoIShDJiZfPT1TJiZnPT1QKSl7dmFyIGs9bTQuZ2V0U3Ryb2tlV2lkdGgoYiksTz1TK2srMTsoTz5oLnNjcmVlbldpZHRofHxPPmguc2NyZWVuSGVpZ2h0KSYmaC5yZXNpemUoTyxPLCEwKSxoLmNsZWFyKCk7dmFyIEQ9aC5jdHg7RC5iZWdpblBhdGgoKSxQKFMpLmNvbnRleHQoRCkobnVsbCksRC5jbG9zZVBhdGgoKSxtNC5yZW5kZXJQYXRoV2l0aFN0eWxlKEQsYiksZz1QLF89UyxkPWJ9aC5ibGl0Q2VudGVyKG8sYi54LGIueSl9fX19fWFCLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcD1rVmU7ZnVuY3Rpb24gUlZlKGUsdCxyLG4saSl7cmV0dXJuIHIraT49MCYmci1pPD1lJiZuK2k+PTAmJm4taTw9dH1mdW5jdGlvbiBOVmUoZSx0LHIpe2lmKGU9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoZVtpXSE9dFtpXSlyZXR1cm4hMX1yZXR1cm4hMH19KTt2YXIgQnY9SChEYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPZj0oZGUoKSxVdChwZSkpO09mLl9fZXhwb3J0U3RhcihmYXQoKSxEYyk7T2YuX19leHBvcnRTdGFyKGRhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIobWF0KCksRGMpO09mLl9fZXhwb3J0U3RhcihGdigpLERjKTtPZi5fX2V4cG9ydFN0YXIoVXUoKSxEYyk7T2YuX19leHBvcnRTdGFyKG5CKCksRGMpO09mLl9fZXhwb3J0U3RhcihvQigpLERjKTtPZi5fX2V4cG9ydFN0YXIoX2F0KCksRGMpO09mLl9fZXhwb3J0U3RhcihEZigpLERjKTtPZi5fX2V4cG9ydFN0YXIodmF0KCksRGMpfSk7dmFyIEh2PUgoYmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBEVmU9KGRlKCksVXQocGUpKSxkS3Q9a3MoKSx4YXQ9RmUoKSxPVmU9aWF0KCksZzQ9cnMoKSx6VmU9ZnVuY3Rpb24oZSl7RFZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsci5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSxyLl9kZWZlcnJlZFJlbmRlcmluZz0hMSxyLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtPWZ1bmN0aW9uKG4saSxvLGEpeyFyLl9pc0FuY2hvcmVkfHwoci5fcmVuZGVyQXJlYSE9bnVsbCYmci5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsICIraSsiKSBzY2FsZSgiK28rIiwgIithKyIpIiksci5fY2FudmFzIT1udWxsJiZyLl9jYW52YXMuc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rInB4LCAiK2krInB4KSBzY2FsZSgiK28rIiwgIithKyIpIikpfSxyLmFkZENsYXNzKCJ4eS1wbG90Iiksci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKX0sci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtpZihyLmRlZmVycmVkUmVuZGVyaW5nKCkpe3ZhciBuPXIueCgpJiZyLngoKS5zY2FsZSxpPXIueSgpJiZyLnkoKS5zY2FsZTtyLl9kZWZlcnJlZFJlbmRlcmVyLnVwZGF0ZURvbWFpbnMobixpKX1lbHNlIHIucmVuZGVyKCl9LHIuX2RlZmVycmVkUmVuZGVyZXI9bmV3IE9WZS5EZWZlcnJlZFJlbmRlcmVyKGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVuZGVyKCl9LHIuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm0pLHJ9cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmVycmVkUmVuZGVyaW5nKCkmJnRoaXMuX2RlZmVycmVkUmVuZGVyZXIucmVzZXRUcmFuc2Zvcm1zKCksZS5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLmRlZmVycmVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nO2lmKHIpe3ZhciBuPXRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSxpPXRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZTt0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnNldERvbWFpbnMobixpKX1yZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmc9cix0aGlzfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9YX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHQuX1hfS0VZLHIsbixpKTt2YXIgbz10aGlzLndpZHRoKCk7cmV0dXJuIG4hPW51bGwmJm8hPW51bGwmJm4ucmFuZ2UoWzAsb10pLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZX0tFWSxyLG4saSk7dmFyIG89dGhpcy5oZWlnaHQoKTtyZXR1cm4gbiE9bnVsbCYmbyE9bnVsbCYmKG4gaW5zdGFuY2VvZiBkS3QuQ2F0ZWdvcnk/bi5yYW5nZShbMCxvXSk6bi5yYW5nZShbbywwXSkpLHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngiJiZ0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluP3RoaXMuX21ha2VGaWx0ZXJCeVByb3BlcnR5KCJ5Iik6KHI9PT0ieSJ8fHI9PT0ieTAiKSYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpOm51bGx9LHQucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKTtpZihuIT1udWxsKXt2YXIgaT1uLmFjY2Vzc29yLG89bi5zY2FsZTtpZihvIT1udWxsKXJldHVybiBmdW5jdGlvbihhLHMsbCl7dmFyIGM9by5yYW5nZSgpO3JldHVybiB4YXQuTWF0aC5pblJhbmdlKG8uc2NhbGUoaShhLHMsbCkpLGNbMF0sY1sxXSl9fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9mZlVwZGF0ZShpKX0sdC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9uVXBkYXRlKGkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2spLHRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPyJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHIpe2Nhc2UieCI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMCx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCk7YnJlYWs7Y2FzZSJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITAsdGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3IrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgbz10aGlzLngoKSxhPW8mJm8uc2NhbGU7YSE9bnVsbCYmYS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt2YXIgcz10aGlzLnkoKSxsPXMmJnMuc2NhbGU7cmV0dXJuIGwhPW51bGwmJihsIGluc3RhbmNlb2YgZEt0LkNhdGVnb3J5P2wucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pOmwucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKSx0aGlzfSx0LnByb3RvdHlwZS5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy54KCkuc2NhbGU7ciE9bnVsbCYmci5hdXRvRG9tYWluKCl9LHQucHJvdG90eXBlLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW49ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnkoKS5zY2FsZTtyIT1udWxsJiZyLmF1dG9Eb21haW4oKX0sdC5wcm90b3R5cGUuc2hvd0FsbERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpc30sdC5wcm90b3R5cGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX3Byb2plY3RvcnNSZWFkeT1mdW5jdGlvbigpe3ZhciByPXRoaXMueCgpLG49dGhpcy55KCk7cmV0dXJuIHIhPW51bGwmJnIuYWNjZXNzb3IhPW51bGwmJm4hPW51bGwmJm4uYWNjZXNzb3IhPW51bGx9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJue3g6byhyLG4saSkseTphKHIsbixpKX19LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyksaT10aGlzLmF0dHIoImRlZmluZWQiKSxvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihyLngoKSkoYSxzLGwpLHU9ZzQuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci55KCkpKGEscyxsKTtyZXR1cm4gaSYmaS5hY2Nlc3NvcihhLHMsbCk9PT0hMT8hMTp4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHUpfTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oYSl7bi5zZXQoYSxuLmdldChhKS5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gbyhzLGwsYSl9KSl9KSxufSx0Ll9YX0tFWT0ieCIsdC5fWV9LRVk9InkiLHR9KGc0LlBsb3QpO2JhdC5YWVBsb3Q9elZlfSk7dmFyIFNhdD1IKGxCPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZWZT0oZGUoKSxVdChwZSkpLHlhPShFcigpLFV0KE1yKSksQlZlPUxmKCksSFZlPUJ2KCksVlZlPVV1KCksbUt0PW5CKCksVVZlPWtzKCksc0I9dmQoKSxRZz1GZSgpLHFWZT1JZigpLHdhdD1JUygpLHZsPXJzKCksR1ZlPUh2KCksZ0t0PXtsaW5lYXI6eWEuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOnlhLmN1cnZlTGluZWFyQ2xvc2VkLHN0ZXA6eWEuY3VydmVTdGVwLHN0ZXBCZWZvcmU6eWEuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjp5YS5jdXJ2ZVN0ZXBBZnRlcixiYXNpczp5YS5jdXJ2ZUJhc2lzLGJhc2lzT3Blbjp5YS5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDp5YS5jdXJ2ZUJhc2lzQ2xvc2VkLGJ1bmRsZTp5YS5jdXJ2ZUJ1bmRsZSxjYXJkaW5hbDp5YS5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3Blbjp5YS5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDp5YS5jdXJ2ZUNhcmRpbmFsQ2xvc2VkLG1vbm90b25lOnlhLmN1cnZlTW9ub3RvbmVYfTtsQi5DdXJ2ZU5hbWU9cVZlLm1ha2VFbnVtKFsibGluZWFyIiwibGluZWFyQ2xvc2VkIiwic3RlcCIsInN0ZXBCZWZvcmUiLCJzdGVwQWZ0ZXIiLCJiYXNpcyIsImJhc2lzT3BlbiIsImJhc2lzQ2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbE9wZW4iLCJjYXJkaW5hbENsb3NlZCIsIm1vbm90b25lIl0pO3ZhciBXVmU9ZnVuY3Rpb24oZSl7RlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fY3VydmU9ImxpbmVhciIsci5fYXV0b3JhbmdlU21vb3RoPSExLHIuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLHIuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxyLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLHIuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBCVmUuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbih2bC5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKSxuLmVhc2luZ01vZGUoImV4cEluT3V0Iiksbi5tYXhUb3RhbER1cmF0aW9uKHZsLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pLHIuYW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4sbiksci5hdHRyKCJzdHJva2UiLG5ldyBVVmUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuLGkpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzKTooZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsciksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9cix0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7dGhpcy5hdXRvcmFuZ2VNb2RlKCk9PT0ieCImJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBzQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKSx0aGlzLmF1dG9yYW5nZU1vZGUoKT09PSJ5IiYmdGhpcy55KCkmJnRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpfSx0LnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jdXJ2ZToodGhpcy5fY3VydmU9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ6KHRoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ9cix0aGlzKX0sdC5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ6KHRoaXMuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29sbGFwc2VEZW5zZUxpbmVzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ6KHRoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IFZWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgbUt0LkxpbmVTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgSFZlLkNhbnZhc0RyYXdlcihpLG1LdC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2QzTGluZUZhY3Rvcnkocil9KSl9KX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPWUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscik7aWYoIXRoaXMuX2F1dG9yYW5nZVNtb290aHx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT1yfHx0aGlzLmF1dG9yYW5nZU1vZGUoKSE9PSJ4IiYmdGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0ieSIpcmV0dXJuIG47dmFyIGk9dGhpcy5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cygpLG87cmV0dXJuIHRoaXMuYXV0b3JhbmdlTW9kZSgpPT09InkiP289aS5sZWZ0LmNvbmNhdChpLnJpZ2h0KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueX0pOm89aS50b3AuY29uY2F0KGkuYm90dG9tKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueH0pLG4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB5YS5leHRlbnQoeWEubWVyZ2UoW2Esb10pKX0pfSx0LnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm57bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfTt2YXIgbj10aGlzLnkoKS5zY2FsZSxpPXRoaXMueCgpLnNjYWxlLG89e2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX0sYT1pLnNjYWxlKGkuZG9tYWluKClbMF0pLHM9aS5zY2FsZShpLmRvbWFpbigpWzFdKSxsPW4uc2NhbGUobi5kb21haW4oKVswXSksYz1uLnNjYWxlKG4uZG9tYWluKClbMV0pO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih1KXtmb3IodmFyIGg9dS5kYXRhKCksZixwLGQsZyxfLHkseCxiLFM9MTtTPGgubGVuZ3RoO1MrKylfPXh8fGkuc2NhbGUoci54KCkuYWNjZXNzb3IoaFtTLTFdLFMtMSx1KSkseT1ifHxuLnNjYWxlKHIueSgpLmFjY2Vzc29yKGhbUy0xXSxTLTEsdSkpLHg9aS5zY2FsZShyLngoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLGI9bi5zY2FsZShyLnkoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLF88YT09YTw9eCYmKGY9YS1fLHA9eC1fLGc9Yi15LGQ9ZipnL3Asby5sZWZ0LnB1c2goe3g6YSx5Om4uaW52ZXJ0KHkrZCl9KSksXzxzPT1zPD14JiYoZj1zLV8scD14LV8sZz1iLXksZD1mKmcvcCxvLnJpZ2h0LnB1c2goe3g6cyx5Om4uaW52ZXJ0KHkrZCl9KSkseTxjPT1jPD1iJiYocD14LV8sZD1jLXksZz1iLXksZj1kKnAvZyxvLnRvcC5wdXNoKHt4OmkuaW52ZXJ0KF8rZikseTpjfSkpLHk8bD09bDw9YiYmKHA9eC1fLGQ9bC15LGc9Yi15LGY9ZCpwL2csby5ib3R0b20ucHVzaCh7eDppLmludmVydChfK2YpLHk6bH0pKX0pLG99LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLnNjYWxlLmRvbWFpbigpLG49TWF0aC5tYXgoclswXSxyWzFdKSxpPU1hdGgubWluKHJbMF0sclsxXSksbz1uPDAmJm58fGk+MCYmaXx8MCxhPXRoaXMueSgpLnNjYWxlLnNjYWxlKG8pO3JldHVybiBmdW5jdGlvbihzLGwsYyl7cmV0dXJuIGF9fSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKHZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHdhdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24obil7aWYobiE9PSJkIil7dmFyIGk9cltuXTtyW25dPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gby5sZW5ndGg+MD9pKG9bMF0sYSxzKTpudWxsfX19KSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZKHIpO3JldHVybiBuIT1udWxsP1tuXTpbXX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0xLzAsaT0xLzAsbyxhPXRoaXMuYm91bmRzKCkscz10aGlzLmVudGl0aWVzKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXTtpZighIVFnLk1hdGgud2l0aGluKHUucG9zaXRpb24sYSkpe3ZhciBoPU1hdGguYWJzKHIueC11LnBvc2l0aW9uLngpLGY9TWF0aC5hYnMoci55LXUucG9zaXRpb24ueSk7KGg8bnx8aD09PW4mJmY8aSkmJihvPXUsbj1oLGk9Zil9fXJldHVybiBvfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih2bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxyfSx0LnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gaS5fZDNMaW5lRmFjdG9yeShzLHIsbikobyl9fSx0LnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbihyLG4saSl7bj09PXZvaWQgMCYmKG49dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKSxpPT09dm9pZCAwJiYoaT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3ZhciBvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1uKGEscyxsKSx1PWkoYSxzLGwpO3JldHVybiBRZy5NYXRoLmlzVmFsaWROdW1iZXIoYykmJlFnLk1hdGguaXNWYWxpZE51bWJlcih1KX07cmV0dXJuIHlhLmxpbmUoKS54KGZ1bmN0aW9uKGEscyl7cmV0dXJuIG4oYSxzLHIpfSkueShmdW5jdGlvbihhLHMpe3JldHVybiBpKGEscyxyKX0pLmN1cnZlKHRoaXMuX2dldEN1cnZlRmFjdG9yeSgpKS5kZWZpbmVkKGZ1bmN0aW9uKGEscyl7cmV0dXJuIG8oYSxzLHIpfSl9LHQucHJvdG90eXBlLl9nZXRDdXJ2ZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmN1cnZlKCk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt2YXIgbj1nS3Rbcl07cmV0dXJuIG49PW51bGw/Z0t0LmxpbmVhcjpufWVsc2UgcmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPW5ldyBRZy5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0YSgpO2lmKCFyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmIXIuX2Rvd25zYW1wbGluZ0VuYWJsZWQpe24uc2V0KGksW29dKTtyZXR1cm59Zm9yKHZhciBhPVtdLHM9by5sZW5ndGgsbD0wO2w8cztsKyspYVtsXT1sO3IuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkJiYoYT1yLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nKGksYSkpLHIuX2Rvd25zYW1wbGluZ0VuYWJsZWQmJihhPXIuX2ZpbHRlckRvd25zYW1wbGluZyhpLGEpKSxyLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihhPXIuX2ZpbHRlckRlbnNlTGluZXMoaSxhKSk7Zm9yKHZhciBjPVtdLHU9YS5sZW5ndGgsbD0wO2w8dTtsKyspe3ZhciBoPWFbbF07Y1tsXT1vW2hdfW4uc2V0KGksW2NdKX0pLG59LHQucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMsbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1yLmRhdGEoKSxsPVtdLGM9ZnVuY3Rpb24oeCxiKXtyZXR1cm4gUWcuTWF0aC5pblJhbmdlKHgsMCxpLndpZHRoKCkpJiZRZy5NYXRoLmluUmFuZ2UoYiwwLGkuaGVpZ2h0KCkpfSx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW8oc1tuW3VdXSxuW3VdLHIpLGY9YShzW25bdV1dLG5bdV0scikscD1jKGgsZik7aWYoIXAmJm5bdS0xXSE9bnVsbCYmc1tuW3UtMV1dIT1udWxsKXt2YXIgZD1vKHNbblt1LTFdXSxuW3UtMV0sciksZz1hKHNbblt1LTFdXSxuW3UtMV0scik7cD1wfHxjKGQsZyl9aWYoIXAmJm5bdSsxXSE9bnVsbCYmc1tuW3UrMV1dIT1udWxsKXt2YXIgXz1vKHNbblt1KzFdXSxuW3UrMV0scikseT1hKHNbblt1KzFdXSxuW3UrMV0scik7cD1wfHxjKF8seSl9cCYmbC5wdXNoKG5bdV0pfXJldHVybiBsfSx0LnByb3RvdHlwZS5fZmlsdGVyRG93bnNhbXBsaW5nPWZ1bmN0aW9uKHIsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybltdO2Zvcih2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPVtuWzBdXSxsPWZ1bmN0aW9uKGssTyl7dmFyIEQ9byhpW25ba11dLG5ba10sciksQj1hKGlbbltrXV0sbltrXSxyKSxJPW8oaVtuW2srMV1dLG5baysxXSxyKSxMPWEoaVtuW2srMV1dLG5baysxXSxyKTtpZihPPT09MS8wKXJldHVybiBNYXRoLmZsb29yKEQpPT09TWF0aC5mbG9vcihJKTt2YXIgUj1CKyhJLUQpKk87cmV0dXJuIE1hdGguZmxvb3IoTCk9PT1NYXRoLmZsb29yKFIpfSxjPTA7YzxuLmxlbmd0aC0xOyl7Zm9yKHZhciB1PW5bY10saD1vKGlbbltjXV0sbltjXSxyKSxmPWEoaVtuW2NdXSxuW2NdLHIpLHA9byhpW25bYysxXV0sbltjKzFdLHIpLGQ9YShpW25bYysxXV0sbltjKzFdLHIpLGc9TWF0aC5mbG9vcihoKT09PU1hdGguZmxvb3IocCk/MS8wOihkLWYpLyhwLWgpLF89bltjXSx5PWc9PT0xLzA/ZjpoLHg9XyxiPXksUz0hMDtjPG4ubGVuZ3RoLTEmJihTfHxsKGMsZykpOyl7YysrLFM9ITE7dmFyIEM9Zz09PTEvMD9hKGlbbltjXV0sbltjXSxyKTpvKGlbbltjXV0sbltjXSxyKTtDPmImJihiPUMseD1uW2NdKSxDPHkmJih5PUMsXz1uW2NdKX12YXIgUD1uW2NdO18hPT11JiZzLnB1c2goXykseCE9PV8mJnghPT11JiZzLnB1c2goeCksUCE9PXUmJlAhPT1fJiZQIT09eCYmcy5wdXNoKFApfXJldHVybiBzfSx0LnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihyLG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPWZ1bmN0aW9uKGMpe3JldHVybiBvKGlbY10sYyxyKX0sbD1mdW5jdGlvbihjKXtyZXR1cm4gYShpW2NdLGMscil9O3JldHVybiB0aGlzLl9idWNrZXRCeVgocixuLHMsbCl9LHQucHJvdG90eXBlLl9idWNrZXRCeVg9ZnVuY3Rpb24ocixuLGksbyl7Zm9yKHZhciBhPVtdLHM9ci5kYXRhKCksbD1udWxsLGM9bi5sZW5ndGgsdT0wO3U8PWM7Kyt1KXt2YXIgaD1uW3VdO2lmKHNbaF0hPW51bGwpe3ZhciBmPU1hdGguZmxvb3IoaShoKSkscD1vKGgpO2w9PW51bGw/bD1uZXcgUWcuQnVja2V0KGgsZixwKTpsLmlzSW5CdWNrZXQoZik/bC5hZGRUb0J1Y2tldChwLGgpOihhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksbD1uZXcgUWcuQnVja2V0KGgsZixwKSl9fXJldHVybiBsIT1udWxsJiZhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksYX0sdH0oR1ZlLlhZUGxvdCk7bEIuTGluZT1XVmV9KTt2YXIgVGF0PUgoRWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShFYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZVmU9KGRlKCksVXQocGUpKSxjQj0oRXIoKSxVdChNcikpLGpWZT1rcygpLF80PUZlKCksTWF0PUJ2KCksX0t0PW1hdCgpLFhWZT1VdSgpLHlLdD1uQigpLHVCPUlTKCksJFZlPVNhdCgpLERzPXJzKCksS1ZlPWZ1bmN0aW9uKGUpe1lWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJhcmVhLXBsb3QiKSxyLnkwKDApLHIuYXR0cigiZmlsbC1vcGFjaXR5IiwuMjUpLHIuYXR0cigiZmlsbCIsbmV3IGpWZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuX2xpbmVEcmF3ZXJzPW5ldyBfNC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbiksbiE9bnVsbCl7dmFyIGk9dGhpcy55MCgpLmFjY2Vzc29yO2khPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVksaSxuKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueTA9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlWVNjYWxlKCl9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2xpbmVEcmF3ZXJzLnNldChyLG5ldyBNYXQuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHlLdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IE1hdC5DYW52YXNEcmF3ZXIoaSx5S3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBvPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueCgpKSxhPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueSgpKTtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShyLG8sYSl9KSl9KSksZS5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpO3JldHVybiB0aGlzLnJlbmRlcmVyKCk9PT0ic3ZnIj9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsciksdGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPURzLlBsb3QuYXBwbHlEcmF3U3RlcHMobixvKTtyLl9saW5lRHJhd2Vycy5nZXQobykuZHJhdyhpLmdldChvKSxhKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSksci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih1Qi5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLHJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IFhWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgX0t0LkFyZWFTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgTWF0LkNhbnZhc0RyYXdlcihpLF9LdC5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7dmFyIG89bi5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxhPW9bMF0scz1vWzFdLGw9b1syXSxjPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlQXJlYUdlbmVyYXRvcihhLHMsbCxjLHIpfSxmdW5jdGlvbigpe3ZhciBvPW4uX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksYT1vWzBdLHM9b1sxXSxsPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcihhLHMsbCxyKX0pKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHVCLkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KCJ5MCIpLG49XzQuQXJyYXkuZmxhdHRlbihyKSxpPV80LkFycmF5LnVuaXEobiksbz1pLmxlbmd0aD09PTE/aVswXTpudWxsLGE9dGhpcy55KCkscz1hJiZhLnNjYWxlO3MhPW51bGwmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciE9bnVsbCYmKHMucmVtb3ZlUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciksdGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXI9bnVsbCksbyE9bnVsbCYmKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW29dfSxzLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpKSl9LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3JldHVybiBEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpfSx0LnByb3RvdHlwZS5fY29vcmRpbmF0ZVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm5bRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKSx0aGlzLnJlbmRlcmVyKCk9PT0iY2FudmFzIilyZXR1cm4gY0Iuc2VsZWN0QWxsKCk7dmFyIGk9ZS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMscikubm9kZXMoKSxvPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQoYSl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBpLnB1c2guYXBwbHkoaSxhLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KSxjQi5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLGE9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3ZhciB1PW8uX2NyZWF0ZUFyZWFHZW5lcmF0b3IocixuLGksYSxjKTtyZXR1cm4gdShzKX19LHQucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz1yKGksbyxhKSxsPW4oaSxvLGEpO3JldHVybiBfNC5NYXRoLmlzVmFsaWROdW1iZXIocykmJl80Lk1hdGguaXNWYWxpZE51bWJlcihsKX19LHQucHJvdG90eXBlLl9jcmVhdGVBcmVhR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8sYSl7dmFyIHM9dGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCksbD1jQi5hcmVhKCkueChmdW5jdGlvbihjLHUpe3JldHVybiByKGMsdSxhKX0pLnkxKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG4oYyx1LGEpfSkueTAoZnVuY3Rpb24oYyx1KXtyZXR1cm4gaShjLHUsYSl9KS5jdXJ2ZShzKS5kZWZpbmVkKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG8oYyx1LGEpfSk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX2dldEN1cnZlRmFjdG9yeSgpLHM9Y0IubGluZSgpLngoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsbyl9KS55KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIG4obCxjLG8pfSkuY3VydmUoYSkuZGVmaW5lZChmdW5jdGlvbihsLGMpe3JldHVybiBpKGwsYyxvKX0pO3JldHVybiBzfSx0Ll9ZMF9LRVk9InkwIix0fSgkVmUuTGluZSk7RWF0LkFyZWE9S1ZlfSk7dmFyIHk0PUgoR3U9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEd1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWlZlPShkZSgpLFV0KHBlKSksQWF0PShFcigpLFV0KE1yKSksQ2F0PV9sKCksSlZlPUxmKCksUVZlPUJ1KCksdFVlPUJ2KCksZVVlPVV1KCksclVlPW9CKCksblVlPUNTKCksUGF0PWtzKCksdkt0PXZkKCkseGw9RmUoKSxMYXQ9SWYoKSx4S3Q9SVMoKSxoQj1ycygpLGlVZT1IdigpO0d1LkJhck9yaWVudGF0aW9uPUxhdC5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKTtHdS5MYWJlbHNQb3NpdGlvbj1MYXQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCIsIm91dHNpZGUiXSk7R3UuQmFyQWxpZ25tZW50PUxhdC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0pO3ZhciBJYXQ9ZnVuY3Rpb24oZSl7WlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xhYmVsRm9ybWF0dGVyPVFWZS5pZGVudGl0eSgpLG4uX2xhYmVsc0VuYWJsZWQ9ITEsbi5fbGFiZWxzUG9zaXRpb249R3UuTGFiZWxzUG9zaXRpb24uZW5kLG4uX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlPSEwLG4uX2JhckFsaWdubWVudD0ibWlkZGxlIixuLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3M9blVlLm1lbW9pemUob1VlKSxuLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLG4uYWRkQ2xhc3MoImJhci1wbG90IiksciE9PSJ2ZXJ0aWNhbCImJnIhPT0iaG9yaXpvbnRhbCIpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgUGxvdHMuQmFyIik7cmV0dXJuIG4uX2lzVmVydGljYWw9cj09PSJ2ZXJ0aWNhbCIsbi5hbmltYXRvcigiYmFzZWxpbmUiLG5ldyBKVmUuTnVsbCksbi5hdHRyKCJmaWxsIixuZXcgUGF0LkNvbG9yKCkucmFuZ2UoKVswXSksbi5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2JhclBpeGVsVGhpY2tuZXNzKCl9KSxuLl9sYWJlbENvbmZpZz1uZXcgeGwuTWFwLG4uX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltuLmJhc2VsaW5lVmFsdWUoKV19LG59cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LHQucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfSx0LnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfSx0LnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fQkFSX0VORF9LRVkpO3ZhciBuPXRoaXMucG9zaXRpb24oKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9CQVJfRU5EX0tFWSxyLGkpLHRoaXMuX3VwZGF0ZVRoaWNrbmVzc0F0dHIoKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuYmFyQWxpZ25tZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2JhckFsaWdubWVudDoodGhpcy5fYmFyQWxpZ25tZW50PXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGVVZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgclVlLlJlY3RhbmdsZVNWR0RyYXdlcih0Ll9CQVJfQVJFQV9DTEFTUyl9LGZ1bmN0aW9uKHIpe3JldHVybiBuZXcgdFVlLlJlY3RhbmdsZUNhbnZhc0RyYXdlcihyKX0pfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LHQucHJvdG90eXBlLmJhc2VsaW5lVmFsdWU9ZnVuY3Rpb24ocil7aWYocj09bnVsbCl7aWYodGhpcy5fYmFzZWxpbmVWYWx1ZSE9bnVsbClyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7dmFyIG49dGhpcy5sZW5ndGgoKS5zY2FsZTtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIFBhdC5UaW1lP25ldyBEYXRlKDApOjB9cmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU9cix0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsciksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsbiE9bnVsbCYmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPW4pLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCh0Ll9MQUJFTF9BUkVBX0NMQVNTLCEwKSxvPW5ldyBDYXQuU3ZnQ29udGV4dChpLm5vZGUoKSksYT1uZXcgQ2F0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgQ2F0LldyaXRlcihhLG8pO3JldHVybiB0aGlzLl9sYWJlbENvbmZpZy5zZXQocix7bGFiZWxBcmVhOmksbWVhc3VyZXI6YSx3cml0ZXI6c30pLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGFiZWxDb25maWcuZ2V0KHIpO24hPW51bGwmJihuLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUocikpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3ZhciBvPW4uX2lzVmVydGljYWw/bi5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WChyKTpuLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RZKHIpO3JldHVybiBvPT09dm9pZCAwP3ZvaWQgMDpuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX2VudGl0aWVzSW50ZXJzZWN0aW5nKHIueCxyLnkpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoaSk6aSgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPVtdLG89dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLGE9by5sZW5ndGgscz0wO3M8YTtzKyspe3ZhciBsPW9bc107eGwuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCb3VuZHMobCkpJiZpLnB1c2godGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KGwpKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3VwZGF0ZUxlbmd0aFNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHI9dGhpcy5sZW5ndGgoKS5zY2FsZTtyIGluc3RhbmNlb2Ygdkt0LlF1YW50aXRhdGl2ZVNjYWxlJiYoci5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpLHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHIpfSl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMubGVuZ3RoKCkuc2NhbGUsbz1pLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxhPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6byx5MTp0aGlzLl9pc1ZlcnRpY2FsP286MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpvLHkyOnRoaXMuX2lzVmVydGljYWw/bzp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGEpLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQocykubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmeGwuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1lLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpLG87aWYocj09PSJ4IiYmdGhpcy5faXNWZXJ0aWNhbClvPXRoaXMueCgpO2Vsc2UgaWYocj09PSJ5IiYmIXRoaXMuX2lzVmVydGljYWwpbz10aGlzLnkoKTtlbHNlIHJldHVybiBpO2lmKCEobyYmby5zY2FsZSYmby5zY2FsZSBpbnN0YW5jZW9mIHZLdC5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJuIGk7dmFyIGE9by5zY2FsZSxzPXRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIGk9aS5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIEFhdC5leHRlbnQoW2EuaW52ZXJ0KG4uX2dldFBvc2l0aW9uQXR0cihhLnNjYWxlKGxbMF0pLHMpKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzBdKSxzKStzKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzFdKSxzKSksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFsxXSkscykrcyldKX0pLGl9LHQucHJvdG90eXBlLl9nZXRQb3NpdGlvbkF0dHI9ZnVuY3Rpb24ocixuKXtzd2l0Y2godGhpcy5faXNWZXJ0aWNhbHx8KHItPW4sbio9LTEpLHRoaXMuX2JhckFsaWdubWVudCl7Y2FzZSJzdGFydCI6cmV0dXJuIHI7Y2FzZSJlbmQiOnJldHVybiByLW47Y2FzZSJtaWRkbGUiOmRlZmF1bHQ6cmV0dXJuIHItbi8yfX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpLGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbz10aGlzLmRhdGFzZXRzKCkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gbi5nZXQoYSkuc29tZShmdW5jdGlvbihzLGwpe3JldHVybiBzPT1udWxsPyExOnIuX2RyYXdMYWJlbChzLGwsYSxpKX0pfSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJm8mJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiByLl9sYWJlbENvbmZpZy5nZXQoYSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fbGFiZWxDb25maWcuZ2V0KGkpLHM9YS5sYWJlbEFyZWEsbD1hLm1lYXN1cmVyLGM9YS53cml0ZXIsdT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGg9dShyLG4saSksZj10aGlzLmxlbmd0aCgpLnNjYWxlLHA9ZiE9bnVsbD9mLnNjYWxlKGgpOmgsZD1mIT1udWxsP2Yuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOnRoaXMuYmFzZWxpbmVWYWx1ZSgpLGc9e3g6by54KHIsbixpKSx5Om8ueShyLG4saSl9LF89e3dpZHRoOm8ud2lkdGgocixuLGkpLGhlaWdodDpvLmhlaWdodChyLG4saSl9LHk9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoaCxyLG4saSkseD1sLm1lYXN1cmUoeSksYj10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihnLF8seCksUz10aGlzLl9pc1ZlcnRpY2FsP3A8PWQ6cDxkLEM9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGcsXyx4LGIsUyksUD1DLmNvbnRhaW5lckRpbWVuc2lvbnMsaz1DLmxhYmVsQ29udGFpbmVyT3JpZ2luLE89Qy5sYWJlbE9yaWdpbixEPUMuYWxpZ25tZW50LEI9by5maWxsKHIsbixpKSxJPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMsayxPLHgsYixCKSxMPXt4QWxpZ246RC54LHlBbGlnbjpELnl9O2Mud3JpdGUoeSxQLndpZHRoLFAuaGVpZ2h0LEwsSS5ub2RlKCkpO3ZhciBSPXRoaXMuX2lzVmVydGljYWw/Xy53aWR0aDx4LndpZHRoOl8uaGVpZ2h0PHguaGVpZ2h0O3JldHVybiBSfSx0LnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24ocixuLGkpe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09R3UuTGFiZWxzUG9zaXRpb24ub3V0c2lkZSlyZXR1cm4hMTt2YXIgbz10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYT10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgscz10aGlzLl9pc1ZlcnRpY2FsP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGw9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLGM9bythLHU9YTtyZXR1cm4gYz5zP3U9cy1vOm88MCYmKHU9YyksbCt0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9dX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbihyLG4saSxvLGEpe3ZhciBzPXRoaXMsbD10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYz10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgsdT10aGlzLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgsaD0iY2VudGVyIixmPWMscD1sLGQ9bCxnPWZ1bmN0aW9uKF8pe3N3aXRjaChfKXtjYXNlInRvcExlZnQiOmg9cy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIscCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsZCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI7cmV0dXJuO2Nhc2UiY2VudGVyIjpkKz0oYyt1KS8yO3JldHVybjtjYXNlImJvdHRvbVJpZ2h0IjpoPXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUixkKz1mLXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLXU7cmV0dXJufX07aWYobylzd2l0Y2godGhpcy5fbGFiZWxzUG9zaXRpb24pe2Nhc2UgR3UuTGFiZWxzUG9zaXRpb24uc3RhcnQ6ZyhhPyJib3R0b21SaWdodCI6InRvcExlZnQiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLm1pZGRsZTpnKCJjZW50ZXIiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLmVuZDpnKGE/InRvcExlZnQiOiJib3R0b21SaWdodCIpO2JyZWFrfWVsc2UgYT8oaD10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1LGQtPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UpOihoPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxkKz1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9uLndpZHRoOmYsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/ZjpuLmhlaWdodH0sbGFiZWxDb250YWluZXJPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD9yLng6cCx5OnRoaXMuX2lzVmVydGljYWw/cDpyLnl9LGxhYmVsT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ci54K24ud2lkdGgvMi1pLndpZHRoLzI6ZCx5OnRoaXMuX2lzVmVydGljYWw/ZDpyLnkrbi5oZWlnaHQvMi1pLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjpoLHk6dGhpcy5faXNWZXJ0aWNhbD9oOiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLngrIiwgIituLnkrIikiKTtpZihhKXtsLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApO3ZhciBjPXhsLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIscykqMS42PHhsLkNvbG9yLmNvbnRyYXN0KCJibGFjayIscyk7bC5jbGFzc2VkKGM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApfWVsc2UgbC5jbGFzc2VkKCJvZmYtYmFyLWxhYmVsIiwhMCk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCI7blthXT1mdW5jdGlvbigpe3JldHVybiBvfSxuW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoeEt0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih4S3QuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJ4IjoieSIsbD1oQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGM9aEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5sZW5ndGgoKSksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIE1hdGguYWJzKG8tYyhkLGcsXykpfSxoPW5bdC5fQkFSX1RISUNLTkVTU19LRVldLGY9bi5nYXAscD1mPT1udWxsP2g6ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWgoZCxnLF8pO3JldHVybiB5PHQuX0JBUl9HQVBMRVNTX1RIUkVTSE9MRF9QWD95OnktZihkLGcsXyl9O3JldHVybiBuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/cDp1LG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/dTpwLG5bYV09ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWMoZCxnLF8pO3JldHVybiB5Pm8/bzp5fSxuW3NdPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5fZ2V0UG9zaXRpb25BdHRyKGwoZCxnLF8pLGgoZCxnLF8pKX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZVRoaWNrbmVzc0F0dHI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5wb3NpdGlvbigpLGk9dGhpcy5iYXJFbmQoKTtuIT1udWxsJiZpIT1udWxsPyh0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSExLHRoaXMuYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbihvLGEscyl7dmFyIGw9bi5hY2Nlc3NvcihvLGEscyksYz1pLmFjY2Vzc29yKG8sYSxzKTtyZXR1cm4gbD1uLnNjYWxlP24uc2NhbGUuc2NhbGUobCk6bCxjPWkuc2NhbGU/aS5zY2FsZS5zY2FsZShjKTpjLE1hdGguYWJzKGMtbCl9KSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JhclBpeGVsVGhpY2tuZXNzKCl9KSl9LHQucHJvdG90eXBlLl9iYXJQaXhlbFRoaWNrbmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzJiZ0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3ModGhpcy5wb3NpdGlvbigpLHRoaXMuZGF0YXNldHMoKSx0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpKTowfSx0LnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihyKXtpZihyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpLCF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSlyZXR1cm5bXTt2YXIgbj1lLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIG59LHQucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49ci5kYXR1bSxpPXIuaW5kZXgsbz1yLmRhdGFzZXQ7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKG4saSxvKX0sdC5wcm90b3R5cGUuX3BpeGVsQm91bmRzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm57eDpvLngocixuLGkpLHk6by55KHIsbixpKSx3aWR0aDpvLndpZHRoKHIsbixpKSxoZWlnaHQ6by5oZWlnaHQocixuLGkpfX0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX3BpeGVsQm91bmRzKHIsbixpKSxhPSh0aGlzLl9pc1ZlcnRpY2FsP2hCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTpoQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpKHIsbixpKSxzPSh0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpLnNjYWxlOnRoaXMueCgpLnNjYWxlKS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk7cmV0dXJuIHRoaXMuX3BpeGVsUG9pbnRCYXIoYSxzLG8pfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludEJhcj1mdW5jdGlvbihyLG4saSl7dmFyIG8sYTtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8obz1pLngraS53aWR0aC8yLGE9cjw9bj9pLnk6aS55K2kuaGVpZ2h0KToobz1yPj1uP2kueCtpLndpZHRoOmkueCxhPWkueStpLmhlaWdodC8yKSx7eDpvLHk6YX19LHQucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMscixuKX0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49bmV3IHhsLk1hcCxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG89dGhpcy53aWR0aCgpLGE9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9cy5kYXRhKCkubWFwKGZ1bmN0aW9uKGMsdSl7dmFyIGg9ci5faXNEYXR1bU9uU2NyZWVuKGksbyxhLGMsdSxzKTtyZXR1cm4gaD9jOm51bGx9KTtuLnNldChzLGwpfSksbn0sdC5wcm90b3R5cGUuX2lzRGF0dW1PblNjcmVlbj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci54KG8sYSxzKSxjPXIueShvLGEscyksdT1yLndpZHRoKG8sYSxzKSxoPXIuaGVpZ2h0KG8sYSxzKSxmPXhsLk1hdGguaXNWYWxpZE51bWJlcihsKSYmeGwuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4bC5NYXRoLmlzVmFsaWROdW1iZXIodSkmJnhsLk1hdGguaXNWYWxpZE51bWJlcihoKTtyZXR1cm4gZj94bC5NYXRoLmJvdW5kc0ludGVyc2VjdHMobCxjLHUsaCwwLDAsbixpKTohMX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fbGFiZWxDb25maWcuZ2V0KG4pLm1lYXN1cmVyLnJlc2V0KCl9KX0sdC5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTUsdC5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYPTMsdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQsdC5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIix0Ll9CQVJfRU5EX0tFWT0iYmFyRW5kIix0Ll9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiLHQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwLHR9KGlVZS5YWVBsb3QpO0d1LkJhcj1JYXQ7ZnVuY3Rpb24gb1VlKGUsdCxyKXt2YXIgbixpPWUuc2NhbGU7aWYoaSBpbnN0YW5jZW9mIFBhdC5DYXRlZ29yeSluPWkucmFuZ2VCYW5kKCk7ZWxzZXt2YXIgbz1lLmFjY2Vzc29yLGE9QWF0LnNldCh4bC5BcnJheS5mbGF0dGVuKHQubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmRhdGEoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gbyh1LGgsYyl9KS5maWx0ZXIoZnVuY3Rpb24odSl7cmV0dXJuIHUhPW51bGx9KS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUudmFsdWVPZigpfSl9KSkpLnZhbHVlcygpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4rY30pO2Euc29ydChmdW5jdGlvbihjLHUpe3JldHVybiBjLXV9KTt2YXIgcz1hLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gaS5zY2FsZShjKX0pLGw9QWF0LnBhaXJzKHMpO249eGwuTWF0aC5taW4obCxmdW5jdGlvbihjLHUpe3JldHVybiBNYXRoLmFicyhjWzFdLWNbMF0pfSxyKklhdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pLG4qPUlhdC5fQkFSX1RISUNLTkVTU19SQVRJT31yZXR1cm4gbn19KTt2YXIgd0t0PUgoa2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhVWU9KGRlKCksVXQocGUpKSxzVWU9a3MoKSxsVWU9RmUoKSxiS3Q9eTQoKSxjVWU9cnMoKSx1VWU9ZnVuY3Rpb24oZSl7YVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2NsdXN0ZXJPZmZzZXRzPW5ldyBsVWUuTWFwLG59cmV0dXJuIHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX21ha2VJbm5lclNjYWxlKCksbz1mdW5jdGlvbihsLGMpe3JldHVybiBpLnJhbmdlQmFuZCgpfTtuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/bzpuLndpZHRoLG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/bi5oZWlnaHQ6bzt2YXIgYT1uLngscz1uLnk7cmV0dXJuIG4ueD10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKGwsYyx1KXtyZXR1cm4gYShsLGMsdSkrci5fY2x1c3Rlck9mZnNldHMuZ2V0KHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIGEobCxjLHUpfSxuLnk9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpK3IuX2NsdXN0ZXJPZmZzZXRzLmdldCh1KX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9tYWtlSW5uZXJTY2FsZSgpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2NsdXN0ZXJPZmZzZXRzLnNldChpLG4uc2NhbGUoU3RyaW5nKG8pKS1uLnJhbmdlQmFuZCgpLzIpfSl9LHQucHJvdG90eXBlLl9tYWtlSW5uZXJTY2FsZT1mdW5jdGlvbigpe3ZhciByPW5ldyBzVWUuQ2F0ZWdvcnk7ci5kb21haW4odGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybiBTdHJpbmcobyl9KSk7dmFyIG49Y1VlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihiS3QuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpO3JldHVybiByLnJhbmdlKFswLG4obnVsbCwwLG51bGwpXSkscn0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCksZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKX0sdH0oYkt0LkJhcik7a2F0LkNsdXN0ZXJlZEJhcj11VWV9KTt2YXIgU0t0PUgoTmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoVWU9KGRlKCksVXQocGUpKSx2ND0oRXIoKSxVdChNcikpLFJhdD1fbCgpLGZVZT1MZigpLHBVZT1CdSgpLGRVZT1rcygpLFZ2PUZlKCksbVVlPWZhdCgpLGdVZT1kYXQoKSxfVWU9VXUoKSx5VWU9QUYoKSxNZD1ycygpLHZVZT1mdW5jdGlvbihlKXtoVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhcnRBbmdsZT0wLHIuX2VuZEFuZ2xlPTIqTWF0aC5QSSxyLl9sYWJlbEZvcm1hdHRlcj1wVWUuaWRlbnRpdHkoKSxyLl9sYWJlbHNFbmFibGVkPSExLHIuaW5uZXJSYWRpdXMoMCksci5vdXRlclJhZGl1cyhmdW5jdGlvbigpe3ZhciBuPXIuX3BpZUNlbnRlcigpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChyLndpZHRoKCktbi54LG4ueCksTWF0aC5tYXgoci5oZWlnaHQoKS1uLnksbi55KSl9KSxyLmFkZENsYXNzKCJwaWUtcGxvdCIpLHIuYXR0cigiZmlsbCIsZnVuY3Rpb24obixpKXtyZXR1cm4gU3RyaW5nKGkpfSxuZXcgZFVlLkNvbG9yKSxyLl9zdHJva2VEcmF3ZXJzPW5ldyBWdi5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYXR0YWNoVG8oci5fcmVuZGVyQXJlYSl9KX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBvPXRoaXMuX3BpZUNlbnRlcigpO3RoaXMuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby54KyIsIitvLnkrIikiKTt2YXIgYT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLndpZHRoKCktby54LG8ueCksTWF0aC5tYXgodGhpcy5oZWlnaHQoKS1vLnksby55KSk7cmV0dXJuIHRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZSE9bnVsbCYmdGhpcy5pbm5lclJhZGl1cygpLnNjYWxlLnJhbmdlKFswLGFdKSx0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUhPW51bGwmJnRoaXMub3V0ZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxhXSksdGhpc30sdC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTEpcmV0dXJuIFZ2LldpbmRvdy53YXJuKCJPbmx5IG9uZSBkYXRhc2V0IGlzIHN1cHBvcnRlZCBpbiBQaWUgcGxvdHMiKSx0aGlzO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLGUucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxyKTt2YXIgbj1uZXcgZ1VlLkFyY091dGxpbmVTVkdEcmF3ZXI7cmV0dXJuIHRoaXMuX2lzU2V0dXAmJm4uYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZGVsZXRlKHIpLHRoaXMuX3N0YXJ0QW5nbGVzPVtdLHRoaXMuX2VuZEFuZ2xlcz1bXSx0aGlzfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT1lLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxyKS5ub2RlcygpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fc3Ryb2tlRHJhd2Vycy5nZXQobyk7YSE9bnVsbCYmaS5wdXNoLmFwcGx5KGksYS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSksdjQuc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9VZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgbVVlLkFyY1NWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4geVVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFBpZSBQbG90ISIpLG51bGx9KX0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpO3ZhciBpPWUucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7by5wb3NpdGlvbi54Kz1uLndpZHRoKCkvMixvLnBvc2l0aW9uLnkrPW4uaGVpZ2h0KCkvMjt2YXIgYT12NC5zZWxlY3Qobi5fc3Ryb2tlRHJhd2Vycy5nZXQoby5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KG8uaW5kZXgpKSxzPW87cmV0dXJuIHMuc3Ryb2tlU2VsZWN0aW9uPWEsc30pfSx0LnByb3RvdHlwZS5zZWN0b3JWYWx1ZT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1NFQ1RPUl9WQUxVRV9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fU0VDVE9SX1ZBTFVFX0tFWSxyLG4pLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmlubmVyUmFkaXVzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fSU5ORVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9JTk5FUl9SQURJVVNfS0VZLHIsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9PVVRFUl9SQURJVVNfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KHQuX09VVEVSX1JBRElVU19LRVkscixuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YXJ0QW5nbGU6KHRoaXMuX3N0YXJ0QW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbmRBbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9lbmRBbmdsZToodGhpcy5fZW5kQW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXt4OnRoaXMud2lkdGgoKS8yLHk6dGhpcy5oZWlnaHQoKS8yfSxpPXt4OnIueC1uLngseTpyLnktbi55fSxvPXRoaXMuX3NsaWNlSW5kZXhGb3JQb2ludChpKTtyZXR1cm4gbz09bnVsbD9bXTpbdGhpcy5lbnRpdGllcygpW29dXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksaT1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLG89TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKTtyZXR1cm4gbi5kPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdjQuYXJjKCkuaW5uZXJSYWRpdXMoaShhLHMsbCkpLm91dGVyUmFkaXVzKG8oYSxzLGwpKS5zdGFydEFuZ2xlKHIuX3N0YXJ0QW5nbGVzW3NdKS5lbmRBbmdsZShyLl9lbmRBbmdsZXNbc10pKGEscyl9LG59LHQucHJvdG90eXBlLl91cGRhdGVQaWVBbmdsZXM9ZnVuY3Rpb24oKXtpZih0aGlzLnNlY3RvclZhbHVlKCkhPW51bGwmJnRoaXMuZGF0YXNldHMoKS5sZW5ndGghPT0wKXt2YXIgcj1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChuKSxvPXY0LnBpZSgpLnNvcnQobnVsbCkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkudmFsdWUoZnVuY3Rpb24oYSxzKXtyZXR1cm4gcihhLHMsbil9KShpKTt0aGlzLl9zdGFydEFuZ2xlcz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5zdGFydEFuZ2xlfSksdGhpcy5fZW5kQW5nbGVzPW8ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmVuZEFuZ2xlfSl9fSx0LnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLG49dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLGk9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxhPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbCxjLHUsaDtyZXR1cm4gaT49MCYmYT49MD9vPj0wJiZzPj0wPyhsPW8sYz0wLGg9MCx1PWEpOm88MCYmczwwPyhsPTAsYz0tcyxoPTAsdT1pKTpvPj0wJiZzPDA/KGw9byxjPS1zLGg9MCx1PWkpOm88MCYmcz49MCYmKGw9MSxjPTEsaD0xLHU9TWF0aC5tYXgoaSxhKSk6aT49MCYmYTwwP28+PTAmJnM+PTA/KGw9TWF0aC5tYXgobyxzKSxjPTEsaD0xLHU9MSk6bzwwJiZzPDA/KGw9MCxjPTEsaD0tYSx1PWkpOm8+PTAmJnM8MD8obD1vLGM9MSxoPS1hLHU9MSk6bzwwJiZzPj0wJiYobD1zLGM9MSxoPTEsdT1pKTppPDAmJmE+PTA/bz49MCYmcz49MD8obD0xLGM9MCxoPS1pLHU9YSk6bzwwJiZzPDA/KGw9MSxjPU1hdGgubWF4KC1vLC1zKSxoPTEsdT0xKTpvPj0wJiZzPDA/KGw9MSxjPS1zLGg9LWksdT0xKTpvPDAmJnM+PTAmJihsPTEsYz0tbyxoPTEsdT1hKTppPDAmJmE8MCYmKG8+PTAmJnM+PTA/KGw9cyxjPTAsaD0taSx1PTApOm88MCYmczwwPyhsPTAsYz0tbyxoPS1hLHU9MCk6bz49MCYmczwwPyhsPTEsYz0xLGg9TWF0aC5tYXgobywtcyksdT0xKTpvPDAmJnM+PTAmJihsPXMsYz0tbyxoPTEsdT0wKSkse3g6aCt1PT0wPzA6aC8oaCt1KSp0aGlzLndpZHRoKCkseTpsK2M9PTA/MDpsLyhsK2MpKnRoaXMuaGVpZ2h0KCl9fSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyk7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTApcmV0dXJuIHI7dmFyIG49TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKSxpPXRoaXMuZGF0YXNldHMoKVswXSxvPXIuZ2V0KGkpLGE9by5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gdC5faXNWYWxpZERhdGEobihzLGwsaSkpfSk7cmV0dXJuIHIuc2V0KGksYSkscn0sdC5faXNWYWxpZERhdGE9ZnVuY3Rpb24ocil7cmV0dXJuIFZ2Lk1hdGguaXNWYWxpZE51bWJlcihyKSYmcj49MH0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSk7aWYoIXQuX2lzVmFsaWREYXRhKG8ocixuLGkpKSlyZXR1cm57eDpOYU4seTpOYU59O3ZhciBhPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkocixuLGkpLHM9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShyLG4saSksbD0oYStzKS8yLGM9djQucGllKCkuc29ydChudWxsKS52YWx1ZShmdW5jdGlvbihwLGQpe3ZhciBnPW8ocCxkLGkpO3JldHVybiB0Ll9pc1ZhbGlkRGF0YShnKT9nOjB9KS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKShpLmRhdGEoKSksdT1jW25dLnN0YXJ0QW5nbGUsaD1jW25dLmVuZEFuZ2xlLGY9KHUraCkvMjtyZXR1cm57eDpsKk1hdGguc2luKGYpLHk6LWwqTWF0aC5jb3MoZil9fSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3QoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmVnYuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKTt2YXIgaT10aGlzLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcygpLG89dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPU1kLlBsb3QuYXBwbHlEcmF3U3RlcHMoaSxhKTtuLl9zdHJva2VEcmF3ZXJzLmdldChhKS5kcmF3KG8uZ2V0KGEpLHMpfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVyblt7YXR0clRvUHJvamVjdG9yOnIsYW5pbWF0b3I6bmV3IGZVZS5OdWxsfV19LHQucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24ocil7dmFyIG49TWF0aC5zcXJ0KE1hdGgucG93KHIueCwyKStNYXRoLnBvdyhyLnksMikpLGk9TWF0aC5hY29zKC1yLnkvbik7ci54PDAmJihpPU1hdGguUEkqMi1pKTtmb3IodmFyIG8sYT0wO2E8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO2ErKylpZih0aGlzLl9zdGFydEFuZ2xlc1thXTxpJiZ0aGlzLl9lbmRBbmdsZXNbYV0+aSl7bz1hO2JyZWFrfWlmKG8hPT12b2lkIDApe3ZhciBzPXRoaXMuZGF0YXNldHMoKVswXSxsPXMuZGF0YSgpW29dLGM9dGhpcy5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGwsbyxzKSx1PXRoaXMub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihsLG8scyk7aWYobj5jJiZuPHUpcmV0dXJuIG99cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLG89bmV3IFJhdC5TdmdDb250ZXh0KGkubm9kZSgpKSxhPW5ldyBSYXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBSYXQuV3JpdGVyKGEsbyksbD10aGlzLmRhdGFzZXRzKClbMF0sYz10aGlzLl9nZXREYXRhVG9EcmF3KCkuZ2V0KGwpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihkKXt2YXIgZz1jW2RdLF89Zi5zZWN0b3JWYWx1ZSgpLmFjY2Vzc29yKGcsZCxsKTtpZighVnYuTWF0aC5pc1ZhbGlkTnVtYmVyKF8pKXJldHVybiJjb250aW51ZSI7Xz1mLl9sYWJlbEZvcm1hdHRlcihfLGcsZCxsKTt2YXIgeT1hLm1lYXN1cmUoXykseD0oZi5fZW5kQW5nbGVzW2RdK2YuX3N0YXJ0QW5nbGVzW2RdKS8yLGI9Zi5vdXRlclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLm91dGVyUmFkaXVzKCkuc2NhbGUmJihiPWYub3V0ZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShiKSk7dmFyIFM9Zi5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLmlubmVyUmFkaXVzKCkuc2NhbGUmJihTPWYuaW5uZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShTKSk7dmFyIEM9KGIrUykvMixQPU1hdGguc2luKHgpKkMteS53aWR0aC8yLGs9LU1hdGguY29zKHgpKkMteS5oZWlnaHQvMixPPVt7eDpQLHk6a30se3g6UCx5OmsreS5oZWlnaHR9LHt4OlAreS53aWR0aCx5Omt9LHt4OlAreS53aWR0aCx5OmsreS5oZWlnaHR9XSxEPU8uZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIE1hdGguYWJzKHoueCk8PXIud2lkdGgoKS8yJiZNYXRoLmFicyh6LnkpPD1yLmhlaWdodCgpLzJ9KTtpZihEKXt2YXIgQj1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gci5fc2xpY2VJbmRleEZvclBvaW50KHopfSk7RD1CLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiB6PT09ZH0pfXZhciBJPW4uZmlsbChnLGQsbCksTD1Wdi5Db2xvci5jb250cmFzdCgid2hpdGUiLEkpKjEuNjxWdi5Db2xvci5jb250cmFzdCgiYmxhY2siLEkpLFI9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitrKyIpIiksRj1MPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiO1IuY2xhc3NlZChGLCEwKSxSLnN0eWxlKCJ2aXNpYmlsaXR5IixEPyJpbmhlcml0IjoiaGlkZGVuIikscy53cml0ZShfLHkud2lkdGgseS5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LFIubm9kZSgpKX0sZj10aGlzLHA9MDtwPHU7cCsrKWgocCl9LHQuX0lOTkVSX1JBRElVU19LRVk9ImlubmVyLXJhZGl1cyIsdC5fT1VURVJfUkFESVVTX0tFWT0ib3V0ZXItcmFkaXVzIix0Ll9TRUNUT1JfVkFMVUVfS0VZPSJzZWN0b3ItdmFsdWUiLHR9KE1kLlBsb3QpO05hdC5QaWU9dlVlfSk7dmFyIE1LdD1IKE9hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeFVlPShkZSgpLFV0KHBlKSksYlVlPShFcigpLFV0KE1yKSksRGF0PV9sKCksd1VlPUxmKCksU1VlPUJ2KCksTVVlPVV1KCksRVVlPW9CKCksZkI9a3MoKSxPYz1GZSgpLHBCPXJzKCksVFVlPUh2KCksQ1VlPWZ1bmN0aW9uKGUpe3hVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9sYWJlbHNFbmFibGVkPSExLHIuX2xhYmVsPW51bGwsci5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IHdVZS5OdWxsKSxyLmFkZENsYXNzKCJyZWN0YW5nbGUtcGxvdCIpLHIuYXR0cigiZmlsbCIsbmV3IGZCLkNvbG9yKCkucmFuZ2UoKVswXSkscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgTVVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFVWUuUmVjdGFuZ2xlU1ZHRHJhd2VyfSxmdW5jdGlvbihyKXtyZXR1cm4gbmV3IFNVZS5SZWN0YW5nbGVDYW52YXNEcmF3ZXIocil9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLG89blt0Ll9YMl9LRVldLGE9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9blt0Ll9ZMl9LRVldLGw9dGhpcy54KCkuc2NhbGUsYz10aGlzLnkoKS5zY2FsZTtyZXR1cm4gbyE9bnVsbD8obi53aWR0aD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKG8odSxoLGYpLWkodSxoLGYpKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5taW4obyh1LGgsZiksaSh1LGgsZikpfSk6KG4ud2lkdGg9ZnVuY3Rpb24odSxoLGYpe3JldHVybiByLl9yZWN0YW5nbGVXaWR0aChsKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaSh1LGgsZiktLjUqbi53aWR0aCh1LGgsZil9KSxzIT1udWxsPyhuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKHModSxoLGYpLWEodSxoLGYpKX0sbi55PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5tYXgocyh1LGgsZiksYSh1LGgsZikpLW4uaGVpZ2h0KHUsaCxmKX0pOihuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIHIuX3JlY3RhbmdsZVdpZHRoKGMpfSxuLnk9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBhKHUsaCxmKS0uNSpuLmhlaWdodCh1LGgsZil9KSxkZWxldGUgblt0Ll9YMl9LRVldLGRlbGV0ZSBuW3QuX1kyX0tFWV0sbn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoInJlY3RhbmdsZXMiKX1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpO2lmKG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLG4hPW51bGwpe3ZhciBvPXRoaXMueDIoKSxhPW8mJm8uYWNjZXNzb3I7YSE9bnVsbCYmdGhpcy5fYmluZFByb3BlcnR5KHQuX1gyX0tFWSxhLG4sby5wb3N0U2NhbGUpfXJldHVybiBuIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkmJm4uaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKSx0aGlzfSx0LnByb3RvdHlwZS54Mj1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1gyX0tFWSk7dmFyIGk9dGhpcy54KCksbz1pJiZpLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLHIsbyxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbixpKSxuIT1udWxsKXt2YXIgbz10aGlzLnkyKCksYT1vJiZvLmFjY2Vzc29yO2EhPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMl9LRVksYSxuLG8ucG9zdFNjYWxlKX1yZXR1cm4gbiBpbnN0YW5jZW9mIGZCLkNhdGVnb3J5JiZuLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sdC5wcm90b3R5cGUueTI9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9ZMl9LRVkpO3ZhciBpPXRoaXMueSgpLG89aSYmaS5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxyLG8sbiksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0dW0sYT1pLmluZGV4LHM9aS5kYXRhc2V0LGw9bi54KG8sYSxzKSxjPW4ueShvLGEscyksdT1uLndpZHRoKG8sYSxzKSxoPW4uaGVpZ2h0KG8sYSxzKTtyZXR1cm4gbDw9ci54JiZyLng8PWwrdSYmYzw9ci55JiZyLnk8PWMraH0pfSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0O3JldHVybiB0aGlzLl9lbnRpdHlCQm94KG4saSxvLHRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpKX0sdC5wcm90b3R5cGUuX2VudGl0eUJCb3g9ZnVuY3Rpb24ocixuLGksbyl7cmV0dXJue3g6by54KHIsbixpKSx5Om8ueShyLG4saSksd2lkdGg6by53aWR0aChyLG4saSksaGVpZ2h0Om8uaGVpZ2h0KHIsbixpKX19LHQucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsOih0aGlzLl9sYWJlbD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMueDIoKSE9bnVsbCYmKHIueDI9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSksdGhpcy55MigpIT1udWxsJiYoci55Mj1wQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT1vLngocixuLGkpLHM9by55KHIsbixpKSxsPW8ud2lkdGgocixuLGkpLGM9by5oZWlnaHQocixuLGkpLHU9YStsLzIsaD1zK2MvMjtyZXR1cm57eDp1LHk6aH19LHQucHJvdG90eXBlLl9yZWN0YW5nbGVXaWR0aD1mdW5jdGlvbihyKXtpZihyIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkpcmV0dXJuIHIucmFuZ2VCYW5kKCk7dmFyIG49cj09PXRoaXMueCgpLnNjYWxlP3RoaXMueCgpLmFjY2Vzc29yOnRoaXMueSgpLmFjY2Vzc29yLGk9YlVlLnNldChPYy5BcnJheS5mbGF0dGVuKHRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGF0YSgpLm1hcChmdW5jdGlvbih1LGgpe3JldHVybiBuKHUsaCxjKS52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybitjfSksbz1PYy5NYXRoLm1pbihpLDApLGE9T2MuTWF0aC5tYXgoaSwwKSxzPXIuc2NhbGUobyksbD1yLnNjYWxlKGEpO3JldHVybihsLXMpL01hdGguYWJzKGEtbyl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IE9jLk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgbD1PYy5NYXRoLmlzVmFsaWROdW1iZXIobi54KGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLnkoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4ud2lkdGgoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4uaGVpZ2h0KGEscyxpKSk7cmV0dXJuIGw/YTpudWxsfSk7ci5zZXQoaSxvKX0pLHJ9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZ0aGlzLmxhYmVsKCkhPW51bGwmJk9jLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpLG8pe3JldHVybiByLl9kcmF3TGFiZWwobixpLG8pfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGkpe2Zvcih2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLHM9bmV3IERhdC5TdmdDb250ZXh0KGEubm9kZSgpKSxsPW5ldyBEYXQuQ2FjaGVNZWFzdXJlcihzKSxjPW5ldyBEYXQuV3JpdGVyKGwscyksdT10aGlzLngoKS5zY2FsZS5yYW5nZSgpLGg9dGhpcy55KCkuc2NhbGUucmFuZ2UoKSxmPU1hdGgubWluLmFwcGx5KG51bGwsdSkscD1NYXRoLm1heC5hcHBseShudWxsLHUpLGQ9TWF0aC5taW4uYXBwbHkobnVsbCxoKSxnPU1hdGgubWF4LmFwcGx5KG51bGwsaCksXz1yLmdldChuKSx5PV8ubGVuZ3RoLHg9MDt4PHk7eCsrKXt2YXIgYj1fW3hdO2lmKGIhPW51bGwpe3ZhciBTPSIiK3RoaXMubGFiZWwoKShiLHgsbiksQz1sLm1lYXN1cmUoUyksUD1vLngoYix4LG4pLGs9by55KGIseCxuKSxPPW8ud2lkdGgoYix4LG4pLEQ9by5oZWlnaHQoYix4LG4pO2lmKEMuaGVpZ2h0PD1EJiZDLndpZHRoPD1PKXt2YXIgQj0oTy1DLndpZHRoKS8yLEk9KEQtQy5oZWlnaHQpLzI7UCs9QixrKz1JO3ZhciBMPXttaW46UCxtYXg6UCtDLndpZHRofSxSPXttaW46ayxtYXg6aytDLmhlaWdodH07aWYoTC5taW48Znx8TC5tYXg+cHx8Ui5taW48ZHx8Ui5tYXg+Z3x8dGhpcy5fb3ZlcmxheUxhYmVsKEwsUix4LGkscikpY29udGludWU7dmFyIEY9by5maWxsKGIseCxuKSx6PU9jLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsRikqMS42PE9jLkNvbG9yLmNvbnRyYXN0KCJibGFjayIsRiksVT1hLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1ArIiwiK2srIikiKSxXPXo/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCI7VS5jbGFzc2VkKFcsITApLGMud3JpdGUoUyxDLndpZHRoLEMuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxVLm5vZGUoKSl9fX19LHQucHJvdG90eXBlLl9vdmVybGF5TGFiZWw9ZnVuY3Rpb24ocixuLGksbyxhKXtmb3IodmFyIHM9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbD10aGlzLmRhdGFzZXRzKCksYz1vO2M8bC5sZW5ndGg7YysrKWZvcih2YXIgdT1sW2NdLGg9YS5nZXQodSksZj1oLmxlbmd0aCxwPWM9PT1vP2krMTowO3A8ZjtwKyspaWYoT2MuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCQm94KGhbcF0scCx1LHMpKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5fWDJfS0VZPSJ4MiIsdC5fWTJfS0VZPSJ5MiIsdH0oVFVlLlhZUGxvdCk7T2F0LlJlY3RhbmdsZT1DVWV9KTt2YXIgVEt0PUgoSGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBVWU9KGRlKCksVXQocGUpKSx6YXQ9X2woKSxQVWU9QnUoKSxJVWU9WEYoKSxMVWU9VXUoKSxFS3Q9dmF0KCksa1VlPUxmKCksUlVlPUJ2KCksTlVlPWtzKCksRmF0PUZlKCksQmF0PUlTKCksYmw9cnMoKSxEVWU9SHYoKSxPVWU9ZnVuY3Rpb24oZSl7QVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fbGFiZWxGb3JtYXR0ZXI9UFVlLmlkZW50aXR5KCksci5fbGFiZWxzRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJzY2F0dGVyLXBsb3QiKTt2YXIgbj1uZXcga1VlLkVhc2luZztuLnN0YXJ0RGVsYXkoNSksbi5zdGVwRHVyYXRpb24oMjUwKSxuLm1heFRvdGFsRHVyYXRpb24oYmwuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksci5hbmltYXRvcihCYXQuQW5pbWF0b3IuTUFJTixuKSxyLmF0dHIoIm9wYWNpdHkiLC42KSxyLmF0dHIoImZpbGwiLG5ldyBOVWUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLnNpemUoNik7dmFyIGk9SVVlLmNpcmNsZSgpO3JldHVybiByLnN5bWJvbChmdW5jdGlvbigpe3JldHVybiBpfSksci5fbGFiZWxDb25maWc9bmV3IEZhdC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWUucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7dmFyIGE9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpKG8uZGF0dW0sby5pbmRleCxvLmRhdGFzZXQpO3JldHVybiBvLmRpYW1ldGVyPWEsb30pfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBMVWUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVLdC5TeW1ib2xTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgUlVlLkNhbnZhc0RyYXdlcihpLEVLdC5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXAocixmdW5jdGlvbigpe3JldHVybiBibC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLnN5bWJvbCgpKX0sZnVuY3Rpb24oKXtyZXR1cm4gYmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpfSkpfSl9LHQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9TSVpFX0tFWSxyLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQodC5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6cn0pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKTtuLmQ9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpKG8sYSxzKSgwKShudWxsKX0sci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihCYXQuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEJhdC5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHIueD1uLHIueT1pLHIudHJhbnNmb3JtPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4idHJhbnNsYXRlKCIrbihvLGEscykrIiwiK2kobyxhLHMpKyIpIn0sci5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLHJ9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgcj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKSxuPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3JldHVybiByKGksbyxhKShuKGksbyxhKSkobnVsbCl9fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3JldHVybnt4OnIucG9zaXRpb24ueC1yLmRpYW1ldGVyLzIseTpyLnBvc2l0aW9uLnktci5kaWFtZXRlci8yLHdpZHRoOnIuZGlhbWV0ZXIsaGVpZ2h0OnIuZGlhbWV0ZXJ9fSx0LnByb3RvdHlwZS5fZW50aXR5VmlzaWJsZU9uUGxvdD1mdW5jdGlvbihyLG4pe3ZhciBpPXttaW46bi50b3BMZWZ0LngsbWF4Om4uYm90dG9tUmlnaHQueH0sbz17bWluOm4udG9wTGVmdC55LG1heDpuLmJvdHRvbVJpZ2h0Lnl9LGE9dGhpcy5fZW50aXR5Qm91bmRzKHIpO3JldHVybiBGYXQuRE9NLmludGVyc2VjdHNCQm94KGksbyxhKX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSk7cmV0dXJuIHRoaXMuZW50aXRpZXMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIHM9YS5kYXR1bSxsPWEuaW5kZXgsYz1hLmRhdGFzZXQsdT1uKHMsbCxjKSxoPWkocyxsLGMpLGY9byhzLGwsYyk7cmV0dXJuIHUtZi8yPD1yLngmJnIueDw9dStmLzImJmgtZi8yPD1yLnkmJnIueTw9aCtmLzJ9KX0sdC5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsciksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fTEFCRUxfQVJFQV9DTEFTUywhMCksbz1uZXcgemF0LlN2Z0NvbnRleHQoaS5ub2RlKCkpLGE9bmV3IHphdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IHphdC5Xcml0ZXIoYSxvKTtyZXR1cm4gdGhpcy5fbGFiZWxDb25maWcuc2V0KHIse2xhYmVsQXJlYTppLG1lYXN1cmVyOmEsd3JpdGVyOnN9KSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xhYmVsQ29uZmlnLmdldChyKTtuIT1udWxsJiYobi5sYWJlbEFyZWEucmVtb3ZlKCksdGhpcy5fbGFiZWxDb25maWcuZGVsZXRlKHIpKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQoaSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmRmF0LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2Zvcih2YXIgYT1uLmdldChvKSxzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1hW2xdO2MhPW51bGwmJnIuX2RyYXdMYWJlbChjLGwsbyxpKX19KX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbihyLG4saSxvKXtpZihyLmxhYmVsIT1udWxsKXt2YXIgYT10aGlzLl9sYWJlbENvbmZpZy5nZXQoaSkscz1hLmxhYmVsQXJlYSxsPWEubWVhc3VyZXIsYz1hLndyaXRlcix1PXt4Om8ueChyLG4saSkseTpvLnkocixuLGkpfSxoPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKSxmPWgocixuLGkpLHA9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoci5sYWJlbCxyLG4saSksZD1sLm1lYXN1cmUocCksZz10aGlzLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXModSxmLGQpLF89Zy5jb250YWluZXJEaW1lbnNpb25zLHk9Zy5sYWJlbENvbnRhaW5lck9yaWdpbix4PWcubGFiZWxPcmlnaW4sYj1nLmFsaWdubWVudCxTPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMseSx4LGQpLEM9e3hBbGlnbjpiLngseUFsaWduOmIueX07Yy53cml0ZShwLF8ud2lkdGgsXy5oZWlnaHQsQyxTLm5vZGUoKSl9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1uPGkuaGVpZ2h0P24vMit0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU6MDtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnIueC1pLndpZHRoLzIseTpyLnktaS5oZWlnaHQvMitvfSxsYWJlbE9yaWdpbjp7eDpyLngseTpyLnl9LGFsaWdubWVudDp7eDoiY2VudGVyIix5OiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT1yLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ueCsiLCAiK24ueSsiKSIpO3JldHVybiBhLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApLGF9LHQuX1NJWkVfS0VZPSJzaXplIix0Ll9TWU1CT0xfS0VZPSJzeW1ib2wiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9InNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIix0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU9MTUsdH0oRFVlLlhZUGxvdCk7SGF0LlNjYXR0ZXI9T1VlfSk7dmFyIENLdD1IKFZhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgelVlPShkZSgpLFV0KHBlKSksRlVlPUxmKCksQlVlPVV1KCksSFVlPV9hdCgpLFZVZT1rcygpLFVVZT1BRigpLExTPXJzKCkscVVlPUh2KCksR1VlPWZ1bmN0aW9uKGUpe3pVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJzZWdtZW50LXBsb3QiKSxyLmF0dHIoInN0cm9rZSIsbmV3IFZVZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgQlVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIVWUuU2VnbWVudFNWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gVVVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFNlZ21lbnQgUGxvdCEiKSxudWxsfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBGVWUuTnVsbH1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihuPT1udWxsKWUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpO2Vsc2V7ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKTt2YXIgaT10aGlzLngyKCksbz1pJiZpLmFjY2Vzc29yO28hPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVksbyxuKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueDI9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWDJfS0VZKTt2YXIgbj10aGlzLngoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVkscixpKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbCllLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTtlbHNle2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbik7dmFyIGk9dGhpcy55MigpLG89aSYmaS5hY2Nlc3NvcjtvIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLG8sbil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1kyX0tFWSk7dmFyIG49dGhpcy55KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLHIsaSksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLngxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyLngyPXRoaXMueDIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSxyLnkxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxyLnkyPXRoaXMueTIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdChyKTtyZXR1cm4gbiE9bnVsbD9bbl06W119LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaSxvO2lmKG49PW51bGwpe3ZhciBhPXI7aT17bWluOmEudG9wTGVmdC54LG1heDphLmJvdHRvbVJpZ2h0Lnh9LG89e21pbjphLnRvcExlZnQueSxtYXg6YS5ib3R0b21SaWdodC55fX1lbHNlIGk9cixvPW47cmV0dXJuIHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKGksbyl9LHQucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1bXSxvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9dGhpcy5lbnRpdGllcygpLHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWFbbF07dGhpcy5fbGluZUludGVyc2VjdHNCb3goYyxyLG4sbykmJmkucHVzaChjKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMscz1vLngxKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpLGw9by54MihyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KSxjPW8ueTEoci5kYXR1bSxyLmluZGV4LHIuZGF0YXNldCksdT1vLnkyKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpO2lmKG4ubWluPD1zJiZzPD1uLm1heCYmaS5taW48PWMmJmM8PWkubWF4fHxuLm1pbjw9bCYmbDw9bi5tYXgmJmkubWluPD11JiZ1PD1pLm1heClyZXR1cm4hMDt2YXIgaD17eDpzLHk6Y30sZj17eDpsLHk6dX0scD1be3g6bi5taW4seTppLm1pbn0se3g6bi5taW4seTppLm1heH0se3g6bi5tYXgseTppLm1heH0se3g6bi5tYXgseTppLm1pbn1dLGQ9cC5maWx0ZXIoZnVuY3Rpb24oZyxfKXtyZXR1cm4gXyE9PTA/YS5fbGluZUludGVyc2VjdHNTZWdtZW50KGgsZixnLHBbXy0xXSkmJmEuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChnLHBbXy0xXSxoLGYpOiExfSk7cmV0dXJuIGQubGVuZ3RoPjB9LHQucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQ9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9ZnVuY3Rpb24ocyxsLGMpe3JldHVybihsLngtcy54KSooYy55LWwueSktKGwueS1zLnkpKihjLngtbC54KX07cmV0dXJuIGEocixuLGkpKmEocixuLG8pPDB9LHQuX1gyX0tFWT0ieDIiLHQuX1kyX0tFWT0ieTIiLHR9KHFVZS5YWVBsb3QpO1ZhdC5TZWdtZW50PUdVZX0pO3ZhciBJS3Q9SChVYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdVZT0oZGUoKSxVdChwZSkpLEFLdD0oRXIoKSxVdChNcikpLFlVZT1MZigpLFBLdD1DUygpLHQwPUZlKCksalVlPVRhdCgpLFhVZT1ycygpLCRVZT1mdW5jdGlvbihlKXtXVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhY2tpbmdSZXN1bHQ9UEt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gci54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHIueSgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiByLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihuLGksbyxhKXtyZXR1cm4gdDAuU3RhY2tpbmcuc3RhY2sobixpLG8sYSl9KSxyLl9zdGFja2VkRXh0ZW50PVBLdC5tZW1UaHVuayhyLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiByLngoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gci5fZmlsdGVyRm9yUHJvcGVydHkoInkiKX0sZnVuY3Rpb24obixpLG8pe3JldHVybiB0MC5TdGFja2luZy5zdGFja2VkRXh0ZW50KG4saSxvKX0pLHIuX2Jhc2VsaW5lVmFsdWU9MCxyLl9zdGFja2luZ09yZGVyPSJib3R0b211cCIsci5hZGRDbGFzcygic3RhY2tlZC1hcmVhLXBsb3QiKSxyLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bci5fYmFzZWxpbmVWYWx1ZV19LHIuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6cj8odDAuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgY3JvcHBlZCByZW5kZXJpbmcuIiksdGhpcyk6ZS5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBZVWUuTnVsbH0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuKSx0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0aGlzKX0sdC5wcm90b3R5cGUueU9mZnNldD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7aWYoaSE9bnVsbCl7dmFyIG89aS5nZXQocik7aWYobyE9bnVsbCl7dmFyIGE9by5nZXQoU3RyaW5nKG4pKTtpZihhIT1udWxsKXJldHVybiBhLm9mZnNldH19fSx0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YWNraW5nT3JkZXI6KHRoaXMuX3N0YWNraW5nT3JkZXI9cix0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkLmNhbGwodGhpcyk6KHQwLldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGRvd25zYW1wbGluZyIpLHRoaXMpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCkuc2NhbGUuc2NhbGUodGhpcy5fYmFzZWxpbmVWYWx1ZSksbj17eDE6MCx5MTpyLHgyOnRoaXMud2lkdGgoKSx5MjpyfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLG4pfSx0LnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCksbj1yJiZyLnNjYWxlO24hPW51bGwmJihuLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSxuLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgcj10aGlzLmRhdGFzZXRzKCksbj10aGlzLngoKS5hY2Nlc3NvcixpPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBBS3Quc2V0KGEuZGF0YSgpLm1hcChmdW5jdGlvbihzLGwpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobihzLGwsYSkpfSkpLnZhbHVlcygpfSksbz10Ll9kb21haW5LZXlzKHIsbik7aS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PW8ubGVuZ3RofSkmJnQwLldpbmRvdy53YXJuKCJ0aGUgZG9tYWlucyBhY3Jvc3MgdGhlIGRhdGFzZXRzIGFyZSBub3QgdGhlIHNhbWUuIFBsb3QgbWF5IHByb2R1Y2UgdW5pbnRlbmRlZCBiZWhhdmlvci4iKX19LHQuX2RvbWFpbktleXM9ZnVuY3Rpb24ocixuKXt2YXIgaT1BS3Quc2V0KCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvKXtmb3IodmFyIGE9by5kYXRhKCkscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtpLmFkZChuKGMsbCxvKSl9fSksaS52YWx1ZXMoKX0sdC5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPVhVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT10aGlzLnkoKS5hY2Nlc3NvcixvPXRoaXMueCgpLmFjY2Vzc29yLGE9ZnVuY3Rpb24odSxoLGYpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobyh1LGgsZikpfSxzPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksbD1mdW5jdGlvbih1LGgsZil7dmFyIHA9K2kodSxoLGYpLGQ9cy5nZXQoZikuZ2V0KGEodSxoLGYpKS5vZmZzZXQ7cmV0dXJuIHIueSgpLnNjYWxlLnNjYWxlKHArZCl9LGM9ZnVuY3Rpb24odSxoLGYpe3ZhciBwPXMuZ2V0KGYpLmdldChhKHUsaCxmKSkub2Zmc2V0O3JldHVybiByLnkoKS5zY2FsZS5zY2FsZShwKX07cmV0dXJuW24sbCxjXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89ZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQuY2FsbCh0aGlzLHIsbixpKSxhPXRoaXMueCgpLmFjY2Vzc29yKHIsbixpKSxzPXRoaXMueSgpLmFjY2Vzc29yKHIsbixpKSxsPXRoaXMueSgpLnNjYWxlLnNjYWxlKCtzK3RoaXMuX3N0YWNraW5nUmVzdWx0KCkuZ2V0KGkpLmdldCh0MC5TdGFja2luZy5ub3JtYWxpemVLZXkoYSkpLm9mZnNldCk7cmV0dXJue3g6by54LHk6bH19LHR9KGpVZS5BcmVhKTtVYXQuU3RhY2tlZEFyZWE9JFVlfSk7dmFyIGtLdD1IKFdhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS1VlPShkZSgpLFV0KHBlKSkscWF0PV9sKCksWlVlPUJ1KCksTEt0PUNTKCksZEI9RmUoKSxHYXQ9eTQoKSxKVWU9cnMoKSxRVWU9ZnVuY3Rpb24oZSl7S1VlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2V4dHJlbWFGb3JtYXR0ZXI9WlVlLmlkZW50aXR5KCksbi5fc3RhY2tpbmdSZXN1bHQ9TEt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihpLG8sYSxzKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2soaSxvLGEscyl9KSxuLl9zdGFja2VkRXh0ZW50PUxLdC5tZW1UaHVuayhuLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiBuLnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KG4uX2lzVmVydGljYWw/InkiOiJ4Iil9LGZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChpLG8sYSl9KSxuLmFkZENsYXNzKCJzdGFja2VkLWJhci1wbG90Iiksbi5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiLG59cmV0dXJuIHQucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc3RhY2tpbmdPcmRlcjoodGhpcy5fc3RhY2tpbmdPcmRlcj1yLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5leHRyZW1hRm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9leHRyZW1hRm9ybWF0dGVyOih0aGlzLl9leHRyZW1hRm9ybWF0dGVyPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChHYXQuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgcj1uZXcgcWF0LlN2Z0NvbnRleHQodGhpcy5fbGFiZWxBcmVhLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IHFhdC5DYWNoZU1lYXN1cmVyKHIpLHRoaXMuX3dyaXRlcj1uZXcgcWF0LldyaXRlcih0aGlzLl9tZWFzdXJlcixyKX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9kcmF3TGFiZWxzLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBuPSt0aGlzLmJhc2VsaW5lVmFsdWUoKSxpPXRoaXMucG9zaXRpb24oKS5zY2FsZSxvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT1kQi5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxzPWEubWF4aW11bUV4dGVudHMsbD1hLm1pbmltdW1FeHRlbnRzLGM9W10sdT1mdW5jdGlvbihmLHAsZCl7dmFyIGc9cC50b3BMZWZ0LF89Zy54LHk9Zy55LHg9cC5ib3R0b21SaWdodC54LXAudG9wTGVmdC54LGI9cC5ib3R0b21SaWdodC55LXAudG9wTGVmdC55LFM9ci5faXNWZXJ0aWNhbD94PmQ6Yj5kO2lmKCFTKXt2YXIgQz1yLl9sYWJlbEFyZWEuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiLCAiK3krIikiKTtDLmNsYXNzZWQoInN0YWNrZWQtYmFyLWxhYmVsIiwhMCk7dmFyIFA9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9O3IuX3dyaXRlci53cml0ZShmLHgsYixQLEMubm9kZSgpKX1yZXR1cm4gU30saD1mdW5jdGlvbihmLHApe3ZhciBkPXIuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCksZz1yLndpZHRoKCksXz1yLmhlaWdodCgpO2YuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LmV4dGVudCE9PW4pe3ZhciB4PXIuZXh0cmVtYUZvcm1hdHRlcigpKHkuZXh0ZW50KSxiPXIuX21lYXN1cmVyLm1lYXN1cmUoeCksUz15LnN0YWNrZWREYXR1bSxDPVMub3JpZ2luYWxEYXR1bSxQPVMub3JpZ2luYWxJbmRleCxrPVMub3JpZ2luYWxEYXRhc2V0O2lmKCFyLl9pc0RhdHVtT25TY3JlZW4oZCxnLF8sQyxQLGspKXJldHVybjt2YXIgTz1KVWUuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci5hdHRyKEdhdC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSkoQyxQLGspLEQ9by5zY2FsZSh5LmV4dGVudCksQj1yLl9nZXRQb3NpdGlvbkF0dHIoaS5zY2FsZSh5LmF4aXNWYWx1ZSksTykrTy8yLEk9ci5faXNWZXJ0aWNhbD97eDpCLHk6RH06e3g6RCx5OkJ9LEw9cChJLGIsTyksUj11KHgse3RvcExlZnQ6TCxib3R0b21SaWdodDp7eDpMLngrYi53aWR0aCx5OkwueStiLmhlaWdodH19LE8pO2MucHVzaChSKX19KX07aChzLGZ1bmN0aW9uKGYscCxkKXt2YXIgZz1yLl9pc1ZlcnRpY2FsP3Aud2lkdGg6cC5oZWlnaHQsXz1yLl9pc1ZlcnRpY2FsP3AuaGVpZ2h0OnAud2lkdGg7cmV0dXJue3g6ci5faXNWZXJ0aWNhbD9mLngtZy8yOmYueCt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5OnIuX2lzVmVydGljYWw/Zi55LV86Zi55LWcvMn19KSxoKGwsZnVuY3Rpb24oZixwLGQpe3ZhciBnPXIuX2lzVmVydGljYWw/cC53aWR0aDpwLmhlaWdodCxfPXIuX2lzVmVydGljYWw/cC5oZWlnaHQ6cC53aWR0aDtyZXR1cm57eDpyLl9pc1ZlcnRpY2FsP2YueC1nLzI6Zi54LV8seTpyLl9pc1ZlcnRpY2FsP2YueSt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUjpmLnktZy8yfX0pLGMuc29tZShmdW5jdGlvbihmKXtyZXR1cm4gZn0pJiZ0aGlzLl9sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IixvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLHM9dGhpcy5wb3NpdGlvbigpLmFjY2Vzc29yLGw9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBkQi5TdGFja2luZy5ub3JtYWxpemVLZXkocyhkLGcsXykpfSxjPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIG8uc2NhbGUoYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxoPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gby5zY2FsZSgrYShkLGcsXykrYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxmPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gTWF0aC5hYnMoaChkLGcsXyktdShkLGcsXykpfTtuW3RoaXMuX2lzVmVydGljYWw/ImhlaWdodCI6IndpZHRoIl09Zjt2YXIgcD1mdW5jdGlvbihkLGcsXyl7cmV0dXJuK2EoZCxnLF8pPDA/dShkLGcsXyk6aChkLGcsXyl9O3JldHVybiBuW2ldPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5faXNWZXJ0aWNhbD9wKGQsZyxfKTpwKGQsZyxfKS1mKGQsZyxfKX0sbn0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IjtyZXR1cm4gcj09PW4/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06ZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NSx0fShHYXQuQmFyKTtXYXQuU3RhY2tlZEJhcj1RVWV9KTt2YXIgUkt0PUgoWWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0cWU9KGRlKCksVXQocGUpKSxlcWU9RmUoKSxycWU9eTQoKSxucWU9cnMoKSxpcWU9ZnVuY3Rpb24oZSl7dHFlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2Nvbm5lY3RvcnNFbmFibGVkPSExLHIuYWRkQ2xhc3MoIndhdGVyZmFsbC1wbG90Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ6KHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkPXIsdGhpcyl9LHQucHJvdG90eXBlLnRvdGFsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1RPVEFMX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9UT1RBTF9LRVkscixudWxsKSx0aGlzKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuX2Nvbm5lY3RvckFyZWEuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQmJmVxZS5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3Q29ubmVjdG9ycygpfSxyKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKTtyZXR1cm4gdGhpcy5fY29ubmVjdG9yQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fQ09OTkVDVE9SX0FSRUFfQ0xBU1MsITApLG59LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9leHRlbnRdOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMueSgpLnNjYWxlLG89bnFlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMudG90YWwoKSksYT10aGlzLmF0dHIoInkiKTthPT1udWxsJiYobi55PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1yLnkoKS5hY2Nlc3NvcihsLGMsdSksZj1vKGwsYyx1KTtpZihmKXJldHVybiBNYXRoLm1pbihpLnNjYWxlKGgpLGkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gaDwwP2kuc2NhbGUocC1oKTppLnNjYWxlKHApO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBwPmQ/aS5zY2FsZShwKTppLnNjYWxlKGQpfSk7dmFyIHM9dGhpcy5hdHRyKCJoZWlnaHQiKTtyZXR1cm4gcz09bnVsbCYmKG4uaGVpZ2h0PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1vKGwsYyx1KSxmPXIueSgpLmFjY2Vzc29yKGwsYyx1KTtpZihoKXJldHVybiBNYXRoLmFicyhpLnNjYWxlKGYpLWkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShwKS1pLnNjYWxlKHAtZikpO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBNYXRoLmFicyhpLnNjYWxlKHApLWkuc2NhbGUoZCkpfSksbi5jbGFzcz1mdW5jdGlvbihsLGMsdSl7dmFyIGg9IiI7ci5hdHRyKCJjbGFzcyIpIT1udWxsJiYoaD1yLmF0dHIoImNsYXNzIikuYWNjZXNzb3IobCxjLHUpKyIgIik7dmFyIGY9byhsLGMsdSk7aWYoZilyZXR1cm4gaCt0Ll9CQVJfVE9UQUxfQ0xBU1M7dmFyIHA9ci55KCkuYWNjZXNzb3IobCxjLHUpO3JldHVybiBoKyhwPjA/dC5fQkFSX0dST1dUSF9DTEFTUzp0Ll9CQVJfREVDTElORV9DTEFTUyl9LG59LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3VidG90YWxzKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQ9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPU51bWJlci5NQVhfVkFMVUUsaT1OdW1iZXIuTUlOX1ZBTFVFLG89MCxhPSExLHM9ci5kYXRhKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXSxoPXRoaXMueSgpLmFjY2Vzc29yKHUsYyxyKSxmPXRoaXMudG90YWwoKS5hY2Nlc3Nvcih1LGMscik7aWYoKCFmfHxjPT09MCkmJihvKz1oKSx0aGlzLl9zdWJ0b3RhbHMucHVzaChvKSxvPG4mJihuPW8pLG8+aSYmKGk9byksZiYmKGg8biYmKG49aCksaD5pJiYoaT1oKSksIWEmJmYpe2Zvcih2YXIgcD1oLW8sZD0wO2Q8dGhpcy5fc3VidG90YWxzLmxlbmd0aDtkKyspdGhpcy5fc3VidG90YWxzW2RdKz1wO2E9ITAsbys9cCxuKz1wLGkrPXB9fXRoaXMuX2V4dGVudD1bbixpXX0sdC5wcm90b3R5cGUuX2RyYXdDb25uZWN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9MTtpPG4uZGF0YSgpLmxlbmd0aDtpKyspe3ZhciBvPWktMSxhPW4uZGF0YSgpW2ldLHM9bi5kYXRhKClbb10sbD1yLngocyxvLG4pLGM9ci54KGEsaSxuKStyLndpZHRoKGEsaSxuKSx1PXIueShhLGksbik7KHRoaXMuX3N1YnRvdGFsc1tpXT4wJiZ0aGlzLl9zdWJ0b3RhbHNbaV0+dGhpcy5fc3VidG90YWxzW29dfHx0aGlzLl9zdWJ0b3RhbHNbaV08MCYmdGhpcy5fc3VidG90YWxzW2ldPj10aGlzLl9zdWJ0b3RhbHNbb10pJiYodT1yLnkoYSxpLG4pK3IuaGVpZ2h0KGEsaSxuKSksdGhpcy5fY29ubmVjdG9yQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuX0NPTk5FQ1RPUl9DTEFTUywhMCkuYXR0cigieDEiLGwpLmF0dHIoIngyIixjKS5hdHRyKCJ5MSIsdSkuYXR0cigieTIiLHUpfX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN1YnRvdGFscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZGF0YXNldHMoKTtpZihyLmxlbmd0aD4wKXt2YXIgbj1yW3IubGVuZ3RoLTFdO3RoaXMuX3N1YnRvdGFscz1uZXcgQXJyYXksdGhpcy5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50KG4pfX0sdC5fQkFSX0RFQ0xJTkVfQ0xBU1M9IndhdGVyZmFsbC1kZWNsaW5lIix0Ll9CQVJfR1JPV1RIX0NMQVNTPSJ3YXRlcmZhbGwtZ3Jvd3RoIix0Ll9CQVJfVE9UQUxfQ0xBU1M9IndhdGVyZmFsbC10b3RhbCIsdC5fQ09OTkVDVE9SX0NMQVNTPSJjb25uZWN0b3IiLHQuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTPSJjb25uZWN0b3ItYXJlYSIsdC5fVE9UQUxfS0VZPSJ0b3RhbCIsdH0ocnFlLkJhcik7WWF0LldhdGVyZmFsbD1pcWV9KTt2YXIgSVM9SChPcz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT3MsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6Yz0oZGUoKSxVdChwZSkpO3pjLl9fZXhwb3J0U3RhcihUYXQoKSxPcyk7emMuX19leHBvcnRTdGFyKHk0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihHb3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHdLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoU2F0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihTS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKE1LdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoVEt0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihDS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKElLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoa0t0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihSS3QoKSxPcyl9KTt2YXIgTkt0PUgoamF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2phdC52ZXJzaW9uPSIzLjkuMCJ9KTt2YXIgd2w9SChsbj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGYz0oZGUoKSxVdChwZSkpOyRqdCgpO3ZhciBvcWU9TGYoKTtsbi5BbmltYXRvcnM9b3FlO3ZhciBhcWU9ZiR0KCk7bG4uQXhlcz1hcWU7dmFyIHNxZT1Qb3QoKTtsbi5Db21wb25lbnRzPXNxZTt2YXIgbHFlPSRBKCk7bG4uQ29uZmlncz1scWU7dmFyIGNxZT1CdSgpO2xuLkZvcm1hdHRlcnM9Y3FlO3ZhciB1cWU9SUYoKTtsbi5SZW5kZXJDb250cm9sbGVyPXVxZTt2YXIgaHFlPUhpdCgpO2xuLlJlbmRlclBvbGljaWVzPWhxZTt2YXIgZnFlPVhGKCk7bG4uU3ltYm9sRmFjdG9yaWVzPWZxZTt2YXIgcHFlPU52KCk7bG4uRGlzcGF0Y2hlcnM9cHFlO3ZhciBkcWU9QnYoKTtsbi5EcmF3ZXJzPWRxZTt2YXIgbXFlPWw0KCk7bG4uSW50ZXJhY3Rpb25zPW1xZTt2YXIgZ3FlPUlTKCk7bG4uUGxvdHM9Z3FlO3ZhciBfcWU9a3MoKTtsbi5TY2FsZXM9X3FlO3ZhciB5cWU9RmUoKTtsbi5VdGlscz15cWU7RmMuX19leHBvcnRTdGFyKHQ0KCksbG4pO3ZhciB2cWU9SEYoKTtsbi5UaW1lSW50ZXJ2YWw9dnFlLlRpbWVJbnRlcnZhbDtGYy5fX2V4cG9ydFN0YXIoa2MoKSxsbik7RmMuX19leHBvcnRTdGFyKFdGKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihZb3QoKSxsbik7dmFyIHhxZT1OS3QoKTtsbi52ZXJzaW9uPXhxZS52ZXJzaW9uO0ZjLl9fZXhwb3J0U3RhcihvNCgpLGxuKTtGYy5fX2V4cG9ydFN0YXIoVXUoKSxsbik7RmMuX19leHBvcnRTdGFyKER2KCksbG4pO0ZjLl9fZXhwb3J0U3Rhcih3b3QoKSxsbik7RmMuX19leHBvcnRTdGFyKEh2KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihycygpLGxuKTtGYy5fX2V4cG9ydFN0YXIodmQoKSxsbik7RmMuX19leHBvcnRTdGFyKEx2KCksbG4pfSk7dmFyIFFLdD1IKChzWG4sSkt0KT0+e2Z1bmN0aW9uIEJxZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9Skt0LmV4cG9ydHM9QnFlfSk7dmFyIFl2PUgoKGxYbix0WnQpPT57ZnVuY3Rpb24gSHFlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9dFp0LmV4cG9ydHM9SHFlfSk7dmFyIE00PUgoKGNYbixlWnQpPT57dmFyIFZxZT1ZdigpO2Z1bmN0aW9uIFVxZShlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKFZxZShlW3JdWzBdLHQpKXJldHVybiByO3JldHVybi0xfWVadC5leHBvcnRzPVVxZX0pO3ZhciBuWnQ9SCgodVhuLHJadCk9Pnt2YXIgcXFlPU00KCksR3FlPUFycmF5LnByb3RvdHlwZSxXcWU9R3FlLnNwbGljZTtmdW5jdGlvbiBZcWUoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPXFxZSh0LGUpO2lmKHI8MClyZXR1cm4hMTt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiByPT1uP3QucG9wKCk6V3FlLmNhbGwodCxyLDEpLC0tdGhpcy5zaXplLCEwfXJadC5leHBvcnRzPVlxZX0pO3ZhciBvWnQ9SCgoaFhuLGladCk9Pnt2YXIganFlPU00KCk7ZnVuY3Rpb24gWHFlKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1qcWUodCxlKTtyZXR1cm4gcjwwP3ZvaWQgMDp0W3JdWzFdfWladC5leHBvcnRzPVhxZX0pO3ZhciBzWnQ9SCgoZlhuLGFadCk9Pnt2YXIgJHFlPU00KCk7ZnVuY3Rpb24gS3FlKGUpe3JldHVybiAkcWUodGhpcy5fX2RhdGFfXyxlKT4tMX1hWnQuZXhwb3J0cz1LcWV9KTt2YXIgY1p0PUgoKHBYbixsWnQpPT57dmFyIFpxZT1NNCgpO2Z1bmN0aW9uIEpxZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX18sbj1acWUocixlKTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW2UsdF0pKTpyW25dWzFdPXQsdGhpc31sWnQuZXhwb3J0cz1KcWV9KTt2YXIgRTQ9SCgoZFhuLHVadCk9Pnt2YXIgUXFlPVFLdCgpLHRHZT1uWnQoKSxlR2U9b1p0KCksckdlPXNadCgpLG5HZT1jWnQoKTtmdW5jdGlvbiB6UyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX16Uy5wcm90b3R5cGUuY2xlYXI9UXFlO3pTLnByb3RvdHlwZS5kZWxldGU9dEdlO3pTLnByb3RvdHlwZS5nZXQ9ZUdlO3pTLnByb3RvdHlwZS5oYXM9ckdlO3pTLnByb3RvdHlwZS5zZXQ9bkdlO3VadC5leHBvcnRzPXpTfSk7dmFyIGZadD1IKChtWG4saFp0KT0+e3ZhciBpR2U9RTQoKTtmdW5jdGlvbiBvR2UoKXt0aGlzLl9fZGF0YV9fPW5ldyBpR2UsdGhpcy5zaXplPTB9aFp0LmV4cG9ydHM9b0dlfSk7dmFyIGRadD1IKChnWG4scFp0KT0+e2Z1bmN0aW9uIGFHZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUscn1wWnQuZXhwb3J0cz1hR2V9KTt2YXIgZ1p0PUgoKF9YbixtWnQpPT57ZnVuY3Rpb24gc0dlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX1tWnQuZXhwb3J0cz1zR2V9KTt2YXIgeVp0PUgoKHlYbixfWnQpPT57ZnVuY3Rpb24gbEdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1fWnQuZXhwb3J0cz1sR2V9KTt2YXIgY3N0PUgoKHZYbix2WnQpPT57dmFyIGNHZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dlp0LmV4cG9ydHM9Y0dlfSk7dmFyIEhjPUgoKHhYbix4WnQpPT57dmFyIHVHZT1jc3QoKSxoR2U9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmR2U9dUdlfHxoR2V8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7eFp0LmV4cG9ydHM9ZkdlfSk7dmFyIGp2PUgoKGJYbixiWnQpPT57dmFyIHBHZT1IYygpLGRHZT1wR2UuU3ltYm9sO2JadC5leHBvcnRzPWRHZX0pO3ZhciBFWnQ9SCgod1huLE1adCk9Pnt2YXIgd1p0PWp2KCksU1p0PU9iamVjdC5wcm90b3R5cGUsbUdlPVNadC5oYXNPd25Qcm9wZXJ0eSxnR2U9U1p0LnRvU3RyaW5nLFQ0PXdadD93WnQudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIF9HZShlKXt2YXIgdD1tR2UuY2FsbChlLFQ0KSxyPWVbVDRdO3RyeXtlW1Q0XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2gobyl7fXZhciBpPWdHZS5jYWxsKGUpO3JldHVybiBuJiYodD9lW1Q0XT1yOmRlbGV0ZSBlW1Q0XSksaX1NWnQuZXhwb3J0cz1fR2V9KTt2YXIgQ1p0PUgoKFNYbixUWnQpPT57dmFyIHlHZT1PYmplY3QucHJvdG90eXBlLHZHZT15R2UudG9TdHJpbmc7ZnVuY3Rpb24geEdlKGUpe3JldHVybiB2R2UuY2FsbChlKX1UWnQuZXhwb3J0cz14R2V9KTt2YXIgczA9SCgoTVhuLEladCk9Pnt2YXIgQVp0PWp2KCksYkdlPUVadCgpLHdHZT1DWnQoKSxTR2U9IltvYmplY3QgTnVsbF0iLE1HZT0iW29iamVjdCBVbmRlZmluZWRdIixQWnQ9QVp0P0FadC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gRUdlKGUpe3JldHVybiBlPT1udWxsP2U9PT12b2lkIDA/TUdlOlNHZTpQWnQmJlBadCBpbiBPYmplY3QoZSk/YkdlKGUpOndHZShlKX1JWnQuZXhwb3J0cz1FR2V9KTt2YXIgTWw9SCgoRVhuLExadCk9PntmdW5jdGlvbiBUR2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIGUhPW51bGwmJih0PT0ib2JqZWN0Inx8dD09ImZ1bmN0aW9uIil9TFp0LmV4cG9ydHM9VEdlfSk7dmFyIEZTPUgoKFRYbixrWnQpPT57dmFyIENHZT1zMCgpLEFHZT1NbCgpLFBHZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsSUdlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsTEdlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsa0dlPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gUkdlKGUpe2lmKCFBR2UoZSkpcmV0dXJuITE7dmFyIHQ9Q0dlKGUpO3JldHVybiB0PT1JR2V8fHQ9PUxHZXx8dD09UEdlfHx0PT1rR2V9a1p0LmV4cG9ydHM9UkdlfSk7dmFyIE5adD1IKChDWG4sUlp0KT0+e3ZhciBOR2U9SGMoKSxER2U9TkdlWyJfX2NvcmUtanNfc2hhcmVkX18iXTtSWnQuZXhwb3J0cz1ER2V9KTt2YXIgelp0PUgoKEFYbixPWnQpPT57dmFyIHVzdD1OWnQoKSxEWnQ9ZnVuY3Rpb24oKXt2YXIgZT0vW14uXSskLy5leGVjKHVzdCYmdXN0LmtleXMmJnVzdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGU/IlN5bWJvbChzcmMpXzEuIitlOiIifSgpO2Z1bmN0aW9uIE9HZShlKXtyZXR1cm4hIURadCYmRFp0IGluIGV9T1p0LmV4cG9ydHM9T0dlfSk7dmFyIGhzdD1IKChQWG4sRlp0KT0+e3ZhciB6R2U9RnVuY3Rpb24ucHJvdG90eXBlLEZHZT16R2UudG9TdHJpbmc7ZnVuY3Rpb24gQkdlKGUpe2lmKGUhPW51bGwpe3RyeXtyZXR1cm4gRkdlLmNhbGwoZSl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaCh0KXt9fXJldHVybiIifUZadC5leHBvcnRzPUJHZX0pO3ZhciBIWnQ9SCgoSVhuLEJadCk9Pnt2YXIgSEdlPUZTKCksVkdlPXpadCgpLFVHZT1NbCgpLHFHZT1oc3QoKSxHR2U9L1tcXF4kLiorPygpW1xde318XS9nLFdHZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxZR2U9RnVuY3Rpb24ucHJvdG90eXBlLGpHZT1PYmplY3QucHJvdG90eXBlLFhHZT1ZR2UudG9TdHJpbmcsJEdlPWpHZS5oYXNPd25Qcm9wZXJ0eSxLR2U9UmVnRXhwKCJeIitYR2UuY2FsbCgkR2UpLnJlcGxhY2UoR0dlLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIFpHZShlKXtpZighVUdlKGUpfHxWR2UoZSkpcmV0dXJuITE7dmFyIHQ9SEdlKGUpP0tHZTpXR2U7cmV0dXJuIHQudGVzdChxR2UoZSkpfUJadC5leHBvcnRzPVpHZX0pO3ZhciBVWnQ9SCgoTFhuLFZadCk9PntmdW5jdGlvbiBKR2UoZSx0KXtyZXR1cm4gZT09bnVsbD92b2lkIDA6ZVt0XX1WWnQuZXhwb3J0cz1KR2V9KTt2YXIgbDA9SCgoa1huLHFadCk9Pnt2YXIgUUdlPUhadCgpLHRXZT1VWnQoKTtmdW5jdGlvbiBlV2UoZSx0KXt2YXIgcj10V2UoZSx0KTtyZXR1cm4gUUdlKHIpP3I6dm9pZCAwfXFadC5leHBvcnRzPWVXZX0pO3ZhciB6Qj1IKChSWG4sR1p0KT0+e3ZhciByV2U9bDAoKSxuV2U9SGMoKSxpV2U9cldlKG5XZSwiTWFwIik7R1p0LmV4cG9ydHM9aVdlfSk7dmFyIEM0PUgoKE5YbixXWnQpPT57dmFyIG9XZT1sMCgpLGFXZT1vV2UoT2JqZWN0LCJjcmVhdGUiKTtXWnQuZXhwb3J0cz1hV2V9KTt2YXIgWFp0PUgoKERYbixqWnQpPT57dmFyIFladD1DNCgpO2Z1bmN0aW9uIHNXZSgpe3RoaXMuX19kYXRhX189WVp0P1ladChudWxsKTp7fSx0aGlzLnNpemU9MH1qWnQuZXhwb3J0cz1zV2V9KTt2YXIgS1p0PUgoKE9YbiwkWnQpPT57ZnVuY3Rpb24gbFdlKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSRadC5leHBvcnRzPWxXZX0pO3ZhciBKWnQ9SCgoelhuLFpadCk9Pnt2YXIgY1dlPUM0KCksdVdlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixoV2U9T2JqZWN0LnByb3RvdHlwZSxmV2U9aFdlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHBXZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKGNXZSl7dmFyIHI9dFtlXTtyZXR1cm4gcj09PXVXZT92b2lkIDA6cn1yZXR1cm4gZldlLmNhbGwodCxlKT90W2VdOnZvaWQgMH1aWnQuZXhwb3J0cz1wV2V9KTt2YXIgdEp0PUgoKEZYbixRWnQpPT57dmFyIGRXZT1DNCgpLG1XZT1PYmplY3QucHJvdG90eXBlLGdXZT1tV2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gX1dlKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIGRXZT90W2VdIT09dm9pZCAwOmdXZS5jYWxsKHQsZSl9UVp0LmV4cG9ydHM9X1dlfSk7dmFyIHJKdD1IKChCWG4sZUp0KT0+e3ZhciB5V2U9QzQoKSx2V2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIHhXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLHJbZV09eVdlJiZ0PT09dm9pZCAwP3ZXZTp0LHRoaXN9ZUp0LmV4cG9ydHM9eFdlfSk7dmFyIGlKdD1IKChIWG4sbkp0KT0+e3ZhciBiV2U9WFp0KCksd1dlPUtadCgpLFNXZT1KWnQoKSxNV2U9dEp0KCksRVdlPXJKdCgpO2Z1bmN0aW9uIEJTKGUpe3ZhciB0PS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fUJTLnByb3RvdHlwZS5jbGVhcj1iV2U7QlMucHJvdG90eXBlLmRlbGV0ZT13V2U7QlMucHJvdG90eXBlLmdldD1TV2U7QlMucHJvdG90eXBlLmhhcz1NV2U7QlMucHJvdG90eXBlLnNldD1FV2U7bkp0LmV4cG9ydHM9QlN9KTt2YXIgc0p0PUgoKFZYbixhSnQpPT57dmFyIG9KdD1pSnQoKSxUV2U9RTQoKSxDV2U9ekIoKTtmdW5jdGlvbiBBV2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBvSnQsbWFwOm5ldyhDV2V8fFRXZSksc3RyaW5nOm5ldyBvSnR9fWFKdC5leHBvcnRzPUFXZX0pO3ZhciBjSnQ9SCgoVVhuLGxKdCk9PntmdW5jdGlvbiBQV2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIHQ9PSJzdHJpbmcifHx0PT0ibnVtYmVyInx8dD09InN5bWJvbCJ8fHQ9PSJib29sZWFuIj9lIT09Il9fcHJvdG9fXyI6ZT09PW51bGx9bEp0LmV4cG9ydHM9UFdlfSk7dmFyIEE0PUgoKHFYbix1SnQpPT57dmFyIElXZT1jSnQoKTtmdW5jdGlvbiBMV2UoZSx0KXt2YXIgcj1lLl9fZGF0YV9fO3JldHVybiBJV2UodCk/clt0eXBlb2YgdD09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpyLm1hcH11SnQuZXhwb3J0cz1MV2V9KTt2YXIgZkp0PUgoKEdYbixoSnQpPT57dmFyIGtXZT1BNCgpO2Z1bmN0aW9uIFJXZShlKXt2YXIgdD1rV2UodGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1oSnQuZXhwb3J0cz1SV2V9KTt2YXIgZEp0PUgoKFdYbixwSnQpPT57dmFyIE5XZT1BNCgpO2Z1bmN0aW9uIERXZShlKXtyZXR1cm4gTldlKHRoaXMsZSkuZ2V0KGUpfXBKdC5leHBvcnRzPURXZX0pO3ZhciBnSnQ9SCgoWVhuLG1KdCk9Pnt2YXIgT1dlPUE0KCk7ZnVuY3Rpb24geldlKGUpe3JldHVybiBPV2UodGhpcyxlKS5oYXMoZSl9bUp0LmV4cG9ydHM9eldlfSk7dmFyIHlKdD1IKChqWG4sX0p0KT0+e3ZhciBGV2U9QTQoKTtmdW5jdGlvbiBCV2UoZSx0KXt2YXIgcj1GV2UodGhpcyxlKSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc31fSnQuZXhwb3J0cz1CV2V9KTt2YXIgRkI9SCgoWFhuLHZKdCk9Pnt2YXIgSFdlPXNKdCgpLFZXZT1mSnQoKSxVV2U9ZEp0KCkscVdlPWdKdCgpLEdXZT15SnQoKTtmdW5jdGlvbiBIUyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1IUy5wcm90b3R5cGUuY2xlYXI9SFdlO0hTLnByb3RvdHlwZS5kZWxldGU9VldlO0hTLnByb3RvdHlwZS5nZXQ9VVdlO0hTLnByb3RvdHlwZS5oYXM9cVdlO0hTLnByb3RvdHlwZS5zZXQ9R1dlO3ZKdC5leHBvcnRzPUhTfSk7dmFyIGJKdD1IKCgkWG4seEp0KT0+e3ZhciBXV2U9RTQoKSxZV2U9ekIoKSxqV2U9RkIoKSxYV2U9MjAwO2Z1bmN0aW9uICRXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIFdXZSl7dmFyIG49ci5fX2RhdGFfXztpZighWVdlfHxuLmxlbmd0aDxYV2UtMSlyZXR1cm4gbi5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IGpXZShuKX1yZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemU9ci5zaXplLHRoaXN9eEp0LmV4cG9ydHM9JFdlfSk7dmFyIFA0PUgoKEtYbix3SnQpPT57dmFyIEtXZT1FNCgpLFpXZT1mWnQoKSxKV2U9ZFp0KCksUVdlPWdadCgpLHRZZT15WnQoKSxlWWU9Ykp0KCk7ZnVuY3Rpb24gVlMoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgS1dlKGUpO3RoaXMuc2l6ZT10LnNpemV9VlMucHJvdG90eXBlLmNsZWFyPVpXZTtWUy5wcm90b3R5cGUuZGVsZXRlPUpXZTtWUy5wcm90b3R5cGUuZ2V0PVFXZTtWUy5wcm90b3R5cGUuaGFzPXRZZTtWUy5wcm90b3R5cGUuc2V0PWVZZTt3SnQuZXhwb3J0cz1WU30pO3ZhciBCQj1IKChaWG4sU0p0KT0+e2Z1bmN0aW9uIHJZZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aDsrK3I8biYmdChlW3JdLHIsZSkhPT0hMTspO3JldHVybiBlfVNKdC5leHBvcnRzPXJZZX0pO3ZhciBmc3Q9SCgoSlhuLE1KdCk9Pnt2YXIgblllPWwwKCksaVllPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ZZShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2godCl7fX0oKTtNSnQuZXhwb3J0cz1pWWV9KTt2YXIgSTQ9SCgoUVhuLFRKdCk9Pnt2YXIgRUp0PWZzdCgpO2Z1bmN0aW9uIG9ZZShlLHQscil7dD09Il9fcHJvdG9fXyImJkVKdD9FSnQoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6ZVt0XT1yfVRKdC5leHBvcnRzPW9ZZX0pO3ZhciBMND1IKCh0JG4sQ0p0KT0+e3ZhciBhWWU9STQoKSxzWWU9WXYoKSxsWWU9T2JqZWN0LnByb3RvdHlwZSxjWWU9bFllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHVZZShlLHQscil7dmFyIG49ZVt0XTsoIShjWWUuY2FsbChlLHQpJiZzWWUobixyKSl8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJmFZZShlLHQscil9Q0p0LmV4cG9ydHM9dVllfSk7dmFyIFVTPUgoKGUkbixBSnQpPT57dmFyIGhZZT1MNCgpLGZZZT1JNCgpO2Z1bmN0aW9uIHBZZShlLHQscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBvPS0xLGE9dC5sZW5ndGg7KytvPGE7KXt2YXIgcz10W29dLGw9bj9uKHJbc10sZVtzXSxzLHIsZSk6dm9pZCAwO2w9PT12b2lkIDAmJihsPWVbc10pLGk/ZlllKHIscyxsKTpoWWUocixzLGwpfXJldHVybiByfUFKdC5leHBvcnRzPXBZZX0pO3ZhciBJSnQ9SCgociRuLFBKdCk9PntmdW5jdGlvbiBkWWUoZSx0KXtmb3IodmFyIHI9LTEsbj1BcnJheShlKTsrK3I8ZTspbltyXT10KHIpO3JldHVybiBufVBKdC5leHBvcnRzPWRZZX0pO3ZhciBZdT1IKChuJG4sTEp0KT0+e2Z1bmN0aW9uIG1ZZShlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifUxKdC5leHBvcnRzPW1ZZX0pO3ZhciBSSnQ9SCgoaSRuLGtKdCk9Pnt2YXIgZ1llPXMwKCksX1llPVl1KCkseVllPSJbb2JqZWN0IEFyZ3VtZW50c10iO2Z1bmN0aW9uIHZZZShlKXtyZXR1cm4gX1llKGUpJiZnWWUoZSk9PXlZZX1rSnQuZXhwb3J0cz12WWV9KTt2YXIgcVM9SCgobyRuLE9KdCk9Pnt2YXIgTkp0PVJKdCgpLHhZZT1ZdSgpLERKdD1PYmplY3QucHJvdG90eXBlLGJZZT1ESnQuaGFzT3duUHJvcGVydHksd1llPURKdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxTWWU9Tkp0KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/Tkp0OmZ1bmN0aW9uKGUpe3JldHVybiB4WWUoZSkmJmJZZS5jYWxsKGUsImNhbGxlZSIpJiYhd1llLmNhbGwoZSwiY2FsbGVlIil9O09KdC5leHBvcnRzPVNZZX0pO3ZhciBUaT1IKChhJG4sekp0KT0+e3ZhciBNWWU9QXJyYXkuaXNBcnJheTt6SnQuZXhwb3J0cz1NWWV9KTt2YXIgQkp0PUgoKHMkbixGSnQpPT57ZnVuY3Rpb24gRVllKCl7cmV0dXJuITF9Rkp0LmV4cG9ydHM9RVllfSk7dmFyIFh2PUgoKGs0LEdTKT0+e3ZhciBUWWU9SGMoKSxDWWU9Qkp0KCksVUp0PXR5cGVvZiBrND09Im9iamVjdCImJms0JiYhazQubm9kZVR5cGUmJms0LEhKdD1VSnQmJnR5cGVvZiBHUz09Im9iamVjdCImJkdTJiYhR1Mubm9kZVR5cGUmJkdTLEFZZT1ISnQmJkhKdC5leHBvcnRzPT09VUp0LFZKdD1BWWU/VFllLkJ1ZmZlcjp2b2lkIDAsUFllPVZKdD9WSnQuaXNCdWZmZXI6dm9pZCAwLElZZT1QWWV8fENZZTtHUy5leHBvcnRzPUlZZX0pO3ZhciBSND1IKChsJG4scUp0KT0+e3ZhciBMWWU9OTAwNzE5OTI1NDc0MDk5MSxrWWU9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIFJZZShlLHQpe3ZhciByPXR5cGVvZiBlO3JldHVybiB0PXQ9PW51bGw/TFllOnQsISF0JiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZrWWUudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fXFKdC5leHBvcnRzPVJZZX0pO3ZhciBIQj1IKChjJG4sR0p0KT0+e3ZhciBOWWU9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBEWWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZT4tMSYmZSUxPT0wJiZlPD1OWWV9R0p0LmV4cG9ydHM9RFllfSk7dmFyIFlKdD1IKCh1JG4sV0p0KT0+e3ZhciBPWWU9czAoKSx6WWU9SEIoKSxGWWU9WXUoKSxCWWU9IltvYmplY3QgQXJndW1lbnRzXSIsSFllPSJbb2JqZWN0IEFycmF5XSIsVlllPSJbb2JqZWN0IEJvb2xlYW5dIixVWWU9IltvYmplY3QgRGF0ZV0iLHFZZT0iW29iamVjdCBFcnJvcl0iLEdZZT0iW29iamVjdCBGdW5jdGlvbl0iLFdZZT0iW29iamVjdCBNYXBdIixZWWU9IltvYmplY3QgTnVtYmVyXSIsalllPSJbb2JqZWN0IE9iamVjdF0iLFhZZT0iW29iamVjdCBSZWdFeHBdIiwkWWU9IltvYmplY3QgU2V0XSIsS1llPSJbb2JqZWN0IFN0cmluZ10iLFpZZT0iW29iamVjdCBXZWFrTWFwXSIsSlllPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsUVllPSJbb2JqZWN0IERhdGFWaWV3XSIsdGplPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGVqZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixyamU9IltvYmplY3QgSW50OEFycmF5XSIsbmplPSJbb2JqZWN0IEludDE2QXJyYXldIixpamU9IltvYmplY3QgSW50MzJBcnJheV0iLG9qZT0iW29iamVjdCBVaW50OEFycmF5XSIsYWplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsc2plPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsbGplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsVm49e307Vm5bdGplXT1WbltlamVdPVZuW3JqZV09Vm5bbmplXT1WbltpamVdPVZuW29qZV09Vm5bYWplXT1WbltzamVdPVZuW2xqZV09ITA7Vm5bQlllXT1WbltIWWVdPVZuW0pZZV09Vm5bVlllXT1WbltRWWVdPVZuW1VZZV09Vm5bcVllXT1WbltHWWVdPVZuW1dZZV09Vm5bWVllXT1WbltqWWVdPVZuW1hZZV09Vm5bJFllXT1WbltLWWVdPVZuW1pZZV09ITE7ZnVuY3Rpb24gY2plKGUpe3JldHVybiBGWWUoZSkmJnpZZShlLmxlbmd0aCkmJiEhVm5bT1llKGUpXX1XSnQuZXhwb3J0cz1jamV9KTt2YXIgTjQ9SCgoaCRuLGpKdCk9PntmdW5jdGlvbiB1amUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1qSnQuZXhwb3J0cz11amV9KTt2YXIgVkI9SCgoRDQsV1MpPT57dmFyIGhqZT1jc3QoKSxYSnQ9dHlwZW9mIEQ0PT0ib2JqZWN0IiYmRDQmJiFENC5ub2RlVHlwZSYmRDQsTzQ9WEp0JiZ0eXBlb2YgV1M9PSJvYmplY3QiJiZXUyYmIVdTLm5vZGVUeXBlJiZXUyxmamU9TzQmJk80LmV4cG9ydHM9PT1YSnQscHN0PWZqZSYmaGplLnByb2Nlc3MscGplPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPU80JiZPNC5yZXF1aXJlJiZPNC5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGV8fHBzdCYmcHN0LmJpbmRpbmcmJnBzdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTtXUy5leHBvcnRzPXBqZX0pO3ZhciBZUz1IKChmJG4sWkp0KT0+e3ZhciBkamU9WUp0KCksbWplPU40KCksJEp0PVZCKCksS0p0PSRKdCYmJEp0LmlzVHlwZWRBcnJheSxnamU9S0p0P21qZShLSnQpOmRqZTtaSnQuZXhwb3J0cz1namV9KTt2YXIgZHN0PUgoKHAkbixKSnQpPT57dmFyIF9qZT1JSnQoKSx5amU9cVMoKSx2amU9VGkoKSx4amU9WHYoKSxiamU9UjQoKSx3amU9WVMoKSxTamU9T2JqZWN0LnByb3RvdHlwZSxNamU9U2plLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIEVqZShlLHQpe3ZhciByPXZqZShlKSxuPSFyJiZ5amUoZSksaT0hciYmIW4mJnhqZShlKSxvPSFyJiYhbiYmIWkmJndqZShlKSxhPXJ8fG58fGl8fG8scz1hP19qZShlLmxlbmd0aCxTdHJpbmcpOltdLGw9cy5sZW5ndGg7Zm9yKHZhciBjIGluIGUpKHR8fE1qZS5jYWxsKGUsYykpJiYhKGEmJihjPT0ibGVuZ3RoInx8aSYmKGM9PSJvZmZzZXQifHxjPT0icGFyZW50Iil8fG8mJihjPT0iYnVmZmVyInx8Yz09ImJ5dGVMZW5ndGgifHxjPT0iYnl0ZU9mZnNldCIpfHxiamUoYyxsKSkpJiZzLnB1c2goYyk7cmV0dXJuIHN9Skp0LmV4cG9ydHM9RWplfSk7dmFyIHo0PUgoKGQkbixRSnQpPT57dmFyIFRqZT1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIENqZShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yLHI9dHlwZW9mIHQ9PSJmdW5jdGlvbiImJnQucHJvdG90eXBlfHxUamU7cmV0dXJuIGU9PT1yfVFKdC5leHBvcnRzPUNqZX0pO3ZhciBtc3Q9SCgobSRuLHRRdCk9PntmdW5jdGlvbiBBamUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUodChyKSl9fXRRdC5leHBvcnRzPUFqZX0pO3ZhciByUXQ9SCgoZyRuLGVRdCk9Pnt2YXIgUGplPW1zdCgpLElqZT1QamUoT2JqZWN0LmtleXMsT2JqZWN0KTtlUXQuZXhwb3J0cz1JamV9KTt2YXIgVUI9SCgoXyRuLG5RdCk9Pnt2YXIgTGplPXo0KCksa2plPXJRdCgpLFJqZT1PYmplY3QucHJvdG90eXBlLE5qZT1SamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gRGplKGUpe2lmKCFMamUoZSkpcmV0dXJuIGtqZShlKTt2YXIgdD1bXTtmb3IodmFyIHIgaW4gT2JqZWN0KGUpKU5qZS5jYWxsKGUscikmJnIhPSJjb25zdHJ1Y3RvciImJnQucHVzaChyKTtyZXR1cm4gdH1uUXQuZXhwb3J0cz1EamV9KTt2YXIgQmY9SCgoeSRuLGlRdCk9Pnt2YXIgT2plPUZTKCksemplPUhCKCk7ZnVuY3Rpb24gRmplKGUpe3JldHVybiBlIT1udWxsJiZ6amUoZS5sZW5ndGgpJiYhT2plKGUpfWlRdC5leHBvcnRzPUZqZX0pO3ZhciBBZD1IKCh2JG4sb1F0KT0+e3ZhciBCamU9ZHN0KCksSGplPVVCKCksVmplPUJmKCk7ZnVuY3Rpb24gVWplKGUpe3JldHVybiBWamUoZSk/QmplKGUpOkhqZShlKX1vUXQuZXhwb3J0cz1VamV9KTt2YXIgc1F0PUgoKHgkbixhUXQpPT57dmFyIHFqZT1VUygpLEdqZT1BZCgpO2Z1bmN0aW9uIFdqZShlLHQpe3JldHVybiBlJiZxamUodCxHamUodCksZSl9YVF0LmV4cG9ydHM9V2plfSk7dmFyIGNRdD1IKChiJG4sbFF0KT0+e2Z1bmN0aW9uIFlqZShlKXt2YXIgdD1bXTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBPYmplY3QoZSkpdC5wdXNoKHIpO3JldHVybiB0fWxRdC5leHBvcnRzPVlqZX0pO3ZhciBoUXQ9SCgodyRuLHVRdCk9Pnt2YXIgamplPU1sKCksWGplPXo0KCksJGplPWNRdCgpLEtqZT1PYmplY3QucHJvdG90eXBlLFpqZT1LamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gSmplKGUpe2lmKCFqamUoZSkpcmV0dXJuICRqZShlKTt2YXIgdD1YamUoZSkscj1bXTtmb3IodmFyIG4gaW4gZSluPT0iY29uc3RydWN0b3IiJiYodHx8IVpqZS5jYWxsKGUsbikpfHxyLnB1c2gobik7cmV0dXJuIHJ9dVF0LmV4cG9ydHM9SmplfSk7dmFyIGMwPUgoKFMkbixmUXQpPT57dmFyIFFqZT1kc3QoKSx0WGU9aFF0KCksZVhlPUJmKCk7ZnVuY3Rpb24gclhlKGUpe3JldHVybiBlWGUoZSk/UWplKGUsITApOnRYZShlKX1mUXQuZXhwb3J0cz1yWGV9KTt2YXIgZFF0PUgoKE0kbixwUXQpPT57dmFyIG5YZT1VUygpLGlYZT1jMCgpO2Z1bmN0aW9uIG9YZShlLHQpe3JldHVybiBlJiZuWGUodCxpWGUodCksZSl9cFF0LmV4cG9ydHM9b1hlfSk7dmFyIGdzdD1IKChGNCxqUyk9Pnt2YXIgYVhlPUhjKCkseVF0PXR5cGVvZiBGND09Im9iamVjdCImJkY0JiYhRjQubm9kZVR5cGUmJkY0LG1RdD15UXQmJnR5cGVvZiBqUz09Im9iamVjdCImJmpTJiYhalMubm9kZVR5cGUmJmpTLHNYZT1tUXQmJm1RdC5leHBvcnRzPT09eVF0LGdRdD1zWGU/YVhlLkJ1ZmZlcjp2b2lkIDAsX1F0PWdRdD9nUXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIGxYZShlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgcj1lLmxlbmd0aCxuPV9RdD9fUXQocik6bmV3IGUuY29uc3RydWN0b3Iocik7cmV0dXJuIGUuY29weShuKSxufWpTLmV4cG9ydHM9bFhlfSk7dmFyIF9zdD1IKChFJG4sdlF0KT0+e2Z1bmN0aW9uIGNYZShlLHQpe3ZhciByPS0xLG49ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KG4pKTsrK3I8bjspdFtyXT1lW3JdO3JldHVybiB0fXZRdC5leHBvcnRzPWNYZX0pO3ZhciB5c3Q9SCgoVCRuLHhRdCk9PntmdW5jdGlvbiB1WGUoZSx0KXtmb3IodmFyIHI9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGgsaT0wLG89W107KytyPG47KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYob1tpKytdPWEpfXJldHVybiBvfXhRdC5leHBvcnRzPXVYZX0pO3ZhciB2c3Q9SCgoQyRuLGJRdCk9PntmdW5jdGlvbiBoWGUoKXtyZXR1cm5bXX1iUXQuZXhwb3J0cz1oWGV9KTt2YXIgcUI9SCgoQSRuLFNRdCk9Pnt2YXIgZlhlPXlzdCgpLHBYZT12c3QoKSxkWGU9T2JqZWN0LnByb3RvdHlwZSxtWGU9ZFhlLnByb3BlcnR5SXNFbnVtZXJhYmxlLHdRdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGdYZT13UXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/W106KGU9T2JqZWN0KGUpLGZYZSh3UXQoZSksZnVuY3Rpb24odCl7cmV0dXJuIG1YZS5jYWxsKGUsdCl9KSl9OnBYZTtTUXQuZXhwb3J0cz1nWGV9KTt2YXIgRVF0PUgoKFAkbixNUXQpPT57dmFyIF9YZT1VUygpLHlYZT1xQigpO2Z1bmN0aW9uIHZYZShlLHQpe3JldHVybiBfWGUoZSx5WGUoZSksdCl9TVF0LmV4cG9ydHM9dlhlfSk7dmFyIEdCPUgoKEkkbixUUXQpPT57ZnVuY3Rpb24geFhlKGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaT1lLmxlbmd0aDsrK3I8bjspZVtpK3JdPXRbcl07cmV0dXJuIGV9VFF0LmV4cG9ydHM9eFhlfSk7dmFyIEI0PUgoKEwkbixDUXQpPT57dmFyIGJYZT1tc3QoKSx3WGU9YlhlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO0NRdC5leHBvcnRzPXdYZX0pO3ZhciB4c3Q9SCgoayRuLEFRdCk9Pnt2YXIgU1hlPUdCKCksTVhlPUI0KCksRVhlPXFCKCksVFhlPXZzdCgpLENYZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLEFYZT1DWGU/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KVNYZSh0LEVYZShlKSksZT1NWGUoZSk7cmV0dXJuIHR9OlRYZTtBUXQuZXhwb3J0cz1BWGV9KTt2YXIgSVF0PUgoKFIkbixQUXQpPT57dmFyIFBYZT1VUygpLElYZT14c3QoKTtmdW5jdGlvbiBMWGUoZSx0KXtyZXR1cm4gUFhlKGUsSVhlKGUpLHQpfVBRdC5leHBvcnRzPUxYZX0pO3ZhciBic3Q9SCgoTiRuLExRdCk9Pnt2YXIga1hlPUdCKCksUlhlPVRpKCk7ZnVuY3Rpb24gTlhlKGUsdCxyKXt2YXIgbj10KGUpO3JldHVybiBSWGUoZSk/bjprWGUobixyKGUpKX1MUXQuZXhwb3J0cz1OWGV9KTt2YXIgd3N0PUgoKEQkbixrUXQpPT57dmFyIERYZT1ic3QoKSxPWGU9cUIoKSx6WGU9QWQoKTtmdW5jdGlvbiBGWGUoZSl7cmV0dXJuIERYZShlLHpYZSxPWGUpfWtRdC5leHBvcnRzPUZYZX0pO3ZhciBOUXQ9SCgoTyRuLFJRdCk9Pnt2YXIgQlhlPWJzdCgpLEhYZT14c3QoKSxWWGU9YzAoKTtmdW5jdGlvbiBVWGUoZSl7cmV0dXJuIEJYZShlLFZYZSxIWGUpfVJRdC5leHBvcnRzPVVYZX0pO3ZhciBPUXQ9SCgoeiRuLERRdCk9Pnt2YXIgcVhlPWwwKCksR1hlPUhjKCksV1hlPXFYZShHWGUsIkRhdGFWaWV3Iik7RFF0LmV4cG9ydHM9V1hlfSk7dmFyIEZRdD1IKChGJG4selF0KT0+e3ZhciBZWGU9bDAoKSxqWGU9SGMoKSxYWGU9WVhlKGpYZSwiUHJvbWlzZSIpO3pRdC5leHBvcnRzPVhYZX0pO3ZhciBTc3Q9SCgoQiRuLEJRdCk9Pnt2YXIgJFhlPWwwKCksS1hlPUhjKCksWlhlPSRYZShLWGUsIlNldCIpO0JRdC5leHBvcnRzPVpYZX0pO3ZhciBWUXQ9SCgoSCRuLEhRdCk9Pnt2YXIgSlhlPWwwKCksUVhlPUhjKCksdCRlPUpYZShRWGUsIldlYWtNYXAiKTtIUXQuZXhwb3J0cz10JGV9KTt2YXIgS3Y9SCgoViRuLFhRdCk9Pnt2YXIgTXN0PU9RdCgpLEVzdD16QigpLFRzdD1GUXQoKSxDc3Q9U3N0KCksQXN0PVZRdCgpLGpRdD1zMCgpLFhTPWhzdCgpLFVRdD0iW29iamVjdCBNYXBdIixlJGU9IltvYmplY3QgT2JqZWN0XSIscVF0PSJbb2JqZWN0IFByb21pc2VdIixHUXQ9IltvYmplY3QgU2V0XSIsV1F0PSJbb2JqZWN0IFdlYWtNYXBdIixZUXQ9IltvYmplY3QgRGF0YVZpZXddIixyJGU9WFMoTXN0KSxuJGU9WFMoRXN0KSxpJGU9WFMoVHN0KSxvJGU9WFMoQ3N0KSxhJGU9WFMoQXN0KSwkdj1qUXQ7KE1zdCYmJHYobmV3IE1zdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9WVF0fHxFc3QmJiR2KG5ldyBFc3QpIT1VUXR8fFRzdCYmJHYoVHN0LnJlc29sdmUoKSkhPXFRdHx8Q3N0JiYkdihuZXcgQ3N0KSE9R1F0fHxBc3QmJiR2KG5ldyBBc3QpIT1XUXQpJiYoJHY9ZnVuY3Rpb24oZSl7dmFyIHQ9alF0KGUpLHI9dD09ZSRlP2UuY29uc3RydWN0b3I6dm9pZCAwLG49cj9YUyhyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIHIkZTpyZXR1cm4gWVF0O2Nhc2UgbiRlOnJldHVybiBVUXQ7Y2FzZSBpJGU6cmV0dXJuIHFRdDtjYXNlIG8kZTpyZXR1cm4gR1F0O2Nhc2UgYSRlOnJldHVybiBXUXR9cmV0dXJuIHR9KTtYUXQuZXhwb3J0cz0kdn0pO3ZhciBLUXQ9SCgoVSRuLCRRdCk9Pnt2YXIgcyRlPU9iamVjdC5wcm90b3R5cGUsbCRlPXMkZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBjJGUoZSl7dmFyIHQ9ZS5sZW5ndGgscj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmdHlwZW9mIGVbMF09PSJzdHJpbmciJiZsJGUuY2FsbChlLCJpbmRleCIpJiYoci5pbmRleD1lLmluZGV4LHIuaW5wdXQ9ZS5pbnB1dCkscn0kUXQuZXhwb3J0cz1jJGV9KTt2YXIgUHN0PUgoKHEkbixaUXQpPT57dmFyIHUkZT1IYygpLGgkZT11JGUuVWludDhBcnJheTtaUXQuZXhwb3J0cz1oJGV9KTt2YXIgV0I9SCgoRyRuLFFRdCk9Pnt2YXIgSlF0PVBzdCgpO2Z1bmN0aW9uIGYkZShlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgSlF0KHQpLnNldChuZXcgSlF0KGUpKSx0fVFRdC5leHBvcnRzPWYkZX0pO3ZhciBldGU9SCgoVyRuLHR0ZSk9Pnt2YXIgcCRlPVdCKCk7ZnVuY3Rpb24gZCRlKGUsdCl7dmFyIHI9dD9wJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfXR0ZS5leHBvcnRzPWQkZX0pO3ZhciBudGU9SCgoWSRuLHJ0ZSk9Pnt2YXIgbSRlPS9cdyokLztmdW5jdGlvbiBnJGUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsbSRlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fXJ0ZS5leHBvcnRzPWckZX0pO3ZhciBsdGU9SCgoaiRuLHN0ZSk9Pnt2YXIgaXRlPWp2KCksb3RlPWl0ZT9pdGUucHJvdG90eXBlOnZvaWQgMCxhdGU9b3RlP290ZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBfJGUoZSl7cmV0dXJuIGF0ZT9PYmplY3QoYXRlLmNhbGwoZSkpOnt9fXN0ZS5leHBvcnRzPV8kZX0pO3ZhciBJc3Q9SCgoWCRuLGN0ZSk9Pnt2YXIgeSRlPVdCKCk7ZnVuY3Rpb24gdiRlKGUsdCl7dmFyIHI9dD95JGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9Y3RlLmV4cG9ydHM9diRlfSk7dmFyIGh0ZT1IKCgkJG4sdXRlKT0+e3ZhciB4JGU9V0IoKSxiJGU9ZXRlKCksdyRlPW50ZSgpLFMkZT1sdGUoKSxNJGU9SXN0KCksRSRlPSJbb2JqZWN0IEJvb2xlYW5dIixUJGU9IltvYmplY3QgRGF0ZV0iLEMkZT0iW29iamVjdCBNYXBdIixBJGU9IltvYmplY3QgTnVtYmVyXSIsUCRlPSJbb2JqZWN0IFJlZ0V4cF0iLEkkZT0iW29iamVjdCBTZXRdIixMJGU9IltvYmplY3QgU3RyaW5nXSIsayRlPSJbb2JqZWN0IFN5bWJvbF0iLFIkZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLE4kZT0iW29iamVjdCBEYXRhVmlld10iLEQkZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixPJGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIseiRlPSJbb2JqZWN0IEludDhBcnJheV0iLEYkZT0iW29iamVjdCBJbnQxNkFycmF5XSIsQiRlPSJbb2JqZWN0IEludDMyQXJyYXldIixIJGU9IltvYmplY3QgVWludDhBcnJheV0iLFYkZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLFUkZT0iW29iamVjdCBVaW50MTZBcnJheV0iLHEkZT0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIEckZShlLHQscil7dmFyIG49ZS5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSBSJGU6cmV0dXJuIHgkZShlKTtjYXNlIEUkZTpjYXNlIFQkZTpyZXR1cm4gbmV3IG4oK2UpO2Nhc2UgTiRlOnJldHVybiBiJGUoZSxyKTtjYXNlIEQkZTpjYXNlIE8kZTpjYXNlIHokZTpjYXNlIEYkZTpjYXNlIEIkZTpjYXNlIEgkZTpjYXNlIFYkZTpjYXNlIFUkZTpjYXNlIHEkZTpyZXR1cm4gTSRlKGUscik7Y2FzZSBDJGU6cmV0dXJuIG5ldyBuO2Nhc2UgQSRlOmNhc2UgTCRlOnJldHVybiBuZXcgbihlKTtjYXNlIFAkZTpyZXR1cm4gdyRlKGUpO2Nhc2UgSSRlOnJldHVybiBuZXcgbjtjYXNlIGskZTpyZXR1cm4gUyRlKGUpfX11dGUuZXhwb3J0cz1HJGV9KTt2YXIgTHN0PUgoKEskbixwdGUpPT57dmFyIFckZT1NbCgpLGZ0ZT1PYmplY3QuY3JlYXRlLFkkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFXJGUodCkpcmV0dXJue307aWYoZnRlKXJldHVybiBmdGUodCk7ZS5wcm90b3R5cGU9dDt2YXIgcj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9dm9pZCAwLHJ9fSgpO3B0ZS5leHBvcnRzPVkkZX0pO3ZhciBrc3Q9SCgoWiRuLGR0ZSk9Pnt2YXIgaiRlPUxzdCgpLFgkZT1CNCgpLCQkZT16NCgpO2Z1bmN0aW9uIEskZShlKXtyZXR1cm4gdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiEkJGUoZSk/aiRlKFgkZShlKSk6e319ZHRlLmV4cG9ydHM9SyRlfSk7dmFyIGd0ZT1IKChKJG4sbXRlKT0+e3ZhciBaJGU9S3YoKSxKJGU9WXUoKSxRJGU9IltvYmplY3QgTWFwXSI7ZnVuY3Rpb24gdEtlKGUpe3JldHVybiBKJGUoZSkmJlokZShlKT09USRlfW10ZS5leHBvcnRzPXRLZX0pO3ZhciB4dGU9SCgoUSRuLHZ0ZSk9Pnt2YXIgZUtlPWd0ZSgpLHJLZT1ONCgpLF90ZT1WQigpLHl0ZT1fdGUmJl90ZS5pc01hcCxuS2U9eXRlP3JLZSh5dGUpOmVLZTt2dGUuZXhwb3J0cz1uS2V9KTt2YXIgd3RlPUgoKHRLbixidGUpPT57dmFyIGlLZT1LdigpLG9LZT1ZdSgpLGFLZT0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBzS2UoZSl7cmV0dXJuIG9LZShlKSYmaUtlKGUpPT1hS2V9YnRlLmV4cG9ydHM9c0tlfSk7dmFyIFR0ZT1IKChlS24sRXRlKT0+e3ZhciBsS2U9d3RlKCksY0tlPU40KCksU3RlPVZCKCksTXRlPVN0ZSYmU3RlLmlzU2V0LHVLZT1NdGU/Y0tlKE10ZSk6bEtlO0V0ZS5leHBvcnRzPXVLZX0pO3ZhciBSc3Q9SCgocktuLEl0ZSk9Pnt2YXIgaEtlPVA0KCksZktlPUJCKCkscEtlPUw0KCksZEtlPXNRdCgpLG1LZT1kUXQoKSxnS2U9Z3N0KCksX0tlPV9zdCgpLHlLZT1FUXQoKSx2S2U9SVF0KCkseEtlPXdzdCgpLGJLZT1OUXQoKSx3S2U9S3YoKSxTS2U9S1F0KCksTUtlPWh0ZSgpLEVLZT1rc3QoKSxUS2U9VGkoKSxDS2U9WHYoKSxBS2U9eHRlKCksUEtlPU1sKCksSUtlPVR0ZSgpLExLZT1BZCgpLGtLZT1jMCgpLFJLZT0xLE5LZT0yLERLZT00LEN0ZT0iW29iamVjdCBBcmd1bWVudHNdIixPS2U9IltvYmplY3QgQXJyYXldIix6S2U9IltvYmplY3QgQm9vbGVhbl0iLEZLZT0iW29iamVjdCBEYXRlXSIsQktlPSJbb2JqZWN0IEVycm9yXSIsQXRlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsSEtlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsVktlPSJbb2JqZWN0IE1hcF0iLFVLZT0iW29iamVjdCBOdW1iZXJdIixQdGU9IltvYmplY3QgT2JqZWN0XSIscUtlPSJbb2JqZWN0IFJlZ0V4cF0iLEdLZT0iW29iamVjdCBTZXRdIixXS2U9IltvYmplY3QgU3RyaW5nXSIsWUtlPSJbb2JqZWN0IFN5bWJvbF0iLGpLZT0iW29iamVjdCBXZWFrTWFwXSIsWEtlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsJEtlPSJbb2JqZWN0IERhdGFWaWV3XSIsS0tlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFpLZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixKS2U9IltvYmplY3QgSW50OEFycmF5XSIsUUtlPSJbb2JqZWN0IEludDE2QXJyYXldIix0WmU9IltvYmplY3QgSW50MzJBcnJheV0iLGVaZT0iW29iamVjdCBVaW50OEFycmF5XSIsclplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsblplPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsaVplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ249e307Q25bQ3RlXT1DbltPS2VdPUNuW1hLZV09Q25bJEtlXT1Dblt6S2VdPUNuW0ZLZV09Q25bS0tlXT1DbltaS2VdPUNuW0pLZV09Q25bUUtlXT1Dblt0WmVdPUNuW1ZLZV09Q25bVUtlXT1DbltQdGVdPUNuW3FLZV09Q25bR0tlXT1DbltXS2VdPUNuW1lLZV09Q25bZVplXT1DbltyWmVdPUNuW25aZV09Q25baVplXT0hMDtDbltCS2VdPUNuW0F0ZV09Q25baktlXT0hMTtmdW5jdGlvbiBZQihlLHQscixuLGksbyl7dmFyIGEscz10JlJLZSxsPXQmTktlLGM9dCZES2U7aWYociYmKGE9aT9yKGUsbixpLG8pOnIoZSkpLGEhPT12b2lkIDApcmV0dXJuIGE7aWYoIVBLZShlKSlyZXR1cm4gZTt2YXIgdT1US2UoZSk7aWYodSl7aWYoYT1TS2UoZSksIXMpcmV0dXJuIF9LZShlLGEpfWVsc2V7dmFyIGg9d0tlKGUpLGY9aD09QXRlfHxoPT1IS2U7aWYoQ0tlKGUpKXJldHVybiBnS2UoZSxzKTtpZihoPT1QdGV8fGg9PUN0ZXx8ZiYmIWkpe2lmKGE9bHx8Zj97fTpFS2UoZSksIXMpcmV0dXJuIGw/dktlKGUsbUtlKGEsZSkpOnlLZShlLGRLZShhLGUpKX1lbHNle2lmKCFDbltoXSlyZXR1cm4gaT9lOnt9O2E9TUtlKGUsaCxzKX19b3x8KG89bmV3IGhLZSk7dmFyIHA9by5nZXQoZSk7aWYocClyZXR1cm4gcDtvLnNldChlLGEpLElLZShlKT9lLmZvckVhY2goZnVuY3Rpb24oXyl7YS5hZGQoWUIoXyx0LHIsXyxlLG8pKX0pOkFLZShlKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKF8seSl7YS5zZXQoeSxZQihfLHQscix5LGUsbykpfSk7dmFyIGQ9Yz9sP2JLZTp4S2U6bD9rS2U6TEtlLGc9dT92b2lkIDA6ZChlKTtyZXR1cm4gZktlKGd8fGUsZnVuY3Rpb24oXyx5KXtnJiYoeT1fLF89ZVt5XSkscEtlKGEseSxZQihfLHQscix5LGUsbykpfSksYX1JdGUuZXhwb3J0cz1ZQn0pO3ZhciBrdGU9SCgobktuLEx0ZSk9Pnt2YXIgb1plPVJzdCgpLGFaZT00O2Z1bmN0aW9uIHNaZShlKXtyZXR1cm4gb1plKGUsYVplKX1MdGUuZXhwb3J0cz1zWmV9KTt2YXIgakI9SCgoaUtuLFJ0ZSk9PntmdW5jdGlvbiBsWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fVJ0ZS5leHBvcnRzPWxaZX0pO3ZhciBEdGU9SCgob0tuLE50ZSk9PntmdW5jdGlvbiBjWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtmb3IodmFyIGk9LTEsbz1PYmplY3QodCksYT1uKHQpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIGw9YVtlP3M6KytpXTtpZihyKG9bbF0sbCxvKT09PSExKWJyZWFrfXJldHVybiB0fX1OdGUuZXhwb3J0cz1jWmV9KTt2YXIgWEI9SCgoYUtuLE90ZSk9Pnt2YXIgdVplPUR0ZSgpLGhaZT11WmUoKTtPdGUuZXhwb3J0cz1oWmV9KTt2YXIgJEI9SCgoc0tuLHp0ZSk9Pnt2YXIgZlplPVhCKCkscFplPUFkKCk7ZnVuY3Rpb24gZFplKGUsdCl7cmV0dXJuIGUmJmZaZShlLHQscFplKX16dGUuZXhwb3J0cz1kWmV9KTt2YXIgQnRlPUgoKGxLbixGdGUpPT57dmFyIG1aZT1CZigpO2Z1bmN0aW9uIGdaZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIW1aZShyKSlyZXR1cm4gZShyLG4pO2Zvcih2YXIgaT1yLmxlbmd0aCxvPXQ/aTotMSxhPU9iamVjdChyKTsodD9vLS06KytvPGkpJiZuKGFbb10sbyxhKSE9PSExOyk7cmV0dXJuIHJ9fUZ0ZS5leHBvcnRzPWdaZX0pO3ZhciBIND1IKChjS24sSHRlKT0+e3ZhciBfWmU9JEIoKSx5WmU9QnRlKCksdlplPXlaZShfWmUpO0h0ZS5leHBvcnRzPXZaZX0pO3ZhciB1MD1IKCh1S24sVnRlKT0+e2Z1bmN0aW9uIHhaZShlKXtyZXR1cm4gZX1WdGUuZXhwb3J0cz14WmV9KTt2YXIgTnN0PUgoKGhLbixVdGUpPT57dmFyIGJaZT11MCgpO2Z1bmN0aW9uIHdaZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpiWmV9VXRlLmV4cG9ydHM9d1plfSk7dmFyIERzdD1IKChmS24scXRlKT0+e3ZhciBTWmU9QkIoKSxNWmU9SDQoKSxFWmU9TnN0KCksVFplPVRpKCk7ZnVuY3Rpb24gQ1plKGUsdCl7dmFyIHI9VFplKGUpP1NaZTpNWmU7cmV0dXJuIHIoZSxFWmUodCkpfXF0ZS5leHBvcnRzPUNaZX0pO3ZhciBPc3Q9SCgocEtuLEd0ZSk9PntHdGUuZXhwb3J0cz1Ec3QoKX0pO3ZhciBZdGU9SCgoZEtuLFd0ZSk9Pnt2YXIgQVplPUg0KCk7ZnVuY3Rpb24gUFplKGUsdCl7dmFyIHI9W107cmV0dXJuIEFaZShlLGZ1bmN0aW9uKG4saSxvKXt0KG4saSxvKSYmci5wdXNoKG4pfSkscn1XdGUuZXhwb3J0cz1QWmV9KTt2YXIgWHRlPUgoKG1LbixqdGUpPT57dmFyIElaZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gTFplKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLElaZSksdGhpc31qdGUuZXhwb3J0cz1MWmV9KTt2YXIgS3RlPUgoKGdLbiwkdGUpPT57ZnVuY3Rpb24ga1plKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX0kdGUuZXhwb3J0cz1rWmV9KTt2YXIgenN0PUgoKF9LbixadGUpPT57dmFyIFJaZT1GQigpLE5aZT1YdGUoKSxEWmU9S3RlKCk7ZnVuY3Rpb24gS0IoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFJaZTsrK3Q8cjspdGhpcy5hZGQoZVt0XSl9S0IucHJvdG90eXBlLmFkZD1LQi5wcm90b3R5cGUucHVzaD1OWmU7S0IucHJvdG90eXBlLmhhcz1EWmU7WnRlLmV4cG9ydHM9S0J9KTt2YXIgUXRlPUgoKHlLbixKdGUpPT57ZnVuY3Rpb24gT1plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoOysrcjxuOylpZih0KGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX1KdGUuZXhwb3J0cz1PWmV9KTt2YXIgRnN0PUgoKHZLbix0ZWUpPT57ZnVuY3Rpb24gelplKGUsdCl7cmV0dXJuIGUuaGFzKHQpfXRlZS5leHBvcnRzPXpaZX0pO3ZhciBCc3Q9SCgoeEtuLGVlZSk9Pnt2YXIgRlplPXpzdCgpLEJaZT1RdGUoKSxIWmU9RnN0KCksVlplPTEsVVplPTI7ZnVuY3Rpb24gcVplKGUsdCxyLG4saSxvKXt2YXIgYT1yJlZaZSxzPWUubGVuZ3RoLGw9dC5sZW5ndGg7aWYocyE9bCYmIShhJiZsPnMpKXJldHVybiExO3ZhciBjPW8uZ2V0KGUpLHU9by5nZXQodCk7aWYoYyYmdSlyZXR1cm4gYz09dCYmdT09ZTt2YXIgaD0tMSxmPSEwLHA9ciZVWmU/bmV3IEZaZTp2b2lkIDA7Zm9yKG8uc2V0KGUsdCksby5zZXQodCxlKTsrK2g8czspe3ZhciBkPWVbaF0sZz10W2hdO2lmKG4pdmFyIF89YT9uKGcsZCxoLHQsZSxvKTpuKGQsZyxoLGUsdCxvKTtpZihfIT09dm9pZCAwKXtpZihfKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYocCl7aWYoIUJaZSh0LGZ1bmN0aW9uKHkseCl7aWYoIUhaZShwLHgpJiYoZD09PXl8fGkoZCx5LHIsbixvKSkpcmV0dXJuIHAucHVzaCh4KX0pKXtmPSExO2JyZWFrfX1lbHNlIGlmKCEoZD09PWd8fGkoZCxnLHIsbixvKSkpe2Y9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxmfWVlZS5leHBvcnRzPXFaZX0pO3ZhciBuZWU9SCgoYktuLHJlZSk9PntmdW5jdGlvbiBHWmUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obixpKXtyWysrdF09W2ksbl19KSxyfXJlZS5leHBvcnRzPUdaZX0pO3ZhciBaQj1IKCh3S24saWVlKT0+e2Z1bmN0aW9uIFdaZShlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrdF09bn0pLHJ9aWVlLmV4cG9ydHM9V1plfSk7dmFyIGNlZT1IKChTS24sbGVlKT0+e3ZhciBvZWU9anYoKSxhZWU9UHN0KCksWVplPVl2KCksalplPUJzdCgpLFhaZT1uZWUoKSwkWmU9WkIoKSxLWmU9MSxaWmU9MixKWmU9IltvYmplY3QgQm9vbGVhbl0iLFFaZT0iW29iamVjdCBEYXRlXSIsdEplPSJbb2JqZWN0IEVycm9yXSIsZUplPSJbb2JqZWN0IE1hcF0iLHJKZT0iW29iamVjdCBOdW1iZXJdIixuSmU9IltvYmplY3QgUmVnRXhwXSIsaUplPSJbb2JqZWN0IFNldF0iLG9KZT0iW29iamVjdCBTdHJpbmddIixhSmU9IltvYmplY3QgU3ltYm9sXSIsc0plPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsbEplPSJbb2JqZWN0IERhdGFWaWV3XSIsc2VlPW9lZT9vZWUucHJvdG90eXBlOnZvaWQgMCxIc3Q9c2VlP3NlZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBjSmUoZSx0LHIsbixpLG8sYSl7c3dpdGNoKHIpe2Nhc2UgbEplOmlmKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHxlLmJ5dGVPZmZzZXQhPXQuYnl0ZU9mZnNldClyZXR1cm4hMTtlPWUuYnVmZmVyLHQ9dC5idWZmZXI7Y2FzZSBzSmU6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IW8obmV3IGFlZShlKSxuZXcgYWVlKHQpKSk7Y2FzZSBKWmU6Y2FzZSBRWmU6Y2FzZSBySmU6cmV0dXJuIFlaZSgrZSwrdCk7Y2FzZSB0SmU6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIG5KZTpjYXNlIG9KZTpyZXR1cm4gZT09dCsiIjtjYXNlIGVKZTp2YXIgcz1YWmU7Y2FzZSBpSmU6dmFyIGw9biZLWmU7aWYoc3x8KHM9JFplKSxlLnNpemUhPXQuc2l6ZSYmIWwpcmV0dXJuITE7dmFyIGM9YS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtufD1aWmUsYS5zZXQoZSx0KTt2YXIgdT1qWmUocyhlKSxzKHQpLG4saSxvLGEpO3JldHVybiBhLmRlbGV0ZShlKSx1O2Nhc2UgYUplOmlmKEhzdClyZXR1cm4gSHN0LmNhbGwoZSk9PUhzdC5jYWxsKHQpfXJldHVybiExfWxlZS5leHBvcnRzPWNKZX0pO3ZhciBmZWU9SCgoTUtuLGhlZSk9Pnt2YXIgdWVlPXdzdCgpLHVKZT0xLGhKZT1PYmplY3QucHJvdG90eXBlLGZKZT1oSmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gcEplKGUsdCxyLG4saSxvKXt2YXIgYT1yJnVKZSxzPXVlZShlKSxsPXMubGVuZ3RoLGM9dWVlKHQpLHU9Yy5sZW5ndGg7aWYobCE9dSYmIWEpcmV0dXJuITE7Zm9yKHZhciBoPWw7aC0tOyl7dmFyIGY9c1toXTtpZighKGE/ZiBpbiB0OmZKZS5jYWxsKHQsZikpKXJldHVybiExfXZhciBwPW8uZ2V0KGUpLGQ9by5nZXQodCk7aWYocCYmZClyZXR1cm4gcD09dCYmZD09ZTt2YXIgZz0hMDtvLnNldChlLHQpLG8uc2V0KHQsZSk7Zm9yKHZhciBfPWE7KytoPGw7KXtmPXNbaF07dmFyIHk9ZVtmXSx4PXRbZl07aWYobil2YXIgYj1hP24oeCx5LGYsdCxlLG8pOm4oeSx4LGYsZSx0LG8pO2lmKCEoYj09PXZvaWQgMD95PT09eHx8aSh5LHgscixuLG8pOmIpKXtnPSExO2JyZWFrfV98fChfPWY9PSJjb25zdHJ1Y3RvciIpfWlmKGcmJiFfKXt2YXIgUz1lLmNvbnN0cnVjdG9yLEM9dC5jb25zdHJ1Y3RvcjtTIT1DJiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEodHlwZW9mIFM9PSJmdW5jdGlvbiImJlMgaW5zdGFuY2VvZiBTJiZ0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQyBpbnN0YW5jZW9mIEMpJiYoZz0hMSl9cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLGd9aGVlLmV4cG9ydHM9cEplfSk7dmFyIHhlZT1IKChFS24sdmVlKT0+e3ZhciBWc3Q9UDQoKSxkSmU9QnN0KCksbUplPWNlZSgpLGdKZT1mZWUoKSxwZWU9S3YoKSxkZWU9VGkoKSxtZWU9WHYoKSxfSmU9WVMoKSx5SmU9MSxnZWU9IltvYmplY3QgQXJndW1lbnRzXSIsX2VlPSJbb2JqZWN0IEFycmF5XSIsSkI9IltvYmplY3QgT2JqZWN0XSIsdkplPU9iamVjdC5wcm90b3R5cGUseWVlPXZKZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB4SmUoZSx0LHIsbixpLG8pe3ZhciBhPWRlZShlKSxzPWRlZSh0KSxsPWE/X2VlOnBlZShlKSxjPXM/X2VlOnBlZSh0KTtsPWw9PWdlZT9KQjpsLGM9Yz09Z2VlP0pCOmM7dmFyIHU9bD09SkIsaD1jPT1KQixmPWw9PWM7aWYoZiYmbWVlKGUpKXtpZighbWVlKHQpKXJldHVybiExO2E9ITAsdT0hMX1pZihmJiYhdSlyZXR1cm4gb3x8KG89bmV3IFZzdCksYXx8X0plKGUpP2RKZShlLHQscixuLGksbyk6bUplKGUsdCxsLHIsbixpLG8pO2lmKCEociZ5SmUpKXt2YXIgcD11JiZ5ZWUuY2FsbChlLCJfX3dyYXBwZWRfXyIpLGQ9aCYmeWVlLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihwfHxkKXt2YXIgZz1wP2UudmFsdWUoKTplLF89ZD90LnZhbHVlKCk6dDtyZXR1cm4gb3x8KG89bmV3IFZzdCksaShnLF8scixuLG8pfX1yZXR1cm4gZj8ob3x8KG89bmV3IFZzdCksZ0plKGUsdCxyLG4saSxvKSk6ITF9dmVlLmV4cG9ydHM9eEplfSk7dmFyIFVzdD1IKChUS24sU2VlKT0+e3ZhciBiSmU9eGVlKCksYmVlPVl1KCk7ZnVuY3Rpb24gd2VlKGUsdCxyLG4saSl7cmV0dXJuIGU9PT10PyEwOmU9PW51bGx8fHQ9PW51bGx8fCFiZWUoZSkmJiFiZWUodCk/ZSE9PWUmJnQhPT10OmJKZShlLHQscixuLHdlZSxpKX1TZWUuZXhwb3J0cz13ZWV9KTt2YXIgRWVlPUgoKENLbixNZWUpPT57dmFyIHdKZT1QNCgpLFNKZT1Vc3QoKSxNSmU9MSxFSmU9MjtmdW5jdGlvbiBUSmUoZSx0LHIsbil7dmFyIGk9ci5sZW5ndGgsbz1pLGE9IW47aWYoZT09bnVsbClyZXR1cm4hbztmb3IoZT1PYmplY3QoZSk7aS0tOyl7dmFyIHM9cltpXTtpZihhJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KytpPG87KXtzPXJbaV07dmFyIGw9c1swXSxjPWVbbF0sdT1zWzFdO2lmKGEmJnNbMl0pe2lmKGM9PT12b2lkIDAmJiEobCBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBoPW5ldyB3SmU7aWYobil2YXIgZj1uKGMsdSxsLGUsdCxoKTtpZighKGY9PT12b2lkIDA/U0plKHUsYyxNSmV8RUplLG4saCk6ZikpcmV0dXJuITF9fXJldHVybiEwfU1lZS5leHBvcnRzPVRKZX0pO3ZhciBxc3Q9SCgoQUtuLFRlZSk9Pnt2YXIgQ0plPU1sKCk7ZnVuY3Rpb24gQUplKGUpe3JldHVybiBlPT09ZSYmIUNKZShlKX1UZWUuZXhwb3J0cz1BSmV9KTt2YXIgQWVlPUgoKFBLbixDZWUpPT57dmFyIFBKZT1xc3QoKSxJSmU9QWQoKTtmdW5jdGlvbiBMSmUoZSl7Zm9yKHZhciB0PUlKZShlKSxyPXQubGVuZ3RoO3ItLTspe3ZhciBuPXRbcl0saT1lW25dO3Rbcl09W24saSxQSmUoaSldfXJldHVybiB0fUNlZS5leHBvcnRzPUxKZX0pO3ZhciBHc3Q9SCgoSUtuLFBlZSk9PntmdW5jdGlvbiBrSmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6cltlXT09PXQmJih0IT09dm9pZCAwfHxlIGluIE9iamVjdChyKSl9fVBlZS5leHBvcnRzPWtKZX0pO3ZhciBMZWU9SCgoTEtuLEllZSk9Pnt2YXIgUkplPUVlZSgpLE5KZT1BZWUoKSxESmU9R3N0KCk7ZnVuY3Rpb24gT0plKGUpe3ZhciB0PU5KZShlKTtyZXR1cm4gdC5sZW5ndGg9PTEmJnRbMF1bMl0/REplKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1lfHxSSmUocixlLHQpfX1JZWUuZXhwb3J0cz1PSmV9KTt2YXIgWnY9SCgoa0tuLGtlZSk9Pnt2YXIgekplPXMwKCksRkplPVl1KCksQkplPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIEhKZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wifHxGSmUoZSkmJnpKZShlKT09QkplfWtlZS5leHBvcnRzPUhKZX0pO3ZhciBRQj1IKChSS24sUmVlKT0+e3ZhciBWSmU9VGkoKSxVSmU9WnYoKSxxSmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sR0plPS9eXHcqJC87ZnVuY3Rpb24gV0plKGUsdCl7aWYoVkplKGUpKXJldHVybiExO3ZhciByPXR5cGVvZiBlO3JldHVybiByPT0ibnVtYmVyInx8cj09InN5bWJvbCJ8fHI9PSJib29sZWFuInx8ZT09bnVsbHx8VUplKGUpPyEwOkdKZS50ZXN0KGUpfHwhcUplLnRlc3QoZSl8fHQhPW51bGwmJmUgaW4gT2JqZWN0KHQpfVJlZS5leHBvcnRzPVdKZX0pO3ZhciBPZWU9SCgoTktuLERlZSk9Pnt2YXIgTmVlPUZCKCksWUplPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtmdW5jdGlvbiBXc3QoZSx0KXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uInx8dCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihZSmUpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9dD90LmFwcGx5KHRoaXMsbik6blswXSxvPXIuY2FjaGU7aWYoby5oYXMoaSkpcmV0dXJuIG8uZ2V0KGkpO3ZhciBhPWUuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1vLnNldChpLGEpfHxvLGF9O3JldHVybiByLmNhY2hlPW5ldyhXc3QuQ2FjaGV8fE5lZSkscn1Xc3QuQ2FjaGU9TmVlO0RlZS5leHBvcnRzPVdzdH0pO3ZhciBGZWU9SCgoREtuLHplZSk9Pnt2YXIgakplPU9lZSgpLFhKZT01MDA7ZnVuY3Rpb24gJEplKGUpe3ZhciB0PWpKZShlLGZ1bmN0aW9uKG4pe3JldHVybiByLnNpemU9PT1YSmUmJnIuY2xlYXIoKSxufSkscj10LmNhY2hlO3JldHVybiB0fXplZS5leHBvcnRzPSRKZX0pO3ZhciBIZWU9SCgoT0tuLEJlZSk9Pnt2YXIgS0plPUZlZSgpLFpKZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxKSmU9L1xcKFxcKT8vZyxRSmU9S0plKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT00NiYmdC5wdXNoKCIiKSxlLnJlcGxhY2UoWkplLGZ1bmN0aW9uKHIsbixpLG8pe3QucHVzaChpP28ucmVwbGFjZShKSmUsIiQxIik6bnx8cil9KSx0fSk7QmVlLmV4cG9ydHM9UUplfSk7dmFyIFY0PUgoKHpLbixWZWUpPT57ZnVuY3Rpb24gdFFlKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09dChlW3JdLHIsZSk7cmV0dXJuIGl9VmVlLmV4cG9ydHM9dFFlfSk7dmFyIGplZT1IKChGS24sWWVlKT0+e3ZhciBVZWU9anYoKSxlUWU9VjQoKSxyUWU9VGkoKSxuUWU9WnYoKSxpUWU9MS8wLHFlZT1VZWU/VWVlLnByb3RvdHlwZTp2b2lkIDAsR2VlPXFlZT9xZWUudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIFdlZShlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGU7aWYoclFlKGUpKXJldHVybiBlUWUoZSxXZWUpKyIiO2lmKG5RZShlKSlyZXR1cm4gR2VlP0dlZS5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0taVFlPyItMCI6dH1ZZWUuZXhwb3J0cz1XZWV9KTt2YXIgWXN0PUgoKEJLbixYZWUpPT57dmFyIG9RZT1qZWUoKTtmdW5jdGlvbiBhUWUoZSl7cmV0dXJuIGU9PW51bGw/IiI6b1FlKGUpfVhlZS5leHBvcnRzPWFRZX0pO3ZhciBVND1IKChIS24sJGVlKT0+e3ZhciBzUWU9VGkoKSxsUWU9UUIoKSxjUWU9SGVlKCksdVFlPVlzdCgpO2Z1bmN0aW9uIGhRZShlLHQpe3JldHVybiBzUWUoZSk/ZTpsUWUoZSx0KT9bZV06Y1FlKHVRZShlKSl9JGVlLmV4cG9ydHM9aFFlfSk7dmFyICRTPUgoKFZLbixLZWUpPT57dmFyIGZRZT1adigpLHBRZT0xLzA7ZnVuY3Rpb24gZFFlKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nInx8ZlFlKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tcFFlPyItMCI6dH1LZWUuZXhwb3J0cz1kUWV9KTt2YXIgcTQ9SCgoVUtuLFplZSk9Pnt2YXIgbVFlPVU0KCksZ1FlPSRTKCk7ZnVuY3Rpb24gX1FlKGUsdCl7dD1tUWUodCxlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO2UhPW51bGwmJnI8bjspZT1lW2dRZSh0W3IrK10pXTtyZXR1cm4gciYmcj09bj9lOnZvaWQgMH1aZWUuZXhwb3J0cz1fUWV9KTt2YXIgUWVlPUgoKHFLbixKZWUpPT57dmFyIHlRZT1xNCgpO2Z1bmN0aW9uIHZRZShlLHQscil7dmFyIG49ZT09bnVsbD92b2lkIDA6eVFlKGUsdCk7cmV0dXJuIG49PT12b2lkIDA/cjpufUplZS5leHBvcnRzPXZRZX0pO3ZhciBlcmU9SCgoR0tuLHRyZSk9PntmdW5jdGlvbiB4UWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmdCBpbiBPYmplY3QoZSl9dHJlLmV4cG9ydHM9eFFlfSk7dmFyIGpzdD1IKChXS24scnJlKT0+e3ZhciBiUWU9VTQoKSx3UWU9cVMoKSxTUWU9VGkoKSxNUWU9UjQoKSxFUWU9SEIoKSxUUWU9JFMoKTtmdW5jdGlvbiBDUWUoZSx0LHIpe3Q9YlFlKHQsZSk7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGgsbz0hMTsrK248aTspe3ZhciBhPVRRZSh0W25dKTtpZighKG89ZSE9bnVsbCYmcihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIG98fCsrbiE9aT9vOihpPWU9PW51bGw/MDplLmxlbmd0aCwhIWkmJkVRZShpKSYmTVFlKGEsaSkmJihTUWUoZSl8fHdRZShlKSkpfXJyZS5leHBvcnRzPUNRZX0pO3ZhciBYc3Q9SCgoWUtuLG5yZSk9Pnt2YXIgQVFlPWVyZSgpLFBRZT1qc3QoKTtmdW5jdGlvbiBJUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmUFFlKGUsdCxBUWUpfW5yZS5leHBvcnRzPUlRZX0pO3ZhciBvcmU9SCgoaktuLGlyZSk9Pnt2YXIgTFFlPVVzdCgpLGtRZT1RZWUoKSxSUWU9WHN0KCksTlFlPVFCKCksRFFlPXFzdCgpLE9RZT1Hc3QoKSx6UWU9JFMoKSxGUWU9MSxCUWU9MjtmdW5jdGlvbiBIUWUoZSx0KXtyZXR1cm4gTlFlKGUpJiZEUWUodCk/T1FlKHpRZShlKSx0KTpmdW5jdGlvbihyKXt2YXIgbj1rUWUocixlKTtyZXR1cm4gbj09PXZvaWQgMCYmbj09PXQ/UlFlKHIsZSk6TFFlKHQsbixGUWV8QlFlKX19aXJlLmV4cG9ydHM9SFFlfSk7dmFyICRzdD1IKChYS24sYXJlKT0+e2Z1bmN0aW9uIFZRZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dm9pZCAwOnRbZV19fWFyZS5leHBvcnRzPVZRZX0pO3ZhciBscmU9SCgoJEtuLHNyZSk9Pnt2YXIgVVFlPXE0KCk7ZnVuY3Rpb24gcVFlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVVFlKHQsZSl9fXNyZS5leHBvcnRzPXFRZX0pO3ZhciB1cmU9SCgoS0tuLGNyZSk9Pnt2YXIgR1FlPSRzdCgpLFdRZT1scmUoKSxZUWU9UUIoKSxqUWU9JFMoKTtmdW5jdGlvbiBYUWUoZSl7cmV0dXJuIFlRZShlKT9HUWUoalFlKGUpKTpXUWUoZSl9Y3JlLmV4cG9ydHM9WFFlfSk7dmFyIEhmPUgoKFpLbixocmUpPT57dmFyICRRZT1MZWUoKSxLUWU9b3JlKCksWlFlPXUwKCksSlFlPVRpKCksUVFlPXVyZSgpO2Z1bmN0aW9uIHR0cihlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT1udWxsP1pRZTp0eXBlb2YgZT09Im9iamVjdCI/SlFlKGUpP0tRZShlWzBdLGVbMV0pOiRRZShlKTpRUWUoZSl9aHJlLmV4cG9ydHM9dHRyfSk7dmFyIEtzdD1IKChKS24sZnJlKT0+e3ZhciBldHI9eXN0KCkscnRyPVl0ZSgpLG50cj1IZigpLGl0cj1UaSgpO2Z1bmN0aW9uIG90cihlLHQpe3ZhciByPWl0cihlKT9ldHI6cnRyO3JldHVybiByKGUsbnRyKHQsMykpfWZyZS5leHBvcnRzPW90cn0pO3ZhciBkcmU9SCgoUUtuLHByZSk9Pnt2YXIgYXRyPU9iamVjdC5wcm90b3R5cGUsc3RyPWF0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBsdHIoZSx0KXtyZXR1cm4gZSE9bnVsbCYmc3RyLmNhbGwoZSx0KX1wcmUuZXhwb3J0cz1sdHJ9KTt2YXIgWnN0PUgoKHRabixtcmUpPT57dmFyIGN0cj1kcmUoKSx1dHI9anN0KCk7ZnVuY3Rpb24gaHRyKGUsdCl7cmV0dXJuIGUhPW51bGwmJnV0cihlLHQsY3RyKX1tcmUuZXhwb3J0cz1odHJ9KTt2YXIgX3JlPUgoKGVabixncmUpPT57dmFyIGZ0cj1VQigpLHB0cj1LdigpLGR0cj1xUygpLG10cj1UaSgpLGd0cj1CZigpLF90cj1YdigpLHl0cj16NCgpLHZ0cj1ZUygpLHh0cj0iW29iamVjdCBNYXBdIixidHI9IltvYmplY3QgU2V0XSIsd3RyPU9iamVjdC5wcm90b3R5cGUsU3RyPXd0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBNdHIoZSl7aWYoZT09bnVsbClyZXR1cm4hMDtpZihndHIoZSkmJihtdHIoZSl8fHR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGUuc3BsaWNlPT0iZnVuY3Rpb24ifHxfdHIoZSl8fHZ0cihlKXx8ZHRyKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9cHRyKGUpO2lmKHQ9PXh0cnx8dD09YnRyKXJldHVybiFlLnNpemU7aWYoeXRyKGUpKXJldHVybiFmdHIoZSkubGVuZ3RoO2Zvcih2YXIgciBpbiBlKWlmKFN0ci5jYWxsKGUscikpcmV0dXJuITE7cmV0dXJuITB9Z3JlLmV4cG9ydHM9TXRyfSk7dmFyIEpzdD1IKChyWm4seXJlKT0+e2Z1bmN0aW9uIEV0cihlKXtyZXR1cm4gZT09PXZvaWQgMH15cmUuZXhwb3J0cz1FdHJ9KTt2YXIgUXN0PUgoKG5abix2cmUpPT57dmFyIFR0cj1INCgpLEN0cj1CZigpO2Z1bmN0aW9uIEF0cihlLHQpe3ZhciByPS0xLG49Q3RyKGUpP0FycmF5KGUubGVuZ3RoKTpbXTtyZXR1cm4gVHRyKGUsZnVuY3Rpb24oaSxvLGEpe25bKytyXT10KGksbyxhKX0pLG59dnJlLmV4cG9ydHM9QXRyfSk7dmFyIHRsdD1IKChpWm4seHJlKT0+e3ZhciBQdHI9VjQoKSxJdHI9SGYoKSxMdHI9UXN0KCksa3RyPVRpKCk7ZnVuY3Rpb24gUnRyKGUsdCl7dmFyIHI9a3RyKGUpP1B0cjpMdHI7cmV0dXJuIHIoZSxJdHIodCwzKSl9eHJlLmV4cG9ydHM9UnRyfSk7dmFyIHdyZT1IKChvWm4sYnJlKT0+e2Z1bmN0aW9uIE50cihlLHQscixuKXt2YXIgaT0tMSxvPWU9PW51bGw/MDplLmxlbmd0aDtmb3IobiYmbyYmKHI9ZVsrK2ldKTsrK2k8bzspcj10KHIsZVtpXSxpLGUpO3JldHVybiByfWJyZS5leHBvcnRzPU50cn0pO3ZhciBNcmU9SCgoYVpuLFNyZSk9PntmdW5jdGlvbiBEdHIoZSx0LHIsbixpKXtyZXR1cm4gaShlLGZ1bmN0aW9uKG8sYSxzKXtyPW4/KG49ITEsbyk6dChyLG8sYSxzKX0pLHJ9U3JlLmV4cG9ydHM9RHRyfSk7dmFyIGVsdD1IKChzWm4sRXJlKT0+e3ZhciBPdHI9d3JlKCksenRyPUg0KCksRnRyPUhmKCksQnRyPU1yZSgpLEh0cj1UaSgpO2Z1bmN0aW9uIFZ0cihlLHQscil7dmFyIG49SHRyKGUpP090cjpCdHIsaT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIG4oZSxGdHIodCw0KSxyLGksenRyKX1FcmUuZXhwb3J0cz1WdHJ9KTt2YXIgQ3JlPUgoKGxabixUcmUpPT57dmFyIFV0cj1zMCgpLHF0cj1UaSgpLEd0cj1ZdSgpLFd0cj0iW29iamVjdCBTdHJpbmddIjtmdW5jdGlvbiBZdHIoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nInx8IXF0cihlKSYmR3RyKGUpJiZVdHIoZSk9PVd0cn1UcmUuZXhwb3J0cz1ZdHJ9KTt2YXIgUHJlPUgoKGNabixBcmUpPT57dmFyIGp0cj0kc3QoKSxYdHI9anRyKCJsZW5ndGgiKTtBcmUuZXhwb3J0cz1YdHJ9KTt2YXIgTHJlPUgoKHVabixJcmUpPT57dmFyICR0cj0iXFx1ZDgwMC1cXHVkZmZmIixLdHI9IlxcdTAzMDAtXFx1MDM2ZiIsWnRyPSJcXHVmZTIwLVxcdWZlMmYiLEp0cj0iXFx1MjBkMC1cXHUyMGZmIixRdHI9S3RyK1p0citKdHIsdGVyPSJcXHVmZTBlXFx1ZmUwZiIsZWVyPSJcXHUyMDBkIixyZXI9UmVnRXhwKCJbIitlZXIrJHRyK1F0cit0ZXIrIl0iKTtmdW5jdGlvbiBuZXIoZSl7cmV0dXJuIHJlci50ZXN0KGUpfUlyZS5leHBvcnRzPW5lcn0pO3ZhciBIcmU9SCgoaFpuLEJyZSk9Pnt2YXIgUnJlPSJcXHVkODAwLVxcdWRmZmYiLGllcj0iXFx1MDMwMC1cXHUwMzZmIixvZXI9IlxcdWZlMjAtXFx1ZmUyZiIsYWVyPSJcXHUyMGQwLVxcdTIwZmYiLHNlcj1pZXIrb2VyK2FlcixsZXI9IlxcdWZlMGVcXHVmZTBmIixjZXI9IlsiK1JyZSsiXSIscmx0PSJbIitzZXIrIl0iLG5sdD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIix1ZXI9Iig/OiIrcmx0KyJ8IitubHQrIikiLE5yZT0iW14iK1JyZSsiXSIsRHJlPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixPcmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGhlcj0iXFx1MjAwZCIsenJlPXVlcisiPyIsRnJlPSJbIitsZXIrIl0/IixmZXI9Iig/OiIraGVyKyIoPzoiK1tOcmUsRHJlLE9yZV0uam9pbigifCIpKyIpIitGcmUrenJlKyIpKiIscGVyPUZyZSt6cmUrZmVyLGRlcj0iKD86IitbTnJlK3JsdCsiPyIscmx0LERyZSxPcmUsY2VyXS5qb2luKCJ8IikrIikiLGtyZT1SZWdFeHAobmx0KyIoPz0iK25sdCsiKXwiK2RlcitwZXIsImciKTtmdW5jdGlvbiBtZXIoZSl7Zm9yKHZhciB0PWtyZS5sYXN0SW5kZXg9MDtrcmUudGVzdChlKTspKyt0O3JldHVybiB0fUJyZS5leHBvcnRzPW1lcn0pO3ZhciBVcmU9SCgoZlpuLFZyZSk9Pnt2YXIgZ2VyPVByZSgpLF9lcj1McmUoKSx5ZXI9SHJlKCk7ZnVuY3Rpb24gdmVyKGUpe3JldHVybiBfZXIoZSk/eWVyKGUpOmdlcihlKX1WcmUuZXhwb3J0cz12ZXJ9KTt2YXIgR3JlPUgoKHBabixxcmUpPT57dmFyIHhlcj1VQigpLGJlcj1LdigpLHdlcj1CZigpLFNlcj1DcmUoKSxNZXI9VXJlKCksRWVyPSJbb2JqZWN0IE1hcF0iLFRlcj0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBDZXIoZSl7aWYoZT09bnVsbClyZXR1cm4gMDtpZih3ZXIoZSkpcmV0dXJuIFNlcihlKT9NZXIoZSk6ZS5sZW5ndGg7dmFyIHQ9YmVyKGUpO3JldHVybiB0PT1FZXJ8fHQ9PVRlcj9lLnNpemU6eGVyKGUpLmxlbmd0aH1xcmUuZXhwb3J0cz1DZXJ9KTt2YXIgWXJlPUgoKGRabixXcmUpPT57dmFyIEFlcj1CQigpLFBlcj1Mc3QoKSxJZXI9JEIoKSxMZXI9SGYoKSxrZXI9QjQoKSxSZXI9VGkoKSxOZXI9WHYoKSxEZXI9RlMoKSxPZXI9TWwoKSx6ZXI9WVMoKTtmdW5jdGlvbiBGZXIoZSx0LHIpe3ZhciBuPVJlcihlKSxpPW58fE5lcihlKXx8emVyKGUpO2lmKHQ9TGVyKHQsNCkscj09bnVsbCl7dmFyIG89ZSYmZS5jb25zdHJ1Y3RvcjtpP3I9bj9uZXcgbzpbXTpPZXIoZSk/cj1EZXIobyk/UGVyKGtlcihlKSk6e306cj17fX1yZXR1cm4oaT9BZXI6SWVyKShlLGZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdChyLGEscyxsKX0pLHJ9V3JlLmV4cG9ydHM9RmVyfSk7dmFyIEtyZT1IKChtWm4sJHJlKT0+e3ZhciBqcmU9anYoKSxCZXI9cVMoKSxIZXI9VGkoKSxYcmU9anJlP2pyZS5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIFZlcihlKXtyZXR1cm4gSGVyKGUpfHxCZXIoZSl8fCEhKFhyZSYmZSYmZVtYcmVdKX0kcmUuZXhwb3J0cz1WZXJ9KTt2YXIgdEg9SCgoZ1puLEpyZSk9Pnt2YXIgVWVyPUdCKCkscWVyPUtyZSgpO2Z1bmN0aW9uIFpyZShlLHQscixuLGkpe3ZhciBvPS0xLGE9ZS5sZW5ndGg7Zm9yKHJ8fChyPXFlciksaXx8KGk9W10pOysrbzxhOyl7dmFyIHM9ZVtvXTt0PjAmJnIocyk/dD4xP1pyZShzLHQtMSxyLG4saSk6VWVyKGkscyk6bnx8KGlbaS5sZW5ndGhdPXMpfXJldHVybiBpfUpyZS5leHBvcnRzPVpyZX0pO3ZhciB0bmU9SCgoX1puLFFyZSk9PntmdW5jdGlvbiBHZXIoZSx0LHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxyWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIGUuYXBwbHkodCxyKX1RcmUuZXhwb3J0cz1HZXJ9KTt2YXIgaWx0PUgoKHlabixybmUpPT57dmFyIFdlcj10bmUoKSxlbmU9TWF0aC5tYXg7ZnVuY3Rpb24gWWVyKGUsdCxyKXtyZXR1cm4gdD1lbmUodD09PXZvaWQgMD9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLGk9LTEsbz1lbmUobi5sZW5ndGgtdCwwKSxhPUFycmF5KG8pOysraTxvOylhW2ldPW5bdCtpXTtpPS0xO2Zvcih2YXIgcz1BcnJheSh0KzEpOysraTx0OylzW2ldPW5baV07cmV0dXJuIHNbdF09cihhKSxXZXIoZSx0aGlzLHMpfX1ybmUuZXhwb3J0cz1ZZXJ9KTt2YXIgb25lPUgoKHZabixpbmUpPT57dmFyIGplcj1qQigpLG5uZT1mc3QoKSxYZXI9dTAoKSwkZXI9bm5lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIG5uZShlLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmplcih0KSx3cml0YWJsZTohMH0pfTpYZXI7aW5lLmV4cG9ydHM9JGVyfSk7dmFyIHNuZT1IKCh4Wm4sYW5lKT0+e3ZhciBLZXI9ODAwLFplcj0xNixKZXI9RGF0ZS5ub3c7ZnVuY3Rpb24gUWVyKGUpe3ZhciB0PTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPUplcigpLGk9WmVyLShuLXIpO2lmKHI9bixpPjApe2lmKCsrdD49S2VyKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fWFuZS5leHBvcnRzPVFlcn0pO3ZhciBvbHQ9SCgoYlpuLGxuZSk9Pnt2YXIgdHJyPW9uZSgpLGVycj1zbmUoKSxycnI9ZXJyKHRycik7bG5lLmV4cG9ydHM9cnJyfSk7dmFyIEc0PUgoKHdabixjbmUpPT57dmFyIG5ycj11MCgpLGlycj1pbHQoKSxvcnI9b2x0KCk7ZnVuY3Rpb24gYXJyKGUsdCl7cmV0dXJuIG9ycihpcnIoZSx0LG5yciksZSsiIil9Y25lLmV4cG9ydHM9YXJyfSk7dmFyIGFsdD1IKChTWm4sdW5lKT0+e2Z1bmN0aW9uIHNycihlLHQscixuKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1yKyhuPzE6LTEpO24/by0tOisrbzxpOylpZih0KGVbb10sbyxlKSlyZXR1cm4gbztyZXR1cm4tMX11bmUuZXhwb3J0cz1zcnJ9KTt2YXIgZm5lPUgoKE1abixobmUpPT57ZnVuY3Rpb24gbHJyKGUpe3JldHVybiBlIT09ZX1obmUuZXhwb3J0cz1scnJ9KTt2YXIgZG5lPUgoKEVabixwbmUpPT57ZnVuY3Rpb24gY3JyKGUsdCxyKXtmb3IodmFyIG49ci0xLGk9ZS5sZW5ndGg7KytuPGk7KWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfXBuZS5leHBvcnRzPWNycn0pO3ZhciBnbmU9SCgoVFpuLG1uZSk9Pnt2YXIgdXJyPWFsdCgpLGhycj1mbmUoKSxmcnI9ZG5lKCk7ZnVuY3Rpb24gcHJyKGUsdCxyKXtyZXR1cm4gdD09PXQ/ZnJyKGUsdCxyKTp1cnIoZSxocnIscil9bW5lLmV4cG9ydHM9cHJyfSk7dmFyIHluZT1IKChDWm4sX25lKT0+e3ZhciBkcnI9Z25lKCk7ZnVuY3Rpb24gbXJyKGUsdCl7dmFyIHI9ZT09bnVsbD8wOmUubGVuZ3RoO3JldHVybiEhciYmZHJyKGUsdCwwKT4tMX1fbmUuZXhwb3J0cz1tcnJ9KTt2YXIgeG5lPUgoKEFabix2bmUpPT57ZnVuY3Rpb24gZ3JyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lPT1udWxsPzA6ZS5sZW5ndGg7KytuPGk7KWlmKHIodCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hMX12bmUuZXhwb3J0cz1ncnJ9KTt2YXIgd25lPUgoKFBabixibmUpPT57ZnVuY3Rpb24gX3JyKCl7fWJuZS5leHBvcnRzPV9ycn0pO3ZhciBNbmU9SCgoSVpuLFNuZSk9Pnt2YXIgc2x0PVNzdCgpLHlycj13bmUoKSx2cnI9WkIoKSx4cnI9MS8wLGJycj1zbHQmJjEvdnJyKG5ldyBzbHQoWywtMF0pKVsxXT09eHJyP2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgc2x0KGUpfTp5cnI7U25lLmV4cG9ydHM9YnJyfSk7dmFyIFRuZT1IKChMWm4sRW5lKT0+e3ZhciB3cnI9enN0KCksU3JyPXluZSgpLE1ycj14bmUoKSxFcnI9RnN0KCksVHJyPU1uZSgpLENycj1aQigpLEFycj0yMDA7ZnVuY3Rpb24gUHJyKGUsdCxyKXt2YXIgbj0tMSxpPVNycixvPWUubGVuZ3RoLGE9ITAscz1bXSxsPXM7aWYocilhPSExLGk9TXJyO2Vsc2UgaWYobz49QXJyKXt2YXIgYz10P251bGw6VHJyKGUpO2lmKGMpcmV0dXJuIENycihjKTthPSExLGk9RXJyLGw9bmV3IHdycn1lbHNlIGw9dD9bXTpzO3Q6Zm9yKDsrK248bzspe3ZhciB1PWVbbl0saD10P3QodSk6dTtpZih1PXJ8fHUhPT0wP3U6MCxhJiZoPT09aCl7Zm9yKHZhciBmPWwubGVuZ3RoO2YtLTspaWYobFtmXT09PWgpY29udGludWUgdDt0JiZsLnB1c2goaCkscy5wdXNoKHUpfWVsc2UgaShsLGgscil8fChsIT09cyYmbC5wdXNoKGgpLHMucHVzaCh1KSl9cmV0dXJuIHN9RW5lLmV4cG9ydHM9UHJyfSk7dmFyIGxsdD1IKChrWm4sQ25lKT0+e3ZhciBJcnI9QmYoKSxMcnI9WXUoKTtmdW5jdGlvbiBrcnIoZSl7cmV0dXJuIExycihlKSYmSXJyKGUpfUNuZS5leHBvcnRzPWtycn0pO3ZhciBQbmU9SCgoUlpuLEFuZSk9Pnt2YXIgUnJyPXRIKCksTnJyPUc0KCksRHJyPVRuZSgpLE9ycj1sbHQoKSx6cnI9TnJyKGZ1bmN0aW9uKGUpe3JldHVybiBEcnIoUnJyKGUsMSxPcnIsITApKX0pO0FuZS5leHBvcnRzPXpycn0pO3ZhciBMbmU9SCgoTlpuLEluZSk9Pnt2YXIgRnJyPVY0KCk7ZnVuY3Rpb24gQnJyKGUsdCl7cmV0dXJuIEZycih0LGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9SW5lLmV4cG9ydHM9QnJyfSk7dmFyIGNsdD1IKChEWm4sa25lKT0+e3ZhciBIcnI9TG5lKCksVnJyPUFkKCk7ZnVuY3Rpb24gVXJyKGUpe3JldHVybiBlPT1udWxsP1tdOkhycihlLFZycihlKSl9a25lLmV4cG9ydHM9VXJyfSk7dmFyIEVsPUgoKE9abixSbmUpPT57dmFyIGVIO2lmKHR5cGVvZiBFeD09ImZ1bmN0aW9uIil0cnl7ZUg9e2Nsb25lOmt0ZSgpLGNvbnN0YW50OmpCKCksZWFjaDpPc3QoKSxmaWx0ZXI6S3N0KCksaGFzOlpzdCgpLGlzQXJyYXk6VGkoKSxpc0VtcHR5Ol9yZSgpLGlzRnVuY3Rpb246RlMoKSxpc1VuZGVmaW5lZDpKc3QoKSxrZXlzOkFkKCksbWFwOnRsdCgpLHJlZHVjZTplbHQoKSxzaXplOkdyZSgpLHRyYW5zZm9ybTpZcmUoKSx1bmlvbjpQbmUoKSx2YWx1ZXM6Y2x0KCl9fWNhdGNoKGUpe31lSHx8KGVIPXdpbmRvdy5fKTtSbmUuZXhwb3J0cz1lSH0pO3ZhciBySD1IKChGWm4sem5lKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgamU9RWwoKTt6bmUuZXhwb3J0cz1jcjt2YXIgcXJyPSJcMCIsSnY9IlwwIixObmU9IgEiO2Z1bmN0aW9uIGNyKGUpe3RoaXMuX2lzRGlyZWN0ZWQ9amUuaGFzKGUsImRpcmVjdGVkIik/ZS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9amUuaGFzKGUsIm11bHRpZ3JhcGgiKT9lLm11bHRpZ3JhcGg6ITEsdGhpcy5faXNDb21wb3VuZD1qZS5oYXMoZSwiY29tcG91bmQiKT9lLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0p2XT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1jci5wcm90b3R5cGUuX25vZGVDb3VudD0wO2NyLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7Y3IucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH07Y3IucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9O2NyLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9O2NyLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbGFiZWw9ZSx0aGlzfTtjci5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9O2NyLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBqZS5pc0Z1bmN0aW9uKGUpfHwoZT1qZS5jb25zdGFudChlKSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWUsdGhpc307Y3IucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9O2NyLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiBqZS5rZXlzKHRoaXMuX25vZGVzKX07Y3IucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX2luW3RdKX0pfTtjci5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX291dFt0XSl9KX07Y3IucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLG49dGhpcztyZXR1cm4gamUuZWFjaChlLGZ1bmN0aW9uKGkpe3IubGVuZ3RoPjE/bi5zZXROb2RlKGksdCk6bi5zZXROb2RlKGkpfSksdGhpc307Y3IucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1tlXT10KSx0aGlzKToodGhpcy5fbm9kZXNbZV09YXJndW1lbnRzLmxlbmd0aD4xP3Q6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGUpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbZV09SnYsdGhpcy5fY2hpbGRyZW5bZV09e30sdGhpcy5fY2hpbGRyZW5bSnZdW2VdPSEwKSx0aGlzLl9pbltlXT17fSx0aGlzLl9wcmVkc1tlXT17fSx0aGlzLl9vdXRbZV09e30sdGhpcy5fc3Vjc1tlXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX07Y3IucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25vZGVzW2VdfTtjci5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpfTtjci5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGplLmhhcyh0aGlzLl9ub2RlcyxlKSl7dmFyIHI9ZnVuY3Rpb24obil7dC5yZW1vdmVFZGdlKHQuX2VkZ2VPYmpzW25dKX07ZGVsZXRlIHRoaXMuX25vZGVzW2VdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSxkZWxldGUgdGhpcy5fcGFyZW50W2VdLGplLmVhY2godGhpcy5jaGlsZHJlbihlKSxmdW5jdGlvbihuKXt0LnNldFBhcmVudChuKX0pLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXSksamUuZWFjaChqZS5rZXlzKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLGplLmVhY2goamUua2V5cyh0aGlzLl9vdXRbZV0pLHIpLGRlbGV0ZSB0aGlzLl9vdXRbZV0sZGVsZXRlIHRoaXMuX3N1Y3NbZV0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9O2NyLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoamUuaXNVbmRlZmluZWQodCkpdD1KdjtlbHNle3QrPSIiO2Zvcih2YXIgcj10OyFqZS5pc1VuZGVmaW5lZChyKTtyPXRoaXMucGFyZW50KHIpKWlmKHI9PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3QrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodCl9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09dCx0aGlzLl9jaGlsZHJlblt0XVtlXT0hMCx0aGlzfTtjci5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbZV1dW2VdfTtjci5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciB0PXRoaXMuX3BhcmVudFtlXTtpZih0IT09SnYpcmV0dXJuIHR9fTtjci5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24oZSl7aWYoamUuaXNVbmRlZmluZWQoZSkmJihlPUp2KSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdD10aGlzLl9jaGlsZHJlbltlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfWVsc2V7aWYoZT09PUp2KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKGUpKXJldHVybltdfX07Y3IucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcmVkc1tlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfTtjci5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zdWNzW2VdO2lmKHQpcmV0dXJuIGplLmtleXModCl9O2NyLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYodClyZXR1cm4gamUudW5pb24odCx0aGlzLnN1Y2Nlc3NvcnMoZSkpfTtjci5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT90PXRoaXMuc3VjY2Vzc29ycyhlKTp0PXRoaXMubmVpZ2hib3JzKGUpLHQubGVuZ3RoPT09MH07Y3IucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt0LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHI9dGhpcztqZS5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKG8sYSl7ZShhKSYmdC5zZXROb2RlKGEsbyl9KSxqZS5lYWNoKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKG8pe3QuaGFzTm9kZShvLnYpJiZ0Lmhhc05vZGUoby53KSYmdC5zZXRFZGdlKG8sci5lZGdlKG8pKX0pO3ZhciBuPXt9O2Z1bmN0aW9uIGkobyl7dmFyIGE9ci5wYXJlbnQobyk7cmV0dXJuIGE9PT12b2lkIDB8fHQuaGFzTm9kZShhKT8obltvXT1hLGEpOmEgaW4gbj9uW2FdOmkoYSl9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJmplLmVhY2godC5ub2RlcygpLGZ1bmN0aW9uKG8pe3Quc2V0UGFyZW50KG8saShvKSl9KSx0fTtjci5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbihlKXtyZXR1cm4gamUuaXNGdW5jdGlvbihlKXx8KGU9amUuY29uc3RhbnQoZSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fTtjci5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gamUudmFsdWVzKHRoaXMuX2VkZ2VPYmpzKX07Y3IucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBqZS5yZWR1Y2UoZSxmdW5jdGlvbihpLG8pe3JldHVybiBuLmxlbmd0aD4xP3Iuc2V0RWRnZShpLG8sdCk6ci5zZXRFZGdlKGksbyksb30pLHRoaXN9O2NyLnByb3RvdHlwZS5zZXRFZGdlPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saT0hMSxvPWFyZ3VtZW50c1swXTt0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsJiYidiJpbiBvPyhlPW8udix0PW8udyxyPW8ubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKG49YXJndW1lbnRzWzFdLGk9ITApKTooZT1vLHQ9YXJndW1lbnRzWzFdLHI9YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKG49YXJndW1lbnRzWzJdLGk9ITApKSxlPSIiK2UsdD0iIit0LGplLmlzVW5kZWZpbmVkKHIpfHwocj0iIityKTt2YXIgYT1XNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtpZihqZS5oYXModGhpcy5fZWRnZUxhYmVscyxhKSlyZXR1cm4gaSYmKHRoaXMuX2VkZ2VMYWJlbHNbYV09biksdGhpcztpZighamUuaXNVbmRlZmluZWQocikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9lZGdlTGFiZWxzW2FdPWk/bjp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSx0LHIpO3ZhciBzPUdycih0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gZT1zLnYsdD1zLncsT2JqZWN0LmZyZWV6ZShzKSx0aGlzLl9lZGdlT2Jqc1thXT1zLERuZSh0aGlzLl9wcmVkc1t0XSxlKSxEbmUodGhpcy5fc3Vjc1tlXSx0KSx0aGlzLl9pblt0XVthXT1zLHRoaXMuX291dFtlXVthXT1zLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW25dfTtjci5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/dWx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpXNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gamUuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbil9O2NyLnByb3RvdHlwZS5yZW1vdmVFZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpLGk9dGhpcy5fZWRnZU9ianNbbl07cmV0dXJuIGkmJihlPWkudix0PWkudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tuXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbbl0sT25lKHRoaXMuX3ByZWRzW3RdLGUpLE9uZSh0aGlzLl9zdWNzW2VdLHQpLGRlbGV0ZSB0aGlzLl9pblt0XVtuXSxkZWxldGUgdGhpcy5fb3V0W2VdW25dLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfTtjci5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2luW2VdO2lmKHIpe3ZhciBuPWplLnZhbHVlcyhyKTtyZXR1cm4gdD9qZS5maWx0ZXIobixmdW5jdGlvbihpKXtyZXR1cm4gaS52PT09dH0pOm59fTtjci5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9vdXRbZV07aWYocil7dmFyIG49amUudmFsdWVzKHIpO3JldHVybiB0P2plLmZpbHRlcihuLGZ1bmN0aW9uKGkpe3JldHVybiBpLnc9PT10fSk6bn19O2NyLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmluRWRnZXMoZSx0KTtpZihyKXJldHVybiByLmNvbmNhdCh0aGlzLm91dEVkZ2VzKGUsdCkpfTtmdW5jdGlvbiBEbmUoZSx0KXtlW3RdP2VbdF0rKzplW3RdPTF9ZnVuY3Rpb24gT25lKGUsdCl7LS1lW3RdfHxkZWxldGUgZVt0XX1mdW5jdGlvbiBXNChlLHQscixuKXt2YXIgaT0iIit0LG89IiIrcjtpZighZSYmaT5vKXt2YXIgYT1pO2k9byxvPWF9cmV0dXJuIGkrTm5lK28rTm5lKyhqZS5pc1VuZGVmaW5lZChuKT9xcnI6bil9ZnVuY3Rpb24gR3JyKGUsdCxyLG4pe3ZhciBpPSIiK3Qsbz0iIityO2lmKCFlJiZpPm8pe3ZhciBhPWk7aT1vLG89YX12YXIgcz17djppLHc6b307cmV0dXJuIG4mJihzLm5hbWU9biksc31mdW5jdGlvbiB1bHQoZSx0KXtyZXR1cm4gVzQoZSx0LnYsdC53LHQubmFtZSl9fSk7dmFyIEJuZT1IKChCWm4sRm5lKT0+e0ZuZS5leHBvcnRzPSIyLjEuOCJ9KTt2YXIgVm5lPUgoKEhabixIbmUpPT57SG5lLmV4cG9ydHM9e0dyYXBoOnJIKCksdmVyc2lvbjpCbmUoKX19KTt2YXIgcW5lPUgoKFZabixVbmUpPT57dmFyIFZmPUVsKCksV3JyPXJIKCk7VW5lLmV4cG9ydHM9e3dyaXRlOllycixyZWFkOiRycn07ZnVuY3Rpb24gWXJyKGUpe3ZhciB0PXtvcHRpb25zOntkaXJlY3RlZDplLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmUuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6ZS5pc0NvbXBvdW5kKCl9LG5vZGVzOmpycihlKSxlZGdlczpYcnIoZSl9O3JldHVybiBWZi5pc1VuZGVmaW5lZChlLmdyYXBoKCkpfHwodC52YWx1ZT1WZi5jbG9uZShlLmdyYXBoKCkpKSx0fWZ1bmN0aW9uIGpycihlKXtyZXR1cm4gVmYubWFwKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCksbj1lLnBhcmVudCh0KSxpPXt2OnR9O3JldHVybiBWZi5pc1VuZGVmaW5lZChyKXx8KGkudmFsdWU9ciksVmYuaXNVbmRlZmluZWQobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gWHJyKGUpe3JldHVybiBWZi5tYXAoZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KSxuPXt2OnQudix3OnQud307cmV0dXJuIFZmLmlzVW5kZWZpbmVkKHQubmFtZSl8fChuLm5hbWU9dC5uYW1lKSxWZi5pc1VuZGVmaW5lZChyKXx8KG4udmFsdWU9ciksbn0pfWZ1bmN0aW9uICRycihlKXt2YXIgdD1uZXcgV3JyKGUub3B0aW9ucykuc2V0R3JhcGgoZS52YWx1ZSk7cmV0dXJuIFZmLmVhY2goZS5ub2RlcyxmdW5jdGlvbihyKXt0LnNldE5vZGUoci52LHIudmFsdWUpLHIucGFyZW50JiZ0LnNldFBhcmVudChyLnYsci5wYXJlbnQpfSksVmYuZWFjaChlLmVkZ2VzLGZ1bmN0aW9uKHIpe3Quc2V0RWRnZSh7djpyLnYsdzpyLncsbmFtZTpyLm5hbWV9LHIudmFsdWUpfSksdH19KTt2YXIgV25lPUgoKFVabixHbmUpPT57dmFyIG5IPUVsKCk7R25lLmV4cG9ydHM9S3JyO2Z1bmN0aW9uIEtycihlKXt2YXIgdD17fSxyPVtdLG47ZnVuY3Rpb24gaShvKXtuSC5oYXModCxvKXx8KHRbb109ITAsbi5wdXNoKG8pLG5ILmVhY2goZS5zdWNjZXNzb3JzKG8pLGkpLG5ILmVhY2goZS5wcmVkZWNlc3NvcnMobyksaSkpfXJldHVybiBuSC5lYWNoKGUubm9kZXMoKSxmdW5jdGlvbihvKXtuPVtdLGkobyksbi5sZW5ndGgmJnIucHVzaChuKX0pLHJ9fSk7dmFyIGhsdD1IKChxWm4sam5lKT0+e3ZhciBZbmU9RWwoKTtqbmUuZXhwb3J0cz1WYztmdW5jdGlvbiBWYygpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fVZjLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9O1ZjLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSl9O1ZjLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFluZS5oYXModGhpcy5fa2V5SW5kaWNlcyxlKX07VmMucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2tleUluZGljZXNbZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdGhpcy5fYXJyW3RdLnByaW9yaXR5fTtWYy5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKCk9PT0wKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9O1ZjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzO2lmKGU9U3RyaW5nKGUpLCFZbmUuaGFzKHIsZSkpe3ZhciBuPXRoaXMuX2FycixpPW4ubGVuZ3RoO3JldHVybiByW2VdPWksbi5wdXNoKHtrZXk6ZSxwcmlvcml0eTp0fSksdGhpcy5fZGVjcmVhc2UoaSksITB9cmV0dXJuITF9O1ZjLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgZT10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW2Uua2V5XSx0aGlzLl9oZWFwaWZ5KDApLGUua2V5fTtWYy5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzW2VdO2lmKHQ+dGhpcy5fYXJyW3JdLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrZSsiIE9sZDogIit0aGlzLl9hcnJbcl0ucHJpb3JpdHkrIiBOZXc6ICIrdCk7dGhpcy5fYXJyW3JdLnByaW9yaXR5PXQsdGhpcy5fZGVjcmVhc2Uocil9O1ZjLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9hcnIscj0yKmUsbj1yKzEsaT1lO3I8dC5sZW5ndGgmJihpPXRbcl0ucHJpb3JpdHk8dFtpXS5wcmlvcml0eT9yOmksbjx0Lmxlbmd0aCYmKGk9dFtuXS5wcmlvcml0eTx0W2ldLnByaW9yaXR5P246aSksaSE9PWUmJih0aGlzLl9zd2FwKGUsaSksdGhpcy5faGVhcGlmeShpKSkpfTtWYy5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9hcnIscj10W2VdLnByaW9yaXR5LG47ZSE9PTAmJihuPWU+PjEsISh0W25dLnByaW9yaXR5PHIpKTspdGhpcy5fc3dhcChlLG4pLGU9bn07VmMucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYXJyLG49dGhpcy5fa2V5SW5kaWNlcyxpPXJbZV0sbz1yW3RdO3JbZV09byxyW3RdPWksbltvLmtleV09ZSxuW2kua2V5XT10fX0pO3ZhciBmbHQ9SCgoR1puLFhuZSk9Pnt2YXIgWnJyPUVsKCksSnJyPWhsdCgpO1huZS5leHBvcnRzPXRucjt2YXIgUXJyPVpyci5jb25zdGFudCgxKTtmdW5jdGlvbiB0bnIoZSx0LHIsbil7cmV0dXJuIGVucihlLFN0cmluZyh0KSxyfHxRcnIsbnx8ZnVuY3Rpb24oaSl7cmV0dXJuIGUub3V0RWRnZXMoaSl9KX1mdW5jdGlvbiBlbnIoZSx0LHIsbil7dmFyIGk9e30sbz1uZXcgSnJyLGEscyxsPWZ1bmN0aW9uKGMpe3ZhciB1PWMudiE9PWE/Yy52OmMudyxoPWlbdV0sZj1yKGMpLHA9cy5kaXN0YW5jZStmO2lmKGY8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrYysiIFdlaWdodDogIitmKTtwPGguZGlzdGFuY2UmJihoLmRpc3RhbmNlPXAsaC5wcmVkZWNlc3Nvcj1hLG8uZGVjcmVhc2UodSxwKSl9O2ZvcihlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jPT09dD8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtpW2NdPXtkaXN0YW5jZTp1fSxvLmFkZChjLHUpfSk7by5zaXplKCk+MCYmKGE9by5yZW1vdmVNaW4oKSxzPWlbYV0scy5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KW4oYSkuZm9yRWFjaChsKTtyZXR1cm4gaX19KTt2YXIgS25lPUgoKFdabiwkbmUpPT57dmFyIHJucj1mbHQoKSxubnI9RWwoKTskbmUuZXhwb3J0cz1pbnI7ZnVuY3Rpb24gaW5yKGUsdCxyKXtyZXR1cm4gbm5yLnRyYW5zZm9ybShlLm5vZGVzKCksZnVuY3Rpb24obixpKXtuW2ldPXJucihlLGksdCxyKX0se30pfX0pO3ZhciBwbHQ9SCgoWVpuLEpuZSk9Pnt2YXIgWm5lPUVsKCk7Sm5lLmV4cG9ydHM9b25yO2Z1bmN0aW9uIG9ucihlKXt2YXIgdD0wLHI9W10sbj17fSxpPVtdO2Z1bmN0aW9uIG8oYSl7dmFyIHM9blthXT17b25TdGFjazohMCxsb3dsaW5rOnQsaW5kZXg6dCsrfTtpZihyLnB1c2goYSksZS5zdWNjZXNzb3JzKGEpLmZvckVhY2goZnVuY3Rpb24odSl7Wm5lLmhhcyhuLHUpP25bdV0ub25TdGFjayYmKHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5pbmRleCkpOihvKHUpLHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5sb3dsaW5rKSl9KSxzLmxvd2xpbms9PT1zLmluZGV4KXt2YXIgbD1bXSxjO2RvIGM9ci5wb3AoKSxuW2NdLm9uU3RhY2s9ITEsbC5wdXNoKGMpO3doaWxlKGEhPT1jKTtpLnB1c2gobCl9fXJldHVybiBlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtabmUuaGFzKG4sYSl8fG8oYSl9KSxpfX0pO3ZhciB0aWU9SCgoalpuLFFuZSk9Pnt2YXIgYW5yPUVsKCksc25yPXBsdCgpO1FuZS5leHBvcnRzPWxucjtmdW5jdGlvbiBsbnIoZSl7cmV0dXJuIGFuci5maWx0ZXIoc25yKGUpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfHx0Lmxlbmd0aD09PTEmJmUuaGFzRWRnZSh0WzBdLHRbMF0pfSl9fSk7dmFyIHJpZT1IKChYWm4sZWllKT0+e3ZhciBjbnI9RWwoKTtlaWUuZXhwb3J0cz1obnI7dmFyIHVucj1jbnIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gaG5yKGUsdCxyKXtyZXR1cm4gZm5yKGUsdHx8dW5yLHJ8fGZ1bmN0aW9uKG4pe3JldHVybiBlLm91dEVkZ2VzKG4pfSl9ZnVuY3Rpb24gZm5yKGUsdCxyKXt2YXIgbj17fSxpPWUubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe25bb109e30sbltvXVtvXT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKGZ1bmN0aW9uKGEpe28hPT1hJiYobltvXVthXT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSl9KSxyKG8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHM9YS52PT09bz9hLnc6YS52LGw9dChhKTtuW29dW3NdPXtkaXN0YW5jZTpsLHByZWRlY2Vzc29yOm99fSl9KSxpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bltvXTtpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9bltzXTtpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9bFtvXSxoPWFbY10sZj1sW2NdLHA9dS5kaXN0YW5jZStoLmRpc3RhbmNlO3A8Zi5kaXN0YW5jZSYmKGYuZGlzdGFuY2U9cCxmLnByZWRlY2Vzc29yPWgucHJlZGVjZXNzb3IpfSl9KX0pLG59fSk7dmFyIGRsdD1IKCgkWm4saWllKT0+e3ZhciBZND1FbCgpO2lpZS5leHBvcnRzPW5pZTtuaWUuQ3ljbGVFeGNlcHRpb249aUg7ZnVuY3Rpb24gbmllKGUpe3ZhciB0PXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKG8pe2lmKFk0LmhhcyhyLG8pKXRocm93IG5ldyBpSDtZNC5oYXModCxvKXx8KHJbb109ITAsdFtvXT0hMCxZNC5lYWNoKGUucHJlZGVjZXNzb3JzKG8pLGkpLGRlbGV0ZSByW29dLG4ucHVzaChvKSl9aWYoWTQuZWFjaChlLnNpbmtzKCksaSksWTQuc2l6ZSh0KSE9PWUubm9kZUNvdW50KCkpdGhyb3cgbmV3IGlIO3JldHVybiBufWZ1bmN0aW9uIGlIKCl7fWlILnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgc2llPUgoKEtabixhaWUpPT57dmFyIG9pZT1kbHQoKTthaWUuZXhwb3J0cz1wbnI7ZnVuY3Rpb24gcG5yKGUpe3RyeXtvaWUoZSl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIG9pZS5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0pO3ZhciBtbHQ9SCgoWlpuLGNpZSk9Pnt2YXIgb0g9RWwoKTtjaWUuZXhwb3J0cz1kbnI7ZnVuY3Rpb24gZG5yKGUsdCxyKXtvSC5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBuPShlLmlzRGlyZWN0ZWQoKT9lLnN1Y2Nlc3NvcnM6ZS5uZWlnaGJvcnMpLmJpbmQoZSksaT1bXSxvPXt9O3JldHVybiBvSC5lYWNoKHQsZnVuY3Rpb24oYSl7aWYoIWUuaGFzTm9kZShhKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIithKTtsaWUoZSxhLHI9PT0icG9zdCIsbyxuLGkpfSksaX1mdW5jdGlvbiBsaWUoZSx0LHIsbixpLG8pe29ILmhhcyhuLHQpfHwoblt0XT0hMCxyfHxvLnB1c2godCksb0guZWFjaChpKHQpLGZ1bmN0aW9uKGEpe2xpZShlLGEscixuLGksbyl9KSxyJiZvLnB1c2godCkpfX0pO3ZhciBoaWU9SCgoSlpuLHVpZSk9Pnt2YXIgbW5yPW1sdCgpO3VpZS5leHBvcnRzPWducjtmdW5jdGlvbiBnbnIoZSx0KXtyZXR1cm4gbW5yKGUsdCwicG9zdCIpfX0pO3ZhciBwaWU9SCgoUVpuLGZpZSk9Pnt2YXIgX25yPW1sdCgpO2ZpZS5leHBvcnRzPXlucjtmdW5jdGlvbiB5bnIoZSx0KXtyZXR1cm4gX25yKGUsdCwicHJlIil9fSk7dmFyIGdpZT1IKCh0Sm4sbWllKT0+e3ZhciBkaWU9RWwoKSx2bnI9ckgoKSx4bnI9aGx0KCk7bWllLmV4cG9ydHM9Ym5yO2Z1bmN0aW9uIGJucihlLHQpe3ZhciByPW5ldyB2bnIsbj17fSxpPW5ldyB4bnIsbztmdW5jdGlvbiBhKGwpe3ZhciBjPWwudj09PW8/bC53Omwudix1PWkucHJpb3JpdHkoYyk7aWYodSE9PXZvaWQgMCl7dmFyIGg9dChsKTtoPHUmJihuW2NdPW8saS5kZWNyZWFzZShjLGgpKX19aWYoZS5ub2RlQ291bnQoKT09PTApcmV0dXJuIHI7ZGllLmVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGwpe2kuYWRkKGwsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyLnNldE5vZGUobCl9KSxpLmRlY3JlYXNlKGUubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7aS5zaXplKCk+MDspe2lmKG89aS5yZW1vdmVNaW4oKSxkaWUuaGFzKG4sbykpci5zZXRFZGdlKG8sbltvXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIitlKTtzPSEwfWUubm9kZUVkZ2VzKG8pLmZvckVhY2goYSl9cmV0dXJuIHJ9fSk7dmFyIHlpZT1IKChlSm4sX2llKT0+e19pZS5leHBvcnRzPXtjb21wb25lbnRzOlduZSgpLGRpamtzdHJhOmZsdCgpLGRpamtzdHJhQWxsOktuZSgpLGZpbmRDeWNsZXM6dGllKCksZmxveWRXYXJzaGFsbDpyaWUoKSxpc0FjeWNsaWM6c2llKCkscG9zdG9yZGVyOmhpZSgpLHByZW9yZGVyOnBpZSgpLHByaW06Z2llKCksdGFyamFuOnBsdCgpLHRvcHNvcnQ6ZGx0KCl9fSk7dmFyIGJpZT1IKChySm4seGllKT0+e3ZhciB2aWU9Vm5lKCk7eGllLmV4cG9ydHM9e0dyYXBoOnZpZS5HcmFwaCxqc29uOnFuZSgpLGFsZzp5aWUoKSx2ZXJzaW9uOnZpZS52ZXJzaW9ufX0pO3ZhciBVYz1IKChuSm4sd2llKT0+e3ZhciBhSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2FIPWJpZSgpfWNhdGNoKGUpe31hSHx8KGFIPXdpbmRvdy5ncmFwaGxpYik7d2llLmV4cG9ydHM9YUh9KTt2YXIgTWllPUgoKG9KbixTaWUpPT57dmFyIHducj1Sc3QoKSxTbnI9MSxNbnI9NDtmdW5jdGlvbiBFbnIoZSl7cmV0dXJuIHducihlLFNucnxNbnIpfVNpZS5leHBvcnRzPUVucn0pO3ZhciBqND1IKChhSm4sRWllKT0+e3ZhciBUbnI9WXYoKSxDbnI9QmYoKSxBbnI9UjQoKSxQbnI9TWwoKTtmdW5jdGlvbiBJbnIoZSx0LHIpe2lmKCFQbnIocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuKG49PSJudW1iZXIiP0NucihyKSYmQW5yKHQsci5sZW5ndGgpOm49PSJzdHJpbmciJiZ0IGluIHIpP1RucihyW3RdLGUpOiExfUVpZS5leHBvcnRzPUlucn0pO3ZhciBBaWU9SCgoc0puLENpZSk9Pnt2YXIgTG5yPUc0KCksa25yPVl2KCksUm5yPWo0KCksTm5yPWMwKCksVGllPU9iamVjdC5wcm90b3R5cGUsRG5yPVRpZS5oYXNPd25Qcm9wZXJ0eSxPbnI9TG5yKGZ1bmN0aW9uKGUsdCl7ZT1PYmplY3QoZSk7dmFyIHI9LTEsbj10Lmxlbmd0aCxpPW4+Mj90WzJdOnZvaWQgMDtmb3IoaSYmUm5yKHRbMF0sdFsxXSxpKSYmKG49MSk7KytyPG47KWZvcih2YXIgbz10W3JdLGE9Tm5yKG8pLHM9LTEsbD1hLmxlbmd0aDsrK3M8bDspe3ZhciBjPWFbc10sdT1lW2NdOyh1PT09dm9pZCAwfHxrbnIodSxUaWVbY10pJiYhRG5yLmNhbGwoZSxjKSkmJihlW2NdPW9bY10pfXJldHVybiBlfSk7Q2llLmV4cG9ydHM9T25yfSk7dmFyIElpZT1IKChsSm4sUGllKT0+e3ZhciB6bnI9SGYoKSxGbnI9QmYoKSxCbnI9QWQoKTtmdW5jdGlvbiBIbnIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1PYmplY3QodCk7aWYoIUZucih0KSl7dmFyIG89em5yKHIsMyk7dD1CbnIodCkscj1mdW5jdGlvbihzKXtyZXR1cm4gbyhpW3NdLHMsaSl9fXZhciBhPWUodCxyLG4pO3JldHVybiBhPi0xP2lbbz90W2FdOmFdOnZvaWQgMH19UGllLmV4cG9ydHM9SG5yfSk7dmFyIGtpZT1IKChjSm4sTGllKT0+e3ZhciBWbnI9L1xzLztmdW5jdGlvbiBVbnIoZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmVm5yLnRlc3QoZS5jaGFyQXQodCkpOyk7cmV0dXJuIHR9TGllLmV4cG9ydHM9VW5yfSk7dmFyIE5pZT1IKCh1Sm4sUmllKT0+e3ZhciBxbnI9a2llKCksR25yPS9eXHMrLztmdW5jdGlvbiBXbnIoZSl7cmV0dXJuIGUmJmUuc2xpY2UoMCxxbnIoZSkrMSkucmVwbGFjZShHbnIsIiIpfVJpZS5leHBvcnRzPVducn0pO3ZhciBGaWU9SCgoaEpuLHppZSk9Pnt2YXIgWW5yPU5pZSgpLERpZT1NbCgpLGpucj1adigpLE9pZT0wLzAsWG5yPS9eWy0rXTB4WzAtOWEtZl0rJC9pLCRucj0vXjBiWzAxXSskL2ksS25yPS9eMG9bMC03XSskL2ksWm5yPXBhcnNlSW50O2Z1bmN0aW9uIEpucihlKXtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7aWYoam5yKGUpKXJldHVybiBPaWU7aWYoRGllKGUpKXt2YXIgdD10eXBlb2YgZS52YWx1ZU9mPT0iZnVuY3Rpb24iP2UudmFsdWVPZigpOmU7ZT1EaWUodCk/dCsiIjp0fWlmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gZT09PTA/ZTorZTtlPVlucihlKTt2YXIgcj0kbnIudGVzdChlKTtyZXR1cm4gcnx8S25yLnRlc3QoZSk/Wm5yKGUuc2xpY2UoMikscj8yOjgpOlhuci50ZXN0KGUpP09pZTorZX16aWUuZXhwb3J0cz1KbnJ9KTt2YXIgZ2x0PUgoKGZKbixIaWUpPT57dmFyIFFucj1GaWUoKSxCaWU9MS8wLHRpcj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gZWlyKGUpe2lmKCFlKXJldHVybiBlPT09MD9lOjA7aWYoZT1RbnIoZSksZT09PUJpZXx8ZT09PS1CaWUpe3ZhciB0PWU8MD8tMToxO3JldHVybiB0KnRpcn1yZXR1cm4gZT09PWU/ZTowfUhpZS5leHBvcnRzPWVpcn0pO3ZhciBVaWU9SCgocEpuLFZpZSk9Pnt2YXIgcmlyPWdsdCgpO2Z1bmN0aW9uIG5pcihlKXt2YXIgdD1yaXIoZSkscj10JTE7cmV0dXJuIHQ9PT10P3I/dC1yOnQ6MH1WaWUuZXhwb3J0cz1uaXJ9KTt2YXIgR2llPUgoKGRKbixxaWUpPT57dmFyIGlpcj1hbHQoKSxvaXI9SGYoKSxhaXI9VWllKCksc2lyPU1hdGgubWF4O2Z1bmN0aW9uIGxpcihlLHQscil7dmFyIG49ZT09bnVsbD8wOmUubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDphaXIocik7cmV0dXJuIGk8MCYmKGk9c2lyKG4raSwwKSksaWlyKGUsb2lyKHQsMyksaSl9cWllLmV4cG9ydHM9bGlyfSk7dmFyIFlpZT1IKChtSm4sV2llKT0+e3ZhciBjaXI9SWllKCksdWlyPUdpZSgpLGhpcj1jaXIodWlyKTtXaWUuZXhwb3J0cz1oaXJ9KTt2YXIgX2x0PUgoKGdKbixqaWUpPT57dmFyIGZpcj10SCgpO2Z1bmN0aW9uIHBpcihlKXt2YXIgdD1lPT1udWxsPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/ZmlyKGUsMSk6W119amllLmV4cG9ydHM9cGlyfSk7dmFyICRpZT1IKChfSm4sWGllKT0+e3ZhciBkaXI9WEIoKSxtaXI9TnN0KCksZ2lyPWMwKCk7ZnVuY3Rpb24gX2lyKGUsdCl7cmV0dXJuIGU9PW51bGw/ZTpkaXIoZSxtaXIodCksZ2lyKX1YaWUuZXhwb3J0cz1faXJ9KTt2YXIgWmllPUgoKHlKbixLaWUpPT57ZnVuY3Rpb24geWlyKGUpe3ZhciB0PWU9PW51bGw/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06dm9pZCAwfUtpZS5leHBvcnRzPXlpcn0pO3ZhciBRaWU9SCgodkpuLEppZSk9Pnt2YXIgdmlyPUk0KCkseGlyPSRCKCksYmlyPUhmKCk7ZnVuY3Rpb24gd2lyKGUsdCl7dmFyIHI9e307cmV0dXJuIHQ9YmlyKHQsMykseGlyKGUsZnVuY3Rpb24obixpLG8pe3ZpcihyLGksdChuLGksbykpfSkscn1KaWUuZXhwb3J0cz13aXJ9KTt2YXIgc0g9SCgoeEpuLHRvZSk9Pnt2YXIgU2lyPVp2KCk7ZnVuY3Rpb24gTWlyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aDsrK248aTspe3ZhciBvPWVbbl0sYT10KG8pO2lmKGEhPW51bGwmJihzPT09dm9pZCAwP2E9PT1hJiYhU2lyKGEpOnIoYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9dG9lLmV4cG9ydHM9TWlyfSk7dmFyIHJvZT1IKChiSm4sZW9lKT0+e2Z1bmN0aW9uIEVpcihlLHQpe3JldHVybiBlPnR9ZW9lLmV4cG9ydHM9RWlyfSk7dmFyIGlvZT1IKCh3Sm4sbm9lKT0+e3ZhciBUaXI9c0goKSxDaXI9cm9lKCksQWlyPXUwKCk7ZnVuY3Rpb24gUGlyKGUpe3JldHVybiBlJiZlLmxlbmd0aD9UaXIoZSxBaXIsQ2lyKTp2b2lkIDB9bm9lLmV4cG9ydHM9UGlyfSk7dmFyIHlsdD1IKChTSm4sb29lKT0+e3ZhciBJaXI9STQoKSxMaXI9WXYoKTtmdW5jdGlvbiBraXIoZSx0LHIpeyhyIT09dm9pZCAwJiYhTGlyKGVbdF0scil8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJklpcihlLHQscil9b29lLmV4cG9ydHM9a2lyfSk7dmFyIGxvZT1IKChNSm4sc29lKT0+e3ZhciBSaXI9czAoKSxOaXI9QjQoKSxEaXI9WXUoKSxPaXI9IltvYmplY3QgT2JqZWN0XSIsemlyPUZ1bmN0aW9uLnByb3RvdHlwZSxGaXI9T2JqZWN0LnByb3RvdHlwZSxhb2U9emlyLnRvU3RyaW5nLEJpcj1GaXIuaGFzT3duUHJvcGVydHksSGlyPWFvZS5jYWxsKE9iamVjdCk7ZnVuY3Rpb24gVmlyKGUpe2lmKCFEaXIoZSl8fFJpcihlKSE9T2lyKXJldHVybiExO3ZhciB0PU5pcihlKTtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgcj1CaXIuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmciBpbnN0YW5jZW9mIHImJmFvZS5jYWxsKHIpPT1IaXJ9c29lLmV4cG9ydHM9VmlyfSk7dmFyIHZsdD1IKChFSm4sY29lKT0+e2Z1bmN0aW9uIFVpcihlLHQpe2lmKCEodD09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBlW3RdPT0iZnVuY3Rpb24iKSYmdCE9Il9fcHJvdG9fXyIpcmV0dXJuIGVbdF19Y29lLmV4cG9ydHM9VWlyfSk7dmFyIGhvZT1IKChUSm4sdW9lKT0+e3ZhciBxaXI9VVMoKSxHaXI9YzAoKTtmdW5jdGlvbiBXaXIoZSl7cmV0dXJuIHFpcihlLEdpcihlKSl9dW9lLmV4cG9ydHM9V2lyfSk7dmFyIF9vZT1IKChDSm4sZ29lKT0+e3ZhciBmb2U9eWx0KCksWWlyPWdzdCgpLGppcj1Jc3QoKSxYaXI9X3N0KCksJGlyPWtzdCgpLHBvZT1xUygpLGRvZT1UaSgpLEtpcj1sbHQoKSxaaXI9WHYoKSxKaXI9RlMoKSxRaXI9TWwoKSx0b3I9bG9lKCksZW9yPVlTKCksbW9lPXZsdCgpLHJvcj1ob2UoKTtmdW5jdGlvbiBub3IoZSx0LHIsbixpLG8sYSl7dmFyIHM9bW9lKGUsciksbD1tb2UodCxyKSxjPWEuZ2V0KGwpO2lmKGMpe2ZvZShlLHIsYyk7cmV0dXJufXZhciB1PW8/byhzLGwscisiIixlLHQsYSk6dm9pZCAwLGg9dT09PXZvaWQgMDtpZihoKXt2YXIgZj1kb2UobCkscD0hZiYmWmlyKGwpLGQ9IWYmJiFwJiZlb3IobCk7dT1sLGZ8fHB8fGQ/ZG9lKHMpP3U9czpLaXIocyk/dT1YaXIocyk6cD8oaD0hMSx1PVlpcihsLCEwKSk6ZD8oaD0hMSx1PWppcihsLCEwKSk6dT1bXTp0b3IobCl8fHBvZShsKT8odT1zLHBvZShzKT91PXJvcihzKTooIVFpcihzKXx8SmlyKHMpKSYmKHU9JGlyKGwpKSk6aD0hMX1oJiYoYS5zZXQobCx1KSxpKHUsbCxuLG8sYSksYS5kZWxldGUobCkpLGZvZShlLHIsdSl9Z29lLmV4cG9ydHM9bm9yfSk7dmFyIHhvZT1IKChBSm4sdm9lKT0+e3ZhciBpb3I9UDQoKSxvb3I9eWx0KCksYW9yPVhCKCksc29yPV9vZSgpLGxvcj1NbCgpLGNvcj1jMCgpLHVvcj12bHQoKTtmdW5jdGlvbiB5b2UoZSx0LHIsbixpKXtlIT09dCYmYW9yKHQsZnVuY3Rpb24obyxhKXtpZihpfHwoaT1uZXcgaW9yKSxsb3Iobykpc29yKGUsdCxhLHIseW9lLG4saSk7ZWxzZXt2YXIgcz1uP24odW9yKGUsYSksbyxhKyIiLGUsdCxpKTp2b2lkIDA7cz09PXZvaWQgMCYmKHM9byksb29yKGUsYSxzKX19LGNvcil9dm9lLmV4cG9ydHM9eW9lfSk7dmFyIHdvZT1IKChQSm4sYm9lKT0+e3ZhciBob3I9RzQoKSxwb3I9ajQoKTtmdW5jdGlvbiBkb3IoZSl7cmV0dXJuIGhvcihmdW5jdGlvbih0LHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsbz1pPjE/cltpLTFdOnZvaWQgMCxhPWk+Mj9yWzJdOnZvaWQgMDtmb3Iobz1lLmxlbmd0aD4zJiZ0eXBlb2Ygbz09ImZ1bmN0aW9uIj8oaS0tLG8pOnZvaWQgMCxhJiZwb3IoclswXSxyWzFdLGEpJiYobz1pPDM/dm9pZCAwOm8saT0xKSx0PU9iamVjdCh0KTsrK248aTspe3ZhciBzPXJbbl07cyYmZSh0LHMsbixvKX1yZXR1cm4gdH0pfWJvZS5leHBvcnRzPWRvcn0pO3ZhciBNb2U9SCgoSUpuLFNvZSk9Pnt2YXIgbW9yPXhvZSgpLGdvcj13b2UoKSxfb3I9Z29yKGZ1bmN0aW9uKGUsdCxyKXttb3IoZSx0LHIpfSk7U29lLmV4cG9ydHM9X29yfSk7dmFyIHhsdD1IKChMSm4sRW9lKT0+e2Z1bmN0aW9uIHlvcihlLHQpe3JldHVybiBlPHR9RW9lLmV4cG9ydHM9eW9yfSk7dmFyIENvZT1IKChrSm4sVG9lKT0+e3ZhciB2b3I9c0goKSx4b3I9eGx0KCksYm9yPXUwKCk7ZnVuY3Rpb24gd29yKGUpe3JldHVybiBlJiZlLmxlbmd0aD92b3IoZSxib3IseG9yKTp2b2lkIDB9VG9lLmV4cG9ydHM9d29yfSk7dmFyIFBvZT1IKChSSm4sQW9lKT0+e3ZhciBTb3I9c0goKSxNb3I9SGYoKSxFb3I9eGx0KCk7ZnVuY3Rpb24gVG9yKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP1NvcihlLE1vcih0LDIpLEVvcik6dm9pZCAwfUFvZS5leHBvcnRzPVRvcn0pO3ZhciBMb2U9SCgoTkpuLElvZSk9Pnt2YXIgQ29yPUhjKCksQW9yPWZ1bmN0aW9uKCl7cmV0dXJuIENvci5EYXRlLm5vdygpfTtJb2UuZXhwb3J0cz1Bb3J9KTt2YXIgTm9lPUgoKERKbixSb2UpPT57dmFyIFBvcj1MNCgpLElvcj1VNCgpLExvcj1SNCgpLGtvZT1NbCgpLGtvcj0kUygpO2Z1bmN0aW9uIFJvcihlLHQscixuKXtpZigha29lKGUpKXJldHVybiBlO3Q9SW9yKHQsZSk7Zm9yKHZhciBpPS0xLG89dC5sZW5ndGgsYT1vLTEscz1lO3MhPW51bGwmJisraTxvOyl7dmFyIGw9a29yKHRbaV0pLGM9cjtpZihsPT09Il9fcHJvdG9fXyJ8fGw9PT0iY29uc3RydWN0b3IifHxsPT09InByb3RvdHlwZSIpcmV0dXJuIGU7aWYoaSE9YSl7dmFyIHU9c1tsXTtjPW4/bih1LGwscyk6dm9pZCAwLGM9PT12b2lkIDAmJihjPWtvZSh1KT91Okxvcih0W2krMV0pP1tdOnt9KX1Qb3IocyxsLGMpLHM9c1tsXX1yZXR1cm4gZX1Sb2UuZXhwb3J0cz1Sb3J9KTt2YXIgT29lPUgoKE9KbixEb2UpPT57dmFyIE5vcj1xNCgpLERvcj1Ob2UoKSxPb3I9VTQoKTtmdW5jdGlvbiB6b3IoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLG89e307KytuPGk7KXt2YXIgYT10W25dLHM9Tm9yKGUsYSk7cihzLGEpJiZEb3IobyxPb3IoYSxlKSxzKX1yZXR1cm4gb31Eb2UuZXhwb3J0cz16b3J9KTt2YXIgRm9lPUgoKHpKbix6b2UpPT57dmFyIEZvcj1Pb2UoKSxCb3I9WHN0KCk7ZnVuY3Rpb24gSG9yKGUsdCl7cmV0dXJuIEZvcihlLHQsZnVuY3Rpb24ocixuKXtyZXR1cm4gQm9yKGUsbil9KX16b2UuZXhwb3J0cz1Ib3J9KTt2YXIgSG9lPUgoKEZKbixCb2UpPT57dmFyIFZvcj1fbHQoKSxVb3I9aWx0KCkscW9yPW9sdCgpO2Z1bmN0aW9uIEdvcihlKXtyZXR1cm4gcW9yKFVvcihlLHZvaWQgMCxWb3IpLGUrIiIpfUJvZS5leHBvcnRzPUdvcn0pO3ZhciBVb2U9SCgoQkpuLFZvZSk9Pnt2YXIgV29yPUZvZSgpLFlvcj1Ib2UoKSxqb3I9WW9yKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/e306V29yKGUsdCl9KTtWb2UuZXhwb3J0cz1qb3J9KTt2YXIgR29lPUgoKEhKbixxb2UpPT57dmFyIFhvcj1NYXRoLmNlaWwsJG9yPU1hdGgubWF4O2Z1bmN0aW9uIEtvcihlLHQscixuKXtmb3IodmFyIGk9LTEsbz0kb3IoWG9yKCh0LWUpLyhyfHwxKSksMCksYT1BcnJheShvKTtvLS07KWFbbj9vOisraV09ZSxlKz1yO3JldHVybiBhfXFvZS5leHBvcnRzPUtvcn0pO3ZhciBZb2U9SCgoVkpuLFdvZSk9Pnt2YXIgWm9yPUdvZSgpLEpvcj1qNCgpLGJsdD1nbHQoKTtmdW5jdGlvbiBRb3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbiYmdHlwZW9mIG4hPSJudW1iZXIiJiZKb3IodCxyLG4pJiYocj1uPXZvaWQgMCksdD1ibHQodCkscj09PXZvaWQgMD8ocj10LHQ9MCk6cj1ibHQociksbj1uPT09dm9pZCAwP3Q8cj8xOi0xOmJsdChuKSxab3IodCxyLG4sZSl9fVdvZS5leHBvcnRzPVFvcn0pO3ZhciBYb2U9SCgoVUpuLGpvZSk9Pnt2YXIgdGFyPVlvZSgpLGVhcj10YXIoKTtqb2UuZXhwb3J0cz1lYXJ9KTt2YXIgS29lPUgoKHFKbiwkb2UpPT57ZnVuY3Rpb24gcmFyKGUsdCl7dmFyIHI9ZS5sZW5ndGg7Zm9yKGUuc29ydCh0KTtyLS07KWVbcl09ZVtyXS52YWx1ZTtyZXR1cm4gZX0kb2UuZXhwb3J0cz1yYXJ9KTt2YXIgUW9lPUgoKEdKbixKb2UpPT57dmFyIFpvZT1adigpO2Z1bmN0aW9uIG5hcihlLHQpe2lmKGUhPT10KXt2YXIgcj1lIT09dm9pZCAwLG49ZT09PW51bGwsaT1lPT09ZSxvPVpvZShlKSxhPXQhPT12b2lkIDAscz10PT09bnVsbCxsPXQ9PT10LGM9Wm9lKHQpO2lmKCFzJiYhYyYmIW8mJmU+dHx8byYmYSYmbCYmIXMmJiFjfHxuJiZhJiZsfHwhciYmbHx8IWkpcmV0dXJuIDE7aWYoIW4mJiFvJiYhYyYmZTx0fHxjJiZyJiZpJiYhbiYmIW98fHMmJnImJml8fCFhJiZpfHwhbClyZXR1cm4tMX1yZXR1cm4gMH1Kb2UuZXhwb3J0cz1uYXJ9KTt2YXIgZWFlPUgoKFdKbix0YWUpPT57dmFyIGlhcj1Rb2UoKTtmdW5jdGlvbiBvYXIoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPWUuY3JpdGVyaWEsbz10LmNyaXRlcmlhLGE9aS5sZW5ndGgscz1yLmxlbmd0aDsrK248YTspe3ZhciBsPWlhcihpW25dLG9bbl0pO2lmKGwpe2lmKG4+PXMpcmV0dXJuIGw7dmFyIGM9cltuXTtyZXR1cm4gbCooYz09ImRlc2MiPy0xOjEpfX1yZXR1cm4gZS5pbmRleC10LmluZGV4fXRhZS5leHBvcnRzPW9hcn0pO3ZhciBuYWU9SCgoWUpuLHJhZSk9Pnt2YXIgd2x0PVY0KCksYWFyPXE0KCksc2FyPUhmKCksbGFyPVFzdCgpLGNhcj1Lb2UoKSx1YXI9TjQoKSxoYXI9ZWFlKCksZmFyPXUwKCkscGFyPVRpKCk7ZnVuY3Rpb24gZGFyKGUsdCxyKXt0Lmxlbmd0aD90PXdsdCh0LGZ1bmN0aW9uKG8pe3JldHVybiBwYXIobyk/ZnVuY3Rpb24oYSl7cmV0dXJuIGFhcihhLG8ubGVuZ3RoPT09MT9vWzBdOm8pfTpvfSk6dD1bZmFyXTt2YXIgbj0tMTt0PXdsdCh0LHVhcihzYXIpKTt2YXIgaT1sYXIoZSxmdW5jdGlvbihvLGEscyl7dmFyIGw9d2x0KHQsZnVuY3Rpb24oYyl7cmV0dXJuIGMobyl9KTtyZXR1cm57Y3JpdGVyaWE6bCxpbmRleDorK24sdmFsdWU6b319KTtyZXR1cm4gY2FyKGksZnVuY3Rpb24obyxhKXtyZXR1cm4gaGFyKG8sYSxyKX0pfXJhZS5leHBvcnRzPWRhcn0pO3ZhciBhYWU9SCgoakpuLG9hZSk9Pnt2YXIgbWFyPXRIKCksZ2FyPW5hZSgpLF9hcj1HNCgpLGlhZT1qNCgpLHlhcj1fYXIoZnVuY3Rpb24oZSx0KXtpZihlPT1udWxsKXJldHVybltdO3ZhciByPXQubGVuZ3RoO3JldHVybiByPjEmJmlhZShlLHRbMF0sdFsxXSk/dD1bXTpyPjImJmlhZSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksZ2FyKGUsbWFyKHQsMSksW10pfSk7b2FlLmV4cG9ydHM9eWFyfSk7dmFyIGxhZT1IKChYSm4sc2FlKT0+e3ZhciB4YXI9WXN0KCksYmFyPTA7ZnVuY3Rpb24gd2FyKGUpe3ZhciB0PSsrYmFyO3JldHVybiB4YXIoZSkrdH1zYWUuZXhwb3J0cz13YXJ9KTt2YXIgdWFlPUgoKCRKbixjYWUpPT57ZnVuY3Rpb24gU2FyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aCxvPXQubGVuZ3RoLGE9e307KytuPGk7KXt2YXIgcz1uPG8/dFtuXTp2b2lkIDA7cihhLGVbbl0scyl9cmV0dXJuIGF9Y2FlLmV4cG9ydHM9U2FyfSk7dmFyIGZhZT1IKChLSm4saGFlKT0+e3ZhciBNYXI9TDQoKSxFYXI9dWFlKCk7ZnVuY3Rpb24gVGFyKGUsdCl7cmV0dXJuIEVhcihlfHxbXSx0fHxbXSxNYXIpfWhhZS5leHBvcnRzPVRhcn0pO3ZhciBVbj1IKChaSm4scGFlKT0+e3ZhciBsSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2xIPXtjbG9uZURlZXA6TWllKCksY29uc3RhbnQ6akIoKSxkZWZhdWx0czpBaWUoKSxlYWNoOk9zdCgpLGZpbHRlcjpLc3QoKSxmaW5kOllpZSgpLGZsYXR0ZW46X2x0KCksZm9yRWFjaDpEc3QoKSxmb3JJbjokaWUoKSxoYXM6WnN0KCksaXNVbmRlZmluZWQ6SnN0KCksbGFzdDpaaWUoKSxtYXA6dGx0KCksbWFwVmFsdWVzOlFpZSgpLG1heDppb2UoKSxtZXJnZTpNb2UoKSxtaW46Q29lKCksbWluQnk6UG9lKCksbm93OkxvZSgpLHBpY2s6VW9lKCkscmFuZ2U6WG9lKCkscmVkdWNlOmVsdCgpLHNvcnRCeTphYWUoKSx1bmlxdWVJZDpsYWUoKSx2YWx1ZXM6Y2x0KCksemlwT2JqZWN0OmZhZSgpfX1jYXRjaChlKXt9bEh8fChsSD13aW5kb3cuXyk7cGFlLmV4cG9ydHM9bEh9KTt2YXIgZ2FlPUgoKFFKbixtYWUpPT57bWFlLmV4cG9ydHM9Y0g7ZnVuY3Rpb24gY0goKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWNILnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2VudGluZWwsdD1lLl9wcmV2O2lmKHQhPT1lKXJldHVybiBkYWUodCksdH07Y0gucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmZGFlKGUpLGUuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PWUsdC5fbmV4dD1lLGUuX3ByZXY9dH07Y0gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9dGhpcy5fc2VudGluZWwscj10Ll9wcmV2O3IhPT10OyllLnB1c2goSlNPTi5zdHJpbmdpZnkocixDYXIpKSxyPXIuX3ByZXY7cmV0dXJuIlsiK2Uuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIGRhZShlKXtlLl9wcmV2Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj1lLl9wcmV2LGRlbGV0ZSBlLl9uZXh0LGRlbGV0ZSBlLl9wcmV2fWZ1bmN0aW9uIENhcihlLHQpe2lmKGUhPT0iX25leHQiJiZlIT09Il9wcmV2IilyZXR1cm4gdH19KTt2YXIgeWFlPUgoKHRRbixfYWUpPT57dmFyIFBkPVVuKCksQWFyPVVjKCkuR3JhcGgsUGFyPWdhZSgpO19hZS5leHBvcnRzPUxhcjt2YXIgSWFyPVBkLmNvbnN0YW50KDEpO2Z1bmN0aW9uIExhcihlLHQpe2lmKGUubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIHI9UmFyKGUsdHx8SWFyKSxuPWthcihyLmdyYXBoLHIuYnVja2V0cyxyLnplcm9JZHgpO3JldHVybiBQZC5mbGF0dGVuKFBkLm1hcChuLGZ1bmN0aW9uKGkpe3JldHVybiBlLm91dEVkZ2VzKGkudixpLncpfSksITApfWZ1bmN0aW9uIGthcihlLHQscil7Zm9yKHZhciBuPVtdLGk9dFt0Lmxlbmd0aC0xXSxvPXRbMF0sYTtlLm5vZGVDb3VudCgpOyl7Zm9yKDthPW8uZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7Zm9yKDthPWkuZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7aWYoZS5ub2RlQ291bnQoKSl7Zm9yKHZhciBzPXQubGVuZ3RoLTI7cz4wOy0tcylpZihhPXRbc10uZGVxdWV1ZSgpLGEpe249bi5jb25jYXQoU2x0KGUsdCxyLGEsITApKTticmVha319fXJldHVybiBufWZ1bmN0aW9uIFNsdChlLHQscixuLGkpe3ZhciBvPWk/W106dm9pZCAwO3JldHVybiBQZC5mb3JFYWNoKGUuaW5FZGdlcyhuLnYpLGZ1bmN0aW9uKGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO2kmJm8ucHVzaCh7djphLnYsdzphLnd9KSxsLm91dC09cyxNbHQodCxyLGwpfSksUGQuZm9yRWFjaChlLm91dEVkZ2VzKG4udiksZnVuY3Rpb24oYSl7dmFyIHM9ZS5lZGdlKGEpLGw9YS53LGM9ZS5ub2RlKGwpO2MuaW4tPXMsTWx0KHQscixjKX0pLGUucmVtb3ZlTm9kZShuLnYpLG99ZnVuY3Rpb24gUmFyKGUsdCl7dmFyIHI9bmV3IEFhcixuPTAsaT0wO1BkLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHMpe3Iuc2V0Tm9kZShzLHt2OnMsaW46MCxvdXQ6MH0pfSksUGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIGw9ci5lZGdlKHMudixzLncpfHwwLGM9dChzKSx1PWwrYztyLnNldEVkZ2Uocy52LHMudyx1KSxpPU1hdGgubWF4KGksci5ub2RlKHMudikub3V0Kz1jKSxuPU1hdGgubWF4KG4sci5ub2RlKHMudykuaW4rPWMpfSk7dmFyIG89UGQucmFuZ2UoaStuKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgUGFyfSksYT1uKzE7cmV0dXJuIFBkLmZvckVhY2goci5ub2RlcygpLGZ1bmN0aW9uKHMpe01sdChvLGEsci5ub2RlKHMpKX0pLHtncmFwaDpyLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fWZ1bmN0aW9uIE1sdChlLHQscil7ci5vdXQ/ci5pbj9lW3Iub3V0LXIuaW4rdF0uZW5xdWV1ZShyKTplW2UubGVuZ3RoLTFdLmVucXVldWUocik6ZVswXS5lbnF1ZXVlKHIpfX0pO3ZhciB4YWU9SCgoZVFuLHZhZSk9PnsidXNlIHN0cmljdCI7dmFyIFF2PVVuKCksTmFyPXlhZSgpO3ZhZS5leHBvcnRzPXtydW46RGFyLHVuZG86emFyfTtmdW5jdGlvbiBEYXIoZSl7dmFyIHQ9ZS5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP05hcihlLHIoZSkpOk9hcihlKTtRdi5mb3JFYWNoKHQsZnVuY3Rpb24obil7dmFyIGk9ZS5lZGdlKG4pO2UucmVtb3ZlRWRnZShuKSxpLmZvcndhcmROYW1lPW4ubmFtZSxpLnJldmVyc2VkPSEwLGUuc2V0RWRnZShuLncsbi52LGksUXYudW5pcXVlSWQoInJldiIpKX0pO2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLmVkZ2UoaSkud2VpZ2h0fX19ZnVuY3Rpb24gT2FyKGUpe3ZhciB0PVtdLHI9e30sbj17fTtmdW5jdGlvbiBpKG8pe1F2LmhhcyhuLG8pfHwobltvXT0hMCxyW29dPSEwLFF2LmZvckVhY2goZS5vdXRFZGdlcyhvKSxmdW5jdGlvbihhKXtRdi5oYXMocixhLncpP3QucHVzaChhKTppKGEudyl9KSxkZWxldGUgcltvXSl9cmV0dXJuIFF2LmZvckVhY2goZS5ub2RlcygpLGkpLHR9ZnVuY3Rpb24gemFyKGUpe1F2LmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihyLnJldmVyc2VkKXtlLnJlbW92ZUVkZ2UodCk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSxlLnNldEVkZ2UodC53LHQudixyLG4pfX0pfX0pO3ZhciBucz1IKChyUW4sTWFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUXI9VW4oKSxiYWU9VWMoKS5HcmFwaDtNYWUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOndhZSxzaW1wbGlmeTpGYXIsYXNOb25Db21wb3VuZEdyYXBoOkJhcixzdWNjZXNzb3JXZWlnaHRzOkhhcixwcmVkZWNlc3NvcldlaWdodHM6VmFyLGludGVyc2VjdFJlY3Q6VWFyLGJ1aWxkTGF5ZXJNYXRyaXg6cWFyLG5vcm1hbGl6ZVJhbmtzOkdhcixyZW1vdmVFbXB0eVJhbmtzOldhcixhZGRCb3JkZXJOb2RlOllhcixtYXhSYW5rOlNhZSxwYXJ0aXRpb246amFyLHRpbWU6WGFyLG5vdGltZTokYXJ9O2Z1bmN0aW9uIHdhZShlLHQscixuKXt2YXIgaTtkbyBpPVFyLnVuaXF1ZUlkKG4pO3doaWxlKGUuaGFzTm9kZShpKSk7cmV0dXJuIHIuZHVtbXk9dCxlLnNldE5vZGUoaSxyKSxpfWZ1bmN0aW9uIEZhcihlKXt2YXIgdD1uZXcgYmFlKCkuc2V0R3JhcGgoZS5ncmFwaCgpKTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dC5zZXROb2RlKHIsZS5ub2RlKHIpKX0pLFFyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQuZWRnZShyLnYsci53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxpPWUuZWRnZShyKTt0LnNldEVkZ2Uoci52LHIudyx7d2VpZ2h0Om4ud2VpZ2h0K2kud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChuLm1pbmxlbixpLm1pbmxlbil9KX0pLHR9ZnVuY3Rpb24gQmFyKGUpe3ZhciB0PW5ldyBiYWUoe211bHRpZ3JhcGg6ZS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGUuZ3JhcGgoKSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe2UuY2hpbGRyZW4ocikubGVuZ3RofHx0LnNldE5vZGUocixlLm5vZGUocikpfSksUXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dC5zZXRFZGdlKHIsZS5lZGdlKHIpKX0pLHR9ZnVuY3Rpb24gSGFyKGUpe3ZhciB0PVFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49e307cmV0dXJuIFFyLmZvckVhY2goZS5vdXRFZGdlcyhyKSxmdW5jdGlvbihpKXtuW2kud109KG5baS53XXx8MCkrZS5lZGdlKGkpLndlaWdodH0pLG59KTtyZXR1cm4gUXIuemlwT2JqZWN0KGUubm9kZXMoKSx0KX1mdW5jdGlvbiBWYXIoZSl7dmFyIHQ9UXIubWFwKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj17fTtyZXR1cm4gUXIuZm9yRWFjaChlLmluRWRnZXMociksZnVuY3Rpb24oaSl7bltpLnZdPShuW2kudl18fDApK2UuZWRnZShpKS53ZWlnaHR9KSxufSk7cmV0dXJuIFFyLnppcE9iamVjdChlLm5vZGVzKCksdCl9ZnVuY3Rpb24gVWFyKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9dC54LXIsbz10LnktbixhPWUud2lkdGgvMixzPWUuaGVpZ2h0LzI7aWYoIWkmJiFvKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7dmFyIGwsYztyZXR1cm4gTWF0aC5hYnMobykqYT5NYXRoLmFicyhpKSpzPyhvPDAmJihzPS1zKSxsPXMqaS9vLGM9cyk6KGk8MCYmKGE9LWEpLGw9YSxjPWEqby9pKSx7eDpyK2wseTpuK2N9fWZ1bmN0aW9uIHFhcihlKXt2YXIgdD1Rci5tYXAoUXIucmFuZ2UoU2FlKGUpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpLGk9bi5yYW5rO1FyLmlzVW5kZWZpbmVkKGkpfHwodFtpXVtuLm9yZGVyXT1yKX0pLHR9ZnVuY3Rpb24gR2FyKGUpe3ZhciB0PVFyLm1pbihRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikucmFua30pKTtRci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLm5vZGUocik7UXIuaGFzKG4sInJhbmsiKSYmKG4ucmFuay09dCl9KX1mdW5jdGlvbiBXYXIoZSl7dmFyIHQ9UXIubWluKFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24obyl7cmV0dXJuIGUubm9kZShvKS5yYW5rfSkpLHI9W107UXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLnJhbmstdDtyW2FdfHwoclthXT1bXSksclthXS5wdXNoKG8pfSk7dmFyIG49MCxpPWUuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtRci5mb3JFYWNoKHIsZnVuY3Rpb24obyxhKXtRci5pc1VuZGVmaW5lZChvKSYmYSVpIT09MD8tLW46biYmUXIuZm9yRWFjaChvLGZ1bmN0aW9uKHMpe2Uubm9kZShzKS5yYW5rKz1ufSl9KX1mdW5jdGlvbiBZYXIoZSx0LHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSx3YWUoZSwiYm9yZGVyIixpLHQpfWZ1bmN0aW9uIFNhZShlKXtyZXR1cm4gUXIubWF4KFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLnJhbms7aWYoIVFyLmlzVW5kZWZpbmVkKHIpKXJldHVybiByfSkpfWZ1bmN0aW9uIGphcihlLHQpe3ZhciByPXtsaHM6W10scmhzOltdfTtyZXR1cm4gUXIuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3Qobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiBYYXIoZSx0KXt2YXIgcj1Rci5ub3coKTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e2NvbnNvbGUubG9nKGUrIiB0aW1lOiAiKyhRci5ub3coKS1yKSsibXMiKX19ZnVuY3Rpb24gJGFyKGUsdCl7cmV0dXJuIHQoKX19KTt2YXIgQ2FlPUgoKG5RbixUYWUpPT57InVzZSBzdHJpY3QiO3ZhciBFYWU9VW4oKSxLYXI9bnMoKTtUYWUuZXhwb3J0cz17cnVuOlphcix1bmRvOlFhcn07ZnVuY3Rpb24gWmFyKGUpe2UuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxFYWUuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7SmFyKGUsdCl9KX1mdW5jdGlvbiBKYXIoZSx0KXt2YXIgcj10LnYsbj1lLm5vZGUocikucmFuayxpPXQudyxvPWUubm9kZShpKS5yYW5rLGE9dC5uYW1lLHM9ZS5lZGdlKHQpLGw9cy5sYWJlbFJhbms7aWYobyE9PW4rMSl7ZS5yZW1vdmVFZGdlKHQpO3ZhciBjLHUsaDtmb3IoaD0wLCsrbjtuPG87KytoLCsrbilzLnBvaW50cz1bXSx1PXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpzLGVkZ2VPYmo6dCxyYW5rOm59LGM9S2FyLmFkZER1bW15Tm9kZShlLCJlZGdlIix1LCJfZCIpLG49PT1sJiYodS53aWR0aD1zLndpZHRoLHUuaGVpZ2h0PXMuaGVpZ2h0LHUuZHVtbXk9ImVkZ2UtbGFiZWwiLHUubGFiZWxwb3M9cy5sYWJlbHBvcyksZS5zZXRFZGdlKHIsYyx7d2VpZ2h0OnMud2VpZ2h0fSxhKSxoPT09MCYmZS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goYykscj1jO2Uuc2V0RWRnZShyLGkse3dlaWdodDpzLndlaWdodH0sYSl9fWZ1bmN0aW9uIFFhcihlKXtFYWUuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLG49ci5lZGdlTGFiZWwsaTtmb3IoZS5zZXRFZGdlKHIuZWRnZU9iaixuKTtyLmR1bW15OylpPWUuc3VjY2Vzc29ycyh0KVswXSxlLnJlbW92ZU5vZGUodCksbi5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSxyLmR1bW15PT09ImVkZ2UtbGFiZWwiJiYobi54PXIueCxuLnk9ci55LG4ud2lkdGg9ci53aWR0aCxuLmhlaWdodD1yLmhlaWdodCksdD1pLHI9ZS5ub2RlKHQpfSl9fSk7dmFyIFg0PUgoKGlRbixBYWUpPT57InVzZSBzdHJpY3QiO3ZhciB1SD1VbigpO0FhZS5leHBvcnRzPXtsb25nZXN0UGF0aDp0c3Isc2xhY2s6ZXNyfTtmdW5jdGlvbiB0c3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lLm5vZGUobik7aWYodUguaGFzKHQsbikpcmV0dXJuIGkucmFuazt0W25dPSEwO3ZhciBvPXVILm1pbih1SC5tYXAoZS5vdXRFZGdlcyhuKSxmdW5jdGlvbihhKXtyZXR1cm4gcihhLncpLWUuZWRnZShhKS5taW5sZW59KSk7cmV0dXJuKG89PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fG89PT12b2lkIDB8fG89PT1udWxsKSYmKG89MCksaS5yYW5rPW99dUguZm9yRWFjaChlLnNvdXJjZXMoKSxyKX1mdW5jdGlvbiBlc3IoZSx0KXtyZXR1cm4gZS5ub2RlKHQudykucmFuay1lLm5vZGUodC52KS5yYW5rLWUuZWRnZSh0KS5taW5sZW59fSk7dmFyIEVsdD1IKChvUW4sUGFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaEg9VW4oKSxyc3I9VWMoKS5HcmFwaCxmSD1YNCgpLnNsYWNrO1BhZS5leHBvcnRzPW5zcjtmdW5jdGlvbiBuc3IoZSl7dmFyIHQ9bmV3IHJzcih7ZGlyZWN0ZWQ6ITF9KSxyPWUubm9kZXMoKVswXSxuPWUubm9kZUNvdW50KCk7dC5zZXROb2RlKHIse30pO2Zvcih2YXIgaSxvO2lzcih0LGUpPG47KWk9b3NyKHQsZSksbz10Lmhhc05vZGUoaS52KT9mSChlLGkpOi1mSChlLGkpLGFzcih0LGUsbyk7cmV0dXJuIHR9ZnVuY3Rpb24gaXNyKGUsdCl7ZnVuY3Rpb24gcihuKXtoSC5mb3JFYWNoKHQubm9kZUVkZ2VzKG4pLGZ1bmN0aW9uKGkpe3ZhciBvPWkudixhPW49PT1vP2kudzpvOyFlLmhhc05vZGUoYSkmJiFmSCh0LGkpJiYoZS5zZXROb2RlKGEse30pLGUuc2V0RWRnZShuLGEse30pLHIoYSkpfSl9cmV0dXJuIGhILmZvckVhY2goZS5ub2RlcygpLHIpLGUubm9kZUNvdW50KCl9ZnVuY3Rpb24gb3NyKGUsdCl7cmV0dXJuIGhILm1pbkJ5KHQuZWRnZXMoKSxmdW5jdGlvbihyKXtpZihlLmhhc05vZGUoci52KSE9PWUuaGFzTm9kZShyLncpKXJldHVybiBmSCh0LHIpfSl9ZnVuY3Rpb24gYXNyKGUsdCxyKXtoSC5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihuKXt0Lm5vZGUobikucmFuays9cn0pfX0pO3ZhciB6YWU9SCgoYVFuLE9hZSk9PnsidXNlIHN0cmljdCI7dmFyIElkPVVuKCksc3NyPUVsdCgpLGxzcj1YNCgpLnNsYWNrLGNzcj1YNCgpLmxvbmdlc3RQYXRoLHVzcj1VYygpLmFsZy5wcmVvcmRlcixoc3I9VWMoKS5hbGcucG9zdG9yZGVyLGZzcj1ucygpLnNpbXBsaWZ5O09hZS5leHBvcnRzPXQxO3QxLmluaXRMb3dMaW1WYWx1ZXM9Q2x0O3QxLmluaXRDdXRWYWx1ZXM9VGx0O3QxLmNhbGNDdXRWYWx1ZT1MYWU7dDEubGVhdmVFZGdlPVJhZTt0MS5lbnRlckVkZ2U9TmFlO3QxLmV4Y2hhbmdlRWRnZXM9RGFlO2Z1bmN0aW9uIHQxKGUpe2U9ZnNyKGUpLGNzcihlKTt2YXIgdD1zc3IoZSk7Q2x0KHQpLFRsdCh0LGUpO2Zvcih2YXIgcixuO3I9UmFlKHQpOyluPU5hZSh0LGUsciksRGFlKHQsZSxyLG4pfWZ1bmN0aW9uIFRsdChlLHQpe3ZhciByPWhzcihlLGUubm9kZXMoKSk7cj1yLnNsaWNlKDAsci5sZW5ndGgtMSksSWQuZm9yRWFjaChyLGZ1bmN0aW9uKG4pe3BzcihlLHQsbil9KX1mdW5jdGlvbiBwc3IoZSx0LHIpe3ZhciBuPWUubm9kZShyKSxpPW4ucGFyZW50O2UuZWRnZShyLGkpLmN1dHZhbHVlPUxhZShlLHQscil9ZnVuY3Rpb24gTGFlKGUsdCxyKXt2YXIgbj1lLm5vZGUociksaT1uLnBhcmVudCxvPSEwLGE9dC5lZGdlKHIsaSkscz0wO3JldHVybiBhfHwobz0hMSxhPXQuZWRnZShpLHIpKSxzPWEud2VpZ2h0LElkLmZvckVhY2godC5ub2RlRWRnZXMociksZnVuY3Rpb24obCl7dmFyIGM9bC52PT09cix1PWM/bC53OmwudjtpZih1IT09aSl7dmFyIGg9Yz09PW8sZj10LmVkZ2UobCkud2VpZ2h0O2lmKHMrPWg/ZjotZixtc3IoZSxyLHUpKXt2YXIgcD1lLmVkZ2Uocix1KS5jdXR2YWx1ZTtzKz1oPy1wOnB9fX0pLHN9ZnVuY3Rpb24gQ2x0KGUsdCl7YXJndW1lbnRzLmxlbmd0aDwyJiYodD1lLm5vZGVzKClbMF0pLGthZShlLHt9LDEsdCl9ZnVuY3Rpb24ga2FlKGUsdCxyLG4saSl7dmFyIG89cixhPWUubm9kZShuKTtyZXR1cm4gdFtuXT0hMCxJZC5mb3JFYWNoKGUubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKHMpe0lkLmhhcyh0LHMpfHwocj1rYWUoZSx0LHIscyxuKSl9KSxhLmxvdz1vLGEubGltPXIrKyxpP2EucGFyZW50PWk6ZGVsZXRlIGEucGFyZW50LHJ9ZnVuY3Rpb24gUmFlKGUpe3JldHVybiBJZC5maW5kKGUuZWRnZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGdlKHQpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBOYWUoZSx0LHIpe3ZhciBuPXIudixpPXIudzt0Lmhhc0VkZ2UobixpKXx8KG49ci53LGk9ci52KTt2YXIgbz1lLm5vZGUobiksYT1lLm5vZGUoaSkscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9SWQuZmlsdGVyKHQuZWRnZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gbD09PUlhZShlLGUubm9kZSh1LnYpLHMpJiZsIT09SWFlKGUsZS5ub2RlKHUudykscyl9KTtyZXR1cm4gSWQubWluQnkoYyxmdW5jdGlvbih1KXtyZXR1cm4gbHNyKHQsdSl9KX1mdW5jdGlvbiBEYWUoZSx0LHIsbil7dmFyIGk9ci52LG89ci53O2UucmVtb3ZlRWRnZShpLG8pLGUuc2V0RWRnZShuLnYsbi53LHt9KSxDbHQoZSksVGx0KGUsdCksZHNyKGUsdCl9ZnVuY3Rpb24gZHNyKGUsdCl7dmFyIHI9SWQuZmluZChlLm5vZGVzKCksZnVuY3Rpb24oaSl7cmV0dXJuIXQubm9kZShpKS5wYXJlbnR9KSxuPXVzcihlLHIpO249bi5zbGljZSgxKSxJZC5mb3JFYWNoKG4sZnVuY3Rpb24oaSl7dmFyIG89ZS5ub2RlKGkpLnBhcmVudCxhPXQuZWRnZShpLG8pLHM9ITE7YXx8KGE9dC5lZGdlKG8saSkscz0hMCksdC5ub2RlKGkpLnJhbms9dC5ub2RlKG8pLnJhbmsrKHM/YS5taW5sZW46LWEubWlubGVuKX0pfWZ1bmN0aW9uIG1zcihlLHQscil7cmV0dXJuIGUuaGFzRWRnZSh0LHIpfWZ1bmN0aW9uIElhZShlLHQscil7cmV0dXJuIHIubG93PD10LmxpbSYmdC5saW08PXIubGltfX0pO3ZhciBWYWU9SCgoc1FuLEhhZSk9PnsidXNlIHN0cmljdCI7dmFyIGdzcj1YNCgpLEJhZT1nc3IubG9uZ2VzdFBhdGgsX3NyPUVsdCgpLHlzcj16YWUoKTtIYWUuZXhwb3J0cz12c3I7ZnVuY3Rpb24gdnNyKGUpe3N3aXRjaChlLmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6RmFlKGUpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6YnNyKGUpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjp4c3IoZSk7YnJlYWs7ZGVmYXVsdDpGYWUoZSl9fXZhciB4c3I9QmFlO2Z1bmN0aW9uIGJzcihlKXtCYWUoZSksX3NyKGUpfWZ1bmN0aW9uIEZhZShlKXt5c3IoZSl9fSk7dmFyIHFhZT1IKChsUW4sVWFlKT0+e3ZhciBBbHQ9VW4oKTtVYWUuZXhwb3J0cz13c3I7ZnVuY3Rpb24gd3NyKGUpe3ZhciB0PU1zcihlKTtBbHQuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUubm9kZShyKSxpPW4uZWRnZU9iaixvPVNzcihlLHQsaS52LGkudyksYT1vLnBhdGgscz1vLmxjYSxsPTAsYz1hW2xdLHU9ITA7ciE9PWkudzspe2lmKG49ZS5ub2RlKHIpLHUpe2Zvcig7KGM9YVtsXSkhPT1zJiZlLm5vZGUoYykubWF4UmFuazxuLnJhbms7KWwrKztjPT09cyYmKHU9ITEpfWlmKCF1KXtmb3IoO2w8YS5sZW5ndGgtMSYmZS5ub2RlKGM9YVtsKzFdKS5taW5SYW5rPD1uLnJhbms7KWwrKztjPWFbbF19ZS5zZXRQYXJlbnQocixjKSxyPWUuc3VjY2Vzc29ycyhyKVswXX19KX1mdW5jdGlvbiBTc3IoZSx0LHIsbil7dmFyIGk9W10sbz1bXSxhPU1hdGgubWluKHRbcl0ubG93LHRbbl0ubG93KSxzPU1hdGgubWF4KHRbcl0ubGltLHRbbl0ubGltKSxsLGM7bD1yO2RvIGw9ZS5wYXJlbnQobCksaS5wdXNoKGwpO3doaWxlKGwmJih0W2xdLmxvdz5hfHxzPnRbbF0ubGltKSk7Zm9yKGM9bCxsPW47KGw9ZS5wYXJlbnQobCkpIT09Yzspby5wdXNoKGwpO3JldHVybntwYXRoOmkuY29uY2F0KG8ucmV2ZXJzZSgpKSxsY2E6Y319ZnVuY3Rpb24gTXNyKGUpe3ZhciB0PXt9LHI9MDtmdW5jdGlvbiBuKGkpe3ZhciBvPXI7QWx0LmZvckVhY2goZS5jaGlsZHJlbihpKSxuKSx0W2ldPXtsb3c6byxsaW06cisrfX1yZXR1cm4gQWx0LmZvckVhY2goZS5jaGlsZHJlbigpLG4pLHR9fSk7dmFyIFlhZT1IKChjUW4sV2FlKT0+e3ZhciBMZD1VbigpLFBsdD1ucygpO1dhZS5leHBvcnRzPXtydW46RXNyLGNsZWFudXA6QXNyfTtmdW5jdGlvbiBFc3IoZSl7dmFyIHQ9UGx0LmFkZER1bW15Tm9kZShlLCJyb290Iix7fSwiX3Jvb3QiKSxyPVRzcihlKSxuPUxkLm1heChMZC52YWx1ZXMocikpLTEsaT0yKm4rMTtlLmdyYXBoKCkubmVzdGluZ1Jvb3Q9dCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihhKXtlLmVkZ2UoYSkubWlubGVuKj1pfSk7dmFyIG89Q3NyKGUpKzE7TGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24oYSl7R2FlKGUsdCxpLG8sbixyLGEpfSksZS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPWl9ZnVuY3Rpb24gR2FlKGUsdCxyLG4saSxvLGEpe3ZhciBzPWUuY2hpbGRyZW4oYSk7aWYoIXMubGVuZ3RoKXthIT09dCYmZS5zZXRFZGdlKHQsYSx7d2VpZ2h0OjAsbWlubGVuOnJ9KTtyZXR1cm59dmFyIGw9UGx0LmFkZEJvcmRlck5vZGUoZSwiX2J0IiksYz1QbHQuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSx1PWUubm9kZShhKTtlLnNldFBhcmVudChsLGEpLHUuYm9yZGVyVG9wPWwsZS5zZXRQYXJlbnQoYyxhKSx1LmJvcmRlckJvdHRvbT1jLExkLmZvckVhY2gocyxmdW5jdGlvbihoKXtHYWUoZSx0LHIsbixpLG8saCk7dmFyIGY9ZS5ub2RlKGgpLHA9Zi5ib3JkZXJUb3A/Zi5ib3JkZXJUb3A6aCxkPWYuYm9yZGVyQm90dG9tP2YuYm9yZGVyQm90dG9tOmgsZz1mLmJvcmRlclRvcD9uOjIqbixfPXAhPT1kPzE6aS1vW2FdKzE7ZS5zZXRFZGdlKGwscCx7d2VpZ2h0OmcsbWlubGVuOl8sbmVzdGluZ0VkZ2U6ITB9KSxlLnNldEVkZ2UoZCxjLHt3ZWlnaHQ6ZyxtaW5sZW46XyxuZXN0aW5nRWRnZTohMH0pfSksZS5wYXJlbnQoYSl8fGUuc2V0RWRnZSh0LGwse3dlaWdodDowLG1pbmxlbjppK29bYV19KX1mdW5jdGlvbiBUc3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBvPWUuY2hpbGRyZW4obik7byYmby5sZW5ndGgmJkxkLmZvckVhY2gobyxmdW5jdGlvbihhKXtyKGEsaSsxKX0pLHRbbl09aX1yZXR1cm4gTGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24obil7cihuLDEpfSksdH1mdW5jdGlvbiBDc3IoZSl7cmV0dXJuIExkLnJlZHVjZShlLmVkZ2VzKCksZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlLmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBBc3IoZSl7dmFyIHQ9ZS5ncmFwaCgpO2UucmVtb3ZlTm9kZSh0Lm5lc3RpbmdSb290KSxkZWxldGUgdC5uZXN0aW5nUm9vdCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5uZXN0aW5nRWRnZSYmZS5yZW1vdmVFZGdlKHIpfSl9fSk7dmFyICRhZT1IKCh1UW4sWGFlKT0+e3ZhciBJbHQ9VW4oKSxQc3I9bnMoKTtYYWUuZXhwb3J0cz1Jc3I7ZnVuY3Rpb24gSXNyKGUpe2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jaGlsZHJlbihyKSxpPWUubm9kZShyKTtpZihuLmxlbmd0aCYmSWx0LmZvckVhY2gobix0KSxJbHQuaGFzKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBvPWkubWluUmFuayxhPWkubWF4UmFuaysxO288YTsrK28pamFlKGUsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxvKSxqYWUoZSwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxvKX19SWx0LmZvckVhY2goZS5jaGlsZHJlbigpLHQpfWZ1bmN0aW9uIGphZShlLHQscixuLGksbyl7dmFyIGE9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6dH0scz1pW3RdW28tMV0sbD1Qc3IuYWRkRHVtbXlOb2RlKGUsImJvcmRlciIsYSxyKTtpW3RdW29dPWwsZS5zZXRQYXJlbnQobCxuKSxzJiZlLnNldEVkZ2UocyxsLHt3ZWlnaHQ6MX0pfX0pO3ZhciBRYWU9SCgoaFFuLEphZSk9PnsidXNlIHN0cmljdCI7dmFyIFVmPVVuKCk7SmFlLmV4cG9ydHM9e2FkanVzdDpMc3IsdW5kbzprc3J9O2Z1bmN0aW9uIExzcihlKXt2YXIgdD1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyh0PT09ImxyInx8dD09PSJybCIpJiZaYWUoZSl9ZnVuY3Rpb24ga3NyKGUpe3ZhciB0PWUuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KHQ9PT0iYnQifHx0PT09InJsIikmJlJzcihlKSwodD09PSJsciJ8fHQ9PT0icmwiKSYmKE5zcihlKSxaYWUoZSkpfWZ1bmN0aW9uIFphZShlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtLYWUoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe0thZShlLmVkZ2UodCkpfSl9ZnVuY3Rpb24gS2FlKGUpe3ZhciB0PWUud2lkdGg7ZS53aWR0aD1lLmhlaWdodCxlLmhlaWdodD10fWZ1bmN0aW9uIFJzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtMbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLExsdCksVWYuaGFzKHIsInkiKSYmTGx0KHIpfSl9ZnVuY3Rpb24gTGx0KGUpe2UueT0tZS55fWZ1bmN0aW9uIE5zcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtrbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLGtsdCksVWYuaGFzKHIsIngiKSYma2x0KHIpfSl9ZnVuY3Rpb24ga2x0KGUpe3ZhciB0PWUueDtlLng9ZS55LGUueT10fX0pO3ZhciBlc2U9SCgoZlFuLHRzZSk9PnsidXNlIHN0cmljdCI7dmFyIGtkPVVuKCk7dHNlLmV4cG9ydHM9RHNyO2Z1bmN0aW9uIERzcihlKXt2YXIgdD17fSxyPWtkLmZpbHRlcihlLm5vZGVzKCksZnVuY3Rpb24ocyl7cmV0dXJuIWUuY2hpbGRyZW4ocykubGVuZ3RofSksbj1rZC5tYXgoa2QubWFwKHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSkpLGk9a2QubWFwKGtkLnJhbmdlKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG8ocyl7aWYoIWtkLmhhcyh0LHMpKXt0W3NdPSEwO3ZhciBsPWUubm9kZShzKTtpW2wucmFua10ucHVzaChzKSxrZC5mb3JFYWNoKGUuc3VjY2Vzc29ycyhzKSxvKX19dmFyIGE9a2Quc29ydEJ5KHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSk7cmV0dXJuIGtkLmZvckVhY2goYSxvKSxpfX0pO3ZhciBuc2U9SCgocFFuLHJzZSk9PnsidXNlIHN0cmljdCI7dmFyIGgwPVVuKCk7cnNlLmV4cG9ydHM9T3NyO2Z1bmN0aW9uIE9zcihlLHQpe2Zvcih2YXIgcj0wLG49MTtuPHQubGVuZ3RoOysrbilyKz16c3IoZSx0W24tMV0sdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24genNyKGUsdCxyKXtmb3IodmFyIG49aDAuemlwT2JqZWN0KHIsaDAubWFwKHIsZnVuY3Rpb24oYyx1KXtyZXR1cm4gdX0pKSxpPWgwLmZsYXR0ZW4oaDAubWFwKHQsZnVuY3Rpb24oYyl7cmV0dXJuIGgwLnNvcnRCeShoMC5tYXAoZS5vdXRFZGdlcyhjKSxmdW5jdGlvbih1KXtyZXR1cm57cG9zOm5bdS53XSx3ZWlnaHQ6ZS5lZGdlKHUpLndlaWdodH19KSwicG9zIil9KSwhMCksbz0xO288ci5sZW5ndGg7KW88PD0xO3ZhciBhPTIqby0xO28tPTE7dmFyIHM9aDAubWFwKG5ldyBBcnJheShhKSxmdW5jdGlvbigpe3JldHVybiAwfSksbD0wO3JldHVybiBoMC5mb3JFYWNoKGkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jLnBvcytvO3NbdV0rPWMud2VpZ2h0O2Zvcih2YXIgaD0wO3U+MDspdSUyJiYoaCs9c1t1KzFdKSx1PXUtMT4+MSxzW3VdKz1jLndlaWdodDtsKz1jLndlaWdodCpofSkpLGx9fSk7dmFyIGFzZT1IKChkUW4sb3NlKT0+e3ZhciBpc2U9VW4oKTtvc2UuZXhwb3J0cz1Gc3I7ZnVuY3Rpb24gRnNyKGUsdCl7cmV0dXJuIGlzZS5tYXAodCxmdW5jdGlvbihyKXt2YXIgbj1lLmluRWRnZXMocik7aWYobi5sZW5ndGgpe3ZhciBpPWlzZS5yZWR1Y2UobixmdW5jdGlvbihvLGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO3JldHVybntzdW06by5zdW0rcy53ZWlnaHQqbC5vcmRlcix3ZWlnaHQ6by53ZWlnaHQrcy53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djpyLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1lbHNlIHJldHVybnt2OnJ9fSl9fSk7dmFyIGxzZT1IKChtUW4sc3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVGw9VW4oKTtzc2UuZXhwb3J0cz1Cc3I7ZnVuY3Rpb24gQnNyKGUsdCl7dmFyIHI9e307VGwuZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7dmFyIGE9cltpLnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbaS52XSxpOm99O1RsLmlzVW5kZWZpbmVkKGkuYmFyeWNlbnRlcil8fChhLmJhcnljZW50ZXI9aS5iYXJ5Y2VudGVyLGEud2VpZ2h0PWkud2VpZ2h0KX0pLFRsLmZvckVhY2godC5lZGdlcygpLGZ1bmN0aW9uKGkpe3ZhciBvPXJbaS52XSxhPXJbaS53XTshVGwuaXNVbmRlZmluZWQobykmJiFUbC5pc1VuZGVmaW5lZChhKSYmKGEuaW5kZWdyZWUrKyxvLm91dC5wdXNoKHJbaS53XSkpfSk7dmFyIG49VGwuZmlsdGVyKHIsZnVuY3Rpb24oaSl7cmV0dXJuIWkuaW5kZWdyZWV9KTtyZXR1cm4gSHNyKG4pfWZ1bmN0aW9uIEhzcihlKXt2YXIgdD1bXTtmdW5jdGlvbiByKG8pe3JldHVybiBmdW5jdGlvbihhKXthLm1lcmdlZHx8KFRsLmlzVW5kZWZpbmVkKGEuYmFyeWNlbnRlcil8fFRsLmlzVW5kZWZpbmVkKG8uYmFyeWNlbnRlcil8fGEuYmFyeWNlbnRlcj49by5iYXJ5Y2VudGVyKSYmVnNyKG8sYSl9fWZ1bmN0aW9uIG4obyl7cmV0dXJuIGZ1bmN0aW9uKGEpe2EuaW4ucHVzaChvKSwtLWEuaW5kZWdyZWU9PT0wJiZlLnB1c2goYSl9fWZvcig7ZS5sZW5ndGg7KXt2YXIgaT1lLnBvcCgpO3QucHVzaChpKSxUbC5mb3JFYWNoKGkuaW4ucmV2ZXJzZSgpLHIoaSkpLFRsLmZvckVhY2goaS5vdXQsbihpKSl9cmV0dXJuIFRsLm1hcChUbC5maWx0ZXIodCxmdW5jdGlvbihvKXtyZXR1cm4hby5tZXJnZWR9KSxmdW5jdGlvbihvKXtyZXR1cm4gVGwucGljayhvLFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIFZzcihlLHQpe3ZhciByPTAsbj0wO2Uud2VpZ2h0JiYocis9ZS5iYXJ5Y2VudGVyKmUud2VpZ2h0LG4rPWUud2VpZ2h0KSx0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS52cz10LnZzLmNvbmNhdChlLnZzKSxlLmJhcnljZW50ZXI9ci9uLGUud2VpZ2h0PW4sZS5pPU1hdGgubWluKHQuaSxlLmkpLHQubWVyZ2VkPSEwfX0pO3ZhciBoc2U9SCgoZ1FuLHVzZSk9Pnt2YXIgJDQ9VW4oKSxVc3I9bnMoKTt1c2UuZXhwb3J0cz1xc3I7ZnVuY3Rpb24gcXNyKGUsdCl7dmFyIHI9VXNyLnBhcnRpdGlvbihlLGZ1bmN0aW9uKHUpe3JldHVybiAkNC5oYXModSwiYmFyeWNlbnRlciIpfSksbj1yLmxocyxpPSQ0LnNvcnRCeShyLnJocyxmdW5jdGlvbih1KXtyZXR1cm4tdS5pfSksbz1bXSxhPTAscz0wLGw9MDtuLnNvcnQoR3NyKCEhdCkpLGw9Y3NlKG8saSxsKSwkNC5mb3JFYWNoKG4sZnVuY3Rpb24odSl7bCs9dS52cy5sZW5ndGgsby5wdXNoKHUudnMpLGErPXUuYmFyeWNlbnRlcip1LndlaWdodCxzKz11LndlaWdodCxsPWNzZShvLGksbCl9KTt2YXIgYz17dnM6JDQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJihjLmJhcnljZW50ZXI9YS9zLGMud2VpZ2h0PXMpLGN9ZnVuY3Rpb24gY3NlKGUsdCxyKXtmb3IodmFyIG47dC5sZW5ndGgmJihuPSQ0Lmxhc3QodCkpLmk8PXI7KXQucG9wKCksZS5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBHc3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6dC5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOmU/ci5pLXQuaTp0Lmktci5pfX19KTt2YXIgZHNlPUgoKF9Rbixwc2UpPT57dmFyIGYwPVVuKCksV3NyPWFzZSgpLFlzcj1sc2UoKSxqc3I9aHNlKCk7cHNlLmV4cG9ydHM9ZnNlO2Z1bmN0aW9uIGZzZShlLHQscixuKXt2YXIgaT1lLmNoaWxkcmVuKHQpLG89ZS5ub2RlKHQpLGE9bz9vLmJvcmRlckxlZnQ6dm9pZCAwLHM9bz9vLmJvcmRlclJpZ2h0OnZvaWQgMCxsPXt9O2EmJihpPWYwLmZpbHRlcihpLGZ1bmN0aW9uKGQpe3JldHVybiBkIT09YSYmZCE9PXN9KSk7dmFyIGM9V3NyKGUsaSk7ZjAuZm9yRWFjaChjLGZ1bmN0aW9uKGQpe2lmKGUuY2hpbGRyZW4oZC52KS5sZW5ndGgpe3ZhciBnPWZzZShlLGQudixyLG4pO2xbZC52XT1nLGYwLmhhcyhnLCJiYXJ5Y2VudGVyIikmJiRzcihkLGcpfX0pO3ZhciB1PVlzcihjLHIpO1hzcih1LGwpO3ZhciBoPWpzcih1LG4pO2lmKGEmJihoLnZzPWYwLmZsYXR0ZW4oW2EsaC52cyxzXSwhMCksZS5wcmVkZWNlc3NvcnMoYSkubGVuZ3RoKSl7dmFyIGY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGEpWzBdKSxwPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSk7ZjAuaGFzKGgsImJhcnljZW50ZXIiKXx8KGguYmFyeWNlbnRlcj0wLGgud2VpZ2h0PTApLGguYmFyeWNlbnRlcj0oaC5iYXJ5Y2VudGVyKmgud2VpZ2h0K2Yub3JkZXIrcC5vcmRlcikvKGgud2VpZ2h0KzIpLGgud2VpZ2h0Kz0yfXJldHVybiBofWZ1bmN0aW9uIFhzcihlLHQpe2YwLmZvckVhY2goZSxmdW5jdGlvbihyKXtyLnZzPWYwLmZsYXR0ZW4oci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHRbbl0/dFtuXS52czpufSksITApfSl9ZnVuY3Rpb24gJHNyKGUsdCl7ZjAuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKT8oZS5iYXJ5Y2VudGVyPXQuYmFyeWNlbnRlcixlLndlaWdodD10LndlaWdodCk6KGUuYmFyeWNlbnRlcj0oZS5iYXJ5Y2VudGVyKmUud2VpZ2h0K3QuYmFyeWNlbnRlcip0LndlaWdodCkvKGUud2VpZ2h0K3Qud2VpZ2h0KSxlLndlaWdodCs9dC53ZWlnaHQpfX0pO3ZhciBnc2U9SCgoeVFuLG1zZSk9Pnt2YXIgSzQ9VW4oKSxLc3I9VWMoKS5HcmFwaDttc2UuZXhwb3J0cz1ac3I7ZnVuY3Rpb24gWnNyKGUsdCxyKXt2YXIgbj1Kc3IoZSksaT1uZXcgS3NyKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Om59KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKG8pe3JldHVybiBlLm5vZGUobyl9KTtyZXR1cm4gSzQuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLHM9ZS5wYXJlbnQobyk7KGEucmFuaz09PXR8fGEubWluUmFuazw9dCYmdDw9YS5tYXhSYW5rKSYmKGkuc2V0Tm9kZShvKSxpLnNldFBhcmVudChvLHN8fG4pLEs0LmZvckVhY2goZVtyXShvKSxmdW5jdGlvbihsKXt2YXIgYz1sLnY9PT1vP2wudzpsLnYsdT1pLmVkZ2UoYyxvKSxoPUs0LmlzVW5kZWZpbmVkKHUpPzA6dS53ZWlnaHQ7aS5zZXRFZGdlKGMsbyx7d2VpZ2h0OmUuZWRnZShsKS53ZWlnaHQraH0pfSksSzQuaGFzKGEsIm1pblJhbmsiKSYmaS5zZXROb2RlKG8se2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W3RdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbdF19KSl9KSxpfWZ1bmN0aW9uIEpzcihlKXtmb3IodmFyIHQ7ZS5oYXNOb2RlKHQ9SzQudW5pcXVlSWQoIl9yb290IikpOyk7cmV0dXJuIHR9fSk7dmFyIHlzZT1IKCh2UW4sX3NlKT0+e3ZhciBRc3I9VW4oKTtfc2UuZXhwb3J0cz10bHI7ZnVuY3Rpb24gdGxyKGUsdCxyKXt2YXIgbj17fSxpO1Fzci5mb3JFYWNoKHIsZnVuY3Rpb24obyl7Zm9yKHZhciBhPWUucGFyZW50KG8pLHMsbDthOyl7aWYocz1lLnBhcmVudChhKSxzPyhsPW5bc10sbltzXT1hKToobD1pLGk9YSksbCYmbCE9PWEpe3Quc2V0RWRnZShsLGEpO3JldHVybn1hPXN9fSl9fSk7dmFyIFNzZT1IKCh4UW4sd3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcDA9VW4oKSxlbHI9ZXNlKCkscmxyPW5zZSgpLG5scj1kc2UoKSxpbHI9Z3NlKCksb2xyPXlzZSgpLGFscj1VYygpLkdyYXBoLHZzZT1ucygpO3dzZS5leHBvcnRzPXNscjtmdW5jdGlvbiBzbHIoZSl7dmFyIHQ9dnNlLm1heFJhbmsoZSkscj14c2UoZSxwMC5yYW5nZSgxLHQrMSksImluRWRnZXMiKSxuPXhzZShlLHAwLnJhbmdlKHQtMSwtMSwtMSksIm91dEVkZ2VzIiksaT1lbHIoZSk7YnNlKGUsaSk7Zm9yKHZhciBvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhLHM9MCxsPTA7bDw0OysrcywrK2wpe2xscihzJTI/cjpuLHMlND49MiksaT12c2UuYnVpbGRMYXllck1hdHJpeChlKTt2YXIgYz1ybHIoZSxpKTtjPG8mJihsPTAsYT1wMC5jbG9uZURlZXAoaSksbz1jKX1ic2UoZSxhKX1mdW5jdGlvbiB4c2UoZSx0LHIpe3JldHVybiBwMC5tYXAodCxmdW5jdGlvbihuKXtyZXR1cm4gaWxyKGUsbixyKX0pfWZ1bmN0aW9uIGxscihlLHQpe3ZhciByPW5ldyBhbHI7cDAuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3ZhciBpPW4uZ3JhcGgoKS5yb290LG89bmxyKG4saSxyLHQpO3AwLmZvckVhY2goby52cyxmdW5jdGlvbihhLHMpe24ubm9kZShhKS5vcmRlcj1zfSksb2xyKG4scixvLnZzKX0pfWZ1bmN0aW9uIGJzZShlLHQpe3AwLmZvckVhY2godCxmdW5jdGlvbihyKXtwMC5mb3JFYWNoKHIsZnVuY3Rpb24obixpKXtlLm5vZGUobikub3JkZXI9aX0pfSl9fSk7dmFyIFJzZT1IKChiUW4sa3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWGU9VW4oKSxjbHI9VWMoKS5HcmFwaCx1bHI9bnMoKTtrc2UuZXhwb3J0cz17cG9zaXRpb25YOnBscixmaW5kVHlwZTFDb25mbGljdHM6TXNlLGZpbmRUeXBlMkNvbmZsaWN0czpFc2UsYWRkQ29uZmxpY3Q6Umx0LGhhc0NvbmZsaWN0OlRzZSx2ZXJ0aWNhbEFsaWdubWVudDpDc2UsaG9yaXpvbnRhbENvbXBhY3Rpb246QXNlLGFsaWduQ29vcmRpbmF0ZXM6SXNlLGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50OlBzZSxiYWxhbmNlOkxzZX07ZnVuY3Rpb24gTXNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihpLG8pe3ZhciBhPTAscz0wLGw9aS5sZW5ndGgsYz1YZS5sYXN0KG8pO3JldHVybiBYZS5mb3JFYWNoKG8sZnVuY3Rpb24odSxoKXt2YXIgZj1obHIoZSx1KSxwPWY/ZS5ub2RlKGYpLm9yZGVyOmw7KGZ8fHU9PT1jKSYmKFhlLmZvckVhY2goby5zbGljZShzLGgrMSksZnVuY3Rpb24oZCl7WGUuZm9yRWFjaChlLnByZWRlY2Vzc29ycyhkKSxmdW5jdGlvbihnKXt2YXIgXz1lLm5vZGUoZykseT1fLm9yZGVyOyh5PGF8fHA8eSkmJiEoXy5kdW1teSYmZS5ub2RlKGQpLmR1bW15KSYmUmx0KHIsZyxkKX0pfSkscz1oKzEsYT1wKX0pLG99cmV0dXJuIFhlLnJlZHVjZSh0LG4pLHJ9ZnVuY3Rpb24gRXNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihvLGEscyxsLGMpe3ZhciB1O1hlLmZvckVhY2goWGUucmFuZ2UoYSxzKSxmdW5jdGlvbihoKXt1PW9baF0sZS5ub2RlKHUpLmR1bW15JiZYZS5mb3JFYWNoKGUucHJlZGVjZXNzb3JzKHUpLGZ1bmN0aW9uKGYpe3ZhciBwPWUubm9kZShmKTtwLmR1bW15JiYocC5vcmRlcjxsfHxwLm9yZGVyPmMpJiZSbHQocixmLHUpfSl9KX1mdW5jdGlvbiBpKG8sYSl7dmFyIHM9LTEsbCxjPTA7cmV0dXJuIFhlLmZvckVhY2goYSxmdW5jdGlvbih1LGgpe2lmKGUubm9kZSh1KS5kdW1teT09PSJib3JkZXIiKXt2YXIgZj1lLnByZWRlY2Vzc29ycyh1KTtmLmxlbmd0aCYmKGw9ZS5ub2RlKGZbMF0pLm9yZGVyLG4oYSxjLGgscyxsKSxjPWgscz1sKX1uKGEsYyxhLmxlbmd0aCxsLG8ubGVuZ3RoKX0pLGF9cmV0dXJuIFhlLnJlZHVjZSh0LGkpLHJ9ZnVuY3Rpb24gaGxyKGUsdCl7aWYoZS5ub2RlKHQpLmR1bW15KXJldHVybiBYZS5maW5kKGUucHJlZGVjZXNzb3JzKHQpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikuZHVtbXl9KX1mdW5jdGlvbiBSbHQoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXZhciBpPWVbdF07aXx8KGVbdF09aT17fSksaVtyXT0hMH1mdW5jdGlvbiBUc2UoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXJldHVybiBYZS5oYXMoZVt0XSxyKX1mdW5jdGlvbiBDc2UoZSx0LHIsbil7dmFyIGk9e30sbz17fSxhPXt9O3JldHVybiBYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGwsYyl7aVtsXT1sLG9bbF09bCxhW2xdPWN9KX0pLFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbD0tMTtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9bihjKTtpZih1Lmxlbmd0aCl7dT1YZS5zb3J0QnkodSxmdW5jdGlvbihnKXtyZXR1cm4gYVtnXX0pO2Zvcih2YXIgaD0odS5sZW5ndGgtMSkvMixmPU1hdGguZmxvb3IoaCkscD1NYXRoLmNlaWwoaCk7Zjw9cDsrK2Ype3ZhciBkPXVbZl07b1tjXT09PWMmJmw8YVtkXSYmIVRzZShyLGMsZCkmJihvW2RdPWMsb1tjXT1pW2NdPWlbZF0sbD1hW2RdKX19fSl9KSx7cm9vdDppLGFsaWduOm99fWZ1bmN0aW9uIEFzZShlLHQscixuLGkpe3ZhciBvPXt9LGE9ZmxyKGUsdCxyLGkpLHM9aT8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBsKGgsZil7Zm9yKHZhciBwPWEubm9kZXMoKSxkPXAucG9wKCksZz17fTtkOylnW2RdP2goZCk6KGdbZF09ITAscC5wdXNoKGQpLHA9cC5jb25jYXQoZihkKSkpLGQ9cC5wb3AoKX1mdW5jdGlvbiBjKGgpe29baF09YS5pbkVkZ2VzKGgpLnJlZHVjZShmdW5jdGlvbihmLHApe3JldHVybiBNYXRoLm1heChmLG9bcC52XSthLmVkZ2UocCkpfSwwKX1mdW5jdGlvbiB1KGgpe3ZhciBmPWEub3V0RWRnZXMoaCkucmVkdWNlKGZ1bmN0aW9uKGQsZyl7cmV0dXJuIE1hdGgubWluKGQsb1tnLnddLWEuZWRnZShnKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkscD1lLm5vZGUoaCk7ZiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmcC5ib3JkZXJUeXBlIT09cyYmKG9baF09TWF0aC5tYXgob1toXSxmKSl9cmV0dXJuIGwoYyxhLnByZWRlY2Vzc29ycy5iaW5kKGEpKSxsKHUsYS5zdWNjZXNzb3JzLmJpbmQoYSkpLFhlLmZvckVhY2gobixmdW5jdGlvbihoKXtvW2hdPW9bcltoXV19KSxvfWZ1bmN0aW9uIGZscihlLHQscixuKXt2YXIgaT1uZXcgY2xyLG89ZS5ncmFwaCgpLGE9ZGxyKG8ubm9kZXNlcCxvLmVkZ2VzZXAsbik7cmV0dXJuIFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbDtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9cltjXTtpZihpLnNldE5vZGUodSksbCl7dmFyIGg9cltsXSxmPWkuZWRnZShoLHUpO2kuc2V0RWRnZShoLHUsTWF0aC5tYXgoYShlLGMsbCksZnx8MCkpfWw9Y30pfSksaX1mdW5jdGlvbiBQc2UoZSx0KXtyZXR1cm4gWGUubWluQnkoWGUudmFsdWVzKHQpLGZ1bmN0aW9uKHIpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gWGUuZm9ySW4ocixmdW5jdGlvbihvLGEpe3ZhciBzPW1scihlLGEpLzI7bj1NYXRoLm1heChvK3MsbiksaT1NYXRoLm1pbihvLXMsaSl9KSxuLWl9KX1mdW5jdGlvbiBJc2UoZSx0KXt2YXIgcj1YZS52YWx1ZXModCksbj1YZS5taW4ociksaT1YZS5tYXgocik7WGUuZm9yRWFjaChbInUiLCJkIl0sZnVuY3Rpb24obyl7WGUuZm9yRWFjaChbImwiLCJyIl0sZnVuY3Rpb24oYSl7dmFyIHM9bythLGw9ZVtzXSxjO2lmKGwhPT10KXt2YXIgdT1YZS52YWx1ZXMobCk7Yz1hPT09ImwiP24tWGUubWluKHUpOmktWGUubWF4KHUpLGMmJihlW3NdPVhlLm1hcFZhbHVlcyhsLGZ1bmN0aW9uKGgpe3JldHVybiBoK2N9KSl9fSl9KX1mdW5jdGlvbiBMc2UoZSx0KXtyZXR1cm4gWGUubWFwVmFsdWVzKGUudWwsZnVuY3Rpb24ocixuKXtpZih0KXJldHVybiBlW3QudG9Mb3dlckNhc2UoKV1bbl07dmFyIGk9WGUuc29ydEJ5KFhlLm1hcChlLG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gcGxyKGUpe3ZhciB0PXVsci5idWlsZExheWVyTWF0cml4KGUpLHI9WGUubWVyZ2UoTXNlKGUsdCksRXNlKGUsdCkpLG49e30saTtYZS5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbihhKXtpPWE9PT0idSI/dDpYZS52YWx1ZXModCkucmV2ZXJzZSgpLFhlLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3M9PT0iciImJihpPVhlLm1hcChpLGZ1bmN0aW9uKGgpe3JldHVybiBYZS52YWx1ZXMoaCkucmV2ZXJzZSgpfSkpO3ZhciBsPShhPT09InUiP2UucHJlZGVjZXNzb3JzOmUuc3VjY2Vzc29ycykuYmluZChlKSxjPUNzZShlLGkscixsKSx1PUFzZShlLGksYy5yb290LGMuYWxpZ24scz09PSJyIik7cz09PSJyIiYmKHU9WGUubWFwVmFsdWVzKHUsZnVuY3Rpb24oaCl7cmV0dXJuLWh9KSksblthK3NdPXV9KX0pO3ZhciBvPVBzZShlLG4pO3JldHVybiBJc2UobixvKSxMc2UobixlLmdyYXBoKCkuYWxpZ24pfWZ1bmN0aW9uIGRscihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgYT1uLm5vZGUoaSkscz1uLm5vZGUobyksbD0wLGM7aWYobCs9YS53aWR0aC8yLFhlLmhhcyhhLCJsYWJlbHBvcyIpKXN3aXRjaChhLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz0tYS53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Yz1hLndpZHRoLzI7YnJlYWt9aWYoYyYmKGwrPXI/YzotYyksYz0wLGwrPShhLmR1bW15P3Q6ZSkvMixsKz0ocy5kdW1teT90OmUpLzIsbCs9cy53aWR0aC8yLFhlLmhhcyhzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz1zLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpjPS1zLndpZHRoLzI7YnJlYWt9cmV0dXJuIGMmJihsKz1yP2M6LWMpLGM9MCxsfX1mdW5jdGlvbiBtbHIoZSx0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofX0pO3ZhciBPc2U9SCgod1FuLERzZSk9PnsidXNlIHN0cmljdCI7dmFyIFo0PVVuKCksTnNlPW5zKCksZ2xyPVJzZSgpLnBvc2l0aW9uWDtEc2UuZXhwb3J0cz1fbHI7ZnVuY3Rpb24gX2xyKGUpe2U9TnNlLmFzTm9uQ29tcG91bmRHcmFwaChlKSx5bHIoZSksWjQuZm9yRWFjaChnbHIoZSksZnVuY3Rpb24odCxyKXtlLm5vZGUocikueD10fSl9ZnVuY3Rpb24geWxyKGUpe3ZhciB0PU5zZS5idWlsZExheWVyTWF0cml4KGUpLHI9ZS5ncmFwaCgpLnJhbmtzZXAsbj0wO1o0LmZvckVhY2godCxmdW5jdGlvbihpKXt2YXIgbz1aNC5tYXgoWjQubWFwKGksZnVuY3Rpb24oYSl7cmV0dXJuIGUubm9kZShhKS5oZWlnaHR9KSk7WjQuZm9yRWFjaChpLGZ1bmN0aW9uKGEpe2Uubm9kZShhKS55PW4rby8yfSksbis9bytyfSl9fSk7dmFyIFVzZT1IKChTUW4sVnNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaXI9VW4oKSx6c2U9eGFlKCksRnNlPUNhZSgpLHZscj1WYWUoKSx4bHI9bnMoKS5ub3JtYWxpemVSYW5rcyxibHI9cWFlKCksd2xyPW5zKCkucmVtb3ZlRW1wdHlSYW5rcyxCc2U9WWFlKCksU2xyPSRhZSgpLEhzZT1RYWUoKSxNbHI9U3NlKCksRWxyPU9zZSgpLGQwPW5zKCksVGxyPVVjKCkuR3JhcGg7VnNlLmV4cG9ydHM9Q2xyO2Z1bmN0aW9uIENscihlLHQpe3ZhciByPXQmJnQuZGVidWdUaW1pbmc/ZDAudGltZTpkMC5ub3RpbWU7cigibGF5b3V0IixmdW5jdGlvbigpe3ZhciBuPXIoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gRmxyKGUpfSk7cigiICBydW5MYXlvdXQiLGZ1bmN0aW9uKCl7QWxyKG4scil9KSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLGZ1bmN0aW9uKCl7UGxyKGUsbil9KX0pfWZ1bmN0aW9uIEFscihlLHQpe3QoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIixmdW5jdGlvbigpe0JscihlKX0pLHQoIiAgICByZW1vdmVTZWxmRWRnZXMiLGZ1bmN0aW9uKCl7WGxyKGUpfSksdCgiICAgIGFjeWNsaWMiLGZ1bmN0aW9uKCl7enNlLnJ1bihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe0JzZS5ydW4oZSl9KSx0KCIgICAgcmFuayIsZnVuY3Rpb24oKXt2bHIoZDAuYXNOb25Db21wb3VuZEdyYXBoKGUpKX0pLHQoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe0hscihlKX0pLHQoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe3dscihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtCc2UuY2xlYW51cChlKX0pLHQoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXt4bHIoZSl9KSx0KCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXtWbHIoZSl9KSx0KCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtVbHIoZSl9KSx0KCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtGc2UucnVuKGUpfSksdCgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe2JscihlKX0pLHQoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXtTbHIoZSl9KSx0KCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7TWxyKGUpfSksdCgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXskbHIoZSl9KSx0KCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtIc2UuYWRqdXN0KGUpfSksdCgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe0VscihlKX0pLHQoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsZnVuY3Rpb24oKXtLbHIoZSl9KSx0KCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLGZ1bmN0aW9uKCl7amxyKGUpfSksdCgiICAgIG5vcm1hbGl6ZS51bmRvIixmdW5jdGlvbigpe0ZzZS51bmRvKGUpfSksdCgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1dscihlKX0pLHQoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtIc2UudW5kbyhlKX0pLHQoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtxbHIoZSl9KSx0KCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7R2xyKGUpfSksdCgiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7WWxyKGUpfSksdCgiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXt6c2UudW5kbyhlKX0pfWZ1bmN0aW9uIFBscihlLHQpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKSxpPXQubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LHQuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2UociksaT10LmVkZ2Uocik7bi5wb2ludHM9aS5wb2ludHMsaXIuaGFzKGksIngiKSYmKG4ueD1pLngsbi55PWkueSl9KSxlLmdyYXBoKCkud2lkdGg9dC5ncmFwaCgpLndpZHRoLGUuZ3JhcGgoKS5oZWlnaHQ9dC5ncmFwaCgpLmhlaWdodH12YXIgSWxyPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxMbHI9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sa2xyPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sUmxyPVsid2lkdGgiLCJoZWlnaHQiXSxObHI9e3dpZHRoOjAsaGVpZ2h0OjB9LERscj1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxPbHI9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSx6bHI9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIEZscihlKXt2YXIgdD1uZXcgVGxyKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkscj1EbHQoZS5ncmFwaCgpKTtyZXR1cm4gdC5zZXRHcmFwaChpci5tZXJnZSh7fSxMbHIsTmx0KHIsSWxyKSxpci5waWNrKHIsa2xyKSkpLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPURsdChlLm5vZGUobikpO3Quc2V0Tm9kZShuLGlyLmRlZmF1bHRzKE5sdChpLFJsciksTmxyKSksdC5zZXRQYXJlbnQobixlLnBhcmVudChuKSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1EbHQoZS5lZGdlKG4pKTt0LnNldEVkZ2Uobixpci5tZXJnZSh7fSxPbHIsTmx0KGksRGxyKSxpci5waWNrKGksemxyKSkpfSksdH1mdW5jdGlvbiBCbHIoZSl7dmFyIHQ9ZS5ncmFwaCgpO3QucmFua3NlcC89Mixpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYodC5yYW5rZGlyPT09IlRCInx8dC5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIEhscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoci53aWR0aCYmci5oZWlnaHQpe3ZhciBuPWUubm9kZSh0LnYpLGk9ZS5ub2RlKHQudyksbz17cmFuazooaS5yYW5rLW4ucmFuaykvMituLnJhbmssZTp0fTtkMC5hZGREdW1teU5vZGUoZSwiZWRnZS1wcm94eSIsbywiX2VwIil9fSl9ZnVuY3Rpb24gVmxyKGUpe3ZhciB0PTA7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpO24uYm9yZGVyVG9wJiYobi5taW5SYW5rPWUubm9kZShuLmJvcmRlclRvcCkucmFuayxuLm1heFJhbms9ZS5ub2RlKG4uYm9yZGVyQm90dG9tKS5yYW5rLHQ9aXIubWF4KHQsbi5tYXhSYW5rKSl9KSxlLmdyYXBoKCkubWF4UmFuaz10fWZ1bmN0aW9uIFVscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7ci5kdW1teT09PSJlZGdlLXByb3h5IiYmKGUuZWRnZShyLmUpLmxhYmVsUmFuaz1yLnJhbmssZS5yZW1vdmVOb2RlKHQpKX0pfWZ1bmN0aW9uIHFscihlKXt2YXIgdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscj0wLG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGk9MCxvPWUuZ3JhcGgoKSxhPW8ubWFyZ2lueHx8MCxzPW8ubWFyZ2lueXx8MDtmdW5jdGlvbiBsKGMpe3ZhciB1PWMueCxoPWMueSxmPWMud2lkdGgscD1jLmhlaWdodDt0PU1hdGgubWluKHQsdS1mLzIpLHI9TWF0aC5tYXgocix1K2YvMiksbj1NYXRoLm1pbihuLGgtcC8yKSxpPU1hdGgubWF4KGksaCtwLzIpfWlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe2woZS5ub2RlKGMpKX0pLGlyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUuZWRnZShjKTtpci5oYXModSwieCIpJiZsKHUpfSksdC09YSxuLT1zLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUubm9kZShjKTt1LngtPXQsdS55LT1ufSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24oYyl7dmFyIHU9ZS5lZGdlKGMpO2lyLmZvckVhY2godS5wb2ludHMsZnVuY3Rpb24oaCl7aC54LT10LGgueS09bn0pLGlyLmhhcyh1LCJ4IikmJih1LngtPXQpLGlyLmhhcyh1LCJ5IikmJih1LnktPW4pfSksby53aWR0aD1yLXQrYSxvLmhlaWdodD1pLW4rc31mdW5jdGlvbiBHbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpLG49ZS5ub2RlKHQudiksaT1lLm5vZGUodC53KSxvLGE7ci5wb2ludHM/KG89ci5wb2ludHNbMF0sYT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxvPWksYT1uKSxyLnBvaW50cy51bnNoaWZ0KGQwLmludGVyc2VjdFJlY3QobixvKSksci5wb2ludHMucHVzaChkMC5pbnRlcnNlY3RSZWN0KGksYSkpfSl9ZnVuY3Rpb24gV2xyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihpci5oYXMociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFlscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7ci5yZXZlcnNlZCYmci5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gamxyKGUpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2lmKGUuY2hpbGRyZW4odCkubGVuZ3RoKXt2YXIgcj1lLm5vZGUodCksbj1lLm5vZGUoci5ib3JkZXJUb3ApLGk9ZS5ub2RlKHIuYm9yZGVyQm90dG9tKSxvPWUubm9kZShpci5sYXN0KHIuYm9yZGVyTGVmdCkpLGE9ZS5ub2RlKGlyLmxhc3Qoci5ib3JkZXJSaWdodCkpO3Iud2lkdGg9TWF0aC5hYnMoYS54LW8ueCksci5oZWlnaHQ9TWF0aC5hYnMoaS55LW4ueSksci54PW8ueCtyLndpZHRoLzIsci55PW4ueStyLmhlaWdodC8yfX0pLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2Uubm9kZSh0KS5kdW1teT09PSJib3JkZXIiJiZlLnJlbW92ZU5vZGUodCl9KX1mdW5jdGlvbiBYbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7aWYodC52PT09dC53KXt2YXIgcj1lLm5vZGUodC52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlOnQsbGFiZWw6ZS5lZGdlKHQpfSksZS5yZW1vdmVFZGdlKHQpfX0pfWZ1bmN0aW9uICRscihlKXt2YXIgdD1kMC5idWlsZExheWVyTWF0cml4KGUpO2lyLmZvckVhY2godCxmdW5jdGlvbihyKXt2YXIgbj0wO2lyLmZvckVhY2gocixmdW5jdGlvbihpLG8pe3ZhciBhPWUubm9kZShpKTthLm9yZGVyPW8rbixpci5mb3JFYWNoKGEuc2VsZkVkZ2VzLGZ1bmN0aW9uKHMpe2QwLmFkZER1bW15Tm9kZShlLCJzZWxmZWRnZSIse3dpZHRoOnMubGFiZWwud2lkdGgsaGVpZ2h0OnMubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOm8rICsrbixlOnMuZSxsYWJlbDpzLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYS5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIEtscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7aWYoci5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBuPWUubm9kZShyLmUudiksaT1uLngrbi53aWR0aC8yLG89bi55LGE9ci54LWkscz1uLmhlaWdodC8yO2Uuc2V0RWRnZShyLmUsci5sYWJlbCksZS5yZW1vdmVOb2RlKHQpLHIubGFiZWwucG9pbnRzPVt7eDppKzIqYS8zLHk6by1zfSx7eDppKzUqYS82LHk6by1zfSx7eDppK2EseTpvfSx7eDppKzUqYS82LHk6bytzfSx7eDppKzIqYS8zLHk6bytzfV0sci5sYWJlbC54PXIueCxyLmxhYmVsLnk9ci55fX0pfWZ1bmN0aW9uIE5sdChlLHQpe3JldHVybiBpci5tYXBWYWx1ZXMoaXIucGljayhlLHQpLE51bWJlcil9ZnVuY3Rpb24gRGx0KGUpe3ZhciB0PXt9O3JldHVybiBpci5mb3JFYWNoKGUsZnVuY3Rpb24ocixuKXt0W24udG9Mb3dlckNhc2UoKV09cn0pLHR9fSk7dmFyIEdzZT1IKChNUW4scXNlKT0+e3ZhciBwSD1VbigpLFpscj1ucygpLEpscj1VYygpLkdyYXBoO3FzZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOlFscn07ZnVuY3Rpb24gUWxyKGUpe3ZhciB0PVpsci5idWlsZExheWVyTWF0cml4KGUpLHI9bmV3IEpscih7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLnNldEdyYXBoKHt9KTtyZXR1cm4gcEguZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obil7ci5zZXROb2RlKG4se2xhYmVsOm59KSxyLnNldFBhcmVudChuLCJsYXllciIrZS5ub2RlKG4pLnJhbmspfSkscEguZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24obil7ci5zZXRFZGdlKG4udixuLncse30sbi5uYW1lKX0pLHBILmZvckVhY2godCxmdW5jdGlvbihuLGkpe3ZhciBvPSJsYXllciIraTtyLnNldE5vZGUobyx7cmFuazoic2FtZSJ9KSxwSC5yZWR1Y2UobixmdW5jdGlvbihhLHMpe3JldHVybiByLnNldEVkZ2UoYSxzLHtzdHlsZToiaW52aXMifSksc30pfSkscn19KTt2YXIgWXNlPUgoKEVRbixXc2UpPT57V3NlLmV4cG9ydHM9IjAuOC41In0pO3ZhciBPbHQ9SCgoVFFuLGpzZSk9Pntqc2UuZXhwb3J0cz17Z3JhcGhsaWI6VWMoKSxsYXlvdXQ6VXNlKCksZGVidWc6R3NlKCksdXRpbDp7dGltZTpucygpLnRpbWUsbm90aW1lOm5zKCkubm90aW1lfSx2ZXJzaW9uOllzZSgpfX0pO3ZhciBWZHQ9RWUoSGR0KCksMSkse19fZXh0ZW5kczpkX3IsX19hc3NpZ246bV9yLF9fcmVzdDpnX3IsX19kZWNvcmF0ZTpFLF9fcGFyYW06X19yLF9fZXNEZWNvcmF0ZTp5X3IsX19ydW5Jbml0aWFsaXplcnM6dl9yLF9fcHJvcEtleTp4X3IsX19zZXRGdW5jdGlvbk5hbWU6Yl9yLF9fbWV0YWRhdGE6dyxfX2F3YWl0ZXI6d19yLF9fZ2VuZXJhdG9yOlNfcixfX2V4cG9ydFN0YXI6TV9yLF9fY3JlYXRlQmluZGluZzpFX3IsX192YWx1ZXM6VF9yLF9fcmVhZDpDX3IsX19zcHJlYWQ6QV9yLF9fc3ByZWFkQXJyYXlzOlBfcixfX3NwcmVhZEFycmF5OklfcixfX2F3YWl0OkxfcixfX2FzeW5jR2VuZXJhdG9yOmtfcixfX2FzeW5jRGVsZWdhdG9yOlJfcixfX2FzeW5jVmFsdWVzOk5fcixfX21ha2VUZW1wbGF0ZU9iamVjdDpEX3IsX19pbXBvcnRTdGFyOk9fcixfX2ltcG9ydERlZmF1bHQ6el9yLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6Rl9yLF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6Ql9yLF9fY2xhc3NQcml2YXRlRmllbGRJbjpIX3J9PVZkdC5kZWZhdWx0O2Z1bmN0aW9uIHl0KGUpe3JldHVybiB0PT57aWYoZSlpZih0Lmhhc093blByb3BlcnR5KCJpcyIpKXtpZihlIT09dC5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke2V9ICE9PSAke3QuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzIix7dmFsdWU6ZX0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUodC5pcyx0KX19ZnVuY3Rpb24gVWR0KGUsdCxyKXtlLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KCJwcm9wZXJ0aWVzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLmNvbnN0cnVjdG9yLCJwcm9wZXJ0aWVzIix7dmFsdWU6e319KSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF09T2JqZWN0LmFzc2lnbih7fSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF0scil9ZnVuY3Rpb24gQShlKXtyZXR1cm4odCxyKT0+e1VkdCh0LHIsZSl9fWZ1bmN0aW9uIEJ0KC4uLmUpe3JldHVybih0LHIpPT57dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgib2JzZXJ2ZXJzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmNvbnN0cnVjdG9yLCJvYnNlcnZlcnMiLHt2YWx1ZTpbXX0pLHQuY29uc3RydWN0b3Iub2JzZXJ2ZXJzLnB1c2goYCR7cn0oJHtlLmpvaW4oIiwiKX0pYCl9fWZ1bmN0aW9uIFJ0KGUsLi4udCl7cmV0dXJuKHIsbixpKT0+e2xldCBvPWBfX2NvbXB1dGUke259YDtPYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTppLmdldH0pLGkuZ2V0PXZvaWQgMDtsZXQgYT1bZSwuLi50XS5qb2luKCIsIik7VWR0KHIsbix7Y29tcHV0ZWQ6YCR7b30oJHthfSlgfSl9fXZhciBVX3I9cWR0KChlLHQpPT5lLnF1ZXJ5U2VsZWN0b3IodCkpLHFfcj1xZHQoKGUsdCk9PmUucXVlcnlTZWxlY3RvckFsbCh0KSk7ZnVuY3Rpb24gcWR0KGUpe3JldHVybiB0PT4ocixuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG4se2dldCgpe3JldHVybiBlKHRoaXMuc2hhZG93Um9vdCx0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX07dmFyIFR2ZT0vKHVybFwoKShbXildKikoXCkpL2csQ3ZlPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLyxJSSxacztmdW5jdGlvbiBsXyhlLHQpe2lmKGUmJkN2ZS50ZXN0KGUpfHxlPT09Ii8vIilyZXR1cm4gZTtpZihJST09PXZvaWQgMCl7SUk9ITE7dHJ5e2xldCByPW5ldyBVUkwoImIiLCJodHRwOi8vYSIpO3IucGF0aG5hbWU9ImMlMjBkIixJST1yLmhyZWY9PT0iaHR0cDovL2EvYyUyMGQifWNhdGNoKHIpe319aWYodHx8KHQ9ZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpLElJKXRyeXtyZXR1cm4gbmV3IFVSTChlLHQpLmhyZWZ9Y2F0Y2gocil7cmV0dXJuIGV9cmV0dXJuIFpzfHwoWnM9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJ0ZW1wIiksWnMuYmFzZT1acy5jcmVhdGVFbGVtZW50KCJiYXNlIiksWnMuaGVhZC5hcHBlbmRDaGlsZChacy5iYXNlKSxacy5hbmNob3I9WnMuY3JlYXRlRWxlbWVudCgiYSIpLFpzLmJvZHkuYXBwZW5kQ2hpbGQoWnMuYW5jaG9yKSksWnMuYmFzZS5ocmVmPXQsWnMuYW5jaG9yLmhyZWY9ZSxacy5hbmNob3IuaHJlZnx8ZX1mdW5jdGlvbiBITShlLHQpe3JldHVybiBlLnJlcGxhY2UoVHZlLGZ1bmN0aW9uKHIsbixpLG8pe3JldHVybiBuKyInIitsXyhpLnJlcGxhY2UoL1siJ10vZywiIiksdCkrIiciK299KX1mdW5jdGlvbiBDeChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCxlLmxhc3RJbmRleE9mKCIvIikrMSl9dmFyIGNfPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2UsJF9yPUJvb2xlYW4oIXdpbmRvdy5TaGFkeUNTU3x8d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcyksS19yPSF3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayxHZHQ9Y18mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtsZXQgZT1uZXcgQ1NTU3R5bGVTaGVldDtlLnJlcGxhY2VTeW5jKCIiKTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cz1bZV0sdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0c1swXT09PWV9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxXZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxDeChkb2N1bWVudC5iYXNlVVJJfHx3aW5kb3cubG9jYXRpb24uaHJlZik7dmFyIFZNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDA7dmFyIFlkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExO3ZhciBpdT13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3l8fCExO3ZhciBqZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmFsbG93VGVtcGxhdGVGcm9tRG9tTW9kdWxlfHwhMTt2YXIgcHA9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnN8fCExO3ZhciBMST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExO3ZhciBYZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMTt2YXIga0k9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeVVuZGVmaW5lZHx8ITE7dmFyICRkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIub3JkZXJlZENvbXB1dGVkfHwhMTt2YXIgZkc9ITA7dmFyIHBHPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5yZW1vdmVOZXN0ZWRUZW1wbGF0ZXN8fCExO3ZhciBSST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuZmFzdERvbUlmfHwhMTt2YXIgVU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMTt2YXIgcU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU5vT2JzZXJ2ZWRBdHRyaWJ1dGVzfHwhMTt2YXIgS2R0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci51c2VBZG9wdGVkU3R5bGVTaGVldHNXaXRoQnVpbHRDU1N8fCExO3ZhciBBdmU9MDtmdW5jdGlvbiBaZHQoKXt9WmR0LnByb3RvdHlwZS5fX21peGluQXBwbGljYXRpb25zO1pkdC5wcm90b3R5cGUuX19taXhpblNldDt2YXIgUm49ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fX21peGluQXBwbGljYXRpb25zO3R8fCh0PW5ldyBXZWFrTWFwLGUuX19taXhpbkFwcGxpY2F0aW9ucz10KTtsZXQgcj1BdmUrKztmdW5jdGlvbiBuKGkpe2xldCBvPWkuX19taXhpblNldDtpZihvJiZvW3JdKXJldHVybiBpO2xldCBhPXQscz1hLmdldChpKTtpZighcyl7cz1lKGkpLGEuc2V0KGkscyk7bGV0IGw9T2JqZWN0LmNyZWF0ZShzLl9fbWl4aW5TZXR8fG98fG51bGwpO2xbcl09ITAscy5fX21peGluU2V0PWx9cmV0dXJuIHN9cmV0dXJuIG59O3ZhciBkRz17fSx0bXQ9e307ZnVuY3Rpb24gSmR0KGUsdCl7ZEdbZV09dG10W2UudG9Mb3dlckNhc2UoKV09dH1mdW5jdGlvbiBRZHQoZSl7cmV0dXJuIGRHW2VdfHx0bXRbZS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiBQdmUoZSl7ZS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpJiZjb25zb2xlLndhcm4oImRvbS1tb2R1bGUgJXMgaGFzIHN0eWxlIG91dHNpZGUgdGVtcGxhdGUiLGUuaWQpfXZhciBvdT1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxyKXtpZih0KXtsZXQgbj1RZHQodCk7cmV0dXJuIG4mJnI/bi5xdWVyeVNlbGVjdG9yKHIpOm59cmV0dXJuIG51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3IhPT1uJiZ0aGlzLnJlZ2lzdGVyKCl9Z2V0IGFzc2V0cGF0aCgpe2lmKCF0aGlzLl9fYXNzZXRwYXRoKXtsZXQgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LHI9bF8odGhpcy5nZXRBdHRyaWJ1dGUoImFzc2V0cGF0aCIpfHwiIix0LmJhc2VVUkkpO3RoaXMuX19hc3NldHBhdGg9Q3gocil9cmV0dXJuIHRoaXMuX19hc3NldHBhdGh9cmVnaXN0ZXIodCl7aWYodD10fHx0aGlzLmlkLHQpe2lmKGl1JiZRZHQodCkhPT12b2lkIDApdGhyb3cgSmR0KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQsSmR0KHQsdGhpcyksUHZlKHRoaXMpfX19O291LnByb3RvdHlwZS5tb2R1bGVzPWRHO2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsb3UpO3ZhciBJdmU9ImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIsTHZlPSJpbmNsdWRlIixlbXQ9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBtRyhlKXtyZXR1cm4gb3UuaW1wb3J0KGUpfWZ1bmN0aW9uIHJtdChlKXtsZXQgdD1lLmJvZHk/ZS5ib2R5OmUscj1ITSh0LnRleHRDb250ZW50LGUuYmFzZVVSSSksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBuLnRleHRDb250ZW50PXIsbn1mdW5jdGlvbiBrdmUoZSl7bGV0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pLHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKC4uLlJ2ZSh0W25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUnZlKGUpe2xldCB0PW1HKGUpO2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkIixlKSxbXTtpZih0Ll9zdHlsZXM9PT12b2lkIDApe2xldCByPVtdO3IucHVzaCguLi5nRyh0KSk7bGV0IG49dC5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO24mJnIucHVzaCguLi5OSShuLHQuYXNzZXRwYXRoKSksdC5fc3R5bGVzPXJ9cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBOSShlLHQpe2lmKCFlLl9zdHlsZXMpe2xldCByPVtdLG49ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1vLmdldEF0dHJpYnV0ZShMdmUpO2EmJnIucHVzaCguLi5rdmUoYSkuZmlsdGVyKGZ1bmN0aW9uKHMsbCxjKXtyZXR1cm4gYy5pbmRleE9mKHMpPT09bH0pKSx0JiYoby50ZXh0Q29udGVudD1ITShvLnRleHRDb250ZW50LHQpKSxyLnB1c2gobyl9ZS5fc3R5bGVzPXJ9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBubXQoZSl7bGV0IHQ9bUcoZSk7cmV0dXJuIHQ/Z0codCk6W119ZnVuY3Rpb24gZ0coZSl7bGV0IHQ9W10scj1lLnF1ZXJ5U2VsZWN0b3JBbGwoSXZlKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXTtpZihpLmltcG9ydCl7bGV0IG89aS5pbXBvcnQsYT1pLmhhc0F0dHJpYnV0ZShlbXQpO2lmKGEmJiFvLl91bnNjb3BlZFN0eWxlKXtsZXQgcz1ybXQobyk7cy5zZXRBdHRyaWJ1dGUoZW10LCIiKSxvLl91bnNjb3BlZFN0eWxlPXN9ZWxzZSBvLl9zdHlsZXx8KG8uX3N0eWxlPXJtdChvKSk7dC5wdXNoKGE/by5fdW5zY29wZWRTdHlsZTpvLl9zdHlsZSl9fXJldHVybiB0fWZ1bmN0aW9uIGltdChlKXtsZXQgdD1lLnRyaW0oKS5zcGxpdCgvXHMrLykscj0iIjtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyKz1OdmUodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTnZlKGUpe2xldCB0PW1HKGUpO2lmKHQmJnQuX2Nzc1RleHQ9PT12b2lkIDApe2xldCByPU92ZSh0KSxuPXQucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYocis9RHZlKG4sdC5hc3NldHBhdGgpKSx0Ll9jc3NUZXh0PXJ8fG51bGx9cmV0dXJuIHR8fGNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgc3R5bGUgZGF0YSBpbiBtb2R1bGUgbmFtZWQiLGUpLHQmJnQuX2Nzc1RleHR8fCIifWZ1bmN0aW9uIER2ZShlLHQpe2xldCByPSIiLG49TkkoZSx0KTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtvLnBhcmVudE5vZGUmJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSxyKz1vLnRleHRDb250ZW50fXJldHVybiByfWZ1bmN0aW9uIE92ZShlKXtsZXQgdD0iIixyPWdHKGUpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl0udGV4dENvbnRlbnQ7cmV0dXJuIHR9dmFyIHVlPXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS53cmFwP3dpbmRvdy5TaGFkeURPTS53cmFwOndpbmRvdy5TaGFkeURPTT9lPT5TaGFkeURPTS5wYXRjaChlKTplPT5lO2Z1bmN0aW9uIERJKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiBhdShlKXtsZXQgdD1lLmluZGV4T2YoIi4iKTtyZXR1cm4gdD09PS0xP2U6ZS5zbGljZSgwLHQpfWZ1bmN0aW9uIF9HKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KyIuIik9PT0wfWZ1bmN0aW9uIEF4KGUsdCl7cmV0dXJuIHQuaW5kZXhPZihlKyIuIik9PT0wfWZ1bmN0aW9uIGRwKGUsdCxyKXtyZXR1cm4gdCtyLnNsaWNlKGUubGVuZ3RoKX1mdW5jdGlvbiBPSShlLHQpe3JldHVybiBlPT09dHx8X0coZSx0KXx8QXgoZSx0KX1mdW5jdGlvbiBQeChlKXtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49ZVtyXS50b1N0cmluZygpLnNwbGl0KCIuIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdC5wdXNoKG5baV0pfXJldHVybiB0LmpvaW4oIi4iKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIG9tdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9QeChlKS5zcGxpdCgiLiIpOmUudG9TdHJpbmcoKS5zcGxpdCgiLiIpfWZ1bmN0aW9uIE5vKGUsdCxyKXtsZXQgbj1lLGk9b210KHQpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtpZighbilyZXR1cm47bGV0IGE9aVtvXTtuPW5bYV19cmV0dXJuIHImJihyLnBhdGg9aS5qb2luKCIuIikpLG59ZnVuY3Rpb24geUcoZSx0LHIpe2xldCBuPWUsaT1vbXQodCksbz1pW2kubGVuZ3RoLTFdO2lmKGkubGVuZ3RoPjEpe2ZvcihsZXQgYT0wO2E8aS5sZW5ndGgtMTthKyspe2xldCBzPWlbYV07aWYobj1uW3NdLCFuKXJldHVybn1uW29dPXJ9ZWxzZSBuW3RdPXI7cmV0dXJuIGkuam9pbigiLiIpfXZhciB6ST17fSx6dmU9Ly1bYS16XS9nLEZ2ZT0vKFtBLVpdKS9nO2Z1bmN0aW9uIHdtKGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUuaW5kZXhPZigiLSIpPDA/ZTplLnJlcGxhY2UoenZlLHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpfWZ1bmN0aW9uIEl4KGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUucmVwbGFjZShGdmUsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfXZhciBCdmU9MCxhbXQ9MCxMeD1bXSxIdmU9MCx2Rz0hMSxzbXQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO25ldyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcihWdmUpLm9ic2VydmUoc210LHtjaGFyYWN0ZXJEYXRhOiEwfSk7ZnVuY3Rpb24gVnZlKCl7dkc9ITE7bGV0IGU9THgubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCByPUx4W3RdO2lmKHIpdHJ5e3IoKX1jYXRjaChuKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgbn0pfX1MeC5zcGxpY2UoMCxlKSxhbXQrPWV9dmFyIG1vPXthZnRlcihlKXtyZXR1cm57cnVuKHQpe3JldHVybiB3aW5kb3cuc2V0VGltZW91dCh0LGUpfSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19fSxydW4oZSx0KXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZSx0KX0sY2FuY2VsKGUpe3dpbmRvdy5jbGVhclRpbWVvdXQoZSl9fTt2YXIgTmk9e3J1bihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShlKX19O3ZhciBreD17cnVuKGUpe3JldHVybiB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjaz93aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjayhlKTp3aW5kb3cuc2V0VGltZW91dChlLDE2KX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayhlKTp3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX07dmFyIGxpPXtydW4oZSl7cmV0dXJuIHZHfHwodkc9ITAsc210LnRleHRDb250ZW50PUh2ZSsrKSxMeC5wdXNoKGUpLEJ2ZSsrfSxjYW5jZWwoZSl7bGV0IHQ9ZS1hbXQ7aWYodD49MCl7aWYoIUx4W3RdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrZSk7THhbdF09bnVsbH19fTt2YXIgVXZlPWxpLEZJPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhuKXtsZXQgaT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG8gaW4gbilvIGluIGl8fGkuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobyl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkobil7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChuKSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3Jbbl18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW25dPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IobixpKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAobil7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgaT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbbl07cmV0dXJuIGl8fChpPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pLHRoaXMuX19kYXRhQXR0cmlidXRlc1tpXT1uKSxpfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbix7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW25dfSxzZXQ6aT9mdW5jdGlvbigpe306ZnVuY3Rpb24obyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IG4gaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KG4pJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW25dPXRoaXNbbl0sZGVsZXRlIHRoaXNbbl0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKG4pe09iamVjdC5hc3NpZ24odGhpcyxuKX1fc2V0UHJvcGVydHkobixpKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkobixpKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkobil7cmV0dXJuIHRoaXMuX19kYXRhW25dfV9zZXRQZW5kaW5nUHJvcGVydHkobixpLG8pe2xldCBhPXRoaXMuX19kYXRhW25dLHM9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLGEpO3JldHVybiBzJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmIShuIGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW25dPWEpLHRoaXMuX19kYXRhW25dPWksdGhpcy5fX2RhdGFQZW5kaW5nW25dPWkpLHN9X2lzUHJvcGVydHlQZW5kaW5nKG4pe3JldHVybiEhKHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fX2RhdGFQZW5kaW5nLmhhc093blByb3BlcnR5KG4pKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXshdGhpcy5fX2RhdGFJbnZhbGlkJiZ0aGlzLl9fZGF0YVJlYWR5JiYodGhpcy5fX2RhdGFJbnZhbGlkPSEwLFV2ZS5ydW4oKCk9Pnt0aGlzLl9fZGF0YUludmFsaWQmJih0aGlzLl9fZGF0YUludmFsaWQ9ITEsdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCkpfSkpfV9lbmFibGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFFbmFibGVkfHwodGhpcy5fX2RhdGFFbmFibGVkPSEwLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyYmKHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKSx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHM9bnVsbCksdGhpcy5yZWFkeSgpKX1fZmx1c2hQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFDb3VudGVyKys7bGV0IG49dGhpcy5fX2RhdGEsaT10aGlzLl9fZGF0YVBlbmRpbmcsbz10aGlzLl9fZGF0YU9sZDt0aGlzLl9zaG91bGRQcm9wZXJ0aWVzQ2hhbmdlKG4saSxvKSYmKHRoaXMuX19kYXRhUGVuZGluZz1udWxsLHRoaXMuX19kYXRhT2xkPW51bGwsdGhpcy5fcHJvcGVydGllc0NoYW5nZWQobixpLG8pKSx0aGlzLl9fZGF0YUNvdW50ZXItLX1fc2hvdWxkUHJvcGVydGllc0NoYW5nZShuLGksbyl7cmV0dXJuIEJvb2xlYW4oaSl9X3Byb3BlcnRpZXNDaGFuZ2VkKG4saSxvKXt9X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gbyE9PWkmJihvPT09b3x8aT09PWkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuLGksbyxhKXtpIT09byYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eShuLG8pLHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayYmc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG4saSxvLGEpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KG4saSxvKXtpZighdGhpcy5fX3NlcmlhbGl6aW5nKXtsZXQgYT10aGlzLl9fZGF0YUF0dHJpYnV0ZXMscz1hJiZhW25dfHxuO3RoaXNbc109dGhpcy5fZGVzZXJpYWxpemVWYWx1ZShpLG98fHRoaXMuY29uc3RydWN0b3IudHlwZUZvclByb3BlcnR5KHMpKX19X3Byb3BlcnR5VG9BdHRyaWJ1dGUobixpLG8pe3RoaXMuX19zZXJpYWxpemluZz0hMCxvPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW25dOm8sdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxvLGl8fHRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pKSx0aGlzLl9fc2VyaWFsaXppbmc9ITF9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG4saSxvKXtsZXQgYT10aGlzLl9zZXJpYWxpemVWYWx1ZShpKTsobz09PSJjbGFzcyJ8fG89PT0ibmFtZSJ8fG89PT0ic2xvdCIpJiYobj11ZShuKSksYT09PXZvaWQgMD9uLnJlbW92ZUF0dHJpYnV0ZShvKTpuLnNldEF0dHJpYnV0ZShvLGEpfV9zZXJpYWxpemVWYWx1ZShuKXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIG4/IiI6dm9pZCAwO2RlZmF1bHQ6cmV0dXJuIG4hPW51bGw/bi50b1N0cmluZygpOnZvaWQgMH19X2Rlc2VyaWFsaXplVmFsdWUobixpKXtzd2l0Y2goaSl7Y2FzZSBCb29sZWFuOnJldHVybiBuIT09bnVsbDtjYXNlIE51bWJlcjpyZXR1cm4gTnVtYmVyKG4pO2RlZmF1bHQ6cmV0dXJuIG59fX1yZXR1cm4gdH0pO3ZhciBsbXQ9e30sQkk9SFRNTEVsZW1lbnQucHJvdG90eXBlO2Zvcig7Qkk7KXtsZXQgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhCSSk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspbG10W2VbdF1dPSEwO0JJPU9iamVjdC5nZXRQcm90b3R5cGVPZihCSSl9ZnVuY3Rpb24gcXZlKGUsdCl7aWYoIWxtdFt0XSl7bGV0IHI9ZVt0XTtyIT09dm9pZCAwJiYoZS5fX2RhdGE/ZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHQscik6KGUuX19kYXRhUHJvdG8/ZS5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsZSkpfHwoZS5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKGUuX19kYXRhUHJvdG8pKTplLl9fZGF0YVByb3RvPXt9LGUuX19kYXRhUHJvdG9bdF09cikpfX12YXIgSEk9Um4oZT0+e2xldCB0PUZJKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzRm9yQXR0cmlidXRlcygpe2xldCBpPXRoaXMub2JzZXJ2ZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXRoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHdtKGlbb10pKX1zdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpe3JldHVybiBJeChpKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVByb3RvJiYodGhpcy5faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0aGlzLl9fZGF0YVByb3RvKSx0aGlzLl9fZGF0YVByb3RvPW51bGwpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKGkpe2ZvcihsZXQgbyBpbiBpKXRoaXMuX3NldFByb3BlcnR5KG8saVtvXSl9X2Vuc3VyZUF0dHJpYnV0ZShpLG8pe2xldCBhPXRoaXM7YS5oYXNBdHRyaWJ1dGUoaSl8fHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKGEsbyxpKX1fc2VyaWFsaXplVmFsdWUoaSl7c3dpdGNoKHR5cGVvZiBpKXtjYXNlIm9iamVjdCI6aWYoaSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGkudG9TdHJpbmcoKTtpZihpKXRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2gobyl7cmV0dXJuIiJ9ZGVmYXVsdDpyZXR1cm4gc3VwZXIuX3NlcmlhbGl6ZVZhbHVlKGkpfX1fZGVzZXJpYWxpemVWYWx1ZShpLG8pe2xldCBhO3N3aXRjaChvKXtjYXNlIE9iamVjdDp0cnl7YT1KU09OLnBhcnNlKGkpfWNhdGNoKHMpe2E9aX1icmVhaztjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoaSl9Y2F0Y2gocyl7YT1udWxsLGNvbnNvbGUud2FybihgUG9seW1lcjo6QXR0cmlidXRlczogY291bGRuJ3QgZGVjb2RlIEFycmF5IGFzIEpTT046ICR7aX1gKX1icmVhaztjYXNlIERhdGU6YT1pc05hTihpKT9TdHJpbmcoaSk6TnVtYmVyKGkpLGE9bmV3IERhdGUoYSk7YnJlYWs7ZGVmYXVsdDphPXN1cGVyLl9kZXNlcmlhbGl6ZVZhbHVlKGksbyk7YnJlYWt9cmV0dXJuIGF9X2RlZmluZVByb3BlcnR5QWNjZXNzb3IoaSxvKXtxdmUodGhpcyxpKSxzdXBlci5fZGVmaW5lUHJvcGVydHlBY2Nlc3NvcihpLG8pfV9oYXNBY2Nlc3NvcihpKXtyZXR1cm4gdGhpcy5fX2RhdGFIYXNBY2Nlc3NvciYmdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltpXX1faXNQcm9wZXJ0eVBlbmRpbmcoaSl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2RhdGFQZW5kaW5nJiZpIGluIHRoaXMuX19kYXRhUGVuZGluZyl9fXJldHVybiByfSk7dmFyIEd2ZT17ImRvbS1pZiI6ITAsImRvbS1yZXBlYXQiOiEwfSxjbXQ9ITEsdW10PSExO2Z1bmN0aW9uIFd2ZSgpe2lmKCFjbXQpe2NtdD0hMDtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2UucGxhY2Vob2xkZXI9ImEiLHVtdD1lLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudH1yZXR1cm4gdW10fWZ1bmN0aW9uIFl2ZShlKXtXdmUoKSYmZS5sb2NhbE5hbWU9PT0idGV4dGFyZWEiJiZlLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudCYmKGUudGV4dENvbnRlbnQ9bnVsbCl9ZnVuY3Rpb24ganZlKGUpe2xldCB0PWUuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKHQmJkd2ZVt0XSl7bGV0IHI9ZTtmb3Ioci5yZW1vdmVBdHRyaWJ1dGUoImlzIiksZT1yLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KSxyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsciksZS5hcHBlbmRDaGlsZChyKTtyLmF0dHJpYnV0ZXMubGVuZ3RoOyllLnNldEF0dHJpYnV0ZShyLmF0dHJpYnV0ZXNbMF0ubmFtZSxyLmF0dHJpYnV0ZXNbMF0udmFsdWUpLHIucmVtb3ZlQXR0cmlidXRlKHIuYXR0cmlidXRlc1swXS5uYW1lKX1yZXR1cm4gZX1mdW5jdGlvbiBobXQoZSx0KXtsZXQgcj10LnBhcmVudEluZm8mJmhtdChlLHQucGFyZW50SW5mbyk7aWYocil7Zm9yKGxldCBuPXIuZmlyc3RDaGlsZCxpPTA7bjtuPW4ubmV4dFNpYmxpbmcpaWYodC5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gbn1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIFh2ZShlLHQscixuKXtuLmlkJiYodFtuLmlkXT1yKX1mdW5jdGlvbiAkdmUoZSx0LHIpe2lmKHIuZXZlbnRzJiZyLmV2ZW50cy5sZW5ndGgpZm9yKGxldCBuPTAsaT1yLmV2ZW50cyxvO248aS5sZW5ndGgmJihvPWlbbl0pO24rKyllLl9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsby5uYW1lLG8udmFsdWUsZSl9ZnVuY3Rpb24gS3ZlKGUsdCxyLG4pe3IudGVtcGxhdGVJbmZvJiYodC5fdGVtcGxhdGVJbmZvPXIudGVtcGxhdGVJbmZvLHQuX3BhcmVudFRlbXBsYXRlSW5mbz1uKX1mdW5jdGlvbiBadmUoZSx0LHIpe3JldHVybiBlPWUuX21ldGhvZEhvc3R8fGUsZnVuY3Rpb24oaSl7ZVtyXT9lW3JdKGksaS5kZXRhaWwpOmNvbnNvbGUud2FybigibGlzdGVuZXIgbWV0aG9kIGAiK3IrImAgbm90IGRlZmluZWQiKX19dmFyIGZtdD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIF9wYXJzZVRlbXBsYXRlKG4saSl7aWYoIW4uX3RlbXBsYXRlSW5mbyl7bGV0IG89bi5fdGVtcGxhdGVJbmZvPXt9O28ubm9kZUluZm9MaXN0PVtdLG8ubmVzdGVkVGVtcGxhdGU9Qm9vbGVhbihpKSxvLnN0cmlwV2hpdGVTcGFjZT1pJiZpLnN0cmlwV2hpdGVTcGFjZXx8bi5oYXNBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiKSx0aGlzLl9wYXJzZVRlbXBsYXRlQ29udGVudChuLG8se3BhcmVudDpudWxsfSl9cmV0dXJuIG4uX3RlbXBsYXRlSW5mb31zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KG4saSxvKXtyZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUobi5jb250ZW50LGksbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShuLGksbyl7bGV0IGE9ITEscz1uO3JldHVybiBzLmxvY2FsTmFtZT09InRlbXBsYXRlIiYmIXMuaGFzQXR0cmlidXRlKCJwcmVzZXJ2ZS1jb250ZW50Iik/YT10aGlzLl9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUocyxpLG8pfHxhOnMubG9jYWxOYW1lPT09InNsb3QiJiYoaS5oYXNJbnNlcnRpb25Qb2ludD0hMCksWXZlKHMpLHMuZmlyc3RDaGlsZCYmdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocyxpLG8pLHMuaGFzQXR0cmlidXRlcyYmcy5oYXNBdHRyaWJ1dGVzKCkmJihhPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhzLGksbyl8fGEpLGF8fG8ubm90ZWR9c3RhdGljIF9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhuLGksbyl7aWYoIShuLmxvY2FsTmFtZT09PSJzY3JpcHQifHxuLmxvY2FsTmFtZT09PSJzdHlsZSIpKWZvcihsZXQgYT1uLmZpcnN0Q2hpbGQscz0wLGw7YTthPWwpe2lmKGEubG9jYWxOYW1lPT0idGVtcGxhdGUiJiYoYT1qdmUoYSkpLGw9YS5uZXh0U2libGluZyxhLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCB1PWw7Zm9yKDt1JiZ1Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU7KWEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnQsbD11Lm5leHRTaWJsaW5nLG4ucmVtb3ZlQ2hpbGQodSksdT1sO2lmKGkuc3RyaXBXaGl0ZVNwYWNlJiYhYS50ZXh0Q29udGVudC50cmltKCkpe24ucmVtb3ZlQ2hpbGQoYSk7Y29udGludWV9fWxldCBjPXtwYXJlbnRJbmRleDpzLHBhcmVudEluZm86b307dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUoYSxpLGMpJiYoYy5pbmZvSW5kZXg9aS5ub2RlSW5mb0xpc3QucHVzaChjKS0xKSxhLnBhcmVudE5vZGUmJnMrK319c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobixpLG8pe2xldCBhPW4scz10aGlzLl9wYXJzZVRlbXBsYXRlKGEsaSk7cmV0dXJuKHMuY29udGVudD1hLmNvbnRlbnQub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZENoaWxkKGEuY29udGVudCksby50ZW1wbGF0ZUluZm89cywhMH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhuLGksbyl7bGV0IGE9ITEscz1BcnJheS5mcm9tKG4uYXR0cmlidXRlcyk7Zm9yKGxldCBsPXMubGVuZ3RoLTEsYztjPXNbbF07bC0tKWE9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYy5uYW1lLGMudmFsdWUpfHxhO3JldHVybiBhfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYSxzKXtyZXR1cm4gYS5zbGljZSgwLDMpPT09Im9uLSI/KG4ucmVtb3ZlQXR0cmlidXRlKGEpLG8uZXZlbnRzPW8uZXZlbnRzfHxbXSxvLmV2ZW50cy5wdXNoKHtuYW1lOmEuc2xpY2UoMyksdmFsdWU6c30pLCEwKTphPT09ImlkIj8oby5pZD1zLCEwKTohMX1zdGF0aWMgX2NvbnRlbnRGb3JUZW1wbGF0ZShuKXtsZXQgaT1uLl90ZW1wbGF0ZUluZm87cmV0dXJuIGkmJmkuY29udGVudHx8bi5jb250ZW50fV9zdGFtcFRlbXBsYXRlKG4saSl7biYmIW4uY29udGVudCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUobiksaT1pfHx0aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKG4pO2xldCBvPWkubm9kZUluZm9MaXN0LGE9aS5jb250ZW50fHxuLmNvbnRlbnQscz1kb2N1bWVudC5pbXBvcnROb2RlKGEsITApO3MuX19ub0luc2VydGlvblBvaW50PSFpLmhhc0luc2VydGlvblBvaW50O2xldCBsPXMubm9kZUxpc3Q9bmV3IEFycmF5KG8ubGVuZ3RoKTtzLiQ9e307Zm9yKGxldCBjPTAsdT1vLmxlbmd0aCxoO2M8dSYmKGg9b1tjXSk7YysrKXtsZXQgZj1sW2NdPWhtdChzLGgpO1h2ZSh0aGlzLHMuJCxmLGgpLEt2ZSh0aGlzLGYsaCxpKSwkdmUodGhpcyxmLGgpfXJldHVybiBzPXMsc31fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyxhKXthPWF8fG47bGV0IHM9WnZlKGEsaSxvKTtyZXR1cm4gdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGkscyksc31fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7bi5hZGRFdmVudExpc3RlbmVyKGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bi5yZW1vdmVFdmVudExpc3RlbmVyKGksbyl9fXJldHVybiB0fSk7dmFyIGpNPTAsWE09W10senI9e0NPTVBVVEU6Il9fY29tcHV0ZUVmZmVjdHMiLFJFRkxFQ1Q6Il9fcmVmbGVjdEVmZmVjdHMiLE5PVElGWToiX19ub3RpZnlFZmZlY3RzIixQUk9QQUdBVEU6Il9fcHJvcGFnYXRlRWZmZWN0cyIsT0JTRVJWRToiX19vYnNlcnZlRWZmZWN0cyIsUkVBRF9PTkxZOiJfX3JlYWRPbmx5In0seG10PSJfX2NvbXB1dGVJbmZvIixKdmU9L1tBLVpdLztmdW5jdGlvbiB4RyhlLHQscil7bGV0IG49ZVt0XTtpZighbiluPWVbdF09e307ZWxzZSBpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG49ZVt0XT1PYmplY3QuY3JlYXRlKGVbdF0pLHIpKWZvcihsZXQgaSBpbiBuKXtsZXQgbz1uW2ldLGE9bltpXT1BcnJheShvLmxlbmd0aCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspYVtzXT1vW3NdfXJldHVybiBufWZ1bmN0aW9uIFlNKGUsdCxyLG4saSxvKXtpZih0KXtsZXQgYT0hMSxzPWpNKys7Zm9yKGxldCBsIGluIHIpe2xldCBjPWk/YXUobCk6bCx1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cykmJighaXx8TUcobCxwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXMpLHAuZm4oZSxsLHIsbixwLmluZm8saSxvKSxhPSEwKX1yZXR1cm4gYX1yZXR1cm4hMX1mdW5jdGlvbiBRdmUoZSx0LHIsbixpLG8sYSxzKXtsZXQgbD0hMSxjPWE/YXUobik6bix1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cikmJighYXx8TUcobixwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXIpLHAuZm4oZSxuLGksbyxwLmluZm8sYSxzKSxsPSEwKTtyZXR1cm4gbH1mdW5jdGlvbiBNRyhlLHQpe2lmKHQpe2xldCByPXQubmFtZTtyZXR1cm4gcj09ZXx8ISEodC5zdHJ1Y3R1cmVkJiZfRyhyLGUpKXx8ISEodC53aWxkY2FyZCYmQXgocixlKSl9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBwbXQoZSx0LHIsbixpKXtsZXQgbz10eXBlb2YgaS5tZXRob2Q9PSJzdHJpbmciP2VbaS5tZXRob2RdOmkubWV0aG9kLGE9aS5wcm9wZXJ0eTtvP28uY2FsbChlLGUuX19kYXRhW2FdLG5bYV0pOmkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm9ic2VydmVyIG1ldGhvZCBgIitpLm1ldGhvZCsiYCBub3QgZGVmaW5lZCIpfWZ1bmN0aW9uIHQxZShlLHQscixuLGkpe2xldCBvPWVbenIuTk9USUZZXSxhLHM9ak0rKztmb3IobGV0IGMgaW4gdCl0W2NdJiYobyYmUXZlKGUsbyxzLGMscixuLGkpfHxpJiZlMWUoZSxjLHIpKSYmKGE9ITApO2xldCBsO2EmJihsPWUuX19kYXRhSG9zdCkmJmwuX2ludmFsaWRhdGVQcm9wZXJ0aWVzJiZsLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfWZ1bmN0aW9uIGUxZShlLHQscil7bGV0IG49YXUodCk7aWYobiE9PXQpe2xldCBpPUl4KG4pKyItY2hhbmdlZCI7cmV0dXJuIGJtdChlLGksclt0XSx0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBibXQoZSx0LHIsbil7bGV0IGk9e3ZhbHVlOnIscXVldWVQcm9wZXJ0eTohMH07biYmKGkucGF0aD1uKSx1ZShlKS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCh0LHtkZXRhaWw6aX0pKX1mdW5jdGlvbiByMWUoZSx0LHIsbixpLG8pe2xldCBzPShvP2F1KHQpOnQpIT10P3Q6bnVsbCxsPXM/Tm8oZSxzKTplLl9fZGF0YVt0XTtzJiZsPT09dm9pZCAwJiYobD1yW3RdKSxibXQoZSxpLmV2ZW50TmFtZSxsLHMpfWZ1bmN0aW9uIG4xZShlLHQscixuLGkpe2xldCBvLGE9ZS5kZXRhaWwscz1hJiZhLnBhdGg7cz8obj1kcChyLG4scyksbz1hJiZhLnZhbHVlKTpvPWUuY3VycmVudFRhcmdldFtyXSxvPWk/IW86bywoIXRbenIuUkVBRF9PTkxZXXx8IXRbenIuUkVBRF9PTkxZXVtuXSkmJnQuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLG8sITAsQm9vbGVhbihzKSkmJighYXx8IWEucXVldWVQcm9wZXJ0eSkmJnQuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9ZnVuY3Rpb24gaTFlKGUsdCxyLG4saSl7bGV0IG89ZS5fX2RhdGFbdF07Vk0mJihvPVZNKG8saS5hdHRyTmFtZSwiYXR0cmlidXRlIixlKSksZS5fcHJvcGVydHlUb0F0dHJpYnV0ZSh0LGkuYXR0ck5hbWUsbyl9ZnVuY3Rpb24gbzFlKGUsdCxyLG4pe2xldCBpPWVbenIuQ09NUFVURV07aWYoaSlpZigkZHQpe2pNKys7bGV0IG89czFlKGUpLGE9W107Zm9yKGxldCBsIGluIHQpZG10KGwsaSxhLG8sbik7bGV0IHM7Zm9yKDtzPWEuc2hpZnQoKTspd210KGUsIiIsdCxyLHMpJiZkbXQocy5tZXRob2RJbmZvLGksYSxvLG4pO09iamVjdC5hc3NpZ24ocixlLl9fZGF0YU9sZCksT2JqZWN0LmFzc2lnbih0LGUuX19kYXRhUGVuZGluZyksZS5fX2RhdGFQZW5kaW5nPW51bGx9ZWxzZXtsZXQgbz10O2Zvcig7WU0oZSxpLG8scixuKTspT2JqZWN0LmFzc2lnbihyLGUuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKHQsZS5fX2RhdGFQZW5kaW5nKSxvPWUuX19kYXRhUGVuZGluZyxlLl9fZGF0YVBlbmRpbmc9bnVsbH19dmFyIGExZT0oZSx0LHIpPT57bGV0IG49MCxpPXQubGVuZ3RoLTEsbz0tMTtmb3IoO248PWk7KXtsZXQgYT1uK2k+PjEscz1yLmdldCh0W2FdLm1ldGhvZEluZm8pLXIuZ2V0KGUubWV0aG9kSW5mbyk7aWYoczwwKW49YSsxO2Vsc2UgaWYocz4wKWk9YS0xO2Vsc2V7bz1hO2JyZWFrfX1vPDAmJihvPWkrMSksdC5zcGxpY2UobywwLGUpfSxkbXQ9KGUsdCxyLG4saSk9PntsZXQgbz1pP2F1KGUpOmUsYT10W29dO2lmKGEpZm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBsPWFbc107bC5pbmZvLmxhc3RSdW4hPT1qTSYmKCFpfHxNRyhlLGwudHJpZ2dlcikpJiYobC5pbmZvLmxhc3RSdW49ak0sYTFlKGwuaW5mbyxyLG4pKX19O2Z1bmN0aW9uIHMxZShlKXtsZXQgdD1lLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcztpZighdCl7dD1uZXcgTWFwO2xldCByPWVbenIuQ09NUFVURV0se2NvdW50czpuLHJlYWR5OmksdG90YWw6b309bDFlKGUpLGE7Zm9yKDthPWkuc2hpZnQoKTspe3Quc2V0KGEsdC5zaXplKTtsZXQgcz1yW2FdO3MmJnMuZm9yRWFjaChsPT57bGV0IGM9bC5pbmZvLm1ldGhvZEluZm87LS1vLC0tbltjXT09PTAmJmkucHVzaChjKX0pfW8hPT0wJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke2UubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSxlLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz10fXJldHVybiB0fWZ1bmN0aW9uIGwxZShlKXtsZXQgdD1lW3htdF0scj17fSxuPWVbenIuQ09NUFVURV0saT1bXSxvPTA7Zm9yKGxldCBhIGluIHQpe2xldCBzPXRbYV07bys9clthXT1zLmFyZ3MuZmlsdGVyKGw9PiFsLmxpdGVyYWwpLmxlbmd0aCsocy5keW5hbWljRm4/MTowKX1mb3IobGV0IGEgaW4gbil0W2FdfHxpLnB1c2goYSk7cmV0dXJue2NvdW50czpyLHJlYWR5OmksdG90YWw6b319ZnVuY3Rpb24gd210KGUsdCxyLG4saSl7bGV0IG89U0coZSx0LHIsbixpKTtpZihvPT09WE0pcmV0dXJuITE7bGV0IGE9aS5tZXRob2RJbmZvO3JldHVybiBlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2FdP2UuX3NldFBlbmRpbmdQcm9wZXJ0eShhLG8sITApOihlW2FdPW8sITEpfWZ1bmN0aW9uIGMxZShlLHQscil7bGV0IG49ZS5fX2RhdGFMaW5rZWRQYXRocztpZihuKXtsZXQgaTtmb3IobGV0IG8gaW4gbil7bGV0IGE9bltvXTtBeChvLHQpPyhpPWRwKG8sYSx0KSxlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxyLCEwLCEwKSk6QXgoYSx0KSYmKGk9ZHAoYSxvLHQpLGUuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChpLHIsITAsITApKX19fWZ1bmN0aW9uIGJHKGUsdCxyLG4saSxvLGEpe3IuYmluZGluZ3M9ci5iaW5kaW5nc3x8W107bGV0IHM9e2tpbmQ6bix0YXJnZXQ6aSxwYXJ0czpvLGxpdGVyYWw6YSxpc0NvbXBvdW5kOm8ubGVuZ3RoIT09MX07aWYoci5iaW5kaW5ncy5wdXNoKHMpLGQxZShzKSl7bGV0e2V2ZW50OmMsbmVnYXRlOnV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PWN8fEl4KGkpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT11fWxldCBsPXQubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IGM9MDtjPHMucGFydHMubGVuZ3RoO2MrKyl7bGV0IHU9cy5wYXJ0c1tjXTt1LmNvbXBvdW5kSW5kZXg9Yyx1MWUoZSx0LHMsdSxsKX19ZnVuY3Rpb24gdTFlKGUsdCxyLG4saSl7aWYoIW4ubGl0ZXJhbClpZihyLmtpbmQ9PT0iYXR0cmlidXRlIiYmci50YXJnZXRbMF09PT0iLSIpY29uc29sZS53YXJuKCJDYW5ub3Qgc2V0IGF0dHJpYnV0ZSAiK3IudGFyZ2V0KycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIHN0YXJ0aW5nIGNoYXJhY3RlcicpO2Vsc2V7bGV0IG89bi5kZXBlbmRlbmNpZXMsYT17aW5kZXg6aSxiaW5kaW5nOnIscGFydDpuLGV2YWx1YXRvcjplfTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGw9b1tzXTt0eXBlb2YgbD09InN0cmluZyImJihsPU1tdChsKSxsLndpbGRjYXJkPSEwKSxlLl9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHQsbC5yb290UHJvcGVydHkse2ZuOmgxZSxpbmZvOmEsdHJpZ2dlcjpsfSl9fX1mdW5jdGlvbiBoMWUoZSx0LHIsbixpLG8sYSl7bGV0IHM9YVtpLmluZGV4XSxsPWkuYmluZGluZyxjPWkucGFydDtpZihvJiZjLnNvdXJjZSYmdC5sZW5ndGg+Yy5zb3VyY2UubGVuZ3RoJiZsLmtpbmQ9PSJwcm9wZXJ0eSImJiFsLmlzQ29tcG91bmQmJnMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCYmcy5fX2RhdGFIYXNBY2Nlc3NvciYmcy5fX2RhdGFIYXNBY2Nlc3NvcltsLnRhcmdldF0pe2xldCB1PXJbdF07dD1kcChjLnNvdXJjZSxsLnRhcmdldCx0KSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCx1LCExLCEwKSYmZS5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCB1PWkuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcoZSxjLHQscixuLG8pO3UhPT1YTSYmZjFlKGUscyxsLGMsdSl9fWZ1bmN0aW9uIGYxZShlLHQscixuLGkpe2lmKGk9cDFlKHQsaSxyLG4pLFZNJiYoaT1WTShpLHIudGFyZ2V0LHIua2luZCx0KSksci5raW5kPT0iYXR0cmlidXRlIillLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSh0LGksci50YXJnZXQpO2Vsc2V7bGV0IG89ci50YXJnZXQ7dC5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZ0Ll9fZGF0YUhhc0FjY2Vzc29yJiZ0Ll9fZGF0YUhhc0FjY2Vzc29yW29dPyghdFt6ci5SRUFEX09OTFldfHwhdFt6ci5SRUFEX09OTFldW29dKSYmdC5fc2V0UGVuZGluZ1Byb3BlcnR5KG8saSkmJmUuX2VucXVldWVDbGllbnQodCk6ZS5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxvLGkpfX1mdW5jdGlvbiBwMWUoZSx0LHIsbil7aWYoci5pc0NvbXBvdW5kKXtsZXQgaT1lLl9fZGF0YUNvbXBvdW5kU3RvcmFnZVtyLnRhcmdldF07aVtuLmNvbXBvdW5kSW5kZXhdPXQsdD1pLmpvaW4oIiIpfXJldHVybiByLmtpbmQhPT0iYXR0cmlidXRlIiYmKHIudGFyZ2V0PT09InRleHRDb250ZW50Inx8ci50YXJnZXQ9PT0idmFsdWUiJiYoZS5sb2NhbE5hbWU9PT0iaW5wdXQifHxlLmxvY2FsTmFtZT09PSJ0ZXh0YXJlYSIpKSYmKHQ9dD09bnVsbD8iIjp0KSx0fWZ1bmN0aW9uIGQxZShlKXtyZXR1cm4gQm9vbGVhbihlLnRhcmdldCkmJmUua2luZCE9ImF0dHJpYnV0ZSImJmUua2luZCE9InRleHQiJiYhZS5pc0NvbXBvdW5kJiZlLnBhcnRzWzBdLm1vZGU9PT0ieyJ9ZnVuY3Rpb24gbTFlKGUsdCl7bGV0e25vZGVMaXN0OnIsbm9kZUluZm9MaXN0Om59PXQ7aWYobi5sZW5ndGgpZm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1yW2ldLHM9by5iaW5kaW5ncztpZihzKWZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2cxZShhLGMpLF8xZShhLGUsYyl9YS5fX2RhdGFIb3N0PWV9fWZ1bmN0aW9uIGcxZShlLHQpe2lmKHQuaXNDb21wb3VuZCl7bGV0IHI9ZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fChlLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT17fSksbj10LnBhcnRzLGk9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKylpW2FdPW5bYV0ubGl0ZXJhbDtsZXQgbz10LnRhcmdldDtyW29dPWksdC5saXRlcmFsJiZ0LmtpbmQ9PSJwcm9wZXJ0eSImJihvPT09ImNsYXNzTmFtZSImJihlPXVlKGUpKSxlW29dPXQubGl0ZXJhbCl9fWZ1bmN0aW9uIF8xZShlLHQscil7aWYoci5saXN0ZW5lckV2ZW50KXtsZXQgbj1yLnBhcnRzWzBdO2UuYWRkRXZlbnRMaXN0ZW5lcihyLmxpc3RlbmVyRXZlbnQsZnVuY3Rpb24oaSl7bjFlKGksdCxyLnRhcmdldCxuLnNvdXJjZSxuLm5lZ2F0ZSl9KX19ZnVuY3Rpb24gbW10KGUsdCxyLG4saSxvKXtvPXQuc3RhdGljfHxvJiYodHlwZW9mIG8hPSJvYmplY3QifHxvW3QubWV0aG9kTmFtZV0pO2xldCBhPXttZXRob2ROYW1lOnQubWV0aG9kTmFtZSxhcmdzOnQuYXJncyxtZXRob2RJbmZvOmksZHluYW1pY0ZuOm99O2ZvcihsZXQgcz0wLGw7czx0LmFyZ3MubGVuZ3RoJiYobD10LmFyZ3Nbc10pO3MrKylsLmxpdGVyYWx8fGUuX2FkZFByb3BlcnR5RWZmZWN0KGwucm9vdFByb3BlcnR5LHIse2ZuOm4saW5mbzphLHRyaWdnZXI6bH0pO3JldHVybiBvJiZlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0Lm1ldGhvZE5hbWUscix7Zm46bixpbmZvOmF9KSxhfWZ1bmN0aW9uIFNHKGUsdCxyLG4saSl7bGV0IG89ZS5fbWV0aG9kSG9zdHx8ZSxhPW9baS5tZXRob2ROYW1lXTtpZihhKXtsZXQgcz1lLl9tYXJzaGFsQXJncyhpLmFyZ3MsdCxyKTtyZXR1cm4gcz09PVhNP1hNOmEuYXBwbHkobyxzKX1lbHNlIGkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIitpLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX12YXIgeTFlPVtdLFNtdD0iKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopIix2MWU9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KSIseDFlPSIoPzonKD86W14nXFxcXF18XFxcXC4pKicpIixiMWU9Jyg/OiIoPzpbXiJcXFxcXXxcXFxcLikqIiknLHcxZT0iKD86Iit4MWUrInwiK2IxZSsiKSIsZ210PSIoPzooIitTbXQrInwiK3YxZSsifCIrdzFlKyIpXFxzKikiLFMxZT0iKD86IitnbXQrIig/OixcXHMqIitnbXQrIikqKSIsTTFlPSIoPzpcXChcXHMqKD86IitTMWUrIj8pXFwpXFxzKikiLEUxZT0iKCIrU210KyJcXHMqIitNMWUrIj8pIixUMWU9IihcXFtcXFt8e3spXFxzKiIsQzFlPSIoPzpdXXx9fSkiLEExZT0iKD86KCEpXFxzKik/IixQMWU9VDFlK0ExZStFMWUrQzFlLF9tdD1uZXcgUmVnRXhwKFAxZSwiZyIpO2Z1bmN0aW9uIHltdChlKXtsZXQgdD0iIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1lW3JdLmxpdGVyYWx8fCIiO3JldHVybiB0fWZ1bmN0aW9uIHdHKGUpe2xldCB0PWUubWF0Y2goLyhbXlxzXSs/KVwoKFtcc1xTXSopXCkvKTtpZih0KXtsZXQgbj17bWV0aG9kTmFtZTp0WzFdLHN0YXRpYzohMCxhcmdzOnkxZX07aWYodFsyXS50cmltKCkpe2xldCBpPXRbMl0ucmVwbGFjZSgvXFwsL2csIiZjb21tYTsiKS5zcGxpdCgiLCIpO3JldHVybiBJMWUoaSxuKX1lbHNlIHJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIEkxZShlLHQpe3JldHVybiB0LmFyZ3M9ZS5tYXAoZnVuY3Rpb24ocil7bGV0IG49TW10KHIpO3JldHVybiBuLmxpdGVyYWx8fCh0LnN0YXRpYz0hMSksbn0sdGhpcyksdH1mdW5jdGlvbiBNbXQoZSl7bGV0IHQ9ZS50cmltKCkucmVwbGFjZSgvJmNvbW1hOy9nLCIsIikucmVwbGFjZSgvXFwoLikvZywiJDEiKSxyPXtuYW1lOnQsdmFsdWU6IiIsbGl0ZXJhbDohMX0sbj10WzBdO3N3aXRjaChuPT09Ii0iJiYobj10WzFdKSxuPj0iMCImJm48PSI5IiYmKG49IiMiKSxuKXtjYXNlIiciOmNhc2UnIic6ci52YWx1ZT10LnNsaWNlKDEsLTEpLHIubGl0ZXJhbD0hMDticmVhaztjYXNlIiMiOnIudmFsdWU9TnVtYmVyKHQpLHIubGl0ZXJhbD0hMDticmVha31yZXR1cm4gci5saXRlcmFsfHwoci5yb290UHJvcGVydHk9YXUodCksci5zdHJ1Y3R1cmVkPURJKHQpLHIuc3RydWN0dXJlZCYmKHIud2lsZGNhcmQ9dC5zbGljZSgtMik9PSIuKiIsci53aWxkY2FyZCYmKHIubmFtZT10LnNsaWNlKDAsLTIpKSkpLHJ9ZnVuY3Rpb24gdm10KGUsdCxyKXtsZXQgbj1ObyhlLHIpO3JldHVybiBuPT09dm9pZCAwJiYobj10W3JdKSxufWZ1bmN0aW9uIEVtdChlLHQscixuKXtsZXQgaT17aW5kZXhTcGxpY2VzOm59O2tJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJih0LnNwbGljZXM9aSksZS5ub3RpZnlQYXRoKHIrIi5zcGxpY2VzIixpKSxlLm5vdGlmeVBhdGgocisiLmxlbmd0aCIsdC5sZW5ndGgpLGtJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihpLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gR00oZSx0LHIsbixpLG8pe0VtdChlLHQscixbe2luZGV4Om4sYWRkZWRDb3VudDppLHJlbW92ZWQ6byxvYmplY3Q6dCx0eXBlOiJzcGxpY2UifV0pfWZ1bmN0aW9uIEwxZShlKXtyZXR1cm4gZVswXS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfXZhciB1Xz1SbihlPT57bGV0IHQ9Zm10KEhJKGUpKTtjbGFzcyByIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50PSEwLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5LHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMsdGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzLHRoaXMuX19kYXRhSGFzUGF0aHMsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UsdGhpcy5fX2RhdGFIb3N0LHRoaXMuX19kYXRhVGVtcCx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZCx0aGlzLl9fZGF0YSx0aGlzLl9fZGF0YVBlbmRpbmcsdGhpcy5fX2RhdGFPbGQsdGhpcy5fX2NvbXB1dGVFZmZlY3RzLHRoaXMuX19jb21wdXRlSW5mbyx0aGlzLl9fcmVmbGVjdEVmZmVjdHMsdGhpcy5fX25vdGlmeUVmZmVjdHMsdGhpcy5fX3Byb3BhZ2F0ZUVmZmVjdHMsdGhpcy5fX29ic2VydmVFZmZlY3RzLHRoaXMuX19yZWFkT25seSx0aGlzLl9fdGVtcGxhdGVJbmZvLHRoaXMuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkfWdldCBQUk9QRVJUWV9FRkZFQ1RfVFlQRVMoKXtyZXR1cm4genJ9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fcmVnaXN0ZXJIb3N0KCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITEsdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsLHRoaXMuX19kYXRhVG9Ob3RpZnk9bnVsbCx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPW51bGwsdGhpcy5fX2RhdGFIYXNQYXRocz0hMSx0aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT10aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZXx8bnVsbCx0aGlzLl9fZGF0YUhvc3Q9dGhpcy5fX2RhdGFIb3N0fHxudWxsLHRoaXMuX19kYXRhVGVtcD17fSx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZD0hMX1fcmVnaXN0ZXJIb3N0KCl7aWYoV00ubGVuZ3RoKXtsZXQgaT1XTVtXTS5sZW5ndGgtMV07aS5fZW5xdWV1ZUNsaWVudCh0aGlzKSx0aGlzLl9fZGF0YUhvc3Q9aX19X2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMoaSl7dGhpcy5fX2RhdGE9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YVBlbmRpbmc9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YU9sZD17fX1faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhpKXtsZXQgbz10aGlzW3pyLlJFQURfT05MWV07Zm9yKGxldCBhIGluIGkpKCFvfHwhb1thXSkmJih0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbYV09dGhpcy5fX2RhdGFQZW5kaW5nW2FdPWlbYV0pfV9hZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihpLG89PXpyLlJFQURfT05MWSk7bGV0IHM9eEcodGhpcyxvLCEwKVtpXTtzfHwocz10aGlzW29dW2ldPVtdKSxzLnB1c2goYSl9X3JlbW92ZVByb3BlcnR5RWZmZWN0KGksbyxhKXtsZXQgcz14Ryh0aGlzLG8sITApW2ldLGw9cy5pbmRleE9mKGEpO2w+PTAmJnMuc3BsaWNlKGwsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KGksbyl7bGV0IGE9dGhpc1tvXTtyZXR1cm4gQm9vbGVhbihhJiZhW2ldKX1faGFzUmVhZE9ubHlFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLGEscyl7aWYoc3x8YXUoQXJyYXkuaXNBcnJheShpKT9pWzBdOmkpIT09aSl7aWYoIXMpe2xldCBsPU5vKHRoaXMsaSk7aWYoaT15Ryh0aGlzLGksbyksIWl8fCFzdXBlci5fc2hvdWxkUHJvcGVydHlDaGFuZ2UoaSxvLGwpKXJldHVybiExfWlmKHRoaXMuX19kYXRhSGFzUGF0aHM9ITAsdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKSlyZXR1cm4gYzFlKHRoaXMsaSxvKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbaV0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSk7dGhpc1tpXT1vfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShpLG8sYSl7KGEhPT1pW29dfHx0eXBlb2YgYT09Im9iamVjdCIpJiYobz09PSJjbGFzc05hbWUiJiYoaT11ZShpKSksaVtvXT1hKX1fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzJiZESShpKSxsPXM/dGhpcy5fX2RhdGFUZW1wOnRoaXMuX19kYXRhO3JldHVybiB0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShpLG8sbFtpXSk/KHRoaXMuX19kYXRhUGVuZGluZ3x8KHRoaXMuX19kYXRhUGVuZGluZz17fSx0aGlzLl9fZGF0YU9sZD17fSksaSBpbiB0aGlzLl9fZGF0YU9sZHx8KHRoaXMuX19kYXRhT2xkW2ldPXRoaXMuX19kYXRhW2ldKSxzP3RoaXMuX19kYXRhVGVtcFtpXT1vOnRoaXMuX19kYXRhW2ldPW8sdGhpcy5fX2RhdGFQZW5kaW5nW2ldPW8sKHN8fHRoaXNbenIuTk9USUZZXSYmdGhpc1t6ci5OT1RJRlldW2ldKSYmKHRoaXMuX19kYXRhVG9Ob3RpZnk9dGhpcy5fX2RhdGFUb05vdGlmeXx8e30sdGhpcy5fX2RhdGFUb05vdGlmeVtpXT1hKSwhMCk6ITF9X3NldFByb3BlcnR5KGksbyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFSZWFkeSYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X2VucXVldWVDbGllbnQoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz10aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzfHxbXSxpIT09dGhpcyYmdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cy5wdXNoKGkpfV9mbHVzaENsaWVudHMoKXt0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT90aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKToodGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITAsdGhpcy5fcmVhZHlDbGllbnRzKCksdGhpcy5fX2RhdGFSZWFkeT0hMCl9X19lbmFibGVPckZsdXNoQ2xpZW50cygpe2xldCBpPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM7aWYoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2EuX19kYXRhRW5hYmxlZD9hLl9fZGF0YVBlbmRpbmcmJmEuX2ZsdXNoUHJvcGVydGllcygpOmEuX2VuYWJsZVByb3BlcnRpZXMoKX19fV9yZWFkeUNsaWVudHMoKXt0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKX1zZXRQcm9wZXJ0aWVzKGksbyl7Zm9yKGxldCBhIGluIGkpKG98fCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1bYV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYSxpW2FdLCEwKTt0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHl8fHRoaXMuX2ZsdXNoQ2xpZW50cygpLHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X3Byb3BlcnRpZXNDaGFuZ2VkKGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzO3RoaXMuX19kYXRhSGFzUGF0aHM9ITE7bGV0IGw7bzFlKHRoaXMsbyxhLHMpLGw9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKG8sYSxzKSx0aGlzLl9mbHVzaENsaWVudHMoKSxZTSh0aGlzLHRoaXNbenIuUkVGTEVDVF0sbyxhLHMpLFlNKHRoaXMsdGhpc1t6ci5PQlNFUlZFXSxvLGEscyksbCYmdDFlKHRoaXMsbCxvLGEscyksdGhpcy5fX2RhdGFDb3VudGVyPT0xJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGksbyxhKXt0aGlzW3pyLlBST1BBR0FURV0mJllNKHRoaXMsdGhpc1t6ci5QUk9QQUdBVEVdLGksbyxhKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyxpLG8sYSl9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShpLG8sYSxzKXtsZXQgbD0oYyx1KT0+e1lNKHRoaXMsaS5wcm9wZXJ0eUVmZmVjdHMsYyxhLHUsaS5ub2RlTGlzdCk7Zm9yKGxldCBoPWkuZmlyc3RDaGlsZDtoO2g9aC5uZXh0U2libGluZyl0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUoaCxjLGEsdSl9O2kucnVuRWZmZWN0cz9pLnJ1bkVmZmVjdHMobCxvLHMpOmwobyxzKX1saW5rUGF0aHMoaSxvKXtpPVB4KGkpLG89UHgobyksdGhpcy5fX2RhdGFMaW5rZWRQYXRocz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzfHx7fSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2ldPW99dW5saW5rUGF0aHMoaSl7aT1QeChpKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzJiZkZWxldGUgdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tpXX1ub3RpZnlTcGxpY2VzKGksbyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpO0VtdCh0aGlzLHMsYS5wYXRoLG8pfWdldChpLG8pe3JldHVybiBObyhvfHx0aGlzLGkpfXNldChpLG8sYSl7YT95RyhhLGksbyk6KCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1baV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1wdXNoKGksLi4ubyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpLGw9cy5sZW5ndGgsYz1zLnB1c2goLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLGwsby5sZW5ndGgsW10pLGN9cG9wKGkpe2xldCBvPXtwYXRoOiIifSxhPU5vKHRoaXMsaSxvKSxzPUJvb2xlYW4oYS5sZW5ndGgpLGw9YS5wb3AoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCxhLmxlbmd0aCwwLFtsXSksbH1zcGxpY2UoaSxvLGEsLi4ucyl7bGV0IGw9e3BhdGg6IiJ9LGM9Tm8odGhpcyxpLGwpO288MD9vPWMubGVuZ3RoLU1hdGguZmxvb3IoLW8pOm8mJihvPU1hdGguZmxvb3IobykpO2xldCB1O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09Mj91PWMuc3BsaWNlKG8pOnU9Yy5zcGxpY2UobyxhLC4uLnMpLChzLmxlbmd0aHx8dS5sZW5ndGgpJiZHTSh0aGlzLGMsbC5wYXRoLG8scy5sZW5ndGgsdSksdX1zaGlmdChpKXtsZXQgbz17cGF0aDoiIn0sYT1Obyh0aGlzLGksbykscz1Cb29sZWFuKGEubGVuZ3RoKSxsPWEuc2hpZnQoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCwwLDAsW2xdKSxsfXVuc2hpZnQoaSwuLi5vKXtsZXQgYT17cGF0aDoiIn0scz1Obyh0aGlzLGksYSksbD1zLnVuc2hpZnQoLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLDAsby5sZW5ndGgsW10pLGx9bm90aWZ5UGF0aChpLG8pe2xldCBhO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2xldCBzPXtwYXRoOiIifTtvPU5vKHRoaXMsaSxzKSxhPXMucGF0aH1lbHNlIEFycmF5LmlzQXJyYXkoaSk/YT1QeChpKTphPWk7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGEsbywhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLlJFQURfT05MWSksbyYmKHRoaXNbIl9zZXQiK0wxZShpKV09ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoaSxhKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGksbyxhKXtsZXQgcz17cHJvcGVydHk6aSxtZXRob2Q6byxkeW5hbWljRm46Qm9vbGVhbihhKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5PQlNFUlZFLHtmbjpwbXQsaW5mbzpzLHRyaWdnZXI6e25hbWU6aX19KSxhJiZ0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChvLHpyLk9CU0VSVkUse2ZuOnBtdCxpbmZvOnMsdHJpZ2dlcjp7bmFtZTpvfX0pfV9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe2xldCBhPXdHKGkpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gJyIraSsiJyIpO21tdCh0aGlzLGEsenIuT0JTRVJWRSxTRyxudWxsLG8pfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSx7Zm46cjFlLGluZm86e2V2ZW50TmFtZTpJeChpKSsiLWNoYW5nZWQiLHByb3BlcnR5Oml9fSl9X2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGkpe2xldCBvPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpO29bMF09PT0iLSI/Y29uc29sZS53YXJuKCJQcm9wZXJ0eSAiK2krIiBjYW5ub3QgYmUgcmVmbGVjdGVkIHRvIGF0dHJpYnV0ZSAiK28rJyBiZWNhdXNlICItIiBpcyBub3QgYSB2YWxpZCBzdGFydGluZyBhdHRyaWJ1dGUgbmFtZS4gVXNlIGEgbG93ZXJjYXNlIGZpcnN0IGxldHRlciBmb3IgdGhlIHByb3BlcnR5IGluc3RlYWQuJyk6dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5SRUZMRUNULHtmbjppMWUsaW5mbzp7YXR0ck5hbWU6b319KX1fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShpLG8sYSl7bGV0IHM9d0cobyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgY29tcHV0ZWQgZXhwcmVzc2lvbiAnIitvKyInIik7bGV0IGw9bW10KHRoaXMscyx6ci5DT01QVVRFLHdtdCxpLGEpO3hHKHRoaXMseG10KVtpXT1sfV9tYXJzaGFsQXJncyhpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGEsbD1bXTtmb3IobGV0IGM9MCx1PWkubGVuZ3RoO2M8dTtjKyspe2xldHtuYW1lOmgsc3RydWN0dXJlZDpmLHdpbGRjYXJkOnAsdmFsdWU6ZCxsaXRlcmFsOmd9PWlbY107aWYoIWcpaWYocCl7bGV0IF89QXgoaCxvKSx5PXZtdChzLGEsXz9vOmgpO2Q9e3BhdGg6Xz9vOmgsdmFsdWU6eSxiYXNlOl8/Tm8ocyxoKTp5fX1lbHNlIGQ9Zj92bXQocyxhLGgpOnNbaF07aWYoa0kmJiF0aGlzLl9vdmVycmlkZUxlZ2FjeVVuZGVmaW5lZCYmZD09PXZvaWQgMCYmaS5sZW5ndGg+MSlyZXR1cm4gWE07bFtjXT1kfXJldHVybiBsfXN0YXRpYyBhZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGksbyxhKX1zdGF0aWMgY3JlYXRlUHJvcGVydHlPYnNlcnZlcihpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoaSxvLGEpfXN0YXRpYyBjcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pfXN0YXRpYyBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShpLG8pfXN0YXRpYyBjcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZUNvbXB1dGVkUHJvcGVydHkoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGksbyxhKX1zdGF0aWMgYmluZFRlbXBsYXRlKGkpe3JldHVybiB0aGlzLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGkpfV9iaW5kVGVtcGxhdGUoaSxvKXtsZXQgYT10aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKGkpLHM9dGhpcy5fX3ByZUJvdW5kVGVtcGxhdGVJbmZvPT1hO2lmKCFzKWZvcihsZXQgbCBpbiBhLnByb3BlcnR5RWZmZWN0cyl0aGlzLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKGwpO2lmKG8paWYoYT1PYmplY3QuY3JlYXRlKGEpLGEud2FzUHJlQm91bmQ9cywhdGhpcy5fX3RlbXBsYXRlSW5mbyl0aGlzLl9fdGVtcGxhdGVJbmZvPWE7ZWxzZXtsZXQgbD1pLl9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8sYz1sLmxhc3RDaGlsZDthLnBhcmVudD1sLGwubGFzdENoaWxkPWEsYS5wcmV2aW91c1NpYmxpbmc9YyxjP2MubmV4dFNpYmxpbmc9YTpsLmZpcnN0Q2hpbGQ9YX1lbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1hO3JldHVybiBhfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChpLG8sYSl7bGV0IHM9aS5ob3N0UHJvcHM9aS5ob3N0UHJvcHN8fHt9O3Nbb109ITA7bGV0IGw9aS5wcm9wZXJ0eUVmZmVjdHM9aS5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhsW29dPWxbb118fFtdKS5wdXNoKGEpfV9zdGFtcFRlbXBsYXRlKGksbyl7bz1vfHx0aGlzLl9iaW5kVGVtcGxhdGUoaSwhMCksV00ucHVzaCh0aGlzKTtsZXQgYT1zdXBlci5fc3RhbXBUZW1wbGF0ZShpLG8pO2lmKFdNLnBvcCgpLG8ubm9kZUxpc3Q9YS5ub2RlTGlzdCwhby53YXNQcmVCb3VuZCl7bGV0IHM9by5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgbD1hLmZpcnN0Q2hpbGQ7bDtsPWwubmV4dFNpYmxpbmcpcy5wdXNoKGwpfXJldHVybiBhLnRlbXBsYXRlSW5mbz1vLG0xZSh0aGlzLG8pLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5JiYodGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKG8sdGhpcy5fX2RhdGEsbnVsbCwhMSksdGhpcy5fZmx1c2hDbGllbnRzKCkpLGF9X3JlbW92ZUJvdW5kRG9tKGkpe2xldCBvPWkudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6YSxuZXh0U2libGluZzpzLHBhcmVudDpsfT1vO2E/YS5uZXh0U2libGluZz1zOmwmJihsLmZpcnN0Q2hpbGQ9cykscz9zLnByZXZpb3VzU2libGluZz1hOmwmJihsLmxhc3RDaGlsZD1hKSxvLm5leHRTaWJsaW5nPW8ucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IGM9by5jaGlsZE5vZGVzO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgaD1jW3VdO3VlKHVlKGgpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKGgpfX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTm9kZS5jYWxsKHRoaXMsaSxvLGEpO2lmKGkubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl7bGV0IGw9dGhpcy5fcGFyc2VCaW5kaW5ncyhpLnRleHRDb250ZW50LG8pO2wmJihpLnRleHRDb250ZW50PXltdChsKXx8IiAiLGJHKHRoaXMsbyxhLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGwpLHM9ITApfXJldHVybiBzfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUoaSxvLGEscyxsKXtsZXQgYz10aGlzLl9wYXJzZUJpbmRpbmdzKGwsbyk7aWYoYyl7bGV0IHU9cyxoPSJwcm9wZXJ0eSI7SnZlLnRlc3Qocyk/aD0iYXR0cmlidXRlIjpzW3MubGVuZ3RoLTFdPT0iJCImJihzPXMuc2xpY2UoMCwtMSksaD0iYXR0cmlidXRlIik7bGV0IGY9eW10KGMpO3JldHVybiBmJiZoPT0iYXR0cmlidXRlIiYmKHM9PSJjbGFzcyImJmkuaGFzQXR0cmlidXRlKCJjbGFzcyIpJiYoZis9IiAiK2kuZ2V0QXR0cmlidXRlKHMpKSxpLnNldEF0dHJpYnV0ZShzLGYpKSxoPT0iYXR0cmlidXRlIiYmdT09ImRpc2FibGUtdXBncmFkZSQiJiZpLnNldEF0dHJpYnV0ZShzLCIiKSxpLmxvY2FsTmFtZT09PSJpbnB1dCImJnU9PT0idmFsdWUiJiZpLnNldEF0dHJpYnV0ZSh1LCIiKSxpLnJlbW92ZUF0dHJpYnV0ZSh1KSxoPT09InByb3BlcnR5IiYmKHM9d20ocykpLGJHKHRoaXMsbyxhLGgscyxjLGYpLCEwfWVsc2UgcmV0dXJuIHQuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlLmNhbGwodGhpcyxpLG8sYSxzLGwpfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUuY2FsbCh0aGlzLGksbyxhKSxsPWkucGFyZW50Tm9kZSxjPWEudGVtcGxhdGVJbmZvLHU9bC5sb2NhbE5hbWU9PT0iZG9tLWlmIixoPWwubG9jYWxOYW1lPT09ImRvbS1yZXBlYXQiO3BHJiYodXx8aCkmJihsLnJlbW92ZUNoaWxkKGkpLGE9YS5wYXJlbnRJbmZvLGEudGVtcGxhdGVJbmZvPWMsYS5ub3RlZD0hMCxzPSExKTtsZXQgZj1jLmhvc3RQcm9wcztpZihSSSYmdSlmJiYoby5ob3N0UHJvcHM9T2JqZWN0LmFzc2lnbihvLmhvc3RQcm9wc3x8e30sZikscEd8fChhLnBhcmVudEluZm8ubm90ZWQ9ITApKTtlbHNle2xldCBwPSJ7Ijtmb3IobGV0IGQgaW4gZil7bGV0IGc9W3ttb2RlOnAsc291cmNlOmQsZGVwZW5kZW5jaWVzOltkXSxob3N0UHJvcDohMH1dO2JHKHRoaXMsbyxhLCJwcm9wZXJ0eSIsIl9ob3N0XyIrZCxnKX19cmV0dXJuIHN9c3RhdGljIF9wYXJzZUJpbmRpbmdzKGksbyl7bGV0IGE9W10scz0wLGw7Zm9yKDsobD1fbXQuZXhlYyhpKSkhPT1udWxsOyl7bC5pbmRleD5zJiZhLnB1c2goe2xpdGVyYWw6aS5zbGljZShzLGwuaW5kZXgpfSk7bGV0IGM9bFsxXVswXSx1PUJvb2xlYW4obFsyXSksaD1sWzNdLnRyaW0oKSxmPSExLHA9IiIsZD0tMTtjPT0ieyImJihkPWguaW5kZXhPZigiOjoiKSk+MCYmKHA9aC5zdWJzdHJpbmcoZCsyKSxoPWguc3Vic3RyaW5nKDAsZCksZj0hMCk7bGV0IGc9d0coaCksXz1bXTtpZihnKXtsZXR7YXJnczp5LG1ldGhvZE5hbWU6eH09Zztmb3IobGV0IFM9MDtTPHkubGVuZ3RoO1MrKyl7bGV0IEM9eVtTXTtDLmxpdGVyYWx8fF8ucHVzaChDKX1sZXQgYj1vLmR5bmFtaWNGbnM7KGImJmJbeF18fGcuc3RhdGljKSYmKF8ucHVzaCh4KSxnLmR5bmFtaWNGbj0hMCl9ZWxzZSBfLnB1c2goaCk7YS5wdXNoKHtzb3VyY2U6aCxtb2RlOmMsbmVnYXRlOnUsY3VzdG9tRXZlbnQ6ZixzaWduYXR1cmU6ZyxkZXBlbmRlbmNpZXM6XyxldmVudDpwfSkscz1fbXQubGFzdEluZGV4fWlmKHMmJnM8aS5sZW5ndGgpe2xldCBjPWkuc3Vic3RyaW5nKHMpO2MmJmEucHVzaCh7bGl0ZXJhbDpjfSl9cmV0dXJuIGEubGVuZ3RoP2E6bnVsbH1zdGF0aWMgX2V2YWx1YXRlQmluZGluZyhpLG8sYSxzLGwsYyl7bGV0IHU7cmV0dXJuIG8uc2lnbmF0dXJlP3U9U0coaSxhLHMsbCxvLnNpZ25hdHVyZSk6YSE9by5zb3VyY2U/dT1ObyhpLG8uc291cmNlKTpjJiZESShhKT91PU5vKGksYSk6dT1pLl9fZGF0YVthXSxvLm5lZ2F0ZSYmKHU9IXUpLHV9fXJldHVybiByfSksV009W107dmFyIGsxZT0wO2Z1bmN0aW9uIFRtdCgpe2sxZSsrfXZhciBSMWU9W107ZnVuY3Rpb24gVkkoZSl7UjFlLnB1c2goZSl9ZnVuY3Rpb24gTjFlKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO3Rbcl09dHlwZW9mIG49PSJmdW5jdGlvbiI/e3R5cGU6bn06bn1yZXR1cm4gdH12YXIgQ210PVJuKGU9PntsZXQgdD1GSShlKTtmdW5jdGlvbiByKG8pe2xldCBhPU9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtyZXR1cm4gYS5wcm90b3R5cGUgaW5zdGFuY2VvZiBpP2E6bnVsbH1mdW5jdGlvbiBuKG8pe2lmKCFvLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb3duUHJvcGVydGllcyIsbykpKXtsZXQgYT1udWxsO2lmKG8uaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgicHJvcGVydGllcyIsbykpKXtsZXQgcz1vLnByb3BlcnRpZXM7cyYmKGE9TjFlKHMpKX1vLl9fb3duUHJvcGVydGllcz1hfXJldHVybiBvLl9fb3duUHJvcGVydGllc31jbGFzcyBpIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzIix0aGlzKSkpe1ZJKHRoaXMucHJvdG90eXBlKTtsZXQgYT10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9YT9PYmplY3Qua2V5cyhhKS5tYXAocz0+dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocykpOltdfXJldHVybiB0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZmluYWxpemVkIix0aGlzKSkpe2xldCBhPXIodGhpcyk7YSYmYS5maW5hbGl6ZSgpLHRoaXMuX19maW5hbGl6ZWQ9ITAsdGhpcy5fZmluYWxpemVDbGFzcygpfX1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtsZXQgYT1uKHRoaXMpO2EmJnRoaXMuY3JlYXRlUHJvcGVydGllcyhhKX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2xldCBhPXIodGhpcyk7dGhpcy5fX3Byb3BlcnRpZXM9T2JqZWN0LmFzc2lnbih7fSxhJiZhLl9wcm9wZXJ0aWVzLG4odGhpcykpfXJldHVybiB0aGlzLl9fcHJvcGVydGllc31zdGF0aWMgdHlwZUZvclByb3BlcnR5KGEpe2xldCBzPXRoaXMuX3Byb3BlcnRpZXNbYV07cmV0dXJuIHMmJnMudHlwZX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtUbXQoKSx0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19cmV0dXJuIGl9KTt2YXIgQW10PSIzLjQuMSIsVUk9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQsU209Um4oZT0+e2xldCB0PUNtdCh1XyhlKSk7ZnVuY3Rpb24gcihsKXtpZighbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX3Byb3BlcnR5RGVmYXVsdHMiLGwpKSl7bC5fX3Byb3BlcnR5RGVmYXVsdHM9bnVsbDtsZXQgYz1sLl9wcm9wZXJ0aWVzO2ZvcihsZXQgdSBpbiBjKXtsZXQgaD1jW3VdOyJ2YWx1ZSJpbiBoJiYobC5fX3Byb3BlcnR5RGVmYXVsdHM9bC5fX3Byb3BlcnR5RGVmYXVsdHN8fHt9LGwuX19wcm9wZXJ0eURlZmF1bHRzW3VdPWgpfX1yZXR1cm4gbC5fX3Byb3BlcnR5RGVmYXVsdHN9ZnVuY3Rpb24gbihsKXtyZXR1cm4gbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsbCkpfHwobC5fX293bk9ic2VydmVycz1sLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsbCkpP2wub2JzZXJ2ZXJzOm51bGwpLGwuX19vd25PYnNlcnZlcnN9ZnVuY3Rpb24gaShsLGMsdSxoKXt1LmNvbXB1dGVkJiYodS5yZWFkT25seT0hMCksdS5jb21wdXRlZCYmKGwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2NvbnNvbGUud2FybihgQ2Fubm90IHJlZGVmaW5lIGNvbXB1dGVkIHByb3BlcnR5ICcke2N9Jy5gKTpsLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGMsdS5jb21wdXRlZCxoKSksdS5yZWFkT25seSYmIWwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2wuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoYywhdS5jb21wdXRlZCk6dS5yZWFkT25seT09PSExJiZsLl9oYXNSZWFkT25seUVmZmVjdChjKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSByZWFkT25seSBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlYWRPbmx5LmApLHUucmVmbGVjdFRvQXR0cmlidXRlJiYhbC5faGFzUmVmbGVjdEVmZmVjdChjKT9sLl9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShjKTp1LnJlZmxlY3RUb0F0dHJpYnV0ZT09PSExJiZsLl9oYXNSZWZsZWN0RWZmZWN0KGMpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlZmxlY3RlZCBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlZmxlY3RlZC5gKSx1Lm5vdGlmeSYmIWwuX2hhc05vdGlmeUVmZmVjdChjKT9sLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShjKTp1Lm5vdGlmeT09PSExJiZsLl9oYXNOb3RpZnlFZmZlY3QoYykmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2Ugbm90aWZ5IHByb3BlcnR5ICcke2N9JyBub24tbm90aWZ5LmApLHUub2JzZXJ2ZXImJmwuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoYyx1Lm9ic2VydmVyLGhbdS5vYnNlcnZlcl0pLGwuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAoYyl9ZnVuY3Rpb24gbyhsLGMsdSxoKXtpZighVUkpe2xldCBmPWMuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHA9TkkoYyksZD1ubXQodSksZz1jLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7Zm9yKGxldCB5PTA7eTxkLmxlbmd0aDt5Kyspe2xldCB4PWRbeV07eC50ZXh0Q29udGVudD1sLl9wcm9jZXNzU3R5bGVUZXh0KHgudGV4dENvbnRlbnQsaCksYy5jb250ZW50Lmluc2VydEJlZm9yZSh4LGcpfWxldCBfPTA7Zm9yKGxldCB5PTA7eTxwLmxlbmd0aDt5Kyspe2xldCB4PXBbeV0sYj1mW19dO2IhPT14Pyh4PXguY2xvbmVOb2RlKCEwKSxiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHgsYikpOl8rKyx4LnRleHRDb250ZW50PWwuX3Byb2Nlc3NTdHlsZVRleHQoeC50ZXh0Q29udGVudCxoKX19aWYod2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlKGMsdSksS2R0JiZVSSYmR2R0KXtsZXQgZj1jLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihmKXtsZXQgcD0iIjtBcnJheS5mcm9tKGYpLmZvckVhY2goZD0+e3ArPWQudGV4dENvbnRlbnQsZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpfSksbC5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCxsLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHApfX19ZnVuY3Rpb24gYShsKXtsZXQgYz1udWxsO2lmKGwmJighaXV8fGpkdCkmJihjPW91LmltcG9ydChsLCJ0ZW1wbGF0ZSIpLGl1JiYhYykpdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZXhwZWN0aW5nIGRvbS1tb2R1bGUgb3IgbnVsbCB0ZW1wbGF0ZSBmb3IgJHtsfWApO3JldHVybiBjfWNsYXNzIHMgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIEFtdH1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXt0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7bGV0IGM9bih0aGlzKTtjJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyhjLHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IGM9dGhpcy50ZW1wbGF0ZTtjJiYodHlwZW9mIGM9PSJzdHJpbmciPyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLGM9bnVsbCk6cHB8fChjPWMuY2xvbmVOb2RlKCEwKSkpLHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZT1jfXN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKGMpe2ZvcihsZXQgdSBpbiBjKWkodGhpcy5wcm90b3R5cGUsdSxjW3VdLGMpfXN0YXRpYyBjcmVhdGVPYnNlcnZlcnMoYyx1KXtsZXQgaD10aGlzLnByb3RvdHlwZTtmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyloLl9jcmVhdGVNZXRob2RPYnNlcnZlcihjW2ZdLHUpfXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfdGVtcGxhdGUiLHRoaXMpKSl7bGV0IGM9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9YyE9PXZvaWQgMD9jOnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmYSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZShjKXt0aGlzLl90ZW1wbGF0ZT1jfXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2xldCBjPXRoaXMuaW1wb3J0TWV0YTtpZihjKXRoaXMuX2ltcG9ydFBhdGg9Q3goYy51cmwpO2Vsc2V7bGV0IHU9b3UuaW1wb3J0KHRoaXMuaXMpO3RoaXMuX2ltcG9ydFBhdGg9dSYmdS5hc3NldHBhdGh8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuY29uc3RydWN0b3IuaW1wb3J0UGF0aH19cmV0dXJuIHRoaXMuX2ltcG9ydFBhdGh9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlLHRoaXMuX2ltcG9ydFBhdGgsdGhpcy5yb290UGF0aCx0aGlzLmltcG9ydFBhdGgsdGhpcy5yb290LHRoaXMuJH1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZmluYWxpemVUZW1wbGF0ZSh0aGlzLmxvY2FsTmFtZSksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290UGF0aD1XZHQsdGhpcy5pbXBvcnRQYXRoPXRoaXMuY29uc3RydWN0b3IuaW1wb3J0UGF0aDtsZXQgYz1yKHRoaXMuY29uc3RydWN0b3IpO2lmKCEhYylmb3IobGV0IHUgaW4gYyl7bGV0IGg9Y1t1XTtpZih0aGlzLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh1KSl7bGV0IGY9dHlwZW9mIGgudmFsdWU9PSJmdW5jdGlvbiI/aC52YWx1ZS5jYWxsKHRoaXMpOmgudmFsdWU7dGhpcy5faGFzQWNjZXNzb3IodSk/dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHUsZiwhMCk6dGhpc1t1XT1mfX19X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KGMpe3JldHVybiF0aGlzLmhhc093blByb3BlcnR5KGMpfXN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjLHUpe3JldHVybiBITShjLHUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZShjKXtsZXQgdT10aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU7aWYodSYmIXUuX19wb2x5bWVyRmluYWxpemVkKXt1Ll9fcG9seW1lckZpbmFsaXplZD0hMDtsZXQgaD10aGlzLmltcG9ydFBhdGgsZj1oP2xfKGgpOiIiO28odGhpcyx1LGMsZiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh1KX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbShjKXtsZXQgdT11ZSh0aGlzKTtpZih1LmF0dGFjaFNoYWRvdylyZXR1cm4gYz8odS5zaGFkb3dSb290fHwodS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4iLHNoYWR5VXBncmFkZUZyYWdtZW50OmN9KSx1LnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoYyksdGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVTaGVldCYmKHUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXRdKSksWGR0JiZ3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5mbHVzaEluaXRpYWwodS5zaGFkb3dSb290KSx1LnNoYWRvd1Jvb3QpOm51bGw7dGhyb3cgbmV3IEVycm9yKCJTaGFkb3dET00gbm90IGF2YWlsYWJsZS4gUG9seW1lckVsZW1lbnQgY2FuIGNyZWF0ZSBkb20gYXMgY2hpbGRyZW4gaW5zdGVhZCBvZiBpbiBTaGFkb3dET00gYnkgc2V0dGluZyBgdGhpcy5yb290ID0gdGhpcztgIGJlZm9yZSBgcmVhZHlgLiIpfXVwZGF0ZVN0eWxlcyhjKXt3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUodGhpcyxjKX1yZXNvbHZlVXJsKGMsdSl7cmV0dXJuIXUmJnRoaXMuaW1wb3J0UGF0aCYmKHU9bF8odGhpcy5pbXBvcnRQYXRoKSksbF8oYyx1KX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KGMsdSxoKXtyZXR1cm4gdS5keW5hbWljRm5zPXUuZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyx0Ll9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsYyx1LGgpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChjLHUsaCl7cmV0dXJuIExJJiYhKHUgaW4gdGhpcy5fcHJvcGVydGllcykmJiEoaC5pbmZvLnBhcnQuc2lnbmF0dXJlJiZoLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljKSYmIWguaW5mby5wYXJ0Lmhvc3RQcm9wJiYhYy5uZXN0ZWRUZW1wbGF0ZSYmY29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHt1fScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLHQuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLGMsdSxoKX19cmV0dXJuIHN9KTt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10LnRvU3RyaW5nKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZX19O2Z1bmN0aW9uIEQxZShlKXtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIGUudmFsdWU7dGhyb3cgbmV3IEVycm9yKGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWxMaXRlcmFsIGZ1bmN0aW9uOiAke2V9YCl9ZnVuY3Rpb24gTzFlKGUpe2lmKGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KXJldHVybiBlLmlubmVySFRNTDtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIEQxZShlKTt0aHJvdyBuZXcgRXJyb3IoYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWwgZnVuY3Rpb246ICR7ZX1gKX12YXIgUT1mdW5jdGlvbih0LC4uLnIpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIG4uaW5uZXJIVE1MPXIucmVkdWNlKChpLG8sYSk9PmkrTzFlKG8pK3RbYSsxXSx0WzBdKSxufTt2YXIgbXQ9U20oSFRNTEVsZW1lbnQpO3ZhciBmeT1FZShPZSgpLDEpO3ZhciBoXz0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxHSTtmdW5jdGlvbiBQbXQoZSl7ZSYmZS5zaGltY3NzcHJvcGVydGllcz9HST0hMTpHST1oX3x8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSl9dmFyIE1tO3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkIT09dm9pZCAwJiYoTW09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgV0k9Qm9vbGVhbih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzIT09dm9pZCAwP0dJPXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M6d2luZG93LlNoYWR5Q1NTPyhQbXQod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpQbXQod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgTng9R0k7dmFyIFlJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFydD0wLHRoaXMuZW5kPTAsdGhpcy5wcmV2aW91cz1udWxsLHRoaXMucGFyZW50PW51bGwsdGhpcy5ydWxlcz1udWxsLHRoaXMucGFyc2VkQ3NzVGV4dD0iIix0aGlzLmNzc1RleHQ9IiIsdGhpcy5hdFJ1bGU9ITEsdGhpcy50eXBlPTAsdGhpcy5rZXlmcmFtZXNOYW1lPSIiLHRoaXMuc2VsZWN0b3I9IiIsdGhpcy5wYXJzZWRTZWxlY3Rvcj0iIn19O2Z1bmN0aW9uIEVHKGUpe3JldHVybiBlPXoxZShlKSxJbXQoRjFlKGUpLGUpfWZ1bmN0aW9uIHoxZShlKXtyZXR1cm4gZS5yZXBsYWNlKGdwLmNvbW1lbnRzLCIiKS5yZXBsYWNlKGdwLnBvcnQsIiIpfWZ1bmN0aW9uIEYxZShlKXtsZXQgdD1uZXcgWUk7dC5zdGFydD0wLHQuZW5kPWUubGVuZ3RoO2xldCByPXQ7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT1MbXQpe3IucnVsZXN8fChyLnJ1bGVzPVtdKTtsZXQgbz1yLGE9by5ydWxlc1tvLnJ1bGVzLmxlbmd0aC0xXXx8bnVsbDtyPW5ldyBZSSxyLnN0YXJ0PW4rMSxyLnBhcmVudD1vLHIucHJldmlvdXM9YSxvLnJ1bGVzLnB1c2gocil9ZWxzZSBlW25dPT09a210JiYoci5lbmQ9bisxLHI9ci5wYXJlbnR8fHQpO3JldHVybiB0fWZ1bmN0aW9uIEltdChlLHQpe2xldCByPXQuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQtMSk7aWYoZS5wYXJzZWRDc3NUZXh0PWUuY3NzVGV4dD1yLnRyaW0oKSxlLnBhcmVudCl7bGV0IGk9ZS5wcmV2aW91cz9lLnByZXZpb3VzLmVuZDplLnBhcmVudC5zdGFydDtyPXQuc3Vic3RyaW5nKGksZS5zdGFydC0xKSxyPUIxZShyKSxyPXIucmVwbGFjZShncC5tdWx0aXBsZVNwYWNlcywiICIpLHI9ci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZigiOyIpKzEpO2xldCBvPWUucGFyc2VkU2VsZWN0b3I9ZS5zZWxlY3Rvcj1yLnRyaW0oKTtlLmF0UnVsZT1vLmluZGV4T2YoVzFlKT09PTAsZS5hdFJ1bGU/by5pbmRleE9mKEcxZSk9PT0wP2UudHlwZT1tcC5NRURJQV9SVUxFOm8ubWF0Y2goZ3Aua2V5ZnJhbWVzUnVsZSkmJihlLnR5cGU9bXAuS0VZRlJBTUVTX1JVTEUsZS5rZXlmcmFtZXNOYW1lPWUuc2VsZWN0b3Iuc3BsaXQoZ3AubXVsdGlwbGVTcGFjZXMpLnBvcCgpKTpvLmluZGV4T2YoUm10KT09PTA/ZS50eXBlPW1wLk1JWElOX1JVTEU6ZS50eXBlPW1wLlNUWUxFX1JVTEV9bGV0IG49ZS5ydWxlcztpZihuKWZvcihsZXQgaT0wLG89bi5sZW5ndGgsYTtpPG8mJihhPW5baV0pO2krKylJbXQoYSx0KTtyZXR1cm4gZX1mdW5jdGlvbiBCMWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwoWzAtOWEtZl17MSw2fSlccy9naSxmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxyPTYtdC5sZW5ndGg7Zm9yKDtyLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSl9ZnVuY3Rpb24gVEcoZSx0LHI9IiIpe2xldCBuPSIiO2lmKGUuY3NzVGV4dHx8ZS5ydWxlcyl7bGV0IGk9ZS5ydWxlcztpZihpJiYhSDFlKGkpKWZvcihsZXQgbz0wLGE9aS5sZW5ndGgscztvPGEmJihzPWlbb10pO28rKyluPVRHKHMsdCxuKTtlbHNlIG49dD9lLmNzc1RleHQ6VjFlKGUuY3NzVGV4dCksbj1uLnRyaW0oKSxuJiYobj0iICAiK24rYApgKX1yZXR1cm4gbiYmKGUuc2VsZWN0b3ImJihyKz1lLnNlbGVjdG9yKyIgIitMbXQrYApgKSxyKz1uLGUuc2VsZWN0b3ImJihyKz1rbXQrYAoKYCkpLHJ9ZnVuY3Rpb24gSDFlKGUpe2xldCB0PWVbMF07cmV0dXJuIEJvb2xlYW4odCkmJkJvb2xlYW4odC5zZWxlY3RvcikmJnQuc2VsZWN0b3IuaW5kZXhPZihSbXQpPT09MH1mdW5jdGlvbiBWMWUoZSl7cmV0dXJuIGU9VTFlKGUpLHExZShlKX1mdW5jdGlvbiBVMWUoZSl7cmV0dXJuIGUucmVwbGFjZShncC5jdXN0b21Qcm9wLCIiKS5yZXBsYWNlKGdwLm1peGluUHJvcCwiIil9ZnVuY3Rpb24gcTFlKGUpe3JldHVybiBlLnJlcGxhY2UoZ3AubWl4aW5BcHBseSwiIikucmVwbGFjZShncC52YXJBcHBseSwiIil9dmFyIG1wPXtTVFlMRV9SVUxFOjEsS0VZRlJBTUVTX1JVTEU6NyxNRURJQV9SVUxFOjQsTUlYSU5fUlVMRToxZTN9LExtdD0ieyIsa210PSJ9IixncD17Y29tbWVudHM6L1wvXCpbXipdKlwqKyhbXi8qXVteKl0qXCorKSpcLy9naW0scG9ydDovQGltcG9ydFteO10qOy9naW0sY3VzdG9tUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sbWl4aW5Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86Wztcbl18JCk/L2dpbSxtaXhpbkFwcGx5Oi9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLHZhckFwcGx5Oi9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sa2V5ZnJhbWVzUnVsZTovXkBbXlxzXSprZXlmcmFtZXMvLG11bHRpcGxlU3BhY2VzOi9ccysvZ30sUm10PSItLSIsRzFlPSJAbWVkaWEiLFcxZT0iQCI7dmFyIEtNPS8oPzpefFs7XHN7XVxzKikoLS1bXHctXSo/KVxzKjpccyooPzooKD86Jyg/OlxcJ3wuKSo/J3wiKD86XFwifC4pKj8ifFwoW14pXSo/XCl8W159O3tdKSspfFx7KFtefV0qKVx9KD86KD89Wztcc31dKXwkKSkvZ2ksRHg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2k7dmFyIE5tdD0vQG1lZGlhXHMoLiopLzt2YXIgRG10PW5ldyBTZXQsWTFlPSJzaGFkeS11bnNjb3BlZCI7ZnVuY3Rpb24gT210KGUpe2xldCB0PWUudGV4dENvbnRlbnQ7aWYoIURtdC5oYXModCkpe0RtdC5hZGQodCk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiLCIiKSxyLnRleHRDb250ZW50PXQsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKX19ZnVuY3Rpb24gem10KGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZShZMWUpfWZ1bmN0aW9uIFpNKGUsdCl7cmV0dXJuIGU/KHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9RUcoZSkpLHQmJk94KGUsdCksVEcoZSxOeCkpOiIifWZ1bmN0aW9uIENHKGUpe3JldHVybiFlLl9fY3NzUnVsZXMmJmUudGV4dENvbnRlbnQmJihlLl9fY3NzUnVsZXM9RUcoZS50ZXh0Q29udGVudCkpLGUuX19jc3NSdWxlc3x8bnVsbH1mdW5jdGlvbiBPeChlLHQscixuKXtpZighZSlyZXR1cm47bGV0IGk9ITEsbz1lLnR5cGU7aWYobiYmbz09PW1wLk1FRElBX1JVTEUpe2xldCBzPWUuc2VsZWN0b3IubWF0Y2goTm10KTtzJiYod2luZG93Lm1hdGNoTWVkaWEoc1sxXSkubWF0Y2hlc3x8KGk9ITApKX1vPT09bXAuU1RZTEVfUlVMRT90KGUpOnImJm89PT1tcC5LRVlGUkFNRVNfUlVMRT9yKGUpOm89PT1tcC5NSVhJTl9SVUxFJiYoaT0hMCk7bGV0IGE9ZS5ydWxlcztpZihhJiYhaSlmb3IobGV0IHM9MCxsPWEubGVuZ3RoLGM7czxsJiYoYz1hW3NdKTtzKyspT3goYyx0LHIsbil9ZnVuY3Rpb24gajFlKGUsdCl7bGV0IHI9MDtmb3IobGV0IG49dCxpPWUubGVuZ3RoO248aTtuKyspaWYoZVtuXT09PSIoIilyKys7ZWxzZSBpZihlW25dPT09IikiJiYtLXI9PT0wKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEFHKGUsdCl7bGV0IHI9ZS5pbmRleE9mKCJ2YXIoIik7aWYocj09PS0xKXJldHVybiB0KGUsIiIsIiIsIiIpO2xldCBuPWoxZShlLHIrMyksaT1lLnN1YnN0cmluZyhyKzQsbiksbz1lLnN1YnN0cmluZygwLHIpLGE9QUcoZS5zdWJzdHJpbmcobisxKSx0KSxzPWkuaW5kZXhPZigiLCIpO2lmKHM9PT0tMSlyZXR1cm4gdChvLGkudHJpbSgpLCIiLGEpO2xldCBsPWkuc3Vic3RyaW5nKDAscykudHJpbSgpLGM9aS5zdWJzdHJpbmcocysxKS50cmltKCk7cmV0dXJuIHQobyxsLGMsYSl9dmFyIGZ2cj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS53cmFwfHwoZT0+ZSk7ZnVuY3Rpb24gRm10KGUpe2xldCB0PWUubG9jYWxOYW1lLHI9IiIsbj0iIjtyZXR1cm4gdD90LmluZGV4T2YoIi0iKT4tMT9yPXQ6KG49dCxyPWUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiaXMiKXx8IiIpOihyPWUuaXMsbj1lLmV4dGVuZHMpLHtpczpyLHR5cGVFeHRlbnNpb246bn19ZnVuY3Rpb24gQm10KGUpe2xldCB0PVtdLHI9ZS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXtsZXQgaT1yW25dO3ptdChpKT9oX3x8KE9tdChpKSxpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSkpOih0LnB1c2goaS50ZXh0Q29udGVudCksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKX1yZXR1cm4gdC5qb2luKCIiKS50cmltKCl9dmFyIEhtdD0iY3NzLWJ1aWxkIjtmdW5jdGlvbiBYMWUoZSl7aWYoTW0hPT12b2lkIDApcmV0dXJuIE1tO2lmKGUuX19jc3NCdWlsZD09PXZvaWQgMCl7bGV0IHQ9ZS5nZXRBdHRyaWJ1dGUoSG10KTtpZih0KWUuX19jc3NCdWlsZD10O2Vsc2V7bGV0IHI9JDFlKGUpO3IhPT0iIiYmSzFlKGUpLGUuX19jc3NCdWlsZD1yfX1yZXR1cm4gZS5fX2Nzc0J1aWxkfHwiIn1mdW5jdGlvbiBQRyhlKXtyZXR1cm4gWDFlKGUpIT09IiJ9ZnVuY3Rpb24gJDFlKGUpe2xldCB0PWUubG9jYWxOYW1lPT09InRlbXBsYXRlIj9lLmNvbnRlbnQuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7aWYodCBpbnN0YW5jZW9mIENvbW1lbnQpe2xldCByPXQudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KCI6Iik7aWYoclswXT09PUhtdClyZXR1cm4gclsxXX1yZXR1cm4iIn1mdW5jdGlvbiBLMWUoZSl7bGV0IHQ9ZS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiP2UuY29udGVudC5maXJzdENoaWxkOmUuZmlyc3RDaGlsZDt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gSk0oZSx0KXtmb3IobGV0IHIgaW4gdClyPT09bnVsbD9lLnN0eWxlLnJlbW92ZVByb3BlcnR5KHIpOmUuc3R5bGUuc2V0UHJvcGVydHkocix0W3JdKX1mdW5jdGlvbiBqSShlLHQpe2xldCByPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIHI/ci50cmltKCk6IiJ9ZnVuY3Rpb24gVm10KGUpe2xldCB0PUR4LnRlc3QoZSl8fEtNLnRlc3QoZSk7cmV0dXJuIER4Lmxhc3RJbmRleD0wLEtNLmxhc3RJbmRleD0wLHR9dmFyIFoxZT0vO1xzKi9tLEoxZT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxVbXQ9L1xzKiFpbXBvcnRhbnQvLElHPSJfLV8iO3ZhciBMRz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxyKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczpyLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fSxYST1udWxsLERvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgTEd9ZGV0ZWN0TWl4aW4odCl7cmV0dXJuIFZtdCh0KX1nYXRoZXJTdHlsZXModCl7bGV0IHI9Qm10KHQuY29udGVudCk7aWYocil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1yLHQuY29udGVudC5pbnNlcnRCZWZvcmUobix0LmNvbnRlbnQuZmlyc3RDaGlsZCksbn1yZXR1cm4gbnVsbH10cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpe3QuX2dhdGhlcmVkU3R5bGU9PT12b2lkIDAmJih0Ll9nYXRoZXJlZFN0eWxlPXRoaXMuZ2F0aGVyU3R5bGVzKHQpKTtsZXQgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixyKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQscj0iIil7bGV0IG49Q0codCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixyKSx0LnRleHRDb250ZW50PVpNKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IHI9Q0codCk7cmV0dXJuIE94KHIsbj0+e24uc2VsZWN0b3I9PT0iOnJvb3QiJiYobi5zZWxlY3Rvcj0iaHRtbCIpLHRoaXMudHJhbnNmb3JtUnVsZShuKX0pLHQudGV4dENvbnRlbnQ9Wk0ocikscn10cmFuc2Zvcm1SdWxlcyh0LHIpe3RoaXMuX2N1cnJlbnRFbGVtZW50PXIsT3godCxuPT57dGhpcy50cmFuc2Zvcm1SdWxlKG4pfSksdGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbH10cmFuc2Zvcm1SdWxlKHQpe3QuY3NzVGV4dD10aGlzLnRyYW5zZm9ybUNzc1RleHQodC5wYXJzZWRDc3NUZXh0LHQpLHQuc2VsZWN0b3I9PT0iOnJvb3QiJiYodC5zZWxlY3Rvcj0iOmhvc3QgPiAqIil9dHJhbnNmb3JtQ3NzVGV4dCh0LHIpe3JldHVybiB0PXQucmVwbGFjZShLTSwobixpLG8sYSk9PnRoaXMuX3Byb2R1Y2VDc3NQcm9wZXJ0aWVzKG4saSxvLGEscikpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQscil9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgcj10O2Zvcig7ci5wYXJlbnQ7KXI9ci5wYXJlbnQ7bGV0IG49e30saT0hMTtyZXR1cm4gT3gocixvPT57aT1pfHxvPT09dCwhaSYmby5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoby5wYXJzZWRDc3NUZXh0KSl9KSxufV9jb25zdW1lQ3NzUHJvcGVydGllcyh0LHIpe2xldCBuPW51bGw7Zm9yKDtuPUR4LmV4ZWModCk7KXtsZXQgaT1uWzBdLG89blsxXSxhPW4uaW5kZXgscz1hK2kuaW5kZXhPZigiQGFwcGx5IiksbD1hK2kubGVuZ3RoLGM9dC5zbGljZSgwLHMpLHU9dC5zbGljZShsKSxoPXI/dGhpcy5fZmFsbGJhY2tzRnJvbVByZXZpb3VzUnVsZXMocik6e307T2JqZWN0LmFzc2lnbihoLHRoaXMuX2Nzc1RleHRUb01hcChjKSk7bGV0IGY9dGhpcy5fYXRBcHBseVRvQ3NzUHJvcGVydGllcyhvLGgpO3Q9YCR7Y30ke2Z9JHt1fWAsRHgubGFzdEluZGV4PWErZi5sZW5ndGh9cmV0dXJuIHR9X2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXModCxyKXt0PXQucmVwbGFjZShaMWUsIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe3RoaXMuX2N1cnJlbnRFbGVtZW50JiYoaS5kZXBlbmRhbnRzW3RoaXMuX2N1cnJlbnRFbGVtZW50XT0hMCk7bGV0IG8sYSxzLGw9aS5wcm9wZXJ0aWVzO2ZvcihvIGluIGwpcz1yJiZyW29dLGE9W28sIjogdmFyKCIsdCxJRyxvXSxzJiZhLnB1c2goIiwiLHMucmVwbGFjZShVbXQsIiIpKSxhLnB1c2goIikiKSxVbXQudGVzdChsW29dKSYmYS5wdXNoKCIgIWltcG9ydGFudCIpLG4ucHVzaChhLmpvaW4oIiIpKX1yZXR1cm4gbi5qb2luKCI7ICIpfV9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdCh0LHIpe2xldCBuPUoxZS5leGVjKHIpO3JldHVybiBuJiYoblsxXT9yPXRoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOnI9ImFwcGx5LXNoaW0taW5oZXJpdCIpLHJ9X2Nzc1RleHRUb01hcCh0LHI9ITEpe2xldCBuPXQuc3BsaXQoIjsiKSxpLG8sYT17fTtmb3IobGV0IHM9MCxsLGM7czxuLmxlbmd0aDtzKyspbD1uW3NdLGwmJihjPWwuc3BsaXQoIjoiKSxjLmxlbmd0aD4xJiYoaT1jWzBdLnRyaW0oKSxvPWMuc2xpY2UoMSkuam9pbigiOiIpLHImJihvPXRoaXMuX3JlcGxhY2VJbml0aWFsT3JJbmhlcml0KGksbykpLGFbaV09bykpO3JldHVybiBhfV9pbnZhbGlkYXRlTWl4aW5FbnRyeSh0KXtpZighIVhJKWZvcihsZXQgciBpbiB0LmRlcGVuZGFudHMpciE9PXRoaXMuX2N1cnJlbnRFbGVtZW50JiZYSShyKX1fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxyLG4saSxvKXtpZihuJiZBRyhuLChfLHkpPT57eSYmdGhpcy5fbWFwLmdldCh5KSYmKGk9YEBhcHBseSAke3l9O2ApfSksIWkpcmV0dXJuIHQ7bGV0IGE9dGhpcy5fY29uc3VtZUNzc1Byb3BlcnRpZXMoIiIraSxvKSxzPXQuc2xpY2UoMCx0LmluZGV4T2YoIi0tIikpLGw9dGhpcy5fY3NzVGV4dFRvTWFwKGEsITApLGM9bCx1PXRoaXMuX21hcC5nZXQociksaD11JiZ1LnByb3BlcnRpZXM7aD9jPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShoKSxsKTp0aGlzLl9tYXAuc2V0KHIsYyk7bGV0IGY9W10scCxkLGc9ITE7Zm9yKHAgaW4gYylkPWxbcF0sZD09PXZvaWQgMCYmKGQ9ImluaXRpYWwiKSxoJiYhKHAgaW4gaCkmJihnPSEwKSxmLnB1c2goYCR7cn0ke0lHfSR7cH06ICR7ZH1gKTtyZXR1cm4gZyYmdGhpcy5faW52YWxpZGF0ZU1peGluRW50cnkodSksdSYmKHUucHJvcGVydGllcz1jKSxuJiYocz1gJHt0fTske3N9YCksYCR7c30ke2Yuam9pbigiOyAiKX07YH19O0RvLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1Eby5wcm90b3R5cGUuZGV0ZWN0TWl4aW47RG8ucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZTtEby5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlcz1Eby5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVRlbXBsYXRlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZTtEby5wcm90b3R5cGUuX3NlcGFyYXRvcj1JRztPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJpbnZhbGlkQ2FsbGJhY2siLHtnZXQoKXtyZXR1cm4gWEl9LHNldChlKXtYST1lfX0pO3ZhciBxbXQ9RG87dmFyIFExZT17fSxRTT1RMWU7dmFyICRJPSJfYXBwbHlTaGltQ3VycmVudFZlcnNpb24iLHp4PSJfYXBwbHlTaGltTmV4dFZlcnNpb24iLEtJPSJfYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24iLHR4ZT1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBHbXQoZSl7bGV0IHQ9UU1bZV07dCYmZXhlKHQpfWZ1bmN0aW9uIGV4ZShlKXtlWyRJXT1lWyRJXXx8MCxlW0tJXT1lW0tJXXx8MCxlW3p4XT0oZVt6eF18fDApKzF9ZnVuY3Rpb24ga0coZSl7cmV0dXJuIGVbJEldPT09ZVt6eF19ZnVuY3Rpb24gV210KGUpe3JldHVybiFrRyhlKSYmZVtLSV09PT1lW3p4XX1mdW5jdGlvbiBZbXQoZSl7ZVtLSV09ZVt6eF0sZS5fdmFsaWRhdGluZ3x8KGUuX3ZhbGlkYXRpbmc9ITAsdHhlLnRoZW4oZnVuY3Rpb24oKXtlWyRJXT1lW3p4XSxlLl92YWxpZGF0aW5nPSExfSkpfXZhciBSRz1udWxsLGptdD13aW5kb3cuSFRNTEltcG9ydHMmJndpbmRvdy5IVE1MSW1wb3J0cy53aGVuUmVhZHl8fG51bGwsTkc7ZnVuY3Rpb24gWkkoZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7am10P2ptdChlKTooUkd8fChSRz1uZXcgUHJvbWlzZSh0PT57Tkc9dH0pLGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP05HKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9Pntkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmTkcoKX0pKSxSRy50aGVuKGZ1bmN0aW9uKCl7ZSYmZSgpfSkpfSl9dmFyIFhtdD0iX19zZWVuQnlTaGFkeUNTUyIsSkk9Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSIsUUk9bnVsbCx0RT1udWxsLFpsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZXM9W10sdGhpcy5lbnF1ZXVlZD0hMSxaSSgoKT0+e3dpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcyYmd2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7dGhpcy5lbnF1ZXVlZHx8IXRFfHwodGhpcy5lbnF1ZXVlZD0hMCxaSSh0RSkpfWFkZEN1c3RvbVN0eWxlKHQpe3RbWG10XXx8KHRbWG10XT0hMCx0aGlzLmN1c3RvbVN0eWxlcy5wdXNoKHQpLHRoaXMuZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpKX1nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHQpe2lmKHRbSkldKXJldHVybiB0W0pJXTtsZXQgcjtyZXR1cm4gdC5nZXRTdHlsZT9yPXQuZ2V0U3R5bGUoKTpyPXQscn1wcm9jZXNzU3R5bGVzKCl7bGV0IHQ9dGhpcy5jdXN0b21TdHlsZXM7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07aWYobltKSV0pY29udGludWU7bGV0IGk9dGhpcy5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2lmKGkpe2xldCBvPWkuX19hcHBsaWVkRWxlbWVudHx8aTtRSSYmUUkobyksbltKSV09b319cmV0dXJuIHR9fTtabC5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9WmwucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPVpsLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPVpsLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFpsLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldCgpe3JldHVybiBRSX0sc2V0KGUpe1FJPWV9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQoKXtyZXR1cm4gdEV9LHNldChlKXtsZXQgdD0hMTt0RXx8KHQ9ITApLHRFPWUsdCYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pO3ZhciBlRT1uZXcgcW10LERHPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT1udWxsLGVFLmludmFsaWRDYWxsYmFjaz1HbXR9ZW5zdXJlKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZXx8d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlJiYodGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsdGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS50cmFuc2Zvcm1DYWxsYmFjaz10PT57ZUUudHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl9LHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudmFsaWRhdGVDYWxsYmFjaz0oKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQmJnRoaXMuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9cHJlcGFyZVRlbXBsYXRlKHQscil7aWYodGhpcy5lbnN1cmUoKSxQRyh0KSlyZXR1cm47UU1bcl09dDtsZXQgbj1lRS50cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZighIXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdLGk9dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2kmJmVFLnRyYW5zZm9ybUN1c3RvbVN0eWxlKGkpfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LHIpe2lmKHRoaXMuZW5zdXJlKCksciYmSk0odCxyKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBuPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9ZWxzZXtsZXQgbj10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczpyfT1GbXQodCksbj1RTVtyXTtpZighKG4mJlBHKG4pKSYmbiYmIWtHKG4pKXtXbXQobil8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShuLHIpLFltdChuKSk7bGV0IGk9dC5zaGFkb3dSb290O2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtvJiYoby5fX2Nzc1J1bGVzPW4uX3N0eWxlQXN0LG8udGV4dENvbnRlbnQ9Wk0obi5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX07aWYoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSl7bGV0IGU9bmV3IERHLHQ9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U7d2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUocixuLGkpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnByZXBhcmVUZW1wbGF0ZShyLG4pfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXMocixuLGkpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUocixuLGkpfSxwcmVwYXJlVGVtcGxhdGVEb20ocixuKXt9LHN0eWxlU3VidHJlZShyLG4pe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlU3VidHJlZShyLG4pfSxzdHlsZUVsZW1lbnQocil7ZS5mbHVzaEN1c3RvbVN0eWxlcygpLGUuc3R5bGVFbGVtZW50KHIpfSxzdHlsZURvY3VtZW50KHIpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlRG9jdW1lbnQocil9LGdldENvbXB1dGVkU3R5bGVWYWx1ZShyLG4pe3JldHVybiBqSShyLG4pfSxmbHVzaEN1c3RvbVN0eWxlcygpe2UuZmx1c2hDdXN0b21TdHlsZXMoKX0sbmF0aXZlQ3NzOk54LG5hdGl2ZVNoYWRvdzpoXyxjc3NCdWlsZDpNbSxkaXNhYmxlUnVudGltZTpXSX0sdCYmKHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT10KX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPWVFO3ZhciBzcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FzeW5jTW9kdWxlPW51bGwsdGhpcy5fY2FsbGJhY2s9bnVsbCx0aGlzLl90aW1lcj1udWxsfXNldENvbmZpZyh0LHIpe3RoaXMuX2FzeW5jTW9kdWxlPXQsdGhpcy5fY2FsbGJhY2s9cix0aGlzLl90aW1lcj10aGlzLl9hc3luY01vZHVsZS5ydW4oKCk9Pnt0aGlzLl90aW1lcj1udWxsLHJFLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSl9Y2FuY2VsKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5fY2FuY2VsQXN5bmMoKSxyRS5kZWxldGUodGhpcykpfV9jYW5jZWxBc3luYygpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2FzeW5jTW9kdWxlLmNhbmNlbCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCl9Zmx1c2goKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLmNhbmNlbCgpLHRoaXMuX2NhbGxiYWNrKCkpfWlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX3RpbWVyIT1udWxsfXN0YXRpYyBkZWJvdW5jZSh0LHIsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBzcj90Ll9jYW5jZWxBc3luYygpOnQ9bmV3IHNyLHQuc2V0Q29uZmlnKHIsbiksdH19LHJFPW5ldyBTZXQsSmw9ZnVuY3Rpb24oZSl7ckUuYWRkKGUpfSwkbXQ9ZnVuY3Rpb24oKXtsZXQgZT1Cb29sZWFuKHJFLnNpemUpO3JldHVybiByRS5mb3JFYWNoKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHIpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyByfSl9fSksZX07dmFyIEJHPXR5cGVvZiBkb2N1bWVudC5oZWFkLnN0eWxlLnRvdWNoQWN0aW9uPT0ic3RyaW5nIixlOT0iX19wb2x5bWVyR2VzdHVyZXMiLHQ5PSJfX3BvbHltZXJHZXN0dXJlc0hhbmRsZWQiLHpHPSJfX3BvbHltZXJHZXN0dXJlc1RvdWNoQWN0aW9uIixLbXQ9MjUsWm10PTUsbnhlPTIsaXhlPTI1MDAscmd0PVsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsImNsaWNrIl0sb3hlPVswLDEsNCwyXSxheGU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KCJ0ZXN0Iix7YnV0dG9uczoxfSkuYnV0dG9ucz09PTF9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIEhHKGUpe3JldHVybiByZ3QuaW5kZXhPZihlKT4tMX12YXIgVkc9ITE7KGZ1bmN0aW9uKCl7dHJ5e2xldCBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldCgpe1ZHPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe319KSgpO2Z1bmN0aW9uIG5ndChlKXtpZighKEhHKGUpfHxlPT09InRvdWNoZW5kIikmJkJHJiZWRyYmWWR0KXJldHVybntwYXNzaXZlOiEwfX12YXIgaWd0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pLEZHPVtdLHN4ZT17YnV0dG9uOiEwLGlucHV0OiEwLGtleWdlbjohMCxtZXRlcjohMCxvdXRwdXQ6ITAsdGV4dGFyZWE6ITAscHJvZ3Jlc3M6ITAsc2VsZWN0OiEwfSxseGU9e2J1dHRvbjohMCxjb21tYW5kOiEwLGZpZWxkc2V0OiEwLGlucHV0OiEwLGtleWdlbjohMCxvcHRncm91cDohMCxvcHRpb246ITAsc2VsZWN0OiEwLHRleHRhcmVhOiEwfTtmdW5jdGlvbiBjeGUoZSl7cmV0dXJuIHN4ZVtlLmxvY2FsTmFtZV18fCExfWZ1bmN0aW9uIHV4ZShlKXtsZXQgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmxhYmVsc3x8W10pO2lmKCF0Lmxlbmd0aCl7dD1bXTtsZXQgcj1lLmdldFJvb3ROb2RlKCk7aWYoZS5pZCl7bGV0IG49ci5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2UuaWR9XWApO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXQucHVzaChuW2ldKX19cmV0dXJuIHR9dmFyIEptdD1mdW5jdGlvbihlKXtsZXQgdD1lLnNvdXJjZUNhcGFiaWxpdGllcztpZighKHQmJiF0LmZpcmVzVG91Y2hFdmVudHMpJiYoZVt0OV09e3NraXA6ITB9LGUudHlwZT09PSJjbGljayIpKXtsZXQgcj0hMSxuPW45KGUpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtpZihuW2ldLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2lmKG5baV0ubG9jYWxOYW1lPT09ImxhYmVsIilGRy5wdXNoKG5baV0pO2Vsc2UgaWYoY3hlKG5baV0pKXtsZXQgbz11eGUobltpXSk7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspcj1yfHxGRy5pbmRleE9mKG9bYV0pPi0xfX1pZihuW2ldPT09aWEubW91c2UudGFyZ2V0KXJldHVybn1pZihyKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKX19O2Z1bmN0aW9uIFFtdChlKXtsZXQgdD1pZ3Q/WyJjbGljayJdOnJndDtmb3IobGV0IHI9MCxuO3I8dC5sZW5ndGg7cisrKW49dFtyXSxlPyhGRy5sZW5ndGg9MCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG4sSm10LCEwKSk6ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLEptdCwhMCl9ZnVuY3Rpb24gaHhlKGUpe2lmKCFmRylyZXR1cm47aWEubW91c2UubW91c2VJZ25vcmVKb2J8fFFtdCghMCk7bGV0IHQ9ZnVuY3Rpb24oKXtRbXQoKSxpYS5tb3VzZS50YXJnZXQ9bnVsbCxpYS5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfTtpYS5tb3VzZS50YXJnZXQ9bjkoZSlbMF0saWEubW91c2UubW91c2VJZ25vcmVKb2I9c3IuZGVib3VuY2UoaWEubW91c2UubW91c2VJZ25vcmVKb2IsbW8uYWZ0ZXIoaXhlKSx0KX1mdW5jdGlvbiBwXyhlKXtsZXQgdD1lLnR5cGU7aWYoIUhHKHQpKXJldHVybiExO2lmKHQ9PT0ibW91c2Vtb3ZlIil7bGV0IHI9ZS5idXR0b25zPT09dm9pZCAwPzE6ZS5idXR0b25zO3JldHVybiBlIGluc3RhbmNlb2Ygd2luZG93Lk1vdXNlRXZlbnQmJiFheGUmJihyPW94ZVtlLndoaWNoXXx8MCksQm9vbGVhbihyJjEpfWVsc2UgcmV0dXJuKGUuYnV0dG9uPT09dm9pZCAwPzA6ZS5idXR0b24pPT09MH1mdW5jdGlvbiBmeGUoZSl7aWYoZS50eXBlPT09ImNsaWNrIil7aWYoZS5kZXRhaWw9PT0wKXJldHVybiEwO2xldCB0PV9wKGUpO2lmKCF0Lm5vZGVUeXBlfHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuITA7bGV0IHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUucGFnZVgsaT1lLnBhZ2VZO3JldHVybiEobj49ci5sZWZ0JiZuPD1yLnJpZ2h0JiZpPj1yLnRvcCYmaTw9ci5ib3R0b20pfXJldHVybiExfXZhciBpYT17bW91c2U6e3RhcmdldDpudWxsLG1vdXNlSWdub3JlSm9iOm51bGx9LHRvdWNoOnt4OjAseTowLGlkOi0xLHNjcm9sbERlY2lkZWQ6ITF9fTtmdW5jdGlvbiBweGUoZSl7bGV0IHQ9ImF1dG8iLHI9bjkoZSk7Zm9yKGxldCBuPTAsaTtuPHIubGVuZ3RoO24rKylpZihpPXJbbl0saVt6R10pe3Q9aVt6R107YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gb2d0KGUsdCxyKXtlLm1vdmVmbj10LGUudXBmbj1yLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscil9ZnVuY3Rpb24gRngoZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixlLm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZS51cGZuKSxlLm1vdmVmbj1udWxsLGUudXBmbj1udWxsfWZHJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsaHhlLFZHP3twYXNzaXZlOiEwfTohMSk7dmFyIG45PXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2g/d2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aDplPT5lLmNvbXBvc2VkUGF0aCYmZS5jb21wb3NlZFBhdGgoKXx8W10saUU9e30sZl89W107ZnVuY3Rpb24gZHhlKGUsdCl7bGV0IHI9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLHQpLG49cjtmb3IoO24mJm4uc2hhZG93Um9vdCYmIXdpbmRvdy5TaGFkeURPTTspe2xldCBpPW47aWYobj1uLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludChlLHQpLGk9PT1uKWJyZWFrO24mJihyPW4pfXJldHVybiByfWZ1bmN0aW9uIF9wKGUpe2xldCB0PW45KGUpO3JldHVybiB0Lmxlbmd0aD4wP3RbMF06ZS50YXJnZXR9ZnVuY3Rpb24gYWd0KGUpe2xldCB0LHI9ZS50eXBlLGk9ZS5jdXJyZW50VGFyZ2V0W2U5XTtpZighaSlyZXR1cm47bGV0IG89aVtyXTtpZighIW8pe2lmKCFlW3Q5XSYmKGVbdDldPXt9LHIuc2xpY2UoMCw1KT09PSJ0b3VjaCIpKXtlPWU7bGV0IGE9ZS5jaGFuZ2VkVG91Y2hlc1swXTtpZihyPT09InRvdWNoc3RhcnQiJiZlLnRvdWNoZXMubGVuZ3RoPT09MSYmKGlhLnRvdWNoLmlkPWEuaWRlbnRpZmllciksaWEudG91Y2guaWQhPT1hLmlkZW50aWZpZXIpcmV0dXJuO0JHfHwocj09PSJ0b3VjaHN0YXJ0Inx8cj09PSJ0b3VjaG1vdmUiKSYmbXhlKGUpfWlmKHQ9ZVt0OV0sIXQuc2tpcCl7Zm9yKGxldCBhPTAsczthPGZfLmxlbmd0aDthKyspcz1mX1thXSxvW3MubmFtZV0mJiF0W3MubmFtZV0mJnMuZmxvdyYmcy5mbG93LnN0YXJ0LmluZGV4T2YoZS50eXBlKT4tMSYmcy5yZXNldCYmcy5yZXNldCgpO2ZvcihsZXQgYT0wLHM7YTxmXy5sZW5ndGg7YSsrKXM9Zl9bYV0sb1tzLm5hbWVdJiYhdFtzLm5hbWVdJiYodFtzLm5hbWVdPSEwLHNbcl0oZSkpfX19ZnVuY3Rpb24gbXhlKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF0scj1lLnR5cGU7aWYocj09PSJ0b3VjaHN0YXJ0IilpYS50b3VjaC54PXQuY2xpZW50WCxpYS50b3VjaC55PXQuY2xpZW50WSxpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSExO2Vsc2UgaWYocj09PSJ0b3VjaG1vdmUiKXtpZihpYS50b3VjaC5zY3JvbGxEZWNpZGVkKXJldHVybjtpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSEwO2xldCBuPXB4ZShlKSxpPSExLG89TWF0aC5hYnMoaWEudG91Y2gueC10LmNsaWVudFgpLGE9TWF0aC5hYnMoaWEudG91Y2gueS10LmNsaWVudFkpO2UuY2FuY2VsYWJsZSYmKG49PT0ibm9uZSI/aT0hMDpuPT09InBhbi14Ij9pPWE+bzpuPT09InBhbi15IiYmKGk9bz5hKSksaT9lLnByZXZlbnREZWZhdWx0KCk6cjkoInRyYWNrIil9fWZ1bmN0aW9uIEVtKGUsdCxyKXtyZXR1cm4gaUVbdF0/KGd4ZShlLHQsciksITApOiExfWZ1bmN0aW9uIHNndChlLHQscil7cmV0dXJuIGlFW3RdPyhfeGUoZSx0LHIpLCEwKTohMX1mdW5jdGlvbiBneGUoZSx0LHIpe2xldCBuPWlFW3RdLGk9bi5kZXBzLG89bi5uYW1lLGE9ZVtlOV07YXx8KGVbZTldPWE9e30pO2ZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sIShpZ3QmJkhHKGwpJiZsIT09ImNsaWNrIikmJihjPWFbbF0sY3x8KGFbbF09Yz17X2NvdW50OjB9KSxjLl9jb3VudD09PTAmJmUuYWRkRXZlbnRMaXN0ZW5lcihsLGFndCxuZ3QobCkpLGNbb109KGNbb118fDApKzEsYy5fY291bnQ9KGMuX2NvdW50fHwwKSsxKTtlLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxuLnRvdWNoQWN0aW9uJiZkXyhlLG4udG91Y2hBY3Rpb24pfWZ1bmN0aW9uIF94ZShlLHQscil7bGV0IG49aUVbdF0saT1uLmRlcHMsbz1uLm5hbWUsYT1lW2U5XTtpZihhKWZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sYz1hW2xdLGMmJmNbb10mJihjW29dPShjW29dfHwxKS0xLGMuX2NvdW50PShjLl9jb3VudHx8MSktMSxjLl9jb3VudD09PTAmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGFndCxuZ3QobCkpKTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX1mdW5jdGlvbiBVRyhlKXtmXy5wdXNoKGUpO2ZvcihsZXQgdD0wO3Q8ZS5lbWl0cy5sZW5ndGg7dCsrKWlFW2UuZW1pdHNbdF1dPWV9ZnVuY3Rpb24geXhlKGUpe2ZvcihsZXQgdD0wLHI7dDxmXy5sZW5ndGg7dCsrKXtyPWZfW3RdO2ZvcihsZXQgbj0wLGk7bjxyLmVtaXRzLmxlbmd0aDtuKyspaWYoaT1yLmVtaXRzW25dLGk9PT1lKXJldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIGRfKGUsdCl7QkcmJmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmbGkucnVuKCgpPT57ZS5zdHlsZS50b3VjaEFjdGlvbj10fSksZVt6R109dH1mdW5jdGlvbiBxRyhlLHQscil7bGV0IG49bmV3IEV2ZW50KHQse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjb21wb3NlZDohMH0pO2lmKG4uZGV0YWlsPXIsdWUoZSkuZGlzcGF0Y2hFdmVudChuKSxuLmRlZmF1bHRQcmV2ZW50ZWQpe2xldCBpPXIucHJldmVudGVyfHxyLnNvdXJjZUV2ZW50O2kmJmkucHJldmVudERlZmF1bHQmJmkucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gcjkoZSl7bGV0IHQ9eXhlKGUpO3QuaW5mbyYmKHQuaW5mby5wcmV2ZW50PSEwKX1VRyh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpe0Z4KHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtpZighcF8oZSkpcmV0dXJuO2xldCB0PV9wKGUpLHI9dGhpcyxuPWZ1bmN0aW9uKGEpe3BfKGEpfHwobkUoInVwIix0LGEpLEZ4KHIuaW5mbykpfSxpPWZ1bmN0aW9uKGEpe3BfKGEpJiZuRSgidXAiLHQsYSksRngoci5pbmZvKX07b2d0KHRoaXMuaW5mbyxuLGkpLG5FKCJkb3duIix0LGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe25FKCJkb3duIixfcChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtuRSgidXAiLF9wKGUpLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSl9fSk7ZnVuY3Rpb24gbkUoZSx0LHIsbil7IXR8fHFHKHQsZSx7eDpyLmNsaWVudFgseTpyLmNsaWVudFksc291cmNlRXZlbnQ6cixwcmV2ZW50ZXI6bixwcmV2ZW50OmZ1bmN0aW9uKGkpe3JldHVybiByOShpKX19KX1VRyh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKGUpe3RoaXMubW92ZXMubGVuZ3RoPm54ZSYmdGhpcy5tb3Zlcy5zaGlmdCgpLHRoaXMubW92ZXMucHVzaChlKX0sbW92ZWZuOm51bGwsdXBmbjpudWxsLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLnN0YXRlPSJzdGFydCIsdGhpcy5pbmZvLnN0YXJ0ZWQ9ITEsdGhpcy5pbmZvLm1vdmVzPVtdLHRoaXMuaW5mby54PTAsdGhpcy5pbmZvLnk9MCx0aGlzLmluZm8ucHJldmVudD0hMSxGeCh0aGlzLmluZm8pfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoIXBfKGUpKXJldHVybjtsZXQgdD1fcChlKSxyPXRoaXMsbj1mdW5jdGlvbihhKXtsZXQgcz1hLmNsaWVudFgsbD1hLmNsaWVudFk7dGd0KHIuaW5mbyxzLGwpJiYoci5pbmZvLnN0YXRlPXIuaW5mby5zdGFydGVkP2EudHlwZT09PSJtb3VzZXVwIj8iZW5kIjoidHJhY2siOiJzdGFydCIsci5pbmZvLnN0YXRlPT09InN0YXJ0IiYmcjkoInRhcCIpLHIuaW5mby5hZGRNb3ZlKHt4OnMseTpsfSkscF8oYSl8fChyLmluZm8uc3RhdGU9ImVuZCIsRngoci5pbmZvKSksdCYmT0coci5pbmZvLHQsYSksci5pbmZvLnN0YXJ0ZWQ9ITApfSxpPWZ1bmN0aW9uKGEpe3IuaW5mby5zdGFydGVkJiZuKGEpLEZ4KHIuaW5mbyl9O29ndCh0aGlzLmluZm8sbixpKSx0aGlzLmluZm8ueD1lLmNsaWVudFgsdGhpcy5pbmZvLnk9ZS5jbGllbnRZfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2htb3ZlOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXSxuPXIuY2xpZW50WCxpPXIuY2xpZW50WTt0Z3QodGhpcy5pbmZvLG4saSkmJih0aGlzLmluZm8uc3RhdGU9PT0ic3RhcnQiJiZyOSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6bix5Oml9KSxPRyh0aGlzLmluZm8sdCxyKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpyLmNsaWVudFgseTpyLmNsaWVudFl9KSxPRyh0aGlzLmluZm8sdCxyKSl9fSk7ZnVuY3Rpb24gdGd0KGUsdCxyKXtpZihlLnByZXZlbnQpcmV0dXJuITE7aWYoZS5zdGFydGVkKXJldHVybiEwO2xldCBuPU1hdGguYWJzKGUueC10KSxpPU1hdGguYWJzKGUueS1yKTtyZXR1cm4gbj49Wm10fHxpPj1abXR9ZnVuY3Rpb24gT0coZSx0LHIpe2lmKCF0KXJldHVybjtsZXQgbj1lLm1vdmVzW2UubW92ZXMubGVuZ3RoLTJdLGk9ZS5tb3Zlc1tlLm1vdmVzLmxlbmd0aC0xXSxvPWkueC1lLngsYT1pLnktZS55LHMsbD0wO24mJihzPWkueC1uLngsbD1pLnktbi55KSxxRyh0LCJ0cmFjayIse3N0YXRlOmUuc3RhdGUseDpyLmNsaWVudFgseTpyLmNsaWVudFksZHg6byxkeTphLGRkeDpzLGRkeTpsLHNvdXJjZUV2ZW50OnIsaG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZHhlKHIuY2xpZW50WCxyLmNsaWVudFkpfX0pfVVHKHtuYW1lOiJ0YXAiLGRlcHM6WyJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbImNsaWNrIiwidG91Y2hlbmQiXX0sZW1pdHM6WyJ0YXAiXSxpbmZvOnt4Ok5hTix5Ok5hTixwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby54PU5hTix0aGlzLmluZm8ueT1OYU4sdGhpcy5pbmZvLnByZXZlbnQ9ITF9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtwXyhlKSYmKHRoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFkpfSxjbGljazpmdW5jdGlvbihlKXtwXyhlKSYmZWd0KHRoaXMuaW5mbyxlKX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PXQuY2xpZW50WCx0aGlzLmluZm8ueT10LmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2VndCh0aGlzLmluZm8sZS5jaGFuZ2VkVG91Y2hlc1swXSxlKX19KTtmdW5jdGlvbiBlZ3QoZSx0LHIpe2xldCBuPU1hdGguYWJzKHQuY2xpZW50WC1lLngpLGk9TWF0aC5hYnModC5jbGllbnRZLWUueSksbz1fcChyfHx0KTshb3x8bHhlW28ubG9jYWxOYW1lXSYmby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fChpc05hTihuKXx8aXNOYU4oaSl8fG48PUttdCYmaTw9S210fHxmeGUodCkpJiYoZS5wcmV2ZW50fHxxRyhvLCJ0YXAiLHt4OnQuY2xpZW50WCx5OnQuY2xpZW50WSxzb3VyY2VFdmVudDp0LHByZXZlbnRlcjpyfSkpfXZhciBsZ3Q9X3A7dmFyIHloPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7RW0obixpLG8pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7c2d0KG4saSxvKXx8c3VwZXIuX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl9fXJldHVybiB0fSk7dmFyIHZ4ZT0vOmhvc3RcKDpkaXJcKChsdHJ8cnRsKVwpXCkvZyx4eGU9Jzpob3N0KFtkaXI9IiQxIl0pJyxieGU9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLHd4ZT0nOmhvc3QoW2Rpcj0iJDIiXSkgJDEnLFN4ZT0vOmRpclwoKD86bHRyfHJ0bClcKS8sdWd0PUJvb2xlYW4od2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLG9FPVtdLGFFPW51bGwsR0c9IiI7ZnVuY3Rpb24gaGd0KCl7R0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9ZnVuY3Rpb24gZmd0KGUpe2UuX19hdXRvRGlyT3B0T3V0fHxlLnNldEF0dHJpYnV0ZSgiZGlyIixHRyl9ZnVuY3Rpb24gcGd0KCl7aGd0KCksR0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7Zm9yKGxldCBlPTA7ZTxvRS5sZW5ndGg7ZSsrKWZndChvRVtlXSl9ZnVuY3Rpb24gTXhlKCl7YUUmJmFFLnRha2VSZWNvcmRzKCkubGVuZ3RoJiZwZ3QoKX12YXIgZGd0PVJuKGU9Pnt1Z3R8fGFFfHwoaGd0KCksYUU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocGd0KSxhRS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkaXIiXX0pKTtsZXQgdD1ISShlKTtjbGFzcyByIGV4dGVuZHMgdHtzdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoaSxvKXtyZXR1cm4gaT10Ll9wcm9jZXNzU3R5bGVUZXh0LmNhbGwodGhpcyxpLG8pLCF1Z3QmJlN4ZS50ZXN0KGkpJiYoaT10aGlzLl9yZXBsYWNlRGlySW5Dc3NUZXh0KGkpLHRoaXMuX19hY3RpdmF0ZURpcj0hMCksaX1zdGF0aWMgX3JlcGxhY2VEaXJJbkNzc1RleHQoaSl7bGV0IG89aTtyZXR1cm4gbz1vLnJlcGxhY2UodnhlLHh4ZSksbz1vLnJlcGxhY2UoYnhlLHd4ZSksb31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9ITF9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX19hdXRvRGlyT3B0T3V0PXRoaXMuaGFzQXR0cmlidXRlKCJkaXIiKX1jb25uZWN0ZWRDYWxsYmFjaygpe3QucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpciYmKE14ZSgpLG9FLnB1c2godGhpcyksZmd0KHRoaXMpKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe2lmKHQucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpcil7bGV0IGk9b0UuaW5kZXhPZih0aGlzKTtpPi0xJiZvRS5zcGxpY2UoaSwxKX19fXJldHVybiByLl9fYWN0aXZhdGVEaXI9ITEscn0pO3ZhciBpOT0hMSxtZ3Q9W10sZ2d0PVtdO2Z1bmN0aW9uIF9ndCgpe2k5PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2k5PSExLEV4ZShtZ3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtUeGUoZ2d0KX0pfSl9ZnVuY3Rpb24gRXhlKGUpe2Zvcig7ZS5sZW5ndGg7KXlndChlLnNoaWZ0KCkpfWZ1bmN0aW9uIFR4ZShlKXtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspeWd0KGUuc2hpZnQoKSl9ZnVuY3Rpb24geWd0KGUpe2xldCB0PWVbMF0scj1lWzFdLG49ZVsyXTt0cnl7ci5hcHBseSh0LG4pfWNhdGNoKGkpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyBpfSl9fWZ1bmN0aW9uIHZndChlLHQscil7aTl8fF9ndCgpLG1ndC5wdXNoKFtlLHQscl0pfWZ1bmN0aW9uIFRtKGUsdCxyKXtpOXx8X2d0KCksZ2d0LnB1c2goW2UsdCxyXSl9ZnVuY3Rpb24geGd0KCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX1kb2N1bWVudC5yZWFkeVN0YXRlPT09ImludGVyYWN0aXZlInx8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSI/eGd0KCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHhndCk7ZnVuY3Rpb24gc0UoZSx0LHIpe3JldHVybntpbmRleDplLHJlbW92ZWQ6dCxhZGRlZENvdW50OnJ9fXZhciBiZ3Q9MCx3Z3Q9MSxXRz0yLFlHPTM7ZnVuY3Rpb24gQ3hlKGUsdCxyLG4saSxvKXtsZXQgYT1vLWkrMSxzPXItdCsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgYz0wO2M8YTtjKyspbFtjXT1uZXcgQXJyYXkocyksbFtjXVswXT1jO2ZvcihsZXQgYz0wO2M8cztjKyspbFswXVtjXT1jO2ZvcihsZXQgYz0xO2M8YTtjKyspZm9yKGxldCB1PTE7dTxzO3UrKylpZihqRyhlW3QrdS0xXSxuW2krYy0xXSkpbFtjXVt1XT1sW2MtMV1bdS0xXTtlbHNle2xldCBoPWxbYy0xXVt1XSsxLGY9bFtjXVt1LTFdKzE7bFtjXVt1XT1oPGY/aDpmfXJldHVybiBsfWZ1bmN0aW9uIEF4ZShlKXtsZXQgdD1lLmxlbmd0aC0xLHI9ZVswXS5sZW5ndGgtMSxuPWVbdF1bcl0saT1bXTtmb3IoO3Q+MHx8cj4wOyl7aWYodD09MCl7aS5wdXNoKFdHKSxyLS07Y29udGludWV9aWYocj09MCl7aS5wdXNoKFlHKSx0LS07Y29udGludWV9bGV0IG89ZVt0LTFdW3ItMV0sYT1lW3QtMV1bcl0scz1lW3RdW3ItMV0sbDthPHM/bD1hPG8/YTpvOmw9czxvP3M6byxsPT1vPyhvPT1uP2kucHVzaChiZ3QpOihpLnB1c2god2d0KSxuPW8pLHQtLSxyLS0pOmw9PWE/KGkucHVzaChZRyksdC0tLG49YSk6KGkucHVzaChXRyksci0tLG49cyl9cmV0dXJuIGkucmV2ZXJzZSgpLGl9ZnVuY3Rpb24gUHhlKGUsdCxyLG4saSxvKXtsZXQgYT0wLHM9MCxsLGM9TWF0aC5taW4oci10LG8taSk7aWYodD09MCYmaT09MCYmKGE9SXhlKGUsbixjKSkscj09ZS5sZW5ndGgmJm89PW4ubGVuZ3RoJiYocz1MeGUoZSxuLGMtYSkpLHQrPWEsaSs9YSxyLT1zLG8tPXMsci10PT0wJiZvLWk9PTApcmV0dXJuW107aWYodD09cil7Zm9yKGw9c0UodCxbXSwwKTtpPG87KWwucmVtb3ZlZC5wdXNoKG5baSsrXSk7cmV0dXJuW2xdfWVsc2UgaWYoaT09bylyZXR1cm5bc0UodCxbXSxyLXQpXTtsZXQgdT1BeGUoQ3hlKGUsdCxyLG4saSxvKSk7bD12b2lkIDA7bGV0IGg9W10sZj10LHA9aTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKylzd2l0Y2godVtkXSl7Y2FzZSBiZ3Q6bCYmKGgucHVzaChsKSxsPXZvaWQgMCksZisrLHArKzticmVhaztjYXNlIHdndDpsfHwobD1zRShmLFtdLDApKSxsLmFkZGVkQ291bnQrKyxmKyssbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrO2Nhc2UgV0c6bHx8KGw9c0UoZixbXSwwKSksbC5hZGRlZENvdW50KyssZisrO2JyZWFrO2Nhc2UgWUc6bHx8KGw9c0UoZixbXSwwKSksbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrfXJldHVybiBsJiZoLnB1c2gobCksaH1mdW5jdGlvbiBJeGUoZSx0LHIpe2ZvcihsZXQgbj0wO248cjtuKyspaWYoIWpHKGVbbl0sdFtuXSkpcmV0dXJuIG47cmV0dXJuIHJ9ZnVuY3Rpb24gTHhlKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPXQubGVuZ3RoLG89MDtmb3IoO288ciYmakcoZVstLW5dLHRbLS1pXSk7KW8rKztyZXR1cm4gb31mdW5jdGlvbiBvOShlLHQpe3JldHVybiBQeGUoZSwwLGUubGVuZ3RoLHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gakcoZSx0KXtyZXR1cm4gZT09PXR9ZnVuY3Rpb24gQngoZSl7cmV0dXJuIGUubG9jYWxOYW1lPT09InNsb3QifXZhciB2aD1jbGFzc3tzdGF0aWMgZ2V0RmxhdHRlbmVkTm9kZXMoZSl7bGV0IHQ9dWUoZSk7cmV0dXJuIEJ4KGUpPyhlPWUsdC5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOkFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAocj0+Qngocik/KHI9cix1ZShyKS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOltyXSkucmVkdWNlKChyLG4pPT5yLmNvbmNhdChuKSxbXSl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3RhcmdldD1lLHRoaXMuY2FsbGJhY2s9dCx0aGlzLl9lZmZlY3RpdmVOb2Rlcz1bXSx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX3NjaGVkdWxlZD0hMSx0aGlzLl9ib3VuZFNjaGVkdWxlPSgpPT57dGhpcy5fc2NoZWR1bGUoKX0sdGhpcy5jb25uZWN0KCksdGhpcy5fc2NoZWR1bGUoKX1jb25uZWN0KCl7QngodGhpcy5fdGFyZ2V0KT90aGlzLl9saXN0ZW5TbG90cyhbdGhpcy5fdGFyZ2V0XSk6dWUodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTT90aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9d2luZG93LlNoYWR5RE9NLm9ic2VydmVDaGlsZHJlbih0aGlzLl90YXJnZXQsZT0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnMoZSl9KToodGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57dGhpcy5fcHJvY2Vzc011dGF0aW9ucyhlKX0pLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtCeCh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOnVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4mJih0aGlzLl91bmxpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTSYmdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPyh3aW5kb3cuU2hhZHlET00udW5vYnNlcnZlQ2hpbGRyZW4odGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSx0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCk6dGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlciYmKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCkpLHRoaXMuX2Nvbm5lY3RlZD0hMX1fc2NoZWR1bGUoKXt0aGlzLl9zY2hlZHVsZWR8fCh0aGlzLl9zY2hlZHVsZWQ9ITAsbGkucnVuKCgpPT50aGlzLmZsdXNoKCkpKX1fcHJvY2Vzc011dGF0aW9ucyhlKXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyhlKSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKGUpe2lmKGUpZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07ci5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhyLmFkZGVkTm9kZXMpLHIucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKHIucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCBlPXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSx0PXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxyPW85KHQsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT0wLHM7YTxvLnJlbW92ZWQubGVuZ3RoJiYocz1vLnJlbW92ZWRbYV0pO2ErKyllLnJlbW92ZWROb2Rlcy5wdXNoKHMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT1vLmluZGV4O2E8by5pbmRleCtvLmFkZGVkQ291bnQ7YSsrKWUuYWRkZWROb2Rlcy5wdXNoKHRbYV0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPXQ7bGV0IG49ITE7cmV0dXJuKGUuYWRkZWROb2Rlcy5sZW5ndGh8fGUucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihuPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsZSkpLG59X2xpc3RlblNsb3RzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO0J4KHIpJiZyLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtCeChyKSYmci5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTt2YXIgY2k9ZnVuY3Rpb24oKXtsZXQgZSx0O2RvIGU9d2luZG93LlNoYWR5RE9NJiZTaGFkeURPTS5mbHVzaCgpLHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0uZmx1c2goKSx0PSRtdCgpO3doaWxlKGV8fHQpfTt2YXIgSHg9RWxlbWVudC5wcm90b3R5cGUsa3hlPUh4Lm1hdGNoZXN8fEh4Lm1hdGNoZXNTZWxlY3Rvcnx8SHgubW96TWF0Y2hlc1NlbGVjdG9yfHxIeC5tc01hdGNoZXNTZWxlY3Rvcnx8SHgub01hdGNoZXNTZWxlY3Rvcnx8SHgud2Via2l0TWF0Y2hlc1NlbGVjdG9yLCRHPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGt4ZS5jYWxsKGUsdCl9LEtyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3dpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlJiZ3aW5kb3cuU2hhZHlET00ucGF0Y2godCksdGhpcy5ub2RlPXR9b2JzZXJ2ZU5vZGVzKHQpe3JldHVybiBuZXcgdmgodGhpcy5ub2RlLHQpfXVub2JzZXJ2ZU5vZGVzKHQpe3QuZGlzY29ubmVjdCgpfW5vdGlmeU9ic2VydmVyKCl7fWRlZXBDb250YWlucyh0KXtpZih1ZSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCByPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtyJiZyIT09biYmciE9PXRoaXMubm9kZTspcj11ZShyKS5wYXJlbnROb2RlfHx1ZShyKS5ob3N0O3JldHVybiByPT09dGhpcy5ub2RlfWdldE93bmVyUm9vdCgpe3JldHVybiB1ZSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiB0aGlzLm5vZGUubG9jYWxOYW1lPT09InNsb3QiP3VlKHRoaXMubm9kZSkuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pOltdfWdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKCl7bGV0IHQ9W10scj11ZSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO3I7KXQucHVzaChyKSxyPXVlKHIpLmFzc2lnbmVkU2xvdDtyZXR1cm4gdH1pbXBvcnROb2RlKHQscil7bGV0IG49dGhpcy5ub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQ/dGhpcy5ub2RlOnRoaXMubm9kZS5vd25lckRvY3VtZW50O3JldHVybiB1ZShuKS5pbXBvcnROb2RlKHQscil9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzLm5vZGUpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtsZXQgcj10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxuPVtdO2ZvcihsZXQgaT0wLG89ci5sZW5ndGgsYTtpPG8mJihhPXJbaV0pO2krKylhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiRHKGEsdCkmJm4ucHVzaChhKTtyZXR1cm4gbn1nZXQgYWN0aXZlRWxlbWVudCgpe2xldCB0PXRoaXMubm9kZTtyZXR1cm4gdC5fYWN0aXZlRWxlbWVudCE9PXZvaWQgMD90Ll9hY3RpdmVFbGVtZW50OnQuYWN0aXZlRWxlbWVudH19O2Z1bmN0aW9uIFJ4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2Vbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25dLmFwcGx5KHRoaXMubm9kZSxhcmd1bWVudHMpfX19ZnVuY3Rpb24gU2d0KGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtuXX0sY29uZmlndXJhYmxlOiEwfSl9fWZ1bmN0aW9uIE54ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbl19LHNldDpmdW5jdGlvbihpKXt0aGlzLm5vZGVbbl09aX0sY29uZmlndXJhYmxlOiEwfSl9fXZhciBsRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50PXR9Z2V0IHJvb3RUYXJnZXQoKXtyZXR1cm4gdGhpcy5wYXRoWzBdfWdldCBsb2NhbFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnRhcmdldH1nZXQgcGF0aCgpe3JldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpfX07S3IucHJvdG90eXBlLmNsb25lTm9kZTtLci5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7S3IucHJvdG90eXBlLmluc2VydEJlZm9yZTtLci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7S3IucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtLci5wcm90b3R5cGUuc2V0QXR0cmlidXRlO0tyLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7S3IucHJvdG90eXBlLnBhcmVudE5vZGU7S3IucHJvdG90eXBlLmZpcnN0Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RDaGlsZDtLci5wcm90b3R5cGUubmV4dFNpYmxpbmc7S3IucHJvdG90eXBlLnByZXZpb3VzU2libGluZztLci5wcm90b3R5cGUuZmlyc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLm5leHRFbGVtZW50U2libGluZztLci5wcm90b3R5cGUucHJldmlvdXNFbGVtZW50U2libGluZztLci5wcm90b3R5cGUuY2hpbGROb2RlcztLci5wcm90b3R5cGUuY2hpbGRyZW47S3IucHJvdG90eXBlLmNsYXNzTGlzdDtLci5wcm90b3R5cGUudGV4dENvbnRlbnQ7S3IucHJvdG90eXBlLmlubmVySFRNTDt2YXIgWEc9S3I7aWYod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UmJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00uV3JhcHBlcil7Y2xhc3MgZSBleHRlbmRzIHdpbmRvdy5TaGFkeURPTS5XcmFwcGVye31PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhLci5wcm90b3R5cGUpLmZvckVhY2godD0+e3QhPSJhY3RpdmVFbGVtZW50IiYmKGUucHJvdG90eXBlW3RdPUtyLnByb3RvdHlwZVt0XSl9KSxTZ3QoZS5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksWEc9ZSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsRS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtsZXQgdD10aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQscj10JiZ6dCh0KS5nZXRPd25lclJvb3QoKSxuPXRoaXMucGF0aDtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZih6dChvKS5nZXRPd25lclJvb3QoKT09PXIpcmV0dXJuIG99fSxjb25maWd1cmFibGU6ITB9LHBhdGg6e2dldCgpe3JldHVybiB3aW5kb3cuU2hhZHlET00uY29tcG9zZWRQYXRoKHRoaXMuZXZlbnQpfSxjb25maWd1cmFibGU6ITB9fSl9ZWxzZSBSeGUoS3IucHJvdG90eXBlLFsiY2xvbmVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJyZW1vdmVDaGlsZCIsInJlcGxhY2VDaGlsZCIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIl0pLFNndChLci5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSxOeGUoS3IucHJvdG90eXBlLFsidGV4dENvbnRlbnQiLCJpbm5lckhUTUwiLCJjbGFzc05hbWUiXSk7dmFyIHp0PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8ZG9jdW1lbnQsZSBpbnN0YW5jZW9mIFhHfHxlIGluc3RhbmNlb2YgbEUpcmV0dXJuIGU7bGV0IHQ9ZS5fX2RvbUFwaTtyZXR1cm4gdHx8KGUgaW5zdGFuY2VvZiBFdmVudD90PW5ldyBsRShlKTp0PW5ldyBYRyhlKSxlLl9fZG9tQXBpPXQpLHR9O3ZhciBLRz13aW5kb3cuU2hhZHlET00sTWd0PXdpbmRvdy5TaGFkeUNTUztmdW5jdGlvbiBFZ3QoZSx0KXtyZXR1cm4gdWUoZSkuZ2V0Um9vdE5vZGUoKT09PXR9ZnVuY3Rpb24gVGd0KGUsdD0hMSl7aWYoIUtHfHwhTWd0fHwhS0cuaGFuZGxlc0R5bmFtaWNTY29waW5nKXJldHVybiBudWxsO2xldCByPU1ndC5TY29waW5nU2hpbTtpZighcilyZXR1cm4gbnVsbDtsZXQgbj1yLnNjb3BlRm9yTm9kZShlKSxpPXVlKGUpLmdldFJvb3ROb2RlKCksbz1hPT57aWYoIUVndChhLGkpKXJldHVybjtsZXQgcz1BcnJheS5mcm9tKEtHLm5hdGl2ZU1ldGhvZHMucXVlcnlTZWxlY3RvckFsbC5jYWxsKGEsIioiKSk7cy5wdXNoKGEpO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2lmKCFFZ3QoYyxpKSljb250aW51ZTtsZXQgdT1yLmN1cnJlbnRTY29wZUZvck5vZGUoYyk7dSE9PW4mJih1IT09IiImJnIudW5zY29wZU5vZGUoYyx1KSxyLnNjb3BlTm9kZShjLG4pKX19O2lmKG8oZSksdCl7bGV0IGE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocz0+e2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2ZvcihsZXQgdT0wO3U8Yy5hZGRlZE5vZGVzLmxlbmd0aDt1Kyspe2xldCBoPWMuYWRkZWROb2Rlc1t1XTtoLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oaCl9fX0pO3JldHVybiBhLm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxhfWVsc2UgcmV0dXJuIG51bGx9dmFyIFpHPSJkaXNhYmxlLXVwZ3JhZGUiLEpHPWU9Pntmb3IoO2U7KXtsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIm9ic2VydmVkQXR0cmlidXRlcyIpO2lmKHQpcmV0dXJuIHQuZ2V0O2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1yZXR1cm4oKT0+W119LEUxcj1SbihlPT57bGV0IHQ9U20oZSkscj1KRyh0KTtjbGFzcyBuIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuIHIuY2FsbCh0aGlzKS5jb25jYXQoWkcpfV9pbml0aWFsaXplUHJvcGVydGllcygpe3RoaXMuaGFzQXR0cmlidXRlKFpHKT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA6c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KG8pe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQobykmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyhvKSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpe289PVpHP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZCYmcz09bnVsbCYmKHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSk6c3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfX1yZXR1cm4gbn0pO3ZhciBhOT0iZGlzYWJsZS11cGdyYWRlIixEeGU9d2luZG93LlNoYWR5Q1NTLEd0PVJuKGU9PntsZXQgdD15aChTbShlKSkscj1VST90OmRndCh0KSxuPUpHKHIpLGk9e3g6InBhbi14Iix5OiJwYW4teSIsbm9uZToibm9uZSIsYWxsOiJhdXRvIn07Y2xhc3MgbyBleHRlbmRzIHJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuaXNBdHRhY2hlZCx0aGlzLl9fYm91bmRMaXN0ZW5lcnMsdGhpcy5fZGVib3VuY2Vycyx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQsdGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkLHRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBnZXQgaW1wb3J0TWV0YSgpe3JldHVybiB0aGlzLnByb3RvdHlwZS5pbXBvcnRNZXRhfWNyZWF0ZWQoKXt9X19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsYyl7KHRoaXMuX19kYXRhQXR0cmlidXRlcyYmdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW3NdfHxzPT09YTkpJiZ0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhzLGwsYyxudWxsKX1zZXRBdHRyaWJ1dGUocyxsKXtpZihxTSYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLmdldEF0dHJpYnV0ZShzKTtzdXBlci5zZXRBdHRyaWJ1dGUocyxsKSx0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24ocyxjLFN0cmluZyhsKSl9ZWxzZSBzdXBlci5zZXRBdHRyaWJ1dGUocyxsKX1yZW1vdmVBdHRyaWJ1dGUocyl7aWYocU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyl7bGV0IGw9dGhpcy5nZXRBdHRyaWJ1dGUocyk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHMpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocyl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gcU0mJiF0aGlzLnByb3RvdHlwZS5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXM/KHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKXx8KHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9W10sVkkodGhpcy5wcm90b3R5cGUpKSx0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzKTpuLmNhbGwodGhpcykuY29uY2F0KGE5KX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQocyl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChzKSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHMpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZCYmdGhpcy5fdGFrZUF0dHJpYnV0ZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fChzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaXNBdHRhY2hlZD0hMCx0aGlzLmF0dGFjaGVkKCkpfWF0dGFjaGVkKCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITEsdGhpcy5kZXRhY2hlZCgpKX1kZXRhY2hlZCgpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socyxsLGMsdSl7bCE9PWMmJihzPT1hOT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJmM9PW51bGwmJih0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHMsbCxjLHUpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZChzLGwsYykpKX1hdHRyaWJ1dGVDaGFuZ2VkKHMsbCxjKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYocHAmJnRoaXMuaGFzQXR0cmlidXRlKGE5KSl0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA7ZWxzZXtsZXQgcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7cy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLHMpKXx8KHRoaXMuX3JlZ2lzdGVyZWQoKSxzLl9faGFzUmVnaXN0ZXJGaW5pc2hlZD0hMCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290PXRoaXMsdGhpcy5jcmVhdGVkKCkscU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHRoaXMuaGFzQXR0cmlidXRlcygpP3RoaXMuX3Rha2VBdHRyaWJ1dGVzKCk6dGhpcy5wYXJlbnROb2RlfHwodGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkPSEwKSksdGhpcy5fYXBwbHlMaXN0ZW5lcnMoKX19X3Rha2VBdHRyaWJ1dGVzKCl7bGV0IHM9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbD0wLGM9cy5sZW5ndGg7bDxjO2wrKyl7bGV0IHU9c1tsXTt0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24odS5uYW1lLG51bGwsdS52YWx1ZSl9fV9yZWdpc3RlcmVkKCl7fXJlYWR5KCl7dGhpcy5fZW5zdXJlQXR0cmlidXRlcygpLHN1cGVyLnJlYWR5KCl9X2Vuc3VyZUF0dHJpYnV0ZXMoKXt9X2FwcGx5TGlzdGVuZXJzKCl7fXNlcmlhbGl6ZShzKXtyZXR1cm4gdGhpcy5fc2VyaWFsaXplVmFsdWUocyl9ZGVzZXJpYWxpemUocyxsKXtyZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZShzLGwpfXJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl9wcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKX1zZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShjfHx0aGlzLHMsbCl9ZXh0ZW5kKHMsbCl7aWYoIShzJiZsKSlyZXR1cm4gc3x8bDtsZXQgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsKTtmb3IobGV0IHU9MCxoO3U8Yy5sZW5ndGgmJihoPWNbdV0pO3UrKyl7bGV0IGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGgpO2YmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGgsZil9cmV0dXJuIHN9bWl4aW4ocyxsKXtmb3IobGV0IGMgaW4gbClzW2NdPWxbY107cmV0dXJuIHN9Y2hhaW5PYmplY3QocyxsKXtyZXR1cm4gcyYmbCYmcyE9PWwmJihzLl9fcHJvdG9fXz1sKSxzfWluc3RhbmNlVGVtcGxhdGUocyl7bGV0IGw9dGhpcy5jb25zdHJ1Y3Rvci5fY29udGVudEZvclRlbXBsYXRlKHMpO3JldHVybiBkb2N1bWVudC5pbXBvcnROb2RlKGwsITApfWZpcmUocyxsLGMpe2M9Y3x8e30sbD1sPT1udWxsP3t9Omw7bGV0IHU9bmV3IEV2ZW50KHMse2J1YmJsZXM6Yy5idWJibGVzPT09dm9pZCAwPyEwOmMuYnViYmxlcyxjYW5jZWxhYmxlOkJvb2xlYW4oYy5jYW5jZWxhYmxlKSxjb21wb3NlZDpjLmNvbXBvc2VkPT09dm9pZCAwPyEwOmMuY29tcG9zZWR9KTt1LmRldGFpbD1sO2xldCBoPWMubm9kZXx8dGhpcztyZXR1cm4gdWUoaCkuZGlzcGF0Y2hFdmVudCh1KSx1fWxpc3RlbihzLGwsYyl7cz1zfHx0aGlzO2xldCB1PXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCksaD11LmdldChzKTtofHwoaD17fSx1LnNldChzLGgpKTtsZXQgZj1sK2M7aFtmXXx8KGhbZl09dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShzLGwsYyx0aGlzKSl9dW5saXN0ZW4ocyxsLGMpe3M9c3x8dGhpcztsZXQgdT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQocyksaD1sK2MsZj11JiZ1W2hdO2YmJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUocyxsLGYpLHVbaF09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHMsbCl7ZF8obHx8dGhpcyxpW3NdfHwiYXV0byIpfSQkKHMpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzKX1nZXQgZG9tSG9zdCgpe2xldCBzPXVlKHRoaXMpLmdldFJvb3ROb2RlKCk7cmV0dXJuIHMgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3MuaG9zdDpzfWRpc3RyaWJ1dGVDb250ZW50KCl7bGV0IGw9enQodGhpcyk7d2luZG93LlNoYWR5RE9NJiZsLnNoYWRvd1Jvb3QmJlNoYWR5RE9NLmZsdXNoKCl9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB6dCh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCl9cXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpe3JldHVybiB6dCh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0RWZmZWN0aXZlQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCBzPXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGw9W107Zm9yKGxldCBjPTAsdTt1PXNbY107YysrKXUubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmbC5wdXNoKHUudGV4dENvbnRlbnQpO3JldHVybiBsLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4ocyl7bGV0IGw9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyk7cmV0dXJuIGwmJmxbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbihzKXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0Q29udGVudENoaWxkTm9kZXMocyl7bGV0IGw9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Ioc3x8InNsb3QiKTtyZXR1cm4gbD96dChsKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHMpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHMpLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSl9aXNMaWdodERlc2NlbmRhbnQocyl7bGV0IGw9dGhpcztyZXR1cm4gbCE9PXMmJnVlKGwpLmNvbnRhaW5zKHMpJiZ1ZShsKS5nZXRSb290Tm9kZSgpPT09dWUocykuZ2V0Um9vdE5vZGUoKX1pc0xvY2FsRGVzY2VuZGFudChzKXtyZXR1cm4gdGhpcy5yb290PT09dWUocykuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUocyxsPSExKXtyZXR1cm4gVGd0KHMsbCl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHMpe3JldHVybiBEeGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHRoaXMscyl9ZGVib3VuY2UocyxsLGMpe3JldHVybiB0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbc109c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tzXSxjPjA/bW8uYWZ0ZXIoYyk6bGksbC5iaW5kKHRoaXMpKX1pc0RlYm91bmNlckFjdGl2ZShzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107cmV0dXJuISEobCYmbC5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5mbHVzaCgpfWNhbmNlbERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5jYW5jZWwoKX1hc3luYyhzLGwpe3JldHVybiBsPjA/bW8ucnVuKHMuYmluZCh0aGlzKSxsKTp+bGkucnVuKHMuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmMocyl7czwwP2xpLmNhbmNlbCh+cyk6bW8uY2FuY2VsKHMpfWNyZWF0ZShzLGwpe2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7aWYobClpZihjLnNldFByb3BlcnRpZXMpYy5zZXRQcm9wZXJ0aWVzKGwpO2Vsc2UgZm9yKGxldCB1IGluIGwpY1t1XT1sW3VdO3JldHVybiBjfWVsZW1lbnRNYXRjaGVzKHMsbCl7cmV0dXJuICRHKGx8fHRoaXMscyl9dG9nZ2xlQXR0cmlidXRlKHMsbCl7bGV0IGM9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTMmJihjPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuaGFzQXR0cmlidXRlKHMpKSxsPyh1ZShjKS5zZXRBdHRyaWJ1dGUocywiIiksITApOih1ZShjKS5yZW1vdmVBdHRyaWJ1dGUocyksITEpfXRvZ2dsZUNsYXNzKHMsbCxjKXtjPWN8fHRoaXMsYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuY2xhc3NMaXN0LmNvbnRhaW5zKHMpKSxsP2MuY2xhc3NMaXN0LmFkZChzKTpjLmNsYXNzTGlzdC5yZW1vdmUocyl9dHJhbnNmb3JtKHMsbCl7bD1sfHx0aGlzLGwuc3R5bGUud2Via2l0VHJhbnNmb3JtPXMsbC5zdHlsZS50cmFuc2Zvcm09c310cmFuc2xhdGUzZChzLGwsYyx1KXt1PXV8fHRoaXMsdGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrcysiLCIrbCsiLCIrYysiKSIsdSl9YXJyYXlEZWxldGUocyxsKXtsZXQgYztpZihBcnJheS5pc0FycmF5KHMpKXtpZihjPXMuaW5kZXhPZihsKSxjPj0wKXJldHVybiBzLnNwbGljZShjLDEpfWVsc2UgaWYoYz1Obyh0aGlzLHMpLmluZGV4T2YobCksYz49MClyZXR1cm4gdGhpcy5zcGxpY2UocyxjLDEpO3JldHVybiBudWxsfV9sb2dnZXIocyxsKXtzd2l0Y2goQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg9PT0xJiZBcnJheS5pc0FycmF5KGxbMF0pJiYobD1sWzBdKSxzKXtjYXNlImxvZyI6Y2FzZSJ3YXJuIjpjYXNlImVycm9yIjpjb25zb2xlW3NdKC4uLmwpfX1fbG9nKC4uLnMpe3RoaXMuX2xvZ2dlcigibG9nIixzKX1fd2FybiguLi5zKXt0aGlzLl9sb2dnZXIoIndhcm4iLHMpfV9lcnJvciguLi5zKXt0aGlzLl9sb2dnZXIoImVycm9yIixzKX1fbG9nZihzLC4uLmwpe3JldHVyblsiWyVzOjolc10iLHRoaXMuaXMscywuLi5sXX19cmV0dXJuIG8ucHJvdG90eXBlLmlzPSIiLG99KTt2YXIgQ209RWUoT2UoKSwxKTtmdW5jdGlvbiB4aChlLHQpe2xldCByPTAsbj0wO2Zvcig7Oyl7aWYocj09PWUubGVuZ3RoKXJldHVybiBuPT09dC5sZW5ndGg/MDotMTtpZihuPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYobV8oZVtyXSkmJm1fKHRbbl0pKXtsZXQgaT1yLG89bjtyPUNndChlLHIrMSksbj1DZ3QodCxuKzEpO2xldCBhPXBhcnNlRmxvYXQoZS5zbGljZShpLHIpKSxzPXBhcnNlRmxvYXQodC5zbGljZShvLG4pKTtpZihhPHMpcmV0dXJuLTE7aWYoYT5zKXJldHVybiAxO2NvbnRpbnVlfWlmKFFHKGVbcl0pKXtpZighUUcodFtuXSkpcmV0dXJuLTF9ZWxzZXtpZihRRyh0W25dKSlyZXR1cm4gMTtpZihlW3JdPHRbbl0pcmV0dXJuLTE7aWYoZVtyXT50W25dKXJldHVybiAxfXIrKyxuKyt9fWZ1bmN0aW9uIENndChlLHQpe2xldCByOyhmdW5jdGlvbihpKXtpW2kuTkFUVVJBTD0wXT0iTkFUVVJBTCIsaVtpLlJFQUw9MV09IlJFQUwiLGlbaS5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixpW2kuRVhQT05FTlQ9M109IkVYUE9ORU5UIn0pKHJ8fChyPXt9KSk7bGV0IG49ci5OQVRVUkFMO2Zvcig7dDxlLmxlbmd0aDt0KyspaWYobj09PXIuTkFUVVJBTCl7aWYoZVt0XT09PSIuIiluPXIuUkVBTDtlbHNlIGlmKGVbdF09PT0iZSJ8fGVbdF09PT0iRSIpbj1yLkVYUE9ORU5UX1NJR047ZWxzZSBpZighbV8oZVt0XSkpYnJlYWt9ZWxzZSBpZihuPT09ci5SRUFMKXtpZihlW3RdPT09ImUifHxlW3RdPT09IkUiKW49ci5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIW1fKGVbdF0pKWJyZWFrfWVsc2UgaWYobj09PXIuRVhQT05FTlRfU0lHTilpZihtXyhlW3RdKXx8ZVt0XT09PSIrInx8ZVt0XT09PSItIiluPXIuRVhQT05FTlQ7ZWxzZSBicmVhaztlbHNlIGlmKG49PT1yLkVYUE9ORU5UJiYhbV8oZVt0XSkpYnJlYWs7cmV0dXJuIHR9ZnVuY3Rpb24gbV8oZSl7cmV0dXJuIjAiPD1lJiZlPD0iOSJ9ZnVuY3Rpb24gUUcoZSl7cmV0dXJuIGU9PT0iLyJ8fGU9PT0iXyJ8fG1fKGUpfXZhciBPeGU9W107ZnVuY3Rpb24genhlKGUpe3JldHVybiBDbS5rZXlzKGUpLnNvcnQoeGgpfWZ1bmN0aW9uICRpKGUpe3JldHVybiBDbS51bmlvbi5hcHBseShudWxsLENtLnZhbHVlcyhlKSkuc29ydCh4aCl9ZnVuY3Rpb24gRnhlKGUsdCl7bGV0IHI9W107cmV0dXJuIHQuZm9yRWFjaChuPT5yPXIuY29uY2F0KGVbbl0pKSxDbS51bmlxKHIpLnNvcnQoeGgpfXZhciBQZ3Q9IlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsSWd0PSJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyI7dmFyIHRXPXt9O0tzKHRXLHtnZXRGZWF0dXJlRmxhZ3M6KCk9Pkh4ZSxnZXRGZWF0dXJlRmxhZ3NUb1NlbmRUb1NlcnZlcjooKT0+Y0UsaW5pdGlhbGl6ZUZlYXR1cmVGbGFnczooKT0+TGd0LHNldEZlYXR1cmVGbGFnczooKT0+QnhlfSk7dmFyIHM5LGw5O0xndCgpO2Z1bmN0aW9uIExndCgpe3M5PW51bGwsbDk9bnVsbH1mdW5jdGlvbiBCeGUoZSx0KXtzOT1lLGw5PXR9ZnVuY3Rpb24gSHhlKCl7aWYoczk9PT1udWxsKXRocm93IEVycm9yKCJGZWF0dXJlRmxhZ3MgaGF2ZSBub3QgeWV0IGJlZW4gZGV0ZXJtaW5lZCBieSBUZW5zb3JCb2FyZC4iKTtyZXR1cm4gczl9ZnVuY3Rpb24gY0UoKXtpZihsOT09PW51bGwpdGhyb3cgRXJyb3IoIkZlYXR1cmVGbGFncyBoYXZlIG5vdCB5ZXQgYmVlbiBkZXRlcm1pbmVkIGJ5IFRlbnNvckJvYXJkLiIpO3JldHVybiBsOX12YXIgYzk9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lPSJSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3IifX0sVng9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxWeC5wcm90b3R5cGUpfX0sdUU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCksdGhpcy5tZXNzYWdlPWBSZXF1ZXN0TmV0d29ya0Vycm9yOiAke3Quc3RhdHVzfSBhdCAke3J9YCx0aGlzLm5hbWU9IlJlcXVlc3ROZXR3b3JrRXJyb3IiLHRoaXMucmVxPXQsdGhpcy51cmw9cn19LEFtOyhmdW5jdGlvbihlKXtlLkdFVD0iR0VUIixlLlBPU1Q9IlBPU1QifSkoQW18fChBbT17fSkpO3ZhciBVeD1jbGFzc3t2YWxpZGF0ZSgpe2lmKHRoaXMubWV0aG9kVHlwZT09PUFtLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBWeCgiYm9keSBtdXN0IGJlIG1pc3NpbmcgZm9yIGEgR0VUIHJlcXVlc3QuIil9fSxBZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTFlMyxyPTMpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX25BY3RpdmVSZXF1ZXN0cz0wLHRoaXMuX25TaW11bHRhbmVvdXNSZXF1ZXN0cz10LHRoaXMuX21heFJldHJpZXM9cn1yZXF1ZXN0KHQscil7bGV0IG49VXhlKHIpO3JldHVybiB0aGlzLnJlcXVlc3RXaXRoT3B0aW9ucyh0LG4pfXJlcXVlc3RXaXRoT3B0aW9ucyh0LHIpe3JldHVybiByLnZhbGlkYXRlKCksbmV3IFByb21pc2UoKGksbyk9PntsZXQgYT17cmVzb2x2ZTppLHJlamVjdDpvfTt0aGlzLl9xdWV1ZS5wdXNoKGEpLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PnRoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsdGhpcy5fbWF4UmV0cmllcyxyKSkudGhlbihpPT4odGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpLGkpLGk9PihpLm5hbWU9PT0iUmVxdWVzdE5ldHdvcmtFcnJvciImJih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCkpLFByb21pc2UucmVqZWN0KGkpKSl9ZmV0Y2godCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz17cmVzb2x2ZTpuLHJlamVjdDppfTt0aGlzLl9xdWV1ZS5wdXNoKG8pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PntsZXQgbj0xO3JldHVybiBuZXcgUHJvbWlzZShpPT57bGV0IG89KCk9PntmZXRjaCh0LHIpLnRoZW4oYT0+e2lmKCFhLm9rJiZ0aGlzLl9tYXhSZXRyaWVzPm4pe24rKyxvKCk7cmV0dXJufWkoYSksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpfSl9O28oKX0pfSl9Y2xlYXJRdWV1ZSgpe3ZhciB0O2Zvcig7dGhpcy5fcXVldWUubGVuZ3RoPjA7KSh0PXRoaXMuX3F1ZXVlLnBvcCgpKT09bnVsbHx8dC5yZWplY3QobmV3IGM5KCJSZXF1ZXN0IGNhbmNlbGxlZCBieSBjbGVhclF1ZXVlIikpfWFjdGl2ZVJlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0c31vdXRzdGFuZGluZ1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0cyt0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJnRoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKHZvaWQgMCl9cHJvbWlzZVdpdGhSZXRyaWVzKHQscixuKXt2YXIgaT1hPT5hLG89YT0+cj4wP3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsci0xLG4pOlByb21pc2UucmVqZWN0KGEpO3JldHVybiB0aGlzLl9wcm9taXNlRnJvbVVybCh0LG4pLnRoZW4oaSxvKX1fcHJvbWlzZUZyb21VcmwodCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz1WeGUoci5tZXRob2RUeXBlLHQsci53aXRoQ3JlZGVudGlhbHMsci5jb250ZW50VHlwZSk7by5zZXRSZXF1ZXN0SGVhZGVyKFBndCxKU09OLnN0cmluZ2lmeShjRSgpKSksby5vbmxvYWQ9ZnVuY3Rpb24oKXtvLnN0YXR1cz09PTIwMD9uKEpTT04ucGFyc2Uoby5yZXNwb25zZVRleHQpKTppKG5ldyB1RShvLHQpKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7aShuZXcgdUUobyx0KSl9LHIuYm9keT9vLnNlbmQoci5ib2R5KTpvLnNlbmQoKX0pfX07ZnVuY3Rpb24gVnhlKGUsdCxyLG4pe2xldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gaS5vcGVuKGUsdCksciYmKGkud2l0aENyZWRlbnRpYWxzPXIpLG4mJmkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixuKSxpfWZ1bmN0aW9uIFV4ZShlKXtsZXQgdD1uZXcgVXg7cmV0dXJuIGU/KHQubWV0aG9kVHlwZT1BbS5QT1NULHQuYm9keT1xeGUoZSksdCk6KHQubWV0aG9kVHlwZT1BbS5HRVQsdCl9ZnVuY3Rpb24gcXhlKGUpe2xldCB0PW5ldyBGb3JtRGF0YTtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSl7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uOltuXTtmb3IobGV0IG8gb2YgaSl0LmFwcGVuZChyLG8pfXJldHVybiB0fXZhciBrZ3Q9ImV4cGVyaW1lbnRhbFBsdWdpbiIsR3hlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksV3hlPVJndCgpO2Z1bmN0aW9uIFJndCgpe3JldHVybntlbnZpcm9ubWVudDooKT0+cXgoIi9lbnZpcm9ubWVudCIpLGV4cGVyaW1lbnRzOigpPT5xeCgiL2V4cGVyaW1lbnRzIikscGx1Z2luUm91dGU6KGUsdCxyKT0+cXgoYC9wbHVnaW4vJHtlfSR7dH1gLHIpLHBsdWdpblJvdXRlRm9yU3JjOihlLHQscj1uZXcgVVJMU2VhcmNoUGFyYW1zKT0+e2xldCBuPWNFKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiZyLmFwcGVuZChJZ3QsSlNPTi5zdHJpbmdpZnkobikpLHF4KGAvcGx1Z2luLyR7ZX0ke3R9YCxyKX0scGx1Z2luc0xpc3Rpbmc6KCk9PnF4KCIvcGx1Z2luc19saXN0aW5nIixOZ3Qoe1trZ3RdOkd4ZS5nZXRBbGwoa2d0KX0pKSxydW5zOigpPT5xeCgiL3J1bnMiKX19ZnVuY3Rpb24gX2UoKXtyZXR1cm4gV3hlfWZ1bmN0aW9uIHF4KGUsdD1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsZXQgcj0iZGF0YSIrZTtyZXR1cm4gU3RyaW5nKHQpJiYocis9KGUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iKStTdHJpbmcodCkpLHJ9ZnVuY3Rpb24gTmd0KGU9e30pe2xldCB0PU9iamVjdC5rZXlzKGUpLnNvcnQoKS5maWx0ZXIobj0+ZVtuXSkscj1uZXcgVVJMU2VhcmNoUGFyYW1zO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPWVbbl07KEFycmF5LmlzQXJyYXkoaSk/aTpbaV0pLmZvckVhY2goYT0+ci5hcHBlbmQobixhKSl9KSxyfXZhciB1OT1FZShPZSgpLDEpO3ZhciBOYTsoZnVuY3Rpb24oZSl7ZVtlLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyIsZVtlLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKE5hfHwoTmE9e30pKTtmdW5jdGlvbiBZeGUoZSx0KXtsZXQgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gobil7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTp0LG1ldGFkYXRhOnt0eXBlOk5hLlNFQVJDSF9SRVNVTFRTLHZhbGlkUmVnZXg6ISFyLHVuaXZlcnNhbFJlZ2V4OnQ9PT0iLioifSxpdGVtczpyP2UuZmlsdGVyKG49Pm4ubWF0Y2gocikpOltdfX1mdW5jdGlvbiBqeGUoZSx0PSIvIil7bGV0IHI9W10sbj17fTtyZXR1cm4gZS5mb3JFYWNoKGk9PntsZXQgbz1pLmluZGV4T2YodCksYT1vPj0wP2kuc2xpY2UoMCxvKTppO2lmKCFuW2FdKXtsZXQgcz17bmFtZTphLG1ldGFkYXRhOnt0eXBlOk5hLlBSRUZJWF9HUk9VUH0saXRlbXM6W119O25bYV09cyxyLnB1c2gocyl9blthXS5pdGVtcy5wdXNoKGkpfSkscn1mdW5jdGlvbiBYeGUoZSx0PSIiKXtsZXQgcj1bWXhlKGUsdCldLG49anhlKGUpO3JldHVybiBBcnJheSgpLmNvbmNhdChyLG4pfWZ1bmN0aW9uIGhFKGUsdCxyKXtsZXQgbj0kaShlKSxpPVh4ZShuLHIpLG89JHhlKHU5LnBpY2soZSx0KSk7cmV0dXJuIGkubWFwKCh7bmFtZTphLG1ldGFkYXRhOnMsaXRlbXM6bH0pPT4oe25hbWU6YSxtZXRhZGF0YTpzLGl0ZW1zOmwubWFwKGM9Pih7dGFnOmMscnVuczooby5nZXQoYyl8fFtdKS5zbGljZSgpfSkpfSkpfWZ1bmN0aW9uICR4ZShlKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntlW3JdLmZvckVhY2gobj0+e2xldCBpPXQuZ2V0KG4pfHxbXTtpLnB1c2gociksdC5zZXQobixpKX0pfSksdH1mdW5jdGlvbiBLeGUoZSx0KXtsZXQgcj14aChlLnRhZyx0LnRhZyk7cmV0dXJuIHIhPTA/cjp4aChlLnJ1bix0LnJ1bil9ZnVuY3Rpb24gUWwoZSx0LHIpe2xldCBuPWhFKGUsdCxyKTtmdW5jdGlvbiBpKG8pe2xldCBhPXU5LmZsYXR0ZW4oby5pdGVtcy5tYXAoKHt0YWc6cyxydW5zOmx9KT0+bC5tYXAoYz0+KHt0YWc6cyxydW46Y30pKSkpO3JldHVybiBhLnNvcnQoS3hlKSx7bmFtZTpvLm5hbWUsbWV0YWRhdGE6by5tZXRhZGF0YSxpdGVtczphfX1yZXR1cm4gbi5tYXAoaSl9dmFyIGNXPXt9O0tzKGNXLHtJcm9uUmVzaXphYmxlQmVoYXZpb3I6KCk9PkpzfSk7dmFyIFp4ZT17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsbGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwfSxGZ3Q9e2F0dGFjaGVkOiEwLGRldGFjaGVkOiEwLHJlYWR5OiEwLGNyZWF0ZWQ6ITAsYmVmb3JlUmVnaXN0ZXI6ITAscmVnaXN0ZXJlZDohMCxhdHRyaWJ1dGVDaGFuZ2VkOiEwLGJlaGF2aW9yczohMCxfbm9BY2Nlc3NvcnM6ITB9LEp4ZT1PYmplY3QuYXNzaWduKHtsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITAscHJvcGVydGllczohMCxvYnNlcnZlcnM6ITB9LEZndCk7ZnVuY3Rpb24gUXhlKGUsdCxyKXtsZXQgbj1lLl9ub0FjY2Vzc29ycyxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2lmKCEoYSBpbiByKSlpZihuKXRbYV09ZVthXTtlbHNle2xldCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKTtzJiYocy5jb25maWd1cmFibGU9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsYSxzKSl9fX1mdW5jdGlvbiBCZ3QoZSx0KXtyZXR1cm4gVWd0KHt9LEd0KHQpLGUpfWZ1bmN0aW9uIHRiZShlLHQscil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspSGd0KGUsdFtuXSxyLEp4ZSl9ZnVuY3Rpb24gSGd0KGUsdCxyLG4pe1F4ZSh0LGUsbik7Zm9yKGxldCBpIGluIFp4ZSl0W2ldJiYocltpXT1yW2ldfHxbXSxyW2ldLnB1c2godFtpXSkpfWZ1bmN0aW9uIFZndChlLHQscil7dD10fHxbXTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpP0FycmF5LmlzQXJyYXkoaSk/Vmd0KGksdCk6dC5pbmRleE9mKGkpPDAmJighcnx8ci5pbmRleE9mKGkpPDApJiZ0LnVuc2hpZnQoaSk6Y29uc29sZS53YXJuKCJiZWhhdmlvciBpcyBudWxsLCBjaGVjayBmb3IgbWlzc2luZyBvciA0MDQgaW1wb3J0Iil9cmV0dXJuIHR9ZnVuY3Rpb24gT2d0KGUsdCl7Zm9yKGxldCByIGluIHQpe2xldCBuPWVbcl0saT10W3JdOyEoInZhbHVlImluIGkpJiZuJiYidmFsdWUiaW4gbj9lW3JdPU9iamVjdC5hc3NpZ24oe3ZhbHVlOm4udmFsdWV9LGkpOmVbcl09aX19dmFyIHpndD1HdChIVE1MRWxlbWVudCk7ZnVuY3Rpb24gVWd0KGUsdCxyKXtsZXQgbixpPXt9O2NsYXNzIG8gZXh0ZW5kcyB0e3N0YXRpYyBfZmluYWxpemVDbGFzcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImdlbmVyYXRlZEZyb20iLHRoaXMpKSl0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7ZWxzZXtpZihuKWZvcihsZXQgbD0wLGM7bDxuLmxlbmd0aDtsKyspYz1uW2xdLGMucHJvcGVydGllcyYmdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKGMucHJvcGVydGllcyksYy5vYnNlcnZlcnMmJnRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGMub2JzZXJ2ZXJzLGMucHJvcGVydGllcyk7ZS5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoZS5wcm9wZXJ0aWVzKSxlLm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoZS5vYnNlcnZlcnMsZS5wcm9wZXJ0aWVzKSx0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKX19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7bGV0IGw9e307aWYobilmb3IobGV0IGM9MDtjPG4ubGVuZ3RoO2MrKylPZ3QobCxuW2NdLnByb3BlcnRpZXMpO3JldHVybiBPZ3QobCxlLnByb3BlcnRpZXMpLGx9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtsZXQgbD1bXTtpZihuKWZvcihsZXQgYz0wLHU7YzxuLmxlbmd0aDtjKyspdT1uW2NdLHUub2JzZXJ2ZXJzJiYobD1sLmNvbmNhdCh1Lm9ic2VydmVycykpO3JldHVybiBlLm9ic2VydmVycyYmKGw9bC5jb25jYXQoZS5vYnNlcnZlcnMpKSxsfWNyZWF0ZWQoKXtzdXBlci5jcmVhdGVkKCk7bGV0IGw9aS5jcmVhdGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfV9yZWdpc3RlcmVkKCl7bGV0IGw9by5wcm90b3R5cGU7aWYoIWwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19oYXNSZWdpc3RlckZpbmlzaGVkIixsKSkpe2wuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwLHN1cGVyLl9yZWdpc3RlcmVkKCkscHAmJmEobCk7bGV0IGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHU9aS5iZWZvcmVSZWdpc3RlcjtpZih1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKTtpZih1PWkucmVnaXN0ZXJlZCx1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKX19X2FwcGx5TGlzdGVuZXJzKCl7c3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7bGV0IGw9aS5saXN0ZW5lcnM7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpZih1KWZvcihsZXQgaCBpbiB1KXRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcyxoLHVbaF0pfX1fZW5zdXJlQXR0cmlidXRlcygpe2xldCBsPWkuaG9zdEF0dHJpYnV0ZXM7aWYobClmb3IobGV0IGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7bGV0IHU9bFtjXTtmb3IobGV0IGggaW4gdSl0aGlzLl9lbnN1cmVBdHRyaWJ1dGUoaCx1W2hdKX1zdXBlci5fZW5zdXJlQXR0cmlidXRlcygpfXJlYWR5KCl7c3VwZXIucmVhZHkoKTtsZXQgbD1pLnJlYWR5O2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dGFjaGVkKCl7c3VwZXIuYXR0YWNoZWQoKTtsZXQgbD1pLmF0dGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWRldGFjaGVkKCl7c3VwZXIuZGV0YWNoZWQoKTtsZXQgbD1pLmRldGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dHJpYnV0ZUNoYW5nZWQobCxjLHUpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTtsZXQgaD1pLmF0dHJpYnV0ZUNoYW5nZWQ7aWYoaClmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyloW2ZdLmNhbGwodGhpcyxsLGMsdSl9fWlmKHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtyXSk7bGV0IHM9dC5wcm90b3R5cGUuYmVoYXZpb3JzO249Vmd0KHIsbnVsbCxzKSxvLnByb3RvdHlwZS5iZWhhdmlvcnM9cz9zLmNvbmNhdChyKTpufWxldCBhPXM9PntuJiZ0YmUocyxuLGkpLEhndChzLGUsaSxGZ3QpfTtyZXR1cm4gcHB8fGEoby5wcm90b3R5cGUpLG8uZ2VuZXJhdGVkRnJvbT1lLG99dmFyIGg5PWZ1bmN0aW9uKGUsdCl7ZXx8Y29uc29sZS53YXJuKCJQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCIpO2xldCByPXQ/dCh6Z3QpOnpndDtyZXR1cm4gcj1VZ3QoZSxyLGUuYmVoYXZpb3JzKSxyLmlzPXIucHJvdG90eXBlLmlzPWUuaXMscn07dmFyIFl0PWZ1bmN0aW9uKGUpe2xldCB0O3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj90PWU6dD1ZdC5DbGFzcyhlKSxlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHQucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz1lLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyksY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQuaXMsdCksdH07WXQuQ2xhc3M9aDk7ZnVuY3Rpb24gZVcoZSx0LHIsbixpKXtsZXQgbztpJiYobz10eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsLG8mJihuPWUuX19kYXRhVGVtcFt0XSkpO2xldCBhPW4hPT1yJiYobj09PW58fHI9PT1yKTtyZXR1cm4gbyYmYSYmKGUuX19kYXRhVGVtcFt0XT1yKSxhfXZhciBHeD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gZVcodGhpcyxuLGksbywhMCl9fXJldHVybiB0fSksZjk9Um4oZT0+e2NsYXNzIHQgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdXRhYmxlRGF0YTpCb29sZWFufX1fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLG8pe3JldHVybiBlVyh0aGlzLG4saSxvLHRoaXMubXV0YWJsZURhdGEpfX1yZXR1cm4gdH0pO0d4Ll9tdXRhYmxlUHJvcGVydHlDaGFuZ2U9ZVc7dmFyIHJXPW51bGw7ZnVuY3Rpb24gblcoKXtyZXR1cm4gcld9blcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuVyx3cml0YWJsZTohMH19KTt2YXIgR2d0PXVfKG5XKSxlYmU9R3goR2d0KTtmdW5jdGlvbiByYmUoZSx0KXtyVz1lLE9iamVjdC5zZXRQcm90b3R5cGVPZihlLHQucHJvdG90eXBlKSxuZXcgdCxyVz1udWxsfXZhciBuYmU9dV8oY2xhc3N7fSk7ZnVuY3Rpb24gaVcoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtpZihCb29sZWFuKGUpIT1Cb29sZWFuKG4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fKSlpZihuLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpZT8obi5fX3BvbHltZXJUZXh0Q29udGVudF9fPW4udGV4dENvbnRlbnQsbi50ZXh0Q29udGVudD0iIik6bi50ZXh0Q29udGVudD1uLl9fcG9seW1lclRleHRDb250ZW50X187ZWxzZSBpZihuLmxvY2FsTmFtZT09PSJzbG90IilpZihlKW4uX19wb2x5bWVyUmVwbGFjZWRfXz1kb2N1bWVudC5jcmVhdGVDb21tZW50KCJoaWRkZW4tc2xvdCIpLHVlKHVlKG4pLnBhcmVudE5vZGUpLnJlcGxhY2VDaGlsZChuLl9fcG9seW1lclJlcGxhY2VkX18sbik7ZWxzZXtsZXQgaT1uLl9fcG9seW1lclJlcGxhY2VkX187aSYmdWUodWUoaSkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKG4saSl9ZWxzZSBuLnN0eWxlJiYoZT8obi5fX3BvbHltZXJEaXNwbGF5X189bi5zdHlsZS5kaXNwbGF5LG4uc3R5bGUuZGlzcGxheT0ibm9uZSIpOm4uc3R5bGUuZGlzcGxheT1uLl9fcG9seW1lckRpc3BsYXlfXyk7bi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189ZSxuLl9zaG93SGlkZUNoaWxkcmVuJiZuLl9zaG93SGlkZUNoaWxkcmVuKGUpfX12YXIgYmg9Y2xhc3MgZXh0ZW5kcyBuYmV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9jb25maWd1cmVQcm9wZXJ0aWVzKHQpLHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX19kYXRhSG9zdCk7bGV0IHI9W107dGhpcy5jaGlsZHJlbj1yO2ZvcihsZXQgaT10aGlzLnJvb3QuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylyLnB1c2goaSksaS5fX3RlbXBsYXRpemVJbnN0YW5jZT10aGlzO3RoaXMuX190ZW1wbGF0aXplT3duZXImJnRoaXMuX190ZW1wbGF0aXplT3duZXIuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCEwKTtsZXQgbj10aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7KHQmJm4uaW5zdGFuY2VQcm9wc3x8IW4uaW5zdGFuY2VQcm9wcykmJnRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX1fY29uZmlndXJlUHJvcGVydGllcyh0KXtpZih0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKWZvcihsZXQgbiBpbiB0aGlzLl9faG9zdFByb3BzKXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShuLHRoaXMuX19kYXRhSG9zdFsiX2hvc3RfIituXSk7Zm9yKGxldCBuIGluIHQpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sdFtuXSl9Zm9yd2FyZEhvc3RQcm9wKHQscil7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsciwhMSwhMCkmJnRoaXMuX19kYXRhSG9zdC5fZW5xdWV1ZUNsaWVudCh0aGlzKX1fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil7aWYodGhpcy5fbWV0aG9kSG9zdCYmdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLnBhcmVudE1vZGVsKXRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxyLGk9PntpLm1vZGVsPXRoaXMsbihpKX0pO2Vsc2V7bGV0IGk9dGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7aSYmaS5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil9fV9zaG93SGlkZUNoaWxkcmVuKHQpe2lXKHQsdGhpcy5jaGlsZHJlbil9X3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKXt0Ll9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdC5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnI9PSJ0ZXh0Q29udGVudCI/dC5fX3BvbHltZXJUZXh0Q29udGVudF9fPW46c3VwZXIuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKX1nZXQgcGFyZW50TW9kZWwoKXtsZXQgdD10aGlzLl9fcGFyZW50TW9kZWw7aWYoIXQpe2xldCByO3Q9dGhpcztkbyB0PXQuX19kYXRhSG9zdC5fX2RhdGFIb3N0O3doaWxlKChyPXQuX190ZW1wbGF0aXplT3B0aW9ucykmJiFyLnBhcmVudE1vZGVsKTt0aGlzLl9fcGFyZW50TW9kZWw9dH1yZXR1cm4gdH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiEwfX07YmgucHJvdG90eXBlLl9fZGF0YUhvc3Q7YmgucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM7YmgucHJvdG90eXBlLl9tZXRob2RIb3N0O2JoLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lcjtiaC5wcm90b3R5cGUuX19ob3N0UHJvcHM7dmFyIGliZT1HeChiaCk7ZnVuY3Rpb24gcWd0KGUpe2xldCB0PWUuX19kYXRhSG9zdDtyZXR1cm4gdCYmdC5fbWV0aG9kSG9zdHx8dH1mdW5jdGlvbiBvYmUoZSx0LHIpe2xldCBuPXIubXV0YWJsZURhdGE/aWJlOmJoO3RjLm1peGluJiYobj10Yy5taXhpbihuKSk7bGV0IGk9Y2xhc3MgZXh0ZW5kcyBue307cmV0dXJuIGkucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM9cixpLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGUpLGxiZShpLGUsdCxyKSxpfWZ1bmN0aW9uIGFiZShlLHQscixuKXtsZXQgaT1yLmZvcndhcmRIb3N0UHJvcDtpZihpJiZ0Lmhhc0hvc3RQcm9wcyl7bGV0IG89ZS5sb2NhbE5hbWU9PSJ0ZW1wbGF0ZSIsYT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzO2lmKCFhKXtpZihvKXtsZXQgbD1yLm11dGFibGVEYXRhP2ViZTpHZ3Q7Y2xhc3MgYyBleHRlbmRzIGx7fWE9dC50ZW1wbGF0aXplVGVtcGxhdGVDbGFzcz1jfWVsc2V7bGV0IGw9ZS5jb25zdHJ1Y3RvcjtjbGFzcyBjIGV4dGVuZHMgbHt9YT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWN9bGV0IHM9dC5ob3N0UHJvcHM7Zm9yKGxldCBsIGluIHMpYS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCJfaG9zdF8iK2wsYS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSx7Zm46c2JlKGwsaSl9KSxhLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoIl9ob3N0XyIrbCk7TEkmJm4mJmhiZSh0LHIsbil9aWYoZS5fX2RhdGFQcm90byYmT2JqZWN0LmFzc2lnbihlLl9fZGF0YSxlLl9fZGF0YVByb3RvKSxvKXJiZShlLGEpLGUuX19kYXRhVGVtcD17fSxlLl9fZGF0YVBlbmRpbmc9bnVsbCxlLl9fZGF0YU9sZD1udWxsLGUuX2VuYWJsZVByb3BlcnRpZXMoKTtlbHNle09iamVjdC5zZXRQcm90b3R5cGVPZihlLGEucHJvdG90eXBlKTtsZXQgcz10Lmhvc3RQcm9wcztmb3IobGV0IGwgaW4gcylpZihsPSJfaG9zdF8iK2wsbCBpbiBlKXtsZXQgYz1lW2xdO2RlbGV0ZSBlW2xdLGUuX19kYXRhW2xdPWN9fX19ZnVuY3Rpb24gc2JlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt0LmNhbGwobi5fX3RlbXBsYXRpemVPd25lcixpLnN1YnN0cmluZyg2KSxvW2ldKX19ZnVuY3Rpb24gbGJlKGUsdCxyLG4pe2xldCBpPXIuaG9zdFByb3BzfHx7fTtmb3IobGV0IG8gaW4gbi5pbnN0YW5jZVByb3BzKXtkZWxldGUgaVtvXTtsZXQgYT1uLm5vdGlmeUluc3RhbmNlUHJvcDthJiZlLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QobyxlLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpjYmUobyxhKX0pfWlmKG4uZm9yd2FyZEhvc3RQcm9wJiZ0Ll9fZGF0YUhvc3QpZm9yKGxldCBvIGluIGkpci5oYXNIb3N0UHJvcHN8fChyLmhhc0hvc3RQcm9wcz0hMCksZS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KG8sZS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46dWJlKCl9KX1mdW5jdGlvbiBjYmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3QuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLG4saSxvW2ldKX19ZnVuY3Rpb24gdWJlKCl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt0Ll9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgiX2hvc3RfIityLG5bcl0sITAsITApfX1mdW5jdGlvbiB0YyhlLHQscil7aWYoaXUmJiFxZ3QoZSkpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtpZihyPXJ8fHt9LGUuX190ZW1wbGF0aXplT3duZXIpdGhyb3cgbmV3IEVycm9yKCJBIDx0ZW1wbGF0ZT4gY2FuIG9ubHkgYmUgdGVtcGxhdGl6ZWQgb25jZSIpO2UuX190ZW1wbGF0aXplT3duZXI9dDtsZXQgaT0odD90LmNvbnN0cnVjdG9yOmJoKS5fcGFyc2VUZW1wbGF0ZShlKSxvPWkudGVtcGxhdGl6ZUluc3RhbmNlQ2xhc3M7b3x8KG89b2JlKGUsaSxyKSxpLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzPW8pO2xldCBhPXFndChlKTthYmUoZSxpLHIsYSk7bGV0IHM9Y2xhc3MgZXh0ZW5kcyBve307cmV0dXJuIHMucHJvdG90eXBlLl9tZXRob2RIb3N0PWEscy5wcm90b3R5cGUuX19kYXRhSG9zdD1lLHMucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyPXQscy5wcm90b3R5cGUuX19ob3N0UHJvcHM9aS5ob3N0UHJvcHMscz1zLHN9ZnVuY3Rpb24gaGJlKGUsdCxyKXtsZXQgbj1yLmNvbnN0cnVjdG9yLl9wcm9wZXJ0aWVzLHtwcm9wZXJ0eUVmZmVjdHM6aX09ZSx7aW5zdGFuY2VQcm9wczpvfT10O2ZvcihsZXQgYSBpbiBpKWlmKCFuW2FdJiYhKG8mJm9bYV0pKXtsZXQgcz1pW2FdO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXR7cGFydDpjfT1zW2xdLmluZm87aWYoIShjLnNpZ25hdHVyZSYmYy5zaWduYXR1cmUuc3RhdGljKSl7Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHthfScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApO2JyZWFrfX19fWZ1bmN0aW9uIHA5KGUsdCl7bGV0IHI7Zm9yKDt0OylpZihyPXQuX19kYXRhSG9zdD90OnQuX190ZW1wbGF0aXplSW5zdGFuY2UpaWYoci5fX2RhdGFIb3N0IT1lKXQ9ci5fX2RhdGFIb3N0O2Vsc2UgcmV0dXJuIHI7ZWxzZSB0PXVlKHQpLnBhcmVudE5vZGU7cmV0dXJuIG51bGx9dmFyIFdndD17dGVtcGxhdGl6ZShlLHQpe3RoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGU9ZSx0aGlzLmN0b3I9dGMoZSx0aGlzLHttdXRhYmxlRGF0YTpCb29sZWFuKHQpLHBhcmVudE1vZGVsOnRoaXMuX3BhcmVudE1vZGVsLGluc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxmb3J3YXJkSG9zdFByb3A6dGhpcy5fZm9yd2FyZEhvc3RQcm9wVjIsbm90aWZ5SW5zdGFuY2VQcm9wOnRoaXMuX25vdGlmeUluc3RhbmNlUHJvcFYyfSl9LHN0YW1wKGUpe3JldHVybiBuZXcgdGhpcy5jdG9yKGUpfSxtb2RlbEZvckVsZW1lbnQoZSl7cmV0dXJuIHA5KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsZSl9fTt2YXIgWWd0PSExO2Z1bmN0aW9uIFd4KCl7aWYocHAmJiFjXyl7aWYoIVlndCl7WWd0PSEwO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS50ZXh0Q29udGVudD0iZG9tLWJpbmQsZG9tLWlmLGRvbS1yZXBlYXR7ZGlzcGxheTpub25lO30iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9cmV0dXJuITB9cmV0dXJuITF9dmFyIGZiZT15aChmOSh1XyhIVE1MRWxlbWVudCkpKSxvVz1jbGFzcyBleHRlbmRzIGZiZXtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsibXV0YWJsZS1kYXRhIl19Y29uc3RydWN0b3IoKXtpZihzdXBlcigpLGl1KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkIik7dGhpcy5yb290PW51bGwsdGhpcy4kPW51bGwsdGhpcy5fX2NoaWxkcmVuPW51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3RoaXMubXV0YWJsZURhdGE9ITB9Y29ubmVjdGVkQ2FsbGJhY2soKXtXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW5kZXIoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19yZW1vdmVDaGlsZHJlbigpfV9faW5zZXJ0Q2hpbGRyZW4oKXt1ZSh1ZSh0aGlzKS5wYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUodGhpcy5yb290LHRoaXMpfV9fcmVtb3ZlQ2hpbGRyZW4oKXtpZih0aGlzLl9fY2hpbGRyZW4pZm9yKGxldCB0PTA7dDx0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoO3QrKyl0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fX2NoaWxkcmVuW3RdKX1yZW5kZXIoKXtsZXQgdDtpZighdGhpcy5fX2NoaWxkcmVuKXtpZih0PXR8fHRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSwhdCl7bGV0IHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih0PXRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSx0KXIuZGlzY29ubmVjdCgpLHRoaXMucmVuZGVyKCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImRvbS1iaW5kIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7ci5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pO3JldHVybn10aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0KSx0aGlzLiQ9dGhpcy5yb290LiQsdGhpcy5fX2NoaWxkcmVuPVtdO2ZvcihsZXQgcj10aGlzLnJvb3QuZmlyc3RDaGlsZDtyO3I9ci5uZXh0U2libGluZyl0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF09cjt0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9dGhpcy5fX2luc2VydENoaWxkcmVuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoImRvbS1iaW5kIixvVyk7dmFyIHBiZT1mOShtdCksZDk9Y2xhc3MgZXh0ZW5kcyBwYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJkb20tcmVwZWF0In1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxpdGVtc0luZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtc0luZGV4In0sc29ydDp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19zb3J0Q2hhbmdlZCJ9LGZpbHRlcjp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19maWx0ZXJDaGFuZ2VkIn0sb2JzZXJ2ZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9fb2JzZXJ2ZUNoYW5nZWQifSxkZWxheTpOdW1iZXIscmVuZGVyZWRJdGVtQ291bnQ6e3R5cGU6TnVtYmVyLG5vdGlmeTohVU0scmVhZE9ubHk6ITB9LGluaXRpYWxDb3VudDp7dHlwZTpOdW1iZXJ9LHRhcmdldEZyYW1lcmF0ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKSJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufSxyZXVzZUNodW5rZWRJbnN0YW5jZXM6e3R5cGU6Qm9vbGVhbn19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2VzPVtdLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sdGhpcy5fX2NodW5rQ291bnQ9bnVsbCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPW51bGwsdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9ITEsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9ITEsdGhpcy5fX2NodW5raW5nSWQ9MCx0aGlzLl9fc29ydEZuPW51bGwsdGhpcy5fX2ZpbHRlckZuPW51bGwsdGhpcy5fX29ic2VydmVQYXRocz1udWxsLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2lzRGV0YWNoZWQ9ITAsdGhpcy50ZW1wbGF0ZT1udWxsLHRoaXMuX3RlbXBsYXRlSW5mb31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX2lzRGV0YWNoZWQ9ITA7Zm9yKGxldCB0PTA7dDx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDt0KyspdGhpcy5fX2RldGFjaEluc3RhbmNlKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5fX2lzRGV0YWNoZWQpe3RoaXMuX19pc0RldGFjaGVkPSExO2xldCB0PXVlKHVlKHRoaXMpLnBhcmVudE5vZGUpO2ZvcihsZXQgcj0wO3I8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7cisrKXRoaXMuX19hdHRhY2hJbnN0YW5jZShyLHQpfX1fX2Vuc3VyZVRlbXBsYXRpemVkKCl7aWYoIXRoaXMuX19jdG9yKXtsZXQgdD10aGlzLHI9dGhpcy50ZW1wbGF0ZT10Ll90ZW1wbGF0ZUluZm8/dDp0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIXIpe2xldCBpPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgpPT57aWYodGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKWkuZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLXJlcGVhdCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKX0pO3JldHVybiBpLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksITF9bGV0IG49e307blt0aGlzLmFzXT0hMCxuW3RoaXMuaW5kZXhBc109ITAsblt0aGlzLml0ZW1zSW5kZXhBc109ITAsdGhpcy5fX2N0b3I9dGMocix0aGlzLHttdXRhYmxlRGF0YTp0aGlzLm11dGFibGVEYXRhLHBhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6bixmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24oaSxvKXtsZXQgYT10aGlzLl9faW5zdGFuY2VzO2ZvcihsZXQgcz0wLGw7czxhLmxlbmd0aCYmKGw9YVtzXSk7cysrKWwuZm9yd2FyZEhvc3RQcm9wKGksbyl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbihpLG8sYSl7aWYoT0kodGhpcy5hcyxvKSl7bGV0IHM9aVt0aGlzLml0ZW1zSW5kZXhBc107bz09dGhpcy5hcyYmKHRoaXMuaXRlbXNbc109YSk7bGV0IGw9ZHAodGhpcy5hcyxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7c31gLG8pO3RoaXMubm90aWZ5UGF0aChsLGEpfX19KX1yZXR1cm4hMH1fX2dldE1ldGhvZEhvc3QoKXtyZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0fHx0aGlzLl9fZGF0YUhvc3R9X19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7bGV0IHI9dCxuPXRoaXMuX19nZXRNZXRob2RIb3N0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5bcl0uYXBwbHkobixhcmd1bWVudHMpfX1yZXR1cm4gdH1fX3NvcnRDaGFuZ2VkKHQpe3RoaXMuX19zb3J0Rm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fZmlsdGVyQ2hhbmdlZCh0KXt0aGlzLl9fZmlsdGVyRm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fY29tcHV0ZUZyYW1lVGltZSh0KXtyZXR1cm4gTWF0aC5jZWlsKDFlMy90KX1fX29ic2VydmVDaGFuZ2VkKCl7dGhpcy5fX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCIuKiIsIi4iKS5zcGxpdCgiICIpfV9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KXtpZih0aGlzLl9fc29ydEZufHx0aGlzLl9fZmlsdGVyRm4pe2lmKCF0KXRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpO2Vsc2UgaWYodGhpcy5fX29ic2VydmVQYXRocyl7bGV0IHI9dGhpcy5fX29ic2VydmVQYXRocztmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl0LmluZGV4T2YocltuXSk9PT0wJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX19fV9faXRlbXNDaGFuZ2VkKHQpe3RoaXMuaXRlbXMmJiFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpJiZjb25zb2xlLndhcm4oImRvbS1yZXBlYXQgZXhwZWN0ZWQgYXJyYXkgZm9yIGBpdGVtc2AsIGZvdW5kIix0aGlzLml0ZW1zKSx0aGlzLl9faGFuZGxlSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfHwodC5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMCksdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpKX1fX2RlYm91bmNlUmVuZGVyKHQscj0wKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIscj4wP21vLmFmdGVyKHIpOmxpLHQuYmluZCh0aGlzKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9cmVuZGVyKCl7dGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpLGNpKCl9X19yZW5kZXIoKXtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRpemVkKCkpcmV0dXJuO2xldCB0PXRoaXMuaXRlbXN8fFtdLHI9dGhpcy5fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KSxuPXRoaXMuX19jYWxjdWxhdGVMaW1pdChyLmxlbmd0aCk7dGhpcy5fX3VwZGF0ZUluc3RhbmNlcyh0LG4sciksdGhpcy5pbml0aWFsQ291bnQmJih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rfHx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZykmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fY2h1bmtpbmdJZCksdGhpcy5fX2NodW5raW5nSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9fY29udGludWVDaHVua2luZygpKSksdGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5fX2luc3RhbmNlcy5sZW5ndGgpLCghVU18fHRoaXMubm90aWZ5RG9tQ2hhbmdlKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9X19zb3J0QW5kRmlsdGVySXRlbXModCl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyW25dPW47cmV0dXJuIHRoaXMuX19maWx0ZXJGbiYmKHI9ci5maWx0ZXIoKG4saSxvKT0+dGhpcy5fX2ZpbHRlckZuKHRbbl0saSxvKSkpLHRoaXMuX19zb3J0Rm4mJnIuc29ydCgobixpKT0+dGhpcy5fX3NvcnRGbih0W25dLHRbaV0pKSxyfV9fY2FsY3VsYXRlTGltaXQodCl7bGV0IHI9dCxuPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2lmKHRoaXMuaW5pdGlhbENvdW50KXtsZXQgaTshdGhpcy5fX2NodW5rQ291bnR8fHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZCYmIXRoaXMucmV1c2VDaHVua2VkSW5zdGFuY2VzPyhyPU1hdGgubWluKHQsdGhpcy5pbml0aWFsQ291bnQpLGk9TWF0aC5tYXgoci1uLDApLHRoaXMuX19jaHVua0NvdW50PWl8fDEpOihpPU1hdGgubWluKE1hdGgubWF4KHQtbiwwKSx0aGlzLl9fY2h1bmtDb3VudCkscj1NYXRoLm1pbihuK2ksdCkpLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9aT09PXRoaXMuX19jaHVua0NvdW50LHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPXI8dCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpfXJldHVybiB0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEscn1fX2NvbnRpbnVlQ2h1bmtpbmcoKXtpZih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rKXtsZXQgdD1wZXJmb3JtYW5jZS5ub3coKS10aGlzLl9fcmVuZGVyU3RhcnRUaW1lLHI9dGhpcy5fdGFyZ2V0RnJhbWVUaW1lL3Q7dGhpcy5fX2NodW5rQ291bnQ9TWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCpyKXx8MX10aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fdXBkYXRlSW5zdGFuY2VzKHQscixuKXtsZXQgaT10aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sbztmb3Iobz0wO288cjtvKyspe2xldCBhPXRoaXMuX19pbnN0YW5jZXNbb10scz1uW29dLGw9dFtzXTtpW3NdPW8sYT8oYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsbCksYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaW5kZXhBcyxvKSxhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pdGVtc0luZGV4QXMscyksYS5fZmx1c2hQcm9wZXJ0aWVzKCkpOnRoaXMuX19pbnNlcnRJbnN0YW5jZShsLG8scyl9Zm9yKGxldCBhPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoLTE7YT49bzthLS0pdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGEpfV9fZGV0YWNoSW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2luc3RhbmNlc1t0XSxuPXVlKHIucm9vdCk7Zm9yKGxldCBpPTA7aTxyLmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCBvPXIuY2hpbGRyZW5baV07bi5hcHBlbmRDaGlsZChvKX1yZXR1cm4gcn1fX2F0dGFjaEluc3RhbmNlKHQscil7bGV0IG49dGhpcy5fX2luc3RhbmNlc1t0XTtyLmluc2VydEJlZm9yZShuLnJvb3QsdGhpcyl9X19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KXt0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCksdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UodCwxKX1fX3N0YW1wSW5zdGFuY2UodCxyLG4pe2xldCBpPXt9O3JldHVybiBpW3RoaXMuYXNdPXQsaVt0aGlzLmluZGV4QXNdPXIsaVt0aGlzLml0ZW1zSW5kZXhBc109bixuZXcgdGhpcy5fX2N0b3IoaSl9X19pbnNlcnRJbnN0YW5jZSh0LHIsbil7bGV0IGk9dGhpcy5fX3N0YW1wSW5zdGFuY2UodCxyLG4pLG89dGhpcy5fX2luc3RhbmNlc1tyKzFdLGE9bz9vLmNoaWxkcmVuWzBdOnRoaXM7cmV0dXJuIHVlKHVlKHRoaXMpLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZShpLnJvb3QsYSksdGhpcy5fX2luc3RhbmNlc1tyXT1pLGl9X3Nob3dIaWRlQ2hpbGRyZW4odCl7Zm9yKGxldCByPTA7cjx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtyKyspdGhpcy5fX2luc3RhbmNlc1tyXS5fc2hvd0hpZGVDaGlsZHJlbih0KX1fX2hhbmRsZUl0ZW1QYXRoKHQscil7bGV0IG49dC5zbGljZSg2KSxpPW4uaW5kZXhPZigiLiIpLG89aTwwP246bi5zdWJzdHJpbmcoMCxpKTtpZihvPT1wYXJzZUludChvLDEwKSl7bGV0IGE9aTwwPyIiOm4uc3Vic3RyaW5nKGkrMSk7dGhpcy5fX2hhbmRsZU9ic2VydmVkUGF0aHMoYSk7bGV0IHM9dGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W29dLGw9dGhpcy5fX2luc3RhbmNlc1tzXTtpZihsKXtsZXQgYz10aGlzLmFzKyhhPyIuIithOiIiKTtsLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYyxyLCExLCEwKSxsLl9mbHVzaFByb3BlcnRpZXMoKX1yZXR1cm4hMH19aXRlbUZvckVsZW1lbnQodCl7bGV0IHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIHImJnJbdGhpcy5hc119aW5kZXhGb3JFbGVtZW50KHQpe2xldCByPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpO3JldHVybiByJiZyW3RoaXMuaW5kZXhBc119bW9kZWxGb3JFbGVtZW50KHQpe3JldHVybiBwOSh0aGlzLnRlbXBsYXRlLHQpfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGQ5LmlzLGQ5KTt2YXIgbTk9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1pZiJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0scmVzdGFtcDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX2xhc3RJZj0hMSx0aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz0hMSx0aGlzLl9fdGVtcGxhdGUsdGhpcy5fdGVtcGxhdGVJbmZvfV9fZGVib3VuY2VSZW5kZXIoKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIsbGksKCk9PnRoaXMuX19yZW5kZXIoKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO2xldCB0PXVlKHRoaXMpLnBhcmVudE5vZGU7KCF0fHx0Lm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJiF1ZSh0KS5ob3N0KSYmdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksV3goKXx8KHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaWYmJnRoaXMuX19kZWJvdW5jZVJlbmRlcigpfV9fZW5zdXJlVGVtcGxhdGUoKXtpZighdGhpcy5fX3RlbXBsYXRlKXtsZXQgdD10aGlzLHI9dC5fdGVtcGxhdGVJbmZvP3Q6dWUodCkucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighcil7bGV0IG49bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih1ZSh0aGlzKS5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKW4uZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLWlmIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7cmV0dXJuIG4ub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX10aGlzLl9fdGVtcGxhdGU9cn1yZXR1cm4hMH1fX2Vuc3VyZUluc3RhbmNlKCl7bGV0IHQ9dWUodGhpcykucGFyZW50Tm9kZTtpZih0aGlzLl9faGFzSW5zdGFuY2UoKSl7bGV0IHI9dGhpcy5fX2dldEluc3RhbmNlTm9kZXMoKTtpZihyJiZyLmxlbmd0aCYmdWUodGhpcykucHJldmlvdXNTaWJsaW5nIT09cltyLmxlbmd0aC0xXSlmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKyl1ZSh0KS5pbnNlcnRCZWZvcmUobyx0aGlzKX1lbHNle2lmKCF0fHwhdGhpcy5fX2Vuc3VyZVRlbXBsYXRlKCkpcmV0dXJuITE7dGhpcy5fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpfXJldHVybiEwfXJlbmRlcigpe2NpKCl9X19yZW5kZXIoKXtpZih0aGlzLmlmKXtpZighdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpcmV0dXJufWVsc2UgdGhpcy5yZXN0YW1wJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSwoIVVNfHx0aGlzLm5vdGlmeURvbUNoYW5nZSkmJnRoaXMuaWYhPXRoaXMuX2xhc3RJZiYmKHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuX2xhc3RJZj10aGlzLmlmKX1fX2hhc0luc3RhbmNlKCl7fV9fZ2V0SW5zdGFuY2VOb2Rlcygpe31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe31fX3RlYXJkb3duSW5zdGFuY2UoKXt9X3Nob3dIaWRlQ2hpbGRyZW4oKXt9fSxhVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzfV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2RhdGFIb3N0fHx0aGlzO2lmKGl1JiYhdGhpcy5fX2RhdGFIb3N0KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkIik7bGV0IG49ci5fYmluZFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSwhMCk7bi5ydW5FZmZlY3RzPShpLG8sYSk9PntsZXQgcz10aGlzLl9fc3luY0luZm87aWYodGhpcy5pZilzJiYodGhpcy5fX3N5bmNJbmZvPW51bGwsdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLG89T2JqZWN0LmFzc2lnbihzLmNoYW5nZWRQcm9wcyxvKSksaShvLGEpO2Vsc2UgaWYodGhpcy5fX2luc3RhbmNlKWlmKHN8fChzPXRoaXMuX19zeW5jSW5mbz17cnVuRWZmZWN0czppLGNoYW5nZWRQcm9wczp7fX0pLGEpZm9yKGxldCBsIGluIG8pe2xldCBjPWF1KGwpO3MuY2hhbmdlZFByb3BzW2NdPXRoaXMuX19kYXRhSG9zdFtjXX1lbHNlIE9iamVjdC5hc3NpZ24ocy5jaGFuZ2VkUHJvcHMsbyl9LHRoaXMuX19pbnN0YW5jZT1yLl9zdGFtcFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSxuKSx1ZSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLHRoaXMpfV9fc3luY0hvc3RQcm9wZXJ0aWVzKCl7bGV0IHQ9dGhpcy5fX3N5bmNJbmZvO3QmJih0aGlzLl9fc3luY0luZm89bnVsbCx0LnJ1bkVmZmVjdHModC5jaGFuZ2VkUHJvcHMsITEpKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtsZXQgdD10aGlzLl9fZGF0YUhvc3R8fHRoaXM7dGhpcy5fX2luc3RhbmNlJiYodC5fcmVtb3ZlQm91bmREb20odGhpcy5fX2luc3RhbmNlKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbCl9X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsaVcodCx0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxzVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLmNoaWxkcmVufV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7dGhpcy5fX2N0b3J8fCh0aGlzLl9fY3Rvcj10Yyh0aGlzLl9fdGVtcGxhdGUsdGhpcyx7bXV0YWJsZURhdGE6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHIsbil7dGhpcy5fX2luc3RhbmNlJiYodGhpcy5pZj90aGlzLl9faW5zdGFuY2UuZm9yd2FyZEhvc3RQcm9wKHIsbik6KHRoaXMuX19pbnZhbGlkUHJvcHM9dGhpcy5fX2ludmFsaWRQcm9wc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9faW52YWxpZFByb3BzW2F1KHIpXT0hMCkpfX0pKSx0aGlzLl9faW5zdGFuY2U9bmV3IHRoaXMuX19jdG9yLHVlKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2Uucm9vdCx0aGlzKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtpZih0aGlzLl9faW5zdGFuY2Upe2xldCB0PXRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7bGV0IHI9dWUodFswXSkucGFyZW50Tm9kZTtpZihyKXtyPXVlKHIpO2ZvcihsZXQgbj0wLGk7bjx0Lmxlbmd0aCYmKGk9dFtuXSk7bisrKXIucmVtb3ZlQ2hpbGQoaSl9fXRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbH19X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9faW52YWxpZFByb3BzO2lmKHQpe3RoaXMuX19pbnZhbGlkUHJvcHM9bnVsbDtmb3IobGV0IHIgaW4gdCl0aGlzLl9faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eShyLHRoaXMuX19kYXRhSG9zdFtyXSk7dGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKX19X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsdGhpcy5fX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKHQpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxqZ3Q9Ukk/YVc6c1c7Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGpndC5pcyxqZ3QpO3ZhciBkYmU9Um4oZT0+e2xldCB0PVNtKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczp7dHlwZTpBcnJheX0sbXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHRvZ2dsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fbGFzdEl0ZW1zPW51bGwsdGhpcy5fX2xhc3RNdWx0aT1udWxsLHRoaXMuX19zZWxlY3RlZE1hcD1udWxsfV9fdXBkYXRlU2VsZWN0aW9uKGksbyl7bGV0IGE9by5wYXRoO2lmKGE9PUpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKSl7bGV0IHM9by5iYXNlfHxbXSxsPXRoaXMuX19sYXN0SXRlbXMsYz10aGlzLl9fbGFzdE11bHRpO2lmKGkhPT1jJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksbCl7bGV0IHU9bzkocyxsKTt0aGlzLl9fYXBwbHlTcGxpY2VzKHUpfXRoaXMuX19sYXN0SXRlbXM9cyx0aGlzLl9fbGFzdE11bHRpPWl9ZWxzZSBpZihvLnBhdGg9PWAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uc3BsaWNlc2ApdGhpcy5fX2FwcGx5U3BsaWNlcyhvLnZhbHVlLmluZGV4U3BsaWNlcyk7ZWxzZXtsZXQgcz1hLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uYC5sZW5ndGgpLGw9cGFyc2VJbnQocywxMCk7cy5pbmRleE9mKCIuIik8MCYmcz09bCYmdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChsKX19X19hcHBseVNwbGljZXMoaSl7bGV0IG89dGhpcy5fX3NlbGVjdGVkTWFwO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgbD1pW3NdO28uZm9yRWFjaCgoYyx1KT0+e2M8bC5pbmRleHx8KGM+PWwuaW5kZXgrbC5yZW1vdmVkLmxlbmd0aD9vLnNldCh1LGMrbC5hZGRlZENvdW50LWwucmVtb3ZlZC5sZW5ndGgpOm8uc2V0KHUsLTEpKX0pO2ZvcihsZXQgYz0wO2M8bC5hZGRlZENvdW50O2MrKyl7bGV0IHU9bC5pbmRleCtjO28uaGFzKHRoaXMuaXRlbXNbdV0pJiZvLnNldCh0aGlzLml0ZW1zW3VdLHUpfX10aGlzLl9fdXBkYXRlTGlua3MoKTtsZXQgYT0wO28uZm9yRWFjaCgocyxsKT0+e3M8MD8odGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsby5kZWxldGUobCkpOmErK30pfV9fdXBkYXRlTGlua3MoKXtpZih0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMubXVsdGkpe2xldCBpPTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2gobz0+e28+PTAmJnRoaXMubGlua1BhdGhzKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtvfWAsYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS4ke2krK31gKX0pfWVsc2UgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaT0+e3RoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7aX1gKSx0aGlzLmxpbmtQYXRocyhKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZEl0ZW0iLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWApfSl9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMuX19zZWxlY3RlZE1hcD1uZXcgTWFwLHRoaXMuc2VsZWN0ZWQ9dGhpcy5tdWx0aT9bXTpudWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9aXNTZWxlY3RlZChpKXtyZXR1cm4gdGhpcy5fX3NlbGVjdGVkTWFwLmhhcyhpKX1pc0luZGV4U2VsZWN0ZWQoaSl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2ldKX1fX2Rlc2VsZWN0Q2hhbmdlZElkeChpKXtsZXQgbz10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKTtpZihvPj0wKXtsZXQgYT0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKChzLGwpPT57bz09YSsrJiZ0aGlzLmRlc2VsZWN0KGwpfSl9fV9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKXtsZXQgbz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2Ake0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWBdO2lmKG8pcmV0dXJuIHBhcnNlSW50KG8uc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS5gLmxlbmd0aCksMTApfWRlc2VsZWN0KGkpe2xldCBvPXRoaXMuX19zZWxlY3RlZE1hcC5nZXQoaSk7aWYobz49MCl7dGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpKTtsZXQgYTt0aGlzLm11bHRpJiYoYT10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChvKSksdGhpcy5fX3VwZGF0ZUxpbmtzKCksdGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9fWRlc2VsZWN0SW5kZXgoaSl7dGhpcy5kZXNlbGVjdCh0aGlzLml0ZW1zW2ldKX1zZWxlY3QoaSl7dGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaSkpfXNlbGVjdEluZGV4KGkpe2xldCBvPXRoaXMuaXRlbXNbaV07dGhpcy5pc1NlbGVjdGVkKG8pP3RoaXMudG9nZ2xlJiZ0aGlzLmRlc2VsZWN0SW5kZXgoaSk6KHRoaXMubXVsdGl8fHRoaXMuX19zZWxlY3RlZE1hcC5jbGVhcigpLHRoaXMuX19zZWxlY3RlZE1hcC5zZXQobyxpKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMucHVzaChKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksbyk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1vKX19cmV0dXJuIHJ9KTt2YXIgbWJlPWRiZShtdCksZzk9Y2xhc3MgZXh0ZW5kcyBtYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJhcnJheS1zZWxlY3RvciJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGc5LmlzLGc5KTt2YXIgXzk9bmV3IFpsO3dpbmRvdy5TaGFkeUNTU3x8KHdpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlKGUsdCxyKXt9LHByZXBhcmVUZW1wbGF0ZURvbShlLHQpe30scHJlcGFyZVRlbXBsYXRlU3R5bGVzKGUsdCxyKXt9LHN0eWxlU3VidHJlZShlLHQpe185LnByb2Nlc3NTdHlsZXMoKSxKTShlLHQpfSxzdHlsZUVsZW1lbnQoZSl7XzkucHJvY2Vzc1N0eWxlcygpfSxzdHlsZURvY3VtZW50KGUpe185LnByb2Nlc3NTdHlsZXMoKSxKTShkb2N1bWVudC5ib2R5LGUpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWUoZSx0KXtyZXR1cm4gakkoZSx0KX0sZmx1c2hDdXN0b21TdHlsZXMoKXt9LG5hdGl2ZUNzczpOeCxuYXRpdmVTaGFkb3c6aF8sY3NzQnVpbGQ6TW0sZGlzYWJsZVJ1bnRpbWU6V0l9KTt3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U9Xzk7dmFyIFhndD0iaW5jbHVkZSIsZ2JlPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSxsVz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT1udWxsLGdiZS5hZGRDdXN0b21TdHlsZSh0aGlzKX1nZXRTdHlsZSgpe2lmKHRoaXMuX3N0eWxlKXJldHVybiB0aGlzLl9zdHlsZTtsZXQgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7aWYoIXQpcmV0dXJuIG51bGw7dGhpcy5fc3R5bGU9dDtsZXQgcj10LmdldEF0dHJpYnV0ZShYZ3QpO3JldHVybiByJiYodC5yZW1vdmVBdHRyaWJ1dGUoWGd0KSx0LnRleHRDb250ZW50PWltdChyKSt0LnRleHRDb250ZW50KSx0aGlzLm93bmVyRG9jdW1lbnQhPT13aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpLHRoaXMuX3N0eWxlfX07d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY3VzdG9tLXN0eWxlIixsVyk7dmFyICRndDskZ3Q9R3guX211dGFibGVQcm9wZXJ0eUNoYW5nZTt2YXIgS2d0PXtwcm9wZXJ0aWVzOnttdXRhYmxlRGF0YTpCb29sZWFufSxfc2hvdWxkUHJvcGVydHlDaGFuZ2UoZSx0LHIpe3JldHVybiAkZ3QodGhpcyxlLHQscix0aGlzLm11dGFibGVEYXRhKX19O3ZhciBEYT1HdChIVE1MRWxlbWVudCkucHJvdG90eXBlO3ZhciB5OT1uZXcgU2V0LEpzPXtwcm9wZXJ0aWVzOntfcGFyZW50UmVzaXphYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQifSxfbm90aWZ5aW5nRGVzY2VuZGFudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnsiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIjoiX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzPVtdLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplPXRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcyksdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplPXRoaXMuX29uRGVzY2VuZGFudElyb25SZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6KHk5LmRlbGV0ZSh0aGlzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSkpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXshdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkoZSkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQoZSl9LHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbihlKXt0aGlzLl9wYXJlbnRSZXNpemFibGUmJnRoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKSx0aGlzLl9wYXJlbnRSZXNpemFibGU9ZSxlJiZlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHRoaXMpPT09LTEmJihlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5wdXNoKHRoaXMpLGUuX3N1YnNjcmliZUlyb25SZXNpemUodGhpcykpfSxzdG9wUmVzaXplTm90aWZpY2F0aW9uc0ZvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKGUpO3Q+LTEmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5zcGxpY2UodCwxKSx0aGlzLl91bnN1YnNjcmliZUlyb25SZXNpemUoZSkpfSxfc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxfdW5zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LHJlc2l6ZXJTaG91bGROb3RpZnk6ZnVuY3Rpb24oZSl7cmV0dXJuITB9LF9vbkRlc2NlbmRhbnRJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJufWNffHx0aGlzLl9maXJlUmVzaXplKCl9LF9maXJlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLXJlc2l6ZSIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITF9KX0sX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7dCE9PXRoaXMmJih0LmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KHQpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfcGFyZW50UmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSl9LF9ub3RpZnlEZXNjZW5kYW50OmZ1bmN0aW9uKGUpeyF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLGUubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKCEhdGhpcy5pc0F0dGFjaGVkKWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpe3ZhciBlPXRoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zLmJpbmQodGhpcyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24gdCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHQpLGUoKX0pfWVsc2UgdGhpcy5fZmluZFBhcmVudCgpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyk6KHk5LmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfZmluZFBhcmVudDpmdW5jdGlvbigpe3RoaXMuYXNzaWduUGFyZW50UmVzaXphYmxlKG51bGwpLHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSksdGhpcy5fcGFyZW50UmVzaXphYmxlP3k5LmRlbGV0ZSh0aGlzKTp5OS5hZGQodGhpcyl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICAvKiBTYWZhcmkgMTAgbmVlZHMgdGhpcyBwcm9wZXJ0eSBwcmVmaXhlZCB0byBjb3JyZWN0bHkgYXBwbHkgdGhlIGN1c3RvbSBwcm9wZXJ0eSAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLWNvbGxhcHNlLWNsb3NlZCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tY29sbGFwc2Utb3BlbmVkKSkgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLWNvbGxhcHNlIixiZWhhdmlvcnM6W0pzXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ob3Jpem9udGFsQ2hhbmdlZCJ9LG9wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSx0cmFuc2l0aW9uaW5nOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSxub0FuaW1hdGlvbjp7dHlwZTpCb29sZWFufSxfZGVzaXJlZFNpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sZ2V0IGRpbWVuc2lvbigpe3JldHVybiB0aGlzLmhvcml6b250YWw/IndpZHRoIjoiaGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXgoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXhXaWR0aCI6Im1heEhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4Q3NzKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24oZSx0KXtlPWU9PT0iYXV0byI/IiI6ZTt2YXIgcj10JiYhdGhpcy5ub0FuaW1hdGlvbiYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9kZXNpcmVkU2l6ZSE9PWU7aWYodGhpcy5fZGVzaXJlZFNpemU9ZSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSxyKXt2YXIgbj10aGlzLl9jYWxjU2l6ZSgpO2U9PT0iIiYmKHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT0iIixlPXRoaXMuX2NhbGNTaXplKCkpLHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1uLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLHI9ZSE9PW59dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWUscnx8dGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxlbmFibGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe0RhLl93YXJuKCJgZW5hYmxlVHJhbnNpdGlvbigpYCBpcyBkZXByZWNhdGVkLCB1c2UgYG5vQW5pbWF0aW9uYCBpbnN0ZWFkLiIpLHRoaXMubm9BbmltYXRpb249IWV9LF91cGRhdGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWUmJiF0aGlzLm5vQW5pbWF0aW9uPyIiOiIwcyJ9LF9ob3Jpem9udGFsQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5PXRoaXMuX2RpbWVuc2lvbk1heENzczt2YXIgZT10aGlzLl9kaW1lbnNpb25NYXg9PT0ibWF4V2lkdGgiPyJtYXhIZWlnaHQiOiJtYXhXaWR0aCI7dGhpcy5zdHlsZVtlXT0iIix0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCExKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCF0aGlzLm9wZW5lZCksdGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCExKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsITEpLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITApLHRoaXMub3BlbmVkJiZ0aGlzLmZvY3VzKCl9LF90cmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPXRoaXMuX2Rlc2lyZWRTaXplLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhdGhpcy5vcGVuZWQpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIix0aGlzLm9wZW5lZCksdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCExKX0sX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXt6dChlKS5yb290VGFyZ2V0PT09dGhpcyYmdGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxfY2FsY1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmRpbWVuc2lvbl0rInB4In19KTt2YXIgWmd0PVFgCi8qIE1vc3QgY29tbW9uIHVzZWQgZmxleCBzdHlsZXMqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCwKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaW5saW5lIHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQubm8td3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtYXV0byB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIC5mbGV4LW5vbmUgewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogQmFzaWMgZmxleGJveCByZXZlcnNlIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LXJldmVyc2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UsCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogRmxleGJveCBhbGlnbm1lbnQgKi8KPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogTm9uLWZsZXhib3ggcG9zaXRpb25pbmcgaGVscGVyIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9Imlyb24tcG9zaXRpb25pbmciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5yZWxhdGl2ZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICBib2R5LmZ1bGxibGVlZCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KICAgICAgLmZpeGVkLWJvdHRvbSwKICAgICAgLmZpeGVkLWxlZnQsCiAgICAgIC5maXhlZC1yaWdodCwKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLXJpZ2h0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAuZml4ZWQtYm90dG9tIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWxlZnQgewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7Wmd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWmd0LmNvbnRlbnQpO3ZhciBKZ3Q9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBbaGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7Smd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoSmd0LmNvbnRlbnQpO3ZhciBRZ3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtRZ3QudGV4dENvbnRlbnQ9IltoaWRkZW5dIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ijtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFFndCk7dmFyIGdvPWNsYXNze2NvbnN0cnVjdG9yKHQpe2dvWyIgIl0odCksdGhpcy50eXBlPXQmJnQudHlwZXx8ImRlZmF1bHQiLHRoaXMua2V5PXQmJnQua2V5LHQmJiJ2YWx1ZSJpbiB0JiYodGhpcy52YWx1ZT10LnZhbHVlKX1nZXQgdmFsdWUoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLmtleTtpZih0JiZyKXJldHVybiBnby50eXBlc1t0XSYmZ28udHlwZXNbdF1bcl19c2V0IHZhbHVlKHQpe3ZhciByPXRoaXMudHlwZSxuPXRoaXMua2V5O3ImJm4mJihyPWdvLnR5cGVzW3JdPWdvLnR5cGVzW3JdfHx7fSx0PT1udWxsP2RlbGV0ZSByW25dOnJbbl09dCl9Z2V0IGxpc3QoKXt2YXIgdD10aGlzLnR5cGU7aWYodCl7dmFyIHI9Z28udHlwZXNbdGhpcy50eXBlXTtyZXR1cm4gcj9PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIF9iZVt0aGlzLnR5cGVdW25dfSx0aGlzKTpbXX19YnlLZXkodCl7cmV0dXJuIHRoaXMua2V5PXQsdGhpcy52YWx1ZX19O2dvWyIgIl09ZnVuY3Rpb24oKXt9O2dvLnR5cGVzPXt9O3ZhciBfYmU9Z28udHlwZXM7WXQoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgZ28oe3R5cGU6ZSxrZXk6dH0pO3JldHVybiByIT09dm9pZCAwJiZyIT09bi52YWx1ZT9uLnZhbHVlPXI6dGhpcy52YWx1ZSE9PW4udmFsdWUmJih0aGlzLnZhbHVlPW4udmFsdWUpLG59LGdldCBsaXN0KCl7cmV0dXJuIHRoaXMuX19tZXRhJiZ0aGlzLl9fbWV0YS5saXN0fSxfc2VsZkNoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsdWU9dGhpcyl9LGJ5S2V5OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ28oe3R5cGU6dGhpcy50eXBlLGtleTplfSkudmFsdWV9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CmAsaXM6Imlyb24taWNvbiIscHJvcGVydGllczp7aWNvbjp7dHlwZTpTdHJpbmd9LHRoZW1lOnt0eXBlOlN0cmluZ30sc3JjOnt0eXBlOlN0cmluZ30sX21ldGE6e3ZhbHVlOkRhLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PShlfHwiIikuc3BsaXQoIjoiKTt0aGlzLl9pY29uTmFtZT10LnBvcCgpLHRoaXMuX2ljb25zZXROYW1lPXQucG9wKCl8fHRoaXMuX0RFRkFVTFRfSUNPTlNFVCx0aGlzLl91cGRhdGVJY29uKCl9LF9zcmNDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3VwZGF0ZUljb24oKX0sX3VzZXNJY29uc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8IXRoaXMuc3JjfSxfdXBkYXRlSWNvbjpmdW5jdGlvbigpe3RoaXMuX3VzZXNJY29uc2V0KCk/KHRoaXMuX2ltZyYmdGhpcy5faW1nLnBhcmVudE5vZGUmJnp0KHRoaXMucm9vdCkucmVtb3ZlQ2hpbGQodGhpcy5faW1nKSx0aGlzLl9pY29uTmFtZT09PSIiP3RoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKTp0aGlzLl9pY29uc2V0TmFtZSYmdGhpcy5fbWV0YSYmKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSksdGhpcy5faWNvbnNldD8odGhpcy5faWNvbnNldC5hcHBseUljb24odGhpcyx0aGlzLl9pY29uTmFtZSx0aGlzLnRoZW1lKSx0aGlzLnVubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSk6dGhpcy5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKSk6KHRoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLHp0KHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSk7WXQoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBnbyh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ucz10aGlzLl9jcmVhdGVJY29uTWFwKCksT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lKyI6IitlfSx0aGlzKX0sYXBwbHlJY29uOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVJY29uKGUpO3ZhciByPXRoaXMuX2Nsb25lSWNvbih0LHRoaXMucnRsTWlycm9yaW5nJiZ0aGlzLl90YXJnZXRJc1JUTChlKSk7aWYocil7dmFyIG49enQoZS5yb290fHxlKTtyZXR1cm4gbi5pbnNlcnRCZWZvcmUocixuLmNoaWxkTm9kZXNbMF0pLGUuX3N2Z0ljb249cn1yZXR1cm4gbnVsbH0scmVtb3ZlSWNvbjpmdW5jdGlvbihlKXtlLl9zdmdJY29uJiYoenQoZS5yb290fHxlKS5yZW1vdmVDaGlsZChlLl9zdmdJY29uKSxlLl9zdmdJY29uPW51bGwpfSxfdGFyZ2V0SXNSVEw6ZnVuY3Rpb24oZSl7aWYodGhpcy5fX3RhcmdldElzUlRMPT1udWxsKWlmKHRoaXMudXNlR2xvYmFsUnRsQXR0cmlidXRlKXt2YXIgdD1kb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGlyIik/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fX3RhcmdldElzUlRMPXQuZ2V0QXR0cmlidXRlKCJkaXIiKT09PSJydGwifWVsc2UgZSYmZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYoZT1lLmhvc3QpLHRoaXMuX190YXJnZXRJc1JUTD1lJiZ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5kaXJlY3Rpb249PT0icnRsIjtyZXR1cm4gdGhpcy5fX3RhcmdldElzUlRMfSxfbmFtZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhLnZhbHVlPW51bGwsdGhpcy5fbWV0YS5rZXk9dGhpcy5uYW1lLHRoaXMuX21ldGEudmFsdWU9dGhpcyx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KX0sX2NyZWF0ZUljb25NYXA6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaChmdW5jdGlvbih0KXtlW3QuaWRdPXR9KSxlfSxfY2xvbmVJY29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCksdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW2VdLHRoaXMuc2l6ZSx0KX0sX3ByZXBhcmVTdmdDbG9uZTpmdW5jdGlvbihlLHQscil7aWYoZSl7dmFyIG49ZS5jbG9uZU5vZGUoITApLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpLG89bi5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKXx8IjAgMCAiK3QrIiAiK3QsYT0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7cmV0dXJuIHImJm4uaGFzQXR0cmlidXRlKCJtaXJyb3ItaW4tcnRsIikmJihhKz0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyOyIpLGkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixvKSxpLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxpLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpLnN0eWxlLmNzc1RleHQ9YSxpLmFwcGVuZENoaWxkKG4pLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSxpfXJldHVybiBudWxsfX0pO3ZhciB5YmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpbWFnZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYWRkLWEtcGhvdG8iPjxwYXRoIGQ9Ik0zIDRWMWgydjNoM3YySDV2M0gzVjZIMFY0aDN6bTMgNlY3aDNWNGg3bDEuODMgMkgyMWMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMlYxMGgzem03IDljMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTUtNSAyLjI0LTUgNSAyLjI0IDUgNSA1em0tMy4yLTVjMCAxLjc3IDEuNDMgMy4yIDMuMiAzLjJzMy4yLTEuNDMgMy4yLTMuMi0xLjQzLTMuMi0zLjItMy4yLTMuMiAxLjQzLTMuMiAzLjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLXRvLXBob3RvcyI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGp1c3QiPjxwYXRoIGQ9Ik0xMiAyQzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwIDEwLTQuNDkgMTAtMTBTMTcuNTEgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMy04YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Npc3RhbnQiPjxwYXRoIGQ9Ik0xOSAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUuMTIgMTAuODhMMTIgMTdsLTEuODgtNC4xMkw2IDExbDQuMTItMS44OEwxMiA1bDEuODggNC4xMkwxOCAxMWwtNC4xMiAxLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lzdGFudC1waG90byI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXVkaW90cmFjayI+PHBhdGggZD0iTTEyIDN2OS4yOGMtLjQ3LS4xNy0uOTctLjI4LTEuNS0uMjhDOC4wMSAxMiA2IDE0LjAxIDYgMTYuNVM4LjAxIDIxIDEwLjUgMjFjMi4zMSAwIDQuMi0xLjc1IDQuNDUtNEgxNVY2aDRWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLWNpcmN1bGFyIj48cGF0aCBkPSJNMTAgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXpNNyA5LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0zIDdjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tMy0zYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMy02Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTQgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLTEuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTMgNmMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtNGMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0yLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtMy41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1saW5lYXIiPjxwYXRoIGQ9Ik01IDE3LjVjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjUuNjcgMS41IDEuNSAxLjV6TTkgMTNjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6TTMgMjFoMTh2LTJIM3Yyek01IDkuNWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTNS44MyA2LjUgNSA2LjUgMy41IDcuMTcgMy41IDggNC4xNyA5LjUgNSA5LjV6bTAgNGMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNS42NyAxLjUgMS41IDEuNXpNOSAxN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem04LS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMyAzdjJoMThWM0gzem0xNCA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0wIDRjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMyA5Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLW9mZiI+PHBhdGggZD0iTTE0IDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLS4yIDQuNDhsLjIuMDJjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjVsLjAyLjJjLjA5LjY3LjYxIDEuMTkgMS4yOCAxLjI4ek0xNCAzLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0tNCAwYy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMTEgN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptOCA4Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLTQgMTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTIuNSA1LjI3bDMuNzggMy43OEw2IDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xYzAtLjEtLjAzLS4xOS0uMDYtLjI4bDIuODEgMi44MWMtLjcxLjExLTEuMjUuNzMtMS4yNSAxLjQ3IDAgLjgzLjY3IDEuNSAxLjUgMS41Ljc0IDAgMS4zNi0uNTQgMS40Ny0xLjI1bDIuODEgMi44MWMtLjA5LS4wMy0uMTgtLjA2LS4yOC0uMDYtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTFjMC0uMS0uMDMtLjE5LS4wNi0uMjhsMy43OCAzLjc4TDIwIDIwLjIzIDMuNzcgNCAyLjUgNS4yN3pNMTAgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMTEtMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiAxM2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xek0zIDkuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTcgMTFjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bS0zLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1vbiI+PHBhdGggZD0iTTYgMTNjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtOGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0tMyAuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0xNSA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xNCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtMy41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptLTExIDEwYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptNyA3Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC0xN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA1LjVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em04IC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLThjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC00Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTMgOC41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMTQgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCAzLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tNC0xMmMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTAgOC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTQtNC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC00Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIj48L2NpcmNsZT48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTIiPjxwYXRoIGQ9Ik0xMCAyYy0xLjgyIDAtMy41My41LTUgMS4zNUM3Ljk5IDUuMDggMTAgOC4zIDEwIDEycy0yLjAxIDYuOTItNSA4LjY1QzYuNDcgMjEuNSA4LjE4IDIyIDEwIDIyYzUuNTIgMCAxMC00LjQ4IDEwLTEwUzE1LjUyIDIgMTAgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTMiPjxwYXRoIGQ9Ik05IDJjLTEuMDUgMC0yLjA1LjE2LTMgLjQ2IDQuMDYgMS4yNyA3IDUuMDYgNyA5LjU0IDAgNC40OC0yLjk0IDguMjctNyA5LjU0Ljk1LjMgMS45NS40NiAzIC40NiA1LjUyIDAgMTAtNC40OCAxMC0xMFMxNC41MiAyIDkgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTQiPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtLjg5IDAtMS43NC0uMi0yLjUtLjU1QzExLjU2IDE2LjUgMTMgMTQuNDIgMTMgMTJzLTEuNDQtNC41LTMuNS01LjQ1QzEwLjI2IDYuMiAxMS4xMSA2IDEyIDZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy01Ij48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTYiPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTciPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6bTAtMTBjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyb2tlbi1pbWFnZSI+PHBhdGggZD0iTTIxIDV2Ni41OWwtMy0zLjAxLTQgNC4wMS00LTQtNCA0LTMtMy4wMVY1YzAtMS4xLjktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ6bS0zIDYuNDJsMyAzLjAxVjE5YzAgMS4xLS45IDItMiAySDVjLTEuMSAwLTItLjktMi0ydi02LjU4bDMgMi45OSA0LTQgNCA0IDQtMy45OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicnVzaCI+PHBhdGggZD0iTTcgMTRjLTEuNjYgMC0zIDEuMzQtMyAzIDAgMS4zMS0xLjE2IDItMiAyIC45MiAxLjIyIDIuNDkgMiA0IDIgMi4yMSAwIDQtMS43OSA0LTQgMC0xLjY2LTEuMzQtMy0zLTN6bTEzLjcxLTkuMzdsLTEuMzQtMS4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMOSAxMi4yNSAxMS43NSAxNWw4Ljk2LTguOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJidXJzdC1tb2RlIj48cGF0aCBkPSJNMSA1aDJ2MTRIMXptNCAwaDJ2MTRINXptMTcgMEgxMGMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXpNMTEgMTdsMi41LTMuMTVMMTUuMjkgMTZsMi41LTMuMjJMMjEgMTdIMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhIj48cGF0aCBkPSJNOS40IDEwLjVsNC43Ny04LjI2QzEzLjQ3IDIuMDkgMTIuNzUgMiAxMiAyYy0yLjQgMC00LjYuODUtNi4zMiAyLjI1bDMuNjYgNi4zNS4wNi0uMXpNMjEuNTQgOWMtLjkyLTIuOTItMy4xNS01LjI2LTYtNi4zNEwxMS44OCA5aDkuNjZ6bS4yNiAxaC03LjQ5bC4yOS41IDQuNzYgOC4yNUMyMSAxNi45NyAyMiAxNC42MSAyMiAxMmMwLS42OS0uMDctMS4zNS0uMi0yek04LjU0IDEybC0zLjktNi43NUMzLjAxIDcuMDMgMiA5LjM5IDIgMTJjMCAuNjkuMDcgMS4zNS4yIDJoNy40OWwtMS4xNS0yem0tNi4wOCAzYy45MiAyLjkyIDMuMTUgNS4yNiA2IDYuMzRMMTIuMTIgMTVIMi40NnptMTEuMjcgMGwtMy45IDYuNzZjLjcuMTUgMS40Mi4yNCAyLjE3LjI0IDIuNCAwIDQuNi0uODUgNi4zMi0yLjI1bC0zLjY2LTYuMzUtLjkzIDEuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtYWx0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDJMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAySDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1mcm9udCI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01ek0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0xLjk5LjktMS45OSAyUzEwLjkgOCAxMiA4em01LThIN0M1LjkgMCA1IC45IDUgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMi0yLTJ6TTcgMmgxMHYxMC41YzAtMS42Ny0zLjMzLTIuNS01LTIuNXMtNSAuODMtNSAyLjVWMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcmVhciI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01em0zLTIwSDdDNS45IDAgNSAuOSA1IDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yem0tNSA2Yy0xLjExIDAtMi0uOS0yLTJzLjg5LTIgMS45OS0yIDIgLjkgMiAyQzE0IDUuMSAxMy4xIDYgMTIgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcm9sbCI+PHBhdGggZD0iTTE0IDVjMC0xLjEtLjktMi0yLTJoLTFWMmMwLS41NS0uNDUtMS0xLTFINmMtLjU1IDAtMSAuNDUtMSAxdjFINGMtMS4xIDAtMiAuOS0yIDJ2MTVjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yaDhWNWgtOHptLTIgMTNoLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6bTQgOWgtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnptNCA5aC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy1zdHJvbmciPjxwYXRoIGQ9Ik0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptLTcgN0gzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy13ZWFrIj48cGF0aCBkPSJNNSAxNUgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0ek0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xsZWN0aW9ucyI+PHBhdGggZD0iTTIyIDE2VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMnptLTExLTRsMi4wMyAyLjcxTDE2IDExbDQgNUg4bDMtNHpNMiA2djE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2SDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sbGVjdGlvbnMtYm9va21hcmsiPjxwYXRoIGQ9Ik00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTYtNEg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTBsLTIuNS0xLjVMMTUgMTJWNGg1djh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sb3ItbGVucyI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xvcml6ZSI+PHBhdGggZD0iTTIwLjcxIDUuNjNsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTMuMTIgMy4xMi0xLjkzLTEuOTEtMS40MSAxLjQxIDEuNDIgMS40MkwzIDE2LjI1VjIxaDQuNzVsOC45Mi04LjkyIDEuNDIgMS40MiAxLjQxLTEuNDEtMS45Mi0xLjkyIDMuMTItMy4xMmMuNC0uNC40LTEuMDMuMDEtMS40MnpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlIj48cGF0aCBkPSJNMTAgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDV2MmgyVjFoLTJ2MnptMCAxNUg1bDUtNnY2em05LTE1aC01djJoNXYxM2wtNS02djloNWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRyb2wtcG9pbnQiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMCAxMC00LjQ5IDEwLTEwUzE3LjUxIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udHJvbC1wb2ludC1kdXBsaWNhdGUiPjxwYXRoIGQ9Ik0xNiA4aC0ydjNoLTN2MmgzdjNoMnYtM2gzdi0yaC0zek0yIDEyYzAtMi43OSAxLjY0LTUuMiA0LjAxLTYuMzJWMy41MkMyLjUyIDQuNzYgMCA4LjA5IDAgMTJzMi41MiA3LjI0IDYuMDEgOC40OHYtMi4xNkMzLjY0IDE3LjIgMiAxNC43OSAyIDEyem0xMy05Yy00Ljk2IDAtOSA0LjA0LTkgOXM0LjA0IDkgOSA5IDktNC4wNCA5LTktNC4wNC05LTktOXptMCAxNmMtMy44NiAwLTctMy4xNC03LTdzMy4xNC03IDctNyA3IDMuMTQgNyA3LTMuMTQgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcCI+PHBhdGggZD0iTTE3IDE1aDJWN2MwLTEuMS0uOS0yLTItMkg5djJoOHY4ek03IDE3VjFINXY0SDF2Mmg0djEwYzAgMS4xLjkgMiAyIDJoMTB2NGgydi00aDR2LTJIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTE2LTkiPjxwYXRoIGQ9Ik0xOSA2SDVjLTEuMSAwLTIgLjktMiAydjhjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEwSDVWOGgxNHY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtMy0yIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINVY2aDE0djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNS00Ij48cGF0aCBkPSJNMTkgNUg1Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTJINVY3aDE0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNy01Ij48cGF0aCBkPSJNMTkgN0g1Yy0xLjEgMC0yIC45LTIgMnY2YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMnptMCA4SDVWOWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZGluIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZnJlZSI+PHBhdGggZD0iTTMgNXY0aDJWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTIgMTBIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00em0xNCA0aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0em0wLTE2aC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWxhbmRzY2FwZSI+PHBhdGggZD0iTTE5IDVINWMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDEySDVWN2gxNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLW9yaWdpbmFsIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0em0tNS4wNC02LjcxbC0yLjc1IDMuNTQtMS45Ni0yLjM2TDYuNSAxN2gxMWwtMy41NC00LjcxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg3VjVoMTB2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1yb3RhdGUiPjxwYXRoIGQ9Ik03LjQ3IDIxLjQ5QzQuMiAxOS45MyAxLjg2IDE2Ljc2IDEuNSAxM0gwYy41MSA2LjE2IDUuNjYgMTEgMTEuOTUgMTEgLjIzIDAgLjQ0LS4wMi42Ni0uMDNMOC44IDIwLjE1bC0xLjMzIDEuMzR6TTEyLjA1IDBjLS4yMyAwLS40NC4wMi0uNjYuMDRsMy44MSAzLjgxIDEuMzMtMS4zM0MxOS44IDQuMDcgMjIuMTQgNy4yNCAyMi41IDExSDI0Yy0uNTEtNi4xNi01LjY2LTExLTExLjk1LTExek0xNiAxNGgyVjhjMC0xLjExLS45LTItMi0yaC02djJoNnY2em0tOCAyVjRINnYySDR2MmgydjhjMCAxLjEuODkgMiAyIDJoOHYyaDJ2LTJoMnYtMkg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atc3F1YXJlIj48cGF0aCBkPSJNMTggNEg2Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINlY2aDEydjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlaGF6ZSI+PHBhdGggZD0iTTIgMTUuNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGV0YWlscyI+PHBhdGggZD0iTTMgNGw5IDE2IDktMTZIM3ptMy4zOCAyaDExLjI1TDEyIDE2IDYuMzggNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlZGl0Ij48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlIj48cGF0aCBkPSJNMTUgMTd2Mmgydi0yaDJ2LTJoLTJ2LTJoLTJ2MmgtMnYyaDJ6bTUtMTVINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek01IDVoNnYySDVWNXptMTUgMTVINEwyMCA0djE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0xIj48cGF0aCBkPSJNNCAxMXYyaDh2LTJINHptMTUgN2gtMlY3LjM4TDE0IDguNFY2LjdMMTguNyA1aC4zdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0yIj48cGF0aCBkPSJNMTUuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3cy4xOS0uNzkuMTktMS4xOGMwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIxdi0xLjcxaC01Ljk1ek0yIDExdjJoOHYtMkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXBsdXMtMSI+PHBhdGggZD0iTTEwIDdIOHY0SDR2Mmg0djRoMnYtNGg0di0yaC00Vjd6bTEwIDExaC0yVjcuMzhMMTUgOC40VjYuN0wxOS43IDVoLjN2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtcGx1cy0yIj48cGF0aCBkPSJNMTYuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3LjEzLS4zOS4xOS0uNzkuMTktMS4xOCAwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIydi0xLjcxaC01Ljk1ek04IDdINnY0SDJ2Mmg0djRoMnYtNGg0di0ySDhWN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS16ZXJvIj48cGF0aCBkPSJNMTYuMTQgMTIuNWMwIDEtLjEgMS44NS0uMyAyLjU1LS4yLjctLjQ4IDEuMjctLjgzIDEuNy0uMzYuNDQtLjc5Ljc1LTEuMy45NS0uNTEuMi0xLjA3LjMtMS43LjMtLjYyIDAtMS4xOC0uMS0xLjY5LS4zLS41MS0uMi0uOTUtLjUxLTEuMzEtLjk1LS4zNi0uNDQtLjY1LTEuMDEtLjg1LTEuNy0uMi0uNy0uMy0xLjU1LS4zLTIuNTV2LTIuMDRjMC0xIC4xLTEuODUuMy0yLjU1LjItLjcuNDgtMS4yNi44NC0xLjY5LjM2LS40My44LS43NCAxLjMxLS45M0MxMC44MSA1LjEgMTEuMzggNSAxMiA1Yy42MyAwIDEuMTkuMSAxLjcuMjkuNTEuMTkuOTUuNSAxLjMxLjkzLjM2LjQzLjY0Ljk5Ljg0IDEuNjkuMi43LjMgMS41NC4zIDIuNTV2Mi4wNHptLTIuMTEtMi4zNmMwLS42NC0uMDUtMS4xOC0uMTMtMS42Mi0uMDktLjQ0LS4yMi0uNzktLjQtMS4wNi0uMTctLjI3LS4zOS0uNDYtLjY0LS41OC0uMjUtLjEzLS41NC0uMTktLjg2LS4xOS0uMzIgMC0uNjEuMDYtLjg2LjE4cy0uNDcuMzEtLjY0LjU4Yy0uMTcuMjctLjMxLjYyLS40IDEuMDZzLS4xMy45OC0uMTMgMS42MnYyLjY3YzAgLjY0LjA1IDEuMTguMTQgMS42Mi4wOS40NS4yMy44MS40IDEuMDlzLjM5LjQ4LjY0LjYxLjU0LjE5Ljg3LjE5Yy4zMyAwIC42Mi0uMDYuODctLjE5cy40Ni0uMzMuNjMtLjYxYy4xNy0uMjguMy0uNjQuMzktMS4wOS4wOS0uNDUuMTMtLjk5LjEzLTEuNjJ2LTIuNjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyIj48cGF0aCBkPSJNMTUuOTYgMTAuMjlsLTIuNzUgMy41NC0xLjk2LTIuMzZMOC41IDE1aDExbC0zLjU0LTQuNzF6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTEiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgMTBoMlY1aC00djJoMnY4em03LTE0SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTIiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tNC00aC00di0yaDJjMS4xIDAgMi0uODkgMi0yVjdjMC0xLjExLS45LTItMi0yaC00djJoNHYyaC0yYy0xLjEgMC0yIC44OS0yIDJ2NGg2di0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0zIj48cGF0aCBkPSJNMjEgMUg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTQgOHYtMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNS44MyAwIDEuNS0uNjcgMS41LTEuNVY3YzAtMS4xMS0uOS0yLTItMmgtNHYyaDR2MmgtMnYyaDJ2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci00Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTEyIDEwaDJWNWgtMnY0aC0yVjVoLTJ2Nmg0djR6bTYtMTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNSI+PHBhdGggZD0iTTIxIDFIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE0IDh2LTJjMC0xLjExLS45LTItMi0yaC0yVjdoNFY1aC02djZoNHYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTYiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0yYzAtMS4xMS0uOS0yLTItMmgtMlY3aDRWNWgtNGMtMS4xIDAtMiAuODktMiAydjZjMCAxLjExLjkgMiAyIDJ6bTAtNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTciPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0ybDQtOFY1aC02djJoNGwtNCA4aDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTgiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0xLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41LjgzIDAgMS41LS42NyAxLjUtMS41VjdjMC0xLjExLS45LTItMi0yaC0yYy0xLjEgMC0yIC44OS0yIDJ2MS41YzAgLjgzLjY3IDEuNSAxLjUgMS41LS44MyAwLTEuNS42Ny0xLjUgMS41VjEzYzAgMS4xMS45IDIgMiAyem0wLThoMnYyaC0yVjd6bTAgNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTkiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0xNSA1aC0yYy0xLjEgMC0yIC44OS0yIDJ2MmMwIDEuMTEuOSAyIDIgMmgydjJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMlY3YzAtMS4xMS0uOS0yLTItMnptMCA0aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci05LXBsdXMiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgN1Y4YzAtMS4xMS0uOS0yLTItMmgtMWMtMS4xIDAtMiAuODktMiAydjFjMCAxLjExLjkgMiAyIDJoMXYxSDl2MmgzYzEuMSAwIDItLjg5IDItMnptLTMtM1Y4aDF2MWgtMXptMTAtOEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgOGgtMlY3aC0ydjJoLTJ2MmgydjJoMnYtMmgydjZIN1YzaDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWItYW5kLXciPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmwtNy04djhINWw3LThWNWg3djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1jZW50ZXItZm9jdXMiPjxwYXRoIGQ9Ik01IDE1SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6TTEyIDljLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1kcmFtYSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYxIDUuNjQgNS4zNiA4LjA0IDIuMzUgOC4zNiAwIDEwLjkgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTkgMThINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0aDJjMC0yLjc2LTEuODYtNS4wOC00LjQtNS43OEM4LjYxIDYuODggMTAuMiA2IDEyIDZjMy4wMyAwIDUuNSAyLjQ3IDUuNSA1LjV2LjVIMTljMS42NSAwIDMgMS4zNSAzIDNzLTEuMzUgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWZyYW1lcyI+PHBhdGggZD0iTTIwIDRoLTRsLTQtNC00IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDRWNmg0LjUybDMuNTItMy41TDE1LjUyIDZIMjB2MTR6TTE4IDhINnYxMGgxMiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1oZHIiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLW5vbmUiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci10aWx0LXNoaWZ0Ij48cGF0aCBkPSJNMTEgNC4wN1YyLjA1Yy0yLjAxLjItMy44NCAxLTUuMzIgMi4yMUw3LjEgNS42OWMxLjExLS44NiAyLjQ0LTEuNDQgMy45LTEuNjJ6bTcuMzIuMTlDMTYuODQgMy4wNSAxNS4wMSAyLjI1IDEzIDIuMDV2Mi4wMmMxLjQ2LjE4IDIuNzkuNzYgMy45IDEuNjJsMS40Mi0xLjQzek0xOS45MyAxMWgyLjAyYy0uMi0yLjAxLTEtMy44NC0yLjIxLTUuMzJMMTguMzEgNy4xYy44NiAxLjExIDEuNDQgMi40NCAxLjYyIDMuOXpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6TTE1IDEyYzAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzIDEuMzQgMyAzIDMgMy0xLjM0IDMtM3ptMy4zMSA0LjlsMS40MyAxLjQzYzEuMjEtMS40OCAyLjAxLTMuMzIgMi4yMS01LjMyaC0yLjAyYy0uMTggMS40NS0uNzYgMi43OC0xLjYyIDMuODl6TTEzIDE5LjkzdjIuMDJjMi4wMS0uMiAzLjg0LTEgNS4zMi0yLjIxbC0xLjQzLTEuNDNjLTEuMS44Ni0yLjQzIDEuNDQtMy44OSAxLjYyem0tNy4zMi0uMTlDNy4xNiAyMC45NSA5IDIxLjc1IDExIDIxLjk1di0yLjAyYy0xLjQ2LS4xOC0yLjc5LS43Ni0zLjktMS42MmwtMS40MiAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci12aW50YWdlIj48cGF0aCBkPSJNMTguNyAxMi40Yy0uMjgtLjE2LS41Ny0uMjktLjg2LS40LjI5LS4xMS41OC0uMjQuODYtLjQgMS45Mi0xLjExIDIuOTktMy4xMiAzLTUuMTktMS43OS0xLjAzLTQuMDctMS4xMS02IDAtLjI4LjE2LS41NC4zNS0uNzguNTQuMDUtLjMxLjA4LS42My4wOC0uOTUgMC0yLjIyLTEuMjEtNC4xNS0zLTUuMTlDMTAuMjEgMS44NSA5IDMuNzggOSA2YzAgLjMyLjAzLjY0LjA4Ljk1LS4yNC0uMi0uNS0uMzktLjc4LS41NS0xLjkyLTEuMTEtNC4yLTEuMDMtNiAwIDAgMi4wNyAxLjA3IDQuMDggMyA1LjE5LjI4LjE2LjU3LjI5Ljg2LjQtLjI5LjExLS41OC4yNC0uODYuNC0xLjkyIDEuMTEtMi45OSAzLjEyLTMgNS4xOSAxLjc5IDEuMDMgNC4wNyAxLjExIDYgMCAuMjgtLjE2LjU0LS4zNS43OC0uNTQtLjA1LjMyLS4wOC42NC0uMDguOTYgMCAyLjIyIDEuMjEgNC4xNSAzIDUuMTkgMS43OS0xLjA0IDMtMi45NyAzLTUuMTkgMC0uMzItLjAzLS42NC0uMDgtLjk1LjI0LjIuNS4zOC43OC41NCAxLjkyIDEuMTEgNC4yIDEuMDMgNiAwLS4wMS0yLjA3LTEuMDgtNC4wOC0zLTUuMTl6TTEyIDE2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFyZSI+PHBhdGggZD0iTTcgMTFIMXYyaDZ2LTJ6bTIuMTctMy4yNEw3LjA1IDUuNjQgNS42NCA3LjA1bDIuMTIgMi4xMiAxLjQxLTEuNDF6TTEzIDFoLTJ2NmgyVjF6bTUuMzYgNi4wNWwtMS40MS0xLjQxLTIuMTIgMi4xMiAxLjQxIDEuNDEgMi4xMi0yLjEyek0xNyAxMXYyaDZ2LTJoLTZ6bS01LTJjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zem0yLjgzIDcuMjRsMi4xMiAyLjEyIDEuNDEtMS40MS0yLjEyLTIuMTItMS40MSAxLjQxem0tOS4xOS43MWwxLjQxIDEuNDEgMi4xMi0yLjEyLTEuNDEtMS40MS0yLjEyIDIuMTJ6TTExIDIzaDJ2LTZoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1hdXRvIj48cGF0aCBkPSJNMyAydjEyaDN2OWw3LTEySDlsNC05SDN6bTE2IDBoLTJsLTMuMiA5aDEuOWwuNy0yaDMuMmwuNyAyaDEuOUwxOSAyem0tMi4xNSA1LjY1TDE4IDRsMS4xNSAzLjY1aC0yLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtb2ZmIj48cGF0aCBkPSJNMy4yNyAzTDIgNC4yN2w1IDVWMTNoM3Y5bDMuNTgtNi4xNEwxNy43MyAyMCAxOSAxOC43MyAzLjI3IDN6TTE3IDEwaC00bDQtOEg3djIuMThsOC40NiA4LjQ2TDE3IDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLW9uIj48cGF0aCBkPSJNNyAydjExaDN2OWw3LTEyaC00bDQtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00LTEyaDJWN2gtMnYyek0zIDV2MTRjMCAxLjEuOSAyIDIgMmg0di0ySDVWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTE2LTJ2MmgyYzAtMS4xLS45LTItMi0yem0tOCAyMGgyVjFoLTJ2MjJ6bTgtNmgydi0yaC0ydjJ6TTE1IDVoMlYzaC0ydjJ6bTQgOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRpZW50Ij48cGF0aCBkPSJNMTEgOWgydjJoLTJ6bS0yIDJoMnYySDl6bTQgMGgydjJoLTJ6bTItMmgydjJoLTJ6TTcgOWgydjJIN3ptMTItNkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMThIN3YtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTItN2gtMnYyaDJ2MmgtMnYtMmgtMnYyaC0ydi0yaC0ydjJIOXYtMkg3djJINXYtMmgydi0ySDVWNWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWluIj48cGF0aCBkPSJNMTAgMTJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yek02IDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMi04YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptLTQgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmlkLW9mZiI+PHBhdGggZD0iTTggNHYxLjQ1bDIgMlY0aDR2NGgtMy40NWwyIDJIMTR2MS40NWwyIDJWMTBoNHY0aC0zLjQ1bDIgMkgyMHYxLjQ1bDIgMlY0YzAtMS4xLS45LTItMi0ySDQuNTVsMiAySDh6bTggMGg0djRoLTRWNHpNMS4yNyAxLjI3TDAgMi41NWwyIDJWMjBjMCAxLjEuOSAyIDIgMmgxNS40NmwyIDIgMS4yNy0xLjI3TDEuMjcgMS4yN3pNMTAgMTIuNTVMMTEuNDUgMTRIMTB2LTEuNDV6bS02LTZMNS40NSA4SDRWNi41NXpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoMy40NWwuNTUuNTVWMTR6bTYgNmgtNHYtNGgzLjQ1bC41NS41NFYyMHptMiAwdi0xLjQ2TDE3LjQ2IDIwSDE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyaWQtb24iPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoNHY0em0wLTZINFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb2ZmIj48cGF0aCBkPSJNMTcuNSAxNXYtMmgxLjFsLjkgMkgyMWwtLjktMi4xYy41LS4yLjktLjguOS0xLjR2LTFjMC0uOC0uNy0xLjUtMS41LTEuNUgxNnY0LjlsMS4xIDEuMWguNHptMC00LjVoMnYxaC0ydi0xem0tNC41IDB2LjRsMS41IDEuNXYtMS45YzAtLjgtLjctMS41LTEuNS0xLjVoLTEuOWwxLjUgMS41aC40em0tMy41LTFsLTctNy0xLjEgMUw2LjkgOWgtLjR2MmgtMlY5SDN2NmgxLjV2LTIuNWgyVjE1SDh2LTQuOWwxLjUgMS41VjE1aDMuNGw3LjYgNy42IDEuMS0xLjEtMTIuMS0xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb24iPjxwYXRoIGQ9Ik0yMSAxMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjVIMTZ2NmgxLjV2LTJoMS4xbC45IDJIMjFsLS45LTIuMWMuNS0uMy45LS44LjktMS40em0tMS41IDBoLTJ2LTFoMnYxem0tMTMtLjVoLTJWOUgzdjZoMS41di0yLjVoMlYxNUg4VjlINi41djJ6TTEzIDlIOS41djZIMTNjLjggMCAxLjUtLjcgMS41LTEuNXYtM2MwLS44LS43LTEuNS0xLjUtMS41em0wIDQuNWgtMnYtM2gydjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLXN0cm9uZyI+PHBhdGggZD0iTTE3IDZjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02ek01IDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci13ZWFrIj48cGF0aCBkPSJNNSA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMTItMmMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bTAgMTBjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlYWxpbmciPjxwYXRoIGQ9Ik0xNy43MyAxMi4wMmwzLjk4LTMuOThjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtNC4zNC00LjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMy45OCAzLjk4TDggMi4yOUM3LjggMi4xIDcuNTUgMiA3LjI5IDJjLS4yNSAwLS41MS4xLS43LjI5TDIuMjUgNi42M2MtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWwzLjk4IDMuOThMMi4yNSAxNmMtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWw0LjM0IDQuMzRjLjM5LjM5IDEuMDIuMzkgMS40MSAwbDMuOTgtMy45OCAzLjk4IDMuOThjLjIuMi40NS4yOS43MS4yOS4yNiAwIC41MS0uMS43MS0uMjlsNC4zNC00LjM0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTMuOTktMy45OHpNMTIgOWMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tNC43MSAxLjk2TDMuNjYgNy4zNGwzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3pNMTAgMTNjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptMiAyYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bTItNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yLjY2IDkuMzRsLTMuNjMtMy42MiAzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbWFnZSI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1hZ2UtYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTYgMTBoLTJ2Mmgydi0yem0wIDRoLTJ2Mmgydi0yem0tOC00SDZ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem04LTZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDRWNmgxNnYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpc28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNNS41IDcuNWgydi0ySDl2MmgyVjlIOXYySDcuNVY5aC0yVjcuNXpNMTkgMTlINUwxOSA1djE0em0tMi0ydi0xLjVoLTVWMTdoNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5kc2NhcGUiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVhay1hZGQiPjxwYXRoIGQ9Ik02IDNIM3YzYzEuNjYgMCAzLTEuMzQgMy0zem04IDBoLTJjMCA0Ljk3LTQuMDMgOS05IDl2MmM2LjA4IDAgMTEtNC45MyAxMS0xMXptLTQgMEg4YzAgMi43Ni0yLjI0IDUtNSA1djJjMy44NyAwIDctMy4xMyA3LTd6bTAgMThoMmMwLTQuOTcgNC4wMy05IDktOXYtMmMtNi4wNyAwLTExIDQuOTMtMTEgMTF6bTggMGgzdi0zYy0xLjY2IDAtMyAxLjM0LTMgM3ptLTQgMGgyYzAtMi43NiAyLjI0LTUgNS01di0yYy0zLjg3IDAtNyAzLjEzLTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsZWFrLXJlbW92ZSI+PHBhdGggZD0iTTEwIDNIOGMwIC4zNy0uMDQuNzItLjEyIDEuMDZsMS41OSAxLjU5QzkuODEgNC44NCAxMCAzLjk0IDEwIDN6TTMgNC4yN2wyLjg0IDIuODRDNS4wMyA3LjY3IDQuMDYgOCAzIDh2MmMxLjYxIDAgMy4wOS0uNTUgNC4yNy0xLjQ2TDguNyA5Ljk3QzcuMTQgMTEuMjQgNS4xNiAxMiAzIDEydjJjMi43MSAwIDUuMTktLjk5IDcuMTEtMi42MmwyLjUgMi41QzEwLjk5IDE1LjgxIDEwIDE4LjI5IDEwIDIxaDJjMC0yLjE2Ljc2LTQuMTQgMi4wMy01LjY5bDEuNDMgMS40M0MxNC41NSAxNy45MSAxNCAxOS4zOSAxNCAyMWgyYzAtMS4wNi4zMy0yLjAzLjg5LTIuODRMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzIDMgNC4yN3pNMTQgM2gtMmMwIDEuNS0uMzcgMi45MS0xLjAyIDQuMTZsMS40NiAxLjQ2QzEzLjQyIDYuOTggMTQgNS4wNiAxNCAzem01Ljk0IDEzLjEyYy4zNC0uMDguNjktLjEyIDEuMDYtLjEydi0yYy0uOTQgMC0xLjg0LjE5LTIuNjYuNTJsMS42IDEuNnptLTQuNTYtNC41NmwxLjQ2IDEuNDZDMTguMDkgMTIuMzcgMTkuNSAxMiAyMSAxMnYtMmMtMi4wNiAwLTMuOTguNTgtNS42MiAxLjU2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlbnMiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmtlZC1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTQiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTE2IDMuMzNjMi41OCAwIDQuNjcgMi4wOSA0LjY3IDQuNjdIMjJjMC0zLjMxLTIuNjktNi02LTZ2MS4zM00xNiA2YzEuMTEgMCAyIC44OSAyIDJoMS4zM2MwLTEuODQtMS40OS0zLjMzLTMuMzMtMy4zM1Y2Ij48L3BhdGg+PHBhdGggZD0iTTE3IDljMC0xLjExLS44OS0yLTItMlY0SDlMNy4xNyA2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOWgtNXptLTUgMTBjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzIj48cGF0aCBkPSJNMTIgMTBjLTMuODYgMC03IDMuMTQtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ni0zLjE0LTctNy03em0wLTRDNS45MyA2IDEgMTAuOTMgMSAxN2gyYzAtNC45NiA0LjA0LTkgOS05czkgNC4wNCA5IDloMmMwLTYuMDctNC45My0xMS0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy0zIj48cGF0aCBkPSJNMTkuMDEgM2gtMTRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNy41YzAgLjgzLS42NyAxLjUtMS41IDEuNS44MyAwIDEuNS42NyAxLjUgMS41VjE1YzAgMS4xMS0uOSAyLTIgMmgtNHYtMmg0di0yaC0ydi0yaDJWOWgtNFY3aDRjMS4xIDAgMiAuODkgMiAydjEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy00Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDE0aC0ydi00SDlWN2gydjRoMlY3aDJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoMmMxLjEgMCAyIC44OSAyIDJ2MmMwIDEuMTEtLjkgMi0yIDJIOXYtMmg0di0ySDlWN2g2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNiI+PHBhdGggZD0iTTExIDE1aDJ2LTJoLTJ2MnptOC0xMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDZoLTR2MmgyYzEuMSAwIDIgLjg5IDIgMnYyYzAgMS4xMS0uOSAyLTIgMmgtMmMtMS4xIDAtMi0uODktMi0yVjljMC0xLjExLjktMiAyLTJoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLW9uZSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNSAxNGgtMlY5aC0yVjdoNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy10d28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgOGMwIDEuMTEtLjkgMi0yIDJoLTJ2Mmg0djJIOXYtNGMwLTEuMTEuOS0yIDItMmgyVjlIOVY3aDRjMS4xIDAgMiAuODkgMiAydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG91cGUiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMGg4YzEuMSAwIDItLjkgMi0ydi04YzAtNS41MS00LjQ5LTEwLTEwLTEwem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb25vY2hyb21lLXBob3RvcyI+PHBhdGggZD0iTTIwIDVoLTMuMkwxNSAzSDlMNy4yIDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE0aC04di0xYy0yLjggMC01LTIuMi01LTVzMi4yLTUgNS01VjdoOHYxMnptLTMtNmMwLTIuOC0yLjItNS01LTV2MS44YzEuOCAwIDMuMiAxLjQgMy4yIDMuMnMtMS40IDMuMi0zLjIgMy4yVjE4YzIuOCAwIDUtMi4yIDUtNXptLTguMiAwYzAgMS44IDEuNCAzLjIgMy4yIDMuMlY5LjhjLTEuOCAwLTMuMiAxLjQtMy4yIDMuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1jcmVhdGlvbiI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1maWx0ZXIiPjxwYXRoIGQ9Ik0xOCA0bDIgM2gtM2wtMi0zaC0ybDIgM2gtM2wtMi0zSDhsMiAzSDdMNSA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRoLTR6bS02Ljc1IDExLjI1TDEwIDE4bC0xLjI1LTIuNzVMNiAxNGwyLjc1LTEuMjVMMTAgMTBsMS4yNSAyLjc1TDE0IDE0bC0yLjc1IDEuMjV6bTUuNjktMy4zMUwxNiAxNGwtLjk0LTIuMDZMMTMgMTFsMi4wNi0uOTRMMTYgOGwuOTQgMi4wNkwxOSAxMWwtMi4wNi45NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtdXNpYy1ub3RlIj48cGF0aCBkPSJNMTIgM3YxMC41NWMtLjU5LS4zNC0xLjI3LS41NS0yLS41NS0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRWN2g0VjNoLTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlIj48cGF0aCBkPSJNMTMgMTYuMTJjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NSAwLTMuODctMy4xMy03LTctN3MtNyAzLjEzLTcgN2MwIDMuNDcgMi41MiA2LjM0IDUuODMgNi44OVYyMEg1djJoMTR2LTJoLTZ2LTMuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlLXBlb3BsZSI+PHBhdGggZD0iTTIyLjE3IDkuMTdjMC0zLjg3LTMuMTMtNy03LTdzLTcgMy4xMy03IDdjMCAzLjQ3IDIuNTIgNi4zNCA1LjgzIDYuODlWMjBINnYtM2gxdi00YzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2NGgxdjVoMTZ2LTJoLTN2LTMuODhjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NXpNNC41IDExYy44MyAwIDEuNS0uNjcgMS41LTEuNVM1LjMzIDggNC41IDggMyA4LjY3IDMgOS41IDMuNjcgMTEgNC41IDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdmlnYXRlLWJlZm9yZSI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF2aWdhdGUtbmV4dCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbGV0dGUiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEiPjxwYXRoIGQ9Ik0yMyAxOFY2YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMi41bDIuNSAzLjAxTDE0LjUgMTFsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLWZpc2gtZXllIj48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtaG9yaXpvbnRhbCI+PHBhdGggZD0iTTIwIDYuNTR2MTAuOTFjLTIuNi0uNzctNS4yOC0xLjE2LTgtMS4xNi0yLjcyIDAtNS40LjM5LTggMS4xNlY2LjU0YzIuNi43NyA1LjI4IDEuMTYgOCAxLjE2IDIuNzIuMDEgNS40LS4zOCA4LTEuMTZNMjEuNDMgNGMtLjEgMC0uMi4wMi0uMzEuMDZDMTguMTggNS4xNiAxNS4wOSA1LjcgMTIgNS43Yy0zLjA5IDAtNi4xOC0uNTUtOS4xMi0xLjY0LS4xMS0uMDQtLjIyLS4wNi0uMzEtLjA2LS4zNCAwLS41Ny4yMy0uNTcuNjN2MTQuNzVjMCAuMzkuMjMuNjIuNTcuNjIuMSAwIC4yLS4wMi4zMS0uMDYgMi45NC0xLjEgNi4wMy0xLjY0IDkuMTItMS42NCAzLjA5IDAgNi4xOC41NSA5LjEyIDEuNjQuMTEuMDQuMjEuMDYuMzEuMDYuMzMgMCAuNTctLjIzLjU3LS42M1Y0LjYzYzAtLjQtLjI0LS42My0uNTctLjYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLXZlcnRpY2FsIj48cGF0aCBkPSJNMTkuOTQgMjEuMTJjLTEuMS0yLjk0LTEuNjQtNi4wMy0xLjY0LTkuMTIgMC0zLjA5LjU1LTYuMTggMS42NC05LjEyLjA0LS4xMS4wNi0uMjIuMDYtLjMxIDAtLjM0LS4yMy0uNTctLjYzLS41N0g0LjYzYy0uNCAwLS42My4yMy0uNjMuNTcgMCAuMS4wMi4yLjA2LjMxQzUuMTYgNS44MiA1LjcxIDguOTEgNS43MSAxMmMwIDMuMDktLjU1IDYuMTgtMS42NCA5LjEyLS4wNS4xMS0uMDcuMjItLjA3LjMxIDAgLjMzLjIzLjU3LjYzLjU3aDE0Ljc1Yy4zOSAwIC42My0uMjQuNjMtLjU3LS4wMS0uMS0uMDMtLjItLjA3LS4zMXpNNi41NCAyMGMuNzctMi42IDEuMTYtNS4yOCAxLjE2LTggMC0yLjcyLS4zOS01LjQtMS4xNi04aDEwLjkxYy0uNzcgMi42LTEuMTYgNS4yOC0xLjE2IDggMCAyLjcyLjM5IDUuNCAxLjE2IDhINi41NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS13aWRlLWFuZ2xlIj48cGF0aCBkPSJNMTIgNmMyLjQ1IDAgNC43MS4yIDcuMjkuNjQuNDcgMS43OC43MSAzLjU4LjcxIDUuMzYgMCAxLjc4LS4yNCAzLjU4LS43MSA1LjM2LTIuNTguNDQtNC44NC42NC03LjI5LjY0cy00LjcxLS4yLTcuMjktLjY0QzQuMjQgMTUuNTggNCAxMy43OCA0IDEyYzAtMS43OC4yNC0zLjU4LjcxLTUuMzZDNy4yOSA2LjIgOS41NSA2IDEyIDZtMC0yYy0yLjczIDAtNS4yMi4yNC03Ljk1LjcybC0uOTMuMTYtLjI1LjlDMi4yOSA3Ljg1IDIgOS45MyAyIDEycy4yOSA0LjE1Ljg3IDYuMjJsLjI1Ljg5LjkzLjE2YzIuNzMuNDkgNS4yMi43MyA3Ljk1LjczczUuMjItLjI0IDcuOTUtLjcybC45My0uMTYuMjUtLjg5Yy41OC0yLjA4Ljg3LTQuMTYuODctNi4yM3MtLjI5LTQuMTUtLjg3LTYuMjJsLS4yNS0uODktLjkzLS4xNkMxNy4yMiA0LjI0IDE0LjczIDQgMTIgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90byI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tYWxidW0iPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6bTAgMTVsMy0zLjg2IDIuMTQgMi41OCAzLTMuODZMMTggMTlINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMkw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDJIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tZmlsdGVyIj48cGF0aCBkPSJNMTkuMDIgMTB2OUg1VjVoOVYzSDUuMDJjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTloLTJ6TTE3IDEwbC45NC0yLjA2TDIwIDdsLTIuMDYtLjk0TDE3IDRsLS45NCAyLjA2TDE0IDdsMi4wNi45NHptLTMuNzUuNzVMMTIgOGwtMS4yNSAyLjc1TDggMTJsMi43NSAxLjI1TDEyIDE2bDEuMjUtMi43NUwxNiAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1saWJyYXJ5Ij48cGF0aCBkPSJNMjIgMTZWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yem0tMTEtNGwyLjAzIDIuNzFMMTYgMTFsNCA1SDhsMy00ek0yIDZ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1hY3R1YWwiPjxwYXRoIGQ9Ik0yMSAzSDNDMiAzIDEgNCAxIDV2MTRjMCAxLjEuOSAyIDIgMmgxOGMxIDAgMi0xIDItMlY1YzAtMS0xLTItMi0yek01IDE3bDMuNS00LjUgMi41IDMuMDFMMTQuNSAxMWw0LjUgNkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LWxhcmdlIj48cGF0aCBkPSJNMjEgMTVoMnYyaC0ydi0yem0wLTRoMnYyaC0ydi0yem0yIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTMgM2gydjJoLTJWM3ptOCA0aDJ2MmgtMlY3em0wLTR2MmgyYzAtMS0xLTItMi0yek0xIDdoMnYySDFWN3ptMTYtNGgydjJoLTJWM3ptMCAxNmgydjJoLTJ2LTJ6TTMgM0MyIDMgMSA0IDEgNWgyVjN6bTYgMGgydjJIOVYzek01IDNoMnYySDVWM3ptLTQgOHY4YzAgMS4xLjkgMiAyIDJoMTJWMTFIMXptMiA4bDIuNS0zLjIxIDEuNzkgMi4xNSAyLjUtMy4yMkwxMyAxOUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LXNtYWxsIj48cGF0aCBkPSJNMjMgMTVoLTJ2Mmgydi0yem0wLTRoLTJ2Mmgydi0yem0wIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTUgM2gtMnYyaDJWM3ptOCA0aC0ydjJoMlY3em0tMi00djJoMmMwLTEtMS0yLTItMnpNMyAyMWg4di02SDF2NGMwIDEuMS45IDIgMiAyek0zIDdIMXYyaDJWN3ptMTIgMTJoLTJ2Mmgydi0yem00LTE2aC0ydjJoMlYzem0wIDE2aC0ydjJoMnYtMnpNMyAzQzIgMyAxIDQgMSA1aDJWM3ptMCA4SDF2Mmgydi0yem04LThIOXYyaDJWM3pNNyAzSDV2MmgyVjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1hcy1wZGYiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTguNSA3LjVjMCAuODMtLjY3IDEuNS0xLjUgMS41SDl2Mkg3LjVWN0gxMGMuODMgMCAxLjUuNjcgMS41IDEuNXYxem01IDJjMCAuODMtLjY3IDEuNS0xLjUgMS41aC0yLjVWN0gxNWMuODMgMCAxLjUuNjcgMS41IDEuNXYzem00LTNIMTl2MWgxLjVWMTFIMTl2MmgtMS41VjdoM3YxLjV6TTkgOS41aDF2LTFIOXYxek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTAgNS41aDF2LTNoLTF2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3J0cmFpdCI+PHBhdGggZD0iTTEyIDEyLjI1YzEuMjQgMCAyLjI1LTEuMDEgMi4yNS0yLjI1UzEzLjI0IDcuNzUgMTIgNy43NSA5Ljc1IDguNzYgOS43NSAxMHMxLjAxIDIuMjUgMi4yNSAyLjI1em00LjUgNGMwLTEuNS0zLTIuMjUtNC41LTIuMjVzLTQuNS43NS00LjUgMi4yNVYxN2g5di0uNzV6TTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtcmVkLWV5ZSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtOTAtZGVncmVlcy1jY3ciPjxwYXRoIGQ9Ik03LjM0IDYuNDFMLjg2IDEyLjlsNi40OSA2LjQ4IDYuNDktNi40OC02LjUtNi40OXpNMy42OSAxMi45bDMuNjYtMy42NkwxMSAxMi45bC0zLjY2IDMuNjYtMy42NS0zLjY2em0xNS42Ny02LjI2QzE3LjYxIDQuODggMTUuMyA0IDEzIDRWLjc2TDguNzYgNSAxMyA5LjI0VjZjMS43OSAwIDMuNTguNjggNC45NSAyLjA1IDIuNzMgMi43MyAyLjczIDcuMTcgMCA5LjlDMTYuNTggMTkuMzIgMTQuNzkgMjAgMTMgMjBjLS45NyAwLTEuOTQtLjIxLTIuODQtLjYxbC0xLjQ5IDEuNDlDMTAuMDIgMjEuNjIgMTEuNTEgMjIgMTMgMjJjMi4zIDAgNC42MS0uODggNi4zNi0yLjY0IDMuNTItMy41MSAzLjUyLTkuMjEgMC0xMi43MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtbGVmdCI+PHBhdGggZD0iTTcuMTEgOC41M0w1LjcgNy4xMUM0LjggOC4yNyA0LjI0IDkuNjEgNC4wNyAxMWgyLjAyYy4xNC0uODcuNDktMS43MiAxLjAyLTIuNDd6TTYuMDkgMTNINC4wN2MuMTcgMS4zOS43MiAyLjczIDEuNjIgMy44OWwxLjQxLTEuNDJjLS41Mi0uNzUtLjg3LTEuNTktMS4wMS0yLjQ3em0xLjAxIDUuMzJjMS4xNi45IDIuNTEgMS40NCAzLjkgMS42MVYxNy45Yy0uODctLjE1LTEuNzEtLjQ5LTIuNDYtMS4wM0w3LjEgMTguMzJ6TTEzIDQuMDdWMUw4LjQ1IDUuNTUgMTMgMTBWNi4wOWMyLjg0LjQ4IDUgMi45NCA1IDUuOTFzLTIuMTYgNS40My01IDUuOTF2Mi4wMmMzLjk1LS40OSA3LTMuODUgNy03Ljkzcy0zLjA1LTcuNDQtNy03LjkzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS1yaWdodCI+PHBhdGggZD0iTTE1LjU1IDUuNTVMMTEgMXYzLjA3QzcuMDYgNC41NiA0IDcuOTIgNCAxMnMzLjA1IDcuNDQgNyA3Ljkzdi0yLjAyYy0yLjg0LS40OC01LTIuOTQtNS01LjkxczIuMTYtNS40MyA1LTUuOTFWMTBsNC41NS00LjQ1ek0xOS45MyAxMWMtLjE3LTEuMzktLjcyLTIuNzMtMS42Mi0zLjg5bC0xLjQyIDEuNDJjLjU0Ljc1Ljg4IDEuNiAxLjAyIDIuNDdoMi4wMnpNMTMgMTcuOXYyLjAyYzEuMzktLjE3IDIuNzQtLjcxIDMuOS0xLjYxbC0xLjQ0LTEuNDRjLS43NS41NC0xLjU5Ljg5LTIuNDYgMS4wM3ptMy44OS0yLjQybDEuNDIgMS40MWMuOS0xLjE2IDEuNDUtMi41IDEuNjItMy44OWgtMi4wMmMtLjE0Ljg3LS40OCAxLjcyLTEuMDIgMi40OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzbGlkZXNob3ciPjxwYXRoIGQ9Ik0xMCA4djhsNS00LTUtNHptOS01SDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RyYWlnaHRlbiI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTBIM1Y4aDJ2NGgyVjhoMnY0aDJWOGgydjRoMlY4aDJ2NGgyVjhoMnY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0eWxlIj48cGF0aCBkPSJNMi41MyAxOS42NWwxLjM0LjU2di05LjAzbC0yLjQzIDUuODZjLS40MSAxLjAyLjA4IDIuMTkgMS4wOSAyLjYxem0xOS41LTMuN0wxNy4wNyAzLjk4Yy0uMzEtLjc1LTEuMDQtMS4yMS0xLjgxLTEuMjMtLjI2IDAtLjUzLjA0LS43OS4xNUw3LjEgNS45NWMtLjc1LjMxLTEuMjEgMS4wMy0xLjIzIDEuOC0uMDEuMjcuMDQuNTQuMTUuOGw0Ljk2IDExLjk3Yy4zMS43NiAxLjA1IDEuMjIgMS44MyAxLjIzLjI2IDAgLjUyLS4wNS43Ny0uMTVsNy4zNi0zLjA1YzEuMDItLjQyIDEuNTEtMS41OSAxLjA5LTIuNnpNNy44OCA4Ljc1Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bS0yIDExYzAgMS4xLjkgMiAyIDJoMS40NWwtMy40NS04LjM0djYuMzR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dpdGNoLWNhbWVyYSI+PHBhdGggZD0iTTIwIDRoLTMuMTdMMTUgMkg5TDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS01IDExLjVWMTNIOXYyLjVMNS41IDEyIDkgOC41VjExaDZWOC41bDMuNSAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2l0Y2gtdmlkZW8iPjxwYXRoIGQ9Ik0xOCA5LjVWNmMwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDE0Yy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTNsLTQgNHptLTUgNlYxM0g3djIuNUwzLjUgMTIgNyA4LjVWMTFoNlY4LjVsMy41IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhZy1mYWNlcyI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptMy41LTljLjgzIDAgMS41LS42NyAxLjUtMS41UzE2LjMzIDggMTUuNSA4IDE0IDguNjcgMTQgOS41cy42NyAxLjUgMS41IDEuNXptLTcgMGMuODMgMCAxLjUtLjY3IDEuNS0xLjVTOS4zMyA4IDguNSA4IDcgOC42NyA3IDkuNSA3LjY3IDExIDguNSAxMXptMy41IDYuNWMyLjMzIDAgNC4zMS0xLjQ2IDUuMTEtMy41SDYuODljLjggMi4wNCAyLjc4IDMuNSA1LjExIDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0ZXh0dXJlIj48cGF0aCBkPSJNMTkuNTEgMy4wOEwzLjA4IDE5LjUxYy4wOS4zNC4yNy42NS41MS45LjI1LjI0LjU2LjQyLjkuNTFMMjAuOTMgNC40OWMtLjE5LS42OS0uNzMtMS4yMy0xLjQyLTEuNDF6TTExLjg4IDNMMyAxMS44OHYyLjgzTDE0LjcxIDNoLTIuODN6TTUgM2MtMS4xIDAtMiAuOS0yIDJ2Mmw0LTRINXptMTQgMThjLjU1IDAgMS4wNS0uMjIgMS40MS0uNTkuMzctLjM2LjU5LS44Ni41OS0xLjQxdi0ybC00IDRoMnptLTkuNzEgMGgyLjgzTDIxIDEyLjEyVjkuMjlMOS4yOSAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lbGFwc2UiPjxwYXRoIGQ9Ik0xNi4yNCA3Ljc2QzE1LjA3IDYuNTkgMTMuNTQgNiAxMiA2djZsLTQuMjQgNC4yNGMyLjM0IDIuMzQgNi4xNCAyLjM0IDguNDkgMCAyLjM0LTIuMzQgMi4zNC02LjE0LS4wMS04LjQ4ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lciI+PHBhdGggZD0iTTE1IDFIOXYyaDZWMXptLTQgMTNoMlY4aC0ydjZ6bTguMDMtNi42MWwxLjQyLTEuNDJjLS40My0uNTEtLjktLjk5LTEuNDEtMS40MWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5IDktNC4wMyA5LTljMC0yLjEyLS43NC00LjA3LTEuOTctNS42MXpNMTIgMjBjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTEwIj48cGF0aCBkPSJNMCA3LjcyVjkuNGwzLTFWMThoMlY2aC0uMjVMMCA3Ljcyem0yMy43OCA2LjY1Yy0uMTQtLjI4LS4zNS0uNTMtLjYzLS43NC0uMjgtLjIxLS42MS0uMzktMS4wMS0uNTNzLS44NS0uMjctMS4zNS0uMzhjLS4zNS0uMDctLjY0LS4xNS0uODctLjIzLS4yMy0uMDgtLjQxLS4xNi0uNTUtLjI1LS4xNC0uMDktLjIzLS4xOS0uMjgtLjMtLjA1LS4xMS0uMDgtLjI0LS4wOC0uMzkgMC0uMTQuMDMtLjI4LjA5LS40MS4wNi0uMTMuMTUtLjI1LjI3LS4zNC4xMi0uMS4yNy0uMTguNDUtLjI0cy40LS4wOS42NC0uMDljLjI1IDAgLjQ3LjA0LjY2LjExLjE5LjA3LjM1LjE3LjQ4LjI5LjEzLjEyLjIyLjI2LjI5LjQyLjA2LjE2LjEuMzIuMS40OWgxLjk1YzAtLjM5LS4wOC0uNzUtLjI0LTEuMDktLjE2LS4zNC0uMzktLjYzLS42OS0uODgtLjMtLjI1LS42Ni0uNDQtMS4wOS0uNTlDMjEuNDkgOS4wNyAyMSA5IDIwLjQ2IDljLS41MSAwLS45OC4wNy0xLjM5LjIxLS40MS4xNC0uNzcuMzMtMS4wNi41Ny0uMjkuMjQtLjUxLjUyLS42Ny44NC0uMTYuMzItLjIzLjY1LS4yMyAxLjAxcy4wOC42OS4yMy45NmMuMTUuMjguMzYuNTIuNjQuNzMuMjcuMjEuNi4zOC45OC41My4zOC4xNC44MS4yNiAxLjI3LjM2LjM5LjA4LjcxLjE3Ljk1LjI2cy40My4xOS41Ny4yOWMuMTMuMS4yMi4yMi4yNy4zNC4wNS4xMi4wNy4yNS4wNy4zOSAwIC4zMi0uMTMuNTctLjQuNzctLjI3LjItLjY2LjI5LTEuMTcuMjktLjIyIDAtLjQzLS4wMi0uNjQtLjA4LS4yMS0uMDUtLjQtLjEzLS41Ni0uMjQtLjE3LS4xMS0uMy0uMjYtLjQxLS40NC0uMTEtLjE4LS4xNy0uNDEtLjE4LS42N2gtMS44OWMwIC4zNi4wOC43MS4yNCAxLjA1LjE2LjM0LjM5LjY1LjcuOTMuMzEuMjcuNjkuNDkgMS4xNS42Ni40Ni4xNy45OC4yNSAxLjU4LjI1LjUzIDAgMS4wMS0uMDYgMS40NC0uMTkuNDMtLjEzLjgtLjMxIDEuMTEtLjU0LjMxLS4yMy41NC0uNTEuNzEtLjgzLjE3LS4zMi4yNS0uNjcuMjUtMS4wNi0uMDItLjQtLjA5LS43NC0uMjQtMS4wMnptLTkuOTYtNy4zMmMtLjM0LS40LS43NS0uNy0xLjIzLS44OC0uNDctLjE4LTEuMDEtLjI3LTEuNTktLjI3LS41OCAwLTEuMTEuMDktMS41OS4yNy0uNDguMTgtLjg5LjQ3LTEuMjMuODgtLjM0LjQxLS42LjkzLS43OSAxLjU5LS4xOC42NS0uMjggMS40NS0uMjggMi4zOXYxLjkyYzAgLjk0LjA5IDEuNzQuMjggMi4zOS4xOS42Ni40NSAxLjE5LjggMS42LjM0LjQxLjc1LjcxIDEuMjMuODkuNDguMTggMS4wMS4yOCAxLjU5LjI4LjU5IDAgMS4xMi0uMDkgMS41OS0uMjguNDgtLjE4Ljg4LS40OCAxLjIyLS44OS4zNC0uNDEuNi0uOTQuNzgtMS42LjE4LS42NS4yOC0xLjQ1LjI4LTIuMzl2LTEuOTJjMC0uOTQtLjA5LTEuNzQtLjI4LTIuMzktLjE4LS42Ni0uNDQtMS4xOS0uNzgtMS41OXptLS45MiA2LjE3YzAgLjYtLjA0IDEuMTEtLjEyIDEuNTMtLjA4LjQyLS4yLjc2LS4zNiAxLjAyLS4xNi4yNi0uMzYuNDUtLjU5LjU3LS4yMy4xMi0uNTEuMTgtLjgyLjE4LS4zIDAtLjU4LS4wNi0uODItLjE4cy0uNDQtLjMxLS42LS41N2MtLjE2LS4yNi0uMjktLjYtLjM4LTEuMDItLjA5LS40Mi0uMTMtLjkzLS4xMy0xLjUzdi0yLjVjMC0uNi4wNC0xLjExLjEzLTEuNTIuMDktLjQxLjIxLS43NC4zOC0xIC4xNi0uMjUuMzYtLjQzLjYtLjU1LjI0LS4xMS41MS0uMTcuODEtLjE3LjMxIDAgLjU4LjA2LjgxLjE3LjI0LjExLjQ0LjI5LjYuNTUuMTYuMjUuMjkuNTguMzcuOTkuMDguNDEuMTMuOTIuMTMgMS41MnYyLjUxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTMiPjxwYXRoIGQ9Ik0xMS42MSAxMi45N2MtLjE2LS4yNC0uMzYtLjQ2LS42Mi0uNjUtLjI1LS4xOS0uNTYtLjM1LS45My0uNDguMy0uMTQuNTctLjMuOC0uNS4yMy0uMi40Mi0uNDEuNTctLjY0LjE1LS4yMy4yNy0uNDYuMzQtLjcxLjA4LS4yNC4xMS0uNDkuMTEtLjczIDAtLjU1LS4wOS0xLjA0LS4yOC0xLjQ2LS4xOC0uNDItLjQ0LS43Ny0uNzgtMS4wNi0uMzMtLjI4LS43My0uNS0xLjItLjY0LS40NS0uMTMtLjk3LS4yLTEuNTMtLjItLjU1IDAtMS4wNi4wOC0xLjUyLjI0LS40Ny4xNy0uODcuNC0xLjIuNjktLjMzLjI5LS42LjYzLS43OCAxLjAzLS4yLjM5LS4yOS44My0uMjkgMS4yOWgxLjk4YzAtLjI2LjA1LS40OS4xNC0uNjkuMDktLjIuMjItLjM4LjM4LS41Mi4xNy0uMTQuMzYtLjI1LjU4LS4zMy4yMi0uMDguNDYtLjEyLjczLS4xMi42MSAwIDEuMDYuMTYgMS4zNi40Ny4zLjMxLjQ0Ljc1LjQ0IDEuMzIgMCAuMjctLjA0LjUyLS4xMi43NC0uMDguMjItLjIxLjQxLS4zOC41Ny0uMTcuMTYtLjM4LjI4LS42My4zNy0uMjUuMDktLjU1LjEzLS44OS4xM0g2LjcydjEuNTdINy45Yy4zNCAwIC42NC4wNC45MS4xMS4yNy4wOC41LjE5LjY5LjM1LjE5LjE2LjM0LjM2LjQ0LjYxLjEuMjQuMTYuNTQuMTYuODcgMCAuNjItLjE4IDEuMDktLjUzIDEuNDItLjM1LjMzLS44NC40OS0xLjQ1LjQ5LS4yOSAwLS41Ni0uMDQtLjgtLjEzLS4yNC0uMDgtLjQ0LS4yLS42MS0uMzYtLjE3LS4xNi0uMy0uMzQtLjM5LS41Ni0uMDktLjIyLS4xNC0uNDYtLjE0LS43Mkg0LjE5YzAgLjU1LjExIDEuMDMuMzIgMS40NS4yMS40Mi41Ljc3Ljg2IDEuMDVzLjc3LjQ5IDEuMjQuNjMuOTYuMjEgMS40OC4yMWMuNTcgMCAxLjA5LS4wOCAxLjU4LS4yMy40OS0uMTUuOTEtLjM4IDEuMjYtLjY4LjM2LS4zLjY0LS42Ni44NC0xLjEuMi0uNDMuMy0uOTMuMy0xLjQ4IDAtLjI5LS4wNC0uNTgtLjExLS44Ni0uMDgtLjI1LS4xOS0uNTEtLjM1LS43NnptOS4yNiAxLjRjLS4xNC0uMjgtLjM1LS41My0uNjMtLjc0LS4yOC0uMjEtLjYxLS4zOS0xLjAxLS41M3MtLjg1LS4yNy0xLjM1LS4zOGMtLjM1LS4wNy0uNjQtLjE1LS44Ny0uMjMtLjIzLS4wOC0uNDEtLjE2LS41NS0uMjUtLjE0LS4wOS0uMjMtLjE5LS4yOC0uMy0uMDUtLjExLS4wOC0uMjQtLjA4LS4zOXMuMDMtLjI4LjA5LS40MWMuMDYtLjEzLjE1LS4yNS4yNy0uMzQuMTItLjEuMjctLjE4LjQ1LS4yNHMuNC0uMDkuNjQtLjA5Yy4yNSAwIC40Ny4wNC42Ni4xMS4xOS4wNy4zNS4xNy40OC4yOS4xMy4xMi4yMi4yNi4yOS40Mi4wNi4xNi4xLjMyLjEuNDloMS45NWMwLS4zOS0uMDgtLjc1LS4yNC0xLjA5LS4xNi0uMzQtLjM5LS42My0uNjktLjg4LS4zLS4yNS0uNjYtLjQ0LTEuMDktLjU5LS40My0uMTUtLjkyLS4yMi0xLjQ2LS4yMi0uNTEgMC0uOTguMDctMS4zOS4yMS0uNDEuMTQtLjc3LjMzLTEuMDYuNTctLjI5LjI0LS41MS41Mi0uNjcuODQtLjE2LjMyLS4yMy42NS0uMjMgMS4wMXMuMDguNjguMjMuOTZjLjE1LjI4LjM3LjUyLjY0LjczLjI3LjIxLjYuMzguOTguNTMuMzguMTQuODEuMjYgMS4yNy4zNi4zOS4wOC43MS4xNy45NS4yNnMuNDMuMTkuNTcuMjljLjEzLjEuMjIuMjIuMjcuMzQuMDUuMTIuMDcuMjUuMDcuMzkgMCAuMzItLjEzLjU3LS40Ljc3LS4yNy4yLS42Ni4yOS0xLjE3LjI5LS4yMiAwLS40My0uMDItLjY0LS4wOC0uMjEtLjA1LS40LS4xMy0uNTYtLjI0LS4xNy0uMTEtLjMtLjI2LS40MS0uNDQtLjExLS4xOC0uMTctLjQxLS4xOC0uNjdoLTEuODljMCAuMzYuMDguNzEuMjQgMS4wNS4xNi4zNC4zOS42NS43LjkzLjMxLjI3LjY5LjQ5IDEuMTUuNjYuNDYuMTcuOTguMjUgMS41OC4yNS41MyAwIDEuMDEtLjA2IDEuNDQtLjE5LjQzLS4xMy44LS4zMSAxLjExLS41NC4zMS0uMjMuNTQtLjUxLjcxLS44My4xNy0uMzIuMjUtLjY3LjI1LTEuMDYtLjAyLS40LS4wOS0uNzQtLjI0LTEuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItb2ZmIj48cGF0aCBkPSJNMTkuMDQgNC41NWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy0xLjgzIDAtMy41My41NS00Ljk1IDEuNDhsMS40NiAxLjQ2QzkuNTMgNi4zNSAxMC43MyA2IDEyIDZjMy44NyAwIDcgMy4xMyA3IDcgMCAxLjI3LS4zNSAyLjQ3LS45NCAzLjQ5bDEuNDUgMS40NUMyMC40NSAxNi41MyAyMSAxNC44MyAyMSAxM2MwLTIuMTItLjc0LTQuMDctMS45Ny01LjYxbDEuNDItMS40Mi0xLjQxLTEuNDJ6TTE1IDFIOXYyaDZWMXptLTQgOC40NGwyIDJWOGgtMnYxLjQ0ek0zLjAyIDRMMS43NSA1LjI3IDQuNSA4LjAzQzMuNTUgOS40NSAzIDExLjE2IDMgMTNjMCA0Ljk3IDQuMDIgOSA5IDkgMS44NCAwIDMuNTUtLjU1IDQuOTgtMS41bDIuNSAyLjUgMS4yNy0xLjI3LTcuNzEtNy43MUwzLjAyIDR6TTEyIDIwYy0zLjg3IDAtNy0zLjEzLTctNyAwLTEuMjguMzUtMi40OC45NS0zLjUybDkuNTYgOS41NmMtMS4wMy42MS0yLjIzLjk2LTMuNTEuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9uYWxpdHkiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNy45M2MtMy45NC0uNDktNy0zLjg1LTctNy45M3MzLjA1LTcuNDQgNy03LjkzdjE1Ljg2em0yLTE1Ljg2YzEuMDMuMTMgMiAuNDUgMi44Ny45M0gxM3YtLjkzek0xMyA3aDUuMjRjLjI1LjMxLjQ4LjY1LjY4IDFIMTNWN3ptMCAzaDYuNzRjLjA4LjMzLjE1LjY2LjE5IDFIMTN2LTF6bTAgOS45M1YxOWgyLjg3Yy0uODcuNDgtMS44NC44LTIuODcuOTN6TTE4LjI0IDE3SDEzdi0xaDUuOTJjLS4yLjM1LS40My42OS0uNjggMXptMS41LTNIMTN2LTFoNi45M2MtLjA0LjM0LS4xMS42Ny0uMTkgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFuc2Zvcm0iPjxwYXRoIGQ9Ik0yMiAxOHYtMkg4VjRoMkw3IDEgNCA0aDJ2MkgydjJoNHY4YzAgMS4xLjkgMiAyIDJoOHYyaC0ybDMgMyAzLTNoLTJ2LTJoNHpNMTAgOGg2djZoMlY4YzAtMS4xLS45LTItMi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVuZSI+PHBhdGggZD0iTTMgMTd2Mmg2di0ySDN6TTMgNXYyaDEwVjVIM3ptMTAgMTZ2LTJoOHYtMmgtOHYtMmgtMnY2aDJ6TTcgOXYySDN2Mmg0djJoMlY5SDd6bTE0IDR2LTJIMTF2MmgxMHptLTYtNGgyVjdoNFY1aC00VjNoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbWZ5Ij48cGF0aCBkPSJNMyA5aDRWNUgzdjR6bTAgNWg0di00SDN2NHptNSAwaDR2LTRIOHY0em01IDBoNHYtNGgtNHY0ek04IDloNFY1SDh2NHptNS00djRoNFY1aC00em01IDloNHYtNGgtNHY0ek0zIDE5aDR2LTRIM3Y0em01IDBoNHYtNEg4djR6bTUgMGg0di00aC00djR6bTUgMGg0di00aC00djR6bTAtMTR2NGg0VjVoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb21wYWN0Ij48cGF0aCBkPSJNMyAxOWg2di03SDN2N3ptNyAwaDEydi03SDEwdjd6TTMgNXY2aDE5VjVIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWduZXR0ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSAxNWMtNC40MiAwLTgtMi42OS04LTZzMy41OC02IDgtNiA4IDIuNjkgOCA2LTMuNTggNi04IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItYXV0byI+PHBhdGggZD0iTTYuODUgMTIuNjVoMi4zTDggOWwtMS4xNSAzLjY1ek0yMiA3bC0xLjIgNi4yOUwxOS4zIDdoLTEuNmwtMS40OSA2LjI5TDE1IDdoLS43NkMxMi43NyA1LjE3IDEwLjUzIDQgOCA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4YzMuMTMgMCA1Ljg0LTEuODEgNy4xNS00LjQzbC4xLjQzSDE3bDEuNS02LjFMMjAgMTZoMS43NWwyLjA1LTlIMjJ6bS0xMS43IDlsLS43LTJINi40bC0uNyAySDMuOEw3IDdoMmwzLjIgOWgtMS45eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWNsb3VkeSI+PHBhdGggZD0iTTE5LjM2IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjQtNC45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1pbmNhbmRlc2NlbnQiPjxwYXRoIGQ9Ik0zLjU1IDE4LjU0bDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6TTExIDIyLjQ1aDJWMTkuNWgtMnYyLjk1ek00IDEwLjVIMXYyaDN2LTJ6bTExLTQuMTlWMS41SDl2NC44MUM3LjIxIDcuMzUgNiA5LjI4IDYgMTEuNWMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMi4yMi0xLjIxLTQuMTUtMy01LjE5em01IDQuMTl2Mmgzdi0yaC0zem0tMi43NiA3LjY2bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWlyaWRlc2NlbnQiPjxwYXRoIGQ9Ik01IDE0LjVoMTR2LTZINXY2ek0xMSAuNTVWMy41aDJWLjU1aC0yem04LjA0IDIuNWwtMS43OSAxLjc5IDEuNDEgMS40MSAxLjgtMS43OS0xLjQyLTEuNDF6TTEzIDIyLjQ1VjE5LjVoLTJ2Mi45NWgyem03LjQ1LTMuOTFsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuOCAxLjQyLTEuNDJ6TTMuNTUgNC40NmwxLjc5IDEuNzkgMS40MS0xLjQxLTEuNzktMS43OS0xLjQxIDEuNDF6bTEuNDEgMTUuNDlsMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Itc3VubnkiPjxwYXRoIGQ9Ik02Ljc2IDQuODRsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuNzkgMS40Mi0xLjQxek00IDEwLjVIMXYyaDN2LTJ6bTktOS45NWgtMlYzLjVoMlYuNTV6bTcuNDUgMy45MWwtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDEgMS43OS0xLjc5em0tMy4yMSAxMy43bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40ek0yMCAxMC41djJoM3YtMmgtM3ptLTgtNWMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bS0xIDE2Ljk1aDJWMTkuNWgtMnYyLjk1em0tNy40NS0zLjkxbDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeWJlLmNvbnRlbnQpO3ZhciB2YmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpY29ucyIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iM2Qtcm90YXRpb24iPjxwYXRoIGQ9Ik03LjUyIDIxLjQ4QzQuMjUgMTkuOTQgMS45MSAxNi43NiAxLjU1IDEzSC4wNUMuNTYgMTkuMTYgNS43MSAyNCAxMiAyNGwuNjYtLjAzLTMuODEtMy44MS0xLjMzIDEuMzJ6bS44OS02LjUyYy0uMTkgMC0uMzctLjAzLS41Mi0uMDgtLjE2LS4wNi0uMjktLjEzLS40LS4yNC0uMTEtLjEtLjItLjIyLS4yNi0uMzctLjA2LS4xNC0uMDktLjMtLjA5LS40N2gtMS4zYzAgLjM2LjA3LjY4LjIxLjk1LjE0LjI3LjMzLjUuNTYuNjkuMjQuMTguNTEuMzIuODIuNDEuMy4xLjYyLjE1Ljk2LjE1LjM3IDAgLjcyLS4wNSAxLjAzLS4xNS4zMi0uMS42LS4yNS44My0uNDRzLjQyLS40My41NS0uNzJjLjEzLS4yOS4yLS42MS4yLS45NyAwLS4xOS0uMDItLjM4LS4wNy0uNTYtLjA1LS4xOC0uMTItLjM1LS4yMy0uNTEtLjEtLjE2LS4yNC0uMy0uNC0uNDMtLjE3LS4xMy0uMzctLjIzLS42MS0uMzEuMi0uMDkuMzctLjIuNTItLjMzLjE1LS4xMy4yNy0uMjcuMzctLjQyLjEtLjE1LjE3LS4zLjIyLS40Ni4wNS0uMTYuMDctLjMyLjA3LS40OCAwLS4zNi0uMDYtLjY4LS4xOC0uOTYtLjEyLS4yOC0uMjktLjUxLS41MS0uNjktLjItLjE5LS40Ny0uMzMtLjc3LS40M0M5LjEgOC4wNSA4Ljc2IDggOC4zOSA4Yy0uMzYgMC0uNjkuMDUtMSAuMTYtLjMuMTEtLjU3LjI2LS43OS40NS0uMjEuMTktLjM4LjQxLS41MS42Ny0uMTIuMjYtLjE4LjU0LS4xOC44NWgxLjNjMC0uMTcuMDMtLjMyLjA5LS40NXMuMTQtLjI1LjI1LS4zNGMuMTEtLjA5LjIzLS4xNy4zOC0uMjIuMTUtLjA1LjMtLjA4LjQ4LS4wOC40IDAgLjcuMS44OS4zMS4xOS4yLjI5LjQ5LjI5Ljg2IDAgLjE4LS4wMy4zNC0uMDguNDktLjA1LjE1LS4xNC4yNy0uMjUuMzctLjExLjEtLjI1LjE4LS40MS4yNC0uMTYuMDYtLjM2LjA5LS41OC4wOUg3LjV2MS4wM2guNzdjLjIyIDAgLjQyLjAyLjYuMDdzLjMzLjEzLjQ1LjIzYy4xMi4xMS4yMi4yNC4yOS40LjA3LjE2LjEuMzUuMS41NyAwIC40MS0uMTIuNzItLjM1LjkzLS4yMy4yMy0uNTUuMzMtLjk1LjMzem04LjU1LTUuOTJjLS4zMi0uMzMtLjctLjU5LTEuMTQtLjc3LS40My0uMTgtLjkyLS4yNy0xLjQ2LS4yN0gxMnY4aDIuM2MuNTUgMCAxLjA2LS4wOSAxLjUxLS4yNy40NS0uMTguODQtLjQzIDEuMTYtLjc2LjMyLS4zMy41Ny0uNzMuNzQtMS4xOS4xNy0uNDcuMjYtLjk5LjI2LTEuNTd2LS40YzAtLjU4LS4wOS0xLjEtLjI2LTEuNTctLjE4LS40Ny0uNDMtLjg3LS43NS0xLjJ6bS0uMzkgMy4xNmMwIC40Mi0uMDUuNzktLjE0IDEuMTMtLjEuMzMtLjI0LjYyLS40My44NS0uMTkuMjMtLjQzLjQxLS43MS41My0uMjkuMTItLjYyLjE4LS45OS4xOGgtLjkxVjkuMTJoLjk3Yy43MiAwIDEuMjcuMjMgMS42NC42OS4zOC40Ni41NyAxLjEyLjU3IDEuOTl2LjR6TTEyIDBsLS42Ni4wMyAzLjgxIDMuODEgMS4zMy0xLjMzYzMuMjcgMS41NSA1LjYxIDQuNzIgNS45NiA4LjQ4aDEuNUMyMy40NCA0Ljg0IDE4LjI5IDAgMTIgMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmlsaXR5Ij48cGF0aCBkPSJNMTIgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6bTkgN2gtNnYxM2gtMnYtNmgtMnY2SDlWOUgzVjdoMTh2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xOSAxM3YtMmMtMS41NC4wMi0zLjA5LS43NS00LjA3LTEuODNsLTEuMjktMS40M2MtLjE3LS4xOS0uMzgtLjM0LS42MS0uNDUtLjAxIDAtLjAxLS4wMS0uMDItLjAxSDEzYy0uMzUtLjItLjc1LS4zLTEuMTktLjI2QzEwLjc2IDcuMTEgMTAgOC4wNCAxMCA5LjA5VjE1YzAgMS4xLjkgMiAyIDJoNXY1aDJ2LTUuNWMwLTEuMS0uOS0yLTItMmgtM3YtMy40NWMxLjI5IDEuMDcgMy4yNSAxLjk0IDUgMS45NXptLTYuMTcgNWMtLjQxIDEuMTYtMS41MiAyLTIuODMgMi0xLjY2IDAtMy0xLjM0LTMtMyAwLTEuMzEuODQtMi40MSAyLTIuODNWMTIuMWMtMi4yOC40Ni00IDIuNDgtNCA0LjkgMCAyLjc2IDIuMjQgNSA1IDUgMi40MiAwIDQuNDQtMS43MiA0LjktNGgtMi4wN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1iYWxhbmNlLXdhbGxldCI+PHBhdGggZD0iTTIxIDE4djFjMCAxLjEtLjkgMi0yIDJINWMtMS4xMSAwLTItLjktMi0yVjVjMC0xLjEuODktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ2MWgtOWMtMS4xMSAwLTIgLjktMiAydjhjMCAxLjEuODkgMiAyIDJoOXptLTktMmgxMFY4SDEydjh6bTQtMi41Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJveCI+PHBhdGggZD0iTTMgNXYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0ySDVjLTEuMTEgMC0yIC45LTIgMnptMTIgNGMwIDEuNjYtMS4zNCAzLTMgM3MtMy0xLjM0LTMtMyAxLjM0LTMgMy0zIDMgMS4zNCAzIDN6bS05IDhjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xdjFINnYtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQiPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWFsZXJ0Ij48cGF0aCBkPSJNMTAuMDEgMjEuMDFjMCAxLjEuODkgMS45OSAxLjk5IDEuOTlzMS45OS0uODkgMS45OS0xLjk5aC0zLjk4em04Ljg3LTQuMTlWMTFjMC0zLjI1LTIuMjUtNS45Ny01LjI5LTYuNjl2LS43MkMxMy41OSAyLjcxIDEyLjg4IDIgMTIgMnMtMS41OS43MS0xLjU5IDEuNTl2LjcyQzcuMzcgNS4wMyA1LjEyIDcuNzUgNS4xMiAxMXY1LjgyTDMgMTguOTRWMjBoMTh2LTEuMDZsLTIuMTItMi4xMnpNMTYgMTMuMDFoLTN2M2gtMnYtM0g4VjExaDNWOGgydjNoM3YyLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtIj48cGF0aCBkPSJNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLWFkZCI+PHBhdGggZD0iTTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0xLTExaC0ydjNIOHYyaDN2M2gydi0zaDN2LTJoLTNWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vbiI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0tMS40Ni01LjQ3TDguNDEgMTIuNGwtMS4wNiAxLjA2IDMuMTggMy4xOCA2LTYtMS4wNi0xLjA2LTQuOTMgNC45NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGwtb3V0Ij48cGF0aCBkPSJNMTYuMjEgNC4xNmw0IDR2LTR6bTQgMTJsLTQgNGg0em0tMTIgNGwtNC00djR6bS00LTEybDQtNGgtNHptMTIuOTUtLjk1Yy0yLjczLTIuNzMtNy4xNy0yLjczLTkuOSAwcy0yLjczIDcuMTcgMCA5LjkgNy4xNyAyLjczIDkuOSAwIDIuNzMtNy4xNiAwLTkuOXptLTEuMSA4LjhjLTIuMTMgMi4xMy01LjU3IDIuMTMtNy43IDBzLTIuMTMtNS41NyAwLTcuNyA1LjU3LTIuMTMgNy43IDAgMi4xMyA1LjU3IDAgNy43eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYW5ub3VuY2VtZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDloLTJWNWgydjZ6bTAgNGgtMnYtMmgydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXBwcyI+PHBhdGggZD0iTTQgOGg0VjRINHY0em02IDEyaDR2LTRoLTR2NHptLTYgMGg0di00SDR2NHptMC02aDR2LTRINHY0em02IDBoNHYtNGgtNHY0em02LTEwdjRoNFY0aC00em0tNiA0aDRWNGgtNHY0em02IDZoNHYtNGgtNHY0em0wIDZoNHYtNGgtNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1iYWNrIj48cGF0aCBkPSJNMjAgMTFINy44M2w1LjU5LTUuNTlMMTIgNGwtOCA4IDggOCAxLjQxLTEuNDFMNy44MyAxM0gyMHYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kb3dud2FyZCI+PHBhdGggZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMTJsLTQtNGg4bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC11cCI+PHBhdGggZD0iTTcgMTRsNS01IDUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy11cHdhcmQiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTkgMTJoLTJ2M2gtM3YyaDV2LTV6TTcgOWgzVjdINXY1aDJWOXptMTQtNkgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50Ij48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIgMTRIN3YtMmg3djJ6bTMtNEg3di0yaDEwdjJ6bTAtNEg3VjdoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LWluZCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0wIDRjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem02IDEySDZ2LTEuNGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjFWMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTQgMTJoLTR2M2wtNS01IDUtNXYzaDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybmVkIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgMTVsLTUtNWgzVjloNHY0aDNsLTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF0dGFjaG1lbnQiPjxwYXRoIGQ9Ik0yIDEyLjVDMiA5LjQ2IDQuNDYgNyA3LjUgN0gxOGMyLjIxIDAgNCAxLjc5IDQgNHMtMS43OSA0LTQgNEg5LjVDOC4xMiAxNSA3IDEzLjg4IDcgMTIuNVM4LjEyIDEwIDkuNSAxMEgxN3YySDkuNDFjLS41NSAwLS41NSAxIDAgMUgxOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTJINy41QzUuNTcgOSA0IDEwLjU3IDQgMTIuNVM1LjU3IDE2IDcuNSAxNkgxN3YySDcuNUM0LjQ2IDE4IDIgMTUuNTQgMiAxMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF1dG9yZW5ldyI+PHBhdGggZD0iTTEyIDZ2M2w0LTQtNC00djNjLTQuNDIgMC04IDMuNTgtOCA4IDAgMS41Ny40NiAzLjAzIDEuMjQgNC4yNkw2LjcgMTQuOGMtLjQ1LS44My0uNy0xLjc5LS43LTIuOCAwLTMuMzEgMi42OS02IDYtNnptNi43NiAxLjc0TDE3LjMgOS4yYy40NC44NC43IDEuNzkuNyAyLjggMCAzLjMxLTIuNjkgNi02IDZ2LTNsLTQgNCA0IDR2LTNjNC40MiAwIDgtMy41OCA4LTggMC0xLjU3LS40Ni0zLjAzLTEuMjQtNC4yNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJhY2t1cCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmxvY2siPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek00IDEyYzAtNC40MiAzLjU4LTggOC04IDEuODUgMCAzLjU1LjYzIDQuOSAxLjY5TDUuNjkgMTYuOUM0LjYzIDE1LjU1IDQgMTMuODUgNCAxMnptOCA4Yy0xLjg1IDAtMy41NS0uNjMtNC45LTEuNjlMMTguMzEgNy4xQzE5LjM3IDguNDUgMjAgMTAuMTUgMjAgMTJjMCA0LjQyLTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyayI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyay1ib3JkZXIiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTVsLTUtMi4xOEw3IDE4VjVoMTB2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJidWlsZCI+PHBhdGggZD0iTTIyLjcgMTlsLTkuMS05LjFjLjktMi4zLjQtNS0xLjUtNi45LTItMi01LTIuNC03LjQtMS4zTDkgNiA2IDkgMS42IDQuN0MuNCA3LjEuOSAxMC4xIDIuOSAxMi4xYzEuOSAxLjkgNC42IDIuNCA2LjkgMS41bDkuMSA5LjFjLjQuNCAxIC40IDEuNCAwbDIuMy0yLjNjLjUtLjQuNS0xLjEuMS0xLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FjaGVkIj48cGF0aCBkPSJNMTkgOGwtNCA0aDNjMCAzLjMxLTIuNjkgNi02IDYtMS4wMSAwLTEuOTctLjI1LTIuOC0uN2wtMS40NiAxLjQ2QzguOTcgMTkuNTQgMTAuNDMgMjAgMTIgMjBjNC40MiAwIDgtMy41OCA4LThoM2wtNC00ek02IDEyYzAtMy4zMSAyLjY5LTYgNi02IDEuMDEgMCAxLjk3LjI1IDIuOC43bDEuNDYtMS40NkMxNS4wMyA0LjQ2IDEzLjU3IDQgMTIgNGMtNC40MiAwLTggMy41OC04IDhIMWw0IDQgNC00SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbmNlbCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtZ2lmdGNhcmQiPjxwYXRoIGQ9Ik0yMCA2aC0yLjE4Yy4xMS0uMzEuMTgtLjY1LjE4LTEgMC0xLjY2LTEuMzQtMy0zLTMtMS4wNSAwLTEuOTYuNTQtMi41IDEuMzVsLS41LjY3LS41LS42OEMxMC45NiAyLjU0IDEwLjA1IDIgOSAyIDcuMzQgMiA2IDMuMzQgNiA1YzAgLjM1LjA3LjY5LjE4IDFINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNS0yYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6TTkgNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoNS4wOEw3IDEwLjgzIDguNjIgMTIgMTEgOC43NmwxLTEuMzYgMSAxLjM2TDE1LjM4IDEyIDE3IDEwLjgzIDE0LjkyIDhIMjB2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC10cmF2ZWwiPjxwYXRoIGQ9Ik0yMCA2aC0zVjRjMC0xLjExLS44OS0yLTItMkg5Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTIgLjg5LTIgMnYxMWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6TTkgNGg2djJIOVY0em0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoM3YyaDJWOGg2djJoMlY4aDN2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGFuZ2UtaGlzdG9yeSI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWJveC1vdXRsaW5lLWJsYW5rIj48cGF0aCBkPSJNMTkgNXYxNEg1VjVoMTRtMC0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsYXNzIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsZWFyIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTQuNSAxNEg4Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zbC4xNC4wMUM4LjU4IDguMjggMTAuMTMgNyAxMiA3YzIuMjEgMCA0IDEuNzkgNCA0aC41YzEuMzggMCAyLjUgMS4xMiAyLjUgMi41UzE3Ljg4IDE2IDE2LjUgMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWRvd25sb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNyAxM2wtNSA1LTUtNWgzVjloNHY0aDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtb2ZmIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDRjLTEuNDggMC0yLjg1LjQzLTQuMDEgMS4xN2wxLjQ2IDEuNDZDMTAuMjEgNi4yMyAxMS4wOCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDMgMCAxLjEzLS42NCAyLjExLTEuNTYgMi42MmwxLjQ1IDEuNDVDMjMuMTYgMTguMTYgMjQgMTYuNjggMjQgMTVjMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTMgNS4yN2wyLjc1IDIuNzRDMi41NiA4LjE1IDAgMTAuNzcgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxMS43M2wyIDJMMjEgMjAuNzMgNC4yNyA0IDMgNS4yN3pNNy43MyAxMGw4IDhINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNGgxLjczeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtdXBsb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNCAxM3Y0aC00di00SDdsNS01IDUgNWgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2RlIj48cGF0aCBkPSJNOS40IDE2LjZMNC44IDEybDQuNi00LjZMOCA2bC02IDYgNiA2IDEuNC0xLjR6bTUuMiAwbDQuNi00LjYtNC42LTQuNkwxNiA2bDYgNi02IDYtMS40LTEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jb3B5Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jdXQiPjxwYXRoIGQ9Ik05LjY0IDcuNjRjLjIzLS41LjM2LTEuMDUuMzYtMS42NCAwLTIuMjEtMS43OS00LTQtNFMyIDMuNzkgMiA2czEuNzkgNCA0IDRjLjU5IDAgMS4xNC0uMTMgMS42NC0uMzZMMTAgMTJsLTIuMzYgMi4zNkM3LjE0IDE0LjEzIDYuNTkgMTQgNiAxNGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00YzAtLjU5LS4xMy0xLjE0LS4zNi0xLjY0TDEyIDE0bDcgN2gzdi0xTDkuNjQgNy42NHpNNiA4Yy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem0wIDEyYy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem02LTcuNWMtLjI4IDAtLjUtLjIyLS41LS41cy4yMi0uNS41LS41LjUuMjIuNS41LS4yMi41LS41LjV6TTE5IDNsLTYgNiAyIDIgNy03VjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb3B5cmlnaHQiPjxwYXRoIGQ9Ik0xMC4wOCAxMC44NmMuMDUtLjMzLjE2LS42Mi4zLS44N3MuMzQtLjQ2LjU5LS42MmMuMjQtLjE1LjU0LS4yMi45MS0uMjMuMjMuMDEuNDQuMDUuNjMuMTMuMi4wOS4zOC4yMS41Mi4zNnMuMjUuMzMuMzQuNTMuMTMuNDIuMTQuNjRoMS43OWMtLjAyLS40Ny0uMTEtLjktLjI4LTEuMjlzLS40LS43My0uNy0xLjAxLS42Ni0uNS0xLjA4LS42Ni0uODgtLjIzLTEuMzktLjIzYy0uNjUgMC0xLjIyLjExLTEuNy4zNHMtLjg4LjUzLTEuMi45Mi0uNTYuODQtLjcxIDEuMzZTOCAxMS4yOSA4IDExLjg3di4yN2MwIC41OC4wOCAxLjEyLjIzIDEuNjRzLjM5Ljk3LjcxIDEuMzUuNzIuNjkgMS4yLjkxIDEuMDUuMzQgMS43LjM0Yy40NyAwIC45MS0uMDggMS4zMi0uMjNzLjc3LS4zNiAxLjA4LS42My41Ni0uNTguNzQtLjk0LjI5LS43NC4zLTEuMTVoLTEuNzljLS4wMS4yMS0uMDYuNC0uMTUuNThzLS4yMS4zMy0uMzYuNDYtLjMyLjIzLS41Mi4zYy0uMTkuMDctLjM5LjA5LS42LjEtLjM2LS4wMS0uNjYtLjA4LS44OS0uMjMtLjI1LS4xNi0uNDUtLjM3LS41OS0uNjJzLS4yNS0uNTUtLjMtLjg4LS4wOC0uNjctLjA4LTF2LS4yN2MwLS4zNS4wMy0uNjguMDgtMS4wMXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlYXRlIj48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWRpdC1jYXJkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhc2hib2FyZCI+PHBhdGggZD0iTTMgMTNoOFYzSDN2MTB6bTAgOGg4di02SDN2NnptMTAgMGg4VjExaC04djEwem0wLTE4djZoOFYzaC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLWZvcmV2ZXIiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVzY3JpcHRpb24iPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTZIOHYtMmg4djJ6bTAtNEg4di0yaDh2MnptLTMtNVYzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRucyI+PHBhdGggZD0iTTIwIDEzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6TTcgMTljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek0yMCAzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXpNNyA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbmUtYWxsIj48cGF0aCBkPSJNMTggN2wtMS40MS0xLjQxLTYuMzQgNi4zNCAxLjQxIDEuNDFMMTggN3ptNC4yNC0xLjQxTDExLjY2IDE2LjE3IDcuNDggMTJsLTEuNDEgMS40MUwxMS42NiAxOWwxMi0xMi0xLjQyLTEuNDF6TS40MSAxMy40MUw2IDE5bDEuNDEtMS40MUwxLjgzIDEyIC40MSAxMy40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb251dC1sYXJnZSI+PHBhdGggZD0iTTExIDUuMDhWMmMtNSAuNS05IDQuODEtOSAxMHM0IDkuNSA5IDEwdi0zLjA4Yy0zLS40OC02LTMuNC02LTYuOTJzMy02LjQ0IDYtNi45MnpNMTguOTcgMTFIMjJjLS40Ny01LTQtOC41My05LTl2My4wOEMxNiA1LjUxIDE4LjU0IDggMTguOTcgMTF6TTEzIDE4LjkyVjIyYzUtLjQ3IDguNTMtNCA5LTloLTMuMDNjLS40MyAzLTIuOTcgNS40OS01Ljk3IDUuOTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZHJhZnRzIj48cGF0aCBkPSJNMjEuOTkgOGMwLS43Mi0uMzctMS4zNS0uOTQtMS43TDEyIDEgMi45NSA2LjNDMi4zOCA2LjY1IDIgNy4yOCAyIDh2MTBjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMmwtLjAxLTEwek0xMiAxM0wzLjc0IDcuODQgMTIgM2w4LjI2IDQuODRMMTIgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZWplY3QiPjxwYXRoIGQ9Ik01IDE3aDE0djJINXptNy0xMkw1LjMzIDE1aDEzLjM0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlcnJvci1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTVoMnYyaC0yem0wLThoMnY2aC0yem0uOTktNUM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV1cm8tc3ltYm9sIj48cGF0aCBkPSJNMTUgMTguNWMtMi41MSAwLTQuNjgtMS40Mi01Ljc2LTMuNUgxNXYtMkg4LjU4Yy0uMDUtLjMzLS4wOC0uNjYtLjA4LTFzLjAzLS42Ny4wOC0xSDE1VjlIOS4yNEMxMC4zMiA2LjkyIDEyLjUgNS41IDE1IDUuNWMxLjYxIDAgMy4wOS41OSA0LjIzIDEuNTdMMjEgNS4zQzE5LjQxIDMuODcgMTcuMyAzIDE1IDNjLTMuOTIgMC03LjI0IDIuNTEtOC40OCA2SDN2MmgzLjA2Yy0uMDQuMzMtLjA2LjY2LS4wNiAxIDAgLjM0LjAyLjY3LjA2IDFIM3YyaDMuNTJjMS4yNCAzLjQ5IDQuNTYgNiA4LjQ4IDYgMi4zMSAwIDQuNDEtLjg3IDYtMi4zbC0xLjc4LTEuNzdjLTEuMTMuOTgtMi42IDEuNTctNC4yMiAxLjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXZlbnQtc2VhdCI+PHBhdGggZD0iTTQgMTh2M2gzdi0zaDEwdjNoM3YtNkg0em0xNS04aDN2M2gtM3pNMiAxMGgzdjNIMnptMTUgM0g3VjVjMC0xLjEuOS0yIDItMmg2YzEuMSAwIDIgLjkgMiAydjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhpdC10by1hcHAiPjxwYXRoIGQ9Ik0xMC4wOSAxNS41OUwxMS41IDE3bDUtNS01LTUtMS40MSAxLjQxTDEyLjY3IDExSDN2Mmg5LjY3bC0yLjU4IDIuNTl6TTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjRoMlY1aDE0djE0SDV2LTRIM3Y0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBhbmQtbW9yZSI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBsb3JlIj48cGF0aCBkPSJNMTIgMTAuOWMtLjYxIDAtMS4xLjQ5LTEuMSAxLjFzLjQ5IDEuMSAxLjEgMS4xYy42MSAwIDEuMS0uNDkgMS4xLTEuMXMtLjQ5LTEuMS0xLjEtMS4xek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0yLjE5IDEyLjE5TDYgMThsMy44MS04LjE5TDE4IDZsLTMuODEgOC4xOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYWNlIj48cGF0aCBkPSJNOSAxMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6bTYgMGMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04IDAtLjI5LjAyLS41OC4wNS0uODYgMi4zNi0xLjA1IDQuMjMtMi45OCA1LjIxLTUuMzdDMTEuMDcgOC4zMyAxNC4wNSAxMCAxNy40MiAxMGMuNzggMCAxLjUzLS4wOSAyLjI1LS4yNi4yMS43MS4zMyAxLjQ3LjMzIDIuMjYgMCA0LjQxLTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmF2b3JpdGUiPjxwYXRoIGQ9Ik0xMiAyMS4zNWwtMS40NS0xLjMyQzUuNCAxNS4zNiAyIDEyLjI4IDIgOC41IDIgNS40MiA0LjQyIDMgNy41IDNjMS43NCAwIDMuNDEuODEgNC41IDIuMDlDMTMuMDkgMy44MSAxNC43NiAzIDE2LjUgMyAxOS41OCAzIDIyIDUuNDIgMjIgOC41YzAgMy43OC0zLjQgNi44Ni04LjU1IDExLjU0TDEyIDIxLjM1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZlZWRiYWNrIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDEyaC0ydi0yaDJ2MnptMC00aC0yVjZoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbGUtZG93bmxvYWQiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItbGlzdCI+PHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtaW4tcGFnZSI+PHBhdGggZD0iTTIwIDE5LjU5VjhsLTYtNkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjLjQ1IDAgLjg1LS4xNSAxLjE5LS40bC00LjQzLTQuNDNjLS44LjUyLTEuNzQuODMtMi43Ni44My0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDVjMCAxLjAyLS4zMSAxLjk2LS44MyAyLjc1TDIwIDE5LjU5ek05IDEzYzAgMS42NiAxLjM0IDMgMyAzczMtMS4zNCAzLTMtMS4zNC0zLTMtMy0zIDEuMzQtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmdlcnByaW50Ij48cGF0aCBkPSJNMTcuODEgNC40N2MtLjA4IDAtLjE2LS4wMi0uMjMtLjA2QzE1LjY2IDMuNDIgMTQgMyAxMi4wMSAzYy0xLjk4IDAtMy44Ni40Ny01LjU3IDEuNDEtLjI0LjEzLS41NC4wNC0uNjgtLjItLjEzLS4yNC0uMDQtLjU1LjItLjY4QzcuODIgMi41MiA5Ljg2IDIgMTIuMDEgMmMyLjEzIDAgMy45OS40NyA2LjAzIDEuNTIuMjUuMTMuMzQuNDMuMjEuNjctLjA5LjE4LS4yNi4yOC0uNDQuMjh6TTMuNSA5LjcyYy0uMSAwLS4yLS4wMy0uMjktLjA5LS4yMy0uMTYtLjI4LS40Ny0uMTItLjcuOTktMS40IDIuMjUtMi41IDMuNzUtMy4yN0M5Ljk4IDQuMDQgMTQgNC4wMyAxNy4xNSA1LjY1YzEuNS43NyAyLjc2IDEuODYgMy43NSAzLjI1LjE2LjIyLjExLjU0LS4xMi43LS4yMy4xNi0uNTQuMTEtLjctLjEyLS45LTEuMjYtMi4wNC0yLjI1LTMuMzktMi45NC0yLjg3LTEuNDctNi41NC0xLjQ3LTkuNC4wMS0xLjM2LjctMi41IDEuNy0zLjQgMi45Ni0uMDguMTQtLjIzLjIxLS4zOS4yMXptNi4yNSAxMi4wN2MtLjEzIDAtLjI2LS4wNS0uMzUtLjE1LS44Ny0uODctMS4zNC0xLjQzLTIuMDEtMi42NC0uNjktMS4yMy0xLjA1LTIuNzMtMS4wNS00LjM0IDAtMi45NyAyLjU0LTUuMzkgNS42Ni01LjM5czUuNjYgMi40MiA1LjY2IDUuMzljMCAuMjgtLjIyLjUtLjUuNXMtLjUtLjIyLS41LS41YzAtMi40Mi0yLjA5LTQuMzktNC42Ni00LjM5LTIuNTcgMC00LjY2IDEuOTctNC42NiA0LjM5IDAgMS40NC4zMiAyLjc3LjkzIDMuODUuNjQgMS4xNSAxLjA4IDEuNjQgMS44NSAyLjQyLjE5LjIuMTkuNTEgMCAuNzEtLjExLjEtLjI0LjE1LS4zNy4xNXptNy4xNy0xLjg1Yy0xLjE5IDAtMi4yNC0uMy0zLjEtLjg5LTEuNDktMS4wMS0yLjM4LTIuNjUtMi4zOC00LjM5IDAtLjI4LjIyLS41LjUtLjVzLjUuMjIuNS41YzAgMS40MS43MiAyLjc0IDEuOTQgMy41Ni43MS40OCAxLjU0LjcxIDIuNTQuNzEuMjQgMCAuNjQtLjAzIDEuMDQtLjEuMjctLjA1LjUzLjEzLjU4LjQxLjA1LjI3LS4xMy41My0uNDEuNTgtLjU3LjExLTEuMDcuMTItMS4yMS4xMnpNMTQuOTEgMjJjLS4wNCAwLS4wOS0uMDEtLjEzLS4wMi0xLjU5LS40NC0yLjYzLTEuMDMtMy43Mi0yLjEtMS40LTEuMzktMi4xNy0zLjI0LTIuMTctNS4yMiAwLTEuNjIgMS4zOC0yLjk0IDMuMDgtMi45NCAxLjcgMCAzLjA4IDEuMzIgMy4wOCAyLjk0IDAgMS4wNy45MyAxLjk0IDIuMDggMS45NHMyLjA4LS44NyAyLjA4LTEuOTRjMC0zLjc3LTMuMjUtNi44My03LjI1LTYuODMtMi44NCAwLTUuNDQgMS41OC02LjYxIDQuMDMtLjM5LjgxLS41OSAxLjc2LS41OSAyLjggMCAuNzguMDcgMi4wMS42NyAzLjYxLjEuMjYtLjAzLjU1LS4yOS42NC0uMjYuMS0uNTUtLjA0LS42NC0uMjktLjQ5LTEuMzEtLjczLTIuNjEtLjczLTMuOTYgMC0xLjIuMjMtMi4yOS42OC0zLjI0IDEuMzMtMi43OSA0LjI4LTQuNiA3LjUxLTQuNiA0LjU1IDAgOC4yNSAzLjUxIDguMjUgNy44MyAwIDEuNjItMS4zOCAyLjk0LTMuMDggMi45NHMtMy4wOC0xLjMyLTMuMDgtMi45NGMwLTEuMDctLjkzLTEuOTQtMi4wOC0xLjk0cy0yLjA4Ljg3LTIuMDggMS45NGMwIDEuNzEuNjYgMy4zMSAxLjg3IDQuNTEuOTUuOTQgMS44NiAxLjQ2IDMuMjcgMS44NS4yNy4wNy40Mi4zNS4zNS42MS0uMDUuMjMtLjI2LjM4LS40Ny4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaXJzdC1wYWdlIj48cGF0aCBkPSJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpZ2h0LWxhbmQiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTcuMTgtNS43M2w0LjM1IDEuMTYgNS4zMSAxLjQyYy44LjIxIDEuNjItLjI2IDEuODQtMS4wNi4yMS0uOC0uMjYtMS42Mi0xLjA2LTEuODRsLTUuMzEtMS40Mi0yLjc2LTkuMDJMMTAuMTIgMnY4LjI4TDUuMTUgOC45NWwtLjkzLTIuMzItMS40NS0uMzl2NS4xN2wxLjYuNDMgNS4zMSAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaWdodC10YWtlb2ZmIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em0xOS41Ny05LjM2Yy0uMjEtLjgtMS4wNC0xLjI4LTEuODQtMS4wNkwxNC45MiAxMGwtNi45LTYuNDMtMS45My41MSA0LjE0IDcuMTctNC45NyAxLjMzLTEuOTctMS41NC0xLjQ1LjM5IDEuODIgMy4xNi43NyAxLjMzIDEuNi0uNDMgNS4zMS0xLjQyIDQuMzUtMS4xNkwyMSAxMS40OWMuODEtLjIzIDEuMjgtMS4wNSAxLjA3LTEuODV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1mcm9udCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMiA0di0ySDNjMCAxLjEuODkgMiAyIDJ6TTMgOWgyVjdIM3Yyem0xMiAxMmgydi0yaC0ydjJ6bTQtMThIOWMtMS4xMSAwLTIgLjktMiAydjEwYzAgMS4xLjg5IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTJIOVY1aDEwdjEwem0tOCA2aDJ2LTJoLTJ2MnptLTQgMGgydi0ySDd2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXIiPjxwYXRoIGQ9Ik0xMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJoLThsLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItc2hhcmVkIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS01IDNjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yem00IDhoLTh2LTFjMC0xLjMzIDIuNjctMiA0LTJzNCAuNjcgNCAydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9udC1kb3dubG9hZCI+PHBhdGggZD0iTTkuOTMgMTMuNWg0LjE0TDEyIDcuOTh6TTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNC4wNSAxNi41bC0xLjE0LTNIOS4xN2wtMS4xMiAzSDUuOTZsNS4xMS0xM2gxLjg2bDUuMTEgMTNoLTIuMDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuIj48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuLWV4aXQiPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2F2ZWwiPjxwYXRoIGQ9Ik0xIDIxaDEydjJIMXpNNS4yNDUgOC4wN2wyLjgzLTIuODI3IDE0LjE0IDE0LjE0Mi0yLjgyOCAyLjgyOHpNMTIuMzE3IDFsNS42NTcgNS42NTYtMi44MyAyLjgzLTUuNjU0LTUuNjZ6TTMuODI1IDkuNDg1bDUuNjU3IDUuNjU3LTIuODI4IDIuODI4LTUuNjU3LTUuNjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imdlc3R1cmUiPjxwYXRoIGQ9Ik00LjU5IDYuODljLjctLjcxIDEuNC0xLjM1IDEuNzEtMS4yMi41LjIgMCAxLjAzLS4zIDEuNTItLjI1LjQyLTIuODYgMy44OS0yLjg2IDYuMzEgMCAxLjI4LjQ4IDIuMzQgMS4zNCAyLjk4Ljc1LjU2IDEuNzQuNzMgMi42NC40NiAxLjA3LS4zMSAxLjk1LTEuNCAzLjA2LTIuNzcgMS4yMS0xLjQ5IDIuODMtMy40NCA0LjA4LTMuNDQgMS42MyAwIDEuNjUgMS4wMSAxLjc2IDEuNzktMy43OC42NC01LjM4IDMuNjctNS4zOCA1LjM3IDAgMS43IDEuNDQgMy4wOSAzLjIxIDMuMDkgMS42MyAwIDQuMjktMS4zMyA0LjY5LTYuMUgyMXYtMi41aC0yLjQ3Yy0uMTUtMS42NS0xLjA5LTQuMi00LjAzLTQuMi0yLjI1IDAtNC4xOCAxLjkxLTQuOTQgMi44NC0uNTguNzMtMi4wNiAyLjQ4LTIuMjkgMi43Mi0uMjUuMy0uNjguODQtMS4xMS44NC0uNDUgMC0uNzItLjgzLS4zNi0xLjkyLjM1LTEuMDkgMS40LTIuODYgMS44NS0zLjUyLjc4LTEuMTQgMS4zLTEuOTIgMS4zLTMuMjhDOC45NSAzLjY5IDcuMzEgMyA2LjQ0IDMgNS4xMiAzIDMuOTcgNCAzLjcyIDQuMjVjLS4zNi4zNi0uNjYuNjYtLjg4LjkzbDEuNzUgMS43MXptOS4yOSAxMS42NmMtLjMxIDAtLjc0LS4yNi0uNzQtLjcyIDAtLjYuNzMtMi4yIDIuODctMi43Ni0uMyAyLjY5LTEuNDMgMy40OC0yLjEzIDMuNDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJnaWYiPjxwYXRoIGQ9Ik0xMS41IDlIMTN2NmgtMS41ek05IDlINmMtLjYgMC0xIC41LTEgMXY0YzAgLjUuNCAxIDEgMWgzYy42IDAgMS0uNSAxLTF2LTJIOC41djEuNWgtMnYtM0gxMFYxMGMwLS41LS40LTEtMS0xem0xMCAxLjVWOWgtNC41djZIMTZ2LTJoMnYtMS41aC0ydi0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRlIj48cGF0aCBkPSJNMTIgMTcuMjdMMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVscCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTdoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDEyLjkgMTMgMTMuNSAxMyAxNWgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlbHAtb3V0bGluZSI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoaXN0b3J5Ij48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvbWUiPjxwYXRoIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWZ1bGwiPjxwYXRoIGQ9Ik02IDJ2NmguMDFMNiA4LjAxIDEwIDEybC00IDQgLjAxLjAxSDZWMjJoMTJ2LTUuOTloLS4wMUwxOCAxNmwtNC00IDQtMy45OS0uMDEtLjAxSDE4VjJINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJodHRwIj48cGF0aCBkPSJNNC41IDExaC0yVjlIMXY2aDEuNXYtMi41aDJWMTVINlY5SDQuNXYyem0yLjUtLjVoMS41VjE1SDEwdi00LjVoMS41VjlIN3YxLjV6bTUuNSAwSDE0VjE1aDEuNXYtNC41SDE3VjloLTQuNXYxLjV6bTktMS41SDE4djZoMS41di0yaDJjLjggMCAxLjUtLjcgMS41LTEuNXYtMWMwLS44LS43LTEuNS0xLjUtMS41em0wIDIuNWgtMnYtMWgydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltcG9ydGFudC1kZXZpY2VzIj48cGF0aCBkPSJNMjMgMTEuMDFMMTggMTFjLS41NSAwLTEgLjQ1LTEgMXY5YzAgLjU1LjQ1IDEgMSAxaDVjLjU1IDAgMS0uNDUgMS0xdi05YzAtLjU1LS40NS0uOTktMS0uOTl6TTIzIDIwaC01di03aDV2N3pNMjAgMkgyQy44OSAyIDAgMi44OSAwIDR2MTJjMCAxLjEuODkgMiAyIDJoN3YySDd2Mmg4di0yaC0ydi0yaDJ2LTJIMlY0aDE4djVoMlY0YzAtMS4xMS0uOS0yLTItMnptLTguMDMgN0wxMSA2bC0uOTcgM0g3bDIuNDcgMS43Ni0uOTQgMi45MSAyLjQ3LTEuOCAyLjQ3IDEuOC0uOTQtMi45MUwxNSA5aC0zLjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluYm94Ij48cGF0aCBkPSJNMTkgM0g0Ljk5Yy0xLjExIDAtMS45OC44OS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xMS0uOS0yLTItMnptMCAxMmgtNGMwIDEuNjYtMS4zNSAzLTMgM3MtMy0xLjM0LTMtM0g0Ljk5VjVIMTl2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8tb3V0bGluZSI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbnZlcnQtY29sb3JzIj48cGF0aCBkPSJNMTcuNjYgNy45M0wxMiAyLjI3IDYuMzQgNy45M2MtMy4xMiAzLjEyLTMuMTIgOC4xOSAwIDExLjMxQzcuOSAyMC44IDkuOTUgMjEuNTggMTIgMjEuNThjMi4wNSAwIDQuMS0uNzggNS42Ni0yLjM0IDMuMTItMy4xMiAzLjEyLTguMTkgMC0xMS4zMXpNMTIgMTkuNTljLTEuNiAwLTMuMTEtLjYyLTQuMjQtMS43NkM2LjYyIDE2LjY5IDYgMTUuMTkgNiAxMy41OXMuNjItMy4xMSAxLjc2LTQuMjRMMTIgNS4xdjE0LjQ5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhYmVsIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5ndWFnZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXN0LXBhZ2UiPjxwYXRoIGQ9Ik01LjU5IDcuNDFMMTAuMTggMTJsLTQuNTkgNC41OUw3IDE4bDYtNi02LTZ6TTE2IDZoMnYxMmgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaWdodGJ1bGItb3V0bGluZSI+PHBhdGggZD0iTTkgMjFjMCAuNTUuNDUgMSAxIDFoNGMuNTUgMCAxLS40NSAxLTF2LTFIOXYxem0zLTE5QzguMTQgMiA1IDUuMTQgNSA5YzAgMi4zOCAxLjE5IDQuNDcgMyA1Ljc0VjE3YzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xdi0yLjI2YzEuODEtMS4yNyAzLTMuMzYgMy01Ljc0IDAtMy44Ni0zLjE0LTctNy03em0yLjg1IDExLjFsLS44NS42VjE2aC00di0yLjNsLS44NS0uNkM3LjggMTIuMTYgNyAxMC42MyA3IDljMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWMwIDEuNjMtLjggMy4xNi0yLjE1IDQuMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXN0eWxlIj48cGF0aCBkPSJNMyAxNmg1di0ySDN2MnptNi41IDBoNXYtMmgtNXYyem02LjUgMGg1di0yaC01djJ6TTMgMjBoMnYtMkgzdjJ6bTQgMGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnpNMyAxMmg4di0ySDN2MnptMTAgMGg4di0yaC04djJ6TTMgNHY0aDE4VjRIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxpc3QiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTAtOGgyVjdIM3Yyem00IDRoMTR2LTJIN3Yyem0wIDRoMTR2LTJIN3Yyek03IDd2MmgxNFY3SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jay1vcGVuIj48cGF0aCBkPSJNMTIgMTdjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2aDEuOWMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bTAgMTJINlYxMGgxMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMiAxN2MxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTYtOWgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yek04LjkgNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMXMzLjEgMS4zOSAzLjEgMy4xdjJIOC45VjZ6TTE4IDIwSDZWMTBoMTJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3lhbHR5Ij48cGF0aCBkPSJNMjEuNDEgMTEuNThsLTktOUMxMi4wNSAyLjIyIDExLjU1IDIgMTEgMkg0Yy0xLjEgMC0yIC45LTIgMnY3YzAgLjU1LjIyIDEuMDUuNTkgMS40Mmw5IDljLjM2LjM2Ljg2LjU4IDEuNDEuNTguNTUgMCAxLjA1LS4yMiAxLjQxLS41OWw3LTdjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLS41NS0uMjMtMS4wNi0uNTktMS40MnpNNS41IDdDNC42NyA3IDQgNi4zMyA0IDUuNVM0LjY3IDQgNS41IDQgNyA0LjY3IDcgNS41IDYuMzMgNyA1LjUgN3ptMTEuNzcgOC4yN0wxMyAxOS41NGwtNC4yNy00LjI3QzguMjggMTQuODEgOCAxNC4xOSA4IDEzLjVjMC0xLjM4IDEuMTItMi41IDIuNS0yLjUuNjkgMCAxLjMyLjI4IDEuNzcuNzRsLjczLjcyLjczLS43M2MuNDUtLjQ1IDEuMDgtLjczIDEuNzctLjczIDEuMzggMCAyLjUgMS4xMiAyLjUgMi41IDAgLjY5LS4yOCAxLjMyLS43MyAxLjc3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1haWwiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFya3VucmVhZC1tYWlsYm94Ij48cGF0aCBkPSJNMjAgNkgxMHY2SDhWNGg2VjBINnY2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtZW51Ij48cGF0aCBkPSJNMyAxOGgxOHYtMkgzdjJ6bTAtNWgxOHYtMkgzdjJ6bTAtN3YyaDE4VjZIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLXZlcnQiPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3RvcmN5Y2xlIj48cGF0aCBkPSJNMTkuNDQgOS4wM0wxNS40MSA1SDExdjJoMy41OWwyIDJINWMtMi44IDAtNSAyLjItNSA1czIuMiA1IDUgNWMyLjQ2IDAgNC40NS0xLjY5IDQuOS00aDEuNjVsMi43Ny0yLjc3Yy0uMjEuNTQtLjMyIDEuMTQtLjMyIDEuNzcgMCAyLjggMi4yIDUgNSA1czUtMi4yIDUtNWMwLTIuNjUtMS45Ny00Ljc3LTQuNTYtNC45N3pNNy44MiAxNUM3LjQgMTYuMTUgNi4yOCAxNyA1IDE3Yy0xLjYzIDAtMy0xLjM3LTMtM3MxLjM3LTMgMy0zYzEuMjggMCAyLjQuODUgMi44MiAySDV2MmgyLjgyek0xOSAxN2MtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtMyAzIDEuMzQgMyAzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5leHQtd2VlayI+PHBhdGggZD0iTTIwIDdoLTRWNWMwLS41NS0uMjItMS4wNS0uNTktMS40MUMxNS4wNSAzLjIyIDE0LjU1IDMgMTQgM2gtNGMtMS4xIDAtMiAuOS0yIDJ2Mkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjljMC0xLjEtLjktMi0yLTJ6TTEwIDVoNHYyaC00VjV6bTEgMTMuNWwtMS0xIDMtMy0zLTMgMS0xIDQgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibm90ZS1hZGQiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTRoLTN2M2gtMnYtM0g4di0yaDN2LTNoMnYzaDN2MnptLTMtN1YzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wYWNpdHkiPjxwYXRoIGQ9Ik0xNy42NiA4TDEyIDIuMzUgNi4zNCA4QzQuNzggOS41NiA0IDExLjY0IDQgMTMuNjRzLjc4IDQuMTEgMi4zNCA1LjY3IDMuNjEgMi4zNSA1LjY2IDIuMzUgNC4xLS43OSA1LjY2LTIuMzVTMjAgMTUuNjQgMjAgMTMuNjQgMTkuMjIgOS41NiAxNy42NiA4ek02IDE0Yy4wMS0yIC42Mi0zLjI3IDEuNzYtNC40TDEyIDUuMjdsNC4yNCA0LjM4QzE3LjM4IDEwLjc3IDE3Ljk5IDEyIDE4IDE0SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi1pbi1icm93c2VyIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjExIDAtMiAuOS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNHYtMkg1VjhoMTR2MTBoLTR2Mmg0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjg5LTItMi0yem0tNyA2bC00IDRoM3Y2aDJ2LTZoM2wtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi13aXRoIj48cGF0aCBkPSJNMTAgOWg0VjZoM2wtNS01LTUgNWgzdjN6bS0xIDFINlY3bC01IDUgNSA1di0zaDN2LTR6bTE0IDJsLTUtNXYzaC0zdjRoM3YzbDUtNXptLTkgM2gtNHYzSDdsNSA1IDUtNWgtM3YtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwYWdldmlldyI+PHBhdGggZD0iTTExLjUgOUMxMC4xMiA5IDkgMTAuMTIgOSAxMS41czEuMTIgMi41IDIuNSAyLjUgMi41LTEuMTIgMi41LTIuNVMxMi44OCA5IDExLjUgOXpNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS0zLjIxIDE0LjIxbC0yLjkxLTIuOTFjLS42OS40NC0xLjUxLjctMi4zOS43QzkuMDEgMTYgNyAxMy45OSA3IDExLjVTOS4wMSA3IDExLjUgNyAxNiA5LjAxIDE2IDExLjVjMCAuODgtLjI2IDEuNjktLjcgMi4zOWwyLjkxIDIuOS0xLjQyIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYXltZW50Ij48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tY2FtZXJhLW1pYyI+PHBhdGggZD0iTTIwIDVoLTMuMTdMMTUgM0g5TDcuMTcgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2LTIuMDljLTIuODMtLjQ4LTUtMi45NC01LTUuOTFoMmMwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00aDJjMCAyLjk3LTIuMTcgNS40My01IDUuOTFWMjFoN2MxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tNiA4YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tZGF0YS1zZXR0aW5nIj48cGF0aCBkPSJNMTguOTkgMTEuNWMuMzQgMCAuNjcuMDMgMSAuMDdMMjAgMCAwIDIwaDExLjU2Yy0uMDQtLjMzLS4wNy0uNjYtLjA3LTEgMC00LjE0IDMuMzYtNy41IDcuNS03LjV6bTMuNzEgNy45OWMuMDItLjE2LjA0LS4zMi4wNC0uNDkgMC0uMTctLjAxLS4zMy0uMDQtLjQ5bDEuMDYtLjgzYy4wOS0uMDguMTItLjIxLjA2LS4zMmwtMS0xLjczYy0uMDYtLjExLS4xOS0uMTUtLjMxLS4xMWwtMS4yNC41Yy0uMjYtLjItLjU0LS4zNy0uODUtLjQ5bC0uMTktMS4zMmMtLjAxLS4xMi0uMTItLjIxLS4yNC0uMjFoLTJjLS4xMiAwLS4yMy4wOS0uMjUuMjFsLS4xOSAxLjMyYy0uMy4xMy0uNTkuMjktLjg1LjQ5bC0xLjI0LS41Yy0uMTEtLjA0LS4yNCAwLS4zMS4xMWwtMSAxLjczYy0uMDYuMTEtLjA0LjI0LjA2LjMybDEuMDYuODNjLS4wMi4xNi0uMDMuMzItLjAzLjQ5IDAgLjE3LjAxLjMzLjAzLjQ5bC0xLjA2LjgzYy0uMDkuMDgtLjEyLjIxLS4wNi4zMmwxIDEuNzNjLjA2LjExLjE5LjE1LjMxLjExbDEuMjQtLjVjLjI2LjIuNTQuMzcuODUuNDlsLjE5IDEuMzJjLjAyLjEyLjEyLjIxLjI1LjIxaDJjLjEyIDAgLjIzLS4wOS4yNS0uMjFsLjE5LTEuMzJjLjMtLjEzLjU5LS4yOS44NC0uNDlsMS4yNS41Yy4xMS4wNC4yNCAwIC4zMS0uMTFsMS0xLjczYy4wNi0uMTEuMDMtLjI0LS4wNi0uMzJsLTEuMDctLjgzem0tMy43MSAxLjAxYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWRldmljZS1pbmZvcm1hdGlvbiI+PHBhdGggZD0iTTEzIDdoLTJ2MmgyVjd6bTAgNGgtMnY2aDJ2LTZ6bTQtOS45OUw3IDFjLTEuMSAwLTIgLjktMiAydjE4YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tbWVkaWEiPjxwYXRoIGQ9Ik0yIDZIMHY1aC4wMUwwIDIwYzAgMS4xLjkgMiAyIDJoMTh2LTJIMlY2em0yMC0yaC04bC0yLTJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnpNNyAxNWw0LjUtNiAzLjUgNC41MSAyLjUtMy4wMUwyMSAxNUg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tcGhvbmUtbXNnIj48cGF0aCBkPSJNMjAgMTUuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTEyIDN2MTBsMy0zaDZWM2gtOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGV0cyI+PGNpcmNsZSBjeD0iNC41IiBjeT0iOS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTUiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTkuNSIgY3k9IjkuNSIgcj0iMi41Ij48L2NpcmNsZT48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlIj48cGF0aCBkPSJNMTkgN2gtOHY2aDhWN3ptMi00SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4VjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk4aDE4djE0LjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZS1hbHQiPjxwYXRoIGQ9Ik0xOSAxMWgtOHY2aDh2LTZ6bTQgOFY0Ljk4QzIzIDMuODggMjIuMSAzIDIxIDNIM2MtMS4xIDAtMiAuODgtMiAxLjk4VjE5YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6bS0yIC4wMkgzVjQuOTdoMTh2MTQuMDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvbHltZXIiPjxwYXRoIGQ9Ik0xOSA0aC00TDcuMTEgMTYuNjMgNC41IDEyIDkgNEg1TC41IDEyIDUgMjBoNGw3Ljg5LTEyLjYzTDE5LjUgMTIgMTUgMjBoNGw0LjUtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3dlci1zZXR0aW5ncy1uZXciPjxwYXRoIGQ9Ik0xMyAzaC0ydjEwaDJWM3ptNC44MyAyLjE3bC0xLjQyIDEuNDJDMTcuOTkgNy44NiAxOSA5LjgxIDE5IDEyYzAgMy44Ny0zLjEzIDctNyA3cy03LTMuMTMtNy03YzAtMi4xOSAxLjAxLTQuMTQgMi41OC01LjQyTDYuMTcgNS4xN0M0LjIzIDYuODIgMyA5LjI2IDMgMTJjMCA0Ljk3IDQuMDMgOSA5IDlzOS00LjAzIDktOWMwLTIuNzQtMS4yMy01LjE4LTMuMTctNi44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmludCI+PHBhdGggZD0iTTE5IDhINWMtMS42NiAwLTMgMS4zNC0zIDN2Nmg0djRoMTJ2LTRoNHYtNmMwLTEuNjYtMS4zNC0zLTMtM3ptLTMgMTFIOHYtNWg4djV6bTMtN2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0tMS05SDZ2NGgxMlYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InF1ZXJ5LWJ1aWxkZXIiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmFkaW8tYnV0dG9uLWNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiA3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1IDUtMi4yNCA1LTUtMi4yNC01LTUtNXptMC01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyYWRpby1idXR0b24tdW5jaGVja2VkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWNvcmQtdm9pY2Utb3ZlciI+PGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjQiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkZWVtIj48cGF0aCBkPSJNMjAgNmgtMi4xOGMuMTEtLjMxLjE4LS42NS4xOC0xIDAtMS42Ni0xLjM0LTMtMy0zLTEuMDUgMC0xLjk2LjU0LTIuNSAxLjM1bC0uNS42Ny0uNS0uNjhDMTAuOTYgMi41NCAxMC4wNSAyIDkgMiA3LjM0IDIgNiAzLjM0IDYgNWMwIC4zNS4wNy42OS4xOCAxSDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTUtMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xek05IDRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDUuMDhMNyAxMC44MyA4LjYyIDEyIDExIDguNzZsMS0xLjM2IDEgMS4zNkwxNS4zOCAxMiAxNyAxMC44MyAxNC45MiA4SDIwdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkbyI+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlIj48cGF0aCBkPSJNMTkgMTNINXYtMmgxNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExSDd2LTJoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTIyLjczIDIyLjczTDIuNzcgMi43NyAyIDJsLS43My0uNzNMMCAyLjU0bDQuMzkgNC4zOSAyLjIxIDQuNjYtMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDcuNDZsMS4zOCAxLjM4Yy0uNS4zNi0uODMuOTUtLjgzIDEuNjIgMCAxLjEuODkgMiAxLjk5IDIgLjY3IDAgMS4yNi0uMzMgMS42Mi0uODRMMjEuNDYgMjRsMS4yNy0xLjI3ek03LjQyIDE1Yy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoMi4zNmwyIDJINy40MnptOC4xMy0yYy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg2LjU0bDkuMDEgOXpNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW9yZGVyIj48cGF0aCBkPSJNMyAxNWgxOHYtMkgzdjJ6bTAgNGgxOHYtMkgzdjJ6bTAtOGgxOFY5SDN2MnptMC02djJoMThWNUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5LWFsbCI+PHBhdGggZD0iTTcgOFY1bC03IDcgNyA3di0zbC00LTQgNC00em02IDFWNWwtNyA3IDcgN3YtNC4xYzUgMCA4LjUgMS42IDExIDUuMS0xLTUtNC0xMC0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQiPjxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXN0b3JlIj48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlc3RvcmUtcGFnZSI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptLTIgMTZjLTIuMDUgMC0zLjgxLTEuMjQtNC41OC0zaDEuNzFjLjYzLjkgMS42OCAxLjUgMi44NyAxLjUgMS45MyAwIDMuNS0xLjU3IDMuNS0zLjVTMTMuOTMgOS41IDEyIDkuNWMtMS4zNSAwLTIuNTIuNzgtMy4xIDEuOWwxLjYgMS42aC00VjlsMS4zIDEuM0M4LjY5IDguOTIgMTAuMjMgOCAxMiA4YzIuNzYgMCA1IDIuMjQgNSA1cy0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3VuZGVkLWNvcm5lciI+PHBhdGggZD0iTTE5IDE5aDJ2MmgtMnYtMnptMC0yaDJ2LTJoLTJ2MnpNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem04IDE2aDJ2LTJoLTJ2MnptLTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bS04IDBoMnYtMkg3djJ6bS00IDBoMnYtMkgzdjJ6TTIxIDhjMC0yLjc2LTIuMjQtNS01LTVoLTV2Mmg1YzEuNjUgMCAzIDEuMzUgMyAzdjVoMlY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvd2luZyI+PHBhdGggZD0iTTguNSAxNC41TDQgMTlsMS41IDEuNUw5IDE3aDJsLTIuNS0yLjV6TTE1IDFjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDIwLjAxTDE4IDI0bC0yLjk5LTMuMDFWMTkuNWwtNy4xLTcuMDljLS4zMS4wNS0uNjEuMDctLjkxLjA3di0yLjE2YzEuNjYuMDMgMy42MS0uODcgNC42Ny0yLjA0bDEuNC0xLjU1Yy4xOS0uMjEuNDMtLjM4LjY5LS41LjI5LS4xNC42Mi0uMjMuOTYtLjIzaC4wM0MxNS45OSA2LjAxIDE3IDcuMDIgMTcgOC4yNnY1Ljc1YzAgLjg0LS4zNSAxLjYxLS45MiAyLjE2bC0zLjU4LTMuNTh2LTIuMjdjLS42My41Mi0xLjQzIDEuMDItMi4yOSAxLjM5TDE2LjUgMThIMThsMyAzLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzY2hlZHVsZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzZWFyY2giPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZW5kIj48cGF0aCBkPSJNMi4wMSAyMUwyMyAxMiAyLjAxIDMgMiAxMGwxNSAyLTE1IDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmFja3VwLXJlc3RvcmUiPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmx1ZXRvb3RoIj48cGF0aCBkPSJNMTEgMjRoMnYtMmgtMnYyem0tNCAwaDJ2LTJIN3Yyem04IDBoMnYtMmgtMnYyem0yLjcxLTE4LjI5TDEyIDBoLTF2Ny41OUw2LjQxIDMgNSA0LjQxIDEwLjU5IDEwIDUgMTUuNTkgNi40MSAxNyAxMSAxMi40MVYyMGgxbDUuNzEtNS43MS00LjMtNC4yOSA0LjMtNC4yOXpNMTMgMy44M2wxLjg4IDEuODhMMTMgNy41OVYzLjgzem0xLjg4IDEwLjQ2TDEzIDE2LjE3di0zLjc2bDEuODggMS44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtY2VsbCI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6TTE2IC4wMUw4IDBDNi45IDAgNiAuOSA2IDJ2MTZjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE2SDhWNGg4djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWV0aGVybmV0Ij48cGF0aCBkPSJNNy43NyA2Ljc2TDYuMjMgNS40OC44MiAxMmw1LjQxIDYuNTIgMS41NC0xLjI4TDMuNDIgMTJsNC4zNS01LjI0ek03IDEzaDJ2LTJIN3Yyem0xMC0yaC0ydjJoMnYtMnptLTYgMmgydi0yaC0ydjJ6bTYuNzctNy41MmwtMS41NCAxLjI4TDIwLjU4IDEybC00LjM1IDUuMjQgMS41NCAxLjI4TDIzLjE4IDEybC01LjQxLTYuNTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvbmVudCI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb3NpdGUiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LXN2aWRlbyI+PHBhdGggZD0iTTggMTEuNWMwLS44My0uNjctMS41LTEuNS0xLjVTNSAxMC42NyA1IDExLjUgNS42NyAxMyA2LjUgMTMgOCAxMi4zMyA4IDExLjV6bTctNWMwLS44My0uNjctMS41LTEuNS0xLjVoLTNDOS42NyA1IDkgNS42NyA5IDYuNVM5LjY3IDggMTAuNSA4aDNjLjgzIDAgMS41LS42NyAxLjUtMS41ek04LjUgMTVjLS44MyAwLTEuNS42Ny0xLjUgMS41UzcuNjcgMTggOC41IDE4czEuNS0uNjcgMS41LTEuNVM5LjMzIDE1IDguNSAxNXpNMTIgMUM1LjkzIDEgMSA1LjkzIDEgMTJzNC45MyAxMSAxMSAxMSAxMS00LjkzIDExLTExUzE4LjA3IDEgMTIgMXptMCAyMGMtNC45NiAwLTktNC4wNC05LTlzNC4wNC05IDktOSA5IDQuMDQgOSA5LTQuMDQgOS05IDl6bTUuNS0xMWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bS0yIDVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLW92ZXJzY2FuIj48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcG93ZXIiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem0yLTIyaC0ydjEwaDJWMnptMy41NiAyLjQ0bC0xLjQ1IDEuNDVDMTYuODQgNi45NCAxOCA4LjgzIDE4IDExYzAgMy4zMS0yLjY5IDYtNiA2cy02LTIuNjktNi02YzAtMi4xNyAxLjE2LTQuMDYgMi44OC01LjEyTDcuNDQgNC40NEM1LjM2IDUuODggNCA4LjI4IDQgMTFjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOGMwLTIuNzItMS4zNi01LjEyLTMuNDQtNi41NnpNMTUgMjRoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXJlbW90ZSI+PHBhdGggZD0iTTE1IDlIOWMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjEwYzAtLjU1LS40NS0xLTEtMXptLTMgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTcuMDUgNi4wNWwxLjQxIDEuNDFDOS4zNyA2LjU2IDEwLjYyIDYgMTIgNnMyLjYzLjU2IDMuNTQgMS40NmwxLjQxLTEuNDFDMTUuNjggNC43OCAxMy45MyA0IDEyIDRzLTMuNjguNzgtNC45NSAyLjA1ek0xMiAwQzguOTYgMCA2LjIxIDEuMjMgNC4yMiAzLjIybDEuNDEgMS40MUM3LjI2IDMuMDEgOS41MSAyIDEyIDJzNC43NCAxLjAxIDYuMzYgMi42NGwxLjQxLTEuNDFDMTcuNzkgMS4yMyAxNS4wNCAwIDEyIDB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3AiPjxwYXRoIGQ9Ik0xNiA2VjRjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDJ2MTNjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmgtNnptLTYtMmg0djJoLTRWNHpNOSAxOFY5bDcuNSA0TDkgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcC10d28iPjxwYXRoIGQ9Ik0zIDlIMXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMkgzVjl6bTE1LTRWM2MwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMlY1aC01em0tNi0yaDR2MmgtNFYzem0wIDEyVjhsNS41IDMtNS41IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik03IDE4Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yek0xIDJ2MmgybDMuNiA3LjU5LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmgxMnYtMkg3LjQyYy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINS4yMWwtLjk0LTJIMXptMTYgMTZjLTEuMSAwLTEuOTkuOS0xLjk5IDJzLjg5IDIgMS45OSAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNvcnQiPjxwYXRoIGQ9Ik0zIDE4aDZ2LTJIM3Yyek0zIDZ2MmgxOFY2SDN6bTAgN2gxMnYtMkgzdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWFrZXItbm90ZXMtb2ZmIj48cGF0aCBkPSJNMTAuNTQgMTFsLS41NC0uNTRMNy41NCA4IDYgNi40NiAyLjM4IDIuODQgMS4yNyAxLjczIDAgM2wyLjAxIDIuMDFMMiAyMmw0LTRoOWw1LjczIDUuNzNMMjIgMjIuNDYgMTcuNTQgMThsLTctN3pNOCAxNEg2di0yaDJ2MnptLTItM1Y5bDIgMkg2em0xNC05SDQuMDhMMTAgNy45MlY2aDh2MmgtNy45MmwxIDFIMTh2MmgtNC45Mmw2Ljk5IDYuOTlDMjEuMTQgMTcuOTUgMjIgMTcuMDggMjIgMTZWNGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVsbGNoZWNrIj48cGF0aCBkPSJNMTIuNDUgMTZoMi4wOUw5LjQzIDNINy41N0wyLjQ2IDE2aDIuMDlsMS4xMi0zaDUuNjRsMS4xNCAzem0tNi4wMi01TDguNSA1LjQ4IDEwLjU3IDExSDYuNDN6bTE1LjE2LjU5bC04LjA5IDguMDlMOS44MyAxNmwtMS40MSAxLjQxIDUuMDkgNS4wOUwyMyAxM2wtMS40MS0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyLWJvcmRlciI+PHBhdGggZD0iTTIyIDkuMjRsLTcuMTktLjYyTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMSAxMiAxNy4yNyAxOC4xOCAyMWwtMS42My03LjAzTDIyIDkuMjR6TTEyIDE1LjRsLTMuNzYgMi4yNyAxLTQuMjgtMy4zMi0yLjg4IDQuMzgtLjM4TDEyIDYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3Rhci1oYWxmIj48cGF0aCBkPSJNMjIgOS4yNGwtNy4xOS0uNjJMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxIDEyIDE3LjI3IDE4LjE4IDIxbC0xLjYzLTcuMDNMMjIgOS4yNHpNMTIgMTUuNFY2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RvcmUiPjxwYXRoIGQ9Ik0yMCA0SDR2MmgxNlY0em0xIDEwdi0ybC0xLTVINGwtMSA1djJoMXY2aDEwdi02aDR2Nmgydi02aDF6bS05IDRINnYtNGg2djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViZGlyZWN0b3J5LWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xMSA5bDEuNDIgMS40Mkw4LjgzIDE0SDE4VjRoMnYxMkg4LjgzbDMuNTkgMy41OEwxMSAyMWwtNi02IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViamVjdCI+PHBhdGggZD0iTTE0IDE3SDR2MmgxMHYtMnptNi04SDR2MmgxNlY5ek00IDE1aDE2di0ySDR2MnpNNCA1djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1cGVydmlzb3ItYWNjb3VudCI+PHBhdGggZD0iTTE2LjUgMTJjMS4zOCAwIDIuNDktMS4xMiAyLjQ5LTIuNVMxNy44OCA3IDE2LjUgN0MxNS4xMiA3IDE0IDguMTIgMTQgOS41czEuMTIgMi41IDIuNSAyLjV6TTkgMTFjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNTMTAuNjYgNSA5IDVDNy4zNCA1IDYgNi4zNCA2IDhzMS4zNCAzIDMgM3ptNy41IDNjLTEuODMgMC01LjUuOTItNS41IDIuNzVWMTloMTF2LTIuMjVjMC0xLjgzLTMuNjctMi43NS01LjUtMi43NXpNOSAxM2MtMi4zMyAwLTcgMS4xNy03IDMuNVYxOWg3di0yLjI1YzAtLjg1LjMzLTIuMzQgMi4zNy0zLjQ3QzEwLjUgMTMuMSA5LjY2IDEzIDkgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnQiPjxwYXRoIGQ9Ik0xNiAxNy4wMVYxMGgtMnY3LjAxaC0zTDE1IDIxbDQtMy45OWgtM3pNOSAzTDUgNi45OWgzVjE0aDJWNi45OWgzTDkgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnRpY2FsLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTYuNSA5TDEwIDUuNSAxMy41IDlIMTF2NEg5VjlINi41em0xMSA2TDE0IDE4LjUgMTAuNSAxNUgxM3YtNGgydjRoMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhYiI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFiLXVuc2VsZWN0ZWQiPjxwYXRoIGQ9Ik0xIDloMlY3SDF2MnptMCA0aDJ2LTJIMXYyem0wLThoMlYzYy0xLjEgMC0yIC45LTIgMnptOCAxNmgydi0ySDl2MnptLTgtNGgydi0ySDF2MnptMiA0di0ySDFjMCAxLjEuOSAyIDIgMnpNMjEgM2gtOHY2aDEwVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTRoMnYtMmgtMnYyek05IDVoMlYzSDl2MnpNNSAyMWgydi0ySDV2MnpNNSA1aDJWM0g1djJ6bTE2IDE2YzEuMSAwIDItLjkgMi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRoZWF0ZXJzIj48cGF0aCBkPSJNMTggM3YyaC0yVjNIOHYySDZWM0g0djE4aDJ2LTJoMnYyaDh2LTJoMnYyaDJWM2gtMnpNOCAxN0g2di0yaDJ2MnptMC00SDZ2LTJoMnYyem0wLTRINlY3aDJ2MnptMTAgOGgtMnYtMmgydjJ6bTAtNGgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYi1kb3duIj48cGF0aCBkPSJNMTUgM0g2Yy0uODMgMC0xLjU0LjUtMS44NCAxLjIybC0zLjAyIDcuMDVjLS4wOS4yMy0uMTQuNDctLjE0LjczdjEuOTFsLjAxLjAxTDEgMTRjMCAxLjEuOSAyIDIgMmg2LjMxbC0uOTUgNC41Ny0uMDMuMzJjMCAuNDEuMTcuNzkuNDQgMS4wNkw5LjgzIDIzbDYuNTktNi41OWMuMzYtLjM2LjU4LS44Ni41OC0xLjQxVjVjMC0xLjEtLjktMi0yLTJ6bTQgMHYxMmg0VjNoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYnMtdXAtZG93biI+PHBhdGggZD0iTTEyIDZjMC0uNTUtLjQ1LTEtMS0xSDUuODJsLjY2LTMuMTguMDItLjIzYzAtLjMxLS4xMy0uNTktLjMzLS44TDUuMzggMCAuNDQgNC45NEMuMTcgNS4yMSAwIDUuNTkgMCA2djYuNWMwIC44My42NyAxLjUgMS41IDEuNWg2Ljc1Yy42MiAwIDEuMTUtLjM4IDEuMzgtLjkxbDIuMjYtNS4yOWMuMDctLjE3LjExLS4zNi4xMS0uNTVWNnptMTAuNSA0aC02Ljc1Yy0uNjIgMC0xLjE1LjM4LTEuMzguOTFsLTIuMjYgNS4yOWMtLjA3LjE3LS4xMS4zNi0uMTEuNTVWMThjMCAuNTUuNDUgMSAxIDFoNS4xOGwtLjY2IDMuMTgtLjAyLjI0YzAgLjMxLjEzLjU5LjMzLjhsLjc5Ljc4IDQuOTQtNC45NGMuMjctLjI3LjQ0LS42NS40NC0xLjA2di02LjVjMC0uODMtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVsaW5lIj48cGF0aCBkPSJNMjMgOGMwIDEuMS0uOSAyLTIgMi0uMTggMC0uMzUtLjAyLS41MS0uMDdsLTMuNTYgMy41NWMuMDUuMTYuMDcuMzQuMDcuNTIgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yYzAtLjE4LjAyLS4zNi4wNy0uNTJsLTIuNTUtMi41NWMtLjE2LjA1LS4zNC4wNy0uNTIuMDdzLS4zNi0uMDItLjUyLS4wN2wtNC41NSA0LjU2Yy4wNS4xNi4wNy4zMy4wNy41MSAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTJjLjE4IDAgLjM1LjAyLjUxLjA3bDQuNTYtNC41NUM4LjAyIDkuMzYgOCA5LjE4IDggOWMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgLjE4LS4wMi4zNi0uMDcuNTJsMi41NSAyLjU1Yy4xNi0uMDUuMzQtLjA3LjUyLS4wN3MuMzYuMDIuNTIuMDdsMy41NS0zLjU2QzE5LjAyIDguMzUgMTkgOC4xOCAxOSA4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2RheSI+PHBhdGggZD0iTTE5IDNoLTFWMWgtMnYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOGgxNHYxMXpNNyAxMGg1djVIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2xsIj48cGF0aCBkPSJNMTUgNGMtNC40MiAwLTggMy41OC04IDhzMy41OCA4IDggOCA4LTMuNTggOC04LTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2ek0zIDEyYzAtMi42MSAxLjY3LTQuODMgNC01LjY1VjQuMjZDMy41NSA1LjE1IDEgOC4yNyAxIDEyczIuNTUgNi44NSA2IDcuNzR2LTIuMDljLTIuMzMtLjgyLTQtMy4wNC00LTUuNjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhY2stY2hhbmdlcyI+PHBhdGggZD0iTTE5LjA3IDQuOTNsLTEuNDEgMS40MUMxOS4xIDcuNzkgMjAgOS43OSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHMtOC0zLjU4LTgtOGMwLTQuMDggMy4wNS03LjQ0IDctNy45M3YyLjAyQzguMTYgNi41NyA2IDkuMDMgNiAxMmMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMS42Ni0uNjctMy4xNi0xLjc2LTQuMjRsLTEuNDEgMS40MUMxNS41NSA5LjkgMTYgMTAuOSAxNiAxMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNGMwLTEuODYgMS4yOC0zLjQxIDMtMy44NnYyLjE0Yy0uNi4zNS0xIC45OC0xIDEuNzIgMCAxLjEuOSAyIDIgMnMyLS45IDItMmMwLS43NC0uNC0xLjM4LTEtMS43MlYyaC0xQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBjMC0yLjc2LTEuMTItNS4yNi0yLjkzLTcuMDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhbnNsYXRlIj48cGF0aCBkPSJNMTIuODcgMTUuMDdsLTIuNTQtMi41MS4wMy0uMDNjMS43NC0xLjk0IDIuOTgtNC4xNyAzLjcxLTYuNTNIMTdWNGgtN1YySDh2MkgxdjEuOTloMTEuMTdDMTEuNSA3LjkyIDEwLjQ0IDkuNzUgOSAxMS4zNSA4LjA3IDEwLjMyIDcuMyA5LjE5IDYuNjkgOGgtMmMuNzMgMS42MyAxLjczIDMuMTcgMi45OCA0LjU2bC01LjA5IDUuMDJMNCAxOWw1LTUgMy4xMSAzLjExLjc2LTIuMDR6TTE4LjUgMTBoLTJMMTIgMjJoMmwxLjEyLTNoNC43NUwyMSAyMmgybC00LjUtMTJ6bS0yLjYyIDdsMS42Mi00LjMzTDE5LjEyIDE3aC0zLjI0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy1mbGF0Ij48cGF0aCBkPSJNMjIgMTJsLTQtNHYzSDN2MmgxNXYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLXVwIj48cGF0aCBkPSJNMTYgNmwyLjI5IDIuMjktNC44OCA0Ljg4LTQtNEwyIDE2LjU5IDMuNDEgMThsNi02IDQgNCA2LjMtNi4yOUwyMiAxMlY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dXJuZWQtaW4tbm90Ij48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yem0wIDE1bC01LTIuMThMNyAxOFY1aDEwdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuYXJjaGl2ZSI+PHBhdGggZD0iTTIwLjU1IDUuMjJsLTEuMzktMS42OEMxOC44OCAzLjIxIDE4LjQ3IDMgMTggM0g2Yy0uNDcgMC0uODguMjEtMS4xNS41NUwzLjQ2IDUuMjJDMy4xNyA1LjU3IDMgNi4wMSAzIDYuNVYxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDktLjE3LS45My0uNDUtMS4yOHpNMTIgOS41bDUuNSA1LjVIMTR2MmgtNHYtMkg2LjVMMTIgOS41ek01LjEyIDVsLjgyLTFoMTJsLjkzIDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5mb2xkLWxlc3MiPjxwYXRoIGQ9Ik03LjQxIDE4LjU5TDguODMgMjAgMTIgMTYuODMgMTUuMTcgMjBsMS40MS0xLjQxTDEyIDE0bC00LjU5IDQuNTl6bTkuMTgtMTMuMThMMTUuMTcgNCAxMiA3LjE3IDguODMgNCA3LjQxIDUuNDEgMTIgMTBsNC41OS00LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZm9sZC1tb3JlIj48cGF0aCBkPSJNMTIgNS44M0wxNS4xNyA5bDEuNDEtMS40MUwxMiAzIDcuNDEgNy41OSA4LjgzIDkgMTIgNS44M3ptMCAxMi4zNEw4LjgzIDE1bC0xLjQxIDEuNDFMMTIgMjFsNC41OS00LjU5TDE1LjE3IDE1IDEyIDE4LjE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2ZXJpZmllZC11c2VyIj48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bS0yIDE2bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1hZ2VuZGEiPjxwYXRoIGQ9Ik0yMCAxM0gzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTF2LTZjMC0uNTUtLjQ1LTEtMS0xem0wLTEwSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jYXJvdXNlbCI+PHBhdGggZD0iTTcgMTloMTBWNEg3djE1em0tNS0yaDRWNkgydjExek0xOCA2djExaDRWNmgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbHVtbiI+PHBhdGggZD0iTTEwIDE4aDVWNWgtNXYxM3ptLTYgMGg1VjVINHYxM3pNMTYgNXYxM2g1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWhlYWRsaW5lIj48cGF0aCBkPSJNNCAxNWgxNnYtMkg0djJ6bTAgNGgxNnYtMkg0djJ6bTAtOGgxNlY5SDR2MnptMC02djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctbGlzdCI+PHBhdGggZD0iTTQgMTRoNHYtNEg0djR6bTAgNWg0di00SDR2NHpNNCA5aDRWNUg0djR6bTUgNWgxMnYtNEg5djR6bTAgNWgxMnYtNEg5djR6TTkgNXY0aDEyVjVIOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1xdWlsdCI+PHBhdGggZD0iTTEwIDE4aDV2LTZoLTV2NnptLTYgMGg1VjVINHYxM3ptMTIgMGg1di02aC01djZ6TTEwIDV2NmgxMVY1SDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctc3RyZWFtIj48cGF0aCBkPSJNNCAxOGgxN3YtNkg0djZ6TTQgNXY2aDE3VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aXNpYmlsaXR5Ij48cGF0aCBkPSJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpc2liaWxpdHktb2ZmIj48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3YXRjaC1sYXRlciI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem00LjIgMTQuMkwxMSAxM1Y3aDEuNXY1LjJsNC41IDIuNy0uOCAxLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Vla2VuZCI+PHBhdGggZD0iTTIxIDEwYy0xLjEgMC0yIC45LTIgMnYzSDV2LTNjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAydjVjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnYtNWMwLTEuMS0uOS0yLTItMnptLTMtNUg2Yy0xLjEgMC0yIC45LTIgMnYyLjE1YzEuMTYuNDEgMiAxLjUxIDIgMi44MlYxNGgxMnYtMi4wM2MwLTEuMy44NC0yLjQgMi0yLjgyVjdjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InlvdXR1YmUtc2VhcmNoZWQtZm9yIj48cGF0aCBkPSJNMTcuMDEgMTRoLS44bC0uMjctLjI3Yy45OC0xLjE0IDEuNTctMi42MSAxLjU3LTQuMjMgMC0zLjU5LTIuOTEtNi41LTYuNS02LjVzLTYuNSAzLTYuNSA2LjVIMmwzLjg0IDQgNC4xNi00SDYuNTFDNi41MSA3IDguNTMgNSAxMS4wMSA1czQuNSAyLjAxIDQuNSA0LjVjMCAyLjQ4LTIuMDIgNC41LTQuNSA0LjUtLjY1IDAtMS4yNi0uMTQtMS44Mi0uMzhMNy43MSAxNS4xYy45Ny41NyAyLjA5LjkgMy4zLjkgMS42MSAwIDMuMDgtLjU5IDQuMjItMS41N2wuMjcuMjd2Ljc5bDUuMDEgNC45OUwyMiAxOWwtNC45OS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20taW4iPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0em0yLjUtNGgtMnYySDl2LTJIN1Y5aDJWN2gxdjJoMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHZiZS5jb250ZW50KTt2YXIgdDB0PXsiVSswMDA4IjoiYmFja3NwYWNlIiwiVSswMDA5IjoidGFiIiwiVSswMDFCIjoiZXNjIiwiVSswMDIwIjoic3BhY2UiLCJVKzAwN0YiOiJkZWwifSx4YmU9ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0sZTB0PXtzaGlmdDoic2hpZnRLZXkiLGN0cmw6ImN0cmxLZXkiLGFsdDoiYWx0S2V5IixtZXRhOiJtZXRhS2V5In0sYmJlPS9bYS16MC05Kl0vLHdiZT0vVVwrLyxTYmU9L15hcnJvdy8sTWJlPS9ec3BhY2UoYmFyKT8vLEViZT0vXmVzY2FwZSQvO2Z1bmN0aW9uIHIwdChlLHQpe3ZhciByPSIiO2lmKGUpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtuPT09IiAifHxNYmUudGVzdChuKT9yPSJzcGFjZSI6RWJlLnRlc3Qobik/cj0iZXNjIjpuLmxlbmd0aD09MT8oIXR8fGJiZS50ZXN0KG4pKSYmKHI9bik6U2JlLnRlc3Qobik/cj1uLnJlcGxhY2UoImFycm93IiwiIik6bj09Im11bHRpcGx5Ij9yPSIqIjpyPW59cmV0dXJuIHJ9ZnVuY3Rpb24gVGJlKGUpe3ZhciB0PSIiO3JldHVybiBlJiYoZSBpbiB0MHQ/dD10MHRbZV06d2JlLnRlc3QoZSk/KGU9cGFyc2VJbnQoZS5yZXBsYWNlKCJVKyIsIjB4IiksMTYpLHQ9U3RyaW5nLmZyb21DaGFyQ29kZShlKS50b0xvd2VyQ2FzZSgpKTp0PWUudG9Mb3dlckNhc2UoKSksdH1mdW5jdGlvbiBDYmUoZSl7dmFyIHQ9IiI7cmV0dXJuIE51bWJlcihlKSYmKGU+PTY1JiZlPD05MD90PVN0cmluZy5mcm9tQ2hhckNvZGUoMzIrZSk6ZT49MTEyJiZlPD0xMjM/dD0iZiIrKGUtMTEyKzEpOmU+PTQ4JiZlPD01Nz90PVN0cmluZyhlLTQ4KTplPj05NiYmZTw9MTA1P3Q9U3RyaW5nKGUtOTYpOnQ9eGJlW2VdKSx0fWZ1bmN0aW9uIEFiZShlLHQpe3JldHVybiBlLmtleT9yMHQoZS5rZXksdCk6ZS5kZXRhaWwmJmUuZGV0YWlsLmtleT9yMHQoZS5kZXRhaWwua2V5LHQpOlRiZShlLmtleUlkZW50aWZpZXIpfHxDYmUoZS5rZXlDb2RlKXx8IiJ9ZnVuY3Rpb24gbjB0KGUsdCl7dmFyIHI9QWJlKHQsZS5oYXNNb2RpZmllcnMpO3JldHVybiByPT09ZS5rZXkmJighZS5oYXNNb2RpZmllcnN8fCEhdC5zaGlmdEtleT09ISFlLnNoaWZ0S2V5JiYhIXQuY3RybEtleT09ISFlLmN0cmxLZXkmJiEhdC5hbHRLZXk9PSEhZS5hbHRLZXkmJiEhdC5tZXRhS2V5PT0hIWUubWV0YUtleSl9ZnVuY3Rpb24gUGJlKGUpe3JldHVybiBlLmxlbmd0aD09PTE/e2NvbWJvOmUsa2V5OmUsZXZlbnQ6ImtleWRvd24ifTplLnNwbGl0KCIrIikucmVkdWNlKGZ1bmN0aW9uKHQscil7dmFyIG49ci5zcGxpdCgiOiIpLGk9blswXSxvPW5bMV07cmV0dXJuIGkgaW4gZTB0Pyh0W2UwdFtpXV09ITAsdC5oYXNNb2RpZmllcnM9ITApOih0LmtleT1pLHQuZXZlbnQ9b3x8ImtleWRvd24iKSx0fSx7Y29tYm86ZS5zcGxpdCgiOiIpLnNoaWZ0KCl9KX1mdW5jdGlvbiBpMHQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBQYmUodCl9KX12YXIgT289e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxhZGRPd25LZXlCaW5kaW5nOmZ1bmN0aW9uKGUsdCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW2VdPXQsdGhpcy5fcHJlcEtleUJpbmRpbmdzKCksdGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxyZW1vdmVPd25LZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncz17fSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LGtleWJvYXJkRXZlbnRNYXRjaGVzS2V5czpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1pMHQodCksbj0wO248ci5sZW5ndGg7KytuKWlmKG4wdChyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iZWhhdmlvcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUJpbmRpbmdzfSk7cmV0dXJuIGUuaW5kZXhPZih0aGlzLmtleUJpbmRpbmdzKT09PS0xJiZlLnB1c2godGhpcy5rZXlCaW5kaW5ncyksZX0sX3ByZXBLZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2tleUJpbmRpbmdzPXt9LHRoaXMuX2NvbGxlY3RLZXlCaW5kaW5ncygpLmZvckVhY2goZnVuY3Rpb24ocil7Zm9yKHZhciBuIGluIHIpdGhpcy5fYWRkS2V5QmluZGluZyhuLHJbbl0pfSx0aGlzKTtmb3IodmFyIGUgaW4gdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzKXRoaXMuX2FkZEtleUJpbmRpbmcoZSx0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbZV0pO2Zvcih2YXIgdCBpbiB0aGlzLl9rZXlCaW5kaW5ncyl0aGlzLl9rZXlCaW5kaW5nc1t0XS5zb3J0KGZ1bmN0aW9uKHIsbil7dmFyIGk9clswXS5oYXNNb2RpZmllcnMsbz1uWzBdLmhhc01vZGlmaWVycztyZXR1cm4gaT09PW8/MDppPy0xOjF9KX0sX2FkZEtleUJpbmRpbmc6ZnVuY3Rpb24oZSx0KXtpMHQoZSkuZm9yRWFjaChmdW5jdGlvbihyKXt0aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XT10aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XXx8W10sdGhpcy5fa2V5QmluZGluZ3Nbci5ldmVudF0ucHVzaChbcix0XSl9LHRoaXMpfSxfcmVzZXRLZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LF9saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpeyF0aGlzLmtleUV2ZW50VGFyZ2V0fHxPYmplY3Qua2V5cyh0aGlzLl9rZXlCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9rZXlCaW5kaW5nc1tlXSxyPXRoaXMuX29uS2V5QmluZGluZ0V2ZW50LmJpbmQodGhpcyx0KTt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLnB1c2goW3RoaXMua2V5RXZlbnRUYXJnZXQsZSxyXSksdGhpcy5rZXlFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKGUscil9LHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgZSx0LHIsbjt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspZT10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpLHQ9ZVswXSxyPWVbMV0sbj1lWzJdLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSxfb25LZXlCaW5kaW5nRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb24mJnQuc3RvcFByb3BhZ2F0aW9uKCksIXQuZGVmYXVsdFByZXZlbnRlZClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXVswXSxpPWVbcl1bMV07aWYobjB0KG4sdCkmJih0aGlzLl90cmlnZ2VyS2V5SGFuZGxlcihuLGksdCksdC5kZWZhdWx0UHJldmVudGVkKSlyZXR1cm59fSxfdHJpZ2dlcktleUhhbmRsZXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPU9iamVjdC5jcmVhdGUoZSk7bi5rZXlib2FyZEV2ZW50PXI7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KGUuZXZlbnQse2RldGFpbDpuLGNhbmNlbGFibGU6ITB9KTt0aGlzW3RdLmNhbGwodGhpcyxpKSxpLmRlZmF1bHRQcmV2ZW50ZWQmJnIucHJldmVudERlZmF1bHQoKX19O3ZhciB2OT17cHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOkhUTUxFbGVtZW50LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRTY3JvbGxUYXJnZXR9fX0sb2JzZXJ2ZXJzOlsiX3Njcm9sbFRhcmdldENoYW5nZWQoc2Nyb2xsVGFyZ2V0LCBpc0F0dGFjaGVkKSJdLF9zaG91bGRIYXZlTGlzdGVuZXI6ITAsX3Njcm9sbFRhcmdldENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZih0aGlzLl9vbGRTY3JvbGxUYXJnZXQmJih0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcighMSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQpLHRoaXMuX29sZFNjcm9sbFRhcmdldD1udWxsKSwhIXQpaWYoZT09PSJkb2N1bWVudCIpdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy5fZG9jO2Vsc2UgaWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgbj10aGlzLmRvbUhvc3Q7dGhpcy5zY3JvbGxUYXJnZXQ9biYmbi4kP24uJFtlXTp6dCh0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3IoIiMiK2UpfWVsc2UgdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIodGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyLGUpKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLl9kb2N9LGdldCBfZG9jKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGdldCBfc2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVlPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wOjB9LGdldCBfc2Nyb2xsTGVmdCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VYT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ6MH0sc2V0IF9zY3JvbGxUb3AoZSl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCxlKTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9ZSl9LHNldCBfc2Nyb2xsTGVmdChlKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8oZSx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9ZSl9LHNjcm9sbDpmdW5jdGlvbihlLHQpe3ZhciByO3R5cGVvZiBlPT0ib2JqZWN0Ij8ocj1lLmxlZnQsdD1lLnRvcCk6cj1lLHI9cnx8MCx0PXR8fDAsdGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHIsdCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1yLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD10KX0sZ2V0IF9zY3JvbGxUYXJnZXRXaWR0aCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVyV2lkdGg6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0V2lkdGg6MH0sZ2V0IF9zY3JvbGxUYXJnZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ6MH0sX2lzVmFsaWRTY3JvbGxUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sX3RvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dD09PXRoaXMuX2RvYz93aW5kb3c6dDtlP3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcnx8KHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcikpOnRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj1udWxsKX0sdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyPWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoZSx0aGlzLnNjcm9sbFRhcmdldCl9fTt2YXIgbzB0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksSWJlPW8wdCYmbzB0WzFdPj04LGEwdD0zLHMwdD0iLTEwMDAwcHgiLGZFPS0xMDA7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIEBhcHBseSAtLWlyb24tbGlzdC1pdGVtcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtncmlkXSkpICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhcnJheS1zZWxlY3RvciBpZD0ic2VsZWN0b3IiIGl0ZW1zPSJ7e2l0ZW1zfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSXRlbXN9fSIgc2VsZWN0ZWQtaXRlbT0ie3tzZWxlY3RlZEl0ZW19fSI+PC9hcnJheS1zZWxlY3Rvcj4KCiAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxzZWxlY3RlZEFzOnt0eXBlOlN0cmluZyx2YWx1ZToic2VsZWN0ZWQifSxncmlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W1dndCxKcyx2OSxLZ3RdLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxfcGFyZW50TW9kZWw6ITAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3ZhciBlPXRoaXMuZ3JpZD90aGlzLl9waHlzaWNhbFJvd3MqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZTtyZXR1cm4gZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiB6dCh6dCh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSxnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciBlPXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCxlLXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl92aXJ0dWFsU3RhcnRWYWw9ZX0sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxzZXQgX3BoeXNpY2FsU3RhcnQoZSl7ZT1lJXRoaXMuX3BoeXNpY2FsQ291bnQsZTwwJiYoZT10aGlzLl9waHlzaWNhbENvdW50K2UpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe3ZhciBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe3ZhciB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChyKSx0PnRoaXMuX3Njcm9sbFBvc2l0aW9uKXJldHVybiB0aGlzLmdyaWQ/bi1uJXRoaXMuX2l0ZW1zUGVyUm93Om47aWYodGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PW4pcmV0dXJuIG4tbiV0aGlzLl9pdGVtc1BlclJvd30pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtpZih0aGlzLmdyaWQpZT1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocil9KX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzfSxnZXQgX3ZpcnR1YWxSb3dDb3VudCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlydHVhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9lc3RSb3dzSW5WaWV3KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aWV3cG9ydEhlaWdodC90aGlzLl9yb3dIZWlnaHQpfSxnZXQgX3BoeXNpY2FsUm93cygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCt0aGlzLnNjcm9sbE9mZnNldH0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9kaWRGb2N1cy5iaW5kKHRoaXMpLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpLHRoaXMudW5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxfc2V0T3ZlcmZsb3c6ZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz1lPT09dGhpcz8idG91Y2giOiIiLHRoaXMuc3R5bGUub3ZlcmZsb3dZPWU9PT10aGlzPyJhdXRvIjoiIix0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KGVbInBhZGRpbmctdG9wIl0sMTApLHRoaXMuX2lzUlRMPUJvb2xlYW4oZS5kaXJlY3Rpb249PT0icnRsIiksdGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGgsdGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0LHRoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDt2YXIgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdzt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl9zY3JvbGxQb3NpdGlvbiksdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe3ZhciBpPXRoaXMuX2dldFJldXNhYmxlcyhyKTtyPyh0aGlzLl9waHlzaWNhbFRvcD1pLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQraS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5pbmRleGVzLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkuaW5kZXhlcyxyP251bGw6aS5pbmRleGVzKSx0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsMCksbGkpfX0sX2dldFJldXNhYmxlczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvPVtdLGE9dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8scz10aGlzLl92aXJ0dWFsU3RhcnQsbD10aGlzLl92aXJ0dWFsRW5kLGM9dGhpcy5fcGh5c2ljYWxDb3VudCx1PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxmPXRoaXMuX3Njcm9sbFBvc2l0aW9uLHA9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl9waHlzaWNhbEVuZCxuPWYtdSk6KHQ9dGhpcy5fcGh5c2ljYWxFbmQscj10aGlzLl9waHlzaWNhbFN0YXJ0LG49aC1wKTtpPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxuPW4taSwhKG8ubGVuZ3RoPj1jfHxuPD1hKTspaWYoZSl7aWYobCtvLmxlbmd0aCsxPj10aGlzLl92aXJ0dWFsQ291bnR8fHUraT49Zi10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7by5wdXNoKHQpLHU9dStpLHQ9KHQrMSklY31lbHNle2lmKHMtby5sZW5ndGg8PTB8fHUrdGhpcy5fcGh5c2ljYWxTaXplLWk8PXApYnJlYWs7by5wdXNoKHQpLHU9dS1pLHQ9dD09PTA/Yy0xOnQtMX1yZXR1cm57aW5kZXhlczpvLHBoeXNpY2FsVG9wOnUtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSYmZS5sZW5ndGg9PT0wfHx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHIpfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGUpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIHQscixuPW5ldyBBcnJheShlKTtmb3IodD0wO3Q8ZTt0Kyspcj10aGlzLnN0YW1wKG51bGwpLG5bdF09ci5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKSx0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChyLnJvb3QpO3JldHVybiBufSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UsYTB0LHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2lmKHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0KSx0aGlzLmdyaWQpe3ZhciByPXQldGhpcy5faXRlbXNQZXJSb3c7ciYmdC1yPD10aGlzLl9waHlzaWNhbENvdW50JiYodCs9dGhpcy5faXRlbXNQZXJSb3cpLHQtPXJ9dmFyIG49dC10aGlzLl9waHlzaWNhbENvdW50LGk9TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KTtpZighKG48MCkpe2lmKG4+MCl7dmFyIG89d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKG4pKTtmb3IodmFyIGE9MDthPG47YSsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnQrbix0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrbiksdGhpcy5fdXBkYXRlKCksdGhpcy5fdGVtcGxhdGVDb3N0PSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCktbykvbixpPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fGk9PT0wfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLGkpKSxreCk6dGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLGkpLGxpKSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYoISghdGhpcy5pc0F0dGFjaGVkfHwhdGhpcy5faXNWaXNpYmxlKSlpZih0aGlzLl9waHlzaWNhbENvdW50IT09MCl7dmFyIGU9dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl91cGRhdGUoZS5pbmRleGVzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChhMHQpKX0sX2Vuc3VyZVRlbXBsYXRpemVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Rvcil7dGhpcy5fdXNlclRlbXBsYXRlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigidGVtcGxhdGUiKSx0aGlzLl91c2VyVGVtcGxhdGV8fGNvbnNvbGUud2FybigiaXJvbi1saXN0IHJlcXVpcmVzIGEgdGVtcGxhdGUgdG8gYmUgcHJvdmlkZWQgaW4gbGlnaHQtZG9tIik7dmFyIGU9e307ZS5fX2tleV9fPSEwLGVbdGhpcy5hc109ITAsZVt0aGlzLmluZGV4QXNdPSEwLGVbdGhpcy5zZWxlY3RlZEFzXT0hMCxlLnRhYkluZGV4PSEwLHRoaXMuX2luc3RhbmNlUHJvcHM9ZSx0aGlzLnRlbXBsYXRpemUodGhpcy5fdXNlclRlbXBsYXRlLHRoaXMubXV0YWJsZURhdGEpfX0sX2dyaWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dHlwZW9mIHQhPSJ1bmRlZmluZWQiJiYodGhpcy5ub3RpZnlSZXNpemUoKSxjaSgpLGUmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGUpe2lmKGUucGF0aD09PSJpdGVtcyIpdGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpO2Vsc2UgaWYoZS5wYXRoPT09Iml0ZW1zLnNwbGljZXMiKXt0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgoZS52YWx1ZS5pbmRleFNwbGljZXMpLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjA7dmFyIHQ9ZS52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihpKXtyZXR1cm4gaS5hZGRlZENvdW50PjB8fGkucmVtb3ZlZC5sZW5ndGg+MH0pO2lmKHQpe3ZhciByPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt0aGlzLmNvbnRhaW5zKHIpJiZyLmJsdXIoKX12YXIgbj1lLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKGkpe3JldHVybiBpLmluZGV4K2kuYWRkZWRDb3VudD49dGhpcy5fdmlydHVhbFN0YXJ0JiZpLmluZGV4PD10aGlzLl92aXJ0dWFsRW5kfSx0aGlzKTsoIXRoaXMuX2lzQ2xpZW50RnVsbCgpfHxuKSYmdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSl9ZWxzZSBlLnBhdGghPT0iaXRlbXMubGVuZ3RoIiYmdGhpcy5fZm9yd2FyZEl0ZW1QYXRoKGUucGF0aCxlLnZhbHVlKX0sX2ZvcndhcmRJdGVtUGF0aDpmdW5jdGlvbihlLHQpe2U9ZS5zbGljZSg2KTt2YXIgcj1lLmluZGV4T2YoIi4iKTtyPT09LTEmJihyPWUubGVuZ3RoKTt2YXIgbixpLG8sYT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkscz1wYXJzZUludChlLnN1YnN0cmluZygwLHIpLDEwKTtuPXRoaXMuX2lzSW5kZXhSZW5kZXJlZChzKSxuPyhpPXRoaXMuX2dldFBoeXNpY2FsSW5kZXgocyksbz10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW2ldKSk6YSYmKG89YSksISghb3x8b1t0aGlzLmluZGV4QXNdIT09cykmJihlPWUuc3Vic3RyaW5nKHIrMSksZT10aGlzLmFzKyhlPyIuIitlOiIiKSxvLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSx0LCExLCEwKSxvLl9mbHVzaFByb3BlcnRpZXMmJm8uX2ZsdXNoUHJvcGVydGllcygpLG4mJih0aGlzLl91cGRhdGVNZXRyaWNzKFtpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpKSl9LF9hZGp1c3RWaXJ0dWFsSW5kZXg6ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQucmVtb3ZlZC5mb3JFYWNoKHRoaXMuX3JlbW92ZUl0ZW0sdGhpcyksdC5pbmRleDx0aGlzLl92aXJ0dWFsU3RhcnQpe3ZhciByPU1hdGgubWF4KHQuYWRkZWRDb3VudC10LnJlbW92ZWQubGVuZ3RoLHQuaW5kZXgtdGhpcy5fdmlydHVhbFN0YXJ0KTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3IsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD49MCYmKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCtyKX19LHRoaXMpfSxfcmVtb3ZlSXRlbTpmdW5jdGlvbihlKXt0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3QoZSksdGhpcy5fZm9jdXNlZEl0ZW0mJnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKVt0aGlzLmFzXT09PWUmJnRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oZSl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSxpPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbcl07aWYoaSE9bnVsbCl7dmFyIG89dGhpcy5tb2RlbEZvckVsZW1lbnQobik7by5fX2tleV9fPW51bGwsdGhpcy5fZm9yd2FyZFByb3BlcnR5KG8sdGhpcy5hcyxpKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobyx0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQoaSkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLHRoaXMuaW5kZXhBcyxyKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobywidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1yPzA6LTEpLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbby5fX2tleV9fXT10LG8uX2ZsdXNoUHJvcGVydGllcyYmby5fZmx1c2hQcm9wZXJ0aWVzKCEwKSxuLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBuLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIil9LGUpfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtjaSgpO3ZhciB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8sYSl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLmdyaWQ/KHRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxTaXplPU1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQpOihyPXRoaXMuX2l0ZW1zUGVyUm93PT09MT9yOk1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5faXRlbXNQZXJSb3c9MSksdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9dGhpcy5fcGh5c2ljYWxDb3VudD4wP3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwLHRoaXMuX3Jvd0hlaWdodD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwLHRoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKTp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIHQ9dGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoLHI9KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdCkvMjt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obixpKXt2YXIgbz1pJXRoaXMuX2l0ZW1zUGVyUm93LGE9TWF0aC5mbG9vcihvKnRoaXMuX2l0ZW1XaWR0aCtyKTt0aGlzLl9pc1JUTCYmKGE9YSotMSksdGhpcy50cmFuc2xhdGUzZChhKyJweCIsZSsicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1tuXSksdGhpcy5fc2hvdWxkUmVuZGVyTmV4dFJvdyhpKSYmKGUrPXRoaXMuX3Jvd0hlaWdodCl9KX1lbHNle2xldCBuPVtdO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihpLG8pe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLGEpLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbaV07bGV0IHM9YS5pZDtzJiZuLnB1c2gocyl9KSxuLmxlbmd0aCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsbi5qb2luKCIgIikpfX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ncmlkP3RoaXMuX2NvbXB1dGVWaWR4KGUpJXRoaXMuX2l0ZW1zUGVyUm93IT09dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW2VdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbihlKXtyZXR1cm4gZSV0aGlzLl9pdGVtc1BlclJvdz09PXRoaXMuX2l0ZW1zUGVyUm93LTF9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7dmFyIHQ9dGhpcy5fc2Nyb2xsUG9zaXRpb247IUliZSYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5ncmlkP3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl92aXJ0dWFsUm93Q291bnQqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLGU9ZXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCwoZXx8TWF0aC5hYnModGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3Njcm9sbEhlaWdodCk+PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KSYmKHRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCl9LHNjcm9sbFRvSXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHNjcm9sbFRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYoISh0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKGNpKCksdGhpcy5fcGh5c2ljYWxDb3VudCE9PTApKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl92aXJ0dWFsQ291bnQtMSksKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSl8fGU+PXRoaXMuX21heFZpcnR1YWxTdGFydCkmJih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5ncmlkP2UtdGhpcy5faXRlbXNQZXJSb3cqMjplLTEpLHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7cjxlJiZuPD1pOyluPW4rdGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9fSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTAsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsZnVuY3Rpb24oKXt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9pc1Zpc2libGU/KHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMCksdGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5fcmVuZGVyKCkpOnRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEpfSxOaSl9LHNlbGVjdEl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7aWYoIShlPDB8fGU+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe2lmKCF0aGlzLm11bHRpU2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGVkSXRlbSYmdGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSk7dCYmKHRbdGhpcy5zZWxlY3RlZEFzXT0hMCksdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KGUpfX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sZGVzZWxlY3RJbmRleDpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7aWYodGhpcy5faXNJbmRleFJlbmRlcmVkKGUpKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKTt0W3RoaXMuc2VsZWN0ZWRBc109ITEsdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXgoZSl9fSx0b2dnbGVTZWxlY3Rpb25Gb3JJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHRvZ2dsZVNlbGVjdGlvbkZvckluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZChlKTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2VdKTt0P3RoaXMuZGVzZWxlY3RJbmRleChlKTp0aGlzLnNlbGVjdEluZGV4KGUpfSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihlLHQpe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbZV0pW3RoaXMuc2VsZWN0ZWRBc109ITF9KSx0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sX3NlbGVjdGlvbkVuYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWU/dGhpcy5saXN0ZW46dGhpcy51bmxpc3Rlbjt0LmNhbGwodGhpcyx0aGlzLCJ0YXAiLCJfc2VsZWN0aW9uSGFuZGxlciIpfSxfc2VsZWN0aW9uSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudChlLnRhcmdldCk7aWYoISF0KXt2YXIgcixuLGk9enQoZSkucGF0aFswXSxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSxhPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0W3RoaXMuaW5kZXhBc10pXTtpLmxvY2FsTmFtZT09PSJpbnB1dCJ8fGkubG9jYWxOYW1lPT09ImJ1dHRvbiJ8fGkubG9jYWxOYW1lPT09InNlbGVjdCJ8fChyPXQudGFiSW5kZXgsdC50YWJJbmRleD1mRSxuPW8/by50YWJJbmRleDotMSx0LnRhYkluZGV4PXIsIShvJiZhIT09byYmYS5jb250YWlucyhvKSYmbiE9PWZFKSYmdGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJdGVtKHRbdGhpcy5hc10pKX19LF9tdWx0aVNlbGVjdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuJC5zZWxlY3Rvci5tdWx0aT1lfSx1cGRhdGVTaXplRm9ySXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sdXBkYXRlU2l6ZUZvckluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSkmJih0aGlzLl91cGRhdGVNZXRyaWNzKFt0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpKSxudWxsfSxfbWFuYWdlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2U+PTAmJmU8dGhpcy5fdmlydHVhbENvdW50P3RoaXMuX2lzSW5kZXhSZW5kZXJlZChlKT90aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKTp0aGlzLl9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbSgpOnRoaXMuX3ZpcnR1YWxDb3VudD4wJiZ0aGlzLl9waHlzaWNhbENvdW50PjAmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbXNQZXJSb3d8fDEsdGhpcy5ncmlkP01hdGguY2VpbChlL3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzplfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5maXJzdFZpc2libGVJbmRleCYmZTw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxmb2N1c0l0ZW06ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0oZSl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHx0aGlzLnNjcm9sbFRvSW5kZXgoZSk7dmFyIHQ9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpLG47ci50YWJJbmRleD1mRSx0LnRhYkluZGV4PT09ZkUmJihuPXQpLG58fChuPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iJytmRSsnIl0nKSksci50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9ZSxuJiZuLmZvY3VzKCl9fSxfcmVtb3ZlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5faXRlbXNQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTEsdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8MCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIHQ9dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10LnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHQucm9vdCl9dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1tlXSx0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkudGFiSW5kZXg9MCx0aGlzLl9waHlzaWNhbEl0ZW1zW2VdPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PWUsdGhpcy50cmFuc2xhdGUzZCgwLHMwdCwwLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKX19LF9yZXN0b3JlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXtpZighKCF0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDwwKSl7dGhpcy5fYXNzaWduTW9kZWxzKCk7dmFyIGU9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0PXRoaXMuX3BoeXNpY2FsSXRlbXNbZV07aWYoISF0KXt2YXIgcj10aGlzLm1vZGVsRm9yRWxlbWVudCh0KSxuPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtyW3RoaXMuYXNdPT09blt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09dCxyLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLHMwdCwwLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKSk6KHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCksdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbH19fSxfZGlkRm9jdXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQoZS50YXJnZXQpLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pLG49dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0hPT1udWxsLGk9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDshdHx8KHI9PT10P3RoaXMuX2lzSW5kZXhWaXNpYmxlKGkpfHx0aGlzLnNjcm9sbFRvSW5kZXgoaSk6KHRoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpLHImJihyLnRhYkluZGV4PS0xKSx0LnRhYkluZGV4PTAsaT10W3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1pLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgoaSksdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleF0sbiYmIXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiZ0aGlzLl91cGRhdGUoKSkpfSxfa2V5ZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA0MDp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PHRoaXMuX3ZpcnR1YWxDb3VudC0xJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM5OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/LTE6MSkpO2JyZWFrO2Nhc2UgMzg6dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD4wJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleC0odGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM3OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/MTotMSkpO2JyZWFrO2Nhc2UgMTM6dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksdGhpcy5zZWxlY3Rpb25FbmFibGVkJiZ0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKGUpO2JyZWFrfX0sX2NsYW1wOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heCh0LGUpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbZV09c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tlXSxyLHQuYmluZCh0aGlzKSksSmwodGhpcy5fZGVib3VuY2Vyc1tlXSl9LF9mb3J3YXJkUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2UuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHIpfSxfZm9yd2FyZEhvc3RQcm9wVjI6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLmZvcndhcmRIb3N0UHJvcChlLHQpfSx0aGlzKX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGUsdCxyKXtpZihPSSh0aGlzLmFzLHQpKXt2YXIgbj1lW3RoaXMuaW5kZXhBc107dD09dGhpcy5hcyYmKHRoaXMuaXRlbXNbbl09ciksdGhpcy5ub3RpZnlQYXRoKGRwKHRoaXMuYXMsIml0ZW1zLiIrbix0KSxyKX19LF9nZXRTdGFtcGVkQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxJdGVtc30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oZSx0LHIpe3QuaW5kZXhPZih0aGlzLmFzKyIuIik9PT0wJiZ0aGlzLm5vdGlmeVBhdGgoIml0ZW1zLiIrZS5fX2tleV9fKyIuIit0LnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHIpfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLm5vdGlmeVBhdGgoZSx0KX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmKHRoaXMubW9kZWxGb3JFbGVtZW50KHIpW2VdPXQpfSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIHp0KGU/ZS5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pO3ZhciB4OT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlbGVjdGlvbj1bXSx0aGlzLnNlbGVjdENhbGxiYWNrPXR9Z2V0KCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX1jbGVhcih0KXt0aGlzLnNlbGVjdGlvbi5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24ocil7KCF0fHx0LmluZGV4T2Yocik8MCkmJnRoaXMuc2V0SXRlbVNlbGVjdGVkKHIsITEpfSx0aGlzKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHQpPj0wfXNldEl0ZW1TZWxlY3RlZCh0LHIpe2lmKHQhPW51bGwmJnIhPT10aGlzLmlzU2VsZWN0ZWQodCkpe2lmKHIpdGhpcy5zZWxlY3Rpb24ucHVzaCh0KTtlbHNle3ZhciBuPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk7bj49MCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKG4sMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayh0LHIpfX1zZWxlY3QodCl7dGhpcy5tdWx0aT90aGlzLnRvZ2dsZSh0KTp0aGlzLmdldCgpIT09dCYmKHRoaXMuc2V0SXRlbVNlbGVjdGVkKHRoaXMuZ2V0KCksITEpLHRoaXMuc2V0SXRlbVNlbGVjdGVkKHQsITApKX10b2dnbGUodCl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhdGhpcy5pc1NlbGVjdGVkKHQpKX19O3ZhciB3aD17cHJvcGVydGllczp7YXR0ckZvclNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxzZWxlY3RlZDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sYWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6InRhcCIsb2JzZXJ2ZXI6Il9hY3RpdmF0ZUV2ZW50Q2hhbmdlZCJ9LHNlbGVjdGFibGU6U3RyaW5nLHNlbGVjdGVkQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJpcm9uLXNlbGVjdGVkIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGZhbGxiYWNrU2VsZWN0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxpdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9leGNsdWRlZExvY2FsTmFtZXM6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3RlbXBsYXRlOjEsImRvbS1iaW5kIjoxLCJkb20taWYiOjEsImRvbS1yZXBlYXQiOjF9fX19LG9ic2VydmVyczpbIl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQoYXR0ckZvclNlbGVjdGVkKSIsIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZCkiLCJfY2hlY2tGYWxsYmFjayhmYWxsYmFja1NlbGVjdGlvbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYmluZEZpbHRlckl0ZW09dGhpcy5fZmlsdGVySXRlbS5iaW5kKHRoaXMpLHRoaXMuX3NlbGVjdGlvbj1uZXcgeDkodGhpcy5fYXBwbHlTZWxlY3Rpb24uYmluZCh0aGlzKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZUl0ZW1zKHRoaXMpLHRoaXMuX2FkZExpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSxpbmRleE9mOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLml0ZW1zP3RoaXMuaXRlbXMuaW5kZXhPZihlKTotMX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0ZWQ9ZX0sc2VsZWN0UHJldmlvdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PWUtMTt0aGlzLnNlbGVjdGVkIT09dm9pZCAwJiYodD0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSktMStlKSVlKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZSh0KX0sc2VsZWN0TmV4dDpmdW5jdGlvbigpe3ZhciBlPTA7dGhpcy5zZWxlY3RlZCE9PXZvaWQgMCYmKGU9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpKzEpJXRoaXMuaXRlbXMubGVuZ3RoKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZShlKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3QodGhpcy5faW5kZXhUb1ZhbHVlKGUpKX0sZm9yY2VTeW5jaHJvbm91c0l0ZW1VcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdHlwZW9mIHRoaXMuX29ic2VydmVyLmZsdXNoPT0iZnVuY3Rpb24iP3RoaXMuX29ic2VydmVyLmZsdXNoKCk6dGhpcy5fdXBkYXRlSXRlbXMoKX0sZ2V0IF9zaG91bGRVcGRhdGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZCE9bnVsbH0sX2NoZWNrRmFsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5saXN0ZW4odGhpcyxlLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLnVubGlzdGVuKHRoaXMsZSwiX2FjdGl2YXRlSGFuZGxlciIpfSxfYWN0aXZhdGVFdmVudENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9yZW1vdmVMaXN0ZW5lcih0KSx0aGlzLl9hZGRMaXN0ZW5lcihlKX0sX3VwZGF0ZUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHRoaXMuc2VsZWN0YWJsZXx8IioiKTtlPUFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlLHRoaXMuX2JpbmRGaWx0ZXJJdGVtKSx0aGlzLl9zZXRJdGVtcyhlKX0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtJiYodGhpcy5zZWxlY3RlZD10aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0pKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RTZWxlY3RlZDpmdW5jdGlvbihlKXtpZighIXRoaXMuaXRlbXMpe3ZhciB0PXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO3Q/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKSx0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdGhpcy5fc2VsZWN0aW9uLmdldCgpPT09dm9pZCAwJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbZS5sb2NhbE5hbWVdfSxfdmFsdWVUb0l0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleChlKV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpe2Zvcih2YXIgdD0wLHI7cj10aGlzLml0ZW1zW3RdO3QrKylpZih0aGlzLl92YWx1ZUZvckl0ZW0ocik9PWUpcmV0dXJuIHR9ZWxzZSByZXR1cm4gTnVtYmVyKGUpfSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgdD10aGlzLml0ZW1zW2VdO2lmKHQpcmV0dXJuIHRoaXMuX3ZhbHVlRm9ySXRlbSh0KX1lbHNlIHJldHVybiBlfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZCl7dmFyIHQ9dGhpcy5pbmRleE9mKGUpO3JldHVybiB0PT09LTE/bnVsbDp0fXZhciByPWVbd20odGhpcy5hdHRyRm9yU2VsZWN0ZWQpXTtyZXR1cm4gciE9bnVsbD9yOmUuZ2V0QXR0cmlidXRlKHRoaXMuYXR0ckZvclNlbGVjdGVkKX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3RlZENsYXNzJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyx0LGUpLHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUmJnRoaXMudG9nZ2xlQXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUsdCxlKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLmZpcmUoImlyb24tIisodD8ic2VsZWN0IjoiZGVzZWxlY3QiKSx7aXRlbTplfSl9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odGhpcy5fc2VsZWN0aW9uLmdldCgpKX0sX29ic2VydmVJdGVtczpmdW5jdGlvbihlKXtyZXR1cm4genQoZSkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUl0ZW1zKCksdGhpcy5fdXBkYXRlU2VsZWN0ZWQoKSx0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsdCx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSl9KX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS50YXJnZXQscj10aGlzLml0ZW1zO3QmJnQhPXRoaXM7KXt2YXIgbj1yLmluZGV4T2YodCk7aWYobj49MCl7dmFyIGk9dGhpcy5faW5kZXhUb1ZhbHVlKG4pO3RoaXMuX2l0ZW1BY3RpdmF0ZShpLHQpO3JldHVybn10PXQucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDplLGl0ZW06dH0se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdChlKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCg6bm90KHNsb3QpOm5vdCguaXJvbi1zZWxlY3RlZCkpIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLXBhZ2VzIixiZWhhdmlvcnM6W0pzLHdoXSxwcm9wZXJ0aWVzOnthY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkUGFnZUNoYW5nZWQoc2VsZWN0ZWQpIl0sX3NlbGVjdGVkUGFnZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFzeW5jKHRoaXMubm90aWZ5UmVzaXplKX19KTt2YXIgbDB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7bDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobDB0LmNvbnRlbnQpO3ZhciBjMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBodG1sIHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIxIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI0Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KCiAgICAgIC8qIER1cGxpY2F0ZSB0aGUgc3R5bGVzIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3dlYmNvbXBvbmVudHMvc2hhZHljc3MvaXNzdWVzLzE5MyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2MwdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGMwdC5jb250ZW50KTt2YXIgRGk9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zZXRGb2N1c2VkKGUudHlwZT09PSJmb2N1cyIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLGU/InRydWUiOiJmYWxzZSIpLHRoaXMuc3R5bGUucG9pbnRlckV2ZW50cz1lPyJub25lIjoiIixlPyh0aGlzLl9vbGRUYWJJbmRleD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLnRhYkluZGV4PS0xLHRoaXMuYmx1cigpKTp0aGlzLl9vbGRUYWJJbmRleCE9PXZvaWQgMCYmKHRoaXMuX29sZFRhYkluZGV4PT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTp0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX29sZFRhYkluZGV4KSl9LF9jaGFuZ2VkQ29udHJvbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfX07dmFyIFl4PXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKGUpLGV8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbihlKXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZlKX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZSE9PWUmJih0aGlzLmFjdGl2ZT1lLHRoaXMuZmlyZSgiY2hhbmdlIikpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApLHRoaXMuX3NldFByZXNzZWQoITApLHRoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpLHRoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbC5rZXlib2FyZEV2ZW50LHI9enQodCkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChyKXx8KHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLmtleWJvYXJkRXZlbnQscj16dCh0KS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KHIpfHwodGhpcy5wcmVzc2VkJiZ0aGlzLl9hc3luY0NsaWNrKCksdGhpcy5fc2V0UHJlc3NlZCghMSkpfSxfYXN5bmNDbGljazpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9LDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3QmJnQhPWUmJnRoaXMuaGFzQXR0cmlidXRlKHQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX0sX2FjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLGU/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSksdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKTp0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NoYW5nZWRCdXR0b25TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCYmdGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkKCl9fSxTaD1bT28sWXhdO3ZhciBNaD17ZGlzdGFuY2U6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS1yLG89dC1uO3JldHVybiBNYXRoLnNxcnQoaSppK28qbyl9LG5vdzp3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSk6RGF0ZS5ub3d9O2Z1bmN0aW9uIHUwdChlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLndpZHRoPXRoaXMuYm91bmRpbmdSZWN0LndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCx0aGlzLnNpemU9TWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9dTB0LnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWguZGlzdGFuY2UoZSx0LDAsMCksbj1NaC5kaXN0YW5jZShlLHQsdGhpcy53aWR0aCwwKSxpPU1oLmRpc3RhbmNlKGUsdCwwLHRoaXMuaGVpZ2h0KSxvPU1oLmRpc3RhbmNlKGUsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtyZXR1cm4gTWF0aC5tYXgocixuLGksbyl9fTtmdW5jdGlvbiBnXyhlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbG9yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmNvbG9yLHRoaXMud2F2ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmNvbG9yLHRoaXMud2F2ZS5jbGFzc0xpc3QuYWRkKCJ3YXZlIiksdGhpcy53YXZlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIndhdmUtY29udGFpbmVyIiksenQodGhpcy53YXZlQ29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLndhdmUpLHRoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCl9Z18uTUFYX1JBRElVUz0zMDA7Z18ucHJvdG90eXBlPXtnZXQgcmVjZW50ZXJzKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5yZWNlbnRlcnN9LGdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXt2YXIgZTtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydD8oZT1NaC5ub3coKS10aGlzLm1vdXNlRG93blN0YXJ0LHRoaXMubW91c2VVcFN0YXJ0JiYoZS09dGhpcy5tb3VzZVVwRWxhcHNlZCksZSk6MH0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01oLm5vdygpLXRoaXMubW91c2VVcFN0YXJ0OjB9LGdldCBtb3VzZURvd25FbGFwc2VkU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWQvMWUzfSxnZXQgbW91c2VVcEVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VVcEVsYXBzZWQvMWUzfSxnZXQgbW91c2VJbnRlcmFjdGlvblNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZURvd25FbGFwc2VkU2Vjb25kcyt0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kc30sZ2V0IGluaXRpYWxPcGFjaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pbml0aWFsT3BhY2l0eX0sZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBlPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgsdD10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQscj1NYXRoLm1pbihNYXRoLnNxcnQoZSt0KSxnXy5NQVhfUkFESVVTKSoxLjErNSxuPTEuMS0uMiooci9nXy5NQVhfUkFESVVTKSxpPXRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvbixvPXIqKDEtTWF0aC5wb3coODAsLWkpKTtyZXR1cm4gTWF0aC5hYnMobyl9LGdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01hdGgubWF4KDAsdGhpcy5pbml0aWFsT3BhY2l0eS10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyp0aGlzLm9wYWNpdHlEZWNheVZlbG9jaXR5KTp0aGlzLmluaXRpYWxPcGFjaXR5fSxnZXQgb3V0ZXJPcGFjaXR5KCl7dmFyIGU9dGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqLjMsdD10aGlzLm9wYWNpdHk7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oZSx0KSl9LGdldCBpc09wYWNpdHlGdWxseURlY2F5ZWQoKXtyZXR1cm4gdGhpcy5vcGFjaXR5PC4wMSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLGdfLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsZ18uTUFYX1JBRElVUyl9LGdldCBpc0FuaW1hdGlvbkNvbXBsZXRlKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P3RoaXMuaXNPcGFjaXR5RnVsbHlEZWNheWVkOnRoaXMuaXNSZXN0aW5nQXRNYXhSYWRpdXN9LGdldCB0cmFuc2xhdGlvbkZyYWN0aW9uKCl7cmV0dXJuIE1hdGgubWluKDEsdGhpcy5yYWRpdXMvdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUqMi9NYXRoLnNxcnQoMikpfSxnZXQgeE5vdygpe3JldHVybiB0aGlzLnhFbmQ/dGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLm1heFJhZGl1cz0wLHRoaXMubW91c2VEb3duU3RhcnQ9MCx0aGlzLm1vdXNlVXBTdGFydD0wLHRoaXMueFN0YXJ0PTAsdGhpcy55U3RhcnQ9MCx0aGlzLnhFbmQ9MCx0aGlzLnlFbmQ9MCx0aGlzLnNsaWRlRGlzdGFuY2U9MCx0aGlzLmNvbnRhaW5lck1ldHJpY3M9bmV3IHUwdCh0aGlzLmVsZW1lbnQpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIGUsdCxyO3RoaXMud2F2ZS5zdHlsZS5vcGFjaXR5PXRoaXMub3BhY2l0eSxlPXRoaXMucmFkaXVzLyh0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKSx0PXRoaXMueE5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMueU5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrdCsicHgsICIrcisicHgpIix0aGlzLndhdmVDb250YWluZXIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUzZCgiK3QrInB4LCAiK3IrInB4LCAwKSIsdGhpcy53YXZlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGUoIitlKyIsIitlKyIpIix0aGlzLndhdmUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZTNkKCIrZSsiLCIrZSsiLDEpIn0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpLHRoaXMubW91c2VEb3duU3RhcnQ9TWgubm93KCksdGhpcy5jZW50ZXI/KHRoaXMueFN0YXJ0PXQsdGhpcy55U3RhcnQ9cix0aGlzLnNsaWRlRGlzdGFuY2U9TWguZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpOih0aGlzLnhTdGFydD1lP2UuZGV0YWlsLngtdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC5sZWZ0OnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHRoaXMueVN0YXJ0PWU/ZS5kZXRhaWwueS10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LnRvcDp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpLHRoaXMucmVjZW50ZXJzJiYodGhpcy54RW5kPXQsdGhpcy55RW5kPXIsdGhpcy5zbGlkZURpc3RhbmNlPU1oLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKSx0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsdGhpcy55U3RhcnQpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50b3A9KHRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUubGVmdD0odGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgifSx1cEFjdGlvbjpmdW5jdGlvbihlKXshdGhpcy5pc01vdXNlRG93bnx8KHRoaXMubW91c2VVcFN0YXJ0PU1oLm5vdygpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7enQoenQodGhpcy53YXZlQ29udGFpbmVyKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CmAsaXM6InBhcGVyLXJpcHBsZSIsYmVoYXZpb3JzOltPb10scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMua2V5RXZlbnRUYXJnZXR9LGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9vbkVudGVyS2V5ZG93biIsInNwYWNlOmtleWRvd24iOiJfb25TcGFjZUtleWRvd24iLCJzcGFjZTprZXl1cCI6Il9vblNwYWNlS2V5dXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3p0KHRoaXMpLnBhcmVudE5vZGUubm9kZVR5cGU9PTExP3RoaXMua2V5RXZlbnRUYXJnZXQ9enQodGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLmtleUV2ZW50VGFyZ2V0PXp0KHRoaXMpLnBhcmVudE5vZGU7dmFyIGU9dGhpcy5rZXlFdmVudFRhcmdldDt0aGlzLmxpc3RlbihlLCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLmxpc3RlbihlLCJkb3duIiwidWlEb3duQWN0aW9uIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsImRvd24iLCJ1aURvd25BY3Rpb24iKSx0aGlzLmtleUV2ZW50VGFyZ2V0PW51bGx9LGdldCBzaG91bGRLZWVwQW5pbWF0aW5nKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLnJpcHBsZXMubGVuZ3RoOysrZSlpZighdGhpcy5yaXBwbGVzW2VdLmlzQW5pbWF0aW9uQ29tcGxldGUpcmV0dXJuITA7cmV0dXJuITF9LHNpbXVsYXRlZFJpcHBsZTpmdW5jdGlvbigpe3RoaXMuZG93bkFjdGlvbihudWxsKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy51cEFjdGlvbigpfSwxKX0sdWlEb3duQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMuZG93bkFjdGlvbihlKX0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXtpZighKHRoaXMuaG9sZERvd24mJnRoaXMucmlwcGxlcy5sZW5ndGg+MCkpe3ZhciB0PXRoaXMuYWRkUmlwcGxlKCk7dC5kb3duQWN0aW9uKGUpLHRoaXMuX2FuaW1hdGluZ3x8KHRoaXMuX2FuaW1hdGluZz0hMCx0aGlzLmFuaW1hdGUoKSl9fSx1aVVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMudXBBY3Rpb24oZSl9LHVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuaG9sZERvd258fCh0aGlzLnJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwQWN0aW9uKGUpfSksdGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX0sb25BbmltYXRpb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZz0hMSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiIsdGhpcy5maXJlKCJ0cmFuc2l0aW9uZW5kIil9LGFkZFJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPW5ldyBnXyh0aGlzKTtyZXR1cm4genQodGhpcy4kLndhdmVzKS5hcHBlbmRDaGlsZChlLndhdmVDb250YWluZXIpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLmNvbG9yLHRoaXMucmlwcGxlcy5wdXNoKGUpLHRoaXMuX3NldEFuaW1hdGluZyghMCksZX0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmlwcGxlcy5pbmRleE9mKGUpO3Q8MHx8KHRoaXMucmlwcGxlcy5zcGxpY2UodCwxKSxlLnJlbW92ZSgpLHRoaXMucmlwcGxlcy5sZW5ndGh8fHRoaXMuX3NldEFuaW1hdGluZyghMSkpfSxhbmltYXRlOmZ1bmN0aW9uKCl7aWYoISF0aGlzLl9hbmltYXRpbmcpe3ZhciBlLHQ7Zm9yKGU9MDtlPHRoaXMucmlwcGxlcy5sZW5ndGg7KytlKXQ9dGhpcy5yaXBwbGVzW2VdLHQuZHJhdygpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLm9wYWNpdHk9dC5vdXRlck9wYWNpdHksdC5pc09wYWNpdHlGdWxseURlY2F5ZWQmJiF0LmlzUmVzdGluZ0F0TWF4UmFkaXVzJiZ0aGlzLnJlbW92ZVJpcHBsZSh0KTshdGhpcy5zaG91bGRLZWVwQW5pbWF0aW5nJiZ0aGlzLnJpcHBsZXMubGVuZ3RoPT09MD90aGlzLm9uQW5pbWF0aW9uQ29tcGxldGUoKTp3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kQW5pbWF0ZSl9fSxhbmltYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZSgpfSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpLHRoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSxfb25TcGFjZUtleXVwOmZ1bmN0aW9uKCl7dGhpcy51aVVwQWN0aW9uKCl9LF9ob2xkRG93bkNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0IT09dm9pZCAwJiYoZT90aGlzLmRvd25BY3Rpb24oKTp0aGlzLnVwQWN0aW9uKCkpfX0pO3ZhciBzdT17cHJvcGVydGllczp7bm9pbms6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX25vaW5rQ2hhbmdlZCJ9LF9yaXBwbGVDb250YWluZXI6e3R5cGU6T2JqZWN0fX0sX2J1dHRvblN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZm9jdXNlZCYmdGhpcy5lbnN1cmVSaXBwbGUoKX0sX2Rvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9kb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5wcmVzc2VkJiZ0aGlzLmVuc3VyZVJpcHBsZShlKX0sZW5zdXJlUmlwcGxlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhc1JpcHBsZSgpKXt0aGlzLl9yaXBwbGU9dGhpcy5fY3JlYXRlUmlwcGxlKCksdGhpcy5fcmlwcGxlLm5vaW5rPXRoaXMubm9pbms7dmFyIHQ9dGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzLnJvb3Q7aWYodCYmenQodCkuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlKSxlKXt2YXIgcj16dCh0aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMpLG49enQoZSkucm9vdFRhcmdldDtyLmRlZXBDb250YWlucyhuKSYmdGhpcy5fcmlwcGxlLnVpRG93bkFjdGlvbihlKX19fSxnZXRSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLl9yaXBwbGV9LGhhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuX3JpcHBsZSl9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKTtyZXR1cm4gZX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPWUpfX07dmFyIHVXPXtwcm9wZXJ0aWVzOntlbGV2YXRpb246e3R5cGU6TnVtYmVyLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMH19LG9ic2VydmVyczpbIl9jYWxjdWxhdGVFbGV2YXRpb24oZm9jdXNlZCwgZGlzYWJsZWQsIGFjdGl2ZSwgcHJlc3NlZCwgcmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiLCJfY29tcHV0ZUtleWJvYXJkQ2xhc3MocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCIsYW5pbWF0ZWQ6ITB9LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt2YXIgZT0xO3RoaXMuZGlzYWJsZWQ/ZT0wOnRoaXMuYWN0aXZlfHx0aGlzLnByZXNzZWQ/ZT00OnRoaXMucmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCYmKGU9MyksdGhpcy5fc2V0RWxldmF0aW9uKGUpfSxfY29tcHV0ZUtleWJvYXJkQ2xhc3M6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygia2V5Ym9hcmQtZm9jdXMiLGUpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlEb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5nZXRSaXBwbGUoKS5yaXBwbGVzLmxlbmd0aDwxJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKCl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlVcEhhbmRsZXIuY2FsbCh0aGlzLGUpLHRoaXMuaGFzUmlwcGxlKCkmJnRoaXMuX3JpcHBsZS51aVVwQWN0aW9uKCl9fSxoMHQ9W1NoLERpLHN1LHVXXTt2YXIgZjB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAvKiBOZWVkIHRvIHNwZWNpZnkgdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgdGhlIHN0eWxlcyBpbXBvcnRlZCBmcm9tIHBhcGVyLW1hdGVyaWFsLiAqLwogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtaW4td2lkdGg6IDUuMTRlbTsKICAgICAgbWFyZ2luOiAwIDAuMjllbTsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgb3V0bGluZS13aWR0aDogMDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIHBhZGRpbmc6IDAuN2VtIDAuNTdlbTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICA6aG9zdChbcmFpc2VkXS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLXJhaXNlZC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWZsYXQta2V5Ym9hcmQtZm9jdXM7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogI2E4YThhODsKICAgICAgY3Vyc29yOiBhdXRvOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdW3JhaXNlZF0pIHsKICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgIH0KCgogICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItYnV0dG9uLWluay1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KCiAgPHNsb3Q+PC9zbG90PmA7ZjB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6ZjB0LGlzOiJwYXBlci1idXR0b24iLGJlaGF2aW9yczpbaDB0XSxwcm9wZXJ0aWVzOntyYWlzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jYWxjdWxhdGVFbGV2YXRpb24ifX0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3RoaXMucmFpc2VkP3VXLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pO3ZhciBwMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZvciBHb29nbGUgcHJvZHVjdHMgKi8KCiAgICAgIC0tZ29vZ2xlLXJlZC0xMDA6ICNmNGM3YzM7CiAgICAgIC0tZ29vZ2xlLXJlZC0zMDA6ICNlNjdjNzM7CiAgICAgIC0tZ29vZ2xlLXJlZC01MDA6ICNkYjQ0Mzc7CiAgICAgIC0tZ29vZ2xlLXJlZC03MDA6ICNjNTM5Mjk7CgogICAgICAtLWdvb2dsZS1ibHVlLTEwMDogI2M2ZGFmYzsKICAgICAgLS1nb29nbGUtYmx1ZS0zMDA6ICM3YmFhZjc7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNTAwOiAjNDI4NWY0OwogICAgICAtLWdvb2dsZS1ibHVlLTcwMDogIzMzNjdkNjsKCiAgICAgIC0tZ29vZ2xlLWdyZWVuLTEwMDogI2I3ZTFjZDsKICAgICAgLS1nb29nbGUtZ3JlZW4tMzAwOiAjNTdiYjhhOwogICAgICAtLWdvb2dsZS1ncmVlbi01MDA6ICMwZjlkNTg7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTcwMDogIzBiODA0MzsKCiAgICAgIC0tZ29vZ2xlLXllbGxvdy0xMDA6ICNmY2U4YjI7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy0zMDA6ICNmN2NiNGQ7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy01MDA6ICNmNGI0MDA7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy03MDA6ICNmMDkzMDA7CgogICAgICAtLWdvb2dsZS1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1nb29nbGUtZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tZ29vZ2xlLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLWdvb2dsZS1ncmV5LTcwMDogIzYxNjE2MTsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZyb20gb25saW5lIHNwZWMgZG9jdW1lbnQgKi8KCiAgICAgIC0tcGFwZXItcmVkLTUwOiAjZmZlYmVlOwogICAgICAtLXBhcGVyLXJlZC0xMDA6ICNmZmNkZDI7CiAgICAgIC0tcGFwZXItcmVkLTIwMDogI2VmOWE5YTsKICAgICAgLS1wYXBlci1yZWQtMzAwOiAjZTU3MzczOwogICAgICAtLXBhcGVyLXJlZC00MDA6ICNlZjUzNTA7CiAgICAgIC0tcGFwZXItcmVkLTUwMDogI2Y0NDMzNjsKICAgICAgLS1wYXBlci1yZWQtNjAwOiAjZTUzOTM1OwogICAgICAtLXBhcGVyLXJlZC03MDA6ICNkMzJmMmY7CiAgICAgIC0tcGFwZXItcmVkLTgwMDogI2M2MjgyODsKICAgICAgLS1wYXBlci1yZWQtOTAwOiAjYjcxYzFjOwogICAgICAtLXBhcGVyLXJlZC1hMTAwOiAjZmY4YTgwOwogICAgICAtLXBhcGVyLXJlZC1hMjAwOiAjZmY1MjUyOwogICAgICAtLXBhcGVyLXJlZC1hNDAwOiAjZmYxNzQ0OwogICAgICAtLXBhcGVyLXJlZC1hNzAwOiAjZDUwMDAwOwoKICAgICAgLS1wYXBlci1waW5rLTUwOiAjZmNlNGVjOwogICAgICAtLXBhcGVyLXBpbmstMTAwOiAjZjhiYmQwOwogICAgICAtLXBhcGVyLXBpbmstMjAwOiAjZjQ4ZmIxOwogICAgICAtLXBhcGVyLXBpbmstMzAwOiAjZjA2MjkyOwogICAgICAtLXBhcGVyLXBpbmstNDAwOiAjZWM0MDdhOwogICAgICAtLXBhcGVyLXBpbmstNTAwOiAjZTkxZTYzOwogICAgICAtLXBhcGVyLXBpbmstNjAwOiAjZDgxYjYwOwogICAgICAtLXBhcGVyLXBpbmstNzAwOiAjYzIxODViOwogICAgICAtLXBhcGVyLXBpbmstODAwOiAjYWQxNDU3OwogICAgICAtLXBhcGVyLXBpbmstOTAwOiAjODgwZTRmOwogICAgICAtLXBhcGVyLXBpbmstYTEwMDogI2ZmODBhYjsKICAgICAgLS1wYXBlci1waW5rLWEyMDA6ICNmZjQwODE7CiAgICAgIC0tcGFwZXItcGluay1hNDAwOiAjZjUwMDU3OwogICAgICAtLXBhcGVyLXBpbmstYTcwMDogI2M1MTE2MjsKCiAgICAgIC0tcGFwZXItcHVycGxlLTUwOiAjZjNlNWY1OwogICAgICAtLXBhcGVyLXB1cnBsZS0xMDA6ICNlMWJlZTc7CiAgICAgIC0tcGFwZXItcHVycGxlLTIwMDogI2NlOTNkODsKICAgICAgLS1wYXBlci1wdXJwbGUtMzAwOiAjYmE2OGM4OwogICAgICAtLXBhcGVyLXB1cnBsZS00MDA6ICNhYjQ3YmM7CiAgICAgIC0tcGFwZXItcHVycGxlLTUwMDogIzljMjdiMDsKICAgICAgLS1wYXBlci1wdXJwbGUtNjAwOiAjOGUyNGFhOwogICAgICAtLXBhcGVyLXB1cnBsZS03MDA6ICM3YjFmYTI7CiAgICAgIC0tcGFwZXItcHVycGxlLTgwMDogIzZhMWI5YTsKICAgICAgLS1wYXBlci1wdXJwbGUtOTAwOiAjNGExNDhjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMTAwOiAjZWE4MGZjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMjAwOiAjZTA0MGZiOwogICAgICAtLXBhcGVyLXB1cnBsZS1hNDAwOiAjZDUwMGY5OwogICAgICAtLXBhcGVyLXB1cnBsZS1hNzAwOiAjYWEwMGZmOwoKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDogI2VkZTdmNjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0xMDA6ICNkMWM0ZTk7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMjAwOiAjYjM5ZGRiOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTMwMDogIzk1NzVjZDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS00MDA6ICM3ZTU3YzI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTAwOiAjNjczYWI3OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTYwMDogIzVlMzViMTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS03MDA6ICM1MTJkYTg7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtODAwOiAjNDUyN2EwOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTkwMDogIzMxMWI5MjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMTAwOiAjYjM4OGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWEyMDA6ICM3YzRkZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTQwMDogIzY1MWZmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNzAwOiAjNjIwMGVhOwoKICAgICAgLS1wYXBlci1pbmRpZ28tNTA6ICNlOGVhZjY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTEwMDogI2M1Y2FlOTsKICAgICAgLS1wYXBlci1pbmRpZ28tMjAwOiAjOWZhOGRhOwogICAgICAtLXBhcGVyLWluZGlnby0zMDA6ICM3OTg2Y2I7CiAgICAgIC0tcGFwZXItaW5kaWdvLTQwMDogIzVjNmJjMDsKICAgICAgLS1wYXBlci1pbmRpZ28tNTAwOiAjM2Y1MWI1OwogICAgICAtLXBhcGVyLWluZGlnby02MDA6ICMzOTQ5YWI7CiAgICAgIC0tcGFwZXItaW5kaWdvLTcwMDogIzMwM2Y5ZjsKICAgICAgLS1wYXBlci1pbmRpZ28tODAwOiAjMjgzNTkzOwogICAgICAtLXBhcGVyLWluZGlnby05MDA6ICMxYTIzN2U7CiAgICAgIC0tcGFwZXItaW5kaWdvLWExMDA6ICM4YzllZmY7CiAgICAgIC0tcGFwZXItaW5kaWdvLWEyMDA6ICM1MzZkZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE0MDA6ICMzZDVhZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE3MDA6ICMzMDRmZmU7CgogICAgICAtLXBhcGVyLWJsdWUtNTA6ICNlM2YyZmQ7CiAgICAgIC0tcGFwZXItYmx1ZS0xMDA6ICNiYmRlZmI7CiAgICAgIC0tcGFwZXItYmx1ZS0yMDA6ICM5MGNhZjk7CiAgICAgIC0tcGFwZXItYmx1ZS0zMDA6ICM2NGI1ZjY7CiAgICAgIC0tcGFwZXItYmx1ZS00MDA6ICM0MmE1ZjU7CiAgICAgIC0tcGFwZXItYmx1ZS01MDA6ICMyMTk2ZjM7CiAgICAgIC0tcGFwZXItYmx1ZS02MDA6ICMxZTg4ZTU7CiAgICAgIC0tcGFwZXItYmx1ZS03MDA6ICMxOTc2ZDI7CiAgICAgIC0tcGFwZXItYmx1ZS04MDA6ICMxNTY1YzA7CiAgICAgIC0tcGFwZXItYmx1ZS05MDA6ICMwZDQ3YTE7CiAgICAgIC0tcGFwZXItYmx1ZS1hMTAwOiAjODJiMWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTIwMDogIzQ0OGFmZjsKICAgICAgLS1wYXBlci1ibHVlLWE0MDA6ICMyOTc5ZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNzAwOiAjMjk2MmZmOwoKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwOiAjZTFmNWZlOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMTAwOiAjYjNlNWZjOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMjAwOiAjODFkNGZhOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMzAwOiAjNGZjM2Y3OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNDAwOiAjMjliNmY2OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwOiAjMDNhOWY0OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNjAwOiAjMDM5YmU1OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNzAwOiAjMDI4OGQxOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtODAwOiAjMDI3N2JkOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwOiAjMDE1NzliOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTEwMDogIzgwZDhmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWEyMDA6ICM0MGM0ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNDAwOiAjMDBiMGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTcwMDogIzAwOTFlYTsKCiAgICAgIC0tcGFwZXItY3lhbi01MDogI2UwZjdmYTsKICAgICAgLS1wYXBlci1jeWFuLTEwMDogI2IyZWJmMjsKICAgICAgLS1wYXBlci1jeWFuLTIwMDogIzgwZGVlYTsKICAgICAgLS1wYXBlci1jeWFuLTMwMDogIzRkZDBlMTsKICAgICAgLS1wYXBlci1jeWFuLTQwMDogIzI2YzZkYTsKICAgICAgLS1wYXBlci1jeWFuLTUwMDogIzAwYmNkNDsKICAgICAgLS1wYXBlci1jeWFuLTYwMDogIzAwYWNjMTsKICAgICAgLS1wYXBlci1jeWFuLTcwMDogIzAwOTdhNzsKICAgICAgLS1wYXBlci1jeWFuLTgwMDogIzAwODM4ZjsKICAgICAgLS1wYXBlci1jeWFuLTkwMDogIzAwNjA2NDsKICAgICAgLS1wYXBlci1jeWFuLWExMDA6ICM4NGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hMjAwOiAjMThmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTQwMDogIzAwZTVmZjsKICAgICAgLS1wYXBlci1jeWFuLWE3MDA6ICMwMGI4ZDQ7CgogICAgICAtLXBhcGVyLXRlYWwtNTA6ICNlMGYyZjE7CiAgICAgIC0tcGFwZXItdGVhbC0xMDA6ICNiMmRmZGI7CiAgICAgIC0tcGFwZXItdGVhbC0yMDA6ICM4MGNiYzQ7CiAgICAgIC0tcGFwZXItdGVhbC0zMDA6ICM0ZGI2YWM7CiAgICAgIC0tcGFwZXItdGVhbC00MDA6ICMyNmE2OWE7CiAgICAgIC0tcGFwZXItdGVhbC01MDA6ICMwMDk2ODg7CiAgICAgIC0tcGFwZXItdGVhbC02MDA6ICMwMDg5N2I7CiAgICAgIC0tcGFwZXItdGVhbC03MDA6ICMwMDc5NmI7CiAgICAgIC0tcGFwZXItdGVhbC04MDA6ICMwMDY5NWM7CiAgICAgIC0tcGFwZXItdGVhbC05MDA6ICMwMDRkNDA7CiAgICAgIC0tcGFwZXItdGVhbC1hMTAwOiAjYTdmZmViOwogICAgICAtLXBhcGVyLXRlYWwtYTIwMDogIzY0ZmZkYTsKICAgICAgLS1wYXBlci10ZWFsLWE0MDA6ICMxZGU5YjY7CiAgICAgIC0tcGFwZXItdGVhbC1hNzAwOiAjMDBiZmE1OwoKICAgICAgLS1wYXBlci1ncmVlbi01MDogI2U4ZjVlOTsKICAgICAgLS1wYXBlci1ncmVlbi0xMDA6ICNjOGU2Yzk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMjAwOiAjYTVkNmE3OwogICAgICAtLXBhcGVyLWdyZWVuLTMwMDogIzgxYzc4NDsKICAgICAgLS1wYXBlci1ncmVlbi00MDA6ICM2NmJiNmE7CiAgICAgIC0tcGFwZXItZ3JlZW4tNTAwOiAjNGNhZjUwOwogICAgICAtLXBhcGVyLWdyZWVuLTYwMDogIzQzYTA0NzsKICAgICAgLS1wYXBlci1ncmVlbi03MDA6ICMzODhlM2M7CiAgICAgIC0tcGFwZXItZ3JlZW4tODAwOiAjMmU3ZDMyOwogICAgICAtLXBhcGVyLWdyZWVuLTkwMDogIzFiNWUyMDsKICAgICAgLS1wYXBlci1ncmVlbi1hMTAwOiAjYjlmNmNhOwogICAgICAtLXBhcGVyLWdyZWVuLWEyMDA6ICM2OWYwYWU7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTQwMDogIzAwZTY3NjsKICAgICAgLS1wYXBlci1ncmVlbi1hNzAwOiAjMDBjODUzOwoKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDogI2YxZjhlOTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0xMDA6ICNkY2VkYzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMjAwOiAjYzVlMWE1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTMwMDogI2FlZDU4MTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi00MDA6ICM5Y2NjNjU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTAwOiAjOGJjMzRhOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTYwMDogIzdjYjM0MjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi03MDA6ICM2ODlmMzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tODAwOiAjNTU4YjJmOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTkwMDogIzMzNjkxZTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMTAwOiAjY2NmZjkwOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWEyMDA6ICNiMmZmNTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTQwMDogIzc2ZmYwMzsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNzAwOiAjNjRkZDE3OwoKICAgICAgLS1wYXBlci1saW1lLTUwOiAjZjlmYmU3OwogICAgICAtLXBhcGVyLWxpbWUtMTAwOiAjZjBmNGMzOwogICAgICAtLXBhcGVyLWxpbWUtMjAwOiAjZTZlZTljOwogICAgICAtLXBhcGVyLWxpbWUtMzAwOiAjZGNlNzc1OwogICAgICAtLXBhcGVyLWxpbWUtNDAwOiAjZDRlMTU3OwogICAgICAtLXBhcGVyLWxpbWUtNTAwOiAjY2RkYzM5OwogICAgICAtLXBhcGVyLWxpbWUtNjAwOiAjYzBjYTMzOwogICAgICAtLXBhcGVyLWxpbWUtNzAwOiAjYWZiNDJiOwogICAgICAtLXBhcGVyLWxpbWUtODAwOiAjOWU5ZDI0OwogICAgICAtLXBhcGVyLWxpbWUtOTAwOiAjODI3NzE3OwogICAgICAtLXBhcGVyLWxpbWUtYTEwMDogI2Y0ZmY4MTsKICAgICAgLS1wYXBlci1saW1lLWEyMDA6ICNlZWZmNDE7CiAgICAgIC0tcGFwZXItbGltZS1hNDAwOiAjYzZmZjAwOwogICAgICAtLXBhcGVyLWxpbWUtYTcwMDogI2FlZWEwMDsKCiAgICAgIC0tcGFwZXIteWVsbG93LTUwOiAjZmZmZGU3OwogICAgICAtLXBhcGVyLXllbGxvdy0xMDA6ICNmZmY5YzQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTIwMDogI2ZmZjU5ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctMzAwOiAjZmZmMTc2OwogICAgICAtLXBhcGVyLXllbGxvdy00MDA6ICNmZmVlNTg7CiAgICAgIC0tcGFwZXIteWVsbG93LTUwMDogI2ZmZWIzYjsKICAgICAgLS1wYXBlci15ZWxsb3ctNjAwOiAjZmRkODM1OwogICAgICAtLXBhcGVyLXllbGxvdy03MDA6ICNmYmMwMmQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTgwMDogI2Y5YTgyNTsKICAgICAgLS1wYXBlci15ZWxsb3ctOTAwOiAjZjU3ZjE3OwogICAgICAtLXBhcGVyLXllbGxvdy1hMTAwOiAjZmZmZjhkOwogICAgICAtLXBhcGVyLXllbGxvdy1hMjAwOiAjZmZmZjAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNDAwOiAjZmZlYTAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNzAwOiAjZmZkNjAwOwoKICAgICAgLS1wYXBlci1hbWJlci01MDogI2ZmZjhlMTsKICAgICAgLS1wYXBlci1hbWJlci0xMDA6ICNmZmVjYjM7CiAgICAgIC0tcGFwZXItYW1iZXItMjAwOiAjZmZlMDgyOwogICAgICAtLXBhcGVyLWFtYmVyLTMwMDogI2ZmZDU0ZjsKICAgICAgLS1wYXBlci1hbWJlci00MDA6ICNmZmNhMjg7CiAgICAgIC0tcGFwZXItYW1iZXItNTAwOiAjZmZjMTA3OwogICAgICAtLXBhcGVyLWFtYmVyLTYwMDogI2ZmYjMwMDsKICAgICAgLS1wYXBlci1hbWJlci03MDA6ICNmZmEwMDA7CiAgICAgIC0tcGFwZXItYW1iZXItODAwOiAjZmY4ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLTkwMDogI2ZmNmYwMDsKICAgICAgLS1wYXBlci1hbWJlci1hMTAwOiAjZmZlNTdmOwogICAgICAtLXBhcGVyLWFtYmVyLWEyMDA6ICNmZmQ3NDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTQwMDogI2ZmYzQwMDsKICAgICAgLS1wYXBlci1hbWJlci1hNzAwOiAjZmZhYjAwOwoKICAgICAgLS1wYXBlci1vcmFuZ2UtNTA6ICNmZmYzZTA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTEwMDogI2ZmZTBiMjsKICAgICAgLS1wYXBlci1vcmFuZ2UtMjAwOiAjZmZjYzgwOwogICAgICAtLXBhcGVyLW9yYW5nZS0zMDA6ICNmZmI3NGQ7CiAgICAgIC0tcGFwZXItb3JhbmdlLTQwMDogI2ZmYTcyNjsKICAgICAgLS1wYXBlci1vcmFuZ2UtNTAwOiAjZmY5ODAwOwogICAgICAtLXBhcGVyLW9yYW5nZS02MDA6ICNmYjhjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTcwMDogI2Y1N2MwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtODAwOiAjZWY2YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS05MDA6ICNlNjUxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWExMDA6ICNmZmQxODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWEyMDA6ICNmZmFiNDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE0MDA6ICNmZjkxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE3MDA6ICNmZjY1MDA7CgogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwOiAjZmJlOWU3OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTEwMDogI2ZmY2NiYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0yMDA6ICNmZmFiOTE7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMzAwOiAjZmY4YTY1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTQwMDogI2ZmNzA0MzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDA6ICNmZjU3MjI7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNjAwOiAjZjQ1MTFlOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTcwMDogI2U2NGExOTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS04MDA6ICNkODQzMTU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtOTAwOiAjYmYzNjBjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWExMDA6ICNmZjllODA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTIwMDogI2ZmNmU0MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNDAwOiAjZmYzZDAwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE3MDA6ICNkZDJjMDA7CgogICAgICAtLXBhcGVyLWJyb3duLTUwOiAjZWZlYmU5OwogICAgICAtLXBhcGVyLWJyb3duLTEwMDogI2Q3Y2NjODsKICAgICAgLS1wYXBlci1icm93bi0yMDA6ICNiY2FhYTQ7CiAgICAgIC0tcGFwZXItYnJvd24tMzAwOiAjYTE4ODdmOwogICAgICAtLXBhcGVyLWJyb3duLTQwMDogIzhkNmU2MzsKICAgICAgLS1wYXBlci1icm93bi01MDA6ICM3OTU1NDg7CiAgICAgIC0tcGFwZXItYnJvd24tNjAwOiAjNmQ0YzQxOwogICAgICAtLXBhcGVyLWJyb3duLTcwMDogIzVkNDAzNzsKICAgICAgLS1wYXBlci1icm93bi04MDA6ICM0ZTM0MmU7CiAgICAgIC0tcGFwZXItYnJvd24tOTAwOiAjM2UyNzIzOwoKICAgICAgLS1wYXBlci1ncmV5LTUwOiAjZmFmYWZhOwogICAgICAtLXBhcGVyLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLXBhcGVyLWdyZXktMjAwOiAjZWVlZWVlOwogICAgICAtLXBhcGVyLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLXBhcGVyLWdyZXktNDAwOiAjYmRiZGJkOwogICAgICAtLXBhcGVyLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLXBhcGVyLWdyZXktNjAwOiAjNzU3NTc1OwogICAgICAtLXBhcGVyLWdyZXktNzAwOiAjNjE2MTYxOwogICAgICAtLXBhcGVyLWdyZXktODAwOiAjNDI0MjQyOwogICAgICAtLXBhcGVyLWdyZXktOTAwOiAjMjEyMTIxOwoKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTA6ICNlY2VmZjE7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTEwMDogI2NmZDhkYzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMjAwOiAjYjBiZWM1OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0zMDA6ICM5MGE0YWU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTQwMDogIzc4OTA5YzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTAwOiAjNjA3ZDhiOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS02MDA6ICM1NDZlN2E7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTcwMDogIzQ1NWE2NDsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktODAwOiAjMzc0NzRmOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS05MDA6ICMyNjMyMzg7CgogICAgICAvKiBvcGFjaXR5IGZvciBkYXJrIHRleHQgb24gYSBsaWdodCBiYWNrZ3JvdW5kICovCiAgICAgIC0tZGFyay1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tZGFyay1kaXNhYmxlZC1vcGFjaXR5OiAwLjM4OyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWRhcmstc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNTQ7CiAgICAgIC0tZGFyay1wcmltYXJ5LW9wYWNpdHk6IDAuODc7CgogICAgICAvKiBvcGFjaXR5IGZvciBsaWdodCB0ZXh0IG9uIGEgZGFyayBiYWNrZ3JvdW5kICovCiAgICAgIC0tbGlnaHQtZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWxpZ2h0LWRpc2FibGVkLW9wYWNpdHk6IDAuMzsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1saWdodC1zZWNvbmRhcnktb3BhY2l0eTogMC43OwogICAgICAtLWxpZ2h0LXByaW1hcnktb3BhY2l0eTogMS4wOwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7cDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocDB0LmNvbnRlbnQpO3ZhciBkMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBhcyBpdHMgbWFpbgogICAgICAgKiBjb2xvciwgdGhlbiBzd2l0Y2hpbmcgZnJvbSBhIGxpZ2h0IHRvIGEgZGFyayB0aGVtZSBpcyBqdXN0IGEgbWF0dGVyIG9mCiAgICAgICAqIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgaW4geW91ciBhcHBsaWNhdGlvbi4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3IpOwogICAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3IpOwogICAgICAtLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yKTsKICAgICAgLS1kaXZpZGVyLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yKTsKICAgICAgLS1lcnJvci1jb2xvcjogdmFyKC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMCk7CgogICAgICAvKgogICAgICAgKiBQcmltYXJ5IGFuZCBhY2NlbnQgY29sb3JzLiBBbHNvIHNlZSBjb2xvci5qcyBmb3IgbW9yZSBjb2xvcnMuCiAgICAgICAqLwogICAgICAtLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLWxpZ2h0LXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby0xMDApOwogICAgICAtLWRhcmstcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTcwMCk7CgogICAgICAtLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMjAwKTsKICAgICAgLS1saWdodC1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTEwMCk7CiAgICAgIC0tZGFyay1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTQwMCk7CgoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIExpZ2h0IGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1saWdodC10aGVtZS1iYXNlLWNvbG9yOiAjMDAwMDAwOwogICAgICAtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3I6ICM3MzczNzM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM5YjliOWI7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yOiAjZGJkYmRiOwoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIERhcmsgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1kYXJrLXRoZW1lLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1kYXJrLXRoZW1lLWJhc2UtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS10ZXh0LWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjYmNiY2JjOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWRhcmstdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM2NDY0NjQ7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpdmlkZXItY29sb3I6ICMzYzNjM2M7CgogICAgICAvKgogICAgICAgKiBEZXByZWNhdGVkIHZhbHVlcyBiZWNhdXNlIG9mIHRoZWlyIGNvbmZ1c2luZyBuYW1lcy4KICAgICAgICovCiAgICAgIC0tdGV4dC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLWRlZmF1bHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtkMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChkMHQuY29udGVudCk7dmFyIEVoPXtwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7fSxkZXRhY2hlZDpmdW5jdGlvbigpe319O3ZhciBoVz1udWxsLFRoPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtoVz1uZXcgZ28oe3R5cGU6InZhbGlkYXRvciJ9KX0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWludmFsaWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSxnZXQgX3ZhbGlkYXRvcigpe3JldHVybiBoVyYmaFcuYnlLZXkodGhpcy52YWxpZGF0b3IpfSxoYXNWYWxpZGF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yIT1udWxsfSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmdGhpcy52YWx1ZSE9PXZvaWQgMD90aGlzLmludmFsaWQ9IXRoaXMuX2dldFZhbGlkaXR5KHRoaXMudmFsdWUpOnRoaXMuaW52YWxpZD0hdGhpcy5fZ2V0VmFsaWRpdHkoZSksIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc1ZhbGlkYXRvcigpP3RoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZShlKTohMH19O3ZhciBmVz17cHJvcGVydGllczp7Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToib24iLG9ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9yZXF1aXJlZENoYW5nZWQocmVxdWlyZWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hhc0lyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yPSEwfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIil9LF9jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPXRoaXMuY2hlY2tlZCx0aGlzLmZpcmUoImlyb24tY2hhbmdlIil9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXsodGhpcy52YWx1ZT09PXZvaWQgMHx8dGhpcy52YWx1ZT09PW51bGwpJiYodGhpcy52YWx1ZT0ib24iKX19LG0wdD1bRWgsVGgsZlddO3ZhciBwRT17b2JzZXJ2ZXJzOlsiX2ZvY3VzZWRDaGFuZ2VkKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0sX2ZvY3VzZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe2UmJnRoaXMuZW5zdXJlUmlwcGxlKCksdGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ob2xkRG93bj1lKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPXN1Ll9jcmVhdGVSaXBwbGUoKTtyZXR1cm4gZS5pZD0iaW5rIixlLnNldEF0dHJpYnV0ZSgiY2VudGVyIiwiIiksZS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiKSxlfX0sang9W1NoLERpLHN1LHBFXTt2YXIgTGJlPXtfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXtmVy5fY2hlY2tlZENoYW5nZWQuY2FsbCh0aGlzKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5jaGVja2VkP3RoaXMuX3JpcHBsZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCIiKTp0aGlzLl9yaXBwbGUucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIikpfSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7c3UuX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpLCF0aGlzLmRpc2FibGVkJiZ0aGlzLmlzQXR0YWNoZWQmJih0aGlzLmNoZWNrZWQ9dGhpcy5hY3RpdmUpfX0sWHg9W2p4LG0wdCxMYmVdO3ZhciBnMHQ9UWA8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1zaXplLCAxOHB4KTsKICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUsIC0xcHgpOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIDpob3N0KFtoaWRkZW5dKSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAjY2hlY2tib3hDb250YWluZXIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtYXJnaW46IHZhcigtLXBhcGVyLWNoZWNrYm94LW1hcmdpbiwgaW5pdGlhbCk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItY2hlY2tib3gtdmVydGljYWwtYWxpZ24sIG1pZGRsZSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogIH0KCiAgI2luayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgLyogQ2VudGVyIHRoZSByaXBwbGUgaW4gdGhlIGNoZWNrYm94IGJ5IG5lZ2F0aXZlIG9mZnNldHRpbmcgaXQgYnkKICAgICAqIChpbmtXaWR0aCAtIHJpcHBsZVdpZHRoKSAvIDIgKi8KICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogIH0KCiAgI2luazpkaXIocnRsKSB7CiAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogYXV0bzsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2tib3ggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlcjogc29saWQgMnB4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKCiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICAvKiBjaGVja2JveCBjaGVja2VkIGFuaW1hdGlvbnMgKi8KICAjY2hlY2tib3guY2hlY2tlZCAjY2hlY2ttYXJrIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwoKICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICBALXdlYmtpdC1rZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogICNjaGVja2JveC5jaGVja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMzYlOwogICAgaGVpZ2h0OiA3MCU7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1ib3R0b20td2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogIH0KCiAgI2NoZWNrbWFyazpkaXIocnRsKSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogIH0KCiAgLyogbGFiZWwgKi8KICAjY2hlY2tib3hMYWJlbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNjaGVja2JveExhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZDsKICB9CgogICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQoKICAjY2hlY2tib3hMYWJlbFtoaWRkZW5dIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3ggewogICAgb3BhY2l0eTogMC41OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3hMYWJlbCAgewogICAgb3BhY2l0eTogMC42NTsKICB9CgogIC8qIGludmFsaWQgc3RhdGUgKi8KICAjY2hlY2tib3guaW52YWxpZDpub3QoLmNoZWNrZWQpIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogIDxkaXYgaWQ9ImNoZWNrYm94IiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja2JveENsYXNzKGNoZWNrZWQsIGludmFsaWQpXV0iPgogICAgPGRpdiBpZD0iY2hlY2ttYXJrIiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja21hcmtDbGFzcyhjaGVja2VkKV1dIj48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJjaGVja2JveExhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtnMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpnMHQsaXM6InBhcGVyLWNoZWNrYm94IixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKTtpZihlPT09Ii0xcHgiKXt2YXIgdD10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUiKS50cmltKCkscj0icHgiLG49dC5tYXRjaCgvW0EtWmEtel0rJC8pO24hPT1udWxsJiYocj1uWzBdKTt2YXIgaT1wYXJzZUZsb2F0KHQpLG89OC8zKmk7cj09PSJweCImJihvPU1hdGguZmxvb3IobyksbyUyIT09aSUyJiZvKyspLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSI6bytyfSl9fSl9LF9jb21wdXRlQ2hlY2tib3hDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSIiO3JldHVybiBlJiYocis9ImNoZWNrZWQgIiksdCYmKHIrPSJpbnZhbGlkIikscn0sX2NvbXB1dGVDaGVja21hcmtDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iIjoiaGlkZGVuIn0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyLHBFLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTtpZighd2luZG93LnBvbHltZXJTa2lwTG9hZGluZ0ZvbnRSb2JvdG8pe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtlLnJlbD0ic3R5bGVzaGVldCIsZS50eXBlPSJ0ZXh0L2NzcyIsZS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixlLmhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubzo0MDAsNzAwfFJvYm90bzo0MDAsMzAwLDMwMGl0YWxpYyw0MDBpdGFsaWMsNTAwLDUwMGl0YWxpYyw3MDAsNzAwaXRhbGljIixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfXZhciBfMHQ9UWA8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtfMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfMHQuY29udGVudCk7dmFyIHBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cFcuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7cFcuaW5uZXJIVE1MPWA8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMjRweCA0MHB4OwoKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1kaWFsb2ctYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZzsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgubm8tcGFkZGluZykgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGlzIHNlbGVjdG9yIHdhcyBcYDpob3N0ID4gOjpjb250ZW50IGgyXGAuIEluIDIueCA8c2xvdD4gYWxsb3dzCiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpcwogICAgICBzZWxlY3Rvciwgc28gd2UgaGF2ZSB0byByZS1kZWZpbmUgZmlyc3QtY2hpbGQvbGFzdC1jaGlsZCBtYXJnaW5zIGJlbG93LiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi10b3AuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLWJvdHRvbS4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgucGFwZXItZGlhbG9nLWJ1dHRvbnMpLAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggOHB4IDhweCAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwVy5jb250ZW50KTt2YXIgeTB0PXtwcm9wZXJ0aWVzOnthbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxlbnRyeUFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9lbnRyeUFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfSxleGl0QW5pbWF0aW9uOntvYnNlcnZlcjoiX2V4aXRBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ319LF9lbnRyeUFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZW50cnk9W3tuYW1lOnRoaXMuZW50cnlBbmltYXRpb24sbm9kZTp0aGlzfV19LF9leGl0QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5leGl0PVt7bmFtZTp0aGlzLmV4aXRBbmltYXRpb24sbm9kZTp0aGlzfV19LF9jb3B5UHJvcGVydGllczpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sX2Nsb25lQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXtpc0Nsb25lOiEwfTtyZXR1cm4gdGhpcy5fY29weVByb3BlcnRpZXModCxlKSx0fSxfZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlOmZ1bmN0aW9uKGUsdCxyKXtpZighIXRoaXMuYW5pbWF0aW9uQ29uZmlnKXtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSYmdHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlPT0iZnVuY3Rpb24iKXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoInBsYXlBbmltYXRpb24iLCJQbGVhc2UgcHV0ICdhbmltYXRpb25Db25maWcnIGluc2lkZSBvZiB5b3VyIGNvbXBvbmVudHMgJ3Byb3BlcnRpZXMnIG9iamVjdCBpbnN0ZWFkIG9mIG91dHNpZGUgb2YgaXQuIikpO3JldHVybn12YXIgbjtpZihlP249dGhpcy5hbmltYXRpb25Db25maWdbZV06bj10aGlzLmFuaW1hdGlvbkNvbmZpZyxBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLG4pZm9yKHZhciBpLG89MDtpPW5bb107bysrKWlmKGkuYW5pbWF0YWJsZSlpLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShpLnR5cGV8fGUsdCxyKTtlbHNlIGlmKGkuaWQpe3ZhciBhPXRbaS5pZF07YT8oYS5pc0Nsb25lfHwodFtpLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhhKSxhPXRbaS5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGEsaSkpOnRbaS5pZF09aX1lbHNlIHIucHVzaChpKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD17fSxyPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShlLHQscik7Zm9yKHZhciBuIGluIHQpci5wdXNoKHRbbl0pO3JldHVybiByfX07dmFyIGtiZT17X2NvbmZpZ3VyZUFuaW1hdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10scj1bXTtpZihlLmxlbmd0aD4wKWZvcihsZXQgaSxvPTA7aT1lW29dO28rKyl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2lmKGEuaXNOZW9uQW5pbWF0aW9uKXtsZXQgcz1udWxsO2EuY29uZmlndXJlfHwoYS5jb25maWd1cmU9ZnVuY3Rpb24obCl7cmV0dXJuIG51bGx9KSxzPWEuY29uZmlndXJlKGkpLHIucHVzaCh7cmVzdWx0OnMsY29uZmlnOmksbmVvbkFuaW1hdGlvbjphfSl9ZWxzZSBjb25zb2xlLndhcm4odGhpcy5pcysiOiIsaS5uYW1lLCJub3QgZm91bmQhIil9Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBpPXJbbl0ucmVzdWx0LG89cltuXS5jb25maWcsYT1yW25dLm5lb25BbmltYXRpb247dHJ5e3R5cGVvZiBpLmNhbmNlbCE9ImZ1bmN0aW9uIiYmKGk9ZG9jdW1lbnQudGltZWxpbmUucGxheShpKSl9Y2F0Y2gocyl7aT1udWxsLGNvbnNvbGUud2FybigiQ291bGRudCBwbGF5IiwiKCIsby5uYW1lLCIpLiIscyl9aSYmdC5wdXNoKHtuZW9uQW5pbWF0aW9uOmEsY29uZmlnOm8sYW5pbWF0aW9uOml9KX1yZXR1cm4gdH0sX3Nob3VsZENvbXBsZXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMCxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5hbmltYXRpb24ucGxheVN0YXRlIT0iZmluaXNoZWQiKXt0PSExO2JyZWFrfXJldHVybiB0fSxfY29tcGxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5uZW9uQW5pbWF0aW9uLmNvbXBsZXRlKGVbdF0uY29uZmlnKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKGUpO2lmKCEhcil7dGhpcy5fYWN0aXZlPXRoaXMuX2FjdGl2ZXx8e30sdGhpcy5fYWN0aXZlW2VdJiYodGhpcy5fY29tcGxldGUodGhpcy5fYWN0aXZlW2VdKSxkZWxldGUgdGhpcy5fYWN0aXZlW2VdKTt2YXIgbj10aGlzLl9jb25maWd1cmVBbmltYXRpb25zKHIpO2lmKG4ubGVuZ3RoPT0wKXt0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pO3JldHVybn10aGlzLl9hY3RpdmVbZV09bjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLmFuaW1hdGlvbi5vbmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3Nob3VsZENvbXBsZXRlKG4pJiYodGhpcy5fY29tcGxldGUobiksZGVsZXRlIHRoaXMuX2FjdGl2ZVtlXSx0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pKX0uYmluZCh0aGlzKX19LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9hY3RpdmUpe3ZhciB0PXRoaXMuX2FjdGl2ZVtlXTtmb3IodmFyIHIgaW4gdCl0W3JdLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fSxiOT1beTB0LGtiZV07dmFyIHc5LFJiZT0oKT0+e2lmKHc5IT09dm9pZCAwKXJldHVybiB3OTtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtPYmplY3QuYXNzaWduKGUuc3R5bGUse292ZXJmbG93OiJhdXRvIixwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjBweCIsdG9wOiIwcHgiLG1heFdpZHRoOiIxMDBweCIsbWF4SGVpZ2h0OiIxMDBweCJ9KTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD0iMjAwcHgiLHQuc3R5bGUuaGVpZ2h0PSIyMDBweCIsZS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLHc5PU1hdGguYWJzKGUub2Zmc2V0V2lkdGgtMTAwKT4xP2Uub2Zmc2V0V2lkdGgtZS5jbGllbnRXaWR0aDowLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksdzl9LHYwdD17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lcldpZHRoOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGV9LGdldCBfZml0SGVpZ2h0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lckhlaWdodDplPXRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsZX0sZ2V0IF9maXRMZWZ0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPTA6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxlfSxnZXQgX2ZpdFRvcCgpe3ZhciBlO3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/ZT0wOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxlfSxnZXQgX2RlZmF1bHRQb3NpdGlvblRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGU7cmV0dXJuIGUmJmUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJihlPWUuaG9zdCksZX0sZ2V0IF9sb2NhbGVIb3Jpem9udGFsQWxpZ24oKXtpZih0aGlzLl9pc1JUTCl7aWYodGhpcy5ob3Jpem9udGFsQWxpZ249PT0icmlnaHQiKXJldHVybiJsZWZ0IjtpZih0aGlzLmhvcml6b250YWxBbGlnbj09PSJsZWZ0IilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGdldCBfaXNSVEwoKXtyZXR1cm4gdHlwZW9mIHRoaXMuX21lbW9pemVkSXNSVEw9PSJ1bmRlZmluZWQiJiYodGhpcy5fbWVtb2l6ZWRJc1JUTD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PSJydGwiKSx0aGlzLl9tZW1vaXplZElzUlRMfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb25UYXJnZXQ9dGhpcy5wb3NpdGlvblRhcmdldHx8dGhpcy5fZGVmYXVsdFBvc2l0aW9uVGFyZ2V0LHRoaXMuYXV0b0ZpdE9uQXR0YWNoJiYod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlzcGxheT09PSJub25lIj9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5maXQoKX0uYmluZCh0aGlzKSk6KHdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLmZpdCgpKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fX2RlZmVycmVkRml0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX19kZWZlcnJlZEZpdCksdGhpcy5fX2RlZmVycmVkRml0PW51bGwpfSxmaXQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uKCksdGhpcy5jb25zdHJhaW4oKSx0aGlzLmNlbnRlcigpfSxfZGlzY292ZXJJbmZvOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZpdEluZm8pe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zaXppbmdUYXJnZXQpO3RoaXMuX2ZpdEluZm89e2lubGluZVN0eWxlOnt0b3A6dGhpcy5zdHlsZS50b3B8fCIiLGxlZnQ6dGhpcy5zdHlsZS5sZWZ0fHwiIixwb3NpdGlvbjp0aGlzLnN0eWxlLnBvc2l0aW9ufHwiIn0sc2l6ZXJJbmxpbmVTdHlsZTp7bWF4V2lkdGg6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGh8fCIiLG1heEhlaWdodDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHR8fCIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ZS50b3AhPT0iYXV0byI/InRvcCI6ZS5ib3R0b20hPT0iYXV0byI/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ZS5sZWZ0IT09ImF1dG8iPyJsZWZ0IjplLnJpZ2h0IT09ImF1dG8iPyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OnQubWF4SGVpZ2h0IT09Im5vbmUiLHdpZHRoOnQubWF4V2lkdGghPT0ibm9uZSIsbWluV2lkdGg6cGFyc2VJbnQodC5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KHQubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQoZS5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KGUubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludChlLm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludChlLm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZpdEluZm98fHt9O2Zvcih2YXIgdCBpbiBlLnNpemVySW5saW5lU3R5bGUpdGhpcy5zaXppbmdUYXJnZXQuc3R5bGVbdF09ZS5zaXplcklubGluZVN0eWxlW3RdO2Zvcih2YXIgdCBpbiBlLmlubGluZVN0eWxlKXRoaXMuc3R5bGVbdF09ZS5pbmxpbmVTdHlsZVt0XTt0aGlzLl9maXRJbmZvPW51bGx9LHJlZml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdCx0PXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcDt0aGlzLnJlc2V0Rml0KCksdGhpcy5maXQoKSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0PWUsdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wPXR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbilyZXR1cm47dGhpcy5fZGlzY292ZXJJbmZvKCksd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2goKSx0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Iix0aGlzLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5zdHlsZS50b3A9IjBweCI7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLnBvc2l0aW9uVGFyZ2V0KSxyPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2xldCBuLGksbyxhO3RoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyYmKG49dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsaT10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxhPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCk7dmFyIHM9dGhpcy5fZml0SW5mby5tYXJnaW4sbD17d2lkdGg6ZS53aWR0aCtzLmxlZnQrcy5yaWdodCxoZWlnaHQ6ZS5oZWlnaHQrcy50b3Arcy5ib3R0b219LGM9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24sbCxlLHQsciksdT1jLmxlZnQrcy5sZWZ0LGg9Yy50b3Arcy50b3AsZj1NYXRoLm1pbihyLnJpZ2h0LXMucmlnaHQsdStlLndpZHRoKSxwPU1hdGgubWluKHIuYm90dG9tLXMuYm90dG9tLGgrZS5oZWlnaHQpO3U9TWF0aC5tYXgoci5sZWZ0K3MubGVmdCxNYXRoLm1pbih1LGYtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSksaD1NYXRoLm1heChyLnRvcCtzLnRvcCxNYXRoLm1pbihoLHAtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO2xldCBkPU1hdGgubWF4KGYtdSx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpLGc9TWF0aC5tYXgocC1oLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5IZWlnaHQpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWQrInB4Iix0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9ZysicHgiO2xldCBfPXUtZS5sZWZ0LHk9aC1lLnRvcDtpZih0aGlzLnN0eWxlLmxlZnQ9YCR7X31weGAsdGhpcy5zdHlsZS50b3A9YCR7eX1weGAsdGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzKXtsZXQgeD10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsYj10aGlzLnNpemluZ1RhcmdldC5jbGllbnRIZWlnaHQsUz1pLWEsUD14LWItUztpZihQPjApe2xldCBMPXIuaGVpZ2h0LXMudG9wLXMuYm90dG9tLFI9TWF0aC5taW4oTCxnK1ApO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1gJHtSfXB4YDtsZXQgRj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsej1GLXgsVTtjLnZlcnRpY2FsQWxpZ249PT0idG9wIj9VPXk6Yy52ZXJ0aWNhbEFsaWduPT09Im1pZGRsZSI/VT15LXovMjpjLnZlcnRpY2FsQWxpZ249PT0iYm90dG9tIiYmKFU9eS16KSxVPU1hdGgubWF4KHIudG9wK3MudG9wLE1hdGgubWluKFUsci5ib3R0b20tcy5ib3R0b20tRikpLHRoaXMuc3R5bGUudG9wPWAke1V9cHhgfWxldCBrPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLE89dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50V2lkdGgsRD1uLW8sST1rLU8tRDtpZihJPjApe2xldCBMPVJiZSgpLFI9ci53aWR0aC1zLmxlZnQtcy5yaWdodCxGPU1hdGgubWluKFIsZCtJLUwpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWAke0Z9cHhgO2xldCB6PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoK0wsVT16LWssVztjLmhvcml6b250YWxBbGlnbj09PSJsZWZ0Ij9XPV86Yy5ob3Jpem9udGFsQWxpZ249PT0iY2VudGVyIj9XPV8tVS8yOmMuaG9yaXpvbnRhbEFsaWduPT09InJpZ2h0IiYmKFc9Xy1VKSxXPU1hdGgubWF4KHIubGVmdCtzLmxlZnQsTWF0aC5taW4oVyxyLnJpZ2h0LXMucmlnaHQteikpLHRoaXMuc3R5bGUubGVmdD1gJHtXfXB4YH19fSxjb25zdHJhaW46ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Nob3VsZFBvc2l0aW9uKXt0aGlzLl9kaXNjb3ZlckluZm8oKTt2YXIgZT10aGlzLl9maXRJbmZvO2UucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zdHlsZS50b3A9IjBweCIpLGUucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLmxlZnQ9IjBweCIpLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnNpemVkQnkuaGVpZ2h0fHx0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHksInRvcCIsImJvdHRvbSIsIkhlaWdodCIpLGUuc2l6ZWRCeS53aWR0aHx8dGhpcy5fX3NpemVEaW1lbnNpb24odCxlLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHksImxlZnQiLCJyaWdodCIsIldpZHRoIil9fSxfc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3RoaXMuX19zaXplRGltZW5zaW9uKGUsdCxyLG4saSl9LF9fc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXRoaXMuX2ZpdEluZm8sYT10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKSxzPWk9PT0iV2lkdGgiP2Eud2lkdGg6YS5oZWlnaHQsbD10PT09bixjPWw/cy1lW25dOmVbcl0sdT1vLm1hcmdpbltsP3I6bl0saD0ib2Zmc2V0IitpLGY9dGhpc1toXS10aGlzLnNpemluZ1RhcmdldFtoXTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IitpXT1zLXUtYy1mKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBlPXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCEoZS52ZXJ0aWNhbGx5JiZlLmhvcml6b250YWxseSkpe3RoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnRvcD0iMHB4IiksZS5ob3Jpem9udGFsbHl8fCh0aGlzLnN0eWxlLmxlZnQ9IjBweCIpO3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtpZighZS52ZXJ0aWNhbGx5KXt2YXIgbj1yLnRvcC10LnRvcCsoci5oZWlnaHQtdC5oZWlnaHQpLzI7dGhpcy5zdHlsZS50b3A9bisicHgifWlmKCFlLmhvcml6b250YWxseSl7dmFyIGk9ci5sZWZ0LXQubGVmdCsoci53aWR0aC10LndpZHRoKS8yO3RoaXMuc3R5bGUubGVmdD1pKyJweCJ9fX19LF9fZ2V0Tm9ybWFsaXplZFJlY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGU9PT13aW5kb3c/e3RvcDowLGxlZnQ6MCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHR9OmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LF9fZ2V0T2Zmc2NyZWVuQXJlYTpmdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5taW4oMCxlLnRvcCkrTWF0aC5taW4oMCxyLmJvdHRvbS0oZS50b3ArdC5oZWlnaHQpKSxpPU1hdGgubWluKDAsZS5sZWZ0KStNYXRoLm1pbigwLHIucmlnaHQtKGUubGVmdCt0LndpZHRoKSk7cmV0dXJuIE1hdGguYWJzKG4pKnQud2lkdGgrTWF0aC5hYnMoaSkqdC5oZWlnaHR9LF9fZ2V0UG9zaXRpb246ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhPVt7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fV07aWYodGhpcy5ub092ZXJsYXApe2Zvcih2YXIgcz0wLGw9YS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9e307Zm9yKHZhciB1IGluIGFbc10pY1t1XT1hW3NdW3VdO2EucHVzaChjKX1hWzBdLnRvcD1hWzFdLnRvcCs9aS5oZWlnaHQsYVsyXS50b3A9YVszXS50b3AtPWkuaGVpZ2h0LGFbNF0ubGVmdD1hWzZdLmxlZnQrPWkud2lkdGgsYVs1XS5sZWZ0PWFbN10ubGVmdC09aS53aWR0aH10PXQ9PT0iYXV0byI/bnVsbDp0LGU9ZT09PSJhdXRvIj9udWxsOmUsKCFlfHxlPT09ImNlbnRlciIpJiYoYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6aS50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/aS5oZWlnaHQ6MCksbGVmdDppLmxlZnQtbi53aWR0aC8yK2kud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxhLnB1c2goe3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9pLmhlaWdodDowKSxsZWZ0OmkubGVmdC1uLndpZHRoLzIraS53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pKSwoIXR8fHQ9PT0ibWlkZGxlIikmJihhLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6aS50b3Atbi5oZWlnaHQvMitpLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9pLndpZHRoOjApfSksYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDppLnRvcC1uLmhlaWdodC8yK2kuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2kud2lkdGg6MCl9KSksdD09PSJtaWRkbGUiJiZlPT09ImNlbnRlciImJmEucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmkudG9wLW4uaGVpZ2h0LzIraS5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0LW4ud2lkdGgvMitpLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSk7Zm9yKHZhciBoLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGY9YVtzXSxwPWYudmVydGljYWxBbGlnbj09PXQsZD1mLmhvcml6b250YWxBbGlnbj09PWU7aWYoIXRoaXMuZHluYW1pY0FsaWduJiYhdGhpcy5ub092ZXJsYXAmJnAmJmQpe2g9ZjticmVha312YXIgZz0oIXR8fHApJiYoIWV8fGQpO2lmKCEoIXRoaXMuZHluYW1pY0FsaWduJiYhZykpe2lmKGYub2Zmc2NyZWVuQXJlYT10aGlzLl9fZ2V0T2Zmc2NyZWVuQXJlYShmLHIsbyksZi5vZmZzY3JlZW5BcmVhPT09MCYmZyl7aD1mO2JyZWFrfWg9aHx8Zjt2YXIgXz1mLm9mZnNjcmVlbkFyZWEtaC5vZmZzY3JlZW5BcmVhOyhfPDB8fF89PT0wJiYocHx8ZCkpJiYoaD1mKX19cmV0dXJuIGh9fTt2YXIgJHg9RWxlbWVudC5wcm90b3R5cGUsUzk9JHgubWF0Y2hlc3x8JHgubWF0Y2hlc1NlbGVjdG9yfHwkeC5tb3pNYXRjaGVzU2VsZWN0b3J8fCR4Lm1zTWF0Y2hlc1NlbGVjdG9yfHwkeC5vTWF0Y2hlc1NlbGVjdG9yfHwkeC53ZWJraXRNYXRjaGVzU2VsZWN0b3IsZFc9Y2xhc3N7Z2V0VGFiYmFibGVOb2Rlcyh0KXt2YXIgcj1bXSxuPXRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQscik7cmV0dXJuIG4/dGhpcy5fc29ydEJ5VGFiSW5kZXgocik6cn1pc0ZvY3VzYWJsZSh0KXtyZXR1cm4gUzkuY2FsbCh0LCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9TOS5jYWxsKHQsIjpub3QoW2Rpc2FibGVkXSkiKTpTOS5jYWxsKHQsImFbaHJlZl0sIGFyZWFbaHJlZl0sIGlmcmFtZSwgW3RhYmluZGV4XSwgW2NvbnRlbnRFZGl0YWJsZV0iKX1pc1RhYmJhYmxlKHQpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlKHQpJiZTOS5jYWxsKHQsJzpub3QoW3RhYmluZGV4PSItMSJdKScpJiZ0aGlzLl9pc1Zpc2libGUodCl9X25vcm1hbGl6ZWRUYWJJbmRleCh0KXtpZih0aGlzLmlzRm9jdXNhYmxlKHQpKXt2YXIgcj10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MDtyZXR1cm4gTnVtYmVyKHIpfXJldHVybi0xfV9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LHIpe2lmKHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4hMTt2YXIgbj10O2lmKCF0aGlzLl9pc1Zpc2libGUobikpcmV0dXJuITE7dmFyIGk9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KG4pLG89aT4wO2k+PTAmJnIucHVzaChuKTt2YXIgYTtuLmxvY2FsTmFtZT09PSJjb250ZW50Inx8bi5sb2NhbE5hbWU9PT0ic2xvdCI/YT16dChuKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6YT16dChuLnJvb3R8fG4pLmNoaWxkcmVuO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKW89dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoYVtzXSxyKXx8bztyZXR1cm4gb31faXNWaXNpYmxlKHQpe3ZhciByPXQuc3R5bGU7cmV0dXJuIHIudmlzaWJpbGl0eSE9PSJoaWRkZW4iJiZyLmRpc3BsYXkhPT0ibm9uZSI/KHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksci52aXNpYmlsaXR5IT09ImhpZGRlbiImJnIuZGlzcGxheSE9PSJub25lIik6ITF9X3NvcnRCeVRhYkluZGV4KHQpe3ZhciByPXQubGVuZ3RoO2lmKHI8MilyZXR1cm4gdDt2YXIgbj1NYXRoLmNlaWwoci8yKSxpPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UoMCxuKSksbz10aGlzLl9zb3J0QnlUYWJJbmRleCh0LnNsaWNlKG4pKTtyZXR1cm4gdGhpcy5fbWVyZ2VTb3J0QnlUYWJJbmRleChpLG8pfV9tZXJnZVNvcnRCeVRhYkluZGV4KHQscil7Zm9yKHZhciBuPVtdO3QubGVuZ3RoPjAmJnIubGVuZ3RoPjA7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIodFswXSxyWzBdKT9uLnB1c2goci5zaGlmdCgpKTpuLnB1c2godC5zaGlmdCgpKTtyZXR1cm4gbi5jb25jYXQodCxyKX1faGFzTG93ZXJUYWJPcmRlcih0LHIpe3ZhciBuPU1hdGgubWF4KHQudGFiSW5kZXgsMCksaT1NYXRoLm1heChyLnRhYkluZGV4LDApO3JldHVybiBuPT09MHx8aT09PTA/aT5uOm4+aX19LHgwdD1uZXcgZFc7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZC1jb2xvciwgIzAwMCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wOwogICAgICB9CgogICAgICA6aG9zdCgub3BlbmVkKSB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wYWNpdHksIDAuNik7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wZW5lZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tb3ZlcmxheS1iYWNrZHJvcCIscHJvcGVydGllczp7b3BlbmVkOntyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9vblRyYW5zaXRpb25lbmQifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX29wZW5lZFJhZj1udWxsfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKX0scHJlcGFyZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5wYXJlbnROb2RlJiZ6dChkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSExfSxjb21wbGV0ZTpmdW5jdGlvbigpeyF0aGlzLm9wZW5lZCYmdGhpcy5wYXJlbnROb2RlPT09ZG9jdW1lbnQuYm9keSYmenQodGhpcy5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzKX0sX29uVHJhbnNpdGlvbmVuZDpmdW5jdGlvbihlKXtlJiZlLnRhcmdldD09PXRoaXMmJnRoaXMuY29tcGxldGUoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7aWYoZSl0aGlzLnByZXBhcmUoKTtlbHNle3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpOyh0LnRyYW5zaXRpb25EdXJhdGlvbj09PSIwcyJ8fHQub3BhY2l0eT09MCkmJnRoaXMuY29tcGxldGUoKX0hdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5fX29wZW5lZFJhZiYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fb3BlbmVkUmFmKSx0aGlzLl9fb3BlbmVkUmFmPW51bGwpLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX19vcGVuZWRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbCx0aGlzLnRvZ2dsZUNsYXNzKCJvcGVuZWQiLHRoaXMub3BlbmVkKX0uYmluZCh0aGlzKSkpfX0pO3ZhciBtVz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX292ZXJsYXlzPVtdLHRoaXMuX21pbmltdW1aPTEwMSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCxFbShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fHwodGhpcy5fYmFja2Ryb3BFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tb3ZlcmxheS1iYWNrZHJvcCIpKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoKCF0fHwhKHQgaW5zdGFuY2VvZiBFbGVtZW50KSkmJih0PWRvY3VtZW50LmJvZHkpO3Qucm9vdCYmenQodC5yb290KS5hY3RpdmVFbGVtZW50Oyl0PXp0KHQucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gdH1fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXNbdF07aWYoISFyKXt2YXIgbj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxpPXRoaXMuX292ZXJsYXlzW25dO2lmKGkmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShyLGkpJiZuLS0sISh0Pj1uKSl7dmFyIG89TWF0aC5tYXgodGhpcy5jdXJyZW50T3ZlcmxheVooKSx0aGlzLl9taW5pbXVtWik7Zm9yKHRoaXMuX2dldFoocik8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoocixvKTt0PG47KXRoaXMuX292ZXJsYXlzW3RdPXRoaXMuX292ZXJsYXlzW3QrMV0sdCsrO3RoaXMuX292ZXJsYXlzW25dPXJ9fX1hZGRPclJlbW92ZU92ZXJsYXkodCl7dC5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KHQpOnRoaXMucmVtb3ZlT3ZlcmxheSh0KX1hZGRPdmVybGF5KHQpe3ZhciByPXRoaXMuX292ZXJsYXlzLmluZGV4T2YodCk7aWYocj49MCl7dGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQociksdGhpcy50cmFja0JhY2tkcm9wKCk7cmV0dXJufXZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aCxpPXRoaXMuX292ZXJsYXlzW24tMV0sbz1NYXRoLm1heCh0aGlzLl9nZXRaKGkpLHRoaXMuX21pbmltdW1aKSxhPXRoaXMuX2dldFoodCk7aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsaSkpe3RoaXMuX2FwcGx5T3ZlcmxheVooaSxvKSxuLS07dmFyIHM9dGhpcy5fb3ZlcmxheXNbbi0xXTtvPU1hdGgubWF4KHRoaXMuX2dldFoocyksdGhpcy5fbWluaW11bVopfWE8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoodCxvKSx0aGlzLl9vdmVybGF5cy5zcGxpY2UobiwwLHQpLHRoaXMudHJhY2tCYWNrZHJvcCgpfXJlbW92ZU92ZXJsYXkodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtyIT09LTEmJih0aGlzLl9vdmVybGF5cy5zcGxpY2UociwxKSx0aGlzLnRyYWNrQmFja2Ryb3AoKSl9Y3VycmVudE92ZXJsYXkoKXt2YXIgdD10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19Y3VycmVudE92ZXJsYXlaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5jdXJyZW50T3ZlcmxheSgpKX1lbnN1cmVNaW5pbXVtWih0KXt0aGlzLl9taW5pbXVtWj1NYXRoLm1heCh0aGlzLl9taW5pbXVtWix0KX1mb2N1c092ZXJsYXkoKXt2YXIgdD10aGlzLmN1cnJlbnRPdmVybGF5KCk7dCYmdC5fYXBwbHlGb2N1cygpfXRyYWNrQmFja2Ryb3AoKXt2YXIgdD10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7IXQmJiF0aGlzLl9iYWNrZHJvcEVsZW1lbnR8fCh0aGlzLmJhY2tkcm9wRWxlbWVudC5zdHlsZS56SW5kZXg9dGhpcy5fZ2V0Wih0KS0xLHRoaXMuYmFja2Ryb3BFbGVtZW50Lm9wZW5lZD0hIXQsdGhpcy5iYWNrZHJvcEVsZW1lbnQucHJlcGFyZSgpKX1nZXRCYWNrZHJvcHMoKXtmb3IodmFyIHQ9W10scj0wO3I8dGhpcy5fb3ZlcmxheXMubGVuZ3RoO3IrKyl0aGlzLl9vdmVybGF5c1tyXS53aXRoQmFja2Ryb3AmJnQucHVzaCh0aGlzLl9vdmVybGF5c1tyXSk7cmV0dXJuIHR9YmFja2Ryb3BaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0xfV9vdmVybGF5V2l0aEJhY2tkcm9wKCl7Zm9yKHZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMuX292ZXJsYXlzW3RdLndpdGhCYWNrZHJvcClyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19X2dldFoodCl7dmFyIHI9dGhpcy5fbWluaW11bVo7aWYodCl7dmFyIG49TnVtYmVyKHQuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS56SW5kZXgpO249PT1uJiYocj1uKX1yZXR1cm4gcn1fc2V0Wih0LHIpe3Quc3R5bGUuekluZGV4PXJ9X2FwcGx5T3ZlcmxheVoodCxyKXt0aGlzLl9zZXRaKHQscisyKX1fb3ZlcmxheUluUGF0aCh0KXt0PXR8fFtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uX21hbmFnZXI9PT10aGlzKXJldHVybiB0W3JdfV9vbkNhcHR1cmVDbGljayh0KXt2YXIgcj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtpZihyIT09LTEpZm9yKHZhciBuPXp0KHQpLnBhdGgsaTsoaT10aGlzLl9vdmVybGF5c1tyXSkmJnRoaXMuX292ZXJsYXlJblBhdGgobikhPT1pJiYoaS5fb25DYXB0dXJlQ2xpY2sodCksaS5hbGxvd0NsaWNrVGhyb3VnaCk7KXItLX1fb25DYXB0dXJlRm9jdXModCl7dmFyIHI9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3ImJnIuX29uQ2FwdHVyZUZvY3VzKHQpfV9vbkNhcHR1cmVLZXlEb3duKHQpe3ZhciByPXRoaXMuY3VycmVudE92ZXJsYXkoKTtyJiYoT28ua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsImVzYyIpP3IuX29uQ2FwdHVyZUVzYyh0KTpPby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidGFiIikmJnIuX29uQ2FwdHVyZVRhYih0KSl9X3Nob3VsZEJlQmVoaW5kT3ZlcmxheSh0LHIpe3JldHVybiF0LmFsd2F5c09uVG9wJiZyLmFsd2F5c09uVG9wfX0sYjB0PW5ldyBtVzt2YXIgRTk9e3BhZ2VYOjAscGFnZVk6MH0sdzB0PW51bGwsZ1c9W10sVDk9WyJ3aGVlbCIsIm1vdXNld2hlZWwiLCJET01Nb3VzZVNjcm9sbCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiXSxNOSxfVztmdW5jdGlvbiBTMHQoZSl7Q2guaW5kZXhPZihlKT49MHx8KENoLmxlbmd0aD09PTAmJkRiZSgpLENoLnB1c2goZSksX1c9Q2hbQ2gubGVuZ3RoLTFdLEUwdD1bXSxUMHQ9W10pfWZ1bmN0aW9uIE0wdChlKXt2YXIgdD1DaC5pbmRleE9mKGUpO3QhPT0tMSYmKENoLnNwbGljZSh0LDEpLF9XPUNoW0NoLmxlbmd0aC0xXSxFMHQ9W10sVDB0PVtdLENoLmxlbmd0aD09PTAmJk9iZSgpKX12YXIgQ2g9W10sRTB0PW51bGwsVDB0PW51bGw7ZnVuY3Rpb24gTmJlKGUpe2lmKGUuY2FuY2VsYWJsZSYmemJlKGUpJiZlLnByZXZlbnREZWZhdWx0KCksZS50YXJnZXRUb3VjaGVzKXt2YXIgdD1lLnRhcmdldFRvdWNoZXNbMF07RTkucGFnZVg9dC5wYWdlWCxFOS5wYWdlWT10LnBhZ2VZfX1mdW5jdGlvbiBEYmUoKXtNOT1NOXx8TmJlLmJpbmQodm9pZCAwKTtmb3IodmFyIGU9MCx0PVQ5Lmxlbmd0aDtlPHQ7ZSsrKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVDlbZV0sTTkse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfWZ1bmN0aW9uIE9iZSgpe2Zvcih2YXIgZT0wLHQ9VDkubGVuZ3RoO2U8dDtlKyspZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUOVtlXSxNOSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9ZnVuY3Rpb24gemJlKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7aWYoZS50eXBlIT09InRvdWNobW92ZSImJncwdCE9PXQmJih3MHQ9dCxnVz1GYmUoenQoZSkucGF0aCkpLCFnVy5sZW5ndGgpcmV0dXJuITA7aWYoZS50eXBlPT09InRvdWNoc3RhcnQiKXJldHVybiExO3ZhciByPUhiZShlKTtyZXR1cm4hQmJlKGdXLHIuZGVsdGFYLHIuZGVsdGFZKX1mdW5jdGlvbiBGYmUoZSl7Zm9yKHZhciB0PVtdLHI9ZS5pbmRleE9mKF9XKSxuPTA7bjw9cjtuKyspaWYoZVtuXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgaT1lW25dLG89aS5zdHlsZTtvLm92ZXJmbG93IT09InNjcm9sbCImJm8ub3ZlcmZsb3chPT0iYXV0byImJihvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpKSwoby5vdmVyZmxvdz09PSJzY3JvbGwifHxvLm92ZXJmbG93PT09ImF1dG8iKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIEJiZShlLHQscil7aWYoISghdCYmIXIpKWZvcih2YXIgbj1NYXRoLmFicyhyKT49TWF0aC5hYnModCksaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLGE9ITE7aWYobj9hPXI8MD9vLnNjcm9sbFRvcD4wOm8uc2Nyb2xsVG9wPG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0OmE9dDwwP28uc2Nyb2xsTGVmdD4wOm8uc2Nyb2xsTGVmdDxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgsYSlyZXR1cm4gb319ZnVuY3Rpb24gSGJlKGUpe3ZhciB0PXtkZWx0YVg6ZS5kZWx0YVgsZGVsdGFZOmUuZGVsdGFZfTtpZighKCJkZWx0YVgiaW4gZSkpe2lmKCJ3aGVlbERlbHRhWCJpbiBlJiYid2hlZWxEZWx0YVkiaW4gZSl0LmRlbHRhWD0tZS53aGVlbERlbHRhWCx0LmRlbHRhWT0tZS53aGVlbERlbHRhWTtlbHNlIGlmKCJ3aGVlbERlbHRhImluIGUpdC5kZWx0YVg9MCx0LmRlbHRhWT0tZS53aGVlbERlbHRhO2Vsc2UgaWYoImF4aXMiaW4gZSl0LmRlbHRhWD1lLmF4aXM9PT0xP2UuZGV0YWlsOjAsdC5kZWx0YVk9ZS5heGlzPT09Mj9lLmRldGFpbDowO2Vsc2UgaWYoZS50YXJnZXRUb3VjaGVzKXt2YXIgcj1lLnRhcmdldFRvdWNoZXNbMF07dC5kZWx0YVg9RTkucGFnZVgtci5wYWdlWCx0LmRlbHRhWT1FOS5wYWdlWS1yLnBhZ2VZfX1yZXR1cm4gdH12YXIgUG09e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LHNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpiMHR9LF9mb2N1c2VkQ2hpbGQ6e3R5cGU6T2JqZWN0fX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sb2JzZXJ2ZXJzOlsiX191cGRhdGVTY3JvbGxPYnNlcnZlcnMoaXNBdHRhY2hlZCwgb3BlbmVkLCBzY3JvbGxBY3Rpb24pIl0sZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9tYW5hZ2VyLmJhY2tkcm9wRWxlbWVudH0sZ2V0IF9mb2N1c05vZGUoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZENoaWxkfHx6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKCJbYXV0b2ZvY3VzXSIpfHx0aGlzfSxnZXQgX2ZvY3VzYWJsZU5vZGVzKCl7cmV0dXJuIHgwdC5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITEsdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbCx0aGlzLl9fcmFmcz17fSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX19zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbExlZnQ9bnVsbCx0aGlzLl9fb25DYXB0dXJlU2Nyb2xsPXRoaXMuX19vbkNhcHR1cmVTY3JvbGwuYmluZCh0aGlzKSx0aGlzLl9fcm9vdE5vZGVzPW51bGwsdGhpcy5fZW5zdXJlU2V0dXAoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCksdGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX29uTm9kZXNDaGFuZ2UpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbDtmb3IodmFyIGUgaW4gdGhpcy5fX3JhZnMpdGhpcy5fX3JhZnNbZV0hPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fcmFmc1tlXSk7dGhpcy5fX3JhZnM9e30sdGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX19pc0FuaW1hdGluZyYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOih0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sb3BlbjpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITF9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jYW5jZWxlZCIsZSx7Y2FuY2VsYWJsZTohMH0pO3QuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX3NldENhbmNlbGVkKCEwKSx0aGlzLm9wZW5lZD0hMSl9LGludmFsaWRhdGVUYWJiYWJsZXM6ZnVuY3Rpb24oKXt0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsfSxfZW5zdXJlU2V0dXA6ZnVuY3Rpb24oKXt0aGlzLl9vdmVybGF5U2V0dXB8fCh0aGlzLl9vdmVybGF5U2V0dXA9ITAsdGhpcy5zdHlsZS5vdXRsaW5lPSJub25lIix0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5pc0F0dGFjaGVkJiYodGhpcy5fX2lzQW5pbWF0aW5nPSEwLHRoaXMuX19kZXJhZigiX19vcGVuZWRDaGFuZ2VkIix0aGlzLl9fb3BlbmVkQ2hhbmdlZCkpfSxfY2FuY2VsZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNhbmNlbGVkPXRoaXMuY2FuY2VsZWR9LF93aXRoQmFja2Ryb3BDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy53aXRoQmFja2Ryb3AmJiF0aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT8odGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITApOnRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleCYmKHRoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSksdGhpcy5vcGVuZWQmJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbWFuYWdlci50cmFja0JhY2tkcm9wKCl9LF9wcmVwYXJlUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudCx0aGlzLl9wcmVwYXJlUG9zaXRpb25pbmcoKSx0aGlzLnJlZml0KCksdGhpcy5fZmluaXNoUG9zaXRpb25pbmcoKSx0aGlzLm5vQXV0b0ZvY3VzJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZm9jdXNOb2RlJiYodGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF9maW5pc2hSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1vcGVuZWQiKX0sX2ZpbmlzaFJlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdHlsZS56SW5kZXg9IiIsdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2xvc2VkIix0aGlzLmNsb3NpbmdSZWFzb24pfSxfcHJlcGFyZVBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0ibm9uZSIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0iIn0sX2ZpbmlzaFBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSIiLHRoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuc3R5bGUuZGlzcGxheT0iIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcH0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLm9wZW5lZCl0aGlzLm5vQXV0b0ZvY3VzfHx0aGlzLl9mb2N1c05vZGUuZm9jdXMoKTtlbHNle2lmKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUpe3ZhciBlPXRoaXMuX21hbmFnZXIuZGVlcEFjdGl2ZUVsZW1lbnQ7KGU9PT1kb2N1bWVudC5ib2R5fHxVYmUodGhpcyxlKSkmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCl9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX2ZvY3VzZWRDaGlsZD1udWxsfX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbk91dHNpZGVDbGlja3x8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVGb2N1czpmdW5jdGlvbihlKXtpZighIXRoaXMud2l0aEJhY2tkcm9wKXt2YXIgdD16dChlKS5wYXRoO3QuaW5kZXhPZih0aGlzKT09PS0xPyhlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2FwcGx5Rm9jdXMoKSk6dGhpcy5fZm9jdXNlZENoaWxkPXRbMF19fSxfb25DYXB0dXJlRXNjOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbkVzY0tleXx8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVUYWI6ZnVuY3Rpb24oZSl7aWYoISF0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgdD1lLnNoaWZ0S2V5LHI9dD90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSxuPXQ/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGUsaT0hMTtpZihyPT09bilpPSEwO2Vsc2V7dmFyIG89dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtpPW89PT1yfHxvPT09dGhpc31pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1uLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5pbnZhbGlkYXRlVGFiYmFibGVzKCksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9ZVswXSx0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9ZVtlLmxlbmd0aC0xXX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fcmFmcztyW2VdIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUocltlXSkscltlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyW2VdPW51bGwsdC5jYWxsKHRoaXMpfS5iaW5kKHRoaXMpKX0sX191cGRhdGVTY3JvbGxPYnNlcnZlcnM6ZnVuY3Rpb24oZSx0LHIpeyFlfHwhdHx8IXRoaXMuX19pc1ZhbGlkU2Nyb2xsQWN0aW9uKHIpPyhNMHQodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKToocj09PSJsb2NrIiYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSxTMHQodGhpcykpLHRoaXMuX19hZGRTY3JvbGxMaXN0ZW5lcnMoKSl9LF9fYWRkU2Nyb2xsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19yb290Tm9kZXMpe2lmKHRoaXMuX19yb290Tm9kZXM9W10sY18pZm9yKHZhciBlPXRoaXM7ZTspZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmZS5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2goZSksZT1lLmhvc3R8fGUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKSx0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fcm9vdE5vZGVzPW51bGwpfSxfX2lzVmFsaWRTY3JvbGxBY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0ibG9jayJ8fGU9PT0icmVmaXQifHxlPT09ImNhbmNlbCJ9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9faXNBbmltYXRpbmcmJiEoenQoZSkucGF0aC5pbmRleE9mKHRoaXMpPj0wKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UicmVmaXQiOnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpO2JyZWFrO2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbChlKTticmVha319LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fSxWYmU9ZT0+ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8ZS5ob3N0LFViZT0oZSx0KT0+e2ZvcihsZXQgcj10O3I7cj1WYmUocikpaWYocj09PWUpcmV0dXJuITA7cmV0dXJuITF9LEt4PVt2MHQsSnMsUG1dO3ZhciB5Vz17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImRpYWxvZyIsdGFiaW5kZXg6Ii0xIn0scHJvcGVydGllczp7bW9kYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX19yZWFkaWVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfbW9kYWxDaGFuZ2VkKG1vZGFsLCBfX3JlYWRpZWQpIl0sbGlzdGVuZXJzOnt0YXA6Il9vbkRpYWxvZ0NsaWNrIn0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy5fX3JlYWRpZWQ9ITB9LF9tb2RhbENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5ub0NhbmNlbE9uRXNjS2V5PSEwLHRoaXMud2l0aEJhY2tkcm9wPSEwKToodGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMubm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXkmJnRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleSx0aGlzLndpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCYmdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3ApKX0sX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNvbmZpcm1lZD1lfSxfb25EaWFsb2dDbGljazpmdW5jdGlvbihlKXtmb3IodmFyIHQ9enQoZSkucGF0aCxyPTAsbj10LmluZGV4T2YodGhpcyk7cjxuO3IrKyl7dmFyIGk9dFtyXTtpZihpLmhhc0F0dHJpYnV0ZSYmKGkuaGFzQXR0cmlidXRlKCJkaWFsb2ctZGlzbWlzcyIpfHxpLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSkpe3RoaXMuX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQoaS5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpLHRoaXMuY2xvc2UoKSxlLnN0b3BQcm9wYWdhdGlvbigpO2JyZWFrfX19fSxDMHQ9W0t4LHlXXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWRpYWxvZyIsYmVoYXZpb3JzOltDMHQsYjldLGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImVudHJ5Iil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZXhpdCIpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlzLXNjcm9sbGVkOm5vdCg6Zmlyc3QtY2hpbGQpKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYW4tc2Nyb2xsOm5vdCguc2Nyb2xsZWQtdG8tYm90dG9tKTpub3QoOmxhc3QtY2hpbGQpKTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLnNjcm9sbGFibGUgewogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXNjcm9sbDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzY3JvbGxhYmxlIiBjbGFzcz0ic2Nyb2xsYWJsZSIgb24tc2Nyb2xsPSJ1cGRhdGVTY3JvbGxTdGF0ZSI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHRoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A+MCksdGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCksdGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3ArdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0Pj10aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpfSxfZW5zdXJlVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5kaWFsb2dFbGVtZW50PXRoaXMuZGlhbG9nRWxlbWVudHx8dGhpcy5wYXJlbnRFbGVtZW50LHRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycyYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycy5pbmRleE9mKHlXKT49MD8odGhpcy5kaWFsb2dFbGVtZW50LnNpemluZ1RhcmdldD10aGlzLnNjcm9sbFRhcmdldCx0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJmaXQiKSk6dGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJmaXQiKX19KTt2YXIgZWM9WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KYCxpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LHRpbWVvdXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MH0sX3RleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sY3JlYXRlZDpmdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9dGhpcyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1hbm5vdW5jZSIsdGhpcy5fb25Jcm9uQW5ub3VuY2UuYmluZCh0aGlzKSl9LGFubm91bmNlOmZ1bmN0aW9uKGUpe3RoaXMuX3RleHQ9IiIsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX3RleHQ9ZX0sdGhpcy50aW1lb3V0KX0sX29uSXJvbkFubm91bmNlOmZ1bmN0aW9uKGUpe2UuZGV0YWlsJiZlLmRldGFpbC50ZXh0JiZ0aGlzLmFubm91bmNlKGUuZGV0YWlsLnRleHQpfX0pO2VjLmluc3RhbmNlPW51bGw7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1hMTF5LWFubm91bmNlciIpKSxkb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWMuaW5zdGFuY2UpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlYy5pbnN0YW5jZSl9KX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3QgaWQ9ImNvbnRlbnQiPjwvc2xvdD4KYCxpczoiaXJvbi1pbnB1dCIsYmVoYXZpb3JzOltUaF0scHJvcGVydGllczp7YmluZFZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVZhbHVlKGJpbmRWYWx1ZSkifSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaW5wdXRFbGVtZW50Ok9iamVjdH0sb2JzZXJ2ZXJzOlsiX2JpbmRWYWx1ZUNoYW5nZWQoYmluZFZhbHVlLCBfaW5wdXRFbGVtZW50KSJdLGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0IixrZXlwcmVzczoiX29uS2V5cHJlc3MifSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eSgpLHRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0iIix0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKGUpe3RoaXMuX2luaXRTbG90dGVkSW5wdXQoKX0uYmluZCh0aGlzKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJih6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbCl9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50fSxfaW5pdFNsb3R0ZWRJbnB1dDpmdW5jdGlvbigpe3RoaXMuX2lucHV0RWxlbWVudD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKClbMF0sdGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiYodGhpcy5iaW5kVmFsdWU9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpLHRoaXMuZmlyZSgiaXJvbi1pbnB1dC1yZWFkeSIpfSxnZXQgX3BhdHRlcm5SZWdFeHAoKXt2YXIgZTtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuKWU9bmV3IFJlZ0V4cCh0aGlzLmFsbG93ZWRQYXR0ZXJuKTtlbHNlIHN3aXRjaCh0aGlzLmlucHV0RWxlbWVudC50eXBlKXtjYXNlIm51bWJlciI6ZT0vWzAtOS4sZS1dLzticmVha31yZXR1cm4gZX0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU9PT12b2lkIDA/dC52YWx1ZT1udWxsOmUhPT10LnZhbHVlJiYodGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9ZSksdGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOmV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKCl7aWYodGhpcy5hbGxvd2VkUGF0dGVybiYmIXRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZCl7dmFyIGU9dGhpcy5fY2hlY2tQYXR0ZXJuVmFsaWRpdHkoKTtlfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCl9dGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sX2lzUHJpbnRhYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Q29kZT09OHx8ZS5rZXlDb2RlPT05fHxlLmtleUNvZGU9PTEzfHxlLmtleUNvZGU9PTI3LHI9ZS5rZXlDb2RlPT0xOXx8ZS5rZXlDb2RlPT0yMHx8ZS5rZXlDb2RlPT00NXx8ZS5rZXlDb2RlPT00Nnx8ZS5rZXlDb2RlPT0xNDR8fGUua2V5Q29kZT09MTQ1fHxlLmtleUNvZGU+MzImJmUua2V5Q29kZTw0MXx8ZS5rZXlDb2RlPjExMSYmZS5rZXlDb2RlPDEyNDtyZXR1cm4hdCYmIShlLmNoYXJDb2RlPT0wJiZyKX0sX29uS2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYoISghdGhpcy5hbGxvd2VkUGF0dGVybiYmdGhpcy5pbnB1dEVsZW1lbnQudHlwZSE9PSJudW1iZXIiKSl7dmFyIHQ9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighIXQmJiEoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5KSl7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSEwO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7dGhpcy5faXNQcmludGFibGUoZSkmJiF0LnRlc3QocikmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIGNoYXJhY3RlciAiK3IrIiBub3QgZW50ZXJlZC4iKSl9fX0sX2NoZWNrUGF0dGVyblZhbGlkaXR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighZSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDt0KyspaWYoIWUudGVzdCh0aGlzLmlucHV0RWxlbWVudC52YWx1ZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5wdXRFbGVtZW50KXJldHVybiB0aGlzLmludmFsaWQ9ITEsITA7dmFyIGU9dGhpcy5pbnB1dEVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO3JldHVybiBlJiYodGhpcy5yZXF1aXJlZCYmdGhpcy5iaW5kVmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLmJpbmRWYWx1ZSkpKSx0aGlzLmludmFsaWQ9IWUsdGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIiksZX0sX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcjpmdW5jdGlvbihlKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OmV9KX0sX2NvbXB1dGVWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19KTt2YXIgQzk9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7fX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNoYXItY291bnRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuPltbX2NoYXJDb3VudGVyU3RyXV08L3NwYW4+CmAsaXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltDOV0scHJvcGVydGllczp7X2NoYXJDb3VudGVyU3RyOnt0eXBlOlN0cmluZyx2YWx1ZToiMCJ9fSx1cGRhdGU6ZnVuY3Rpb24oZSl7aWYoISFlLmlucHV0RWxlbWVudCl7ZS52YWx1ZT1lLnZhbHVlfHwiIjt2YXIgdD1lLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7ZS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKHQrPSIvIitlLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKSx0aGlzLl9jaGFyQ291bnRlclN0cj10fX19KTt2YXIgQTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogdG8gbWFrZSBhIHN0YWNraW5nIGNvbnRleHQgKi8KICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWFsaWduLCBib3R0b20pOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7QTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoQTB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTpiZWZvcmUsCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpOmJlZm9yZSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWJlZm9yZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTphZnRlciwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1hZnRlcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzUlKSBzY2FsZSgwLjc1KTsKCiAgICAgICAgLyogU2luY2Ugd2Ugc2NhbGUgdG8gNzUvMTAwIG9mIHRoZSBzaXplLCB3ZSBhY3R1YWxseSBoYXZlIDEwMC83NSBvZiB0aGUKICAgICAgICBvcmlnaW5hbCBzcGFjZSBub3cgYXZhaWxhYmxlICovCiAgICAgICAgd2lkdGg6IDEzMyU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1mbG9hdGluZzsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWhpZGRlbiA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgLyogVGhlIGFwcGx5IHNoaW0gZG9lc24ndCBhcHBseSB0aGUgbmVzdGVkIGNvbG9yIGN1c3RvbSBwcm9wZXJ0eSwKICAgICAgICAgIHNvIHdlIGhhdmUgdG8gcmUtYXBwbHkgaXQgaGVyZS4gKi8KICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQodGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtaW52YWxpZDsKICAgICAgfQoKICAgICAgLnByZWZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1wcmVmaXg7CiAgICAgIH0KCiAgICAgIC5zdWZmaXggOjpzbG90dGVkKCopIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LW5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXN1ZmZpeDsKICAgICAgfQoKICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KSB7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQodGV4dGFyZWEpIHsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoKikgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50LmlzLWhpZ2hsaWdodGVkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBoaWRkZW49Iltbbm9MYWJlbEZsb2F0XV0iPiZuYnNwOzwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij48c2xvdCBuYW1lPSJwcmVmaXgiPjwvc2xvdD48L3NwYW4+CgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUlucHV0Q29udGVudENsYXNzKG5vTGFiZWxGbG9hdCxhbHdheXNGbG9hdExhYmVsLGZvY3VzZWQsaW52YWxpZCxfaW5wdXRIYXNDb250ZW50KV1dIiBpZD0ibGFiZWxBbmRJbnB1dENvbnRhaW5lciI+CiAgICAgICAgPHNsb3QgbmFtZT0ibGFiZWwiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJpbnB1dCI+PC9zbG90PgogICAgICA8L2Rpdj4KCiAgICAgIDxzcGFuIGNsYXNzPSJzdWZmaXgiPjxzbG90IG5hbWU9InN1ZmZpeCI+PC9zbG90Pjwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlVW5kZXJsaW5lQ2xhc3MoZm9jdXNlZCxpbnZhbGlkKV1dIj4KICAgICAgPGRpdiBjbGFzcz0idW5mb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8c2xvdCBuYW1lPSJhZGQtb24iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LF9ib3VuZE9uQmx1cjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKX19LF9ib3VuZE9uSW5wdXQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpfX0sX2JvdW5kVmFsdWVDaGFuZ2VkOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyl9fX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIiwiaXJvbi1pbnB1dC12YWxpZGF0ZSI6Il9vbklyb25JbnB1dFZhbGlkYXRlIn0sZ2V0IF92YWx1ZUNoYW5nZWRFdmVudCgpe3JldHVybiB0aGlzLmF0dHJGb3JWYWx1ZSsiLWNoYW5nZWQifSxnZXQgX3Byb3BlcnR5Rm9yVmFsdWUoKXtyZXR1cm4gd20odGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSxnZXQgX2lucHV0RWxlbWVudFZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFt0aGlzLl9wcm9wZXJ0eUZvclZhbHVlXXx8dGhpcy5faW5wdXRFbGVtZW50LnZhbHVlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITAsdGhpcy5fYWRkb25zfHwodGhpcy5fYWRkb25zPVtdKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZE9uRm9jdXMsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRPbkJsdXIsITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXR0ckZvclZhbHVlP3RoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3ZhbHVlQ2hhbmdlZEV2ZW50LHRoaXMuX2JvdW5kVmFsdWVDaGFuZ2VkKTp0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iix0aGlzLl9vbklucHV0KSx0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSYmdGhpcy5faW5wdXRFbGVtZW50VmFsdWUhPSIiP3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3ZhciB0PWUudGFyZ2V0O3RoaXMuX2FkZG9ucy5pbmRleE9mKHQpPT09LTEmJih0aGlzLl9hZGRvbnMucHVzaCh0KSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2hhbmRsZVZhbHVlKHRoaXMuX2lucHV0RWxlbWVudCkpfSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITApfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdC52YWx1ZT09PXZvaWQgMHx8dC52YWx1ZT09PSIiKXx8dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7dHx8dD09PTB8fGUudHlwZT09PSJudW1iZXIiJiYhZS5jaGVja1ZhbGlkaXR5KCk/dGhpcy5faW5wdXRIYXNDb250ZW50PSEwOnRoaXMuX2lucHV0SGFzQ29udGVudD0hMSx0aGlzLnVwZGF0ZUFkZG9ucyh7aW5wdXRFbGVtZW50OmUsdmFsdWU6dCxpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSxfaGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdXRvVmFsaWRhdGUmJmUpe3ZhciB0O2UudmFsaWRhdGU/dD1lLnZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudFZhbHVlKTp0PWUuY2hlY2tWYWxpZGl0eSgpLHRoaXMuaW52YWxpZD0hdH10aGlzLl9oYW5kbGVWYWx1ZShlKX0sX29uSXJvbklucHV0VmFsaWRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MDt0PXRoaXMuX2FkZG9uc1tyXTtyKyspdC51cGRhdGUoZSl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz0iaW5wdXQtY29udGVudCI7aWYoZSlpJiYobys9IiBsYWJlbC1pcy1oaWRkZW4iKSxuJiYobys9IiBpcy1pbnZhbGlkIik7ZWxzZXt2YXIgYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7dHx8aT8obys9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsbj9vKz0iIGlzLWludmFsaWQiOnImJihvKz0iIGxhYmVsLWlzLWhpZ2hsaWdodGVkIikpOihhJiYodGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksbiYmKG8rPSIgaXMtaW52YWxpZCIpKX1yZXR1cm4gciYmKG8rPSIgZm9jdXNlZCIpLG99LF9jb21wdXRlVW5kZXJsaW5lQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZXJsaW5lIjtyZXR1cm4gdD9yKz0iIGlzLWludmFsaWQiOmUmJihyKz0iIGlzLWhpZ2hsaWdodGVkIikscn0sX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSJhZGQtb24tY29udGVudCI7cmV0dXJuIHQ/cis9IiBpcy1pbnZhbGlkIjplJiYocis9IiBpcy1oaWdobGlnaHRlZCIpLHJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtZXJyb3I7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6MDsKICAgICAgICByaWdodDowOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPCEtLQogICAgSWYgdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbgogICAgXGBhcmlhLWRlc2NyaWJlZGJ5XGAgYXR0cmlidXRlLCBzdWNoIGFzIHdoZW4gdXNlZCBhcyBhIHBhcGVyLWlucHV0IGFkZC1vbiwKICAgIHRoZW4gYXBwbHlpbmcgXGB2aXNpYmlsaXR5OiBoaWRkZW47XGAgdG8gdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXRzZWxmCiAgICBkb2VzIG5vdCBoaWRlIHRoZSBlcnJvci4KCiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgogICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2FjY25hbWUtMS4xLyNtYXBwaW5nX2FkZGl0aW9uYWxfbmRfZGVzY3JpcHRpb24KICAgIC0tPgogICAgPGRpdiBpZD0iYTExeVdyYXBwZXIiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbQzldLHByb3BlcnRpZXM6e2ludmFsaWQ6e3JlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW59fSx1cGRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0SW52YWxpZChlLmludmFsaWQpfX0pO3ZhciBaeD17fTtaeC5OZXh0TGFiZWxJRD0xO1p4Lk5leHRBZGRvbklEPTE7WnguTmV4dElucHV0SUQ9MTt2YXIgcWJlPXtwcm9wZXJ0aWVzOntsYWJlbDp7dHlwZTpTdHJpbmd9LHZhbHVlOntub3RpZnk6ITAsdHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGludmFsaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sdHlwZTp7dHlwZTpTdHJpbmd9LGxpc3Q6e3R5cGU6U3RyaW5nfSxwYXR0ZXJuOnt0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sY2hhckNvdW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfYXV0b2ZvY3VzQ2hhbmdlZCJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LG1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1pbjp7dHlwZTpTdHJpbmd9LG1heDp7dHlwZTpTdHJpbmd9LHN0ZXA6e3R5cGU6U3RyaW5nfSxuYW1lOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxyZWFkb25seTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzaXplOnt0eXBlOk51bWJlcn0sYXV0b2NhcGl0YWxpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiJub25lIn0sYXV0b2NvcnJlY3Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmYifSxhdXRvc2F2ZTp7dHlwZTpTdHJpbmd9LHJlc3VsdHM6e3R5cGU6TnVtYmVyfSxhY2NlcHQ6e3R5cGU6U3RyaW5nfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFufSxfYXJpYURlc2NyaWJlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuJHx8KHRoaXMuJD17fSksdGhpcy4kLmlucHV0fHwodGhpcy5fZ2VuZXJhdGVJbnB1dElkKCksdGhpcy4kLmlucHV0PXRoaXMuJCQoIiMiK3RoaXMuX2lucHV0SWQpKSx0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIiwiZmlsZSJdfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCksIW10JiZ0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLmlucHV0RWxlbWVudC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKX0sX2FwcGVuZFN0cmluZ1dpdGhTcGFjZTpmdW5jdGlvbihlLHQpe3JldHVybiBlP2U9ZSsiICIrdDplPXQsZX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt2YXIgdD16dChlKS5yb290VGFyZ2V0O2lmKHQuaWQpdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnksdC5pZCk7ZWxzZXt2YXIgcj0icGFwZXItaW5wdXQtYWRkLW9uLSIrWnguTmV4dEFkZG9uSUQrKzt0LmlkPXIsdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnkscil9fSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC52YWxpZGF0ZSgpfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXtEaS5fZm9jdXNCbHVySGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5mb2N1c2VkJiYhdGhpcy5fc2hpZnRUYWJQcmVzc2VkJiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50JiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITAsdGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0KSx0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD10aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydDt0aGlzLnZhbHVlPWUsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ9dCx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQ9dH1jYXRjaChyKXt0aGlzLnZhbHVlPWV9fSxfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZX0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2lmKCFlKXt0aGlzLl9hcmlhTGFiZWxsZWRCeT0iIjtyZXR1cm59dmFyIHQ7ZS5pZD90PWUuaWQ6KHQ9InBhcGVyLWlucHV0LWxhYmVsLSIrWnguTmV4dExhYmVsSUQrKyxlLmlkPXQpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXR9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXsoIXRoaXMuX2lucHV0SWR8fHRoaXMuX2lucHV0SWQ9PT0iIikmJih0aGlzLl9pbnB1dElkPSJpbnB1dC0iK1p4Lk5leHRJbnB1dElEKyspfSxfb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5zaGFkb3dSb290JiZ0aGlzLmZpcmUoZS50eXBlLHtzb3VyY2VFdmVudDplfSx7bm9kZTp0aGlzLGJ1YmJsZXM6ZS5idWJibGVzLGNhbmNlbGFibGU6ZS5jYW5jZWxhYmxlfSl9LF9hdXRvZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvZm9jdXMmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdD1lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQscj10JiZlIT09ZG9jdW1lbnQuYm9keSYmZSE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyfHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX0sQTk9W0RpLE9vLHFiZV07WXQoe2lzOiJwYXBlci1pbnB1dCIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2ZvY3VzZWRdKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGUgPGlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcyBpdC4KICAgICAgSW4gMi54IHRoZSA8aXJvbi1pbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMKICAgICAgaXQsIGJ1dCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgd2UgbmVlZCB0byByZXNldCBzb21lCiAgICAgIG9mIHRoZSBuYXRpdmUgaW5wdXQncyBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgKGZyb20gdGhlIGlyb24taW5wdXQpICovCiAgICAgIGlyb24taW5wdXQgPiBpbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgd29yZC1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LXNwaW5uZXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtY2xlYXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1yZXZlYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1yZXZlYWw7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgaWQ9ImNvbnRhaW5lciIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8c2xvdCBuYW1lPSJwcmVmaXgiIHNsb3Q9InByZWZpeCI+PC9zbG90PgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPCEtLSBOZWVkIHRvIGJpbmQgbWF4bGVuZ3RoIHNvIHRoYXQgdGhlIHBhcGVyLWlucHV0LWNoYXItY291bnRlciB3b3JrcyBjb3JyZWN0bHkgLS0+CiAgICAgIDxpcm9uLWlucHV0IGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgc2xvdD0iaW5wdXQiIGNsYXNzPSJpbnB1dC1lbGVtZW50IiBpZCQ9IltbX2lucHV0SWRdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3I9IltbdmFsaWRhdG9yXV0iPgogICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIiByb2xlJD0iW1tpbnB1dFJvbGVdXSIgYXJpYS1oYXNwb3B1cCQ9IltbaW5wdXRBcmlhSGFzcG9wdXBdXSI+CiAgICAgIDwvaXJvbi1pbnB1dD4KCiAgICAgIDxzbG90IG5hbWU9InN1ZmZpeCIgc2xvdD0ic3VmZml4Ij48L3Nsb3Q+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CiAgYCxiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpTdHJpbmd9LGlucHV0Um9sZTp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfSxpbnB1dEFyaWFIYXNwb3B1cDp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50Ll9pbnB1dEVsZW1lbnR9LGxpc3RlbmVyczp7Imlyb24taW5wdXQtcmVhZHkiOiJfb25Jcm9uSW5wdXRSZWFkeSJ9LF9vbklyb25JbnB1dFJlYWR5OmZ1bmN0aW9uKCl7dGhpcy4kLm5hdGl2ZUlucHV0fHwodGhpcy4kLm5hdGl2ZUlucHV0PXRoaXMuJCQoImlucHV0IikpLHRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKSx0aGlzLmlucHV0RWxlbWVudC5iaW5kVmFsdWUmJnRoaXMuJC5jb250YWluZXIuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuaW5wdXRFbGVtZW50KX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIuYW5pbWF0aW5nIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50V3JhcHBlciI+CiAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1kcm9wZG93biIsYmVoYXZpb3JzOltEaSxPbyxLeCxiOV0scHJvcGVydGllczp7aG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToibGVmdCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxjbG9zZUFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGZvY3VzVGFyZ2V0Ont0eXBlOk9iamVjdH0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbihwb3NpdGlvblRhcmdldCwgdmVydGljYWxBbGlnbiwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbE9mZnNldCwgaG9yaXpvbnRhbE9mZnNldCkiXSxnZXQgY29udGFpbmVkRWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249dGhpcy5hbGxvd091dHNpZGVTY3JvbGw/InJlZml0IjoibG9jayIpLHRoaXMuX3JlYWRpZWQ9ITB9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7KCF0aGlzLnNpemluZ1RhcmdldHx8dGhpcy5zaXppbmdUYXJnZXQ9PT10aGlzKSYmKHRoaXMuc2l6aW5nVGFyZ2V0PXRoaXMuY29udGFpbmVkRWxlbWVudHx8dGhpcyl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5kaXNhYmxlZD90aGlzLmNhbmNlbCgpOih0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMuX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZygpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLm9wZW4/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oIm9wZW4iKSk6UG0uX3JlbmRlck9wZW5lZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLmNsb3NlPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJjbG9zZSIpKTpQbS5fcmVuZGVyQ2xvc2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX29uTmVvbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRpbmciKSx0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lZEVsZW1lbnQsdD1bXS5jb25jYXQodGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnfHxbXSkuY29uY2F0KHRoaXMuY2xvc2VBbmltYXRpb25Db25maWd8fFtdKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5ub2RlPWU7dGhpcy5hbmltYXRpb25Db25maWc9e29wZW46dGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnLGNsb3NlOnRoaXMuY2xvc2VBbmltYXRpb25Db25maWd9fSxfdXBkYXRlT3ZlcmxheVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfSxfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZDpmdW5jdGlvbihlKXshdGhpcy5fcmVhZGllZHx8KGU/KCF0aGlzLnNjcm9sbEFjdGlvbnx8dGhpcy5zY3JvbGxBY3Rpb249PT0ibG9jayIpJiYodGhpcy5zY3JvbGxBY3Rpb249InJlZml0Iik6dGhpcy5zY3JvbGxBY3Rpb249ImxvY2siKX0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvY3VzVGFyZ2V0fHx0aGlzLmNvbnRhaW5lZEVsZW1lbnQ7ZSYmdGhpcy5vcGVuZWQmJiF0aGlzLm5vQXV0b0ZvY3VzP2UuZm9jdXMoKTpQbS5fYXBwbHlGb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIHlwPXtwcm9wZXJ0aWVzOnthbmltYXRpb25UaW1pbmc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOjUwMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGZpbGw6ImJvdGgifX19fSxpc05lb25BbmltYXRpb246ITAsY3JlYXRlZDpmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYW5pbWF0ZXx8Y29uc29sZS53YXJuKCJObyB3ZWIgYW5pbWF0aW9ucyBkZXRlY3RlZC4gVGhpcyBlbGVtZW50IHdpbGwgbm90IGZ1bmN0aW9uIHdpdGhvdXQgYSB3ZWIgYW5pbWF0aW9ucyBwb2x5ZmlsbC4iKX0sdGltaW5nRnJvbUNvbmZpZzpmdW5jdGlvbihlKXtpZihlLnRpbWluZylmb3IodmFyIHQgaW4gZS50aW1pbmcpdGhpcy5hbmltYXRpb25UaW1pbmdbdF09ZS50aW1pbmdbdF07cmV0dXJuIHRoaXMuYW5pbWF0aW9uVGltaW5nfSxzZXRQcmVmaXhlZFByb3BlcnR5OmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49e3RyYW5zZm9ybTpbIndlYmtpdFRyYW5zZm9ybSJdLHRyYW5zZm9ybU9yaWdpbjpbIm1velRyYW5zZm9ybU9yaWdpbiIsIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdfSxpPW5bdF0sbyxhPTA7bz1pW2FdO2ErKyllLnN0eWxlW29dPXI7ZS5zdHlsZVt0XT1yfSxjb21wbGV0ZTpmdW5jdGlvbihlKXt9fTtZdCh7aXM6ImZhZGUtaW4tYW5pbWF0aW9uIixiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJmYWRlLW91dC1hbmltYXRpb24iLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGU7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtZ3Jvdy1oZWlnaHQtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bi8yKyJweCJ9LHtoZWlnaHQ6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe3dpZHRoOm4vMisicHgifSx7d2lkdGg6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7d2lkdGg6bisicHgifSx7d2lkdGg6bi1uLzIwKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5oZWlnaHQ7cmV0dXJuIHRoaXMuc2V0UHJlZml4ZWRQcm9wZXJ0eSh0LCJ0cmFuc2Zvcm1PcmlnaW4iLCIwIDAiKSx0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9LHtoZWlnaHQ6bi8yKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMHB4KSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTt2YXIgZEU9e0FOSU1BVElPTl9DVUJJQ19CRVpJRVI6ImN1YmljLWJlemllciguMywuOTUsLjUsMSkiLE1BWF9BTklNQVRJT05fVElNRV9NUzo0MDB9LEdiZT1ZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICBpcm9uLWRyb3Bkb3duIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1kcm9wZG93bjsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWwtYWxpZ249InRvcCJdKSAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB0b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQoKICAgICAgI3RyaWdnZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0cmlnZ2VyIiBvbi10YXA9InRvZ2dsZSI+CiAgICAgIDxzbG90IG5hbWU9ImRyb3Bkb3duLXRyaWdnZXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxpcm9uLWRyb3Bkb3duIGlkPSJkcm9wZG93biIgb3BlbmVkPSJ7e29wZW5lZH19IiBob3Jpem9udGFsLWFsaWduPSJbW2hvcml6b250YWxBbGlnbl1dIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIGhvcml6b250YWwtb2Zmc2V0PSJbW2hvcml6b250YWxPZmZzZXRdXSIgdmVydGljYWwtb2Zmc2V0PSJbW3ZlcnRpY2FsT2Zmc2V0XV0iIG5vLW92ZXJsYXA9Iltbbm9PdmVybGFwXV0iIG9wZW4tYW5pbWF0aW9uLWNvbmZpZz0iW1tvcGVuQW5pbWF0aW9uQ29uZmlnXV0iIGNsb3NlLWFuaW1hdGlvbi1jb25maWc9IltbY2xvc2VBbmltYXRpb25Db25maWddXSIgbm8tYW5pbWF0aW9ucz0iW1tub0FuaW1hdGlvbnNdXSIgZm9jdXMtdGFyZ2V0PSJbW19kcm9wZG93bkNvbnRlbnRdXSIgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBvbi1pcm9uLW92ZXJsYXktY2FuY2VsZWQ9Il9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KYCxpczoicGFwZXItbWVudS1idXR0b24iLGJlaGF2aW9yczpbT28sRGldLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOmRFLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6ZEUuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19XX19LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjE1MH19LHtuYW1lOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjUwLGVhc2luZzpkRS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MjAwLGVhc2luZzoiZWFzZS1pbiJ9fV19fSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuY2xvc2VPbkFjdGl2YXRlJiZ0aGlzLmNsb3NlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7ZT8odGhpcy5fZHJvcGRvd25Db250ZW50PXRoaXMuY29udGVudEVsZW1lbnQsdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1vcGVuIikpOnQhPW51bGwmJnRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tY2xvc2UiKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihlKXtEaS5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlJiZ0aGlzLm9wZW5lZCYmdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbCxyPXRoaXMuJC50cmlnZ2VyLG49enQodCkucGF0aDtuLmluZGV4T2Yocik+LTEmJmUucHJldmVudERlZmF1bHQoKX19KTtPYmplY3Qua2V5cyhkRSkuZm9yRWFjaChmdW5jdGlvbihlKXtHYmVbZV09ZEVbZV19KTt2YXIgdlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt2Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt2Vy5pbm5lckhUTUw9YDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLWRyb3Bkb3duLW1lbnUiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFycm93LWRyb3AtZG93biI+PHBhdGggZD0iTTcgMTBsNSA1IDUtNXoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2Vy5jb250ZW50KTt2YXIgeFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt4Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt4Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLgogICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudTsKICAgICAgfQoKICAgICAgLyogcGFwZXItZHJvcGRvd24tbWVudSBhbmQgcGFwZXItZHJvcGRvd24tbWVudS1saWdodCBib3RoIGRlbGVnYXRlIGZvY3VzCiAgICAgICAqIHRvIG90aGVyIGludGVybmFsIGVsZW1lbnRzIHdoaWNoIG1hbmFnZSBmb2N1cyBzdHlsaW5nLiAqLwogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKCiAgICAgICAgQGFwcGx5KC0tcGFwZXItZHJvcGRvd24tbWVudSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHhXLmNvbnRlbnQpO3ZhciBXYmU9R3QoSFRNTEVsZW1lbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSIgZXhwYW5kLXNpemluZy10YXJnZXQtZm9yLXNjcm9sbGJhcnM9IltbZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyc11dIj4KICAgICAgPCEtLSBzdXBwb3J0IGh5YnJpZCBtb2RlOiB1c2VyIG1pZ2h0IGJlIHVzaW5nIHBhcGVyLW1lbnUtYnV0dG9uIDEueCB3aGljaCBkaXN0cmlidXRlcyB2aWEgPGNvbnRlbnQ+IC0tPgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIDwhLS0gcGFwZXItaW5wdXQgaGFzIHR5cGU9InRleHQiIGZvciBhMTF5LCBkbyBub3QgcmVtb3ZlIC0tPgogICAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9InRleHQiIGludmFsaWQ9IltbaW52YWxpZF1dIiByZWFkb25seSBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1t2YWx1ZV1dIiBwbGFjZWhvbGRlcj0iW1twbGFjZWhvbGRlcl1dIiBlcnJvci1tZXNzYWdlPSJbW2Vycm9yTWVzc2FnZV1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbYWx3YXlzRmxvYXRMYWJlbF1dIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgbGFiZWw9IltbbGFiZWxdXSIgaW5wdXQtcm9sZT0iYnV0dG9uIiBpbnB1dC1hcmlhLWhhc3BvcHVwPSJsaXN0Ym94IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItaW5wdXQgMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CmAsaXM6InBhcGVyLWRyb3Bkb3duLW1lbnUiLGJlaGF2aW9yczpbU2gsRGksRWgsVGhdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InJpZ2h0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCJ9LHZlcnRpY2FsT2Zmc2V0Ok51bWJlcixkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3RhcDoiX29uVGFwIn0sa2V5QmluZGluZ3M6eyJ1cCBkb3duIjoib3BlbiIsZXNjOiJjbG9zZSJ9LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSkiXSxfYXR0YWNoRG9tKGUpe2xldCB0PXVlKHRoaXMpO3JldHVybiB0LmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiIsZGVsZWdhdGVzRm9jdXM6ITAsc2hhZHlVcGdyYWRlRnJhZ21lbnQ6ZX0pLHQuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlKSxXYmUucHJvdG90eXBlLl9hdHRhY2hEb20uY2FsbCh0aGlzLGUpfSxmb2N1cygpe3RoaXMuJC5pbnB1dC5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGVudEVsZW1lbnQ7ZSYmZS5zZWxlY3RlZEl0ZW0mJnRoaXMuX3NldFNlbGVjdGVkSXRlbShlLnNlbGVjdGVkSXRlbSl9LGdldCBjb250ZW50RWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5tZW51QnV0dG9uLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUuZGV0YWlsLml0ZW0pfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpfSxfb25UYXA6ZnVuY3Rpb24oZSl7bGd0KGUpPT09dGhpcyYmdGhpcy5vcGVuKCl9LF9zZWxlY3RlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PSIiO2U/dD1lLmxhYmVsfHxlLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8ZS50ZXh0Q29udGVudC50cmltKCk6dD0iIix0aGlzLnZhbHVlPXQsdGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwodCl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fChlPy00OjgpfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLnJlcXVpcmVkJiYhIXRoaXMudmFsdWV9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVuZWQ/InRydWUiOiJmYWxzZSIsdD10aGlzLmNvbnRlbnRFbGVtZW50O3QmJnQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKX19KTt2YXIgYlc9MSxQMHQ9MixQOT17b3V0ZXJTY3JvbGw6e3Njcm9sbDohMH0sc2hhZG93TW9kZTp7c3RhbmRhcmQ6UDB0LHdhdGVyZmFsbDpiVywid2F0ZXJmYWxsLXRhbGwiOmJXfSx0YWxsTW9kZTp7IndhdGVyZmFsbC10YWxsIjohMH19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbDsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgICNtYWluUGFuZWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtYm9keTsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNjcm9sbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2Nyb2xsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zY3JvbGwtY29udGFpbmVyOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBjb3ZlcgogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9Y292ZXJdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvdmVyLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluUGFuZWwgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHN0YW5kYXJkCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zdGFuZGFyZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc3RhbmRhcmQtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzZWFtZWQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXNlYW1lZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2VhbWVkLWNvbnRhaW5lcjsKICAgICAgfQoKCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC13YXRlcmZhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiB3YXRlcmZhbGwtdGFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsLXRhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC10YWxsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2Ryb3BTaGFkb3cgewogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41czsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2hhZG93OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdy5oYXMtc2hhZG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciA+IDo6c2xvdHRlZCguZml0KSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQoKICAgIDwvc3R5bGU+CgogICAgPHNsb3QgaWQ9ImhlYWRlclNsb3QiIG5hbWU9ImhlYWRlciI+PC9zbG90PgoKICAgIDxkaXYgaWQ9Im1haW5QYW5lbCI+CiAgICAgIDxkaXYgaWQ9Im1haW5Db250YWluZXIiIGNsYXNzXCQ9IltbX2NvbXB1dGVNYWluQ29udGFpbmVyQ2xhc3MobW9kZSldXSI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iZHJvcFNoYWRvdyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaGVhZGVyLXBhbmVsIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhbmRhcmQiLG9ic2VydmVyOiJfbW9kZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sc2hhZG93Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHRhbGxDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6InRhbGwifSxhdFRvcDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW4oYXRUb3AsIG1vZGUsIHNoYWRvdykiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FkZExpc3RlbmVyKCksdGhpcy5fa2VlcFNjcm9sbGluZ1N0YXRlKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksY29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxnZXQgaGVhZGVyKCl7cmV0dXJuIHp0KHRoaXMuJC5oZWFkZXJTbG90KS5nZXREaXN0cmlidXRlZE5vZGVzKClbMF19LGdldCBzY3JvbGxlcigpe3JldHVybiB0aGlzLl9nZXRTY3JvbGxlckZvck1vZGUodGhpcy5tb2RlKX0sZ2V0IHZpc2libGVTaGFkb3coKXtyZXR1cm4gdGhpcy4kLmRyb3BTaGFkb3cuY2xhc3NMaXN0LmNvbnRhaW5zKCJoYXMtc2hhZG93Iil9LF9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbjpmdW5jdGlvbihlLHQscil7dmFyIG49UDkuc2hhZG93TW9kZVt0XTt0aGlzLnNoYWRvdz90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PVAwdD90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PWJXJiYhZT90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsITEsdGhpcy4kLmRyb3BTaGFkb3cpfSxfY29tcHV0ZU1haW5Db250YWluZXJDbGFzczpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gdC5mbGV4PWUhPT0iY292ZXIiLE9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gdFtyXX0pLmpvaW4oIiAiKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLnNjcm9sbEhhbmRsZXIpfSxfbW9kZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1QOSxuPXRoaXMuaGVhZGVyLGk9MjAwO24mJihyLnRhbGxNb2RlW3RdJiYhci50YWxsTW9kZVtlXT8obi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMudGFsbENsYXNzKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9LGkpKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixyLnRhbGxNb2RlW2VdLG4pKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nyb2xsZXIsdD10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcChlLnNjcm9sbFRvcD09PTApLHQmJnRoaXMudGFsbENsYXNzJiZQOS50YWxsTW9kZVt0aGlzLm1vZGVdJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMudGFsbENsYXNzLHRoaXMuYXRUb3B8fHQuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMudGFsbENsYXNzKSYmZS5zY3JvbGxIZWlnaHQ8dGhpcy5vZmZzZXRIZWlnaHQsdCl9LF9zY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKSx0aGlzLmZpcmUoImNvbnRlbnQtc2Nyb2xsIix7dGFyZ2V0OnRoaXMuc2Nyb2xsZXJ9LHtidWJibGVzOiExfSl9LF9nZXRTY3JvbGxlckZvck1vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIFA5Lm91dGVyU2Nyb2xsW2VdP3RoaXM6dGhpcy4kLm1haW5Db250YWluZXJ9fSk7WXQoe2lzOiJwYXBlci1pY29uLWJ1dHRvbiIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CgogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKCiAgICAgICAgLyoKICAgICAgICAgIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvCiAgICAgICAgICBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLyogQmVjYXVzZSBvZiBwb2x5bWVyLzI1NTgsIHRoaXMgc3R5bGUgaGFzIGxvd2VyIHNwZWNpZmljaXR5IHRoYW4gKiAqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0ICNpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZC10ZXh0LCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBhdXRvOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWhvdmVyOwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxMDAlOwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8aXJvbi1pY29uIGlkPSJpY29uIiBzcmM9Iltbc3JjXV0iIGljb249IltbaWNvbl1dIgogICAgICAgICAgICAgICBhbHQkPSJbW2FsdF1dIj48L2lyb24taWNvbj4KICBgLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIn0sYmVoYXZpb3JzOltqeF0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3RlbXBsYXRlLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpfSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpOyghcnx8dD09cikmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIHRoZSBtaXJyb3Igc2l6ZXMgdGhlIGlucHV0L3RleHRhcmVhIHNvIGl0IGdyb3dzIHdpdGggdHlwaW5nIC0tPgogICAgPCEtLSB1c2UgJiMxNjA7IGluc3RlYWQgJm5ic3A7IG9mIHRvIGFsbG93IHRoaXMgZWxlbWVudCB0byBiZSB1c2VkIGluIFhIVE1MIC0tPgogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICA8IS0tIHNpemUgdGhlIGlucHV0L3RleHRhcmVhIHdpdGggYSBkaXYsIGJlY2F1c2UgdGhlIHRleHRhcmVhIGhhcyBpbnRyaW5zaWMgc2l6ZSBpbiBmZiAtLT4KICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgcm93cyQ9Iltbcm93c11dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIj48L3RleHRhcmVhPgogICAgPC9kaXY+CmAsaXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbVGgsRGldLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbGFiZWw6e3R5cGU6U3RyaW5nfX0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQifSxnZXQgdGV4dGFyZWEoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhfSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25TdGFydChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQ9ZX0sc2V0IHNlbGVjdGlvbkVuZChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPWV9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGU9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKS8pJiYhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMVszNDU2Nzg5XS8pO2UmJih0aGlzLiQudGV4dGFyZWEuc3R5bGUubWFyZ2luTGVmdD0iLTNweCIpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC50ZXh0YXJlYS52YWxpZGl0eS52YWxpZDtyZXR1cm4gZSYmKHRoaXMucmVxdWlyZWQmJnRoaXMudmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLnZhbHVlKSkpLHRoaXMuaW52YWxpZD0hZSx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSxlfSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLnZhbHVlPWV9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50ZXh0YXJlYTshdHx8KHQudmFsdWUhPT1lJiYodC52YWx1ZT1lfHxlPT09MD9lOiIiKSx0aGlzLmJpbmRWYWx1ZT1lLHRoaXMuJC5taXJyb3IuaW5uZXJIVE1MPXRoaXMuX3ZhbHVlRm9yTWlycm9yKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0aGlzLmJpbmRWYWx1ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9enQoZSkucGF0aDt0aGlzLnZhbHVlPXQ/dFswXS52YWx1ZTplLnRhcmdldC52YWx1ZX0sX2NvbnN0cmFpbjpmdW5jdGlvbihlKXt2YXIgdDtmb3IoZT1lfHxbIiJdLHRoaXMubWF4Um93cz4wJiZlLmxlbmd0aD50aGlzLm1heFJvd3M/dD1lLnNsaWNlKDAsdGhpcy5tYXhSb3dzKTp0PWUuc2xpY2UoMCk7dGhpcy5yb3dzPjAmJnQubGVuZ3RoPHRoaXMucm93czspdC5wdXNoKCIiKTtyZXR1cm4gdC5qb2luKCI8YnIvPiIpKyImIzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRleHRhcmVhO2lmKCEhZSlyZXR1cm4gdGhpcy50b2tlbnM9ZSYmZS52YWx1ZT9lLnZhbHVlLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvIi9nbSwiJnF1b3Q7IikucmVwbGFjZSgvJy9nbSwiJiMzOTsiKS5yZXBsYWNlKC88L2dtLCImbHQ7IikucmVwbGFjZSgvPi9nbSwiJmd0OyIpLnNwbGl0KGAKYCk6WyIiXSx0aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfSxfdXBkYXRlQ2FjaGVkOmZ1bmN0aW9uKCl7dGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIG5vLWxhYmVsLWZsb2F0JD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzPSJwYXBlci1pbnB1dC1pbnB1dCIgc2xvdD0iaW5wdXQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvciQ9IltbdmFsaWRhdG9yXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiByb3dzJD0iW1tyb3dzXV0iIG1heC1yb3dzJD0iW1ttYXhSb3dzXV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIj48L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CmAsaXM6InBhcGVyLXRleHRhcmVhIixiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGUpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1lfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25FbmQoZSl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZD1lfSxfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpfSxfYXJpYURlc2NyaWJlZEJ5Q2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZSl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC50ZXh0YXJlYX19KTt2YXIgd1c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt3Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgfQoKICAgICAgLnBhcGVyLWl0ZW0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBib3JkZXI6bm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgLnBhcGVyLWl0ZW1baGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1zZWxlY3RlZCksIC5wYXBlci1pdGVtLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pLCAucGFwZXItaXRlbVtkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyksIC5wYXBlci1pdGVtOmZvY3VzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwoKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tZGFyay1kaXZpZGVyLW9wYWNpdHkpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQtYmVmb3JlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQod1cuY29udGVudCk7dmFyIFliZT17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im9wdGlvbiIsdGFiaW5kZXg6IjAifX0sSTk9W1NoLERpLFliZV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbSIsYmVoYXZpb3JzOltJOV19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBuZWVkZWQgZm9yIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzIHRvIHdvcmsgb24gZmYgKi8KICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0d28tbGluZV0pIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLWJvZHktdHdvLWxpbmUtbWluLWhlaWdodCwgNzJweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aHJlZS1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10aHJlZS1saW5lLW1pbi1oZWlnaHQsIDg4cHgpOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZChbc2Vjb25kYXJ5XSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CgogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbS1ib2R5In0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWl0ZW07CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWljb24gewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIHdpZHRoOiB2YXIoLS1wYXBlci1pdGVtLWljb24td2lkdGgsIDU2cHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0taWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50SWNvbiIgY2xhc3M9ImNvbnRlbnQtaWNvbiI+CiAgICAgIDxzbG90IG5hbWU9Iml0ZW0taWNvbiI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWljb24taXRlbSIsYmVoYXZpb3JzOltJOV19KTt2YXIgU1c9e3Byb3BlcnRpZXM6e211bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Im11bHRpQ2hhbmdlZCJ9LHNlbGVjdGVkVmFsdWVzOnt0eXBlOkFycmF5LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2VsZWN0ZWRJdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlcykiXSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5tdWx0aT90aGlzLl90b2dnbGVTZWxlY3RlZChlKTp0aGlzLnNlbGVjdGVkPWV9LG11bHRpQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9zZWxlY3Rpb24ubXVsdGk9ZSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkIT1udWxsfHx0aGlzLnNlbGVjdGVkVmFsdWVzIT1udWxsJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YoZSkpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9LHRoaXMpKTp3aC5fdXBkYXRlQXR0ckZvclNlbGVjdGVkLmFwcGx5KHRoaXMpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm11bHRpP3RoaXMuX3NlbGVjdE11bHRpKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpOnRoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0TXVsdGk6ZnVuY3Rpb24oZSl7ZT1lfHxbXTt2YXIgdD0odGhpcy5fdmFsdWVzVG9JdGVtcyhlKXx8W10pLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaSE9bnVsbH0pO3RoaXMuX3NlbGVjdGlvbi5jbGVhcih0KTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLl9zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRbcl0sITApO2lmKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJiF0aGlzLl9zZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKXt2YXIgbj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKTtuJiZ0aGlzLnNlbGVjdCh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zZWxlY3Rpb24uZ2V0KCk7dGhpcy5tdWx0aT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhlKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oZS5sZW5ndGg/ZVswXTpudWxsKSk6ZSE9bnVsbD8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbZV0pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShlKSk6KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW10pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKSl9LF90b2dnbGVTZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoZSkscj10PDA7cj90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIixlKTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLHQsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKHQpfSx0aGlzKX19LEkwdD1bd2gsU1ddO3ZhciBfXz17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6WyJBbHQiLCJBbHRHcmFwaCIsIkNhcHNMb2NrIiwiQ29udHJvbCIsIkZuIiwiRm5Mb2NrIiwiSHlwZXIiLCJNZXRhIiwiTnVtTG9jayIsIk9TIiwiU2Nyb2xsTG9jayIsIlNoaWZ0IiwiU3VwZXIiLCJTeW1ib2wiLCJTeW1ib2xMb2NrIl0sX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TOjFlMyxfcHJldmlvdXNUYWJJbmRleDowLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51In0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU11bHRpc2VsZWN0YWJsZShtdWx0aSkiXSxsaXN0ZW5lcnM6e2ZvY3VzOiJfb25Gb2N1cyIsa2V5ZG93bjoiX29uS2V5ZG93biIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIHQ9dGhpcy5fdmFsdWVUb0l0ZW0oZSk7dCYmdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbSh0KSxTVy5zZWxlY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3Jlc2V0VGFiaW5kaWNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdD09PWU/IjAiOiItMSIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIix0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZCh0KSl9LHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKGUpe2U/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbihlKXtpZih0aGlzLl9NT0RJRklFUl9LRVlTLmluZGV4T2YoZS5rZXkpPT09LTEpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7dmFyIHQ9dGhpcy5fc2VhcmNoVGV4dHx8IiIscj1lLmtleSYmZS5rZXkubGVuZ3RoPT0xP2Uua2V5OlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTt0Kz1yLnRvTG9jYWxlTG93ZXJDYXNlKCk7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MCxvO289dGhpcy5pdGVtc1tpXTtpKyspaWYoIW8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgYT10aGlzLmF0dHJGb3JJdGVtVGl0bGV8fCJ0ZXh0Q29udGVudCIscz0ob1thXXx8by5nZXRBdHRyaWJ1dGUoYSl8fCIiKS50cmltKCk7aWYoIShzLmxlbmd0aDxuKSYmcy5zbGljZSgwLG4pLnRvTG9jYWxlTG93ZXJDYXNlKCk9PXQpe3RoaXMuX3NldEZvY3VzZWRJdGVtKG8pO2JyZWFrfX10aGlzLl9zZWFyY2hUZXh0PXQsdGhpcy5kZWJvdW5jZSgiX2NsZWFyU2VhcmNoVGV4dCIsdGhpcy5fY2xlYXJTZWFyY2hUZXh0LHRoaXMuX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TKX19LF9jbGVhclNlYXJjaFRleHQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWFyY2hUZXh0PSIifSxfZm9jdXNQcmV2aW91czpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLHI9MTtyPGUrMTtyKyspe3ZhciBuPXRoaXMuaXRlbXNbKHQtcitlKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfZm9jdXNOZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSkscj0xO3I8ZSsxO3IrKyl7dmFyIG49dGhpcy5pdGVtc1sodCtyKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt0P2Uuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpOmUuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx3aC5fYXBwbHlTZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfZm9jdXNlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dCYmdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxlJiYhZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJiF0aGlzLmRpc2FibGVkJiYoZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGUuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7X18uX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHQpLF9fLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfb25Gb2N1czpmdW5jdGlvbihlKXtpZighX18uX3NoaWZ0VGFiUHJlc3NlZCl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDt0IT09dGhpcyYmdHlwZW9mIHQudGFiSW5kZXghPSJ1bmRlZmluZWQiJiYhdGhpcy5pc0xpZ2h0RGVzY2VuZGFudCh0KXx8KHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXt2YXIgcj10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHI/dGhpcy5fc2V0Rm9jdXNlZEl0ZW0ocik6dGhpcy5pdGVtc1swXSYmdGhpcy5fZm9jdXNOZXh0KCl9KSl9fSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzTmV4dCgpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZm9jdXNlZEl0ZW07dCYmdC5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoZSwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKSxlLnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGUpe3doLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLGUpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OjAsdGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpOnRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpfX07X18uX3NoaWZ0VGFiUHJlc3NlZD0hMTt2YXIgTDk9W0kwdCxPbyxfX107WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbGlzdGJveCIsYmVoYXZpb3JzOltMOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imxpc3Rib3gifX0pO3ZhciBMMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7TDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTDB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LXRyYW5zaXRpb247CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTt2YXIgazk9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUoZSktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcChlKSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24oZSl7aWYoZT1wYXJzZUZsb2F0KGUpLCF0aGlzLnN0ZXApcmV0dXJuIGU7dmFyIHQ9TWF0aC5yb3VuZCgoZS10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gdGhpcy5zdGVwPDE/dC8oMS90aGlzLnN0ZXApK3RoaXMubWluOnQqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTihlKT90aGlzLm9sZFZhbHVlOmUsdGhpcy52YWx1ZSE9PWV9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCksdGhpcy5fc2V0UmF0aW8odGhpcy5fY2FsY1JhdGlvKHRoaXMudmFsdWUpKjEwMCl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlblwkPSJbW19oaWRlU2Vjb25kYXJ5UHJvZ3Jlc3Moc2Vjb25kYXJ5UmF0aW8pXV0iPjwvZGl2PgogICAgICA8ZGl2IGlkPSJwcmltYXJ5UHJvZ3Jlc3MiPjwvZGl2PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXByb2dyZXNzIixiZWhhdmlvcnM6W2s5XSxwcm9wZXJ0aWVzOntzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc2Vjb25kYXJ5UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3RvZ2dsZUluZGV0ZXJtaW5hdGUifSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcHJvZ3Jlc3NDaGFuZ2VkKHNlY29uZGFyeVByb2dyZXNzLCB2YWx1ZSwgbWluLCBtYXgsIGluZGV0ZXJtaW5hdGUpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InByb2dyZXNzYmFyIn0sX3RvZ2dsZUluZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygiaW5kZXRlcm1pbmF0ZSIsZSx0aGlzLiQucHJpbWFyeVByb2dyZXNzKX0sX3RyYW5zZm9ybVByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9InNjYWxlWCgiK3QvMTAwKyIpIjtlLnN0eWxlLnRyYW5zZm9ybT1lLnN0eWxlLndlYmtpdFRyYW5zZm9ybT1yfSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGUpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT10aGlzLl9jbGFtcFZhbHVlKGUpLHQ9dGhpcy5fY2xhbXBWYWx1ZSh0KTt2YXIgbz10aGlzLl9jYWxjUmF0aW8oZSkqMTAwLGE9dGhpcy5fY2FsY1JhdGlvKHQpKjEwMDt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbyksdGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxhKSx0aGlzLnNlY29uZGFyeVByb2dyZXNzPWUsaT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iix0KSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsciksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLG4pfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixlPyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB9fSk7dmFyIGswdD1RYAo8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZTogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXNpemUsIDE2cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUsIC0xcHgpOwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgI3JhZGlvQ29udGFpbmVyIHsKICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1yYWRpby1jb250YWluZXI7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNvZmZSYWRpbywgI29uUmFkaW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICB9CgogICNvZmZSYWRpbyB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjhzOwogIH0KCiAgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBlYXNlIDAuMjhzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC41KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTsKICB9CgogICNyYWRpb0xhYmVsIHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNyYWRpb0xhYmVsIHsKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogIH0KCiAgI3JhZGlvTGFiZWw6ZGlyKHJ0bCkgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICB9CgogICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAvKiBzbGlnaHRseSBkYXJrZXIgdGhhbiB0aGUgYnV0dG9uLCBzbyB0aGF0IGl0J3MgcmVhZGFibGUgKi8KICAgIG9wYWNpdHk6IDAuNjU7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0icmFkaW9Db250YWluZXIiPgogIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICA8ZGl2IGlkPSJvblJhZGlvIj48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtrMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTprMHQsaXM6InBhcGVyLXJhZGlvLWJ1dHRvbiIsYmVoYXZpb3JzOltYeF0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjohMSx0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnthcmlhQWN0aXZlQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiYXJpYS1jaGVja2VkIn19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC5yYWRpb0NvbnRhaW5lcn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiKS50cmltKCk7aWYoZT09PSItMXB4Iil7dmFyIHQ9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplIikudHJpbSgpKSxyPU1hdGguZmxvb3IoMyp0KTtyJTIhPT10JTImJnIrKyx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIjpyKyJweCJ9KX19KX19KTt2YXIgUjk9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51YmFyIn0sa2V5QmluZGluZ3M6e2xlZnQ6Il9vbkxlZnRLZXkiLHJpZ2h0OiJfb25SaWdodEtleSJ9LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sZ2V0IF9pc1JUTCgpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PT0icnRsIn0sX29uTGVmdEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c1ByZXZpb3VzKCk6dGhpcy5fZm9jdXNOZXh0KCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25LZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGUsInVwIGRvd24gbGVmdCByaWdodCBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKX19LE45PVtMOSxSOV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltOOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWx1ZVRvSXRlbShlKTtpZighKHQmJnQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSl7aWYodGhpcy5zZWxlY3RlZCl7dmFyIHI9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7aWYodGhpcy5zZWxlY3RlZD09ZSlpZih0aGlzLmFsbG93RW1wdHlTZWxlY3Rpb24pZT0iIjtlbHNle3ImJihyLmNoZWNrZWQ9ITApO3JldHVybn1yJiYoci5jaGVja2VkPSExKX13aC5zZWxlY3QuYXBwbHkodGhpcyxbZV0pLHRoaXMuZmlyZSgicGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZCIpfX0sX2FjdGl2YXRlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9pdGVtQWN0aXZhdGUodGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuZm9jdXNlZEl0ZW0pLHRoaXMuZm9jdXNlZEl0ZW0pfSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uRG93bktleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c05leHQoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGUpe1I5Ll9vbkxlZnRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oZSl7UjkuX29uUmlnaHRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX19KTt2YXIgUjB0PVFgCiAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgfQoKICAgIC8qIGZvY3VzIHNob3dzIHRoZSByaXBwbGUgKi8KICAgIDpob3N0KDpmb2N1cykgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC8qKgogICAgICAqIE5PVEUoa2VhbnVsZWUpOiBUaG91Z2ggOmhvc3QtY29udGV4dCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkLCBzb21lIHBhZ2VzCiAgICAgICogc3RpbGwgcmVseSBvbiBwYXBlci1zbGlkZXIgYmVpbmcgZmxpcHBlZCB3aGVuIGRpcj0icnRsIiBpcyBzZXQgb24gYm9keS4gRm9yIGZ1bGwKICAgICAgKiBjb21wYXRpYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICovCiAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICogbm90IGJlIHJlY29nbml6ZWQuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJydGwiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgOmhvc3QtY29udGV4dCBydWxlICh3aGVyZSBzdXBwb3J0ZWQpCiAgICAgICogdG8gc3VwcG9ydCBMVFIgc2xpZGVycyBpbiBSVEwgcGFnZXMuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJsdHIiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgfQoKICAgIC5iYXItY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE4cyBlYXNlOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZC5kcmFnZ2luZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAucmluZy5leHBhbmQ6bm90KC5waW4pID4gLmJhci1jb250YWluZXIgewogICAgICBsZWZ0OiBjYWxjKDhweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckJhciB7CiAgICAgIHBhZGRpbmc6IDE1cHggMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1iYXItY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1jb250YWluZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VycyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLyogc2xpZGVyLWtub2IgaXMgMzBweCArIHRoZSBzbGlkZXItaGVpZ2h0IHNvIHRoYXQgdGhlIG1hcmtlcnMgc2hvdWxkIHN0YXJ0IGF0IGEgb2Zmc2V0IG9mIDE1cHgqLwogICAgICB0b3A6IDE1cHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IC0xcHg7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgIH0KCiAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgfQogICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgIC5zbGlkZXItbWFya2VyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7CiAgICAgIHdpZHRoOiAycHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvciwgIzAwMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xNXB4IC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgfQoKICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wOHMgZWFzZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBtYXJnaW46IDEwcHg7CiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKCiAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICB9CgogICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgfQoKICAgIC5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICB9CgogICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTNweDsKICAgICAgd2lkdGg6IDI2cHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDsKCiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlLAogICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlOwogICAgfQoKICAgIC5waW4ucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpIHRyYW5zbGF0ZSgxN3B4LCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1mb250LWNvbG9yLCAjZmZmKTsKICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnBpbi5leHBhbmQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZSgwLCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgIH0KCiAgICAvKiBwYXBlci1pbnB1dCAqLwogICAgLnNsaWRlci1pbnB1dCB7CiAgICAgIHdpZHRoOiA1MHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQtY29udGFpbmVyLWlucHV0OwogICAgICB9OwogICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQ7CiAgICB9CgogICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICNzbGlkZXJDb250YWluZXIuZGlzYWJsZWQgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuZGlzYWJsZWQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICB9CgogICAgLmRpc2FibGVkLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgcGFwZXItcmlwcGxlIHsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzXCQ9IltbX2dldENsYXNzTmFtZXMoZGlzYWJsZWQsIHBpbiwgc25hcHMsIGltbWVkaWF0ZVZhbHVlLCBtaW4sIGV4cGFuZCwgZHJhZ2dpbmcsIHRyYW5zaXRpbmcsIGVkaXRhYmxlKV1dIj4KICAgIDxkaXYgY2xhc3M9ImJhci1jb250YWluZXIiPgogICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpZD0ic2xpZGVyQmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIHN0ZXA9Iltbc3RlcF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBzZWNvbmRhcnktcHJvZ3Jlc3M9Iltbc2Vjb25kYXJ5UHJvZ3Jlc3NdXSIgb24tZG93bj0iX2JhcmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX2JhcnRyYWNrIiBvbi10YXA9Il9iYXJjbGljayI+CiAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc25hcHNdXSI+CiAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXJzIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VyIj48L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ic2xpZGVyS25vYiIgY2xhc3M9InNsaWRlci1rbm9iIiBvbi1kb3duPSJfa25vYmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX29uVHJhY2siIG9uLXRyYW5zaXRpb25lbmQ9Il9rbm9iVHJhbnNpdGlvbkVuZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlXCQ9IltbaW1tZWRpYXRlVmFsdWVdXSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VkaXRhYmxlXV0iPgogICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIGNsYXNzPSJzbGlkZXItaW5wdXQiIGRpc2FibGVkXCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgPC9wYXBlci1pbnB1dD4KICA8L3RlbXBsYXRlPgpgO1IwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOlIwdCxpczoicGFwZXItc2xpZGVyIixiZWhhdmlvcnM6W09vLEVoLGp4LGs5XSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc25hcHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHBpbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sc2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkIn0sZWRpdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW1tZWRpYXRlVmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxtYXhNYXJrZXJzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sZXhwYW5kOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LGlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZUJhclRvdWNoJiZkXyh0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGUsdCxyLG4saSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLHQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixyKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsZSksdGhpcy5fcG9zaXRpb25Lbm9iKHRoaXMuX2NhbGNSYXRpbyhlKSoxMDApfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ2YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pfSxfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kcmFnZ2luZz90aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKSx0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oZSkpKSx0aGlzLl9zZXRSYXRpbyh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqMTAwKSx0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiLHRoaXMuZHJhZ2dpbmcmJih0aGlzLl9rbm9ic3RhcnR4PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy50cmFuc2xhdGUzZCgwLDAsMCx0aGlzLiQuc2xpZGVyS25vYikpfSxfY2FsY0tub2JQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pKmUvMTAwK3RoaXMubWlufSxfb25UcmFjazpmdW5jdGlvbihlKXtzd2l0Y2goZS5zdG9wUHJvcGFnYXRpb24oKSxlLmRldGFpbC5zdGF0ZSl7Y2FzZSJzdGFydCI6dGhpcy5fdHJhY2tTdGFydChlKTticmVhaztjYXNlInRyYWNrIjp0aGlzLl90cmFja1goZSk7YnJlYWs7Y2FzZSJlbmQiOnRoaXMuX3RyYWNrRW5kKCk7YnJlYWt9fSxfdHJhY2tTdGFydDpmdW5jdGlvbihlKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGgsdGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMuX3N0YXJ0eD10aGlzLl94LHRoaXMuX2tub2JzdGFydHg9dGhpcy5fc3RhcnR4LHRoaXMuX21pbng9LXRoaXMuX3N0YXJ0eCx0aGlzLl9tYXh4PXRoaXMuX3ctdGhpcy5fc3RhcnR4LHRoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITApfSxfdHJhY2tYOmZ1bmN0aW9uKGUpe3RoaXMuZHJhZ2dpbmd8fHRoaXMuX3RyYWNrU3RhcnQoZSk7dmFyIHQ9dGhpcy5faXNSVEw/LTE6MSxyPU1hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxlLmRldGFpbC5keCp0KSk7dGhpcy5feD10aGlzLl9zdGFydHgrcjt2YXIgbj10aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZShuKTt2YXIgaT10aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4O3RoaXMudHJhbnNsYXRlM2QoaSsicHgiLDAsMCx0aGlzLiQuc2xpZGVyS25vYil9LF90cmFja0VuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC5zbGlkZXJLbm9iLnN0eWxlO3RoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITEpLHRoaXMuX3Jlc2V0S25vYigpLHRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZSxlLnRyYW5zZm9ybT1lLndlYmtpdFRyYW5zZm9ybT0iIix0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihlKXt0aGlzLl9leHBhbmRLbm9iKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJnRoaXMuX29uVHJhY2soZSl9LF9iYXJjbGljazpmdW5jdGlvbihlKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIHQ9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPShlLmRldGFpbC54LXQubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihyPTEwMC1yKTt2YXIgbj10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApLHRoaXMuX3Bvc2l0aW9uS25vYihyKSxuPT09dGhpcy5yYXRpbyYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSksdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0pLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzKCl9LF9iYXJkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJih0aGlzLmRlYm91bmNlKCJleHBhbmRLbm9iIix0aGlzLl9leHBhbmRLbm9iLDYwKSx0aGlzLl9iYXJjbGljayhlKSl9LF9rbm9iVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuJC5zbGlkZXJLbm9iJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKX0sX3VwZGF0ZU1hcmtlcnM6ZnVuY3Rpb24oZSx0LHIsbil7bnx8dGhpcy5fc2V0TWFya2VycyhbXSk7dmFyIGk9TWF0aC5yb3VuZCgoci10KS90aGlzLnN0ZXApO2k+ZSYmKGk9ZSksKGk8MHx8IWlzRmluaXRlKGkpKSYmKGk9MCksdGhpcy5fc2V0TWFya2VycyhuZXcgQXJyYXkoaSkpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIgIil9LF9nZXRDbGFzc05hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lcmdlQ2xhc3Nlcyh7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZCxwaW46dGhpcy5waW4sc25hcHM6dGhpcy5zbmFwcyxyaW5nOnRoaXMuaW1tZWRpYXRlVmFsdWU8PXRoaXMubWluLGV4cGFuZDp0aGlzLmV4cGFuZCxkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLHRyYW5zaXRpbmc6dGhpcy50cmFuc2l0aW5nLGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9KX0sX2FsbG93QmFyRXZlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaWdub3JlQmFyVG91Y2h8fGUuZGV0YWlsLnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudH0sZ2V0IF9pc1JUTCgpe3JldHVybiB0aGlzLl9faXNSVEw9PT12b2lkIDAmJih0aGlzLl9faXNSVEw9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX19pc1JUTH0sX2xlZnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5faXNSVEw/dGhpcy5faW5jcmVtZW50S2V5KGUpOnRoaXMuX2RlY3JlbWVudEtleShlKX0sX3JpZ2h0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2RlY3JlbWVudEtleShlKTp0aGlzLl9pbmNyZW1lbnRLZXkoZSl9LF9pbmNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJlbmQiP3RoaXMudmFsdWU9dGhpcy5tYXg6dGhpcy5pbmNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGUucHJldmVudERlZmF1bHQoKSl9LF9kZWNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJob21lIj90aGlzLnZhbHVlPXRoaXMubWluOnRoaXMuZGVjcmVtZW50KCksdGhpcy5maXJlKCJjaGFuZ2UiKSxlLnByZXZlbnREZWZhdWx0KCkpfSxfY2hhbmdlVmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy52YWx1ZT1lLnRhcmdldC52YWx1ZSx0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbnB1dEtleURvd246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnNsaWRlcktub2IscEUuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYoZT90aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0iIjp0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fcmlwcGxlLmhvbGREb3duPWUpfX0pO3ZhciBNVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO01XLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO01XLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqLwogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAvKgogICAgICAgKiBDb25zdGFudHM6CiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKQogICAgICAgKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKQogICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGEKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG8KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpCiAgICAgICAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtcwogICAgICAgKi8KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKCiAgICAgICAgLyogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zOwoKICAgICAgICAvKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zOwoKICAgICAgICAvKiA0ICogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7CgogICAgICAgIC8qIFNIUklOS19USU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtczsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKCiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCiAgICAgICAgICogZmxpcHBlZCBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIEFsd2F5cyB1c2UgbHRyIHNvIHRoYXQgdGhlCiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqLwogICAgICAgIGRpcmVjdGlvbjogbHRyOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTEgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMiB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTMtY29sb3IsIHZhcigtLWdvb2dsZS15ZWxsb3ctNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci00IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKToKICAgICAgICoKICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nCiAgICAgICAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgbGF5ZXItMnVuZGFudCBhcyBpdAogICAgICAgKiBzZWVtcykuCiAgICAgICAqLwogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0xIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci00IHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGUKICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLgogICAgICAgKi8KICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBsZWZ0OiA0NSU7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLAogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAyMDAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICBsZWZ0OiAtMTAwJTsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICB9CgogICAgICAuYWN0aXZlIC5nYXAtcGF0Y2g6OmFmdGVyLAogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24gewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTVcuY29udGVudCk7dmFyIEQ5PXtwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9fYWN0aXZlQ2hhbmdlZCJ9LGFsdDp7dHlwZTpTdHJpbmcsdmFsdWU6ImxvYWRpbmciLG9ic2VydmVyOiJfX2FsdENoYW5nZWQifSxfX2Nvb2xpbmdEb3duOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuW2V8fHQ/ImFjdGl2ZSI6IiIsdD8iY29vbGRvd24iOiIiXS5qb2luKCIgIil9LF9fYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuX19zZXRBcmlhSGlkZGVuKCFlKSx0aGlzLl9fY29vbGluZ0Rvd249IWUmJnR9LF9fYWx0Q2hhbmdlZDpmdW5jdGlvbihlKXtlPT09ImxvYWRpbmciP3RoaXMuYWx0PXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fGU6KHRoaXMuX19zZXRBcmlhSGlkZGVuKGU9PT0iIiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGUpe3ZhciB0PSJhcmlhLWhpZGRlbiI7ZT90aGlzLnNldEF0dHJpYnV0ZSh0LCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9LF9fcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT0hMSx0aGlzLl9fY29vbGluZ0Rvd249ITF9fTt2YXIgTjB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMSI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0zIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItNCI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDtOMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpOMHQsaXM6InBhcGVyLXNwaW5uZXIiLGJlaGF2aW9yczpbRDldfSk7dmFyIEQwdD1RYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO0QwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOkQwdCxpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W0Q5XX0pO3ZhciBqYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tcmlnaHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqYmUuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC1mb2N1c2VkOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbRGksU2gsc3VdLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIWUmJiEhZS5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbihlKXtpZih0aGlzLmxpbmspe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpO2lmKCF0fHxlLnRhcmdldD09PXQpcmV0dXJuO3QuY2xpY2soKX19fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIFxgdHJhbnNwYXJlbnRcYC4gKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiczsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWwtcmV2ZXJzZTsKICAgICAgfQoKICAgICAgI3RhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250YWluZXI7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC1tb3otZmxleC1iYXNpczogYXV0bzsKICAgICAgICAtbXMtZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnMtY29udGVudDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQ6bm90KC5zY3JvbGxhYmxlKSwKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlLmZpdC1jb250YWluZXIgewogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgLyogSUUgLSBwcmV2ZW50IHRhYnMgZnJvbSBjb21wcmVzc2luZyB3aGVuIHRoZXkgc2hvdWxkIHNjcm9sbC4gKi8KICAgICAgICAtbXMtZmxleDogMSAwIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDAgYXV0bzsKICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgfQoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLm5vdC12aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvciwgdmFyKC0tcGFwZXIteWVsbG93LWExMDApKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmFsaWduLWJvdHRvbSB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhci5leHBhbmQgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmNvbnRyYWN0IHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQgPiA6OnNsb3R0ZWQoOm5vdCgjc2VsZWN0aW9uQmFyKSkgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLWxlZnQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9sZWZ0SGlkZGVuLCBzY3JvbGxhYmxlLCBoaWRlU2Nyb2xsQnV0dG9ucyldXSIgb24tdXA9Il9vblNjcm9sbEJ1dHRvblVwIiBvbi1kb3duPSJfb25MZWZ0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgoKICAgIDxkaXYgaWQ9InRhYnNDb250YWluZXIiIG9uLXRyYWNrPSJfc2Nyb2xsIiBvbi1kb3duPSJfZG93biI+CiAgICAgIDxkaXYgaWQ9InRhYnNDb250ZW50IiBjbGFzcyQ9IltbX2NvbXB1dGVUYWJzQ29udGVudENsYXNzKHNjcm9sbGFibGUsIGZpdENvbnRhaW5lcildXSI+CiAgICAgICAgPGRpdiBpZD0ic2VsZWN0aW9uQmFyIiBjbGFzcyQ9IltbX2NvbXB1dGVTZWxlY3Rpb25CYXJDbGFzcyhub0JhciwgYWxpZ25Cb3R0b20pXV0iIG9uLXRyYW5zaXRpb25lbmQ9Il9vbkJhclRyYW5zaXRpb25FbmQiPjwvZGl2PgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLXJpZ2h0IiBjbGFzcyQ9IltbX2NvbXB1dGVTY3JvbGxCdXR0b25DbGFzcyhfcmlnaHRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vblJpZ2h0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgpgLGlzOiJwYXBlci10YWJzIixiZWhhdmlvcnM6W0pzLE45XSxwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sbm9CYXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9TbGlkZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzY3JvbGxhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpdENvbnRhaW5lcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxkaXNhYmxlRHJhZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRlU2Nyb2xsQnV0dG9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbGlnbkJvdHRvbTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItdGFiIn0sYXV0b3NlbGVjdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvc2VsZWN0RGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGwsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD16dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKTt0LmZvckVhY2goZT90aGlzLl9zZXROb2lua0F0dHJpYnV0ZTp0aGlzLl9yZW1vdmVOb2lua0F0dHJpYnV0ZSl9LF9zZXROb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgibm9pbmsiLCIiKX0sX3JlbW92ZU5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2UucmVtb3ZlQXR0cmlidXRlKCJub2luayIpfSxfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hdHx8cj8iaGlkZGVuIjplPyJub3QtdmlzaWJsZSI6IiJ9LF9jb21wdXRlVGFic0NvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybiBlPyJzY3JvbGxhYmxlIisodD8iIGZpdC1jb250YWluZXIiOiIiKToiIGZpdC1jb250YWluZXIifSxfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ImhpZGRlbiI6dD8iYWxpZ24tYm90dG9tIjoiIn0sX29uVGFiU2l6aW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoIl9vblRhYlNpemluZ0NoYW5nZWQiLGZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsKCksdGhpcy5fdGFiQ2hhbmdlZCh0aGlzLnNlbGVjdGVkSXRlbSl9LDEwKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl90YWJDaGFuZ2VkKGUuZGV0YWlsLml0ZW0sdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPWUuZGV0YWlsLml0ZW0sdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmRlYm91bmNlKCJ0YWItY2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl90YWJDaGFuZ2VkKG51bGwsdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPW51bGx9LDEpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKSxfXy5fYWN0aXZhdGVIYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3NjaGVkdWxlQWN0aXZhdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT1lLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD10aGlzLmFzeW5jKHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIsdCl9LF9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW07dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLGUuZmlyZSh0aGlzLmFjdGl2YXRlRXZlbnQsbnVsbCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSl9LF9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCE9PXZvaWQgMCYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0KSx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKGUpe3RoaXMuYXV0b3NlbGVjdCYmdGhpcy5fc2NoZWR1bGVBY3RpdmF0aW9uKHRoaXMuZm9jdXNlZEl0ZW0sdGhpcy5hdXRvc2VsZWN0RGVsYXkpfSxfb25CbHVyQ2FwdHVyZTpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbSYmdGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGUsdCl7aWYoISF0aGlzLnNjcm9sbGFibGUpe3ZhciByPXQmJi10LmRkeHx8MDt0aGlzLl9hZmZlY3RTY3JvbGwocil9fSxfZG93bjpmdW5jdGlvbihlKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oZSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9ZTt2YXIgdD10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3RoaXMuX2xlZnRIaWRkZW49dD09PTAsdGhpcy5fcmlnaHRIaWRkZW49dD09PXRoaXMuX3RhYkNvbnRhaW5lclNjcm9sbFNpemV9LF9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpLHRoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihlLHQpe2lmKCFlKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcigwLDApO3JldHVybn12YXIgcj10aGlzLiQudGFic0NvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWkubGVmdC1yLmxlZnQ7aWYodGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChpLndpZHRoLG4pLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQobyxuKX0sdGhpcy5ub1NsaWRlfHx0PT1udWxsKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpO3JldHVybn12YXIgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dGhpcy5pdGVtcy5pbmRleE9mKHQpLGw9dGhpcy5pdGVtcy5pbmRleE9mKGUpLGM9NTt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5hZGQoImV4cGFuZCIpO3ZhciB1PXM8bCxoPXRoaXMuX2lzUlRMO2gmJih1PSF1KSx1P3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGkubGVmdCtpLndpZHRoLWEubGVmdCxuKS1jLHRoaXMuX2xlZnQpOnRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGEubGVmdCthLndpZHRoLWkubGVmdCxuKS1jLHRoaXMuX2NhbGNQZXJjZW50KG8sbikrYyksdGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQoaS53aWR0aCxvKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihlLHQpe3ZhciByPXQtdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDtyPDA/dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9cjoocis9ZS10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCxyPjAmJih0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1yKSl9LF9jYWxjUGVyY2VudDpmdW5jdGlvbihlLHQpe3JldHVybiAxMDAqZS90fSxfcG9zaXRpb25CYXI6ZnVuY3Rpb24oZSx0KXtlPWV8fDAsdD10fHwwLHRoaXMuX3dpZHRoPWUsdGhpcy5fbGVmdD10LHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGVYKCIrdCsiJSkgc2NhbGVYKCIrZS8xMDArIikiLHRoaXMuJC5zZWxlY3Rpb25CYXIpfSxfb25CYXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0O3QuY29udGFpbnMoImV4cGFuZCIpPyh0LnJlbW92ZSgiZXhwYW5kIiksdC5hZGQoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KSk6dC5jb250YWlucygiY29udHJhY3QiKSYmdC5yZW1vdmUoImNvbnRyYWN0Iil9fSk7dmFyIEp4PW51bGw7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci10b2FzdCIsYmVoYXZpb3JzOltLeF0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNlM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe3JldHVybiBEYS5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIiksdGhpcy5vcGVuZWR9LGdldCBfY2FuQXV0b0Nsb3NlKCl7cmV0dXJuIHRoaXMuZHVyYXRpb24+MCYmdGhpcy5kdXJhdGlvbiE9PTEvMH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZT1udWxsLGVjLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbihlKXt0eXBlb2YgZT09InN0cmluZyImJihlPXt0ZXh0OmV9KTtmb3IodmFyIHQgaW4gZSl0LmluZGV4T2YoIl8iKT09PTA/RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIHByaXZhdGUgYW5kIHdhcyBub3Qgc2V0LicpOnQgaW4gdGhpcz90aGlzW3RdPWVbdF06RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7ZSYmZS50YXJnZXQ9PT10aGlzJiZlLnByb3BlcnR5TmFtZT09PSJvcGFjaXR5IiYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2UhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKSx0aGlzLm9wZW5lZD8oSngmJkp4IT09dGhpcyYmSnguY2xvc2UoKSxKeD10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOkp4PT09dGhpcyYmKEp4PW51bGwpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMucG9zaXRpb25UYXJnZXQ9ZX19KTt2YXIgTzB0PVFgCgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOm5vbmU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXItY29sb3IsICMwMDAwMDApOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTUwKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24uZHJhZ2dpbmcgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJhciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXItY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgb3BhY2l0eTogMC4xMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0xNHB4OwogICAgICAgIGxlZnQ6IC0xNHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICAvKiBUaGUgdG9nZ2xlIGJ1dHRvbiBoYXMgYW4gYWJzb2x1dGUgcG9zaXRpb24gb2YgLTNweDsgVGhlIGV4dHJhIDFweAogICAgICAgIC8qIGFjY291bnRzIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBzaGFkb3cgYm94LiAqLwogICAgICAgIG1hcmdpbjogNHB4IDFweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYmFyLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWluay1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQmFyIiBjbGFzcz0idG9nZ2xlLWJhciI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJ1dHRvbiIgY2xhc3M9InRvZ2dsZS1idXR0b24iPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CgogIGA7TzB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6TzB0LGlzOiJwYXBlci10b2dnbGUtYnV0dG9uIixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIiwiYXJpYS1wcmVzc2VkIjoiZmFsc2UiLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e30sbGlzdGVuZXJzOnt0cmFjazoiX29udHJhY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXtkXyh0aGlzLCJwYW4teSIpfSl9LF9vbnRyYWNrOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsO3Quc3RhdGU9PT0ic3RhcnQiP3RoaXMuX3RyYWNrU3RhcnQodCk6dC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fdHJhY2tNb3ZlKHQpOnQuc3RhdGU9PT0iZW5kIiYmdGhpcy5fdHJhY2tFbmQodCl9LF90cmFja1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvMix0aGlzLl90cmFja0NoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuJC50b2dnbGVCdXR0b24uY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKX0sX3RyYWNrTW92ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrdDp0KSksdGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pLHRoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oZSl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIGU9c3UuX2NyZWF0ZVJpcHBsZSgpO3JldHVybiBlLmlkPSJpbmsiLGUuc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKSxlLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKSxlfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogXGAudG9vbGJhci10b29sc1xgIGRpc2FibGVzIHRvdWNoIGV2ZW50cyBzbyBtdWx0aXBsZSB0b29sYmFycyBjYW4gc3RhY2sgYW5kIG5vdAogICAgICAgKiBhYnNvcmIgZXZlbnRzLiBBbGwgY2hpbGRyZW4gbXVzdCBoYXZlIHBvaW50ZXIgZXZlbnRzIHJlLWVuYWJsZWQgdG8gd29yayBhcwogICAgICAgKiBleHBlY3RlZC4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKCo6bm90KFtkaXNhYmxlZF0pKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogNTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b24gKyAudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRoZSAtLXBhcGVyLXRvb2xiYXItdGl0bGUgbWl4aW4gaXMgYXBwbGllZCBoZXJlIGluc3RlYWQgb2YgYWJvdmUgdG8KICAgICAgICogZml4IHRoZSBpc3N1ZSB3aXRoIG1hcmdpbi1sZWZ0IGJlaW5nIGlnbm9yZWQgZHVlIHRvIGNzcyBvcmRlcmluZy4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGl0bGU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uW2ljb249bWVudV0pIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLyogVE9ETyhub21zKTogVW50aWwgd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiBmb3IgY2xhc3NlcyB0aGF0IGRvbid0IHVzZQogICAgICAgKiAvZGVlcC8gY3JlYXRlIG91ciBvd24uCiAgICAgICAqLwogICAgICAuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuY2VudGVyLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5lbmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvcEJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGJvdHRvbUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJib3R0b20iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sYmFyIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbGJhciJ9LHByb3BlcnRpZXM6e2JvdHRvbUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxqdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbWlkZGxlSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxyZWFkeTpmdW5jdGlvbigpe2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlKHRoaXMpLHRoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKX0sX29ic2VydmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfS5iaW5kKHRoaXMpKTtyZXR1cm4gdC5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdH0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7Y2koKTtmb3IodmFyIGU9W10sdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh6dCh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInNsb3QiKSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHp0KHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiY29udGVudCIpKSkscixuPTA7cj10W25dO24rKylmb3IodmFyIGk9enQocikuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLG8sYT0wO289aVthXTthKyspaWYoby5jbGFzc0xpc3QmJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKG8uaWQpZS5wdXNoKG8uaWQpO2Vsc2V7dmFyIHM9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KTtvLmlkPXMsZS5wdXNoKHMpfWUubGVuZ3RoPjAmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZSsoZT09PSJqdXN0aWZpZWQiPyIiOiItanVzdGlmaWVkIik6IiJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTAwMjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC1iYWNrZ3JvdW5kLCAjNjE2MTYxKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC10ZXh0LWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVVcCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZURvd24gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZUluT3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZU91dE9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bkluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25PdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZhZGUtaW4tYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVJbk9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuZmFkZS1vdXQtYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlT3V0T3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtdXAtYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZVVwOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVEb3duOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bkluOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uLW91dCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duT3V0OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5jYW5jZWwtYW5pbWF0aW9uIHsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0zMHMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogVGhhbmtzIElFIDEwLiAqLwoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntlbnRyeTpbe25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIixub2RlOnRoaXMsdGltaW5nOntkZWxheTowfX1dLGV4aXQ6W3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLG5vZGU6dGhpc31dfX19LF9zaG93aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3dlYmtpdEFuaW1hdGlvbkVuZDoiX29uQW5pbWF0aW9uRW5kIn0sZ2V0IHRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGUsdD16dCh0aGlzKS5nZXRPd25lclJvb3QoKSxyO3JldHVybiB0aGlzLmZvcj9yPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTpyPWUubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT90Lmhvc3Q6ZSxyfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmRUYXJnZXQoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGUpe2U9PT0iZW50cnkiP3RoaXMuc2hvdygpOmU9PT0iZXhpdCImJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoenQodGhpcykudGV4dENvbnRlbnQudHJpbSgpPT09IiIpe2Zvcih2YXIgZT0hMCx0PXp0KHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS50ZXh0Q29udGVudC50cmltKCkhPT0iIil7ZT0hMTticmVha31pZihlKXJldHVybn10aGlzLl9zaG93aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKX19LGhpZGU6ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Nob3dpbmcpe2lmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmcpe3RoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCk7cmV0dXJufWVsc2UgdGhpcy5fb25BbmltYXRpb25GaW5pc2goKTt0aGlzLl9zaG93aW5nPSExLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITB9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuX3RhcmdldHx8IXRoaXMub2Zmc2V0UGFyZW50KSl7dmFyIGU9dGhpcy5vZmZzZXQ7dGhpcy5tYXJnaW5Ub3AhPTE0JiZ0aGlzLm9mZnNldD09MTQmJihlPXRoaXMubWFyZ2luVG9wKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT0oci53aWR0aC1uLndpZHRoKS8yLG89KHIuaGVpZ2h0LW4uaGVpZ2h0KS8yLGE9ci5sZWZ0LXQubGVmdCxzPXIudG9wLXQudG9wLGwsYztzd2l0Y2godGhpcy5wb3NpdGlvbil7Y2FzZSJ0b3AiOmw9YStpLGM9cy1uLmhlaWdodC1lO2JyZWFrO2Nhc2UiYm90dG9tIjpsPWEraSxjPXMrci5oZWlnaHQrZTticmVhaztjYXNlImxlZnQiOmw9YS1uLndpZHRoLWUsYz1zK287YnJlYWs7Y2FzZSJyaWdodCI6bD1hK3Iud2lkdGgrZSxjPXMrbzticmVha310aGlzLmZpdFRvVmlzaWJsZUJvdW5kcz8odC5sZWZ0K2wrbi53aWR0aD53aW5kb3cuaW5uZXJXaWR0aD8odGhpcy5zdHlsZS5yaWdodD0iMHB4Iix0aGlzLnN0eWxlLmxlZnQ9ImF1dG8iKToodGhpcy5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsbCkrInB4Iix0aGlzLnN0eWxlLnJpZ2h0PSJhdXRvIiksdC50b3ArYytuLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQ/KHRoaXMuc3R5bGUuYm90dG9tPXQuaGVpZ2h0LXMrZSsicHgiLHRoaXMuc3R5bGUudG9wPSJhdXRvIik6KHRoaXMuc3R5bGUudG9wPU1hdGgubWF4KC10LnRvcCxjKSsicHgiLHRoaXMuc3R5bGUuYm90dG9tPSJhdXRvIikpOih0aGlzLnN0eWxlLmxlZnQ9bCsicHgiLHRoaXMuc3R5bGUudG9wPWMrInB4Iil9fSxfYWRkTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWVudGVyIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiYmx1ciIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMubGlzdGVuKHRoaXMsIm1vdXNlZW50ZXIiLCJoaWRlIil9LF9maW5kVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlfHx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl90YXJnZXQ9dGhpcy50YXJnZXQsdGhpcy5tYW51YWxNb2RlfHx0aGlzLl9hZGRMaXN0ZW5lcnMoKX0sX2RlbGF5Q2hhbmdlOmZ1bmN0aW9uKGUpe2UhPT01MDAmJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LWluIjplKyJtcyJ9KX0sX21hbnVhbE1vZGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlP3RoaXMuX3JlbW92ZUxpc3RlbmVycygpOnRoaXMuX2FkZExpc3RlbmVycygpfSxfY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMSx0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oZSl7aWYoZT09PSJlbnRyeSImJnRoaXMuYW5pbWF0aW9uRW50cnkhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTtpZihlPT09ImV4aXQiJiZ0aGlzLmFuaW1hdGlvbkV4aXQhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FeGl0O2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdJiZ0eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0ubmFtZT09InN0cmluZyIpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZyYmdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0udGltaW5nLmRlbGF5JiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXkhPT0wKXt2YXIgdD10aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXk7ZT09PSJlbnRyeSI/dGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOnQrIm1zIn0pOmU9PT0iZXhpdCImJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCI6dCsibXMifSl9cmV0dXJuIHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLm5hbWV9fSxfcmVtb3ZlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpLHRoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTt2YXIgcmI9RWUoT2UoKSwxKTt2YXIgbUU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX0sRVc9bmV3IFNldCxPOT1uZXcgU2V0O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKT0+e0VXLmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKT0+e085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO2Z1bmN0aW9uIGdFKGUpe2xldCB0PW5ldyBtRShlKTtyZXR1cm4gRVcuYWRkKHQpLHR9ZnVuY3Rpb24gVFcoZSl7bGV0IHQ9bmV3IG1FKGUpO3JldHVybiBPOS5hZGQodCksdH1mdW5jdGlvbiBDVygpe085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX1mdW5jdGlvbiBBVyhlKXtFVy5kZWxldGUoZSl9ZnVuY3Rpb24gUFcoZSl7TzkuZGVsZXRlKGUpfXZhciBrVz17fTtLcyhrVyx7Z2V0RmFrZUhhc2g6KCk9PkxXLHNldEZha2VIYXNoOigpPT5JVyxzZXRVc2VIYXNoOigpPT5YYmUsdXNlSGFzaDooKT0+ejl9KTt2YXIgejB0PSExO2Z1bmN0aW9uIFhiZShlKXt6MHQ9ZX1mdW5jdGlvbiB6OSgpe3JldHVybiB6MHR9dmFyIEYwdD0iIjtmdW5jdGlvbiBJVyhlKXtGMHQ9ZX1mdW5jdGlvbiBMVygpe3JldHVybiBGMHR9dmFyIFF4PSJfX3RhYl9fIixSVz17fTtmdW5jdGlvbiBCMHQoKXtyZXR1cm4gUld9ZnVuY3Rpb24gSDB0KGUpe1JXPWV9Z0UoKCk9PntSVz1lYih0YigpKX0pO2Z1bmN0aW9uIHRiKCl7cmV0dXJuIHo5KCk/d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk6TFcoKX1mdW5jdGlvbiBlYihlKXtsZXQgdD17fTtyZXR1cm4gZS5zcGxpdCgiJiIpLmZvckVhY2gobj0+e2xldCBpPW4uc3BsaXQoIj0iKTtpLmxlbmd0aD09PTE/dFtReF09aVswXTppLmxlbmd0aD09PTImJih0W2RlY29kZVVSSUNvbXBvbmVudChpWzBdKV09ZGVjb2RlVVJJQ29tcG9uZW50KGlbMV0pKX0pLHR9ZnVuY3Rpb24gRjkoZSx0PSExKXtpZih6OSgpKWlmKHQpe2xldCByPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3IuaGFzaD1lLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwiIixyLnRvU3RyaW5nKCkpfWVsc2Ugd2luZG93LmxvY2F0aW9uLmhhc2g9ZTtlbHNlIElXKGUpfWZ1bmN0aW9uIEI5KGUpe2xldCB0PSIiO2VbUXhdIT09dm9pZCAwJiYodCs9ZVtReF0pO2xldCByPU9iamVjdC5rZXlzKGUpLm1hcChuPT5bbixlW25dXSkuZmlsdGVyKG49Pm5bMF0hPT1ReCkubWFwKG49PmVuY29kZVVSSUNvbXBvbmVudChuWzBdKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pKS5qb2luKCImIik7cmV0dXJuIHIubGVuZ3RoPjA/dCsiJiIrcjp0fWZ1bmN0aW9uIFYwdChlLHQ9ITEpe2xldCByPWViKHRiKCkpO2RlbGV0ZSByW2VdLEY5KEI5KHIpLHQpfXZhciBxMHQ9ImRpc2FtYmlndWF0b3IiLHtnZXQ6JGJlLHNldDpLYmUsZ2V0SW5pdGlhbGl6ZXI6eV8sZ2V0T2JzZXJ2ZXI6dl8sZGlzcG9zZUJpbmRpbmc6WmJlfT12RShlPT5lLGU9PmUpLHtnZXQ6SmJlLHNldDpRYmUsZ2V0SW5pdGlhbGl6ZXI6dnAsZ2V0T2JzZXJ2ZXI6eHAsZGlzcG9zZUJpbmRpbmc6dDJlfT12RShlPT5lPT09InRydWUiPyEwOmU9PT0iZmFsc2UiPyExOnZvaWQgMCxlPT5lLnRvU3RyaW5nKCkpLHtnZXQ6Tlcsc2V0OkRXLGdldEluaXRpYWxpemVyOl9FLGdldE9ic2VydmVyOnlFLGRpc3Bvc2VCaW5kaW5nOmUyZX09dkUoZT0+K2UsZT0+ZS50b1N0cmluZygpKSx7Z2V0OnIyZSxzZXQ6bjJlLGdldEluaXRpYWxpemVyOk9XLGdldE9ic2VydmVyOnpXLGRpc3Bvc2VCaW5kaW5nOmkyZX09dkUoZT0+SlNPTi5wYXJzZShhdG9iKGUpKSxlPT5idG9hKEpTT04uc3RyaW5naWZ5KGUpKSk7ZnVuY3Rpb24gdkUoZSx0KXtsZXQgcj1bXSxuPVtdO2Z1bmN0aW9uIGkoYyx1PXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmgsdXNlTG9jYWxTdG9yYWdlOmY9ITF9PXUscD1mP3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShjKTplYih0YigpKVtjXTtyZXR1cm4gcD09bnVsbD9yYi5jbG9uZURlZXAoaCk6ZShwKX1mdW5jdGlvbiBvKGMsdSxoPXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmYsdXNlTG9jYWxTdG9yYWdlOnA9ITEsdXNlTG9jYXRpb25SZXBsYWNlOmQ9ITF9PWgsZz10KHUpO2lmKHApd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGMsZyksQ1coKTtlbHNlIGlmKCFyYi5pc0VxdWFsKHUsaShjLHt1c2VMb2NhbFN0b3JhZ2U6cH0pKSlpZihyYi5pc0VxdWFsKHUsZikpVjB0KGMsZCk7ZWxzZXtsZXQgXz1lYih0YigpKTtfW2NdPWcsRjkoQjkoXyksZCl9fWZ1bmN0aW9uIGEoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9VTB0KHRoaXMsYykscD0oKT0+e2xldCBfPWkoZixoKSx5PXRoaXNbaC5wb2x5bWVyUHJvcGVydHldO3JiLmlzRXF1YWwoXyx5KXx8KHRoaXNbaC5wb2x5bWVyUHJvcGVydHldPV8pfSxnPShoLnVzZUxvY2FsU3RvcmFnZT9UVzpnRSkoKCk9PnAoKSk7cmV0dXJuIGgudXNlTG9jYWxTdG9yYWdlP24ucHVzaChnKTpyLnB1c2goZykscCgpLHRoaXNbaC5wb2x5bWVyUHJvcGVydHldfX1mdW5jdGlvbiBzKCl7ci5mb3JFYWNoKGM9PkFXKGMpKSxuLmZvckVhY2goYz0+UFcoYykpfWZ1bmN0aW9uIGwoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9VTB0KHRoaXMsYykscD10aGlzW2gucG9seW1lclByb3BlcnR5XTtvKGYscCxoKX19cmV0dXJue2dldDppLHNldDpvLGdldEluaXRpYWxpemVyOmEsZ2V0T2JzZXJ2ZXI6bCxkaXNwb3NlQmluZGluZzpzfX1mdW5jdGlvbiBvMmUoKXtsZXQgZT1uZXcgU2V0KFsiZXhhbXBsZXNQYXRoIiwiaGlkZU1vZGVsUGFuZTIiLCJtb2RlbE5hbWUxIiwibW9kZWxOYW1lMiIsImluZmVyZW5jZUFkZHJlc3MxIiwiaW5mZXJlbmNlQWRkcmVzczIiLCJtb2RlbFR5cGUiLCJtb2RlbFZlcnNpb24xIiwibW9kZWxWZXJzaW9uMiIsIm1vZGVsU2lnbmF0dXJlMSIsIm1vZGVsU2lnbmF0dXJlMiIsIm1heEV4YW1wbGVzIiwibGFiZWxWb2NhYlBhdGgiLCJtdWx0aUNsYXNzIiwic2VxdWVuY2VFeGFtcGxlcyIsIm1heENsYXNzZXNUb0Rpc3BsYXkiLCJzYW1wbGluZ09kZHMiLCJ1c2VQcmVkaWN0QXBpIiwicHJlZGljdElucHV0VGVuc29yIiwicHJlZGljdE91dHB1dFRlbnNvciJdKSx0PWViKHRiKCkpO2lmKHRbUXhdPT09IndoYXRpZiIpe2ZvcihsZXQgciBvZiBlKWlmKHIgaW4gdCl7bGV0IG49dFtyXTt0W2BwLndoYXRpZi4ke3J9YF09bn19RjkoQjkodCkpLEgwdCh0KX1mdW5jdGlvbiBVMHQoZSx0KXtsZXQgcj1lW3EwdF07cmV0dXJuKHI9PW51bGw/W3RdOltyLHRdKS5qb2luKCIuIil9dmFyIHhFPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RhZ0ZpbHRlcj15XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSkuY2FsbCh0aGlzKSx0aGlzLl90YWdGaWx0ZXJPYnNlcnZlcj12XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSl9X2NvbXB1dGVUYWdGaWx0ZXIoKXtyZXR1cm4gdGhpcy5fdGFnRmlsdGVyfX07eEUudGVtcGxhdGU9UWAKICAgIDxwYXBlci1pbnB1dAogICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICBsYWJlbD0iRmlsdGVyIHRhZ3MgKHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydGVkKSIKICAgICAgdmFsdWU9Int7X3RhZ0ZpbHRlcn19IgogICAgICBjbGFzcz0ic2VhcmNoLWlucHV0IgogICAgPgogICAgICA8aXJvbi1pY29uIHByZWZpeD0iIiBpY29uPSJzZWFyY2giIHNsb3Q9InByZWZpeCI+PC9pcm9uLWljb24+CiAgICA8L3BhcGVyLWlucHV0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAxMHB4IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlVGFnRmlsdGVyKF90YWdGaWx0ZXIpIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsInRhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3RhZ0ZpbHRlck9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7eEU9RShbeXQoInRmLXRhZy1maWx0ZXJlciIpXSx4RSk7ZnVuY3Rpb24gX3MoZSl7bGV0e21vZHVsZU5hbWU6dCxzdHlsZUNvbnRlbnQ6cn09ZSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksbz1bXTtlLnN0eWxlRGVwZW5kZW5jaWVzJiZlLnN0eWxlRGVwZW5kZW5jaWVzLmZvckVhY2gocz0+e2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bC5zZXRBdHRyaWJ1dGUoImluY2x1ZGUiLHMpLG8ucHVzaChsKX0pO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7T2JqZWN0LmFzc2lnbihhLHt0ZXh0Q29udGVudDpyfSksby5mb3JFYWNoKHM9PntpLmNvbnRlbnQuYXBwZW5kQ2hpbGQocyl9KSxpLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYSksbi5hcHBlbmRDaGlsZChpKSxuLnJlZ2lzdGVyKHQpfV9zKHttb2R1bGVOYW1lOiJkYXNoYm9hcmQtc3R5bGUiLHN0eWxlRGVwZW5kZW5jaWVzOlsiaXJvbi1mbGV4Il0sc3R5bGVDb250ZW50OmAKICAgICAgOmhvc3QgewogICAgICAgIC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nOiAxNXB4OwogICAgICAgIC0tc2lkZWJhci1sZWZ0LXBhZGRpbmc6IDMwcHg7CiAgICAgIH0KCiAgICAgIFtzbG90PSdzaWRlYmFyJ10gewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDVweCAwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2V0dGluZ3MgewogICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbGVmdDogdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pbnB1dCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gewogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCB2YXIoLS10Yi11aS1ib3JkZXIpOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBwYWRkaW5nOiB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpIDAKICAgICAgICAgIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpmaXJzdC1vZi10eXBlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpsYXN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIHBhZGRpbmctdG9wOiAwOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICBgfSk7ZnVuY3Rpb24gX28oZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpLHRoaXMub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e3Iuc29tZShpPT5pLmF0dHJpYnV0ZU5hbWU9PT0iY2xhc3MiKSYmdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpfSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITB9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciByO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksKHI9dGhpcy5vYnNlcnZlcik9PW51bGx8fHIuZGlzY29ubmVjdCgpfV9tYXliZVNldERhcmtNb2RlKCl7dGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXJrLW1vZGUiKSl9fX1fcyh7bW9kdWxlTmFtZToic2Nyb2xsYmFyLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICB3aWR0aDogMTBweDsKICAgIH0KCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgIH0KICAgIC5zY3JvbGxiYXIgewogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQogIGB9KTt2YXIgQlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtCVy5zZXRBdHRyaWJ1dGUoImlzIiwiY3VzdG9tLXN0eWxlIik7QlcudGV4dENvbnRlbnQ9YAogIDpyb290IHsKICAgIC0tdGItb3JhbmdlLXdlYWs6ICNmZmE3MjY7CiAgICAtLXRiLW9yYW5nZS1zdHJvbmc6ICNmNTdjMDA7CiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwOwogICAgLS10Yi1ncmV5LWRhcmtlcjogI2UyZTJlMjsKICAgIC0tdGItZ3JleS1saWdodGVyOiAjZjNmM2YzOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTsKICAgIC0tdGItdWktbGlnaHQtYWNjZW50OiAjZTBlMGUwOwogICAgLS10Yi11aS1ib3JkZXI6IHZhcigtLXBhcGVyLWdyZXktMzAwKTsKICAgIC0tdGItZ3JhcGgtZmFkZWQ6ICNlMGQ0YjM7CiAgICAtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAtLXRiLXJhaXNlZC1idXR0b24tc2hhZG93LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7CiAgICAtLXRiLWxheW91dC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgLS10Yi1saW5rOiAjMTk3NmQyOyAvKiBtYXRlcmlhbCBibHVlIDcwMC4gKi8KICAgIC0tdGItbGluay12aXNpdGVkOiAjN2IxZmEyOyAvKiBtYXRlcmlhbCBwdXJwbGUgNzAwLiAqLwogIH0KCiAgOnJvb3QgLmRhcmstbW9kZSB7CiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS03MDApOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTsKICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiAjZmZmOwogICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzMDMwMzA7ICAvKiBtYXRlcmlhbCBncmV5IEE0MDAuICovCiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOwogICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTsKICAgIC0tdGItbGluazogIzQyYTVmNTsgLyogbWF0ZXJpYWwgYmx1ZSA0MDAuICovCiAgICAtLXRiLWxpbmstdmlzaXRlZDogI2JhNjhjODsgLyogbWF0ZXJpYWwgcHVycGxlIDMwMC4gKi8KICAgIC8qIE92ZXJyaWRlcyBwYXBlci1tYXRlcmlhbCAqLwogICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcF8tX2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCksCiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICB9CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChCVyk7dmFyIEhXPWNsYXNzIGV4dGVuZHMgX28obXQpe307SFcudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNpZGViYXIiPgogICAgICA8c2xvdCBuYW1lPSJzaWRlYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjZW50ZXIiPgogICAgICA8c2xvdCBuYW1lPSJjZW50ZXIiIGNsYXNzPSJzY29sbGJhciI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICAjc2lkZWJhciB7CiAgICAgICAgZmxleDogMCAwIHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1iYXNpcywgMjUlKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoLCAzNTBweCk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWluLXdpZHRoLCAyNzBweCk7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgI2NlbnRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NlbnRlciddKSB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAudGYtZ3JhcGgtZGFzaGJvYXJkICNjZW50ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtIVz1FKFt5dCgidGYtZGFzaGJvYXJkLWxheW91dCIpXSxIVyk7dmFyIEcwdD0iVEYuVGVuc29yQm9hcmQuUGFnaW5hdGVkVmlldy5saW1pdCIsYTJlPTEyLEFoPW51bGwsVlc9bmV3IFNldDtmdW5jdGlvbiBVVyhlKXtWVy5hZGQoZSl9ZnVuY3Rpb24gcVcoZSl7VlcuZGVsZXRlKGUpfWZ1bmN0aW9uIEdXKCl7cmV0dXJuIEFoPT1udWxsJiYoQWg9TlcoRzB0LHt1c2VMb2NhbFN0b3JhZ2U6ITB9KSwoQWg9PW51bGx8fCFpc0Zpbml0ZShBaCl8fEFoPD0wKSYmKEFoPWEyZSkpLEFofWZ1bmN0aW9uIHMyZShlKXtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGdvdDogJHtlfWApO2lmKGU8PTApdGhyb3cgbmV3IEVycm9yKGBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBidXQgZ290OiAke2V9YCk7ZSE9PUFoJiYoQWg9ZSxEVyhHMHQsQWgse3VzZUxvY2FsU3RvcmFnZTohMH0pLFZXLmZvckVhY2godD0+e3QoKX0pKX12YXIgbmI9Y2xhc3MgZXh0ZW5kcyBtdHt1cGRhdGVBcnJheVByb3AodCxyLG4pe2xldCBpPXRoaXMuZ2V0KHQpLG89cjtpZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBSYW5nZUVycm9yKGBFeHBlY3RlZCBuZXcgdmFsdWUgdG8gJyR7dH0nIHRvIGJlIGFuIGFycmF5LmApO0FycmF5LmlzQXJyYXkoaSl8fChpPVtdLHRoaXMuc2V0KHQsaSkpO2xldCBhPW5ldyBTZXQoby5tYXAoKGMsdSk9Pm4oYyx1KSkpLHM9MCxsPTA7Zm9yKDtzPGkubGVuZ3RoJiZsPG8ubGVuZ3RoOyl7aWYoYS5oYXMobihpW3NdLHMpKSluKGlbc10scyk9PW4ob1tsXSxsKT90aGlzLnNldChgJHt0fS4ke3N9YCxvW2xdKTp0aGlzLnNwbGljZSh0LHMsMCxvW2xdKTtlbHNle3RoaXMuc3BsaWNlKHQscywxKTtjb250aW51ZX1sKysscysrfXM8aS5sZW5ndGgmJnRoaXMuc3BsaWNlKHQscyksbDxvLmxlbmd0aCYmdGhpcy5wdXNoKHQsLi4uby5zbGljZShsKSl9fTt2YXIgT2k9Y2xhc3MgZXh0ZW5kcyBuYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7bGV0IHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO3RoaXMuX2N0b3I9dGModCx0aGlzLHtwYXJlbnRNb2RlbDohMCxpbnN0YW5jZVByb3BzOntbdGhpcy5hc106ITAsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihyLG4pe3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmZvckVhY2goaT0+e2kuZm9yd2FyZEhvc3RQcm9wKHIsbil9KX19KX1yZXR1cm4hMH1fYm9vdHN0cmFwRG9tKCl7aWYoIXRoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCl8fHRoaXMuX2RvbUJvb3RzdHJhcHBlZClyZXR1cm47bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2ZvcihsZXQgbiBvZiByKWlmKG4udHlwZT09PSJjaGlsZExpc3QiKWZvcihsZXQgaSBvZiBBcnJheS5mcm9tKG4uYWRkZWROb2RlcykpaSBpbnN0YW5jZW9mIEVsZW1lbnQmJmkuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKX0pLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKHI9Pnt0aGlzLnJlbW92ZUNoaWxkKHIpfSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9yZW5kZXJlZEl0ZW1zLmZvckVhY2goKHIsbik9PnRoaXMuX2luc2VydEl0ZW0ocixuKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwfV91cGRhdGVBY3RpdmUoKXshdGhpcy5fZG9tQm9vdHN0cmFwcGVkfHxBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKHQ9Pnt0Lm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSl9KX1fdXBkYXRlRG9tKHQpe2lmKCEhdGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYhKHQucGF0aD09Il9yZW5kZXJlZEl0ZW1zInx8dC5wYXRoPT0iX3JlbmRlcmVkSXRlbXMubGVuZ3RoIikpaWYodC5wYXRoPT09Il9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2gobj0+e2xldHtpbmRleDppLGFkZGVkQ291bnQ6byxvYmplY3Q6YSxyZW1vdmVkOnN9PW47cy5mb3JFYWNoKGw9Pnt0aGlzLl9yZW1vdmVJdGVtKGwsdGhpcy5jaGlsZHJlbltpXSl9KSxhLnNsaWNlKGksaStvKS5mb3JFYWNoKChsLGMpPT50aGlzLl9pbnNlcnRJdGVtKGwsaStjKSksdGhpcy5fdHJpbUNhY2hlKCl9KTtlbHNle2xldCByPXRoaXMuX2dldEl0ZW1LZXkodC52YWx1ZSk7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuaGFzKHIpP3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChyKS5ub3RpZnlQYXRoKHRoaXMuYXMsdC52YWx1ZSk6Y29uc29sZS53YXJuKGBFeHBlY3RlZCAnJHtyfScgdG8gZXhpc3QgaW4gdGhlIERPTSBidXQgY291bGQgbm90IGZpbmQgb25lLmApfX1faW5zZXJ0SXRlbSh0LHIpe2lmKCF0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGVtcGxhdGl6ZWQgYmVmb3JlIGluc2VydGluZyBhbiBpdGVtIik7bGV0IG4saT10aGlzLl9nZXRJdGVtS2V5KHQpO2lmKHRoaXMuX2xydUNhY2hlZEl0ZW1zLmhhcyhpKSluPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmdldChpKSx0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUoaSksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGkpLm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSk7ZWxzZXtsZXQgbz17W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGE9bmV3IHRoaXMuX2N0b3Iobyk7bj1hLnJvb3QsdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Quc2V0KGksYSl9dGhpcy5jaGlsZHJlbltyXT90aGlzLmluc2VydEJlZm9yZShuLHRoaXMuY2hpbGRyZW5bcl0pOigobi5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP0FycmF5LmZyb20obi5jaGlsZHJlbik6W25dKS5mb3JFYWNoKGE9PmEuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSksdGhpcy5hcHBlbmRDaGlsZChuKSl9X3JlbW92ZUl0ZW0odCxyKXtyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKTtsZXQgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLHIpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2xldFt0XT10aGlzLl9scnVDYWNoZWRJdGVtcy5rZXlzKCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKHQpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmRlbGV0ZSh0KX19fTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsImFzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxPaS5wcm90b3R5cGUsIml0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT2kucHJvdG90eXBlLCJfY29udGVudEFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfZG9tQm9vdHN0cmFwcGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2N0b3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9pLnByb3RvdHlwZSwiX3JlbmRlcmVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfcmVuZGVyZWRUZW1wbGF0ZUluc3QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfbHJ1Q2FjaGVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfY2FjaGVTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2dldEl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2lzQ29ubmVjdGVkIix2b2lkIDApO0UoW0J0KCJfaXNDb25uZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE9pLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCk7RShbQnQoIl9jb250ZW50QWN0aXZlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl91cGRhdGVBY3RpdmUiLG51bGwpO0UoW0J0KCJfcmVuZGVyZWRJdGVtcy4qIiwiX2RvbUJvb3RzdHJhcHBlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtPYmplY3RdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdXBkYXRlRG9tIixudWxsKTtFKFtCdCgiX2NhY2hlU2l6ZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTt2YXIgaG49Y2xhc3MgZXh0ZW5kcyBPaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxyKXt0JiZ0IT09ciYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmdC5uYW1lPT09IiIpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09TmEuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2xldHt0eXBlOnQsY29tcG9zaXRlU2VhcmNoOnJ9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIHImJnQ9PT1OYS5TRUFSQ0hfUkVTVUxUU31yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5vcGVuZWQ9dGhpcy5pbml0aWFsT3BlbmVkPT1udWxsPyEwOnRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsR1coKSl9LFVXKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe3FXKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5faXRlbXNSZW5kZXJlZCxyPXRoaXMuX2xpbWl0LG49dGhpcy5fYWN0aXZlSW5kZXgsaT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0KXJldHVybjtsZXQgbz1NYXRoLmZsb29yKG4vciksYT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxzPWk/YTphLnNsaWNlKG8qciwobysxKSpyKTt0aGlzLnVwZGF0ZURvbShzKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKHQqMil9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXt2YXIgdD10aGlzLl9saW1pdCxyPXRoaXMuX2FjdGl2ZUluZGV4O3JldHVybiBNYXRoLmZsb29yKHIvdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LHIpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9yKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7dmFyIHQ9dGhpcy5fcGFnZUNvdW50LHI9dGhpcy5kaXNhYmxlUGFnaW5hdGlvbjtyZXR1cm4hciYmdD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2U7cmV0dXJuIHQ+MX1nZXQgX2hhc05leHRQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2Uscj10aGlzLl9wYWdlQ291bnQ7cmV0dXJuIHQ8cn1fY29tcHV0ZUlucHV0V2lkdGgodCl7cmV0dXJuYGNhbGMoJHt0LnRvU3RyaW5nKCkubGVuZ3RofWVtICsgMjBweClgfV9zZXRBY3RpdmVJbmRleCh0KXtsZXQgcj0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ciYmKHQ9ciksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxyLG4pe3JldHVybiB0P3I6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7bGV0IHI9TnVtYmVyKHQudGFyZ2V0LnZhbHVlfHxOYU4pO2lmKGlzTmFOKHIpKXJldHVybjtsZXQgbj1NYXRoLm1heCgxLE1hdGgubWluKHIsdGhpcy5fcGFnZUNvdW50KSktMTt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9saW1pdCpuKX1faGFuZGxlUGFnZUNoYW5nZUV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fY3VycmVudFBhZ2UudG9TdHJpbmcoKSl9X2hhbmRsZVBhZ2VGb2N1c0V2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fcGFnZUlucHV0VmFsdWUpLHRoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITApfV9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9X3VwZGF0ZVBhZ2VJbnB1dFZhbHVlKHQpe3ZhciBuO2xldCByPShuPXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOm4ucXVlcnlTZWxlY3RvcigiI3BhZ2UtaW5wdXQgaW5wdXQiKTtyJiYoci52YWx1ZT10KX1fdXBkYXRlSW5wdXRXaWR0aCgpe3RoaXMudXBkYXRlU3R5bGVzKHsiLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoIjp0aGlzLl9pbnB1dFdpZHRofSl9fTtobi50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPlRhZ3MgbWF0Y2hpbmcgLzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbmFtZSIgdGl0bGUkPSJbW2NhdGVnb3J5Lm5hbWVdXSIKICAgICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZV1dIj4KICAgICAgICAgICAgPHNwYW4+W1tfY291bnRdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImV4cGFuZC1tb3JlIiBjbGFzcz0iZXhwYW5kLWFycm93Ij48L2lyb24taWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8IS0tIFRPRE8oc3RlcGhhbndsZWUpOiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBGb3Igc29tZSByZWFzb24sCiAgICAgICAgdHJhbnNpdGlvbmVuZCB0aGF0IHRoZSBpcm9uLWNvbGxhcHNlIHJlbGllcyBvbiBzb21ldGltZXMgZG9lcyBub3QKICAgICAgICB0cmlnZ2VyIHdoZW4gcmVuZGVyaW5nIGEgY2hhcnQgd2l0aCBhIHNwaW5uZXIuIEEgdG95IGV4YW1wbGUgY2Fubm90CiAgICAgICAgcmVwcm9kdWNlIHRoaXMgYnVnLiAtLT4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb249IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgICBpZD0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iW1tfcGFnZUNvdW50XV0iCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIgogICAgICAgICAgICAgICAgICBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50IgogICAgICAgICAgICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgNXB4IDFweCAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpsYXN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggdmFyKC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3IpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlOwogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbGV4LWJhc2lzOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0naXRlbXMnXSkgewogICAgICAgIC8qIFRvb2x0aXAgZm9yIGRlc2NyaXB0aW9ucyBhbmQgb3RoZXJzIGJyZWFrIHdpdGggbW9yZSBzdHJpY3Qgb25lcy4gKi8KICAgICAgICBjb250YWluOiBzdHlsZTsKICAgICAgfQoKICAgICAgI3BhZ2UtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0tdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXctcGFnZS1pbnB1dC13aWR0aCwgMTAwJSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobi5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saG4ucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxobi5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxobi5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKTtFKFtSdCgiX2NvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc011bHRpcGxlIixudWxsKTtFKFtCdCgib3BlbmVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW0Jvb2xlYW5dKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2hhbmdlQ29udGVudEFjdGl2ZSIsbnVsbCk7RShbUnQoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCk7RShbQnQoIl9pdGVtc1JlbmRlcmVkIiwiY2F0ZWdvcnkuaXRlbXMuKiIsIl9saW1pdCIsIl9hY3RpdmVJbmRleCIsIl9wYWdlQ291bnQiLCJkaXNhYmxlUGFnaW5hdGlvbiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfdXBkYXRlUmVuZGVyZWRJdGVtcyIsbnVsbCk7RShbUnQoIl9saW1pdCIsIl9hY3RpdmVJbmRleCIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2N1cnJlbnRQYWdlIixudWxsKTtFKFtSdCgiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCk7RShbUnQoIl9jdXJyZW50UGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxobi5wcm90b3R5cGUsIl9oYXNQcmV2aW91c1BhZ2UiLG51bGwpO0UoW1J0KCJfY3VycmVudFBhZ2UiLCJfcGFnZUNvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc05leHRQYWdlIixudWxsKTtFKFtCdCgiY2F0ZWdvcnkuaXRlbXMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCk7aG49RShbeXQoInRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IildLGhuKTt2YXIgVzB0PUVlKE9lKCksMSk7dmFyIEg5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19LGJwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoMSksdGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQsdGhpcy5pbml0aWFsaXplZD0hMX1yZWZyZXNoKCl7cmV0dXJuIHRoaXMubG9hZCgpLnRoZW4oKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSl9YWRkTGlzdGVuZXIodCl7bGV0IHI9bmV3IEg5KHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKHIpLHJ9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCh0PT57dHJ5e3QubGlzdGVuZXIoKX1jYXRjaChyKXt9fSl9fTt2YXIgVjk9Y2xhc3MgZXh0ZW5kcyBicHtsb2FkKCl7bGV0IHQ9X2UoKS5lbnZpcm9ubWVudCgpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57bGV0IG49e2RhdGFMb2NhdGlvbjpyLmRhdGFfbG9jYXRpb24sd2luZG93VGl0bGU6ci53aW5kb3dfdGl0bGV9O3IuZXhwZXJpbWVudF9uYW1lIT09dm9pZCAwJiYobi5leHBlcmltZW50TmFtZT1yLmV4cGVyaW1lbnRfbmFtZSksci5leHBlcmltZW50X2Rlc2NyaXB0aW9uIT09dm9pZCAwJiYobi5leHBlcmltZW50RGVzY3JpcHRpb249ci5leHBlcmltZW50X2Rlc2NyaXB0aW9uKSxyLmNyZWF0aW9uX3RpbWUhPT12b2lkIDAmJihuLmNyZWF0aW9uVGltZT1yLmNyZWF0aW9uX3RpbWUpLCFXMHQuaXNFcXVhbCh0aGlzLmVudmlyb25tZW50LG4pJiYodGhpcy5lbnZpcm9ubWVudD1uLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldERhdGFMb2NhdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZGF0YUxvY2F0aW9uOiIifWdldFdpbmRvd1RpdGxlKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC53aW5kb3dUaXRsZToiIn1nZXRFeHBlcmltZW50TmFtZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudE5hbWU6IiJ9Z2V0RXhwZXJpbWVudERlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50RGVzY3JpcHRpb246IiJ9Z2V0Q3JlYXRpb25UaW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5jcmVhdGlvblRpbWU6bnVsbH19LGliPW5ldyBWOTt2YXIgWTB0PUVlKE9lKCksMSk7dmFyIFU5PWNsYXNzIGV4dGVuZHMgYnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bnM9W119bG9hZCgpe2xldCB0PV9lKCkucnVucygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57WTB0LmlzRXF1YWwodGhpcy5fcnVucyxyKXx8KHRoaXMuX3J1bnM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRSdW5zKCl7cmV0dXJuIHRoaXMuX3J1bnMuc2xpY2UoKX19LHdwPW5ldyBVOTt2YXIgVnI9e307S3MoVnIse0Zvcm1hdFNwZWNpZmllcjooKT0+R0UsYWN0aXZlOigpPT5WdnQsYXJjOigpPT5CU3QsYXJlYTooKT0+ejgsYXJlYVJhZGlhbDooKT0+byQsYXNjZW5kaW5nOigpPT5vYSxhdXRvVHlwZTooKT0+aWosYXhpc0JvdHRvbTooKT0+WjksYXhpc0xlZnQ6KCk9PmxiLGF4aXNSaWdodDooKT0+bV90LGF4aXNUb3A6KCk9PmRfdCxiaXNlY3Q6KCk9PnlzLGJpc2VjdExlZnQ6KCk9PiQwdCxiaXNlY3RSaWdodDooKT0+V1csYmlzZWN0b3I6KCk9Pm9iLGJsb2I6KCk9PkQxdCxicnVzaDooKT0+R0wsYnJ1c2hTZWxlY3Rpb246KCk9PlVMLGJydXNoWDooKT0+anZ0LGJydXNoWTooKT0+cUwsYnVmZmVyOigpPT5PMXQsY2hvcmQ6KCk9PiR2dCxjbGllbnRQb2ludDooKT0+RG0sY2x1c3RlcjooKT0+V2J0LGNvbG9yOigpPT5yYyxjb250b3VyRGVuc2l0eTooKT0+ZzF0LGNvbnRvdXJzOigpPT5aTCxjcmVhdGU6KCk9PnN5dCxjcmVhdG9yOigpPT5SbSxjcm9zczooKT0+cTksY3N2OigpPT5GMXQsY3N2Rm9ybWF0OigpPT5iMXQsY3N2Rm9ybWF0Qm9keTooKT0+dzF0LGNzdkZvcm1hdFJvdzooKT0+TTF0LGNzdkZvcm1hdFJvd3M6KCk9PlMxdCxjc3ZGb3JtYXRWYWx1ZTooKT0+RTF0LGNzdlBhcnNlOigpPT5DYixjc3ZQYXJzZVJvd3M6KCk9PngxdCxjdWJlaGVsaXg6KCk9PmxhLGN1cnZlQmFzaXM6KCk9Plc4LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PlFTdCxjdXJ2ZUJhc2lzT3BlbjooKT0+ZTN0LGN1cnZlQnVuZGxlOigpPT5uM3QsY3VydmVDYXJkaW5hbDooKT0+aTN0LGN1cnZlQ2FyZGluYWxDbG9zZWQ6KCk9Pm8zdCxjdXJ2ZUNhcmRpbmFsT3BlbjooKT0+YTN0LGN1cnZlQ2F0bXVsbFJvbTooKT0+bDN0LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDooKT0+dTN0LGN1cnZlQ2F0bXVsbFJvbU9wZW46KCk9PmYzdCxjdXJ2ZUxpbmVhcjooKT0+WWgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9PmQzdCxjdXJ2ZU1vbm90b25lWDooKT0+eDN0LGN1cnZlTW9ub3RvbmVZOigpPT5iM3QsY3VydmVOYXR1cmFsOigpPT5NM3QsY3VydmVTdGVwOigpPT5FM3QsY3VydmVTdGVwQWZ0ZXI6KCk9PkMzdCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PlQzdCxjdXN0b21FdmVudDooKT0+TXAsZGVzY2VuZGluZzooKT0+WjB0LGRldmlhdGlvbjooKT0+VzksZGlzcGF0Y2g6KCk9PnZzLGRyYWc6KCk9PnBiLGRyYWdEaXNhYmxlOigpPT56bSxkcmFnRW5hYmxlOigpPT5GbSxkc3Y6KCk9Pm9qLGRzdkZvcm1hdDooKT0+V20sZWFzZUJhY2s6KCk9Pk9MLGVhc2VCYWNrSW46KCk9Pk9ZLGVhc2VCYWNrSW5PdXQ6KCk9Pk9MLGVhc2VCYWNrT3V0OigpPT56WSxlYXNlQm91bmNlOigpPT5QXyxlYXNlQm91bmNlSW46KCk9PlJZLGVhc2VCb3VuY2VJbk91dDooKT0+TlksZWFzZUJvdW5jZU91dDooKT0+UF8sZWFzZUNpcmNsZTooKT0+TkwsZWFzZUNpcmNsZUluOigpPT5JWSxlYXNlQ2lyY2xlSW5PdXQ6KCk9Pk5MLGVhc2VDaXJjbGVPdXQ6KCk9PkxZLGVhc2VDdWJpYzooKT0+eHMsZWFzZUN1YmljSW46KCk9PnhZLGVhc2VDdWJpY0luT3V0OigpPT54cyxlYXNlQ3ViaWNPdXQ6KCk9PmJZLGVhc2VFbGFzdGljOigpPT56TCxlYXNlRWxhc3RpY0luOigpPT5IWSxlYXNlRWxhc3RpY0luT3V0OigpPT5WWSxlYXNlRWxhc3RpY091dDooKT0+ekwsZWFzZUV4cDooKT0+UkwsZWFzZUV4cEluOigpPT5BWSxlYXNlRXhwSW5PdXQ6KCk9PlJMLGVhc2VFeHBPdXQ6KCk9PlBZLGVhc2VMaW5lYXI6KCk9Pl9ZLGVhc2VQb2x5OigpPT5MTCxlYXNlUG9seUluOigpPT5TWSxlYXNlUG9seUluT3V0OigpPT5MTCxlYXNlUG9seU91dDooKT0+TVksZWFzZVF1YWQ6KCk9PklMLGVhc2VRdWFkSW46KCk9PnlZLGVhc2VRdWFkSW5PdXQ6KCk9PklMLGVhc2VRdWFkT3V0OigpPT52WSxlYXNlU2luOigpPT5rTCxlYXNlU2luSW46KCk9PkVZLGVhc2VTaW5Jbk91dDooKT0+a0wsZWFzZVNpbk91dDooKT0+VFksZW50cmllczooKT0+dTF0LGV2ZW50OigpPT5xdCxleHRlbnQ6KCk9PmFhLGZvcmNlQ2VudGVyOigpPT5XMXQsZm9yY2VDb2xsaWRlOigpPT51eHQsZm9yY2VMaW5rOigpPT5meHQsZm9yY2VNYW55Qm9keTooKT0+Z3h0LGZvcmNlUmFkaWFsOigpPT5feHQsZm9yY2VTaW11bGF0aW9uOigpPT5teHQsZm9yY2VYOigpPT55eHQsZm9yY2VZOigpPT52eHQsZm9ybWF0OigpPT54bixmb3JtYXREZWZhdWx0TG9jYWxlOigpPT5uayxmb3JtYXRMb2NhbGU6KCk9PmVrLGZvcm1hdFByZWZpeDooKT0+V0UsZm9ybWF0U3BlY2lmaWVyOigpPT5McCxnZW9BbGJlcnM6KCk9PlVrLGdlb0FsYmVyc1VzYTooKT0+TGJ0LGdlb0FyZWE6KCk9Pk54dCxnZW9BemltdXRoYWxFcXVhbEFyZWE6KCk9PmtidCxnZW9BemltdXRoYWxFcXVhbEFyZWFSYXc6KCk9PkdrLGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OigpPT5SYnQsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PldrLGdlb0JvdW5kczooKT0+VXh0LGdlb0NlbnRyb2lkOigpPT5YeHQsZ2VvQ2lyY2xlOigpPT5ReHQsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+ZTUsZ2VvQ2xpcENpcmNsZTooKT0+QWssZ2VvQ2xpcEV4dGVudDooKT0+cmJ0LGdlb0NsaXBSZWN0YW5nbGU6KCk9PkRwLGdlb0NvbmljQ29uZm9ybWFsOigpPT5EYnQsZ2VvQ29uaWNDb25mb3JtYWxSYXc6KCk9PmpqLGdlb0NvbmljRXF1YWxBcmVhOigpPT5XXyxnZW9Db25pY0VxdWFsQXJlYVJhdzooKT0+V2osZ2VvQ29uaWNFcXVpZGlzdGFudDooKT0+emJ0LGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PlhqLGdlb0NvbnRhaW5zOigpPT5jYnQsZ2VvRGlzdGFuY2U6KCk9Pk5iLGdlb0VxdWFsRWFydGg6KCk9PkZidCxnZW9FcXVhbEVhcnRoUmF3OigpPT5YayxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9Pk9idCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9PmpfLGdlb0dub21vbmljOigpPT5CYnQsZ2VvR25vbW9uaWNSYXc6KCk9PiRrLGdlb0dyYXRpY3VsZTooKT0+TmssZ2VvR3JhdGljdWxlMTA6KCk9PmZidCxnZW9JZGVudGl0eTooKT0+SGJ0LGdlb0ludGVycG9sYXRlOigpPT5wYnQsZ2VvTGVuZ3RoOigpPT5rayxnZW9NZXJjYXRvcjooKT0+TmJ0LGdlb01lcmNhdG9yUmF3OigpPT5ZXyxnZW9OYXR1cmFsRWFydGgxOigpPT5WYnQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+S2ssZ2VvT3J0aG9ncmFwaGljOigpPT5VYnQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5aayxnZW9QYXRoOigpPT5UYnQsZ2VvUHJvamVjdGlvbjooKT0+U2ksZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9Pmw1LGdlb1JvdGF0aW9uOigpPT53ayxnZW9TdGVyZW9ncmFwaGljOigpPT5xYnQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+SmssZ2VvU3RyZWFtOigpPT52byxnZW9UcmFuc2Zvcm06KCk9PkNidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PkdidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PlFrLGdyYXk6KCk9PlN5dCxoY2w6KCk9PmdiLGhpZXJhcmNoeTooKT0+cDUsaGlzdG9ncmFtOigpPT5yX3QsaHNsOigpPT5WbSxodG1sOigpPT5xMXQsaW1hZ2U6KCk9PkgxdCxpbnRlcnBvbGF0ZTooKT0+bmMsaW50ZXJwb2xhdGVBcnJheTooKT0+RHl0LGludGVycG9sYXRlQmFzaXM6KCk9PmxMLGludGVycG9sYXRlQmFzaXNDbG9zZWQ6KCk9PmNMLGludGVycG9sYXRlQmx1ZXM6KCk9PnhTdCxpbnRlcnBvbGF0ZUJyQkc6KCk9PlF3dCxpbnRlcnBvbGF0ZUJ1R246KCk9PmxTdCxpbnRlcnBvbGF0ZUJ1UHU6KCk9PmNTdCxpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PlRTdCxpbnRlcnBvbGF0ZUNvb2w6KCk9PlBTdCxpbnRlcnBvbGF0ZUN1YmVoZWxpeDooKT0+Snl0LGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+Q1N0LGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzooKT0+RV8saW50ZXJwb2xhdGVEYXRlOigpPT5mTCxpbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5PeXQsaW50ZXJwb2xhdGVHbkJ1OigpPT51U3QsaW50ZXJwb2xhdGVHcmVlbnM6KCk9PmJTdCxpbnRlcnBvbGF0ZUdyZXlzOigpPT53U3QsaW50ZXJwb2xhdGVIY2w6KCk9PiR5dCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9Pkt5dCxpbnRlcnBvbGF0ZUhzbDooKT0+WXl0LGludGVycG9sYXRlSHNsTG9uZzooKT0+anl0LGludGVycG9sYXRlSHVlOigpPT56eXQsaW50ZXJwb2xhdGVJbmZlcm5vOigpPT5EU3QsaW50ZXJwb2xhdGVMYWI6KCk9Pk1fLGludGVycG9sYXRlTWFnbWE6KCk9Pk5TdCxpbnRlcnBvbGF0ZU51bWJlcjooKT0+emksaW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+eWIsaW50ZXJwb2xhdGVPYmplY3Q6KCk9PnBMLGludGVycG9sYXRlT3JSZDooKT0+aFN0LGludGVycG9sYXRlT3JhbmdlczooKT0+RVN0LGludGVycG9sYXRlUFJHbjooKT0+dFN0LGludGVycG9sYXRlUGlZRzooKT0+ZVN0LGludGVycG9sYXRlUGxhc21hOigpPT5PU3QsaW50ZXJwb2xhdGVQdUJ1OigpPT5wU3QsaW50ZXJwb2xhdGVQdUJ1R246KCk9PmZTdCxpbnRlcnBvbGF0ZVB1T3I6KCk9PnJTdCxpbnRlcnBvbGF0ZVB1UmQ6KCk9PmRTdCxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PlNTdCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PklTdCxpbnRlcnBvbGF0ZVJkQnU6KCk9Pm5TdCxpbnRlcnBvbGF0ZVJkR3k6KCk9PmlTdCxpbnRlcnBvbGF0ZVJkUHU6KCk9Pm1TdCxpbnRlcnBvbGF0ZVJkWWxCdTooKT0+b1N0LGludGVycG9sYXRlUmRZbEduOigpPT5hU3QsaW50ZXJwb2xhdGVSZWRzOigpPT5NU3QsaW50ZXJwb2xhdGVSZ2I6KCk9PnFtLGludGVycG9sYXRlUmdiQmFzaXM6KCk9PnVMLGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pk55dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5kTCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9PkxTdCxpbnRlcnBvbGF0ZVNwZWN0cmFsOigpPT5zU3QsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PnZiLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5fTCxpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZzooKT0+eUwsaW50ZXJwb2xhdGVUdXJibzooKT0+a1N0LGludGVycG9sYXRlVmlyaWRpczooKT0+UlN0LGludGVycG9sYXRlV2FybTooKT0+QVN0LGludGVycG9sYXRlWWxHbjooKT0+X1N0LGludGVycG9sYXRlWWxHbkJ1OigpPT5nU3QsaW50ZXJwb2xhdGVZbE9yQnI6KCk9PnlTdCxpbnRlcnBvbGF0ZVlsT3JSZDooKT0+dlN0LGludGVycG9sYXRlWm9vbTooKT0+dkwsaW50ZXJydXB0OigpPT5odSxpbnRlcnZhbDooKT0+bnZ0LGlzb0Zvcm1hdDooKT0+Rnd0LGlzb1BhcnNlOigpPT5Cd3QsanNvbjooKT0+VjF0LGtleXM6KCk9PiRMLGxhYjooKT0+d18sbGNoOigpPT5FeXQsbGluZTooKT0+dnUsbGluZVJhZGlhbDooKT0+aSQsbGlua0hvcml6b250YWw6KCk9PldTdCxsaW5rUmFkaWFsOigpPT5qU3QsbGlua1ZlcnRpY2FsOigpPT5ZU3QsbG9jYWw6KCk9PmVMLG1hcDooKT0+SmksbWF0Y2hlcjooKT0+dWIsbWF4OigpPT5sdSxtZWFuOigpPT5vX3QsbWVkaWFuOigpPT5hX3QsbWVyZ2U6KCk9PkltLG1pbjooKT0+TG0sbW91c2U6KCk9PnpvLG5hbWVzcGFjZTooKT0+UGgsbmFtZXNwYWNlczooKT0+U0UsbmVzdDooKT0+cjF0LG5vdzooKT0+QXAscGFjazooKT0+ZDJ0LHBhY2tFbmNsb3NlOigpPT5lOCxwYWNrU2libGluZ3M6KCk9PnUydCxwYWlyczooKT0+SzB0LHBhcnRpdGlvbjooKT0+bTJ0LHBhdGg6KCk9PmJzLHBlcm11dGU6KCk9PnNfdCxwaWU6KCk9PnFTdCxwaWVjZXdpc2U6KCk9PmRZLHBvaW50UmFkaWFsOigpPT5seSxwb2x5Z29uQXJlYTooKT0+TTJ0LHBvbHlnb25DZW50cm9pZDooKT0+RTJ0LHBvbHlnb25Db250YWluczooKT0+UDJ0LHBvbHlnb25IdWxsOigpPT5BMnQscG9seWdvbkxlbmd0aDooKT0+STJ0LHByZWNpc2lvbkZpeGVkOigpPT5payxwcmVjaXNpb25QcmVmaXg6KCk9Pm9rLHByZWNpc2lvblJvdW5kOigpPT5hayxxdWFkdHJlZTooKT0+emgscXVhbnRpbGU6KCk9PnNhLHF1YW50aXplOigpPT5ReXQscmFkaWFsQXJlYTooKT0+byQscmFkaWFsTGluZTooKT0+aSQscmFuZG9tQmF0ZXM6KCk9PlIydCxyYW5kb21FeHBvbmVudGlhbDooKT0+TjJ0LHJhbmRvbUlyd2luSGFsbDooKT0+czgscmFuZG9tTG9nTm9ybWFsOigpPT5rMnQscmFuZG9tTm9ybWFsOigpPT5hOCxyYW5kb21Vbmlmb3JtOigpPT5MMnQscmFuZ2U6KCk9PklyLHJnYjooKT0+Y3UscmliYm9uOigpPT5KdnQsc2NhbGVCYW5kOigpPT5RbSxzY2FsZURpdmVyZ2luZzooKT0+STgsc2NhbGVEaXZlcmdpbmdMb2c6KCk9PkNYLHNjYWxlRGl2ZXJnaW5nUG93OigpPT5MOCxzY2FsZURpdmVyZ2luZ1NxcnQ6KCk9PnF3dCxzY2FsZURpdmVyZ2luZ1N5bWxvZzooKT0+QVgsc2NhbGVJZGVudGl0eTooKT0+dTgsc2NhbGVJbXBsaWNpdDooKT0+bDgsc2NhbGVMaW5lYXI6KCk9Pk9uLHNjYWxlTG9nOigpPT5jYyxzY2FsZU9yZGluYWw6KCk9Pmd1LHNjYWxlUG9pbnQ6KCk9PnRnLHNjYWxlUG93OigpPT5LXyxzY2FsZVF1YW50aWxlOigpPT5lZyxzY2FsZVF1YW50aXplOigpPT5xYixzY2FsZVNlcXVlbnRpYWw6KCk9PlQ4LHNjYWxlU2VxdWVudGlhbExvZzooKT0+RVgsc2NhbGVTZXF1ZW50aWFsUG93OigpPT5DOCxzY2FsZVNlcXVlbnRpYWxRdWFudGlsZTooKT0+QTgsc2NhbGVTZXF1ZW50aWFsU3FydDooKT0+VXd0LHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+VFgsc2NhbGVTcXJ0OigpPT5ZMnQsc2NhbGVTeW1sb2c6KCk9PmY4LHNjYWxlVGhyZXNob2xkOigpPT5wOCxzY2FsZVRpbWU6KCk9PlliLHNjYWxlVXRjOigpPT5Wd3Qsc2NhbjooKT0+bF90LHNjaGVtZUFjY2VudDooKT0+R3d0LHNjaGVtZUJsdWVzOigpPT5LWCxzY2hlbWVCckJHOigpPT5QWCxzY2hlbWVCdUduOigpPT5GWCxzY2hlbWVCdVB1OigpPT5CWCxzY2hlbWVDYXRlZ29yeTEwOigpPT5qYixzY2hlbWVEYXJrMjooKT0+V3d0LHNjaGVtZUduQnU6KCk9PkhYLHNjaGVtZUdyZWVuczooKT0+Wlgsc2NoZW1lR3JleXM6KCk9PkpYLHNjaGVtZU9yUmQ6KCk9PlZYLHNjaGVtZU9yYW5nZXM6KCk9PmUkLHNjaGVtZVBSR246KCk9PklYLHNjaGVtZVBhaXJlZDooKT0+WXd0LHNjaGVtZVBhc3RlbDE6KCk9Pmp3dCxzY2hlbWVQYXN0ZWwyOigpPT5Yd3Qsc2NoZW1lUGlZRzooKT0+TFgsc2NoZW1lUHVCdTooKT0+cVgsc2NoZW1lUHVCdUduOigpPT5VWCxzY2hlbWVQdU9yOigpPT5rWCxzY2hlbWVQdVJkOigpPT5HWCxzY2hlbWVQdXJwbGVzOigpPT5RWCxzY2hlbWVSZEJ1OigpPT5SWCxzY2hlbWVSZEd5OigpPT5OWCxzY2hlbWVSZFB1OigpPT5XWCxzY2hlbWVSZFlsQnU6KCk9PkRYLHNjaGVtZVJkWWxHbjooKT0+T1gsc2NoZW1lUmVkczooKT0+dCQsc2NoZW1lU2V0MTooKT0+JHd0LHNjaGVtZVNldDI6KCk9Pkt3dCxzY2hlbWVTZXQzOigpPT5ad3Qsc2NoZW1lU3BlY3RyYWw6KCk9PnpYLHNjaGVtZVRhYmxlYXUxMDooKT0+Snd0LHNjaGVtZVlsR246KCk9PmpYLHNjaGVtZVlsR25CdTooKT0+WVgsc2NoZW1lWWxPckJyOigpPT5YWCxzY2hlbWVZbE9yUmQ6KCk9PiRYLHNlbGVjdDooKT0+SHQsc2VsZWN0QWxsOigpPT5FcCxzZWxlY3Rpb246KCk9PkloLHNlbGVjdG9yOigpPT5ObSxzZWxlY3RvckFsbDooKT0+Y2Isc2V0OigpPT5vMXQsc2h1ZmZsZTooKT0+Y190LHN0YWNrOigpPT5BM3Qsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PkkzdCxzdGFja09mZnNldEV4cGFuZDooKT0+UDN0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+eHUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5MM3Qsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PmszdCxzdGFja09yZGVyQXBwZWFyYW5jZTooKT0+Wjgsc3RhY2tPcmRlckFzY2VuZGluZzooKT0+Sjgsc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PlIzdCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5OM3Qsc3RhY2tPcmRlck5vbmU6KCk9PmJ1LHN0YWNrT3JkZXJSZXZlcnNlOigpPT5EM3Qsc3RyYXRpZnk6KCk9PnkydCxzdHlsZTooKT0+U3Asc3VtOigpPT51X3Qsc3ZnOigpPT5HMXQsc3ltYm9sOigpPT5aU3Qsc3ltYm9sQ2lyY2xlOigpPT5rNSxzeW1ib2xDcm9zczooKT0+Qjgsc3ltYm9sRGlhbW9uZDooKT0+SDgsc3ltYm9sU3F1YXJlOigpPT5VOCxzeW1ib2xTdGFyOigpPT5WOCxzeW1ib2xUcmlhbmdsZTooKT0+cTgsc3ltYm9sV3llOigpPT5HOCxzeW1ib2xzOigpPT5LU3QsdGV4dDooKT0+RF8sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczooKT0+bl90LHRocmVzaG9sZFNjb3R0OigpPT5pX3QsdGhyZXNob2xkU3R1cmdlczooKT0+c2IsdGlja0Zvcm1hdDooKT0+YzgsdGlja0luY3JlbWVudDooKT0+eF8sdGlja1N0ZXA6KCk9PnRsLHRpY2tzOigpPT5hYix0aW1lRGF5OigpPT50eSx0aW1lRGF5czooKT0+UTJ0LHRpbWVGb3JtYXQ6KCk9Pk01LHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOigpPT5TOCx0aW1lRm9ybWF0TG9jYWxlOigpPT5TNSx0aW1lRnJpZGF5OigpPT51WCx0aW1lRnJpZGF5czooKT0+aXd0LHRpbWVIb3VyOigpPT55OCx0aW1lSG91cnM6KCk9PloydCx0aW1lSW50ZXJ2YWw6KCk9PmJyLHRpbWVNaWxsaXNlY29uZDooKT0+Wl8sdGltZU1pbGxpc2Vjb25kczooKT0+YVgsdGltZU1pbnV0ZTooKT0+XzgsdGltZU1pbnV0ZXM6KCk9PiQydCx0aW1lTW9uZGF5OigpPT5yeSx0aW1lTW9uZGF5czooKT0+dHd0LHRpbWVNb250aDooKT0+djgsdGltZU1vbnRoczooKT0+c3d0LHRpbWVQYXJzZTooKT0+d1gsdGltZVNhdHVyZGF5OigpPT5oWCx0aW1lU2F0dXJkYXlzOigpPT5vd3QsdGltZVNlY29uZDooKT0+UV8sdGltZVNlY29uZHM6KCk9PnNYLHRpbWVTdW5kYXk6KCk9PnJnLHRpbWVTdW5kYXlzOigpPT5mWCx0aW1lVGh1cnNkYXk6KCk9PnpwLHRpbWVUaHVyc2RheXM6KCk9Pm53dCx0aW1lVHVlc2RheTooKT0+bFgsdGltZVR1ZXNkYXlzOigpPT5ld3QsdGltZVdlZG5lc2RheTooKT0+Y1gsdGltZVdlZG5lc2RheXM6KCk9PnJ3dCx0aW1lV2VlazooKT0+cmcsdGltZVdlZWtzOigpPT5mWCx0aW1lWWVhcjooKT0+R2gsdGltZVllYXJzOigpPT5sd3QsdGltZW91dDooKT0+ekUsdGltZXI6KCk9PkFfLHRpbWVyRmx1c2g6KCk9PmdZLHRvdWNoOigpPT5UcCx0b3VjaGVzOigpPT5seXQsdHJhbnNpdGlvbjooKT0+UEwsdHJhbnNwb3NlOigpPT5ZOSx0cmVlOigpPT52MnQsdHJlZW1hcDooKT0+eDJ0LHRyZWVtYXBCaW5hcnk6KCk9PmIydCx0cmVlbWFwRGljZTooKT0+VWgsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PlMydCx0cmVlbWFwU2xpY2U6KCk9PkptLHRyZWVtYXBTbGljZURpY2U6KCk9PncydCx0cmVlbWFwU3F1YXJpZnk6KCk9Pm84LHRzdjooKT0+QjF0LHRzdkZvcm1hdDooKT0+QTF0LHRzdkZvcm1hdEJvZHk6KCk9PlAxdCx0c3ZGb3JtYXRSb3c6KCk9PkwxdCx0c3ZGb3JtYXRSb3dzOigpPT5JMXQsdHN2Rm9ybWF0VmFsdWU6KCk9PmsxdCx0c3ZQYXJzZTooKT0+QWIsdHN2UGFyc2VSb3dzOigpPT5DMXQsdXRjRGF5OigpPT5ueSx1dGNEYXlzOigpPT5kd3QsdXRjRm9ybWF0OigpPT5heSx1dGNGcmlkYXk6KCk9PmdYLHV0Y0ZyaWRheXM6KCk9PnZ3dCx1dGNIb3VyOigpPT5iOCx1dGNIb3VyczooKT0+Znd0LHV0Y01pbGxpc2Vjb25kOigpPT5aXyx1dGNNaWxsaXNlY29uZHM6KCk9PmFYLHV0Y01pbnV0ZTooKT0+eDgsdXRjTWludXRlczooKT0+dXd0LHV0Y01vbmRheTooKT0+b3ksdXRjTW9uZGF5czooKT0+bXd0LHV0Y01vbnRoOigpPT53OCx1dGNNb250aHM6KCk9Pnd3dCx1dGNQYXJzZTooKT0+RTUsdXRjU2F0dXJkYXk6KCk9Pl9YLHV0Y1NhdHVyZGF5czooKT0+eHd0LHV0Y1NlY29uZDooKT0+UV8sdXRjU2Vjb25kczooKT0+c1gsdXRjU3VuZGF5OigpPT5uZyx1dGNTdW5kYXlzOigpPT55WCx1dGNUaHVyc2RheTooKT0+RnAsdXRjVGh1cnNkYXlzOigpPT55d3QsdXRjVHVlc2RheTooKT0+ZFgsdXRjVHVlc2RheXM6KCk9Pmd3dCx1dGNXZWRuZXNkYXk6KCk9Pm1YLHV0Y1dlZG5lc2RheXM6KCk9Pl93dCx1dGNXZWVrOigpPT5uZyx1dGNXZWVrczooKT0+eVgsdXRjWWVhcjooKT0+V2gsdXRjWWVhcnM6KCk9PlN3dCx2YWx1ZXM6KCk9PmwxdCx2YXJpYW5jZTooKT0+RzksdmVyc2lvbjooKT0+ajB0LHZvcm9ub2k6KCk9PkszdCx3aW5kb3c6KCk9PmhiLHhtbDooKT0+VTF0LHppcDooKT0+aF90LHpvb206KCk9PmVSLHpvb21JZGVudGl0eTooKT0+WGgsem9vbVRyYW5zZm9ybTooKT0+aTJ9KTt2YXIgajB0PSI1LjcuMCI7ZnVuY3Rpb24gb2EoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gb2IoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9bDJlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gbDJlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBvYShlKHQpLHIpfX12YXIgWDB0PW9iKG9hKSxXVz1YMHQucmlnaHQsJDB0PVgwdC5sZWZ0LHlzPVdXO2Z1bmN0aW9uIEswdChlLHQpe3Q9PW51bGwmJih0PVlXKTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT10KGksaT1lWysrcl0pO3JldHVybiBvfWZ1bmN0aW9uIFlXKGUsdCl7cmV0dXJuW2UsdF19ZnVuY3Rpb24gcTkoZSx0LHIpe3ZhciBuPWUubGVuZ3RoLGk9dC5sZW5ndGgsbz1uZXcgQXJyYXkobippKSxhLHMsbCxjO2ZvcihyPT1udWxsJiYocj1ZVyksYT1sPTA7YTxuOysrYSlmb3IoYz1lW2FdLHM9MDtzPGk7KytzLCsrbClvW2xdPXIoYyx0W3NdKTtyZXR1cm4gb31mdW5jdGlvbiBaMHQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gUXMoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX1mdW5jdGlvbiBHOShlLHQpe3ZhciByPWUubGVuZ3RoLG49MCxpPS0xLG89MCxhLHMsbD0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4oYT1RcyhlW2ldKSl8fChzPWEtbyxvKz1zLysrbixsKz1zKihhLW8pKTtlbHNlIGZvcig7KytpPHI7KWlzTmFOKGE9UXModChlW2ldLGksZSkpKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2lmKG4+MSlyZXR1cm4gbC8obi0xKX1mdW5jdGlvbiBXOShlLHQpe3ZhciByPUc5KGUsdCk7cmV0dXJuIHImJk1hdGguc3FydChyKX1mdW5jdGlvbiBhYShlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvLGE7aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJihvPmkmJihvPWkpLGE8aSYmKGE9aSkpO3JldHVybltvLGFdfXZhciBKMHQ9QXJyYXkucHJvdG90eXBlLFEwdD1KMHQuc2xpY2UsdF90PUowdC5tYXA7ZnVuY3Rpb24gYkUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGVfdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBJcihlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgalc9TWF0aC5zcXJ0KDUwKSxYVz1NYXRoLnNxcnQoMTApLCRXPU1hdGguc3FydCgyKTtmdW5jdGlvbiBhYihlLHQscil7dmFyIG4saT0tMSxvLGEscztpZih0PSt0LGU9K2Uscj0rcixlPT09dCYmcj4wKXJldHVybltlXTtpZigobj10PGUpJiYobz1lLGU9dCx0PW8pLChzPXhfKGUsdCxyKSk9PT0wfHwhaXNGaW5pdGUocykpcmV0dXJuW107aWYocz4wKWZvcihlPU1hdGguY2VpbChlL3MpLHQ9TWF0aC5mbG9vcih0L3MpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtZSsxKSk7KytpPG87KWFbaV09KGUraSkqcztlbHNlIGZvcihlPU1hdGguZmxvb3IoZSpzKSx0PU1hdGguY2VpbCh0KnMpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKGUtdCsxKSk7KytpPG87KWFbaV09KGUtaSkvcztyZXR1cm4gbiYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiB4XyhlLHQscil7dmFyIG49KHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSxvPW4vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KG8+PWpXPzEwOm8+PVhXPzU6bz49JFc/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhvPj1qVz8xMDpvPj1YVz81Om8+PSRXPzI6MSl9ZnVuY3Rpb24gdGwoZSx0LHIpe3ZhciBuPU1hdGguYWJzKHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksbz1uL2k7cmV0dXJuIG8+PWpXP2kqPTEwOm8+PVhXP2kqPTU6bz49JFcmJihpKj0yKSx0PGU/LWk6aX1mdW5jdGlvbiBzYihlKXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiByX3QoKXt2YXIgZT1lX3QsdD1hYSxyPXNiO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPXRsKHUsaCxmKSxmPUlyKE1hdGguY2VpbCh1L2YpKmYsaCxmKSk7Zm9yKHZhciBwPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLXA7Zm9yKDtmW3AtMV0+aDspZi5wb3AoKSwtLXA7dmFyIGQ9bmV3IEFycmF5KHArMSksZztmb3Iobz0wO288PXA7KytvKWc9ZFtvXT1bXSxnLngwPW8+MD9mW28tMV06dSxnLngxPW88cD9mW29dOmg7Zm9yKG89MDtvPGE7KytvKXM9bFtvXSx1PD1zJiZzPD1oJiZkW3lzKGYscywwLHApXS5wdXNoKGlbb10pO3JldHVybiBkfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6YkUoaSksbik6ZX0sbi5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpiRShbaVswXSxpWzFdXSksbik6dH0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6QXJyYXkuaXNBcnJheShpKT9iRShRMHQuY2FsbChpKSk6YkUoaSksbik6cn0sbn1mdW5jdGlvbiBzYShlLHQscil7aWYocj09bnVsbCYmKHI9UXMpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX1mdW5jdGlvbiBuX3QoZSx0LHIpe3JldHVybiBlPXRfdC5jYWxsKGUsUXMpLnNvcnQob2EpLE1hdGguY2VpbCgoci10KS8oMiooc2EoZSwuNzUpLXNhKGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiBpX3QoZSx0LHIpe3JldHVybiBNYXRoLmNlaWwoKHItdCkvKDMuNSpXOShlKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIGx1KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIG9fdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1RcyhlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPVFzKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufWZ1bmN0aW9uIGFfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvPVtdO2lmKHQ9PW51bGwpZm9yKDsrK248cjspaXNOYU4oaT1RcyhlW25dKSl8fG8ucHVzaChpKTtlbHNlIGZvcig7KytuPHI7KWlzTmFOKGk9UXModChlW25dLG4sZSkpKXx8by5wdXNoKGkpO3JldHVybiBzYShvLnNvcnQob2EpLC41KX1mdW5jdGlvbiBJbShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuPS0xLGk9MCxvLGE7KytuPHQ7KWkrPWVbbl0ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheShpKTstLXQ+PTA7KWZvcihhPWVbdF0scj1hLmxlbmd0aDstLXI+PTA7KW9bLS1pXT1hW3JdO3JldHVybiBvfWZ1bmN0aW9uIExtKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJm8+aSYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZvPmkmJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIHNfdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn1mdW5jdGlvbiBsX3QoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9b2EpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX1mdW5jdGlvbiBjX3QoZSx0LHIpe2Zvcih2YXIgbj0ocj09bnVsbD9lLmxlbmd0aDpyKS0odD10PT1udWxsPzA6K3QpLGksbztuOylvPU1hdGgucmFuZG9tKCkqbi0tfDAsaT1lW24rdF0sZVtuK3RdPWVbbyt0XSxlW28rdF09aTtyZXR1cm4gZX1mdW5jdGlvbiB1X3QoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz0wO2lmKHQ9PW51bGwpZm9yKDsrK248cjspKGk9K2Vbbl0pJiYobys9aSk7ZWxzZSBmb3IoOysrbjxyOykoaT0rdChlW25dLG4sZSkpJiYobys9aSk7cmV0dXJuIG99ZnVuY3Rpb24gWTkoZSl7aWYoIShvPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHQ9LTEscj1MbShlLGMyZSksbj1uZXcgQXJyYXkocik7Kyt0PHI7KWZvcih2YXIgaT0tMSxvLGE9blt0XT1uZXcgQXJyYXkobyk7KytpPG87KWFbaV09ZVtpXVt0XTtyZXR1cm4gbn1mdW5jdGlvbiBjMmUoZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGhfdCgpe3JldHVybiBZOShhcmd1bWVudHMpfXZhciBqOT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gZl90KGUpe3JldHVybiBlfXZhciBYOT0xLCQ5PTIsS1c9Myx3RT00LHBfdD0xZS02O2Z1bmN0aW9uIHUyZShlKXtyZXR1cm4idHJhbnNsYXRlKCIrKGUrLjUpKyIsMCkifWZ1bmN0aW9uIGgyZShlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisoZSsuNSkrIikifWZ1bmN0aW9uIGYyZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuK2UodCl9fWZ1bmN0aW9uIHAyZShlKXt2YXIgdD1NYXRoLm1heCgwLGUuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gZS5yb3VuZCgpJiYodD1NYXRoLnJvdW5kKHQpKSxmdW5jdGlvbihyKXtyZXR1cm4rZShyKSt0fX1mdW5jdGlvbiBkMmUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gSzkoZSx0KXt2YXIgcj1bXSxuPW51bGwsaT1udWxsLG89NixhPTYscz0zLGw9ZT09PVg5fHxlPT09d0U/LTE6MSxjPWU9PT13RXx8ZT09PSQ5PyJ4IjoieSIsdT1lPT09WDl8fGU9PT1LVz91MmU6aDJlO2Z1bmN0aW9uIGgoZil7dmFyIHA9bj09bnVsbD90LnRpY2tzP3QudGlja3MuYXBwbHkodCxyKTp0LmRvbWFpbigpOm4sZD1pPT1udWxsP3QudGlja0Zvcm1hdD90LnRpY2tGb3JtYXQuYXBwbHkodCxyKTpmX3Q6aSxnPU1hdGgubWF4KG8sMCkrcyxfPXQucmFuZ2UoKSx5PStfWzBdKy41LHg9K19bXy5sZW5ndGgtMV0rLjUsYj0odC5iYW5kd2lkdGg/cDJlOmYyZSkodC5jb3B5KCkpLFM9Zi5zZWxlY3Rpb24/Zi5zZWxlY3Rpb24oKTpmLEM9Uy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksUD1TLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHAsdCkub3JkZXIoKSxrPVAuZXhpdCgpLE89UC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEQ9UC5zZWxlY3QoImxpbmUiKSxCPVAuc2VsZWN0KCJ0ZXh0Iik7Qz1DLm1lcmdlKEMuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLFA9UC5tZXJnZShPKSxEPUQubWVyZ2UoTy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCpnKS5hdHRyKCJkeSIsZT09PVg5PyIwZW0iOmU9PT1LVz8iMC43MWVtIjoiMC4zMmVtIikpLGYhPT1TJiYoQz1DLnRyYW5zaXRpb24oZiksUD1QLnRyYW5zaXRpb24oZiksRD1ELnRyYW5zaXRpb24oZiksQj1CLnRyYW5zaXRpb24oZiksaz1rLnRyYW5zaXRpb24oZikuYXR0cigib3BhY2l0eSIscF90KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiBpc0Zpbml0ZShJPWIoSSkpP3UoSSk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksTy5hdHRyKCJvcGFjaXR5IixwX3QpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdShMJiZpc0Zpbml0ZShMPUwoSSkpP0w6YihJKSl9KSksay5yZW1vdmUoKSxDLmF0dHIoImQiLGU9PT13RXx8ZT09JDk/YT8iTSIrbCphKyIsIit5KyJIMC41ViIreCsiSCIrbCphOiJNMC41LCIreSsiViIreDphPyJNIit5KyIsIitsKmErIlYwLjVIIit4KyJWIitsKmE6Ik0iK3krIiwwLjVIIit4KSxQLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIHUoYihJKSl9KSxELmF0dHIoYysiMiIsbCpvKSxCLmF0dHIoYyxsKmcpLnRleHQoZCksUy5maWx0ZXIoZDJlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixlPT09JDk/InN0YXJ0IjplPT09d0U/ImVuZCI6Im1pZGRsZSIpLFMuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJ9KX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1mLGgpOnR9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1qOS5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWY9PW51bGw/W106ajkuY2FsbChmKSxoKTpyLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6ajkuY2FsbChmKSxoKTpuJiZuLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1mLGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rZixoKTpvfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2YsaCk6b30saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStmLGgpOmF9LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K2YsaCk6c30saH1mdW5jdGlvbiBkX3QoZSl7cmV0dXJuIEs5KFg5LGUpfWZ1bmN0aW9uIG1fdChlKXtyZXR1cm4gSzkoJDksZSl9ZnVuY3Rpb24gWjkoZSl7cmV0dXJuIEs5KEtXLGUpfWZ1bmN0aW9uIGxiKGUpe3JldHVybiBLOSh3RSxlKX1rbSgpO2ttKCk7dmFyIFE5PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTRT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6UTkseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBQaChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxTRS5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6U0VbdF0sbG9jYWw6ZX06ZX1mdW5jdGlvbiB5MmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1ROSYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09UTk/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHYyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBSbShlKXt2YXIgdD1QaChlKTtyZXR1cm4odC5sb2NhbD92MmU6eTJlKSh0KX1mdW5jdGlvbiB4MmUoKXt9ZnVuY3Rpb24gTm0oZSl7cmV0dXJuIGU9PW51bGw/eDJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19ZnVuY3Rpb24gdl90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ObShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IE5uKG4sdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gYjJlKCl7cmV0dXJuW119ZnVuY3Rpb24gY2IoZSl7cmV0dXJuIGU9PW51bGw/YjJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19ZnVuY3Rpb24geF90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1jYihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgTm4obixpKX1mdW5jdGlvbiB1YihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX1mdW5jdGlvbiBiX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXViKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBObihuLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHRMKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfWZ1bmN0aW9uIHdfdCgpe3JldHVybiBuZXcgTm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIE1FKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fU1FLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TUUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX07ZnVuY3Rpb24gU190KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgTV90PSIkIjtmdW5jdGlvbiB3MmUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IE1FKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiBTMmUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD1NX3QrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD1NX3QrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgTUUoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBFX3QoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P1MyZTp3MmUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1TX3QoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IE5uKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX1mdW5jdGlvbiBUX3QoKXtyZXR1cm4gbmV3IE5uKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENfdChlLHQscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6bi5hcHBlbmQoZSsiIiksdCE9bnVsbCYmKGk9dChpKSkscj09bnVsbD9vLnJlbW92ZSgpOnIobyksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX1mdW5jdGlvbiBBX3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IE5uKGEsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gUF90KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBJX3QoZSl7ZXx8KGU9TTJlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IE5uKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBNMmUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gTF90KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIGtfdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfWZ1bmN0aW9uIFJfdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTl90KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX1mdW5jdGlvbiBEX3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24gT190KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBFMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIFQyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIEMyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIEEyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBQMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIEkyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiB6X3QoZSx0KXt2YXIgcj1QaChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/VDJlOkUyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP0kyZTpQMmU6ci5sb2NhbD9BMmU6QzJlKShyLHQpKX1mdW5jdGlvbiBoYihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gTDJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGsyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIFIyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBGX3QoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0wyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9SMmU6azJlKShlLHQscj09bnVsbD8iIjpyKSk6U3AodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gU3AoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxoYihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBOMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIEQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gTzJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIEJfdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP04yZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9PMmU6RDJlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX1mdW5jdGlvbiBIX3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFpXKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IFZfdChlKX1mdW5jdGlvbiBWX3QoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPUhfdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfVZfdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX07ZnVuY3Rpb24gVV90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gcV90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5yZW1vdmUodFtuXSl9ZnVuY3Rpb24gejJlKGUpe3JldHVybiBmdW5jdGlvbigpe1VfdCh0aGlzLGUpfX1mdW5jdGlvbiBGMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cV90KHRoaXMsZSl9fWZ1bmN0aW9uIEIyZShlLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9VX3Q6cV90KSh0aGlzLGUpfX1mdW5jdGlvbiBHX3QoZSx0KXt2YXIgcj1IX3QoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WlcodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/QjJlOnQ/ejJlOkYyZSkocix0KSl9ZnVuY3Rpb24gSDJlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBWMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBVMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFdfdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9IMmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1UyZTpWMmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBxMmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBHMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gWV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3EyZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VzJlOkcyZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBZMmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gal90KCl7cmV0dXJuIHRoaXMuZWFjaChZMmUpfWZ1bmN0aW9uIGoyZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFhfdCgpe3JldHVybiB0aGlzLmVhY2goajJlKX1mdW5jdGlvbiAkX3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSbShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBYMmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBLX3QoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlJtKGUpLG49dD09bnVsbD9YMmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpObSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gJDJlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWl90KCl7cmV0dXJuIHRoaXMuZWFjaCgkMmUpfWZ1bmN0aW9uIEsyZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gWjJlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBKX3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/WjJlOksyZSl9ZnVuY3Rpb24gUV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZXl0PXt9LHF0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKHR5dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiB0eXR8fChleXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciB0eXQ7ZnVuY3Rpb24gSjJlKGUsdCxyKXtyZXR1cm4gZT1yeXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gcnl0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9cXQ7cXQ9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7cXQ9aX19fWZ1bmN0aW9uIFEyZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gdHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIGV3ZShlLHQscil7dmFyIG49ZXl0Lmhhc093blByb3BlcnR5KGUudHlwZSk/SjJlOnJ5dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBueXQoZSx0LHIpe3ZhciBuPVEyZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/ZXdlOnR3ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBNcChlLHQscixuKXt2YXIgaT1xdDtlLnNvdXJjZUV2ZW50PXF0LHF0PWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtxdD1pfX1mdW5jdGlvbiBpeXQoZSx0LHIpe3ZhciBuPWhiKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIHJ3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpeXQodGhpcyxlLHQpfX1mdW5jdGlvbiBud2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaXl0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIG95dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP253ZTpyd2UpKGUsdCkpfXZhciBFRT1bbnVsbF07ZnVuY3Rpb24gTm4oZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gYXl0KCl7cmV0dXJuIG5ldyBObihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEVFKX1Obi5wcm90b3R5cGU9YXl0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tm4sc2VsZWN0OnZfdCxzZWxlY3RBbGw6eF90LGZpbHRlcjpiX3QsZGF0YTpFX3QsZW50ZXI6d190LGV4aXQ6VF90LGpvaW46Q190LG1lcmdlOkFfdCxvcmRlcjpQX3Qsc29ydDpJX3QsY2FsbDpMX3Qsbm9kZXM6a190LG5vZGU6Ul90LHNpemU6Tl90LGVtcHR5OkRfdCxlYWNoOk9fdCxhdHRyOnpfdCxzdHlsZTpGX3QscHJvcGVydHk6Ql90LGNsYXNzZWQ6R190LHRleHQ6V190LGh0bWw6WV90LHJhaXNlOmpfdCxsb3dlcjpYX3QsYXBwZW5kOiRfdCxpbnNlcnQ6S190LHJlbW92ZTpaX3QsY2xvbmU6Sl90LGRhdHVtOlFfdCxvbjpueXQsZGlzcGF0Y2g6b3l0fTt2YXIgSWg9YXl0O2Z1bmN0aW9uIEh0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IE5uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgTm4oW1tlXV0sRUUpfWZ1bmN0aW9uIHN5dChlKXtyZXR1cm4gSHQoUm0oZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX12YXIgaXdlPTA7ZnVuY3Rpb24gZUwoKXtyZXR1cm4gbmV3IEpXfWZ1bmN0aW9uIEpXKCl7dGhpcy5fPSJAIisoKytpd2UpLnRvU3RyaW5nKDM2KX1KVy5wcm90b3R5cGU9ZUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKVyxnZXQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuXzshKHQgaW4gZSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZVt0XX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdGhpcy5fXT10fSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuXyBpbiBlJiZkZWxldGUgZVt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBmYigpe2Zvcih2YXIgZT1xdCx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIERtKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gem8oZSl7dmFyIHQ9ZmIoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRG0oZSx0KX1mdW5jdGlvbiBFcChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBObihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBObihbZT09bnVsbD9bXTplXSxFRSl9ZnVuY3Rpb24gVHAoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PWZiKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRG0oZSxvKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBseXQoZSx0KXt0PT1udWxsJiYodD1mYigpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EbShlLHRbcl0pO3JldHVybiBpfWZ1bmN0aW9uIHJMKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gT20oKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHptKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9SHQoZSkub24oImRyYWdzdGFydC5kcmFnIixPbSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixPbSwhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRm0oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUh0KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLE9tLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFRFKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBDRShlLHQscixuLGksbyxhLHMsbCxjKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMuc3ViamVjdD1yLHRoaXMuaWRlbnRpZmllcj1uLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9bCx0aGlzLl89Y31DRS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIGU9PT10aGlzLl8/dGhpczplfTtmdW5jdGlvbiBvd2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBhd2UoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIHN3ZShlKXtyZXR1cm4gZT09bnVsbD97eDpxdC54LHk6cXQueX06ZX1mdW5jdGlvbiBsd2UoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gcGIoKXt2YXIgZT1vd2UsdD1hd2Uscj1zd2Usbj1sd2UsaT17fSxvPXZzKCJzdGFydCIsImRyYWciLCJlbmQiKSxhPTAscyxsLGMsdSxoPTA7ZnVuY3Rpb24gZihTKXtTLm9uKCJtb3VzZWRvd24uZHJhZyIscCkuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLF8pLm9uKCJ0b3VjaG1vdmUuZHJhZyIseSkub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIseCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAoKXtpZighKHV8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpe3ZhciBTPWIoIm1vdXNlIix0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx6byx0aGlzLGFyZ3VtZW50cyk7IVN8fChIdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGQsITApLm9uKCJtb3VzZXVwLmRyYWciLGcsITApLHptKHF0LnZpZXcpLHJMKCksYz0hMSxzPXF0LmNsaWVudFgsbD1xdC5jbGllbnRZLFMoInN0YXJ0IikpfX1mdW5jdGlvbiBkKCl7aWYoT20oKSwhYyl7dmFyIFM9cXQuY2xpZW50WC1zLEM9cXQuY2xpZW50WS1sO2M9UypTK0MqQz5ofWkubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7SHQocXQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksRm0ocXQudmlldyxjKSxPbSgpLGkubW91c2UoImVuZCIpfWZ1bmN0aW9uIF8oKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUz1xdC5jaGFuZ2VkVG91Y2hlcyxDPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFA9Uy5sZW5ndGgsayxPO2ZvcihrPTA7azxQOysraykoTz1iKFNba10uaWRlbnRpZmllcixDLFRwLHRoaXMsYXJndW1lbnRzKSkmJihyTCgpLE8oInN0YXJ0IikpfX1mdW5jdGlvbiB5KCl7dmFyIFM9cXQuY2hhbmdlZFRvdWNoZXMsQz1TLmxlbmd0aCxQLGs7Zm9yKFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihPbSgpLGsoImRyYWciKSl9ZnVuY3Rpb24geCgpe3ZhciBTPXF0LmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2Zvcih1JiZjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsfSw1MDApLFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihyTCgpLGsoImVuZCIpKX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7dmFyIEQ9UChDLFMpLEIsSSxMLFI9by5jb3B5KCk7aWYoISFNcChuZXcgQ0UoZiwiYmVmb3Jlc3RhcnQiLEIsUyxhLERbMF0sRFsxXSwwLDAsUiksZnVuY3Rpb24oKXtyZXR1cm4ocXQuc3ViamVjdD1CPXIuYXBwbHkoayxPKSk9PW51bGw/ITE6KEk9Qi54LURbMF18fDAsTD1CLnktRFsxXXx8MCwhMCl9KSlyZXR1cm4gZnVuY3Rpb24gRih6KXt2YXIgVT1ELFc7c3dpdGNoKHope2Nhc2Uic3RhcnQiOmlbU109RixXPWErKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGlbU10sLS1hO2Nhc2UiZHJhZyI6RD1QKEMsUyksVz1hO2JyZWFrfU1wKG5ldyBDRShmLHosQixTLFcsRFswXStJLERbMV0rTCxEWzBdLVVbMF0sRFsxXS1VWzFdLFIpLFIuYXBwbHksUixbeixrLE9dKX19cmV0dXJuIGYuZmlsdGVyPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTplfSxmLmNvbnRhaW5lcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnR9LGYuc3ViamVjdD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnJ9LGYudG91Y2hhYmxlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTpufSxmLm9uPWZ1bmN0aW9uKCl7dmFyIFM9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIFM9PT1vP2Y6U30sZi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPShTPStTKSpTLGYpOk1hdGguc3FydChoKX0sZn1mdW5jdGlvbiBDcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gQm0oZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUmgoKXt9dmFyIEhtPS43LGJfPTEvSG0sZGI9IlxccyooWystXT9cXGQrKVxccyoiLEFFPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGtoPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixjd2U9L14jKFswLTlhLWZdezMsOH0pJC8sdXdlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tkYixkYixkYl0rIlxcKSQiKSxod2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2toLGtoLGtoXSsiXFwpJCIpLGZ3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2RiLGRiLGRiLEFFXSsiXFwpJCIpLHB3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2toLGtoLGtoLEFFXSsiXFwpJCIpLGR3ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbQUUsa2gsa2hdKyJcXCkkIiksbXdlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQUUsa2gsa2gsQUVdKyJcXCkkIiksY3l0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0NwKFJoLHJjLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OnV5dCxmb3JtYXRIZXg6dXl0LGZvcm1hdEhzbDpnd2UsZm9ybWF0UmdiOmh5dCx0b1N0cmluZzpoeXR9KTtmdW5jdGlvbiB1eXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBnd2UoKXtyZXR1cm4gZ3l0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGh5dCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHJjKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PWN3ZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2Z5dCh0KTpyPT09Mz9uZXcgS2kodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P25MKHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P25MKHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9dXdlLmV4ZWMoZSkpP25ldyBLaSh0WzFdLHRbMl0sdFszXSwxKToodD1od2UuZXhlYyhlKSk/bmV3IEtpKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PWZ3ZS5leGVjKGUpKT9uTCh0WzFdLHRbMl0sdFszXSx0WzRdKToodD1wd2UuZXhlYyhlKSk/bkwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9ZHdlLmV4ZWMoZSkpP215dCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PW13ZS5leGVjKGUpKT9teXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpjeXQuaGFzT3duUHJvcGVydHkoZSk/Znl0KGN5dFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IEtpKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gZnl0KGUpe3JldHVybiBuZXcgS2koZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIG5MKGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgS2koZSx0LHIsbil9ZnVuY3Rpb24gUEUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBSaHx8KGU9cmMoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgS2koZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IEtpfWZ1bmN0aW9uIGN1KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9QRShlKTpuZXcgS2koZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEtpKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcChLaSxjdSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgS2kodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IEtpKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6cHl0LGZvcm1hdEhleDpweXQsZm9ybWF0UmdiOmR5dCx0b1N0cmluZzpkeXR9KSk7ZnVuY3Rpb24gcHl0KCl7cmV0dXJuIiMiK1FXKHRoaXMucikrUVcodGhpcy5nKStRVyh0aGlzLmIpfWZ1bmN0aW9uIGR5dCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBRVyhlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBteXQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBMaChlLHQscixuKX1mdW5jdGlvbiBneXQoZSl7aWYoZSBpbnN0YW5jZW9mIExoKXJldHVybiBuZXcgTGgoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgUmh8fChlPXJjKGUpKSwhZSlyZXR1cm4gbmV3IExoO2lmKGUgaW5zdGFuY2VvZiBMaClyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBMaChhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIFZtKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9neXQoZSk6bmV3IExoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBMaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoTGgsVm0sQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgS2kodFkoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksdFkoZSxpLG4pLHRZKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpO2Z1bmN0aW9uIHRZKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBpTD1NYXRoLlBJLzE4MCxvTD0xODAvTWF0aC5QSTt2YXIgYUw9MTgsX3l0PS45NjQyMix5eXQ9MSx2eXQ9LjgyNTIxLHh5dD00LzI5LG1iPTYvMjksYnl0PTMqbWIqbWIsX3dlPW1iKm1iKm1iO2Z1bmN0aW9uIHd5dChlKXtpZihlIGluc3RhbmNlb2YgdXUpcmV0dXJuIG5ldyB1dShlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBOaClyZXR1cm4gVHl0KGUpO2UgaW5zdGFuY2VvZiBLaXx8KGU9UEUoZSkpO3ZhciB0PWlZKGUucikscj1pWShlLmcpLG49aVkoZS5iKSxpPWVZKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikveXl0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1lWSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL195dCksYT1lWSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL3Z5dCkpLG5ldyB1dSgxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gU3l0KGUsdCl7cmV0dXJuIG5ldyB1dShlLDAsMCx0PT1udWxsPzE6dCl9ZnVuY3Rpb24gd18oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3d5dChlKTpuZXcgdXUoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHV1KGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcCh1dSx3XyxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1dSh0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHV1KHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIHQ9X3l0KnJZKHQpLGU9eXl0KnJZKGUpLHI9dnl0KnJZKHIpLG5ldyBLaShuWSgzLjEzMzg1NjEqdC0xLjYxNjg2NjcqZS0uNDkwNjE0NipyKSxuWSgtLjk3ODc2ODQqdCsxLjkxNjE0MTUqZSsuMDMzNDU0KnIpLG5ZKC4wNzE5NDUzKnQtLjIyODk5MTQqZSsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gZVkoZSl7cmV0dXJuIGU+X3dlP01hdGgucG93KGUsMS8zKTplL2J5dCt4eXR9ZnVuY3Rpb24gclkoZSl7cmV0dXJuIGU+bWI/ZSplKmU6Ynl0KihlLXh5dCl9ZnVuY3Rpb24gblkoZSl7cmV0dXJuIDI1NSooZTw9LjAwMzEzMDg/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBpWShlKXtyZXR1cm4oZS89MjU1KTw9LjA0MDQ1P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBNeXQoZSl7aWYoZSBpbnN0YW5jZW9mIE5oKXJldHVybiBuZXcgTmgoZS5oLGUuYyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgdXV8fChlPXd5dChlKSksZS5hPT09MCYmZS5iPT09MClyZXR1cm4gbmV3IE5oKE5hTiwwPGUubCYmZS5sPDEwMD8wOk5hTixlLmwsZS5vcGFjaXR5KTt2YXIgdD1NYXRoLmF0YW4yKGUuYixlLmEpKm9MO3JldHVybiBuZXcgTmgodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksZS5sLGUub3BhY2l0eSl9ZnVuY3Rpb24gRXl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9NeXQoZSk6bmV3IE5oKHIsdCxlLG49PW51bGw/MTpuKX1mdW5jdGlvbiBnYihlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/TXl0KGUpOm5ldyBOaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gTmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFR5dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgdXUoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCppTDtyZXR1cm4gbmV3IHV1KGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9Q3AoTmgsZ2IsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTmgodGhpcy5oLHRoaXMuYyx0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOaCh0aGlzLmgsdGhpcy5jLHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBUeXQodGhpcykucmdiKCl9fSkpO3ZhciBJeXQ9LS4xNDg2MSxvWT0xLjc4Mjc3LGFZPS0uMjkyMjcsc0w9LS45MDY0OSxJRT0xLjk3Mjk0LEN5dD1JRSpzTCxBeXQ9SUUqb1ksUHl0PW9ZKmFZLXNMKkl5dDtmdW5jdGlvbiB5d2UoZSl7aWYoZSBpbnN0YW5jZW9mIFNfKXJldHVybiBuZXcgU18oZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgS2l8fChlPVBFKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oUHl0Km4rQ3l0KnQtQXl0KnIpLyhQeXQrQ3l0LUF5dCksbz1uLWksYT0oSUUqKHItaSktYVkqbykvc0wscz1NYXRoLnNxcnQoYSphK28qbykvKElFKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqb0wtMTIwOk5hTjtyZXR1cm4gbmV3IFNfKGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGxhKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT95d2UoZSk6bmV3IFNfKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBTXyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoU18sbGEsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSppTCx0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgS2koMjU1Kih0K3IqKEl5dCpuK29ZKmkpKSwyNTUqKHQrciooYVkqbitzTCppKSksMjU1Kih0K3IqKElFKm4pKSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBzWShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGxMKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBzWSgoci1uL3QpKnQsYSxpLG8scyl9fWZ1bmN0aW9uIGNMKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gc1koKHItbi90KSp0LGksbyxhLHMpfX1mdW5jdGlvbiBfYihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gTHl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gdndlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gVW0oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/THl0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpfYihpc05hTihlKT90OmUpfWZ1bmN0aW9uIGt5dChlKXtyZXR1cm4oZT0rZSk9PTE/S246ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P3Z3ZSh0LHIsZSk6X2IoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gS24oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/THl0KGUscik6X2IoaXNOYU4oZSk/dDplKX12YXIgcW09ZnVuY3Rpb24gZSh0KXt2YXIgcj1reXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9Y3UoaSkpLnIsKG89Y3UobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7ZnVuY3Rpb24gUnl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9Y3UodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHVMPVJ5dChsTCksTnl0PVJ5dChjTCk7ZnVuY3Rpb24geWIoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gaEwoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIER5dChlLHQpe3JldHVybihoTCh0KT95YjpsWSkoZSx0KX1mdW5jdGlvbiBsWShlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPW5jKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319ZnVuY3Rpb24gZkwoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fWZ1bmN0aW9uIHBMKGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bmMoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgdVk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGNZPW5ldyBSZWdFeHAodVkuc291cmNlLCJnIik7ZnVuY3Rpb24geHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBid2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiB2YihlLHQpe3ZhciByPXVZLmxhc3RJbmRleD1jWS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj11WS5leGVjKGUpKSYmKGk9Y1kuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnppKG4saSl9KSkscj1jWS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/YndlKGxbMF0ueCk6eHdlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIG5jKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9fYih0KToocj09PSJudW1iZXIiP3ppOnI9PT0ic3RyaW5nIj8obj1yYyh0KSk/KHQ9bixxbSk6dmI6dCBpbnN0YW5jZW9mIHJjP3FtOnQgaW5zdGFuY2VvZiBEYXRlP2ZMOmhMKHQpP3liOkFycmF5LmlzQXJyYXkodCk/bFk6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3BMOnppKShlLHQpfWZ1bmN0aW9uIE95dChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX1mdW5jdGlvbiB6eXQoZSx0KXt2YXIgcj1VbSgrZSwrdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXIobik7cmV0dXJuIGktMzYwKk1hdGguZmxvb3IoaS8zNjApfX1mdW5jdGlvbiBkTChlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQoZSooMS1yKSt0KnIpfX12YXIgRnl0PTE4MC9NYXRoLlBJLG1MPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGhZKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKkZ5dCxza2V3WDpNYXRoLmF0YW4obCkqRnl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgTEUsZlksQnl0LGdMO2Z1bmN0aW9uIEh5dChlKXtyZXR1cm4gZT09PSJub25lIj9tTDooTEV8fChMRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxmWT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQnl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMRS5zdHlsZS50cmFuc2Zvcm09ZSxlPUJ5dC5nZXRDb21wdXRlZFN0eWxlKGZZLmFwcGVuZENoaWxkKExFKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxmWS5yZW1vdmVDaGlsZChMRSksZT1lLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksaFkoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBWeXQoZSl7cmV0dXJuIGU9PW51bGw/bUw6KGdMfHwoZ0w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZ0wuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWdMLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LGhZKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6bUwpfWZ1bmN0aW9uIFV5dChlLHQscixuKXtmdW5jdGlvbiBpKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwscik7ZC5wdXNoKHtpOmctNCx4OnppKGMsaCl9LHtpOmctMix4OnppKHUsZil9KX1lbHNlKGh8fGYpJiZwLnB1c2goInRyYW5zbGF0ZSgiK2grdCtmK3IpfWZ1bmN0aW9uIGEoYyx1LGgsZil7YyE9PXU/KGMtdT4xODA/dSs9MzYwOnUtYz4xODAmJihjKz0zNjApLGYucHVzaCh7aTpoLnB1c2goaShoKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6emkoYyx1KX0pKTp1JiZoLnB1c2goaShoKSsicm90YXRlKCIrdStuKX1mdW5jdGlvbiBzKGMsdSxoLGYpe2MhPT11P2YucHVzaCh7aTpoLnB1c2goaShoKSsic2tld1goIixudWxsLG4pLTIseDp6aShjLHUpfSk6dSYmaC5wdXNoKGkoaCkrInNrZXdYKCIrdStuKX1mdW5jdGlvbiBsKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaChpKHApKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtkLnB1c2goe2k6Zy00LHg6emkoYyxoKX0se2k6Zy0yLHg6emkodSxmKX0pfWVsc2UoaCE9PTF8fGYhPT0xKSYmcC5wdXNoKGkocCkrInNjYWxlKCIraCsiLCIrZisiKSIpfXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBoPVtdLGY9W107cmV0dXJuIGM9ZShjKSx1PWUodSksbyhjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLHUudHJhbnNsYXRlWCx1LnRyYW5zbGF0ZVksaCxmKSxhKGMucm90YXRlLHUucm90YXRlLGgsZikscyhjLnNrZXdYLHUuc2tld1gsaCxmKSxsKGMuc2NhbGVYLGMuc2NhbGVZLHUuc2NhbGVYLHUuc2NhbGVZLGgsZiksYz11PW51bGwsZnVuY3Rpb24ocCl7Zm9yKHZhciBkPS0xLGc9Zi5sZW5ndGgsXzsrK2Q8ZzspaFsoXz1mW2RdKS5pXT1fLngocCk7cmV0dXJuIGguam9pbigiIil9fX12YXIgX0w9VXl0KEh5dCwicHgsICIsInB4KSIsImRlZykiKSx5TD1VeXQoVnl0LCIsICIsIikiLCIpIik7dmFyIGtFPU1hdGguU1FSVDIscFk9MixxeXQ9NCx3d2U9MWUtMTI7ZnVuY3Rpb24gR3l0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIFN3ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBNd2UoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIHZMKGUsdCl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLG89dFswXSxhPXRbMV0scz10WzJdLGw9by1yLGM9YS1uLHU9bCpsK2MqYyxoLGY7aWYodTx3d2UpZj1NYXRoLmxvZyhzL2kpL2tFLGg9ZnVuY3Rpb24oeCl7cmV0dXJuW3IreCpsLG4reCpjLGkqTWF0aC5leHAoa0UqeCpmKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1pKmkrcXl0KnUpLygyKmkqcFkqcCksZz0ocypzLWkqaS1xeXQqdSkvKDIqcypwWSpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykva0UsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1HeXQoXyksQz1pLyhwWSpwKSooUypNd2Uoa0UqYitfKS1Td2UoXykpO3JldHVybltyK0MqbCxuK0MqYyxpKlMvR3l0KGtFKmIrXyldfX1yZXR1cm4gaC5kdXJhdGlvbj1mKjFlMyxofWZ1bmN0aW9uIFd5dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVZtKHQpKS5oLChyPVZtKHIpKS5oKSxpPUtuKHQucyxyLnMpLG89S24odC5sLHIubCksYT1Lbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQucz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgWXl0PVd5dChVbSksanl0PVd5dChLbik7ZnVuY3Rpb24gTV8oZSx0KXt2YXIgcj1LbigoZT13XyhlKSkubCwodD13Xyh0KSkubCksbj1LbihlLmEsdC5hKSxpPUtuKGUuYix0LmIpLG89S24oZS5vcGFjaXR5LHQub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBlLmw9cihhKSxlLmE9bihhKSxlLmI9aShhKSxlLm9wYWNpdHk9byhhKSxlKyIifX1mdW5jdGlvbiBYeXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1nYih0KSkuaCwocj1nYihyKSkuaCksaT1Lbih0LmMsci5jKSxvPUtuKHQubCxyLmwpLGE9S24odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LmM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyICR5dD1YeXQoVW0pLEt5dD1YeXQoS24pO2Z1bmN0aW9uIFp5dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWxhKGkpKS5oLChvPWxhKG8pKS5oKSxzPUtuKGkucyxvLnMpLGw9S24oaS5sLG8ubCksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEp5dD1aeXQoVW0pLEVfPVp5dChLbik7ZnVuY3Rpb24gZFkoZSx0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10WzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT1lKGksaT10Wysrcl0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGEqPW4pKSk7cmV0dXJuIG9bc10oYS1zKX19ZnVuY3Rpb24gUXl0KGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobi8odC0xKSk7cmV0dXJuIHJ9a20oKTt2YXIgeGI9MCxORT0wLFJFPTAsZXZ0PTFlMyx4TCxERSxiTD0wLFRfPTAsd0w9MCxPRT10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxydnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07ZnVuY3Rpb24gQXAoKXtyZXR1cm4gVF98fChydnQoRXdlKSxUXz1PRS5ub3coKSt3TCl9ZnVuY3Rpb24gRXdlKCl7VF89MH1mdW5jdGlvbiBDXygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9Q18ucHJvdG90eXBlPUFfLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q18scmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP0FwKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZERSE9PXRoaXMmJihERT9ERS5fbmV4dD10aGlzOnhMPXRoaXMsREU9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixtWSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxtWSgpKX19O2Z1bmN0aW9uIEFfKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBnWSgpe0FwKCksKyt4Yjtmb3IodmFyIGU9eEwsdDtlOykodD1UXy1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0teGJ9ZnVuY3Rpb24gdHZ0KCl7VF89KGJMPU9FLm5vdygpKSt3TCx4Yj1ORT0wO3RyeXtnWSgpfWZpbmFsbHl7eGI9MCxDd2UoKSxUXz0wfX1mdW5jdGlvbiBUd2UoKXt2YXIgZT1PRS5ub3coKSx0PWUtYkw7dD5ldnQmJih3TC09dCxiTD1lKX1mdW5jdGlvbiBDd2UoKXtmb3IodmFyIGUsdD14TCxyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp4TD1yKTtERT1lLG1ZKG4pfWZ1bmN0aW9uIG1ZKGUpe2lmKCF4Yil7TkUmJihORT1jbGVhclRpbWVvdXQoTkUpKTt2YXIgdD1lLVRfO3Q+MjQ/KGU8MS8wJiYoTkU9c2V0VGltZW91dCh0dnQsZS1PRS5ub3coKS13TCkpLFJFJiYoUkU9Y2xlYXJJbnRlcnZhbChSRSkpKTooUkV8fChiTD1PRS5ub3coKSxSRT1zZXRJbnRlcnZhbChUd2UsZXZ0KSkseGI9MSxydnQodHZ0KSl9fWZ1bmN0aW9uIHpFKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn1mdW5jdGlvbiBudnQoZSx0LHIpe3ZhciBuPW5ldyBDXyxpPXQ7cmV0dXJuIHQ9PW51bGw/KG4ucmVzdGFydChlLHQsciksbik6KHQ9K3Qscj1yPT1udWxsP0FwKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIG8oYSl7YSs9aSxuLnJlc3RhcnQobyxpKz10LHIpLGUoYSl9LHQsciksbil9dmFyIEF3ZT12cygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxQd2U9W10sb3Z0PTAsTUw9MSxFTD0yLFNMPTMsaXZ0PTQsVEw9NSxGRT02O2Z1bmN0aW9uIEdtKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47SXdlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpBd2UsdHdlZW46UHdlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOm92dH0pfWZ1bmN0aW9uIEJFKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPm92dCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIE9hKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPlNMKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFppKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gSXdlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPUFfKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1NTCxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PU1MKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09U0wpcmV0dXJuIHpFKGEpO3Auc3RhdGU9PT1pdnQ/KHAuc3RhdGU9RkUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1GRSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHpFKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PVNMJiYoci5zdGF0ZT1pdnQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1FTCxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09RUwpe2ZvcihyLnN0YXRlPVNMLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVRMLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVRMJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9RkUsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gaHUoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+RUwmJm4uc3RhdGU8VEwsbi5zdGF0ZT1GRSxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGF2dChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aHUodGhpcyxlKX0pfWZ1bmN0aW9uIEx3ZShlLHQpe3ZhciByLG47cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9T2EodGhpcyxlKSxvPWkudHdlZW47aWYobyE9PXIpe249cj1vO2Zvcih2YXIgYT0wLHM9bi5sZW5ndGg7YTxzOysrYSlpZihuW2FdLm5hbWU9PT10KXtuPW4uc2xpY2UoKSxuLnNwbGljZShhLDEpO2JyZWFrfX1pLnR3ZWVuPW59fWZ1bmN0aW9uIGt3ZShlLHQscil7dmFyIG4saTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89T2EodGhpcyxlKSxhPW8udHdlZW47aWYoYSE9PW4pe2k9KG49YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6dCx2YWx1ZTpyfSxsPTAsYz1pLmxlbmd0aDtsPGM7KytsKWlmKGlbbF0ubmFtZT09PXQpe2lbbF09czticmVha31sPT09YyYmaS5wdXNoKHMpfW8udHdlZW49aX19ZnVuY3Rpb24gc3Z0KGUsdCl7dmFyIHI9dGhpcy5faWQ7aWYoZSs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WmkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLG89bi5sZW5ndGgsYTtpPG87KytpKWlmKChhPW5baV0pLm5hbWU9PT1lKXJldHVybiBhLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/THdlOmt3ZSkocixlLHQpKX1mdW5jdGlvbiBiYihlLHQscil7dmFyIG49ZS5faWQ7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciBpPU9hKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbdF09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gWmkoaSxuKS52YWx1ZVt0XX19ZnVuY3Rpb24gQ0woZSx0KXt2YXIgcjtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3ppOnQgaW5zdGFuY2VvZiByYz9xbToocj1yYyh0KSk/KHQ9cixxbSk6dmIpKGUsdCl9ZnVuY3Rpb24gUndlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBOd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBEd2UoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gT3dlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiB6d2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBGd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGx2dChlLHQpe3ZhciByPVBoKGUpLG49cj09PSJ0cmFuc2Zvcm0iP3lMOkNMO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP0Z3ZTp6d2UpKHIsbixiYih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9Od2U6UndlKShyKTooci5sb2NhbD9Pd2U6RHdlKShyLG4sdCkpfWZ1bmN0aW9uIEJ3ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gSHdlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gVndlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmSHdlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBVd2UoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZCd2UoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIGN2dChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49UGgoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9Wd2U6VXdlKShuLHQpKX1mdW5jdGlvbiBxd2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gR3dlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PXR9fWZ1bmN0aW9uIHV2dChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP3F3ZTpHd2UpKHQsZSkpOlppKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIFd3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBZd2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gaHZ0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/V3dlOll3ZSkodCxlKSk6WmkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259ZnVuY3Rpb24gandlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBmdnQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGp3ZSh0LGUpKTpaaSh0aGlzLm5vZGUoKSx0KS5lYXNlfWZ1bmN0aW9uIHB2dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dWIoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBkdnQoZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IEZvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYd2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiAkd2UoZSx0LHIpe3ZhciBuLGksbz1Yd2UodCk/QkU6T2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gbXZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9aaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goJHdlKHIsZSx0KSl9ZnVuY3Rpb24gS3dlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBndnQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsS3dlKHRoaXMuX2lkKSl9ZnVuY3Rpb24gX3Z0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Tm0oZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHbShjW2ZdLHQscixmLGMsWmkodSxyKSkpO3JldHVybiBuZXcgRm8obyx0aGlzLl9wYXJlbnRzLHQscil9ZnVuY3Rpb24geXZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Y2IoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9WmkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZHbShwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IEZvKG8sYSx0LHIpfXZhciBad2U9SWgucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIHZ2dCgpe3JldHVybiBuZXcgWndlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBKd2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89U3AodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFNwKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24geHZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFF3ZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9U3AodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIHRTZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVNwKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxTcCh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBlU2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1PYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9eHZ0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gYnZ0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9fTDpDTDtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxKd2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UseHZ0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSx0U2UoZSxuLGJiKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goZVNlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxRd2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfWZ1bmN0aW9uIHJTZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gblNlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZyU2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24gd3Z0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLG5TZShlLHQscj09bnVsbD8iIjpyKSl9ZnVuY3Rpb24gaVNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gb1NlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFN2dChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/b1NlKGJiKHRoaXMsInRleHQiLGUpKTppU2UoZT09bnVsbD8iIjplKyIiKSl9ZnVuY3Rpb24gYVNlKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PWUuY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBzU2UoZSl7dmFyIHQscjtmdW5jdGlvbiBuKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYodD0ocj1pKSYmYVNlKGkpKSx0fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24gTXZ0KGUpe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxzU2UoZSkpfWZ1bmN0aW9uIEV2dCgpe2Zvcih2YXIgZT10aGlzLl9uYW1lLHQ9dGhpcy5faWQscj1BTCgpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKWlmKGw9YVtjXSl7dmFyIHU9WmkobCx0KTtHbShsLGUscixjLGEse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyxlLHIpfWZ1bmN0aW9uIFR2dCgpe3ZhciBlLHQscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXstLWk9PT0wJiZvKCl9fTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1PYSh0aGlzLG4pLHU9Yy5vbjt1IT09ZSYmKHQ9KGU9dSkuY29weSgpLHQuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfXZhciBsU2U9MDtmdW5jdGlvbiBGbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gUEwoZSl7cmV0dXJuIEloKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBBTCgpe3JldHVybisrbFNlfXZhciB3Yj1JaC5wcm90b3R5cGU7Rm8ucHJvdG90eXBlPVBMLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Rm8sc2VsZWN0Ol92dCxzZWxlY3RBbGw6eXZ0LGZpbHRlcjpwdnQsbWVyZ2U6ZHZ0LHNlbGVjdGlvbjp2dnQsdHJhbnNpdGlvbjpFdnQsY2FsbDp3Yi5jYWxsLG5vZGVzOndiLm5vZGVzLG5vZGU6d2Iubm9kZSxzaXplOndiLnNpemUsZW1wdHk6d2IuZW1wdHksZWFjaDp3Yi5lYWNoLG9uOm12dCxhdHRyOmx2dCxhdHRyVHdlZW46Y3Z0LHN0eWxlOmJ2dCxzdHlsZVR3ZWVuOnd2dCx0ZXh0OlN2dCx0ZXh0VHdlZW46TXZ0LHJlbW92ZTpndnQsdHdlZW46c3Z0LGRlbGF5OnV2dCxkdXJhdGlvbjpodnQsZWFzZTpmdnQsZW5kOlR2dH07SV8oKTt2YXIgVVk9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfTtmdW5jdGlvbiBfU2UoZSx0KXtmb3IodmFyIHI7IShyPWUuX190cmFuc2l0aW9uKXx8IShyPXJbdF0pOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gVVkudGltZT1BcCgpLFVZO3JldHVybiByfWZ1bmN0aW9uIEh2dChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBGbz8odD1lLl9pZCxlPWUuX25hbWUpOih0PUFMKCksKHI9VVkpLnRpbWU9QXAoKSxlPWU9PW51bGw/bnVsbDplKyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiZHbShsLGUsdCxjLGEscnx8X1NlKGwsdCkpO3JldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLGUsdCl9SWgucHJvdG90eXBlLmludGVycnVwdD1hdnQ7SWgucHJvdG90eXBlLnRyYW5zaXRpb249SHZ0O3ZhciB5U2U9W251bGxdO2Z1bmN0aW9uIFZ2dChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+TUwmJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBGbyhbW2VdXSx5U2UsdCwraSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRkwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFV2dChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfWZ1bmN0aW9uIHFZKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gQkwoKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBxdnQ9e25hbWU6ImRyYWcifSxHWT17bmFtZToic3BhY2UifSxNYj17bmFtZToiaGFuZGxlIn0sRWI9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIEd2dChlKXtyZXR1cm5bK2VbMF0sK2VbMV1dfWZ1bmN0aW9uIFlZKGUpe3JldHVybltHdnQoZVswXSksR3Z0KGVbMV0pXX1mdW5jdGlvbiB2U2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBUcCh0LHF0LnRvdWNoZXMsZSl9fXZhciBITD17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKEhFKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP251bGw6W1srZVswXSx0WzBdWzFdXSxbK2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sVkw9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChIRSksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbD9udWxsOltbdFswXVswXSwrZVswXV0sW3RbMV1bMF0sK2VbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LHhTZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAoSEUpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6WVkoZSl9LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LFBwPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxXdnQ9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LFl2dD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sYlNlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHdTZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBIRShlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBTU2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBNU2UoKXt2YXIgZT10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT8oZT1lLnZpZXdCb3guYmFzZVZhbCxbW2UueCxlLnldLFtlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdXSk6W1swLDBdLFtlLndpZHRoLmJhc2VWYWwudmFsdWUsZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIEVTZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBXWShlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIFRTZShlKXtyZXR1cm4gZVswXVswXT09PWVbMV1bMF18fGVbMF1bMV09PT1lWzFdWzFdfWZ1bmN0aW9uIFVMKGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24ganZ0KCl7cmV0dXJuIGpZKEhMKX1mdW5jdGlvbiBxTCgpe3JldHVybiBqWShWTCl9ZnVuY3Rpb24gR0woKXtyZXR1cm4galkoeFNlKX1mdW5jdGlvbiBqWShlKXt2YXIgdD1NU2Uscj1TU2Usbj1FU2UsaT0hMCxvPXZzKCJzdGFydCIsImJydXNoIiwiZW5kIiksYT02LHM7ZnVuY3Rpb24gbChfKXt2YXIgeT1fLnByb3BlcnR5KCJfX2JydXNoIixnKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbSEUoIm92ZXJsYXkiKV0pO3kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSkubWVyZ2UoeSkuZWFjaChmdW5jdGlvbigpe3ZhciBiPVdZKHRoaXMpLmV4dGVudDtIdCh0aGlzKS5hdHRyKCJ4IixiWzBdWzBdKS5hdHRyKCJ5IixiWzBdWzFdKS5hdHRyKCJ3aWR0aCIsYlsxXVswXS1iWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGJbMV1bMV0tYlswXVsxXSl9KSxfLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0hFKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciB4PV8uc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YShlLmhhbmRsZXMsZnVuY3Rpb24oYil7cmV0dXJuIGIudHlwZX0pO3guZXhpdCgpLnJlbW92ZSgpLHguZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYil7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrYi50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbihiKXtyZXR1cm4gUHBbYi50eXBlXX0pLF8uZWFjaChjKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGQpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1sLm1vdmU9ZnVuY3Rpb24oXyx5KXtfLnNlbGVjdGlvbj9fLm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgeD10aGlzLGI9eC5fX2JydXNoLFM9dSh4LGFyZ3VtZW50cyksQz1iLnNlbGVjdGlvbixQPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eSxiLmV4dGVudCksaz1uYyhDLFApO2Z1bmN0aW9uIE8oRCl7Yi5zZWxlY3Rpb249RD09PTEmJlA9PT1udWxsP251bGw6ayhEKSxjLmNhbGwoeCksUy5icnVzaCgpfXJldHVybiBDIT09bnVsbCYmUCE9PW51bGw/TzpPKDEpfSk6Xy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxiPWFyZ3VtZW50cyxTPXguX19icnVzaCxDPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh4LGIpOnksUy5leHRlbnQpLFA9dSh4LGIpLmJlZm9yZXN0YXJ0KCk7aHUoeCksUy5zZWxlY3Rpb249Qz09PW51bGw/bnVsbDpDLGMuY2FsbCh4KSxQLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLmNsZWFyPWZ1bmN0aW9uKF8pe2wubW92ZShfLG51bGwpfTtmdW5jdGlvbiBjKCl7dmFyIF89SHQodGhpcykseT1XWSh0aGlzKS5zZWxlY3Rpb247eT8oXy5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIseVswXVswXSkuYXR0cigieSIseVswXVsxXSkuYXR0cigid2lkdGgiLHlbMV1bMF0teVswXVswXSkuYXR0cigiaGVpZ2h0Iix5WzFdWzFdLXlbMF1bMV0pLF8uc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbeC50eXBlLmxlbmd0aC0xXT09PSJlIj95WzFdWzBdLWEvMjp5WzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbMF09PT0icyI/eVsxXVsxXS1hLzI6eVswXVsxXS1hLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZT09PSJuInx8eC50eXBlPT09InMiP3lbMV1bMF0teVswXVswXSthOmF9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGU9PT0iZSJ8fHgudHlwZT09PSJ3Ij95WzFdWzFdLXlbMF1bMV0rYTphfSkpOl8uc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KF8seSx4KXt2YXIgYj1fLl9fYnJ1c2guZW1pdHRlcjtyZXR1cm4gYiYmKCF4fHwhYi5jbGVhbik/YjpuZXcgaChfLHkseCl9ZnVuY3Rpb24gaChfLHkseCl7dGhpcy50aGF0PV8sdGhpcy5hcmdzPXksdGhpcy5zdGF0ZT1fLl9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPXh9aC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihfKXtNcChuZXcgVXZ0KGwsXyxlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbXyx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBmKCl7aWYocyYmIXF0LnRvdWNoZXN8fCFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIF89dGhpcyx5PXF0LnRhcmdldC5fX2RhdGFfXy50eXBlLHg9KGkmJnF0Lm1ldGFLZXk/eT0ib3ZlcmxheSI6eSk9PT0ic2VsZWN0aW9uIj9xdnQ6aSYmcXQuYWx0S2V5P0ViOk1iLGI9ZT09PVZMP251bGw6YlNlW3ldLFM9ZT09PUhMP251bGw6d1NlW3ldLEM9V1koXyksUD1DLmV4dGVudCxrPUMuc2VsZWN0aW9uLE89UFswXVswXSxELEIsST1QWzBdWzFdLEwsUixGPVBbMV1bMF0seixVLFc9UFsxXVsxXSxaLHJ0LG90PTAsc3Q9MCxTdCxidD1iJiZTJiZpJiZxdC5zaGlmdEtleSxNdCxsdCxLdD1xdC50b3VjaGVzP3ZTZShxdC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTp6byxfdD1LdChfKSxjdD1fdCxYPXUoXyxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7eT09PSJvdmVybGF5Ij8oayYmKFN0PSEwKSxDLnNlbGVjdGlvbj1rPVtbRD1lPT09Vkw/TzpfdFswXSxMPWU9PT1ITD9JOl90WzFdXSxbej1lPT09Vkw/RjpELFo9ZT09PUhMP1c6TF1dKTooRD1rWzBdWzBdLEw9a1swXVsxXSx6PWtbMV1bMF0sWj1rWzFdWzFdKSxCPUQsUj1MLFU9eixydD1aO3ZhciBldD1IdChfKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxkdD1ldC5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixQcFt5XSk7aWYocXQudG91Y2hlcylYLm1vdmVkPXB0LFguZW5kZWQ9d3Q7ZWxzZXt2YXIgcT1IdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixwdCwhMCkub24oIm1vdXNldXAuYnJ1c2giLHd0LCEwKTtpJiZxLm9uKCJrZXlkb3duLmJydXNoIixrdCwhMCkub24oImtleXVwLmJydXNoIixpZSwhMCksem0ocXQudmlldyl9cVkoKSxodShfKSxjLmNhbGwoXyksWC5zdGFydCgpO2Z1bmN0aW9uIHB0KCl7dmFyIGVlPUt0KF8pO2J0JiYhTXQmJiFsdCYmKE1hdGguYWJzKGVlWzBdLWN0WzBdKT5NYXRoLmFicyhlZVsxXS1jdFsxXSk/bHQ9ITA6TXQ9ITApLGN0PWVlLFN0PSEwLEJMKCksaHQoKX1mdW5jdGlvbiBodCgpe3ZhciBlZTtzd2l0Y2gob3Q9Y3RbMF0tX3RbMF0sc3Q9Y3RbMV0tX3RbMV0seCl7Y2FzZSBHWTpjYXNlIHF2dDp7YiYmKG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLXosb3QpKSxCPUQrb3QsVT16K290KSxTJiYoc3Q9TWF0aC5tYXgoSS1MLE1hdGgubWluKFctWixzdCkpLFI9TCtzdCxydD1aK3N0KTticmVha31jYXNlIE1iOntiPDA/KG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLUQsb3QpKSxCPUQrb3QsVT16KTpiPjAmJihvdD1NYXRoLm1heChPLXosTWF0aC5taW4oRi16LG90KSksQj1ELFU9eitvdCksUzwwPyhzdD1NYXRoLm1heChJLUwsTWF0aC5taW4oVy1MLHN0KSksUj1MK3N0LHJ0PVopOlM+MCYmKHN0PU1hdGgubWF4KEktWixNYXRoLm1pbihXLVosc3QpKSxSPUwscnQ9WitzdCk7YnJlYWt9Y2FzZSBFYjp7YiYmKEI9TWF0aC5tYXgoTyxNYXRoLm1pbihGLEQtb3QqYikpLFU9TWF0aC5tYXgoTyxNYXRoLm1pbihGLHorb3QqYikpKSxTJiYoUj1NYXRoLm1heChJLE1hdGgubWluKFcsTC1zdCpTKSkscnQ9TWF0aC5tYXgoSSxNYXRoLm1pbihXLForc3QqUykpKTticmVha319VTxCJiYoYio9LTEsZWU9RCxEPXosej1lZSxlZT1CLEI9VSxVPWVlLHkgaW4gV3Z0JiZkdC5hdHRyKCJjdXJzb3IiLFBwW3k9V3Z0W3ldXSkpLHJ0PFImJihTKj0tMSxlZT1MLEw9WixaPWVlLGVlPVIsUj1ydCxydD1lZSx5IGluIFl2dCYmZHQuYXR0cigiY3Vyc29yIixQcFt5PVl2dFt5XV0pKSxDLnNlbGVjdGlvbiYmKGs9Qy5zZWxlY3Rpb24pLE10JiYoQj1rWzBdWzBdLFU9a1sxXVswXSksbHQmJihSPWtbMF1bMV0scnQ9a1sxXVsxXSksKGtbMF1bMF0hPT1CfHxrWzBdWzFdIT09Unx8a1sxXVswXSE9PVV8fGtbMV1bMV0hPT1ydCkmJihDLnNlbGVjdGlvbj1bW0IsUl0sW1UscnRdXSxjLmNhbGwoXyksWC5icnVzaCgpKX1mdW5jdGlvbiB3dCgpe2lmKHFZKCkscXQudG91Y2hlcyl7aWYocXQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO3MmJmNsZWFyVGltZW91dChzKSxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGx9LDUwMCl9ZWxzZSBGbShxdC52aWV3LFN0KSxxLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtldC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGR0LmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSksQy5zZWxlY3Rpb24mJihrPUMuc2VsZWN0aW9uKSxUU2UoaykmJihDLnNlbGVjdGlvbj1udWxsLGMuY2FsbChfKSksWC5lbmQoKX1mdW5jdGlvbiBrdCgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidD1iJiZTO2JyZWFrfWNhc2UgMTg6e3g9PT1NYiYmKGImJih6PVUtb3QqYixEPUIrb3QqYiksUyYmKFo9cnQtc3QqUyxMPVIrc3QqUykseD1FYixodCgpKTticmVha31jYXNlIDMyOnsoeD09PU1ifHx4PT09RWIpJiYoYjwwP3o9VS1vdDpiPjAmJihEPUItb3QpLFM8MD9aPXJ0LXN0OlM+MCYmKEw9Ui1zdCkseD1HWSxkdC5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbiksaHQoKSk7YnJlYWt9ZGVmYXVsdDpyZXR1cm59QkwoKX1mdW5jdGlvbiBpZSgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidCYmKE10PWx0PWJ0PSExLGh0KCkpO2JyZWFrfWNhc2UgMTg6e3g9PT1FYiYmKGI8MD96PVU6Yj4wJiYoRD1CKSxTPDA/Wj1ydDpTPjAmJihMPVIpLHg9TWIsaHQoKSk7YnJlYWt9Y2FzZSAzMjp7eD09PUdZJiYocXQuYWx0S2V5PyhiJiYoej1VLW90KmIsRD1CK290KmIpLFMmJihaPXJ0LXN0KlMsTD1SK3N0KlMpLHg9RWIpOihiPDA/ej1VOmI+MCYmKEQ9QiksUzwwP1o9cnQ6Uz4wJiYoTD1SKSx4PU1iKSxkdC5hdHRyKCJjdXJzb3IiLFBwW3ldKSxodCgpKTticmVha31kZWZhdWx0OnJldHVybn1CTCgpfX1mdW5jdGlvbiBwKCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBkKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBnKCl7dmFyIF89dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBfLmV4dGVudD1ZWSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksXy5kaW09ZSxffXJldHVybiBsLmV4dGVudD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKFlZKF8pKSxsKTp0fSxsLmZpbHRlcj1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKCEhXyksbCk6cn0sbC50b3VjaGFibGU9ZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIF89PSJmdW5jdGlvbiI/XzpGTCghIV8pLGwpOm59LGwuaGFuZGxlU2l6ZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rXyxsKTphfSxsLmtleU1vZGlmaWVycz1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIV8sbCk6aX0sbC5vbj1mdW5jdGlvbigpe3ZhciBfPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBfPT09bz9sOl99LGx9dmFyIFhZPU1hdGguY29zLCRZPU1hdGguc2luLFh2dD1NYXRoLlBJLFZFPVh2dC8yLEtZPVh2dCoyLFpZPU1hdGgubWF4O2Z1bmN0aW9uIENTZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSxyLnNvdXJjZS52YWx1ZStyLnRhcmdldC52YWx1ZSl9fWZ1bmN0aW9uICR2dCgpe3ZhciBlPTAsdD1udWxsLHI9bnVsbCxuPW51bGw7ZnVuY3Rpb24gaShvKXt2YXIgYT1vLmxlbmd0aCxzPVtdLGw9SXIoYSksYz1bXSx1PVtdLGg9dS5ncm91cHM9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEqYSkscCxkLGcsXyx5LHg7Zm9yKHA9MCx5PS0xOysreTxhOyl7Zm9yKGQ9MCx4PS0xOysreDxhOylkKz1vW3ldW3hdO3MucHVzaChkKSxjLnB1c2goSXIoYSkpLHArPWR9Zm9yKHQmJmwuc29ydChmdW5jdGlvbihCLEkpe3JldHVybiB0KHNbQl0sc1tJXSl9KSxyJiZjLmZvckVhY2goZnVuY3Rpb24oQixJKXtCLnNvcnQoZnVuY3Rpb24oTCxSKXtyZXR1cm4gcihvW0ldW0xdLG9bSV1bUl0pfSl9KSxwPVpZKDAsS1ktZSphKS9wLF89cD9lOktZL2EsZD0wLHk9LTE7Kyt5PGE7KXtmb3IoZz1kLHg9LTE7Kyt4PGE7KXt2YXIgYj1sW3ldLFM9Y1tiXVt4XSxDPW9bYl1bU10sUD1kLGs9ZCs9QypwO2ZbUyphK2JdPXtpbmRleDpiLHN1YmluZGV4OlMsc3RhcnRBbmdsZTpQLGVuZEFuZ2xlOmssdmFsdWU6Q319aFtiXT17aW5kZXg6YixzdGFydEFuZ2xlOmcsZW5kQW5nbGU6ZCx2YWx1ZTpzW2JdfSxkKz1ffWZvcih5PS0xOysreTxhOylmb3IoeD15LTE7Kyt4PGE7KXt2YXIgTz1mW3gqYSt5XSxEPWZbeSphK3hdOyhPLnZhbHVlfHxELnZhbHVlKSYmdS5wdXNoKE8udmFsdWU8RC52YWx1ZT97c291cmNlOkQsdGFyZ2V0Ok99Ontzb3VyY2U6Tyx0YXJnZXQ6RH0pfXJldHVybiBuP3Uuc29ydChuKTp1fXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpZKDAsbyksaSk6ZX0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW8saSk6dH0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8saSk6cn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPT1udWxsP249bnVsbDoobj1DU2UobykpLl89byxpKTpuJiZuLl99LGl9dmFyIEt2dD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gV0woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBKWT1NYXRoLlBJLFFZPTIqSlksTF89MWUtNixBU2U9UVktTF87ZnVuY3Rpb24gdGooKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBadnQoKXtyZXR1cm4gbmV3IHRqfXRqLnByb3RvdHlwZT1adnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0aixtb3ZlVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iUSIrICtlKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuXys9IkMiKyArZSsiLCIrICt0KyIsIisgK3IrIiwiKyArbisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24oZSx0LHIsbixpKXtlPStlLHQ9K3Qscj0rcixuPStuLGk9K2k7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPXItZSxsPW4tdCxjPW8tZSx1PWEtdCxoPWMqYyt1KnU7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKGg+TF8paWYoIShNYXRoLmFicyh1KnMtbCpjKT5MXyl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2V7dmFyIGY9ci1vLHA9bi1hLGQ9cypzK2wqbCxnPWYqZitwKnAsXz1NYXRoLnNxcnQoZCkseT1NYXRoLnNxcnQoaCkseD1pKk1hdGgudGFuKChKWS1NYXRoLmFjb3MoKGQraC1nKS8oMipfKnkpKSkvMiksYj14L3ksUz14L187TWF0aC5hYnMoYi0xKT5MXyYmKHRoaXMuXys9IkwiKyhlK2IqYykrIiwiKyh0K2IqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+YypwKSsiLCIrKHRoaXMuX3gxPWUrUypzKSsiLCIrKHRoaXMuX3kxPXQrUypsKX19LGFyYzpmdW5jdGlvbihlLHQscixuLGksbyl7ZT0rZSx0PSt0LHI9K3Isbz0hIW87dmFyIGE9cipNYXRoLmNvcyhuKSxzPXIqTWF0aC5zaW4obiksbD1lK2EsYz10K3MsdT0xXm8saD1vP24taTppLW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT5MX3x8TWF0aC5hYnModGhpcy5feTEtYyk+TF8pJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksciYmKGg8MCYmKGg9aCVRWStRWSksaD5BU2U/dGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyhlLWEpKyIsIisodC1zKSsiQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+TF8mJih0aGlzLl8rPSJBIityKyIsIityKyIsMCwiKyArKGg+PUpZKSsiLCIrdSsiLCIrKHRoaXMuX3gxPWUrcipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT10K3IqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGJzPVp2dDtmdW5jdGlvbiBQU2UoZSl7cmV0dXJuIGUuc291cmNlfWZ1bmN0aW9uIElTZShlKXtyZXR1cm4gZS50YXJnZXR9ZnVuY3Rpb24gTFNlKGUpe3JldHVybiBlLnJhZGl1c31mdW5jdGlvbiBrU2UoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiBSU2UoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24gSnZ0KCl7dmFyIGU9UFNlLHQ9SVNlLHI9TFNlLG49a1NlLGk9UlNlLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1LdnQuY2FsbChhcmd1bWVudHMpLGM9ZS5hcHBseSh0aGlzLGwpLHU9dC5hcHBseSh0aGlzLGwpLGg9K3IuYXBwbHkodGhpcywobFswXT1jLGwpKSxmPW4uYXBwbHkodGhpcyxsKS1WRSxwPWkuYXBwbHkodGhpcyxsKS1WRSxkPWgqWFkoZiksZz1oKiRZKGYpLF89K3IuYXBwbHkodGhpcywobFswXT11LGwpKSx5PW4uYXBwbHkodGhpcyxsKS1WRSx4PWkuYXBwbHkodGhpcyxsKS1WRTtpZihvfHwobz1zPWJzKCkpLG8ubW92ZVRvKGQsZyksby5hcmMoMCwwLGgsZixwKSwoZiE9PXl8fHAhPT14KSYmKG8ucXVhZHJhdGljQ3VydmVUbygwLDAsXypYWSh5KSxfKiRZKHkpKSxvLmFyYygwLDAsXyx5LHgpKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQsZyksby5jbG9zZVBhdGgoKSxzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6V0woK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6aX0sYS5zb3VyY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cyxhKTplfSxhLnRhcmdldD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfVRiKCk7dmFyIE9TZT1BcnJheS5wcm90b3R5cGUsS0w9T1NlLnNsaWNlO2Z1bmN0aW9uIGYxdChlLHQpe3JldHVybiBlLXR9ZnVuY3Rpb24gcDF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgsbj1lW3ItMV1bMV0qZVswXVswXS1lW3ItMV1bMF0qZVswXVsxXTsrK3Q8cjspbis9ZVt0LTFdWzFdKmVbdF1bMF0tZVt0LTFdWzBdKmVbdF1bMV07cmV0dXJuIG59ZnVuY3Rpb24gT2goZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGQxdChlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk7KytyPG47KWlmKGk9elNlKGUsdFtyXSkpcmV0dXJuIGk7cmV0dXJuIDB9ZnVuY3Rpb24gelNlKGUsdCl7Zm9yKHZhciByPXRbMF0sbj10WzFdLGk9LTEsbz0wLGE9ZS5sZW5ndGgscz1hLTE7bzxhO3M9bysrKXt2YXIgbD1lW29dLGM9bFswXSx1PWxbMV0saD1lW3NdLGY9aFswXSxwPWhbMV07aWYoRlNlKGwsaCx0KSlyZXR1cm4gMDt1Pm4hPXA+biYmcjwoZi1jKSoobi11KS8ocC11KStjJiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gRlNlKGUsdCxyKXt2YXIgbjtyZXR1cm4gQlNlKGUsdCxyKSYmSFNlKGVbbj0rKGVbMF09PT10WzBdKV0scltuXSx0W25dKX1mdW5jdGlvbiBCU2UoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pPT09KHJbMF0tZVswXSkqKHRbMV0tZVsxXSl9ZnVuY3Rpb24gSFNlKGUsdCxyKXtyZXR1cm4gZTw9dCYmdDw9cnx8cjw9dCYmdDw9ZX1mdW5jdGlvbiBtMXQoKXt9dmFyIElwPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gWkwoKXt2YXIgZT0xLHQ9MSxyPXNiLG49bDtmdW5jdGlvbiBpKGMpe3ZhciB1PXIoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl1PXUuc2xpY2UoKS5zb3J0KGYxdCk7ZWxzZXt2YXIgaD1hYShjKSxmPWhbMF0scD1oWzFdO3U9dGwoZixwLHUpLHU9SXIoTWF0aC5mbG9vcihmL3UpKnUsTWF0aC5mbG9vcihwL3UpKnUsdSl9cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBvKGMsZCl9KX1mdW5jdGlvbiBvKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYShjLHUsZnVuY3Rpb24ocCl7bihwLGMsdSkscDF0KHApPjA/aC5wdXNoKFtwXSk6Zi5wdXNoKHApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0wLGc9aC5sZW5ndGgsXztkPGc7KytkKWlmKGQxdCgoXz1oW2RdKVswXSxwKSE9PS0xKXtfLnB1c2gocCk7cmV0dXJufX0pLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOnUsY29vcmRpbmF0ZXM6aH19ZnVuY3Rpb24gYShjLHUsaCl7dmFyIGY9bmV3IEFycmF5LHA9bmV3IEFycmF5LGQsZyxfLHkseCxiO2ZvcihkPWc9LTEseT1jWzBdPj11LElwW3k8PDFdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tkKzFdPj11LElwW198eTw8MV0uZm9yRWFjaChTKTtmb3IoSXBbeTw8MF0uZm9yRWFjaChTKTsrK2c8dC0xOyl7Zm9yKGQ9LTEseT1jW2cqZStlXT49dSx4PWNbZyplXT49dSxJcFt5PDwxfHg8PDJdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tnKmUrZStkKzFdPj11LGI9eCx4PWNbZyplK2QrMV0+PXUsSXBbX3x5PDwxfHg8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt5fHg8PDNdLmZvckVhY2goUyl9Zm9yKGQ9LTEseD1jW2cqZV0+PXUsSXBbeDw8Ml0uZm9yRWFjaChTKTsrK2Q8ZS0xOyliPXgseD1jW2cqZStkKzFdPj11LElwW3g8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt4PDwzXS5mb3JFYWNoKFMpO2Z1bmN0aW9uIFMoQyl7dmFyIFA9W0NbMF1bMF0rZCxDWzBdWzFdK2ddLGs9W0NbMV1bMF0rZCxDWzFdWzFdK2ddLE89cyhQKSxEPXMoayksQixJOyhCPXBbT10pPyhJPWZbRF0pPyhkZWxldGUgcFtCLmVuZF0sZGVsZXRlIGZbSS5zdGFydF0sQj09PUk/KEIucmluZy5wdXNoKGspLGgoQi5yaW5nKSk6ZltCLnN0YXJ0XT1wW0kuZW5kXT17c3RhcnQ6Qi5zdGFydCxlbmQ6SS5lbmQscmluZzpCLnJpbmcuY29uY2F0KEkucmluZyl9KTooZGVsZXRlIHBbQi5lbmRdLEIucmluZy5wdXNoKGspLHBbQi5lbmQ9RF09Qik6KEI9ZltEXSk/KEk9cFtPXSk/KGRlbGV0ZSBmW0Iuc3RhcnRdLGRlbGV0ZSBwW0kuZW5kXSxCPT09ST8oQi5yaW5nLnB1c2goayksaChCLnJpbmcpKTpmW0kuc3RhcnRdPXBbQi5lbmRdPXtzdGFydDpJLnN0YXJ0LGVuZDpCLmVuZCxyaW5nOkkucmluZy5jb25jYXQoQi5yaW5nKX0pOihkZWxldGUgZltCLnN0YXJ0XSxCLnJpbmcudW5zaGlmdChQKSxmW0Iuc3RhcnQ9T109Qik6ZltPXT1wW0RdPXtzdGFydDpPLGVuZDpELHJpbmc6W1Asa119fX1mdW5jdGlvbiBzKGMpe3JldHVybiBjWzBdKjIrY1sxXSooZSsxKSo0fWZ1bmN0aW9uIGwoYyx1LGgpe2MuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mWzBdLGQ9ZlsxXSxnPXB8MCxfPWR8MCx5LHg9dVtfKmUrZ107cD4wJiZwPGUmJmc9PT1wJiYoeT11W18qZStnLTFdLGZbMF09cCsoaC15KS8oeC15KS0uNSksZD4wJiZkPHQmJl89PT1kJiYoeT11WyhfLTEpKmUrZ10sZlsxXT1kKyhoLXkpLyh4LXkpLS41KX0pfXJldHVybiBpLmNvbnRvdXI9byxpLnNpemU9ZnVuY3Rpb24oYyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW2UsdF07dmFyIHU9TWF0aC5jZWlsKGNbMF0pLGg9TWF0aC5jZWlsKGNbMV0pO2lmKCEodT4wKXx8IShoPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIGU9dSx0PWgsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6QXJyYXkuaXNBcnJheShjKT9PaChLTC5jYWxsKGMpKTpPaChjKSxpKTpyfSxpLnNtb290aD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jP2w6bTF0LGkpOm49PT1sfSxpfWZ1bmN0aW9uIEpMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsbD0wO3M8bityOysrcylzPG4mJihsKz1lLmRhdGFbcythKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVtzLW8rYSpuXSksdC5kYXRhW3MtcithKm5dPWwvTWF0aC5taW4ocysxLG4tMStvLXMsbykpfWZ1bmN0aW9uIFFMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8bjsrK2EpZm9yKHZhciBzPTAsbD0wO3M8aStyOysrcylzPGkmJihsKz1lLmRhdGFbYStzKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVthKyhzLW8pKm5dKSx0LmRhdGFbYSsocy1yKSpuXT1sL01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiBWU2UoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gVVNlKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIHFTZSgpe3JldHVybiAxfWZ1bmN0aW9uIGcxdCgpe3ZhciBlPVZTZSx0PVVTZSxyPXFTZSxuPTk2MCxpPTUwMCxvPTIwLGE9MixzPW8qMyxsPW4rcyoyPj5hLGM9aStzKjI+PmEsdT1PaCgyMCk7ZnVuY3Rpb24gaCh5KXt2YXIgeD1uZXcgRmxvYXQzMkFycmF5KGwqYyksYj1uZXcgRmxvYXQzMkFycmF5KGwqYyk7eS5mb3JFYWNoKGZ1bmN0aW9uKFAsayxPKXt2YXIgRD0rZShQLGssTykrcz4+YSxCPSt0KFAsayxPKStzPj5hLEk9K3IoUCxrLE8pO0Q+PTAmJkQ8bCYmQj49MCYmQjxjJiYoeFtEK0IqbF0rPUkpfSksSkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LG8+PmEpLFFMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSxvPj5hKSxKTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0sbz4+YSksUUwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LG8+PmEpLEpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSxvPj5hKSxRTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0sbz4+YSk7dmFyIFM9dSh4KTtpZighQXJyYXkuaXNBcnJheShTKSl7dmFyIEM9bHUoeCk7Uz10bCgwLEMsUyksUz1JcigwLE1hdGguZmxvb3IoQy9TKSpTLFMpLFMuc2hpZnQoKX1yZXR1cm4gWkwoKS50aHJlc2hvbGRzKFMpLnNpemUoW2wsY10pKHgpLm1hcChmKX1mdW5jdGlvbiBmKHkpe3JldHVybiB5LnZhbHVlKj1NYXRoLnBvdygyLC0yKmEpLHkuY29vcmRpbmF0ZXMuZm9yRWFjaChwKSx5fWZ1bmN0aW9uIHAoeSl7eS5mb3JFYWNoKGQpfWZ1bmN0aW9uIGQoeSl7eS5mb3JFYWNoKGcpfWZ1bmN0aW9uIGcoeSl7eVswXT15WzBdKk1hdGgucG93KDIsYSktcyx5WzFdPXlbMV0qTWF0aC5wb3coMixhKS1zfWZ1bmN0aW9uIF8oKXtyZXR1cm4gcz1vKjMsbD1uK3MqMj4+YSxjPWkrcyoyPj5hLGh9cmV0dXJuIGgueD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTplfSxoLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6dH0saC53ZWlnaHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6cn0saC5zaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltuLGldO3ZhciB4PU1hdGguY2VpbCh5WzBdKSxiPU1hdGguY2VpbCh5WzFdKTtpZighKHg+PTApJiYhKHg+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIG49eCxpPWIsXygpfSxoLmNlbGxTaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxhO2lmKCEoKHk9K3kpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIGE9TWF0aC5mbG9vcihNYXRoLmxvZyh5KS9NYXRoLkxOMiksXygpfSxoLnRocmVzaG9sZHM9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpBcnJheS5pc0FycmF5KHkpP09oKEtMLmNhbGwoeSkpOk9oKHkpLGgpOnV9LGguYmFuZHdpZHRoPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQobyoobysxKSk7aWYoISgoeT0reSk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gbz1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp5KnkrMSktMSkvMiksXygpfSxofWttKCk7cUUoKTtJXygpO2Z1bmN0aW9uIFhTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYmxvYigpfWZ1bmN0aW9uIEQxdChlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4oWFNlKX1mdW5jdGlvbiAkU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3JldHVybiBlLmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gTzF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbigkU2UpfXFFKCk7ZnVuY3Rpb24gS1NlKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS50ZXh0KCl9ZnVuY3Rpb24gRF8oZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKEtTZSl9ZnVuY3Rpb24gejF0KGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZ0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXZvaWQgMCksRF8odCxyKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBlKGksbil9KX19ZnVuY3Rpb24gb2ooZSx0LHIsbil7YXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiByPT0iZnVuY3Rpb24iJiYobj1yLHI9dm9pZCAwKTt2YXIgaT1XbShlKTtyZXR1cm4gRF8odCxyKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiBpLnBhcnNlKG8sbil9KX12YXIgRjF0PXoxdChDYiksQjF0PXoxdChBYik7ZnVuY3Rpb24gSDF0KGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiB0KWlbb109dFtvXTtpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3IoaSl9LGkuc3JjPWV9KX1mdW5jdGlvbiBaU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO2lmKCEoZS5zdGF0dXM9PT0yMDR8fGUuc3RhdHVzPT09MjA1KSlyZXR1cm4gZS5qc29uKCl9ZnVuY3Rpb24gVjF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihaU2UpfWZ1bmN0aW9uIGFqKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBEXyh0LHIpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcobixlKX0pfX12YXIgVTF0PWFqKCJhcHBsaWNhdGlvbi94bWwiKSxxMXQ9YWooInRleHQvaHRtbCIpLEcxdD1haigiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFcxdChlLHQpe3ZhciByO2U9PW51bGwmJihlPTApLHQ9PW51bGwmJih0PTApO2Z1bmN0aW9uIG4oKXt2YXIgaSxvPXIubGVuZ3RoLGEscz0wLGw9MDtmb3IoaT0wO2k8bzsrK2kpYT1yW2ldLHMrPWEueCxsKz1hLnk7Zm9yKHM9cy9vLWUsbD1sL28tdCxpPTA7aTxvOysraSlhPXJbaV0sYS54LT1zLGEueS09bH1yZXR1cm4gbi5pbml0aWFsaXplPWZ1bmN0aW9uKGkpe3I9aX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStpLG4pOmV9LG4ueT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0raSxuKTp0fSxufWZ1bmN0aW9uIERuKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBmdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fWZ1bmN0aW9uIFkxdChlKXt2YXIgdD0rdGhpcy5feC5jYWxsKG51bGwsZSkscj0rdGhpcy5feS5jYWxsKG51bGwsZSk7cmV0dXJuIGoxdCh0aGlzLmNvdmVyKHQsciksdCxyLGUpfWZ1bmN0aW9uIGoxdChlLHQscixuKXtpZihpc05hTih0KXx8aXNOYU4ocikpcmV0dXJuIGU7dmFyIGksbz1lLl9yb290LGE9e2RhdGE6bn0scz1lLl94MCxsPWUuX3kwLGM9ZS5feDEsdT1lLl95MSxoLGYscCxkLGcsXyx5LHg7aWYoIW8pcmV0dXJuIGUuX3Jvb3Q9YSxlO2Zvcig7by5sZW5ndGg7KWlmKChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mLGk9bywhKG89b1t5PV88PDF8Z10pKXJldHVybiBpW3ldPWEsZTtpZihwPStlLl94LmNhbGwobnVsbCxvLmRhdGEpLGQ9K2UuX3kuY2FsbChudWxsLG8uZGF0YSksdD09PXAmJnI9PT1kKXJldHVybiBhLm5leHQ9byxpP2lbeV09YTplLl9yb290PWEsZTtkbyBpPWk/aVt5XT1uZXcgQXJyYXkoNCk6ZS5fcm9vdD1uZXcgQXJyYXkoNCksKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWY7d2hpbGUoKHk9Xzw8MXxnKT09PSh4PShkPj1mKTw8MXxwPj1oKSk7cmV0dXJuIGlbeF09byxpW3ldPWEsZX1mdW5jdGlvbiBYMXQoZSl7dmFyIHQscixuPWUubGVuZ3RoLGksbyxhPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPTEvMCxjPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihyPTA7cjxuOysrcilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCx0PWVbcl0pKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpfHwoYVtyXT1pLHNbcl09byxpPGwmJihsPWkpLGk+dSYmKHU9aSksbzxjJiYoYz1vKSxvPmgmJihoPW8pKTtpZihsPnV8fGM+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihsLGMpLmNvdmVyKHUsaCkscj0wO3I8bjsrK3IpajF0KHRoaXMsYVtyXSxzW3JdLGVbcl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uICQxdChlLHQpe2lmKGlzTmFOKGU9K2UpfHxpc05hTih0PSt0KSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IoZSkpKzEsbz0obj1NYXRoLmZsb29yKHQpKSsxO2Vsc2V7Zm9yKHZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3I+ZXx8ZT49aXx8bj50fHx0Pj1vOylzd2l0Y2goYz0odDxuKTw8MXxlPHIsbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bCxhKj0yLGMpe2Nhc2UgMDppPXIrYSxvPW4rYTticmVhaztjYXNlIDE6cj1pLWEsbz1uK2E7YnJlYWs7Y2FzZSAyOmk9cithLG49by1hO2JyZWFrO2Nhc2UgMzpyPWktYSxuPW8tYTticmVha310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc31mdW5jdGlvbiBLMXQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpZG8gZS5wdXNoKHQuZGF0YSk7d2hpbGUodD10Lm5leHQpfSksZX1mdW5jdGlvbiBaMXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrZVswXVswXSwrZVswXVsxXSkuY292ZXIoK2VbMV1bMF0sK2VbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19ZnVuY3Rpb24geW8oZSx0LHIsbixpKXt0aGlzLm5vZGU9ZSx0aGlzLngwPXQsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9ZnVuY3Rpb24gSjF0KGUsdCxyKXt2YXIgbixpPXRoaXMuX3gwLG89dGhpcy5feTAsYSxzLGwsYyx1PXRoaXMuX3gxLGg9dGhpcy5feTEsZj1bXSxwPXRoaXMuX3Jvb3QsZCxnO2ZvcihwJiZmLnB1c2gobmV3IHlvKHAsaSxvLHUsaCkpLHI9PW51bGw/cj0xLzA6KGk9ZS1yLG89dC1yLHU9ZStyLGg9dCtyLHIqPXIpO2Q9Zi5wb3AoKTspaWYoISghKHA9ZC5ub2RlKXx8KGE9ZC54MCk+dXx8KHM9ZC55MCk+aHx8KGw9ZC54MSk8aXx8KGM9ZC55MSk8bykpaWYocC5sZW5ndGgpe3ZhciBfPShhK2wpLzIseT0ocytjKS8yO2YucHVzaChuZXcgeW8ocFszXSxfLHksbCxjKSxuZXcgeW8ocFsyXSxhLHksXyxjKSxuZXcgeW8ocFsxXSxfLHMsbCx5KSxuZXcgeW8ocFswXSxhLHMsXyx5KSksKGc9KHQ+PXkpPDwxfGU+PV8pJiYoZD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWddLGZbZi5sZW5ndGgtMS1nXT1kKX1lbHNle3ZhciB4PWUtK3RoaXMuX3guY2FsbChudWxsLHAuZGF0YSksYj10LSt0aGlzLl95LmNhbGwobnVsbCxwLmRhdGEpLFM9eCp4K2IqYjtpZihTPHIpe3ZhciBDPU1hdGguc3FydChyPVMpO2k9ZS1DLG89dC1DLHU9ZStDLGg9dCtDLG49cC5kYXRhfX1yZXR1cm4gbn1mdW5jdGlvbiBRMXQoZSl7aWYoaXNOYU4odT0rdGhpcy5feC5jYWxsKG51bGwsZSkpfHxpc05hTihoPSt0aGlzLl95LmNhbGwobnVsbCxlKSkpcmV0dXJuIHRoaXM7dmFyIHQscj10aGlzLl9yb290LG4saSxvLGE9dGhpcy5feDAscz10aGlzLl95MCxsPXRoaXMuX3gxLGM9dGhpcy5feTEsdSxoLGYscCxkLGcsXyx5O2lmKCFyKXJldHVybiB0aGlzO2lmKHIubGVuZ3RoKWZvcig7Oyl7aWYoKGQ9dT49KGY9KGErbCkvMikpP2E9ZjpsPWYsKGc9aD49KHA9KHMrYykvMikpP3M9cDpjPXAsdD1yLCEocj1yW189Zzw8MXxkXSkpcmV0dXJuIHRoaXM7aWYoIXIubGVuZ3RoKWJyZWFrOyh0W18rMSYzXXx8dFtfKzImM118fHRbXyszJjNdKSYmKG49dCx5PV8pfWZvcig7ci5kYXRhIT09ZTspaWYoaT1yLCEocj1yLm5leHQpKXJldHVybiB0aGlzO3JldHVybihvPXIubmV4dCkmJmRlbGV0ZSByLm5leHQsaT8obz9pLm5leHQ9bzpkZWxldGUgaS5uZXh0LHRoaXMpOnQ/KG8/dFtfXT1vOmRlbGV0ZSB0W19dLChyPXRbMF18fHRbMV18fHRbMl18fHRbM10pJiZyPT09KHRbM118fHRbMl18fHRbMV18fHRbMF0pJiYhci5sZW5ndGgmJihuP25beV09cjp0aGlzLl9yb290PXIpLHRoaXMpOih0aGlzLl9yb290PW8sdGhpcyl9ZnVuY3Rpb24gdHh0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyOysrdCl0aGlzLnJlbW92ZShlW3RdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBleHQoKXtyZXR1cm4gdGhpcy5fcm9vdH1mdW5jdGlvbiByeHQoKXt2YXIgZT0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbysrZTt3aGlsZSh0PXQubmV4dCl9KSxlfWZ1bmN0aW9uIG54dChlKXt2YXIgdD1bXSxyLG49dGhpcy5fcm9vdCxpLG8sYSxzLGw7Zm9yKG4mJnQucHVzaChuZXcgeW8obix0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO3I9dC5wb3AoKTspaWYoIWUobj1yLm5vZGUsbz1yLngwLGE9ci55MCxzPXIueDEsbD1yLnkxKSYmbi5sZW5ndGgpe3ZhciBjPShvK3MpLzIsdT0oYStsKS8yOyhpPW5bM10pJiZ0LnB1c2gobmV3IHlvKGksYyx1LHMsbCkpLChpPW5bMl0pJiZ0LnB1c2gobmV3IHlvKGksbyx1LGMsbCkpLChpPW5bMV0pJiZ0LnB1c2gobmV3IHlvKGksYyxhLHMsdSkpLChpPW5bMF0pJiZ0LnB1c2gobmV3IHlvKGksbyxhLGMsdSkpfXJldHVybiB0aGlzfWZ1bmN0aW9uIGl4dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgeW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgeW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgeW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgeW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgeW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBveHQoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gYXh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PWUsdGhpcyk6dGhpcy5feH1mdW5jdGlvbiBzeHQoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gbHh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PWUsdGhpcyk6dGhpcy5feX1mdW5jdGlvbiB6aChlLHQscil7dmFyIG49bmV3IHNqKHQ9PW51bGw/b3h0OnQscj09bnVsbD9zeHQ6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBlPT1udWxsP246bi5hZGRBbGwoZSl9ZnVuY3Rpb24gc2ooZSx0LHIsbixpLG8pe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBjeHQoZSl7Zm9yKHZhciB0PXtkYXRhOmUuZGF0YX0scj10O2U9ZS5uZXh0OylyPXIubmV4dD17ZGF0YTplLmRhdGF9O3JldHVybiB0fXZhciB6YT16aC5wcm90b3R5cGU9c2oucHJvdG90eXBlO3phLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgc2oodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1jeHQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1jeHQobikpO3JldHVybiBlfTt6YS5hZGQ9WTF0O3phLmFkZEFsbD1YMXQ7emEuY292ZXI9JDF0O3phLmRhdGE9SzF0O3phLmV4dGVudD1aMXQ7emEuZmluZD1KMXQ7emEucmVtb3ZlPVExdDt6YS5yZW1vdmVBbGw9dHh0O3phLnJvb3Q9ZXh0O3phLnNpemU9cnh0O3phLnZpc2l0PW54dDt6YS52aXNpdEFmdGVyPWl4dDt6YS54PWF4dDt6YS55PWx4dDtmdW5jdGlvbiBKU2UoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIFFTZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gdXh0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PXpoKHQsSlNlLFFTZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9ZnUoKSxMKz1CKkIpLEk9PT0wJiYoST1mdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6RG4oK2wpLHMoKSxvKTplfSxvfVRiKCk7ZnVuY3Rpb24gdDNlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIGh4dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBmeHQoZSl7dmFyIHQ9dDNlLHI9dSxuLGk9RG4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxmdSgpLGs9Qy55K0MudnktUy55LVMudnl8fGZ1KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1KaShhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPWh4dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PWh4dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLGQoKSxoKTppfSxofWttKCk7VGIoKTtmdW5jdGlvbiBweHQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBkeHQoZSl7cmV0dXJuIGUueX12YXIgZTNlPTEwLHIzZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gbXh0KGUpe3ZhciB0LHI9MSxuPS4wMDEsaT0xLU1hdGgucG93KG4sMS8zMDApLG89MCxhPS42LHM9SmkoKSxsPUFfKHUpLGM9dnMoInRpY2siLCJlbmQiKTtlPT1udWxsJiYoZT1bXSk7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLHQpLHI8biYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIix0KSl9ZnVuY3Rpb24gaChkKXt2YXIgZyxfPWUubGVuZ3RoLHk7ZD09PXZvaWQgMCYmKGQ9MSk7Zm9yKHZhciB4PTA7eDxkOysreClmb3Iocis9KG8tcikqaSxzLmVhY2goZnVuY3Rpb24oYil7YihyKX0pLGc9MDtnPF87KytnKXk9ZVtnXSx5LmZ4PT1udWxsP3kueCs9eS52eCo9YTooeS54PXkuZngseS52eD0wKSx5LmZ5PT1udWxsP3kueSs9eS52eSo9YTooeS55PXkuZnkseS52eT0wKTtyZXR1cm4gdH1mdW5jdGlvbiBmKCl7Zm9yKHZhciBkPTAsZz1lLmxlbmd0aCxfO2Q8ZzsrK2Qpe2lmKF89ZVtkXSxfLmluZGV4PWQsXy5meCE9bnVsbCYmKF8ueD1fLmZ4KSxfLmZ5IT1udWxsJiYoXy55PV8uZnkpLGlzTmFOKF8ueCl8fGlzTmFOKF8ueSkpe3ZhciB5PWUzZSpNYXRoLnNxcnQoZCkseD1kKnIzZTtfLng9eSpNYXRoLmNvcyh4KSxfLnk9eSpNYXRoLnNpbih4KX0oaXNOYU4oXy52eCl8fGlzTmFOKF8udnkpKSYmKF8udng9Xy52eT0wKX19ZnVuY3Rpb24gcChkKXtyZXR1cm4gZC5pbml0aWFsaXplJiZkLmluaXRpYWxpemUoZSksZH1yZXR1cm4gZigpLHQ9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwucmVzdGFydCh1KSx0fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGwuc3RvcCgpLHR9LG5vZGVzOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWQsZigpLHMuZWFjaChwKSx0KTplfSxhbHBoYTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZCx0KTpyfSxhbHBoYU1pbjpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZCx0KTpufSxhbHBoYURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStkLHQpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZCx0KTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtZCx0KToxLWF9LGZvcmNlOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZz09bnVsbD9zLnJlbW92ZShkKTpzLnNldChkLHAoZykpLHQpOnMuZ2V0KGQpfSxmaW5kOmZ1bmN0aW9uKGQsZyxfKXt2YXIgeT0wLHg9ZS5sZW5ndGgsYixTLEMsUCxrO2ZvcihfPT1udWxsP189MS8wOl8qPV8seT0wO3k8eDsrK3kpUD1lW3ldLGI9ZC1QLngsUz1nLVAueSxDPWIqYitTKlMsQzxfJiYoaz1QLF89Qyk7cmV0dXJuIGt9LG9uOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbihkLGcpLHQpOmMub24oZCl9fX1mdW5jdGlvbiBneHQoKXt2YXIgZSx0LHIsbj1EbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPXpoKGUscHh0LGR4dCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkRuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH1mdW5jdGlvbiBfeHQoZSx0LHIpe3ZhciBuLGk9RG4oLjEpLG8sYTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oK2UpKSx0PT1udWxsJiYodD0wKSxyPT1udWxsJiYocj0wKTtmdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT0wLGg9bi5sZW5ndGg7dTxoOysrdSl7dmFyIGY9blt1XSxwPWYueC10fHwxZS02LGQ9Zi55LXJ8fDFlLTYsZz1NYXRoLnNxcnQocCpwK2QqZCksXz0oYVt1XS1nKSpvW3VdKmMvZztmLnZ4Kz1wKl8sZi52eSs9ZCpffX1mdW5jdGlvbiBsKCl7aWYoISFuKXt2YXIgYyx1PW4ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheSh1KSxhPW5ldyBBcnJheSh1KSxjPTA7Yzx1OysrYylhW2NdPStlKG5bY10sYyxuKSxvW2NdPWlzTmFOKGFbY10pPzA6K2kobltjXSxjLG4pfX1yZXR1cm4gcy5pbml0aWFsaXplPWZ1bmN0aW9uKGMpe249YyxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpEbigrYyksbCgpLHMpOml9LHMucmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6RG4oK2MpLGwoKSxzKTplfSxzLng9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Mscyk6dH0scy55PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStjLHMpOnJ9LHN9ZnVuY3Rpb24geXh0KGUpe3ZhciB0PURuKC4xKSxyLG4saTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8wOitlKSk7ZnVuY3Rpb24gbyhzKXtmb3IodmFyIGw9MCxjPXIubGVuZ3RoLHU7bDxjOysrbCl1PXJbbF0sdS52eCs9KGlbbF0tdS54KSpuW2xdKnN9ZnVuY3Rpb24gYSgpe2lmKCEhcil7dmFyIHMsbD1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobCksaT1uZXcgQXJyYXkobCkscz0wO3M8bDsrK3MpbltzXT1pc05hTihpW3NdPStlKHJbc10scyxyKSk/MDordChyW3NdLHMscil9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24ocyl7cj1zLGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6dH0sby54PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6RG4oK3MpLGEoKSxvKTplfSxvfWZ1bmN0aW9uIHZ4dChlKXt2YXIgdD1EbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPURuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpEbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6ZX0sb31mdW5jdGlvbiB4eHQoZSl7cmV0dXJuIE1hdGguYWJzKGU9TWF0aC5yb3VuZChlKSk+PTFlMjE/ZS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmUudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE9fKGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfWZ1bmN0aW9uIEZoKGUpe3JldHVybiBlPU9fKE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfWZ1bmN0aW9uIGJ4dChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiB3eHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBuM2U9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gTHAoZSl7aWYoISh0PW4zZS5leGVjKGUpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2UpO3ZhciB0O3JldHVybiBuZXcgR0Uoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9THAucHJvdG90eXBlPUdFLnByb3RvdHlwZTtmdW5jdGlvbiBHRShlKXt0aGlzLmZpbGw9ZS5maWxsPT09dm9pZCAwPyIgIjplLmZpbGwrIiIsdGhpcy5hbGlnbj1lLmFsaWduPT09dm9pZCAwPyI+IjplLmFsaWduKyIiLHRoaXMuc2lnbj1lLnNpZ249PT12b2lkIDA/Ii0iOmUuc2lnbisiIix0aGlzLnN5bWJvbD1lLnN5bWJvbD09PXZvaWQgMD8iIjplLnN5bWJvbCsiIix0aGlzLnplcm89ISFlLnplcm8sdGhpcy53aWR0aD1lLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorZS53aWR0aCx0aGlzLmNvbW1hPSEhZS5jb21tYSx0aGlzLnByZWNpc2lvbj1lLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2UucHJlY2lzaW9uLHRoaXMudHJpbT0hIWUudHJpbSx0aGlzLnR5cGU9ZS50eXBlPT09dm9pZCAwPyIiOmUudHlwZSsiIn1HRS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBTeHQoZSl7dDpmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49LTEsaTtyPHQ7KytyKXN3aXRjaChlW3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErZVtyXSlicmVhayB0O24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD9lLnNsaWNlKDAsbikrZS5zbGljZShpKzEpOmV9dmFyIGxqO2Z1bmN0aW9uIE14dChlLHQpe3ZhciByPU9fKGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV0sbz1pLShsaj1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEsYT1uLmxlbmd0aDtyZXR1cm4gbz09PWE/bjpvPmE/bituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/bi5zbGljZSgwLG8pKyIuIituLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK09fKGUsTWF0aC5tYXgoMCx0K28tMSkpWzBdfWZ1bmN0aW9uIGNqKGUsdCl7dmFyIHI9T18oZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgdWo9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDp4eHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2ooZSoxMDAsdCl9LHI6Y2osczpNeHQsWDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBoaihlKXtyZXR1cm4gZX12YXIgRXh0PUFycmF5LnByb3RvdHlwZS5tYXAsVHh0PVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIGVrKGUpe3ZhciB0PWUuZ3JvdXBpbmc9PT12b2lkIDB8fGUudGhvdXNhbmRzPT09dm9pZCAwP2hqOmJ4dChFeHQuY2FsbChlLmdyb3VwaW5nLE51bWJlciksZS50aG91c2FuZHMrIiIpLHI9ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzBdKyIiLG49ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzFdKyIiLGk9ZS5kZWNpbWFsPT09dm9pZCAwPyIuIjplLmRlY2ltYWwrIiIsbz1lLm51bWVyYWxzPT09dm9pZCAwP2hqOnd4dChFeHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxwKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6dWpbQ118fChiPT09dm9pZCAwJiYoYj0xMiksUz0hMCxDPSJnIiksKF98fGY9PT0iMCImJnA9PT0iPSIpJiYoXz0hMCxmPSIwIixwPSI9Iik7dmFyIFA9Zz09PSIkIj9yOmc9PT0iIyImJi9bYm94WF0vLnRlc3QoQyk/IjAiK0MudG9Mb3dlckNhc2UoKToiIixrPWc9PT0iJCI/bjovWyVwXS8udGVzdChDKT9hOiIiLE89dWpbQ10sRD0vW2RlZmdwcnMlXS8udGVzdChDKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KEMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIEIoSSl7dmFyIEw9UCxSPWssRix6LFU7aWYoQz09PSJjIilSPU8oSSkrUixJPSIiO2Vsc2V7ST0rSTt2YXIgVz1JPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpPKE1hdGguYWJzKEkpLGIpLFMmJihJPVN4dChJKSksVyYmK0k9PTAmJmQhPT0iKyImJihXPSExKSxMPShXP2Q9PT0iKCI/ZDpzOmQ9PT0iLSJ8fGQ9PT0iKCI/IiI6ZCkrTCxSPShDPT09InMiP1R4dFs4K2xqLzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1McChoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaChmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1UeHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIHJrLHhuLFdFO25rKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTtmdW5jdGlvbiBuayhlKXtyZXR1cm4gcms9ZWsoZSkseG49cmsuZm9ybWF0LFdFPXJrLmZvcm1hdFByZWZpeCxya31mdW5jdGlvbiBpayhlKXtyZXR1cm4gTWF0aC5tYXgoMCwtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBvayhlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaCh0KS8zKSkpKjMtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBhayhlLHQpe3JldHVybiBlPU1hdGguYWJzKGUpLHQ9TWF0aC5hYnModCktZSxNYXRoLm1heCgwLEZoKHQpLUZoKGUpKSsxfWZ1bmN0aW9uIFNzKCl7cmV0dXJuIG5ldyBsa31mdW5jdGlvbiBsaygpe3RoaXMucmVzZXQoKX1say5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmxrLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24oZSl7Q3h0KHNrLGUsdGhpcy50KSxDeHQodGhpcyxzay5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9c2sudDp0aGlzLnM9c2sudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgc2s9bmV3IGxrO2Z1bmN0aW9uIEN4dChlLHQscil7dmFyIG49ZS5zPXQrcixpPW4tdCxvPW4taTtlLnQ9dC1vKyhyLWkpfXZhciBsZT0xZS02LHpfPTFlLTEyLEJlPU1hdGguUEksbW49QmUvMixQYj1CZS80LHdpPUJlKjIsdnI9MTgwL0JlLHllPUJlLzE4MCxSZT1NYXRoLmFicyxpYz1NYXRoLmF0YW4sYm49TWF0aC5hdGFuMixadD1NYXRoLmNvcyxZRT1NYXRoLmNlaWwsY2s9TWF0aC5leHA7dmFyIEZfPU1hdGgubG9nLHVrPU1hdGgucG93LFh0PU1hdGguc2luLGNhPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSx4cj1NYXRoLnNxcnQsSWI9TWF0aC50YW47ZnVuY3Rpb24gaGsoZSl7cmV0dXJuIGU+MT8wOmU8LTE/QmU6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIHduKGUpe3JldHVybiBlPjE/bW46ZTwtMT8tbW46TWF0aC5hc2luKGUpfWZ1bmN0aW9uIGZqKGUpe3JldHVybihlPVh0KGUvMikpKmV9ZnVuY3Rpb24gRnIoKXt9ZnVuY3Rpb24gZmsoZSx0KXtlJiZQeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKSYmUHh0W2UudHlwZV0oZSx0KX12YXIgQXh0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7ZmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWZrKHJbbl0uZ2VvbWV0cnksdCl9fSxQeHQ9e1NwaGVyZTpmdW5jdGlvbihlLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKGUsdCl7ZT1lLmNvb3JkaW5hdGVzLHQucG9pbnQoZVswXSxlWzFdLGVbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyllPXJbbl0sdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtwaihlLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspcGoocltuXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7SXh0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspSXh0KHJbbl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylmayhyW25dLHQpfX07ZnVuY3Rpb24gcGooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gSXh0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspcGooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHZvKGUsdCl7ZSYmQXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/QXh0W2UudHlwZV0oZSx0KTpmayhlLHQpfXZhciBqRT1TcygpLHBrPVNzKCksTHh0LGt4dCxkaixtaixnaixwdT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7akUucmVzZXQoKSxwdS5saW5lU3RhcnQ9aTNlLHB1LmxpbmVFbmQ9bzNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9K2pFO3BrLmFkZChlPDA/d2krZTplKSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1Gcn0sc3BoZXJlOmZ1bmN0aW9uKCl7cGsuYWRkKHdpKX19O2Z1bmN0aW9uIGkzZSgpe3B1LnBvaW50PWEzZX1mdW5jdGlvbiBvM2UoKXtSeHQoTHh0LGt4dCl9ZnVuY3Rpb24gYTNlKGUsdCl7cHUucG9pbnQ9Unh0LEx4dD1lLGt4dD10LGUqPXllLHQqPXllLGRqPWUsbWo9WnQodD10LzIrUGIpLGdqPVh0KHQpfWZ1bmN0aW9uIFJ4dChlLHQpe2UqPXllLHQqPXllLHQ9dC8yK1BiO3ZhciByPWUtZGosbj1yPj0wPzE6LTEsaT1uKnIsbz1adCh0KSxhPVh0KHQpLHM9Z2oqYSxsPW1qKm8rcypadChpKSxjPXMqbipYdChpKTtqRS5hZGQoYm4oYyxsKSksZGo9ZSxtaj1vLGdqPWF9ZnVuY3Rpb24gTnh0KGUpe3JldHVybiBway5yZXNldCgpLHZvKGUscHUpLHBrKjJ9ZnVuY3Rpb24gQl8oZSl7cmV0dXJuW2JuKGVbMV0sZVswXSksd24oZVsyXSldfWZ1bmN0aW9uIG9jKGUpe3ZhciB0PWVbMF0scj1lWzFdLG49WnQocik7cmV0dXJuW24qWnQodCksbipYdCh0KSxYdChyKV19ZnVuY3Rpb24gWEUoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl19ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm5bZVsxXSp0WzJdLWVbMl0qdFsxXSxlWzJdKnRbMF0tZVswXSp0WzJdLGVbMF0qdFsxXS1lWzFdKnRbMF1dfWZ1bmN0aW9uIGRrKGUsdCl7ZVswXSs9dFswXSxlWzFdKz10WzFdLGVbMl0rPXRbMl19ZnVuY3Rpb24gJEUoZSx0KXtyZXR1cm5bZVswXSp0LGVbMV0qdCxlWzJdKnRdfWZ1bmN0aW9uIEhfKGUpe3ZhciB0PXhyKGVbMF0qZVswXStlWzFdKmVbMV0rZVsyXSplWzJdKTtlWzBdLz10LGVbMV0vPXQsZVsyXS89dH12YXIgcmksTXMsdWksbmwsVl8sRnh0LEJ4dCxMYixLRT1TcygpLFltLE5wLFJwPXtwb2ludDpfaixsaW5lU3RhcnQ6RHh0LGxpbmVFbmQ6T3h0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1JwLnBvaW50PVZ4dCxScC5saW5lU3RhcnQ9czNlLFJwLmxpbmVFbmQ9bDNlLEtFLnJlc2V0KCkscHUucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwdS5wb2x5Z29uRW5kKCksUnAucG9pbnQ9X2osUnAubGluZVN0YXJ0PUR4dCxScC5saW5lRW5kPU94dCxqRTwwPyhyaT0tKHVpPTE4MCksTXM9LShubD05MCkpOktFPmxlP25sPTkwOktFPC1sZSYmKE1zPS05MCksTnBbMF09cmksTnBbMV09dWl9LHNwaGVyZTpmdW5jdGlvbigpe3JpPS0odWk9MTgwKSxNcz0tKG5sPTkwKX19O2Z1bmN0aW9uIF9qKGUsdCl7WW0ucHVzaChOcD1bcmk9ZSx1aT1lXSksdDxNcyYmKE1zPXQpLHQ+bmwmJihubD10KX1mdW5jdGlvbiBIeHQoZSx0KXt2YXIgcj1vYyhbZSp5ZSx0KnllXSk7aWYoTGIpe3ZhciBuPWtwKExiLHIpLGk9W25bMV0sLW5bMF0sMF0sbz1rcChpLG4pO0hfKG8pLG89Ql8obyk7dmFyIGE9ZS1WXyxzPWE+MD8xOi0xLGw9b1swXSp2cipzLGMsdT1SZShhKT4xODA7dV4ocypWXzxsJiZsPHMqZSk/KGM9b1sxXSp2cixjPm5sJiYobmw9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKlZfPGwmJmw8cyplKT8oYz0tb1sxXSp2cixjPE1zJiYoTXM9YykpOih0PE1zJiYoTXM9dCksdD5ubCYmKG5sPXQpKSksdT9lPFZfP3JsKHJpLGUpPnJsKHJpLHVpKSYmKHVpPWUpOnJsKGUsdWkpPnJsKHJpLHVpKSYmKHJpPWUpOnVpPj1yaT8oZTxyaSYmKHJpPWUpLGU+dWkmJih1aT1lKSk6ZT5WXz9ybChyaSxlKT5ybChyaSx1aSkmJih1aT1lKTpybChlLHVpKT5ybChyaSx1aSkmJihyaT1lKX1lbHNlIFltLnB1c2goTnA9W3JpPWUsdWk9ZV0pO3Q8TXMmJihNcz10KSx0Pm5sJiYobmw9dCksTGI9cixWXz1lfWZ1bmN0aW9uIER4dCgpe1JwLnBvaW50PUh4dH1mdW5jdGlvbiBPeHQoKXtOcFswXT1yaSxOcFsxXT11aSxScC5wb2ludD1faixMYj1udWxsfWZ1bmN0aW9uIFZ4dChlLHQpe2lmKExiKXt2YXIgcj1lLVZfO0tFLmFkZChSZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIEZ4dD1lLEJ4dD10O3B1LnBvaW50KGUsdCksSHh0KGUsdCl9ZnVuY3Rpb24gczNlKCl7cHUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbDNlKCl7Vnh0KEZ4dCxCeHQpLHB1LmxpbmVFbmQoKSxSZShLRSk+bGUmJihyaT0tKHVpPTE4MCkpLE5wWzBdPXJpLE5wWzFdPXVpLExiPW51bGx9ZnVuY3Rpb24gcmwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIGMzZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24genh0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBVeHQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYobmw9dWk9LShyaT1Ncz0xLzApLFltPVtdLHZvKGUsUnApLHI9WW0ubGVuZ3RoKXtmb3IoWW0uc29ydChjM2UpLHQ9MSxuPVltWzBdLG89W25dO3Q8cjsrK3QpaT1ZbVt0XSx6eHQobixpWzBdKXx8enh0KG4saVsxXSk/KHJsKG5bMF0saVsxXSk+cmwoblswXSxuWzFdKSYmKG5bMV09aVsxXSkscmwoaVswXSxuWzFdKT5ybChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXJsKG5bMV0saVswXSkpPmEmJihhPXMscmk9aVswXSx1aT1uWzFdKX1yZXR1cm4gWW09TnA9bnVsbCxyaT09PTEvMHx8TXM9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbcmksTXNdLFt1aSxubF1dfXZhciBaRSxtayxnayxfayx5ayx2ayx4ayxiayx5aix2aix4aixXeHQsWXh0LEZhLEJhLEhhLGR1PXtzcGhlcmU6RnIscG9pbnQ6YmosbGluZVN0YXJ0OnF4dCxsaW5lRW5kOkd4dCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtkdS5saW5lU3RhcnQ9ZjNlLGR1LmxpbmVFbmQ9cDNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZHUubGluZVN0YXJ0PXF4dCxkdS5saW5lRW5kPUd4dH19O2Z1bmN0aW9uIGJqKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7SkUocipadChlKSxyKlh0KGUpLFh0KHQpKX1mdW5jdGlvbiBKRShlLHQscil7KytaRSxnays9KGUtZ2spL1pFLF9rKz0odC1faykvWkUseWsrPShyLXlrKS9aRX1mdW5jdGlvbiBxeHQoKXtkdS5wb2ludD11M2V9ZnVuY3Rpb24gdTNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLGR1LnBvaW50PWgzZSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gaDNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCksbj1yKlp0KGUpLGk9cipYdChlKSxvPVh0KHQpLGE9Ym4oeHIoKGE9QmEqby1IYSppKSphKyhhPUhhKm4tRmEqbykqYSsoYT1GYSppLUJhKm4pKmEpLEZhKm4rQmEqaStIYSpvKTttays9YSx2ays9YSooRmErKEZhPW4pKSx4ays9YSooQmErKEJhPWkpKSxiays9YSooSGErKEhhPW8pKSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gR3h0KCl7ZHUucG9pbnQ9Ymp9ZnVuY3Rpb24gZjNlKCl7ZHUucG9pbnQ9ZDNlfWZ1bmN0aW9uIHAzZSgpe2p4dChXeHQsWXh0KSxkdS5wb2ludD1ian1mdW5jdGlvbiBkM2UoZSx0KXtXeHQ9ZSxZeHQ9dCxlKj15ZSx0Kj15ZSxkdS5wb2ludD1qeHQ7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLEpFKEZhLEJhLEhhKX1mdW5jdGlvbiBqeHQoZSx0KXtlKj15ZSx0Kj15ZTt2YXIgcj1adCh0KSxuPXIqWnQoZSksaT1yKlh0KGUpLG89WHQodCksYT1CYSpvLUhhKmkscz1IYSpuLUZhKm8sbD1GYSppLUJhKm4sYz14cihhKmErcypzK2wqbCksdT13bihjKSxoPWMmJi11L2M7eWorPWgqYSx2ais9aCpzLHhqKz1oKmwsbWsrPXUsdmsrPXUqKEZhKyhGYT1uKSkseGsrPXUqKEJhKyhCYT1pKSksYmsrPXUqKEhhKyhIYT1vKSksSkUoRmEsQmEsSGEpfWZ1bmN0aW9uIFh4dChlKXtaRT1taz1naz1faz15az12az14az1iaz15aj12aj14aj0wLHZvKGUsZHUpO3ZhciB0PXlqLHI9dmosbj14aixpPXQqdCtyKnIrbipuO3JldHVybiBpPHpfJiYodD12ayxyPXhrLG49YmssbWs8bGUmJih0PWdrLHI9X2ssbj15ayksaT10KnQrcipyK24qbixpPHpfKT9bTmFOLE5hTl06W2JuKHIsdCkqdnIsd24obi94cihpKSkqdnJdfWZ1bmN0aW9uIFVfKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBRRShlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9ZnVuY3Rpb24gd2ooZSx0KXtyZXR1cm5bUmUoZSk+QmU/ZStNYXRoLnJvdW5kKC1lL3dpKSp3aTplLHRdfXdqLmludmVydD13ajtmdW5jdGlvbiB0NShlLHQscil7cmV0dXJuKGUlPXdpKT90fHxyP1FFKEt4dChlKSxaeHQodCxyKSk6S3h0KGUpOnR8fHI/Wnh0KHQscik6d2p9ZnVuY3Rpb24gJHh0KGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB0Kz1lLFt0PkJlP3Qtd2k6dDwtQmU/dCt3aTp0LHJdfX1mdW5jdGlvbiBLeHQoZSl7dmFyIHQ9JHh0KGUpO3JldHVybiB0LmludmVydD0keHQoLWUpLHR9ZnVuY3Rpb24gWnh0KGUsdCl7dmFyIHI9WnQoZSksbj1YdChlKSxpPVp0KHQpLG89WHQodCk7ZnVuY3Rpb24gYShzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqcit1Km47cmV0dXJuW2JuKGgqaS1wKm8sdSpyLWYqbiksd24ocCppK2gqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqaS1oKm87cmV0dXJuW2JuKGgqaStmKm8sdSpyK3Aqbiksd24ocCpyLXUqbildfSxhfWZ1bmN0aW9uIHdrKGUpe2U9dDUoZVswXSp5ZSxlWzFdKnllLGUubGVuZ3RoPjI/ZVsyXSp5ZTowKTtmdW5jdGlvbiB0KHIpe3JldHVybiByPWUoclswXSp5ZSxyWzFdKnllKSxyWzBdKj12cixyWzFdKj12cixyfXJldHVybiB0LmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmludmVydChyWzBdKnllLHJbMV0qeWUpLHJbMF0qPXZyLHJbMV0qPXZyLHJ9LHR9ZnVuY3Rpb24gU2ooZSx0LHIsbixpLG8pe2lmKCEhcil7dmFyIGE9WnQodCkscz1YdCh0KSxsPW4qcjtpPT1udWxsPyhpPXQrbip3aSxvPXQtbC8yKTooaT1KeHQoYSxpKSxvPUp4dChhLG8pLChuPjA/aTxvOmk+bykmJihpKz1uKndpKSk7Zm9yKHZhciBjLHU9aTtuPjA/dT5vOnU8bzt1LT1sKWM9Ql8oW2EsLXMqWnQodSksLXMqWHQodSldKSxlLnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIEp4dChlLHQpe3Q9b2ModCksdFswXS09ZSxIXyh0KTt2YXIgcj1oaygtdFsxXSk7cmV0dXJuKCgtdFsyXTwwPy1yOnIpK3dpLWxlKSV3aX1mdW5jdGlvbiBReHQoKXt2YXIgZT1VXyhbMCwwXSksdD1VXyg5MCkscj1VXyg2KSxuLGksbz17cG9pbnQ6YX07ZnVuY3Rpb24gYShsLGMpe24ucHVzaChsPWkobCxjKSksbFswXSo9dnIsbFsxXSo9dnJ9ZnVuY3Rpb24gcygpe3ZhciBsPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykqeWUsdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSp5ZTtyZXR1cm4gbj1bXSxpPXQ1KC1sWzBdKnllLC1sWzFdKnllLDApLmludmVydCxTaihvLGMsdSwxKSxsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbl19LG49aT1udWxsLGx9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6VV8oWytsWzBdLCtsWzFdXSkscyk6ZX0scy5yYWRpdXM9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6dH0scy5wcmVjaXNpb249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6cn0sc31mdW5jdGlvbiBTaygpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbixpKXt0LnB1c2goW3IsbixpXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpGcixyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBrYihlLHQpe3JldHVybiBSZShlWzBdLXRbMF0pPGxlJiZSZShlWzFdLXRbMV0pPGxlfWZ1bmN0aW9uIE1rKGUsdCxyLG4pe3RoaXMueD1lLHRoaXMuej10LHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gRWsoZSx0LHIsbixpKXt2YXIgbz1bXSxhPVtdLHMsbDtpZihlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoISgoZz1kLmxlbmd0aC0xKTw9MCkpe3ZhciBnLF89ZFswXSx5PWRbZ10seDtpZihrYihfLHkpKXtpZighX1syXSYmIXlbMl0pe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufXlbMF0rPTIqbGV9by5wdXNoKHg9bmV3IE1rKF8sZCxudWxsLCEwKSksYS5wdXNoKHgubz1uZXcgTWsoXyxudWxsLHgsITEpKSxvLnB1c2goeD1uZXcgTWsoeSxkLG51bGwsITEpKSxhLnB1c2goeC5vPW5ldyBNayh5LG51bGwseCwhMCkpfX0pLCEhby5sZW5ndGgpe2ZvcihhLnNvcnQodCksdGJ0KG8pLHRidChhKSxzPTAsbD1hLmxlbmd0aDtzPGw7KytzKWFbc10uZT1yPSFyO2Zvcih2YXIgYz1vWzBdLHUsaDs7KXtmb3IodmFyIGY9YyxwPSEwO2YudjspaWYoKGY9Zi5uKT09PWMpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYocClmb3Iocz0wLGw9dS5sZW5ndGg7czxsOysrcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKHApZm9yKHU9Zi5wLnoscz11Lmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKGYueCxmLnAueCwtMSxpKTtmPWYucH1mPWYubyx1PWYueixwPSFwfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gdGJ0KGUpe2lmKCEhKHQ9ZS5sZW5ndGgpKXtmb3IodmFyIHQscj0wLG49ZVswXSxpOysrcjx0OyluLm49aT1lW3JdLGkucD1uLG49aTtuLm49aT1lWzBdLGkucD1ufX12YXIgTWo9U3MoKTtmdW5jdGlvbiBFaihlKXtyZXR1cm4gUmUoZVswXSk8PUJlP2VbMF06Y2EoZVswXSkqKChSZShlWzBdKStCZSkld2ktQmUpfWZ1bmN0aW9uIFRrKGUsdCl7dmFyIHI9RWoodCksbj10WzFdLGk9WHQobiksbz1bWHQociksLVp0KHIpLDBdLGE9MCxzPTA7TWoucmVzZXQoKSxpPT09MT9uPW1uK2xlOmk9PT0tMSYmKG49LW1uLWxlKTtmb3IodmFyIGw9MCxjPWUubGVuZ3RoO2w8YzsrK2wpaWYoISEoaD0odT1lW2xdKS5sZW5ndGgpKWZvcih2YXIgdSxoLGY9dVtoLTFdLHA9RWooZiksZD1mWzFdLzIrUGIsZz1YdChkKSxfPVp0KGQpLHk9MDt5PGg7Kyt5LHA9YixnPUMsXz1QLGY9eCl7dmFyIHg9dVt5XSxiPUVqKHgpLFM9eFsxXS8yK1BiLEM9WHQoUyksUD1adChTKSxrPWItcCxPPWs+PTA/MTotMSxEPU8qayxCPUQ+QmUsST1nKkM7aWYoTWouYWRkKGJuKEkqTypYdChEKSxfKlArSSpadChEKSkpLGErPUI/aytPKndpOmssQl5wPj1yXmI+PXIpe3ZhciBMPWtwKG9jKGYpLG9jKHgpKTtIXyhMKTt2YXIgUj1rcChvLEwpO0hfKFIpO3ZhciBGPShCXms+PTA/LTE6MSkqd24oUlsyXSk7KG4+Rnx8bj09PUYmJihMWzBdfHxMWzFdKSkmJihzKz1CXms+PTA/MTotMSl9fXJldHVybihhPC1sZXx8YTxsZSYmTWo8LWxlKV5zJjF9ZnVuY3Rpb24gQ2soZSx0LHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQoaSksYT1TaygpLHM9dChhKSxsPSExLGMsdSxoLGY9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDpfLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9eSxmLmxpbmVTdGFydD14LGYubGluZUVuZD1iLHU9W10sYz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2YucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD1fLHU9SW0odSk7dmFyIFM9VGsoYyxuKTt1Lmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksRWsodSxnM2UsUyxyLGkpKTpTJiYobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxsJiYoaS5wb2x5Z29uRW5kKCksbD0hMSksdT1jPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gcChTLEMpe2UoUyxDKSYmaS5wb2ludChTLEMpfWZ1bmN0aW9uIGQoUyxDKXtvLnBvaW50KFMsQyl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxvLmxpbmVTdGFydCgpfWZ1bmN0aW9uIF8oKXtmLnBvaW50PXAsby5saW5lRW5kKCl9ZnVuY3Rpb24geShTLEMpe2gucHVzaChbUyxDXSkscy5wb2ludChTLEMpfWZ1bmN0aW9uIHgoKXtzLmxpbmVTdGFydCgpLGg9W119ZnVuY3Rpb24gYigpe3koaFswXVswXSxoWzBdWzFdKSxzLmxpbmVFbmQoKTt2YXIgUz1zLmNsZWFuKCksQz1hLnJlc3VsdCgpLFAsaz1DLmxlbmd0aCxPLEQsQjtpZihoLnBvcCgpLGMucHVzaChoKSxoPW51bGwsISFrKXtpZihTJjEpe2lmKEQ9Q1swXSwoTz1ELmxlbmd0aC0xKT4wKXtmb3IobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxQPTA7UDxPOysrUClpLnBvaW50KChCPURbUF0pWzBdLEJbMV0pO2kubGluZUVuZCgpfXJldHVybn1rPjEmJlMmMiYmQy5wdXNoKEMucG9wKCkuY29uY2F0KEMuc2hpZnQoKSkpLHUucHVzaChDLmZpbHRlcihtM2UpKX19cmV0dXJuIGZ9fWZ1bmN0aW9uIG0zZShlKXtyZXR1cm4gZS5sZW5ndGg+MX1mdW5jdGlvbiBnM2UoZSx0KXtyZXR1cm4oKGU9ZS54KVswXTwwP2VbMV0tbW4tbGU6bW4tZVsxXSktKCh0PXQueClbMF08MD90WzFdLW1uLWxlOm1uLXRbMV0pfXZhciBlNT1DayhmdW5jdGlvbigpe3JldHVybiEwfSxfM2UsdjNlLFstQmUsLW1uXSk7ZnVuY3Rpb24gXzNlKGUpe3ZhciB0PU5hTixyPU5hTixuPU5hTixpO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLGk9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/QmU6LUJlLGw9UmUoby10KTtSZShsLUJlKTxsZT8oZS5wb2ludCh0LHI9KHIrYSkvMj4wP21uOi1tbiksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGUucG9pbnQobyxyKSxpPTApOm4hPT1zJiZsPj1CZSYmKFJlKHQtbik8bGUmJih0LT1uKmxlKSxSZShvLXMpPGxlJiYoby09cypsZSkscj15M2UodCxyLG8sYSksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGk9MCksZS5wb2ludCh0PW8scj1hKSxuPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSx0PXI9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWl9fX1mdW5jdGlvbiB5M2UoZSx0LHIsbil7dmFyIGksbyxhPVh0KGUtcik7cmV0dXJuIFJlKGEpPmxlP2ljKChYdCh0KSoobz1adChuKSkqWHQociktWHQobikqKGk9WnQodCkpKlh0KGUpKS8oaSpvKmEpKToodCtuKS8yfWZ1bmN0aW9uIHYzZShlLHQscixuKXt2YXIgaTtpZihlPT1udWxsKWk9ciptbixuLnBvaW50KC1CZSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChCZSxpKSxuLnBvaW50KEJlLDApLG4ucG9pbnQoQmUsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQmUsLWkpLG4ucG9pbnQoLUJlLDApLG4ucG9pbnQoLUJlLGkpO2Vsc2UgaWYoUmUoZVswXS10WzBdKT5sZSl7dmFyIG89ZVswXTx0WzBdP0JlOi1CZTtpPXIqby8yLG4ucG9pbnQoLW8saSksbi5wb2ludCgwLGkpLG4ucG9pbnQobyxpKX1lbHNlIG4ucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBBayhlKXt2YXIgdD1adChlKSxyPTYqeWUsbj10PjAsaT1SZSh0KT5sZTtmdW5jdGlvbiBvKHUsaCxmLHApe1NqKHAsZSxyLGYsdSxoKX1mdW5jdGlvbiBhKHUsaCl7cmV0dXJuIFp0KHUpKlp0KGgpPnR9ZnVuY3Rpb24gcyh1KXt2YXIgaCxmLHAsZCxnO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkPXA9ITEsZz0xfSxwb2ludDpmdW5jdGlvbihfLHkpe3ZhciB4PVtfLHldLGIsUz1hKF8seSksQz1uP1M/MDpjKF8seSk6Uz9jKF8rKF88MD9CZTotQmUpLHkpOjA7aWYoIWgmJihkPXA9UykmJnUubGluZVN0YXJ0KCksUyE9PXAmJihiPWwoaCx4KSwoIWJ8fGtiKGgsYil8fGtiKHgsYikpJiYoeFsyXT0xKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0sMiksdS5saW5lRW5kKCkpLGg9YjtlbHNlIGlmKGkmJmgmJm5eUyl7dmFyIFA7IShDJmYpJiYoUD1sKHgsaCwhMCkpJiYoZz0wLG4/KHUubGluZVN0YXJ0KCksdS5wb2ludChQWzBdWzBdLFBbMF1bMV0pLHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSk6KHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSx1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdLDMpKSl9UyYmKCFofHwha2IoaCx4KSkmJnUucG9pbnQoeFswXSx4WzFdKSxoPXgscD1TLGY9Q30sbGluZUVuZDpmdW5jdGlvbigpe3AmJnUubGluZUVuZCgpLGg9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gZ3woZCYmcCk8PDF9fX1mdW5jdGlvbiBsKHUsaCxmKXt2YXIgcD1vYyh1KSxkPW9jKGgpLGc9WzEsMCwwXSxfPWtwKHAsZCkseT1YRShfLF8pLHg9X1swXSxiPXkteCp4O2lmKCFiKXJldHVybiFmJiZ1O3ZhciBTPXQqeS9iLEM9LXQqeC9iLFA9a3AoZyxfKSxrPSRFKGcsUyksTz0kRShfLEMpO2RrKGssTyk7dmFyIEQ9UCxCPVhFKGssRCksST1YRShELEQpLEw9QipCLUkqKFhFKGssayktMSk7aWYoIShMPDApKXt2YXIgUj14cihMKSxGPSRFKEQsKC1CLVIpL0kpO2lmKGRrKEYsayksRj1CXyhGKSwhZilyZXR1cm4gRjt2YXIgej11WzBdLFU9aFswXSxXPXVbMV0sWj1oWzFdLHJ0O1U8eiYmKHJ0PXosej1VLFU9cnQpO3ZhciBvdD1VLXosc3Q9UmUob3QtQmUpPGxlLFN0PXN0fHxvdDxsZTtpZighc3QmJlo8VyYmKHJ0PVcsVz1aLFo9cnQpLFN0P3N0P1crWj4wXkZbMV08KFJlKEZbMF0teik8bGU/VzpaKTpXPD1GWzFdJiZGWzFdPD1aOm90PkJlXih6PD1GWzBdJiZGWzBdPD1VKSl7dmFyIGJ0PSRFKEQsKC1CK1IpL0kpO3JldHVybiBkayhidCxrKSxbRixCXyhidCldfX19ZnVuY3Rpb24gYyh1LGgpe3ZhciBmPW4/ZTpCZS1lLHA9MDtyZXR1cm4gdTwtZj9wfD0xOnU+ZiYmKHB8PTIpLGg8LWY/cHw9NDpoPmYmJihwfD04KSxwfXJldHVybiBDayhhLHMsbyxuP1swLC1lXTpbLUJlLGUtQmVdKX1mdW5jdGlvbiBlYnQoZSx0LHIsbixpLG8pe3ZhciBhPWVbMF0scz1lWzFdLGw9dFswXSxjPXRbMV0sdT0wLGg9MSxmPWwtYSxwPWMtcyxkO2lmKGQ9ci1hLCEoIWYmJmQ+MCkpe2lmKGQvPWYsZjwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihmPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPWktYSwhKCFmJiZkPDApKXtpZihkLz1mLGY8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYoZj4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9aWYoZD1uLXMsISghcCYmZD4wKSl7aWYoZC89cCxwPDApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1lbHNlIGlmKHA+MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWlmKGQ9by1zLCEoIXAmJmQ8MCkpe2lmKGQvPXAscDwwKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9ZWxzZSBpZihwPjApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1yZXR1cm4gdT4wJiYoZVswXT1hK3UqZixlWzFdPXMrdSpwKSxoPDEmJih0WzBdPWEraCpmLHRbMV09cytoKnApLCEwfX19fX12YXIgcjU9MWU5LFBrPS1yNTtmdW5jdGlvbiBEcChlLHQscixuKXtmdW5jdGlvbiBpKGMsdSl7cmV0dXJuIGU8PWMmJmM8PXImJnQ8PXUmJnU8PW59ZnVuY3Rpb24gbyhjLHUsaCxmKXt2YXIgcD0wLGQ9MDtpZihjPT1udWxsfHwocD1hKGMsaCkpIT09KGQ9YSh1LGgpKXx8bChjLHUpPDBeaD4wKWRvIGYucG9pbnQocD09PTB8fHA9PT0zP2U6cixwPjE/bjp0KTt3aGlsZSgocD0ocCtoKzQpJTQpIT09ZCk7ZWxzZSBmLnBvaW50KHVbMF0sdVsxXSl9ZnVuY3Rpb24gYShjLHUpe3JldHVybiBSZShjWzBdLWUpPGxlP3U+MD8wOjM6UmUoY1swXS1yKTxsZT91PjA/MjoxOlJlKGNbMV0tdCk8bGU/dT4wPzE6MDp1PjA/MzoyfWZ1bmN0aW9uIHMoYyx1KXtyZXR1cm4gbChjLngsdS54KX1mdW5jdGlvbiBsKGMsdSl7dmFyIGg9YShjLDEpLGY9YSh1LDEpO3JldHVybiBoIT09Zj9oLWY6aD09PTA/dVsxXS1jWzFdOmg9PT0xP2NbMF0tdVswXTpoPT09Mj9jWzFdLXVbMV06dVswXS1jWzBdfXJldHVybiBmdW5jdGlvbihjKXt2YXIgdT1jLGg9U2soKSxmLHAsZCxnLF8seSx4LGIsUyxDLFAsaz17cG9pbnQ6TyxsaW5lU3RhcnQ6TCxsaW5lRW5kOlIscG9seWdvblN0YXJ0OkIscG9seWdvbkVuZDpJfTtmdW5jdGlvbiBPKHosVSl7aSh6LFUpJiZ1LnBvaW50KHosVSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgej0wLFU9MCxXPXAubGVuZ3RoO1U8VzsrK1UpZm9yKHZhciBaPXBbVV0scnQ9MSxvdD1aLmxlbmd0aCxzdD1aWzBdLFN0LGJ0LE10PXN0WzBdLGx0PXN0WzFdO3J0PG90OysrcnQpU3Q9TXQsYnQ9bHQsc3Q9WltydF0sTXQ9c3RbMF0sbHQ9c3RbMV0sYnQ8PW4/bHQ+biYmKE10LVN0KSoobi1idCk+KGx0LWJ0KSooZS1TdCkmJisrejpsdDw9biYmKE10LVN0KSoobi1idCk8KGx0LWJ0KSooZS1TdCkmJi0tejtyZXR1cm4gen1mdW5jdGlvbiBCKCl7dT1oLGY9W10scD1bXSxQPSEwfWZ1bmN0aW9uIEkoKXt2YXIgej1EKCksVT1QJiZ6LFc9KGY9SW0oZikpLmxlbmd0aDsoVXx8VykmJihjLnBvbHlnb25TdGFydCgpLFUmJihjLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYyksYy5saW5lRW5kKCkpLFcmJkVrKGYscyx6LG8sYyksYy5wb2x5Z29uRW5kKCkpLHU9YyxmPXA9ZD1udWxsfWZ1bmN0aW9uIEwoKXtrLnBvaW50PUYscCYmcC5wdXNoKGQ9W10pLEM9ITAsUz0hMSx4PWI9TmFOfWZ1bmN0aW9uIFIoKXtmJiYoRihnLF8pLHkmJlMmJmgucmVqb2luKCksZi5wdXNoKGgucmVzdWx0KCkpKSxrLnBvaW50PU8sUyYmdS5saW5lRW5kKCl9ZnVuY3Rpb24gRih6LFUpe3ZhciBXPWkoeixVKTtpZihwJiZkLnB1c2goW3osVV0pLEMpZz16LF89VSx5PVcsQz0hMSxXJiYodS5saW5lU3RhcnQoKSx1LnBvaW50KHosVSkpO2Vsc2UgaWYoVyYmUyl1LnBvaW50KHosVSk7ZWxzZXt2YXIgWj1beD1NYXRoLm1heChQayxNYXRoLm1pbihyNSx4KSksYj1NYXRoLm1heChQayxNYXRoLm1pbihyNSxiKSldLHJ0PVt6PU1hdGgubWF4KFBrLE1hdGgubWluKHI1LHopKSxVPU1hdGgubWF4KFBrLE1hdGgubWluKHI1LFUpKV07ZWJ0KFoscnQsZSx0LHIsbik/KFN8fCh1LmxpbmVTdGFydCgpLHUucG9pbnQoWlswXSxaWzFdKSksdS5wb2ludChydFswXSxydFsxXSksV3x8dS5saW5lRW5kKCksUD0hMSk6VyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpLFA9ITEpfXg9eixiPVUsUz1XfXJldHVybiBrfX1mdW5jdGlvbiByYnQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9RHAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgVGo9U3MoKSxDaixJayxMayxSYj17c3BoZXJlOkZyLHBvaW50OkZyLGxpbmVTdGFydDp4M2UsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6RnIscG9seWdvbkVuZDpGcn07ZnVuY3Rpb24geDNlKCl7UmIucG9pbnQ9dzNlLFJiLmxpbmVFbmQ9YjNlfWZ1bmN0aW9uIGIzZSgpe1JiLnBvaW50PVJiLmxpbmVFbmQ9RnJ9ZnVuY3Rpb24gdzNlKGUsdCl7ZSo9eWUsdCo9eWUsQ2o9ZSxJaz1YdCh0KSxMaz1adCh0KSxSYi5wb2ludD1TM2V9ZnVuY3Rpb24gUzNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WHQodCksbj1adCh0KSxpPVJlKGUtQ2opLG89WnQoaSksYT1YdChpKSxzPW4qYSxsPUxrKnItSWsqbipvLGM9SWsqcitMaypuKm87VGouYWRkKGJuKHhyKHMqcytsKmwpLGMpKSxDaj1lLElrPXIsTGs9bn1mdW5jdGlvbiBrayhlKXtyZXR1cm4gVGoucmVzZXQoKSx2byhlLFJiKSwrVGp9dmFyIEFqPVtudWxsLG51bGxdLE0zZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6QWp9O2Z1bmN0aW9uIE5iKGUsdCl7cmV0dXJuIEFqWzBdPWUsQWpbMV09dCxrayhNM2UpfXZhciBuYnQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJrKHJbbl0uZ2VvbWV0cnksdCkpcmV0dXJuITA7cmV0dXJuITF9fSxpYnQ9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbihlLHQpe3JldHVybiBvYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2ludDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYob2J0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYWJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoYWJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2J0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoc2J0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihSayhyW25dLHQpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gUmsoZSx0KXtyZXR1cm4gZSYmaWJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/aWJ0W2UudHlwZV0oZSx0KTohMX1mdW5jdGlvbiBvYnQoZSx0KXtyZXR1cm4gTmIoZSx0KT09PTB9ZnVuY3Rpb24gYWJ0KGUsdCl7Zm9yKHZhciByLG4saSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXtpZihuPU5iKGVbb10sdCksbj09PTB8fG8+MCYmKGk9TmIoZVtvXSxlW28tMV0pLGk+MCYmcjw9aSYmbjw9aSYmKHIrbi1pKSooMS1NYXRoLnBvdygoci1uKS9pLDIpKTx6XyppKSlyZXR1cm4hMDtyPW59cmV0dXJuITF9ZnVuY3Rpb24gc2J0KGUsdCl7cmV0dXJuISFUayhlLm1hcChFM2UpLGxidCh0KSl9ZnVuY3Rpb24gRTNlKGUpe3JldHVybiBlPWUubWFwKGxidCksZS5wb3AoKSxlfWZ1bmN0aW9uIGxidChlKXtyZXR1cm5bZVswXSp5ZSxlWzFdKnllXX1mdW5jdGlvbiBjYnQoZSx0KXtyZXR1cm4oZSYmbmJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/bmJ0W2UudHlwZV06UmspKGUsdCl9ZnVuY3Rpb24gdWJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gaGJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gTmsoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIElyKFlFKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSXIoWUUocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSXIoWUUodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJXUpPmxlfSkubWFwKGYpKS5jb25jYXQoSXIoWUUoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJWgpPmxlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPXVidChvLGksOTApLHA9aGJ0KHQsZSxfKSxkPXVidChzLGEsOTApLGc9aGJ0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArbGVdLFsxODAsOTAtbGVdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1sZV0sWzE4MCw4MCtsZV1dKX1mdW5jdGlvbiBmYnQoKXtyZXR1cm4gTmsoKSgpfWZ1bmN0aW9uIHBidChlLHQpe3ZhciByPWVbMF0qeWUsbj1lWzFdKnllLGk9dFswXSp5ZSxvPXRbMV0qeWUsYT1adChuKSxzPVh0KG4pLGw9WnQobyksYz1YdChvKSx1PWEqWnQociksaD1hKlh0KHIpLGY9bCpadChpKSxwPWwqWHQoaSksZD0yKnduKHhyKGZqKG8tbikrYSpsKmZqKGktcikpKSxnPVh0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1YdCh5Kj1kKS9nLGI9WHQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltibihDLFMpKnZyLGJuKFAseHIoUypTK0MqQykpKnZyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcip2cixuKnZyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffWZ1bmN0aW9uIGptKGUpe3JldHVybiBlfXZhciBQaj1TcygpLElqPVNzKCksZGJ0LG1idCxMaixraixYbT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WG0ubGluZVN0YXJ0PVQzZSxYbS5saW5lRW5kPUEzZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1htLmxpbmVTdGFydD1YbS5saW5lRW5kPVhtLnBvaW50PUZyLFBqLmFkZChSZShJaikpLElqLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVBqLzI7cmV0dXJuIFBqLnJlc2V0KCksZX19O2Z1bmN0aW9uIFQzZSgpe1htLnBvaW50PUMzZX1mdW5jdGlvbiBDM2UoZSx0KXtYbS5wb2ludD1nYnQsZGJ0PUxqPWUsbWJ0PWtqPXR9ZnVuY3Rpb24gZ2J0KGUsdCl7SWouYWRkKGtqKmUtTGoqdCksTGo9ZSxraj10fWZ1bmN0aW9uIEEzZSgpe2didChkYnQsbWJ0KX12YXIgUmo9WG07dmFyIERiPTEvMCxEaz1EYixuNT0tRGIsT2s9bjUsUDNlPXtwb2ludDpJM2UsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OkZyLHBvbHlnb25FbmQ6RnIscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9W1tEYixEa10sW241LE9rXV07cmV0dXJuIG41PU9rPS0oRGs9RGI9MS8wKSxlfX07ZnVuY3Rpb24gSTNlKGUsdCl7ZTxEYiYmKERiPWUpLGU+bjUmJihuNT1lKSx0PERrJiYoRGs9dCksdD5PayYmKE9rPXQpfXZhciBPYj1QM2U7dmFyIE5qPTAsRGo9MCxpNT0wLHprPTAsRms9MCx6Yj0wLE9qPTAsemo9MCxvNT0wLHZidCx4YnQsQmgsSGgsbXU9e3BvaW50OnFfLGxpbmVTdGFydDpfYnQsbGluZUVuZDp5YnQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bXUubGluZVN0YXJ0PVIzZSxtdS5saW5lRW5kPU4zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe211LnBvaW50PXFfLG11LmxpbmVTdGFydD1fYnQsbXUubGluZUVuZD15YnR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW81P1tPai9vNSx6ai9vNV06emI/W3prL3piLEZrL3piXTppNT9bTmovaTUsRGovaTVdOltOYU4sTmFOXTtyZXR1cm4gTmo9RGo9aTU9ems9Rms9emI9T2o9emo9bzU9MCxlfX07ZnVuY3Rpb24gcV8oZSx0KXtOais9ZSxEais9dCwrK2k1fWZ1bmN0aW9uIF9idCgpe211LnBvaW50PUwzZX1mdW5jdGlvbiBMM2UoZSx0KXttdS5wb2ludD1rM2UscV8oQmg9ZSxIaD10KX1mdW5jdGlvbiBrM2UoZSx0KXt2YXIgcj1lLUJoLG49dC1IaCxpPXhyKHIqcituKm4pO3prKz1pKihCaCtlKS8yLEZrKz1pKihIaCt0KS8yLHpiKz1pLHFfKEJoPWUsSGg9dCl9ZnVuY3Rpb24geWJ0KCl7bXUucG9pbnQ9cV99ZnVuY3Rpb24gUjNlKCl7bXUucG9pbnQ9RDNlfWZ1bmN0aW9uIE4zZSgpe2JidCh2YnQseGJ0KX1mdW5jdGlvbiBEM2UoZSx0KXttdS5wb2ludD1iYnQscV8odmJ0PUJoPWUseGJ0PUhoPXQpfWZ1bmN0aW9uIGJidChlLHQpe3ZhciByPWUtQmgsbj10LUhoLGk9eHIocipyK24qbik7emsrPWkqKEJoK2UpLzIsRmsrPWkqKEhoK3QpLzIsemIrPWksaT1IaCplLUJoKnQsT2orPWkqKEJoK2UpLHpqKz1pKihIaCt0KSxvNSs9aSozLHFfKEJoPWUsSGg9dCl9dmFyIEZqPW11O2Z1bmN0aW9uIEJrKGUpe3RoaXMuX2NvbnRleHQ9ZX1Cay5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yYWRpdXM9ZSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha31kZWZhdWx0Ont0aGlzLl9jb250ZXh0Lm1vdmVUbyhlK3RoaXMuX3JhZGl1cyx0KSx0aGlzLl9jb250ZXh0LmFyYyhlLHQsdGhpcy5fcmFkaXVzLDAsd2kpO2JyZWFrfX19LHJlc3VsdDpGcn07dmFyIEhqPVNzKCksQmosd2J0LFNidCxhNSxzNSxIaz17cG9pbnQ6RnIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7SGsucG9pbnQ9TzNlfSxsaW5lRW5kOmZ1bmN0aW9uKCl7QmomJk1idCh3YnQsU2J0KSxIay5wb2ludD1Gcn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Qmo9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtCaj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT0rSGo7cmV0dXJuIEhqLnJlc2V0KCksZX19O2Z1bmN0aW9uIE8zZShlLHQpe0hrLnBvaW50PU1idCx3YnQ9YTU9ZSxTYnQ9czU9dH1mdW5jdGlvbiBNYnQoZSx0KXthNS09ZSxzNS09dCxIai5hZGQoeHIoYTUqYTUrczUqczUpKSxhNT1lLHM1PXR9dmFyIFZqPUhrO2Z1bmN0aW9uIFZrKCl7dGhpcy5fc3RyaW5nPVtdfVZrLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTpFYnQoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4oZT0rZSkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9ZSx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPT09MCYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3N0cmluZy5wdXNoKCJNIixlLCIsIix0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fc3RyaW5nLnB1c2goIkwiLGUsIiwiLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NpcmNsZT09bnVsbCYmKHRoaXMuX2NpcmNsZT1FYnQodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQsdGhpcy5fY2lyY2xlKTticmVha319fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgZT10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSxlfWVsc2UgcmV0dXJuIG51bGx9fTtmdW5jdGlvbiBFYnQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9ZnVuY3Rpb24gVGJ0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2byhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihSaikpLFJqLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihWaikpLFZqLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKE9iKSksT2IucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihGaikpLEZqLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLGptKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgVmspOm5ldyBCayh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfWZ1bmN0aW9uIENidChlKXtyZXR1cm57c3RyZWFtOiRtKGUpfX1mdW5jdGlvbiAkbShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVqO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gci5zdHJlYW09dCxyfX1mdW5jdGlvbiBVaigpe31Vai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVqLHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJlYW0ucG9pbnQoZSx0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHFqKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksdm8ocixlLnN0cmVhbShPYikpLHQoT2IucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIEdfKGUsdCxyKXtyZXR1cm4gcWooZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gRmIoZSx0LHIpe3JldHVybiBHXyhlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiBCYihlLHQscil7cmV0dXJuIHFqKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gSGIoZSx0LHIpe3JldHVybiBxaihlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBBYnQ9MTYsejNlPVp0KDMwKnllKTtmdW5jdGlvbiBHaihlLHQpe3JldHVybit0P0IzZShlLHQpOkYzZShlKX1mdW5jdGlvbiBGM2UoZSl7cmV0dXJuICRtKHtwb2ludDpmdW5jdGlvbih0LHIpe3Q9ZSh0LHIpLHRoaXMuc3RyZWFtLnBvaW50KHRbMF0sdFsxXSl9fSl9ZnVuY3Rpb24gQjNlKGUsdCl7ZnVuY3Rpb24gcihuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe3ZhciB5PWMtbix4PXUtaSxiPXkqeSt4Kng7aWYoYj40KnQmJmctLSl7dmFyIFM9YStmLEM9cytwLFA9bCtkLGs9eHIoUypTK0MqQytQKlApLE89d24oUC89ayksRD1SZShSZShQKS0xKTxsZXx8UmUoby1oKTxsZT8obytoKS8yOmJuKEMsUyksQj1lKEQsTyksST1CWzBdLEw9QlsxXSxSPUktbixGPUwtaSx6PXgqUi15KkY7KHoqei9iPnR8fFJlKCh5KlIreCpGKS9iLS41KT4uM3x8YSpmK3MqcCtsKmQ8ejNlKSYmKHIobixpLG8sYSxzLGwsSSxMLEQsUy89ayxDLz1rLFAsZyxfKSxfLnBvaW50KEksTCkscihJLEwsRCxTLEMsUCxjLHUsaCxmLHAsZCxnLF8pKX19cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfPXtwb2ludDp5LGxpbmVTdGFydDp4LGxpbmVFbmQ6Uyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpLF8ubGluZVN0YXJ0PUN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKSxfLmxpbmVTdGFydD14fX07ZnVuY3Rpb24geShPLEQpe089ZShPLEQpLG4ucG9pbnQoT1swXSxPWzFdKX1mdW5jdGlvbiB4KCl7aD1OYU4sXy5wb2ludD1iLG4ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYihPLEQpe3ZhciBCPW9jKFtPLERdKSxJPWUoTyxEKTtyKGgsZix1LHAsZCxnLGg9SVswXSxmPUlbMV0sdT1PLHA9QlswXSxkPUJbMV0sZz1CWzJdLEFidCxuKSxuLnBvaW50KGgsZil9ZnVuY3Rpb24gUygpe18ucG9pbnQ9eSxuLmxpbmVFbmQoKX1mdW5jdGlvbiBDKCl7eCgpLF8ucG9pbnQ9UCxfLmxpbmVFbmQ9a31mdW5jdGlvbiBQKE8sRCl7YihpPU8sRCksbz1oLGE9ZixzPXAsbD1kLGM9ZyxfLnBvaW50PWJ9ZnVuY3Rpb24gaygpe3IoaCxmLHUscCxkLGcsbyxhLGkscyxsLGMsQWJ0LG4pLF8ubGluZUVuZD1TLFMoKX1yZXR1cm4gX319dmFyIEgzZT0kbSh7cG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlKnllLHQqeWUpfX0pO2Z1bmN0aW9uIFYzZShlKXtyZXR1cm4gJG0oe3BvaW50OmZ1bmN0aW9uKHQscil7dmFyIG49ZSh0LHIpO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfWZ1bmN0aW9uIFUzZShlLHQscixuLGkpe2Z1bmN0aW9uIG8oYSxzKXtyZXR1cm4gYSo9bixzKj1pLFt0K2UqYSxyLWUqc119cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7cmV0dXJuWyhhLXQpL2Uqbiwoci1zKS9lKmldfSxvfWZ1bmN0aW9uIFBidChlLHQscixuLGksbyl7dmFyIGE9WnQobykscz1YdChvKSxsPWEqZSxjPXMqZSx1PWEvZSxoPXMvZSxmPShzKnItYSp0KS9lLHA9KHMqdCthKnIpL2U7ZnVuY3Rpb24gZChnLF8pe3JldHVybiBnKj1uLF8qPWksW2wqZy1jKl8rdCxyLWMqZy1sKl9dfXJldHVybiBkLmludmVydD1mdW5jdGlvbihnLF8pe3JldHVybltuKih1KmctaCpfK2YpLGkqKHAtaCpnLXUqXyldfSxkfWZ1bmN0aW9uIFNpKGUpe3JldHVybiBsNShmdW5jdGlvbigpe3JldHVybiBlfSkoKX1mdW5jdGlvbiBsNShlKXt2YXIgdCxyPTE1MCxuPTQ4MCxpPTI1MCxvPTAsYT0wLHM9MCxsPTAsYz0wLHUsaD0wLGY9MSxwPTEsZD1udWxsLGc9ZTUsXz1udWxsLHkseCxiLFM9am0sQz0uNSxQLGssTyxELEI7ZnVuY3Rpb24gSSh6KXtyZXR1cm4gTyh6WzBdKnllLHpbMV0qeWUpfWZ1bmN0aW9uIEwoeil7cmV0dXJuIHo9Ty5pbnZlcnQoelswXSx6WzFdKSx6JiZbelswXSp2cix6WzFdKnZyXX1JLnN0cmVhbT1mdW5jdGlvbih6KXtyZXR1cm4gRCYmQj09PXo/RDpEPUgzZShWM2UodSkoZyhQKFMoQj16KSkpKSl9LEkucHJlY2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz16LGQ9dm9pZCAwLEYoKSk6Z30sSS5wb3N0Y2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz16LF89eT14PWI9bnVsbCxGKCkpOlN9LEkuY2xpcEFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt6P0FrKGQ9eip5ZSk6KGQ9bnVsbCxlNSksRigpKTpkKnZyfSxJLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9ej09bnVsbD8oXz15PXg9Yj1udWxsLGptKTpEcChfPSt6WzBdWzBdLHk9K3pbMF1bMV0seD0relsxXVswXSxiPSt6WzFdWzFdKSxGKCkpOl89PW51bGw/bnVsbDpbW18seV0sW3gsYl1dfSxJLnNjYWxlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt6LFIoKSk6cn0sSS50cmFuc2xhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3pbMF0saT0relsxXSxSKCkpOltuLGldfSxJLmNlbnRlcj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz16WzBdJTM2MCp5ZSxhPXpbMV0lMzYwKnllLFIoKSk6W28qdnIsYSp2cl19LEkucm90YXRlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXpbMF0lMzYwKnllLGw9elsxXSUzNjAqeWUsYz16Lmxlbmd0aD4yP3pbMl0lMzYwKnllOjAsUigpKTpbcyp2cixsKnZyLGMqdnJdfSxJLmFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXolMzYwKnllLFIoKSk6aCp2cn0sSS5yZWZsZWN0WD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj16Py0xOjEsUigpKTpmPDB9LEkucmVmbGVjdFk9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ej8tMToxLFIoKSk6cDwwfSxJLnByZWNpc2lvbj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD1HaihrLEM9eip6KSxGKCkpOnhyKEMpfSxJLmZpdEV4dGVudD1mdW5jdGlvbih6LFUpe3JldHVybiBHXyhJLHosVSl9LEkuZml0U2l6ZT1mdW5jdGlvbih6LFUpe3JldHVybiBGYihJLHosVSl9LEkuZml0V2lkdGg9ZnVuY3Rpb24oeixVKXtyZXR1cm4gQmIoSSx6LFUpfSxJLmZpdEhlaWdodD1mdW5jdGlvbih6LFUpe3JldHVybiBIYihJLHosVSl9O2Z1bmN0aW9uIFIoKXt2YXIgej1QYnQociwwLDAsZixwLGgpLmFwcGx5KG51bGwsdChvLGEpKSxVPShoP1BidDpVM2UpKHIsbi16WzBdLGktelsxXSxmLHAsaCk7cmV0dXJuIHU9dDUocyxsLGMpLGs9UUUodCxVKSxPPVFFKHUsayksUD1HaihrLEMpLEYoKX1mdW5jdGlvbiBGKCl7cmV0dXJuIEQ9Qj1udWxsLEl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksSS5pbnZlcnQ9dC5pbnZlcnQmJkwsUigpfX1mdW5jdGlvbiBWYihlKXt2YXIgdD0wLHI9QmUvMyxuPWw1KGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp5ZSxyPW9bMV0qeWUpOlt0KnZyLHIqdnJdfSxpfWZ1bmN0aW9uIElidChlKXt2YXIgdD1adChlKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuW24qdCxYdChpKS90XX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm5bbi90LHduKGkqdCldfSxyfWZ1bmN0aW9uIFdqKGUsdCl7dmFyIHI9WHQoZSksbj0ocitYdCh0KSkvMjtpZihSZShuKTxsZSlyZXR1cm4gSWJ0KGUpO3ZhciBpPTErciooMipuLXIpLG89eHIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9eHIoaS0yKm4qWHQobCkpL247cmV0dXJuW2MqWHQocyo9biksby1jKlp0KHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWwsdT1ibihzLFJlKGMpKSpjYShjKTtyZXR1cm4gYypuPDAmJih1LT1CZSpjYShzKSpjYShjKSksW3Uvbix3bigoaS0ocypzK2MqYykqbipuKS8oMipuKSldfSxhfWZ1bmN0aW9uIFdfKCl7cmV0dXJuIFZiKFdqKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVrKCl7cmV0dXJuIFdfKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gcTNlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBMYnQoKXt2YXIgZSx0LHI9VWsoKSxuLGk9V18oKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1XXygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1xM2UoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2xlLGcrLjEyKnArbGVdLFtkLS4yMTQqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArbGUsZysuMTY2KnArbGVdLFtkLS4xMTUqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBHXyh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBGYih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gQmIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBIYih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX1mdW5jdGlvbiBxayhlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1adCh0KSxpPVp0KHIpLG89ZShuKmkpO3JldHVybltvKmkqWHQodCksbypYdChyKV19fWZ1bmN0aW9uIFZoKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPXhyKHQqdCtyKnIpLGk9ZShuKSxvPVh0KGkpLGE9WnQoaSk7cmV0dXJuW2JuKHQqbyxuKmEpLHduKG4mJnIqby9uKV19fXZhciBHaz1xayhmdW5jdGlvbihlKXtyZXR1cm4geHIoMi8oMStlKSl9KTtHay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIDIqd24oZS8yKX0pO2Z1bmN0aW9uIGtidCgpe3JldHVybiBTaShHaykuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBXaz1xayhmdW5jdGlvbihlKXtyZXR1cm4oZT1oayhlKSkmJmUvWHQoZSl9KTtXay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtmdW5jdGlvbiBSYnQoKXtyZXR1cm4gU2koV2spLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxODAtLjAwMSl9ZnVuY3Rpb24gWV8oZSx0KXtyZXR1cm5bZSxGXyhJYigobW4rdCkvMikpXX1ZXy5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKmljKGNrKHQpKS1tbl19O2Z1bmN0aW9uIE5idCgpe3JldHVybiBZaihZXykuc2NhbGUoOTYxL3dpKX1mdW5jdGlvbiBZaihlKXt2YXIgdD1TaShlKSxyPXQuY2VudGVyLG49dC5zY2FsZSxpPXQudHJhbnNsYXRlLG89dC5jbGlwRXh0ZW50LGE9bnVsbCxzLGwsYzt0LnNjYWxlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuKGgpLHUoKSk6bigpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaShoKSx1KCkpOmkoKX0sdC5jZW50ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIoaCksdSgpKTpyKCl9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD09bnVsbD9hPXM9bD1jPW51bGw6KGE9K2hbMF1bMF0scz0raFswXVsxXSxsPStoWzFdWzBdLGM9K2hbMV1bMV0pLHUoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19O2Z1bmN0aW9uIHUoKXt2YXIgaD1CZSpuKCksZj10KHdrKHQucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBvKGE9PW51bGw/W1tmWzBdLWgsZlsxXS1oXSxbZlswXStoLGZbMV0raF1dOmU9PT1ZXz9bW01hdGgubWF4KGZbMF0taCxhKSxzXSxbTWF0aC5taW4oZlswXStoLGwpLGNdXTpbW2EsTWF0aC5tYXgoZlsxXS1oLHMpXSxbbCxNYXRoLm1pbihmWzFdK2gsYyldXSl9cmV0dXJuIHUoKX1mdW5jdGlvbiBZayhlKXtyZXR1cm4gSWIoKG1uK2UpLzIpfWZ1bmN0aW9uIGpqKGUsdCl7dmFyIHI9WnQoZSksbj1lPT09dD9YdChlKTpGXyhyL1p0KHQpKS9GXyhZayh0KS9ZayhlKSksaT1yKnVrKFlrKGUpLG4pL247aWYoIW4pcmV0dXJuIFlfO2Z1bmN0aW9uIG8oYSxzKXtpPjA/czwtbW4rbGUmJihzPS1tbitsZSk6cz5tbi1sZSYmKHM9bW4tbGUpO3ZhciBsPWkvdWsoWWsocyksbik7cmV0dXJuW2wqWHQobiphKSxpLWwqWnQobiphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zLGM9Y2EobikqeHIoYSphK2wqbCksdT1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJih1LT1CZSpjYShhKSpjYShsKSksW3UvbiwyKmljKHVrKGkvYywxL24pKS1tbl19LG99ZnVuY3Rpb24gRGJ0KCl7cmV0dXJuIFZiKGpqKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfWZ1bmN0aW9uIGpfKGUsdCl7cmV0dXJuW2UsdF19al8uaW52ZXJ0PWpfO2Z1bmN0aW9uIE9idCgpe3JldHVybiBTaShqXykuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBYaihlLHQpe3ZhciByPVp0KGUpLG49ZT09PXQ/WHQoZSk6KHItWnQodCkpLyh0LWUpLGk9ci9uK2U7aWYoUmUobik8bGUpcmV0dXJuIGpfO2Z1bmN0aW9uIG8oYSxzKXt2YXIgbD1pLXMsYz1uKmE7cmV0dXJuW2wqWHQoYyksaS1sKlp0KGMpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1pLXMsYz1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJihjLT1CZSpjYShhKSpjYShsKSksW2MvbixpLWNhKG4pKnhyKGEqYStsKmwpXX0sb31mdW5jdGlvbiB6YnQoKXtyZXR1cm4gVmIoWGopLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9dmFyIGM1PTEuMzQwMjY0LHU1PS0uMDgxMTA2LGg1PTg5M2UtNixmNT0uMDAzNzk2LGprPXhyKDMpLzIsRzNlPTEyO2Z1bmN0aW9uIFhrKGUsdCl7dmFyIHI9d24oamsqWHQodCkpLG49cipyLGk9bipuKm47cmV0dXJuW2UqWnQocikvKGprKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKSksciooYzUrdTUqbitpKihoNStmNSpuKSldfVhrLmludmVydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10LG49cipyLGk9bipuKm4sbz0wLGEscyxsO288RzNlJiYocz1yKihjNSt1NSpuK2kqKGg1K2Y1Km4pKS10LGw9YzUrMyp1NSpuK2kqKDcqaDUrOSpmNSpuKSxyLT1hPXMvbCxuPXIqcixpPW4qbipuLCEoUmUoYSk8el8pKTsrK28pO3JldHVybltqayplKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKS9adChyKSx3bihYdChyKS9qayldfTtmdW5jdGlvbiBGYnQoKXtyZXR1cm4gU2koWGspLnNjYWxlKDE3Ny4xNTgpfWZ1bmN0aW9uICRrKGUsdCl7dmFyIHI9WnQodCksbj1adChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19JGsuaW52ZXJ0PVZoKGljKTtmdW5jdGlvbiBCYnQoKXtyZXR1cm4gU2koJGspLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9ZnVuY3Rpb24gSGJ0KCl7dmFyIGU9MSx0PTAscj0wLG49MSxpPTEsbz0wLGEscyxsPW51bGwsYyx1LGgsZj0xLHA9MSxkPSRtKHtwb2ludDpmdW5jdGlvbihTLEMpe3ZhciBQPWIoW1MsQ10pO3RoaXMuc3RyZWFtLnBvaW50KFBbMF0sUFsxXSl9fSksZz1qbSxfLHk7ZnVuY3Rpb24geCgpe3JldHVybiBmPWUqbixwPWUqaSxfPXk9bnVsbCxifWZ1bmN0aW9uIGIoUyl7dmFyIEM9U1swXSpmLFA9U1sxXSpwO2lmKG8pe3ZhciBrPVAqYS1DKnM7Qz1DKmErUCpzLFA9a31yZXR1cm5bQyt0LFArcl19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKFMpe3ZhciBDPVNbMF0tdCxQPVNbMV0tcjtpZihvKXt2YXIgaz1QKmErQypzO0M9QyphLVAqcyxQPWt9cmV0dXJuW0MvZixQL3BdfSxiLnN0cmVhbT1mdW5jdGlvbihTKXtyZXR1cm4gXyYmeT09PVM/XzpfPWQoZyh5PVMpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TLGw9Yz11PWg9bnVsbCx4KCkpOmd9LGIuY2xpcEV4dGVudD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TPT1udWxsPyhsPWM9dT1oPW51bGwsam0pOkRwKGw9K1NbMF1bMF0sYz0rU1swXVsxXSx1PStTWzFdWzBdLGg9K1NbMV1bMV0pLHgoKSk6bD09bnVsbD9udWxsOltbbCxjXSxbdSxoXV19LGIuc2NhbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K1MseCgpKTplfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rU1swXSxyPStTWzFdLHgoKSk6W3Qscl19LGIuYW5nbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89UyUzNjAqeWUscz1YdChvKSxhPVp0KG8pLHgoKSk6byp2cn0sYi5yZWZsZWN0WD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TPy0xOjEseCgpKTpuPDB9LGIucmVmbGVjdFk9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Uz8tMToxLHgoKSk6aTwwfSxiLmZpdEV4dGVudD1mdW5jdGlvbihTLEMpe3JldHVybiBHXyhiLFMsQyl9LGIuZml0U2l6ZT1mdW5jdGlvbihTLEMpe3JldHVybiBGYihiLFMsQyl9LGIuZml0V2lkdGg9ZnVuY3Rpb24oUyxDKXtyZXR1cm4gQmIoYixTLEMpfSxiLmZpdEhlaWdodD1mdW5jdGlvbihTLEMpe3JldHVybiBIYihiLFMsQyl9LGJ9ZnVuY3Rpb24gS2soZSx0KXt2YXIgcj10KnQsbj1yKnI7cmV0dXJuW2UqKC44NzA3LS4xMzE5NzkqcituKigtLjAxMzc5MStuKiguMDAzOTcxKnItLjAwMTUyOSpuKSkpLHQqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLS4wNDQ0NzUrLjAyODg3NCpyLS4wMDU5MTYqbikpKV19S2suaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dCxuPTI1LGk7ZG97dmFyIG89cipyLGE9bypvO3ItPWk9KHIqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLS4wNDQ0NzUrLjAyODg3NCpvLS4wMDU5MTYqYSkpKS10KS8oMS4wMDcyMjYrbyooLjAxNTA4NSozK2EqKC0uMDQ0NDc1KjcrLjAyODg3NCo5Km8tLjAwNTkxNioxMSphKSkpfXdoaWxlKFJlKGkpPmxlJiYtLW4+MCk7cmV0dXJuW2UvKC44NzA3KyhvPXIqcikqKC0uMTMxOTc5K28qKC0uMDEzNzkxK28qbypvKiguMDAzOTcxLS4wMDE1MjkqbykpKSkscl19O2Z1bmN0aW9uIFZidCgpe3JldHVybiBTaShLaykuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gWmsoZSx0KXtyZXR1cm5bWnQodCkqWHQoZSksWHQodCldfVprLmludmVydD1WaCh3bik7ZnVuY3Rpb24gVWJ0KCl7cmV0dXJuIFNpKFprKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2xlKX1mdW5jdGlvbiBKayhlLHQpe3ZhciByPVp0KHQpLG49MStadChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19SmsuaW52ZXJ0PVZoKGZ1bmN0aW9uKGUpe3JldHVybiAyKmljKGUpfSk7ZnVuY3Rpb24gcWJ0KCl7cmV0dXJuIFNpKEprKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIFFrKGUsdCl7cmV0dXJuW0ZfKEliKChtbit0KS8yKSksLWVdfVFrLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKmljKGNrKGUpKS1tbl19O2Z1bmN0aW9uIEdidCgpe3ZhciBlPVlqKFFrKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9ZnVuY3Rpb24gVzNlKGUsdCl7cmV0dXJuIGUucGFyZW50PT09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIFkzZShlKXtyZXR1cm4gZS5yZWR1Y2UoajNlLDApL2UubGVuZ3RofWZ1bmN0aW9uIGozZShlLHQpe3JldHVybiBlK3QueH1mdW5jdGlvbiBYM2UoZSl7cmV0dXJuIDErZS5yZWR1Y2UoJDNlLDApfWZ1bmN0aW9uICQzZShlLHQpe3JldHVybiBNYXRoLm1heChlLHQueSl9ZnVuY3Rpb24gSzNlKGUpe2Zvcih2YXIgdDt0PWUuY2hpbGRyZW47KWU9dFswXTtyZXR1cm4gZX1mdW5jdGlvbiBaM2UoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10W3QubGVuZ3RoLTFdO3JldHVybiBlfWZ1bmN0aW9uIFdidCgpe3ZhciBlPVczZSx0PTEscj0xLG49ITE7ZnVuY3Rpb24gaShvKXt2YXIgYSxzPTA7by5lYWNoQWZ0ZXIoZnVuY3Rpb24oZil7dmFyIHA9Zi5jaGlsZHJlbjtwPyhmLng9WTNlKHApLGYueT1YM2UocCkpOihmLng9YT9zKz1lKGYsYSk6MCxmLnk9MCxhPWYpfSk7dmFyIGw9SzNlKG8pLGM9WjNlKG8pLHU9bC54LWUobCxjKS8yLGg9Yy54K2UoYyxsKS8yO3JldHVybiBvLmVhY2hBZnRlcihuP2Z1bmN0aW9uKGYpe2YueD0oZi54LW8ueCkqdCxmLnk9KG8ueS1mLnkpKnJ9OmZ1bmN0aW9uKGYpe2YueD0oZi54LXUpLyhoLXUpKnQsZi55PSgxLShvLnk/Zi55L28ueToxKSkqcn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9byxpKTplfSxpLnNpemU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rb1swXSxyPStvWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStvWzBdLHI9K29bMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEozZShlKXt2YXIgdD0wLHI9ZS5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKCFuKXQ9MTtlbHNlIGZvcig7LS1uPj0wOyl0Kz1yW25dLnZhbHVlO2UudmFsdWU9dH1mdW5jdGlvbiBZYnQoKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoSjNlKX1mdW5jdGlvbiBqYnQoZSl7dmFyIHQ9dGhpcyxyLG49W3RdLGksbyxhO2RvIGZvcihyPW4ucmV2ZXJzZSgpLG49W107dD1yLnBvcCgpOylpZihlKHQpLGk9dC5jaGlsZHJlbixpKWZvcihvPTAsYT1pLmxlbmd0aDtvPGE7KytvKW4ucHVzaChpW29dKTt3aGlsZShuLmxlbmd0aCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWGJ0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG4saTt0PXIucG9wKCk7KWlmKGUodCksbj10LmNoaWxkcmVuLG4pZm9yKGk9bi5sZW5ndGgtMTtpPj0wOy0taSlyLnB1c2gobltpXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gJGJ0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG49W10saSxvLGE7dD1yLnBvcCgpOylpZihuLnB1c2godCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pci5wdXNoKGlbb10pO2Zvcig7dD1uLnBvcCgpOyllKHQpO3JldHVybiB0aGlzfWZ1bmN0aW9uIEtidChlKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciByPStlKHQuZGF0YSl8fDAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO3QudmFsdWU9cn0pfWZ1bmN0aW9uIFpidChlKXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJnQuY2hpbGRyZW4uc29ydChlKX0pfWZ1bmN0aW9uIEpidChlKXtmb3IodmFyIHQ9dGhpcyxyPVEzZSh0LGUpLG49W3RdO3QhPT1yOyl0PXQucGFyZW50LG4ucHVzaCh0KTtmb3IodmFyIGk9bi5sZW5ndGg7ZSE9PXI7KW4uc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiBufWZ1bmN0aW9uIFEzZShlLHQpe2lmKGU9PT10KXJldHVybiBlO3ZhciByPWUuYW5jZXN0b3JzKCksbj10LmFuY2VzdG9ycygpLGk9bnVsbDtmb3IoZT1yLnBvcCgpLHQ9bi5wb3AoKTtlPT09dDspaT1lLGU9ci5wb3AoKSx0PW4ucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24gUWJ0KCl7Zm9yKHZhciBlPXRoaXMsdD1bZV07ZT1lLnBhcmVudDspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIHQydCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiBlMnQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW58fGUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gcjJ0KCl7dmFyIGU9dGhpcyx0PVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24ocil7ciE9PWUmJnQucHVzaCh7c291cmNlOnIucGFyZW50LHRhcmdldDpyfSl9KSx0fWZ1bmN0aW9uIHA1KGUsdCl7dmFyIHI9bmV3IEttKGUpLG49K2UudmFsdWUmJihyLnZhbHVlPWUudmFsdWUpLGksbz1bcl0sYSxzLGwsYztmb3IodD09bnVsbCYmKHQ9ZU1lKTtpPW8ucG9wKCk7KWlmKG4mJihpLnZhbHVlPStpLmRhdGEudmFsdWUpLChzPXQoaS5kYXRhKSkmJihjPXMubGVuZ3RoKSlmb3IoaS5jaGlsZHJlbj1uZXcgQXJyYXkoYyksbD1jLTE7bD49MDstLWwpby5wdXNoKGE9aS5jaGlsZHJlbltsXT1uZXcgS20oc1tsXSkpLGEucGFyZW50PWksYS5kZXB0aD1pLmRlcHRoKzE7cmV0dXJuIHIuZWFjaEJlZm9yZSgkail9ZnVuY3Rpb24gdE1lKCl7cmV0dXJuIHA1KHRoaXMpLmVhY2hCZWZvcmUock1lKX1mdW5jdGlvbiBlTWUoZSl7cmV0dXJuIGUuY2hpbGRyZW59ZnVuY3Rpb24gck1lKGUpe2UuZGF0YT1lLmRhdGEuZGF0YX1mdW5jdGlvbiAkaihlKXt2YXIgdD0wO2RvIGUuaGVpZ2h0PXQ7d2hpbGUoKGU9ZS5wYXJlbnQpJiZlLmhlaWdodDwrK3QpfWZ1bmN0aW9uIEttKGUpe3RoaXMuZGF0YT1lLHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfUttLnByb3RvdHlwZT1wNS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkttLGNvdW50OllidCxlYWNoOmpidCxlYWNoQWZ0ZXI6JGJ0LGVhY2hCZWZvcmU6WGJ0LHN1bTpLYnQsc29ydDpaYnQscGF0aDpKYnQsYW5jZXN0b3JzOlFidCxkZXNjZW5kYW50czp0MnQsbGVhdmVzOmUydCxsaW5rczpyMnQsY29weTp0TWV9O3ZhciBuMnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGkydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX1mdW5jdGlvbiBlOChlKXtmb3IodmFyIHQ9MCxyPShlPWkydChuMnQuY2FsbChlKSkpLmxlbmd0aCxuPVtdLGksbzt0PHI7KWk9ZVt0XSxvJiZvMnQobyxpKT8rK3Q6KG89aU1lKG49bk1lKG4saSkpLHQ9MCk7cmV0dXJuIG99ZnVuY3Rpb24gbk1lKGUsdCl7dmFyIHIsbjtpZihLaih0LGUpKXJldHVyblt0XTtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKWlmKHQ4KHQsZVtyXSkmJktqKGQ1KGVbcl0sdCksZSkpcmV0dXJuW2Vbcl0sdF07Zm9yKHI9MDtyPGUubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPGUubGVuZ3RoOysrbilpZih0OChkNShlW3JdLGVbbl0pLHQpJiZ0OChkNShlW3JdLHQpLGVbbl0pJiZ0OChkNShlW25dLHQpLGVbcl0pJiZLaihhMnQoZVtyXSxlW25dLHQpLGUpKXJldHVybltlW3JdLGVbbl0sdF07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHQ4KGUsdCl7dmFyIHI9ZS5yLXQucixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPDB8fHIqcjxuKm4raSppfWZ1bmN0aW9uIG8ydChlLHQpe3ZhciByPWUuci10LnIrMWUtNixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIEtqKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYoIW8ydChlLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGlNZShlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gb01lKGVbMF0pO2Nhc2UgMjpyZXR1cm4gZDUoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIGEydChlWzBdLGVbMV0sZVsyXSl9fWZ1bmN0aW9uIG9NZShlKXtyZXR1cm57eDplLngseTplLnkscjplLnJ9fWZ1bmN0aW9uIGQ1KGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9ZS5yLG89dC54LGE9dC55LHM9dC5yLGw9by1yLGM9YS1uLHU9cy1pLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK28rbC9oKnUpLzIseToobithK2MvaCp1KS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBhMnQoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPWUucixhPXQueCxzPXQueSxsPXQucixjPXIueCx1PXIueSxoPXIucixmPW4tYSxwPW4tYyxkPWktcyxnPWktdSxfPWwtbyx5PWgtbyx4PW4qbitpKmktbypvLGI9eC1hKmEtcypzK2wqbCxTPXgtYypjLXUqdStoKmgsQz1wKmQtZipnLFA9KGQqUy1nKmIpLyhDKjIpLW4saz0oZypfLWQqeSkvQyxPPShwKmItZipTKS8oQyoyKS1pLEQ9KGYqeS1wKl8pL0MsQj1rKmsrRCpELTEsST0yKihvK1AqaytPKkQpLEw9UCpQK08qTy1vKm8sUj0tKEI/KEkrTWF0aC5zcXJ0KEkqSS00KkIqTCkpLygyKkIpOkwvSSk7cmV0dXJue3g6bitQK2sqUix5OmkrTytEKlIscjpSfX1mdW5jdGlvbiBzMnQoZSx0LHIpe3ZhciBuPWUueC10LngsaSxvLGE9ZS55LXQueSxzLGwsYz1uKm4rYSphO2M/KG89dC5yK3IucixvKj1vLGw9ZS5yK3IucixsKj1sLG8+bD8oaT0oYytsLW8pLygyKmMpLHM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsbC9jLWkqaSkpLHIueD1lLngtaSpuLXMqYSxyLnk9ZS55LWkqYStzKm4pOihpPShjK28tbCkvKDIqYykscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtaSppKSksci54PXQueCtpKm4tcyphLHIueT10LnkraSphK3MqbikpOihyLng9dC54K3IucixyLnk9dC55KX1mdW5jdGlvbiBsMnQoZSx0KXt2YXIgcj1lLnIrdC5yLTFlLTYsbj10LngtZS54LGk9dC55LWUueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBjMnQoZSl7dmFyIHQ9ZS5fLHI9ZS5uZXh0Ll8sbj10LnIrci5yLGk9KHQueCpyLnIrci54KnQucikvbixvPSh0Lnkqci5yK3IueSp0LnIpL247cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gcjgoZSl7dGhpcy5fPWUsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFpqKGUpe2lmKCEoaT1lLmxlbmd0aCkpcmV0dXJuIDA7dmFyIHQscixuLGksbyxhLHMsbCxjLHUsaDtpZih0PWVbMF0sdC54PTAsdC55PTAsIShpPjEpKXJldHVybiB0LnI7aWYocj1lWzFdLHQueD0tci5yLHIueD10LnIsci55PTAsIShpPjIpKXJldHVybiB0LnIrci5yO3MydChyLHQsbj1lWzJdKSx0PW5ldyByOCh0KSxyPW5ldyByOChyKSxuPW5ldyByOChuKSx0Lm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD10LnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9dDt0OmZvcihzPTM7czxpOysrcyl7czJ0KHQuXyxyLl8sbj1lW3NdKSxuPW5ldyByOChuKSxsPXIubmV4dCxjPXQucHJldmlvdXMsdT1yLl8ucixoPXQuXy5yO2RvIGlmKHU8PWgpe2lmKGwydChsLl8sbi5fKSl7cj1sLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGwydChjLl8sbi5fKSl7dD1jLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH1oKz1jLl8ucixjPWMucHJldmlvdXN9d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9dCxuLm5leHQ9cix0Lm5leHQ9ci5wcmV2aW91cz1yPW4sbz1jMnQodCk7KG49bi5uZXh0KSE9PXI7KShhPWMydChuKSk8byYmKHQ9bixvPWEpO3I9dC5uZXh0fWZvcih0PVtyLl9dLG49cjsobj1uLm5leHQpIT09cjspdC5wdXNoKG4uXyk7Zm9yKG49ZTgodCkscz0wO3M8aTsrK3MpdD1lW3NdLHQueC09bi54LHQueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gdTJ0KGUpe3JldHVybiBaaihlKSxlfWZ1bmN0aW9uIGgydChlKXtyZXR1cm4gZT09bnVsbD9udWxsOlViKGUpfWZ1bmN0aW9uIFViKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZX1mdW5jdGlvbiBPcCgpe3JldHVybiAwfWZ1bmN0aW9uIFptKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBhTWUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBkMnQoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj1PcDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoZjJ0KGUpKS5lYWNoQWZ0ZXIoSmoobiwuNSkpLmVhY2hCZWZvcmUocDJ0KDEpKTpvLmVhY2hCZWZvcmUoZjJ0KGFNZSkpLmVhY2hBZnRlcihKaihPcCwxKSkuZWFjaEFmdGVyKEpqKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKHAydChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1oMnQobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOlptKCtvKSxpKTpufSxpfWZ1bmN0aW9uIGYydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIEpqKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9WmoobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBwMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19ZnVuY3Rpb24gbjgoZSl7ZS54MD1NYXRoLnJvdW5kKGUueDApLGUueTA9TWF0aC5yb3VuZChlLnkwKSxlLngxPU1hdGgucm91bmQoZS54MSksZS55MT1NYXRoLnJvdW5kKGUueTEpfWZ1bmN0aW9uIFVoKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYobi10KS9lLnZhbHVlOysrczxsOylhPW9bc10sYS55MD1yLGEueTE9aSxhLngwPXQsYS54MT10Kz1hLnZhbHVlKmN9ZnVuY3Rpb24gbTJ0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKG44KSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmVWgobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIGcydD0iJCIsc01lPXtkZXB0aDotMX0sXzJ0PXt9O2Z1bmN0aW9uIGxNZShlKXtyZXR1cm4gZS5pZH1mdW5jdGlvbiBjTWUoZSl7cmV0dXJuIGUucGFyZW50SWR9ZnVuY3Rpb24geTJ0KCl7dmFyIGU9bE1lLHQ9Y01lO2Z1bmN0aW9uIHIobil7dmFyIGksbyxhPW4ubGVuZ3RoLHMsbCxjLHU9bmV3IEFycmF5KGEpLGgsZixwPXt9O2ZvcihvPTA7bzxhOysrbylpPW5bb10sYz11W29dPW5ldyBLbShpKSwoaD1lKGksbyxuKSkhPW51bGwmJihoKz0iIikmJihmPWcydCsoYy5pZD1oKSxwW2ZdPWYgaW4gcD9fMnQ6Yyk7Zm9yKG89MDtvPGE7KytvKWlmKGM9dVtvXSxoPXQobltvXSxvLG4pLGg9PW51bGx8fCEoaCs9IiIpKXtpZihzKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtzPWN9ZWxzZXtpZihsPXBbZzJ0K2hdLCFsKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitoKTtpZihsPT09XzJ0KXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2gpO2wuY2hpbGRyZW4/bC5jaGlsZHJlbi5wdXNoKGMpOmwuY2hpbGRyZW49W2NdLGMucGFyZW50PWx9aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYocy5wYXJlbnQ9c01lLHMuZWFjaEJlZm9yZShmdW5jdGlvbihkKXtkLmRlcHRoPWQucGFyZW50LmRlcHRoKzEsLS1hfSkuZWFjaEJlZm9yZSgkaikscy5wYXJlbnQ9bnVsbCxhPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBzfXJldHVybiByLmlkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKG4pLHIpOmV9LHIucGFyZW50SWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VWIobikscik6dH0scn1mdW5jdGlvbiB1TWUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gUWooZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gdD90WzBdOmUudH1mdW5jdGlvbiB0WChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbdC5sZW5ndGgtMV06ZS50fWZ1bmN0aW9uIGhNZShlLHQscil7dmFyIG49ci8odC5pLWUuaSk7dC5jLT1uLHQucys9cixlLmMrPW4sdC56Kz1yLHQubSs9cn1mdW5jdGlvbiBmTWUoZSl7Zm9yKHZhciB0PTAscj0wLG49ZS5jaGlsZHJlbixpPW4ubGVuZ3RoLG87LS1pPj0wOylvPW5baV0sby56Kz10LG8ubSs9dCx0Kz1vLnMrKHIrPW8uYyl9ZnVuY3Rpb24gcE1lKGUsdCxyKXtyZXR1cm4gZS5hLnBhcmVudD09PXQucGFyZW50P2UuYTpyfWZ1bmN0aW9uIGk4KGUsdCl7dGhpcy5fPWUsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPXR9aTgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoS20ucHJvdG90eXBlKTtmdW5jdGlvbiBkTWUoZSl7Zm9yKHZhciB0PW5ldyBpOChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBpOChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgaTgobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gdjJ0KCl7dmFyIGU9dU1lLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9ZE1lKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe2ZNZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD10WChkKSxmPVFqKGYpLGQmJmY7KWc9UWooZykscD10WChwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoaE1lKHBNZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhdFgocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVFqKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEptKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyIGVYPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiByWChlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/VWgobCxyLG4saSxnP24rPWQqXy9nOm8pOkptKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgbzg9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7clgodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KGVYKTtmdW5jdGlvbiB4MnQoKXt2YXIgZT1vOCx0PSExLHI9MSxuPTEsaT1bMF0sbz1PcCxhPU9wLHM9T3AsbD1PcCxjPU9wO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGYueDA9Zi55MD0wLGYueDE9cixmLnkxPW4sZi5lYWNoQmVmb3JlKGgpLGk9WzBdLHQmJmYuZWFjaEJlZm9yZShuOCksZn1mdW5jdGlvbiBoKGYpe3ZhciBwPWlbZi5kZXB0aF0sZD1mLngwK3AsZz1mLnkwK3AsXz1mLngxLXAseT1mLnkxLXA7XzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxmLngwPWQsZi55MD1nLGYueDE9XyxmLnkxPXksZi5jaGlsZHJlbiYmKHA9aVtmLmRlcHRoKzFdPW8oZikvMixkKz1jKGYpLXAsZys9YShmKS1wLF8tPXMoZiktcCx5LT1sKGYpLXAsXzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxlKGYsZCxnLF8seSkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZix1KTp0fSx1LnNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2ZbMF0sbj0rZlsxXSx1KTpbcixuXX0sdS50aWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKGYpLHUpOmV9LHUucGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcihmKS5wYWRkaW5nT3V0ZXIoZik6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKGYpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nQm90dG9tKGYpLnBhZGRpbmdMZWZ0KGYpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Wm0oK2YpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6Y30sdX1mdW5jdGlvbiBiMnQoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX1mdW5jdGlvbiB3MnQoZSx0LHIsbixpKXsoZS5kZXB0aCYxP0ptOlVoKShlLHQscixuLGkpfXZhciBTMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP1VoKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTpKbShjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9clgodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShlWCk7ZnVuY3Rpb24gTTJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG4saT1lW3ItMV0sbz0wOysrdDxyOyluPWksaT1lW3RdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn1mdW5jdGlvbiBFMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj0wLGk9MCxvLGE9ZVtyLTFdLHMsbD0wOysrdDxyOylvPWEsYT1lW3RdLGwrPXM9b1swXSphWzFdLWFbMF0qb1sxXSxuKz0ob1swXSthWzBdKSpzLGkrPShvWzFdK2FbMV0pKnM7cmV0dXJuIGwqPTMsW24vbCxpL2xdfWZ1bmN0aW9uIFQydChlLHQscil7cmV0dXJuKHRbMF0tZVswXSkqKHJbMV0tZVsxXSktKHRbMV0tZVsxXSkqKHJbMF0tZVswXSl9ZnVuY3Rpb24gbU1lKGUsdCl7cmV0dXJuIGVbMF0tdFswXXx8ZVsxXS10WzFdfWZ1bmN0aW9uIEMydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8dDsrK2kpe2Zvcig7bj4xJiZUMnQoZVtyW24tMl1dLGVbcltuLTFdXSxlW2ldKTw9MDspLS1uO3JbbisrXT1pfXJldHVybiByLnNsaWNlKDAsbil9ZnVuY3Rpb24gQTJ0KGUpe2lmKChyPWUubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciB0LHIsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkocik7Zm9yKHQ9MDt0PHI7Kyt0KW5bdF09WytlW3RdWzBdLCtlW3RdWzFdLHRdO2ZvcihuLnNvcnQobU1lKSx0PTA7dDxyOysrdClpW3RdPVtuW3RdWzBdLC1uW3RdWzFdXTt2YXIgbz1DMnQobiksYT1DMnQoaSkscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKHQ9by5sZW5ndGgtMTt0Pj0wOy0tdCljLnB1c2goZVtuW29bdF1dWzJdXSk7Zm9yKHQ9K3M7dDxhLmxlbmd0aC1sOysrdCljLnB1c2goZVtuW2FbdF1dWzJdXSk7cmV0dXJuIGN9ZnVuY3Rpb24gUDJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX1mdW5jdGlvbiBJMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9ZnVuY3Rpb24gYWMoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12YXIgTDJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPW49PW51bGw/MDorbixpPWk9PW51bGw/MToraSxhcmd1bWVudHMubGVuZ3RoPT09MT8oaT1uLG49MCk6aS09bixmdW5jdGlvbigpe3JldHVybiB0KCkqaStufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIGE4PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3ZhciBvLGE7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGZ1bmN0aW9uKCl7dmFyIHM7aWYobyE9bnVsbClzPW8sbz1udWxsO2Vsc2UgZG8gbz10KCkqMi0xLHM9dCgpKjItMSxhPW8qbytzKnM7d2hpbGUoIWF8fGE+MSk7cmV0dXJuIG4raSpzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBrMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49YTguc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBzOD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIFIydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7dmFyIGk9czguc291cmNlKHQpKG4pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpKCkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBOMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO2Z1bmN0aW9uIGhpKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShlKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKGUpO2JyZWFrfXJldHVybiB0aGlzfWZ1bmN0aW9uIHNjKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5pbnRlcnBvbGF0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmludGVycG9sYXRvcih0KS5kb21haW4oZSk7YnJlYWt9cmV0dXJuIHRoaXN9VGIoKTt2YXIgRDJ0PUFycmF5LnByb3RvdHlwZSxYXz1EMnQubWFwLGxjPUQydC5zbGljZTt2YXIgbDg9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gZ3UoKXt2YXIgZT1KaSgpLHQ9W10scj1bXSxuPWw4O2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPWUuZ2V0KGEpO2lmKCFzKXtpZihuIT09bDgpcmV0dXJuIG47ZS5zZXQoYSxzPXQucHVzaChvKSl9cmV0dXJuIHJbKHMtMSklci5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W10sZT1KaSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspZS5oYXMoYz0obD1vW2FdKSsiIil8fGUuc2V0KGMsdC5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sYy5jYWxsKG8pLGkpOnIuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGd1KHQscikudW5rbm93bihuKX0saGkuYXBwbHkoaSxhcmd1bWVudHMpLGl9ZnVuY3Rpb24gUW0oKXt2YXIgZT1ndSgpLnVua25vd24odm9pZCAwKSx0PWUuZG9tYWluLHI9ZS5yYW5nZSxuPVswLDFdLGksbyxhPSExLHM9MCxsPTAsYz0uNTtkZWxldGUgZS51bmtub3duO2Z1bmN0aW9uIHUoKXt2YXIgaD10KCkubGVuZ3RoLGY9blsxXTxuWzBdLHA9bltmLTBdLGQ9blsxLWZdO2k9KGQtcCkvTWF0aC5tYXgoMSxoLXMrbCoyKSxhJiYoaT1NYXRoLmZsb29yKGkpKSxwKz0oZC1wLWkqKGgtcykpKmMsbz1pKigxLXMpLGEmJihwPU1hdGgucm91bmQocCksbz1NYXRoLnJvdW5kKG8pKTt2YXIgZz1JcihoKS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIHAraSpffSk7cmV0dXJuIHIoZj9nLnJldmVyc2UoKTpnKX1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoaCksdSgpKTp0KCl9LGUucmFuZ2U9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49WytoWzBdLCtoWzFdXSx1KCkpOm4uc2xpY2UoKX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBuPVsraFswXSwraFsxXV0sYT0hMCx1KCl9LGUuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUuc3RlcD1mdW5jdGlvbigpe3JldHVybiBpfSxlLnJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhaCx1KCkpOmF9LGUucGFkZGluZz1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K2gpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSxoKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStoLHUoKSk6bH0sZS5hbGlnbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFFtKHQoKSxuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxoaS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBPMnQoZSl7dmFyIHQ9ZS5jb3B5O3JldHVybiBlLnBhZGRpbmc9ZS5wYWRkaW5nT3V0ZXIsZGVsZXRlIGUucGFkZGluZ0lubmVyLGRlbGV0ZSBlLnBhZGRpbmdPdXRlcixlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTzJ0KHQoKSl9LGV9ZnVuY3Rpb24gdGcoKXtyZXR1cm4gTzJ0KFFtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIHoydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gbTUoZSl7cmV0dXJuK2V9dmFyIEYydD1bMCwxXTtmdW5jdGlvbiBuaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBuWChlLHQpe3JldHVybih0LT1lPStlKT9mdW5jdGlvbihyKXtyZXR1cm4oci1lKS90fTp6MnQoaXNOYU4odCk/TmFOOi41KX1mdW5jdGlvbiBCMnQoZSl7dmFyIHQ9ZVswXSxyPWVbZS5sZW5ndGgtMV0sbjtyZXR1cm4gdD5yJiYobj10LHQ9cixyPW4pLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKHIsaSkpfX1mdW5jdGlvbiBnTWUoZSx0LHIpe3ZhciBuPWVbMF0saT1lWzFdLG89dFswXSxhPXRbMV07cmV0dXJuIGk8bj8obj1uWChpLG4pLG89cihhLG8pKToobj1uWChuLGkpLG89cihvLGEpKSxmdW5jdGlvbihzKXtyZXR1cm4gbyhuKHMpKX19ZnVuY3Rpb24gX01lKGUsdCxyKXt2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxhPS0xO2ZvcihlW25dPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8bjspaVthXT1uWChlW2FdLGVbYSsxXSksb1thXT1yKHRbYV0sdFthKzFdKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGw9eXMoZSxzLDEsbiktMTtyZXR1cm4gb1tsXShpW2xdKHMpKX19ZnVuY3Rpb24gcWgoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gJF8oKXt2YXIgZT1GMnQsdD1GMnQscj1uYyxuLGksbyxhPW5pLHMsbCxjO2Z1bmN0aW9uIHUoKXtyZXR1cm4gcz1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk+Mj9fTWU6Z01lLGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/bzoobHx8KGw9cyhlLm1hcChuKSx0LHIpKSkobihhKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBhKGkoKGN8fChjPXModCxlLm1hcChuKSx6aSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKGYsbTUpLGE9PT1uaXx8KGE9QjJ0KGUpKSx1KCkpOmUuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGYpLHUoKSk6dC5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHQ9bGMuY2FsbChmKSxyPWRMLHUoKX0saC5jbGFtcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1mP0IydChlKTpuaSxoKTphIT09bml9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Zix1KCkpOnJ9LGgudW5rbm93bj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mLGgpOm99LGZ1bmN0aW9uKGYscCl7cmV0dXJuIG49ZixpPXAsdSgpfX1mdW5jdGlvbiBnNShlLHQpe3JldHVybiAkXygpKGUsdCl9ZnVuY3Rpb24gYzgoZSx0LHIsbil7dmFyIGk9dGwoZSx0LHIpLG87c3dpdGNoKG49THAobj09bnVsbD8iLGYiOm4pLG4udHlwZSl7Y2FzZSJzIjp7dmFyIGE9TWF0aC5tYXgoTWF0aC5hYnMoZSksTWF0aC5hYnModCkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89b2soaSxhKSkmJihuLnByZWNpc2lvbj1vKSxXRShuLGEpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89YWsoaSxNYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihvPWlrKGkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiB4bihuKX1mdW5jdGlvbiBpbChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIGFiKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10KCk7cmV0dXJuIGM4KGlbMF0saVtpLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIsbil9LGUubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49dCgpLGk9MCxvPW4ubGVuZ3RoLTEsYT1uW2ldLHM9bltvXSxsO3JldHVybiBzPGEmJihsPWEsYT1zLHM9bCxsPWksaT1vLG89bCksbD14XyhhLHMsciksbD4wPyhhPU1hdGguZmxvb3IoYS9sKSpsLHM9TWF0aC5jZWlsKHMvbCkqbCxsPXhfKGEscyxyKSk6bDwwJiYoYT1NYXRoLmNlaWwoYSpsKS9sLHM9TWF0aC5mbG9vcihzKmwpL2wsbD14XyhhLHMscikpLGw+MD8obltpXT1NYXRoLmZsb29yKGEvbCkqbCxuW29dPU1hdGguY2VpbChzL2wpKmwsdChuKSk6bDwwJiYobltpXT1NYXRoLmNlaWwoYSpsKS9sLG5bb109TWF0aC5mbG9vcihzKmwpL2wsdChuKSksZX0sZX1mdW5jdGlvbiBPbigpe3ZhciBlPWc1KG5pLG5pKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsT24oKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxpbChlKX1mdW5jdGlvbiB1OChlKXt2YXIgdDtmdW5jdGlvbiByKG4pe3JldHVybiBpc05hTihuPStuKT90Om59cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKG4sbTUpLHIpOmUuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHU4KGUpLnVua25vd24odCl9LGU9YXJndW1lbnRzLmxlbmd0aD9YXy5jYWxsKGUsbTUpOlswLDFdLGlsKHIpfWZ1bmN0aW9uIGg4KGUsdCl7ZT1lLnNsaWNlKCk7dmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lW3JdLG89ZVtuXSxhO3JldHVybiBvPGkmJihhPXIscj1uLG49YSxhPWksaT1vLG89YSksZVtyXT10LmZsb29yKGkpLGVbbl09dC5jZWlsKG8pLGV9ZnVuY3Rpb24gSDJ0KGUpe3JldHVybiBNYXRoLmxvZyhlKX1mdW5jdGlvbiBWMnQoZSl7cmV0dXJuIE1hdGguZXhwKGUpfWZ1bmN0aW9uIHlNZShlKXtyZXR1cm4tTWF0aC5sb2coLWUpfWZ1bmN0aW9uIHZNZShlKXtyZXR1cm4tTWF0aC5leHAoLWUpfWZ1bmN0aW9uIHhNZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gYk1lKGUpe3JldHVybiBlPT09MTA/eE1lOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIHdNZShlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gVTJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIF81KGUpe3ZhciB0PWUoSDJ0LFYydCkscj10LmRvbWFpbixuPTEwLGksbztmdW5jdGlvbiBhKCl7cmV0dXJuIGk9d01lKG4pLG89Yk1lKG4pLHIoKVswXTwwPyhpPVUydChpKSxvPVUydChvKSxlKHlNZSx2TWUpKTplKEgydCxWMnQpLHR9cmV0dXJuIHQuYmFzZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rcyxhKCkpOm59LHQuZG9tYWluPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHMpLGEoKSk6cigpfSx0LnRpY2tzPWZ1bmN0aW9uKHMpe3ZhciBsPXIoKSxjPWxbMF0sdT1sW2wubGVuZ3RoLTFdLGg7KGg9dTxjKSYmKGY9YyxjPXUsdT1mKTt2YXIgZj1pKGMpLHA9aSh1KSxkLGcsXyx5PXM9PW51bGw/MTA6K3MseD1bXTtpZighKG4lMSkmJnAtZjx5KXtpZihmPU1hdGgucm91bmQoZiktMSxwPU1hdGgucm91bmQocCkrMSxjPjApe2Zvcig7ZjxwOysrZilmb3IoZz0xLGQ9byhmKTtnPG47KytnKWlmKF89ZCpnLCEoXzxjKSl7aWYoXz51KWJyZWFrO3gucHVzaChfKX19ZWxzZSBmb3IoO2Y8cDsrK2YpZm9yKGc9bi0xLGQ9byhmKTtnPj0xOy0tZylpZihfPWQqZywhKF88Yykpe2lmKF8+dSlicmVhazt4LnB1c2goXyl9fWVsc2UgeD1hYihmLHAsTWF0aC5taW4ocC1mLHkpKS5tYXAobyk7cmV0dXJuIGg/eC5yZXZlcnNlKCk6eH0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHMsbCl7aWYobD09bnVsbCYmKGw9bj09PTEwPyIuMGUiOiIsIiksdHlwZW9mIGwhPSJmdW5jdGlvbiImJihsPXhuKGwpKSxzPT09MS8wKXJldHVybiBsO3M9PW51bGwmJihzPTEwKTt2YXIgYz1NYXRoLm1heCgxLG4qcy90LnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGg9dS9vKE1hdGgucm91bmQoaSh1KSkpO3JldHVybiBoKm48bi0uNSYmKGgqPW4pLGg8PWM/bCh1KToiIn19LHQubmljZT1mdW5jdGlvbigpe3JldHVybiByKGg4KHIoKSx7Zmxvb3I6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5mbG9vcihpKHMpKSl9LGNlaWw6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5jZWlsKGkocykpKX19KSl9LHR9ZnVuY3Rpb24gY2MoKXt2YXIgZT1fNSgkXygpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsY2MoKSkuYmFzZShlLmJhc2UoKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxlfWZ1bmN0aW9uIHEydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmxvZzFwKE1hdGguYWJzKHQvZSkpfX1mdW5jdGlvbiBHMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5leHBtMShNYXRoLmFicyh0KSkqZX19ZnVuY3Rpb24geTUoZSl7dmFyIHQ9MSxyPWUocTJ0KHQpLEcydCh0KSk7cmV0dXJuIHIuY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShxMnQodD0rbiksRzJ0KHQpKTp0fSxpbChyKX1mdW5jdGlvbiBmOCgpe3ZhciBlPXk1KCRfKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxmOCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxoaS5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVzJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiBTTWUoZSl7cmV0dXJuIGU8MD8tTWF0aC5zcXJ0KC1lKTpNYXRoLnNxcnQoZSl9ZnVuY3Rpb24gTU1lKGUpe3JldHVybiBlPDA/LWUqZTplKmV9ZnVuY3Rpb24gdjUoZSl7dmFyIHQ9ZShuaSxuaSkscj0xO2Z1bmN0aW9uIG4oKXtyZXR1cm4gcj09PTE/ZShuaSxuaSk6cj09PS41P2UoU01lLE1NZSk6ZShXMnQociksVzJ0KDEvcikpfXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStpLG4oKSk6cn0saWwodCl9ZnVuY3Rpb24gS18oKXt2YXIgZT12NSgkXygpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsS18oKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0saGkuYXBwbHkoZSxhcmd1bWVudHMpLGV9ZnVuY3Rpb24gWTJ0KCl7cmV0dXJuIEtfLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gZWcoKXt2YXIgZT1bXSx0PVtdLHI9W10sbjtmdW5jdGlvbiBpKCl7dmFyIGE9MCxzPU1hdGgubWF4KDEsdC5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShzLTEpOysrYTxzOylyW2EtMV09c2EoZSxhL3MpO3JldHVybiBvfWZ1bmN0aW9uIG8oYSl7cmV0dXJuIGlzTmFOKGE9K2EpP246dFt5cyhyLGEpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9dC5pbmRleE9mKGEpO3JldHVybiBzPDA/W05hTixOYU5dOltzPjA/cltzLTFdOmVbMF0sczxyLmxlbmd0aD9yW3NdOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBzPTAsbD1hLmxlbmd0aCxjO3M8bDsrK3MpYz1hW3NdLGMhPW51bGwmJiFpc05hTihjPStjKSYmZS5wdXNoKGMpO3JldHVybiBlLnNvcnQob2EpLGkoKX0sby5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGEpLGkoKSk6dC5zbGljZSgpfSxvLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxvKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBlZygpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKG4pfSxoaS5hcHBseShvLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcWIoKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV0sbztmdW5jdGlvbiBhKGwpe3JldHVybiBsPD1sP2lbeXMobixsLDAscildOm99ZnVuY3Rpb24gcygpe3ZhciBsPS0xO2ZvcihuPW5ldyBBcnJheShyKTsrK2w8cjspbltsXT0oKGwrMSkqdC0obC1yKSplKS8ocisxKTtyZXR1cm4gYX1yZXR1cm4gYS5kb21haW49ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2xbMF0sdD0rbFsxXSxzKCkpOltlLHRdfSxhLnJhbmdlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShpPWxjLmNhbGwobCkpLmxlbmd0aC0xLHMoKSk6aS5zbGljZSgpfSxhLmludmVydEV4dGVudD1mdW5jdGlvbihsKXt2YXIgYz1pLmluZGV4T2YobCk7cmV0dXJuIGM8MD9bTmFOLE5hTl06YzwxP1tlLG5bMF1dOmM+PXI/W25bci0xXSx0XTpbbltjLTFdLG5bY11dfSxhLnVua25vd249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJihvPWwpLGF9LGEudGhyZXNob2xkcz1mdW5jdGlvbigpe3JldHVybiBuLnNsaWNlKCl9LGEuY29weT1mdW5jdGlvbigpe3JldHVybiBxYigpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSkudW5rbm93bihvKX0saGkuYXBwbHkoaWwoYSksYXJndW1lbnRzKX1mdW5jdGlvbiBwOCgpe3ZhciBlPVsuNV0sdD1bMCwxXSxyLG49MTtmdW5jdGlvbiBpKG8pe3JldHVybiBvPD1vP3RbeXMoZSxvLDAsbildOnJ9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWxjLmNhbGwobyksbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bGMuY2FsbChvKSxuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLGkpOnQuc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24obyl7dmFyIGE9dC5pbmRleE9mKG8pO3JldHVybltlW2EtMV0sZVthXV19LGkudW5rbm93bj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vLGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBwOCgpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKHIpfSxoaS5hcHBseShpLGFyZ3VtZW50cyl9dmFyIGlYPW5ldyBEYXRlLG9YPW5ldyBEYXRlO2Z1bmN0aW9uIGJyKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGJyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gaVguc2V0VGltZSgrbyksb1guc2V0VGltZSgrYSksZShpWCksZShvWCksTWF0aC5mbG9vcihyKGlYLG9YKSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIGQ4PWJyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7ZDguZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9icihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpkOH07dmFyIFpfPWQ4LGFYPWQ4LnJhbmdlO3ZhciBKXz0xZTMsdWM9NmU0LEdiPTM2ZTUsbTg9ODY0ZTUsZzg9NjA0OGU1O3ZhciBqMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqSl8pfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0pffSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRXz1qMnQsc1g9ajJ0LnJhbmdlO3ZhciBYMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpKXyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqdWMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3VjfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxfOD1YMnQsJDJ0PVgydC5yYW5nZTt2YXIgSzJ0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqSl8tZS5nZXRNaW51dGVzKCkqdWMpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHk4PUsydCxaMnQ9SzJ0LnJhbmdlO3ZhciBKMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqdWMpL204fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLHR5PUoydCxRMnQ9SjJ0LnJhbmdlO2Z1bmN0aW9uIGV5KGUpe3JldHVybiBicihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnVjKS9nOH0pfXZhciByZz1leSgwKSxyeT1leSgxKSxsWD1leSgyKSxjWD1leSgzKSx6cD1leSg0KSx1WD1leSg1KSxoWD1leSg2KSxmWD1yZy5yYW5nZSx0d3Q9cnkucmFuZ2UsZXd0PWxYLnJhbmdlLHJ3dD1jWC5yYW5nZSxud3Q9enAucmFuZ2UsaXd0PXVYLnJhbmdlLG93dD1oWC5yYW5nZTt2YXIgYXd0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLHY4PWF3dCxzd3Q9YXd0LnJhbmdlO3ZhciBwWD1icihmdW5jdGlvbihlKXtlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pO3BYLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpicihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07dmFyIEdoPXBYLGx3dD1wWC5yYW5nZTt2YXIgY3d0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KnVjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS91Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSkseDg9Y3d0LHV3dD1jd3QucmFuZ2U7dmFyIGh3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLGI4PWh3dCxmd3Q9aHd0LnJhbmdlO3ZhciBwd3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvbTh9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksbnk9cHd0LGR3dD1wd3QucmFuZ2U7ZnVuY3Rpb24gaXkoZSl7cmV0dXJuIGJyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZzh9KX12YXIgbmc9aXkoMCksb3k9aXkoMSksZFg9aXkoMiksbVg9aXkoMyksRnA9aXkoNCksZ1g9aXkoNSksX1g9aXkoNikseVg9bmcucmFuZ2UsbXd0PW95LnJhbmdlLGd3dD1kWC5yYW5nZSxfd3Q9bVgucmFuZ2UseXd0PUZwLnJhbmdlLHZ3dD1nWC5yYW5nZSx4d3Q9X1gucmFuZ2U7dmFyIGJ3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSx3OD1id3Qsd3d0PWJ3dC5yYW5nZTt2YXIgdlg9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTt2WC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6YnIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3ZhciBXaD12WCxTd3Q9dlgucmFuZ2U7ZnVuY3Rpb24geFgoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGJYKGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHg1KGUsdCxyKXtyZXR1cm57eTplLG06dCxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBTNShlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz1iNShpKSx1PXc1KGkpLGg9YjUobyksZj13NShvKSxwPWI1KGEpLGQ9dzUoYSksZz1iNShzKSxfPXc1KHMpLHk9YjUobCkseD13NShsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDpQd3QsZTpQd3QsZjpqTWUsZzpuRWUsRzpvRWUsSDpHTWUsSTpXTWUsajpZTWUsTDpOd3QsbTpYTWUsTTokTWUscDpzdCxxOlN0LFE6a3d0LHM6Und0LFM6S01lLHU6Wk1lLFU6Sk1lLFY6UU1lLHc6dEVlLFc6ZUVlLHg6bnVsbCxYOm51bGwseTpyRWUsWTppRWUsWjphRWUsIiUiOkx3dH0sUz17YTpidCxBOk10LGI6bHQsQjpLdCxjOm51bGwsZDpJd3QsZTpJd3QsZjp1RWUsZzp4RWUsRzp3RWUsSDpzRWUsSTpsRWUsajpjRWUsTDpPd3QsbTpoRWUsTTpmRWUscDpfdCxxOmN0LFE6a3d0LHM6Und0LFM6cEVlLHU6ZEVlLFU6bUVlLFY6Z0VlLHc6X0VlLFc6eUVlLHg6bnVsbCxYOm51bGwseTp2RWUsWTpiRWUsWjpTRWUsIiUiOkx3dH0sQz17YTpCLEE6SSxiOkwsQjpSLGM6RixkOkN3dCxlOkN3dCxmOkhNZSxnOlR3dCxHOkV3dCxIOkF3dCxJOkF3dCxqOk9NZSxMOkJNZSxtOkRNZSxNOnpNZSxwOkQscTpOTWUsUTpVTWUsczpxTWUsUzpGTWUsdTpQTWUsVTpJTWUsVjpMTWUsdzpBTWUsVzprTWUseDp6LFg6VSx5OlR3dCxZOkV3dCxaOlJNZSwiJSI6Vk1lfTtiLng9UChyLGIpLGIuWD1QKG4sYiksYi5jPVAodCxiKSxTLng9UChyLFMpLFMuWD1QKG4sUyksUy5jPVAodCxTKTtmdW5jdGlvbiBQKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9W10scHQ9LTEsaHQ9MCx3dD1YLmxlbmd0aCxrdCxpZSxlZTtmb3IoZHQgaW5zdGFuY2VvZiBEYXRlfHwoZHQ9bmV3IERhdGUoK2R0KSk7KytwdDx3dDspWC5jaGFyQ29kZUF0KHB0KT09PTM3JiYocS5wdXNoKFguc2xpY2UoaHQscHQpKSwoaWU9TXd0W2t0PVguY2hhckF0KCsrcHQpXSkhPW51bGw/a3Q9WC5jaGFyQXQoKytwdCk6aWU9a3Q9PT0iZSI/IiAiOiIwIiwoZWU9ZXRba3RdKSYmKGt0PWVlKGR0LGllKSkscS5wdXNoKGt0KSxodD1wdCsxKTtyZXR1cm4gcS5wdXNoKFguc2xpY2UoaHQscHQpKSxxLmpvaW4oIiIpfX1mdW5jdGlvbiBrKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9eDUoMTkwMCx2b2lkIDAsMSkscHQ9TyhxLFgsZHQrPSIiLDApLGh0LHd0O2lmKHB0IT1kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcSlyZXR1cm4gbmV3IERhdGUocS5RKTtpZigicyJpbiBxKXJldHVybiBuZXcgRGF0ZShxLnMqMWUzKygiTCJpbiBxP3EuTDowKSk7aWYoZXQmJiEoIloiaW4gcSkmJihxLlo9MCksInAiaW4gcSYmKHEuSD1xLkglMTIrcS5wKjEyKSxxLm09PT12b2lkIDAmJihxLm09InEiaW4gcT9xLnE6MCksIlYiaW4gcSl7aWYocS5WPDF8fHEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBxfHwocS53PTEpLCJaImluIHE/KGh0PWJYKHg1KHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/b3kuY2VpbChodCk6b3koaHQpLGh0PW55Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9eFgoeDUocS55LDAsMSkpLHd0PWh0LmdldERheSgpLGh0PXd0PjR8fHd0PT09MD9yeS5jZWlsKGh0KTpyeShodCksaHQ9dHkub2Zmc2V0KGh0LChxLlYtMSkqNykscS55PWh0LmdldEZ1bGxZZWFyKCkscS5tPWh0LmdldE1vbnRoKCkscS5kPWh0LmdldERhdGUoKSsocS53KzYpJTcpfWVsc2UoIlciaW4gcXx8IlUiaW4gcSkmJigidyJpbiBxfHwocS53PSJ1ImluIHE/cS51JTc6IlciaW4gcT8xOjApLHd0PSJaImluIHE/YlgoeDUocS55LDAsMSkpLmdldFVUQ0RheSgpOnhYKHg1KHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYlgocSkpOnhYKHEpfX1mdW5jdGlvbiBPKFgsZXQsZHQscSl7Zm9yKHZhciBwdD0wLGh0PWV0Lmxlbmd0aCx3dD1kdC5sZW5ndGgsa3QsaWU7cHQ8aHQ7KXtpZihxPj13dClyZXR1cm4tMTtpZihrdD1ldC5jaGFyQ29kZUF0KHB0KyspLGt0PT09Mzcpe2lmKGt0PWV0LmNoYXJBdChwdCsrKSxpZT1DW2t0IGluIE13dD9ldC5jaGFyQXQocHQrKyk6a3RdLCFpZXx8KHE9aWUoWCxkdCxxKSk8MClyZXR1cm4tMX1lbHNlIGlmKGt0IT1kdC5jaGFyQ29kZUF0KHErKykpcmV0dXJuLTF9cmV0dXJuIHF9ZnVuY3Rpb24gRChYLGV0LGR0KXt2YXIgcT1jLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5wPXVbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQihYLGV0LGR0KXt2YXIgcT1wLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWRbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSShYLGV0LGR0KXt2YXIgcT1oLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWZbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTChYLGV0LGR0KXt2YXIgcT15LmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPXhbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUihYLGV0LGR0KXt2YXIgcT1nLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPV9bcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRihYLGV0LGR0KXtyZXR1cm4gTyhYLHQsZXQsZHQpfWZ1bmN0aW9uIHooWCxldCxkdCl7cmV0dXJuIE8oWCxyLGV0LGR0KX1mdW5jdGlvbiBVKFgsZXQsZHQpe3JldHVybiBPKFgsbixldCxkdCl9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gYVtYLmdldERheSgpXX1mdW5jdGlvbiBaKFgpe3JldHVybiBvW1guZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KFgpe3JldHVybiBsW1guZ2V0TW9udGgoKV19ZnVuY3Rpb24gb3QoWCl7cmV0dXJuIHNbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChYKXtyZXR1cm4gaVsrKFguZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChYKXtyZXR1cm4gMSt+fihYLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gYnQoWCl7cmV0dXJuIGFbWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoWCl7cmV0dXJuIG9bWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbHQoWCl7cmV0dXJuIGxbWC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChYKXtyZXR1cm4gc1tYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIF90KFgpe3JldHVybiBpWysoWC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGN0KFgpe3JldHVybiAxK35+KFguZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLGIpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITEpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLFMpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjUGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITApO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH19fXZhciBNd3Q9eyItIjoiIixfOiIgIiwwOiIwIn0seG89L15ccypcZCsvLEVNZT0vXiUvLFRNZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gQnIoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gQ01lKGUpe3JldHVybiBlLnJlcGxhY2UoVE1lLCJcXCQmIil9ZnVuY3Rpb24gYjUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKENNZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHc1KGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIEFNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSU1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJNZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBETWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEN3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQk1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBWTWUoZSx0LHIpe3ZhciBuPUVNZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIFVNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHFNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFB3dChlLHQpe3JldHVybiBCcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIEdNZShlLHQpe3JldHVybiBCcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBXTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIFlNZShlLHQpe3JldHVybiBCcigxK3R5LmNvdW50KEdoKGUpLGUpLHQsMyl9ZnVuY3Rpb24gTnd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBqTWUoZSx0KXtyZXR1cm4gTnd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gWE1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gJE1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gS01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gWk1lKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBKTWUoZSx0KXtyZXR1cm4gQnIocmcuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIER3dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD96cChlKTp6cC5jZWlsKGUpfWZ1bmN0aW9uIFFNZShlLHQpe3JldHVybiBlPUR3dChlKSxCcih6cC5jb3VudChHaChlKSxlKSsoR2goZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIHRFZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBlRWUoZSx0KXtyZXR1cm4gQnIocnkuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIHJFZShlLHQpe3JldHVybiBCcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gbkVlKGUsdCl7cmV0dXJuIGU9RHd0KGUpLEJyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBpRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIG9FZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/enAoZSk6enAuY2VpbChlKSxCcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gYUVlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnIodC82MHwwLCIwIiwyKStCcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBJd3QoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBzRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gbEVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBjRWUoZSx0KXtyZXR1cm4gQnIoMStueS5jb3VudChXaChlKSxlKSx0LDMpfWZ1bmN0aW9uIE93dChlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gdUVlKGUsdCl7cmV0dXJuIE93dChlLHQpKyIwMDAifWZ1bmN0aW9uIGhFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGZFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHBFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIGRFZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gbUVlKGUsdCl7cmV0dXJuIEJyKG5nLmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB6d3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/RnAoZSk6RnAuY2VpbChlKX1mdW5jdGlvbiBnRWUoZSx0KXtyZXR1cm4gZT16d3QoZSksQnIoRnAuY291bnQoV2goZSksZSkrKFdoKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBfRWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24geUVlKGUsdCl7cmV0dXJuIEJyKG95LmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB2RWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIHhFZShlLHQpe3JldHVybiBlPXp3dChlKSxCcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gYkVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB3RWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP0ZwKGUpOkZwLmNlaWwoZSksQnIoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIFNFZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gTHd0KCl7cmV0dXJuIiUifWZ1bmN0aW9uIGt3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBSd3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgV2IsTTUsd1gsYXksRTU7Uzgoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBTOChlKXtyZXR1cm4gV2I9UzUoZSksTTU9V2IuZm9ybWF0LHdYPVdiLnBhcnNlLGF5PVdiLnV0Y0Zvcm1hdCxFNT1XYi51dGNQYXJzZSxXYn12YXIgU1g9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiI7ZnVuY3Rpb24gTUVlKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9dmFyIEVFZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9NRWU6YXkoU1gpLEZ3dD1FRWU7ZnVuY3Rpb24gVEVlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIENFZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP1RFZTpFNShTWCksQnd0PUNFZTt2YXIgVDU9MWUzLEM1PVQ1KjYwLEE1PUM1KjYwLFA1PUE1KjI0LEFFZT1QNSo3LEh3dD1QNSozMCxNWD1QNSozNjU7ZnVuY3Rpb24gUEVlKGUpe3JldHVybiBuZXcgRGF0ZShlKX1mdW5jdGlvbiBJRWUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gTTgoZSx0LHIsbixpLG8sYSxzLGwpe3ZhciBjPWc1KG5pLG5pKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxwPWwoIjolUyIpLGQ9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksXz1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksYj1sKCIlWSIpLFM9W1thLDEsVDVdLFthLDUsNSpUNV0sW2EsMTUsMTUqVDVdLFthLDMwLDMwKlQ1XSxbbywxLEM1XSxbbyw1LDUqQzVdLFtvLDE1LDE1KkM1XSxbbywzMCwzMCpDNV0sW2ksMSxBNV0sW2ksMywzKkE1XSxbaSw2LDYqQTVdLFtpLDEyLDEyKkE1XSxbbiwxLFA1XSxbbiwyLDIqUDVdLFtyLDEsQUVlXSxbdCwxLEh3dF0sW3QsMywzKkh3dF0sW2UsMSxNWF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9b2IoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj10bChPL01YLEQvTVgsayksaz1lKTpMPyhMPVNbSS9TW0wtMV1bMl08U1tMXVsyXS9JP0wtMTpMXSxCPUxbMV0saz1MWzBdKTooQj1NYXRoLm1heCh0bChPLEQsayksMSksaz1zKX1yZXR1cm4gQj09bnVsbD9rOmsuZXZlcnkoQil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGspe3JldHVybiBuZXcgRGF0ZSh1KGspKX0sYy5kb21haW49ZnVuY3Rpb24oayl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChYXy5jYWxsKGssSUVlKSk6aCgpLm1hcChQRWUpfSxjLnRpY2tzPWZ1bmN0aW9uKGssTyl7dmFyIEQ9aCgpLEI9RFswXSxJPURbRC5sZW5ndGgtMV0sTD1JPEIsUjtyZXR1cm4gTCYmKFI9QixCPUksST1SKSxSPVAoayxCLEksTyksUj1SP1IucmFuZ2UoQixJKzEpOltdLEw/Ui5yZXZlcnNlKCk6Un0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGssTyl7cmV0dXJuIE89PW51bGw/QzpsKE8pfSxjLm5pY2U9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCk7cmV0dXJuKGs9UChrLERbMF0sRFtELmxlbmd0aC0xXSxPKSk/aChoOChELGspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoYyxNOChlLHQscixuLGksbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIFliKCl7cmV0dXJuIGhpLmFwcGx5KE04KEdoLHY4LHJnLHR5LHk4LF84LFFfLFpfLE01KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiBWd3QoKXtyZXR1cm4gaGkuYXBwbHkoTTgoV2gsdzgsbmcsbnksYjgseDgsUV8sWl8sYXkpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEU4KCl7dmFyIGU9MCx0PTEscixuLGksbyxhPW5pLHM9ITEsbDtmdW5jdGlvbiBjKHUpe3JldHVybiBpc05hTih1PSt1KT9sOmEoaT09PTA/LjU6KHU9KG8odSktcikqaSxzP01hdGgubWF4KDAsTWF0aC5taW4oMSx1KSk6dSkpfXJldHVybiBjLmRvbWFpbj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vKGU9K3VbMF0pLG49byh0PSt1WzFdKSxpPXI9PT1uPzA6MS8obi1yKSxjKTpbZSx0XX0sYy5jbGFtcD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0hIXUsYyk6c30sYy5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxjKTphfSxjLnVua25vd249ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dSxjKTpsfSxmdW5jdGlvbih1KXtyZXR1cm4gbz11LHI9dShlKSxuPXUodCksaT1yPT09bj8wOjEvKG4tciksY319ZnVuY3Rpb24gQnAoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkuaW50ZXJwb2xhdG9yKGUuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gVDgoKXt2YXIgZT1pbChFOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLFQ4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRVgoKXt2YXIgZT1fNShFOCgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsRVgoKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUWCgpe3ZhciBlPXk1KEU4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQzgoKXt2YXIgZT12NShFOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQzgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIFV3dCgpe3JldHVybiBDOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEE4KCl7dmFyIGU9W10sdD1uaTtmdW5jdGlvbiByKG4pe2lmKCFpc05hTihuPStuKSlyZXR1cm4gdCgoeXMoZSxuKS0xKS8oZS5sZW5ndGgtMSkpfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpYT1uW2ldLGEhPW51bGwmJiFpc05hTihhPSthKSYmZS5wdXNoKGEpO3JldHVybiBlLnNvcnQob2EpLHJ9LHIuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEE4KHQpLmRvbWFpbihlKX0sc2MuYXBwbHkocixhcmd1bWVudHMpfWZ1bmN0aW9uIFA4KCl7dmFyIGU9MCx0PS41LHI9MSxuLGksbyxhLHMsbD1uaSxjLHU9ITEsaDtmdW5jdGlvbiBmKHApe3JldHVybiBpc05hTihwPStwKT9oOihwPS41KygocD0rYyhwKSktaSkqKHA8aT9hOnMpLGwodT9NYXRoLm1heCgwLE1hdGgubWluKDEscCkpOnApKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YyhlPStwWzBdKSxpPWModD0rcFsxXSksbz1jKHI9K3BbMl0pLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZik6W2UsdCxyXX0sZi5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXAsZik6dX0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9cCxmKTpsfSxmLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9cCxmKTpofSxmdW5jdGlvbihwKXtyZXR1cm4gYz1wLG49cChlKSxpPXAodCksbz1wKHIpLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZn19ZnVuY3Rpb24gSTgoKXt2YXIgZT1pbChQOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLEk4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ1goKXt2YXIgZT1fNShQOCgpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQ1goKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBBWCgpe3ZhciBlPXk1KFA4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxBWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTDgoKXt2YXIgZT12NShQOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsTDgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIHF3dCgpe3JldHVybiBMOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIHRlKGUpe2Zvcih2YXIgdD1lLmxlbmd0aC82fDAscj1uZXcgQXJyYXkodCksbj0wO248dDspcltuXT0iIyIrZS5zbGljZShuKjYsKytuKjYpO3JldHVybiByfXZhciBqYj10ZSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIik7dmFyIEd3dD10ZSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2Iik7dmFyIFd3dD10ZSgiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2Iik7dmFyIFl3dD10ZSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4Iik7dmFyIGp3dD10ZSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIik7dmFyIFh3dD10ZSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIik7dmFyICR3dD10ZSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5Iik7dmFyIEt3dD10ZSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIik7dmFyIFp3dD10ZSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7dmFyIEp3dD10ZSgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIik7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIHVMKGVbZS5sZW5ndGgtMV0pfXZhciBQWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAodGUpLFF3dD1JZShQWCk7dmFyIElYPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcCh0ZSksdFN0PUllKElYKTt2YXIgTFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKHRlKSxlU3Q9SWUoTFgpO3ZhciBrWD1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAodGUpLHJTdD1JZShrWCk7dmFyIFJYPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcCh0ZSksblN0PUllKFJYKTt2YXIgTlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKHRlKSxpU3Q9SWUoTlgpO3ZhciBEWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAodGUpLG9TdD1JZShEWCk7dmFyIE9YPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcCh0ZSksYVN0PUllKE9YKTt2YXIgelg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKHRlKSxzU3Q9SWUoelgpO3ZhciBGWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAodGUpLGxTdD1JZShGWCk7dmFyIEJYPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcCh0ZSksY1N0PUllKEJYKTt2YXIgSFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKHRlKSx1U3Q9SWUoSFgpO3ZhciBWWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAodGUpLGhTdD1JZShWWCk7dmFyIFVYPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcCh0ZSksZlN0PUllKFVYKTt2YXIgcVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKHRlKSxwU3Q9SWUocVgpO3ZhciBHWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAodGUpLGRTdD1JZShHWCk7dmFyIFdYPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcCh0ZSksbVN0PUllKFdYKTt2YXIgWVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKHRlKSxnU3Q9SWUoWVgpO3ZhciBqWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAodGUpLF9TdD1JZShqWCk7dmFyIFhYPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcCh0ZSkseVN0PUllKFhYKTt2YXIgJFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKHRlKSx2U3Q9SWUoJFgpO3ZhciBLWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAodGUpLHhTdD1JZShLWCk7dmFyIFpYPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcCh0ZSksYlN0PUllKFpYKTt2YXIgSlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKHRlKSx3U3Q9SWUoSlgpO3ZhciBRWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAodGUpLFNTdD1JZShRWCk7dmFyIHQkPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcCh0ZSksTVN0PUllKHQkKTt2YXIgZSQ9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKHRlKSxFU3Q9SWUoZSQpO2Z1bmN0aW9uIFRTdChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LWUqKDM1LjM0LWUqKDIzODEuNzMtZSooNjQwMi43LWUqKDcwMjQuNzItZSoyNzEwLjU3KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrZSooMTcwLjczK2UqKDUyLjgyLWUqKDEzMS40Ni1lKigxNzYuNTgtZSo2Ny4zNykpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K2UqKDQ0Mi4zNi1lKigyNDgyLjQzLWUqKDYxNjcuMjQtZSooNjYxNC45NC1lKjI0NzUuNjcpKSkpKSkpKyIpIn12YXIgQ1N0PUVfKGxhKDMwMCwuNSwwKSxsYSgtMjQwLC41LDEpKTt2YXIgQVN0PUVfKGxhKC0xMDAsLjc1LC4zNSksbGEoODAsMS41LC44KSksUFN0PUVfKGxhKDI2MCwuNzUsLjM1KSxsYSg4MCwxLjUsLjgpKSxrOD1sYSgpO2Z1bmN0aW9uIElTdChlKXsoZTwwfHxlPjEpJiYoZS09TWF0aC5mbG9vcihlKSk7dmFyIHQ9TWF0aC5hYnMoZS0uNSk7cmV0dXJuIGs4Lmg9MzYwKmUtMTAwLGs4LnM9MS41LTEuNSp0LGs4Lmw9LjgtLjkqdCxrOCsiIn12YXIgUjg9Y3UoKSxMRWU9TWF0aC5QSS8zLGtFZT1NYXRoLlBJKjIvMztmdW5jdGlvbiBMU3QoZSl7dmFyIHQ7cmV0dXJuIGU9KC41LWUpKk1hdGguUEksUjgucj0yNTUqKHQ9TWF0aC5zaW4oZSkpKnQsUjguZz0yNTUqKHQ9TWF0aC5zaW4oZStMRWUpKSp0LFI4LmI9MjU1Kih0PU1hdGguc2luKGUra0VlKSkqdCxSOCsiIn1mdW5jdGlvbiBrU3QoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzNC42MStlKigxMTcyLjMzLWUqKDEwNzkzLjU2LWUqKDMzMzAwLjEyLWUqKDM4Mzk0LjQ5LWUqMTQ4MjUuMDUpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyMy4zMStlKig1NTcuMzMrZSooMTIyNS4zMy1lKigzNTc0Ljk2LWUqKDEwNzMuNzcrZSo3MDcuNTYpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNy4yK2UqKDMyMTEuMS1lKigxNTMyNy45Ny1lKigyNzgxNC1lKigyMjU2OS4xOC1lKjY4MzguNjYpKSkpKSkpKyIpIn1mdW5jdGlvbiBOOChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX12YXIgUlN0PU44KHRlKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksTlN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksRFN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksT1N0PU44KHRlKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciByJD1NYXRoLmFicyxCbz1NYXRoLmF0YW4yLGlnPU1hdGguY29zLHpTdD1NYXRoLm1heCxEOD1NYXRoLm1pbixfdT1NYXRoLnNpbixzeT1NYXRoLnNxcnQsYm89MWUtMTIseXU9TWF0aC5QSSxJNT15dS8yLGhjPTIqeXU7ZnVuY3Rpb24gRlN0KGUpe3JldHVybiBlPjE/MDplPC0xP3l1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBuJChlKXtyZXR1cm4gZT49MT9JNTplPD0tMT8tSTU6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIFJFZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBORWUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gREVlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gT0VlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIHpFZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBGRWUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj1oKmwtdSpjO2lmKCEoZipmPGJvKSlyZXR1cm4gZj0odSoodC1vKS1oKihlLWkpKS9mLFtlK2YqbCx0K2YqY119ZnVuY3Rpb24gTzgoZSx0LHIsbixpLG8sYSl7dmFyIHM9ZS1yLGw9dC1uLGM9KGE/bzotbykvc3kocypzK2wqbCksdT1jKmwsaD0tYypzLGY9ZSt1LHA9dCtoLGQ9cit1LGc9bitoLF89KGYrZCkvMix5PShwK2cpLzIseD1kLWYsYj1nLXAsUz14KngrYipiLEM9aS1vLFA9ZipnLWQqcCxrPShiPDA/LTE6MSkqc3koelN0KDAsQypDKlMtUCpQKSksTz0oUCpiLXgqaykvUyxEPSgtUCp4LWIqaykvUyxCPShQKmIreCprKS9TLEk9KC1QKngrYiprKS9TLEw9Ty1fLFI9RC15LEY9Qi1fLHo9SS15O3JldHVybiBMKkwrUipSPkYqRit6KnomJihPPUIsRD1JKSx7Y3g6TyxjeTpELHgwMTotdSx5MDE6LWgseDExOk8qKGkvQy0xKSx5MTE6RCooaS9DLTEpfX1mdW5jdGlvbiBCU3QoKXt2YXIgZT1SRWUsdD1ORWUscj1xZSgwKSxuPW51bGwsaT1ERWUsbz1PRWUsYT16RWUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYyx1LGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktSTUsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JNSxnPXIkKGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1icygpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPmJvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5oYy1ibylzLm1vdmVUbyhmKmlnKHApLGYqX3UocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5ibyYmKHMubW92ZVRvKGgqaWcoZCksaCpfdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPmJvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6c3koaCpoK2YqZikpLEQ9RDgociQoZi1oKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQj1ELEk9RCxMLFI7aWYoTz5ibyl7dmFyIEY9biQoTy9oKl91KGspKSx6PW4kKE8vZipfdShrKSk7KEMtPUYqMik+Ym8/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPmJvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKmlnKHkpLFc9ZipfdSh5KSxaPWgqaWcoUykscnQ9aCpfdShTKTtpZihEPmJvKXt2YXIgb3Q9ZippZyh4KSxzdD1mKl91KHgpLFN0PWgqaWcoYiksYnQ9aCpfdShiKSxNdDtpZihnPHl1JiYoTXQ9RkVlKFUsVyxTdCxidCxvdCxzdCxaLHJ0KSkpe3ZhciBsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL191KEZTdCgobHQqX3QrS3QqY3QpLyhzeShsdCpsdCtLdCpLdCkqc3koX3QqX3QrY3QqY3QpKSkvMiksZXQ9c3koTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9RDgoRCwoaC1ldCkvKFgtMSkpLEk9RDgoRCwoZi1ldCkvKFgrMSkpfX1QPmJvP0k+Ym8/KEw9TzgoU3QsYnQsVSxXLGYsSSxfKSxSPU84KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEJvKEwueTAxLEwueDAxKSxCbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxCbyhMLnkwMSxMLngwMSksQm8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixCbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEJvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEJvKFIueTExLFIueDExKSxCbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Ym8pfHwhKEM+Ym8pP3MubGluZVRvKFoscnQpOkI+Ym8/KEw9TzgoWixydCxvdCxzdCxoLC1CLF8pLFI9TzgoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsQm8oTC55MDEsTC54MDEpLEJvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEJvKEwueTAxLEwueDAxKSxCbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEJvKEwuY3krTC55MTEsTC5jeCtMLngxMSksQm8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixCbyhSLnkxMSxSLngxMSksQm8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXl1LzI7cmV0dXJuW2lnKHUpKmMsX3UodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH1mdW5jdGlvbiBIU3QoZSl7dGhpcy5fY29udGV4dD1lfUhTdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha319fTtmdW5jdGlvbiBZaChlKXtyZXR1cm4gbmV3IEhTdChlKX1mdW5jdGlvbiBYYihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiAkYihlKXtyZXR1cm4gZVsxXX1mdW5jdGlvbiB2dSgpe3ZhciBlPVhiLHQ9JGIscj1xZSghMCksbj1udWxsLGk9WWgsbz1udWxsO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGg9ITEsZjtmb3Iobj09bnVsbCYmKG89aShmPWJzKCkpKSxsPTA7bDw9YzsrK2wpIShsPGMmJnIodT1zW2xdLGwscykpPT09aCYmKChoPSFoKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxoJiZvLnBvaW50KCtlKHUsbCxzKSwrdCh1LGwscykpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6ZX0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOnR9LGEuZGVmaW5lZD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCEhcyksYSk6cn0sYS5jdXJ2ZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zLG4hPW51bGwmJihvPWkobikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz09bnVsbD9uPW89bnVsbDpvPWkobj1zKSxhKTpufSxhfWZ1bmN0aW9uIHo4KCl7dmFyIGU9WGIsdD1udWxsLHI9cWUoMCksbj0kYixpPXFlKCEwKSxvPW51bGwsYT1ZaCxzPW51bGw7ZnVuY3Rpb24gbCh1KXt2YXIgaCxmLHAsZD11Lmxlbmd0aCxnLF89ITEseSx4PW5ldyBBcnJheShkKSxiPW5ldyBBcnJheShkKTtmb3Iobz09bnVsbCYmKHM9YSh5PWJzKCkpKSxoPTA7aDw9ZDsrK2gpe2lmKCEoaDxkJiZpKGc9dVtoXSxoLHUpKT09PV8paWYoXz0hXylmPWgscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCkscD1oLTE7cD49ZjstLXApcy5wb2ludCh4W3BdLGJbcF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfV8mJih4W2hdPStlKGcsaCx1KSxiW2hdPStyKGcsaCx1KSxzLnBvaW50KHQ/K3QoZyxoLHUpOnhbaF0sbj8rbihnLGgsdSk6YltoXSkpfWlmKHkpcmV0dXJuIHM9bnVsbCx5KyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gdnUoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSx0PW51bGwsbCk6ZX0sbC54MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTplfSxsLngxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbj1udWxsLGwpOnJ9LGwueTA9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6cn0sbC55MT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj11PT1udWxsP251bGw6dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6bn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShyKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoISF1KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXUsbyE9bnVsbCYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP289cz1udWxsOnM9YShvPXUpLGwpOm99LGx9ZnVuY3Rpb24gVlN0KGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIFVTdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBxU3QoKXt2YXIgZT1VU3QsdD1WU3Qscj1udWxsLG49cWUoMCksaT1xZShoYyksbz1xZSgwKTtmdW5jdGlvbiBhKHMpe3ZhciBsLGM9cy5sZW5ndGgsdSxoLGY9MCxwPW5ldyBBcnJheShjKSxkPW5ldyBBcnJheShjKSxnPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKGhjLE1hdGgubWF4KC1oYyxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseSx4PU1hdGgubWluKE1hdGguYWJzKF8pL2Msby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooXzwwPy0xOjEpLFM7Zm9yKGw9MDtsPGM7KytsKShTPWRbcFtsXT1sXT0rZShzW2xdLGwscykpPjAmJihmKz1TKTtmb3IodCE9bnVsbD9wLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gdChkW0NdLGRbUF0pfSk6ciE9bnVsbCYmcC5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIHIoc1tDXSxzW1BdKX0pLGw9MCxoPWY/KF8tYypiKS9mOjA7bDxjOysrbCxnPXkpdT1wW2xdLFM9ZFt1XSx5PWcrKFM+MD9TKmg6MCkrYixkW3VdPXtkYXRhOnNbdV0saW5kZXg6bCx2YWx1ZTpTLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp5LHBhZEFuZ2xlOnh9O3JldHVybiBkfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOmV9LGEuc29ydFZhbHVlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLHI9bnVsbCxhKTp0fSxhLnNvcnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyx0PW51bGwsYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTpvfSxhfXZhciBGOD1LYihZaCk7ZnVuY3Rpb24gR1N0KGUpe3RoaXMuX2N1cnZlPWV9R1N0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX2N1cnZlLnBvaW50KHQqTWF0aC5zaW4oZSksdCotTWF0aC5jb3MoZSkpfX07ZnVuY3Rpb24gS2IoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEdTdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fWZ1bmN0aW9uIFpiKGUpe3ZhciB0PWUuY3VydmU7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KEtiKHIpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIGkkKCl7cmV0dXJuIFpiKHZ1KCkuY3VydmUoRjgpKX1mdW5jdGlvbiBvJCgpe3ZhciBlPXo4KCkuY3VydmUoRjgpLHQ9ZS5jdXJ2ZSxyPWUubGluZVgwLG49ZS5saW5lWDEsaT1lLmxpbmVZMCxvPWUubGluZVkxO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUuc3RhcnRBbmdsZT1lLngwLGRlbGV0ZSBlLngwLGUuZW5kQW5nbGU9ZS54MSxkZWxldGUgZS54MSxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmlubmVyUmFkaXVzPWUueTAsZGVsZXRlIGUueTAsZS5vdXRlclJhZGl1cz1lLnkxLGRlbGV0ZSBlLnkxLGUubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gWmIocigpKX0sZGVsZXRlIGUubGluZVgwLGUubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFpiKG4oKSl9LGRlbGV0ZSBlLmxpbmVYMSxlLmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBaYihpKCkpfSxkZWxldGUgZS5saW5lWTAsZS5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gWmIobygpKX0sZGVsZXRlIGUubGluZVkxLGUuY3VydmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChLYihhKSk6dCgpLl9jdXJ2ZX0sZX1mdW5jdGlvbiBseShlLHQpe3JldHVyblsodD0rdCkqTWF0aC5jb3MoZS09TWF0aC5QSS8yKSx0Kk1hdGguc2luKGUpXX12YXIgTDU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEJFZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gSEVlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBhJChlKXt2YXIgdD1CRWUscj1IRWUsbj1YYixpPSRiLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1MNS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1icygpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIFZFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIFVFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIHFFZShlLHQscixuLGkpe3ZhciBvPWx5KHQsciksYT1seSh0LHI9KHIraSkvMikscz1seShuLHIpLGw9bHkobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gV1N0KCl7cmV0dXJuIGEkKFZFZSl9ZnVuY3Rpb24gWVN0KCl7cmV0dXJuIGEkKFVFZSl9ZnVuY3Rpb24galN0KCl7dmFyIGU9YSQocUVlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBrNT17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L3l1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsaGMpfX07dmFyIEI4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvNSkvMjtlLm1vdmVUbygtMypyLC1yKSxlLmxpbmVUbygtciwtciksZS5saW5lVG8oLXIsLTMqciksZS5saW5lVG8ociwtMypyKSxlLmxpbmVUbyhyLC1yKSxlLmxpbmVUbygzKnIsLXIpLGUubGluZVRvKDMqcixyKSxlLmxpbmVUbyhyLHIpLGUubGluZVRvKHIsMypyKSxlLmxpbmVUbygtciwzKnIpLGUubGluZVRvKC1yLHIpLGUubGluZVRvKC0zKnIsciksZS5jbG9zZVBhdGgoKX19O3ZhciBYU3Q9TWF0aC5zcXJ0KC4zMzMzMzMzMzMzMzMzMzMzKSxHRWU9WFN0KjIsSDg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC9HRWUpLG49cipYU3Q7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obiwwKSxlLmxpbmVUbygwLHIpLGUubGluZVRvKC1uLDApLGUuY2xvc2VQYXRoKCl9fTt2YXIgV0VlPS44OTA4MTMwOTE1MjkyODUyLCRTdD1NYXRoLnNpbih5dS8xMCkvTWF0aC5zaW4oNyp5dS8xMCksWUVlPU1hdGguc2luKGhjLzEwKSokU3QsakVlPS1NYXRoLmNvcyhoYy8xMCkqJFN0LFY4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQqV0VlKSxuPVlFZSpyLGk9akVlKnI7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1oYypvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2UubGluZVRvKGwqciwtcypyKSxlLmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfWUuY2xvc2VQYXRoKCl9fTt2YXIgVTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19O3ZhciBzJD1NYXRoLnNxcnQoMykscTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKHMkKjMpKTtlLm1vdmVUbygwLHIqMiksZS5saW5lVG8oLXMkKnIsLXIpLGUubGluZVRvKHMkKnIsLXIpLGUuY2xvc2VQYXRoKCl9fTt2YXIgZmM9LS41LHBjPU1hdGguc3FydCgzKS8yLGwkPTEvTWF0aC5zcXJ0KDEyKSxYRWU9KGwkLzIrMSkqMyxHOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L1hFZSksbj1yLzIsaT1yKmwkLG89bixhPXIqbCQrcixzPS1vLGw9YTtlLm1vdmVUbyhuLGkpLGUubGluZVRvKG8sYSksZS5saW5lVG8ocyxsKSxlLmxpbmVUbyhmYypuLXBjKmkscGMqbitmYyppKSxlLmxpbmVUbyhmYypvLXBjKmEscGMqbytmYyphKSxlLmxpbmVUbyhmYypzLXBjKmwscGMqcytmYypsKSxlLmxpbmVUbyhmYypuK3BjKmksZmMqaS1wYypuKSxlLmxpbmVUbyhmYypvK3BjKmEsZmMqYS1wYypvKSxlLmxpbmVUbyhmYypzK3BjKmwsZmMqbC1wYypzKSxlLmNsb3NlUGF0aCgpfX07dmFyIEtTdD1bazUsQjgsSDgsVTgsVjgscTgsRzhdO2Z1bmN0aW9uIFpTdCgpe3ZhciBlPXFlKGs1KSx0PXFlKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBpO2lmKHJ8fChyPWk9YnMoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gcj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKGkpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKCtpKSxuKTp0fSxuLmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOmksbik6cn0sbn1mdW5jdGlvbiBkYygpe31mdW5jdGlvbiBKYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmUuX3gwK2UuX3gxKS8zLCgyKmUuX3kwK2UuX3kxKS8zLChlLl94MCsyKmUuX3gxKS8zLChlLl95MCsyKmUuX3kxKS8zLChlLl94MCs0KmUuX3gxK3QpLzYsKGUuX3kwKzQqZS5feTErcikvNil9ZnVuY3Rpb24gUjUoZSl7dGhpcy5fY29udGV4dD1lfVI1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6SmIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6SmIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19O2Z1bmN0aW9uIFc4KGUpe3JldHVybiBuZXcgUjUoZSl9ZnVuY3Rpb24gSlN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1KU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZGMsYXJlYUVuZDpkYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0OkpiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fTtmdW5jdGlvbiBRU3QoZSl7cmV0dXJuIG5ldyBKU3QoZSl9ZnVuY3Rpb24gdDN0KGUpe3RoaXMuX2NvbnRleHQ9ZX10M3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpKYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX07ZnVuY3Rpb24gZTN0KGUpe3JldHVybiBuZXcgdDN0KGUpfWZ1bmN0aW9uIHIzdChlLHQpe3RoaXMuX2Jhc2lzPW5ldyBSNShlKSx0aGlzLl9iZXRhPXR9cjN0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49ZVswXSxpPXRbMF0sbz1lW3JdLW4sYT10W3JdLWkscz0tMSxsOysrczw9cjspbD1zL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSplW3NdKygxLXRoaXMuX2JldGEpKihuK2wqbyksdGhpcy5fYmV0YSp0W3NdKygxLXRoaXMuX2JldGEpKihpK2wqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTt2YXIgbjN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD09PTE/bmV3IFI1KG4pOm5ldyByM3Qobix0KX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjg1KTtmdW5jdGlvbiBRYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFk4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1ZOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6UWIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgaTN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFk4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIGo4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1qOC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgbzN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IGo4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIFg4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1YOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpRYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGEzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBYOChuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKTtmdW5jdGlvbiBONShlLHQscil7dmFyIG49ZS5feDEsaT1lLl95MSxvPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+Ym8pe3ZhciBzPTIqZS5fbDAxXzJhKzMqZS5fbDAxX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGw9MyplLl9sMDFfYSooZS5fbDAxX2ErZS5fbDEyX2EpO249KG4qcy1lLl94MCplLl9sMTJfMmErZS5feDIqZS5fbDAxXzJhKS9sLGk9KGkqcy1lLl95MCplLl9sMTJfMmErZS5feTIqZS5fbDAxXzJhKS9sfWlmKGUuX2wyM19hPmJvKXt2YXIgYz0yKmUuX2wyM18yYSszKmUuX2wyM19hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDIzX2EqKGUuX2wyM19hK2UuX2wxMl9hKTtvPShvKmMrZS5feDEqZS5fbDIzXzJhLXQqZS5fbDEyXzJhKS91LGE9KGEqYytlLl95MSplLl9sMjNfMmEtciplLl9sMTJfMmEpL3V9ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxvLGEsZS5feDIsZS5feTIpfWZ1bmN0aW9uIHMzdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fXMzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGwzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHMzdChuLHQpOm5ldyBZOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIGMzdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fWMzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpONSh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciB1M3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyBjM3Qobix0KTpuZXcgajgobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KTtmdW5jdGlvbiBoM3QoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH1oM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGYzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IGgzdChuLHQpOm5ldyBYOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIHAzdChlKXt0aGlzLl9jb250ZXh0PWV9cDN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe2U9K2UsdD0rdCx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCkpfX07ZnVuY3Rpb24gZDN0KGUpe3JldHVybiBuZXcgcDN0KGUpfWZ1bmN0aW9uIG0zdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gZzN0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKG0zdChvKSttM3QoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBfM3QoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGMkKGUsdCxyKXt2YXIgbj1lLl94MCxpPWUuX3kwLG89ZS5feDEsYT1lLl95MSxzPShvLW4pLzM7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqdCxvLXMsYS1zKnIsbyxhKX1mdW5jdGlvbiAkOChlKXt0aGlzLl9jb250ZXh0PWV9JDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmMkKHRoaXMsdGhpcy5fdDAsXzN0KHRoaXMsdGhpcy5fdDApKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TmFOO2lmKGU9K2UsdD0rdCwhKGU9PT10aGlzLl94MSYmdD09PXRoaXMuX3kxKSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxjJCh0aGlzLF8zdCh0aGlzLHI9ZzN0KHRoaXMsZSx0KSkscik7YnJlYWs7ZGVmYXVsdDpjJCh0aGlzLHRoaXMuX3QwLHI9ZzN0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07ZnVuY3Rpb24geTN0KGUpe3RoaXMuX2NvbnRleHQ9bmV3IHYzdChlKX0oeTN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKCQ4LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKGUsdCl7JDgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyx0LGUpfTtmdW5jdGlvbiB2M3QoZSl7dGhpcy5fY29udGV4dD1lfXYzdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUsbixyLG8saSl9fTtmdW5jdGlvbiB4M3QoZSl7cmV0dXJuIG5ldyAkOChlKX1mdW5jdGlvbiBiM3QoZSl7cmV0dXJuIG5ldyB5M3QoZSl9ZnVuY3Rpb24gUzN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1TM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZVswXSx0WzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlWzBdLHRbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKGVbMV0sdFsxXSk7ZWxzZSBmb3IodmFyIG49dzN0KGUpLGk9dzN0KHQpLG89MCxhPTE7YTxyOysrbywrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bb10saVswXVtvXSxuWzFdW29dLGlbMV1bb10sZVthXSx0W2FdKTsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnI9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTtmdW5jdGlvbiB3M3QoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBNM3QoZSl7cmV0dXJuIG5ldyBTM3QoZSl9ZnVuY3Rpb24gSzgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fdD10fUs4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fTtmdW5jdGlvbiBFM3QoZSl7cmV0dXJuIG5ldyBLOChlLC41KX1mdW5jdGlvbiBUM3QoZSl7cmV0dXJuIG5ldyBLOChlLDApfWZ1bmN0aW9uIEMzdChlKXtyZXR1cm4gbmV3IEs4KGUsMSl9ZnVuY3Rpb24geHUoZSx0KXtpZigoYT1lLmxlbmd0aCk+MSlmb3IodmFyIHI9MSxuLGksbz1lW3RbMF1dLGEscz1vLmxlbmd0aDtyPGE7KytyKWZvcihpPW8sbz1lW3Rbcl1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4oaVtuXVsxXSk/aVtuXVswXTppW25dWzFdfWZ1bmN0aW9uIGJ1KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn1mdW5jdGlvbiAkRWUoZSx0KXtyZXR1cm4gZVt0XX1mdW5jdGlvbiBBM3QoKXt2YXIgZT1xZShbXSksdD1idSxyPXh1LG49JEVlO2Z1bmN0aW9uIGkobyl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscyxsPW8ubGVuZ3RoLGM9YS5sZW5ndGgsdT1uZXcgQXJyYXkoYyksaDtmb3Iocz0wO3M8YzsrK3Mpe2Zvcih2YXIgZj1hW3NdLHA9dVtzXT1uZXcgQXJyYXkobCksZD0wLGc7ZDxsOysrZClwW2RdPWc9WzAsK24ob1tkXSxmLGQsbyldLGcuZGF0YT1vW2RdO3Aua2V5PWZ9Zm9yKHM9MCxoPXQodSk7czxjOysrcyl1W2hbc11dLmluZGV4PXM7cmV0dXJuIHIodSxoKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpxZShMNS5jYWxsKG8pKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286cWUoK28pLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bz09bnVsbD9idTp0eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOnFlKEw1LmNhbGwobykpLGkpOnR9LGkub2Zmc2V0PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW89PW51bGw/eHU6byxpKTpyfSxpfWZ1bmN0aW9uIFAzdChlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpPTAsbz1lWzBdLmxlbmd0aCxhO2k8bzsrK2kpe2ZvcihhPXI9MDtyPG47KytyKWErPWVbcl1baV1bMV18fDA7aWYoYSlmb3Iocj0wO3I8bjsrK3IpZVtyXVtpXVsxXS89YX14dShlLHQpfX1mdW5jdGlvbiBJM3QoZSx0KXtpZigobD1lLmxlbmd0aCk+MClmb3IodmFyIHIsbj0wLGksbyxhLHMsbCxjPWVbdFswXV0ubGVuZ3RoO248YzsrK24pZm9yKGE9cz0wLHI9MDtyPGw7KytyKShvPShpPWVbdFtyXV1bbl0pWzFdLWlbMF0pPjA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6KGlbMF09MCxpWzFdPW8pfWZ1bmN0aW9uIEwzdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfXh1KGUsdCl9fWZ1bmN0aW9uIGszdChlLHQpe2lmKCEoISgoYT1lLmxlbmd0aCk+MCl8fCEoKG89KGk9ZVt0WzBdXSkubGVuZ3RoKT4wKSkpe2Zvcih2YXIgcj0wLG49MSxpLG8sYTtuPG87KytuKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8YTsrK3Mpe2Zvcih2YXIgdT1lW3Rbc11dLGg9dVtuXVsxXXx8MCxmPXVbbi0xXVsxXXx8MCxwPShoLWYpLzIsZD0wO2Q8czsrK2Qpe3ZhciBnPWVbdFtkXV0sXz1nW25dWzFdfHwwLHk9Z1tuLTFdWzFdfHwwO3ArPV8teX1sKz1oLGMrPXAqaH1pW24tMV1bMV0rPWlbbi0xXVswXT1yLGwmJihyLT1jL2wpfWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIseHUoZSx0KX19ZnVuY3Rpb24gWjgoZSl7dmFyIHQ9ZS5tYXAoS0VlKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiBLRWUoZSl7Zm9yKHZhciB0PS0xLHI9MCxuPWUubGVuZ3RoLGksbz0tMS8wOysrdDxuOykoaT0rZVt0XVsxXSk+byYmKG89aSxyPXQpO3JldHVybiByfWZ1bmN0aW9uIEo4KGUpe3ZhciB0PWUubWFwKHUkKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiB1JChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9ZnVuY3Rpb24gUjN0KGUpe3JldHVybiBKOChlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gTjN0KGUpe3ZhciB0PWUubGVuZ3RoLHIsbixpPWUubWFwKHUkKSxvPVo4KGUpLGE9MCxzPTAsbD1bXSxjPVtdO2ZvcihyPTA7cjx0OysrciluPW9bcl0sYTxzPyhhKz1pW25dLGwucHVzaChuKSk6KHMrPWlbbl0sYy5wdXNoKG4pKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfWZ1bmN0aW9uIEQzdChlKXtyZXR1cm4gYnUoZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIGgkKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBPM3QoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gejN0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIGYkKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdDIoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mJC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYkLGluc2VydDpmdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtyPWV9ZWxzZSB0aGlzLl8/KGU9RjN0KHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LHI9ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxyPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPXIsdC5DPSEwLGU9dDtyJiZyLkM7KW49ci5VLHI9PT1uLkw/KGk9bi5SLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKEQ1KHRoaXMsciksZT1yLHI9ZS5VKSxyLkM9ITEsbi5DPSEwLE81KHRoaXMsbikpKTooaT1uLkwsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5MJiYoTzUodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsRDUodGhpcyxuKSkpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdD1lLlUscixuPWUuTCxpPWUuUixvLGE7aWYobj9pP289RjN0KGkpOm89bjpvPWksdD90Lkw9PT1lP3QuTD1vOnQuUj1vOnRoaXMuXz1vLG4mJmk/KGE9by5DLG8uQz1lLkMsby5MPW4sbi5VPW8sbyE9PWk/KHQ9by5VLG8uVT1lLlUsZT1vLlIsdC5MPWUsby5SPWksaS5VPW8pOihvLlU9dCx0PW8sZT1vLlIpKTooYT1lLkMsZT1vKSxlJiYoZS5VPXQpLCFhKXtpZihlJiZlLkMpe2UuQz0hMTtyZXR1cm59ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09dC5MKXtpZihyPXQuUixyLkMmJihyLkM9ITEsdC5DPSEwLEQ1KHRoaXMsdCkscj10LlIpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5SfHwhci5SLkMpJiYoci5MLkM9ITEsci5DPSEwLE81KHRoaXMscikscj10LlIpLHIuQz10LkMsdC5DPXIuUi5DPSExLEQ1KHRoaXMsdCksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYocj10Lkwsci5DJiYoci5DPSExLHQuQz0hMCxPNSh0aGlzLHQpLHI9dC5MKSxyLkwmJnIuTC5DfHxyLlImJnIuUi5DKXsoIXIuTHx8IXIuTC5DKSYmKHIuUi5DPSExLHIuQz0hMCxENSh0aGlzLHIpLHI9dC5MKSxyLkM9dC5DLHQuQz1yLkwuQz0hMSxPNSh0aGlzLHQpLGU9dGhpcy5fO2JyZWFrfXIuQz0hMCxlPXQsdD10LlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX07ZnVuY3Rpb24gRDUoZSx0KXt2YXIgcj10LG49dC5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIE81KGUsdCl7dmFyIHI9dCxuPXQuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBGM3QoZSl7Zm9yKDtlLkw7KWU9ZS5MO3JldHVybiBlfXZhciBwJD1mJDtmdW5jdGlvbiBlMihlLHQscixuKXt2YXIgaT1bbnVsbCxudWxsXSxvPXdvLnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PWUsaS5yaWdodD10LHImJno1KGksZSx0LHIpLG4mJno1KGksdCxlLG4pLFZhW2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFZhW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gcjIoZSx0LHIpe3ZhciBuPVt0LHJdO3JldHVybiBuLmxlZnQ9ZSxufWZ1bmN0aW9uIHo1KGUsdCxyLG4peyFlWzBdJiYhZVsxXT8oZVswXT1uLGUubGVmdD10LGUucmlnaHQ9cik6ZS5sZWZ0PT09cj9lWzFdPW46ZVswXT1ufWZ1bmN0aW9uIFpFZShlLHQscixuLGkpe3ZhciBvPWVbMF0sYT1lWzFdLHM9b1swXSxsPW9bMV0sYz1hWzBdLHU9YVsxXSxoPTAsZj0xLHA9Yy1zLGQ9dS1sLGc7aWYoZz10LXMsISghcCYmZz4wKSl7aWYoZy89cCxwPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKHA+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9bi1zLCEoIXAmJmc8MCkpe2lmKGcvPXAscDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihwPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1pZihnPXItbCwhKCFkJiZnPjApKXtpZihnLz1kLGQ8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYoZD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1pLWwsISghZCYmZzwwKSl7aWYoZy89ZCxkPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKGQ+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfXJldHVybiEoaD4wKSYmIShmPDEpfHwoaD4wJiYoZVswXT1bcytoKnAsbCtoKmRdKSxmPDEmJihlWzFdPVtzK2YqcCxsK2YqZF0pKSwhMH19fX19ZnVuY3Rpb24gSkVlKGUsdCxyLG4saSl7dmFyIG89ZVsxXTtpZihvKXJldHVybiEwO3ZhciBhPWVbMF0scz1lLmxlZnQsbD1lLnJpZ2h0LGM9c1swXSx1PXNbMV0saD1sWzBdLGY9bFsxXSxwPShjK2gpLzIsZD0odStmKS8yLGcsXztpZihmPT09dSl7aWYocDx0fHxwPj1uKXJldHVybjtpZihjPmgpe2lmKCFhKWE9W3Ascl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVtwLGldfWVsc2V7aWYoIWEpYT1bcCxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bcCxyXX19ZWxzZSBpZihnPShjLWgpLyhmLXUpLF89ZC1nKnAsZzwtMXx8Zz4xKWlmKGM+aCl7aWYoIWEpYT1bKHItXykvZyxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289WyhpLV8pL2csaV19ZWxzZXtpZighYSlhPVsoaS1fKS9nLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVsoci1fKS9nLHJdfWVsc2UgaWYodTxmKXtpZighYSlhPVt0LGcqdCtfXTtlbHNlIGlmKGFbMF0+PW4pcmV0dXJuO289W24sZypuK19dfWVsc2V7aWYoIWEpYT1bbixnKm4rX107ZWxzZSBpZihhWzBdPHQpcmV0dXJuO289W3QsZyp0K19dfXJldHVybiBlWzBdPWEsZVsxXT1vLCEwfWZ1bmN0aW9uIEIzdChlLHQscixuKXtmb3IodmFyIGk9d28ubGVuZ3RoLG87aS0tOykoIUpFZShvPXdvW2ldLGUsdCxyLG4pfHwhWkVlKG8sZSx0LHIsbil8fCEoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5Icnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5IcikpJiZkZWxldGUgd29baV19ZnVuY3Rpb24gSDN0KGUpe3JldHVybiBWYVtlLmluZGV4XT17c2l0ZTplLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gUUVlKGUsdCl7dmFyIHI9ZS5zaXRlLG49dC5sZWZ0LGk9dC5yaWdodDtyZXR1cm4gcj09PWkmJihpPW4sbj1yKSxpP01hdGguYXRhbjIoaVsxXS1uWzFdLGlbMF0tblswXSk6KHI9PT1uPyhuPXRbMV0saT10WzBdKToobj10WzBdLGk9dFsxXSksTWF0aC5hdGFuMihuWzBdLWlbMF0saVsxXS1uWzFdKSl9ZnVuY3Rpb24gZCQoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIHQ1ZShlLHQpe3JldHVybiB0WysodC5sZWZ0PT09ZS5zaXRlKV19ZnVuY3Rpb24gVjN0KCl7Zm9yKHZhciBlPTAsdD1WYS5sZW5ndGgscixuLGksbztlPHQ7KytlKWlmKChyPVZhW2VdKSYmKG89KG49ci5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3IoaT0wO2k8bzsrK2kpYVtpXT1pLHNbaV09UUVlKHIsd29bbltpXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSksaT0wO2k8bzsrK2kpc1tpXT1uW2FbaV1dO2ZvcihpPTA7aTxvOysraSluW2ldPXNbaV19fWZ1bmN0aW9uIFUzdChlLHQscixuKXt2YXIgaT1WYS5sZW5ndGgsbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8seT0hMDtmb3Iobz0wO288aTsrK28paWYoYT1WYVtvXSl7Zm9yKHM9YS5zaXRlLGM9YS5oYWxmZWRnZXMsbD1jLmxlbmd0aDtsLS07KXdvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsdT1jLmxlbmd0aDtsPHU7KWQ9dDVlKGEsd29bY1tsXV0pLGc9ZFswXSxfPWRbMV0saD1kJChhLHdvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Icnx8TWF0aC5hYnMoXy1wKT5IcikmJihjLnNwbGljZShsLDAsd28ucHVzaChyMihzLGQsTWF0aC5hYnMoZy1lKTxIciYmbi1fPkhyP1tlLE1hdGguYWJzKGYtZSk8SHI/cDpuXTpNYXRoLmFicyhfLW4pPEhyJiZyLWc+SHI/W01hdGguYWJzKHAtbik8SHI/ZjpyLG5dOk1hdGguYWJzKGctcik8SHImJl8tdD5Icj9bcixNYXRoLmFicyhmLXIpPEhyP3A6dF06TWF0aC5hYnMoXy10KTxIciYmZy1lPkhyP1tNYXRoLmFicyhwLXQpPEhyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9VmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKHdvLnB1c2gocjIocz15LnNpdGUsUCxrKSktMSx3by5wdXNoKHIyKHMsayxPKSktMSx3by5wdXNoKHIyKHMsTyxEKSktMSx3by5wdXNoKHIyKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1WYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBWYVtvXSl9dmFyIHEzdD1bXSxRODtmdW5jdGlvbiBlNWUoKXt0Mih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gY3koZSl7dmFyIHQ9ZS5QLHI9ZS5OO2lmKCEoIXR8fCFyKSl7dmFyIG49dC5zaXRlLGk9ZS5zaXRlLG89ci5zaXRlO2lmKG4hPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSxsPW5bMF0tYSxjPW5bMV0tcyx1PW9bMF0tYSxoPW9bMV0tcyxmPTIqKGwqaC1jKnUpO2lmKCEoZj49LUczdCkpe3ZhciBwPWwqbCtjKmMsZD11KnUraCpoLGc9KGgqcC1jKmQpL2YsXz0obCpkLXUqcCkvZix5PXEzdC5wb3AoKXx8bmV3IGU1ZTt5LmFyYz1lLHkuc2l0ZT1pLHkueD1nK2EseS55PSh5LmN5PV8rcykrTWF0aC5zcXJ0KGcqZytfKl8pLGUuY2lyY2xlPXk7Zm9yKHZhciB4PW51bGwsYj1uMi5fO2I7KWlmKHkueTxiLnl8fHkueT09PWIueSYmeS54PD1iLngpaWYoYi5MKWI9Yi5MO2Vsc2V7eD1iLlA7YnJlYWt9ZWxzZSBpZihiLlIpYj1iLlI7ZWxzZXt4PWI7YnJlYWt9bjIuaW5zZXJ0KHgseSkseHx8KFE4PXkpfX19fWZ1bmN0aW9uIHV5KGUpe3ZhciB0PWUuY2lyY2xlO3QmJih0LlB8fChROD10Lk4pLG4yLnJlbW92ZSh0KSxxM3QucHVzaCh0KSx0Mih0KSxlLmNpcmNsZT1udWxsKX12YXIgWTN0PVtdO2Z1bmN0aW9uIHI1ZSgpe3QyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBXM3QoZSl7dmFyIHQ9WTN0LnBvcCgpfHxuZXcgcjVlO3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIG0kKGUpe3V5KGUpLGh5LnJlbW92ZShlKSxZM3QucHVzaChlKSx0MihlKX1mdW5jdGlvbiBqM3QoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGk9W3Isbl0sbz1lLlAsYT1lLk4scz1bZV07bSQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8SHImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPEhyOylvPWwuUCxzLnVuc2hpZnQobCksbSQobCksbD1vO3MudW5zaGlmdChsKSx1eShsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMoci1jLmNpcmNsZS54KTxIciYmTWF0aC5hYnMobi1jLmNpcmNsZS5jeSk8SHI7KWE9Yy5OLHMucHVzaChjKSxtJChjKSxjPWE7cy5wdXNoKGMpLHV5KGMpO3ZhciB1PXMubGVuZ3RoLGg7Zm9yKGg9MTtoPHU7KytoKWM9c1toXSxsPXNbaC0xXSx6NShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW3UtMV0sYy5lZGdlPWUyKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxjeShsKSxjeShjKX1mdW5jdGlvbiBYM3QoZSl7Zm9yKHZhciB0PWVbMF0scj1lWzFdLG4saSxvLGEscz1oeS5fO3M7KWlmKG89JDN0KHMsciktdCxvPkhyKXM9cy5MO2Vsc2UgaWYoYT10LW41ZShzLHIpLGE+SHIpe2lmKCFzLlIpe249czticmVha31zPXMuUn1lbHNle28+LUhyPyhuPXMuUCxpPXMpOmE+LUhyPyhuPXMsaT1zLk4pOm49aT1zO2JyZWFrfUgzdChlKTt2YXIgbD1XM3QoZSk7aWYoaHkuaW5zZXJ0KG4sbCksISghbiYmIWkpKXtpZihuPT09aSl7dXkobiksaT1XM3Qobi5zaXRlKSxoeS5pbnNlcnQobCxpKSxsLmVkZ2U9aS5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpLGN5KG4pLGN5KGkpO3JldHVybn1pZighaSl7bC5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpO3JldHVybn11eShuKSx1eShpKTt2YXIgYz1uLnNpdGUsdT1jWzBdLGg9Y1sxXSxmPWVbMF0tdSxwPWVbMV0taCxkPWkuc2l0ZSxnPWRbMF0tdSxfPWRbMV0taCx5PTIqKGYqXy1wKmcpLHg9ZipmK3AqcCxiPWcqZytfKl8sUz1bKF8qeC1wKmIpL3krdSwoZipiLWcqeCkveStoXTt6NShpLmVkZ2UsYyxkLFMpLGwuZWRnZT1lMihjLGUsbnVsbCxTKSxpLmVkZ2U9ZTIoZSxkLG51bGwsUyksY3kobiksY3koaSl9fWZ1bmN0aW9uICQzdChlLHQpe3ZhciByPWUuc2l0ZSxuPXJbMF0saT1yWzFdLG89aS10O2lmKCFvKXJldHVybiBuO3ZhciBhPWUuUDtpZighYSlyZXR1cm4tMS8wO3I9YS5zaXRlO3ZhciBzPXJbMF0sbD1yWzFdLGM9bC10O2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixoPTEvby0xL2MsZj11L2M7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKih1KnUvKC0yKmMpLWwrYy8yK2ktby8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIG41ZShlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiAkM3Qocix0KTt2YXIgbj1lLnNpdGU7cmV0dXJuIG5bMV09PT10P25bMF06MS8wfXZhciBIcj0xZS02LEczdD0xZS0xMixoeSxWYSxuMix3bztmdW5jdGlvbiBpNWUoZSx0LHIpe3JldHVybihlWzBdLXJbMF0pKih0WzFdLWVbMV0pLShlWzBdLXRbMF0pKihyWzFdLWVbMV0pfWZ1bmN0aW9uIG81ZShlLHQpe3JldHVybiB0WzFdLWVbMV18fHRbMF0tZVswXX1mdW5jdGlvbiBGNShlLHQpe3ZhciByPWUuc29ydChvNWUpLnBvcCgpLG4saSxvO2Zvcih3bz1bXSxWYT1uZXcgQXJyYXkoZS5sZW5ndGgpLGh5PW5ldyBwJCxuMj1uZXcgcCQ7OylpZihvPVE4LHImJighb3x8clsxXTxvLnl8fHJbMV09PT1vLnkmJnJbMF08by54KSkoclswXSE9PW58fHJbMV0hPT1pKSYmKFgzdChyKSxuPXJbMF0saT1yWzFdKSxyPWUucG9wKCk7ZWxzZSBpZihvKWozdChvLmFyYyk7ZWxzZSBicmVhaztpZihWM3QoKSx0KXt2YXIgYT0rdFswXVswXSxzPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTtCM3QoYSxzLGwsYyksVTN0KGEscyxsLGMpfXRoaXMuZWRnZXM9d28sdGhpcy5jZWxscz1WYSxoeT1uMj13bz1WYT1udWxsfUY1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RjUscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGQkKHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZpNWUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX07ZnVuY3Rpb24gSzN0KCl7dmFyIGU9TzN0LHQ9ejN0LHI9bnVsbDtmdW5jdGlvbiBuKGkpe3JldHVybiBuZXcgRjUoaS5tYXAoZnVuY3Rpb24obyxhKXt2YXIgcz1bTWF0aC5yb3VuZChlKG8sYSxpKS9IcikqSHIsTWF0aC5yb3VuZCh0KG8sYSxpKS9IcikqSHJdO3JldHVybiBzLmluZGV4PWEscy5kYXRhPW8sc30pLHIpfXJldHVybiBuLnBvbHlnb25zPWZ1bmN0aW9uKGkpe3JldHVybiBuKGkpLnBvbHlnb25zKCl9LG4ubGlua3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkubGlua3MoKX0sbi50cmlhbmdsZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkudHJpYW5nbGVzKCl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmgkKCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpoJCgraSksbik6dH0sbi5leHRlbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbK2lbMF1bMF0sK2lbMF1bMV1dLFsraVsxXVswXSwraVsxXVsxXV1dLG4pOnImJltbclswXVswXSxyWzBdWzFdXSxbclsxXVswXSxyWzFdWzFdXV19LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1swLDBdLFsraVswXSwraVsxXV1dLG4pOnImJltyWzFdWzBdLXJbMF1bMF0sclsxXVsxXS1yWzBdWzFdXX0sbn1rbSgpO2Z1bmN0aW9uIEI1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBnJChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnRyYW5zZm9ybT1yfWZ1bmN0aW9uIGpoKGUsdCxyKXt0aGlzLms9ZSx0aGlzLng9dCx0aGlzLnk9cn1qaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpoLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBqaCh0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IGpoKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIFhoPW5ldyBqaCgxLDAsMCk7aTIucHJvdG90eXBlPWpoLnByb3RvdHlwZTtmdW5jdGlvbiBpMihlKXtmb3IoOyFlLl9fem9vbTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIFhoO3JldHVybiBlLl9fem9vbX1mdW5jdGlvbiB0Uigpe3F0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIG8yKCl7cXQucHJldmVudERlZmF1bHQoKSxxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBhNWUoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBzNWUoKXt2YXIgZT10aGlzO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSxlLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpPyhlPWUudmlld0JveC5iYXNlVmFsLFtbZS54LGUueV0sW2UueCtlLndpZHRoLGUueStlLmhlaWdodF1dKTpbWzAsMF0sW2Uud2lkdGguYmFzZVZhbC52YWx1ZSxlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV0pOltbMCwwXSxbZS5jbGllbnRXaWR0aCxlLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIFozdCgpe3JldHVybiB0aGlzLl9fem9vbXx8WGh9ZnVuY3Rpb24gbDVlKCl7cmV0dXJuLXF0LmRlbHRhWSoocXQuZGVsdGFNb2RlPT09MT8uMDU6cXQuZGVsdGFNb2RlPzE6LjAwMil9ZnVuY3Rpb24gYzVlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHU1ZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gZVIoKXt2YXIgZT1hNWUsdD1zNWUscj11NWUsbj1sNWUsaT1jNWUsbz1bMCwxLzBdLGE9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0scz0yNTAsbD12TCxjPXZzKCJzdGFydCIsInpvb20iLCJlbmQiKSx1LGgsZj01MDAscD0xNTAsZD0wO2Z1bmN0aW9uIGcoTCl7TC5wcm9wZXJ0eSgiX196b29tIixaM3QpLm9uKCJ3aGVlbC56b29tIixQKS5vbigibW91c2Vkb3duLnpvb20iLGspLm9uKCJkYmxjbGljay56b29tIixPKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuem9vbSIsRCkub24oInRvdWNobW92ZS56b29tIixCKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixJKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9Zy50cmFuc2Zvcm09ZnVuY3Rpb24oTCxSLEYpe3ZhciB6PUwuc2VsZWN0aW9uP0wuc2VsZWN0aW9uKCk6TDt6LnByb3BlcnR5KCJfX3pvb20iLFozdCksTCE9PXo/YihMLFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIFI9PSJmdW5jdGlvbiI/Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UikuZW5kKCl9KX0sZy5zY2FsZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnNjYWxlVG8oTCxmdW5jdGlvbigpe3ZhciB6PXRoaXMuX196b29tLmssVT10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiB6KlV9LEYpfSxnLnNjYWxlVG89ZnVuY3Rpb24oTCxSLEYpe2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Rj09bnVsbD94KHopOnR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsWj1VLmludmVydChXKSxydD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiByKHkoXyhVLHJ0KSxXLFopLHosYSl9LEYpfSxnLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlIsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sZy50cmFuc2xhdGVUbz1mdW5jdGlvbihMLFIsRix6KXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7dmFyIFU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksVz10aGlzLl9fem9vbSxaPXo9PW51bGw/eChVKTp0eXBlb2Ygej09ImZ1bmN0aW9uIj96LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6O3JldHVybiByKFhoLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iPy1SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotUix0eXBlb2YgRj09ImZ1bmN0aW9uIj8tRi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUYpLFUsYSl9LHopfTtmdW5jdGlvbiBfKEwsUil7cmV0dXJuIFI9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIpKSxSPT09TC5rP0w6bmV3IGpoKFIsTC54LEwueSl9ZnVuY3Rpb24geShMLFIsRil7dmFyIHo9UlswXS1GWzBdKkwuayxVPVJbMV0tRlsxXSpMLms7cmV0dXJuIHo9PT1MLngmJlU9PT1MLnk/TDpuZXcgamgoTC5rLHosVSl9ZnVuY3Rpb24geChMKXtyZXR1cm5bKCtMWzBdWzBdKyArTFsxXVswXSkvMiwoK0xbMF1bMV0rICtMWzFdWzFdKS8yXX1mdW5jdGlvbiBiKEwsUixGKXtMLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe1ModGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgej10aGlzLFU9YXJndW1lbnRzLFc9Uyh6LFUpLFo9dC5hcHBseSh6LFUpLHJ0PUY9PW51bGw/eChaKTp0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHosVSk6RixvdD1NYXRoLm1heChaWzFdWzBdLVpbMF1bMF0sWlsxXVsxXS1aWzBdWzFdKSxzdD16Ll9fem9vbSxTdD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHosVSk6UixidD1sKHN0LmludmVydChydCkuY29uY2F0KG90L3N0LmspLFN0LmludmVydChydCkuY29uY2F0KG90L1N0LmspKTtyZXR1cm4gZnVuY3Rpb24oTXQpe2lmKE10PT09MSlNdD1TdDtlbHNle3ZhciBsdD1idChNdCksS3Q9b3QvbHRbMl07TXQ9bmV3IGpoKEt0LHJ0WzBdLWx0WzBdKkt0LHJ0WzFdLWx0WzFdKkt0KX1XLnpvb20obnVsbCxNdCl9fSl9ZnVuY3Rpb24gUyhMLFIsRil7cmV0dXJuIUYmJkwuX196b29taW5nfHxuZXcgQyhMLFIpfWZ1bmN0aW9uIEMoTCxSKXt0aGlzLnRoYXQ9TCx0aGlzLmFyZ3M9Uix0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXQuYXBwbHkoTCxSKSx0aGlzLnRhcHM9MH1DLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMuYWN0aXZlPT09MSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oTCxSKXtyZXR1cm4gdGhpcy5tb3VzZSYmTCE9PSJtb3VzZSImJih0aGlzLm1vdXNlWzFdPVIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmTCE9PSJ0b3VjaCImJih0aGlzLnRvdWNoMFsxXT1SLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiZMIT09InRvdWNoIiYmKHRoaXMudG91Y2gxWzFdPVIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1SLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihMKXtNcChuZXcgZyQoZyxMLHRoaXMudGhhdC5fX3pvb20pLGMuYXBwbHksYyxbTCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBQKCl7aWYoIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXRoaXMuX196b29tLEY9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIuaypNYXRoLnBvdygyLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHo9em8odGhpcyk7aWYoTC53aGVlbCkoTC5tb3VzZVswXVswXSE9PXpbMF18fEwubW91c2VbMF1bMV0hPT16WzFdKSYmKEwubW91c2VbMV09Ui5pbnZlcnQoTC5tb3VzZVswXT16KSksY2xlYXJUaW1lb3V0KEwud2hlZWwpO2Vsc2V7aWYoUi5rPT09RilyZXR1cm47TC5tb3VzZT1beixSLmludmVydCh6KV0saHUodGhpcyksTC5zdGFydCgpfW8yKCksTC53aGVlbD1zZXRUaW1lb3V0KFUscCksTC56b29tKCJtb3VzZSIscih5KF8oUixGKSxMLm1vdXNlWzBdLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKTtmdW5jdGlvbiBVKCl7TC53aGVlbD1udWxsLEwuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihofHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBMPVModGhpcyxhcmd1bWVudHMsITApLFI9SHQocXQudmlldykub24oIm1vdXNlbW92ZS56b29tIixXLCEwKS5vbigibW91c2V1cC56b29tIixaLCEwKSxGPXpvKHRoaXMpLHo9cXQuY2xpZW50WCxVPXF0LmNsaWVudFk7em0ocXQudmlldyksdFIoKSxMLm1vdXNlPVtGLHRoaXMuX196b29tLmludmVydChGKV0saHUodGhpcyksTC5zdGFydCgpO2Z1bmN0aW9uIFcoKXtpZihvMigpLCFMLm1vdmVkKXt2YXIgcnQ9cXQuY2xpZW50WC16LG90PXF0LmNsaWVudFktVTtMLm1vdmVkPXJ0KnJ0K290Km90PmR9TC56b29tKCJtb3VzZSIscih5KEwudGhhdC5fX3pvb20sTC5tb3VzZVswXT16byhMLnRoYXQpLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKX1mdW5jdGlvbiBaKCl7Ui5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxGbShxdC52aWV3LEwubW92ZWQpLG8yKCksTC5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBMPXRoaXMuX196b29tLFI9em8odGhpcyksRj1MLmludmVydChSKSx6PUwuayoocXQuc2hpZnRLZXk/LjU6MiksVT1yKHkoXyhMLHopLFIsRiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7bzIoKSxzPjA/SHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoYixVLFIpOkh0KHRoaXMpLmNhbGwoZy50cmFuc2Zvcm0sVSl9fWZ1bmN0aW9uIEQoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgTD1xdC50b3VjaGVzLFI9TC5sZW5ndGgsRj1TKHRoaXMsYXJndW1lbnRzLHF0LmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PVIpLHosVSxXLFo7Zm9yKHRSKCksVT0wO1U8UjsrK1UpVz1MW1VdLFo9VHAodGhpcyxMLFcuaWRlbnRpZmllciksWj1bWix0aGlzLl9fem9vbS5pbnZlcnQoWiksVy5pZGVudGlmaWVyXSxGLnRvdWNoMD8hRi50b3VjaDEmJkYudG91Y2gwWzJdIT09WlsyXSYmKEYudG91Y2gxPVosRi50YXBzPTApOihGLnRvdWNoMD1aLHo9ITAsRi50YXBzPTErISF1KTt1JiYodT1jbGVhclRpbWVvdXQodSkpLHomJihGLnRhcHM8MiYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sZikpLGh1KHRoaXMpLEYuc3RhcnQoKSl9fWZ1bmN0aW9uIEIoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVLFcsWjtmb3IobzIoKSx1JiYodT1jbGVhclRpbWVvdXQodSkpLEwudGFwcz0wLHo9MDt6PEY7Kyt6KVU9Ult6XSxXPVRwKHRoaXMsUixVLmlkZW50aWZpZXIpLEwudG91Y2gwJiZMLnRvdWNoMFsyXT09PVUuaWRlbnRpZmllcj9MLnRvdWNoMFswXT1XOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmKEwudG91Y2gxWzBdPVcpO2lmKFU9TC50aGF0Ll9fem9vbSxMLnRvdWNoMSl7dmFyIHJ0PUwudG91Y2gwWzBdLG90PUwudG91Y2gwWzFdLHN0PUwudG91Y2gxWzBdLFN0PUwudG91Y2gxWzFdLGJ0PShidD1zdFswXS1ydFswXSkqYnQrKGJ0PXN0WzFdLXJ0WzFdKSpidCxNdD0oTXQ9U3RbMF0tb3RbMF0pKk10KyhNdD1TdFsxXS1vdFsxXSkqTXQ7VT1fKFUsTWF0aC5zcXJ0KGJ0L010KSksVz1bKHJ0WzBdK3N0WzBdKS8yLChydFsxXStzdFsxXSkvMl0sWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl19ZWxzZSBpZihMLnRvdWNoMClXPUwudG91Y2gwWzBdLFo9TC50b3VjaDBbMV07ZWxzZSByZXR1cm47TC56b29tKCJ0b3VjaCIscih5KFUsVyxaKSxMLmV4dGVudCxhKSl9fWZ1bmN0aW9uIEkoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVO2Zvcih0UigpLGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPW51bGx9LGYpLHo9MDt6PEY7Kyt6KVU9Ult6XSxMLnRvdWNoMCYmTC50b3VjaDBbMl09PT1VLmlkZW50aWZpZXI/ZGVsZXRlIEwudG91Y2gwOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmZGVsZXRlIEwudG91Y2gxO2lmKEwudG91Y2gxJiYhTC50b3VjaDAmJihMLnRvdWNoMD1MLnRvdWNoMSxkZWxldGUgTC50b3VjaDEpLEwudG91Y2gwKUwudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChMLnRvdWNoMFswXSk7ZWxzZSBpZihMLmVuZCgpLEwudGFwcz09PTIpe3ZhciBXPUh0KHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7VyYmVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gZy53aGVlbERlbHRhPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoK0wpLGcpOm59LGcuZmlsdGVyPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoISFMKSxnKTplfSxnLnRvdWNoYWJsZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOkI1KCEhTCksZyk6aX0sZy5leHRlbnQ9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpCNShbWytMWzBdWzBdLCtMWzBdWzFdXSxbK0xbMV1bMF0sK0xbMV1bMV1dXSksZyk6dH0sZy5zY2FsZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rTFswXSxvWzFdPStMWzFdLGcpOltvWzBdLG9bMV1dfSxnLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYVswXVswXT0rTFswXVswXSxhWzFdWzBdPStMWzFdWzBdLGFbMF1bMV09K0xbMF1bMV0sYVsxXVsxXT0rTFsxXVsxXSxnKTpbW2FbMF1bMF0sYVswXVsxXV0sW2FbMV1bMF0sYVsxXVsxXV1dfSxnLmNvbnN0cmFpbj1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1MLGcpOnJ9LGcuZHVyYXRpb249ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K0wsZyk6c30sZy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1MLGcpOmx9LGcub249ZnVuY3Rpb24oKXt2YXIgTD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gTD09PWM/ZzpMfSxnLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9KEw9K0wpKkwsZyk6TWF0aC5zcXJ0KGQpfSxnfXZhciBKM3Q9RWUoT2UoKSwxKTt2YXIgclI9Y2xhc3MgZXh0ZW5kcyBicHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2xldCB0PV9lKCkuZXhwZXJpbWVudHMoKTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e0ozdC5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLHIpfHwodGhpcy5fZXhwZXJpbWVudHM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX0sblI9bmV3IHJSO3ZhciBoNWU9e2dvb2dsZVN0YW5kYXJkOlsiI2RiNDQzNyIsIiNmZjcwNDMiLCIjZjRiNDAwIiwiIzBmOWQ1OCIsIiMwMDc5NmIiLCIjMDBhY2MxIiwiIzQyODVmNCIsIiM1YzZiYzAiLCIjYWI0N2JjIl0sZ29vZ2xlQ29vbDpbIiM5ZTlkMjQiLCIjMGY5ZDU4IiwiIzAwNzk2YiIsIiMwMGFjYzEiLCIjNDI4NWY0IiwiIzVjNmJjMCIsIiM2MDdkOGIiXSxnb29nbGVXYXJtOlsiIzc5NTU0OCIsIiNhYjQ3YmMiLCIjZjA2MjkyIiwiI2MyMTg1YiIsIiNkYjQ0MzciLCIjZmY3MDQzIiwiI2Y0YjQwMCJdLGdvb2dsZUNvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwQUNDMSIsIiNBQjQ3QkMiLCIjMkE1NkM2IiwiIzBiODA0MyIsIiNGN0NCNEQiLCIjYzBjYTMzIiwiIzVlMzViMSIsIiNBNTI3MTQiXSx0ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwNzdiYiIsIiNjYzMzMTEiLCIjMzNiYmVlIiwiI2VlMzM3NyIsIiMwMDk5ODgiLCIjYmJiYmJiIl0sY29sb3JCbGluZEFzc2lzdDE6WyIjNDQ3N2FhIiwiIzQ0YWFhYSIsIiNhYWFhNDQiLCIjYWE3NzQ0IiwiI2FhNDQ1NSIsIiNhYTQ0ODgiXSxjb2xvckJsaW5kQXNzaXN0MjpbIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiM4ODIyNTUiLCIjYWE0NDk5Il0sY29sb3JCbGluZEFzc2lzdDM6WyIjMzMyMjg4IiwiIzY2OTljYyIsIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiNhYTQ0NjYiLCIjODgyMjU1IiwiIzY2MTEwMCIsIiNhYTQ0OTkiXSxjb2xvckJsaW5kQXNzaXN0NDpbIiM0NDc3YWEiLCIjNjZjY2VlIiwiIzIyODgzMyIsIiNjY2JiNDQiLCIjZWU2Njc3IiwiI2FhMzM3NyIsIiNiYmJiYmIiXSxjb2xvckJsaW5kQXNzaXN0NTpbIiNGRjZEQjYiLCIjOTIwMDAwIiwiIzkyNDkwMCIsIiNEQkQxMDAiLCIjMjRGRjI0IiwiIzAwNkREQiIsIiM0OTAwOTIiXSxtbGRhc2g6WyIjRTQ3RUFEIiwiI0Y0NjQwRCIsIiNGQUEzMDAiLCIjRjVFNjM2IiwiIzAwQTA3NyIsIiMwMDc3QjgiLCIjMDBCN0VEIl19LGlSPWg1ZS50ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q7dmFyIF8kPWNsYXNze2NvbnN0cnVjdG9yKHQ9aVIpe3RoaXMucGFsZXR0ZT10LHRoaXMuaWRlbnRpZmllcnM9SmkoKX1zZXREb21haW4odCl7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnM9SmkoKSx0LmZvckVhY2goKHIsbik9Pnt0aGlzLmlkZW50aWZpZXJzLnNldChyLHRoaXMucGFsZXR0ZVtuJXRoaXMucGFsZXR0ZS5sZW5ndGhdKX0pLHRoaXN9Z2V0Q29sb3IodCl7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7dH0gd2FzIG5vdCBpbiB0aGUgZG9tYWluLmApO3JldHVybiB0aGlzLmlkZW50aWZpZXJzLmdldCh0KX19O2Z1bmN0aW9uIFEzdChlLHQpe2xldCByPW5ldyBfJDtmdW5jdGlvbiBuKCl7ci5zZXREb21haW4odCgpKX1yZXR1cm4gZS5hZGRMaXN0ZW5lcihuKSxuKCksaT0+ci5nZXRDb2xvcihpKX12YXIgZm49UTN0KHdwLCgpPT53cC5nZXRSdW5zKCkpLHZRcj1RM3QoblIsKCk9Pm5SLmdldEV4cGVyaW1lbnRzKCkubWFwKCh7bmFtZTplfSk9PmUpKTt2YXIgb2c9RWUoT2UoKSwxKTtfcyh7bW9kdWxlTmFtZToicnVuLWNvbG9yLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgW2NvbG9yLWNsYXNzPSdsaWdodC1ibHVlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0ncmVkJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdncmVlbiddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwdXJwbGUnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3RlYWwnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwaW5rJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcGluay01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0nb3JhbmdlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdicm93biddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdpbmRpZ28nXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICB9CiAgYH0pO3ZhciBvbD1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lcz1bXSx0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjooKT0+IiJ9LHRoaXMucmVnZXg9IiIsdGhpcy5zZWxlY3Rpb25TdGF0ZT17fSx0aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ9NDAsdGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2U9dGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl9X2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpe3ZhciB0PW9nLmRlYm91bmNlKHI9Pnt0aGlzLnJlZ2V4PXJ9LDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlO3I9PSIiP3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnJlZ2V4PXJ9LDMwKTp0KHIpfX1nZXQgX3JlZ2V4KCl7dmFyIHQ9dGhpcy5yZWdleDt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gocil7cmV0dXJuIG51bGx9fV9zZXRJc29sYXRvckljb24oKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGlvblN0YXRlLHI9b2cuZmlsdGVyKG9nLnZhbHVlcyh0KSkubGVuZ3RoLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCIuaXNvbGF0b3IiKSk7bi5mb3JFYWNoKGZ1bmN0aW9uKG8pe3I9PT0xJiZ0W28ubmFtZV0/by5pY29uPSJyYWRpby1idXR0b24tY2hlY2tlZCI6by5pY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pfWNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXgodCxyKXtsZXQgbj10aGlzLl9yZWdleDtyZXR1cm4gbj90aGlzLm5hbWVzLmZpbHRlcihpPT5uLnRlc3QoaSkpOnRoaXMubmFtZXN9Y29tcHV0ZU91dFNlbGVjdGVkKHQscil7dmFyIG49dGhpcy5zZWxlY3Rpb25TdGF0ZSxpPXRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdCxvPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4Lmxlbmd0aDw9aTtyZXR1cm4gdGhpcy5uYW1lc01hdGNoaW5nUmVnZXguZmlsdGVyKGE9Pm5bYV09PW51bGw/bzpuW2FdKX1zeW5jaHJvbml6ZUNvbG9ycyh0KXt2YXIgaSxvLGEsczt0aGlzLl9zZXRJc29sYXRvckljb24oKSwoKG89KGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpKSE9bnVsbD9vOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjpjLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmN9KX0pLCgocz0oYT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKSE9bnVsbD9zOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC5zdHlsZS5jb2xvcj1jfSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlU3R5bGVzKCl9KX1faXNvbGF0ZU5hbWUodCl7dmFyIHI9dC50YXJnZXQubmFtZSxuPXt9O3RoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihpKXtuW2ldPWk9PXJ9KSx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2NoZWNrYm94Q2hhbmdlKHQpe3ZhciByPXQudGFyZ2V0O2xldCBuPW9nLmNsb25lKHRoaXMuc2VsZWN0aW9uU3RhdGUpO25bci5uYW1lXT1yLmNoZWNrZWQsdGhpcy5zZWxlY3Rpb25TdGF0ZT1ufV9pc0NoZWNrZWQodCxyKXtyZXR1cm4gdGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKHQpIT0tMX10b2dnbGVBbGwoKXtsZXQgdD10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKG49PnRoaXMub3V0U2VsZWN0ZWQuaW5jbHVkZXMobikpLHI9e307dGhpcy5uYW1lcy5mb3JFYWNoKG49PntyW25dPSF0fSksdGhpcy5zZWxlY3Rpb25TdGF0ZT1yfX07b2wudGVtcGxhdGU9UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icnVuLWNvbG9yLXN0eWxlIj48L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dAogICAgICBpZD0ibmFtZXMtcmVnZXgiCiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJXcml0ZSBhIHJlZ2V4IHRvIGZpbHRlciBydW5zIgogICAgICB2YWx1ZT0iW1tyZWdleF1dIgogICAgICBvbi1iaW5kLXZhbHVlLWNoYW5nZWQ9Il9kZWJvdW5jZWRSZWdleENoYW5nZSIKICAgID48L3BhcGVyLWlucHV0PgogICAgPGRpdiBpZD0ib3V0ZXItY29udGFpbmVyIiBjbGFzcz0ic2Nyb2xsYmFyIj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbbmFtZXNNYXRjaGluZ1JlZ2V4XV0iCiAgICAgICAgb24tZG9tLWNoYW5nZT0ic3luY2hyb25pemVDb2xvcnMiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbX2lzQ2hlY2tlZChpdGVtLCBzZWxlY3Rpb25TdGF0ZS4qKV1dIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIgogICAgICAgICAgICA+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iaWNvbi1jb250YWluZXIgaXNvbGF0b3ItY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgaWNvbj0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCIKICAgICAgICAgICAgICBjbGFzcz0iaXNvbGF0b3IgdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIG9uLXRhcD0iX2lzb2xhdGVOYW1lIgogICAgICAgICAgICAgIG5hbWU9IltbaXRlbV1dIgogICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBjb250YWluOiBjb250ZW50OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubmFtZS1yb3cgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxvbC5wcm90b3R5cGUsIm5hbWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG9sLnByb3RvdHlwZSwicmVnZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxjb21wdXRlZDoiY29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleChuYW1lcy4qLCBfcmVnZXgpIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwibmFtZXNNYXRjaGluZ1JlZ2V4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvbC5wcm90b3R5cGUsInNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwLGNvbXB1dGVkOiJjb21wdXRlT3V0U2VsZWN0ZWQobmFtZXNNYXRjaGluZ1JlZ2V4LiosIHNlbGVjdGlvblN0YXRlLiopIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwib3V0U2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sb2wucHJvdG90eXBlLCJtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIix2b2lkIDApO0UoW1J0KCJyZWdleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG9sLnByb3RvdHlwZSwiX3JlZ2V4IixudWxsKTtFKFtCdCgic2VsZWN0aW9uU3RhdGUiLCJuYW1lcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sb2wucHJvdG90eXBlLCJfc2V0SXNvbGF0b3JJY29uIixudWxsKTtvbD1FKFt5dCgidGYtbXVsdGktY2hlY2tib3giKV0sb2wpO3ZhciBhMj1jbGFzcyBleHRlbmRzIG10e2dldCBfcGFydHMoKXt2YXIgdD10aGlzLnZhbHVlLHI9dGhpcy5kZWxpbWl0ZXJQYXR0ZXJuO2xldCBuPVtdO2Zvcig7Oyl7bGV0IGk9bmV3IFJlZ0V4cChyLCJnIik7aWYoaS50ZXN0KHQpLGkubGFzdEluZGV4PT09MCl7bi5wdXNoKHQpO2JyZWFrfWVsc2Ugbi5wdXNoKHQuc2xpY2UoMCxpLmxhc3RJbmRleCkpLHQ9dC5zbGljZShpLmxhc3RJbmRleCl9cmV0dXJuIG59fTthMi50ZW1wbGF0ZT1RYAogICAgPCEtLQogICAgICBUaGlzIHVnbHkgZm9ybWF0dGluZyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHNwYWNlcyBmcm9tIHNsaXBwaW5nCiAgICAgIGludG8gdGhlIEhUTUwuCiAgICAtLT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3BhcnRzXV0iIGFzPSJwYXJ0IgogICAgICA+W1twYXJ0XV08d2JyCiAgICAvPjwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhMi5wcm90b3R5cGUsInZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGEyLnByb3RvdHlwZSwiZGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKTtFKFtSdCgidmFsdWUiLCJkZWxpbWl0ZXJQYXR0ZXJuIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhMi5wcm90b3R5cGUsIl9wYXJ0cyIsbnVsbCk7YTI9RShbeXQoInRmLXdici1zdHJpbmciKV0sYTIpO3ZhciBtYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ydW5TZWxlY3Rpb25TdGF0ZT1PVygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KS5jYWxsKHRoaXMpLHRoaXMucmVnZXhJbnB1dD15XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pLmNhbGwodGhpcyksdGhpcy5fZGF0YUxvY2F0aW9uQ2xpcExlbmd0aD0yNTAsdGhpcy5fZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybj0iWy89XywtXSIsdGhpcy5jb2xvcmluZz17Z2V0Q29sb3I6Zm59LHRoaXMuX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU9elcoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksdGhpcy5fcmVnZXhPYnNlcnZlcj12XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pfWF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj13cC5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJydW5zIix3cC5nZXRSdW5zKCkpfSksdGhpcy5zZXQoInJ1bnMiLHdwLmdldFJ1bnMoKSksdGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1pYi5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX0pLHRoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX1kZXRhY2hlZCgpe3dwLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fcnVuU3RvcmVMaXN0ZW5lciksaWIucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9lbnZTdG9yZUxpc3RlbmVyKX1fdG9nZ2xlQWxsKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9Z2V0IF9jbGlwcGVkRGF0YUxvY2F0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhTG9jYXRpb24scj10aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoO2lmKHQhPT12b2lkIDApcmV0dXJuIHQubGVuZ3RoPnI/dC5zdWJzdHJpbmcoMCxyKTp0fV9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLiQkKCIjZGF0YS1sb2NhdGlvbi1kaWFsb2ciKS5vcGVuKCl9X3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24odCxyKXtyZXR1cm4gdCYmdC5sZW5ndGg+cn19O21jLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3A9IiIgaWQ9ImRhdGEtbG9jYXRpb24tZGlhbG9nIj4KICAgICAgPGgyPkRhdGEgTG9jYXRpb248L2gyPgogICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIgogICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgID4KICAgICAgPC90Zi13YnItc3RyaW5nCiAgICA+PC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3gKICAgICAgaWQ9Im11bHRpQ2hlY2tib3giCiAgICAgIG5hbWVzPSJbW3J1bnNdXSIKICAgICAgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iCiAgICAgIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIKICAgICAgcmVnZXg9Int7cmVnZXhJbnB1dH19IgogICAgICBjb2xvcmluZz0iW1tjb2xvcmluZ11dIgogICAgPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgICAgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIKICAgICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgICAgPjwvdGYtd2JyLXN0cmluZwogICAgICAgID48IS0tCiAgICAgICAgICBXZSB1c2UgSFRNTCBjb21tZW50cyB0byByZW1vdmUgc3BhY2VzIGJlZm9yZSB0aGUgZWxsaXBzaXMuCiAgICAgICAgLS0+PHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSIKICAgICAgICAgID48IS0tCiAgICAgICAgICAtLT48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgIHRmLXdici1zdHJpbmcgewogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgdGYtbXVsdGktY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgICN0b29sdGlwLWhlbHAgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQogICAgICBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CiAgICAgICNkYXRhLWxvY2F0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW46IDVweCAwIDAgMDsKICAgICAgICBtYXgtd2lkdGg6IDI4OHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdG9yZVJ1blNlbGVjdGlvblN0YXRlIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxtYy5wcm90b3R5cGUsInJ1blNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfcmVnZXhPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJyZWdleElucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbWMucHJvdG90eXBlLCJzZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG1jLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJkYXRhTG9jYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbWMucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsIl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG1jLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbUnQoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbWMucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCk7bWM9RShbeXQoInRmLXJ1bnMtc2VsZWN0b3IiKV0sbWMpO3ZhciBhbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQ9MH1jYW5jZWxsYWJsZSh0KXtsZXQgcj10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT57bGV0IGk9dGhpcy5jYW5jZWxsYXRpb25Db3VudCE9PXI7cmV0dXJuIHQoe3ZhbHVlOm4sY2FuY2VsbGVkOml9KX19Y2FuY2VsQWxsKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudCsrfX07dmFyIEg1PWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmh0bWw9IiJ9Z2V0IHNhbml0aXplZEh0bWwoKXtyZXR1cm4gdGhpcy5odG1sfWF0dGFjaGVkKCl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5tYXJrZG93biwhMCl9KX19O0g1LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1tzYW5pdGl6ZWRIdG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBcYDxwPlxgIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEJ5IHRhcmdldGluZyBvbmx5IHRoZSB0b3AtbGV2ZWwsIGV4dHJlbWFsIGVsZW1lbnRzLCB3ZSBwcmVzZXJ2ZSBhbnkKICAgICAgICogYWN0dWFsIHBhcmFncmFwaCBicmVha3MgYW5kIG9ubHkgY2hhbmdlIHRoZSBwYWRkaW5nIGFnYWluc3QgdGhlCiAgICAgICAqIGNvbXBvbmVudCBlZGdlcy4KICAgICAgICovCiAgICAgICNtYXJrZG93biA+IHA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDAuM2VtOwogICAgICB9CiAgICAgICNtYXJrZG93biA+IHA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4zZW07CiAgICAgIH0KCiAgICAgIC8qIFBsZWFzYW50IHN0eWxlcyBmb3IgTWFya2Rvd24gdGFibGVzLiAqLwogICAgICAjbWFya2Rvd24gdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCwKICAgICAgI21hcmtkb3duIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNkZmUyZTUpOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyLCAjYzZjYmQxKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEg1LnByb3RvdHlwZSwiaHRtbCIsdm9pZCAwKTtFKFtSdCgiaHRtbCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEg1LnByb3RvdHlwZSwic2FuaXRpemVkSHRtbCIsbnVsbCk7SDU9RShbeXQoInRmLW1hcmtkb3duLXZpZXciKV0sSDUpO19zKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICBmaWdjYXB0aW9uIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAuaGVhZGluZy1yb3cgewogICAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLyoqIFBpZWNlIG9mIHRleHQgaW4gdGhlIGZpZ3VyZSBjYXB0aW9uLiAqLwogICAgLmhlYWRpbmctbGFiZWwgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CgogICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqLwogICAgLmhlYWRpbmctcmlnaHQgewogICAgICBmbGV4LWdyb3c6IDA7CiAgICB9CiAgYH0pO2Z1bmN0aW9uIHMyKGUpe3JldHVybiBlP2UudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn1mdW5jdGlvbiB0TXQoZSl7bGV0IHQ9cDVlKGUpO3JldHVybiB0P01hdGgucm91bmQoKHRbMF0qMjk5K3RbMV0qNTg3K3RbMl0qMTE0KS8xZTMpPjEyNT8iaW5oZXJpdCI6IiNlZWUiOiJpbmhlcml0In1mdW5jdGlvbiBwNWUoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9ZS5tYXRjaCgvXiMoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkkLyk7aWYoIXQpcmV0dXJuIG51bGw7aWYoZS5sZW5ndGg9PTQpZm9yKHZhciByPTE7cjw9MztyKyspdFtyXT10W3JdK3Rbcl07cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX12YXIgZ2M9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIHRNdCh0KX1nZXQgX25hbWVMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gdHx8cnx8IiJ9Z2V0IF90YWdMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gciYmciE9PXQ/cjoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7bGV0IHI9dGhpcy4kLmRlc2NyaXB0aW9uRGlhbG9nO3IucG9zaXRpb25UYXJnZXQ9dC50YXJnZXQsci50b2dnbGUoKX19O2djLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGdjLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ2MucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnYy5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKTtFKFtSdCgiZGlzcGxheU5hbWUiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxnYy5wcm90b3R5cGUsIl9uYW1lTGFiZWwiLG51bGwpO0UoW1J0KCJkaXNwbGF5TmFtZSIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGdjLnByb3RvdHlwZSwiX3RhZ0xhYmVsIixudWxsKTtnYz1FKFt5dCgidGYtY2FyZC1oZWFkaW5nIildLGdjKTt2YXIgRmk9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9hdHRhY2hlZD0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIGZuKHQpfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfbWF4U3RlcEluZGV4KCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuIHQubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXX1nZXQgX3NhbXBsZVRleHQoKXt2YXIgdD10aGlzLnNhbXBsZTtyZXR1cm5gJHt0KzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3ZhciB0PXRoaXMudG90YWxTYW1wbGVzO3JldHVybiB0PjF9YXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuX2F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtsZXQgcj1fZSgpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi9hdWRpbyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6U3RyaW5nKHRoaXMuc2FtcGxlKX0pKSxuPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9aS52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGEpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixhLmxlbmd0aC0xKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9jcmVhdGVTdGVwRGF0dW0odCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh0LnF1ZXJ5KTtyLmFwcGVuZCgidHMiLFN0cmluZyh0LndhbGxfdGltZSkpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIscik7cmV0dXJue3dhbGxfdGltZTpzMihuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07RmkudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbdG90YWxTYW1wbGVzXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzdGVwIDxzdHJvbmc+W1tfY3VycmVudERhdHVtLnN0ZXBdXTwvc3Ryb25nPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgICAgW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzPSIiCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgPGF1ZGlvCiAgICAgICAgY29udHJvbHM9IiIKICAgICAgICBzcmMkPSJbW19jdXJyZW50RGF0dW0udXJsXV0iCiAgICAgICAgdHlwZSQ9IltbX2N1cnJlbnREYXR1bS5jb250ZW50VHlwZV1dIgogICAgICA+PC9hdWRpbz4KICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tfY3VycmVudERhdHVtLmxhYmVsXV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYWluLWF1ZGlvLWNvbnRhaW5lciI+PC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3I6ICM0MjQyNDI7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsgLyogc28gdGhlIHNsaWRlciBrbm9iIGRvZXNuJ3QgYnV0dCBvdXQgKi8KICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJ0b3RhbFNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRmkucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEZpLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxGaS5wcm90b3R5cGUsIl9tZXRhZGF0YUNhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRmkucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2N1cnJlbnREYXR1bSIsbnVsbCk7RShbUnQoInNhbXBsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpO0UoW1J0KCJ0b3RhbFNhbXBsZXMiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxGaS5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ0NoYW5nZSIsbnVsbCk7Rmk9RShbeXQoInRmLWF1ZGlvLWxvYWRlciIpXSxGaSk7dmFyICRoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihmeS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49ZnkubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpfSl9X3JlbG9hZEF1ZGlvKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1hdWRpby1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWZ5Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBmeS5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSx0b3RhbFNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTskaC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGF1ZGlvIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1hdWRpby1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkaC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJGgucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLCRoLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLCRoLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLCRoLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpOyRoPUUoW3l0KCJ0Zi1hdWRpby1kYXNoYm9hcmQiKV0sJGgpO3ZhciBWNT1jbGFzcyBleHRlbmRzIEd0KG10KXthdHRhY2hlZCgpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0LCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSl9X3NlbGVjdFRhcmdldCh0KXt0aGlzLnNlbGVjdGVkSWQ9dC5jdXJyZW50VGFyZ2V0LmlkfV9zZWxlY3RlZElkQ2hhbmdlZCgpe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiIyIrdGhpcy5zZWxlY3RlZElkKTshdHx8KHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKX0pLHQuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKSl9fTtWNS50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0id3JhcCI+CiAgICAgIDxoMz5bW25hbWVdXTwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PHNsb3Q+PC9zbG90PjwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVjUucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlbGVjdGVkSWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWNS5wcm90b3R5cGUsInNlbGVjdGVkSWQiLHZvaWQgMCk7VjU9RShbeXQoInRmLW9wdGlvbi1zZWxlY3RvciIpXSxWNSk7ZnVuY3Rpb24gb1IoZSx0KXtsZXQgcixuPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goYT0+e2xldCBzPWVbYV07cj09PXZvaWQgMCYmKHI9cy5kaXNwbGF5TmFtZSksciE9PXMuZGlzcGxheU5hbWUmJihyPW51bGwpLG5bcy5kZXNjcmlwdGlvbl09PT12b2lkIDAmJihuW3MuZGVzY3JpcHRpb25dPVtdKSxuW3MuZGVzY3JpcHRpb25dLnB1c2goYSl9KTtsZXQgaT1yIT1udWxsP3I6dCxvPSgoKT0+e2xldCBhPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PTA/IiI6YS5sZW5ndGg9PT0xP2FbMF06YDxwPjxzdHJvbmc+TXVsdGlwbGUgZGVzY3JpcHRpb25zOjwvc3Ryb25nPjwvcD48dWw+JHthLm1hcChjPT57bGV0IHU9bltjXS5tYXAocD0+YDxjb2RlPiR7cC5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8mL2csIiZhbXA7Iil9PC9jb2RlPmApLGg9dS5sZW5ndGg+Mj91LnNsaWNlKDAsdS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIit1W3UubGVuZ3RoLTFdOnUuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAke2Q1ZSh1Lmxlbmd0aCwicnVuIiwicnVucyIpfSAke2h9OjwvcD4ke2N9PC9saT5gfSkuam9pbigiIil9PC91bD5gfSkoKTtyZXR1cm57ZGlzcGxheU5hbWU6aSxkZXNjcmlwdGlvbjpvfX1mdW5jdGlvbiBkNWUoZSx0LHIpe3JldHVybiBlPT09MT90OnJ9dmFyIHJNdD1FZShPZSgpLDEpO3ZhciBIcD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLndlaWdodD0uNix0aGlzLl91cGRhdGVXZWlnaHQ9ck10LmRlYm91bmNlKGZ1bmN0aW9uKHQpe3RoaXMud2VpZ2h0PXR9LDI1MCl9X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCgpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpLHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfV9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkKCl7K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDwwP3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMCI6K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD4xJiYodGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIxIik7dmFyIHQ9K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDtpc05hTih0KXx8dGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0KX19O0hwLnRlbXBsYXRlPVFgCiAgICA8aDMgY2xhc3M9InRpdGxlIj5TbW9vdGhpbmc8L2gzPgogICAgPGRpdiBjbGFzcz0ic21vb3RoaW5nLWJsb2NrIj4KICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgIGlkPSJzbGlkZXIiCiAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcn19IgogICAgICAgIG1heD0iW1ttYXhdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgcGluCiAgICAgICAgc3RlcD0iW1tzdGVwXV0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHZhbHVlPSJ7e3dlaWdodH19IgogICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJpbnB1dCIKICAgICAgICBsYWJlbD0id2VpZ2h0IgogICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgdmFsdWU9Int7X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dH19IgogICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICA+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAudGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnNtb290aGluZy1ibG9jayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJzdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWF4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWluIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIcC5wcm90b3R5cGUsIndlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlckNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhwLnByb3RvdHlwZSwiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dCIsdm9pZCAwKTtIcD1FKFt5dCgidGYtc21vb3RoaW5nLWlucHV0IildLEhwKTt2YXIgWW89RWUoT2UoKSwxKTtmdW5jdGlvbiBNaShlLHQpe2xldCByPU9iamVjdC5rZXlzKHQpLnNvcnQoKS5maWx0ZXIoYT0+dFthXSE9PXZvaWQgMCk7aWYoIXIubGVuZ3RoKXJldHVybiBlO2xldCBuPWUuaW5kZXhPZigiPyIpIT09LTE/IiYiOiI/IixvPUFycmF5KCkuY29uY2F0KC4uLnIubWFwKGE9PntsZXQgcz10W2FdO3JldHVybihBcnJheS5pc0FycmF5KHMpP3M6W3NdKS5tYXAoYz0+YCR7YX09JHttNWUoYyl9YCl9KSkuam9pbigiJiIpO3JldHVybiBlK24rb31mdW5jdGlvbiBtNWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKX12YXIgJEt0PUVlKE9lKCksMSksWlduPUVlKHdsKCksMSk7dmFyIERLdD1FZShPZSgpLDEpO3ZhciB4NDsoZnVuY3Rpb24oZSl7ZVtlLkxPQURJTkc9MF09IkxPQURJTkciLGVbZS5MT0FERUQ9MV09IkxPQURFRCJ9KSh4NHx8KHg0PXt9KSk7ZnVuY3Rpb24ga1MoZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sb2FkS2V5PSIiLHRoaXMuZGF0YVRvTG9hZD1bXSx0aGlzLmdldERhdGFMb2FkTmFtZT1yPT5TdHJpbmcociksdGhpcy5kYXRhTG9hZGluZz0hMSx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMSx0aGlzLl9pc0Nvbm5lY3RlZD0hMSx0aGlzLl9kYXRhTG9hZFN0YXRlPW5ldyBNYXAsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwsdGhpcy5fbG9hZERhdGE9REt0LnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe3RoaXMuX2xvYWREYXRhQXN5bmMhPW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXt0aGlzLl9sb2FkRGF0YUFzeW5jIT1udWxsJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7IXRoaXMuYWN0aXZlfHwodGhpcy5fbG9hZERhdGFBc3luYyE9PW51bGwmJmNsZWFyVGltZW91dCh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPXNldFRpbWVvdXQodGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKHI9PntpZihyLmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtsZXQgbj10aGlzLmRhdGFUb0xvYWQuZmlsdGVyKGE9PntsZXQgcz10aGlzLmdldERhdGFMb2FkTmFtZShhKTtyZXR1cm4hdGhpcy5fZGF0YUxvYWRTdGF0ZS5oYXMocyl9KTtmb3IobGV0IGEgb2Ygbil7bGV0IHM9dGhpcy5nZXREYXRhTG9hZE5hbWUoYSk7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQocyx4NC5MT0FESU5HKX1sZXQgaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKGEuY2FuY2VsbGVkKXJldHVybjtsZXR7aXRlbTpzLGRhdGE6bH09YS52YWx1ZSxjPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHMpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGMseDQuTE9BREVEKSx0aGlzLmxvYWREYXRhQ2FsbGJhY2sodGhpcyxzLGwpfSksbz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKCFhLmNhbmNlbGxlZCl7bGV0IGw9YS52YWx1ZSxjPW5ldyBTZXQobi5tYXAoaD0+dGhpcy5nZXREYXRhTG9hZE5hbWUoaCkpKTt0aGlzLmRhdGFUb0xvYWQuc29tZShoPT5jLmhhcyh0aGlzLmdldERhdGFMb2FkTmFtZShoKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKHg0LkxPQURJTkcpfHwodGhpcy5kYXRhTG9hZGluZz0hMSl9KTt0aGlzLnJlcXVlc3REYXRhKG4saSwoKT0+byh2b2lkIDApKX0pKSl9fX12YXIgYnFlPUVlKE9lKCksMSksV289RWUod2woKSwxKSxSUz1be2NoYXJhY3RlcjoiXHUyNUZDIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0se2NoYXJhY3RlcjoiXHUyNUM2IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6Ilx1MjVCMiIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3RlcjoiXHUyNjA1IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnN0YXJ9LHtjaGFyYWN0ZXI6Ilx1MjcxQSIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dLEVkOyhmdW5jdGlvbihlKXtlLlNURVA9InN0ZXAiLGUuUkVMQVRJVkU9InJlbGF0aXZlIixlLldBTExfVElNRT0id2FsbF90aW1lIn0pKEVkfHwoRWQ9e30pKTt2YXIgZTA9NCx3cWU9NCxtQj0zLGdCPTIwLF9CPTQsT0t0PTY7ZnVuY3Rpb24gV3UoZSl7cmV0dXJuIHQ9PntsZXQgcj1NYXRoLmFicyh0KTtyPDFlLTE1JiYocj0wKTtsZXQgbjtyZXR1cm4gcj49MWU0P249eG4oIi4iK2UrIn5lIik6cj4wJiZyPC4wMT9uPXhuKCIuIitlKyJ+ZSIpOm49eG4oIi4iK2UrIn5nIiksbih0KX19dmFyIGI0PXhuKGAuJHt3cWV9fnNgKTtmdW5jdGlvbiBYYXQoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtlLnRpY2tHZW5lcmF0b3IoV28uU2NhbGVzLlRpY2tHZW5lcmF0b3JzLmludGVnZXJUaWNrR2VuZXJhdG9yKCkpO2xldCB0PW5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIik7cmV0dXJuIHQuZm9ybWF0dGVyKGI0KSx7c2NhbGU6ZSxheGlzOnQsYWNjZXNzb3I6cj0+ci5zdGVwfX12YXIgeUI9V28uRm9ybWF0dGVycy50aW1lKCIlYSAlYiAlZSwgJUg6JU06JVMiKTtmdW5jdGlvbiBTcWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOmUsYXhpczpuZXcgV28uQXhlcy5UaW1lKGUsImJvdHRvbSIpLGFjY2Vzc29yOnQ9PnQud2FsbF90aW1lfX12YXIgcjA9KGUsdCxyKT0+e2lmKGUucmVsYXRpdmUhPW51bGwpcmV0dXJuIGUucmVsYXRpdmU7bGV0IG49ci5kYXRhKCksaT1uLmxlbmd0aD4wPytuWzBdLndhbGxfdGltZTowO3JldHVybigrZS53YWxsX3RpbWUtaSkvKDYwKjYwKjFlMyl9LHZCPWU9PntsZXQgdD0iIixyPU1hdGguZmxvb3IoZS8yNCk7ZS09cioyNCxyJiYodCs9cisiZCAiKTtsZXQgbj1NYXRoLmZsb29yKGUpO2UtPW4sZSo9NjAsKG58fHIpJiYodCs9bisiaCAiKTtsZXQgaT1NYXRoLmZsb29yKGUpO2UtPWksZSo9NjAsKGl8fG58fHIpJiYodCs9aSsibSAiKTtsZXQgbz1NYXRoLmZsb29yKGUpO3JldHVybiB0K28rInMifTtmdW5jdGlvbiBNcWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6ZSxheGlzOm5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIiksYWNjZXNzb3I6cjB9fWZ1bmN0aW9uIHhCKGUpe3N3aXRjaChlKXtjYXNlIEVkLlNURVA6cmV0dXJuIFhhdCgpO2Nhc2UgRWQuV0FMTF9USU1FOnJldHVybiBTcWUoKTtjYXNlIEVkLlJFTEFUSVZFOnJldHVybiBNcWUoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB4VHlwZTogIitlKX19dmFyIHpzPUVlKE9lKCksMSksTW49RWUod2woKSwxKTt2YXIgdmE9RWUod2woKSwxKTtmdW5jdGlvbiBFcWUoZSl7bGV0IHQ9W10scj1lO2Zvcig7ciYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZih0LnB1c2gociksci5hc3NpZ25lZFNsb3Qpcj1yLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHIucGFyZW50RWxlbWVudClyPXIucGFyZW50RWxlbWVudDtlbHNle2xldCBuPXIucGFyZW50Tm9kZTtuIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9yPW4uaG9zdDpyPW4hPT1yP246bnVsbH1yZXR1cm4gdH12YXIgVHFlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gQ3FlKGUpe2xldCB0PUVxZShlKSxyPVRxZSxuPW51bGw7Zm9yKGxldCBpIG9mIHQpe2xldCBvPXZhLlV0aWxzLkRPTS5nZXRFbGVtZW50VHJhbnNmb3JtKGkpO2lmKG8hPW51bGwpe2xldCBsPWkuY2xpZW50V2lkdGgvMixjPWkuY2xpZW50SGVpZ2h0LzI7cj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2wsY10pLHI9dmEuVXRpbHMuTWF0aC5tdWx0aXBseU1hdHJpeChyLHZhLlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KG8pKSxyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbLWwsLWNdKX1sZXQgYT1pLnNjcm9sbExlZnQscz1pLnNjcm9sbFRvcDsobj09PW51bGx8fGk9PT1uKSYmKGEtPWkub2Zmc2V0TGVmdCtpLmNsaWVudExlZnQscy09aS5vZmZzZXRUb3AraS5jbGllbnRUb3Asbj1pLm9mZnNldFBhcmVudCkscj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2Esc10pfXJldHVybiByfXZhciB3Qj1jbGFzcyBleHRlbmRzIHZhLlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHQscil7bGV0IG49e3g6dCx5OnJ9LGk9Q3FlKHRoaXMuX3Jvb3RFbGVtZW50KTtyZXR1cm4gaT09bnVsbD9uOnZhLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0oaSxuKX19LFV2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuTW91c2V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW1V2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBVdih0KSxyW1V2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19LHF2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW3F2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBxdih0KSxyW3F2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19O3ZhLkludGVyYWN0aW9uLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWUueCYmMDw9ZS55JiZlLng8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZlLnk8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKX07dmFyIFNCPWNsYXNzIGV4dGVuZHMgdmEuSW50ZXJhY3Rpb25zLlBvaW50ZXJ7X2FuY2hvcih0KXtsZXQgcj10aGlzO3IuX2lzQW5jaG9yZWQ9ITAsci5fbW91c2VEaXNwYXRjaGVyPVV2LmdldERpc3BhdGNoZXIoci5fY29tcG9uZW50QXR0YWNoZWRUbyksci5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHIuX21vdXNlTW92ZUNhbGxiYWNrKSxyLl90b3VjaERpc3BhdGNoZXI9cXYuZ2V0RGlzcGF0Y2hlcihyLl9jb21wb25lbnRBdHRhY2hlZFRvKSxyLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHIuX3RvdWNoU3RhcnRDYWxsYmFjayl9fTt2YXIgekt0PUVlKE9lKCksMSk7dmFyIEd2OyhmdW5jdGlvbihlKXtlLkFVVE89ImF1dG8iLGUuQk9UVE9NPSJib3R0b20iLGUuUklHSFQ9InJpZ2h0In0pKEd2fHwoR3Y9e30pKTt2YXIgQXFlPXtib3hTaGFkb3c6IjAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIC4zKSIsb3BhY2l0eTowLHBvc2l0aW9uOiJmaXhlZCIsd2lsbENoYW5nZToidHJhbnNmb3JtIix6SW5kZXg6NX0sdzQ9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucG9zaXRpb249R3YuQVVUTyx0aGlzLm1pbkRpc3RGcm9tRWRnZT0xNSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9cmVhZHkoKXt0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9YXR0YWNoZWQoKXt0aGlzLl90dW5uZWw9dGhpcy5fY3JlYXRlVHVubmVsKCksdGhpcy5faGlkZU9uQmx1cj0oKT0+e2RvY3VtZW50LmhpZGRlbiYmdGhpcy5oaWRlKCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1kZXRhY2hlZCgpe3RoaXMuaGlkZSgpLHRoaXMuX3JlbW92ZVR1bm5lbCh0aGlzLl90dW5uZWwpLHRoaXMuX3R1bm5lbD1udWxsLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX3R1bm5lbC5zaGFkb3dSb290fWhpZGUoKXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fdHVubmVsLnN0eWxlLm9wYWNpdHk9MH11cGRhdGVBbmRQb3NpdGlvbih0KXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9yYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+eyF0aGlzLmlzQXR0YWNoZWR8fHRoaXMuX3JlcG9zaXRpb25JbXBsKHQpfSl9X3JlcG9zaXRpb25JbXBsKHQpe2xldCByPXRoaXMuX3R1bm5lbCxuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89d2luZG93LmlubmVySGVpZ2h0LGE9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxzPW4udG9wLGw9cytuLmhlaWdodCxjPWkuaGVpZ2h0K2dCLHU9bnVsbCxoPU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksZj1udWxsLHA9czt0aGlzLnBvc2l0aW9uPT1Hdi5SSUdIVD9oPW4ucmlnaHQ6KHA9bCtnQixhPGgraS53aWR0aCt0aGlzLm1pbkRpc3RGcm9tRWRnZSYmKGg9bnVsbCxmPXRoaXMubWluRGlzdEZyb21FZGdlKSksdGhpcy5wb3NpdGlvbj09R3YuQVVUTyYmbi50b3AtYz4wJiZvPG4udG9wK24uaGVpZ2h0K2MmJihwPW51bGwsdT1vLXMrZ0IpO2xldCBkPXtjb250YWluOiJjb250ZW50IixvcGFjaXR5OjEsbGVmdDpoP2Ake2h9cHhgOm51bGwscmlnaHQ6Zj9gJHtmfXB4YDpudWxsLHRvcDpwP2Ake3B9cHhgOm51bGwsYm90dG9tOnU/YCR7dX1weGA6bnVsbH07ekt0LmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxkKXx8KE9iamVjdC5hc3NpZ24oci5zdHlsZSxkKSx0aGlzLl9zdHlsZUNhY2hlPWQpfV9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LnN0eWxlLEFxZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fV9yZW1vdmVUdW5uZWwodCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19O0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHc0LnByb3RvdHlwZSwiY29udGVudENvbXBvbmVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdzQucHJvdG90eXBlLCJwb3NpdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3NC5wcm90b3R5cGUsIm1pbkRpc3RGcm9tRWRnZSIsdm9pZCAwKTt3ND1FKFt5dCgidnotY2hhcnQtdG9vbHRpcCIpXSx3NCk7dmFyIE5TPUVlKHdsKCksMSk7dmFyIEhLdD0xZTQsVkt0PS4wMDEsVUt0PXhuKCIuMn5lIiksUHFlPXhuKCIuNH5yIiksRkt0PXhuKCIsfiIpO2Z1bmN0aW9uIEJLdChlKXtpZihlPT09MClyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PUhLdHx8dDxWS3Q/VUt0KGUpOlBxZShlKX12YXIgS2F0PXtmb3JtYXRUaWNrOkJLdCxmb3JtYXRTaG9ydDpCS3QsZm9ybWF0UmVhZGFibGUoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PUhLdHx8dDxWS3Q/VUt0KGUpOkZLdChlKX0sZm9ybWF0TG9uZzpGS3R9LGlXbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQodm9pZCAwLHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6NH0pO3ZhciBvV249eG4oIjAuM35zIiksYVduPXhuKCIsLjN+ZiIpO3ZhciBJcWU9MWUzLExxZT02MCpJcWUsa3FlPTYwKkxxZSxScWU9MjQqa3FlLHNXbj0zNjUqUnFlLGxXbj14bigiLjR+Iik7dmFyIE5xZT1ZYigpLnRpY2tGb3JtYXQoKSwkYXQscUt0PXtmb3JtYXRUaWNrKGUpe3JldHVybiBOcWUobmV3IERhdGUoZSkpfSxmb3JtYXRTaG9ydChlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSl9LGZvcm1hdFJlYWRhYmxlKGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZygkYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KX0sZm9ybWF0TG9uZyhlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTt2YXIgVGQ7KGZ1bmN0aW9uKGUpe2VbZS5MSU5FQVI9MF09IkxJTkVBUiIsZVtlLkxPRzEwPTFdPSJMT0cxMCIsZVtlLlRJTUU9Ml09IlRJTUUifSkoVGR8fChUZD17fSkpO2Z1bmN0aW9uIEdLdChlKXtzd2l0Y2goZSl7Y2FzZSBUZC5MSU5FQVI6cmV0dXJuIG5ldyBaYXQ7Y2FzZSBUZC5MT0cxMDpyZXR1cm4gbmV3IEphdDtjYXNlIFRkLlRJTUU6cmV0dXJuIG5ldyBRYXQ7ZGVmYXVsdDpsZXQgdD1lO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgRHFlPS4wNSxaYXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9S2F0fXRyYW5zZm9ybSh0LHIsbil7bGV0W2ksb109dCxhPW8taSxbcyxsXT1yLGM9bC1zO3JldHVybiBhPT09MD9zOmMvYSoobi1pKStzfWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LHIsbil9cmV2ZXJzZSh0LHIsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHIsdCxuKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYobjxyKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKG49PT1yKXJldHVybiByPT09MD9bLTEsMV06cjwwP1syKnIsMF06WzAsMipyXTtsZXQgaT1PbigpLG89KG4tcitOdW1iZXIuRVBTSUxPTikqRHFlLFthLHNdPWkuZG9tYWluKFtyLW8sbitvXSkubmljZSgpLmRvbWFpbigpO3JldHVyblthLHNdfXRpY2tzKHQscil7cmV0dXJuIE9uKCkuZG9tYWluKHQpLnRpY2tzKHIpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSmF0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUthdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxyLG4pe2lmKG48PTApcmV0dXJuIHJbMF07bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hO3JldHVybiBuPXRoaXMudHJhbnNmb3JtKG4pLGgvKHUrTnVtYmVyLkVQU0lMT04pKihuLWwpK2F9cmV2ZXJzZSh0LHIsbil7bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKG4tYSkrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYocj5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCBpPU1hdGgubWF4KHIsTnVtYmVyLk1JTl9WQUxVRSksbz1NYXRoLm1heChuLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBuPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLGkqLjUpLG8qMl19dGlja3ModCxyKXtsZXQgbj10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxpPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLG89Y2MoKS5kb21haW4oW24saV0pLnRpY2tzKHIpO3JldHVybiBvLmxlbmd0aD9vOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LFFhdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2NhbGU9WWIoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9cUt0fWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShyKShuKX1yZXZlcnNlKHQscixuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UocikuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXRoaXMuc2NhbGUuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bci5nZXRUaW1lKCksbi5nZXRUaW1lKCldfXRpY2tzKHQscil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnRpY2tzKHIpLm1hcChuPT5uLmdldFRpbWUoKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fTt2YXIgTUI9Y2xhc3MgZXh0ZW5kcyBOUy5TY2FsZXMuTGluZWFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2V0VmFsdWVQcm92aWRlckZvckRvbWFpbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj10LHRoaXN9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10O3JldHVybiBHS3QoVGQuTElORUFSKS5uaWNlRG9tYWluKFtuLGldKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KHQpe2xldCByPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKHIubGVuZ3RoIT09MCl7bGV0IGk9W05TLlV0aWxzLk1hdGgubWluKHIsblswXSksTlMuVXRpbHMuTWF0aC5tYXgocixuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKGkpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtsZXQgcj10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhyKX1leHRlbnRPZlZhbHVlcyh0KXtsZXQgcj10LmZpbHRlcihvPT5OUy5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIobykpLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IG89ci5zb3J0KChsLGMpPT5sLWMpLGE9c2EobywuMDUpLHM9c2EobywuOTUpO249ci5maWx0ZXIobD0+bD49YSYmbDw9cyl9bGV0IGk9YWEobik7cmV0dXJuIGlbMF09PW51bGx8fGlbMV09PW51bGw/W106aX1pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn19O3ZhciBDQj1FZSh3bCgpLDEpO3ZhciBXS3Q9RWUod2woKSwxKSxFQj1jbGFzcyBleHRlbmRzIFdLdC5RdWFudGl0YXRpdmVTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faWdub3JlT3V0bGllcj0hMX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7bGV0IHI9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMocil9fTt2YXIgVEI9TWF0aC5wb3coMiwtMTA3NCk7ZnVuY3Rpb24gUzQoZSl7cmV0dXJuIE1hdGgubG9nMTAoZSl9ZnVuY3Rpb24gdHN0KGUpe3JldHVybiBNYXRoLnBvdygxMCxlKX12YXIgQUI9Y2xhc3MgZXh0ZW5kcyBFQntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fZDNMb2dTY2FsZT1jYygpLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUodCl7cmV0dXJuIHQ8PTA/TmFOOnRoaXMuX2QzTG9nU2NhbGUodCl9aW52ZXJ0KHQpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydCh0KX1zY2FsZVRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfWludmVydGVkVHJhbnNmb3JtYXRpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9c2V0VHJhbnNmb3JtYXRpb25Eb21haW4odCl7dGhpcy5kb21haW4odCl9Z2V0VHJhbnNmb3JtYXRpb25FeHRlbnQoKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX1fZ2V0RG9tYWluKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59X3NldERvbWFpbih0KXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPXQ7bGV0W3Isbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heChUQixyKSxuXSl9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10LG89TWF0aC5tYXgoUzQoVEIpLFM0KG4pKSxhPVM0KGkpLHM9YS1vLGw9cz9zKnRoaXMucGFkUHJvcG9ydGlvbigpOjE7cmV0dXJuW3RzdChNYXRoLm1heChTNChUQiksby1sKSksdHN0KGErbCldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7bGV0IHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCksbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoci5sZW5ndGghPT0wKXtsZXQgaT1bQ0IuVXRpbHMuTWF0aC5taW4ocixuWzBdKSxDQi5VdGlscy5NYXRoLm1heChyLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4oaSl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe3JldHVybiBzdXBlci5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKS5tYXAobj0+bj4wP246VEIpfV9kZWZhdWx0RXh0ZW50KCl7cmV0dXJuWzEsMTBdfV9iYWNraW5nU2NhbGVEb21haW4odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZDNMb2dTY2FsZS5kb21haW4oKToodGhpcy5fZDNMb2dTY2FsZS5kb21haW4odCksdGhpcyl9X2dldFJhbmdlKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUucmFuZ2UoKX1fc2V0UmFuZ2UodCl7dGhpcy5fZDNMb2dTY2FsZS5yYW5nZSh0KX1kZWZhdWx0VGlja3MoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS50aWNrcygxKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXModCl7bGV0IHI9dC5maWx0ZXIobz0+Q0IuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZvPjApLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IGE9ci5tYXAoUzQpLnNvcnQoKGMsdSk9PmMtdSkscz1zYShhLC4wNSksbD1zYShhLC45NSk7bj1hLmZpbHRlcihjPT5jPj1zJiZjPD1sKS5tYXAodHN0KX1sZXQgaT1hYShuKTtyZXR1cm4gaVswXT09bnVsbHx8aVsxXT09bnVsbD9bXTppfX07dmFyIENkPUVlKHdsKCksMSk7dmFyIG4wPUVlKHdsKCksMSksUEI9Y2xhc3MgZXh0ZW5kcyBuMC5Db21wb25lbnRzLlNlbGVjdGlvbkJveExheWVye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMuZWFzZUZuPXhzLHRoaXMuX2FuaW1hdGlvblRpbWU9NzUwLHRoaXMueFNjYWxlKHQpLHRoaXMueVNjYWxlKHIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkRyYWcsdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkNsaWNrLHRoaXMuc2V0dXBDYWxsYmFja3MoKSx0aGlzLnVuem9vbU1ldGhvZD1uLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyl9KSx0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyl9KX1pbnRlcmFjdGlvblN0YXJ0KHQpe3RoaXMub25TdGFydD10fWludGVyYWN0aW9uRW5kKHQpe3RoaXMub25FbmQ9dH1kcmFnSW50ZXJhY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufXNldHVwQ2FsbGJhY2tzKCl7bGV0IHQ9ITE7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHI9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0OnJ9KSx0aGlzLm9uU3RhcnQoKX0pLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcoKHIsbik9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0aGlzLmJveFZpc2libGUoITApLHQ9ITB9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKChyLG4pPT57dGhpcy5ib3hWaXNpYmxlKCExKSx0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0P3RoaXMuem9vbSgpOnRoaXMub25FbmQoKSx0PSExfSksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5vbkRvdWJsZUNsaWNrKHRoaXMudW56b29tLmJpbmQodGhpcykpfWFuaW1hdGlvblRpbWUodCl7aWYodD09bnVsbClyZXR1cm4gdGhpcy5fYW5pbWF0aW9uVGltZTtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbmltYXRpb25UaW1lIGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbmltYXRpb25UaW1lPXQsdGhpc31lYXNlKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiZWFzZSBmdW5jdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm4odCgwKSE9PTB8fHQoMSkhPT0xKSYmbjAuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKT09MCAmJiBmKDEpPT0xLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKSx0aGlzLmVhc2VGbj10LHRoaXN9em9vbSgpe2xldCB0PXRoaXMueEV4dGVudCgpWzBdLnZhbHVlT2YoKSxyPXRoaXMueEV4dGVudCgpWzFdLnZhbHVlT2YoKSxuPXRoaXMueUV4dGVudCgpWzFdLnZhbHVlT2YoKSxpPXRoaXMueUV4dGVudCgpWzBdLnZhbHVlT2YoKTt0PT09cnx8bj09PWl8fHRoaXMuaW50ZXJwb2xhdGVab29tKHQscixuLGkpfXVuem9vbSgpe2xldCB0PXRoaXMueFNjYWxlKCk7dC5fZG9tYWluTWluPW51bGwsdC5fZG9tYWluTWF4PW51bGw7bGV0IHI9dC5fZ2V0RXh0ZW50KCk7dGhpcy54U2NhbGUoKS5kb21haW4ociksdGhpcy51bnpvb21NZXRob2QoKX1pc1pvb21pbmcodCl7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoIXQpLHRoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZW5hYmxlZCghdCl9aW50ZXJwb2xhdGVab29tKHQscixuLGkpe2xldCBvPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLGE9dGhpcy54U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCkscz10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxsPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLGM9dGhpcy5lYXNlRm4sdT0ocCxkLGcpPT56aShwLGQpKGMoZykpO3RoaXMuaXNab29taW5nKCEwKTtsZXQgaD1EYXRlLm5vdygpLGY9KCk9PntsZXQgZD1EYXRlLm5vdygpLWgsZz10aGlzLl9hbmltYXRpb25UaW1lPT09MD8xOk1hdGgubWluKDEsZC90aGlzLl9hbmltYXRpb25UaW1lKSxfPXUobyx0LGcpLHk9dShhLHIsZykseD11KHMsbixnKSxiPXUobCxpLGcpO3RoaXMueFNjYWxlKCkuZG9tYWluKFtfLHldKSx0aGlzLnlTY2FsZSgpLmRvbWFpbihbeCxiXSksZzwxP24wLlV0aWxzLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChmKToodGhpcy5vbkVuZCgpLHRoaXMuaXNab29taW5nKCExKSl9O2YoKX19O3ZhciB4YTsoZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09Ik5PTkUiLGVbZS5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsZVtlLlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoeGF8fCh4YT17fSkpO3ZhciB6Zj1jbGFzcyBleHRlbmRzIENkLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT14YS5OT05FLHRoaXMucGFuU3RhcnRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5FbmRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5ab29tPW5ldyBDZC5JbnRlcmFjdGlvbnMuUGFuWm9vbSh0LHIpLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihvPT56Zi5pc1BhbktleShvKSYmby5idXR0b249PT0wKSx0aGlzLnBhblpvb20ud2hlZWxGaWx0ZXIodGhpcy5jYW5TY3JvbGxab29tKSx0aGlzLmRyYWdab29tTGF5ZXI9bmV3IFBCKHQscixuKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIobz0+IXpmLmlzUGFuS2V5KG8pJiZvLmJ1dHRvbj09PTApLHRoaXMuYXBwZW5kKHRoaXMuZHJhZ1pvb21MYXllcik7bGV0IGk9dGhpcy5vbldoZWVsLmJpbmQodGhpcyk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1DZC5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGkpLHRoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLnBhblpvb20uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXImJih0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwoaSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwpfSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5QQU5OSU5HKX0pLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdFbmQoKCk9Pnt0aGlzLnN0YXRlPT14YS5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKHhhLk5PTkUpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5EUkFHX1pPT01JTkcpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PXhhLkRSQUdfWk9PTUlORyYmdGhpcy5zZXRTdGF0ZSh4YS5OT05FKX0pfW9uV2hlZWwodCxyKXtpZih0aGlzLmNhblNjcm9sbFpvb20ocikpcmV0dXJuO2xldCBuPXRoaXMuZWxlbWVudCgpO2lmKCFuLnNlbGVjdCgiLmhlbHAiKS5lbXB0eSgpKXJldHVybjtsZXQgaT1uLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiaGVscCIsITApO2kuYXBwZW5kKCJzcGFuIikudGV4dCgiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSxpLm9uKCJhbmltYXRpb25lbmQiLCgpPT52b2lkIGkucmVtb3ZlKCkpfXN0YXRpYyBpc1BhbktleSh0KXtyZXR1cm4gQm9vbGVhbih0LmFsdEtleSl8fEJvb2xlYW4odC5zaGlmdEtleSl9Y2FuU2Nyb2xsWm9vbSh0KXtyZXR1cm4gdC5hbHRLZXl9c2V0U3RhdGUodCl7aWYodGhpcy5zdGF0ZT09dClyZXR1cm47bGV0IHI9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXQsdGhpcy5yb290KCkucmVtb3ZlQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZShyKSksdGhpcy5yb290KCkuYWRkQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZSh0KSkscj09eGEuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCksdD09eGEuUEFOTklORyYmdGhpcy5wYW5TdGFydENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKX1zdGF0ZUNsYXNzTmFtZSh0KXtzd2l0Y2godCl7Y2FzZSB4YS5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIHhhLkRSQUdfWk9PTUlORzpyZXR1cm4iZHJhZy16b29taW5nIjtjYXNlIHhhLk5PTkU6ZGVmYXVsdDpyZXR1cm4iIn19b25QYW5TdGFydCh0KXt0aGlzLnBhblN0YXJ0Q2FsbGJhY2suYWRkKHQpfW9uUGFuRW5kKHQpe3RoaXMucGFuRW5kQ2FsbGJhY2suYWRkKHQpfW9uU2Nyb2xsWm9vbSh0KXt0aGlzLnBhblpvb20ub25ab29tRW5kKHQpfW9uRHJhZ1pvb21TdGFydCh0KXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25TdGFydCh0KX1vbkRyYWdab29tRW5kKHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvbkVuZCh0KX19O3ZhciBJQjsoZnVuY3Rpb24oZSl7ZVtlLlRFWFQ9MF09IlRFWFQiLGVbZS5ET009MV09IkRPTSJ9KShJQnx8KElCPXt9KSk7dmFyIEZmOyhmdW5jdGlvbihlKXtlLkxPRz0ibG9nIixlLkxJTkVBUj0ibGluZWFyIn0pKEZmfHwoRmY9e30pKTt2YXIgWUt0PTIwLERTPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCl7dGhpcy5kaXJ0eURhdGFzZXRzPW5ldyBTZXQsdGhpcy5zZXJpZXNOYW1lcz1bXSx0aGlzLm5hbWUyZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWksdGhpcy50b29sdGlwPW8sdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgTW4uRGF0YXNldCx0aGlzLm5hbkRhdGFzZXQ9bmV3IE1uLkRhdGFzZXQsdGhpcy55VmFsdWVBY2Nlc3Nvcj1yLHRoaXMuc3ltYm9sRnVuY3Rpb249dSx0aGlzLl9kZWZhdWx0WFJhbmdlPWwsdGhpcy5fZGVmYXVsdFlSYW5nZT1jLHRoaXMudG9vbHRpcENvbHVtbnM9YSx0aGlzLmJ1aWxkQ2hhcnQodCxyLG4scyxoKX1idWlsZENoYXJ0KHQscixuLGksbyl7dGhpcy5kZXN0cm95KCk7bGV0IGE9dCgpO3RoaXMueEFjY2Vzc29yPWEuYWNjZXNzb3IsdGhpcy54U2NhbGU9YS5zY2FsZSx0aGlzLnhBeGlzPWEuYXhpcyx0aGlzLnhBeGlzLm1hcmdpbigxKS50aWNrTGFiZWxQYWRkaW5nKDMpLG8mJnRoaXMueEF4aXMuZm9ybWF0dGVyKG8pLHRoaXMueVNjYWxlPURTLmdldFlTY2FsZUZyb21UeXBlKG4pLHRoaXMueVNjYWxlLnNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpLHRoaXMueUF4aXM9bmV3IE1uLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBzPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihzKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKSx0aGlzLmZpbGxBcmVhPWk7bGV0IGw9bmV3IHpmKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLCgpPT50aGlzLnJlc2V0RG9tYWluKCkpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uPXRoaXMuY3JlYXRlVG9vbHRpcEludGVyYWN0aW9uKGwpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudD1uZXcgTW4uQ29tcG9uZW50O2xldCBjPXRoaXMuYnVpbGRQbG90KHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLGkpO3RoaXMuZ3JpZGxpbmVzPW5ldyBNbi5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7bGV0IHU9bnVsbDtuIT09RmYuTE9HJiYodT1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigiaG9yaXpvbnRhbCIpLHUuc2NhbGUodGhpcy55U2NhbGUpLnZhbHVlKDApKTtsZXQgaD1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigidmVydGljYWwiKTtoLnNjYWxlKHRoaXMueFNjYWxlKS52YWx1ZSgwKSx0aGlzLmNlbnRlcj1uZXcgTW4uQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsdSxoLGMsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LGxdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IE1uLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7biYmKHRoaXMubWFyZ2luQXJlYVBsb3Q9bmV3IE1uLlBsb3RzLkFyZWEsdGhpcy5tYXJnaW5BcmVhUGxvdC54KHRoaXMueEFjY2Vzc29yLHQpLHRoaXMubWFyZ2luQXJlYVBsb3QueShuLmhpZ2hlckFjY2Vzc29yLHIpLHRoaXMubWFyZ2luQXJlYVBsb3QueTAobi5sb3dlckFjY2Vzc29yKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuMyksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJzdHJva2Utd2lkdGgiLDApKSx0aGlzLnNtb290aGVkQWNjZXNzb3I9Yz0+Yy5zbW9vdGhlZDtsZXQgaT1uZXcgTW4uUGxvdHMuTGluZTtpLngodGhpcy54QWNjZXNzb3IsdCksaS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksaS5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubGluZVBsb3Q9aSx0aGlzLnNldHVwVG9vbHRpcHMoaSk7bGV0IG89bmV3IE1uLlBsb3RzLkxpbmU7aWYoby54KHRoaXMueEFjY2Vzc29yLHQpLG8ueSh0aGlzLnNtb290aGVkQWNjZXNzb3Isciksby5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMuc21vb3RoTGluZVBsb3Q9byx0aGlzLnN5bWJvbEZ1bmN0aW9uKXtsZXQgYz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtjLngodGhpcy54QWNjZXNzb3IsdCksYy55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYy5hdHRyKCJmaWxsIiwodSxoLGYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoZi5tZXRhZGF0YSgpLm5hbWUpKSxjLmF0dHIoIm9wYWNpdHkiLDEpLGMuc2l6ZShfQioyKSxjLnN5bWJvbCgodSxoLGYpPT50aGlzLnN5bWJvbEZ1bmN0aW9uKGYubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3Q9Y31sZXQgYT1uZXcgTW4uUGxvdHMuU2NhdHRlcjthLngodGhpcy54QWNjZXNzb3IsdCksYS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYS5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSksYS5hdHRyKCJvcGFjaXR5IiwxKSxhLnNpemUoX0IqMiksYS5kYXRhc2V0cyhbdGhpcy5sYXN0UG9pbnRzRGF0YXNldF0pLHRoaXMuc2NhdHRlclBsb3Q9YTtsZXQgcz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtzLngodGhpcy54QWNjZXNzb3IsdCkscy55KGM9PmMuZGlzcGxheVkscikscy5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSkscy5hdHRyKCJvcGFjaXR5IiwxKSxzLnNpemUoT0t0KjIpLHMuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pLHMuc3ltYm9sKE1uLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZSksdGhpcy5uYW5EaXNwbGF5PXM7bGV0IGw9W3MsYSxvLGldO3JldHVybiB0aGlzLm1hcmdpbkFyZWFQbG90JiZsLnB1c2godGhpcy5tYXJnaW5BcmVhUGxvdCksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJmwucHVzaCh0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCksbmV3IE1uLkNvbXBvbmVudHMuR3JvdXAobCl9aWdub3JlWU91dGxpZXJzKHQpe3QhPT10aGlzLl9pZ25vcmVZT3V0bGllcnMmJih0aGlzLl9pZ25vcmVZT3V0bGllcnM9dCx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMueVNjYWxlLmlnbm9yZU91dGxpZXIodCksdGhpcy5yZXNldFlEb21haW4oKSl9Z2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCl7bGV0IHQ9dGhpcy5nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKSxyPW49PnQubWFwKGk9Pm4uZGF0YSgpLm1hcChvPT5pKG8sLTEsbikpKTtyZXR1cm4genMuZmxhdHRlbkRlZXAodGhpcy5kYXRhc2V0cy5tYXAocikpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7bGV0IHQ9dGhpcy5nZXRZQXhpc0FjY2Vzc29yKCkscj10aGlzLmRhdGFzZXRzLm1hcChvPT57bGV0IGE9bnVsbCxzPW8uZGF0YSgpLmZpbHRlcihsPT4haXNOYU4odChsLC0xLG8pKSk7aWYocy5sZW5ndGg+MCl7bGV0IGw9cy5sZW5ndGgtMTthPXNbbF0sYS5uYW1lPW8ubWV0YWRhdGEoKS5uYW1lLGEucmVsYXRpdmU9cjAoYSwtMSxvKX1yZXR1cm4gYX0pLmZpbHRlcihvPT5vIT1udWxsKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEociksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bGV0IG49bz0+e2xldCBhPW51bGwscz1vLmRhdGEoKSxsPTA7Zm9yKDtsPHMubGVuZ3RoJiZhPT1udWxsOylpc05hTih0KHNbbF0sLTEsbykpfHwoYT10KHNbbF0sLTEsbykpLGwrKzthPT1udWxsJiYoYT0wKTtsZXQgYz1bXTtmb3IobD0wO2w8cy5sZW5ndGg7bCsrKWlzTmFOKHQoc1tsXSwtMSxvKSk/KHNbbF0ubmFtZT1vLm1ldGFkYXRhKCkubmFtZSxzW2xdLmRpc3BsYXlZPWEsc1tsXS5yZWxhdGl2ZT1yMChzW2xdLC0xLG8pLGMucHVzaChzW2xdKSk6YT10KHNbbF0sLTEsbyk7cmV0dXJuIGN9LGk9enMuZmxhdHRlbih0aGlzLmRhdGFzZXRzLm1hcChuKSk7dGhpcy5uYW5EYXRhc2V0LmRhdGEoaSl9cmVzZXREb21haW4oKXt0aGlzLnJlc2V0WERvbWFpbigpLHRoaXMucmVzZXRZRG9tYWluKCl9cmVzZXRYRG9tYWluKCl7bGV0IHQ7aWYodGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCl0PXRoaXMuX2RlZmF1bHRYUmFuZ2U7ZWxzZXtsZXQgcj10aGlzLnhTY2FsZTtyLl9kb21haW5NaW49bnVsbCxyLl9kb21haW5NYXg9bnVsbCx0PXIuX2dldEV4dGVudCgpfXRoaXMueFNjYWxlLmRvbWFpbih0KX1yZXNldFlEb21haW4oKXt0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2xldCB0PVt0aGlzLmdldFlBeGlzQWNjZXNzb3IoKV07cmV0dXJuIHRoaXMuZmlsbEFyZWEmJnQucHVzaCh0aGlzLmZpbGxBcmVhLmxvd2VyQWNjZXNzb3IsdGhpcy5maWxsQXJlYS5oaWdoZXJBY2Nlc3NvciksdH1nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24odCl7bGV0IHI9bmV3IFNCLG49KCk9PntyLmVuYWJsZWQoITEpLHRoaXMuaGlkZVRvb2x0aXBzKCl9LGk9KCk9PnIuZW5hYmxlZCghMCk7cmV0dXJuIHQub25QYW5TdGFydChuKSx0Lm9uRHJhZ1pvb21TdGFydChuKSx0Lm9uUGFuRW5kKGkpLHQub25EcmFnWm9vbUVuZChpKSx0Lm9uU2Nyb2xsWm9vbSgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpLHIub25Qb2ludGVyTW92ZShvPT57dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249byx0aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KG8pfSksci5vblBvaW50ZXJFeGl0KCgpPT50aGlzLmhpZGVUb29sdGlwcygpKSxyfXVwZGF0ZVRvb2x0aXBDb250ZW50KHQpeyF0aGlzLmxpbmVQbG90fHwod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgcj17eDp0LngseTp0Lnl9LG49dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCksaT10aGlzLmxpbmVQbG90LmRhdGFzZXRzKCkubWFwKGw9PnRoaXMuZmluZENsb3Nlc3RQb2ludChyLGwpKS5maWx0ZXIobD0+Qm9vbGVhbihsKSksbz1Nbi5VdGlscy5ET00uaW50ZXJzZWN0c0JCb3gsYT1pLmZpbHRlcihsPT5vKGwueCxsLnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IobC5kYXR1bSwwLGwuZGF0YXNldCkpKSxzPWEuZmlsdGVyKGw9PiFpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKGwuZGF0dW0sMCxsLmRhdGFzZXQpKSk7aWYoaS5sZW5ndGghPT0wKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7bGV0IGw9dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLmRhdGEocyxjPT5jLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtsLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJwb2ludCIsITApLGwuYXR0cigiciIsX0IpLmF0dHIoImN4IixjPT5jLngpLmF0dHIoImN5IixjPT5jLnkpLnN0eWxlKCJzdHJva2UiLCJub25lIikuYXR0cigiZmlsbCIsYz0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSxsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhhLHIsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpfWhpZGVUb29sdGlwcygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMudG9vbHRpcC5oaWRlKCksdGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5IiwiYmxvY2siKSx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikucmVtb3ZlKCl9c2V0dXBUb29sdGlwcyh0KXt0Lm9uRGV0YWNoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCExKX0pLHQub25BbmNob3IoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5hdHRhY2hUbyh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCEwKX0pfWRyYXdUb29sdGlwcyh0LHIsbil7aWYoIXQubGVuZ3RoKXt0aGlzLnRvb2x0aXAuaGlkZSgpO3JldHVybn1sZXR7Y29sb3JTY2FsZTppfT10aGlzO249W3t0aXRsZToiIixzdGF0aWM6ITEsZXZhbFR5cGU6SUIuRE9NLGV2YWx1YXRlKGQpe3JldHVybiBIdCh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLCIifSxlbnRlcihkKXtIdCh0aGlzKS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpfX0sLi4ubl07bGV0IGE9V3UoZTApLHM9ZD0+TWF0aC5wb3coZC54LXIueCwyKStNYXRoLnBvdyhkLnktci55LDIpLGw9enMubWluKHQubWFwKHMpKSxjPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcjt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09ImFzY2VuZGluZyI/dD16cy5zb3J0QnkodCxkPT5jKGQuZGF0dW0sLTEsZC5kYXRhc2V0KSk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJkZXNjZW5kaW5nIj90PXpzLnNvcnRCeSh0LGQ9PmMoZC5kYXR1bSwtMSxkLmRhdGFzZXQpKS5yZXZlcnNlKCk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJuZWFyZXN0Ij90PXpzLnNvcnRCeSh0LHMpOnQ9dC5zbGljZSgwKS5yZXZlcnNlKCk7bGV0IHU9dGhpcyxoPUh0KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxmPWguc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKG4sKGQsZyxfKT0+ZC50aXRsZSk7Zi5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KGQ9PmQudGl0bGUpLm5vZGVzKCksZi5leGl0KCkucmVtb3ZlKCk7bGV0IHA9aC5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEodCwoZCxnLF8pPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtwLmNsYXNzZWQoImRpc3RhbnQiLGQ9PntsZXQgZz1kLmRhdGFzZXQuZGF0YSgpWzBdLF89enMubGFzdChkLmRhdGFzZXQuZGF0YSgpKSx5PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKGcsMCxkLmRhdGFzZXQpKSx4PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKF8sMCxkLmRhdGFzZXQpKSxiPXRoaXMuc21vb3RoaW5nRW5hYmxlZD9kLmRhdHVtLnNtb290aGVkOnRoaXMueVZhbHVlQWNjZXNzb3IoZC5kYXR1bSwwLGQuZGF0YXNldCk7cmV0dXJuIHIueDx5fHxyLng+eHx8aXNOYU4oYil9KS5jbGFzc2VkKCJjbG9zZXN0IixkPT5zKGQpPT09bCkuZWFjaChmdW5jdGlvbihkKXt1LmRyYXdUb29sdGlwUm93KHRoaXMsbixkKX0pLm9yZGVyKCkscC5leGl0KCkucmVtb3ZlKCkscC5lbnRlcigpLmFwcGVuZCgidHIiKS5lYWNoKGZ1bmN0aW9uKGQpe3UuZHJhd1Rvb2x0aXBSb3codGhpcyxuLGQpfSkubm9kZXMoKSx0aGlzLnRvb2x0aXAudXBkYXRlQW5kUG9zaXRpb24odGhpcy50YXJnZXRTVkcubm9kZSgpKX1kcmF3VG9vbHRpcFJvdyh0LHIsbil7bGV0IGk9dGhpcyxvPUh0KHQpLnNlbGVjdEFsbCgidGQiKS5kYXRhKHIpO28uZWFjaChmdW5jdGlvbihhKXthLnN0YXRpY3x8aS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKGksdGhpcyxhLG4pfSksby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKGZ1bmN0aW9uKGEpeyJlbnRlciJpbiBhJiZhLmVudGVyLmNhbGwodGhpcyxuKSxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLGEsbil9KX1kcmF3VG9vbHRpcENvbHVtbih0LHIsbil7bGV0e3Ntb290aGluZ0VuYWJsZWQ6aX09dGhpczsiZXZhbFR5cGUiaW4gciYmci5ldmFsVHlwZT09SUIuRE9NP3IuZXZhbHVhdGUuY2FsbCh0LG4se3Ntb290aGluZ0VuYWJsZWQ6aX0pOkh0KHQpLnRleHQoci5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSkpfWZpbmRDbG9zZXN0UG9pbnQodCxyKXtsZXQgbj1yLmRhdGEoKS5tYXAoKHMsbCk9PnRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKHMsbCxyKSkpLGk9enMuc29ydGVkSW5kZXgobix0LngpO2lmKG4ubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGk9PT1uLmxlbmd0aClpPWktMTtlbHNlIGlmKGkhPT0wKXtsZXQgcz1NYXRoLmFicyhuW2ktMV0tdC54KSxsPU1hdGguYWJzKG5baV0tdC54KTtpPXM8bD9pLTE6aX1sZXQgbz1yLmRhdGEoKVtpXSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3IobyxpLHIpOnRoaXMueVZhbHVlQWNjZXNzb3IobyxpLHIpO3JldHVybnt4Om5baV0seTp0aGlzLnlTY2FsZS5zY2FsZShhKSxkYXR1bTpvLGRhdGFzZXQ6cn19cmVzbW9vdGhEYXRhc2V0KHQpe2xldCByPXQuZGF0YSgpLG49dGhpcy5zbW9vdGhpbmdXZWlnaHQsaT1yLmxlbmd0aD4wPzA6TmFOLG89MCxhPXIubWFwKChsLGMpPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGwsYyx0KSkscz1hLmV2ZXJ5KGw9Pmw9PWFbMF0pO3IuZm9yRWFjaCgobCxjKT0+e2xldCB1PWFbY107aWYoc3x8IU51bWJlci5pc0Zpbml0ZSh1KSlsLnNtb290aGVkPXU7ZWxzZXtpPWkqbisoMS1uKSp1LG8rKztsZXQgaD0xO24hPT0xJiYoaD0xLU1hdGgucG93KG4sbykpLGwuc21vb3RoZWQ9aS9ofX0pfWdldERhdGFzZXQodCl7cmV0dXJuIHRoaXMubmFtZTJkYXRhc2V0c1t0XT09PXZvaWQgMCYmKHRoaXMubmFtZTJkYXRhc2V0c1t0XT1uZXcgTW4uRGF0YXNldChbXSx7bmFtZTp0LG1ldGE6bnVsbH0pKSx0aGlzLm5hbWUyZGF0YXNldHNbdF19c3RhdGljIGdldFlTY2FsZUZyb21UeXBlKHQpe2lmKHQ9PT1GZi5MT0cpcmV0dXJuIG5ldyBBQjtpZih0PT09RmYuTElORUFSKXJldHVybiBuZXcgTUI7dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIit0KX1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0PXQuc29ydCgpLHQucmV2ZXJzZSgpLHRoaXMuc2VyaWVzTmFtZXM9dH1kaXNhYmxlQ2hhbmdlcygpe3RoaXMuZGlydHlEYXRhc2V0cy5zaXplfHwodGhpcy5saW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhMaW5lUGxvdCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyhbXSkpfWNvbW1pdENoYW5nZXMoKXt0aGlzLmRhdGFzZXRzPXRoaXMuc2VyaWVzTmFtZXMubWFwKHQ9PnRoaXMuZ2V0RGF0YXNldCh0KSksWy4uLnRoaXMuZGlydHlEYXRhc2V0c10uZm9yRWFjaCh0PT57dGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnJlc21vb3RoRGF0YXNldCh0aGlzLmdldERhdGFzZXQodCkpfSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSx0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpLHRoaXMuZGlydHlEYXRhc2V0cy5jbGVhcigpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2Vycyh0KXtsZXQgcj10LmRhdGEoKTtpZihyLmxlbmd0aDw9WUt0KXJldHVybiB0O2xldCBuPU1hdGguY2VpbChyLmxlbmd0aC9ZS3QpLGk9bmV3IEFycmF5KE1hdGguZmxvb3Ioci5sZW5ndGgvbikpO2ZvcihsZXQgbz0wLGE9MDtvPGkubGVuZ3RoO28rKyxhKz1uKWlbb109clthXTtyZXR1cm4gbmV3IE1uLkRhdGFzZXQoaSx0Lm1ldGFkYXRhKCkpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmRpc2FibGVDaGFuZ2VzKCksdGhpcy5nZXREYXRhc2V0KHQpLmRhdGEociksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zZXRTZXJpZXNNZXRhZGF0YSh0LHIpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoTXgoS2woe30sdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKCkpLHttZXRhOnJ9KSksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zbW9vdGhpbmdVcGRhdGUodCl7dGhpcy5zbW9vdGhpbmdXZWlnaHQ9dCx0aGlzLmRhdGFzZXRzLmZvckVhY2gocj0+dGhpcy5yZXNtb290aERhdGFzZXQocikpLHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8KHRoaXMubGluZVBsb3QuYWRkQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMuc21vb3RoZWRBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSEwLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cykpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfXNtb290aGluZ0Rpc2FibGUoKXt0aGlzLnNtb290aGluZ0VuYWJsZWQmJih0aGlzLmxpbmVQbG90LnJlbW92ZUNsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpfXNldENvbG9yU2NhbGUodCl7dGhpcy5jb2xvclNjYWxlPXR9c2V0VG9vbHRpcENvbHVtbnModCl7dGhpcy50b29sdGlwQ29sdW1ucz10fXNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHQpe3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9dH1yZW5kZXJUbyh0KXt0aGlzLnRhcmdldFNWRz10LHRoaXMub3V0ZXIucmVuZGVyVG8odCksdGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCYmdGhpcy5yZXNldFhEb21haW4oKSx0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsJiZ0aGlzLnJlc2V0WURvbWFpbigpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXJlZHJhdygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpLHRoaXMub3V0ZXIucmVkcmF3KCl9KX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl7aWYodGhpcy5fbGFzdERyYXdCQm94KXtsZXR7d2lkdGg6dH09dGhpcy5fbGFzdERyYXdCQm94LHt3aWR0aDpyfT10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD09MCYmdDxyJiZ0aGlzLm91dGVyLmludmFsaWRhdGVDYWNoZSgpfXRoaXMuX2xhc3REcmF3QkJveD10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZGVzdHJveSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKSx0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKX1vbkFuY2hvcih0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLm9uQW5jaG9yKHQpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHQodGhpcy54QXhpcy5nZXRTY2FsZSgpKSYmdCh0aGlzLnlBeGlzLmdldFNjYWxlKCkpO2Z1bmN0aW9uIHQocil7bGV0IG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9ci5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpO3JldHVybiBpWzBdPT09blswXSYmaVsxXT09PW5bMV19fX07dmFyIFhLdD1FZShPZSgpLDEpLG5zdD1FZSh3bCgpLDEpO19zKHttb2R1bGVOYW1lOiJwbG90dGFibGUtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAKLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0LAoucGxvdHRhYmxlIC5zY2F0dGVyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KCmB9KTt2YXIgaTA7KGZ1bmN0aW9uKGUpe2UuR1JPVVA9IkciLGUuRElWPSJESVYiLGUuU1ZHPSJTVkciLGUuVEVYVD0iVEVYVCJ9KShpMHx8KGkwPXt9KSk7dmFyIGVzdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnVuaXF1ZUlkPTAsdGhpcy5yb290PXR9ZXhwb3J0QXNTdHJpbmcoKXtsZXQgdD10aGlzLmNvbnZlcnQodGhpcy5yb290KTtpZighdClyZXR1cm4iIjtsZXQgcj10aGlzLmNyZWF0ZVJvb3RTdmcoKTtyZXR1cm4gci5hcHBlbmRDaGlsZCh0KSxyLm91dGVySFRNTH1jcmVhdGVVbmlxdWVJZCh0KXtyZXR1cm5gJHt0fV8ke3RoaXMudW5pcXVlSWQrK31gfWdldFNpemUoKXtyZXR1cm4gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNyZWF0ZVJvb3RTdmcoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxyPXRoaXMuZ2V0U2l6ZSgpO3JldHVybiB0LnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7ci53aWR0aH0gJHtyLmhlaWdodH1gKSx0LnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLHR9Y3JlYXRlQ29udmVydGVkTm9kZSh0KXtsZXQgcj10Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYodC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJihyPT1pMC5ESVZ8fHI9PWkwLlNWRykpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaTAuR1JPVVApLGk9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksbz1wYXJzZUludChpLmxlZnQsMTApLGE9cGFyc2VJbnQoaS50b3AsMTApO2lmKG98fGEpe2xldCBzPXRoaXMuY3JlYXRlVW5pcXVlSWQoImNsaXAiKTtuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7b30sICR7YX0pYCksbi5zZXRBdHRyaWJ1dGUoImNsaXAtcGF0aCIsYHVybCgjJHtzfSlgKTtsZXQgbD1wYXJzZUludChpLndpZHRoLDEwKSxjPXBhcnNlSW50KGkuaGVpZ2h0LDEwKSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInJlY3QiKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyhsKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKGMpKTtsZXQgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIik7aC5pZD1zLGguYXBwZW5kQ2hpbGQodSksbi5hcHBlbmRDaGlsZChoKX1yZXR1cm4gbn1lbHNlIHJldHVybiB0LmNsb25lTm9kZSgpfWNvbnZlcnQodCl7bGV0IHI9dGhpcy5jcmVhdGVDb252ZXJ0ZWROb2RlKHQpO3JldHVybiBBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKGk9PnRoaXMuY29udmVydChpKSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goaT0+e3IuYXBwZW5kQ2hpbGQoaSl9KSxyLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PWkwLkdST1VQJiYhci5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUodCk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKHQscikpfXN0cmlwQ2xhc3ModCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSx0fXRyYW5zZmVyU3R5bGUodCxyKXtpZihyLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gcjtsZXQgbj1yLGk9ci5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLG89d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGk9PWkwLlRFWFQmJk9iamVjdC5hc3NpZ24obi5zdHlsZSx7Zm9udEZhbWlseTpvLmZvbnRGYW1pbHksZm9udFNpemU6by5mb250U2l6ZSxmb250V2VpZ2h0Om8uZm9udFdlaWdodH0pLGkhPWkwLkdST1VQJiYobi5zZXRBdHRyaWJ1dGUoImZpbGwiLG8uZmlsbCksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsby5zdHJva2UpLG4uc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLG8uc3Ryb2tlV2lkdGgpKSxvLm9wYWNpdHkhPSIxIiYmbi5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLG8ub3BhY2l0eSkscn1zaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4hMX19LExCPWNsYXNzIGV4dGVuZHMgZXN0e3Nob3VsZE9taXROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERT90LmNsYXNzTGlzdC5jb250YWlucygic2NhdHRlci1wbG90Iik6ITF9fTtfcyh7bW9kdWxlTmFtZToidnotcGFuLXpvb20tc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAuaGVscCB7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7CiAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7CiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYWRlLW91dDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpOwogICAgICBib3R0b206IDA7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgbGVmdDogMDsKICAgICAgb3BhY2l0eTogMTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDA7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICAuaGVscCA+IHNwYW4gewogICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgMTAwJSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgfQogIGB9KTt2YXIgT3FlPVd1KGUwKSxqS3Q9ZT0+aXNOYU4oZSk/Ik5hTiI6T3FlKGUpLGlzdD1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTplPT5lLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlNtb290aGVkIixldmFsdWF0ZShlLHQpe2xldHtzbW9vdGhpbmdFbmFibGVkOnJ9PXQ7cmV0dXJuIGpLdChyP2UuZGF0dW0uc21vb3RoZWQ6ZS5kYXR1bS5zY2FsYXIpfX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6ZT0+akt0KGUuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTplPT5iNChlLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOmU9PnlCKGUuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZT0+dkIocjAoZS5kYXR1bSwtMSxlLmRhdGFzZXQpKX1dLFpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IG5zdC5TY2FsZXMuQ29sb3IoKS5yYW5nZShqYi5zbGljZSgwKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMuc21vb3RoaW5nV2VpZ2h0PS42LHRoaXMueFR5cGU9bnVsbCx0aGlzLnhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9bnVsbCx0aGlzLnlWYWx1ZUFjY2Vzc29yPXQ9PnQuc2NhbGFyLHRoaXMudG9vbHRpcENvbHVtbnM9aXN0LHRoaXMueVNjYWxlVHlwZT1GZi5MSU5FQVIsdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy50b29sdGlwU29ydGluZ01ldGhvZD0iZGVmYXVsdCIsdGhpcy50b29sdGlwUG9zaXRpb249R3YuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2xldCB0PXtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9O3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcC5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleWRvd24iLHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleXVwIix0aGlzLl9vbktleVVwLmJpbmQodGhpcyksdCl9ZGV0YWNoZWQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCh7bm9kZTp0LGV2ZW50TmFtZTpyLGZ1bmM6bixvcHRpb246aX0pPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2xpc3RlbmVycy5jbGVhcigpKX1fbGlzdGVuKHQscixuLGk9e30pe3RoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz1uZXcgU2V0KSx0aGlzLl9saXN0ZW5lcnMuYWRkKHtub2RlOnQsZXZlbnROYW1lOnIsZnVuYzpuLG9wdGlvbjppfSksdC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX1fb25LZXlEb3duKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbk1vdXNlRG93bih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCEwKX1fb25Nb3VzZVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITEpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHRoaXMuX2NoYXJ0P3RoaXMuX2NoYXJ0LmlzRGF0YUZpdFRvRG9tYWluKCk6ITB9c2V0VmlzaWJsZVNlcmllcyh0KXtYS3QuaXNFcXVhbCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUsdCl8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9c2V0U2VyaWVzTWV0YWRhdGEodCxyKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdPXIsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpeyF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpfXJlc2V0RG9tYWluKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfV9tYWtlQ2hhcnQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2xldCB0PXRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDtpZighdGhpcy54VHlwZSYmIXQ/dD1YYXQ6dGhpcy54VHlwZSYmKHQ9KCk9PnhCKHRoaXMueFR5cGUpKSwhKCF0fHwhdGhpcy55VmFsdWVBY2Nlc3Nvcnx8IXRoaXMudG9vbHRpcENvbHVtbnMpKXt2YXIgcj1uZXcgRFModCx0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlVHlwZSx0aGlzLmNvbG9yU2NhbGUsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsdGhpcy5zeW1ib2xGdW5jdGlvbix0aGlzLnhBeGlzRm9ybWF0dGVyKSxuPUh0KHRoaXMuJC5jaGFydGRpdik7ci5yZW5kZXJUbyhuKSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PXIsdGhpcy5fY2hhcnQub25BbmNob3IoKCk9PnRoaXMuZmlyZSgiY2hhcnQtYXR0YWNoZWQiKSl9fSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXshdGhpcy5fY2hhcnR8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaCh0PT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LHRoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XXx8W10pfSksdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZpbHRlcih0PT50aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKS5mb3JFYWNoKHQ9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNNZXRhZGF0YSh0LHRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pfSksdGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX2NoYXJ0LmNvbW1pdENoYW5nZXMoKSl9X3Ntb290aGluZ0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fCh0aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5fY2hhcnQuc21vb3RoaW5nVXBkYXRlKHRoaXMuc21vb3RoaW5nV2VpZ2h0KTp0aGlzLl9jaGFydC5zbW9vdGhpbmdEaXNhYmxlKCkpfV9vdXRsaWVyc0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0Lmlnbm9yZVlPdXRsaWVycyh0aGlzLmlnbm9yZVlPdXRsaWVycyl9X2NvbG9yU2NhbGVDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHwodGhpcy5fY2hhcnQuc2V0Q29sb3JTY2FsZSh0aGlzLmNvbG9yU2NhbGUpLHRoaXMuX2NoYXJ0LnJlZHJhdygpKX1fdG9vbHRpcENvbHVtbnNDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwQ29sdW1ucyh0aGlzLnRvb2x0aXBDb2x1bW5zKX1fdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX1nZXRFeHBvcnRlcigpe3JldHVybiBuZXcgTEIodGhpcy4kLmNoYXJ0ZGl2KX19O1pyLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcAogICAgICBpZD0idG9vbHRpcCIKICAgICAgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIKICAgID48L3Z6LWNoYXJ0LXRvb2x0aXA+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZ6LXBhbi16b29tLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiAubWFpbiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IGxpbmUuZ3VpZGUtbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjOTk5OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgICAgIH0KICAgICAgI2NoYXJ0ZGl2OmhvdmVyIC5tYWluIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLG5zdC5TY2FsZXMuQ29sb3IpXSxaci5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxaci5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwieEF4aXNGb3JtYXR0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaci5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwieVNjYWxlVHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ0b29sdGlwUG9zaXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfY2hhcnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9zZXJpZXNEYXRhQ2FjaGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfc2VyaWVzTWV0YWRhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLCJ4VHlwZSIsInlWYWx1ZUFjY2Vzc29yIiwieVNjYWxlVHlwZSIsImlzQXR0YWNoZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCk7RShbQnQoIl9jaGFydCIsIl92aXNpYmxlU2VyaWVzQ2FjaGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3JlbG9hZEZyb21DYWNoZSIsbnVsbCk7RShbQnQoInNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGhpbmdXZWlnaHQiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Ntb290aGluZ0NoYW5nZWQiLG51bGwpO0UoW0J0KCJpZ25vcmVZT3V0bGllcnMiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX291dGxpZXJzQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yU2NhbGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVDaGFuZ2VkIixudWxsKTtFKFtCdCgidG9vbHRpcENvbHVtbnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zQ2hhbmdlZCIsbnVsbCk7RShbQnQoInRvb2x0aXBTb3J0aW5nTWV0aG9kIiwiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxaci5wcm90b3R5cGUsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQiLG51bGwpO1pyPUUoW3l0KCJ2ei1saW5lLWNoYXJ0MiIpXSxacik7dmFyIHJzdD1jbGFzcyBleHRlbmRzIG10e307cnN0LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgPHRhYmxlPgogICAgICAgIDx0aGVhZD48L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIHRib2R5IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgdGQgewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICB9CgogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICB9CgogICAgICAuY2xvc2VzdCAuc3dhdGNoIHsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggI2ZmZjsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaXN0YW50IHRkOm5vdCguc3dhdGNoKSB7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO3JzdD1FKFt5dCgidnotbGluZS1jaGFydC10b29sdGlwIildLHJzdCk7dmFyIG9zdD1bXSx6cWU9MCxGcWU9JEt0LnRocm90dGxlKGZ1bmN0aW9uIGUoKXtpZihvc3QubGVuZ3RoPT0wKXJldHVybjtsZXQgdD1vc3Quc2hpZnQoKTt0JiZ0LmFjdGl2ZSYmKHQucmVkcmF3KCksdC5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITEpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh6cWUpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9LDEwMCksSG49Y2xhc3MgZXh0ZW5kcyBrUyhHdChtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZWRyYXdSYWY9bnVsbCx0aGlzLmFjdGl2ZT0hMSx0aGlzLmxvZ1NjYWxlQWN0aXZlPSExLHRoaXMuY29sb3JTY2FsZT17c2NhbGU6Zm59LHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMCx0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMX1vbkxvYWRGaW5pc2goKXt0aGlzLmNvbW1pdENoYW5nZXMoKSx0aGlzLmRhdGFUb0xvYWQubGVuZ3RoPjAmJnRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZCYmKHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMSx0aGlzLmdldENoYXJ0KCkucmVzZXREb21haW4oKSksdGhpcy5yZWRyYXcoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKX1leHBvcnRBc1N2Z1N0cmluZygpe3JldHVybiB0aGlzLmdldENoYXJ0KCkuZ2V0RXhwb3J0ZXIoKS5leHBvcnRBc1N0cmluZygpfWdldENoYXJ0KCl7cmV0dXJuIHRoaXMuJC5jaGFydH1yZXNldERvbWFpbigpe3RoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzRGF0YSh0LHIpfXNldFNlcmllc01ldGFkYXRhKHQscil7dGhpcy5nZXRDaGFydCgpLnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZ2V0Q2hhcnQoKS5jb21taXRDaGFuZ2VzKCl9cmVkcmF3KCl7dGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pfV9sb2FkS2V5Q2hhbmdlZCgpe3RoaXMucmVzZXQoKSx0aGlzLl9yZXNldERvbWFpbk9uTmV4dExvYWQ9ITB9X2RhdGFTZXJpZXNDaGFuZ2VkKCl7dGhpcy5nZXRDaGFydCgpLnNldFZpc2libGVTZXJpZXModGhpcy5kYXRhU2VyaWVzKX1fbG9nU2NhbGVDaGFuZ2VkKHQpe2xldCByPXRoaXMuZ2V0Q2hhcnQoKTtyLnlTY2FsZVR5cGU9dD9GZi5MT0c6RmYuTElORUFSLHRoaXMucmVkcmF3KCl9X2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSYmKG9zdC5wdXNoKHRoaXMpLEZxZSgpKX1fb25DaGFydEF0dGFjaGVkKCl7dGhpcy5hY3RpdmV8fCh0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMCl9fTtIbi50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEhuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJsb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSG4ucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEhuLnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSG4ucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEhuLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJ0b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhuLnByb3RvdHlwZSwidG9vbHRpcFBvc2l0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sSG4ucHJvdG90eXBlLCJzeW1ib2xGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIbi5wcm90b3R5cGUsIl9yZXNldERvbWFpbk9uTmV4dExvYWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJfbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUiLHZvaWQgMCk7RShbQnQoImxvYWRLZXkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhuLnByb3RvdHlwZSwiX2xvYWRLZXlDaGFuZ2VkIixudWxsKTtFKFtCdCgiZGF0YVNlcmllcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIbi5wcm90b3R5cGUsIl9kYXRhU2VyaWVzQ2hhbmdlZCIsbnVsbCk7SG49RShbeXQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKV0sSG4pO19zKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICA6aG9zdCB7CiAgICAgIG1hcmdpbjogNXB4IDEwcHg7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDMzMHB4OwogICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgaDEgewogICAgICBmb250LXNpemU6IDE5cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICB9CgogICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgI2J1dHRvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQoKICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIHBhZGRpbmc6IDRweDsKICAgIH0KCiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMzJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICBtYXJnaW46IDJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgIH0KICBgfSk7dmFyIE9TPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyl7dGhpcy5ydW49dCx0aGlzLnRhZz1yLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPW99Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19O2Z1bmN0aW9uIGtCKGUsdCl7cmV0dXJuYCR7dH0gKCR7ZX0pYH12YXIgV3Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtsZXQgcj10Lm1hdGNoKC9cKCguKilcKSQvKTtyZXR1cm4gcj9yWzFdOiIifX07dmFyIEpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyBXdih7c2NhbGU6Zm59KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPWEsbD10aGlzLl90YWdGaWx0ZXIsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnNjYWxhcil9LHt0aXRsZToiTG93ZXIgTWFyZ2luIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ubG93ZXIpfSx7dGl0bGU6IlVwcGVyIE1hcmdpbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnVwcGVyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpuPT5iNChuLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOm49PnlCKG4uZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6bj0+dkIocjAobi5kYXR1bSwtMSxuLmRhdGFzZXQpKX1dfSkoKSx0aGlzLl9taXNzaW5nVGFncz1bXSx0aGlzLl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy4kLmxvYWRlcjt0JiZ0LnJlc2V0RG9tYWluKCl9X2NzdlVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6ImNzdiJ9KX1fanNvblVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6Impzb24ifSl9X2Rvd25sb2FkRGF0YVVybCh0LHIpe2xldCBuPXRbcl0saT1uZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bi5nZXRUYWcoKSxydW46bi5nZXRSdW4oKX0pO3JldHVybiBfZSgpLnBsdWdpblJvdXRlRm9yU3JjKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIixpKX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbih0KXtyZXR1cm4ocixuLGkpPT57aWYoIWkucmVnZXhfdmFsaWQpe3RoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO3JldHVybn1sZXQgbz1Zby5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxhPVtdO1lvLmZvckVhY2godCxsPT57bGV0IGM9ITEsdT1pLnRhZ190b19ldmVudHNbbC52YWx1ZV0saD1pLnRhZ190b19ldmVudHNbbC5sb3dlcl0sZj1pLnRhZ190b19ldmVudHNbbC51cHBlcl07aWYoWW8uaXNVbmRlZmluZWQodSkmJihhLnB1c2gobC52YWx1ZSksYz0hMCksWW8uaXNVbmRlZmluZWQoaCkmJihhLnB1c2gobC5sb3dlciksYz0hMCksWW8uaXNVbmRlZmluZWQoZikmJihhLnB1c2gobC51cHBlciksYz0hMCksYylyZXR1cm47bGV0IHA9Yj0+YlsxXSxkPXRoaXMuX2ZpbmRTdGVwTWlzbWF0Y2gobCx1Lm1hcChwKSxoLm1hcChwKSxmLm1hcChwKSk7aWYoZCl7dGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIixkKTtyZXR1cm59bGV0IGc9Yj0+YlsyXSxfPXUubWFwKChiLFMpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShiWzBdKjFlMyksc3RlcDpwKGIpLHNjYWxhcjpnKGIpLGxvd2VyOmcoaFtTXSksdXBwZXI6ZyhmW1NdKX0pKSx5PWtCKG4sbC52YWx1ZSkseD1vW3ldO2lmKHgpeC5zZXREYXRhKF8pO2Vsc2V7bGV0IGI9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLGwudmFsdWUseSxfKTtvW3ldPWJ9fSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixvKTtsZXQgcz1Zby5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsbD0+bC5ydW49PT1uKTtpZihhLmxlbmd0aCYmYS5sZW5ndGghPTMpe2xldCBsPXtydW46bix0YWdzOmF9O3M+PTA/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIscywxLGwpOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixsKX1lbHNlIHM+PTAmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLHMsMSl9fV9maW5kU3RlcE1pc21hdGNoKHQscixuLGkpe3JldHVybiBZby5pc0VxdWFsKG4scikmJllvLmlzRXF1YWwoaSxyKT9udWxsOntzZXJpZXNPYmplY3Q6dCx2YWx1ZVN0ZXBzOnIsbG93ZXJTdGVwczpuLHVwcGVyU3RlcHM6aX19X2NyZWF0ZU5ld0RhdGFTZXJpZXModCxyLG4saSl7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF18PTA7bGV0IG89UlNbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dLGE9bmV3IE9TKHQscixuLGksbykscz1SUy5sZW5ndGg7cmV0dXJuIHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XSsxKSVzLGF9X3VwZGF0ZUNoYXJ0KCl7dmFyIHQ9dGhpcy5fbmFtZVRvRGF0YVNlcmllcztZby5mb3JPd24odCxyPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHIuZ2V0TmFtZSgpLHIuZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfWdldCBfc2VyaWVzTmFtZXMoKXtsZXQgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoW3Isbl0pPT50LmhhcyhuLnJ1bikpLm1hcCgoW3JdKT0+cil9X2RldGVybWluZUNvbG9yKHQscil7cmV0dXJuIHQuc2NhbGUocil9X3JlZnJlc2hEYXRhU2VyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnRmlsdGVyO3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxyKXtyZXR1cm4gdFtyXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLm1hcmdpbkNoYXJ0U2VyaWVzO3JldHVybiBZby5mbGF0dGVuKHQubWFwKGk9PltpLnZhbHVlLGkubG93ZXIsaS51cHBlcl0pKS5tYXAoaT0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhpKSsiKSIpLmpvaW4oInwiKX1fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9X2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3ZhciB0PXRoaXMudGl0bGU7cmV0dXJuIHR8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe3ZhciByO2xldCB0PXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpOyF0fHwocj10aGlzLnJvb3QpPT1udWxsfHxyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChuPT57bGV0IGk9dC5pdGVtRm9yRWxlbWVudChuKTtuLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsaSl9KX19O0pyLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSnIucHJvdG90eXBlLCJtYXJnaW5DaGFydFNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sSnIucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwic2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpyLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxKci5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfc3RlcHNNaXNtYXRjaCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpyLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxKci5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoIm1hcmdpbkNoYXJ0U2VyaWVzIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKTtFKFtSdCgidGl0bGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKci5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpO0pyPUUoW3l0KCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIildLEpyKTt2YXIgbzA9RWUoT2UoKSwxKTt2YXIgUkI9e307S3MoUkIse0Jhc2VTdG9yZTooKT0+YnAsQ2FuY2VsbGVyOigpPT5hbixFbnZpcm9ubWVudFN0b3JlOigpPT5WOSxFeHBlcmltZW50c1N0b3JlOigpPT5yUixIdHRwTWV0aG9kVHlwZTooKT0+QW0sSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6KCk9PlZ4LExpc3RlbktleTooKT0+SDksUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yOigpPT5jOSxSZXF1ZXN0TWFuYWdlcjooKT0+QWUsUmVxdWVzdE5ldHdvcmtFcnJvcjooKT0+dUUsUmVxdWVzdE9wdGlvbnM6KCk9PlV4LFJ1bnNTdG9yZTooKT0+VTksVFlQRVM6KCk9Pk94ZSxhZGRQYXJhbXM6KCk9Pk1pLGNyZWF0ZVJvdXRlcjooKT0+Umd0LGNyZWF0ZVNlYXJjaFBhcmFtOigpPT5OZ3QsZW52aXJvbm1lbnRTdG9yZTooKT0+aWIsZXhwZXJpbWVudHNTdG9yZTooKT0+blIsZmlsdGVyVGFnczooKT0+RnhlLGdldFJvdXRlcjooKT0+X2UsZ2V0UnVuc05hbWVkOigpPT56eGUsZ2V0VGFnczooKT0+JGkscnVuc1N0b3JlOigpPT53cH0pO3ZhciBFbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3RpdmU9ITAsdGhpcy5fY29sb3JTY2FsZT1uZXcgV3Yoe3NjYWxlOmZufSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy5fdGFnRmlsdGVyLGM9TWkobyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg9e30sdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoiY3N2In0pfV9qc29uVXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoianNvbiJ9KX1fZG93bmxvYWREYXRhVXJsKHQscil7bGV0IG49dFtyXSxpPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfSk7cmV0dXJuIF9lKCkucGx1Z2luUm91dGVGb3JTcmMoImN1c3RvbV9zY2FsYXJzIiwiL2Rvd25sb2FkX2RhdGEiLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2xldCBpPW8wLmNsb25lKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpO28wLmZvck93bihuLnRhZ190b19ldmVudHMsKG8sYSk9PntsZXQgcz1vLm1hcCh1PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSh1WzBdKjFlMyksc3RlcDp1WzFdLHNjYWxhcjp1WzJdfSkpLGw9a0IocixhKSxjPWlbbF07aWYoYyljLnNldERhdGEocyk7ZWxzZXtvMC5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXT0wKTtsZXQgdT1SU1t0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXV0saD1uZXcgT1MocixhLGwscyx1KTtpW2xdPWg7bGV0IGY9UlMubGVuZ3RoO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3JdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSsxKSVmfX0pLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIsaSl9fX1fdXBkYXRlQ2hhcnQoKXt2YXIgdD10aGlzLl9uYW1lVG9EYXRhU2VyaWVzO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLG5dKT0+e3RoaXMuJC5sb2FkZXIuc2V0U2VyaWVzRGF0YShyLG4uZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfV9jb21wdXRlU2VsZWN0ZWRSdW5zU2V0KHQpe2xldCByPXt9O3JldHVybiBvMC5mb3JFYWNoKHQsbj0+e3Jbbl09MX0pLHJ9Z2V0IF9zZXJpZXNOYW1lcygpe2xldCB0PW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbcixuXSk9PnQuaGFzKG4ucnVuKSkubWFwKChbcl0pPT5yKX1fZGV0ZXJtaW5lQ29sb3IodCxyKXtyZXR1cm4gdC5zY2FsZShyKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt2YXIgdD10aGlzLl90YWdGaWx0ZXI7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix7fSl9X2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIHQ9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbdF0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9X2RldGVybWluZVN5bWJvbCh0LHIpe3JldHVybiB0W3JdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn1nZXQgX3RhZ0ZpbHRlcigpe3ZhciB0PXRoaXMudGFnUmVnZXhlcztyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06dC5tYXAocj0+IigiK3IrIikiKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7dmFyIHQ9dGhpcy50aXRsZTtyZXR1cm4gdHx8InVudGl0bGVkIn1fbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQodCl7dmFyIG47bGV0IHI9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7IXJ8fChuPXRoaXMucm9vdCk9PW51bGx8fG4ucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKGk9PntsZXQgbz1yLml0ZW1Gb3JFbGVtZW50KGkpO2kuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxvKX0pfX07RW4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiCiAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgICAgYXM9ImRhdGFTZXJpZXNOYW1lIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICAgICAgICA+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIKICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICA+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIKICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZU1hdGNoZXNJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+IE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKSA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRW4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVuLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFbi5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxFbi5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEVuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRW4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEVuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVuLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRW4ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixXdildLEVuLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfbmFtZVRvRGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVuLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sRW4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVuLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRW4ucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFbi5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoInRhZ1JlZ2V4ZXMiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFbi5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpO0UoW1J0KCJ0aXRsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVuLnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCk7RW49RShbeXQoInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLEVuKTt2YXIgam89Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7bGV0IHQ9X2UoKS5wbHVnaW5zTGlzdGluZygpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhbi52YWx1ZS5jdXN0b21fc2NhbGFycyksIXRoaXMuX2RhdGFOb3RGb3VuZCYmdGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHIpfV9yZWxvYWRDaGFydHMoKXt2YXIgcjtsZXQgdD0ocj10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDpyLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIik7dD09bnVsbHx8dC5mb3JFYWNoKG49PntuLnJlbG9hZCgpfSl9X3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfbGF5b3V0IixuLnZhbHVlKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JlbG9hZENoYXJ0cygpKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IHI9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChyPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKGk9PihyJiYhaS5jbG9zZWQmJih0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2kudGl0bGVdPSEwKSx7bmFtZTppLnRpdGxlLGl0ZW1zOmkuY2hhcnQsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQLG9wZW5lZDohIXRoaXMuX29wZW5lZENhdGVnb3JpZXNbaS50aXRsZV19fSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7bGV0IHI9dC50YXJnZXQ7ci5vcGVuZWQ/dGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tyLmNhdGVnb3J5Lm5hbWVdPSEwOmRlbGV0ZSB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3IuY2F0ZWdvcnkubmFtZV19fTtqby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nLWxhYmVsIj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbid0IGxhaWQgb3V0IHRoZSBkYXNoYm9hcmQuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyBsYXkgb3V0IHRoZSBkYXNoYm9hcmQsIHBhc3MgYSA8Y29kZT5MYXlvdXQ8L2NvZGU+IHByb3RvYnVmZmVyCiAgICAgICAgICAgICAgdG8gdGhlIDxjb2RlPnNldF9sYXlvdXQ8L2NvZGU+IG1ldGhvZC4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHByZT4KZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgYXM9ImNoYXJ0IgogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgZGlzYWJsZS1wYWdpbmF0aW9uCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubXVsdGlsaW5lXV0iPgogICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICAgIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICBtYXJnaW4tY2hhcnQtc2VyaWVzPSJbW2NoYXJ0Lm1hcmdpbi5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxqby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGpvLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sam8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sam8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGpvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqby5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqby5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sam8ucHJvdG90eXBlLCJfb3BlbmVkQ2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqby5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtSdCgiX2xheW91dCIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sam8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7am89RShbeXQoInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLGpvKTt2YXIgREI9RWUoT2UoKSwxKTt2YXIgYXN0PUVlKE9lKCksMSksYmE9RWUod2woKSwxKTt2YXIgTkI9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnJ1bjJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9cix0aGlzLmJ1aWxkQ2hhcnQodCl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5ydW4yZGF0YXNldHNbdF09PT12b2lkIDAmJih0aGlzLnJ1bjJkYXRhc2V0c1t0XT1uZXcgYmEuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgcj14Qih0KTt0aGlzLnhBY2Nlc3Nvcj1yLmFjY2Vzc29yLHRoaXMueFNjYWxlPXIuc2NhbGUsdGhpcy54QXhpcz1yLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMCksdGhpcy54QXhpcy50aWNrTGFiZWxQYWRkaW5nKDMpLHRoaXMueVNjYWxlPW5ldyBiYS5TY2FsZXMuTGluZWFyLHRoaXMueUF4aXM9bmV3IGJhLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IGJhLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKSx0aGlzLmNlbnRlcj1uZXcgYmEuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsaV0pLHRoaXMub3V0ZXI9bmV3IGJhLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxvPWFzdC5yYW5nZShpLmxlbmd0aC0xKS5tYXAoaD0+KGlbaCsxXS1pW2hdKS8yNTAwKSxhPWkubWFwKChoLGYpPT5wPT5wW2ZdWzFdKSxzPTQsbD1hW3NdLGM9YXN0LnJhbmdlKGEubGVuZ3RoLTEpLm1hcChoPT57bGV0IGY9bmV3IGJhLlBsb3RzLkFyZWE7Zi54KHQscik7bGV0IHA9aD5zP2FbaF06YVtoKzFdLGQ9aD5zP2FbaCsxXTphW2hdO3JldHVybiBmLnkoZCxuKSxmLnkwKHApLGYuYXR0cigiZmlsbCIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZSIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZS13ZWlnaHQiLChnLF8seSk9PiIwLjVweCIpLGYuYXR0cigic3Ryb2tlLW9wYWNpdHkiLCgpPT5vW2hdKSxmLmF0dHIoImZpbGwtb3BhY2l0eSIsKCk9Pm9baF0pLGZ9KSx1PW5ldyBiYS5QbG90cy5MaW5lO3JldHVybiB1LngodCxyKSx1LnkobCxuKSx1LmF0dHIoInN0cm9rZSIsKGgsZixwKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHAucnVuKSksdGhpcy5wbG90cz1jLG5ldyBiYS5Db21wb25lbnRzLkdyb3VwKGMpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5ydW5zPXQ7bGV0IHI9dC5tYXAobj0+dGhpcy5nZXREYXRhc2V0KG4pKTt0aGlzLnBsb3RzLmZvckVhY2gobj0+bi5kYXRhc2V0cyhyKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKHIpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19LEJjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IGJhLlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUscj10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCwhIW4pe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGk9bmV3IE5CKHQsciksbz1IdCh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8obyksdGhpcy5fY2hhcnQ9aX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0JjLnRlbXBsYXRlPVFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGJhLlNjYWxlcy5Db2xvcildLEJjLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCYy5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQmMucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsTkIpXSxCYy5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQmMucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJjLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCYy5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQmMucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxCYy5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpO0JjPUUoW3l0KCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0sQmMpO3ZhciB3YT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW4ubWFwKGE9PntsZXRbcyxsLGNdPWE7cmV0dXJuIGMud2FsbF90aW1lPW5ldyBEYXRlKHMqMWUzKSxjLnN0ZXA9bCxjfSksbz10aGlzLmdldERhdGFMb2FkTmFtZShyKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtvXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOmZufSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHQpfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07d2EudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3YS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHdhLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHdhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd2EucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx3YS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sd2EucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHdhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx3YS5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd2EucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO3dhPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLHdhKTt2YXIgU2w9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihEQi5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49REIubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtTbC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieFR5cGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICAgIChIaXN0b2dyYW1zIGFuZCBkaXN0cmlidXRpb25zIGJvdGggdXNlIHRoZSBoaXN0b2dyYW0gc3VtbWFyeQogICAgICAgICAgICAgICAgb3BlcmF0aW9uLikKICAgICAgICAgICAgICA8L2xpPgoKICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgPjwvdGYtZGlzdHJpYnV0aW9uLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTbC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFNsLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1NsPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIildLFNsKTt2YXIgT0I9e307S3MoT0Ise0RJU0FNQklHVUFUT1I6KCk9PnEwdCxMaXN0ZW5LZXk6KCk9Pm1FLGFkZEhhc2hMaXN0ZW5lcjooKT0+Z0UsYWRkU3RvcmFnZUxpc3RlbmVyOigpPT5UVyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6KCk9PnQyZSxkaXNwb3NlTnVtYmVyQmluZGluZzooKT0+ZTJlLGRpc3Bvc2VPYmplY3RCaW5kaW5nOigpPT5pMmUsZGlzcG9zZVN0cmluZ0JpbmRpbmc6KCk9PlpiZSxmaXJlU3RvcmFnZUNoYW5nZWQ6KCk9PkNXLGdldEJvb2xlYW46KCk9PkpiZSxnZXRCb29sZWFuSW5pdGlhbGl6ZXI6KCk9PnZwLGdldEJvb2xlYW5PYnNlcnZlcjooKT0+eHAsZ2V0TnVtYmVyOigpPT5OVyxnZXROdW1iZXJJbml0aWFsaXplcjooKT0+X0UsZ2V0TnVtYmVyT2JzZXJ2ZXI6KCk9PnlFLGdldE9iamVjdDooKT0+cjJlLGdldE9iamVjdEluaXRpYWxpemVyOigpPT5PVyxnZXRPYmplY3RPYnNlcnZlcjooKT0+elcsZ2V0U3RyaW5nOigpPT4kYmUsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6KCk9PnlfLGdldFN0cmluZ09ic2VydmVyOigpPT52XyxnZXRVcmxIYXNoRGljdDooKT0+QjB0LG1ha2VCaW5kaW5nczooKT0+dkUsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTooKT0+bzJlLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OigpPT5BVyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTooKT0+UFcsc2V0Qm9vbGVhbjooKT0+UWJlLHNldE51bWJlcjooKT0+RFcsc2V0T2JqZWN0OigpPT5uMmUsc2V0U3RyaW5nOigpPT5LYmV9KTt2YXIgaWN0PUVlKE9lKCksMSk7dmFyIEtLdD0iR3JhcGggZGFzaGJvYXJkIGFjdGlvbnMiLFpLdD0iR3JhcGggZGFzaGJvYXJkIHRpbWluZ3MiLHNzdDsoZnVuY3Rpb24oZSl7ZS5GRVRDSF9QQlRYVF9CWVRFUz0iRkVUQ0hfUEJUWFRfQllURVMiLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9GSUxFU1lTVEVNPSJGRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0iLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVI9IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fU0VSVkVSIixlLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUPSJQQVJTRV9QQlRYVF9JTlRPX09CSkVDVCIsZS5GRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUz0iRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMiLGUuUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX01FVEFEQVRBX1BCVFhUX0lOVE9fT0JKRUNUIixlLk5PUk1BTElaSU5HX05BTUVTPSJOT1JNQUxJWklOR19OQU1FUyIsZS5CVUlMRF9TTElNX0dSQVBIPSJCVUlMRF9TTElNX0dSQVBIIixlLkhJRVJBUkNIWV9BRERfTk9ERVM9IkhJRVJBUkNIWV9BRERfTk9ERVMiLGUuSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVM9IkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTIixlLkhJRVJBUkNIWV9BRERfRURHRVM9IkhJRVJBUkNIWV9BRERfRURHRVMiLGUuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFM9IkhJRVJBUkNIWV9GSU5EX1NJTUlMQVJfU1VCR1JBUEhTIixlLlJFTkRFUl9CVUlMRF9ISUVSQVJDSFk9IlJFTkRFUl9CVUlMRF9ISUVSQVJDSFkiLGUuUkVOREVSX1NDRU5FX0xBWU9VVD0iUkVOREVSX1NDRU5FX0xBWU9VVCIsZS5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkU9IlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORSIsZS5HUkFQSF9MT0FEX1NVQ0NFRURFRD0iR1JBUEhfTE9BRF9TVUNDRUVERUQiLGUuR1JBUEhfTE9BRF9GQUlMRUQ9IkdSQVBIX0xPQURfRkFJTEVEIn0pKHNzdHx8KHNzdD17fSkpO3ZhciBsc3Q7KGZ1bmN0aW9uKGUpe2UuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsZS5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLGUuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLGUuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLGUuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLGUuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIixlLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKGxzdHx8KGxzdD17fSkpO3ZhciBqcj1LbChLbCh7fSxzc3QpLGxzdCk7dmFyIG5sZT1FZShPbHQoKSwxKSxwbj1FZShPZSgpLDEpO3ZhciBGczsoZnVuY3Rpb24oZSl7ZS5PUF9HUkFQSD0ib3BfZ3JhcGgiLGUuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCIsZS5QUk9GSUxFPSJwcm9maWxlIn0pKEZzfHwoRnM9e30pKTt2YXIgdmU9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLEdST1VQOiJlZGdlIixMSU5FOiJlZGdlbGluZSIsUkVGRVJFTkNFX0VER0U6InJlZmVyZW5jZWVkZ2UiLFJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIixCUklER0VOT0RFOiJicmlkZ2UiLEVMTElQU0lTTk9ERToiZWxsaXBzaXMifSxKND17RWRnZTp7TEFCRUw6My41fSxBbm5vdGF0aW9uOntMQUJFTDo1fSxOb2RlOntFWFBBTkRFRF9MQUJFTDo5LFNFUklFU19MQUJFTDo4LE9QX0xBQkVMOjYsSEVBTFRIX1BJTExfU1RBVF9MQUJFTDo0fX0sanU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtmdW5jdGlvbiBtMChlLHQscil7bGV0IG49ZS5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZihvLnRhZ05hbWU9PT10KXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2xldCBhPSEwO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWE9YSYmby5jbGFzc0xpc3QuY29udGFpbnMocltzXSk7aWYoYSlyZXR1cm4gSHQobyl9ZWxzZSBpZighcnx8by5jbGFzc0xpc3QuY29udGFpbnMocikpcmV0dXJuIEh0KG8pfX1yZXR1cm4gSHQobnVsbCl9ZnVuY3Rpb24gQW4oZSx0LHIsbil7bGV0IGk9bTAoZSx0LHIpO2lmKCFpLmVtcHR5KCkpcmV0dXJuIGk7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYociBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKW8uY2xhc3NMaXN0LmFkZChyW2FdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChyKTtyZXR1cm4gbj9lLm5vZGUoKS5pbnNlcnRCZWZvcmUobyxuKTplLm5vZGUoKS5hcHBlbmRDaGlsZChvKSxIdChvKS5kYXR1bShlLmRhdHVtKCkpfXZhciBLUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQscil7dGhpcy5zdGFydFRpbWUhPW51bGw/dGhpcy5zdGFydFRpbWU9TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dGhpcy5zdGFydFRpbWU9dCx0aGlzLmVuZFRpbWUhPW51bGw/dGhpcy5lbmRUaW1lPU1hdGgubWF4KHRoaXMuZW5kVGltZSxyKTp0aGlzLmVuZFRpbWU9cn1hZGRCeXRlc0FsbG9jYXRpb24odCl7dGhpcy50b3RhbEJ5dGVzIT1udWxsP3RoaXMudG90YWxCeXRlcz1NYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsdCk6dGhpcy50b3RhbEJ5dGVzPXR9Y29tYmluZSh0KXt0LnRvdGFsQnl0ZXMhPW51bGwmJih0aGlzLnRvdGFsQnl0ZXMrPXQudG90YWxCeXRlcyksdC5nZXRUb3RhbE1pY3JvcygpIT1udWxsJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUodC5zdGFydFRpbWUsdC5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiB0aGlzLnN0YXJ0VGltZT09bnVsbHx8dGhpcy5lbmRUaW1lPT1udWxsP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX0sUTQ9Ljc1LHRQPTEyLHRjcj0uMyxlY3I9WzEsNWU2XSxYc2U9S18oKS5leHBvbmVudCh0Y3IpLmRvbWFpbihlY3IpLnJhbmdlKFtRNCx0UF0pLmNsYW1wKCEwKTt2YXIgWlM9RWUoT2UoKSwxKTt2YXIgS3NlPTIwO2Z1bmN0aW9uIHJjcihlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgidGltaW5nSWQiKX1mdW5jdGlvbiBQbyhlKXtyY3IoZSk/KFpLdCxlLnRpbWluZ0lkLGUuZXZlbnRWYWx1ZSx2b2lkIDApOihLS3QsZS5hY3Rpb25JZCxlLmV2ZW50TGFiZWwsdm9pZCAwKX1mdW5jdGlvbiBSZChlLHQscil7bGV0IG49RGF0ZS5ub3coKSxpPXQoKSxvPURhdGUubm93KCktbjtyZXR1cm4gY29uc29sZS5sb2coZSwiOiIsbywibXMiKSxyJiZQbyh7dGltaW5nSWQ6cixldmVudFZhbHVlOm99KSxpfWZ1bmN0aW9uIG5QKGUpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2Uuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmUucHJvZ3Jlc3MudmFsdWUsbXNnOnR9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSt0LG1zZzplLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbih0LHIpe2NvbnNvbGUuZXJyb3Ioci5zdGFjayksZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSxtc2c6dCxlcnJvcjohMH0pfX19ZnVuY3Rpb24gSlMoZSx0LHIpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKG4pe2Uuc2V0TWVzc2FnZShyKyI6ICIrbil9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKG4pe2UudXBkYXRlUHJvZ3Jlc3Mobip0LzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKG4saSl7ZS5yZXBvcnRFcnJvcihyKyI6ICIrbixpKX19fWZ1bmN0aW9uIFpzZShlLHQscixuLGkpe24uc2V0TWVzc2FnZShlKTt0cnl7bGV0IG89UmQoZSxyLGkpO3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKHQpLG99Y2F0Y2gobyl7cmV0dXJuIG4ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2UsbyksbnVsbH19ZnVuY3Rpb24gZTEoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntuLnNldE1lc3NhZ2UoZSksc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcz1SZChlLHIsaSk7bi51cGRhdGVQcm9ncmVzcyh0KSxvKHMpfWNhdGNoKHMpe24ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2Uscyl9fSxLc2UpfSl9ZnVuY3Rpb24gbUgoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntsZXQgcz1mdW5jdGlvbihsKXtuLnJlcG9ydEVycm9yKCJGYWlsZWQgIitlLGwpLGEobCl9O24uc2V0TWVzc2FnZShlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCBsPURhdGUubm93KCk7cigpLnRoZW4oZnVuY3Rpb24oYyl7bGV0IHU9RGF0ZS5ub3coKS1sO2NvbnNvbGUubG9nKGUsIjoiLHUsIm1zIiksbi51cGRhdGVQcm9ncmVzcyh0KSxQbyh7dGltaW5nSWQ6aSxldmVudFZhbHVlOnV9KSxvKGMpfSkuY2F0Y2gocyl9Y2F0Y2gobCl7cyhsKX19LEtzZSl9KX1mdW5jdGlvbiBKc2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX12YXIgaVA9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XSxvUD1be3N5bWJvbDoiXHhCNXMifSx7c3ltYm9sOiJtcyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJzIixudW1Vbml0czoxZTN9LHtzeW1ib2w6Im1pbiIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImhyIixudW1Vbml0czo2MH0se3N5bWJvbDoiZGF5cyIsbnVtVW5pdHM6MjR9XTtmdW5jdGlvbiBOZChlLHQscj0wKXtyZXR1cm4gcisxPHQubGVuZ3RoJiZlPj10W3IrMV0ubnVtVW5pdHM/TmQoZS90W3IrMV0ubnVtVW5pdHMsdCxyKzEpOk51bWJlcihlLnRvUHJlY2lzaW9uKDMpKSsiICIrdFtyXS5zeW1ib2x9ZnVuY3Rpb24gZ0goZSl7cmV0dXJuISEoZSYmKGUudG90YWxCeXRlcz4wfHxlLmdldFRvdGFsTWljcm9zKCk+MHx8ZS5vdXRwdXRTaXplKSl9ZnVuY3Rpb24gemx0KGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuIGU7bGV0IHQ9MCxyPTAsbj1aUy5taW4oWlMubWFwKGUsaT0+aS5sZW5ndGgpKTtmb3IoOzspe3QrKztsZXQgaT1aUy5tYXAoZSxhPT5hLnN1YnN0cmluZygwLHQpKTtpZihpLmV2ZXJ5KChhLHMpPT5zPT09MD8hMDphPT09aVtzLTFdKSl7aWYodD49bilyZXR1cm4gZTtyPXR9ZWxzZSBicmVha31yZXR1cm4gWlMubWFwKGUsaT0+aS5zdWJzdHJpbmcocikpfWZ1bmN0aW9uIFFzZShlKXt2YXIgdD0rbmV3IERhdGUtK25ldyBEYXRlKGUvMWUzKTtyZXR1cm4gdDwzZTQ/Imp1c3Qgbm93Ijp0PDZlND9NYXRoLmZsb29yKHQvMWUzKSsiIHNlY29uZHMgYWdvIjp0PDEyZTQ/ImEgbWludXRlIGFnbyI6dDwzNmU1P01hdGguZmxvb3IodC82ZTQpKyIgbWludXRlcyBhZ28iOk1hdGguZmxvb3IodC8zNmU1KT09MT8iYW4gaG91ciBhZ28iOnQ8ODY0ZTU/TWF0aC5mbG9vcih0LzM2ZTUpKyIgaG91cnMgYWdvIjp0PDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKHQvODY0ZTUpKyIgZGF5cyBhZ28ifXZhciBuY3I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksclA9bmNyLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gJHNlKGUsdCl7cmV0dXJuIHJQJiYoclAuZm9udD1gJHt0fXB4IFJvYm90bywgc2Fucy1zZXJpZmApLHJQPT1udWxsP3ZvaWQgMDpyUC5tZWFzdXJlVGV4dChlKS53aWR0aH1mdW5jdGlvbiB0bGUoZSx0LHIpe2lmKCFlKXJldHVybiIiO2lmKCRzZShlLHQpPD1yKXJldHVybiBlO2xldCBuPTAsaT1lLmxlbmd0aDtmb3IoO248aTspe2xldCBvPW4rTWF0aC5yb3VuZCgoaS1uKS8yKSxhPWUuc2xpY2UoMCxvKSsiXHUyMDI2Ijskc2UoYSx0KTw9cj9uPW86aT1vLTF9cmV0dXJuIG49PT0wP2VbMF06ZS5zbGljZSgwLG4pKyJcdTIwMjYifXZhciBkSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LHIpe3ZhciBuOyhuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpKT09bnVsbHx8bi5wdXNoKHIpfXJlbW92ZUxpc3RlbmVyKHQscil7dmFyIGk7bGV0IG49KGk9dGhpcy5nZXRMaXN0ZW5lcnModCkpPT1udWxsP3ZvaWQgMDppLmZpbHRlcihvPT5vIT09cik7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5zZXQodCxuKX1kaXNwYXRjaEV2ZW50KHQscil7Zm9yKGxldCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4ocil9fTt2YXIgQWw9Ii8iLHFjPSJfX3Jvb3RfXyIsU2E9Il9fZnVuY3Rpb25fbGlicmFyeV9fIixpbGU9Il90b29fbGFyZ2VfYXR0cnMiO3ZhciBvbGU9Ii0tIixnMDsoZnVuY3Rpb24oZSl7ZVtlLkZVTEw9MF09IkZVTEwiLGVbZS5FTUJFRERFRD0xXT0iRU1CRURERUQiLGVbZS5NRVRBPTJdPSJNRVRBIixlW2UuU0VSSUVTPTNdPSJTRVJJRVMiLGVbZS5DT1JFPTRdPSJDT1JFIixlW2UuU0hBRE9XPTVdPSJTSEFET1ciLGVbZS5CUklER0U9Nl09IkJSSURHRSIsZVtlLkVER0U9N109IkVER0UifSkoZzB8fChnMD17fSkpO3ZhciBqdDsoZnVuY3Rpb24oZSl7ZVtlLk1FVEE9MF09Ik1FVEEiLGVbZS5PUD0xXT0iT1AiLGVbZS5TRVJJRVM9Ml09IlNFUklFUyIsZVtlLkJSSURHRT0zXT0iQlJJREdFIixlW2UuRUxMSVBTSVM9NF09IkVMTElQU0lTIn0pKGp0fHwoanQ9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5JTkNMVURFPTBdPSJJTkNMVURFIixlW2UuRVhDTFVERT0xXT0iRVhDTFVERSIsZVtlLlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KSh1cnx8KHVyPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuR1JPVVA9MF09IkdST1VQIixlW2UuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShpc3x8KGlzPXt9KSk7dmFyIGljcj0iX291dHB1dF9zaGFwZXMiLG9jcj0iX1hsYUNsdXN0ZXIiLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX0sX0g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPWp0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9dXIuVU5TUEVDSUZJRUR9c2V0TnVtTW9yZU5vZGVzKHQpe3RoaXMubnVtTW9yZU5vZGVzPXQsdGhpcy5uYW1lPSIuLi4gIit0KyIgbW9yZSJ9fSxfMD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wPXQub3AsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRldmljZT10LmRldmljZSx0aGlzLmF0dHI9dC5hdHRyLHRoaXMuaW5wdXRzPWNjcih0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz1hY3IodC5hdHRyKSx0aGlzLnhsYUNsdXN0ZXI9c2NyKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT1qdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVELHRoaXMub3duaW5nU2VyaWVzPW51bGx9fTtmdW5jdGlvbiBsUChlLHQ9e30pe3JldHVybiBuZXcgYVAoZSx0KX1mdW5jdGlvbiBhbGUoZSx0LHIpe3BuLmVhY2goZS5ub2RlcyxuPT57bi5zdGF0cz1udWxsfSkscG4uZWFjaCh0LmRldl9zdGF0cyxuPT57ciYmIXJbbi5kZXZpY2VdfHxwbi5lYWNoKG4ubm9kZV9zdGF0cyxpPT57bGV0IG89aS5ub2RlX25hbWUgaW4gZS5ub2Rlcz9pLm5vZGVfbmFtZTpzUChpLm5vZGVfbmFtZSk7aWYoIShvIGluIGUubm9kZXMpKXJldHVybjtsZXQgYT0wO2kubWVtb3J5JiZwbi5lYWNoKGkubWVtb3J5LGw9PntsLnRvdGFsX2J5dGVzJiYobC50b3RhbF9ieXRlcz4wP2ErPU51bWJlcihsLnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIrbykpfSk7bGV0IHM9bnVsbDtpLm91dHB1dCYmKHM9cG4ubWFwKGkub3V0cHV0LGw9PnBuLm1hcChsLnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sYz0+TnVtYmVyKGMuc2l6ZSkpKSksZS5ub2Rlc1tvXS5kZXZpY2U9bi5kZXZpY2UsZS5ub2Rlc1tvXS5zdGF0cz09bnVsbCYmKGUubm9kZXNbb10uc3RhdHM9bmV3IEtTKHMpKSxlLm5vZGVzW29dLnN0YXRzLmFkZEJ5dGVzQWxsb2NhdGlvbihhKSxpLmFsbF9lbmRfcmVsX21pY3JvcyYmKGkuYWxsX2VuZF9yZWxfbWljcm9zPjA/ZS5ub2Rlc1tvXS5zdGF0cy5hZGRFeGVjdXRpb25UaW1lKGkuYWxsX3N0YXJ0X21pY3JvcyxpLmFsbF9zdGFydF9taWNyb3MraS5hbGxfZW5kX3JlbF9taWNyb3MpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBydW50aW1lIGZvciAiK28pKX0pfSl9dmFyIGFQPWNsYXNze2NvbnN0cnVjdG9yKHQscj17fSl7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWp0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPWUzKHQsZzAuTUVUQSxyKSx0aGlzLmJyaWRnZWdyYXBoPW51bGwsdGhpcy5vcEhpc3RvZ3JhbT17fSx0aGlzLmRldmljZUhpc3RvZ3JhbT17fSx0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e30sdGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9LHRoaXMudGVtcGxhdGVJZD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExLHRoaXMuaW5jbHVkZT11ci5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIikscj10aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIjtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZShyKX1sZWF2ZXMoKXtsZXQgdD1bXSxyPVt0aGlzXSxuO2Zvcig7ci5sZW5ndGg7KXtsZXQgaT1yLnNoaWZ0KCk7aSE9bnVsbCYmaS5pc0dyb3VwTm9kZT8obj1pLm1ldGFncmFwaCxwbi5lYWNoKG4ubm9kZXMoKSxvPT5yLnB1c2gobi5ub2RlKG8pKSkpOnQucHVzaChpPT1udWxsP3ZvaWQgMDppLm5hbWUpfXJldHVybiB0fX07ZnVuY3Rpb24gSGx0KGUsdCl7cmV0dXJuIG5ldyBxZihlLHQpfXZhciBxZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudj10LHRoaXMudz1yLHRoaXMuYmFzZUVkZ2VMaXN0PVtdLHRoaXMuaW5ib3VuZD1udWxsLHRoaXMubnVtUmVndWxhckVkZ2VzPTAsdGhpcy5udW1Db250cm9sRWRnZXM9MCx0aGlzLm51bVJlZkVkZ2VzPTAsdGhpcy50b3RhbFNpemU9MH1hZGRCYXNlRWRnZSh0LHIpe3RoaXMuYmFzZUVkZ2VMaXN0LnB1c2godCksdC5pc0NvbnRyb2xEZXBlbmRlbmN5P3RoaXMubnVtQ29udHJvbEVkZ2VzKz0xOnRoaXMubnVtUmVndWxhckVkZ2VzKz0xLHQuaXNSZWZlcmVuY2VFZGdlJiYodGhpcy5udW1SZWZFZGdlcys9MSksdGhpcy50b3RhbFNpemUrPXFmLmNvbXB1dGVTaXplT2ZFZGdlKHQsciksci5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoci5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LHIpe2xldCBuPXIubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtyLmhhc1NoYXBlSW5mbz0hMDtsZXQgaT1PYmplY3Qua2V5cyhuLm91dHB1dFNoYXBlcykubWFwKG89Pm4ub3V0cHV0U2hhcGVzW29dKS5tYXAobz0+bz09bnVsbD8xOm8ucmVkdWNlKChhLHMpPT4ocz09PS0xJiYocz0xKSxhKnMpLDEpKTtyZXR1cm4gcG4uc3VtKGkpfX07ZnVuY3Rpb24gUVMoZSx0LHIsbixpLG8pe3JldHVybiBuZXcgQmx0KGUsdCxyLG4saSxvKX1mdW5jdGlvbiB0MyhlLHQscixuLGkpe2xldCBvPXR5cGVvZiBuIT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiPyJbIituKyItIitpKyJdIjoiIyIsYT1lK28rdDtyZXR1cm4ocj9yKyIvIjoiIikrYX12YXIgQmx0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLm5hbWU9b3x8dDModCxyLG4pLHRoaXMudHlwZT1qdC5TRVJJRVMsdGhpcy5oYXNMb29wPSExLHRoaXMucHJlZml4PXQsdGhpcy5zdWZmaXg9cix0aGlzLmNsdXN0ZXJJZD1pLHRoaXMuaWRzPVtdLHRoaXMucGFyZW50PW4sdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9ZTMobyxnMC5TRVJJRVMsYSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEfX07ZnVuY3Rpb24gYWNyKGUpe2xldCB0PW51bGw7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldHtrZXk6bix2YWx1ZTppfT1lW3JdO2lmKG49PT1pY3Ipe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG89aS5saXN0LnNoYXBlLm1hcChhPT5hLnVua25vd25fcmFuaz9udWxsOmEuZGltPT1udWxsfHxhLmRpbS5sZW5ndGg9PT0xJiZhLmRpbVswXS5zaXplPT1udWxsP1tdOmEuZGltLm1hcChzPT5zLnNpemV8fDApKTtyZXR1cm4gZS5zcGxpY2UociwxKSxvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBzY3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5rZXk9PT1vY3IpcmV0dXJuIGVbdF0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH12YXIgbGNyPS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBjY3IoZSl7bGV0IHQ9W10scj1udWxsO2ZvcihsZXQgbiBvZiBlfHxbXSl7bGV0IGk9bi5zdGFydHNXaXRoKCJeIik7aSYmKG49bi5zdWJzdHJpbmcoMSkpO2xldCBvPW4sYT0iMCIscz1uLmluY2x1ZGVzKCI6IikmJm4ubWF0Y2gobGNyKTtzJiYobz1zWzFdLGE9c1syXSksciE9PW8mJihyPW8sdC5wdXNoKHtuYW1lOm8sb3V0cHV0VGVuc29yS2V5OmEsaXNDb250cm9sRGVwZW5kZW5jeTppfSkpfXJldHVybiB0fWZ1bmN0aW9uIEZsdChlLHQscixuLGksbyl7aWYodD09PXIubmFtZSlyZXR1cm47bGV0IGE9aS5yZWZFZGdlc1tyLm9wKyIgIitvXT09PSEwO2UuZWRnZXMucHVzaCh7djp0LHc6ci5uYW1lLG91dHB1dFRlbnNvcktleTpuLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5Om4uaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6YX0pfXZhciBzbGU9e2VuYWJsZUVtYmVkZGluZzohMCxpbkVtYmVkZGluZ1R5cGVzOlsiQ29uc3QiXSxvdXRFbWJlZGRpbmdUeXBlczpbIl5bYS16QS1aXStTdW1tYXJ5JCJdLHJlZkVkZ2VzOnsiQXNzaWduIDAiOiEwLCJBc3NpZ25BZGQgMCI6ITAsIkFzc2lnblN1YiAwIjohMCwiYXNzaWduIDAiOiEwLCJhc3NpZ25fYWRkIDAiOiEwLCJhc3NpZ25fc3ViIDAiOiEwLCJjb3VudF91cF90byAwIjohMCwiU2NhdHRlckFkZCAwIjohMCwiU2NhdHRlclN1YiAwIjohMCwiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2Z1bmN0aW9uIGxsZShlLHQscil7bGV0IG49e30saT17fSxvPXt9LGE9ZWxlKHQuaW5FbWJlZGRpbmdUeXBlcykscz1lbGUodC5vdXRFbWJlZGRpbmdUeXBlcyksbD1bXSxjPWUubm9kZSx1PW5ldyBBcnJheShjLmxlbmd0aCk7cmV0dXJuIGUxKCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxwPWc9PntsZXQgXz1uZXcgXzAoZyk7cmV0dXJuIGEoXyk/KGwucHVzaChfLm5hbWUpLG5bXy5uYW1lXT1fLF8pOnMoXyk/KGwucHVzaChfLm5hbWUpLGlbXy5uYW1lXT1fLHBuLmVhY2goXy5pbnB1dHMseT0+e2xldCB4PXkubmFtZTtvW3hdPW9beF18fFtdLG9beF0ucHVzaChfKX0pLF8pOihoW2ZdPV8sdVtmXT1fLm5hbWUsZisrLF8pfTtwbi5lYWNoKGMscCk7bGV0IGQ9Zz0+e2xldCBfPVNhK2cuc2lnbmF0dXJlLm5hbWU7aWYocCh7bmFtZTpfLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksZy5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgYj0wLFM9Qz0+e2xldCBQPXAoe25hbWU6XytBbCtDLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkMudHlwZX19XX0pO1AuZnVuY3Rpb25JbnB1dEluZGV4PWIsYisrfTtnLnNpZ25hdHVyZS5pbnB1dF9hcmcubmFtZT9TKGcuc2lnbmF0dXJlLmlucHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5pbnB1dF9hcmcsUyl9bGV0IHk9MCx4PXt9O2lmKGcuc2lnbmF0dXJlLm91dHB1dF9hcmcpe2xldCBiPVM9Pnt4W18rQWwrUy5uYW1lXT15LHkrK307Zy5zaWduYXR1cmUub3V0cHV0X2FyZy5uYW1lP2IoZy5zaWduYXR1cmUub3V0cHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5vdXRwdXRfYXJnLGIpfXBuLmVhY2goZy5ub2RlX2RlZixiPT57Yi5uYW1lPV8rIi8iK2IubmFtZSx0eXBlb2YgYi5pbnB1dD09InN0cmluZyImJihiLmlucHV0PVtiLmlucHV0XSk7bGV0IFM9cChiKTtwbi5pc051bWJlcih4W2IubmFtZV0pJiYoUy5mdW5jdGlvbk91dHB1dEluZGV4PXhbYi5uYW1lXSkscG4uZWFjaChTLmlucHV0cyxDPT57Qy5uYW1lPV8rQWwrQy5uYW1lfSl9KX07cmV0dXJuIGUubGlicmFyeSYmZS5saWJyYXJ5LmZ1bmN0aW9uJiZwbi5lYWNoKGUubGlicmFyeS5mdW5jdGlvbixkKSxoLnNwbGljZShmKSx1LnNwbGljZShmKSxofSxyLGpyLk5PUk1BTElaSU5HX05BTUVTKS50aGVuKGg9PmUxKCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLDcwLCgpPT57bGV0IGY9dWNyKHUsbCkscD1uZXcgWHU7cmV0dXJuIHBuLmVhY2goaCxkPT57bGV0IGc9ZltkLm5hbWVdfHxkLm5hbWU7cC5ub2Rlc1tnXT1kLGQubmFtZSBpbiBvJiYoZC5vdXRFbWJlZGRpbmdzPW9bZC5uYW1lXSxwbi5lYWNoKGQub3V0RW1iZWRkaW5ncyxfPT57Xy5uYW1lPWZbXy5uYW1lXXx8Xy5uYW1lfSkpLGQubmFtZT1nfSkscG4uZWFjaChoLGQ9Pntwbi5lYWNoKGQuaW5wdXRzLChnLF8pPT57bGV0IHk9Zy5uYW1lO2lmKHkgaW4gbil7bGV0IHg9blt5XTtkLmluRW1iZWRkaW5ncy5wdXNoKHgpO2ZvcihsZXQgYiBvZiB4LmlucHV0cylGbHQocCxmW2IubmFtZV18fGIubmFtZSxkLGIsdCxfKX1lbHNlIGlmKHkgaW4gaSl7bGV0IHg9aVt5XTtmb3IobGV0IGIgb2YgeC5pbnB1dHMpRmx0KHAsZltiLm5hbWVdfHxiLm5hbWUsZCxnLHQsXyl9ZWxzZSBGbHQocCxmW3ldfHx5LGQsZyx0LF8pfSl9KSxwbi5lYWNoKG4sKGQsZyk9PntkLm5hbWU9ZltkLm5hbWVdfHxkLm5hbWV9KSxwfSxyLGpyLkJVSUxEX1NMSU1fR1JBUEgpKX1mdW5jdGlvbiBlMyhlLHQscj17fSl7bGV0IG49bmV3IG5sZS5ncmFwaGxpYi5HcmFwaChyKTtyZXR1cm4gbi5zZXRHcmFwaCh7bmFtZTplLHJhbmtkaXI6ci5yYW5rZGlyfHwiQlQiLHR5cGU6dH0pLG59ZnVuY3Rpb24gZWxlKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49bmV3IFJlZ0V4cChlW3JdKTtpZih0eXBlb2YgdC5vcD09InN0cmluZyImJnQub3AubWF0Y2gobikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHNQKGUpe2xldCB0PWUuc3BsaXQoQWwpO3JldHVybiBlK0FsKyIoIit0W3QubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiB1Y3IoZSx0KXtsZXQgcj17fSxuPXt9O2Uuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpe2xldCBvPWVbaV07cG4uZWFjaChjUChvKS5zbGljZSgwLC0xKSxhPT57blthXT0hMH0pO2ZvcihsZXQgYT1pKzE7YTxlLmxlbmd0aDsrK2Epe2xldCBzPWVbYV07aWYocG4uc3RhcnRzV2l0aChzLG8pKXtpZihzLmxlbmd0aD5vLmxlbmd0aCYmcy5jaGFyQXQoby5sZW5ndGgpPT09QWwpe3Jbb109c1Aobyk7YnJlYWt9fWVsc2UgYnJlYWt9fXJldHVybiBwbi5lYWNoKHQsaT0+e2kgaW4gbiYmKHJbaV09c1AoaSkpfSkscn1mdW5jdGlvbiBybGUoZSl7bGV0IHQ9ZS5ub2RlcygpLm1hcChmdW5jdGlvbihyKXt2YXIgbjtyZXR1cm4obj1lLm5laWdoYm9ycyhyKSk9PW51bGw/dm9pZCAwOm4ubGVuZ3RofSk7cmV0dXJuIHQuc29ydCgpLHR9ZnVuY3Rpb24gY2xlKGUsdCl7bGV0IHI9cmxlKGUpLG49cmxlKHQpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGNQKGUsdCl7bGV0IHI9W10sbj1lLmluZGV4T2YoQWwpO2Zvcig7bj49MDspci5wdXNoKGUuc3Vic3RyaW5nKDAsbikpLG49ZS5pbmRleE9mKEFsLG4rMSk7aWYodCl7bGV0IGk9dFtlXTtpJiZyLnB1c2goaSl9cmV0dXJuIHIucHVzaChlKSxyfWZ1bmN0aW9uIHlIKGUpe3JldHVybiBlPT09dXIuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1mdW5jdGlvbiB1bGUoZSl7cmV0dXJuIGU9PT1pcy5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn12YXIgSGU9RWUoT2UoKSwxKTt2YXIgcjE9RWUoT2UoKSwxKTtmdW5jdGlvbiBobGUoZSx0KXtsZXQgcj1mY3IoZSksbj1wY3Iocix0KTtyZXR1cm4gT2JqZWN0LmtleXMobikuc29ydChpPT5uW2ldLmxldmVsKS5yZWR1Y2UoKGksbyk9PihpW29dPW5bb10saSkse30pfWZ1bmN0aW9uIGhjcihlKXtsZXQgdD1yMS5tYXAoe2RlcHRoOmUuZGVwdGgsInxWfCI6ZS5tZXRhZ3JhcGgubm9kZXMoKS5sZW5ndGgsInxFfCI6ZS5tZXRhZ3JhcGguZWRnZXMoKS5sZW5ndGh9LGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkrIj0iK259KS5qb2luKCIgIikscj1yMS5tYXAoZS5vcEhpc3RvZ3JhbSxmdW5jdGlvbihuLGkpe3JldHVybiBpKyI9IitufSkuam9pbigiLCIpO3JldHVybiB0KyIgW29wc10gIityfWZ1bmN0aW9uIGZjcihlKXtsZXQgdD1lLmdldE5vZGVNYXAoKSxyPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgobixpKT0+e2xldCBvPXRbaV07aWYoby50eXBlIT09anQuTUVUQSlyZXR1cm4gbjtsZXQgYT1pLnNwbGl0KCIvIikubGVuZ3RoLTEscz1oY3IobyksbD1uW3NdfHx7bm9kZXM6W10sbGV2ZWw6YX07cmV0dXJuIG5bc109bCxsLm5vZGVzLnB1c2gobyksbC5sZXZlbD5hJiYobC5sZXZlbD1hKSxufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChuPT5bbixyW25dXSkuZmlsdGVyKChbbixpXSk9PntsZXR7bm9kZXM6b309aTtpZihvLmxlbmd0aD4xKXJldHVybiEwO2xldCBhPW9bMF07cmV0dXJuIGEudHlwZT09PWp0Lk1FVEEmJmEuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoW24saV0pPT5pLm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBwY3IoZSx0KXtyZXR1cm4gcjEucmVkdWNlKGUsZnVuY3Rpb24obixpKXtsZXQgbz1pWzBdLGE9aVsxXS5ub2RlcyxzPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obCl7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspaWYoIXR8fGRjcihzW2NdLm1ldGFub2RlLm1ldGFncmFwaCxsLm1ldGFncmFwaCkpe2wudGVtcGxhdGVJZD1zW2NdLm1ldGFub2RlLnRlbXBsYXRlSWQsc1tjXS5tZW1iZXJzLnB1c2gobC5uYW1lKTtyZXR1cm59bC50ZW1wbGF0ZUlkPW8rIlsiK3MubGVuZ3RoKyJdIixzLnB1c2goe21ldGFub2RlOmwsbWVtYmVyczpbbC5uYW1lXX0pfSkscy5mb3JFYWNoKGZ1bmN0aW9uKGwpe25bbC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6aVsxXS5sZXZlbCxub2RlczpsLm1lbWJlcnN9fSksbn0se30pfWZ1bmN0aW9uIHZIKGUsdCxyKXtyZXR1cm4gcjEuc29ydEJ5KGUsW249PnQubm9kZShuKS5vcCxuPT50Lm5vZGUobikudGVtcGxhdGVJZCxuPT57dmFyIGk7cmV0dXJuKGk9dC5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+e3ZhciBpO3JldHVybihpPXQucHJlZGVjZXNzb3JzKG4pKT09bnVsbD92b2lkIDA6aS5sZW5ndGh9LG49Pnt2YXIgaTtyZXR1cm4oaT10LnN1Y2Nlc3NvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+bi5zdWJzdHIoci5sZW5ndGgpXSl9ZnVuY3Rpb24gZGNyKGUsdCl7aWYoIWNsZShlLHQpKXJldHVybiExO2xldCByPWUuZ3JhcGgoKS5uYW1lLG49dC5ncmFwaCgpLm5hbWUsaT17fSxvPXt9LGE9W107ZnVuY3Rpb24gcyh1LGgpe2xldCBmPXUuc3Vic3RyKHIubGVuZ3RoKSxwPWguc3Vic3RyKG4ubGVuZ3RoKTtyZXR1cm4gaVtmXV5vW3BdPyhjb25zb2xlLndhcm4oImRpZmZlcmVudCB2aXNpdCBwYXR0ZXJuIiwiWyIrcisiXSIsZiwiWyIrbisiXSIscCksITApOihpW2ZdfHwoaVtmXT1vW3BdPSEwLGEucHVzaCh7bjE6dSxuMjpofSkpLCExKX1sZXQgbD1lLnNvdXJjZXMoKSxjPXQuc291cmNlcygpO2lmKGwubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJkaWZmZXJlbnQgc291cmNlIGxlbmd0aCIpLCExO2w9dkgobCxlLHIpLGM9dkgoYyx0LG4pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWlmKHMobFt1XSxjW3VdKSlyZXR1cm4hMTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgdT1hLnBvcCgpO2lmKCFtY3IoZS5ub2RlKHU9PW51bGw/dm9pZCAwOnUubjEpLHQubm9kZSh1PT1udWxsP3ZvaWQgMDp1Lm4yKSkpcmV0dXJuITE7bGV0IGY9ZS5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjEpLHA9dC5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjIpO2lmKChmPT1udWxsP3ZvaWQgMDpmLmxlbmd0aCkhPT0ocD09bnVsbD92b2lkIDA6cC5sZW5ndGgpKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixmLHApLCExO2Y9dkgoZixlLHIpLHA9dkgocCx0LG4pO2ZvcihsZXQgZD0wO2Q8KGY9PW51bGw/dm9pZCAwOmYubGVuZ3RoKTtkKyspaWYocyhmPT1udWxsP3ZvaWQgMDpmW2RdLHA9PW51bGw/dm9pZCAwOnBbZF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIG1jcihlLHQpe2lmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUsbj10O3JldHVybiEhci50ZW1wbGF0ZUlkJiYhIW4udGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkPT09bi50ZW1wbGF0ZUlkfWVsc2V7aWYoZS50eXBlPT09anQuT1AmJnQudHlwZT09PWp0Lk9QKXJldHVybiBlLm9wPT09dC5vcDtpZihlLnR5cGU9PT1qdC5TRVJJRVMmJnQudHlwZT09PWp0LlNFUklFUyl7bGV0IHI9ZSxuPXQsaT1yLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gaT09PW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoaT09PTB8fHIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1uLm1ldGFncmFwaC5ub2RlKG4ubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX19cmV0dXJuITF9dmFyIERkOyhmdW5jdGlvbihlKXtlW2UuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKERkfHwoRGQ9e30pKTt2YXIgb3M9Y2xhc3MgZXh0ZW5kcyBkSHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9bFAocWMsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4W3FjXT10aGlzLnJvb3QsdGhpcy5vcmRlcmluZ3M9e319Z2V0U2VyaWVzR3JvdXBUeXBlKHQpe3ZhciByO3JldHVybihyPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSE9bnVsbD9yOmlzLkdST1VQfXNldFNlcmllc0dyb3VwVHlwZSh0LHIpe3JldHVybiB0aGlzLnNlcmllc0dyb3VwTWFwLnNldCh0LHIpfWJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpe2xldCByPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09aXMuR1JPVVA/aXMuVU5HUk9VUDppcy5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxyXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxyKXt0aGlzLmluZGV4W3RdPXJ9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IHI9dGhpcy5pbmRleFt0XTtpZighcil0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIHIpKXJldHVybiBudWxsO2xldCBuPXI7aWYobi5icmlkZ2VncmFwaClyZXR1cm4gbi5icmlkZ2VncmFwaDtsZXQgaT1uLmJyaWRnZWdyYXBoPWUzKCJCUklER0VHUkFQSCIsZzAuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighci5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gci5wYXJlbnROb2RlKSlyZXR1cm4gaTtsZXQgbz1yLnBhcmVudE5vZGUsYT1vLm1ldGFncmFwaCxzPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoby5uYW1lKTtyZXR1cm4gSGUuZWFjaChbYSxzXSxsPT57bC5lZGdlcygpLmZpbHRlcihjPT5jLnY9PT10fHxjLnc9PT10KS5mb3JFYWNoKGM9PntsZXQgdT1jLnc9PT10LGg9bC5lZGdlKGMpO0hlLmVhY2goaC5iYXNlRWRnZUxpc3QsZj0+e2xldFtwLGRdPXU/W2YudyxjLnZdOltmLnYsYy53XSxnPXRoaXMuZ2V0Q2hpbGROYW1lKHQscCksXz17djp1P2Q6Zyx3OnU/ZzpkfSx5PWkuZWRnZShfKTt5fHwoeT1IbHQoXy52LF8udykseS5pbmJvdW5kPXUsaS5zZXRFZGdlKF8udixfLncseSkpLHkuYWRkQmFzZUVkZ2UoZix0aGlzKX0pfSl9KSxpfWdldENoaWxkTmFtZSh0LHIpe2xldCBuPXRoaXMuaW5kZXhbcl07Zm9yKDtuOyl7aWYobi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUubmFtZT09PXQpcmV0dXJuIG4ubmFtZTtuPW4ucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK3IpfWdldFByZWRlY2Vzc29ycyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKHIsITApO3JldHVybiByLmlzR3JvdXBOb2RlfHxIZS5lYWNoKHIuaW5FbWJlZGRpbmdzLGk9PntIZS5lYWNoKHIuaW5wdXRzLG89PntpZihvLm5hbWU9PT1pLm5hbWUpe2xldCBhPW5ldyBxZihpLm5hbWUsdCk7YS5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTpvLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Om8ub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OmkubmFtZSx3OnR9LHRoaXMpLG4ucmVndWxhci5wdXNoKGEpfX0pfSksbn1nZXRTdWNjZXNzb3JzKHQpe2xldCByPXRoaXMuaW5kZXhbdF07aWYoIXIpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMociwhMSk7cmV0dXJuIHIuaXNHcm91cE5vZGV8fEhlLmVhY2goci5vdXRFbWJlZGRpbmdzLGk9PntIZS5lYWNoKGkuaW5wdXRzLG89PntpZihvLm5hbWU9PT10KXtsZXQgYT1uZXcgcWYodCxpLm5hbWUpO2EuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6by5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpvLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp0LHc6aS5uYW1lfSx0aGlzKSxuLnJlZ3VsYXIucHVzaChhKX19KX0pLG59Z2V0T25lV2F5RWRnZXModCxyKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxvPWkubWV0YWdyYXBoLGE9dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBmbGUobyx0LHIsbiksZmxlKGEsdCxyLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighci5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LG89ci5tZXRhZ3JhcGg7SGUuZWFjaChvLmVkZ2VzKCksYz0+eyFvLmVkZ2UoYykubnVtUmVndWxhckVkZ2VzfHwoYy52IGluIG58fChuW2Mudl09W10pLG5bYy52XS5wdXNoKGMudyksaVtjLnddPSEwKX0pO2xldCBhPUhlLmRpZmZlcmVuY2UoSGUua2V5cyhuKSxIZS5rZXlzKGkpKSxzPXRoaXMub3JkZXJpbmdzW3RdPXt9LGw9MDtmb3IoO2EubGVuZ3RoOyl7bGV0IGM9YS5zaGlmdCgpO3NbY109bCsrLEhlLmVhY2gobltjXSx1PT5hLnB1c2godSkpLGRlbGV0ZSBuW2NdfXJldHVybiBzfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9JEwodGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcj1ndSgpLmRvbWFpbih0KS5yYW5nZShJcigwLHQubGVuZ3RoKSk7cmV0dXJuIG49PnIobil9dXBkYXRlVGVtcGxhdGVzKCl7UmQoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgpPT57dGhpcy50ZW1wbGF0ZXM9aGxlKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KERkLlRFTVBMQVRFU19VUERBVEVEKX0sanIuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX07ZnVuY3Rpb24gZmxlKGUsdCxyLG4pe2xldCBpPXI/ZS5pbkVkZ2VzKHQubmFtZSk6ZS5vdXRFZGdlcyh0Lm5hbWUpO0hlLmVhY2goaSxvPT57bGV0IGE9ZS5lZGdlKG8pOyhhLm51bVJlZ3VsYXJFZGdlcz9uLnJlZ3VsYXI6bi5jb250cm9sKS5wdXNoKGEpfSl9dmFyIHIzPXt2ZXJpZnlUZW1wbGF0ZTohMCxzZXJpZXNOb2RlTWluU2l6ZTo1LHNlcmllc01hcDpuZXcgTWFwLHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtmdW5jdGlvbiBiSChlLHQscil7bGV0IG49bmV3IG9zKHQpLGk9e307cmV0dXJuIGUxKCJBZGRpbmcgbm9kZXMiLDMwLCgpPT57bGV0IG89e30sYT17fTtIZS5lYWNoKGUubm9kZXMsKHMsbCk9PntzLmRldmljZSYmKG9bcy5kZXZpY2VdPSEwKSxzLnhsYUNsdXN0ZXImJihhW3MueGxhQ2x1c3Rlcl09ITApfSksbi5kZXZpY2VzPUhlLmtleXMobyksbi54bGFDbHVzdGVycz1IZS5rZXlzKGEpLF9jcihuLGUpfSxyLGpyLkhJRVJBUkNIWV9BRERfTk9ERVMpLnRoZW4oKCk9PmUxKCJEZXRlY3Qgc2VyaWVzIiwzMCwoKT0+e3Quc2VyaWVzTm9kZU1pblNpemU+MCYmbWxlKG4ucm9vdCxuLGksdC5zZXJpZXNOb2RlTWluU2l6ZSx0LnNlcmllc01hcCx0LnVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnMpfSxyLGpyLkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkudGhlbigoKT0+ZTEoIkFkZGluZyBlZGdlcyIsNDAsKCk9Pnt5Y3IobixlLGkpfSxyLGpyLkhJRVJBUkNIWV9BRERfRURHRVMpKS50aGVuKCgpPT5uKX1mdW5jdGlvbiBwbGUoZSx0KXtsZXQgcj17fSxuPXt9O0hlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSk7by5kZXZpY2UhPW51bGwmJihyW28uZGV2aWNlXT0hMCksby54bGFDbHVzdGVyIT1udWxsJiYobltvLnhsYUNsdXN0ZXJdPSEwKX0pLGUuZGV2aWNlcz1IZS5rZXlzKHIpLGUueGxhQ2x1c3RlcnM9SGUua2V5cyhuKSxIZS5lYWNoKGUuZ2V0Tm9kZU1hcCgpLChpLG8pPT57aS5pc0dyb3VwTm9kZSYmKGkuc3RhdHM9bmV3IEtTKG51bGwpLGkuZGV2aWNlSGlzdG9ncmFtPXt9KX0pLEhlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSksYT1vO2Zvcig7YS5wYXJlbnROb2RlIT1udWxsOyl7aWYoby5kZXZpY2UhPW51bGwpe2xldCBzPWEucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07c1tvLmRldmljZV09KHNbby5kZXZpY2VdfHwwKSsxfWlmKG8ueGxhQ2x1c3RlciE9bnVsbCl7bGV0IHM9YS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07c1tvLnhsYUNsdXN0ZXJdPShzW28ueGxhQ2x1c3Rlcl18fDApKzF9by5zdGF0cyE9bnVsbCYmYS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoby5zdGF0cyksYT1hLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gZGxlKGUpe2xldCB0PVtdLHI9e307cmV0dXJuIEhlLmVhY2goZS5yb290LmxlYXZlcygpLG49PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT1qdC5PUCl7bGV0IG89aTtpZighby5jb21wYXRpYmxlKWlmKG8ub3duaW5nU2VyaWVzKXtpZihlLmdldFNlcmllc0dyb3VwVHlwZShvLm93bmluZ1Nlcmllcyk9PT1pcy5VTkdST1VQKXQucHVzaChvKTtlbHNlIGlmKCFyW28ub3duaW5nU2VyaWVzXSl7bGV0IGE9ZS5ub2RlKG8ub3duaW5nU2VyaWVzKTthJiYocltvLm93bmluZ1Nlcmllc109YSx0LnB1c2goYSkpfX1lbHNlIHQucHVzaChvKTtIZS5lYWNoKG8uaW5FbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pLEhlLmVhY2goby5vdXRFbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pfX0pLHR9ZnVuY3Rpb24gX2NyKGUsdCl7bGV0IHI9e307SGUuZWFjaCh0Lm5vZGVzLChuLGkpPT57bGV0IG89Y1Aobi5uYW1lKSxhPWUucm9vdDthLmRlcHRoPU1hdGgubWF4KG8ubGVuZ3RoLGEuZGVwdGgpLHJbbi5vcF18fChyW24ub3BdPVtdKSxyW24ub3BdLnB1c2gobik7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmKGEuZGVwdGg9TWF0aC5tYXgoYS5kZXB0aCxvLmxlbmd0aC1zKSxhLmNhcmRpbmFsaXR5Kz1uLmNhcmRpbmFsaXR5LGEub3BIaXN0b2dyYW1bbi5vcF09KGEub3BIaXN0b2dyYW1bbi5vcF18fDApKzEsbi5kZXZpY2UhPW51bGwmJihhLmRldmljZUhpc3RvZ3JhbVtuLmRldmljZV09KGEuZGV2aWNlSGlzdG9ncmFtW24uZGV2aWNlXXx8MCkrMSksbi54bGFDbHVzdGVyIT1udWxsJiYoYS54bGFDbHVzdGVySGlzdG9ncmFtW24ueGxhQ2x1c3Rlcl09KGEueGxhQ2x1c3Rlckhpc3RvZ3JhbVtuLnhsYUNsdXN0ZXJdfHwwKSsxKSxuLmNvbXBhdGlibGU/YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOmEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChuLmluRW1iZWRkaW5ncyx1PT57dS5jb21wYXRpYmxlP2EuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTphLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChuLm91dEVtYmVkZGluZ3MsdT0+e3UuY29tcGF0aWJsZT9hLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLHMhPT1vLmxlbmd0aC0xKTtzKyspe2xldCBsPW9bc10sYz1lLm5vZGUobCk7aWYoIWMmJihjPWxQKGwsZS5ncmFwaE9wdGlvbnMpLGMucGFyZW50Tm9kZT1hLGUuc2V0Tm9kZShsLGMpLGEubWV0YWdyYXBoLnNldE5vZGUobCxjKSxsLmluZGV4T2YoU2EpPT09MCYmYS5uYW1lPT09cWMpKXtsZXQgdT1sLnN1YnN0cmluZyhTYS5sZW5ndGgpO3JbdV18fChyW3VdPVtdKSxlLmxpYnJhcnlGdW5jdGlvbnNbdV09e25vZGU6Yyx1c2FnZXM6clt1XX0sYy5hc3NvY2lhdGVkRnVuY3Rpb249dX1hPWN9ZS5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9YSxhLm1ldGFncmFwaC5zZXROb2RlKG4ubmFtZSxuKSxIZS5lYWNoKG4uaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKHMpe2Uuc2V0Tm9kZShzLm5hbWUscykscy5wYXJlbnROb2RlPW59KSxIZS5lYWNoKG4ub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihzKXtlLnNldE5vZGUocy5uYW1lLHMpLHMucGFyZW50Tm9kZT1ufSl9KX1mdW5jdGlvbiB5Y3IoZSx0LHIpe2xldCBuPWUuZ2V0Tm9kZU1hcCgpLGk9W10sbz1bXSxhPShzLGwpPT57bGV0IGM9MDtmb3IoO3M7KWxbYysrXT1zLm5hbWUscz1zLnBhcmVudE5vZGU7cmV0dXJuIGMtMX07SGUuZWFjaCh0LmVkZ2VzLHM9PntsZXQgbD1hKHQubm9kZXNbcy52XSxpKSxjPWEodC5ub2Rlc1tzLnddLG8pO2lmKGw9PT0tMXx8Yz09PS0xKXJldHVybjtmb3IoO2lbbF09PT1vW2NdOylpZihsLS0sYy0tLGw8MHx8YzwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IHU9bltpW2wrMV1dLGg9aVtsXSxmPW9bY10scD11Lm1ldGFncmFwaC5lZGdlKGgsZik7cHx8KHA9SGx0KGgsZiksdS5tZXRhZ3JhcGguc2V0RWRnZShoLGYscCkpLCF1Lmhhc05vbkNvbnRyb2xFZGdlcyYmIXMuaXNDb250cm9sRGVwZW5kZW5jeSYmKHUuaGFzTm9uQ29udHJvbEVkZ2VzPSEwKSxwLmFkZEJhc2VFZGdlKHMsZSl9KX1mdW5jdGlvbiBtbGUoZSx0LHIsbixpLG8pe2xldCBhPWUubWV0YWdyYXBoO0hlLmVhY2goYS5ub2RlcygpLHU9PntsZXQgaD1hLm5vZGUodSk7aC50eXBlPT09anQuTUVUQSYmbWxlKGgsdCxyLG4saSxvKX0pO2xldCBzPXZjcihhKSxjPShvP2Jjcjp4Y3IpKHMsYSx0LmdyYXBoT3B0aW9ucyk7SGUuZWFjaChjLGZ1bmN0aW9uKHUsaCl7bGV0IGY9dS5tZXRhZ3JhcGgubm9kZXMoKTtIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTtkLm93bmluZ1Nlcmllc3x8KGQub3duaW5nU2VyaWVzPWgpfSksZi5sZW5ndGg8biYmdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKT09PWlzLkdST1VQJiZ0LnNldFNlcmllc0dyb3VwVHlwZSh1Lm5hbWUsaXMuVU5HUk9VUCksdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKSE9PWlzLlVOR1JPVVAmJih0LnNldE5vZGUoaCx1KSxhLnNldE5vZGUoaCx1KSxIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTt1Lm1ldGFncmFwaC5zZXROb2RlKHAsZCksdS5wYXJlbnROb2RlPWQucGFyZW50Tm9kZSx1LmNhcmRpbmFsaXR5KyssZC5kZXZpY2UhPW51bGwmJih1LmRldmljZUhpc3RvZ3JhbVtkLmRldmljZV09KHUuZGV2aWNlSGlzdG9ncmFtW2QuZGV2aWNlXXx8MCkrMSksZC54bGFDbHVzdGVyIT1udWxsJiYodS54bGFDbHVzdGVySGlzdG9ncmFtW2QueGxhQ2x1c3Rlcl09KHUueGxhQ2x1c3Rlckhpc3RvZ3JhbVtkLnhsYUNsdXN0ZXJdfHwwKSsxKSxkLmNvbXBhdGlibGU/dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChkLmluRW1iZWRkaW5ncyxnPT57Zy5jb21wYXRpYmxlP3UuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTp1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChkLm91dEVtYmVkZGluZ3MsZz0+e2cuY29tcGF0aWJsZT91LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLGQucGFyZW50Tm9kZT11LHJbcF09aCxhLnJlbW92ZU5vZGUocCl9KSl9KX1mdW5jdGlvbiB2Y3IoZSl7bGV0IHQ9e307cmV0dXJuIEhlLnJlZHVjZShlLm5vZGVzKCksKHIsbik9PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT09anQuTUVUQSlyZXR1cm4gcjtsZXQgbz1pLm9wO3JldHVybiBvJiYocltvXT1yW29dfHxbXSxyW29dLnB1c2goaS5uYW1lKSkscn0sdCl9ZnVuY3Rpb24geGNyKGUsdCxyKXtsZXQgbj17fTtyZXR1cm4gSGUuZWFjaChlLGZ1bmN0aW9uKGksbyl7aWYoaS5sZW5ndGg8PTEpcmV0dXJuO2xldCBhPXt9O0hlLmVhY2goaSxmdW5jdGlvbihzKXtsZXQgbD1zLmNoYXJBdChzLmxlbmd0aC0xKT09PSIqIixjPXMuc3BsaXQoIi8iKSx1PWNbYy5sZW5ndGgtMV0saD1jLnNsaWNlKDAsYy5sZW5ndGgtMSkuam9pbigiLyIpLGY9dS5tYXRjaCgvXihcRCopKFxkKykkLykscCxkLGc9IiI7Zj8ocD1mWzFdLGQ9ZlsyXSk6KHA9bD91LnN1YnN0cigwLHUubGVuZ3RoLTEpOnUsZD0wLGc9bD8iKiI6IiIpO2xldCBfPXQzKHAsZyxoKTthW19dPWFbX118fFtdO2xldCB5PVFTKHAsZyxoLCtkLHMscik7YVtfXS5wdXNoKHkpfSksSGUuZWFjaChhLGZ1bmN0aW9uKHMsbCl7aWYocy5sZW5ndGg8MilyZXR1cm47cy5zb3J0KGZ1bmN0aW9uKHUsaCl7cmV0dXJuK3UuY2x1c3RlcklkLStoLmNsdXN0ZXJJZH0pO2xldCBjPVtzWzBdXTtmb3IobGV0IHU9MTt1PHMubGVuZ3RoO3UrKyl7bGV0IGg9c1t1XTtpZihoLmNsdXN0ZXJJZD09PWNbYy5sZW5ndGgtMV0uY2x1c3RlcklkKzEpe2MucHVzaChoKTtjb250aW51ZX14SChjLG4sK28sdCxyKSxjPVtoXX14SChjLG4sK28sdCxyKX0pfSksbn1mdW5jdGlvbiBiY3IoZSx0LHIpe2xldCBuPXt9O3JldHVybiBIZS5lYWNoKGUsZnVuY3Rpb24oaSxvKXtpZihpLmxlbmd0aDw9MSlyZXR1cm47bGV0IGE9e30scz17fTtIZS5lYWNoKGksZnVuY3Rpb24oYyl7bGV0IHU9Yy5jaGFyQXQoYy5sZW5ndGgtMSk9PT0iKiIsaD1jLnNwbGl0KCIvIiksZj1oW2gubGVuZ3RoLTFdLHA9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmpvaW4oIi8iKSxkPS8oXGQrKS9nLGc9W10sXyx5LHgsYixTLEM9MDtmb3IoO189ZC5leGVjKGYpOykrK0MseT1mLnNsaWNlKDAsXy5pbmRleCkseD1fWzBdLGI9Zi5zbGljZShfLmluZGV4K19bMF0ubGVuZ3RoKSxTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSk7QzwxJiYoeT11P2Yuc3Vic3RyKDAsZi5sZW5ndGgtMSk6Zix4PTAsYj11PyIqIjoiIixTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSkpfSk7dmFyIGw9e307SGUuZWFjaChzLGZ1bmN0aW9uKGMsdSl7Yy5zb3J0KGZ1bmN0aW9uKHkseCl7cmV0dXJuIGFbeFswXV0uaWRzLmxlbmd0aC1hW3lbMF1dLmlkcy5sZW5ndGh9KTt2YXIgaD1jWzBdWzBdLGY9Y1swXVsxXTtsW2hdPWxbaF18fFtdO2xldCBwPXUuc3BsaXQoIi8iKSxkPXBbcC5sZW5ndGgtMV0sZz1wLnNsaWNlKDAscC5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBfPVFTKGFbaF0ucHJlZml4LGFbaF0uc3VmZml4LGcsK2YsdSxyKTtsW2hdLnB1c2goXyl9KSxIZS5lYWNoKGwsZnVuY3Rpb24oYyx1KXtpZihjLmxlbmd0aDwyKXJldHVybjtjLnNvcnQoZnVuY3Rpb24oZixwKXtyZXR1cm4rZi5jbHVzdGVySWQtK3AuY2x1c3RlcklkfSk7bGV0IGg9W2NbMF1dO2ZvcihsZXQgZj0xO2Y8Yy5sZW5ndGg7ZisrKXtsZXQgcD1jW2ZdO2lmKHAuY2x1c3RlcklkPT09aFtoLmxlbmd0aC0xXS5jbHVzdGVySWQrMSl7aC5wdXNoKHApO2NvbnRpbnVlfXhIKGgsbiwrbyx0LHIpLGg9W3BdfXhIKGgsbiwrbyx0LHIpfSl9KSxufWZ1bmN0aW9uIHhIKGUsdCxyLG4saSl7aWYoZS5sZW5ndGg+MSl7bGV0IG89dDMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQsZVswXS5jbHVzdGVySWQsZVtlLmxlbmd0aC0xXS5jbHVzdGVySWQpLGE9UVMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQscixvLGkpO0hlLmVhY2goZSxmdW5jdGlvbihzKXthLmlkcy5wdXNoKHMuY2x1c3RlcklkKSxhLm1ldGFncmFwaC5zZXROb2RlKHMubmFtZSxuLm5vZGUocy5uYW1lKSl9KSx0W29dPWF9fXZhciBtZT1FZShPZSgpLDEpO3ZhciB5MD17REVGQVVMVF9GSUxMOiIjZmZmZmZmIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiIsQ09NUEFUSUJMRToiIzBmOWQ1OCIsSU5DT01QQVRJQkxFOiIjZGI0NDM3In0sS3U9e0RFRkFVTFRfRklMTDoiI2Q5ZDlkOSIsREVGQVVMVF9TVFJPS0U6IiNhNmE2YTYiLFNBVFVSQVRJT046LjYsTElHSFRORVNTOi44NSxFWFBBTkRFRF9DT0xPUjoiI2YwZjBmMCIsSFVFUzpbMjIwLDEwMCwxODAsNDAsMjAsMzQwLDI2MCwzMDAsMTQwLDYwXSxTVFJVQ1RVUkVfUEFMRVRURShlLHQpe2xldCByPUt1LkhVRVMsbj1yLmxlbmd0aCxpPXJbZSVuXSxvPU1hdGguc2luKGkqTWF0aC5QSS8zNjApLGE9dD8zMDo5MC02MCpvLHM9dD85NTo4MDtyZXR1cm4gVm0oaSwuMDEqYSwuMDEqcykudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoZSl7cmV0dXJuIEt1LlNUUlVDVFVSRV9QQUxFVFRFKGUpfSxYTEFfQ0xVU1RFUl9QQUxFVFRFKGUpe3JldHVybiBLdS5TVFJVQ1RVUkVfUEFMRVRURShlKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9LFZsdD17REVGQVVMVF9GSUxMOiJ3aGl0ZSIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIifSxYbz17bWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0sd2NyPW5ldyBSZWdFeHAoIl4oPzoiK1NhKyIpPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIiksbG89Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuaGllcmFyY2h5PXQsdGhpcy5kaXNwbGF5aW5nU3RhdHM9cix0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9bix0aGlzLmluZGV4PXt9LHRoaXMucmVuZGVyZWRPcE5hbWVzPVtdLHRoaXMuY29tcHV0ZVNjYWxlcygpLHRoaXMuaGFzU3ViaGllcmFyY2h5PXt9LHRoaXMucm9vdD1uZXcgU0godC5yb290LHQuZ3JhcGhPcHRpb25zKSx0aGlzLmluZGV4W3Qucm9vdC5uYW1lXT10aGlzLnJvb3QsdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0LnJvb3QubmFtZSksdGhpcy5idWlsZFN1YmhpZXJhcmNoeSh0LnJvb3QubmFtZSksdGhpcy5yb290LmV4cGFuZGVkPSEwLHRoaXMudHJhY2VJbnB1dHM9ITF9Y29tcHV0ZVNjYWxlcygpe3RoaXMuZGV2aWNlQ29sb3JNYXA9Z3UoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UobWUubWFwKElyKHRoaXMuaGllcmFyY2h5LmRldmljZXMubGVuZ3RoKSxLdS5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWd1KCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShtZS5tYXAoSXIodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxLdS5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IHQ9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGgscj1sdSh0Lm5vZGVzKCksKGksbyk9PntsZXQgYT10Lm5vZGUoaSk7aWYoYS5zdGF0cyE9bnVsbClyZXR1cm4gYS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPU9uKCkuZG9tYWluKFswLHJdKS5yYW5nZShYby5taW5NYXhDb2xvcnMpO2xldCBuPWx1KHQubm9kZXMoKSwoaSxvKT0+e2xldCBhPXQubm9kZShpKTtpZihhLnN0YXRzIT1udWxsKXJldHVybiBhLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9T24oKS5kb21haW4oWzAsbl0pLnJhbmdlKFhvLm1pbk1heENvbG9ycyksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP1hzZTpPbigpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbUTQsdFBdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxyKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7bGV0IG49bWUuc3VtKE9iamVjdC5rZXlzKHQpLm1hcChpPT50W2ldKSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChpPT4oe2NvbG9yOnIoaSkscHJvcG9ydGlvbjp0W2ldL259KSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgcj10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFyKXJldHVybiBudWxsO2xldCBuPXIuaXNHcm91cE5vZGU/bmV3IFNIKHIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgR2Yocik7dGhpcy5pbmRleFt0XT1uLHRoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2godCksci5zdGF0cyYmKG4ubWVtb3J5Q29sb3I9dGhpcy5tZW1vcnlVc2FnZVNjYWxlKHIuc3RhdHMudG90YWxCeXRlcyksbi5jb21wdXRlVGltZUNvbG9yPXRoaXMuY29tcHV0ZVRpbWVTY2FsZShyLnN0YXRzLmdldFRvdGFsTWljcm9zKCkpKSxuLmlzRmFkZWRPdXQ9dGhpcy5kaXNwbGF5aW5nU3RhdHMmJiFnSChyLnN0YXRzKTt2YXIgaT1udWxsLG89bnVsbCxhPW51bGw7aWYoci5pc0dyb3VwTm9kZSl7aT1yLmRldmljZUhpc3RvZ3JhbSxvPXIueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgcz1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxsPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7KHMhPTB8fGwhPTApJiYoYT1zLyhzK2wpKX1lbHNle2xldCBzPW4ubm9kZS5kZXZpY2U7cyYmKGk9e1tzXToxfSk7bGV0IGw9bi5ub2RlLnhsYUNsdXN0ZXI7bCYmKG89e1tsXToxfSksbi5ub2RlLnR5cGU9PT1qdC5PUCYmKGE9bi5ub2RlLmNvbXBhdGlibGU/MTowKX1yZXR1cm4gaSYmKG4uZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaSx0aGlzLmRldmljZUNvbG9yTWFwKSksbyYmKG4ueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKG8sdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKSxhIT1udWxsJiYobi5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6eTAuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOmF9LHtjb2xvcjp5MC5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLWF9XSksdGhpcy5pbmRleFt0XX1nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpe2xldCByPWNQKHQpLG49MCxpPW51bGwsbz10O2Zvcig7bjxyLmxlbmd0aCYmKG89cltuXSxpPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKSwhIWkuZXhwYW5kZWQpO24rKyk7aWYobj09ci5sZW5ndGgtMil7bGV0IGE9cltuKzFdO2lmKGkhPW51bGwmJmkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbYV18fGkhPW51bGwmJmkub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW2FdKXJldHVybiBhfXJldHVybiBvfXNldERlcHRoKHQpe3lsZSh0aGlzLnJvb3QsK3QpfWlzTm9kZUF1eGlsaWFyeSh0KXtsZXQgcj10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUodC5ub2RlLnBhcmVudE5vZGUubmFtZSksbj1tZS5maW5kKHIuaXNvbGF0ZWRJbkV4dHJhY3QsaT0+aS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSk7cmV0dXJuIG4/ITA6KG49bWUuZmluZChyLmlzb2xhdGVkT3V0RXh0cmFjdCxpPT5pLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQscixuLGkpe2xldCBvPW4ubmFtZS5yZXBsYWNlKHIsaSksYT10Lm1ldGFncmFwaC5ub2RlKG8pO2lmKGEpcmV0dXJuIGE7YT1uZXcgXzAoe25hbWU6byxpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOm1lLmNsb25lRGVlcChuLmF0dHIpfSksYS5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5vdXRwdXRTaGFwZXM9bWUuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxhLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLGEuZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LGEuZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsYS5pbnB1dHM9bi5pbnB1dHMubWFwKGw9PntsZXQgYz1tZS5jbG9uZShsKTtyZXR1cm4gYy5uYW1lPWwubmFtZS5yZXBsYWNlKHIsaSksY30pLGEucGFyZW50Tm9kZT10LHQubWV0YWdyYXBoLnNldE5vZGUoYS5uYW1lLGEpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUoYS5uYW1lLGEpO2xldCBzPWw9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LHIsbCxpKTtyZXR1cm4gYS5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKHMpLGEub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKHMpLGF9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LHIsbixpLG8pe2xldCBhPXt9LHM9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQscixuLGksbyxhKTtyZXR1cm4gbWUuaXNFbXB0eShhKXx8dGhpcy5wYXRjaEVkZ2VzRnJvbUZ1bmN0aW9uT3V0cHV0cyhyLGEpLHN9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LHIsbixpLG8sYSl7bGV0IHM9bFAobi5uYW1lLnJlcGxhY2UoaSxvKSk7cmV0dXJuIHMuZGVwdGg9bi5kZXB0aCxzLmNhcmRpbmFsaXR5PW4uY2FyZGluYWxpdHkscy50ZW1wbGF0ZUlkPW4udGVtcGxhdGVJZCxzLm9wSGlzdG9ncmFtPW1lLmNsb25lKG4ub3BIaXN0b2dyYW0pLHMuZGV2aWNlSGlzdG9ncmFtPW1lLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxzLnhsYUNsdXN0ZXJIaXN0b2dyYW09bWUuY2xvbmUobi54bGFDbHVzdGVySGlzdG9ncmFtKSxzLmhhc05vbkNvbnRyb2xFZGdlcz1uLmhhc05vbkNvbnRyb2xFZGdlcyxzLmluY2x1ZGU9bi5pbmNsdWRlLHMubm9kZUF0dHJpYnV0ZXM9bWUuY2xvbmUobi5ub2RlQXR0cmlidXRlcykscy5hc3NvY2lhdGVkRnVuY3Rpb249bi5hc3NvY2lhdGVkRnVuY3Rpb24sbWUuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLGw9PntsZXQgYz1uLm1ldGFncmFwaC5ub2RlKGwpO3N3aXRjaChjLnR5cGUpe2Nhc2UganQuTUVUQTpsZXQgdT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxyLGMsaSxvLGEpO3UucGFyZW50Tm9kZT1zLHMubWV0YWdyYXBoLnNldE5vZGUodS5uYW1lLHUpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUodS5uYW1lLHUpO2JyZWFrO2Nhc2UganQuT1A6bGV0IGg9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHMsaSxjLG8pO21lLmlzTnVtYmVyKGguZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHIsaCksbWUuaXNOdW1iZXIoaC5mdW5jdGlvbk91dHB1dEluZGV4KSYmKGFbaC5mdW5jdGlvbk91dHB1dEluZGV4XT1oKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihjLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixzLGksbyksc31jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQscixuLGkpe21lLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSxvPT57bGV0IGE9dC5tZXRhZ3JhcGguZWRnZShvKSxzPWEudi5yZXBsYWNlKG4saSksbD1hLncucmVwbGFjZShuLGkpLGM9bmV3IHFmKHMsbCk7Yy5pbmJvdW5kPWEuaW5ib3VuZCxjLm51bVJlZ3VsYXJFZGdlcz1hLm51bVJlZ3VsYXJFZGdlcyxjLm51bUNvbnRyb2xFZGdlcz1hLm51bUNvbnRyb2xFZGdlcyxjLm51bVJlZkVkZ2VzPWEubnVtUmVmRWRnZXMsYy50b3RhbFNpemU9YS50b3RhbFNpemUsYS5iYXNlRWRnZUxpc3QmJihjLmJhc2VFZGdlTGlzdD1hLmJhc2VFZGdlTGlzdC5tYXAodT0+e2xldCBoPW1lLmNsb25lKHUpO3JldHVybiBoLnY9dS52LnJlcGxhY2UobixpKSxoLnc9dS53LnJlcGxhY2UobixpKSxofSkpLHIubWV0YWdyYXBoLm5vZGUobCk/ci5tZXRhZ3JhcGguc2V0RWRnZShzLGwsYyk6ci5tZXRhZ3JhcGguc2V0RWRnZShsLHMsYyl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQscil7bGV0IG49TWF0aC5taW4oci5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9bWUuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtyLmlucHV0cy5wdXNoKGkpO2xldCBvPXRoaXMuaGllcmFyY2h5LmdldFByZWRlY2Vzc29ycyh0Lm5hbWUpLGEscz0wO21lLmVhY2goby5yZWd1bGFyLGw9PntpZihzKz1sLm51bVJlZ3VsYXJFZGdlcyxzPm4pcmV0dXJuIGE9bCwhMX0pLG1lLmVhY2goYS5iYXNlRWRnZUxpc3QsbD0+e2wudz09PXQubmFtZSYmKGwudz1yLm5hbWUpLGwudj09PXQubmFtZSYmKGwudj1yLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHModCxyKXtsZXQgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7bWUuZWFjaChuLnJlZ3VsYXIsaT0+e21lLmVhY2goaS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPXRoaXMuaGllcmFyY2h5Lm5vZGUoby53KTttZS5lYWNoKGEuaW5wdXRzLHM9PntpZihzLm5hbWU9PT10Lm5hbWUpe2xldCBsPXJbcy5vdXRwdXRUZW5zb3JLZXldO3MubmFtZT1sLm5hbWUscy5vdXRwdXRUZW5zb3JLZXk9by5vdXRwdXRUZW5zb3JLZXl9fSl9KSxtZS5lYWNoKGkuYmFzZUVkZ2VMaXN0LG89PntvLnY9cltvLm91dHB1dFRlbnNvcktleV0ubmFtZSxvLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCByPXRoaXMuaW5kZXhbdF07aWYoci5ub2RlLnR5cGUhPT1qdC5NRVRBJiZyLm5vZGUudHlwZSE9PWp0LlNFUklFUylyZXR1cm47bGV0IG49cixpPW4ubm9kZS5tZXRhZ3JhcGgsbz1uLmNvcmVHcmFwaCxhPVtdLHM9W107bWUuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KG1lLmVhY2goaS5ub2RlcygpLGQ9PntsZXQgZz1pLm5vZGUoZCksXz10aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2cub3BdO2lmKCFffHxkLmluZGV4T2YoU2EpPT09MClyZXR1cm47bGV0IHk9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKGksZyxfLm5vZGUsXy5ub2RlLm5hbWUsZy5uYW1lKTthLnB1c2goZykscy5wdXNoKHkpfSksbWUuZWFjaChzLChkLGcpPT57bGV0IF89YVtnXTtkLnBhcmVudE5vZGU9Xy5wYXJlbnROb2RlLGkuc2V0Tm9kZShfLm5hbWUsZCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShfLm5hbWUsZCl9KSksbWUuZWFjaChpLm5vZGVzKCksZD0+e2xldCBnPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGQpLF89Zy5ub2RlO28uc2V0Tm9kZShkLGcpLF8uaXNHcm91cE5vZGV8fChtZS5lYWNoKF8uaW5FbWJlZGRpbmdzLHk9PntsZXQgeD1uZXcgT2QobnVsbCksYj1uZXcgR2YoeSk7Z2xlKGcseSxiLHgsZ2kuQ09OU1RBTlQpLHRoaXMuaW5kZXhbeS5uYW1lXT1ifSksbWUuZWFjaChfLm91dEVtYmVkZGluZ3MseT0+e2xldCB4PW5ldyBPZChudWxsKSxiPW5ldyBHZih5KTtfbGUoZyx5LGIseCxnaS5TVU1NQVJZKSx0aGlzLmluZGV4W3kubmFtZV09Yn0pKX0pLG1lLmVhY2goaS5lZGdlcygpLGQ9PntsZXQgZz1pLmVkZ2UoZCksXz1uZXcgT2QoZyk7Xy5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbZC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W2Qud10uaXNGYWRlZE91dCxvLnNldEVkZ2UoZC52LGQudyxfKX0pLG4ubm9kZS50eXBlPT09anQuTUVUQSYmUGNyKG4sdGhpcy5hdXRvRXh0cmFjdE5vZGVzKSxtZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PXFjJiZtZS5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoZCxnKT0+e2xldCBfPWQubm9kZSx5PXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKF8ubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKHkpLHkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsby5yZW1vdmVOb2RlKF8ubmFtZSl9KTtsZXQgbD1uLm5vZGUucGFyZW50Tm9kZTtpZighbClyZXR1cm47bGV0IGM9dGhpcy5pbmRleFtsLm5hbWVdLHU9KGQsLi4uZyk9PmcuY29uY2F0KFtkPyJJTiI6Ik9VVCJdKS5qb2luKCJ+fiIpLGg9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgodCksZj17aW46e30sb3V0Ont9LGNvbnRyb2w6e319O21lLmVhY2goaC5lZGdlcygpLGQ9PntsZXQgZz0hIWkubm9kZShkLncpLF89Zz9kLnY6ZC53O2guZWRnZShkKS5udW1SZWd1bGFyRWRnZXM/Zz9mLm91dFtfXT0oZi5vdXRbX118fDApKzE6Zi5pbltfXT0oZi5pbltfXXx8MCkrMTpmLmNvbnRyb2xbX109KGYuY29udHJvbFtfXXx8MCkrMX0pO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTttZS5lYWNoKGguZWRnZXMoKSxkPT57bGV0IGc9aC5lZGdlKGQpLF89ISFpLm5vZGUoZC53KSxbeSx4XT1fP1tkLncsZC52XTpbZC52LGQud10sYj10aGlzLmluZGV4W3ldLFM9dGhpcy5pbmRleFt4XSxDPVM/Uy5ub2RlOnBbeF0sUD0hZy5udW1SZWd1bGFyRWRnZXMmJmYuY29udHJvbFt4XT5Yby5tYXhDb250cm9sRGVncmVlLFssa109Xz9bci5pbkFubm90YXRpb25zLGIuaW5Bbm5vdGF0aW9uc106W3Iub3V0QW5ub3RhdGlvbnMsYi5vdXRBbm5vdGF0aW9uc10sRD0oXz9mLm91dDpmLmluKVt4XT5Yby5tYXhCcmlkZ2VQYXRoRGVncmVlLEI9bnVsbCxJPSExO2lmKFhvLmVuYWJsZUJyaWRnZWdyYXBoJiYhRCYmIVAmJmIuaXNJbkNvcmUoKSl7bGV0IFc9Wj0+e2xldCBydD1fP3t2Olosdzp0fTp7djp0LHc6Wn07cmV0dXJuIGMuY29yZUdyYXBoLmVkZ2UocnQpfTtCPVcoeCksQnx8KEI9Vyh1KF8seCxsLm5hbWUpKSksST0hIUJ9bGV0IEw9ITE7aWYoQiYmIWcubnVtUmVndWxhckVkZ2VzKXtsZXQgVz1CLFo9Yy5ub2RlO2Zvcig7Vy5hZGpvaW5pbmdNZXRhZWRnZTspVz1XLmFkam9pbmluZ01ldGFlZGdlLFo9Wi5wYXJlbnROb2RlO2xldCBydD10aGlzLmhpZXJhcmNoeS5nZXRUb3BvbG9naWNhbE9yZGVyaW5nKFoubmFtZSksb3Q9Vy5tZXRhZWRnZTtMPXJ0W290LnZdPnJ0W290LnddfWlmKEk9SSYmIUwsIUkpe2sucHVzaChuZXcgaTMoQyxTLG5ldyBPZChnKSxnaS5TSE9SVENVVCxfKSk7cmV0dXJufWxldCBSPXUoXyx0KSxGPXUoXyx4LHQpLHo9by5ub2RlKEYpO2lmKCF6KXtsZXQgVz1vLm5vZGUoUik7aWYoIVcpe2xldCBydD17bmFtZTpSLHR5cGU6anQuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTp1ci5VTlNQRUNJRklFRCxpbmJvdW5kOl8sbm9kZUF0dHJpYnV0ZXM6e319O1c9bmV3IEdmKHJ0KSx0aGlzLmluZGV4W1JdPVcsby5zZXROb2RlKFIsVyl9bGV0IFo9e25hbWU6Rix0eXBlOmp0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6dXIuVU5TUEVDSUZJRUQsaW5ib3VuZDpfLG5vZGVBdHRyaWJ1dGVzOnt9fTt6PW5ldyBHZihaKSx0aGlzLmluZGV4W0ZdPXosby5zZXROb2RlKEYseiksby5zZXRQYXJlbnQoRixSKSxXLm5vZGUuY2FyZGluYWxpdHkrK31sZXQgVT1uZXcgT2QoZyk7VS5hZGpvaW5pbmdNZXRhZWRnZT1CLF8/by5zZXRFZGdlKEYseSxVKTpvLnNldEVkZ2UoeSxGLFUpfSksbWUuZWFjaChbITAsITFdLGQ9PntsZXQgZz11KGQsdCksXz1vLm5vZGUoZyk7IV98fG1lLmVhY2goby5ub2RlcygpLHk9Pnt2YXIgayxPO2lmKG8ubm9kZSh5KS5ub2RlLnR5cGU9PT1qdC5CUklER0V8fCEoZD8hKChrPW8ucHJlZGVjZXNzb3JzKHkpKSE9bnVsbCYmay5sZW5ndGgpOiEoKE89by5zdWNjZXNzb3JzKHkpKSE9bnVsbCYmTy5sZW5ndGgpKSlyZXR1cm47bGV0IFM9dShkLHQsIlNUUlVDVFVSQUxfVEFSR0VUIiksQz1vLm5vZGUoUyk7aWYoIUMpe2xldCBEPXtuYW1lOlMsdHlwZTpqdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOnVyLlVOU1BFQ0lGSUVELGluYm91bmQ6ZCxub2RlQXR0cmlidXRlczp7fX07Qz1uZXcgR2YoRCksQy5zdHJ1Y3R1cmFsPSEwLHRoaXMuaW5kZXhbU109QyxvLnNldE5vZGUoUyxDKSxfLm5vZGUuY2FyZGluYWxpdHkrKyxvLnNldFBhcmVudChTLGcpfWxldCBQPW5ldyBPZChudWxsKTtQLnN0cnVjdHVyYWw9ITAsUC53ZWlnaHQtLSxkP28uc2V0RWRnZShTLHksUCk6by5zZXRFZGdlKHksUyxQKX0pfSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXttZS5lYWNoKHQuZWRnZXMoKSxyPT57bGV0IG49dC5lZGdlKHIpLGk9bmV3IE9kKG4pO21lLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPW8udi5zcGxpdChBbCk7Zm9yKGxldCBzPWEubGVuZ3RoO3M+PTA7cy0tKXtsZXQgbD1hLnNsaWNlKDAscyksYz10aGlzLmhpZXJhcmNoeS5ub2RlKGwuam9pbihBbCkpO2lmKGMpe2lmKGMudHlwZT09PWp0Lk9QJiZ0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2Mub3BdKWZvcihsZXQgdT0xO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sLnNsaWNlKDAsdSkuam9pbihBbCk7IWh8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoaCl9YnJlYWt9fX0pfSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89cix0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1vLHRoaXMucG9pbnRzPVtdfX0sZ2k7KGZ1bmN0aW9uKGUpe2VbZS5TSE9SVENVVD0wXT0iU0hPUlRDVVQiLGVbZS5DT05TVEFOVD0xXT0iQ09OU1RBTlQiLGVbZS5TVU1NQVJZPTJdPSJTVU1NQVJZIixlW2UuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKGdpfHwoZ2k9e30pKTt2YXIgd0g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8WG8ubWF4QW5ub3RhdGlvbnMpe3RoaXMubGlzdC5wdXNoKHQpO3JldHVybn1sZXQgcj10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihyLmFubm90YXRpb25UeXBlPT09Z2kuRUxMSVBTSVMpe2xldCBpPXIubm9kZTtpLnNldE51bU1vcmVOb2RlcygrK2kubnVtTW9yZU5vZGVzKTtyZXR1cm59bGV0IG49bmV3IF9IKDEpO3RoaXMubGlzdC5wdXNoKG5ldyBpMyhuLG5ldyBHZihuKSxudWxsLGdpLkVMTElQU0lTLHQuaXNJbikpfX0sR2Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5ub2RlPXQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmluQW5ub3RhdGlvbnM9bmV3IHdILHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IHdILHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKEFsKSsxKSx0LnR5cGU9PT1qdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7bGV0IHI9dGhpcy5kaXNwbGF5TmFtZS5tYXRjaCh3Y3IpO3I/dGhpcy5kaXNwbGF5TmFtZT1yWzFdOm1lLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxTYSkmJih0aGlzLmRpc3BsYXlOYW1lPXRoaXMuZGlzcGxheU5hbWUuc3Vic3RyaW5nKFNhLmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX0sT2Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fTtmdW5jdGlvbiBnbGUoZSx0LHIsbixpKXtsZXQgbz1uZXcgaTModCxyLG4saSwhMCk7ZS5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gX2xlKGUsdCxyLG4saSl7bGV0IG89bmV3IGkzKHQscixuLGksITEpO2Uub3V0QW5ub3RhdGlvbnMucHVzaChvKX1mdW5jdGlvbiBTY3IoZSx0KXttZS5lYWNoKGUubm9kZXMoKSxyPT57bGV0IG49ZS5ub2RlKHIpO2lmKG4uZXhwYW5kZWQ9dD4xLHQ+MClzd2l0Y2gobi5ub2RlLnR5cGUpe2Nhc2UganQuTUVUQTpjYXNlIGp0LlNFUklFUzp5bGUobix0LTEpO2JyZWFrfX0pfXZhciBTSD1jbGFzcyBleHRlbmRzIEdme2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCk7bGV0IGk9dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1lMyhpLm5hbWUsZzAuQ09SRSxyKSx0aGlzLmluRXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5vdXRFeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNvbGF0ZWRJbkV4dHJhY3Q9W10sdGhpcy5pc29sYXRlZE91dEV4dHJhY3Q9W10sdGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19O2Z1bmN0aW9uIHlsZShlLHQpe2UuY29yZUdyYXBoJiZTY3IoZS5jb3JlR3JhcGgsdCl9ZnVuY3Rpb24gdVAoZSx0LHIpe2xldCBuPWUubm9kZSh0KSxpPWUubm9kZShyKSxvPWUuZWRnZSh0LHIpOyhuLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERSkmJm4ubm9kZS5pbmNsdWRlIT09dXIuRVhDTFVERSYmaS5ub2RlLmluY2x1ZGUhPT11ci5FWENMVURFfHwoX2xlKG4saS5ub2RlLGksbyxnaS5TSE9SVENVVCksZ2xlKGksbi5ub2RlLG4sbyxnaS5TSE9SVENVVCksZS5yZW1vdmVFZGdlKHQscikpfWZ1bmN0aW9uIFVsdChlLHQscil7dmFyIG87bGV0IG49ZS5jb3JlR3JhcGgsaT1uLm5vZGUodCk7aS5pc091dEV4dHJhY3Q9ITAsbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLChYby5kZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWV8fHIpJiZtZS5lYWNoKG4uc3VjY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sdCxhKX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaSksbi5yZW1vdmVOb2RlKHQpKX1mdW5jdGlvbiBxbHQoZSx0LHIpe3ZhciBvO2xldCBuPWUuY29yZUdyYXBoLGk9bi5ub2RlKHQpO2kuaXNJbkV4dHJhY3Q9ITAsbWUuZWFjaChuLnN1Y2Nlc3NvcnModCksKGEscyk9Pnt1UChuLHQsYSl9KSwoWG8uZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxyKSYmbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChpKSxuLnJlbW92ZU5vZGUodCkpfWZ1bmN0aW9uIHZsZShlLHQpe2lmKGUudHlwZT09PWp0Lk9QKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLm9wPT09dFtyXSlyZXR1cm4hMH1lbHNlIGlmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUuZ2V0Um9vdE9wKCk7aWYocil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoci5vcD09PXRbbl0pcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIE1jcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57dmFyIGksbzt0Lm5vZGUocikubm9kZS5pbmNsdWRlPT09dXIuRVhDTFVERSYmIXIuc3RhcnRzV2l0aChTYSkmJigoKGk9ZS5jb3JlR3JhcGgub3V0RWRnZXMocikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aCk+KChvPWUuY29yZUdyYXBoLmluRWRnZXMocikpPT1udWxsP3ZvaWQgMDpvLmxlbmd0aCk/VWx0KGUsciwhMCk6cWx0KGUsciwhMCkpfSl9ZnVuY3Rpb24gRWNyKGUpe2xldCB0PWUuY29yZUdyYXBoO21lLmVhY2godC5ub2RlcygpLHI9PntsZXQgbj10Lm5vZGUocik7bi5ub2RlLmluY2x1ZGU9PT11ci5VTlNQRUNJRklFRCYmdmxlKG4ubm9kZSxYby5vdXRFeHRyYWN0VHlwZXMpJiZVbHQoZSxyKX0pfWZ1bmN0aW9uIFRjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57bGV0IG49dC5ub2RlKHIpO24ubm9kZS5pbmNsdWRlPT09dXIuVU5TUEVDSUZJRUQmJnZsZShuLm5vZGUsWG8uaW5FeHRyYWN0VHlwZXMpJiZxbHQoZSxyKX0pfWZ1bmN0aW9uIENjcihlKXtsZXQgdD1lLmNvcmVHcmFwaCxyPXt9LG49e30saT0wO2lmKG1lLmVhY2godC5ub2RlcygpLF89Pnt2YXIgYixTLEMsUDtpZih0Lm5vZGUoXykubm9kZS5pbmNsdWRlIT09dXIuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCB5PW1lLnJlZHVjZSh0LnByZWRlY2Vzc29ycyhfKSwoayxPKT0+e2xldCBEPXQuZWRnZShPLF8pLm1ldGFlZGdlO3JldHVybiBrKyhELm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTt5PT09MCYmKChiPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Yi5sZW5ndGgpPjAmJih5PShTPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Uy5sZW5ndGgpO2xldCB4PW1lLnJlZHVjZSh0LnN1Y2Nlc3NvcnMoXyksKGssTyk9PntsZXQgRD10LmVkZ2UoXyxPKS5tZXRhZWRnZTtyZXR1cm4gaysoRC5udW1SZWd1bGFyRWRnZXM/MTowKX0sMCk7eD09PTAmJigoQz10LnN1Y2Nlc3NvcnMoXykpPT1udWxsP3ZvaWQgMDpDLmxlbmd0aCk+MCYmKHg9KFA9dC5zdWNjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6UC5sZW5ndGgpLHJbX109eSxuW19dPXgsaSsrfSksaTxYby5taW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uKXJldHVybjtsZXQgbz1Yby5taW5EZWdyZWVGb3JFeHRyYWN0aW9uLTEsYT1NYXRoLnJvdW5kKGkqLjc1KSxzPU1hdGgucm91bmQoaSouMjUpLGw9T2JqZWN0LmtleXMocikuc29ydCgoXyx5KT0+cltfXS1yW3ldKSxjPXJbbFthXV0sdT1yW2xbc11dLGg9YytjLXU7aD1NYXRoLm1heChoLG8pO2ZvcihsZXQgXz1pLTE7cltsW19dXT5oO18tLSlxbHQoZSxsW19dKTtsZXQgZj1PYmplY3Qua2V5cyhuKS5zb3J0KChfLHkpPT5uW19dLW5beV0pLHA9bltmW2FdXSxkPW5bZltzXV0sZz1wKyhwLWQpKjQ7Zz1NYXRoLm1heChnLG8pO2ZvcihsZXQgXz1pLTE7bltmW19dXT5nO18tLSl7bGV0IHk9dC5ub2RlKGZbX10pOyF5fHx5LmlzSW5FeHRyYWN0fHxVbHQoZSxmW19dKX19ZnVuY3Rpb24gQWNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9e307bWUuZWFjaCh0LmVkZ2VzKCksbj0+e3QuZWRnZShuKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXN8fCgocltuLnZdPXJbbi52XXx8W10pLnB1c2gobiksKHJbbi53XT1yW24ud118fFtdKS5wdXNoKG4pKX0pLG1lLmVhY2gociwobixpKT0+e24ubGVuZ3RoPlhvLm1heENvbnRyb2xEZWdyZWUmJm1lLmVhY2gobixvPT51UCh0LG8udixvLncpKX0pfWZ1bmN0aW9uIFBjcihlLHQpe01jcihlKSxYby5vdXRFeHRyYWN0VHlwZXMubGVuZ3RoJiZFY3IoZSksWG8uaW5FeHRyYWN0VHlwZXMubGVuZ3RoJiZUY3IoZSksdCYmQ2NyKGUpLFhvLm1heENvbnRyb2xEZWdyZWUmJkFjcihlKTtsZXQgcj1lLmNvcmVHcmFwaDttZS5lYWNoKHIubm9kZXMoKSxuPT57dmFyIGE7bGV0IGk9ci5ub2RlKG4pLG89KGE9ci5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDphLmxlbmd0aDtpZihpLm5vZGUuaW5jbHVkZT09PXVyLlVOU1BFQ0lGSUVEJiZvPT09MCl7bGV0IHM9aS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLGw9aS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7aS5pc0luRXh0cmFjdD8oZS5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGkpLGkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsci5yZW1vdmVOb2RlKG4pKTppLmlzT3V0RXh0cmFjdD8oZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSk6WG8uZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGUmJihzJiYhbD8oaS5pc0luRXh0cmFjdD0hMCxlLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goaSksaS5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERSxyLnJlbW92ZU5vZGUobikpOmwmJiFzJiYoaS5pc091dEV4dHJhY3Q9ITAsZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSkpfX0pfWZ1bmN0aW9uIHhsZShlLHQscil7bGV0IG49ci5zcGxpdCgiLyIpLGk9bltuLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsoaT09bnVsbD92b2lkIDA6aS5sZW5ndGgpPT09MiYmKG5bbi5sZW5ndGgtMV09aT09bnVsbD92b2lkIDA6aVsxXSk7bGV0IG89blswXSxhPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IHM9MTtzPG4ubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWp0Lk9QO3MrKyl0LmJ1aWxkU3ViaGllcmFyY2h5KG8pLGEuZXhwYW5kZWQ9ITAsZS5zZXROb2RlRXhwYW5kZWQoYSksbys9Ii8iK25bc10sYT10LmdldFJlbmRlck5vZGVCeU5hbWUobyk7cmV0dXJuIGEubm9kZS5uYW1lfXZhciBNbGU9RWUoT2x0KCksMSksWmU9RWUoT2UoKSwxKTt2YXIgVHI9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0scGFkZGluZzp7cGFkZGluZ1RvcDo0MCxwYWRkaW5nTGVmdDoyMH19LHN1YnNjZW5lOnttZXRhOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjIwLGV4dHJhY3RYT2Zmc2V0OjE1LGV4dHJhY3RZT2Zmc2V0OjIwfSxzZXJpZXM6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MTB9fSxub2RlU2l6ZTp7bWV0YTp7cmFkaXVzOjUsd2lkdGg6NjAsbWF4TGFiZWxXaWR0aDo1MixoZWlnaHQ6T24oKS5kb21haW4oWzEsMjAwXSkucmFuZ2UoWzE1LDYwXSkuY2xhbXAoITApLGV4cGFuZEJ1dHRvblJhZGl1czozfSxvcDp7d2lkdGg6MTUsaGVpZ2h0OjYscmFkaXVzOjMsbGFiZWxPZmZzZXQ6LTgsbWF4TGFiZWxXaWR0aDozMH0sc2VyaWVzOntleHBhbmRlZDp7cmFkaXVzOjEwLGxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDo0MH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19LG8zPTE0MDtmdW5jdGlvbiBNSChlKXtlLm5vZGUuaXNHcm91cE5vZGUmJkxjcihlKSxlLm5vZGUudHlwZT09PWp0Lk1FVEE/a2NyKGUpOmUubm9kZS50eXBlPT09anQuU0VSSUVTJiZSY3IoZSl9ZnVuY3Rpb24gSWNyKGUpe2UuaW5ib3hXaWR0aD1lLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9Uci5hbm5vdGF0aW9ucy5pbmJveFdpZHRoOjAsZS5vdXRib3hXaWR0aD1lLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/VHIuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCxlLmNvcmVCb3gud2lkdGg9ZS53aWR0aCxlLmNvcmVCb3guaGVpZ2h0PWUuaGVpZ2h0O2xldCB0PWUuZGlzcGxheU5hbWUubGVuZ3RoLHI9MztlLndpZHRoPU1hdGgubWF4KGUuY29yZUJveC53aWR0aCtlLmluYm94V2lkdGgrZS5vdXRib3hXaWR0aCx0KnIpfWZ1bmN0aW9uIExjcihlKXtsZXQgdD1lLmNvcmVHcmFwaC5ub2RlcygpLm1hcChyPT5lLmNvcmVHcmFwaC5ub2RlKHIpKS5jb25jYXQoZS5pc29sYXRlZEluRXh0cmFjdCxlLmlzb2xhdGVkT3V0RXh0cmFjdCxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtaZS5lYWNoKHQscj0+e3N3aXRjaChyLm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpaZS5leHRlbmQocixUci5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqdC5CUklER0U6WmUuZXh0ZW5kKHIsVHIubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIGp0Lk1FVEE6ci5leHBhbmRlZD9NSChyKTooWmUuZXh0ZW5kKHIsVHIubm9kZVNpemUubWV0YSksci5oZWlnaHQ9VHIubm9kZVNpemUubWV0YS5oZWlnaHQoci5ub2RlLmNhcmRpbmFsaXR5KSk7YnJlYWs7Y2FzZSBqdC5TRVJJRVM6aWYoci5leHBhbmRlZClaZS5leHRlbmQocixUci5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLE1IKHIpO2Vsc2V7bGV0IGk9ci5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz9Uci5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6VHIubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWw7WmUuZXh0ZW5kKHIsaSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIityLm5vZGUudHlwZSl9ci5leHBhbmRlZHx8SWNyKHIpLE5jcihyKX0pfWZ1bmN0aW9uIEVsZShlLHQpe1plLmV4dGVuZChlLmdyYXBoKCkse25vZGVzZXA6dC5ub2RlU2VwLHJhbmtzZXA6dC5yYW5rU2VwLGVkZ2VzZXA6dC5lZGdlU2VwfSk7bGV0IHI9W10sbj1bXTtpZihaZS5lYWNoKGUubm9kZXMoKSxsPT57ZS5ub2RlKGwpLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnB1c2gobCk6bi5wdXNoKGwpfSksIW4ubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtNbGUubGF5b3V0KGUpO2xldCBpPTEvMCxvPTEvMCxhPS0xLzAscz0tMS8wO3JldHVybiBaZS5lYWNoKG4sbD0+e2xldCBjPWUubm9kZShsKSx1PS41KmMud2lkdGgsaD1jLngtdSxmPWMueCt1O2k9aDxpP2g6aSxhPWY+YT9mOmE7bGV0IHA9LjUqYy5oZWlnaHQsZD1jLnktcCxnPWMueStwO289ZDxvP2Q6byxzPWc+cz9nOnN9KSxaZS5lYWNoKGUuZWRnZXMoKSxsPT57bGV0IGM9ZS5lZGdlKGwpO2lmKGMuc3RydWN0dXJhbClyZXR1cm47bGV0IHU9ZS5ub2RlKGMubWV0YWVkZ2UudiksaD1lLm5vZGUoYy5tZXRhZWRnZS53KTtpZihjLnBvaW50cy5sZW5ndGg9PT0zJiZEY3IoYy5wb2ludHMpKXtpZih1IT1udWxsKXtsZXQgZD11LmV4cGFuZGVkP3UueDp2MCh1KTtjLnBvaW50c1swXS54PWR9aWYoaCE9bnVsbCl7bGV0IGQ9aC5leHBhbmRlZD9oLng6djAoaCk7Yy5wb2ludHNbMl0ueD1kfWMucG9pbnRzPVtjLnBvaW50c1swXSxjLnBvaW50c1sxXV19bGV0IGY9Yy5wb2ludHNbYy5wb2ludHMubGVuZ3RoLTJdO2ghPW51bGwmJihjLnBvaW50c1tjLnBvaW50cy5sZW5ndGgtMV09U2xlKGYsaCkpO2xldCBwPWMucG9pbnRzWzFdO3UhPW51bGwmJihjLnBvaW50c1swXT1TbGUocCx1KSksWmUuZWFjaChjLnBvaW50cyxkPT57aT1kLng8aT9kLng6aSxhPWQueD5hP2QueDphLG89ZC55PG8/ZC55Om8scz1kLnk+cz9kLnk6c30pfSksWmUuZWFjaChlLm5vZGVzKCksbD0+e2xldCBjPWUubm9kZShsKTtjLngtPWksYy55LT1vfSksWmUuZWFjaChlLmVkZ2VzKCksbD0+e1plLmVhY2goZS5lZGdlKGwpLnBvaW50cyxjPT57Yy54LT1pLGMueS09b30pfSkse3dpZHRoOmEtaSxoZWlnaHQ6cy1vfX1mdW5jdGlvbiBrY3IoZSl7bGV0IHQ9VHIuc3Vic2NlbmUubWV0YTtaZS5leHRlbmQoZSx0KSxaZS5leHRlbmQoZS5jb3JlQm94LEVsZShlLmNvcmVHcmFwaCxUci5ncmFwaC5tZXRhKSk7bGV0IHI9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/WmUubWF4QnkoZS5pc29sYXRlZEluRXh0cmFjdCxjPT5jLndpZHRoKS53aWR0aDpudWxsO2UuaW5FeHRyYWN0Qm94LndpZHRoPXIhPW51bGw/cjowLGUuaW5FeHRyYWN0Qm94LmhlaWdodD1aZS5yZWR1Y2UoZS5pc29sYXRlZEluRXh0cmFjdCwoYyx1LGgpPT57bGV0IGY9aD4wP3QuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gdS54PTAsdS55PWMrZit1LmhlaWdodC8yLGMrZit1LmhlaWdodH0sMCk7bGV0IG49ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1plLm1heEJ5KGUuaXNvbGF0ZWRPdXRFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5vdXRFeHRyYWN0Qm94LndpZHRoPW4hPW51bGw/bjowLGUub3V0RXh0cmFjdEJveC5oZWlnaHQ9WmUucmVkdWNlKGUuaXNvbGF0ZWRPdXRFeHRyYWN0LChjLHUsaCk9PntsZXQgZj1oPjA/dC5leHRyYWN0WU9mZnNldDowO3JldHVybiB1Lng9MCx1Lnk9YytmK3UuaGVpZ2h0LzIsYytmK3UuaGVpZ2h0fSwwKTtsZXQgaT1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9aZS5tYXhCeShlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPWkhPW51bGw/aTowLGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9WmUucmVkdWNlKGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsKGMsdSxoKT0+e2xldCBmPWg+MD90LmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIHUueD0wLHUueT1jK2YrdS5oZWlnaHQvMixjK2YrdS5oZWlnaHR9LDApO2xldCBvPTA7ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wJiZvKyssZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuY29yZUdyYXBoLm5vZGVDb3VudCgpPjAmJm8rKztsZXQgYT1Uci5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9bzw9MT8wOm8qYSxsPU1hdGgubWF4KG8zLGUuaW5FeHRyYWN0Qm94LndpZHRoK2Uub3V0RXh0cmFjdEJveC53aWR0aCk7ZS5jb3JlQm94LndpZHRoKz1sK3MrZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK3MsZS5jb3JlQm94LmhlaWdodD10LmxhYmVsSGVpZ2h0K01hdGgubWF4KGUuaW5FeHRyYWN0Qm94LmhlaWdodCxlLmNvcmVCb3guaGVpZ2h0LGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsZS5vdXRFeHRyYWN0Qm94LmhlaWdodCksZS53aWR0aD1lLmNvcmVCb3gud2lkdGgrdC5wYWRkaW5nTGVmdCt0LnBhZGRpbmdSaWdodCxlLmhlaWdodD1lLnBhZGRpbmdUb3ArZS5jb3JlQm94LmhlaWdodCtlLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gUmNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9VHIuc3Vic2NlbmUuc2VyaWVzO1plLmV4dGVuZChlLHIpLFplLmV4dGVuZChlLmNvcmVCb3gsRWxlKGUuY29yZUdyYXBoLFRyLmdyYXBoLnNlcmllcykpLFplLmVhY2godC5ub2RlcygpLG49Pnt0Lm5vZGUobikuZXhjbHVkZWQ9ITF9KSxlLndpZHRoPWUuY29yZUJveC53aWR0aCtyLnBhZGRpbmdMZWZ0K3IucGFkZGluZ1JpZ2h0LGUuaGVpZ2h0PWUuY29yZUJveC5oZWlnaHQrci5wYWRkaW5nVG9wK3IucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBOY3IoZSl7aWYoZS5leHBhbmRlZClyZXR1cm47bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3Qscj1lLm91dEFubm90YXRpb25zLmxpc3Q7WmUuZWFjaCh0LHU9PmJsZSh1KSksWmUuZWFjaChyLHU9PmJsZSh1KSk7bGV0IG49VHIuYW5ub3RhdGlvbnMsaT1aZS5yZWR1Y2UodCwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PS0oZS5jb3JlQm94LndpZHRoK2gud2lkdGgpLzItbi54T2Zmc2V0LGguZHk9dStwK2guaGVpZ2h0LzIsdStwK2guaGVpZ2h0fSwwKTtaZS5lYWNoKHQsdT0+e3UuZHktPWkvMix1LmxhYmVsT2Zmc2V0PW4ubGFiZWxPZmZzZXR9KTtsZXQgbz1aZS5yZWR1Y2UociwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PShlLmNvcmVCb3gud2lkdGgraC53aWR0aCkvMituLnhPZmZzZXQsaC5keT11K3AraC5oZWlnaHQvMix1K3AraC5oZWlnaHR9LDApO1plLmVhY2gocix1PT57dS5keS09by8yLHUubGFiZWxPZmZzZXQ9bi5sYWJlbE9mZnNldH0pO2xldCBhPU1hdGgubWluKGUuaGVpZ2h0LzItZS5yYWRpdXMsaS8yKTthPWE8MD8wOmE7bGV0IHM9T24oKS5kb21haW4oWzAsdC5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7WmUuZWFjaCh0LCh1LGgpPT57dS5wb2ludHM9W3tkeDp1LmR4K3Uud2lkdGgvMixkeTp1LmR5fSx7ZHg6LWUuY29yZUJveC53aWR0aC8yLGR5OnQubGVuZ3RoPjE/cyhoKTowfV19KTtsZXQgbD1NYXRoLm1pbihlLmhlaWdodC8yLWUucmFkaXVzLG8vMik7bD1sPDA/MDpsO2xldCBjPU9uKCkuZG9tYWluKFswLHIubGVuZ3RoLTFdKS5yYW5nZShbLWwsbF0pO1plLmVhY2gociwodSxoKT0+e3UucG9pbnRzPVt7ZHg6ZS5jb3JlQm94LndpZHRoLzIsZHk6ci5sZW5ndGg+MT9jKGgpOjB9LHtkeDp1LmR4LXUud2lkdGgvMixkeTp1LmR5fV19KSxlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCxpLG8pfWZ1bmN0aW9uIGJsZShlKXtzd2l0Y2goZS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBnaS5DT05TVEFOVDpaZS5leHRlbmQoZSxUci5jb25zdGFudC5zaXplKTticmVhaztjYXNlIGdpLlNIT1JUQ1VUOmlmKGUubm9kZS50eXBlPT09anQuT1ApWmUuZXh0ZW5kKGUsVHIuc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKGUubm9kZS50eXBlPT09anQuTUVUQSlaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZihlLm5vZGUudHlwZT09PWp0LlNFUklFUylaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBnaS5TVU1NQVJZOlplLmV4dGVuZChlLFRyLmNvbnN0YW50LnNpemUpO2JyZWFrfX1mdW5jdGlvbiB2MChlKXtpZihlLmV4cGFuZGVkKXJldHVybiBlLng7bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2UuaW5ib3hXaWR0aDowO3JldHVybiBlLngtZS53aWR0aC8yK3QrZS5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24gd2xlKGUsdCl7bGV0IHI9dC54LWUueCxuPXQueS1lLnk7cmV0dXJuIDE4MCpNYXRoLmF0YW4obi9yKS9NYXRoLlBJfWZ1bmN0aW9uIERjcihlKXtsZXQgdD13bGUoZVswXSxlWzFdKTtmb3IobGV0IHI9MTtyPGUubGVuZ3RoLTE7cisrKXtsZXQgbj13bGUoZVtyXSxlW3IrMV0pO2lmKE1hdGguYWJzKG4tdCk+MSlyZXR1cm4hMTt0PW59cmV0dXJuITB9ZnVuY3Rpb24gU2xlKGUsdCl7bGV0IHI9dC5leHBhbmRlZD90Lng6djAodCksbj10LnksaT1lLngtcixvPWUueS1uLGE9dC5leHBhbmRlZD90LndpZHRoOnQuY29yZUJveC53aWR0aCxzPXQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCxsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmEvMj5NYXRoLmFicyhpKSpzLzI/KG88MCYmKHM9LXMpLGw9bz09PTA/MDpzLzIqaS9vLGM9cy8yKTooaTwwJiYoYT0tYSksbD1hLzIsYz1pPT09MD8wOmEvMipvL2kpLHt4OnIrbCx5Om4rY319dmFyIFBsPW0wLEhpPXZlLE9jcj0zMjAsemNyPTE1MCxmUD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMUUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMUUifV07ZnVuY3Rpb24gQ2xlKGUsdCxyLG4pe2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1udWxsO3RyeXtpZihvPXQuZ2V0QkJveCgpLChvPT1udWxsP3ZvaWQgMDpvLndpZHRoKT09PTApcmV0dXJufWNhdGNoKGMpe3JldHVybn1sZXQgYT0uOSpNYXRoLm1pbihpLndpZHRoLyhvPT1udWxsP3ZvaWQgMDpvLndpZHRoKSxpLmhlaWdodC8obz09bnVsbD92b2lkIDA6by5oZWlnaHQpLDIpLHM9VHIuZ3JhcGgsbD1YaC5zY2FsZShhKS50cmFuc2xhdGUocy5wYWRkaW5nLnBhZGRpbmdMZWZ0LHMucGFkZGluZy5wYWRkaW5nVG9wKTtIdChlKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHIudHJhbnNmb3JtLGwpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Iub24oImVuZC5maXR0ZWQiLG51bGwpLG4oKX0pfWZ1bmN0aW9uIEFsZShlLHQscixuKXtsZXQgaT1IdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7ZX0iXWApLm5vZGUoKTtpZighaSlyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtlfSJgKSwhMTtsZXQgbz1pLmdldEJCb3goKSxhPWkuZ2V0U2NyZWVuQ1RNKCkscz10LmNyZWF0ZVNWR1BvaW50KCksbD10LmNyZWF0ZVNWR1BvaW50KCk7cy54PW8ueCxzLnk9by55LGwueD1vLngrby53aWR0aCxsLnk9by55K28uaGVpZ2h0LHM9cy5tYXRyaXhUcmFuc2Zvcm0oYSksbD1sLm1hdHJpeFRyYW5zZm9ybShhKTtsZXQgYz0ocCxkLGcsXyk9PiEocD5nJiZkPF8pLHU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXUubGVmdCt1LndpZHRoLU9jcixmPXUudG9wK3UuaGVpZ2h0LXpjcjtpZihjKHMueCxsLngsdS5sZWZ0LGgpfHxjKHMueSxsLnksdS50b3AsZikpe2xldCBwPShzLngrbC54KS8yLGQ9KHMueStsLnkpLzIsZz11LmxlZnQrdS53aWR0aC8yLXAsXz11LnRvcCt1LmhlaWdodC8yLWQseT1pMih0KTtyZXR1cm4gSHQodCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChuLnRyYW5zbGF0ZUJ5LGcveS5rLF8veS5rKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBQbGUoZSx0KXtsZXQgcj10Lm5vZGUudHlwZT09PWp0LlNFUklFUz8wOlRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7YTMoUGwoZSwiZyIsSGkuU2NlbmUuQ09SRSksMCxyKTtsZXQgbj10Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9VHIuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxzPTA7aWYobiYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksaSYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksbil7bGV0IGw9dC5jb3JlQm94LndpZHRoO3M8bzM/bD1sLW8zK3QuaW5FeHRyYWN0Qm94LndpZHRoLzI6bD1sLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLShpP2E6MCksbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLklORVhUUkFDVCksbCxyKX1pZihpKXtsZXQgbD10LmNvcmVCb3gud2lkdGg7czxvMz9sPWwtbzMrdC5vdXRFeHRyYWN0Qm94LndpZHRoLzI6bC09dC5vdXRFeHRyYWN0Qm94LndpZHRoLzIsbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLk9VVEVYVFJBQ1QpLGwscil9aWYobyl7bGV0IGw9dC5jb3JlQm94LndpZHRoLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2EzKFBsKGUsImciLEhpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGwscil9fWZ1bmN0aW9uIElsZShlLHQpe0h0KGUpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9ZnVuY3Rpb24gYTMoZSx0LHIpe2UuYXR0cigidHJhbnNmb3JtIikhPW51bGwmJihlPWUudHJhbnNpdGlvbigicG9zaXRpb24iKSksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIil9ZnVuY3Rpb24gemQoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LW4vMikuYXR0cigieSIsci1pLzIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLGkpfWZ1bmN0aW9uIExsZShlLHQscixuLGkpe2xldCBvPWkvMixhPW4vMixzPVtbdCxyLW9dLFt0K2EscitvXSxbdC1hLHIrb11dO2UudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIscy5tYXAobD0+bC5qb2luKCIsIikpLmpvaW4oIiAiKSl9ZnVuY3Rpb24ga2xlKGUsdCl7bGV0IHI9djAodCksbj10LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoLGk9dC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0LG89cituLzItNixhPXQueS1pLzIrNjt0Lm5vZGUudHlwZT09PWp0LlNFUklFUyYmIXQuZXhwYW5kZWQmJihvKz0xMCxhLT0yKTtsZXQgcz0idHJhbnNsYXRlKCIrbysiLCIrYSsiKSI7ZS5zZWxlY3RBbGwoInBhdGgiKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixzKSxlLnNlbGVjdCgiY2lyY2xlIikudHJhbnNpdGlvbigpLmF0dHIoe2N4Om8sY3k6YSxyOlRyLm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9ZnVuY3Rpb24gRUgoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsdCkuYXR0cigiY3kiLHIpLmF0dHIoInJ4IixuLzIpLmF0dHIoInJ5IixpLzIpfWZ1bmN0aW9uIFRsZShlLHQpe3JldHVybiB0P2UudG9GaXhlZCgwKTpNYXRoLmFicyhlKT49MT9lLnRvRml4ZWQoMSk6ZS50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIEZjcihlLHQscixuKXtsZXQgaT0iRGV2aWNlOiAiK2UuZGV2aWNlX25hbWUrYApgO2krPSJkdHlwZTogIitlLmR0eXBlK2AKYDtsZXQgbz0iKHNjYWxhcikiO2Uuc2hhcGUubGVuZ3RoPjAmJihvPSIoIitlLnNoYXBlLmpvaW4oIiwiKSsiKSIpLGkrPWAKc2hhcGU6IGArbytgCgpgLGkrPSIjKGVsZW1lbnRzKTogIit0K2AKYDtsZXQgYT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdPjAmJmEucHVzaCgiIygiK2ZQW3NdLmxhYmVsKyIpOiAiK3Jbc10pO3JldHVybiBpKz1hLmpvaW4oIiwgIikrYAoKYCxuLm1heD49bi5taW4mJihpKz0ibWluOiAiK24ubWluKyIsIG1heDogIituLm1heCtgCmAsaSs9Im1lYW46ICIrbi5tZWFuKyIsIHN0ZGRldjogIituLnN0ZGRldiksaX1mdW5jdGlvbiBCY3IoZSx0LHIsbixpPTYwLG89MTAsYT0wLHMpe2lmKEh0KGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhdClyZXR1cm47bGV0IGw9dC52YWx1ZSxjPWwuc2xpY2UoMiw4KSx1PWNbMF0saD1jWzFdLGY9Y1s1XSxwPWxbMV0sZD17bWluOmxbOF0sbWF4OmxbOV0sbWVhbjpsWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGxbMTFdKX07aT09bnVsbCYmKGk9NjApLG89PW51bGwmJihvPTEwKSxhPT1udWxsJiYoYT0wKSxyIT1udWxsJiZyLm5vZGUudHlwZT09PWp0Lk9QJiYoaS89MixvLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImciKTtnLmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsIik7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImxpbmVhckdyYWRpZW50IikseD0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIituO3kuc2V0QXR0cmlidXRlKCJpZCIseCk7bGV0IGI9MCxTPSIwJSI7Zm9yKGxldCBEPTA7RDxjLmxlbmd0aDtEKyspe2lmKCFjW0RdKWNvbnRpbnVlO2IrPWNbRF07bGV0IEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIik7Qi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsUyksQi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGZQW0RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoQik7bGV0IEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIiksTD1iKjEwMC9wKyIlIjtJLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixMKSxJLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsZlBbRF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChJKSxTPUx9Xy5hcHBlbmRDaGlsZCh5KTtsZXQgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit4KyIpIiksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcoaSkpLEMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhvKSksQy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhhKSksZy5hcHBlbmRDaGlsZChDKTtsZXQgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInRpdGxlIik7UC50ZXh0Q29udGVudD1GY3IodCxwLGMsZCksZy5hcHBlbmRDaGlsZChQKTtsZXQgaz0hMTtpZihyIT1udWxsKXtsZXQgRD1yLngtaS8yLEI9ci55LW8tci5oZWlnaHQvMi0yO2lmKHIubGFiZWxPZmZzZXQ8MCYmKEIrPXIubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsICIrQisiKSIpLGNbMl18fGNbM118fGNbNF0pe2xldCBMPXIubm9kZS5hdHRyO2lmKEwmJkwubGVuZ3RoKXtmb3IobGV0IFI9MDtSPEwubGVuZ3RoO1IrKylpZihMW1JdLmtleT09PSJUIil7bGV0IEY9TFtSXS52YWx1ZS50eXBlO2s9RiYmL15EVF8oQk9PTHxJTlR8VUlOVCkvLnRlc3QoRik7YnJlYWt9fX19bGV0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJ0ZXh0Iik7aWYoTnVtYmVyLmlzRmluaXRlKGQubWluKSYmTnVtYmVyLmlzRmluaXRlKGQubWF4KSl7bGV0IEQ9VGxlKGQubWluLGspLEI9VGxlKGQubWF4LGspO2lmKHA+MT9PLnRleHRDb250ZW50PUQrIiB+ICIrQjpPLnRleHRDb250ZW50PUQsdT4wfHxoPjB8fGY+MCl7Ty50ZXh0Q29udGVudCs9IiAoIjtsZXQgST1bXTt1PjAmJkkucHVzaChgTmFOXHhENyR7dX1gKSxoPjAmJkkucHVzaChgLVx1MjIxRVx4RDcke2h9YCksZj4wJiZJLnB1c2goYCtcdTIyMUVceEQ3JHtmfWApLE8udGV4dENvbnRlbnQrPUkuam9pbigiOyAiKSsiKSJ9fWVsc2UgTy50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO08uY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxzPT1udWxsJiYocz1pLzIpLE8uc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcocykpLE8uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoYS0yKSksZy5hcHBlbmRDaGlsZChPKSx6dChlLnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfWZ1bmN0aW9uIFJsZShlLHQscil7aWYoIXQpcmV0dXJuO2xldCBuPTE7SHQoZSkuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24obyl7bGV0IGE9dFtvLm5vZGUubmFtZV0scz1hP2Fbcl06bnVsbDtCY3IodGhpcyxzLG8sbisrKX0pfXZhciBxbjsoZnVuY3Rpb24oZSl7ZS5OT05FPSJub25lIixlLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIixlLkRFVklDRT0iZGV2aWNlIixlLk1FTU9SWT0ibWVtb3J5IixlLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLGUuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLGUuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKHFufHwocW49e30pKTt2YXIgbVA9RWUoT2UoKSwxKTt2YXIgVmk9RWUoT2UoKSwxKTtmdW5jdGlvbiBIY3IoZSl7bGV0IHQ9MCxyPTAsbj1lO2Zvcig7biYmbi5vZmZzZXRMZWZ0Pj0wJiZuLm9mZnNldFRvcD49MDspdCs9bi5vZmZzZXRMZWZ0LW4uc2Nyb2xsTGVmdCxyKz1uLm9mZnNldFRvcC1uLnNjcm9sbFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OnQsdG9wOnJ9fWZ1bmN0aW9uIFdsdChlLHQpe2xldCByPWUuZ2V0Q29udGV4dE1lbnUoKSxuPUh0KGUuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7bGV0IGE9cXQscz1IY3IoZSk7bi5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikuc3R5bGUoImxlZnQiLGEuY2xpZW50WC1zLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIixhLmNsaWVudFktcy50b3ArMSsicHgiKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTtmdW5jdGlvbiBsKHUpe3UmJnUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMocil8fChuLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSkpfWRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSksbi50ZXh0KCIiKSxuLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCh1LGgpPT57dS5hY3Rpb24odGhpcyxpLG8pLGwoKX0pLnRleHQoZnVuY3Rpb24odSl7cmV0dXJuIHUudGl0bGUoaSl9KX19dmFyIEFIPUVlKE9lKCksMSk7dmFyIFVjcj0iXHhENyIsTmxlPXFiKCkuZG9tYWluKFtRNCx0UF0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKSxxY3I9Mi41O2Z1bmN0aW9uIHBQKGUpe3JldHVybiBlLnYrb2xlK2Uud31mdW5jdGlvbiB6bGUoZSx0LHIpe2xldCBuPXIsaT1bXTtpPUFILnJlZHVjZSh0LmVkZ2VzKCksKHMsbCk9PntsZXQgYz10LmVkZ2UobCk7cmV0dXJuIHMucHVzaCh7djpsLnYsdzpsLncsbGFiZWw6Y30pLHN9LGkpO2xldCBhPUFuKGUsImciLHZlLkVkZ2UuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShpLHBQKTtyZXR1cm4gYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix2ZS5FZGdlLkdST1VQKS5hdHRyKCJkYXRhLWVkZ2UiLHBQKS5lYWNoKGZ1bmN0aW9uKHMpe2xldCBsPUh0KHRoaXMpO3MubGFiZWwuZWRnZUdyb3VwPWwsbi5fZWRnZUdyb3VwSW5kZXhbcFAocyldPWwsbi5oYW5kbGVFZGdlU2VsZWN0ZWQmJmwub24oImNsaWNrIixjPT57cXQuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOmMsZWRnZUdyb3VwOmx9KX0pLFhsdChsLHMsbil9KS5tZXJnZShhKS5lYWNoKGZ1bmN0aW9uKCl7V2NyKHIsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKHMpe1ljcihIdCh0aGlzKSxzLG4pfSksYS5leGl0KCkuZWFjaChzPT57ZGVsZXRlIG4uX2VkZ2VHcm91cEluZGV4W3BQKHMpXX0pLnJlbW92ZSgpLGF9ZnVuY3Rpb24gWWx0KGUsdCl7bGV0IHI9dC5nZXROb2RlQnlOYW1lKGUudik7aWYoci5vdXRwdXRTaGFwZXM9PW51bGx8fEFILmlzRW1wdHkoci5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBuPXIub3V0cHV0U2hhcGVzW2Uub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbj09bnVsbD9udWxsOm4ubGVuZ3RoPT09MD8ic2NhbGFyIjpuLm1hcChpPT5pPT09LTE/Ij8iOmkpLmpvaW4oVWNyKX1mdW5jdGlvbiBqbHQoZSx0KXtyZXR1cm4gdC5lZGdlTGFiZWxGdW5jdGlvbj90LmVkZ2VMYWJlbEZ1bmN0aW9uKGUsdCk6ZS5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/ZS5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6WWx0KGUuYmFzZUVkZ2VMaXN0WzBdLHQpfWZ1bmN0aW9uIERsZShlLHQscil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJwYXRoIik7Zm9yKGxldCBpPTE7aTxlLmxlbmd0aDtpKyspaWYobi5zZXRBdHRyaWJ1dGUoImQiLHIoZS5zbGljZSgwLGkpKSksbi5nZXRUb3RhbExlbmd0aCgpPnQpcmV0dXJuIGktMTtyZXR1cm4gZS5sZW5ndGgtMX1mdW5jdGlvbiBPbGUoZSx0LHIpe2xldCBuPXZ1KCkueCh1PT51LngpLnkodT0+dS55KSxpPUh0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLG4oZSkpLG89K3QuYXR0cigibWFya2VyV2lkdGgiKSxhPXQuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rdC5hdHRyKCJyZWZYIiksYz1pLm5vZGUoKTtpZihyKXtsZXQgdT0xLWwvcyxoPW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPURsZShlLGgsbik7cmV0dXJuIGVbcC0xXT17eDpmLngseTpmLnl9LGUuc2xpY2UocC0xKX1lbHNle2xldCB1PTEtbC9zLGg9Yy5nZXRUb3RhbExlbmd0aCgpLW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPURsZShlLGgsbik7cmV0dXJuIGVbcF09e3g6Zi54LHk6Zi55fSxlLnNsaWNlKDAscCsxKX19ZnVuY3Rpb24gWGx0KGUsdCxyLG4pe249bnx8dmUuRWRnZS5MSU5FLHQubGFiZWwmJnQubGFiZWwuc3RydWN0dXJhbCYmKG4rPSIgIit2ZS5FZGdlLlNUUlVDVFVSQUwpLHQubGFiZWwmJnQubGFiZWwubWV0YWVkZ2UmJnQubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihuKz0iICIrdmUuRWRnZS5SRUZFUkVOQ0VfRURHRSksci5oYW5kbGVFZGdlU2VsZWN0ZWQmJihuKz0iICIrdmUuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgaT0icGF0aF8iK3BQKHQpLG87aWYoci5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih0LG4pO2Vsc2V7bGV0IGM9MTt0LmxhYmVsIT1udWxsJiZ0LmxhYmVsLm1ldGFlZGdlIT1udWxsJiYoYz10LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoYyl9bGV0IGE9ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsaSkuYXR0cigiY2xhc3MiLG4pLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4Iik7aWYodC5sYWJlbCYmdC5sYWJlbC5tZXRhZWRnZSlpZih0LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtsZXQgYz1gcmVmZXJlbmNlLWFycm93aGVhZC0ke05sZShvKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtjfSlgKSx0LmxhYmVsLnN0YXJ0TWFya2VySWQ9Y31lbHNle2xldCBjPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHtObGUobyl9YDthLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2N9KWApLHQubGFiZWwuZW5kTWFya2VySWQ9Y31pZih0LmxhYmVsPT1udWxsfHx0LmxhYmVsLm1ldGFlZGdlPT1udWxsKXJldHVybjtsZXQgcz1qbHQodC5sYWJlbC5tZXRhZWRnZSxyLnJlbmRlckhpZXJhcmNoeSk7aWYocz09bnVsbClyZXR1cm47bGV0IGw9bz5xY3I/ImNlbnRyYWwiOiJ0ZXh0LWFmdGVyLWVkZ2UiO2UuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitpKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX12YXIgQ0g9dnUoKS5jdXJ2ZShXOCkueChlPT5lLngpLnkoZT0+ZS55KTtmdW5jdGlvbiBHY3IoZSx0LHIsbixpKXtsZXQgbz1yLmxhYmVsLGE9by5hZGpvaW5pbmdNZXRhZWRnZSxzPW8ucG9pbnRzLHtzaGFkb3dSb290Omx9PWU7aWYoci5sYWJlbC5zdGFydE1hcmtlcklkJiYocz1PbGUocyxIdChsPT1udWxsP3ZvaWQgMDpsLnF1ZXJ5U2VsZWN0b3IoIiMiK3IubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksci5sYWJlbC5lbmRNYXJrZXJJZCYmKHM9T2xlKHMsSHQobD09bnVsbD92b2lkIDA6bC5xdWVyeVNlbGVjdG9yKCIjIityLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhYSlyZXR1cm4gbmMoaSxDSChzKSk7bGV0IGM9YS5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsdT1vLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBnO2xldCBmPWMuZ2V0UG9pbnRBdExlbmd0aCh1P2MuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oYy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKChnPXQuZ2V0Q1RNKCkpPT1udWxsP3ZvaWQgMDpnLmludmVyc2UoKSkscD11PzA6cy5sZW5ndGgtMTtyZXR1cm4gc1twXS54PWYueCxzW3BdLnk9Zi55LENIKHMpfX1mdW5jdGlvbiBXY3IoZSx0KXtIdCh0KS5zZWxlY3QoInBhdGguIit2ZS5FZGdlLkxJTkUpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gR2NyKGUsdGhpcyxyLG4saSl9KX1mdW5jdGlvbiBZY3IoZSx0LHIpe2UuY2xhc3NlZCgiZmFkZWQiLHQubGFiZWwuaXNGYWRlZE91dCk7bGV0IG49dC5sYWJlbC5tZXRhZWRnZTtlLnNlbGVjdCgicGF0aC4iK3ZlLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLG4mJiFuLm51bVJlZ3VsYXJFZGdlcyl9ZnVuY3Rpb24gUEgoZSx0LHIpe2xldCBpPUFuKGUsImciLHZlLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0LG89Pm8ubm9kZS5uYW1lKyI6IitvLm5vZGUudHlwZSk7cmV0dXJuIGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLG89Pm8ubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKG8pe2xldCBhPUh0KHRoaXMpO3IuYWRkTm9kZUdyb3VwKG8ubm9kZS5uYW1lLGEpfSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLG89PnZlLk5vZGUuR1JPVVArIiAiK1dsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKSxzPUFuKGEsImciLHZlLkFubm90YXRpb24uSU5CT1gpO1ZsZShzLG8uaW5Bbm5vdGF0aW9ucyxvLHIpO2xldCBsPUFuKGEsImciLHZlLkFubm90YXRpb24uT1VUQk9YKTtWbGUobCxvLm91dEFubm90YXRpb25zLG8scik7bGV0IGM9R2xlKGEsbyx2ZS5Ob2RlLlNIQVBFKTtvLm5vZGUuaXNHcm91cE5vZGUmJlhjcihjLG8sciksSGxlKGMsbyxyKSxqY3IoYSxvLHIpO2xldCB1PUtjcihhLG8scik7SGxlKHUsbyxyLG8ubm9kZS50eXBlPT09anQuTUVUQSksczMoYSxvLHIpLEpjcihhLG8pfSksaS5leGl0KCkuZWFjaChmdW5jdGlvbihvKXtyLnJlbW92ZU5vZGVHcm91cChvLm5vZGUubmFtZSk7bGV0IGE9SHQodGhpcyk7by5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLklOQk9YKS5zZWxlY3RBbGwoIi4iK3ZlLkFubm90YXRpb24uR1JPVVApLmVhY2gocz0+e3IucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHMsbyl9KSxvLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIit2ZS5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHM9PntyLnJlbW92ZUFubm90YXRpb25Hcm91cChzLG8pfSl9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIGpjcihlLHQscil7aWYodC5ub2RlLmlzR3JvdXBOb2RlKXtpZih0LmV4cGFuZGVkKXJldHVybiBlY3QoZSx0LHIsdmUuU3Vic2NlbmUuR1JPVVApO1BsKGUsImciLHZlLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBCbGUoZSx0KXtsZXQgcj10LngtdC53aWR0aC8yK3QucGFkZGluZ0xlZnQsbj10LnktdC5oZWlnaHQvMit0LnBhZGRpbmdUb3AsaT1QbChlLCJnIix2ZS5TdWJzY2VuZS5HUk9VUCk7YTMoaSxyLG4pfWZ1bmN0aW9uIFhjcihlLHQscil7bGV0IG49QW4oZSwiZyIsdmUuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtBbihuLCJjaXJjbGUiLHZlLk5vZGUuQlVUVE9OX0NJUkNMRSksQW4obiwicGF0aCIsdmUuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpLEFuKG4sInBhdGgiLHZlLk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksbi5vbigiY2xpY2siLGk9PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6aS5ub2RlLm5hbWV9KX0pLGtsZShuLHQpfWZ1bmN0aW9uIEhsZShlLHQscixuKXtpZihuKXtlLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3JldHVybn1sZXQgaT1XbHQocixVbGUodC5ub2RlLHIpKTtlLm9uKCJkYmxjbGljayIsbz0+e3IuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3ZlciIsbz0+e3IuaXNOb2RlRXhwYW5kZWQobyl8fHIuZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLG89PntyLmlzTm9kZUV4cGFuZGVkKG8pfHxyLmZpcmUoIm5vZGUtdW5oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLG89PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oImNvbnRleHRtZW51IiwobyxhKT0+e3IuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOm8ubm9kZS5uYW1lfSksaS5jYWxsKG8sYSl9KX1mdW5jdGlvbiBVbGUoZSx0KXtsZXQgcj1be3RpdGxlOm49PnlIKGUuaW5jbHVkZSksYWN0aW9uOihuLGksbyk9Pnt0LmZpcmUoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHtuYW1lOmUubmFtZX0pfX1dO3JldHVybiB0Lm5vZGVDb250ZXh0TWVudUl0ZW1zJiYocj1yLmNvbmNhdCh0Lm5vZGVDb250ZXh0TWVudUl0ZW1zKSksSmx0KGUpJiZyLnB1c2goe3RpdGxlOm49PlFsdChlKSxhY3Rpb246KG4saSxvKT0+e3QuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOklIKGUpfSl9fSkscn1mdW5jdGlvbiBKbHQoZSl7cmV0dXJuIElIKGUpIT09bnVsbH1mdW5jdGlvbiBJSChlKXtyZXR1cm4gZT9lLnR5cGU9PT1qdC5TRVJJRVM/ZS5uYW1lOmUudHlwZT09PWp0Lk9QP2Uub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiAkY3IoZSl7bGV0IHQ9bnVsbDtpZihlKWUudHlwZT09PWp0LlNFUklFUz90PWU6ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUudHlwZT09PWp0LlNFUklFUyYmKHQ9ZS5wYXJlbnROb2RlKTtlbHNlIHJldHVybiBudWxsO3JldHVybiB0fWZ1bmN0aW9uIFFsdChlKXtyZXR1cm4gdWxlKCRjcihlKSE9PW51bGw/aXMuR1JPVVA6aXMuVU5HUk9VUCl9ZnVuY3Rpb24gS2NyKGUsdCxyKXt2YXIgYztsZXQgbj10LmRpc3BsYXlOYW1lLGk9dC5ub2RlLnR5cGU9PT1qdC5NRVRBJiYhdC5leHBhbmRlZCxvPUFuKGUsInRleHQiLHZlLk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7KGM9YS5wYXJlbnROb2RlKT09bnVsbHx8Yy5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGp0Lk1FVEE6cz10LmV4cGFuZGVkP0o0Lk5vZGUuRVhQQU5ERURfTEFCRUw6SjQuTm9kZS5TRVJJRVNfTEFCRUw7YnJlYWs7Y2FzZSBqdC5PUDpzPUo0Lk5vZGUuT1BfTEFCRUw7YnJlYWt9aWYoaSl7bi5sZW5ndGg+ci5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYobj1uLnN1YnN0cigwLHIubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsiXHUyMDI2Iik7bGV0IHU9WmNyKHIpO28uYXR0cigiZm9udC1zaXplIix1KG4ubGVuZ3RoKSsicHgiKSxzPXUobi5sZW5ndGgpfWxldCBsPW8udGV4dChuKTtyZXR1cm4gcWxlKGwsdC5ub2RlLnR5cGUscyx0KSxvfWZ1bmN0aW9uIHFsZShlLHQscixuKXtsZXQgaT1lLm5vZGUoKSxvPWkudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaCh0KXtjYXNlIGp0Lk1FVEE6biYmIW4uZXhwYW5kZWQmJihhPVRyLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBqdC5PUDphPVRyLm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9VHIuYW5ub3RhdGlvbnMubWF4TGFiZWxXaWR0aDticmVhaztkZWZhdWx0OmJyZWFrfWlmKGEhPT1udWxsKXJldHVybiBpLnRleHRDb250ZW50PXRsZShpLnRleHRDb250ZW50LHIsYSksZS5hcHBlbmQoInRpdGxlIikudGV4dChvKX12YXIgJGx0PW51bGw7ZnVuY3Rpb24gWmNyKGUpe3JldHVybiAkbHR8fCgkbHQ9T24oKS5kb21haW4oW2UubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxlLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbZS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsZS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLCRsdH1mdW5jdGlvbiBkUChlLHQscixuKXtQbChlLCJ0ZXh0Iix2ZS5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsdCkuYXR0cigieSIscituKX1mdW5jdGlvbiBHbGUoZSx0LHIpe2xldCBuPUFuKGUsImciLHIpO3N3aXRjaCh0Lm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpsZXQgaT10Lm5vZGU7aWYoVmkuaXNOdW1iZXIoaS5mdW5jdGlvbklucHV0SW5kZXgpfHxWaS5pc051bWJlcihpLmZ1bmN0aW9uT3V0cHV0SW5kZXgpKXtBbihuLCJwb2x5Z29uIix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9QW4obiwiZWxsaXBzZSIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UganQuU0VSSUVTOmxldCBvPSJhbm5vdGF0aW9uIixhPXQ7YS5jb3JlR3JhcGgmJihvPWEubm9kZS5oYXNOb25Db250cm9sRWRnZXM/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpO2xldCBzPVt2ZS5Ob2RlLkNPTE9SX1RBUkdFVF07YS5pc0ZhZGVkT3V0JiZzLnB1c2goImZhZGVkLWVsbGlwc2UiKSxBbihuLCJ1c2UiLHMpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbysiLXN0YW1wIiksQW4obiwicmVjdCIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4Iix0LnJhZGl1cykuYXR0cigicnkiLHQucmFkaXVzKTticmVhaztjYXNlIGp0LkJSSURHRTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2Nhc2UganQuTUVUQTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXJldHVybiBufWZ1bmN0aW9uIFdsZShlKXtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UganQuT1A6cmV0dXJuIHZlLk9QTk9ERTtjYXNlIGp0Lk1FVEE6cmV0dXJuIHZlLk1FVEFOT0RFO2Nhc2UganQuU0VSSUVTOnJldHVybiB2ZS5TRVJJRVNOT0RFO2Nhc2UganQuQlJJREdFOnJldHVybiB2ZS5CUklER0VOT0RFO2Nhc2UganQuRUxMSVBTSVM6cmV0dXJuIHZlLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9ZnVuY3Rpb24gSmNyKGUsdCl7bGV0IHI9UGwoZSwiZyIsdmUuTm9kZS5TSEFQRSksbj12MCh0KTtzd2l0Y2godC5ub2RlLnR5cGUpe2Nhc2UganQuT1A6e2xldCBpPXQubm9kZTtpZihWaS5pc051bWJlcihpLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFZpLmlzTnVtYmVyKGkuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2xldCBvPVBsKHIsInBvbHlnb24iKTtMbGUobyx0LngsdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1lbHNle2xldCBvPVBsKHIsImVsbGlwc2UiKTtFSChvLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1kUChlLG4sdC55LHQubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UganQuTUVUQTp7bGV0IGk9ci5zZWxlY3RBbGwoInJlY3QiKTt0LmV4cGFuZGVkPyh6ZChpLHQueCx0LnksdC53aWR0aCx0LmhlaWdodCksQmxlKGUsdCksZFAoZSxuLHQueSwtdC5oZWlnaHQvMit0LmxhYmVsSGVpZ2h0LzIpKTooemQoaSxuLHQueSx0LmNvcmVCb3gud2lkdGgsdC5jb3JlQm94LmhlaWdodCksZFAoZSxuLHQueSwwKSk7YnJlYWt9Y2FzZSBqdC5TRVJJRVM6e2xldCBpPVBsKHIsInVzZSIpO3QuZXhwYW5kZWQ/KHpkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KSxCbGUoZSx0KSxkUChlLG4sdC55LC10LmhlaWdodC8yK3QubGFiZWxIZWlnaHQvMikpOih6ZChpLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KSxkUChlLG4sdC55LHQubGFiZWxPZmZzZXQpKTticmVha31jYXNlIGp0LkJSSURHRTp7bGV0IGk9UGwociwicmVjdCIpO3pkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX19ZnVuY3Rpb24gS2x0KGUsdCxyKXtsZXQgbj1Kc2UoZSk7aWYoIXIpcmV0dXJuYHVybCgjJHtufSlgO2xldCBpPUh0KHIpLG89aS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpO28uZW1wdHkoKSYmKG89aS5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsIl9ncmFwaC1ncmFkaWVudHMiKSk7bGV0IGE9by5zZWxlY3QoImxpbmVhckdyYWRpZW50IyIrbik7aWYoYS5lbXB0eSgpKXthPW8uYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixlKSxhLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2xldCBzPTA7VmkuZWFjaCh0LGw9PntsZXQgYz1sLmNvbG9yO2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixzKS5hdHRyKCJzdG9wLWNvbG9yIixjKSxhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIscytsLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGMpLHMrPWwucHJvcG9ydGlvbn0pfXJldHVybmB1cmwoIyR7bn0pYH1mdW5jdGlvbiBMSChlKXtIdChlKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfWZ1bmN0aW9uIGtIKGUsdCxyLG4saSl7bGV0IG89S3U7c3dpdGNoKGU9ZXx8KCgpPT4wKSx0KXtjYXNlIHFuLk5PTkU6Y2FzZSBxbi5TVFJVQ1RVUkU6aWYoci5ub2RlLnR5cGU9PT1qdC5NRVRBKXtsZXQgYT1yLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gdD09PXFuLlNUUlVDVFVSRSYmYSE9PW51bGw/by5TVFJVQ1RVUkVfUEFMRVRURShlKGEpLG4pOm8uVU5LTk9XTn1lbHNlIHJldHVybiByLm5vZGUudHlwZT09PWp0LlNFUklFUz9uP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpyLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnN0cnVjdHVyYWw/IiNmMGUiOnIubm9kZS5pbmJvdW5kPyIjMGVmIjoiI2ZlMCI6VmkuaXNOdW1iZXIoci5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlZpLmlzTnVtYmVyKHIubm9kZS5mdW5jdGlvbk91dHB1dEluZGV4KT8iIzAwOTY4OCI6IndoaXRlIjtjYXNlIHFuLkRFVklDRTpyZXR1cm4gci5kZXZpY2VDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoImRldmljZS0iK3Iubm9kZS5uYW1lLHIuZGV2aWNlQ29sb3JzLGkpO2Nhc2UgcW4uWExBX0NMVVNURVI6cmV0dXJuIHIueGxhQ2x1c3RlckNvbG9ycz09bnVsbD9vLlVOS05PV046bj9vLkVYUEFOREVEX0NPTE9SOktsdCgieGxhLSIrci5ub2RlLm5hbWUsci54bGFDbHVzdGVyQ29sb3JzLGkpO2Nhc2UgcW4uQ09NUFVURV9USU1FOnJldHVybiBuP28uRVhQQU5ERURfQ09MT1I6ci5jb21wdXRlVGltZUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5NRU1PUlk6cmV0dXJuIG4/by5FWFBBTkRFRF9DT0xPUjpyLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5PUF9DT01QQVRJQklMSVRZOnJldHVybiByLmNvbXBhdGliaWxpdHlDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoIm9wLWNvbXBhdC0iK3Iubm9kZS5uYW1lLHIuY29tcGF0aWJpbGl0eUNvbG9ycyxpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iil9fWZ1bmN0aW9uIHMzKGUsdCxyLG4pe249bnx8dmUuTm9kZS5TSEFQRTtsZXQgaT1yLmlzTm9kZUhpZ2hsaWdodGVkKHQubm9kZS5uYW1lKSxvPXIuaXNOb2RlU2VsZWN0ZWQodC5ub2RlLm5hbWUpLGE9dC5pc0luRXh0cmFjdHx8dC5pc091dEV4dHJhY3R8fHQuaXNMaWJyYXJ5RnVuY3Rpb24scz10LmV4cGFuZGVkJiZuIT09dmUuQW5ub3RhdGlvbi5OT0RFLGw9dC5pc0ZhZGVkT3V0O2UuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGkpLGUuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLGUuY2xhc3NlZCgiZXh0cmFjdCIsYSksZS5jbGFzc2VkKCJleHBhbmRlZCIscyksZS5jbGFzc2VkKCJmYWRlZCIsbCk7bGV0IGM9ZS5zZWxlY3QoIi4iK24rIiAuIit2ZS5Ob2RlLkNPTE9SX1RBUkdFVCksdT1rSChyLnRlbXBsYXRlSW5kZXgsci5jb2xvckJ5LHQscyxyLmdldEdyYXBoU3ZnUm9vdCgpKTtjLnN0eWxlKCJmaWxsIix1KSxjLnN0eWxlKCJzdHJva2UiLG8/bnVsbDp0Y3QodSkpfWZ1bmN0aW9uIHRjdChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCwzKT09PSJ1cmwiP0t1LkdSQURJRU5UX09VVExJTkU6Y3UoZSkuZGFya2VyKCkudG9TdHJpbmcoKX1mdW5jdGlvbiBZbGUoZSx0LHIsbil7bGV0IGk9SHQoZSk7aWYoaS5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLGkuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksaS5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCF0fHwhbnx8IXIpcmV0dXJuO2xldCBvPWpsZShyLHQpLGE9e307VmkuZWFjaChvLGZ1bmN0aW9uKGMpe2E9WGxlKGUsdCxjLGEpfSk7bGV0IHM9T2JqZWN0LmtleXMoYSksbD10dXIodCxzKTtldXIoZSxsKSxpLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKS5lYWNoKGZ1bmN0aW9uKGMpe2xldCB1PWMubm9kZS5uYW1lO2kuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3V9Il1gKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKX0pLGkuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX1mdW5jdGlvbiBqbGUoZSx0KXtsZXQgcj1bXSxuPXQuZ2V0Tm9kZUJ5TmFtZShlKTtpZihuIGluc3RhbmNlb2YgXzApcmV0dXJuW25dLmNvbmNhdChuLmluRW1iZWRkaW5ncyk7bGV0IGk9bi5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gVmkuZWFjaChpLGZ1bmN0aW9uKG8pe3I9ci5jb25jYXQoamxlKG8sdCkpfSkscn1mdW5jdGlvbiBYbGUoZSx0LHIsbil7aWYobltyLm5hbWVdKXJldHVybiBuO25bci5uYW1lXT0hMDtsZXQgaT1yLmlucHV0cyxvPVpsdCh0LHIpO0h0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke28ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBhPXt9O1ZpLmVhY2goaSxmdW5jdGlvbih1KXtsZXQgaD10LmdldE5vZGVCeU5hbWUodS5uYW1lKTtpZihoPT09dm9pZCAwKXJldHVybjtpZihoIGluc3RhbmNlb2YgYVApe2xldCBkPXNQKGgubmFtZSk7aD10LmdldE5vZGVCeU5hbWUoZCl9bGV0IGY9Wmx0KHQsaCkscD1hW2YubmFtZV07cD9wLm9wTm9kZXMucHVzaChoKTphW2YubmFtZV09e3Zpc2libGVQYXJlbnQ6ZixvcE5vZGVzOltoXX19KTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB1PTE7Yy5uYW1lIT09cWM7dSsrKWM9Yy5wYXJlbnROb2RlLHNbYy5uYW1lXT17dHJhY2VkOiExLGluZGV4OnUsY29ubmVjdGlvbkVuZHBvaW50czpbXX0sbFt1XT1jO3JldHVybiBWaS5mb3JPd24oYSxmdW5jdGlvbih1LGgpe2xldCBmPXUudmlzaWJsZVBhcmVudDtWaS5lYWNoKHUub3BOb2RlcyxmdW5jdGlvbihwKXtuPVhsZShlLHQscCxuKX0pLGYubmFtZSE9PW8ubmFtZSYmUWNyKGUsZixzLGwpfSksbn1mdW5jdGlvbiBRY3IoZSx0LHIsbil7bGV0IGk9dCxvPXQsYT1bXTtmb3IoOyFyW2kubmFtZV07KW8ubmFtZSE9PWkubmFtZSYmYS5wdXNoKFtvLGldKSxvPWksaT1pLnBhcmVudE5vZGU7bGV0IHM9cltpLm5hbWVdLmluZGV4LGw9bltNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lLGY9SHQoZSk7Zi5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksVmkuZWFjaChhLGZ1bmN0aW9uKHApe2xldCBkPXBbMF0sZz1wWzFdLF89YFtkYXRhLWVkZ2U9IiR7ZC5uYW1lfS0tJHtjfX5+JHtnLm5hbWV9fn5PVVQiXWA7Zi5zZWxlY3RBbGwoXykuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX0pO2ZvcihsZXQgcD0xO3A8cztwKyspe2xldCBkPW5bcC0xXSxnPW5bcF0sXz1gW2RhdGEtZWRnZT0iJHt1fX5+JHtnLm5hbWV9fn5JTi0tJHtkLm5hbWV9Il1gO2Yuc2VsZWN0QWxsKF8pLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9fWZ1bmN0aW9uIHR1cihlLHQpe2xldCByPXt9O3JldHVybiBWaS5lYWNoKHQsZnVuY3Rpb24obil7bGV0IGk9ZS5nZXROb2RlQnlOYW1lKG4pLG89Wmx0KGUsaSk7cltvLm5hbWVdPW99KSxyfWZ1bmN0aW9uIGV1cihlLHQpe1ZpLmZvck93bih0LGZ1bmN0aW9uKHIpe2xldCBuPXI7Zm9yKDtuLm5hbWUhPT1xYzspe2xldCBpPUh0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApO2kubm9kZXMoKS5sZW5ndGgmJiFpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpJiYhaS5jbGFzc2VkKCJzZWxlY3RlZCIpJiYhaS5jbGFzc2VkKCJvcCIpJiZpLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApLG49bi5wYXJlbnROb2RlfX0pfWZ1bmN0aW9uIFpsdChlLHQpe2xldCByPSExLG49dDtmb3IoOyFyOylpZih0PW4sbj10LnBhcmVudE5vZGUsbj09PXZvaWQgMClyPSEwO2Vsc2V7bGV0IGk9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG4ubmFtZSk7aSYmKGkuZXhwYW5kZWR8fG4gaW5zdGFuY2VvZiBfMCkmJihyPSEwKX1yZXR1cm4gdH1mdW5jdGlvbiBWbGUoZSx0LHIsbil7bGV0IGk9ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0Lmxpc3Qsbz0+by5ub2RlLm5hbWUpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixvPT5vLm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtuLmFkZEFubm90YXRpb25Hcm91cChvLHIsYSk7bGV0IHM9dmUuQW5ub3RhdGlvbi5FREdFLGw9by5yZW5kZXJNZXRhZWRnZUluZm8mJm8ucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO2wmJiFsLm51bVJlZ3VsYXJFZGdlcyYmKHMrPSIgIit2ZS5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSksbCYmbC5udW1SZWZFZGdlcyYmKHMrPSIgIit2ZS5FZGdlLlJFRl9MSU5FKSxYbHQoYSxvLG4scyksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTPyhpdXIoYSxvKSxudXIoYSxvKSk6JGxlKGEsby5ub2RlLm5hbWUsbyx2ZS5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKGkpLmF0dHIoImNsYXNzIixvPT52ZS5Bbm5vdGF0aW9uLkdST1VQKyIgIitydXIoby5hbm5vdGF0aW9uVHlwZSkrIiAiK1dsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTthdXIoYSxyLG8sbiksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTJiZvdXIoYSxyLG8sbil9KSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKG8pe24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKG8scil9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIHJ1cihlKXtyZXR1cm4oZ2lbZV18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIG51cihlLHQpe2lmKHQuYW5ub3RhdGlvblR5cGU9PT1naS5TVU1NQVJZKUFuKGUsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpO2Vsc2V7bGV0IHI9R2xlKGUsdCx2ZS5Bbm5vdGF0aW9uLk5PREUpO0FuKHIsInRpdGxlIikudGV4dCh0Lm5vZGUubmFtZSl9fWZ1bmN0aW9uIGl1cihlLHQpe2xldCByPXQubm9kZS5uYW1lLnNwbGl0KCIvIiksbj1yW3IubGVuZ3RoLTFdO3JldHVybiAkbGUoZSxuLHQsbnVsbCl9ZnVuY3Rpb24gJGxlKGUsdCxyLG4pe2xldCBpPXZlLkFubm90YXRpb24uTEFCRUw7biYmKGkrPSIgIituKTtsZXQgbz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHIuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBxbGUobywtMSxKNC5Bbm5vdGF0aW9uLkxBQkVMKX1mdW5jdGlvbiBvdXIoZSx0LHIsbil7ZS5vbigibW91c2VvdmVyIixpPT57bi5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsaT0+e24uZmlyZSgiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsaT0+e3F0LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOmkubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KSxyLmFubm90YXRpb25UeXBlIT09Z2kuU1VNTUFSWSYmci5hbm5vdGF0aW9uVHlwZSE9PWdpLkNPTlNUQU5UJiZlLm9uKCJjb250ZXh0bWVudSIsV2x0KG4sVWxlKHIubm9kZSxuKSkpfWZ1bmN0aW9uIGF1cihlLHQscixuKXtsZXQgaT12MCh0KTtyLnJlbmRlck5vZGVJbmZvJiZyLmFubm90YXRpb25UeXBlIT09Z2kuRUxMSVBTSVMmJnMzKGUsci5yZW5kZXJOb2RlSW5mbyxuLHZlLkFubm90YXRpb24uTk9ERSksci5hbm5vdGF0aW9uVHlwZT09PWdpLlNVTU1BUlkmJihyLndpZHRoKz0xMCksZS5zZWxlY3QoInRleHQuIit2ZS5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsaStyLmR4KyhyLmlzSW4/LTE6MSkqKHIud2lkdGgvMityLmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3IuZHkpLGUuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixpK3IuZHgtMykuYXR0cigieSIsdC55K3IuZHktNiksRUgoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLGkrci5keCx0Lnkrci5keSxyLndpZHRoLHIuaGVpZ2h0KSxlLnNlbGVjdCgicGF0aC4iK3ZlLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLG89PntsZXQgYT1vLnBvaW50cy5tYXAocz0+KHt4OnMuZHgraSx5OnMuZHkrdC55fSkpO3JldHVybiBDSChhKX0pfWZ1bmN0aW9uIGVjdChlLHQscixuKXtuPW58fHZlLlNjZW5lLkdST1VQO2xldCBpPW0wKGUsImciLG4pLmVtcHR5KCksbz1BbihlLCJnIixuKSxhPUFuKG8sImciLHZlLlNjZW5lLkNPUkUpLHM9VmkucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksKGwsYyk9PntsZXQgdT10LmNvcmVHcmFwaC5ub2RlKGMpO3JldHVybiB1LmV4Y2x1ZGVkfHxsLnB1c2godSksbH0sQXJyYXkoKSk7aWYodC5ub2RlLnR5cGU9PT1qdC5TRVJJRVMmJnMucmV2ZXJzZSgpLHpsZShhLHQuY29yZUdyYXBoLHIpLFBIKGEscyxyKSx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5JTkVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZEluRXh0cmFjdCxyKX1lbHNlIG0wKG8sImciLHZlLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7aWYodC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjApe2xldCBsPUFuKG8sImciLHZlLlNjZW5lLk9VVEVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZE91dEV4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKTtpZih0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKTtQSChsLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtyZXR1cm4gUGxlKG8sdCksaSYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb312YXIgc3VyPS44LFJIPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLnN2Zz10LHRoaXMubGFiZWxQYWRkaW5nPWEsdGhpcy56b29tRz1yLHRoaXMubWFpblpvb209bix0aGlzLm1heFdhbmRIPW87bGV0IHM9SHQoaS5zaGFkb3dSb290KSxsPXMuc2VsZWN0KCJzdmciKSxjPWwuc2VsZWN0KCJyZWN0IiksdT1mPT57dGhpcy52aWV3cG9pbnRDb29yZC54PXF0LngsdGhpcy52aWV3cG9pbnRDb29yZC55PXF0LnksdGhpcy51cGRhdGVWaWV3cG9pbnQoKX07dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07bGV0IGg9cGIoKS5zdWJqZWN0KE9iamVjdCkub24oImRyYWciLHUpO2MuZGF0dW0odGhpcy52aWV3cG9pbnRDb29yZCkuY2FsbChoKSxsLm9uKCJjbGljayIsKCk9PntpZihxdC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZj1OdW1iZXIoYy5hdHRyKCJ3aWR0aCIpKSxwPU51bWJlcihjLmF0dHIoImhlaWdodCIpKSxkPXpvKGwubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9ZFswXS1mLzIsdGhpcy52aWV3cG9pbnRDb29yZC55PWRbMV0tcC8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSx0aGlzLnZpZXdwb2ludD1jLm5vZGUoKSx0aGlzLm1pbmltYXBTdmc9bC5ub2RlKCksdGhpcy5taW5pbWFwPWksdGhpcy5jYW52YXM9cy5zZWxlY3QoImNhbnZhcy5maXJzdCIpLm5vZGUoKSx0aGlzLmNhbnZhc0J1ZmZlcj1zLnNlbGVjdCgiY2FudmFzLnNlY29uZCIpLm5vZGUoKSx0aGlzLmRvd25sb2FkQ2FudmFzPXMuc2VsZWN0KCJjYW52YXMuZG93bmxvYWQiKS5ub2RlKCksSHQodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtIdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCB0PS10aGlzLnZpZXdwb2ludENvb3JkLngqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXAscj0tdGhpcy52aWV3cG9pbnRDb29yZC55KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwO0h0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLFhoLnRyYW5zbGF0ZSh0LHIpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLmRvd25sb2FkQ2FudmFzLnRvQmxvYihyPT57dChyKX0sImltYWdlL3BuZyIpfSl9dXBkYXRlKCl7bGV0IHQ9bnVsbDt0cnl7aWYodD10aGlzLnpvb21HLmdldEJCb3goKSx0LndpZHRoPT09MClyZXR1cm59Y2F0Y2gocCl7cmV0dXJufWxldCByPUh0KHRoaXMuc3ZnKSxuPSIiLGk9dGhpcy5zdmcsYT0oaS5nZXRSb290Tm9kZT9pLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspdHJ5e2xldCBkPWFbcF0uY3NzUnVsZXN8fGFbcF0ucnVsZXM7aWYoZD09bnVsbCljb250aW51ZTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKyluKz1kW2ddLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLCIiKStgCmB9Y2F0Y2goZCl7aWYoZC5uYW1lIT09IlNlY3VyaXR5RXJyb3IiKXRocm93IGR9bGV0IHM9ci5hcHBlbmQoInN0eWxlIik7cy50ZXh0KG4pO2xldCBsPUh0KHRoaXMuem9vbUcpLGM9bC5hdHRyKCJ0cmFuc2Zvcm0iKTtsLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPXRoaXMubGFiZWxQYWRkaW5nKjIsdC53aWR0aCs9dGhpcy5sYWJlbFBhZGRpbmcqMixyLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxIdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksSHQodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7bGV0IHU9SHQodGhpcy5kb3dubG9hZENhbnZhcyk7dS5zdHlsZSgid2lkdGgiLHQud2lkdGgpLHUuc3R5bGUoImhlaWdodCIsdC5oZWlnaHQpLHUuYXR0cigid2lkdGgiLDMqdC53aWR0aCksdS5hdHRyKCJoZWlnaHQiLDMqdC5oZWlnaHQpLHRoaXMudHJhbnNsYXRlIT1udWxsJiZ0aGlzLnpvb20hPW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy56b29tKCkpO2xldCBoPW5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodGhpcy5zdmcpO3MucmVtb3ZlKCksci5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKSxsLmF0dHIoInRyYW5zZm9ybSIsYyk7bGV0IGY9bmV3IEltYWdlO2Yub25sb2FkPSgpPT57bGV0IHA9dGhpcy5jYW52YXNCdWZmZXIuZ2V0Q29udGV4dCgiMmQiKTtwPT1udWxsfHxwLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNCdWZmZXIud2lkdGgsdGhpcy5jYW52YXNCdWZmZXIuaGVpZ2h0KSxwPT1udWxsfHxwLmRyYXdJbWFnZShmLDAsMCx0aGlzLm1pbmltYXBTaXplLndpZHRoLHRoaXMubWluaW1hcFNpemUuaGVpZ2h0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntIdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEh0KHRoaXMuY2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxbdGhpcy5jYW52YXMsdGhpcy5jYW52YXNCdWZmZXJdPVt0aGlzLmNhbnZhc0J1ZmZlcix0aGlzLmNhbnZhc119KTtsZXQgZD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZD09bnVsbHx8ZC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGQ9PW51bGx8fGQuZHJhd0ltYWdlKGYsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSxmLm9uZXJyb3I9KCk9PntsZXQgcD1uZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtmLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHApfSxmLnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoaCl9em9vbSh0KXtpZih0aGlzLnNjYWxlTWluaW1hcD09bnVsbClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCByPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49SHQodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1yLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLG89ci5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsbyk7bGV0IGE9dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxzPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LGw9dGhpcy52aWV3cG9pbnRDb29yZC54LGM9dGhpcy52aWV3cG9pbnRDb29yZC55LHU9TWF0aC5taW4oTWF0aC5tYXgoMCxsK2kpLGEpLU1hdGgubWluKE1hdGgubWF4KDAsbCksYSksaD1NYXRoLm1pbihNYXRoLm1heCgwLGMrbykscyktTWF0aC5taW4oTWF0aC5tYXgoMCxjKSxzKTt1KmgvKGEqcyk8c3VyP3RoaXMubWluaW1hcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTp0aGlzLm1pbmltYXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fTt2YXIgbmN0PWNsYXNzIGV4dGVuZHMgbXR7aW5pdCh0LHIsbixpLG8pe3JldHVybiBuZXcgUkgodCxyLG4sdGhpcyxpLG8pfX07bmN0LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIKICAgICAgICAgIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIKICAgICAgICAgIHg9Ii0yMCUiCiAgICAgICAgICB5PSItMjAlIgogICAgICAgICAgd2lkdGg9IjE1MCUiCiAgICAgICAgICBoZWlnaHQ9IjE1MCUiCiAgICAgICAgPgogICAgICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlR3JhcGhpYyIgZHg9IjEiIGR5PSIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgICAgcmVzdWx0PSJtYXRyaXhPdXQiCiAgICAgICAgICAgIGluPSJvZmZPdXQiCiAgICAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgdmFsdWVzPSIwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjUgMCIKICAgICAgICAgID48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgICAgcmVzdWx0PSJibHVyT3V0IgogICAgICAgICAgICBpbj0ibWF0cml4T3V0IgogICAgICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgICA+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICAgIDxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZUJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgPCEtLSBBZGRpdGlvbmFsIGNhbnZhcyB0byB1c2UgYXMgYnVmZmVyIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbiB1cGRhdGVzIC0tPgogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICBgO25jdD1FKFt5dCgidGYtZ3JhcGgtbWluaW1hcCIpXSxuY3QpO3ZhciBLbGU9UWAKICA8c3R5bGU+CiAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNzdmcgewogICAgICBmbGV4OiAxOwogICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNoaWRkZW4gewogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHRvcDogMHB4OwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgdGV4dCB7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBOb2RlIGFuZCBhbm5vdGF0aW9uLW5vZGUgZm9yIE1ldGFub2RlIC0tLSAqLwoKICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICB9CiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICB9CiAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICB9CgogICAgLmZhZGVkLAogICAgLmZhZGVkIHJlY3QsCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCBwYXRoLAogICAgLmZhZGVkIHVzZSwKICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgcGF0aCB7CiAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCB1c2UgewogICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgdGV4dCB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gZWxsaXBzZSwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogI2ZmOTgwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAubm9uLWlucHV0ID4gKiA+IHJlY3QsCi5ub24taW5wdXQgPiAqID4gZWxsaXBzZSwKLm5vbi1pbnB1dCA+ICogPiB1c2UsCi8qIEZvciBDb25zdCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+ICogPiAuY29uc3RhbnQ6bm90KFtjbGFzcyo9ImlucHV0LWhpZ2hsaWdodCJdKSA+CiAgLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICBzdHJva2UtZGFzaGFycmF5OiBpbmhlcml0OwogICAgfQoKICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgIC5ub24taW5wdXQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC8qIElucHV0IGVkZ2VzLiAqLwogICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICA+IC5pbi1hbm5vdGF0aW9ucwogICAgICA+IC5hbm5vdGF0aW9uCiAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIHN0cm9rZTogIzk5OSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgIC5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQsCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiBwYXRoLAovKiBBbm5vdGF0aW9uIHN0eWxlcyAobGFiZWwgYW5kIGVkZ2VzIHJlc3BlY3RpdmVseSkuICovCi5ub24taW5wdXQgPiBnID4KLmFubm90YXRpb246bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkKSA+Ci5hbm5vdGF0aW9uLWxhYmVsCi8qLmFubm90YXRpb24tZWRnZSovIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgIC5vcCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNmZmY7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KCiAgICAub3Auc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBTZXJpZXMgTm9kZSAtLS0gKi8KCiAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKiBPbmNlIGV4cGFuZGVkLCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4gYW5kIGhpZGUgdGhlIDx1c2U+LiAqLwogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICBzdHJva2U6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICB9CiAgICAuc2VyaWVzLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHVzZSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKioKICogVE9ETzogU2ltcGxpZnkgdGhpcyBieSBhcHBseWluZyBhIHN0YWJsZSBjbGFzcyBuYW1lIHRvIGFsbCA8Zz4KICogZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgaGF2ZSBlaXRoZXIgdGhlIG5vZGVzaGFwZSBvciBhbm5vdGF0aW9uLW5vZGUgY2xhc3Nlcy4KICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiAjY2NjOwogICAgfQogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLmFubm90YXRpb24uc2VyaWVzLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICBvcGFjaXR5OiAwLjI7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgIHN0cm9rZTogI2ZmYjc0ZDsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGVzIC0tLSAqLwoKICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAubm9kZSB7CiAgICAgIC8qIFByb3ZpZGUgYSBoaW50IHRvIGJyb3dzZXJzIHRvIGF2b2lkIHVzaW5nIHRoZWlyIHN0YXRpYyByYXN0ZXJpemF0aW9uCiAgICAgIGF0IGluaXRpYWwgc2NhbGUsIHdoaWNoIGxvb2tzIHZlcnkgcGl4ZWxhdGVkIG9uIENocm9taXVtIHdoZW4gem9vbWVkIGluLgogICAgICBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyAqbm90KiB1c2UgJ3dpbGwtY2hhbmdlOiB0cmFuc2Zvcm0nIGFuZAogICAgICAndHJhbnNsYXRlWigwKSBoZXJlLCB3aGljaCBpbnRyb2R1Y2UgYmx1cnJpbmVzcyBvbiBGaXJlZm94LgogICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQ3NDQgKi8KICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CiAgICB9CgogICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogIzQ0NDsKICAgIH0KCiAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA5cHg7CiAgICB9CgogICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA4cHg7CiAgICB9CgogICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBmb250LXNpemU6IDZweDsKICAgIH0KCiAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogbm9ybWFsOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNTBhM2Y3OwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNDI4NWY0OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgIC8qIG9ubHkgYXBwbGllZCBmb3IgYW5ub3RhdGlvbnMgdGhhdCBhcmUgbm90IHN1bW1hcnkgb3IgY29uc3RhbnQuCiguc3VtbWFyeSwgLmNvbnN0YW50IGdldHMgb3ZlcnJpZGRlbiBiZWxvdykgKi8KICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAuYW5ub3RhdGlvbi5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2FhYTsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNhYWE7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgLmV4cGFuZGVkID4gLmluLWFubm90YXRpb25zLAogICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgfQoKICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogcmVkOwogICAgfQoKICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgc3Ryb2tlOiAjZGI0NDM3OwogICAgfQoKICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBmaWxsOiAjYTUyNzE0OwogICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICB9CgogICAgLnN1bW1hcnkuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBFZGdlIC0tLSAqLwoKICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2JiYjsKICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICB9CgogICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBzdHJva2U6ICNmMDA7CiAgICB9CgogICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICBmaWxsOiAjMDAwOwogICAgfQoKICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgIC5lZGdlID4gdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgIGZpbGw6ICM2NjY7CiAgICB9CgogICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNiYmI7CiAgICB9CgogICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZmZiNzRkOwogICAgfQoKICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZjAwOwogICAgfQoKICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICB9CgogICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgIC5ub2RlOm5vdCguaGlnaGxpZ2h0ZWQpOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBvcGFjaXR5OiAwLjAxOwogICAgfQogICAgLm5vZGUuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIC5idXR0b25jaXJjbGUgewogICAgICBmaWxsOiAjZTc4MTFkOwogICAgfQogICAgLmJ1dHRvbmNpcmNsZTpob3ZlciB7CiAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICB9CiAgICAuZXhwYW5kYnV0dG9uLAogICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uLAogICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgLyogT25seSBzaG93IHRoZSBleHBhbmQgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZCBhbmQgb25seSBzaG93IHRoZQogICBjb2xsYXBzZSBidXR0b24gd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuICovCiAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICBmb250LXNpemU6IDRweDsKICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwgcmVjdCB7CiAgICAgIGZpbHRlcjogdXJsKCNoZWFsdGgtcGlsbC1zaGFkb3cpOwogICAgICByeDogMzsKICAgICAgcnk6IDM7CiAgICB9CgogICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB0b3A6IDIwcHg7CiAgICB9CgogICAgLnRpdGxlLAogICAgLmF1eFRpdGxlLAogICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNtaW5pbWFwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMjBweDsKICAgICAgYm90dG9tOiAyMHB4OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0idGl0bGVDb250YWluZXIiPgogICAgPGRpdiBpZD0idGl0bGUiIGNsYXNzPSJ0aXRsZSI+TWFpbiBHcmFwaDwvZGl2PgogICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICA8ZGl2IGlkPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSIgY2xhc3M9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIj5GdW5jdGlvbnM8L2Rpdj4KICA8L2Rpdj4KICA8c3ZnIGlkPSJzdmciPgogICAgPGRlZnM+CiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIHJlZmVyZW5jZSBlZGdlIHBhdGhzIG9mIGRpZmZlcmVudCBwcmVkZWZpbmVkIHNpemVzIHBlciBjb2xvci4gLS0+CiAgICAgIDxwYXRoCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1zbWFsbCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjEzIgogICAgICAgIG1hcmtlckhlaWdodD0iMTMiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxNiIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjE2IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXhsYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjIwIgogICAgICAgIG1hcmtlckhlaWdodD0iMjAiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkcyBmb3IgZGF0YWZsb3cgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkIGZvciBhbm5vdGF0aW9uIGVkZ2UgcGF0aHMuIC0tPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMCIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgcng9IjcuNSIKICAgICAgICByeT0iMyIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgPGVsbGlwc2UKICAgICAgICBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIgogICAgICAgIHJ4PSI1IgogICAgICAgIHJ5PSIyIgogICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICA+PC9lbGxpcHNlPgogICAgICA8IS0tIFZlcnRpY2FsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPCEtLSBIb3Jpem9udGFsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIGZvciBhbm5vdGF0aW9uLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjkiIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI1IiB5PSIyIj48L3VzZT4KICAgICAgPC9nPgogICAgICA8c3ZnCiAgICAgICAgaWQ9InN1bW1hcnktaWNvbiIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIHdpZHRoPSIxMiIKICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgID48L3BhdGg+CiAgICAgIDwvc3ZnPgoKICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0icmVjdEhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSI1IgogICAgICAgIGhlaWdodD0iNSIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgogICAgICA8cGF0dGVybgogICAgICAgIGlkPSJlbGxpcHNlSGF0Y2giCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgaGVpZ2h0PSIyIgogICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMiIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICA8L3BhdHRlcm4+CgogICAgICA8IS0tIEEgc2hhZG93IGZvciBoZWFsdGggcGlsbHMuIC0tPgogICAgICA8ZmlsdGVyCiAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXNoYWRvdyIKICAgICAgICB4PSItNDAlIgogICAgICAgIHk9Ii00MCUiCiAgICAgICAgd2lkdGg9IjE4MCUiCiAgICAgICAgaGVpZ2h0PSIxODAlIgogICAgICA+CiAgICAgICAgPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPGZlT2Zmc2V0IGR4PSIwIiBkeT0iMCIgcmVzdWx0PSJvZmZzZXRibHVyIj48L2ZlT2Zmc2V0PgogICAgICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDAwMDAwIj48L2ZlRmxvb2Q+CiAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0ib2Zmc2V0Ymx1ciIgb3BlcmF0b3I9ImluIj48L2ZlQ29tcG9zaXRlPgogICAgICAgIDxmZU1lcmdlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgICA8ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgPC9mZU1lcmdlPgogICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KICAgIDwhLS0gTWFrZSBhIGxhcmdlIHJlY3RhbmdsZSB0aGF0IGZpbGxzIHRoZSBzdmcgc3BhY2Ugc28gdGhhdAogIHpvb20gZXZlbnRzIGdldCBjYXB0dXJlZCBvbiBzYWZhcmkgLS0+CiAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICA8ZyBpZD0icm9vdCI+PC9nPgogIDwvc3ZnPgogIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgPGRpdiBpZD0iY29udGV4dE1lbnUiIGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgpgO3ZhciBMcj1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7QWxlKHQsdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9Z2V0R3JhcGhTdmdSb290KCl7cmV0dXJuIHRoaXMuJC5zdmd9Z2V0Q29udGV4dE1lbnUoKXtyZXR1cm4gdGhpcy4kLmNvbnRleHRNZW51fV9yZXNldFN0YXRlKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5fdXBkYXRlTGFiZWxzKCExKSxIdCh0aGlzLiQuc3ZnKS5zZWxlY3QoIiNyb290Iikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksTEgodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksUmQoInRmLWdyYXBoLXNjZW5lIChsYXlvdXQpOiIsZnVuY3Rpb24oKXtNSCh0LnJvb3QpfS5iaW5kKHRoaXMpLGpyLlJFTkRFUl9TQ0VORV9MQVlPVVQpLFJkKCJ0Zi1ncmFwaC1zY2VuZSAoYnVpbGQgc2NlbmUpOiIsZnVuY3Rpb24oKXtlY3QoSHQodGhpcy4kLnJvb3QpLHQucm9vdCx0aGlzKSxJbGUodGhpcy4kLnN2Zyx0aGlzKSx0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcyksanIuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX3pvb209ZVIoKS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRoaXMuX3pvb21TdGFydENvb3Jkcyl7dmFyIHQ9TWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LXRoaXMuX3pvb21UcmFuc2Zvcm0ueCwyKStNYXRoLnBvdyh0aGlzLl96b29tU3RhcnRDb29yZHMueS10aGlzLl96b29tVHJhbnNmb3JtLnksMikpO3Q8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCl9dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09cXQudHJhbnNmb3JtLHRoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKSx0aGlzLl96b29tZWQ9ITAsSHQodGhpcy4kLnJvb3QpLmF0dHIoInRyYW5zZm9ybSIscXQudHJhbnNmb3JtKSx0aGlzLm1pbmltYXAuem9vbShxdC50cmFuc2Zvcm0pfS5iaW5kKHRoaXMpKSxIdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKSxIdCh3aW5kb3cpLm9uKCJyZXNpemUiLGZ1bmN0aW9uKCl7dGhpcy5taW5pbWFwLnpvb20oKX0uYmluZCh0aGlzKSksdGhpcy5taW5pbWFwPXRoaXMuJC5taW5pbWFwLmluaXQodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLFRyLm1pbmltYXAuc2l6ZSxUci5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXt2YXIgdD10aGlzLl9pc0F0dGFjaGVkO3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlfHwhdHx8c2V0VGltZW91dCh0aGlzLmZpdC5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9X3VwZGF0ZUxhYmVscyh0KXt2YXIgcj10aGlzLiQkKCIudGl0bGUiKSxuPXIuc3R5bGUsaT10aGlzLiQkKCIuYXV4VGl0bGUiKSxvPWkuc3R5bGUsYT10aGlzLiQkKCIuZnVuY3Rpb25MaWJyYXJ5VGl0bGUiKS5zdHlsZTtsZXQgcz1IdCh0aGlzLiQuc3ZnKTt2YXIgbD1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmbCYmdGhpcy5wcm9ncmVzcyYmdGhpcy5wcm9ncmVzcy52YWx1ZT09PTEwMCl7dmFyIGM9cy5zZWxlY3QoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fHMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLk9VVEVYVFJBQ1QpLm5vZGUoKSx1PWwuZ2V0Q1RNKCkuZSxoPWM/Yy5nZXRDVE0oKS5lOm51bGw7bi5kaXNwbGF5PSJpbmxpbmUiLG4ubGVmdD11KyJweCIsaCE9PW51bGwmJmghPT11PyhvLmRpc3BsYXk9ImlubGluZSIsaD1NYXRoLm1heCh1K3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsaCksby5sZWZ0PWgrInB4Iik6by5kaXNwbGF5PSJub25lIjtsZXQgZj1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCkscD1mP2YuZ2V0Q1RNKCkuZTpudWxsO3AhPT1udWxsJiZwIT09aD8oYS5kaXNwbGF5PSJpbmxpbmUiLHA9TWF0aC5tYXgoaCtpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHApLGEubGVmdD1wKyJweCIpOmEuZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLG8uZGlzcGxheT0ibm9uZSIsYS5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe3RoaXMucmVuZGVySGllcmFyY2h5IT1udWxsJiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksbVAuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwodCxyKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9Zml0KCl7dGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U9ITAsQ2xlKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQscixuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bci5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxyKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW3Iubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxyKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1yfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxyKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1yfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4O1JsZSh0aGlzLiQuc3ZnLHQscil9X3VwZGF0ZU5vZGVTdGF0ZSh0KXt2YXIgcj10aGlzLmdldE5vZGUodCksbj10aGlzLmdldE5vZGVHcm91cCh0KTtpZihuJiZzMyhuLHIsdGhpcyksci5ub2RlLnR5cGU9PT1qdC5NRVRBJiZyLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uJiYhci5pc0xpYnJhcnlGdW5jdGlvbil7dmFyIGk9U2Erci5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbixvPUh0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJytpKyciXScpO3MzKG8scix0aGlzKX12YXIgYT10aGlzLmdldEFubm90YXRpb25Hcm91cHNJbmRleCh0KTttUC5lYWNoKGEsKHMsbCk9PntzMyhzLHIsdGhpcyxIaS5Bbm5vdGF0aW9uLk5PREUpfSl9X3NlbGVjdGVkTm9kZUNoYW5nZWQodCxyKXtpZih0IT09ciYmKHImJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKSwhIXQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKHQpLGk9W107bi5wYXJlbnROb2RlIT1udWxsJiZuLnBhcmVudE5vZGUubmFtZSE9cWM7KW49bi5wYXJlbnROb2RlLGkucHVzaChuLm5hbWUpO3ZhciBvO21QLmZvckVhY2hSaWdodChpLGE9Pnt0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShhKTt2YXIgcz10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO3Mubm9kZS5pc0dyb3VwTm9kZSYmIXMuZXhwYW5kZWQmJihzLmV4cGFuZGVkPSEwLG98fChvPXMpKX0pLG8mJih0aGlzLnNldE5vZGVFeHBhbmRlZChvKSx0aGlzLl96b29tZWQ9ITApLHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5wYW5Ub05vZGUodCl9LFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9fV9oaWdobGlnaHRlZE5vZGVDaGFuZ2VkKHQscil7dCE9PXImJih0JiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUodCksciYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpKX1fb25ab29tQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1fZmlyZUVuYWJsZUNsaWNrKCl7dGhpcy5maXJlKCJlbmFibGUtY2xpY2siKX1fdXBkYXRlSW5wdXRUcmFjZSgpe1lsZSh0aGlzLmdldEdyYXBoU3ZnUm9vdCgpLHRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX07THIudGVtcGxhdGU9S2xlO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sTHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxMci5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfb25ab29tQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tU3RhcnRDb29yZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbVRyYW5zZm9ybSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLExyLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9ub2RlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9lZGdlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhMYXJnZUZvbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTHIucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLExyLnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicmVuZGVySGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtFKFtCdCgiX2lzQXR0YWNoZWQiLCJyZW5kZXJIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpO0UoW0J0KCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKTtFKFtCdCgidHJhY2VJbnB1dHMiLCJzZWxlY3RlZE5vZGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpO0xyPUUoW3l0KCJ0Zi1ncmFwaC1zY2VuZSIpXSxMcik7dmFyIERyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKCEhdCl7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKXIuaW5jbHVkZT11ci5VTlNQRUNJRklFRDt0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0KX19X2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTshdHx8dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMscj10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmciYmKGFsZSh0aGlzLmJhc2ljR3JhcGgsdCxyKSxwbGUodGhpcy5ncmFwaEhpZXJhcmNoeSx0KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09anQuTUVUQSlyZXR1cm47bGV0IHI9dGhpcyxuPVJkKCJuZXcgdGZfZ3JhcGhfcmVuZGVyLkhpZXJhcmNoeSIsKCk9PntsZXQgaT1uZXcgbG8odCwhIXRoaXMuc3RhdHMsdGhpcy5hdXRvRXh0cmFjdE5vZGVzKTtpLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24saS5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uO2Z1bmN0aW9uIG8oYSl7cmV0dXJue21pblZhbHVlOmEuZG9tYWluKClbMF0sbWF4VmFsdWU6YS5kb21haW4oKVsxXSxzdGFydENvbG9yOmEucmFuZ2UoKVswXSxlbmRDb2xvcjphLnJhbmdlKClbMV19fXJldHVybiByLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6byhpLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTpvKGkubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOmljdC5tYXAoaS5kZXZpY2VDb2xvck1hcC5kb21haW4oKSxmdW5jdGlvbihhKXtyZXR1cm57ZGV2aWNlOmEsY29sb3I6aS5kZXZpY2VDb2xvck1hcChhKX19KSx4bGFfY2x1c3RlcjppY3QubWFwKGkueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGEpe3JldHVybnt4bGFfY2x1c3RlcjphLGNvbG9yOmkueGxhQ2x1c3RlckNvbG9yTWFwKGEpfX0pfSksaX0sanIuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ci5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0JiZ0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpfWZpdCgpe3RoaXMuJC5zY2VuZS5maXQoKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy4kLnNjZW5lLmdldEltYWdlQmxvYigpfV9ncmFwaENoYW5nZWQoKXshdGhpcy5ncmFwaEhpZXJhcmNoeXx8KHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLiQuc2NlbmUubm9kZUNvbG9yc0NoYW5nZWQoKX0pLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodCl9X3NlbGVjdGVkRWRnZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkRWRnZTt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpLHQmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZChIaS5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZSh0KSksdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKHQpfV9ub2RlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmdGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5kZXRhaWwubmFtZSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZWRnZVNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdC5kZXRhaWwuZWRnZUdyb3VwKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIix0LmRldGFpbC5lZGdlRGF0YSkpLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X25vZGVIaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIix0LmRldGFpbC5uYW1lKX1fbm9kZVVuaGlnaGxpZ2h0ZWQodCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsbnVsbCl9X25vZGVUb2dnbGVFeHBhbmQodCl7dGhpcy5fbm9kZVNlbGVjdGVkKHQpO3ZhciByPXQuZGV0YWlsLm5hbWUsbj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpO24ubm9kZS50eXBlIT09anQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShyKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuc2V0Tm9kZUV4cGFuZGVkKG4pfSw3NSksUG8oe2FjdGlvbklkOmpyLk5PREVfRVhQQU5TSU9OX1RPR0dMRUQsZXZlbnRMYWJlbDpuLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9KSl9X25vZGVUb2dnbGVFeHRyYWN0KHQpe3ZhciByPXQuZGV0YWlsLm5hbWU7dGhpcy5ub2RlVG9nZ2xlRXh0cmFjdChyKX1ub2RlVG9nZ2xlRXh0cmFjdCh0KXtsZXQgcj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpO3Iubm9kZS5pbmNsdWRlPT11ci5JTkNMVURFP3Iubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREU6ci5ub2RlLmluY2x1ZGU9PXVyLkVYQ0xVREU/ci5ub2RlLmluY2x1ZGU9dXIuSU5DTFVERTpyLm5vZGUuaW5jbHVkZT10aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkocik/dXIuSU5DTFVERTp1ci5FWENMVURFLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpLFBvKHthY3Rpb25JZDpqci5OT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQsZXZlbnRMYWJlbDpyLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREU/IkF1eGlsaWFyeSB0byBNYWluIjoiTWFpbiB0byBBdXhpbGlhcnkifSl9X25vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt2YXIgcj10LmRldGFpbC5uYW1lO3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHIpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciByPW5QKHRoaXMpLG49SlMociwxMDAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKTtsZXQgaT1NeChLbCh7fSx0aGlzLmhpZXJhcmNoeVBhcmFtcykse3Nlcmllc01hcDp0aGlzLmdyYXBoSGllcmFyY2h5LmJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpfSk7YkgodGhpcy5iYXNpY0dyYXBoLGksbikudGhlbihmdW5jdGlvbihvKXt0aGlzLnNldCgiZ3JhcGhIaWVyYXJjaHkiLG8pLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfS5iaW5kKHRoaXMpKX1fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtsZXQgdD0iLiIrSGkuRWRnZS5TRUxFQ1RFRDtIdCh0KS5jbGFzc2VkKEhpLkVkZ2UuU0VMRUNURUQsITEpLmVhY2goKHIsbik9PntpZihyLmxhYmVsKXtsZXQgaT1IdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKTtyLmxhYmVsLnN0YXJ0TWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtyLmxhYmVsLnN0YXJ0TWFya2VySWR9KWApLHIubGFiZWwuZW5kTWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7ci5sYWJlbC5lbmRNYXJrZXJJZH0pYCl9fSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe3ZhciByO2lmKHQubGFiZWwpe2xldCBuPXQubGFiZWwuc3RhcnRNYXJrZXJJZHx8dC5sYWJlbC5lbmRNYXJrZXJJZDtpZihuKXtsZXQgaT1uLnJlcGxhY2UoImRhdGFmbG93LSIsInNlbGVjdGVkLSIpLG89dGhpcy4kJCgiIyIraSk7aWYoIW8pe2xldCBzPXRoaXMuJC5zY2VuZS5xdWVyeVNlbGVjdG9yKCIjIituKTtvPXM9PW51bGw/dm9pZCAwOnMuY2xvbmVOb2RlKCEwKSxvLnNldEF0dHJpYnV0ZSgiaWQiLGkpLG8uY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQtYXJyb3doZWFkIiksKHI9cz09bnVsbD92b2lkIDA6cy5wYXJlbnROb2RlKT09bnVsbHx8ci5hcHBlbmRDaGlsZChvKX1sZXQgYT10LmxhYmVsLnN0YXJ0TWFya2VySWQ/Im1hcmtlci1zdGFydCI6Im1hcmtlci1lbmQiO3RoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKS5zdHlsZShhLGB1cmwoIyR7aX0pYCl9fX1ub3QodCl7cmV0dXJuIXR9fTtEci50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUKICAgICAgICAgIGlkPSJzY2VuZSIKICAgICAgICAgIGNsYXNzPSJhdXRvIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBwcm9ncmVzcz0iW1twcm9ncmVzc11dIgogICAgICAgICAgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICA+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxEci5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sRHIucHJvdG90eXBlLCJiYXNpY0dyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJkZXZpY2VzRm9yU3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLGxvKV0sRHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJhdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxEci5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLERyLnByb3RvdHlwZSwiX3JlbmRlckRlcHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJfYWxsb3dHcmFwaFNlbGVjdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRHIucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtCdCgiYXV0b0V4dHJhY3ROb2RlcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIsImVkZ2VXaWR0aEZ1bmN0aW9uIiwiaGFuZGxlTm9kZVNlbGVjdGVkIiwiZWRnZUxhYmVsRnVuY3Rpb24iLCJoYW5kbGVFZGdlU2VsZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5IixudWxsKTtFKFtCdCgic3RhdHMiLCJkZXZpY2VzRm9yU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX3N0YXRzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkTm9kZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkRWRnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWRFZGdlQ2hhbmdlZCIsbnVsbCk7RHI9RShbeXQoInRmLWdyYXBoIildLERyKTt2YXIgY289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuaGVhbHRoUGlsbEVudHJpZXM9ZlB9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIikscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZyJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxyKXtyZXR1cm4gdCYmcn1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQscil7cmV0dXJuIHQ/dFtyXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4LG49dGhpcy5zZWxlY3RlZE5vZGUsaT10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihvfHwhbilyZXR1cm4gbnVsbDtsZXQgYT10W25dO2lmKCFhKXJldHVybiBudWxsO2xldCBzPWFbaT8wOnJdO3JldHVybiBzP3MudmFsdWUuc2xpY2UoMiw4KTpudWxsfWdldCBfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWUoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgsbj10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsaT10aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihuKXJldHVybiBpLnRvRml4ZWQoMCk7aWYobylyZXR1cm4gMDtmb3IobGV0IGEgaW4gdClyZXR1cm4gdFthXVtyXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgcj10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLHJbci5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCByIGluIHQpcmV0dXJuIHRbcl0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxyPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoISFyKXtyLmlubmVyVGV4dD0iIjtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuaW5uZXJUZXh0PVFzZShpLmZpcnN0X3RpbWVzdGFtcCksYS5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksby5hcHBlbmRDaGlsZChhKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIiksbC5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKGwsaS50ZW5zb3JfbmFtZSkscy5hcHBlbmRDaGlsZChsKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGMuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixzLmFwcGVuZENoaWxkKGMpLG8uYXBwZW5kQ2hpbGQocyk7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZihoLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSxoLmFwcGVuZENoaWxkKHUpLG8uYXBwZW5kQ2hpbGQoaCksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxmLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsZi5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAtXHUyMjFFIiksdS5hcHBlbmRDaGlsZChmKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLHAuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICtcdTIyMUUiKSx1LmFwcGVuZENoaWxkKHApfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxkLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksdS5hcHBlbmRDaGlsZChkKX16dChyKS5hcHBlbmRDaGlsZChvKX19fV9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHQscil7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt2YXIgbj14bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjZW5lIiksdGhpcy5yZW5kZXJIaWVyYXJjaHksciksaSxvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO28mJihpPW8uc2Nyb2xsSGVpZ2h0LW8uc2Nyb2xsVG9wKTt2YXIgYT10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgcz0oKT0+e28uc2Nyb2xsVG9wPW8uc2Nyb2xsSGVpZ2h0LWl9O28mJihhP3MoKTp3aW5kb3cuc2V0VGltZW91dChzLDIwKSl9KX19O2NvLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgaDIgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDEwcHggMTBweCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLXByZXZpZXcgewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogMCAxMHB4IDAgMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1sYWJlbCwKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGNvbG9yOiAjNzc3OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcKICAgKiAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducyB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLAogICAqIGFuZCBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgKiBBcHBhcmVudGx5LCB0aGUgcGFwZXItc2xpZGVyIGxhY2tzIGEgbWl4aW4gZm9yIHRob3NlIHBhZGRpbmcgdmFsdWVzLiAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1udW1iZXItaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgdGQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgIH0KCiAgICAgIC50ZW5zb3ItZGV2aWNlLXRkIHsKICAgICAgICBtYXgtd2lkdGg6IDE0MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsIHsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsID4gZGl2IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAjZXZlbnQtY291bnRzLXRoIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMTQxLCAwKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigwLCA2MiwgMjEyKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDQsIDQ3LCA0NCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQgaGVhbHRoLXBpbGwtbGVnZW5kIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgIEVuYWJsZSBhbGwgKG5vdCBqdXN0IHNhbXBsZWQpIHN0ZXBzLiBSZXF1aXJlcyBzbG93IGRpc2sgcmVhZC4KICAgICAgPC9kaXY+CiAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIKICAgICAgICBjaGVja2VkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIKICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSIKICAgICAgICAgIC8+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlCiAgICAgICAgICBhY3RpdmUKICAgICAgICAgIGhpZGRlbiQ9IltbIWFyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiCiAgICAgICAgPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgICAgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iCiAgICAgICAgICBzbmFwcwogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGgyPgogICAgICAgIEhlYWx0aCBQaWxsCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBDb3VudHMgZm9yIFNlbGVjdGVkIE5vZGUKICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIExlZ2VuZAogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaGVhbHRoUGlsbEVudHJpZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhbHRoLXBpbGwtZW50cnkiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItcHJldmlldyIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tpdGVtLmJhY2tncm91bmRfY29sb3JdXSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxhYmVsIj5bW2l0ZW0ubGFiZWxdXTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idGVuc29yLWNvdW50Ij4KICAgICAgICAgICAgW1tfY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUsCiAgICAgICAgICAgIGluZGV4KV1dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBoaWRkZW4kPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSI+CiAgICAgICAgPGgyIGlkPSJudW1lcmljLWFsZXJ0cy1oZWFkZXIiPk51bWVyaWMgQWxlcnRzPC9oMj4KICAgICAgICA8cD5BbGVydHMgYXJlIHNvcnRlZCBmcm9tIHRvcCB0byBib3R0b20gYnkgaW5jcmVhc2luZyB0aW1lc3RhbXAuPC9wPgogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIgogICAgICA+CiAgICAgICAgPHAgY2xhc3M9Im5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiI+CiAgICAgICAgICBObyBudW1lcmljIGFsZXJ0cyBzbyBmYXIuIFRoYXQgaXMgbGlrZWx5IGdvb2QuIEFsZXJ0cyBpbmRpY2F0ZSB0aGUKICAgICAgICAgIHByZXNlbmNlIG9mIE5hTiBvciAoKy8tKSBJbmZpbml0eSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBjb25jZXJuaW5nLgogICAgICAgIDwvcD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLGNvLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxjby5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJzZWxlY3RlZE5vZGUiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2JpZ2dlc3RTdGVwRXZlclNlZW4iLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtCdCgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxjby5wcm90b3R5cGUsIl91cGRhdGVBbGVydHNMaXN0IixudWxsKTtjbz1FKFt5dCgidGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIildLGNvKTt2YXIgb2N0PXt9O0tzKG9jdCx7R3JhcGhJY29uVHlwZTooKT0+bjF9KTt2YXIgbjE7KGZ1bmN0aW9uKGUpe2UuQ09OU1Q9IkNPTlNUIixlLk1FVEE9Ik1FVEEiLGUuT1A9Ik9QIixlLlNFUklFUz0iU0VSSUVTIixlLlNVTU1BUlk9IlNVTU1BUlkifSkobjF8fChuMT17fSkpO3ZhciBadT1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmVydGljYWw9ITEsdGhpcy5maWxsT3ZlcnJpZGU9bnVsbCx0aGlzLnN0cm9rZU92ZXJyaWRlPW51bGwsdGhpcy5oZWlnaHQ9MjAsdGhpcy5mYWRlZD0hMX1nZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfWdldCBfZmlsbCgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMuZmlsbE92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9GSUxMO2Nhc2UgbjEuU0VSSUVTOnJldHVybiBWbHQuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIHkwLkRFRkFVTFRfRklMTH19Z2V0IF9zdHJva2UoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLnN0cm9rZU92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9TVFJPS0U7Y2FzZSBuMS5TRVJJRVM6cmV0dXJuIFZsdC5ERUZBVUxUX1NUUk9LRTtkZWZhdWx0OnJldHVybiB5MC5ERUZBVUxUX1NUUk9LRX19X2lzVHlwZSh0LHIpe3JldHVybiB0PT09cn1fZmFkZWRDbGFzcyh0LHIpe3JldHVybiB0PyJmYWRlZC0iK3I6IiJ9fTtadS50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSBzdmcgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8IS0tIFNWRyBmb3IgZGVmaW5pdGlvbnMgLS0+CiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuCiAgICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgICB3aWR0aD0iMiIKICAgICAgICAgIGhlaWdodD0iMiIKICAgICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBlbGxpcHNlLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgICByeD0iNy41IgogICAgICAgICAgcnk9IjMiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjIiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgIHdpZHRoPSIxMiIKICAgICAgICA+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgICAgPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICAgIDwvZGVmcz4KICAgIDwvc3ZnPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ0NPTlNUJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICA+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgY3g9IjUiCiAgICAgICAgICBjeT0iNSIKICAgICAgICAgIHI9IjMiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgPjwvY2lyY2xlPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU1VNTUFSWScpXV0iPgogICAgICA8c3ZnCiAgICAgICAgd2lkdGgkPSJbW2hlaWdodF1dIgogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnT1AnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTYgOCIKICAgICAgPgogICAgICAgIDx1c2UKICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdlbGxpcHNlJyl9fSIKICAgICAgICAgIHg9IjgiCiAgICAgICAgICB5PSI0IgogICAgICAgID48L3VzZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ01FVEEnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMzcgMTYiCiAgICAgID4KICAgICAgICA8cmVjdAogICAgICAgICAgeD0iMSIKICAgICAgICAgIHk9IjEiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdyZWN0Jyl9fSIKICAgICAgICAgIHN0cm9rZS13aWR0aD0iMnB4IgogICAgICAgICAgaGVpZ2h0PSIxNCIKICAgICAgICAgIHdpZHRoPSIzNSIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjUiCiAgICAgICAgPjwvcmVjdD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMTYgMTUiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjIiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMTAiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIgogICAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIKICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgeT0iMSIKICAgICAgICAgID48L3VzZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxadS5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwiZmlsbE92ZXJyaWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwic3Ryb2tlT3ZlcnJpZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWnUucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsImZhZGVkIix2b2lkIDApO0UoW1J0KCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWnUucHJvdG90eXBlLCJfZmlsbCIsbnVsbCk7RShbUnQoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFp1LnByb3RvdHlwZSwiX3N0cm9rZSIsbnVsbCk7WnU9RShbeXQoInRmLWdyYXBoLWljb24iKV0sWnUpO3ZhciBCcz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PXFuLlNUUlVDVFVSRSx0aGlzLnRlbXBsYXRlSW5kZXg9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnZlcnRpY2FsPSExLHRoaXMuY29uc3Q9ITEsdGhpcy5zdW1tYXJ5PSExLHRoaXMuZmlsbD1udWxsLHRoaXMuaGVpZ2h0PTIwfV9jb21wdXRlRmlsbE92ZXJyaWRlKHQscixuLGksbyl7cmV0dXJuIHQmJnImJmk/a0goaSxuLHIsITEpOm99X2dldFN0cm9rZU92ZXJyaWRlKHQpe3JldHVybiB0P3RjdCh0KTpudWxsfV9nZXRUeXBlKHQscixuLGkpe2xldHtHcmFwaEljb25UeXBlOm99PW9jdDtpZih0KXN3aXRjaCh0LnR5cGUpe2Nhc2UganQuT1A6e2xldCBhPXQub3A7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIj9vLk9QOmE9PT0iQ29uc3QifHxuP28uQ09OU1Q6YS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxyP28uU1VNTUFSWTpvLk9QfWNhc2UganQuTUVUQTpyZXR1cm4gby5NRVRBO2Nhc2UganQuU0VSSUVTOnJldHVybiBvLlNFUklFU31yZXR1cm4gaX1faXNWZXJ0aWNhbCh0LHIpe3JldHVybiB0P3QuaGFzTm9uQ29udHJvbEVkZ2VzOiEhcn1fZ2V0RmFkZWQodCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dH1fb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKHQscil7bGV0e25vZGU6bixyZW5kZXJJbmZvOmksY29sb3JCeTpvLHRlbXBsYXRlSW5kZXg6YX09dGhpczt0IT09ciYmTEgodGhpcy4kLmljb24uZ2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpKSxuJiZpJiZhJiZrSChhLG8saSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07QnMudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgLS10Yi1ncmFwaC1mYWRlZDogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLWdyYXBoLWljb24KICAgICAgaWQ9Imljb24iCiAgICAgIHR5cGU9IltbX2dldFR5cGUobm9kZSwgc3VtbWFyeSwgY29uc3QsIHR5cGUpXV0iCiAgICAgIGhlaWdodD0iW1toZWlnaHRdXSIKICAgICAgZmlsbC1vdmVycmlkZT0iW1tfZmlsbE92ZXJyaWRlXV0iCiAgICAgIHN0cm9rZS1vdmVycmlkZT0iW1tfZ2V0U3Ryb2tlT3ZlcnJpZGUoX2ZpbGxPdmVycmlkZSldXSIKICAgICAgZmFkZWQ9IltbX2dldEZhZGVkKHJlbmRlckluZm8pXV0iCiAgICAgIHZlcnRpY2FsPSJbW19pc1ZlcnRpY2FsKG5vZGUsIHZlcnRpY2FsKV1dIgogICAgPjwvdGYtZ3JhcGgtaWNvbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxCcy5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQnMucHJvdG90eXBlLCJjb25zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEJzLnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsImZpbGwiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQnMucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlRmlsbE92ZXJyaWRlKG5vZGUsIHJlbmRlckluZm8sIGNvbG9yQnksIHRlbXBsYXRlSW5kZXgsIGZpbGwpIixvYnNlcnZlcjoiX29uRmlsbE92ZXJyaWRlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApO0JzPUUoW3l0KCJ0Zi1ub2RlLWljb24iKV0sQnMpO3ZhciBHYz1jbGFzcyBleHRlbmRzIEd0KG10KXtfaXRlbVR5cGVDaGFuZ2VkKCl7dGhpcy5pdGVtVHlwZSE9PSJzdWJub2RlIj90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07R2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxHYy5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCk7R2M9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0iKV0sR2MpO3ZhciBhcz1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wQ29tcGF0Q29sb3I9eTAuQ09NUEFUSUJMRSx0aGlzLl9vcEluY29tcGF0Q29sb3I9eTAuSU5DT01QQVRJQkxFLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LHIpe3JldHVybiByLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxyKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtyJiZyLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7bGV0IHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4hdHx8IXQucm9vdD9bXToodGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2luY29tcGF0aWJsZU9wc0xpc3QiKSksZGxlKHQpKX1nZXQgX29wQ29tcGF0U2NvcmUoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQmJnQucm9vdCl7dmFyIHI9dC5yb290LG49ci5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGUsaT1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlO2lmKG49PTAmJmk9PTApcmV0dXJuIDA7dmFyIG89bitpO3JldHVybiBNYXRoLmZsb29yKDEwMCpuL28pLzEwMH1yZXR1cm4gMH1nZXQgX29wQ29tcGF0U2NvcmVMYWJlbCgpe3ZhciB0PXRoaXMuX29wQ29tcGF0U2NvcmU7cmV0dXJuIHhuKCIuMCUiKSh0KX1nZXQgX3RvdGFsSW5jb21wYXRPcHMoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/dC5yb290LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlOjB9X2dyYXBoSGllcmFyY2h5Q2hhbmdlZCgpe3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksdGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihEZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KX19O2FzLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxhcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sYXMucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYXMucHJvdG90eXBlLCJub2RlVGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxhcy5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhcy5wcm90b3R5cGUsIl9vcENvbXBhdENvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGFzLnByb3RvdHlwZSwiX29wSW5jb21wYXRDb2xvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhcy5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW1J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfaW5jb21wYXRpYmxlT3BOb2RlcyIsbnVsbCk7RShbUnQoImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZSIsbnVsbCk7RShbUnQoIl9vcENvbXBhdFNjb3JlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZUxhYmVsIixudWxsKTtFKFtSdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhcy5wcm90b3R5cGUsIl90b3RhbEluY29tcGF0T3BzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGFzLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7YXM9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIildLGFzKTt2YXIgbDM9RWUoT2UoKSwxKTt2YXIgV2M9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe19pdGVtVHlwZUNoYW5nZWQoKXt0aGlzLml0ZW1UeXBlIT09InN1Ym5vZGUiP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse2NhcmROb2RlOnRoaXMuY2FyZE5vZGUubmFtZSxub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07V2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXllbGxvdy05MDApOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO1djPUUoW3l0KCJ0Zi1ub2RlLWxpc3QtaXRlbSIpXSxXYyk7dmFyIGRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hMSx0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hMSx0aGlzLl90ZW1wbGF0ZUluZGV4PW51bGx9ZXhwYW5kTm9kZSgpe3RoaXMuZmlyZSgiX25vZGUuZXhwYW5kIix0aGlzLm5vZGUpfV9nZXROb2RlKHQscil7cmV0dXJuIHIubm9kZSh0KX1fZ2V0Tm9kZVN0YXRzKHQscil7dmFyIG49dGhpcy5fZ2V0Tm9kZSh0LHIpO3JldHVybiBuP24uc3RhdHM6bnVsbH1fZ2V0VG90YWxNaWNyb3ModCl7cmV0dXJuIHQ/dC5nZXRUb3RhbE1pY3JvcygpOjB9Z2V0IF9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztyZXR1cm4gZ0godCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZighKCF0fHwhdC50b3RhbEJ5dGVzKSlyZXR1cm4gTmQodC50b3RhbEJ5dGVzLGlQKX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKCEoIXR8fCF0LmdldFRvdGFsTWljcm9zKCkpKXJldHVybiBOZCh0LmdldFRvdGFsTWljcm9zKCksb1ApfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYoISghdHx8IXQub3V0cHV0U2l6ZXx8IXQub3V0cHV0U2l6ZS5sZW5ndGgpKXJldHVybiBsMy5tYXAodC5vdXRwdXRTaXplLGZ1bmN0aW9uKHIpe3JldHVybiByLmxlbmd0aD09PTA/InNjYWxhciI6IlsiK3Iuam9pbigiLCAiKSsiXSJ9KX1fZ2V0UmVuZGVySW5mbyh0LHIpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCl9Z2V0IF9hdHRyaWJ1dGVzKCl7dmFyIHQ9dGhpcy5fbm9kZTtpZih0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjYXR0cmlidXRlc0xpc3QiKSksIXR8fCF0LmF0dHIpcmV0dXJuW107dmFyIHI9W107cmV0dXJuIGwzLmVhY2godC5hdHRyLGZ1bmN0aW9uKG4pe24ua2V5PT09aWxlP3I9ci5jb25jYXQobi52YWx1ZS5saXN0LnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybntrZXk6aSx2YWx1ZToiVG9vIGxhcmdlIHRvIHNob3cuLi4ifX0pKTpyLnB1c2goe2tleTpuLmtleSx2YWx1ZTpKU09OLnN0cmluZ2lmeShuLnZhbHVlKX0pfSkscn1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3Qoci5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHIuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT1qdC5NRVRBKXJldHVybltdO2xldCBuPXIubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQscixuKXt2YXIgaT1hPT5sMy5tYXAoYS5iYXNlRWRnZUxpc3Qscz0+e3ZhciBsPXI/cy52OnMudztyZXR1cm57bmFtZTpsLG5vZGU6dGhpcy5fZ2V0Tm9kZShsLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDpZbHQocyx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLG89ZnVuY3Rpb24oYSl7dmFyIHM9W107cmV0dXJuIGwzLmVhY2goYSxsPT57dmFyIGM9cj9sLnY6bC53OyFufHxsLmJhc2VFZGdlTGlzdC5sZW5ndGg9PTE/cz1zLmNvbmNhdChpKGwpKTpzLnB1c2goe25hbWU6Yyxub2RlOnRoaXMuX2dldE5vZGUoYyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6amx0KGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhjLHRoaXMucmVuZGVySGllcmFyY2h5KX0pfSksc30uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpvKHQucmVndWxhciksY29udHJvbDpvKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0IixRbHQodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ciYmci5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LHIpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIseUgodCkpfV90b2dnbGVHcm91cCgpe3ZhciB0PUlIKHRoaXMuX25vZGUpO3RoaXMuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnR9KX1faXNMaWJyYXJ5RnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubmFtZS5zdGFydHNXaXRoKFNhKX1faXNJblNlcmllcyh0KXtyZXR1cm4gSmx0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpfSl9fTtkbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuc3ViLWxpc3QtZ3JvdXAgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CgogICAgICAuYXR0ci1sZWZ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgLnN1Yi1saXN0LXRhYmxlLWNlbGw6bGFzdC1jaGlsZCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1jZWxsIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sRGVwcyB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgOHB4OwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSI+CiAgICAgICAgICAgIDx0Zi13YnItc3RyaW5nIHZhbHVlPSJbW19ub2RlLm5hbWVdXSIgZGVsaW1pdGVyLXBhdHRlcm49Ii8iPgogICAgICAgICAgICA8L3RmLXdici1zdHJpbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgICAgbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICByZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhncmFwaE5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5vcH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIE9wZXJhdGlvbjoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLm9wXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5tZXRhZ3JhcGh9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBTdWJncmFwaDoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLmNhcmRpbmFsaXR5XV08L3NwYW4+IG5vZGVzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBhdHRyaWJ1dGVzIj4KICAgICAgICAgICAgQXR0cmlidXRlcyAoPHNwYW4+W1tfYXR0cmlidXRlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImF0dHJpYnV0ZXNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19hdHRyaWJ1dGVzXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJpbnB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFByZWQpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sUHJlZCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2xdXSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBzdWNjZXNzb3JzIj4KICAgICAgICAgICAgT3V0cHV0cyAoPHNwYW4+W1tfdG90YWxTdWNjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJvdXRwdXRzTGlzdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc3VjY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvciIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdWNjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sU3VjYyIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFN1Y2N9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbaXRlbV1dIDxiciAvPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgICAgVXNhZ2VzIG9mIHRoZSBGdW5jdGlvbiAoPHNwYW4+W1tfZnVuY3Rpb25Vc2FnZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfZnVuY3Rpb25Vc2FnZXNdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0iZnVuY3Rpb25Vc2FnZXMiCiAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc0xpYnJhcnlGdW5jdGlvbihfbm9kZSldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlSW5jbHVkZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19hdXhCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2lzSW5TZXJpZXMoX25vZGUpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtaW5jbHVkZS1ncm91cCI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiCiAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUdyb3VwIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2dyb3VwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbi5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxkbi5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbi5wcm90b3R5cGUsIm5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZG4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbi5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRuLnByb3RvdHlwZSwiX29wZW5lZENvbnRyb2xTdWNjIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiX2F1eEJ1dHRvblRleHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sZG4ucHJvdG90eXBlLCJfdGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZSIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCk7RShbUnQoIl9wcmVkZWNlc3NvcnMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9zdWNjZXNzb3JzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRuLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7ZG49RShbeXQoInRmLW5vZGUtaW5mbyIpXSxkbik7dmFyIHNzPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LHIpe3JldHVybiB0JiZyJiZPYmplY3Qua2V5cyhyKS5sZW5ndGg+MH1fZXF1YWxzKHQscil7cmV0dXJuIHQ9PT1yfX07c3MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7c2VsZWN0ZWROb2RlfX0iPgogICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCI+CiAgICAgICAgPHRmLW5vZGUtaW5mbwogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZmxhdC1ncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgZ3JhcGgtbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIgogICAgICAgICAgbm9kZS1pbmNsdWRlPSJbW3NlbGVjdGVkTm9kZUluY2x1ZGVdXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZAogICAgICAgIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgIG5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUKICAgICAgaXM9ImRvbS1pZiIKICAgICAgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iCiAgICA+CiAgICAgIDx0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQKICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICA+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxzcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sc3MucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHNzLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNzLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sc3MucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzcy5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc3MucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxzcy5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzcy5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCk7c3M9RShbeXQoInRmLWdyYXBoLWluZm8iKV0sc3MpO3ZhciBjdXI9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9LHRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ9ITEsdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5jb21wYXROb2RlVGl0bGU9IlRQVSBDb21wYXRpYmlsaXR5In1maXQoKXt0aGlzLiQuZ3JhcGguZml0KCl9ZG93bmxvYWRBc0ltYWdlKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSl9X2lzTm90Q29tcGxldGUodCl7cmV0dXJuIHQudmFsdWU8MTAwfV9nZXRDb250YWluZXJDbGFzcyh0KXt2YXIgcj0iY29udGFpbmVyIjtyZXR1cm4gdC5lcnJvciYmKHIrPSIgZXJyb3IiKSx0aGlzLl9pc05vdENvbXBsZXRlKHQpJiYocis9IiBsb2FkaW5nIikscn1fb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9X29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfV91cGRhdGVOb2RlSW5jbHVkZSgpe2xldCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTp1ci5VTlNQRUNJRklFRH1fc2xpbUdyYXBoQ2hhbmdlZCgpe2lmKCF0aGlzLmdyYXBoKXJldHVybjtsZXR7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDpyfT1jdXI7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPnImJnRoaXMuY29sb3JCeT09PXFuLlNUUlVDVFVSRSYmKHRoaXMuY29sb3JCeT1xbi5OT05FKX1fZW5zdXJlVGVtcGxhdGVzKCl7IXRoaXMuZ3JhcGhIaWVyYXJjaHl8fHRoaXMuY29sb3JCeSE9PXFuLlNUUlVDVFVSRXx8dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCl9fTt0bi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixvcyldLHRuLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSx0bi5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRuLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJkZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx0bi5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx0bi5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImVkZ2VXaWR0aEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRuLnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdG4ucHJvdG90eXBlLCJfaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGFuZGxlTm9kZVNlbGVjdGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQnQoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfdXBkYXRlTm9kZUluY2x1ZGUiLG51bGwpO0UoW0J0KCJncmFwaCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfc2xpbUdyYXBoQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfZW5zdXJlVGVtcGxhdGVzIixudWxsKTt0bj1FKFt5dCgidGYtZ3JhcGgtYm9hcmQiKV0sdG4pO3ZhciBjMz1FZShPZSgpLDEpO3ZhciBKdT1jbGFzc3tpc05vdFRwdU9wKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJjcHU6IikhPS0xfHx0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJncHU6IikhPS0xPyEwOnQudG9Mb3dlckNhc2UoKS5zZWFyY2goInRwdSIpPT0tMX1vcFZhbGlkKHQpe3JldHVybiB0Lm5hbWUuc2VhcmNoKFNhKT09MHx8IXQub3B8fHQuZGV2aWNlJiZ0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpfHx0LmRldmljZSYmdC5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIikhPS0xPyEwOmMzLmluY2x1ZGVzKEp1LldISVRFTElTVCx0Lm9wKX19O0p1LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2Z1bmN0aW9uIFpsZShlLHQpe2lmKHQ9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ29tcGF0aWJpbGl0eSBwcm92aWRlciByZXF1aXJlZCwgYnV0IGdvdDogIit0KTtjMy5lYWNoKGUubm9kZXMscj0+e3IuY29tcGF0aWJsZT10Lm9wVmFsaWQociksYzMuZWFjaChyLmluRW1iZWRkaW5ncyxuPT57bi5jb21wYXRpYmxlPXQub3BWYWxpZChuKX0pLGMzLmVhY2goci5vdXRFbWJlZGRpbmdzLG49PntuLmNvbXBhdGlibGU9dC5vcFZhbGlkKG4pfSl9KX12YXIgZ1A9RWUoT2UoKSwxKTt2YXIgSmxlPUVlKE9lKCksMSk7dmFyIElsPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yYXdSZWdleElucHV0PSIiLHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD0iIix0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXk9MTUwLHRoaXMuX21heFJlZ2V4UmVzdWx0cz00Mn1nZXQgX3JlZ2V4SW5wdXQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeSxyPXRoaXMuX3Jhd1JlZ2V4SW5wdXQ7cmV0dXJuIHIudHJpbSgpfV9yZWdleElucHV0Q2hhbmdlZCgpe3ZhciB0PXRoaXMuX3JlZ2V4SW5wdXQ7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfV9jbGVhclNlYXJjaFJlc3VsdHMoKXt0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIsW10pfV9yZXF1ZXN0U2VhcmNoKCl7aWYoIXRoaXMuX3NlYXJjaFBlbmRpbmcpe2lmKHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQpe3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7cmV0dXJufXRoaXMuX3NlYXJjaFBlbmRpbmc9ITAsdGhpcy5fZXhlY3V0ZVNlYXJjaCgpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0sdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KX19X2V4ZWN1dGVTZWFyY2goKXtpZih0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9dGhpcy5fcmVnZXhJbnB1dCwhdGhpcy5fcmVnZXhJbnB1dCl7dGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7cmV0dXJufXRyeXt2YXIgdD1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGkpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn1sZXQgcj1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7SmxlLmVhY2gobiwoaSxvKT0+e2lmKHIubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7IXQudGVzdChvKXx8ci5wdXNoKG8pfSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLHIpfV9tYXRjaENsaWNrZWQodCl7bGV0IHI9dC5tb2RlbC5pdGVtO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHIpLFBvKHthY3Rpb25JZDpqci5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07SWwudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0icnVucy1yZWdleCIKICAgICAgICBsYWJlbD0iU2VhcmNoIG5vZGVzIChyZWdleCkiCiAgICAgICAgdmFsdWU9Int7X3Jhd1JlZ2V4SW5wdXR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cy1hbmNob3IiPgogICAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3JlZ2V4TWF0Y2hlc11dIj4KICAgICAgICAgICAgPGRpdiBpZD0ic2VhcmNoLW1hdGNoIiBvbi1jbGljaz0iX21hdGNoQ2xpY2tlZCI+W1tpdGVtXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzZWFyY2gtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI3J1bnMtcmVnZXggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMtYW5jaG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cyB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlyZWN0aW9uOiBydGw7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2g6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS13ZWFrKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJfcmF3UmVnZXhJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoVGltZW91dERlbGF5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoUGVuZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElsLnByb3RvdHlwZSwiX3JlZ2V4TWF0Y2hlcyIsdm9pZCAwKTtFKFtSdCgicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbC5wcm90b3R5cGUsIl9yZWdleElucHV0IixudWxsKTtFKFtCdCgiX3JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLElsLnByb3RvdHlwZSwiX3JlZ2V4SW5wdXRDaGFuZ2VkIixudWxsKTtJbD1FKFt5dCgidGYtZ3JhcGgtbm9kZS1zZWFyY2giKV0sSWwpO3ZhciBsY3Q9L2RldmljZTooW146XSs6WzAtOV0rKSQvLHNjdD1be3JlZ2V4OmxjdH1dLFFsZT1bXSx1dXI9bmV3IFNldChbcW4uQ09NUFVURV9USU1FLHFuLk1FTU9SWV0pLFBuPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PXFuLHRoaXMuc3RhdHM9bnVsbCx0aGlzLmRldmljZXNGb3JTdGF0cz1udWxsLHRoaXMuY29sb3JCeT1xbi5TVFJVQ1RVUkUsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTAsdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9ITAsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPUZzLk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLkdSQVBIX1RZUEVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlfSl9X29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLk5PREVfQ09MT1JfTU9ERV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5jb2xvckJ5fSl9X29uVHJhY2VJbnB1dHNDaGFuZ2VkQnlVc2VyR2VzdHVyZSgpe1BvKHthY3Rpb25JZDpqci5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYodCE9bnVsbCl7dmFyIHI9e30sbj1nUC5lYWNoKHQuZGV2X3N0YXRzLGZ1bmN0aW9uKGkpe3ZhciBvPWdQLnNvbWUoc2N0LGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlZ2V4LnRlc3QoaS5kZXZpY2UpfSksYT1nUC5zb21lKFFsZSxmdW5jdGlvbihzKXtyZXR1cm4gcy5yZWdleC50ZXN0KGkuZGV2aWNlKX0pO28mJiFhJiYocltpLmRldmljZV09ITApfSk7dGhpcy5zZXQoImRldmljZXNGb3JTdGF0cyIscil9fWdldCBfY3VycmVudERldmljZXMoKXt2YXIgdD10aGlzLmRldmljZXNGb3JTdGF0cztsZXQgcj10aGlzLnN0YXRzLG89KHI/ci5kZXZfc3RhdHM6W10pLm1hcChzPT5zLmRldmljZSkuZmlsdGVyKHM9PnNjdC5zb21lKGw9PmwucmVnZXgudGVzdChzKSkpLGE9emx0KG8pO2lmKGEubGVuZ3RoPT0xKXtsZXQgcz1hWzBdLm1hdGNoKGxjdCk7cyYmKGFbMF09c1sxXSl9cmV0dXJuIG8ubWFwKChzLGwpPT57bGV0IGM9bnVsbDtyZXR1cm4gUWxlLmZvckVhY2godT0+e3UucmVnZXgudGVzdChzKSYmKGM9dS5tc2cpfSkse2RldmljZTpzLHN1ZmZpeDphW2xdLHVzZWQ6dD09bnVsbD92b2lkIDA6dFtzXSxpZ25vcmVkTXNnOmN9fSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtsZXQgcj10LnRhcmdldCxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VzRm9yU3RhdHMpLGk9ci52YWx1ZTtyLmNoZWNrZWQ/bltpXT0hMDpkZWxldGUgbltpXSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixuKX1fbnVtVGFncyh0LHIpe3JldHVybiB0aGlzLl9nZXRUYWdzKHQscikubGVuZ3RofV9nZXRUYWdzKHQscil7cmV0dXJuIXR8fCF0W3JdP1tdOnRbcl0udGFnc31fZml0KCl7dGhpcy5maXJlKCJmaXQtdGFwIil9X2lzR3JhZGllbnRDb2xvcmluZyh0LHIpe3JldHVybiB1dXIuaGFzKHIpJiZ0IT1udWxsfV9lcXVhbHModCxyKXtyZXR1cm4gdD09PXJ9Z2V0IF9jdXJyZW50RGV2aWNlUGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zO2xldCByPXQuZGV2aWNlLmZpbHRlcihvPT5zY3Quc29tZShhPT5hLnJlZ2V4LnRlc3Qoby5kZXZpY2UpKSksbj16bHQoci5tYXAobz0+by5kZXZpY2UpKTtpZihuLmxlbmd0aD09MSl7dmFyIGk9blswXS5tYXRjaChsY3QpO2kmJihuWzBdPWlbMV0pfXJldHVybiByLm1hcCgobyxhKT0+KHtkZXZpY2U6blthXSxjb2xvcjpvLmNvbG9yfSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXM7cmV0dXJuIHQueGxhX2NsdXN0ZXJ9Z2V0IF9jdXJyZW50R3JhZGllbnRQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXMscj10aGlzLmNvbG9yQnk7aWYoIXRoaXMuX2lzR3JhZGllbnRDb2xvcmluZyh0aGlzLnN0YXRzLHIpKXJldHVybiBudWxsO2xldCBuPXRbcl0saT1uLm1pblZhbHVlLG89bi5tYXhWYWx1ZTtyZXR1cm4gcj09PXFuLk1FTU9SWT8oaT1OZChpLGlQKSxvPU5kKG8saVApKTpyPT09cW4uQ09NUFVURV9USU1FJiYoaT1OZChpLG9QKSxvPU5kKG8sb1ApKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpvLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7dmFyIGE7bGV0IHI9KGE9dC50YXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDphWzBdO2lmKCFyKXJldHVybjtsZXQgbj1yLm5hbWUsaT1uLmxhc3RJbmRleE9mKCIuIik7aT49MCYmKG49bi5zdWJzdHJpbmcoMCxpKSk7bGV0IG89bi5sYXN0SW5kZXhPZigiLyIpO28+PTAmJihuPW4uc3Vic3RyaW5nKG8rMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksUG8oe2FjdGlvbklkOmpyLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTX0pfV9kYXRhc2V0c0NoYW5nZWQodCxyKXt2YXIgbjtyIT1udWxsJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKChuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pPT1udWxsP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQscixuLGkpe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dP251bGw6e3J1bjp0W3JdLm5hbWUsdGFnOnRbcl0udGFnc1tuXS50YWcsdHlwZTppfX1fc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQodCl7dmFyIHI7IXRoaXMuZGF0YXNldHN8fCh0aGlzLmNvbG9yQnk9cW4uU1RSVUNUVVJFLHRoaXMuX3NlbGVjdGVkVGFnSW5kZXg9MCx0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpLHRoaXMudHJhY2VJbnB1dHM9ITEsdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZSgocj10aGlzLmRhdGFzZXRzW3RdKT09bnVsbD92b2lkIDA6ci5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtsZXR7ZGF0YXNldHM6dCxfc2VsZWN0ZWRSdW5JbmRleDpyLF9zZWxlY3RlZFRhZ0luZGV4Om59PXRoaXM7aWYoIXR8fCF0W3JdfHwhdFtyXS50YWdzW25dfHx0W3JdLnRhZ3Nbbl0ub3BHcmFwaClyZXR1cm4gRnMuT1BfR1JBUEg7bGV0IGk9dFtyXTtyZXR1cm4gaS50YWdzW25dLnByb2ZpbGU/RnMuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP0ZzLkNPTkNFUFRVQUxfR1JBUEg6RnMuT1BfR1JBUEh9X2dldEZpbGUoKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9X3NldERvd25sb2FkRmlsZW5hbWUodCl7dGhpcy5fZG93bmxvYWRGaWxlbmFtZT0odHx8ImdyYXBoIikrIi5wbmcifV9zdGF0c05vdE51bGwodCl7cmV0dXJuIHQhPT1udWxsfV90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfV9nZXRUb2dnbGVMZWdlbmRJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn1fZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5vcEdyYXBofV9nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLnByb2ZpbGV9X2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5jb25jZXB0dWFsR3JhcGh9fTtQbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjNTU1OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZV8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZF8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICNmZmY7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogI2YzZjNmMzsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICNlZWU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogNXB4IDAgNXB4IDVweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyB7CiAgICAgICAgcGFkZGluZzogMCAyMHB4IDIwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtaG9sZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciB7CiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yKTsKICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciwKICAgICAgLmxlZ2VuZC1jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICB9CiAgICAgIHN2Zy5pY29uLAogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblZhbHVlcyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblN0YXJ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgICAuZG9tYWluRW5kIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNvbG9yQm94IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLmltYWdlLWljb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZ3JheSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogOHB4IDVweCA4cHggMDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3IpOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5idXR0b24tdGV4dCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICAudXBsb2FkLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24taWNvbiB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIuY29udHJvbC1vcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMTVweCAxNXB4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICBzcGFuLmNvdW50ZXIgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICB9CgogICAgICAucnVucy1yb3cgLnRpdGxlLAogICAgICAudGFncy1yb3cgLnRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IHBhcGVyLWl0ZW0sCiAgICAgIC50YWdzLXJvdyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQuZ3JhZGllbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICB9CgogICAgICAvKiogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyB0aGF0IHN1cHByZXNzIHBvaW50ZXIgZXZlbnRzIGZvciBkaXNhYmxlZCBidXR0b25zLiBPdGhlcndpc2UsIHRoZSAqLwogICAgICAvKiAgdG9vbHRpcHMgZG8gbm90IGFwcGVhci4gKi8KICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAubGVnZW5kLWNsYXJpZmllciB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBoZWxwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgcGFwZXItdG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICB9CgogICAgICAvKiogT3RoZXJ3aXNlLCBwb2x5bWVyIFVJIGNvbnRyb2xzIGFwcGVhciBhdG9wIG5vZGUgc2VhcmNoLiAqLwogICAgICB0Zi1ncmFwaC1ub2RlLXNlYXJjaCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDx0Zi1ncmFwaC1ub2RlLXNlYXJjaAogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtbm9kZS1zZWFyY2g+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLXRhcD0iX2ZpdCIgYWx0PSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXNwZWN0LXJhdGlvIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5GaXQgdG8gc2NyZWVuPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgIG9uLWNsaWNrPSJkb3dubG9hZCIKICAgICAgICAgIGFsdD0iRG93bmxvYWQgUE5HIgogICAgICAgID4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS1kb3dubG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+RG93bmxvYWQgUE5HPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfZ2V0RmlsZSIKICAgICAgICAgICAgYWx0PSJVcGxvYWQgZmlsZSIKICAgICAgICAgICAgdGl0bGU9IlVwbG9hZCBhIHBidHh0IGZpbGUgdG8gdmlldyBhIGdyYXBoIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS11cGxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+VXBsb2FkIGZpbGU8L3NwYW4+CiAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgICAgIGlkPSJmaWxlIgogICAgICAgICAgICAgIG5hbWU9ImZpbGUiCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfdXBkYXRlRmlsZUlucHV0IgogICAgICAgICAgICAgIGFjY2VwdD0iLnBidHh0IgogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHJ1bnMtcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICBSdW4gPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgIG5vaW5rCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkUnVuSW5kZXh9fSIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciB0YWdzLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciIKICAgICAgICAgICAgICA+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgICAgbm9pbmsKICAgICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWdJbmRleH19IgogICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkdyYXBoIHR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZEdyYXBoVHlwZX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPCEtLSBOb3RlIHRoYXQgdGhlIG5hbWUgaGFzIHRvIG1hdGNoIHRoYXQgb2YgdGZfZ3JhcGhfY29tbW9uLlNlbGVjdGlvblR5cGUuIC0tPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJvcF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+T3AgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJjb25jZXB0dWFsX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPkNvbmNlcHR1YWwgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJwcm9maWxlIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Qcm9maWxlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPk5vZGUgb3B0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICBjaGVja2VkPSJ7e3RyYWNlSW5wdXRzfX0iCiAgICAgICAgICBvbi1jaGFuZ2U9Il9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YXV0b0V4dHJhY3ROb2Rlc319Ij4KICAgICAgICAgIEF1dG8tZXh0cmFjdCBoaWdoLWRlZ3JlZSBub2RlcwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICAgICAgPlNob3cgaGVhbHRoIHBpbGxzPC9wYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Db2xvciBieTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5Lk5PTkVdXSI+Tm9uZTwvcGFwZXItcmFkaW8tYnV0dG9uPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LlNUUlVDVFVSRV1dIgogICAgICAgICAgICA+U3RydWN0dXJlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5ERVZJQ0VdXSIKICAgICAgICAgICAgPkRldmljZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuWExBX0NMVVNURVJdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgID4KICAgICAgICAgICAgWExBIGNsdXN0ZXIKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IFhMQSBjbHVzdGVyIGlzIG9ubHkgZW5hYmxlZCBpZiBhdCBsZWFzdCAxIG9wIHNwZWNpZmllcwogICAgICAgICAgICBhbiBYTEEgY2x1c3Rlci4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuQ09NUFVURV9USU1FXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBjb21wdXRlIHRpbWUgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5NRU1PUlldXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIE1lbW9yeQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuT1BfQ09NUEFUSUJJTElUWV1dIgogICAgICAgICAgPgogICAgICAgICAgICBUUFUgY29tcGF0aWJpbGl0eQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgd2hldGhlciBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSBmb3IgdGhlIFRQVSBkZXZpY2UuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGVnZW5kLXRvb2xiYXIiIG9uLWNsaWNrPSJfdG9nZ2xlTGVnZW5kT3BlbiI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZS1sZWdlbmQtdGV4dCI+TGVnZW5kPC9zcGFuPgogICAgICAgIDxpcm9uLWljb24KICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLWJ1dHRvbiIKICAgICAgICA+CiAgICAgICAgPC9pcm9uLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIiBjbGFzcz0ibGVnZW5kLWNvbnRlbnQiPgogICAgICAgIDwhLS0gQ29sb3ItbW9kZS1zcGVjaWZpYyBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNHcmFkaWVudENvbG9yaW5nKHN0YXRzLCBjb2xvckJ5KV1dIj4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBjbGFzcz0iY29sb3ItdGV4dCBncmFkaWVudC1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudCIKICAgICAgICAgICAgICAgICAgeDE9IjAlIgogICAgICAgICAgICAgICAgICB5MT0iMCUiCiAgICAgICAgICAgICAgICAgIHgyPSIxMDAlIgogICAgICAgICAgICAgICAgICB5Mj0iMCUiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InN0YXJ0IgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5zdGFydENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVuZCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjEwMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5lbmRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgd2lkdGg9IjEzNSIKICAgICAgICAgICAgICAgIGhlaWdodD0iMjAiCiAgICAgICAgICAgICAgICBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIKICAgICAgICAgICAgICAgIHN0cm9rZT0iYmxhY2siCiAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblZhbHVlcyBjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5FbmQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5tYXhWYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIiAvPgogICAgICAgICAgICA8ZGl2PkRldmljZXMgaW5jbHVkZWQgaW4gc3RhdHM6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VzXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyBkZXZpY2VzLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgICA+PGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlJD0iW1tpdGVtLmRldmljZV1dIgogICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iCiAgICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX2RldmljZUNoZWNrYm94Q2xpY2tlZCIKICAgICAgICAgICAgICAgICAgLz48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbaXRlbS5zdWZmaXhdXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2l0ZW0uaWdub3JlZE1zZ11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICAgIGljb249ImhlbHAiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGVscC1pY29uIgogICAgICAgICAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICA+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPiBjb2xvcnMgPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+c2FtZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ2RldmljZScpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iW1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAneGxhX2NsdXN0ZXInKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI3VuZmlsbGVkLXJlY3QiCiAgICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS54bGFfY2x1c3Rlcl1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjZ3JleS1yZWN0IgogICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIFhMQSBjbHVzdGVyPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+VmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2RiNDQzNyIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPkludmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RhdHNOb3ROdWxsKHN0YXRzKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmFkZWQ+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVudXNlZCBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBDb21tb24gbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4oKiA9IGV4cGFuZGFibGUpPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVuY2Fwc3VsYXRlcyBhIHNldCBvZiBub2Rlcy4gTmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbCBhbmQKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHNjb3BlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgcGVyZm9ybXMgYW4gb3BlcmF0aW9uLiBUaGVzZSBub2RlcyBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU0VSSUVTIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBVbmNvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iU0VSSUVTIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0id2hpdGUiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiM4NDg0ODQiCiAgICAgICAgICAgICAgICAgICAgICBjeD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICBjeT0iMTAiCiAgICAgICAgICAgICAgICAgICAgICByPSI1IgogICAgICAgICAgICAgICAgICAgID48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IG91dHB1dHMgYSBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU1VNTUFSWSIgaGVpZ2h0PSIyMCI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgU3VtbWFyeQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIERhdGFmbG93IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgICAgdXB3YXJkcyB1bmxlc3MgYXJyb3doZWFkcyBzcGVjaWZ5IG90aGVyd2lzZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9IjIsIDIiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY3kgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYmV0d2VlbiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjcmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoYXQgdGhlIG91dGdvaW5nIG9wZXJhdGlvbiBub2RlIGNhbiBtdXRhdGUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyB0ZW5zb3IuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sUG4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUG4ucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUG4ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxQbi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFBuLnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsImhlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKTtFKFtSdCgiZGV2aWNlc0ZvclN0YXRzIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFBuLnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpO0UoW1J0KCJjb2xvckJ5UGFyYW1zIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUG4ucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKTtQbj1FKFt5dCgidGYtZ3JhcGgtY29udHJvbHMiKV0sUG4pO2Z1bmN0aW9uIGh1cihlKXtpZihlPT09InRydWUiKXJldHVybiEwO2lmKGU9PT0iZmFsc2UiKXJldHVybiExO2lmKGVbMF09PT0nIicpcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSk7bGV0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocik/ZTpyfWZ1bmN0aW9uIHRjZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntmZXRjaChlKS50aGVuKG49PntuLm9rP24uYXJyYXlCdWZmZXIoKS50aGVuKHQscik6bi50ZXh0KCkudGhlbihyLHIpfSl9KX1mdW5jdGlvbiBlY2UoZSx0KXtyZXR1cm4gWnNlKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+ZT09bnVsbD9Qcm9taXNlLnJlc29sdmUobnVsbCk6dGNlKGUpLHQsanIuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4ocj0+bUgoIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5yIT1udWxsP2d1cihyKTpQcm9taXNlLnJlc29sdmUobnVsbCksdCxqci5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpfWZ1bmN0aW9uIHJjZShlLHQscil7cmV0dXJuIG1IKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPURhdGUubm93KCk7aWYodCl7bGV0IG89eWllbGQgbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD0oKT0+YShsLnJlc3VsdCksbC5vbmVycm9yPSgpPT5zKGwuZXJyb3IpLGwucmVhZEFzQXJyYXlCdWZmZXIodCl9KTtyZXR1cm4gUG8oe3RpbWluZ0lkOmpyLkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSxldmVudFZhbHVlOkRhdGUubm93KCktbn0pLG99bGV0IGk9eWllbGQgdGNlKGUpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSxpfSkscixqci5GRVRDSF9QQlRYVF9CWVRFUykudGhlbihuPT5tSCgiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9Pm11cihuKSxyLGpyLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUKSl9ZnVuY3Rpb24gZnVyKGUsdCxyPTFlNixuPWAKYCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShzLGwsYyl7bGV0IHU9Yz49ZS5ieXRlTGVuZ3RoLGg9bC5zcGxpdChuKTtoWzBdPXMraFswXTtsZXQgZj11PyIiOmgucG9wKCk7Zm9yKGxldCBnIG9mIGgpdHJ5e3QoZyl9Y2F0Y2goXyl7byhfKTtyZXR1cm59aWYodSl7aSghMCk7cmV0dXJufWxldCBwPW5ldyBCbG9iKFtlLnNsaWNlKGMsYytyKV0pLGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmxvYWQ9ZnVuY3Rpb24oZyl7YShmLGcudGFyZ2V0LnJlc3VsdCxjK3IpfSxkLnJlYWRBc1RleHQocCl9YSgiIiwiIiwwKX0pfXZhciBwdXI9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5pbnB1dF9hcmciOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5vdXRwdXRfYXJnIjohMCwibGlicmFyeS52ZXJzaW9ucyI6ITAsbm9kZTohMCwibm9kZS5pbnB1dCI6ITAsIm5vZGUuYXR0ciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITB9LGR1cj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZnVuY3Rpb24gbXVyKGUpe3JldHVybiBuY2UoZSxwdXIpfWZ1bmN0aW9uIGd1cihlKXtyZXR1cm4gbmNlKGUsZHVyKS50aGVuKHQ9PnQuc3RlcF9zdGF0cyl9ZnVuY3Rpb24gbmNlKGUsdCl7bGV0IHI9e30sbj1bXSxpPVtdLG89cjtmdW5jdGlvbiBhKGwpe2xldCBjPWwuaW5kZXhPZigiOiIpLHU9bC5zdWJzdHJpbmcoMCxjKS50cmltKCksaD1odXIobC5zdWJzdHJpbmcoYysyKS50cmltKCkpO3JldHVybntuYW1lOnUsdmFsdWU6aH19ZnVuY3Rpb24gcyhsLGMsdSxoKXtsZXQgZj1sW2NdO2Y9PW51bGw/bFtjXT1oLmpvaW4oIi4iKWluIHQ/W3VdOnU6QXJyYXkuaXNBcnJheShmKT9mLnB1c2godSk6bFtjXT1bZix1XX1yZXR1cm4gZnVyKGUsZnVuY3Rpb24obCl7aWYobD1sLnRyaW0oKSwhIWwpc3dpdGNoKGxbbC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGM9bC5zdWJzdHJpbmcoMCxsLmxlbmd0aC0yKS50cmltKCksdT17fTtuLnB1c2gobyksaS5wdXNoKGMpLHMobyxjLHUsaSksbz11O2JyZWFrO2Nhc2UifSI6bz1uLnBvcCgpLGkucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgaD1hKGwpO3MobyxoLm5hbWUsaC52YWx1ZSxpLmNvbmNhdChoLm5hbWUpKTticmVha319KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX1mdW5jdGlvbiBvY2UoZSx0LHIsbj1uZXcgSnUsaT1yMyl7bGV0IG89SlMoZSwzMCwiRGF0YSIpLGE9SlMoZSwyMCwiR3JhcGgiKSxzPUpTKGUsNTAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKSxsPURhdGUubm93KCk7cmV0dXJuIHJjZSh0LHIsbykudGhlbihmdW5jdGlvbihjKXtpZighYy5ub2RlKXRocm93IG5ldyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtyZXR1cm4gbGxlKGMsc2xlLGEpfSwoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkudGhlbihjPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7WmxlKGMsbik7bGV0IHU9eWllbGQgYkgoYyxpLHMpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLWx9KSx7Z3JhcGg6YyxncmFwaEhpZXJhcmNoeTp1fX0pKS5jYXRjaChjPT57bGV0IHU9YEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLgoKJHtjfWA7dGhyb3cgZS5yZXBvcnRFcnJvcih1LGMpLFBvKHt0aW1pbmdJZDpqci5HUkFQSF9MT0FEX0ZBSUxFRCxldmVudFZhbHVlOkRhdGUubm93KCktbH0pLGN9KX12YXIgSHM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyPW5ldyBKdSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLl90ZW1wbGF0ZT1udWxsfV9zZWxlY3Rpb25DaGFuZ2VkKCl7IXRoaXMuc2VsZWN0aW9ufHx0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX1fbG9hZCh0KXtsZXR7cnVuOnIsdGFnOm4sdHlwZTppfT10O3N3aXRjaChpKXtjYXNlIEZzLk9QX0dSQVBIOmNhc2UgRnMuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7bGV0IG89bmV3IFVSTFNlYXJjaFBhcmFtcztvLnNldCgicnVuIixyKSxvLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGk9PT1Gcy5DT05DRVBUVUFMX0dSQVBIKSksbiYmby5zZXQoInRhZyIsbik7bGV0IGE9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixvKTtyZXR1cm4gdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpyLHRhZzpufX0pfWNhc2UgRnMuUFJPRklMRTp7bGV0e3RhZ3M6b309dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpmfSk9PmY9PT1yKSxzPW8uZmluZChmPT5mLnRhZz09PW4pLm9wR3JhcGg/bjpudWxsO2NvbnNvbGUuYXNzZXJ0KG8uZmluZChmPT5mLnRhZz09PXMpLGBSZXF1aXJlZCB0YWcgKCR7c30pIGlzIG1pc3NpbmcuYCk7bGV0IGM9IXRoaXMuX2dyYXBoUnVuVGFnfHx0aGlzLl9ncmFwaFJ1blRhZy5ydW4hPT1yfHx0aGlzLl9ncmFwaFJ1blRhZy50YWchPT1zP3RoaXMuX2xvYWQoe3J1bjpyLHRhZzpzLHR5cGU6RnMuT1BfR1JBUEh9KTpQcm9taXNlLnJlc29sdmUoKSx1PW5ldyBVUkxTZWFyY2hQYXJhbXM7dS5zZXQoInRhZyIsbiksdS5zZXQoInJ1biIscik7bGV0IGg9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsdSk7cmV0dXJuIGMudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoaCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtpfWApKX19X3JlYWRBbmRQYXJzZU1ldGFkYXRhKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9blAodGhpcyk7ZWNlKHQscikudGhlbihmdW5jdGlvbihuKXt0aGlzLl9zZXRPdXRTdGF0cyhuKX0uYmluZCh0aGlzKSl9X2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgodCxyKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2xldCBuPW5QKHRoaXMpO3JldHVybiBvY2Uobix0LHIhPT12b2lkIDA/cjpudWxsLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKGZ1bmN0aW9uKHtncmFwaDppLGdyYXBoSGllcmFyY2h5Om99KXt0aGlzLl9zZXRPdXRHcmFwaChpKSx0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShvKX0uYmluZCh0aGlzKSl9X3NlbGVjdGVkRmlsZUNoYW5nZWQoKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGVkRmlsZTtpZighdClyZXR1cm47bGV0IHI9dC50YXJnZXQsbj0oaT1yLmZpbGVzKT09bnVsbD92b2lkIDA6aVswXTshbnx8KHIudmFsdWU9IiIsdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLG4pKX19O0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIcy5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixvcyldLEhzLnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFh1KV0sSHMucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsIl9ncmFwaFJ1blRhZyIsdm9pZCAwKTtFKFtCdCgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3Rpb25DaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkIixudWxsKTtIcz1FKFt5dCgidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIpXSxIcyk7dmFyIGFjZT0icnVuIjt2YXIgT3I9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj15XyhhY2Use2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITF9KS5jYWxsKHRoaXMpLHRoaXMuX3J1bk9ic2VydmVyPXZfKGFjZSx7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57dC5jYW5jZWxsZWR8fHQudmFsdWUuZGVidWdnZXImJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxyKXtyZXR1cm4gdHx8ci5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxyKXtsZXQgbj17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeSh0KSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07ciE9PXZvaWQgMCYmKG4uc3RlcD1yKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChfZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6cixsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7dmFyIHQ9dGhpcy5faXNBdHRhY2hlZDt0aGlzLl9pbml0aWFsaXplZHx8IXR8fCh0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IEp1KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKHI9PntsZXQgbj1PYmplY3Qua2V5cyhyKTt0aGlzLl9kYXRhc2V0cz1uLnNvcnQoeGgpLm1hcChpPT57bGV0IG89cltpXSxzPU9iamVjdC5rZXlzKG8udGFncykuc29ydCh4aCkubWFwKGM9Pm8udGFnc1tjXSkubWFwKCh7dGFnOmMsY29uY2VwdHVhbF9ncmFwaDp1LG9wX2dyYXBoOmgscHJvZmlsZTpmfSk9Pih7dGFnOmMsZGlzcGxheU5hbWU6Yyxjb25jZXB0dWFsR3JhcGg6dSxvcEdyYXBoOmgscHJvZmlsZTpmfSkpLGw9by5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uc106cztyZXR1cm57bmFtZTppLHRhZ3M6bH19KSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9X2RldGVybWluZVNlbGVjdGVkRGF0YXNldCgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzRmV0Y2hlZCxyPXRoaXMuX2RhdGFzZXRzLG49dGhpcy5ydW47aWYoIW4pe3RoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtyZXR1cm59bGV0IGk9ci5maW5kSW5kZXgobz0+by5uYW1lPT09bik7aWYoaT09PS0xKXtpZih0KXtsZXQgbz10aGlzLiQkKCIjZXJyb3ItZGlhbG9nIik7by50ZXh0Q29udGVudD1gTm8gZGF0YXNldCBuYW1lZCAiJHtufSIgY291bGQgYmUgZm91bmQuYCxvLm9wZW4oKX1yZXR1cm59dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLGkpfV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLHI9dGhpcy5fZGF0YXNldHMsbj10aGlzLl9zZWxlY3RlZERhdGFzZXQ7IXR8fHIubGVuZ3RoPD1ufHx0aGlzLnNldCgicnVuIixyW25dLm5hbWUpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDt0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIT09bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47bGV0IHI9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxyKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBhPW9bMF0scz1vWzFdO2lmKCEhdGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBhKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGFbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixzKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLGEpLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQscixuKXtyZXR1cm4gdD8hcnx8IXIubGVuZ3RoP249PT0iRU1QVFkiOm49PT0iUFJFU0VOVCI6bj09PSJOT1RfTE9BREVEIn1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCh0KXt0aGlzLnJlbG9hZCgpfV9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kKCl7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCh0KXt0P3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9X21heWJlRmV0Y2hIZWFsdGhQaWxscygpeyF0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKXx8dGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtPci50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX3NlbGVjdGVkRGF0YXNldCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLGxvKV0sT3IucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sT3IucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxPci5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sT3IucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sT3IucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT3IucHJvdG90eXBlLCJfc2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9yLnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQnQoIl9pc0F0dGFjaGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwicnVuIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwiX3NlbGVjdGVkRGF0YXNldCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT3IucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCk7T3I9RShbeXQoInRmLWdyYXBoLWRhc2hib2FyZCIpXSxPcik7dmFyIE5IPUVlKE9lKCksMSk7dmFyIGtyPVZyLE1hPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPWtyLnNjYWxlT3JkaW5hbChrci5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9cix0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgcj10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxvPXRoaXMuZHgsYT10aGlzLnkscz10aGlzLl9kYXRhLGw9dGhpcy5fbmFtZSxjPXRoaXMubW9kZSx1PWtyLmhjbCh0aGlzLmNvbG9yU2NhbGUobCkpLGg9a3Iuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxmPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl19LHA9ZnVuY3Rpb24oTnQpe3JldHVybiBOdFthXX0sZD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W29dfSxnPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl0rTnRbb119LF89ZnVuY3Rpb24oTnQpe3JldHVybiBOdFtyXX07cj09PSJyZWxhdGl2ZSImJihfPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnQud2FsbF90aW1lLXNbMF0ud2FsbF90aW1lfSk7dmFyIHk9dGhpcy4kLnN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PXkud2lkdGgsYj15LmhlaWdodCxTLEM9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTtjPT09Im9mZnNldCI/KFM9Yi8yLjUsQy50b3A9Uys1KTpTPWItQy50b3AtQy5ib3R0b207dmFyIFA9eC1DLmxlZnQtQy5yaWdodCxrPWItQy50b3AtQy5ib3R0b20sTz1rci5taW4ocyxmKSxEPWtyLm1heChzLGcpLEI9a3IuZm9ybWF0KCIuM24iKSxJPWtyLmZvcm1hdCgiLjBmIik7cj09PSJ3YWxsX3RpbWUiP0k9a3IudGltZUZvcm1hdCgiJW0vJWQgJVgiKTpyPT09InJlbGF0aXZlIiYmKEk9ZnVuY3Rpb24oTnQpe3JldHVybiBrci5mb3JtYXQoIi4xciIpKE50LzM2ZTUpKyJoIn0pO3ZhciBMPXMubWFwKGZ1bmN0aW9uKE50LHplKXtyZXR1cm5ba3IubWluKE50W2ldLGYpLGtyLm1heChOdFtpXSxnKV19KSxSPXMubWFwKGZ1bmN0aW9uKE50KXtyZXR1cm4ga3IuZXh0ZW50KE50W2ldLHApfSksRj01MDAsej1rci5leHRlbnQocyxfKSxVPShyPT09IndhbGxfdGltZSI/a3Iuc2NhbGVUaW1lKCk6a3Iuc2NhbGVMaW5lYXIoKSkuZG9tYWluKHopLnJhbmdlKFswLGM9PT0ib2Zmc2V0Ij9rOjBdKSxXPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gUlt6ZV1bMV19KV0pLnJhbmdlKFtTLDBdKSxaPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFcuZG9tYWluKCkpLnJhbmdlKFtGLDBdKSxydD1rci5zY2FsZUxpbmVhcigpLmRvbWFpbihba3IubWluKHMsZnVuY3Rpb24oTnQsemUpe3JldHVybiBMW3plXVswXX0pLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gTFt6ZV1bMV19KV0pLm5pY2UoKS5yYW5nZShbMCxQXSksb3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4ocnQuZG9tYWluKCkpLnJhbmdlKFswLEZdKTtsZXQgc3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4oa3IuZXh0ZW50KHMsXykpLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLmludGVycG9sYXRlKGtyLmludGVycG9sYXRlSGNsKTt2YXIgU3Q9a3IuYXhpc0JvdHRvbShydCkudGlja3MoTWF0aC5tYXgoMixQLzIwKSksYnQ9a3IuYXhpc1JpZ2h0KFUpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tGb3JtYXQoSSksTXQ9a3IuYXhpc1JpZ2h0KFcpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tTaXplKFArNSkudGlja0Zvcm1hdChCKSxsdD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W25dK050W29dLzJ9LEt0PWtyLmxpbmUoKS54KGZ1bmN0aW9uKE50KXtyZXR1cm4gb3QobHQoTnQpKX0pLnkoZnVuY3Rpb24oTnQpe3JldHVybiBaKE50W2FdKX0pLF90PWZ1bmN0aW9uKE50KXtyZXR1cm4iTSIrb3QobHQoTnRbMF0pKSsiLCIrWigwKSsiTCIrS3QoTnQpLnNsaWNlKDEpKyJMIitvdChsdChOdFtOdC5sZW5ndGgtMV0pKSsiLCIrWigwKX0sY3Q9dGhpcy4kLnN2ZyxYPWtyLnNlbGVjdChjdCksZXQ9WC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksZHQ9WC5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUD4wJiZQPD0xNTB9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIFA+MTUwJiZQPD0zMDB9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gUD4zMDB9KSxxPWV0LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MubGVmdCsiLCIrQy50b3ArIikiKSxwdD1rci5iaXNlY3RvcihnKS5sZWZ0LGh0PWR0LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtUdC5zdHlsZSgib3BhY2l0eSIsMSksQ3Quc3R5bGUoIm9wYWNpdHkiLDEpLGF0LnN0eWxlKCJvcGFjaXR5IiwxKSxDZS5zdHlsZSgib3BhY2l0eSIsMSksaC5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7VHQuc3R5bGUoIm9wYWNpdHkiLDApLEN0LnN0eWxlKCJvcGFjaXR5IiwwKSxhdC5zdHlsZSgib3BhY2l0eSIsMCksQ2Uuc3R5bGUoIm9wYWNpdHkiLDApLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKSxJdC5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksaC5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixQdCksd3Q9aHQuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1DLmxlZnQrIiwiKy1DLnRvcCsiKSIpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLGt0PWh0LnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEocyksaWU9a3QuZXhpdCgpLnJlbW92ZSgpLGVlPWt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxMZT1lZS5tZXJnZShrdCkuc29ydChmdW5jdGlvbihOdCx6ZSl7cmV0dXJuIF8oTnQpLV8oemUpfSksYXI9cS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE50KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oTnQpKS1TOjApKyIpIn0pLGZyPWVlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKSx0dD1hci5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oTnQpe3JldHVybiBjPT09Im9mZnNldCI/LjE6MH0pLmF0dHIoInkxIixTKS5hdHRyKCJ5MiIsUykuYXR0cigieDIiLFApLCQ9ZWUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIiksSXQ9TGUuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihOdCl7cmV0dXJuIF90KE50W2ldKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLCR0PWFyLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK1AvRisiLCAiK1MvRisiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPyIiOnN0KF8oTnQpKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPzE6MH0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pLGhlPWVlLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxUdD1MZS5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pO2hlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMiksaGUuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBiZT1kdC5zZWxlY3QoIi54LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ4Il0pLG50PWJlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEN0PWJlLm1lcmdlKG50KTtudC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksbnQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLG50LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIFd0PWR0LnNlbGVjdCgiLnktYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSksZmU9V3QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYXQ9V3QubWVyZ2UoZmUpO2ZlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpLGZlLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSxmZS5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3ZhciBzZT1kdC5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLFF0PXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLENlPXNlLm1lcmdlKFF0KTtRdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxRdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksUXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxxLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5IixjPT09Im9mZnNldCI/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoYz09PSJvZmZzZXQiPy1TOjApKyIpIikuY2FsbChNdCkscS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitrKyIpIikuY2FsbChTdCkscS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsYz09PSJvZmZzZXQiPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCAiKyhjPT09Im9mZnNldCI/MDprKSsiKSIpLmNhbGwoYnQpLHEuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxxLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIik7ZnVuY3Rpb24gUHQoKXt2YXIgTnQ9a3IubW91c2UodGhpcyksemU9cnQuaW52ZXJ0KE50WzBdKSx5bj1VLmludmVydChOdFsxXSk7ZnVuY3Rpb24gV2koY24pe3JldHVybiBNYXRoLm1pbihjbltpXS5sZW5ndGgtMSxwdChjbltpXSx6ZSkpfXZhciBBcixQYT0xLzAsaG87VHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbixjeCl7dmFyIHJwPVdpKGNuKTtobz1jbjt2YXIgSz1ydChjbltpXVtycF1bbl0rY25baV1bcnBdW29dLzIpLGd0PVcoY25baV1bcnBdW2FdKSxFdD1jPT09Im9mZnNldCI/VShfKGNuKSktKFMtZ3QpOmd0LHh0PU1hdGguYWJzKE50WzFdLUV0KTtyZXR1cm4geHQ8UGEmJihQYT14dCxBcj1jbiksInRyYW5zbGF0ZSgiK0srIiwiK2d0KyIpIn0pLFR0LnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3ZhciBjeD1XaShjbik7cmV0dXJuIGNuW2ldW2N4XVthXX0pLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pLEl0LmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pO3ZhciBJYT1XaShobyk7Q3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK3J0KGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMikrIiwgIitrKyIpIn0pLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3JldHVybiBCKGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMil9KTt2YXIgbHg9YnQudGlja0Zvcm1hdCgpO2F0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oY24pe3JldHVybiJ0cmFuc2xhdGUoIitQKyIsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oQXIpKTowKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyIiOiJub25lIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGx4KF8oQXIpKX0pO3ZhciBjbT1NdC50aWNrRm9ybWF0KCk7Q2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK1ArIiwgIisoYz09PSJvZmZzZXQiPzA6VyhBcltpXVtJYV1bYV0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGNtKEFyW2ldW0lhXVthXSl9KTt2YXIgSjA9a3IubW91c2UoY3QpO2guc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhKMFswXSsxNSkrInB4LCIrKEowWzFdLTE1KSsicHgpIikuc2VsZWN0KCJzcGFuIikudGV4dChjPT09Im9mZnNldCI/Y20oQXJbaV1bSWFdW2FdKToocj09PSJzdGVwIj8ic3RlcCAiOiIiKStseChfKEFyKSkpfX19O01hLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwiZHgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE1hLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNYS5wcm90b3R5cGUsIm1vZGVUcmFuc2l0aW9uRHVyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxNYS5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxNYS5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWEucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKTtFKFtCdCgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTWEucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpO0UoW0J0KCJtb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxNYS5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKTtNYT1FKFt5dCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0sTWEpO2Z1bmN0aW9uIHl1cihlKXtsZXRbdCxyLG5dPWU7cmV0dXJue3dhbGxfdGltZTp0LHN0ZXA6cixtaW46TG0obi5tYXAoKFtpLCxdKT0+aSkpLG1heDpsdShuLm1hcCgoWyxpXSk9PmkpKSxidWNrZXRzOm4ubWFwKChbaSxvLGFdKT0+KHtsZWZ0OmkscmlnaHQ6byxjb3VudDphfSkpfX1mdW5jdGlvbiB2dXIoZSx0LHIsbj0zMCl7KHQ9PT12b2lkIDB8fHI9PW51bGwpJiYodD0wLHI9MCkscj09PXQmJihyPXQqMS4xKzEsdD10LzEuMS0xKTtsZXQgaT0oci10KS9uLG89MCxhPVtdO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBsPXQrcyppLGM9bCtpLHU9MDtmb3IoO288ZS5idWNrZXRzLmxlbmd0aDspe2xldCBoPU1hdGgubWluKHIsZS5idWNrZXRzW29dLnJpZ2h0KSxmPU1hdGgubWF4KHQsZS5idWNrZXRzW29dLmxlZnQpO2lmKGgtZj4wKXtsZXQgZD1NYXRoLm1pbihoLGMpLU1hdGgubWF4KGYsbCksZz1kLyhoLWYpKmUuYnVja2V0c1tvXS5jb3VudDt1Kz1kPjA/ZzowfWVsc2V7bGV0IGQ9Yz49cjt1Kz1sPD1mJiYoZD9oPD1jOmg8Yyk/ZS5idWNrZXRzW29dLmNvdW50OjB9aWYoaD5jKWJyZWFrO28rK31hLnB1c2goe3g6bCxkeDppLHk6dX0pfXJldHVybiBhfWZ1bmN0aW9uIHNjZShlKXtsZXQgdD1lLm1hcCh5dXIpLHI9TG0odCxpPT5pLm1pbiksbj1sdSh0LGk9PmkubWF4KTtyZXR1cm4gdC5tYXAoaT0+KHt3YWxsX3RpbWU6aS53YWxsX3RpbWUsc3RlcDppLnN0ZXAsYmluczp2dXIoaSxyLG4pfSkpfXZhciBFYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPXNjZShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHIpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odCl9cmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9fTtFYS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRWEucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxFYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVhLnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxFYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEVhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFYS5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtCdCgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3VwZGF0ZURhdGFUb0xvYWQiLG51bGwpO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFYS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RWE9RShbeXQoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKV0sRWEpO3ZhciBscz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2hpc3RvZ3JhbU1vZGU9Im9mZnNldCIsdGhpcy5fdGltZVByb3BlcnR5PSJzdGVwIix0aGlzLl9yZXN0YW1wPSExLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1fcmVkcmF3Q2F0ZWdvcnlQYW5lKHQscil7IXJ8fHQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKG49Pm4ucmVkcmF3KCkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihOSC5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49TkgubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSGlzdG9ncmFtcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtscy50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJoaXN0b2dyYW1Nb2RlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSGlzdG9ncmFtIG1vZGUiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvZmZzZXQiPm9mZnNldDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJPZmZzZXQgdGltZSBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaGlzdG9ncmFtIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlcgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIgogICAgICAgICAgICAgICAgICBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxscy5wcm90b3R5cGUsIl90aW1lUHJvcGVydHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGxzLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbHMucHJvdG90eXBlLCJfcmVzdGFtcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLGxzLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO2xzPUUoW3l0KCJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIildLGxzKTt2YXIgdTM9Y2xhc3N7Y29uc3RydWN0b3IodCxyPSEwKXt0aGlzLl9yZXF1ZXN0TWFuYWdlcj10LHRoaXMuX3VzZUh0dHBHZXQ9cn1nZXRFeHBlcmltZW50KHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL2V4cGVyaW1lbnQiLHQpfWdldERvd25sb2FkVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiaHBhcmFtcyIsIi9kb3dubG9hZF9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSkpfWxpc3RTZXNzaW9uR3JvdXBzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL3Nlc3Npb25fZ3JvdXBzIix0KX1saXN0TWV0cmljRXZhbHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCIvbWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxyKXtpZih0aGlzLl91c2VIdHRwR2V0KXtsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0LG5ldyBVUkxTZWFyY2hQYXJhbXMoe3JlcXVlc3Q6SlNPTi5zdHJpbmdpZnkocil9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyl9bGV0IG49bmV3IFV4O24ud2l0aENyZWRlbnRpYWxzPSEwLG4ubWV0aG9kVHlwZT1BbS5QT1NULG4uY29udGVudFR5cGU9InRleHQvcGxhaW4iLG4uYm9keT1KU09OLnN0cmluZ2lmeShyKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdFdpdGhPcHRpb25zKGksbil9fTt2YXIgX2NlPUVlKE9lKCksMSk7dmFyIERIPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3JpZW50YXRpb249Imhvcml6b250YWwifX07REgudGVtcGxhdGU9UWAKICAgIDxzbG90IG5hbWU9ImNvbnRlbnQiPjwvc2xvdD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3Qgc2xvdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBzbG90IHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyOiAwIHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsICNjY2MpOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIDo6c2xvdHRlZCgqOm5vdCg6bGFzdC1jaGlsZCkpIHsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiA1cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiA1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sREgucHJvdG90eXBlLCJvcmllbnRhdGlvbiIsdm9pZCAwKTtESD1FKFt5dCgiaHBhcmFtcy1zcGxpdC1sYXlvdXQiKV0sREgpO3ZhciBjcz17fTtLcyhjcyx7Y29sdW1uVmFsdWVCeUluZGV4OigpPT54MCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5CSCxldWNsaWRlYW5EaXN0OigpPT5oMyxmaWx0ZXJTZXQ6KCk9PlB1cixnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OigpPT56SCxoYXNoT2ZTdHJpbmc6KCk9PmRjdCxocGFyYW1OYW1lOigpPT5GZCxocGFyYW1WYWx1ZUJ5SW5kZXg6KCk9PmhjZSxocGFyYW1WYWx1ZUJ5TmFtZTooKT0+dWNlLGhwYXJhbVZhbHVlQnlWaXNpYmxlSW5kZXg6KCk9Pm1jZSxpc051bGxPclVuZGVmaW5lZDooKT0+VHVyLGwyTm9ybVNxdWFyZWQ6KCk9PnAzLG1ldHJpY05hbWU6KCk9PlF1LG1ldHJpY1ZhbHVlQnlJbmRleDooKT0+ZmNlLG1ldHJpY1ZhbHVlQnlOYW1lOigpPT5mMyxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5GSCxudW1Db2x1bW5zOigpPT51Y3QsbnVtSFBhcmFtczooKT0+bGNlLG51bU1ldHJpY3M6KCk9PmNjZSxudW1WaXNpYmxlQ29sdW1uczooKT0+d3VyLG51bVZpc2libGVIUGFyYW1zOigpPT5wY2UsbnVtVmlzaWJsZU1ldHJpY3M6KCk9PmRjZSxudW1lcmljQ29sdW1uRXh0ZW50OigpPT5oY3QscG9pbnRUb1JlY3RhbmdsZURpc3Q6KCk9PmdjZSxwcmV0dHlQcmludDooKT0+YjAscHJldHR5UHJpbnRIUGFyYW1WYWx1ZUJ5TmFtZTooKT0+U3VyLHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6KCk9Pk11cixxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOigpPT5BdXIscXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdDooKT0+Q3VyLHJvdGF0ZVN0cjooKT0+RXVyLHNjaGVtYUNvbHVtbk5hbWU6KCk9PmNjdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTooKT0+YnVyLHNlc3Npb25Hcm91cFdpdGhOYW1lOigpPT5mY3Qsc2V0QXJyYXlPYnNlcnZhYmx5OigpPT5wY3QsdHJhbnNsYXRlU3RyOigpPT55UCx2aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudDooKT0+X1B9KTt2YXIgT0g9RWUoT2UoKSwxKTtmdW5jdGlvbiBGZChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZSE9PSIiJiZlLmRpc3BsYXlOYW1lIT09dm9pZCAwP2UuZGlzcGxheU5hbWU6ZS5uYW1lfWZ1bmN0aW9uIFF1KGUpe2lmKGUuZGlzcGxheU5hbWUhPT0iIiYmZS5kaXNwbGF5TmFtZSE9PXZvaWQgMClyZXR1cm4gZS5kaXNwbGF5TmFtZTtsZXQgdD1lLm5hbWUuZ3JvdXAscj1lLm5hbWUudGFnO3JldHVybiB0PT09dm9pZCAwJiYodD0iIikscj09PXZvaWQgMCYmKHI9IiIpLHQ9PT0iIj9yOnQrIi4iK3J9ZnVuY3Rpb24gY2N0KGUsdCl7aWYodDxlLmhwYXJhbUNvbHVtbnMubGVuZ3RoKXJldHVybiBGZChlLmhwYXJhbUNvbHVtbnNbdF0uaHBhcmFtSW5mbyk7bGV0IHI9dC1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoO3JldHVybiBRdShlLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mbyl9ZnVuY3Rpb24gbGNlKGUpe3JldHVybiBlLmhwYXJhbUNvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIGNjZShlKXtyZXR1cm4gZS5tZXRyaWNDb2x1bW5zLmxlbmd0aH1mdW5jdGlvbiB1Y3QoZSl7cmV0dXJuIGxjZShlKStjY2UoZSl9ZnVuY3Rpb24gdWNlKGUsdCl7cmV0dXJuIGVbdF19ZnVuY3Rpb24gZjMoZSx0KXtyZXR1cm4gZS5maW5kKHI9Pk9ILmlzRXF1YWwoci5uYW1lLHQpKX1mdW5jdGlvbiBoY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1Db2x1bW5zW3JdLmhwYXJhbUluZm8ubmFtZV19ZnVuY3Rpb24gZmNlKGUsdCxyKXtsZXQgbj1lLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mby5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiB4MChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1Db2x1bW5zLmxlbmd0aD9oY2UoZSx0LHIpOmZjZShlLHQsci1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiBoY3QoZSx0LHIpe3JldHVybiBhYSh0LG49PngwKGUsbixyKSl9ZnVuY3Rpb24gekgoZSx0LHIpe2xldCBuO2lmKHI8dC5ocGFyYW1JbmZvcy5sZW5ndGgpbj1lLmhwYXJhbUNvbHVtbnMuZmluZEluZGV4KGk9PmkuaHBhcmFtSW5mby5uYW1lPT09dC5ocGFyYW1JbmZvc1tyXS5uYW1lKTtlbHNle2xldCBpPXItdC5ocGFyYW1JbmZvcy5sZW5ndGgsbz10Lm1ldHJpY0luZm9zW2ldLm5hbWU7bj1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoK2UubWV0cmljQ29sdW1ucy5maW5kSW5kZXgoYT0+YS5tZXRyaWNJbmZvLm5hbWU9PT1vKX1yZXR1cm4gY29uc29sZS5hc3NlcnQobiE9PS0xKSxufWZ1bmN0aW9uIGJ1cihlLHQpe2lmKHQ8ZS5ocGFyYW1JbmZvcy5sZW5ndGgpcmV0dXJuIEZkKGUuaHBhcmFtSW5mb3NbdF0pO2xldCByPXQtZS5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJuIFF1KGUubWV0cmljSW5mb3Nbcl0pfWZ1bmN0aW9uIHBjZShlKXtyZXR1cm4gZS5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gZGNlKGUpe3JldHVybiBlLm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiB3dXIoZSl7cmV0dXJuIHBjZShlKStkY2UoZSl9ZnVuY3Rpb24gX1AoZSx0LHIpe3JldHVybiBhYSh0LG49PkJIKGUsbixyKSl9ZnVuY3Rpb24gU3VyKGUsdCl7cmV0dXJuIGIwKHVjZShlLHQpKX1mdW5jdGlvbiBNdXIoZSx0KXtyZXR1cm4gYjAoZjMoZSx0KSl9ZnVuY3Rpb24gZmN0KGUsdCl7cmV0dXJuIGUuZmluZChyPT5yLm5hbWU9PT10KX1mdW5jdGlvbiBtY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1JbmZvc1tyXS5uYW1lXX1mdW5jdGlvbiBGSChlLHQscil7bGV0IG49ZS5tZXRyaWNJbmZvc1tyXS5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBCSChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1JbmZvcy5sZW5ndGg/bWNlKGUsdCxyKTpGSChlLHQsci1lLmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gYjAoZSl7cmV0dXJuIE9ILmlzTnVtYmVyKGUpP2UudG9QcmVjaXNpb24oNSk6ZT09bnVsbD8iIjplLnRvU3RyaW5nKCl9ZnVuY3Rpb24gcDMoZSx0KXtyZXR1cm4gZSplK3QqdH1mdW5jdGlvbiBoMyhlLHQscixuKXtyZXR1cm4gTWF0aC5zcXJ0KHAzKGUtcix0LW4pKX1mdW5jdGlvbiBnY2UoZSx0LHIsbixpLG8pe2lmKGU8ciYmdDxuKXJldHVybiBoMyhlLHQscixuKTtpZihyPD1lJiZlPGkmJnQ8bilyZXR1cm4gbi10O2lmKGk8PWUmJnQ8bilyZXR1cm4gaDMoZSx0LGksbik7aWYoZTxyJiZuPD10JiZ0PG8pcmV0dXJuIHItZTtpZihyPD1lJiZlPGkmJm48PXQmJnQ8bylyZXR1cm4gMDtpZihpPD1lJiZuPD10JiZ0PG8pcmV0dXJuIGUtaTtpZihlPHImJm88PXQpcmV0dXJuIGgzKGUsdCxyLG8pO2lmKHI8PWUmJmU8aSYmbzw9dClyZXR1cm4gdC1vO2lmKGk8PWUmJm88PXQpcmV0dXJuIGgzKGUsdCxpLG8pO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIn1mdW5jdGlvbiB5UChlLHQpe3JldHVybiB0PT09dm9pZCAwPyJ0cmFuc2xhdGUoIitlKyIpIjoidHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9ZnVuY3Rpb24gRXVyKGUsdCxyKXtsZXQgbj0icm90YXRlKCIrZTtyZXR1cm4gdCE9PXZvaWQgMCYmciE9PXZvaWQgMCYmKG49bisiLCIrdCsiLCIrciksbj1uKyIpIixufWZ1bmN0aW9uIFR1cihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBDdXIoZSx0LHIsbixpLG8pe2UudmlzaXQoKGEscyxsLGMsdSk9PntpZihhLmxlbmd0aD09PXZvaWQgMCl7ZG97bGV0IGg9ZS54KCkoYS5kYXRhKSxmPWUueSgpKGEuZGF0YSk7dDw9aCYmaDxuJiZyPD1mJiZmPGkmJm8oYS5kYXRhKX13aGlsZShhPWEubmV4dCk7cmV0dXJuITB9cmV0dXJuIHM+PW58fGM8PXR8fGw+PWl8fHU8PXJ9KX1mdW5jdGlvbiBBdXIoZSx0LHIsbixpKXtlLnZpc2l0KChvLGEscyxsLGMpPT57aWYoby5sZW5ndGg9PT12b2lkIDApe2Rve2xldCB1PWUueCgpKG8uZGF0YSksaD1lLnkoKShvLmRhdGEpLGY9aDModCxyLHUsaCk7Zjw9biYmaShvLmRhdGEsZil9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBnY2UodCxyLGEscyxsLGMpPm59KX1mdW5jdGlvbiBQdXIoZSx0KXtsZXQgcj1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gobj0+e3QobikmJnIuYWRkKG4pfSkscn1mdW5jdGlvbiBwY3QoZSx0LHIpe2xldCBuPWUuZ2V0KHQsZSk7aWYoIUFycmF5LmlzQXJyYXkobikpe2Uuc2V0KHQscik7cmV0dXJufWUuc3BsaWNlLmFwcGx5KGUsW3QsMCxuLmxlbmd0aF0uY29uY2F0KHIpKX1mdW5jdGlvbiBkY3QoZSl7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0PXQqMzErZS5jaGFyQ29kZUF0KHIpJjQyOTQ5NjcyOTU7cmV0dXJuIHQrVEkoMiwzMSl9dmFyIEl1cj0xMCxRbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb25maWd1cmF0aW9uPXtzY2hlbWE6e2hwYXJhbUNvbHVtbnM6QXJyYXkoKSxtZXRyaWNDb2x1bW5zOkFycmF5KCl9LGNvbHVtbnNWaXNpYmlsaXR5OkFycmF5KCksdmlzaWJsZVNjaGVtYTp7aHBhcmFtSW5mb3M6QXJyYXkoKSxtZXRyaWNJbmZvczpBcnJheSgpfX0sdGhpcy5zZXNzaW9uR3JvdXBzPVtdLHRoaXMuZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXM9ITEsdGhpcy5kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcz0hMSx0aGlzLl9zdGF0dXNlcz1be3ZhbHVlOiJTVEFUVVNfVU5LTk9XTiIsZGlzcGxheU5hbWU6IlVua25vd24iLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX1NVQ0NFU1MiLGRpc3BsYXlOYW1lOiJTdWNjZXNzIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19GQUlMVVJFIixkaXNwbGF5TmFtZToiRmFpbHVyZSIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfUlVOTklORyIsZGlzcGxheU5hbWU6IlJ1bm5pbmciLGFsbG93ZWQ6ITB9XSx0aGlzLl9nZXRFeHBlcmltZW50UmVzb2x2ZWQ9bmV3IFByb21pc2UodD0+e3RoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50PXR9KSx0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlcj1uZXcgYW4sdGhpcy5fcGFnZVNpemVJbnB1dD17dmFsdWU6IjEwMCIsaW52YWxpZDohMX0sdGhpcy5fcGFnZU51bWJlcklucHV0PXt2YWx1ZToiMSIsaW52YWxpZDohMX0sdGhpcy5fcGFnZUNvdW50U3RyPSI/Iix0aGlzLl9ocGFyYW1OYW1lPUZkLHRoaXMuX21ldHJpY05hbWU9UXUsdGhpcy5fcHJldHR5UHJpbnQ9YjB9cmVsb2FkKCl7dGhpcy5fcXVlcnlTZXJ2ZXIoKX1fY3N2VXJsKHQscil7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIsImNzdiIpfV9qc29uVXJsKHQscil7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIsImpzb24iKX1fbGF0ZXhVcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwibGF0ZXgiKX1fZG93bmxvYWREYXRhVXJsKHQscixuKXtsZXQgaT1yLmNvbHVtbnNWaXNpYmlsaXR5O3JldHVybiB0aGlzLmJhY2tlbmQuZ2V0RG93bmxvYWRVcmwobix0LGkpfV9jb21wdXRlRXhwZXJpbWVudEFuZFJlbGF0ZWRQcm9wcygpe2xldCB0PWNzO2lmKHQuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5iYWNrZW5kKXx8dC5pc051bGxPclVuZGVmaW5lZCh0aGlzLmV4cGVyaW1lbnROYW1lKSlyZXR1cm47bGV0IHI9e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWV9O3RoaXMuYmFja2VuZC5nZXRFeHBlcmltZW50KHIpLnRoZW4obj0+e19jZS5pc0VxdWFsKG4sdGhpcy5fZXhwZXJpbWVudCl8fCh0aGlzLnNldCgiX2V4cGVyaW1lbnQiLG4pLHRoaXMuX2NvbXB1dGVIUGFyYW1zKCksdGhpcy5fY29tcHV0ZU1ldHJpY3MoKSx0aGlzLl9xdWVyeVNlcnZlcigpLHRoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50KCkpfSkuZmluYWxseSgoKT0+e3RoaXMuX2NvbXB1dGVEYXRhRm91bmQoKX0pfV9jb21wdXRlRGF0YUZvdW5kKCl7bGV0IHQ9Qm9vbGVhbih0aGlzLl9leHBlcmltZW50JiZ0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zJiZ0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zLmxlbmd0aD4wKTt0aGlzLnNldCgiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHQpLHRoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsIXQpfV9jb21wdXRlSFBhcmFtcygpe2xldCB0PVtdO3RoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MuZm9yRWFjaChpPT57bGV0IG89e2luZm86aSxkaXNwbGF5ZWQ6ITEsZmlsdGVyOnt9fTtvLmluZm8uaGFzT3duUHJvcGVydHkoImRvbWFpbkRpc2NyZXRlIik/by5pbmZvLmRvbWFpbkRpc2NyZXRlLmxlbmd0aDxJdXI/KG8uZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVtdLG8uaW5mby5kb21haW5EaXNjcmV0ZS5mb3JFYWNoKGE9PntvLmZpbHRlci5kb21haW5EaXNjcmV0ZS5wdXNoKHt2YWx1ZTphLGNoZWNrZWQ6ITB9KX0pKTpvLmZpbHRlci5yZWdleHA9IiI6by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQiP28uZmlsdGVyLmludGVydmFsPXttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19OmNvbnNvbGUud2FybigiY2Fubm90IHByb2Nlc3MgZG9tYWluIHR5cGUgJXMgd2l0aG91dCBkaXNjcmV0ZSBkb21haW4gdmFsdWVzIixvLmluZm8udHlwZSksdC5wdXNoKG8pfSksdC5zb3J0KChpLG8pPT5pLmluZm8uZGlmZmVycz09PW8uaW5mby5kaWZmZXJzPzA6aS5pbmZvLmRpZmZlcnM/LTE6MSk7bGV0IG49TWF0aC5taW4oNSx0Lmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxuO2krKyl0W2ldLmRpc3BsYXllZD0hMDt0aGlzLnNldCgiX2hwYXJhbXMiLHQpfV9jb21wdXRlTWV0cmljcygpe2xldCB0PVtdO3RoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MuZm9yRWFjaCgobixpKT0+e2xldCBvPXtpbmZvOm4sZmlsdGVyOntpbnRlcnZhbDp7bWluOnt2YWx1ZToiIixpbnZhbGlkOiExfSxtYXg6e3ZhbHVlOiIiLGludmFsaWQ6ITF9fX0sZGlzcGxheWVkOmk8NX07dC5wdXNoKG8pfSksdGhpcy5zZXQoIl9tZXRyaWNzIix0KX1fY29tcHV0ZVNjaGVtYSgpe3JldHVybiF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcz97aHBhcmFtQ29sdW1uczpbXSxtZXRyaWNDb2x1bW5zOltdfTp7aHBhcmFtQ29sdW1uczp0aGlzLl9ocGFyYW1zLm1hcCh0PT4oe2hwYXJhbUluZm86dC5pbmZvfSkpLG1ldHJpY0NvbHVtbnM6dGhpcy5fbWV0cmljcy5tYXAodD0+KHttZXRyaWNJbmZvOnQuaW5mb30pKX19X3VwZGF0ZUNvbmZpZ3VyYXRpb24oKXt0aGlzLmRlYm91bmNlKCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsKCk9Pnt0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp0aGlzLl9jb21wdXRlU2NoZW1hKCksY29sdW1uc1Zpc2liaWxpdHk6dGhpcy5fY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCksdmlzaWJsZVNjaGVtYTp0aGlzLl9jb21wdXRlVmlzaWJsZVNjaGVtYSgpfX0pfV9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKXtyZXR1cm4hdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3M/W106dGhpcy5faHBhcmFtcy5tYXAodD0+dC5kaXNwbGF5ZWQpLmNvbmNhdCh0aGlzLl9tZXRyaWNzLm1hcCh0PT50LmRpc3BsYXllZCkpfV9jb21wdXRlVmlzaWJsZVNjaGVtYSgpe2lmKCF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcylyZXR1cm57aHBhcmFtSW5mb3M6W10sbWV0cmljSW5mb3M6W119O2xldCB0PXRoaXMuX2hwYXJhbXMuZmlsdGVyKG49Pm4uZGlzcGxheWVkKS5tYXAobj0+bi5pbmZvKSxyPXRoaXMuX21ldHJpY3MuZmlsdGVyKG49Pm4uZGlzcGxheWVkKS5tYXAobj0+bi5pbmZvKTtyZXR1cm57aHBhcmFtSW5mb3M6dCxtZXRyaWNJbmZvczpyfX1faGFzUmVnZXhwRmlsdGVyKHQpe3JldHVybiB0LmZpbHRlci5yZWdleHAhPT12b2lkIDB9X3F1ZXJ5U2VydmVyKCl7dGhpcy5kZWJvdW5jZSgicXVlcnlTZXJ2ZXIiLCgpPT50aGlzLl9xdWVyeVNlcnZlck5vRGVib3VuY2UoKSwxMDApfV9xdWVyeVNlcnZlck5vRGVib3VuY2UoKXtpZighKCF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcykpcmV0dXJuIHRoaXMuX3NlbmRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKS50aGVuKHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh7dmFsdWU6dCxjYW5jZWxsZWQ6cn0pPT57aWYoIXIpe2lmKHQudG90YWxTaXplPj0wKXtsZXQgbj0rdGhpcy5fcGFnZVNpemVJbnB1dC52YWx1ZTt0aGlzLnNldCgiX3BhZ2VDb3VudFN0ciIsU3RyaW5nKE1hdGguY2VpbCh0LnRvdGFsU2l6ZS9uKSkpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHQudG90YWxTaXplKX1lbHNlIHRoaXMuc2V0KCJfcGFnZUNvdW50U3RyIiwiPyIpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLCJVbmtub3duIik7cGN0KHRoaXMsInNlc3Npb25Hcm91cHMiLHQuc2Vzc2lvbkdyb3Vwcyl9fSkpfV9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCl7bGV0IHQ9dGhpcy5fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKTtpZih0IT09bnVsbClyZXR1cm4gdGhpcy5zZXQoIl9zZXNzaW9uR3JvdXBzUmVxdWVzdCIsdCksdGhpcy5fbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIuY2FuY2VsQWxsKCksdGhpcy5iYWNrZW5kLmxpc3RTZXNzaW9uR3JvdXBzKHQpfV9idWlsZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2xldCB0PXRoaXMscj0hMDtmdW5jdGlvbiBuKGgpe3JldHVybiBoLm1pbi52YWx1ZSE9PSIifHxoLm1heC52YWx1ZSE9PSIifWZ1bmN0aW9uIGkoaCl7bGV0IGY9dC5nZXQoaCsiLm1pbi52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGYhPT12b2lkIDApO2xldCBwPWY9PT0iIj8iLUluZmluaXR5IjorZixkPWlzTmFOKHApO3Quc2V0KGgrIi5taW4uaW52YWxpZCIsZCkscj1yJiYhZDtsZXQgZz10LmdldChoKyIubWF4LnZhbHVlIik7Y29uc29sZS5hc3NlcnQoZyE9PXZvaWQgMCk7bGV0IF89Zz09PSIiPyJJbmZpbml0eSI6K2cseT1pc05hTihfKTtyZXR1cm4gdC5zZXQoaCsiLm1heC5pbnZhbGlkIix5KSxyPXImJiF5LGR8fHk/bnVsbDp7bWluVmFsdWU6cCxtYXhWYWx1ZTpffX1mdW5jdGlvbiBvKGgpe2xldCBmPXQuZ2V0KGgrIi52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGYhPT12b2lkIDApO2xldCBwPStmLGQ9TnVtYmVyLmlzSW50ZWdlcihwKSYmcD4wO3JldHVybiB0LnNldChoKyIuaW52YWxpZCIsIWQpLHI9ciYmZCxkP3A6bnVsbH1sZXQgYT10aGlzLl9zdGF0dXNlcy5maWx0ZXIoaD0+aC5hbGxvd2VkKS5tYXAoaD0+aC52YWx1ZSkscz1bXTtpZih0aGlzLl9ocGFyYW1zLmZvckVhY2goKGgsZik9PntsZXQgcD17aHBhcmFtOmguaW5mby5uYW1lfTtoLmZpbHRlci5kb21haW5EaXNjcmV0ZT9oLmZpbHRlci5kb21haW5EaXNjcmV0ZS5ldmVyeShnPT5nLmNoZWNrZWQpfHwocC5maWx0ZXJEaXNjcmV0ZT1bXSxoLmZpbHRlci5kb21haW5EaXNjcmV0ZS5mb3JFYWNoKGc9PntnLmNoZWNrZWQmJnAuZmlsdGVyRGlzY3JldGUucHVzaChnLnZhbHVlKX0pKTpoLmZpbHRlci5pbnRlcnZhbD9uKGguZmlsdGVyLmludGVydmFsKSYmKHAuZmlsdGVySW50ZXJ2YWw9aSgiX2hwYXJhbXMuIitmKyIuZmlsdGVyLmludGVydmFsIikpOmguZmlsdGVyLnJlZ2V4cCYmKHAuZmlsdGVyUmVnZXhwPWguZmlsdGVyLnJlZ2V4cCkscy5wdXNoKHApfSksdGhpcy5fbWV0cmljcy5mb3JFYWNoKChoLGYpPT57bGV0IHA9e21ldHJpYzpoLmluZm8ubmFtZX07bihoLmZpbHRlci5pbnRlcnZhbCkmJihwLmZpbHRlckludGVydmFsPWkoIl9tZXRyaWNzLiIrZisiLmZpbHRlci5pbnRlcnZhbCIpKSxzLnB1c2gocCl9KSx0aGlzLl9zb3J0QnlJbmRleCE9PXZvaWQgMCYmdGhpcy5fc29ydERpcmVjdGlvbiE9PXZvaWQgMCl7aWYoISh0aGlzLl9zb3J0QnlJbmRleCBpbiBzKSlyZXR1cm4gY29uc29sZS5lcnJvcigiTm8gY29sdW1uIGluIGNvbFBhcmFtcyB3aXRoIGluZGV4IHNvcnRCeUluZGV4OiAlcyIsdGhpcy5fc29ydEJ5SW5kZXgpLG51bGw7c1t0aGlzLl9zb3J0QnlJbmRleF0ub3JkZXI9dGhpcy5fc29ydERpcmVjdGlvbj09PTA/Ik9SREVSX0FTQyI6Ik9SREVSX0RFU0MifWxldCBsPW8oIl9wYWdlTnVtYmVySW5wdXQiKXx8MCxjPW8oIl9wYWdlU2l6ZUlucHV0Iil8fDA7aWYoIXIpcmV0dXJuIG51bGw7bGV0IHU9YyoobC0xKTtyZXR1cm57ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZSxhbGxvd2VkU3RhdHVzZXM6YSxjb2xQYXJhbXM6cyxzdGFydEluZGV4OnUsc2xpY2VTaXplOmN9fV9tZXRyaWNTb3J0QnlJbmRleCh0KXtyZXR1cm4gdCt0aGlzLl9ocGFyYW1zLmxlbmd0aH19O1FuLnRlbXBsYXRlPVFgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBoeXBlcnBhcmFtZXRlcnMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkh5cGVycGFyYW1ldGVyczwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X2hwYXJhbXN9fSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJocGFyYW0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjaGVja2VkPSJ7e2hwYXJhbS5kaXNwbGF5ZWR9fSIKICAgICAgICAgICAgICBjbGFzcz0iaHBhcmFtLWNoZWNrYm94IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8IS0tIFByZWNpc2VseSBvbmUgb2YgdGhlIHRlbXBsYXRlcyBiZWxvdyB3aWxsIGJlIHN0YW1wZWQuLS0+CiAgICAgICAgICAgIDwhLS0gMS4gQSBsaXN0IG9mIGNoZWNrYm94ZXMgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7aXRlbS5jaGVja2VkfX0iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkaXNjcmV0ZS12YWx1ZS1jaGVja2JveCIKICAgICAgICAgICAgICAgICAgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFtbX3ByZXR0eVByaW50KGl0ZW0udmFsdWUpXV0KICAgICAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPCEtLSAyLiBBIG51bWVyaWMgaW50ZXJ2YWwgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1pbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWluLnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi5pbnZhbGlkXV0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iLWluZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1heCIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWF4LnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC5pbnZhbGlkXV0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iK2luZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8IS0tIDMuIEEgcmVnZXhwIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc1JlZ2V4cEZpbHRlcihocGFyYW0pXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9IlJlZ3VsYXIgZXhwcmVzc2lvbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIucmVnZXhwfX0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBtZXRyaWNzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NZXRyaWNzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfbWV0cmljc319IiBhcz0ibWV0cmljIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldHJpYyI+CiAgICAgICAgICAgIDwhLS0gVE9ETyhlcmV6KTogTWFrZSBpdCBlYXNpZXIgdG8gaGFuZGxlIGEgbGFyZ2UgbnVtYmVyIG9mCiAgICAgICAgICAgICAgICAgIG1ldHJpY3M6CiAgICAgICAgICAgICAgICAgIDEuIEFkZCBhbiAnaXNvbGF0b3InIHJhZGlvLWJ1dHRvbiB0byBzZWxlY3QganVzdCBvbmUKICAgICAgICAgICAgICAgICAgbWV0cmljIGFuZAogICAgICAgICAgICAgICAgICBoaWRlIGFsbCB0aGUgcmVzdAogICAgICAgICAgICAgICAgICAyLiBBZGQgYSAndG9nZ2xlLWFsbCcgYnV0dG9uIHRoYXQgd2lsbCBoaWRlL3VuaGlkZQogICAgICAgICAgICAgICAgICAgIGFsbCB0aGUKICAgICAgICAgICAgICAgICAgbWV0cmljcy4KICAgICAgICAgICAgICAgICAgVXNlIHNpbWlsYXIgbG9naWMvYXBwZWFyYW5jZSB0byB0aGUgcnVuLXNlbGVjdG9yIG9mCiAgICAgICAgICAgICAgICAgIHNjYWxhcnMuLS0+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNoZWNrZWQ9Int7bWV0cmljLmRpc3BsYXllZH19IgogICAgICAgICAgICAgIGNsYXNzPSJtZXRyaWMtY2hlY2tib3giCiAgICAgICAgICAgID4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzdGF0dXMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0YXR1czwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3N0YXR1c2VzXV0iIGFzPSJzdGF0dXMiPgogICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7c3RhdHVzLmFsbG93ZWR9fSIgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICBbW3N0YXR1cy5kaXNwbGF5TmFtZV1dCiAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHNvcnRpbmciPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNvcnRpbmc8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IlNvcnQgYnkiCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0QnlJbmRleH19IgogICAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfaHBhcmFtc11dIiBhcz0iaHBhcmFtIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT4gW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXSA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX21ldHJpY3NdXSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX21ldHJpY05hbWUobWV0cmljLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IkRpcmVjdGlvbiIKICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NvcnREaXJlY3Rpb259fSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+QXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbT5EZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gcGFnaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYWdpbmc8L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgTnVtYmVyIG9mIG1hdGNoaW5nIHNlc3Npb24gZ3JvdXBzOiBbW190b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0cl1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1udW1iZXItaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJQYWdlICMiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlTnVtYmVySW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZU51bWJlcklucHV0LmludmFsaWRdXSIKICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8ZGl2IHNsb3Q9InN1ZmZpeCIgY2xhc3M9InBhZ2Utc3VmZml4Ij4vIFtbX3BhZ2VDb3VudFN0cl1dPC9kaXY+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2Utc2l6ZS1pbnB1dCI+CiAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgbGFiZWw9Ik1heCAjIG9mIHNlc3Npb24gZ3JvdXBzIHBlciBwYWdlOiIKICAgICAgICAgICAgdmFsdWU9Int7X3BhZ2VTaXplSW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZVNpemVJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIGRvd25sb2FkIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlc3Npb25Hcm91cHNSZXF1ZXN0XV0iPgogICAgICAgICAgRG93bmxvYWQgZGF0YSBhcwogICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9ImNzdkxpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUuY3N2IgogICAgICAgICAgICAgIGhyZWY9IltbX2NzdlVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkNTVjwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9Impzb25MaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmpzb24iCiAgICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJsYXRleExpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUudGV4IgogICAgICAgICAgICAgIGhyZWY9IltbX2xhdGV4VXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+TGFUZVg8L2EKICAgICAgICAgICAgPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIG1hcmdpbi1ib3R0b206IDdweDsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3gsCiAgICAgIC5tZXRyaWMtY2hlY2tib3gsCiAgICAgIC5ocGFyYW0tY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgLmhwYXJhbSwKICAgICAgLm1ldHJpYyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmlubGluZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgICAucGFnZS1udW1iZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgIH0KICAgICAgLnBhZ2Utc2l6ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgICAucGFnZS1zdWZmaXggewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFuLnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUW4ucHJvdG90eXBlLCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9leHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9ocGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9tZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc3RhdHVzZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfZ2V0RXhwZXJpbWVudFJlc29sdmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sUW4ucHJvdG90eXBlLCJfcmVzb2x2ZUdldEV4cGVyaW1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydEJ5SW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydERpcmVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9wYWdlU2l6ZUlucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFuLnByb3RvdHlwZSwiX3BhZ2VOdW1iZXJJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsIl9wYWdlQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUW4ucHJvdG90eXBlLCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHZvaWQgMCk7RShbQnQoImJhY2tlbmQiLCJleHBlcmltZW50TmFtZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMiLG51bGwpO0UoW0J0KCJfaHBhcmFtcy4qIiwiX21ldHJpY3MuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsbnVsbCk7UW49RShbeXQoInRmLWhwYXJhbXMtcXVlcnktcGFuZSIpXSxRbik7dmFyIFVjdD1FZShPZSgpLDEpO3ZhciBtY3Q9dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5jdXN0b21FbGVtZW50cyE9bnVsbCYmd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2shPT12b2lkIDA7dmFyIGkxPShlLHQscj1udWxsKT0+e2Zvcig7dCE9PXI7KXtsZXQgbj10Lm5leHRTaWJsaW5nO2UucmVtb3ZlQ2hpbGQodCksdD1ufX07dmFyIFljPWB7e2xpdC0ke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKX19fWAsZ2N0PWA8IS0tJHtZY30tLT5gLHljZT1uZXcgUmVnRXhwKGAke1ljfXwke2djdH1gKSxkMz0iJGxpdCQiLG8xPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5wYXJ0cz1bXSx0aGlzLmVsZW1lbnQ9cjtsZXQgbj1bXSxpPVtdLG89ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLmNvbnRlbnQsMTMzLG51bGwsITEpLGE9MCxzPS0xLGw9MCx7c3RyaW5nczpjLHZhbHVlczp7bGVuZ3RoOnV9fT10O2Zvcig7bDx1Oyl7bGV0IGg9by5uZXh0Tm9kZSgpO2lmKGg9PT1udWxsKXtvLmN1cnJlbnROb2RlPWkucG9wKCk7Y29udGludWV9aWYocysrLGgubm9kZVR5cGU9PT0xKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7bGV0IGY9aC5hdHRyaWJ1dGVzLHtsZW5ndGg6cH09ZixkPTA7Zm9yKGxldCBnPTA7ZzxwO2crKyl2Y2UoZltnXS5uYW1lLGQzKSYmZCsrO2Zvcig7ZC0tID4wOyl7bGV0IGc9Y1tsXSxfPUhILmV4ZWMoZylbMl0seT1fLnRvTG93ZXJDYXNlKCkrZDMseD1oLmdldEF0dHJpYnV0ZSh5KTtoLnJlbW92ZUF0dHJpYnV0ZSh5KTtsZXQgYj14LnNwbGl0KHljZSk7dGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJhdHRyaWJ1dGUiLGluZGV4OnMsbmFtZTpfLHN0cmluZ3M6Yn0pLGwrPWIubGVuZ3RoLTF9fWgudGFnTmFtZT09PSJURU1QTEFURSImJihpLnB1c2goaCksby5jdXJyZW50Tm9kZT1oLmNvbnRlbnQpfWVsc2UgaWYoaC5ub2RlVHlwZT09PTMpe2xldCBmPWguZGF0YTtpZihmLmluZGV4T2YoWWMpPj0wKXtsZXQgcD1oLnBhcmVudE5vZGUsZD1mLnNwbGl0KHljZSksZz1kLmxlbmd0aC0xO2ZvcihsZXQgXz0wO188ZztfKyspe2xldCB5LHg9ZFtfXTtpZih4PT09IiIpeT1ZZigpO2Vsc2V7bGV0IGI9SEguZXhlYyh4KTtiIT09bnVsbCYmdmNlKGJbMl0sZDMpJiYoeD14LnNsaWNlKDAsYi5pbmRleCkrYlsxXStiWzJdLnNsaWNlKDAsLWQzLmxlbmd0aCkrYlszXSkseT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh4KX1wLmluc2VydEJlZm9yZSh5LGgpLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6KytzfSl9ZFtnXT09PSIiPyhwLmluc2VydEJlZm9yZShZZigpLGgpLG4ucHVzaChoKSk6aC5kYXRhPWRbZ10sbCs9Z319ZWxzZSBpZihoLm5vZGVUeXBlPT09OClpZihoLmRhdGE9PT1ZYyl7bGV0IGY9aC5wYXJlbnROb2RlOyhoLnByZXZpb3VzU2libGluZz09PW51bGx8fHM9PT1hKSYmKHMrKyxmLmluc2VydEJlZm9yZShZZigpLGgpKSxhPXMsdGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJub2RlIixpbmRleDpzfSksaC5uZXh0U2libGluZz09PW51bGw/aC5kYXRhPSIiOihuLnB1c2goaCkscy0tKSxsKyt9ZWxzZXtsZXQgZj0tMTtmb3IoOyhmPWguZGF0YS5pbmRleE9mKFljLGYrMSkpIT09LTE7KXRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6LTF9KSxsKyt9fWZvcihsZXQgaCBvZiBuKWgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKX19LHZjZT0oZSx0KT0+e2xldCByPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiByPj0wJiZlLnNsaWNlKHIpPT09dH0sdlA9ZT0+ZS5pbmRleCE9PS0xLFlmPSgpPT5kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSxISD0vKFsgXHgwOVx4MGFceDBjXHgwZF0pKFteXDAtXHgxRlx4N0YtXHg5RiAiJz49L10rKShbIFx4MDlceDBhXHgwY1x4MGRdKj1bIFx4MDlceDBhXHgwY1x4MGRdKig/OlteIFx4MDlceDBhXHgwY1x4MGQiJ2A8Pj1dKnwiW14iXSp8J1teJ10qKSkkLzt2YXIgX2N0PTEzMztmdW5jdGlvbiB5Y3QoZSx0KXtsZXR7ZWxlbWVudDp7Y29udGVudDpyfSxwYXJ0czpufT1lLGk9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLF9jdCxudWxsLCExKSxvPXhQKG4pLGE9bltvXSxzPS0xLGw9MCxjPVtdLHU9bnVsbDtmb3IoO2kubmV4dE5vZGUoKTspe3MrKztsZXQgaD1pLmN1cnJlbnROb2RlO2ZvcihoLnByZXZpb3VzU2libGluZz09PXUmJih1PW51bGwpLHQuaGFzKGgpJiYoYy5wdXNoKGgpLHU9PT1udWxsJiYodT1oKSksdSE9PW51bGwmJmwrKzthIT09dm9pZCAwJiZhLmluZGV4PT09czspYS5pbmRleD11IT09bnVsbD8tMTphLmluZGV4LWwsbz14UChuLG8pLGE9bltvXX1jLmZvckVhY2goaD0+aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpKX12YXIgTHVyPWU9PntsZXQgdD1lLm5vZGVUeXBlPT09MTE/MDoxLHI9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlLF9jdCxudWxsLCExKTtmb3IoO3IubmV4dE5vZGUoKTspdCsrO3JldHVybiB0fSx4UD0oZSx0PS0xKT0+e2ZvcihsZXQgcj10KzE7cjxlLmxlbmd0aDtyKyspe2xldCBuPWVbcl07aWYodlAobikpcmV0dXJuIHJ9cmV0dXJuLTF9O2Z1bmN0aW9uIHhjZShlLHQscj1udWxsKXtsZXR7ZWxlbWVudDp7Y29udGVudDpufSxwYXJ0czppfT1lO2lmKHI9PW51bGwpe24uYXBwZW5kQ2hpbGQodCk7cmV0dXJufWxldCBvPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobixfY3QsbnVsbCwhMSksYT14UChpKSxzPTAsbD0tMTtmb3IoO28ubmV4dE5vZGUoKTspZm9yKGwrKyxvLmN1cnJlbnROb2RlPT09ciYmKHM9THVyKHQpLHIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxyKSk7YSE9PS0xJiZpW2FdLmluZGV4PT09bDspe2lmKHM+MCl7Zm9yKDthIT09LTE7KWlbYV0uaW5kZXgrPXMsYT14UChpLGEpO3JldHVybn1hPXhQKGksYSl9fXZhciBrdXI9bmV3IFdlYWtNYXA7dmFyIGExPWU9PnR5cGVvZiBlPT0iZnVuY3Rpb24iJiZrdXIuaGFzKGUpO3ZhciBMbD17fSxWSD17fTt2YXIgdzA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX19wYXJ0cz1bXSx0aGlzLnRlbXBsYXRlPXQsdGhpcy5wcm9jZXNzb3I9cix0aGlzLm9wdGlvbnM9bn11cGRhdGUodCl7bGV0IHI9MDtmb3IobGV0IG4gb2YgdGhpcy5fX3BhcnRzKW4hPT12b2lkIDAmJm4uc2V0VmFsdWUodFtyXSkscisrO2ZvcihsZXQgbiBvZiB0aGlzLl9fcGFydHMpbiE9PXZvaWQgMCYmbi5jb21taXQoKX1fY2xvbmUoKXtsZXQgdD1tY3Q/dGhpcy50ZW1wbGF0ZS5lbGVtZW50LmNvbnRlbnQuY2xvbmVOb2RlKCEwKTpkb2N1bWVudC5pbXBvcnROb2RlKHRoaXMudGVtcGxhdGUuZWxlbWVudC5jb250ZW50LCEwKSxyPVtdLG49dGhpcy50ZW1wbGF0ZS5wYXJ0cyxpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIodCwxMzMsbnVsbCwhMSksbz0wLGE9MCxzLGw9aS5uZXh0Tm9kZSgpO2Zvcig7bzxuLmxlbmd0aDspe2lmKHM9bltvXSwhdlAocykpe3RoaXMuX19wYXJ0cy5wdXNoKHZvaWQgMCksbysrO2NvbnRpbnVlfWZvcig7YTxzLmluZGV4OylhKyssbC5ub2RlTmFtZT09PSJURU1QTEFURSImJihyLnB1c2gobCksaS5jdXJyZW50Tm9kZT1sLmNvbnRlbnQpLChsPWkubmV4dE5vZGUoKSk9PT1udWxsJiYoaS5jdXJyZW50Tm9kZT1yLnBvcCgpLGw9aS5uZXh0Tm9kZSgpKTtpZihzLnR5cGU9PT0ibm9kZSIpe2xldCBjPXRoaXMucHJvY2Vzc29yLmhhbmRsZVRleHRFeHByZXNzaW9uKHRoaXMub3B0aW9ucyk7Yy5pbnNlcnRBZnRlck5vZGUobC5wcmV2aW91c1NpYmxpbmcpLHRoaXMuX19wYXJ0cy5wdXNoKGMpfWVsc2UgdGhpcy5fX3BhcnRzLnB1c2goLi4udGhpcy5wcm9jZXNzb3IuaGFuZGxlQXR0cmlidXRlRXhwcmVzc2lvbnMobCxzLm5hbWUscy5zdHJpbmdzLHRoaXMub3B0aW9ucykpO28rK31yZXR1cm4gbWN0JiYoZG9jdW1lbnQuYWRvcHROb2RlKHQpLGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUodCkpLHR9fTt2YXIgYmNlPXdpbmRvdy50cnVzdGVkVHlwZXMmJnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDplPT5lfSksTnVyPWAgJHtZY30gYCxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnN0cmluZ3M9dCx0aGlzLnZhbHVlcz1yLHRoaXMudHlwZT1uLHRoaXMucHJvY2Vzc29yPWl9Z2V0SFRNTCgpe2xldCB0PXRoaXMuc3RyaW5ncy5sZW5ndGgtMSxyPSIiLG49ITE7Zm9yKGxldCBpPTA7aTx0O2krKyl7bGV0IG89dGhpcy5zdHJpbmdzW2ldLGE9by5sYXN0SW5kZXhPZigiPCEtLSIpO249KGE+LTF8fG4pJiZvLmluZGV4T2YoIi0tPiIsYSsxKT09PS0xO2xldCBzPUhILmV4ZWMobyk7cz09PW51bGw/cis9bysobj9OdXI6Z2N0KTpyKz1vLnN1YnN0cigwLHMuaW5kZXgpK3NbMV0rc1syXStkMytzWzNdK1ljfXJldHVybiByKz10aGlzLnN0cmluZ3NbdF0scn1nZXRUZW1wbGF0ZUVsZW1lbnQoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLHI9dGhpcy5nZXRIVE1MKCk7cmV0dXJuIGJjZSE9PXZvaWQgMCYmKHI9YmNlLmNyZWF0ZUhUTUwocikpLHQuaW5uZXJIVE1MPXIsdH19O3ZhciBHSD1lPT5lPT09bnVsbHx8ISh0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSxVSD1lPT5BcnJheS5pc0FycmF5KGUpfHwhIShlJiZlW1N5bWJvbC5pdGVyYXRvcl0pLG0zPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmRpcnR5PSEwLHRoaXMuZWxlbWVudD10LHRoaXMubmFtZT1yLHRoaXMuc3RyaW5ncz1uLHRoaXMucGFydHM9W107Zm9yKGxldCBpPTA7aTxuLmxlbmd0aC0xO2krKyl0aGlzLnBhcnRzW2ldPXRoaXMuX2NyZWF0ZVBhcnQoKX1fY3JlYXRlUGFydCgpe3JldHVybiBuZXcgYlAodGhpcyl9X2dldFZhbHVlKCl7bGV0IHQ9dGhpcy5zdHJpbmdzLHI9dC5sZW5ndGgtMSxuPXRoaXMucGFydHM7aWYocj09PTEmJnRbMF09PT0iIiYmdFsxXT09PSIiKXtsZXQgbz1uWzBdLnZhbHVlO2lmKHR5cGVvZiBvPT0ic3ltYm9sIilyZXR1cm4gU3RyaW5nKG8pO2lmKHR5cGVvZiBvPT0ic3RyaW5nInx8IVVIKG8pKXJldHVybiBvfWxldCBpPSIiO2ZvcihsZXQgbz0wO288cjtvKyspe2krPXRbb107bGV0IGE9bltvXTtpZihhIT09dm9pZCAwKXtsZXQgcz1hLnZhbHVlO2lmKEdIKHMpfHwhVUgocykpaSs9dHlwZW9mIHM9PSJzdHJpbmciP3M6U3RyaW5nKHMpO2Vsc2UgZm9yKGxldCBsIG9mIHMpaSs9dHlwZW9mIGw9PSJzdHJpbmciP2w6U3RyaW5nKGwpfX1yZXR1cm4gaSs9dFtyXSxpfWNvbW1pdCgpe3RoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLHRoaXMuX2dldFZhbHVlKCkpKX19LGJQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuY29tbWl0dGVyPXR9c2V0VmFsdWUodCl7dCE9PUxsJiYoIUdIKHQpfHx0IT09dGhpcy52YWx1ZSkmJih0aGlzLnZhbHVlPXQsYTEodCl8fCh0aGlzLmNvbW1pdHRlci5kaXJ0eT0hMCkpfWNvbW1pdCgpe2Zvcig7YTEodGhpcy52YWx1ZSk7KXtsZXQgdD10aGlzLnZhbHVlO3RoaXMudmFsdWU9TGwsdCh0aGlzKX10aGlzLnZhbHVlIT09TGwmJnRoaXMuY29tbWl0dGVyLmNvbW1pdCgpfX0sQmQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsdGhpcy5vcHRpb25zPXR9YXBwZW5kSW50byh0KXt0aGlzLnN0YXJ0Tm9kZT10LmFwcGVuZENoaWxkKFlmKCkpLHRoaXMuZW5kTm9kZT10LmFwcGVuZENoaWxkKFlmKCkpfWluc2VydEFmdGVyTm9kZSh0KXt0aGlzLnN0YXJ0Tm9kZT10LHRoaXMuZW5kTm9kZT10Lm5leHRTaWJsaW5nfWFwcGVuZEludG9QYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdC5fX2luc2VydCh0aGlzLmVuZE5vZGU9WWYoKSl9aW5zZXJ0QWZ0ZXJQYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdGhpcy5lbmROb2RlPXQuZW5kTm9kZSx0LmVuZE5vZGU9dGhpcy5zdGFydE5vZGV9c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2lmKHRoaXMuc3RhcnROb2RlLnBhcmVudE5vZGU9PT1udWxsKXJldHVybjtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IHI9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLHIodGhpcyl9bGV0IHQ9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0IT09TGwmJihHSCh0KT90IT09dGhpcy52YWx1ZSYmdGhpcy5fX2NvbW1pdFRleHQodCk6dCBpbnN0YW5jZW9mIFMwP3RoaXMuX19jb21taXRUZW1wbGF0ZVJlc3VsdCh0KTp0IGluc3RhbmNlb2YgTm9kZT90aGlzLl9fY29tbWl0Tm9kZSh0KTpVSCh0KT90aGlzLl9fY29tbWl0SXRlcmFibGUodCk6dD09PVZIPyh0aGlzLnZhbHVlPVZILHRoaXMuY2xlYXIoKSk6dGhpcy5fX2NvbW1pdFRleHQodCkpfV9faW5zZXJ0KHQpe3RoaXMuZW5kTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LHRoaXMuZW5kTm9kZSl9X19jb21taXROb2RlKHQpe3RoaXMudmFsdWUhPT10JiYodGhpcy5jbGVhcigpLHRoaXMuX19pbnNlcnQodCksdGhpcy52YWx1ZT10KX1fX2NvbW1pdFRleHQodCl7bGV0IHI9dGhpcy5zdGFydE5vZGUubmV4dFNpYmxpbmc7dD10PT1udWxsPyIiOnQ7bGV0IG49dHlwZW9mIHQ9PSJzdHJpbmciP3Q6U3RyaW5nKHQpO3I9PT10aGlzLmVuZE5vZGUucHJldmlvdXNTaWJsaW5nJiZyLm5vZGVUeXBlPT09Mz9yLmRhdGE9bjp0aGlzLl9fY29tbWl0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSksdGhpcy52YWx1ZT10fV9fY29tbWl0VGVtcGxhdGVSZXN1bHQodCl7bGV0IHI9dGhpcy5vcHRpb25zLnRlbXBsYXRlRmFjdG9yeSh0KTtpZih0aGlzLnZhbHVlIGluc3RhbmNlb2YgdzAmJnRoaXMudmFsdWUudGVtcGxhdGU9PT1yKXRoaXMudmFsdWUudXBkYXRlKHQudmFsdWVzKTtlbHNle2xldCBuPW5ldyB3MChyLHQucHJvY2Vzc29yLHRoaXMub3B0aW9ucyksaT1uLl9jbG9uZSgpO24udXBkYXRlKHQudmFsdWVzKSx0aGlzLl9fY29tbWl0Tm9kZShpKSx0aGlzLnZhbHVlPW59fV9fY29tbWl0SXRlcmFibGUodCl7QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKXx8KHRoaXMudmFsdWU9W10sdGhpcy5jbGVhcigpKTtsZXQgcj10aGlzLnZhbHVlLG49MCxpO2ZvcihsZXQgbyBvZiB0KWk9cltuXSxpPT09dm9pZCAwJiYoaT1uZXcgQmQodGhpcy5vcHRpb25zKSxyLnB1c2goaSksbj09PTA/aS5hcHBlbmRJbnRvUGFydCh0aGlzKTppLmluc2VydEFmdGVyUGFydChyW24tMV0pKSxpLnNldFZhbHVlKG8pLGkuY29tbWl0KCksbisrO248ci5sZW5ndGgmJihyLmxlbmd0aD1uLHRoaXMuY2xlYXIoaSYmaS5lbmROb2RlKSl9Y2xlYXIodD10aGlzLnN0YXJ0Tm9kZSl7aTEodGhpcy5zdGFydE5vZGUucGFyZW50Tm9kZSx0Lm5leHRTaWJsaW5nLHRoaXMuZW5kTm9kZSl9fSx3UD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYodGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsbi5sZW5ndGghPT0yfHxuWzBdIT09IiJ8fG5bMV0hPT0iIil0aHJvdyBuZXcgRXJyb3IoIkJvb2xlYW4gYXR0cmlidXRlcyBjYW4gb25seSBjb250YWluIGEgc2luZ2xlIGV4cHJlc3Npb24iKTt0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLnN0cmluZ3M9bn1zZXRWYWx1ZSh0KXt0aGlzLl9fcGVuZGluZ1ZhbHVlPXR9Y29tbWl0KCl7Zm9yKDthMSh0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCByPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxyKHRoaXMpfWlmKHRoaXMuX19wZW5kaW5nVmFsdWU9PT1MbClyZXR1cm47bGV0IHQ9ISF0aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMudmFsdWUhPT10JiYodD90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSwiIik6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpLHRoaXMudmFsdWU9dCksdGhpcy5fX3BlbmRpbmdWYWx1ZT1MbH19LFNQPWNsYXNzIGV4dGVuZHMgbTN7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQscixuKSx0aGlzLnNpbmdsZT1uLmxlbmd0aD09PTImJm5bMF09PT0iIiYmblsxXT09PSIifV9jcmVhdGVQYXJ0KCl7cmV0dXJuIG5ldyBxSCh0aGlzKX1fZ2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zaW5nbGU/dGhpcy5wYXJ0c1swXS52YWx1ZTpzdXBlci5fZ2V0VmFsdWUoKX1jb21taXQoKXt0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT10aGlzLl9nZXRWYWx1ZSgpKX19LHFIPWNsYXNzIGV4dGVuZHMgYlB7fSx3Y2U9ITE7KCgpPT57dHJ5e2xldCBlPXtnZXQgY2FwdHVyZSgpe3JldHVybiB3Y2U9ITAsITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKX1jYXRjaChlKXt9fSkoKTt2YXIgTVA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMuZWxlbWVudD10LHRoaXMuZXZlbnROYW1lPXIsdGhpcy5ldmVudENvbnRleHQ9bix0aGlzLl9fYm91bmRIYW5kbGVFdmVudD1pPT50aGlzLmhhbmRsZUV2ZW50KGkpfXNldFZhbHVlKHQpe3RoaXMuX19wZW5kaW5nVmFsdWU9dH1jb21taXQoKXtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IG89dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLG8odGhpcyl9aWYodGhpcy5fX3BlbmRpbmdWYWx1ZT09PUxsKXJldHVybjtsZXQgdD10aGlzLl9fcGVuZGluZ1ZhbHVlLHI9dGhpcy52YWx1ZSxuPXQ9PW51bGx8fHIhPW51bGwmJih0LmNhcHR1cmUhPT1yLmNhcHR1cmV8fHQub25jZSE9PXIub25jZXx8dC5wYXNzaXZlIT09ci5wYXNzaXZlKSxpPXQhPW51bGwmJihyPT1udWxsfHxuKTtuJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucyksaSYmKHRoaXMuX19vcHRpb25zPUR1cih0KSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucykpLHRoaXMudmFsdWU9dCx0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsfWhhbmRsZUV2ZW50KHQpe3R5cGVvZiB0aGlzLnZhbHVlPT0iZnVuY3Rpb24iP3RoaXMudmFsdWUuY2FsbCh0aGlzLmV2ZW50Q29udGV4dHx8dGhpcy5lbGVtZW50LHQpOnRoaXMudmFsdWUuaGFuZGxlRXZlbnQodCl9fSxEdXI9ZT0+ZSYmKHdjZT97Y2FwdHVyZTplLmNhcHR1cmUscGFzc2l2ZTplLnBhc3NpdmUsb25jZTplLm9uY2V9OmUuY2FwdHVyZSk7ZnVuY3Rpb24gdmN0KGUpe2xldCB0PXMxLmdldChlLnR5cGUpO3Q9PT12b2lkIDAmJih0PXtzdHJpbmdzQXJyYXk6bmV3IFdlYWtNYXAsa2V5U3RyaW5nOm5ldyBNYXB9LHMxLnNldChlLnR5cGUsdCkpO2xldCByPXQuc3RyaW5nc0FycmF5LmdldChlLnN0cmluZ3MpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7bGV0IG49ZS5zdHJpbmdzLmpvaW4oWWMpO3JldHVybiByPXQua2V5U3RyaW5nLmdldChuKSxyPT09dm9pZCAwJiYocj1uZXcgbzEoZSxlLmdldFRlbXBsYXRlRWxlbWVudCgpKSx0LmtleVN0cmluZy5zZXQobixyKSksdC5zdHJpbmdzQXJyYXkuc2V0KGUuc3RyaW5ncyxyKSxyfXZhciBzMT1uZXcgTWFwO3ZhciBNMD1uZXcgV2Vha01hcCx4Y3Q9KGUsdCxyKT0+e2xldCBuPU0wLmdldCh0KTtuPT09dm9pZCAwJiYoaTEodCx0LmZpcnN0Q2hpbGQpLE0wLnNldCh0LG49bmV3IEJkKE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTp2Y3R9LHIpKSksbi5hcHBlbmRJbnRvKHQpKSxuLnNldFZhbHVlKGUpLG4uY29tbWl0KCl9O3ZhciBXSD1jbGFzc3toYW5kbGVBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LHIsbixpKXtsZXQgbz1yWzBdO3JldHVybiBvPT09Ii4iP25ldyBTUCh0LHIuc2xpY2UoMSksbikucGFydHM6bz09PSJAIj9bbmV3IE1QKHQsci5zbGljZSgxKSxpLmV2ZW50Q29udGV4dCldOm89PT0iPyI/W25ldyB3UCh0LHIuc2xpY2UoMSksbildOm5ldyBtMyh0LHIsbikucGFydHN9aGFuZGxlVGV4dEV4cHJlc3Npb24odCl7cmV0dXJuIG5ldyBCZCh0KX19LFNjZT1uZXcgV0g7dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJih3aW5kb3cubGl0SHRtbFZlcnNpb25zfHwod2luZG93LmxpdEh0bWxWZXJzaW9ucz1bXSkpLnB1c2goIjEuNC4xIik7dmFyIEVjZT0oZSx0KT0+YCR7ZX0tLSR7dH1gLFlIPSEwO3R5cGVvZiB3aW5kb3cuU2hhZHlDU1M9PSJ1bmRlZmluZWQiP1lIPSExOnR5cGVvZiB3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlRG9tPT0idW5kZWZpbmVkIiYmKGNvbnNvbGUud2FybigiSW5jb21wYXRpYmxlIFNoYWR5Q1NTIHZlcnNpb24gZGV0ZWN0ZWQuIFBsZWFzZSB1cGRhdGUgdG8gYXQgbGVhc3QgQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzQDIuMC4yIGFuZCBAd2ViY29tcG9uZW50cy9zaGFkeWNzc0AxLjMuMS4iKSxZSD0hMSk7dmFyIEZ1cj1lPT50PT57bGV0IHI9RWNlKHQudHlwZSxlKSxuPXMxLmdldChyKTtuPT09dm9pZCAwJiYobj17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxzMS5zZXQocixuKSk7bGV0IGk9bi5zdHJpbmdzQXJyYXkuZ2V0KHQuc3RyaW5ncyk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtsZXQgbz10LnN0cmluZ3Muam9pbihZYyk7aWYoaT1uLmtleVN0cmluZy5nZXQobyksaT09PXZvaWQgMCl7bGV0IGE9dC5nZXRUZW1wbGF0ZUVsZW1lbnQoKTtZSCYmd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZURvbShhLGUpLGk9bmV3IG8xKHQsYSksbi5rZXlTdHJpbmcuc2V0KG8saSl9cmV0dXJuIG4uc3RyaW5nc0FycmF5LnNldCh0LnN0cmluZ3MsaSksaX0sQnVyPVsiaHRtbCIsInN2ZyJdLEh1cj1lPT57QnVyLmZvckVhY2godD0+e2xldCByPXMxLmdldChFY2UodCxlKSk7ciE9PXZvaWQgMCYmci5rZXlTdHJpbmcuZm9yRWFjaChuPT57bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6aX19PW4sbz1uZXcgU2V0O0FycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpKS5mb3JFYWNoKGE9PntvLmFkZChhKX0pLHljdChuLG8pfSl9KX0sVGNlPW5ldyBTZXQsVnVyPShlLHQscik9PntUY2UuYWRkKGUpO2xldCBuPXI/ci5lbGVtZW50OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksaT10LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIikse2xlbmd0aDpvfT1pO2lmKG89PT0wKXt3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7cmV0dXJufWxldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Zm9yKGxldCBjPTA7YzxvO2MrKyl7bGV0IHU9aVtjXTt1LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodSksYS50ZXh0Q29udGVudCs9dS50ZXh0Q29udGVudH1IdXIoZSk7bGV0IHM9bi5jb250ZW50O3I/eGNlKHIsYSxzLmZpcnN0Q2hpbGQpOnMuaW5zZXJ0QmVmb3JlKGEscy5maXJzdENoaWxkKSx3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7bGV0IGw9cy5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpO2lmKHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cmJmwhPT1udWxsKXQuaW5zZXJ0QmVmb3JlKGwuY2xvbmVOb2RlKCEwKSx0LmZpcnN0Q2hpbGQpO2Vsc2UgaWYocil7cy5pbnNlcnRCZWZvcmUoYSxzLmZpcnN0Q2hpbGQpO2xldCBjPW5ldyBTZXQ7Yy5hZGQoYSkseWN0KHIsYyl9fSxDY2U9KGUsdCxyKT0+e2lmKCFyfHx0eXBlb2YgciE9Im9iamVjdCJ8fCFyLnNjb3BlTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgc2NvcGVOYW1lYCBvcHRpb24gaXMgcmVxdWlyZWQuIik7bGV0IG49ci5zY29wZU5hbWUsaT1NMC5oYXModCksbz1ZSCYmdC5ub2RlVHlwZT09PTExJiYhIXQuaG9zdCxhPW8mJiFUY2UuaGFzKG4pLHM9YT9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk6dDtpZih4Y3QoZSxzLE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTpGdXIobil9LHIpKSxhKXtsZXQgbD1NMC5nZXQocyk7TTAuZGVsZXRlKHMpO2xldCBjPWwudmFsdWUgaW5zdGFuY2VvZiB3MD9sLnZhbHVlLnRlbXBsYXRlOnZvaWQgMDtWdXIobixzLGMpLGkxKHQsdC5maXJzdENoaWxkKSx0LmFwcGVuZENoaWxkKHMpLE0wLnNldCh0LGwpfSFpJiZvJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHQuaG9zdCl9O3ZhciBBY2U7d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9KGUsdCk9PmU7dmFyIFRjdD17dG9BdHRyaWJ1dGUoZSx0KXtzd2l0Y2godCl7Y2FzZSBCb29sZWFuOnJldHVybiBlPyIiOm51bGw7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpyZXR1cm4gZT09bnVsbD9lOkpTT04uc3RyaW5naWZ5KGUpfXJldHVybiBlfSxmcm9tQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gZSE9PW51bGw7Y2FzZSBOdW1iZXI6cmV0dXJuIGU9PT1udWxsP251bGw6TnVtYmVyKGUpO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6cmV0dXJuIEpTT04ucGFyc2UoZSl9cmV0dXJuIGV9fSxQY2U9KGUsdCk9PnQhPT1lJiYodD09PXR8fGU9PT1lKSxiY3Q9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6VGN0LHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpQY2V9LHdjdD0xLFNjdD0xPDwyLE1jdD0xPDwzLEVjdD0xPDw0LENjdD0iZmluYWxpemVkIixnMz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmluaXRpYWxpemUoKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9PntsZXQgaT10aGlzLl9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobixyKTtpIT09dm9pZCAwJiYodGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5zZXQoaSxuKSx0LnB1c2goaSkpfSksdH1zdGF0aWMgX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9jbGFzc1Byb3BlcnRpZXMiLHRoaXMpKSl7dGhpcy5fY2xhc3NQcm9wZXJ0aWVzPW5ldyBNYXA7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9jbGFzc1Byb3BlcnRpZXM7dCE9PXZvaWQgMCYmdC5mb3JFYWNoKChyLG4pPT50aGlzLl9jbGFzc1Byb3BlcnRpZXMuc2V0KG4scikpfX1zdGF0aWMgY3JlYXRlUHJvcGVydHkodCxyPWJjdCl7aWYodGhpcy5fZW5zdXJlQ2xhc3NQcm9wZXJ0aWVzKCksdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLnNldCh0LHIpLHIubm9BY2Nlc3Nvcnx8dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2xldCBuPXR5cGVvZiB0PT0ic3ltYm9sIj9TeW1ib2woKTpgX18ke3R9YCxpPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsbixyKTtpIT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsdCxpKX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQscixuKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbcl19LHNldChpKXtsZXQgbz10aGlzW3RdO3RoaXNbcl09aSx0aGlzLnJlcXVlc3RVcGRhdGVJbnRlcm5hbCh0LG8sbil9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQpe3JldHVybiB0aGlzLl9jbGFzc1Byb3BlcnRpZXMmJnRoaXMuX2NsYXNzUHJvcGVydGllcy5nZXQodCl8fGJjdH1zdGF0aWMgZmluYWxpemUoKXtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYodC5oYXNPd25Qcm9wZXJ0eShDY3QpfHx0LmZpbmFsaXplKCksdGhpc1tDY3RdPSEwLHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXA9bmV3IE1hcCx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInByb3BlcnRpZXMiLHRoaXMpKSl7bGV0IHI9dGhpcy5wcm9wZXJ0aWVzLG49Wy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLC4uLnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocik6W11dO2ZvcihsZXQgaSBvZiBuKXRoaXMuY3JlYXRlUHJvcGVydHkoaSxyW2ldKX19c3RhdGljIF9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCxyKXtsZXQgbj1yLmF0dHJpYnV0ZTtyZXR1cm4gbj09PSExP3ZvaWQgMDp0eXBlb2Ygbj09InN0cmluZyI/bjp0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1zdGF0aWMgX3ZhbHVlSGFzQ2hhbmdlZCh0LHIsbj1QY2Upe3JldHVybiBuKHQscil9c3RhdGljIF9wcm9wZXJ0eVZhbHVlRnJvbUF0dHJpYnV0ZSh0LHIpe2xldCBuPXIudHlwZSxpPXIuY29udmVydGVyfHxUY3Qsbz10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmkuZnJvbUF0dHJpYnV0ZTtyZXR1cm4gbz9vKHQsbik6dH1zdGF0aWMgX3Byb3BlcnR5VmFsdWVUb0F0dHJpYnV0ZSh0LHIpe2lmKHIucmVmbGVjdD09PXZvaWQgMClyZXR1cm47bGV0IG49ci50eXBlLGk9ci5jb252ZXJ0ZXI7cmV0dXJuKGkmJmkudG9BdHRyaWJ1dGV8fFRjdC50b0F0dHJpYnV0ZSkodCxuKX1pbml0aWFsaXplKCl7dGhpcy5fdXBkYXRlU3RhdGU9MCx0aGlzLl91cGRhdGVQcm9taXNlPW5ldyBQcm9taXNlKHQ9PnRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dCksdGhpcy5fY2hhbmdlZFByb3BlcnRpZXM9bmV3IE1hcCx0aGlzLl9zYXZlSW5zdGFuY2VQcm9wZXJ0aWVzKCksdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwoKX1fc2F2ZUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuY29uc3RydWN0b3IuX2NsYXNzUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT57aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG49dGhpc1tyXTtkZWxldGUgdGhpc1tyXSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXN8fCh0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXM9bmV3IE1hcCksdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzLnNldChyLG4pfX0pfV9hcHBseUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuX2luc3RhbmNlUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT50aGlzW3JdPXQpLHRoaXMuX2luc3RhbmNlUHJvcGVydGllcz12b2lkIDB9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLmVuYWJsZVVwZGF0aW5nKCl9ZW5hYmxlVXBkYXRpbmcoKXt0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyIT09dm9pZCAwJiYodGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlcigpLHRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dm9pZCAwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3IhPT1uJiZ0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsbil9X3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxyLG49YmN0KXtsZXQgaT10aGlzLmNvbnN0cnVjdG9yLG89aS5fYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQsbik7aWYobyE9PXZvaWQgMCl7bGV0IGE9aS5fcHJvcGVydHlWYWx1ZVRvQXR0cmlidXRlKHIsbik7aWYoYT09PXZvaWQgMClyZXR1cm47dGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8TWN0LGE9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobyk6dGhpcy5zZXRBdHRyaWJ1dGUobyxhKSx0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZSZ+TWN0fX1fYXR0cmlidXRlVG9Qcm9wZXJ0eSh0LHIpe2lmKHRoaXMuX3VwZGF0ZVN0YXRlJk1jdClyZXR1cm47bGV0IG49dGhpcy5jb25zdHJ1Y3RvcixpPW4uX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuZ2V0KHQpO2lmKGkhPT12b2lkIDApe2xldCBvPW4uZ2V0UHJvcGVydHlPcHRpb25zKGkpO3RoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfEVjdCx0aGlzW2ldPW4uX3Byb3BlcnR5VmFsdWVGcm9tQXR0cmlidXRlKHIsbyksdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmfkVjdH19cmVxdWVzdFVwZGF0ZUludGVybmFsKHQscixuKXtsZXQgaT0hMDtpZih0IT09dm9pZCAwKXtsZXQgbz10aGlzLmNvbnN0cnVjdG9yO249bnx8by5nZXRQcm9wZXJ0eU9wdGlvbnModCksby5fdmFsdWVIYXNDaGFuZ2VkKHRoaXNbdF0scixuLmhhc0NoYW5nZWQpPyh0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5oYXModCl8fHRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzLnNldCh0LHIpLG4ucmVmbGVjdD09PSEwJiYhKHRoaXMuX3VwZGF0ZVN0YXRlJkVjdCkmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz09PXZvaWQgMCYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNldCh0LG4pKSk6aT0hMX0hdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlJiZpJiYodGhpcy5fdXBkYXRlUHJvbWlzZT10aGlzLl9lbnF1ZXVlVXBkYXRlKCkpfXJlcXVlc3RVcGRhdGUodCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxyKSx0aGlzLnVwZGF0ZUNvbXBsZXRlfV9lbnF1ZXVlVXBkYXRlKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZXxTY3Q7dHJ5e3lpZWxkIHRoaXMuX3VwZGF0ZVByb21pc2V9Y2F0Y2gocil7fWxldCB0PXRoaXMucGVyZm9ybVVwZGF0ZSgpO3JldHVybiB0IT1udWxsJiYoeWllbGQgdCksIXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZX0pfWdldCBfaGFzUmVxdWVzdGVkVXBkYXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVN0YXRlJlNjdH1nZXQgaGFzVXBkYXRlZCgpe3JldHVybiB0aGlzLl91cGRhdGVTdGF0ZSZ3Y3R9cGVyZm9ybVVwZGF0ZSgpe2lmKCF0aGlzLl9oYXNSZXF1ZXN0ZWRVcGRhdGUpcmV0dXJuO3RoaXMuX2luc3RhbmNlUHJvcGVydGllcyYmdGhpcy5fYXBwbHlJbnN0YW5jZVByb3BlcnRpZXMoKTtsZXQgdD0hMSxyPXRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzO3RyeXt0PXRoaXMuc2hvdWxkVXBkYXRlKHIpLHQ/dGhpcy51cGRhdGUocik6dGhpcy5fbWFya1VwZGF0ZWQoKX1jYXRjaChuKXt0aHJvdyB0PSExLHRoaXMuX21hcmtVcGRhdGVkKCksbn10JiYodGhpcy5fdXBkYXRlU3RhdGUmd2N0fHwodGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8d2N0LHRoaXMuZmlyc3RVcGRhdGVkKHIpKSx0aGlzLnVwZGF0ZWQocikpfV9tYXJrVXBkYXRlZCgpe3RoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmflNjdH1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fZ2V0VXBkYXRlQ29tcGxldGUoKX1fZ2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2V9c2hvdWxkVXBkYXRlKHQpe3JldHVybiEwfXVwZGF0ZSh0KXt0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcyE9PXZvaWQgMCYmdGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuc2l6ZT4wJiYodGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuZm9yRWFjaCgocixuKT0+dGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShuLHRoaXNbbl0scikpLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPXZvaWQgMCksdGhpcy5fbWFya1VwZGF0ZWQoKX11cGRhdGVkKHQpe31maXJzdFVwZGF0ZWQodCl7fX07QWNlPUNjdDtnM1tBY2VdPSEwO3ZhciBJY2U9RWxlbWVudC5wcm90b3R5cGUsSWlpPUljZS5tc01hdGNoZXNTZWxlY3Rvcnx8SWNlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcjt2YXIgakg9d2luZG93LlNoYWRvd1Jvb3QmJih3aW5kb3cuU2hhZHlDU1M9PT12b2lkIDB8fHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsQWN0PVN5bWJvbCgpLGwxPWNsYXNze2NvbnN0cnVjdG9yKHQscil7aWYociE9PUFjdCl0aHJvdyBuZXcgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PXR9Z2V0IHN0eWxlU2hlZXQoKXtyZXR1cm4gdGhpcy5fc3R5bGVTaGVldD09PXZvaWQgMCYmKGpIPyh0aGlzLl9zdHlsZVNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LHRoaXMuX3N0eWxlU2hlZXQucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSk6dGhpcy5fc3R5bGVTaGVldD1udWxsKSx0aGlzLl9zdHlsZVNoZWV0fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19LFBjdD1lPT5uZXcgbDEoU3RyaW5nKGUpLEFjdCksVXVyPWU9PntpZihlIGluc3RhbmNlb2YgbDEpcmV0dXJuIGUuY3NzVGV4dDtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogJHtlfS4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQKICAgICAgICAgICAgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LmApfSxDaT0oZSwuLi50KT0+e2xldCByPXQucmVkdWNlKChuLGksbyk9Pm4rVXVyKGkpK2VbbysxXSxlWzBdKTtyZXR1cm4gbmV3IGwxKHIsQWN0KX07KHdpbmRvdy5saXRFbGVtZW50VmVyc2lvbnN8fCh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zPVtdKSkucHVzaCgiMi41LjEiKTt2YXIgTGNlPXt9LEVQPWNsYXNzIGV4dGVuZHMgZzN7c3RhdGljIGdldFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlc31zdGF0aWMgX2dldFVuaXF1ZVN0eWxlcygpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3N0eWxlcyIsdGhpcykpKXJldHVybjtsZXQgdD10aGlzLmdldFN0eWxlcygpO2lmKEFycmF5LmlzQXJyYXkodCkpe2xldCByPShvLGEpPT5vLnJlZHVjZVJpZ2h0KChzLGwpPT5BcnJheS5pc0FycmF5KGwpP3IobCxzKToocy5hZGQobCkscyksYSksbj1yKHQsbmV3IFNldCksaT1bXTtuLmZvckVhY2gobz0+aS51bnNoaWZ0KG8pKSx0aGlzLl9zdHlsZXM9aX1lbHNlIHRoaXMuX3N0eWxlcz10PT09dm9pZCAwP1tdOlt0XTt0aGlzLl9zdHlsZXM9dGhpcy5fc3R5bGVzLm1hcChyPT57aWYociBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQmJiFqSCl7bGV0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoci5jc3NSdWxlcykucmVkdWNlKChpLG8pPT5pK28uY3NzVGV4dCwiIik7cmV0dXJuIFBjdChuKX1yZXR1cm4gcn0pfWluaXRpYWxpemUoKXtzdXBlci5pbml0aWFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0VW5pcXVlU3R5bGVzKCksdGhpcy5yZW5kZXJSb290PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpLHdpbmRvdy5TaGFkb3dSb290JiZ0aGlzLnJlbmRlclJvb3QgaW5zdGFuY2VvZiB3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5hZG9wdFN0eWxlcygpfWNyZWF0ZVJlbmRlclJvb3QoKXtyZXR1cm4gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyl9YWRvcHRTdHlsZXMoKXtsZXQgdD10aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXM7dC5sZW5ndGghPT0wJiYod2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiYhd2luZG93LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdz93aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0ucHJlcGFyZUFkb3B0ZWRDc3NUZXh0KHQubWFwKHI9PnIuY3NzVGV4dCksdGhpcy5sb2NhbE5hbWUpOmpIP3RoaXMucmVuZGVyUm9vdC5hZG9wdGVkU3R5bGVTaGVldHM9dC5tYXAocj0+ciBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/cjpyLnN0eWxlU2hlZXQpOnRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzVXBkYXRlZCYmd2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpfXVwZGF0ZSh0KXtsZXQgcj10aGlzLnJlbmRlcigpO3N1cGVyLnVwZGF0ZSh0KSxyIT09TGNlJiZ0aGlzLmNvbnN0cnVjdG9yLnJlbmRlcihyLHRoaXMucmVuZGVyUm9vdCx7c2NvcGVOYW1lOnRoaXMubG9jYWxOYW1lLGV2ZW50Q29udGV4dDp0aGlzfSksdGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzJiYodGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzPSExLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlcy5mb3JFYWNoKG49PntsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kudGV4dENvbnRlbnQ9bi5jc3NUZXh0LHRoaXMucmVuZGVyUm9vdC5hcHBlbmRDaGlsZChpKX0pKX1yZW5kZXIoKXtyZXR1cm4gTGNlfX07RVAuZmluYWxpemVkPSEwO0VQLnJlbmRlcj1DY2U7RVAuc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifTt2YXIga2NlPTAsSWN0PXt9LGpjPShlLHQscik9PntsZXQgbj1yJiZyLm1vZHVsZUlkfHxgY3VzdG9tLXN0eWxlLW1vZHVsZS0ke2tjZSsrfWA7QXJyYXkuaXNBcnJheSh0KXx8KHQ9dD9bdF06W10pLHQuZm9yRWFjaChhPT57aWYoIShhIGluc3RhbmNlb2YgbDEpKXRocm93IG5ldyBFcnJvcigiQW4gaXRlbSBpbiBzdHlsZXMgaXMgbm90IG9mIHR5cGUgQ1NTUmVzdWx0LiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AuIik7aWYoIUljdFthXSl7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZG9tLW1vZHVsZSIpO3MuaW5uZXJIVE1MPWAKICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8c3R5bGU+JHthLnRvU3RyaW5nKCl9PC9zdHlsZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICBgO2xldCBsPWBjdXN0b20tc3R5bGUtbW9kdWxlLSR7a2NlKyt9YDtzLnJlZ2lzdGVyKGwpLEljdFthXT1sfX0pO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtpZihlKXtsZXQgYT1jdXN0b21FbGVtZW50cy5nZXQoZSk7YSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9fZmluYWxpemVkIikmJmNvbnNvbGUud2FybihgVGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24gZm9yICIke2V9IgogICAgICB3YXMgZmluYWxpemVkIGJlZm9yZSBhIHN0eWxlIG1vZHVsZSB3YXMgcmVnaXN0ZXJlZC4KICAgICAgTWFrZSBzdXJlIHRvIGFkZCBjb21wb25lbnQgc3BlY2lmaWMgc3R5bGUgbW9kdWxlcyBiZWZvcmUKICAgICAgaW1wb3J0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGN1c3RvbSBlbGVtZW50LmApLGkuc2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiLGUpfWxldCBvPXImJnIuaW5jbHVkZXx8W107aS5pbm5lckhUTUw9YAogICAgPHRlbXBsYXRlPgogICAgICAke28ubWFwKGE9PmA8c3R5bGUgaW5jbHVkZT0ke2F9Pjwvc3R5bGU+YCl9CiAgICAgICR7dC5tYXAoYT0+YDxzdHlsZSBpbmNsdWRlPSR7SWN0W2FdfT48L3N0eWxlPmApfQogICAgPC90ZW1wbGF0ZT4KICBgLGkucmVnaXN0ZXIobil9O3ZhciBMY3Q9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtzdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn19O2N1c3RvbUVsZW1lbnRzLmRlZmluZSgidmFhZGluLWx1bW8tc3R5bGVzIixMY3QpO3ZhciBxdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQmFzZSAoYmFja2dyb3VuZCkgKi8KICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjZmZmOwoKICAgIC8qIFRpbnQgKi8KICAgIC0tbHVtby10aW50LTVwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMyk7CiAgICAtLWx1bW8tdGludC0xMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4zNyk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC40NCk7CiAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC41KTsKICAgIC0tbHVtby10aW50LTQwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjU3KTsKICAgIC0tbHVtby10aW50LTUwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjY0KTsKICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjcpOwogICAgLS1sdW1vLXRpbnQtNzBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNzcpOwogICAgLS1sdW1vLXRpbnQtODBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuODQpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuOSk7CiAgICAtLWx1bW8tdGludDogI2ZmZjsKCiAgICAvKiBTaGFkZSAqLwogICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCA2MSUsIDI1JSwgMC4wNSk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA1NyUsIDI0JSwgMC4xKTsKICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDUzJSwgMjMlLCAwLjE2KTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDUwJSwgMjIlLCAwLjI2KTsKICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDQ3JSwgMjElLCAwLjM4KTsKICAgIC0tbHVtby1zaGFkZS01MHBjdDogaHNsYSgyMTQsIDQ1JSwgMjAlLCAwLjUpOwogICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgNDMlLCAxOSUsIDAuNjEpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgNDIlLCAxOCUsIDAuNzIpOwogICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgNDElLCAxNyUsIDAuODMpOwogICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgNDAlLCAxNiUsIDAuOTQpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzNSUsIDE1JSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXNoYWRlLTVwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTEwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTEwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0yMHBjdDogdmFyKC0tbHVtby1zaGFkZS0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTQwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC01MHBjdDogdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTcwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTcwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC04MHBjdDogdmFyKC0tbHVtby1zaGFkZS04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtOTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0OiB2YXIoLS1sdW1vLXNoYWRlKTsKCiAgICAvKiBUZXh0ICovCiAgICAtLWx1bW8taGVhZGVyLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QpOwogICAgLS1sdW1vLWJvZHktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC05MHBjdCk7CiAgICAtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNzBwY3QpOwogICAgLS1sdW1vLXRlcnRpYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNTBwY3QpOwogICAgLS1sdW1vLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwoKICAgIC8qIFByaW1hcnkgKi8KICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA5MCUsIDUyJSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdDogaHNsYSgyMTQsIDkwJSwgNTIlLCAwLjUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC4xKTsKICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7CiAgICAtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcjogI2ZmZjsKCiAgICAvKiBFcnJvciAqLwogICAgLS1sdW1vLWVycm9yLWNvbG9yOiBoc2woMywgMTAwJSwgNjElKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCAxMDAlLCA2MCUsIDAuNSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjEpOwogICAgLS1sdW1vLWVycm9yLXRleHQtY29sb3I6IGhzbCgzLCA5MiUsIDUzJSk7CiAgICAtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogU3VjY2VzcyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3I6IGhzbCgxNDUsIDgwJSwgNDIlKTsgLyogaHNsKDE0NCw4MiUsMzclKTsgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNzYlLCA0NCUsIDAuNTUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItMTBwY3Q6IGhzbGEoMTQ1LCA3NiUsIDQ0JSwgMC4xMik7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCAxMDAlLCAzMiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29udHJhc3QtY29sb3I6ICNmZmY7CiAgfQpgLFJjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1JjZS5pbm5lckhUTUw9YDxzdHlsZT4ke3F1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFJjZS5jb250ZW50KTt2YXIgR3VyPUNpYAogIFt0aGVtZX49J2RhcmsnXSB7CiAgICAvKiBCYXNlIChiYWNrZ3JvdW5kKSAqLwogICAgLS1sdW1vLWJhc2UtY29sb3I6IGhzbCgyMTQsIDM1JSwgMjElKTsKCiAgICAvKiBUaW50ICovCiAgICAtLWx1bW8tdGludC01cGN0OiBoc2xhKDIxNCwgNjUlLCA4NSUsIDAuMDYpOwogICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMjE0LCA2MCUsIDgwJSwgMC4xNCk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgyMTQsIDY0JSwgODIlLCAwLjIzKTsKICAgIC0tbHVtby10aW50LTMwcGN0OiBoc2xhKDIxNCwgNjklLCA4NCUsIDAuMzIpOwogICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMjE0LCA3MyUsIDg2JSwgMC40MSk7CiAgICAtLWx1bW8tdGludC01MHBjdDogaHNsYSgyMTQsIDc4JSwgODglLCAwLjUpOwogICAgLS1sdW1vLXRpbnQtNjBwY3Q6IGhzbGEoMjE0LCA4MiUsIDkwJSwgMC42KTsKICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDIxNCwgODclLCA5MiUsIDAuNyk7CiAgICAtLWx1bW8tdGludC04MHBjdDogaHNsYSgyMTQsIDkxJSwgOTQlLCAwLjgpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMjE0LCA5NiUsIDk2JSwgMC45KTsKICAgIC0tbHVtby10aW50OiBoc2woMjE0LCAxMDAlLCA5OCUpOwoKICAgIC8qIFNoYWRlICovCiAgICAtLWx1bW8tc2hhZGUtNXBjdDogaHNsYSgyMTQsIDAlLCAwJSwgMC4wNyk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA0JSwgMiUsIDAuMTUpOwogICAgLS1sdW1vLXNoYWRlLTIwcGN0OiBoc2xhKDIxNCwgOCUsIDQlLCAwLjIzKTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDEyJSwgNiUsIDAuMzIpOwogICAgLS1sdW1vLXNoYWRlLTQwcGN0OiBoc2xhKDIxNCwgMTYlLCA4JSwgMC40MSk7CiAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCAyMCUsIDEwJSwgMC41KTsKICAgIC0tbHVtby1zaGFkZS02MHBjdDogaHNsYSgyMTQsIDI0JSwgMTIlLCAwLjYpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgMjglLCAxMyUsIDAuNyk7CiAgICAtLWx1bW8tc2hhZGUtODBwY3Q6IGhzbGEoMjE0LCAzMiUsIDEzJSwgMC44KTsKICAgIC0tbHVtby1zaGFkZS05MHBjdDogaHNsYSgyMTQsIDMzJSwgMTMlLCAwLjkpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzMyUsIDEzJSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXRpbnQtNXBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMTBwY3Q6IHZhcigtLWx1bW8tdGludC0xMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tdGludC0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tdGludC0zMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNDBwY3Q6IHZhcigtLWx1bW8tdGludC00MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tdGludC01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tdGludC02MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNzBwY3Q6IHZhcigtLWx1bW8tdGludC03MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tdGludC04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tdGludC05MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3Q6IHZhcigtLWx1bW8tdGludCk7CgogICAgLyogVGV4dCAqLwogICAgLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0KTsKICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpOwogICAgLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTcwcGN0KTsKICAgIC0tbHVtby10ZXJ0aWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTUwcGN0KTsKICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKCiAgICAvKiBQcmltYXJ5ICovCiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvcjogaHNsKDIxNCwgODYlLCA1NSUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3Q6IGhzbGEoMjE0LCA4NiUsIDU1JSwgMC41KTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA2MyUsIDAuMSk7CiAgICAtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yOiBoc2woMjE0LCAxMDAlLCA3MCUpOwogICAgLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogRXJyb3IgKi8KICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDkwJSwgNjMlKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC41KTsKICAgIC0tbHVtby1lcnJvci1jb2xvci0xMHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC4xKTsKICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgMTAwJSwgNjclKTsKCiAgICAvKiBTdWNjZXNzICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvcjogaHNsKDE0NSwgNjUlLCA0MiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItNTBwY3Q6IGhzbGEoMTQ1LCA2NSUsIDQyJSwgMC41KTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuMSk7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCA4NSUsIDQ3JSk7CiAgfQoKICBodG1sIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgW3RoZW1lfj0nZGFyayddIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgaDEsCiAgaDIsCiAgaDMsCiAgaDQsCiAgaDUsCiAgaDYgewogICAgY29sb3I6IHZhcigtLWx1bW8taGVhZGVyLXRleHQtY29sb3IpOwogIH0KCiAgYSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3IpOwogIH0KCiAgYmxvY2txdW90ZSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgfQoKICBjb2RlLAogIHByZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKTsKICB9CmA7amMoIiIsR3VyLHttb2R1bGVJZDoibHVtby1jb2xvciJ9KTt2YXIgV3VyPUNpYAogIDpob3N0IHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcikgIWltcG9ydGFudDsKICB9CmA7amMoIiIsV3VyLHttb2R1bGVJZDoibHVtby1jb2xvci1sZWdhY3kiLGluY2x1ZGU6WyJsdW1vLWNvbG9yIl19KTt2YXIgTmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7TmNlLmlubmVySFRNTD1gCiAgPHN0eWxlPgogICAgQGZvbnQtZmFjZSB7CiAgICAgIGZvbnQtZmFtaWx5OiAnbHVtby1pY29ucyc7CiAgICAgIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRWNBQXNBQUFBQUlpd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCQ0FBQUFEc0FBQUJVSUlzbGVrOVRMeklBQUFGRUFBQUFRd0FBQUZaQUlVdUtZMjFoY0FBQUFZZ0FBQUQ0QUFBRHJzQ1U4ZDVuYkhsbUFBQUNnQUFBQzJNQUFCZDRoOVRvMldobFlXUUFBQTNrQUFBQU1BQUFBRFphLzZTc2FHaGxZUUFBRGhRQUFBQWRBQUFBSkFicEEzNW9iWFI0QUFBT05BQUFBQkFBQUFDc3BCQUFBR3h2WTJFQUFBNUVBQUFBV0FBQUFGaDU1SUFzYldGNGNBQUFEcHdBQUFBZkFBQUFJQUZLQVhCdVlXMWxBQUFPdkFBQUFURUFBQUl1VVVKWkNIQnZjM1FBQUEvd0FBQUJLd0FBQWVsbThTelZlSnhqWUdSZ1lPQmlNR0N3WTJCeWNmTUpZZURMU1N6Slk1QmlZR0dBQUpBOE1wc3hKek05a1lFRHhnUEtzWUJwRGlCbWc0Z0NBQ1k3QlVnQWVKeGpZR1MreURpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpHKzBtSU8rcC9GRU1VY3hEQU5LTXdJa2dNQUJuOE1MUUI0bk8zU1dXNkRNQUJGMFV0d0NFbklQTS96aExLOExxaGZYUnliU1AxNFhVWXRIVjloR1lRd1FCTklvM2NVSVBraFFlTTdyaWIxZWtxblhnOTgxWHVDMXF2eTg0bHpvamxlaDNwdXhMMGhQakdqUlU0NzN0ZWxvRWVmQVVOR2pKa3daY2FjQlV0V3JObXdaY2VlQTBkT25MbHc1Y2FkQjA5ZWxQR2hHZitqME5USS82NUtmWGVyVDZKaHFLbnBSS3RnT3B1cWFUcnRLalBVbHFIbWh0bzIxSTdwTDZpNmhscVkzcTdxR1dyZlVBZUdPalRVa2FHT0RYVmlxRk5EblJucTNGQVhocm8wMUpXaHJnMTFZNmhiUTkwWjZ0NVFENFo2Tk5TVG9aNE45V0tvVjBPOUdlcmRVQitHK2pUVWw2R1dSdmtMMjRCa0VYaWN0Vmg5YkZ2VkZiL254dmJ6KzdSZi9ONnpIY2QyYkNmUCtXZ2MxWjlOMGpwTm5FTDZrYlJWUzZIQTJoUVlHaDlUR1IxQ2JDcWEyclhyV09rUUUvc0hOSmdtdFp2b1ZOWnFFMUIxRE5IeHpUUXhDZWhVVFlpSlRReUVOdWkwcVNMZXpyM1BkdXlRZmdtUldPZmRlOCs5NTUxejdybm4vTzRqTG9KL2JSUDBVYUtRTUxGSmpwQkF2cGhMWkMzRGswb2s3V0J6UjIvdXBKczdSeXcvbmZGYmxuL3V1Ti9hcEN2d3JLTHJTdlVxUnVmYm01cG4wZnMwdzRnWXhuR1ZQNnFIbk80YldpRFFHUWd3dFM2bG0zbEIzUW9YMU0ydndFbXV6aXJGMzl5K0VzMitESjhkMXBreXFCSXFvemUzRDErWno0RHJGb2F6eEk4ZFd3TXJEbFoyRE1xUUFSOUFST3NKVSsyY21sVFBhelRjbzUyRjF4VGEyYTIrSzh2dnE5MmRWSG10TG9QZVFYL0FaUFJZR3RoRFlPZVpqQmpLb0ZzVkd1bFIzbFdVOTVXZUNLNDRxSFU3TWhXVUdVS1pEVDNvS1VjRzJHV3VoK0VERGZVWUEvamhBaGwwVE9zSk5ZU0V1N21RbWkzVXpmWHdaS0E0QnNWc0hMWFFZR2dSVzk1dUV0cEoxVmZuOVhpTHJpUkJsRkVxeHNEakEwOXlDTlVvUXh4d2Q3S1dTVHQyeTNHVEtpZmxxSFJTb1daYzNtMTFXYS9mSmRGZ1hENHNTWWZsZUpCS2Q4R016N0o4ZFpuL2NHUkNjS0dEbkEyR2UzZkt6Y3ZsblRETnRoR1dMWHpYL1dhWHRVQW1SZ2VMbEhTcjMwcjBHOVVUWE1iMEF0bXd6T295NzNma1NsSFprZHV3L1RZdVU5Y0FENFl1dFBveFRUc0EzNzk3d1ZyNFovMU5DNXpBUkhyNHZ0eEpqeElmaVpNaE1rYldrKzE0Qm5KWkt3cUdad0Rmc3dMeXhXRFNnMTFyRkxKRjdOb3B4amQxaDEvUU9UK29lemdmdTNZcStIaytkdWY1eCs0MG8xR1RrYUlnaWtLL0lFbkM2YVl4Q1VCYVpKU040WFRZRmpVL1lNTklLcUp3aERHT0NDSThGRFhuWG1YanRHaEdKeVNocWpBT25CT2tXMkpHOVM3R2dZZU1XQVU1SnpobldtQk9hT00rQ0tFUG9xU2ZGREMyVW5xK0RMbFVnVVZVRkZMWkdKZzZqdGxvanNkc2E4a1BPYlB1SmRpNWRuQmRCc0xKTUdUV0RhNHQySnZ0d3VQbzlzK1k4NnN1di9XMzNRRzFyQWFPQVVWK3Z4NEs2ZjJEMDRQVktsQzdXTFNyWnpBaTQ1WlY2bElDN1dvWHFtUnl2VXFvVndyelVvVnNJamVUWFdRditSSDVHVGxCWGlCL0luOGxuMEliQkNBRk9hakFKcmdaWXlPSFdxT2ZVZS9hSGpJMTJSNk9RbzFqQ2d0MjE1bCs0ZjZYUGIrME1Ob3UwVis0M24yRjc3dFNmUmIyNGQ3eml0Z25LbXZZSHM2OXp1Z2FQdkJ3djZpb1hrYjJMZEw2NUF0dzUxdUxrWGx1MWJoTU1SY1hTUGNZb3FLSVJsaDM0bFFQOC81SmJ1VUZ5ZTR2eEQ2LzZNeEZGMTFDMHVWTHI5VWxndzQ0dFMzcE1WaU5MVUV4YnljRmdMSWN0K1FETWliUmlteDF5ZFV6OEZYWml1T0lEQk9NVlgyblVaYytodU5FNVhVSjgxdWlKb2lhYndxYVZGMHVhY0tiYXUvcGw0UjJWVzBYWGxKcmE2Ym9WcllHNjQ2VEY1Tll6d3k0dmpFTlZyRGxjTnBaUGw4REg2WFg4WFdDeDBtdldWWlk2S0ZMcnZzWTY2L3pQaWN0NUZueGFOVVIvanV2WkNNM1R2RDYwRTJXMXRaaXpiWFRQRHVhYmNtMG5iYnpwV0twbUExYXlCUThnaWVkTFVNK0Ewa05qQmpRam11WXo3WXJnSVhZdm1GNjNaTEJ3U1hycG45VGI5d3dkZC9VMUgwUE1RSzNYY084dWwzV1Q3UHlQUGRweTBUZW1LeE5SY0pOYXVpWEpublVEcFVwcFFXczRTblVJeTBFRVNHWXFKWVFMR0h4emFHV3dWSWFTNlk3bVFGTThaallEUTNheGpmNjFTV2pVMzNKd09aQTFwd2FHMUw5bXpmNzFhSFJkWDFKSHc2RnAwYVhoTndicXllR05nNE5iZHpHQ0J4b3o0WlhqeTROdTY5WnI2c0RZNnZNckxVNW5BMVA4SmtiZFdYSjZFUmZNcnl2TmgxSmZROStUNGRJaEd2Szl3M2R4akJCemF0c1EvTWxPSFZJRG5ZcER6Nm9kQVhsUTAxdDJQYTVJYWZkOE1NcHhBZURLUDBDNkNqZ1ZMVDVvc0I2aWNVeDAxbFdqWHh6VC9HeVJGMndlbEVNNVovN2pHM1ZqUTFTck5uNUlieXpPRzVkb2JCMy9RSHh5WnZzWGNvejhJb0V3UzdwbENnK3p4SFFrNDI0cTlCZkVwa0VTSmJGSFF1c0RCU1dGa3VCa29QTzBrTEt3UlZZanhHWGxIVGNURFFNSi9INlRYOWFma083bW5yYVRPMWZlVG5aQVhMdTRjcDdIQVhNbU5HMXllRms5VGdTL05IaFpSLzRRb0JUci9aQis2aENneWwxNU5xMVViTjZuRTEvWm5QMVUyY2l6Q0JwdnM4Y0pRWko0TGtZeDVOL3laUEFVWk5RUTBWNGYzQlFsbFdySzNZUnpsMzBkT1Q2UlZuMnVwTnVyNndvU2E4Q3FwZFQvYUtuQk00bzNqTnVyOWQ5eHF0VVQ2dmVCRXQ5Q2E5YXQrRVJ6RUVoVWtSOHNhNW1RNGFWdkpvVmVFQTh6STRlaTVtVUxYRkd5VTd6LzZUQWVZTFZjcHpTV1pZOFBZWUY1eXJUVjYwc1QwK1hWMTQxdlgrK1dmMTZWMmJGZUdWUFpYeEZwa3Z5ZUtUV0xsemZXMG1uS3hzWTZZMzI5NC8wOTk4U0NmWDFibG01cGJjdkZHbHEvcjA3TVJBTWhZSURpVzVKRktXVzN2ZHJFcENzWlNKRytvbTdadS9QU1NjWkpoTmtMYm1XNVdzcjEycFdxVzV6S3Rsd1JTNGJGT3hVdzE3bUN6eTZsc2tDRGwxV1lPR1dEWXJBRHJNQTdCRER3ZVdXTmQ1a29pSm5SMWR6K3l0TFAycTBTcVBCMWxuSzJjY0I3UlllNEZTb1BrczNpQjN0NHR4VFNIY3RiMnN5MWl2azBwdkh1Q05tNncxZjZ3eHYzK09DZ043OExxZFFuVVZoN1Iwb1RBcDB6T2YycmJXNzcwVnU1QzJkSXlHZFRuSG84elNqaTdkcHBqMFVTb1ZDeitsaFJNVGg1M1RlcTlWYkdmYmp1U2JBb29TZFhheVk0UFlIZzM3NEM2ZjdnbDFCL0RYdUo0L1FYeE9CZEpGSnNwRnNJM2VncG9XVVVDamxUSUZuTllObCtaeVpLbUJlWUtHSGtEMVF5RGxoYUtiS3dLY0lKcUo0VExKMk9tZFkvSldYYWU0RGRHQnc4SFo3ZVhjZ0ZGMnpyMlNvYWxEcnk1aUtxb2EwUHVoZTNoUFEyczNlbFRZTStNSStuM3JLMEtnTDcvTGEzR2VNTHQ2bTd1OTEydkdudnRPUmlJYTBxQm1ocVZpK1hXOVhOQm1xYjhlVmdLeklIZkdJNWJOb0c3WDBVQ3plSVNtcUljTy9uWThGSDdVOGF2WDlmeC9TVCtoeDBzZXpQdzlReThNdW0zR1dmMk40VXkveUlZR1ZCWGJKSFdJWnA3ZGZUY3B0ZE1UcjlRbXE3RGFpSy91a3FDTDRrdDRSVWZTNVhQbk10bVQyMi9tUUZxRjdlbVNxdHJsdThTVkVseERSSnJaT0RrcHV3ZTBWZlRmamRFcDFmN0E3ditmb3pOQlhVSi82V1R1SzJUdEZscEZWWkFaM0xjRnZVaTFaMnAyWVQrRU1Ba0dKVlN0T3pMVEFQZzRJcVdJQWx6UlNqT0JrbDJ6eGozVEt5Y3B6VC9NbnZYM3VhU01XTStnVTBya1hqb2hoZWZWUk1hcHMzL2tMTVNLdjIzbFQyM3V4UXJrUWp5T0psZU1Ec2RoQW5ENlpHRWxXWjVNakNYekNFL2hrV1grV0Y0a256R2hWT3lLMmVRWmVrVjNleW8wekw4a3VZV0NuREN2ampoQWtjVFBPQkRYVmRvYXYzSFZjRm5Rakx2dFY5UzJwMHpBNkplZ1B3TVF4dCt5RmIzbGw5ekdscS81ZFJLYjNjRXlRWW9hTllwaGFySjd4Q0I3QVd4c0xZM2pqWlhZMFhzWmowV2p3YzlJNlBQL2RLQUJuQ1phcUhwYVpFQUN4azRaZUxaU0tOZ1pBQmwrbFlRWDFzSlFPU1gzbjZyNDEwZXZjb3VkNUplQUdVWFZQOUgxdFpPS2VqVHE0T25vMHowZXJybzFGcm5PcG9odmExZC9oVGR0VnNRZEtONVc5UmxUM05qRDBuem55S05UZ0tBTWZXTldjeW9kVjBJR0xQSUhPRjBvNEp5cXVmYUs0ejZXSUl6dUdoM2Q4Yzhjd1FnOEVSK09WeHlyamRtOHZOdWh0czRMb09paEd4SU11VWRnendpWU43eGhoMStvWm5KTnVURzdnUVp2dTRYV1o5R0FaWmpHRXVid2VQcVlodEtEVEgrOVZRa2wxNy9pR3lic25KKzgrc0t0eVByY2xsOXR5NjVac2RzdC85aXFwRUtoN001VmRCeGgzY3NPZE5jNnRXM0kxdXlNMVB6T1hlZ1NPckxGc0ZOSTJPMjdNK1RGMkFwbk45TVV2NXVkNkxqeEl2RVFuSFJ6eEl1NElzQTlNTEZrSm4ydGNab1o3T043ZFhlN3VqcmM4SHJ1c1BLYW1scVh3ZDc3bFFVdUxwaWxhdTRQVU1hcHVlQmI3aXJVNFJvVVhFWVh1VnVJR2xSR21PcCsybE5rYVJQVnppT3FtbGFadmFxRzRkRmdTajBqeEVKV3J2MTJJVVdudG13K3JmUWFyUkUwQXBoNG9jSTZubFVsR3FzK3UzLytUL2V0aFc2MlBwSHAyZUhiWnN0bmgvd09POTV5REFIaWNZMkJrWUdBQTRwbUo2UUh4L0RaZkdiaVpYd0JGR0dwVU56UWk2UCt2bWFjeTNRSnlPUmlZUUtJQU5vVUxWWGljWTJCa1lHQU8rcDhGSkY4d0FBSHpWQVpHQmxTZ0RRQlc5Z052QUFBQWVKeGpZR0JnWUg0eE5EQUF6d1FtandBQUFBQUFUZ0NhQU9nQkNnRXNBVTRCY0FHYUFjUUI3Z0lhQXB3QzZBU2FCTHdFMWdUeUJRNEZLZ1Y2QmRBRi9nWkVCbVlHdGdjWUI1QUlHQWhTQ0dvSS9nbEdDYjRKMmdvRUNqd0tnZ3E0Q3ZBTFVBdVdDN3g0bkdOZ1pHQmcwR1pNWVJCbEFBRW1JT1lDUWdhRy8yQStBd0FZbEFHOEFIaWNiWkU5VHNNd0dJYmY5QS9SU2dnRVltSHhBZ3RxK2pOMlpHajNEdDNUMUdsVE9YSGt1Qlc5QXlmZ0VCeUNnVE53Q0E3QlcvTkpsVkJ0eWQvangrOFhLd21BYTN3aHduRkU2SWIxT0JxNDRPNlBtNlFiNFJiNVFiaU5IaDZGTy9SRDRTNmVNUkh1NFJhYVQ0aGFselIzZUJWdTRBcHZ3azM2ZCtFVytVTzRqWHQ4Q25mb3Y0VzdXT0JIdUllbjZNWHNDdHZQVTF2V2M3M2VtY1NkeElrVzJ0VzVMZFVvSHA3a1RKZmFKVjZ2MVBLZzZ2MTY3SDJtTW1jTE5iV2wxOFpZVlRtNzFhbVBOOTVYazhFZ0V4K250b0RCRGdVcytzaVJzcGFvTWVmN3J1a05Fcml6aVhOdXdTN0htb2U5d2dneHYrZTU1SXpKTXFRVGVOWVYwMHNjdU5iWTgrWXhyVWZHZmNhTVpiL0NOUFFlMDRiVDBsVGhiRXVUMHNmWWhLNksvMjNBbWYzTHgrSDI0aGNqNEdTY0FBQUFlSnh0anRsdWd6QVFSYmtKVUVKSXV1Lzd2cVI4bEdOUEFjV3gwWUFiNWUvTGtsUjk2RWdlblN1ZkdZMDM4UHFLdmY5cmhnR0c4QkVneEE0aWpCQmpqQVFUVExHTFBlempBSWM0d2pGT2NJb3puT01DbDdqQ05XNXdpenZjNHdHUGVNSXpYdkNLTjd6akF6Tjhlb25RUldaU1NhWW1qdnVnNmFzZTk4aEZsdGV4TUptbVZObVYyV0J2ZE5nWlVjK3VqQVd6WFczVURudTF3NDNhc1N0SGM4R3B6QVhYL3B5MGpxVFFaSlRna2N4SkxwYUNGMGxEMzJ4TnQrNDN0QXNuMjlEZnQwMnVES1MyY2pHVU5nc2syNnFLMmxGdGhZb1UyN0lOUHFtaURxZzVnb2UwcHFSNXFTb3FNZGVrL0NVWkZ5d0w0NnJFc2lJbWxlcWlxb015dDRiYVhsdS8xR0xkTkZmNXpiY05tZHIxWVVXQ1plNDdvK3pVbWIvRG9TdGJ3M2NWc2VmOUFMamppUFFBKSBmb3JtYXQoJ3dvZmYnKTsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgfQoKICAgIGh0bWwgewogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tY2VudGVyOiAiXFxlYTAxIjsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLWxlZnQ6ICJcXGVhMDIiOwogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tcmlnaHQ6ICJcXGVhMDMiOwogICAgICAtLWx1bW8taWNvbnMtYW5nbGUtZG93bjogIlxcZWEwNCI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1sZWZ0OiAiXFxlYTA1IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXJpZ2h0OiAiXFxlYTA2IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXVwOiAiXFxlYTA3IjsKICAgICAgLS1sdW1vLWljb25zLWFycm93LWRvd246ICJcXGVhMDgiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctbGVmdDogIlxcZWEwOSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy1yaWdodDogIlxcZWEwYSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy11cDogIlxcZWEwYiI7CiAgICAgIC0tbHVtby1pY29ucy1iYXItY2hhcnQ6ICJcXGVhMGMiOwogICAgICAtLWx1bW8taWNvbnMtYmVsbDogIlxcZWEwZCI7CiAgICAgIC0tbHVtby1pY29ucy1jYWxlbmRhcjogIlxcZWEwZSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGVja21hcms6ICJcXGVhMGYiOwogICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1kb3duOiAiXFxlYTEwIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tbGVmdDogIlxcZWExMSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLXJpZ2h0OiAiXFxlYTEyIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tdXA6ICJcXGVhMTMiOwogICAgICAtLWx1bW8taWNvbnMtY2xvY2s6ICJcXGVhMTQiOwogICAgICAtLWx1bW8taWNvbnMtY29nOiAiXFxlYTE1IjsKICAgICAgLS1sdW1vLWljb25zLWNyb3NzOiAiXFxlYTE2IjsKICAgICAgLS1sdW1vLWljb25zLWRvd25sb2FkOiAiXFxlYTE3IjsKICAgICAgLS1sdW1vLWljb25zLWRyb3Bkb3duOiAiXFxlYTE4IjsKICAgICAgLS1sdW1vLWljb25zLWVkaXQ6ICJcXGVhMTkiOwogICAgICAtLWx1bW8taWNvbnMtZXJyb3I6ICJcXGVhMWEiOwogICAgICAtLWx1bW8taWNvbnMtZXllOiAiXFxlYTFiIjsKICAgICAgLS1sdW1vLWljb25zLWV5ZS1kaXNhYmxlZDogIlxcZWExYyI7CiAgICAgIC0tbHVtby1pY29ucy1tZW51OiAiXFxlYTFkIjsKICAgICAgLS1sdW1vLWljb25zLW1pbnVzOiAiXFxlYTFlIjsKICAgICAgLS1sdW1vLWljb25zLW9yZGVyZWQtbGlzdDogIlxcZWExZiI7CiAgICAgIC0tbHVtby1pY29ucy1waG9uZTogIlxcZWEyMCI7CiAgICAgIC0tbHVtby1pY29ucy1waG90bzogIlxcZWEyMSI7CiAgICAgIC0tbHVtby1pY29ucy1wbGF5OiAiXFxlYTIyIjsKICAgICAgLS1sdW1vLWljb25zLXBsdXM6ICJcXGVhMjMiOwogICAgICAtLWx1bW8taWNvbnMtcmVkbzogIlxcZWEyNCI7CiAgICAgIC0tbHVtby1pY29ucy1yZWxvYWQ6ICJcXGVhMjUiOwogICAgICAtLWx1bW8taWNvbnMtc2VhcmNoOiAiXFxlYTI2IjsKICAgICAgLS1sdW1vLWljb25zLXVuZG86ICJcXGVhMjciOwogICAgICAtLWx1bW8taWNvbnMtdW5vcmRlcmVkLWxpc3Q6ICJcXGVhMjgiOwogICAgICAtLWx1bW8taWNvbnMtdXBsb2FkOiAiXFxlYTI5IjsKICAgICAgLS1sdW1vLWljb25zLXVzZXI6ICJcXGVhMmEiOwogICAgfQogIDwvc3R5bGU+CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChOY2UuY29udGVudCk7dmFyIFl1cj1DaWAKICA6aG9zdCB7CiAgICAtLWx1bW8tc2l6ZS14czogMS42MjVyZW07CiAgICAtLWx1bW8tc2l6ZS1zOiAxLjg3NXJlbTsKICAgIC0tbHVtby1zaXplLW06IDIuMjVyZW07CiAgICAtLWx1bW8tc2l6ZS1sOiAyLjc1cmVtOwogICAgLS1sdW1vLXNpemUteGw6IDMuNXJlbTsKCiAgICAvKiBJY29ucyAqLwogICAgLS1sdW1vLWljb24tc2l6ZS1zOiAxLjI1ZW07CiAgICAtLWx1bW8taWNvbi1zaXplLW06IDEuNWVtOwogICAgLS1sdW1vLWljb24tc2l6ZS1sOiAyLjI1ZW07CiAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KICAgIC0tbHVtby1pY29uLXNpemU6IHZhcigtLWx1bW8taWNvbi1zaXplLW0pOwogIH0KYCxEY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtEY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtZdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChEY2UuY29udGVudCk7dmFyIGp1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBTcXVhcmUgKi8KICAgIC0tbHVtby1zcGFjZS14czogMC4yNXJlbTsKICAgIC0tbHVtby1zcGFjZS1zOiAwLjVyZW07CiAgICAtLWx1bW8tc3BhY2UtbTogMXJlbTsKICAgIC0tbHVtby1zcGFjZS1sOiAxLjVyZW07CiAgICAtLWx1bW8tc3BhY2UteGw6IDIuNXJlbTsKCiAgICAvKiBXaWRlICovCiAgICAtLWx1bW8tc3BhY2Utd2lkZS14czogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UteHMpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtczogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLW06IGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1sOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLWwpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUteGw6IGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhsKTsKCiAgICAvKiBUYWxsICovCiAgICAtLWx1bW8tc3BhY2UtdGFsbC14czogdmFyKC0tbHVtby1zcGFjZS14cykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtczogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLW06IHZhcigtLWx1bW8tc3BhY2UtbSkgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1sOiB2YXIoLS1sdW1vLXNwYWNlLWwpIGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwteGw6IHZhcigtLWx1bW8tc3BhY2UteGwpIGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKTsKICB9CmAsT2NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7T2NlLmlubmVySFRNTD1gPHN0eWxlPiR7anVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoT2NlLmNvbnRlbnQpO3ZhciBYdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQm9yZGVyIHJhZGl1cyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtczogMC4yNWVtOyAvKiBDaGVja2JveCwgYmFkZ2UsIGRhdGUtcGlja2VyIHllYXIgaW5kaWNhdG9yLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLW06IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cywgMC4yNWVtKTsgLyogQnV0dG9uLCB0ZXh0IGZpZWxkLCBtZW51IG92ZXJsYXksIGV0YyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtbDogMC41ZW07IC8qIERpYWxvZywgbm90aWZpY2F0aW9uLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzOiAwLjI1ZW07IC8qIERlcHJlY2F0ZWQgKi8KCiAgICAvKiBTaGFkb3cgKi8KICAgIC0tbHVtby1ib3gtc2hhZG93LXhzOiAwIDFweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTUwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXM6IDAgMnB4IDRweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDNweCAxMnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0zMHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1tOiAwIDJweCA2cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCA4cHggMjRweCAtNHB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbDogMCAzcHggMThweCAtMnB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDEycHggNDhweCAtNnB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3cteGw6IDAgNHB4IDI0cHggLTNweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxOHB4IDY0cHggLThweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKCiAgICAvKiBDbGlja2FibGUgZWxlbWVudCBjdXJzb3IgKi8KICAgIC0tbHVtby1jbGlja2FibGUtY3Vyc29yOiBkZWZhdWx0OwogIH0KYCx6Y2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt6Y2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtYdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh6Y2UuY29udGVudCk7dmFyICR1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBwcmV0dGllci1pZ25vcmUgKi8KICAgIC0tbHVtby1mb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnUm9ib3RvJywgJ1NlZ29lIFVJJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7CgogICAgLyogRm9udCBzaXplcyAqLwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eHM6IDAuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXhzOiAwLjgxMjVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXM6IDAuODc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1tOiAxcmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1sOiAxLjEyNXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteGw6IDEuMzc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eGw6IDEuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXh4eGw6IDIuNXJlbTsKCiAgICAvKiBMaW5lIGhlaWdodHMgKi8KICAgIC0tbHVtby1saW5lLWhlaWdodC14czogMS4yNTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1zOiAxLjM3NTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1tOiAxLjYyNTsKICB9CmAsRmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7RmNlLmlubmVySFRNTD1gPHN0eWxlPiR7JHVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoRmNlLmNvbnRlbnQpO3ZhciBLdXI9Q2lgCiAgaHRtbCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLCB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKSk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1tKTsKICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICB9CgogIC8qIENhbuKAmXQgY29tYmluZSB3aXRoIHRoZSBhYm92ZSBzZWxlY3RvciBiZWNhdXNlIHRoYXQgZG9lc27igJl0IHdvcmsgaW4gYnJvd3NlcnMgd2l0aG91dCBuYXRpdmUgc2hhZG93IGRvbSAqLwogIDpob3N0IHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LW0pOwogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIH0KCiAgc21hbGwsCiAgW3RoZW1lfj0nZm9udC1zaXplLXMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtcyk7CiAgfQoKICBbdGhlbWV+PSdmb250LXNpemUteHMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhzKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXhzKTsKICB9CgogIGgxLAogIGgyLAogIGgzLAogIGg0LAogIGg1LAogIGg2IHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7CiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07CiAgfQoKICBoMSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgaDIgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgfQoKICBoMyB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDQgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1sKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDUgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIG1hcmdpbi1ib3R0b206IDAuMjVlbTsKICB9CgogIGg2IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHMpOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogIH0KCiAgcCwKICBibG9ja3F1b3RlIHsKICAgIG1hcmdpbi10b3A6IDAuNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgfQoKICBhOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgaHIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgaGVpZ2h0OiAxcHg7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiB2YXIoLS1sdW1vLXNwYWNlLXMpIGNhbGModmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pIC8gMik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICB9CgogIGJsb2NrcXVvdGUgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICB9CgogIGIsCiAgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogIGJsb2NrcXVvdGVbZGlyPSdydGwnXSB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogIH0KYDtqYygiIixLdXIse21vZHVsZUlkOiJsdW1vLXR5cG9ncmFwaHkifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCB7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgW3BhcnQ9J2xhYmVsJ106bm90KFtlbXB0eV0pIHsKICAgICAgbWFyZ2luOiAwLjE4NzVlbSAwLjg3NWVtIDAuMTg3NWVtIDAuMzc1ZW07CiAgICB9CgogICAgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB3aWR0aDogY2FsYygxZW0gKyAycHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgbWFyZ2luOiAwLjE4NzVlbTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4xMiwgMC4zMiwgMC41NCwgMiksIGJhY2tncm91bmQtY29sb3IgMC4xNXM7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXSkgW3BhcnQ9J2NoZWNrYm94J10sCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgIH0KCiAgICAvKiBOZWVkZWQgdG8gYWxpZ24gdGhlIGNoZWNrYm94IG5pY2VseSBvbiB0aGUgYmFzZWxpbmUgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnXFwyMDAzJzsKICAgIH0KCiAgICAvKiBDaGVja21hcmsgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIHdpZHRoOiAwOwogICAgICBoZWlnaHQ6IDA7CiAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICBib3JkZXItd2lkdGg6IDAuMTg3NWVtIDAgMCAwLjE4NzVlbTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMC44MTI1ZW07CiAgICAgIGxlZnQ6IDAuNWVtOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNTUpIHJvdGF0ZSgtMTM1ZGVnKTsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHdpZHRoOiAwLjYyNWVtOwogICAgICBoZWlnaHQ6IDEuMDYyNWVtOwogICAgfQoKICAgIC8qIEluZGV0ZXJtaW5hdGUgY2hlY2ttYXJrICovCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdG9wOiA0NSU7CiAgICAgIGhlaWdodDogMTAlOwogICAgICBsZWZ0OiAyMiU7CiAgICAgIHJpZ2h0OiAyMiU7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBib3JkZXI6IDA7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcik7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXM7CiAgICB9CgogICAgLyogRm9jdXMgcmluZyAqLwogICAgOmhvc3QoW2ZvY3VzLXJpbmddKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGVkICovCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBjb2xvcjogdmFyKC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nbGFiZWwnXSA6OnNsb3R0ZWQoKikgewogICAgICBjb2xvcjogaW5oZXJpdDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J106OmFmdGVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC4zNzVlbSAwLjE4NzVlbSAwLjg3NWVtOwogICAgfQoKICAgIC8qIFRyYW5zaXRpb24gdGhlIGNoZWNrbWFyayBpZiBhY3RpdmF0ZWQgd2l0aCB0aGUgbW91c2UgKGRpc2FibGVkIGZvciBncmlkIHNlbGVjdC1hbGwgdGhpcyB3YXkpICovCiAgICA6aG9zdCg6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMsIGhlaWdodCAwLjI1czsKICAgIH0KCiAgICAvKiBVc2VkIGZvciBhY3RpdmF0aW9uICJoYWxvIiAqLwogICAgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNCk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBvcGFjaXR5IDAuOHM7CiAgICB9CgogICAgLyogSG92ZXIgKi8KICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogRGlzYWJsZSBob3ZlciBmb3IgdG91Y2ggZGV2aWNlcyAqLwogICAgQG1lZGlhIChwb2ludGVyOiBjb2Fyc2UpIHsKICAgICAgOmhvc3QoOm5vdChbY2hlY2tlZF0pOm5vdChbaW5kZXRlcm1pbmF0ZV0pOm5vdChbZGlzYWJsZWRdKTpob3ZlcikgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB9CiAgICB9CgogICAgLyogQWN0aXZlICovCiAgICA6aG9zdChbYWN0aXZlXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDVzOwogICAgfQoKICAgIDpob3N0KFthY3RpdmVdW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXTpub3QoW2NoZWNrZWRdKSkgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFzLCAwLjAxczsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgb3BhY2l0eTogMC40OwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWNoZWNrYm94In0pO3ZhciBCY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0aGVtZTp7dHlwZTpTdHJpbmcscmVhZE9ubHk6ITB9fX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSkscj09PSJ0aGVtZSImJnRoaXMuX3NldFRoZW1lKGkpfX07dmFyIFhIPWU9PmNsYXNzIGV4dGVuZHMgQmNlKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0IHI9dGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5fdGVtcGxhdGU7biYmQXJyYXkuZnJvbShuLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGVbaW5jbHVkZV0iKSkuZm9yRWFjaChpPT57dGhpcy5faW5jbHVkZVN0eWxlKGkuZ2V0QXR0cmlidXRlKCJpbmNsdWRlIikscil9KSx0aGlzLl9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil9c3RhdGljIF9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil7bGV0IGk9b3UucHJvdG90eXBlLm1vZHVsZXMsbz0hMSxhPXRoaXMuaXMrIi1kZWZhdWx0LXRoZW1lIjtPYmplY3Qua2V5cyhpKS5zb3J0KChzLGwpPT57bGV0IGM9cy5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLHU9bC5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLGg9WyJsdW1vLSIsIm1hdGVyaWFsLSJdLGY9aC5maWx0ZXIoZD0+cy5pbmRleE9mKGQpPT09MCkubGVuZ3RoPjAscD1oLmZpbHRlcihkPT5sLmluZGV4T2YoZCk9PT0wKS5sZW5ndGg+MDtyZXR1cm4gYyE9PXU/Yz8tMToxOmYhPT1wP2Y/LTE6MTowfSkuZm9yRWFjaChzPT57aWYocyE9PWEpe2xldCBsPWlbc10uZ2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiKTtsJiZsLnNwbGl0KCIgIikuZm9yRWFjaChjPT57bmV3IFJlZ0V4cCgiXiIrYy5zcGxpdCgiKiIpLmpvaW4oIi4qIikrIiQiKS50ZXN0KHRoaXMuaXMpJiYobz0hMCx0aGlzLl9pbmNsdWRlU3R5bGUocyxyKSl9KX19KSwhbyYmaVthXSYmdGhpcy5faW5jbHVkZVN0eWxlKGEscil9c3RhdGljIF9pbmNsdWRlU3R5bGUocixuKXtpZihuJiYhbi5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2luY2x1ZGU9IiR7cn0iXWApKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kuc2V0QXR0cmlidXRlKCJpbmNsdWRlIixyKSxuLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaSl9fX07dmFyIGtjdD0hMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKCk9PntrY3Q9ITB9LHtjYXB0dXJlOiEwfSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PntrY3Q9ITF9LHtjYXB0dXJlOiEwfSk7dmFyIFp1cj1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3RhYmluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX3RhYmluZGV4Q2hhbmdlZCJ9fX19LEhjZT1lPT5jbGFzcyBleHRlbmRzIFp1cihlKXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW59LF9wcmV2aW91c1RhYkluZGV4Ont0eXBlOk51bWJlcn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfaXNTaGlmdFRhYmJpbmc6e3R5cGU6Qm9vbGVhbn19fXJlYWR5KCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57ci5jb21wb3NlZFBhdGgoKVswXT09PXRoaXM/dGhpcy5jb250YWlucyhyLnJlbGF0ZWRUYXJnZXQpfHx0aGlzLl9mb2N1cygpOnIuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLmZvY3VzRWxlbWVudCkhPT0tMSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX3NldEZvY3VzZWQoITApfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3NldEZvY3VzZWQoITEpKSxzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscj0+eyFyLmRlZmF1bHRQcmV2ZW50ZWQmJnIua2V5Q29kZT09PTkmJnIuc2hpZnRLZXkmJih0aGlzLl9pc1NoaWZ0VGFiYmluZz0hMCxIVE1MRWxlbWVudC5wcm90b3R5cGUuZm9jdXMuYXBwbHkodGhpcyksdGhpcy5fc2V0Rm9jdXNlZCghMSksc2V0VGltZW91dCgoKT0+dGhpcy5faXNTaGlmdFRhYmJpbmc9ITEsMCkpfSksdGhpcy5hdXRvZm9jdXMmJiF0aGlzLmRpc2FibGVkJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSx0aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpfSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzQXR0cmlidXRlKCJmb2N1c2VkIikmJnRoaXMuX3NldEZvY3VzZWQoITEpfV9zZXRGb2N1c2VkKHIpe3I/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzZWQiLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXNlZCIpLHImJmtjdD90aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJmb2N1cy1yaW5nIil9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB3aW5kb3cuY29uc29sZS53YXJuKGBQbGVhc2UgaW1wbGVtZW50IHRoZSAnZm9jdXNFbGVtZW50JyBwcm9wZXJ0eSBpbiA8JHt0aGlzLmxvY2FsTmFtZX0+YCksdGhpc31fZm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuX2lzU2hpZnRUYWJiaW5nfHwodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Zm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuZGlzYWJsZWR8fCh0aGlzLmZvY3VzRWxlbWVudC5mb2N1cygpLHRoaXMuX3NldEZvY3VzZWQoITApKX1ibHVyKCl7IXRoaXMuZm9jdXNFbGVtZW50fHwodGhpcy5mb2N1c0VsZW1lbnQuYmx1cigpLHRoaXMuX3NldEZvY3VzZWQoITEpKX1fZGlzYWJsZWRDaGFuZ2VkKHIpe3RoaXMuZm9jdXNFbGVtZW50LmRpc2FibGVkPXIscj8odGhpcy5ibHVyKCksdGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4LHRoaXMudGFiaW5kZXg9LTEsdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIikpOih0eXBlb2YgdGhpcy5fcHJldmlvdXNUYWJJbmRleCE9InVuZGVmaW5lZCImJih0aGlzLnRhYmluZGV4PXRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIikpfV90YWJpbmRleENoYW5nZWQocil7ciE9PXZvaWQgMCYmKHRoaXMuZm9jdXNFbGVtZW50LnRhYkluZGV4PXIpLHRoaXMuZGlzYWJsZWQmJnRoaXMudGFiaW5kZXgmJih0aGlzLnRhYmluZGV4IT09LTEmJih0aGlzLl9wcmV2aW91c1RhYkluZGV4PXRoaXMudGFiaW5kZXgpLHRoaXMudGFiaW5kZXg9cj12b2lkIDApfWNsaWNrKCl7dGhpcy5kaXNhYmxlZHx8c3VwZXIuY2xpY2soKX19O3ZhciBKdXI9L1wvXCpcKlxzK3ZhYWRpbi1kZXYtbW9kZTpzdGFydChbXHNcU10qKXZhYWRpbi1kZXYtbW9kZTplbmRccytcKlwqXC8vaSwkSD13aW5kb3cuVmFhZGluJiZ3aW5kb3cuVmFhZGluLkZsb3cmJndpbmRvdy5WYWFkaW4uRmxvdy5jbGllbnRzO2Z1bmN0aW9uIFF1cigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4hMH1yZXR1cm4gVmNlKGUpfWZ1bmN0aW9uIHRocigpe3RyeXtyZXR1cm4gZWhyKCk/ITA6cmhyKCk/JEg/IW5ocigpOiFRdXIoKTohMX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gZWhyKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWFkaW4uZGV2ZWxvcG1lbnRtb2RlLmZvcmNlIil9ZnVuY3Rpb24gcmhyKCl7cmV0dXJuWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk+PTB9ZnVuY3Rpb24gbmhyKCl7cmV0dXJuISEoJEgmJk9iamVjdC5rZXlzKCRIKS5tYXAodD0+JEhbdF0pLmZpbHRlcih0PT50LnByb2R1Y3Rpb25Nb2RlKS5sZW5ndGg+MCl9ZnVuY3Rpb24gVmNlKGUsdCl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpcmV0dXJuO2xldCByPUp1ci5leGVjKGUudG9TdHJpbmcoKSk7aWYocil0cnl7ZT1uZXcgRnVuY3Rpb24oclsxXSl9Y2F0Y2gobil7Y29uc29sZS5sb2coInZhYWRpbi1kZXZlbG9wbWVudC1tb2RlLWRldGVjdG9yOiB1bmNvbW1lbnRBbmRSdW4oKSBmYWlsZWQiLG4pfXJldHVybiBlKHQpfXdpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e307dmFyIFJjdD1mdW5jdGlvbihlLHQpe2lmKHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlKXJldHVybiBWY2UoZSx0KX07d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9PT12b2lkIDAmJih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZT10aHIoKSk7ZnVuY3Rpb24gaWhyKCl7fXZhciBVY2U9ZnVuY3Rpb24oKXtpZih0eXBlb2YgUmN0PT0iZnVuY3Rpb24iKXJldHVybiBSY3QoaWhyKX07dmFyIF8zPWNsYXNze3N0YXRpYyBkZXRlY3RTY3JvbGxUeXBlKCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC50ZXh0Q29udGVudD0iQUJDRCIsdC5kaXI9InJ0bCIsdC5zdHlsZS5mb250U2l6ZT0iMTRweCIsdC5zdHlsZS53aWR0aD0iNHB4Iix0LnN0eWxlLmhlaWdodD0iMXB4Iix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS50b3A9Ii0xMDAwcHgiLHQuc3R5bGUub3ZlcmZsb3c9InNjcm9sbCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtsZXQgcj0icmV2ZXJzZSI7cmV0dXJuIHQuc2Nyb2xsTGVmdD4wP3I9ImRlZmF1bHQiOih0LnNjcm9sbExlZnQ9Mix0LnNjcm9sbExlZnQ8MiYmKHI9Im5lZ2F0aXZlIikpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCkscn1zdGF0aWMgZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxyLG4pe2xldHtzY3JvbGxMZWZ0Oml9PW47aWYociE9PSJydGwifHwhdClyZXR1cm4gaTtzd2l0Y2godCl7Y2FzZSJuZWdhdGl2ZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aCtpO2Nhc2UicmV2ZXJzZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aC1pfXJldHVybiBpfXN0YXRpYyBzZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LHIsbixpKXtpZihyIT09InJ0bCJ8fCF0KXtuLnNjcm9sbExlZnQ9aTtyZXR1cm59c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOm4uc2Nyb2xsTGVmdD1uLmNsaWVudFdpZHRoLW4uc2Nyb2xsV2lkdGgraTticmVhaztjYXNlInJldmVyc2UiOm4uc2Nyb2xsTGVmdD1uLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaTticmVhaztkZWZhdWx0Om4uc2Nyb2xsTGVmdD1pO2JyZWFrfX19O3ZhciBFMD1bXSxvaHI9ZnVuY3Rpb24oKXtsZXQgZT1EY3QoKTtFMC5mb3JFYWNoKHQ9PntOY3QodCxlKX0pfSxLSCxhaHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIob2hyKTthaHIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZGlyIl19KTt2YXIgTmN0PWZ1bmN0aW9uKGUsdCxyPWUuZ2V0QXR0cmlidXRlKCJkaXIiKSl7dD9lLnNldEF0dHJpYnV0ZSgiZGlyIix0KTpyIT1udWxsJiZlLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9LERjdD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKX0sWkg9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntkaXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19fXN0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCksS0h8fChLSD1fMy5kZXRlY3RTY3JvbGxUeXBlKCkpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZGlyIil8fCh0aGlzLl9fc3Vic2NyaWJlKCksTmN0KHRoaXMsRGN0KCksbnVsbCkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSl7aWYoc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHIsbixpKSxyIT09ImRpciIpcmV0dXJuO2xldCBvPURjdCgpLGE9aT09PW8mJkUwLmluZGV4T2YodGhpcyk9PT0tMSxzPSFpJiZuJiZFMC5pbmRleE9mKHRoaXMpPT09LTE7YXx8cz8odGhpcy5fX3N1YnNjcmliZSgpLE5jdCh0aGlzLG8saSkpOmkhPT1vJiZuPT09byYmdGhpcy5fX3N1YnNjcmliZSghMSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX19zdWJzY3JpYmUoITEpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJkaXIiKX1fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpe2k9PT0iZGlyIiYmbj09PSIiJiYhci5oYXNBdHRyaWJ1dGUoImRpciIpfHxzdXBlci5fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKXtyPT09ImRpciImJiFuP3RoaXMuZGlyPSIiOnN1cGVyLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKX1fX3N1YnNjcmliZShyPSEwKXtyP0UwLmluZGV4T2YodGhpcyk9PT0tMSYmRTAucHVzaCh0aGlzKTpFMC5pbmRleE9mKHRoaXMpPi0xJiZFMC5zcGxpY2UoRTAuaW5kZXhPZih0aGlzKSwxKX1fX2dldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHIpe3JldHVybiBfMy5nZXROb3JtYWxpemVkU2Nyb2xsTGVmdChLSCx0aGlzLmdldEF0dHJpYnV0ZSgiZGlyIil8fCJsdHIiLHIpfV9fc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQocixuKXtyZXR1cm4gXzMuc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoS0gsdGhpcy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIixyLG4pfX07d2luZG93LlZhYWRpbj13aW5kb3cuVmFhZGlufHx7fTt3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnM9d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zfHxbXTt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrPXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2t8fHt9O3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl09ZnVuY3Rpb24oKXtVY2UoKX07dmFyIE9jdCxxY2U9bmV3IFNldCxKSD1lPT5jbGFzcyBleHRlbmRzIFpIKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0e2lzOnJ9PXRoaXM7ciYmIXFjZS5oYXMocikmJih3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnMucHVzaCh0aGlzKSxxY2UuYWRkKHIpLHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2smJihPY3Q9c3IuZGVib3VuY2UoT2N0LGt4LCgpPT57d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFja1sidmFhZGluLXVzYWdlLXN0YXRpc3RpY3MiXSgpfSksSmwoT2N0KSkpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxkb2N1bWVudC5kb2N0eXBlPT09bnVsbCYmY29uc29sZS53YXJuKCdWYWFkaW4gY29tcG9uZW50cyByZXF1aXJlIHRoZSAic3RhbmRhcmRzIG1vZGUiIGRlY2xhcmF0aW9uLiBQbGVhc2UgYWRkIDwhRE9DVFlQRSBodG1sPiB0byB0aGUgSFRNTCBkb2N1bWVudC4nKX19O3ZhciBRSD1jbGFzcyBleHRlbmRzIEpIKEhjZShYSCh5aChtdCkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBRYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB9CgogICAgICAgIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGZsZXg6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBpbnB1dFt0eXBlPSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogMDsKICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgoKICAgICAgPGxhYmVsPgogICAgICAgIDxzcGFuIHBhcnQ9ImNoZWNrYm94Ij4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgY2hlY2tlZD0ie3tjaGVja2VkOjpjaGFuZ2V9fSIKICAgICAgICAgICAgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iCiAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9Int7aW5kZXRlcm1pbmF0ZTo6Y2hhbmdlfX0iCiAgICAgICAgICAgIHJvbGU9InByZXNlbnRhdGlvbiIKICAgICAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgICAgLz4KICAgICAgICA8L3NwYW4+CgogICAgICAgIDxzcGFuIHBhcnQ9ImxhYmVsIj4KICAgICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvbGFiZWw+CiAgICBgfXN0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWNoZWNrYm94In1zdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2NoZWNrZWRDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbmRldGVybWluYXRlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSx2YWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9uIn0sX25hdGl2ZUNoZWNrYm94Ont0eXBlOk9iamVjdH19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm5hbWV9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jaGVja2VkP3RoaXMuX3N0b3JlZE5hbWU6IiJ9c2V0IG5hbWUodCl7dGhpcy5fc3RvcmVkTmFtZT10fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsImNoZWNrYm94IiksdGhpcy5fbmF0aXZlQ2hlY2tib3g9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLl9hZGRBY3RpdmVMaXN0ZW5lcnMoKTtsZXQgdD10aGlzLmdldEF0dHJpYnV0ZSgibmFtZSIpO3QmJih0aGlzLm5hbWU9dCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0ibGFiZWwiXScpLnF1ZXJ5U2VsZWN0b3IoInNsb3QiKS5hZGRFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZS5iaW5kKHRoaXMpKSx0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpfV91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpe2xldCB0PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImxhYmVsIl0nKSxyPXQuZmlyc3RFbGVtZW50Q2hpbGQuYXNzaWduZWROb2RlcygpO3RoaXMuX2lzQXNzaWduZWROb2Rlc0VtcHR5KHIpP3Quc2V0QXR0cmlidXRlKCJlbXB0eSIsIiIpOnQucmVtb3ZlQXR0cmlidXRlKCJlbXB0eSIpfV9pc0Fzc2lnbmVkTm9kZXNFbXB0eSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0wfHx0Lmxlbmd0aD09MSYmdFswXS5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnRbMF0udGV4dENvbnRlbnQudHJpbSgpPT09IiJ9X2NoZWNrZWRDaGFuZ2VkKHQpe3RoaXMuaW5kZXRlcm1pbmF0ZT90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIixCb29sZWFuKHQpKX1faW5kZXRlcm1pbmF0ZUNoYW5nZWQodCl7dD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIix0aGlzLmNoZWNrZWQpfV9hZGRBY3RpdmVMaXN0ZW5lcnMoKXt0aGlzLl9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHRoaXMsImRvd24iLHQ9Pnt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsIiIpfSksdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLCJ1cCIsKCk9PnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhY3RpdmUiKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0QXR0cmlidXRlKCJhY3RpdmUiLCIiKSl9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIiksdGhpcy5pbmRldGVybWluYXRlJiYodGhpcy5pbmRldGVybWluYXRlPSExKSl9KX1nZXQgZm9jdXNFbGVtZW50KCl7cmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpfV9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KXtyZXR1cm4hKHRoaXMuZGlzYWJsZWR8fHQudGFyZ2V0LmxvY2FsTmFtZT09PSJhIil9X2hhbmRsZUNsaWNrKHQpe3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiYodGhpcy5pbmRldGVybWluYXRlPyh0aGlzLmluZGV0ZXJtaW5hdGU9ITEsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSk6dC5jb21wb3NlZFBhdGgoKVswXSE9PXRoaXMuX25hdGl2ZUNoZWNrYm94JiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSkpfV90b2dnbGVDaGVja2VkKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2hhbmdlIix7Y29tcG9zZWQ6ITEsYnViYmxlczohMH0pKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShRSC5pcyxRSCk7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1zKTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKCiAgICAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgIC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdCk7CiAgICB9CgogICAgLyogTm8gKG91dGVyKSBib3JkZXIgKi8KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLWJvcmRlciddKSkgewogICAgICBib3JkZXI6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogQ2VsbCBzdHlsZXMgKi8KCiAgICBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1tKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1tKTsKICAgIH0KCiAgICAvKiBBcHBseSByb3cgYm9yZGVycyBieSBkZWZhdWx0IGFuZCBpbnRyb2R1Y2UgdGhlICJuby1yb3ctYm9yZGVycyIgdmFyaWFudCAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogSGlkZSBmaXJzdCBib2R5IHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J11bZmlyc3RdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLW0pIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgIH0KCiAgICAvKiBGb2N1cy1yaW5nICovCgogICAgW3BhcnR+PSdjZWxsJ106Zm9jdXMgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIDpob3N0KFtuYXZpZ2F0aW5nXSkgW3BhcnR+PSdjZWxsJ106Zm9jdXM6OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERyYWcgYW5kIERyb3Agc3R5bGVzICovCiAgICA6aG9zdChbZHJhZ292ZXJdKTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB6LWluZGV4OiAxMDA7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIHsKICAgICAgei1pbmRleDogMTAwICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ10gewogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgKyAycHgpOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSBbZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIGhlaWdodDogMnB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXI9J2JlbG93J10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgdG9wOiAxMDAlOwogICAgICBib3R0b206IGF1dG87CiAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcj0nYWJvdmUnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICB0b3A6IGF1dG87CiAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0nYmVsb3cnXSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSk6OmFmdGVyLAogICAgW3BhcnR+PSdyb3cnXVtkZXRhaWxzLW9wZW5lZF1bZHJhZ292ZXI9J2Fib3ZlJ10gW3BhcnR+PSdkZXRhaWxzLWNlbGwnXTo6YWZ0ZXIgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdW2RyYWdvdmVyPSdvbi10b3AnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBoZWlnaHQ6IDEwMCU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIHsKICAgICAgLyogQWRkIGJvdHRvbS1zcGFjZSB0byB0aGUgcm93IHNvIHRoZSBkcmFnIG51bWJlciBkb2Vzbid0IGdldCBjbGlwcGVkLiBOZWVkZWQgZm9yIElFL0VkZ2UgKi8KICAgICAgYm9yZGVyLWJvdHRvbTogMTAwcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIHotaW5kZXg6IDEwMCAhaW1wb3J0YW50OwogICAgICBvcGFjaXR5OiAwLjk7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bbGFzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICBbaW9zXSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgICNzY3JvbGxlcjpub3QoW2lvc10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XTpub3QoW2RyYWdzdGFydD0nJ10pOjphZnRlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IHZhcigtLV9ncmlkLWRyYWctc3RhcnQteCk7CiAgICAgIHRvcDogdmFyKC0tX2dyaWQtZHJhZy1zdGFydC15KTsKICAgICAgei1pbmRleDogMTAwOwogICAgICBjb250ZW50OiBhdHRyKGRyYWdzdGFydCk7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpICogMC44KTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3IpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWVycm9yLWNvbG9yKTsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pOwogICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHhzKTsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHRleHQtdHJhbnNmb3JtOiBpbml0aWFsOwogICAgICBsZXR0ZXItc3BhY2luZzogaW5pdGlhbDsKICAgICAgbWluLXdpZHRoOiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1zKSAqIDAuNyk7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAvKiBIZWFkZXJzIGFuZCBmb290ZXJzICovCgogICAgW3BhcnR+PSdoZWFkZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdmb290ZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICB9CgogICAgW3BhcnQ9J3JvdyddOm9ubHktY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLXhsKTsKICAgIH0KCiAgICAvKiBIZWFkZXIgYm9yZGVycyAqLwoKICAgIC8qIEhpZGUgZmlyc3QgaGVhZGVyIHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcDogMDsKICAgIH0KCiAgICBbcGFydD0ncm93J106bGFzdC1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBib3JkZXItYm90dG9tOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSd0b3AnXSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEZvb3RlciBib3JkZXJzICovCgogICAgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3A6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdmb290ZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdib3R0b20nXSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb2x1bW4gcmVvcmRlcmluZyAqLwoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ11bcmVvcmRlci1zdGF0dXM9J2FsbG93ZWQnXSB7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXVtyZW9yZGVyLXN0YXR1cz0nZHJhZ2dpbmcnXSB7CiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpLCB2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgYm94LXNoYWRvdzogdmFyKC0tbHVtby1ib3gtc2hhZG93LXMpOwogICAgICAvKiBUT0RPIFVzZSB0aGUgc2FtZSBzdHlsZXMgYXMgZm9yIHRoZSBjZWxsIGVsZW1lbnQgKHJlb3JkZXItZ2hvc3QgY29waWVzIHN0eWxlcyBmcm9tIHRoZSBjZWxsIGVsZW1lbnQpICovCiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UtcykgdmFyKC0tbHVtby1zcGFjZS1tKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIENvbHVtbiByZXNpemluZyAqLwoKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ10gewogICAgICB3aWR0aDogM3B4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSAqOm5vdChbY29sdW1uLXJlc2l6aW5nXSkgW3BhcnR+PSdjZWxsJ106aG92ZXIgW3BhcnQ9J3Jlc2l6ZS1oYW5kbGUnXSwKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ106YWN0aXZlIHsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdHJhbnNpdGlvbi1kZWxheTogMC4xNXM7CiAgICB9CgogICAgLyogQ29sdW1uIGJvcmRlcnMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdjb2x1bW4tYm9yZGVycyddKSBbcGFydH49J2NlbGwnXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBGcm96ZW4gY29sdW1ucyAqLwoKICAgIFtsYXN0LWZyb3plbl0gewogICAgICBib3JkZXItcmlnaHQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdsZWZ0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBSb3cgc3RyaXBlcyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3Jvdy1zdHJpcGVzJ10pIFtwYXJ0fj0ncm93J106bm90KFtvZGRdKSBbcGFydH49J2JvZHktY2VsbCddLAogICAgOmhvc3QoW3RoZW1lfj0ncm93LXN0cmlwZXMnXSkgW3BhcnR+PSdyb3cnXTpub3QoW29kZF0pIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10gewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1jb250cmFzdC01cGN0KSwgdmFyKC0tbHVtby1jb250cmFzdC01cGN0KSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICAgIH0KCiAgICAvKiBTZWxlY3RlZCByb3cgKi8KCiAgICAvKiBSYWlzZSB0aGUgc2VsZWN0ZWQgcm93cyBhYm92ZSB1bnNlbGVjdGVkIHJvd3MgKHNvIHRoYXQgYm94LXNoYWRvdyBjYW4gY292ZXIgdW5zZWxlY3RlZCByb3dzKSAqLwogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSB7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSBbcGFydH49J2JvZHktY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvciksIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICB9CgogICAgLyogQ292ZXIgdGhlIGJvcmRlciBvZiBhbiB1bnNlbGVjdGVkIHJvdyAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm94LXNoYWRvdzogMCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgMCAwIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb21wYWN0ICovCgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydD0ncm93J106b25seS1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtbSk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1zKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0PSdyb3cnXVtmaXJzdF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgbWluLWhlaWdodDogY2FsYyh2YXIoLS1sdW1vLXNpemUtcykgLSB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkpOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXhzKSB2YXIoLS1sdW1vLXNwYWNlLXMpOwogICAgfQoKICAgIC8qIFdyYXAgY2VsbCBjb250ZW50cyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3dyYXAtY2VsbC1jb250ZW50J10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIH0KCiAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtsYXN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVt0aGVtZX49J2NvbHVtbi1ib3JkZXJzJ10pIFtwYXJ0fj0nY2VsbCddOm5vdChbbGFzdC1jb2x1bW5dKTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSB7CiAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVtvdmVyZmxvd349J3JpZ2h0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWdyaWQifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCgudmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveCkgewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgfQogIGAse21vZHVsZUlkOiJ2YWFkaW4tZ3JpZC1zZWxlY3QtYWxsLWNoZWNrYm94LWx1bW8ifSk7dmFyIEdjZT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLHNocj1HY2UmJkdjZVsxXT49OCxXY2U9MyxZY2U9aDkoe2JlaGF2aW9yczpbSnMsdjldLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF90ZW1wbGF0ZUNvc3Q6MCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU2l6ZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9tYXhTY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3ZpZXdwb3J0SGVpZ2h0K3RoaXMuX3Njcm9sbE9mZnNldH0sZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KGUpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5fdmlydHVhbFN0YXJ0VmFsPWV9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sc2V0IF9waHlzaWNhbFN0YXJ0KGUpe2U9ZSV0aGlzLl9waHlzaWNhbENvdW50LGU8MCYmKGU9dGhpcy5fcGh5c2ljYWxDb3VudCtlKSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe2xldCBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe2xldCB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl0sdD50aGlzLl9zY3JvbGxQb3NpdGlvbilyZXR1cm4gbn0pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7bGV0IGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtsZXQgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7dDx0aGlzLl9zY3JvbGxCb3R0b20mJihlPW4pLHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl19KSx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LHVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllczpmdW5jdGlvbigpe2xldCBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD10aGlzLnNjcm9sbFRhcmdldD09PXRoaXM/MDpwYXJzZUludChlWyJwYWRkaW5nLXRvcCJdLDEwKSx0aGlzLl9pc1JUTD1Cb29sZWFuKGUuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX3ZpZXdwb3J0V2lkdGg9dGhpcy4kLml0ZW1zLm9mZnNldFdpZHRoLHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodH0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXtsZXQgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDtsZXQgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7bGV0e3BoeXNpY2FsVG9wOm4saW5kZXhlczppfT10aGlzLl9nZXRSZXVzYWJsZXMocik7cj8odGhpcy5fcGh5c2ljYWxUb3A9bix0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2kubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0LWkubGVuZ3RoKSx0aGlzLl91cGRhdGUoaSxyP251bGw6aSksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLDApLGxpKX19LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24oZSl7bGV0IHQscixuLGk9W10sbz10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxhPXRoaXMuX3ZpcnR1YWxTdGFydCxzPXRoaXMuX3ZpcnR1YWxFbmQsbD10aGlzLl9waHlzaWNhbENvdW50LGM9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0LHU9dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LGg9dGhpcy5fc2Nyb2xsVG9wLGY9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj1oLWMpOih0PXRoaXMuX3BoeXNpY2FsRW5kLHI9dS1mKTtuPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF0scj1yLW4sIShpLmxlbmd0aD49bHx8cjw9byk7KWlmKGUpe2lmKHMraS5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50fHxjK24+PWgtdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO2kucHVzaCh0KSxjPWMrbix0PSh0KzEpJWx9ZWxzZXtpZihhLWkubGVuZ3RoPD0wfHxjK3RoaXMuX3BoeXNpY2FsU2l6ZS1uPD1mKWJyZWFrO2kucHVzaCh0KSxjPWMtbix0PXQ9PT0wP2wtMTp0LTF9cmV0dXJue2luZGV4ZXM6aSxwaHlzaWNhbFRvcDpjLXRoaXMuX3Njcm9sbE9mZnNldH19LF91cGRhdGU6ZnVuY3Rpb24oZSx0KXtpZighKGUmJmUubGVuZ3RoPT09MHx8dGhpcy5fcGh5c2ljYWxDb3VudD09PTApKXtpZih0aGlzLl9hc3NpZ25Nb2RlbHMoZSksdGhpcy5fdXBkYXRlTWV0cmljcyhlKSx0KWZvcig7dC5sZW5ndGg7KXtsZXQgcj10LnBvcCgpO3RoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9waHlzaWNhbFNpemVzW3JdfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsQm90dG9tIT0wJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKGUpe2xldCByPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrZSxXY2UsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCktdGhpcy5fcGh5c2ljYWxDb3VudCxuPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSk7aWYoIShyPDApKXtpZihyPjApe2xldCBpPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChyKSk7Zm9yKGxldCBvPTA7bzxyO28rKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50K3IsdGhpcy5fcGh5c2ljYWxTdGFydD50aGlzLl9waHlzaWNhbEVuZCYmdGhpcy5faXNJbmRleFJlbmRlcmVkKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpJiZ0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpPHRoaXMuX3BoeXNpY2FsRW5kJiYodGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3IpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLWkpL3Isbj1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpfXRoaXMuX3ZpcnR1YWxFbmQ+PXRoaXMuX3ZpcnR1YWxDb3VudC0xfHxuPT09MHx8KHRoaXMuX2lzQ2xpZW50RnVsbCgpP3RoaXMuX3BoeXNpY2FsU2l6ZTx0aGlzLl9vcHRQaHlzaWNhbFNpemUmJnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyx0aGlzLl9jbGFtcChNYXRoLnJvdW5kKDUwL3RoaXMuX3RlbXBsYXRlQ29zdCksMSxuKSksa3gpOnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyxuKSxsaSkpfX0sX3JlbmRlcjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuaXNBdHRhY2hlZHx8IXRoaXMuX2lzVmlzaWJsZSkpaWYodGhpcy5fcGh5c2ljYWxDb3VudCE9PTApe2xldHtwaHlzaWNhbFRvcDplLGluZGV4ZXM6dH09dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrdC5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QubGVuZ3RoLHRoaXMuX3VwZGF0ZSh0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChXY2UpKX0sX2l0ZW1zQ2hhbmdlZDpmdW5jdGlvbihlKXtlLnBhdGg9PT0iaXRlbXMiJiYodGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXtsZXQgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF91cGRhdGVNZXRyaWNzOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9pc1Zpc2libGUpcmV0dXJuO2NpKCk7bGV0IHQ9MCxyPTAsbj10aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obyl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK3Qtcix0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PW4mJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgoaSpuK3QpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTtsZXQgZT10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24odCl7dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbdF0pLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19KX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fdmlydHVhbFN0YXJ0PT09MD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZihlIT09MCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtZTtsZXQgdD10aGlzLl9zY3JvbGxUb3A7IXNociYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsZT1lfHx0aGlzLl9zY3JvbGxIZWlnaHQ9PT0wLGU9ZXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUsKGV8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCkmJih0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCsicHgiLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwwfHxlPnRoaXMuaXRlbXMubGVuZ3RoLTF8fChjaSgpLHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSlyZXR1cm47ZT10aGlzLl9jbGFtcChlLDAsdGhpcy5fdmlydHVhbENvdW50LTEpLCghdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHxlPj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpJiYodGhpcy5fdmlydHVhbFN0YXJ0PWUtMSksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7bGV0IHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxTdGFydCxuPTAsaT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtmb3IoO3I8ZSYmbjw9aTspbj1uK3RoaXMuX3BoeXNpY2FsU2l6ZXNbdF0sdD0odCsxKSV0aGlzLl9waHlzaWNhbENvdW50LHIrKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtuKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH0sX3Jlc2V0QXZlcmFnZTpmdW5jdGlvbigpe3RoaXMuX3BoeXNpY2FsQXZlcmFnZT0wLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50PTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLGZ1bmN0aW9uKCl7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pc1Zpc2libGU/KHRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITApLHRoaXMuX3Jlc2V0QXZlcmFnZSgpLHRoaXMuX3JlbmRlcigpKTp0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCExKX0sTmkpfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0KyhlLXRoaXMuX3ZpcnR1YWxTdGFydCkpJXRoaXMuX3BoeXNpY2FsQ291bnR9LF9jbGFtcDpmdW5jdGlvbihlLHQscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgodCxlKSl9LF9kZWJvdW5jZTpmdW5jdGlvbihlLHQscil7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW2VdPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNbZV0scix0LmJpbmQodGhpcykpLEpsKHRoaXMuX2RlYm91bmNlcnNbZV0pfX0pO3ZhciB0Vj1jbGFzcyBleHRlbmRzIFljZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57c2l6ZTp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxfdmlkeE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZWZmZWN0aXZlU2l6ZUNoYW5nZWQoX2VmZmVjdGl2ZVNpemUpIl19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKCl7fV9hZnRlclNjcm9sbCgpe31fZ2V0Um93VGFyZ2V0KCl7fV9jcmVhdGVTY3JvbGxlclJvd3MoKXt9X2NhblBvcHVsYXRlKCl7fXNjcm9sbFRvSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInNjcm9sbFRvSW5kZXgiKSx0aGlzLl9zY3JvbGxpbmdUb0luZGV4PSEwLHQ9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9lZmZlY3RpdmVTaXplLTEpLHRoaXMuJC50YWJsZS5zY3JvbGxUb3A9dC90aGlzLl9lZmZlY3RpdmVTaXplKih0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fbWF4U2Nyb2xsVG9wKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldCgxZTYpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHQtdGhpcy5fdmlkeE9mZnNldCkpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKTtsZXQgcj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKG49Pm4uaW5kZXg9PT10KVswXTtpZihyKXtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtNYXRoLmFicyhuKT4xJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9bix0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfXRoaXMuX3Njcm9sbGluZ1RvSW5kZXg9ITF9X2VmZmVjdGl2ZVNpemVDaGFuZ2VkKHQpe2xldCByLG49MDt0aGlzLl9pdGVyYXRlSXRlbXMoKGksbyk9PntpZihvPT09dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07cj1hLmluZGV4LG49YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9fSksdGhpcy5pdGVtcyYmdDx0aGlzLml0ZW1zLmxlbmd0aCYmKHRoaXMuX3Njcm9sbFRvcD0wKSxBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpfHwodGhpcy5pdGVtcz17bGVuZ3RoOk1hdGgubWluKHQsMWU1KX0pLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5faXRlbXNDaGFuZ2VkKHtwYXRoOiJpdGVtcyJ9KSksdGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKHRoaXMuaXRlbXMubGVuZ3RoLHQpfHwwLHRoaXMuX3Njcm9sbFRvcD09PTAmJih0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fc2Nyb2xsVG9JbmRleChNYXRoLm1pbih0LTEscikpKSx0aGlzLl9pdGVyYXRlSXRlbXMoaT0+e2xldCBvPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07aWYoby5pbmRleD09PXImJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1NYXRoLnJvdW5kKG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW4pKSxvLmluZGV4PT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5faXRlbXNGb2N1c2FibGUmJnRoaXMuJC5pdGVtcy5jb250YWlucyh0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkpe2xldCBhPUFycmF5LmZyb20odGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50RWxlbWVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLl9pdGVtc0ZvY3VzYWJsZSk7by5jaGlsZHJlblthXS5mb2N1cygpfX0pKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3VwZGF0ZSgpKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fcG9zaXRpb25JdGVtcygpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7bGV0IHQ7aXNOYU4odGhpcy5fcGh5c2ljYWxUb3ApJiYodD0hMCx0aGlzLl9waHlzaWNhbFRvcD0wKTtsZXQgcj10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMobj0+e3RoaXMuX3BoeXNpY2FsSXRlbXNbbl0uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7cn1weClgLHIrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbl19KSx0JiZ0aGlzLl9zY3JvbGxUb0luZGV4KDApfV9pbmNyZWFzZVBvb2xJZk5lZWRlZCh0KXt0PT09MCYmdGhpcy5fc2Nyb2xsaW5nVG9JbmRleHx8IXRoaXMuX2NhblBvcHVsYXRlKCl8fCF0aGlzLl9lZmZlY3RpdmVTaXplfHwodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkP3RoaXMuX29wdFBoeXNpY2FsU2l6ZSE9PTEvMCYmKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLE5pLCgpPT57dGhpcy5fdXBkYXRlTWV0cmljcygpO2xldCByPXRoaXMuX29wdFBoeXNpY2FsU2l6ZS10aGlzLl9waHlzaWNhbFNpemUsbj1NYXRoLmNlaWwoci90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpO3RoaXMuX3BoeXNpY2FsQ291bnQrbj50aGlzLl9lZmZlY3RpdmVTaXplJiYobj1NYXRoLm1heCgwLHRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fcGh5c2ljYWxDb3VudCkpLHRoaXMuX3BoeXNpY2FsU2l6ZSYmbj4wJiZ0aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJihzdXBlci5faW5jcmVhc2VQb29sSWZOZWVkZWQobiksdGhpcy5fX3Jlb3JkZXJDaGlsZE5vZGVzKCkpfSkpOih0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWQ9ITAsc3VwZXIuX2luY3JlYXNlUG9vbElmTmVlZGVkKDI1KSkpfV9fcmVvcmRlckNoaWxkTm9kZXMoKXtsZXQgdD1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZE5vZGVzKTshIXQucmVkdWNlKChuLGksbyxhKT0+e2lmKG89PT0wfHxhW28tMV0uaW5kZXg9PT1pLmluZGV4LTEpcmV0dXJuIG59LCEwKXx8dC5zb3J0KChuLGkpPT5uLmluZGV4LWkuaW5kZXgpLmZvckVhY2gobj0+dGhpcy4kLml0ZW1zLmFwcGVuZENoaWxkKG4pKX1fY3JlYXRlUG9vbCh0KXtsZXQgcj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj10aGlzLl9jcmVhdGVTY3JvbGxlclJvd3ModCk7bi5mb3JFYWNoKG89PnIuYXBwZW5kQ2hpbGQobykpLHRoaXMuX2dldFJvd1RhcmdldCgpLmFwcGVuZENoaWxkKHIpO2xldCBpPXRoaXMucXVlcnlTZWxlY3RvcigiW3Nsb3RdIik7aWYoaSl7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInNsb3QiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsImZvby1iYXIiKSxpLnNldEF0dHJpYnV0ZSgic2xvdCIsbyl9cmV0dXJuIFRtKHRoaXMsKCk9PnRoaXMubm90aWZ5UmVzaXplKCkpLG59X2Fzc2lnbk1vZGVscyh0KXt0aGlzLl9pdGVyYXRlSXRlbXMoKHIsbik9PntsZXQgaT10aGlzLl9waHlzaWNhbEl0ZW1zW3JdO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiaGlkZGVuIixuPj10aGlzLl9lZmZlY3RpdmVTaXplLGkpLHRoaXMuX3VwZGF0ZVNjcm9sbGVySXRlbShpLG4rKHRoaXMuX3ZpZHhPZmZzZXR8fDApKX0sdCl9X3Njcm9sbEhhbmRsZXIoKXtsZXQgdD10aGlzLiQudGFibGUuc2Nyb2xsVG9wLXRoaXMuX3Njcm9sbFBvc2l0aW9uO3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9zY3JvbGxIYW5kbGVyKTtsZXQgcj10aGlzLl92aWR4T2Zmc2V0O3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT50aGlzLl9tYXhTY3JvbGxUb3ApJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZT90aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCk6dGhpcy5fdmlkeE9mZnNldD0wLHRoaXMuX3ZpZHhPZmZzZXQhPT1yJiZ0aGlzLl91cGRhdGUoKSx0aGlzLl9hZnRlclNjcm9sbCgpfV9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCl7aWYoTWF0aC5hYnModCk+MWU0KXtpZih0aGlzLl9ub1NjYWxlKXt0aGlzLl9ub1NjYWxlPSExO3JldHVybn1sZXQgcj10aGlzLiQudGFibGUuc2Nyb2xsVG9wLyh0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLG49cip0aGlzLl9lZmZlY3RpdmVTaXplO3RoaXMuX3ZpZHhPZmZzZXQ9TWF0aC5yb3VuZChuLXIqdGhpcy5fdmlydHVhbENvdW50KX1lbHNle2xldCByPXRoaXMuX3ZpZHhPZmZzZXR8fDAsbj0xZTMsaT0xMDA7dGhpcy5fc2Nyb2xsVG9wPT09MD8odGhpcy5fdmlkeE9mZnNldD0wLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KDApKTp0aGlzLmZpcnN0VmlzaWJsZUluZGV4PG4mJnRoaXMuX3ZpZHhPZmZzZXQ+MCYmKHRoaXMuX3ZpZHhPZmZzZXQtPU1hdGgubWluKHRoaXMuX3ZpZHhPZmZzZXQsaSksciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5maXJzdFZpc2libGVJbmRleCsoci10aGlzLl92aWR4T2Zmc2V0KSksdGhpcy5fbm9TY2FsZT0hMCk7bGV0IG89dGhpcy5fZWZmZWN0aXZlU2l6ZS10aGlzLl92aXJ0dWFsQ291bnQ7dGhpcy5fc2Nyb2xsVG9wPj10aGlzLl9tYXhTY3JvbGxUb3AmJnRoaXMuX21heFNjcm9sbFRvcD4wPyh0aGlzLl92aWR4T2Zmc2V0PW8sciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5fdmlydHVhbENvdW50KSk6dGhpcy5maXJzdFZpc2libGVJbmRleD50aGlzLl92aXJ0dWFsQ291bnQtbiYmdGhpcy5fdmlkeE9mZnNldDxvJiYodGhpcy5fdmlkeE9mZnNldCs9TWF0aC5taW4oby10aGlzLl92aWR4T2Zmc2V0LGkpLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgtKHRoaXMuX3ZpZHhPZmZzZXQtcikpLHRoaXMuX25vU2NhbGU9ITApfX1fYWNjZXNzSXJvbkxpc3RBUEkodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3NBc3luY0VuYWJsZWQ9ITE7bGV0IHI9dC5hcHBseSh0aGlzKTtyZXR1cm4gdGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3M9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3MsTmksKCk9PnRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSEwKSxyfV9kZWJvdW5jZVJlbmRlcih0LHIpe3N1cGVyLl9kZWJvdW5jZVJlbmRlcigoKT0+dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkodCkscil9X3dhcm5Qcml2YXRlQVBJQWNjZXNzKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkJiZjb25zb2xlLndhcm4oYEFjY2Vzc2luZyBwcml2YXRlIEFQSSAoJHt0fSkhYCl9X3JlbmRlcigpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZW5kZXIpfV9pdGVtc0NoYW5nZWQoKXt9Z2V0IF9maXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuZmlyc3RWaXNpYmxlSW5kZXgpfWdldCBfbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIubGFzdFZpc2libGVJbmRleCl9X3Njcm9sbFRvSW5kZXgodCl7dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuc2Nyb2xsVG9JbmRleCh0KSl9Z2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJmaXJzdFZpc2libGVJbmRleCIpLHN1cGVyLmZpcnN0VmlzaWJsZUluZGV4fXNldCBmaXJzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleD10fWdldCBsYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJsYXN0VmlzaWJsZUluZGV4Iiksc3VwZXIubGFzdFZpc2libGVJbmRleH1zZXQgbGFzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXg9dH11cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygidXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzIiksc3VwZXIudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1fcmVzaXplSGFuZGxlcigpe3N1cGVyLl9yZXNpemVIYW5kbGVyKCksY2koKX19O3ZhciBqY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfYTExeVVwZGF0ZUdyaWRTaXplKHNpemUsIF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfV9hMTF5R2V0SGVhZGVyUm93Q291bnQocil7cmV0dXJuIHIuZmlsdGVyKG49Pm4uc29tZShpPT5pLl9oZWFkZXJUZW1wbGF0ZXx8aS5oZWFkZXJSZW5kZXJlcnx8aS5wYXRofHxpLmhlYWRlcikpLmxlbmd0aH1fYTExeUdldEZvb3RlclJvd0NvdW50KHIpe3JldHVybiByLmZpbHRlcihuPT5uLnNvbWUoaT0+aS5faGVhZGVyVGVtcGxhdGV8fGkuaGVhZGVyUmVuZGVyZXIpKS5sZW5ndGh9X2ExMXlVcGRhdGVHcmlkU2l6ZShyLG4pe2lmKHI9PT12b2lkIDB8fG49PT12b2lkIDApcmV0dXJuO2xldCBpPW5bbi5sZW5ndGgtMV07dGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIscit0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQobikrdGhpcy5fYTExeUdldEZvb3RlclJvd0NvdW50KG4pKSx0aGlzLiQudGFibGUuc2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IixpJiZpLmxlbmd0aHx8MCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpfV9hMTF5VXBkYXRlSGVhZGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLG4rMSkpfV9hMTF5VXBkYXRlRm9vdGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmZvb3Rlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLHRoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSt0aGlzLnNpemUrbisxKSl9X2ExMXlVcGRhdGVSb3dSb3dpbmRleChyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixuK3RoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSsxKX1fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHIsbil7ci5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLEJvb2xlYW4obikpLEFycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT5pLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsQm9vbGVhbihuKSkpfV9hMTF5VXBkYXRlUm93TGV2ZWwocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1sZXZlbCIsbisxKX1fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQocixuKXtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+e3R5cGVvZiBuPT0iYm9vbGVhbiI/aS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG4pOmkuaGFzQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIikmJmkucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIil9KX1fYTExeVNldFJvd0RldGFpbHNDZWxsKHIsbil7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpIT09biYmaS5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLG4uaWQpfSl9X2ExMXlVcGRhdGVDZWxsQ29sc3BhbihyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLWNvbHNwYW4iLE51bWJlcihuKSl9X2ExMXlVcGRhdGVTb3J0ZXJzKCl7QXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoInZhYWRpbi1ncmlkLXNvcnRlciIpKS5mb3JFYWNoKHI9PntsZXQgbj1yLnBhcmVudE5vZGU7Zm9yKDtuJiZuLmxvY2FsTmFtZSE9PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiOyluPW4ucGFyZW50Tm9kZTtuJiZuLmFzc2lnbmVkU2xvdCYmbi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImFyaWEtc29ydCIse2FzYzoiYXNjZW5kaW5nIixkZXNjOiJkZXNjZW5kaW5nIn1bU3RyaW5nKHIuZGlyZWN0aW9uKV18fCJub25lIil9KX19O3ZhciBYY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmVJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjZWxsLWFjdGl2YXRlIix0aGlzLl9hY3RpdmF0ZUl0ZW0uYmluZCh0aGlzKSl9X2FjdGl2YXRlSXRlbShyKXtsZXQgbj1yLmRldGFpbC5tb2RlbCxpPW4/bi5pdGVtOm51bGw7aSYmKHRoaXMuYWN0aXZlSXRlbT10aGlzLl9pdGVtc0VxdWFsKHRoaXMuYWN0aXZlSXRlbSxpKT9udWxsOmkpfV9vbkNsaWNrKHIpe2lmKHIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW5bbi5pbmRleE9mKHRoaXMuJC50YWJsZSktM107aWYoIWl8fGkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik+LTEpcmV0dXJuO2xldCBvPWkuX2NvbnRlbnQsYT10aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudDshby5jb250YWlucyhhKSYmIXRoaXMuX2lzRm9jdXNhYmxlKHIudGFyZ2V0KSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKGkucGFyZW50RWxlbWVudCl9fSkpfV9pc0ZvY3VzYWJsZShyKXtyZXR1cm4gbGhyKHIpfX0sbGhyPWU9PntpZighZS5wYXJlbnROb2RlKXJldHVybiExO2xldCByPUFycmF5LmZyb20oZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0YWJpbmRleF0sIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIG9iamVjdCwgaWZyYW1lLCBsYWJlbCwgYVtocmVmXSwgYXJlYVtocmVmXSIpKS5maWx0ZXIobj0+bi5nZXRBdHRyaWJ1dGUoInBhcnQiKSE9PSJjZWxsIGJvZHktY2VsbCIpLmluZGV4T2YoZSkhPT0tMTtyZXR1cm4hZS5kaXNhYmxlZCYmcn07dmFyICRjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOkFycmF5fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2l0ZW1zQ2hhbmdlZChpdGVtcywgaXRlbXMuKiwgaXNBdHRhY2hlZCkiXX1faXRlbXNDaGFuZ2VkKHIsbixpKXtpZighIWkpe2lmKCFBcnJheS5pc0FycmF5KHIpKXtyPT1udWxsJiYodGhpcy5zaXplPTApLHRoaXMuZGF0YVByb3ZpZGVyPT09dGhpcy5fYXJyYXlEYXRhUHJvdmlkZXImJih0aGlzLmRhdGFQcm92aWRlcj12b2lkIDApO3JldHVybn10aGlzLnNpemU9ci5sZW5ndGgsdGhpcy5kYXRhUHJvdmlkZXI9dGhpcy5kYXRhUHJvdmlkZXJ8fHRoaXMuX2FycmF5RGF0YVByb3ZpZGVyLHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfX1fYXJyYXlEYXRhUHJvdmlkZXIocixuKXtsZXQgaT0oQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKT90aGlzLml0ZW1zOltdKS5zbGljZSgwKTt0aGlzLl9maWx0ZXJzJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX2ZpbHRlcnMsImZpbHRlcmluZyIsaSkmJihpPXRoaXMuX2ZpbHRlcihpKSksdGhpcy5zaXplPWkubGVuZ3RoLHIuc29ydE9yZGVycy5sZW5ndGgmJnRoaXMuX2NoZWNrUGF0aHModGhpcy5fc29ydGVycywic29ydGluZyIsaSkmJihpPWkuc29ydCh0aGlzLl9tdWx0aVNvcnQuYmluZCh0aGlzKSkpO2xldCBvPXIucGFnZSpyLnBhZ2VTaXplLGE9bytyLnBhZ2VTaXplLHM9aS5zbGljZShvLGEpO24ocyxpLmxlbmd0aCl9X2NoZWNrUGF0aHMocixuLGkpe2lmKCFpLmxlbmd0aClyZXR1cm4hMTtsZXQgbz0hMDtmb3IobGV0IGEgaW4gcil7bGV0IHM9clthXS5wYXRoO2lmKCFzfHxzLmluZGV4T2YoIi4iKT09PS0xKWNvbnRpbnVlO2xldCBsPXMucmVwbGFjZSgvXC5bXi5dKiQvLCIiKTtEYS5nZXQobCxpWzBdKT09PXZvaWQgMCYmKGNvbnNvbGUud2FybihgUGF0aCAiJHtzfSIgdXNlZCBmb3IgJHtufSBkb2VzIG5vdCBleGlzdCBpbiBhbGwgb2YgdGhlIGl0ZW1zLCAke259IGlzIGRpc2FibGVkLmApLG89ITEpfXJldHVybiBvfV9tdWx0aVNvcnQocixuKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAoaT0+aS5kaXJlY3Rpb249PT0iYXNjIj90aGlzLl9jb21wYXJlKERhLmdldChpLnBhdGgsciksRGEuZ2V0KGkucGF0aCxuKSk6aS5kaXJlY3Rpb249PT0iZGVzYyI/dGhpcy5fY29tcGFyZShEYS5nZXQoaS5wYXRoLG4pLERhLmdldChpLnBhdGgscikpOjApLnJlZHVjZSgoaSxvKT0+aXx8bywwKX1fbm9ybWFsaXplRW1wdHlWYWx1ZShyKXtyZXR1cm5bdm9pZCAwLG51bGxdLmluZGV4T2Yocik+PTA/IiI6aXNOYU4ocik/ci50b1N0cmluZygpOnJ9X2NvbXBhcmUocixuKXtyZXR1cm4gcj10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKHIpLG49dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShuKSxyPG4/LTE6cj5uPzE6MH1fZmlsdGVyKHIpe3JldHVybiByLmZpbHRlcihuPT50aGlzLl9maWx0ZXJzLmZpbHRlcihpPT57bGV0IG89dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShEYS5nZXQoaS5wYXRoLG4pKSxhPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoaS52YWx1ZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBvLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPT09LTF9KS5sZW5ndGg9PT0wKX19O3ZhciBLY2U9ZT0+Y2xhc3MgZXh0ZW5kcyB5aChlKXtyZWFkeSgpe3N1cGVyLnJlYWR5KCk7bGV0IHI9dGhpcy4kLnNjcm9sbGVyO0VtKHIsInRyYWNrIix0aGlzLl9vbkhlYWRlclRyYWNrLmJpbmQodGhpcykpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixuPT5yLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikmJm4ucHJldmVudERlZmF1bHQoKSksci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PSJyZXNpemUtaGFuZGxlIiYmbi5wcmV2ZW50RGVmYXVsdCgpKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PT0icmVzaXplLWhhbmRsZSImJm4ucHJldmVudERlZmF1bHQoKSl9X29uSGVhZGVyVHJhY2socil7bGV0IG49ci50YXJnZXQ7aWYobi5nZXRBdHRyaWJ1dGUoInBhcnQiKT09PSJyZXNpemUtaGFuZGxlIil7bGV0IG89bi5wYXJlbnRFbGVtZW50Ll9jb2x1bW47Zm9yKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpO28ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI7KW89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoby5fY2hpbGRDb2x1bW5zLDApLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gbC5fb3JkZXItYy5fb3JkZXJ9KS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIWwuaGlkZGVufSkucG9wKCk7bGV0IGE9QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImNlbGwiXScpKSxzPWEuZmlsdGVyKGw9PmwuX2NvbHVtbj09PW8pWzBdO2lmKHMub2Zmc2V0V2lkdGgpe2xldCBsPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHMpLGM9MTArcGFyc2VJbnQobC5wYWRkaW5nTGVmdCkrcGFyc2VJbnQobC5wYWRkaW5nUmlnaHQpK3BhcnNlSW50KGwuYm9yZGVyTGVmdFdpZHRoKStwYXJzZUludChsLmJvcmRlclJpZ2h0V2lkdGgpK3BhcnNlSW50KGwubWFyZ2luTGVmdCkrcGFyc2VJbnQobC5tYXJnaW5SaWdodCksdT1zLm9mZnNldFdpZHRoKyh0aGlzLl9faXNSVEw/cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXIuZGV0YWlsLng6ci5kZXRhaWwueC1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KTtvLndpZHRoPU1hdGgubWF4KGMsdSkrInB4IixvLmZsZXhHcm93PTB9YS5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwuX2NvbHVtbi5fb3JkZXItYy5fY29sdW1uLl9vcmRlcn0pLmZvckVhY2goZnVuY3Rpb24obCxjLHUpe2M8dS5pbmRleE9mKHMpJiYobC5fY29sdW1uLndpZHRoPWwub2Zmc2V0V2lkdGgrInB4IixsLl9jb2x1bW4uZmxleEdyb3c9MCl9KSxyLmRldGFpbC5zdGF0ZT09PSJlbmQiJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciLCExLHRoaXMuJC5zY3JvbGxlciksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlc2l6ZSIse2RldGFpbDp7cmVzaXplZENvbHVtbjpvfX0pKSksdGhpcy5fcmVzaXplSGFuZGxlcigpfX19O3ZhciBaY2U9Y2xhc3MgSmNle2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmdyaWQ9dCx0aGlzLnBhcmVudENhY2hlPXIsdGhpcy5wYXJlbnRJdGVtPW4sdGhpcy5pdGVtQ2FjaGVzPXt9LHRoaXMuaXRlbXM9e30sdGhpcy5lZmZlY3RpdmVTaXplPTAsdGhpcy5zaXplPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9e319aXNMb2FkaW5nKCl7cmV0dXJuIEJvb2xlYW4oT2JqZWN0LmtleXModGhpcy5wZW5kaW5nUmVxdWVzdHMpLmxlbmd0aHx8T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5maWx0ZXIodD0+dGhpcy5pdGVtQ2FjaGVzW3RdLmlzTG9hZGluZygpKVswXSl9Z2V0SXRlbUZvckluZGV4KHQpe2xldHtjYWNoZTpyLHNjYWxlZEluZGV4Om59PXRoaXMuZ2V0Q2FjaGVBbmRJbmRleCh0KTtyZXR1cm4gci5pdGVtc1tuXX11cGRhdGVTaXplKCl7dGhpcy5lZmZlY3RpdmVTaXplPSF0aGlzLnBhcmVudEl0ZW18fHRoaXMuZ3JpZC5faXNFeHBhbmRlZCh0aGlzLnBhcmVudEl0ZW0pP3RoaXMuc2l6ZStPYmplY3Qua2V5cyh0aGlzLml0ZW1DYWNoZXMpLnJlZHVjZSgodCxyKT0+e2xldCBuPXRoaXMuaXRlbUNhY2hlc1tyXTtyZXR1cm4gbi51cGRhdGVTaXplKCksdCtuLmVmZmVjdGl2ZVNpemV9LDApOjB9ZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh0KXtpZighdGhpcy5pdGVtQ2FjaGVzW3RdKXtsZXQgcj1uZXcgSmNlKHRoaXMuZ3JpZCx0aGlzLHRoaXMuaXRlbXNbdF0pO3RoaXMuaXRlbUNhY2hlc1t0XT1yLHRoaXMuZ3JpZC5fbG9hZFBhZ2UoMCxyKX19Z2V0Q2FjaGVBbmRJbmRleCh0KXtsZXQgcj10LG49T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89TnVtYmVyKG5baV0pLGE9dGhpcy5pdGVtQ2FjaGVzW29dO2lmKHI8PW8pcmV0dXJue2NhY2hlOnRoaXMsc2NhbGVkSW5kZXg6cn07aWYocjw9bythLmVmZmVjdGl2ZVNpemUpcmV0dXJuIGEuZ2V0Q2FjaGVBbmRJbmRleChyLW8tMSk7ci09YS5lZmZlY3RpdmVTaXplfXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OnJ9fX0sUWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57cGFnZVNpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjUwLG9ic2VydmVyOiJfcGFnZVNpemVDaGFuZ2VkIn0sZGF0YVByb3ZpZGVyOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhUHJvdmlkZXJDaGFuZ2VkIn0sbG9hZGluZzp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9jYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpjZSh0aGlzKX19LGl0ZW1JZFBhdGg6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGV4cGFuZGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NpemVDaGFuZ2VkKHNpemUpIiwiX2l0ZW1JZFBhdGhDaGFuZ2VkKGl0ZW1JZFBhdGgpIiwiX2V4cGFuZGVkSXRlbXNDaGFuZ2VkKGV4cGFuZGVkSXRlbXMuKikiXX1fc2l6ZUNoYW5nZWQocil7bGV0IG49ci10aGlzLl9jYWNoZS5zaXplO3RoaXMuX2NhY2hlLnNpemUrPW4sdGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSs9bix0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCl9X2dldEl0ZW0ocixuKXtpZihyPj10aGlzLl9lZmZlY3RpdmVTaXplKXJldHVybjtuLmluZGV4PXI7bGV0e2NhY2hlOmksc2NhbGVkSW5kZXg6b309dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxhPWkuaXRlbXNbb107YT8odGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMSxuKSx0aGlzLl91cGRhdGVJdGVtKG4sYSksdGhpcy5faXNFeHBhbmRlZChhKSYmaS5lbnN1cmVTdWJDYWNoZUZvclNjYWxlZEluZGV4KG8pKToodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMCxuKSx0aGlzLl9sb2FkUGFnZSh0aGlzLl9nZXRQYWdlRm9ySW5kZXgobyksaSkpfV9leHBhbmRlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7ci5pdGVtIT09dm9pZCAwJiYobj90aGlzLmV4cGFuZEl0ZW0oci5pdGVtKTp0aGlzLmNvbGxhcHNlSXRlbShyLml0ZW0pKX1nZXRJdGVtSWQocil7cmV0dXJuIHRoaXMuaXRlbUlkUGF0aD90aGlzLmdldCh0aGlzLml0ZW1JZFBhdGgscik6cn1faXNFeHBhbmRlZChyKXtyZXR1cm4gdGhpcy5fX2V4cGFuZGVkS2V5cy5oYXModGhpcy5nZXRJdGVtSWQocikpfV9leHBhbmRlZEl0ZW1zQ2hhbmdlZCgpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5fYXNzaWduTW9kZWxzKCl9X2l0ZW1JZFBhdGhDaGFuZ2VkKCl7dGhpcy5fX2NhY2hlRXhwYW5kZWRLZXlzKCl9X19jYWNoZUV4cGFuZGVkS2V5cygpe3RoaXMuZXhwYW5kZWRJdGVtcyYmKHRoaXMuX19leHBhbmRlZEtleXM9bmV3IFNldCx0aGlzLmV4cGFuZGVkSXRlbXMuZm9yRWFjaChyPT57dGhpcy5fX2V4cGFuZGVkS2V5cy5hZGQodGhpcy5nZXRJdGVtSWQocikpfSkpfWV4cGFuZEl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKXx8KHRoaXMuZXhwYW5kZWRJdGVtcz1bLi4udGhpcy5leHBhbmRlZEl0ZW1zLHJdKX1jb2xsYXBzZUl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKSYmKHRoaXMuZXhwYW5kZWRJdGVtcz10aGlzLmV4cGFuZGVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZ2V0SW5kZXhMZXZlbChyKXtsZXR7Y2FjaGU6bn09dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxpPTA7Zm9yKDtuLnBhcmVudENhY2hlOyluPW4ucGFyZW50Q2FjaGUsaSsrO3JldHVybiBpfV9jYW5Qb3B1bGF0ZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX2hhc0RhdGEmJnRoaXMuX2NvbHVtblRyZWUpfV9sb2FkUGFnZShyLG4pe2lmKCFuLnBlbmRpbmdSZXF1ZXN0c1tyXSYmdGhpcy5kYXRhUHJvdmlkZXIpe3RoaXMuX3NldExvYWRpbmcoITApLG4ucGVuZGluZ1JlcXVlc3RzW3JdPSEwO2xldCBpPXtwYWdlOnIscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxzb3J0T3JkZXJzOnRoaXMuX21hcFNvcnRlcnMoKSxmaWx0ZXJzOnRoaXMuX21hcEZpbHRlcnMoKSxwYXJlbnRJdGVtOm4ucGFyZW50SXRlbX07dGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5kYXRhUHJvdmlkZXIoaSwobyxhKT0+e2EhPT12b2lkIDA/bi5zaXplPWE6aS5wYXJlbnRJdGVtJiYobi5zaXplPW8ubGVuZ3RoKTtsZXQgcz1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikubWFwKGw9PmwuX2l0ZW0pO28uZm9yRWFjaCgobCxjKT0+e2xldCB1PXIqdGhpcy5wYWdlU2l6ZStjO24uaXRlbXNbdV09bCx0aGlzLl9pc0V4cGFuZGVkKGwpJiZzLmluZGV4T2YobCk+LTEmJm4uZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh1KX0pLHRoaXMuX2hhc0RhdGE9ITAsZGVsZXRlIG4ucGVuZGluZ1JlcXVlc3RzW3JdLHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEsbW8uYWZ0ZXIoMCksKCk9Pnt0aGlzLl9zZXRMb2FkaW5nKCExKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+IWwuaGlkZGVuKS5mb3JFYWNoKGw9Pnt0aGlzLl9jYWNoZS5nZXRJdGVtRm9ySW5kZXgobC5pbmRleCkmJnRoaXMuX2dldEl0ZW0obC5pbmRleCxsKX0pLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpfSksdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCl8fHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YS5mbHVzaCgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCl9KX19X2dldFBhZ2VGb3JJbmRleChyKXtyZXR1cm4gTWF0aC5mbG9vcihyL3RoaXMucGFnZVNpemUpfWNsZWFyQ2FjaGUoKXt0aGlzLl9jYWNoZT1uZXcgWmNlKHRoaXMpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PntBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2gobj0+e24uX2luc3RhbmNlJiZuLl9pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KCJpdGVtIix7fSwhMSl9KX0pLHRoaXMuX2NhY2hlLnNpemU9dGhpcy5zaXplfHwwLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9oYXNEYXRhPSExLHRoaXMuX2Fzc2lnbk1vZGVscygpLCghdGhpcy5fZWZmZWN0aXZlU2l6ZXx8IXRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZCkmJnRoaXMuX2xvYWRQYWdlKDAsdGhpcy5fY2FjaGUpfV9wYWdlU2l6ZUNoYW5nZWQocixuKXtuIT09dm9pZCAwJiZyIT09biYmdGhpcy5jbGVhckNhY2hlKCl9X2NoZWNrU2l6ZSgpe3RoaXMuc2l6ZT09PXZvaWQgMCYmdGhpcy5fZWZmZWN0aXZlU2l6ZT09PTAmJmNvbnNvbGUud2FybigiVGhlIDx2YWFkaW4tZ3JpZD4gbmVlZHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiBvcmRlciB0byBkaXNwbGF5IHJvd3MuIFNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRvIHRoZSBgc2l6ZWAgcHJvcGVydHksIG9yIHByb3ZpZGUgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBgZGF0YVByb3ZpZGVyYFx1MjAxOXMgYGNhbGxiYWNrYCBjYWxsLiIpfV9kYXRhUHJvdmlkZXJDaGFuZ2VkKHIsbil7biE9PXZvaWQgMCYmdGhpcy5jbGVhckNhY2hlKCksciYmdGhpcy5pdGVtcyYmdGhpcy5pdGVtcy5sZW5ndGgmJnRoaXMuX3Njcm9sbFRvSW5kZXgodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpLHRoaXMuX2RlYm91bmNlckNoZWNrU2l6ZT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDaGVja1NpemUsbW8uYWZ0ZXIoMmUzKSx0aGlzLl9jaGVja1NpemUuYmluZCh0aGlzKSksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfV9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKXt0aGlzLl9oYXNEYXRhfHx0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1faXRlbXNFcXVhbChyLG4pe3JldHVybiB0aGlzLmdldEl0ZW1JZChyKT09PXRoaXMuZ2V0SXRlbUlkKG4pfV9nZXRJdGVtSW5kZXhJbkFycmF5KHIsbil7bGV0IGk9LTE7cmV0dXJuIG4uZm9yRWFjaCgobyxhKT0+e3RoaXMuX2l0ZW1zRXF1YWwobyxyKSYmKGk9YSl9KSxpfXNjcm9sbFRvSW5kZXgocil7c3VwZXIuc2Nyb2xsVG9JbmRleChyKSwhaXNOYU4ocikmJih0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKXx8IXRoaXMuY2xpZW50SGVpZ2h0KSYmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleD1yKX1fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCl7aWYodGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4JiZ0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtsZXQgcj10aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg7ZGVsZXRlIHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCx0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCYmdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wuZmx1c2goKSx0aGlzLnNjcm9sbFRvSW5kZXgocil9fX07dmFyIHR1ZT1lPT5jbGFzcyBleHRlbmRzIGV7cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX2FkZE5vZGVPYnNlcnZlcigpfV9oYXNDb2x1bW5Hcm91cHMocil7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIilyZXR1cm4hMDtyZXR1cm4hMX1fZ2V0Q2hpbGRDb2x1bW5zKHIpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2RlcyhyKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KX1fZmxhdHRlbkNvbHVtbkdyb3VwcyhyKXtyZXR1cm4gci5tYXAobj0+bi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj90aGlzLl9nZXRDaGlsZENvbHVtbnMobik6W25dKS5yZWR1Y2UoKG4saSk9Pm4uY29uY2F0KGkpLFtdKX1fZ2V0Q29sdW1uVHJlZSgpe2xldCByPXZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcih0aGlzLl9pc0NvbHVtbkVsZW1lbnQpLG49W107Zm9yKGxldCBpPXI7bi5wdXNoKGkpLCEhdGhpcy5faGFzQ29sdW1uR3JvdXBzKGkpOylpPXRoaXMuX2ZsYXR0ZW5Db2x1bW5Hcm91cHMoaSk7cmV0dXJuIG59X3VwZGF0ZUNvbHVtblRyZWUoKXtsZXQgcj10aGlzLl9nZXRDb2x1bW5UcmVlKCk7dGhpcy5fYXJyYXlFcXVhbHMocix0aGlzLl9jb2x1bW5UcmVlKXx8KHRoaXMuX2NvbHVtblRyZWU9cil9X2FkZE5vZGVPYnNlcnZlcigpe3RoaXMuX29ic2VydmVyPW5ldyB2aCh0aGlzLHI9PntsZXQgbj1yLmFkZGVkTm9kZXMuZmlsdGVyKG89Pm8ubG9jYWxOYW1lPT09InRlbXBsYXRlIiYmby5jbGFzc0xpc3QuY29udGFpbnMoInJvdy1kZXRhaWxzIikpWzBdO24mJnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSE9PW4mJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGU9bik7bGV0IGk9bz0+by5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KS5sZW5ndGg+MDtpZihpKHIuYWRkZWROb2Rlcyl8fGkoci5yZW1vdmVkTm9kZXMpKXtsZXQgbz1yLnJlbW92ZWROb2Rlcy5mbGF0TWFwKHM9PnMuX2FsbENlbGxzKSxhPXM9Pm8uZmlsdGVyKGw9PmwuX2NvbnRlbnQuY29udGFpbnMocykpLmxlbmd0aDt0aGlzLl9fcmVtb3ZlU29ydGVycyh0aGlzLl9zb3J0ZXJzLmZpbHRlcihhKSksdGhpcy5fX3JlbW92ZUZpbHRlcnModGhpcy5fZmlsdGVycy5maWx0ZXIoYSkpLHRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKX10aGlzLl9kZWJvdW5jZXJDaGVja0ltcG9ydHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzLG1vLmFmdGVyKDJlMyksdGhpcy5fY2hlY2tJbXBvcnRzLmJpbmQodGhpcykpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfSl9X2FycmF5RXF1YWxzKHIsbil7aWYoIXJ8fCFufHxyLmxlbmd0aCE9bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTAsbz1yLmxlbmd0aDtpPG87aSsrKWlmKHJbaV1pbnN0YW5jZW9mIEFycmF5JiZuW2ldaW5zdGFuY2VvZiBBcnJheSl7aWYoIXRoaXMuX2FycmF5RXF1YWxzKHJbaV0sbltpXSkpcmV0dXJuITF9ZWxzZSBpZihyW2ldIT1uW2ldKXJldHVybiExO3JldHVybiEwfV9jaGVja0ltcG9ydHMoKXtbInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIsInZhYWRpbi1ncmlkLWZpbHRlciIsInZhYWRpbi1ncmlkLWZpbHRlci1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC10cmVlLXRvZ2dsZSIsInZhYWRpbi1ncmlkLXNlbGVjdGlvbi1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0LWNvbHVtbiIsInZhYWRpbi1ncmlkLXNvcnRlciJdLmZvckVhY2gocj0+e2xldCBuPXRoaXMucXVlcnlTZWxlY3RvcihyKTtuJiYhKG4gaW5zdGFuY2VvZiBtdCkmJmNvbnNvbGUud2FybihgTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIDwke3J9PiBlbGVtZW50LmApfSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpe0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRyIikpLmZvckVhY2gocj0+dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpKX1fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpe0FycmF5LmZyb20oci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSknKSkuc29ydCgobixpKT0+bi5fY29sdW1uLl9vcmRlci1pLl9jb2x1bW4uX29yZGVyKS5mb3JFYWNoKChuLGksbyk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0LWNvbHVtbiIsaT09PTAsbiksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWNvbHVtbiIsaT09PW8ubGVuZ3RoLTEsbil9KX1faXNDb2x1bW5FbGVtZW50KHIpe3JldHVybiByLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJi9cYmNvbHVtblxiLy50ZXN0KHIubG9jYWxOYW1lKX19O3ZhciBldWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle2dldEV2ZW50Q29udGV4dChyKXtsZXQgbj17fSxpPXIuY29tcG9zZWRQYXRoKCksbz1pW2kuaW5kZXhPZih0aGlzLiQudGFibGUpLTNdO3JldHVybiBvJiYobi5zZWN0aW9uPVsiYm9keSIsImhlYWRlciIsImZvb3RlciIsImRldGFpbHMiXS5maWx0ZXIoYT0+by5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKGEpPi0xKVswXSxvLl9jb2x1bW4mJihuLmNvbHVtbj1vLl9jb2x1bW4pLChuLnNlY3Rpb249PT0iYm9keSJ8fG4uc2VjdGlvbj09PSJkZXRhaWxzIikmJk9iamVjdC5hc3NpZ24obix0aGlzLl9fZ2V0Um93TW9kZWwoby5wYXJlbnRFbGVtZW50KSkpLG59fTt2YXIgcnVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2ZpbHRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmaWx0ZXItY2hhbmdlZCIsdGhpcy5fZmlsdGVyQ2hhbmdlZC5iaW5kKHRoaXMpKX1fZmlsdGVyQ2hhbmdlZChyKXtyLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX19hZGRGaWx0ZXIoci50YXJnZXQpLHRoaXMuX19hcHBseUZpbHRlcnMoKX1fX3JlbW92ZUZpbHRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9maWx0ZXJzPXRoaXMuX2ZpbHRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCkpfV9fYWRkRmlsdGVyKHIpe3RoaXMuX2ZpbHRlcnMuaW5kZXhPZihyKT09PS0xJiZ0aGlzLl9maWx0ZXJzLnB1c2gocil9X19hcHBseUZpbHRlcnMoKXt0aGlzLmRhdGFQcm92aWRlciYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLmNsZWFyQ2FjaGUoKX1fbWFwRmlsdGVycygpe3JldHVybiB0aGlzLl9maWx0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLHZhbHVlOnIudmFsdWV9KSl9fTt2YXIgVDA9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLXRlbXBsYXRpemVyIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGF0YUhvc3Q6T2JqZWN0LHRlbXBsYXRlOk9iamVjdCxfdGVtcGxhdGVJbnN0YW5jZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wYXJlbnRQYXRoVmFsdWVzOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX0sX2dyaWQ6T2JqZWN0fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZChfdGVtcGxhdGVJbnN0YW5jZXMuKiwgX3BhcmVudFBhdGhWYWx1ZXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5faW5zdGFuY2VQcm9wcz17ZGV0YWlsc09wZW5lZDohMCxpbmRleDohMCxpdGVtOiEwLHNlbGVjdGVkOiEwLGV4cGFuZGVkOiEwLGxldmVsOiEwfX1jcmVhdGVJbnN0YW5jZSgpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7bGV0IHQ9bmV3IHRoaXMuX1RlbXBsYXRlQ2xhc3Moe30pO3JldHVybiB0aGlzLmFkZEluc3RhbmNlKHQpLHR9YWRkSW5zdGFuY2UodCl7dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuaW5kZXhPZih0KT09PS0xJiYodGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMucHVzaCh0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMubm90aWZ5UGF0aCgiX3RlbXBsYXRlSW5zdGFuY2VzLioiLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzKSkpfXJlbW92ZUluc3RhbmNlKHQpe2xldCByPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YodCk7dGhpcy5zcGxpY2UoIl90ZW1wbGF0ZUluc3RhbmNlcyIsciwxKX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXt0aGlzLl9UZW1wbGF0ZUNsYXNzfHwodGhpcy5fVGVtcGxhdGVDbGFzcz10Yyh0aGlzLnRlbXBsYXRlLHRoaXMse2luc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxwYXJlbnRNb2RlbDohMCxmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24odCxyKXt0aGlzLl9mb3J3YXJkUGFyZW50UHJvcCh0LHIpLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzJiZ0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQscixuKXtpZihyPT09ImluZGV4Inx8cj09PSJpdGVtIilyZXR1cm47bGV0IGk9YF9fJHtyfV9fYDtpZih0W2ldPT09bilyZXR1cm47dFtpXT1uO2xldCBvPUFycmF5LmZyb20odGhpcy5fZ3JpZC4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+dGhpcy5fZ3JpZC5faXRlbXNFcXVhbChsLl9pdGVtLHQuaXRlbSkpWzBdO28mJkFycmF5LmZyb20oby5jaGlsZHJlbikuZm9yRWFjaChsPT57bC5faW5zdGFuY2UmJihsLl9pbnN0YW5jZVtpXT1uLGwuX2luc3RhbmNlLm5vdGlmeVBhdGgocixuKSl9KTtsZXQgYT0iaXRlbS4iO2lmKEFycmF5LmlzQXJyYXkodGhpcy5fZ3JpZC5pdGVtcykmJnIuaW5kZXhPZihhKT09PTApe2xldCBsPXRoaXMuX2dyaWQuaXRlbXMuaW5kZXhPZih0Lml0ZW0pLGM9ci5zbGljZShhLmxlbmd0aCk7dGhpcy5fZ3JpZC5ub3RpZnlQYXRoKGBpdGVtcy4ke2x9LiR7Y31gLG4pfWxldCBzPWBfJHtyfUluc3RhbmNlQ2hhbmdlZENhbGxiYWNrYDt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkW3NdJiZ0aGlzLl9ncmlkW3NdKHQsbil9fSkpfV9mb3J3YXJkUGFyZW50UHJvcCh0LHIpe3RoaXMuX3BhcmVudFBhdGhWYWx1ZXNbdF09cix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX1fdGVtcGxhdGVJbnN0YW5jZXNDaGFuZ2VkKHQpe2xldCByLG47aWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcyIpcj0wLG49dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RoO2Vsc2UgaWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIilyPXQudmFsdWUuaW5kZXgsbj10LnZhbHVlLmFkZGVkQ291bnQ7ZWxzZSByZXR1cm47T2JqZWN0LmtleXModGhpcy5fcGFyZW50UGF0aFZhbHVlc3x8e30pLmZvckVhY2goaT0+e2ZvcihsZXQgbz1yO288cituO28rKyl0aGlzLl90ZW1wbGF0ZUluc3RhbmNlc1tvXS5zZXQoaSx0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW2ldKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKFQwLmlzLFQwKTt2YXIgbnVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGV0YWlsc09wZW5lZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdCxyb3dEZXRhaWxzUmVuZGVyZXI6RnVuY3Rpb24sX2RldGFpbHNDZWxsczp7dHlwZTpBcnJheX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChkZXRhaWxzT3BlbmVkSXRlbXMuKiwgX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSIsIl9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlLCByb3dEZXRhaWxzUmVuZGVyZXIpIl19X3Jvd0RldGFpbHNUZW1wbGF0ZU9yUmVuZGVyZXJDaGFuZ2VkKHIsbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSBmb3Igcm93IGRldGFpbHMiKTtpZihyfHxuKXtpZihyJiYhci50ZW1wbGF0aXplcil7bGV0IGk9bmV3IFQwO2kuX2dyaWQ9dGhpcyxpLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3QsaS50ZW1wbGF0ZT1yLHIudGVtcGxhdGl6ZXI9aX10aGlzLl9jb2x1bW5UcmVlJiZBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChpPT57aS5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpfHwodGhpcy5fdXBkYXRlUm93KGksdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQoaSwhMSkpLGRlbGV0ZSBpLnF1ZXJ5U2VsZWN0b3IoIltwYXJ0fj1kZXRhaWxzLWNlbGxdIikuX2luc3RhbmNlfSksdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMubGVuZ3RoJiYoQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2godGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwsdGhpcyksdGhpcy5fdXBkYXRlKCkpfX1fZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChyKXtyLnBhdGg9PT0iZGV0YWlsc09wZW5lZEl0ZW1zLmxlbmd0aCJ8fCFyLnZhbHVlfHxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChuPT57dGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwobixuLl9pdGVtKSx0aGlzLl9hMTF5VXBkYXRlUm93RGV0YWlsc09wZW5lZChuLHRoaXMuX2lzRGV0YWlsc09wZW5lZChuLl9pdGVtKSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkZXRhaWxzLW9wZW5lZCIsdGhpcy5faXNEZXRhaWxzT3BlbmVkKG4uX2l0ZW0pLG4pfSl9X2NvbmZpZ3VyZURldGFpbHNDZWxsKHIpe3Iuc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBkZXRhaWxzLWNlbGwiKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsITAscil9X3RvZ2dsZURldGFpbHNDZWxsKHIsbil7bGV0IGk9ci5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImRldGFpbHMtY2VsbCJdJyk7aWYoIWkpcmV0dXJuO2xldCBvPSF0aGlzLl9pc0RldGFpbHNPcGVuZWQobiksYT0hIWkuaGlkZGVuIT09bzsoIWkuX2luc3RhbmNlJiYhaS5fcmVuZGVyZXJ8fGkuaGlkZGVuIT09bykmJihpLmhpZGRlbj1vLG8/ci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iKToodGhpcy5yb3dEZXRhaWxzUmVuZGVyZXI/KGkuX3JlbmRlcmVyPXRoaXMucm93RGV0YWlsc1JlbmRlcmVyLGkuX3JlbmRlcmVyLmNhbGwodGhpcyxpLl9jb250ZW50LHRoaXMse2luZGV4OnIuaW5kZXgsaXRlbTpufSkpOnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSYmIWkuX2luc3RhbmNlJiYoaS5faW5zdGFuY2U9dGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksaS5fY29udGVudC5pbm5lckhUTUw9IiIsaS5fY29udGVudC5hcHBlbmRDaGlsZChpLl9pbnN0YW5jZS5yb290KSx0aGlzLl91cGRhdGVJdGVtKHIsbikpLGNpKCksci5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke2kub2Zmc2V0SGVpZ2h0fXB4YCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSkpLGEmJih0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpKX1fdXBkYXRlRGV0YWlsc0NlbGxIZWlnaHRzKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXTpub3QoW2hpZGRlbl0pJykpLmZvckVhY2gocj0+e3IucGFyZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke3Iub2Zmc2V0SGVpZ2h0fXB4YCl9KX1faXNEZXRhaWxzT3BlbmVkKHIpe3JldHVybiB0aGlzLmRldGFpbHNPcGVuZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zKSE9PS0xfW9wZW5JdGVtRGV0YWlscyhyKXt0aGlzLl9pc0RldGFpbHNPcGVuZWQocil8fCh0aGlzLmRldGFpbHNPcGVuZWRJdGVtcz1bLi4udGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMscl0pfWNsb3NlSXRlbURldGFpbHMocil7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHIpJiYodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9dGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLm9wZW5JdGVtRGV0YWlscyhyLml0ZW0pOnRoaXMuY2xvc2VJdGVtRGV0YWlscyhyLml0ZW0pfX07dmFyIHpjdD17U0NST0xMSU5HOjUwMCxJR05PUkVfV0hFRUw6NTAwfSxpdWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfZnJvemVuQ2VsbHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfcm93V2l0aEZvY3VzZWRFbGVtZW50OkVsZW1lbnQsX2RlbHRhWUFjYzp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3VzZVN0aWNreTp7dHlwZTpCb29sZWFuLHZhbHVlOndpbmRvdy5DU1MmJndpbmRvdy5DU1Muc3VwcG9ydHMmJih3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpfHx3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsIi13ZWJraXQtc3RpY2t5IikpfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQoX3ZpZXdwb3J0SGVpZ2h0KSJdfXNldCBfc2Nyb2xsVG9wKHIpe3RoaXMuJC50YWJsZS5zY3JvbGxUb3A9cn1nZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLiQudGFibGUuc2Nyb2xsVG9wfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zY3JvbGxMaW5lSGVpZ2h0PXRoaXMuX2dldFNjcm9sbExpbmVIZWlnaHQoKX1fZ2V0U2Nyb2xsTGluZUhlaWdodCgpe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUuZm9udFNpemU9ImluaXRpYWwiLHIuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKTtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKS5mb250U2l6ZTtyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyKSxuP3dpbmRvdy5wYXJzZUludChuKTp2b2lkIDB9X3Njcm9sbFZpZXdwb3J0SGVpZ2h0VXBkYXRlZChyKXt0aGlzLl9zY3JvbGxQYWdlSGVpZ2h0PXItdGhpcy4kLmhlYWRlci5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5jbGllbnRIZWlnaHQtdGhpcy5fc2Nyb2xsTGluZUhlaWdodH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLm91dGVyc2Nyb2xsZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy4kLnRhYmxlLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuX29uV2hlZWwpLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57bGV0IG49ci5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuJC5pdGVtcyk7dGhpcy5fcm93V2l0aEZvY3VzZWRFbGVtZW50PXIuY29tcG9zZWRQYXRoKClbbi0xXX0pLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD12b2lkIDApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PnRoaXMuX19tb3VzZURvd249ITApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT57dGhpcy5fX21vdXNlRG93bj0hMSx0aGlzLl9fcGVuZGluZ1Jlb3JkZXImJih0aGlzLl9fcGVuZGluZ1Jlb3JkZXI9ITEsc2V0VGltZW91dCgoKT0+dGhpcy5fcmVvcmRlclJvd3MoKSx6Y3QuU0NST0xMSU5HKSl9KX1zY3JvbGxUb0luZGV4KHIpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHIpKX1fb25XaGVlbChyKXtpZihyLmN0cmxLZXl8fHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3Ioci50YXJnZXQsci5kZWx0YVgsci5kZWx0YVkpKXJldHVybjtsZXQgbj10aGlzLiQudGFibGUsaT1yLmRlbHRhWTtpZihyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/aSo9dGhpcy5fc2Nyb2xsTGluZUhlaWdodDpyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJihpKj10aGlzLl9zY3JvbGxQYWdlSGVpZ2h0KSx0aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lKXt0aGlzLl9kZWx0YVlBY2MrPWksci5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pKz10aGlzLl9kZWx0YVlBY2MsdGhpcy5fZGVsdGFZQWNjPTAsdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZT0hMCx0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldoZWVsQW5pbWF0aW9uRnJhbWUsTmksKCk9PnRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITEpO2xldCBvPU1hdGguYWJzKHIuZGVsdGFYKStNYXRoLmFicyhpKTt0aGlzLl9jYW5TY3JvbGwobixyLmRlbHRhWCxpKT8oci5wcmV2ZW50RGVmYXVsdCgpLG4uc2Nyb2xsVG9wKz1pLG4uc2Nyb2xsTGVmdCs9ci5kZWx0YVgsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITAsdGhpcy5faWdub3JlTmV3V2hlZWw9ITAsdGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWw9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWwsbW8uYWZ0ZXIoemN0LklHTk9SRV9XSEVFTCksKCk9PnRoaXMuX2lnbm9yZU5ld1doZWVsPSExKSk6dGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bSYmbzw9dGhpcy5fcHJldmlvdXNNb21lbnR1bXx8dGhpcy5faWdub3JlTmV3V2hlZWw/ci5wcmV2ZW50RGVmYXVsdCgpOm8+dGhpcy5fcHJldmlvdXNNb21lbnR1bSYmKHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITEpLHRoaXMuX3ByZXZpb3VzTW9tZW50dW09b31faGFzU2Nyb2xsZWRBbmNlc3RvcihyLG4saSl7aWYoci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IilyZXR1cm4hMTtpZih0aGlzLl9jYW5TY3JvbGwocixuLGkpJiZbImF1dG8iLCJzY3JvbGwiXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUocikub3ZlcmZsb3cpIT09LTEpcmV0dXJuITA7aWYociE9PXRoaXMmJnIucGFyZW50RWxlbWVudClyZXR1cm4gdGhpcy5faGFzU2Nyb2xsZWRBbmNlc3RvcihyLnBhcmVudEVsZW1lbnQsbixpKX1fY2FuU2Nyb2xsKHIsbixpKXtyZXR1cm4gaT4wJiZyLnNjcm9sbFRvcDxyLnNjcm9sbEhlaWdodC1yLm9mZnNldEhlaWdodHx8aTwwJiZyLnNjcm9sbFRvcD4wfHxuPjAmJnIuc2Nyb2xsTGVmdDxyLnNjcm9sbFdpZHRoLXIub2Zmc2V0V2lkdGh8fG48MCYmci5zY3JvbGxMZWZ0PjB9X3NjaGVkdWxlU2Nyb2xsaW5nKCl7dGhpcy5fc2Nyb2xsaW5nRnJhbWV8fCh0aGlzLl9zY3JvbGxpbmdGcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpKSksdGhpcy5fZGVib3VuY2VTY3JvbGxpbmc9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VTY3JvbGxpbmcsbW8uYWZ0ZXIoemN0LlNDUk9MTElORyksKCk9PntjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zY3JvbGxpbmdGcmFtZSksZGVsZXRlIHRoaXMuX3Njcm9sbGluZ0ZyYW1lLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuX3Jlb3JkZXJSb3dzKCl9KX1fYWZ0ZXJTY3JvbGwoKXt0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKSx0aGlzLmhhc0F0dHJpYnV0ZSgicmVvcmRlcmluZyIpfHx0aGlzLl9zY2hlZHVsZVNjcm9sbGluZygpLHRoaXMuX3VwZGF0ZU92ZXJmbG93KCl9X3VwZGF0ZU92ZXJmbG93KCl7bGV0IHI9IiIsbj10aGlzLiQudGFibGU7bi5zY3JvbGxUb3A8bi5zY3JvbGxIZWlnaHQtbi5jbGllbnRIZWlnaHQmJihyKz0iIGJvdHRvbSIpLG4uc2Nyb2xsVG9wPjAmJihyKz0iIHRvcCIpLG4uc2Nyb2xsTGVmdDxuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgmJihyKz0iIHJpZ2h0Iiksbi5zY3JvbGxMZWZ0PjAmJihyKz0iIGxlZnQiKSx0aGlzLl9kZWJvdW5jZU92ZXJmbG93PXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlT3ZlcmZsb3csTmksKCk9PntsZXQgaT1yLnRyaW0oKTtpLmxlbmd0aD4wJiZ0aGlzLmdldEF0dHJpYnV0ZSgib3ZlcmZsb3ciKSE9PWk/dGhpcy5zZXRBdHRyaWJ1dGUoIm92ZXJmbG93IixpKTppLmxlbmd0aD09MCYmdGhpcy5oYXNBdHRyaWJ1dGUoIm92ZXJmbG93IikmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJvdmVyZmxvdyIpfSl9X3Jlb3JkZXJSb3dzKCl7aWYodGhpcy5fX21vdXNlRG93bil7dGhpcy5fX3BlbmRpbmdSZW9yZGVyPSEwO3JldHVybn1sZXQgcj10aGlzLiQuaXRlbXMsbj1yLnF1ZXJ5U2VsZWN0b3JBbGwoInRyIik7aWYoIW4ubGVuZ3RoKXJldHVybjtsZXQgaT10aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fdmlkeE9mZnNldCxvPXRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudHx8QXJyYXkuZnJvbShuKS5maWx0ZXIobD0+IWwuaGlkZGVuKVswXTtpZighbylyZXR1cm47bGV0IGE9by5pbmRleC1pLHM9QXJyYXkuZnJvbShuKS5pbmRleE9mKG8pLWE7aWYocz4wKWZvcihsZXQgbD0wO2w8cztsKyspci5hcHBlbmRDaGlsZChuW2xdKTtlbHNlIGlmKHM8MClmb3IobGV0IGw9bi5sZW5ndGgrcztsPG4ubGVuZ3RoO2wrKylyLmluc2VydEJlZm9yZShuW2xdLG5bMF0pO2lmKHRoaXMuX3NhZmFyaSl7bGV0e3RyYW5zZm9ybTpsfT10aGlzLiQuaGVhZGVyLnN0eWxlO3RoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPSIiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPWwpfX1fZnJvemVuQ2VsbHNDaGFuZ2VkKCl7dGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cz1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDYWNoZUVsZW1lbnRzLGxpLCgpPT57QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl0nKSkuZm9yRWFjaChmdW5jdGlvbihyKXtyLnN0eWxlLnRyYW5zZm9ybT0iIn0pLHRoaXMuX2Zyb3plbkNlbGxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuJC50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJbZnJvemVuXSIpKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpfSksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfV91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpe3RoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wJiZ0aGlzLl9faXNSVEwmJih0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzPXtzY3JvbGxXaWR0aDp0aGlzLiQudGFibGUuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6dGhpcy4kLnRhYmxlLmNsaWVudFdpZHRofSl9X3VwZGF0ZUxhc3RGcm96ZW4oKXtpZighdGhpcy5fY29sdW1uVHJlZSlyZXR1cm47bGV0IHI9dGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5zbGljZSgwKTtyLnNvcnQoKGksbyk9PmkuX29yZGVyLW8uX29yZGVyKTtsZXQgbj1yLnJlZHVjZSgoaSxvLGEpPT4oby5fbGFzdEZyb3plbj0hMSxvLmZyb3plbiYmIW8uaGlkZGVuP2E6aSksdm9pZCAwKTtuIT09dm9pZCAwJiYocltuXS5fbGFzdEZyb3plbj0hMCl9X3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpe2xldCByPU1hdGgubWF4KDAsdGhpcy5fc2Nyb2xsTGVmdCksbj1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbFRvcCksaT0wLG89MCxhPTA7aWYodGhpcy5fdXNlU3RpY2t5fHwoaT1yLG89bixhPXRoaXMuJC50YWJsZS5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRUb3ApLHRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8pLHRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8rYSksdGhpcy4kLml0ZW1zLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSwwKSx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCl7bGV0IHM9dGhpcy5fX2lzUlRMP3RoaXMuX19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0aGlzLiQudGFibGUpK3RoaXMuX19zY3JvbGxlck1ldHJpY3MuY2xpZW50V2lkdGgtdGhpcy5fX3Njcm9sbGVyTWV0cmljcy5zY3JvbGxXaWR0aDp0aGlzLl9zY3JvbGxMZWZ0LGw9dGhpcy5fZ2V0VHJhbnNsYXRlKHMsMCk7Zm9yKGxldCBjPTA7Yzx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg7YysrKXRoaXMuX2Zyb3plbkNlbGxzW2NdLnN0eWxlLnRyYW5zZm9ybT1sfX1fZ2V0VHJhbnNsYXRlKHIsbil7cmV0dXJuYHRyYW5zbGF0ZSgke3J9cHgsICR7bn1weClgfX07dmFyIG91ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHNlbGVjdGVkSXRlbXMuKikiXX1faXNTZWxlY3RlZChyKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHIsdGhpcy5zZWxlY3RlZEl0ZW1zKT4tMX1zZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocil8fCh0aGlzLnNlbGVjdGVkSXRlbXM9Wy4uLnRoaXMuc2VsZWN0ZWRJdGVtcyxyXSl9ZGVzZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocikmJih0aGlzLnNlbGVjdGVkSXRlbXM9dGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X3RvZ2dsZUl0ZW0ocil7dGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuc2VsZWN0ZWRJdGVtcyk9PT0tMT90aGlzLnNlbGVjdEl0ZW0ocik6dGhpcy5kZXNlbGVjdEl0ZW0ocil9X3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHIpe3RoaXMuJC5pdGVtcy5jaGlsZHJlbi5sZW5ndGgmJihyLnBhdGg9PT0ic2VsZWN0ZWRJdGVtcyJ8fHIucGF0aD09PSJzZWxlY3RlZEl0ZW1zLnNwbGljZXMiKSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2gobj0+e3RoaXMuX3VwZGF0ZUl0ZW0obixuLl9pdGVtKX0pfV9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLnNlbGVjdEl0ZW0oci5pdGVtKTp0aGlzLmRlc2VsZWN0SXRlbShyLml0ZW0pfX07dmFyIGF1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211bHRpU29ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3ByZXZpb3VzU29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRlci1jaGFuZ2VkIix0aGlzLl9vblNvcnRlckNoYW5nZWQpfV9vblNvcnRlckNoYW5nZWQocil7bGV0IG49ci50YXJnZXQ7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fdXBkYXRlU29ydGVyKG4pLHRoaXMuX19hcHBseVNvcnRlcnMoKX1fX3JlbW92ZVNvcnRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9zb3J0ZXJzPXRoaXMuX3NvcnRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLm11bHRpU29ydCYmdGhpcy5fX3VwZGF0ZVNvcnRPcmRlcnMoKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCkpfV9fdXBkYXRlU29ydE9yZGVycygpe3RoaXMuX3NvcnRlcnMuZm9yRWFjaCgocixuKT0+ci5fb3JkZXI9dGhpcy5fc29ydGVycy5sZW5ndGg+MT9uOm51bGwsdGhpcyl9X191cGRhdGVTb3J0ZXIocil7aWYoISghci5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMuaW5kZXhPZihyKT09PS0xKSl7aWYoci5fb3JkZXI9bnVsbCx0aGlzLm11bHRpU29ydCl0aGlzLl9yZW1vdmVBcnJheUl0ZW0odGhpcy5fc29ydGVycyxyKSxyLmRpcmVjdGlvbiYmdGhpcy5fc29ydGVycy51bnNoaWZ0KHIpLHRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCk7ZWxzZSBpZihyLmRpcmVjdGlvbil7bGV0IG49dGhpcy5fc29ydGVycy5maWx0ZXIoaT0+aSE9cik7dGhpcy5fc29ydGVycz1bcl0sbi5mb3JFYWNoKGk9PntpLl9vcmRlcj1udWxsLGkuZGlyZWN0aW9uPW51bGx9KX19fV9fYXBwbHlTb3J0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2ExMXlVcGRhdGVTb3J0ZXJzKCksdGhpcy5fcHJldmlvdXNTb3J0ZXJzPXRoaXMuX21hcFNvcnRlcnMoKX1fbWFwU29ydGVycygpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLGRpcmVjdGlvbjpyLmRpcmVjdGlvbn0pKX1fcmVtb3ZlQXJyYXlJdGVtKHIsbil7bGV0IGk9ci5pbmRleE9mKG4pO2k+LTEmJnIuc3BsaWNlKGksMSl9fTt2YXIgc3VlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2VsbENsYXNzTmFtZUdlbmVyYXRvcjpGdW5jdGlvbn19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fY2VsbENsYXNzTmFtZUdlbmVyYXRvckNoYW5nZWQoY2VsbENsYXNzTmFtZUdlbmVyYXRvcikiXX1fX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKCl7dGhpcy5nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKCl9Z2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIocj0+IXIuaGlkZGVuKS5mb3JFYWNoKHI9PnRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXMocix0aGlzLl9fZ2V0Um93TW9kZWwocikpKX1fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyhyLG4pe0FycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT57aWYoaS5fX2dlbmVyYXRlZENsYXNzZXMmJmkuX19nZW5lcmF0ZWRDbGFzc2VzLmZvckVhY2gobz0+aS5jbGFzc0xpc3QucmVtb3ZlKG8pKSx0aGlzLmNlbGxDbGFzc05hbWVHZW5lcmF0b3Ipe2xldCBvPXRoaXMuY2VsbENsYXNzTmFtZUdlbmVyYXRvcihpLl9jb2x1bW4sbik7aS5fX2dlbmVyYXRlZENsYXNzZXM9byYmby5zcGxpdCgiICIpLmZpbHRlcihhPT5hLmxlbmd0aD4wKSxpLl9fZ2VuZXJhdGVkQ2xhc3NlcyYmaS5fX2dlbmVyYXRlZENsYXNzZXMuZm9yRWFjaChhPT5pLmNsYXNzTGlzdC5hZGQoYSkpfX0pfX07dmFyIFRQPXtCRVRXRUVOOiJiZXR3ZWVuIixPTl9UT1A6Im9uLXRvcCIsT05fVE9QX09SX0JFVFdFRU46Im9uLXRvcC1vci1iZXR3ZWVuIixPTl9HUklEOiJvbi1ncmlkIn0sQzA9e09OX1RPUDoib24tdG9wIixBQk9WRToiYWJvdmUiLEJFTE9XOiJiZWxvdyIsRU1QVFk6ImVtcHR5In0sbHVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZHJvcE1vZGU6U3RyaW5nLHJvd3NEcmFnZ2FibGU6Qm9vbGVhbixkcmFnRmlsdGVyOkZ1bmN0aW9uLGRyb3BGaWx0ZXI6RnVuY3Rpb24sX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkOnt2YWx1ZTo1MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHJvd3NEcmFnZ2FibGUsIGRyb3BNb2RlLCBkcmFnRmlsdGVyLCBkcm9wRmlsdGVyKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5fb25EcmFnT3Zlci5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIix0aGlzLl9vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsdGhpcy5fb25Ecm9wLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLHI9Pnt0aGlzLmRyb3BNb2RlJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCkpfSl9X29uRHJhZ1N0YXJ0KHIpe2lmKHRoaXMucm93c0RyYWdnYWJsZSl7bGV0IG49ci50YXJnZXQ7aWYobi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IiYmKG49bi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5wYXJlbnROb2RlKSxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpcmV0dXJuO2lmKHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnZ2luZy1yb3dzIiwhMCx0aGlzKSx0aGlzLl9zYWZhcmkpe2xldCBzPW4uc3R5bGUudHJhbnNmb3JtO24uc3R5bGUudG9wPS90cmFuc2xhdGVZXCgoLiopXCkvLmV4ZWMocylbMV0sbi5zdHlsZS50cmFuc2Zvcm09Im5vbmUiLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e24uc3R5bGUudG9wPSIiLG4uc3R5bGUudHJhbnNmb3JtPXN9KX1sZXQgaT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2lvcz9yLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2Uobik6ci5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4sci5jbGllbnRYLWkubGVmdCxyLmNsaWVudFktaS50b3ApO2xldCBvPVtuXTt0aGlzLl9pc1NlbGVjdGVkKG4uX2l0ZW0pJiYobz10aGlzLl9fZ2V0Vmlld3BvcnRSb3dzKCkuZmlsdGVyKHM9PnRoaXMuX2lzU2VsZWN0ZWQocy5faXRlbSkpLmZpbHRlcihzPT4hdGhpcy5kcmFnRmlsdGVyfHx0aGlzLmRyYWdGaWx0ZXIodGhpcy5fX2dldFJvd01vZGVsKHMpKSkpLHIuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQiLHRoaXMuX19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKG8pKSxuLnNldEF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IixvLmxlbmd0aD4xP28ubGVuZ3RoOiIiKSx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tX2dyaWQtZHJhZy1zdGFydC14IjpgJHtyLmNsaWVudFgtaS5sZWZ0KzIwfXB4YCwiLS1fZ3JpZC1kcmFnLXN0YXJ0LXkiOmAke3IuY2xpZW50WS1pLnRvcCsxMH1weGB9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6IiIsIi0tX2dyaWQtZHJhZy1zdGFydC15IjoiIn0pfSk7bGV0IGE9bmV3IEN1c3RvbUV2ZW50KCJncmlkLWRyYWdzdGFydCIse2RldGFpbDp7ZHJhZ2dlZEl0ZW1zOm8ubWFwKHM9PnMuX2l0ZW0pLHNldERyYWdEYXRhOihzLGwpPT5yLmRhdGFUcmFuc2Zlci5zZXREYXRhKHMsbCksc2V0RHJhZ2dlZEl0ZW1zQ291bnQ6cz0+bi5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIscyl9fSk7YS5vcmlnaW5hbEV2ZW50PXIsdGhpcy5kaXNwYXRjaEV2ZW50KGEpfX1fb25EcmFnRW5kKHIpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITEsdGhpcyksci5zdG9wUHJvcGFnYXRpb24oKTtsZXQgbj1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJhZ2VuZCIpO24ub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChuKX1fb25EcmFnTGVhdmUocil7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX1fb25EcmFnT3ZlcihyKXtpZih0aGlzLmRyb3BNb2RlKXtpZih0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwLHRoaXMuX2RyYWdPdmVySXRlbT12b2lkIDAsdGhpcy5fX2RuZEF1dG9TY3JvbGwoci5jbGllbnRZKSl7dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCk7cmV0dXJufWxldCBuPXIuY29tcG9zZWRQYXRoKCkuZmlsdGVyKGk9PmkubG9jYWxOYW1lPT09InRyIilbMF07aWYoIXRoaXMuX2VmZmVjdGl2ZVNpemV8fHRoaXMuZHJvcE1vZGU9PT1UUC5PTl9HUklEKXRoaXMuX2Ryb3BMb2NhdGlvbj1DMC5FTVBUWTtlbHNlIGlmKCFufHxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpe2lmKG4pcmV0dXJuO2lmKHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOfHx0aGlzLmRyb3BNb2RlPT09VFAuT05fVE9QX09SX0JFVFdFRU4pbj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PiFpLmhpZGRlbikucG9wKCksdGhpcy5fZHJvcExvY2F0aW9uPUMwLkJFTE9XO2Vsc2UgcmV0dXJufWVsc2V7bGV0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0aGlzLl9kcm9wTG9jYXRpb249QzAuT05fVE9QLHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOKXtsZXQgbz1yLmNsaWVudFktaS50b3A8aS5ib3R0b20tci5jbGllbnRZO3RoaXMuX2Ryb3BMb2NhdGlvbj1vP0MwLkFCT1ZFOkMwLkJFTE9XfWVsc2UgdGhpcy5kcm9wTW9kZT09PVRQLk9OX1RPUF9PUl9CRVRXRUVOJiYoci5jbGllbnRZLWkudG9wPGkuaGVpZ2h0LzM/dGhpcy5fZHJvcExvY2F0aW9uPUMwLkFCT1ZFOnIuY2xpZW50WS1pLnRvcD5pLmhlaWdodC8zKjImJih0aGlzLl9kcm9wTG9jYXRpb249QzAuQkVMT1cpKX1pZihuJiZuLmhhc0F0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIpKXt0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwO3JldHVybn1yLnN0b3BQcm9wYWdhdGlvbigpLHIucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcm9wTG9jYXRpb249PT1DMC5FTVBUWT90aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdvdmVyIiwhMCx0aGlzKTpuPyh0aGlzLl9kcmFnT3Zlckl0ZW09bi5faXRlbSxuLmdldEF0dHJpYnV0ZSgiZHJhZ292ZXIiKSE9PXRoaXMuX2Ryb3BMb2NhdGlvbiYmbi5zZXRBdHRyaWJ1dGUoImRyYWdvdmVyIix0aGlzLl9kcm9wTG9jYXRpb24pKTp0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX19X19kbmRBdXRvU2Nyb2xsKHIpe2lmKHRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nKXJldHVybiEwO2xldCBuPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLGk9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Asbz1uLXIrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQsYT1yLWkrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQscz0wO2lmKGE+MD9zPWEqMjpvPjAmJihzPS1vKjIpLHMpe2xldCBsPXRoaXMuJC50YWJsZS5zY3JvbGxUb3A7aWYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9cyxsIT09dGhpcy4kLnRhYmxlLnNjcm9sbFRvcClyZXR1cm4gdGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITAsc2V0VGltZW91dCgoKT0+dGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITEsMjApLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSwhMH19X19nZXRWaWV3cG9ydFJvd3MoKXtsZXQgcj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxuPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3JldHVybiBBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PntsZXQgbz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBvLmJvdHRvbT5yJiZvLnRvcDxufSl9X2NsZWFyRHJhZ1N0eWxlcygpe3RoaXMucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnIucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpKX1fb25Ecm9wKHIpe2lmKHRoaXMuZHJvcE1vZGUpe3Iuc3RvcFByb3BhZ2F0aW9uKCksci5wcmV2ZW50RGVmYXVsdCgpO2xldCBuPXIuZGF0YVRyYW5zZmVyLnR5cGVzJiZBcnJheS5mcm9tKHIuZGF0YVRyYW5zZmVyLnR5cGVzKS5tYXAobz0+KHt0eXBlOm8sZGF0YTpyLmRhdGFUcmFuc2Zlci5nZXREYXRhKG8pfSkpO3RoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO2xldCBpPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcm9wIix7YnViYmxlczpyLmJ1YmJsZXMsY2FuY2VsYWJsZTpyLmNhbmNlbGFibGUsZGV0YWlsOntkcm9wVGFyZ2V0SXRlbTp0aGlzLl9kcmFnT3Zlckl0ZW0sZHJvcExvY2F0aW9uOnRoaXMuX2Ryb3BMb2NhdGlvbixkcmFnRGF0YTpufX0pO2kub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChpKX19X19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKHIpe3JldHVybiByLm1hcChuPT5BcnJheS5mcm9tKG4uY2hpbGRyZW4pLmZpbHRlcihpPT4haS5oaWRkZW4mJmkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik9PT0tMSkuc29ydCgoaSxvKT0+aS5fY29sdW1uLl9vcmRlcj5vLl9jb2x1bW4uX29yZGVyPzE6LTEpLm1hcChpPT5pLl9jb250ZW50LnRleHRDb250ZW50LnRyaW0oKSkuZmlsdGVyKGk9PmkpLmpvaW4oIgkiKSkuam9pbihgCmApfV9kcmFnRHJvcEFjY2Vzc0NoYW5nZWQoKXt0aGlzLmZpbHRlckRyYWdBbmREcm9wKCl9ZmlsdGVyRHJhZ0FuZERyb3AoKXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbikuZm9yRWFjaChyPT57dGhpcy5fZmlsdGVyRHJhZ0FuZERyb3Aocix0aGlzLl9fZ2V0Um93TW9kZWwocikpfSl9X2ZpbHRlckRyYWdBbmREcm9wKHIsbil7bGV0IGk9IXRoaXMucm93c0RyYWdnYWJsZXx8dGhpcy5kcmFnRmlsdGVyJiYhdGhpcy5kcmFnRmlsdGVyKG4pLG89IXRoaXMuZHJvcE1vZGV8fHRoaXMuZHJvcEZpbHRlciYmIXRoaXMuZHJvcEZpbHRlcihuKTtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLm1hcChzPT5zLl9jb250ZW50KS5mb3JFYWNoKHM9PntpP3MucmVtb3ZlQXR0cmlidXRlKCJkcmFnZ2FibGUiKTpzLnNldEF0dHJpYnV0ZSgiZHJhZ2dhYmxlIiwhMCl9KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWctZGlzYWJsZWQiLGksciksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcm9wLWRpc2FibGVkIixvLHIpfX07dmFyIGN1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19oZWFkZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9pdGVtc0ZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX2Zvb3RlckZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX25hdmlnYXRpbmdJc0hpZGRlbjpCb29sZWFuLF9mb2N1c2VkSXRlbUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfZm9jdXNlZENvbHVtbk9yZGVyOk51bWJlcixpbnRlcmFjdGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMCxvYnNlcnZlcjoiX2ludGVyYWN0aW5nQ2hhbmdlZCJ9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksISh0aGlzLl9pb3N8fHRoaXMuX2FuZHJvaWQpJiYodGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX29uS2V5VXApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25Gb2N1c0luKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkZvY3VzT3V0KSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25DZWxsRm9jdXNJbi5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHRoaXMuX29uQ2VsbEZvY3VzT3V0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5faXNNb3VzZWRvd249ITB9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT50aGlzLl9pc01vdXNlZG93bj0hMSkpfV9mb2N1c2FibGVDaGFuZ2VkKHIsbil7biYmbi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxyJiZ0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHIpfV9pbnRlcmFjdGluZ0NoYW5nZWQoKXt0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHRoaXMuX2hlYWRlckZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9pdGVtc0ZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9mb290ZXJGb2N1c2FibGUpfV9vbktleURvd24ocil7bGV0IG49ci5rZXksaTtzd2l0Y2gobil7Y2FzZSJBcnJvd1VwIjpjYXNlIkFycm93RG93biI6Y2FzZSJBcnJvd0xlZnQiOmNhc2UiQXJyb3dSaWdodCI6Y2FzZSJQYWdlVXAiOmNhc2UiUGFnZURvd24iOmNhc2UiSG9tZSI6Y2FzZSJFbmQiOmk9Ik5hdmlnYXRpb24iO2JyZWFrO2Nhc2UiRW50ZXIiOmNhc2UiRXNjYXBlIjpjYXNlIkYyIjppPSJJbnRlcmFjdGlvbiI7YnJlYWs7Y2FzZSJUYWIiOmk9IlRhYiI7YnJlYWs7Y2FzZSIgIjppPSJTcGFjZSI7YnJlYWt9dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksdGhpcy5pbnRlcmFjdGluZyYmaSE9PSJJbnRlcmFjdGlvbiImJihpPXZvaWQgMCksaSYmdGhpc1tgX29uJHtpfUtleURvd25gXShyLG4pfV9lbnN1cmVTY3JvbGxlZFRvSW5kZXgocil7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT5pLmluZGV4PT09cilbMF18fHRoaXMuX3Njcm9sbFRvSW5kZXgocil9X29uTmF2aWdhdGlvbktleURvd24ocixuKXt0aGlzLl9zY3JvbGxIYW5kbGVyKCksci5wcmV2ZW50RGVmYXVsdCgpO2Z1bmN0aW9uIGkoQil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoQi5wYXJlbnROb2RlLmNoaWxkcmVuLEIpfWxldCBvPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXgtdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgtMSxhPTAscz0wO3N3aXRjaChuKXtjYXNlIkFycm93UmlnaHQiOmE9dGhpcy5fX2lzUlRMPy0xOjE7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOmE9dGhpcy5fX2lzUlRMPzE6LTE7YnJlYWs7Y2FzZSJIb21lIjphPS0xLzAsci5jdHJsS2V5JiYocz0tMS8wKTticmVhaztjYXNlIkVuZCI6YT0xLzAsci5jdHJsS2V5JiYocz0xLzApO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjpzPTE7YnJlYWs7Y2FzZSJBcnJvd1VwIjpzPS0xO2JyZWFrO2Nhc2UiUGFnZURvd24iOnM9bzticmVhaztjYXNlIlBhZ2VVcCI6cz0tbzticmVha31sZXQgbD1yLmNvbXBvc2VkUGF0aCgpWzBdLGM9aShsKSx1PXRoaXMuX2VsZW1lbnRNYXRjaGVzKGwsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSxoPWwucGFyZW50Tm9kZSxmPWgucGFyZW50Tm9kZSxwPShmPT09dGhpcy4kLml0ZW1zP3RoaXMuX2VmZmVjdGl2ZVNpemU6Zi5jaGlsZHJlbi5sZW5ndGgpLTEsZD1mPT09dGhpcy4kLml0ZW1zP3RoaXMuX2ZvY3VzZWRJdGVtSW5kZXghPT12b2lkIDA/dGhpcy5fZm9jdXNlZEl0ZW1JbmRleDpoLmluZGV4OmkoaCksZz1NYXRoLm1heCgwLE1hdGgubWluKGQrcyxwKSksXz0hMTtpZihmPT09dGhpcy4kLml0ZW1zKXtsZXQgQj1oLl9pdGVtLEk9dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KGcpO3U/Xz1zPT09MDpfPXM9PT0xJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoQil8fHM9PT0tMSYmZyE9PWQmJnRoaXMuX2lzRGV0YWlsc09wZW5lZChJKSxfIT09dSYmKHM9PT0xJiZffHxzPT09LTEmJiFfKSYmKGc9ZCl9aWYoZiE9PXRoaXMuJC5pdGVtcyl7aWYoZz5kKWZvcig7ZzxwJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZysrO2Vsc2UgaWYoZzxkKWZvcig7Zz4wJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZy0tfXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj09PXZvaWQgMCYmKHU/dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPTA6dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXRoaXMuX2dldENvbHVtbnMoZixkKS5maWx0ZXIoQj0+IUIuaGlkZGVuKVtjXS5fb3JkZXIpO2xldCB5PXRoaXMuX2dldENvbHVtbnMoZixnKS5maWx0ZXIoQj0+IUIuaGlkZGVuKSx4PXkubWFwKEI9PkIuX29yZGVyKS5zb3J0KChCLEkpPT5CLUkpLGI9eC5sZW5ndGgtMSxTPXguaW5kZXhPZih4LnNsaWNlKDApLnNvcnQoKEIsSSk9Pk1hdGguYWJzKEItdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyKS1NYXRoLmFicyhJLXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcikpWzBdKSxDPXM9PT0wJiZ1P1M6TWF0aC5tYXgoMCxNYXRoLm1pbihTK2EsYikpO0MhPT1TJiYodGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCksZj09PXRoaXMuJC5pdGVtcyYmdGhpcy5fZW5zdXJlU2Nyb2xsZWRUb0luZGV4KGcpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7bGV0IGs9eS5yZWR1Y2UoKEIsSSxMKT0+KEJbSS5fb3JkZXJdPUwsQikse30pW3hbQ11dLE89Zj09PXRoaXMuJC5pdGVtcz9BcnJheS5mcm9tKGYuY2hpbGRyZW4pLmZpbHRlcihCPT5CLmluZGV4PT09ZylbMF06Zi5jaGlsZHJlbltnXTtpZighTylyZXR1cm47bGV0IEQ9Xz9BcnJheS5mcm9tKE8uY2hpbGRyZW4pLmZpbHRlcihCPT50aGlzLl9lbGVtZW50TWF0Y2hlcyhCLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpWzBdOk8uY2hpbGRyZW5ba107aWYodGhpcy5fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKEQpLGY9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PWcpLGY9PT10aGlzLiQuaXRlbXMpe2xldCBCPUQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksST10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxMPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO0IuYm90dG9tPkk/KHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPUIuYm90dG9tLUksdGhpcy5fc2Nyb2xsSGFuZGxlcigpKTpCLnRvcDxMJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcC09TC1CLnRvcCx0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfUQuZm9jdXMoKX1fb25JbnRlcmFjdGlvbktleURvd24ocixuKXtsZXQgaT1yLmNvbXBvc2VkUGF0aCgpWzBdLG89aS5sb2NhbE5hbWU9PT0iaW5wdXQiJiYhL14oYnV0dG9ufGNoZWNrYm94fGNvbG9yfGZpbGV8aW1hZ2V8cmFkaW98cmFuZ2V8cmVzZXR8c3VibWl0KSQvaS50ZXN0KGkudHlwZSksYTtzd2l0Y2gobil7Y2FzZSJFbnRlciI6YT10aGlzLmludGVyYWN0aW5nPyFvOiEwO2JyZWFrO2Nhc2UiRXNjYXBlIjphPSExO2JyZWFrO2Nhc2UiRjIiOmE9IXRoaXMuaW50ZXJhY3Rpbmc7YnJlYWt9bGV0e2NlbGw6c309dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7aWYodGhpcy5pbnRlcmFjdGluZyE9PWEmJnMhPT1udWxsKWlmKGEpe2xldCBsPXMuX2NvbnRlbnQucXVlcnlTZWxlY3RvcigiW2ZvY3VzLXRhcmdldF0iKXx8cy5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtsJiYoci5wcmV2ZW50RGVmYXVsdCgpLGwuZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCxzLmZvY3VzKCksdGhpcy5fc2V0SW50ZXJhY3RpbmcoITEpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQocixuKXtsZXQgaT1bdGhpcy4kLnRhYmxlLHRoaXMuX2hlYWRlckZvY3VzYWJsZSx0aGlzLl9pdGVtc0ZvY3VzYWJsZSx0aGlzLl9mb290ZXJGb2N1c2FibGUsdGhpcy4kLmZvY3VzZXhpdF0sbz1pLmluZGV4T2Yocik7Zm9yKG8rPW47bz49MCYmbzw9aS5sZW5ndGgtMSYmKCFpW29dfHxpW29dLnBhcmVudE5vZGUuaGlkZGVuKTspbys9bjtyZXR1cm4gaVtvXX1fb25UYWJLZXlEb3duKHIpe2xldCBuPXRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQoci5jb21wb3NlZFBhdGgoKVswXSxyLnNoaWZ0S2V5Py0xOjEpO2lmKG49PT10aGlzLiQudGFibGUpdGhpcy4kLnRhYmxlLmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy4kLmZvY3VzZXhpdCl0aGlzLiQuZm9jdXNleGl0LmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy5faXRlbXNGb2N1c2FibGUpe2xldCBpPW4sbz10aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnROb2RlO2lmKHRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0aGlzLl9mb2N1c2VkSXRlbUluZGV4KSxvLmluZGV4IT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCl7bGV0IGE9QXJyYXkuZnJvbShvLmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKSxzPUFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+bC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpWzBdO3MmJihpPXMuY2hpbGRyZW5bYV0pfXIucHJldmVudERlZmF1bHQoKSxpLmZvY3VzKCl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksbi5mb2N1cygpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X29uU3BhY2VLZXlEb3duKHIpe3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdOyghbi5fY29udGVudHx8IW4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpJiZ0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWFjdGl2YXRlIix7ZGV0YWlsOnttb2RlbDp0aGlzLl9fZ2V0Um93TW9kZWwobi5wYXJlbnRFbGVtZW50KX19KSl9X29uS2V5VXAocil7aWYoIS9eKCB8U3BhY2VCYXIpJC8udGVzdChyLmtleSkpcmV0dXJuO3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO2lmKG4uX2NvbnRlbnQmJm4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpe2xldCBpPXRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIik7bi5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGljaygpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsaSx0aGlzKX19X29uRm9jdXNJbihyKXt0aGlzLl9pc01vdXNlZG93bnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO249PT10aGlzLiQudGFibGV8fG49PT10aGlzLiQuZm9jdXNleGl0Pyh0aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KG4sbj09PXRoaXMuJC50YWJsZT8xOi0xKS5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSk6dGhpcy5fZGV0ZWN0SW50ZXJhY3Rpbmcocil9X29uRm9jdXNPdXQocil7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSx0aGlzLl9kZXRlY3RJbnRlcmFjdGluZyhyKX1fb25DZWxsRm9jdXNJbihyKXtsZXR7c2VjdGlvbjpuLGNlbGw6aX09dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksbiYmaSYmKHRoaXMuX2FjdGl2ZVJvd0dyb3VwPW4sdGhpcy4kLmhlYWRlcj09PW4/dGhpcy5faGVhZGVyRm9jdXNhYmxlPWk6dGhpcy4kLml0ZW1zPT09bj90aGlzLl9pdGVtc0ZvY3VzYWJsZT1pOnRoaXMuJC5mb290ZXI9PT1uJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPWkpLGkuX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIse2J1YmJsZXM6ITF9KSksaS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1cyIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpLHRoaXMuX2RldGVjdEZvY3VzZWRJdGVtSW5kZXgocil9X29uQ2VsbEZvY3VzT3V0KHIpe3IuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpPT09MyYmci5jb21wb3NlZFBhdGgoKVswXS5fY29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1c291dCIse2J1YmJsZXM6ITF9KSl9X2RldGVjdEludGVyYWN0aW5nKHIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCkuc29tZShpPT5pLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTt0aGlzLl9zZXRJbnRlcmFjdGluZyhuKX1fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleChyKXtsZXR7c2VjdGlvbjpuLHJvdzppfT10aGlzLl9nZXRHcmlkRXZlbnRMb2NhdGlvbihyKTtuPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fZm9jdXNlZEl0ZW1JbmRleD1pLmluZGV4KX1fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldChyKXtpZighcilyZXR1cm47bGV0IG49dGhpcy5fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQociksaT10aGlzLmludGVyYWN0aW5nJiZuPT09dGhpcy5fYWN0aXZlUm93R3JvdXA7ci50YWJJbmRleD1pPy0xOjB9X3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHIsbil7ci5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIikmJnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpLG49PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW4mJih0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW49ITEsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKSl9X2dldENvbHVtbnMocixuKXtsZXQgaT10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xO3JldHVybiByPT09dGhpcy4kLmhlYWRlcj9pPW46cj09PXRoaXMuJC5mb290ZXImJihpPXRoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTEtbiksdGhpcy5fY29sdW1uVHJlZVtpXX1fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKXtpZih0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5faGVhZGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbilbMF0pLHRoaXMuJC5pdGVtcy5maXJzdEVsZW1lbnRDaGlsZCl7bGV0IHI9dGhpcy5faXRlcmF0ZUl0ZW1zKChuLGkpPT57aWYodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXg9PT1pKXJldHVybiB0aGlzLiQuaXRlbXMuY2hpbGRyZW5bbl19KTtyJiYodGhpcy5faXRlbXNGb2N1c2FibGU9QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5maWx0ZXIobj0+IW4uaGlkZGVuKVswXSl9dGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCYmKHRoaXMuX2Zvb3RlckZvY3VzYWJsZT1BcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pWzBdKX1fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKHIpe2lmKHIuaGFzQXR0cmlidXRlKCJmcm96ZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXMociwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKXJldHVybjtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ci5wYXJlbnROb2RlLG89QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpLGE9dGhpcy4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9YS5sZWZ0LGw9YS5yaWdodDtmb3IobGV0IGM9by0xO2M+PTA7Yy0tKXtsZXQgdT1pLmNoaWxkcmVuW2NdO2lmKCEodS5oYXNBdHRyaWJ1dGUoImhpZGRlbiIpfHx0aGlzLl9lbGVtZW50TWF0Y2hlcyh1LCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpJiZ1Lmhhc0F0dHJpYnV0ZSgiZnJvemVuIikpe3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDticmVha319Zm9yKGxldCBjPW8rMTtjPGkuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7bGV0IHU9aS5jaGlsZHJlbltjXTtpZighKHUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXModSwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKSYmdS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXtsPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDticmVha319bi5sZWZ0PHMmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChuLmxlZnQtcykpLG4ucmlnaHQ+bCYmKHRoaXMuJC50YWJsZS5zY3JvbGxMZWZ0Kz1NYXRoLnJvdW5kKG4ucmlnaHQtbCkpfV9lbGVtZW50TWF0Y2hlcyhyLG4pe3JldHVybiByLm1hdGNoZXM/ci5tYXRjaGVzKG4pOkFycmF5LmZyb20oci5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwobikpLmluZGV4T2YocikhPT0tMX1fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocil7bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW4uaW5kZXhPZih0aGlzLiQudGFibGUpLG89aT49MT9uW2ktMV06bnVsbCxhPWk+PTI/bltpLTJdOm51bGwscz1pPj0zP25baS0zXTpudWxsO3JldHVybntzZWN0aW9uOm8scm93OmEsY2VsbDpzfX1fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQocil7cmV0dXJuIHI9PT10aGlzLl9oZWFkZXJGb2N1c2FibGU/dGhpcy4kLmhlYWRlcjpyPT09dGhpcy5faXRlbXNGb2N1c2FibGU/dGhpcy4kLml0ZW1zOnI9PT10aGlzLl9mb290ZXJGb2N1c2FibGU/dGhpcy4kLmZvb3RlcjpudWxsfX07ZnVuY3Rpb24gdXVlKGUsdCxyKXtsZXQgbj0xO2UuZm9yRWFjaChpPT57biUxMD09PTAmJm4rKyxpLl9vcmRlcj1yK24qdCxuKyt9KX12YXIgaHVlPWU9PmNsYXNzIGV4dGVuZHMgeWgoZSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9vcmRlckJhc2VTY29wZTp7dHlwZTpOdW1iZXIsdmFsdWU6MWU3fX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl91cGRhdGVPcmRlcnMoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLEVtKHRoaXMsInRyYWNrIix0aGlzLl9vblRyYWNrRXZlbnQpLHRoaXMuX3Jlb3JkZXJHaG9zdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnQ9InJlb3JkZXItZ2hvc3QiXScpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZS5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSl9X29uQ29udGV4dE1lbnUocil7dGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKSYmci5wcmV2ZW50RGVmYXVsdCgpfV9vblRvdWNoU3RhcnQocil7dGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9vblRyYWNrU3RhcnQoe2RldGFpbDp7eDpyLnRvdWNoZXNbMF0uY2xpZW50WCx5OnIudG91Y2hlc1swXS5jbGllbnRZfX0pfSwxMDApfV9vblRvdWNoTW92ZShyKXt0aGlzLl9kcmFnZ2VkQ29sdW1uJiZyLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCl9X29uVG91Y2hFbmQoKXtjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0KSx0aGlzLl9vblRyYWNrRW5kKCl9X29uVHJhY2tFdmVudChyKXtpZihyLmRldGFpbC5zdGF0ZT09PSJzdGFydCIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uW24uaW5kZXhPZih0aGlzLiQuaGVhZGVyKS0yXTtpZighaXx8IWkuX2NvbnRlbnR8fGkuX2NvbnRlbnQuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHx0aGlzLiQuc2Nyb2xsZXIuaGFzQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciKSlyZXR1cm47dGhpcy5fdG91Y2hEZXZpY2V8fHRoaXMuX29uVHJhY2tTdGFydChyKX1lbHNlIHIuZGV0YWlsLnN0YXRlPT09InRyYWNrIj90aGlzLl9vblRyYWNrKHIpOnIuZGV0YWlsLnN0YXRlPT09ImVuZCImJnRoaXMuX29uVHJhY2tFbmQocil9X29uVHJhY2tTdGFydChyKXtpZighdGhpcy5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgmJnIuY29tcG9zZWRQYXRoKCk7aWYobiYmbi5maWx0ZXIobz0+by5oYXNBdHRyaWJ1dGUmJm8uaGFzQXR0cmlidXRlKCJkcmFnZ2FibGUiKSlbMF0pcmV0dXJuO2xldCBpPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighKCFpfHxpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImhlYWRlci1jZWxsIik9PT0tMSkpe2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCEwLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW49aS5fY29sdW1uO3RoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudD09PTE7KXRoaXMuX2RyYWdnZWRDb2x1bW49dGhpcy5fZHJhZ2dlZENvbHVtbi5wYXJlbnRFbGVtZW50O3RoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCJhbGxvd2VkIiksdGhpcy5fZHJhZ2dlZENvbHVtbi5fcmVvcmRlclN0YXR1cz0iZHJhZ2dpbmciLHRoaXMuX3VwZGF0ZUdob3N0KGkpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHIuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/ci5kZXRhaWwueS01MDpyLmRldGFpbC55KSx0aGlzLl9hdXRvU2Nyb2xsZXIoKX19X29uVHJhY2socil7aWYoIXRoaXMuX2RyYWdnZWRDb2x1bW4pcmV0dXJuO2xldCBuPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighbilyZXR1cm47bGV0IGk9dGhpcy5fZ2V0VGFyZ2V0Q29sdW1uKG4sdGhpcy5fZHJhZ2dlZENvbHVtbik7dGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24oaSxyLmRldGFpbC54KSYmdGhpcy5fc3dhcENvbHVtbk9yZGVycyh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpLHRoaXMuX3VwZGF0ZUdob3N0UG9zaXRpb24oci5kZXRhaWwueCx0aGlzLl90b3VjaERldmljZT9yLmRldGFpbC55LTUwOnIuZGV0YWlsLnkpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD1yLmRldGFpbC54fV9vblRyYWNrRW5kKCl7IXRoaXMuX2RyYWdnZWRDb2x1bW58fCh0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCExLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2RyYWdnZWRDb2x1bW49bnVsbCx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9bnVsbCx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2x1bW4tcmVvcmRlciIse2RldGFpbDp7Y29sdW1uczp0aGlzLl9nZXRDb2x1bW5zSW5PcmRlcigpfX0pKSl9X2dldENvbHVtbnNJbk9yZGVyKCl7cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUuc2xpY2UoMCkucG9wKCkuZmlsdGVyKHI9PiFyLmhpZGRlbikuc29ydCgocixuKT0+ci5fb3JkZXItbi5fb3JkZXIpfV9jZWxsRnJvbVBvaW50KHIsbil7cj1yfHwwLG49bnx8MCx0aGlzLl9kcmFnZ2VkQ29sdW1ufHx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCEwLHRoaXMuJC5zY3JvbGxlcik7bGV0IGk9dGhpcy5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQocixuKTtpZih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCExLHRoaXMuJC5zY3JvbGxlciksaSYmaS5fY29sdW1uKXJldHVybiBpfV91cGRhdGVHaG9zdFBvc2l0aW9uKHIsbil7bGV0IGk9dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci1pLndpZHRoLzIsYT1uLWkuaGVpZ2h0LzIscz1wYXJzZUludCh0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnR8fDApLGw9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll90b3B8fDApO3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdD1zLShpLmxlZnQtbyksdGhpcy5fcmVvcmRlckdob3N0Ll90b3A9bC0oaS50b3AtYSksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fXB4LCAke3RoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfXB4KWB9X3VwZGF0ZUdob3N0KHIpe2xldCBuPXRoaXMuX3Jlb3JkZXJHaG9zdDtuLnRleHRDb250ZW50PXIuX2NvbnRlbnQuaW5uZXJUZXh0O2xldCBpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpO3JldHVyblsiYm94U2l6aW5nIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwiYmFja2dyb3VuZCIsImFsaWduSXRlbXMiLCJwYWRkaW5nIiwiYm9yZGVyIiwiZmxleC1kaXJlY3Rpb24iLCJvdmVyZmxvdyJdLmZvckVhY2gobz0+bi5zdHlsZVtvXT1pW29dKSxufV91cGRhdGVPcmRlcnMocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHwoclswXS5mb3JFYWNoKGk9PmkuX29yZGVyPTApLHV1ZShyWzBdLHRoaXMuX29yZGVyQmFzZVNjb3BlLDApKX1fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHIsbil7QXJyYXkuZnJvbShyLnBhcmVudE5vZGUuY2hpbGRyZW4pLmZpbHRlcihpPT4vY29sdW1uLy50ZXN0KGkubG9jYWxOYW1lKSYmdGhpcy5faXNTd2FwQWxsb3dlZChpLHIpKS5mb3JFYWNoKGk9PmkuX3Jlb3JkZXJTdGF0dXM9bil9X2F1dG9TY3JvbGxlcigpe2lmKHRoaXMuX2xhc3REcmFnQ2xpZW50WCl7bGV0IHI9dGhpcy5fbGFzdERyYWdDbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrNTAsbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwO3I+MD90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9ci8xMDpuPjAmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09bi8xMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX1faXNTd2FwQWxsb3dlZChyLG4pe2lmKHImJm4pe2xldCBpPXIhPT1uLG89ci5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50LGE9ci5mcm96ZW49PT1uLmZyb3plbjtyZXR1cm4gaSYmbyYmYX19X2lzU3dhcHBhYmxlQnlQb3NpdGlvbihyLG4pe2xldCBpPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpub3QoW2hpZGRlbl0pIFtwYXJ0fj0iY2VsbCJdJykpLmZpbHRlcihzPT5yLmNvbnRhaW5zKHMuX2NvbHVtbikpWzBdLG89dGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yKCJ0cjpub3QoW2hpZGRlbl0pIFtyZW9yZGVyLXN0YXR1cz1kcmFnZ2luZ10iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGEubGVmdD5vLmxlZnQ/bj5hLnJpZ2h0LW8ud2lkdGg6bjxhLmxlZnQrby53aWR0aH1fc3dhcENvbHVtbk9yZGVycyhyLG4pe2xldCBpPXIuX29yZGVyO3IuX29yZGVyPW4uX29yZGVyLG4uX29yZGVyPWksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpfV9nZXRUYXJnZXRDb2x1bW4ocixuKXtpZihyJiZuKXtsZXQgaT1yLl9jb2x1bW47Zm9yKDtpLnBhcmVudEVsZW1lbnQhPT1uLnBhcmVudEVsZW1lbnQmJmkhPT10aGlzOylpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gaS5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50P2k6ci5fY29sdW1ufX19O3ZhciBjaHI9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntyZXNpemFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIpcmV0dXJuO2xldCByPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gciYmci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIiYmci5yZXNpemFibGV8fCExfX0sX2hlYWRlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2Zvb3RlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sZnJvemVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGRlbjp7dHlwZTpCb29sZWFufSxoZWFkZXI6e3R5cGU6U3RyaW5nfSx0ZXh0QWxpZ246e3R5cGU6U3RyaW5nfSxfbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXI6TnVtYmVyLF9yZW9yZGVyU3RhdHVzOkJvb2xlYW4sX2VtcHR5Q2VsbHM6QXJyYXksX2hlYWRlckNlbGw6T2JqZWN0LF9mb290ZXJDZWxsOk9iamVjdCxfZ3JpZDpPYmplY3QsaGVhZGVyUmVuZGVyZXI6RnVuY3Rpb24sZm9vdGVyUmVuZGVyZXI6RnVuY3Rpb259fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfd2lkdGhDaGFuZ2VkKHdpZHRoLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9mcm96ZW5DaGFuZ2VkKGZyb3plbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZmxleEdyb3dDaGFuZ2VkKGZsZXhHcm93LCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9wYXRoT3JIZWFkZXJDaGFuZ2VkKHBhdGgsIGhlYWRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKiwgcmVuZGVyZXIsIGhlYWRlclJlbmRlcmVyLCBfYm9keVRlbXBsYXRlLCBfaGVhZGVyVGVtcGxhdGUpIiwiX3RleHRBbGlnbkNoYW5nZWQodGV4dEFsaWduLCBfY2VsbHMuKiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsKSIsIl9vcmRlckNoYW5nZWQoX29yZGVyLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9sYXN0RnJvemVuQ2hhbmdlZChfbGFzdEZyb3plbikiLCJfc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcihfYm9keVRlbXBsYXRlLCByZW5kZXJlciwgX2NlbGxzLCBfY2VsbHMuKikiLCJfc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKF9oZWFkZXJUZW1wbGF0ZSwgaGVhZGVyUmVuZGVyZXIsIF9oZWFkZXJDZWxsKSIsIl9zZXRGb290ZXJUZW1wbGF0ZU9yUmVuZGVyZXIoX2Zvb3RlclRlbXBsYXRlLCBmb290ZXJSZW5kZXJlciwgX2Zvb3RlckNlbGwpIiwiX3Jlc2l6YWJsZUNoYW5nZWQocmVzaXphYmxlLCBfaGVhZGVyQ2VsbCkiLCJfcmVvcmRlclN0YXR1c0NoYW5nZWQoX3Jlb3JkZXJTdGF0dXMsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2hpZGRlbkNoYW5nZWQoaGlkZGVuLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9ib2R5VGVtcGxhdGUmJih0aGlzLl9ib2R5VGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5faGVhZGVyVGVtcGxhdGUmJih0aGlzLl9oZWFkZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl9mb290ZXJUZW1wbGF0ZSYmKHRoaXMuX2Zvb3RlclRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLl9ib2R5VGVtcGxhdGV8fHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuY2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKHI9PntyLl9jb250ZW50LnBhcmVudE5vZGV8fHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuYXBwZW5kQ2hpbGQoci5fY29udGVudCl9KX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9maW5kSG9zdEdyaWQoKXx8dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChyPT57ci5fY29udGVudC5wYXJlbnROb2RlJiZyLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoci5fY29udGVudCl9KX0pLHRoaXMuX2dyaWRWYWx1ZT12b2lkIDB9X2ZpbmRIb3N0R3JpZCgpe2xldCByPXRoaXM7Zm9yKDtyJiYhL152YWFkaW4uKmdyaWQoLXBybyk/JC8udGVzdChyLmxvY2FsTmFtZSk7KXI9ci5hc3NpZ25lZFNsb3Q/ci5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZTpyLnBhcmVudE5vZGU7cmV0dXJuIHJ8fHZvaWQgMH1nZXQgX2dyaWQoKXtyZXR1cm4gdGhpcy5fZ3JpZFZhbHVlfHwodGhpcy5fZ3JpZFZhbHVlPXRoaXMuX2ZpbmRIb3N0R3JpZCgpKSx0aGlzLl9ncmlkVmFsdWV9Z2V0IF9hbGxDZWxscygpe3JldHVybltdLmNvbmNhdCh0aGlzLl9jZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzfHxbXSkuY29uY2F0KHRoaXMuX2hlYWRlckNlbGwpLmNvbmNhdCh0aGlzLl9mb290ZXJDZWxsKS5maWx0ZXIocj0+cil9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXI9bmV3IHZoKHRoaXMsKCk9Pnt0aGlzLl9oZWFkZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKSx0aGlzLl9mb290ZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlRm9vdGVyVGVtcGxhdGUoKSx0aGlzLl9ib2R5VGVtcGxhdGU9dGhpcy5fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpfSl9X3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCExLCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVCb2R5VGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgpfHxudWxsKX1fcHJlcGFyZVRlbXBsYXRpemVyKHIsbil7aWYociYmIXIudGVtcGxhdGl6ZXIpe2xldCBpPW5ldyBUMDtpLl9ncmlkPXRoaXMuX2dyaWQsaS5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LGkuX2luc3RhbmNlUHJvcHM9bnx8aS5faW5zdGFuY2VQcm9wcyxpLnRlbXBsYXRlPXIsci50ZW1wbGF0aXplcj1pfXJldHVybiByfV9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKXt0aGlzLmhlYWRlclJlbmRlcmVyJiZ0aGlzLl9oZWFkZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5oZWFkZXJSZW5kZXJlcix0aGlzLl9oZWFkZXJDZWxsKSx0aGlzLmZvb3RlclJlbmRlcmVyJiZ0aGlzLl9mb290ZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5mb290ZXJSZW5kZXJlcix0aGlzLl9mb290ZXJDZWxsKX1fX3J1blJlbmRlcmVyKHIsbixpKXtsZXQgbz1bbi5fY29udGVudCx0aGlzXTtpJiZpLml0ZW0mJm8ucHVzaChpKSxyLmFwcGx5KHRoaXMsbyl9X19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpe2lmKCF0aGlzLmhpZGRlbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSIpO2kuZm9yRWFjaChvPT57bGV0IGE9dGhpcy5fZ3JpZC5fX2dldFJvd01vZGVsKG8ucGFyZW50RWxlbWVudCk7aWYobilvLl9yZW5kZXJlcj1uLChhLml0ZW18fG49PT10aGlzLmhlYWRlclJlbmRlcmVyfHxuPT09dGhpcy5mb290ZXJSZW5kZXJlcikmJnRoaXMuX19ydW5SZW5kZXJlcihuLG8sYSk7ZWxzZSBpZihvLl90ZW1wbGF0ZSE9PXIpe28uX3RlbXBsYXRlPXIsby5fY29udGVudC5pbm5lckhUTUw9IiIsci50ZW1wbGF0aXplci5fZ3JpZD1yLnRlbXBsYXRpemVyLl9ncmlkfHx0aGlzLl9ncmlkO2xldCBzPXIudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKTtvLl9jb250ZW50LmFwcGVuZENoaWxkKHMucm9vdCksby5faW5zdGFuY2U9cyxhLml0ZW0mJm8uX2luc3RhbmNlLnNldFByb3BlcnRpZXMoYSl9fSl9fV9zZXRCb2R5VGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpfV9zZXRIZWFkZXJUZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpeyhyfHxuKSYmaSYmdGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcihyLG4sW2ldKX1fc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJih0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixbaV0pLHRoaXMuX2dyaWQuX191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KGkucGFyZW50RWxlbWVudCkpfV9zZWxlY3RGaXJzdFRlbXBsYXRlKHI9ITEsbj0hMSl7cmV0dXJuIHZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcihpPT5pLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJoZWFkZXIiKT09PXImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJmb290ZXIiKT09PW4pWzBdfV9maW5kVGVtcGxhdGUocixuKXtsZXQgaT10aGlzLl9zZWxlY3RGaXJzdFRlbXBsYXRlKHIsbik7cmV0dXJuIGkmJnRoaXMuZGF0YUhvc3QmJihpLl9yb290RGF0YUhvc3Q9dGhpcy5kYXRhSG9zdC5fcm9vdERhdGFIb3N0fHx0aGlzLmRhdGFIb3N0KSxpfV9mbGV4R3Jvd0NoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJmbGV4R3JvdyIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5mbGV4R3Jvdz1yKX1fb3JkZXJDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5vcmRlcj1yKX1fd2lkdGhDaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgid2lkdGgiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUud2lkdGg9ciksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fX2ZvcmNlUmVmbG93JiZ0aGlzLl9ncmlkLl9fZm9yY2VSZWZsb3coKX1fZnJvemVuQ2hhbmdlZChyKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoImZyb3plbiIsciksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIscixuKSksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkJiZ0aGlzLl9ncmlkLl9mcm96ZW5DZWxsc0NoYW5nZWQoKX1fbGFzdEZyb3plbkNoYW5nZWQocil7dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxhc3QtZnJvemVuIixyLG4pKSx0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJih0aGlzLnBhcmVudEVsZW1lbnQuX2xhc3RGcm96ZW49cil9X3BhdGhPckhlYWRlckNoYW5nZWQocixuLGksbyxhLHMsbCxjLHUpe2xldCBoPW4hPT12b2lkIDA7aWYoIWwmJiF1JiZoJiZpJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCxuKSxyJiZhLnZhbHVlKXtpZighcyYmIWMpe2xldCBmPShwLGQse2l0ZW06Z30pPT50aGlzLl9fc2V0VGV4dENvbnRlbnQocCx0aGlzLmdldChyLGcpKTt0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHZvaWQgMCxmLGEudmFsdWUpfSFsJiYhdSYmIWgmJmkmJm4hPT1udWxsJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCx0aGlzLl9nZW5lcmF0ZUhlYWRlcihyKSl9aSYmdGhpcy5fZ3JpZC5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkoaS5wYXJlbnRFbGVtZW50KX1fX3NldFRleHRDb250ZW50KHIsbil7ci50ZXh0Q29udGVudCE9PW4mJihyLnRleHRDb250ZW50PW4pfV9nZW5lcmF0ZUhlYWRlcihyKXtyZXR1cm4gci5zdWJzdHIoci5sYXN0SW5kZXhPZigiLiIpKzEpLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9eLi8sbj0+bi50b1VwcGVyQ2FzZSgpKX1fdG9nZ2xlQXR0cmlidXRlKHIsbixpKXtpLmhhc0F0dHJpYnV0ZShyKT09PSFuJiYobj9pLnNldEF0dHJpYnV0ZShyLCIiKTppLnJlbW92ZUF0dHJpYnV0ZShyKSl9X3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zZXRBdHRyaWJ1dGUoInJlb3JkZXItc3RhdHVzIixyKSl9X3Jlc2l6YWJsZUNoYW5nZWQocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHxuJiZbbl0uY29uY2F0KHRoaXMuX2VtcHR5Q2VsbHMpLmZvckVhY2goaT0+e2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3RvcignW3BhcnR+PSJyZXNpemUtaGFuZGxlIl0nKTtpZihvJiZpLnJlbW92ZUNoaWxkKG8pLHIpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc2V0QXR0cmlidXRlKCJwYXJ0IiwicmVzaXplLWhhbmRsZSIpLGkuYXBwZW5kQ2hpbGQoYSl9fX0pfV90ZXh0QWxpZ25DaGFuZ2VkKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuO2lmKFsic3RhcnQiLCJlbmQiLCJjZW50ZXIiXS5pbmRleE9mKHIpPT09LTEpe2NvbnNvbGUud2FybigndGV4dEFsaWduIGNhbiBvbmx5IGJlIHNldCBhcyAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIicpO3JldHVybn1sZXQgbjtnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2dyaWQpLmRpcmVjdGlvbj09PSJsdHIiP3I9PT0ic3RhcnQiP249ImxlZnQiOnI9PT0iZW5kIiYmKG49InJpZ2h0Iik6cj09PSJzdGFydCI/bj0icmlnaHQiOnI9PT0iZW5kIiYmKG49ImxlZnQiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKGk9PntpLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj1yLGdldENvbXB1dGVkU3R5bGUoaS5fY29udGVudCkudGV4dEFsaWduIT09ciYmKGkuX2NvbnRlbnQuc3R5bGUudGV4dEFsaWduPW4pfSl9X2hpZGRlbkNoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJoaWRkZW4iLHIpLCEhciE9ISF0aGlzLl9wcmV2aW91c0hpZGRlbiYmdGhpcy5fZ3JpZCYmKHI9PT0hMCYmdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bi5fY29udGVudC5wYXJlbnROb2RlJiZuLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobi5fY29udGVudCl9KSx0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkPXNyLmRlYm91bmNlKHRoaXMuX2dyaWQuX2RlYm91bmNlckhpZGRlbkNoYW5nZWQsTmksKCk9Pnt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlKHRoaXMuX2dyaWQuX2NvbHVtblRyZWUpfSksdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbiYmdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX2dyaWQubm90aWZ5UmVzaXplJiZ0aGlzLl9ncmlkLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX2dyaWQuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uJiZ0aGlzLl9ncmlkLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbigpKSx0aGlzLl9wcmV2aW91c0hpZGRlbj1yfX0sZVY9Y2xhc3MgZXh0ZW5kcyBjaHIoWkgobXQpKXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLWNvbHVtbiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3dpZHRoOnt0eXBlOlN0cmluZyx2YWx1ZToiMTAwcHgifSxmbGV4R3Jvdzp7dHlwZTpOdW1iZXIsdmFsdWU6MX0scmVuZGVyZXI6RnVuY3Rpb24scGF0aDp7dHlwZTpTdHJpbmd9LGF1dG9XaWR0aDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm9keVRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2NlbGxzOkFycmF5fX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShlVi5pcyxlVik7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIEBrZXlmcmFtZXMgdmFhZGluLWdyaWQtYXBwZWFyIHsKICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBhbmltYXRpb246IDFtcyB2YWFkaW4tZ3JpZC1hcHBlYXI7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzY3JvbGxlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pIHsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pICNzY3JvbGxlciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjdGFibGUgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBvdXRsaW5lOiBub25lOwogICAgICAvKiBXb3JrYXJvdW5kIGZvciBhIERlc2t0b3AgU2FmYXJpIGJ1ZzogbmV3IHN0YWNraW5nIGNvbnRleHQgaGVyZSBwcmV2ZW50cyB0aGUgc2Nyb2xsYmFyIGZyb20gZ2V0dGluZyBoaWRkZW4gKi8KICAgICAgei1pbmRleDogMDsKICAgIH0KCiAgICAjaGVhZGVyLAogICAgI2Zvb3RlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAjaGVhZGVyIHsKICAgICAgdG9wOiAwOwogICAgfQoKICAgIHRoIHsKICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgIH0KCiAgICAvKiBTYWZhcmkgZG9lc24ndCB3b3JrIHdpdGggImluaGVyaXQiICovCiAgICBbc2FmYXJpXSB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaXRpYWw7CiAgICB9CgogICAgI2Zvb3RlciB7CiAgICAgIGJvdHRvbTogMDsKICAgIH0KCiAgICAjaXRlbXMgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbGVmdDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtYXJnaW46IDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtsb2FkaW5nXSBbcGFydH49J2JvZHktY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXTplbXB0eSB7CiAgICAgIGhlaWdodDogMWVtOwogICAgfQoKICAgIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW2Zyb3plbl0gewogICAgICB6LWluZGV4OiAyOwogICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgfQoKICAgIFtuby1zY3JvbGxiYXJzXVtzYWZhcmldICN0YWJsZSwKICAgIFtuby1zY3JvbGxiYXJzXVtmaXJlZm94XSAjdGFibGUgewogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC8qIFJlb3JkZXJpbmcgc3R5bGVzICovCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSwKICAgICNzY3JvbGxlcltuby1jb250ZW50LXBvaW50ZXItZXZlbnRzXSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBvcGFjaXR5OiAwLjU7CgogICAgICAvKiBQcmV2ZW50IG92ZXJmbG93aW5nIHRoZSBncmlkIGluIEZpcmVmb3ggKi8KICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgewogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBSZXNpemluZyBzdHlsZXMgKi8KICAgIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBjb250ZW50OiAnJzsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMzVweDsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgfQoKICAgIFtsYXN0LWNvbHVtbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSwKICAgIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIHJpZ2h0OiAwOwogICAgfQoKICAgICNzY3JvbGxlcltjb2x1bW4tcmVzaXppbmddIHsKICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBTaXplciBzdHlsZXMgKi8KICAgICNzaXplciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgICNzaXplciBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXVtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgbGluZS1oZWlnaHQ6IDA7CiAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIG1heC1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ106OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICctJzsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjaXRlbXMsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2hlYWRlciwKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjZm9vdGVyIHsKICAgICAgbGVmdDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBsZWZ0OiBhdXRvOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10gewogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CiAgYCx7bW9kdWxlSWQ6InZhYWRpbi1ncmlkLXN0eWxlcyJ9KTt2YXIgdWhyPSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KSgpLHJWPWNsYXNzIGV4dGVuZHMgSkgoWEgoUWNlKCRjZSh0dWUoWGNlKGl1ZShvdWUoYXVlKG51ZShjdWUoamNlKHJ1ZShodWUoS2NlKGV1ZShsdWUoc3VlKHRWKSkpKSkpKSkpKSkpKSkpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gUWAKICAgICAgPGRpdgogICAgICAgIGlkPSJzY3JvbGxlciIKICAgICAgICBzYWZhcmkkPSJbW19zYWZhcmldXSIKICAgICAgICBpb3MkPSJbW19pb3NdXSIKICAgICAgICBsb2FkaW5nJD0iW1tsb2FkaW5nXV0iCiAgICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZCQ9IltbY29sdW1uUmVvcmRlcmluZ0FsbG93ZWRdXSIKICAgICAgPgogICAgICAgIDx0YWJsZSBpZD0idGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPSJ0cnVlIiB0YWJpbmRleD0iMCI+CiAgICAgICAgICA8Y2FwdGlvbiBpZD0ic2l6ZXIiIHBhcnQ9InJvdyI+PC9jYXB0aW9uPgogICAgICAgICAgPHRoZWFkIGlkPSJoZWFkZXIiIHJvbGU9InJvd2dyb3VwIj48L3RoZWFkPgogICAgICAgICAgPHRib2R5IGlkPSJpdGVtcyIgcm9sZT0icm93Z3JvdXAiPjwvdGJvZHk+CiAgICAgICAgICA8dGZvb3QgaWQ9ImZvb3RlciIgcm9sZT0icm93Z3JvdXAiPjwvdGZvb3Q+CiAgICAgICAgPC90YWJsZT4KCiAgICAgICAgPGRpdiBwYXJ0PSJyZW9yZGVyLWdob3N0Ij48L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJmb2N1c2V4aXQiIHRhYmluZGV4PSIwIj48L2Rpdj4KICAgIGB9c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9jb2x1bW5UcmVlQ2hhbmdlZChfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X3NhZmFyaTp7dHlwZTpCb29sZWFuLHZhbHVlOi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF9pb3M6e3R5cGU6Qm9vbGVhbix2YWx1ZTovaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbXx8bmF2aWdhdG9yLnBsYXRmb3JtPT09Ik1hY0ludGVsIiYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjF9LF9maXJlZm94Ont0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sX2FuZHJvaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTovYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF90b3VjaERldmljZTp7dHlwZTpCb29sZWFuLHZhbHVlOnVocn0saGVpZ2h0QnlSb3dzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfaGVpZ2h0QnlSb3dzQ2hhbmdlZCJ9LF9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0aGlzLl9vbkFuaW1hdGlvbkVuZCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LHIsbiksdD09PSJkaXIiJiYodGhpcy5fX2lzUlRMPW49PT0icnRsIix0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpKX1fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCl7cmV0dXJuISFBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHQ9PnQuY2xpZW50SGVpZ2h0KS5sZW5ndGh9X19pdGVtc1JlY2VpdmVkKCl7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQmJiF0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSYmdGhpcy5fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCkmJih0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZD0hMSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkpfV9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KXt0LmZvckVhY2gocj0+e3Iud2lkdGg9ImF1dG8iLHIuX29yaWdGbGV4R3Jvdz1yLmZsZXhHcm93LHIuZmxleEdyb3c9MH0pLHQuZm9yRWFjaChyPT57ci5fY3VycmVudFdpZHRoPTAsci5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bGV0IGk9bi5vZmZzZXRXaWR0aCsxO3IuX2N1cnJlbnRXaWR0aD1NYXRoLm1heChyLl9jdXJyZW50V2lkdGgsaSl9KX0pLHQuZm9yRWFjaChyPT57ci53aWR0aD1gJHtyLl9jdXJyZW50V2lkdGh9cHhgLHIuZmxleEdyb3c9ci5fb3JpZ0ZsZXhHcm93LHIuX2N1cnJlbnRXaWR0aD12b2lkIDAsci5fb3JpZ0ZsZXhHcm93PXZvaWQgMH0pfXJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl7aWYoISF0aGlzLl9jb2x1bW5UcmVlKWlmKHRoaXMuX2NhY2hlLmlzTG9hZGluZygpKXRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSEwO2Vsc2V7bGV0IHQ9dGhpcy5fZ2V0Q29sdW1ucygpLmZpbHRlcihyPT4hci5oaWRkZW4mJnIuYXV0b1dpZHRoKTt0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KX19X2NyZWF0ZVNjcm9sbGVyUm93cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO2kuc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93IiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl91cGRhdGVSb3coaSx0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLCJib2R5IiwhMSwhMCksci5wdXNoKGkpfXJldHVybiB0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLmZvckVhY2gobj0+bi5pc0Nvbm5lY3RlZCYmbi5ub3RpZnlQYXRoJiZuLm5vdGlmeVBhdGgoIl9jZWxscy4qIixuLl9jZWxscykpLHZndCh0aGlzLCgpPT57dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKX0pLHJ9X2dldFJvd1RhcmdldCgpe3JldHVybiB0aGlzLiQuaXRlbXN9X2NyZWF0ZUNlbGwodCl7bGV0IHI9dGhpcy5fY29udGVudEluZGV4PXRoaXMuX2NvbnRlbnRJbmRleCsxfHwwLG49InZhYWRpbi1ncmlkLWNlbGwtY29udGVudC0iK3IsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsbik7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtvLmlkPW4ucmVwbGFjZSgiLWNvbnRlbnQtIiwiLSIpLG8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksby5zZXRBdHRyaWJ1dGUoInJvbGUiLHQ9PT0idGQiPyJncmlkY2VsbCI6ImNvbHVtbmhlYWRlciIpO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNsb3QiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIm5hbWUiLG4pLG8uYXBwZW5kQ2hpbGQoYSksby5fY29udGVudD1pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e2lmKHdpbmRvdy5jaHJvbWUpe2xldCBzPSgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixzLCEwKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscywhMCl9ZWxzZSBzZXRUaW1lb3V0KCgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKX0pfSksb31fdXBkYXRlUm93KHQscixuLGksbyl7bj1ufHwiYm9keSI7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO0FycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaChzPT5zLl92YWNhbnQ9ITApLHQuaW5uZXJIVE1MPSIiLHQuaWQhPT0ic2l6ZXIiJiYodC5oaWRkZW49ITApLHIuZmlsdGVyKHM9PiFzLmhpZGRlbikuZm9yRWFjaCgocyxsLGMpPT57bGV0IHU7aWYobj09PSJib2R5Iil7aWYocy5fY2VsbHM9cy5fY2VsbHN8fFtdLHU9cy5fY2VsbHMuZmlsdGVyKGg9PmguX3ZhY2FudClbMF0sdXx8KHU9dGhpcy5fY3JlYXRlQ2VsbCgidGQiKSxzLl9jZWxscy5wdXNoKHUpKSx1LnNldEF0dHJpYnV0ZSgicGFydCIsImNlbGwgYm9keS1jZWxsIiksdC5hcHBlbmRDaGlsZCh1KSxsPT09Yy5sZW5ndGgtMSYmKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpKXt0aGlzLl9kZXRhaWxzQ2VsbHM9dGhpcy5fZGV0YWlsc0NlbGxzfHxbXTtsZXQgaD10aGlzLl9kZXRhaWxzQ2VsbHMuZmlsdGVyKGY9PmYuX3ZhY2FudClbMF18fHRoaXMuX2NyZWF0ZUNlbGwoInRkIik7dGhpcy5fZGV0YWlsc0NlbGxzLmluZGV4T2YoaCk9PT0tMSYmdGhpcy5fZGV0YWlsc0NlbGxzLnB1c2goaCksaC5fY29udGVudC5wYXJlbnRFbGVtZW50fHxhLmFwcGVuZENoaWxkKGguX2NvbnRlbnQpLHRoaXMuX2NvbmZpZ3VyZURldGFpbHNDZWxsKGgpLHQuYXBwZW5kQ2hpbGQoaCksdGhpcy5fYTExeVNldFJvd0RldGFpbHNDZWxsKHQsaCksaC5fdmFjYW50PSExfXMubm90aWZ5UGF0aCYmIW8mJnMubm90aWZ5UGF0aCgiX2NlbGxzLioiLHMuX2NlbGxzKX1lbHNle2xldCBoPW49PT0iaGVhZGVyIj8idGgiOiJ0ZCI7aXx8cy5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj8odT1zW2BfJHtufUNlbGxgXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHNbYF8ke259Q2VsbGBdPXUpOihzLl9lbXB0eUNlbGxzPXMuX2VtcHR5Q2VsbHN8fFtdLHU9cy5fZW1wdHlDZWxscy5maWx0ZXIoZj0+Zi5fdmFjYW50KVswXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHMuX2VtcHR5Q2VsbHMuaW5kZXhPZih1KT09PS0xJiZzLl9lbXB0eUNlbGxzLnB1c2godSkpLHUuc2V0QXR0cmlidXRlKCJwYXJ0IixgY2VsbCAke259LWNlbGxgKSx0aGlzLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eSh0KX11Ll9jb250ZW50LnBhcmVudEVsZW1lbnR8fGEuYXBwZW5kQ2hpbGQodS5fY29udGVudCksdS5fdmFjYW50PSExLHUuX2NvbHVtbj1zfSksdGhpcy5hcHBlbmRDaGlsZChhKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW5Gb3JSb3codCl9X191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KHQpe2lmKCF0KXJldHVybjtsZXQgcj1BcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZpbHRlcihuPT57bGV0IGk9bi5fY29sdW1uO2lmKGkuX2VtcHR5Q2VsbHMmJmkuX2VtcHR5Q2VsbHMuaW5kZXhPZihuKT4tMSlyZXR1cm4hMTtpZih0LnBhcmVudEVsZW1lbnQ9PT10aGlzLiQuaGVhZGVyKXtpZihpLmhlYWRlclJlbmRlcmVyfHxpLl9oZWFkZXJUZW1wbGF0ZSlyZXR1cm4hMDtpZihpLmhlYWRlcj09PW51bGwpcmV0dXJuITE7aWYoaS5wYXRofHxpLmhlYWRlciE9PXZvaWQgMClyZXR1cm4hMH1lbHNlIGlmKGkuZm9vdGVyUmVuZGVyZXJ8fGkuX2Zvb3RlclRlbXBsYXRlKXJldHVybiEwfSk7dC5oaWRkZW4hPT0hci5sZW5ndGgmJih0LmhpZGRlbj0hci5sZW5ndGgsdGhpcy5ub3RpZnlSZXNpemUoKSl9X3VwZGF0ZVNjcm9sbGVySXRlbSh0LHIpe3RoaXMuX3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHQsciksdGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZmlyc3QiLHI9PT0wLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgib2RkIixyJTIsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1Jvd2luZGV4KHQsciksdGhpcy5fZ2V0SXRlbShyLHQpKX1fY29sdW1uVHJlZUNoYW5nZWQodCl7dGhpcy5fcmVuZGVyQ29sdW1uVHJlZSh0KSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl9X3JlbmRlckNvbHVtblRyZWUodCl7Zm9yKEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMV0sbnVsbCwhMSwhMCkpO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPHQubGVuZ3RoOyl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtyLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLHIuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmhlYWRlci5hcHBlbmRDaGlsZChyKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO24uc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93Iiksbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLiQuZm9vdGVyLmFwcGVuZENoaWxkKG4pfWZvcig7dGhpcy4kLmhlYWRlci5jaGlsZHJlbi5sZW5ndGg+dC5sZW5ndGg7KXRoaXMuJC5oZWFkZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZCksdGhpcy4kLmZvb3Rlci5yZW1vdmVDaGlsZCh0aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkKTtBcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbbl0sImhlYWRlciIsbj09PXQubGVuZ3RoLTEpKSxBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMS1uXSwiZm9vdGVyIixuPT09MCkpLHRoaXMuX3VwZGF0ZVJvdyh0aGlzLiQuc2l6ZXIsdFt0Lmxlbmd0aC0xXSksdGhpcy5fcmVzaXplSGFuZGxlcigpLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKXt0aGlzLl9maXJlZm94JiYodGhpcy4kLml0ZW1zLnN0eWxlLnBhZGRpbmdCb3R0b209MCx0aGlzLmhlaWdodEJ5Um93c3x8KHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPWAke3RoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0fXB4YCkpLHRoaXMuX2lvcyYmIXdpbmRvdy5DU1Muc3VwcG9ydHMoInBvc2l0aW9uIiwic3RpY2t5IikmJih0aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuJC50YWJsZS5zdHlsZS5taW5IZWlnaHQ9IjEwMCUiLHRoaXMuJC50YWJsZS5zdHlsZS5tYXhIZWlnaHQ9IjEwMCUiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9YCR7dGhpcy4kLnNjcm9sbGVyLm9mZnNldEhlaWdodH1weGApKX1fdXBkYXRlSXRlbSh0LHIpe3QuX2l0ZW09cjtsZXQgbj10aGlzLl9fZ2V0Um93TW9kZWwodCk7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJzZWxlY3RlZCIsbi5zZWxlY3RlZCx0KSx0aGlzLl9hMTF5VXBkYXRlUm93U2VsZWN0ZWQodCxuLnNlbGVjdGVkKSx0aGlzLl9hMTF5VXBkYXRlUm93TGV2ZWwodCxuLmxldmVsKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImV4cGFuZGVkIixuLmV4cGFuZGVkLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChyKSx0KSwodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsciksdGhpcy5fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyh0LG4pLHRoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHQsbiksQXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpZihpLl9yZW5kZXJlcil7bGV0IG89aS5fY29sdW1ufHx0aGlzO2kuX3JlbmRlcmVyLmNhbGwobyxpLl9jb250ZW50LG8sbil9ZWxzZSBpLl9pbnN0YW5jZSYmKGkuX2luc3RhbmNlLl9fZGV0YWlsc09wZW5lZF9fPW4uZGV0YWlsc09wZW5lZCxpLl9pbnN0YW5jZS5fX3NlbGVjdGVkX189bi5zZWxlY3RlZCxpLl9pbnN0YW5jZS5fX2xldmVsX189bi5sZXZlbCxpLl9pbnN0YW5jZS5fX2V4cGFuZGVkX189bi5leHBhbmRlZCxpLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKG4pKX0pLHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyVXBkYXRlSGVpZ2h0cyxtby5hZnRlcigxKSwoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9KX1fcmVzaXplSGFuZGxlcigpe3RoaXMuX3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZXNpemVIYW5kbGVyLCEwKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9vbkFuaW1hdGlvbkVuZCh0KXt0LmFuaW1hdGlvbk5hbWUuaW5kZXhPZigidmFhZGluLWdyaWQtYXBwZWFyIik9PT0wJiYodGhpcy5fcmVuZGVyKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCksdGhpcy4kLnRhYmxlLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPSJ0b3VjaCJ9KSl9X3RvZ2dsZUF0dHJpYnV0ZSh0LHIsbil7bi5oYXNBdHRyaWJ1dGUodCk9PT0hciYmKHI/bi5zZXRBdHRyaWJ1dGUodCwiIik6bi5yZW1vdmVBdHRyaWJ1dGUodCkpfV9fZ2V0Um93TW9kZWwodCl7cmV0dXJue2luZGV4OnQuaW5kZXgsaXRlbTp0Ll9pdGVtLGxldmVsOnRoaXMuX2dldEluZGV4TGV2ZWwodC5pbmRleCksZXhwYW5kZWQ6dGhpcy5faXNFeHBhbmRlZCh0Ll9pdGVtKSxzZWxlY3RlZDp0aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pLGRldGFpbHNPcGVuZWQ6ISEodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKX19cmVuZGVyKCl7dGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX2NvbHVtblRyZWUuZm9yRWFjaCh0PT57dC5mb3JFYWNoKHI9PnIuX3JlbmRlckhlYWRlckFuZEZvb3RlcigpKX0pLHRoaXMuX3VwZGF0ZSgpKX1ub3RpZnlSZXNpemUoKXtzdXBlci5ub3RpZnlSZXNpemUoKX1faGVpZ2h0QnlSb3dzQ2hhbmdlZCh0LHIpeyh0fHxyKSYmdGhpcy5ub3RpZnlSZXNpemUoKX1fX2ZvcmNlUmVmbG93KCl7dGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3c9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3csTmksKCk9Pnt0aGlzLiQuc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsc2V0VGltZW91dCgoKT0+dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSIiKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHJWLmlzLHJWKTtmdW5jdGlvbiBmdWUoZSx0KXtyZXR1cm4gQmd0KGUsdCl9dmFyIGMxPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bj0iIn1fY3N2VXJsKHQscixuKXtyZXR1cm4gcj9NaShuKHQscikse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQscixuKXtyZXR1cm4gcj9uKHQscik6IiJ9X2Nzdk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uY3N2YDoiIn1fanNvbk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uanNvbmA6IiJ9fTtjMS50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiCiAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19IgogICAgPgogICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3J1bnNdXSI+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5dXSI+CiAgICAgIDxhIGRvd25sb2FkPSJbW19jc3ZOYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfY3N2VXJsKHRhZywgX3J1biwgdXJsRm4pXV0iCiAgICAgICAgPkNTVjwvYQogICAgICA+PCEtLQogICAgICAtLT48YQogICAgICAgIGRvd25sb2FkPSJbW19qc29uTmFtZSh0YWcsIF9ydW4pXV0iCiAgICAgICAgaHJlZj0iW1tfanNvblVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5KU09OPC9hCiAgICAgID4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICBhIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtOwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsIl9ydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGMxLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjMS5wcm90b3R5cGUsInVybEZuIix2b2lkIDApO2MxPUUoW3l0KCJ0Zi1kb3dubG9hZGVyIildLGMxKTt2YXIgaGhyPTY0LEVsaT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLEduPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1udWxsLHRoaXMuX2xvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2lmKG49PW51bGwpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGRhdGEgZm9yOiIscik7cmV0dXJufWxldCBpPW4ubWFwKGE9Pih7d2FsbF90aW1lOm5ldyBEYXRlKGFbMF0qMWUzKSxzdGVwOmFbMV0sc2NhbGFyOmFbMl19KSksbz10aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHIpO3Quc2V0U2VyaWVzTWV0YWRhdGEobyxyKSx0LnNldFNlcmllc0RhdGEobyxpKX0sdGhpcy5nZXREYXRhTG9hZFVybD0oe3RhZzp0LHJ1bjpyfSk9Pl9lKCkucGx1Z2luUm91dGVGb3JTcmMoInNjYWxhcnMiLCIvc2NhbGFycyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnQscnVuOnJ9KSksdGhpcy5fZG93bmxvYWRVcmxGbj0odCxyKT0+dGhpcy5nZXREYXRhTG9hZFVybCh7dGFnOnQscnVuOnJ9KSx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PnRoaXMuaW5Db2xhYj90aGlzLl9yZXF1ZXN0RGF0YUdldCh0LHIsbik6dGhpcy5fcmVxdWVzdERhdGFQb3N0KHQscixuKSx0aGlzLl9yZXF1ZXN0RGF0YUdldD0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPU1pKG8se3RhZzphLnRhZyxydW46YS5ydW59KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHMpLnRoZW4obD0+dm9pZCByKHtpdGVtOmEsZGF0YTpsfSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcmVxdWVzdERhdGFQb3N0PSh0LHIsbik9Pnt2YXIgYztsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnNfbXVsdGlydW4iKSxhPW5ldyBNYXA7Zm9yKGxldHt0YWc6dSxydW46aH1vZiB0KXtsZXQgZj1hLmdldCh1KTtmPT1udWxsJiZhLnNldCh1LGY9W10pLGYucHVzaChoKX1sZXQgcz0oYz10aGlzLmJhdGNoU2l6ZSkhPW51bGw/YzpoaHIsbD1bXTtmb3IobGV0W3UsaF1vZiBhKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7Zis9cylsLnB1c2goe3RhZzp1LHJ1bnM6aC5zbGljZShmLGYrcyl9KTtQcm9taXNlLmFsbChsLm1hcCgoe3RhZzp1LHJ1bnM6aH0pPT50aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyx7dGFnOnUscnVuczpofSkudGhlbihmPT57Zm9yKGxldCBwIG9mIGgpe2xldCBkPXt0YWc6dSxydW46cH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYscCk/cih7aXRlbTpkLGRhdGE6ZltwXX0pOnIoe2l0ZW06ZCxkYXRhOm51bGx9KX19KSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fZ2V0RGF0YUxvYWROYW1lPXQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57bGV0IHQ9aXN0LnNsaWNlKCkscj10LmZpbmRJbmRleChuPT5uLnRpdGxlPT0iTmFtZSIpO3JldHVybiB0LnNwbGljZShyLDEse3RpdGxlOiJOYW1lIixldmFsdWF0ZTpuPT57bGV0IGk9bi5kYXRhc2V0Lm1ldGFkYXRhKCkubWV0YTtyZXR1cm4gdGhpcy5fZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oaSl9fSksdH0pKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3ZhciB0O3JldHVybih0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTt0JiZ0LnJlc2V0RG9tYWluKCl9X3VwZGF0ZURvd25sb2FkTGluaygpe3ZhciBuO2xldCB0PXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLmV4cG9ydEFzU3ZnU3RyaW5nKCkscj0obj10aGlzLnNoYWRvd1Jvb3QpPT1udWxsP3ZvaWQgMDpuLnF1ZXJ5U2VsZWN0b3IoIiNzdmdMaW5rIik7ci5ocmVmPWBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYSh0KX1gfV9ydW5zRnJvbURhdGEodCl7cmV0dXJuIHQubWFwKHI9PnIucnVuKX1fZ2V0RGF0YVNlcmllcygpe3JldHVybiB0aGlzLmRhdGFUb0xvYWQubWFwKHQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCkpfV9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHtydW46dCxleHBlcmltZW50OnI9e25hbWU6Il9kZWZhdWx0In19KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW3IubmFtZSx0XSl9X2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKHQpe3JldHVybiB0LnJ1bn1fZ2V0Q29sb3JTY2FsZSgpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUhPT1udWxsP3RoaXMuY29sb3JTY2FsZTp7c2NhbGU6dD0+e2xldFsscl09SlNPTi5wYXJzZSh0KTtyZXR1cm4gZm4ocil9fX19O0duLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19nZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUpXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX2dldERhdGFTZXJpZXMoZGF0YVRvTG9hZC4qKV1dIgogICAgICAgIGRhdGEtdG8tbG9hZD0iW1tkYXRhVG9Mb2FkXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC1uYW1lPSJbW19nZXREYXRhTG9hZE5hbWVdXSIKICAgICAgICBnZXQtZGF0YS1sb2FkLXVybD0iW1tnZXREYXRhTG9hZFVybF1dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tyZXF1ZXN0RGF0YV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfbG9hZERhdGFDYWxsYmFja11dIgogICAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICAgIGxvZy1zY2FsZS1hY3RpdmU9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgdGFnLW1ldGFkYXRhPSJbW3RhZ01ldGFkYXRhXV0iCiAgICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249ImF1dG8iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPHBhcGVyLW1lbnUtYnV0dG9uIG9uLXBhcGVyLWRyb3Bkb3duLW9wZW49Il91cGRhdGVEb3dubG9hZExpbmsiPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBpY29uPSJmaWxlLWRvd25sb2FkIgogICAgICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPgogICAgICAgICAgICAgIDxhIGlkPSJzdmdMaW5rIiBkb3dubG9hZD0iW1t0YWddXS5zdmciPgogICAgICAgICAgICAgICAgRG93bmxvYWQgQ3VycmVudCBDaGFydCBhcyBTVkcKICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLW1lbnUtYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8dGYtZG93bmxvYWRlcgogICAgICAgICAgICBydW5zPSJbW19ydW5zRnJvbURhdGEoZGF0YVRvTG9hZCldXSIKICAgICAgICAgICAgdGFnPSJbW3RhZ11dIgogICAgICAgICAgICB1cmwtZm49IltbX2Rvd25sb2FkVXJsRm5dXSIKICAgICAgICAgID48L3RmLWRvd25sb2FkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgfQoKICAgICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgICNidXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIGEgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHBhcGVyLW1lbnUtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIHBhcGVyLWl0ZW0gYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sR24ucHJvdG90eXBlLCJkYXRhVG9Mb2FkIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEduLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sR24ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic2hvd0Rvd25MaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHbi5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEduLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEduLnByb3RvdHlwZSwiYmF0Y2hTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsImluQ29sYWIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfbG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwiZ2V0RGF0YUxvYWRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZG93bmxvYWRVcmxGbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwicmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR24ucHJvdG90eXBlLCJfbG9nU2NhbGVBY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEduLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0duPUUoW3l0KCJ0Zi1zY2FsYXItY2FyZCIpXSxHbik7dmFyIFZzPWNsYXNzIGV4dGVuZHMgZnVlKFtjV10sbXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlc3Npb25Hcm91cD1udWxsLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fbm9NdWx0aUV4cGVyaW1lbnRzPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntQcm9taXNlLmFsbCh0Lm1hcChpPT57bGV0IG89e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6aS5ydW4sbWV0cmljTmFtZTppLnRhZ307cmV0dXJuIHRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMobykudGhlbihhPT52b2lkIHIoe2l0ZW06aSxkYXRhOmF9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9jb2xvclNjYWxlPXtzY2FsZTp0PT57bGV0IHI9SlNPTi5wYXJzZSh0KVsxXSxuPXRoaXMuX2luZGV4T2ZTZXNzaW9uLmdldChyKSxpPWlSO3JldHVybiBpWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCtuKSVpLmxlbmd0aF19fX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5yZWRyYXcuYmluZCh0aGlzKSl9cmVkcmF3KCl7dmFyIHQ7KHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2gocj0+e3IucmVkcmF3KCl9KX1fc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3ZhciB0OyF0aGlzLnNlc3Npb25Hcm91cHx8T2JqZWN0LmtleXModGhpcy5zZXNzaW9uR3JvdXApLmxlbmd0aD09MD8odGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD0wKToodGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCh0aGlzLnNlc3Npb25Hcm91cC5zZXNzaW9ucy5tYXAoKHIsbik9PltyLm5hbWUsbl0pKSx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD1kY3QodGhpcy5zZXNzaW9uR3JvdXAubmFtZSkpLCh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntsZXQgbj1yLGk9bi5nZXQoInRhZyIpO24uc2V0KCJ0YWciLCIiKSxuLnNldCgidGFnIixpKX0pfV9oYXZlTWV0cmljcygpe3JldHVybiB0aGlzLnZpc2libGVTY2hlbWEmJkFycmF5LmlzQXJyYXkodGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zKSYmdGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wfV9oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCYmdGhpcy5faGF2ZU1ldHJpY3MoKX1fY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyh0LHIpe3JldHVybiB0PT09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHxyPT09bnVsbD9bXTp0LnNlc3Npb25zLmZpbHRlcihuPT5mMyhuLm1ldHJpY1ZhbHVlcyxyLm5hbWUpIT09dm9pZCAwKS5tYXAobj0+KHt0YWc6ci5uYW1lLHJ1bjpuLm5hbWV9KSl9X2NvbXB1dGVUYWdNZXRhZGF0YSh0KXtyZXR1cm57ZGlzcGxheU5hbWU6UXUodCksZGVzY3JpcHRpb246dC5kZXNjcmlwdGlvbnx8IiJ9fX07VnMudGVtcGxhdGU9UWAKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shc2Vzc2lvbkdyb3VwXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBzZXNzaW9uIGdyb3VwIHNlbGVjdGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2Ugc2VsZWN0IGEgc2Vzc2lvbiBncm91cCB0byBzZWUgaXRzIG1ldHJpYy1ncmFwaHMgaGVyZS48L3A+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhdmVNZXRyaWNzKHZpc2libGVTY2hlbWEuKildXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIG1ldHJpY3MgYXJlIGVuYWJsZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBlbmFibGUgc29tZSBtZXRyaWNzIHRvIHNlZSBjb250ZW50IGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKHZpc2libGVTY2hlbWEuKiwgc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3NdXSIKICAgICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGEgcmVxdWVzdC1tYW5hZ2VyIGF0dHJpYnV0ZSBzaW5jZQogICAgICAgICAgICAgICB3ZSBwcm92aWRlIGEgZnVuY3Rpb24gaW4gcmVxdWVzdC1kYXRhIGZvciBjYWxsaW5nIHRoZSBiYWNrZW5kCiAgICAgICAgICAgICAgIHRvIGdldCB0aGUgbWV0cmljcyBkYXRhLgogICAgICAgICAgICAtLT4KICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICBjbGFzcz0ic2NhbGFyLWNhcmQiCiAgICAgICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhzZXNzaW9uR3JvdXAsIG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHRhZz0iW1ttZXRyaWNJbmZvLm5hbWUudGFnXV0iCiAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfY29tcHV0ZVRhZ01ldGFkYXRhKG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX25vTXVsdGlFeHBlcmltZW50c11dIgogICAgICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgPgogICAgICAgICAgPC90Zi1zY2FsYXItY2FyZD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8IS0tICJpcm9uLWZsZXgiIGlzIG5lZWRlZCB0byB1c2UgdGhlIGxheW91dCBjbGFzc2VzIGluIHRoZSBkaXYgYWJvdmUgLS0+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVnMucHJvdG90eXBlLCJfbm9NdWx0aUV4cGVyaW1lbnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiX2luZGV4T2ZTZXNzaW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cE5hbWVIYXNoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sVnMucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJfY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3VwLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cENoYW5nZWQiLG51bGwpO1ZzPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyIpXSxWcyk7dmFyIEhkPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faHBhcmFtTmFtZT1GZCx0aGlzLl9tZXRyaWNOYW1lPVF1fV92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe2xldCB0PXRoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuZ2V0KCJkZXRhaWxzT3BlbmVkSXRlbXMiKTt0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIixbXSksY2koKTtsZXQgcj1uZXcgTWFwO3RoaXMuc2Vzc2lvbkdyb3Vwcy5mb3JFYWNoKG49PntyLnNldChuLm5hbWUsbil9KSx0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIix0Lm1hcChuPT5yLmdldChuLm5hbWUpKS5maWx0ZXIoQm9vbGVhbikpfV9zZXNzaW9uR3JvdXBIUGFyYW0odCxyKXtyZXR1cm4gdD09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQuaHBhcmFtcyxyKT8iIjpiMCh0LmhwYXJhbXNbcl0pfV9zZXNzaW9uR3JvdXBNZXRyaWModCxyKXtpZih0PT1udWxsfHxPYmplY3Qua2V5cyh0KS5sZW5ndGg9PTApcmV0dXJuIiI7Zm9yKGxldCBuPTA7bjx0Lm1ldHJpY1ZhbHVlcy5sZW5ndGg7KytuKXtsZXQgaT10Lm1ldHJpY1ZhbHVlc1tuXTtpZihpLm5hbWUuZ3JvdXA9PT1yLmdyb3VwJiZpLm5hbWUudGFnPT1yLnRhZylyZXR1cm4gYjAoaS52YWx1ZSl9cmV0dXJuIiJ9X3Jvd051bWJlcih0KXtyZXR1cm4gdCsxfX07SGQudGVtcGxhdGU9UWAKICAgIDx2YWFkaW4tZ3JpZAogICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC10YWJsZSIKICAgICAgaWQ9InNlc3Npb25Hcm91cHNUYWJsZSIKICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZD0iIgogICAgICBpdGVtcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICA+CiAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5UcmlhbCBJRDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+W1tpdGVtLm5hbWVdXTwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZW5hYmxlU2hvd01ldHJpY3NdXSI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIGF1dG9XaWR0aD0iIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5TaG93IE1ldHJpY3M8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0idGFibGUtY2VsbCIgY2hlY2tlZD0ie3tkZXRhaWxzT3BlbmVkfX0iPgogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbdmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc11dIgogICAgICAgIGFzPSJocGFyYW1JbmZvIgogICAgICAgIGluZGV4LWFzPSJocGFyYW1JbmRleCIKICAgICAgPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW1JbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwSFBhcmFtKGl0ZW0sIGhwYXJhbUluZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJ7e3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3N9fSIKICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICBpbmRleC1hcz0ibWV0cmljSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cE1ldHJpYyhpdGVtLCBtZXRyaWNJbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgY2xhc3M9InJvdy1kZXRhaWxzIj4KICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW2l0ZW1dXSIKICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICAgIGNsYXNzPSJzZXNzaW9uLWdyb3VwLWRldGFpbHMiCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3ZhYWRpbi1ncmlkPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjMzAzMDMwOwogICAgICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHZhYWRpbi1ncmlkIHsKICAgICAgICAtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICAvKiBsaW5lLWJyZWFrIG92ZXJmbG93aW5nIGNvbHVtbiBoZWFkZXJzICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLXRhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtZGV0YWlscyB7CiAgICAgICAgaGVpZ2h0OiAzNjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSGQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIZC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIZC5wcm90b3R5cGUsImVuYWJsZVNob3dNZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhkLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxIZC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0J0KCJ2aXNpYmxlU2NoZW1hLioiLCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhkLnByb3RvdHlwZSwiX3Zpc2libGVTY2hlbWFPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKTtIZD1FKFt5dCgidGYtaHBhcmFtcy10YWJsZS12aWV3IildLEhkKTt2YXIgQ1A9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLnZpc2libGVTY2hlbWE9bnVsbH1fcHJvcGVydGllc0FyZVBvcHVsYXRlZCh0LHIpe3JldHVybiB0IT1udWxsJiZyIT09dm9pZCAwJiZyIT09bnVsbH1fc2luZ2xldG9uU2Vzc2lvbkdyb3Vwcyh0KXtyZXR1cm4gdD09bnVsbD9bXTpbdF19fTtDUC50ZW1wbGF0ZT1RYAogICAgPCEtLSBJZiBzZXNzaW9uR3JvdXAgb3IgdmlzaWJsZVNjaGVtYSBhcmUgbm90IHBvcHVsYXRlZCwgZG8gbm90IGRpc3BsYXkKICAgICAgICAgYW55dGhpbmcuCiAgICAgIC0tPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbW19wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSIKICAgID4KICAgICAgPCEtLSBEaXNwbGF5IG9uZSByb3cgd2l0aG91dCBhICJzaG93LW1ldHJpY3MiIGNvbHVtbiAtLT4KICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2luZ2xldG9uU2Vzc2lvbkdyb3VwcyhzZXNzaW9uR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbWyFfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDxkaXY+Q2xpY2sgb3IgaG92ZXIgb3ZlciBhIHNlc3Npb24gZ3JvdXAgdG8gZGlzcGxheSBpdHMgdmFsdWVzIGhlcmUuPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJzZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0NQPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIildLENQKTt2YXIgQVA9RWUoT2UoKSwxKTtmdW5jdGlvbiBwdWUoZSx0LHIsbil7aWYodC5sZW5ndGg8MilyZXR1cm4gY29uc29sZS5lcnJvcigiTGVzcyB0aGFuIHR3byBheGVzIGluIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QuIiksbnVsbDtsZXQgaT1yWzBdLG89clsxXTtpZihpPD10WzBdfHxpPj10W3QubGVuZ3RoLTFdKXJldHVybiBudWxsO2xldCBhPUFQLnNvcnRlZEluZGV4KHQsaSk7Y29uc29sZS5hc3NlcnQoYT4wKSxjb25zb2xlLmFzc2VydChhPHQubGVuZ3RoKTtsZXQgcz1hLTE7ZnVuY3Rpb24gbChoLGYscCxkKXtsZXQgZz1oLXAsXz1mLWQseT1pLXAseD1vLWQsYj0oZyp5K18qeCkvKGcqZytfKl8pO2lmKGI8PTApcmV0dXJuIHAzKHkseCk7aWYoYj49MSl7bGV0IFM9aC1pLEM9Zi1vO3JldHVybiBwMyhTLEMpfXJldHVybiBwMyh5LWIqZyx4LWIqXyl9bGV0IGM9bnVsbCx1PW51bGw7cmV0dXJuIGUuZm9yRWFjaChoPT57bGV0IGY9bChoLmNvbnRyb2xQb2ludHNbc11bMF0saC5jb250cm9sUG9pbnRzW3NdWzFdLGguY29udHJvbFBvaW50c1thXVswXSxoLmNvbnRyb2xQb2ludHNbYV1bMV0pO2Y+bnx8KGM9PT1udWxsfHxmPGMpJiYoYz1mLHU9aCl9KSx1fWZ1bmN0aW9uIGR1ZShlLHQscil7cmV0dXJuIGUuZG9tYWluKCkuZmlsdGVyKG49PntsZXQgaT1lKG4pO3JldHVybiB0PD1pJiZpPD1yfSl9ZnVuY3Rpb24gbXVlKGUsdCxyKXtsZXQgbj1lLnJhbmdlKCksaT1uLmZpbHRlcihvPT50PD1vJiZvPD1yKS5tYXAobz0+e2xldCBhPWUuaW52ZXJ0RXh0ZW50KG8pO3JldHVybiBvPT09bltuLmxlbmd0aC0xXT9bYVswXSxhWzFdKzFdOmF9KTtyZXR1cm4gaS5sZW5ndGg9PTA/WzAsMF06YWEoSW0oaSkpfWZ1bmN0aW9uIGd1ZShlLHQscil7cmV0dXJuW2UuaW52ZXJ0KHQpLGUuaW52ZXJ0KHIpXS5zb3J0KChuLGkpPT5uLWkpfWZ1bmN0aW9uIEZjdChlLHQscil7ZnVuY3Rpb24gbigpe2lmKGUubGVuZ3RoPT09MClyZXR1cm5bMSwyXTtsZXRbaSxvXT1hYShlKTtyZXR1cm4gaSE9PW8/W2ksb106aT4wP1tpKi41LGkqMS41XTppPDA/W2kqMS41LGkqLjVdOlstMSwxXX1pZihyPT09IkxJTkVBUiIpcmV0dXJuIE9uKCkuZG9tYWluKG4oKSkucmFuZ2UoW3QsMF0pO2lmKHI9PT0iTE9HIil7bGV0IGk9bigpO3JldHVybiBpWzBdPD0wJiZpWzFdPj0wP0ZjdChlLHQsIkxJTkVBUiIpOmNjKCkuZG9tYWluKGkpLnJhbmdlKFt0LDBdKX1lbHNlIGlmKHI9PT0iUVVBTlRJTEUiKXtsZXQgbz1JcigyMCkubWFwKGE9PnQtYSp0LzE5KTtyZXR1cm4gZS5sZW5ndGg9PT0wJiYoZT1bMV0pLGVnKCkuZG9tYWluKEFQLnVuaXEoZSkpLnJhbmdlKG8pfWVsc2V7aWYocj09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKEFQLnVuaXEoZS5zb3J0KCkpKS5yYW5nZShbdCwwXSkucGFkZGluZyguMSk7dGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBzY2FsZTogIityKX19dmFyIHUxOyhmdW5jdGlvbihlKXtlLkxJTkVBUj0iTElORUFSIixlLkxPRz0iTE9HIixlLlFVQU5USUxFPSJRVUFOVElMRSIsZS5OT05fTlVNRVJJQz0iTk9OX05VTUVSSUMifSkodTF8fCh1MT17fSkpO3ZhciBQUD1jbGFzc3tpc1Bhc3NpbmcodCl7cmV0dXJuITB9fSxuVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9sb3dlcj10LHRoaXMuX3VwcGVyPXIsdGhpcy5fbG93ZXJPcGVuPW4sdGhpcy5fdXBwZXJPcGVuPWl9aXNQYXNzaW5nKHQpe2xldCByPXQ7cmV0dXJuIHRoaXMuX2JlZm9yZSh0aGlzLl9sb3dlcixyLCF0aGlzLl9sb3dlck9wZW4pJiZ0aGlzLl9iZWZvcmUocix0aGlzLl91cHBlciwhdGhpcy5fdXBwZXJPcGVuKX1fYmVmb3JlKHQscixuKXtyZXR1cm4gbj90PD1yOnQ8cn19LEhjdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb21haW5TZXQ9dH1pc1Bhc3NpbmcodCl7cmV0dXJuIHRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgocj0+cj09PXQpIT09LTF9fSxWY3Q9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9cix0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bix0aGlzLl9jb2xJbmRleD1pLHRoaXMuX2lzRGlzcGxheWVkPSExLHRoaXMuX3lTY2FsZT1udWxsLHRoaXMuX3NjYWxlVHlwZT1udWxsLHRoaXMuc2V0QnJ1c2hTZWxlY3Rpb24obnVsbCl9Y29sSW5kZXgoKXtyZXR1cm4gdGhpcy5fY29sSW5kZXh9eVNjYWxlKCl7cmV0dXJuIHRoaXMuX3lTY2FsZX1zY2FsZVR5cGUoKXtyZXR1cm4gdGhpcy5fc2NhbGVUeXBlfWJydXNoU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2JydXNoU2VsZWN0aW9ufWlzRGlzcGxheWVkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcGxheWVkfXNldEJydXNoU2VsZWN0aW9uKHQpe3RoaXMuX2JydXNoU2VsZWN0aW9uPXQsdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1zZXREb21haW5BbmRTY2FsZSh0LHIpe3RoaXMuX3NjYWxlVHlwZT1yLHRoaXMuX3lTY2FsZT1GY3QodC5zbGljZSgpLHRoaXMuX3N2Z1Byb3BzLmhlaWdodCx0aGlzLnNjYWxlVHlwZSgpKSx0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSx0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfWJydXNoRmlsdGVyKCl7cmV0dXJuIHRoaXMuX2JydXNoRmlsdGVyfXVwZGF0ZURPTSh0KXtsZXQgcj1sYih0aGlzLnlTY2FsZSgpKTt0aGlzLnNjYWxlVHlwZSgpPT09dTEuUVVBTlRJTEUmJihyPXIudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KHhuKCItLjZnIikpKTtsZXQgbj1IdCh0KTtuLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLG4uYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcyIsITApLmNhbGwocikuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpcy10aXRsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsLTkpLnRleHQoYT0+Y2N0KHRoaXMuX3NjaGVtYSxhKSksbi5jYWxsKHBiKCkub24oInN0YXJ0IiwoKT0+e3Quc2V0QXR0cmlidXRlKCJpcy1kcmFnZ2luZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdTdGFydCh0aGlzLmNvbEluZGV4KCkpfSkub24oImRyYWciLCgpPT50aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnKHF0LngpKS5vbigiZW5kIiwoKT0+e3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdFbmQoKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciKX0pKTtsZXQgaT1xTCgpLmV4dGVudChbWy04LDBdLFs4LHRoaXMuX3N2Z1Byb3BzLmhlaWdodCsxXV0pLm9uKCJzdGFydCIsKCk9PnshQmN0KHF0KXx8KHQuc2V0QXR0cmlidXRlKCJpcy1icnVzaGluZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKSl9KS5vbigiYnJ1c2giLCgpPT57IUJjdChxdCl8fHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKX0pLm9uKCJlbmQiLCgpPT57IUJjdChxdCl8fCh0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbiksdC5yZW1vdmVBdHRyaWJ1dGUoImlzLWJydXNoaW5nIikpfSksbz1IdCh0KS5hcHBlbmQoImciKS5jbGFzc2VkKCJicnVzaCIsITApO28uY2FsbChpKSxpLm1vdmUobyx0aGlzLmJydXNoU2VsZWN0aW9uKCkpfXNldERpc3BsYXllZCh0KXt0aGlzLl9pc0Rpc3BsYXllZD10fV9idWlsZEJydXNoRmlsdGVyKHQscixuKXtpZih0PT09bnVsbClyZXR1cm4gbmV3IFBQO2lmKHI9PT1udWxsKXJldHVybiBjb25zb2xlLmVycm9yKCJTY2FsZSB0eXBlIGlzIG51bGwsIGJ1dCBicnVzaFNlbGVjdGlvbiBpc24ndDogIix0KSxuZXcgUFA7c3dpdGNoKHIpe2Nhc2UgdTEuTElORUFSOmNhc2UgdTEuTE9HOntsZXRbaSxvXT1ndWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCExKX1jYXNlIHUxLlFVQU5USUxFOntsZXRbaSxvXT1tdWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCEwKX1jYXNlIHUxLk5PTl9OVU1FUklDOnJldHVybiBuZXcgSGN0KGR1ZShuLHRbMF0sdFsxXSkpfXJldHVybiBjb25zb2xlLmVycm9yKCJVbmtub3duIHNjYWxlIHR5cGU6ICIsciksbmV3IFBQfX0saVY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlcz10aGlzLl9jcmVhdGVBeGVzKG4pLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zPXRnKCkucmFuZ2UoWzEsdGhpcy5fc3ZnUHJvcHMud2lkdGgtMV0pLnBhZGRpbmcoLjUpLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYXhpcy1wYXJlbnQiKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCIuYXhpcy1wYXJlbnQiKX11cGRhdGVBeGVzKHQscil7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7bGV0IG49bmV3IFNldDt0LmNvbHVtbnMuZm9yRWFjaChvPT57bGV0IGE9by5hYnNvbHV0ZUluZGV4LHM9dGhpcy5fYXhlc1thXTtzLnNldERpc3BsYXllZCghMCk7bGV0IGw9ci5tYXAoYz0+eDAodGhpcy5fc2NoZW1hLGMsYSkpO3Muc2V0RG9tYWluQW5kU2NhbGUobCxvLnNjYWxlKSxuLmFkZChhKX0pLHRoaXMuX2F4ZXMuZm9yRWFjaChvPT57bi5oYXMoby5jb2xJbmRleCgpKXx8by5zZXREaXNwbGF5ZWQoITEpfSksdGhpcy5fdXBkYXRlU3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMobiksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmRhdGEoQXJyYXkuZnJvbShuKSxvPT5vKSx0aGlzLl9wYXJlbnRzU2VsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzLXBhcmVudCIsITApLm1lcmdlKHRoaXMuX3BhcmVudHNTZWwpO2xldCBpPXRoaXM7dGhpcy5fcGFyZW50c1NlbC5jYWxsKG89PnRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTShvKSkuZWFjaChmdW5jdGlvbihvKXtpLl9heGVzW29dLnVwZGF0ZURPTSh0aGlzKX0pfW1hcFZpc2libGVBeGVzKHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5tYXAocj0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihyKSx0aGlzLl9heGVzW3JdKSl9YWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5ldmVyeShyPT50KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHIpLHRoaXMuX2F4ZXNbcl0pKX1nZXRBeGlzRm9yQ29sSW5kZXgodCl7cmV0dXJuIHRoaXMuX2F4ZXNbdF19ZHJhZ1N0YXJ0KHQpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2F4ZXNbdF0uaXNEaXNwbGF5ZWQoKSksdGhpcy5fZHJhZ2dlZEF4aXM9dGhpcy5fYXhlc1t0XSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfWRyYWcodCl7dD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuX3N2Z1Byb3BzLndpZHRoKSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXQ7bGV0IHI9dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCk7ci5zb3J0KChuLGkpPT50aGlzLmdldEF4aXNQb3NpdGlvbihuKS10aGlzLmdldEF4aXNQb3NpdGlvbihpKSksdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKHIpLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsKX1kcmFnRW5kKHQpe2NvbnNvbGUuYXNzZXJ0KHRoaXMuaXNBeGlzRHJhZ2dpbmcoKSksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj1udWxsLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKHQpKX1pc0F4aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGx9Z2V0QXhpc1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGwmJnRoaXMuX2RyYWdnZWRBeGlzLmNvbEluZGV4KCk9PT10P3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb246dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnModCl9X3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpe2xldCByPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcihpPT50LmhhcyhpKSksbj1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnIsLi4uQXJyYXkuZnJvbSh0KV0pKTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4obil9X3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0KXt0LmF0dHIoInRyYW5zZm9ybSIscj0+eVAodGhpcy5nZXRBeGlzUG9zaXRpb24ocikpKX1fY3JlYXRlQXhlcyh0KXtyZXR1cm4gSXIodWN0KHRoaXMuX3NjaGVtYSkpLm1hcChyPT5uZXcgVmN0KHRoaXMuX3N2Z1Byb3BzLHRoaXMuX3NjaGVtYSx0LHIpKX19O2Z1bmN0aW9uIEJjdChlKXtyZXR1cm4gZS5zb3VyY2VFdmVudCE9PW51bGx9dmFyIGpmOyhmdW5jdGlvbihlKXtlW2UuRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCIsZVtlLkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoamZ8fChqZj17fSkpO3ZhciB0aD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0PT09dm9pZCAwJiYodD1FcChudWxsKSksY29uc29sZS5hc3NlcnQodC5zaXplKCk8PTEpLHRoaXMuX3Nlc3Npb25Hcm91cFNlbD10fXNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpPT09MT90aGlzLl9zZXNzaW9uR3JvdXBTZWwuZGF0dW0oKTpudWxsfWlzTnVsbCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCgpPT09bnVsbH1zZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Vzc2lvbkdyb3VwU2VsfWVxdWFsc1RvKHQpe3ZhciByLG47cmV0dXJuIHRoaXMuaXNOdWxsKCk/dC5pc051bGwoKTp0LmlzTnVsbCgpPyExOigocj10LnNlc3Npb25Hcm91cCgpKT09bnVsbD92b2lkIDA6ci5uYW1lKT09KChuPXRoaXMuc2Vzc2lvbkdyb3VwKCkpPT1udWxsP3ZvaWQgMDpuLm5hbWUpfX0sb1Y9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlc0NvbGxlY3Rpb249bix0aGlzLl9zZXNzaW9uR3JvdXBzPVtdLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmJhY2tncm91bmQiKS5yZW1vdmUoKSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5mb3JlZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fYmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl9mZ1BhdGhzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuYXBwZW5kKCJnIikuY2xhc3NlZCgiZm9yZWdyb3VuZCIsITApLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPW5ldyB0aCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdGgsdGhpcy5fZDNsaW5lPXZ1KCkuY3VydmUoWWgpfWdldFNlc3Npb25Hcm91cEhhbmRsZSh0KXtyZXR1cm4gdD09bnVsbD9uZXcgdGg6bmV3IHRoKHRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKHI9PnIubmFtZT09PXQubmFtZSkpfWhpZGVCYWNrZ3JvdW5kTGluZXMoKXt0aGlzLl9iZ1BhdGhzU2VsLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKX1zaG93QmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IixudWxsKX1wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKXtyZXR1cm4gdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlfXNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlfXJlY29tcHV0ZUNvbnRyb2xQb2ludHModCxyPTApeyh0PT09amYuRk9SRUdST1VORD90aGlzLl9mZ1BhdGhzU2VsOnRoaXMuX2JnUGF0aHNTZWwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyKS5hdHRyKCJkIixpPT50aGlzLl9wYXRoREF0dHJpYnV0ZShpKSksdD09PWpmLkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgpPT57bGV0IGk9dGhpczt0aGlzLl9mZ1BhdGhzU2VsLmVhY2goZnVuY3Rpb24obyl7aS5fc2V0Q29udHJvbFBvaW50c1Byb3BlcnR5KHRoaXMsbyl9KX0pfXJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKXt0aGlzLl9mZ1BhdGhzU2VsLmNsYXNzZWQoImludmlzaWJsZS1wYXRoIix0PT4hdGhpcy5fYXhlc0NvbGxlY3Rpb24uYWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KChyLG4pPT5uLmJydXNoRmlsdGVyKCkuaXNQYXNzaW5nKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpKSksdGhpcy5fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKX1zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcih0LHIsbil7bGV0IGk9dGhpcy5fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxyLG4pO3RoaXMuX2ZnUGF0aHNTZWwuYXR0cigic3Ryb2tlIixpKX1yZWRyYXcodCxyLG4saSl7bGV0IG89dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLGE9dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz10LHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKG8pLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKGEpLHRoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5EKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuQkFDS0dST1VORCksdGhpcy5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCksdGhpcy5zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcihyLG4saSl9dXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKHQpe3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITEpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT10LHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITApfWNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCl7dGhpcy51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAobmV3IHRoKX11cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMCl9ZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKXtsZXQgbj10aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygobyxhKT0+byksaT1wdWUodGhpcy5fdmlzaWJsZUZnUGF0aHNTZWwubm9kZXMoKSxuLFt0LHJdLDEwMCk7cmV0dXJuIGk9PT1udWxsP25ldyB0aDpuZXcgdGgoSHQoaSkpfV9jcmVhdGVMaW5lQ29sb3JGdW5jdGlvbih0LHIsbil7aWYodD09PW51bGwpcmV0dXJuKCk9PiJyZWQiO2xldCBpPU9uKCkuZG9tYWluKGhjdCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3Vwcyx0KSkucmFuZ2UoW3Isbl0pLmludGVycG9sYXRlKE1fKTtyZXR1cm4gbz0+aSh4MCh0aGlzLl9zY2hlbWEsbyx0KSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odCl7cmV0dXJuIHQ9dC5kYXRhKHRoaXMuX3Nlc3Npb25Hcm91cHMscj0+ci5uYW1lKSx0LmV4aXQoKS5yZW1vdmUoKSx0LmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2UodCl9X3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0LHIpe3QuY29udHJvbFBvaW50cz10aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhyKX1fY29tcHV0ZUNvbnRyb2xQb2ludHModCl7cmV0dXJuIHRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKChyLG4pPT5bcixuLnlTY2FsZSgpKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpXSl9X3BhdGhEQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLl9kM2xpbmUodGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHModCkpfV91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpe3RoaXMuX3Zpc2libGVGZ1BhdGhzU2VsPXRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKCI6bm90KC5pbnZpc2libGUtcGF0aCkiKX19O3ZhciBhVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuc3ZnPUh0KHQpO2xldCBuPXt0b3A6MzAscmlnaHQ6MTAsYm90dG9tOjEwLGxlZnQ6MTB9LGk9MTAwLG89MjAwLGE9cippK24ubGVmdCtuLnJpZ2h0LHM9bytuLnRvcCtuLmJvdHRvbTt0aGlzLnN2Zy5hdHRyKCJ2aWV3Qm94IixgMCAwICR7YX0gJHtzfWApLHRoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLGErInB4IiksdGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLHMrInB4IiksdGhpcy53aWR0aD1hLW4ubGVmdC1uLnJpZ2h0LHRoaXMuaGVpZ2h0PXMtbi50b3Atbi5ib3R0b20sdGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIseVAobi5sZWZ0LG4udG9wKSl9fSxzVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1uLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPWksdGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGlWKHQscix0aGlzKSx0aGlzLl9saW5lc0NvbGxlY3Rpb249bmV3IG9WKHQscix0aGlzLl9heGVzQ29sbGVjdGlvbiksdGhpcy5fc3ZnUHJvcHMuc3ZnLm9uKCJjbGljayIsKCk9PnRoaXMub25DbGljaygpKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLCgpPT57bGV0W28sYV09em8odGhpcy5fc3ZnUHJvcHMuc3ZnRy5ub2RlKCkpO3RoaXMub25Nb3VzZU1vdmVkKG8sYSl9KS5vbigibW91c2VsZWF2ZSIsKCk9PnRoaXMub25Nb3VzZUxlYXZlKCkpfW9uRHJhZ1N0YXJ0KHQpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdTdGFydCh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uaGlkZUJhY2tncm91bmRMaW5lcygpfW9uRHJhZyh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnKHQpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGpmLkZPUkVHUk9VTkQpfW9uRHJhZ0VuZCgpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdFbmQoNTAwKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5ELDUwMCksd2luZG93LnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5CQUNLR1JPVU5EKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2hvd0JhY2tncm91bmRMaW5lcygpfSw1MDApfW9uQnJ1c2hDaGFuZ2VkKHQscil7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZ2V0QXhpc0ZvckNvbEluZGV4KHQpLnNldEJydXNoU2VsZWN0aW9uKHIpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKHQscil7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwodGhpcy5fbGluZXNDb2xsZWN0aW9uLmNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKG51bGwpKX1vbkNsaWNrKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpPT09dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCk/dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKG5ldyB0aCk6dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodCxyKXt0aGlzLl9heGVzQ29sbGVjdGlvbi51cGRhdGVBeGVzKHQscik7bGV0IG49dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLGk9dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlZHJhdyhyLHQuY29sb3JCeUNvbHVtbkluZGV4IT09dm9pZCAwP3QuY29sdW1uc1t0LmNvbG9yQnlDb2x1bW5JbmRleF0uYWJzb2x1dGVJbmRleDpudWxsLHQubWluQ29sb3IsdC5tYXhDb2xvciksbi5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpfHx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKSxpLmVxdWFsc1RvKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfXNjaGVtYSgpe3JldHVybiB0aGlzLl9zY2hlbWF9fTt2YXIgZWg9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5yZWRyYXdDb3VudD0wfV9vcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe3ZhciBuO2lmKCF0aGlzLm9wdGlvbnMpcmV0dXJuO2xldHtjb25maWd1cmF0aW9uOnR9PShuPXRoaXMuX3ByZXZPcHRpb25zKSE9bnVsbD9uOnt9LHtjb25maWd1cmF0aW9uOnJ9PXRoaXMub3B0aW9ucztpZih0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9PT12b2lkIDB8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LnNjaGVtYSxyLnNjaGVtYSl8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LmNvbHVtbnNWaXNpYmlsaXR5LHIuY29sdW1uc1Zpc2liaWxpdHkpKXtIdCh0aGlzLiQuc3ZnKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtsZXQgaT1uZXcgYVYodGhpcy4kLnN2ZyxyLmNvbHVtbnNWaXNpYmlsaXR5LmZpbHRlcihCb29sZWFuKS5sZW5ndGgpO3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlcj1uZXcgc1YoaSxyLnNjaGVtYSxvPT50aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pLG89PnRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pKX10aGlzLl9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodGhpcy5vcHRpb25zLHRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3VwcyksdGhpcy5yZWRyYXdDb3VudCsrLHRoaXMuX3ByZXZPcHRpb25zPXRoaXMub3B0aW9uc31jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZCh0KXt0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9dH1zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD10fV9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCl7bGV0IHQ9Y3M7aWYodGhpcy5zZXNzaW9uR3JvdXBzPT09dm9pZCAwKXt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dm9pZCAwO3JldHVybn1sZXQgcj10aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5zY2hlbWE7dGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXRoaXMuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIobj0+e2ZvcihsZXQgaT0wO2k8dC5udW1Db2x1bW5zKHIpOysraSl7aWYoIXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLmNvbHVtbnNWaXNpYmlsaXR5W2ldKWNvbnRpbnVlO2xldCBvPXQuY29sdW1uVmFsdWVCeUluZGV4KHIsbixpKTtpZihvPT09dm9pZCAwfHxvPT09Ik5hTiIpcmV0dXJuITF9cmV0dXJuITB9KX19O2VoLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3c6IDAgMXB4IDAgI2ZmZiwKICAgICAgICAgIDFweCAwIDAgI2ZmZiwgMCAtMXB4IDAgI2ZmZiwgLTFweCAwIDAgI2ZmZjsKICAgICAgfQogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICMwMDAsCiAgICAgICAgICAxcHggMCAwICMwMDAsIDAgLTFweCAwICMwMDAsIC0xcHggMCAwICMwMDA7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5iYWNrZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZGRkOwogICAgICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICAgICAgfQoKICAgICAgLmZvcmVncm91bmQgcGF0aCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC43OwogICAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgfQoKICAgICAgLyogV2lsbCBiZSBzZXQgb24gZm9yZWdyb3VuZCBwYXRocyB0aGF0IGFyZSBub3QgImNvbnRhaW5lZCIgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgYXhlcyBicnVzaGVzLiBJZiBubyBicnVzaGVzIGFyZSBzZXQsIG5vIHBhdGggd2lsbCBoYXZlIHRoaXMgY2xhc3MuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5pbnZpc2libGUtcGF0aCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogU3R5bGUgZm9yIHRoZSBwYXRoIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIHBvaW50ZXIgKHR5cGljYWxseSB3aWxsIGJlY29tZQogICAgICB0aGUgc2VsZWN0ZWQgcGF0aCB3aGVuIHRoZSB1c2VyIGNsaWNrcykuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5wZWFrZWQtcGF0aCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHBhdGggY2xhc3MuIFdlIHVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZQogICAgICAgICBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIGNvbG9yIG9mIGEgcGF0aC4gKi8KICAgICAgLmZvcmVncm91bmQgLnNlbGVjdGVkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMyAhaW1wb3J0YW50OwogICAgICAgIHN0cm9rZTogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXhpcyB0ZXh0IHsKICAgICAgICB0ZXh0LXNoYWRvdzogdmFyKC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdyk7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxlaC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZWgucHJvdG90eXBlLCJyZWRyYXdDb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVoLnByb3RvdHlwZSwiX3ZhbGlkU2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsIl9pbnRlcmFjdGlvbk1hbmFnZXIiLHZvaWQgMCk7RShbQnQoIm9wdGlvbnMuKiIsInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZWgucHJvdG90eXBlLCJfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpO2VoPUUoW3l0KCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90IildLGVoKTt2YXIgQTA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcHRpb25zPW51bGx9X2NvbmZpZ3VyYXRpb25DaGFuZ2VkKCl7bGV0IHQ9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEscj10aGlzLmNvbmZpZ3VyYXRpb24uc2NoZW1hLG49KGEscyk9Pih7bmFtZTpGZChhKSxpbmRleDpzLGFic29sdXRlSW5kZXg6ekgocix0LHMpLHNjYWxlOnRoaXMuX2lzTnVtZXJpY0NvbHVtbihzKT8iTElORUFSIjoiTk9OX05VTUVSSUMifSksaT0oYSxzKT0+e2xldCBsPXMrdC5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJue3NjYWxlOiJMSU5FQVIiLG5hbWU6UXUoYSksaW5kZXg6bCxhYnNvbHV0ZUluZGV4OnpIKHIsdCxsKX19LG89e2NvbHVtbnM6dC5ocGFyYW1JbmZvcy5tYXAobikuY29uY2F0KHQubWV0cmljSW5mb3MubWFwKGkpKSxtaW5Db2xvcjoiIzAwMDBGRiIsbWF4Q29sb3I6IiNGRjAwMDAiLGNvbmZpZ3VyYXRpb246dGhpcy5jb25maWd1cmF0aW9ufTt0aGlzLnNldCgib3B0aW9ucyIsbyksY2koKSx0aGlzLnNldCgib3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgiLHRoaXMuX2RlZmF1bHRDb2xvckJ5Q29sdW1uSW5kZXgoKSl9X3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoKXt0aGlzLm9wdGlvbnMhPT1udWxsJiZ0aGlzLm9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKHQ9PntsZXQgcj0ib3B0aW9ucy5jb2x1bW5zLiIrdC5pbmRleDshdGhpcy5fYWxsb3dMb2dTY2FsZSh0KSYmdC5zY2FsZT09PSJMT0ciJiZ0aGlzLnNldChyKyIuc2NhbGUiLCJMSU5FQVIiKX0pfV9hbGxvd0xvZ1NjYWxlKHQpe2lmKCF0aGlzLl9pc051bWVyaWNDb2x1bW4odC5pbmRleCl8fCF0aGlzLnNlc3Npb25Hcm91cHMpcmV0dXJuITE7bGV0W3Isbl09X1AodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQuaW5kZXgpO3JldHVybiByPjB8fG48MH1faXNOdW1lcmljQ29sdW1uKHQpe3JldHVybiB0Pj10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGh8fHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zW3RdLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQifV9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPjApcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDtsZXQgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgocj0+ci50eXBlPT09IkRBVEFfVFlQRV9GTE9BVDY0Iik7aWYodCE9PS0xKXJldHVybiB0fX07QTAudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtcGFuZWwiPgogICAgICA8IS0tICdDb2xvciBieScgZHJvcCBkb3duIG1lbnUgLS0+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgbGFiZWw9IkNvbG9yIGJ5IgogICAgICAgIGlkPSJjb2xvckJ5RHJvcERvd25NZW51IgogICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgID4KICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2VsZWN0ZWQ9Int7b3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXh9fSIKICAgICAgICAgIGlkPSJjb2xvckJ5TGlzdEJveCIKICAgICAgICA+CiAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgIGl0ZW1zPSJbW29wdGlvbnMuY29sdW1uc11dIgogICAgICAgICAgICBhcz0iY29sdW1uIgogICAgICAgICAgICBpZD0iY29sb3JCeUNvbHVtblRlbXBsYXRlIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaXRlbSBkaXNhYmxlZD0iW1shX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICAgIFtbY29sdW1uLm5hbWVdXQogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgoKICAgICAgPCEtLSBDb2x1bW5zIHNjYWxlcyAtLT4KICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgIDwhLS0gU2NhbGUgb3B0aW9ucyBmb3IgZWFjaCBudW1lcmljIGZlYXR1cmUgLS0+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvcHRpb25zLmNvbHVtbnN9fSIgYXM9ImNvbHVtbiI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi10aXRsZSI+W1tjb2x1bW4ubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgICAgICAgICBjbGFzcz0ic2NhbGUtcmFkaW8tZ3JvdXAiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e2NvbHVtbi5zY2FsZX19IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkxJTkVBUiI+CiAgICAgICAgICAgICAgICAgICAgTGluZWFyCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8IS0tIFRoZSBpZCBoZXJlIGlzIHVzZWQgdG8gYWNjZXNzIHRoaXMgYnV0dG9uIGluIHVuaXQKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cy4tLT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGlkPSJsb2dTY2FsZUJ1dHRvbl9bW2NvbHVtbi5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgbmFtZT0iTE9HIgogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbWyFfYWxsb3dMb2dTY2FsZShjb2x1bW4sIHNlc3Npb25Hcm91cHMuKildXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIExvZ2FyaXRobWljCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IlFVQU5USUxFIj4KICAgICAgICAgICAgICAgICAgICBRdWFudGlsZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5jb250cm9sLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuY29sdW1uIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggZGFya2dyYXk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5jb2x1bW4tdGl0bGUgewogICAgICAgIC8qIEZpdCBldmVyeSB0aXRsZSBpbiBvbmUgbGluZSBzbyB0aGUgcmFkaW8gYm94ZXMgYWxpZ24gdmVydGljYWxseS4gKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIC5zY2FsZS1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQTAucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxBMC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEEwLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtCdCgiY29uZmlndXJhdGlvbi4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxBMC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQTAucHJvdG90eXBlLCJfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcyIsbnVsbCk7QTA9RShbeXQoInRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIildLEEwKTt2YXIgaDE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07aDEudGVtcGxhdGU9UWAKICAgIDwhLS0gQ29udHJvbHMgYmVoYXZpb3Igb2YgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdAogICAgICAgICBvdXRwdXRzIHNldCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4KICAgICAgLS0+CiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBUaGUgc2NhbGUgYW5kIGNvbG9yIGNvbnRyb2xzLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdCAtLT4KICAgICAgPHRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QKICAgICAgICBpZD0icGxvdCIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBzZWxlY3RlZC1zZXNzaW9uLWdyb3VwPSJ7e19zZWxlY3RlZEdyb3VwfX0iCiAgICAgICAgY2xvc2VzdC1zZXNzaW9uLWdyb3VwPSJ7e19jbG9zZXN0R3JvdXB9fSIKICAgICAgICBvcHRpb25zPSJbW19vcHRpb25zXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIGlkPSJ2YWx1ZXMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscwogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgoKICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGgxLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxoMS5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7aDE9RShbeXQoInRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciKV0saDEpO3ZhciB5Mz1FZShPZSgpLDEpO3ZhciAkbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3N2Zz1udWxsLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcix0aGlzLl9zdmc9SHQodGhpcy4kLnN2ZyksdGhpcy5fcmVkcmF3KCl9X3Nlc3Npb25Hcm91cHNDaGFuZ2VkKCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCE9PW51bGwmJih0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPWZjdCh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCksdGhpcy5fcmVkcmF3KCl9X3Zpc2libGVTY2hlbWFDaGFuZ2VkKCl7dGhpcy5fYnJ1c2hlZENlbGxJbmRleD1udWxsLHRoaXMuX2JydXNoU2VsZWN0aW9uPW51bGwsdGhpcy5fcmVkcmF3KCl9X3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgpPT57bGV0IHQ9Y3Mscj0xMjAwLG49LjQqcixpPTE1MCxvPS43NSppO3RoaXMud2lkdGg9TWF0aC5tYXgoaSp0Lm51bVZpc2libGVDb2x1bW5zKHRoaXMudmlzaWJsZVNjaGVtYSksciksdGhpcy5oZWlnaHQ9TWF0aC5tYXgobyp0Lm51bVZpc2libGVNZXRyaWNzKHRoaXMudmlzaWJsZVNjaGVtYSksbiksdGhpcy5fY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCIsdGhpcy5fc3ZnLmF0dHIoIndpZHRoIix0aGlzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHRoaXMuaGVpZ2h0KSx0aGlzLl9zdmcuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksdGhpcy5fZHJhdygpfSwxMDApfV9kcmF3KCl7bGV0IHQ9Y3Mscj10aGlzO2lmKCF0aGlzLnNlc3Npb25Hcm91cHN8fHRoaXMuc2Vzc2lvbkdyb3Vwcy5sZW5ndGg9PTB8fCF0aGlzLnZpc2libGVTY2hlbWF8fHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg9PTApcmV0dXJuO2xldCBuPUlyKHQubnVtVmlzaWJsZUNvbHVtbnMoci52aXNpYmxlU2NoZW1hKSksaT1Jcih0Lm51bVZpc2libGVNZXRyaWNzKHIudmlzaWJsZVNjaGVtYSkpLG89ODAsYT01MCxzPTUsbD1RbSgpLmRvbWFpbihuKS5yYW5nZShbbytzLHRoaXMud2lkdGgtMS1zXSkucGFkZGluZ0lubmVyKC4xKSxjPVFtKCkuZG9tYWluKGkpLnJhbmdlKFt0aGlzLmhlaWdodC0xLXMtYSxzXSkucGFkZGluZ0lubmVyKC4xKSx1PWwuYmFuZHdpZHRoKCksaD1jLmJhbmR3aWR0aCgpLGY9bi5tYXAoY3Q9PnIuX2NlbGxTY2FsZShjdCxbMCx1LTFdKSkscD1pLm1hcChjdD0+ci5fY2VsbFNjYWxlKGN0K3QubnVtVmlzaWJsZUhQYXJhbXMoci52aXNpYmxlU2NoZW1hKSxbaC0xLDBdKSksZD10aGlzLl9zdmcuc2VsZWN0QWxsKCIueC1heGlzIikuZGF0YShuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKGwoY3QpLDApKTtmdW5jdGlvbiBnKGN0KXtyZXR1cm4ieC1heGlzLWNsaXAtcGF0aC0iK2N0fWZ1bmN0aW9uIF8oY3Qpe3JldHVybiJ4LWxhYmVsLWNsaXAtcGF0aC0iK2N0fWQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixnKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtcykuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0LWEvMiksZC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLF8pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHIuaGVpZ2h0LWEvMikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsYS8yKSxkLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrZyhjdCkrIikiKS5lYWNoKGZ1bmN0aW9uKGN0KXtIdCh0aGlzKS5jYWxsKFMsWjkoZltjdF0pLnRpY2tTaXplKHIuaGVpZ2h0LWEpLHUsNDAsci5vcHRpb25zLmNvbHVtbnNbY3RdLnNjYWxlKX0pLGQuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzLWxhYmVsIiwhMCkuYXR0cigiY2xpcC1wYXRoIixjdD0+InVybCgjIitfKGN0KSsiKSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsdS8yKS5hdHRyKCJ5IixyLmhlaWdodC0xLWEvNCkudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKS5hcHBlbmQoInRpdGxlIikudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKTtsZXQgeT10aGlzLl9zdmcuc2VsZWN0QWxsKCIueS1heGlzIikuZGF0YShpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKHIud2lkdGgtMSxjKGN0KSkpO2Z1bmN0aW9uIHgoY3Qpe3JldHVybiJ5LWF4aXMtY2xpcC1wYXRoLSIrY3R9ZnVuY3Rpb24gYihjdCl7cmV0dXJuInktbGFiZWwtY2xpcC1wYXRoLSIrY3R9eS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHgpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oci53aWR0aC1vLzItMSkpLmF0dHIoInkiLC1zKS5hdHRyKCJ3aWR0aCIsci53aWR0aC1vLzIpLmF0dHIoImhlaWdodCIsaCsyKnMpLHkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixiKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHIud2lkdGgtMSkpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixvLzIpLmF0dHIoImhlaWdodCIsaCkseS5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK3goY3QpKyIpIikuZWFjaChmdW5jdGlvbihjdCl7SHQodGhpcykuY2FsbChTLGxiKHBbY3RdKS50aWNrU2l6ZShyLndpZHRoLW8pLGgsMjAsci5vcHRpb25zLmNvbHVtbnNbY3QrdC5udW1WaXNpYmxlSFBhcmFtcyhyLnZpc2libGVTY2hlbWEpXS5zY2FsZSl9KSx5LmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrYihjdCkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLC0oci53aWR0aC1vLzQtMSkpLmF0dHIoInkiLGgvMikuYXR0cigidHJhbnNmb3JtIix0LnJvdGF0ZVN0cig5MCwtKHIud2lkdGgtby80LTEpLGgvMikpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSk7ZnVuY3Rpb24gUyhjdCxYLGV0LGR0LHEpe2xldCBwdD1NYXRoLmZsb29yKGV0L2R0KSxodD1YLnNjYWxlKCk7aWYocT09PSJRVUFOVElMRSIpe2xldCB3dD1odC5xdWFudGlsZXMoKSxrdD1NYXRoLmNlaWwod3QubGVuZ3RoL3B0KTt3dD1JcigwLHd0Lmxlbmd0aCxrdCkubWFwKGllPT53dFtpZV0pLFgudGlja1ZhbHVlcyh3dCkudGlja0Zvcm1hdCh4bigiLS4yZyIpKX0ocT09PSJMSU5FQVIifHxxPT09IkxPRyIpJiZYLnRpY2tzKHB0KSxjdC5jYWxsKFgpLGN0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLnJlbW92ZSgpLGN0LnNlbGVjdEFsbCgiLnRpY2sgbGluZSIpLmF0dHIoInN0cm9rZSIsIiNkZGQiKX1sZXQgQz10aGlzLl9zdmcuc2VsZWN0QWxsKCIuY2VsbCIpLmRhdGEocTkobixpKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjZWxsIiwhMCkuYXR0cigidHJhbnNmb3JtIiwoW2N0LFhdKT0+dC50cmFuc2xhdGVTdHIobChjdCksYyhYKSkpLFA9Qy5hcHBlbmQoImciKS5jbGFzc2VkKCJmcmFtZSIsITApLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC1zKS5hdHRyKCJ5IiwtcykuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLGgrMipzKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksaz1udWxsO3Iub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXghPT12b2lkIDAmJihrPU9uKCkuZG9tYWluKHRoaXMuX2NvbEV4dGVudCh0aGlzLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSkucmFuZ2UoW3RoaXMub3B0aW9ucy5taW5Db2xvcix0aGlzLm9wdGlvbnMubWF4Q29sb3JdKS5pbnRlcnBvbGF0ZShNXykpO2xldCBPPXIub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXg9PT12b2lkIDA/KCk9PiJyZWQiOih7c2Vzc2lvbkdyb3VwOmN0fSk9PmsodGhpcy5fY29sVmFsdWUoY3Qsci5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpO2Z1bmN0aW9uIEQoY3QsWCl7cmV0dXJuIGZbWF0oci5fY29sVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEIoY3QsWCl7cmV0dXJuIHBbWF0oci5fbWV0cmljVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEkoY3QsWCl7bGV0IGV0PWN0LnNlbGVjdEFsbCgiLmRhdGEtbWFya2VyIikuZGF0YSgoW3B0LGh0XSk9PnIuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIod3Q9PnIuX2NvbFZhbHVlKHd0LHB0KSE9PXZvaWQgMCYmci5fbWV0cmljVmFsdWUod3QsaHQpIT09dm9pZCAwKS5tYXAod3Q9Pih7Y29sOnB0LG1ldHJpYzpodCxzZXNzaW9uR3JvdXA6d3QseDpEKHd0LHB0KSx5OkIod3QsaHQpLHNlc3Npb25Hcm91cE1hcmtlcnM6bnVsbH0pKSkuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoImRhdGEtbWFya2VyIiwhMCkuYXR0cigiY3giLCh7eDpwdH0pPT5wdCkuYXR0cigiY3kiLCh7eTpwdH0pPT5wdCkuYXR0cigiciIsMikuYXR0cigiZmlsbCIsWCksZHQ9bmV3IE1hcDtyLnNlc3Npb25Hcm91cHMuZm9yRWFjaChwdD0+e2R0LnNldChwdCxbXSl9KSxldC5lYWNoKGZ1bmN0aW9uKHB0KXt2YXIgaHQ7KGh0PWR0LmdldChwdC5zZXNzaW9uR3JvdXApKT09bnVsbHx8aHQucHVzaCh0aGlzKX0pLGV0LmVhY2gocHQ9PntsZXQgaHQ9ZHQuZ2V0KHB0LnNlc3Npb25Hcm91cCk7cHQuc2Vzc2lvbkdyb3VwTWFya2Vycz1uZXcgU2V0KGh0KX0pO2xldCBxPW4ubWFwKHB0PT5pLm1hcChodD0+ZXQuZmlsdGVyKHd0PT53dC5jb2w9PXB0JiZ3dC5tZXRyaWM9PWh0KSkpO3JldHVybltldCxxLGR0XX1sZXRbTCxSLEZdPUkoQy5hcHBlbmQoImciKSxPKTtmdW5jdGlvbiB6KGN0LFgpe2xldCBldD1bXTtyZXR1cm4gUltjdF1bWF0uZWFjaChmdW5jdGlvbigpe2V0LnB1c2godGhpcyl9KSx6aCgpLngoZHQ9Pkh0KGR0KS5kYXR1bSgpLngpLnkoZHQ9Pkh0KGR0KS5kYXR1bSgpLnkpLmFkZEFsbChldCl9bGV0IFU9bi5tYXAoY3Q9PmkubWFwKFg9PnooY3QsWCkpKSxXPW51bGw7YnQoKSYmKFc9Qy5maWx0ZXIoY3Q9PnkzLmlzRXF1YWwoY3Qsci5fYnJ1c2hlZENlbGxJbmRleCkpLGNvbnNvbGUuYXNzZXJ0KFcuc2l6ZSgpPT0xLFcpKTtsZXQgWj1uZXcgU2V0KEwubm9kZXMoKSk7cnQoKTtmdW5jdGlvbiBydCgpe2xldCBjdD1uZXcgU2V0KEwubm9kZXMoKSk7TXQoKXx8KGN0PW90KHIuX2JydXNoZWRDZWxsSW5kZXgsci5fYnJ1c2hTZWxlY3Rpb24pKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KGN0LFg9PiFaLmhhcyhYKSkpKS5hdHRyKCJmaWxsIixPKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KFosWD0+IWN0LmhhcyhYKSkpKS5hdHRyKCJmaWxsIiwiI2RkZCIpLFo9Y3R9ZnVuY3Rpb24gb3QoY3QsWCl7Y29uc29sZS5hc3NlcnQoY3QhPT1udWxsKSxjb25zb2xlLmFzc2VydChYIT09bnVsbCk7bGV0W2V0LGR0XT1jdCxxPW5ldyBTZXQ7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdChVW2V0XVtkdF0sWFswXVswXSxYWzBdWzFdLFhbMV1bMF0sWFsxXVsxXSxwdD0+e0h0KHB0KS5kYXR1bSgpLnNlc3Npb25Hcm91cE1hcmtlcnMuZm9yRWFjaCh3dD0+e3EuYWRkKHd0KX0pfSkscX1sZXQgc3Q9R0woKS5leHRlbnQoW1stcysxLC1zKzFdLFt1LTErcy0xLGgtMStzLTFdXSkub24oInN0YXJ0IixmdW5jdGlvbigpe2J0KCkmJlcubm9kZSgpIT10aGlzJiZzdC5tb3ZlKFcsbnVsbCksU3QodGhpcyl9KS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7U3QodGhpcyl9KS5vbigiZW5kIixmdW5jdGlvbigpe1N0KHRoaXMpfSk7ZnVuY3Rpb24gU3QoY3Qpe2xldCBYPVVMKGN0KTshYnQoKSYmWD09PW51bGx8fGJ0KCkmJmN0PT09Vy5ub2RlKCkmJnkzLmlzRXF1YWwoWCxyLl9icnVzaFNlbGVjdGlvbil8fChyLl9icnVzaFNlbGVjdGlvbj1YLFghPT1udWxsPyhXPUh0KGN0KSxyLl9icnVzaGVkQ2VsbEluZGV4PVcuZGF0dW0oKSk6KFc9bnVsbCxyLl9icnVzaGVkQ2VsbEluZGV4PW51bGwpLHJ0KCkpfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuIHIuX2JydXNoZWRDZWxsSW5kZXghPT1udWxsJiZyLl9icnVzaFNlbGVjdGlvbiE9PW51bGx9ZnVuY3Rpb24gTXQoKXtyZXR1cm4hYnQoKXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMF09PT1yLl9icnVzaFNlbGVjdGlvblsxXVswXXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMV09PT1yLl9icnVzaFNlbGVjdGlvblsxXVsxXX1DLmNhbGwoc3QpLGJ0KCkmJnN0Lm1vdmUoVyxyLl9icnVzaFNlbGVjdGlvbik7bGV0IGx0PW51bGwsS3Q9bnVsbDt0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwIT09bnVsbCYmKEt0PUVwKEYuZ2V0KHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXApKS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCEwKSksQy5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IGN0PWx0PT09S3Q/bnVsbDpsdDtpZihjdD09PUt0KXJldHVybjtLdCE9PW51bGwmJkt0LmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITEpLEt0PWN0LEt0IT09bnVsbCYmS3QuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCk7bGV0IFg9S3Q9PT1udWxsP251bGw6S3QuZGF0dW0oKS5zZXNzaW9uR3JvdXA7ci5zZWxlY3RlZFNlc3Npb25Hcm91cD1YfSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIixmdW5jdGlvbihbY3QsWF0pe2xldFtldCxkdF09em8odGhpcykscT1fdChjdCxYLGV0LGR0LDIwKTtsdCE9PXEmJihsdCE9PW51bGwmJmx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksbHQ9cSxsdCE9PW51bGw/KGx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMCksci5jbG9zZXN0U2Vzc2lvbkdyb3VwPWx0LmRhdHVtKCkuc2Vzc2lvbkdyb3VwKTpyLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCl9KS5vbigibW91c2VsZWF2ZSIsZnVuY3Rpb24oW2N0LFhdKXtsdCE9PW51bGwmJihsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGx0PW51bGwsci5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSk7ZnVuY3Rpb24gX3QoY3QsWCxldCxkdCxxKXtsZXQgcHQ9MS8wLGh0PW51bGw7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luRGlzayhVW2N0XVtYXSxldCxkdCxxLCh3dCxrdCk9PntpZihaLmhhcyh3dCkmJmt0PHB0KXtsZXQgaWU9SHQod3QpLmRhdHVtKCk7cHQ9a3QsaHQ9aWUuc2Vzc2lvbkdyb3VwfX0pLGh0PT09bnVsbD9udWxsOkVwKEYuZ2V0KGh0KSl9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiKiIpLmNsYXNzZWQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IiwhMCl9X2NlbGxTY2FsZSh0LHIpe2xldCBuPXRoaXMuX2NvbEV4dGVudCh0KSxpPU9uKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IkxJTkVBUiIpcmV0dXJuIGk7aWYodGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGU9PT0iTE9HIilyZXR1cm4gblswXTw9MCYmblsxXT49MD9pOmNjKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IlFVQU5USUxFIil7bGV0IG89KHJbMV0tclswXSkvMTksYT1JcigyMCkubWFwKHM9PnJbMF0rbypzKTtyZXR1cm4gZWcoKS5kb21haW4oeTMudW5pcSh0aGlzLnNlc3Npb25Hcm91cHMubWFwKHM9PnRoaXMuX2NvbFZhbHVlKHMsdCkpKSkucmFuZ2UoYSl9ZWxzZXtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKHkzLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChvPT50aGlzLl9jb2xWYWx1ZShvLHQpKS5zb3J0KCkpKS5yYW5nZShyKS5wYWRkaW5nKC4xKTt0aHJvdyJVbmtub3duIHNjYWxlIGZvciBjb2x1bW46ICIrdCsiLiBvcHRpb25zOiAiK3RoaXMub3B0aW9uc319X2NvbFZhbHVlKHQscil7cmV0dXJuIEJIKHRoaXMudmlzaWJsZVNjaGVtYSx0LHIpfV9tZXRyaWNWYWx1ZSh0LHIpe3JldHVybiBGSCh0aGlzLnZpc2libGVTY2hlbWEsdCxyKX1fY29sRXh0ZW50KHQpe3JldHVybiBfUCh0aGlzLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQpfX07JG8udGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxzdmcgaWQ9InN2ZyI+PC9zdmc+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAuZnJhbWUgcmVjdCB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjbG9zZXN0IGRhdGEgcG9pbnQgbWFya2VyIHRvIHRoZSBtb3VzZSBwb2ludGVyLiBXZSB1c2UgIWltcG9ydGFudAogICAgICAgICB0byBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4KICAgICAgKi8KICAgICAgLmNsb3Nlc3QtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YSBwb2ludCBtYXJrZXIuIFdlIHVzZSAhaW1wb3J0YW50IHRvCiAgICAgICAgIG92ZXJyaWRlIHRoZSBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIHN0eWxlIG9mIGEgbWFya2VyLiAqLwogICAgICAuc2VsZWN0ZWQtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkby5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsSFRNTEVsZW1lbnQpXSwkby5wcm90b3R5cGUsIl9jb250YWluZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfc3ZnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLCRvLnByb3RvdHlwZSwid2lkdGgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sJG8ucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfYnJ1c2hlZENlbGxJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsIl9icnVzaFNlbGVjdGlvbiIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3Vwcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSwkby5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInZpc2libGVTY2hlbWEuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJG8ucHJvdG90eXBlLCJfdmlzaWJsZVNjaGVtYUNoYW5nZWQiLG51bGwpO0UoW0J0KCJvcHRpb25zLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRvLnByb3RvdHlwZSwiX3JlZHJhdyIsbnVsbCk7JG89RShbeXQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IildLCRvKTt2YXIgZjE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07ZjEudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHRoZSBzY2F0dGVyIHBsb3QgbWF0cml4CiAgICAgICAgICAgICBvdXRwdXRzIHRoZSBjb25maWd1cmVkIG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgc2NhdHRlciBwbG90IG1hdHJpeCAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90CiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0icGxvdCIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDwhLS0gU2hvd3Mgc2Vzc2lvbiBncm91cCBkZXRhaWxzIGZvciB0aGUgY2xpY2tlZCBtYXJrZXIuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZjEucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGYxLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtmMT1FKFt5dCgidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciKV0sZjEpO3ZhciBYZj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zZWxlY3RlZFRhYj0wLHRoaXMuX3RhYmxlVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlRhYmxlIil9LHRoaXMuX3BhcmFsbGVsQ29vcmRzVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlBhcmFsbGVsIENvb3JkcyIpfSx0aGlzLl9zY2F0dGVyUGxvdE1hdHJpeFRhYkNsaWNrZWQ9KCk9Pnt0aGlzLmxvZ0FjdGlvbigiVGFiIENsaWNrZWQiLCJTY2F0dGVyIFBsb3QgTWF0cml4Iil9LHRoaXMubG9nQWN0aW9uPSh0LHIpPT57KHdpbmRvdy5nYXx8ZnVuY3Rpb24oKXt9KSgic2VuZCIse2hpdFR5cGU6ImV2ZW50IixldmVudENhdGVnb3J5OiJIUGFyYW1zIixldmVudEFjdGlvbjp0LGV2ZW50TGFiZWw6cn0pfSx0aGlzLmxvZ0FjdGlvbigiUGx1Z2luIExvYWQiKX19O1hmLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIDwhLS0gdmlldy1pZCBjYW4gYmUgdXNlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBsb2NhdGUgYSB0YWIuCiAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGltcGxlbWVudGluZyB0aGUgdmlldwogICAgICAgICAgICAgICB3aXRob3V0IHRoZSAndGYtaHBhcmFtcy0nIHByZWZpeC4gLS0+CiAgICAgICAgICA8cGFwZXItdGFiIG9uLWNsaWNrPSJfdGFibGVUYWJDbGlja2VkIiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4KICAgICAgICAgICAgVEFCTEUgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfcGFyYWxsZWxDb29yZHNUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJwYXJhbGxlbC1jb29yZHMtdmlldyIKICAgICAgICAgID4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfc2NhdHRlclBsb3RNYXRyaXhUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJzY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciCiAgICAgICAgICA+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWYkPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiCiAgICAgICAgICAgICAgICByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpZD0iYnVnLXJlcG9ydCIKICAgICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIEJ1ZyBSZXBvcnQgLyBGZWF0dXJlIFJlcXVlc3QKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlbHBVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbaGVscFVybF1dIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpY29uPSJoZWxwLW91dGxpbmUiCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJWaWV3IGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvcGFwZXItdGFicz4KICAgICAgPC9wYXBlci10b29sYmFyPgogICAgICA8aXJvbi1wYWdlcyBzZWxlY3RlZD0iW1tfc2VsZWN0ZWRUYWJdXSIgY2xhc3M9ImZpdCB0YWItdmlldyI+CiAgICAgICAgPGRpdiBpZD0iMCIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy10YWJsZS12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgICAgZW5hYmxlLXNob3ctbWV0cmljcwogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMiIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLXBhZ2VzPgogICAgPC9wYXBlci1oZWFkZXItcGFuZWw+CgogICAgPHN0eWxlPgogICAgICAudGFiLXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAudGFiLWJhciB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKAogICAgICAgICAgLS10Yi10b29sYmFyLWJhY2tncm91bmQtY29sb3IsCiAgICAgICAgICB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKQogICAgICAgICk7CiAgICAgIH0KICAgICAgLnRhYiB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGYtaHBhcmFtcy10YWJsZS12aWV3IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsgLyogRW5zdXJlIHRoYXQgaWNvbnMgc3RheSBhbGlnbmVkICovCiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgICAjYnVnLXJlcG9ydCB7CiAgICAgICAgYm9yZGVyOiBzb2xpZCBibGFjazsKICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkczsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayBhIHsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWGYucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFhmLnByb3RvdHlwZSwiaGVscFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImJ1Z1JlcG9ydFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFhmLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWGYucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFhmLnByb3RvdHlwZSwiX3NlbGVjdGVkVGFiIix2b2lkIDApO1hmPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxYZik7dmFyIHJoPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlbG9hZCgpe3RoaXMuJFsicXVlcnktcGFuZSJdLnJlbG9hZCgpfX07cmgudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dD4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgPHRmLWhwYXJhbXMtcXVlcnktcGFuZQogICAgICAgICAgaWQ9InF1ZXJ5LXBhbmUiCiAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgY29uZmlndXJhdGlvbj0ie3tfY29uZmlndXJhdGlvbn19IgogICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Int7X3Nlc3Npb25Hcm91cHN9fSIKICAgICAgICAgIGRhdGEtbG9hZGVkLXdpdGgtbm9uLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgICBkYXRhLWxvYWRlZC13aXRoLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1xdWVyeS1wYW5lPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGhwYXJhbXMgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhwYXJhbXMgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgRXZlbnQgZmlsZXMgYXJlIHN0aWxsIGJlaW5nIGxvYWRlZCAodHJ5IHJlbG9hZGluZyB0aGlzIHBhZ2UpLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZQogICAgICAgICAgICBpZD0ic2Vzc2lvbnMtcGFuZSIKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGhlbHAtdXJsPSJbW2hlbHBVcmxdXSIKICAgICAgICAgICAgYnVnLXJlcG9ydC11cmw9IltbYnVnUmVwb3J0VXJsXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW19jb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW19zZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIGhwYXJhbXMtc3BsaXQtbGF5b3V0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtaW4td2lkdGg6IDEwJTsKICAgICAgfQoKICAgICAgLmNlbnRlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsdTMpXSxyaC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJidWdSZXBvcnRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scmgucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scmgucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHJoLnByb3RvdHlwZSwiX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scmgucHJvdG90eXBlLCJfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCk7cmg9RShbeXQoInRmLWhwYXJhbXMtbWFpbiIpXSxyaCk7dmFyIHBocj1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgidGVuc29yYm9hcmRDb2xhYiIpPT09InRydWUiLGxWPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9iYWNrZW5kPW5ldyB1MyhuZXcgQWUscGhyKX1yZWxvYWQoKXt0aGlzLiRbImhwYXJhbXMtbWFpbiJdLnJlbG9hZCgpfX07bFYudGVtcGxhdGU9UWAKICAgIDwhLS0gVGVuc29yQm9hcmQgZG9lcyBub3Qgc3BlY2lmeSBhbiBleHBlcmltZW50TmFtZS4gQ3VycmVudGx5IGl0IG9ubHkKICAgICAgICAgc3VwcG9ydHMgb25lIGV4cGVyaW1lbnQgcGVyIGludm9jYXRpb24uIC0tPgogICAgPHRmLWhwYXJhbXMtbWFpbgogICAgICBpZD0iaHBhcmFtcy1tYWluIgogICAgICBiYWNrZW5kPSJbW19iYWNrZW5kXV0iCiAgICAgIGV4cGVyaW1lbnQtbmFtZT0iIgogICAgPgogICAgPC90Zi1ocGFyYW1zLW1haW4+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsVi5wcm90b3R5cGUsIl9iYWNrZW5kIix2b2lkIDApO2xWPUUoW3l0KCJ0Zi1ocGFyYW1zLWRhc2hib2FyZCIpXSxsVik7dmFyIHAxPUVlKE9lKCksMSk7dmFyIF9uPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdHVhbFNpemU9ITEsdGhpcy5icmlnaHRuZXNzQWRqdXN0bWVudD0uNSx0aGlzLmNvbnRyYXN0UGVyY2VudGFnZT0wLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9pbWFnZUNhbmNlbGxlcj1uZXcgYW4sdGhpcy5fc3RlcHM9W10sdGhpcy5faXNJbWFnZUxvYWRpbmc9ITF9Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1nZXQgX2hhc0F0TGVhc3RPbmVTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4wfWdldCBfaGFzTXVsdGlwbGVTdGVwcygpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MX1nZXQgX2N1cnJlbnRTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHMscj10aGlzLl9zdGVwSW5kZXg7cmV0dXJuIHRbcl18fG51bGx9Z2V0IF9zdGVwVmFsdWUoKXt2YXIgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3MyKHQud2FsbF90aW1lKToiIn1nZXQgX21heFN0ZXBJbmRleCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiB0Lmxlbmd0aC0xfWdldCBfc2FtcGxlVGV4dCgpe3ZhciB0PXRoaXMuc2FtcGxlO3JldHVybmAke3QrMX1gfWdldCBfaGFzTXVsdGlwbGVTYW1wbGVzKCl7dmFyIHQ9dGhpcy5vZlNhbXBsZXM7cmV0dXJuIHQ+MX1fZ2V0QXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuYWN0dWFsU2l6ZT8idHJ1ZSI6ImZhbHNlIn1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxyPV9lKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiLHQpLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHQucXVlcnkpO3IuYXBwZW5kKCJ0cyIsdC53YWxsX3RpbWUpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImltYWdlcyIsIi9pbmRpdmlkdWFsSW1hZ2UiLHIpO3JldHVybnt3YWxsX3RpbWU6bmV3IERhdGUodC53YWxsX3RpbWUqMWUzKSxzdGVwOnQuc3RlcCx1cmw6bn19X3VwZGF0ZUltYWdlVXJsKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXAscj10aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50LG49dGhpcy5jb250cmFzdFBlcmNlbnRhZ2U7aWYoIXQpcmV0dXJuO2xldCBpPW5ldyBJbWFnZTt0aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxBbGwoKSxpLm9ubG9hZD1pLm9uZXJyb3I9dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsbGFibGUobz0+e2lmKG8uY2FuY2VsbGVkKXJldHVybjtsZXQgYT10aGlzLiQkKCIjbWFpbi1pbWFnZS1jb250YWluZXIiKTthJiYoYS50ZXh0Q29udGVudD0iIix6dChhKS5hcHBlbmRDaGlsZChpKSksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpfSkuYmluZCh0aGlzKSxpLnN0eWxlLmZpbHRlcj1gY29udHJhc3QoJHtufSUpIGAsaS5zdHlsZS5maWx0ZXIrPWBicmlnaHRuZXNzKCR7cn0pYCx0aGlzLnNldCgiX2lzSW1hZ2VMb2FkaW5nIiwhMCksaS5zcmM9dC51cmx9X2hhbmRsZVRhcCh0KXt0aGlzLnNldCgiYWN0dWFsU2l6ZSIsIXRoaXMuYWN0dWFsU2l6ZSl9X3RvTG9jYWxlU3RyaW5nKHQpe3JldHVybiB0LnRvTG9jYWxlU3RyaW5nKCl9fTtfbi50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgZGF0ZXRpbWUiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc0ltYWdlTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8IS0tIFNlbWFudGljYWxseSBhIGJ1dHRvbiBidXQgPGltZz4gaW5zaWRlIGEgPGJ1dHRvbj4gZGlzYWxsb3dzIHVzZXIgdG8gZG8KICAgIGFuIGludGVyZXN0aW5nIG9wZXJhdGlvbiBsaWtlICJDb3B5IEltYWdlIiBpbiBub24tQ2hyb21pdW0gYnJvd3NlcnMuIC0tPgogICAgPGEKICAgICAgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIgogICAgICByb2xlPSJidXR0b24iCiAgICAgIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIKICAgICAgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIgogICAgICBvbi10YXA9Il9oYW5kbGVUYXAiCiAgICA+PC9hPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAvKiogTWFrZSBidXR0b24gYSBkaXYuICovCiAgICAgIGJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IEdldCByaWQgb2YgZG90dGVkIGxpbmUgaW5zaWRlIGJ1dHRvbi4gKi8KICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IFNpbXVsYXRlIENocm9tZSdzIG91dGVyIGdsb3cgb24gYnV0dG9uIHdoZW4gZm9jdXNlZC4gKi8KICAgICAgYnV0dG9uOi1tb3otZm9jdXNyaW5nIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMXB4IDJweCBIaWdobGlnaHQ7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDAgMTVweCA0MHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLyoqIFdoZW4gYWN0dWFsIHNpemUgc2hvd24gaXMgb24sIHVzZSB0aGUgYWN0dWFsIGltYWdlIHdpZHRoLiAqLwogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1zcGlubmVyLWxpdGUgewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKgogICAgICAgICAqIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUKICAgICAgICAgKiBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zCiAgICAgICAgICogd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwgYW5kCiAgICAgICAgICogYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZgogICAgICAgICAqIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgICAgICAgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMjRweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJvZlNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxfbi5wcm90b3R5cGUsImFjdHVhbFNpemUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxfbi5wcm90b3R5cGUsImNvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLF9uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfbWV0YWRhdGFDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfaW1hZ2VDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxfbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sX24ucHJvdG90eXBlLCJfaXNJbWFnZUxvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU3RlcHMiLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW1J0KCJfc3RlcHMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9tYXhTdGVwSW5kZXgiLG51bGwpO0UoW1J0KCJzYW1wbGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zYW1wbGVUZXh0IixudWxsKTtFKFtSdCgib2ZTYW1wbGVzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU2FtcGxlcyIsbnVsbCk7RShbQnQoInJ1biIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpO0UoW0J0KCJfY3VycmVudFN0ZXAiLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsImNvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJfdXBkYXRlSW1hZ2VVcmwiLG51bGwpO19uPUUoW3l0KCJ0Zi1pbWFnZS1sb2FkZXIiKV0sX24pO3ZhciBJbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudD0xLHRoaXMuX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2U9MTAwLHRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PTEsdGhpcy5fY29udHJhc3RQZXJjZW50YWdlPTEwMCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWV9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkSW1hZ2VzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihwMS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49cDEubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSW1hZ2VzKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X3Jlc2V0QnJpZ2h0bmVzcygpe3RoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1fcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfYnJpZ2h0bmVzc0lzRGVmYXVsdCgpe3ZhciB0PXRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50O3JldHVybiB0PT09dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fWdldCBfY29udHJhc3RJc0RlZmF1bHQoKXt2YXIgdD10aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U7cmV0dXJuIHQ9PT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtsZXQgbz1wMS5tYXBWYWx1ZXModCxjPT5PYmplY3Qua2V5cyhjKSksYT1RbChvLHIsbik7ZnVuY3Rpb24gcyhjKXtsZXQgdT10W2MucnVuXVtjLnRhZ10uc2FtcGxlcztyZXR1cm4gcDEucmFuZ2UodSkubWFwKGg9Pk9iamVjdC5hc3NpZ24oe30sYyx7c2FtcGxlOmgsb2ZTYW1wbGVzOnV9KSl9cmV0dXJuIGEubWFwKGM9Pk9iamVjdC5hc3NpZ24oe30sYyx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGMuaXRlbXMubWFwKHMpKX0pKX1fdGFnTWV0YWRhdGEodCxyLG4pe3JldHVybiB0W3JdW25dfX07SW8udGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZTwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5CcmlnaHRuZXNzIGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iMiIKICAgICAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgICAgICBwaW4KICAgICAgICAgICAgICAgIHN0ZXA9IjAuMDEiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRCcmlnaHRuZXNzIgogICAgICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2JyaWdodG5lc3NJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSI1MDAiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2NvbnRyYXN0UGVyY2VudGFnZX19IgogICAgICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRDb250cmFzdCIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19jb250cmFzdElzRGVmYXVsdF1dIgogICAgICAgICAgICAgICAgPlJlc2V0PC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBpbWFnZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWltYWdlLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIG9mLXNhbXBsZXM9IltbaXRlbS5vZlNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgYWN0dWFsLXNpemU9IltbX2FjdHVhbFNpemVdXSIKICAgICAgICAgICAgICAgICAgYnJpZ2h0bmVzcy1hZGp1c3RtZW50PSJbW19icmlnaHRuZXNzQWRqdXN0bWVudF1dIgogICAgICAgICAgICAgICAgICBjb250cmFzdC1wZXJjZW50YWdlPSJbW19jb250cmFzdFBlcmNlbnRhZ2VdXSIKICAgICAgICAgICAgICAgID48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElvLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJby5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9hY3R1YWxTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2JyaWdodG5lc3NBZGp1c3RtZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2NvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJby5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW8ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9icmlnaHRuZXNzQWRqdXN0bWVudCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9icmlnaHRuZXNzSXNEZWZhdWx0IixudWxsKTtFKFtSdCgiX2NvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9jb250cmFzdElzRGVmYXVsdCIsbnVsbCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLElvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0lvPUUoW3l0KCJ0Zi1pbWFnZS1kYXNoYm9hcmQiKV0sSW8pO3ZhciBzeD1FZShPZSgpLDEpO3ZhciBkMTsoZnVuY3Rpb24oZSl7ZVtlLkNBTkNFTExFRD0xXT0iQ0FOQ0VMTEVEIn0pKGQxfHwoZDE9e30pKTt2YXIgY1Y7KGZ1bmN0aW9uKGUpe2VbZS5WRVJURVg9MV09IlZFUlRFWCIsZVtlLkZBQ0U9Ml09IkZBQ0UiLGVbZS5DT0xPUj0zXT0iQ09MT1IifSkoY1Z8fChjVj17fSkpO3ZhciBxY3Q7KGZ1bmN0aW9uKGUpe2UuVkVSVEVYPSJmbG9hdDMyIixlLkZBQ0U9ImludDMyIixlLkNPTE9SPSJ1aW50OCJ9KShxY3R8fChxY3Q9e30pKTt2YXIgSVA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9yZXF1ZXN0TWFuYWdlcj10fXJlbG9hZCh0LHIsbil7cmV0dXJuIHRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9mZXRjaE1ldGFkYXRhKHQscixuKX1fZmV0Y2hEYXRhQnlTdGVwKHQscixuLGksbyxhKXtsZXQgcz1fZSgpLnBsdWdpblJvdXRlKCJtZXNoIiwiL2RhdGEiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LGNvbnRlbnRfdHlwZTpuLHNhbXBsZTpTdHJpbmcoaSksc3RlcDpTdHJpbmcobyl9KSksbD1mdW5jdGlvbih1KXtsZXQgZj1bXTtmb3IobGV0IHA9MDtwPHUubGVuZ3RoLzM7cCsrKXtsZXQgZD1bXTtmb3IobGV0IGc9MDtnPDM7ZysrKWQucHVzaCh1W3AqMytnXSk7Zi5wdXNoKGQpfXJldHVybiBmfSxjPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh1PT57aWYodS5jYW5jZWxsZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pO2xldCBoPXUudmFsdWU7c3dpdGNoKG4pe2Nhc2UiVkVSVEVYIjphLnZlcnRpY2VzPWwobmV3IEZsb2F0MzJBcnJheShoKSk7YnJlYWs7Y2FzZSJGQUNFIjphLmZhY2VzPWwobmV3IEludDMyQXJyYXkoaCkpO2JyZWFrO2Nhc2UiQ09MT1IiOmEuY29sb3JzPWwobmV3IFVpbnQ4QXJyYXkoaCkpO2JyZWFrfXJldHVybiBhfSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKHMse21ldGhvZDoiR0VUIixoZWFkZXJzOntyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixjb250ZW50VHlwZTpxY3Rbbl19fSkudGhlbih1PT51LmFycmF5QnVmZmVyKCkpLnRoZW4oYyl9ZmV0Y2hEYXRhKHQscixuLGkpe2xldCBvPVtdLGE9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMoY1YpLmZvckVhY2gocz0+e2xldCBsPTE8PGNWW3NdO3QuY29tcG9uZW50cyZsJiZvLnB1c2godGhpcy5fZmV0Y2hEYXRhQnlTdGVwKHIsbixzLGksdC5zdGVwLGEpKX0pLFByb21pc2UuYWxsKG8pfV9mZXRjaE1ldGFkYXRhKHQscixuKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IGk9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LHNhbXBsZTpufSkpLG89dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGE9PmEuY2FuY2VsbGVkP1Byb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pOmEudmFsdWUpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChpKS50aGVuKGE9PmEuanNvbigpKS50aGVuKG8pLnRoZW4odGhpcy5fcHJvY2Vzc01ldGFkYXRhLmJpbmQodGhpcykpfV9wcm9jZXNzTWV0YWRhdGEodCl7aWYoIXQpcmV0dXJuO2xldCByPW5ldyBNYXA7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBvPXRbaV07ci5oYXMoby5zdGVwKXx8ci5zZXQoby5zdGVwLFtdKSxyLmdldChvLnN0ZXApLnB1c2gobyl9bGV0IG49W107cmV0dXJuIHIuZm9yRWFjaChpPT57bGV0IG89dGhpcy5fY3JlYXRlU3RlcERhdHVtKGlbMF0pO24ucHVzaChvKX0pLG59X2NyZWF0ZVN0ZXBEYXR1bSh0KXtyZXR1cm57d2FsbF90aW1lOm5ldyBEYXRlKHQud2FsbF90aW1lKjFlMyksc3RlcDp0LnN0ZXAsY29uZmlnOnQuY29uZmlnLGNvbnRlbnRfdHlwZTp0LmNvbnRlbnRfdHlwZSxjb21wb25lbnRzOnQuY29tcG9uZW50c319fTt2YXIgd009e307S3Mod00se0FDRVNGaWxtaWNUb25lTWFwcGluZzooKT0+cGZlLEFkZEVxdWF0aW9uOigpPT5NMSxBZGRPcGVyYXRpb246KCk9PmNmZSxBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZTooKT0+a2h0LEFkZGl0aXZlQmxlbmRpbmc6KCk9Pk11dCxBbHBoYUZvcm1hdDooKT0+eGZlLEFsd2F5c0RlcHRoOigpPT5yZmUsQWx3YXlzU3RlbmNpbEZ1bmM6KCk9Pk9mZSxBbWJpZW50TGlnaHQ6KCk9Pkw2LEFtYmllbnRMaWdodFByb2JlOigpPT56VSxBbmltYXRpb25DbGlwOigpPT5RMSxBbmltYXRpb25Mb2FkZXI6KCk9Pm9odCxBbmltYXRpb25NaXhlcjooKT0+VlUsQW5pbWF0aW9uT2JqZWN0R3JvdXA6KCk9PkhVLEFuaW1hdGlvblV0aWxzOigpPT5ZbixBcmNDdXJ2ZTooKT0+bDYsQXJyYXlDYW1lcmE6KCk9Pm42LEFycm93SGVscGVyOigpPT5NaHQsQXVkaW86KCk9PkQ2LEF1ZGlvQW5hbHlzZXI6KCk9PkZVLEF1ZGlvQ29udGV4dDooKT0+emh0LEF1ZGlvTGlzdGVuZXI6KCk9PmNodCxBdWRpb0xvYWRlcjooKT0+RFUsQXhlc0hlbHBlcjooKT0+dk0sQXhpc0hlbHBlcjooKT0+SzByLEJhY2tTaWRlOigpPT5JaSxCYXNpY0RlcHRoUGFja2luZzooKT0+UmZlLEJhc2ljU2hhZG93TWFwOigpPT5taHIsQmluYXJ5VGV4dHVyZUxvYWRlcjooKT0+ZV9yLEJvbmU6KCk9PnNNLEJvb2xlYW5LZXlmcmFtZVRyYWNrOigpPT5hbSxCb3VuZGluZ0JveEhlbHBlcjooKT0+WjByLEJveDI6KCk9PiQwLEJveDM6KCk9PnRhLEJveDNIZWxwZXI6KCk9PndodCxCb3hCdWZmZXJHZW9tZXRyeTooKT0+UWYsQm94R2VvbWV0cnk6KCk9PlFmLEJveEhlbHBlcjooKT0+eU0sQnVmZmVyQXR0cmlidXRlOigpPT5KZSxCdWZmZXJHZW9tZXRyeTooKT0+UGUsQnVmZmVyR2VvbWV0cnlMb2FkZXI6KCk9PlJVLEJ5dGVUeXBlOigpPT5tZmUsQ2FjaGU6KCk9PnR4LENhbWVyYTooKT0+UjEsQ2FtZXJhSGVscGVyOigpPT5iaHQsQ2FudmFzUmVuZGVyZXI6KCk9Pm5fcixDYW52YXNUZXh0dXJlOigpPT54VSxDYXRtdWxsUm9tQ3VydmUzOigpPT5jNixDaW5lb25Ub25lTWFwcGluZzooKT0+ZmZlLENpcmNsZUJ1ZmZlckdlb21ldHJ5OigpPT5GMSxDaXJjbGVHZW9tZXRyeTooKT0+RjEsQ2xhbXBUb0VkZ2VXcmFwcGluZzooKT0+Sm8sQ2xvY2s6KCk9Pm1NLENvbG9yOigpPT5uZSxDb2xvcktleWZyYW1lVHJhY2s6KCk9Pk02LENvbXByZXNzZWRUZXh0dXJlOigpPT5hNixDb21wcmVzc2VkVGV4dHVyZUxvYWRlcjooKT0+YWh0LENvbmVCdWZmZXJHZW9tZXRyeTooKT0+QjEsQ29uZUdlb21ldHJ5OigpPT5CMSxDdWJlQ2FtZXJhOigpPT5KMyxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6KCk9Pm54LEN1YmVSZWZyYWN0aW9uTWFwcGluZzooKT0+aXgsQ3ViZVRleHR1cmU6KCk9PkgwLEN1YmVUZXh0dXJlTG9hZGVyOigpPT5UVSxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzooKT0+eE0sQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6KCk9Pno2LEN1YmljQmV6aWVyQ3VydmU6KCk9PmNNLEN1YmljQmV6aWVyQ3VydmUzOigpPT51NixDdWJpY0ludGVycG9sYW50OigpPT5TVSxDdWxsRmFjZUJhY2s6KCk9PlN1dCxDdWxsRmFjZUZyb250OigpPT5WaGUsQ3VsbEZhY2VGcm9udEJhY2s6KCk9PmRocixDdWxsRmFjZU5vbmU6KCk9PkhoZSxDdXJ2ZTooKT0+ZnMsQ3VydmVQYXRoOigpPT53VSxDdXN0b21CbGVuZGluZzooKT0+cWhlLEN1c3RvbVRvbmVNYXBwaW5nOigpPT5kZmUsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kcmljYWw6KCk9Pm1odCxEYXRhVGV4dHVyZTooKT0+SmQsRGF0YVRleHR1cmUyREFycmF5OigpPT50TSxEYXRhVGV4dHVyZTNEOigpPT5yNixEYXRhVGV4dHVyZUxvYWRlcjooKT0+Q1UsRGF0YVV0aWxzOigpPT5UaHQsRGVjcmVtZW50U3RlbmNpbE9wOigpPT5UaHIsRGVjcmVtZW50V3JhcFN0ZW5jaWxPcDooKT0+QWhyLERlZmF1bHRMb2FkaW5nTWFuYWdlcjooKT0+aXBlLERlcHRoRm9ybWF0OigpPT56MCxEZXB0aFN0ZW5jaWxGb3JtYXQ6KCk9PmsxLERlcHRoVGV4dHVyZTooKT0+bk0sRGlyZWN0aW9uYWxMaWdodDooKT0+STYsRGlyZWN0aW9uYWxMaWdodEhlbHBlcjooKT0+eGh0LERpc2NyZXRlSW50ZXJwb2xhbnQ6KCk9Pk1VLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5IMSxEb2RlY2FoZWRyb25HZW9tZXRyeTooKT0+SDEsRG91YmxlU2lkZTooKT0+TDEsRHN0QWxwaGFGYWN0b3I6KCk9PktoZSxEc3RDb2xvckZhY3RvcjooKT0+SmhlLER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU6KCk9PkgwcixEeW5hbWljQ29weVVzYWdlOigpPT5VaHIsRHluYW1pY0RyYXdVc2FnZTooKT0+WTMsRHluYW1pY1JlYWRVc2FnZTooKT0+QmhyLEVkZ2VzR2VvbWV0cnk6KCk9PnM2LEVkZ2VzSGVscGVyOigpPT5KMHIsRWxsaXBzZUN1cnZlOigpPT5WMSxFcXVhbERlcHRoOigpPT5pZmUsRXF1YWxTdGVuY2lsRnVuYzooKT0+a2hyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOigpPT5ZUCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzooKT0+alAsRXVsZXI6KCk9PnRtLEV2ZW50RGlzcGF0Y2hlcjooKT0+VXMsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OigpPT5oaCxFeHRydWRlR2VvbWV0cnk6KCk9PmhoLEZhY2VDb2xvcnM6KCk9PlAwcixGaWxlTG9hZGVyOigpPT5KYyxGbGF0U2hhZGluZzooKT0+QWh0LEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PmRVLEZsb2F0MzJBdHRyaWJ1dGU6KCk9PlgwcixGbG9hdDMyQnVmZmVyQXR0cmlidXRlOigpPT54ZSxGbG9hdDY0QXR0cmlidXRlOigpPT4kMHIsRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZTooKT0+bVUsRmxvYXRUeXBlOigpPT5qZCxGb2c6KCk9PnoxLEZvZ0V4cDI6KCk9Pk8xLEZvbnQ6KCk9PnVfcixGb250TG9hZGVyOigpPT5jX3IsRnJhbWVidWZmZXJUZXh0dXJlOigpPT52VSxGcm9udFNpZGU6KCk9PkkxLEZydXN0dW06KCk9Pk4xLEdMQnVmZmVyQXR0cmlidXRlOigpPT5xVSxHTFNMMTooKT0+R2hyLEdMU0wzOigpPT5LdXQsR3JlYXRlckRlcHRoOigpPT5hZmUsR3JlYXRlckVxdWFsRGVwdGg6KCk9Pm9mZSxHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYzooKT0+T2hyLEdyZWF0ZXJTdGVuY2lsRnVuYzooKT0+TmhyLEdyaWRIZWxwZXI6KCk9PllVLEdyb3VwOigpPT5YZCxIYWxmRmxvYXRUeXBlOigpPT5DMSxIZW1pc3BoZXJlTGlnaHQ6KCk9PlQ2LEhlbWlzcGhlcmVMaWdodEhlbHBlcjooKT0+eWh0LEhlbWlzcGhlcmVMaWdodFByb2JlOigpPT5PVSxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5HMSxJY29zYWhlZHJvbkdlb21ldHJ5OigpPT5HMSxJbWFnZUJpdG1hcExvYWRlcjooKT0+TlUsSW1hZ2VMb2FkZXI6KCk9PmV4LEltYWdlVXRpbHM6KCk9PktmLEltbWVkaWF0ZVJlbmRlck9iamVjdDooKT0+aF9yLEluY3JlbWVudFN0ZW5jaWxPcDooKT0+RWhyLEluY3JlbWVudFdyYXBTdGVuY2lsT3A6KCk9PkNocixJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnJtLEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OigpPT5ONixJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+VVUsSW5zdGFuY2VkTWVzaDooKT0+aTYsSW50MTZBdHRyaWJ1dGU6KCk9PkcwcixJbnQxNkJ1ZmZlckF0dHJpYnV0ZTooKT0+ZlUsSW50MzJBdHRyaWJ1dGU6KCk9PlkwcixJbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+cFUsSW50OEF0dHJpYnV0ZTooKT0+VjByLEludDhCdWZmZXJBdHRyaWJ1dGU6KCk9PmNVLEludFR5cGU6KCk9Pl9mZSxJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+ZW0sSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnRwLEludGVycG9sYW50OigpPT5maCxJbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5LUCxJbnRlcnBvbGF0ZUxpbmVhcjooKT0+WlAsSW50ZXJwb2xhdGVTbW9vdGg6KCk9PnJVLEludmVydFN0ZW5jaWxPcDooKT0+UGhyLEpTT05Mb2FkZXI6KCk9PmlfcixLZWVwU3RlbmNpbE9wOigpPT5uVSxLZXlmcmFtZVRyYWNrOigpPT5EbCxMT0Q6KCk9Pl9VLExhdGhlQnVmZmVyR2VvbWV0cnk6KCk9PlcxLExhdGhlR2VvbWV0cnk6KCk9PlcxLExheWVyczooKT0+WDMsTGVuc0ZsYXJlOigpPT5hX3IsTGVzc0RlcHRoOigpPT5uZmUsTGVzc0VxdWFsRGVwdGg6KCk9PmlVLExlc3NFcXVhbFN0ZW5jaWxGdW5jOigpPT5SaHIsTGVzc1N0ZW5jaWxGdW5jOigpPT5MaHIsTGlnaHQ6KCk9Pk9sLExpZ2h0UHJvYmU6KCk9PnJ4LExpbmU6KCk9PmNoLExpbmUzOigpPT5HVSxMaW5lQmFzaWNNYXRlcmlhbDooKT0+R2ksTGluZUN1cnZlOigpPT5VMSxMaW5lQ3VydmUzOigpPT5iVSxMaW5lRGFzaGVkTWF0ZXJpYWw6KCk9Pnc2LExpbmVMb29wOigpPT5vNixMaW5lUGllY2VzOigpPT5DMHIsTGluZVNlZ21lbnRzOigpPT5BYSxMaW5lU3RyaXA6KCk9PlQwcixMaW5lYXJFbmNvZGluZzooKT0+UWQsTGluZWFyRmlsdGVyOigpPT5paSxMaW5lYXJJbnRlcnBvbGFudDooKT0+UzYsTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOigpPT54aHIsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+dmhyLExpbmVhck1pcG1hcExpbmVhckZpbHRlcjooKT0+b3gsTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjooKT0+TGh0LExpbmVhclRvbmVNYXBwaW5nOigpPT51ZmUsTG9hZGVyOigpPT5lYSxMb2FkZXJVdGlsczooKT0+ZE0sTG9hZGluZ01hbmFnZXI6KCk9PkU2LExvb3BPbmNlOigpPT5QZmUsTG9vcFBpbmdQb25nOigpPT5MZmUsTG9vcFJlcGVhdDooKT0+SWZlLEx1bWluYW5jZUFscGhhRm9ybWF0OigpPT53ZmUsTHVtaW5hbmNlRm9ybWF0OigpPT5iZmUsTU9VU0U6KCk9PkswLE1hdGVyaWFsOigpPT5xaSxNYXRlcmlhbExvYWRlcjooKT0+a1UsTWF0aDooKT0+aWZyLE1hdGhVdGlsczooKT0+aWZyLE1hdHJpeDM6KCk9PmtpLE1hdHJpeDQ6KCk9Pk1lLE1heEVxdWF0aW9uOigpPT5BdXQsTWVzaDooKT0+dGksTWVzaEJhc2ljTWF0ZXJpYWw6KCk9PnNoLE1lc2hEZXB0aE1hdGVyaWFsOigpPT5lTSxNZXNoRGlzdGFuY2VNYXRlcmlhbDooKT0+ck0sTWVzaEZhY2VNYXRlcmlhbDooKT0+TDByLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6KCk9Png2LE1lc2hNYXRjYXBNYXRlcmlhbDooKT0+YjYsTWVzaE5vcm1hbE1hdGVyaWFsOigpPT52NixNZXNoUGhvbmdNYXRlcmlhbDooKT0+XzYsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6KCk9Pmc2LE1lc2hTdGFuZGFyZE1hdGVyaWFsOigpPT5wTSxNZXNoVG9vbk1hdGVyaWFsOigpPT55NixNaW5FcXVhdGlvbjooKT0+Q3V0LE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6KCk9PiRQLE1peE9wZXJhdGlvbjooKT0+bGZlLE11bHRpTWF0ZXJpYWw6KCk9PmswcixNdWx0aXBseUJsZW5kaW5nOigpPT5UdXQsTXVsdGlwbHlPcGVyYXRpb246KCk9Pk82LE5lYXJlc3RGaWx0ZXI6KCk9PkxpLE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI6KCk9PnlocixOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+X2hyLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6KCk9PmFVLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOigpPT5vVSxOZXZlckRlcHRoOigpPT5lZmUsTmV2ZXJTdGVuY2lsRnVuYzooKT0+SWhyLE5vQmxlbmRpbmc6KCk9PiRkLE5vQ29sb3JzOigpPT5BMHIsTm9Ub25lTWFwcGluZzooKT0+S2QsTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlOigpPT4kVSxOb3JtYWxCbGVuZGluZzooKT0+VjMsTm90RXF1YWxEZXB0aDooKT0+c2ZlLE5vdEVxdWFsU3RlbmNpbEZ1bmM6KCk9PkRocixOdW1iZXJLZXlmcmFtZVRyYWNrOigpPT5aMSxPYmplY3QzRDooKT0+b3IsT2JqZWN0TG9hZGVyOigpPT5zaHQsT2JqZWN0U3BhY2VOb3JtYWxNYXA6KCk9PkRmZSxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6KCk9PlcwLE9jdGFoZWRyb25HZW9tZXRyeTooKT0+VzAsT25lRmFjdG9yOigpPT5qaGUsT25lTWludXNEc3RBbHBoYUZhY3RvcjooKT0+WmhlLE9uZU1pbnVzRHN0Q29sb3JGYWN0b3I6KCk9PlFoZSxPbmVNaW51c1NyY0FscGhhRmFjdG9yOigpPT5JaHQsT25lTWludXNTcmNDb2xvckZhY3RvcjooKT0+JGhlLE9ydGhvZ3JhcGhpY0NhbWVyYTooKT0+RDEsUENGU2hhZG93TWFwOigpPT5DaHQsUENGU29mdFNoYWRvd01hcDooKT0+VWhlLFBNUkVNR2VuZXJhdG9yOigpPT5lNixQYXJhbWV0cmljR2VvbWV0cnk6KCk9PnNfcixQYXJ0aWNsZTooKT0+TjByLFBhcnRpY2xlQmFzaWNNYXRlcmlhbDooKT0+ejByLFBhcnRpY2xlU3lzdGVtOigpPT5EMHIsUGFydGljbGVTeXN0ZW1NYXRlcmlhbDooKT0+RjByLFBhdGg6KCk9PnExLFBlcnNwZWN0aXZlQ2FtZXJhOigpPT5VaSxQbGFuZTooKT0+JGMsUGxhbmVCdWZmZXJHZW9tZXRyeTooKT0+VjAsUGxhbmVHZW9tZXRyeTooKT0+VjAsUGxhbmVIZWxwZXI6KCk9PlNodCxQb2ludENsb3VkOigpPT5SMHIsUG9pbnRDbG91ZE1hdGVyaWFsOigpPT5PMHIsUG9pbnRMaWdodDooKT0+UDYsUG9pbnRMaWdodEhlbHBlcjooKT0+X2h0LFBvaW50czooKT0+aW0sUG9pbnRzTWF0ZXJpYWw6KCk9Pm5tLFBvbGFyR3JpZEhlbHBlcjooKT0+dmh0LFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+dWgsUG9seWhlZHJvbkdlb21ldHJ5OigpPT51aCxQb3NpdGlvbmFsQXVkaW86KCk9PnVodCxQcm9wZXJ0eUJpbmRpbmc6KCk9PkNyLFByb3BlcnR5TWl4ZXI6KCk9PkJVLFF1YWRyYXRpY0JlemllckN1cnZlOigpPT51TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6KCk9PmhNLFF1YXRlcm5pb246KCk9PnlpLFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrOigpPT5YMCxRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ6KCk9PkVVLFJFVklTSU9OOigpPT5qVSxSR0JBRGVwdGhQYWNraW5nOigpPT5OZmUsUkdCQUZvcm1hdDooKT0+UW8sUkdCQUludGVnZXJGb3JtYXQ6KCk9PkNmZSxSR0JBX0FTVENfMTB4MTBfRm9ybWF0OigpPT5ZdXQsUkdCQV9BU1RDXzEweDVfRm9ybWF0OigpPT5xdXQsUkdCQV9BU1RDXzEweDZfRm9ybWF0OigpPT5HdXQsUkdCQV9BU1RDXzEweDhfRm9ybWF0OigpPT5XdXQsUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdDooKT0+anV0LFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ6KCk9Plh1dCxSR0JBX0FTVENfNHg0X0Zvcm1hdDooKT0+RHV0LFJHQkFfQVNUQ181eDRfRm9ybWF0OigpPT5PdXQsUkdCQV9BU1RDXzV4NV9Gb3JtYXQ6KCk9Pnp1dCxSR0JBX0FTVENfNng1X0Zvcm1hdDooKT0+RnV0LFJHQkFfQVNUQ182eDZfRm9ybWF0OigpPT5CdXQsUkdCQV9BU1RDXzh4NV9Gb3JtYXQ6KCk9Pkh1dCxSR0JBX0FTVENfOHg2X0Zvcm1hdDooKT0+VnV0LFJHQkFfQVNUQ184eDhfRm9ybWF0OigpPT5VdXQsUkdCQV9CUFRDX0Zvcm1hdDooKT0+JHV0LFJHQkFfRVRDMl9FQUNfRm9ybWF0OigpPT5OdXQsUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0OigpPT5rdXQsUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0OigpPT5MdXQsUkdCQV9TM1RDX0RYVDFfRm9ybWF0OigpPT5RVixSR0JBX1MzVENfRFhUM19Gb3JtYXQ6KCk9PnRVLFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdDooKT0+ZVUsUkdCX0VUQzFfRm9ybWF0OigpPT5BZmUsUkdCX0VUQzJfRm9ybWF0OigpPT5SdXQsUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQ6KCk9Pkl1dCxSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdDooKT0+UHV0LFJHQl9TM1RDX0RYVDFfRm9ybWF0OigpPT5KVixSR0Zvcm1hdDooKT0+RWZlLFJHSW50ZWdlckZvcm1hdDooKT0+VGZlLFJhd1NoYWRlck1hdGVyaWFsOigpPT5VMCxSYXk6KCk9PkpmLFJheWNhc3RlcjooKT0+cGh0LFJlY3RBcmVhTGlnaHQ6KCk9Pms2LFJlZEZvcm1hdDooKT0+U2ZlLFJlZEludGVnZXJGb3JtYXQ6KCk9Pk1mZSxSZWluaGFyZFRvbmVNYXBwaW5nOigpPT5oZmUsUmVwZWF0V3JhcHBpbmc6KCk9PlhQLFJlcGxhY2VTdGVuY2lsT3A6KCk9Pk1ocixSZXZlcnNlU3VidHJhY3RFcXVhdGlvbjooKT0+V2hlLFJpbmdCdWZmZXJHZW9tZXRyeTooKT0+WTEsUmluZ0dlb21ldHJ5OigpPT5ZMSxTY2VuZTooKT0+cTAsU2NlbmVVdGlsczooKT0+b19yLFNoYWRlckNodW5rOigpPT5ocixTaGFkZXJMaWI6KCk9PmFoLFNoYWRlck1hdGVyaWFsOigpPT5saCxTaGFkb3dNYXRlcmlhbDooKT0+bTYsU2hhcGU6KCk9PktjLFNoYXBlQnVmZmVyR2VvbWV0cnk6KCk9PlkwLFNoYXBlR2VvbWV0cnk6KCk9PlkwLFNoYXBlUGF0aDooKT0+RWh0LFNoYXBlVXRpbHM6KCk9PlpjLFNob3J0VHlwZTooKT0+Z2ZlLFNrZWxldG9uOigpPT5sTSxTa2VsZXRvbkhlbHBlcjooKT0+V1UsU2tpbm5lZE1lc2g6KCk9PmFNLFNtb290aFNoYWRpbmc6KCk9PmdocixTcGhlcmU6KCk9PlpmLFNwaGVyZUJ1ZmZlckdlb21ldHJ5OigpPT5qMCxTcGhlcmVHZW9tZXRyeTooKT0+ajAsU3BoZXJpY2FsOigpPT5fTSxTcGhlcmljYWxIYXJtb25pY3MzOigpPT5SNixTcGxpbmVDdXJ2ZTooKT0+Zk0sU3BvdExpZ2h0OigpPT5BNixTcG90TGlnaHRIZWxwZXI6KCk9PmdodCxTcHJpdGU6KCk9Pm9NLFNwcml0ZU1hdGVyaWFsOigpPT5pTSxTcmNBbHBoYUZhY3RvcjooKT0+UGh0LFNyY0FscGhhU2F0dXJhdGVGYWN0b3I6KCk9PnRmZSxTcmNDb2xvckZhY3RvcjooKT0+WGhlLFN0YXRpY0NvcHlVc2FnZTooKT0+VmhyLFN0YXRpY0RyYXdVc2FnZTooKT0+VzMsU3RhdGljUmVhZFVzYWdlOigpPT5GaHIsU3RlcmVvQ2FtZXJhOigpPT5saHQsU3RyZWFtQ29weVVzYWdlOigpPT5xaHIsU3RyZWFtRHJhd1VzYWdlOigpPT56aHIsU3RyZWFtUmVhZFVzYWdlOigpPT5IaHIsU3RyaW5nS2V5ZnJhbWVUcmFjazooKT0+c20sU3VidHJhY3RFcXVhdGlvbjooKT0+R2hlLFN1YnRyYWN0aXZlQmxlbmRpbmc6KCk9PkV1dCxUT1VDSDooKT0+WjAsVGFuZ2VudFNwYWNlTm9ybWFsTWFwOigpPT5heCxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5qMSxUZXRyYWhlZHJvbkdlb21ldHJ5OigpPT5qMSxUZXh0R2VvbWV0cnk6KCk9PmxfcixUZXh0dXJlOigpPT52aSxUZXh0dXJlTG9hZGVyOigpPT5BVSxUb3J1c0J1ZmZlckdlb21ldHJ5OigpPT5YMSxUb3J1c0dlb21ldHJ5OigpPT5YMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTooKT0+JDEsVG9ydXNLbm90R2VvbWV0cnk6KCk9PiQxLFRyaWFuZ2xlOigpPT5vaSxUcmlhbmdsZUZhbkRyYXdNb2RlOigpPT53aHIsVHJpYW5nbGVTdHJpcERyYXdNb2RlOigpPT5iaHIsVHJpYW5nbGVzRHJhd01vZGU6KCk9PmtmZSxUdWJlQnVmZmVyR2VvbWV0cnk6KCk9PksxLFR1YmVHZW9tZXRyeTooKT0+SzEsVVZNYXBwaW5nOigpPT5YVSxVaW50MTZBdHRyaWJ1dGU6KCk9PlcwcixVaW50MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PiQzLFVpbnQzMkF0dHJpYnV0ZTooKT0+ajByLFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+SzMsVWludDhBdHRyaWJ1dGU6KCk9PlUwcixVaW50OEJ1ZmZlckF0dHJpYnV0ZTooKT0+dVUsVWludDhDbGFtcGVkQXR0cmlidXRlOigpPT5xMHIsVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlOigpPT5oVSxVbmlmb3JtOigpPT5nTSxVbmlmb3Jtc0xpYjooKT0+cmUsVW5pZm9ybXNVdGlsczooKT0+VmZlLFVuc2lnbmVkQnl0ZVR5cGU6KCk9PlpkLFVuc2lnbmVkSW50MjQ4VHlwZTooKT0+QTEsVW5zaWduZWRJbnRUeXBlOigpPT5WUCxVbnNpZ25lZFNob3J0NDQ0NFR5cGU6KCk9PnlmZSxVbnNpZ25lZFNob3J0NTU1MVR5cGU6KCk9PnZmZSxVbnNpZ25lZFNob3J0VHlwZTooKT0+RzMsVlNNU2hhZG93TWFwOigpPT5GMyxWZWN0b3IyOigpPT5MdCxWZWN0b3IzOigpPT5qLFZlY3RvcjQ6KCk9PmVuLFZlY3RvcktleWZyYW1lVHJhY2s6KCk9PkoxLFZlcnRleDooKT0+QjByLFZlcnRleENvbG9yczooKT0+STByLFZpZGVvVGV4dHVyZTooKT0+eVUsV2ViR0wxUmVuZGVyZXI6KCk9PmdVLFdlYkdMQ3ViZVJlbmRlclRhcmdldDooKT0+UTMsV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM6KCk9PmxVLFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ6KCk9PmozLFdlYkdMUmVuZGVyVGFyZ2V0OigpPT51cyxXZWJHTFJlbmRlclRhcmdldEN1YmU6KCk9PnJfcixXZWJHTFJlbmRlcmVyOigpPT5ybixXZWJHTFV0aWxzOigpPT5RZmUsV2lyZWZyYW1lR2VvbWV0cnk6KCk9PmQ2LFdpcmVmcmFtZUhlbHBlcjooKT0+UTByLFdyYXBBcm91bmRFbmRpbmc6KCk9PkpQLFhIUkxvYWRlcjooKT0+dF9yLFplcm9DdXJ2YXR1cmVFbmRpbmc6KCk9PkUxLFplcm9GYWN0b3I6KCk9PlloZSxaZXJvU2xvcGVFbmRpbmc6KCk9PlQxLFplcm9TdGVuY2lsT3A6KCk9PlNocixfU1JHQkFGb3JtYXQ6KCk9PnNVLHNSR0JFbmNvZGluZzooKT0+V259KTt2YXIgalU9IjEzNyIsSzA9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyLFJPVEFURTowLERPTExZOjEsUEFOOjJ9LFowPXtST1RBVEU6MCxQQU46MSxET0xMWV9QQU46MixET0xMWV9ST1RBVEU6M30sSGhlPTAsU3V0PTEsVmhlPTIsZGhyPTMsbWhyPTAsQ2h0PTEsVWhlPTIsRjM9MyxJMT0wLElpPTEsTDE9MixBaHQ9MSxnaHI9MiwkZD0wLFYzPTEsTXV0PTIsRXV0PTMsVHV0PTQscWhlPTUsTTE9MTAwLEdoZT0xMDEsV2hlPTEwMixDdXQ9MTAzLEF1dD0xMDQsWWhlPTIwMCxqaGU9MjAxLFhoZT0yMDIsJGhlPTIwMyxQaHQ9MjA0LElodD0yMDUsS2hlPTIwNixaaGU9MjA3LEpoZT0yMDgsUWhlPTIwOSx0ZmU9MjEwLGVmZT0wLHJmZT0xLG5mZT0yLGlVPTMsaWZlPTQsb2ZlPTUsYWZlPTYsc2ZlPTcsTzY9MCxsZmU9MSxjZmU9MixLZD0wLHVmZT0xLGhmZT0yLGZmZT0zLHBmZT00LGRmZT01LFhVPTMwMCxueD0zMDEsaXg9MzAyLFlQPTMwMyxqUD0zMDQseE09MzA2LHo2PTMwNyxYUD0xZTMsSm89MTAwMSwkUD0xMDAyLExpPTEwMDMsb1U9MTAwNCxfaHI9MTAwNCxhVT0xMDA1LHlocj0xMDA1LGlpPTEwMDYsTGh0PTEwMDcsdmhyPTEwMDcsb3g9MTAwOCx4aHI9MTAwOCxaZD0xMDA5LG1mZT0xMDEwLGdmZT0xMDExLEczPTEwMTIsX2ZlPTEwMTMsVlA9MTAxNCxqZD0xMDE1LEMxPTEwMTYseWZlPTEwMTcsdmZlPTEwMTgsQTE9MTAyMCx4ZmU9MTAyMSxRbz0xMDIzLGJmZT0xMDI0LHdmZT0xMDI1LHowPTEwMjYsazE9MTAyNyxTZmU9MTAyOCxNZmU9MTAyOSxFZmU9MTAzMCxUZmU9MTAzMSxDZmU9MTAzMyxKVj0zMzc3NixRVj0zMzc3Nyx0VT0zMzc3OCxlVT0zMzc3OSxQdXQ9MzU4NDAsSXV0PTM1ODQxLEx1dD0zNTg0MixrdXQ9MzU4NDMsQWZlPTM2MTk2LFJ1dD0zNzQ5MixOdXQ9Mzc0OTYsRHV0PTM3ODA4LE91dD0zNzgwOSx6dXQ9Mzc4MTAsRnV0PTM3ODExLEJ1dD0zNzgxMixIdXQ9Mzc4MTMsVnV0PTM3ODE0LFV1dD0zNzgxNSxxdXQ9Mzc4MTYsR3V0PTM3ODE3LFd1dD0zNzgxOCxZdXQ9Mzc4MTksanV0PTM3ODIwLFh1dD0zNzgyMSwkdXQ9MzY0OTIsUGZlPTIyMDAsSWZlPTIyMDEsTGZlPTIyMDIsS1A9MjMwMCxaUD0yMzAxLHJVPTIzMDIsRTE9MjQwMCxUMT0yNDAxLEpQPTI0MDIsJFU9MjUwMCxraHQ9MjUwMSxrZmU9MCxiaHI9MSx3aHI9MixRZD0zZTMsV249MzAwMSxSZmU9MzIwMCxOZmU9MzIwMSxheD0wLERmZT0xLFNocj0wLG5VPTc2ODAsTWhyPTc2ODEsRWhyPTc2ODIsVGhyPTc2ODMsQ2hyPTM0MDU1LEFocj0zNDA1NixQaHI9NTM4NixJaHI9NTEyLExocj01MTMsa2hyPTUxNCxSaHI9NTE1LE5ocj01MTYsRGhyPTUxNyxPaHI9NTE4LE9mZT01MTksVzM9MzUwNDQsWTM9MzUwNDgsemhyPTM1MDQwLEZocj0zNTA0NSxCaHI9MzUwNDksSGhyPTM1MDQxLFZocj0zNTA0NixVaHI9MzUwNTAscWhyPTM1MDQyLEdocj0iMTAwIixLdXQ9IjMwMCBlcyIsc1U9MTAzNSxVcz1jbGFzc3thZGRFdmVudExpc3RlbmVyKHQscil7dGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwJiYodGhpcy5fbGlzdGVuZXJzPXt9KTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7blt0XT09PXZvaWQgMCYmKG5bdF09W10pLG5bdF0uaW5kZXhPZihyKT09PS0xJiZuW3RdLnB1c2gocil9aGFzRXZlbnRMaXN0ZW5lcih0LHIpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm4hMTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIG5bdF0hPT12b2lkIDAmJm5bdF0uaW5kZXhPZihyKSE9PS0xfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0XTtpZihpIT09dm9pZCAwKXtsZXQgbz1pLmluZGV4T2Yocik7byE9PS0xJiZpLnNwbGljZShvLDEpfX1kaXNwYXRjaEV2ZW50KHQpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IG49dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYobiE9PXZvaWQgMCl7dC50YXJnZXQ9dGhpcztsZXQgaT1uLnNsaWNlKDApO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLmNhbGwodGhpcyx0KTt0LnRhcmdldD1udWxsfX19LEtvPVtdO2ZvcihsZXQgZT0wO2U8MjU2O2UrKylLb1tlXT0oZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpO3ZhciB1Vj0xMjM0NTY3LFAxPU1hdGguUEkvMTgwLFFQPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIE5sKCl7bGV0IGU9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxyPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKEtvW2UmMjU1XStLb1tlPj44JjI1NV0rS29bZT4+MTYmMjU1XStLb1tlPj4yNCYyNTVdKyItIitLb1t0JjI1NV0rS29bdD4+OCYyNTVdKyItIitLb1t0Pj4xNiYxNXw2NF0rS29bdD4+MjQmMjU1XSsiLSIrS29bciY2M3wxMjhdK0tvW3I+PjgmMjU1XSsiLSIrS29bcj4+MTYmMjU1XStLb1tyPj4yNCYyNTVdK0tvW24mMjU1XStLb1tuPj44JjI1NV0rS29bbj4+MTYmMjU1XStLb1tuPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFpvKGUsdCxyKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihyLGUpKX1mdW5jdGlvbiBSaHQoZSx0KXtyZXR1cm4oZSV0K3QpJXR9ZnVuY3Rpb24gV2hyKGUsdCxyLG4saSl7cmV0dXJuIG4rKGUtdCkqKGktbikvKHItdCl9ZnVuY3Rpb24gWWhyKGUsdCxyKXtyZXR1cm4gZSE9PXQ/KHItZSkvKHQtZSk6MH1mdW5jdGlvbiBVUChlLHQscil7cmV0dXJuKDEtcikqZStyKnR9ZnVuY3Rpb24gamhyKGUsdCxyLG4pe3JldHVybiBVUChlLHQsMS1NYXRoLmV4cCgtcipuKSl9ZnVuY3Rpb24gWGhyKGUsdD0xKXtyZXR1cm4gdC1NYXRoLmFicyhSaHQoZSx0KjIpLXQpfWZ1bmN0aW9uICRocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKigzLTIqZSkpfWZ1bmN0aW9uIEtocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKmUqKGUqKGUqNi0xNSkrMTApKX1mdW5jdGlvbiBaaHIoZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSsxKSl9ZnVuY3Rpb24gSmhyKGUsdCl7cmV0dXJuIGUrTWF0aC5yYW5kb20oKSoodC1lKX1mdW5jdGlvbiBRaHIoZSl7cmV0dXJuIGUqKC41LU1hdGgucmFuZG9tKCkpfWZ1bmN0aW9uIHRmcihlKXtyZXR1cm4gZSE9PXZvaWQgMCYmKHVWPWUlMjE0NzQ4MzY0NyksdVY9dVYqMTY4MDclMjE0NzQ4MzY0NywodVYtMSkvMjE0NzQ4MzY0Nn1mdW5jdGlvbiBlZnIoZSl7cmV0dXJuIGUqUDF9ZnVuY3Rpb24gcmZyKGUpe3JldHVybiBlKlFQfWZ1bmN0aW9uIFp1dChlKXtyZXR1cm4oZSZlLTEpPT09MCYmZSE9PTB9ZnVuY3Rpb24gemZlKGUpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLkxOMikpfWZ1bmN0aW9uIEZmZShlKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSl9ZnVuY3Rpb24gbmZyKGUsdCxyLG4saSl7bGV0IG89TWF0aC5jb3MsYT1NYXRoLnNpbixzPW8oci8yKSxsPWEoci8yKSxjPW8oKHQrbikvMiksdT1hKCh0K24pLzIpLGg9bygodC1uKS8yKSxmPWEoKHQtbikvMikscD1vKChuLXQpLzIpLGQ9YSgobi10KS8yKTtzd2l0Y2goaSl7Y2FzZSJYWVgiOmUuc2V0KHMqdSxsKmgsbCpmLHMqYyk7YnJlYWs7Y2FzZSJZWlkiOmUuc2V0KGwqZixzKnUsbCpoLHMqYyk7YnJlYWs7Y2FzZSJaWFoiOmUuc2V0KGwqaCxsKmYscyp1LHMqYyk7YnJlYWs7Y2FzZSJYWlgiOmUuc2V0KHMqdSxsKmQsbCpwLHMqYyk7YnJlYWs7Y2FzZSJZWFkiOmUuc2V0KGwqcCxzKnUsbCpkLHMqYyk7YnJlYWs7Y2FzZSJaWVoiOmUuc2V0KGwqZCxsKnAscyp1LHMqYyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLk1hdGhVdGlsczogLnNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2kpfX12YXIgaWZyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLERFRzJSQUQ6UDEsUkFEMkRFRzpRUCxnZW5lcmF0ZVVVSUQ6TmwsY2xhbXA6Wm8sZXVjbGlkZWFuTW9kdWxvOlJodCxtYXBMaW5lYXI6V2hyLGludmVyc2VMZXJwOllocixsZXJwOlVQLGRhbXA6amhyLHBpbmdwb25nOlhocixzbW9vdGhzdGVwOiRocixzbW9vdGhlcnN0ZXA6S2hyLHJhbmRJbnQ6WmhyLHJhbmRGbG9hdDpKaHIscmFuZEZsb2F0U3ByZWFkOlFocixzZWVkZWRSYW5kb206dGZyLGRlZ1RvUmFkOmVmcixyYWRUb0RlZzpyZnIsaXNQb3dlck9mVHdvOlp1dCxjZWlsUG93ZXJPZlR3bzp6ZmUsZmxvb3JQb3dlck9mVHdvOkZmZSxzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOm5mcn0pLEx0PWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTApe3RoaXMueD10LHRoaXMueT1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LHIpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54K3IueCx0aGlzLnk9dC55K3IueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LHIpe3JldHVybiB0aGlzLngrPXQueCpyLHRoaXMueSs9dC55KnIsdGhpc31zdWIodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQscikpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngtci54LHRoaXMueT10Lnktci55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKnIraVszXSpuK2lbNl0sdGhpcy55PWlbMV0qcitpWzRdKm4raVs3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oci54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oci55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55O3JldHVybiByKnIrbipufW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzfWxlcnBWZWN0b3JzKHQscixuKXtyZXR1cm4gdGhpcy54PXQueCsoci54LXQueCkqbix0aGlzLnk9dC55KyhyLnktdC55KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXN9cm90YXRlQXJvdW5kKHQscil7bGV0IG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxvPXRoaXMueC10LngsYT10aGlzLnktdC55O3JldHVybiB0aGlzLng9bypuLWEqaSt0LngsdGhpcy55PW8qaSthKm4rdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0x0LnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGtpPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPWksdVsyXT1zLHVbM109cix1WzRdPW8sdVs1XT1sLHVbNl09bix1WzddPWEsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0sdGhpc31leHRyYWN0QmFzaXModCxyLG4pe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0scls0XSxyWzhdLHJbMV0scls1XSxyWzldLHJbMl0scls2XSxyWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxyKXtsZXQgbj10LmVsZW1lbnRzLGk9ci5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMsYT1uWzBdLHM9blszXSxsPW5bNl0sYz1uWzFdLHU9bls0XSxoPW5bN10sZj1uWzJdLHA9bls1XSxkPW5bOF0sZz1pWzBdLF89aVszXSx5PWlbNl0seD1pWzFdLGI9aVs0XSxTPWlbN10sQz1pWzJdLFA9aVs1XSxrPWlbOF07cmV0dXJuIG9bMF09YSpnK3MqeCtsKkMsb1szXT1hKl8rcypiK2wqUCxvWzZdPWEqeStzKlMrbCprLG9bMV09YypnK3UqeCtoKkMsb1s0XT1jKl8rdSpiK2gqUCxvWzddPWMqeSt1KlMraCprLG9bMl09ZipnK3AqeCtkKkMsb1s1XT1mKl8rcCpiK2QqUCxvWzhdPWYqeStwKlMrZCprLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzNdKj10LHJbNl0qPXQsclsxXSo9dCxyWzRdKj10LHJbN10qPXQsclsyXSo9dCxyWzVdKj10LHJbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIHIqYSp1LXIqcypjLW4qbyp1K24qcypsK2kqbypjLWkqYSpsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11KmEtcypjLGY9cypsLXUqbyxwPWMqby1hKmwsZD1yKmgrbipmK2kqcDtpZihkPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCBnPTEvZDtyZXR1cm4gdFswXT1oKmcsdFsxXT0oaSpjLXUqbikqZyx0WzJdPShzKm4taSphKSpnLHRbM109ZipnLHRbNF09KHUqci1pKmwpKmcsdFs1XT0oaSpvLXMqcikqZyx0WzZdPXAqZyx0WzddPShuKmwtYypyKSpnLHRbOF09KGEqci1uKm8pKmcsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxyPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9clsxXSxyWzFdPXJbM10sclszXT10LHQ9clsyXSxyWzJdPXJbNl0scls2XT10LHQ9cls1XSxyWzVdPXJbN10scls3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPXJbMF0sdFsxXT1yWzNdLHRbMl09cls2XSx0WzNdPXJbMV0sdFs0XT1yWzRdLHRbNV09cls3XSx0WzZdPXJbMl0sdFs3XT1yWzVdLHRbOF09cls4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQscixuLGksbyxhLHMpe2xldCBsPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7cmV0dXJuIHRoaXMuc2V0KG4qbCxuKmMsLW4qKGwqYStjKnMpK2ErdCwtaSpjLGkqbCwtaSooLWMqYStsKnMpK3MrciwwLDAsMSksdGhpc31zY2FsZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0qPXQsblszXSo9dCxuWzZdKj10LG5bMV0qPXIsbls0XSo9cixuWzddKj1yLHRoaXN9cm90YXRlKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbM10scz1pWzZdLGw9aVsxXSxjPWlbNF0sdT1pWzddO3JldHVybiBpWzBdPXIqbytuKmwsaVszXT1yKmErbipjLGlbNl09cipzK24qdSxpWzFdPS1uKm8rcipsLGlbNF09LW4qYStyKmMsaVs3XT0tbipzK3IqdSx0aGlzfXRyYW5zbGF0ZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0rPXQqblsyXSxuWzNdKz10Km5bNV0sbls2XSs9dCpuWzhdLG5bMV0rPXIqblsyXSxuWzRdKz1yKm5bNV0sbls3XSs9cipuWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspaWYocltpXSE9PW5baV0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQscj0wKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK3JdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbcl09blswXSx0W3IrMV09blsxXSx0W3IrMl09blsyXSx0W3IrM109blszXSx0W3IrNF09bls0XSx0W3IrNV09bls1XSx0W3IrNl09bls2XSx0W3IrN109bls3XSx0W3IrOF09bls4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07a2kucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBCZmUoZSl7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDstLXQpaWYoZVt0XT42NTUzNSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgb2ZyPXtJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheX07ZnVuY3Rpb24gQjMoZSx0KXtyZXR1cm4gbmV3IG9mcltlXSh0KX1mdW5jdGlvbiB0NihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixlKX12YXIgSGZlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LG5oPXtoOjAsczowLGw6MH0saFY9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBHY3QoZSx0LHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj9lKyh0LWUpKjYqcjpyPDEvMj90OnI8Mi8zP2UrKHQtZSkqNiooMi8zLXIpOmV9ZnVuY3Rpb24gVTMoZSl7cmV0dXJuIGU8LjA0MDQ1P2UqLjA3NzM5OTM4MDg6TWF0aC5wb3coZSouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIFdjdChlKXtyZXR1cm4gZTwuMDAzMTMwOD9lKjEyLjkyOjEuMDU1Kk1hdGgucG93KGUsLjQxNjY2KS0uMDU1fXZhciBuZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7cmV0dXJuIHI9PT12b2lkIDAmJm49PT12b2lkIDA/dGhpcy5zZXQodCk6dGhpcy5zZXRSR0IodCxyLG4pfXNldCh0KXtyZXR1cm4gdCYmdC5pc0NvbG9yP3RoaXMuY29weSh0KTp0eXBlb2YgdD09Im51bWJlciI/dGhpcy5zZXRIZXgodCk6dHlwZW9mIHQ9PSJzdHJpbmciJiZ0aGlzLnNldFN0eWxlKHQpLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9dCx0aGlzLmI9dCx0aGlzfXNldEhleCh0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLHRoaXMucj0odD4+MTYmMjU1KS8yNTUsdGhpcy5nPSh0Pj44JjI1NSkvMjU1LHRoaXMuYj0odCYyNTUpLzI1NSx0aGlzfXNldFJHQih0LHIsbil7cmV0dXJuIHRoaXMucj10LHRoaXMuZz1yLHRoaXMuYj1uLHRoaXN9c2V0SFNMKHQscixuKXtpZih0PVJodCh0LDEpLHI9Wm8ociwwLDEpLG49Wm8obiwwLDEpLHI9PT0wKXRoaXMucj10aGlzLmc9dGhpcy5iPW47ZWxzZXtsZXQgaT1uPD0uNT9uKigxK3IpOm4rci1uKnIsbz0yKm4taTt0aGlzLnI9R2N0KG8saSx0KzEvMyksdGhpcy5nPUdjdChvLGksdCksdGhpcy5iPUdjdChvLGksdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIHIoaSl7aSE9PXZvaWQgMCYmcGFyc2VGbG9hdChpKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBuO2lmKG49L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCBpLG89blsxXSxhPW5bMl07c3dpdGNoKG8pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKGk9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChpWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoaVsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGlbM10sMTApKS8yNTUscihpWzRdKSx0aGlzO2lmKGk9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChpWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQoaVsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KGlbM10sMTApKS8xMDAscihpWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKGk9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpe2xldCBzPXBhcnNlRmxvYXQoaVsxXSkvMzYwLGw9cGFyc2VJbnQoaVsyXSwxMCkvMTAwLGM9cGFyc2VJbnQoaVszXSwxMCkvMTAwO3JldHVybiByKGlbNF0pLHRoaXMuc2V0SFNMKHMsbCxjKX1icmVha319ZWxzZSBpZihuPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7bGV0IGk9blsxXSxvPWkubGVuZ3RoO2lmKG89PT0zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMSkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKG89PT02KXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoNCkraS5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiB0JiZ0Lmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKHQpOnRoaXN9c2V0Q29sb3JOYW1lKHQpe2xldCByPUhmZVt0LnRvTG93ZXJDYXNlKCldO3JldHVybiByIT09dm9pZCAwP3RoaXMuc2V0SGV4KHIpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1VMyh0LnIpLHRoaXMuZz1VMyh0LmcpLHRoaXMuYj1VMyh0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPVdjdCh0LnIpLHRoaXMuZz1XY3QodC5nKSx0aGlzLmI9V2N0KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IHI9dGhpcy5yLG49dGhpcy5nLGk9dGhpcy5iLG89TWF0aC5tYXgocixuLGkpLGE9TWF0aC5taW4ocixuLGkpLHMsbCxjPShhK28pLzI7aWYoYT09PW8pcz0wLGw9MDtlbHNle2xldCB1PW8tYTtzd2l0Y2gobD1jPD0uNT91LyhvK2EpOnUvKDItby1hKSxvKXtjYXNlIHI6cz0obi1pKS91KyhuPGk/NjowKTticmVhaztjYXNlIG46cz0oaS1yKS91KzI7YnJlYWs7Y2FzZSBpOnM9KHItbikvdSs0O2JyZWFrfXMvPTZ9cmV0dXJuIHQuaD1zLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQscixuKXtyZXR1cm4gdGhpcy5nZXRIU0wobmgpLG5oLmgrPXQsbmgucys9cixuaC5sKz1uLHRoaXMuc2V0SFNMKG5oLmgsbmgucyxuaC5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxyKXtyZXR1cm4gdGhpcy5yPXQucityLnIsdGhpcy5nPXQuZytyLmcsdGhpcy5iPXQuYityLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxyKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqcix0aGlzLmcrPSh0LmctdGhpcy5nKSpyLHRoaXMuYis9KHQuYi10aGlzLmIpKnIsdGhpc31sZXJwQ29sb3JzKHQscixuKXtyZXR1cm4gdGhpcy5yPXQucisoci5yLXQucikqbix0aGlzLmc9dC5nKyhyLmctdC5nKSpuLHRoaXMuYj10LmIrKHIuYi10LmIpKm4sdGhpc31sZXJwSFNMKHQscil7dGhpcy5nZXRIU0wobmgpLHQuZ2V0SFNMKGhWKTtsZXQgbj1VUChuaC5oLGhWLmgsciksaT1VUChuaC5zLGhWLnMsciksbz1VUChuaC5sLGhWLmwscik7cmV0dXJuIHRoaXMuc2V0SFNMKG4saSxvKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLnI9dFtyXSx0aGlzLmc9dFtyKzFdLHRoaXMuYj10W3IrMl0sdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLnIsdFtyKzFdPXRoaXMuZyx0W3IrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpe3JldHVybiB0aGlzLnI9dC5nZXRYKHIpLHRoaXMuZz10LmdldFkociksdGhpcy5iPXQuZ2V0WihyKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07bmUuTkFNRVM9SGZlO25lLnByb3RvdHlwZS5pc0NvbG9yPSEwO25lLnByb3RvdHlwZS5yPTE7bmUucHJvdG90eXBlLmc9MTtuZS5wcm90b3R5cGUuYj0xO3ZhciB2MyxLZj1jbGFzc3tzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYyl8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudD09InVuZGVmaW5lZCIpcmV0dXJuIHQuc3JjO2xldCByO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClyPXQ7ZWxzZXt2Mz09PXZvaWQgMCYmKHYzPXQ2KCJjYW52YXMiKSksdjMud2lkdGg9dC53aWR0aCx2My5oZWlnaHQ9dC5oZWlnaHQ7bGV0IG49djMuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP24ucHV0SW1hZ2VEYXRhKHQsMCwwKTpuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxyPXYzfXJldHVybiByLndpZHRoPjIwNDh8fHIuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxyLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTpyLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IHI9dDYoImNhbnZhcyIpO3Iud2lkdGg9dC53aWR0aCxyLmhlaWdodD10LmhlaWdodDtsZXQgbj1yLmdldENvbnRleHQoIjJkIik7bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCk7bGV0IGk9bi5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG89aS5kYXRhO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKW9bYV09VTMob1thXS8yNTUpKjI1NTtyZXR1cm4gbi5wdXRJbWFnZURhdGEoaSwwLDApLHJ9ZWxzZSBpZih0LmRhdGEpe2xldCByPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKylyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P3Jbbl09TWF0aC5mbG9vcihVMyhyW25dLzI1NSkqMjU1KTpyW25dPVUzKHJbbl0pO3JldHVybntkYXRhOnIsd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fWVsc2UgcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLiIpLHR9fSxhZnI9MCx2aT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQ9dmkuREVGQVVMVF9JTUFHRSxyPXZpLkRFRkFVTFRfTUFQUElORyxuPUpvLGk9Sm8sbz1paSxhPW94LHM9UW8sbD1aZCxjPTEsdT1RZCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTphZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1yLHRoaXMud3JhcFM9bix0aGlzLndyYXBUPWksdGhpcy5tYWdGaWx0ZXI9byx0aGlzLm1pbkZpbHRlcj1hLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PXMsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBMdCgwLDApLHRoaXMucmVwZWF0PW5ldyBMdCgxLDEpLHRoaXMuY2VudGVyPW5ldyBMdCgwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGtpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIXImJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgaT10aGlzLmltYWdlO2lmKGkudXVpZD09PXZvaWQgMCYmKGkudXVpZD1ObCgpKSwhciYmdC5pbWFnZXNbaS51dWlkXT09PXZvaWQgMCl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1bXTtmb3IobGV0IGE9MCxzPWkubGVuZ3RoO2E8czthKyspaVthXS5pc0RhdGFUZXh0dXJlP28ucHVzaChZY3QoaVthXS5pbWFnZSkpOm8ucHVzaChZY3QoaVthXSkpfWVsc2Ugbz1ZY3QoaSk7dC5pbWFnZXNbaS51dWlkXT17dXVpZDppLnV1aWQsdXJsOm99fW4uaW1hZ2U9aS51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihuLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHJ8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09biksbn1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PVhVKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgWFA6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBKbzp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2UgJFA6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBYUDp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIEpvOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAkUDpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt2aS5ERUZBVUxUX0lNQUdFPXZvaWQgMDt2aS5ERUZBVUxUX01BUFBJTkc9WFU7dmkucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBZY3QoZSl7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwP0tmLmdldERhdGFVUkwoZSk6ZS5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuZGF0YSksd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsdHlwZTplLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX12YXIgZW49Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTAsaT0xKXt0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzLnc9aX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy56fXNldCB3aWR0aCh0KXt0aGlzLno9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMud31zZXQgaGVpZ2h0KHQpe3RoaXMudz10fXNldCh0LHIsbixpKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpcy53PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXMudz10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Vyh0KXtyZXR1cm4gdGhpcy53PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7Y2FzZSAzOnRoaXMudz1yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtjYXNlIDM6cmV0dXJuIHRoaXMudztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueix0aGlzLncpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXMudz10LnchPT12b2lkIDA/dC53OjEsdGhpc31hZGQodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQscikpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzLncrPXQudyx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXMudys9dCx0aGlzfWFkZFZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCtyLngsdGhpcy55PXQueStyLnksdGhpcy56PXQueityLnosdGhpcy53PXQudytyLncsdGhpc31hZGRTY2FsZWRWZWN0b3IodCxyKXtyZXR1cm4gdGhpcy54Kz10Lngqcix0aGlzLnkrPXQueSpyLHRoaXMueis9dC56KnIsdGhpcy53Kz10Lncqcix0aGlzfXN1Yih0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxyKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMudy09dC53LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpcy53LT10LHRoaXN9c3ViVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54LXIueCx0aGlzLnk9dC55LXIueSx0aGlzLno9dC56LXIueix0aGlzLnc9dC53LXIudyx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzLncqPXQudyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzLncqPXQsdGhpc31hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dGhpcy53LGE9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWFbMF0qcithWzRdKm4rYVs4XSppK2FbMTJdKm8sdGhpcy55PWFbMV0qcithWzVdKm4rYVs5XSppK2FbMTNdKm8sdGhpcy56PWFbMl0qcithWzZdKm4rYVsxMF0qaSthWzE0XSpvLHRoaXMudz1hWzNdKnIrYVs3XSpuK2FbMTFdKmkrYVsxNV0qbyx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfXNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHQpe3RoaXMudz0yKk1hdGguYWNvcyh0LncpO2xldCByPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiByPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9yLHRoaXMueT10Lnkvcix0aGlzLno9dC56L3IpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCByLG4saSxvLGw9dC5lbGVtZW50cyxjPWxbMF0sdT1sWzRdLGg9bFs4XSxmPWxbMV0scD1sWzVdLGQ9bFs5XSxnPWxbMl0sXz1sWzZdLHk9bFsxMF07aWYoTWF0aC5hYnModS1mKTwuMDEmJk1hdGguYWJzKGgtZyk8LjAxJiZNYXRoLmFicyhkLV8pPC4wMSl7aWYoTWF0aC5hYnModStmKTwuMSYmTWF0aC5hYnMoaCtnKTwuMSYmTWF0aC5hYnMoZCtfKTwuMSYmTWF0aC5hYnMoYytwK3ktMyk8LjEpcmV0dXJuIHRoaXMuc2V0KDEsMCwwLDApLHRoaXM7cj1NYXRoLlBJO2xldCBiPShjKzEpLzIsUz0ocCsxKS8yLEM9KHkrMSkvMixQPSh1K2YpLzQsaz0oaCtnKS80LE89KGQrXykvNDtyZXR1cm4gYj5TJiZiPkM/YjwuMDE/KG49MCxpPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKToobj1NYXRoLnNxcnQoYiksaT1QL24sbz1rL24pOlM+Qz9TPC4wMT8obj0uNzA3MTA2NzgxLGk9MCxvPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChTKSxuPVAvaSxvPU8vaSk6QzwuMDE/KG49LjcwNzEwNjc4MSxpPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoQyksbj1rL28saT1PL28pLHRoaXMuc2V0KG4saSxvLHIpLHRoaXN9bGV0IHg9TWF0aC5zcXJ0KChfLWQpKihfLWQpKyhoLWcpKihoLWcpKyhmLXUpKihmLXUpKTtyZXR1cm4gTWF0aC5hYnMoeCk8LjAwMSYmKHg9MSksdGhpcy54PShfLWQpL3gsdGhpcy55PShoLWcpL3gsdGhpcy56PShmLXUpL3gsdGhpcy53PU1hdGguYWNvcygoYytwK3ktMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihyLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihyLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihyLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihyLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpcy53PXRoaXMudzwwP01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzLnc9LXRoaXMudyx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0LnordGhpcy53KnQud31sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopK01hdGguYWJzKHRoaXMudyl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXMudys9KHQudy10aGlzLncpKnIsdGhpc31sZXJwVmVjdG9ycyh0LHIsbil7cmV0dXJuIHRoaXMueD10LngrKHIueC10LngpKm4sdGhpcy55PXQueSsoci55LXQueSkqbix0aGlzLno9dC56KyhyLnotdC56KSpuLHRoaXMudz10LncrKHIudy10LncpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnomJnQudz09PXRoaXMud31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXMuej10W3IrMl0sdGhpcy53PXRbciszXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHRbcisyXT10aGlzLnosdFtyKzNdPXRoaXMudyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzLnc9dC5nZXRXKHIpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXMudz1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnoseWllbGQgdGhpcy53fX07ZW4ucHJvdG90eXBlLmlzVmVjdG9yND0hMDt2YXIgdXM9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIsbj17fSl7c3VwZXIoKSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPTEsdGhpcy5zY2lzc29yPW5ldyBlbigwLDAsdCxyKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IGVuKDAsMCx0LHIpLHRoaXMudGV4dHVyZT1uZXcgdmkodm9pZCAwLG4ubWFwcGluZyxuLndyYXBTLG4ud3JhcFQsbi5tYWdGaWx0ZXIsbi5taW5GaWx0ZXIsbi5mb3JtYXQsbi50eXBlLG4uYW5pc290cm9weSxuLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cixkZXB0aDoxfSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPW4uZ2VuZXJhdGVNaXBtYXBzIT09dm9pZCAwP24uZ2VuZXJhdGVNaXBtYXBzOiExLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD1uLmludGVybmFsRm9ybWF0IT09dm9pZCAwP24uaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPW4ubWluRmlsdGVyIT09dm9pZCAwP24ubWluRmlsdGVyOmlpLHRoaXMuZGVwdGhCdWZmZXI9bi5kZXB0aEJ1ZmZlciE9PXZvaWQgMD9uLmRlcHRoQnVmZmVyOiEwLHRoaXMuc3RlbmNpbEJ1ZmZlcj1uLnN0ZW5jaWxCdWZmZXIhPT12b2lkIDA/bi5zdGVuY2lsQnVmZmVyOiExLHRoaXMuZGVwdGhUZXh0dXJlPW4uZGVwdGhUZXh0dXJlIT09dm9pZCAwP24uZGVwdGhUZXh0dXJlOm51bGx9c2V0VGV4dHVyZSh0KXt0LmltYWdlPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxkZXB0aDp0aGlzLmRlcHRofSx0aGlzLnRleHR1cmU9dH1zZXRTaXplKHQscixuPTEpeyh0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1yfHx0aGlzLmRlcHRoIT09bikmJih0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW4sdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZS5pbWFnZS5kZXB0aD1uLHRoaXMuZGlzcG9zZSgpKSx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt1cy5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMDt2YXIgbFU9Y2xhc3MgZXh0ZW5kcyB1c3tjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIodCxyKTtsZXQgaT10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288bjtvKyspdGhpcy50ZXh0dXJlW29dPWkuY2xvbmUoKX1zZXRTaXplKHQscixuPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PXJ8fHRoaXMuZGVwdGghPT1uKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW47Zm9yKGxldCBpPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO2k8bztpKyspdGhpcy50ZXh0dXJlW2ldLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW2ldLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZVtpXS5pbWFnZS5kZXB0aD1uO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCByPTAsbj10LnRleHR1cmUubGVuZ3RoO3I8bjtyKyspdGhpcy50ZXh0dXJlW3JdPXQudGV4dHVyZVtyXS5jbG9uZSgpO3JldHVybiB0aGlzfX07bFUucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIGozPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG49e30pe3N1cGVyKHQscixuKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PW4uaWdub3JlRGVwdGghPT12b2lkIDA/bi5pZ25vcmVEZXB0aDohMCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT1uLnVzZVJlbmRlclRvVGV4dHVyZSE9PXZvaWQgMD9uLnVzZVJlbmRlclRvVGV4dHVyZTohMSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10aGlzLnVzZVJlbmRlclRvVGV4dHVyZT09PSExfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2FtcGxlcz10LnNhbXBsZXMsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dC51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9dC51c2VSZW5kZXJidWZmZXIsdGhpc319O2ozLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ITA7dmFyIHlpPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTAsbj0wLGk9MSl7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fdz1pfXN0YXRpYyBzbGVycCh0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiBTdGF0aWMgLnNsZXJwKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApIGluc3RlYWQuIiksbi5zbGVycFF1YXRlcm5pb25zKHQscixpKX1zdGF0aWMgc2xlcnBGbGF0KHQscixuLGksbyxhLHMpe2xldCBsPW5baSswXSxjPW5baSsxXSx1PW5baSsyXSxoPW5baSszXSxmPW9bYSswXSxwPW9bYSsxXSxkPW9bYSsyXSxnPW9bYSszXTtpZihzPT09MCl7dFtyKzBdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWg7cmV0dXJufWlmKHM9PT0xKXt0W3IrMF09Zix0W3IrMV09cCx0W3IrMl09ZCx0W3IrM109ZztyZXR1cm59aWYoaCE9PWd8fGwhPT1mfHxjIT09cHx8dSE9PWQpe2xldCBfPTEtcyx5PWwqZitjKnArdSpkK2gqZyx4PXk+PTA/MTotMSxiPTEteSp5O2lmKGI+TnVtYmVyLkVQU0lMT04pe2xldCBDPU1hdGguc3FydChiKSxQPU1hdGguYXRhbjIoQyx5KngpO189TWF0aC5zaW4oXypQKS9DLHM9TWF0aC5zaW4ocypQKS9DfWxldCBTPXMqeDtpZihsPWwqXytmKlMsYz1jKl8rcCpTLHU9dSpfK2QqUyxoPWgqXytnKlMsXz09PTEtcyl7bGV0IEM9MS9NYXRoLnNxcnQobCpsK2MqYyt1KnUraCpoKTtsKj1DLGMqPUMsdSo9QyxoKj1DfX10W3JdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWh9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQscixuLGksbyxhKXtsZXQgcz1uW2ldLGw9bltpKzFdLGM9bltpKzJdLHU9bltpKzNdLGg9b1thXSxmPW9bYSsxXSxwPW9bYSsyXSxkPW9bYSszXTtyZXR1cm4gdFtyXT1zKmQrdSpoK2wqcC1jKmYsdFtyKzFdPWwqZCt1KmYrYypoLXMqcCx0W3IrMl09YypkK3UqcCtzKmYtbCpoLHRbciszXT11KmQtcypoLWwqZi1jKnAsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQscixuLGkpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1yLHRoaXMuX3o9bix0aGlzLl93PWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQscil7aWYoISh0JiZ0LmlzRXVsZXIpKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IG49dC5feCxpPXQuX3ksbz10Ll96LGE9dC5fb3JkZXIscz1NYXRoLmNvcyxsPU1hdGguc2luLGM9cyhuLzIpLHU9cyhpLzIpLGg9cyhvLzIpLGY9bChuLzIpLHA9bChpLzIpLGQ9bChvLzIpO3N3aXRjaChhKXtjYXNlIlhZWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIllYWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIlpYWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlpZWCI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIllaWCI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlhaWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrYSl9cmV0dXJuIHIhPT0hMSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LHIpe2xldCBuPXIvMixpPU1hdGguc2luKG4pO3JldHVybiB0aGlzLl94PXQueCppLHRoaXMuX3k9dC55KmksdGhpcy5fej10LnoqaSx0aGlzLl93PU1hdGguY29zKG4pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgcj10LmVsZW1lbnRzLG49clswXSxpPXJbNF0sbz1yWzhdLGE9clsxXSxzPXJbNV0sbD1yWzldLGM9clsyXSx1PXJbNl0saD1yWzEwXSxmPW4rcytoO2lmKGY+MCl7bGV0IHA9LjUvTWF0aC5zcXJ0KGYrMSk7dGhpcy5fdz0uMjUvcCx0aGlzLl94PSh1LWwpKnAsdGhpcy5feT0oby1jKSpwLHRoaXMuX3o9KGEtaSkqcH1lbHNlIGlmKG4+cyYmbj5oKXtsZXQgcD0yKk1hdGguc3FydCgxK24tcy1oKTt0aGlzLl93PSh1LWwpL3AsdGhpcy5feD0uMjUqcCx0aGlzLl95PShpK2EpL3AsdGhpcy5fej0obytjKS9wfWVsc2UgaWYocz5oKXtsZXQgcD0yKk1hdGguc3FydCgxK3Mtbi1oKTt0aGlzLl93PShvLWMpL3AsdGhpcy5feD0oaSthKS9wLHRoaXMuX3k9LjI1KnAsdGhpcy5fej0obCt1KS9wfWVsc2V7bGV0IHA9MipNYXRoLnNxcnQoMStoLW4tcyk7dGhpcy5fdz0oYS1pKS9wLHRoaXMuX3g9KG8rYykvcCx0aGlzLl95PShsK3UpL3AsdGhpcy5fej0uMjUqcH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQscil7bGV0IG49dC5kb3QocikrMTtyZXR1cm4gbjxOdW1iZXIuRVBTSUxPTj8obj0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PW4pOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9bikpOih0aGlzLl94PXQueSpyLnotdC56KnIueSx0aGlzLl95PXQueipyLngtdC54KnIueix0aGlzLl96PXQueCpyLnktdC55KnIueCx0aGlzLl93PW4pLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoWm8odGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQscil7bGV0IG49dGhpcy5hbmdsZVRvKHQpO2lmKG49PT0wKXJldHVybiB0aGlzO2xldCBpPU1hdGgubWluKDEsci9uKTtyZXR1cm4gdGhpcy5zbGVycCh0LGkpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdD09PTA/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpe2xldCBuPXQuX3gsaT10Ll95LG89dC5feixhPXQuX3cscz1yLl94LGw9ci5feSxjPXIuX3osdT1yLl93O3JldHVybiB0aGlzLl94PW4qdSthKnMraSpjLW8qbCx0aGlzLl95PWkqdSthKmwrbypzLW4qYyx0aGlzLl96PW8qdSthKmMrbipsLWkqcyx0aGlzLl93PWEqdS1uKnMtaSpsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LHIpe2lmKHI9PT0wKXJldHVybiB0aGlzO2lmKHI9PT0xKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IG49dGhpcy5feCxpPXRoaXMuX3ksbz10aGlzLl96LGE9dGhpcy5fdyxzPWEqdC5fdytuKnQuX3graSp0Ll95K28qdC5fejtpZihzPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3oscz0tcyk6dGhpcy5jb3B5KHQpLHM+PTEpcmV0dXJuIHRoaXMuX3c9YSx0aGlzLl94PW4sdGhpcy5feT1pLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtcypzO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgcD0xLXI7cmV0dXJuIHRoaXMuX3c9cCphK3IqdGhpcy5fdyx0aGlzLl94PXAqbityKnRoaXMuX3gsdGhpcy5feT1wKmkrcip0aGlzLl95LHRoaXMuX3o9cCpvK3IqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxzKSxoPU1hdGguc2luKCgxLXIpKnUpL2MsZj1NYXRoLnNpbihyKnUpL2M7cmV0dXJuIHRoaXMuX3c9YSpoK3RoaXMuX3cqZix0aGlzLl94PW4qaCt0aGlzLl94KmYsdGhpcy5feT1pKmgrdGhpcy5feSpmLHRoaXMuX3o9bypoK3RoaXMuX3oqZix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQscixuKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKHIsbil9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxyPU1hdGguc3FydCgxLXQpLG49TWF0aC5zcXJ0KHQpLGk9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQocipNYXRoLmNvcyhpKSxuKk1hdGguc2luKG8pLG4qTWF0aC5jb3MobykscipNYXRoLnNpbihpKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLl94PXRbcl0sdGhpcy5feT10W3IrMV0sdGhpcy5fej10W3IrMl0sdGhpcy5fdz10W3IrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy5feCx0W3IrMV09dGhpcy5feSx0W3IrMl09dGhpcy5feix0W3IrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5feD10LmdldFgociksdGhpcy5feT10LmdldFkociksdGhpcy5fej10LmdldFoociksdGhpcy5fdz10LmdldFcociksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07eWkucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgaj1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCl7dGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW59c2V0KHQscixuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxyKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngrci54LHRoaXMueT10Lnkrci55LHRoaXMuej10Lnorci56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQscil7cmV0dXJuIHRoaXMueCs9dC54KnIsdGhpcy55Kz10Lnkqcix0aGlzLnorPXQueipyLHRoaXN9c3ViKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LHIpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueC1yLngsdGhpcy55PXQueS1yLnksdGhpcy56PXQuei1yLnosdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxyKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54KnIueCx0aGlzLnk9dC55KnIueSx0aGlzLno9dC56KnIueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKHl1ZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQscil7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKHl1ZS5zZXRGcm9tQXhpc0FuZ2xlKHQscikpfWFwcGx5TWF0cml4Myh0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bM10qbitvWzZdKmksdGhpcy55PW9bMV0qcitvWzRdKm4rb1s3XSppLHRoaXMuej1vWzJdKnIrb1s1XSpuK29bOF0qaSx0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cyxhPTEvKG9bM10qcitvWzddKm4rb1sxMV0qaStvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSpyK29bNF0qbitvWzhdKmkrb1sxMl0pKmEsdGhpcy55PShvWzFdKnIrb1s1XSpuK29bOV0qaStvWzEzXSkqYSx0aGlzLno9KG9bMl0qcitvWzZdKm4rb1sxMF0qaStvWzE0XSkqYSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LngsYT10Lnkscz10LnosbD10LncsYz1sKnIrYSppLXMqbix1PWwqbitzKnItbyppLGg9bCppK28qbi1hKnIsZj0tbypyLWEqbi1zKmk7cmV0dXJuIHRoaXMueD1jKmwrZiotbyt1Ki1zLWgqLWEsdGhpcy55PXUqbCtmKi1hK2gqLW8tYyotcyx0aGlzLno9aCpsK2YqLXMrYyotYS11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bNF0qbitvWzhdKmksdGhpcy55PW9bMV0qcitvWzVdKm4rb1s5XSppLHRoaXMuej1vWzJdKnIrb1s2XSpuK29bMTBdKmksdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKHIueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKHIueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKHIueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXN9bGVycFZlY3RvcnModCxyLG4pe3JldHVybiB0aGlzLng9dC54KyhyLngtdC54KSpuLHRoaXMueT10LnkrKHIueS10LnkpKm4sdGhpcy56PXQueisoci56LXQueikqbix0aGlzfWNyb3NzKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LHIpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXIueCxzPXIueSxsPXIuejtyZXR1cm4gdGhpcy54PWkqbC1vKnMsdGhpcy55PW8qYS1uKmwsdGhpcy56PW4qcy1pKmEsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IHI9dC5sZW5ndGhTcSgpO2lmKHI9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IG49dC5kb3QodGhpcykvcjtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKG4pfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqY3QuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IodCksdGhpcy5zdWIoamN0KX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihqY3QuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgcj1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYocj09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgbj10aGlzLmRvdCh0KS9yO3JldHVybiBNYXRoLmFjb3MoWm8obiwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55LGk9dGhpcy56LXQuejtyZXR1cm4gcipyK24qbitpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxyLG4pe2xldCBpPU1hdGguc2luKHIpKnQ7cmV0dXJuIHRoaXMueD1pKk1hdGguc2luKG4pLHRoaXMueT1NYXRoLmNvcyhyKSp0LHRoaXMuej1pKk1hdGguY29zKG4pLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4ociksdGhpcy55PW4sdGhpcy56PXQqTWF0aC5jb3MociksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMTJdLHRoaXMueT1yWzEzXSx0aGlzLno9clsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9cix0aGlzLnk9bix0aGlzLno9aSx0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxyKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxyKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQscil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsciozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzLno9dFtyKzJdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdFtyKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLHI9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsbj1NYXRoLnNxcnQoMS1USSh0LDIpKTtyZXR1cm4gdGhpcy54PW4qTWF0aC5jb3MociksdGhpcy55PW4qTWF0aC5zaW4ociksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O2oucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgamN0PW5ldyBqLHl1ZT1uZXcgeWksdGE9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaigxLzAsMS8wLDEvMCkscj1uZXcgaigtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgdT10W2xdLGg9dFtsKzFdLGY9dFtsKzJdO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IHU9dC5nZXRYKGwpLGg9dC5nZXRZKGwpLGY9dC5nZXRaKGwpO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCByPTAsbj10Lmxlbmd0aDtyPG47cisrKXRoaXMuZXhwYW5kQnlQb2ludCh0W3JdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LHIpe2xldCBuPW0xLmNvcHkocikubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfXNldEZyb21PYmplY3QodCxyPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQscil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQscj0hMSl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7bGV0IG49dC5nZW9tZXRyeTtpZihuIT09dm9pZCAwKWlmKHImJm4uYXR0cmlidXRlcyE9bnVsbCYmbi5hdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwKXtsZXQgbz1uLmF0dHJpYnV0ZXMucG9zaXRpb247Zm9yKGxldCBhPTAscz1vLmNvdW50O2E8czthKyspbTEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGEpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQobTEpfWVsc2Ugbi5ib3VuZGluZ0JveD09PW51bGwmJm4uY29tcHV0ZUJvdW5kaW5nQm94KCksWGN0LmNvcHkobi5ib3VuZGluZ0JveCksWGN0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKFhjdCk7bGV0IGk9dC5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspdGhpcy5leHBhbmRCeU9iamVjdChpW29dLHIpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsbTEpLG0xLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCByLG47cmV0dXJuIHQubm9ybWFsLng+MD8ocj10Lm5vcm1hbC54KnRoaXMubWluLngsbj10Lm5vcm1hbC54KnRoaXMubWF4LngpOihyPXQubm9ybWFsLngqdGhpcy5tYXgueCxuPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhyKz10Lm5vcm1hbC55KnRoaXMubWluLnksbis9dC5ub3JtYWwueSp0aGlzLm1heC55KToocis9dC5ub3JtYWwueSp0aGlzLm1heC55LG4rPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhyKz10Lm5vcm1hbC56KnRoaXMubWluLnosbis9dC5ub3JtYWwueip0aGlzLm1heC56KToocis9dC5ub3JtYWwueip0aGlzLm1heC56LG4rPXQubm9ybWFsLnoqdGhpcy5taW4ueikscjw9LXQuY29uc3RhbnQmJm4+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihMUCksZlYuc3ViVmVjdG9ycyh0aGlzLm1heCxMUCkseDMuc3ViVmVjdG9ycyh0LmEsTFApLGIzLnN1YlZlY3RvcnModC5iLExQKSx3My5zdWJWZWN0b3JzKHQuYyxMUCksUDAuc3ViVmVjdG9ycyhiMyx4MyksSTAuc3ViVmVjdG9ycyh3MyxiMyksZzEuc3ViVmVjdG9ycyh4Myx3Myk7bGV0IHI9WzAsLVAwLnosUDAueSwwLC1JMC56LEkwLnksMCwtZzEueixnMS55LFAwLnosMCwtUDAueCxJMC56LDAsLUkwLngsZzEueiwwLC1nMS54LC1QMC55LFAwLngsMCwtSTAueSxJMC54LDAsLWcxLnksZzEueCwwXTtyZXR1cm4hJGN0KHIseDMsYjMsdzMsZlYpfHwocj1bMSwwLDAsMCwxLDAsMCwwLDFdLCEkY3Qocix4MyxiMyx3MyxmVikpPyExOihwVi5jcm9zc1ZlY3RvcnMoUDAsSTApLHI9W3BWLngscFYueSxwVi56XSwkY3Qocix4MyxiMyx3MyxmVikpfWNsYW1wUG9pbnQodCxyKXtyZXR1cm4gci5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIG0xLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPXRoaXMuZ2V0U2l6ZShtMSkubGVuZ3RoKCkqLjUsdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXM6KFZkWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzFdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0RnJvbVBvaW50cyhWZCksdGhpcyl9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07dGEucHJvdG90eXBlLmlzQm94Mz0hMDt2YXIgVmQ9W25ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqXSxtMT1uZXcgaixYY3Q9bmV3IHRhLHgzPW5ldyBqLGIzPW5ldyBqLHczPW5ldyBqLFAwPW5ldyBqLEkwPW5ldyBqLGcxPW5ldyBqLExQPW5ldyBqLGZWPW5ldyBqLHBWPW5ldyBqLF8xPW5ldyBqO2Z1bmN0aW9uICRjdChlLHQscixuLGkpe2ZvcihsZXQgbz0wLGE9ZS5sZW5ndGgtMztvPD1hO28rPTMpe18xLmZyb21BcnJheShlLG8pO2xldCBzPWkueCpNYXRoLmFicyhfMS54KStpLnkqTWF0aC5hYnMoXzEueSkraS56Kk1hdGguYWJzKF8xLnopLGw9dC5kb3QoXzEpLGM9ci5kb3QoXzEpLHU9bi5kb3QoXzEpO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsdSksTWF0aC5taW4obCxjLHUpKT5zKXJldHVybiExfXJldHVybiEwfXZhciBzZnI9bmV3IHRhLHZ1ZT1uZXcgaixkVj1uZXcgaixLY3Q9bmV3IGosWmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPXJ9c2V0KHQscil7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9cix0aGlzfXNldEZyb21Qb2ludHModCxyKXtsZXQgbj10aGlzLmNlbnRlcjtyIT09dm9pZCAwP24uY29weShyKTpzZnIuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIobik7bGV0IGk9MDtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQodFtvXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQoaSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgcj10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1yKnJ9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LHIpe2xldCBuPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiByLmNvcHkodCksbj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKHIuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxyLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxyfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtLY3Quc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgcj1LY3QubGVuZ3RoU3EoKTtpZihyPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzKXtsZXQgbj1NYXRoLnNxcnQociksaT0obi10aGlzLnJhZGl1cykqLjU7dGhpcy5jZW50ZXIuYWRkKEtjdC5tdWx0aXBseVNjYWxhcihpL24pKSx0aGlzLnJhZGl1cys9aX1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5jZW50ZXIuZXF1YWxzKHQuY2VudGVyKT09PSEwP2RWLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOmRWLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQodnVlLmNvcHkodC5jZW50ZXIpLmFkZChkVikpLHRoaXMuZXhwYW5kQnlQb2ludCh2dWUuY29weSh0LmNlbnRlcikuc3ViKGRWKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sVWQ9bmV3IGosWmN0PW5ldyBqLG1WPW5ldyBqLEwwPW5ldyBqLEpjdD1uZXcgaixnVj1uZXcgaixRY3Q9bmV3IGosSmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LFVkKSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7ci5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2xldCBuPXIuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gbjwwP3IuY29weSh0aGlzLm9yaWdpbik6ci5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2xldCByPVVkLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gcjwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihVZC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodGhpcy5vcmlnaW4pLFVkLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVNxVG9TZWdtZW50KHQscixuLGkpe1pjdC5jb3B5KHQpLmFkZChyKS5tdWx0aXBseVNjYWxhciguNSksbVYuY29weShyKS5zdWIodCkubm9ybWFsaXplKCksTDAuY29weSh0aGlzLm9yaWdpbikuc3ViKFpjdCk7bGV0IG89dC5kaXN0YW5jZVRvKHIpKi41LGE9LXRoaXMuZGlyZWN0aW9uLmRvdChtVikscz1MMC5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LUwwLmRvdChtViksYz1MMC5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1hKmEpLGgsZixwLGQ7aWYodT4wKWlmKGg9YSpsLXMsZj1hKnMtbCxkPW8qdSxoPj0wKWlmKGY+PS1kKWlmKGY8PWQpe2xldCBnPTEvdTtoKj1nLGYqPWcscD1oKihoK2EqZisyKnMpK2YqKGEqaCtmKzIqbCkrY31lbHNlIGY9byxoPU1hdGgubWF4KDAsLShhKmYrcykpLHA9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LW8saD1NYXRoLm1heCgwLC0oYSpmK3MpKSxwPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZD8oaD1NYXRoLm1heCgwLC0oLWEqbytzKSksZj1oPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk6Zjw9ZD8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShhKm8rcykpLGY9aD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPWE+MD8tbzpvLGg9TWF0aC5tYXgoMCwtKGEqZitzKSkscD0taCpoK2YqKGYrMipsKStjO3JldHVybiBuJiZuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksaSYmaS5jb3B5KG1WKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoWmN0KSxwfWludGVyc2VjdFNwaGVyZSh0LHIpe1VkLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2xldCBuPVVkLmRvdCh0aGlzLmRpcmVjdGlvbiksaT1VZC5kb3QoVWQpLW4qbixvPXQucmFkaXVzKnQucmFkaXVzO2lmKGk+bylyZXR1cm4gbnVsbDtsZXQgYT1NYXRoLnNxcnQoby1pKSxzPW4tYSxsPW4rYTtyZXR1cm4gczwwJiZsPDA/bnVsbDpzPDA/dGhpcy5hdChsLHIpOnRoaXMuYXQocyxyKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCByPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYocj09PTApcmV0dXJuIHQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT09PTA/MDpudWxsO2xldCBuPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9yO3JldHVybiBuPj0wP246bnVsbH1pbnRlcnNlY3RQbGFuZSh0LHIpe2xldCBuPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBuPT09bnVsbD9udWxsOnRoaXMuYXQobixyKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IHI9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiByPT09MHx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpyPDB9aW50ZXJzZWN0Qm94KHQscil7bGV0IG4saSxvLGEscyxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGg9MS90aGlzLmRpcmVjdGlvbi56LGY9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KG49KHQubWluLngtZi54KSpjLGk9KHQubWF4LngtZi54KSpjKToobj0odC5tYXgueC1mLngpKmMsaT0odC5taW4ueC1mLngpKmMpLHU+PTA/KG89KHQubWluLnktZi55KSp1LGE9KHQubWF4LnktZi55KSp1KToobz0odC5tYXgueS1mLnkpKnUsYT0odC5taW4ueS1mLnkpKnUpLG4+YXx8bz5pfHwoKG8+bnx8biE9PW4pJiYobj1vKSwoYTxpfHxpIT09aSkmJihpPWEpLGg+PTA/KHM9KHQubWluLnotZi56KSpoLGw9KHQubWF4LnotZi56KSpoKToocz0odC5tYXguei1mLnopKmgsbD0odC5taW4uei1mLnopKmgpLG4+bHx8cz5pKXx8KChzPm58fG4hPT1uKSYmKG49cyksKGw8aXx8aSE9PWkpJiYoaT1sKSxpPDApP251bGw6dGhpcy5hdChuPj0wP246aSxyKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0aGlzLmludGVyc2VjdEJveCh0LFVkKSE9PW51bGx9aW50ZXJzZWN0VHJpYW5nbGUodCxyLG4saSxvKXtKY3Quc3ViVmVjdG9ycyhyLHQpLGdWLnN1YlZlY3RvcnMobix0KSxRY3QuY3Jvc3NWZWN0b3JzKEpjdCxnVik7bGV0IGE9dGhpcy5kaXJlY3Rpb24uZG90KFFjdCkscztpZihhPjApe2lmKGkpcmV0dXJuIG51bGw7cz0xfWVsc2UgaWYoYTwwKXM9LTEsYT0tYTtlbHNlIHJldHVybiBudWxsO0wwLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9cyp0aGlzLmRpcmVjdGlvbi5kb3QoZ1YuY3Jvc3NWZWN0b3JzKEwwLGdWKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPXMqdGhpcy5kaXJlY3Rpb24uZG90KEpjdC5jcm9zcyhMMCkpO2lmKGM8MHx8bCtjPmEpcmV0dXJuIG51bGw7bGV0IHU9LXMqTDAuZG90KFFjdCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9hLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxNZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyl7bGV0IHk9dGhpcy5lbGVtZW50cztyZXR1cm4geVswXT10LHlbNF09cix5WzhdPW4seVsxMl09aSx5WzFdPW8seVs1XT1hLHlbOV09cyx5WzEzXT1sLHlbMl09Yyx5WzZdPXUseVsxMF09aCx5WzE0XT1mLHlbM109cCx5WzddPWQseVsxMV09Zyx5WzE1XT1fLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgTWUoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0scls5XT1uWzldLHJbMTBdPW5bMTBdLHJbMTFdPW5bMTFdLHJbMTJdPW5bMTJdLHJbMTNdPW5bMTNdLHJbMTRdPW5bMTRdLHJbMTVdPW5bMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiByWzEyXT1uWzEyXSxyWzEzXT1uWzEzXSxyWzE0XT1uWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0sclszXSxyWzZdLDAsclsxXSxyWzRdLHJbN10sMCxyWzJdLHJbNV0scls4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQscixuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxyLG4pe3JldHVybiB0aGlzLnNldCh0Lngsci54LG4ueCwwLHQueSxyLnksbi55LDAsdC56LHIueixuLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cyxpPTEvUzMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG89MS9TMy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksYT0xL1MzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gclswXT1uWzBdKmksclsxXT1uWzFdKmksclsyXT1uWzJdKmksclszXT0wLHJbNF09bls0XSpvLHJbNV09bls1XSpvLHJbNl09bls2XSpvLHJbN109MCxyWzhdPW5bOF0qYSxyWzldPW5bOV0qYSxyWzEwXT1uWzEwXSphLHJbMTFdPTAsclsxMl09MCxyWzEzXT0wLHJbMTRdPTAsclsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQueCxpPXQueSxvPXQueixhPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLmNvcyhpKSxjPU1hdGguc2luKGkpLHU9TWF0aC5jb3MobyksaD1NYXRoLnNpbihvKTtpZih0Lm9yZGVyPT09IlhZWiIpe2xldCBmPWEqdSxwPWEqaCxkPXMqdSxnPXMqaDtyWzBdPWwqdSxyWzRdPS1sKmgscls4XT1jLHJbMV09cCtkKmMscls1XT1mLWcqYyxyWzldPS1zKmwsclsyXT1nLWYqYyxyWzZdPWQrcCpjLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWVhaIil7bGV0IGY9bCp1LHA9bCpoLGQ9Yyp1LGc9YypoO3JbMF09ZitnKnMscls0XT1kKnMtcCxyWzhdPWEqYyxyWzFdPWEqaCxyWzVdPWEqdSxyWzldPS1zLHJbMl09cCpzLWQscls2XT1nK2YqcyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpYWSIpe2xldCBmPWwqdSxwPWwqaCxkPWMqdSxnPWMqaDtyWzBdPWYtZypzLHJbNF09LWEqaCxyWzhdPWQrcCpzLHJbMV09cCtkKnMscls1XT1hKnUscls5XT1nLWYqcyxyWzJdPS1hKmMscls2XT1zLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWllYIil7bGV0IGY9YSp1LHA9YSpoLGQ9cyp1LGc9cypoO3JbMF09bCp1LHJbNF09ZCpjLXAscls4XT1mKmMrZyxyWzFdPWwqaCxyWzVdPWcqYytmLHJbOV09cCpjLWQsclsyXT0tYyxyWzZdPXMqbCxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllaWCIpe2xldCBmPWEqbCxwPWEqYyxkPXMqbCxnPXMqYztyWzBdPWwqdSxyWzRdPWctZipoLHJbOF09ZCpoK3AsclsxXT1oLHJbNV09YSp1LHJbOV09LXMqdSxyWzJdPS1jKnUscls2XT1wKmgrZCxyWzEwXT1mLWcqaH1lbHNlIGlmKHQub3JkZXI9PT0iWFpZIil7bGV0IGY9YSpsLHA9YSpjLGQ9cypsLGc9cypjO3JbMF09bCp1LHJbNF09LWgscls4XT1jKnUsclsxXT1mKmgrZyxyWzVdPWEqdSxyWzldPXAqaC1kLHJbMl09ZCpoLXAscls2XT1zKnUsclsxMF09ZypoK2Z9cmV0dXJuIHJbM109MCxyWzddPTAsclsxMV09MCxyWzEyXT0wLHJbMTNdPTAsclsxNF09MCxyWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMuY29tcG9zZShsZnIsdCxjZnIpfWxvb2tBdCh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4ga2wuc3ViVmVjdG9ycyh0LHIpLGtsLmxlbmd0aFNxKCk9PT0wJiYoa2wuej0xKSxrbC5ub3JtYWxpemUoKSxrMC5jcm9zc1ZlY3RvcnMobixrbCksazAubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhuLnopPT09MT9rbC54Kz0xZS00OmtsLnorPTFlLTQsa2wubm9ybWFsaXplKCksazAuY3Jvc3NWZWN0b3JzKG4sa2wpKSxrMC5ub3JtYWxpemUoKSxfVi5jcm9zc1ZlY3RvcnMoa2wsazApLGlbMF09azAueCxpWzRdPV9WLngsaVs4XT1rbC54LGlbMV09azAueSxpWzVdPV9WLnksaVs5XT1rbC55LGlbMl09azAueixpWzZdPV9WLnosaVsxMF09a2wueix0aGlzfW11bHRpcGx5KHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQscikpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQscil7bGV0IG49dC5lbGVtZW50cyxpPXIuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9blswXSxzPW5bNF0sbD1uWzhdLGM9blsxMl0sdT1uWzFdLGg9bls1XSxmPW5bOV0scD1uWzEzXSxkPW5bMl0sZz1uWzZdLF89blsxMF0seT1uWzE0XSx4PW5bM10sYj1uWzddLFM9blsxMV0sQz1uWzE1XSxQPWlbMF0saz1pWzRdLE89aVs4XSxEPWlbMTJdLEI9aVsxXSxJPWlbNV0sTD1pWzldLFI9aVsxM10sRj1pWzJdLHo9aVs2XSxVPWlbMTBdLFc9aVsxNF0sWj1pWzNdLHJ0PWlbN10sb3Q9aVsxMV0sc3Q9aVsxNV07cmV0dXJuIG9bMF09YSpQK3MqQitsKkYrYypaLG9bNF09YSprK3MqSStsKnorYypydCxvWzhdPWEqTytzKkwrbCpVK2Mqb3Qsb1sxMl09YSpEK3MqUitsKlcrYypzdCxvWzFdPXUqUCtoKkIrZipGK3AqWixvWzVdPXUqaytoKkkrZip6K3AqcnQsb1s5XT11Kk8raCpMK2YqVStwKm90LG9bMTNdPXUqRCtoKlIrZipXK3Aqc3Qsb1syXT1kKlArZypCK18qRit5Klosb1s2XT1kKmsrZypJK18qeit5KnJ0LG9bMTBdPWQqTytnKkwrXypVK3kqb3Qsb1sxNF09ZCpEK2cqUitfKlcreSpzdCxvWzNdPXgqUCtiKkIrUypGK0MqWixvWzddPXgqaytiKkkrUyp6K0MqcnQsb1sxMV09eCpPK2IqTCtTKlUrQypvdCxvWzE1XT14KkQrYipSK1MqVytDKnN0LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzRdKj10LHJbOF0qPXQsclsxMl0qPXQsclsxXSo9dCxyWzVdKj10LHJbOV0qPXQsclsxM10qPXQsclsyXSo9dCxyWzZdKj10LHJbMTBdKj10LHJbMTRdKj10LHJbM10qPXQscls3XSo9dCxyWzExXSo9dCxyWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyPXRbMF0sbj10WzRdLGk9dFs4XSxvPXRbMTJdLGE9dFsxXSxzPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGg9dFs2XSxmPXRbMTBdLHA9dFsxNF0sZD10WzNdLGc9dFs3XSxfPXRbMTFdLHk9dFsxNV07cmV0dXJuIGQqKCtvKmwqaC1pKmMqaC1vKnMqZituKmMqZitpKnMqcC1uKmwqcCkrZyooK3IqbCpwLXIqYypmK28qYSpmLWkqYSpwK2kqYyp1LW8qbCp1KStfKigrcipjKmgtcipzKnAtbyphKmgrbiphKnArbypzKnUtbipjKnUpK3kqKC1pKnMqdS1yKmwqaCtyKnMqZitpKmEqaC1uKmEqZituKmwqdSl9dHJhbnNwb3NlKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyO3JldHVybiByPXRbMV0sdFsxXT10WzRdLHRbNF09cixyPXRbMl0sdFsyXT10WzhdLHRbOF09cixyPXRbNl0sdFs2XT10WzldLHRbOV09cixyPXRbM10sdFszXT10WzEyXSx0WzEyXT1yLHI9dFs3XSx0WzddPXRbMTNdLHRbMTNdPXIscj10WzExXSx0WzExXT10WzE0XSx0WzE0XT1yLHRoaXN9c2V0UG9zaXRpb24odCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueik6KGlbMTJdPXQsaVsxM109cixpWzE0XT1uKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD10WzldLGY9dFsxMF0scD10WzExXSxkPXRbMTJdLGc9dFsxM10sXz10WzE0XSx5PXRbMTVdLHg9aCpfKmMtZypmKmMrZypsKnAtcypfKnAtaCpsKnkrcypmKnksYj1kKmYqYy11Kl8qYy1kKmwqcCthKl8qcCt1KmwqeS1hKmYqeSxTPXUqZypjLWQqaCpjK2QqcypwLWEqZypwLXUqcyp5K2EqaCp5LEM9ZCpoKmwtdSpnKmwtZCpzKmYrYSpnKmYrdSpzKl8tYSpoKl8sUD1yKngrbipiK2kqUytvKkM7aWYoUD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApO2xldCBrPTEvUDtyZXR1cm4gdFswXT14KmssdFsxXT0oZypmKm8taCpfKm8tZyppKnArbipfKnAraCppKnktbipmKnkpKmssdFsyXT0ocypfKm8tZypsKm8rZyppKmMtbipfKmMtcyppKnkrbipsKnkpKmssdFszXT0oaCpsKm8tcypmKm8taCppKmMrbipmKmMrcyppKnAtbipsKnApKmssdFs0XT1iKmssdFs1XT0odSpfKm8tZCpmKm8rZCppKnAtcipfKnAtdSppKnkrcipmKnkpKmssdFs2XT0oZCpsKm8tYSpfKm8tZCppKmMrcipfKmMrYSppKnktcipsKnkpKmssdFs3XT0oYSpmKm8tdSpsKm8rdSppKmMtcipmKmMtYSppKnArcipsKnApKmssdFs4XT1TKmssdFs5XT0oZCpoKm8tdSpnKm8tZCpuKnArcipnKnArdSpuKnktcipoKnkpKmssdFsxMF09KGEqZypvLWQqcypvK2QqbipjLXIqZypjLWEqbip5K3Iqcyp5KSprLHRbMTFdPSh1KnMqby1hKmgqby11Km4qYytyKmgqYythKm4qcC1yKnMqcCkqayx0WzEyXT1DKmssdFsxM109KHUqZyppLWQqaCppK2QqbipmLXIqZypmLXUqbipfK3IqaCpfKSprLHRbMTRdPShkKnMqaS1hKmcqaS1kKm4qbCtyKmcqbCthKm4qXy1yKnMqXykqayx0WzE1XT0oYSpoKmktdSpzKmkrdSpuKmwtcipoKmwtYSpuKmYrcipzKmYpKmssdGhpc31zY2FsZSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LG89dC56O3JldHVybiByWzBdKj1uLHJbNF0qPWkscls4XSo9byxyWzFdKj1uLHJbNV0qPWkscls5XSo9byxyWzJdKj1uLHJbNl0qPWksclsxMF0qPW8sclszXSo9bixyWzddKj1pLHJbMTFdKj1vLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0sbj10WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSxpPXRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF07cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChyLG4saSkpfW1ha2VUcmFuc2xhdGlvbih0LHIsbil7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsciwwLDAsMSxuLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsciwtbiwwLDAsbixyLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KHIsMCxuLDAsMCwxLDAsMCwtbiwwLHIsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQociwtbiwwLDAsbixyLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LHIpe2xldCBuPU1hdGguY29zKHIpLGk9TWF0aC5zaW4ociksbz0xLW4sYT10Lngscz10LnksbD10LnosYz1vKmEsdT1vKnM7cmV0dXJuIHRoaXMuc2V0KGMqYStuLGMqcy1pKmwsYypsK2kqcywwLGMqcytpKmwsdSpzK24sdSpsLWkqYSwwLGMqbC1pKnMsdSpsK2kqYSxvKmwqbCtuLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxyLG4pe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsciwwLDAsMCwwLG4sMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuc2V0KDEsbixvLDAsdCwxLGEsMCxyLGksMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPXIuX3gsYT1yLl95LHM9ci5feixsPXIuX3csYz1vK28sdT1hK2EsaD1zK3MsZj1vKmMscD1vKnUsZD1vKmgsZz1hKnUsXz1hKmgseT1zKmgseD1sKmMsYj1sKnUsUz1sKmgsQz1uLngsUD1uLnksaz1uLno7cmV0dXJuIGlbMF09KDEtKGcreSkpKkMsaVsxXT0ocCtTKSpDLGlbMl09KGQtYikqQyxpWzNdPTAsaVs0XT0ocC1TKSpQLGlbNV09KDEtKGYreSkpKlAsaVs2XT0oXyt4KSpQLGlbN109MCxpWzhdPShkK2IpKmssaVs5XT0oXy14KSprLGlbMTBdPSgxLShmK2cpKSprLGlbMTFdPTAsaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnosaVsxNV09MSx0aGlzfWRlY29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPVMzLnNldChpWzBdLGlbMV0saVsyXSkubGVuZ3RoKCksYT1TMy5zZXQoaVs0XSxpWzVdLGlbNl0pLmxlbmd0aCgpLHM9UzMuc2V0KGlbOF0saVs5XSxpWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9aVsxMl0sdC55PWlbMTNdLHQuej1pWzE0XSxpaC5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvYSxoPTEvcztyZXR1cm4gaWguZWxlbWVudHNbMF0qPWMsaWguZWxlbWVudHNbMV0qPWMsaWguZWxlbWVudHNbMl0qPWMsaWguZWxlbWVudHNbNF0qPXUsaWguZWxlbWVudHNbNV0qPXUsaWguZWxlbWVudHNbNl0qPXUsaWguZWxlbWVudHNbOF0qPWgsaWguZWxlbWVudHNbOV0qPWgsaWguZWxlbWVudHNbMTBdKj1oLHIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGloKSxuLng9byxuLnk9YSxuLno9cyx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LHIsbixpLG8sYSl7YT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IHM9dGhpcy5lbGVtZW50cyxsPTIqby8oci10KSxjPTIqby8obi1pKSx1PShyK3QpLyhyLXQpLGg9KG4raSkvKG4taSksZj0tKGErbykvKGEtbykscD0tMiphKm8vKGEtbyk7cmV0dXJuIHNbMF09bCxzWzRdPTAsc1s4XT11LHNbMTJdPTAsc1sxXT0wLHNbNV09YyxzWzldPWgsc1sxM109MCxzWzJdPTAsc1s2XT0wLHNbMTBdPWYsc1sxNF09cCxzWzNdPTAsc1s3XT0wLHNbMTFdPS0xLHNbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmVsZW1lbnRzLGw9MS8oci10KSxjPTEvKG4taSksdT0xLyhhLW8pLGg9KHIrdCkqbCxmPShuK2kpKmMscD0oYStvKSp1O3JldHVybiBzWzBdPTIqbCxzWzRdPTAsc1s4XT0wLHNbMTJdPS1oLHNbMV09MCxzWzVdPTIqYyxzWzldPTAsc1sxM109LWYsc1syXT0wLHNbNl09MCxzWzEwXT0tMip1LHNbMTRdPS1wLHNbM109MCxzWzddPTAsc1sxMV09MCxzWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8MTY7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LHI9MCl7Zm9yKGxldCBuPTA7bjwxNjtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rcl07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gdFtyXT1uWzBdLHRbcisxXT1uWzFdLHRbcisyXT1uWzJdLHRbciszXT1uWzNdLHRbcis0XT1uWzRdLHRbcis1XT1uWzVdLHRbcis2XT1uWzZdLHRbcis3XT1uWzddLHRbcis4XT1uWzhdLHRbcis5XT1uWzldLHRbcisxMF09blsxMF0sdFtyKzExXT1uWzExXSx0W3IrMTJdPW5bMTJdLHRbcisxM109blsxM10sdFtyKzE0XT1uWzE0XSx0W3IrMTVdPW5bMTVdLHR9fTtNZS5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciBTMz1uZXcgaixpaD1uZXcgTWUsbGZyPW5ldyBqKDAsMCwwKSxjZnI9bmV3IGooMSwxLDEpLGswPW5ldyBqLF9WPW5ldyBqLGtsPW5ldyBqLHh1ZT1uZXcgTWUsYnVlPW5ldyB5aSx0bT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCxpPXRtLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aX1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LHIsbixpPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQscj10aGlzLl9vcmRlcixuPSEwKXtsZXQgaT10LmVsZW1lbnRzLG89aVswXSxhPWlbNF0scz1pWzhdLGw9aVsxXSxjPWlbNV0sdT1pWzldLGg9aVsyXSxmPWlbNl0scD1pWzEwXTtzd2l0Y2gocil7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKFpvKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUscCksdGhpcy5fej1NYXRoLmF0YW4yKC1hLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLVpvKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyxwKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihabyhmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1abyhoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1hLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oWm8obCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMscCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtWm8oYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIityKX1yZXR1cm4gdGhpcy5fb3JkZXI9cixuPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQscixuKXtyZXR1cm4geHVlLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KHh1ZSxyLG4pfXNldEZyb21WZWN0b3IzKHQscj10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LHIpfXJlb3JkZXIodCl7cmV0dXJuIGJ1ZS5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihidWUsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdFszXSE9PXZvaWQgMCYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMuX3gsdFtyKzFdPXRoaXMuX3ksdFtyKzJdPXRoaXMuX3osdFtyKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgaih0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3RtLnByb3RvdHlwZS5pc0V1bGVyPSEwO3RtLkRlZmF1bHRPcmRlcj0iWFlaIjt0bS5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO3ZhciBYMz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9KDE8PHR8MCk+Pj4wfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuKHRoaXMubWFzayZ0Lm1hc2spIT09MH1pc0VuYWJsZWQodCl7cmV0dXJuKHRoaXMubWFzayYoMTw8dHwwKSkhPT0wfX0sdWZyPTAsd3VlPW5ldyBqLE0zPW5ldyB5aSxxZD1uZXcgTWUseVY9bmV3IGosa1A9bmV3IGosaGZyPW5ldyBqLGZmcj1uZXcgeWksU3VlPW5ldyBqKDEsMCwwKSxNdWU9bmV3IGooMCwxLDApLEV1ZT1uZXcgaigwLDAsMSkscGZyPXt0eXBlOiJhZGRlZCJ9LFR1ZT17dHlwZToicmVtb3ZlZCJ9LG9yPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnVmcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPW9yLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBqLHI9bmV3IHRtLG49bmV3IHlpLGk9bmV3IGooMSwxLDEpO2Z1bmN0aW9uIG8oKXtuLnNldEZyb21FdWxlcihyLCExKX1mdW5jdGlvbiBhKCl7ci5zZXRGcm9tUXVhdGVybmlvbihuLHZvaWQgMCwhMSl9ci5fb25DaGFuZ2Uobyksbi5fb25DaGFuZ2UoYSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgTWV9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGtpfX0pLHRoaXMubWF0cml4PW5ldyBNZSx0aGlzLm1hdHJpeFdvcmxkPW5ldyBNZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBYMyx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxyKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LHIpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxyKXtyZXR1cm4gTTMuc2V0RnJvbUF4aXNBbmdsZSh0LHIpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShNMyksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LHIpe3JldHVybiBNMy5zZXRGcm9tQXhpc0FuZ2xlKHQsciksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKFN1ZSx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhNdWUsdCl9cm90YXRlWih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoRXVlLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LHIpe3JldHVybiB3dWUuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZCh3dWUubXVsdGlwbHlTY2FsYXIocikpLHRoaXN9dHJhbnNsYXRlWCh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoU3VlLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKE11ZSx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhFdWUsdCl9bG9jYWxUb1dvcmxkKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX13b3JsZFRvTG9jYWwodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHFkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LHIsbil7dC5pc1ZlY3RvcjM/eVYuY29weSh0KTp5Vi5zZXQodCxyLG4pO2xldCBpPXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLGtQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/cWQubG9va0F0KGtQLHlWLHRoaXMudXApOnFkLmxvb2tBdCh5VixrUCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHFkKSxpJiYocWQuZXh0cmFjdFJvdGF0aW9uKGkubWF0cml4V29ybGQpLE0zLnNldEZyb21Sb3RhdGlvbk1hdHJpeChxZCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zLmludmVydCgpKSl9YWRkKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCByPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0aGlzLmFkZChhcmd1bWVudHNbcl0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyh0LnBhcmVudCE9PW51bGwmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQocGZyKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbbl0pO3JldHVybiB0aGlzfWxldCByPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4gciE9PS0xJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShyLDEpLHQuZGlzcGF0Y2hFdmVudChUdWUpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IHI9dGhpcy5jaGlsZHJlblt0XTtyLnBhcmVudD1udWxsLHIuZGlzcGF0Y2hFdmVudChUdWUpfXJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXN9YXR0YWNoKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpLHQucGFyZW50IT09bnVsbCYmKHQucGFyZW50LnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KHFkKSx0aGlzLmFkZCh0KSx0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKSx0aGlzfWdldE9iamVjdEJ5SWQodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgiaWQiLHQpfWdldE9iamVjdEJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIix0KX1nZXRPYmplY3RCeVByb3BlcnR5KHQscil7aWYodGhpc1t0XT09PXIpcmV0dXJuIHRoaXM7Zm9yKGxldCBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPGk7bisrKXtsZXQgYT10aGlzLmNoaWxkcmVuW25dLmdldE9iamVjdEJ5UHJvcGVydHkodCxyKTtpZihhIT09dm9pZCAwKXJldHVybiBhfX1nZXRXb3JsZFBvc2l0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKX1nZXRXb3JsZFF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHQsaGZyKSx0fWdldFdvcmxkU2NhbGUodCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLGZmcix0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCByPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KHJbOF0scls5XSxyWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCByPXRoaXMucGFyZW50O3IhPT1udWxsJiYodChyKSxyLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQscil7bGV0IG49dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZuIT09bnVsbCYmbi51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCkscj09PSEwKXtsZXQgaT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixuPXt9O3ImJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxuLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCBpPXt9O2kudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoaS5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKGkucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoaS5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKGkucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxpLmxheWVycz10aGlzLmxheWVycy5tYXNrLGkubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKGkubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihpLnR5cGU9Ikluc3RhbmNlZE1lc2giLGkuY291bnQ9dGhpcy5jb3VudCxpLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKGkuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBvKHMsbCl7cmV0dXJuIHNbbC51dWlkXT09PXZvaWQgMCYmKHNbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9pLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihpLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihpLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtpLmdlb21ldHJ5PW8odC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBzPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihzIT09dm9pZCAwJiZzLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9cy5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107byh0LnNoYXBlcyxoKX1lbHNlIG8odC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKGkuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxpLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYobyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxpLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IHM9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKXMucHVzaChvKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtpLm1hdGVyaWFsPXN9ZWxzZSBpLm1hdGVyaWFsPW8odC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7aS5jaGlsZHJlbj1bXTtmb3IobGV0IHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylpLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltzXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe2kuYW5pbWF0aW9ucz1bXTtmb3IobGV0IHM9MDtzPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7cysrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbc107aS5hbmltYXRpb25zLnB1c2gobyh0LmFuaW1hdGlvbnMsbCkpfX1pZihyKXtsZXQgcz1hKHQuZ2VvbWV0cmllcyksbD1hKHQubWF0ZXJpYWxzKSxjPWEodC50ZXh0dXJlcyksdT1hKHQuaW1hZ2VzKSxoPWEodC5zaGFwZXMpLGY9YSh0LnNrZWxldG9ucykscD1hKHQuYW5pbWF0aW9ucyk7cy5sZW5ndGg+MCYmKG4uZ2VvbWV0cmllcz1zKSxsLmxlbmd0aD4wJiYobi5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKG4udGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKG4uaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihuLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYobi5za2VsZXRvbnM9ZikscC5sZW5ndGg+MCYmKG4uYW5pbWF0aW9ucz1wKX1yZXR1cm4gbi5vYmplY3Q9aSxuO2Z1bmN0aW9uIGEocyl7bGV0IGw9W107Zm9yKGxldCBjIGluIHMpe2xldCB1PXNbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LHI9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxyPT09ITApZm9yKGxldCBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe2xldCBpPXQuY2hpbGRyZW5bbl07dGhpcy5hZGQoaS5jbG9uZSgpKX1yZXR1cm4gdGhpc319O29yLkRlZmF1bHRVcD1uZXcgaigwLDEsMCk7b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7b3IucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIG9oPW5ldyBqLEdkPW5ldyBqLHR1dD1uZXcgaixXZD1uZXcgaixFMz1uZXcgaixUMz1uZXcgaixDdWU9bmV3IGosZXV0PW5ldyBqLHJ1dD1uZXcgaixudXQ9bmV3IGosb2k9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3RoaXMuYT10LHRoaXMuYj1yLHRoaXMuYz1ufXN0YXRpYyBnZXROb3JtYWwodCxyLG4saSl7aS5zdWJWZWN0b3JzKG4sciksb2guc3ViVmVjdG9ycyh0LHIpLGkuY3Jvc3Mob2gpO2xldCBvPWkubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP2kubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOmkuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQscixuLGksbyl7b2guc3ViVmVjdG9ycyhpLHIpLEdkLnN1YlZlY3RvcnMobixyKSx0dXQuc3ViVmVjdG9ycyh0LHIpO2xldCBhPW9oLmRvdChvaCkscz1vaC5kb3QoR2QpLGw9b2guZG90KHR1dCksYz1HZC5kb3QoR2QpLHU9R2QuZG90KHR1dCksaD1hKmMtcypzO2lmKGg9PT0wKXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IGY9MS9oLHA9KGMqbC1zKnUpKmYsZD0oYSp1LXMqbCkqZjtyZXR1cm4gby5zZXQoMS1wLWQsZCxwKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LHIsbixpKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxyLG4saSxXZCksV2QueD49MCYmV2QueT49MCYmV2QueCtXZC55PD0xfXN0YXRpYyBnZXRVVih0LHIsbixpLG8sYSxzLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LHIsbixpLFdkKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sV2QueCksbC5hZGRTY2FsZWRWZWN0b3IoYSxXZC55KSxsLmFkZFNjYWxlZFZlY3RvcihzLFdkLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxyLG4saSl7cmV0dXJuIG9oLnN1YlZlY3RvcnMobixyKSxHZC5zdWJWZWN0b3JzKHQsciksb2guY3Jvc3MoR2QpLmRvdChpKTwwfXNldCh0LHIsbil7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KHIpLHRoaXMuYy5jb3B5KG4pLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5jb3B5KHRbcl0pLHRoaXMuYi5jb3B5KHRbbl0pLHRoaXMuYy5jb3B5KHRbaV0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsciksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxuKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBvaC5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLEdkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksb2guY3Jvc3MoR2QpLmxlbmd0aCgpKi41fWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIG9pLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LHIpe3JldHVybiBvaS5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxyKX1nZXRVVih0LHIsbixpLG8pe3JldHVybiBvaS5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLHIsbixpLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIG9pLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gb2kuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7bGV0IG49dGhpcy5hLGk9dGhpcy5iLG89dGhpcy5jLGEscztFMy5zdWJWZWN0b3JzKGksbiksVDMuc3ViVmVjdG9ycyhvLG4pLGV1dC5zdWJWZWN0b3JzKHQsbik7bGV0IGw9RTMuZG90KGV1dCksYz1UMy5kb3QoZXV0KTtpZihsPD0wJiZjPD0wKXJldHVybiByLmNvcHkobik7cnV0LnN1YlZlY3RvcnModCxpKTtsZXQgdT1FMy5kb3QocnV0KSxoPVQzLmRvdChydXQpO2lmKHU+PTAmJmg8PXUpcmV0dXJuIHIuY29weShpKTtsZXQgZj1sKmgtdSpjO2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIGE9bC8obC11KSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpO251dC5zdWJWZWN0b3JzKHQsbyk7bGV0IHA9RTMuZG90KG51dCksZD1UMy5kb3QobnV0KTtpZihkPj0wJiZwPD1kKXJldHVybiByLmNvcHkobyk7bGV0IGc9cCpjLWwqZDtpZihnPD0wJiZjPj0wJiZkPD0wKXJldHVybiBzPWMvKGMtZCksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihUMyxzKTtsZXQgXz11KmQtcCpoO2lmKF88PTAmJmgtdT49MCYmcC1kPj0wKXJldHVybiBDdWUuc3ViVmVjdG9ycyhvLGkpLHM9KGgtdSkvKGgtdSsocC1kKSksci5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihDdWUscyk7bGV0IHk9MS8oXytnK2YpO3JldHVybiBhPWcqeSxzPWYqeSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpLmFkZFNjYWxlZFZlY3RvcihUMyxzKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxkZnI9MCxxaT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpkZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPVYzLHRoaXMuc2lkZT1JMSx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9UGh0LHRoaXMuYmxlbmREc3Q9SWh0LHRoaXMuYmxlbmRFcXVhdGlvbj1NMSx0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPWlVLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9T2ZlLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW5VLHRoaXMuc3RlbmNpbFpGYWlsPW5VLHRoaXMuc3RlbmNpbFpQYXNzPW5VLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCByIGluIHQpe2xldCBuPXRbcl07aWYobj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrcisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKHI9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PUFodDtjb250aW51ZX1sZXQgaT10aGlzW3JdO2lmKGk9PT12b2lkIDApe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrcisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpO2NvbnRpbnVlfWkmJmkuaXNDb2xvcj9pLnNldChuKTppJiZpLmlzVmVjdG9yMyYmbiYmbi5pc1ZlY3RvcjM/aS5jb3B5KG4pOnRoaXNbcl09bn19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIjtyJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07bi51dWlkPXRoaXMudXVpZCxuLnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYobi5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYobi5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx0aGlzLnJvdWdobmVzcyE9PXZvaWQgMCYmKG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx0aGlzLm1ldGFsbmVzcyE9PXZvaWQgMCYmKG4ubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx0aGlzLnNoZWVuIT09dm9pZCAwJiYobi5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYobi5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdGhpcy5zaGVlblJvdWdobmVzcyE9PXZvaWQgMCYmKG4uc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYobi5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiZ0aGlzLmVtaXNzaXZlSW50ZW5zaXR5IT09MSYmKG4uZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYobi5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYobi5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYobi5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdGhpcy5zaGluaW5lc3MhPT12b2lkIDAmJihuLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdGhpcy5jbGVhcmNvYXQhPT12b2lkIDAmJihuLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MhPT12b2lkIDAmJihuLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobi5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihuLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihuLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLG4ubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihuLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsbi5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihuLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLG4uYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYobi5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxuLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYobi5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsbi5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKG4ubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKG4uZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdGhpcy5jb21iaW5lIT09dm9pZCAwJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSkpLHRoaXMuZW52TWFwSW50ZW5zaXR5IT09dm9pZCAwJiYobi5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHRoaXMucmVmbGVjdGl2aXR5IT09dm9pZCAwJiYobi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHRoaXMucmVmcmFjdGlvblJhdGlvIT09dm9pZCAwJiYobi5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRyYW5zbWlzc2lvbiE9PXZvaWQgMCYmKG4udHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYobi50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudGhpY2tuZXNzIT09dm9pZCAwJiYobi50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihuLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdGhpcy5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdGhpcy5zaXplIT09dm9pZCAwJiYobi5zaXplPXRoaXMuc2l6ZSksdGhpcy5zaGFkb3dTaWRlIT09bnVsbCYmKG4uc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHRoaXMuc2l6ZUF0dGVudWF0aW9uIT09dm9pZCAwJiYobi5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLHRoaXMuYmxlbmRpbmchPT1WMyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksdGhpcy5zaWRlIT09STEmJihuLnNpZGU9dGhpcy5zaWRlKSx0aGlzLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPSEwKSx0aGlzLm9wYWNpdHk8MSYmKG4ub3BhY2l0eT10aGlzLm9wYWNpdHkpLHRoaXMudHJhbnNwYXJlbnQ9PT0hMCYmKG4udHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCksbi5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmMsbi5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3Qsbi5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZSxuLmNvbG9yV3JpdGU9dGhpcy5jb2xvcldyaXRlLG4uYWxwaGFXcml0ZT10aGlzLmFscGhhV3JpdGUsbi5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsbi5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxuLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsbi5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixuLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxuLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsbi5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsbi5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmdGhpcy5yb3RhdGlvbiE9PTAmJihuLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLHRoaXMucG9seWdvbk9mZnNldD09PSEwJiYobi5wb2x5Z29uT2Zmc2V0PSEwKSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IhPT0wJiYobi5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMhPT0wJiYobi5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiZ0aGlzLmxpbmV3aWR0aCE9PTEmJihuLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdGhpcy5kYXNoU2l6ZSE9PXZvaWQgMCYmKG4uZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdGhpcy5nYXBTaXplIT09dm9pZCAwJiYobi5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdGhpcy5zY2FsZSE9PXZvaWQgMCYmKG4uc2NhbGU9dGhpcy5zY2FsZSksdGhpcy5kaXRoZXJpbmc9PT0hMCYmKG4uZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYobi5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLHRoaXMuYWxwaGFUb0NvdmVyYWdlPT09ITAmJihuLmFscGhhVG9Db3ZlcmFnZT10aGlzLmFscGhhVG9Db3ZlcmFnZSksdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9PT0hMCYmKG4ucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKSx0aGlzLndpcmVmcmFtZT09PSEwJiYobi53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPjEmJihuLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCksdGhpcy53aXJlZnJhbWVMaW5lY2FwIT09InJvdW5kIiYmKG4ud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApLHRoaXMud2lyZWZyYW1lTGluZWpvaW4hPT0icm91bmQiJiYobi53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKSx0aGlzLmZsYXRTaGFkaW5nPT09ITAmJihuLmZsYXRTaGFkaW5nPXRoaXMuZmxhdFNoYWRpbmcpLHRoaXMudmlzaWJsZT09PSExJiYobi52aXNpYmxlPSExKSx0aGlzLnRvbmVNYXBwZWQ9PT0hMSYmKG4udG9uZU1hcHBlZD0hMSksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTtmdW5jdGlvbiBpKG8pe2xldCBhPVtdO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1vW3NdO2RlbGV0ZSBsLm1ldGFkYXRhLGEucHVzaChsKX1yZXR1cm4gYX1pZihyKXtsZXQgbz1pKHQudGV4dHVyZXMpLGE9aSh0LmltYWdlcyk7by5sZW5ndGg+MCYmKG4udGV4dHVyZXM9byksYS5sZW5ndGg+MCYmKG4uaW1hZ2VzPWEpfXJldHVybiBufWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCByPXQuY2xpcHBpbmdQbGFuZXMsbj1udWxsO2lmKHIhPT1udWxsKXtsZXQgaT1yLmxlbmd0aDtuPW5ldyBBcnJheShpKTtmb3IobGV0IG89MDtvIT09aTsrK28pbltvXT1yW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9bix0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfX07cWkucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIHNoPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtzaC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgSW49bmV3IGosdlY9bmV3IEx0LEplPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLm5vcm1hbGl6ZWQ9bj09PSEwLHRoaXMudXNhZ2U9VzMsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQscixuKXt0Kj10aGlzLml0ZW1TaXplLG4qPXIuaXRlbVNpemU7Zm9yKGxldCBpPTAsbz10aGlzLml0ZW1TaXplO2k8bztpKyspdGhpcy5hcnJheVt0K2ldPXIuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgbmUpLHJbbisrXT1hLnIscltuKytdPWEuZyxyW24rK109YS5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgTHQpLHJbbisrXT1hLngscltuKytdPWEueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IGopLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgZW4pLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56LHJbbisrXT1hLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKXZWLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxyKSx2Vi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShyLHZWLngsdlYueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsciksSW4uYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKHIsSW4ueCxJbi55LEluLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi54PXRoaXMuZ2V0WChyKSxJbi55PXRoaXMuZ2V0WShyKSxJbi56PXRoaXMuZ2V0WihyKSxJbi5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspSW4ueD10aGlzLmdldFgociksSW4ueT10aGlzLmdldFkociksSW4uej10aGlzLmdldFoociksSW4uYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUluLng9dGhpcy5nZXRYKHIpLEluLnk9dGhpcy5nZXRZKHIpLEluLno9dGhpcy5nZXRaKHIpLEluLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihyLEluLngsSW4ueSxJbi56KTtyZXR1cm4gdGhpc31zZXQodCxyPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LHIpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxyKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPXIsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPXIsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPXIsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPXIsdGhpc31zZXRYWSh0LHIsbil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpc31zZXRYWVpXKHQscixuLGksbyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1XMyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O0plLnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgY1U9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDhBcnJheSh0KSxyLG4pfX0sdVU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQ4QXJyYXkodCkscixuKX19LGhVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxyLG4pfX0sZlU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDE2QXJyYXkodCkscixuKX19LCQzPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxyLG4pfX0scFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDMyQXJyYXkodCkscixuKX19LEszPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxyLG4pfX0sZFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLHIsbil9fTtkVS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwO3ZhciB4ZT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQzMkFycmF5KHQpLHIsbil9fSxtVT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQ2NEFycmF5KHQpLHIsbil9fSxtZnI9MCxYYz1uZXcgTWUsaXV0PW5ldyBvcixDMz1uZXcgaixSbD1uZXcgdGEsUlA9bmV3IHRhLExvPW5ldyBqLFBlPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOm1mcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KEJmZSh0KT9LMzokMykodCwxKTp0aGlzLmluZGV4PXQsdGhpc31nZXRBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XX1zZXRBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdPXIsdGhpc31kZWxldGVBdHRyaWJ1dGUodCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbdF0sdGhpc31oYXNBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XSE9PXZvaWQgMH1hZGRHcm91cCh0LHIsbj0wKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDp0LGNvdW50OnIsbWF0ZXJpYWxJbmRleDpufSl9Y2xlYXJHcm91cHMoKXt0aGlzLmdyb3Vwcz1bXX1zZXREcmF3UmFuZ2UodCxyKXt0aGlzLmRyYXdSYW5nZS5zdGFydD10LHRoaXMuZHJhd1JhbmdlLmNvdW50PXJ9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtyIT09dm9pZCAwJiYoci5hcHBseU1hdHJpeDQodCksci5uZWVkc1VwZGF0ZT0hMCk7bGV0IG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtpZihuIT09dm9pZCAwKXtsZXQgbz1uZXcga2koKS5nZXROb3JtYWxNYXRyaXgodCk7bi5hcHBseU5vcm1hbE1hdHJpeChvKSxuLm5lZWRzVXBkYXRlPSEwfWxldCBpPXRoaXMuYXR0cmlidXRlcy50YW5nZW50O3JldHVybiBpIT09dm9pZCAwJiYoaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksaS5uZWVkc1VwZGF0ZT0hMCksdGhpcy5ib3VuZGluZ0JveCE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ1NwaGVyZSE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpc31hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvblgodCksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9cm90YXRlWSh0KXtyZXR1cm4gWGMubWFrZVJvdGF0aW9uWSh0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31yb3RhdGVaKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25aKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXRyYW5zbGF0ZSh0LHIsbil7cmV0dXJuIFhjLm1ha2VUcmFuc2xhdGlvbih0LHIsbiksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9c2NhbGUodCxyLG4pe3JldHVybiBYYy5tYWtlU2NhbGUodCxyLG4pLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfWxvb2tBdCh0KXtyZXR1cm4gaXV0Lmxvb2tBdCh0KSxpdXQudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoaXV0Lm1hdHJpeCksdGhpc31jZW50ZXIoKXtyZXR1cm4gdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihDMykubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoQzMueCxDMy55LEMzLnopLHRoaXN9c2V0RnJvbVBvaW50cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2xldCBvPXRbbl07ci5wdXNoKG8ueCxvLnksby56fHwwKX1yZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSksdGhpc31jb21wdXRlQm91bmRpbmdCb3goKXt0aGlzLmJvdW5kaW5nQm94PT09bnVsbCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IHRhKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgaigtMS8wLC0xLzAsLTEvMCksbmV3IGooMS8wLDEvMCwxLzApKTtyZXR1cm59aWYodCE9PXZvaWQgMCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1yW25dO1JsLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUobyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixSbC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbyksTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxSbC5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWF4KSl9fWVsc2UgdGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTsoaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueCl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnkpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi56KSkmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBDb21wdXRlZCBtaW4vbWF4IGhhdmUgTmFOIHZhbHVlcy4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX1jb21wdXRlQm91bmRpbmdTcGhlcmUoKXt0aGlzLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IFpmKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgaiwxLzApO3JldHVybn1pZih0KXtsZXQgbj10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihSbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dO1JQLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyhSbC5taW4sUlAubWluKSxSbC5leHBhbmRCeVBvaW50KExvKSxMby5hZGRWZWN0b3JzKFJsLm1heCxSUC5tYXgpLFJsLmV4cGFuZEJ5UG9pbnQoTG8pKTooUmwuZXhwYW5kQnlQb2ludChSUC5taW4pLFJsLmV4cGFuZEJ5UG9pbnQoUlAubWF4KSl9UmwuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBvPTAsYT10LmNvdW50O288YTtvKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSk7aWYocilmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspe2xldCBzPXJbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9cy5jb3VudDtjPHU7YysrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxsJiYoQzMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLExvLmFkZChDMykpLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KGkpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmF0dHJpYnV0ZXM7aWYodD09PW51bGx8fHIucG9zaXRpb249PT12b2lkIDB8fHIubm9ybWFsPT09dm9pZCAwfHxyLnV2PT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGZhaWxlZC4gTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIChpbmRleCwgcG9zaXRpb24sIG5vcm1hbCBvciB1dikiKTtyZXR1cm59bGV0IG49dC5hcnJheSxpPXIucG9zaXRpb24uYXJyYXksbz1yLm5vcm1hbC5hcnJheSxhPXIudXYuYXJyYXkscz1pLmxlbmd0aC8zO3IudGFuZ2VudD09PXZvaWQgMCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBKZShuZXcgRmxvYXQzMkFycmF5KDQqcyksNCkpO2xldCBsPXIudGFuZ2VudC5hcnJheSxjPVtdLHU9W107Zm9yKGxldCBCPTA7QjxzO0IrKyljW0JdPW5ldyBqLHVbQl09bmV3IGo7bGV0IGg9bmV3IGosZj1uZXcgaixwPW5ldyBqLGQ9bmV3IEx0LGc9bmV3IEx0LF89bmV3IEx0LHk9bmV3IGoseD1uZXcgajtmdW5jdGlvbiBiKEIsSSxMKXtoLmZyb21BcnJheShpLEIqMyksZi5mcm9tQXJyYXkoaSxJKjMpLHAuZnJvbUFycmF5KGksTCozKSxkLmZyb21BcnJheShhLEIqMiksZy5mcm9tQXJyYXkoYSxJKjIpLF8uZnJvbUFycmF5KGEsTCoyKSxmLnN1YihoKSxwLnN1YihoKSxnLnN1YihkKSxfLnN1YihkKTtsZXQgUj0xLyhnLngqXy55LV8ueCpnLnkpOyFpc0Zpbml0ZShSKXx8KHkuY29weShmKS5tdWx0aXBseVNjYWxhcihfLnkpLmFkZFNjYWxlZFZlY3RvcihwLC1nLnkpLm11bHRpcGx5U2NhbGFyKFIpLHguY29weShwKS5tdWx0aXBseVNjYWxhcihnLngpLmFkZFNjYWxlZFZlY3RvcihmLC1fLngpLm11bHRpcGx5U2NhbGFyKFIpLGNbQl0uYWRkKHkpLGNbSV0uYWRkKHkpLGNbTF0uYWRkKHkpLHVbQl0uYWRkKHgpLHVbSV0uYWRkKHgpLHVbTF0uYWRkKHgpKX1sZXQgUz10aGlzLmdyb3VwcztTLmxlbmd0aD09PTAmJihTPVt7c3RhcnQ6MCxjb3VudDpuLmxlbmd0aH1dKTtmb3IobGV0IEI9MCxJPVMubGVuZ3RoO0I8STsrK0Ipe2xldCBMPVNbQl0sUj1MLnN0YXJ0LEY9TC5jb3VudDtmb3IobGV0IHo9UixVPVIrRjt6PFU7eis9MyliKG5beiswXSxuW3orMV0sblt6KzJdKX1sZXQgQz1uZXcgaixQPW5ldyBqLGs9bmV3IGosTz1uZXcgajtmdW5jdGlvbiBEKEIpe2suZnJvbUFycmF5KG8sQiozKSxPLmNvcHkoayk7bGV0IEk9Y1tCXTtDLmNvcHkoSSksQy5zdWIoay5tdWx0aXBseVNjYWxhcihrLmRvdChJKSkpLm5vcm1hbGl6ZSgpLFAuY3Jvc3NWZWN0b3JzKE8sSSk7bGV0IFI9UC5kb3QodVtCXSk8MD8tMToxO2xbQio0XT1DLngsbFtCKjQrMV09Qy55LGxbQio0KzJdPUMueixsW0IqNCszXT1SfWZvcihsZXQgQj0wLEk9Uy5sZW5ndGg7QjxJOysrQil7bGV0IEw9U1tCXSxSPUwuc3RhcnQsRj1MLmNvdW50O2ZvcihsZXQgej1SLFU9UitGO3o8VTt6Kz0zKUQoblt6KzBdKSxEKG5beisxXSksRChuW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihyIT09dm9pZCAwKXtsZXQgbj10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYobj09PXZvaWQgMCluPW5ldyBKZShuZXcgRmxvYXQzMkFycmF5KHIuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbik7ZWxzZSBmb3IobGV0IGY9MCxwPW4uY291bnQ7ZjxwO2YrKyluLnNldFhZWihmLDAsMCwwKTtsZXQgaT1uZXcgaixvPW5ldyBqLGE9bmV3IGoscz1uZXcgaixsPW5ldyBqLGM9bmV3IGosdT1uZXcgaixoPW5ldyBqO2lmKHQpZm9yKGxldCBmPTAscD10LmNvdW50O2Y8cDtmKz0zKXtsZXQgZD10LmdldFgoZiswKSxnPXQuZ2V0WChmKzEpLF89dC5nZXRYKGYrMik7aS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZCksby5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZyksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsXyksdS5zdWJWZWN0b3JzKGEsbyksaC5zdWJWZWN0b3JzKGksbyksdS5jcm9zcyhoKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUobixkKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUobixnKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUobixfKSxzLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxuLnNldFhZWihkLHMueCxzLnkscy56KSxuLnNldFhZWihnLGwueCxsLnksbC56KSxuLnNldFhZWihfLGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLHA9ci5jb3VudDtmPHA7Zis9MylpLmZyb21CdWZmZXJBdHRyaWJ1dGUocixmKzApLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGYrMSksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZisyKSx1LnN1YlZlY3RvcnMoYSxvKSxoLnN1YlZlY3RvcnMoaSxvKSx1LmNyb3NzKGgpLG4uc2V0WFlaKGYrMCx1LngsdS55LHUueiksbi5zZXRYWVooZisxLHUueCx1LnksdS56KSxuLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLG4ubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQscil7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59cj09PXZvaWQgMCYmKHI9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBpIGluIG4pe2lmKHQuYXR0cmlidXRlc1tpXT09PXZvaWQgMCljb250aW51ZTtsZXQgYT1uW2ldLmFycmF5LHM9dC5hdHRyaWJ1dGVzW2ldLGw9cy5hcnJheSxjPXMuaXRlbVNpemUqcix1PU1hdGgubWluKGwubGVuZ3RoLGEubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylhW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCByPTAsbj10LmNvdW50O3I8bjtyKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLExvLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKHIsTG8ueCxMby55LExvLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQocyxsKXtsZXQgYz1zLmFycmF5LHU9cy5pdGVtU2l6ZSxoPXMubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLHA9MCxkPTA7Zm9yKGxldCBnPTAsXz1sLmxlbmd0aDtnPF87ZysrKXtzLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/cD1sW2ddKnMuZGF0YS5zdHJpZGUrcy5vZmZzZXQ6cD1sW2ddKnU7Zm9yKGxldCB5PTA7eTx1O3krKylmW2QrK109Y1twKytdfXJldHVybiBuZXcgSmUoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IHI9bmV3IFBlLG49dGhpcy5pbmRleC5hcnJheSxpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXSxjPXQobCxuKTtyLnNldEF0dHJpYnV0ZShzLGMpfWxldCBvPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1bXSxjPW9bc107Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLHA9dChmLG4pO2wucHVzaChwKX1yLm1vcnBoQXR0cmlidXRlc1tzXT1sfXIubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10aGlzLmdyb3Vwcztmb3IobGV0IHM9MCxsPWEubGVuZ3RoO3M8bDtzKyspe2xldCBjPWFbc107ci5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gcn10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgcj10aGlzLmluZGV4O3IhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOnIuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLmFycmF5KX0pO2xldCBuPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gbil7bGV0IGM9bltsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCBpPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IHA9Y1toXTt1LnB1c2gocC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKGlbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1pLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgYT10aGlzLmdyb3VwczthLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKSk7bGV0IHM9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gcyE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpzLmNlbnRlci50b0FycmF5KCkscmFkaXVzOnMucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IHI9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgbj10LmluZGV4O24hPT1udWxsJiZ0aGlzLnNldEluZGV4KG4uY2xvbmUocikpO2xldCBpPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gaSl7bGV0IHU9aVtjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUocikpfWxldCBvPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBvKXtsZXQgdT1bXSxoPW9bY107Zm9yKGxldCBmPTAscD1oLmxlbmd0aDtmPHA7ZisrKXUucHVzaChoW2ZdLmNsb25lKHIpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PWEubGVuZ3RoO2M8dTtjKyspe2xldCBoPWFbY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgcz10LmJvdW5kaW5nQm94O3MhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1zLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtQZS5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgQXVlPW5ldyBNZSxBMz1uZXcgSmYsb3V0PW5ldyBaZixSMD1uZXcgaixOMD1uZXcgaixEMD1uZXcgaixhdXQ9bmV3IGosc3V0PW5ldyBqLGx1dD1uZXcgaix4Vj1uZXcgaixiVj1uZXcgaix3Vj1uZXcgaixTVj1uZXcgTHQsTVY9bmV3IEx0LEVWPW5ldyBMdCxjdXQ9bmV3IGosVFY9bmV3IGosdGk9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBzaCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxyKXtsZXQgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRlcmlhbCxvPXRoaXMubWF0cml4V29ybGQ7aWYoaT09PXZvaWQgMHx8KG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLG91dC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLG91dC5hcHBseU1hdHJpeDQobyksdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShvdXQpPT09ITEpfHwoQXVlLmNvcHkobykuaW52ZXJ0KCksQTMuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KEF1ZSksbi5ib3VuZGluZ0JveCE9PW51bGwmJkEzLmludGVyc2VjdHNCb3gobi5ib3VuZGluZ0JveCk9PT0hMSkpcmV0dXJuO2xldCBhO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHM9bi5pbmRleCxsPW4uYXR0cmlidXRlcy5wb3NpdGlvbixjPW4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHU9bi5tb3JwaFRhcmdldHNSZWxhdGl2ZSxoPW4uYXR0cmlidXRlcy51dixmPW4uYXR0cmlidXRlcy51djIscD1uLmdyb3VwcyxkPW4uZHJhd1JhbmdlO2lmKHMhPT1udWxsKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBnPTAsXz1wLmxlbmd0aDtnPF87ZysrKXtsZXQgeT1wW2ddLHg9aVt5Lm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgoeS5zdGFydCxkLnN0YXJ0KSxTPU1hdGgubWluKHMuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LGQuc3RhcnQrZC5jb3VudCkpO2ZvcihsZXQgQz1iLFA9UztDPFA7Qys9Myl7bGV0IGs9cy5nZXRYKEMpLE89cy5nZXRYKEMrMSksRD1zLmdldFgoQysyKTthPUNWKHRoaXMseCx0LEEzLGwsYyx1LGgsZixrLE8sRCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoQy8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD15Lm1hdGVyaWFsSW5kZXgsci5wdXNoKGEpKX19ZWxzZXtsZXQgZz1NYXRoLm1heCgwLGQuc3RhcnQpLF89TWF0aC5taW4ocy5jb3VudCxkLnN0YXJ0K2QuY291bnQpO2ZvcihsZXQgeT1nLHg9Xzt5PHg7eSs9Myl7bGV0IGI9cy5nZXRYKHkpLFM9cy5nZXRYKHkrMSksQz1zLmdldFgoeSsyKTthPUNWKHRoaXMsaSx0LEEzLGwsYyx1LGgsZixiLFMsQyksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoeS8zKSxyLnB1c2goYSkpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGc9MCxfPXAubGVuZ3RoO2c8XztnKyspe2xldCB5PXBbZ10seD1pW3kubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heCh5LnN0YXJ0LGQuc3RhcnQpLFM9TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbih5LnN0YXJ0K3kuY291bnQsZC5zdGFydCtkLmNvdW50KSk7Zm9yKGxldCBDPWIsUD1TO0M8UDtDKz0zKXtsZXQgaz1DLE89QysxLEQ9QysyO2E9Q1YodGhpcyx4LHQsQTMsbCxjLHUsaCxmLGssTyxEKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihDLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXkubWF0ZXJpYWxJbmRleCxyLnB1c2goYSkpfX1lbHNle2xldCBnPU1hdGgubWF4KDAsZC5zdGFydCksXz1NYXRoLm1pbihsLmNvdW50LGQuc3RhcnQrZC5jb3VudCk7Zm9yKGxldCB5PWcseD1fO3k8eDt5Kz0zKXtsZXQgYj15LFM9eSsxLEM9eSsyO2E9Q1YodGhpcyxpLHQsQTMsbCxjLHUsaCxmLGIsUyxDKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcih5LzMpLHIucHVzaChhKSl9fX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O3RpLnByb3RvdHlwZS5pc01lc2g9ITA7ZnVuY3Rpb24gZ2ZyKGUsdCxyLG4saSxvLGEscyl7bGV0IGw7aWYodC5zaWRlPT09SWk/bD1uLmludGVyc2VjdFRyaWFuZ2xlKGEsbyxpLCEwLHMpOmw9bi5pbnRlcnNlY3RUcmlhbmdsZShpLG8sYSx0LnNpZGUhPT1MMSxzKSxsPT09bnVsbClyZXR1cm4gbnVsbDtUVi5jb3B5KHMpLFRWLmFwcGx5TWF0cml4NChlLm1hdHJpeFdvcmxkKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhUVik7cmV0dXJuIGM8ci5uZWFyfHxjPnIuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6VFYuY2xvbmUoKSxvYmplY3Q6ZX19ZnVuY3Rpb24gQ1YoZSx0LHIsbixpLG8sYSxzLGwsYyx1LGgpe1IwLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxjKSxOMC5mcm9tQnVmZmVyQXR0cmlidXRlKGksdSksRDAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGgpO2xldCBmPWUubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKG8mJmYpe3hWLnNldCgwLDAsMCksYlYuc2V0KDAsMCwwKSx3Vi5zZXQoMCwwLDApO2ZvcihsZXQgZD0wLGc9by5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXSx5PW9bZF07XyE9PTAmJihhdXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LGMpLHN1dC5mcm9tQnVmZmVyQXR0cmlidXRlKHksdSksbHV0LmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxoKSxhPyh4Vi5hZGRTY2FsZWRWZWN0b3IoYXV0LF8pLGJWLmFkZFNjYWxlZFZlY3RvcihzdXQsXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dCxfKSk6KHhWLmFkZFNjYWxlZFZlY3RvcihhdXQuc3ViKFIwKSxfKSxiVi5hZGRTY2FsZWRWZWN0b3Ioc3V0LnN1YihOMCksXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dC5zdWIoRDApLF8pKSl9UjAuYWRkKHhWKSxOMC5hZGQoYlYpLEQwLmFkZCh3Vil9ZS5pc1NraW5uZWRNZXNoJiYoZS5ib25lVHJhbnNmb3JtKGMsUjApLGUuYm9uZVRyYW5zZm9ybSh1LE4wKSxlLmJvbmVUcmFuc2Zvcm0oaCxEMCkpO2xldCBwPWdmcihlLHQscixuLFIwLE4wLEQwLGN1dCk7aWYocCl7cyYmKFNWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxNVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsdSksRVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGgpLHAudXY9b2kuZ2V0VVYoY3V0LFIwLE4wLEQwLFNWLE1WLEVWLG5ldyBMdCkpLGwmJihTVi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksTVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLEVWLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxwLnV2Mj1vaS5nZXRVVihjdXQsUjAsTjAsRDAsU1YsTVYsRVYsbmV3IEx0KSk7bGV0IGQ9e2E6YyxiOnUsYzpoLG5vcm1hbDpuZXcgaixtYXRlcmlhbEluZGV4OjB9O29pLmdldE5vcm1hbChSMCxOMCxEMCxkLm5vcm1hbCkscC5mYWNlPWR9cmV0dXJuIHB9dmFyIFFmPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xLG89MSxhPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLGRlcHRoOm4sd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOm8sZGVwdGhTZWdtZW50czphfTtsZXQgcz10aGlzO2k9TWF0aC5mbG9vcihpKSxvPU1hdGguZmxvb3IobyksYT1NYXRoLmZsb29yKGEpO2xldCBsPVtdLGM9W10sdT1bXSxoPVtdLGY9MCxwPTA7ZCgieiIsInkiLCJ4IiwtMSwtMSxuLHIsdCxhLG8sMCksZCgieiIsInkiLCJ4IiwxLC0xLG4sciwtdCxhLG8sMSksZCgieCIsInoiLCJ5IiwxLDEsdCxuLHIsaSxhLDIpLGQoIngiLCJ6IiwieSIsMSwtMSx0LG4sLXIsaSxhLDMpLGQoIngiLCJ5IiwieiIsMSwtMSx0LHIsbixpLG8sNCksZCgieCIsInkiLCJ6IiwtMSwtMSx0LHIsLW4saSxvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGgsMikpO2Z1bmN0aW9uIGQoZyxfLHkseCxiLFMsQyxQLGssTyxEKXtsZXQgQj1TL2ssST1DL08sTD1TLzIsUj1DLzIsRj1QLzIsej1rKzEsVT1PKzEsVz0wLFo9MCxydD1uZXcgajtmb3IobGV0IG90PTA7b3Q8VTtvdCsrKXtsZXQgc3Q9b3QqSS1SO2ZvcihsZXQgU3Q9MDtTdDx6O1N0Kyspe2xldCBidD1TdCpCLUw7cnRbZ109YnQqeCxydFtfXT1zdCpiLHJ0W3ldPUYsYy5wdXNoKHJ0LngscnQueSxydC56KSxydFtnXT0wLHJ0W19dPTAscnRbeV09UD4wPzE6LTEsdS5wdXNoKHJ0LngscnQueSxydC56KSxoLnB1c2goU3QvayksaC5wdXNoKDEtb3QvTyksVys9MX19Zm9yKGxldCBvdD0wO290PE87b3QrKylmb3IobGV0IHN0PTA7c3Q8aztzdCsrKXtsZXQgU3Q9ZitzdCt6Km90LGJ0PWYrc3Qreioob3QrMSksTXQ9Zisoc3QrMSkreioob3QrMSksbHQ9Zisoc3QrMSkreipvdDtsLnB1c2goU3QsYnQsbHQpLGwucHVzaChidCxNdCxsdCksWis9Nn1zLmFkZEdyb3VwKHAsWixEKSxwKz1aLGYrPVd9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFFmKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gWjMoZSl7bGV0IHQ9e307Zm9yKGxldCByIGluIGUpe3Rbcl09e307Zm9yKGxldCBuIGluIGVbcl0pe2xldCBpPWVbcl1bbl07aSYmKGkuaXNDb2xvcnx8aS5pc01hdHJpeDN8fGkuaXNNYXRyaXg0fHxpLmlzVmVjdG9yMnx8aS5pc1ZlY3RvcjN8fGkuaXNWZWN0b3I0fHxpLmlzVGV4dHVyZXx8aS5pc1F1YXRlcm5pb24pP3Rbcl1bbl09aS5jbG9uZSgpOkFycmF5LmlzQXJyYXkoaSk/dFtyXVtuXT1pLnNsaWNlKCk6dFtyXVtuXT1pfX1yZXR1cm4gdH1mdW5jdGlvbiBUYShlKXtsZXQgdD17fTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49WjMoZVtyXSk7Zm9yKGxldCBpIGluIG4pdFtpXT1uW2ldfXJldHVybiB0fXZhciBWZmU9e2Nsb25lOlozLG1lcmdlOlRhfSxfZnI9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAseWZyPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsbGg9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPV9mcix0aGlzLmZyYWdtZW50U2hhZGVyPXlmcix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx0IT09dm9pZCAwJiYodC5hdHRyaWJ1dGVzIT09dm9pZCAwJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1aMyh0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7ci5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLHIudW5pZm9ybXM9e307Zm9yKGxldCBpIGluIHRoaXMudW5pZm9ybXMpe2xldCBhPXRoaXMudW5pZm9ybXNbaV0udmFsdWU7YSYmYS5pc1RleHR1cmU/ci51bmlmb3Jtc1tpXT17dHlwZToidCIsdmFsdWU6YS50b0pTT04odCkudXVpZH06YSYmYS5pc0NvbG9yP3IudW5pZm9ybXNbaV09e3R5cGU6ImMiLHZhbHVlOmEuZ2V0SGV4KCl9OmEmJmEuaXNWZWN0b3IyP3IudW5pZm9ybXNbaV09e3R5cGU6InYyIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc1ZlY3RvcjM/ci51bmlmb3Jtc1tpXT17dHlwZToidjMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yND9yLnVuaWZvcm1zW2ldPXt0eXBlOiJ2NCIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNNYXRyaXgzP3IudW5pZm9ybXNbaV09e3R5cGU6Im0zIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc01hdHJpeDQ/ci51bmlmb3Jtc1tpXT17dHlwZToibTQiLHZhbHVlOmEudG9BcnJheSgpfTpyLnVuaWZvcm1zW2ldPXt2YWx1ZTphfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoci5kZWZpbmVzPXRoaXMuZGVmaW5lcyksci52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsci5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBuPXt9O2ZvcihsZXQgaSBpbiB0aGlzLmV4dGVuc2lvbnMpdGhpcy5leHRlbnNpb25zW2ldPT09ITAmJihuW2ldPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihyLmV4dGVuc2lvbnM9bikscn19O2xoLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBSMT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IE1lLHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgTWUsdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgTWV9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgcj10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtcls4XSwtcls5XSwtclsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxyKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LHIpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07UjEucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBVaT1jbGFzcyBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKHQ9NTAscj0xLG49LjEsaT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9cix0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQscil7cmV0dXJuIHN1cGVyLmNvcHkodCxyKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgcj0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PVFQKjIqTWF0aC5hdGFuKHIpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oUDEqLjUqdGhpcy5mb3YpO3JldHVybiAuNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiBRUCoyKk1hdGguYXRhbihNYXRoLnRhbihQMSouNSp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQscixuLGksbyxhKXt0aGlzLmFzcGVjdD10L3IsdGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PXIsdGhpcy52aWV3Lm9mZnNldFg9bix0aGlzLnZpZXcub2Zmc2V0WT1pLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIscj10Kk1hdGgudGFuKFAxKi41KnRoaXMuZm92KS90aGlzLnpvb20sbj0yKnIsaT10aGlzLmFzcGVjdCpuLG89LS41KmksYT10aGlzLnZpZXc7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPWEuZnVsbFdpZHRoLGM9YS5mdWxsSGVpZ2h0O28rPWEub2Zmc2V0WCppL2wsci09YS5vZmZzZXRZKm4vYyxpKj1hLndpZHRoL2wsbio9YS5oZWlnaHQvY31sZXQgcz10aGlzLmZpbG1PZmZzZXQ7cyE9PTAmJihvKz10KnMvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8raSxyLHItbix0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5mb3Y9dGhpcy5mb3Ysci5vYmplY3Quem9vbT10aGlzLnpvb20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHIub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsci5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksci5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLHIub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LHJ9fTtVaS5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgUDM9OTAsSTM9MSxKMz1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsbi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTtyZXR1cm59dGhpcy5yZW5kZXJUYXJnZXQ9bjtsZXQgaT1uZXcgVWkoUDMsSTMsdCxyKTtpLmxheWVycz10aGlzLmxheWVycyxpLnVwLnNldCgwLC0xLDApLGkubG9va0F0KG5ldyBqKDEsMCwwKSksdGhpcy5hZGQoaSk7bGV0IG89bmV3IFVpKFAzLEkzLHQscik7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgaigtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgYT1uZXcgVWkoUDMsSTMsdCxyKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsMSksYS5sb29rQXQobmV3IGooMCwxLDApKSx0aGlzLmFkZChhKTtsZXQgcz1uZXcgVWkoUDMsSTMsdCxyKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsLTEpLHMubG9va0F0KG5ldyBqKDAsLTEsMCkpLHRoaXMuYWRkKHMpO2xldCBsPW5ldyBVaShQMyxJMyx0LHIpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IGooMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgVWkoUDMsSTMsdCxyKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBqKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LHIpe3RoaXMucGFyZW50PT09bnVsbCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBuPXRoaXMucmVuZGVyVGFyZ2V0LFtpLG8sYSxzLGwsY109dGhpcy5jaGlsZHJlbix1PXQueHIuZW5hYmxlZCxoPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBmPW4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7bi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChuLDApLHQucmVuZGVyKHIsaSksdC5zZXRSZW5kZXJUYXJnZXQobiwxKSx0LnJlbmRlcihyLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMiksdC5yZW5kZXIocixhKSx0LnNldFJlbmRlclRhcmdldChuLDMpLHQucmVuZGVyKHIscyksdC5zZXRSZW5kZXJUYXJnZXQobiw0KSx0LnJlbmRlcihyLGwpLG4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9Zix0LnNldFJlbmRlclRhcmdldChuLDUpLHQucmVuZGVyKHIsYyksdC5zZXRSZW5kZXJUYXJnZXQoaCksdC54ci5lbmFibGVkPXUsbi50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxIMD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe3Q9dCE9PXZvaWQgMD90OltdLHI9ciE9PXZvaWQgMD9yOm54LHN1cGVyKHQscixuLGksbyxhLHMsbCxjLHUpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07SDAucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIFEzPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG4pe051bWJlci5pc0ludGVnZXIocikmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLHI9biksc3VwZXIodCx0LHIpLHI9cnx8e30sdGhpcy50ZXh0dXJlPW5ldyBIMCh2b2lkIDAsci5tYXBwaW5nLHIud3JhcFMsci53cmFwVCxyLm1hZ0ZpbHRlcixyLm1pbkZpbHRlcixyLmZvcm1hdCxyLnR5cGUsci5hbmlzb3Ryb3B5LHIuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9yLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyIT09dm9pZCAwP3IubWluRmlsdGVyOmlpfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQscil7dGhpcy50ZXh0dXJlLnR5cGU9ci50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UW8sdGhpcy50ZXh0dXJlLmVuY29kaW5nPXIuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ci5tYWdGaWx0ZXI7bGV0IG49e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YAoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCgkJCQkJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7CgoJCQkJfQoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCgkJCQkJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCQkJCQkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgoJCQkJfQoJCQlgLGZyYWdtZW50U2hhZGVyOmAKCgkJCQl1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CgoJCQkJdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKCgkJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoKCQkJCQl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CgoJCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoKCQkJCX0KCQkJYH0saT1uZXcgUWYoNSw1LDUpLG89bmV3IGxoKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpaMyhuLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6bi52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6bi5mcmFnbWVudFNoYWRlcixzaWRlOklpLGJsZW5kaW5nOiRkfSk7by51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9cjtsZXQgYT1uZXcgdGkoaSxvKSxzPXIubWluRmlsdGVyO3JldHVybiByLm1pbkZpbHRlcj09PW94JiYoci5taW5GaWx0ZXI9aWkpLG5ldyBKMygxLDEwLHRoaXMpLnVwZGF0ZSh0LGEpLHIubWluRmlsdGVyPXMsYS5nZW9tZXRyeS5kaXNwb3NlKCksYS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LHIsbixpKXtsZXQgbz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgYT0wO2E8NjthKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxhKSx0LmNsZWFyKHIsbixpKTt0LnNldFJlbmRlclRhcmdldChvKX19O1EzLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgdXV0PW5ldyBqLHZmcj1uZXcgaix4ZnI9bmV3IGtpLCRjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGooMSwwLDApLHI9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0Q29tcG9uZW50cyh0LHIsbixpKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQscixuKSx0aGlzLmNvbnN0YW50PWksdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LHIpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LXIuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LHIsbil7bGV0IGk9dXV0LnN1YlZlY3RvcnMobixyKS5jcm9zcyh2ZnIuc3ViVmVjdG9ycyh0LHIpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChpLHQpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7bGV0IHQ9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTtyZXR1cm4gdGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIodCksdGhpcy5jb25zdGFudCo9dCx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLmNvbnN0YW50Kj0tMSx0aGlzLm5vcm1hbC5uZWdhdGUoKSx0aGlzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuZG90KHQpK3RoaXMuY29uc3RhbnR9ZGlzdGFuY2VUb1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQodC5jZW50ZXIpLXQucmFkaXVzfXByb2plY3RQb2ludCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxyKXtsZXQgbj10LmRlbHRhKHV1dCksaT10aGlzLm5vcm1hbC5kb3Qobik7aWYoaT09PTApcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpPT09MD9yLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgbz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9pO3JldHVybiBvPDB8fG8+MT9udWxsOnIuY29weShuKS5tdWx0aXBseVNjYWxhcihvKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IHI9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksbj10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIHI8MCYmbj4wfHxuPDAmJnI+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxyKXtsZXQgbj1yfHx4ZnIuZ2V0Tm9ybWFsTWF0cml4KHQpLGk9dGhpcy5jb3BsYW5hclBvaW50KHV1dCkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1pLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTskYy5wcm90b3R5cGUuaXNQbGFuZT0hMDt2YXIgTDM9bmV3IFpmLEFWPW5ldyBqLE4xPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICRjLHI9bmV3ICRjLG49bmV3ICRjLGk9bmV3ICRjLG89bmV3ICRjLGE9bmV3ICRjKXt0aGlzLnBsYW5lcz1bdCxyLG4saSxvLGFdfXNldCh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5wbGFuZXM7cmV0dXJuIHNbMF0uY29weSh0KSxzWzFdLmNvcHkociksc1syXS5jb3B5KG4pLHNbM10uY29weShpKSxzWzRdLmNvcHkobyksc1s1XS5jb3B5KGEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXJbbl0uY29weSh0LnBsYW5lc1tuXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmVsZW1lbnRzLGk9blswXSxvPW5bMV0sYT1uWzJdLHM9blszXSxsPW5bNF0sYz1uWzVdLHU9bls2XSxoPW5bN10sZj1uWzhdLHA9bls5XSxkPW5bMTBdLGc9blsxMV0sXz1uWzEyXSx5PW5bMTNdLHg9blsxNF0sYj1uWzE1XTtyZXR1cm4gclswXS5zZXRDb21wb25lbnRzKHMtaSxoLWwsZy1mLGItXykubm9ybWFsaXplKCksclsxXS5zZXRDb21wb25lbnRzKHMraSxoK2wsZytmLGIrXykubm9ybWFsaXplKCksclsyXS5zZXRDb21wb25lbnRzKHMrbyxoK2MsZytwLGIreSkubm9ybWFsaXplKCksclszXS5zZXRDb21wb25lbnRzKHMtbyxoLWMsZy1wLGIteSkubm9ybWFsaXplKCkscls0XS5zZXRDb21wb25lbnRzKHMtYSxoLXUsZy1kLGIteCkubm9ybWFsaXplKCkscls1XS5zZXRDb21wb25lbnRzKHMrYSxoK3UsZytkLGIreCkubm9ybWFsaXplKCksdGhpc31pbnRlcnNlY3RzT2JqZWN0KHQpe2xldCByPXQuZ2VvbWV0cnk7cmV0dXJuIHIuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZyLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEwzLmNvcHkoci5ib3VuZGluZ1NwaGVyZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShMMyl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gTDMuY2VudGVyLnNldCgwLDAsMCksTDMucmFkaXVzPS43MDcxMDY3ODExODY1NDc2LEwzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoTDMpfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmNlbnRlcixpPS10LnJhZGl1cztmb3IobGV0IG89MDtvPDY7bysrKWlmKHJbb10uZGlzdGFuY2VUb1BvaW50KG4pPGkpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXtsZXQgaT1yW25dO2lmKEFWLng9aS5ub3JtYWwueD4wP3QubWF4Lng6dC5taW4ueCxBVi55PWkubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksQVYuej1pLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LGkuZGlzdGFuY2VUb1BvaW50KEFWKTwwKXJldHVybiExfXJldHVybiEwfWNvbnRhaW5zUG9pbnQodCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylpZihyW25dLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2Z1bmN0aW9uIFVmZSgpe2xldCBlPW51bGwsdD0hMSxyPW51bGwsbj1udWxsO2Z1bmN0aW9uIGkobyxhKXtyKG8sYSksbj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXt0IT09ITAmJnIhPT1udWxsJiYobj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKSx0PSEwKX0sc3RvcDpmdW5jdGlvbigpe2UuY2FuY2VsQW5pbWF0aW9uRnJhbWUobiksdD0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbihvKXtyPW99LHNldENvbnRleHQ6ZnVuY3Rpb24obyl7ZT1vfX19ZnVuY3Rpb24gYmZyKGUsdCl7bGV0IHI9dC5pc1dlYkdMMixuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGkoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxwPWUuY3JlYXRlQnVmZmVyKCk7ZS5iaW5kQnVmZmVyKHUscCksZS5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZD01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Q9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/cj9kPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmQ9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9kPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Q9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9kPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9kPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZD01MTIxKSx7YnVmZmVyOnAsdHlwZTpkLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBvKGMsdSxoKXtsZXQgZj11LmFycmF5LHA9dS51cGRhdGVSYW5nZTtlLmJpbmRCdWZmZXIoaCxjKSxwLmNvdW50PT09LTE/ZS5idWZmZXJTdWJEYXRhKGgsMCxmKToocj9lLmJ1ZmZlclN1YkRhdGEoaCxwLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYscC5vZmZzZXQscC5jb3VudCk6ZS5idWZmZXJTdWJEYXRhKGgscC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KHAub2Zmc2V0LHAub2Zmc2V0K3AuY291bnQpKSxwLmNvdW50PS0xKX1mdW5jdGlvbiBhKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksbi5nZXQoYyl9ZnVuY3Rpb24gcyhjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9bi5nZXQoYyk7dSYmKGUuZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxuLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9bi5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmbi5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1uLmdldChjKTtoPT09dm9pZCAwP24uc2V0KGMsaShjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYobyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6YSxyZW1vdmU6cyx1cGRhdGU6bH19dmFyIFYwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppfTtsZXQgbz10LzIsYT1yLzIscz1NYXRoLmZsb29yKG4pLGw9TWF0aC5mbG9vcihpKSxjPXMrMSx1PWwrMSxoPXQvcyxmPXIvbCxwPVtdLGQ9W10sZz1bXSxfPVtdO2ZvcihsZXQgeT0wO3k8dTt5Kyspe2xldCB4PXkqZi1hO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBTPWIqaC1vO2QucHVzaChTLC14LDApLGcucHVzaCgwLDAsMSksXy5wdXNoKGIvcyksXy5wdXNoKDEteS9sKX19Zm9yKGxldCB5PTA7eTxsO3krKylmb3IobGV0IHg9MDt4PHM7eCsrKXtsZXQgYj14K2MqeSxTPXgrYyooeSsxKSxDPXgrMStjKih5KzEpLFA9eCsxK2MqeTtwLnB1c2goYixTLFApLHAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVjAodC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSx3ZnI9YCNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7CiNlbmRpZmAsU2ZyPWAjaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCxNZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCxFZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCgl1bmlmb3JtIGZsb2F0IGFscGhhVGVzdDsKI2VuZGlmYCxUZnI9YCNpZmRlZiBVU0VfQU9NQVAKCWZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uOwoJI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApCgkJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjZW5kaWYKI2VuZGlmYCxDZnI9YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxBZnI9InZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyIsUGZyPWB2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApOwojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7CiNlbmRpZmAsSWZyPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxMZnI9YCNpZmRlZiBVU0VfQlVNUE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDsKCXVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlOwoJdmVjMiBkSGR4eV9md2QoKSB7CgkJdmVjMiBkU1RkeCA9IGRGZHgoIHZVdiApOwoJCXZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTsKCQlmbG9hdCBIbGwgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7CgkJZmxvYXQgZEJ4ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7CgkJZmxvYXQgZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLnggLSBIbGw7CgkJcmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7Cgl9Cgl2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5LCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2TiA9IHN1cmZfbm9ybTsKCQl2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7CgkJdmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApOwoJCWZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICkgKiBmYWNlRGlyZWN0aW9uOwoJCXZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApOwoJCXJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTsKCX0KI2VuZGlmYCxrZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmVjNCBwbGFuZTsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHsKCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJaWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVMKCQlib29sIGNsaXBwZWQgPSB0cnVlOwoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJCXBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTsKCQkJY2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJCWlmICggY2xpcHBlZCApIGRpc2NhcmQ7CgkjZW5kaWYKI2VuZGlmYCxSZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxOZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247CiNlbmRpZmAsRGZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWZgLE9mcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsemZyPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCXZhcnlpbmcgdmVjNCB2Q29sb3I7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLEZmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLEJmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsSGZyPWAjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzCiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2CiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjYKI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwNwojZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzUKI2RlZmluZSBFUFNJTE9OIDFlLTYKI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KCBhICkgKCAxLjAgLSBzYXR1cmF0ZSggYSApICkKZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfQpmbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH0KZmxvYXQgcG93NCggY29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfQpmbG9hdCBtYXgzKCBjb25zdCBpbiB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH0KZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH0KaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHsKCWNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MzsKCWhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApOwoJcmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7Cn0KI2lmZGVmIEhJR0hfUFJFQ0lTSU9OCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfQojZWxzZQoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgewoJCWZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7CgkJcmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50OwoJfQojZW5kaWYKc3RydWN0IEluY2lkZW50TGlnaHQgewoJdmVjMyBjb2xvcjsKCXZlYzMgZGlyZWN0aW9uOwoJYm9vbCB2aXNpYmxlOwp9OwpzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQgewoJdmVjMyBkaXJlY3REaWZmdXNlOwoJdmVjMyBkaXJlY3RTcGVjdWxhcjsKCXZlYzMgaW5kaXJlY3REaWZmdXNlOwoJdmVjMyBpbmRpcmVjdFNwZWN1bGFyOwp9OwpzdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7Cgl2ZWMzIHBvc2l0aW9uOwoJdmVjMyBub3JtYWw7Cgl2ZWMzIHZpZXdEaXI7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCn07CnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTsKfQp2ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApOwp9Cm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkgewoJbWF0MyB0bXA7Cgl0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTsKCXRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApOwoJdG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwgbVsgMSBdLnosIG1bIDIgXS56ICk7CglyZXR1cm4gdG1wOwp9CmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7Cgl2ZWMzIHdlaWdodHMgPSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7CglyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTsKfQpib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHsKCXJldHVybiBtWyAyIF1bIDMgXSA9PSAtIDEuMDsKfQp2ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkgewoJZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7CglmbG9hdCB2ID0gYXNpbiggY2xhbXAoIGRpci55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7CglyZXR1cm4gdmVjMiggdSwgdiApOwp9YCxWZnI9YCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWCgkjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjAKCSNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMAoJI2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjAKCSNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjAKCWZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkgewoJCXZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmYWNlID0gLSAxLjA7CgkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkgewoJCQlpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKQoJCQkJZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wOwoJCQllbHNlCgkJCQlmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7CgkJfSBlbHNlIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0KCQlyZXR1cm4gZmFjZTsKCX0KCXZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkgewoJCXZlYzIgdXY7CgkJaWYgKCBmYWNlID09IDAuMCApIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9CgkJcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTsKCX0KCXZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7CgkJZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApOwoJCWZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTsKCQltaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7CgkJZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTsKCQlmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApOwoJCXZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7CgkJaWYgKCBmYWNlID4gMi4wICkgewoJCQl1di55ICs9IGZhY2VTaXplOwoJCQlmYWNlIC09IDMuMDsKCQl9CgkJdXYueCArPSBmYWNlICogZmFjZVNpemU7CgkJaWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7CgkJCXV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplOwoJCX0KCQl1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTsKCQl1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApOwoJCXV2ICo9IHRleGVsU2l6ZTsKCQlyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiOwoJfQoJI2RlZmluZSByMCAxLjAKCSNkZWZpbmUgdjAgMC4zMzkKCSNkZWZpbmUgbTAgLSAyLjAKCSNkZWZpbmUgcjEgMC44CgkjZGVmaW5lIHYxIDAuMjc2CgkjZGVmaW5lIG0xIC0gMS4wCgkjZGVmaW5lIHI0IDAuNAoJI2RlZmluZSB2NCAwLjA0NgoJI2RlZmluZSBtNCAyLjAKCSNkZWZpbmUgcjUgMC4zMDUKCSNkZWZpbmUgdjUgMC4wMTYKCSNkZWZpbmUgbTUgMy4wCgkjZGVmaW5lIHI2IDAuMjEKCSNkZWZpbmUgdjYgMC4wMDM4CgkjZGVmaW5lIG02IDQuMAoJZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSAwLjA7CgkJaWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7CgkJCW1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7CgkJCW1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7CgkJCW1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7CgkJCW1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTsKCQl9IGVsc2UgewoJCQltaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTsJCX0KCQlyZXR1cm4gbWlwOwoJfQoJdmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkgewoJCWZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTsKCQlmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApOwoJCWZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTsKCQl2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7CgkJaWYgKCBtaXBGID09IDAuMCApIHsKCQkJcmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7CgkJfSBlbHNlIHsKCQkJdmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApOwoJCQlyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTsKCQl9Cgl9CiNlbmRpZmAsVWZyPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxxZnI9YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzOwojZW5kaWZgLEdmcj1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7CiNlbmRpZmAsV2ZyPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxZZnI9YCNpZmRlZiBVU0VfRU1JU1NJVkVNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwOwojZW5kaWZgLGpmcj0iZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixYZnI9YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLCRmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2ZWMzIGNhbWVyYVRvRnJhZzsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApOwoJCX0KCQl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApOwoJCSNlbHNlCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2Vsc2UKCQl2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkUKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTsKCSNlbHNlCgkJdmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApOwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREICkKCQlvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7CgkjZW5kaWYKI2VuZGlmYCxLZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTsKCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgkjZWxzZQoJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCSNlbmRpZgoJCiNlbmRpZmAsWmZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLEpmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HICkKCQkjZGVmaW5lIEVOVl9XT1JMRFBPUwoJI2VuZGlmCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJCgkJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZW5kaWYKI2VuZGlmYCxRZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKCSNlbHNlCgkJdmVjMyBjYW1lcmFUb1ZlcnRleDsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCx0cHI9YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxlcHI9YCNpZmRlZiBVU0VfRk9HCgl2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDsKI2VuZGlmYCxycHI9YCNpZmRlZiBVU0VfRk9HCgkjaWZkZWYgRk9HX0VYUDIKCQlmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTsKCSNlbHNlCgkJZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCB2Rm9nRGVwdGggKTsKCSNlbmRpZgoJZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApOwojZW5kaWZgLG5wcj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxpcHI9YCNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwOwojZW5kaWYKdmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkgewoJZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTsKCXZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7CgkjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgkJcmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApOwoJI2Vsc2UKCQlyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApOwoJI2VuZGlmCn1gLG9wcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTCgkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwojZW5kaWZgLGFwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHNwcj1gdmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7Ckdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7Ckdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5OwpiYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjsKYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRyeS5ub3JtYWw7CmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKdkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKdkluZGlyZWN0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApOwoJdkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKZmxvYXQgZG90Tkw7CnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwp2SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwp2SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fRElSX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCXZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmYCxscHI9YHVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93Owp1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7CnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07CnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7CglmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56OwoJdmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7CglyZXR1cm4gcmVzdWx0Owp9CnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KdmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkgewoJdmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7CglyZXR1cm4gaXJyYWRpYW5jZTsKfQpmbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHsKCSNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApCgkJZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApOwoJCWlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7CgkJCWRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApOwoJCX0KCQlyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmOwoJI2Vsc2UKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7CgkJCXJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7CgkJfQoJCXJldHVybiAxLjA7CgkjZW5kaWYKfQpmbG9hdCBnZXRTcG90QXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGNvbmVDb3NpbmUsIGNvbnN0IGluIGZsb2F0IHBlbnVtYnJhQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBhbmdsZUNvc2luZSApIHsKCXJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTsKfQojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCglzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCX07Cgl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07Cgl2b2lkIGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCWxpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjsKCQlsaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjsKCQlsaWdodC52aXNpYmxlID0gdHJ1ZTsKCX0KI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJc3RydWN0IFBvaW50TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCX07Cgl1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTsKCXZvaWQgZ2V0UG9pbnRMaWdodEluZm8oIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7CgkJdmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQlsaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7CgkJbGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApOwoJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7Cgl9CiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJc3RydWN0IFNwb3RMaWdodCB7CgkJdmVjMyBwb3NpdGlvbjsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIGNvbG9yOwoJCWZsb2F0IGRpc3RhbmNlOwoJCWZsb2F0IGRlY2F5OwoJCWZsb2F0IGNvbmVDb3M7CgkJZmxvYXQgcGVudW1icmFDb3M7Cgl9OwoJdW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07Cgl2b2lkIGdldFNwb3RMaWdodEluZm8oIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGFuZ2xlQ29zID0gZG90KCBsaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBzcG90QXR0ZW51YXRpb24gPSBnZXRTcG90QXR0ZW51YXRpb24oIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7CgkJaWYgKCBzcG90QXR0ZW51YXRpb24gPiAwLjAgKSB7CgkJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQkJbGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247CgkJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7CgkJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7CgkJfSBlbHNlIHsKCQkJbGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTsKCQkJbGlnaHQudmlzaWJsZSA9IGZhbHNlOwoJCX0KCX0KI2VuZGlmCiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXN0cnVjdCBSZWN0QXJlYUxpZ2h0IHsKCQl2ZWMzIGNvbG9yOwoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0OwoJfTsKCXVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xOwl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjsKCXVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTsKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCglzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIHNreUNvbG9yOwoJCXZlYzMgZ3JvdW5kQ29sb3I7Cgl9OwoJdW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07Cgl2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41OwoJCXZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7CgkJcmV0dXJuIGlycmFkaWFuY2U7Cgl9CiNlbmRpZmAsY3ByPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLHVwcj1gVG9vbk1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO2AsaHByPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IFRvb25NYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKfTsKdm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1Rvb24KI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9Ub29uCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLGZwcj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLHBwcj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cgl2ZWMzIHNwZWN1bGFyQ29sb3I7CglmbG9hdCBzcGVjdWxhclNoaW5pbmVzczsKCWZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7Cn07CnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoOwp9CnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfQmxpbm5QaG9uZwojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcKI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApCSgwKWAsZHByPWBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTsKdmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApOwpmbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApOwojaWZkZWYgSU9SCgkjaWZkZWYgU1BFQ1VMQVIKCQlmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5OwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7CgkJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCQlzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hOwoJCSNlbmRpZgoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCQlzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiOwoJCSNlbmRpZgoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTsKCSNlbHNlCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7CgkJdmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7CgkJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CgkjZW5kaWYKCW1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7CiNlbHNlCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwoJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0OwoJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJCW1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgkJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55OwoJI2VuZGlmCgltYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7CW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCW1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJbWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjsKCSNlbmRpZgoJbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApOwoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7CgkjZW5kaWYKI2VuZGlmYCxtcHI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxncHI9YApHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCglnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwojaWYgKCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglQb2ludExpZ2h0IHBvaW50TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdOwoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTICkKCQlwb2ludExpZ2h0U2hhZG93ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93QmlhcywgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglTcG90TGlnaHQgc3BvdExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyApCgkJc3BvdExpZ2h0U2hhZG93ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93Qmlhcywgc3BvdExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTICkKCQlkaXJlY3Rpb25hbExpZ2h0U2hhZG93ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApCglSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHsKCQlyZWN0QXJlYUxpZ2h0ID0gcmVjdEFyZWFMaWdodHNbIGkgXTsKCQlSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCXZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCWlycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApCgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQkJaXJyYWRpYW5jZSArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApCgl2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7CiNlbmRpZmAsX3ByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCSNpZmRlZiBVU0VfTElHSFRNQVAKCQl2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCQlsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7CgkJI2VuZGlmCgkJaXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7CgkjZW5kaWYKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQlpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAseXByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAsdnByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCglnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7CiNlbmRpZmAseHByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCgl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7Cgl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7Cgl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwojZW5kaWZgLGJwcj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsd3ByPWAjaWZkZWYgVVNFX0xPR0RFUFRIQlVGCgkjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVAoJCXZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53OwoJCXZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApOwoJI2Vsc2UKCQlpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHsKCQkJZ2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wOwoJCQlnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7CgkJfQoJI2VuZGlmCiNlbmRpZmAsU3ByPWAjaWZkZWYgVVNFX01BUAoJdmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApOwoJI2lmZGVmIERFQ09ERV9WSURFT19URVhUVVJFCgkJc2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQoIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7CgkjZW5kaWYKCWRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yOwojZW5kaWZgLE1wcj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCxFcHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXZlYzIgdXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5OwojZW5kaWYKI2lmZGVmIFVTRV9NQVAKCWRpZmZ1c2VDb2xvciAqPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTsKI2VuZGlmCiNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZzsKI2VuZGlmYCxUcHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCxDcHI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxBcHI9YCNpZmRlZiBVU0VfTUVUQUxORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7CiNlbmRpZmAsUHByPWAjaWZkZWYgVVNFX01PUlBITk9STUFMUwoJb2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQl9CgkjZWxzZQoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCSNlbmRpZgojZW5kaWZgLElwcj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsTHByPWAjaWZkZWYgVVNFX01PUlBIVEFSR0VUUwoJdHJhbnNmb3JtZWQgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJZm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkgewoJCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2Vsc2UKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2VuZGlmCgkJfQoJI2Vsc2UKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ0ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ3ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxrcHI9YGZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wOwojaWZkZWYgRkxBVF9TSEFERUQKCXZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7Cgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTsKI2Vsc2UKCXZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApOwoJCXZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJCWJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJI2VuZGlmCgkJI2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApCgkJCW1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmCnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7YCxScHI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsTnByPWAjaWZuZGVmIEZMQVRfU0hBREVECgl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZhcnlpbmcgdmVjMyB2VGFuZ2VudDsKCQl2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDsKCSNlbmRpZgojZW5kaWZgLERwcj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxPcHI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLHpwcj1gI2lmZGVmIFVTRV9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTsKI2VuZGlmCiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCXVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7CiNlbmRpZgojaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKQoJdmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMyBtYXBOLCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgcTAgPSB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7CgkJdmVjMyBxMSA9IHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkgKSwgZEZkeSggZXllX3Bvcy56ICkgKTsKCQl2ZWMyIHN0MCA9IGRGZHgoIHZVdi5zdCApOwoJCXZlYzIgc3QxID0gZEZkeSggdlV2LnN0ICk7CgkJdmVjMyBOID0gc3VyZl9ub3JtOwoJCXZlYzMgcTFwZXJwID0gY3Jvc3MoIHExLCBOICk7CgkJdmVjMyBxMHBlcnAgPSBjcm9zcyggTiwgcTAgKTsKCQl2ZWMzIFQgPSBxMXBlcnAgKiBzdDAueCArIHEwcGVycCAqIHN0MS54OwoJCXZlYzMgQiA9IHExcGVycCAqIHN0MC55ICsgcTBwZXJwICogc3QxLnk7CgkJZmxvYXQgZGV0ID0gbWF4KCBkb3QoIFQsIFQgKSwgZG90KCBCLCBCICkgKTsKCQlmbG9hdCBzY2FsZSA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBUICogKCBtYXBOLnggKiBzY2FsZSApICsgQiAqICggbWFwTi55ICogc2NhbGUgKSArIE4gKiBtYXBOLnogKTsKCX0KI2VuZGlmYCxGcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsOwojZW5kaWZgLEJwcj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxIcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlOwojZW5kaWZgLFZwcj1gI2lmZGVmIE9QQVFVRQpkaWZmdXNlQ29sb3IuYSA9IDEuMDsKI2VuZGlmCiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xOwojZW5kaWYKZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtgLFVwcj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxxcHI9YCNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBCglnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hOwojZW5kaWZgLEdwcj1gdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247CiNlbmRpZgptdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjsKZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtgLFdwcj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFlwcj1gI2lmZGVmIERJVEhFUklORwoJdmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7CgkJZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApOwoJCXZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7CgkJZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTsKCQlyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCOwoJfQojZW5kaWZgLGpwcj1gZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzOwojaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTsKCXJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nOwojZW5kaWZgLFhwcj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCwkcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCglmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkgewoJCXJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApOwoJfQoJdmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7CgkJcmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApOwoJfQoJZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7CgkJZmxvYXQgb2NjbHVzaW9uID0gMS4wOwoJCXZlYzIgZGlzdHJpYnV0aW9uID0gdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7CgkJZmxvYXQgaGFyZF9zaGFkb3cgPSBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTsKCQlpZiAoaGFyZF9zaGFkb3cgIT0gMS4wICkgewoJCQlmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7CgkJCWZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7CgkJCWZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7CQkJc29mdG5lc3NfcHJvYmFiaWxpdHkgPSBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7CQkJb2NjbHVzaW9uID0gY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7CgkJfQoJCXJldHVybiBvY2NsdXNpb247Cgl9CglmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkgewoJCWZsb2F0IHNoYWRvdyA9IDEuMDsKCQlzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudzsKCQlzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7CgkJYnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApOwoJCWJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTsKCQlidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7CgkJYm9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTsKCQlpZiAoIGZydXN0dW1UZXN0ICkgewoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgyID0gZHgwIC8gMi4wOwoJCQlmbG9hdCBkeTIgPSBkeTAgLyAyLjA7CgkJCWZsb2F0IGR4MyA9IGR4MSAvIDIuMDsKCQkJZmxvYXQgZHkzID0gZHkxIC8gMi4wOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKQoJCQkpICogKCAxLjAgLyAxNy4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHggPSB0ZXhlbFNpemUueDsKCQkJZmxvYXQgZHkgPSB0ZXhlbFNpemUueTsKCQkJdmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5OwoJCQl2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaGFkb3dNYXBTaXplICsgMC41ICk7CgkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBmLnkgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQlzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZWxzZQoJCQlzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2VuZGlmCgkJfQoJCXJldHVybiBzaGFkb3c7Cgl9Cgl2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7CgkJdmVjMyBhYnNWID0gYWJzKCB2ICk7CgkJZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7CgkJYWJzViAqPSBzY2FsZVRvQ3ViZTsKCQl2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7CgkJdmVjMiBwbGFuYXIgPSB2Lnh5OwoJCWZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7CgkJZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsOwoJCWlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHsKCQkJaWYgKCB2LnogPiAwLjAgKQoJCQkJcGxhbmFyLnggPSA0LjAgLSB2Lng7CgkJfSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTsKCQkJcGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YOwoJCX0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7CgkJCXBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7CgkJCXBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7CgkJfQoJCXJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTsKCX0KCWZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkgewoJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7CgkJdmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7CgkJZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTsJCWRwICs9IHNoYWRvd0JpYXM7CgkJdmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQl2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7CgkJCXJldHVybiAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLEtwcj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKI2VuZGlmYCxacHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCxKcHI9YGZsb2F0IGdldFNoYWRvd01hc2soKSB7CglmbG9hdCBzaGFkb3cgPSAxLjA7CgkjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjZW5kaWYKCXJldHVybiBzaGFkb3c7Cn1gLFFwcj1gI2lmZGVmIFVTRV9TS0lOTklORwoJbWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7CgltYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTsKCW1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApOwoJbWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7CiNlbmRpZmAsdGRyPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxlZHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCXZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7Cgl2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTsKCXNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54OwoJc2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7Cglza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejsKCXNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53OwoJdHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejsKI2VuZGlmYCxyZHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0VzsKCXNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4OwoJb2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2VuZGlmCiNlbmRpZmAsbmRyPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLGlkcj1gI2lmZGVmIFVTRV9TUEVDVUxBUk1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7CiNlbmRpZmAsb2RyPWAjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HICkKCWdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLGFkcj1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHNkcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCWZsb2F0IHRyYW5zbWlzc2lvbkFscGhhID0gMS4wOwoJZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uOwoJZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzOwoJI2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVAKCQl0cmFuc21pc3Npb25GYWN0b3IgKj0gdGV4dHVyZTJEKCB0cmFuc21pc3Npb25NYXAsIHZVdiApLnI7CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQCgkJdGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nOwoJI2VuZGlmCgl2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uOwoJdmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApOwoJdmVjMyBuID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oCgkJbiwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLAoJCXBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLAoJCWF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTsKCXRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKCXRyYW5zbWlzc2lvbkFscGhhID0gbWl4KCB0cmFuc21pc3Npb25BbHBoYSwgdHJhbnNtaXNzaW9uLmEsIHRyYW5zbWlzc2lvbkZhY3RvciApOwojZW5kaWZgLGxkcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uOwoJdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7Cgl1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7Cgl1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDsKCSNlbmRpZgoJdW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOwoJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDsKCXVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJdmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHsKCQl2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTsKCQl2ZWMzIG1vZGVsU2NhbGU7CgkJbW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTsKCX0KCWZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkgewoJCXJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApOwoJfQoJdmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7CgkJI2lmZGVmIFRFWFRVUkVfTE9EX0VYVAoJCQlyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbmRpZgoJfQoJdmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkgewoJCWlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7CgkJCXJldHVybiByYWRpYW5jZTsKCQl9IGVsc2UgewoJCQl2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJCQl2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7CQkJcmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTsKCQl9Cgl9Cgl2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLAoJCWNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsCgkJY29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLAoJCWNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQl2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7CgkJdmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7CgkJdmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApOwoJCXZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53OwoJCXJlZnJhY3Rpb25Db29yZHMgKz0gMS4wOwoJCXJlZnJhY3Rpb25Db29yZHMgLz0gMi4wOwoJCXZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTsKCQl2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7CgkJdmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7CgkJcmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTsKCX0KI2VuZGlmYCxjZHI9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCx1ZHI9YCNpZmRlZiBVU0VfVVYKCSNpZmRlZiBVVlNfVkVSVEVYX09OTFkKCQl2ZWMyIHZVdjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMyIHZVdjsKCSNlbmRpZgoJdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwojZW5kaWZgLGhkcj1gI2lmZGVmIFVTRV9VVgoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKI2VuZGlmYCxmZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAscGRyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCWF0dHJpYnV0ZSB2ZWMyIHV2MjsKCXZhcnlpbmcgdmVjMiB2VXYyOwoJdW5pZm9ybSBtYXQzIHV2MlRyYW5zZm9ybTsKI2VuZGlmYCxkZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTsKI2VuZGlmYCxtZHI9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAsZ2RyPWB2YXJ5aW5nIHZlYzIgdlV2Owp1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CnZvaWQgbWFpbigpIHsKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CglnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApOwp9YCxfZHI9YHVuaWZvcm0gc2FtcGxlcjJEIHQyRDsKdmFyeWluZyB2ZWMyIHZVdjsKdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAseWRyPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCx2ZHI9YCNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJdmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CglnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjsKCWdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCx4ZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dzsKfWAsYmRyPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCx3ZHI9YCNkZWZpbmUgRElTVEFOQ0UKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6Owp9YCxTZHI9YCNkZWZpbmUgRElTVEFOQ0UKdW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uOwp1bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTsKdW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTsKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4gKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCWZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTsKCWRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTsKCWRpc3QgPSBzYXR1cmF0ZSggZGlzdCApOwoJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7Cn1gLE1kcj1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLEVkcj1gdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7Cgl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CglnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLFRkcj1gdW5pZm9ybSBmbG9hdCBzY2FsZTsKYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7Cgl2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsQ2RyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxBZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLFBkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7CgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxJZHI9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxMZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZMaWdodEZyb250Owp2YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrOwoJdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250OwoJI2VuZGlmCgkjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250OwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpOwoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLGtkcj1gI2RlZmluZSBNQVRDQVAKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6Owp9YCxSZHI9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxOZHI9YCNkZWZpbmUgTk9STUFMCiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLERkcj1gI2RlZmluZSBOT1JNQUwKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTsKfWAsT2RyPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHpkcj1gI2RlZmluZSBQSE9ORwp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIHZlYzMgc3BlY3VsYXI7CnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLEZkcj1gI2RlZmluZSBTVEFOREFSRAp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6OwojZW5kaWYKfWAsQmRyPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsSGRyPWAjZGVmaW5lIFRPT04KdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLFZkcj1gI2RlZmluZSBUT09OCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLFVkcj1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHFkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxHZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsV2RyPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsWWRyPWB1bmlmb3JtIGZsb2F0IHJvdGF0aW9uOwp1bmlmb3JtIHZlYzIgY2VudGVyOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCXZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJdmVjMiBzY2FsZTsKCXNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApOwoJc2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7CgkjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7CgkjZW5kaWYKCXZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7Cgl2ZWMyIHJvdGF0ZWRQb3NpdGlvbjsKCXJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCXJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCW12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uOwoJZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxqZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxocj17YWxwaGFtYXBfZnJhZ21lbnQ6d2ZyLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6U2ZyLGFscGhhdGVzdF9mcmFnbWVudDpNZnIsYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6RWZyLGFvbWFwX2ZyYWdtZW50OlRmcixhb21hcF9wYXJzX2ZyYWdtZW50OkNmcixiZWdpbl92ZXJ0ZXg6QWZyLGJlZ2lubm9ybWFsX3ZlcnRleDpQZnIsYnNkZnM6SWZyLGJ1bXBtYXBfcGFyc19mcmFnbWVudDpMZnIsY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OmtmcixjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDpSZnIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Ok5mcixjbGlwcGluZ19wbGFuZXNfdmVydGV4OkRmcixjb2xvcl9mcmFnbWVudDpPZnIsY29sb3JfcGFyc19mcmFnbWVudDp6ZnIsY29sb3JfcGFyc192ZXJ0ZXg6RmZyLGNvbG9yX3ZlcnRleDpCZnIsY29tbW9uOkhmcixjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6VmZyLGRlZmF1bHRub3JtYWxfdmVydGV4OlVmcixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6cWZyLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6R2ZyLGVtaXNzaXZlbWFwX2ZyYWdtZW50OldmcixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OllmcixlbmNvZGluZ3NfZnJhZ21lbnQ6amZyLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OlhmcixlbnZtYXBfZnJhZ21lbnQ6JGZyLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpLZnIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6WmZyLGVudm1hcF9wYXJzX3ZlcnRleDpKZnIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6Y3ByLGVudm1hcF92ZXJ0ZXg6UWZyLGZvZ192ZXJ0ZXg6dHByLGZvZ19wYXJzX3ZlcnRleDplcHIsZm9nX2ZyYWdtZW50OnJwcixmb2dfcGFyc19mcmFnbWVudDpucHIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDppcHIsbGlnaHRtYXBfZnJhZ21lbnQ6b3ByLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6YXByLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpzcHIsbGlnaHRzX3BhcnNfYmVnaW46bHByLGxpZ2h0c190b29uX2ZyYWdtZW50OnVwcixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmhwcixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6ZnByLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OnBwcixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6ZHByLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50Om1wcixsaWdodHNfZnJhZ21lbnRfYmVnaW46Z3ByLGxpZ2h0c19mcmFnbWVudF9tYXBzOl9wcixsaWdodHNfZnJhZ21lbnRfZW5kOnlwcixsb2dkZXB0aGJ1Zl9mcmFnbWVudDp2cHIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDp4cHIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6YnByLGxvZ2RlcHRoYnVmX3ZlcnRleDp3cHIsbWFwX2ZyYWdtZW50OlNwcixtYXBfcGFyc19mcmFnbWVudDpNcHIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OkVwcixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpUcHIsbWV0YWxuZXNzbWFwX2ZyYWdtZW50OkNwcixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDpBcHIsbW9ycGhub3JtYWxfdmVydGV4OlBwcixtb3JwaHRhcmdldF9wYXJzX3ZlcnRleDpJcHIsbW9ycGh0YXJnZXRfdmVydGV4Okxwcixub3JtYWxfZnJhZ21lbnRfYmVnaW46a3ByLG5vcm1hbF9mcmFnbWVudF9tYXBzOlJwcixub3JtYWxfcGFyc19mcmFnbWVudDpOcHIsbm9ybWFsX3BhcnNfdmVydGV4OkRwcixub3JtYWxfdmVydGV4Ok9wcixub3JtYWxtYXBfcGFyc19mcmFnbWVudDp6cHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjpGcHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOkJwcixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDpIcHIsb3V0cHV0X2ZyYWdtZW50OlZwcixwYWNraW5nOlVwcixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OnFwcixwcm9qZWN0X3ZlcnRleDpHcHIsZGl0aGVyaW5nX2ZyYWdtZW50OldwcixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDpZcHIscm91Z2huZXNzbWFwX2ZyYWdtZW50Ompwcixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDpYcHIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6JHByLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpLcHIsc2hhZG93bWFwX3ZlcnRleDpacHIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50Okpwcixza2luYmFzZV92ZXJ0ZXg6UXByLHNraW5uaW5nX3BhcnNfdmVydGV4OnRkcixza2lubmluZ192ZXJ0ZXg6ZWRyLHNraW5ub3JtYWxfdmVydGV4OnJkcixzcGVjdWxhcm1hcF9mcmFnbWVudDpuZHIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDppZHIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6b2RyLHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6YWRyLHRyYW5zbWlzc2lvbl9mcmFnbWVudDpzZHIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bGRyLHV2X3BhcnNfZnJhZ21lbnQ6Y2RyLHV2X3BhcnNfdmVydGV4OnVkcix1dl92ZXJ0ZXg6aGRyLHV2Ml9wYXJzX2ZyYWdtZW50OmZkcix1djJfcGFyc192ZXJ0ZXg6cGRyLHV2Ml92ZXJ0ZXg6ZGRyLHdvcmxkcG9zX3ZlcnRleDptZHIsYmFja2dyb3VuZF92ZXJ0OmdkcixiYWNrZ3JvdW5kX2ZyYWc6X2RyLGN1YmVfdmVydDp5ZHIsY3ViZV9mcmFnOnZkcixkZXB0aF92ZXJ0OnhkcixkZXB0aF9mcmFnOmJkcixkaXN0YW5jZVJHQkFfdmVydDp3ZHIsZGlzdGFuY2VSR0JBX2ZyYWc6U2RyLGVxdWlyZWN0X3ZlcnQ6TWRyLGVxdWlyZWN0X2ZyYWc6RWRyLGxpbmVkYXNoZWRfdmVydDpUZHIsbGluZWRhc2hlZF9mcmFnOkNkcixtZXNoYmFzaWNfdmVydDpBZHIsbWVzaGJhc2ljX2ZyYWc6UGRyLG1lc2hsYW1iZXJ0X3ZlcnQ6SWRyLG1lc2hsYW1iZXJ0X2ZyYWc6TGRyLG1lc2htYXRjYXBfdmVydDprZHIsbWVzaG1hdGNhcF9mcmFnOlJkcixtZXNobm9ybWFsX3ZlcnQ6TmRyLG1lc2hub3JtYWxfZnJhZzpEZHIsbWVzaHBob25nX3ZlcnQ6T2RyLG1lc2hwaG9uZ19mcmFnOnpkcixtZXNocGh5c2ljYWxfdmVydDpGZHIsbWVzaHBoeXNpY2FsX2ZyYWc6QmRyLG1lc2h0b29uX3ZlcnQ6SGRyLG1lc2h0b29uX2ZyYWc6VmRyLHBvaW50c192ZXJ0OlVkcixwb2ludHNfZnJhZzpxZHIsc2hhZG93X3ZlcnQ6R2RyLHNoYWRvd19mcmFnOldkcixzcHJpdGVfdmVydDpZZHIsc3ByaXRlX2ZyYWc6amRyfSxyZT17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9LHV2MlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfX0sc3BlY3VsYXJtYXA6e3NwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfX0sZW52bWFwOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfSxyZWZsZWN0aXZpdHk6e3ZhbHVlOjF9LGlvcjp7dmFsdWU6MS41fSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgTHQoMSwxKX19LGRpc3BsYWNlbWVudG1hcDp7ZGlzcGxhY2VtZW50TWFwOnt2YWx1ZTpudWxsfSxkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjI1ZS01fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJlM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IEx0KC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX19fSxhaD17YmFzaWM6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5zcGVjdWxhcm1hcCxyZS5lbnZtYXAscmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmJ1bXBtYXAscmUubm9ybWFsbWFwLHJlLmRpc3BsYWNlbWVudG1hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IG5lKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5lbWlzc2l2ZW1hcCxyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUucm91Z2huZXNzbWFwLHJlLm1ldGFsbmVzc21hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLmdyYWRpZW50bWFwLHJlLmZvZyxyZS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgbmUoMCl9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOlRhKFtyZS5wb2ludHMscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOmhyLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpoci5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOlRhKFtyZS5zcHJpdGUscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmhyLmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOlRhKFtyZS5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpoci5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgan0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6VGEoW3JlLmxpZ2h0cyxyZS5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpoci5zaGFkb3dfZnJhZ319O2FoLnBoeXNpY2FsPXt1bmlmb3JtczpUYShbYWguc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBMdCgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgTHR9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IG5lKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF9mcmFnfTtmdW5jdGlvbiBYZHIoZSx0LHIsbixpLG8pe2xldCBhPW5ldyBuZSgwKSxzPWk9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIHAoZyxfKXtsZXQgeT0hMSx4PV8uaXNTY2VuZT09PSEwP18uYmFja2dyb3VuZDpudWxsO3gmJnguaXNUZXh0dXJlJiYoeD10LmdldCh4KSk7bGV0IGI9ZS54cixTPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7UyYmUy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJih4PW51bGwpLHg9PT1udWxsP2QoYSxzKTp4JiZ4LmlzQ29sb3ImJihkKHgsMSkseT0hMCksKGUuYXV0b0NsZWFyfHx5KSYmZS5jbGVhcihlLmF1dG9DbGVhckNvbG9yLGUuYXV0b0NsZWFyRGVwdGgsZS5hdXRvQ2xlYXJTdGVuY2lsKSx4JiYoeC5pc0N1YmVUZXh0dXJlfHx4Lm1hcHBpbmc9PT14TSk/KGM9PT12b2lkIDAmJihjPW5ldyB0aShuZXcgUWYoMSwxLDEpLG5ldyBsaCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6WjMoYWguY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmFoLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFoLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpJaSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oQyxQLGspe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKGsubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLG4udXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT14LGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT14LmlzQ3ViZVRleHR1cmUmJnguaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXh8fGghPT14LnZlcnNpb258fGYhPT1lLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT14LGg9eC52ZXJzaW9uLGY9ZS50b25lTWFwcGluZyksZy51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6eCYmeC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgdGkobmV3IFYwKDIsMiksbmV3IGxoKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOlozKGFoLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjphaC5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphaC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6STEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLG4udXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT14LHgubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZ4LnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh4Lm1hdHJpeCksKHUhPT14fHxoIT09eC52ZXJzaW9ufHxmIT09ZS50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9eCxoPXgudmVyc2lvbixmPWUudG9uZU1hcHBpbmcpLGcudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGQoZyxfKXtyLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoZy5yLGcuZyxnLmIsXyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBhfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKGcsXz0xKXthLnNldChnKSxzPV8sZChhLHMpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oZyl7cz1nLGQoYSxzKX0scmVuZGVyOnB9fWZ1bmN0aW9uICRkcihlLHQscixuKXtsZXQgaT1lLmdldFBhcmFtZXRlcigzNDkyMSksbz1uLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksYT1uLmlzV2ViR0wyfHxvIT09bnVsbCxzPXt9LGw9ZyhudWxsKSxjPWw7ZnVuY3Rpb24gdShSLEYseixVLFcpe2xldCBaPSExO2lmKGEpe2xldCBydD1kKFUseixGKTtjIT09cnQmJihjPXJ0LGYoYy5vYmplY3QpKSxaPV8oVSxXKSxaJiZ5KFUsVyl9ZWxzZXtsZXQgcnQ9Ri53aXJlZnJhbWU9PT0hMDsoYy5nZW9tZXRyeSE9PVUuaWR8fGMucHJvZ3JhbSE9PXouaWR8fGMud2lyZWZyYW1lIT09cnQpJiYoYy5nZW9tZXRyeT1VLmlkLGMucHJvZ3JhbT16LmlkLGMud2lyZWZyYW1lPXJ0LFo9ITApfVIuaXNJbnN0YW5jZWRNZXNoPT09ITAmJihaPSEwKSxXIT09bnVsbCYmci51cGRhdGUoVywzNDk2MyksWiYmKGsoUixGLHosVSksVyE9PW51bGwmJmUuYmluZEJ1ZmZlcigzNDk2MyxyLmdldChXKS5idWZmZXIpKX1mdW5jdGlvbiBoKCl7cmV0dXJuIG4uaXNXZWJHTDI/ZS5jcmVhdGVWZXJ0ZXhBcnJheSgpOm8uY3JlYXRlVmVydGV4QXJyYXlPRVMoKX1mdW5jdGlvbiBmKFIpe3JldHVybiBuLmlzV2ViR0wyP2UuYmluZFZlcnRleEFycmF5KFIpOm8uYmluZFZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIHAoUil7cmV0dXJuIG4uaXNXZWJHTDI/ZS5kZWxldGVWZXJ0ZXhBcnJheShSKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIGQoUixGLHope2xldCBVPXoud2lyZWZyYW1lPT09ITAsVz1zW1IuaWRdO1c9PT12b2lkIDAmJihXPXt9LHNbUi5pZF09Vyk7bGV0IFo9V1tGLmlkXTtaPT09dm9pZCAwJiYoWj17fSxXW0YuaWRdPVopO2xldCBydD1aW1VdO3JldHVybiBydD09PXZvaWQgMCYmKHJ0PWcoaCgpKSxaW1VdPXJ0KSxydH1mdW5jdGlvbiBnKFIpe2xldCBGPVtdLHo9W10sVT1bXTtmb3IobGV0IFc9MDtXPGk7VysrKUZbV109MCx6W1ddPTAsVVtXXT0wO3JldHVybntnZW9tZXRyeTpudWxsLHByb2dyYW06bnVsbCx3aXJlZnJhbWU6ITEsbmV3QXR0cmlidXRlczpGLGVuYWJsZWRBdHRyaWJ1dGVzOnosYXR0cmlidXRlRGl2aXNvcnM6VSxvYmplY3Q6UixhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIF8oUixGKXtsZXQgej1jLmF0dHJpYnV0ZXMsVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9eltaXSxvdD1VW1pdO2lmKHJ0PT09dm9pZCAwfHxydC5hdHRyaWJ1dGUhPT1vdHx8cnQuZGF0YSE9PW90LmRhdGEpcmV0dXJuITA7VysrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1XfHxjLmluZGV4IT09Rn1mdW5jdGlvbiB5KFIsRil7bGV0IHo9e30sVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9VVtaXSxvdD17fTtvdC5hdHRyaWJ1dGU9cnQscnQuZGF0YSYmKG90LmRhdGE9cnQuZGF0YSkseltaXT1vdCxXKyt9Yy5hdHRyaWJ1dGVzPXosYy5hdHRyaWJ1dGVzTnVtPVcsYy5pbmRleD1GfWZ1bmN0aW9uIHgoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKVJbRl09MH1mdW5jdGlvbiBiKFIpe1MoUiwwKX1mdW5jdGlvbiBTKFIsRil7bGV0IHo9Yy5uZXdBdHRyaWJ1dGVzLFU9Yy5lbmFibGVkQXR0cmlidXRlcyxXPWMuYXR0cmlidXRlRGl2aXNvcnM7eltSXT0xLFVbUl09PT0wJiYoZS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShSKSxVW1JdPTEpLFdbUl0hPT1GJiYoKG4uaXNXZWJHTDI/ZTp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtuLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oUixGKSxXW1JdPUYpfWZ1bmN0aW9uIEMoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXMsRj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgej0wLFU9Ri5sZW5ndGg7ejxVO3orKylGW3pdIT09Ult6XSYmKGUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHopLEZbel09MCl9ZnVuY3Rpb24gUChSLEYseixVLFcsWil7bi5pc1dlYkdMMj09PSEwJiYoej09PTUxMjR8fHo9PT01MTI1KT9lLnZlcnRleEF0dHJpYklQb2ludGVyKFIsRix6LFcsWik6ZS52ZXJ0ZXhBdHRyaWJQb2ludGVyKFIsRix6LFUsVyxaKX1mdW5jdGlvbiBrKFIsRix6LFUpe2lmKG4uaXNXZWJHTDI9PT0hMSYmKFIuaXNJbnN0YW5jZWRNZXNofHxVLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZ0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpPT09bnVsbClyZXR1cm47eCgpO2xldCBXPVUuYXR0cmlidXRlcyxaPXouZ2V0QXR0cmlidXRlcygpLHJ0PUYuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IG90IGluIFope2xldCBzdD1aW290XTtpZihzdC5sb2NhdGlvbj49MCl7bGV0IFN0PVdbb3RdO2lmKFN0PT09dm9pZCAwJiYob3Q9PT0iaW5zdGFuY2VNYXRyaXgiJiZSLmluc3RhbmNlTWF0cml4JiYoU3Q9Ui5pbnN0YW5jZU1hdHJpeCksb3Q9PT0iaW5zdGFuY2VDb2xvciImJlIuaW5zdGFuY2VDb2xvciYmKFN0PVIuaW5zdGFuY2VDb2xvcikpLFN0IT09dm9pZCAwKXtsZXQgYnQ9U3Qubm9ybWFsaXplZCxNdD1TdC5pdGVtU2l6ZSxsdD1yLmdldChTdCk7aWYobHQ9PT12b2lkIDApY29udGludWU7bGV0IEt0PWx0LmJ1ZmZlcixfdD1sdC50eXBlLGN0PWx0LmJ5dGVzUGVyRWxlbWVudDtpZihTdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgWD1TdC5kYXRhLGV0PVguc3RyaWRlLGR0PVN0Lm9mZnNldDtpZihYJiZYLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylTKHN0LmxvY2F0aW9uK3EsWC5tZXNoUGVyQXR0cmlidXRlKTtSLmlzSW5zdGFuY2VkTWVzaCE9PSEwJiZVLl9tYXhJbnN0YW5jZUNvdW50PT09dm9pZCAwJiYoVS5fbWF4SW5zdGFuY2VDb3VudD1YLm1lc2hQZXJBdHRyaWJ1dGUqWC5jb3VudCl9ZWxzZSBmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspYihzdC5sb2NhdGlvbitxKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylQKHN0LmxvY2F0aW9uK3EsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LGV0KmN0LChkdCtNdC9zdC5sb2NhdGlvblNpemUqcSkqY3QpfWVsc2V7aWYoU3QuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUpe2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylTKHN0LmxvY2F0aW9uK1gsU3QubWVzaFBlckF0dHJpYnV0ZSk7Ui5pc0luc3RhbmNlZE1lc2ghPT0hMCYmVS5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKFUuX21heEluc3RhbmNlQ291bnQ9U3QubWVzaFBlckF0dHJpYnV0ZSpTdC5jb3VudCl9ZWxzZSBmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspYihzdC5sb2NhdGlvbitYKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylQKHN0LmxvY2F0aW9uK1gsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LE10KmN0LE10L3N0LmxvY2F0aW9uU2l6ZSpYKmN0KX19ZWxzZSBpZihydCE9PXZvaWQgMCl7bGV0IGJ0PXJ0W290XTtpZihidCE9PXZvaWQgMClzd2l0Y2goYnQubGVuZ3RoKXtjYXNlIDI6ZS52ZXJ0ZXhBdHRyaWIyZnYoc3QubG9jYXRpb24sYnQpO2JyZWFrO2Nhc2UgMzplLnZlcnRleEF0dHJpYjNmdihzdC5sb2NhdGlvbixidCk7YnJlYWs7Y2FzZSA0OmUudmVydGV4QXR0cmliNGZ2KHN0LmxvY2F0aW9uLGJ0KTticmVhaztkZWZhdWx0OmUudmVydGV4QXR0cmliMWZ2KHN0LmxvY2F0aW9uLGJ0KX19fX1DKCl9ZnVuY3Rpb24gTygpe0koKTtmb3IobGV0IFIgaW4gcyl7bGV0IEY9c1tSXTtmb3IobGV0IHogaW4gRil7bGV0IFU9Rlt6XTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgRlt6XX1kZWxldGUgc1tSXX19ZnVuY3Rpb24gRChSKXtpZihzW1IuaWRdPT09dm9pZCAwKXJldHVybjtsZXQgRj1zW1IuaWRdO2ZvcihsZXQgeiBpbiBGKXtsZXQgVT1GW3pdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSBGW3pdfWRlbGV0ZSBzW1IuaWRdfWZ1bmN0aW9uIEIoUil7Zm9yKGxldCBGIGluIHMpe2xldCB6PXNbRl07aWYoeltSLmlkXT09PXZvaWQgMCljb250aW51ZTtsZXQgVT16W1IuaWRdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSB6W1IuaWRdfX1mdW5jdGlvbiBJKCl7TCgpLGMhPT1sJiYoYz1sLGYoYy5vYmplY3QpKX1mdW5jdGlvbiBMKCl7bC5nZW9tZXRyeT1udWxsLGwucHJvZ3JhbT1udWxsLGwud2lyZWZyYW1lPSExfXJldHVybntzZXR1cDp1LHJlc2V0OkkscmVzZXREZWZhdWx0U3RhdGU6TCxkaXNwb3NlOk8scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6RCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOkIsaW5pdEF0dHJpYnV0ZXM6eCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpDfX1mdW5jdGlvbiBLZHIoZSx0LHIsbil7bGV0IGk9bi5pc1dlYkdMMixvO2Z1bmN0aW9uIGEoYyl7bz1jfWZ1bmN0aW9uIHMoYyx1KXtlLmRyYXdBcnJheXMobyxjLHUpLHIudXBkYXRlKHUsbywxKX1mdW5jdGlvbiBsKGMsdSxoKXtpZihoPT09MClyZXR1cm47bGV0IGYscDtpZihpKWY9ZSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKGY9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLGY9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59ZltwXShvLGMsdSxoKSxyLnVwZGF0ZSh1LG8saCl9dGhpcy5zZXRNb2RlPWEsdGhpcy5yZW5kZXI9cyx0aGlzLnJlbmRlckluc3RhbmNlcz1sfWZ1bmN0aW9uIFpkcihlLHQscil7bGV0IG47ZnVuY3Rpb24gaSgpe2lmKG4hPT12b2lkIDApcmV0dXJuIG47aWYodC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCBrPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtuPWUuZ2V0UGFyYW1ldGVyKGsuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIG49MDtyZXR1cm4gbn1mdW5jdGlvbiBvKGspe2lmKGs9PT0iaGlnaHAiKXtpZihlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO2s9Im1lZGl1bXAifXJldHVybiBrPT09Im1lZGl1bXAiJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBhPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxzPXIucHJlY2lzaW9uIT09dm9pZCAwP3IucHJlY2lzaW9uOiJoaWdocCIsbD1vKHMpO2whPT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIscywibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikscz1sKTtsZXQgYz1hfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI9PT0hMCxoPWUuZ2V0UGFyYW1ldGVyKDM0OTMwKSxmPWUuZ2V0UGFyYW1ldGVyKDM1NjYwKSxwPWUuZ2V0UGFyYW1ldGVyKDMzNzkpLGQ9ZS5nZXRQYXJhbWV0ZXIoMzQwNzYpLGc9ZS5nZXRQYXJhbWV0ZXIoMzQ5MjEpLF89ZS5nZXRQYXJhbWV0ZXIoMzYzNDcpLHk9ZS5nZXRQYXJhbWV0ZXIoMzYzNDgpLHg9ZS5nZXRQYXJhbWV0ZXIoMzYzNDkpLGI9Zj4wLFM9YXx8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0IiksQz1iJiZTLFA9YT9lLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6YSxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6aSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246cyxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6aCxtYXhWZXJ0ZXhUZXh0dXJlczpmLG1heFRleHR1cmVTaXplOnAsbWF4Q3ViZW1hcFNpemU6ZCxtYXhBdHRyaWJ1dGVzOmcsbWF4VmVydGV4VW5pZm9ybXM6XyxtYXhWYXJ5aW5nczp5LG1heEZyYWdtZW50VW5pZm9ybXM6eCx2ZXJ0ZXhUZXh0dXJlczpiLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpTLGZsb2F0VmVydGV4VGV4dHVyZXM6QyxtYXhTYW1wbGVzOlB9fWZ1bmN0aW9uIEpkcihlKXtsZXQgdD10aGlzLHI9bnVsbCxuPTAsaT0hMSxvPSExLGE9bmV3ICRjLHM9bmV3IGtpLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLHApe2xldCBkPWgubGVuZ3RoIT09MHx8Znx8biE9PTB8fGk7cmV0dXJuIGk9ZixyPXUoaCxwLDApLG49aC5sZW5ndGgsZH0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixwKXtsZXQgZD1oLmNsaXBwaW5nUGxhbmVzLGc9aC5jbGlwSW50ZXJzZWN0aW9uLF89aC5jbGlwU2hhZG93cyx5PWUuZ2V0KGgpO2lmKCFpfHxkPT09bnVsbHx8ZC5sZW5ndGg9PT0wfHxvJiYhXylvP3UobnVsbCk6YygpO2Vsc2V7bGV0IHg9bz8wOm4sYj14KjQsUz15LmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1TLFM9dShkLGYsYixwKTtmb3IobGV0IEM9MDtDIT09YjsrK0MpU1tDXT1yW0NdO3kuY2xpcHBpbmdTdGF0ZT1TLHRoaXMubnVtSW50ZXJzZWN0aW9uPWc/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9eH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ciYmKGwudmFsdWU9cixsLm5lZWRzVXBkYXRlPW4+MCksdC5udW1QbGFuZXM9bix0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLHAsZCl7bGV0IGc9aCE9PW51bGw/aC5sZW5ndGg6MCxfPW51bGw7aWYoZyE9PTApe2lmKF89bC52YWx1ZSxkIT09ITB8fF89PT1udWxsKXtsZXQgeT1wK2cqNCx4PWYubWF0cml4V29ybGRJbnZlcnNlO3MuZ2V0Tm9ybWFsTWF0cml4KHgpLChfPT09bnVsbHx8Xy5sZW5ndGg8eSkmJihfPW5ldyBGbG9hdDMyQXJyYXkoeSkpO2ZvcihsZXQgYj0wLFM9cDtiIT09ZzsrK2IsUys9NClhLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHgscyksYS5ub3JtYWwudG9BcnJheShfLFMpLF9bUyszXT1hLmNvbnN0YW50fWwudmFsdWU9XyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1nLHQubnVtSW50ZXJzZWN0aW9uPTAsX319ZnVuY3Rpb24gUWRyKGUpe2xldCB0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm4gcz09PVlQP2EubWFwcGluZz1ueDpzPT09alAmJihhLm1hcHBpbmc9aXgpLGF9ZnVuY3Rpb24gbihhKXtpZihhJiZhLmlzVGV4dHVyZSYmYS5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMSl7bGV0IHM9YS5tYXBwaW5nO2lmKHM9PT1ZUHx8cz09PWpQKWlmKHQuaGFzKGEpKXtsZXQgbD10LmdldChhKS50ZXh0dXJlO3JldHVybiByKGwsYS5tYXBwaW5nKX1lbHNle2xldCBsPWEuaW1hZ2U7aWYobCYmbC5oZWlnaHQ+MCl7bGV0IGM9bmV3IFEzKGwuaGVpZ2h0LzIpO3JldHVybiBjLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKGUsYSksdC5zZXQoYSxjKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpLHIoYy50ZXh0dXJlLGEubWFwcGluZyl9ZWxzZSByZXR1cm4gbnVsbH19cmV0dXJuIGF9ZnVuY3Rpb24gaShhKXtsZXQgcz1hLnRhcmdldDtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpO2xldCBsPXQuZ2V0KHMpO2whPT12b2lkIDAmJih0LmRlbGV0ZShzKSxsLmRpc3Bvc2UoKSl9ZnVuY3Rpb24gbygpe3Q9bmV3IFdlYWtNYXB9cmV0dXJue2dldDpuLGRpc3Bvc2U6b319dmFyIEQxPWNsYXNzIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IodD0tMSxyPTEsbj0xLGk9LTEsbz0uMSxhPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1yLHRoaXMudG9wPW4sdGhpcy5ib3R0b209aSx0aGlzLm5lYXI9byx0aGlzLmZhcj1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfXNldFZpZXdPZmZzZXQodCxyLG4saSxvLGEpe3RoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1yLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLHI9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLG49KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLGk9KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yLG89bi10LGE9bit0LHM9aStyLGw9aS1yO2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgYz0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLHU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207bys9Yyp0aGlzLnZpZXcub2Zmc2V0WCxhPW8rYyp0aGlzLnZpZXcud2lkdGgscy09dSp0aGlzLnZpZXcub2Zmc2V0WSxsPXMtdSp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKG8sYSxzLGwsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC56b29tPXRoaXMuem9vbSxyLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxyLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LHIub2JqZWN0LnRvcD10aGlzLnRvcCxyLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSkscn19O0QxLnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT0hMDt2YXIgVTA9Y2xhc3MgZXh0ZW5kcyBsaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn19O1UwLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO3ZhciBxMz00LEYwPTgsJGY9TWF0aC5wb3coMixGMCkscWZlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxHZmU9RjAtcTMrMStxZmUubGVuZ3RoLGszPTIwLGh1dD1uZXcgRDEse19sb2RQbGFuZXM6TlAsX3NpemVMb2RzOlB1ZSxfc2lnbWFzOlBWfT10bXIoKSxJdWU9bmV3IG5lLGZ1dD1udWxsLFMxPSgxK01hdGguc3FydCg1KSkvMixSMz0xL1MxLEx1ZT1bbmV3IGooMSwxLDEpLG5ldyBqKC0xLDEsMSksbmV3IGooMSwxLC0xKSxuZXcgaigtMSwxLC0xKSxuZXcgaigwLFMxLFIzKSxuZXcgaigwLFMxLC1SMyksbmV3IGooUjMsMCxTMSksbmV3IGooLVIzLDAsUzEpLG5ldyBqKFMxLFIzLDApLG5ldyBqKC1TMSxSMywwKV0sZTY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1udWxsLHRoaXMuX2JsdXJNYXRlcmlhbD1lbXIoazMpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LHI9MCxuPS4xLGk9MTAwKXtmdXQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxuLGksbykscj4wJiZ0aGlzLl9ibHVyKG8sMCwwLHIpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxyPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LHIpfWZyb21DdWJlbWFwKHQscj1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxyKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1OdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXt0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1SdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCE9PW51bGwmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSx0aGlzLl9jdWJlbWFwU2hhZGVyIT09bnVsbCYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksdGhpcy5fZXF1aXJlY3RTaGFkZXIhPT1udWxsJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDxOUC5sZW5ndGg7dCsrKU5QW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZnV0KSx0LnNjaXNzb3JUZXN0PSExLElWKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LHIpe2Z1dD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbj1yfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LG4pLHRoaXMuX2FwcGx5UE1SRU0obiksdGhpcy5fY2xlYW51cChuKSxufV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IHI9e21hZ0ZpbHRlcjppaSxtaW5GaWx0ZXI6aWksZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6QzEsZm9ybWF0OlFvLGVuY29kaW5nOlFkLGRlcHRoQnVmZmVyOiExfSxuPWt1ZShyKTtyZXR1cm4gbi5kZXB0aEJ1ZmZlcj0hdCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD09PW51bGwmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1rdWUocikpLG59X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgcj1uZXcgdGkoTlBbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShyLGh1dCl9X3NjZW5lVG9DdWJlVVYodCxyLG4saSl7bGV0IHM9bmV3IFVpKDkwLDEscixuKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGg9dS5hdXRvQ2xlYXIsZj11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihJdWUpLHUudG9uZU1hcHBpbmc9S2QsdS5hdXRvQ2xlYXI9ITE7bGV0IHA9bmV3IHNoKHtuYW1lOiJQTVJFTS5CYWNrZ3JvdW5kIixzaWRlOklpLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZD1uZXcgdGkobmV3IFFmLHApLGc9ITEsXz10LmJhY2tncm91bmQ7Xz9fLmlzQ29sb3ImJihwLmNvbG9yLmNvcHkoXyksdC5iYWNrZ3JvdW5kPW51bGwsZz0hMCk6KHAuY29sb3IuY29weShJdWUpLGc9ITApO2ZvcihsZXQgeT0wO3k8Njt5Kyspe2xldCB4PXklMzt4PT09MD8ocy51cC5zZXQoMCxsW3ldLDApLHMubG9va0F0KGNbeV0sMCwwKSk6eD09PTE/KHMudXAuc2V0KDAsMCxsW3ldKSxzLmxvb2tBdCgwLGNbeV0sMCkpOihzLnVwLnNldCgwLGxbeV0sMCkscy5sb29rQXQoMCwwLGNbeV0pKSxJVihpLHgqJGYseT4yPyRmOjAsJGYsJGYpLHUuc2V0UmVuZGVyVGFyZ2V0KGkpLGcmJnUucmVuZGVyKGQscyksdS5yZW5kZXIodCxzKX1kLmdlb21ldHJ5LmRpc3Bvc2UoKSxkLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9X31fdGV4dHVyZVRvQ3ViZVVWKHQscil7bGV0IG49dGhpcy5fcmVuZGVyZXIsaT10Lm1hcHBpbmc9PT1ueHx8dC5tYXBwaW5nPT09aXg7aT8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPU51ZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9dC5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxKTp0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1SdWUoKSk7bGV0IG89aT90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLGE9bmV3IHRpKE5QWzBdLG8pLHM9by51bmlmb3JtcztzLmVudk1hcC52YWx1ZT10LGl8fHMudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSVYociwwLDAsMyokZiwyKiRmKSxuLnNldFJlbmRlclRhcmdldChyKSxuLnJlbmRlcihhLGh1dCl9X2FwcGx5UE1SRU0odCl7bGV0IHI9dGhpcy5fcmVuZGVyZXIsbj1yLmF1dG9DbGVhcjtyLmF1dG9DbGVhcj0hMTtmb3IobGV0IGk9MTtpPEdmZTtpKyspe2xldCBvPU1hdGguc3FydChQVltpXSpQVltpXS1QVltpLTFdKlBWW2ktMV0pLGE9THVlWyhpLTEpJUx1ZS5sZW5ndGhdO3RoaXMuX2JsdXIodCxpLTEsaSxvLGEpfXIuYXV0b0NsZWFyPW59X2JsdXIodCxyLG4saSxvKXtsZXQgYT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LGEscixuLGksImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihhLHQsbixuLGksImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQscixuLGksbyxhLHMpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO2EhPT0ibGF0aXR1ZGluYWwiJiZhIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IHRpKE5QW2ldLGMpLGY9Yy51bmlmb3JtcyxwPVB1ZVtuXS0xLGQ9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipwKToyKk1hdGguUEkvKDIqazMtMSksZz1vL2QsXz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IodSpnKTprMztfPmszJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke199IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gJHtrM31gKTtsZXQgeT1bXSx4PTA7Zm9yKGxldCBQPTA7UDxrMzsrK1Ape2xldCBrPVAvZyxPPU1hdGguZXhwKC1rKmsvMik7eS5wdXNoKE8pLFA9PT0wP3grPU86UDxfJiYoeCs9MipPKX1mb3IobGV0IFA9MDtQPHkubGVuZ3RoO1ArKyl5W1BdPXlbUF0veDtmLmVudk1hcC52YWx1ZT10LnRleHR1cmUsZi5zYW1wbGVzLnZhbHVlPV8sZi53ZWlnaHRzLnZhbHVlPXksZi5sYXRpdHVkaW5hbC52YWx1ZT1hPT09ImxhdGl0dWRpbmFsIixzJiYoZi5wb2xlQXhpcy52YWx1ZT1zKSxmLmRUaGV0YS52YWx1ZT1kLGYubWlwSW50LnZhbHVlPUYwLW47bGV0IGI9UHVlW2ldLFM9MypNYXRoLm1heCgwLCRmLTIqYiksQz0oaT09PTA/MDoyKiRmKSsyKmIqKGk+RjAtcTM/aS1GMCtxMzowKTtJVihyLFMsQywzKmIsMipiKSxsLnNldFJlbmRlclRhcmdldChyKSxsLnJlbmRlcihoLGh1dCl9fTtmdW5jdGlvbiB0bXIoKXtsZXQgZT1bXSx0PVtdLHI9W10sbj1GMDtmb3IobGV0IGk9MDtpPEdmZTtpKyspe2xldCBvPU1hdGgucG93KDIsbik7dC5wdXNoKG8pO2xldCBhPTEvbztpPkYwLXEzP2E9cWZlW2ktRjArcTMtMV06aT09PTAmJihhPTApLHIucHVzaChhKTtsZXQgcz0xLyhvLTEpLGw9LXMvMixjPTErcy8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LHA9MyxkPTIsZz0xLF89bmV3IEZsb2F0MzJBcnJheShwKmYqaCkseT1uZXcgRmxvYXQzMkFycmF5KGQqZipoKSx4PW5ldyBGbG9hdDMyQXJyYXkoZypmKmgpO2ZvcihsZXQgUz0wO1M8aDtTKyspe2xldCBDPVMlMyoyLzMtMSxQPVM+Mj8wOi0xLGs9W0MsUCwwLEMrMi8zLFAsMCxDKzIvMyxQKzEsMCxDLFAsMCxDKzIvMyxQKzEsMCxDLFArMSwwXTtfLnNldChrLHAqZipTKSx5LnNldCh1LGQqZipTKTtsZXQgTz1bUyxTLFMsUyxTLFNdO3guc2V0KE8sZypmKlMpfWxldCBiPW5ldyBQZTtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShfLHApKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKZSh5LGQpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgSmUoeCxnKSksZS5wdXNoKGIpLG4+cTMmJm4tLX1yZXR1cm57X2xvZFBsYW5lczplLF9zaXplTG9kczp0LF9zaWdtYXM6cn19ZnVuY3Rpb24ga3VlKGUpe2xldCB0PW5ldyB1cygzKiRmLDMqJGYsZSk7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPXhNLHQudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLHQuc2Npc3NvclRlc3Q9ITAsdH1mdW5jdGlvbiBJVihlLHQscixuLGkpe2Uudmlld3BvcnQuc2V0KHQscixuLGkpLGUuc2Npc3Nvci5zZXQodCxyLG4saSl9ZnVuY3Rpb24gZW1yKGUpe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoZSkscj1uZXcgaigwLDEsMCk7cmV0dXJuIG5ldyBVMCh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOmV9LHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHNhbXBsZXM6e3ZhbHVlOjF9LHdlaWdodHM6e3ZhbHVlOnR9LGxhdGl0dWRpbmFsOnt2YWx1ZTohMX0sZFRoZXRhOnt2YWx1ZTowfSxtaXBJbnQ6e3ZhbHVlOjB9LHBvbGVBeGlzOnt2YWx1ZTpyfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSBpbnQgc2FtcGxlczsKCQkJdW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07CgkJCXVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDsKCQkJdW5pZm9ybSBmbG9hdCBkVGhldGE7CgkJCXVuaWZvcm0gZmxvYXQgbWlwSW50OwoJCQl1bmlmb3JtIHZlYzMgcG9sZUF4aXM7CgoJCQkjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVYKCQkJI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KCgkJCXZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkgewoKCQkJCWZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApOwoJCQkJLy8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uCgkJCQl2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YQoJCQkJCSsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKQoJCQkJCSsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApOwoKCQkJCXJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApOwoKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoKCQkJCXZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTsKCgkJCQlpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHsKCgkJCQkJYXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApOwoKCQkJCX0KCgkJCQlheGlzID0gbm9ybWFsaXplKCBheGlzICk7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7CgoJCQkJZm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkgewoKCQkJCQlpZiAoIGkgPj0gc2FtcGxlcyApIHsKCgkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJCWZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTsKCQkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7CgoJCQkJfQoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBSdWUoKXtsZXQgZT1uZXcgTHQoMSwxKTtyZXR1cm4gbmV3IFUwKHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTplfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTsKCgkJCSNpbmNsdWRlIDxjb21tb24+CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgoJCQkJdmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTsKCQkJCXZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTsKCgkJCQl2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTsKCQkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCQl2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggKz0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnkgKz0gdGV4ZWxTaXplLnk7CgkJCQl2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggLT0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCgkJCQl2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApOwoJCQkJdmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTsKCQkJCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIE51ZSgpe3JldHVybiBuZXcgVTAoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6Tmh0KCksZnJhZ21lbnRTaGFkZXI6YAoKCQkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCgkJCXZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uOwoKCQkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIE5odCgpe3JldHVybmAKCgkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQlhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4OwoKCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJLy8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvbgoJCXZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkgewoKCQkJdXYgPSAyLjAgKiB1diAtIDEuMDsKCgkJCXZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApOwoKCQkJaWYgKCBmYWNlID09IDAuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHsKCgkJCQlkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHoKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHsKCgkJCQlkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHoKCgkJCX0KCgkJCXJldHVybiBkaXJlY3Rpb247CgoJCX0KCgkJdm9pZCBtYWluKCkgewoKCQkJdk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApOwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKCgkJfQoJYH1mdW5jdGlvbiBybXIoZSl7bGV0IHQ9bmV3IFdlYWtNYXAscj1udWxsO2Z1bmN0aW9uIG4ocyl7aWYocyYmcy5pc1RleHR1cmUpe2xldCBsPXMubWFwcGluZyxjPWw9PT1ZUHx8bD09PWpQLHU9bD09PW54fHxsPT09aXg7aWYoY3x8dSlpZihzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmcy5uZWVkc1BNUkVNVXBkYXRlPT09ITApe3MubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChzKTtyZXR1cm4gcj09PW51bGwmJihyPW5ldyBlNihlKSksaD1jP3IuZnJvbUVxdWlyZWN0YW5ndWxhcihzLGgpOnIuZnJvbUN1YmVtYXAocyxoKSx0LnNldChzLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKHMpKXJldHVybiB0LmdldChzKS50ZXh0dXJlO3tsZXQgaD1zLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJmkoaCkpe3I9PT1udWxsJiYocj1uZXcgZTYoZSkpO2xldCBmPWM/ci5mcm9tRXF1aXJlY3Rhbmd1bGFyKHMpOnIuZnJvbUN1YmVtYXAocyk7cmV0dXJuIHQuc2V0KHMsZikscy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBzfWZ1bmN0aW9uIGkocyl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylzW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIG8ocyl7bGV0IGw9cy50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIGEoKXt0PW5ldyBXZWFrTWFwLHIhPT1udWxsJiYoci5kaXNwb3NlKCkscj1udWxsKX1yZXR1cm57Z2V0Om4sZGlzcG9zZTphfX1mdW5jdGlvbiBubXIoZSl7bGV0IHQ9e307ZnVuY3Rpb24gcihuKXtpZih0W25dIT09dm9pZCAwKXJldHVybiB0W25dO2xldCBpO3N3aXRjaChuKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOmk9ZS5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjppPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjppPWUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxlLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6aT1lLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDppPWUuZ2V0RXh0ZW5zaW9uKG4pfXJldHVybiB0W25dPWksaX1yZXR1cm57aGFzOmZ1bmN0aW9uKG4pe3JldHVybiByKG4pIT09bnVsbH0saW5pdDpmdW5jdGlvbihuKXtuLmlzV2ViR0wyP3IoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKToocigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHIoIk9FU190ZXh0dXJlX2Zsb2F0IikscigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLHIoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikscigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikscigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLHIoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikscigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxyKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxyKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxyKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKG4pe2xldCBpPXIobik7cmV0dXJuIGk9PT1udWxsJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrbisiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLGl9fX1mdW5jdGlvbiBpbXIoZSx0LHIsbil7bGV0IGk9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBhKGgpe2xldCBmPWgudGFyZ2V0O2YuaW5kZXghPT1udWxsJiZ0LnJlbW92ZShmLmluZGV4KTtmb3IobGV0IGQgaW4gZi5hdHRyaWJ1dGVzKXQucmVtb3ZlKGYuYXR0cmlidXRlc1tkXSk7Zi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxkZWxldGUgaVtmLmlkXTtsZXQgcD1vLmdldChmKTtwJiYodC5yZW1vdmUocCksby5kZWxldGUoZikpLG4ucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoZiksZi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PT09ITAmJmRlbGV0ZSBmLl9tYXhJbnN0YW5jZUNvdW50LHIubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGlbZi5pZF09PT0hMHx8KGYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksaVtmLmlkXT0hMCxyLm1lbW9yeS5nZW9tZXRyaWVzKyspLGZ9ZnVuY3Rpb24gbChoKXtsZXQgZj1oLmF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIGYpdC51cGRhdGUoZltkXSwzNDk2Mik7bGV0IHA9aC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIHApe2xldCBnPXBbZF07Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXQudXBkYXRlKGdbX10sMzQ5NjIpfX1mdW5jdGlvbiBjKGgpe2xldCBmPVtdLHA9aC5pbmRleCxkPWguYXR0cmlidXRlcy5wb3NpdGlvbixnPTA7aWYocCE9PW51bGwpe2xldCB4PXAuYXJyYXk7Zz1wLnZlcnNpb247Zm9yKGxldCBiPTAsUz14Lmxlbmd0aDtiPFM7Yis9Myl7bGV0IEM9eFtiKzBdLFA9eFtiKzFdLGs9eFtiKzJdO2YucHVzaChDLFAsUCxrLGssQyl9fWVsc2V7bGV0IHg9ZC5hcnJheTtnPWQudmVyc2lvbjtmb3IobGV0IGI9MCxTPXgubGVuZ3RoLzMtMTtiPFM7Yis9Myl7bGV0IEM9YiswLFA9YisxLGs9YisyO2YucHVzaChDLFAsUCxrLGssQyl9fWxldCBfPW5ldyhCZmUoZik/SzM6JDMpKGYsMSk7Xy52ZXJzaW9uPWc7bGV0IHk9by5nZXQoaCk7eSYmdC5yZW1vdmUoeSksby5zZXQoaCxfKX1mdW5jdGlvbiB1KGgpe2xldCBmPW8uZ2V0KGgpO2lmKGYpe2xldCBwPWguaW5kZXg7cCE9PW51bGwmJmYudmVyc2lvbjxwLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBvLmdldChoKX1yZXR1cm57Z2V0OnMsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIG9tcihlLHQscixuKXtsZXQgaT1uLmlzV2ViR0wyLG87ZnVuY3Rpb24gYShmKXtvPWZ9bGV0IHMsbDtmdW5jdGlvbiBjKGYpe3M9Zi50eXBlLGw9Zi5ieXRlc1BlckVsZW1lbnR9ZnVuY3Rpb24gdShmLHApe2UuZHJhd0VsZW1lbnRzKG8scCxzLGYqbCksci51cGRhdGUocCxvLDEpfWZ1bmN0aW9uIGgoZixwLGQpe2lmKGQ9PT0wKXJldHVybjtsZXQgZyxfO2lmKGkpZz1lLF89ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihnPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksXz0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLGc9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWdbX10obyxwLHMsZipsLGQpLHIudXBkYXRlKHAsbyxkKX10aGlzLnNldE1vZGU9YSx0aGlzLnNldEluZGV4PWMsdGhpcy5yZW5kZXI9dSx0aGlzLnJlbmRlckluc3RhbmNlcz1ofWZ1bmN0aW9uIGFtcihlKXtsZXQgdD17Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LHI9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtmdW5jdGlvbiBuKG8sYSxzKXtzd2l0Y2goci5jYWxscysrLGEpe2Nhc2UgNDpyLnRyaWFuZ2xlcys9cyooby8zKTticmVhaztjYXNlIDE6ci5saW5lcys9cyooby8yKTticmVhaztjYXNlIDM6ci5saW5lcys9cyooby0xKTticmVhaztjYXNlIDI6ci5saW5lcys9cypvO2JyZWFrO2Nhc2UgMDpyLnBvaW50cys9cypvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGEpO2JyZWFrfX1mdW5jdGlvbiBpKCl7ci5mcmFtZSsrLHIuY2FsbHM9MCxyLnRyaWFuZ2xlcz0wLHIucG9pbnRzPTAsci5saW5lcz0wfXJldHVybnttZW1vcnk6dCxyZW5kZXI6cixwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDppLHVwZGF0ZTpufX12YXIgdE09Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07dE0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO2Z1bmN0aW9uIHNtcihlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gbG1yKGUsdCl7cmV0dXJuIE1hdGguYWJzKHRbMV0pLU1hdGguYWJzKGVbMV0pfWZ1bmN0aW9uIER1ZShlLHQpe2xldCByPTEsbj10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7biBpbnN0YW5jZW9mIEludDhBcnJheT9yPTEyNzpuIGluc3RhbmNlb2YgSW50MTZBcnJheT9yPTMyNzY3Om4gaW5zdGFuY2VvZiBJbnQzMkFycmF5P3I9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixuKSxlLmRpdmlkZVNjYWxhcihyKX1mdW5jdGlvbiBjbXIoZSx0LHIpe2xldCBuPXt9LGk9bmV3IEZsb2F0MzJBcnJheSg4KSxvPW5ldyBXZWFrTWFwLGE9bmV3IGoscz1bXTtmb3IobGV0IGM9MDtjPDg7YysrKXNbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgcD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBkPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCxnPW8uZ2V0KHUpO2lmKGc9PT12b2lkIDB8fGcuY291bnQhPT1kKXtsZXQgTD1mdW5jdGlvbigpe0IuZGlzcG9zZSgpLG8uZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9O2chPT12b2lkIDAmJmcudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHg9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sUz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLEM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LFA9eD09PSEwPzI6MSxrPUMqUCxPPTE7az50Lm1heFRleHR1cmVTaXplJiYoTz1NYXRoLmNlaWwoay90Lm1heFRleHR1cmVTaXplKSxrPXQubWF4VGV4dHVyZVNpemUpO2xldCBEPW5ldyBGbG9hdDMyQXJyYXkoaypPKjQqZCksQj1uZXcgdE0oRCxrLE8sZCk7Qi5mb3JtYXQ9UW8sQi50eXBlPWpkLEIubmVlZHNVcGRhdGU9ITA7bGV0IEk9UCo0O2ZvcihsZXQgUj0wO1I8ZDtSKyspe2xldCBGPWJbUl0sej1TW1JdLFU9aypPKjQqUjtmb3IobGV0IFc9MDtXPEYuY291bnQ7VysrKXthLmZyb21CdWZmZXJBdHRyaWJ1dGUoRixXKSxGLm5vcm1hbGl6ZWQ9PT0hMCYmRHVlKGEsRik7bGV0IFo9VypJO0RbVStaKzBdPWEueCxEW1UrWisxXT1hLnksRFtVK1orMl09YS56LERbVStaKzNdPTAseD09PSEwJiYoYS5mcm9tQnVmZmVyQXR0cmlidXRlKHosVyksei5ub3JtYWxpemVkPT09ITAmJkR1ZShhLHopLERbVStaKzRdPWEueCxEW1UrWis1XT1hLnksRFtVK1orNl09YS56LERbVStaKzddPTApfX1nPXtjb3VudDpkLHRleHR1cmU6QixzaXplOm5ldyBMdChrLE8pfSxvLnNldCh1LGcpLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9bGV0IF89MDtmb3IobGV0IHg9MDt4PHAubGVuZ3RoO3grKylfKz1wW3hdO2xldCB5PXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLV87Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIseSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscCksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0c1RleHR1cmUiLGcudGV4dHVyZSxyKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoZSwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLGcuc2l6ZSl9ZWxzZXtsZXQgZD1wPT09dm9pZCAwPzA6cC5sZW5ndGgsZz1uW3UuaWRdO2lmKGc9PT12b2lkIDB8fGcubGVuZ3RoIT09ZCl7Zz1bXTtmb3IobGV0IFM9MDtTPGQ7UysrKWdbU109W1MsMF07blt1LmlkXT1nfWZvcihsZXQgUz0wO1M8ZDtTKyspe2xldCBDPWdbU107Q1swXT1TLENbMV09cFtTXX1nLnNvcnQobG1yKTtmb3IobGV0IFM9MDtTPDg7UysrKVM8ZCYmZ1tTXVsxXT8oc1tTXVswXT1nW1NdWzBdLHNbU11bMV09Z1tTXVsxXSk6KHNbU11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsc1tTXVsxXT0wKTtzLnNvcnQoc21yKTtsZXQgXz11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix5PXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCx4PTA7Zm9yKGxldCBTPTA7Uzw4O1MrKyl7bGV0IEM9c1tTXSxQPUNbMF0saz1DWzFdO1AhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmaz8oXyYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKSE9PV9bUF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUyxfW1BdKSx5JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1MpIT09eVtQXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTLHlbUF0pLGlbU109ayx4Kz1rKTooXyYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1MpLHkmJnUuaGFzQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTKSxpW1NdPTApfWxldCBiPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsYiksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaSl9fXJldHVybnt1cGRhdGU6bH19ZnVuY3Rpb24gdW1yKGUsdCxyLG4pe2xldCBpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG8obCl7bGV0IGM9bi5yZW5kZXIuZnJhbWUsdT1sLmdlb21ldHJ5LGg9dC5nZXQobCx1KTtyZXR1cm4gaS5nZXQoaCkhPT1jJiYodC51cGRhdGUoaCksaS5zZXQoaCxjKSksbC5pc0luc3RhbmNlZE1lc2gmJihsLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpPT09ITEmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksaH1mdW5jdGlvbiBhKCl7aT1uZXcgV2Vha01hcH1mdW5jdGlvbiBzKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksYy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOm8sZGlzcG9zZTphfX12YXIgcjY9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07cjYucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgV2ZlPW5ldyB2aSxZZmU9bmV3IHRNLGpmZT1uZXcgcjYsWGZlPW5ldyBIMCxPdWU9W10senVlPVtdLEZ1ZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxCdWU9bmV3IEZsb2F0MzJBcnJheSg5KSxIdWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBiTShlLHQscil7bGV0IG49ZVswXTtpZihuPD0wfHxuPjApcmV0dXJuIGU7bGV0IGk9dCpyLG89T3VlW2ldO2lmKG89PT12b2lkIDAmJihvPW5ldyBGbG9hdDMyQXJyYXkoaSksT3VlW2ldPW8pLHQhPT0wKXtuLnRvQXJyYXkobywwKTtmb3IobGV0IGE9MSxzPTA7YSE9PXQ7KythKXMrPXIsZVthXS50b0FycmF5KG8scyl9cmV0dXJuIG99ZnVuY3Rpb24gaHMoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBDYShlLHQpe2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyllW3JdPXRbcl19ZnVuY3Rpb24gS1UoZSx0KXtsZXQgcj16dWVbdF07cj09PXZvaWQgMCYmKHI9bmV3IEludDMyQXJyYXkodCksenVlW3RdPXIpO2ZvcihsZXQgbj0wO24hPT10OysrbilyW25dPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiByfWZ1bmN0aW9uIGhtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7clswXSE9PXQmJihlLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiBmbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueSkmJihlLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksclswXT10LngsclsxXT10LnkpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiBwbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueXx8clsyXSE9PXQueikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLHJbMF09dC54LHJbMV09dC55LHJbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoclswXSE9PXQucnx8clsxXSE9PXQuZ3x8clsyXSE9PXQuYikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLHJbMF09dC5yLHJbMV09dC5nLHJbMl09dC5iKTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTNmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gZG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10Lnl8fHJbMl0hPT10Lnp8fHJbM10hPT10LncpJiYoZS51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksclswXT10LngsclsxXT10LnksclsyXT10LnosclszXT10LncpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiBtbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtIdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsSHVlKSxDYShyLG4pfX1mdW5jdGlvbiBnbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtCdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsQnVlKSxDYShyLG4pfX1mdW5jdGlvbiBfbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtGdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsRnVlKSxDYShyLG4pfX1mdW5jdGlvbiB5bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO3JbMF0hPT10JiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gdm1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB4bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLENhKHIsdCkpfWZ1bmN0aW9uIGJtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aHMocix0KXx8KGUudW5pZm9ybTRpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gd21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtyWzBdIT09dCYmKGUudW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiBTbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBNbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBFbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBUbXIoZSx0LHIpe2xldCBuPXRoaXMuY2FjaGUsaT1yLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtuWzBdIT09aSYmKGUudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxuWzBdPWkpLHIuc2FmZVNldFRleHR1cmUyRCh0fHxXZmUsaSl9ZnVuY3Rpb24gQ21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUzRCh0fHxqZmUsaSl9ZnVuY3Rpb24gQW1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxYZmUsaSl9ZnVuY3Rpb24gUG1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUyREFycmF5KHR8fFlmZSxpKX1mdW5jdGlvbiBJbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gaG1yO2Nhc2UgMzU2NjQ6cmV0dXJuIGZtcjtjYXNlIDM1NjY1OnJldHVybiBwbXI7Y2FzZSAzNTY2NjpyZXR1cm4gZG1yO2Nhc2UgMzU2NzQ6cmV0dXJuIG1tcjtjYXNlIDM1Njc1OnJldHVybiBnbXI7Y2FzZSAzNTY3NjpyZXR1cm4gX21yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiB5bXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiB2bXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB4bXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBibXI7Y2FzZSA1MTI1OnJldHVybiB3bXI7Y2FzZSAzNjI5NDpyZXR1cm4gU21yO2Nhc2UgMzYyOTU6cmV0dXJuIE1tcjtjYXNlIDM2Mjk2OnJldHVybiBFbXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBUbXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIENtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBBbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gUG1yfX1mdW5jdGlvbiBMbXIoZSx0KXtlLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGttcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDIpO2UudW5pZm9ybTJmdih0aGlzLmFkZHIscil9ZnVuY3Rpb24gUm1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsMyk7ZS51bmlmb3JtM2Z2KHRoaXMuYWRkcixyKX1mdW5jdGlvbiBObXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSw0KTtlLnVuaWZvcm00ZnYodGhpcy5hZGRyLHIpfWZ1bmN0aW9uIERtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDQpO2UudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gT21yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsOSk7ZS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiB6bXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSwxNik7ZS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBGbXIoZSx0KXtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEJtcihlLHQpe2UudW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gSG1yKGUsdCl7ZS51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWbXIoZSx0KXtlLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFVtcihlLHQpe2UudW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHFtcihlLHQpe2UudW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEdtcihlLHQpe2UudW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFdtcihlLHQpe2UudW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFltcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmUyRCh0W29dfHxXZmUsaVtvXSl9ZnVuY3Rpb24gam1yKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxpPUtVKHIsbik7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IG89MDtvIT09bjsrK28pci5zZXRUZXh0dXJlM0QodFtvXXx8amZlLGlbb10pfWZ1bmN0aW9uIFhtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fFhmZSxpW29dKX1mdW5jdGlvbiAkbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9S1UocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNldFRleHR1cmUyREFycmF5KHRbb118fFlmZSxpW29dKX1mdW5jdGlvbiBLbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gTG1yO2Nhc2UgMzU2NjQ6cmV0dXJuIGttcjtjYXNlIDM1NjY1OnJldHVybiBSbXI7Y2FzZSAzNTY2NjpyZXR1cm4gTm1yO2Nhc2UgMzU2NzQ6cmV0dXJuIERtcjtjYXNlIDM1Njc1OnJldHVybiBPbXI7Y2FzZSAzNTY3NjpyZXR1cm4gem1yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBGbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBCbXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBIbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBWbXI7Y2FzZSA1MTI1OnJldHVybiBVbXI7Y2FzZSAzNjI5NDpyZXR1cm4gcW1yO2Nhc2UgMzYyOTU6cmV0dXJuIEdtcjtjYXNlIDM2Mjk2OnJldHVybiBXbXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBZbXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIGptcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBYbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gJG1yfX1mdW5jdGlvbiBabXIoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmFkZHI9cix0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9SW1yKHQudHlwZSl9ZnVuY3Rpb24gJGZlKGUsdCxyKXt0aGlzLmlkPWUsdGhpcy5hZGRyPXIsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9S21yKHQudHlwZSl9JGZlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihlKXtsZXQgdD10aGlzLmNhY2hlO2UgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09ZS5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgpKSxDYSh0LGUpfTtmdW5jdGlvbiBLZmUoZSl7dGhpcy5pZD1lLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fUtmZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXRoaXMuc2VxO2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXtsZXQgYT1uW2ldO2Euc2V0VmFsdWUoZSx0W2EuaWRdLHIpfX07dmFyIHB1dD0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24gVnVlKGUsdCl7ZS5zZXEucHVzaCh0KSxlLm1hcFt0LmlkXT10fWZ1bmN0aW9uIEptcihlLHQscil7bGV0IG49ZS5uYW1lLGk9bi5sZW5ndGg7Zm9yKHB1dC5sYXN0SW5kZXg9MDs7KXtsZXQgbz1wdXQuZXhlYyhuKSxhPXB1dC5sYXN0SW5kZXgscz1vWzFdLGw9b1syXT09PSJdIixjPW9bM107aWYobCYmKHM9c3wwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZhKzI9PT1pKXtWdWUocixjPT09dm9pZCAwP25ldyBabXIocyxlLHQpOm5ldyAkZmUocyxlLHQpKTticmVha31lbHNle2xldCBoPXIubWFwW3NdO2g9PT12b2lkIDAmJihoPW5ldyBLZmUocyksVnVlKHIsaCkpLHI9aH19fWZ1bmN0aW9uIEIwKGUsdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IHI9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgbj0wO248cjsrK24pe2xldCBpPWUuZ2V0QWN0aXZlVW5pZm9ybSh0LG4pLG89ZS5nZXRVbmlmb3JtTG9jYXRpb24odCxpLm5hbWUpO0ptcihpLG8sdGhpcyl9fUIwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihlLHQscixuKXtsZXQgaT10aGlzLm1hcFt0XTtpIT09dm9pZCAwJiZpLnNldFZhbHVlKGUscixuKX07QjAucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10W3JdO24hPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUoZSxyLG4pfTtCMC51cGxvYWQ9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtpIT09bzsrK2kpe2xldCBhPXRbaV0scz1yW2EuaWRdO3MubmVlZHNVcGRhdGUhPT0hMSYmYS5zZXRWYWx1ZShlLHMudmFsdWUsbil9fTtCMC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24oZSx0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO24hPT1pOysrbil7bGV0IG89ZVtuXTtvLmlkIGluIHQmJnIucHVzaChvKX1yZXR1cm4gcn07ZnVuY3Rpb24gVXVlKGUsdCxyKXtsZXQgbj1lLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gZS5zaGFkZXJTb3VyY2UobixyKSxlLmNvbXBpbGVTaGFkZXIobiksbn12YXIgUW1yPTA7ZnVuY3Rpb24gdGdyKGUpe2xldCB0PWUuc3BsaXQoYApgKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdPXIrMSsiOiAiK3Rbcl07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGVncihlKXtzd2l0Y2goZSl7Y2FzZSBRZDpyZXR1cm5bIkxpbmVhciIsIiggdmFsdWUgKSJdO2Nhc2UgV246cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07ZGVmYXVsdDpyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOiIsZSksWyJMaW5lYXIiLCIoIHZhbHVlICkiXX19ZnVuY3Rpb24gcXVlKGUsdCxyKXtsZXQgbj1lLmdldFNoYWRlclBhcmFtZXRlcih0LDM1NzEzKSxpPWUuZ2V0U2hhZGVySW5mb0xvZyh0KS50cmltKCk7cmV0dXJuIG4mJmk9PT0iIj8iIjpyLnRvVXBwZXJDYXNlKCkrYAoKYCtpK2AKCmArdGdyKGUuZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiByZ3IoZSx0KXtsZXQgcj1lZ3IodCk7cmV0dXJuInZlYzQgIitlKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrclswXStyWzFdKyI7IH0ifWZ1bmN0aW9uIG5ncihlLHQpe2xldCByO3N3aXRjaCh0KXtjYXNlIHVmZTpyPSJMaW5lYXIiO2JyZWFrO2Nhc2UgaGZlOnI9IlJlaW5oYXJkIjticmVhaztjYXNlIGZmZTpyPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgcGZlOnI9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgZGZlOnI9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxyPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrZSsiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIityKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gaWdyKGUpe3JldHVybltlLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxlLmVudk1hcEN1YmVVVnx8ZS5idW1wTWFwfHxlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8ZS5jbGVhcmNvYXROb3JtYWxNYXB8fGUuZmxhdFNoYWRpbmd8fGUuc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKGUuZXh0ZW5zaW9uRnJhZ0RlcHRofHxlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixlLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChlLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fGUuZW52TWFwfHxlLnRyYW5zbWlzc2lvbikmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoSFApLmpvaW4oYApgKX1mdW5jdGlvbiBvZ3IoZSl7bGV0IHQ9W107Zm9yKGxldCByIGluIGUpe2xldCBuPWVbcl07biE9PSExJiZ0LnB1c2goIiNkZWZpbmUgIityKyIgIituKX1yZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gYWdyKGUsdCl7bGV0IHI9e30sbj1lLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcyMSk7Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IG89ZS5nZXRBY3RpdmVBdHRyaWIodCxpKSxhPW8ubmFtZSxzPTE7by50eXBlPT09MzU2NzQmJihzPTIpLG8udHlwZT09PTM1Njc1JiYocz0zKSxvLnR5cGU9PT0zNTY3NiYmKHM9NCksclthXT17dHlwZTpvLnR5cGUsbG9jYXRpb246ZS5nZXRBdHRyaWJMb2NhdGlvbih0LGEpLGxvY2F0aW9uU2l6ZTpzfX1yZXR1cm4gcn1mdW5jdGlvbiBIUChlKXtyZXR1cm4gZSE9PSIifWZ1bmN0aW9uIEd1ZShlLHQpe3JldHVybiBlLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBXdWUoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcy10Lm51bUNsaXBJbnRlcnNlY3Rpb24pfXZhciBzZ3I9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBKdXQoZSl7cmV0dXJuIGUucmVwbGFjZShzZ3IsbGdyKX1mdW5jdGlvbiBsZ3IoZSx0KXtsZXQgcj1oclt0XTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gSnV0KHIpfXZhciBjZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyx1Z3I9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBZdWUoZSl7cmV0dXJuIGUucmVwbGFjZSh1Z3IsWmZlKS5yZXBsYWNlKGNncixoZ3IpfWZ1bmN0aW9uIGhncihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksWmZlKGUsdCxyLG4pfWZ1bmN0aW9uIFpmZShlLHQscixuKXtsZXQgaT0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChyKTtvKyspaSs9bi5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIGl9ZnVuY3Rpb24ganVlKGUpe2xldCB0PSJwcmVjaXNpb24gIitlLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtlLnByZWNpc2lvbisiIGludDsiO3JldHVybiBlLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDplLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6ZS5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gZmdyKGUpe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIGUuc2hhZG93TWFwVHlwZT09PUNodD90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOmUuc2hhZG93TWFwVHlwZT09PVVoZT90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6ZS5zaGFkb3dNYXBUeXBlPT09RjMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIHBncihlKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYoZS5lbnZNYXApc3dpdGNoKGUuZW52TWFwTW9kZSl7Y2FzZSBueDpjYXNlIGl4OnQ9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgeE06Y2FzZSB6Njp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBkZ3IoZSl7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKGUuZW52TWFwKXN3aXRjaChlLmVudk1hcE1vZGUpe2Nhc2UgaXg6Y2FzZSB6Njp0PSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBtZ3IoZSl7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihlLmVudk1hcClzd2l0Y2goZS5jb21iaW5lKXtjYXNlIE82OnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBsZmU6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSBjZmU6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZ2dyKGUsdCxyLG4pe2xldCBpPWUuZ2V0Q29udGV4dCgpLG89ci5kZWZpbmVzLGE9ci52ZXJ0ZXhTaGFkZXIscz1yLmZyYWdtZW50U2hhZGVyLGw9ZmdyKHIpLGM9cGdyKHIpLHU9ZGdyKHIpLGg9bWdyKHIpLGY9ci5pc1dlYkdMMj8iIjppZ3IocikscD1vZ3IobyksZD1pLmNyZWF0ZVByb2dyYW0oKSxnLF8seT1yLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK3IuZ2xzbFZlcnNpb24rYApgOiIiO3IuaXNSYXdTaGFkZXJNYXRlcmlhbD8oZz1bcF0uZmlsdGVyKEhQKS5qb2luKGAKYCksZy5sZW5ndGg+MCYmKGcrPWAKYCksXz1bZixwXS5maWx0ZXIoSFApLmpvaW4oYApgKSxfLmxlbmd0aD4wJiYoXys9YApgKSk6KGc9W2p1ZShyKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK3Iuc2hhZGVyTmFtZSxwLHIuaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLHIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIE1BWF9CT05FUyAiK3IubWF4Qm9uZXMsci51c2VGb2cmJnIuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHIudXNlRm9nJiZyLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHIubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsci5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLHIuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixyLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHIubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsci5ub3JtYWxNYXAmJnIudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLHIuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLHIuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixyLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsci5kaXNwbGFjZW1lbnRNYXAmJnIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixyLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsci5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLHIuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsci5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsci5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsci5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLHIudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsci52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixyLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHIudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixyLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixyLm1vcnBoTm9ybWFscyYmci5mbGF0U2hhZGluZz09PSExPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLHIubW9ycGhUYXJnZXRzJiZyLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cyYmci5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfQ09VTlQgIityLm1vcnBoVGFyZ2V0c0NvdW50OiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnIucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCIJYXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiCWF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIglhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKSIsIglhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIglhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWYgKCBkZWZpbmVkKCBVU0VfTU9SUEhUQVJHRVRTICkgJiYgISBkZWZpbmVkKCBNT1JQSFRBUkdFVFNfVEVYVFVSRSApICkiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIgkjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIgkjZWxzZSIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ1OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIgkjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCIJYXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLGAKYF0uZmlsdGVyKEhQKS5qb2luKGAKYCksXz1bZixqdWUociksIiNkZWZpbmUgU0hBREVSX05BTUUgIityLnNoYWRlck5hbWUscCxyLnVzZUZvZyYmci5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsci51c2VGb2cmJnIuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsci5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsci5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmVudk1hcD8iI2RlZmluZSAiK2g6IiIsci5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHIuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixyLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsci5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixyLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixyLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixyLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixyLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsci5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLHIuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixyLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsci5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixyLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixyLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixyLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsci5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsci5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixyLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixyLnZlcnRleENvbG9yc3x8ci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixyLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLHIudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsci51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsci5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixyLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmci5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoci5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxyLmVudk1hcCkmJnIucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixyLnRvbmVNYXBwaW5nIT09S2Q/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixyLnRvbmVNYXBwaW5nIT09S2Q/aHIudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixyLnRvbmVNYXBwaW5nIT09S2Q/bmdyKCJ0b25lTWFwcGluZyIsci50b25lTWFwcGluZyk6IiIsci5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixyLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixoci5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCxyZ3IoImxpbmVhclRvT3V0cHV0VGV4ZWwiLHIub3V0cHV0RW5jb2RpbmcpLHIuZGVwdGhQYWNraW5nPyIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIityLmRlcHRoUGFja2luZzoiIixgCmBdLmZpbHRlcihIUCkuam9pbihgCmApKSxhPUp1dChhKSxhPUd1ZShhLHIpLGE9V3VlKGEscikscz1KdXQocykscz1HdWUocyxyKSxzPVd1ZShzLHIpLGE9WXVlKGEpLHM9WXVlKHMpLHIuaXNXZWJHTDImJnIuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYoeT1gI3ZlcnNpb24gMzAwIGVzCmAsZz1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK2csXz1bIiNkZWZpbmUgdmFyeWluZyBpbiIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbihgCmApK2AKYCtfKTtsZXQgeD15K2crYSxiPXkrXytzLFM9VXVlKGksMzU2MzMseCksQz1VdWUoaSwzNTYzMixiKTtpZihpLmF0dGFjaFNoYWRlcihkLFMpLGkuYXR0YWNoU2hhZGVyKGQsQyksci5pbmRleDBBdHRyaWJ1dGVOYW1lIT09dm9pZCAwP2kuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCxyLmluZGV4MEF0dHJpYnV0ZU5hbWUpOnIubW9ycGhUYXJnZXRzPT09ITAmJmkuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCwicG9zaXRpb24iKSxpLmxpbmtQcm9ncmFtKGQpLGUuZGVidWcuY2hlY2tTaGFkZXJFcnJvcnMpe2xldCBPPWkuZ2V0UHJvZ3JhbUluZm9Mb2coZCkudHJpbSgpLEQ9aS5nZXRTaGFkZXJJbmZvTG9nKFMpLnRyaW0oKSxCPWkuZ2V0U2hhZGVySW5mb0xvZyhDKS50cmltKCksST0hMCxMPSEwO2lmKGkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihkLDM1NzE0KT09PSExKXtJPSExO2xldCBSPXF1ZShpLFMsInZlcnRleCIpLEY9cXVlKGksQywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IFNoYWRlciBFcnJvciAiK2kuZ2V0RXJyb3IoKSsiIC0gVkFMSURBVEVfU1RBVFVTICIraS5nZXRQcm9ncmFtUGFyYW1ldGVyKGQsMzU3MTUpK2AKClByb2dyYW0gSW5mbyBMb2c6IGArTytgCmArUitgCmArRil9ZWxzZSBPIT09IiI/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6IixPKTooRD09PSIifHxCPT09IiIpJiYoTD0hMSk7TCYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOkkscHJvZ3JhbUxvZzpPLHZlcnRleFNoYWRlcjp7bG9nOkQscHJlZml4Omd9LGZyYWdtZW50U2hhZGVyOntsb2c6QixwcmVmaXg6X319KX1pLmRlbGV0ZVNoYWRlcihTKSxpLmRlbGV0ZVNoYWRlcihDKTtsZXQgUDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIFA9PT12b2lkIDAmJihQPW5ldyBCMChpLGQpKSxQfTtsZXQgaztyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGs9PT12b2lkIDAmJihrPWFncihpLGQpKSxrfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtuLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksaS5kZWxldGVQcm9ncmFtKGQpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1yLnNoYWRlck5hbWUsdGhpcy5pZD1RbXIrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09ZCx0aGlzLnZlcnRleFNoYWRlcj1TLHRoaXMuZnJhZ21lbnRTaGFkZXI9Qyx0aGlzfXZhciBfZ3I9MCxRdXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYWRlckNhY2hlPW5ldyBNYXAsdGhpcy5tYXRlcmlhbENhY2hlPW5ldyBNYXB9dXBkYXRlKHQpe2xldCByPXQudmVydGV4U2hhZGVyLG49dC5mcmFnbWVudFNoYWRlcixpPXRoaXMuX2dldFNoYWRlclN0YWdlKHIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UobiksYT10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiBhLmhhcyhpKT09PSExJiYoYS5hZGQoaSksaS51c2VkVGltZXMrKyksYS5oYXMobyk9PT0hMSYmKGEuYWRkKG8pLG8udXNlZFRpbWVzKyspLHRoaXN9cmVtb3ZlKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZS5nZXQodCk7Zm9yKGxldCBuIG9mIHIpbi51c2VkVGltZXMtLSxuLnVzZWRUaW1lcz09PTAmJnRoaXMuc2hhZGVyQ2FjaGUuZGVsZXRlKG4pO3JldHVybiB0aGlzLm1hdGVyaWFsQ2FjaGUuZGVsZXRlKHQpLHRoaXN9Z2V0VmVydGV4U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQudmVydGV4U2hhZGVyKS5pZH1nZXRGcmFnbWVudFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LmZyYWdtZW50U2hhZGVyKS5pZH1kaXNwb3NlKCl7dGhpcy5zaGFkZXJDYWNoZS5jbGVhcigpLHRoaXMubWF0ZXJpYWxDYWNoZS5jbGVhcigpfV9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZTtyZXR1cm4gci5oYXModCk9PT0hMSYmci5zZXQodCxuZXcgU2V0KSxyLmdldCh0KX1fZ2V0U2hhZGVyU3RhZ2UodCl7bGV0IHI9dGhpcy5zaGFkZXJDYWNoZTtpZihyLmhhcyh0KT09PSExKXtsZXQgbj1uZXcgdGh0O3Iuc2V0KHQsbil9cmV0dXJuIHIuZ2V0KHQpfX0sdGh0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1fZ3IrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZnVuY3Rpb24geWdyKGUsdCxyLG4saSxvLGEpe2xldCBzPW5ldyBYMyxsPW5ldyBRdXQsYz1bXSx1PWkuaXNXZWJHTDIsaD1pLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1pLmZsb2F0VmVydGV4VGV4dHVyZXMscD1pLm1heFZlcnRleFVuaWZvcm1zLGQ9aS52ZXJ0ZXhUZXh0dXJlcyxnPWkucHJlY2lzaW9uLF89e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiB5KEkpe2xldCBSPUkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigocC0yMCkvNCksVT1NYXRoLm1pbih6LFIubGVuZ3RoKTtyZXR1cm4gVTxSLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitSLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK1UrIi4iKSwwKTpVfX1mdW5jdGlvbiB4KEksTCxSLEYseil7bGV0IFU9Ri5mb2csVz1JLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFo9KEkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9yOnQpLmdldChJLmVudk1hcHx8VykscnQ9X1tJLnR5cGVdLG90PXouaXNTa2lubmVkTWVzaD95KHopOjA7SS5wcmVjaXNpb24hPT1udWxsJiYoZz1pLmdldE1heFByZWNpc2lvbihJLnByZWNpc2lvbiksZyE9PUkucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsSS5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixnLCJpbnN0ZWFkLiIpKTtsZXQgc3QsU3QsYnQsTXQ7aWYocnQpe2xldCBYPWFoW3J0XTtzdD1YLnZlcnRleFNoYWRlcixTdD1YLmZyYWdtZW50U2hhZGVyfWVsc2Ugc3Q9SS52ZXJ0ZXhTaGFkZXIsU3Q9SS5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShJKSxidD1sLmdldFZlcnRleFNoYWRlcklEKEkpLE10PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChJKTtsZXQgbHQ9ZS5nZXRSZW5kZXJUYXJnZXQoKSxLdD1JLmFscGhhVGVzdD4wLF90PUkuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6cnQsc2hhZGVyTmFtZTpJLnR5cGUsdmVydGV4U2hhZGVyOnN0LGZyYWdtZW50U2hhZGVyOlN0LGRlZmluZXM6SS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmJ0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6TXQsaXNSYXdTaGFkZXJNYXRlcmlhbDpJLmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjpJLmdsc2xWZXJzaW9uLHByZWNpc2lvbjpnLGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmQsb3V0cHV0RW5jb2Rpbmc6bHQ9PT1udWxsP2Uub3V0cHV0RW5jb2Rpbmc6bHQuaXNYUlJlbmRlclRhcmdldD09PSEwP2x0LnRleHR1cmUuZW5jb2Rpbmc6UWQsbWFwOiEhSS5tYXAsbWF0Y2FwOiEhSS5tYXRjYXAsZW52TWFwOiEhWixlbnZNYXBNb2RlOlomJloubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFaJiYoWi5tYXBwaW5nPT09eE18fFoubWFwcGluZz09PXo2KSxsaWdodE1hcDohIUkubGlnaHRNYXAsYW9NYXA6ISFJLmFvTWFwLGVtaXNzaXZlTWFwOiEhSS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhSS5idW1wTWFwLG5vcm1hbE1hcDohIUkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOkkubm9ybWFsTWFwVHlwZT09PURmZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6SS5ub3JtYWxNYXBUeXBlPT09YXgsZGVjb2RlVmlkZW9UZXh0dXJlOiEhSS5tYXAmJkkubWFwLmlzVmlkZW9UZXh0dXJlPT09ITAmJkkubWFwLmVuY29kaW5nPT09V24sY2xlYXJjb2F0Ol90LGNsZWFyY29hdE1hcDpfdCYmISFJLmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6X3QmJiEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOl90JiYhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIUkuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIUkucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIUkubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhSS5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIUkuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIUkuYWxwaGFNYXAsYWxwaGFUZXN0Okt0LGFscGhhV3JpdGU6SS5hbHBoYVdyaXRlfHxJLnRyYW5zcGFyZW50LGdyYWRpZW50TWFwOiEhSS5ncmFkaWVudE1hcCxzaGVlbjpJLnNoZWVuPjAsc2hlZW5Db2xvck1hcDohIUkuc2hlZW5Db2xvck1hcCxzaGVlblJvdWdobmVzc01hcDohIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdHJhbnNtaXNzaW9uOkkudHJhbnNtaXNzaW9uPjAsdHJhbnNtaXNzaW9uTWFwOiEhSS50cmFuc21pc3Npb25NYXAsdGhpY2tuZXNzTWFwOiEhSS50aGlja25lc3NNYXAsY29tYmluZTpJLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6ISFJLm5vcm1hbE1hcCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczpJLnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6SS52ZXJ0ZXhDb2xvcnM9PT0hMCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx2ZXJ0ZXhVdnM6ISFJLm1hcHx8ISFJLmJ1bXBNYXB8fCEhSS5ub3JtYWxNYXB8fCEhSS5zcGVjdWxhck1hcHx8ISFJLmFscGhhTWFwfHwhIUkuZW1pc3NpdmVNYXB8fCEhSS5yb3VnaG5lc3NNYXB8fCEhSS5tZXRhbG5lc3NNYXB8fCEhSS5jbGVhcmNvYXRNYXB8fCEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXB8fCEhSS5jbGVhcmNvYXROb3JtYWxNYXB8fCEhSS5kaXNwbGFjZW1lbnRNYXB8fCEhSS50cmFuc21pc3Npb25NYXB8fCEhSS50aGlja25lc3NNYXB8fCEhSS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISFJLnNwZWN1bGFyQ29sb3JNYXB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdXZzVmVydGV4T25seTohKCEhSS5tYXB8fCEhSS5idW1wTWFwfHwhIUkubm9ybWFsTWFwfHwhIUkuc3BlY3VsYXJNYXB8fCEhSS5hbHBoYU1hcHx8ISFJLmVtaXNzaXZlTWFwfHwhIUkucm91Z2huZXNzTWFwfHwhIUkubWV0YWxuZXNzTWFwfHwhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwfHxJLnRyYW5zbWlzc2lvbj4wfHwhIUkudHJhbnNtaXNzaW9uTWFwfHwhIUkudGhpY2tuZXNzTWFwfHwhIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEhSS5zcGVjdWxhckNvbG9yTWFwfHxJLnNoZWVuPjB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXApJiYhIUkuZGlzcGxhY2VtZW50TWFwLGZvZzohIVUsdXNlRm9nOkkuZm9nLGZvZ0V4cDI6VSYmVS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISFJLmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjpJLnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmgsc2tpbm5pbmc6ei5pc1NraW5uZWRNZXNoPT09ITAmJm90PjAsbWF4Qm9uZXM6b3QsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpMLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpMLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOkwuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6TC5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpMLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpMLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpMLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOkwuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6YS5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjphLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6SS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDplLnNoYWRvd01hcC5lbmFibGVkJiZSLmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6ZS5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzpJLnRvbmVNYXBwZWQ/ZS50b25lTWFwcGluZzpLZCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czplLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTpJLnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDpJLnNpZGU9PT1MMSxmbGlwU2lkZWQ6SS5zaWRlPT09SWksZGVwdGhQYWNraW5nOkkuZGVwdGhQYWNraW5nIT09dm9pZCAwP0kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6SS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fG4uaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8bi5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxuLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpJLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKEkpe2xldCBMPVtdO2lmKEkuc2hhZGVySUQ/TC5wdXNoKEkuc2hhZGVySUQpOihMLnB1c2goSS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksTC5wdXNoKEkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLEkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IFIgaW4gSS5kZWZpbmVzKUwucHVzaChSKSxMLnB1c2goSS5kZWZpbmVzW1JdKTtyZXR1cm4gSS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihTKEwsSSksQyhMLEkpLEwucHVzaChlLm91dHB1dEVuY29kaW5nKSksTC5wdXNoKEkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxMLmpvaW4oKX1mdW5jdGlvbiBTKEksTCl7SS5wdXNoKEwucHJlY2lzaW9uKSxJLnB1c2goTC5vdXRwdXRFbmNvZGluZyksSS5wdXNoKEwuZW52TWFwTW9kZSksSS5wdXNoKEwuY29tYmluZSksSS5wdXNoKEwudmVydGV4VXZzKSxJLnB1c2goTC5mb2dFeHAyKSxJLnB1c2goTC5zaXplQXR0ZW51YXRpb24pLEkucHVzaChMLm1heEJvbmVzKSxJLnB1c2goTC5tb3JwaFRhcmdldHNDb3VudCksSS5wdXNoKEwubnVtRGlyTGlnaHRzKSxJLnB1c2goTC5udW1Qb2ludExpZ2h0cyksSS5wdXNoKEwubnVtU3BvdExpZ2h0cyksSS5wdXNoKEwubnVtSGVtaUxpZ2h0cyksSS5wdXNoKEwubnVtUmVjdEFyZWFMaWdodHMpLEkucHVzaChMLm51bURpckxpZ2h0U2hhZG93cyksSS5wdXNoKEwubnVtUG9pbnRMaWdodFNoYWRvd3MpLEkucHVzaChMLm51bVNwb3RMaWdodFNoYWRvd3MpLEkucHVzaChMLnNoYWRvd01hcFR5cGUpLEkucHVzaChMLnRvbmVNYXBwaW5nKSxJLnB1c2goTC5udW1DbGlwcGluZ1BsYW5lcyksSS5wdXNoKEwubnVtQ2xpcEludGVyc2VjdGlvbiksSS5wdXNoKEwuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gQyhJLEwpe3MuZGlzYWJsZUFsbCgpLEwuaXNXZWJHTDImJnMuZW5hYmxlKDApLEwuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmcy5lbmFibGUoMSksTC5pbnN0YW5jaW5nJiZzLmVuYWJsZSgyKSxMLmluc3RhbmNpbmdDb2xvciYmcy5lbmFibGUoMyksTC5tYXAmJnMuZW5hYmxlKDQpLEwubWF0Y2FwJiZzLmVuYWJsZSg1KSxMLmVudk1hcCYmcy5lbmFibGUoNiksTC5lbnZNYXBDdWJlVVYmJnMuZW5hYmxlKDcpLEwubGlnaHRNYXAmJnMuZW5hYmxlKDgpLEwuYW9NYXAmJnMuZW5hYmxlKDkpLEwuZW1pc3NpdmVNYXAmJnMuZW5hYmxlKDEwKSxMLmJ1bXBNYXAmJnMuZW5hYmxlKDExKSxMLm5vcm1hbE1hcCYmcy5lbmFibGUoMTIpLEwub2JqZWN0U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDEzKSxMLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmcy5lbmFibGUoMTQpLEwuY2xlYXJjb2F0JiZzLmVuYWJsZSgxNSksTC5jbGVhcmNvYXRNYXAmJnMuZW5hYmxlKDE2KSxMLmNsZWFyY29hdFJvdWdobmVzc01hcCYmcy5lbmFibGUoMTcpLEwuY2xlYXJjb2F0Tm9ybWFsTWFwJiZzLmVuYWJsZSgxOCksTC5kaXNwbGFjZW1lbnRNYXAmJnMuZW5hYmxlKDE5KSxMLnNwZWN1bGFyTWFwJiZzLmVuYWJsZSgyMCksTC5yb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxMLm1ldGFsbmVzc01hcCYmcy5lbmFibGUoMjIpLEwuZ3JhZGllbnRNYXAmJnMuZW5hYmxlKDIzKSxMLmFscGhhTWFwJiZzLmVuYWJsZSgyNCksTC5hbHBoYVRlc3QmJnMuZW5hYmxlKDI1KSxMLnZlcnRleENvbG9ycyYmcy5lbmFibGUoMjYpLEwudmVydGV4QWxwaGFzJiZzLmVuYWJsZSgyNyksTC52ZXJ0ZXhVdnMmJnMuZW5hYmxlKDI4KSxMLnZlcnRleFRhbmdlbnRzJiZzLmVuYWJsZSgyOSksTC51dnNWZXJ0ZXhPbmx5JiZzLmVuYWJsZSgzMCksTC5mb2cmJnMuZW5hYmxlKDMxKSxJLnB1c2gocy5tYXNrKSxzLmRpc2FibGVBbGwoKSxMLnVzZUZvZyYmcy5lbmFibGUoMCksTC5mbGF0U2hhZGluZyYmcy5lbmFibGUoMSksTC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZzLmVuYWJsZSgyKSxMLnNraW5uaW5nJiZzLmVuYWJsZSgzKSxMLnVzZVZlcnRleFRleHR1cmUmJnMuZW5hYmxlKDQpLEwubW9ycGhUYXJnZXRzJiZzLmVuYWJsZSg1KSxMLm1vcnBoTm9ybWFscyYmcy5lbmFibGUoNiksTC5wcmVtdWx0aXBsaWVkQWxwaGEmJnMuZW5hYmxlKDcpLEwuc2hhZG93TWFwRW5hYmxlZCYmcy5lbmFibGUoOCksTC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmcy5lbmFibGUoOSksTC5kb3VibGVTaWRlZCYmcy5lbmFibGUoMTApLEwuZmxpcFNpZGVkJiZzLmVuYWJsZSgxMSksTC5kZXB0aFBhY2tpbmcmJnMuZW5hYmxlKDEyKSxMLmRpdGhlcmluZyYmcy5lbmFibGUoMTMpLEwuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnMuZW5hYmxlKDE0KSxMLnNwZWN1bGFyQ29sb3JNYXAmJnMuZW5hYmxlKDE1KSxMLnRyYW5zbWlzc2lvbiYmcy5lbmFibGUoMTYpLEwudHJhbnNtaXNzaW9uTWFwJiZzLmVuYWJsZSgxNyksTC50aGlja25lc3NNYXAmJnMuZW5hYmxlKDE4KSxMLnNoZWVuJiZzLmVuYWJsZSgxOSksTC5zaGVlbkNvbG9yTWFwJiZzLmVuYWJsZSgyMCksTC5zaGVlblJvdWdobmVzc01hcCYmcy5lbmFibGUoMjEpLEwuZGVjb2RlVmlkZW9UZXh0dXJlJiZzLmVuYWJsZSgyMiksSS5wdXNoKHMubWFzayl9ZnVuY3Rpb24gUChJKXtsZXQgTD1fW0kudHlwZV0sUjtpZihMKXtsZXQgRj1haFtMXTtSPVZmZS5jbG9uZShGLnVuaWZvcm1zKX1lbHNlIFI9SS51bmlmb3JtcztyZXR1cm4gUn1mdW5jdGlvbiBrKEksTCl7bGV0IFI7Zm9yKGxldCBGPTAsej1jLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1jW0ZdO2lmKFUuY2FjaGVLZXk9PT1MKXtSPVUsKytSLnVzZWRUaW1lczticmVha319cmV0dXJuIFI9PT12b2lkIDAmJihSPW5ldyBnZ3IoZSxMLEksbyksYy5wdXNoKFIpKSxSfWZ1bmN0aW9uIE8oSSl7aWYoLS1JLnVzZWRUaW1lcz09PTApe2xldCBMPWMuaW5kZXhPZihJKTtjW0xdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxJLmRlc3Ryb3koKX19ZnVuY3Rpb24gRChJKXtsLnJlbW92ZShJKX1mdW5jdGlvbiBCKCl7bC5kaXNwb3NlKCl9cmV0dXJue2dldFBhcmFtZXRlcnM6eCxnZXRQcm9ncmFtQ2FjaGVLZXk6YixnZXRVbmlmb3JtczpQLGFjcXVpcmVQcm9ncmFtOmsscmVsZWFzZVByb2dyYW06TyxyZWxlYXNlU2hhZGVyQ2FjaGU6RCxwcm9ncmFtczpjLGRpc3Bvc2U6Qn19ZnVuY3Rpb24gdmdyKCl7bGV0IGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdChvKXtsZXQgYT1lLmdldChvKTtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30sZS5zZXQobyxhKSksYX1mdW5jdGlvbiByKG8pe2UuZGVsZXRlKG8pfWZ1bmN0aW9uIG4obyxhLHMpe2UuZ2V0KG8pW2FdPXN9ZnVuY3Rpb24gaSgpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LHJlbW92ZTpyLHVwZGF0ZTpuLGRpc3Bvc2U6aX19ZnVuY3Rpb24geGdyKGUsdCl7cmV0dXJuIGUuZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9lLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOmUucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP2UucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjplLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9lLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6ZS56IT09dC56P2Uuei10Lno6ZS5pZC10LmlkfWZ1bmN0aW9uIFh1ZShlLHQpe3JldHVybiBlLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/ZS5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjplLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6ZS56IT09dC56P3Quei1lLno6ZS5pZC10LmlkfWZ1bmN0aW9uICR1ZSgpe2xldCBlPVtdLHQ9MCxyPVtdLG49W10saT1bXTtmdW5jdGlvbiBvKCl7dD0wLHIubGVuZ3RoPTAsbi5sZW5ndGg9MCxpLmxlbmd0aD0wfWZ1bmN0aW9uIGEoaCxmLHAsZCxnLF8pe2xldCB5PWVbdF07cmV0dXJuIHk9PT12b2lkIDA/KHk9e2lkOmguaWQsb2JqZWN0OmgsZ2VvbWV0cnk6ZixtYXRlcmlhbDpwLGdyb3VwT3JkZXI6ZCxyZW5kZXJPcmRlcjpoLnJlbmRlck9yZGVyLHo6Zyxncm91cDpffSxlW3RdPXkpOih5LmlkPWguaWQseS5vYmplY3Q9aCx5Lmdlb21ldHJ5PWYseS5tYXRlcmlhbD1wLHkuZ3JvdXBPcmRlcj1kLHkucmVuZGVyT3JkZXI9aC5yZW5kZXJPcmRlcix5Lno9Zyx5Lmdyb3VwPV8pLHQrKyx5fWZ1bmN0aW9uIHMoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi5wdXNoKHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnB1c2goeSk6ci5wdXNoKHkpfWZ1bmN0aW9uIGwoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi51bnNoaWZ0KHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnVuc2hpZnQoeSk6ci51bnNoaWZ0KHkpfWZ1bmN0aW9uIGMoaCxmKXtyLmxlbmd0aD4xJiZyLnNvcnQoaHx8eGdyKSxuLmxlbmd0aD4xJiZuLnNvcnQoZnx8WHVlKSxpLmxlbmd0aD4xJiZpLnNvcnQoZnx8WHVlKX1mdW5jdGlvbiB1KCl7Zm9yKGxldCBoPXQsZj1lLmxlbmd0aDtoPGY7aCsrKXtsZXQgcD1lW2hdO2lmKHAuaWQ9PT1udWxsKWJyZWFrO3AuaWQ9bnVsbCxwLm9iamVjdD1udWxsLHAuZ2VvbWV0cnk9bnVsbCxwLm1hdGVyaWFsPW51bGwscC5ncm91cD1udWxsfX1yZXR1cm57b3BhcXVlOnIsdHJhbnNtaXNzaXZlOm4sdHJhbnNwYXJlbnQ6aSxpbml0Om8scHVzaDpzLHVuc2hpZnQ6bCxmaW5pc2g6dSxzb3J0OmN9fWZ1bmN0aW9uIGJncigpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQobixpKXtsZXQgbztyZXR1cm4gZS5oYXMobik9PT0hMT8obz1uZXcgJHVlLGUuc2V0KG4sW29dKSk6aT49ZS5nZXQobikubGVuZ3RoPyhvPW5ldyAkdWUsZS5nZXQobikucHVzaChvKSk6bz1lLmdldChuKVtpXSxvfWZ1bmN0aW9uIHIoKXtlPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxkaXNwb3NlOnJ9fWZ1bmN0aW9uIHdncigpe2xldCBlPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoZVt0LmlkXSE9PXZvaWQgMClyZXR1cm4gZVt0LmlkXTtsZXQgcjtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOnI9e2RpcmVjdGlvbjpuZXcgaixjb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixkaXJlY3Rpb246bmV3IGosY29sb3I6bmV3IG5lLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixjb2xvcjpuZXcgbmUsZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6cj17ZGlyZWN0aW9uOm5ldyBqLHNreUNvbG9yOm5ldyBuZSxncm91bmRDb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6cj17Y29sb3I6bmV3IG5lLHBvc2l0aW9uOm5ldyBqLGhhbGZXaWR0aDpuZXcgaixoYWxmSGVpZ2h0Om5ldyBqfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX1mdW5jdGlvbiBTZ3IoKXtsZXQgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKGVbdC5pZF0hPT12b2lkIDApcmV0dXJuIGVbdC5pZF07bGV0IHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0fTticmVhaztjYXNlIlNwb3RMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0LHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX12YXIgTWdyPTA7ZnVuY3Rpb24gRWdyKGUsdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShlLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBUZ3IoZSx0KXtsZXQgcj1uZXcgd2dyLG49U2dyKCksaT17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKWkucHJvYmUucHVzaChuZXcgaik7bGV0IG89bmV3IGosYT1uZXcgTWUscz1uZXcgTWU7ZnVuY3Rpb24gbCh1LGgpe2xldCBmPTAscD0wLGQ9MDtmb3IobGV0IEQ9MDtEPDk7RCsrKWkucHJvYmVbRF0uc2V0KDAsMCwwKTtsZXQgZz0wLF89MCx5PTAseD0wLGI9MCxTPTAsQz0wLFA9MDt1LnNvcnQoRWdyKTtsZXQgaz1oIT09ITA/TWF0aC5QSToxO2ZvcihsZXQgRD0wLEI9dS5sZW5ndGg7RDxCO0QrKyl7bGV0IEk9dVtEXSxMPUkuY29sb3IsUj1JLmludGVuc2l0eSxGPUkuZGlzdGFuY2Usej1JLnNoYWRvdyYmSS5zaGFkb3cubWFwP0kuc2hhZG93Lm1hcC50ZXh0dXJlOm51bGw7aWYoSS5pc0FtYmllbnRMaWdodClmKz1MLnIqUiprLHArPUwuZypSKmssZCs9TC5iKlIqaztlbHNlIGlmKEkuaXNMaWdodFByb2JlKWZvcihsZXQgVT0wO1U8OTtVKyspaS5wcm9iZVtVXS5hZGRTY2FsZWRWZWN0b3IoSS5zaC5jb2VmZmljaWVudHNbVV0sUik7ZWxzZSBpZihJLmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5jb2xvci5jb3B5KEkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEkuaW50ZW5zaXR5KmspLEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxpLmRpcmVjdGlvbmFsU2hhZG93W2ddPVosaS5kaXJlY3Rpb25hbFNoYWRvd01hcFtnXT16LGkuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbZ109SS5zaGFkb3cubWF0cml4LFMrK31pLmRpcmVjdGlvbmFsW2ddPVUsZysrfWVsc2UgaWYoSS5pc1Nwb3RMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSS5tYXRyaXhXb3JsZCksVS5jb2xvci5jb3B5KEwpLm11bHRpcGx5U2NhbGFyKFIqayksVS5kaXN0YW5jZT1GLFUuY29uZUNvcz1NYXRoLmNvcyhJLmFuZ2xlKSxVLnBlbnVtYnJhQ29zPU1hdGguY29zKEkuYW5nbGUqKDEtSS5wZW51bWJyYSkpLFUuZGVjYXk9SS5kZWNheSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsaS5zcG90U2hhZG93W3ldPVosaS5zcG90U2hhZG93TWFwW3ldPXosaS5zcG90U2hhZG93TWF0cml4W3ldPUkuc2hhZG93Lm1hdHJpeCxQKyt9aS5zcG90W3ldPVUseSsrfWVsc2UgaWYoSS5pc1JlY3RBcmVhTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1UuY29sb3IuY29weShMKS5tdWx0aXBseVNjYWxhcihSKSxVLmhhbGZXaWR0aC5zZXQoSS53aWR0aCouNSwwLDApLFUuaGFsZkhlaWdodC5zZXQoMCxJLmhlaWdodCouNSwwKSxpLnJlY3RBcmVhW3hdPVUseCsrfWVsc2UgaWYoSS5pc1BvaW50TGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUuY29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihJLmludGVuc2l0eSprKSxVLmRpc3RhbmNlPUkuZGlzdGFuY2UsVS5kZWNheT1JLmRlY2F5LEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxaLnNoYWRvd0NhbWVyYU5lYXI9Vy5jYW1lcmEubmVhcixaLnNoYWRvd0NhbWVyYUZhcj1XLmNhbWVyYS5mYXIsaS5wb2ludFNoYWRvd1tfXT1aLGkucG9pbnRTaGFkb3dNYXBbX109eixpLnBvaW50U2hhZG93TWF0cml4W19dPUkuc2hhZG93Lm1hdHJpeCxDKyt9aS5wb2ludFtfXT1VLF8rK31lbHNlIGlmKEkuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1Uuc2t5Q29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLFUuZ3JvdW5kQ29sb3IuY29weShJLmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLGkuaGVtaVtiXT1VLGIrK319eD4wJiYodC5pc1dlYkdMMnx8ZS5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITA/KGkucmVjdEFyZWFMVEMxPXJlLkxUQ19GTE9BVF8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19GTE9BVF8yKTplLmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSEwPyhpLnJlY3RBcmVhTFRDMT1yZS5MVENfSEFMRl8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxpLmFtYmllbnRbMF09ZixpLmFtYmllbnRbMV09cCxpLmFtYmllbnRbMl09ZDtsZXQgTz1pLmhhc2g7KE8uZGlyZWN0aW9uYWxMZW5ndGghPT1nfHxPLnBvaW50TGVuZ3RoIT09X3x8Ty5zcG90TGVuZ3RoIT09eXx8Ty5yZWN0QXJlYUxlbmd0aCE9PXh8fE8uaGVtaUxlbmd0aCE9PWJ8fE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzIT09U3x8Ty5udW1Qb2ludFNoYWRvd3MhPT1DfHxPLm51bVNwb3RTaGFkb3dzIT09UCkmJihpLmRpcmVjdGlvbmFsLmxlbmd0aD1nLGkuc3BvdC5sZW5ndGg9eSxpLnJlY3RBcmVhLmxlbmd0aD14LGkucG9pbnQubGVuZ3RoPV8saS5oZW1pLmxlbmd0aD1iLGkuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPVMsaS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9UyxpLnBvaW50U2hhZG93Lmxlbmd0aD1DLGkucG9pbnRTaGFkb3dNYXAubGVuZ3RoPUMsaS5zcG90U2hhZG93Lmxlbmd0aD1QLGkuc3BvdFNoYWRvd01hcC5sZW5ndGg9UCxpLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1TLGkucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPUMsaS5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1QLE8uZGlyZWN0aW9uYWxMZW5ndGg9ZyxPLnBvaW50TGVuZ3RoPV8sTy5zcG90TGVuZ3RoPXksTy5yZWN0QXJlYUxlbmd0aD14LE8uaGVtaUxlbmd0aD1iLE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzPVMsTy5udW1Qb2ludFNoYWRvd3M9QyxPLm51bVNwb3RTaGFkb3dzPVAsaS52ZXJzaW9uPU1ncisrKX1mdW5jdGlvbiBjKHUsaCl7bGV0IGY9MCxwPTAsZD0wLGc9MCxfPTAseT1oLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHg9MCxiPXUubGVuZ3RoO3g8Yjt4Kyspe2xldCBTPXVbeF07aWYoUy5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBDPWkuZGlyZWN0aW9uYWxbZl07Qy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMudGFyZ2V0Lm1hdHJpeFdvcmxkKSxDLmRpcmVjdGlvbi5zdWIobyksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLGYrK31lbHNlIGlmKFMuaXNTcG90TGlnaHQpe2xldCBDPWkuc3BvdFtkXTtDLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxDLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy50YXJnZXQubWF0cml4V29ybGQpLEMuZGlyZWN0aW9uLnN1YihvKSxDLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oeSksZCsrfWVsc2UgaWYoUy5pc1JlY3RBcmVhTGlnaHQpe2xldCBDPWkucmVjdEFyZWFbZ107Qy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSkscy5pZGVudGl0eSgpLGEuY29weShTLm1hdHJpeFdvcmxkKSxhLnByZW11bHRpcGx5KHkpLHMuZXh0cmFjdFJvdGF0aW9uKGEpLEMuaGFsZldpZHRoLnNldChTLndpZHRoKi41LDAsMCksQy5oYWxmSGVpZ2h0LnNldCgwLFMuaGVpZ2h0Ki41LDApLEMuaGFsZldpZHRoLmFwcGx5TWF0cml4NChzKSxDLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KHMpLGcrK31lbHNlIGlmKFMuaXNQb2ludExpZ2h0KXtsZXQgQz1pLnBvaW50W3BdO0MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHArK31lbHNlIGlmKFMuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBDPWkuaGVtaVtfXTtDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLEMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLF8rK319fXJldHVybntzZXR1cDpsLHNldHVwVmlldzpjLHN0YXRlOml9fWZ1bmN0aW9uIEt1ZShlLHQpe2xldCByPW5ldyBUZ3IoZSx0KSxuPVtdLGk9W107ZnVuY3Rpb24gbygpe24ubGVuZ3RoPTAsaS5sZW5ndGg9MH1mdW5jdGlvbiBhKGgpe24ucHVzaChoKX1mdW5jdGlvbiBzKGgpe2kucHVzaChoKX1mdW5jdGlvbiBsKGgpe3Iuc2V0dXAobixoKX1mdW5jdGlvbiBjKGgpe3Iuc2V0dXBWaWV3KG4saCl9cmV0dXJue2luaXQ6byxzdGF0ZTp7bGlnaHRzQXJyYXk6bixzaGFkb3dzQXJyYXk6aSxsaWdodHM6cn0sc2V0dXBMaWdodHM6bCxzZXR1cExpZ2h0c1ZpZXc6YyxwdXNoTGlnaHQ6YSxwdXNoU2hhZG93OnN9fWZ1bmN0aW9uIENncihlLHQpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG4obyxhPTApe2xldCBzO3JldHVybiByLmhhcyhvKT09PSExPyhzPW5ldyBLdWUoZSx0KSxyLnNldChvLFtzXSkpOmE+PXIuZ2V0KG8pLmxlbmd0aD8ocz1uZXcgS3VlKGUsdCksci5nZXQobykucHVzaChzKSk6cz1yLmdldChvKVthXSxzfWZ1bmN0aW9uIGkoKXtyPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6bixkaXNwb3NlOml9fXZhciBlTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9UmZlLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpc319O2VNLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO3ZhciByTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgaix0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KHQucmVmZXJlbmNlUG9zaXRpb24pLHRoaXMubmVhckRpc3RhbmNlPXQubmVhckRpc3RhbmNlLHRoaXMuZmFyRGlzdGFuY2U9dC5mYXJEaXN0YW5jZSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc319O3JNLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBBZ3I9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxQZ3I9YHVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzOwp1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CiNpbmNsdWRlIDxwYWNraW5nPgp2b2lkIG1haW4oKSB7Cgljb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7CglmbG9hdCBtZWFuID0gMC4wOwoJZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wOwoJZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApOwoJZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7Cglmb3IgKCBmbG9hdCBpID0gMC4wOyBpIDwgc2FtcGxlczsgaSArKyApIHsKCQlmbG9hdCB1dk9mZnNldCA9IHV2U3RhcnQgKyBpICogdXZTdHJpZGU7CgkJI2lmZGVmIEhPUklaT05UQUxfUEFTUwoJCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGlzdHJpYnV0aW9uLng7CgkJCXNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDsKCQkjZWxzZQoJCQlmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGVwdGg7CgkJCXNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoOwoJCSNlbmRpZgoJfQoJbWVhbiA9IG1lYW4gLyBzYW1wbGVzOwoJc3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuIC8gc2FtcGxlczsKCWZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApOwoJZ2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTsKfWA7ZnVuY3Rpb24gSmZlKGUsdCxyKXtsZXQgbj1uZXcgTjEsaT1uZXcgTHQsbz1uZXcgTHQsYT1uZXcgZW4scz1uZXcgZU0oe2RlcHRoUGFja2luZzpOZmV9KSxsPW5ldyByTSxjPXt9LHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXswOklpLDE6STEsMjpMMX0sZj1uZXcgbGgoe2RlZmluZXM6e1ZTTV9TQU1QTEVTOjh9LHVuaWZvcm1zOntzaGFkb3dfcGFzczp7dmFsdWU6bnVsbH0scmVzb2x1dGlvbjp7dmFsdWU6bmV3IEx0fSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6QWdyLGZyYWdtZW50U2hhZGVyOlBncn0pLHA9Zi5jbG9uZSgpO3AuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtsZXQgZD1uZXcgUGU7ZC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2xldCBnPW5ldyB0aShkLGYpLF89dGhpczt0aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPUNodCx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEMsUCl7aWYoXy5lbmFibGVkPT09ITF8fF8uYXV0b1VwZGF0ZT09PSExJiZfLm5lZWRzVXBkYXRlPT09ITF8fFMubGVuZ3RoPT09MClyZXR1cm47bGV0IGs9ZS5nZXRSZW5kZXJUYXJnZXQoKSxPPWUuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxEPWUuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxCPWUuc3RhdGU7Qi5zZXRCbGVuZGluZygkZCksQi5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLEIuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxCLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IEk9MCxMPVMubGVuZ3RoO0k8TDtJKyspe2xldCBSPVNbSV0sRj1SLnNoYWRvdztpZihGPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsUiwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZihGLmF1dG9VcGRhdGU9PT0hMSYmRi5uZWVkc1VwZGF0ZT09PSExKWNvbnRpbnVlO2kuY29weShGLm1hcFNpemUpO2xldCB6PUYuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoaS5tdWx0aXBseSh6KSxvLmNvcHkoRi5tYXBTaXplKSwoaS54PnV8fGkueT51KSYmKGkueD51JiYoby54PU1hdGguZmxvb3IodS96LngpLGkueD1vLngqei54LEYubWFwU2l6ZS54PW8ueCksaS55PnUmJihvLnk9TWF0aC5mbG9vcih1L3oueSksaS55PW8ueSp6LnksRi5tYXBTaXplLnk9by55KSksRi5tYXA9PT1udWxsJiYhRi5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PUYzKXtsZXQgVz17bWluRmlsdGVyOmlpLG1hZ0ZpbHRlcjppaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYubWFwUGFzcz1uZXcgdXMoaS54LGkueSxXKSxGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9aWYoRi5tYXA9PT1udWxsKXtsZXQgVz17bWluRmlsdGVyOkxpLG1hZ0ZpbHRlcjpMaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1lLnNldFJlbmRlclRhcmdldChGLm1hcCksZS5jbGVhcigpO2xldCBVPUYuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgVz0wO1c8VTtXKyspe2xldCBaPUYuZ2V0Vmlld3BvcnQoVyk7YS5zZXQoby54KloueCxvLnkqWi55LG8ueCpaLnosby55KloudyksQi52aWV3cG9ydChhKSxGLnVwZGF0ZU1hdHJpY2VzKFIsVyksbj1GLmdldEZydXN0dW0oKSxiKEMsUCxGLmNhbWVyYSxSLHRoaXMudHlwZSl9IUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1GMyYmeShGLFApLEYubmVlZHNVcGRhdGU9ITF9Xy5uZWVkc1VwZGF0ZT0hMSxlLnNldFJlbmRlclRhcmdldChrLE8sRCl9O2Z1bmN0aW9uIHkoUyxDKXtsZXQgUD10LnVwZGF0ZShnKTtmLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1TLmJsdXJTYW1wbGVzJiYoZi5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMscC5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMsZi5uZWVkc1VwZGF0ZT0hMCxwLm5lZWRzVXBkYXRlPSEwKSxmLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPVMubWFwLnRleHR1cmUsZi51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPVMubWFwU2l6ZSxmLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1TLnJhZGl1cyxlLnNldFJlbmRlclRhcmdldChTLm1hcFBhc3MpLGUuY2xlYXIoKSxlLnJlbmRlckJ1ZmZlckRpcmVjdChDLG51bGwsUCxmLGcsbnVsbCkscC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1TLm1hcFBhc3MudGV4dHVyZSxwLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Uy5tYXBTaXplLHAudW5pZm9ybXMucmFkaXVzLnZhbHVlPVMucmFkaXVzLGUuc2V0UmVuZGVyVGFyZ2V0KFMubWFwKSxlLmNsZWFyKCksZS5yZW5kZXJCdWZmZXJEaXJlY3QoQyxudWxsLFAscCxnLG51bGwpfWZ1bmN0aW9uIHgoUyxDLFAsayxPLEQsQil7bGV0IEk9bnVsbCxMPWsuaXNQb2ludExpZ2h0PT09ITA/Uy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOlMuY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihMIT09dm9pZCAwP0k9TDpJPWsuaXNQb2ludExpZ2h0PT09ITA/bDpzLGUubG9jYWxDbGlwcGluZ0VuYWJsZWQmJlAuY2xpcFNoYWRvd3M9PT0hMCYmUC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxQLmRpc3BsYWNlbWVudE1hcCYmUC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fFAuYWxwaGFNYXAmJlAuYWxwaGFUZXN0PjApe2xldCBSPUkudXVpZCxGPVAudXVpZCx6PWNbUl07ej09PXZvaWQgMCYmKHo9e30sY1tSXT16KTtsZXQgVT16W0ZdO1U9PT12b2lkIDAmJihVPUkuY2xvbmUoKSx6W0ZdPVUpLEk9VX1yZXR1cm4gSS52aXNpYmxlPVAudmlzaWJsZSxJLndpcmVmcmFtZT1QLndpcmVmcmFtZSxCPT09RjM/SS5zaWRlPVAuc2hhZG93U2lkZSE9PW51bGw/UC5zaGFkb3dTaWRlOlAuc2lkZTpJLnNpZGU9UC5zaGFkb3dTaWRlIT09bnVsbD9QLnNoYWRvd1NpZGU6aFtQLnNpZGVdLEkuYWxwaGFNYXA9UC5hbHBoYU1hcCxJLmFscGhhVGVzdD1QLmFscGhhVGVzdCxJLmNsaXBTaGFkb3dzPVAuY2xpcFNoYWRvd3MsSS5jbGlwcGluZ1BsYW5lcz1QLmNsaXBwaW5nUGxhbmVzLEkuY2xpcEludGVyc2VjdGlvbj1QLmNsaXBJbnRlcnNlY3Rpb24sSS5kaXNwbGFjZW1lbnRNYXA9UC5kaXNwbGFjZW1lbnRNYXAsSS5kaXNwbGFjZW1lbnRTY2FsZT1QLmRpc3BsYWNlbWVudFNjYWxlLEkuZGlzcGxhY2VtZW50Qmlhcz1QLmRpc3BsYWNlbWVudEJpYXMsSS53aXJlZnJhbWVMaW5ld2lkdGg9UC53aXJlZnJhbWVMaW5ld2lkdGgsSS5saW5ld2lkdGg9UC5saW5ld2lkdGgsay5pc1BvaW50TGlnaHQ9PT0hMCYmSS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJihJLnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihrLm1hdHJpeFdvcmxkKSxJLm5lYXJEaXN0YW5jZT1PLEkuZmFyRGlzdGFuY2U9RCksSX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7aWYoUy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoQy5sYXllcnMpJiYoUy5pc01lc2h8fFMuaXNMaW5lfHxTLmlzUG9pbnRzKSYmKFMuY2FzdFNoYWRvd3x8Uy5yZWNlaXZlU2hhZG93JiZPPT09RjMpJiYoIVMuZnJ1c3R1bUN1bGxlZHx8bi5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7Uy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhQLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKTtsZXQgST10LnVwZGF0ZShTKSxMPVMubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMKSl7bGV0IFI9SS5ncm91cHM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1SW0ZdLFc9TFtVLm1hdGVyaWFsSW5kZXhdO2lmKFcmJlcudmlzaWJsZSl7bGV0IFo9eChTLEksVyxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxaLFMsVSl9fX1lbHNlIGlmKEwudmlzaWJsZSl7bGV0IFI9eChTLEksTCxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxSLFMsbnVsbCl9fWxldCBCPVMuY2hpbGRyZW47Zm9yKGxldCBJPTAsTD1CLmxlbmd0aDtJPEw7SSsrKWIoQltJXSxDLFAsayxPKX19ZnVuY3Rpb24gSWdyKGUsdCxyKXtsZXQgbj1yLmlzV2ViR0wyO2Z1bmN0aW9uIGkoKXtsZXQgYXQ9ITEsc2U9bmV3IGVuLFF0PW51bGwsQ2U9bmV3IGVuKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFB0KXtRdCE9PVB0JiYhYXQmJihlLmNvbG9yTWFzayhQdCxQdCxQdCxQdCksUXQ9UHQpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCxOdCx6ZSx5bixXaSl7V2k9PT0hMCYmKFB0Kj15bixOdCo9eW4semUqPXluKSxzZS5zZXQoUHQsTnQsemUseW4pLENlLmVxdWFscyhzZSk9PT0hMSYmKGUuY2xlYXJDb2xvcihQdCxOdCx6ZSx5biksQ2UuY29weShzZSkpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLFF0PW51bGwsQ2Uuc2V0KC0xLDAsMCwwKX19fWZ1bmN0aW9uIG8oKXtsZXQgYXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oUHQpe1B0P2x0KDI5MjkpOkt0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFB0KXtzZSE9PVB0JiYhYXQmJihlLmRlcHRoTWFzayhQdCksc2U9UHQpfSxzZXRGdW5jOmZ1bmN0aW9uKFB0KXtpZihRdCE9PVB0KXtpZihQdClzd2l0Y2goUHQpe2Nhc2UgZWZlOmUuZGVwdGhGdW5jKDUxMik7YnJlYWs7Y2FzZSByZmU6ZS5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIG5mZTplLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgaVU6ZS5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIGlmZTplLmRlcHRoRnVuYyg1MTQpO2JyZWFrO2Nhc2Ugb2ZlOmUuZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSBhZmU6ZS5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIHNmZTplLmRlcHRoRnVuYyg1MTcpO2JyZWFrO2RlZmF1bHQ6ZS5kZXB0aEZ1bmMoNTE1KX1lbHNlIGUuZGVwdGhGdW5jKDUxNSk7UXQ9UHR9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCl7Q2UhPT1QdCYmKGUuY2xlYXJEZXB0aChQdCksQ2U9UHQpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLHNlPW51bGwsUXQ9bnVsbCxDZT1udWxsfX19ZnVuY3Rpb24gYSgpe2xldCBhdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oQXIpe2F0fHwoQXI/bHQoMjk2MCk6S3QoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKEFyKXtzZSE9PUFyJiYhYXQmJihlLnN0ZW5jaWxNYXNrKEFyKSxzZT1Bcil9LHNldEZ1bmM6ZnVuY3Rpb24oQXIsUGEsaG8peyhRdCE9PUFyfHxDZSE9PVBhfHxQdCE9PWhvKSYmKGUuc3RlbmNpbEZ1bmMoQXIsUGEsaG8pLFF0PUFyLENlPVBhLFB0PWhvKX0sc2V0T3A6ZnVuY3Rpb24oQXIsUGEsaG8peyhOdCE9PUFyfHx6ZSE9PVBhfHx5biE9PWhvKSYmKGUuc3RlbmNpbE9wKEFyLFBhLGhvKSxOdD1Bcix6ZT1QYSx5bj1obyl9LHNldExvY2tlZDpmdW5jdGlvbihBcil7YXQ9QXJ9LHNldENsZWFyOmZ1bmN0aW9uKEFyKXtXaSE9PUFyJiYoZS5jbGVhclN0ZW5jaWwoQXIpLFdpPUFyKX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGx9fX1sZXQgcz1uZXcgaSxsPW5ldyBvLGM9bmV3IGEsdT17fSxoPXt9LGY9bmV3IFdlYWtNYXAscD1bXSxkPW51bGwsZz0hMSxfPW51bGwseT1udWxsLHg9bnVsbCxiPW51bGwsUz1udWxsLEM9bnVsbCxQPW51bGwsaz0hMSxPPW51bGwsRD1udWxsLEI9bnVsbCxJPW51bGwsTD1udWxsLFI9ZS5nZXRQYXJhbWV0ZXIoMzU2NjEpLEY9ITEsej0wLFU9ZS5nZXRQYXJhbWV0ZXIoNzkzOCk7VS5pbmRleE9mKCJXZWJHTCIpIT09LTE/KHo9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49MSk6VS5pbmRleE9mKCJPcGVuR0wgRVMiKSE9PS0xJiYoej1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49Mik7bGV0IFc9bnVsbCxaPXt9LHJ0PWUuZ2V0UGFyYW1ldGVyKDMwODgpLG90PWUuZ2V0UGFyYW1ldGVyKDI5NzgpLHN0PW5ldyBlbigpLmZyb21BcnJheShydCksU3Q9bmV3IGVuKCkuZnJvbUFycmF5KG90KTtmdW5jdGlvbiBidChhdCxzZSxRdCl7bGV0IENlPW5ldyBVaW50OEFycmF5KDQpLFB0PWUuY3JlYXRlVGV4dHVyZSgpO2UuYmluZFRleHR1cmUoYXQsUHQpLGUudGV4UGFyYW1ldGVyaShhdCwxMDI0MSw5NzI4KSxlLnRleFBhcmFtZXRlcmkoYXQsMTAyNDAsOTcyOCk7Zm9yKGxldCBOdD0wO050PFF0O050KyspZS50ZXhJbWFnZTJEKHNlK050LDAsNjQwOCwxLDEsMCw2NDA4LDUxMjEsQ2UpO3JldHVybiBQdH1sZXQgTXQ9e307TXRbMzU1M109YnQoMzU1MywzNTUzLDEpLE10WzM0MDY3XT1idCgzNDA2NywzNDA2OSw2KSxzLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxsdCgyOTI5KSxsLnNldEZ1bmMoaVUpLGh0KCExKSx3dChTdXQpLGx0KDI4ODQpLHEoJGQpO2Z1bmN0aW9uIGx0KGF0KXt1W2F0XSE9PSEwJiYoZS5lbmFibGUoYXQpLHVbYXRdPSEwKX1mdW5jdGlvbiBLdChhdCl7dVthdF0hPT0hMSYmKGUuZGlzYWJsZShhdCksdVthdF09ITEpfWZ1bmN0aW9uIF90KGF0LHNlKXtyZXR1cm4gaFthdF0hPT1zZT8oZS5iaW5kRnJhbWVidWZmZXIoYXQsc2UpLGhbYXRdPXNlLG4mJihhdD09PTM2MDA5JiYoaFszNjE2MF09c2UpLGF0PT09MzYxNjAmJihoWzM2MDA5XT1zZSkpLCEwKTohMX1mdW5jdGlvbiBjdChhdCxzZSl7bGV0IFF0PXAsQ2U9ITE7aWYoYXQpaWYoUXQ9Zi5nZXQoc2UpLFF0PT09dm9pZCAwJiYoUXQ9W10sZi5zZXQoc2UsUXQpKSxhdC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgUHQ9YXQudGV4dHVyZTtpZihRdC5sZW5ndGghPT1QdC5sZW5ndGh8fFF0WzBdIT09MzYwNjQpe2ZvcihsZXQgTnQ9MCx6ZT1QdC5sZW5ndGg7TnQ8emU7TnQrKylRdFtOdF09MzYwNjQrTnQ7UXQubGVuZ3RoPVB0Lmxlbmd0aCxDZT0hMH19ZWxzZSBRdFswXSE9PTM2MDY0JiYoUXRbMF09MzYwNjQsQ2U9ITApO2Vsc2UgUXRbMF0hPT0xMDI5JiYoUXRbMF09MTAyOSxDZT0hMCk7Q2UmJihyLmlzV2ViR0wyP2UuZHJhd0J1ZmZlcnMoUXQpOnQuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKS5kcmF3QnVmZmVyc1dFQkdMKFF0KSl9ZnVuY3Rpb24gWChhdCl7cmV0dXJuIGQhPT1hdD8oZS51c2VQcm9ncmFtKGF0KSxkPWF0LCEwKTohMX1sZXQgZXQ9e1tNMV06MzI3NzQsW0doZV06MzI3NzgsW1doZV06MzI3Nzl9O2lmKG4pZXRbQ3V0XT0zMjc3NSxldFtBdXRdPTMyNzc2O2Vsc2V7bGV0IGF0PXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7YXQhPT1udWxsJiYoZXRbQ3V0XT1hdC5NSU5fRVhULGV0W0F1dF09YXQuTUFYX0VYVCl9bGV0IGR0PXtbWWhlXTowLFtqaGVdOjEsW1hoZV06NzY4LFtQaHRdOjc3MCxbdGZlXTo3NzYsW0poZV06Nzc0LFtLaGVdOjc3MixbJGhlXTo3NjksW0lodF06NzcxLFtRaGVdOjc3NSxbWmhlXTo3NzN9O2Z1bmN0aW9uIHEoYXQsc2UsUXQsQ2UsUHQsTnQsemUseW4pe2lmKGF0PT09JGQpe2c9PT0hMCYmKEt0KDMwNDIpLGc9ITEpO3JldHVybn1pZihnPT09ITEmJihsdCgzMDQyKSxnPSEwKSxhdCE9PXFoZSl7aWYoYXQhPT1ffHx5biE9PWspe2lmKCh5IT09TTF8fFMhPT1NMSkmJihlLmJsZW5kRXF1YXRpb24oMzI3NzQpLHk9TTEsUz1NMSkseW4pc3dpdGNoKGF0KXtjYXNlIFYzOmUuYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgTXV0OmUuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixhdCk7YnJlYWt9ZWxzZSBzd2l0Y2goYXQpe2Nhc2UgVjM6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIE11dDplLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsYXQpO2JyZWFrfXg9bnVsbCxiPW51bGwsQz1udWxsLFA9bnVsbCxfPWF0LGs9eW59cmV0dXJufVB0PVB0fHxzZSxOdD1OdHx8UXQsemU9emV8fENlLChzZSE9PXl8fFB0IT09UykmJihlLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShldFtzZV0sZXRbUHRdKSx5PXNlLFM9UHQpLChRdCE9PXh8fENlIT09Ynx8TnQhPT1DfHx6ZSE9PVApJiYoZS5ibGVuZEZ1bmNTZXBhcmF0ZShkdFtRdF0sZHRbQ2VdLGR0W050XSxkdFt6ZV0pLHg9UXQsYj1DZSxDPU50LFA9emUpLF89YXQsaz1udWxsfWZ1bmN0aW9uIHB0KGF0LHNlKXthdC5zaWRlPT09TDE/S3QoMjg4NCk6bHQoMjg4NCk7bGV0IFF0PWF0LnNpZGU9PT1JaTtzZSYmKFF0PSFRdCksaHQoUXQpLGF0LmJsZW5kaW5nPT09VjMmJmF0LnRyYW5zcGFyZW50PT09ITE/cSgkZCk6cShhdC5ibGVuZGluZyxhdC5ibGVuZEVxdWF0aW9uLGF0LmJsZW5kU3JjLGF0LmJsZW5kRHN0LGF0LmJsZW5kRXF1YXRpb25BbHBoYSxhdC5ibGVuZFNyY0FscGhhLGF0LmJsZW5kRHN0QWxwaGEsYXQucHJlbXVsdGlwbGllZEFscGhhKSxsLnNldEZ1bmMoYXQuZGVwdGhGdW5jKSxsLnNldFRlc3QoYXQuZGVwdGhUZXN0KSxsLnNldE1hc2soYXQuZGVwdGhXcml0ZSkscy5zZXRNYXNrKGF0LmNvbG9yV3JpdGUpO2xldCBDZT1hdC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KENlKSxDZSYmKGMuc2V0TWFzayhhdC5zdGVuY2lsV3JpdGVNYXNrKSxjLnNldEZ1bmMoYXQuc3RlbmNpbEZ1bmMsYXQuc3RlbmNpbFJlZixhdC5zdGVuY2lsRnVuY01hc2spLGMuc2V0T3AoYXQuc3RlbmNpbEZhaWwsYXQuc3RlbmNpbFpGYWlsLGF0LnN0ZW5jaWxaUGFzcykpLGllKGF0LnBvbHlnb25PZmZzZXQsYXQucG9seWdvbk9mZnNldEZhY3RvcixhdC5wb2x5Z29uT2Zmc2V0VW5pdHMpLGF0LmFscGhhVG9Db3ZlcmFnZT09PSEwP2x0KDMyOTI2KTpLdCgzMjkyNil9ZnVuY3Rpb24gaHQoYXQpe08hPT1hdCYmKGF0P2UuZnJvbnRGYWNlKDIzMDQpOmUuZnJvbnRGYWNlKDIzMDUpLE89YXQpfWZ1bmN0aW9uIHd0KGF0KXthdCE9PUhoZT8obHQoMjg4NCksYXQhPT1EJiYoYXQ9PT1TdXQ/ZS5jdWxsRmFjZSgxMDI5KTphdD09PVZoZT9lLmN1bGxGYWNlKDEwMjgpOmUuY3VsbEZhY2UoMTAzMikpKTpLdCgyODg0KSxEPWF0fWZ1bmN0aW9uIGt0KGF0KXthdCE9PUImJihGJiZlLmxpbmVXaWR0aChhdCksQj1hdCl9ZnVuY3Rpb24gaWUoYXQsc2UsUXQpe2F0PyhsdCgzMjgyMyksKEkhPT1zZXx8TCE9PVF0KSYmKGUucG9seWdvbk9mZnNldChzZSxRdCksST1zZSxMPVF0KSk6S3QoMzI4MjMpfWZ1bmN0aW9uIGVlKGF0KXthdD9sdCgzMDg5KTpLdCgzMDg5KX1mdW5jdGlvbiBMZShhdCl7YXQ9PT12b2lkIDAmJihhdD0zMzk4NCtSLTEpLFchPT1hdCYmKGUuYWN0aXZlVGV4dHVyZShhdCksVz1hdCl9ZnVuY3Rpb24gYXIoYXQsc2Upe1c9PT1udWxsJiZMZSgpO2xldCBRdD1aW1ddO1F0PT09dm9pZCAwJiYoUXQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxaW1ddPVF0KSwoUXQudHlwZSE9PWF0fHxRdC50ZXh0dXJlIT09c2UpJiYoZS5iaW5kVGV4dHVyZShhdCxzZXx8TXRbYXRdKSxRdC50eXBlPWF0LFF0LnRleHR1cmU9c2UpfWZ1bmN0aW9uIGZyKCl7bGV0IGF0PVpbV107YXQhPT12b2lkIDAmJmF0LnR5cGUhPT12b2lkIDAmJihlLmJpbmRUZXh0dXJlKGF0LnR5cGUsbnVsbCksYXQudHlwZT12b2lkIDAsYXQudGV4dHVyZT12b2lkIDApfWZ1bmN0aW9uIHR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiAkKCl7dHJ5e2UudGV4U3ViSW1hZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIEl0KCl7dHJ5e2UudGV4U3ViSW1hZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uICR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBoZSgpe3RyeXtlLnRleFN0b3JhZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIFR0KCl7dHJ5e2UudGV4U3RvcmFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gYmUoKXt0cnl7ZS50ZXhJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gbnQoKXt0cnl7ZS50ZXhJbWFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gQ3QoYXQpe3N0LmVxdWFscyhhdCk9PT0hMSYmKGUuc2Npc3NvcihhdC54LGF0LnksYXQueixhdC53KSxzdC5jb3B5KGF0KSl9ZnVuY3Rpb24gV3QoYXQpe1N0LmVxdWFscyhhdCk9PT0hMSYmKGUudmlld3BvcnQoYXQueCxhdC55LGF0LnosYXQudyksU3QuY29weShhdCkpfWZ1bmN0aW9uIGZlKCl7ZS5kaXNhYmxlKDMwNDIpLGUuZGlzYWJsZSgyODg0KSxlLmRpc2FibGUoMjkyOSksZS5kaXNhYmxlKDMyODIzKSxlLmRpc2FibGUoMzA4OSksZS5kaXNhYmxlKDI5NjApLGUuZGlzYWJsZSgzMjkyNiksZS5ibGVuZEVxdWF0aW9uKDMyNzc0KSxlLmJsZW5kRnVuYygxLDApLGUuYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksZS5jb2xvck1hc2soITAsITAsITAsITApLGUuY2xlYXJDb2xvcigwLDAsMCwwKSxlLmRlcHRoTWFzayghMCksZS5kZXB0aEZ1bmMoNTEzKSxlLmNsZWFyRGVwdGgoMSksZS5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxlLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLGUuc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxlLmNsZWFyU3RlbmNpbCgwKSxlLmN1bGxGYWNlKDEwMjkpLGUuZnJvbnRGYWNlKDIzMDUpLGUucG9seWdvbk9mZnNldCgwLDApLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksbj09PSEwJiYoZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLGUudXNlUHJvZ3JhbShudWxsKSxlLmxpbmVXaWR0aCgxKSxlLnNjaXNzb3IoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS52aWV3cG9ydCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSx1PXt9LFc9bnVsbCxaPXt9LGg9e30sZj1uZXcgV2Vha01hcCxwPVtdLGQ9bnVsbCxnPSExLF89bnVsbCx5PW51bGwseD1udWxsLGI9bnVsbCxTPW51bGwsQz1udWxsLFA9bnVsbCxrPSExLE89bnVsbCxEPW51bGwsQj1udWxsLEk9bnVsbCxMPW51bGwsc3Quc2V0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLFN0LnNldCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxzLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6cyxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmx0LGRpc2FibGU6S3QsYmluZEZyYW1lYnVmZmVyOl90LGRyYXdCdWZmZXJzOmN0LHVzZVByb2dyYW06WCxzZXRCbGVuZGluZzpxLHNldE1hdGVyaWFsOnB0LHNldEZsaXBTaWRlZDpodCxzZXRDdWxsRmFjZTp3dCxzZXRMaW5lV2lkdGg6a3Qsc2V0UG9seWdvbk9mZnNldDppZSxzZXRTY2lzc29yVGVzdDplZSxhY3RpdmVUZXh0dXJlOkxlLGJpbmRUZXh0dXJlOmFyLHVuYmluZFRleHR1cmU6ZnIsY29tcHJlc3NlZFRleEltYWdlMkQ6dHQsdGV4SW1hZ2UyRDpiZSx0ZXhJbWFnZTNEOm50LHRleFN0b3JhZ2UyRDpoZSx0ZXhTdG9yYWdlM0Q6VHQsdGV4U3ViSW1hZ2UyRDokLHRleFN1YkltYWdlM0Q6SXQsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6JHQsc2Npc3NvcjpDdCx2aWV3cG9ydDpXdCxyZXNldDpmZX19ZnVuY3Rpb24gTGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPWkuaXNXZWJHTDIsbD1pLm1heFRleHR1cmVzLGM9aS5tYXhDdWJlbWFwU2l6ZSx1PWkubWF4VGV4dHVyZVNpemUsaD1pLm1heFNhbXBsZXMscD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxkPW5ldyBXZWFrTWFwLGcsXz0hMTt0cnl7Xz10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzIT0idW5kZWZpbmVkIiYmbmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIikhPT1udWxsfWNhdGNoKHR0KXt9ZnVuY3Rpb24geSh0dCwkKXtyZXR1cm4gXz9uZXcgT2Zmc2NyZWVuQ2FudmFzKHR0LCQpOnQ2KCJjYW52YXMiKX1mdW5jdGlvbiB4KHR0LCQsSXQsJHQpe2xldCBoZT0xO2lmKCh0dC53aWR0aD4kdHx8dHQuaGVpZ2h0PiR0KSYmKGhlPSR0L01hdGgubWF4KHR0LndpZHRoLHR0LmhlaWdodCkpLGhlPDF8fCQ9PT0hMClpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IFR0PSQ/RmZlOk1hdGguZmxvb3IsYmU9VHQoaGUqdHQud2lkdGgpLG50PVR0KGhlKnR0LmhlaWdodCk7Zz09PXZvaWQgMCYmKGc9eShiZSxudCkpO2xldCBDdD1JdD95KGJlLG50KTpnO3JldHVybiBDdC53aWR0aD1iZSxDdC5oZWlnaHQ9bnQsQ3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodHQsMCwwLGJlLG50KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK3R0LndpZHRoKyJ4Iit0dC5oZWlnaHQrIikgdG8gKCIrYmUrIngiK250KyIpLiIpLEN0fWVsc2UgcmV0dXJuImRhdGEiaW4gdHQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIit0dC53aWR0aCsieCIrdHQuaGVpZ2h0KyIpLiIpLHR0O3JldHVybiB0dH1mdW5jdGlvbiBiKHR0KXtyZXR1cm4gWnV0KHR0LndpZHRoKSYmWnV0KHR0LmhlaWdodCl9ZnVuY3Rpb24gUyh0dCl7cmV0dXJuIHM/ITE6dHQud3JhcFMhPT1Kb3x8dHQud3JhcFQhPT1Kb3x8dHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIEModHQsJCl7cmV0dXJuIHR0LmdlbmVyYXRlTWlwbWFwcyYmJCYmdHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIFAodHQpe2UuZ2VuZXJhdGVNaXBtYXAodHQpfWZ1bmN0aW9uIGsodHQsJCxJdCwkdCxoZT0hMSl7aWYocz09PSExKXJldHVybiAkO2lmKHR0IT09bnVsbCl7aWYoZVt0dF0hPT12b2lkIDApcmV0dXJuIGVbdHRdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIit0dCsiJyIpfWxldCBUdD0kO3JldHVybiAkPT09NjQwMyYmKEl0PT09NTEyNiYmKFR0PTMzMzI2KSxJdD09PTUxMzEmJihUdD0zMzMyNSksSXQ9PT01MTIxJiYoVHQ9MzMzMjEpKSwkPT09MzMzMTkmJihJdD09PTUxMjYmJihUdD0zMzMyOCksSXQ9PT01MTMxJiYoVHQ9MzMzMjcpLEl0PT09NTEyMSYmKFR0PTMzMzIzKSksJD09PTY0MDgmJihJdD09PTUxMjYmJihUdD0zNDgzNiksSXQ9PT01MTMxJiYoVHQ9MzQ4NDIpLEl0PT09NTEyMSYmKFR0PSR0PT09V24mJmhlPT09ITE/MzU5MDc6MzI4NTYpLEl0PT09MzI4MTkmJihUdD0zMjg1NCksSXQ9PT0zMjgyMCYmKFR0PTMyODU1KSksKFR0PT09MzMzMjV8fFR0PT09MzMzMjZ8fFR0PT09MzMzMjd8fFR0PT09MzMzMjh8fFR0PT09MzQ4NDJ8fFR0PT09MzQ4MzYpJiZ0LmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLFR0fWZ1bmN0aW9uIE8odHQsJCxJdCl7cmV0dXJuIEModHQsSXQpPT09ITB8fHR0LmlzRnJhbWVidWZmZXJUZXh0dXJlJiZ0dC5taW5GaWx0ZXIhPT1MaSYmdHQubWluRmlsdGVyIT09aWk/TWF0aC5sb2cyKE1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpKSsxOnR0Lm1pcG1hcHMhPT12b2lkIDAmJnR0Lm1pcG1hcHMubGVuZ3RoPjA/dHQubWlwbWFwcy5sZW5ndGg6dHQuaXNDb21wcmVzc2VkVGV4dHVyZSYmQXJyYXkuaXNBcnJheSh0dC5pbWFnZSk/JC5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIEQodHQpe3JldHVybiB0dD09PUxpfHx0dD09PW9VfHx0dD09PWFVPzk3Mjg6OTcyOX1mdW5jdGlvbiBCKHR0KXtsZXQgJD10dC50YXJnZXQ7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixCKSxMKCQpLCQuaXNWaWRlb1RleHR1cmUmJmQuZGVsZXRlKCQpLGEubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gSSh0dCl7bGV0ICQ9dHQudGFyZ2V0OyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSSksUigkKX1mdW5jdGlvbiBMKHR0KXtsZXQgJD1uLmdldCh0dCk7JC5fX3dlYmdsSW5pdCE9PXZvaWQgMCYmKGUuZGVsZXRlVGV4dHVyZSgkLl9fd2ViZ2xUZXh0dXJlKSxuLnJlbW92ZSh0dCkpfWZ1bmN0aW9uIFIodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO2lmKCEhdHQpe2lmKCR0Ll9fd2ViZ2xUZXh0dXJlIT09dm9pZCAwJiYoZS5kZWxldGVUZXh0dXJlKCR0Ll9fd2ViZ2xUZXh0dXJlKSxhLm1lbW9yeS50ZXh0dXJlcy0tKSx0dC5kZXB0aFRleHR1cmUmJnR0LmRlcHRoVGV4dHVyZS5kaXNwb3NlKCksdHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBoZT0wO2hlPDY7aGUrKyllLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcltoZV0pLEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbERlcHRoYnVmZmVyW2hlXSk7ZWxzZSBlLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksSXQuX193ZWJnbERlcHRoYnVmZmVyJiZlLmRlbGV0ZVJlbmRlcmJ1ZmZlcihJdC5fX3dlYmdsRGVwdGhidWZmZXIpLEl0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxJdC5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYodHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGhlPTAsVHQ9JC5sZW5ndGg7aGU8VHQ7aGUrKyl7bGV0IGJlPW4uZ2V0KCRbaGVdKTtiZS5fX3dlYmdsVGV4dHVyZSYmKGUuZGVsZXRlVGV4dHVyZShiZS5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksbi5yZW1vdmUoJFtoZV0pfW4ucmVtb3ZlKCQpLG4ucmVtb3ZlKHR0KX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIFUoKXtsZXQgdHQ9RjtyZXR1cm4gdHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3R0KyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSx0dH1mdW5jdGlvbiBXKHR0LCQpe2xldCBJdD1uLmdldCh0dCk7aWYodHQuaXNWaWRlb1RleHR1cmUmJmt0KHR0KSx0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2xldCAkdD10dC5pbWFnZTtpZigkdD09PXZvaWQgMCljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2UgaWYoJHQuY29tcGxldGU9PT0hMSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKTtlbHNle2x0KEl0LHR0LCQpO3JldHVybn19ci5hY3RpdmVUZXh0dXJlKDMzOTg0KyQpLHIuYmluZFRleHR1cmUoMzU1MyxJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gWih0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM1ODY2LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBydCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDMyODc5LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBvdCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7S3QoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM0MDY3LEl0Ll9fd2ViZ2xUZXh0dXJlKX1sZXQgc3Q9e1tYUF06MTA0OTcsW0pvXTozMzA3MSxbJFBdOjMzNjQ4fSxTdD17W0xpXTo5NzI4LFtvVV06OTk4NCxbYVVdOjk5ODYsW2lpXTo5NzI5LFtMaHRdOjk5ODUsW294XTo5OTg3fTtmdW5jdGlvbiBidCh0dCwkLEl0KXtpZihJdD8oZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQyLHN0WyQud3JhcFNdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDMsc3RbJC53cmFwVF0pLCh0dD09PTMyODc5fHx0dD09PTM1ODY2KSYmZS50ZXhQYXJhbWV0ZXJpKHR0LDMyODgyLHN0WyQud3JhcFJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDAsU3RbJC5tYWdGaWx0ZXJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDEsU3RbJC5taW5GaWx0ZXJdKSk6KGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MiwzMzA3MSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQzLDMzMDcxKSwodHQ9PT0zMjg3OXx8dHQ9PT0zNTg2NikmJmUudGV4UGFyYW1ldGVyaSh0dCwzMjg4MiwzMzA3MSksKCQud3JhcFMhPT1Kb3x8JC53cmFwVCE9PUpvKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MCxEKCQubWFnRmlsdGVyKSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQxLEQoJC5taW5GaWx0ZXIpKSwkLm1pbkZpbHRlciE9PUxpJiYkLm1pbkZpbHRlciE9PWlpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksdC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCAkdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoJC50eXBlPT09amQmJnQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSExfHxzPT09ITEmJiQudHlwZT09PUMxJiZ0LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSExKXJldHVybjsoJC5hbmlzb3Ryb3B5PjF8fG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYoZS50ZXhQYXJhbWV0ZXJmKHR0LCR0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKCQuYW5pc290cm9weSxpLmdldE1heEFuaXNvdHJvcHkoKSkpLG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHk9JC5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24gTXQodHQsJCl7dHQuX193ZWJnbEluaXQ9PT12b2lkIDAmJih0dC5fX3dlYmdsSW5pdD0hMCwkLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEIpLHR0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGx0KHR0LCQsSXQpe2xldCAkdD0zNTUzOyQuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJigkdD0zNTg2NiksJC5pc0RhdGFUZXh0dXJlM0QmJigkdD0zMjg3OSksTXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKCR0LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGhlPVMoJCkmJmIoJC5pbWFnZSk9PT0hMSxUdD14KCQuaW1hZ2UsaGUsITEsdSk7VHQ9aWUoJCxUdCk7bGV0IGJlPWIoVHQpfHxzLG50PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxDdD1vLmNvbnZlcnQoJC50eXBlKSxXdD1rKCQuaW50ZXJuYWxGb3JtYXQsbnQsQ3QsJC5lbmNvZGluZywkLmlzVmlkZW9UZXh0dXJlKTtidCgkdCwkLGJlKTtsZXQgZmUsYXQ9JC5taXBtYXBzLHNlPXMmJiQuaXNWaWRlb1RleHR1cmUhPT0hMCxRdD10dC5fX3ZlcnNpb249PT12b2lkIDAsQ2U9TygkLFR0LGJlKTtpZigkLmlzRGVwdGhUZXh0dXJlKVd0PTY0MDIscz8kLnR5cGU9PT1qZD9XdD0zNjAxMjokLnR5cGU9PT1WUD9XdD0zMzE5MDokLnR5cGU9PT1BMT9XdD0zNTA1NjpXdD0zMzE4OTokLnR5cGU9PT1qZCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksJC5mb3JtYXQ9PT16MCYmV3Q9PT02NDAyJiYkLnR5cGUhPT1HMyYmJC50eXBlIT09VlAmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSwkLnR5cGU9RzMsQ3Q9by5jb252ZXJ0KCQudHlwZSkpLCQuZm9ybWF0PT09azEmJld0PT09NjQwMiYmKFd0PTM0MDQxLCQudHlwZSE9PUExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLCQudHlwZT1BMSxDdD1vLmNvbnZlcnQoJC50eXBlKSkpLHNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLDEsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KTpyLnRleEltYWdlMkQoMzU1MywwLFd0LFR0LndpZHRoLFR0LmhlaWdodCwwLG50LEN0LG51bGwpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlKWlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSk7JC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBzZT8oUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KSxyLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzQ29tcHJlc3NlZFRleHR1cmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sJC5mb3JtYXQhPT1Rbz9udCE9PW51bGw/c2U/ci5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsZmUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLGZlLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnNlP3IudGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSl9ZWxzZSBpZigkLmlzRGF0YVRleHR1cmUyREFycmF5KXNlPyhRdCYmci50ZXhTdG9yYWdlM0QoMzU4NjYsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoKSxyLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UzRCgzNTg2NiwwLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlM0Qpc2U/KFF0JiZyLnRleFN0b3JhZ2UzRCgzMjg3OSxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgpLHIudGV4U3ViSW1hZ2UzRCgzMjg3OSwwLDAsMCwwLFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCxudCxDdCxUdC5kYXRhKSk6ci50ZXhJbWFnZTNEKDMyODc5LDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoLDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzRnJhbWVidWZmZXJUZXh0dXJlKXNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsMCxudCxDdCxudWxsKTtlbHNlIGlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsbnQsQ3QsZmUpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LG50LEN0LGZlKTskLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHNlPyhRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQpLHIudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLG50LEN0LFR0KSk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxudCxDdCxUdCk7QygkLGJlKSYmUCgkdCksdHQuX192ZXJzaW9uPSQudmVyc2lvbiwkLm9uVXBkYXRlJiYkLm9uVXBkYXRlKCQpfWZ1bmN0aW9uIEt0KHR0LCQsSXQpe2lmKCQuaW1hZ2UubGVuZ3RoIT09NilyZXR1cm47TXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKDM0MDY3LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0ICR0PSQmJigkLmlzQ29tcHJlc3NlZFRleHR1cmV8fCQuaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSksaGU9JC5pbWFnZVswXSYmJC5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLFR0PVtdO2ZvcihsZXQgUHQ9MDtQdDw2O1B0KyspISR0JiYhaGU/VHRbUHRdPXgoJC5pbWFnZVtQdF0sITEsITAsYyk6VHRbUHRdPWhlPyQuaW1hZ2VbUHRdLmltYWdlOiQuaW1hZ2VbUHRdLFR0W1B0XT1pZSgkLFR0W1B0XSk7bGV0IGJlPVR0WzBdLG50PWIoYmUpfHxzLEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9cyYmJC5pc1ZpZGVvVGV4dHVyZSE9PSEwLHNlPXR0Ll9fdmVyc2lvbj09PXZvaWQgMCxRdD1PKCQsYmUsbnQpO2J0KDM0MDY3LCQsbnQpO2xldCBDZTtpZigkdCl7YXQmJnNlJiZyLnRleFN0b3JhZ2UyRCgzNDA2NyxRdCxmZSxiZS53aWR0aCxiZS5oZWlnaHQpO2ZvcihsZXQgUHQ9MDtQdDw2O1B0Kyspe0NlPVR0W1B0XS5taXBtYXBzO2ZvcihsZXQgTnQ9MDtOdDxDZS5sZW5ndGg7TnQrKyl7bGV0IHplPUNlW050XTskLmZvcm1hdCE9PVFvP0N0IT09bnVsbD9hdD9yLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsemUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStQdCxOdCxmZSx6ZS53aWR0aCx6ZS5oZWlnaHQsMCx6ZS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsV3QsemUuZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50LGZlLHplLndpZHRoLHplLmhlaWdodCwwLEN0LFd0LHplLmRhdGEpfX19ZWxzZXtDZT0kLm1pcG1hcHMsYXQmJnNlJiYoQ2UubGVuZ3RoPjAmJlF0Kyssci50ZXhTdG9yYWdlMkQoMzQwNjcsUXQsZmUsVHRbMF0ud2lkdGgsVHRbMF0uaGVpZ2h0KSk7Zm9yKGxldCBQdD0wO1B0PDY7UHQrKylpZihoZSl7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLFR0W1B0XS53aWR0aCxUdFtQdF0uaGVpZ2h0LEN0LFd0LFR0W1B0XS5kYXRhKTpyLnRleEltYWdlMkQoMzQwNjkrUHQsMCxmZSxUdFtQdF0ud2lkdGgsVHRbUHRdLmhlaWdodCwwLEN0LFd0LFR0W1B0XS5kYXRhKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB5bj1DZVtOdF0uaW1hZ2VbUHRdLmltYWdlO2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCsxLDAsMCx5bi53aWR0aCx5bi5oZWlnaHQsQ3QsV3QseW4uZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUseW4ud2lkdGgseW4uaGVpZ2h0LDAsQ3QsV3QseW4uZGF0YSl9fWVsc2V7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLEN0LFd0LFR0W1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LDAsZmUsQ3QsV3QsVHRbUHRdKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB6ZT1DZVtOdF07YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50KzEsMCwwLEN0LFd0LHplLmltYWdlW1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUsQ3QsV3QsemUuaW1hZ2VbUHRdKX19fUMoJCxudCkmJlAoMzQwNjcpLHR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sJC5vblVwZGF0ZSYmJC5vblVwZGF0ZSgkKX1mdW5jdGlvbiBfdCh0dCwkLEl0LCR0LGhlKXtsZXQgVHQ9by5jb252ZXJ0KEl0LmZvcm1hdCxJdC5lbmNvZGluZyksYmU9by5jb252ZXJ0KEl0LnR5cGUpLG50PWsoSXQuaW50ZXJuYWxGb3JtYXQsVHQsYmUsSXQuZW5jb2RpbmcpO24uZ2V0KCQpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGhlPT09MzI4Nzl8fGhlPT09MzU4NjY/ci50ZXhJbWFnZTNEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwkLmRlcHRoLDAsVHQsYmUsbnVsbCk6ci50ZXhJbWFnZTJEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwwLFR0LGJlLG51bGwpKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwLHd0KCQpKTplLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBjdCh0dCwkLEl0KXtpZihlLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsdHQpLCQuZGVwdGhCdWZmZXImJiEkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD0zMzE4OTtpZihJdHx8JC51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBoZT0kLmRlcHRoVGV4dHVyZTtoZSYmaGUuaXNEZXB0aFRleHR1cmUmJihoZS50eXBlPT09amQ/JHQ9MzYwMTI6aGUudHlwZT09PVZQJiYoJHQ9MzMxOTApKTtsZXQgVHQ9d3QoJCk7JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCl9ZWxzZSBlLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsJHQsJC53aWR0aCwkLmhlaWdodCk7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSx0dCl9ZWxzZSBpZigkLmRlcHRoQnVmZmVyJiYkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD13dCgkKTtJdCYmJC51c2VSZW5kZXJidWZmZXI/ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLCQud2lkdGgsJC5oZWlnaHQpLGUuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsdHQpfWVsc2V7bGV0ICR0PSQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwPyQudGV4dHVyZVswXTokLnRleHR1cmUsaGU9by5jb252ZXJ0KCR0LmZvcm1hdCwkdC5lbmNvZGluZyksVHQ9by5jb252ZXJ0KCR0LnR5cGUpLGJlPWsoJHQuaW50ZXJuYWxGb3JtYXQsaGUsVHQsJHQuZW5jb2RpbmcpLG50PXd0KCQpO0l0JiYkLnVzZVJlbmRlcmJ1ZmZlcj9lLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTokLnVzZVJlbmRlclRvVGV4dHVyZT9wLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTplLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsYmUsJC53aWR0aCwkLmhlaWdodCl9ZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIFgodHQsJCl7aWYoJCYmJC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksISgkLmRlcHRoVGV4dHVyZSYmJC5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpKXRocm93IG5ldyBFcnJvcigicmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZSIpOyghbi5nZXQoJC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlfHwkLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCE9PSQud2lkdGh8fCQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCE9PSQuaGVpZ2h0KSYmKCQuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPSQud2lkdGgsJC5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PSQuaGVpZ2h0LCQuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKSxXKCQuZGVwdGhUZXh0dXJlLDApO2xldCAkdD1uLmdldCgkLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsaGU9d3QoJCk7aWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09ejApJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLCR0LDApO2Vsc2UgaWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09azEpJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDMzMzA2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLCR0LDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKX1mdW5jdGlvbiBldCh0dCl7bGV0ICQ9bi5nZXQodHQpLEl0PXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYodHQuZGVwdGhUZXh0dXJlJiYhJC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKXtpZihJdCl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7WCgkLl9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCl9ZWxzZSBpZihJdCl7JC5fX3dlYmdsRGVwdGhidWZmZXI9W107Zm9yKGxldCAkdD0wOyR0PDY7JHQrKylyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlclskdF0pLCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XT1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGN0KCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XSx0dCwhMSl9ZWxzZSByLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlciksJC5fX3dlYmdsRGVwdGhidWZmZXI9ZS5jcmVhdGVSZW5kZXJidWZmZXIoKSxjdCgkLl9fd2ViZ2xEZXB0aGJ1ZmZlcix0dCwhMSk7ci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gZHQodHQsJCxJdCl7bGV0ICR0PW4uZ2V0KHR0KTskIT09dm9pZCAwJiZfdCgkdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsdHQudGV4dHVyZSwzNjA2NCwzNTUzKSxJdCE9PXZvaWQgMCYmZXQodHQpfWZ1bmN0aW9uIHEodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO3R0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEkpLHR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMhPT0hMCYmKCR0Ll9fd2ViZ2xUZXh0dXJlPT09dm9pZCAwJiYoJHQuX193ZWJnbFRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCkpLCR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sYS5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IGhlPXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITAsVHQ9dHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwLGJlPSQuaXNEYXRhVGV4dHVyZTNEfHwkLmlzRGF0YVRleHR1cmUyREFycmF5LG50PWIodHQpfHxzO2lmKGhlKXtJdC5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdPWUuY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksVHQpaWYoaS5kcmF3QnVmZmVycyl7bGV0IEN0PXR0LnRleHR1cmU7Zm9yKGxldCBXdD0wLGZlPUN0Lmxlbmd0aDtXdDxmZTtXdCsrKXtsZXQgYXQ9bi5nZXQoQ3RbV3RdKTthdC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKGF0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYodHQudXNlUmVuZGVyYnVmZmVyKWlmKHMpe0l0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7bGV0IEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9d3QodHQpO2UucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGF0LGZlLHR0LndpZHRoLHR0LmhlaWdodCksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsSXQuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDY0LDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLHR0LmRlcHRoQnVmZmVyJiYoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksY3QoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLHR0LCEwKSksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtpZihoZSl7ci5iaW5kVGV4dHVyZSgzNDA2NywkdC5fX3dlYmdsVGV4dHVyZSksYnQoMzQwNjcsJCxudCk7Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylfdChJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdLHR0LCQsMzYwNjQsMzQwNjkrQ3QpO0MoJCxudCkmJlAoMzQwNjcpLHIudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVHQpe2xldCBDdD10dC50ZXh0dXJlO2ZvcihsZXQgV3Q9MCxmZT1DdC5sZW5ndGg7V3Q8ZmU7V3QrKyl7bGV0IGF0PUN0W1d0XSxzZT1uLmdldChhdCk7ci5iaW5kVGV4dHVyZSgzNTUzLHNlLl9fd2ViZ2xUZXh0dXJlKSxidCgzNTUzLGF0LG50KSxfdChJdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsYXQsMzYwNjQrV3QsMzU1MyksQyhhdCxudCkmJlAoMzU1Myl9ci51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgQ3Q9MzU1MztiZSYmKHM/Q3Q9JC5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLHIuYmluZFRleHR1cmUoQ3QsJHQuX193ZWJnbFRleHR1cmUpLGJ0KEN0LCQsbnQpLF90KEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCwkLDM2MDY0LEN0KSxDKCQsbnQpJiZQKEN0KSxyLnVuYmluZFRleHR1cmUoKX10dC5kZXB0aEJ1ZmZlciYmZXQodHQpfWZ1bmN0aW9uIHB0KHR0KXtsZXQgJD1iKHR0KXx8cyxJdD10dC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/dHQudGV4dHVyZTpbdHQudGV4dHVyZV07Zm9yKGxldCAkdD0wLGhlPUl0Lmxlbmd0aDskdDxoZTskdCsrKXtsZXQgVHQ9SXRbJHRdO2lmKEMoVHQsJCkpe2xldCBiZT10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLG50PW4uZ2V0KFR0KS5fX3dlYmdsVGV4dHVyZTtyLmJpbmRUZXh0dXJlKGJlLG50KSxQKGJlKSxyLnVuYmluZFRleHR1cmUoKX19fWZ1bmN0aW9uIGh0KHR0KXtpZih0dC51c2VSZW5kZXJidWZmZXIpaWYocyl7bGV0ICQ9dHQud2lkdGgsSXQ9dHQuaGVpZ2h0LCR0PTE2Mzg0LGhlPVszNjA2NF0sVHQ9dHQuc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5Njt0dC5kZXB0aEJ1ZmZlciYmaGUucHVzaChUdCksdHQuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fCh0dC5kZXB0aEJ1ZmZlciYmKCR0fD0yNTYpLHR0LnN0ZW5jaWxCdWZmZXImJigkdHw9MTAyNCkpO2xldCBiZT1uLmdldCh0dCk7ci5iaW5kRnJhbWVidWZmZXIoMzYwMDgsYmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsRnJhbWVidWZmZXIpLHR0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYoZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW1R0XSksZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1R0XSkpLGUuYmxpdEZyYW1lYnVmZmVyKDAsMCwkLEl0LDAsMCwkLEl0LCR0LDk3MjgpLGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGhlKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gd3QodHQpe3JldHVybiBzJiYodHQudXNlUmVuZGVyYnVmZmVyfHx0dC51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsdHQuc2FtcGxlcyk6MH1mdW5jdGlvbiBrdCh0dCl7bGV0ICQ9YS5yZW5kZXIuZnJhbWU7ZC5nZXQodHQpIT09JCYmKGQuc2V0KHR0LCQpLHR0LnVwZGF0ZSgpKX1mdW5jdGlvbiBpZSh0dCwkKXtsZXQgSXQ9dHQuZW5jb2RpbmcsJHQ9dHQuZm9ybWF0LGhlPXR0LnR5cGU7cmV0dXJuIHR0LmlzQ29tcHJlc3NlZFRleHR1cmU9PT0hMHx8dHQuaXNWaWRlb1RleHR1cmU9PT0hMHx8dHQuZm9ybWF0PT09c1V8fEl0IT09UWQmJihJdD09PVduP3M9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiYkdD09PVFvPyh0dC5mb3JtYXQ9c1UsdHQubWluRmlsdGVyPWlpLHR0LmdlbmVyYXRlTWlwbWFwcz0hMSk6JD1LZi5zUkdCVG9MaW5lYXIoJCk6KCR0IT09UW98fGhlIT09WmQpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixJdCkpLCR9bGV0IGVlPSExLExlPSExO2Z1bmN0aW9uIGFyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoZWU9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGVlPSEwKSx0dD10dC50ZXh0dXJlKSxXKHR0LCQpfWZ1bmN0aW9uIGZyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKExlPT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksTGU9ITApLHR0PXR0LnRleHR1cmUpLG90KHR0LCQpfXRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1VLHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9eix0aGlzLnNldFRleHR1cmUyRD1XLHRoaXMuc2V0VGV4dHVyZTJEQXJyYXk9Wix0aGlzLnNldFRleHR1cmUzRD1ydCx0aGlzLnNldFRleHR1cmVDdWJlPW90LHRoaXMucmViaW5kVGV4dHVyZXM9ZHQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1xLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPXB0LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9aHQsdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPWV0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9X3QsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWFyLHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZyfWZ1bmN0aW9uIFFmZShlLHQscil7bGV0IG49ci5pc1dlYkdMMjtmdW5jdGlvbiBpKG8sYT1udWxsKXtsZXQgcztpZihvPT09WmQpcmV0dXJuIDUxMjE7aWYobz09PXlmZSlyZXR1cm4gMzI4MTk7aWYobz09PXZmZSlyZXR1cm4gMzI4MjA7aWYobz09PW1mZSlyZXR1cm4gNTEyMDtpZihvPT09Z2ZlKXJldHVybiA1MTIyO2lmKG89PT1HMylyZXR1cm4gNTEyMztpZihvPT09X2ZlKXJldHVybiA1MTI0O2lmKG89PT1WUClyZXR1cm4gNTEyNTtpZihvPT09amQpcmV0dXJuIDUxMjY7aWYobz09PUMxKXJldHVybiBuPzUxMzE6KHM9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxzIT09bnVsbD9zLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKG89PT14ZmUpcmV0dXJuIDY0MDY7aWYobz09PVFvKXJldHVybiA2NDA4O2lmKG89PT1iZmUpcmV0dXJuIDY0MDk7aWYobz09PXdmZSlyZXR1cm4gNjQxMDtpZihvPT09ejApcmV0dXJuIDY0MDI7aWYobz09PWsxKXJldHVybiAzNDA0MTtpZihvPT09U2ZlKXJldHVybiA2NDAzO2lmKG89PT1zVSlyZXR1cm4gcz10LmdldCgiRVhUX3NSR0IiKSxzIT09bnVsbD9zLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYobz09PU1mZSlyZXR1cm4gMzYyNDQ7aWYobz09PUVmZSlyZXR1cm4gMzMzMTk7aWYobz09PVRmZSlyZXR1cm4gMzMzMjA7aWYobz09PUNmZSlyZXR1cm4gMzYyNDk7aWYobz09PUpWfHxvPT09UVZ8fG89PT10VXx8bz09PWVVKWlmKGE9PT1XbilpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIikscyE9PW51bGwpe2lmKG89PT1KVilyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZihvPT09UVYpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYobz09PXRVKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKG89PT1lVSlyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2Vsc2UgaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxzIT09bnVsbCl7aWYobz09PUpWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PVFWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKG89PT10VSlyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZihvPT09ZVUpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09UHV0fHxvPT09SXV0fHxvPT09THV0fHxvPT09a3V0KWlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLHMhPT1udWxsKXtpZihvPT09UHV0KXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PUl1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKG89PT1MdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PWt1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKG89PT1BZmUpcmV0dXJuIHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIikscyE9PW51bGw/cy5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYobz09PVJ1dHx8bz09PU51dClpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIikscyE9PW51bGwpe2lmKG89PT1SdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfRVRDMjpzLkNPTVBSRVNTRURfUkdCOF9FVEMyO2lmKG89PT1OdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOnMuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31lbHNlIHJldHVybiBudWxsO2lmKG89PT1EdXR8fG89PT1PdXR8fG89PT16dXR8fG89PT1GdXR8fG89PT1CdXR8fG89PT1IdXR8fG89PT1WdXR8fG89PT1VdXR8fG89PT1xdXR8fG89PT1HdXR8fG89PT1XdXR8fG89PT1ZdXR8fG89PT1qdXR8fG89PT1YdXQpaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxzIT09bnVsbCl7aWYobz09PUR1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZihvPT09T3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKG89PT16dXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYobz09PUZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZihvPT09QnV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKG89PT1IdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYobz09PVZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZihvPT09VXV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKG89PT1xdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZihvPT09R3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYobz09PVd1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKG89PT1ZdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKG89PT1qdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKG89PT1YdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYobz09PSR1dClpZihzPXQuZ2V0KCJFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjIikscyE9PW51bGwpe2lmKG89PT0kdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDpzLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1lbHNlIHJldHVybiBudWxsO2lmKG89PT1BMSlyZXR1cm4gbj8zNDA0Mjoocz10LmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHMhPT1udWxsP3MuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6bnVsbCl9cmV0dXJue2NvbnZlcnQ6aX19dmFyIG42PWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLmNhbWVyYXM9dH19O242LnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhPSEwO3ZhciBYZD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikdyb3VwIn19O1hkLnByb3RvdHlwZS5pc0dyb3VwPSEwO3ZhciBrZ3I9e3R5cGU6Im1vdmUifSxxUD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgWGQsdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBYZCx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgaiksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IFhkLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBqKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxyLG4pe2xldCBpPW51bGwsbz1udWxsLGE9bnVsbCxzPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJnIuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihzIT09bnVsbCYmKGk9ci5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsbiksaSE9PW51bGwmJihzLm1hdHJpeC5mcm9tQXJyYXkoaS50cmFuc2Zvcm0ubWF0cml4KSxzLm1hdHJpeC5kZWNvbXBvc2Uocy5wb3NpdGlvbixzLnJvdGF0aW9uLHMuc2NhbGUpLGkubGluZWFyVmVsb2NpdHk/KHMuaGFzTGluZWFyVmVsb2NpdHk9ITAscy5saW5lYXJWZWxvY2l0eS5jb3B5KGkubGluZWFyVmVsb2NpdHkpKTpzLmhhc0xpbmVhclZlbG9jaXR5PSExLGkuYW5ndWxhclZlbG9jaXR5PyhzLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxzLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KGkuYW5ndWxhclZlbG9jaXR5KSk6cy5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KGtncikpKSxjJiZ0LmhhbmQpe2E9ITA7Zm9yKGxldCBnIG9mIHQuaGFuZC52YWx1ZXMoKSl7bGV0IF89ci5nZXRKb2ludFBvc2UoZyxuKTtpZihjLmpvaW50c1tnLmpvaW50TmFtZV09PT12b2lkIDApe2xldCB4PW5ldyBYZDt4Lm1hdHJpeEF1dG9VcGRhdGU9ITEseC52aXNpYmxlPSExLGMuam9pbnRzW2cuam9pbnROYW1lXT14LGMuYWRkKHgpfWxldCB5PWMuam9pbnRzW2cuam9pbnROYW1lXTtfIT09bnVsbCYmKHkubWF0cml4LmZyb21BcnJheShfLnRyYW5zZm9ybS5tYXRyaXgpLHkubWF0cml4LmRlY29tcG9zZSh5LnBvc2l0aW9uLHkucm90YXRpb24seS5zY2FsZSkseS5qb2ludFJhZGl1cz1fLnJhZGl1cykseS52aXNpYmxlPV8hPT1udWxsfWxldCB1PWMuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0saD1jLmpvaW50c1sidGh1bWItdGlwIl0sZj11LnBvc2l0aW9uLmRpc3RhbmNlVG8oaC5wb3NpdGlvbikscD0uMDIsZD0uMDA1O2MuaW5wdXRTdGF0ZS5waW5jaGluZyYmZj5wK2Q/KGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohYy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPD1wLWQmJihjLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIGwhPT1udWxsJiZ0LmdyaXBTcGFjZSYmKG89ci5nZXRQb3NlKHQuZ3JpcFNwYWNlLG4pLG8hPT1udWxsJiYobC5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksbC5tYXRyaXguZGVjb21wb3NlKGwucG9zaXRpb24sbC5yb3RhdGlvbixsLnNjYWxlKSxvLmxpbmVhclZlbG9jaXR5PyhsLmhhc0xpbmVhclZlbG9jaXR5PSEwLGwubGluZWFyVmVsb2NpdHkuY29weShvLmxpbmVhclZlbG9jaXR5KSk6bC5oYXNMaW5lYXJWZWxvY2l0eT0hMSxvLmFuZ3VsYXJWZWxvY2l0eT8obC5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsbC5hbmd1bGFyVmVsb2NpdHkuY29weShvLmFuZ3VsYXJWZWxvY2l0eSkpOmwuaGFzQW5ndWxhclZlbG9jaXR5PSExKSk7cmV0dXJuIHMhPT1udWxsJiYocy52aXNpYmxlPWkhPT1udWxsKSxsIT09bnVsbCYmKGwudmlzaWJsZT1vIT09bnVsbCksYyE9PW51bGwmJihjLnZpc2libGU9YSE9PW51bGwpLHRoaXN9fSxuTT1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe2lmKHU9dSE9PXZvaWQgMD91OnowLHUhPT16MCYmdSE9PWsxKXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTtuPT09dm9pZCAwJiZ1PT09ejAmJihuPUczKSxuPT09dm9pZCAwJiZ1PT09azEmJihuPUExKSxzdXBlcihudWxsLGksbyxhLHMsbCx1LG4sYyksdGhpcy5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cn0sdGhpcy5tYWdGaWx0ZXI9cyE9PXZvaWQgMD9zOkxpLHRoaXMubWluRmlsdGVyPWwhPT12b2lkIDA/bDpMaSx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07bk0ucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO3ZhciBlaHQ9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCk7bGV0IG49dGhpcyxpPW51bGwsbz0xLGE9bnVsbCxzPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwscD0hMSxkPW51bGwsZz1yLmdldENvbnRleHRBdHRyaWJ1dGVzKCksXz1udWxsLHk9bnVsbCx4PVtdLGI9bmV3IE1hcCxTPW5ldyBVaTtTLmxheWVycy5lbmFibGUoMSksUy52aWV3cG9ydD1uZXcgZW47bGV0IEM9bmV3IFVpO0MubGF5ZXJzLmVuYWJsZSgyKSxDLnZpZXdwb3J0PW5ldyBlbjtsZXQgUD1bUyxDXSxrPW5ldyBuNjtrLmxheWVycy5lbmFibGUoMSksay5sYXllcnMuZW5hYmxlKDIpO2xldCBPPW51bGwsRD1udWxsO3RoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRIYW5kU3BhY2UoKX07ZnVuY3Rpb24gQihvdCl7bGV0IHN0PWIuZ2V0KG90LmlucHV0U291cmNlKTtzdCYmc3QuZGlzcGF0Y2hFdmVudCh7dHlwZTpvdC50eXBlLGRhdGE6b3QuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBJKCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKG90LHN0KXtvdC5kaXNjb25uZWN0KHN0KX0pLGIuY2xlYXIoKSxPPW51bGwsRD1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KF8pLGY9bnVsbCxoPW51bGwsdT1udWxsLGk9bnVsbCx5PW51bGwscnQuc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX10aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24ob3Qpe289b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgZnJhbWVidWZmZXIgc2NhbGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5zZXRSZWZlcmVuY2VTcGFjZVR5cGU9ZnVuY3Rpb24ob3Qpe3M9b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBhfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGR9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24ob3Qpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYoaT1vdCxpIT09bnVsbCl7aWYoXz10LmdldFJlbmRlclRhcmdldCgpLGkuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVuZCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplZW5kIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIsSSksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLEwpLGcueHJDb21wYXRpYmxlIT09ITAmJih5aWVsZCByLm1ha2VYUkNvbXBhdGlibGUoKSksaS5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDB8fHQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyPT09ITEpe2xldCBzdD17YW50aWFsaWFzOmkucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP2cuYW50aWFsaWFzOiEwLGFscGhhOmcuYWxwaGEsZGVwdGg6Zy5kZXB0aCxzdGVuY2lsOmcuc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOm99O2Y9bmV3IFhSV2ViR0xMYXllcihpLHIsc3QpLGkudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpmfSkseT1uZXcgdXMoZi5mcmFtZWJ1ZmZlcldpZHRoLGYuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1lbHNle3A9Zy5hbnRpYWxpYXM7bGV0IHN0PW51bGwsU3Q9bnVsbCxidD1udWxsO2cuZGVwdGgmJihidD1nLnN0ZW5jaWw/MzUwNTY6MzMxOTAsc3Q9Zy5zdGVuY2lsP2sxOnowLFN0PWcuc3RlbmNpbD9BMTpHMyk7bGV0IE10PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09V24/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6YnQsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcoaSxyKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKE10KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSkscD95PW5ldyBqMyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTp5PW5ldyB1cyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX15LmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSksYT15aWVsZCBpLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShzKSxydC5zZXRDb250ZXh0KGkpLHJ0LnN0YXJ0KCksbi5pc1ByZXNlbnRpbmc9ITAsbi5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fSl9O2Z1bmN0aW9uIEwob3Qpe2xldCBzdD1pLmlucHV0U291cmNlcztmb3IobGV0IFN0PTA7U3Q8eC5sZW5ndGg7U3QrKyliLnNldChzdFtTdF0seFtTdF0pO2ZvcihsZXQgU3Q9MDtTdDxvdC5yZW1vdmVkLmxlbmd0aDtTdCsrKXtsZXQgYnQ9b3QucmVtb3ZlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiYoTXQuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOmJ0fSksYi5kZWxldGUoYnQpKX1mb3IobGV0IFN0PTA7U3Q8b3QuYWRkZWQubGVuZ3RoO1N0Kyspe2xldCBidD1vdC5hZGRlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiZNdC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6YnR9KX19bGV0IFI9bmV3IGosRj1uZXcgajtmdW5jdGlvbiB6KG90LHN0LFN0KXtSLnNldEZyb21NYXRyaXhQb3NpdGlvbihzdC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24oU3QubWF0cml4V29ybGQpO2xldCBidD1SLmRpc3RhbmNlVG8oRiksTXQ9c3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxsdD1TdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEt0PU10WzE0XS8oTXRbMTBdLTEpLF90PU10WzE0XS8oTXRbMTBdKzEpLGN0PShNdFs5XSsxKS9NdFs1XSxYPShNdFs5XS0xKS9NdFs1XSxldD0oTXRbOF0tMSkvTXRbMF0sZHQ9KGx0WzhdKzEpL2x0WzBdLHE9S3QqZXQscHQ9S3QqZHQsaHQ9YnQvKC1ldCtkdCksd3Q9aHQqLWV0O3N0Lm1hdHJpeFdvcmxkLmRlY29tcG9zZShvdC5wb3NpdGlvbixvdC5xdWF0ZXJuaW9uLG90LnNjYWxlKSxvdC50cmFuc2xhdGVYKHd0KSxvdC50cmFuc2xhdGVaKGh0KSxvdC5tYXRyaXhXb3JsZC5jb21wb3NlKG90LnBvc2l0aW9uLG90LnF1YXRlcm5pb24sb3Quc2NhbGUpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQga3Q9S3QraHQsaWU9X3QraHQsZWU9cS13dCxMZT1wdCsoYnQtd3QpLGFyPWN0Kl90L2llKmt0LGZyPVgqX3QvaWUqa3Q7b3QucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoZWUsTGUsYXIsZnIsa3QsaWUpfWZ1bmN0aW9uIFUob3Qsc3Qpe3N0PT09bnVsbD9vdC5tYXRyaXhXb3JsZC5jb3B5KG90Lm1hdHJpeCk6b3QubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhzdC5tYXRyaXhXb3JsZCxvdC5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihvdCl7aWYoaT09PW51bGwpcmV0dXJuO2submVhcj1DLm5lYXI9Uy5uZWFyPW90Lm5lYXIsay5mYXI9Qy5mYXI9Uy5mYXI9b3QuZmFyLChPIT09ay5uZWFyfHxEIT09ay5mYXIpJiYoaS51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOmsubmVhcixkZXB0aEZhcjprLmZhcn0pLE89ay5uZWFyLEQ9ay5mYXIpO2xldCBzdD1vdC5wYXJlbnQsU3Q9ay5jYW1lcmFzO1UoayxzdCk7Zm9yKGxldCBNdD0wO010PFN0Lmxlbmd0aDtNdCsrKVUoU3RbTXRdLHN0KTtrLm1hdHJpeFdvcmxkLmRlY29tcG9zZShrLnBvc2l0aW9uLGsucXVhdGVybmlvbixrLnNjYWxlKSxvdC5wb3NpdGlvbi5jb3B5KGsucG9zaXRpb24pLG90LnF1YXRlcm5pb24uY29weShrLnF1YXRlcm5pb24pLG90LnNjYWxlLmNvcHkoay5zY2FsZSksb3QubWF0cml4LmNvcHkoay5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkLmNvcHkoay5tYXRyaXhXb3JsZCk7bGV0IGJ0PW90LmNoaWxkcmVuO2ZvcihsZXQgTXQ9MCxsdD1idC5sZW5ndGg7TXQ8bHQ7TXQrKylidFtNdF0udXBkYXRlTWF0cml4V29ybGQoITApO1N0Lmxlbmd0aD09PTI/eihrLFMsQyk6ay5wcm9qZWN0aW9uTWF0cml4LmNvcHkoUy5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtpZihoIT09bnVsbClyZXR1cm4gaC5maXhlZEZvdmVhdGlvbjtpZihmIT09bnVsbClyZXR1cm4gZi5maXhlZEZvdmVhdGlvbn0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24ob3Qpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1vdCksZiE9PW51bGwmJmYuZml4ZWRGb3ZlYXRpb24hPT12b2lkIDAmJihmLmZpeGVkRm92ZWF0aW9uPW90KX07bGV0IFc9bnVsbDtmdW5jdGlvbiBaKG90LHN0KXtpZihjPXN0LmdldFZpZXdlclBvc2UoYSksZD1zdCxjIT09bnVsbCl7bGV0IGJ0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKHksZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQoeSkpO2xldCBNdD0hMTtidC5sZW5ndGghPT1rLmNhbWVyYXMubGVuZ3RoJiYoay5jYW1lcmFzLmxlbmd0aD0wLE10PSEwKTtmb3IobGV0IGx0PTA7bHQ8YnQubGVuZ3RoO2x0Kyspe2xldCBLdD1idFtsdF0sX3Q9bnVsbDtpZihmIT09bnVsbClfdD1mLmdldFZpZXdwb3J0KEt0KTtlbHNle2xldCBYPXUuZ2V0Vmlld1N1YkltYWdlKGgsS3QpO190PVgudmlld3BvcnQsbHQ9PT0wJiYodC5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyh5LFguY29sb3JUZXh0dXJlLGguaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOlguZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoeSkpfWxldCBjdD1QW2x0XTtjdC5tYXRyaXguZnJvbUFycmF5KEt0LnRyYW5zZm9ybS5tYXRyaXgpLGN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEt0LnByb2plY3Rpb25NYXRyaXgpLGN0LnZpZXdwb3J0LnNldChfdC54LF90LnksX3Qud2lkdGgsX3QuaGVpZ2h0KSxsdD09PTAmJmsubWF0cml4LmNvcHkoY3QubWF0cml4KSxNdD09PSEwJiZrLmNhbWVyYXMucHVzaChjdCl9fWxldCBTdD1pLmlucHV0U291cmNlcztmb3IobGV0IGJ0PTA7YnQ8eC5sZW5ndGg7YnQrKyl7bGV0IE10PXhbYnRdLGx0PVN0W2J0XTtNdC51cGRhdGUobHQsc3QsYSl9VyYmVyhvdCxzdCksZD1udWxsfWxldCBydD1uZXcgVWZlO3J0LnNldEFuaW1hdGlvbkxvb3AoWiksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKG90KXtXPW90fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gUmdyKGUpe2Z1bmN0aW9uIHQoeSx4KXt5LmZvZ0NvbG9yLnZhbHVlLmNvcHkoeC5jb2xvcikseC5pc0ZvZz8oeS5mb2dOZWFyLnZhbHVlPXgubmVhcix5LmZvZ0Zhci52YWx1ZT14LmZhcik6eC5pc0ZvZ0V4cDImJih5LmZvZ0RlbnNpdHkudmFsdWU9eC5kZW5zaXR5KX1mdW5jdGlvbiByKHkseCxiLFMsQyl7eC5pc01lc2hCYXNpY01hdGVyaWFsP24oeSx4KTp4LmlzTWVzaExhbWJlcnRNYXRlcmlhbD8obih5LHgpLGwoeSx4KSk6eC5pc01lc2hUb29uTWF0ZXJpYWw/KG4oeSx4KSx1KHkseCkpOnguaXNNZXNoUGhvbmdNYXRlcmlhbD8obih5LHgpLGMoeSx4KSk6eC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPyhuKHkseCkseC5pc01lc2hQaHlzaWNhbE1hdGVyaWFsP2YoeSx4LEMpOmgoeSx4KSk6eC5pc01lc2hNYXRjYXBNYXRlcmlhbD8obih5LHgpLHAoeSx4KSk6eC5pc01lc2hEZXB0aE1hdGVyaWFsPyhuKHkseCksZCh5LHgpKTp4LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw/KG4oeSx4KSxnKHkseCkpOnguaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KG4oeSx4KSxfKHkseCkpOnguaXNMaW5lQmFzaWNNYXRlcmlhbD8oaSh5LHgpLHguaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJm8oeSx4KSk6eC5pc1BvaW50c01hdGVyaWFsP2EoeSx4LGIsUyk6eC5pc1Nwcml0ZU1hdGVyaWFsP3MoeSx4KTp4LmlzU2hhZG93TWF0ZXJpYWw/KHkuY29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5KTp4LmlzU2hhZGVyTWF0ZXJpYWwmJih4LnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9ZnVuY3Rpb24gbih5LHgpe3kub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseC5jb2xvciYmeS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseC5lbWlzc2l2ZSYmeS5lbWlzc2l2ZS52YWx1ZS5jb3B5KHguZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHguZW1pc3NpdmVJbnRlbnNpdHkpLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguc3BlY3VsYXJNYXAmJih5LnNwZWN1bGFyTWFwLnZhbHVlPXguc3BlY3VsYXJNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IGI9ZS5nZXQoeCkuZW52TWFwO2ImJih5LmVudk1hcC52YWx1ZT1iLHkuZmxpcEVudk1hcC52YWx1ZT1iLmlzQ3ViZVRleHR1cmUmJmIuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSx5LnJlZmxlY3Rpdml0eS52YWx1ZT14LnJlZmxlY3Rpdml0eSx5Lmlvci52YWx1ZT14Lmlvcix5LnJlZnJhY3Rpb25SYXRpby52YWx1ZT14LnJlZnJhY3Rpb25SYXRpbykseC5saWdodE1hcCYmKHkubGlnaHRNYXAudmFsdWU9eC5saWdodE1hcCx5LmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPXgubGlnaHRNYXBJbnRlbnNpdHkpLHguYW9NYXAmJih5LmFvTWFwLnZhbHVlPXguYW9NYXAseS5hb01hcEludGVuc2l0eS52YWx1ZT14LmFvTWFwSW50ZW5zaXR5KTtsZXQgUzt4Lm1hcD9TPXgubWFwOnguc3BlY3VsYXJNYXA/Uz14LnNwZWN1bGFyTWFwOnguZGlzcGxhY2VtZW50TWFwP1M9eC5kaXNwbGFjZW1lbnRNYXA6eC5ub3JtYWxNYXA/Uz14Lm5vcm1hbE1hcDp4LmJ1bXBNYXA/Uz14LmJ1bXBNYXA6eC5yb3VnaG5lc3NNYXA/Uz14LnJvdWdobmVzc01hcDp4Lm1ldGFsbmVzc01hcD9TPXgubWV0YWxuZXNzTWFwOnguYWxwaGFNYXA/Uz14LmFscGhhTWFwOnguZW1pc3NpdmVNYXA/Uz14LmVtaXNzaXZlTWFwOnguY2xlYXJjb2F0TWFwP1M9eC5jbGVhcmNvYXRNYXA6eC5jbGVhcmNvYXROb3JtYWxNYXA/Uz14LmNsZWFyY29hdE5vcm1hbE1hcDp4LmNsZWFyY29hdFJvdWdobmVzc01hcD9TPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwOnguc3BlY3VsYXJJbnRlbnNpdHlNYXA/Uz14LnNwZWN1bGFySW50ZW5zaXR5TWFwOnguc3BlY3VsYXJDb2xvck1hcD9TPXguc3BlY3VsYXJDb2xvck1hcDp4LnRyYW5zbWlzc2lvbk1hcD9TPXgudHJhbnNtaXNzaW9uTWFwOngudGhpY2tuZXNzTWFwP1M9eC50aGlja25lc3NNYXA6eC5zaGVlbkNvbG9yTWFwP1M9eC5zaGVlbkNvbG9yTWFwOnguc2hlZW5Sb3VnaG5lc3NNYXAmJihTPXguc2hlZW5Sb3VnaG5lc3NNYXApLFMhPT12b2lkIDAmJihTLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihTPVMudGV4dHVyZSksUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFMubWF0cml4KSk7bGV0IEM7eC5hb01hcD9DPXguYW9NYXA6eC5saWdodE1hcCYmKEM9eC5saWdodE1hcCksQyE9PXZvaWQgMCYmKEMuaXNXZWJHTFJlbmRlclRhcmdldCYmKEM9Qy50ZXh0dXJlKSxDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2MlRyYW5zZm9ybS52YWx1ZS5jb3B5KEMubWF0cml4KSl9ZnVuY3Rpb24gaSh5LHgpe3kuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHkub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHl9ZnVuY3Rpb24gbyh5LHgpe3kuZGFzaFNpemUudmFsdWU9eC5kYXNoU2l6ZSx5LnRvdGFsU2l6ZS52YWx1ZT14LmRhc2hTaXplK3guZ2FwU2l6ZSx5LnNjYWxlLnZhbHVlPXguc2NhbGV9ZnVuY3Rpb24gYSh5LHgsYixTKXt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHkuc2l6ZS52YWx1ZT14LnNpemUqYix5LnNjYWxlLnZhbHVlPVMqLjUseC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgQzt4Lm1hcD9DPXgubWFwOnguYWxwaGFNYXAmJihDPXguYWxwaGFNYXApLEMhPT12b2lkIDAmJihDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoQy5tYXRyaXgpKX1mdW5jdGlvbiBzKHkseCl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnJvdGF0aW9uLnZhbHVlPXgucm90YXRpb24seC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgYjt4Lm1hcD9iPXgubWFwOnguYWxwaGFNYXAmJihiPXguYWxwaGFNYXApLGIhPT12b2lkIDAmJihiLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmYi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoYi5tYXRyaXgpKX1mdW5jdGlvbiBsKHkseCl7eC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCl9ZnVuY3Rpb24gYyh5LHgpe3kuc3BlY3VsYXIudmFsdWUuY29weSh4LnNwZWN1bGFyKSx5LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heCh4LnNoaW5pbmVzcywxZS00KSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIHUoeSx4KXt4LmdyYWRpZW50TWFwJiYoeS5ncmFkaWVudE1hcC52YWx1ZT14LmdyYWRpZW50TWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGgoeSx4KXt5LnJvdWdobmVzcy52YWx1ZT14LnJvdWdobmVzcyx5Lm1ldGFsbmVzcy52YWx1ZT14Lm1ldGFsbmVzcyx4LnJvdWdobmVzc01hcCYmKHkucm91Z2huZXNzTWFwLnZhbHVlPXgucm91Z2huZXNzTWFwKSx4Lm1ldGFsbmVzc01hcCYmKHkubWV0YWxuZXNzTWFwLnZhbHVlPXgubWV0YWxuZXNzTWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpLGUuZ2V0KHgpLmVudk1hcCYmKHkuZW52TWFwSW50ZW5zaXR5LnZhbHVlPXguZW52TWFwSW50ZW5zaXR5KX1mdW5jdGlvbiBmKHkseCxiKXtoKHkseCkseS5pb3IudmFsdWU9eC5pb3IseC5zaGVlbj4wJiYoeS5zaGVlbkNvbG9yLnZhbHVlLmNvcHkoeC5zaGVlbkNvbG9yKS5tdWx0aXBseVNjYWxhcih4LnNoZWVuKSx5LnNoZWVuUm91Z2huZXNzLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3MseC5zaGVlbkNvbG9yTWFwJiYoeS5zaGVlbkNvbG9yTWFwLnZhbHVlPXguc2hlZW5Db2xvck1hcCkseC5zaGVlblJvdWdobmVzc01hcCYmKHkuc2hlZW5Sb3VnaG5lc3NNYXAudmFsdWU9eC5zaGVlblJvdWdobmVzc01hcCkpLHguY2xlYXJjb2F0PjAmJih5LmNsZWFyY29hdC52YWx1ZT14LmNsZWFyY29hdCx5LmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzcyx4LmNsZWFyY29hdE1hcCYmKHkuY2xlYXJjb2F0TWFwLnZhbHVlPXguY2xlYXJjb2F0TWFwKSx4LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwKSx4LmNsZWFyY29hdE5vcm1hbE1hcCYmKHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUuY29weSh4LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx5LmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZT14LmNsZWFyY29hdE5vcm1hbE1hcCx4LnNpZGU9PT1JaSYmeS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkpLHgudHJhbnNtaXNzaW9uPjAmJih5LnRyYW5zbWlzc2lvbi52YWx1ZT14LnRyYW5zbWlzc2lvbix5LnRyYW5zbWlzc2lvblNhbXBsZXJNYXAudmFsdWU9Yi50ZXh0dXJlLHkudHJhbnNtaXNzaW9uU2FtcGxlclNpemUudmFsdWUuc2V0KGIud2lkdGgsYi5oZWlnaHQpLHgudHJhbnNtaXNzaW9uTWFwJiYoeS50cmFuc21pc3Npb25NYXAudmFsdWU9eC50cmFuc21pc3Npb25NYXApLHkudGhpY2tuZXNzLnZhbHVlPXgudGhpY2tuZXNzLHgudGhpY2tuZXNzTWFwJiYoeS50aGlja25lc3NNYXAudmFsdWU9eC50aGlja25lc3NNYXApLHkuYXR0ZW51YXRpb25EaXN0YW5jZS52YWx1ZT14LmF0dGVudWF0aW9uRGlzdGFuY2UseS5hdHRlbnVhdGlvbkNvbG9yLnZhbHVlLmNvcHkoeC5hdHRlbnVhdGlvbkNvbG9yKSkseS5zcGVjdWxhckludGVuc2l0eS52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5LHkuc3BlY3VsYXJDb2xvci52YWx1ZS5jb3B5KHguc3BlY3VsYXJDb2xvcikseC5zcGVjdWxhckludGVuc2l0eU1hcCYmKHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eU1hcCkseC5zcGVjdWxhckNvbG9yTWFwJiYoeS5zcGVjdWxhckNvbG9yTWFwLnZhbHVlPXguc3BlY3VsYXJDb2xvck1hcCl9ZnVuY3Rpb24gcCh5LHgpe3gubWF0Y2FwJiYoeS5tYXRjYXAudmFsdWU9eC5tYXRjYXApLHguYnVtcE1hcCYmKHkuYnVtcE1hcC52YWx1ZT14LmJ1bXBNYXAseS5idW1wU2NhbGUudmFsdWU9eC5idW1wU2NhbGUseC5zaWRlPT09SWkmJih5LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx4Lm5vcm1hbE1hcCYmKHkubm9ybWFsTWFwLnZhbHVlPXgubm9ybWFsTWFwLHkubm9ybWFsU2NhbGUudmFsdWUuY29weSh4Lm5vcm1hbFNjYWxlKSx4LnNpZGU9PT1JaSYmeS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseC5kaXNwbGFjZW1lbnRNYXAmJih5LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gZCh5LHgpe3guZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGcoeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSx5LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeC5yZWZlcmVuY2VQb3NpdGlvbikseS5uZWFyRGlzdGFuY2UudmFsdWU9eC5uZWFyRGlzdGFuY2UseS5mYXJEaXN0YW5jZS52YWx1ZT14LmZhckRpc3RhbmNlfWZ1bmN0aW9uIF8oeSx4KXt4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6dCxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpyfX1mdW5jdGlvbiBOZ3IoKXtsZXQgZT10NigiY2FudmFzIik7cmV0dXJuIGUuc3R5bGUuZGlzcGxheT0iYmxvY2siLGV9ZnVuY3Rpb24gcm4oZT17fSl7bGV0IHQ9ZS5jYW52YXMhPT12b2lkIDA/ZS5jYW52YXM6TmdyKCkscj1lLmNvbnRleHQhPT12b2lkIDA/ZS5jb250ZXh0Om51bGwsbj1lLmFscGhhIT09dm9pZCAwP2UuYWxwaGE6ITEsaT1lLmRlcHRoIT09dm9pZCAwP2UuZGVwdGg6ITAsbz1lLnN0ZW5jaWwhPT12b2lkIDA/ZS5zdGVuY2lsOiEwLGE9ZS5hbnRpYWxpYXMhPT12b2lkIDA/ZS5hbnRpYWxpYXM6ITEscz1lLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9lLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP2UucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9ZS5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/ZS5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP2UuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLHA9W10sZD1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPVFkLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz1LZCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgZz10aGlzLF89ITEseT0wLHg9MCxiPW51bGwsUz0tMSxDPW51bGwsUD1uZXcgZW4saz1uZXcgZW4sTz1udWxsLEQ9dC53aWR0aCxCPXQuaGVpZ2h0LEk9MSxMPW51bGwsUj1udWxsLEY9bmV3IGVuKDAsMCxELEIpLHo9bmV3IGVuKDAsMCxELEIpLFU9ITEsVz1uZXcgTjEsWj0hMSxydD0hMSxvdD1udWxsLHN0PW5ldyBNZSxTdD1uZXcgaixidD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIE10KCl7cmV0dXJuIGI9PT1udWxsP0k6MX1sZXQgbHQ9cjtmdW5jdGlvbiBLdChLLGd0KXtmb3IobGV0IEV0PTA7RXQ8Sy5sZW5ndGg7RXQrKyl7bGV0IHh0PUtbRXRdLEZ0PXQuZ2V0Q29udGV4dCh4dCxndCk7aWYoRnQhPT1udWxsKXJldHVybiBGdH1yZXR1cm4gbnVsbH10cnl7bGV0IEs9e2FscGhhOiEwLGRlcHRoOmksc3RlbmNpbDpvLGFudGlhbGlhczphLHByZW11bHRpcGxpZWRBbHBoYTpzLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLGB0aHJlZS5qcyByJHtqVX1gKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZlLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixhdCwhMSksbHQ9PT1udWxsKXtsZXQgZ3Q9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKGcuaXNXZWJHTDFSZW5kZXJlcj09PSEwJiZndC5zaGlmdCgpLGx0PUt0KGd0LEspLGx0PT09bnVsbCl0aHJvdyBLdChndCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX1sdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9PT12b2lkIDAmJihsdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKEspe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrSy5tZXNzYWdlKSxLfWxldCBfdCxjdCxYLGV0LGR0LHEscHQsaHQsd3Qsa3QsaWUsZWUsTGUsYXIsZnIsdHQsJCxJdCwkdCxoZSxUdCxiZSxudDtmdW5jdGlvbiBDdCgpe190PW5ldyBubXIobHQpLGN0PW5ldyBaZHIobHQsX3QsZSksX3QuaW5pdChjdCksYmU9bmV3IFFmZShsdCxfdCxjdCksWD1uZXcgSWdyKGx0LF90LGN0KSxldD1uZXcgYW1yKGx0KSxkdD1uZXcgdmdyLHE9bmV3IExncihsdCxfdCxYLGR0LGN0LGJlLGV0KSxwdD1uZXcgUWRyKGcpLGh0PW5ldyBybXIoZyksd3Q9bmV3IGJmcihsdCxjdCksbnQ9bmV3ICRkcihsdCxfdCx3dCxjdCksa3Q9bmV3IGltcihsdCx3dCxldCxudCksaWU9bmV3IHVtcihsdCxrdCx3dCxldCksJHQ9bmV3IGNtcihsdCxjdCxxKSx0dD1uZXcgSmRyKGR0KSxlZT1uZXcgeWdyKGcscHQsaHQsX3QsY3QsbnQsdHQpLExlPW5ldyBSZ3IoZHQpLGFyPW5ldyBiZ3IsZnI9bmV3IENncihfdCxjdCksSXQ9bmV3IFhkcihnLHB0LFgsaWUsbixzKSwkPW5ldyBKZmUoZyxpZSxjdCksaGU9bmV3IEtkcihsdCxfdCxldCxjdCksVHQ9bmV3IG9tcihsdCxfdCxldCxjdCksZXQucHJvZ3JhbXM9ZWUucHJvZ3JhbXMsZy5jYXBhYmlsaXRpZXM9Y3QsZy5leHRlbnNpb25zPV90LGcucHJvcGVydGllcz1kdCxnLnJlbmRlckxpc3RzPWFyLGcuc2hhZG93TWFwPSQsZy5zdGF0ZT1YLGcuaW5mbz1ldH1DdCgpO2xldCBXdD1uZXcgZWh0KGcsbHQpO3RoaXMueHI9V3QsdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGx0fSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGx0LmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBLPV90LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7SyYmSy5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgSz1fdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0smJksucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIEl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihLKXtLIT09dm9pZCAwJiYoST1LLHRoaXMuc2V0U2l6ZShELEIsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKEspe3JldHVybiBLLnNldChELEIpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oSyxndCxFdCl7aWYoV3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn1EPUssQj1ndCx0LndpZHRoPU1hdGguZmxvb3IoSypJKSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkkpLEV0IT09ITEmJih0LnN0eWxlLndpZHRoPUsrInB4Iix0LnN0eWxlLmhlaWdodD1ndCsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLKXtyZXR1cm4gSy5zZXQoRCpJLEIqSSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLLGd0LEV0KXtEPUssQj1ndCxJPUV0LHQud2lkdGg9TWF0aC5mbG9vcihLKkV0KSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkV0KSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShQKX0sdGhpcy5nZXRWaWV3cG9ydD1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEYpfSx0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKEssZ3QsRXQseHQpe0suaXNWZWN0b3I0P0Yuc2V0KEsueCxLLnksSy56LEsudyk6Ri5zZXQoSyxndCxFdCx4dCksWC52aWV3cG9ydChQLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoSSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3Nvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KHopfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oSyxndCxFdCx4dCl7Sy5pc1ZlY3RvcjQ/ei5zZXQoSy54LEsueSxLLnosSy53KTp6LnNldChLLGd0LEV0LHh0KSxYLnNjaXNzb3Ioay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIFV9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oSyl7WC5zZXRTY2lzc29yVGVzdChVPUspfSx0aGlzLnNldE9wYXF1ZVNvcnQ9ZnVuY3Rpb24oSyl7TD1LfSx0aGlzLnNldFRyYW5zcGFyZW50U29ydD1mdW5jdGlvbihLKXtSPUt9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEl0LmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe0l0LnNldENsZWFyQ29sb3IuYXBwbHkoSXQsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIEl0LmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7SXQuc2V0Q2xlYXJBbHBoYS5hcHBseShJdCxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKEssZ3QsRXQpe2xldCB4dD0wOyhLPT09dm9pZCAwfHxLKSYmKHh0fD0xNjM4NCksKGd0PT09dm9pZCAwfHxndCkmJih4dHw9MjU2KSwoRXQ9PT12b2lkIDB8fEV0KSYmKHh0fD0xMDI0KSxsdC5jbGVhcih4dCl9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmZSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYXQsITEpLGFyLmRpc3Bvc2UoKSxmci5kaXNwb3NlKCksZHQuZGlzcG9zZSgpLHB0LmRpc3Bvc2UoKSxodC5kaXNwb3NlKCksaWUuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxlZS5kaXNwb3NlKCksV3QuZGlzcG9zZSgpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsemUpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHluKSxvdCYmKG90LmRpc3Bvc2UoKSxvdD1udWxsKSxXaS5zdG9wKCl9O2Z1bmN0aW9uIGZlKEspe0sucHJldmVudERlZmF1bHQoKSxjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LiIpLF89ITB9ZnVuY3Rpb24gYXQoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSxfPSExO2xldCBLPWV0LmF1dG9SZXNldCxndD0kLmVuYWJsZWQsRXQ9JC5hdXRvVXBkYXRlLHh0PSQubmVlZHNVcGRhdGUsRnQ9JC50eXBlO0N0KCksZXQuYXV0b1Jlc2V0PUssJC5lbmFibGVkPWd0LCQuYXV0b1VwZGF0ZT1FdCwkLm5lZWRzVXBkYXRlPXh0LCQudHlwZT1GdH1mdW5jdGlvbiBzZShLKXtsZXQgZ3Q9Sy50YXJnZXQ7Z3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsc2UpLFF0KGd0KX1mdW5jdGlvbiBRdChLKXtDZShLKSxkdC5yZW1vdmUoSyl9ZnVuY3Rpb24gQ2UoSyl7bGV0IGd0PWR0LmdldChLKS5wcm9ncmFtcztndCE9PXZvaWQgMCYmKGd0LmZvckVhY2goZnVuY3Rpb24oRXQpe2VlLnJlbGVhc2VQcm9ncmFtKEV0KX0pLEsuaXNTaGFkZXJNYXRlcmlhbCYmZWUucmVsZWFzZVNoYWRlckNhY2hlKEspKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0LFZlKXtndD09PW51bGwmJihndD1idCk7bGV0IFVlPUZ0LmlzTWVzaCYmRnQubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHRyPWNuKEssZ3QsRXQseHQsRnQpO1guc2V0TWF0ZXJpYWwoeHQsVWUpO2xldCBLZT1FdC5pbmRleCxYcj1FdC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKEtlPT09bnVsbCl7aWYoWHI9PT12b2lkIDB8fFhyLmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihLZS5jb3VudD09PTApcmV0dXJuO2xldCBfcj0xO3h0LndpcmVmcmFtZT09PSEwJiYoS2U9a3QuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKEV0KSxfcj0yKSxudC5zZXR1cChGdCx4dCx0cixFdCxLZSk7bGV0IFByLGpuPWhlO0tlIT09bnVsbCYmKFByPXd0LmdldChLZSksam49VHQsam4uc2V0SW5kZXgoUHIpKTtsZXQgbnA9S2UhPT1udWxsP0tlLmNvdW50OlhyLmNvdW50LHVtPUV0LmRyYXdSYW5nZS5zdGFydCpfcixtcj1FdC5kcmF3UmFuZ2UuY291bnQqX3IsRmw9VmUhPT1udWxsP1ZlLnN0YXJ0Kl9yOjAsWG49VmUhPT1udWxsP1ZlLmNvdW50Kl9yOjEvMCxCbD1NYXRoLm1heCh1bSxGbCksdXg9TWF0aC5taW4obnAsdW0rbXIsRmwrWG4pLTEsSGw9TWF0aC5tYXgoMCx1eC1CbCsxKTtpZihIbCE9PTApe2lmKEZ0LmlzTWVzaCl4dC53aXJlZnJhbWU9PT0hMD8oWC5zZXRMaW5lV2lkdGgoeHQud2lyZWZyYW1lTGluZXdpZHRoKk10KCkpLGpuLnNldE1vZGUoMSkpOmpuLnNldE1vZGUoNCk7ZWxzZSBpZihGdC5pc0xpbmUpe2xldCBWbD14dC5saW5ld2lkdGg7Vmw9PT12b2lkIDAmJihWbD0xKSxYLnNldExpbmVXaWR0aChWbCpNdCgpKSxGdC5pc0xpbmVTZWdtZW50cz9qbi5zZXRNb2RlKDEpOkZ0LmlzTGluZUxvb3A/am4uc2V0TW9kZSgyKTpqbi5zZXRNb2RlKDMpfWVsc2UgRnQuaXNQb2ludHM/am4uc2V0TW9kZSgwKTpGdC5pc1Nwcml0ZSYmam4uc2V0TW9kZSg0KTtpZihGdC5pc0luc3RhbmNlZE1lc2gpam4ucmVuZGVySW5zdGFuY2VzKEJsLEhsLEZ0LmNvdW50KTtlbHNlIGlmKEV0LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpe2xldCBWbD1NYXRoLm1pbihFdC5pbnN0YW5jZUNvdW50LEV0Ll9tYXhJbnN0YW5jZUNvdW50KTtqbi5yZW5kZXJJbnN0YW5jZXMoQmwsSGwsVmwpfWVsc2Ugam4ucmVuZGVyKEJsLEhsKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbihLLGd0KXtmPWZyLmdldChLKSxmLmluaXQoKSxkLnB1c2goZiksSy50cmF2ZXJzZVZpc2libGUoZnVuY3Rpb24oRXQpe0V0LmlzTGlnaHQmJkV0LmxheWVycy50ZXN0KGd0LmxheWVycykmJihmLnB1c2hMaWdodChFdCksRXQuY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KEV0KSl9KSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEsudHJhdmVyc2UoZnVuY3Rpb24oRXQpe2xldCB4dD1FdC5tYXRlcmlhbDtpZih4dClpZihBcnJheS5pc0FycmF5KHh0KSlmb3IobGV0IEZ0PTA7RnQ8eHQubGVuZ3RoO0Z0Kyspe2xldCBWZT14dFtGdF07Y20oVmUsSyxFdCl9ZWxzZSBjbSh4dCxLLEV0KX0pLGQucG9wKCksZj1udWxsfTtsZXQgUHQ9bnVsbDtmdW5jdGlvbiBOdChLKXtQdCYmUHQoSyl9ZnVuY3Rpb24gemUoKXtXaS5zdG9wKCl9ZnVuY3Rpb24geW4oKXtXaS5zdGFydCgpfWxldCBXaT1uZXcgVWZlO1dpLnNldEFuaW1hdGlvbkxvb3AoTnQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZXaS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKEspe1B0PUssV3Quc2V0QW5pbWF0aW9uTG9vcChLKSxLPT09bnVsbD9XaS5zdG9wKCk6V2kuc3RhcnQoKX0sV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0Iix6ZSksV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIseW4pLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEssZ3Qpe2lmKGd0IT09dm9pZCAwJiZndC5pc0NhbWVyYSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7cmV0dXJufWlmKF89PT0hMClyZXR1cm47Sy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlTWF0cml4V29ybGQoKSxndC5wYXJlbnQ9PT1udWxsJiZndC51cGRhdGVNYXRyaXhXb3JsZCgpLFd0LmVuYWJsZWQ9PT0hMCYmV3QuaXNQcmVzZW50aW5nPT09ITAmJihXdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJld0LnVwZGF0ZUNhbWVyYShndCksZ3Q9V3QuZ2V0Q2FtZXJhKCkpLEsuaXNTY2VuZT09PSEwJiZLLm9uQmVmb3JlUmVuZGVyKGcsSyxndCxiKSxmPWZyLmdldChLLGQubGVuZ3RoKSxmLmluaXQoKSxkLnB1c2goZiksc3QubXVsdGlwbHlNYXRyaWNlcyhndC5wcm9qZWN0aW9uTWF0cml4LGd0Lm1hdHJpeFdvcmxkSW52ZXJzZSksVy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzdCkscnQ9dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCxaPXR0LmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxydCxndCksaD1hci5nZXQoSyxwLmxlbmd0aCksaC5pbml0KCkscC5wdXNoKGgpLEFyKEssZ3QsMCxnLnNvcnRPYmplY3RzKSxoLmZpbmlzaCgpLGcuc29ydE9iamVjdHM9PT0hMCYmaC5zb3J0KEwsUiksWj09PSEwJiZ0dC5iZWdpblNoYWRvd3MoKTtsZXQgRXQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYoJC5yZW5kZXIoRXQsSyxndCksWj09PSEwJiZ0dC5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxJdC5yZW5kZXIoaCxLKSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLGd0LmlzQXJyYXlDYW1lcmEpe2xldCB4dD1ndC5jYW1lcmFzO2ZvcihsZXQgRnQ9MCxWZT14dC5sZW5ndGg7RnQ8VmU7RnQrKyl7bGV0IFVlPXh0W0Z0XTtQYShoLEssVWUsVWUudmlld3BvcnQpfX1lbHNlIFBhKGgsSyxndCk7YiE9PW51bGwmJihxLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KGIpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpKSxLLmlzU2NlbmU9PT0hMCYmSy5vbkFmdGVyUmVuZGVyKGcsSyxndCksWC5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLFguYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxYLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksWC5zZXRQb2x5Z29uT2Zmc2V0KCExKSxudC5yZXNldERlZmF1bHRTdGF0ZSgpLFM9LTEsQz1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9mPWRbZC5sZW5ndGgtMV06Zj1udWxsLHAucG9wKCkscC5sZW5ndGg+MD9oPXBbcC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBBcihLLGd0LEV0LHh0KXtpZihLLnZpc2libGU9PT0hMSlyZXR1cm47aWYoSy5sYXllcnMudGVzdChndC5sYXllcnMpKXtpZihLLmlzR3JvdXApRXQ9Sy5yZW5kZXJPcmRlcjtlbHNlIGlmKEsuaXNMT0QpSy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlKGd0KTtlbHNlIGlmKEsuaXNMaWdodClmLnB1c2hMaWdodChLKSxLLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhLKTtlbHNlIGlmKEsuaXNTcHJpdGUpe2lmKCFLLmZydXN0dW1DdWxsZWR8fFcuaW50ZXJzZWN0c1Nwcml0ZShLKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDt0ci52aXNpYmxlJiZoLnB1c2goSyxVZSx0cixFdCxTdC56LG51bGwpfX1lbHNlIGlmKChLLmlzTWVzaHx8Sy5pc0xpbmV8fEsuaXNQb2ludHMpJiYoSy5pc1NraW5uZWRNZXNoJiZLLnNrZWxldG9uLmZyYW1lIT09ZXQucmVuZGVyLmZyYW1lJiYoSy5za2VsZXRvbi51cGRhdGUoKSxLLnNrZWxldG9uLmZyYW1lPWV0LnJlbmRlci5mcmFtZSksIUsuZnJ1c3R1bUN1bGxlZHx8Vy5pbnRlcnNlY3RzT2JqZWN0KEspKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHRyKSl7bGV0IEtlPVVlLmdyb3Vwcztmb3IobGV0IFhyPTAsX3I9S2UubGVuZ3RoO1hyPF9yO1hyKyspe2xldCBQcj1LZVtYcl0sam49dHJbUHIubWF0ZXJpYWxJbmRleF07am4mJmpuLnZpc2libGUmJmgucHVzaChLLFVlLGpuLEV0LFN0LnosUHIpfX1lbHNlIHRyLnZpc2libGUmJmgucHVzaChLLFVlLHRyLEV0LFN0LnosbnVsbCl9fWxldCBWZT1LLmNoaWxkcmVuO2ZvcihsZXQgVWU9MCx0cj1WZS5sZW5ndGg7VWU8dHI7VWUrKylBcihWZVtVZV0sZ3QsRXQseHQpfWZ1bmN0aW9uIFBhKEssZ3QsRXQseHQpe2xldCBGdD1LLm9wYXF1ZSxWZT1LLnRyYW5zbWlzc2l2ZSxVZT1LLnRyYW5zcGFyZW50O2Yuc2V0dXBMaWdodHNWaWV3KEV0KSxWZS5sZW5ndGg+MCYmaG8oRnQsZ3QsRXQpLHh0JiZYLnZpZXdwb3J0KFAuY29weSh4dCkpLEZ0Lmxlbmd0aD4wJiZJYShGdCxndCxFdCksVmUubGVuZ3RoPjAmJklhKFZlLGd0LEV0KSxVZS5sZW5ndGg+MCYmSWEoVWUsZ3QsRXQpfWZ1bmN0aW9uIGhvKEssZ3QsRXQpe2lmKG90PT09bnVsbCl7bGV0IFVlPWE9PT0hMCYmY3QuaXNXZWJHTDI9PT0hMD9qMzp1cztvdD1uZXcgVWUoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpiZS5jb252ZXJ0KEMxKSE9PW51bGw/QzE6WmQsbWluRmlsdGVyOm94LG1hZ0ZpbHRlcjpMaSx3cmFwUzpKbyx3cmFwVDpKbyx1c2VSZW5kZXJUb1RleHR1cmU6X3QuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0pfWxldCB4dD1nLmdldFJlbmRlclRhcmdldCgpO2cuc2V0UmVuZGVyVGFyZ2V0KG90KSxnLmNsZWFyKCk7bGV0IEZ0PWcudG9uZU1hcHBpbmc7Zy50b25lTWFwcGluZz1LZCxJYShLLGd0LEV0KSxnLnRvbmVNYXBwaW5nPUZ0LHEudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQob3QpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKG90KSxnLnNldFJlbmRlclRhcmdldCh4dCl9ZnVuY3Rpb24gSWEoSyxndCxFdCl7bGV0IHh0PWd0LmlzU2NlbmU9PT0hMD9ndC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBGdD0wLFZlPUsubGVuZ3RoO0Z0PFZlO0Z0Kyspe2xldCBVZT1LW0Z0XSx0cj1VZS5vYmplY3QsS2U9VWUuZ2VvbWV0cnksWHI9eHQ9PT1udWxsP1VlLm1hdGVyaWFsOnh0LF9yPVVlLmdyb3VwO3RyLmxheWVycy50ZXN0KEV0LmxheWVycykmJmx4KHRyLGd0LEV0LEtlLFhyLF9yKX19ZnVuY3Rpb24gbHgoSyxndCxFdCx4dCxGdCxWZSl7Sy5vbkJlZm9yZVJlbmRlcihnLGd0LEV0LHh0LEZ0LFZlKSxLLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKEV0Lm1hdHJpeFdvcmxkSW52ZXJzZSxLLm1hdHJpeFdvcmxkKSxLLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoSy5tb2RlbFZpZXdNYXRyaXgpLEZ0Lm9uQmVmb3JlUmVuZGVyKGcsZ3QsRXQseHQsSyxWZSksRnQudHJhbnNwYXJlbnQ9PT0hMCYmRnQuc2lkZT09PUwxPyhGdC5zaWRlPUlpLEZ0Lm5lZWRzVXBkYXRlPSEwLGcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEZ0LnNpZGU9STEsRnQubmVlZHNVcGRhdGU9ITAsZy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksRnQuc2lkZT1MMSk6Zy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksSy5vbkFmdGVyUmVuZGVyKGcsZ3QsRXQseHQsRnQsVmUpfWZ1bmN0aW9uIGNtKEssZ3QsRXQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KTtsZXQgeHQ9ZHQuZ2V0KEspLEZ0PWYuc3RhdGUubGlnaHRzLFZlPWYuc3RhdGUuc2hhZG93c0FycmF5LFVlPUZ0LnN0YXRlLnZlcnNpb24sdHI9ZWUuZ2V0UGFyYW1ldGVycyhLLEZ0LnN0YXRlLFZlLGd0LEV0KSxLZT1lZS5nZXRQcm9ncmFtQ2FjaGVLZXkodHIpLFhyPXh0LnByb2dyYW1zO3h0LmVudmlyb25tZW50PUsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ndC5lbnZpcm9ubWVudDpudWxsLHh0LmZvZz1ndC5mb2cseHQuZW52TWFwPShLLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldChLLmVudk1hcHx8eHQuZW52aXJvbm1lbnQpLFhyPT09dm9pZCAwJiYoSy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzZSksWHI9bmV3IE1hcCx4dC5wcm9ncmFtcz1Ycik7bGV0IF9yPVhyLmdldChLZSk7aWYoX3IhPT12b2lkIDApe2lmKHh0LmN1cnJlbnRQcm9ncmFtPT09X3ImJnh0LmxpZ2h0c1N0YXRlVmVyc2lvbj09PVVlKXJldHVybiBKMChLLHRyKSxfcn1lbHNlIHRyLnVuaWZvcm1zPWVlLmdldFVuaWZvcm1zKEspLEsub25CdWlsZChFdCx0cixnKSxLLm9uQmVmb3JlQ29tcGlsZSh0cixnKSxfcj1lZS5hY3F1aXJlUHJvZ3JhbSh0cixLZSksWHIuc2V0KEtlLF9yKSx4dC51bmlmb3Jtcz10ci51bmlmb3JtcztsZXQgUHI9eHQudW5pZm9ybXM7KCFLLmlzU2hhZGVyTWF0ZXJpYWwmJiFLLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fEsuY2xpcHBpbmc9PT0hMCkmJihQci5jbGlwcGluZ1BsYW5lcz10dC51bmlmb3JtKSxKMChLLHRyKSx4dC5uZWVkc0xpZ2h0cz1ycChLKSx4dC5saWdodHNTdGF0ZVZlcnNpb249VWUseHQubmVlZHNMaWdodHMmJihQci5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1GdC5zdGF0ZS5hbWJpZW50LFByLmxpZ2h0UHJvYmUudmFsdWU9RnQuc3RhdGUucHJvYmUsUHIuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWwsUHIuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3csUHIuc3BvdExpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5zcG90LFByLnNwb3RMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuc3BvdFNoYWRvdyxQci5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYSxQci5sdGNfMS52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYUxUQzEsUHIubHRjXzIudmFsdWU9RnQuc3RhdGUucmVjdEFyZWFMVEMyLFByLnBvaW50TGlnaHRzLnZhbHVlPUZ0LnN0YXRlLnBvaW50LFByLnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93LFByLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9RnQuc3RhdGUuaGVtaSxQci5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcCxQci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCxQci5zcG90U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnNwb3RTaGFkb3dNYXAsUHIuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5zcG90U2hhZG93TWF0cml4LFByLnBvaW50U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWFwLFByLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgam49X3IuZ2V0VW5pZm9ybXMoKSxucD1CMC5zZXFXaXRoVmFsdWUoam4uc2VxLFByKTtyZXR1cm4geHQuY3VycmVudFByb2dyYW09X3IseHQudW5pZm9ybXNMaXN0PW5wLF9yfWZ1bmN0aW9uIEowKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQub3V0cHV0RW5jb2Rpbmc9Z3Qub3V0cHV0RW5jb2RpbmcsRXQuaW5zdGFuY2luZz1ndC5pbnN0YW5jaW5nLEV0LnNraW5uaW5nPWd0LnNraW5uaW5nLEV0Lm1vcnBoVGFyZ2V0cz1ndC5tb3JwaFRhcmdldHMsRXQubW9ycGhOb3JtYWxzPWd0Lm1vcnBoTm9ybWFscyxFdC5tb3JwaFRhcmdldHNDb3VudD1ndC5tb3JwaFRhcmdldHNDb3VudCxFdC5udW1DbGlwcGluZ1BsYW5lcz1ndC5udW1DbGlwcGluZ1BsYW5lcyxFdC5udW1JbnRlcnNlY3Rpb249Z3QubnVtQ2xpcEludGVyc2VjdGlvbixFdC52ZXJ0ZXhBbHBoYXM9Z3QudmVydGV4QWxwaGFzLEV0LnZlcnRleFRhbmdlbnRzPWd0LnZlcnRleFRhbmdlbnRzLEV0LnRvbmVNYXBwaW5nPWd0LnRvbmVNYXBwaW5nfWZ1bmN0aW9uIGNuKEssZ3QsRXQseHQsRnQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KSxxLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFZlPWd0LmZvZyxVZT14dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2d0LmVudmlyb25tZW50Om51bGwsdHI9Yj09PW51bGw/Zy5vdXRwdXRFbmNvZGluZzpiLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9iLnRleHR1cmUuZW5jb2Rpbmc6UWQsS2U9KHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldCh4dC5lbnZNYXB8fFVlKSxYcj14dC52ZXJ0ZXhDb2xvcnM9PT0hMCYmISFFdC5hdHRyaWJ1dGVzLmNvbG9yJiZFdC5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCxfcj0hIXh0Lm5vcm1hbE1hcCYmISFFdC5hdHRyaWJ1dGVzLnRhbmdlbnQsUHI9ISFFdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sam49ISFFdC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLG5wPUV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9FdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsdW09eHQudG9uZU1hcHBlZD9nLnRvbmVNYXBwaW5nOktkLG1yPWR0LmdldCh4dCksRmw9Zi5zdGF0ZS5saWdodHM7aWYoWj09PSEwJiYocnQ9PT0hMHx8SyE9PUMpKXtsZXQgcXM9Sz09PUMmJnh0LmlkPT09Uzt0dC5zZXRTdGF0ZSh4dCxLLHFzKX1sZXQgWG49ITE7eHQudmVyc2lvbj09PW1yLl9fdmVyc2lvbj8obXIubmVlZHNMaWdodHMmJm1yLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PUZsLnN0YXRlLnZlcnNpb258fG1yLm91dHB1dEVuY29kaW5nIT09dHJ8fEZ0LmlzSW5zdGFuY2VkTWVzaCYmbXIuaW5zdGFuY2luZz09PSExfHwhRnQuaXNJbnN0YW5jZWRNZXNoJiZtci5pbnN0YW5jaW5nPT09ITB8fEZ0LmlzU2tpbm5lZE1lc2gmJm1yLnNraW5uaW5nPT09ITF8fCFGdC5pc1NraW5uZWRNZXNoJiZtci5za2lubmluZz09PSEwfHxtci5lbnZNYXAhPT1LZXx8eHQuZm9nJiZtci5mb2chPT1WZXx8bXIubnVtQ2xpcHBpbmdQbGFuZXMhPT12b2lkIDAmJihtci5udW1DbGlwcGluZ1BsYW5lcyE9PXR0Lm51bVBsYW5lc3x8bXIubnVtSW50ZXJzZWN0aW9uIT09dHQubnVtSW50ZXJzZWN0aW9uKXx8bXIudmVydGV4QWxwaGFzIT09WHJ8fG1yLnZlcnRleFRhbmdlbnRzIT09X3J8fG1yLm1vcnBoVGFyZ2V0cyE9PVByfHxtci5tb3JwaE5vcm1hbHMhPT1qbnx8bXIudG9uZU1hcHBpbmchPT11bXx8Y3QuaXNXZWJHTDI9PT0hMCYmbXIubW9ycGhUYXJnZXRzQ291bnQhPT1ucCkmJihYbj0hMCk6KFhuPSEwLG1yLl9fdmVyc2lvbj14dC52ZXJzaW9uKTtsZXQgQmw9bXIuY3VycmVudFByb2dyYW07WG49PT0hMCYmKEJsPWNtKHh0LGd0LEZ0KSk7bGV0IHV4PSExLEhsPSExLFZsPSExLFlpPUJsLmdldFVuaWZvcm1zKCksaG09bXIudW5pZm9ybXM7aWYoWC51c2VQcm9ncmFtKEJsLnByb2dyYW0pJiYodXg9ITAsSGw9ITAsVmw9ITApLHh0LmlkIT09UyYmKFM9eHQuaWQsSGw9ITApLHV4fHxDIT09Syl7aWYoWWkuc2V0VmFsdWUobHQsInByb2plY3Rpb25NYXRyaXgiLEsucHJvamVjdGlvbk1hdHJpeCksY3QubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmWWkuc2V0VmFsdWUobHQsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKEsuZmFyKzEpL01hdGguTE4yKSksQyE9PUsmJihDPUssSGw9ITAsVmw9ITApLHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHh0LmlzTWVzaFRvb25NYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuZW52TWFwKXtsZXQgcXM9WWkubWFwLmNhbWVyYVBvc2l0aW9uO3FzIT09dm9pZCAwJiZxcy5zZXRWYWx1ZShsdCxTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkpfSh4dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx4dC5pc01lc2hUb29uTWF0ZXJpYWx8fHh0LmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8eHQuaXNNZXNoQmFzaWNNYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuaXNTaGFkZXJNYXRlcmlhbCkmJllpLnNldFZhbHVlKGx0LCJpc09ydGhvZ3JhcGhpYyIsSy5pc09ydGhvZ3JhcGhpY0NhbWVyYT09PSEwKSwoeHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8eHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx4dC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHh0LmlzTWVzaEJhc2ljTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzU2hhZG93TWF0ZXJpYWx8fEZ0LmlzU2tpbm5lZE1lc2gpJiZZaS5zZXRWYWx1ZShsdCwidmlld01hdHJpeCIsSy5tYXRyaXhXb3JsZEludmVyc2UpfWlmKEZ0LmlzU2tpbm5lZE1lc2gpe1lpLnNldE9wdGlvbmFsKGx0LEZ0LCJiaW5kTWF0cml4IiksWWkuc2V0T3B0aW9uYWwobHQsRnQsImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IHFzPUZ0LnNrZWxldG9uO3FzJiYoY3QuZmxvYXRWZXJ0ZXhUZXh0dXJlcz8ocXMuYm9uZVRleHR1cmU9PT1udWxsJiZxcy5jb21wdXRlQm9uZVRleHR1cmUoKSxZaS5zZXRWYWx1ZShsdCwiYm9uZVRleHR1cmUiLHFzLmJvbmVUZXh0dXJlLHEpLFlpLnNldFZhbHVlKGx0LCJib25lVGV4dHVyZVNpemUiLHFzLmJvbmVUZXh0dXJlU2l6ZSkpOllpLnNldE9wdGlvbmFsKGx0LHFzLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFFdCYmKEV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8RXQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCE9PXZvaWQgMCkmJiR0LnVwZGF0ZShGdCxFdCx4dCxCbCksKEhsfHxtci5yZWNlaXZlU2hhZG93IT09RnQucmVjZWl2ZVNoYWRvdykmJihtci5yZWNlaXZlU2hhZG93PUZ0LnJlY2VpdmVTaGFkb3csWWkuc2V0VmFsdWUobHQsInJlY2VpdmVTaGFkb3ciLEZ0LnJlY2VpdmVTaGFkb3cpKSxIbCYmKFlpLnNldFZhbHVlKGx0LCJ0b25lTWFwcGluZ0V4cG9zdXJlIixnLnRvbmVNYXBwaW5nRXhwb3N1cmUpLG1yLm5lZWRzTGlnaHRzJiZjeChobSxWbCksVmUmJnh0LmZvZyYmTGUucmVmcmVzaEZvZ1VuaWZvcm1zKGhtLFZlKSxMZS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhobSx4dCxJLEIsb3QpLEIwLnVwbG9hZChsdCxtci51bmlmb3Jtc0xpc3QsaG0scSkpLHh0LmlzU2hhZGVyTWF0ZXJpYWwmJnh0LnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoQjAudXBsb2FkKGx0LG1yLnVuaWZvcm1zTGlzdCxobSxxKSx4dC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpLHh0LmlzU3ByaXRlTWF0ZXJpYWwmJllpLnNldFZhbHVlKGx0LCJjZW50ZXIiLEZ0LmNlbnRlciksWWkuc2V0VmFsdWUobHQsIm1vZGVsVmlld01hdHJpeCIsRnQubW9kZWxWaWV3TWF0cml4KSxZaS5zZXRWYWx1ZShsdCwibm9ybWFsTWF0cml4IixGdC5ub3JtYWxNYXRyaXgpLFlpLnNldFZhbHVlKGx0LCJtb2RlbE1hdHJpeCIsRnQubWF0cml4V29ybGQpLEJsfWZ1bmN0aW9uIGN4KEssZ3Qpe0suYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9Z3QsSy5saWdodFByb2JlLm5lZWRzVXBkYXRlPWd0LEsuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9Z3QsSy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1ndH1mdW5jdGlvbiBycChLKXtyZXR1cm4gSy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEsuaXNNZXNoVG9vbk1hdGVyaWFsfHxLLmlzTWVzaFBob25nTWF0ZXJpYWx8fEsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Sy5pc1NoYWRvd01hdGVyaWFsfHxLLmlzU2hhZGVyTWF0ZXJpYWwmJksubGlnaHRzPT09ITB9dGhpcy5nZXRBY3RpdmVDdWJlRmFjZT1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHh9LHRoaXMuZ2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGJ9LHRoaXMuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXM9ZnVuY3Rpb24oSyxndCxFdCl7ZHQuZ2V0KEsudGV4dHVyZSkuX193ZWJnbFRleHR1cmU9Z3QsZHQuZ2V0KEsuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1FdDtsZXQgeHQ9ZHQuZ2V0KEspO3h0Ll9faGFzRXh0ZXJuYWxUZXh0dXJlcz0hMCx4dC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJih4dC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPUV0PT09dm9pZCAwLHh0Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEsudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxLLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxLLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQuX193ZWJnbEZyYW1lYnVmZmVyPWd0LEV0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyPWd0PT09dm9pZCAwfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihLLGd0PTAsRXQ9MCl7Yj1LLHk9Z3QseD1FdDtsZXQgeHQ9ITA7aWYoSyl7bGV0IEtlPWR0LmdldChLKTtLZS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciE9PXZvaWQgMD8oWC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCkseHQ9ITEpOktlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj09PXZvaWQgMD9xLnNldHVwUmVuZGVyVGFyZ2V0KEspOktlLl9faGFzRXh0ZXJuYWxUZXh0dXJlcyYmcS5yZWJpbmRUZXh0dXJlcyhLLGR0LmdldChLLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGR0LmdldChLLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBGdD1udWxsLFZlPSExLFVlPSExO2lmKEspe2xldCBLZT1LLnRleHR1cmU7KEtlLmlzRGF0YVRleHR1cmUzRHx8S2UuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoVWU9ITApO2xldCBYcj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO0suaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KEZ0PVhyW2d0XSxWZT0hMCk6Sy51c2VSZW5kZXJidWZmZXI/RnQ9ZHQuZ2V0KEspLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpGdD1YcixQLmNvcHkoSy52aWV3cG9ydCksay5jb3B5KEsuc2Npc3NvciksTz1LLnNjaXNzb3JUZXN0fWVsc2UgUC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksTz1VO2lmKFguYmluZEZyYW1lYnVmZmVyKDM2MTYwLEZ0KSYmY3QuZHJhd0J1ZmZlcnMmJnh0JiZYLmRyYXdCdWZmZXJzKEssRnQpLFgudmlld3BvcnQoUCksWC5zY2lzc29yKGspLFguc2V0U2Npc3NvclRlc3QoTyksVmUpe2xldCBLZT1kdC5nZXQoSy50ZXh0dXJlKTtsdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStndCxLZS5fX3dlYmdsVGV4dHVyZSxFdCl9ZWxzZSBpZihVZSl7bGV0IEtlPWR0LmdldChLLnRleHR1cmUpLFhyPWd0fHwwO2x0LmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LEtlLl9fd2ViZ2xUZXh0dXJlLEV0fHwwLFhyKX1TPS0xfSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdCxWZSxVZSl7aWYoIShLJiZLLmlzV2ViR0xSZW5kZXJUYXJnZXQpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7cmV0dXJufWxldCB0cj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO2lmKEsuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJlVlIT09dm9pZCAwJiYodHI9dHJbVWVdKSx0cil7WC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHIpO3RyeXtsZXQgS2U9Sy50ZXh0dXJlLFhyPUtlLmZvcm1hdCxfcj1LZS50eXBlO2lmKFhyIT09UW8mJmJlLmNvbnZlcnQoWHIpIT09bHQuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBQcj1fcj09PUMxJiYoX3QuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8Y3QuaXNXZWJHTDImJl90LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZihfciE9PVpkJiZiZS5jb252ZXJ0KF9yKSE9PWx0LmdldFBhcmFtZXRlcigzNTczOCkmJiEoX3I9PT1qZCYmKGN0LmlzV2ViR0wyfHxfdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fF90LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpKSYmIVByKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIik7cmV0dXJufWx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApPT09MzYwNTM/Z3Q+PTAmJmd0PD1LLndpZHRoLXh0JiZFdD49MCYmRXQ8PUsuaGVpZ2h0LUZ0JiZsdC5yZWFkUGl4ZWxzKGd0LEV0LHh0LEZ0LGJlLmNvbnZlcnQoWHIpLGJlLmNvbnZlcnQoX3IpLFZlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtsZXQgS2U9YiE9PW51bGw/ZHQuZ2V0KGIpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjpudWxsO1guYmluZEZyYW1lYnVmZmVyKDM2MTYwLEtlKX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbihLLGd0LEV0PTApe2lmKGd0LmlzRnJhbWVidWZmZXJUZXh0dXJlIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuIik7cmV0dXJufWxldCB4dD1NYXRoLnBvdygyLC1FdCksRnQ9TWF0aC5mbG9vcihndC5pbWFnZS53aWR0aCp4dCksVmU9TWF0aC5mbG9vcihndC5pbWFnZS5oZWlnaHQqeHQpO3Euc2V0VGV4dHVyZTJEKGd0LDApLGx0LmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMsRXQsMCwwLEsueCxLLnksRnQsVmUpLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKEssZ3QsRXQseHQ9MCl7bGV0IEZ0PWd0LmltYWdlLndpZHRoLFZlPWd0LmltYWdlLmhlaWdodCxVZT1iZS5jb252ZXJ0KEV0LmZvcm1hdCksdHI9YmUuY29udmVydChFdC50eXBlKTtxLnNldFRleHR1cmUyRChFdCwwKSxsdC5waXhlbFN0b3JlaSgzNzQ0MCxFdC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEsRXQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyxFdC51bnBhY2tBbGlnbm1lbnQpLGd0LmlzRGF0YVRleHR1cmU/bHQudGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksRnQsVmUsVWUsdHIsZ3QuaW1hZ2UuZGF0YSk6Z3QuaXNDb21wcmVzc2VkVGV4dHVyZT9sdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksZ3QubWlwbWFwc1swXS53aWR0aCxndC5taXBtYXBzWzBdLmhlaWdodCxVZSxndC5taXBtYXBzWzBdLmRhdGEpOmx0LnRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LFVlLHRyLGd0LmltYWdlKSx4dD09PTAmJkV0LmdlbmVyYXRlTWlwbWFwcyYmbHQuZ2VuZXJhdGVNaXBtYXAoMzU1MyksWC51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0PTApe2lmKGcuaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBWZT1LLm1heC54LUsubWluLngrMSxVZT1LLm1heC55LUsubWluLnkrMSx0cj1LLm1heC56LUsubWluLnorMSxLZT1iZS5jb252ZXJ0KHh0LmZvcm1hdCksWHI9YmUuY29udmVydCh4dC50eXBlKSxfcjtpZih4dC5pc0RhdGFUZXh0dXJlM0QpcS5zZXRUZXh0dXJlM0QoeHQsMCksX3I9MzI4Nzk7ZWxzZSBpZih4dC5pc0RhdGFUZXh0dXJlMkRBcnJheSlxLnNldFRleHR1cmUyREFycmF5KHh0LDApLF9yPTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1sdC5waXhlbFN0b3JlaSgzNzQ0MCx4dC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEseHQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyx4dC51bnBhY2tBbGlnbm1lbnQpO2xldCBQcj1sdC5nZXRQYXJhbWV0ZXIoMzMxNCksam49bHQuZ2V0UGFyYW1ldGVyKDMyODc4KSxucD1sdC5nZXRQYXJhbWV0ZXIoMzMxNiksdW09bHQuZ2V0UGFyYW1ldGVyKDMzMTUpLG1yPWx0LmdldFBhcmFtZXRlcigzMjg3NyksRmw9RXQuaXNDb21wcmVzc2VkVGV4dHVyZT9FdC5taXBtYXBzWzBdOkV0LmltYWdlO2x0LnBpeGVsU3RvcmVpKDMzMTQsRmwud2lkdGgpLGx0LnBpeGVsU3RvcmVpKDMyODc4LEZsLmhlaWdodCksbHQucGl4ZWxTdG9yZWkoMzMxNixLLm1pbi54KSxsdC5waXhlbFN0b3JlaSgzMzE1LEsubWluLnkpLGx0LnBpeGVsU3RvcmVpKDMyODc3LEsubWluLnopLEV0LmlzRGF0YVRleHR1cmV8fEV0LmlzRGF0YVRleHR1cmUzRD9sdC50ZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLFhyLEZsLmRhdGEpOkV0LmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksbHQuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsRmwuZGF0YSkpOmx0LnRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsWHIsRmwpLGx0LnBpeGVsU3RvcmVpKDMzMTQsUHIpLGx0LnBpeGVsU3RvcmVpKDMyODc4LGpuKSxsdC5waXhlbFN0b3JlaSgzMzE2LG5wKSxsdC5waXhlbFN0b3JlaSgzMzE1LHVtKSxsdC5waXhlbFN0b3JlaSgzMjg3NyxtciksRnQ9PT0wJiZ4dC5nZW5lcmF0ZU1pcG1hcHMmJmx0LmdlbmVyYXRlTWlwbWFwKF9yKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihLKXtxLnNldFRleHR1cmUyRChLLDApLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXt5PTAseD0wLGI9bnVsbCxYLnJlc2V0KCksbnQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfXJuLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIGdVPWNsYXNzIGV4dGVuZHMgcm57fTtnVS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgTzE9Y2xhc3N7Y29uc3RydWN0b3IodCxyPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgbmUodCksdGhpcy5kZW5zaXR5PXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IE8xKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtPMS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciB6MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9MSxuPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IG5lKHQpLHRoaXMubmVhcj1yLHRoaXMuZmFyPW59Y2xvbmUoKXtyZXR1cm4gbmV3IHoxKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTt6MS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIHEwPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoci5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxyfX07cTAucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIGVtPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLnVzYWdlPVczLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9TmwoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxyLG4pe3QqPXRoaXMuc3RyaWRlLG4qPXIuc3RyaWRlO2ZvcihsZXQgaT0wLG89dGhpcy5zdHJpZGU7aTxvO2krKyl0aGlzLmFycmF5W3QraV09ci5hcnJheVtuK2ldO3JldHVybiB0aGlzfXNldCh0LHI9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsciksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IHI9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHIsdGhpcy5zdHJpZGUpO3JldHVybiBuLnNldFVzYWdlKHRoaXMudXNhZ2UpLG59b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07ZW0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIEFpPW5ldyBqLHRwPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGk9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5vZmZzZXQ9bix0aGlzLm5vcm1hbGl6ZWQ9aT09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5kYXRhLmNvdW50O3I8bjtyKyspQWkueD10aGlzLmdldFgociksQWkueT10aGlzLmdldFkociksQWkuej10aGlzLmdldFoociksQWkuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUFpLng9dGhpcy5nZXRYKHIpLEFpLnk9dGhpcy5nZXRZKHIpLEFpLno9dGhpcy5nZXRaKHIpLEFpLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylBaS54PXRoaXMuZ2V0WChyKSxBaS55PXRoaXMuZ2V0WShyKSxBaS56PXRoaXMuZ2V0WihyKSxBaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVoocixBaS54LEFpLnksQWkueik7cmV0dXJuIHRoaXN9c2V0WCh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1yLHRoaXN9c2V0WSh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPXIsdGhpc31zZXRaKHQscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09cix0aGlzfXNldFcodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1yLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxyLG4pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPXIsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1pLHRoaXN9c2V0WFlaVyh0LHIsbixpLG8pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJuIG5ldyBKZShuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihyKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IHRwKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6cixub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07dHAucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGlNPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07aU0ucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIE4zLERQPW5ldyBqLEQzPW5ldyBqLE8zPW5ldyBqLHozPW5ldyBMdCxPUD1uZXcgTHQsdHBlPW5ldyBNZSxMVj1uZXcgaix6UD1uZXcgaixrVj1uZXcgaixadWU9bmV3IEx0LGR1dD1uZXcgTHQsSnVlPW5ldyBMdCxvTT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLE4zPT09dm9pZCAwKXtOMz1uZXcgUGU7bGV0IHI9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksbj1uZXcgZW0ociw1KTtOMy5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxOMy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgdHAobiwzLDAsITEpKSxOMy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgdHAobiwyLDMsITEpKX10aGlzLmdlb21ldHJ5PU4zLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBpTSx0aGlzLmNlbnRlcj1uZXcgTHQoLjUsLjUpfXJheWNhc3QodCxyKXt0LmNhbWVyYT09PW51bGwmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxEMy5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksdHBlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLE8zLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmdGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb249PT0hMSYmRDMubXVsdGlwbHlTY2FsYXIoLU8zLnopO2xldCBuPXRoaXMubWF0ZXJpYWwucm90YXRpb24saSxvO24hPT0wJiYobz1NYXRoLmNvcyhuKSxpPU1hdGguc2luKG4pKTtsZXQgYT10aGlzLmNlbnRlcjtSVihMVi5zZXQoLS41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoelAuc2V0KC41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoa1Yuc2V0KC41LC41LDApLE8zLGEsRDMsaSxvKSxadWUuc2V0KDAsMCksZHV0LnNldCgxLDApLEp1ZS5zZXQoMSwxKTtsZXQgcz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVix6UCxrViwhMSxEUCk7aWYocz09PW51bGwmJihSVih6UC5zZXQoLS41LC41LDApLE8zLGEsRDMsaSxvKSxkdXQuc2V0KDAsMSkscz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVixrVix6UCwhMSxEUCkscz09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhEUCk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fHIucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpEUC5jbG9uZSgpLHV2Om9pLmdldFVWKERQLExWLHpQLGtWLFp1ZSxkdXQsSnVlLG5ldyBMdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0LmNlbnRlciE9PXZvaWQgMCYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fTtvTS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7ZnVuY3Rpb24gUlYoZSx0LHIsbixpLG8pe3ozLnN1YlZlY3RvcnMoZSxyKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KG4pLGkhPT12b2lkIDA/KE9QLng9byp6My54LWkqejMueSxPUC55PWkqejMueCtvKnozLnkpOk9QLmNvcHkoejMpLGUuY29weSh0KSxlLngrPU9QLngsZS55Kz1PUC55LGUuYXBwbHlNYXRyaXg0KHRwZSl9dmFyIE5WPW5ldyBqLFF1ZT1uZXcgaixfVT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9jdXJyZW50TGV2ZWw9MCx0aGlzLnR5cGU9IkxPRCIsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfSxpc0xPRDp7dmFsdWU6ITB9fSksdGhpcy5hdXRvVXBkYXRlPSEwfWNvcHkodCl7c3VwZXIuY29weSh0LCExKTtsZXQgcj10LmxldmVscztmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspe2xldCBvPXJbbl07dGhpcy5hZGRMZXZlbChvLm9iamVjdC5jbG9uZSgpLG8uZGlzdGFuY2UpfXJldHVybiB0aGlzLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlLHRoaXN9YWRkTGV2ZWwodCxyPTApe3I9TWF0aC5hYnMocik7bGV0IG49dGhpcy5sZXZlbHMsaTtmb3IoaT0wO2k8bi5sZW5ndGgmJiEocjxuW2ldLmRpc3RhbmNlKTtpKyspO3JldHVybiBuLnNwbGljZShpLDAse2Rpc3RhbmNlOnIsb2JqZWN0OnR9KSx0aGlzLmFkZCh0KSx0aGlzfWdldEN1cnJlbnRMZXZlbCgpe3JldHVybiB0aGlzLl9jdXJyZW50TGV2ZWx9Z2V0T2JqZWN0Rm9yRGlzdGFuY2UodCl7bGV0IHI9dGhpcy5sZXZlbHM7aWYoci5sZW5ndGg+MCl7bGV0IG4saTtmb3Iobj0xLGk9ci5sZW5ndGg7bjxpJiYhKHQ8cltuXS5kaXN0YW5jZSk7bisrKTtyZXR1cm4gcltuLTFdLm9iamVjdH1yZXR1cm4gbnVsbH1yYXljYXN0KHQscil7aWYodGhpcy5sZXZlbHMubGVuZ3RoPjApe05WLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgaT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhOVik7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShpKS5yYXljYXN0KHQscil9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLmxldmVscztpZihyLmxlbmd0aD4xKXtOVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksUXVlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgbj1OVi5kaXN0YW5jZVRvKFF1ZSkvdC56b29tO3JbMF0ub2JqZWN0LnZpc2libGU9ITA7bGV0IGksbztmb3IoaT0xLG89ci5sZW5ndGg7aTxvJiZuPj1yW2ldLmRpc3RhbmNlO2krKylyW2ktMV0ub2JqZWN0LnZpc2libGU9ITEscltpXS5vYmplY3QudmlzaWJsZT0hMDtmb3IodGhpcy5fY3VycmVudExldmVsPWktMTtpPG87aSsrKXJbaV0ub2JqZWN0LnZpc2libGU9ITF9fXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7dGhpcy5hdXRvVXBkYXRlPT09ITEmJihyLm9iamVjdC5hdXRvVXBkYXRlPSExKSxyLm9iamVjdC5sZXZlbHM9W107bGV0IG49dGhpcy5sZXZlbHM7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKXtsZXQgYT1uW2ldO3Iub2JqZWN0LmxldmVscy5wdXNoKHtvYmplY3Q6YS5vYmplY3QudXVpZCxkaXN0YW5jZTphLmRpc3RhbmNlfSl9cmV0dXJuIHJ9fSx0aGU9bmV3IGosZWhlPW5ldyBlbixyaGU9bmV3IGVuLERncj1uZXcgaixuaGU9bmV3IE1lLGFNPWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IE1lLHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IE1lfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxyKXt0aGlzLnNrZWxldG9uPXQscj09PXZvaWQgMCYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxyPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KHIpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShyKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgZW4scj10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IG49MCxpPXIuY291bnQ7bjxpO24rKyl7dC54PXIuZ2V0WChuKSx0Lnk9ci5nZXRZKG4pLHQuej1yLmdldFoobiksdC53PXIuZ2V0VyhuKTtsZXQgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLHIuc2V0WFlaVyhuLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMuYmluZE1vZGU9PT0iYXR0YWNoZWQiP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTp0aGlzLmJpbmRNb2RlPT09ImRldGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LHIpe2xldCBuPXRoaXMuc2tlbGV0b24saT10aGlzLmdlb21ldHJ5O2VoZS5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luSW5kZXgsdCkscmhlLmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsdCksdGhlLmNvcHkocikuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksci5zZXQoMCwwLDApO2ZvcihsZXQgbz0wO288NDtvKyspe2xldCBhPXJoZS5nZXRDb21wb25lbnQobyk7aWYoYSE9PTApe2xldCBzPWVoZS5nZXRDb21wb25lbnQobyk7bmhlLm11bHRpcGx5TWF0cmljZXMobi5ib25lc1tzXS5tYXRyaXhXb3JsZCxuLmJvbmVJbnZlcnNlc1tzXSksci5hZGRTY2FsZWRWZWN0b3IoRGdyLmNvcHkodGhlKS5hcHBseU1hdHJpeDQobmhlKSxhKX19cmV0dXJuIHIuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07YU0ucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITA7dmFyIHNNPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fTtzTS5wcm90b3R5cGUuaXNCb25lPSEwO3ZhciBKZD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQ9bnVsbCxyPTEsbj0xLGksbyxhLHMsbCxjPUxpLHU9TGksaCxmKXtzdXBlcihudWxsLGEscyxsLGMsdSxpLG8saCxmKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bn0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O0pkLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBpaGU9bmV3IE1lLE9ncj1uZXcgTWUsbE09Y2xhc3N7Y29uc3RydWN0b3IodD1bXSxyPVtdKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLmJvbmVzPXQuc2xpY2UoMCksdGhpcy5ib25lSW52ZXJzZXM9cix0aGlzLmJvbmVNYXRyaWNlcz1udWxsLHRoaXMuYm9uZVRleHR1cmU9bnVsbCx0aGlzLmJvbmVUZXh0dXJlU2l6ZT0wLHRoaXMuZnJhbWU9LTEsdGhpcy5pbml0KCl9aW5pdCgpe2xldCB0PXRoaXMuYm9uZXMscj10aGlzLmJvbmVJbnZlcnNlcztpZih0aGlzLmJvbmVNYXRyaWNlcz1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKjE2KSxyLmxlbmd0aD09PTApdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodC5sZW5ndGghPT1yLmxlbmd0aCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTnVtYmVyIG9mIGludmVyc2UgYm9uZSBtYXRyaWNlcyBkb2VzIG5vdCBtYXRjaCBhbW91bnQgb2YgYm9uZXMuIiksdGhpcy5ib25lSW52ZXJzZXM9W107Zm9yKGxldCBuPTAsaT10aGlzLmJvbmVzLmxlbmd0aDtuPGk7bisrKXRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKX19Y2FsY3VsYXRlSW52ZXJzZXMoKXt0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGg9MDtmb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPW5ldyBNZTt0aGlzLmJvbmVzW3RdJiZuLmNvcHkodGhpcy5ib25lc1t0XS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdGhpcy5ib25lSW52ZXJzZXMucHVzaChuKX19cG9zZSgpe2ZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiZuLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5ib25lSW52ZXJzZXNbdF0pLmludmVydCgpfWZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiYobi5wYXJlbnQmJm4ucGFyZW50LmlzQm9uZT8obi5tYXRyaXguY29weShuLnBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbi5tYXRyaXgubXVsdGlwbHkobi5tYXRyaXhXb3JsZCkpOm4ubWF0cml4LmNvcHkobi5tYXRyaXhXb3JsZCksbi5tYXRyaXguZGVjb21wb3NlKG4ucG9zaXRpb24sbi5xdWF0ZXJuaW9uLG4uc2NhbGUpKX19dXBkYXRlKCl7bGV0IHQ9dGhpcy5ib25lcyxyPXRoaXMuYm9uZUludmVyc2VzLG49dGhpcy5ib25lTWF0cmljZXMsaT10aGlzLmJvbmVUZXh0dXJlO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXT90W29dLm1hdHJpeFdvcmxkOk9ncjtpaGUubXVsdGlwbHlNYXRyaWNlcyhzLHJbb10pLGloZS50b0FycmF5KG4sbyoxNil9aSE9PW51bGwmJihpLm5lZWRzVXBkYXRlPSEwKX1jbG9uZSgpe3JldHVybiBuZXcgbE0odGhpcy5ib25lcyx0aGlzLmJvbmVJbnZlcnNlcyl9Y29tcHV0ZUJvbmVUZXh0dXJlKCl7bGV0IHQ9TWF0aC5zcXJ0KHRoaXMuYm9uZXMubGVuZ3RoKjQpO3Q9emZlKHQpLHQ9TWF0aC5tYXgodCw0KTtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KHQqdCo0KTtyLnNldCh0aGlzLmJvbmVNYXRyaWNlcyk7bGV0IG49bmV3IEpkKHIsdCx0LFFvLGpkKTtyZXR1cm4gbi5uZWVkc1VwZGF0ZT0hMCx0aGlzLmJvbmVNYXRyaWNlcz1yLHRoaXMuYm9uZVRleHR1cmU9bix0aGlzLmJvbmVUZXh0dXJlU2l6ZT10LHRoaXN9Z2V0Qm9uZUJ5TmFtZSh0KXtmb3IobGV0IHI9MCxuPXRoaXMuYm9uZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMuYm9uZXNbcl07aWYoaS5uYW1lPT09dClyZXR1cm4gaX19ZGlzcG9zZSgpe3RoaXMuYm9uZVRleHR1cmUhPT1udWxsJiYodGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCksdGhpcy5ib25lVGV4dHVyZT1udWxsKX1mcm9tSlNPTih0LHIpe3RoaXMudXVpZD10LnV1aWQ7Zm9yKGxldCBuPTAsaT10LmJvbmVzLmxlbmd0aDtuPGk7bisrKXtsZXQgbz10LmJvbmVzW25dLGE9cltvXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6IixvKSxhPW5ldyBzTSksdGhpcy5ib25lcy5wdXNoKGEpLHRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKCkuZnJvbUFycmF5KHQuYm9uZUludmVyc2VzW25dKSl9cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJTa2VsZXRvbiIsZ2VuZXJhdG9yOiJTa2VsZXRvbi50b0pTT04ifSxib25lczpbXSxib25lSW52ZXJzZXM6W119O3QudXVpZD10aGlzLnV1aWQ7bGV0IHI9dGhpcy5ib25lcyxuPXRoaXMuYm9uZUludmVyc2VzO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKyl7bGV0IGE9cltpXTt0LmJvbmVzLnB1c2goYS51dWlkKTtsZXQgcz1uW2ldO3QuYm9uZUludmVyc2VzLnB1c2gocy50b0FycmF5KCkpfXJldHVybiB0fX0scm09Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbixpPTEpe3R5cGVvZiBuPT0ibnVtYmVyIiYmKGk9bixuPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LHIsbiksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cm0ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBvaGU9bmV3IE1lLGFoZT1uZXcgTWUsRFY9W10sRlA9bmV3IHRpLGk2PWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsciksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgcm0obmV3IEZsb2F0MzJBcnJheShuKjE2KSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1uLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSx0Lmluc3RhbmNlQ29sb3IhPT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQscil7ci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9Z2V0TWF0cml4QXQodCxyKXtyLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXJheWNhc3QodCxyKXtsZXQgbj10aGlzLm1hdHJpeFdvcmxkLGk9dGhpcy5jb3VudDtpZihGUC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LEZQLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsRlAubWF0ZXJpYWwhPT12b2lkIDApZm9yKGxldCBvPTA7bzxpO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLG9oZSksYWhlLm11bHRpcGx5TWF0cmljZXMobixvaGUpLEZQLm1hdHJpeFdvcmxkPWFoZSxGUC5yYXljYXN0KHQsRFYpO2ZvcihsZXQgYT0wLHM9RFYubGVuZ3RoO2E8czthKyspe2xldCBsPURWW2FdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsci5wdXNoKGwpfURWLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQscil7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcm0obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxyLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxyKXtyLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2k2LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIEdpPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O0dpLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBzaGU9bmV3IGosbGhlPW5ldyBqLGNoZT1uZXcgTWUsbXV0PW5ldyBKZixPVj1uZXcgWmYsY2g9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBHaSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKHQuaW5kZXg9PT1udWxsKXtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bMF07Zm9yKGxldCBpPTEsbz1yLmNvdW50O2k8bztpKyspc2hlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixpLTEpLGxoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSksbltpXT1uW2ktMV0sbltpXSs9c2hlLmRpc3RhbmNlVG8obGhlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgeGUobiwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQscil7bGV0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLE9WLmNvcHkobi5ib3VuZGluZ1NwaGVyZSksT1YuYXBwbHlNYXRyaXg0KGkpLE9WLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKE9WKT09PSExKXJldHVybjtjaGUuY29weShpKS5pbnZlcnQoKSxtdXQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KGNoZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcyxjPW5ldyBqLHU9bmV3IGosaD1uZXcgaixmPW5ldyBqLHA9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZD1uLmluZGV4LF89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGQhPT1udWxsKXtsZXQgeT1NYXRoLm1heCgwLGEuc3RhcnQpLHg9TWF0aC5taW4oZC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgYj15LFM9eC0xO2I8UztiKz1wKXtsZXQgQz1kLmdldFgoYiksUD1kLmdldFgoYisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxDKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxQKSxtdXQuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBPPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO088dC5uZWFyfHxPPnQuZmFyfHxyLnB1c2goe2Rpc3RhbmNlOk8scG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCB5PU1hdGgubWF4KDAsYS5zdGFydCkseD1NYXRoLm1pbihfLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBiPXksUz14LTE7YjxTO2IrPXApe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIrMSksbXV0LmRpc3RhbmNlU3FUb1NlZ21lbnQoYyx1LGYsaCk+bCljb250aW51ZTtmLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgUD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmKTtQPHQubmVhcnx8UD50LmZhcnx8ci5wdXNoKHtkaXN0YW5jZTpQLHBvaW50OmguY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6YixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19fWVsc2Ugbi5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2NoLnByb3RvdHlwZS5pc0xpbmU9ITA7dmFyIHVoZT1uZXcgaixoaGU9bmV3IGosQWE9Y2xhc3MgZXh0ZW5kcyBjaHtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsciksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCByPXQuYXR0cmlidXRlcy5wb3NpdGlvbixuPVtdO2ZvcihsZXQgaT0wLG89ci5jb3VudDtpPG87aSs9Mil1aGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkpLGhoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSsxKSxuW2ldPWk9PT0wPzA6bltpLTFdLG5baSsxXT1uW2ldK3VoZS5kaXN0YW5jZVRvKGhoZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IHhlKG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX07QWEucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzPSEwO3ZhciBvNj1jbGFzcyBleHRlbmRzIGNoe2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19O282LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBubT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtubS5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgZmhlPW5ldyBNZSxyaHQ9bmV3IEpmLHpWPW5ldyBaZixGVj1uZXcgaixpbT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IFBlLHI9bmV3IG5tKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LHIpe2xldCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHpWLmNvcHkobi5ib3VuZGluZ1NwaGVyZSkselYuYXBwbHlNYXRyaXg0KGkpLHpWLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKHpWKT09PSExKXJldHVybjtmaGUuY29weShpKS5pbnZlcnQoKSxyaHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KGZoZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcztpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPW4uaW5kZXgsaD1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsYS5zdGFydCkscD1NYXRoLm1pbihjLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBkPWYsZz1wO2Q8ZztkKyspe2xldCBfPWMuZ2V0WChkKTtGVi5mcm9tQnVmZmVyQXR0cmlidXRlKGgsXykscGhlKEZWLF8sbCxpLHQscix0aGlzKX19ZWxzZXtsZXQgZj1NYXRoLm1heCgwLGEuc3RhcnQpLHA9TWF0aC5taW4oaC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgZD1mLGc9cDtkPGc7ZCsrKUZWLmZyb21CdWZmZXJBdHRyaWJ1dGUoaCxkKSxwaGUoRlYsZCxsLGksdCxyLHRoaXMpfX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2ltLnByb3RvdHlwZS5pc1BvaW50cz0hMDtmdW5jdGlvbiBwaGUoZSx0LHIsbixpLG8sYSl7bGV0IHM9cmh0LmRpc3RhbmNlU3FUb1BvaW50KGUpO2lmKHM8cil7bGV0IGw9bmV3IGo7cmh0LmNsb3Nlc3RQb2ludFRvUG9pbnQoZSxsKSxsLmFwcGx5TWF0cml4NChuKTtsZXQgYz1pLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPGkubmVhcnx8Yz5pLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KHMpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OmF9KX19dmFyIHlVPWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMpe3N1cGVyKHQscixuLGksbyxhLHMsbCxjKSx0aGlzLm1pbkZpbHRlcj1hIT09dm9pZCAwP2E6aWksdGhpcy5tYWdGaWx0ZXI9byE9PXZvaWQgMD9vOmlpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7ZnVuY3Rpb24gaCgpe3UubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGgpfSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09PSExJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19O3lVLnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMDt2YXIgdlU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzLmZvcm1hdD1uLHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt2VS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITA7dmFyIGE2PWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMsdSxoLGYpe3N1cGVyKG51bGwsYSxzLGwsYyx1LGksbyxoLGYpLHRoaXMuaW1hZ2U9e3dpZHRoOnIsaGVpZ2h0Om59LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTthNi5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMDt2YXIgeFU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyl7c3VwZXIodCxyLG4saSxvLGEscyxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt4VS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciBGMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTgsbj0wLGk9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6cix0aGV0YVN0YXJ0Om4sdGhldGFMZW5ndGg6aX0scj1NYXRoLm1heCgzLHIpO2xldCBvPVtdLGE9W10scz1bXSxsPVtdLGM9bmV3IGosdT1uZXcgTHQ7YS5wdXNoKDAsMCwwKSxzLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PXI7aCsrLGYrPTMpe2xldCBwPW4raC9yKmk7Yy54PXQqTWF0aC5jb3MocCksYy55PXQqTWF0aC5zaW4ocCksYS5wdXNoKGMueCxjLnksYy56KSxzLnB1c2goMCwwLDEpLHUueD0oYVtmXS90KzEpLzIsdS55PShhW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1yO2grKylvLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgRjEodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxvbT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9OCxvPTEsYT0hMSxzPTAsbD1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJDeWxpbmRlckdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDp0LHJhZGl1c0JvdHRvbTpyLGhlaWdodDpuLHJhZGlhbFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6byxvcGVuRW5kZWQ6YSx0aGV0YVN0YXJ0OnMsdGhldGFMZW5ndGg6bH07bGV0IGM9dGhpcztpPU1hdGguZmxvb3IoaSksbz1NYXRoLmZsb29yKG8pO2xldCB1PVtdLGg9W10sZj1bXSxwPVtdLGQ9MCxnPVtdLF89bi8yLHk9MDt4KCksYT09PSExJiYodD4wJiZiKCEwKSxyPjAmJmIoITEpKSx0aGlzLnNldEluZGV4KHUpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShwLDIpKTtmdW5jdGlvbiB4KCl7bGV0IFM9bmV3IGosQz1uZXcgaixQPTAsaz0oci10KS9uO2ZvcihsZXQgTz0wO088PW87TysrKXtsZXQgRD1bXSxCPU8vbyxJPUIqKHItdCkrdDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IFI9TC9pLEY9UipsK3Msej1NYXRoLnNpbihGKSxVPU1hdGguY29zKEYpO0MueD1JKnosQy55PS1CKm4rXyxDLno9SSpVLGgucHVzaChDLngsQy55LEMueiksUy5zZXQoeixrLFUpLm5vcm1hbGl6ZSgpLGYucHVzaChTLngsUy55LFMueikscC5wdXNoKFIsMS1CKSxELnB1c2goZCsrKX1nLnB1c2goRCl9Zm9yKGxldCBPPTA7TzxpO08rKylmb3IobGV0IEQ9MDtEPG87RCsrKXtsZXQgQj1nW0RdW09dLEk9Z1tEKzFdW09dLEw9Z1tEKzFdW08rMV0sUj1nW0RdW08rMV07dS5wdXNoKEIsSSxSKSx1LnB1c2goSSxMLFIpLFArPTZ9Yy5hZGRHcm91cCh5LFAsMCkseSs9UH1mdW5jdGlvbiBiKFMpe2xldCBDPWQsUD1uZXcgTHQsaz1uZXcgaixPPTAsRD1TPT09ITA/dDpyLEI9Uz09PSEwPzE6LTE7Zm9yKGxldCBMPTE7TDw9aTtMKyspaC5wdXNoKDAsXypCLDApLGYucHVzaCgwLEIsMCkscC5wdXNoKC41LC41KSxkKys7bGV0IEk9ZDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IEY9TC9pKmwrcyx6PU1hdGguY29zKEYpLFU9TWF0aC5zaW4oRik7ay54PUQqVSxrLnk9XypCLGsuej1EKnosaC5wdXNoKGsueCxrLnksay56KSxmLnB1c2goMCxCLDApLFAueD16Ki41Ky41LFAueT1VKi41KkIrLjUscC5wdXNoKFAueCxQLnkpLGQrK31mb3IobGV0IEw9MDtMPGk7TCsrKXtsZXQgUj1DK0wsRj1JK0w7Uz09PSEwP3UucHVzaChGLEYrMSxSKTp1LnB1c2goRisxLEYsUiksTys9M31jLmFkZEdyb3VwKHksTyxTPT09ITA/MToyKSx5Kz1PfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBvbSh0LnJhZGl1c1RvcCx0LnJhZGl1c0JvdHRvbSx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sQjE9Y2xhc3MgZXh0ZW5kcyBvbXtjb25zdHJ1Y3Rvcih0PTEscj0xLG49OCxpPTEsbz0hMSxhPTAscz1NYXRoLlBJKjIpe3N1cGVyKDAsdCxyLG4saSxvLGEscyksdGhpcy50eXBlPSJDb25lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsaGVpZ2h0OnIscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppLG9wZW5FbmRlZDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBCMSh0LnJhZGl1cyx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sdWg9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PVtdLHI9W10sbj0xLGk9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczp0LGluZGljZXM6cixyYWRpdXM6bixkZXRhaWw6aX07bGV0IG89W10sYT1bXTtzKGkpLGMobiksdSgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShvLnNsaWNlKCksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpLGk9PT0wP3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTp0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKTtmdW5jdGlvbiBzKHgpe2xldCBiPW5ldyBqLFM9bmV3IGosQz1uZXcgajtmb3IobGV0IFA9MDtQPHIubGVuZ3RoO1ArPTMpcChyW1ArMF0sYikscChyW1ArMV0sUykscChyW1ArMl0sQyksbChiLFMsQyx4KX1mdW5jdGlvbiBsKHgsYixTLEMpe2xldCBQPUMrMSxrPVtdO2ZvcihsZXQgTz0wO088PVA7TysrKXtrW09dPVtdO2xldCBEPXguY2xvbmUoKS5sZXJwKFMsTy9QKSxCPWIuY2xvbmUoKS5sZXJwKFMsTy9QKSxJPVAtTztmb3IobGV0IEw9MDtMPD1JO0wrKylMPT09MCYmTz09PVA/a1tPXVtMXT1EOmtbT11bTF09RC5jbG9uZSgpLmxlcnAoQixML0kpfWZvcihsZXQgTz0wO088UDtPKyspZm9yKGxldCBEPTA7RDwyKihQLU8pLTE7RCsrKXtsZXQgQj1NYXRoLmZsb29yKEQvMik7RCUyPT09MD8oZihrW09dW0IrMV0pLGYoa1tPKzFdW0JdKSxmKGtbT11bQl0pKTooZihrW09dW0IrMV0pLGYoa1tPKzFdW0IrMV0pLGYoa1tPKzFdW0JdKSl9fWZ1bmN0aW9uIGMoeCl7bGV0IGI9bmV3IGo7Zm9yKGxldCBTPTA7UzxvLmxlbmd0aDtTKz0zKWIueD1vW1MrMF0sYi55PW9bUysxXSxiLno9b1tTKzJdLGIubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoeCksb1tTKzBdPWIueCxvW1MrMV09Yi55LG9bUysyXT1iLnp9ZnVuY3Rpb24gdSgpe2xldCB4PW5ldyBqO2ZvcihsZXQgYj0wO2I8by5sZW5ndGg7Yis9Myl7eC54PW9bYiswXSx4Lnk9b1tiKzFdLHguej1vW2IrMl07bGV0IFM9Xyh4KS8yL01hdGguUEkrLjUsQz15KHgpL01hdGguUEkrLjU7YS5wdXNoKFMsMS1DKX1kKCksaCgpfWZ1bmN0aW9uIGgoKXtmb3IobGV0IHg9MDt4PGEubGVuZ3RoO3grPTYpe2xldCBiPWFbeCswXSxTPWFbeCsyXSxDPWFbeCs0XSxQPU1hdGgubWF4KGIsUyxDKSxrPU1hdGgubWluKGIsUyxDKTtQPi45JiZrPC4xJiYoYjwuMiYmKGFbeCswXSs9MSksUzwuMiYmKGFbeCsyXSs9MSksQzwuMiYmKGFbeCs0XSs9MSkpfX1mdW5jdGlvbiBmKHgpe28ucHVzaCh4LngseC55LHgueil9ZnVuY3Rpb24gcCh4LGIpe2xldCBTPXgqMztiLng9dFtTKzBdLGIueT10W1MrMV0sYi56PXRbUysyXX1mdW5jdGlvbiBkKCl7bGV0IHg9bmV3IGosYj1uZXcgaixTPW5ldyBqLEM9bmV3IGosUD1uZXcgTHQsaz1uZXcgTHQsTz1uZXcgTHQ7Zm9yKGxldCBEPTAsQj0wO0Q8by5sZW5ndGg7RCs9OSxCKz02KXt4LnNldChvW0QrMF0sb1tEKzFdLG9bRCsyXSksYi5zZXQob1tEKzNdLG9bRCs0XSxvW0QrNV0pLFMuc2V0KG9bRCs2XSxvW0QrN10sb1tEKzhdKSxQLnNldChhW0IrMF0sYVtCKzFdKSxrLnNldChhW0IrMl0sYVtCKzNdKSxPLnNldChhW0IrNF0sYVtCKzVdKSxDLmNvcHkoeCkuYWRkKGIpLmFkZChTKS5kaXZpZGVTY2FsYXIoMyk7bGV0IEk9XyhDKTtnKFAsQiswLHgsSSksZyhrLEIrMixiLEkpLGcoTyxCKzQsUyxJKX19ZnVuY3Rpb24gZyh4LGIsUyxDKXtDPDAmJngueD09PTEmJihhW2JdPXgueC0xKSxTLng9PT0wJiZTLno9PT0wJiYoYVtiXT1DLzIvTWF0aC5QSSsuNSl9ZnVuY3Rpb24gXyh4KXtyZXR1cm4gTWF0aC5hdGFuMih4LnosLXgueCl9ZnVuY3Rpb24geSh4KXtyZXR1cm4gTWF0aC5hdGFuMigteC55LE1hdGguc3FydCh4LngqeC54K3gueip4LnopKX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgdWgodC52ZXJ0aWNlcyx0LmluZGljZXMsdC5yYWRpdXMsdC5kZXRhaWxzKX19LEgxPWNsYXNzIGV4dGVuZHMgdWh7Y29uc3RydWN0b3IodD0xLHI9MCl7bGV0IG49KDErTWF0aC5zcXJ0KDUpKS8yLGk9MS9uLG89Wy0xLC0xLC0xLC0xLC0xLDEsLTEsMSwtMSwtMSwxLDEsMSwtMSwtMSwxLC0xLDEsMSwxLC0xLDEsMSwxLDAsLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwtaSwtbiwwLC1pLG4sMCxpLC1uLDAsaSxuLDAsLW4sMCwtaSxuLDAsLWksLW4sMCxpLG4sMCxpXSxhPVszLDExLDcsMyw3LDE1LDMsMTUsMTMsNywxOSwxNyw3LDE3LDYsNyw2LDE1LDE3LDQsOCwxNyw4LDEwLDE3LDEwLDYsOCwwLDE2LDgsMTYsMiw4LDIsMTAsMCwxMiwxLDAsMSwxOCwwLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XTtzdXBlcihvLGEsdCxyKSx0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDpyfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBIMSh0LnJhZGl1cyx0LmRldGFpbCl9fSxCVj1uZXcgaixIVj1uZXcgaixndXQ9bmV3IGosVlY9bmV3IG9pLHM2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1udWxsLHI9MSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17Z2VvbWV0cnk6dCx0aHJlc2hvbGRBbmdsZTpyfSx0IT09bnVsbCl7bGV0IGk9TWF0aC5wb3coMTAsNCksbz1NYXRoLmNvcyhQMSpyKSxhPXQuZ2V0SW5kZXgoKSxzPXQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGw9YT9hLmNvdW50OnMuY291bnQsYz1bMCwwLDBdLHU9WyJhIiwiYiIsImMiXSxoPW5ldyBBcnJheSgzKSxmPXt9LHA9W107Zm9yKGxldCBkPTA7ZDxsO2QrPTMpe2E/KGNbMF09YS5nZXRYKGQpLGNbMV09YS5nZXRYKGQrMSksY1syXT1hLmdldFgoZCsyKSk6KGNbMF09ZCxjWzFdPWQrMSxjWzJdPWQrMik7bGV0e2E6ZyxiOl8sYzp5fT1WVjtpZihnLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzBdKSxfLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzFdKSx5LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzJdKSxWVi5nZXROb3JtYWwoZ3V0KSxoWzBdPWAke01hdGgucm91bmQoZy54KmkpfSwke01hdGgucm91bmQoZy55KmkpfSwke01hdGgucm91bmQoZy56KmkpfWAsaFsxXT1gJHtNYXRoLnJvdW5kKF8ueCppKX0sJHtNYXRoLnJvdW5kKF8ueSppKX0sJHtNYXRoLnJvdW5kKF8ueippKX1gLGhbMl09YCR7TWF0aC5yb3VuZCh5LngqaSl9LCR7TWF0aC5yb3VuZCh5LnkqaSl9LCR7TWF0aC5yb3VuZCh5LnoqaSl9YCwhKGhbMF09PT1oWzFdfHxoWzFdPT09aFsyXXx8aFsyXT09PWhbMF0pKWZvcihsZXQgeD0wO3g8Mzt4Kyspe2xldCBiPSh4KzEpJTMsUz1oW3hdLEM9aFtiXSxQPVZWW3VbeF1dLGs9VlZbdVtiXV0sTz1gJHtTfV8ke0N9YCxEPWAke0N9XyR7U31gO0QgaW4gZiYmZltEXT8oZ3V0LmRvdChmW0RdLm5vcm1hbCk8PW8mJihwLnB1c2goUC54LFAueSxQLnopLHAucHVzaChrLngsay55LGsueikpLGZbRF09bnVsbCk6TyBpbiBmfHwoZltPXT17aW5kZXgwOmNbeF0saW5kZXgxOmNbYl0sbm9ybWFsOmd1dC5jbG9uZSgpfSl9fWZvcihsZXQgZCBpbiBmKWlmKGZbZF0pe2xldHtpbmRleDA6ZyxpbmRleDE6X309ZltkXTtCVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsZyksSFYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLF8pLHAucHVzaChCVi54LEJWLnksQlYueikscC5wdXNoKEhWLngsSFYueSxIVi56KX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShwLDMpKX19fSxmcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQscil7bGV0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChuLHIpfWdldFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiByfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50QXQobi90KSk7cmV0dXJuIHJ9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgcj1bXSxuLGk9dGhpcy5nZXRQb2ludCgwKSxvPTA7ci5wdXNoKDApO2ZvcihsZXQgYT0xO2E8PXQ7YSsrKW49dGhpcy5nZXRQb2ludChhL3QpLG8rPW4uZGlzdGFuY2VUbyhpKSxyLnB1c2gobyksaT1uO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1yLHJ9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxyKXtsZXQgbj10aGlzLmdldExlbmd0aHMoKSxpPTAsbz1uLmxlbmd0aCxhO3I/YT1yOmE9dCpuW28tMV07bGV0IHM9MCxsPW8tMSxjO2Zvcig7czw9bDspaWYoaT1NYXRoLmZsb29yKHMrKGwtcykvMiksYz1uW2ldLWEsYzwwKXM9aSsxO2Vsc2UgaWYoYz4wKWw9aS0xO2Vsc2V7bD1pO2JyZWFrfWlmKGk9bCxuW2ldPT09YSlyZXR1cm4gaS8oby0xKTtsZXQgdT1uW2ldLGY9bltpKzFdLXUscD0oYS11KS9mO3JldHVybihpK3ApLyhvLTEpfWdldFRhbmdlbnQodCxyKXtsZXQgaT10LTFlLTQsbz10KzFlLTQ7aTwwJiYoaT0wKSxvPjEmJihvPTEpO2xldCBhPXRoaXMuZ2V0UG9pbnQoaSkscz10aGlzLmdldFBvaW50KG8pLGw9cnx8KGEuaXNWZWN0b3IyP25ldyBMdDpuZXcgaik7cmV0dXJuIGwuY29weShzKS5zdWIoYSkubm9ybWFsaXplKCksbH1nZXRUYW5nZW50QXQodCxyKXtsZXQgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFRhbmdlbnQobixyKX1jb21wdXRlRnJlbmV0RnJhbWVzKHQscil7bGV0IG49bmV3IGosaT1bXSxvPVtdLGE9W10scz1uZXcgaixsPW5ldyBNZTtmb3IobGV0IHA9MDtwPD10O3ArKyl7bGV0IGQ9cC90O2lbcF09dGhpcy5nZXRUYW5nZW50QXQoZCxuZXcgail9b1swXT1uZXcgaixhWzBdPW5ldyBqO2xldCBjPU51bWJlci5NQVhfVkFMVUUsdT1NYXRoLmFicyhpWzBdLngpLGg9TWF0aC5hYnMoaVswXS55KSxmPU1hdGguYWJzKGlbMF0ueik7dTw9YyYmKGM9dSxuLnNldCgxLDAsMCkpLGg8PWMmJihjPWgsbi5zZXQoMCwxLDApKSxmPD1jJiZuLnNldCgwLDAsMSkscy5jcm9zc1ZlY3RvcnMoaVswXSxuKS5ub3JtYWxpemUoKSxvWzBdLmNyb3NzVmVjdG9ycyhpWzBdLHMpLGFbMF0uY3Jvc3NWZWN0b3JzKGlbMF0sb1swXSk7Zm9yKGxldCBwPTE7cDw9dDtwKyspe2lmKG9bcF09b1twLTFdLmNsb25lKCksYVtwXT1hW3AtMV0uY2xvbmUoKSxzLmNyb3NzVmVjdG9ycyhpW3AtMV0saVtwXSkscy5sZW5ndGgoKT5OdW1iZXIuRVBTSUxPTil7cy5ub3JtYWxpemUoKTtsZXQgZD1NYXRoLmFjb3MoWm8oaVtwLTFdLmRvdChpW3BdKSwtMSwxKSk7b1twXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHMsZCkpfWFbcF0uY3Jvc3NWZWN0b3JzKGlbcF0sb1twXSl9aWYocj09PSEwKXtsZXQgcD1NYXRoLmFjb3MoWm8ob1swXS5kb3Qob1t0XSksLTEsMSkpO3AvPXQsaVswXS5kb3Qocy5jcm9zc1ZlY3RvcnMob1swXSxvW3RdKSk+MCYmKHA9LXApO2ZvcihsZXQgZD0xO2Q8PXQ7ZCsrKW9bZF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhpW2RdLHAqZCkpLGFbZF0uY3Jvc3NWZWN0b3JzKGlbZF0sb1tkXSl9cmV0dXJue3RhbmdlbnRzOmksbm9ybWFsczpvLGJpbm9ybWFsczphfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0sVjE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MSxpPTEsbz0wLGE9TWF0aC5QSSoyLHM9ITEsbD0wKXtzdXBlcigpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXQsdGhpcy5hWT1yLHRoaXMueFJhZGl1cz1uLHRoaXMueVJhZGl1cz1pLHRoaXMuYVN0YXJ0QW5nbGU9byx0aGlzLmFFbmRBbmdsZT1hLHRoaXMuYUNsb2Nrd2lzZT1zLHRoaXMuYVJvdGF0aW9uPWx9Z2V0UG9pbnQodCxyKXtsZXQgbj1yfHxuZXcgTHQsaT1NYXRoLlBJKjIsbz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLGE9TWF0aC5hYnMobyk8TnVtYmVyLkVQU0lMT047Zm9yKDtvPDA7KW8rPWk7Zm9yKDtvPmk7KW8tPWk7bzxOdW1iZXIuRVBTSUxPTiYmKGE/bz0wOm89aSksdGhpcy5hQ2xvY2t3aXNlPT09ITAmJiFhJiYobz09PWk/bz0taTpvPW8taSk7bGV0IHM9dGhpcy5hU3RhcnRBbmdsZSt0Km8sbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhzKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKHMpO2lmKHRoaXMuYVJvdGF0aW9uIT09MCl7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGg9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLGY9bC10aGlzLmFYLHA9Yy10aGlzLmFZO2w9Zip1LXAqaCt0aGlzLmFYLGM9ZipoK3AqdSt0aGlzLmFZfXJldHVybiBuLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O1YxLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgbDY9Y2xhc3MgZXh0ZW5kcyBWMXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSl7c3VwZXIodCxyLG4sbixpLG8sYSksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTtsNi5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDtmdW5jdGlvbiBEaHQoKXtsZXQgZT0wLHQ9MCxyPTAsbj0wO2Z1bmN0aW9uIGkobyxhLHMsbCl7ZT1vLHQ9cyxyPS0zKm8rMyphLTIqcy1sLG49MipvLTIqYStzK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyl7aShhLHMsYyoocy1vKSxjKihsLWEpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyx1LGgpe2xldCBmPShhLW8pL2MtKHMtbykvKGMrdSkrKHMtYSkvdSxwPShzLWEpL3UtKGwtYSkvKHUraCkrKGwtcykvaDtmKj11LHAqPXUsaShhLHMsZixwKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgYT1vKm8scz1hKm87cmV0dXJuIGUrdCpvK3IqYStuKnN9fX12YXIgVVY9bmV3IGosX3V0PW5ldyBEaHQseXV0PW5ldyBEaHQsdnV0PW5ldyBEaHQsYzY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PVtdLHI9ITEsbj0iY2VudHJpcGV0YWwiLGk9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPXIsdGhpcy5jdXJ2ZVR5cGU9bix0aGlzLnRlbnNpb249aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnBvaW50cyxvPWkubGVuZ3RoLGE9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQscz1NYXRoLmZsb29yKGEpLGw9YS1zO3RoaXMuY2xvc2VkP3MrPXM+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKHMpL28pKzEpKm86bD09PTAmJnM9PT1vLTEmJihzPW8tMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fHM+MD9jPWlbKHMtMSklb106KFVWLnN1YlZlY3RvcnMoaVswXSxpWzFdKS5hZGQoaVswXSksYz1VVik7bGV0IGg9aVtzJW9dLGY9aVsocysxKSVvXTtpZih0aGlzLmNsb3NlZHx8cysyPG8/dT1pWyhzKzIpJW9dOihVVi5zdWJWZWN0b3JzKGlbby0xXSxpW28tMl0pLmFkZChpW28tMV0pLHU9VVYpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBwPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxkPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCkscCksZz1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLHApLF89TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxwKTtnPDFlLTQmJihnPTEpLGQ8MWUtNCYmKGQ9ZyksXzwxZS00JiYoXz1nKSxfdXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCxkLGcsXykseXV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksZCxnLF8pLHZ1dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGQsZyxfKX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoX3V0LmluaXRDYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCx0aGlzLnRlbnNpb24pLHl1dC5pbml0Q2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksdGhpcy50ZW5zaW9uKSx2dXQuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBuLnNldChfdXQuY2FsYyhsKSx5dXQuY2FsYyhsKSx2dXQuY2FsYyhsKSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCByPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5wb2ludHNbcl07dC5wb2ludHMucHVzaChpLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXQucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LnBvaW50c1tyXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBqKCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07YzYucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiBkaGUoZSx0LHIsbixpKXtsZXQgbz0obi10KSouNSxhPShpLXIpKi41LHM9ZSplLGw9ZSpzO3JldHVybigyKnItMipuK28rYSkqbCsoLTMqciszKm4tMipvLWEpKnMrbyplK3J9ZnVuY3Rpb24gemdyKGUsdCl7bGV0IHI9MS1lO3JldHVybiByKnIqdH1mdW5jdGlvbiBGZ3IoZSx0KXtyZXR1cm4gMiooMS1lKSplKnR9ZnVuY3Rpb24gQmdyKGUsdCl7cmV0dXJuIGUqZSp0fWZ1bmN0aW9uIEdQKGUsdCxyLG4pe3JldHVybiB6Z3IoZSx0KStGZ3IoZSxyKStCZ3IoZSxuKX1mdW5jdGlvbiBIZ3IoZSx0KXtsZXQgcj0xLWU7cmV0dXJuIHIqcipyKnR9ZnVuY3Rpb24gVmdyKGUsdCl7bGV0IHI9MS1lO3JldHVybiAzKnIqciplKnR9ZnVuY3Rpb24gVWdyKGUsdCl7cmV0dXJuIDMqKDEtZSkqZSplKnR9ZnVuY3Rpb24gcWdyKGUsdCl7cmV0dXJuIGUqZSplKnR9ZnVuY3Rpb24gV1AoZSx0LHIsbixpKXtyZXR1cm4gSGdyKGUsdCkrVmdyKGUscikrVWdyKGUsbikrcWdyKGUsaSl9dmFyIGNNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQsaT1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bix0aGlzLnYzPWl9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MixzPXRoaXMudjM7cmV0dXJuIG4uc2V0KFdQKHQsaS54LG8ueCxhLngscy54KSxXUCh0LGkueSxvLnksYS55LHMueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07Y00ucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgdTY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGosbj1uZXcgaixpPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1uLHRoaXMudjM9aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBuLnNldChXUCh0LGkueCxvLngsYS54LHMueCksV1AodCxpLnksby55LGEueSxzLnkpLFdQKHQsaS56LG8ueixhLnoscy56KSksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTt1Ni5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgVTE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBMdCxyPW5ldyBMdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9cn1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yO3JldHVybiB0PT09MT9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59Z2V0UG9pbnRBdCh0LHIpe3JldHVybiB0aGlzLmdldFBvaW50KHQscil9Z2V0VGFuZ2VudCh0LHIpe2xldCBuPXJ8fG5ldyBMdDtyZXR1cm4gbi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1UxLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYlU9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1yfWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cjtyZXR1cm4gdD09PTE/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufWdldFBvaW50QXQodCxyKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LHIpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHVNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9cix0aGlzLnYyPW59Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07dU0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmU9ITA7dmFyIGhNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1ufWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSksR1AodCxpLnosby56LGEueikpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07aE0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3ZhciBmTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSIsdGhpcy5wb2ludHM9dH1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yLGk9dGhpcy5wb2ludHMsbz0oaS5sZW5ndGgtMSkqdCxhPU1hdGguZmxvb3Iobykscz1vLWEsbD1pW2E9PT0wP2E6YS0xXSxjPWlbYV0sdT1pW2E+aS5sZW5ndGgtMj9pLmxlbmd0aC0xOmErMV0saD1pW2E+aS5sZW5ndGgtMz9pLmxlbmd0aC0xOmErMl07cmV0dXJuIG4uc2V0KGRoZShzLGwueCxjLngsdS54LGgueCksZGhlKHMsbC55LGMueSx1LnksaC55KSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMucG9pbnRzW3JdO3QucG9pbnRzLnB1c2goaS50b0FycmF5KCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2gobmV3IEx0KCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpc319O2ZNLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBPaHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bDYsQ2F0bXVsbFJvbUN1cnZlMzpjNixDdWJpY0JlemllckN1cnZlOmNNLEN1YmljQmV6aWVyQ3VydmUzOnU2LEVsbGlwc2VDdXJ2ZTpWMSxMaW5lQ3VydmU6VTEsTGluZUN1cnZlMzpiVSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp1TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6aE0sU3BsaW5lQ3VydmU6Zk19KSx3VT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCkscj10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMocil8fHRoaXMuY3VydmVzLnB1c2gobmV3IFUxKHIsdCkpfWdldFBvaW50KHQscil7bGV0IG49dCp0aGlzLmdldExlbmd0aCgpLGk9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxvPTA7Zm9yKDtvPGkubGVuZ3RoOyl7aWYoaVtvXT49bil7bGV0IGE9aVtvXS1uLHM9dGhpcy5jdXJ2ZXNbb10sbD1zLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLWEvbDtyZXR1cm4gcy5nZXRQb2ludEF0KGMscil9bysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLHI9MDtmb3IobGV0IG49MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtuPGk7bisrKXIrPXRoaXMuY3VydmVzW25dLmdldExlbmd0aCgpLHQucHVzaChyKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIucHVzaChyWzBdKSxyfWdldFBvaW50cyh0PTEyKXtsZXQgcj1bXSxuO2ZvcihsZXQgaT0wLG89dGhpcy5jdXJ2ZXM7aTxvLmxlbmd0aDtpKyspe2xldCBhPW9baV0scz1hJiZhLmlzRWxsaXBzZUN1cnZlP3QqMjphJiYoYS5pc0xpbmVDdXJ2ZXx8YS5pc0xpbmVDdXJ2ZTMpPzE6YSYmYS5pc1NwbGluZUN1cnZlP3QqYS5wb2ludHMubGVuZ3RoOnQsbD1hLmdldFBvaW50cyhzKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtuJiZuLmVxdWFscyh1KXx8KHIucHVzaCh1KSxuPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIubGVuZ3RoPjEmJiFyW3IubGVuZ3RoLTFdLmVxdWFscyhyWzBdKSYmci5wdXNoKHJbMF0pLHJ9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXRoaXMuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmN1cnZlc1tyXTt0LmN1cnZlcy5wdXNoKGkudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2gobmV3IE9odFtpLnR5cGVdKCkuZnJvbUpTT04oaSkpfXJldHVybiB0aGlzfX0scTE9Y2xhc3MgZXh0ZW5kcyB3VXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEx0LHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgcj0xLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmxpbmVUbyh0W3JdLngsdFtyXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31saW5lVG8odCxyKXtsZXQgbj1uZXcgVTEodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQscixuLGkpe2xldCBvPW5ldyB1TSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe2xldCBzPW5ldyBjTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpLG5ldyBMdChvLGEpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChzKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxhKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IHI9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxuPW5ldyBmTShyKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChuKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmN1cnJlbnRQb2ludC54LGw9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNhcmModCtzLHIrbCxuLGksbyxhKSx0aGlzfWFic2FyYyh0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LHIsbixuLGksbyxhKSx0aGlzfWVsbGlwc2UodCxyLG4saSxvLGEscyxsKXtsZXQgYz10aGlzLmN1cnJlbnRQb2ludC54LHU9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrYyxyK3UsbixpLG8sYSxzLGwpLHRoaXN9YWJzZWxsaXBzZSh0LHIsbixpLG8sYSxzLGwpe2xldCBjPW5ldyBWMSh0LHIsbixpLG8sYSxzLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgaD1jLmdldFBvaW50KDApO2guZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oaC54LGgueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sS2M9Y2xhc3MgZXh0ZW5kcyBxMXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7bjxpO24rKylyW25dPXRoaXMuaG9sZXNbbl0uZ2V0UG9pbnRzKHQpO3JldHVybiByfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dC5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5ob2xlc1tyXTt0aGlzLmhvbGVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCByPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmhvbGVzW3JdO3QuaG9sZXMucHVzaChpLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCByPTAsbj10LmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmhvbGVzW3JdO3RoaXMuaG9sZXMucHVzaChuZXcgcTEoKS5mcm9tSlNPTihpKSl9cmV0dXJuIHRoaXN9fSxHZ3I9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKGUsdCxyPTIpe2xldCBuPXQmJnQubGVuZ3RoLGk9bj90WzBdKnI6ZS5sZW5ndGgsbz1lcGUoZSwwLGksciwhMCksYT1bXTtpZighb3x8by5uZXh0PT09by5wcmV2KXJldHVybiBhO2xldCBzLGwsYyx1LGgsZixwO2lmKG4mJihvPSRncihlLHQsbyxyKSksZS5sZW5ndGg+ODAqcil7cz1jPWVbMF0sbD11PWVbMV07Zm9yKGxldCBkPXI7ZDxpO2QrPXIpaD1lW2RdLGY9ZVtkKzFdLGg8cyYmKHM9aCksZjxsJiYobD1mKSxoPmMmJihjPWgpLGY+dSYmKHU9Zik7cD1NYXRoLm1heChjLXMsdS1sKSxwPXAhPT0wPzEvcDowfXJldHVybiBoNihvLGEscixzLGwscCksYX19O2Z1bmN0aW9uIGVwZShlLHQscixuLGkpe2xldCBvLGE7aWYoaT09PWEwcihlLHQscixuKT4wKWZvcihvPXQ7bzxyO28rPW4pYT1taGUobyxlW29dLGVbbysxXSxhKTtlbHNlIGZvcihvPXItbjtvPj10O28tPW4pYT1taGUobyxlW29dLGVbbysxXSxhKTtyZXR1cm4gYSYmWlUoYSxhLm5leHQpJiYocDYoYSksYT1hLm5leHQpLGF9ZnVuY3Rpb24gRzAoZSx0KXtpZighZSlyZXR1cm4gZTt0fHwodD1lKTtsZXQgcj1lLG47ZG8gaWYobj0hMSwhci5zdGVpbmVyJiYoWlUocixyLm5leHQpfHxhaShyLnByZXYscixyLm5leHQpPT09MCkpe2lmKHA2KHIpLHI9dD1yLnByZXYscj09PXIubmV4dClicmVhaztuPSEwfWVsc2Ugcj1yLm5leHQ7d2hpbGUobnx8ciE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIGg2KGUsdCxyLG4saSxvLGEpe2lmKCFlKXJldHVybjshYSYmbyYmdDByKGUsbixpLG8pO2xldCBzPWUsbCxjO2Zvcig7ZS5wcmV2IT09ZS5uZXh0Oyl7aWYobD1lLnByZXYsYz1lLm5leHQsbz9ZZ3IoZSxuLGksbyk6V2dyKGUpKXt0LnB1c2gobC5pL3IpLHQucHVzaChlLmkvciksdC5wdXNoKGMuaS9yKSxwNihlKSxlPWMubmV4dCxzPWMubmV4dDtjb250aW51ZX1pZihlPWMsZT09PXMpe2E/YT09PTE/KGU9amdyKEcwKGUpLHQsciksaDYoZSx0LHIsbixpLG8sMikpOmE9PT0yJiZYZ3IoZSx0LHIsbixpLG8pOmg2KEcwKGUpLHQscixuLGksbywxKTticmVha319fWZ1bmN0aW9uIFdncihlKXtsZXQgdD1lLnByZXYscj1lLG49ZS5uZXh0O2lmKGFpKHQscixuKT49MClyZXR1cm4hMTtsZXQgaT1lLm5leHQubmV4dDtmb3IoO2khPT1lLnByZXY7KXtpZihIMyh0LngsdC55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmYWkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBZZ3IoZSx0LHIsbil7bGV0IGk9ZS5wcmV2LG89ZSxhPWUubmV4dDtpZihhaShpLG8sYSk+PTApcmV0dXJuITE7bGV0IHM9aS54PG8ueD9pLng8YS54P2kueDphLng6by54PGEueD9vLng6YS54LGw9aS55PG8ueT9pLnk8YS55P2kueTphLnk6by55PGEueT9vLnk6YS55LGM9aS54Pm8ueD9pLng+YS54P2kueDphLng6by54PmEueD9vLng6YS54LHU9aS55Pm8ueT9pLnk+YS55P2kueTphLnk6by55PmEueT9vLnk6YS55LGg9bmh0KHMsbCx0LHIsbiksZj1uaHQoYyx1LHQscixuKSxwPWUucHJldlosZD1lLm5leHRaO2Zvcig7cCYmcC56Pj1oJiZkJiZkLno8PWY7KXtpZihwIT09ZS5wcmV2JiZwIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxwLngscC55KSYmYWkocC5wcmV2LHAscC5uZXh0KT49MHx8KHA9cC5wcmV2WixkIT09ZS5wcmV2JiZkIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxkLngsZC55KSYmYWkoZC5wcmV2LGQsZC5uZXh0KT49MCkpcmV0dXJuITE7ZD1kLm5leHRafWZvcig7cCYmcC56Pj1oOyl7aWYocCE9PWUucHJldiYmcCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnkscC54LHAueSkmJmFpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLnByZXZafWZvcig7ZCYmZC56PD1mOyl7aWYoZCE9PWUucHJldiYmZCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJmFpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIGpncihlLHQscil7bGV0IG49ZTtkb3tsZXQgaT1uLnByZXYsbz1uLm5leHQubmV4dDshWlUoaSxvKSYmcnBlKGksbixuLm5leHQsbykmJmY2KGksbykmJmY2KG8saSkmJih0LnB1c2goaS5pL3IpLHQucHVzaChuLmkvciksdC5wdXNoKG8uaS9yKSxwNihuKSxwNihuLm5leHQpLG49ZT1vKSxuPW4ubmV4dH13aGlsZShuIT09ZSk7cmV0dXJuIEcwKG4pfWZ1bmN0aW9uIFhncihlLHQscixuLGksbyl7bGV0IGE9ZTtkb3tsZXQgcz1hLm5leHQubmV4dDtmb3IoO3MhPT1hLnByZXY7KXtpZihhLmkhPT1zLmkmJm4wcihhLHMpKXtsZXQgbD1ucGUoYSxzKTthPUcwKGEsYS5uZXh0KSxsPUcwKGwsbC5uZXh0KSxoNihhLHQscixuLGksbyksaDYobCx0LHIsbixpLG8pO3JldHVybn1zPXMubmV4dH1hPWEubmV4dH13aGlsZShhIT09ZSl9ZnVuY3Rpb24gJGdyKGUsdCxyLG4pe2xldCBpPVtdLG8sYSxzLGwsYztmb3Iobz0wLGE9dC5sZW5ndGg7bzxhO28rKylzPXRbb10qbixsPW88YS0xP3RbbysxXSpuOmUubGVuZ3RoLGM9ZXBlKGUscyxsLG4sITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLGkucHVzaChyMHIoYykpO2ZvcihpLnNvcnQoS2dyKSxvPTA7bzxpLmxlbmd0aDtvKyspWmdyKGlbb10scikscj1HMChyLHIubmV4dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gS2dyKGUsdCl7cmV0dXJuIGUueC10Lnh9ZnVuY3Rpb24gWmdyKGUsdCl7aWYodD1KZ3IoZSx0KSx0KXtsZXQgcj1ucGUodCxlKTtHMCh0LHQubmV4dCksRzAocixyLm5leHQpfX1mdW5jdGlvbiBKZ3IoZSx0KXtsZXQgcj10LG49ZS54LGk9ZS55LG89LTEvMCxhO2Rve2lmKGk8PXIueSYmaT49ci5uZXh0LnkmJnIubmV4dC55IT09ci55KXtsZXQgZj1yLngrKGktci55KSooci5uZXh0Lngtci54KS8oci5uZXh0Lnktci55KTtpZihmPD1uJiZmPm8pe2lmKG89ZixmPT09bil7aWYoaT09PXIueSlyZXR1cm4gcjtpZihpPT09ci5uZXh0LnkpcmV0dXJuIHIubmV4dH1hPXIueDxyLm5leHQueD9yOnIubmV4dH19cj1yLm5leHR9d2hpbGUociE9PXQpO2lmKCFhKXJldHVybiBudWxsO2lmKG49PT1vKXJldHVybiBhO2xldCBzPWEsbD1hLngsYz1hLnksdT0xLzAsaDtyPWE7ZG8gbj49ci54JiZyLng+PWwmJm4hPT1yLngmJkgzKGk8Yz9uOm8saSxsLGMsaTxjP286bixpLHIueCxyLnkpJiYoaD1NYXRoLmFicyhpLXIueSkvKG4tci54KSxmNihyLGUpJiYoaDx1fHxoPT09dSYmKHIueD5hLnh8fHIueD09PWEueCYmUWdyKGEscikpKSYmKGE9cix1PWgpKSxyPXIubmV4dDt3aGlsZShyIT09cyk7cmV0dXJuIGF9ZnVuY3Rpb24gUWdyKGUsdCl7cmV0dXJuIGFpKGUucHJldixlLHQucHJldik8MCYmYWkodC5uZXh0LGUsZS5uZXh0KTwwfWZ1bmN0aW9uIHQwcihlLHQscixuKXtsZXQgaT1lO2RvIGkuej09PW51bGwmJihpLno9bmh0KGkueCxpLnksdCxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dDt3aGlsZShpIT09ZSk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxlMHIoaSl9ZnVuY3Rpb24gZTByKGUpe2xldCB0LHIsbixpLG8sYSxzLGwsYz0xO2Rve2ZvcihyPWUsZT1udWxsLG89bnVsbCxhPTA7cjspe2ZvcihhKyssbj1yLHM9MCx0PTA7dDxjJiYocysrLG49bi5uZXh0WiwhIW4pO3QrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspcyE9PTAmJihsPT09MHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksbz9vLm5leHRaPWk6ZT1pLGkucHJldlo9byxvPWk7cj1ufW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKGE+MSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmh0KGUsdCxyLG4saSl7cmV0dXJuIGU9MzI3NjcqKGUtcikqaSx0PTMyNzY3Kih0LW4pKmksZT0oZXxlPDw4KSYxNjcxMTkzNSxlPShlfGU8PDQpJjI1MjY0NTEzNSxlPShlfGU8PDIpJjg1ODk5MzQ1OSxlPShlfGU8PDEpJjE0MzE2NTU3NjUsdD0odHx0PDw4KSYxNjcxMTkzNSx0PSh0fHQ8PDQpJjI1MjY0NTEzNSx0PSh0fHQ8PDIpJjg1ODk5MzQ1OSx0PSh0fHQ8PDEpJjE0MzE2NTU3NjUsZXx0PDwxfWZ1bmN0aW9uIHIwcihlKXtsZXQgdD1lLHI9ZTtkbyh0Lng8ci54fHx0Lng9PT1yLngmJnQueTxyLnkpJiYocj10KSx0PXQubmV4dDt3aGlsZSh0IT09ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSDMoZSx0LHIsbixpLG8sYSxzKXtyZXR1cm4oaS1hKSoodC1zKS0oZS1hKSooby1zKT49MCYmKGUtYSkqKG4tcyktKHItYSkqKHQtcyk+PTAmJihyLWEpKihvLXMpLShpLWEpKihuLXMpPj0wfWZ1bmN0aW9uIG4wcihlLHQpe3JldHVybiBlLm5leHQuaSE9PXQuaSYmZS5wcmV2LmkhPT10LmkmJiFpMHIoZSx0KSYmKGY2KGUsdCkmJmY2KHQsZSkmJm8wcihlLHQpJiYoYWkoZS5wcmV2LGUsdC5wcmV2KXx8YWkoZSx0LnByZXYsdCkpfHxaVShlLHQpJiZhaShlLnByZXYsZSxlLm5leHQpPjAmJmFpKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gYWkoZSx0LHIpe3JldHVybih0LnktZS55KSooci54LXQueCktKHQueC1lLngpKihyLnktdC55KX1mdW5jdGlvbiBaVShlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueX1mdW5jdGlvbiBycGUoZSx0LHIsbil7bGV0IGk9R1YoYWkoZSx0LHIpKSxvPUdWKGFpKGUsdCxuKSksYT1HVihhaShyLG4sZSkpLHM9R1YoYWkocixuLHQpKTtyZXR1cm4hIShpIT09byYmYSE9PXN8fGk9PT0wJiZxVihlLHIsdCl8fG89PT0wJiZxVihlLG4sdCl8fGE9PT0wJiZxVihyLGUsbil8fHM9PT0wJiZxVihyLHQsbikpfWZ1bmN0aW9uIHFWKGUsdCxyKXtyZXR1cm4gdC54PD1NYXRoLm1heChlLngsci54KSYmdC54Pj1NYXRoLm1pbihlLngsci54KSYmdC55PD1NYXRoLm1heChlLnksci55KSYmdC55Pj1NYXRoLm1pbihlLnksci55KX1mdW5jdGlvbiBHVihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9ZnVuY3Rpb24gaTByKGUsdCl7bGV0IHI9ZTtkb3tpZihyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZycGUocixyLm5leHQsZSx0KSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09ZSk7cmV0dXJuITF9ZnVuY3Rpb24gZjYoZSx0KXtyZXR1cm4gYWkoZS5wcmV2LGUsZS5uZXh0KTwwP2FpKGUsdCxlLm5leHQpPj0wJiZhaShlLGUucHJldix0KT49MDphaShlLHQsZS5wcmV2KTwwfHxhaShlLGUubmV4dCx0KTwwfWZ1bmN0aW9uIG8wcihlLHQpe2xldCByPWUsbj0hMSxpPShlLngrdC54KS8yLG89KGUueSt0LnkpLzI7ZG8gci55Pm8hPXIubmV4dC55Pm8mJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihvLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHQ7d2hpbGUociE9PWUpO3JldHVybiBufWZ1bmN0aW9uIG5wZShlLHQpe2xldCByPW5ldyBpaHQoZS5pLGUueCxlLnkpLG49bmV3IGlodCh0LmksdC54LHQueSksaT1lLm5leHQsbz10LnByZXY7cmV0dXJuIGUubmV4dD10LHQucHJldj1lLHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLG59ZnVuY3Rpb24gbWhlKGUsdCxyLG4pe2xldCBpPW5ldyBpaHQoZSx0LHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBwNihlKXtlLm5leHQucHJldj1lLnByZXYsZS5wcmV2Lm5leHQ9ZS5uZXh0LGUucHJldlomJihlLnByZXZaLm5leHRaPWUubmV4dFopLGUubmV4dFomJihlLm5leHRaLnByZXZaPWUucHJldlopfWZ1bmN0aW9uIGlodChlLHQscil7dGhpcy5pPWUsdGhpcy54PXQsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gYTByKGUsdCxyLG4pe2xldCBpPTA7Zm9yKGxldCBvPXQsYT1yLW47bzxyO28rPW4paSs9KGVbYV0tZVtvXSkqKGVbbysxXStlW2ErMV0pLGE9bztyZXR1cm4gaX12YXIgWmM9Y2xhc3N7c3RhdGljIGFyZWEodCl7bGV0IHI9dC5sZW5ndGgsbj0wO2ZvcihsZXQgaT1yLTEsbz0wO288cjtpPW8rKyluKz10W2ldLngqdFtvXS55LXRbb10ueCp0W2ldLnk7cmV0dXJuIG4qLjV9c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiBaYy5hcmVhKHQpPDB9c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUodCxyKXtsZXQgbj1bXSxpPVtdLG89W107Z2hlKHQpLF9oZShuLHQpO2xldCBhPXQubGVuZ3RoO3IuZm9yRWFjaChnaGUpO2ZvcihsZXQgbD0wO2w8ci5sZW5ndGg7bCsrKWkucHVzaChhKSxhKz1yW2xdLmxlbmd0aCxfaGUobixyW2xdKTtsZXQgcz1HZ3IudHJpYW5ndWxhdGUobixpKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTMpby5wdXNoKHMuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIGdoZShlKXtsZXQgdD1lLmxlbmd0aDt0PjImJmVbdC0xXS5lcXVhbHMoZVswXSkmJmUucG9wKCl9ZnVuY3Rpb24gX2hlKGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZS5wdXNoKHRbcl0ueCksZS5wdXNoKHRbcl0ueSl9dmFyIGhoPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCguNSwuNSksbmV3IEx0KC0uNSwuNSksbmV3IEx0KC0uNSwtLjUpLG5ldyBMdCguNSwtLjUpXSkscj17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOnJ9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgbj10aGlzLGk9W10sbz1bXTtmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspe2xldCBjPXRbc107YShjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShvLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gYShzKXtsZXQgbD1bXSxjPXIuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9yLmN1cnZlU2VnbWVudHM6MTIsdT1yLnN0ZXBzIT09dm9pZCAwP3Iuc3RlcHM6MSxoPXIuZGVwdGghPT12b2lkIDA/ci5kZXB0aDoxLGY9ci5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ci5iZXZlbEVuYWJsZWQ6ITAscD1yLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP3IuYmV2ZWxUaGlja25lc3M6LjIsZD1yLmJldmVsU2l6ZSE9PXZvaWQgMD9yLmJldmVsU2l6ZTpwLS4xLGc9ci5iZXZlbE9mZnNldCE9PXZvaWQgMD9yLmJldmVsT2Zmc2V0OjAsXz1yLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ci5iZXZlbFNlZ21lbnRzOjMseT1yLmV4dHJ1ZGVQYXRoLHg9ci5VVkdlbmVyYXRvciE9PXZvaWQgMD9yLlVWR2VuZXJhdG9yOnMwcjtyLmFtb3VudCE9PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxoPXIuYW1vdW50KTtsZXQgYixTPSExLEMsUCxrLE87eSYmKGI9eS5nZXRTcGFjZWRQb2ludHModSksUz0hMCxmPSExLEM9eS5jb21wdXRlRnJlbmV0RnJhbWVzKHUsITEpLFA9bmV3IGosaz1uZXcgaixPPW5ldyBqKSxmfHwoXz0wLHA9MCxkPTAsZz0wKTtsZXQgRD1zLmV4dHJhY3RQb2ludHMoYyksQj1ELnNoYXBlLEk9RC5ob2xlcztpZighWmMuaXNDbG9ja1dpc2UoQikpe0I9Qi5yZXZlcnNlKCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO1pjLmlzQ2xvY2tXaXNlKGh0KSYmKElbcV09aHQucmV2ZXJzZSgpKX19bGV0IFI9WmMudHJpYW5ndWxhdGVTaGFwZShCLEkpLEY9Qjtmb3IobGV0IHE9MCxwdD1JLmxlbmd0aDtxPHB0O3ErKyl7bGV0IGh0PUlbcV07Qj1CLmNvbmNhdChodCl9ZnVuY3Rpb24geihxLHB0LGh0KXtyZXR1cm4gcHR8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IikscHQuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihodCkuYWRkKHEpfWxldCBVPUIubGVuZ3RoLFc9Ui5sZW5ndGg7ZnVuY3Rpb24gWihxLHB0LGh0KXtsZXQgd3Qsa3QsaWUsZWU9cS54LXB0LngsTGU9cS55LXB0LnksYXI9aHQueC1xLngsZnI9aHQueS1xLnksdHQ9ZWUqZWUrTGUqTGUsJD1lZSpmci1MZSphcjtpZihNYXRoLmFicygkKT5OdW1iZXIuRVBTSUxPTil7bGV0IEl0PU1hdGguc3FydCh0dCksJHQ9TWF0aC5zcXJ0KGFyKmFyK2ZyKmZyKSxoZT1wdC54LUxlL0l0LFR0PXB0LnkrZWUvSXQsYmU9aHQueC1mci8kdCxudD1odC55K2FyLyR0LEN0PSgoYmUtaGUpKmZyLShudC1UdCkqYXIpLyhlZSpmci1MZSphcik7d3Q9aGUrZWUqQ3QtcS54LGt0PVR0K0xlKkN0LXEueTtsZXQgV3Q9d3Qqd3Qra3Qqa3Q7aWYoV3Q8PTIpcmV0dXJuIG5ldyBMdCh3dCxrdCk7aWU9TWF0aC5zcXJ0KFd0LzIpfWVsc2V7bGV0IEl0PSExO2VlPk51bWJlci5FUFNJTE9OP2FyPk51bWJlci5FUFNJTE9OJiYoSXQ9ITApOmVlPC1OdW1iZXIuRVBTSUxPTj9hcjwtTnVtYmVyLkVQU0lMT04mJihJdD0hMCk6TWF0aC5zaWduKExlKT09PU1hdGguc2lnbihmcikmJihJdD0hMCksSXQ/KHd0PS1MZSxrdD1lZSxpZT1NYXRoLnNxcnQodHQpKTood3Q9ZWUsa3Q9TGUsaWU9TWF0aC5zcXJ0KHR0LzIpKX1yZXR1cm4gbmV3IEx0KHd0L2llLGt0L2llKX1sZXQgcnQ9W107Zm9yKGxldCBxPTAscHQ9Ri5sZW5ndGgsaHQ9cHQtMSx3dD1xKzE7cTxwdDtxKyssaHQrKyx3dCsrKWh0PT09cHQmJihodD0wKSx3dD09PXB0JiYod3Q9MCkscnRbcV09WihGW3FdLEZbaHRdLEZbd3RdKTtsZXQgb3Q9W10sc3QsU3Q9cnQuY29uY2F0KCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO3N0PVtdO2ZvcihsZXQgd3Q9MCxrdD1odC5sZW5ndGgsaWU9a3QtMSxlZT13dCsxO3d0PGt0O3d0KyssaWUrKyxlZSsrKWllPT09a3QmJihpZT0wKSxlZT09PWt0JiYoZWU9MCksc3Rbd3RdPVooaHRbd3RdLGh0W2llXSxodFtlZV0pO290LnB1c2goc3QpLFN0PVN0LmNvbmNhdChzdCl9Zm9yKGxldCBxPTA7cTxfO3ErKyl7bGV0IHB0PXEvXyxodD1wKk1hdGguY29zKHB0Kk1hdGguUEkvMiksd3Q9ZCpNYXRoLnNpbihwdCpNYXRoLlBJLzIpK2c7Zm9yKGxldCBrdD0wLGllPUYubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT16KEZba3RdLHJ0W2t0XSx3dCk7X3QoZWUueCxlZS55LC1odCl9Zm9yKGxldCBrdD0wLGllPUkubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT1JW2t0XTtzdD1vdFtrdF07Zm9yKGxldCBMZT0wLGFyPWVlLmxlbmd0aDtMZTxhcjtMZSsrKXtsZXQgZnI9eihlZVtMZV0sc3RbTGVdLHd0KTtfdChmci54LGZyLnksLWh0KX19fWxldCBidD1kK2c7Zm9yKGxldCBxPTA7cTxVO3ErKyl7bGV0IHB0PWY/eihCW3FdLFN0W3FdLGJ0KTpCW3FdO1M/KGsuY29weShDLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHB0LngpLFAuY29weShDLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIocHQueSksTy5jb3B5KGJbMF0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChwdC54LHB0LnksMCl9Zm9yKGxldCBxPTE7cTw9dTtxKyspZm9yKGxldCBwdD0wO3B0PFU7cHQrKyl7bGV0IGh0PWY/eihCW3B0XSxTdFtwdF0sYnQpOkJbcHRdO1M/KGsuY29weShDLm5vcm1hbHNbcV0pLm11bHRpcGx5U2NhbGFyKGh0LngpLFAuY29weShDLmJpbm9ybWFsc1txXSkubXVsdGlwbHlTY2FsYXIoaHQueSksTy5jb3B5KGJbcV0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChodC54LGh0LnksaC91KnEpfWZvcihsZXQgcT1fLTE7cT49MDtxLS0pe2xldCBwdD1xL18saHQ9cCpNYXRoLmNvcyhwdCpNYXRoLlBJLzIpLHd0PWQqTWF0aC5zaW4ocHQqTWF0aC5QSS8yKStnO2ZvcihsZXQga3Q9MCxpZT1GLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9eihGW2t0XSxydFtrdF0sd3QpO190KGVlLngsZWUueSxoK2h0KX1mb3IobGV0IGt0PTAsaWU9SS5sZW5ndGg7a3Q8aWU7a3QrKyl7bGV0IGVlPUlba3RdO3N0PW90W2t0XTtmb3IobGV0IExlPTAsYXI9ZWUubGVuZ3RoO0xlPGFyO0xlKyspe2xldCBmcj16KGVlW0xlXSxzdFtMZV0sd3QpO1M/X3QoZnIueCxmci55K2JbdS0xXS55LGJbdS0xXS54K2h0KTpfdChmci54LGZyLnksaCtodCl9fX1NdCgpLGx0KCk7ZnVuY3Rpb24gTXQoKXtsZXQgcT1pLmxlbmd0aC8zO2lmKGYpe2xldCBwdD0wLGh0PVUqcHQ7Zm9yKGxldCB3dD0wO3d0PFc7d3QrKyl7bGV0IGt0PVJbd3RdO2N0KGt0WzJdK2h0LGt0WzFdK2h0LGt0WzBdK2h0KX1wdD11K18qMixodD1VKnB0O2ZvcihsZXQgd3Q9MDt3dDxXO3d0Kyspe2xldCBrdD1SW3d0XTtjdChrdFswXStodCxrdFsxXStodCxrdFsyXStodCl9fWVsc2V7Zm9yKGxldCBwdD0wO3B0PFc7cHQrKyl7bGV0IGh0PVJbcHRdO2N0KGh0WzJdLGh0WzFdLGh0WzBdKX1mb3IobGV0IHB0PTA7cHQ8VztwdCsrKXtsZXQgaHQ9UltwdF07Y3QoaHRbMF0rVSp1LGh0WzFdK1UqdSxodFsyXStVKnUpfX1uLmFkZEdyb3VwKHEsaS5sZW5ndGgvMy1xLDApfWZ1bmN0aW9uIGx0KCl7bGV0IHE9aS5sZW5ndGgvMyxwdD0wO0t0KEYscHQpLHB0Kz1GLmxlbmd0aDtmb3IobGV0IGh0PTAsd3Q9SS5sZW5ndGg7aHQ8d3Q7aHQrKyl7bGV0IGt0PUlbaHRdO0t0KGt0LHB0KSxwdCs9a3QubGVuZ3RofW4uYWRkR3JvdXAocSxpLmxlbmd0aC8zLXEsMSl9ZnVuY3Rpb24gS3QocSxwdCl7bGV0IGh0PXEubGVuZ3RoO2Zvcig7LS1odD49MDspe2xldCB3dD1odCxrdD1odC0xO2t0PDAmJihrdD1xLmxlbmd0aC0xKTtmb3IobGV0IGllPTAsZWU9dStfKjI7aWU8ZWU7aWUrKyl7bGV0IExlPVUqaWUsYXI9VSooaWUrMSksZnI9cHQrd3QrTGUsdHQ9cHQra3QrTGUsJD1wdCtrdCthcixJdD1wdCt3dCthcjtYKGZyLHR0LCQsSXQpfX19ZnVuY3Rpb24gX3QocSxwdCxodCl7bC5wdXNoKHEpLGwucHVzaChwdCksbC5wdXNoKGh0KX1mdW5jdGlvbiBjdChxLHB0LGh0KXtldChxKSxldChwdCksZXQoaHQpO2xldCB3dD1pLmxlbmd0aC8zLGt0PXguZ2VuZXJhdGVUb3BVVihuLGksd3QtMyx3dC0yLHd0LTEpO2R0KGt0WzBdKSxkdChrdFsxXSksZHQoa3RbMl0pfWZ1bmN0aW9uIFgocSxwdCxodCx3dCl7ZXQocSksZXQocHQpLGV0KHd0KSxldChwdCksZXQoaHQpLGV0KHd0KTtsZXQga3Q9aS5sZW5ndGgvMyxpZT14LmdlbmVyYXRlU2lkZVdhbGxVVihuLGksa3QtNixrdC0zLGt0LTIsa3QtMSk7ZHQoaWVbMF0pLGR0KGllWzFdKSxkdChpZVszXSksZHQoaWVbMV0pLGR0KGllWzJdKSxkdChpZVszXSl9ZnVuY3Rpb24gZXQocSl7aS5wdXNoKGxbcSozKzBdKSxpLnB1c2gobFtxKjMrMV0pLGkucHVzaChsW3EqMysyXSl9ZnVuY3Rpb24gZHQocSl7by5wdXNoKHEueCksby5wdXNoKHEueSl9fX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKSxyPXRoaXMucGFyYW1ldGVycy5zaGFwZXMsbj10aGlzLnBhcmFtZXRlcnMub3B0aW9ucztyZXR1cm4gbDByKHIsbix0KX1zdGF0aWMgZnJvbUpTT04odCxyKXtsZXQgbj1bXTtmb3IobGV0IG89MCxhPXQuc2hhcGVzLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW3Quc2hhcGVzW29dXTtuLnB1c2gocyl9bGV0IGk9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiBpIT09dm9pZCAwJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPW5ldyBPaHRbaS50eXBlXSgpLmZyb21KU09OKGkpKSxuZXcgaGgobix0Lm9wdGlvbnMpfX0sczByPXtnZW5lcmF0ZVRvcFVWOmZ1bmN0aW9uKGUsdCxyLG4saSl7bGV0IG89dFtyKjNdLGE9dFtyKjMrMV0scz10W24qM10sbD10W24qMysxXSxjPXRbaSozXSx1PXRbaSozKzFdO3JldHVybltuZXcgTHQobyxhKSxuZXcgTHQocyxsKSxuZXcgTHQoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihlLHQscixuLGksbyl7bGV0IGE9dFtyKjNdLHM9dFtyKjMrMV0sbD10W3IqMysyXSxjPXRbbiozXSx1PXRbbiozKzFdLGg9dFtuKjMrMl0sZj10W2kqM10scD10W2kqMysxXSxkPXRbaSozKzJdLGc9dFtvKjNdLF89dFtvKjMrMV0seT10W28qMysyXTtyZXR1cm4gTWF0aC5hYnMocy11KTxNYXRoLmFicyhhLWMpP1tuZXcgTHQoYSwxLWwpLG5ldyBMdChjLDEtaCksbmV3IEx0KGYsMS1kKSxuZXcgTHQoZywxLXkpXTpbbmV3IEx0KHMsMS1sKSxuZXcgTHQodSwxLWgpLG5ldyBMdChwLDEtZCksbmV3IEx0KF8sMS15KV19fTtmdW5jdGlvbiBsMHIoZSx0LHIpe2lmKHIuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1lW25dO3Iuc2hhcGVzLnB1c2goby51dWlkKX1lbHNlIHIuc2hhcGVzLnB1c2goZS51dWlkKTtyZXR1cm4gdC5leHRydWRlUGF0aCE9PXZvaWQgMCYmKHIub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxyfXZhciBHMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPSgxK01hdGguc3FydCg1KSkvMixpPVstMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLDAsMCwtMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLG4sMCwtMSxuLDAsMSwtbiwwLC0xLC1uLDAsMV0sbz1bMCwxMSw1LDAsNSwxLDAsMSw3LDAsNywxMCwwLDEwLDExLDEsNSw5LDUsMTEsNCwxMSwxMCwyLDEwLDcsNiw3LDEsOCwzLDksNCwzLDQsMiwzLDIsNiwzLDYsOCwzLDgsOSw0LDksNSwyLDQsMTEsNiwyLDEwLDgsNiw3LDksOCwxXTtzdXBlcihpLG8sdCxyKSx0aGlzLnR5cGU9Ikljb3NhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEcxKHQucmFkaXVzLHQuZGV0YWlsKX19LFcxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1bbmV3IEx0KDAsLjUpLG5ldyBMdCguNSwwKSxuZXcgTHQoMCwtLjUpXSxyPTEyLG49MCxpPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkxhdGhlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cG9pbnRzOnQsc2VnbWVudHM6cixwaGlTdGFydDpuLHBoaUxlbmd0aDppfSxyPU1hdGguZmxvb3IociksaT1abyhpLDAsTWF0aC5QSSoyKTtsZXQgbz1bXSxhPVtdLHM9W10sbD1bXSxjPVtdLHU9MS9yLGg9bmV3IGosZj1uZXcgTHQscD1uZXcgaixkPW5ldyBqLGc9bmV3IGosXz0wLHk9MDtmb3IobGV0IHg9MDt4PD10Lmxlbmd0aC0xO3grKylzd2l0Y2goeCl7Y2FzZSAwOl89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZy5jb3B5KHApLHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KTticmVhaztjYXNlIHQubGVuZ3RoLTE6bC5wdXNoKGcueCxnLnksZy56KTticmVhaztkZWZhdWx0Ol89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZC5jb3B5KHApLHAueCs9Zy54LHAueSs9Zy55LHAueis9Zy56LHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KSxnLmNvcHkoZCl9Zm9yKGxldCB4PTA7eDw9cjt4Kyspe2xldCBiPW4reCp1KmksUz1NYXRoLnNpbihiKSxDPU1hdGguY29zKGIpO2ZvcihsZXQgUD0wO1A8PXQubGVuZ3RoLTE7UCsrKXtoLng9dFtQXS54KlMsaC55PXRbUF0ueSxoLno9dFtQXS54KkMsYS5wdXNoKGgueCxoLnksaC56KSxmLng9eC9yLGYueT1QLyh0Lmxlbmd0aC0xKSxzLnB1c2goZi54LGYueSk7bGV0IGs9bFszKlArMF0qUyxPPWxbMypQKzFdLEQ9bFszKlArMF0qQztjLnB1c2goayxPLEQpfX1mb3IobGV0IHg9MDt4PHI7eCsrKWZvcihsZXQgYj0wO2I8dC5sZW5ndGgtMTtiKyspe2xldCBTPWIreCp0Lmxlbmd0aCxDPVMsUD1TK3QubGVuZ3RoLGs9Uyt0Lmxlbmd0aCsxLE89UysxO28ucHVzaChDLFAsTyksby5wdXNoKGssTyxQKX10aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHMsMikpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShjLDMpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBXMSh0LnBvaW50cyx0LnNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgpfX0sVzA9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj1bMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTFdLGk9WzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXTtzdXBlcihuLGksdCxyKSx0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVzAodC5yYWRpdXMsdC5kZXRhaWwpfX0sWTE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PS41LHI9MSxuPTgsaT0xLG89MCxhPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IlJpbmdHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtpbm5lclJhZGl1czp0LG91dGVyUmFkaXVzOnIsdGhldGFTZWdtZW50czpuLHBoaVNlZ21lbnRzOmksdGhldGFTdGFydDpvLHRoZXRhTGVuZ3RoOmF9LG49TWF0aC5tYXgoMyxuKSxpPU1hdGgubWF4KDEsaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD10LGY9KHItdCkvaSxwPW5ldyBqLGQ9bmV3IEx0O2ZvcihsZXQgZz0wO2c8PWk7ZysrKXtmb3IobGV0IF89MDtfPD1uO18rKyl7bGV0IHk9bytfL24qYTtwLng9aCpNYXRoLmNvcyh5KSxwLnk9aCpNYXRoLnNpbih5KSxsLnB1c2gocC54LHAueSxwLnopLGMucHVzaCgwLDAsMSksZC54PShwLngvcisxKS8yLGQueT0ocC55L3IrMSkvMix1LnB1c2goZC54LGQueSl9aCs9Zn1mb3IobGV0IGc9MDtnPGk7ZysrKXtsZXQgXz1nKihuKzEpO2ZvcihsZXQgeT0wO3k8bjt5Kyspe2xldCB4PXkrXyxiPXgsUz14K24rMSxDPXgrbisyLFA9eCsxO3MucHVzaChiLFMsUCkscy5wdXNoKFMsQyxQKX19dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWTEodC5pbm5lclJhZGl1cyx0Lm91dGVyUmFkaXVzLHQudGhldGFTZWdtZW50cyx0LnBoaVNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LFkwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCgwLC41KSxuZXcgTHQoLS41LC0uNSksbmV3IEx0KC41LC0uNSldKSxyPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOnJ9O2xldCBuPVtdLGk9W10sbz1bXSxhPVtdLHM9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAocyxsLHUpLHMrPWwsbD0wO3RoaXMuc2V0SW5kZXgobiksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9aS5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhyKSxwPWYuc2hhcGUsZD1mLmhvbGVzO1pjLmlzQ2xvY2tXaXNlKHApPT09ITEmJihwPXAucmV2ZXJzZSgpKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107WmMuaXNDbG9ja1dpc2UoeCk9PT0hMCYmKGRbX109eC5yZXZlcnNlKCkpfWxldCBnPVpjLnRyaWFuZ3VsYXRlU2hhcGUocCxkKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107cD1wLmNvbmNhdCh4KX1mb3IobGV0IF89MCx5PXAubGVuZ3RoO188eTtfKyspe2xldCB4PXBbX107aS5wdXNoKHgueCx4LnksMCksby5wdXNoKDAsMCwxKSxhLnB1c2goeC54LHgueSl9Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1nW19dLGI9eFswXStoLFM9eFsxXStoLEM9eFsyXStoO24ucHVzaChiLFMsQyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLHI9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gYzByKHIsdCl9c3RhdGljIGZyb21KU09OKHQscil7bGV0IG49W107Zm9yKGxldCBpPTAsbz10LnNoYXBlcy5sZW5ndGg7aTxvO2krKyl7bGV0IGE9clt0LnNoYXBlc1tpXV07bi5wdXNoKGEpfXJldHVybiBuZXcgWTAobix0LmN1cnZlU2VnbWVudHMpfX07ZnVuY3Rpb24gYzByKGUsdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2xldCBpPWVbcl07dC5zaGFwZXMucHVzaChpLnV1aWQpfWVsc2UgdC5zaGFwZXMucHVzaChlLnV1aWQpO3JldHVybiB0fXZhciBqMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTMyLG49MTYsaT0wLG89TWF0aC5QSSoyLGE9MCxzPU1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJTcGhlcmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx3aWR0aFNlZ21lbnRzOnIsaGVpZ2h0U2VnbWVudHM6bixwaGlTdGFydDppLHBoaUxlbmd0aDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfSxyPU1hdGgubWF4KDMsTWF0aC5mbG9vcihyKSksbj1NYXRoLm1heCgyLE1hdGguZmxvb3IobikpO2xldCBsPU1hdGgubWluKGErcyxNYXRoLlBJKSxjPTAsdT1bXSxoPW5ldyBqLGY9bmV3IGoscD1bXSxkPVtdLGc9W10sXz1bXTtmb3IobGV0IHk9MDt5PD1uO3krKyl7bGV0IHg9W10sYj15L24sUz0wO3k9PTAmJmE9PTA/Uz0uNS9yOnk9PW4mJmw9PU1hdGguUEkmJihTPS0uNS9yKTtmb3IobGV0IEM9MDtDPD1yO0MrKyl7bGV0IFA9Qy9yO2gueD0tdCpNYXRoLmNvcyhpK1AqbykqTWF0aC5zaW4oYStiKnMpLGgueT10Kk1hdGguY29zKGErYipzKSxoLno9dCpNYXRoLnNpbihpK1AqbykqTWF0aC5zaW4oYStiKnMpLGQucHVzaChoLngsaC55LGgueiksZi5jb3B5KGgpLm5vcm1hbGl6ZSgpLGcucHVzaChmLngsZi55LGYueiksXy5wdXNoKFArUywxLWIpLHgucHVzaChjKyspfXUucHVzaCh4KX1mb3IobGV0IHk9MDt5PG47eSsrKWZvcihsZXQgeD0wO3g8cjt4Kyspe2xldCBiPXVbeV1beCsxXSxTPXVbeV1beF0sQz11W3krMV1beF0sUD11W3krMV1beCsxXTsoeSE9PTB8fGE+MCkmJnAucHVzaChiLFMsUCksKHkhPT1uLTF8fGw8TWF0aC5QSSkmJnAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajAodC5yYWRpdXMsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5waGlTdGFydCx0LnBoaUxlbmd0aCx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxqMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPVsxLDEsMSwtMSwtMSwxLC0xLDEsLTEsMSwtMSwtMV0saT1bMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdO3N1cGVyKG4saSx0LHIpLHRoaXMudHlwZT0iVGV0cmFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajEodC5yYWRpdXMsdC5kZXRhaWwpfX0sWDE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0uNCxuPTgsaT02LG89TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx0dWJlOnIscmFkaWFsU2VnbWVudHM6bix0dWJ1bGFyU2VnbWVudHM6aSxhcmM6b30sbj1NYXRoLmZsb29yKG4pLGk9TWF0aC5mbG9vcihpKTtsZXQgYT1bXSxzPVtdLGw9W10sYz1bXSx1PW5ldyBqLGg9bmV3IGosZj1uZXcgajtmb3IobGV0IHA9MDtwPD1uO3ArKylmb3IobGV0IGQ9MDtkPD1pO2QrKyl7bGV0IGc9ZC9pKm8sXz1wL24qTWF0aC5QSSoyO2gueD0odCtyKk1hdGguY29zKF8pKSpNYXRoLmNvcyhnKSxoLnk9KHQrcipNYXRoLmNvcyhfKSkqTWF0aC5zaW4oZyksaC56PXIqTWF0aC5zaW4oXykscy5wdXNoKGgueCxoLnksaC56KSx1Lng9dCpNYXRoLmNvcyhnKSx1Lnk9dCpNYXRoLnNpbihnKSxmLnN1YlZlY3RvcnMoaCx1KS5ub3JtYWxpemUoKSxsLnB1c2goZi54LGYueSxmLnopLGMucHVzaChkL2kpLGMucHVzaChwL24pfWZvcihsZXQgcD0xO3A8PW47cCsrKWZvcihsZXQgZD0xO2Q8PWk7ZCsrKXtsZXQgZz0oaSsxKSpwK2QtMSxfPShpKzEpKihwLTEpK2QtMSx5PShpKzEpKihwLTEpK2QseD0oaSsxKSpwK2Q7YS5wdXNoKGcsXyx4KSxhLnB1c2goXyx5LHgpfXRoaXMuc2V0SW5kZXgoYSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGMsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFgxKHQucmFkaXVzLHQudHViZSx0LnJhZGlhbFNlZ21lbnRzLHQudHVidWxhclNlZ21lbnRzLHQuYXJjKX19LCQxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9LjQsbj02NCxpPTgsbz0yLGE9Myl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6cix0dWJ1bGFyU2VnbWVudHM6bixyYWRpYWxTZWdtZW50czppLHA6byxxOmF9LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD1uZXcgaixmPW5ldyBqLHA9bmV3IGosZD1uZXcgaixnPW5ldyBqLF89bmV3IGoseT1uZXcgajtmb3IobGV0IGI9MDtiPD1uOysrYil7bGV0IFM9Yi9uKm8qTWF0aC5QSSoyO3goUyxvLGEsdCxwKSx4KFMrLjAxLG8sYSx0LGQpLF8uc3ViVmVjdG9ycyhkLHApLHkuYWRkVmVjdG9ycyhkLHApLGcuY3Jvc3NWZWN0b3JzKF8seSkseS5jcm9zc1ZlY3RvcnMoZyxfKSxnLm5vcm1hbGl6ZSgpLHkubm9ybWFsaXplKCk7Zm9yKGxldCBDPTA7Qzw9aTsrK0Mpe2xldCBQPUMvaSpNYXRoLlBJKjIsaz0tcipNYXRoLmNvcyhQKSxPPXIqTWF0aC5zaW4oUCk7aC54PXAueCsoayp5LngrTypnLngpLGgueT1wLnkrKGsqeS55K08qZy55KSxoLno9cC56KyhrKnkueitPKmcueiksbC5wdXNoKGgueCxoLnksaC56KSxmLnN1YlZlY3RvcnMoaCxwKS5ub3JtYWxpemUoKSxjLnB1c2goZi54LGYueSxmLnopLHUucHVzaChiL24pLHUucHVzaChDL2kpfX1mb3IobGV0IGI9MTtiPD1uO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztzLnB1c2goQyxQLE8pLHMucHVzaChQLGssTyl9dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSk7ZnVuY3Rpb24geChiLFMsQyxQLGspe2xldCBPPU1hdGguY29zKGIpLEQ9TWF0aC5zaW4oYiksQj1DL1MqYixJPU1hdGguY29zKEIpO2sueD1QKigyK0kpKi41Kk8say55PVAqKDIrSSkqRCouNSxrLno9UCpNYXRoLnNpbihCKSouNX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgJDEodC5yYWRpdXMsdC50dWJlLHQudHVidWxhclNlZ21lbnRzLHQucmFkaWFsU2VnbWVudHMsdC5wLHQucSl9fSxLMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IGhNKG5ldyBqKC0xLC0xLDApLG5ldyBqKC0xLDEsMCksbmV3IGooMSwxLDApKSxyPTY0LG49MSxpPTgsbz0hMSl7c3VwZXIoKSx0aGlzLnR5cGU9IlR1YmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtwYXRoOnQsdHVidWxhclNlZ21lbnRzOnIscmFkaXVzOm4scmFkaWFsU2VnbWVudHM6aSxjbG9zZWQ6b307bGV0IGE9dC5jb21wdXRlRnJlbmV0RnJhbWVzKHIsbyk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzLHRoaXMubm9ybWFscz1hLm5vcm1hbHMsdGhpcy5iaW5vcm1hbHM9YS5iaW5vcm1hbHM7bGV0IHM9bmV3IGosbD1uZXcgaixjPW5ldyBMdCx1PW5ldyBqLGg9W10sZj1bXSxwPVtdLGQ9W107ZygpLHRoaXMuc2V0SW5kZXgoZCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHAsMikpO2Z1bmN0aW9uIGcoKXtmb3IobGV0IGI9MDtiPHI7YisrKV8oYik7XyhvPT09ITE/cjowKSx4KCkseSgpfWZ1bmN0aW9uIF8oYil7dT10LmdldFBvaW50QXQoYi9yLHUpO2xldCBTPWEubm9ybWFsc1tiXSxDPWEuYmlub3JtYWxzW2JdO2ZvcihsZXQgUD0wO1A8PWk7UCsrKXtsZXQgaz1QL2kqTWF0aC5QSSoyLE89TWF0aC5zaW4oayksRD0tTWF0aC5jb3Moayk7bC54PUQqUy54K08qQy54LGwueT1EKlMueStPKkMueSxsLno9RCpTLnorTypDLnosbC5ub3JtYWxpemUoKSxmLnB1c2gobC54LGwueSxsLnopLHMueD11LngrbipsLngscy55PXUueStuKmwueSxzLno9dS56K24qbC56LGgucHVzaChzLngscy55LHMueil9fWZ1bmN0aW9uIHkoKXtmb3IobGV0IGI9MTtiPD1yO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztkLnB1c2goQyxQLE8pLGQucHVzaChQLGssTyl9fWZ1bmN0aW9uIHgoKXtmb3IobGV0IGI9MDtiPD1yO2IrKylmb3IobGV0IFM9MDtTPD1pO1MrKyljLng9Yi9yLGMueT1TL2kscC5wdXNoKGMueCxjLnkpfX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5wYXRoPXRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpLHR9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSzEobmV3IE9odFt0LnBhdGgudHlwZV0oKS5mcm9tSlNPTih0LnBhdGgpLHQudHVidWxhclNlZ21lbnRzLHQucmFkaXVzLHQucmFkaWFsU2VnbWVudHMsdC5jbG9zZWQpfX0sZDY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PW51bGwpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJXaXJlZnJhbWVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtnZW9tZXRyeTp0fSx0IT09bnVsbCl7bGV0IHI9W10sbj1uZXcgU2V0LGk9bmV3IGosbz1uZXcgajtpZih0LmluZGV4IT09bnVsbCl7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLHM9dC5pbmRleCxsPXQuZ3JvdXBzO2wubGVuZ3RoPT09MCYmKGw9W3tzdGFydDowLGNvdW50OnMuY291bnQsbWF0ZXJpYWxJbmRleDowfV0pO2ZvcihsZXQgYz0wLHU9bC5sZW5ndGg7Yzx1OysrYyl7bGV0IGg9bFtjXSxmPWguc3RhcnQscD1oLmNvdW50O2ZvcihsZXQgZD1mLGc9ZitwO2Q8ZztkKz0zKWZvcihsZXQgXz0wO188MztfKyspe2xldCB5PXMuZ2V0WChkK18pLHg9cy5nZXRYKGQrKF8rMSklMyk7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGEseSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGEseCkseWhlKGksbyxuKT09PSEwJiYoci5wdXNoKGkueCxpLnksaS56KSxyLnB1c2goby54LG8ueSxvLnopKX19fWVsc2V7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGw9YS5jb3VudC8zO3M8bDtzKyspZm9yKGxldCBjPTA7YzwzO2MrKyl7bGV0IHU9MypzK2MsaD0zKnMrKGMrMSklMztpLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxoKSx5aGUoaSxvLG4pPT09ITAmJihyLnB1c2goaS54LGkueSxpLnopLHIucHVzaChvLngsby55LG8ueikpfX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKX19fTtmdW5jdGlvbiB5aGUoZSx0LHIpe2xldCBuPWAke2UueH0sJHtlLnl9LCR7ZS56fS0ke3QueH0sJHt0Lnl9LCR7dC56fWAsaT1gJHt0Lnh9LCR7dC55fSwke3Quen0tJHtlLnh9LCR7ZS55fSwke2Uuen1gO3JldHVybiByLmhhcyhuKT09PSEwfHxyLmhhcyhpKT09PSEwPyExOihyLmFkZChuLGkpLCEwKX12YXIgdmhlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJveEdlb21ldHJ5OlFmLEJveEJ1ZmZlckdlb21ldHJ5OlFmLENpcmNsZUdlb21ldHJ5OkYxLENpcmNsZUJ1ZmZlckdlb21ldHJ5OkYxLENvbmVHZW9tZXRyeTpCMSxDb25lQnVmZmVyR2VvbWV0cnk6QjEsQ3lsaW5kZXJHZW9tZXRyeTpvbSxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5Om9tLERvZGVjYWhlZHJvbkdlb21ldHJ5OkgxLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OkgxLEVkZ2VzR2VvbWV0cnk6czYsRXh0cnVkZUdlb21ldHJ5OmhoLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpoaCxJY29zYWhlZHJvbkdlb21ldHJ5OkcxLEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6RzEsTGF0aGVHZW9tZXRyeTpXMSxMYXRoZUJ1ZmZlckdlb21ldHJ5OlcxLE9jdGFoZWRyb25HZW9tZXRyeTpXMCxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6VzAsUGxhbmVHZW9tZXRyeTpWMCxQbGFuZUJ1ZmZlckdlb21ldHJ5OlYwLFBvbHloZWRyb25HZW9tZXRyeTp1aCxQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6dWgsUmluZ0dlb21ldHJ5OlkxLFJpbmdCdWZmZXJHZW9tZXRyeTpZMSxTaGFwZUdlb21ldHJ5OlkwLFNoYXBlQnVmZmVyR2VvbWV0cnk6WTAsU3BoZXJlR2VvbWV0cnk6ajAsU3BoZXJlQnVmZmVyR2VvbWV0cnk6ajAsVGV0cmFoZWRyb25HZW9tZXRyeTpqMSxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OmoxLFRvcnVzR2VvbWV0cnk6WDEsVG9ydXNCdWZmZXJHZW9tZXRyeTpYMSxUb3J1c0tub3RHZW9tZXRyeTokMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTokMSxUdWJlR2VvbWV0cnk6SzEsVHViZUJ1ZmZlckdlb21ldHJ5OksxLFdpcmVmcmFtZUdlb21ldHJ5OmQ2fSksbTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O202LnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciBwTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBuZSgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtwTS5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMDt2YXIgZzY9Y2xhc3MgZXh0ZW5kcyBwTXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBabygyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24ocil7dGhpcy5pb3I9KDErLjQqcikvKDEtLjQqcil9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBuZSgwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgbmUoMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBuZSgxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX07ZzYucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITA7dmFyIF82PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgbmUoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtfNi5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgeTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt5Ni5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwO3ZhciB2Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07djYucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3ZhciB4Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPU82LHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3g2LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dmFyIGI2PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O2I2LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgdzY9Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt3Ni5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIHUwcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxTaGFkb3dNYXRlcmlhbDptNixTcHJpdGVNYXRlcmlhbDppTSxSYXdTaGFkZXJNYXRlcmlhbDpVMCxTaGFkZXJNYXRlcmlhbDpsaCxQb2ludHNNYXRlcmlhbDpubSxNZXNoUGh5c2ljYWxNYXRlcmlhbDpnNixNZXNoU3RhbmRhcmRNYXRlcmlhbDpwTSxNZXNoUGhvbmdNYXRlcmlhbDpfNixNZXNoVG9vbk1hdGVyaWFsOnk2LE1lc2hOb3JtYWxNYXRlcmlhbDp2NixNZXNoTGFtYmVydE1hdGVyaWFsOng2LE1lc2hEZXB0aE1hdGVyaWFsOmVNLE1lc2hEaXN0YW5jZU1hdGVyaWFsOnJNLE1lc2hCYXNpY01hdGVyaWFsOnNoLE1lc2hNYXRjYXBNYXRlcmlhbDpiNixMaW5lRGFzaGVkTWF0ZXJpYWw6dzYsTGluZUJhc2ljTWF0ZXJpYWw6R2ksTWF0ZXJpYWw6cWl9KSxZbj17YXJyYXlTbGljZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIFluLmlzVHlwZWRBcnJheShlKT9uZXcgZS5jb25zdHJ1Y3RvcihlLnN1YmFycmF5KHQsciE9PXZvaWQgMD9yOmUubGVuZ3RoKSk6ZS5zbGljZSh0LHIpfSxjb252ZXJ0QXJyYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiFlfHwhciYmZS5jb25zdHJ1Y3Rvcj09PXQ/ZTp0eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD09Im51bWJlciI/bmV3IHQoZSk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSl9LGlzVHlwZWRBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLG8pe3JldHVybiBlW2ldLWVbb119bGV0IHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7Zm9yKGxldCBpPTA7aSE9PXI7KytpKW5baV09aTtyZXR1cm4gbi5zb3J0KHQpLG59LHNvcnRlZEFycmF5OmZ1bmN0aW9uKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPW5ldyBlLmNvbnN0cnVjdG9yKG4pO2ZvcihsZXQgbz0wLGE9MDthIT09bjsrK28pe2xldCBzPXJbb10qdDtmb3IobGV0IGw9MDtsIT09dDsrK2wpaVthKytdPWVbcytsXX1yZXR1cm4gaX0sZmxhdHRlbkpTT046ZnVuY3Rpb24oZSx0LHIsbil7bGV0IGk9MSxvPWVbMF07Zm9yKDtvIT09dm9pZCAwJiZvW25dPT09dm9pZCAwOylvPWVbaSsrXTtpZihvPT09dm9pZCAwKXJldHVybjtsZXQgYT1vW25dO2lmKGEhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShhKSlkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaC5hcHBseShyLGEpKSxvPWVbaSsrXTt3aGlsZShvIT09dm9pZCAwKTtlbHNlIGlmKGEudG9BcnJheSE9PXZvaWQgMClkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLGEudG9BcnJheShyLHIubGVuZ3RoKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCk7ZWxzZSBkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaChhKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCl9LHN1YmNsaXA6ZnVuY3Rpb24oZSx0LHIsbixpPTMwKXtsZXQgbz1lLmNsb25lKCk7by5uYW1lPXQ7bGV0IGE9W107Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKXtsZXQgYz1vLnRyYWNrc1tsXSx1PWMuZ2V0VmFsdWVTaXplKCksaD1bXSxmPVtdO2ZvcihsZXQgcD0wO3A8Yy50aW1lcy5sZW5ndGg7KytwKXtsZXQgZD1jLnRpbWVzW3BdKmk7aWYoIShkPHJ8fGQ+PW4pKXtoLnB1c2goYy50aW1lc1twXSk7Zm9yKGxldCBnPTA7Zzx1OysrZylmLnB1c2goYy52YWx1ZXNbcCp1K2ddKX19aC5sZW5ndGghPT0wJiYoYy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkoaCxjLnRpbWVzLmNvbnN0cnVjdG9yKSxjLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkoZixjLnZhbHVlcy5jb25zdHJ1Y3RvciksYS5wdXNoKGMpKX1vLnRyYWNrcz1hO2xldCBzPTEvMDtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpcz5vLnRyYWNrc1tsXS50aW1lc1swXSYmKHM9by50cmFja3NbbF0udGltZXNbMF0pO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClvLnRyYWNrc1tsXS5zaGlmdCgtMSpzKTtyZXR1cm4gby5yZXNldER1cmF0aW9uKCksb30sbWFrZUNsaXBBZGRpdGl2ZTpmdW5jdGlvbihlLHQ9MCxyPWUsbj0zMCl7bjw9MCYmKG49MzApO2xldCBpPXIudHJhY2tzLmxlbmd0aCxvPXQvbjtmb3IobGV0IGE9MDthPGk7KythKXtsZXQgcz1yLnRyYWNrc1thXSxsPXMuVmFsdWVUeXBlTmFtZTtpZihsPT09ImJvb2wifHxsPT09InN0cmluZyIpY29udGludWU7bGV0IGM9ZS50cmFja3MuZmluZChmdW5jdGlvbih5KXtyZXR1cm4geS5uYW1lPT09cy5uYW1lJiZ5LlZhbHVlVHlwZU5hbWU9PT1sfSk7aWYoYz09PXZvaWQgMCljb250aW51ZTtsZXQgdT0wLGg9cy5nZXRWYWx1ZVNpemUoKTtzLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYodT1oLzMpO2xldCBmPTAscD1jLmdldFZhbHVlU2l6ZSgpO2MuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihmPXAvMyk7bGV0IGQ9cy50aW1lcy5sZW5ndGgtMSxnO2lmKG88PXMudGltZXNbMF0pe2xldCB5PXUseD1oLXU7Zz1Zbi5hcnJheVNsaWNlKHMudmFsdWVzLHkseCl9ZWxzZSBpZihvPj1zLnRpbWVzW2RdKXtsZXQgeT1kKmgrdSx4PXkraC11O2c9WW4uYXJyYXlTbGljZShzLnZhbHVlcyx5LHgpfWVsc2V7bGV0IHk9cy5jcmVhdGVJbnRlcnBvbGFudCgpLHg9dSxiPWgtdTt5LmV2YWx1YXRlKG8pLGc9WW4uYXJyYXlTbGljZSh5LnJlc3VsdEJ1ZmZlcix4LGIpfWw9PT0icXVhdGVybmlvbiImJm5ldyB5aSgpLmZyb21BcnJheShnKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KGcpO2xldCBfPWMudGltZXMubGVuZ3RoO2ZvcihsZXQgeT0wO3k8XzsrK3kpe2xldCB4PXkqcCtmO2lmKGw9PT0icXVhdGVybmlvbiIpeWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMseCxnLDAsYy52YWx1ZXMseCk7ZWxzZXtsZXQgYj1wLWYqMjtmb3IobGV0IFM9MDtTPGI7KytTKWMudmFsdWVzW3grU10tPWdbU119fX1yZXR1cm4gZS5ibGVuZE1vZGU9a2h0LGV9fSxmaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9aSE9PXZvaWQgMD9pOm5ldyByLmNvbnN0cnVjdG9yKG4pLHRoaXMuc2FtcGxlVmFsdWVzPXIsdGhpcy52YWx1ZVNpemU9bix0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG49dGhpcy5fY2FjaGVkSW5kZXgsaT1yW25dLG89cltuLTFdO3Q6e2U6e2xldCBhO3I6e246aWYoISh0PGkpKXtmb3IobGV0IHM9bisyOzspe2lmKGk9PT12b2lkIDApe2lmKHQ8bylicmVhayBuO3JldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLHQsbyl9aWYobj09PXMpYnJlYWs7aWYobz1pLGk9clsrK25dLHQ8aSlicmVhayBlfWE9ci5sZW5ndGg7YnJlYWsgcn1pZighKHQ+PW8pKXtsZXQgcz1yWzFdO3Q8cyYmKG49MixvPXMpO2ZvcihsZXQgbD1uLTI7Oyl7aWYobz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYobj09PWwpYnJlYWs7aWYoaT1vLG89clstLW4tMV0sdD49bylicmVhayBlfWE9bixuPTA7YnJlYWsgcn1icmVhayB0fWZvcig7bjxhOyl7bGV0IHM9bithPj4+MTt0PHJbc10/YT1zOm49cysxfWlmKGk9cltuXSxvPXJbbi0xXSxvPT09dm9pZCAwKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxpKTtpZihpPT09dm9pZCAwKXJldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmludGVydmFsQ2hhbmdlZF8obixvLGkpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhuLG8sdCxpKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IHI9dGhpcy5yZXN1bHRCdWZmZXIsbj10aGlzLnNhbXBsZVZhbHVlcyxpPXRoaXMudmFsdWVTaXplLG89dCppO2ZvcihsZXQgYT0wO2EhPT1pOysrYSlyW2FdPW5bbythXTtyZXR1cm4gcn1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O2ZoLnByb3RvdHlwZS5iZWZvcmVTdGFydF89ZmgucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87ZmgucHJvdG90eXBlLmFmdGVyRW5kXz1maC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgU1U9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfX1pbnRlcnZhbENoYW5nZWRfKHQscixuKXtsZXQgaT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixhPXQrMSxzPWlbb10sbD1pW2FdO2lmKHM9PT12b2lkIDApc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgVDE6bz10LHM9MipyLW47YnJlYWs7Y2FzZSBKUDpvPWkubGVuZ3RoLTIscz1yK2lbb10taVtvKzFdO2JyZWFrO2RlZmF1bHQ6bz10LHM9bn1pZihsPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSBUMTphPXQsbD0yKm4tcjticmVhaztjYXNlIEpQOmE9MSxsPW4raVsxXS1pWzBdO2JyZWFrO2RlZmF1bHQ6YT10LTEsbD1yfWxldCBjPShuLXIpKi41LHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhyLXMpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1uKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PWEqdX1pbnRlcnBvbGF0ZV8odCxyLG4saSl7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxzPXRoaXMudmFsdWVTaXplLGw9dCpzLGM9bC1zLHU9dGhpcy5fb2Zmc2V0UHJldixoPXRoaXMuX29mZnNldE5leHQsZj10aGlzLl93ZWlnaHRQcmV2LHA9dGhpcy5fd2VpZ2h0TmV4dCxkPShuLXIpLyhpLXIpLGc9ZCpkLF89ZypkLHk9LWYqXysyKmYqZy1mKmQseD0oMStmKSpfKygtMS41LTIqZikqZysoLS41K2YpKmQrMSxiPSgtMS1wKSpfKygxLjUrcCkqZysuNSpkLFM9cCpfLXAqZztmb3IobGV0IEM9MDtDIT09czsrK0Mpb1tDXT15KmFbdStDXSt4KmFbYytDXStiKmFbbCtDXStTKmFbaCtDXTtyZXR1cm4gb319LFM2PWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSl9aW50ZXJwb2xhdGVfKHQscixuLGkpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyx1PShuLXIpLyhpLXIpLGg9MS11O2ZvcihsZXQgZj0wO2YhPT1zOysrZilvW2ZdPWFbYytmXSpoK2FbbCtmXSp1O3JldHVybiBvfX0sTVU9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRGw9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYocj09PXZvaWQgMHx8ci5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkocix0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkobix0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKGl8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IHI9dC5jb25zdHJ1Y3RvcixuO2lmKHIudG9KU09OIT09dGhpcy50b0pTT04pbj1yLnRvSlNPTih0KTtlbHNle249e25hbWU6dC5uYW1lLHRpbWVzOlluLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6WW4uY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IGk9dC5nZXRJbnRlcnBvbGF0aW9uKCk7aSE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihuLmludGVycG9sYXRpb249aSl9cmV0dXJuIG4udHlwZT10LlZhbHVlVHlwZU5hbWUsbn1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IE1VKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBTNih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgU1UodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IHI7c3dpdGNoKHQpe2Nhc2UgS1A6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgWlA6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjticmVhaztjYXNlIHJVOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7YnJlYWt9aWYocj09PXZvaWQgMCl7bGV0IG49InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodGhpcy5jcmVhdGVJbnRlcnBvbGFudD09PXZvaWQgMClpZih0IT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3Iobik7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLG4pLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9cix0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiBLUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBaUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiByVX19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZih0IT09MCl7bGV0IHI9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbilyW25dKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKHQhPT0xKXtsZXQgcj10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7biE9PWk7KytuKXJbbl0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LHIpe2xldCBuPXRoaXMudGltZXMsaT1uLmxlbmd0aCxvPTAsYT1pLTE7Zm9yKDtvIT09aSYmbltvXTx0OykrK287Zm9yKDthIT09LTEmJm5bYV0+cjspLS1hO2lmKCsrYSxvIT09MHx8YSE9PWkpe28+PWEmJihhPU1hdGgubWF4KGEsMSksbz1hLTEpO2xldCBzPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKG4sbyxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qcyxhKnMpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAscj10aGlzLmdldFZhbHVlU2l6ZSgpO3ItTWF0aC5mbG9vcihyKSE9PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSx0PSExKTtsZXQgbj10aGlzLnRpbWVzLGk9dGhpcy52YWx1ZXMsbz1uLmxlbmd0aDtvPT09MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRyYWNrIGlzIGVtcHR5LiIsdGhpcyksdD0hMSk7bGV0IGE9bnVsbDtmb3IobGV0IHM9MDtzIT09bztzKyspe2xldCBsPW5bc107aWYodHlwZW9mIGw9PSJudW1iZXIiJiZpc05hTihsKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHMsbCksdD0hMTticmVha31pZihhIT09bnVsbCYmYT5sKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMscyxsLGEpLHQ9ITE7YnJlYWt9YT1sfWlmKGkhPT12b2lkIDAmJlluLmlzVHlwZWRBcnJheShpKSlmb3IobGV0IHM9MCxsPWkubGVuZ3RoO3MhPT1sOysrcyl7bGV0IGM9aVtzXTtpZihpc05hTihjKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxzLGMpLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7bGV0IHQ9WW4uYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxyPVluLmFycmF5U2xpY2UodGhpcy52YWx1ZXMpLG49dGhpcy5nZXRWYWx1ZVNpemUoKSxpPXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpPT09clUsbz10Lmxlbmd0aC0xLGE9MTtmb3IobGV0IHM9MTtzPG87KytzKXtsZXQgbD0hMSxjPXRbc10sdT10W3MrMV07aWYoYyE9PXUmJihzIT09MXx8YyE9PXRbMF0pKWlmKGkpbD0hMDtlbHNle2xldCBoPXMqbixmPWgtbixwPWgrbjtmb3IobGV0IGQ9MDtkIT09bjsrK2Qpe2xldCBnPXJbaCtkXTtpZihnIT09cltmK2RdfHxnIT09cltwK2RdKXtsPSEwO2JyZWFrfX19aWYobCl7aWYocyE9PWEpe3RbYV09dFtzXTtsZXQgaD1zKm4sZj1hKm47Zm9yKGxldCBwPTA7cCE9PW47KytwKXJbZitwXT1yW2grcF19KythfX1pZihvPjApe3RbYV09dFtvXTtmb3IobGV0IHM9bypuLGw9YSpuLGM9MDtjIT09bjsrK2MpcltsK2NdPXJbcytjXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKHQsMCxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHIsMCxhKm4pKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPXIpLHRoaXN9Y2xvbmUoKXtsZXQgdD1Zbi5hcnJheVNsaWNlKHRoaXMudGltZXMsMCkscj1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLG49dGhpcy5jb25zdHJ1Y3RvcixpPW5ldyBuKHRoaXMubmFtZSx0LHIpO3JldHVybiBpLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsaX19O0RsLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPVpQO3ZhciBhbT1jbGFzcyBleHRlbmRzIERse307YW0ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiO2FtLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXk7YW0ucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUtQO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBNNj1jbGFzcyBleHRlbmRzIERse307TTYucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgWjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O1oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBFVT1jbGFzcyBleHRlbmRzIGZoe2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKHQscixuLGkpfWludGVycG9sYXRlXyh0LHIsbixpKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD0obi1yKS8oaS1yKSxjPXQqcztmb3IobGV0IHU9YytzO2MhPT11O2MrPTQpeWkuc2xlcnBGbGF0KG8sMCxhLGMtcyxhLGMsbCk7cmV0dXJuIG99fSxYMD1jbGFzcyBleHRlbmRzIERse0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IEVVKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1gwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIjtYMC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249WlA7WDAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIHNtPWNsYXNzIGV4dGVuZHMgRGx7fTtzbS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ic3RyaW5nIjtzbS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3NtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1LUDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgSjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O0oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBRMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9LTEsbixpPSRVKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249cix0aGlzLmJsZW5kTW9kZT1pLHRoaXMudXVpZD1ObCgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCByPVtdLG49dC50cmFja3MsaT0xLyh0LmZwc3x8MSk7Zm9yKGxldCBhPTAscz1uLmxlbmd0aDthIT09czsrK2Epci5wdXNoKGYwcihuW2FdKS5zY2FsZShpKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24scix0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCByPVtdLG49dC50cmFja3MsaT17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6cix1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLGE9bi5sZW5ndGg7byE9PWE7KytvKXIucHVzaChEbC50b0pTT04obltvXSkpO3JldHVybiBpfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LHIsbixpKXtsZXQgbz1yLmxlbmd0aCxhPVtdO2ZvcihsZXQgcz0wO3M8bztzKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChzK28tMSklbyxzLChzKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IHU9WW4uZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPVluLnNvcnRlZEFycmF5KGwsMSx1KSxjPVluLnNvcnRlZEFycmF5KGMsMSx1KSwhaSYmbFswXT09PTAmJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxhLnB1c2gobmV3IFoxKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrcltzXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgdGhpcyh0LC0xLGEpfXN0YXRpYyBmaW5kQnlOYW1lKHQscil7bGV0IG49dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IGk9dDtuPWkuZ2VvbWV0cnkmJmkuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8aS5hbmltYXRpb25zfWZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKG5baV0ubmFtZT09PXIpcmV0dXJuIG5baV07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQscixuKXtsZXQgaT17fSxvPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrKyl7bGV0IGM9dFtzXSx1PWMubmFtZS5tYXRjaChvKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9aVtoXTtmfHwoaVtoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBhPVtdO2ZvcihsZXQgcyBpbiBpKWEucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHMsaVtzXSxyLG4pKTtyZXR1cm4gYX1zdGF0aWMgcGFyc2VBbmltYXRpb24odCxyKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBuPWZ1bmN0aW9uKGgsZixwLGQsZyl7aWYocC5sZW5ndGghPT0wKXtsZXQgXz1bXSx5PVtdO1luLmZsYXR0ZW5KU09OKHAsXyx5LGQpLF8ubGVuZ3RoIT09MCYmZy5wdXNoKG5ldyBoKGYsXyx5KSl9fSxpPVtdLG89dC5uYW1lfHwiZGVmYXVsdCIsYT10LmZwc3x8MzAscz10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBwPXt9LGQ7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKylpZihmW2RdLm1vcnBoVGFyZ2V0cylmb3IobGV0IGc9MDtnPGZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDtnKyspcFtmW2RdLm1vcnBoVGFyZ2V0c1tnXV09LTE7Zm9yKGxldCBnIGluIHApe2xldCBfPVtdLHk9W107Zm9yKGxldCB4PTA7eCE9PWZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3gpe2xldCBiPWZbZF07Xy5wdXNoKGIudGltZSkseS5wdXNoKGIubW9ycGhUYXJnZXQ9PT1nPzE6MCl9aS5wdXNoKG5ldyBaMSgiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIrZysiXSIsXyx5KSl9bD1wLmxlbmd0aCooYXx8MSl9ZWxzZXtsZXQgcD0iLmJvbmVzWyIrcltoXS5uYW1lKyJdIjtuKEoxLHArIi5wb3NpdGlvbiIsZiwicG9zIixpKSxuKFgwLHArIi5xdWF0ZXJuaW9uIixmLCJyb3QiLGkpLG4oSjEscCsiLnNjYWxlIixmLCJzY2wiLGkpfX1yZXR1cm4gaS5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMobyxsLGkscyl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLHI9MDtmb3IobGV0IG49MCxpPXQubGVuZ3RoO24hPT1pOysrbil7bGV0IG89dGhpcy50cmFja3Nbbl07cj1NYXRoLm1heChyLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPXIsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0PXQmJnRoaXMudHJhY2tzW3JdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0LnB1c2godGhpcy50cmFja3Nbcl0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGgwcihlKXtzd2l0Y2goZS50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBaMTtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIEoxO2Nhc2UiY29sb3IiOnJldHVybiBNNjtjYXNlInF1YXRlcm5pb24iOnJldHVybiBYMDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIGFtO2Nhc2Uic3RyaW5nIjpyZXR1cm4gc219dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIitlKX1mdW5jdGlvbiBmMHIoZSl7aWYoZS50eXBlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1oMHIoZS50eXBlKTtpZihlLnRpbWVzPT09dm9pZCAwKXtsZXQgcj1bXSxuPVtdO1luLmZsYXR0ZW5KU09OKGUua2V5cyxyLG4sInZhbHVlIiksZS50aW1lcz1yLGUudmFsdWVzPW59cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShlKTpuZXcgdChlLm5hbWUsZS50aW1lcyxlLnZhbHVlcyxlLmludGVycG9sYXRpb24pfXZhciB0eD17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbZV09dCl9LGdldDpmdW5jdGlvbihlKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tlXX0scmVtb3ZlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmZpbGVzW2VdfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxFNj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9dGhpcyxvPSExLGE9MCxzPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9cix0aGlzLm9uRXJyb3I9bix0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXtzKyssbz09PSExJiZpLm9uU3RhcnQhPT12b2lkIDAmJmkub25TdGFydCh1LGEscyksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe2ErKyxpLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJmkub25Qcm9ncmVzcyh1LGEscyksYT09PXMmJihvPSExLGkub25Mb2FkIT09dm9pZCAwJiZpLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7aS5vbkVycm9yIT09dm9pZCAwJiZpLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgcD1jW2hdLGQ9Y1toKzFdO2lmKHAuZ2xvYmFsJiYocC5sYXN0SW5kZXg9MCkscC50ZXN0KHUpKXJldHVybiBkfXJldHVybiBudWxsfX19LGlwZT1uZXcgRTYsZWE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tYW5hZ2VyPXQhPT12b2lkIDA/dDppcGUsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQscil7bGV0IG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXtuLmxvYWQodCxpLHIsbyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0sWWQ9e30sSmM9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXR4LmdldCh0KTtpZihvIT09dm9pZCAwKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntyJiZyKG8pLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxvO2lmKFlkW3RdIT09dm9pZCAwKXtZZFt0XS5wdXNoKHtvbkxvYWQ6cixvblByb2dyZXNzOm4sb25FcnJvcjppfSk7cmV0dXJufVlkW3RdPVtdLFlkW3RdLnB1c2goe29uTG9hZDpyLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KTtsZXQgYT1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxzPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChhKS50aGVuKGM9PntpZihjLnN0YXR1cz09PTIwMHx8Yy5zdGF0dXM9PT0wKXtpZihjLnN0YXR1cz09PTAmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJ1bmRlZmluZWQifHxjLmJvZHkuZ2V0UmVhZGVyPT09dm9pZCAwKXJldHVybiBjO2xldCB1PVlkW3RdLGg9Yy5ib2R5LmdldFJlYWRlcigpLGY9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxwPWY/cGFyc2VJbnQoZik6MCxkPXAhPT0wLGc9MCxfPW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoeSl7eCgpO2Z1bmN0aW9uIHgoKXtoLnJlYWQoKS50aGVuKCh7ZG9uZTpiLHZhbHVlOlN9KT0+e2lmKGIpeS5jbG9zZSgpO2Vsc2V7Zys9Uy5ieXRlTGVuZ3RoO2xldCBDPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6ZCxsb2FkZWQ6Zyx0b3RhbDpwfSk7Zm9yKGxldCBQPTAsaz11Lmxlbmd0aDtQPGs7UCsrKXtsZXQgTz11W1BdO08ub25Qcm9ncmVzcyYmTy5vblByb2dyZXNzKEMpfXkuZW5xdWV1ZShTKSx4KCl9fSl9fX0pO3JldHVybiBuZXcgUmVzcG9uc2UoXyl9ZWxzZSB0aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh1LHMpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHM9PT12b2lkIDApcmV0dXJuIGMudGV4dCgpO3tsZXQgaD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMocyksZj1oJiZoWzFdP2hbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAscD1uZXcgVGV4dERlY29kZXIoZik7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGQ9PnAuZGVjb2RlKGQpKX19fSkudGhlbihjPT57dHguYWRkKHQsYyk7bGV0IHU9WWRbdF07ZGVsZXRlIFlkW3RdO2ZvcihsZXQgaD0wLGY9dS5sZW5ndGg7aDxmO2grKyl7bGV0IHA9dVtoXTtwLm9uTG9hZCYmcC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVlkW3RdO2lmKHU9PT12b2lkIDApdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBZZFt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBwPXVbaF07cC5vbkVycm9yJiZwLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sb2h0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKHRoaXMubWFuYWdlcik7YS5zZXRQYXRoKHRoaXMucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT1RMS5wYXJzZSh0W25dKTtyLnB1c2goaSl9cmV0dXJuIHJ9fSxhaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1bXSxzPW5ldyBhNixsPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2wuc2V0UGF0aCh0aGlzLnBhdGgpLGwuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGwuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGwuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKTtsZXQgYz0wO2Z1bmN0aW9uIHUoaCl7bC5sb2FkKHRbaF0sZnVuY3Rpb24oZil7bGV0IHA9by5wYXJzZShmLCEwKTthW2hdPXt3aWR0aDpwLndpZHRoLGhlaWdodDpwLmhlaWdodCxmb3JtYXQ6cC5mb3JtYXQsbWlwbWFwczpwLm1pcG1hcHN9LGMrPTEsYz09PTYmJihwLm1pcG1hcENvdW50PT09MSYmKHMubWluRmlsdGVyPWlpKSxzLmltYWdlPWEscy5mb3JtYXQ9cC5mb3JtYXQscy5uZWVkc1VwZGF0ZT0hMCxyJiZyKHMpKX0sbixpKX1pZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgaD0wLGY9dC5sZW5ndGg7aDxmOysraCl1KGgpO2Vsc2UgbC5sb2FkKHQsZnVuY3Rpb24oaCl7bGV0IGY9by5wYXJzZShoLCEwKTtpZihmLmlzQ3ViZW1hcCl7bGV0IHA9Zi5taXBtYXBzLmxlbmd0aC9mLm1pcG1hcENvdW50O2ZvcihsZXQgZD0wO2Q8cDtkKyspe2FbZF09e21pcG1hcHM6W119O2ZvcihsZXQgZz0wO2c8Zi5taXBtYXBDb3VudDtnKyspYVtkXS5taXBtYXBzLnB1c2goZi5taXBtYXBzW2QqZi5taXBtYXBDb3VudCtnXSksYVtkXS5mb3JtYXQ9Zi5mb3JtYXQsYVtkXS53aWR0aD1mLndpZHRoLGFbZF0uaGVpZ2h0PWYuaGVpZ2h0fXMuaW1hZ2U9YX1lbHNlIHMuaW1hZ2Uud2lkdGg9Zi53aWR0aCxzLmltYWdlLmhlaWdodD1mLmhlaWdodCxzLm1pcG1hcHM9Zi5taXBtYXBzO2YubWlwbWFwQ291bnQ9PT0xJiYocy5taW5GaWx0ZXI9aWkpLHMuZm9ybWF0PWYuZm9ybWF0LHMubmVlZHNVcGRhdGU9ITAsciYmcihzKX0sbixpKTtyZXR1cm4gc319LGV4PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXt0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXRoaXMsYT10eC5nZXQodCk7aWYoYSE9PXZvaWQgMClyZXR1cm4gby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ciYmcihhKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksYTtsZXQgcz10NigiaW1nIik7ZnVuY3Rpb24gbCgpe3UoKSx0eC5hZGQodCx0aGlzKSxyJiZyKHRoaXMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGMoaCl7dSgpLGkmJmkoaCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiB1KCl7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKX1yZXR1cm4gcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKSx0LnN1YnN0cigwLDUpIT09ImRhdGE6IiYmdGhpcy5jcm9zc09yaWdpbiE9PXZvaWQgMCYmKHMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbiksby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzLnNyYz10LHN9fSxUVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IEgwLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7YS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxhLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgcz0wO2Z1bmN0aW9uIGwoYyl7YS5sb2FkKHRbY10sZnVuY3Rpb24odSl7by5pbWFnZXNbY109dSxzKysscz09PTYmJihvLm5lZWRzVXBkYXRlPSEwLHImJnIobykpfSx2b2lkIDAsaSl9Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDsrK2MpbChjKTtyZXR1cm4gb319LENVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpkLHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cmV0dXJuIHMuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihsKXtsZXQgYz1vLnBhcnNlKGwpOyFjfHwoYy5pbWFnZSE9PXZvaWQgMD9hLmltYWdlPWMuaW1hZ2U6Yy5kYXRhIT09dm9pZCAwJiYoYS5pbWFnZS53aWR0aD1jLndpZHRoLGEuaW1hZ2UuaGVpZ2h0PWMuaGVpZ2h0LGEuaW1hZ2UuZGF0YT1jLmRhdGEpLGEud3JhcFM9Yy53cmFwUyE9PXZvaWQgMD9jLndyYXBTOkpvLGEud3JhcFQ9Yy53cmFwVCE9PXZvaWQgMD9jLndyYXBUOkpvLGEubWFnRmlsdGVyPWMubWFnRmlsdGVyIT09dm9pZCAwP2MubWFnRmlsdGVyOmlpLGEubWluRmlsdGVyPWMubWluRmlsdGVyIT09dm9pZCAwP2MubWluRmlsdGVyOmlpLGEuYW5pc290cm9weT1jLmFuaXNvdHJvcHkhPT12b2lkIDA/Yy5hbmlzb3Ryb3B5OjEsYy5lbmNvZGluZyE9PXZvaWQgMCYmKGEuZW5jb2Rpbmc9Yy5lbmNvZGluZyksYy5mbGlwWSE9PXZvaWQgMCYmKGEuZmxpcFk9Yy5mbGlwWSksYy5mb3JtYXQhPT12b2lkIDAmJihhLmZvcm1hdD1jLmZvcm1hdCksYy50eXBlIT09dm9pZCAwJiYoYS50eXBlPWMudHlwZSksYy5taXBtYXBzIT09dm9pZCAwJiYoYS5taXBtYXBzPWMubWlwbWFwcyxhLm1pbkZpbHRlcj1veCksYy5taXBtYXBDb3VudD09PTEmJihhLm1pbkZpbHRlcj1paSksYy5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDAmJihhLmdlbmVyYXRlTWlwbWFwcz1jLmdlbmVyYXRlTWlwbWFwcyksYS5uZWVkc1VwZGF0ZT0hMCxyJiZyKGEsYykpfSxuLGkpLGF9fSxBVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IHZpLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7cmV0dXJuIGEuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCksYS5sb2FkKHQsZnVuY3Rpb24ocyl7by5pbWFnZT1zLG8ubmVlZHNVcGRhdGU9ITAsciE9PXZvaWQgMCYmcihvKX0sbixpKSxvfX0sT2w9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBuZSh0KSx0aGlzLmludGVuc2l0eT1yfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLHIub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx0aGlzLmdyb3VuZENvbG9yIT09dm9pZCAwJiYoci5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdGhpcy5kaXN0YW5jZSE9PXZvaWQgMCYmKHIub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHRoaXMuYW5nbGUhPT12b2lkIDAmJihyLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx0aGlzLmRlY2F5IT09dm9pZCAwJiYoci5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdGhpcy5wZW51bWJyYSE9PXZvaWQgMCYmKHIub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHRoaXMuc2hhZG93IT09dm9pZCAwJiYoci5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxyfX07T2wucHJvdG90eXBlLmlzTGlnaHQ9ITA7dmFyIFQ2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsbiksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgbmUocil9Y29weSh0KXtyZXR1cm4gT2wucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX07VDYucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciB4aGU9bmV3IE1lLGJoZT1uZXcgaix3aGU9bmV3IGosQzY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEx0KDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1lLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IE4xLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgTHQoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgZW4oMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IHI9dGhpcy5jYW1lcmEsbj10aGlzLm1hdHJpeDtiaGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLHIucG9zaXRpb24uY29weShiaGUpLHdoZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLHIubG9va0F0KHdoZSksci51cGRhdGVNYXRyaXhXb3JsZCgpLHhoZS5tdWx0aXBseU1hdHJpY2VzKHIucHJvamVjdGlvbk1hdHJpeCxyLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh4aGUpLG4uc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLG4ubXVsdGlwbHkoci5wcm9qZWN0aW9uTWF0cml4KSxuLm11bHRpcGx5KHIubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXt9O3JldHVybiB0aGlzLmJpYXMhPT0wJiYodC5iaWFzPXRoaXMuYmlhcyksdGhpcy5ub3JtYWxCaWFzIT09MCYmKHQubm9ybWFsQmlhcz10aGlzLm5vcm1hbEJpYXMpLHRoaXMucmFkaXVzIT09MSYmKHQucmFkaXVzPXRoaXMucmFkaXVzKSwodGhpcy5tYXBTaXplLnghPT01MTJ8fHRoaXMubWFwU2l6ZS55IT09NTEyKSYmKHQubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpKSx0LmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdCxkZWxldGUgdC5jYW1lcmEubWF0cml4LHR9fSxQVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpKDUwLDEsLjUsNTAwKSksdGhpcy5mb2N1cz0xfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCByPXRoaXMuY2FtZXJhLG49UVAqMip0LmFuZ2xlKnRoaXMuZm9jdXMsaT10aGlzLm1hcFNpemUud2lkdGgvdGhpcy5tYXBTaXplLmhlaWdodCxvPXQuZGlzdGFuY2V8fHIuZmFyOyhuIT09ci5mb3Z8fGkhPT1yLmFzcGVjdHx8byE9PXIuZmFyKSYmKHIuZm92PW4sci5hc3BlY3Q9aSxyLmZhcj1vLHIudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxzdXBlci51cGRhdGVNYXRyaWNlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzfX07UFUucHJvdG90eXBlLmlzU3BvdExpZ2h0U2hhZG93PSEwO3ZhciBBNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT1NYXRoLlBJLzMsbz0wLGE9MSl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5kaXN0YW5jZT1uLHRoaXMuYW5nbGU9aSx0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1hLHRoaXMuc2hhZG93PW5ldyBQVX1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtBNi5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIFNoZT1uZXcgTWUsQlA9bmV3IGoseHV0PW5ldyBqLElVPWNsYXNzIGV4dGVuZHMgQzZ7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVWkoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEx0KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGVuKDIsMSwxLDEpLG5ldyBlbigwLDEsMSwxKSxuZXcgZW4oMywxLDEsMSksbmV3IGVuKDEsMSwxLDEpLG5ldyBlbigzLDAsMSwxKSxuZXcgZW4oMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgaigxLDAsMCksbmV3IGooLTEsMCwwKSxuZXcgaigwLDAsMSksbmV3IGooMCwwLC0xKSxuZXcgaigwLDEsMCksbmV3IGooMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IGooMCwxLDApLG5ldyBqKDAsMSwwKSxuZXcgaigwLDEsMCksbmV3IGooMCwxLDApLG5ldyBqKDAsMCwxKSxuZXcgaigwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LHI9MCl7bGV0IG49dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fG4uZmFyO28hPT1uLmZhciYmKG4uZmFyPW8sbi51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLEJQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoQlApLHh1dC5jb3B5KG4ucG9zaXRpb24pLHh1dC5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbcl0pLG4udXAuY29weSh0aGlzLl9jdWJlVXBzW3JdKSxuLmxvb2tBdCh4dXQpLG4udXBkYXRlTWF0cml4V29ybGQoKSxpLm1ha2VUcmFuc2xhdGlvbigtQlAueCwtQlAueSwtQlAueiksU2hlLm11bHRpcGx5TWF0cmljZXMobi5wcm9qZWN0aW9uTWF0cml4LG4ubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KFNoZSl9fTtJVS5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBQNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT0xKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1uLHRoaXMuZGVjYXk9aSx0aGlzLnNoYWRvdz1uZXcgSVV9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtQNi5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBMVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IEQxKC01LDUsNSwtNSwuNSw1MDApKX19O0xVLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIEk2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5zaGFkb3c9bmV3IExVfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0k2LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIEw2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0w2LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgazY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0xMCxpPTEwKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PWl9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsci5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LHJ9fTtrNi5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBSNj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgail9c2V0KHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspdGhpcy5jb2VmZmljaWVudHNbcl0uY29weSh0W3JdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQscil7bGV0IG49dC54LGk9dC55LG89dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIHIuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxyLmFkZFNjYWxlZFZlY3RvcihhWzFdLC40ODg2MDMqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwuNDg4NjAzKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbM10sLjQ4ODYwMypuKSxyLmFkZFNjYWxlZFZlY3RvcihhWzRdLDEuMDkyNTQ4KihuKmkpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDEuMDkyNTQ4KihpKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzddLDEuMDkyNTQ4KihuKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC41NDYyNzQqKG4qbi1pKmkpKSxyfWdldElycmFkaWFuY2VBdCh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiByLmNvcHkoYVswXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksci5hZGRTY2FsZWRWZWN0b3IoYVsxXSwyKi41MTE2NjQqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwyKi41MTE2NjQqbyksci5hZGRTY2FsZWRWZWN0b3IoYVszXSwyKi41MTE2NjQqbiksci5hZGRTY2FsZWRWZWN0b3IoYVs0XSwyKi40MjkwNDMqbippKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDIqLjQyOTA0MyppKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksci5hZGRTY2FsZWRWZWN0b3IoYVs3XSwyKi40MjkwNDMqbipvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC40MjkwNDMqKG4qbi1pKmkpKSxyfWFkZCh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLmFkZCh0LmNvZWZmaWNpZW50c1tyXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tuXSxyKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmxlcnAodC5jb2VmZmljaWVudHNbbl0scik7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW3JdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tyXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxyPTApe2xldCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS5mcm9tQXJyYXkodCxyK2kqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCBpPTA7aTw5O2krKyluW2ldLnRvQXJyYXkodCxyK2kqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxyKXtsZXQgbj10LngsaT10Lnksbz10Lno7clswXT0uMjgyMDk1LHJbMV09LjQ4ODYwMyppLHJbMl09LjQ4ODYwMypvLHJbM109LjQ4ODYwMypuLHJbNF09MS4wOTI1NDgqbippLHJbNV09MS4wOTI1NDgqaSpvLHJbNl09LjMxNTM5MiooMypvKm8tMSkscls3XT0xLjA5MjU0OCpuKm8scls4XT0uNTQ2Mjc0KihuKm4taSppKX19O1I2LnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIHJ4PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodD1uZXcgUjYscj0xKXtzdXBlcih2b2lkIDAsciksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCkscn19O3J4LnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIGtVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50ZXh0dXJlcz17fX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9dGhpcy50ZXh0dXJlcztmdW5jdGlvbiBuKG8pe3JldHVybiByW29dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsbykscltvXX1sZXQgaT1uZXcgdTByW3QudHlwZV07aWYodC51dWlkIT09dm9pZCAwJiYoaS51dWlkPXQudXVpZCksdC5uYW1lIT09dm9pZCAwJiYoaS5uYW1lPXQubmFtZSksdC5jb2xvciE9PXZvaWQgMCYmaS5jb2xvciE9PXZvaWQgMCYmaS5jb2xvci5zZXRIZXgodC5jb2xvciksdC5yb3VnaG5lc3MhPT12b2lkIDAmJihpLnJvdWdobmVzcz10LnJvdWdobmVzcyksdC5tZXRhbG5lc3MhPT12b2lkIDAmJihpLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdC5zaGVlbiE9PXZvaWQgMCYmKGkuc2hlZW49dC5zaGVlbiksdC5zaGVlbkNvbG9yIT09dm9pZCAwJiYoaS5zaGVlbkNvbG9yPW5ldyBuZSgpLnNldEhleCh0LnNoZWVuQ29sb3IpKSx0LnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzKSx0LmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlLnNldEhleCh0LmVtaXNzaXZlKSx0LnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyLnNldEhleCh0LnNwZWN1bGFyKSx0LnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYoaS5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5KSx0LnNwZWN1bGFyQ29sb3IhPT12b2lkIDAmJmkuc3BlY3VsYXJDb2xvciE9PXZvaWQgMCYmaS5zcGVjdWxhckNvbG9yLnNldEhleCh0LnNwZWN1bGFyQ29sb3IpLHQuc2hpbmluZXNzIT09dm9pZCAwJiYoaS5zaGluaW5lc3M9dC5zaGluaW5lc3MpLHQuY2xlYXJjb2F0IT09dm9pZCAwJiYoaS5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQpLHQuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MpLHQudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24pLHQudGhpY2tuZXNzIT09dm9pZCAwJiYoaS50aGlja25lc3M9dC50aGlja25lc3MpLHQuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UpLHQuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmaS5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiZpLmF0dGVudWF0aW9uQ29sb3Iuc2V0SGV4KHQuYXR0ZW51YXRpb25Db2xvciksdC5mb2chPT12b2lkIDAmJihpLmZvZz10LmZvZyksdC5mbGF0U2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdC5ibGVuZGluZyE9PXZvaWQgMCYmKGkuYmxlbmRpbmc9dC5ibGVuZGluZyksdC5jb21iaW5lIT09dm9pZCAwJiYoaS5jb21iaW5lPXQuY29tYmluZSksdC5zaWRlIT09dm9pZCAwJiYoaS5zaWRlPXQuc2lkZSksdC5zaGFkb3dTaWRlIT09dm9pZCAwJiYoaS5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSksdC5vcGFjaXR5IT09dm9pZCAwJiYoaS5vcGFjaXR5PXQub3BhY2l0eSksdC50cmFuc3BhcmVudCE9PXZvaWQgMCYmKGkudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdC5hbHBoYVRlc3QhPT12b2lkIDAmJihpLmFscGhhVGVzdD10LmFscGhhVGVzdCksdC5kZXB0aFRlc3QhPT12b2lkIDAmJihpLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdC5kZXB0aFdyaXRlIT09dm9pZCAwJiYoaS5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdC5jb2xvcldyaXRlIT09dm9pZCAwJiYoaS5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdC5hbHBoYVdyaXRlIT09dm9pZCAwJiYoaS5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSksdC5zdGVuY2lsV3JpdGUhPT12b2lkIDAmJihpLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdC5zdGVuY2lsV3JpdGVNYXNrIT09dm9pZCAwJiYoaS5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdC5zdGVuY2lsRnVuYyE9PXZvaWQgMCYmKGkuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdC5zdGVuY2lsUmVmIT09dm9pZCAwJiYoaS5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdC5zdGVuY2lsRnVuY01hc2shPT12b2lkIDAmJihpLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdC5zdGVuY2lsRmFpbCE9PXZvaWQgMCYmKGkuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdC5zdGVuY2lsWkZhaWwhPT12b2lkIDAmJihpLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdC5zdGVuY2lsWlBhc3MhPT12b2lkIDAmJihpLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdC53aXJlZnJhbWUhPT12b2lkIDAmJihpLndpcmVmcmFtZT10LndpcmVmcmFtZSksdC53aXJlZnJhbWVMaW5ld2lkdGghPT12b2lkIDAmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdC53aXJlZnJhbWVMaW5lY2FwIT09dm9pZCAwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdC53aXJlZnJhbWVMaW5lam9pbiE9PXZvaWQgMCYmKGkud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdC5yb3RhdGlvbiE9PXZvaWQgMCYmKGkucm90YXRpb249dC5yb3RhdGlvbiksdC5saW5ld2lkdGghPT0xJiYoaS5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHQuZGFzaFNpemUhPT12b2lkIDAmJihpLmRhc2hTaXplPXQuZGFzaFNpemUpLHQuZ2FwU2l6ZSE9PXZvaWQgMCYmKGkuZ2FwU2l6ZT10LmdhcFNpemUpLHQuc2NhbGUhPT12b2lkIDAmJihpLnNjYWxlPXQuc2NhbGUpLHQucG9seWdvbk9mZnNldCE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHQucG9seWdvbk9mZnNldEZhY3RvciE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHQucG9seWdvbk9mZnNldFVuaXRzIT09dm9pZCAwJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHQuZGl0aGVyaW5nIT09dm9pZCAwJiYoaS5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHQuYWxwaGFUb0NvdmVyYWdlIT09dm9pZCAwJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UpLHQucHJlbXVsdGlwbGllZEFscGhhIT09dm9pZCAwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEpLHQudmlzaWJsZSE9PXZvaWQgMCYmKGkudmlzaWJsZT10LnZpc2libGUpLHQudG9uZU1hcHBlZCE9PXZvaWQgMCYmKGkudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHQudXNlckRhdGEhPT12b2lkIDAmJihpLnVzZXJEYXRhPXQudXNlckRhdGEpLHQudmVydGV4Q29sb3JzIT09dm9pZCAwJiYodHlwZW9mIHQudmVydGV4Q29sb3JzPT0ibnVtYmVyIj9pLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycz4wOmkudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzKSx0LnVuaWZvcm1zIT09dm9pZCAwKWZvcihsZXQgbyBpbiB0LnVuaWZvcm1zKXtsZXQgYT10LnVuaWZvcm1zW29dO3N3aXRjaChpLnVuaWZvcm1zW29dPXt9LGEudHlwZSl7Y2FzZSJ0IjppLnVuaWZvcm1zW29dLnZhbHVlPW4oYS52YWx1ZSk7YnJlYWs7Y2FzZSJjIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBuZSgpLnNldEhleChhLnZhbHVlKTticmVhaztjYXNlInYyIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBMdCgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlInYzIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBqKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UidjQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGVuKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTMiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGtpKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IE1lKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2RlZmF1bHQ6aS51bmlmb3Jtc1tvXS52YWx1ZT1hLnZhbHVlfX1pZih0LmRlZmluZXMhPT12b2lkIDAmJihpLmRlZmluZXM9dC5kZWZpbmVzKSx0LnZlcnRleFNoYWRlciE9PXZvaWQgMCYmKGkudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyKSx0LmZyYWdtZW50U2hhZGVyIT09dm9pZCAwJiYoaS5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyKSx0LmV4dGVuc2lvbnMhPT12b2lkIDApZm9yKGxldCBvIGluIHQuZXh0ZW5zaW9ucylpLmV4dGVuc2lvbnNbb109dC5leHRlbnNpb25zW29dO2lmKHQuc2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5zaGFkaW5nPT09MSksdC5zaXplIT09dm9pZCAwJiYoaS5zaXplPXQuc2l6ZSksdC5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbiksdC5tYXAhPT12b2lkIDAmJihpLm1hcD1uKHQubWFwKSksdC5tYXRjYXAhPT12b2lkIDAmJihpLm1hdGNhcD1uKHQubWF0Y2FwKSksdC5hbHBoYU1hcCE9PXZvaWQgMCYmKGkuYWxwaGFNYXA9bih0LmFscGhhTWFwKSksdC5idW1wTWFwIT09dm9pZCAwJiYoaS5idW1wTWFwPW4odC5idW1wTWFwKSksdC5idW1wU2NhbGUhPT12b2lkIDAmJihpLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSksdC5ub3JtYWxNYXAhPT12b2lkIDAmJihpLm5vcm1hbE1hcD1uKHQubm9ybWFsTWFwKSksdC5ub3JtYWxNYXBUeXBlIT09dm9pZCAwJiYoaS5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSksdC5ub3JtYWxTY2FsZSE9PXZvaWQgMCl7bGV0IG89dC5ub3JtYWxTY2FsZTtBcnJheS5pc0FycmF5KG8pPT09ITEmJihvPVtvLG9dKSxpLm5vcm1hbFNjYWxlPW5ldyBMdCgpLmZyb21BcnJheShvKX1yZXR1cm4gdC5kaXNwbGFjZW1lbnRNYXAhPT12b2lkIDAmJihpLmRpc3BsYWNlbWVudE1hcD1uKHQuZGlzcGxhY2VtZW50TWFwKSksdC5kaXNwbGFjZW1lbnRTY2FsZSE9PXZvaWQgMCYmKGkuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSksdC5kaXNwbGFjZW1lbnRCaWFzIT09dm9pZCAwJiYoaS5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50QmlhcyksdC5yb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLnJvdWdobmVzc01hcD1uKHQucm91Z2huZXNzTWFwKSksdC5tZXRhbG5lc3NNYXAhPT12b2lkIDAmJihpLm1ldGFsbmVzc01hcD1uKHQubWV0YWxuZXNzTWFwKSksdC5lbWlzc2l2ZU1hcCE9PXZvaWQgMCYmKGkuZW1pc3NpdmVNYXA9bih0LmVtaXNzaXZlTWFwKSksdC5lbWlzc2l2ZUludGVuc2l0eSE9PXZvaWQgMCYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSksdC5zcGVjdWxhck1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJNYXA9bih0LnNwZWN1bGFyTWFwKSksdC5zcGVjdWxhckludGVuc2l0eU1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bih0LnNwZWN1bGFySW50ZW5zaXR5TWFwKSksdC5zcGVjdWxhckNvbG9yTWFwIT09dm9pZCAwJiYoaS5zcGVjdWxhckNvbG9yTWFwPW4odC5zcGVjdWxhckNvbG9yTWFwKSksdC5lbnZNYXAhPT12b2lkIDAmJihpLmVudk1hcD1uKHQuZW52TWFwKSksdC5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSksdC5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSksdC5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyksdC5saWdodE1hcCE9PXZvaWQgMCYmKGkubGlnaHRNYXA9bih0LmxpZ2h0TWFwKSksdC5saWdodE1hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSksdC5hb01hcCE9PXZvaWQgMCYmKGkuYW9NYXA9bih0LmFvTWFwKSksdC5hb01hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSksdC5ncmFkaWVudE1hcCE9PXZvaWQgMCYmKGkuZ3JhZGllbnRNYXA9bih0LmdyYWRpZW50TWFwKSksdC5jbGVhcmNvYXRNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE1hcD1uKHQuY2xlYXJjb2F0TWFwKSksdC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD1uKHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwKSksdC5jbGVhcmNvYXROb3JtYWxNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE5vcm1hbE1hcD1uKHQuY2xlYXJjb2F0Tm9ybWFsTWFwKSksdC5jbGVhcmNvYXROb3JtYWxTY2FsZSE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx0LnRyYW5zbWlzc2lvbk1hcCE9PXZvaWQgMCYmKGkudHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSx0LnRoaWNrbmVzc01hcCE9PXZvaWQgMCYmKGkudGhpY2tuZXNzTWFwPW4odC50aGlja25lc3NNYXApKSx0LnNoZWVuQ29sb3JNYXAhPT12b2lkIDAmJihpLnNoZWVuQ29sb3JNYXA9bih0LnNoZWVuQ29sb3JNYXApKSx0LnNoZWVuUm91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzc01hcD1uKHQuc2hlZW5Sb3VnaG5lc3NNYXApKSxpfXNldFRleHR1cmVzKHQpe3JldHVybiB0aGlzLnRleHR1cmVzPXQsdGhpc319LGRNPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgcj0iIjtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W25dKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocikpfWNhdGNoKG4pe3JldHVybiByfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IHI9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiByPT09LTE/Ii4vIjp0LnN1YnN0cigwLHIrMSl9c3RhdGljIHJlc29sdmVVUkwodCxyKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KHIpJiYvXlwvLy50ZXN0KHQpJiYocj1yLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OnIrdCl9fSxONj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtONi5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgUlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9e30sbj17fTtmdW5jdGlvbiBpKHAsZCl7aWYocltkXSE9PXZvaWQgMClyZXR1cm4gcltkXTtsZXQgXz1wLmludGVybGVhdmVkQnVmZmVyc1tkXSx5PW8ocCxfLmJ1ZmZlcikseD1CMyhfLnR5cGUseSksYj1uZXcgZW0oeCxfLnN0cmlkZSk7cmV0dXJuIGIudXVpZD1fLnV1aWQscltkXT1iLGJ9ZnVuY3Rpb24gbyhwLGQpe2lmKG5bZF0hPT12b2lkIDApcmV0dXJuIG5bZF07bGV0IF89cC5hcnJheUJ1ZmZlcnNbZF0seT1uZXcgVWludDMyQXJyYXkoXykuYnVmZmVyO3JldHVybiBuW2RdPXkseX1sZXQgYT10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IE42Om5ldyBQZSxzPXQuZGF0YS5pbmRleDtpZihzIT09dm9pZCAwKXtsZXQgcD1CMyhzLnR5cGUscy5hcnJheSk7YS5zZXRJbmRleChuZXcgSmUocCwxKSl9bGV0IGw9dC5kYXRhLmF0dHJpYnV0ZXM7Zm9yKGxldCBwIGluIGwpe2xldCBkPWxbcF0sZztpZihkLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBfPWkodC5kYXRhLGQuZGF0YSk7Zz1uZXcgdHAoXyxkLml0ZW1TaXplLGQub2Zmc2V0LGQubm9ybWFsaXplZCl9ZWxzZXtsZXQgXz1CMyhkLnR5cGUsZC5hcnJheSkseT1kLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP3JtOkplO2c9bmV3IHkoXyxkLml0ZW1TaXplLGQubm9ybWFsaXplZCl9ZC5uYW1lIT09dm9pZCAwJiYoZy5uYW1lPWQubmFtZSksZC51c2FnZSE9PXZvaWQgMCYmZy5zZXRVc2FnZShkLnVzYWdlKSxkLnVwZGF0ZVJhbmdlIT09dm9pZCAwJiYoZy51cGRhdGVSYW5nZS5vZmZzZXQ9ZC51cGRhdGVSYW5nZS5vZmZzZXQsZy51cGRhdGVSYW5nZS5jb3VudD1kLnVwZGF0ZVJhbmdlLmNvdW50KSxhLnNldEF0dHJpYnV0ZShwLGcpfWxldCBjPXQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM7aWYoYylmb3IobGV0IHAgaW4gYyl7bGV0IGQ9Y1twXSxnPVtdO2ZvcihsZXQgXz0wLHk9ZC5sZW5ndGg7Xzx5O18rKyl7bGV0IHg9ZFtfXSxiO2lmKHguaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IFM9aSh0LmRhdGEseC5kYXRhKTtiPW5ldyB0cChTLHguaXRlbVNpemUseC5vZmZzZXQseC5ub3JtYWxpemVkKX1lbHNle2xldCBTPUIzKHgudHlwZSx4LmFycmF5KTtiPW5ldyBKZShTLHguaXRlbVNpemUseC5ub3JtYWxpemVkKX14Lm5hbWUhPT12b2lkIDAmJihiLm5hbWU9eC5uYW1lKSxnLnB1c2goYil9YS5tb3JwaEF0dHJpYnV0ZXNbcF09Z310LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmUmJihhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSEwKTtsZXQgaD10LmRhdGEuZ3JvdXBzfHx0LmRhdGEuZHJhd2NhbGxzfHx0LmRhdGEub2Zmc2V0cztpZihoIT09dm9pZCAwKWZvcihsZXQgcD0wLGQ9aC5sZW5ndGg7cCE9PWQ7KytwKXtsZXQgZz1oW3BdO2EuYWRkR3JvdXAoZy5zdGFydCxnLmNvdW50LGcubWF0ZXJpYWxJbmRleCl9bGV0IGY9dC5kYXRhLmJvdW5kaW5nU3BoZXJlO2lmKGYhPT12b2lkIDApe2xldCBwPW5ldyBqO2YuY2VudGVyIT09dm9pZCAwJiZwLmZyb21BcnJheShmLmNlbnRlciksYS5ib3VuZGluZ1NwaGVyZT1uZXcgWmYocCxmLnJhZGl1cyl9cmV0dXJuIHQubmFtZSYmKGEubmFtZT10Lm5hbWUpLHQudXNlckRhdGEmJihhLnVzZXJEYXRhPXQudXNlckRhdGEpLGF9fSxzaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT10aGlzLnBhdGg9PT0iIj9kTS5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fGE7bGV0IHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cy5zZXRQYXRoKHRoaXMucGF0aCkscy5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcikscy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLHMubG9hZCh0LGZ1bmN0aW9uKGwpe2xldCBjPW51bGw7dHJ5e2M9SlNPTi5wYXJzZShsKX1jYXRjaChoKXtpIT09dm9pZCAwJiZpKGgpLGNvbnNvbGUuZXJyb3IoIlRIUkVFOk9iamVjdExvYWRlcjogQ2FuJ3QgcGFyc2UgIit0KyIuIixoLm1lc3NhZ2UpO3JldHVybn1sZXQgdT1jLm1ldGFkYXRhO2lmKHU9PT12b2lkIDB8fHUudHlwZT09PXZvaWQgMHx8dS50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIit0KTtyZXR1cm59by5wYXJzZShjLHIpfSxuLGkpfWxvYWRBc3luYyh0LHIpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IG49dGhpcyxpPXRoaXMucGF0aD09PSIiP2RNLmV4dHJhY3RVcmxCYXNlKHQpOnRoaXMucGF0aDt0aGlzLnJlc291cmNlUGF0aD10aGlzLnJlc291cmNlUGF0aHx8aTtsZXQgbz1uZXcgSmModGhpcy5tYW5hZ2VyKTtvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyk7bGV0IGE9eWllbGQgby5sb2FkQXN5bmModCxyKSxzPUpTT04ucGFyc2UoYSksbD1zLm1ldGFkYXRhO2lmKGw9PT12b2lkIDB8fGwudHlwZT09PXZvaWQgMHx8bC50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXRocm93IG5ldyBFcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrdCk7cmV0dXJuIHlpZWxkIG4ucGFyc2VBc3luYyhzKX0pfXBhcnNlKHQscil7bGV0IG49dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxpPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLG89dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLGkpLGE9dGhpcy5wYXJzZUltYWdlcyh0LmltYWdlcyxmdW5jdGlvbigpe3IhPT12b2lkIDAmJnIoYyl9KSxzPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLGEpLGw9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxzKSxjPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QsbyxsLHMsbiksdT10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGMpO2lmKHRoaXMuYmluZFNrZWxldG9ucyhjLHUpLHIhPT12b2lkIDApe2xldCBoPSExO2ZvcihsZXQgZiBpbiBhKWlmKGFbZl1pbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpe2g9ITA7YnJlYWt9aD09PSExJiZyKGMpfXJldHVybiBjfXBhcnNlQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLnBhcnNlQW5pbWF0aW9ucyh0LmFuaW1hdGlvbnMpLG49dGhpcy5wYXJzZVNoYXBlcyh0LnNoYXBlcyksaT10aGlzLnBhcnNlR2VvbWV0cmllcyh0Lmdlb21ldHJpZXMsbiksbz15aWVsZCB0aGlzLnBhcnNlSW1hZ2VzQXN5bmModC5pbWFnZXMpLGE9dGhpcy5wYXJzZVRleHR1cmVzKHQudGV4dHVyZXMsbykscz10aGlzLnBhcnNlTWF0ZXJpYWxzKHQubWF0ZXJpYWxzLGEpLGw9dGhpcy5wYXJzZU9iamVjdCh0Lm9iamVjdCxpLHMsYSxyKSxjPXRoaXMucGFyc2VTa2VsZXRvbnModC5za2VsZXRvbnMsbCk7cmV0dXJuIHRoaXMuYmluZFNrZWxldG9ucyhsLGMpLGx9KX1wYXJzZVNoYXBlcyh0KXtsZXQgcj17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7bGV0IG89bmV3IEtjKCkuZnJvbUpTT04odFtuXSk7cltvLnV1aWRdPW99cmV0dXJuIHJ9cGFyc2VTa2VsZXRvbnModCxyKXtsZXQgbj17fSxpPXt9O2lmKHIudHJhdmVyc2UoZnVuY3Rpb24obyl7by5pc0JvbmUmJihpW28udXVpZF09byl9KSx0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9bmV3IGxNKCkuZnJvbUpTT04odFtvXSxpKTtuW3MudXVpZF09c31yZXR1cm4gbn1wYXJzZUdlb21ldHJpZXModCxyKXtsZXQgbj17fTtpZih0IT09dm9pZCAwKXtsZXQgaT1uZXcgUlU7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtsZXQgcyxsPXRbb107c3dpdGNoKGwudHlwZSl7Y2FzZSJCdWZmZXJHZW9tZXRyeSI6Y2FzZSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI6cz1pLnBhcnNlKGwpO2JyZWFrO2Nhc2UiR2VvbWV0cnkiOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogVGhlIGxlZ2FjeSBHZW9tZXRyeSB0eXBlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7YnJlYWs7ZGVmYXVsdDpsLnR5cGUgaW4gdmhlP3M9dmhlW2wudHlwZV0uZnJvbUpTT04obCxyKTpjb25zb2xlLndhcm4oYFRIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJHtsLnR5cGV9ImApfXMudXVpZD1sLnV1aWQsbC5uYW1lIT09dm9pZCAwJiYocy5uYW1lPWwubmFtZSkscy5pc0J1ZmZlckdlb21ldHJ5PT09ITAmJmwudXNlckRhdGEhPT12b2lkIDAmJihzLnVzZXJEYXRhPWwudXNlckRhdGEpLG5bbC51dWlkXT1zfX1yZXR1cm4gbn1wYXJzZU1hdGVyaWFscyh0LHIpe2xldCBuPXt9LGk9e307aWYodCE9PXZvaWQgMCl7bGV0IG89bmV3IGtVO28uc2V0VGV4dHVyZXMocik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdO2lmKGwudHlwZT09PSJNdWx0aU1hdGVyaWFsIil7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxsLm1hdGVyaWFscy5sZW5ndGg7dSsrKXtsZXQgaD1sLm1hdGVyaWFsc1t1XTtuW2gudXVpZF09PT12b2lkIDAmJihuW2gudXVpZF09by5wYXJzZShoKSksYy5wdXNoKG5baC51dWlkXSl9aVtsLnV1aWRdPWN9ZWxzZSBuW2wudXVpZF09PT12b2lkIDAmJihuW2wudXVpZF09by5wYXJzZShsKSksaVtsLnV1aWRdPW5bbC51dWlkXX19cmV0dXJuIGl9cGFyc2VBbmltYXRpb25zKHQpe2xldCByPXt9O2lmKHQhPT12b2lkIDApZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl0sbz1RMS5wYXJzZShpKTtyW28udXVpZF09b31yZXR1cm4gcn1wYXJzZUltYWdlcyh0LHIpe2xldCBuPXRoaXMsaT17fSxvO2Z1bmN0aW9uIGEobCl7cmV0dXJuIG4ubWFuYWdlci5pdGVtU3RhcnQobCksby5sb2FkKGwsZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVuZChsKX0sdm9pZCAwLGZ1bmN0aW9uKCl7bi5tYW5hZ2VyLml0ZW1FcnJvcihsKSxuLm1hbmFnZXIuaXRlbUVuZChsKX0pfWZ1bmN0aW9uIHMobCl7aWYodHlwZW9mIGw9PSJzdHJpbmciKXtsZXQgYz1sLHU9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoYyk/YzpuLnJlc291cmNlUGF0aCtjO3JldHVybiBhKHUpfWVsc2UgcmV0dXJuIGwuZGF0YT97ZGF0YTpCMyhsLnR5cGUsbC5kYXRhKSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH06bnVsbH1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtsZXQgbD1uZXcgRTYocik7bz1uZXcgZXgobCksby5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtmb3IobGV0IGM9MCx1PXQubGVuZ3RoO2M8dTtjKyspe2xldCBoPXRbY10sZj1oLnVybDtpZihBcnJheS5pc0FycmF5KGYpKXtpW2gudXVpZF09W107Zm9yKGxldCBwPTAsZD1mLmxlbmd0aDtwPGQ7cCsrKXtsZXQgZz1mW3BdLF89cyhnKTtfIT09bnVsbCYmKF8gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2lbaC51dWlkXS5wdXNoKF8pOmlbaC51dWlkXS5wdXNoKG5ldyBKZChfLmRhdGEsXy53aWR0aCxfLmhlaWdodCkpKX19ZWxzZXtsZXQgcD1zKGgudXJsKTtwIT09bnVsbCYmKGlbaC51dWlkXT1wKX19fXJldHVybiBpfXBhcnNlSW1hZ2VzQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLG49e30saTtmdW5jdGlvbiBvKGEpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXtsZXQgcz1hLGw9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3Qocyk/czpyLnJlc291cmNlUGF0aCtzO3JldHVybiB5aWVsZCBpLmxvYWRBc3luYyhsKX1lbHNlIHJldHVybiBhLmRhdGE/e2RhdGE6QjMoYS50eXBlLGEuZGF0YSksd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHR9Om51bGx9KX1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtpPW5ldyBleCh0aGlzLm1hbmFnZXIpLGkuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdLGM9bC51cmw7aWYoQXJyYXkuaXNBcnJheShjKSl7bltsLnV1aWRdPVtdO2ZvcihsZXQgdT0wLGg9Yy5sZW5ndGg7dTxoO3UrKyl7bGV0IGY9Y1t1XSxwPXlpZWxkIG8oZik7cCE9PW51bGwmJihwIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9uW2wudXVpZF0ucHVzaChwKTpuW2wudXVpZF0ucHVzaChuZXcgSmQocC5kYXRhLHAud2lkdGgscC5oZWlnaHQpKSl9fWVsc2V7bGV0IHU9eWllbGQgbyhsLnVybCk7dSE9PW51bGwmJihuW2wudXVpZF09dSl9fX1yZXR1cm4gbn0pfXBhcnNlVGV4dHVyZXModCxyKXtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuIHR5cGVvZiBvPT0ibnVtYmVyIj9vOihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlci5wYXJzZVRleHR1cmU6IENvbnN0YW50IHNob3VsZCBiZSBpbiBudW1lcmljIGZvcm0uIixvKSxhW29dKX1sZXQgaT17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXTtzLmltYWdlPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxzLnV1aWQpLHJbcy5pbWFnZV09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLHMuaW1hZ2UpO2xldCBsLGM9cltzLmltYWdlXTtBcnJheS5pc0FycmF5KGMpPyhsPW5ldyBIMChjKSxjLmxlbmd0aD09PTYmJihsLm5lZWRzVXBkYXRlPSEwKSk6KGMmJmMuZGF0YT9sPW5ldyBKZChjLmRhdGEsYy53aWR0aCxjLmhlaWdodCk6bD1uZXcgdmkoYyksYyYmKGwubmVlZHNVcGRhdGU9ITApKSxsLnV1aWQ9cy51dWlkLHMubmFtZSE9PXZvaWQgMCYmKGwubmFtZT1zLm5hbWUpLHMubWFwcGluZyE9PXZvaWQgMCYmKGwubWFwcGluZz1uKHMubWFwcGluZyxwMHIpKSxzLm9mZnNldCE9PXZvaWQgMCYmbC5vZmZzZXQuZnJvbUFycmF5KHMub2Zmc2V0KSxzLnJlcGVhdCE9PXZvaWQgMCYmbC5yZXBlYXQuZnJvbUFycmF5KHMucmVwZWF0KSxzLmNlbnRlciE9PXZvaWQgMCYmbC5jZW50ZXIuZnJvbUFycmF5KHMuY2VudGVyKSxzLnJvdGF0aW9uIT09dm9pZCAwJiYobC5yb3RhdGlvbj1zLnJvdGF0aW9uKSxzLndyYXAhPT12b2lkIDAmJihsLndyYXBTPW4ocy53cmFwWzBdLE1oZSksbC53cmFwVD1uKHMud3JhcFsxXSxNaGUpKSxzLmZvcm1hdCE9PXZvaWQgMCYmKGwuZm9ybWF0PXMuZm9ybWF0KSxzLnR5cGUhPT12b2lkIDAmJihsLnR5cGU9cy50eXBlKSxzLmVuY29kaW5nIT09dm9pZCAwJiYobC5lbmNvZGluZz1zLmVuY29kaW5nKSxzLm1pbkZpbHRlciE9PXZvaWQgMCYmKGwubWluRmlsdGVyPW4ocy5taW5GaWx0ZXIsRWhlKSkscy5tYWdGaWx0ZXIhPT12b2lkIDAmJihsLm1hZ0ZpbHRlcj1uKHMubWFnRmlsdGVyLEVoZSkpLHMuYW5pc290cm9weSE9PXZvaWQgMCYmKGwuYW5pc290cm9weT1zLmFuaXNvdHJvcHkpLHMuZmxpcFkhPT12b2lkIDAmJihsLmZsaXBZPXMuZmxpcFkpLHMucHJlbXVsdGlwbHlBbHBoYSE9PXZvaWQgMCYmKGwucHJlbXVsdGlwbHlBbHBoYT1zLnByZW11bHRpcGx5QWxwaGEpLHMudW5wYWNrQWxpZ25tZW50IT09dm9pZCAwJiYobC51bnBhY2tBbGlnbm1lbnQ9cy51bnBhY2tBbGlnbm1lbnQpLHMudXNlckRhdGEhPT12b2lkIDAmJihsLnVzZXJEYXRhPXMudXNlckRhdGEpLGlbcy51dWlkXT1sfXJldHVybiBpfXBhcnNlT2JqZWN0KHQscixuLGksbyl7bGV0IGE7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gcltmXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsZikscltmXX1mdW5jdGlvbiBsKGYpe2lmKGYhPT12b2lkIDApe2lmKEFycmF5LmlzQXJyYXkoZikpe2xldCBwPVtdO2ZvcihsZXQgZD0wLGc9Zi5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXTtuW19dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixfKSxwLnB1c2gobltfXSl9cmV0dXJuIHB9cmV0dXJuIG5bZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLGYpLG5bZl19fWZ1bmN0aW9uIGMoZil7cmV0dXJuIGlbZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsZiksaVtmXX1sZXQgdSxoO3N3aXRjaCh0LnR5cGUpe2Nhc2UiU2NlbmUiOmE9bmV3IHEwLHQuYmFja2dyb3VuZCE9PXZvaWQgMCYmKE51bWJlci5pc0ludGVnZXIodC5iYWNrZ3JvdW5kKT9hLmJhY2tncm91bmQ9bmV3IG5lKHQuYmFja2dyb3VuZCk6YS5iYWNrZ3JvdW5kPWModC5iYWNrZ3JvdW5kKSksdC5lbnZpcm9ubWVudCE9PXZvaWQgMCYmKGEuZW52aXJvbm1lbnQ9Yyh0LmVudmlyb25tZW50KSksdC5mb2chPT12b2lkIDAmJih0LmZvZy50eXBlPT09IkZvZyI/YS5mb2c9bmV3IHoxKHQuZm9nLmNvbG9yLHQuZm9nLm5lYXIsdC5mb2cuZmFyKTp0LmZvZy50eXBlPT09IkZvZ0V4cDIiJiYoYS5mb2c9bmV3IE8xKHQuZm9nLmNvbG9yLHQuZm9nLmRlbnNpdHkpKSk7YnJlYWs7Y2FzZSJQZXJzcGVjdGl2ZUNhbWVyYSI6YT1uZXcgVWkodC5mb3YsdC5hc3BlY3QsdC5uZWFyLHQuZmFyKSx0LmZvY3VzIT09dm9pZCAwJiYoYS5mb2N1cz10LmZvY3VzKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LmZpbG1HYXVnZSE9PXZvaWQgMCYmKGEuZmlsbUdhdWdlPXQuZmlsbUdhdWdlKSx0LmZpbG1PZmZzZXQhPT12b2lkIDAmJihhLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0KSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIk9ydGhvZ3JhcGhpY0NhbWVyYSI6YT1uZXcgRDEodC5sZWZ0LHQucmlnaHQsdC50b3AsdC5ib3R0b20sdC5uZWFyLHQuZmFyKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIkFtYmllbnRMaWdodCI6YT1uZXcgTDYodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjphPW5ldyBJNih0LmNvbG9yLHQuaW50ZW5zaXR5KTticmVhaztjYXNlIlBvaW50TGlnaHQiOmE9bmV3IFA2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmRlY2F5KTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmE9bmV3IGs2KHQuY29sb3IsdC5pbnRlbnNpdHksdC53aWR0aCx0LmhlaWdodCk7YnJlYWs7Y2FzZSJTcG90TGlnaHQiOmE9bmV3IEE2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmFuZ2xlLHQucGVudW1icmEsdC5kZWNheSk7YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmE9bmV3IFQ2KHQuY29sb3IsdC5ncm91bmRDb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJMaWdodFByb2JlIjphPW5ldyByeCgpLmZyb21KU09OKHQpO2JyZWFrO2Nhc2UiU2tpbm5lZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgYU0odSxoKSx0LmJpbmRNb2RlIT09dm9pZCAwJiYoYS5iaW5kTW9kZT10LmJpbmRNb2RlKSx0LmJpbmRNYXRyaXghPT12b2lkIDAmJmEuYmluZE1hdHJpeC5mcm9tQXJyYXkodC5iaW5kTWF0cml4KSx0LnNrZWxldG9uIT09dm9pZCAwJiYoYS5za2VsZXRvbj10LnNrZWxldG9uKTticmVhaztjYXNlIk1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgdGkodSxoKTticmVhaztjYXNlIkluc3RhbmNlZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCk7bGV0IGY9dC5jb3VudCxwPXQuaW5zdGFuY2VNYXRyaXgsZD10Lmluc3RhbmNlQ29sb3I7YT1uZXcgaTYodSxoLGYpLGEuaW5zdGFuY2VNYXRyaXg9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkocC5hcnJheSksMTYpLGQhPT12b2lkIDAmJihhLmluc3RhbmNlQ29sb3I9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkoZC5hcnJheSksZC5pdGVtU2l6ZSkpO2JyZWFrO2Nhc2UiTE9EIjphPW5ldyBfVTticmVhaztjYXNlIkxpbmUiOmE9bmV3IGNoKHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJMaW5lTG9vcCI6YT1uZXcgbzYocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVTZWdtZW50cyI6YT1uZXcgQWEocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIlBvaW50Q2xvdWQiOmNhc2UiUG9pbnRzIjphPW5ldyBpbShzKHQuZ2VvbWV0cnkpLGwodC5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UiU3ByaXRlIjphPW5ldyBvTShsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkdyb3VwIjphPW5ldyBYZDticmVhaztjYXNlIkJvbmUiOmE9bmV3IHNNO2JyZWFrO2RlZmF1bHQ6YT1uZXcgb3J9aWYoYS51dWlkPXQudXVpZCx0Lm5hbWUhPT12b2lkIDAmJihhLm5hbWU9dC5uYW1lKSx0Lm1hdHJpeCE9PXZvaWQgMD8oYS5tYXRyaXguZnJvbUFycmF5KHQubWF0cml4KSx0Lm1hdHJpeEF1dG9VcGRhdGUhPT12b2lkIDAmJihhLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlKSxhLm1hdHJpeEF1dG9VcGRhdGUmJmEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKSk6KHQucG9zaXRpb24hPT12b2lkIDAmJmEucG9zaXRpb24uZnJvbUFycmF5KHQucG9zaXRpb24pLHQucm90YXRpb24hPT12b2lkIDAmJmEucm90YXRpb24uZnJvbUFycmF5KHQucm90YXRpb24pLHQucXVhdGVybmlvbiE9PXZvaWQgMCYmYS5xdWF0ZXJuaW9uLmZyb21BcnJheSh0LnF1YXRlcm5pb24pLHQuc2NhbGUhPT12b2lkIDAmJmEuc2NhbGUuZnJvbUFycmF5KHQuc2NhbGUpKSx0LmNhc3RTaGFkb3chPT12b2lkIDAmJihhLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93KSx0LnJlY2VpdmVTaGFkb3chPT12b2lkIDAmJihhLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93KSx0LnNoYWRvdyYmKHQuc2hhZG93LmJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5iaWFzPXQuc2hhZG93LmJpYXMpLHQuc2hhZG93Lm5vcm1hbEJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5ub3JtYWxCaWFzPXQuc2hhZG93Lm5vcm1hbEJpYXMpLHQuc2hhZG93LnJhZGl1cyE9PXZvaWQgMCYmKGEuc2hhZG93LnJhZGl1cz10LnNoYWRvdy5yYWRpdXMpLHQuc2hhZG93Lm1hcFNpemUhPT12b2lkIDAmJmEuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KHQuc2hhZG93Lm1hcFNpemUpLHQuc2hhZG93LmNhbWVyYSE9PXZvaWQgMCYmKGEuc2hhZG93LmNhbWVyYT10aGlzLnBhcnNlT2JqZWN0KHQuc2hhZG93LmNhbWVyYSkpKSx0LnZpc2libGUhPT12b2lkIDAmJihhLnZpc2libGU9dC52aXNpYmxlKSx0LmZydXN0dW1DdWxsZWQhPT12b2lkIDAmJihhLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkKSx0LnJlbmRlck9yZGVyIT09dm9pZCAwJiYoYS5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyKSx0LnVzZXJEYXRhIT09dm9pZCAwJiYoYS51c2VyRGF0YT10LnVzZXJEYXRhKSx0LmxheWVycyE9PXZvaWQgMCYmKGEubGF5ZXJzLm1hc2s9dC5sYXllcnMpLHQuY2hpbGRyZW4hPT12b2lkIDApe2xldCBmPXQuY2hpbGRyZW47Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspYS5hZGQodGhpcy5wYXJzZU9iamVjdChmW3BdLHIsbixpLG8pKX1pZih0LmFuaW1hdGlvbnMhPT12b2lkIDApe2xldCBmPXQuYW5pbWF0aW9ucztmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IGQ9ZltwXTthLmFuaW1hdGlvbnMucHVzaChvW2RdKX19aWYodC50eXBlPT09IkxPRCIpe3QuYXV0b1VwZGF0ZSE9PXZvaWQgMCYmKGEuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUpO2xldCBmPXQubGV2ZWxzO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKXtsZXQgZD1mW3BdLGc9YS5nZXRPYmplY3RCeVByb3BlcnR5KCJ1dWlkIixkLm9iamVjdCk7ZyE9PXZvaWQgMCYmYS5hZGRMZXZlbChnLGQuZGlzdGFuY2UpfX1yZXR1cm4gYX1iaW5kU2tlbGV0b25zKHQscil7T2JqZWN0LmtleXMocikubGVuZ3RoIT09MCYmdC50cmF2ZXJzZShmdW5jdGlvbihuKXtpZihuLmlzU2tpbm5lZE1lc2g9PT0hMCYmbi5za2VsZXRvbiE9PXZvaWQgMCl7bGV0IGk9cltuLnNrZWxldG9uXTtpPT09dm9pZCAwP2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBObyBza2VsZXRvbiBmb3VuZCB3aXRoIFVVSUQ6IixuLnNrZWxldG9uKTpuLmJpbmQoaSxuLmJpbmRNYXRyaXgpfX0pfXNldFRleHR1cmVQYXRoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuIiksdGhpcy5zZXRSZXNvdXJjZVBhdGgodCl9fSxwMHI9e1VWTWFwcGluZzpYVSxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6bngsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOml4LEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOllQLEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOmpQLEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOnhNLEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOno2fSxNaGU9e1JlcGVhdFdyYXBwaW5nOlhQLENsYW1wVG9FZGdlV3JhcHBpbmc6Sm8sTWlycm9yZWRSZXBlYXRXcmFwcGluZzokUH0sRWhlPXtOZWFyZXN0RmlsdGVyOkxpLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOm9VLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6YVUsTGluZWFyRmlsdGVyOmlpLExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6TGh0LExpbmVhck1pcG1hcExpbmVhckZpbHRlcjpveH0sTlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLGE9dHguZ2V0KHQpO2lmKGEhPT12b2lkIDApcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe3ImJnIoYSksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLGE7bGV0IHM9e307cy5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIscy5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LHMpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXt0eC5hZGQodCxsKSxyJiZyKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7aSYmaShsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05VLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBXVix6aHQ9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gV1Y9PT12b2lkIDAmJihXVj1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLFdWfSxzZXRDb250ZXh0OmZ1bmN0aW9uKGUpe1dWPWV9fSxEVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2Euc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCxmdW5jdGlvbihzKXt0cnl7bGV0IGw9cy5zbGljZSgwKTt6aHQuZ2V0Q29udGV4dCgpLmRlY29kZUF1ZGlvRGF0YShsLGZ1bmN0aW9uKHUpe3IodSl9KX1jYXRjaChsKXtpP2kobCk6Y29uc29sZS5lcnJvcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0sbixpKX19LE9VPWNsYXNzIGV4dGVuZHMgcnh7Y29uc3RydWN0b3IodCxyLG49MSl7c3VwZXIodm9pZCAwLG4pO2xldCBpPW5ldyBuZSgpLnNldCh0KSxvPW5ldyBuZSgpLnNldChyKSxhPW5ldyBqKGkucixpLmcsaS5iKSxzPW5ldyBqKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShhKS5hZGQocykubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShhKS5zdWIocykubXVsdGlwbHlTY2FsYXIoYyl9fTtPVS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMDt2YXIgelU9Y2xhc3MgZXh0ZW5kcyByeHtjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIodm9pZCAwLHIpO2xldCBuPW5ldyBuZSgpLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQobi5yLG4uZyxuLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19O3pVLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciBUaGU9bmV3IE1lLENoZT1uZXcgTWUseTE9bmV3IE1lLGxodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBVaSx0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKSx0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNhbWVyYVI9bmV3IFVpLHRoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpLHRoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2NhY2hlPXtmb2N1czpudWxsLGZvdjpudWxsLGFzcGVjdDpudWxsLG5lYXI6bnVsbCxmYXI6bnVsbCx6b29tOm51bGwsZXllU2VwOm51bGx9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLl9jYWNoZTtpZihyLmZvY3VzIT09dC5mb2N1c3x8ci5mb3YhPT10LmZvdnx8ci5hc3BlY3QhPT10LmFzcGVjdCp0aGlzLmFzcGVjdHx8ci5uZWFyIT09dC5uZWFyfHxyLmZhciE9PXQuZmFyfHxyLnpvb20hPT10Lnpvb218fHIuZXllU2VwIT09dGhpcy5leWVTZXApe3IuZm9jdXM9dC5mb2N1cyxyLmZvdj10LmZvdixyLmFzcGVjdD10LmFzcGVjdCp0aGlzLmFzcGVjdCxyLm5lYXI9dC5uZWFyLHIuZmFyPXQuZmFyLHIuem9vbT10Lnpvb20sci5leWVTZXA9dGhpcy5leWVTZXAseTEuY29weSh0LnByb2plY3Rpb25NYXRyaXgpO2xldCBpPXIuZXllU2VwLzIsbz1pKnIubmVhci9yLmZvY3VzLGE9ci5uZWFyKk1hdGgudGFuKFAxKnIuZm92Ki41KS9yLnpvb20scyxsO0NoZS5lbGVtZW50c1sxMl09LWksVGhlLmVsZW1lbnRzWzEyXT1pLHM9LWEqci5hc3BlY3QrbyxsPWEqci5hc3BlY3Qrbyx5MS5lbGVtZW50c1swXT0yKnIubmVhci8obC1zKSx5MS5lbGVtZW50c1s4XT0obCtzKS8obC1zKSx0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KHkxKSxzPS1hKnIuYXNwZWN0LW8sbD1hKnIuYXNwZWN0LW8seTEuZWxlbWVudHNbMF09MipyLm5lYXIvKGwtcykseTEuZWxlbWVudHNbOF09KGwrcykvKGwtcyksdGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weSh5MSl9dGhpcy5jYW1lcmFMLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoQ2hlKSx0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKS5tdWx0aXBseShUaGUpfX0sbU09Y2xhc3N7Y29uc3RydWN0b3IodD0hMCl7dGhpcy5hdXRvU3RhcnQ9dCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMub2xkVGltZT0wLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITF9c3RhcnQoKXt0aGlzLnN0YXJ0VGltZT1BaGUoKSx0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWUsdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMucnVubmluZz0hMH1zdG9wKCl7dGhpcy5nZXRFbGFwc2VkVGltZSgpLHRoaXMucnVubmluZz0hMSx0aGlzLmF1dG9TdGFydD0hMX1nZXRFbGFwc2VkVGltZSgpe3JldHVybiB0aGlzLmdldERlbHRhKCksdGhpcy5lbGFwc2VkVGltZX1nZXREZWx0YSgpe2xldCB0PTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwwO2lmKHRoaXMucnVubmluZyl7bGV0IHI9QWhlKCk7dD0oci10aGlzLm9sZFRpbWUpLzFlMyx0aGlzLm9sZFRpbWU9cix0aGlzLmVsYXBzZWRUaW1lKz10fXJldHVybiB0fX07ZnVuY3Rpb24gQWhlKCl7cmV0dXJuKHR5cGVvZiBwZXJmb3JtYW5jZT09InVuZGVmaW5lZCI/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCl9dmFyIHYxPW5ldyBqLFBoZT1uZXcgeWksZDByPW5ldyBqLHgxPW5ldyBqLGNodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkF1ZGlvTGlzdGVuZXIiLHRoaXMuY29udGV4dD16aHQuZ2V0Q29udGV4dCgpLHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCx0aGlzLnRpbWVEZWx0YT0wLHRoaXMuX2Nsb2NrPW5ldyBtTX1nZXRJbnB1dCgpe3JldHVybiB0aGlzLmdhaW59cmVtb3ZlRmlsdGVyKCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbCYmKHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5nYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj1udWxsKSx0aGlzfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmZpbHRlcn1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbD8odGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSk6dGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj10LHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpc31nZXRNYXN0ZXJWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0TWFzdGVyVm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpO2xldCByPXRoaXMuY29udGV4dC5saXN0ZW5lcixuPXRoaXMudXA7aWYodGhpcy50aW1lRGVsdGE9dGhpcy5fY2xvY2suZ2V0RGVsdGEoKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSh2MSxQaGUsZDByKSx4MS5zZXQoMCwwLC0xKS5hcHBseVF1YXRlcm5pb24oUGhlKSxyLnBvc2l0aW9uWCl7bGV0IGk9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMudGltZURlbHRhO3IucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHYxLngsaSksci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodjEueSxpKSxyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2MS56LGkpLHIuZm9yd2FyZFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoeDEueCxpKSxyLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHgxLnksaSksci5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh4MS56LGkpLHIudXBYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueCxpKSxyLnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnksaSksci51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi56LGkpfWVsc2Ugci5zZXRQb3NpdGlvbih2MS54LHYxLnksdjEueiksci5zZXRPcmllbnRhdGlvbih4MS54LHgxLnkseDEueixuLngsbi55LG4ueil9fSxENj1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYodGhpcy5pc1BsYXlpbmc9PT0hMCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO3JldHVybn1pZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn10aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IHI9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiByLmJ1ZmZlcj10aGlzLmJ1ZmZlcixyLmxvb3A9dGhpcy5sb29wLHIubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LHIubG9vcEVuZD10aGlzLmxvb3BFbmQsci5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLHIuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPXIsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsdGhpcy5sb29wPT09ITAmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfXN0b3AoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLHRoaXMuX2Nvbm5lY3RlZD09PSEwPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdGhpcy5zb3VyY2UuZGV0dW5lIT09dm9pZCAwKXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLnBsYXliYWNrUmF0ZT10LHRoaXMuaXNQbGF5aW5nPT09ITAmJnRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMT8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMubG9vcD10LHRoaXMuaXNQbGF5aW5nPT09ITAmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc31zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fSxiMT1uZXcgaixJaGU9bmV3IHlpLG0wcj1uZXcgaix3MT1uZXcgaix1aHQ9Y2xhc3MgZXh0ZW5kcyBENntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCksdGhpcy5wYW5uZXIucGFubmluZ01vZGVsPSJIUlRGIix0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMucGFubmVyfWdldFJlZkRpc3RhbmNlKCl7cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlfXNldFJlZkRpc3RhbmNlKHQpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZT10LHRoaXN9Z2V0Um9sbG9mZkZhY3Rvcigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfXNldFJvbGxvZmZGYWN0b3IodCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9dCx0aGlzfWdldERpc3RhbmNlTW9kZWwoKXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbH1zZXREaXN0YW5jZU1vZGVsKHQpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsPXQsdGhpc31nZXRNYXhEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX1zZXRNYXhEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9dCx0aGlzfXNldERpcmVjdGlvbmFsQ29uZSh0LHIsbil7cmV0dXJuIHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPXQsdGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9cix0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPW4sdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtpZihzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSEwJiZ0aGlzLmlzUGxheWluZz09PSExKXJldHVybjt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiMSxJaGUsbTByKSx3MS5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihJaGUpO2xldCByPXRoaXMucGFubmVyO2lmKHIucG9zaXRpb25YKXtsZXQgbj10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7ci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYjEueCxuKSxyLnBvc2l0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiMS55LG4pLHIucG9zaXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIxLnosbiksci5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodzEueCxuKSxyLm9yaWVudGF0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh3MS55LG4pLHIub3JpZW50YXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHcxLnosbil9ZWxzZSByLnNldFBvc2l0aW9uKGIxLngsYjEueSxiMS56KSxyLnNldE9yaWVudGF0aW9uKHcxLngsdzEueSx3MS56KX19LEZVPWNsYXNze2NvbnN0cnVjdG9yKHQscj0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1yLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLHI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspdCs9cltuXTtyZXR1cm4gdC9yLmxlbmd0aH19LEJVPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1uO2xldCBpLG8sYTtzd2l0Y2gocil7Y2FzZSJxdWF0ZXJuaW9uIjppPXRoaXMuX3NsZXJwLG89dGhpcy5fc2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjppPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NlbGVjdCxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkobio1KTticmVhaztkZWZhdWx0Omk9dGhpcy5fbGVycCxvPXRoaXMuX2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio1KX10aGlzLl9taXhCdWZmZXJSZWdpb249aSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1vLHRoaXMuX3NldElkZW50aXR5PWEsdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LHIpe2xldCBuPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUsbz10KmkraSxhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihhPT09MCl7Zm9yKGxldCBzPTA7cyE9PWk7KytzKW5bbytzXT1uW3NdO2E9cn1lbHNle2ErPXI7bGV0IHM9ci9hO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihuLG8sMCxzLGkpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1hfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgcj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUocixpLDAsdCxuKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgcj10aGlzLnZhbHVlU2l6ZSxuPXRoaXMuYnVmZmVyLGk9dCpyK3Isbz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxzPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLG88MSl7bGV0IGw9cip0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4saSxsLDEtbyxyKX1hPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKG4saSx0aGlzLl9hZGRJbmRleCpyLDEscik7Zm9yKGxldCBsPXIsYz1yK3I7bCE9PWM7KytsKWlmKG5bbF0hPT1uW2wrcl0pe3Muc2V0VmFsdWUobixpKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcscj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShyLGkpO2ZvcihsZXQgbz1uLGE9aTtvIT09YTsrK28pcltvXT1yW2krbyVuXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxyPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPXQ7bjxyO24rKyl0aGlzLmJ1ZmZlcltuXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLHI9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPTA7bjx0aGlzLnZhbHVlU2l6ZTtuKyspdGhpcy5idWZmZXJbcituXT10aGlzLmJ1ZmZlclt0K25dfV9zZWxlY3QodCxyLG4saSxvKXtpZihpPj0uNSlmb3IobGV0IGE9MDthIT09bzsrK2EpdFtyK2FdPXRbbithXX1fc2xlcnAodCxyLG4saSl7eWkuc2xlcnBGbGF0KHQscix0LHIsdCxuLGkpfV9zbGVycEFkZGl0aXZlKHQscixuLGksbyl7bGV0IGE9dGhpcy5fd29ya0luZGV4Km87eWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxhLHQscix0LG4pLHlpLnNsZXJwRmxhdCh0LHIsdCxyLHQsYSxpKX1fbGVycCh0LHIsbixpLG8pe2xldCBhPTEtaTtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBsPXIrczt0W2xdPXRbbF0qYSt0W24rc10qaX19X2xlcnBBZGRpdGl2ZSh0LHIsbixpLG8pe2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IHM9cithO3Rbc109dFtzXSt0W24rYV0qaX19fSxGaHQ9IlxcW1xcXVxcLjpcXC8iLGcwcj1uZXcgUmVnRXhwKCJbIitGaHQrIl0iLCJnIiksQmh0PSJbXiIrRmh0KyJdIixfMHI9IlteIitGaHQucmVwbGFjZSgiXFwuIiwiIikrIl0iLHkwcj0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksdjByPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLF8wcikseDByPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksYjByPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixCaHQpLHcwcj1uZXcgUmVnRXhwKCJeIit5MHIrdjByK3gwcitiMHIrIiQiKSxTMHI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0saGh0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1ufHxDci5wYXJzZVRyYWNrTmFtZShyKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhyLGkpfWdldFZhbHVlKHQscil7dGhpcy5iaW5kKCk7bGV0IG49dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dGhpcy5fYmluZGluZ3Nbbl07aSE9PXZvaWQgMCYmaS5nZXRWYWx1ZSh0LHIpfXNldFZhbHVlKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBpPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtyIT09bjsrK3IpdFtyXS5iaW5kKCl9dW5iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCByPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxuPXQubGVuZ3RoO3IhPT1uOysrcil0W3JdLnVuYmluZCgpfX0sQ3I9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMucGF0aD1yLHRoaXMucGFyc2VkUGF0aD1ufHxDci5wYXJzZVRyYWNrTmFtZShyKSx0aGlzLm5vZGU9Q3IuZmluZE5vZGUodCx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHx0LHRoaXMucm9vdE5vZGU9dCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfXN0YXRpYyBjcmVhdGUodCxyLG4pe3JldHVybiB0JiZ0LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IENyLkNvbXBvc2l0ZSh0LHIsbik6bmV3IENyKHQscixuKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShnMHIsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZSh0KXtsZXQgcj13MHIuZXhlYyh0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgbj17bm9kZU5hbWU6clsyXSxvYmplY3ROYW1lOnJbM10sb2JqZWN0SW5kZXg6cls0XSxwcm9wZXJ0eU5hbWU6cls1XSxwcm9wZXJ0eUluZGV4OnJbNl19LGk9bi5ub2RlTmFtZSYmbi5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKGkhPT12b2lkIDAmJmkhPT0tMSl7bGV0IG89bi5ub2RlTmFtZS5zdWJzdHJpbmcoaSsxKTtTMHIuaW5kZXhPZihvKSE9PS0xJiYobi5ub2RlTmFtZT1uLm5vZGVOYW1lLnN1YnN0cmluZygwLGkpLG4ub2JqZWN0TmFtZT1vKX1pZihuLnByb3BlcnR5TmFtZT09PW51bGx8fG4ucHJvcGVydHlOYW1lLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3QpO3JldHVybiBufXN0YXRpYyBmaW5kTm9kZSh0LHIpe2lmKCFyfHxyPT09IiJ8fHI9PT0iLiJ8fHI9PT0tMXx8cj09PXQubmFtZXx8cj09PXQudXVpZClyZXR1cm4gdDtpZih0LnNrZWxldG9uKXtsZXQgbj10LnNrZWxldG9uLmdldEJvbmVCeU5hbWUocik7aWYobiE9PXZvaWQgMClyZXR1cm4gbn1pZih0LmNoaWxkcmVuKXtsZXQgbj1mdW5jdGlvbihvKXtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKyl7bGV0IHM9b1thXTtpZihzLm5hbWU9PT1yfHxzLnV1aWQ9PT1yKXJldHVybiBzO2xldCBsPW4ocy5jaGlsZHJlbik7aWYobClyZXR1cm4gbH1yZXR1cm4gbnVsbH0saT1uKHQuY2hpbGRyZW4pO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KHQscil7dFtyXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXRbcisrXT1uW2ldfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0W3JdPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkodCxyKX1fc2V0VmFsdWVfZGlyZWN0KHQscil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbcl19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKW5baV09dFtyKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbcl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsciksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKHQscil9X3NldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMubm9kZSxyPXRoaXMucGFyc2VkUGF0aCxuPXIub2JqZWN0TmFtZSxpPXIucHJvcGVydHlOYW1lLG89ci5wcm9wZXJ0eUluZGV4O2lmKHR8fCh0PUNyLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsci5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUsdGhpcy5ub2RlPXQpLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGUsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZSwhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7cmV0dXJufWlmKG4pe2xldCBjPXIub2JqZWN0SW5kZXg7c3dpdGNoKG4pe2Nhc2UibWF0ZXJpYWxzIjppZighdC5tYXRlcmlhbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuIix0aGlzKTtyZXR1cm59aWYoIXQubWF0ZXJpYWwubWF0ZXJpYWxzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7cmV0dXJufXQ9dC5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSJib25lcyI6aWYoIXQuc2tlbGV0b24pe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7cmV0dXJufXQ9dC5za2VsZXRvbi5ib25lcztmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKylpZih0W3VdLm5hbWU9PT1jKXtjPXU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih0W25dPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7cmV0dXJufXQ9dFtuXX1pZihjIT09dm9pZCAwKXtpZih0W2NdPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLHQpO3JldHVybn10PXRbY119fWxldCBhPXRbaV07aWYoYT09PXZvaWQgMCl7bGV0IGM9ci5ub2RlTmFtZTtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2MrIi4iK2krIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsdCk7cmV0dXJufWxldCBzPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PXQsdC5uZWVkc1VwZGF0ZSE9PXZvaWQgMD9zPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUhPT12b2lkIDAmJihzPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgbD10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZihvIT09dm9pZCAwKXtpZihpPT09Im1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIpe2lmKCF0Lmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO3JldHVybn1pZih0Lmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpe2lmKCF0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7cmV0dXJufXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W29dIT09dm9pZCAwJiYobz10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtvXSl9ZWxzZXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7cmV0dXJufX1sPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hLHRoaXMucHJvcGVydHlJbmRleD1vfWVsc2UgYS5mcm9tQXJyYXkhPT12b2lkIDAmJmEudG9BcnJheSE9PXZvaWQgMD8obD10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTpBcnJheS5pc0FycmF5KGEpPyhsPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOnRoaXMucHJvcGVydHlOYW1lPWk7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbbF0sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2xdW3NdfXVuYmluZCgpe3RoaXMubm9kZT1udWxsLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fTtDci5Db21wb3NpdGU9aGh0O0NyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfTtDci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfTtDci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxDci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxDci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldO0NyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtDci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTt2YXIgSFU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtsZXQgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBuPTAsaT1hcmd1bWVudHMubGVuZ3RoO24hPT1pOysrbil0W2FyZ3VtZW50c1tuXS51dWlkXT1uO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtsZXQgcj10aGlzO3RoaXMuc3RhdHM9e29iamVjdHM6e2dldCB0b3RhbCgpe3JldHVybiByLl9vYmplY3RzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHRoaXMudG90YWwtci5uQ2FjaGVkT2JqZWN0c199fSxnZXQgYmluZGluZ3NQZXJPYmplY3QoKXtyZXR1cm4gci5fYmluZGluZ3MubGVuZ3RofX19YWRkKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9wYXRocyxpPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aCxzLGw9dC5sZW5ndGgsYz10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IHU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7dSE9PWg7Kyt1KXtsZXQgZj1hcmd1bWVudHNbdV0scD1mLnV1aWQsZD1yW3BdO2lmKGQ9PT12b2lkIDApe2Q9bCsrLHJbcF09ZCx0LnB1c2goZik7Zm9yKGxldCBnPTAsXz1hO2chPT1fOysrZylvW2ddLnB1c2gobmV3IENyKGYsbltnXSxpW2ddKSl9ZWxzZSBpZihkPGMpe3M9dFtkXTtsZXQgZz0tLWMsXz10W2ddO3JbXy51dWlkXT1kLHRbZF09XyxyW3BdPWcsdFtnXT1mO2ZvcihsZXQgeT0wLHg9YTt5IT09eDsrK3kpe2xldCBiPW9beV0sUz1iW2ddLEM9YltkXTtiW2RdPVMsQz09PXZvaWQgMCYmKEM9bmV3IENyKGYsblt5XSxpW3ldKSksYltnXT1DfX1lbHNlIHRbZF0hPT1zJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWN9cmVtb3ZlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBhPTAscz1hcmd1bWVudHMubGVuZ3RoO2EhPT1zOysrYSl7bGV0IGw9YXJndW1lbnRzW2FdLGM9bC51dWlkLHU9cltjXTtpZih1IT09dm9pZCAwJiZ1Pj1vKXtsZXQgaD1vKyssZj10W2hdO3JbZi51dWlkXT11LHRbdV09ZixyW2NdPWgsdFtoXT1sO2ZvcihsZXQgcD0wLGQ9aTtwIT09ZDsrK3Ape2xldCBnPW5bcF0sXz1nW2hdLHk9Z1t1XTtnW3VdPV8sZ1toXT15fX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b311bmNhY2hlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c18sYT10Lmxlbmd0aDtmb3IobGV0IHM9MCxsPWFyZ3VtZW50cy5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hcmd1bWVudHNbc10sdT1jLnV1aWQsaD1yW3VdO2lmKGghPT12b2lkIDApaWYoZGVsZXRlIHJbdV0saDxvKXtsZXQgZj0tLW8scD10W2ZdLGQ9LS1hLGc9dFtkXTtyW3AudXVpZF09aCx0W2hdPXAscltnLnV1aWRdPWYsdFtmXT1nLHQucG9wKCk7Zm9yKGxldCBfPTAseT1pO18hPT15OysrXyl7bGV0IHg9bltfXSxiPXhbZl0sUz14W2RdO3hbaF09Yix4W2ZdPVMseC5wb3AoKX19ZWxzZXtsZXQgZj0tLWEscD10W2ZdO2Y+MCYmKHJbcC51dWlkXT1oKSx0W2hdPXAsdC5wb3AoKTtmb3IobGV0IGQ9MCxnPWk7ZCE9PWc7KytkKXtsZXQgXz1uW2RdO19baF09X1tmXSxfLnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b31zdWJzY3JpYmVfKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGk9blt0XSxvPXRoaXMuX2JpbmRpbmdzO2lmKGkhPT12b2lkIDApcmV0dXJuIG9baV07bGV0IGE9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxsPXRoaXMuX29iamVjdHMsYz1sLmxlbmd0aCx1PXRoaXMubkNhY2hlZE9iamVjdHNfLGg9bmV3IEFycmF5KGMpO2k9by5sZW5ndGgsblt0XT1pLGEucHVzaCh0KSxzLnB1c2gociksby5wdXNoKGgpO2ZvcihsZXQgZj11LHA9bC5sZW5ndGg7ZiE9PXA7KytmKXtsZXQgZD1sW2ZdO2hbZl09bmV3IENyKGQsdCxyKX1yZXR1cm4gaH11bnN1YnNjcmliZV8odCl7bGV0IHI9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLG49clt0XTtpZihuIT09dm9pZCAwKXtsZXQgaT10aGlzLl9wYXRocyxvPXRoaXMuX3BhcnNlZFBhdGhzLGE9dGhpcy5fYmluZGluZ3Mscz1hLmxlbmd0aC0xLGw9YVtzXSxjPXRbc107cltjXT1uLGFbbl09bCxhLnBvcCgpLG9bbl09b1tzXSxvLnBvcCgpLGlbbl09aVtzXSxpLnBvcCgpfX19O0hVLnByb3RvdHlwZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwPSEwO3ZhciBmaHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49bnVsbCxpPXIuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9cix0aGlzLl9sb2NhbFJvb3Q9bix0aGlzLmJsZW5kTW9kZT1pO2xldCBvPXIudHJhY2tzLGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfTtmb3IobGV0IGM9MDtjIT09YTsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7c1tjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPXMsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkoYSksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPUlmZSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmdGhpcy50aW1lU2NhbGUhPT0wJiZ0aGlzLl9zdGFydFRpbWU9PT1udWxsJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LHIpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPXIsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LHIsbil7aWYodC5mYWRlT3V0KHIpLHRoaXMuZmFkZUluKHIpLG4pe2xldCBpPXRoaXMuX2NsaXAuZHVyYXRpb24sbz10Ll9jbGlwLmR1cmF0aW9uLGE9by9pLHM9aS9vO3Qud2FycCgxLGEsciksdGhpcy53YXJwKHMsMSxyKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LHIsbil7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLHIsbil9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LHIsbil7bGV0IGk9dGhpcy5fbWl4ZXIsbz1pLnRpbWUsYT10aGlzLnRpbWVTY2FsZSxzPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3M9PT1udWxsJiYocz1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9cyk7bGV0IGw9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1zLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytuLGNbMF09dC9hLGNbMV09ci9hLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxyLG4saSl7aWYoIXRoaXMuZW5hYmxlZCl7dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO3JldHVybn1sZXQgbz10aGlzLl9zdGFydFRpbWU7aWYobyE9PW51bGwpe2xldCBsPSh0LW8pKm47aWYobDwwfHxuPT09MClyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwscj1uKmx9cio9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2xldCBhPXRoaXMuX3VwZGF0ZVRpbWUocikscz10aGlzLl91cGRhdGVXZWlnaHQodCk7aWYocz4wKXtsZXQgbD10aGlzLl9pbnRlcnBvbGFudHMsYz10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO3N3aXRjaCh0aGlzLmJsZW5kTW9kZSl7Y2FzZSBraHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShzKTticmVhaztjYXNlICRVOmRlZmF1bHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGUoaSxzKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IHI9MDtpZih0aGlzLmVuYWJsZWQpe3I9dGhpcy53ZWlnaHQ7bGV0IG49dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobiE9PW51bGwpe2xldCBpPW4uZXZhbHVhdGUodClbMF07cio9aSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksaT09PTAmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1yLHJ9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgcj0wO2lmKCF0aGlzLnBhdXNlZCl7cj10aGlzLnRpbWVTY2FsZTtsZXQgbj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtuIT09bnVsbCYmKHIqPW4uZXZhbHVhdGUodClbMF0sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSxyPT09MD90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1yKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1yLHJ9X3VwZGF0ZVRpbWUodCl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixuPXRoaXMubG9vcCxpPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LGE9bj09PUxmZTtpZih0PT09MClyZXR1cm4gbz09PS0xP2k6YSYmKG8mMSk9PT0xP3ItaTppO2lmKG49PT1QZmUpe289PT0tMSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTt0OntpZihpPj1yKWk9cjtlbHNlIGlmKGk8MClpPTA7ZWxzZXt0aGlzLnRpbWU9aTticmVhayB0fXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZihvPT09LTEmJih0Pj0wPyhvPTAsdGhpcy5fc2V0RW5kaW5ncyghMCx0aGlzLnJlcGV0aXRpb25zPT09MCxhKSk6dGhpcy5fc2V0RW5kaW5ncyh0aGlzLnJlcGV0aXRpb25zPT09MCwhMCxhKSksaT49cnx8aTwwKXtsZXQgcz1NYXRoLmZsb29yKGkvcik7aS09cipzLG8rPU1hdGguYWJzKHMpO2xldCBsPXRoaXMucmVwZXRpdGlvbnMtbztpZihsPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGk9dD4wP3I6MCx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZihsPT09MSl7bGV0IGM9dDwwO3RoaXMuX3NldEVuZGluZ3MoYywhYyxhKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEsYSk7dGhpcy5fbG9vcENvdW50PW8sdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOnN9KX19ZWxzZSB0aGlzLnRpbWU9aTtpZihhJiYobyYxKT09PTEpcmV0dXJuIHItaX1yZXR1cm4gaX1fc2V0RW5kaW5ncyh0LHIsbil7bGV0IGk9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztuPyhpLmVuZGluZ1N0YXJ0PVQxLGkuZW5kaW5nRW5kPVQxKToodD9pLmVuZGluZ1N0YXJ0PXRoaXMuemVyb1Nsb3BlQXRTdGFydD9UMTpFMTppLmVuZGluZ1N0YXJ0PUpQLHI/aS5lbmRpbmdFbmQ9dGhpcy56ZXJvU2xvcGVBdEVuZD9UMTpFMTppLmVuZGluZ0VuZD1KUCl9X3NjaGVkdWxlRmFkaW5nKHQscixuKXtsZXQgaT10aGlzLl9taXhlcixvPWkudGltZSxhPXRoaXMuX3dlaWdodEludGVycG9sYW50O2E9PT1udWxsJiYoYT1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7bGV0IHM9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1hLnNhbXBsZVZhbHVlcztyZXR1cm4gc1swXT1vLGxbMF09cixzWzFdPW8rdCxsWzFdPW4sdGhpc319LFZVPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfV9iaW5kQWN0aW9uKHQscil7bGV0IG49dC5fbG9jYWxSb290fHx0aGlzLl9yb290LGk9dC5fY2xpcC50cmFja3Msbz1pLmxlbmd0aCxhPXQuX3Byb3BlcnR5QmluZGluZ3Mscz10Ll9pbnRlcnBvbGFudHMsbD1uLnV1aWQsYz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsdT1jW2xdO3U9PT12b2lkIDAmJih1PXt9LGNbbF09dSk7Zm9yKGxldCBoPTA7aCE9PW87KytoKXtsZXQgZj1pW2hdLHA9Zi5uYW1lLGQ9dVtwXTtpZihkIT09dm9pZCAwKSsrZC5yZWZlcmVuY2VDb3VudCxhW2hdPWQ7ZWxzZXtpZihkPWFbaF0sZCE9PXZvaWQgMCl7ZC5fY2FjaGVJbmRleD09PW51bGwmJigrK2QucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGQsbCxwKSk7Y29udGludWV9bGV0IGc9ciYmci5fcHJvcGVydHlCaW5kaW5nc1toXS5iaW5kaW5nLnBhcnNlZFBhdGg7ZD1uZXcgQlUoQ3IuY3JlYXRlKG4scCxnKSxmLlZhbHVlVHlwZU5hbWUsZi5nZXRWYWx1ZVNpemUoKSksKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLGwscCksYVtoXT1kfXNbaF0ucmVzdWx0QnVmZmVyPWQuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZih0Ll9jYWNoZUluZGV4PT09bnVsbCl7bGV0IG49KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZCxpPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXBbaV07dGhpcy5fYmluZEFjdGlvbih0LG8mJm8ua25vd25BY3Rpb25zWzBdKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih0LGksbil9bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTtvLnVzZUNvdW50Kys9PT0wJiYodGhpcy5fbGVuZEJpbmRpbmcobyksby5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKHQpfX1fZGVhY3RpdmF0ZUFjdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTstLW8udXNlQ291bnQ9PT0wJiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCByPXQuX2NhY2hlSW5kZXg7cmV0dXJuIHIhPT1udWxsJiZyPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LHIsbil7bGV0IGk9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3JdO2lmKGE9PT12b2lkIDApYT17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW3JdPWE7ZWxzZXtsZXQgcz1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX10Ll9jYWNoZUluZGV4PWkubGVuZ3RoLGkucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtuXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49cltyLmxlbmd0aC0xXSxpPXQuX2NhY2hlSW5kZXg7bi5fY2FjaGVJbmRleD1pLHJbaV09bixyLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQsYT10aGlzLl9hY3Rpb25zQnlDbGlwLHM9YVtvXSxsPXMua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbDtsZXQgaD1zLmFjdGlvbkJ5Um9vdCxmPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQ7ZGVsZXRlIGhbZl0sbC5sZW5ndGg9PT0wJiZkZWxldGUgYVtvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07LS1vLnJlZmVyZW5jZUNvdW50PT09MCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG8pfX1fbGVuZEFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxpPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fdGFrZUJhY2tBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X2FkZEluYWN0aXZlQmluZGluZyh0LHIsbil7bGV0IGk9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLG89dGhpcy5fYmluZGluZ3MsYT1pW3JdO2E9PT12b2lkIDAmJihhPXt9LGlbcl09YSksYVtuXT10LHQuX2NhY2hlSW5kZXg9by5sZW5ndGgsby5wdXNoKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsaT1uLnJvb3ROb2RlLnV1aWQsbz1uLnBhdGgsYT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1hW2ldLGw9cltyLmxlbmd0aC0xXSxjPXQuX2NhY2hlSW5kZXg7bC5fY2FjaGVJbmRleD1jLHJbY109bCxyLnBvcCgpLGRlbGV0ZSBzW29dLE9iamVjdC5rZXlzKHMpLmxlbmd0aD09PTAmJmRlbGV0ZSBhW2ldfV9sZW5kQmluZGluZyh0KXtsZXQgcj10aGlzLl9iaW5kaW5ncyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxvPXJbaV07dC5fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9jYWNoZUluZGV4PW4scltuXT1vfV90YWtlQmFja0JpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Msbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpe2xldCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMscj10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLG49dFtyXTtyZXR1cm4gbj09PXZvaWQgMCYmKG49bmV3IFM2KG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLG4uX19jYWNoZUluZGV4PXIsdFtyXT1uKSxufV90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KXtsZXQgcj10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLG49dC5fX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLG89cltpXTt0Ll9fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9fY2FjaGVJbmRleD1uLHJbbl09b31jbGlwQWN0aW9uKHQscixuKXtsZXQgaT1yfHx0aGlzLl9yb290LG89aS51dWlkLGE9dHlwZW9mIHQ9PSJzdHJpbmciP1ExLmZpbmRCeU5hbWUoaSx0KTp0LHM9YSE9PW51bGw/YS51dWlkOnQsbD10aGlzLl9hY3Rpb25zQnlDbGlwW3NdLGM9bnVsbDtpZihuPT09dm9pZCAwJiYoYSE9PW51bGw/bj1hLmJsZW5kTW9kZTpuPSRVKSxsIT09dm9pZCAwKXtsZXQgaD1sLmFjdGlvbkJ5Um9vdFtvXTtpZihoIT09dm9pZCAwJiZoLmJsZW5kTW9kZT09PW4pcmV0dXJuIGg7Yz1sLmtub3duQWN0aW9uc1swXSxhPT09bnVsbCYmKGE9Yy5fY2xpcCl9aWYoYT09PW51bGwpcmV0dXJuIG51bGw7bGV0IHU9bmV3IGZodCh0aGlzLGEscixuKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUscyxvKSx1fWV4aXN0aW5nQWN0aW9uKHQscil7bGV0IG49cnx8dGhpcy5fcm9vdCxpPW4udXVpZCxvPXR5cGVvZiB0PT0ic3RyaW5nIj9RMS5maW5kQnlOYW1lKG4sdCk6dCxhPW8/by51dWlkOnQscz10aGlzLl9hY3Rpb25zQnlDbGlwW2FdO3JldHVybiBzIT09dm9pZCAwJiZzLmFjdGlvbkJ5Um9vdFtpXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucyxyPXRoaXMuX25BY3RpdmVBY3Rpb25zO2ZvcihsZXQgbj1yLTE7bj49MDstLW4pdFtuXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe3QqPXRoaXMudGltZVNjYWxlO2xldCByPXRoaXMuX2FjdGlvbnMsbj10aGlzLl9uQWN0aXZlQWN0aW9ucyxpPXRoaXMudGltZSs9dCxvPU1hdGguc2lnbih0KSxhPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09bjsrK2MpcltjXS5fdXBkYXRlKGksdCxvLGEpO2xldCBzPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylzW2NdLmFwcGx5KGEpO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCByPTA7cjx0aGlzLl9hY3Rpb25zLmxlbmd0aDtyKyspdGhpcy5fYWN0aW9uc1tyXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPWlbbl07aWYobyE9PXZvaWQgMCl7bGV0IGE9by5rbm93bkFjdGlvbnM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzIT09bDsrK3Mpe2xldCBjPWFbc107dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgdT1jLl9jYWNoZUluZGV4LGg9cltyLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGguX2NhY2hlSW5kZXg9dSxyW3VdPWgsci5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSBpW25dfX11bmNhY2hlUm9vdCh0KXtsZXQgcj10LnV1aWQsbj10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgYSBpbiBuKXtsZXQgcz1uW2FdLmFjdGlvbkJ5Um9vdCxsPXNbcl07bCE9PXZvaWQgMCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBpPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPWlbcl07aWYobyE9PXZvaWQgMClmb3IobGV0IGEgaW4gbyl7bGV0IHM9b1thXTtzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHMpfX11bmNhY2hlQWN0aW9uKHQscil7bGV0IG49dGhpcy5leGlzdGluZ0FjdGlvbih0LHIpO24hPT1udWxsJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihuKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihuKSl9fTtWVS5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgZ009Y2xhc3N7Y29uc3RydWN0b3IodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IGdNKHRoaXMudmFsdWUuY2xvbmU9PT12b2lkIDA/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX0sVVU9Y2xhc3MgZXh0ZW5kcyBlbXtjb25zdHJ1Y3Rvcih0LHIsbj0xKXtzdXBlcih0LHIpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCByPXN1cGVyLmNsb25lKHQpO3JldHVybiByLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHJ9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLHIubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUscn19O1VVLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBxVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPXIsdGhpcy5pdGVtU2l6ZT1uLHRoaXMuZWxlbWVudFNpemU9aSx0aGlzLmNvdW50PW8sdGhpcy52ZXJzaW9uPTB9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9c2V0VHlwZSh0LHIpe3JldHVybiB0aGlzLnR5cGU9dCx0aGlzLmVsZW1lbnRTaXplPXIsdGhpc31zZXRJdGVtU2l6ZSh0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9c2V0Q291bnQodCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX07cVUucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIHBodD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9MS8wKXt0aGlzLnJheT1uZXcgSmYodCxyKSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5sYXllcnM9bmV3IFgzLHRoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e3RocmVzaG9sZDoxfSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fX1zZXQodCxyKXt0aGlzLnJheS5zZXQodCxyKX1zZXRGcm9tQ2FtZXJhKHQscil7ciYmci5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQodC54LHQueSwuNSkudW5wcm9qZWN0KHIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXMuY2FtZXJhPXIpOnImJnIuaXNPcnRob2dyYXBoaWNDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXQodC54LHQueSwoci5uZWFyK3IuZmFyKS8oci5uZWFyLXIuZmFyKSkudW5wcm9qZWN0KHIpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oci5tYXRyaXhXb3JsZCksdGhpcy5jYW1lcmE9cik6Y29uc29sZS5lcnJvcigiVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZTogIityLnR5cGUpfWludGVyc2VjdE9iamVjdCh0LHI9ITAsbj1bXSl7cmV0dXJuIGRodCh0LHRoaXMsbixyKSxuLnNvcnQoTGhlKSxufWludGVyc2VjdE9iamVjdHModCxyPSEwLG49W10pe2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKylkaHQodFtpXSx0aGlzLG4scik7cmV0dXJuIG4uc29ydChMaGUpLG59fTtmdW5jdGlvbiBMaGUoZSx0KXtyZXR1cm4gZS5kaXN0YW5jZS10LmRpc3RhbmNlfWZ1bmN0aW9uIGRodChlLHQscixuKXtpZihlLmxheWVycy50ZXN0KHQubGF5ZXJzKSYmZS5yYXljYXN0KHQsciksbj09PSEwKXtsZXQgaT1lLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylkaHQoaVtvXSx0LHIsITApfX12YXIgX009Y2xhc3N7Y29uc3RydWN0b3IodD0xLHI9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMucGhpPXIsdGhpcy50aGV0YT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1yLHRoaXMudGhldGE9bix0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMucGhpPXQucGhpLHRoaXMudGhldGE9dC50aGV0YSx0aGlzfW1ha2VTYWZlKCl7cmV0dXJuIHRoaXMucGhpPU1hdGgubWF4KDFlLTYsTWF0aC5taW4oTWF0aC5QSS0xZS02LHRoaXMucGhpKSksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtyKnIrbipuKSx0aGlzLnJhZGl1cz09PTA/KHRoaXMudGhldGE9MCx0aGlzLnBoaT0wKToodGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy5waGk9TWF0aC5hY29zKFpvKHIvdGhpcy5yYWRpdXMsLTEsMSkpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LG1odD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTEscj0wLG49MCl7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1yLHRoaXMueT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnRoZXRhPXIsdGhpcy55PW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnRoZXRhPXQudGhldGEsdGhpcy55PXQueSx0aGlzfXNldEZyb21WZWN0b3IzKHQpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModC54LHQueSx0LnopfXNldEZyb21DYXJ0ZXNpYW5Db29yZHModCxyLG4pe3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQodCp0K24qbiksdGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy55PXIsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxraGU9bmV3IEx0LCQwPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IEx0KDEvMCwxLzApLHI9bmV3IEx0KC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtyXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxyKXtsZXQgbj1raGUuY29weShyKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKG4pLHRoaXMubWF4LmNvcHkodCkuYWRkKG4pLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQscil7cmV0dXJuIHIuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBraGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19OyQwLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIFJoZT1uZXcgaixZVj1uZXcgaixHVT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yfXNldCh0LHIpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodCksdGhpcy5lbmQuY29weShyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0LnN0YXJ0KSx0aGlzLmVuZC5jb3B5KHQuZW5kKSx0aGlzfWdldENlbnRlcih0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX1kZWx0YSh0KXtyZXR1cm4gdC5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfWRpc3RhbmNlU3EoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmVuZCl9ZGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKX1hdCh0LHIpe3JldHVybiB0aGlzLmRlbHRhKHIpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KX1jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscil7UmhlLnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSxZVi5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpO2xldCBuPVlWLmRvdChZViksbz1ZVi5kb3QoUmhlKS9uO3JldHVybiByJiYobz1abyhvLDAsMSkpLG99Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIsbil7bGV0IGk9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscik7cmV0dXJuIHRoaXMuZGVsdGEobikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxOaGU9bmV3IGosZ2h0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1yO2xldCBuPW5ldyBQZSxpPVswLDAsMCwwLDAsMSwwLDAsMCwxLDAsMSwwLDAsMCwtMSwwLDEsMCwwLDAsMCwxLDEsMCwwLDAsMCwtMSwxXTtmb3IobGV0IGE9MCxzPTEsbD0zMjthPGw7YSsrLHMrKyl7bGV0IGM9YS9sKk1hdGguUEkqMix1PXMvbCpNYXRoLlBJKjI7aS5wdXNoKE1hdGguY29zKGMpLE1hdGguc2luKGMpLDEsTWF0aC5jb3ModSksTWF0aC5zaW4odSksMSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMuY29uZT1uZXcgQWEobixvKSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IHQ9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOjFlMyxyPXQqTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7dGhpcy5jb25lLnNjYWxlLnNldChyLHIsdCksTmhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCksdGhpcy5jb25lLmxvb2tBdChOaGUpLHRoaXMuY29sb3IhPT12b2lkIDA/dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19LE8wPW5ldyBqLGpWPW5ldyBNZSxidXQ9bmV3IE1lLFdVPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCl7bGV0IHI9b3BlKHQpLG49bmV3IFBlLGk9W10sbz1bXSxhPW5ldyBuZSgwLDAsMSkscz1uZXcgbmUoMCwxLDApO2ZvcihsZXQgYz0wO2M8ci5sZW5ndGg7YysrKXtsZXQgdT1yW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihpLnB1c2goMCwwLDApLGkucHVzaCgwLDAsMCksby5wdXNoKGEucixhLmcsYS5iKSxvLnB1c2gocy5yLHMuZyxzLmIpKX1uLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSxuLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShvLDMpKTtsZXQgbD1uZXcgR2koe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIobixsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1yLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPXRoaXMuYm9uZXMsbj10aGlzLmdlb21ldHJ5LGk9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7YnV0LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxhPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107cy5wYXJlbnQmJnMucGFyZW50LmlzQm9uZSYmKGpWLm11bHRpcGx5TWF0cmljZXMoYnV0LHMubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSxPMC54LE8wLnksTzAueiksalYubXVsdGlwbHlNYXRyaWNlcyhidXQscy5wYXJlbnQubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSsxLE8wLngsTzAueSxPMC56KSxhKz0yKX1uLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIG9wZShlKXtsZXQgdD1bXTtlJiZlLmlzQm9uZSYmdC5wdXNoKGUpO2ZvcihsZXQgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXQucHVzaC5hcHBseSh0LG9wZShlLmNoaWxkcmVuW3JdKSk7cmV0dXJuIHR9dmFyIF9odD1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1uZXcgajAociw0LDIpLG89bmV3IHNoKHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihpLG8pLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5jb2xvcj1uLHRoaXMudHlwZT0iUG9pbnRMaWdodEhlbHBlciIsdGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5jb2xvciE9PXZvaWQgMD90aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxNMHI9bmV3IGosRGhlPW5ldyBuZSxPaGU9bmV3IG5lLHlodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uO2xldCBpPW5ldyBXMChyKTtpLnJvdGF0ZVkoTWF0aC5QSSouNSksdGhpcy5tYXRlcmlhbD1uZXcgc2goe3dpcmVmcmFtZTohMCxmb2c6ITEsdG9uZU1hcHBlZDohMX0pLHRoaXMuY29sb3I9PT12b2lkIDAmJih0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMCk7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksYT1uZXcgRmxvYXQzMkFycmF5KG8uY291bnQqMyk7aS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgSmUoYSwzKSksdGhpcy5hZGQobmV3IHRpKGksdGhpcy5tYXRlcmlhbCkpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe2xldCB0PXRoaXMuY2hpbGRyZW5bMF07aWYodGhpcy5jb2xvciE9PXZvaWQgMCl0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle2xldCByPXQuZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO0RoZS5jb3B5KHRoaXMubGlnaHQuY29sb3IpLE9oZS5jb3B5KHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IpO2ZvcihsZXQgbj0wLGk9ci5jb3VudDtuPGk7bisrKXtsZXQgbz1uPGkvMj9EaGU6T2hlO3Iuc2V0WFlaKG4sby5yLG8uZyxvLmIpfXIubmVlZHNVcGRhdGU9ITB9dC5sb29rQXQoTTByLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSl9fSxZVT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MTAscj0xMCxuPTQ0NzM5MjQsaT04OTQ3ODQ4KXtuPW5ldyBuZShuKSxpPW5ldyBuZShpKTtsZXQgbz1yLzIsYT10L3Iscz10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLHA9MCxkPS1zO2Y8PXI7ZisrLGQrPWEpe2wucHVzaCgtcywwLGQscywwLGQpLGwucHVzaChkLDAsLXMsZCwwLHMpO2xldCBnPWY9PT1vP246aTtnLnRvQXJyYXkoYyxwKSxwKz0zLGcudG9BcnJheShjLHApLHArPTMsZy50b0FycmF5KGMscCkscCs9MyxnLnRvQXJyYXkoYyxwKSxwKz0zfWxldCB1PW5ldyBQZTt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShjLDMpKTtsZXQgaD1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX0sdmh0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xMCxyPTE2LG49OCxpPTY0LG89NDQ3MzkyNCxhPTg5NDc4NDgpe289bmV3IG5lKG8pLGE9bmV3IG5lKGEpO2xldCBzPVtdLGw9W107Zm9yKGxldCBoPTA7aDw9cjtoKyspe2xldCBmPWgvciooTWF0aC5QSSoyKSxwPU1hdGguc2luKGYpKnQsZD1NYXRoLmNvcyhmKSp0O3MucHVzaCgwLDAsMCkscy5wdXNoKHAsMCxkKTtsZXQgZz1oJjE/bzphO2wucHVzaChnLnIsZy5nLGcuYiksbC5wdXNoKGcucixnLmcsZy5iKX1mb3IobGV0IGg9MDtoPD1uO2grKyl7bGV0IGY9aCYxP286YSxwPXQtdC9uKmg7Zm9yKGxldCBkPTA7ZDxpO2QrKyl7bGV0IGc9ZC9pKihNYXRoLlBJKjIpLF89TWF0aC5zaW4oZykqcCx5PU1hdGguY29zKGcpKnA7cy5wdXNoKF8sMCx5KSxsLnB1c2goZi5yLGYuZyxmLmIpLGc9KGQrMSkvaSooTWF0aC5QSSoyKSxfPU1hdGguc2luKGcpKnAseT1NYXRoLmNvcyhnKSpwLHMucHVzaChfLDAseSksbC5wdXNoKGYucixmLmcsZi5iKX19bGV0IGM9bmV3IFBlO2Muc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLGMuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IHhlKGwsMykpO2xldCB1PW5ldyBHaSh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihjLHUpLHRoaXMudHlwZT0iUG9sYXJHcmlkSGVscGVyIn19LHpoZT1uZXcgaixYVj1uZXcgaixGaGU9bmV3IGoseGh0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW4scj09PXZvaWQgMCYmKHI9MSk7bGV0IGk9bmV3IFBlO2kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFstcixyLDAscixyLDAsciwtciwwLC1yLC1yLDAsLXIsciwwXSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMubGlnaHRQbGFuZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLmxpZ2h0UGxhbmUpLGk9bmV3IFBlLGkuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDAsMV0sMykpLHRoaXMudGFyZ2V0TGluZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLnRhcmdldExpbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7emhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKSxYVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLEZoZS5zdWJWZWN0b3JzKFhWLHpoZSksdGhpcy5saWdodFBsYW5lLmxvb2tBdChYViksdGhpcy5jb2xvciE9PXZvaWQgMD8odGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpKToodGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpLHRoaXMudGFyZ2V0TGluZS5sb29rQXQoWFYpLHRoaXMudGFyZ2V0TGluZS5zY2FsZS56PUZoZS5sZW5ndGgoKX19LCRWPW5ldyBqLF9pPW5ldyBSMSxiaHQ9Y2xhc3MgZXh0ZW5kcyBBYXtjb25zdHJ1Y3Rvcih0KXtsZXQgcj1uZXcgUGUsbj1uZXcgR2koe2NvbG9yOjE2Nzc3MjE1LHZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSksaT1bXSxvPVtdLGE9e30scz1uZXcgbmUoMTY3NTUyMDApLGw9bmV3IG5lKDE2NzExNjgwKSxjPW5ldyBuZSg0Mzc3NSksdT1uZXcgbmUoMTY3NzcyMTUpLGg9bmV3IG5lKDMzNTU0NDMpO2YoIm4xIiwibjIiLHMpLGYoIm4yIiwibjQiLHMpLGYoIm40IiwibjMiLHMpLGYoIm4zIiwibjEiLHMpLGYoImYxIiwiZjIiLHMpLGYoImYyIiwiZjQiLHMpLGYoImY0IiwiZjMiLHMpLGYoImYzIiwiZjEiLHMpLGYoIm4xIiwiZjEiLHMpLGYoIm4yIiwiZjIiLHMpLGYoIm4zIiwiZjMiLHMpLGYoIm40IiwiZjQiLHMpLGYoInAiLCJuMSIsbCksZigicCIsIm4yIixsKSxmKCJwIiwibjMiLGwpLGYoInAiLCJuNCIsbCksZigidTEiLCJ1MiIsYyksZigidTIiLCJ1MyIsYyksZigidTMiLCJ1MSIsYyksZigiYyIsInQiLHUpLGYoInAiLCJjIixoKSxmKCJjbjEiLCJjbjIiLGgpLGYoImNuMyIsImNuNCIsaCksZigiY2YxIiwiY2YyIixoKSxmKCJjZjMiLCJjZjQiLGgpO2Z1bmN0aW9uIGYoZCxnLF8pe3AoZCxfKSxwKGcsXyl9ZnVuY3Rpb24gcChkLGcpe2kucHVzaCgwLDAsMCksby5wdXNoKGcucixnLmcsZy5iKSxhW2RdPT09dm9pZCAwJiYoYVtkXT1bXSksYVtkXS5wdXNoKGkubGVuZ3RoLzMtMSl9ci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksci5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobywzKSksc3VwZXIocixuKSx0aGlzLnR5cGU9IkNhbWVyYUhlbHBlciIsdGhpcy5jYW1lcmE9dCx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5wb2ludE1hcD1hLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeSxyPXRoaXMucG9pbnRNYXAsbj0xLGk9MTtfaS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSxQaSgiYyIscix0LF9pLDAsMCwtMSksUGkoInQiLHIsdCxfaSwwLDAsMSksUGkoIm4xIixyLHQsX2ksLW4sLWksLTEpLFBpKCJuMiIscix0LF9pLG4sLWksLTEpLFBpKCJuMyIscix0LF9pLC1uLGksLTEpLFBpKCJuNCIscix0LF9pLG4saSwtMSksUGkoImYxIixyLHQsX2ksLW4sLWksMSksUGkoImYyIixyLHQsX2ksbiwtaSwxKSxQaSgiZjMiLHIsdCxfaSwtbixpLDEpLFBpKCJmNCIscix0LF9pLG4saSwxKSxQaSgidTEiLHIsdCxfaSxuKi43LGkqMS4xLC0xKSxQaSgidTIiLHIsdCxfaSwtbiouNyxpKjEuMSwtMSksUGkoInUzIixyLHQsX2ksMCxpKjIsLTEpLFBpKCJjZjEiLHIsdCxfaSwtbiwwLDEpLFBpKCJjZjIiLHIsdCxfaSxuLDAsMSksUGkoImNmMyIscix0LF9pLDAsLWksMSksUGkoImNmNCIscix0LF9pLDAsaSwxKSxQaSgiY24xIixyLHQsX2ksLW4sMCwtMSksUGkoImNuMiIscix0LF9pLG4sMCwtMSksUGkoImNuMyIscix0LF9pLDAsLWksLTEpLFBpKCJjbjQiLHIsdCxfaSwwLGksLTEpLHQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19O2Z1bmN0aW9uIFBpKGUsdCxyLG4saSxvLGEpeyRWLnNldChpLG8sYSkudW5wcm9qZWN0KG4pO2xldCBzPXRbZV07aWYocyE9PXZvaWQgMCl7bGV0IGw9ci5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7Zm9yKGxldCBjPTAsdT1zLmxlbmd0aDtjPHU7YysrKWwuc2V0WFlaKHNbY10sJFYueCwkVi55LCRWLnopfX12YXIgS1Y9bmV3IHRhLHlNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1uZXcgRmxvYXQzMkFycmF5KDgqMyksbz1uZXcgUGU7by5zZXRJbmRleChuZXcgSmUobiwxKSksby5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUoaSwzKSksc3VwZXIobyxuZXcgR2koe2NvbG9yOnIsdG9uZU1hcHBlZDohMX0pKSx0aGlzLm9iamVjdD10LHRoaXMudHlwZT0iQm94SGVscGVyIix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX11cGRhdGUodCl7aWYodCE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4iKSx0aGlzLm9iamVjdCE9PXZvaWQgMCYmS1Yuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCksS1YuaXNFbXB0eSgpKXJldHVybjtsZXQgcj1LVi5taW4sbj1LVi5tYXgsaT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sbz1pLmFycmF5O29bMF09bi54LG9bMV09bi55LG9bMl09bi56LG9bM109ci54LG9bNF09bi55LG9bNV09bi56LG9bNl09ci54LG9bN109ci55LG9bOF09bi56LG9bOV09bi54LG9bMTBdPXIueSxvWzExXT1uLnosb1sxMl09bi54LG9bMTNdPW4ueSxvWzE0XT1yLnosb1sxNV09ci54LG9bMTZdPW4ueSxvWzE3XT1yLnosb1sxOF09ci54LG9bMTldPXIueSxvWzIwXT1yLnosb1syMV09bi54LG9bMjJdPXIueSxvWzIzXT1yLnosaS5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfXNldEZyb21PYmplY3QodCl7cmV0dXJuIHRoaXMub2JqZWN0PXQsdGhpcy51cGRhdGUoKSx0aGlzfWNvcHkodCl7cmV0dXJuIEFhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm9iamVjdD10Lm9iamVjdCx0aGlzfX0sd2h0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1bMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwtMSwtMSwxLC0xLC0xLC0xLC0xLDEsLTEsLTFdLG89bmV3IFBlO28uc2V0SW5kZXgobmV3IEplKG4sMSkpLG8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHN1cGVyKG8sbmV3IEdpKHtjb2xvcjpyLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5ib3g9dCx0aGlzLnR5cGU9IkJveDNIZWxwZXIiLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IHI9dGhpcy5ib3g7ci5pc0VtcHR5KCl8fChyLmdldENlbnRlcih0aGlzLnBvc2l0aW9uKSxyLmdldFNpemUodGhpcy5zY2FsZSksdGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhciguNSksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCkpfX0sU2h0PWNsYXNzIGV4dGVuZHMgY2h7Y29uc3RydWN0b3IodCxyPTEsbj0xNjc3Njk2MCl7bGV0IGk9bixvPVsxLC0xLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwxLDAsMCwxLDAsMCwwXSxhPW5ldyBQZTthLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShvLDMpKSxhLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHN1cGVyKGEsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJQbGFuZUhlbHBlciIsdGhpcy5wbGFuZT10LHRoaXMuc2l6ZT1yO2xldCBzPVsxLDEsMSwtMSwxLDEsLTEsLTEsMSwxLDEsMSwtMSwtMSwxLDEsLTEsMV0sbD1uZXcgUGU7bC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksbC5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzLmFkZChuZXcgdGkobCxuZXcgc2goe2NvbG9yOmksb3BhY2l0eTouMix0cmFuc3BhcmVudDohMCxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITF9KSkpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPS10aGlzLnBsYW5lLmNvbnN0YW50O01hdGguYWJzKHIpPDFlLTgmJihyPTFlLTgpLHRoaXMuc2NhbGUuc2V0KC41KnRoaXMuc2l6ZSwuNSp0aGlzLnNpemUsciksdGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5zaWRlPXI8MD9JaTpJMSx0aGlzLmxvb2tBdCh0aGlzLnBsYW5lLm5vcm1hbCksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fSxCaGU9bmV3IGosWlYsd3V0LE1odD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IGooMCwwLDEpLHI9bmV3IGooMCwwLDApLG49MSxpPTE2Nzc2OTYwLG89biouMixhPW8qLjIpe3N1cGVyKCksdGhpcy50eXBlPSJBcnJvd0hlbHBlciIsWlY9PT12b2lkIDAmJihaVj1uZXcgUGUsWlYuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDEsMF0sMykpLHd1dD1uZXcgb20oMCwuNSwxLDUsMSksd3V0LnRyYW5zbGF0ZSgwLC0uNSwwKSksdGhpcy5wb3NpdGlvbi5jb3B5KHIpLHRoaXMubGluZT1uZXcgY2goWlYsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5saW5lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5saW5lKSx0aGlzLmNvbmU9bmV3IHRpKHd1dCxuZXcgc2goe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLmNvbmUubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMuc2V0RGlyZWN0aW9uKHQpLHRoaXMuc2V0TGVuZ3RoKG4sbyxhKX1zZXREaXJlY3Rpb24odCl7aWYodC55Pi45OTk5OSl0aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpO2Vsc2UgaWYodC55PC0uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgxLDAsMCwwKTtlbHNle0JoZS5zZXQodC56LDAsLXQueCkubm9ybWFsaXplKCk7bGV0IHI9TWF0aC5hY29zKHQueSk7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoQmhlLHIpfX1zZXRMZW5ndGgodCxyPXQqLjIsbj1yKi4yKXt0aGlzLmxpbmUuc2NhbGUuc2V0KDEsTWF0aC5tYXgoMWUtNCx0LXIpLDEpLHRoaXMubGluZS51cGRhdGVNYXRyaXgoKSx0aGlzLmNvbmUuc2NhbGUuc2V0KG4scixuKSx0aGlzLmNvbmUucG9zaXRpb24ueT10LHRoaXMuY29uZS51cGRhdGVNYXRyaXgoKX1zZXRDb2xvcih0KXt0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHQpLHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0LCExKSx0aGlzLmxpbmUuY29weSh0LmxpbmUpLHRoaXMuY29uZS5jb3B5KHQuY29uZSksdGhpc319LHZNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xKXtsZXQgcj1bMCwwLDAsdCwwLDAsMCwwLDAsMCx0LDAsMCwwLDAsMCwwLHRdLG49WzEsMCwwLDEsLjYsMCwwLDEsMCwuNiwxLDAsMCwwLDEsMCwuNiwxXSxpPW5ldyBQZTtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShuLDMpKTtsZXQgbz1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIoaSxvKSx0aGlzLnR5cGU9IkF4ZXNIZWxwZXIifXNldENvbG9ycyh0LHIsbil7bGV0IGk9bmV3IG5lLG89dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLmFycmF5O3JldHVybiBpLnNldCh0KSxpLnRvQXJyYXkobywwKSxpLnRvQXJyYXkobywzKSxpLnNldChyKSxpLnRvQXJyYXkobyw2KSxpLnRvQXJyYXkobyw5KSxpLnNldChuKSxpLnRvQXJyYXkobywxMiksaS50b0FycmF5KG8sMTUpLHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5uZWVkc1VwZGF0ZT0hMCx0aGlzfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19LEVodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBuZSx0aGlzLnN1YlBhdGhzPVtdLHRoaXMuY3VycmVudFBhdGg9bnVsbH1tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aD1uZXcgcTEsdGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpLHRoaXMuY3VycmVudFBhdGgubW92ZVRvKHQsciksdGhpc31saW5lVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5saW5lVG8odCxyKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxyLG4saSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyh0LHIsbixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8odCxyLG4saSxvLGEpLHRoaXN9c3BsaW5lVGhydSh0KXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KHQpLHRoaXN9dG9TaGFwZXModCxyKXtmdW5jdGlvbiBuKHgpe2xldCBiPVtdO2ZvcihsZXQgUz0wLEM9eC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9eFtTXSxrPW5ldyBLYztrLmN1cnZlcz1QLmN1cnZlcyxiLnB1c2goayl9cmV0dXJuIGJ9ZnVuY3Rpb24gaSh4LGIpe2xldCBTPWIubGVuZ3RoLEM9ITE7Zm9yKGxldCBQPVMtMSxrPTA7azxTO1A9aysrKXtsZXQgTz1iW1BdLEQ9YltrXSxCPUQueC1PLngsST1ELnktTy55O2lmKE1hdGguYWJzKEkpPk51bWJlci5FUFNJTE9OKXtpZihJPDAmJihPPWJba10sQj0tQixEPWJbUF0sST0tSSkseC55PE8ueXx8eC55PkQueSljb250aW51ZTtpZih4Lnk9PT1PLnkpe2lmKHgueD09PU8ueClyZXR1cm4hMH1lbHNle2xldCBMPUkqKHgueC1PLngpLUIqKHgueS1PLnkpO2lmKEw9PT0wKXJldHVybiEwO2lmKEw8MCljb250aW51ZTtDPSFDfX1lbHNle2lmKHgueSE9PU8ueSljb250aW51ZTtpZihELng8PXgueCYmeC54PD1PLnh8fE8ueDw9eC54JiZ4Lng8PUQueClyZXR1cm4hMH19cmV0dXJuIEN9bGV0IG89WmMuaXNDbG9ja1dpc2UsYT10aGlzLnN1YlBhdGhzO2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtpZihyPT09ITApcmV0dXJuIG4oYSk7bGV0IHMsbCxjLHU9W107aWYoYS5sZW5ndGg9PT0xKXJldHVybiBsPWFbMF0sYz1uZXcgS2MsYy5jdXJ2ZXM9bC5jdXJ2ZXMsdS5wdXNoKGMpLHU7bGV0IGg9IW8oYVswXS5nZXRQb2ludHMoKSk7aD10PyFoOmg7bGV0IGY9W10scD1bXSxkPVtdLGc9MCxfO3BbZ109dm9pZCAwLGRbZ109W107Zm9yKGxldCB4PTAsYj1hLmxlbmd0aDt4PGI7eCsrKWw9YVt4XSxfPWwuZ2V0UG9pbnRzKCkscz1vKF8pLHM9dD8hczpzLHM/KCFoJiZwW2ddJiZnKysscFtnXT17czpuZXcgS2MscDpffSxwW2ddLnMuY3VydmVzPWwuY3VydmVzLGgmJmcrKyxkW2ddPVtdKTpkW2ddLnB1c2goe2g6bCxwOl9bMF19KTtpZighcFswXSlyZXR1cm4gbihhKTtpZihwLmxlbmd0aD4xKXtsZXQgeD0hMSxiPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKylmW1NdPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9ZFtTXTtmb3IobGV0IGs9MDtrPFAubGVuZ3RoO2srKyl7bGV0IE89UFtrXSxEPSEwO2ZvcihsZXQgQj0wO0I8cC5sZW5ndGg7QisrKWkoTy5wLHBbQl0ucCkmJihTIT09QiYmYi5wdXNoKHtmcm9tczpTLHRvczpCLGhvbGU6a30pLEQ/KEQ9ITEsZltCXS5wdXNoKE8pKTp4PSEwKTtEJiZmW1NdLnB1c2goTyl9fWIubGVuZ3RoPjAmJih4fHwoZD1mKSl9bGV0IHk7Zm9yKGxldCB4PTAsYj1wLmxlbmd0aDt4PGI7eCsrKXtjPXBbeF0ucyx1LnB1c2goYykseT1kW3hdO2ZvcihsZXQgUz0wLEM9eS5sZW5ndGg7UzxDO1MrKyljLmhvbGVzLnB1c2goeVtTXS5oKX1yZXR1cm4gdX19LGFwZT1uZXcgRmxvYXQzMkFycmF5KDEpLEUwcj1uZXcgSW50MzJBcnJheShhcGUuYnVmZmVyKSxUaHQ9Y2xhc3N7c3RhdGljIHRvSGFsZkZsb2F0KHQpe3Q+NjU1MDQmJihjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFVdGlscy50b0hhbGZGbG9hdCgpOiB2YWx1ZSBleGNlZWRzIDY1NTA0LiIpLHQ9NjU1MDQpLGFwZVswXT10O2xldCByPUUwclswXSxuPXI+PjE2JjMyNzY4LGk9cj4+MTImMjA0NyxvPXI+PjIzJjI1NTtyZXR1cm4gbzwxMDM/bjpvPjE0Mj8obnw9MzE3NDQsbnw9KG89PTI1NT8wOjEpJiZyJjgzODg2MDcsbik6bzwxMTM/KGl8PTIwNDgsbnw9KGk+PjExNC1vKSsoaT4+MTEzLW8mMSksbik6KG58PW8tMTEyPDwxMHxpPj4xLG4rPWkmMSxuKX19LFQwcj0wLEMwcj0xLEEwcj0wLFAwcj0xLEkwcj0yO2Z1bmN0aW9uIEwwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoRmFjZU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLGV9ZnVuY3Rpb24gazByKGU9W10pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIiksZS5pc011bHRpTWF0ZXJpYWw9ITAsZS5tYXRlcmlhbHM9ZSxlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2xpY2UoKX0sZX1mdW5jdGlvbiBSMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpLG5ldyBpbShlLHQpfWZ1bmN0aW9uIE4wcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKSxuZXcgb00oZSl9ZnVuY3Rpb24gRDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIiksbmV3IGltKGUsdCl9ZnVuY3Rpb24gTzByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiB6MHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIEYwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIEIwcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIiksbmV3IGooZSx0LHIpfWZ1bmN0aW9uIEgwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXRVc2FnZSggVEhSRUUuRHluYW1pY0RyYXdVc2FnZSApIGluc3RlYWQuIiksbmV3IEplKGUsdCkuc2V0VXNhZ2UoWTMpfWZ1bmN0aW9uIFYwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgY1UoZSx0KX1mdW5jdGlvbiBVMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgdVUoZSx0KX1mdW5jdGlvbiBxMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OENsYW1wZWRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBoVShlLHQpfWZ1bmN0aW9uIEcwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBmVShlLHQpfWZ1bmN0aW9uIFcwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3ICQzKGUsdCl9ZnVuY3Rpb24gWTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHBVKGUsdCl9ZnVuY3Rpb24gajByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgSzMoZSx0KX1mdW5jdGlvbiBYMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GbG9hdDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHhlKGUsdCl9ZnVuY3Rpb24gJDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBtVShlLHQpfWZzLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZnMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldFBvaW50PXQsZX07cTEucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKGUpfTtmdW5jdGlvbiBLMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQXhpc0hlbHBlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkF4ZXNIZWxwZXIuIiksbmV3IHZNKGUpfWZ1bmN0aW9uIFowcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuIiksbmV3IHlNKGUsdCl9ZnVuY3Rpb24gSjByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRWRnZXNIZWxwZXIgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkVkZ2VzR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgQWEobmV3IHM2KGUuZ2VvbWV0cnkpLG5ldyBHaSh7Y29sb3I6dCE9PXZvaWQgMD90OjE2Nzc3MjE1fSkpfVlVLnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9O1dVLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4iKX07ZnVuY3Rpb24gUTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpLG5ldyBBYShuZXcgZDYoZS5nZW9tZXRyeSksbmV3IEdpKHtjb2xvcjp0IT09dm9pZCAwP3Q6MTY3NzcyMTV9KSl9ZWEucHJvdG90eXBlLmV4dHJhY3RVcmxCYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlcjogLmV4dHJhY3RVcmxCYXNlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkxvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCkgaW5zdGVhZC4iKSxkTS5leHRyYWN0VXJsQmFzZShlKX07ZWEuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIHRfcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5YSFJMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5GaWxlTG9hZGVyLiIpLG5ldyBKYyhlKX1mdW5jdGlvbiBlX3IoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpLG5ldyBDVShlKX0kMC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07JDAucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTskMC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07JDAucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKGUpfTt0YS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07dGEucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTt0YS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07dGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O3RhLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShlKX07WmYucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9O04xLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KGUpfTtHVS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O2tpLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O2tpLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtraS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07a2kucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShlKS5pbnZlcnQoKX07TWUucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIiksdGhpcy5jb3B5UG9zaXRpb24oZSl9O01lLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O01lLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuZXcgaigpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX07TWUucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oZSl9O01lLnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yND1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVBeGlzPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuIiksZS50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcyl9O01lLnByb3RvdHlwZS5jcm9zc1ZlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlQnlBeGlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubWFrZUZydXN0dW09ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuIiksdGhpcy5tYWtlUGVyc3BlY3RpdmUoZSx0LG4scixpLG8pfTtNZS5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KGUpLmludmVydCgpfTskYy5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKGUpfTt5aS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgaXMgbm93IHZlY3Rvci5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKSBpbnN0ZWFkLiIpLGUuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTt5aS5wcm90b3R5cGUuaW52ZXJzZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KGUpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzUGxhbmUoZSl9O0pmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O29pLnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpLHRoaXMuZ2V0QXJlYSgpfTtvaS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZChlLHQpfTtvaS5wcm90b3R5cGUubWlkcG9pbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIiksdGhpcy5nZXRNaWRwb2ludChlKX07b2kucHJvdG90eXBlbm9ybWFsPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksdGhpcy5nZXROb3JtYWwoZSl9O29pLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLnBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0UGxhbmUoKS4iKSx0aGlzLmdldFBsYW5lKGUpfTtvaS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLG9pLmdldEJhcnljb29yZChlLHQscixuLGkpfTtvaS5ub3JtYWw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSxvaS5nZXROb3JtYWwoZSx0LHIsbil9O0tjLnByb3RvdHlwZS5leHRyYWN0QWxsUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKGUpfTtLYy5wcm90b3R5cGUuZXh0cnVkZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgaGgodGhpcyxlKX07S2MucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgWTAodGhpcyxlKX07THQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQscil9O0x0LnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07THQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5nZXRQb3NpdGlvbkZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUpfTtqLnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKGUpfTtqLnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsZSl9O2oucHJvdG90eXBlLmFwcGx5UHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpLHRoaXMuYXBwbHlNYXRyaXg0KGUpfTtqLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtqLnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07ai5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O2VuLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtlbi5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O29yLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIiksdGhpcy5nZXRPYmplY3RCeU5hbWUoZSl9O29yLnByb3RvdHlwZS5yZW5kZXJEZXB0aD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfTtvci5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpLHRoaXMudHJhbnNsYXRlT25BeGlzKHQsZSl9O29yLnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX07b3IucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob3IucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPWV9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTt0aS5wcm90b3R5cGUuc2V0RHJhd01vZGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aS5wcm90b3R5cGUse2RyYXdNb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIiksa2ZlfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7YU0ucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtVaS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihlLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT2wucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9ZX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1lfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1lfX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9ZX19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPWV9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9ZX19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPWV9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPWV9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9ZX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9ZX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSmUucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09WTN9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShZMyl9fX0pO0plLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKGU9PT0hMD9ZMzpXMyksdGhpc307SmUucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSmUucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07UGUucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChlKX07UGUucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShlLG5ldyBKZShhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOmU9PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShlLHQpfTtQZS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24oZSx0LHIpe3IhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChlLHQpfTtQZS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtQZS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtQZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUoZSl9O1BlLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBlLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7ZW0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShlPT09ITA/WTM6VzMpLHRoaXN9O2VtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07aGgucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2hoLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtoaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3EwLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07Z00ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocWkucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBuZX19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9ZT09PUFodH19LHN0ZW5jaWxNYXNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFza30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2s9ZX19LHZlcnRleFRhbmdlbnRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsaC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPWV9fX0pO3JuLnByb3RvdHlwZS5jbGVhclRhcmdldD1mdW5jdGlvbihlLHQscixuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuIiksdGhpcy5zZXRSZW5kZXJUYXJnZXQoZSksdGhpcy5jbGVhcih0LHIsbil9O3JuLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4iKSx0aGlzLnNldEFuaW1hdGlvbkxvb3AoZSl9O3JuLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9O3JuLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuIiksdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfTtybi5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4iKSx0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb259O3JuLnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuIiksdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKX07cm4ucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QoZSl9O3JuLnByb3RvdHlwZS5pbml0TWF0ZXJpYWw9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuYWRkUHJlUGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUHJlUGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmUyRD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEFjdGl2ZU1pcE1hcExldmVsKCkgaXMgbm93IC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLiIpLHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocm4ucHJvdG90eXBlLHtzaGFkb3dNYXBFbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4iKSx0aGlzLnNoYWRvd01hcC5lbmFibGVkPWV9fSxzaGFkb3dNYXBUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4iKSx0aGlzLnNoYWRvd01hcC50eXBlPWV9fSxzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LGNvbnRleHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuIiksdGhpcy5nZXRDb250ZXh0KCl9fSx2cjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnZyIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnhyIiksdGhpcy54cn19LGdhbW1hSW5wdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKX19LGdhbW1hT3V0cHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksdGhpcy5vdXRwdXRFbmNvZGluZz1lPT09ITA/V246UWR9fSx0b25lTWFwcGluZ1doaXRlUG9pbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKSwxfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LGdhbW1hRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKSwyfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZmUucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pO2Z1bmN0aW9uIHJfcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApLiIpLG5ldyBRMyhlLHIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHVzLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPWV9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9ZX19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZX19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZX19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PWV9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PWV9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PWV9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PWV9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1lfX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lfX19KTtENi5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybiBuZXcgRFUoKS5sb2FkKGUsZnVuY3Rpb24obil7dC5zZXRCdWZmZXIobil9KSx0aGlzfTtGVS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9O0ozLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKGUsdCl9O0ozLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKGUsdCxyLG4pfTtLZi5jcm9zc09yaWdpbj12b2lkIDA7S2YubG9hZFRleHR1cmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgaT1uZXcgQVU7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1pLmxvYWQoZSxyLHZvaWQgMCxuKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfTtLZi5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCBpPW5ldyBUVTtpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBvPWkubG9hZChlLHIsdm9pZCAwLG4pO3JldHVybiB0JiYoby5tYXBwaW5nPXQpLG99O0tmLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07S2YubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O2Z1bmN0aW9uIG5fcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX1mdW5jdGlvbiBpX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyIGhhcyBiZWVuIHJlbW92ZWQuIil9dmFyIG9fcj17Y3JlYXRlTXVsdGlNYXRlcmlhbE9iamVjdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGRldGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGF0dGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9fTtmdW5jdGlvbiBhX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9vYmplY3RzL0xlbnNmbGFyZS5qcyIpfWZ1bmN0aW9uIHNfcigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5QYXJhbWV0cmljR2VvbWV0cnkgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1BhcmFtZXRyaWNHZW9tZXRyeS5qcyIpLG5ldyBQZX1mdW5jdGlvbiBsX3IoKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuVGV4dEdlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9UZXh0R2VvbWV0cnkuanMiKSxuZXcgUGV9ZnVuY3Rpb24gY19yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRm9udExvYWRlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcyIpfWZ1bmN0aW9uIHVfcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkZvbnQgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMiKX1mdW5jdGlvbiBoX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbW1lZGlhdGVSZW5kZXJPYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4iKX10eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246alV9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPWpVKTt2YXIgc3BlPXt0eXBlOiJjaGFuZ2UifSxIaHQ9e3R5cGU6InN0YXJ0In0sbHBlPXt0eXBlOiJlbmQifSxKVT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSxyPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyICJkb21FbGVtZW50IiBpcyBub3cgbWFuZGF0b3J5LicpLHI9PT1kb2N1bWVudCYmY29uc29sZS5lcnJvcignVEhSRUUuT3JiaXRDb250cm9sczogImRvY3VtZW50IiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCAiZG9tRWxlbWVudCIuIFBsZWFzZSB1c2UgInJlbmRlcmVyLmRvbUVsZW1lbnQiIGluc3RlYWQuJyksdGhpcy5vYmplY3Q9dCx0aGlzLmRvbUVsZW1lbnQ9cix0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb249Im5vbmUiLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRhcmdldD1uZXcgaix0aGlzLm1pbkRpc3RhbmNlPTAsdGhpcy5tYXhEaXN0YW5jZT0xLzAsdGhpcy5taW5ab29tPTAsdGhpcy5tYXhab29tPTEvMCx0aGlzLm1pblBvbGFyQW5nbGU9MCx0aGlzLm1heFBvbGFyQW5nbGU9TWF0aC5QSSx0aGlzLm1pbkF6aW11dGhBbmdsZT0tMS8wLHRoaXMubWF4QXppbXV0aEFuZ2xlPTEvMCx0aGlzLmVuYWJsZURhbXBpbmc9ITEsdGhpcy5kYW1waW5nRmFjdG9yPS4wNSx0aGlzLmVuYWJsZVpvb209ITAsdGhpcy56b29tU3BlZWQ9MSx0aGlzLmVuYWJsZVJvdGF0ZT0hMCx0aGlzLnJvdGF0ZVNwZWVkPTEsdGhpcy5lbmFibGVQYW49ITAsdGhpcy5wYW5TcGVlZD0xLHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSEwLHRoaXMua2V5UGFuU3BlZWQ9Nyx0aGlzLmF1dG9Sb3RhdGU9ITEsdGhpcy5hdXRvUm90YXRlU3BlZWQ9Mix0aGlzLmtleXM9e0xFRlQ6IkFycm93TGVmdCIsVVA6IkFycm93VXAiLFJJR0hUOiJBcnJvd1JpZ2h0IixCT1RUT006IkFycm93RG93biJ9LHRoaXMubW91c2VCdXR0b25zPXtMRUZUOkswLlJPVEFURSxNSURETEU6SzAuRE9MTFksUklHSFQ6SzAuUEFOfSx0aGlzLnRvdWNoZXM9e09ORTpaMC5ST1RBVEUsVFdPOlowLkRPTExZX1BBTn0sdGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCksdGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKSx0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb20sdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udWxsLHRoaXMuZ2V0UG9sYXJBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnBoaX0sdGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnRoZXRhfSx0aGlzLmdldERpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JqZWN0LnBvc2l0aW9uLmRpc3RhbmNlVG8odGhpcy50YXJnZXQpfSx0aGlzLmxpc3RlblRvS2V5RXZlbnRzPWZ1bmN0aW9uKG50KXtudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmciksdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udH0sdGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtuLnRhcmdldDAuY29weShuLnRhcmdldCksbi5wb3NpdGlvbjAuY29weShuLm9iamVjdC5wb3NpdGlvbiksbi56b29tMD1uLm9iamVjdC56b29tfSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7bi50YXJnZXQuY29weShuLnRhcmdldDApLG4ub2JqZWN0LnBvc2l0aW9uLmNvcHkobi5wb3NpdGlvbjApLG4ub2JqZWN0Lnpvb209bi56b29tMCxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksbi5kaXNwYXRjaEV2ZW50KHNwZSksbi51cGRhdGUoKSxvPWkuTk9ORX0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGosQ3Q9bmV3IHlpKCkuc2V0RnJvbVVuaXRWZWN0b3JzKHQudXAsbmV3IGooMCwxLDApKSxXdD1DdC5jbG9uZSgpLmludmVydCgpLGZlPW5ldyBqLGF0PW5ldyB5aSxzZT0yKk1hdGguUEk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IENlPW4ub2JqZWN0LnBvc2l0aW9uO250LmNvcHkoQ2UpLnN1YihuLnRhcmdldCksbnQuYXBwbHlRdWF0ZXJuaW9uKEN0KSxzLnNldEZyb21WZWN0b3IzKG50KSxuLmF1dG9Sb3RhdGUmJm89PT1pLk5PTkUmJkQoaygpKSxuLmVuYWJsZURhbXBpbmc/KHMudGhldGErPWwudGhldGEqbi5kYW1waW5nRmFjdG9yLHMucGhpKz1sLnBoaSpuLmRhbXBpbmdGYWN0b3IpOihzLnRoZXRhKz1sLnRoZXRhLHMucGhpKz1sLnBoaSk7bGV0IFB0PW4ubWluQXppbXV0aEFuZ2xlLE50PW4ubWF4QXppbXV0aEFuZ2xlO3JldHVybiBpc0Zpbml0ZShQdCkmJmlzRmluaXRlKE50KSYmKFB0PC1NYXRoLlBJP1B0Kz1zZTpQdD5NYXRoLlBJJiYoUHQtPXNlKSxOdDwtTWF0aC5QST9OdCs9c2U6TnQ+TWF0aC5QSSYmKE50LT1zZSksUHQ8PU50P3MudGhldGE9TWF0aC5tYXgoUHQsTWF0aC5taW4oTnQscy50aGV0YSkpOnMudGhldGE9cy50aGV0YT4oUHQrTnQpLzI/TWF0aC5tYXgoUHQscy50aGV0YSk6TWF0aC5taW4oTnQscy50aGV0YSkpLHMucGhpPU1hdGgubWF4KG4ubWluUG9sYXJBbmdsZSxNYXRoLm1pbihuLm1heFBvbGFyQW5nbGUscy5waGkpKSxzLm1ha2VTYWZlKCkscy5yYWRpdXMqPWMscy5yYWRpdXM9TWF0aC5tYXgobi5taW5EaXN0YW5jZSxNYXRoLm1pbihuLm1heERpc3RhbmNlLHMucmFkaXVzKSksbi5lbmFibGVEYW1waW5nPT09ITA/bi50YXJnZXQuYWRkU2NhbGVkVmVjdG9yKHUsbi5kYW1waW5nRmFjdG9yKTpuLnRhcmdldC5hZGQodSksbnQuc2V0RnJvbVNwaGVyaWNhbChzKSxudC5hcHBseVF1YXRlcm5pb24oV3QpLENlLmNvcHkobi50YXJnZXQpLmFkZChudCksbi5vYmplY3QubG9va0F0KG4udGFyZ2V0KSxuLmVuYWJsZURhbXBpbmc9PT0hMD8obC50aGV0YSo9MS1uLmRhbXBpbmdGYWN0b3IsbC5waGkqPTEtbi5kYW1waW5nRmFjdG9yLHUubXVsdGlwbHlTY2FsYXIoMS1uLmRhbXBpbmdGYWN0b3IpKToobC5zZXQoMCwwLDApLHUuc2V0KDAsMCwwKSksYz0xLGh8fGZlLmRpc3RhbmNlVG9TcXVhcmVkKG4ub2JqZWN0LnBvc2l0aW9uKT5hfHw4KigxLWF0LmRvdChuLm9iamVjdC5xdWF0ZXJuaW9uKSk+YT8obi5kaXNwYXRjaEV2ZW50KHNwZSksZmUuY29weShuLm9iamVjdC5wb3NpdGlvbiksYXQuY29weShuLm9iamVjdC5xdWF0ZXJuaW9uKSxoPSExLCEwKTohMX19KCksdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7bi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCksbi5fZG9tRWxlbWVudEtleUV2ZW50cyE9PW51bGwmJm4uX2RvbUVsZW1lbnRLZXlFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnIpfTtsZXQgbj10aGlzLGk9e05PTkU6LTEsUk9UQVRFOjAsRE9MTFk6MSxQQU46MixUT1VDSF9ST1RBVEU6MyxUT1VDSF9QQU46NCxUT1VDSF9ET0xMWV9QQU46NSxUT1VDSF9ET0xMWV9ST1RBVEU6Nn0sbz1pLk5PTkUsYT0xZS02LHM9bmV3IF9NLGw9bmV3IF9NLGM9MSx1PW5ldyBqLGg9ITEsZj1uZXcgTHQscD1uZXcgTHQsZD1uZXcgTHQsZz1uZXcgTHQsXz1uZXcgTHQseT1uZXcgTHQseD1uZXcgTHQsYj1uZXcgTHQsUz1uZXcgTHQsQz1bXSxQPXt9O2Z1bmN0aW9uIGsoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKm4uYXV0b1JvdGF0ZVNwZWVkfWZ1bmN0aW9uIE8oKXtyZXR1cm4gTWF0aC5wb3coLjk1LG4uem9vbVNwZWVkKX1mdW5jdGlvbiBEKG50KXtsLnRoZXRhLT1udH1mdW5jdGlvbiBCKG50KXtsLnBoaS09bnR9bGV0IEk9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50Lm11bHRpcGx5U2NhbGFyKC1XdCksdS5hZGQobnQpfX0oKSxMPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bi5zY3JlZW5TcGFjZVBhbm5pbmc9PT0hMD9udC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDEpOihudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50LmNyb3NzVmVjdG9ycyhuLm9iamVjdC51cCxudCkpLG50Lm11bHRpcGx5U2NhbGFyKFd0KSx1LmFkZChudCl9fSgpLFI9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtsZXQgYXQ9bi5kb21FbGVtZW50O2lmKG4ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpe2xldCBzZT1uLm9iamVjdC5wb3NpdGlvbjtudC5jb3B5KHNlKS5zdWIobi50YXJnZXQpO2xldCBRdD1udC5sZW5ndGgoKTtRdCo9TWF0aC50YW4obi5vYmplY3QuZm92LzIqTWF0aC5QSS8xODApLEkoMipXdCpRdC9hdC5jbGllbnRIZWlnaHQsbi5vYmplY3QubWF0cml4KSxMKDIqZmUqUXQvYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCl9ZWxzZSBuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8oSShXdCoobi5vYmplY3QucmlnaHQtbi5vYmplY3QubGVmdCkvbi5vYmplY3Quem9vbS9hdC5jbGllbnRXaWR0aCxuLm9iamVjdC5tYXRyaXgpLEwoZmUqKG4ub2JqZWN0LnRvcC1uLm9iamVjdC5ib3R0b20pL24ub2JqZWN0Lnpvb20vYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCkpOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC4iKSxuLmVuYWJsZVBhbj0hMSl9fSgpO2Z1bmN0aW9uIEYobnQpe24ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmE/Yy89bnQ6bi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KG4ub2JqZWN0Lnpvb209TWF0aC5tYXgobi5taW5ab29tLE1hdGgubWluKG4ubWF4Wm9vbSxuLm9iamVjdC56b29tKm50KSksbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLGg9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksbi5lbmFibGVab29tPSExKX1mdW5jdGlvbiB6KG50KXtuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP2MqPW50Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbS9udCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxoPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gVShudCl7Zi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKX1mdW5jdGlvbiBXKG50KXt4LnNldChudC5jbGllbnRYLG50LmNsaWVudFkpfWZ1bmN0aW9uIFoobnQpe2cuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSl9ZnVuY3Rpb24gcnQobnQpe3Auc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSksZC5zdWJWZWN0b3JzKHAsZikubXVsdGlwbHlTY2FsYXIobi5yb3RhdGVTcGVlZCk7bGV0IEN0PW4uZG9tRWxlbWVudDtEKDIqTWF0aC5QSSpkLngvQ3QuY2xpZW50SGVpZ2h0KSxCKDIqTWF0aC5QSSpkLnkvQ3QuY2xpZW50SGVpZ2h0KSxmLmNvcHkocCksbi51cGRhdGUoKX1mdW5jdGlvbiBvdChudCl7Yi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSxTLnN1YlZlY3RvcnMoYix4KSxTLnk+MD9GKE8oKSk6Uy55PDAmJnooTygpKSx4LmNvcHkoYiksbi51cGRhdGUoKX1mdW5jdGlvbiBzdChudCl7Xy5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSx5LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIFN0KG50KXtudC5kZWx0YVk8MD96KE8oKSk6bnQuZGVsdGFZPjAmJkYoTygpKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIGJ0KG50KXtsZXQgQ3Q9ITE7c3dpdGNoKG50LmNvZGUpe2Nhc2Ugbi5rZXlzLlVQOlIoMCxuLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5CT1RUT006UigwLC1uLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5MRUZUOlIobi5rZXlQYW5TcGVlZCwwKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5SSUdIVDpSKC1uLmtleVBhblNwZWVkLDApLEN0PSEwO2JyZWFrfUN0JiYobnQucHJldmVudERlZmF1bHQoKSxuLnVwZGF0ZSgpKX1mdW5jdGlvbiBNdCgpe2lmKEMubGVuZ3RoPT09MSlmLnNldChDWzBdLnBhZ2VYLENbMF0ucGFnZVkpO2Vsc2V7bGV0IG50PS41KihDWzBdLnBhZ2VYK0NbMV0ucGFnZVgpLEN0PS41KihDWzBdLnBhZ2VZK0NbMV0ucGFnZVkpO2Yuc2V0KG50LEN0KX19ZnVuY3Rpb24gbHQoKXtpZihDLmxlbmd0aD09PTEpZy5zZXQoQ1swXS5wYWdlWCxDWzBdLnBhZ2VZKTtlbHNle2xldCBudD0uNSooQ1swXS5wYWdlWCtDWzFdLnBhZ2VYKSxDdD0uNSooQ1swXS5wYWdlWStDWzFdLnBhZ2VZKTtnLnNldChudCxDdCl9fWZ1bmN0aW9uIEt0KCl7bGV0IG50PUNbMF0ucGFnZVgtQ1sxXS5wYWdlWCxDdD1DWzBdLnBhZ2VZLUNbMV0ucGFnZVksV3Q9TWF0aC5zcXJ0KG50Km50K0N0KkN0KTt4LnNldCgwLFd0KX1mdW5jdGlvbiBfdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVBhbiYmbHQoKX1mdW5jdGlvbiBjdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVJvdGF0ZSYmTXQoKX1mdW5jdGlvbiBYKG50KXtpZihDLmxlbmd0aD09MSlwLnNldChudC5wYWdlWCxudC5wYWdlWSk7ZWxzZXtsZXQgV3Q9YmUobnQpLGZlPS41KihudC5wYWdlWCtXdC54KSxhdD0uNSoobnQucGFnZVkrV3QueSk7cC5zZXQoZmUsYXQpfWQuc3ViVmVjdG9ycyhwLGYpLm11bHRpcGx5U2NhbGFyKG4ucm90YXRlU3BlZWQpO2xldCBDdD1uLmRvbUVsZW1lbnQ7RCgyKk1hdGguUEkqZC54L0N0LmNsaWVudEhlaWdodCksQigyKk1hdGguUEkqZC55L0N0LmNsaWVudEhlaWdodCksZi5jb3B5KHApfWZ1bmN0aW9uIGV0KG50KXtpZihDLmxlbmd0aD09PTEpXy5zZXQobnQucGFnZVgsbnQucGFnZVkpO2Vsc2V7bGV0IEN0PWJlKG50KSxXdD0uNSoobnQucGFnZVgrQ3QueCksZmU9LjUqKG50LnBhZ2VZK0N0LnkpO18uc2V0KFd0LGZlKX15LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKX1mdW5jdGlvbiBkdChudCl7bGV0IEN0PWJlKG50KSxXdD1udC5wYWdlWC1DdC54LGZlPW50LnBhZ2VZLUN0LnksYXQ9TWF0aC5zcXJ0KFd0Kld0K2ZlKmZlKTtiLnNldCgwLGF0KSxTLnNldCgwLE1hdGgucG93KGIueS94Lnksbi56b29tU3BlZWQpKSxGKFMueSkseC5jb3B5KGIpfWZ1bmN0aW9uIHEobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUGFuJiZldChudCl9ZnVuY3Rpb24gcHQobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUm90YXRlJiZYKG50KX1mdW5jdGlvbiBodChudCl7bi5lbmFibGVkIT09ITEmJihDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUobnQucG9pbnRlcklkKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCkpLCR0KG50KSxudC5wb2ludGVyVHlwZT09PSJ0b3VjaCI/dHQobnQpOmVlKG50KSl9ZnVuY3Rpb24gd3QobnQpe24uZW5hYmxlZCE9PSExJiYobnQucG9pbnRlclR5cGU9PT0idG91Y2giPyQobnQpOkxlKG50KSl9ZnVuY3Rpb24ga3QobnQpe2hlKG50KSxDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKG50LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpKSxuLmRpc3BhdGNoRXZlbnQobHBlKSxvPWkuTk9ORX1mdW5jdGlvbiBpZShudCl7aGUobnQpfWZ1bmN0aW9uIGVlKG50KXtsZXQgQ3Q7c3dpdGNoKG50LmJ1dHRvbil7Y2FzZSAwOkN0PW4ubW91c2VCdXR0b25zLkxFRlQ7YnJlYWs7Y2FzZSAxOkN0PW4ubW91c2VCdXR0b25zLk1JRERMRTticmVhaztjYXNlIDI6Q3Q9bi5tb3VzZUJ1dHRvbnMuUklHSFQ7YnJlYWs7ZGVmYXVsdDpDdD0tMX1zd2l0Y2goQ3Qpe2Nhc2UgSzAuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO1cobnQpLG89aS5ET0xMWTticmVhaztjYXNlIEswLlJPVEFURTppZihudC5jdHJsS2V5fHxudC5tZXRhS2V5fHxudC5zaGlmdEtleSl7aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47WihudCksbz1pLlBBTn1lbHNle2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9YnJlYWs7Y2FzZSBLMC5QQU46aWYobnQuY3RybEtleXx8bnQubWV0YUtleXx8bnQuc2hpZnRLZXkpe2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9ZWxzZXtpZihuLmVuYWJsZVBhbj09PSExKXJldHVybjtaKG50KSxvPWkuUEFOfWJyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9byE9PWkuTk9ORSYmbi5kaXNwYXRjaEV2ZW50KEhodCl9ZnVuY3Rpb24gTGUobnQpe2lmKG4uZW5hYmxlZCE9PSExKXN3aXRjaChvKXtjYXNlIGkuUk9UQVRFOmlmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO3J0KG50KTticmVhaztjYXNlIGkuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO290KG50KTticmVhaztjYXNlIGkuUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO3N0KG50KTticmVha319ZnVuY3Rpb24gYXIobnQpe24uZW5hYmxlZD09PSExfHxuLmVuYWJsZVpvb209PT0hMXx8byE9PWkuTk9ORXx8KG50LnByZXZlbnREZWZhdWx0KCksbi5kaXNwYXRjaEV2ZW50KEhodCksU3QobnQpLG4uZGlzcGF0Y2hFdmVudChscGUpKX1mdW5jdGlvbiBmcihudCl7bi5lbmFibGVkPT09ITF8fG4uZW5hYmxlUGFuPT09ITF8fGJ0KG50KX1mdW5jdGlvbiB0dChudCl7c3dpdGNoKFR0KG50KSxDLmxlbmd0aCl7Y2FzZSAxOnN3aXRjaChuLnRvdWNoZXMuT05FKXtjYXNlIFowLlJPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtNdCgpLG89aS5UT1VDSF9ST1RBVEU7YnJlYWs7Y2FzZSBaMC5QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47bHQoKSxvPWkuVE9VQ0hfUEFOO2JyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9YnJlYWs7Y2FzZSAyOnN3aXRjaChuLnRvdWNoZXMuVFdPKXtjYXNlIFowLkRPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47X3QoKSxvPWkuVE9VQ0hfRE9MTFlfUEFOO2JyZWFrO2Nhc2UgWjAuRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtjdCgpLG89aS5UT1VDSF9ET0xMWV9ST1RBVEU7YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX1icmVhaztkZWZhdWx0Om89aS5OT05FfW8hPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChIaHQpfWZ1bmN0aW9uICQobnQpe3N3aXRjaChUdChudCksbyl7Y2FzZSBpLlRPVUNIX1JPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtYKG50KSxuLnVwZGF0ZSgpO2JyZWFrO2Nhc2UgaS5UT1VDSF9QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47ZXQobnQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47cShudCksbi51cGRhdGUoKTticmVhaztjYXNlIGkuVE9VQ0hfRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtwdChudCksbi51cGRhdGUoKTticmVhaztkZWZhdWx0Om89aS5OT05FfX1mdW5jdGlvbiBJdChudCl7bi5lbmFibGVkIT09ITEmJm50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gJHQobnQpe0MucHVzaChudCl9ZnVuY3Rpb24gaGUobnQpe2RlbGV0ZSBQW250LnBvaW50ZXJJZF07Zm9yKGxldCBDdD0wO0N0PEMubGVuZ3RoO0N0KyspaWYoQ1tDdF0ucG9pbnRlcklkPT1udC5wb2ludGVySWQpe0Muc3BsaWNlKEN0LDEpO3JldHVybn19ZnVuY3Rpb24gVHQobnQpe2xldCBDdD1QW250LnBvaW50ZXJJZF07Q3Q9PT12b2lkIDAmJihDdD1uZXcgTHQsUFtudC5wb2ludGVySWRdPUN0KSxDdC5zZXQobnQucGFnZVgsbnQucGFnZVkpfWZ1bmN0aW9uIGJlKG50KXtsZXQgQ3Q9bnQucG9pbnRlcklkPT09Q1swXS5wb2ludGVySWQ/Q1sxXTpDWzBdO3JldHVybiBQW0N0LnBvaW50ZXJJZF19bi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyLHtwYXNzaXZlOiExfSksdGhpcy51cGRhdGUoKX19O3ZhciBGNj1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fbGFzdE1lc2g9bnVsbCx0aGlzLl9jbG9jaz1uZXcgbU0sdGhpcy5fY2FudmFzU2l6ZT1udWxsLHRoaXMuX2xheWVyc0NvbmZpZz1udWxsLHRoaXMuX3J1bkNvbG9yPXR9X2lzT2JqZWN0KHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiByPT0ib2JqZWN0IiYmdCE9bnVsbCYmIUFycmF5LmlzQXJyYXkodCl9X2FwcGx5RGVmYXVsdHModCxyKXtsZXQgbj17fSxpPVt0LHJdO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2ZvcihsZXQgcyBpbiBhKXtsZXQgbD1zIGluIG47dGhpcy5faXNPYmplY3QoYVtzXSk/bltzXT10aGlzLl9hcHBseURlZmF1bHRzKG5bc118fHt9LGFbc10pOmx8fChuW3NdPWFbc10pfX1yZXR1cm4gbn1fY3JlYXRlTGF5ZXJzKCl7aWYoISghdGhpcy5fbGF5ZXJzQ29uZmlnfHwhdGhpcy5fc2NlbmV8fCF0aGlzLl9sYXN0TWVzaCkpe2lmKHRoaXMuX2xheWVyc0NvbmZpZy5zaG93Qm91bmRpbmdCb3gpe3ZhciB0PW5ldyB5TSh0aGlzLl9sYXN0TWVzaCxuZXcgbmUoInJnYigwLCAwLCAyNTUpIikpO3RoaXMuX3NjZW5lLmFkZCh0KX1pZih0aGlzLl9sYXllcnNDb25maWcuc2hvd0F4ZXMpe3ZhciByPW5ldyB2TSg1KTt0aGlzLl9zY2VuZS5hZGQocil9fX1zZXRMYXllcnNDb25maWcodCl7dGhpcy5fbGF5ZXJzQ29uZmlnPXRoaXMuX2FwcGx5RGVmYXVsdHModCx0aGlzLl9sYXllcnNDb25maWd8fHt9KX1fY3JlYXRlV29ybGQodCxyKXt2YXIgYSxzLGwsYztpZih0aGlzLmlzUmVhZHkoKSlyZXR1cm47dGhpcy5fc2NlbmU9bmV3IHEwO3ZhciBuPW5ldyB3TVt0LmNhbWVyYS5jbHNdKHQuY2FtZXJhLmZvdiwoKGE9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmEud2lkdGgpLygocz10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6cy5oZWlnaHQpLHQuY2FtZXJhLm5lYXIsdC5jYW1lcmEuZmFyKTt0aGlzLl9jYW1lcmE9bix0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj12b2lkIDAsdC5jYW1lcmEucG9zaXRpb24mJih0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj1uZXcgaigpLmZyb21BcnJheSh0LmNhbWVyYS5wb3NpdGlvbikpLHRoaXMuaW5pdENhbWVyYUxvb2tBdD12b2lkIDAsdC5jYW1lcmEubG9va0F0JiYodGhpcy5pbml0Q2FtZXJhTG9va0F0PW5ldyBqKCkuZnJvbUFycmF5KHQuY2FtZXJhLmxvb2tBdCkpO3ZhciBpPW5ldyBKVShuLHIpO2xldCBvPWk7by5sb29rU3BlZWQ9LjQsby5tb3ZlbWVudFNwZWVkPTIwLG8ubm9GbHk9ITAsby5sb29rVmVydGljYWw9ITAsby5jb25zdHJhaW5WZXJ0aWNhbD0hMCxvLnZlcnRpY2FsTWluPTEsby52ZXJ0aWNhbE1heD0yLG8uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX2NhbWVyYUNvbnRyb2xzPWksdGhpcy5fcmVuZGVyZXI9bmV3IHJuKHthbnRpYWxpYXM6ITB9KSx0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKChsPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpsLndpZHRoLChjPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpjLmhlaWdodCksdGhpcy5fcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigxNjc3NzIxNSwxKX1fY2xlYXJTY2VuZSgpe3ZhciB0O2lmKHRoaXMuX3NjZW5lKWZvcig7dGhpcy5fc2NlbmUuY2hpbGRyZW4ubGVuZ3RoPjA7KXRoaXMuX3NjZW5lLnJlbW92ZSgodD10aGlzLl9zY2VuZSk9PW51bGw/dm9pZCAwOnQuY2hpbGRyZW5bMF0pfWdldFJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyfWdldENhbWVyYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2NhbWVyYUNvbnRyb2xzfWlzUmVhZHkoKXtyZXR1cm4hIXRoaXMuX2NhbWVyYSYmISF0aGlzLl9jYW1lcmFDb250cm9sc31nZXRDYW1lcmFQb3NpdGlvbigpe3ZhciB0LHIsbjtyZXR1cm57ZmFyOih0PXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnQuZmFyLHBvc2l0aW9uOihyPXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnIucG9zaXRpb24uY2xvbmUoKSx0YXJnZXQ6KG49dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsP3ZvaWQgMDpuLnRhcmdldC5jbG9uZSgpfX1zZXRDYW52YXNTaXplKHQpe3RoaXMuX2NhbnZhc1NpemU9dH1kcmF3KCl7dmFyIHIsbixpLG87dGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCksdGhpcy5fY2FtZXJhJiYodGhpcy5fY2FtZXJhLmFzcGVjdD0oKHI9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOnIud2lkdGgpLygobj10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6bi5oZWlnaHQpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHRoaXMuX3JlbmRlcmVyLnNldFNpemUoKGk9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmkud2lkdGgsKG89dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOm8uaGVpZ2h0KTtsZXQgdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCk7dGhpcy5fY2FtZXJhQ29udHJvbHMudXBkYXRlKGEpLHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpLHRoaXMuX3JlbmRlcmVyLnJlbmRlcih0aGlzLl9zY2VuZSx0aGlzLl9jYW1lcmEpfS5iaW5kKHRoaXMpO3QoKX11cGRhdGVTY2VuZSh0LHIpe2xldCBuPXt9OyJjb25maWciaW4gdCYmdC5jb25maWcmJihuPUpTT04ucGFyc2UodC5jb25maWcpKSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImJlZm9yZVVwZGF0ZVNjZW5lIn0pO2xldCBpPXtjYW1lcmE6e2NsczoiUGVyc3BlY3RpdmVDYW1lcmEiLGZvdjo3NSxuZWFyOi4xLGZhcjoxZTN9LGxpZ2h0czpbe2NsczoiQW1iaWVudExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NX0se2NsczoiRGlyZWN0aW9uYWxMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzUscG9zaXRpb246WzAsLTEsMl19XX07bj10aGlzLl9hcHBseURlZmF1bHRzKG4saSksdGhpcy5fY3JlYXRlV29ybGQobixyKSx0aGlzLl9jbGVhclNjZW5lKCksdGhpcy5fY3JlYXRlTGlnaHRzKHRoaXMuX3NjZW5lLG4pLHRoaXMuX2NyZWF0ZUdlb21ldHJ5KHQsbiksdGhpcy5fY3JlYXRlTGF5ZXJzKCksdGhpcy5kcmF3KCl9cmVzZXRWaWV3KHQpe3ZhciBuLGk7aWYoIXRoaXMuaXNSZWFkeSgpKXJldHVybjsobj10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fG4ucmVzZXQoKTtsZXQgcjshdCYmdGhpcy5fbGFzdE1lc2gmJihyPXRoaXMuX2xhc3RNZXNoKSxyJiYodGhpcy5fZml0T2JqZWN0VG9WaWV3cG9ydChyKSx0aGlzLl9sYXN0TWVzaD1yKSwoaT10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fGkudXBkYXRlKCl9X2NyZWF0ZUdlb21ldHJ5KHQscil7bGV0IG49dC5tZXNoO24udmVydGljZXMmJm4uZmFjZXMmJm4uZmFjZXMubGVuZ3RoP3RoaXMuX2NyZWF0ZU1lc2gobixyKTp0aGlzLl9jcmVhdGVQb2ludENsb3VkKG4scil9X2NyZWF0ZVBvaW50Q2xvdWQodCxyKXt2YXIgaDtsZXQgbj10LnZlcnRpY2VzLGk9dC5jb2xvcnMsbz17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2kmJmkubGVuZ3RoPT1uLmxlbmd0aD9vLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMDpvLm1hdGVyaWFsLmNvbG9yPXRoaXMuX3J1bkNvbG9yO2xldCBhPXRoaXMuX2FwcGx5RGVmYXVsdHMocixvKSxzPW5ldyBQZSxsPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2lmKHMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKGwsMykpLGkmJmkubGVuZ3RoPT1uLmxlbmd0aCl7bGV0IGY9bmV3IEZsb2F0MzJBcnJheShpLmZsYXQoKSk7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspZltwXT1mW3BdLzI1NTtzLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKZShmLDMpKX12YXIgYz1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLHU9bmV3IGltKHMsYyk7KGg9dGhpcy5fc2NlbmUpPT1udWxsfHxoLmFkZCh1KSx0aGlzLl9sYXN0TWVzaD11fXNldENhbWVyYVZpZXdwb2ludCh0LHIsbil7dGhpcy5fc2lsZW50PSEwLHRoaXMuX2NhbWVyYSYmKHRoaXMuX2NhbWVyYS5mYXI9cix0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KHQueCx0LnksdC56KSx0aGlzLl9jYW1lcmEubG9va0F0KG4uY2xvbmUoKSksdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksdGhpcy5fY2FtZXJhQ29udHJvbHMmJih0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQ9bi5jbG9uZSgpLHRoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpKSx0aGlzLl9zaWxlbnQ9ITF9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UodCl7dGhpcy5fc2lsZW50fHx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixldmVudDp0fSl9X2ZpdE9iamVjdFRvVmlld3BvcnQodCl7dmFyIHAsZCxnO2xldCBuPW5ldyB0YSxpPW5ldyBqLG89bmV3IGo7bi5zZXRGcm9tT2JqZWN0KHQpLG4uZ2V0Q2VudGVyKGkpLG4uZ2V0U2l6ZShvKTtsZXQgYT1NYXRoLm1heChvLngsby55LG8ueikscz0oKHA9dGhpcy5fY2FtZXJhKT09bnVsbD92b2lkIDA6cC5mb3YpKihNYXRoLlBJLzE4MCksbD1NYXRoLmFicyhhLygyKk1hdGgudGFuKHMvMikpKSoxLjI1LGM9bi5taW4ueix1PWM8MD8tYytsOmwtYyxoPShkPXRoaXMuaW5pdENhbWVyYVBvc2l0aW9uKSE9bnVsbD9kOm5ldyBqKGkueCxpLnksbCksZj0oZz10aGlzLmluaXRDYW1lcmFMb29rQXQpIT1udWxsP2c6aTt0aGlzLnNldENhbWVyYVZpZXdwb2ludChoLHUqMyxmKX1fY3JlYXRlTWVzaCh0LHIpe3ZhciBmO2xldCBuPXQudmVydGljZXMsaT10LmZhY2VzLG89dC5jb2xvcnMsYT10aGlzLl9hcHBseURlZmF1bHRzKHIse21hdGVyaWFsOntjbHM6Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIixjb2xvcjoiI2EwYTBhMCIscm91Z2huZXNzOjEsbWV0YWxuZXNzOjB9fSkscz1uZXcgUGUsbD1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShsLDMpKTtsZXQgYz1uZXcgVWludDE2QXJyYXkoaS5mbGF0KCkpO2lmKG8mJm8ubGVuZ3RoKXtsZXQgcD1vLmZsYXQoKTtmb3IobGV0IGQ9MDtkPHAubGVuZ3RoO2QrKylwW2RdPXBbZF0vMjU1O3Muc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEplKG5ldyBGbG9hdDMyQXJyYXkocCksMykpLGEubWF0ZXJpYWw9YS5tYXRlcmlhbHx8e30sYS5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITB9cy5jZW50ZXIoKSxzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHMuc2V0SW5kZXgobmV3IEplKGMsMSkpLHMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtsZXQgdT1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLGg9bmV3IHRpKHMsdSk7aC5jYXN0U2hhZG93PSEwLGgucmVjZWl2ZVNoYWRvdz0hMCwoZj10aGlzLl9zY2VuZSk9PW51bGx8fGYuYWRkKGgpLHRoaXMuX2xhc3RNZXNoPWh9X2NyZWF0ZUxpZ2h0cyh0LHIpe2ZvcihsZXQgbj0wO248ci5saWdodHMubGVuZ3RoO24rKyl7bGV0IGk9ci5saWdodHNbbl0sbz1uZXcgd01baS5jbHNdKGkuY29sb3IsaS5pbnRlbnNpdHkpO2kucG9zaXRpb24mJm8ucG9zaXRpb24uc2V0KGkucG9zaXRpb25bMF0saS5wb3NpdGlvblsxXSxpLnBvc2l0aW9uWzJdKSx0LmFkZChvKX19fTt2YXIgTG49Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuYWN0aXZlPSExLHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITEsdGhpcy5fY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZD0hMSx0aGlzLl9pc01lc2hMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IElQKHRoaXMucmVxdWVzdE1hbmFnZXIpO2xldCB0PW5ldyBGNih0aGlzLl9ydW5Db2xvcik7dC5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVVcGRhdGVTY2VuZSIsdGhpcy5fdXBkYXRlQ2FudmFzU2l6ZS5iaW5kKHRoaXMpKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNhbWVyYVBvc2l0aW9uQ2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX21lc2hWaWV3ZXI9dH1yZWxvYWQoKXshdGhpcy5hY3RpdmV8fCF0aGlzLl9kYXRhUHJvdmlkZXJ8fCh0aGlzLl9pc01lc2hMb2FkaW5nPSEwLHRoaXMuX2RhdGFQcm92aWRlci5yZWxvYWQodGhpcy5ydW4sdGhpcy50YWcsdGhpcy5zYW1wbGUpLnRoZW4odD0+eyF0fHwodGhpcy5fc3RlcHM9dCx0aGlzLl9zdGVwSW5kZXg9dC5sZW5ndGgtMSl9KS5jYXRjaCh0PT57aWYoIXR8fCF0LmNvZGV8fHQuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHQ9dHx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHQpfSkpfV91cGRhdGVTY2VuZSgpe3ZhciByO2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwOyF0fHwhdC5tZXNofHwodGhpcy5fbWVzaFZpZXdlci51cGRhdGVTY2VuZSh0LHRoaXMpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWR8fCh0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITApLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZHx8KChyPXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHIuYXBwZW5kQ2hpbGQodGhpcy5fbWVzaFZpZXdlci5nZXRSZW5kZXJlcigpLmRvbUVsZW1lbnQpLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMCkpfV9kZWJvdW5jZWRGZXRjaE1lc2goKXt0aGlzLmRlYm91bmNlKCJmZXRjaE1lc2giLCgpPT50aGlzLl9tYXliZUZldGNoTWVzaCgpLDEwMCl9X21heWJlRmV0Y2hNZXNoKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDtpZighKCF0fHx0Lm1lc2h8fHQubWVzaEZldGNoaW5nKSl7dC5tZXNoRmV0Y2hpbmc9ITAsdGhpcy5faXNNZXNoTG9hZGluZz0hMDt0cnl7bGV0IHI9eWllbGQgdGhpcy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YSh0LHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKTt0Lm1lc2g9clswXSx0aGlzLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2gocil7aWYoIXJ8fCFyLmNvZGV8fHIuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHI9cnx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHIpfWZpbmFsbHl7dGhpcy5faXNNZXNoTG9hZGluZz0hMSx0Lm1lc2hGZXRjaGluZz0hMX19fSl9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UoKXtpZighdGhpcy5fbWVzaFZpZXdlci5pc1JlYWR5KCkpcmV0dXJuO2xldCB0PW5ldyBDdXN0b21FdmVudCgiY2FtZXJhLXBvc2l0aW9uLWNoYW5nZSIse2RldGFpbDp0aGlzLl9tZXNoVmlld2VyLmdldENhbWVyYVBvc2l0aW9uKCl9KTt0aGlzLmRpc3BhdGNoRXZlbnQodCl9c2V0Q2FtZXJhVmlld3BvaW50KHQscixuKXt0aGlzLl9tZXNoVmlld2VyLnNldENhbWVyYVZpZXdwb2ludCh0LHIsbil9X3VwZGF0ZUNhbnZhc1NpemUoKXtsZXQgdD10aGlzLm9mZnNldFdpZHRoLHI9dCxuPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQsaT17d2lkdGg6dCxoZWlnaHQ6ci1ufTt0aGlzLl9tZXNoVmlld2VyLnNldENhbnZhc1NpemUoaSl9cmVkcmF3KCl7dGhpcy5fdXBkYXRlQ2FudmFzU2l6ZSgpLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuX21lc2hWaWV3ZXIuZHJhdygpfV9oYXNBdExlYXN0T25lU3RlcCh0KXtyZXR1cm4hIXQmJnQubGVuZ3RoPjB9X2hhc011bHRpcGxlU3RlcHModCl7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7bGV0IHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/czIodC53YWxsX3RpbWUpOiIifV9nZXRNYXhTdGVwSW5kZXgodCl7cmV0dXJuIHQubGVuZ3RoLTF9X2dldFNhbXBsZVRleHQodCl7cmV0dXJuIFN0cmluZyh0KzEpfV9oYXNNdWx0aXBsZVNhbXBsZXModCl7cmV0dXJuIHQ+MX1fdXBkYXRlVmlldygpe3ZhciB0PXRoaXMuc2VsZWN0ZWRWaWV3O3RoaXMuX21lc2hWaWV3ZXImJnQ9PSJhbGwiJiZ0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpfXRvTG9jYWxlU3RyaW5nXyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07TG4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc01lc2hMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHMoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwic2VsZWN0ZWRWaWV3Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxMbi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEY2KV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixJUCldLExuLnByb3RvdHlwZSwiX2RhdGFQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMbi5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxMbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTG4ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlckF0dGFjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExuLnByb3RvdHlwZSwiX2lzTWVzaExvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLExuLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiwiYWN0aXZlIiwiX2RhdGFQcm92aWRlciIsIl9tZXNoVmlld2VyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCk7RShbQnQoIl9jdXJyZW50U3RlcC4qIiwiX21lc2hWaWV3ZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVNjZW5lIixudWxsKTtFKFtCdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsIl9kZWJvdW5jZWRGZXRjaE1lc2giLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTG4ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW0J0KCJzZWxlY3RlZFZpZXciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVZpZXciLG51bGwpO0xuPUUoW3l0KCJ0Zi1tZXNoLWxvYWRlciIpXSxMbik7dmFyIHBoPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9Ii4qIix0aGlzLl9zZWxlY3RlZFZpZXc9ImFsbCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCl9LCExKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9X2dldEFsbENoaWxkcmVuKCl7dmFyIHQ7cmV0dXJuIEFycmF5LmZyb20oKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1tZXNoLWxvYWRlciIpKX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZWQodCl7dGhpcy5fc2VsZWN0ZWRWaWV3PT0ic2hhcmUiJiZ0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2gocj0+e3QudGFyZ2V0IT1yJiZyLnNldENhbWVyYVZpZXdwb2ludCh0LmRldGFpbC5wb3NpdGlvbix0LmRldGFpbC5mYXIsdC5kZXRhaWwudGFyZ2V0KX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4odGhpcy5fcmVsb2FkTWVzaGVzLmJpbmQodGhpcykpfV9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2godD0+e3QucmVkcmF3KCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoc3guaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPXN4Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuX2RhdGFOb3RGb3VuZD1pLmxlbmd0aD09PTAsdGhpcy5fcnVuVG9UYWdJbmZvPXJ9KX1fcmVsb2FkTWVzaGVzKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHQ9Pnt0LnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPXN4Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBzeC5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSxvZlNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfX07cGgudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9InNpZGViYXIiIGNsYXNzPSJhbGwtY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiB2aWV3LWNvbnRyb2wiPgogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Qb2ludCBvZiB2aWV3PC9oMz4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgIGlkPSJ2aWV3LXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVmlld319IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImFsbC1yYWRpby1idXR0b24iIG5hbWU9ImFsbCI+CiAgICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHBvaW50cwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0iYWxsLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFpvb20gYW5kIGNlbnRlciBjYW1lcmEgdG8gZGlzcGxheSBhbGwgcG9pbnRzIGF0IG9uY2UuIE5vdGUsCiAgICAgICAgICAgICAgICAgIHRoYXQgc29tZSBwb2ludHMgY291bGQgYmUgdG9vIGZhciAoaS5lLiB0b28gc21hbGwpIHRvIGJlCiAgICAgICAgICAgICAgICAgIHZpc2libGUuCiAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJ1c2VyLXJhZGlvLWJ1dHRvbiIgbmFtZT0idXNlciI+CiAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmlldwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0idXNlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgY2FtZXJhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ic2hhcmUtcmFkaW8tYnV0dG9uIiBuYW1lPSJzaGFyZSI+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludAogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0ic2hhcmUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgU2hhcmUgdmlld3BvaW50IGFtb25nIGFsbCBjYW1lcmFzLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHBvaW50IGNsb3VkIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHBvaW50IGNsb3VkIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1tZXNoLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLXZpZXc9IltbX3NlbGVjdGVkVmlld11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgY2xhc3M9InRmLW1lc2gtbG9hZGVyLWNvbnRhaW5lciIKICAgICAgICAgICAgICAgICAgb24tY2FtZXJhLXBvc2l0aW9uLWNoYW5nZT0iX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1tZXNoLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIGgzLnRpdGxlIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC52aWV3LWNvbnRyb2wgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgICAvKiBMYXlvdXQgbXVzdCBiZSBob3Jpem9udGFsLCBpLmUuIGl0ZW1zIGFycmFuZ2VkIGluIGEgcm93LiBJZiBpdGVtcyBjYW5ub3QgZml0IGluIGEgcm93LAogICAgICAgKiB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBuZXh0IGxpbmUuIEFsbCBpdGVtcyBtdXN0IGJlIHNxdWFyZSBhdCBhbGwgdGltZXMuIE1pbmltdW0gc2l6ZSBvZgogICAgICAgKiB0aGUgaXRlbSBpcyA0ODBweC4gVGhpcyBtZWFucyB0aGF0IG1heGltdW0gc2l6ZSBvZiB0aGUgaXRlbSBtdXN0IGJlIDQ4MHB4ICsgNDc5cHggPSA5NTlweC4KICAgICAgICogKi8KICAgICAgLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgdGYtbWVzaC1sb2FkZXIgewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBmbGV4LWJhc2lzOiA0ODBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scGgucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHBoLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwaC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHBoLnByb3RvdHlwZSwiX3NlbGVjdGVkVmlldyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwaC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtwaD1FKFt5dCgibWVzaC1kYXNoYm9hcmQiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaCk7dmFyIFFVPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pbnN0YWxsQ29tbWFuZD0icGlwIGluc3RhbGwgLVUgdGVuc29yYm9hcmQtcGx1Z2luLXByb2ZpbGUifV9jb3B5SW5zdGFsbENvbW1hbmQoKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCB0PSgpPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dGhpcy4kLmNvbW1hbmRUZXh0YXJlYS5zZWxlY3QoKTt0cnl7eWllbGQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5faW5zdGFsbENvbW1hbmQpfWNhdGNoKGkpe2lmKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKXJldHVybiBQcm9taXNlLnJlamVjdCgpfX0pLHI9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dHJ5e3lpZWxkIHQoKSxyLmlubmVyVGV4dD0iQ29waWVkLiJ9Y2F0Y2gobil7ci5pbm5lclRleHQ9IkZhaWxlZCB0byBjb3B5IHRvIGNsaXBib2FyZC4ifX0pfV9yZW1vdmVDb3BpZWRNZXNzYWdlKCl7bGV0IHQ9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dC5pbm5lclRleHQ9IiJ9fTtRVS50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgcHJvZmlsZSBwbHVnaW4gaGFzIG1vdmVkLjwvaDM+CiAgICAgIDxwPgogICAgICAgIFBsZWFzZSBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSBwbHVnaW4gZnJvbSBQeVBJIGJ5CiAgICAgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgbWFjaGluZSBydW5uaW5nIFRlbnNvckJvYXJkOgogICAgICA8L3A+CiAgICAgIDx0ZXh0YXJlYQogICAgICAgIGlkPSJjb21tYW5kVGV4dGFyZWEiCiAgICAgICAgcmVhZG9ubHk9IiIKICAgICAgICByb3dzPSIxIgogICAgICAgIG9uLWJsdXI9Il9yZW1vdmVDb3BpZWRNZXNzYWdlIgogICAgICA+CltbX2luc3RhbGxDb21tYW5kXV08L3RleHRhcmVhCiAgICAgID4KICAgICAgPGRpdiBpZD0iY29weUNvbnRhaW5lciI+CiAgICAgICAgPHNwYW4gaWQ9ImNvcGllZE1lc3NhZ2UiPjwvc3Bhbj4KICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZD0iIiBvbi10YXA9Il9jb3B5SW5zdGFsbENvbW1hbmQiCiAgICAgICAgICA+Q29weSB0byBjbGlwYm9hcmQ8L3BhcGVyLWJ1dHRvbgogICAgICAgID4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgIH0KICAgICAgI2NvbW1hbmRUZXh0YXJlYSB7CiAgICAgICAgbWFyZ2luLXRvcDogMWV4OwogICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjY29weUNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAjY29waWVkTWVzc2FnZSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUVUucHJvdG90eXBlLCJfaW5zdGFsbENvbW1hbmQiLHZvaWQgMCk7UVU9RShbeXQoInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIildLFFVKTt2YXIgbG09RWUoT2UoKSwxKTt2YXIgemw9RWUoT2UoKSwxKSx0cT1FZSh3bCgpLDEpO3ZhciBubj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5PXt9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj17c2NhbGU6Zm59LHRoaXMuX2NhbmNlbGxlcj1uZXcgYW4sdGhpcy5feENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD0oKT0+e2xldCB0PW5ldyB0cS5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IHRxLkF4ZXMuTnVtZXJpYyh0LCJib3R0b20iKSxhY2Nlc3NvcjpyPT5yLnJlY2FsbH19LHRoaXMuX3lWYWx1ZUFjY2Vzc29yPXQ9PnQucHJlY2lzaW9uLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTpuPT5uLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOm49Pm4uZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOm49Pm4uZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19KSgpLHRoaXMuX3Nlcmllc0RhdGFGaWVsZHM9WyJ0aHJlc2hvbGRzIiwicHJlY2lzaW9uIiwicmVjYWxsIiwidHJ1ZV9wb3NpdGl2ZXMiLCJmYWxzZV9wb3NpdGl2ZXMiLCJ0cnVlX25lZ2F0aXZlcyIsImZhbHNlX25lZ2F0aXZlcyJdLHRoaXMuX2RlZmF1bHRYUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fZGVmYXVsdFlSYW5nZT1bLS4wNSwxLjA1XSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgicHJfY3VydmVzIiwiL3ByX2N1cnZlcyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy50YWcsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9zbW9vdGhpbmdFbmFibGVkPSExfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUsbikpfX1fY29tcHV0ZVJ1bkNvbG9yKHQpe3JldHVybiBmbih0KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYXR0YWNoZWQ9ITAsdGhpcy5yZWxvYWQoKX1fZ2V0Q2hhcnREYXRhTG9hZGVyKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIil9cmVsb2FkKCl7aWYoISF0aGlzLl9hdHRhY2hlZCl7aWYodGhpcy5ydW5zLmxlbmd0aD09PTApe3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLHt9KTtyZXR1cm59dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVsb2FkKCl9fV9zZXRDaGFydERhdGEoKXt2YXIgdD10aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSxyPXRoaXMuX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnksbj10aGlzLl9zZXRPZlJlbGV2YW50UnVuczt6bC5mb3JPd24odCwoaSxvKT0+e2xldCBhPXJbb107aWYoIShhJiZ0W29dLnN0ZXA9PT1hLnN0ZXApKXtpZighbltvXSl7dGhpcy5fY2xlYXJTZXJpZXNEYXRhKG8pO3JldHVybn10aGlzLl91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKG8saSl9fSl9X3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4odCxyKXtsZXQgbj16bC5yZWR1Y2UodGhpcy5fc2VyaWVzRGF0YUZpZWxkcywoYSxzKT0+KGFbc109cltzXS5zbGljZSgpLnJldmVyc2UoKSxhKSx7fSksaT1uZXcgQXJyYXkoblt0aGlzLl9zZXJpZXNEYXRhRmllbGRzWzBdXS5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKWlbYV09emwubWFwVmFsdWVzKG4scz0+c1thXSk7bGV0IG89dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7by5zZXRTZXJpZXNEYXRhKHQsaSksby5jb21taXRDaGFuZ2VzKCl9X2NsZWFyU2VyaWVzRGF0YSh0KXtsZXQgcj10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTtyLnNldFNlcmllc0RhdGEodCxbXSksci5jb21taXRDaGFuZ2VzKCl9X3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5KCl7dmFyIHQ9dGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUscj10aGlzLnJ1blRvU3RlcENhcDtsZXQgbj17fTt6bC5mb3JPd24odCwoaSxvKT0+eyFpfHwhaS5sZW5ndGh8fChuW29dPXRoaXMuX2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHJbb10saSkpfSksdGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSksdGhpcy5zZXQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsbil9X25vdGlmeURhdGFDaGFuZ2UoKXt2YXIgdD10aGlzLl9ydW5Ub0RhdGFPdmVyVGltZTt0aGlzLm9uRGF0YUNoYW5nZSYmdGhpcy5vbkRhdGFDaGFuZ2UodCl9X2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHQscil7bGV0IG49TWF0aC5taW4oemwuc29ydGVkSW5kZXgoci5tYXAoaT0+aS5zdGVwKSx0KSxyLmxlbmd0aC0xKTtyZXR1cm4gcltuXX1nZXQgX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSgpe3ZhciB0PXRoaXMucnVucyxyPXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5O3JldHVybiB6bC5maWx0ZXIodCxuPT5yW25dKS5zb3J0KCl9Z2V0IF9zZXRPZlJlbGV2YW50UnVucygpe3ZhciB0PXRoaXMuX3J1bnNXaXRoU3RlcEF2YWlsYWJsZTtsZXQgcj17fTtyZXR1cm4gemwuZm9yRWFjaCh0LG49PntyW25dPSEwfSkscn1fY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKHQscil7bGV0IG49dFtyXTtyZXR1cm4gbj9uLnN0ZXA6bnVsbH1fY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bih0LHIpe2xldCBuPXRbcl07cmV0dXJuIG4/bmV3IERhdGUobi53YWxsX3RpbWUqMWUzKS50b1N0cmluZygpOm51bGx9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fcmVzZXREb21haW4oKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZXNldERvbWFpbigpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfX07bm4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICB4LWNvbXBvbmVudHMtY3JlYXRpb24tbWV0aG9kPSJbW194Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iCiAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbX3lWYWx1ZUFjY2Vzc29yXV0iCiAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVGdW5jdGlvbl1dIgogICAgICBkZWZhdWx0LXgtcmFuZ2U9IltbX2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgZGVmYXVsdC15LXJhbmdlPSJbW19kZWZhdWx0WVJhbmdlXV0iCiAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICBkYXRhLXNlcmllcz0iW1tydW5zXV0iCiAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iCiAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgID48L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CgogICAgPGRpdiBpZD0iYnV0dG9ucy1yb3ciPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJSZXNldCBheGVzIHRvIFswLCAxXS4iCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ic3RlcC1sZWdlbmQiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFN0ZXBBdmFpbGFibGVdXSIgYXM9InJ1biI+CiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJjb2xvci1ib3giCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiBbW19jb21wdXRlUnVuQ29sb3IocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIFtbcnVuXV0gaXMgYXQKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWxhYmVsLXRleHQiPgogICAgICAgICAgICBzdGVwIFtbX2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSA8L3NwYW4KICAgICAgICAgID48YnIgLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3YWxsLXRpbWUtbGFiZWwtdGV4dCI+CiAgICAgICAgICAgIChbW19jb21wdXRlQ3VycmVudFdhbGxUaW1lRm9yUnVuKF9ydW5Ub1ByQ3VydmVFbnRyeSwgcnVuKV1dKQogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KICAgICAgI3N0ZXAtbGVnZW5kIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5sZWdlbmQtcm93IHsKICAgICAgICBtYXJnaW46IDVweCAwIDVweCAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5jb2xvci1ib3ggewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICB9CiAgICAgIC5zdGVwLWxhYmVsLXRleHQgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC53YWxsLXRpbWUtbGFiZWwtdGV4dCB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbm4ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsInJ1blRvU3RlcENhcCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLG5uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9ydW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX3J1blRvRGF0YU92ZXJUaW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbm4ucHJvdG90eXBlLCJvbkRhdGFDaGFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfY29sb3JTY2FsZUZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sbm4ucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl95VmFsdWVBY2Nlc3NvciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbm4ucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFGaWVsZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRYUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxubi5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG5uLnByb3RvdHlwZSwiX3Ntb290aGluZ0VuYWJsZWQiLHZvaWQgMCk7RShbQnQoInJ1bnMiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwicmVsb2FkIixudWxsKTtFKFtCdCgiX3J1blRvUHJDdXJ2ZUVudHJ5IiwiX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnkiLCJfc2V0T2ZSZWxldmFudFJ1bnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX3NldENoYXJ0RGF0YSIsbnVsbCk7RShbQnQoIl9ydW5Ub0RhdGFPdmVyVGltZSIsInJ1blRvU3RlcENhcCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sbm4ucHJvdG90eXBlLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkiLG51bGwpO0UoW0J0KCJfcnVuVG9EYXRhT3ZlclRpbWUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX25vdGlmeURhdGFDaGFuZ2UiLG51bGwpO0UoW1J0KCJydW5zIiwiX3J1blRvUHJDdXJ2ZUVudHJ5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxubi5wcm90b3R5cGUsIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiLG51bGwpO0UoW1J0KCJfcnVuc1dpdGhTdGVwQXZhaWxhYmxlIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbm4ucHJvdG90eXBlLCJfc2V0T2ZSZWxldmFudFJ1bnMiLG51bGwpO25uPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1jYXJkIildLG5uKTt2YXIgU009RWUoT2UoKSwxKTt2YXIgZXA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcnVuVG9TdGVwSW5kZXg9e319X2NvbXB1dGVDb2xvckZvclJ1bih0KXtyZXR1cm4gZm4odCl9X2NvbXB1dGVUaW1lVGV4dEZvclJ1bih0LHIsbixpKXtsZXQgbz1yW25dO2lmKCFTTS5pc051bWJlcihvKSlyZXR1cm4iIjtsZXQgYT10W25dO2lmKCFhKXJldHVybiIiO2xldCBzPWFbb11baV07aWYoaT09PSJzdGVwIilyZXR1cm5gc3RlcCAke3N9YDtpZihpPT09InJlbGF0aXZlIilyZXR1cm4gczwxP2AkeyhzKjFlMykudG9GaXhlZCgyKX0gbXNgOmAke3MudG9GaXhlZCgyKX0gc2A7aWYoaT09PSJ3YWxsX3RpbWUiKXJldHVybiBuZXcgRGF0ZShzKjFlMykudG9TdHJpbmcoKTt0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtpfSBpcyBub3QgcmVjb2duaXplZC5gKX1fc2xpZGVyVmFsdWVDaGFuZ2VkKHQpe2xldCByPXQudGFyZ2V0LmRhdGFzZXQucnVuLG49dC50YXJnZXQuaW1tZWRpYXRlVmFsdWUsaT1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtpc05hTihuKT9kZWxldGUgaVtyXTppW3JdPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLHRoaXMuX3J1blRvU3RlcEluZGV4PWl9X2NvbXB1dGVNYXhTdGVwSW5kZXhGb3JSdW4odCxyKXtsZXQgbj10W3JdO3JldHVybiBuJiZuLmxlbmd0aD9uLmxlbmd0aC0xOjB9X3VwZGF0ZVN0ZXBzRm9yTmV3UnVucygpe3ZhciB0PXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztsZXQgcj1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtTTS5mb3JPd24odCwobixpKT0+e1NNLmlzTnVtYmVyKHJbaV0pfHwocltpXT1uLmxlbmd0aC0xKX0pLHRoaXMuX3J1blRvU3RlcEluZGV4PXJ9X2dldFN0ZXAodCxyKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbcl06MH1fY29tcHV0ZVJ1blRvU3RlcCh0LHIpe2xldCBuPXt9O3JldHVybiBTTS5mb3JPd24ociwoaSxvKT0+e2xldCBhPXRbb107IWF8fChuW29dPWFbaV0uc3RlcCl9KSxufWdldCBfcnVuc1dpdGhTbGlkZXJzKCl7dmFyIHQ9dGhpcy5ydW5zLHI9dGhpcy5ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzO3JldHVybiB0LmZpbHRlcihuPT5yW25dKX19O2VwLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFNsaWRlcnNdXSIgYXM9InJ1biI+CiAgICAgIDxkaXYgY2xhc3M9InJ1bi13aWRnZXQiPgogICAgICAgIDxkaXYgY2xhc3M9InJ1bi1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJydW4tY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW19jb21wdXRlQ29sb3JGb3JSdW4ocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij5bW3J1bl1dPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBkYXRhLXJ1biQ9IltbcnVuXV0iCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgbWluPSIwIgogICAgICAgICAgbWF4PSJbW19jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIHJ1bildXSIKICAgICAgICAgIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIgogICAgICAgICAgb24taW1tZWRpYXRlLXZhbHVlLWNoYW5nZWQ9Il9zbGlkZXJWYWx1ZUNoYW5nZWQiCiAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ydW4td2lkZ2V0IHsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICBtYXJnaW46IC04cHggMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwLWRpc3BsYXktY29udGFpbmVyIHsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDAgMDsKICAgICAgfQogICAgICAucnVuLXRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAucnVuLWNvbG9yLWJveCB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZXAucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGVwLnByb3RvdHlwZSwidGltZURpc3BsYXlUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwiX3J1blRvU3RlcEluZGV4Iix2b2lkIDApO0UoW0J0KCJydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxlcC5wcm90b3R5cGUsIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMiLG51bGwpO0UoW1J0KCJydW5zIiwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZXAucHJvdG90eXBlLCJfcnVuc1dpdGhTbGlkZXJzIixudWxsKTtlcD1FKFt5dCgidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiKV0sZXApO3ZhciBrbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3RpbWVEaXNwbGF5VHlwZT0ic3RlcCIsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3J1blRvVGFnSW5mbz17fSx0aGlzLl90YWdUb1J1blRvRGF0YT17fSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX3N0ZXA9MH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe1Byb21pc2UuYWxsKFt0aGlzLl9mZXRjaFRhZ3MoKV0pLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRDYXJkcygpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYobG0uaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPWxtLm1hcFZhbHVlcyhyLG89PmxtLmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkQ2FyZHMoKXt2YXIgdDtsbS5mb3JFYWNoKCh0PXRoaXMucm9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvckFsbCgidGYtcHItY3VydmUtY2FyZCIpLHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWxtLm1hcFZhbHVlcyh0LG89Pk9iamVjdC5rZXlzKG8pKTtyZXR1cm4gaEUoaSxyLG4pfWdldCBfcmVsZXZhbnRTZWxlY3RlZFJ1bnMoKXt2YXIgdD10aGlzLl9zZWxlY3RlZFJ1bnMscj10aGlzLl9ydW5Ub1RhZ0luZm87cmV0dXJuIHQuZmlsdGVyKG49PnJbbl0pfV90YWdNZXRhZGF0YSh0LHIsbil7bGV0IGk9e307ci5mb3JFYWNoKGE9PntpW2FdPXRbYV1bbl19KTtsZXQgbz1uLnJlcGxhY2UoL1wvcHJfY3VydmVzJC8sIiIpO3JldHVybiBvUihpLG8pfV9jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2sodCl7cmV0dXJuIHI9Pnt0aGlzLnNldCgiX3RhZ1RvUnVuVG9EYXRhIixNeChLbCh7fSx0aGlzLl90YWdUb1J1blRvRGF0YSkse1t0XTpyfSkpfX1nZXQgX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMoKXt2YXIgdD10aGlzLl90YWdUb1J1blRvRGF0YTtsZXQgcj17fTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyh0KSlmb3IobGV0W2Fdb2YgT2JqZWN0LmVudHJpZXMobykpKHJbYV09PW51bGx8fGk8clthXSkmJihyW2FdPWkpO2xldCBuPXt9O2ZvcihsZXRbaSxvXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgYT10W29dW2ldO25baV09YS5tYXAocz0+KHtzdGVwOnMuc3RlcCx3YWxsX3RpbWU6cy53YWxsX3RpbWUscmVsYXRpdmU6cy53YWxsX3RpbWUtYVswXS53YWxsX3RpbWV9KSl9cmV0dXJuIG59fTtrby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0idGltZS10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9IlRpbWUgRGlzcGxheSBUeXBlIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lRGlzcGxheVR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgLS0+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiIgaWQ9InN0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yCiAgICAgICAgICAgICAgICBydW5zPSJbW19yZWxldmFudFNlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgcnVuLXRvLXN0ZXA9Int7X3J1blRvU3RlcH19IgogICAgICAgICAgICAgICAgcnVuLXRvLWF2YWlsYWJsZS10aW1lLWVudHJpZXM9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSIKICAgICAgICAgICAgICAgIHRpbWUtZGlzcGxheS10eXBlPSJbW190aW1lRGlzcGxheVR5cGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3Rvcj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwcmVjaXNpb27igJNyZWNhbGwgY3VydmUgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgcHJlY2lzaW9u4oCTcmVjYWxsIGRhdGEgdG8geW91ciBldmVudAogICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLWNhcmQKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW5zPSJbW2l0ZW0ucnVuc11dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1bnMsIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwLWNhcD0iW1tfcnVuVG9TdGVwXV0iCiAgICAgICAgICAgICAgICAgIG9uLWRhdGEtY2hhbmdlPSJbW19jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2soaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1wci1jdXJ2ZS1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAvKiogRG8gbm90IGxldCB0aGUgc3RlcHMgc2VsZWN0b3Igb2NjbHVkZSB0aGUgcnVuIHNlbGVjdG9yLiAqLwogICAgICAjc3RlcHMtc2VsZWN0b3ItY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA2MCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sa28ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGtvLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl90YWdUb1J1blRvRGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfcnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxrby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sa28ucHJvdG90eXBlLCJfc3RlcCIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa28ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7RShbUnQoIl9zZWxlY3RlZFJ1bnMiLCJfcnVuVG9UYWdJbmZvIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrby5wcm90b3R5cGUsIl9yZWxldmFudFNlbGVjdGVkUnVucyIsbnVsbCk7RShbUnQoIl90YWdUb1J1blRvRGF0YSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtvLnByb3RvdHlwZSwiX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLG51bGwpO2tvPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQiKV0sa28pO3ZhciBCNj1FZShPZSgpLDEpO3ZhciB1bz1jbGFzcyBleHRlbmRzIEd0KG5iKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3RhZ0ZpbHRlcj0iIix0aGlzLl9jYXRlZ29yaWVzPVtdLHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoNTApLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfWdldCBfc21vb3RoaW5nRW5hYmxlZCgpe3ZhciB0PXRoaXMuX3Ntb290aGluZ1dlaWdodDtyZXR1cm4gdD4wfV9nZXRDYXRlZ29yeUtleSh0KXtyZXR1cm4gdC5tZXRhZGF0YS50eXBlPT1OYS5TRUFSQ0hfUkVTVUxUUz8iIjp0Lm5hbWV9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2hhcnRzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoQjYuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPUI2Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZENoYXJ0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3VwZGF0ZUNhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7bGV0IGksbz1uLGE9QjYubWFwVmFsdWVzKHQscz0+T2JqZWN0LmtleXMocykpO2k9aEUoYSxyLG8pLGkuZm9yRWFjaChzPT57cy5pdGVtcz1zLml0ZW1zLm1hcChsPT4oe3RhZzpsLnRhZyxzZXJpZXM6bC5ydW5zLm1hcChjPT4oe3J1bjpjLHRhZzpsLnRhZ30pKX0pKX0pLHRoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsaSx0aGlzLl9nZXRDYXRlZ29yeUtleSl9X3RhZ01ldGFkYXRhKHQscixuKXtsZXQgaT10Lm5hbWUsbz1uLnRhZyxhPXt9O24uc2VyaWVzLmZvckVhY2goKHtydW46dX0pPT57YVt1XT1yW3VdW29dfSk7bGV0IHM9by5yZXBsYWNlKC9cL3NjYWxhcl9zdW1tYXJ5JC8sIiIpLHtkZXNjcmlwdGlvbjpsLGRpc3BsYXlOYW1lOmN9PW9SKGEscyk7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09TmEuUFJFRklYX0dST1VQJiZjLnN0YXJ0c1dpdGgoaSsiLyIpJiYoYz1jLnNsaWNlKGkubGVuZ3RoKzEpKSx7ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTpjfX19O3VvLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJzaG93LWRvd25sb2FkLWxpbmtzIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfc2hvd0Rvd25sb2FkTGlua3N9fSIKICAgICAgICAgICAgICAgID5TaG93IGRhdGEgZG93bmxvYWQgbGlua3M8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJpZ25vcmUteS1vdXRsaWVyIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfaWdub3JlWU91dGxpZXJzfX0iCiAgICAgICAgICAgICAgICA+SWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmc8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nIj4KICAgICAgICAgICAgICA8ZGl2PlRvb2x0aXAgc29ydGluZyBtZXRob2Q6PC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e190b29sdGlwU29ydGluZ01ldGhvZH19IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0iMCIKICAgICAgICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVmYXVsdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+YXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5uZWFyZXN0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1zbW9vdGhpbmctaW5wdXQKICAgICAgICAgICAgICB3ZWlnaHQ9Int7X3Ntb290aGluZ1dlaWdodH19IgogICAgICAgICAgICAgIHN0ZXA9IjAuMDAxIgogICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICBtYXg9IjAuOTk5IgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHNjYWxhciBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXNjYWxhci1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgZGF0YS10by1sb2FkPSJbW2l0ZW0uc2VyaWVzXV0iCiAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX2dldE11bHRpRXhwZXJpbWVudHMoZGF0YVNlbGVjdGlvbildXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW19zbW9vdGhpbmdXZWlnaHRdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShjYXRlZ29yeSwgX3J1blRvVGFnSW5mbywgaXRlbSldXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbX3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgYmF0Y2gtc2l6ZT0iW1tmZWF0dXJlRmxhZ3Muc2NhbGFyc0JhdGNoU2l6ZV1dIgogICAgICAgICAgICAgICAgICBpbi1jb2xhYj0iW1tmZWF0dXJlRmxhZ3MuaW5Db2xhYl1dIgogICAgICAgICAgICAgICAgPjwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KCiAgICAgIC5saW5lLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgLmNlbnRlciB7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJmZWF0dXJlRmxhZ3MiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsIl9zaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdW8ucHJvdG90eXBlLCJfc21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1by5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdW8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx1by5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx1by5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx1by5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtCdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdW8ucHJvdG90eXBlLCJfdXBkYXRlQ2F0ZWdvcmllcyIsbnVsbCk7dW89RShbeXQoInRmLXNjYWxhci1kYXNoYm9hcmQiKV0sdW8pO3ZhciBjcGU9RWUoT2UoKSwxKTt2YXIgZGg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RleHRzPVtdLHRoaXMuX2NhbmNlbGxlcj1uZXcgYW59Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1fY2hhbmdlUnVuQ29sb3IoKXt2YXIgdD10aGlzLl9ydW5Db2xvcjt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGItdGV4dC1sb2FkZXItb3V0bGluZSI6dH0pfWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9X2UoKSxyPU1pKHQucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLG1hcmtkb3duOnRoaXMubWFya2Rvd25FbmFibGVkPyJ0cnVlIjoiZmFsc2UifSksbj10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgbz1pLnZhbHVlLm1hcChhPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShhLndhbGxfdGltZSoxZTMpLHN0ZXA6YS5zdGVwLHRleHQ6YS50ZXh0fSkpO3RoaXMuc2V0KCJfdGV4dHMiLG8uc2xpY2UoKS5yZXZlcnNlKCkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2Zvcm1hdFN0ZXAodCl7cmV0dXJuIHhuKCIsIikodCl9fTtkaC50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZyBydW49IltbcnVuXV0iIHRhZz0iW1t0YWddXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8cGFwZXItbWF0ZXJpYWwKICAgICAgZWxldmF0aW9uPSIxIgogICAgICBpZD0ic3RlcHMtY29udGFpbmVyIgogICAgICBjbGFzcz0iY29udGFpbmVyIHNjcm9sbGJhciIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfdGV4dHNdXSI+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InN0ZXAtY29udGFpbmVyIj4KICAgICAgICAgIHN0ZXAgPHNwYW4gY2xhc3M9InN0ZXAtdmFsdWUiPltbX2Zvcm1hdFN0ZXAoaXRlbS5zdGVwKV1dPC9zcGFuPgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InRleHQiPgogICAgICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tpdGVtLnRleHRdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgLnNjcm9sbGJhciB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAjc3RlcHMtY29udGFpbmVyIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgLyogY29sb3IgY29tcHV0ZWQgYW5kIHNldCBhcyBpbmxpbmUgc3R5bGUgKi87CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXRiLXRleHQtbG9hZGVyLW91dGxpbmUpOwogICAgICB9CiAgICAgIC50ZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAzcHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnN0ZXAtY29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyKTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsgLyogdG8gY29ycmVjdCBmb3IgYm9yZGVyICovCiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lcjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkaC5wcm90b3R5cGUsIm1hcmtkb3duRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZGgucHJvdG90eXBlLCJfdGV4dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxkaC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sZGgucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkaC5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbQnQoIl9ydW5Db2xvciIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZGgucHJvdG90eXBlLCJfY2hhbmdlUnVuQ29sb3IiLG51bGwpO2RoPUUoW3l0KCJ0Zi10ZXh0LWxvYWRlciIpXSxkaCk7dmFyIFFjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fbWFya2Rvd25FbmFibGVkPXZwKCJfbWFya2Rvd25FbmFibGVkIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX21hcmtkb3duRW5hYmxlZFN0b3JhZ2VPYnNlcnZlcj14cCgiX21hcmtkb3duRW5hYmxlZCIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX21hcmtkb3duRW5hYmxlZE9ic2VydmVyKF9tYXJrZG93bkVuYWJsZWQpIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkVGV4dHMoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihjcGUuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnKSlyZXR1cm47bGV0IG49JGkocik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLG4ubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsciksdGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX0pfV9yZWxvYWRUZXh0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtdGV4dC1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWcscj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7cmV0dXJuIFFsKHQscixuKX1fbWFya2Rvd25FbmFibGVkT2JzZXJ2ZXIoKXt0aGlzLl9yZWxvYWRUZXh0cygpfX07UWMudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X21hcmtkb3duRW5hYmxlZH19IgogICAgICAgICAgICAgID5FbmFibGUgTWFya2Rvd248L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyB0ZXh0IGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSB0ZXh0IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi10ZXh0LWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBtYXJrZG93bi1lbmFibGVkPSJbW19tYXJrZG93bkVuYWJsZWRdXSIKICAgICAgICAgICAgICAgID48L3RmLXRleHQtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfbWFya2Rvd25FbmFibGVkU3RvcmFnZU9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfbWFya2Rvd25FbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRYy5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUWMucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRYy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUWMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFjLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFFjLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1FjPUUoW3l0KCJ0Zi10ZXh0LWRhc2hib2FyZCIpXSxRYyk7dmFyIFZodD1jbGFzcyBleHRlbmRzIEd0KG10KXt9O1ZodC50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgV2hhdC1JZiBUb29sIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuPC9oMz4KICAgICAgPHA+CiAgICAgICAgVGhlCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9wYWlyLWNvZGUuZ2l0aHViLmlvL2xpdC8iCiAgICAgICAgICA+TGVhcm5pbmcgSW50ZXJwcmV0YWJpbGl0eSBUb29sIChMSVQpPC9hCiAgICAgICAgPgogICAgICAgIGlzIGFuIGFjdGl2ZWx5IG1haW50YWluZWQgYWx0ZXJuYXRpdmUuIFBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vcGFpci1jb2RlLmdpdGh1Yi5pby9saXQvc2V0dXAvIj5oZXJlPC9hPiB0byBpbnN0YWxsIGFuZAogICAgICAgIHVzZSB0aGlzIHRvb2wuCiAgICAgIDwvcD4KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQoKICAgICAgICAubWVzc2FnZSB7CiAgICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIH0KICAgICAgICAjY29tbWFuZFRleHRhcmVhIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDFleDsKICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgICByZXNpemU6IHZlcnRpY2FsOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgfQogICAgICAgICNjb3B5Q29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQogICAgICAgICNjb3BpZWRNZXNzYWdlIHsKICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgIDwvZGl2PgogIGA7Vmh0PUUoW3l0KCJ0Zi13aXQtcmVkaXJlY3QtZGFzaGJvYXJkIildLFZodCk7dmFyIHVwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfYmFja2VuZD1SQn19O3VwZT1FKFt5dCgidGYtYmFja2VuZCIpXSx1cGUpO3ZhciBocGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnJ1bnNDb2xvclNjYWxlPWZufX07aHBlPUUoW3l0KCJ0Zi1jb2xvci1zY2FsZSIpXSxocGUpO3ZhciBmcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2ZlYXR1cmVfZmxhZ3M9dFd9fTtmcGU9RShbeXQoInRmLWZlYXR1cmUtZmxhZ3MiKV0sZnBlKTt2YXIgcHBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9nbG9iYWxzPWtXfX07cHBlPUUoW3l0KCJ0Zi1nbG9iYWxzIildLHBwZSk7dmFyIFVodD17fTtLcyhVaHQse1RmRG9tUmVwZWF0OigpPT5PaSxhZGRMaW1pdExpc3RlbmVyOigpPT5VVyxnZXRMaW1pdDooKT0+R1cscmVtb3ZlTGltaXRMaXN0ZW5lcjooKT0+cVcsc2V0TGltaXQ6KCk9PnMyZX0pO3ZhciBkcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3BhZ2luYXRlZF92aWV3PVVodH19O2RwZT1FKFt5dCgidGYtcGFnaW5hdGVkLXZpZXctc3RvcmUiKV0sZHBlKTt2YXIgbXBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9zdG9yYWdlPU9CfX07bXBlPUUoW3l0KCJ0Zi1zdG9yYWdlIildLG1wZSk7fSkoKTsKLyohCiAqIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qIQogKiBpc29iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXNvYmplY3Q+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC4KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KClNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwphbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi8qKgogKiBAZmlsZW92ZXJ2aWV3CiAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+CiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKgogKiBAZmlsZW92ZXJ2aWV3IG1hbnVhbGx5IGFkZCBkMy1zZWxlY3Rpb24tbXVsdGkgdG8gZDMgZGVmYXVsdCBidW5kbGUuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzCiAqIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zZWxlY3Rpb24tbXVsdGkvaXNzdWVzLzExIGZvciB3aHkgd2UgaGF2ZSB0byBkbyB0aGlzCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGNvbnZlbmllbnQgdGh1bmsgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZQogKiBvZiBjcmVhdGluZyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGlucHV0cyBmcm9tIG11dGFibGUgY2xhc3MgcHJvcGVydGllcy4KICovCi8qKgogKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogKiBAbGljZW5zZSBNSVQKICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogKiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KICoKICogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogKiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiAqIHdlIHdyaXRlIGEgcmVjdXJzaXZlIFNpZ25hdHVyZSBpbnRlcmZhY2UgdGhhdCBob2xkcyBhbiBpbW11dGFibGUgc25hcHNob3Qgb2Ygd2hhdGV2ZXIKICogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKICogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KICoKICogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxOSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwoKKCgpPT57dmFyIFhpZT1PYmplY3QuY3JlYXRlLEhBPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxRaWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixaaWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsS2llPU9iamVjdC5nZXRQcm90b3R5cGVPZixKaWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx5ND0obix0KT0+KCk9Pih0fHxuKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLHpBPShuLHQpPT57Zm9yKHZhciBlIGluIHQpSEEobixlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9LGI0PShuLHQsZSk9PihlPW51bGwhPW4/WGllKEtpZShuKSk6e30sKChuLHQsZSxpKT0+e2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKGxldCByIG9mIFppZSh0KSkhSmllLmNhbGwobixyKSYmdW5kZWZpbmVkIT09ciYmSEEobixyLHtnZXQ6KCk9PnRbcl0sZW51bWVyYWJsZTohKGk9UWllKHQscikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gbn0pKCF0JiZuJiZuLl9fZXNNb2R1bGU/ZTpIQShlLCJkZWZhdWx0Iix7dmFsdWU6bixlbnVtZXJhYmxlOiEwfSksbikpLGlIPXk0KChjVWUsQ0MpPT57dmFyIGs0LFA0LE80LEY0LEw0LE40LEI0LFY0LEg0LHo0LFU0LGo0LEc0LHZDLHRSLFc0LHE0LFk0LGptLFg0LFE0LFo0LEs0LEo0LCQ0LGVILHRILG5ILHhDOyFmdW5jdGlvbihuKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiB0aGlzP3RoaXM6e307ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTppLl9fZXNNb2R1bGU9ITApLGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGlbb109cj9yKG8sYSk6YX19ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInRzbGliIixbImV4cG9ydHMiXSxmdW5jdGlvbihpKXtuKGUodCxlKGkpKSl9KTpuKCJvYmplY3QiPT10eXBlb2YgQ0MmJiJvYmplY3QiPT10eXBlb2YgQ0MuZXhwb3J0cz9lKHQsZShDQy5leHBvcnRzKSk6ZSh0KSl9KGZ1bmN0aW9uKG4pe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihpLHIpe2kuX19wcm90b19fPXJ9fHxmdW5jdGlvbihpLHIpe2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYoaVtvXT1yW29dKX07azQ9ZnVuY3Rpb24oaSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgciYmbnVsbCE9PXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhyKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1pfXQoaSxyKSxpLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOihvLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbyl9LFA0PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGkpe2Zvcih2YXIgcixvPTEsYT1hcmd1bWVudHMubGVuZ3RoO288YTtvKyspZm9yKHZhciBzIGluIHI9YXJndW1lbnRzW29dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHMpJiYoaVtzXT1yW3NdKTtyZXR1cm4gaX0sTzQ9ZnVuY3Rpb24oaSxyKXt2YXIgbz17fTtmb3IodmFyIGEgaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxhKSYmci5pbmRleE9mKGEpPDAmJihvW2FdPWlbYV0pO2lmKG51bGwhPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcz0wO2ZvcihhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaSk7czxhLmxlbmd0aDtzKyspci5pbmRleE9mKGFbc10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChpLGFbc10pJiYob1thW3NdXT1pW2Fbc11dKX1yZXR1cm4gb30sRjQ9ZnVuY3Rpb24oaSxyLG8sYSl7dmFyIGMscz1hcmd1bWVudHMubGVuZ3RoLGw9czwzP3I6bnVsbD09PWE/YT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk6YTtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWw9UmVmbGVjdC5kZWNvcmF0ZShpLHIsbyxhKTtlbHNlIGZvcih2YXIgZD1pLmxlbmd0aC0xO2Q+PTA7ZC0tKShjPWlbZF0pJiYobD0oczwzP2MobCk6cz4zP2MocixvLGwpOmMocixvKSl8fGwpO3JldHVybiBzPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8sbCksbH0sTDQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gZnVuY3Rpb24obyxhKXtyKG8sYSxpKX19LE40PWZ1bmN0aW9uKGkscixvLGEscyxsKXtmdW5jdGlvbiBjKEEpe2lmKHZvaWQgMCE9PUEmJiJmdW5jdGlvbiIhPXR5cGVvZiBBKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIEF9Zm9yKHZhciBtLGQ9YS5raW5kLHU9ImdldHRlciI9PT1kPyJnZXQiOiJzZXR0ZXIiPT09ZD8ic2V0IjoidmFsdWUiLHA9IXImJmk/YS5zdGF0aWM/aTppLnByb3RvdHlwZTpudWxsLGY9cnx8KHA/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLGEubmFtZSk6e30pLHk9ITEsTT1vLmxlbmd0aC0xO00+PTA7TS0tKXt2YXIgdj17fTtmb3IodmFyIHggaW4gYSl2W3hdPSJhY2Nlc3MiPT09eD97fTphW3hdO2Zvcih2YXIgeCBpbiBhLmFjY2Vzcyl2LmFjY2Vzc1t4XT1hLmFjY2Vzc1t4XTt2LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKEEpe2lmKHkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7bC5wdXNoKGMoQXx8bnVsbCkpfTt2YXIgUj0oMCxvW01dKSgiYWNjZXNzb3IiPT09ZD97Z2V0OmYuZ2V0LHNldDpmLnNldH06Zlt1XSx2KTtpZigiYWNjZXNzb3IiPT09ZCl7aWYodm9pZCAwPT09Uiljb250aW51ZTtpZihudWxsPT09Unx8Im9iamVjdCIhPXR5cGVvZiBSKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhtPWMoUi5nZXQpKSYmKGYuZ2V0PW0pLChtPWMoUi5zZXQpKSYmKGYuc2V0PW0pLChtPWMoUi5pbml0KSkmJnMucHVzaChtKX1lbHNlKG09YyhSKSkmJigiZmllbGQiPT09ZD9zLnB1c2gobSk6Zlt1XT1tKX1wJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocCxhLm5hbWUsZikseT0hMH0sQjQ9ZnVuY3Rpb24oaSxyLG8pe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjIscz0wO3M8ci5sZW5ndGg7cysrKW89YT9yW3NdLmNhbGwoaSxvKTpyW3NdLmNhbGwoaSk7cmV0dXJuIGE/bzp2b2lkIDB9LFY0PWZ1bmN0aW9uKGkpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgaT9pOiIiLmNvbmNhdChpKX0sSDQ9ZnVuY3Rpb24oaSxyLG8pe3JldHVybiJzeW1ib2wiPT10eXBlb2YgciYmKHI9ci5kZXNjcmlwdGlvbj8iWyIuY29uY2F0KHIuZGVzY3JpcHRpb24sIl0iKToiIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm5hbWUiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6bz8iIi5jb25jYXQobywiICIscik6cn0pfSx6ND1mdW5jdGlvbihpLHIpe2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QubWV0YWRhdGEpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaSxyKX0sVTQ9ZnVuY3Rpb24oaSxyLG8sYSl7cmV0dXJuIG5ldyhvfHwobz1Qcm9taXNlKSkoZnVuY3Rpb24obCxjKXtmdW5jdGlvbiBkKGYpe3RyeXtwKGEubmV4dChmKSl9Y2F0Y2gobSl7YyhtKX19ZnVuY3Rpb24gdShmKXt0cnl7cChhLnRocm93KGYpKX1jYXRjaChtKXtjKG0pfX1mdW5jdGlvbiBwKGYpe2YuZG9uZT9sKGYudmFsdWUpOmZ1bmN0aW9uKGwpe3JldHVybiBsIGluc3RhbmNlb2Ygbz9sOm5ldyBvKGZ1bmN0aW9uKGMpe2MobCl9KX0oZi52YWx1ZSkudGhlbihkLHUpfXAoKGE9YS5hcHBseShpLHJ8fFtdKSkubmV4dCgpKX0pfSxqND1mdW5jdGlvbihpLHIpe3ZhciBhLHMsbCxjLG89e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmbFswXSl0aHJvdyBsWzFdO3JldHVybiBsWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGM9e25leHQ6ZCgwKSx0aHJvdzpkKDEpLHJldHVybjpkKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoY1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjO2Z1bmN0aW9uIGQocCl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihwKXtpZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2MmJihjPTAscFswXSYmKG89MCkpLG87KXRyeXtpZihhPTEscyYmKGw9MiZwWzBdP3MucmV0dXJuOnBbMF0/cy50aHJvd3x8KChsPXMucmV0dXJuKSYmbC5jYWxsKHMpLDApOnMubmV4dCkmJiEobD1sLmNhbGwocyxwWzFdKSkuZG9uZSlyZXR1cm4gbDtzd2l0Y2gocz0wLGwmJihwPVsyJnBbMF0sbC52YWx1ZV0pLHBbMF0pe2Nhc2UgMDpjYXNlIDE6bD1wO2JyZWFrO2Nhc2UgNDpyZXR1cm4gby5sYWJlbCsrLHt2YWx1ZTpwWzFdLGRvbmU6ITF9O2Nhc2UgNTpvLmxhYmVsKysscz1wWzFdLHA9WzBdO2NvbnRpbnVlO2Nhc2UgNzpwPW8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobD0obD1vLnRyeXMpLmxlbmd0aD4wJiZsW2wubGVuZ3RoLTFdKSYmKDY9PT1wWzBdfHwyPT09cFswXSkpe289MDtjb250aW51ZX1pZigzPT09cFswXSYmKCFsfHxwWzFdPmxbMF0mJnBbMV08bFszXSkpe28ubGFiZWw9cFsxXTticmVha31pZig2PT09cFswXSYmby5sYWJlbDxsWzFdKXtvLmxhYmVsPWxbMV0sbD1wO2JyZWFrfWlmKGwmJm8ubGFiZWw8bFsyXSl7by5sYWJlbD1sWzJdLG8ub3BzLnB1c2gocCk7YnJlYWt9bFsyXSYmby5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlfXA9ci5jYWxsKGksbyl9Y2F0Y2goZil7cD1bNixmXSxzPTB9ZmluYWxseXthPWw9MH1pZig1JnBbMF0pdGhyb3cgcFsxXTtyZXR1cm57dmFsdWU6cFswXT9wWzFdOnZvaWQgMCxkb25lOiEwfX0oW3AsZl0pfX19LEc0PWZ1bmN0aW9uKGkscil7Zm9yKHZhciBvIGluIGkpImRlZmF1bHQiIT09byYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiZ4QyhyLGksbyl9LHhDPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyLG8sYSl7dm9pZCAwPT09YSYmKGE9byk7dmFyIHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLG8pOyghc3x8KCJnZXQiaW4gcz8hci5fX2VzTW9kdWxlOnMud3JpdGFibGV8fHMuY29uZmlndXJhYmxlKSkmJihzPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByW29dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLGEscyl9OmZ1bmN0aW9uKGkscixvLGEpe3ZvaWQgMD09PWEmJihhPW8pLGlbYV09cltvXX0sdkM9ZnVuY3Rpb24oaSl7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG89ciYmaVtyXSxhPTA7aWYobylyZXR1cm4gby5jYWxsKGkpO2lmKGkmJiJudW1iZXIiPT10eXBlb2YgaS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSYmYT49aS5sZW5ndGgmJihpPXZvaWQgMCkse3ZhbHVlOmkmJmlbYSsrXSxkb25lOiFpfX19O3Rocm93IG5ldyBUeXBlRXJyb3Iocj8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9LHRSPWZ1bmN0aW9uKGkscil7dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmaVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFvKXJldHVybiBpO3ZhciBzLGMsYT1vLmNhbGwoaSksbD1bXTt0cnl7Zm9yKDsodm9pZCAwPT09cnx8ci0tID4wKSYmIShzPWEubmV4dCgpKS5kb25lOylsLnB1c2gocy52YWx1ZSl9Y2F0Y2goZCl7Yz17ZXJyb3I6ZH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG89YS5yZXR1cm4pJiZvLmNhbGwoYSl9ZmluYWxseXtpZihjKXRocm93IGMuZXJyb3J9fXJldHVybiBsfSxXND1mdW5jdGlvbigpe2Zvcih2YXIgaT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylpPWkuY29uY2F0KHRSKGFyZ3VtZW50c1tyXSkpO3JldHVybiBpfSxxND1mdW5jdGlvbigpe2Zvcih2YXIgaT0wLHI9MCxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKylpKz1hcmd1bWVudHNbcl0ubGVuZ3RoO3ZhciBhPUFycmF5KGkpLHM9MDtmb3Iocj0wO3I8bztyKyspZm9yKHZhciBsPWFyZ3VtZW50c1tyXSxjPTAsZD1sLmxlbmd0aDtjPGQ7YysrLHMrKylhW3NdPWxbY107cmV0dXJuIGF9LFk0PWZ1bmN0aW9uKGkscixvKXtpZihvfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIGwsYT0wLHM9ci5sZW5ndGg7YTxzO2ErKykobHx8IShhIGluIHIpKSYmKGx8fChsPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsMCxhKSksbFthXT1yW2FdKTtyZXR1cm4gaS5jb25jYXQobHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocikpfSxqbT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGptPyh0aGlzLnY9aSx0aGlzKTpuZXcgam0oaSl9LFg0PWZ1bmN0aW9uKGkscixvKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIHMsYT1vLmFwcGx5KGkscnx8W10pLGw9W107cmV0dXJuIHM9e30sYygibmV4dCIpLGMoInRocm93IiksYygicmV0dXJuIiksc1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scztmdW5jdGlvbiBjKHkpe2FbeV0mJihzW3ldPWZ1bmN0aW9uKE0pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LHgpe2wucHVzaChbeSxNLHYseF0pPjF8fGQoeSxNKX0pfSl9ZnVuY3Rpb24gZCh5LE0pe3RyeXshZnVuY3Rpb24oeSl7eS52YWx1ZSBpbnN0YW5jZW9mIGptP1Byb21pc2UucmVzb2x2ZSh5LnZhbHVlLnYpLnRoZW4ocCxmKTptKGxbMF1bMl0seSl9KGFbeV0oTSkpfWNhdGNoKHYpe20obFswXVszXSx2KX19ZnVuY3Rpb24gcCh5KXtkKCJuZXh0Iix5KX1mdW5jdGlvbiBmKHkpe2QoInRocm93Iix5KX1mdW5jdGlvbiBtKHksTSl7eShNKSxsLnNoaWZ0KCksbC5sZW5ndGgmJmQobFswXVswXSxsWzBdWzFdKX19LFE0PWZ1bmN0aW9uKGkpe3ZhciByLG87cmV0dXJuIHI9e30sYSgibmV4dCIpLGEoInRocm93IixmdW5jdGlvbihzKXt0aHJvdyBzfSksYSgicmV0dXJuIikscltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHI7ZnVuY3Rpb24gYShzLGwpe3Jbc109aVtzXT9mdW5jdGlvbihjKXtyZXR1cm4obz0hbyk/e3ZhbHVlOmptKGlbc10oYykpLGRvbmU6ITF9Omw/bChjKTpjfTpsfX0sWjQ9ZnVuY3Rpb24oaSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBvLHI9aVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIHI/ci5jYWxsKGkpOihpPXZDKGkpLG89e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gYShsKXtvW2xdPWlbbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLHUpeyFmdW5jdGlvbihsLGMsZCx1KXtQcm9taXNlLnJlc29sdmUodSkudGhlbihmdW5jdGlvbihwKXtsKHt2YWx1ZTpwLGRvbmU6ZH0pfSxjKX0oZCx1LChjPWlbbF0oYykpLmRvbmUsYy52YWx1ZSl9KX19fSxLND1mdW5jdGlvbihpLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGksInJhdyIse3ZhbHVlOnJ9KTppLnJhdz1yLGl9O3ZhciBlPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6cn0pfTpmdW5jdGlvbihpLHIpe2kuZGVmYXVsdD1yfTtKND1mdW5jdGlvbihpKXtpZihpJiZpLl9fZXNNb2R1bGUpcmV0dXJuIGk7dmFyIHI9e307aWYobnVsbCE9aSlmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmeEMocixpLG8pO3JldHVybiBlKHIsaSkscn0sJDQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9fSxlSD1mdW5jdGlvbihpLHIsbyxhKXtpZigiYSI9PT1vJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IWE6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiJtIj09PW8/YToiYSI9PT1vP2EuY2FsbChpKTphP2EudmFsdWU6ci5nZXQoaSl9LHRIPWZ1bmN0aW9uKGkscixvLGEscyl7aWYoIm0iPT09YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZigiYSI9PT1hJiYhcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IXM6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuImEiPT09YT9zLmNhbGwoaSxvKTpzP3MudmFsdWU9bzpyLnNldChpLG8pLG99LG5IPWZ1bmN0aW9uKGkscil7aWYobnVsbD09PXJ8fCJvYmplY3QiIT10eXBlb2YgciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9yPT09aTppLmhhcyhyKX0sbigiX19leHRlbmRzIixrNCksbigiX19hc3NpZ24iLFA0KSxuKCJfX3Jlc3QiLE80KSxuKCJfX2RlY29yYXRlIixGNCksbigiX19wYXJhbSIsTDQpLG4oIl9fZXNEZWNvcmF0ZSIsTjQpLG4oIl9fcnVuSW5pdGlhbGl6ZXJzIixCNCksbigiX19wcm9wS2V5IixWNCksbigiX19zZXRGdW5jdGlvbk5hbWUiLEg0KSxuKCJfX21ldGFkYXRhIix6NCksbigiX19hd2FpdGVyIixVNCksbigiX19nZW5lcmF0b3IiLGo0KSxuKCJfX2V4cG9ydFN0YXIiLEc0KSxuKCJfX2NyZWF0ZUJpbmRpbmciLHhDKSxuKCJfX3ZhbHVlcyIsdkMpLG4oIl9fcmVhZCIsdFIpLG4oIl9fc3ByZWFkIixXNCksbigiX19zcHJlYWRBcnJheXMiLHE0KSxuKCJfX3NwcmVhZEFycmF5IixZNCksbigiX19hd2FpdCIsam0pLG4oIl9fYXN5bmNHZW5lcmF0b3IiLFg0KSxuKCJfX2FzeW5jRGVsZWdhdG9yIixRNCksbigiX19hc3luY1ZhbHVlcyIsWjQpLG4oIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixLNCksbigiX19pbXBvcnRTdGFyIixKNCksbigiX19pbXBvcnREZWZhdWx0IiwkNCksbigiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsZUgpLG4oIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLHRIKSxuKCJfX2NsYXNzUHJpdmF0ZUZpZWxkSW4iLG5IKX0pfSksUkc9eTQobU89PnsidXNlIHN0cmljdCI7dmFyIG4saHU9bU8mJm1PLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKG4sdCxlKXtpZihlfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIG8saT0wLHI9dC5sZW5ndGg7aTxyO2krKykob3x8IShpIGluIHQpKSYmKG98fChvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxpKSksb1tpXT10W2ldKTtyZXR1cm4gbi5jb25jYXQob3x8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfTtuPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKGope3ZhciBlZT1qLnBlcmZvcm1hbmNlO2Z1bmN0aW9uIGxlKGd0KXtlZSYmZWUubWFyayYmZWUubWFyayhndCl9ZnVuY3Rpb24gRShndCxtZSl7ZWUmJmVlLm1lYXN1cmUmJmVlLm1lYXN1cmUoZ3QsbWUpfWxlKCJab25lIik7dmFyIHo9ai5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyI7ZnVuY3Rpb24gWShndCl7cmV0dXJuIHorZ3R9dmFyIEo9ITA9PT1qW1koImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKGouWm9uZSl7aWYoSnx8ImZ1bmN0aW9uIiE9dHlwZW9mIGouWm9uZS5fX3N5bWJvbF9fKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTtyZXR1cm4gai5ab25lfXZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGd0KG1lLGhlKXt0aGlzLl9wYXJlbnQ9bWUsdGhpcy5fbmFtZT1oZT9oZS5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz1oZSYmaGUucHJvcGVydGllc3x8e30sdGhpcy5fem9uZURlbGVnYXRlPW5ldyBldCh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsaGUpfXJldHVybiBndC5hc3NlcnRab25lUGF0Y2hlZD1mdW5jdGlvbigpe2lmKGouUHJvbWlzZSE9PUxuLlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGd0LCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBtZT1ndC5jdXJyZW50O21lLnBhcmVudDspbWU9bWUucGFyZW50O3JldHVybiBtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3QsImN1cnJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb3Iuem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3QsImN1cnJlbnRUYXNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGd0Ll9fbG9hZF9wYXRjaD1mdW5jdGlvbihtZSxoZSxSZSl7aWYodm9pZCAwPT09UmUmJihSZT0hMSksTG4uaGFzT3duUHJvcGVydHkobWUpKXtpZighUmUmJkopdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK21lKX1lbHNlIGlmKCFqWyJfX1pvbmVfZGlzYWJsZV8iK21lXSl7dmFyIEVuPSJab25lOiIrbWU7bGUoRW4pLExuW21lXT1oZShqLGd0LHByKSxFKEVuLEVuKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShndC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGd0LnByb3RvdHlwZSwibmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGd0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24obWUpe3ZhciBoZT10aGlzLmdldFpvbmVXaXRoKG1lKTtpZihoZSlyZXR1cm4gaGUuX3Byb3BlcnRpZXNbbWVdfSxndC5wcm90b3R5cGUuZ2V0Wm9uZVdpdGg9ZnVuY3Rpb24obWUpe2Zvcih2YXIgaGU9dGhpcztoZTspe2lmKGhlLl9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG1lKSlyZXR1cm4gaGU7aGU9aGUuX3BhcmVudH1yZXR1cm4gbnVsbH0sZ3QucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24obWUpe2lmKCFtZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLG1lKX0sZ3QucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24obWUsaGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5jdGlvbiBnb3Q6ICIrbWUpO3ZhciBSZT10aGlzLl96b25lRGVsZWdhdGUuaW50ZXJjZXB0KHRoaXMsbWUsaGUpLEVuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEVuLnJ1bkd1YXJkZWQoUmUsdGhpcyxhcmd1bWVudHMsaGUpfX0sZ3QucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihtZSxoZSxSZSxFbil7b3I9e3BhcmVudDpvcix6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLG1lLGhlLFJlLEVuKX1maW5hbGx5e29yPW9yLnBhcmVudH19LGd0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKG1lLGhlLFJlLEVuKXt2b2lkIDA9PT1oZSYmKGhlPW51bGwpLG9yPXtwYXJlbnQ6b3Isem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsbWUsaGUsUmUsRW4pfWNhdGNoKG1yKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxtcikpdGhyb3cgbXJ9fWZpbmFsbHl7b3I9b3IucGFyZW50fX0sZ3QucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24obWUsaGUsUmUpe2lmKG1lLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKG1lLnpvbmV8fEl0KS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZihtZS5zdGF0ZSE9PWdpfHxtZS50eXBlIT09X2kmJm1lLnR5cGUhPT1Pbil7dmFyIEVuPW1lLnN0YXRlIT1RbjtFbiYmbWUuX3RyYW5zaXRpb25UbyhRbixqbiksbWUucnVuQ291bnQrKzt2YXIgbXI9TWE7TWE9bWUsb3I9e3BhcmVudDpvcix6b25lOnRoaXN9O3RyeXttZS50eXBlPT1PbiYmbWUuZGF0YSYmIW1lLmRhdGEuaXNQZXJpb2RpYyYmKG1lLmNhbmNlbEZuPXZvaWQgMCk7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlVGFzayh0aGlzLG1lLGhlLFJlKX1jYXRjaChvbCl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsb2wpKXRocm93IG9sfX1maW5hbGx5e21lLnN0YXRlIT09Z2kmJm1lLnN0YXRlIT09QmkmJihtZS50eXBlPT1faXx8bWUuZGF0YSYmbWUuZGF0YS5pc1BlcmlvZGljP0VuJiZtZS5fdHJhbnNpdGlvblRvKGpuLFFuKToobWUucnVuQ291bnQ9MCx0aGlzLl91cGRhdGVUYXNrQ291bnQobWUsLTEpLEVuJiZtZS5fdHJhbnNpdGlvblRvKGdpLFFuLGdpKSkpLG9yPW9yLnBhcmVudCxNYT1tcn19fSxndC5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKG1lKXtpZihtZS56b25lJiZtZS56b25lIT09dGhpcylmb3IodmFyIGhlPXRoaXM7aGU7KXtpZihoZT09PW1lLnpvbmUpdGhyb3cgRXJyb3IoImNhbiBub3QgcmVzY2hlZHVsZSB0YXNrIHRvICIuY29uY2F0KHRoaXMubmFtZSwiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIpLmNvbmNhdChtZS56b25lLm5hbWUpKTtoZT1oZS5wYXJlbnR9bWUuX3RyYW5zaXRpb25UbyhlaSxnaSk7dmFyIFJlPVtdO21lLl96b25lRGVsZWdhdGVzPVJlLG1lLl96b25lPXRoaXM7dHJ5e21lPXRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcyxtZSl9Y2F0Y2goRW4pe3Rocm93IG1lLl90cmFuc2l0aW9uVG8oQmksZWksZ2kpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLEVuKSxFbn1yZXR1cm4gbWUuX3pvbmVEZWxlZ2F0ZXM9PT1SZSYmdGhpcy5fdXBkYXRlVGFza0NvdW50KG1lLDEpLG1lLnN0YXRlPT1laSYmbWUuX3RyYW5zaXRpb25UbyhqbixlaSksbWV9LGd0LnByb3RvdHlwZS5zY2hlZHVsZU1pY3JvVGFzaz1mdW5jdGlvbihtZSxoZSxSZSxFbil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBxZSh4bixtZSxoZSxSZSxFbix2b2lkIDApKX0sZ3QucHJvdG90eXBlLnNjaGVkdWxlTWFjcm9UYXNrPWZ1bmN0aW9uKG1lLGhlLFJlLEVuLG1yKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHFlKE9uLG1lLGhlLFJlLEVuLG1yKSl9LGd0LnByb3RvdHlwZS5zY2hlZHVsZUV2ZW50VGFzaz1mdW5jdGlvbihtZSxoZSxSZSxFbixtcil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBxZShfaSxtZSxoZSxSZSxFbixtcikpfSxndC5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihtZSl7aWYobWUuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBjYW5jZWxsZWQgaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisobWUuem9uZXx8SXQpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKG1lLnN0YXRlPT09am58fG1lLnN0YXRlPT09UW4pe21lLl90cmFuc2l0aW9uVG8oanQsam4sUW4pO3RyeXt0aGlzLl96b25lRGVsZWdhdGUuY2FuY2VsVGFzayh0aGlzLG1lKX1jYXRjaChoZSl7dGhyb3cgbWUuX3RyYW5zaXRpb25UbyhCaSxqdCksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsaGUpLGhlfXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQobWUsLTEpLG1lLl90cmFuc2l0aW9uVG8oZ2ksanQpLG1lLnJ1bkNvdW50PTAsbWV9fSxndC5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihtZSxoZSl7dmFyIFJlPW1lLl96b25lRGVsZWdhdGVzOy0xPT1oZSYmKG1lLl96b25lRGVsZWdhdGVzPW51bGwpO2Zvcih2YXIgRW49MDtFbjxSZS5sZW5ndGg7RW4rKylSZVtFbl0uX3VwZGF0ZVRhc2tDb3VudChtZS50eXBlLGhlKX0sZ3R9KCk7YWUuX19zeW1ib2xfXz1ZO3ZhciBZaSxVZT17bmFtZToiIixvbkhhc1Rhc2s6ZnVuY3Rpb24oZ3QsbWUsaGUsUmUpe3JldHVybiBndC5oYXNUYXNrKGhlLFJlKX0sb25TY2hlZHVsZVRhc2s6ZnVuY3Rpb24oZ3QsbWUsaGUsUmUpe3JldHVybiBndC5zY2hlZHVsZVRhc2soaGUsUmUpfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24oZ3QsbWUsaGUsUmUsRW4sbXIpe3JldHVybiBndC5pbnZva2VUYXNrKGhlLFJlLEVuLG1yKX0sb25DYW5jZWxUYXNrOmZ1bmN0aW9uKGd0LG1lLGhlLFJlKXtyZXR1cm4gZ3QuY2FuY2VsVGFzayhoZSxSZSl9fSxldD1mdW5jdGlvbigpe2Z1bmN0aW9uIGd0KG1lLGhlLFJlKXt0aGlzLl90YXNrQ291bnRzPXttaWNyb1Rhc2s6MCxtYWNyb1Rhc2s6MCxldmVudFRhc2s6MH0sdGhpcy56b25lPW1lLHRoaXMuX3BhcmVudERlbGVnYXRlPWhlLHRoaXMuX2ZvcmtaUz1SZSYmKFJlJiZSZS5vbkZvcms/UmU6aGUuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9UmUmJihSZS5vbkZvcms/aGU6aGUuX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3VyclpvbmU9UmUmJihSZS5vbkZvcms/dGhpcy56b25lOmhlLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPVJlJiYoUmUub25JbnRlcmNlcHQ/UmU6aGUuX2ludGVyY2VwdFpTKSx0aGlzLl9pbnRlcmNlcHREbGd0PVJlJiYoUmUub25JbnRlcmNlcHQ/aGU6aGUuX2ludGVyY2VwdERsZ3QpLHRoaXMuX2ludGVyY2VwdEN1cnJab25lPVJlJiYoUmUub25JbnRlcmNlcHQ/dGhpcy56b25lOmhlLl9pbnRlcmNlcHRDdXJyWm9uZSksdGhpcy5faW52b2tlWlM9UmUmJihSZS5vbkludm9rZT9SZTpoZS5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9UmUmJihSZS5vbkludm9rZT9oZTpoZS5faW52b2tlRGxndCksdGhpcy5faW52b2tlQ3VyclpvbmU9UmUmJihSZS5vbkludm9rZT90aGlzLnpvbmU6aGUuX2ludm9rZUN1cnJab25lKSx0aGlzLl9oYW5kbGVFcnJvclpTPVJlJiYoUmUub25IYW5kbGVFcnJvcj9SZTpoZS5faGFuZGxlRXJyb3JaUyksdGhpcy5faGFuZGxlRXJyb3JEbGd0PVJlJiYoUmUub25IYW5kbGVFcnJvcj9oZTpoZS5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPVJlJiYoUmUub25IYW5kbGVFcnJvcj90aGlzLnpvbmU6aGUuX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPVJlJiYoUmUub25TY2hlZHVsZVRhc2s/UmU6aGUuX3NjaGVkdWxlVGFza1pTKSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PVJlJiYoUmUub25TY2hlZHVsZVRhc2s/aGU6aGUuX3NjaGVkdWxlVGFza0RsZ3QpLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPVJlJiYoUmUub25TY2hlZHVsZVRhc2s/dGhpcy56b25lOmhlLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSksdGhpcy5faW52b2tlVGFza1pTPVJlJiYoUmUub25JbnZva2VUYXNrP1JlOmhlLl9pbnZva2VUYXNrWlMpLHRoaXMuX2ludm9rZVRhc2tEbGd0PVJlJiYoUmUub25JbnZva2VUYXNrP2hlOmhlLl9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPVJlJiYoUmUub25JbnZva2VUYXNrP3RoaXMuem9uZTpoZS5faW52b2tlVGFza0N1cnJab25lKSx0aGlzLl9jYW5jZWxUYXNrWlM9UmUmJihSZS5vbkNhbmNlbFRhc2s/UmU6aGUuX2NhbmNlbFRhc2taUyksdGhpcy5fY2FuY2VsVGFza0RsZ3Q9UmUmJihSZS5vbkNhbmNlbFRhc2s/aGU6aGUuX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9UmUmJihSZS5vbkNhbmNlbFRhc2s/dGhpcy56b25lOmhlLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO3ZhciBFbj1SZSYmUmUub25IYXNUYXNrOyhFbnx8aGUmJmhlLl9oYXNUYXNrWlMpJiYodGhpcy5faGFzVGFza1pTPUVuP1JlOlVlLHRoaXMuX2hhc1Rhc2tEbGd0PWhlLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9dGhpcyx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bWUsUmUub25TY2hlZHVsZVRhc2t8fCh0aGlzLl9zY2hlZHVsZVRhc2taUz1VZSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PWhlLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuem9uZSksUmUub25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPVVlLHRoaXMuX2ludm9rZVRhc2tEbGd0PWhlLHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLFJlLm9uQ2FuY2VsVGFza3x8KHRoaXMuX2NhbmNlbFRhc2taUz1VZSx0aGlzLl9jYW5jZWxUYXNrRGxndD1oZSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9dGhpcy56b25lKSl9cmV0dXJuIGd0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKG1lLGhlKXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsdGhpcy56b25lLG1lLGhlKTpuZXcgYWUobWUsaGUpfSxndC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKG1lLGhlLFJlKXtyZXR1cm4gdGhpcy5faW50ZXJjZXB0WlM/dGhpcy5faW50ZXJjZXB0WlMub25JbnRlcmNlcHQodGhpcy5faW50ZXJjZXB0RGxndCx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSxtZSxoZSxSZSk6aGV9LGd0LnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24obWUsaGUsUmUsRW4sbXIpe3JldHVybiB0aGlzLl9pbnZva2VaUz90aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LHRoaXMuX2ludm9rZUN1cnJab25lLG1lLGhlLFJlLEVuLG1yKTpoZS5hcHBseShSZSxFbil9LGd0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbihtZSxoZSl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZSxtZSxoZSl9LGd0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24obWUsaGUpe3ZhciBSZT1oZTtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJlJlLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksKFJlPXRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2NoZWR1bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsbWUsaGUpKXx8KFJlPWhlKTtlbHNlIGlmKGhlLnNjaGVkdWxlRm4paGUuc2NoZWR1bGVGbihoZSk7ZWxzZXtpZihoZS50eXBlIT14bil0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMgbWlzc2luZyBzY2hlZHVsZUZuLiIpO2ZuKGhlKX1yZXR1cm4gUmV9LGd0LnByb3RvdHlwZS5pbnZva2VUYXNrPWZ1bmN0aW9uKG1lLGhlLFJlLEVuKXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLG1lLGhlLFJlLEVuKTpoZS5jYWxsYmFjay5hcHBseShSZSxFbil9LGd0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKG1lLGhlKXt2YXIgUmU7aWYodGhpcy5fY2FuY2VsVGFza1pTKVJlPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLG1lLGhlKTtlbHNle2lmKCFoZS5jYW5jZWxGbil0aHJvdyBFcnJvcigiVGFzayBpcyBub3QgY2FuY2VsYWJsZSIpO1JlPWhlLmNhbmNlbEZuKGhlKX1yZXR1cm4gUmV9LGd0LnByb3RvdHlwZS5oYXNUYXNrPWZ1bmN0aW9uKG1lLGhlKXt0cnl7dGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSxtZSxoZSl9Y2F0Y2goUmUpe3RoaXMuaGFuZGxlRXJyb3IobWUsUmUpfX0sZ3QucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24obWUsaGUpe3ZhciBSZT10aGlzLl90YXNrQ291bnRzLEVuPVJlW21lXSxtcj1SZVttZV09RW4raGU7aWYobXI8MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC4iKTswIT1FbiYmMCE9bXJ8fHRoaXMuaGFzVGFzayh0aGlzLnpvbmUse21pY3JvVGFzazpSZS5taWNyb1Rhc2s+MCxtYWNyb1Rhc2s6UmUubWFjcm9UYXNrPjAsZXZlbnRUYXNrOlJlLmV2ZW50VGFzaz4wLGNoYW5nZTptZX0pfSxndH0oKSxxZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGd0KG1lLGhlLFJlLEVuLG1yLG9sKXtpZih0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bWUsdGhpcy5zb3VyY2U9aGUsdGhpcy5kYXRhPUVuLHRoaXMuc2NoZWR1bGVGbj1tcix0aGlzLmNhbmNlbEZuPW9sLCFSZSl0aHJvdyBuZXcgRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7dGhpcy5jYWxsYmFjaz1SZTt2YXIgbnQ9dGhpczt0aGlzLmludm9rZT1tZT09PV9pJiZFbiYmRW4udXNlRz9ndC5pbnZva2VUYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIGd0Lmludm9rZVRhc2suY2FsbChqLG50LHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIGd0Lmludm9rZVRhc2s9ZnVuY3Rpb24obWUsaGUsUmUpe21lfHwobWU9dGhpcykseHIrKzt0cnl7cmV0dXJuIG1lLnJ1bkNvdW50KyssbWUuem9uZS5ydW5UYXNrKG1lLGhlLFJlKX1maW5hbGx5ezE9PXhyJiZQbigpLHhyLS19fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3QucHJvdG90eXBlLCJ6b25lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvbmV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGd0LnByb3RvdHlwZSwic3RhdGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZ3QucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlUmVxdWVzdD1mdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb25UbyhnaSxlaSl9LGd0LnByb3RvdHlwZS5fdHJhbnNpdGlvblRvPWZ1bmN0aW9uKG1lLGhlLFJlKXtpZih0aGlzLl9zdGF0ZSE9PWhlJiZ0aGlzLl9zdGF0ZSE9PVJlKXRocm93IG5ldyBFcnJvcigiIi5jb25jYXQodGhpcy50eXBlLCIgJyIpLmNvbmNhdCh0aGlzLnNvdXJjZSwiJzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICciKS5jb25jYXQobWUsIicsIGV4cGVjdGluZyBzdGF0ZSAnIikuY29uY2F0KGhlLCInIikuY29uY2F0KFJlPyIgb3IgJyIrUmUrIiciOiIiLCIsIHdhcyAnIikuY29uY2F0KHRoaXMuX3N0YXRlLCInLiIpKTt0aGlzLl9zdGF0ZT1tZSxtZT09Z2kmJih0aGlzLl96b25lRGVsZWdhdGVzPW51bGwpfSxndC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhJiZ0eXBlb2YgdGhpcy5kYXRhLmhhbmRsZUlkPCJ1Ij90aGlzLmRhdGEuaGFuZGxlSWQudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9LGd0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTp0aGlzLnR5cGUsc3RhdGU6dGhpcy5zdGF0ZSxzb3VyY2U6dGhpcy5zb3VyY2Usem9uZTp0aGlzLnpvbmUubmFtZSxydW5Db3VudDp0aGlzLnJ1bkNvdW50fX0sZ3R9KCkscnQ9WSgic2V0VGltZW91dCIpLGR0PVkoIlByb21pc2UiKSxFdD1ZKCJ0aGVuIiksQXQ9W10sbG49ITE7ZnVuY3Rpb24geGkoZ3Qpe2lmKFlpfHxqW2R0XSYmKFlpPWpbZHRdLnJlc29sdmUoMCkpLFlpKXt2YXIgbWU9WWlbRXRdO21lfHwobWU9WWkudGhlbiksbWUuY2FsbChZaSxndCl9ZWxzZSBqW3J0XShndCwwKX1mdW5jdGlvbiBmbihndCl7MD09PXhyJiYwPT09QXQubGVuZ3RoJiZ4aShQbiksZ3QmJkF0LnB1c2goZ3QpfWZ1bmN0aW9uIFBuKCl7aWYoIWxuKXtmb3IobG49ITA7QXQubGVuZ3RoOyl7dmFyIGd0PUF0O0F0PVtdO2Zvcih2YXIgbWU9MDttZTxndC5sZW5ndGg7bWUrKyl7dmFyIGhlPWd0W21lXTt0cnl7aGUuem9uZS5ydW5UYXNrKGhlLG51bGwsbnVsbCl9Y2F0Y2goUmUpe3ByLm9uVW5oYW5kbGVkRXJyb3IoUmUpfX19cHIubWljcm90YXNrRHJhaW5Eb25lKCksbG49ITF9fXZhciBJdD17bmFtZToiTk8gWk9ORSJ9LGdpPSJub3RTY2hlZHVsZWQiLGVpPSJzY2hlZHVsaW5nIixqbj0ic2NoZWR1bGVkIixRbj0icnVubmluZyIsanQ9ImNhbmNlbGluZyIsQmk9InVua25vd24iLHhuPSJtaWNyb1Rhc2siLE9uPSJtYWNyb1Rhc2siLF9pPSJldmVudFRhc2siLExuPXt9LHByPXtzeW1ib2w6WSxjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIG9yfSxvblVuaGFuZGxlZEVycm9yOmZyLG1pY3JvdGFza0RyYWluRG9uZTpmcixzY2hlZHVsZU1pY3JvVGFzazpmbixzaG93VW5jYXVnaHRFcnJvcjpmdW5jdGlvbigpe3JldHVybiFhZVtZKCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yIildfSxwYXRjaEV2ZW50VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoT25Qcm9wZXJ0aWVzOmZyLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIGZyfSxiaW5kQXJndW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoVGhlbjpmdW5jdGlvbigpe3JldHVybiBmcn0scGF0Y2hNYWNyb1Rhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LHBhdGNoRXZlbnRQcm90b3R5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LGlzSUVPckVkZ2U6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZ2V0R2xvYmFsT2JqZWN0czpmdW5jdGlvbigpe30sT2JqZWN0RGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbigpe30sT2JqZWN0Q3JlYXRlOmZ1bmN0aW9uKCl7fSxBcnJheVNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LHdyYXBXaXRoQ3VycmVudFpvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LGZpbHRlclByb3BlcnRpZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sYXR0YWNoT3JpZ2luVG9QYXRjaGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZyfSxfcmVkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBmcn0scGF0Y2hDYWxsYmFja3M6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LG5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrOnhpfSxvcj17cGFyZW50Om51bGwsem9uZTpuZXcgYWUobnVsbCxudWxsKX0sTWE9bnVsbCx4cj0wO2Z1bmN0aW9uIGZyKCl7fUUoIlpvbmUiLCJab25lIiksai5ab25lPWFlfSh0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnNlbGZ8fGdsb2JhbCk7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxlPU9iamVjdC5nZXRQcm90b3R5cGVPZixpPU9iamVjdC5jcmVhdGUscj1BcnJheS5wcm90b3R5cGUuc2xpY2Usbz0iYWRkRXZlbnRMaXN0ZW5lciIsYT0icmVtb3ZlRXZlbnRMaXN0ZW5lciIscz1ab25lLl9fc3ltYm9sX18obyksbD1ab25lLl9fc3ltYm9sX18oYSksYz0idHJ1ZSIsZD0iZmFsc2UiLHU9Wm9uZS5fX3N5bWJvbF9fKCIiKTtmdW5jdGlvbiBwKGosZWUpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChqLGVlKX1mdW5jdGlvbiBmKGosZWUsbGUsRSx6KXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKGosZWUsbGUsRSx6KX12YXIgbT1ab25lLl9fc3ltYm9sX18seT10eXBlb2Ygd2luZG93PCJ1IixNPXk/d2luZG93OnZvaWQgMCx2PXkmJk18fCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsLHg9InJlbW92ZUF0dHJpYnV0ZSI7ZnVuY3Rpb24gUihqLGVlKXtmb3IodmFyIGxlPWoubGVuZ3RoLTE7bGU+PTA7bGUtLSkiZnVuY3Rpb24iPT10eXBlb2YgaltsZV0mJihqW2xlXT1wKGpbbGVdLGVlKyJfIitsZSkpO3JldHVybiBqfWZ1bmN0aW9uIEgoail7cmV0dXJuIWp8fCExIT09ai53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2Ygai5nZXQmJnR5cGVvZiBqLnNldD4idSIpfXZhciB0ZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsSz0hKCJudyJpbiB2KSYmdHlwZW9mIHYucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwodi5wcm9jZXNzKSxDZT0hSyYmIXRlJiYhKCF5fHwhTS5IVE1MRWxlbWVudCksWmU9dHlwZW9mIHYucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwodi5wcm9jZXNzKSYmIXRlJiYhKCF5fHwhTS5IVE1MRWxlbWVudCksSWU9e30sST1mdW5jdGlvbihqKXtpZihqPWp8fHYuZXZlbnQpe3ZhciBlZT1JZVtqLnR5cGVdO2VlfHwoZWU9SWVbai50eXBlXT1tKCJPTl9QUk9QRVJUWSIrai50eXBlKSk7dmFyIHosbGU9dGhpc3x8ai50YXJnZXR8fHYsRT1sZVtlZV07cmV0dXJuIENlJiZsZT09PU0mJiJlcnJvciI9PT1qLnR5cGU/ITA9PT0oej1FJiZFLmNhbGwodGhpcyxqLm1lc3NhZ2Usai5maWxlbmFtZSxqLmxpbmVubyxqLmNvbG5vLGouZXJyb3IpKSYmai5wcmV2ZW50RGVmYXVsdCgpOm51bGwhPSh6PUUmJkUuYXBwbHkodGhpcyxhcmd1bWVudHMpKSYmIXomJmoucHJldmVudERlZmF1bHQoKSx6fX07ZnVuY3Rpb24gcmUoaixlZSxsZSl7dmFyIEU9bihqLGVlKTtpZighRSYmbGUmJm4obGUsZWUpJiYoRT17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxFJiZFLmNvbmZpZ3VyYWJsZSl7dmFyIFk9bSgib24iK2VlKyJwYXRjaGVkIik7aWYoIWouaGFzT3duUHJvcGVydHkoWSl8fCFqW1ldKXtkZWxldGUgRS53cml0YWJsZSxkZWxldGUgRS52YWx1ZTt2YXIgSj1FLmdldCxhZT1FLnNldCxVZT1lZS5zbGljZSgyKSxldD1JZVtVZV07ZXR8fChldD1JZVtVZV09bSgiT05fUFJPUEVSVFkiK1VlKSksRS5zZXQ9ZnVuY3Rpb24ocWUpe3ZhciBydD10aGlzOyFydCYmaj09PXYmJihydD12KSxydCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBydFtldF0mJnJ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoVWUsSSksYWUmJmFlLmNhbGwocnQsbnVsbCkscnRbZXRdPXFlLCJmdW5jdGlvbiI9PXR5cGVvZiBxZSYmcnQuYWRkRXZlbnRMaXN0ZW5lcihVZSxJLCExKSl9LEUuZ2V0PWZ1bmN0aW9uKCl7dmFyIHFlPXRoaXM7aWYoIXFlJiZqPT09diYmKHFlPXYpLCFxZSlyZXR1cm4gbnVsbDt2YXIgcnQ9cWVbZXRdO2lmKHJ0KXJldHVybiBydDtpZihKKXt2YXIgZHQ9Si5jYWxsKHRoaXMpO2lmKGR0KXJldHVybiBFLnNldC5jYWxsKHRoaXMsZHQpLCJmdW5jdGlvbiI9PXR5cGVvZiBxZVt4XSYmcWUucmVtb3ZlQXR0cmlidXRlKGVlKSxkdH1yZXR1cm4gbnVsbH0sdChqLGVlLEUpLGpbWV09ITB9fX1mdW5jdGlvbiBjZShqLGVlLGxlKXtpZihlZSlmb3IodmFyIEU9MDtFPGVlLmxlbmd0aDtFKyspcmUoaiwib24iK2VlW0VdLGxlKTtlbHNle3ZhciB6PVtdO2Zvcih2YXIgWSBpbiBqKSJvbiI9PVkuc2xpY2UoMCwyKSYmei5wdXNoKFkpO2Zvcih2YXIgSj0wO0o8ei5sZW5ndGg7SisrKXJlKGoseltKXSxsZSl9fXZhciBmZT1tKCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24gX2Uoail7dmFyIGVlPXZbal07aWYoZWUpe3ZbbShqKV09ZWUsdltqXT1mdW5jdGlvbigpe3ZhciB6PVIoYXJndW1lbnRzLGopO3N3aXRjaCh6Lmxlbmd0aCl7Y2FzZSAwOnRoaXNbZmVdPW5ldyBlZTticmVhaztjYXNlIDE6dGhpc1tmZV09bmV3IGVlKHpbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW2ZlXT1uZXcgZWUoelswXSx6WzFdKTticmVhaztjYXNlIDM6dGhpc1tmZV09bmV3IGVlKHpbMF0selsxXSx6WzJdKTticmVhaztjYXNlIDQ6dGhpc1tmZV09bmV3IGVlKHpbMF0selsxXSx6WzJdLHpbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LHVlKHZbal0sZWUpO3ZhciBFLGxlPW5ldyBlZShmdW5jdGlvbigpe30pO2ZvcihFIGluIGxlKSJYTUxIdHRwUmVxdWVzdCI9PT1qJiYicmVzcG9uc2VCbG9iIj09PUV8fGZ1bmN0aW9uKHopeyJmdW5jdGlvbiI9PXR5cGVvZiBsZVt6XT92W2pdLnByb3RvdHlwZVt6XT1mdW5jdGlvbigpe3JldHVybiB0aGlzW2ZlXVt6XS5hcHBseSh0aGlzW2ZlXSxhcmd1bWVudHMpfTp0KHZbal0ucHJvdG90eXBlLHose3NldDpmdW5jdGlvbihZKXsiZnVuY3Rpb24iPT10eXBlb2YgWT8odGhpc1tmZV1bel09cChZLGorIi4iK3opLHVlKHRoaXNbZmVdW3pdLFkpKTp0aGlzW2ZlXVt6XT1ZfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tmZV1bel19fSl9KEUpO2ZvcihFIGluIGVlKSJwcm90b3R5cGUiIT09RSYmZWUuaGFzT3duUHJvcGVydHkoRSkmJih2W2pdW0VdPWVlW0VdKX19ZnVuY3Rpb24gbmUoaixlZSxsZSl7Zm9yKHZhciBFPWo7RSYmIUUuaGFzT3duUHJvcGVydHkoZWUpOylFPWUoRSk7IUUmJmpbZWVdJiYoRT1qKTt2YXIgej1tKGVlKSxZPW51bGw7aWYoRSYmKCEoWT1FW3pdKXx8IUUuaGFzT3duUHJvcGVydHkoeikpJiYoWT1FW3pdPUVbZWVdLEgoRSYmbihFLGVlKSkpKXt2YXIgYWU9bGUoWSx6LGVlKTtFW2VlXT1mdW5jdGlvbigpe3JldHVybiBhZSh0aGlzLGFyZ3VtZW50cyl9LHVlKEVbZWVdLFkpfXJldHVybiBZfWZ1bmN0aW9uIGRlKGosZWUsbGUpe3ZhciBFPW51bGw7ZnVuY3Rpb24geihZKXt2YXIgSj1ZLmRhdGE7cmV0dXJuIEouYXJnc1tKLmNiSWR4XT1mdW5jdGlvbigpe1kuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRS5hcHBseShKLnRhcmdldCxKLmFyZ3MpLFl9RT1uZShqLGVlLGZ1bmN0aW9uKFkpe3JldHVybiBmdW5jdGlvbihKLGFlKXt2YXIgVWU9bGUoSixhZSk7cmV0dXJuIFVlLmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2YgYWVbVWUuY2JJZHhdP2YoVWUubmFtZSxhZVtVZS5jYklkeF0sVWUseik6WS5hcHBseShKLGFlKX19KX1mdW5jdGlvbiB1ZShqLGVlKXtqW20oIk9yaWdpbmFsRGVsZWdhdGUiKV09ZWV9dmFyIEdlPSExLE1lPSExO2Z1bmN0aW9uIGN0KCl7aWYoR2UpcmV0dXJuIE1lO0dlPSEwO3RyeXt2YXIgaj1NLm5hdmlnYXRvci51c2VyQWdlbnQ7KC0xIT09ai5pbmRleE9mKCJNU0lFICIpfHwtMSE9PWouaW5kZXhPZigiVHJpZGVudC8iKXx8LTEhPT1qLmluZGV4T2YoIkVkZ2UvIikpJiYoTWU9ITApfWNhdGNoe31yZXR1cm4gTWV9Wm9uZS5fX2xvYWRfcGF0Y2goIlpvbmVBd2FyZVByb21pc2UiLGZ1bmN0aW9uKGosZWUsbGUpe3ZhciBFPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isej1PYmplY3QuZGVmaW5lUHJvcGVydHksSj1sZS5zeW1ib2wsYWU9W10sVWU9ITA9PT1qW0ooIkRJU0FCTEVfV1JBUFBJTkdfVU5DQVVHSFRfUFJPTUlTRV9SRUpFQ1RJT04iKV0sZXQ9SigiUHJvbWlzZSIpLHFlPUooInRoZW4iKSxydD0iX19jcmVhdGlvblRyYWNlX18iO2xlLm9uVW5oYW5kbGVkRXJyb3I9ZnVuY3Rpb24obnQpe2lmKGxlLnNob3dVbmNhdWdodEVycm9yKCkpe3ZhciBPdD1udCYmbnQucmVqZWN0aW9uO090P2NvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLE90IGluc3RhbmNlb2YgRXJyb3I/T3QubWVzc2FnZTpPdCwiOyBab25lOiIsbnQuem9uZS5uYW1lLCI7IFRhc2s6IixudC50YXNrJiZudC50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLE90LE90IGluc3RhbmNlb2YgRXJyb3I/T3Quc3RhY2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKG50KX19LGxlLm1pY3JvdGFza0RyYWluRG9uZT1mdW5jdGlvbigpe2Zvcih2YXIgbnQ9ZnVuY3Rpb24oKXt2YXIgT3Q9YWUuc2hpZnQoKTt0cnl7T3Quem9uZS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7dGhyb3cgT3QudGhyb3dPcmlnaW5hbD9PdC5yZWplY3Rpb246T3R9KX1jYXRjaCh4dCl7IWZ1bmN0aW9uKG50KXtsZS5vblVuaGFuZGxlZEVycm9yKG50KTt0cnl7dmFyIE90PWVlW2R0XTsiZnVuY3Rpb24iPT10eXBlb2YgT3QmJk90LmNhbGwodGhpcyxudCl9Y2F0Y2h7fX0oeHQpfX07YWUubGVuZ3RoOyludCgpfTt2YXIgZHQ9SigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKTtmdW5jdGlvbiBBdChudCl7cmV0dXJuIG50JiZudC50aGVufWZ1bmN0aW9uIGxuKG50KXtyZXR1cm4gbnR9ZnVuY3Rpb24gWWkobnQpe3JldHVybiBoZS5yZWplY3QobnQpfXZhciB4aT1KKCJzdGF0ZSIpLGZuPUooInZhbHVlIiksUG49SigiZmluYWxseSIpLEl0PUooInBhcmVudFByb21pc2VWYWx1ZSIpLGdpPUooInBhcmVudFByb21pc2VTdGF0ZSIpLGVpPSJQcm9taXNlLnRoZW4iLGpuPW51bGwsUW49ITAsanQ9ITEsQmk9MDtmdW5jdGlvbiB4bihudCxPdCl7cmV0dXJuIGZ1bmN0aW9uKHh0KXt0cnl7cHIobnQsT3QseHQpfWNhdGNoKEplKXtwcihudCwhMSxKZSl9fX12YXIgT249ZnVuY3Rpb24oKXt2YXIgbnQ9ITE7cmV0dXJuIGZ1bmN0aW9uKHh0KXtyZXR1cm4gZnVuY3Rpb24oKXtudHx8KG50PSEwLHh0LmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sX2k9IlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiLExuPUooImN1cnJlbnRUYXNrVHJhY2UiKTtmdW5jdGlvbiBwcihudCxPdCx4dCl7dmFyIEplPU9uKCk7aWYobnQ9PT14dCl0aHJvdyBuZXcgVHlwZUVycm9yKF9pKTtpZihudFt4aV09PT1qbil7dmFyICR0PW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIHh0fHwiZnVuY3Rpb24iPT10eXBlb2YgeHQpJiYoJHQ9eHQmJnh0LnRoZW4pfWNhdGNoKHJpKXtyZXR1cm4gSmUoZnVuY3Rpb24oKXtwcihudCwhMSxyaSl9KSgpLG50fWlmKE90IT09anQmJnh0IGluc3RhbmNlb2YgaGUmJnh0Lmhhc093blByb3BlcnR5KHhpKSYmeHQuaGFzT3duUHJvcGVydHkoZm4pJiZ4dFt4aV0hPT1qbilNYSh4dCkscHIobnQseHRbeGldLHh0W2ZuXSk7ZWxzZSBpZihPdCE9PWp0JiYiZnVuY3Rpb24iPT10eXBlb2YgJHQpdHJ5eyR0LmNhbGwoeHQsSmUoeG4obnQsT3QpKSxKZSh4bihudCwhMSkpKX1jYXRjaChyaSl7SmUoZnVuY3Rpb24oKXtwcihudCwhMSxyaSl9KSgpfWVsc2V7bnRbeGldPU90O3ZhciB6bj1udFtmbl07aWYobnRbZm5dPXh0LG50W1BuXT09PVBuJiZPdD09PVFuJiYobnRbeGldPW50W2dpXSxudFtmbl09bnRbSXRdKSxPdD09PWp0JiZ4dCBpbnN0YW5jZW9mIEVycm9yKXt2YXIgUm49ZWUuY3VycmVudFRhc2smJmVlLmN1cnJlbnRUYXNrLmRhdGEmJmVlLmN1cnJlbnRUYXNrLmRhdGFbcnRdO1JuJiZ6KHh0LExuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpSbn0pfWZvcih2YXIgdGk9MDt0aTx6bi5sZW5ndGg7KXhyKG50LHpuW3RpKytdLHpuW3RpKytdLHpuW3RpKytdLHpuW3RpKytdKTtpZigwPT16bi5sZW5ndGgmJk90PT1qdCl7bnRbeGldPUJpO3ZhciBuaT14dDt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrZnVuY3Rpb24obnQpe3JldHVybiBudCYmbnQudG9TdHJpbmc9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPyhudC5jb25zdHJ1Y3RvciYmbnQuY29uc3RydWN0b3IubmFtZXx8IiIpKyI6ICIrSlNPTi5zdHJpbmdpZnkobnQpOm50P250LnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG50KX0oeHQpKyh4dCYmeHQuc3RhY2s/IlxuIit4dC5zdGFjazoiIikpfWNhdGNoKHJpKXtuaT1yaX1VZSYmKG5pLnRocm93T3JpZ2luYWw9ITApLG5pLnJlamVjdGlvbj14dCxuaS5wcm9taXNlPW50LG5pLnpvbmU9ZWUuY3VycmVudCxuaS50YXNrPWVlLmN1cnJlbnRUYXNrLGFlLnB1c2gobmkpLGxlLnNjaGVkdWxlTWljcm9UYXNrKCl9fX1yZXR1cm4gbnR9dmFyIG9yPUooInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24gTWEobnQpe2lmKG50W3hpXT09PUJpKXt0cnl7dmFyIE90PWVlW29yXTtPdCYmImZ1bmN0aW9uIj09dHlwZW9mIE90JiZPdC5jYWxsKHRoaXMse3JlamVjdGlvbjpudFtmbl0scHJvbWlzZTpudH0pfWNhdGNoe31udFt4aV09anQ7Zm9yKHZhciB4dD0wO3h0PGFlLmxlbmd0aDt4dCsrKW50PT09YWVbeHRdLnByb21pc2UmJmFlLnNwbGljZSh4dCwxKX19ZnVuY3Rpb24geHIobnQsT3QseHQsSmUsJHQpe01hKG50KTt2YXIgem49bnRbeGldLFJuPXpuPyJmdW5jdGlvbiI9PXR5cGVvZiBKZT9KZTpsbjoiZnVuY3Rpb24iPT10eXBlb2YgJHQ/JHQ6WWk7T3Quc2NoZWR1bGVNaWNyb1Rhc2soZWksZnVuY3Rpb24oKXt0cnl7dmFyIHRpPW50W2ZuXSxuaT0hIXh0JiZQbj09PXh0W1BuXTtuaSYmKHh0W0l0XT10aSx4dFtnaV09em4pO3ZhciByaT1PdC5ydW4oUm4sdm9pZCAwLG5pJiZSbiE9PVlpJiZSbiE9PWxuP1tdOlt0aV0pO3ByKHh0LCEwLHJpKX1jYXRjaChDaSl7cHIoeHQsITEsQ2kpfX0seHQpfXZhciBndD1mdW5jdGlvbigpe30sbWU9ai5BZ2dyZWdhdGVFcnJvcixoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG50KE90KXt2YXIgeHQ9dGhpcztpZighKHh0IGluc3RhbmNlb2YgbnQpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7eHRbeGldPWpuLHh0W2ZuXT1bXTt0cnl7dmFyIEplPU9uKCk7T3QmJk90KEplKHhuKHh0LFFuKSksSmUoeG4oeHQsanQpKSl9Y2F0Y2goJHQpe3ByKHh0LCExLCR0KX19cmV0dXJuIG50LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9LG50LnJlc29sdmU9ZnVuY3Rpb24oT3Qpe3JldHVybiBwcihuZXcgdGhpcyhudWxsKSxRbixPdCl9LG50LnJlamVjdD1mdW5jdGlvbihPdCl7cmV0dXJuIHByKG5ldyB0aGlzKG51bGwpLGp0LE90KX0sbnQuYW55PWZ1bmN0aW9uKE90KXtpZighT3R8fCJmdW5jdGlvbiIhPXR5cGVvZiBPdFtTeW1ib2wuaXRlcmF0b3JdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgbWUoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciB4dD1bXSxKZT0wO3RyeXtmb3IodmFyICR0PTAsem49T3Q7JHQ8em4ubGVuZ3RoOyR0KyspSmUrKyx4dC5wdXNoKG50LnJlc29sdmUoem5bJHRdKSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBtZShbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUplKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgbWUoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciB0aT0hMSxuaT1bXTtyZXR1cm4gbmV3IG50KGZ1bmN0aW9uKHJpLENpKXtmb3IodmFyIGhyPTA7aHI8eHQubGVuZ3RoO2hyKyspeHRbaHJdLnRoZW4oZnVuY3Rpb24oa28pe3RpfHwodGk9ITAscmkoa28pKX0sZnVuY3Rpb24oa28pe25pLnB1c2goa28pLDA9PS0tSmUmJih0aT0hMCxDaShuZXcgbWUobmksIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpKX0pfSl9LG50LnJhY2U9ZnVuY3Rpb24oT3Qpe3ZhciB4dCxKZSwkdD1uZXcgdGhpcyhmdW5jdGlvbihDaSxocil7eHQ9Q2ksSmU9aHJ9KTtmdW5jdGlvbiB6bihDaSl7eHQoQ2kpfWZ1bmN0aW9uIFJuKENpKXtKZShDaSl9Zm9yKHZhciB0aT0wLG5pPU90O3RpPG5pLmxlbmd0aDt0aSsrKXt2YXIgcmk9bmlbdGldO0F0KHJpKXx8KHJpPXRoaXMucmVzb2x2ZShyaSkpLHJpLnRoZW4oem4sUm4pfXJldHVybiAkdH0sbnQuYWxsPWZ1bmN0aW9uKE90KXtyZXR1cm4gbnQuYWxsV2l0aENhbGxiYWNrKE90KX0sbnQuYWxsU2V0dGxlZD1mdW5jdGlvbihPdCl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgbnQ/dGhpczpudCkuYWxsV2l0aENhbGxiYWNrKE90LHt0aGVuQ2FsbGJhY2s6ZnVuY3Rpb24oSmUpe3JldHVybntzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6SmV9fSxlcnJvckNhbGxiYWNrOmZ1bmN0aW9uKEplKXtyZXR1cm57c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOkplfX19KX0sbnQuYWxsV2l0aENhbGxiYWNrPWZ1bmN0aW9uKE90LHh0KXtmb3IodmFyIEplLCR0LHpuPW5ldyB0aGlzKGZ1bmN0aW9uKGVvLHhvKXtKZT1lbywkdD14b30pLFJuPTIsdGk9MCxuaT1bXSxyaT1mdW5jdGlvbihlbyl7QXQoZW8pfHwoZW89Q2kucmVzb2x2ZShlbykpO3ZhciB4bz10aTt0cnl7ZW8udGhlbihmdW5jdGlvbihHcil7bmlbeG9dPXh0P3h0LnRoZW5DYWxsYmFjayhHcik6R3IsMD09LS1SbiYmSmUobmkpfSxmdW5jdGlvbihHcil7eHQ/KG5pW3hvXT14dC5lcnJvckNhbGxiYWNrKEdyKSwwPT0tLVJuJiZKZShuaSkpOiR0KEdyKX0pfWNhdGNoKEdyKXskdChHcil9Um4rKyx0aSsrfSxDaT10aGlzLGhyPTAsa289T3Q7aHI8a28ubGVuZ3RoO2hyKyspcmkoa29baHJdKTtyZXR1cm4gMD09KFJuLT0yKSYmSmUobmkpLHpufSxPYmplY3QuZGVmaW5lUHJvcGVydHkobnQucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlByb21pc2UifSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShudC5wcm90b3R5cGUsU3ltYm9sLnNwZWNpZXMse2dldDpmdW5jdGlvbigpe3JldHVybiBudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxudC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihPdCx4dCl7dmFyIEplLCR0PW51bGw9PT0oSmU9dGhpcy5jb25zdHJ1Y3Rvcil8fHZvaWQgMD09PUplP3ZvaWQgMDpKZVtTeW1ib2wuc3BlY2llc107KCEkdHx8ImZ1bmN0aW9uIiE9dHlwZW9mICR0KSYmKCR0PXRoaXMuY29uc3RydWN0b3J8fG50KTt2YXIgem49bmV3ICR0KGd0KSxSbj1lZS5jdXJyZW50O3JldHVybiB0aGlzW3hpXT09am4/dGhpc1tmbl0ucHVzaChSbix6bixPdCx4dCk6eHIodGhpcyxSbix6bixPdCx4dCksem59LG50LnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihPdCl7cmV0dXJuIHRoaXMudGhlbihudWxsLE90KX0sbnQucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oT3Qpe3ZhciB4dCxKZT1udWxsPT09KHh0PXRoaXMuY29uc3RydWN0b3IpfHx2b2lkIDA9PT14dD92b2lkIDA6eHRbU3ltYm9sLnNwZWNpZXNdOyghSmV8fCJmdW5jdGlvbiIhPXR5cGVvZiBKZSkmJihKZT1udCk7dmFyICR0PW5ldyBKZShndCk7JHRbUG5dPVBuO3ZhciB6bj1lZS5jdXJyZW50O3JldHVybiB0aGlzW3hpXT09am4/dGhpc1tmbl0ucHVzaCh6biwkdCxPdCxPdCk6eHIodGhpcyx6biwkdCxPdCxPdCksJHR9LG50fSgpO2hlLnJlc29sdmU9aGUucmVzb2x2ZSxoZS5yZWplY3Q9aGUucmVqZWN0LGhlLnJhY2U9aGUucmFjZSxoZS5hbGw9aGUuYWxsO3ZhciBSZT1qW2V0XT1qLlByb21pc2U7ai5Qcm9taXNlPWhlO3ZhciBFbj1KKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIG1yKG50KXt2YXIgT3Q9bnQucHJvdG90eXBlLHh0PUUoT3QsInRoZW4iKTtpZigheHR8fCExIT09eHQud3JpdGFibGUmJnh0LmNvbmZpZ3VyYWJsZSl7dmFyIEplPU90LnRoZW47T3RbcWVdPUplLG50LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKCR0LHpuKXt2YXIgUm49dGhpcztyZXR1cm4gbmV3IGhlKGZ1bmN0aW9uKG5pLHJpKXtKZS5jYWxsKFJuLG5pLHJpKX0pLnRoZW4oJHQsem4pfSxudFtFbl09ITB9fXJldHVybiBsZS5wYXRjaFRoZW49bXIsUmUmJihtcihSZSksbmUoaiwiZmV0Y2giLGZ1bmN0aW9uKG50KXtyZXR1cm4gZnVuY3Rpb24obnQpe3JldHVybiBmdW5jdGlvbihPdCx4dCl7dmFyIEplPW50LmFwcGx5KE90LHh0KTtpZihKZSBpbnN0YW5jZW9mIGhlKXJldHVybiBKZTt2YXIgJHQ9SmUuY29uc3RydWN0b3I7cmV0dXJuICR0W0VuXXx8bXIoJHQpLEplfX0obnQpfSkpLFByb21pc2VbZWUuX19zeW1ib2xfXygidW5jYXVnaHRQcm9taXNlRXJyb3JzIildPWFlLGhlfSksWm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIixmdW5jdGlvbihqKXt2YXIgZWU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLGxlPW0oIk9yaWdpbmFsRGVsZWdhdGUiKSxFPW0oIlByb21pc2UiKSx6PW0oIkVycm9yIiksWT1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXt2YXIgZXQ9dGhpc1tsZV07aWYoZXQpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV0P2VlLmNhbGwoZXQpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldCk7aWYodGhpcz09PVByb21pc2Upe3ZhciBxZT1qW0VdO2lmKHFlKXJldHVybiBlZS5jYWxsKHFlKX1pZih0aGlzPT09RXJyb3Ipe3ZhciBydD1qW3pdO2lmKHJ0KXJldHVybiBlZS5jYWxsKHJ0KX19cmV0dXJuIGVlLmNhbGwodGhpcyl9O1lbbGVdPWVlLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1ZO3ZhciBKPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBQcm9taXNlJiZ0aGlzIGluc3RhbmNlb2YgUHJvbWlzZT8iW29iamVjdCBQcm9taXNlXSI6Si5jYWxsKHRoaXMpfX0pO3ZhciB3dD0hMTtpZih0eXBlb2Ygd2luZG93PCJ1Iil0cnl7dmFyIGZ0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3d0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixmdCxmdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLGZ0LGZ0KX1jYXRjaHt3dD0hMX12YXIgaWksTGksTmksWixOLE9lPXt1c2VHOiEwfSxBbj17fSxTdD17fSxybj1uZXcgUmVnRXhwKCJeIit1KyIoXFx3KykodHJ1ZXxmYWxzZSkkIiksdmU9bSgicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gaHQoaixlZSl7dmFyIGxlPShlZT9lZShqKTpqKStkLEU9KGVlP2VlKGopOmopK2Msej11K2xlLFk9dStFO0FuW2pdPXt9LEFuW2pdW2RdPXosQW5bal1bY109WX1mdW5jdGlvbiBtdChqLGVlLGxlLEUpe3ZhciB6PUUmJkUuYWRkfHxvLFk9RSYmRS5ybXx8YSxKPUUmJkUubGlzdGVuZXJzfHwiZXZlbnRMaXN0ZW5lcnMiLGFlPUUmJkUucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLFVlPW0oeiksZXQ9Ii4iK3orIjoiLHFlPSJwcmVwZW5kTGlzdGVuZXIiLHJ0PSIuIitxZSsiOiIsZHQ9ZnVuY3Rpb24oUG4sSXQsZ2kpe2lmKCFQbi5pc1JlbW92ZWQpe3ZhciBqbixlaT1Qbi5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIGVpJiZlaS5oYW5kbGVFdmVudCYmKFBuLmNhbGxiYWNrPWZ1bmN0aW9uKEJpKXtyZXR1cm4gZWkuaGFuZGxlRXZlbnQoQmkpfSxQbi5vcmlnaW5hbERlbGVnYXRlPWVpKTt0cnl7UG4uaW52b2tlKFBuLEl0LFtnaV0pfWNhdGNoKEJpKXtqbj1CaX12YXIgUW49UG4ub3B0aW9ucztyZXR1cm4gUW4mJiJvYmplY3QiPT10eXBlb2YgUW4mJlFuLm9uY2UmJkl0W1ldLmNhbGwoSXQsZ2kudHlwZSxQbi5vcmlnaW5hbERlbGVnYXRlP1BuLm9yaWdpbmFsRGVsZWdhdGU6UG4uY2FsbGJhY2ssUW4pLGpufX07ZnVuY3Rpb24gRXQoUG4sSXQsZ2kpe2lmKEl0PUl0fHxqLmV2ZW50KXt2YXIgZWk9UG58fEl0LnRhcmdldHx8aixqbj1laVtBbltJdC50eXBlXVtnaT9jOmRdXTtpZihqbil7dmFyIFFuPVtdO2lmKDE9PT1qbi5sZW5ndGgpKGp0PWR0KGpuWzBdLGVpLEl0KSkmJlFuLnB1c2goanQpO2Vsc2UgZm9yKHZhciBCaT1qbi5zbGljZSgpLHhuPTA7eG48QmkubGVuZ3RoJiYoIUl0fHwhMCE9PUl0W3ZlXSk7eG4rKyl7dmFyIGp0OyhqdD1kdChCaVt4bl0sZWksSXQpKSYmUW4ucHVzaChqdCl9aWYoMT09PVFuLmxlbmd0aCl0aHJvdyBRblswXTt2YXIgT249ZnVuY3Rpb24oX2kpe3ZhciBMbj1RbltfaV07ZWUubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soZnVuY3Rpb24oKXt0aHJvdyBMbn0pfTtmb3IoeG49MDt4bjxRbi5sZW5ndGg7eG4rKylPbih4bil9fX12YXIgQXQ9ZnVuY3Rpb24oUG4pe3JldHVybiBFdCh0aGlzLFBuLCExKX0sbG49ZnVuY3Rpb24oUG4pe3JldHVybiBFdCh0aGlzLFBuLCEwKX07ZnVuY3Rpb24gWWkoUG4sSXQpe2lmKCFQbilyZXR1cm4hMTt2YXIgZ2k9ITA7SXQmJnZvaWQgMCE9PUl0LnVzZUcmJihnaT1JdC51c2VHKTt2YXIgZWk9SXQmJkl0LnZoLGpuPSEwO0l0JiZ2b2lkIDAhPT1JdC5jaGtEdXAmJihqbj1JdC5jaGtEdXApO3ZhciBRbj0hMTtJdCYmdm9pZCAwIT09SXQucnQmJihRbj1JdC5ydCk7Zm9yKHZhciBqdD1QbjtqdCYmIWp0Lmhhc093blByb3BlcnR5KHopOylqdD1lKGp0KTtpZighanQmJlBuW3pdJiYoanQ9UG4pLCFqdHx8anRbVWVdKXJldHVybiExO3ZhciBvcixCaT1JdCYmSXQuZXZlbnROYW1lVG9TdHJpbmcseG49e30sT249anRbVWVdPWp0W3pdLF9pPWp0W20oWSldPWp0W1ldLExuPWp0W20oSildPWp0W0pdLHByPWp0W20oYWUpXT1qdFthZV07SXQmJkl0LnByZXBlbmQmJihvcj1qdFttKEl0LnByZXBlbmQpXT1qdFtJdC5wcmVwZW5kXSk7dmFyIFJlPWdpP2Z1bmN0aW9uKEplKXtpZigheG4uaXNFeGlzdGluZylyZXR1cm4gT24uY2FsbCh4bi50YXJnZXQseG4uZXZlbnROYW1lLHhuLmNhcHR1cmU/bG46QXQseG4ub3B0aW9ucyl9OmZ1bmN0aW9uKEplKXtyZXR1cm4gT24uY2FsbCh4bi50YXJnZXQseG4uZXZlbnROYW1lLEplLmludm9rZSx4bi5vcHRpb25zKX0sRW49Z2k/ZnVuY3Rpb24oSmUpe2lmKCFKZS5pc1JlbW92ZWQpe3ZhciAkdD1BbltKZS5ldmVudE5hbWVdLHpuPXZvaWQgMDskdCYmKHpuPSR0W0plLmNhcHR1cmU/YzpkXSk7dmFyIFJuPXpuJiZKZS50YXJnZXRbem5dO2lmKFJuKWZvcih2YXIgdGk9MDt0aTxSbi5sZW5ndGg7dGkrKylpZihSblt0aV09PT1KZSl7Um4uc3BsaWNlKHRpLDEpLEplLmlzUmVtb3ZlZD0hMCwwPT09Um4ubGVuZ3RoJiYoSmUuYWxsUmVtb3ZlZD0hMCxKZS50YXJnZXRbem5dPW51bGwpO2JyZWFrfX1pZihKZS5hbGxSZW1vdmVkKXJldHVybiBfaS5jYWxsKEplLnRhcmdldCxKZS5ldmVudE5hbWUsSmUuY2FwdHVyZT9sbjpBdCxKZS5vcHRpb25zKX06ZnVuY3Rpb24oSmUpe3JldHVybiBfaS5jYWxsKEplLnRhcmdldCxKZS5ldmVudE5hbWUsSmUuaW52b2tlLEplLm9wdGlvbnMpfSxvbD1JdCYmSXQuZGlmZj9JdC5kaWZmOmZ1bmN0aW9uKEplLCR0KXt2YXIgem49dHlwZW9mICR0O3JldHVybiJmdW5jdGlvbiI9PT16biYmSmUuY2FsbGJhY2s9PT0kdHx8Im9iamVjdCI9PT16biYmSmUub3JpZ2luYWxEZWxlZ2F0ZT09PSR0fSxudD1ab25lW20oIlVOUEFUQ0hFRF9FVkVOVFMiKV0sT3Q9alttKCJQQVNTSVZFX0VWRU5UUyIpXSx4dD1mdW5jdGlvbihKZSwkdCx6bixSbix0aSxuaSl7cmV0dXJuIHZvaWQgMD09PXRpJiYodGk9ITEpLHZvaWQgMD09PW5pJiYobmk9ITEpLGZ1bmN0aW9uKCl7dmFyIHJpPXRoaXN8fGosQ2k9YXJndW1lbnRzWzBdO0l0JiZJdC50cmFuc2ZlckV2ZW50TmFtZSYmKENpPUl0LnRyYW5zZmVyRXZlbnROYW1lKENpKSk7dmFyIGhyPWFyZ3VtZW50c1sxXTtpZighaHIpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihLJiYidW5jYXVnaHRFeGNlcHRpb24iPT09Q2kpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIga289ITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGhyKXtpZighaHIuaGFuZGxlRXZlbnQpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtrbz0hMH1pZighZWl8fGVpKEplLGhyLHJpLGFyZ3VtZW50cykpe3ZhciBYYz13dCYmISFPdCYmLTEhPT1PdC5pbmRleE9mKENpKSxlbz1mdW5jdGlvbihKZSwkdCl7cmV0dXJuIXd0JiYib2JqZWN0Ij09dHlwZW9mIEplJiZKZT8hIUplLmNhcHR1cmU6d3QmJiR0PyJib29sZWFuIj09dHlwZW9mIEplP3tjYXB0dXJlOkplLHBhc3NpdmU6ITB9OkplPyJvYmplY3QiPT10eXBlb2YgSmUmJiExIT09SmUucGFzc2l2ZT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSmUpLHtwYXNzaXZlOiEwfSk6SmU6e3Bhc3NpdmU6ITB9OkplfShhcmd1bWVudHNbMl0sWGMpO2lmKG50KWZvcih2YXIgeG89MDt4bzxudC5sZW5ndGg7eG8rKylpZihDaT09PW50W3hvXSlyZXR1cm4gWGM/SmUuY2FsbChyaSxDaSxocixlbyk6SmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBHcj0hIWVvJiYoImJvb2xlYW4iPT10eXBlb2YgZW98fGVvLmNhcHR1cmUpLEZtPSEoIWVvfHwib2JqZWN0IiE9dHlwZW9mIGVvKSYmZW8ub25jZSxZaWU9Wm9uZS5jdXJyZW50LFZBPUFuW0NpXTtWQXx8KGh0KENpLEJpKSxWQT1BbltDaV0pO3ZhciBtND1WQVtHcj9jOmRdLExtPXJpW200XSxoND0hMTtpZihMbSl7aWYoaDQ9ITAsam4pZm9yKHhvPTA7eG88TG0ubGVuZ3RoO3hvKyspaWYob2woTG1beG9dLGhyKSlyZXR1cm59ZWxzZSBMbT1yaVttNF09W107dmFyIGFDLGc0PXJpLmNvbnN0cnVjdG9yLm5hbWUsXzQ9U3RbZzRdO180JiYoYUM9XzRbQ2ldKSxhQ3x8KGFDPWc0KyR0KyhCaT9CaShDaSk6Q2kpKSx4bi5vcHRpb25zPWVvLEZtJiYoeG4ub3B0aW9ucy5vbmNlPSExKSx4bi50YXJnZXQ9cmkseG4uY2FwdHVyZT1Hcix4bi5ldmVudE5hbWU9Q2kseG4uaXNFeGlzdGluZz1oNDt2YXIgT189Z2k/T2U6dm9pZCAwO09fJiYoT18udGFza0RhdGE9eG4pO3ZhciBaZD1ZaWUuc2NoZWR1bGVFdmVudFRhc2soYUMsaHIsT18sem4sUm4pO2lmKHhuLnRhcmdldD1udWxsLE9fJiYoT18udGFza0RhdGE9bnVsbCksRm0mJihlby5vbmNlPSEwKSwhd3QmJiJib29sZWFuIj09dHlwZW9mIFpkLm9wdGlvbnN8fChaZC5vcHRpb25zPWVvKSxaZC50YXJnZXQ9cmksWmQuY2FwdHVyZT1HcixaZC5ldmVudE5hbWU9Q2ksa28mJihaZC5vcmlnaW5hbERlbGVnYXRlPWhyKSxuaT9MbS51bnNoaWZ0KFpkKTpMbS5wdXNoKFpkKSx0aSlyZXR1cm4gcml9fX07cmV0dXJuIGp0W3pdPXh0KE9uLGV0LFJlLEVuLFFuKSxvciYmKGp0W3FlXT14dChvcixydCxmdW5jdGlvbihKZSl7cmV0dXJuIG9yLmNhbGwoeG4udGFyZ2V0LHhuLmV2ZW50TmFtZSxKZS5pbnZva2UseG4ub3B0aW9ucyl9LEVuLFFuLCEwKSksanRbWV09ZnVuY3Rpb24oKXt2YXIgSmU9dGhpc3x8aiwkdD1hcmd1bWVudHNbMF07SXQmJkl0LnRyYW5zZmVyRXZlbnROYW1lJiYoJHQ9SXQudHJhbnNmZXJFdmVudE5hbWUoJHQpKTt2YXIgem49YXJndW1lbnRzWzJdLFJuPSEhem4mJigiYm9vbGVhbiI9PXR5cGVvZiB6bnx8em4uY2FwdHVyZSksdGk9YXJndW1lbnRzWzFdO2lmKCF0aSlyZXR1cm4gX2kuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFlaXx8ZWkoX2ksdGksSmUsYXJndW1lbnRzKSl7dmFyIHJpLG5pPUFuWyR0XTtuaSYmKHJpPW5pW1JuP2M6ZF0pO3ZhciBDaT1yaSYmSmVbcmldO2lmKENpKWZvcih2YXIgaHI9MDtocjxDaS5sZW5ndGg7aHIrKyl7dmFyIGtvPUNpW2hyXTtpZihvbChrbyx0aSkpcmV0dXJuIENpLnNwbGljZShociwxKSxrby5pc1JlbW92ZWQ9ITAsMD09PUNpLmxlbmd0aCYmKGtvLmFsbFJlbW92ZWQ9ITAsSmVbcmldPW51bGwsInN0cmluZyI9PXR5cGVvZiAkdCkmJihKZVt1KyJPTl9QUk9QRVJUWSIrJHRdPW51bGwpLGtvLnpvbmUuY2FuY2VsVGFzayhrbyksUW4/SmU6dm9pZCAwfXJldHVybiBfaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxqdFtKXT1mdW5jdGlvbigpe3ZhciBKZT10aGlzfHxqLCR0PWFyZ3VtZW50c1swXTtJdCYmSXQudHJhbnNmZXJFdmVudE5hbWUmJigkdD1JdC50cmFuc2ZlckV2ZW50TmFtZSgkdCkpO2Zvcih2YXIgem49W10sUm49b2UoSmUsQmk/QmkoJHQpOiR0KSx0aT0wO3RpPFJuLmxlbmd0aDt0aSsrKXt2YXIgbmk9Um5bdGldO3puLnB1c2gobmkub3JpZ2luYWxEZWxlZ2F0ZT9uaS5vcmlnaW5hbERlbGVnYXRlOm5pLmNhbGxiYWNrKX1yZXR1cm4gem59LGp0W2FlXT1mdW5jdGlvbigpe3ZhciBKZT10aGlzfHxqLCR0PWFyZ3VtZW50c1swXTtpZigkdCl7SXQmJkl0LnRyYW5zZmVyRXZlbnROYW1lJiYoJHQ9SXQudHJhbnNmZXJFdmVudE5hbWUoJHQpKTt2YXIgQ2k9QW5bJHRdO2lmKENpKXt2YXIgWGM9SmVbQ2lbZF1dLGVvPUplW0NpW2NdXTtpZihYYylmb3IodmFyIHhvPVhjLnNsaWNlKCksUm49MDtSbjx4by5sZW5ndGg7Um4rKyl0aGlzW1ldLmNhbGwodGhpcywkdCwoR3I9eG9bUm5dKS5vcmlnaW5hbERlbGVnYXRlP0dyLm9yaWdpbmFsRGVsZWdhdGU6R3IuY2FsbGJhY2ssR3Iub3B0aW9ucyk7aWYoZW8pZm9yKHhvPWVvLnNsaWNlKCksUm49MDtSbjx4by5sZW5ndGg7Um4rKyl7dmFyIEdyO3RoaXNbWV0uY2FsbCh0aGlzLCR0LChHcj14b1tSbl0pLm9yaWdpbmFsRGVsZWdhdGU/R3Iub3JpZ2luYWxEZWxlZ2F0ZTpHci5jYWxsYmFjayxHci5vcHRpb25zKX19fWVsc2V7dmFyIHpuPU9iamVjdC5rZXlzKEplKTtmb3IoUm49MDtSbjx6bi5sZW5ndGg7Um4rKyl7dmFyIG5pPXJuLmV4ZWMoem5bUm5dKSxyaT1uaSYmbmlbMV07cmkmJiJyZW1vdmVMaXN0ZW5lciIhPT1yaSYmdGhpc1thZV0uY2FsbCh0aGlzLHJpKX10aGlzW2FlXS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoUW4pcmV0dXJuIHRoaXN9LHVlKGp0W3pdLE9uKSx1ZShqdFtZXSxfaSkscHImJnVlKGp0W2FlXSxwciksTG4mJnVlKGp0W0pdLExuKSwhMH1mb3IodmFyIHhpPVtdLGZuPTA7Zm48bGUubGVuZ3RoO2ZuKyspeGlbZm5dPVlpKGxlW2ZuXSxFKTtyZXR1cm4geGl9ZnVuY3Rpb24gb2UoaixlZSl7aWYoIWVlKXt2YXIgbGU9W107Zm9yKHZhciBFIGluIGope3ZhciB6PXJuLmV4ZWMoRSksWT16JiZ6WzFdO2lmKFkmJighZWV8fFk9PT1lZSkpe3ZhciBKPWpbRV07aWYoSilmb3IodmFyIGFlPTA7YWU8Si5sZW5ndGg7YWUrKylsZS5wdXNoKEpbYWVdKX19cmV0dXJuIGxlfXZhciBVZT1BbltlZV07VWV8fChodChlZSksVWU9QW5bZWVdKTt2YXIgZXQ9altVZVtkXV0scWU9altVZVtjXV07cmV0dXJuIGV0P3FlP2V0LmNvbmNhdChxZSk6ZXQuc2xpY2UoKTpxZT9xZS5zbGljZSgpOltdfWZ1bmN0aW9uIHN0KGosZWUpe3ZhciBsZT1qLkV2ZW50O2xlJiZsZS5wcm90b3R5cGUmJmVlLnBhdGNoTWV0aG9kKGxlLnByb3RvdHlwZSwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIixmdW5jdGlvbihFKXtyZXR1cm4gZnVuY3Rpb24oeixZKXt6W3ZlXT0hMCxFJiZFLmFwcGx5KHosWSl9fSl9ZnVuY3Rpb24gWGUoaixlZSxsZSxFLHope3ZhciBZPVpvbmUuX19zeW1ib2xfXyhFKTtpZighZWVbWV0pe3ZhciBKPWVlW1ldPWVlW0VdO2VlW0VdPWZ1bmN0aW9uKGFlLFVlLGV0KXtyZXR1cm4gVWUmJlVlLnByb3RvdHlwZSYmei5mb3JFYWNoKGZ1bmN0aW9uKHFlKXt2YXIgcnQ9IiIuY29uY2F0KGxlLCIuIikuY29uY2F0KEUsIjo6IikrcWUsZHQ9VWUucHJvdG90eXBlO3RyeXtpZihkdC5oYXNPd25Qcm9wZXJ0eShxZSkpe3ZhciBFdD1qLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihkdCxxZSk7RXQmJkV0LnZhbHVlPyhFdC52YWx1ZT1qLndyYXBXaXRoQ3VycmVudFpvbmUoRXQudmFsdWUscnQpLGouX3JlZGVmaW5lUHJvcGVydHkoVWUucHJvdG90eXBlLHFlLEV0KSk6ZHRbcWVdJiYoZHRbcWVdPWoud3JhcFdpdGhDdXJyZW50Wm9uZShkdFtxZV0scnQpKX1lbHNlIGR0W3FlXSYmKGR0W3FlXT1qLndyYXBXaXRoQ3VycmVudFpvbmUoZHRbcWVdLHJ0KSl9Y2F0Y2h7fX0pLEouY2FsbChlZSxhZSxVZSxldCl9LGouYXR0YWNoT3JpZ2luVG9QYXRjaGVkKGVlW0VdLEopfX1mdW5jdGlvbiBfdChqLGVlLGxlKXtpZighbGV8fDA9PT1sZS5sZW5ndGgpcmV0dXJuIGVlO3ZhciBFPWxlLmZpbHRlcihmdW5jdGlvbihZKXtyZXR1cm4gWS50YXJnZXQ9PT1qfSk7aWYoIUV8fDA9PT1FLmxlbmd0aClyZXR1cm4gZWU7dmFyIHo9RVswXS5pZ25vcmVQcm9wZXJ0aWVzO3JldHVybiBlZS5maWx0ZXIoZnVuY3Rpb24oWSl7cmV0dXJuLTE9PT16LmluZGV4T2YoWSl9KX1mdW5jdGlvbiBwdChqLGVlLGxlLEUpe2omJmNlKGosX3QoaixlZSxsZSksRSl9ZnVuY3Rpb24gb24oail7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGopLmZpbHRlcihmdW5jdGlvbihlZSl7cmV0dXJuIGVlLnN0YXJ0c1dpdGgoIm9uIikmJmVlLmxlbmd0aD4yfSkubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUuc3Vic3RyaW5nKDIpfSl9ZnVuY3Rpb24geXQoaixlZSxsZSl7dmFyIEU9bGUuY29uZmlndXJhYmxlO3JldHVybiBtbihqLGVlLGxlPUJlKGosZWUsbGUpLEUpfWZ1bmN0aW9uIG5uKGosZWUpe3JldHVybiBqJiZqW05dJiZqW05dW2VlXX1mdW5jdGlvbiBCZShqLGVlLGxlKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKGxlKXx8KGxlLmNvbmZpZ3VyYWJsZT0hMCksbGUuY29uZmlndXJhYmxlfHwoIWpbTl0mJiFPYmplY3QuaXNGcm96ZW4oaikmJkxpKGosTix7d3JpdGFibGU6ITAsdmFsdWU6e319KSxqW05dJiYoaltOXVtlZV09ITApKSxsZX1mdW5jdGlvbiBtbihqLGVlLGxlLEUpe3RyeXtyZXR1cm4gTGkoaixlZSxsZSl9Y2F0Y2goSil7aWYoIWxlLmNvbmZpZ3VyYWJsZSl0aHJvdyBKO3R5cGVvZiBFPiJ1Ij9kZWxldGUgbGUuY29uZmlndXJhYmxlOmxlLmNvbmZpZ3VyYWJsZT1FO3RyeXtyZXR1cm4gTGkoaixlZSxsZSl9Y2F0Y2goYWUpe3ZhciB6PSExO2lmKCgiY3JlYXRlZENhbGxiYWNrIj09PWVlfHwiYXR0YWNoZWRDYWxsYmFjayI9PT1lZXx8ImRldGFjaGVkQ2FsbGJhY2siPT09ZWV8fCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siPT09ZWUpJiYoej0hMCksIXopdGhyb3cgYWU7dmFyIFk9bnVsbDt0cnl7WT1KU09OLnN0cmluZ2lmeShsZSl9Y2F0Y2h7WT1sZS50b1N0cmluZygpfWNvbnNvbGUubG9nKCJBdHRlbXB0aW5nIHRvIGNvbmZpZ3VyZSAnIi5jb25jYXQoZWUsIicgd2l0aCBkZXNjcmlwdG9yICciKS5jb25jYXQoWSwiJyBvbiBvYmplY3QgJyIpLmNvbmNhdChqLCInIGFuZCBnb3QgZXJyb3IsIGdpdmluZyB1cDogIikuY29uY2F0KGFlKSl9fX1ab25lLl9fbG9hZF9wYXRjaCgidXRpbCIsZnVuY3Rpb24oaixlZSxsZSl7dmFyIEU9b24oaik7bGUucGF0Y2hPblByb3BlcnRpZXM9Y2UsbGUucGF0Y2hNZXRob2Q9bmUsbGUuYmluZEFyZ3VtZW50cz1SLGxlLnBhdGNoTWFjcm9UYXNrPWRlO3ZhciB6PWVlLl9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKSxZPWVlLl9fc3ltYm9sX18oIlVOUEFUQ0hFRF9FVkVOVFMiKTtqW1ldJiYoalt6XT1qW1ldKSxqW3pdJiYoZWVbel09ZWVbWV09alt6XSksbGUucGF0Y2hFdmVudFByb3RvdHlwZT1zdCxsZS5wYXRjaEV2ZW50VGFyZ2V0PW10LGxlLmlzSUVPckVkZ2U9Y3QsbGUuT2JqZWN0RGVmaW5lUHJvcGVydHk9dCxsZS5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9bixsZS5PYmplY3RDcmVhdGU9aSxsZS5BcnJheVNsaWNlPXIsbGUucGF0Y2hDbGFzcz1fZSxsZS53cmFwV2l0aEN1cnJlbnRab25lPXAsbGUuZmlsdGVyUHJvcGVydGllcz1fdCxsZS5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQ9dWUsbGUuX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LGxlLnBhdGNoQ2FsbGJhY2tzPVhlLGxlLmdldEdsb2JhbE9iamVjdHM9ZnVuY3Rpb24oKXtyZXR1cm57Z2xvYmFsU291cmNlczpTdCx6b25lU3ltYm9sRXZlbnROYW1lczpBbixldmVudE5hbWVzOkUsaXNCcm93c2VyOkNlLGlzTWl4OlplLGlzTm9kZTpLLFRSVUVfU1RSOmMsRkFMU0VfU1RSOmQsWk9ORV9TWU1CT0xfUFJFRklYOnUsQUREX0VWRU5UX0xJU1RFTkVSX1NUUjpvLFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6YX19fSk7dmFyIGosVW89aHUoaHUoaHUoaHUoaHUoaHUoaHUoaHUoW10sWyJhYm9ydCIsImFuaW1hdGlvbmNhbmNlbCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImF1eGNsaWNrIiwiYmVmb3JlaW5wdXQiLCJibHVyIiwiY2FuY2VsIiwiY2FucGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2hhbmdlIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwiY29tcG9zaXRpb25lbmQiLCJjdWVjaGFuZ2UiLCJjbGljayIsImNsb3NlIiwiY29udGV4dG1lbnUiLCJjdXJlY2hhbmdlIiwiZGJsY2xpY2siLCJkcmFnIiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImRyYWdleGl0IiwiZHJhZ2xlYXZlIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHVyYXRpb25jaGFuZ2UiLCJlbXB0aWVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwiZ290cG9pbnRlcmNhcHR1cmUiLCJpbnB1dCIsImludmFsaWQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImxvYWQiLCJsb2Fkc3RhcnQiLCJsb2FkZWRkYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb3N0cG9pbnRlcmNhcHR1cmUiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsIm1vdXNld2hlZWwiLCJvcmllbnRhdGlvbmNoYW5nZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJwb2ludGVybG9ja2NoYW5nZSIsIm1venBvaW50ZXJsb2NrY2hhbmdlIiwid2Via2l0cG9pbnRlcmxvY2tlcmNoYW5nZSIsInBvaW50ZXJsb2NrZXJyb3IiLCJtb3pwb2ludGVybG9ja2Vycm9yIiwid2Via2l0cG9pbnRlcmxvY2tlcnJvciIsInBvaW50ZXJtb3ZlIiwicG9pbnRvdXQiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJ1cCIsInByb2dyZXNzIiwicmF0ZWNoYW5nZSIsInJlc2V0IiwicmVzaXplIiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInNlbGVjdCIsInNlbGVjdGlvbmNoYW5nZSIsInNlbGVjdHN0YXJ0Iiwic2hvdyIsInNvcnQiLCJzdGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWV1cGRhdGUiLCJ2b2x1bWVjaGFuZ2UiLCJ0b3VjaGNhbmNlbCIsInRvdWNobW92ZSIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5kIiwid2FpdGluZyIsIndoZWVsIl0sITApLFsid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCJ3ZWJnbGNvbnRleHRsb3N0Iiwid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciJdLCEwKSxbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZWVycm9yIl0sITApLFsidG9nZ2xlIl0sITApLFsiYWZ0ZXJzY3JpcHRleGVjdXRlIiwiYmVmb3Jlc2NyaXB0ZXhlY3V0ZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJmcmVlemUiLCJmdWxsc2NyZWVuY2hhbmdlIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCJmdWxsc2NyZWVuZXJyb3IiLCJtb3pmdWxsc2NyZWVuZXJyb3IiLCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3IiLCJtc2Z1bGxzY3JlZW5lcnJvciIsInJlYWR5c3RhdGVjaGFuZ2UiLCJ2aXNpYmlsaXR5Y2hhbmdlIiwicmVzdW1lIl0sITApLFsiYWJzb2x1dGVkZXZpY2VvcmllbnRhdGlvbiIsImFmdGVyaW5wdXQiLCJhZnRlcnByaW50IiwiYXBwaW5zdGFsbGVkIiwiYmVmb3JlaW5zdGFsbHByb21wdCIsImJlZm9yZXByaW50IiwiYmVmb3JldW5sb2FkIiwiZGV2aWNlbGlnaHQiLCJkZXZpY2Vtb3Rpb24iLCJkZXZpY2VvcmllbnRhdGlvbiIsImRldmljZW9yaWVudGF0aW9uYWJzb2x1dGUiLCJkZXZpY2Vwcm94aW1pdHkiLCJoYXNoY2hhbmdlIiwibGFuZ3VhZ2VjaGFuZ2UiLCJtZXNzYWdlIiwibW96YmVmb3JlcGFpbnQiLCJvZmZsaW5lIiwib25saW5lIiwicGFpbnQiLCJwYWdlc2hvdyIsInBhZ2VoaWRlIiwicG9wc3RhdGUiLCJyZWplY3Rpb25oYW5kbGVkIiwic3RvcmFnZSIsInVuaGFuZGxlZHJlamVjdGlvbiIsInVubG9hZCIsInVzZXJwcm94aW1pdHkiLCJ2cmRpc3BsYXljb25uZWN0ZWQiLCJ2cmRpc3BsYXlkaXNjb25uZWN0ZWQiLCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIl0sITApLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLCEwKSxbImFjdGl2YXRlIiwiYWZ0ZXJ1cGRhdGUiLCJhcmlhcmVxdWVzdCIsImJlZm9yZWFjdGl2YXRlIiwiYmVmb3JlZGVhY3RpdmF0ZSIsImJlZm9yZWVkaXRmb2N1cyIsImJlZm9yZXVwZGF0ZSIsImNlbGxjaGFuZ2UiLCJjb250cm9sc2VsZWN0IiwiZGF0YWF2YWlsYWJsZSIsImRhdGFzZXRjaGFuZ2VkIiwiZGF0YXNldGNvbXBsZXRlIiwiZXJyb3J1cGRhdGUiLCJmaWx0ZXJjaGFuZ2UiLCJsYXlvdXRjb21wbGV0ZSIsImxvc2VjYXB0dXJlIiwibW92ZSIsIm1vdmVlbmQiLCJtb3Zlc3RhcnQiLCJwcm9wZXJ0eWNoYW5nZSIsInJlc2l6ZWVuZCIsInJlc2l6ZXN0YXJ0Iiwicm93ZW50ZXIiLCJyb3dleGl0Iiwicm93c2RlbGV0ZSIsInJvd3NpbnNlcnRlZCIsImNvbW1hbmQiLCJjb21wYXNzbmVlZHNjYWxpYnJhdGlvbiIsImRlYWN0aXZhdGUiLCJoZWxwIiwibXNjb250ZW50em9vbSIsIm1zbWFuaXB1bGF0aW9uc3RhdGVjaGFuZ2VkIiwibXNnZXN0dXJlY2hhbmdlIiwibXNnZXN0dXJlZG91YmxldGFwIiwibXNnZXN0dXJlZW5kIiwibXNnZXN0dXJlaG9sZCIsIm1zZ2VzdHVyZXN0YXJ0IiwibXNnZXN0dXJldGFwIiwibXNnb3Rwb2ludGVyY2FwdHVyZSIsIm1zaW5lcnRpYXN0YXJ0IiwibXNsb3N0cG9pbnRlcmNhcHR1cmUiLCJtc3BvaW50ZXJjYW5jZWwiLCJtc3BvaW50ZXJkb3duIiwibXNwb2ludGVyZW50ZXIiLCJtc3BvaW50ZXJob3ZlciIsIm1zcG9pbnRlcmxlYXZlIiwibXNwb2ludGVybW92ZSIsIm1zcG9pbnRlcm91dCIsIm1zcG9pbnRlcm92ZXIiLCJtc3BvaW50ZXJ1cCIsInBvaW50ZXJvdXQiLCJtc3NpdGVtb2RlanVtcGxpc3RpdGVtcmVtb3ZlZCIsIm1zdGh1bWJuYWlsY2xpY2siLCJzdG9wIiwic3RvcmFnZWNvbW1pdCJdLCEwKTsoaj10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KVsoImxlZ2FjeVBhdGNoIiwoai5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyIpKyJsZWdhY3lQYXRjaCIpXT1mdW5jdGlvbigpe3ZhciBFPWouWm9uZTtFLl9fbG9hZF9wYXRjaCgiZGVmaW5lUHJvcGVydHkiLGZ1bmN0aW9uKHosWSxKKXtKLl9yZWRlZmluZVByb3BlcnR5PXl0LGlpPVpvbmUuX19zeW1ib2xfXyxMaT1PYmplY3RbaWkoImRlZmluZVByb3BlcnR5IildPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxOaT1PYmplY3RbaWkoImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFo9T2JqZWN0LmNyZWF0ZSxOPWlpKCJ1bmNvbmZpZ3VyYWJsZXMiKSxPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oaixlZSxsZSl7aWYobm4oaixlZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFzc2lnbiB0byByZWFkIG9ubHkgcHJvcGVydHkgJyIrZWUrIicgb2YgIitqKTt2YXIgRT1sZS5jb25maWd1cmFibGU7cmV0dXJuInByb3RvdHlwZSIhPT1lZSYmKGxlPUJlKGosZWUsbGUpKSxtbihqLGVlLGxlLEUpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihqLGVlKXtPYmplY3Qua2V5cyhlZSkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaixKLGVlW0pdKX0pO2Zvcih2YXIgbGU9MCxFPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZWUpO2xlPEUubGVuZ3RoO2xlKyspe3ZhciB6PUVbbGVdO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWUseik/LmVudW1lcmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLHosZWVbel0pfXJldHVybiBqfSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGosZWUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZWUmJiFPYmplY3QuaXNGcm96ZW4oZWUpJiZPYmplY3Qua2V5cyhlZSkuZm9yRWFjaChmdW5jdGlvbihsZSl7ZWVbbGVdPUJlKGosbGUsZWVbbGVdKX0pLFooaixlZSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9ZnVuY3Rpb24oaixlZSl7dmFyIGxlPU5pKGosZWUpO3JldHVybiBsZSYmbm4oaixlZSkmJihsZS5jb25maWd1cmFibGU9ITEpLGxlfX0pLEUuX19sb2FkX3BhdGNoKCJyZWdpc3RlckVsZW1lbnQiLGZ1bmN0aW9uKHosWSxKKXshZnVuY3Rpb24oaixlZSl7dmFyIGxlPWVlLmdldEdsb2JhbE9iamVjdHMoKTsobGUuaXNCcm93c2VyfHxsZS5pc01peCkmJiJyZWdpc3RlckVsZW1lbnQiaW4gai5kb2N1bWVudCYmZWUucGF0Y2hDYWxsYmFja3MoZWUsZG9jdW1lbnQsIkRvY3VtZW50IiwicmVnaXN0ZXJFbGVtZW50IixbImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfSh6LEopfSksRS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0TGVnYWN5IixmdW5jdGlvbih6LFksSil7KGZ1bmN0aW9uKGosZWUpe3ZhciBsZT1lZS5nZXRHbG9iYWxPYmplY3RzKCksRT1sZS5ldmVudE5hbWVzLHo9bGUuZ2xvYmFsU291cmNlcyxZPWxlLnpvbmVTeW1ib2xFdmVudE5hbWVzLEo9bGUuVFJVRV9TVFIsYWU9bGUuRkFMU0VfU1RSLFVlPWxlLlpPTkVfU1lNQk9MX1BSRUZJWCxxZT0iQXBwbGljYXRpb25DYWNoZSxFdmVudFNvdXJjZSxGaWxlUmVhZGVyLElucHV0TWV0aG9kQ29udGV4dCxNZWRpYUNvbnRyb2xsZXIsTWVzc2FnZVBvcnQsTm9kZSxQZXJmb3JtYW5jZSxTVkdFbGVtZW50SW5zdGFuY2UsU2hhcmVkV29ya2VyLFRleHRUcmFjayxUZXh0VHJhY2tDdWUsVGV4dFRyYWNrTGlzdCxXZWJLaXROYW1lZEZsb3csV2luZG93LFdvcmtlcixXb3JrZXJHbG9iYWxTY29wZSxYTUxIdHRwUmVxdWVzdCxYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LFhNTEh0dHBSZXF1ZXN0VXBsb2FkLElEQlJlcXVlc3QsSURCT3BlbkRCUmVxdWVzdCxJREJEYXRhYmFzZSxJREJUcmFuc2FjdGlvbixJREJDdXJzb3IsREJJbmRleCxXZWJTb2NrZXQiLnNwbGl0KCIsIikscnQ9IkV2ZW50VGFyZ2V0IixkdD1bXSxFdD1qLnd0ZixBdD0iQW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29udGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxGcmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJLExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2QsT0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVzcyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJsZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxlLFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLnNwbGl0KCIsIik7RXQ/ZHQ9QXQubWFwKGZ1bmN0aW9uKHhyKXtyZXR1cm4iSFRNTCIreHIrIkVsZW1lbnQifSkuY29uY2F0KHFlKTpqW3J0XT9kdC5wdXNoKHJ0KTpkdD1xZTtmb3IodmFyIGxuPWouX19ab25lX2Rpc2FibGVfSUVfY2hlY2t8fCExLFlpPWouX19ab25lX2VuYWJsZV9jcm9zc19jb250ZXh0X2NoZWNrfHwhMSx4aT1lZS5pc0lFT3JFZGdlKCksUG49IltvYmplY3QgRnVuY3Rpb25XcmFwcGVyXSIsSXQ9ImZ1bmN0aW9uIF9fQlJPV1NFUlRPT0xTX0NPTlNPTEVfU0FGRUZVTkMoKSB7IFtuYXRpdmUgY29kZV0gfSIsZ2k9e01TUG9pbnRlckNhbmNlbDoicG9pbnRlcmNhbmNlbCIsTVNQb2ludGVyRG93bjoicG9pbnRlcmRvd24iLE1TUG9pbnRlckVudGVyOiJwb2ludGVyZW50ZXIiLE1TUG9pbnRlckhvdmVyOiJwb2ludGVyaG92ZXIiLE1TUG9pbnRlckxlYXZlOiJwb2ludGVybGVhdmUiLE1TUG9pbnRlck1vdmU6InBvaW50ZXJtb3ZlIixNU1BvaW50ZXJPdXQ6InBvaW50ZXJvdXQiLE1TUG9pbnRlck92ZXI6InBvaW50ZXJvdmVyIixNU1BvaW50ZXJVcDoicG9pbnRlcnVwIn0sZWk9MDtlaTxFLmxlbmd0aDtlaSsrKXt2YXIgQmk9VWUrKChqbj1FW2VpXSkrYWUpLHhuPVVlKyhqbitKKTtZW2puXT17fSxZW2puXVthZV09QmksWVtqbl1bSl09eG59Zm9yKGVpPTA7ZWk8QXQubGVuZ3RoO2VpKyspZm9yKHZhciBPbj1BdFtlaV0sX2k9eltPbl09e30sTG49MDtMbjxFLmxlbmd0aDtMbisrKXt2YXIgam47X2lbam49RVtMbl1dPU9uKyIuYWRkRXZlbnRMaXN0ZW5lcjoiK2pufXZhciBvcj1bXTtmb3IoZWk9MDtlaTxkdC5sZW5ndGg7ZWkrKyl7dmFyIE1hPWpbZHRbZWldXTtvci5wdXNoKE1hJiZNYS5wcm90b3R5cGUpfWVlLnBhdGNoRXZlbnRUYXJnZXQoaixlZSxvcix7dmg6ZnVuY3Rpb24oeHIsZnIsZ3QsbWUpe2lmKCFsbiYmeGkpaWYoWWkpdHJ5e2lmKChoZT1mci50b1N0cmluZygpKT09PVBufHxoZT09SXQpcmV0dXJuIHhyLmFwcGx5KGd0LG1lKSwhMX1jYXRjaHtyZXR1cm4geHIuYXBwbHkoZ3QsbWUpLCExfWVsc2V7dmFyIGhlO2lmKChoZT1mci50b1N0cmluZygpKT09PVBufHxoZT09SXQpcmV0dXJuIHhyLmFwcGx5KGd0LG1lKSwhMX1lbHNlIGlmKFlpKXRyeXtmci50b1N0cmluZygpfWNhdGNoe3JldHVybiB4ci5hcHBseShndCxtZSksITF9cmV0dXJuITB9LHRyYW5zZmVyRXZlbnROYW1lOmZ1bmN0aW9uKHhyKXtyZXR1cm4gZ2lbeHJdfHx4cn19KSxab25lW2VlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXT0hIWpbcnRdfSkoeixKKSxmdW5jdGlvbihqLGVlKXt2YXIgbGU9ai5nZXRHbG9iYWxPYmplY3RzKCk7aWYoKCFsZS5pc05vZGV8fGxlLmlzTWl4KSYmIWZ1bmN0aW9uKGosZWUpe3ZhciBsZT1qLmdldEdsb2JhbE9iamVjdHMoKTtpZigobGUuaXNCcm93c2VyfHxsZS5pc01peCkmJiFqLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKSYmdHlwZW9mIEVsZW1lbnQ8InUiKXt2YXIgWT1qLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpO2lmKFkmJiFZLmNvbmZpZ3VyYWJsZSlyZXR1cm4hMTtpZihZKXtqLk9iamVjdERlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSk7dmFyIGFlPSEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikub25jbGljaztyZXR1cm4gai5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIsWSksYWV9fXZhciBVZT1lZS5YTUxIdHRwUmVxdWVzdDtpZighVWUpcmV0dXJuITE7dmFyIGV0PSJvbnJlYWR5c3RhdGVjaGFuZ2UiLHFlPVVlLnByb3RvdHlwZSxydD1qLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihxZSxldCk7aWYocnQpcmV0dXJuIGouT2JqZWN0RGVmaW5lUHJvcGVydHkocWUsZXQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pLGFlPSEhKGR0PW5ldyBVZSkub25yZWFkeXN0YXRlY2hhbmdlLGouT2JqZWN0RGVmaW5lUHJvcGVydHkocWUsZXQscnR8fHt9KSxhZTt2YXIgRXQ9ai5zeW1ib2woImZha2UiKTtqLk9iamVjdERlZmluZVByb3BlcnR5KHFlLGV0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tFdF19LHNldDpmdW5jdGlvbih4aSl7dGhpc1tFdF09eGl9fSk7dmFyIGR0LEF0PWZ1bmN0aW9uKCl7fTtyZXR1cm4oZHQ9bmV3IFVlKS5vbnJlYWR5c3RhdGVjaGFuZ2U9QXQsYWU9ZHRbRXRdPT09QXQsZHQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsYWV9KGosZWUpKXt2YXIgWT10eXBlb2YgV2ViU29ja2V0PCJ1IjsoZnVuY3Rpb24oail7Zm9yKHZhciBlZT1qLnN5bWJvbCgidW5ib3VuZCIpLGxlPWZ1bmN0aW9uKHope3ZhciBZPVVvW3pdLEo9Im9uIitZO3NlbGYuYWRkRXZlbnRMaXN0ZW5lcihZLGZ1bmN0aW9uKGFlKXt2YXIgZXQscWUsVWU9YWUudGFyZ2V0O2ZvcihxZT1VZT9VZS5jb25zdHJ1Y3Rvci5uYW1lKyIuIitKOiJ1bmtub3duLiIrSjtVZTspVWVbSl0mJiFVZVtKXVtlZV0mJigoZXQ9ai53cmFwV2l0aEN1cnJlbnRab25lKFVlW0pdLHFlKSlbZWVdPVVlW0pdLFVlW0pdPWV0KSxVZT1VZS5wYXJlbnRFbGVtZW50fSwhMCl9LEU9MDtFPFVvLmxlbmd0aDtFKyspbGUoRSl9KShqKSxqLnBhdGNoQ2xhc3MoIlhNTEh0dHBSZXF1ZXN0IiksWSYmZnVuY3Rpb24oaixlZSl7dmFyIGxlPWouZ2V0R2xvYmFsT2JqZWN0cygpLEU9bGUuQUREX0VWRU5UX0xJU1RFTkVSX1NUUix6PWxlLlJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFIsWT1lZS5XZWJTb2NrZXQ7ZWUuRXZlbnRUYXJnZXR8fGoucGF0Y2hFdmVudFRhcmdldChlZSxqLFtZLnByb3RvdHlwZV0pLGVlLldlYlNvY2tldD1mdW5jdGlvbihVZSxldCl7dmFyIHJ0LGR0LHFlPWFyZ3VtZW50cy5sZW5ndGg+MT9uZXcgWShVZSxldCk6bmV3IFkoVWUpLEV0PWouT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHFlLCJvbm1lc3NhZ2UiKTtyZXR1cm4gRXQmJiExPT09RXQuY29uZmlndXJhYmxlPyhydD1qLk9iamVjdENyZWF0ZShxZSksZHQ9cWUsW0Useiwic2VuZCIsImNsb3NlIl0uZm9yRWFjaChmdW5jdGlvbihBdCl7cnRbQXRdPWZ1bmN0aW9uKCl7dmFyIGxuPWouQXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoQXQ9PT1FfHxBdD09PXope3ZhciBZaT1sbi5sZW5ndGg+MD9sblswXTp2b2lkIDA7aWYoWWkpe3ZhciB4aT1ab25lLl9fc3ltYm9sX18oIk9OX1BST1BFUlRZIitZaSk7cWVbeGldPXJ0W3hpXX19cmV0dXJuIHFlW0F0XS5hcHBseShxZSxsbil9fSkpOnJ0PXFlLGoucGF0Y2hPblByb3BlcnRpZXMocnQsWyJjbG9zZSIsImVycm9yIiwibWVzc2FnZSIsIm9wZW4iXSxkdCkscnR9O3ZhciBKPWVlLldlYlNvY2tldDtmb3IodmFyIGFlIGluIFkpSlthZV09WVthZV19KGosZWUpLFpvbmVbai5zeW1ib2woInBhdGNoRXZlbnRzIildPSEwfX0oSix6KX0pfTt2YXIgQ2E9bSgiem9uZVRhc2siKTtmdW5jdGlvbiBybChqLGVlLGxlLEUpe3ZhciB6PW51bGwsWT1udWxsO2xlKz1FO3ZhciBKPXt9O2Z1bmN0aW9uIGFlKGV0KXt2YXIgcWU9ZXQuZGF0YTtyZXR1cm4gcWUuYXJnc1swXT1mdW5jdGlvbigpe3JldHVybiBldC5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxxZS5oYW5kbGVJZD16LmFwcGx5KGoscWUuYXJncyksZXR9ZnVuY3Rpb24gVWUoZXQpe3JldHVybiBZLmNhbGwoaixldC5kYXRhLmhhbmRsZUlkKX16PW5lKGosZWUrPUUsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihxZSxydCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WzBdKXt2YXIgZHQ9e2lzUGVyaW9kaWM6IkludGVydmFsIj09PUUsZGVsYXk6IlRpbWVvdXQiPT09RXx8IkludGVydmFsIj09PUU/cnRbMV18fDA6dm9pZCAwLGFyZ3M6cnR9LEV0PXJ0WzBdO3J0WzBdPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBFdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtkdC5pc1BlcmlvZGljfHwoIm51bWJlciI9PXR5cGVvZiBkdC5oYW5kbGVJZD9kZWxldGUgSltkdC5oYW5kbGVJZF06ZHQuaGFuZGxlSWQmJihkdC5oYW5kbGVJZFtDYV09bnVsbCkpfX07dmFyIEF0PWYoZWUscnRbMF0sZHQsYWUsVWUpO2lmKCFBdClyZXR1cm4gQXQ7dmFyIGxuPUF0LmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsbj9KW2xuXT1BdDpsbiYmKGxuW0NhXT1BdCksbG4mJmxuLnJlZiYmbG4udW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBsbi5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBsbi51bnJlZiYmKEF0LnJlZj1sbi5yZWYuYmluZChsbiksQXQudW5yZWY9bG4udW5yZWYuYmluZChsbikpLCJudW1iZXIiPT10eXBlb2YgbG58fGxuP2xuOkF0fXJldHVybiBldC5hcHBseShqLHJ0KX19KSxZPW5lKGosbGUsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihxZSxydCl7dmFyIEV0LGR0PXJ0WzBdOyJudW1iZXIiPT10eXBlb2YgZHQ/RXQ9SltkdF06KEV0PWR0JiZkdFtDYV0pfHwoRXQ9ZHQpLEV0JiYic3RyaW5nIj09dHlwZW9mIEV0LnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1FdC5zdGF0ZSYmKEV0LmNhbmNlbEZuJiZFdC5kYXRhLmlzUGVyaW9kaWN8fDA9PT1FdC5ydW5Db3VudCkmJigibnVtYmVyIj09dHlwZW9mIGR0P2RlbGV0ZSBKW2R0XTpkdCYmKGR0W0NhXT1udWxsKSxFdC56b25lLmNhbmNlbFRhc2soRXQpKTpldC5hcHBseShqLHJ0KX19KX1ab25lLl9fbG9hZF9wYXRjaCgibGVnYWN5IixmdW5jdGlvbihqKXt2YXIgZWU9altab25lLl9fc3ltYm9sX18oImxlZ2FjeVBhdGNoIildO2VlJiZlZSgpfSksWm9uZS5fX2xvYWRfcGF0Y2goInF1ZXVlTWljcm90YXNrIixmdW5jdGlvbihqLGVlLGxlKXtsZS5wYXRjaE1ldGhvZChqLCJxdWV1ZU1pY3JvdGFzayIsZnVuY3Rpb24oRSl7cmV0dXJuIGZ1bmN0aW9uKHosWSl7ZWUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygicXVldWVNaWNyb3Rhc2siLFlbMF0pfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goInRpbWVycyIsZnVuY3Rpb24oail7dmFyIGxlPSJjbGVhciI7cmwoaiwic2V0IixsZSwiVGltZW91dCIpLHJsKGosInNldCIsbGUsIkludGVydmFsIikscmwoaiwic2V0IixsZSwiSW1tZWRpYXRlIil9KSxab25lLl9fbG9hZF9wYXRjaCgicmVxdWVzdEFuaW1hdGlvbkZyYW1lIixmdW5jdGlvbihqKXtybChqLCJyZXF1ZXN0IiwiY2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxybChqLCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxybChqLCJ3ZWJraXRSZXF1ZXN0Iiwid2Via2l0Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJibG9ja2luZyIsZnVuY3Rpb24oaixlZSl7Zm9yKHZhciBsZT1bImFsZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdLEU9MDtFPGxlLmxlbmd0aDtFKyspbmUoaixsZVtFXSxmdW5jdGlvbihZLEosYWUpe3JldHVybiBmdW5jdGlvbihVZSxldCl7cmV0dXJuIGVlLmN1cnJlbnQucnVuKFksaixldCxhZSl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLGZ1bmN0aW9uKGosZWUsbGUpeyhmdW5jdGlvbihqLGVlKXtlZS5wYXRjaEV2ZW50UHJvdG90eXBlKGosZWUpfSkoaixsZSksZnVuY3Rpb24oaixlZSl7aWYoIVpvbmVbZWUuc3ltYm9sKCJwYXRjaEV2ZW50VGFyZ2V0IildKXtmb3IodmFyIGxlPWVlLmdldEdsb2JhbE9iamVjdHMoKSxFPWxlLmV2ZW50TmFtZXMsej1sZS56b25lU3ltYm9sRXZlbnROYW1lcyxZPWxlLlRSVUVfU1RSLEo9bGUuRkFMU0VfU1RSLGFlPWxlLlpPTkVfU1lNQk9MX1BSRUZJWCxVZT0wO1VlPEUubGVuZ3RoO1VlKyspe3ZhciBldD1FW1VlXSxkdD1hZSsoZXQrSiksRXQ9YWUrKGV0K1kpO3pbZXRdPXt9LHpbZXRdW0pdPWR0LHpbZXRdW1ldPUV0fXZhciBBdD1qLkV2ZW50VGFyZ2V0O0F0JiZBdC5wcm90b3R5cGUmJmVlLnBhdGNoRXZlbnRUYXJnZXQoaixlZSxbQXQmJkF0LnByb3RvdHlwZV0pfX0oaixsZSk7dmFyIEU9ai5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O0UmJkUucHJvdG90eXBlJiZsZS5wYXRjaEV2ZW50VGFyZ2V0KGosbGUsW0UucHJvdG90eXBlXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiTXV0YXRpb25PYnNlcnZlciIsZnVuY3Rpb24oaixlZSxsZSl7X2UoIk11dGF0aW9uT2JzZXJ2ZXIiKSxfZSgiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIkludGVyc2VjdGlvbk9ic2VydmVyIixmdW5jdGlvbihqLGVlLGxlKXtfZSgiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJGaWxlUmVhZGVyIixmdW5jdGlvbihqLGVlLGxlKXtfZSgiRmlsZVJlYWRlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IixmdW5jdGlvbihqLGVlLGxlKXshZnVuY3Rpb24oaixlZSl7aWYoKCFLfHxaZSkmJiFab25lW2ouc3ltYm9sKCJwYXRjaEV2ZW50cyIpXSl7dmFyIGxlPWVlLl9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcyxFPVtdO2lmKENlKXt2YXIgej13aW5kb3c7RT1FLmNvbmNhdChbIkRvY3VtZW50IiwiU1ZHRWxlbWVudCIsIkVsZW1lbnQiLCJIVE1MRWxlbWVudCIsIkhUTUxCb2R5RWxlbWVudCIsIkhUTUxNZWRpYUVsZW1lbnQiLCJIVE1MRnJhbWVTZXRFbGVtZW50IiwiSFRNTEZyYW1lRWxlbWVudCIsIkhUTUxJRnJhbWVFbGVtZW50IiwiSFRNTE1hcnF1ZWVFbGVtZW50IiwiV29ya2VyIl0pO3ZhciBZPWZ1bmN0aW9uKCl7dHJ5e3ZhciBqPU0ubmF2aWdhdG9yLnVzZXJBZ2VudDtpZigtMSE9PWouaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1qLmluZGV4T2YoIlRyaWRlbnQvIikpcmV0dXJuITB9Y2F0Y2h7fXJldHVybiExfSgpP1t7dGFyZ2V0OnosaWdub3JlUHJvcGVydGllczpbImVycm9yIl19XTpbXTtwdCh6LG9uKHopLGxlJiZsZS5jb25jYXQoWSksZSh6KSl9RT1FLmNvbmNhdChbIlhNTEh0dHBSZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCIsIklEQkluZGV4IiwiSURCUmVxdWVzdCIsIklEQk9wZW5EQlJlcXVlc3QiLCJJREJEYXRhYmFzZSIsIklEQlRyYW5zYWN0aW9uIiwiSURCQ3Vyc29yIiwiV2ViU29ja2V0Il0pO2Zvcih2YXIgSj0wO0o8RS5sZW5ndGg7SisrKXt2YXIgYWU9ZWVbRVtKXV07YWUmJmFlLnByb3RvdHlwZSYmcHQoYWUucHJvdG90eXBlLG9uKGFlLnByb3RvdHlwZSksbGUpfX19KGxlLGopfSksWm9uZS5fX2xvYWRfcGF0Y2goImN1c3RvbUVsZW1lbnRzIixmdW5jdGlvbihqLGVlLGxlKXshZnVuY3Rpb24oaixlZSl7dmFyIGxlPWVlLmdldEdsb2JhbE9iamVjdHMoKTsobGUuaXNCcm93c2VyfHxsZS5pc01peCkmJmouY3VzdG9tRWxlbWVudHMmJiJjdXN0b21FbGVtZW50cyJpbiBqJiZlZS5wYXRjaENhbGxiYWNrcyhlZSxqLmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfShqLGxlKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJYSFIiLGZ1bmN0aW9uKGosZWUpeyFmdW5jdGlvbihldCl7dmFyIHFlPWV0LlhNTEh0dHBSZXF1ZXN0O2lmKHFlKXt2YXIgcnQ9cWUucHJvdG90eXBlLEV0PXJ0W3NdLEF0PXJ0W2xdO2lmKCFFdCl7dmFyIGxuPWV0LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYobG4pe3ZhciBZaT1sbi5wcm90b3R5cGU7RXQ9WWlbc10sQXQ9WWlbbF19fXZhciB4aT0icmVhZHlzdGF0ZWNoYW5nZSIsZm49InNjaGVkdWxlZCIsZWk9bmUocnQsIm9wZW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLF9pKXtyZXR1cm4gT25bRV09MD09X2lbMl0sT25bSl09X2lbMV0sZWkuYXBwbHkoT24sX2kpfX0pLFFuPW0oImZldGNoVGFza0Fib3J0aW5nIiksanQ9bSgiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLEJpPW5lKHJ0LCJzZW5kIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihPbixfaSl7aWYoITA9PT1lZS5jdXJyZW50W2p0XXx8T25bRV0pcmV0dXJuIEJpLmFwcGx5KE9uLF9pKTt2YXIgTG49e3RhcmdldDpPbix1cmw6T25bSl0saXNQZXJpb2RpYzohMSxhcmdzOl9pLGFib3J0ZWQ6ITF9LHByPWYoIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLEl0LExuLFBuLGdpKTtPbiYmITA9PT1PblthZV0mJiFMbi5hYm9ydGVkJiZwci5zdGF0ZT09PWZuJiZwci5pbnZva2UoKX19KSx4bj1uZShydCwiYWJvcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLF9pKXt2YXIgTG49ZnVuY3Rpb24oT24pe3JldHVybiBPbltsZV19KE9uKTtpZihMbiYmInN0cmluZyI9PXR5cGVvZiBMbi50eXBlKXtpZihudWxsPT1Mbi5jYW5jZWxGbnx8TG4uZGF0YSYmTG4uZGF0YS5hYm9ydGVkKXJldHVybjtMbi56b25lLmNhbmNlbFRhc2soTG4pfWVsc2UgaWYoITA9PT1lZS5jdXJyZW50W1FuXSlyZXR1cm4geG4uYXBwbHkoT24sX2kpfX0pfWZ1bmN0aW9uIFBuKE9uKXt2YXIgX2k9T24uZGF0YSxMbj1faS50YXJnZXQ7TG5bWV09ITEsTG5bYWVdPSExO3ZhciBwcj1Mblt6XTtFdHx8KEV0PUxuW3NdLEF0PUxuW2xdKSxwciYmQXQuY2FsbChMbix4aSxwcik7dmFyIG9yPUxuW3pdPWZ1bmN0aW9uKCl7aWYoTG4ucmVhZHlTdGF0ZT09PUxuLkRPTkUpaWYoIV9pLmFib3J0ZWQmJkxuW1ldJiZPbi5zdGF0ZT09PWZuKXt2YXIgeHI9TG5bZWUuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2lmKDAhPT1Mbi5zdGF0dXMmJnhyJiZ4ci5sZW5ndGg+MCl7dmFyIGZyPU9uLmludm9rZTtPbi5pbnZva2U9ZnVuY3Rpb24oKXtmb3IodmFyIGd0PUxuW2VlLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXSxtZT0wO21lPGd0Lmxlbmd0aDttZSsrKWd0W21lXT09PU9uJiZndC5zcGxpY2UobWUsMSk7IV9pLmFib3J0ZWQmJk9uLnN0YXRlPT09Zm4mJmZyLmNhbGwoT24pfSx4ci5wdXNoKE9uKX1lbHNlIE9uLmludm9rZSgpfWVsc2UhX2kuYWJvcnRlZCYmITE9PT1MbltZXSYmKExuW2FlXT0hMCl9O3JldHVybiBFdC5jYWxsKExuLHhpLG9yKSxMbltsZV18fChMbltsZV09T24pLEJpLmFwcGx5KExuLF9pLmFyZ3MpLExuW1ldPSEwLE9ufWZ1bmN0aW9uIEl0KCl7fWZ1bmN0aW9uIGdpKE9uKXt2YXIgX2k9T24uZGF0YTtyZXR1cm4gX2kuYWJvcnRlZD0hMCx4bi5hcHBseShfaS50YXJnZXQsX2kuYXJncyl9fShqKTt2YXIgbGU9bSgieGhyVGFzayIpLEU9bSgieGhyU3luYyIpLHo9bSgieGhyTGlzdGVuZXIiKSxZPW0oInhoclNjaGVkdWxlZCIpLEo9bSgieGhyVVJMIiksYWU9bSgieGhyRXJyb3JCZWZvcmVTY2hlZHVsZWQiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJnZW9sb2NhdGlvbiIsZnVuY3Rpb24oail7ai5uYXZpZ2F0b3ImJmoubmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZmdW5jdGlvbihqLGVlKXtmb3IodmFyIGxlPWouY29uc3RydWN0b3IubmFtZSxFPWZ1bmN0aW9uKFkpe3ZhciBldCxxZSxKPWVlW1ldLGFlPWpbSl07aWYoYWUpe2lmKCFIKG4oaixKKSkpcmV0dXJuImNvbnRpbnVlIjtqW0pdPShxZT1mdW5jdGlvbigpe3JldHVybiBldC5hcHBseSh0aGlzLFIoYXJndW1lbnRzLGxlKyIuIitKKSl9LHVlKHFlLGV0PWFlKSxxZSl9fSx6PTA7ejxlZS5sZW5ndGg7eisrKUUoeil9KGoubmF2aWdhdG9yLmdlb2xvY2F0aW9uLFsiZ2V0Q3VycmVudFBvc2l0aW9uIiwid2F0Y2hQb3NpdGlvbiJdKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLGZ1bmN0aW9uKGosZWUpe2Z1bmN0aW9uIGxlKEUpe3JldHVybiBmdW5jdGlvbih6KXtvZShqLEUpLmZvckVhY2goZnVuY3Rpb24oSil7dmFyIGFlPWouUHJvbWlzZVJlamVjdGlvbkV2ZW50O2lmKGFlKXt2YXIgVWU9bmV3IGFlKEUse3Byb21pc2U6ei5wcm9taXNlLHJlYXNvbjp6LnJlamVjdGlvbn0pO0ouaW52b2tlKFVlKX19KX19ai5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJihlZVttKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1sZSgidW5oYW5kbGVkcmVqZWN0aW9uIiksZWVbbSgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09bGUoInJlamVjdGlvbmhhbmRsZWQiKSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUobik6bigpfSk7ZnVuY3Rpb24gX24obil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gTm0obil7bGV0IGU9bihpPT57RXJyb3IuY2FsbChpKSxpLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfSk7cmV0dXJuIGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9dmFyIHNDPU5tKG49PmZ1bmN0aW9uKGUpe24odGhpcyksdGhpcy5tZXNzYWdlPWU/YCR7ZS5sZW5ndGh9IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2UubWFwKChpLHIpPT5gJHtyKzF9KSAke2kudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWV9KTtmdW5jdGlvbiBrcChuLHQpe2lmKG4pe2xldCBlPW4uaW5kZXhPZih0KTswPD1lJiZuLnNwbGljZShlLDEpfX12YXIgeW49Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbml0aWFsVGVhcmRvd249dCx0aGlzLmNsb3NlZD0hMSx0aGlzLl9wYXJlbnRhZ2U9bnVsbCx0aGlzLl9maW5hbGl6ZXJzPW51bGx9dW5zdWJzY3JpYmUoKXtsZXQgdDtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO2xldHtfcGFyZW50YWdlOmV9PXRoaXM7aWYoZSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbyBvZiBlKW8ucmVtb3ZlKHRoaXMpO2Vsc2UgZS5yZW1vdmUodGhpcyk7bGV0e2luaXRpYWxUZWFyZG93bjppfT10aGlzO2lmKF9uKGkpKXRyeXtpKCl9Y2F0Y2gobyl7dD1vIGluc3RhbmNlb2Ygc0M/by5lcnJvcnM6W29dfWxldHtfZmluYWxpemVyczpyfT10aGlzO2lmKHIpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IobGV0IG8gb2Ygcil0cnl7djQobyl9Y2F0Y2goYSl7dD10Pz9bXSxhIGluc3RhbmNlb2Ygc0M/dD1bLi4udCwuLi5hLmVycm9yc106dC5wdXNoKGEpfX1pZih0KXRocm93IG5ldyBzQyh0KX19YWRkKHQpe3ZhciBlO2lmKHQmJnQhPT10aGlzKWlmKHRoaXMuY2xvc2VkKXY0KHQpO2Vsc2V7aWYodCBpbnN0YW5jZW9mIHluKXtpZih0LmNsb3NlZHx8dC5faGFzUGFyZW50KHRoaXMpKXJldHVybjt0Ll9hZGRQYXJlbnQodGhpcyl9KHRoaXMuX2ZpbmFsaXplcnM9bnVsbCE9PShlPXRoaXMuX2ZpbmFsaXplcnMpJiZ2b2lkIDAhPT1lP2U6W10pLnB1c2godCl9fV9oYXNQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpcztyZXR1cm4gZT09PXR8fEFycmF5LmlzQXJyYXkoZSkmJmUuaW5jbHVkZXModCl9X2FkZFBhcmVudCh0KXtsZXR7X3BhcmVudGFnZTplfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGUpPyhlLnB1c2godCksZSk6ZT9bZSx0XTp0fV9yZW1vdmVQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpcztlPT09dD90aGlzLl9wYXJlbnRhZ2U9bnVsbDpBcnJheS5pc0FycmF5KGUpJiZrcChlLHQpfXJlbW92ZSh0KXtsZXR7X2ZpbmFsaXplcnM6ZX09dGhpcztlJiZrcChlLHQpLHQgaW5zdGFuY2VvZiB5biYmdC5fcmVtb3ZlUGFyZW50KHRoaXMpfX07eW4uRU1QVFk9KCgpPT57bGV0IG49bmV3IHluO3JldHVybiBuLmNsb3NlZD0hMCxufSkoKTt2YXIgVUE9eW4uRU1QVFk7ZnVuY3Rpb24gbEMobil7cmV0dXJuIG4gaW5zdGFuY2VvZiB5bnx8biYmImNsb3NlZCJpbiBuJiZfbihuLnJlbW92ZSkmJl9uKG4uYWRkKSYmX24obi51bnN1YnNjcmliZSl9ZnVuY3Rpb24gdjQobil7X24obik/bigpOm4udW5zdWJzY3JpYmUoKX12YXIgYWw9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDohMX0sQm09e3NldFRpbWVvdXQobix0LC4uLmUpe2xldHtkZWxlZ2F0ZTppfT1CbTtyZXR1cm4gaT8uc2V0VGltZW91dD9pLnNldFRpbWVvdXQobix0LC4uLmUpOnNldFRpbWVvdXQobix0LC4uLmUpfSxjbGVhclRpbWVvdXQobil7bGV0e2RlbGVnYXRlOnR9PUJtO3JldHVybih0Py5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkobil9LGRlbGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gY0Mobil7Qm0uc2V0VGltZW91dCgoKT0+e2xldHtvblVuaGFuZGxlZEVycm9yOnR9PWFsO2lmKCF0KXRocm93IG47dChuKX0pfWZ1bmN0aW9uIHNsKCl7fXZhciB4ND1qQSgiQyIsdm9pZCAwLHZvaWQgMCk7ZnVuY3Rpb24gakEobix0LGUpe3JldHVybntraW5kOm4sdmFsdWU6dCxlcnJvcjplfX12YXIgUHA9bnVsbDtmdW5jdGlvbiBWbShuKXtpZihhbC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXtsZXQgdD0hUHA7aWYodCYmKFBwPXtlcnJvclRocm93bjohMSxlcnJvcjpudWxsfSksbigpLHQpe2xldHtlcnJvclRocm93bjplLGVycm9yOml9PVBwO2lmKFBwPW51bGwsZSl0aHJvdyBpfX1lbHNlIG4oKX12YXIgT3A9Y2xhc3MgZXh0ZW5kcyB5bntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaXNTdG9wcGVkPSExLHQ/KHRoaXMuZGVzdGluYXRpb249dCxsQyh0KSYmdC5hZGQodGhpcykpOnRoaXMuZGVzdGluYXRpb249bnJlfXN0YXRpYyBjcmVhdGUodCxlLGkpe3JldHVybiBuZXcgbGwodCxlLGkpfW5leHQodCl7dGhpcy5pc1N0b3BwZWQ/V0EoakEoIk4iLHQsdm9pZCAwKSx0aGlzKTp0aGlzLl9uZXh0KHQpfWVycm9yKHQpe3RoaXMuaXNTdG9wcGVkP1dBKGpBKCJFIix2b2lkIDAsdCksdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKHQpKX1jb21wbGV0ZSgpe3RoaXMuaXNTdG9wcGVkP1dBKHg0LHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX11bnN1YnNjcmliZSgpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsc3VwZXIudW5zdWJzY3JpYmUoKSx0aGlzLmRlc3RpbmF0aW9uPW51bGwpfV9uZXh0KHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KX1fZXJyb3IodCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fV9jb21wbGV0ZSgpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fX0sZXJlPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIEdBKG4sdCl7cmV0dXJuIGVyZS5jYWxsKG4sdCl9dmFyIGxsPWNsYXNzIGV4dGVuZHMgT3B7Y29uc3RydWN0b3IodCxlLGkpe2xldCByO2lmKHN1cGVyKCksX24odCl8fCF0KXI9e25leHQ6dD8/dm9pZCAwLGVycm9yOmU/P3ZvaWQgMCxjb21wbGV0ZTppPz92b2lkIDB9O2Vsc2V7bGV0IG87dGhpcyYmYWwudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0PyhvPU9iamVjdC5jcmVhdGUodCksby51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLHI9e25leHQ6dC5uZXh0JiZHQSh0Lm5leHQsbyksZXJyb3I6dC5lcnJvciYmR0EodC5lcnJvcixvKSxjb21wbGV0ZTp0LmNvbXBsZXRlJiZHQSh0LmNvbXBsZXRlLG8pfSk6cj10fXRoaXMuZGVzdGluYXRpb249bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucGFydGlhbE9ic2VydmVyPXR9bmV4dCh0KXtsZXR7cGFydGlhbE9ic2VydmVyOmV9PXRoaXM7aWYoZS5uZXh0KXRyeXtlLm5leHQodCl9Y2F0Y2goaSl7ZEMoaSl9fWVycm9yKHQpe2xldHtwYXJ0aWFsT2JzZXJ2ZXI6ZX09dGhpcztpZihlLmVycm9yKXRyeXtlLmVycm9yKHQpfWNhdGNoKGkpe2RDKGkpfWVsc2UgZEModCl9Y29tcGxldGUoKXtsZXR7cGFydGlhbE9ic2VydmVyOnR9PXRoaXM7aWYodC5jb21wbGV0ZSl0cnl7dC5jb21wbGV0ZSgpfWNhdGNoKGUpe2RDKGUpfX19KHIpfX07ZnVuY3Rpb24gZEMobil7YWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz9mdW5jdGlvbihuKXthbC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZQcCYmKFBwLmVycm9yVGhyb3duPSEwLFBwLmVycm9yPW4pfShuKTpjQyhuKX1mdW5jdGlvbiBXQShuLHQpe2xldHtvblN0b3BwZWROb3RpZmljYXRpb246ZX09YWw7ZSYmQm0uc2V0VGltZW91dCgoKT0+ZShuLHQpKX12YXIgbnJlPXtjbG9zZWQ6ITAsbmV4dDpzbCxlcnJvcjpmdW5jdGlvbihuKXt0aHJvdyBufSxjb21wbGV0ZTpzbH0sSG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUiO2Z1bmN0aW9uIGxhKG4pe3JldHVybiBufWZ1bmN0aW9uIFhBKG4pe3JldHVybiAwPT09bi5sZW5ndGg/bGE6MT09PW4ubGVuZ3RoP25bMF06ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucmVkdWNlKChpLHIpPT5yKGkpLGUpfX12YXIgZW49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlJiYodGhpcy5fc3Vic2NyaWJlPWUpfWxpZnQoZSl7bGV0IGk9bmV3IG47cmV0dXJuIGkuc291cmNlPXRoaXMsaS5vcGVyYXRvcj1lLGl9c3Vic2NyaWJlKGUsaSxyKXtsZXQgbz1mdW5jdGlvbihuKXtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIE9wfHxmdW5jdGlvbihuKXtyZXR1cm4gbiYmX24obi5uZXh0KSYmX24obi5lcnJvcikmJl9uKG4uY29tcGxldGUpfShuKSYmbEMobil9KGUpP2U6bmV3IGxsKGUsaSxyKTtyZXR1cm4gVm0oKCk9PntsZXR7b3BlcmF0b3I6YSxzb3VyY2U6c309dGhpcztvLmFkZChhP2EuY2FsbChvLHMpOnM/dGhpcy5fc3Vic2NyaWJlKG8pOnRoaXMuX3RyeVN1YnNjcmliZShvKSl9KSxvfV90cnlTdWJzY3JpYmUoZSl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUoZSl9Y2F0Y2goaSl7ZS5lcnJvcihpKX19Zm9yRWFjaChlLGkpe3JldHVybiBuZXcoaT1TNChpKSkoKHIsbyk9PntsZXQgYT1uZXcgbGwoe25leHQ6cz0+e3RyeXtlKHMpfWNhdGNoKGwpe28obCksYS51bnN1YnNjcmliZSgpfX0sZXJyb3I6byxjb21wbGV0ZTpyfSk7dGhpcy5zdWJzY3JpYmUoYSl9KX1fc3Vic2NyaWJlKGUpe3ZhciBpO3JldHVybiBudWxsPT09KGk9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN1YnNjcmliZShlKX1bSG1dKCl7cmV0dXJuIHRoaXN9cGlwZSguLi5lKXtyZXR1cm4gWEEoZSkodGhpcyl9dG9Qcm9taXNlKGUpe3JldHVybiBuZXcoZT1TNChlKSkoKGkscik9PntsZXQgbzt0aGlzLnN1YnNjcmliZShhPT5vPWEsYT0+cihhKSwoKT0+aShvKSl9KX19cmV0dXJuIG4uY3JlYXRlPXQ9Pm5ldyBuKHQpLG59KSgpO2Z1bmN0aW9uIFM0KG4pe3ZhciB0O3JldHVybiBudWxsIT09KHQ9bj8/YWwuUHJvbWlzZSkmJnZvaWQgMCE9PXQ/dDpQcm9taXNlfWZ1bmN0aW9uIFFBKG4pe3JldHVybiBfbihuPy5saWZ0KX1mdW5jdGlvbiBLdChuKXtyZXR1cm4gdD0+e2lmKFFBKHQpKXJldHVybiB0LmxpZnQoZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBuKGUsdGhpcyl9Y2F0Y2goaSl7dGhpcy5lcnJvcihpKX19KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZSIpfX1mdW5jdGlvbiBIdChuLHQsZSxpLHIpe3JldHVybiBuZXcgRl8obix0LGUsaSxyKX12YXIgWkEsRl89Y2xhc3MgZXh0ZW5kcyBPcHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8sYSl7c3VwZXIodCksdGhpcy5vbkZpbmFsaXplPW8sdGhpcy5zaG91bGRVbnN1YnNjcmliZT1hLHRoaXMuX25leHQ9ZT9mdW5jdGlvbihzKXt0cnl7ZShzKX1jYXRjaChsKXt0LmVycm9yKGwpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9cj9mdW5jdGlvbihzKXt0cnl7cihzKX1jYXRjaChsKXt0LmVycm9yKGwpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWk/ZnVuY3Rpb24oKXt0cnl7aSgpfWNhdGNoKHMpe3QuZXJyb3Iocyl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgdDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtsZXR7Y2xvc2VkOmV9PXRoaXM7c3VwZXIudW5zdWJzY3JpYmUoKSwhZSYmKG51bGw9PT0odD10aGlzLm9uRmluYWxpemUpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcykpfX19LExfPWNsYXNzIGV4dGVuZHMgZW57Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc291cmNlPXQsdGhpcy5zdWJqZWN0RmFjdG9yeT1lLHRoaXMuX3N1YmplY3Q9bnVsbCx0aGlzLl9yZWZDb3VudD0wLHRoaXMuX2Nvbm5lY3Rpb249bnVsbCxRQSh0KSYmKHRoaXMubGlmdD10LmxpZnQpfV9zdWJzY3JpYmUodCl7cmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZSh0KX1nZXRTdWJqZWN0KCl7bGV0IHQ9dGhpcy5fc3ViamVjdDtyZXR1cm4oIXR8fHQuaXNTdG9wcGVkKSYmKHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fV90ZWFyZG93bigpe3RoaXMuX3JlZkNvdW50PTA7bGV0e19jb25uZWN0aW9uOnR9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsdD8udW5zdWJzY3JpYmUoKX1jb25uZWN0KCl7bGV0IHQ9dGhpcy5fY29ubmVjdGlvbjtpZighdCl7dD10aGlzLl9jb25uZWN0aW9uPW5ldyB5bjtsZXQgZT10aGlzLmdldFN1YmplY3QoKTt0LmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUoSHQoZSx2b2lkIDAsKCk9Pnt0aGlzLl90ZWFyZG93bigpLGUuY29tcGxldGUoKX0saT0+e3RoaXMuX3RlYXJkb3duKCksZS5lcnJvcihpKX0sKCk9PnRoaXMuX3RlYXJkb3duKCkpKSksdC5jbG9zZWQmJih0aGlzLl9jb25uZWN0aW9uPW51bGwsdD15bi5FTVBUWSl9cmV0dXJuIHR9cmVmQ291bnQoKXtyZXR1cm4gS3QoKG4sdCk9PntsZXQgZT1udWxsO24uX3JlZkNvdW50Kys7bGV0IGk9SHQodCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFufHxuLl9yZWZDb3VudDw9MHx8MDwtLW4uX3JlZkNvdW50KXJldHVybiB2b2lkKGU9bnVsbCk7bGV0IHI9bi5fY29ubmVjdGlvbixvPWU7ZT1udWxsLHImJighb3x8cj09PW8pJiZyLnVuc3Vic2NyaWJlKCksdC51bnN1YnNjcmliZSgpfSk7bi5zdWJzY3JpYmUoaSksaS5jbG9zZWR8fChlPW4uY29ubmVjdCgpKX0pKHRoaXMpfX0sem09e3NjaGVkdWxlKG4pe2xldCB0PXJlcXVlc3RBbmltYXRpb25GcmFtZSxlPWNhbmNlbEFuaW1hdGlvbkZyYW1lLHtkZWxlZ2F0ZTppfT16bTtpJiYodD1pLnJlcXVlc3RBbmltYXRpb25GcmFtZSxlPWkuY2FuY2VsQW5pbWF0aW9uRnJhbWUpO2xldCByPXQobz0+e2U9dm9pZCAwLG4obyl9KTtyZXR1cm4gbmV3IHluKCgpPT5lPy4ocikpfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4ubil7bGV0e2RlbGVnYXRlOnR9PXptO3JldHVybih0Py5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHJlcXVlc3RBbmltYXRpb25GcmFtZSkoLi4ubil9LGNhbmNlbEFuaW1hdGlvbkZyYW1lKC4uLm4pe2xldHtkZWxlZ2F0ZTp0fT16bTtyZXR1cm4odD8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNhbmNlbEFuaW1hdGlvbkZyYW1lKSguLi5uKX0sZGVsZWdhdGU6dm9pZCAwfSxUND1ObShuPT5mdW5jdGlvbigpe24odGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pLEFlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBlbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5jbG9zZWQ9ITEsdGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsdGhpcy5vYnNlcnZlcnM9W10sdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5oYXNFcnJvcj0hMSx0aGlzLnRocm93bkVycm9yPW51bGx9bGlmdChlKXtsZXQgaT1uZXcgdUModGhpcyx0aGlzKTtyZXR1cm4gaS5vcGVyYXRvcj1lLGl9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgVDR9bmV4dChlKXtWbSgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzKSk7Zm9yKGxldCBpIG9mIHRoaXMuY3VycmVudE9ic2VydmVycylpLm5leHQoZSl9fSl9ZXJyb3IoZSl7Vm0oKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmhhc0Vycm9yPXRoaXMuaXNTdG9wcGVkPSEwLHRoaXMudGhyb3duRXJyb3I9ZTtsZXR7b2JzZXJ2ZXJzOml9PXRoaXM7Zm9yKDtpLmxlbmd0aDspaS5zaGlmdCgpLmVycm9yKGUpfX0pfWNvbXBsZXRlKCl7Vm0oKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmlzU3RvcHBlZD0hMDtsZXR7b2JzZXJ2ZXJzOmV9PXRoaXM7Zm9yKDtlLmxlbmd0aDspZS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgZTtyZXR1cm4obnVsbD09PShlPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShlKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoZSl9X3N1YnNjcmliZShlKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksdGhpcy5faW5uZXJTdWJzY3JpYmUoZSl9X2lubmVyU3Vic2NyaWJlKGUpe2xldHtoYXNFcnJvcjppLGlzU3RvcHBlZDpyLG9ic2VydmVyczpvfT10aGlzO3JldHVybiBpfHxyP1VBOih0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxvLnB1c2goZSksbmV3IHluKCgpPT57dGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsa3AobyxlKX0pKX1fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKXtsZXR7aGFzRXJyb3I6aSx0aHJvd25FcnJvcjpyLGlzU3RvcHBlZDpvfT10aGlzO2k/ZS5lcnJvcihyKTpvJiZlLmNvbXBsZXRlKCl9YXNPYnNlcnZhYmxlKCl7bGV0IGU9bmV3IGVuO3JldHVybiBlLnNvdXJjZT10aGlzLGV9fXJldHVybiBuLmNyZWF0ZT0odCxlKT0+bmV3IHVDKHQsZSksbn0pKCksdUM9Y2xhc3MgZXh0ZW5kcyBBZXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj10LHRoaXMuc291cmNlPWV9bmV4dCh0KXt2YXIgZSxpO251bGw9PT0oaT1udWxsPT09KGU9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUubmV4dCl8fHZvaWQgMD09PWl8fGkuY2FsbChlLHQpfWVycm9yKHQpe3ZhciBlLGk7bnVsbD09PShpPW51bGw9PT0oZT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lcnJvcil8fHZvaWQgMD09PWl8fGkuY2FsbChlLHQpfWNvbXBsZXRlKCl7dmFyIHQsZTtudWxsPT09KGU9bnVsbD09PSh0PXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHQpfV9zdWJzY3JpYmUodCl7dmFyIGUsaTtyZXR1cm4gbnVsbCE9PShpPW51bGw9PT0oZT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3Vic2NyaWJlKHQpKSYmdm9pZCAwIT09aT9pOlVBfX0sUmk9Y2xhc3MgZXh0ZW5kcyBBZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3ZhbHVlPXR9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX1fc3Vic2NyaWJlKHQpe2xldCBlPXN1cGVyLl9zdWJzY3JpYmUodCk7cmV0dXJuIWUuY2xvc2VkJiZ0Lm5leHQodGhpcy5fdmFsdWUpLGV9Z2V0VmFsdWUoKXtsZXR7aGFzRXJyb3I6dCx0aHJvd25FcnJvcjplLF92YWx1ZTppfT10aGlzO2lmKHQpdGhyb3cgZTtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGl9bmV4dCh0KXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPXQpfX0sTl89e25vdzooKT0+KE5fLmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9LEZwPWNsYXNzIGV4dGVuZHMgQWV7Y29uc3RydWN0b3IodD0xLzAsZT0xLzAsaT1OXyl7c3VwZXIoKSx0aGlzLl9idWZmZXJTaXplPXQsdGhpcy5fd2luZG93VGltZT1lLHRoaXMuX3RpbWVzdGFtcFByb3ZpZGVyPWksdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ZT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsdCksdGhpcy5fd2luZG93VGltZT1NYXRoLm1heCgxLGUpfW5leHQodCl7bGV0e2lzU3RvcHBlZDplLF9idWZmZXI6aSxfaW5maW5pdGVUaW1lV2luZG93OnIsX3RpbWVzdGFtcFByb3ZpZGVyOm8sX3dpbmRvd1RpbWU6YX09dGhpcztlfHwoaS5wdXNoKHQpLCFyJiZpLnB1c2goby5ub3coKSthKSksdGhpcy5fdHJpbUJ1ZmZlcigpLHN1cGVyLm5leHQodCl9X3N1YnNjcmliZSh0KXt0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fdHJpbUJ1ZmZlcigpO2xldCBlPXRoaXMuX2lubmVyU3Vic2NyaWJlKHQpLHtfaW5maW5pdGVUaW1lV2luZG93OmksX2J1ZmZlcjpyfT10aGlzLG89ci5zbGljZSgpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGgmJiF0LmNsb3NlZDthKz1pPzE6Mil0Lm5leHQob1thXSk7cmV0dXJuIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXModCksZX1fdHJpbUJ1ZmZlcigpe2xldHtfYnVmZmVyU2l6ZTp0LF90aW1lc3RhbXBQcm92aWRlcjplLF9idWZmZXI6aSxfaW5maW5pdGVUaW1lV2luZG93OnJ9PXRoaXMsbz0ocj8xOjIpKnQ7aWYodDwxLzAmJm88aS5sZW5ndGgmJmkuc3BsaWNlKDAsaS5sZW5ndGgtbyksIXIpe2xldCBhPWUubm93KCkscz0wO2ZvcihsZXQgbD0xO2w8aS5sZW5ndGgmJmlbbF08PWE7bCs9MilzPWw7cyYmaS5zcGxpY2UoMCxzKzEpfX19LHBDPWNsYXNzIGV4dGVuZHMgeW57Y29uc3RydWN0b3IodCxlKXtzdXBlcigpfXNjaGVkdWxlKHQsZT0wKXtyZXR1cm4gdGhpc319LEJfPXtzZXRJbnRlcnZhbChuLHQsLi4uZSl7bGV0e2RlbGVnYXRlOml9PUJfO3JldHVybiBpPy5zZXRJbnRlcnZhbD9pLnNldEludGVydmFsKG4sdCwuLi5lKTpzZXRJbnRlcnZhbChuLHQsLi4uZSl9LGNsZWFySW50ZXJ2YWwobil7bGV0e2RlbGVnYXRlOnR9PUJfO3JldHVybih0Py5jbGVhckludGVydmFsfHxjbGVhckludGVydmFsKShuKX0sZGVsZWdhdGU6dm9pZCAwfSwkbD1jbGFzcyBleHRlbmRzIHBDe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lLHRoaXMucGVuZGluZz0hMX1zY2hlZHVsZSh0LGU9MCl7dmFyIGk7aWYodGhpcy5jbG9zZWQpcmV0dXJuIHRoaXM7dGhpcy5zdGF0ZT10O2xldCByPXRoaXMuaWQsbz10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbnVsbCE9ciYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChvLHIsZSkpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PWUsdGhpcy5pZD1udWxsIT09KGk9dGhpcy5pZCkmJnZvaWQgMCE9PWk/aTp0aGlzLnJlcXVlc3RBc3luY0lkKG8sdGhpcy5pZCxlKSx0aGlzfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBCXy5zZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCx0aGlzKSxpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXtpZihudWxsIT1pJiZ0aGlzLmRlbGF5PT09aSYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJuIGU7bnVsbCE9ZSYmQl8uY2xlYXJJbnRlcnZhbChlKX1leGVjdXRlKHQsZSl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG5ldyBFcnJvcigiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbiIpO3RoaXMucGVuZGluZz0hMTtsZXQgaT10aGlzLl9leGVjdXRlKHQsZSk7aWYoaSlyZXR1cm4gaTshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZSh0LGUpe2xldCByLGk9ITE7dHJ5e3RoaXMud29yayh0KX1jYXRjaChvKXtpPSEwLHI9b3x8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoaSlyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLHJ9dW5zdWJzY3JpYmUoKXtpZighdGhpcy5jbG9zZWQpe2xldHtpZDp0LHNjaGVkdWxlcjplfT10aGlzLHthY3Rpb25zOml9PWU7dGhpcy53b3JrPXRoaXMuc3RhdGU9dGhpcy5zY2hlZHVsZXI9bnVsbCx0aGlzLnBlbmRpbmc9ITEsa3AoaSx0aGlzKSxudWxsIT10JiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGUsdCxudWxsKSksdGhpcy5kZWxheT1udWxsLHN1cGVyLnVuc3Vic2NyaWJlKCl9fX0sb3JlPTEsS0E9e307ZnVuY3Rpb24gRDQobil7cmV0dXJuIG4gaW4gS0EmJihkZWxldGUgS0Fbbl0sITApfXZhciBJND17c2V0SW1tZWRpYXRlKG4pe2xldCB0PW9yZSsrO3JldHVybiBLQVt0XT0hMCxaQXx8KFpBPVByb21pc2UucmVzb2x2ZSgpKSxaQS50aGVuKCgpPT5ENCh0KSYmbigpKSx0fSxjbGVhckltbWVkaWF0ZShuKXtENChuKX19LHtzZXRJbW1lZGlhdGU6YXJlLGNsZWFySW1tZWRpYXRlOnNyZX09STQsVl89e3NldEltbWVkaWF0ZSguLi5uKXtsZXR7ZGVsZWdhdGU6dH09Vl87cmV0dXJuKHQ/LnNldEltbWVkaWF0ZXx8YXJlKSguLi5uKX0sY2xlYXJJbW1lZGlhdGUobil7bGV0e2RlbGVnYXRlOnR9PVZfO3JldHVybih0Py5jbGVhckltbWVkaWF0ZXx8c3JlKShuKX0sZGVsZWdhdGU6dm9pZCAwfSxLZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9S2Qubm93KXt0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3I9dCx0aGlzLm5vdz1lfXNjaGVkdWxlKHQsZT0wLGkpe3JldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsdCkuc2NoZWR1bGUoaSxlKX19O0tkLm5vdz1OXy5ub3c7dmFyIGVjPWNsYXNzIGV4dGVuZHMgS2R7Y29uc3RydWN0b3IodCxlPUtkLm5vdyl7c3VwZXIodCxlKSx0aGlzLmFjdGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKHQpe2xldCBpLHthY3Rpb25zOmV9PXRoaXM7aWYodGhpcy5fYWN0aXZlKWUucHVzaCh0KTtlbHNle3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihpPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKHQ9ZS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaSl7Zm9yKDt0PWUuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IGl9fX19LFVtPW5ldyBjbGFzcyBleHRlbmRzIGVje2ZsdXNoKHQpe3RoaXMuX2FjdGl2ZT0hMDtsZXQgZT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtsZXQgcix7YWN0aW9uczppfT10aGlzO3Q9dHx8aS5zaGlmdCgpO2Rve2lmKHI9dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUoKHQ9aVswXSkmJnQuaWQ9PT1lJiZpLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxyKXtmb3IoOyh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgcn19fShjbGFzcyBleHRlbmRzICRse2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBudWxsIT09aSYmaT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5hY3Rpb25zLnB1c2godGhpcyksdC5fc2NoZWR1bGVkfHwodC5fc2NoZWR1bGVkPVZfLnNldEltbWVkaWF0ZSh0LmZsdXNoLmJpbmQodCx2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKHQsZSxpPTApe3ZhciByO2lmKG51bGwhPWk/aT4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQodCxlLGkpO2xldHthY3Rpb25zOm99PXQ7bnVsbCE9ZSYmKG51bGw9PT0ocj1vW28ubGVuZ3RoLTFdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pZCkhPT1lJiYoVl8uY2xlYXJJbW1lZGlhdGUoZSksdC5fc2NoZWR1bGVkPXZvaWQgMCl9fSksUWM9bmV3IGVjKCRsKSxBND1RYyxKQT1uZXcgY2xhc3MgZXh0ZW5kcyBlY3t9KGNsYXNzIGV4dGVuZHMgJGx7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWV9c2NoZWR1bGUodCxlPTApe3JldHVybiBlPjA/c3VwZXIuc2NoZWR1bGUodCxlKToodGhpcy5kZWxheT1lLHRoaXMuc3RhdGU9dCx0aGlzLnNjaGVkdWxlci5mbHVzaCh0aGlzKSx0aGlzKX1leGVjdXRlKHQsZSl7cmV0dXJuIGU+MHx8dGhpcy5jbG9zZWQ/c3VwZXIuZXhlY3V0ZSh0LGUpOnRoaXMuX2V4ZWN1dGUodCxlKX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9aSYmaT4wfHxudWxsPT1pJiZ0aGlzLmRlbGF5PjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLGkpOih0LmZsdXNoKHRoaXMpLDApfX0pLCRBPW5ldyBjbGFzcyBleHRlbmRzIGVje2ZsdXNoKHQpe3RoaXMuX2FjdGl2ZT0hMDtsZXQgZT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtsZXQgcix7YWN0aW9uczppfT10aGlzO3Q9dHx8aS5zaGlmdCgpO2Rve2lmKHI9dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUoKHQ9aVswXSkmJnQuaWQ9PT1lJiZpLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxyKXtmb3IoOyh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgcn19fShjbGFzcyBleHRlbmRzICRse2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBudWxsIT09aSYmaT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5hY3Rpb25zLnB1c2godGhpcyksdC5fc2NoZWR1bGVkfHwodC5fc2NoZWR1bGVkPXptLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dC5mbHVzaCh2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKHQsZSxpPTApe3ZhciByO2lmKG51bGwhPWk/aT4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQodCxlLGkpO2xldHthY3Rpb25zOm99PXQ7bnVsbCE9ZSYmKG51bGw9PT0ocj1vW28ubGVuZ3RoLTFdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pZCkhPT1lJiYoem0uY2FuY2VsQW5pbWF0aW9uRnJhbWUoZSksdC5fc2NoZWR1bGVkPXZvaWQgMCl9fSksdG89bmV3IGVuKG49Pm4uY29tcGxldGUoKSk7ZnVuY3Rpb24gYkMobil7cmV0dXJuIG4mJl9uKG4uc2NoZWR1bGUpfWZ1bmN0aW9uIGVSKG4pe3JldHVybiBuW24ubGVuZ3RoLTFdfWZ1bmN0aW9uIHRjKG4pe3JldHVybiBfbihlUihuKSk/bi5wb3AoKTp2b2lkIDB9ZnVuY3Rpb24gbmMobil7cmV0dXJuIGJDKGVSKG4pKT9uLnBvcCgpOnZvaWQgMH12YXIgckg9YjQoaUgoKSwxKSx7X19kZWNvcmF0ZTpvSCxfX2F3YWl0ZXI6YUgsX19hd2FpdDpNQyxfX2FzeW5jR2VuZXJhdG9yOnNILF9fYXN5bmNWYWx1ZXM6bEh9PXJILmRlZmF1bHQsR209bj0+biYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIG47ZnVuY3Rpb24gd0Mobil7cmV0dXJuIF9uKG4/LnRoZW4pfWZ1bmN0aW9uIFNDKG4pe3JldHVybiBfbihuW0htXSl9ZnVuY3Rpb24gRUMobil7cmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yJiZfbihuPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBUQyhuKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2Ygbj8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtufSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfXZhciBEQz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIjtmdW5jdGlvbiBJQyhuKXtyZXR1cm4gX24obj8uW0RDXSl9ZnVuY3Rpb24gQUMobil7cmV0dXJuIHNIKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2xldCBlPW4uZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7bGV0e3ZhbHVlOmksZG9uZTpyfT15aWVsZCBNQyhlLnJlYWQoKSk7aWYocilyZXR1cm4geWllbGQgTUModm9pZCAwKTt5aWVsZCB5aWVsZCBNQyhpKX19ZmluYWxseXtlLnJlbGVhc2VMb2NrKCl9fSl9ZnVuY3Rpb24gUkMobil7cmV0dXJuIF9uKG4/LmdldFJlYWRlcil9ZnVuY3Rpb24gb2kobil7aWYobiBpbnN0YW5jZW9mIGVuKXJldHVybiBuO2lmKG51bGwhPW4pe2lmKFNDKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGVuKHQ9PntsZXQgZT1uW0htXSgpO2lmKF9uKGUuc3Vic2NyaWJlKSlyZXR1cm4gZS5zdWJzY3JpYmUodCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfShuKTtpZihHbShuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBlbih0PT57Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aCYmIXQuY2xvc2VkO2UrKyl0Lm5leHQobltlXSk7dC5jb21wbGV0ZSgpfSl9KG4pO2lmKHdDKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGVuKHQ9PntuLnRoZW4oZT0+e3QuY2xvc2VkfHwodC5uZXh0KGUpLHQuY29tcGxldGUoKSl9LGU9PnQuZXJyb3IoZSkpLnRoZW4obnVsbCxjQyl9KX0obik7aWYoRUMobikpcmV0dXJuIGNIKG4pO2lmKElDKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGVuKHQ9Pntmb3IobGV0IGUgb2YgbilpZih0Lm5leHQoZSksdC5jbG9zZWQpcmV0dXJuO3QuY29tcGxldGUoKX0pfShuKTtpZihSQyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGNIKEFDKG4pKX0obil9dGhyb3cgVEMobil9ZnVuY3Rpb24gY0gobil7cmV0dXJuIG5ldyBlbih0PT57KGZ1bmN0aW9uKG4sdCl7dmFyIGUsaSxyLG87cmV0dXJuIGFIKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0cnl7Zm9yKGU9bEgobik7IShpPXlpZWxkIGUubmV4dCgpKS5kb25lOylpZih0Lm5leHQoaS52YWx1ZSksdC5jbG9zZWQpcmV0dXJufWNhdGNoKGEpe3I9e2Vycm9yOmF9fWZpbmFsbHl7dHJ5e2kmJiFpLmRvbmUmJihvPWUucmV0dXJuKSYmKHlpZWxkIG8uY2FsbChlKSl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fXQuY29tcGxldGUoKX0pfSkobix0KS5jYXRjaChlPT50LmVycm9yKGUpKX0pfWZ1bmN0aW9uIHdhKG4sdCxlLGk9MCxyPSExKXtsZXQgbz10LnNjaGVkdWxlKGZ1bmN0aW9uKCl7ZSgpLHI/bi5hZGQodGhpcy5zY2hlZHVsZShudWxsLGkpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LGkpO2lmKG4uYWRkKG8pLCFyKXJldHVybiBvfWZ1bmN0aW9uIExwKG4sdD0wKXtyZXR1cm4gS3QoKGUsaSk9PntlLnN1YnNjcmliZShIdChpLHI9PndhKGksbiwoKT0+aS5uZXh0KHIpLHQpLCgpPT53YShpLG4sKCk9PmkuY29tcGxldGUoKSx0KSxyPT53YShpLG4sKCk9PmkuZXJyb3IociksdCkpKX0pfWZ1bmN0aW9uIGtDKG4sdD0wKXtyZXR1cm4gS3QoKGUsaSk9PntpLmFkZChuLnNjaGVkdWxlKCgpPT5lLnN1YnNjcmliZShpKSx0KSl9KX1mdW5jdGlvbiBQQyhuLHQpe2lmKCFuKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IGVuKGU9Pnt3YShlLHQsKCk9PntsZXQgaT1uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO3dhKGUsdCwoKT0+e2kubmV4dCgpLnRoZW4ocj0+e3IuZG9uZT9lLmNvbXBsZXRlKCk6ZS5uZXh0KHIudmFsdWUpfSl9LDAsITApfSl9KX1mdW5jdGlvbiBubyhuLHQpe3JldHVybiB0P2Z1bmN0aW9uKG4sdCl7aWYobnVsbCE9bil7aWYoU0MobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG9pKG4pLnBpcGUoa0ModCksTHAodCkpfShuLHQpO2lmKEdtKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBuZXcgZW4oZT0+e2xldCBpPTA7cmV0dXJuIHQuc2NoZWR1bGUoZnVuY3Rpb24oKXtpPT09bi5sZW5ndGg/ZS5jb21wbGV0ZSgpOihlLm5leHQobltpKytdKSxlLmNsb3NlZHx8dGhpcy5zY2hlZHVsZSgpKX0pfSl9KG4sdCk7aWYod0MobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG9pKG4pLnBpcGUoa0ModCksTHAodCkpfShuLHQpO2lmKEVDKG4pKXJldHVybiBQQyhuLHQpO2lmKElDKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBuZXcgZW4oZT0+e2xldCBpO3JldHVybiB3YShlLHQsKCk9PntpPW5bRENdKCksd2EoZSx0LCgpPT57bGV0IHIsbzt0cnl7KHt2YWx1ZTpyLGRvbmU6b309aS5uZXh0KCkpfWNhdGNoKGEpe3JldHVybiB2b2lkIGUuZXJyb3IoYSl9bz9lLmNvbXBsZXRlKCk6ZS5uZXh0KHIpfSwwLCEwKX0pLCgpPT5fbihpPy5yZXR1cm4pJiZpLnJldHVybigpfSl9KG4sdCk7aWYoUkMobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIFBDKEFDKG4pLHQpfShuLHQpfXRocm93IFRDKG4pfShuLHQpOm9pKG4pfWZ1bmN0aW9uIHF0KC4uLm4pe3JldHVybiBubyhuLG5jKG4pKX1mdW5jdGlvbiBjbChuLHQpe2xldCBlPV9uKG4pP246KCk9Pm4saT1yPT5yLmVycm9yKGUoKSk7cmV0dXJuIG5ldyBlbih0P3I9PnQuc2NoZWR1bGUoaSwwLHIpOmkpfXZhciB2cz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5raW5kPXQsdGhpcy52YWx1ZT1lLHRoaXMuZXJyb3I9aSx0aGlzLmhhc1ZhbHVlPSJOIj09PXR9b2JzZXJ2ZSh0KXtyZXR1cm4gblIodGhpcyx0KX1kbyh0LGUsaSl7bGV0e2tpbmQ6cix2YWx1ZTpvLGVycm9yOmF9PXRoaXM7cmV0dXJuIk4iPT09cj90Py4obyk6IkUiPT09cj9lPy4oYSk6aT8uKCl9YWNjZXB0KHQsZSxpKXt2YXIgcjtyZXR1cm4gX24obnVsbD09PShyPXQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm5leHQpP3RoaXMub2JzZXJ2ZSh0KTp0aGlzLmRvKHQsZSxpKX10b09ic2VydmFibGUoKXtsZXR7a2luZDp0LHZhbHVlOmUsZXJyb3I6aX09dGhpcyxyPSJOIj09PXQ/cXQoZSk6IkUiPT09dD9jbCgoKT0+aSk6IkMiPT09dD90bzowO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uIGtpbmQgJHt0fWApO3JldHVybiByfXN0YXRpYyBjcmVhdGVOZXh0KHQpe3JldHVybiBuZXcgdnMoIk4iLHQpfXN0YXRpYyBjcmVhdGVFcnJvcih0KXtyZXR1cm4gbmV3IHZzKCJFIix2b2lkIDAsdCl9c3RhdGljIGNyZWF0ZUNvbXBsZXRlKCl7cmV0dXJuIHZzLmNvbXBsZXRlTm90aWZpY2F0aW9ufX07ZnVuY3Rpb24gblIobix0KXt2YXIgZSxpLHI7bGV0e2tpbmQ6byx2YWx1ZTphLGVycm9yOnN9PW47aWYoInN0cmluZyIhPXR5cGVvZiBvKXRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm90aWZpY2F0aW9uLCBtaXNzaW5nICJraW5kIicpOyJOIj09PW8/bnVsbD09PShlPXQubmV4dCl8fHZvaWQgMD09PWV8fGUuY2FsbCh0LGEpOiJFIj09PW8/bnVsbD09PShpPXQuZXJyb3IpfHx2b2lkIDA9PT1pfHxpLmNhbGwodCxzKTpudWxsPT09KHI9dC5jb21wbGV0ZSl8fHZvaWQgMD09PXJ8fHIuY2FsbCh0KX1mdW5jdGlvbiBIXyhuKXtyZXR1cm4hIW4mJihuIGluc3RhbmNlb2YgZW58fF9uKG4ubGlmdCkmJl9uKG4uc3Vic2NyaWJlKSl9dnMuY29tcGxldGVOb3RpZmljYXRpb249bmV3IHZzKCJDIik7dmFyIFdtPU5tKG49PmZ1bmN0aW9uKCl7bih0aGlzKSx0aGlzLm5hbWU9IkVtcHR5RXJyb3IiLHRoaXMubWVzc2FnZT0ibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UifSk7ZnVuY3Rpb24gT0Mobix0KXtsZXQgZT0ib2JqZWN0Ij09dHlwZW9mIHQ7cmV0dXJuIG5ldyBQcm9taXNlKChpLHIpPT57bGV0IG89bmV3IGxsKHtuZXh0OmE9PntpKGEpLG8udW5zdWJzY3JpYmUoKX0sZXJyb3I6cixjb21wbGV0ZTooKT0+e2U/aSh0LmRlZmF1bHRWYWx1ZSk6cihuZXcgV20pfX0pO24uc3Vic2NyaWJlKG8pfSl9ZnVuY3Rpb24gVShuLHQpe3JldHVybiBLdCgoZSxpKT0+e2xldCByPTA7ZS5zdWJzY3JpYmUoSHQoaSxvPT57aS5uZXh0KG4uY2FsbCh0LG8scisrKSl9KSl9KX12YXJ7aXNBcnJheTpocmV9PUFycmF5O2Z1bmN0aW9uIEpkKG4pe3JldHVybiBVKHQ9PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGhyZSh0KT9uKC4uLnQpOm4odCl9KG4sdCkpfXZhcntpc0FycmF5Ol9yZX09QXJyYXkse2dldFByb3RvdHlwZU9mOnlyZSxwcm90b3R5cGU6YnJlLGtleXM6dnJlfT1PYmplY3Q7ZnVuY3Rpb24gRkMobil7aWYoMT09PW4ubGVuZ3RoKXtsZXQgdD1uWzBdO2lmKF9yZSh0KSlyZXR1cm57YXJnczp0LGtleXM6bnVsbH07aWYoZnVuY3Rpb24obil7cmV0dXJuIG4mJiJvYmplY3QiPT10eXBlb2YgbiYmeXJlKG4pPT09YnJlfSh0KSl7bGV0IGU9dnJlKHQpO3JldHVybnthcmdzOmUubWFwKGk9PnRbaV0pLGtleXM6ZX19fXJldHVybnthcmdzOm4sa2V5czpudWxsfX1mdW5jdGlvbiBMQyhuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpLHIpPT4oZVtpXT10W3JdLGUpLHt9KX1mdW5jdGlvbiB1biguLi5uKXtsZXQgdD1uYyhuKSxlPXRjKG4pLHthcmdzOmksa2V5czpyfT1GQyhuKTtpZigwPT09aS5sZW5ndGgpcmV0dXJuIG5vKFtdLHQpO2xldCBvPW5ldyBlbihpUihpLHQscj9hPT5MQyhyLGEpOmxhKSk7cmV0dXJuIGU/by5waXBlKEpkKGUpKTpvfWZ1bmN0aW9uIGlSKG4sdCxlPWxhKXtyZXR1cm4gaT0+e19IKHQsKCk9PntsZXR7bGVuZ3RoOnJ9PW4sbz1uZXcgQXJyYXkociksYT1yLHM9cjtmb3IobGV0IGw9MDtsPHI7bCsrKV9IKHQsKCk9PntsZXQgYz1ubyhuW2xdLHQpLGQ9ITE7Yy5zdWJzY3JpYmUoSHQoaSx1PT57b1tsXT11LGR8fChkPSEwLHMtLSksc3x8aS5uZXh0KGUoby5zbGljZSgpKSl9LCgpPT57LS1hfHxpLmNvbXBsZXRlKCl9KSl9LGkpfSxpKX19ZnVuY3Rpb24gX0gobix0LGUpe24/d2EoZSxuLHQpOnQoKX1mdW5jdGlvbiBobihuLHQsZT0xLzApe3JldHVybiBfbih0KT9obigoaSxyKT0+VSgobyxhKT0+dChpLG8scixhKSkob2kobihpLHIpKSksZSk6KCJudW1iZXIiPT10eXBlb2YgdCYmKGU9dCksS3QoKGkscik9PmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyl7bGV0IGw9W10sYz0wLGQ9MCx1PSExLHA9KCk9Pnt1JiYhbC5sZW5ndGgmJiFjJiZ0LmNvbXBsZXRlKCl9LGY9eT0+YzxpP20oeSk6bC5wdXNoKHkpLG09eT0+e2MrKztsZXQgTT0hMTtvaShlKHksZCsrKSkuc3Vic2NyaWJlKEh0KHQsdj0+e3QubmV4dCh2KX0sKCk9PntNPSEwfSx2b2lkIDAsKCk9PntpZihNKXRyeXtmb3IoYy0tO2wubGVuZ3RoJiZjPGk7KXtsZXQgdj1sLnNoaWZ0KCk7bSh2KX1wKCl9Y2F0Y2godil7dC5lcnJvcih2KX19KSl9O3JldHVybiBuLnN1YnNjcmliZShIdCh0LGYsKCk9Pnt1PSEwLHAoKX0pKSwoKT0+e319KGkscixuLGUpKSl9ZnVuY3Rpb24gTkMobj0xLzApe3JldHVybiBobihsYSxuKX1mdW5jdGlvbiAkZCguLi5uKXtyZXR1cm4gTkMoMSkobm8obixuYyhuKSkpfWZ1bmN0aW9uIEthKG4pe3JldHVybiBuZXcgZW4odD0+e29pKG4oKSkuc3Vic2NyaWJlKHQpfSl9ZnVuY3Rpb24gcG8oLi4ubil7bGV0IHQ9dGMobikse2FyZ3M6ZSxrZXlzOml9PUZDKG4pLHI9bmV3IGVuKG89PntsZXR7bGVuZ3RoOmF9PWU7aWYoIWEpcmV0dXJuIHZvaWQgby5jb21wbGV0ZSgpO2xldCBzPW5ldyBBcnJheShhKSxsPWEsYz1hO2ZvcihsZXQgZD0wO2Q8YTtkKyspe2xldCB1PSExO29pKGVbZF0pLnN1YnNjcmliZShIdChvLHA9Pnt1fHwodT0hMCxjLS0pLHNbZF09cH0sKCk9PmwtLSx2b2lkIDAsKCk9PnsoIWx8fCF1KSYmKGN8fG8ubmV4dChpP0xDKGkscyk6cyksby5jb21wbGV0ZSgpKX0pKX19KTtyZXR1cm4gdD9yLnBpcGUoSmQodCkpOnJ9dmFyIENyZT1bImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxNcmU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLHdyZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24gYWkobix0LGUsaSl7aWYoX24oZSkmJihpPWUsZT12b2lkIDApLGkpcmV0dXJuIGFpKG4sdCxlKS5waXBlKEpkKGkpKTtsZXRbcixvXT1mdW5jdGlvbihuKXtyZXR1cm4gX24obi5hZGRFdmVudExpc3RlbmVyKSYmX24obi5yZW1vdmVFdmVudExpc3RlbmVyKX0obik/TXJlLm1hcChhPT5zPT5uW2FdKHQscyxlKSk6ZnVuY3Rpb24obil7cmV0dXJuIF9uKG4uYWRkTGlzdGVuZXIpJiZfbihuLnJlbW92ZUxpc3RlbmVyKX0obik/Q3JlLm1hcCh2SChuLHQpKTpmdW5jdGlvbihuKXtyZXR1cm4gX24obi5vbikmJl9uKG4ub2ZmKX0obik/d3JlLm1hcCh2SChuLHQpKTpbXTtpZighciYmR20obikpcmV0dXJuIGhuKGE9PmFpKGEsdCxlKSkob2kobikpO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7cmV0dXJuIG5ldyBlbihhPT57bGV0IHM9KC4uLmwpPT5hLm5leHQoMTxsLmxlbmd0aD9sOmxbMF0pO3JldHVybiByKHMpLCgpPT5vKHMpfSl9ZnVuY3Rpb24gdkgobix0KXtyZXR1cm4gZT0+aT0+bltlXSh0LGkpfWZ1bmN0aW9uIEphKG49MCx0LGU9QTQpe2xldCBpPS0xO3JldHVybiBudWxsIT10JiYoYkModCk/ZT10Omk9dCksbmV3IGVuKHI9PntsZXQgbz1mdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihuKX0obik/K24tZS5ub3coKTpuO288MCYmKG89MCk7bGV0IGE9MDtyZXR1cm4gZS5zY2hlZHVsZShmdW5jdGlvbigpe3IuY2xvc2VkfHwoci5uZXh0KGErKyksMDw9aT90aGlzLnNjaGVkdWxlKHZvaWQgMCxpKTpyLmNvbXBsZXRlKCkpfSxvKX0pfWZ1bmN0aW9uIGNuKC4uLm4pe2xldCB0PW5jKG4pLGU9ZnVuY3Rpb24obix0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGVSKG4pP24ucG9wKCk6MS8wfShuKSxpPW47cmV0dXJuIGkubGVuZ3RoPzE9PT1pLmxlbmd0aD9vaShpWzBdKTpOQyhlKShubyhpLHQpKTp0b312YXJ7aXNBcnJheTpEcmV9PUFycmF5O2Z1bmN0aW9uIEJDKG4pe3JldHVybiAxPT09bi5sZW5ndGgmJkRyZShuWzBdKT9uWzBdOm59ZnVuY3Rpb24gVmUobix0KXtyZXR1cm4gS3QoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEh0KGksbz0+bi5jYWxsKHQsbyxyKyspJiZpLm5leHQobykpKX0pfWZ1bmN0aW9uIGljKG4sdD1RYyl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBLdCgodCxlKT0+e2xldCBpPSExLHI9bnVsbCxvPW51bGwsYT0hMSxzPSgpPT57aWYobz8udW5zdWJzY3JpYmUoKSxvPW51bGwsaSl7aT0hMTtsZXQgYz1yO3I9bnVsbCxlLm5leHQoYyl9YSYmZS5jb21wbGV0ZSgpfSxsPSgpPT57bz1udWxsLGEmJmUuY29tcGxldGUoKX07dC5zdWJzY3JpYmUoSHQoZSxjPT57aT0hMCxyPWMsb3x8b2kobigpKS5zdWJzY3JpYmUobz1IdChlLHMsbCkpfSwoKT0+e2E9ITAsKCFpfHwhb3x8by5jbG9zZWQpJiZlLmNvbXBsZXRlKCl9KSl9KX0oKCk9PkphKG4sdCkpfWZ1bmN0aW9uIGZvKG4pe3JldHVybiBLdCgodCxlKT0+e2xldCBvLGk9bnVsbCxyPSExO2k9dC5zdWJzY3JpYmUoSHQoZSx2b2lkIDAsdm9pZCAwLGE9PntvPW9pKG4oYSxmbyhuKSh0KSkpLGk/KGkudW5zdWJzY3JpYmUoKSxpPW51bGwsby5zdWJzY3JpYmUoZSkpOnI9ITB9KSksciYmKGkudW5zdWJzY3JpYmUoKSxpPW51bGwsby5zdWJzY3JpYmUoZSkpfSl9ZnVuY3Rpb24gYVIoLi4ubil7bGV0IHQ9dGMobik7cmV0dXJuIHQ/ZnVuY3Rpb24oLi4ubil7cmV0dXJuIFhBKG4pfShhUiguLi5uKSxKZCh0KSk6S3QoKGUsaSk9PntpUihbZSwuLi5CQyhuKV0pKGkpfSl9ZnVuY3Rpb24gVmkoLi4ubil7cmV0dXJuIGFSKC4uLm4pfWZ1bmN0aW9uIENyKG4sdD1RYyl7cmV0dXJuIEt0KChlLGkpPT57bGV0IHI9bnVsbCxvPW51bGwsYT1udWxsLHM9KCk9PntpZihyKXtyLnVuc3Vic2NyaWJlKCkscj1udWxsO2xldCBjPW87bz1udWxsLGkubmV4dChjKX19O2Z1bmN0aW9uIGwoKXtsZXQgYz1hK24sZD10Lm5vdygpO2lmKGQ8YylyZXR1cm4gcj10aGlzLnNjaGVkdWxlKHZvaWQgMCxjLWQpLHZvaWQgaS5hZGQocik7cygpfWUuc3Vic2NyaWJlKEh0KGksYz0+e289YyxhPXQubm93KCkscnx8KHI9dC5zY2hlZHVsZShsLG4pLGkuYWRkKHIpKX0sKCk9PntzKCksaS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntvPXI9bnVsbH0pKX0pfWZ1bmN0aW9uIHp0KG4pe3JldHVybiBuPD0wPygpPT50bzpLdCgodCxlKT0+e2xldCBpPTA7dC5zdWJzY3JpYmUoSHQoZSxyPT57KytpPD1uJiYoZS5uZXh0KHIpLG48PWkmJmUuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiB6Xygpe3JldHVybiBLdCgobix0KT0+e24uc3Vic2NyaWJlKEh0KHQsc2wpKX0pfWZ1bmN0aW9uIHFtKG4sdCl7cmV0dXJuIHQ/ZT0+JGQodC5waXBlKHp0KDEpLHpfKCkpLGUucGlwZShxbShuKSkpOmhuKChlLGkpPT5uKGUsaSkucGlwZSh6dCgxKSxmdW5jdGlvbihuKXtyZXR1cm4gVSgoKT0+bil9KGUpKSl9ZnVuY3Rpb24geHMobix0PVFjKXtsZXQgZT1KYShuLHQpO3JldHVybiBxbSgoKT0+ZSl9ZnVuY3Rpb24gdWkobix0PWxhKXtyZXR1cm4gbj1uPz9JcmUsS3QoKGUsaSk9PntsZXQgcixvPSEwO2Uuc3Vic2NyaWJlKEh0KGksYT0+e2xldCBzPXQoYSk7KG98fCFuKHIscykpJiYobz0hMSxyPXMsaS5uZXh0KGEpKX0pKX0pfWZ1bmN0aW9uIElyZShuLHQpe3JldHVybiBuPT09dH1mdW5jdGlvbiBTSChuPUFyZSl7cmV0dXJuIEt0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoSHQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT5pP2UuY29tcGxldGUoKTplLmVycm9yKG4oKSkpKX0pfWZ1bmN0aW9uIEFyZSgpe3JldHVybiBuZXcgV219ZnVuY3Rpb24gSEMobix0KXtyZXR1cm4gdD9lPT5lLnBpcGUoSEMoKGkscik9Pm9pKG4oaSxyKSkucGlwZShVKChvLGEpPT50KGksbyxyLGEpKSkpKTpLdCgoZSxpKT0+e2xldCByPTAsbz1udWxsLGE9ITE7ZS5zdWJzY3JpYmUoSHQoaSxzPT57b3x8KG89SHQoaSx2b2lkIDAsKCk9PntvPW51bGwsYSYmaS5jb21wbGV0ZSgpfSksb2kobihzLHIrKykpLnN1YnNjcmliZShvKSl9LCgpPT57YT0hMCwhbyYmaS5jb21wbGV0ZSgpfSkpfSl9ZnVuY3Rpb24gVUMobix0LGUsaSl7cmV0dXJuIEt0KChyLG8pPT57bGV0IGE7dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/KHtkdXJhdGlvbjplLGVsZW1lbnQ6YSxjb25uZWN0b3I6aX09dCk6YT10O2xldCBzPW5ldyBNYXAsbD1tPT57cy5mb3JFYWNoKG0pLG0obyl9LGM9bT0+bCh5PT55LmVycm9yKG0pKSxkPTAsdT0hMSxwPW5ldyBGXyhvLG09Pnt0cnl7bGV0IHk9bihtKSxNPXMuZ2V0KHkpO2lmKCFNKXtzLnNldCh5LE09aT9pKCk6bmV3IEFlKTtsZXQgdj1mdW5jdGlvbihtLHkpe2xldCBNPW5ldyBlbih2PT57ZCsrO2xldCB4PXkuc3Vic2NyaWJlKHYpO3JldHVybigpPT57eC51bnN1YnNjcmliZSgpLDA9PS0tZCYmdSYmcC51bnN1YnNjcmliZSgpfX0pO3JldHVybiBNLmtleT1tLE19KHksTSk7aWYoby5uZXh0KHYpLGUpe2xldCB4PUh0KE0sKCk9PntNLmNvbXBsZXRlKCkseD8udW5zdWJzY3JpYmUoKX0sdm9pZCAwLHZvaWQgMCwoKT0+cy5kZWxldGUoeSkpO3AuYWRkKG9pKGUodikpLnN1YnNjcmliZSh4KSl9fU0ubmV4dChhP2EobSk6bSl9Y2F0Y2goeSl7Yyh5KX19LCgpPT5sKG09Pm0uY29tcGxldGUoKSksYywoKT0+cy5jbGVhcigpLCgpPT4odT0hMCwwPT09ZCkpO3Iuc3Vic2NyaWJlKHApfSl9ZnVuY3Rpb24gWW0oKXtyZXR1cm4gS3QoKG4sdCk9PntsZXQgZSxpPSExO24uc3Vic2NyaWJlKEh0KHQscj0+e2xldCBvPWU7ZT1yLGkmJnQubmV4dChbbyxyXSksaT0hMH0pKX0pfWZ1bmN0aW9uIFNhKG49e30pe2xldHtjb25uZWN0b3I6dD0oKCk9Pm5ldyBBZSkscmVzZXRPbkVycm9yOmU9ITAscmVzZXRPbkNvbXBsZXRlOmk9ITAscmVzZXRPblJlZkNvdW50WmVybzpyPSEwfT1uO3JldHVybiBvPT57bGV0IGEscyxsLGM9MCxkPSExLHU9ITEscD0oKT0+e3M/LnVuc3Vic2NyaWJlKCkscz12b2lkIDB9LGY9KCk9PntwKCksYT1sPXZvaWQgMCxkPXU9ITF9LG09KCk9PntsZXQgeT1hO2YoKSx5Py51bnN1YnNjcmliZSgpfTtyZXR1cm4gS3QoKHksTSk9PntjKyssIXUmJiFkJiZwKCk7bGV0IHY9bD1sPz90KCk7TS5hZGQoKCk9PntjLS0sMD09PWMmJiF1JiYhZCYmKHM9ZlIobSxyKSl9KSx2LnN1YnNjcmliZShNKSwhYSYmYz4wJiYoYT1uZXcgbGwoe25leHQ6eD0+di5uZXh0KHgpLGVycm9yOng9Pnt1PSEwLHAoKSxzPWZSKGYsZSx4KSx2LmVycm9yKHgpfSxjb21wbGV0ZTooKT0+e2Q9ITAscCgpLHM9ZlIoZixpKSx2LmNvbXBsZXRlKCl9fSksb2koeSkuc3Vic2NyaWJlKGEpKX0pKG8pfX1mdW5jdGlvbiBmUihuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2xldCBpPW5ldyBsbCh7bmV4dDooKT0+e2kudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIHQoLi4uZSkuc3Vic2NyaWJlKGkpfWZ1bmN0aW9uIEVhKG4sdCxlKXtsZXQgaSxyPSExO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/KHtidWZmZXJTaXplOmk9MS8wLHdpbmRvd1RpbWU6dD0xLzAscmVmQ291bnQ6cj0hMSxzY2hlZHVsZXI6ZX09bik6aT1uPz8xLzAsU2Eoe2Nvbm5lY3RvcjooKT0+bmV3IEZwKGksdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86cn0pfWZ1bmN0aW9uICRhKG4pe3JldHVybiBWZSgodCxlKT0+bjw9ZSl9ZnVuY3Rpb24gTm4oLi4ubil7bGV0IHQ9bmMobik7cmV0dXJuIEt0KChlLGkpPT57KHQ/JGQobixlLHQpOiRkKG4sZSkpLnN1YnNjcmliZShpKX0pfWZ1bmN0aW9uIHlpKG4sdCl7cmV0dXJuIEt0KChlLGkpPT57bGV0IHI9bnVsbCxvPTAsYT0hMSxzPSgpPT5hJiYhciYmaS5jb21wbGV0ZSgpO2Uuc3Vic2NyaWJlKEh0KGksbD0+e3I/LnVuc3Vic2NyaWJlKCk7bGV0IGM9MCxkPW8rKztvaShuKGwsZCkpLnN1YnNjcmliZShyPUh0KGksdT0+aS5uZXh0KHQ/dChsLHUsZCxjKyspOnUpLCgpPT57cj1udWxsLHMoKX0pKX0sKCk9PnthPSEwLHMoKX0pKX0pfWZ1bmN0aW9uIG90KG4pe3JldHVybiBLdCgodCxlKT0+e29pKG4pLnN1YnNjcmliZShIdChlLCgpPT5lLmNvbXBsZXRlKCksc2wpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9ZnVuY3Rpb24gVV8obix0PSExKXtyZXR1cm4gS3QoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEh0KGksbz0+e2xldCBhPW4obyxyKyspOyhhfHx0KSYmaS5uZXh0KG8pLCFhJiZpLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBWdChuLHQsZSl7bGV0IGk9X24obil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9Om47cmV0dXJuIGk/S3QoKHIsbyk9Pnt2YXIgYTtudWxsPT09KGE9aS5zdWJzY3JpYmUpfHx2b2lkIDA9PT1hfHxhLmNhbGwoaSk7bGV0IHM9ITA7ci5zdWJzY3JpYmUoSHQobyxsPT57dmFyIGM7bnVsbD09PShjPWkubmV4dCl8fHZvaWQgMD09PWN8fGMuY2FsbChpLGwpLG8ubmV4dChsKX0sKCk9Pnt2YXIgbDtzPSExLG51bGw9PT0obD1pLmNvbXBsZXRlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpLG8uY29tcGxldGUoKX0sbD0+e3ZhciBjO3M9ITEsbnVsbD09PShjPWkuZXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwoaSxsKSxvLmVycm9yKGwpfSwoKT0+e3ZhciBsLGM7cyYmKG51bGw9PT0obD1pLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpKSxudWxsPT09KGM9aS5maW5hbGl6ZSl8fHZvaWQgMD09PWN8fGMuY2FsbChpKX0pKX0pOmxhfXZhciBtUj17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24gZXUobix0PVFjLGU9bVIpe2xldCBpPUphKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdD1tUil7cmV0dXJuIEt0KChlLGkpPT57bGV0e2xlYWRpbmc6cix0cmFpbGluZzpvfT10LGE9ITEscz1udWxsLGw9bnVsbCxjPSExLGQ9KCk9PntsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxvJiYoZigpLGMmJmkuY29tcGxldGUoKSl9LHU9KCk9PntsPW51bGwsYyYmaS5jb21wbGV0ZSgpfSxwPW09Pmw9b2kobihtKSkuc3Vic2NyaWJlKEh0KGksZCx1KSksZj0oKT0+e2lmKGEpe2E9ITE7bGV0IG09cztzPW51bGwsaS5uZXh0KG0pLCFjJiZwKG0pfX07ZS5zdWJzY3JpYmUoSHQoaSxtPT57YT0hMCxzPW0sKCFsfHxsLmNsb3NlZCkmJihyP2YoKTpwKG0pKX0sKCk9PntjPSEwLCghKG8mJmEmJmwpfHxsLmNsb3NlZCkmJmkuY29tcGxldGUoKX0pKX0pfSgoKT0+aSxlKX1mdW5jdGlvbiBZdCguLi5uKXtsZXQgdD10YyhuKTtyZXR1cm4gS3QoKGUsaSk9PntsZXQgcj1uLmxlbmd0aCxvPW5ldyBBcnJheShyKSxhPW4ubWFwKCgpPT4hMSkscz0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKW9pKG5bbF0pLnN1YnNjcmliZShIdChpLGM9PntvW2xdPWMsIXMmJiFhW2xdJiYoYVtsXT0hMCwocz1hLmV2ZXJ5KGxhKSkmJihhPW51bGwpKX0sc2wpKTtlLnN1YnNjcmliZShIdChpLGw9PntpZihzKXtsZXQgYz1bbCwuLi5vXTtpLm5leHQodD90KC4uLmMpOmMpfX0pKX0pfWZ1bmN0aW9uIG5yKG4pe2ZvcihsZXQgdCBpbiBuKWlmKG5bdF09PT1ucilyZXR1cm4gdDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uIGhSKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmIW4uaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pfWZ1bmN0aW9uIGhvKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiJbIituLm1hcChobykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09bilyZXR1cm4iIituO2lmKG4ub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7bi5vdmVycmlkZGVuTmFtZX1gO2lmKG4ubmFtZSlyZXR1cm5gJHtuLm5hbWV9YDtsZXQgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2xldCBlPXQuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWU/dDp0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIExSKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bj9udWxsPT09dD8iIjp0Om51bGw9PXR8fCIiPT09dD9uOm4rIiAiK3R9dmFyIFJyZT1ucih7X19mb3J3YXJkX3JlZl9fOm5yfSk7ZnVuY3Rpb24gVm4obil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPVZuLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaG8odGhpcygpKX0sbn1mdW5jdGlvbiBraShuKXtyZXR1cm4geDUobik/bigpOm59ZnVuY3Rpb24geDUobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uaGFzT3duUHJvcGVydHkoUnJlKSYmbi5fX2ZvcndhcmRfcmVmX189PT1Wbn1mdW5jdGlvbiBDNShuKXtyZXR1cm4gbiYmISFuLlx1MDI3NXByb3ZpZGVyc312YXIgZnk9Imh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiLGJ0PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxlKXtzdXBlcihmdW5jdGlvbihuLHQpe3JldHVybmBORzAke01hdGguYWJzKG4pfSR7dD8iOiAiK3QudHJpbSgpOiIifWB9KHQsZSkpLHRoaXMuY29kZT10fX07ZnVuY3Rpb24gWW4obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP246bnVsbD09bj8iIjpTdHJpbmcobil9ZnVuY3Rpb24gamsobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5uYW1lfHxuLnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT1uJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi50eXBlP24udHlwZS5uYW1lfHxuLnR5cGUudG9TdHJpbmcoKTpZbihuKX1mdW5jdGlvbiBHayhuLHQpe3Rocm93IG5ldyBidCgtMjAxLCExKX1mdW5jdGlvbiBNNShuLHQsZSxpKXt0aHJvdyBuZXcgRXJyb3IoYEFTU0VSVElPTiBFUlJPUjogJHtufWArKG51bGw9PWk/IiI6YCBbRXhwZWN0ZWQ9PiAke2V9ICR7aX0gJHt0fSA8PUFjdHVhbF1gKSl9ZnVuY3Rpb24gcGUobil7cmV0dXJue3Rva2VuOm4udG9rZW4scHJvdmlkZWRJbjpuLnByb3ZpZGVkSW58fG51bGwsZmFjdG9yeTpuLmZhY3RvcnksdmFsdWU6dm9pZCAwfX1mdW5jdGlvbiBCKG4pe3JldHVybntwcm92aWRlcnM6bi5wcm92aWRlcnN8fFtdLGltcG9ydHM6bi5pbXBvcnRzfHxbXX19ZnVuY3Rpb24gV2sobil7cmV0dXJuIFRIKG4saU0pfHxUSChuLHc1KX1mdW5jdGlvbiBUSChuLHQpe3JldHVybiBuLmhhc093blByb3BlcnR5KHQpP25bdF06bnVsbH1mdW5jdGlvbiBESChuKXtyZXR1cm4gbiYmKG4uaGFzT3duUHJvcGVydHkoTlIpfHxuLmhhc093blByb3BlcnR5KExyZSkpP25bTlJdOm51bGx9dmFyIEJSLGlNPW5yKHsiXHUwMjc1cHJvdiI6bnJ9KSxOUj1ucih7Ilx1MDI3NWluaiI6bnJ9KSx3NT1ucih7bmdJbmplY3RhYmxlRGVmOm5yfSksTHJlPW5yKHtuZ0luamVjdG9yRGVmOm5yfSksTWk9KCgpPT57cmV0dXJuKG49TWl8fChNaT17fSkpW24uRGVmYXVsdD0wXT0iRGVmYXVsdCIsbltuLkhvc3Q9MV09Ikhvc3QiLG5bbi5TZWxmPTJdPSJTZWxmIixuW24uU2tpcFNlbGY9NF09IlNraXBTZWxmIixuW24uT3B0aW9uYWw9OF09Ik9wdGlvbmFsIixNaTt2YXIgbn0pKCk7ZnVuY3Rpb24gQ3Mobil7bGV0IHQ9QlI7cmV0dXJuIEJSPW4sdH1mdW5jdGlvbiBTNShuLHQsZSl7bGV0IGk9V2sobik7cmV0dXJuIGkmJiJyb290Ij09aS5wcm92aWRlZEluP3ZvaWQgMD09PWkudmFsdWU/aS52YWx1ZT1pLmZhY3RvcnkoKTppLnZhbHVlOmUmTWkuT3B0aW9uYWw/bnVsbDp2b2lkIDAhPT10P3Q6dm9pZCBHayhobyhuKSl9dmFyIFdfLFdyPSgoKT0+dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZikoKSx0eT17fSxWUj0iX19OR19ESV9GTEFHX18iLHJNPSJuZ1RlbXBUb2tlblBhdGgiLFZyZT0ibmdUb2tlblBhdGgiLEhyZT0vXG4vZ20senJlPSJcdTAyNzUiLElIPSJfX3NvdXJjZSI7ZnVuY3Rpb24gWG0obil7bGV0IHQ9V187cmV0dXJuIFdfPW4sdH1mdW5jdGlvbiBVcmUobix0PU1pLkRlZmF1bHQpe2lmKHZvaWQgMD09PVdfKXRocm93IG5ldyBidCgtMjAzLCExKTtyZXR1cm4gbnVsbD09PVdfP1M1KG4sdm9pZCAwLHQpOldfLmdldChuLHQmTWkuT3B0aW9uYWw/bnVsbDp2b2lkIDAsdCl9ZnVuY3Rpb24gTyhuLHQ9TWkuRGVmYXVsdCl7cmV0dXJuKEJSfHxVcmUpKGtpKG4pLHQpfWZ1bmN0aW9uIEU1KG4pe3Rocm93IG5ldyBidCgyMDIsITEpfWZ1bmN0aW9uIHBpKG4sdD1NaS5EZWZhdWx0KXtyZXR1cm4gTyhuLElNKHQpKX1mdW5jdGlvbiBJTShuKXtyZXR1cm4gdHlwZW9mIG4+InUifHwibnVtYmVyIj09dHlwZW9mIG4/bjowfChuLm9wdGlvbmFsJiY4KXwobi5ob3N0JiYxKXwobi5zZWxmJiYyKXwobi5za2lwU2VsZiYmNCl9ZnVuY3Rpb24gSFIobil7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPWtpKG5bZV0pO2lmKEFycmF5LmlzQXJyYXkoaSkpe2lmKDA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgYnQoOTAwLCExKTtsZXQgcixvPU1pLkRlZmF1bHQ7Zm9yKGxldCBhPTA7YTxpLmxlbmd0aDthKyspe2xldCBzPWlbYV0sbD1qcmUocyk7Im51bWJlciI9PXR5cGVvZiBsPy0xPT09bD9yPXMudG9rZW46b3w9bDpyPXN9dC5wdXNoKE8ocixvKSl9ZWxzZSB0LnB1c2goTyhpKSl9cmV0dXJuIHR9ZnVuY3Rpb24gbXkobix0KXtyZXR1cm4gbltWUl09dCxuLnByb3RvdHlwZVtWUl09dCxufWZ1bmN0aW9uIGpyZShuKXtyZXR1cm4gbltWUl19ZnVuY3Rpb24gc3Uobil7cmV0dXJue3RvU3RyaW5nOm59LnRvU3RyaW5nKCl9dmFyIHFfPSgoKT0+e3JldHVybihuPXFffHwocV89e30pKVtuLk9uUHVzaD0wXT0iT25QdXNoIixuW24uRGVmYXVsdD0xXT0iRGVmYXVsdCIscV87dmFyIG59KSgpLGVzPSgoKT0+e3JldHVybihuPWVzfHwoZXM9e30pKVtuLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsbltuLk5vbmU9Ml09Ik5vbmUiLG5bbi5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsZXM7dmFyIG59KSgpLFpjPXt9LFVpPVtdLEFNPW5yKHsiXHUwMjc1Y21wIjpucn0pLHFrPW5yKHsiXHUwMjc1ZGlyIjpucn0pLFlrPW5yKHsiXHUwMjc1cGlwZSI6bnJ9KSxUNT1ucih7Ilx1MDI3NW1vZCI6bnJ9KSxLYz1ucih7Ilx1MDI3NWZhYyI6bnJ9KSxZXz1ucih7X19OR19FTEVNRU5UX0lEX186bnJ9KSxxcmU9MDtmdW5jdGlvbiBrKG4pe3JldHVybiBzdSgoKT0+e2xldCB0PUk1KG4pLGU9ey4uLnQsZGVjbHM6bi5kZWNscyx2YXJzOm4udmFycyx0ZW1wbGF0ZTpuLnRlbXBsYXRlLGNvbnN0czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOm4uY2hhbmdlRGV0ZWN0aW9uPT09cV8uT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczp0LnN0YW5kYWxvbmUmJm4uZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3RvcjpudWxsLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8ZXMuRW11bGF0ZWQsaWQ6ImMiK3FyZSsrLHN0eWxlczpuLnN0eWxlc3x8VWksXzpudWxsLHNjaGVtYXM6bi5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGx9O0E1KGUpO2xldCBpPW4uZGVwZW5kZW5jaWVzO3JldHVybiBlLmRpcmVjdGl2ZURlZnM9b00oaSwhMSksZS5waXBlRGVmcz1vTShpLCEwKSxlfSl9ZnVuY3Rpb24gaHkobix0LGUpe2xldCBpPW4uXHUwMjc1Y21wO2kuZGlyZWN0aXZlRGVmcz1vTSh0LCExKSxpLnBpcGVEZWZzPW9NKGUsITApfWZ1bmN0aW9uIFlyZShuKXtyZXR1cm4gd3Mobil8fGl1KG4pfWZ1bmN0aW9uIFhyZShuKXtyZXR1cm4gbnVsbCE9PW59ZnVuY3Rpb24gVihuKXtyZXR1cm4gc3UoKCk9Pih7dHlwZTpuLnR5cGUsYm9vdHN0cmFwOm4uYm9vdHN0cmFwfHxVaSxkZWNsYXJhdGlvbnM6bi5kZWNsYXJhdGlvbnN8fFVpLGltcG9ydHM6bi5pbXBvcnRzfHxVaSxleHBvcnRzOm4uZXhwb3J0c3x8VWksdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCxpZDpuLmlkfHxudWxsfSkpfWZ1bmN0aW9uIEFIKG4sdCl7aWYobnVsbD09bilyZXR1cm4gWmM7bGV0IGU9e307Zm9yKGxldCBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IHI9bltpXSxvPXI7QXJyYXkuaXNBcnJheShyKSYmKG89clsxXSxyPXJbMF0pLGVbcl09aSx0JiYodFtyXT1vKX1yZXR1cm4gZX1mdW5jdGlvbiB4ZShuKXtyZXR1cm4gc3UoKCk9PntsZXQgdD1JNShuKTtyZXR1cm4gQTUodCksdH0pfWZ1bmN0aW9uIGNoKG4pe3JldHVybnt0eXBlOm4udHlwZSxuYW1lOm4ubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PW4ucHVyZSxzdGFuZGFsb25lOiEwPT09bi5zdGFuZGFsb25lLG9uRGVzdHJveTpuLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95fHxudWxsfX1mdW5jdGlvbiB3cyhuKXtyZXR1cm4gbltBTV18fG51bGx9ZnVuY3Rpb24gaXUobil7cmV0dXJuIG5bcWtdfHxudWxsfWZ1bmN0aW9uIHJ1KG4pe3JldHVybiBuW1lrXXx8bnVsbH1mdW5jdGlvbiBENShuKXtsZXQgdD13cyhuKXx8aXUobil8fHJ1KG4pO3JldHVybiBudWxsIT09dCYmdC5zdGFuZGFsb25lfWZ1bmN0aW9uIG5oKG4sdCl7bGV0IGU9bltUNV18fG51bGw7aWYoIWUmJiEwPT09dCl0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJHtobyhuKX0gZG9lcyBub3QgaGF2ZSAnXHUwMjc1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gZX1mdW5jdGlvbiBJNShuKXtsZXQgdD17fTtyZXR1cm57dHlwZTpuLnR5cGUscHJvdmlkZXJzUmVzb2x2ZXI6bnVsbCxmYWN0b3J5Om51bGwsaG9zdEJpbmRpbmdzOm4uaG9zdEJpbmRpbmdzfHxudWxsLGhvc3RWYXJzOm4uaG9zdFZhcnN8fDAsaG9zdEF0dHJzOm4uaG9zdEF0dHJzfHxudWxsLGNvbnRlbnRRdWVyaWVzOm4uY29udGVudFF1ZXJpZXN8fG51bGwsZGVjbGFyZWRJbnB1dHM6dCxleHBvcnRBczpuLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6ITA9PT1uLnN0YW5kYWxvbmUsc2VsZWN0b3JzOm4uc2VsZWN0b3JzfHxVaSx2aWV3UXVlcnk6bi52aWV3UXVlcnl8fG51bGwsZmVhdHVyZXM6bi5mZWF0dXJlc3x8bnVsbCxzZXRJbnB1dDpudWxsLGZpbmRIb3N0RGlyZWN0aXZlRGVmczpudWxsLGhvc3REaXJlY3RpdmVzOm51bGwsaW5wdXRzOkFIKG4uaW5wdXRzLHQpLG91dHB1dHM6QUgobi5vdXRwdXRzKX19ZnVuY3Rpb24gQTUobil7bi5mZWF0dXJlcz8uZm9yRWFjaCh0PT50KG4pKX1mdW5jdGlvbiBvTShuLHQpe2lmKCFuKXJldHVybiBudWxsO2xldCBlPXQ/cnU6WXJlO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4pLm1hcChpPT5lKGkpKS5maWx0ZXIoWHJlKX12YXIgbHU9MCxCbj0xLHNpPTIsWXI9MyxwbD00LFZwPTUsRGE9NixueT03LElhPTgsYU09OSxzTT0xMCxsaT0xMSx6Uj0xMixpeT0xMyxSSD0xNCxkaD0xNSxmbD0xNixneT0xNyxRbT0xOCxvYz0xOSxSTT0yMCxSNT0yMSxYcj0yMixYaz0xLGs1PTIsUWs9NyxsTT04LGloPTksVGE9MTA7ZnVuY3Rpb24gSHAobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgbltYa119ZnVuY3Rpb24gJGMobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiEwPT09bltYa119ZnVuY3Rpb24gWmsobil7cmV0dXJuIDAhPSg0Jm4uZmxhZ3MpfWZ1bmN0aW9uIGtNKG4pe3JldHVybiBuLmNvbXBvbmVudE9mZnNldD4tMX1mdW5jdGlvbiBQTShuKXtyZXR1cm4gMT09KDEmbi5mbGFncyl9ZnVuY3Rpb24gbWwobil7cmV0dXJuISFuLnRlbXBsYXRlfWZ1bmN0aW9uIFFyZShuKXtyZXR1cm4gMCE9KDI1NiZuW3NpXSl9ZnVuY3Rpb24gVXAobix0KXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShLYyk/bltLY106bnVsbH12YXIgVVI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMucHJldmlvdXNWYWx1ZT10LHRoaXMuY3VycmVudFZhbHVlPWUsdGhpcy5maXJzdENoYW5nZT1pfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19O2Z1bmN0aW9uIEd0KCl7cmV0dXJuIFA1fWZ1bmN0aW9uIFA1KG4pe3JldHVybiBuLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYobi5zZXRJbnB1dD1LcmUpLFpyZX1mdW5jdGlvbiBacmUoKXtsZXQgbj1GNSh0aGlzKSx0PW4/LmN1cnJlbnQ7aWYodCl7bGV0IGU9bi5wcmV2aW91cztpZihlPT09WmMpbi5wcmV2aW91cz10O2Vsc2UgZm9yKGxldCBpIGluIHQpZVtpXT10W2ldO24uY3VycmVudD1udWxsLHRoaXMubmdPbkNoYW5nZXModCl9fWZ1bmN0aW9uIEtyZShuLHQsZSxpKXtsZXQgcj10aGlzLmRlY2xhcmVkSW5wdXRzW2VdLG89RjUobil8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5bTzVdPXR9KG4se3ByZXZpb3VzOlpjLGN1cnJlbnQ6bnVsbH0pLGE9by5jdXJyZW50fHwoby5jdXJyZW50PXt9KSxzPW8ucHJldmlvdXMsbD1zW3JdO2Fbcl09bmV3IFVSKGwmJmwuY3VycmVudFZhbHVlLHQscz09PVpjKSxuW2ldPXR9R3QubmdJbmhlcml0PSEwO3ZhciBPNT0iX19uZ1NpbXBsZUNoYW5nZXNfXyI7ZnVuY3Rpb24gRjUobil7cmV0dXJuIG5bTzVdfHxudWxsfXZhciBNcz1mdW5jdGlvbihuLHQsZSl7fSxMNT0ic3ZnIixONT0ibWF0aCI7ZnVuY3Rpb24gVHMobil7Zm9yKDtBcnJheS5pc0FycmF5KG4pOyluPW5bbHVdO3JldHVybiBufWZ1bmN0aW9uIE9NKG4sdCl7cmV0dXJuIFRzKHRbbl0pfWZ1bmN0aW9uIHRzKG4sdCl7cmV0dXJuIFRzKHRbbi5pbmRleF0pfWZ1bmN0aW9uIEI1KG4sdCl7cmV0dXJuIG4uZGF0YVt0XX1mdW5jdGlvbiB1aChuLHQpe3JldHVybiBuW3RdfWZ1bmN0aW9uIGVkKG4sdCl7bGV0IGU9dFtuXTtyZXR1cm4gSHAoZSk/ZTplW2x1XX1mdW5jdGlvbiBjTShuKXtyZXR1cm4gNjQ9PSg2NCZuW3NpXSl9ZnVuY3Rpb24gb3Uobix0KXtyZXR1cm4gbnVsbD09dD9udWxsOm5bdF19ZnVuY3Rpb24gVjUobil7bltRbV09MH1mdW5jdGlvbiBLayhuLHQpe25bVnBdKz10O2xldCBlPW4saT1uW1lyXTtmb3IoO251bGwhPT1pJiYoMT09PXQmJjE9PT1lW1ZwXXx8LTE9PT10JiYwPT09ZVtWcF0pOylpW1ZwXSs9dCxlPWksaT1pW1lyXX12YXIgWG49e2xGcmFtZTpZNShudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITB9O2Z1bmN0aW9uIEg1KCl7cmV0dXJuIFhuLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBLZSgpe3JldHVybiBYbi5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gRWkoKXtyZXR1cm4gWG4ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIFgobil7cmV0dXJuIFhuLmxGcmFtZS5jb250ZXh0TFZpZXc9bixuW0lhXX1mdW5jdGlvbiBRKG4pe3JldHVybiBYbi5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsbn1mdW5jdGlvbiBQbygpe2xldCBuPXo1KCk7Zm9yKDtudWxsIT09biYmNjQ9PT1uLnR5cGU7KW49bi5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gejUoKXtyZXR1cm4gWG4ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiByeSgpe2xldCBuPVhuLmxGcmFtZSx0PW4uY3VycmVudFROb2RlO3JldHVybiBuLmlzUGFyZW50P3Q6dC5wYXJlbnR9ZnVuY3Rpb24gYWMobix0KXtsZXQgZT1Ybi5sRnJhbWU7ZS5jdXJyZW50VE5vZGU9bixlLmlzUGFyZW50PXR9ZnVuY3Rpb24gSmsoKXtyZXR1cm4gWG4ubEZyYW1lLmlzUGFyZW50fWZ1bmN0aW9uICRrKCl7WG4ubEZyYW1lLmlzUGFyZW50PSExfWZ1bmN0aW9uIGRhKCl7bGV0IG49WG4ubEZyYW1lLHQ9bi5iaW5kaW5nUm9vdEluZGV4O3JldHVybi0xPT09dCYmKHQ9bi5iaW5kaW5nUm9vdEluZGV4PW4udFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpLHR9ZnVuY3Rpb24gdGQoKXtyZXR1cm4gWG4ubEZyYW1lLmJpbmRpbmdJbmRleH1mdW5jdGlvbiBVNShuKXtyZXR1cm4gWG4ubEZyYW1lLmJpbmRpbmdJbmRleD1ufWZ1bmN0aW9uIHBoKCl7cmV0dXJuIFhuLmxGcmFtZS5iaW5kaW5nSW5kZXgrK31mdW5jdGlvbiBuZChuKXtsZXQgdD1Ybi5sRnJhbWUsZT10LmJpbmRpbmdJbmRleDtyZXR1cm4gdC5iaW5kaW5nSW5kZXg9dC5iaW5kaW5nSW5kZXgrbixlfWZ1bmN0aW9uIGo1KG4pe1huLmxGcmFtZS5pbkkxOG49bn1mdW5jdGlvbiBjb2Uobix0KXtsZXQgZT1Ybi5sRnJhbWU7ZS5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nUm9vdEluZGV4PW4salIodCl9ZnVuY3Rpb24galIobil7WG4ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleD1ufWZ1bmN0aW9uIGVQKG4pe2xldCB0PVhuLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT10P251bGw6blt0XX1mdW5jdGlvbiBHNSgpe3JldHVybiBYbi5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gdFAobil7WG4ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PW59ZnVuY3Rpb24gdW9lKG4pe2xldCB0PW5bQm5dO3JldHVybiAyPT09dC50eXBlP3QuZGVjbFROb2RlOjE9PT10LnR5cGU/bltEYV06bnVsbH1mdW5jdGlvbiBXNShuLHQsZSl7aWYoZSZNaS5Ta2lwU2VsZil7bGV0IHI9dCxvPW47Zm9yKDshKHI9ci5wYXJlbnQsbnVsbCE9PXJ8fGUmTWkuSG9zdHx8KHI9dW9lKG8pLG51bGw9PT1yfHwobz1vW2RoXSwxMCZyLnR5cGUpKSk7KTtpZihudWxsPT09cilyZXR1cm4hMTt0PXIsbj1vfWxldCBpPVhuLmxGcmFtZT1xNSgpO3JldHVybiBpLmN1cnJlbnRUTm9kZT10LGkubFZpZXc9biwhMH1mdW5jdGlvbiBuUChuKXtsZXQgdD1xNSgpLGU9bltCbl07WG4ubEZyYW1lPXQsdC5jdXJyZW50VE5vZGU9ZS5maXJzdENoaWxkLHQubFZpZXc9bix0LnRWaWV3PWUsdC5jb250ZXh0TFZpZXc9bix0LmJpbmRpbmdJbmRleD1lLmJpbmRpbmdTdGFydEluZGV4LHQuaW5JMThuPSExfWZ1bmN0aW9uIHE1KCl7bGV0IG49WG4ubEZyYW1lLHQ9bnVsbD09PW4/bnVsbDpuLmNoaWxkO3JldHVybiBudWxsPT09dD9ZNShuKTp0fWZ1bmN0aW9uIFk1KG4pe2xldCB0PXtjdXJyZW50VE5vZGU6bnVsbCxpc1BhcmVudDohMCxsVmlldzpudWxsLHRWaWV3Om51bGwsc2VsZWN0ZWRJbmRleDotMSxjb250ZXh0TFZpZXc6bnVsbCxlbGVtZW50RGVwdGhDb3VudDowLGN1cnJlbnROYW1lc3BhY2U6bnVsbCxjdXJyZW50RGlyZWN0aXZlSW5kZXg6LTEsYmluZGluZ1Jvb3RJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsY3VycmVudFF1ZXJ5SW5kZXg6MCxwYXJlbnQ6bixjaGlsZDpudWxsLGluSTE4bjohMX07cmV0dXJuIG51bGwhPT1uJiYobi5jaGlsZD10KSx0fWZ1bmN0aW9uIFg1KCl7bGV0IG49WG4ubEZyYW1lO3JldHVybiBYbi5sRnJhbWU9bi5wYXJlbnQsbi5jdXJyZW50VE5vZGU9bnVsbCxuLmxWaWV3PW51bGwsbn12YXIgUTU9WDU7ZnVuY3Rpb24gaVAoKXtsZXQgbj1YNSgpO24uaXNQYXJlbnQ9ITAsbi50Vmlldz1udWxsLG4uc2VsZWN0ZWRJbmRleD0tMSxuLmNvbnRleHRMVmlldz1udWxsLG4uZWxlbWVudERlcHRoQ291bnQ9MCxuLmN1cnJlbnREaXJlY3RpdmVJbmRleD0tMSxuLmN1cnJlbnROYW1lc3BhY2U9bnVsbCxuLmJpbmRpbmdSb290SW5kZXg9LTEsbi5iaW5kaW5nSW5kZXg9LTEsbi5jdXJyZW50UXVlcnlJbmRleD0wfWZ1bmN0aW9uIHVhKCl7cmV0dXJuIFhuLmxGcmFtZS5zZWxlY3RlZEluZGV4fWZ1bmN0aW9uIGpwKG4pe1huLmxGcmFtZS5zZWxlY3RlZEluZGV4PW59ZnVuY3Rpb24ga3IoKXtsZXQgbj1Ybi5sRnJhbWU7cmV0dXJuIEI1KG4udFZpZXcsbi5zZWxlY3RlZEluZGV4KX1mdW5jdGlvbiBUbigpe1huLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPUw1fWZ1bmN0aW9uIE9vKCl7WG4ubEZyYW1lLmN1cnJlbnROYW1lc3BhY2U9bnVsbH1mdW5jdGlvbiBGTShuLHQpe2ZvcihsZXQgZT10LmRpcmVjdGl2ZVN0YXJ0LGk9dC5kaXJlY3RpdmVFbmQ7ZTxpO2UrKyl7bGV0IG89bi5kYXRhW2VdLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6YSxuZ0FmdGVyQ29udGVudENoZWNrZWQ6cyxuZ0FmdGVyVmlld0luaXQ6bCxuZ0FmdGVyVmlld0NoZWNrZWQ6YyxuZ09uRGVzdHJveTpkfT1vO2EmJihuLmNvbnRlbnRIb29rcz8/KG4uY29udGVudEhvb2tzPVtdKSkucHVzaCgtZSxhKSxzJiYoKG4uY29udGVudEhvb2tzPz8obi5jb250ZW50SG9va3M9W10pKS5wdXNoKGUscyksKG4uY29udGVudENoZWNrSG9va3M/PyhuLmNvbnRlbnRDaGVja0hvb2tzPVtdKSkucHVzaChlLHMpKSxsJiYobi52aWV3SG9va3M/PyhuLnZpZXdIb29rcz1bXSkpLnB1c2goLWUsbCksYyYmKChuLnZpZXdIb29rcz8/KG4udmlld0hvb2tzPVtdKSkucHVzaChlLGMpLChuLnZpZXdDaGVja0hvb2tzPz8obi52aWV3Q2hlY2tIb29rcz1bXSkpLnB1c2goZSxjKSksbnVsbCE9ZCYmKG4uZGVzdHJveUhvb2tzPz8obi5kZXN0cm95SG9va3M9W10pKS5wdXNoKGUsZCl9fWZ1bmN0aW9uIFhDKG4sdCxlKXtaNShuLHQsMyxlKX1mdW5jdGlvbiBRQyhuLHQsZSxpKXsoMyZuW3NpXSk9PT1lJiZaNShuLHQsZSxpKX1mdW5jdGlvbiBnUihuLHQpe2xldCBlPW5bc2ldOygzJmUpPT09dCYmKGUmPTIwNDcsZSs9MSxuW3NpXT1lKX1mdW5jdGlvbiBaNShuLHQsZSxpKXtsZXQgbz1pPz8tMSxhPXQubGVuZ3RoLTEscz0wO2ZvcihsZXQgbD12b2lkIDAhPT1pPzY1NTM1Jm5bUW1dOjA7bDxhO2wrKylpZigibnVtYmVyIj09dHlwZW9mIHRbbCsxXSl7aWYocz10W2xdLG51bGwhPWkmJnM+PWkpYnJlYWt9ZWxzZSB0W2xdPDAmJihuW1FtXSs9NjU1MzYpLChzPG98fC0xPT1vKSYmKHlvZShuLGUsdCxsKSxuW1FtXT0oNDI5NDkwMTc2MCZuW1FtXSkrbCsyKSxsKyt9ZnVuY3Rpb24geW9lKG4sdCxlLGkpe2xldCByPWVbaV08MCxvPWVbaSsxXSxzPW5bcj8tZVtpXTplW2ldXTtpZihyKXtpZihuW3NpXT4+MTE8bltRbV0+PjE2JiYoMyZuW3NpXSk9PT10KXtuW3NpXSs9MjA0OCxNcyg0LHMsbyk7dHJ5e28uY2FsbChzKX1maW5hbGx5e01zKDUscyxvKX19fWVsc2V7TXMoNCxzLG8pO3RyeXtvLmNhbGwocyl9ZmluYWxseXtNcyg1LHMsbyl9fX12YXIgdGg9LTEsR3A9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuZmFjdG9yeT10LHRoaXMucmVzb2x2aW5nPSExLHRoaXMuY2FuU2VlVmlld1Byb3ZpZGVycz1lLHRoaXMuaW5qZWN0SW1wbD1pfX07ZnVuY3Rpb24gR1Iobix0LGUpe2xldCBpPTA7Zm9yKDtpPGUubGVuZ3RoOyl7bGV0IHI9ZVtpXTtpZigibnVtYmVyIj09dHlwZW9mIHIpe2lmKDAhPT1yKWJyZWFrO2krKztsZXQgbz1lW2krK10sYT1lW2krK10scz1lW2krK107bi5zZXRBdHRyaWJ1dGUodCxhLHMsbyl9ZWxzZXtsZXQgbz1yLGE9ZVsrK2ldO0NvZShvKT9uLnNldFByb3BlcnR5KHQsbyxhKTpuLnNldEF0dHJpYnV0ZSh0LG8sYSksaSsrfX1yZXR1cm4gaX1mdW5jdGlvbiBLNShuKXtyZXR1cm4gMz09PW58fDQ9PT1ufHw2PT09bn1mdW5jdGlvbiBDb2Uobil7cmV0dXJuIDY0PT09bi5jaGFyQ29kZUF0KDApfWZ1bmN0aW9uIG95KG4sdCl7aWYobnVsbCE9PXQmJjAhPT10Lmxlbmd0aClpZihudWxsPT09bnx8MD09PW4ubGVuZ3RoKW49dC5zbGljZSgpO2Vsc2V7bGV0IGU9LTE7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCByPXRbaV07Im51bWJlciI9PXR5cGVvZiByP2U9cjowPT09ZXx8UEgobixlLHIsbnVsbCwtMT09PWV8fDI9PT1lP3RbKytpXTpudWxsKX19cmV0dXJuIG59ZnVuY3Rpb24gUEgobix0LGUsaSxyKXtsZXQgbz0wLGE9bi5sZW5ndGg7aWYoLTE9PT10KWE9LTE7ZWxzZSBmb3IoO288bi5sZW5ndGg7KXtsZXQgcz1uW28rK107aWYoIm51bWJlciI9PXR5cGVvZiBzKXtpZihzPT09dCl7YT0tMTticmVha31pZihzPnQpe2E9by0xO2JyZWFrfX19Zm9yKDtvPG4ubGVuZ3RoOyl7bGV0IHM9bltvXTtpZigibnVtYmVyIj09dHlwZW9mIHMpYnJlYWs7aWYocz09PWUpe2lmKG51bGw9PT1pKXJldHVybiB2b2lkKG51bGwhPT1yJiYobltvKzFdPXIpKTtpZihpPT09bltvKzFdKXJldHVybiB2b2lkKG5bbysyXT1yKX1vKyssbnVsbCE9PWkmJm8rKyxudWxsIT09ciYmbysrfS0xIT09YSYmKG4uc3BsaWNlKGEsMCx0KSxvPWErMSksbi5zcGxpY2UobysrLDAsZSksbnVsbCE9PWkmJm4uc3BsaWNlKG8rKywwLGkpLG51bGwhPT1yJiZuLnNwbGljZShvKyssMCxyKX1mdW5jdGlvbiBKNShuKXtyZXR1cm4gbiE9PXRofWZ1bmN0aW9uIGRNKG4pe3JldHVybiAzMjc2NyZufWZ1bmN0aW9uIHVNKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4+PjE2fShuKSxpPXQ7Zm9yKDtlPjA7KWk9aVtkaF0sZS0tO3JldHVybiBpfXZhciBXUj0hMDtmdW5jdGlvbiBwTShuKXtsZXQgdD1XUjtyZXR1cm4gV1I9bix0fXZhciAkNT0yNTUsZXo9NSxTb2U9MCxyYz17fTtmdW5jdGlvbiBmTShuLHQpe2xldCBlPXR6KG4sdCk7aWYoLTEhPT1lKXJldHVybiBlO2xldCBpPXRbQm5dO2kuZmlyc3RDcmVhdGVQYXNzJiYobi5pbmplY3RvckluZGV4PXQubGVuZ3RoLF9SKGkuZGF0YSxuKSxfUih0LG51bGwpLF9SKGkuYmx1ZXByaW50LG51bGwpKTtsZXQgcj1yUChuLHQpLG89bi5pbmplY3RvckluZGV4O2lmKEo1KHIpKXtsZXQgYT1kTShyKSxzPXVNKHIsdCksbD1zW0JuXS5kYXRhO2ZvcihsZXQgYz0wO2M8ODtjKyspdFtvK2NdPXNbYStjXXxsW2ErY119cmV0dXJuIHRbbys4XT1yLG99ZnVuY3Rpb24gX1Iobix0KXtuLnB1c2goMCwwLDAsMCwwLDAsMCwwLHQpfWZ1bmN0aW9uIHR6KG4sdCl7cmV0dXJuLTE9PT1uLmluamVjdG9ySW5kZXh8fG4ucGFyZW50JiZuLnBhcmVudC5pbmplY3RvckluZGV4PT09bi5pbmplY3RvckluZGV4fHxudWxsPT09dFtuLmluamVjdG9ySW5kZXgrOF0/LTE6bi5pbmplY3RvckluZGV4fWZ1bmN0aW9uIHJQKG4sdCl7aWYobi5wYXJlbnQmJi0xIT09bi5wYXJlbnQuaW5qZWN0b3JJbmRleClyZXR1cm4gbi5wYXJlbnQuaW5qZWN0b3JJbmRleDtsZXQgZT0wLGk9bnVsbCxyPXQ7Zm9yKDtudWxsIT09cjspe2lmKGk9YXoociksbnVsbD09PWkpcmV0dXJuIHRoO2lmKGUrKyxyPXJbZGhdLC0xIT09aS5pbmplY3RvckluZGV4KXJldHVybiBpLmluamVjdG9ySW5kZXh8ZTw8MTZ9cmV0dXJuIHRofWZ1bmN0aW9uIHFSKG4sdCxlKXshZnVuY3Rpb24obix0LGUpe2xldCBpOyJzdHJpbmciPT10eXBlb2YgZT9pPWUuY2hhckNvZGVBdCgwKXx8MDplLmhhc093blByb3BlcnR5KFlfKSYmKGk9ZVtZX10pLG51bGw9PWkmJihpPWVbWV9dPVNvZSsrKTtsZXQgcj1pJiQ1O3QuZGF0YVtuKyhyPj5leildfD0xPDxyfShuLHQsZSl9ZnVuY3Rpb24gbnoobix0LGUpe2lmKGUmTWkuT3B0aW9uYWx8fHZvaWQgMCE9PW4pcmV0dXJuIG47R2soKX1mdW5jdGlvbiBpeihuLHQsZSxpKXtpZihlJk1pLk9wdGlvbmFsJiZ2b2lkIDA9PT1pJiYoaT1udWxsKSwwPT0oZSYoTWkuU2VsZnxNaS5Ib3N0KSkpe2xldCByPW5bYU1dLG89Q3Modm9pZCAwKTt0cnl7cmV0dXJuIHI/ci5nZXQodCxpLGUmTWkuT3B0aW9uYWwpOlM1KHQsaSxlJk1pLk9wdGlvbmFsKX1maW5hbGx5e0NzKG8pfX1yZXR1cm4gbnooaSwwLGUpfWZ1bmN0aW9uIHJ6KG4sdCxlLGk9TWkuRGVmYXVsdCxyKXtpZihudWxsIT09bil7aWYoMTAyNCZ0W3NpXSl7bGV0IGE9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1uLGE9dDtmb3IoO251bGwhPT1vJiZudWxsIT09YSYmMTAyNCZhW3NpXSYmISgyNTYmYVtzaV0pOyl7bGV0IHM9b3oobyxhLGUsaXxNaS5TZWxmLHJjKTtpZihzIT09cmMpcmV0dXJuIHM7bGV0IGw9by5wYXJlbnQ7aWYoIWwpe2xldCBjPWFbUjVdO2lmKGMpe2xldCBkPWMuZ2V0KGUscmMsaSk7aWYoZCE9PXJjKXJldHVybiBkfWw9YXooYSksYT1hW2RoXX1vPWx9cmV0dXJuIHJ9KG4sdCxlLGkscmMpO2lmKGEhPT1yYylyZXR1cm4gYX1sZXQgbz1veihuLHQsZSxpLHJjKTtpZihvIT09cmMpcmV0dXJuIG99cmV0dXJuIGl6KHQsZSxpLHIpfWZ1bmN0aW9uIG96KG4sdCxlLGkscil7bGV0IG89ZnVuY3Rpb24obil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBuLmNoYXJDb2RlQXQoMCl8fDA7bGV0IHQ9bi5oYXNPd25Qcm9wZXJ0eShZXyk/bltZX106dm9pZCAwO3JldHVybiJudW1iZXIiPT10eXBlb2YgdD90Pj0wP3QmJDU6QW9lOnR9KGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBvKXtpZighVzUodCxuLGkpKXJldHVybiBpJk1pLkhvc3Q/bnoociwwLGkpOml6KHQsZSxpLHIpO3RyeXtsZXQgYT1vKGkpO2lmKG51bGwhPWF8fGkmTWkuT3B0aW9uYWwpcmV0dXJuIGE7R2soKX1maW5hbGx5e1E1KCl9fWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBvKXtsZXQgYT1udWxsLHM9dHoobix0KSxsPXRoLGM9aSZNaS5Ib3N0P3RbZmxdW0RhXTpudWxsO2ZvcigoLTE9PT1zfHxpJk1pLlNraXBTZWxmKSYmKGw9LTE9PT1zP3JQKG4sdCk6dFtzKzhdLGwhPT10aCYmRkgoaSwhMSk/KGE9dFtCbl0scz1kTShsKSx0PXVNKGwsdCkpOnM9LTEpOy0xIT09czspe2xldCBkPXRbQm5dO2lmKE9IKG8scyxkLmRhdGEpKXtsZXQgdT1Eb2Uocyx0LGUsYSxpLGMpO2lmKHUhPT1yYylyZXR1cm4gdX1sPXRbcys4XSxsIT09dGgmJkZIKGksdFtCbl0uZGF0YVtzKzhdPT09YykmJk9IKG8scyx0KT8oYT1kLHM9ZE0obCksdD11TShsLHQpKTpzPS0xfX1yZXR1cm4gcn1mdW5jdGlvbiBEb2Uobix0LGUsaSxyLG8pe2xldCBhPXRbQm5dLHM9YS5kYXRhW24rOF0sZD1aQyhzLGEsZSxudWxsPT1pP2tNKHMpJiZXUjppIT1hJiYwIT0oMyZzLnR5cGUpLHImTWkuSG9zdCYmbz09PXMpO3JldHVybiBudWxsIT09ZD9XcCh0LGEsZCxzKTpyY31mdW5jdGlvbiBaQyhuLHQsZSxpLHIpe2xldCBvPW4ucHJvdmlkZXJJbmRleGVzLGE9dC5kYXRhLHM9MTA0ODU3NSZvLGw9bi5kaXJlY3RpdmVTdGFydCxkPW8+PjIwLHA9cj9zK2Q6bi5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBmPWk/czpzK2Q7ZjxwO2YrKyl7bGV0IG09YVtmXTtpZihmPGwmJmU9PT1tfHxmPj1sJiZtLnR5cGU9PT1lKXJldHVybiBmfWlmKHIpe2xldCBmPWFbbF07aWYoZiYmbWwoZikmJmYudHlwZT09PWUpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gV3Aobix0LGUsaSl7bGV0IHI9bltlXSxvPXQuZGF0YTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEdwfShyKSl7bGV0IGE9cjthLnJlc29sdmluZyYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgYnQoLTIwMCxgQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZCBmb3IgJHtufWApfShqayhvW2VdKSk7bGV0IHM9cE0oYS5jYW5TZWVWaWV3UHJvdmlkZXJzKTthLnJlc29sdmluZz0hMDtsZXQgbD1hLmluamVjdEltcGw/Q3MoYS5pbmplY3RJbXBsKTpudWxsO1c1KG4saSxNaS5EZWZhdWx0KTt0cnl7cj1uW2VdPWEuZmFjdG9yeSh2b2lkIDAsbyxuLGkpLHQuZmlyc3RDcmVhdGVQYXNzJiZlPj1pLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbihuLHQsZSl7bGV0e25nT25DaGFuZ2VzOmksbmdPbkluaXQ6cixuZ0RvQ2hlY2s6b309dC50eXBlLnByb3RvdHlwZTtpZihpKXtsZXQgYT1QNSh0KTsoZS5wcmVPcmRlckhvb2tzPz8oZS5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChuLGEpLChlLnByZU9yZGVyQ2hlY2tIb29rcz8/KGUucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChuLGEpfXImJihlLnByZU9yZGVySG9va3M/PyhlLnByZU9yZGVySG9va3M9W10pKS5wdXNoKDAtbixyKSxvJiYoKGUucHJlT3JkZXJIb29rcz8/KGUucHJlT3JkZXJIb29rcz1bXSkpLnB1c2gobixvKSwoZS5wcmVPcmRlckNoZWNrSG9va3M/PyhlLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobixvKSl9KGUsb1tlXSx0KX1maW5hbGx5e251bGwhPT1sJiZDcyhsKSxwTShzKSxhLnJlc29sdmluZz0hMSxRNSgpfX1yZXR1cm4gcn1mdW5jdGlvbiBPSChuLHQsZSl7cmV0dXJuISEoZVt0KyhuPj5leildJjE8PG4pfWZ1bmN0aW9uIEZIKG4sdCl7cmV0dXJuIShuJk1pLlNlbGZ8fG4mTWkuSG9zdCYmdCl9dmFyIHpwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdE5vZGU9dCx0aGlzLl9sVmlldz1lfWdldCh0LGUsaSl7cmV0dXJuIHJ6KHRoaXMuX3ROb2RlLHRoaXMuX2xWaWV3LHQsSU0oaSksZSl9fTtmdW5jdGlvbiBBb2UoKXtyZXR1cm4gbmV3IHpwKFBvKCksS2UoKSl9ZnVuY3Rpb24gQ24obil7cmV0dXJuIHN1KCgpPT57bGV0IHQ9bi5wcm90b3R5cGUuY29uc3RydWN0b3IsZT10W0tjXXx8WVIodCksaT1PYmplY3QucHJvdG90eXBlLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO3ImJnIhPT1pOyl7bGV0IG89cltLY118fFlSKHIpO2lmKG8mJm8hPT1lKXJldHVybiBvO3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpfXJldHVybiBvPT5uZXcgb30pfWZ1bmN0aW9uIFlSKG4pe3JldHVybiB4NShuKT8oKT0+e2xldCB0PVlSKGtpKG4pKTtyZXR1cm4gdCYmdCgpfTpVcChuKX1mdW5jdGlvbiBheihuKXtsZXQgdD1uW0JuXSxlPXQudHlwZTtyZXR1cm4gMj09PWU/dC5kZWNsVE5vZGU6MT09PWU/bltEYV06bnVsbH1mdW5jdGlvbiBWcihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXtpZigiY2xhc3MiPT09dClyZXR1cm4gbi5jbGFzc2VzO2lmKCJzdHlsZSI9PT10KXJldHVybiBuLnN0eWxlcztsZXQgZT1uLmF0dHJzO2lmKGUpe2xldCBpPWUubGVuZ3RoLHI9MDtmb3IoO3I8aTspe2xldCBvPWVbcl07aWYoSzUobykpYnJlYWs7aWYoMD09PW8pcis9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2Ygbylmb3IocisrO3I8aSYmInN0cmluZyI9PXR5cGVvZiBlW3JdOylyKys7ZWxzZXtpZihvPT09dClyZXR1cm4gZVtyKzFdO3IrPTJ9fX1yZXR1cm4gbnVsbH0oUG8oKSxuKX12YXIgWm09Il9fYW5ub3RhdGlvbnNfXyIsS209Il9fcGFyYW1ldGVyc19fIixKbT0iX19wcm9wX19tZXRhZGF0YV9fIjtmdW5jdGlvbiBfeShuLHQsZSxpLHIpe3JldHVybiBzdSgoKT0+e2xldCBvPW9QKHQpO2Z1bmN0aW9uIGEoLi4ucyl7aWYodGhpcyBpbnN0YW5jZW9mIGEpcmV0dXJuIG8uY2FsbCh0aGlzLC4uLnMpLHRoaXM7bGV0IGw9bmV3IGEoLi4ucyk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiByJiZyKGQsLi4ucyksKGQuaGFzT3duUHJvcGVydHkoWm0pP2RbWm1dOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLFptLHt2YWx1ZTpbXX0pW1ptXSkucHVzaChsKSxpJiZpKGQpLGR9fXJldHVybiBlJiYoYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkpLGEucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4sYS5hbm5vdGF0aW9uQ2xzPWEsYX0pfWZ1bmN0aW9uIG9QKG4pe3JldHVybiBmdW5jdGlvbiguLi5lKXtpZihuKXtsZXQgaT1uKC4uLmUpO2ZvcihsZXQgciBpbiBpKXRoaXNbcl09aVtyXX19fWZ1bmN0aW9uIGZoKG4sdCxlKXtyZXR1cm4gc3UoKCk9PntsZXQgaT1vUCh0KTtmdW5jdGlvbiByKC4uLm8pe2lmKHRoaXMgaW5zdGFuY2VvZiByKXJldHVybiBpLmFwcGx5KHRoaXMsbyksdGhpcztsZXQgYT1uZXcgciguLi5vKTtyZXR1cm4gcy5hbm5vdGF0aW9uPWEscztmdW5jdGlvbiBzKGwsYyxkKXtsZXQgdT1sLmhhc093blByb3BlcnR5KEttKT9sW0ttXTpPYmplY3QuZGVmaW5lUHJvcGVydHkobCxLbSx7dmFsdWU6W119KVtLbV07Zm9yKDt1Lmxlbmd0aDw9ZDspdS5wdXNoKG51bGwpO3JldHVybih1W2RdPXVbZF18fFtdKS5wdXNoKGEpLGx9fXJldHVybiBlJiYoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkpLHIucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4sci5hbm5vdGF0aW9uQ2xzPXIscn0pfWZ1bmN0aW9uIGN1KG4sdCxlLGkpe3JldHVybiBzdSgoKT0+e2xldCByPW9QKHQpO2Z1bmN0aW9uIG8oLi4uYSl7aWYodGhpcyBpbnN0YW5jZW9mIG8pcmV0dXJuIHIuYXBwbHkodGhpcyxhKSx0aGlzO2xldCBzPW5ldyBvKC4uLmEpO3JldHVybiBmdW5jdGlvbihjLGQpe2xldCB1PWMuY29uc3RydWN0b3IscD11Lmhhc093blByb3BlcnR5KEptKT91W0ptXTpPYmplY3QuZGVmaW5lUHJvcGVydHkodSxKbSx7dmFsdWU6e319KVtKbV07cFtkXT1wLmhhc093blByb3BlcnR5KGQpJiZwW2RdfHxbXSxwW2RdLnVuc2hpZnQocyksaSYmaShjLGQsLi4uYSl9fXJldHVybiBlJiYoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkpLG8ucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4sby5hbm5vdGF0aW9uQ2xzPW8sb30pfXZhciBrb2U9ZmgoIkF0dHJpYnV0ZSIsbj0+KHthdHRyaWJ1dGVOYW1lOm4sX19OR19FTEVNRU5UX0lEX186KCk9PlZyKG4pfSkpLGllPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fZGVzYz10LHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVjdGlvblRva2VuIix0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1iZXIiPT10eXBlb2YgZT90aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWU6dm9pZCAwIT09ZSYmKHRoaXMuXHUwMjc1cHJvdj1wZSh7dG9rZW46dGhpcyxwcm92aWRlZEluOmUucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6ZS5mYWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3RyaW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX0scmg9KG5ldyBpZSgiQW5hbHl6ZUZvckVudHJ5Q29tcG9uZW50cyIpLGNsYXNze30pO2Z1bmN0aW9uIFNzKG4pe2xldCB0PVdyLm5nO2lmKHQmJnQuXHUwMjc1Y29tcGlsZXJGYWNhZGUpcmV0dXJuIHQuXHUwMjc1Y29tcGlsZXJGYWNhZGU7dGhyb3cgbmV3IEVycm9yKCJKSVQgY29tcGlsZXIgdW5hdmFpbGFibGUiKX1jdSgiQ29udGVudENoaWxkcmVuIiwobix0PXt9KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiExLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiExLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEwLC4uLnR9KSxyaCksY3UoIkNvbnRlbnRDaGlsZCIsKG4sdD17fSk9Pih7c2VsZWN0b3I6bixmaXJzdDohMCxpc1ZpZXdRdWVyeTohMSxkZXNjZW5kYW50czohMCwuLi50fSkscmgpLGN1KCJWaWV3Q2hpbGRyZW4iLChuLHQ9e30pPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITAsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITAsLi4udH0pLHJoKSxjdSgiVmlld0NoaWxkIiwobix0KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiEwLGRlc2NlbmRhbnRzOiEwLC4uLnR9KSxyaCk7dmFyIFBvZT1GdW5jdGlvbjtmdW5jdGlvbiBqXyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1mdW5jdGlvbiB0dShuKXtyZXR1cm4gbi5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9ZnVuY3Rpb24gYVAobix0KXtuLmZvckVhY2goZT0+QXJyYXkuaXNBcnJheShlKT9hUChlLHQpOnQoZSkpfWZ1bmN0aW9uIGx6KG4sdCxlKXt0Pj1uLmxlbmd0aD9uLnB1c2goZSk6bi5zcGxpY2UodCwwLGUpfWZ1bmN0aW9uIG1NKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoLTE/bi5wb3AoKTpuLnNwbGljZSh0LDEpWzBdfWZ1bmN0aW9uIFhfKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuO2krKyllLnB1c2godCk7cmV0dXJuIGV9ZnVuY3Rpb24gbnMobix0LGUpe2xldCBpPXl5KG4sdCk7cmV0dXJuIGk+PTA/blsxfGldPWU6KGk9fmksZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bi5sZW5ndGg7aWYocj09dCluLnB1c2goZSxpKTtlbHNlIGlmKDE9PT1yKW4ucHVzaChpLG5bMF0pLG5bMF09ZTtlbHNle2ZvcihyLS0sbi5wdXNoKG5bci0xXSxuW3JdKTtyPnQ7KW5bcl09bltyLTJdLHItLTtuW3RdPWUsblt0KzFdPWl9fShuLGksdCxlKSksaX1mdW5jdGlvbiB5UihuLHQpe2xldCBlPXl5KG4sdCk7aWYoZT49MClyZXR1cm4gblsxfGVdfWZ1bmN0aW9uIHl5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT0wLHI9bi5sZW5ndGg+PjE7Zm9yKDtyIT09aTspe2xldCBvPWkrKHItaT4+MSksYT1uW288PDFdO2lmKHQ9PT1hKXJldHVybiBvPDwxO2E+dD9yPW86aT1vKzF9cmV0dXJufihyPDwxKX0obix0KX12YXIgTm9lPS9eZnVuY3Rpb25ccytcUytcKFwpXHMqe1tcc1xTXStcLmFwcGx5XCh0aGlzLFxzKihhcmd1bWVudHN8KD86W14oKV0rXChcW1xdLCk/W14oKV0rXChhcmd1bWVudHNcKS4qKVwpLyxCb2U9L15jbGFzc1xzK1tBLVphLXpcZCRfXSpccypleHRlbmRzXHMrW157XSt7LyxWb2U9L15jbGFzc1xzK1tBLVphLXpcZCRfXSpccypleHRlbmRzXHMrW157XSt7W1xzXFNdKmNvbnN0cnVjdG9yXHMqXCgvLEhvZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKFwpXHMqe1tefV0qc3VwZXJcKFwuXC5cLmFyZ3VtZW50c1wpLyxYUj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZWZsZWN0PXR8fFdyLlJlZmxlY3R9ZmFjdG9yeSh0KXtyZXR1cm4oLi4uZSk9Pm5ldyB0KC4uLmUpfV96aXBUeXBlc0FuZEFubm90YXRpb25zKHQsZSl7bGV0IGk7aT1YXyh0eXBlb2YgdD4idSI/ZS5sZW5ndGg6dC5sZW5ndGgpO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl09dHlwZW9mIHQ+InUiP1tdOnRbcl0mJnRbcl0hPU9iamVjdD9bdFtyXV06W10sZSYmbnVsbCE9ZVtyXSYmKGlbcl09aVtyXS5jb25jYXQoZVtyXSkpO3JldHVybiBpfV9vd25QYXJhbWV0ZXJzKHQsZSl7bGV0IGk9dC50b1N0cmluZygpO2lmKE5vZS50ZXN0KG49aSl8fEhvZS50ZXN0KG4pfHxCb2UudGVzdChuKSYmIVZvZS50ZXN0KG4pKXJldHVybiBudWxsO3ZhciBuO2lmKHQucGFyYW1ldGVycyYmdC5wYXJhbWV0ZXJzIT09ZS5wYXJhbWV0ZXJzKXJldHVybiB0LnBhcmFtZXRlcnM7bGV0IHI9dC5jdG9yUGFyYW1ldGVycztpZihyJiZyIT09ZS5jdG9yUGFyYW1ldGVycyl7bGV0IHM9ImZ1bmN0aW9uIj09dHlwZW9mIHI/cigpOnIsbD1zLm1hcChkPT5kJiZkLnR5cGUpLGM9cy5tYXAoZD0+ZCYmYlIoZC5kZWNvcmF0b3JzKSk7cmV0dXJuIHRoaXMuX3ppcFR5cGVzQW5kQW5ub3RhdGlvbnMobCxjKX1sZXQgbz10Lmhhc093blByb3BlcnR5KEttKSYmdFtLbV0sYT10aGlzLl9yZWZsZWN0JiZ0aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhJiZ0aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhKCJkZXNpZ246cGFyYW10eXBlcyIsdCk7cmV0dXJuIGF8fG8/dGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhhLG8pOlhfKHQubGVuZ3RoKX1wYXJhbWV0ZXJzKHQpe2lmKCFqXyh0KSlyZXR1cm5bXTtsZXQgZT1qQyh0KSxpPXRoaXMuX293blBhcmFtZXRlcnModCxlKTtyZXR1cm4haSYmZSE9PU9iamVjdCYmKGk9dGhpcy5wYXJhbWV0ZXJzKGUpKSxpfHxbXX1fb3duQW5ub3RhdGlvbnModCxlKXtpZih0LmFubm90YXRpb25zJiZ0LmFubm90YXRpb25zIT09ZS5hbm5vdGF0aW9ucyl7bGV0IGk9dC5hbm5vdGF0aW9ucztyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaSYmaS5hbm5vdGF0aW9ucyYmKGk9aS5hbm5vdGF0aW9ucyksaX1yZXR1cm4gdC5kZWNvcmF0b3JzJiZ0LmRlY29yYXRvcnMhPT1lLmRlY29yYXRvcnM/YlIodC5kZWNvcmF0b3JzKTp0Lmhhc093blByb3BlcnR5KFptKT90W1ptXTpudWxsfWFubm90YXRpb25zKHQpe2lmKCFqXyh0KSlyZXR1cm5bXTtsZXQgZT1qQyh0KSxpPXRoaXMuX293bkFubm90YXRpb25zKHQsZSl8fFtdO3JldHVybihlIT09T2JqZWN0P3RoaXMuYW5ub3RhdGlvbnMoZSk6W10pLmNvbmNhdChpKX1fb3duUHJvcE1ldGFkYXRhKHQsZSl7aWYodC5wcm9wTWV0YWRhdGEmJnQucHJvcE1ldGFkYXRhIT09ZS5wcm9wTWV0YWRhdGEpe2xldCBpPXQucHJvcE1ldGFkYXRhO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpLnByb3BNZXRhZGF0YSYmKGk9aS5wcm9wTWV0YWRhdGEpLGl9aWYodC5wcm9wRGVjb3JhdG9ycyYmdC5wcm9wRGVjb3JhdG9ycyE9PWUucHJvcERlY29yYXRvcnMpe2xldCBpPXQucHJvcERlY29yYXRvcnMscj17fTtyZXR1cm4gT2JqZWN0LmtleXMoaSkuZm9yRWFjaChvPT57cltvXT1iUihpW29dKX0pLHJ9cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoSm0pP3RbSm1dOm51bGx9cHJvcE1ldGFkYXRhKHQpe2lmKCFqXyh0KSlyZXR1cm57fTtsZXQgZT1qQyh0KSxpPXt9O2lmKGUhPT1PYmplY3Qpe2xldCBvPXRoaXMucHJvcE1ldGFkYXRhKGUpO09iamVjdC5rZXlzKG8pLmZvckVhY2goYT0+e2lbYV09b1thXX0pfWxldCByPXRoaXMuX293blByb3BNZXRhZGF0YSh0LGUpO3JldHVybiByJiZPYmplY3Qua2V5cyhyKS5mb3JFYWNoKG89PntsZXQgYT1bXTtpLmhhc093blByb3BlcnR5KG8pJiZhLnB1c2goLi4uaVtvXSksYS5wdXNoKC4uLnJbb10pLGlbb109YX0pLGl9b3duUHJvcE1ldGFkYXRhKHQpe3JldHVybiBqXyh0KSYmdGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsakModCkpfHx7fX1oYXNMaWZlY3ljbGVIb29rKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBQb2UmJmUgaW4gdC5wcm90b3R5cGV9fTtmdW5jdGlvbiBiUihuKXtyZXR1cm4gbj9uLm1hcCh0PT5uZXcoMCx0LnR5cGUuYW5ub3RhdGlvbkNscykoLi4udC5hcmdzP3QuYXJnczpbXSkpOltdfWZ1bmN0aW9uIGpDKG4pe2xldCB0PW4ucHJvdG90eXBlP09iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSk6bnVsbDtyZXR1cm4odD90LmNvbnN0cnVjdG9yOm51bGwpfHxPYmplY3R9dmFyIG1oPW15KGZoKCJJbmplY3QiLG49Pih7dG9rZW46bn0pKSwtMSksQWE9bXkoZmgoIk9wdGlvbmFsIiksOCksVW9lPW15KGZoKCJTZWxmIiksMiksaWQ9bXkoZmgoIlNraXBTZWxmIiksNCksam9lPW15KGZoKCJIb3N0IiksMSksTEg9bnVsbDtmdW5jdGlvbiBzUCgpe3JldHVybiBMSD1MSHx8bmV3IFhSfWZ1bmN0aW9uIExNKG4pe3JldHVybiBjeihzUCgpLnBhcmFtZXRlcnMobikpfWZ1bmN0aW9uIGN6KG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtsZXQgdD17dG9rZW46bnVsbCxhdHRyaWJ1dGU6bnVsbCxob3N0OiExLG9wdGlvbmFsOiExLHNlbGY6ITEsc2tpcFNlbGY6ITF9O2lmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjApZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aWYodm9pZCAwPT09aSljb250aW51ZTtsZXQgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7aWYoaSBpbnN0YW5jZW9mIEFhfHwiT3B0aW9uYWwiPT09ci5uZ01ldGFkYXRhTmFtZSl0Lm9wdGlvbmFsPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGlkfHwiU2tpcFNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNraXBTZWxmPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIFVvZXx8IlNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNlbGY9ITA7ZWxzZSBpZihpIGluc3RhbmNlb2Ygam9lfHwiSG9zdCI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuaG9zdD0hMDtlbHNlIGlmKGkgaW5zdGFuY2VvZiBtaCl0LnRva2VuPWkudG9rZW47ZWxzZSBpZihpIGluc3RhbmNlb2Yga29lKXtpZih2b2lkIDA9PT1pLmF0dHJpYnV0ZU5hbWUpdGhyb3cgbmV3IGJ0KDIwNCwhMSk7dC5hdHRyaWJ1dGU9aS5hdHRyaWJ1dGVOYW1lfWVsc2UgdC50b2tlbj1pfWVsc2UgdC50b2tlbj12b2lkIDA9PT1ufHxBcnJheS5pc0FycmF5KG4pJiYwPT09bi5sZW5ndGg/bnVsbDpuO3JldHVybiB0fSh0KSl9dmFyIGF5PW5ldyBNYXAsZHo9bmV3IFNldDtmdW5jdGlvbiB1eihuKXtyZXR1cm4hIShuLnRlbXBsYXRlVXJsJiYhbi5oYXNPd25Qcm9wZXJ0eSgidGVtcGxhdGUiKXx8bi5zdHlsZVVybHMmJm4uc3R5bGVVcmxzLmxlbmd0aCl9dmFyIE5IPW5ldyBNYXAsS29lPSEwO2Z1bmN0aW9uIHB6KG4sdCl7KGZ1bmN0aW9uKG4sdCxlKXtpZih0JiZ0IT09ZSYmS29lKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIG1vZHVsZSByZWdpc3RlcmVkIGZvciAke259IC0gJHtobyh0KX0gdnMgJHtobyh0Lm5hbWUpfWApfSkodCxOSC5nZXQodCl8fG51bGwsbiksTkguc2V0KHQsbil9dmFyIFFSLEVzPSgoKT0+e3JldHVybihuPUVzfHwoRXM9e30pKVtuLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixuW24uRGFzaENhc2U9Ml09IkRhc2hDYXNlIixFczt2YXIgbn0pKCksJG9lPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csZWFlPS8oPHw+KS8sdGFlPSJcdTIwMGIkMVx1MjAwYiIsZno9bmV3IE1hcCxpYWU9MCxCSD0iX19uZ0NvbnRleHRfXyI7ZnVuY3Rpb24gc2Mobix0KXtIcCh0KT8obltCSF09dFtSTV0sZnVuY3Rpb24obil7Znouc2V0KG5bUk1dLG4pfSh0KSk6bltCSF09dH1mdW5jdGlvbiBsUChuLHQpe3JldHVybiBRUihuLHQpfWZ1bmN0aW9uIGNQKG4pe2xldCB0PW5bWXJdO3JldHVybiAkYyh0KT90W1lyXTp0fWZ1bmN0aW9uIGRQKG4pe3JldHVybiBteihuW2l5XSl9ZnVuY3Rpb24gdVAobil7cmV0dXJuIG16KG5bcGxdKX1mdW5jdGlvbiBteihuKXtmb3IoO251bGwhPT1uJiYhJGMobik7KW49bltwbF07cmV0dXJuIG59ZnVuY3Rpb24gJG0obix0LGUsaSxyKXtpZihudWxsIT1pKXtsZXQgbyxhPSExOyRjKGkpP289aTpIcChpKSYmKGE9ITAsaT1pW2x1XSk7bGV0IHM9VHMoaSk7MD09PW4mJm51bGwhPT1lP251bGw9PXI/dnoodCxlLHMpOnFwKHQsZSxzLHJ8fG51bGwsITApOjE9PT1uJiZudWxsIT09ZT9xcCh0LGUscyxyfHxudWxsLCEwKToyPT09bj9tUCh0LHMsYSk6Mz09PW4mJnQuZGVzdHJveU5vZGUocyksbnVsbCE9byYmZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1lW1FrXTtvIT09VHMoZSkmJiRtKHQsbixpLG8scik7Zm9yKGxldCBzPVRhO3M8ZS5sZW5ndGg7cysrKXtsZXQgbD1lW3NdO2J5KGxbQm5dLGwsbix0LGksbyl9fSh0LG4sbyxlLHIpfX1mdW5jdGlvbiBwUChuLHQpe3JldHVybiBuLmNyZWF0ZVRleHQodCl9ZnVuY3Rpb24gaHoobix0LGUpe24uc2V0VmFsdWUodCxlKX1mdW5jdGlvbiBsYWUobix0KXtyZXR1cm4gbi5jcmVhdGVDb21tZW50KGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxhY2UoJG9lLHQ9PnQucmVwbGFjZShlYWUsdGFlKSl9KHQpKX1mdW5jdGlvbiBmUChuLHQsZSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudCh0LGUpfWZ1bmN0aW9uIGd6KG4sdCl7bGV0IGU9bltpaF0saT1lLmluZGV4T2YodCkscj10W1lyXTs1MTImdFtzaV0mJih0W3NpXSY9LTUxMyxLayhyLC0xKSksZS5zcGxpY2UoaSwxKX1mdW5jdGlvbiBaUihuLHQpe2lmKG4ubGVuZ3RoPD1UYSlyZXR1cm47bGV0IGU9VGErdCxpPW5bZV07aWYoaSl7bGV0IHI9aVtneV07bnVsbCE9PXImJnIhPT1uJiZneihyLGkpLHQ+MCYmKG5bZS0xXVtwbF09aVtwbF0pO2xldCBvPW1NKG4sVGErdCk7IWZ1bmN0aW9uKG4sdCl7Ynkobix0LHRbbGldLDIsbnVsbCxudWxsKSx0W2x1XT1udWxsLHRbRGFdPW51bGx9KGlbQm5dLGkpO2xldCBhPW9bb2NdO251bGwhPT1hJiZhLmRldGFjaFZpZXcob1tCbl0pLGlbWXJdPW51bGwsaVtwbF09bnVsbCxpW3NpXSY9LTY1fXJldHVybiBpfWZ1bmN0aW9uIF96KG4sdCl7aWYoISgxMjgmdFtzaV0pKXtsZXQgZT10W2xpXTtlLmRlc3Ryb3lOb2RlJiZieShuLHQsZSwzLG51bGwsbnVsbCksZnVuY3Rpb24obil7bGV0IHQ9bltpeV07aWYoIXQpcmV0dXJuIHZSKG5bQm5dLG4pO2Zvcig7dDspe2xldCBlPW51bGw7aWYoSHAodCkpZT10W2l5XTtlbHNle2xldCBpPXRbVGFdO2kmJihlPWkpfWlmKCFlKXtmb3IoO3QmJiF0W3BsXSYmdCE9PW47KUhwKHQpJiZ2Uih0W0JuXSx0KSx0PXRbWXJdO251bGw9PT10JiYodD1uKSxIcCh0KSYmdlIodFtCbl0sdCksZT10JiZ0W3BsXX10PWV9fSh0KX19ZnVuY3Rpb24gdlIobix0KXtpZighKDEyOCZ0W3NpXSkpe3Rbc2ldJj0tNjUsdFtzaV18PTEyOCxmdW5jdGlvbihuLHQpe2xldCBlO2lmKG51bGwhPW4mJm51bGwhPShlPW4uZGVzdHJveUhvb2tzKSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpe2xldCByPXRbZVtpXV07aWYoIShyIGluc3RhbmNlb2YgR3ApKXtsZXQgbz1lW2krMV07aWYoQXJyYXkuaXNBcnJheShvKSlmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErPTIpe2xldCBzPXJbb1thXV0sbD1vW2ErMV07TXMoNCxzLGwpO3RyeXtsLmNhbGwocyl9ZmluYWxseXtNcyg1LHMsbCl9fWVsc2V7TXMoNCxyLG8pO3RyeXtvLmNhbGwocil9ZmluYWxseXtNcyg1LHIsbyl9fX19fShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5jbGVhbnVwLGk9dFtueV0scj0tMTtpZihudWxsIT09ZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoLTE7bys9MilpZigic3RyaW5nIj09dHlwZW9mIGVbb10pe2xldCBhPWVbbyszXTthPj0wP2lbcj1hXSgpOmlbcj0tYV0udW5zdWJzY3JpYmUoKSxvKz0yfWVsc2V7bGV0IGE9aVtyPWVbbysxXV07ZVtvXS5jYWxsKGEpfWlmKG51bGwhPT1pKXtmb3IobGV0IG89cisxO288aS5sZW5ndGg7bysrKSgwLGlbb10pKCk7dFtueV09bnVsbH19KG4sdCksMT09PXRbQm5dLnR5cGUmJnRbbGldLmRlc3Ryb3koKTtsZXQgZT10W2d5XTtpZihudWxsIT09ZSYmJGModFtZcl0pKXtlIT09dFtZcl0mJmd6KGUsdCk7bGV0IGk9dFtvY107bnVsbCE9PWkmJmkuZGV0YWNoVmlldyhuKX0hZnVuY3Rpb24obil7ZnouZGVsZXRlKG5bUk1dKX0odCl9fWZ1bmN0aW9uIHl6KG4sdCxlKXtyZXR1cm4gYnoobix0LnBhcmVudCxlKX1mdW5jdGlvbiBieihuLHQsZSl7bGV0IGk9dDtmb3IoO251bGwhPT1pJiY0MCZpLnR5cGU7KWk9KHQ9aSkucGFyZW50O2lmKG51bGw9PT1pKXJldHVybiBlW2x1XTt7bGV0e2NvbXBvbmVudE9mZnNldDpyfT1pO2lmKHI+LTEpe2xldHtlbmNhcHN1bGF0aW9uOm99PW4uZGF0YVtpLmRpcmVjdGl2ZVN0YXJ0K3JdO2lmKG89PT1lcy5Ob25lfHxvPT09ZXMuRW11bGF0ZWQpcmV0dXJuIG51bGx9cmV0dXJuIHRzKGksZSl9fWZ1bmN0aW9uIHFwKG4sdCxlLGkscil7bi5pbnNlcnRCZWZvcmUodCxlLGkscil9ZnVuY3Rpb24gdnoobix0LGUpe24uYXBwZW5kQ2hpbGQodCxlKX1mdW5jdGlvbiBWSChuLHQsZSxpLHIpe251bGwhPT1pP3FwKG4sdCxlLGkscik6dnoobix0LGUpfWZ1bmN0aW9uIE5NKG4sdCl7cmV0dXJuIG4ucGFyZW50Tm9kZSh0KX1mdW5jdGlvbiB4eihuLHQsZSl7cmV0dXJuIE16KG4sdCxlKX1mdW5jdGlvbiBDeihuLHQsZSl7cmV0dXJuIDQwJm4udHlwZT90cyhuLGUpOm51bGx9dmFyIEtSLEdDLCRSLFdDLE16PUN6O2Z1bmN0aW9uIHd6KG4sdCl7TXo9bixLUj10fWZ1bmN0aW9uIEJNKG4sdCxlLGkpe2xldCByPXl6KG4saSx0KSxvPXRbbGldLHM9eHooaS5wYXJlbnR8fHRbRGFdLGksdCk7aWYobnVsbCE9cilpZihBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKVZIKG8scixlW2xdLHMsITEpO2Vsc2UgVkgobyxyLGUscywhMSk7dm9pZCAwIT09S1ImJktSKG8saSx0LGUscil9ZnVuY3Rpb24gS0Mobix0KXtpZihudWxsIT09dCl7bGV0IGU9dC50eXBlO2lmKDMmZSlyZXR1cm4gdHModCxuKTtpZig0JmUpcmV0dXJuIEpSKC0xLG5bdC5pbmRleF0pO2lmKDgmZSl7bGV0IGk9dC5jaGlsZDtpZihudWxsIT09aSlyZXR1cm4gS0MobixpKTt7bGV0IHI9blt0LmluZGV4XTtyZXR1cm4gJGMocik/SlIoLTEscik6VHMocil9fWlmKDMyJmUpcmV0dXJuIGxQKHQsbikoKXx8VHMoblt0LmluZGV4XSk7e2xldCBpPVN6KG4sdCk7cmV0dXJuIG51bGwhPT1pP0FycmF5LmlzQXJyYXkoaSk/aVswXTpLQyhjUChuW2ZsXSksaSk6S0Mobix0Lm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTeihuLHQpe3JldHVybiBudWxsIT09dD9uW2ZsXVtEYV0ucHJvamVjdGlvblt0LnByb2plY3Rpb25dOm51bGx9ZnVuY3Rpb24gSlIobix0KXtsZXQgZT1UYStuKzE7aWYoZTx0Lmxlbmd0aCl7bGV0IGk9dFtlXSxyPWlbQm5dLmZpcnN0Q2hpbGQ7aWYobnVsbCE9PXIpcmV0dXJuIEtDKGkscil9cmV0dXJuIHRbUWtdfWZ1bmN0aW9uIG1QKG4sdCxlKXtsZXQgaT1OTShuLHQpO2kmJmZ1bmN0aW9uKG4sdCxlLGkpe24ucmVtb3ZlQ2hpbGQodCxlLGkpfShuLGksdCxlKX1mdW5jdGlvbiBoUChuLHQsZSxpLHIsbyxhKXtmb3IoO251bGwhPWU7KXtsZXQgcz1pW2UuaW5kZXhdLGw9ZS50eXBlO2lmKGEmJjA9PT10JiYocyYmc2MoVHMocyksaSksZS5mbGFnc3w9MiksMzIhPSgzMiZlLmZsYWdzKSlpZig4JmwpaFAobix0LGUuY2hpbGQsaSxyLG8sITEpLCRtKHQsbixyLHMsbyk7ZWxzZSBpZigzMiZsKXtsZXQgZCxjPWxQKGUsaSk7Zm9yKDtkPWMoKTspJG0odCxuLHIsZCxvKTskbSh0LG4scixzLG8pfWVsc2UgMTYmbD9FeihuLHQsaSxlLHIsbyk6JG0odCxuLHIscyxvKTtlPWE/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9fWZ1bmN0aW9uIGJ5KG4sdCxlLGkscixvKXtoUChlLGksbi5maXJzdENoaWxkLHQscixvLCExKX1mdW5jdGlvbiBFeihuLHQsZSxpLHIsbyl7bGV0IGE9ZVtmbF0sbD1hW0RhXS5wcm9qZWN0aW9uW2kucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKykkbSh0LG4scixsW2NdLG8pO2Vsc2UgaFAobix0LGwsYVtZcl0scixvLCEwKX1mdW5jdGlvbiBUeihuLHQsZSl7IiI9PT1lP24ucmVtb3ZlQXR0cmlidXRlKHQsImNsYXNzIik6bi5zZXRBdHRyaWJ1dGUodCwiY2xhc3MiLGUpfWZ1bmN0aW9uIER6KG4sdCxlKXtsZXR7bWVyZ2VkQXR0cnM6aSxjbGFzc2VzOnIsc3R5bGVzOm99PWU7bnVsbCE9PWkmJkdSKG4sdCxpKSxudWxsIT09ciYmVHoobix0LHIpLG51bGwhPT1vJiZmdW5jdGlvbihuLHQsZSl7bi5zZXRBdHRyaWJ1dGUodCwic3R5bGUiLGUpfShuLHQsbyl9ZnVuY3Rpb24gSXooKXtpZih2b2lkIDA9PT1HQyYmKEdDPW51bGwsV3IudHJ1c3RlZFR5cGVzKSl0cnl7R0M9V3IudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhUTUw6bj0+bixjcmVhdGVTY3JpcHQ6bj0+bixjcmVhdGVTY3JpcHRVUkw6bj0+bn0pfWNhdGNoe31yZXR1cm4gR0N9ZnVuY3Rpb24gaGgobil7cmV0dXJuIEl6KCk/LmNyZWF0ZUhUTUwobil8fG59ZnVuY3Rpb24gUnooKXtyZXR1cm4gdm9pZCAwIT09JFI/JFI6dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudDp2b2lkIDB9ZnVuY3Rpb24gZ1AoKXtpZih2b2lkIDA9PT1XQyYmKFdDPW51bGwsV3IudHJ1c3RlZFR5cGVzKSl0cnl7V0M9V3IudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBXQ31mdW5jdGlvbiBISChuKXtyZXR1cm4gZ1AoKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiB6SChuKXtyZXR1cm4gZ1AoKT8uY3JlYXRlU2NyaXB0KG4pfHxufWZ1bmN0aW9uIFVIKG4pe3JldHVybiBnUCgpPy5jcmVhdGVTY3JpcHRVUkwobil8fG59dmFyIEpjPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT10fXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7Znl9KWB9fSxlaz1jbGFzcyBleHRlbmRzIEpje2dldFR5cGVOYW1lKCl7cmV0dXJuIkhUTUwifX0sdGs9Y2xhc3MgZXh0ZW5kcyBKY3tnZXRUeXBlTmFtZSgpe3JldHVybiJTdHlsZSJ9fSxuaz1jbGFzcyBleHRlbmRzIEpje2dldFR5cGVOYW1lKCl7cmV0dXJuIlNjcmlwdCJ9fSxpaz1jbGFzcyBleHRlbmRzIEpje2dldFR5cGVOYW1lKCl7cmV0dXJuIlVSTCJ9fSxyaz1jbGFzcyBleHRlbmRzIEpje2dldFR5cGVOYW1lKCl7cmV0dXJuIlJlc291cmNlVVJMIn19O2Z1bmN0aW9uIFJhKG4pe3JldHVybiBuIGluc3RhbmNlb2YgSmM/bi5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Om59ZnVuY3Rpb24gZ2wobix0KXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEpjJiZuLmdldFR5cGVOYW1lKCl8fG51bGx9KG4pO2lmKG51bGwhPWUmJmUhPT10KXtpZigiUmVzb3VyY2VVUkwiPT09ZSYmIlVSTCI9PT10KXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYSBzYWZlICR7dH0sIGdvdCBhICR7ZX0gKHNlZSAke2Z5fSlgKX1yZXR1cm4gZT09PXR9ZnVuY3Rpb24gTnoobil7bGV0IHQ9bmV3IGFrKG4pO3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGhoKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyBvayh0KTp0fXZhciBvaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJvZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtsZXQgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhoaCh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaHtyZXR1cm4gbnVsbH19fSxhaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0Iil9Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtsZXQgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gZS5pbm5lckhUTUw9aGgodCksZX19LFRhZT0vXig/IWphdmFzY3JpcHQ6KSg/OlthLXowLTkrLi1dKzp8W14mOlwvPyNdKig/OltcLz8jXXwkKSkvaTtmdW5jdGlvbiB2eShuKXtyZXR1cm4obj1TdHJpbmcobikpLm1hdGNoKFRhZSk/bjoidW5zYWZlOiIrbn1mdW5jdGlvbiByZChuKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbi5zcGxpdCgiLCIpKXRbZV09ITA7cmV0dXJuIHR9ZnVuY3Rpb24geHkoLi4ubil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIG4pZm9yKGxldCBpIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShpKSYmKHRbaV09ITApO3JldHVybiB0fXZhciBxQyxCej1yZCgiYXJlYSxicixjb2wsaHIsaW1nLHdiciIpLFZ6PXJkKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksSHo9cmQoInJwLHJ0IiksRGFlPXh5KEh6LFZ6KSxJYWU9eHkoVnoscmQoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLEFhZT14eShIeixyZCgiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVyZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLHNrPXh5KEJ6LElhZSxBYWUsRGFlKSxfUD1yZCgiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIiksUmFlPXJkKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVmYXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJvbGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSxrYWU9cmQoImFyaWEtYWN0aXZlZGVzY2VuZGFudCxhcmlhLWF0b21pYyxhcmlhLWF1dG9jb21wbGV0ZSxhcmlhLWJ1c3ksYXJpYS1jaGVja2VkLGFyaWEtY29sY291bnQsYXJpYS1jb2xpbmRleCxhcmlhLWNvbHNwYW4sYXJpYS1jb250cm9scyxhcmlhLWN1cnJlbnQsYXJpYS1kZXNjcmliZWRieSxhcmlhLWRldGFpbHMsYXJpYS1kaXNhYmxlZCxhcmlhLWRyb3BlZmZlY3QsYXJpYS1lcnJvcm1lc3NhZ2UsYXJpYS1leHBhbmRlZCxhcmlhLWZsb3d0byxhcmlhLWdyYWJiZWQsYXJpYS1oYXNwb3B1cCxhcmlhLWhpZGRlbixhcmlhLWludmFsaWQsYXJpYS1rZXlzaG9ydGN1dHMsYXJpYS1sYWJlbCxhcmlhLWxhYmVsbGVkYnksYXJpYS1sZXZlbCxhcmlhLWxpdmUsYXJpYS1tb2RhbCxhcmlhLW11bHRpbGluZSxhcmlhLW11bHRpc2VsZWN0YWJsZSxhcmlhLW9yaWVudGF0aW9uLGFyaWEtb3ducyxhcmlhLXBsYWNlaG9sZGVyLGFyaWEtcG9zaW5zZXQsYXJpYS1wcmVzc2VkLGFyaWEtcmVhZG9ubHksYXJpYS1yZWxldmFudCxhcmlhLXJlcXVpcmVkLGFyaWEtcm9sZWRlc2NyaXB0aW9uLGFyaWEtcm93Y291bnQsYXJpYS1yb3dpbmRleCxhcmlhLXJvd3NwYW4sYXJpYS1zZWxlY3RlZCxhcmlhLXNldHNpemUsYXJpYS1zb3J0LGFyaWEtdmFsdWVtYXgsYXJpYS12YWx1ZW1pbixhcmlhLXZhbHVlbm93LGFyaWEtdmFsdWV0ZXh0Iikseno9eHkoX1AsUmFlLGthZSksUGFlPXJkKCJzY3JpcHQsc3R5bGUsdGVtcGxhdGUiKSxsaz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXNhbml0aXplQ2hpbGRyZW4odCl7bGV0IGU9dC5maXJzdENoaWxkLGk9ITA7Zm9yKDtlOylpZihlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/aT10aGlzLnN0YXJ0RWxlbWVudChlKTplLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhlLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsaSYmZS5maXJzdENoaWxkKWU9ZS5maXJzdENoaWxkO2Vsc2UgZm9yKDtlOyl7ZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoZSk7bGV0IHI9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoZSxlLm5leHRTaWJsaW5nKTtpZihyKXtlPXI7YnJlYWt9ZT10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUucGFyZW50Tm9kZSl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudCh0KXtsZXQgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoIXNrLmhhc093blByb3BlcnR5KGUpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwhUGFlLmhhc093blByb3BlcnR5KGUpO3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGUpO2xldCBpPXQuYXR0cmlidXRlcztmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aS5pdGVtKHIpLGE9by5uYW1lLHM9YS50b0xvd2VyQ2FzZSgpO2lmKCF6ei5oYXNPd25Qcm9wZXJ0eShzKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IGw9by52YWx1ZTtfUFtzXSYmKGw9dnkobCkpLHRoaXMuYnVmLnB1c2goIiAiLGEsJz0iJyxqSChsKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudCh0KXtsZXQgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7c2suaGFzT3duUHJvcGVydHkoZSkmJiFCei5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKHQpe3RoaXMuYnVmLnB1c2goakgodCkpfWNoZWNrQ2xvYmJlcmVkRWxlbWVudCh0LGUpe2lmKGUmJih0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKT09PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6ICR7dC5vdXRlckhUTUx9YCk7cmV0dXJuIGV9fSxPYWU9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLEZhZT0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gakgobil7cmV0dXJuIG4ucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoT2FlLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrKDEwMjQqKHQuY2hhckNvZGVBdCgwKS01NTI5NikrKHQuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoRmFlLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIHlQKG4sdCl7bGV0IGU9bnVsbDt0cnl7cUM9cUN8fE56KG4pO2xldCBpPXQ/U3RyaW5nKHQpOiIiO2U9cUMuZ2V0SW5lcnRCb2R5RWxlbWVudChpKTtsZXQgcj01LG89aTtkb3tpZigwPT09cil0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7ci0tLGk9byxvPWUuaW5uZXJIVE1MLGU9cUMuZ2V0SW5lcnRCb2R5RWxlbWVudChpKX13aGlsZShpIT09byk7cmV0dXJuIGhoKChuZXcgbGspLnNhbml0aXplQ2hpbGRyZW4oY2soZSl8fGUpKX1maW5hbGx5e2lmKGUpe2xldCBpPWNrKGUpfHxlO2Zvcig7aS5maXJzdENoaWxkOylpLnJlbW92ZUNoaWxkKGkuZmlyc3RDaGlsZCl9fX1mdW5jdGlvbiBjayhuKXtyZXR1cm4iY29udGVudCJpbiBuJiZmdW5jdGlvbihuKXtyZXR1cm4gbi5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09bi5ub2RlTmFtZX0obik/bi5jb250ZW50Om51bGx9dmFyIHFyPSgoKT0+e3JldHVybihuPXFyfHwocXI9e30pKVtuLk5PTkU9MF09Ik5PTkUiLG5bbi5IVE1MPTFdPSJIVE1MIixuW24uU1RZTEU9Ml09IlNUWUxFIixuW24uU0NSSVBUPTNdPSJTQ1JJUFQiLG5bbi5VUkw9NF09IlVSTCIsbltuLlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIixxcjt2YXIgbn0pKCk7ZnVuY3Rpb24gYlAobil7bGV0IHQ9Q3koKTtyZXR1cm4gdD9ISCh0LnNhbml0aXplKHFyLkhUTUwsbil8fCIiKTpnbChuLCJIVE1MIik/SEgoUmEobikpOnlQKFJ6KCksWW4obikpfWZ1bmN0aW9uIEFzKG4pe2xldCB0PUN5KCk7cmV0dXJuIHQ/dC5zYW5pdGl6ZShxci5VUkwsbil8fCIiOmdsKG4sIlVSTCIpP1JhKG4pOnZ5KFluKG4pKX1mdW5jdGlvbiBVeihuKXtsZXQgdD1DeSgpO2lmKHQpcmV0dXJuIFVIKHQuc2FuaXRpemUocXIuUkVTT1VSQ0VfVVJMLG4pfHwiIik7aWYoZ2wobiwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gVUgoUmEobikpO3Rocm93IG5ldyBidCg5MDQsITEpfWZ1bmN0aW9uIEN5KCl7bGV0IG49S2UoKTtyZXR1cm4gbiYmblt6Ul19dmFyIFZNPW5ldyBpZSgiRU5WSVJPTk1FTlRfSU5JVElBTElaRVIiKSxqej1uZXcgaWUoIklOSkVDVE9SIiwtMSksR3o9bmV3IGllKCJJTkpFQ1RPUl9ERUZfVFlQRVMiKSxoTT1jbGFzc3tnZXQodCxlPXR5KXtpZihlPT09dHkpe2xldCBpPW5ldyBFcnJvcihgTnVsbEluamVjdG9yRXJyb3I6IE5vIHByb3ZpZGVyIGZvciAke2hvKHQpfSFgKTt0aHJvdyBpLm5hbWU9Ik51bGxJbmplY3RvckVycm9yIixpfXJldHVybiBlfX07ZnVuY3Rpb24gamFlKC4uLm4pe3JldHVybnsiXHUwMjc1cHJvdmlkZXJzIjpXeigwLG4pLCJcdTAyNzVmcm9tTmdNb2R1bGUiOiEwfX1mdW5jdGlvbiBXeihuLC4uLnQpe2xldCByLGU9W10saT1uZXcgU2V0O3JldHVybiBhUCh0LG89PntsZXQgYT1vO2RrKGEsZSxbXSxpKSYmKHJ8fChyPVtdKSxyLnB1c2goYSkpfSksdm9pZCAwIT09ciYmcXoocixlKSxlfWZ1bmN0aW9uIHF6KG4sdCl7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldHtwcm92aWRlcnM6cn09bltlXTt2UChyLG89Pnt0LnB1c2gobyl9KX19ZnVuY3Rpb24gZGsobix0LGUsaSl7aWYoIShuPWtpKG4pKSlyZXR1cm4hMTtsZXQgcj1udWxsLG89REgobiksYT0hbyYmd3Mobik7aWYob3x8YSl7aWYoYSYmIWEuc3RhbmRhbG9uZSlyZXR1cm4hMTtyPW59ZWxzZXtsZXQgbD1uLm5nTW9kdWxlO2lmKG89REgobCksIW8pcmV0dXJuITE7cj1sfWxldCBzPWkuaGFzKHIpO2lmKGEpe2lmKHMpcmV0dXJuITE7aWYoaS5hZGQociksYS5kZXBlbmRlbmNpZXMpe2xldCBsPSJmdW5jdGlvbiI9PXR5cGVvZiBhLmRlcGVuZGVuY2llcz9hLmRlcGVuZGVuY2llcygpOmEuZGVwZW5kZW5jaWVzO2ZvcihsZXQgYyBvZiBsKWRrKGMsdCxlLGkpfX1lbHNle2lmKCFvKXJldHVybiExO3tpZihudWxsIT1vLmltcG9ydHMmJiFzKXtsZXQgYztpLmFkZChyKTt0cnl7YVAoby5pbXBvcnRzLGQ9PntkayhkLHQsZSxpKSYmKGN8fChjPVtdKSxjLnB1c2goZCkpfSl9ZmluYWxseXt9dm9pZCAwIT09YyYmcXooYyx0KX1pZighcyl7bGV0IGM9VXAocil8fCgoKT0+bmV3IHIpO3QucHVzaCh7cHJvdmlkZTpyLHVzZUZhY3Rvcnk6YyxkZXBzOlVpfSx7cHJvdmlkZTpHeix1c2VWYWx1ZTpyLG11bHRpOiEwfSx7cHJvdmlkZTpWTSx1c2VWYWx1ZTooKT0+TyhyKSxtdWx0aTohMH0pfWxldCBsPW8ucHJvdmlkZXJzO251bGw9PWx8fHN8fHZQKGwsZD0+e3QucHVzaChkKX0pfX1yZXR1cm4gciE9PW4mJnZvaWQgMCE9PW4ucHJvdmlkZXJzfWZ1bmN0aW9uIHZQKG4sdCl7Zm9yKGxldCBlIG9mIG4pQzUoZSkmJihlPWUuXHUwMjc1cHJvdmlkZXJzKSxBcnJheS5pc0FycmF5KGUpP3ZQKGUsdCk6dChlKX12YXIgR2FlPW5yKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpucn0pO2Z1bmN0aW9uIFl6KG4pe3JldHVybiBudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuJiZHYWUgaW4gbn1mdW5jdGlvbiBvaChuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn12YXIgeFIsek09bmV3IGllKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksSkM9e30sWGFlPXt9O2Z1bmN0aW9uIHhQKCl7cmV0dXJuIHZvaWQgMD09PXhSJiYoeFI9bmV3IGhNKSx4Un12YXIgbGM9Y2xhc3N7fSxnTT1jbGFzcyBleHRlbmRzIGxje2dldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWNvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1pLHRoaXMuc2NvcGVzPXIsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxwayh0LGE9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKGEpKSx0aGlzLnJlY29yZHMuc2V0KGp6LGVoKHZvaWQgMCx0aGlzKSksci5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQobGMsZWgodm9pZCAwLHRoaXMpKTtsZXQgbz10aGlzLnJlY29yZHMuZ2V0KHpNKTtudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIG8udmFsdWUmJnRoaXMuc2NvcGVzLmFkZChvLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChHei5tdWx0aSxVaSxNaS5TZWxmKSl9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO3RyeXtmb3IobGV0IHQgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcyl0Lm5nT25EZXN0cm95KCk7Zm9yKGxldCB0IG9mIHRoaXMuX29uRGVzdHJveUhvb2tzKXQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5sZW5ndGg9MH19b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUhvb2tzLnB1c2godCl9cnVuSW5Db250ZXh0KHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7bGV0IGU9WG0odGhpcyksaT1Dcyh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7WG0oZSksQ3MoaSl9fWdldCh0LGU9dHksaT1NaS5EZWZhdWx0KXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGk9SU0oaSk7bGV0IHI9WG0odGhpcyksbz1Dcyh2b2lkIDApO3RyeXtpZighKGkmTWkuU2tpcFNlbGYpKXtsZXQgcz10aGlzLnJlY29yZHMuZ2V0KHQpO2lmKHZvaWQgMD09PXMpe2xldCBsPSgiZnVuY3Rpb24iPT10eXBlb2Yobj10KXx8Im9iamVjdCI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgaWUpJiZXayh0KTtzPWwmJnRoaXMuaW5qZWN0YWJsZURlZkluU2NvcGUobCk/ZWgodWsodCksSkMpOm51bGwsdGhpcy5yZWNvcmRzLnNldCh0LHMpfWlmKG51bGwhPXMpcmV0dXJuIHRoaXMuaHlkcmF0ZSh0LHMpfXJldHVybihpJk1pLlNlbGY/eFAoKTp0aGlzLnBhcmVudCkuZ2V0KHQsZT1pJk1pLk9wdGlvbmFsJiZlPT09dHk/bnVsbDplKX1jYXRjaChhKXtpZigiTnVsbEluamVjdG9yRXJyb3IiPT09YS5uYW1lKXtpZigoYVtyTV09YVtyTV18fFtdKS51bnNoaWZ0KGhvKHQpKSxyKXRocm93IGE7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW5bck1dO3Rocm93IHRbSUhdJiZyLnVuc2hpZnQodFtJSF0pLG4ubWVzc2FnZT1mdW5jdGlvbihuLHQsZSxpPW51bGwpe249biYmIlxuIj09PW4uY2hhckF0KDApJiZuLmNoYXJBdCgxKT09enJlP24uc2xpY2UoMik6bjtsZXQgcj1obyh0KTtpZihBcnJheS5pc0FycmF5KHQpKXI9dC5tYXAoaG8pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCl7bGV0IG89W107Zm9yKGxldCBhIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShhKSl7bGV0IHM9dFthXTtvLnB1c2goYSsiOiIrKCJzdHJpbmciPT10eXBlb2Ygcz9KU09OLnN0cmluZ2lmeShzKTpobyhzKSkpfXI9YHske28uam9pbigiLCAiKX19YH1yZXR1cm5gJHtlfSR7aT8iKCIraSsiKSI6IiJ9WyR7cn1dOiAke24ucmVwbGFjZShIcmUsIlxuICAiKX1gfSgiXG4iK24ubWVzc2FnZSxyLGUsaSksbltWcmVdPXIsbltyTV09bnVsbCxufShhLHQsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IGF9ZmluYWxseXtDcyhvKSxYbShyKX12YXIgbn1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtsZXQgdD1YbSh0aGlzKSxlPUNzKHZvaWQgMCk7dHJ5e2xldCBpPXRoaXMuZ2V0KFZNLm11bHRpLFVpLE1pLlNlbGYpO2ZvcihsZXQgciBvZiBpKXIoKX1maW5hbGx5e1htKHQpLENzKGUpfX10b1N0cmluZygpe2xldCB0PVtdLGU9dGhpcy5yZWNvcmRzO2ZvcihsZXQgaSBvZiBlLmtleXMoKSl0LnB1c2goaG8oaSkpO3JldHVybmBSM0luamVjdG9yWyR7dC5qb2luKCIsICIpfV1gfWFzc2VydE5vdERlc3Ryb3llZCgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgYnQoMjA1LCExKX1wcm9jZXNzUHJvdmlkZXIodCl7bGV0IGU9b2godD1raSh0KSk/dDpraSh0JiZ0LnByb3ZpZGUpLGk9ZnVuY3Rpb24obil7cmV0dXJuIFl6KG4pP2VoKHZvaWQgMCxuLnVzZVZhbHVlKTplaChYeihuKSxKQyl9KHQpO2lmKG9oKHQpfHwhMCE9PXQubXVsdGkpdGhpcy5yZWNvcmRzLmdldChlKTtlbHNle2xldCByPXRoaXMucmVjb3Jkcy5nZXQoZSk7cnx8KHI9ZWgodm9pZCAwLEpDLCEwKSxyLmZhY3Rvcnk9KCk9PkhSKHIubXVsdGkpLHRoaXMucmVjb3Jkcy5zZXQoZSxyKSksZT10LHIubXVsdGkucHVzaCh0KX10aGlzLnJlY29yZHMuc2V0KGUsaSl9aHlkcmF0ZSh0LGUpe3JldHVybiBlLnZhbHVlPT09SkMmJihlLnZhbHVlPVhhZSxlLnZhbHVlPWUuZmFjdG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGUudmFsdWUmJmUudmFsdWUmJm51bGwhPT0obj1lLnZhbHVlKSYmIm9iamVjdCI9PXR5cGVvZiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5uZ09uRGVzdHJveSYmdGhpcy5fbmdPbkRlc3Ryb3lIb29rcy5hZGQoZS52YWx1ZSksZS52YWx1ZTt2YXIgbn1pbmplY3RhYmxlRGVmSW5TY29wZSh0KXtpZighdC5wcm92aWRlZEluKXJldHVybiExO2xldCBlPWtpKHQucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlPyJhbnkiPT09ZXx8dGhpcy5zY29wZXMuaGFzKGUpOnRoaXMuaW5qZWN0b3JEZWZUeXBlcy5oYXMoZSl9fTtmdW5jdGlvbiB1ayhuKXtsZXQgdD1XayhuKSxlPW51bGwhPT10P3QuZmFjdG9yeTpVcChuKTtpZihudWxsIT09ZSlyZXR1cm4gZTtpZihuIGluc3RhbmNlb2YgaWUpdGhyb3cgbmV3IGJ0KDIwNCwhMSk7aWYobiBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uLmxlbmd0aDtpZih0PjApdGhyb3cgWF8odCwiPyIpLG5ldyBidCgyMDQsITEpO2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiBuJiYobltpTV18fG5bdzVdKXx8bnVsbH0obik7cmV0dXJuIG51bGwhPT1lPygpPT5lLmZhY3Rvcnkobik6KCk9Pm5ldyBufShuKTt0aHJvdyBuZXcgYnQoMjA0LCExKX1mdW5jdGlvbiBYeihuLHQsZSl7bGV0IGk7aWYob2gobikpe2xldCByPWtpKG4pO3JldHVybiBVcChyKXx8dWsocil9aWYoWXoobikpaT0oKT0+a2kobi51c2VWYWx1ZSk7ZWxzZSBpZihmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwhbi51c2VGYWN0b3J5KX0obikpaT0oKT0+bi51c2VGYWN0b3J5KC4uLkhSKG4uZGVwc3x8W10pKTtlbHNlIGlmKGZ1bmN0aW9uKG4pe3JldHVybiEoIW58fCFuLnVzZUV4aXN0aW5nKX0obikpaT0oKT0+TyhraShuLnVzZUV4aXN0aW5nKSk7ZWxzZXtsZXQgcj1raShuJiYobi51c2VDbGFzc3x8bi5wcm92aWRlKSk7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiEhbi5kZXBzfShuKSlyZXR1cm4gVXAocil8fHVrKHIpO2k9KCk9Pm5ldyByKC4uLkhSKG4uZGVwcykpfXJldHVybiBpfWZ1bmN0aW9uIGVoKG4sdCxlPSExKXtyZXR1cm57ZmFjdG9yeTpuLHZhbHVlOnQsbXVsdGk6ZT9bXTp2b2lkIDB9fWZ1bmN0aW9uIHBrKG4sdCl7Zm9yKGxldCBlIG9mIG4pQXJyYXkuaXNBcnJheShlKT9wayhlLHQpOmUmJkM1KGUpP3BrKGUuXHUwMjc1cHJvdmlkZXJzLHQpOnQoZSl9dmFyIGZrPWNsYXNze30sX009Y2xhc3N7fSxtaz1jbGFzc3tyZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXt0aHJvdyBmdW5jdGlvbihuKXtsZXQgdD1FcnJvcihgTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICR7aG8obil9LiBEaWQgeW91IGFkZCBpdCB0byBATmdNb2R1bGUuZW50cnlDb21wb25lbnRzP2ApO3JldHVybiB0Lm5nQ29tcG9uZW50PW4sdH0odCl9fSxRcj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5OVUxMPW5ldyBtayxufSkoKTtmdW5jdGlvbiBuc2UoKXtyZXR1cm4gZ2goUG8oKSxLZSgpKX1mdW5jdGlvbiBnaChuLHQpe3JldHVybiBuZXcgYmUodHMobix0KSl9dmFyIGJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5uYXRpdmVFbGVtZW50PWV9fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPW5zZSxufSkoKTtmdW5jdGlvbiBpc2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBiZT9uLm5hdGl2ZUVsZW1lbnQ6bn12YXIgY2M9Y2xhc3N7fSxkYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24oKXtsZXQgbj1LZSgpLGU9ZWQoUG8oKS5pbmRleCxuKTtyZXR1cm4oSHAoZSk/ZTpuKVtsaV19KCksbn0pKCksb3NlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLG59KSgpLGhsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19LGFzZT1uZXcgaGwoIjE1LjIuOSIpLENSPXt9LHNzZT0ibmdPcmlnaW5hbEVycm9yIjtmdW5jdGlvbiBNUihuKXtyZXR1cm4gbltzc2VdfXZhciBjYT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1oYW5kbGVFcnJvcih0KXtsZXQgZT10aGlzLl9maW5kT3JpZ2luYWxFcnJvcih0KTt0aGlzLl9jb25zb2xlLmVycm9yKCJFUlJPUiIsdCksZSYmdGhpcy5fY29uc29sZS5lcnJvcigiT1JJR0lOQUwgRVJST1IiLGUpfV9maW5kT3JpZ2luYWxFcnJvcih0KXtsZXQgZT10JiZNUih0KTtmb3IoO2UmJk1SKGUpOyllPU1SKGUpO3JldHVybiBlfHxudWxsfX07ZnVuY3Rpb24gdWMobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudH1mdW5jdGlvbiAkQyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZ1bmN0aW9uP24oKTpufWZ1bmN0aW9uIFF6KG4sdCxlKXtsZXQgaT1uLmxlbmd0aDtmb3IoOzspe2xldCByPW4uaW5kZXhPZih0LGUpO2lmKC0xPT09cilyZXR1cm4gcjtpZigwPT09cnx8bi5jaGFyQ29kZUF0KHItMSk8PTMyKXtsZXQgbz10Lmxlbmd0aDtpZihyK289PT1pfHxuLmNoYXJDb2RlQXQocitvKTw9MzIpcmV0dXJuIHJ9ZT1yKzF9fXZhciBaej0ibmctdGVtcGxhdGUiO2Z1bmN0aW9uIGRzZShuLHQsZSl7bGV0IGk9MCxyPSEwO2Zvcig7aTxuLmxlbmd0aDspe2xldCBvPW5baSsrXTtpZigic3RyaW5nIj09dHlwZW9mIG8mJnIpe2xldCBhPW5baSsrXTtpZihlJiYiY2xhc3MiPT09byYmLTEhPT1ReihhLnRvTG93ZXJDYXNlKCksdCwwKSlyZXR1cm4hMH1lbHNle2lmKDE9PT1vKXtmb3IoO2k8bi5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2Yobz1uW2krK10pOylpZihvLnRvTG93ZXJDYXNlKCk9PT10KXJldHVybiEwO3JldHVybiExfSJudW1iZXIiPT10eXBlb2YgbyYmKHI9ITEpfX1yZXR1cm4hMX1mdW5jdGlvbiBLeihuKXtyZXR1cm4gND09PW4udHlwZSYmbi52YWx1ZSE9PVp6fWZ1bmN0aW9uIHVzZShuLHQsZSl7cmV0dXJuIHQ9PT0oNCE9PW4udHlwZXx8ZT9uLnZhbHVlOlp6KX1mdW5jdGlvbiBwc2Uobix0LGUpe2xldCBpPTQscj1uLmF0dHJzfHxbXSxvPWZ1bmN0aW9uKG4pe2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWlmKEs1KG5bdF0pKXJldHVybiB0O3JldHVybiBuLmxlbmd0aH0ociksYT0hMTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKyl7bGV0IGw9dFtzXTtpZigibnVtYmVyIiE9dHlwZW9mIGwpe2lmKCFhKWlmKDQmaSl7aWYoaT0yfDEmaSwiIiE9PWwmJiF1c2UobixsLGUpfHwiIj09PWwmJjE9PT10Lmxlbmd0aCl7aWYoZGwoaSkpcmV0dXJuITE7YT0hMH19ZWxzZXtsZXQgYz04Jmk/bDp0Wysrc107aWYoOCZpJiZudWxsIT09bi5hdHRycyl7aWYoIWRzZShuLmF0dHJzLGMsZSkpe2lmKGRsKGkpKXJldHVybiExO2E9ITB9Y29udGludWV9bGV0IHU9ZnNlKDgmaT8iY2xhc3MiOmwscixLeihuKSxlKTtpZigtMT09PXUpe2lmKGRsKGkpKXJldHVybiExO2E9ITA7Y29udGludWV9aWYoIiIhPT1jKXtsZXQgcDtwPXU+bz8iIjpyW3UrMV0udG9Mb3dlckNhc2UoKTtsZXQgZj04Jmk/cDpudWxsO2lmKGYmJi0xIT09UXooZixjLDApfHwyJmkmJmMhPT1wKXtpZihkbChpKSlyZXR1cm4hMTthPSEwfX19fWVsc2V7aWYoIWEmJiFkbChpKSYmIWRsKGwpKXJldHVybiExO2lmKGEmJmRsKGwpKWNvbnRpbnVlO2E9ITEsaT1sfDEmaX19cmV0dXJuIGRsKGkpfHxhfWZ1bmN0aW9uIGRsKG4pe3JldHVybiAwPT0oMSZuKX1mdW5jdGlvbiBmc2Uobix0LGUsaSl7aWYobnVsbD09PXQpcmV0dXJuLTE7bGV0IHI9MDtpZihpfHwhZSl7bGV0IG89ITE7Zm9yKDtyPHQubGVuZ3RoOyl7bGV0IGE9dFtyXTtpZihhPT09bilyZXR1cm4gcjtpZigzPT09YXx8Nj09PWEpbz0hMDtlbHNle2lmKDE9PT1hfHwyPT09YSl7bGV0IHM9dFsrK3JdO2Zvcig7InN0cmluZyI9PXR5cGVvZiBzOylzPXRbKytyXTtjb250aW51ZX1pZig0PT09YSlicmVhaztpZigwPT09YSl7cis9NDtjb250aW51ZX19cis9bz8xOjJ9cmV0dXJuLTF9cmV0dXJuIGZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5pbmRleE9mKDQpO2lmKGU+LTEpZm9yKGUrKztlPG4ubGVuZ3RoOyl7bGV0IGk9bltlXTtpZigibnVtYmVyIj09dHlwZW9mIGkpcmV0dXJuLTE7aWYoaT09PXQpcmV0dXJuIGU7ZSsrfXJldHVybi0xfSh0LG4pfWZ1bmN0aW9uIEp6KG4sdCxlPSExKXtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKylpZihwc2Uobix0W2ldLGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIF9zZShuLHQpe2U6Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPXRbZV07aWYobi5sZW5ndGg9PT1pLmxlbmd0aCl7Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspaWYobltyXSE9PWlbcl0pY29udGludWUgZTtyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gR0gobix0KXtyZXR1cm4gbj8iOm5vdCgiK3QudHJpbSgpKyIpIjp0fWZ1bmN0aW9uIHlzZShuKXtsZXQgdD1uWzBdLGU9MSxpPTIscj0iIixvPSExO2Zvcig7ZTxuLmxlbmd0aDspe2xldCBhPW5bZV07aWYoInN0cmluZyI9PXR5cGVvZiBhKWlmKDImaSl7bGV0IHM9blsrK2VdO3IrPSJbIithKyhzLmxlbmd0aD4wPyc9IicrcysnIic6IiIpKyJdIn1lbHNlIDgmaT9yKz0iLiIrYTo0JmkmJihyKz0iICIrYSk7ZWxzZSIiIT09ciYmIWRsKGEpJiYodCs9R0gobyxyKSxyPSIiKSxpPWEsbz1vfHwhZGwoaSk7ZSsrfXJldHVybiIiIT09ciYmKHQrPUdIKG8scikpLHR9dmFyIEduPXt9O2Z1bmN0aW9uIGIobil7JHooRWkoKSxLZSgpLHVhKCkrbiwhMSl9ZnVuY3Rpb24gJHoobix0LGUsaSl7aWYoIWkpaWYoMz09KDMmdFtzaV0pKXtsZXQgbz1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09byYmWEModCxvLGUpfWVsc2V7bGV0IG89bi5wcmVPcmRlckhvb2tzO251bGwhPT1vJiZRQyh0LG8sMCxlKX1qcChlKX12YXIgV0g9eyJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjpwZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOkIsIlx1MDI3NVx1MDI3NWluamVjdCI6TywiXHUwMjc1XHUwMjc1aW52YWxpZEZhY3RvcnlEZXAiOkU1LHJlc29sdmVGb3J3YXJkUmVmOmtpfTt2YXIgQ3NlPW5yKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpucn0pO2Z1bmN0aW9uIHFIKG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUNsYXNzfWZ1bmN0aW9uIFlIKG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUZhY3Rvcnl9dmFyIGVVPV95KCJJbmplY3RhYmxlIix2b2lkIDAsdm9pZCAwLHZvaWQgMCwobix0KT0+ZnVuY3Rpb24obix0KXtsZXQgZT1udWxsLGk9bnVsbDtuLmhhc093blByb3BlcnR5KGlNKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4saU0se2dldDooKT0+KG51bGw9PT1lJiYoZT1TcygpLmNvbXBpbGVJbmplY3RhYmxlKFdILGBuZzovLy8ke24ubmFtZX0vXHUwMjc1cHJvdi5qc2AsZnVuY3Rpb24obix0KXtsZXQgZT10fHx7cHJvdmlkZWRJbjpudWxsfSxpPXtuYW1lOm4ubmFtZSx0eXBlOm4sdHlwZUFyZ3VtZW50Q291bnQ6MCxwcm92aWRlZEluOmUucHJvdmlkZWRJbn07cmV0dXJuKHFIKGUpfHxZSChlKSkmJnZvaWQgMCE9PWUuZGVwcyYmKGkuZGVwcz1jeihlLmRlcHMpKSxxSChlKT9pLnVzZUNsYXNzPWUudXNlQ2xhc3M6ZnVuY3Rpb24obil7cmV0dXJuIENzZSBpbiBufShlKT9pLnVzZVZhbHVlPWUudXNlVmFsdWU6WUgoZSk/aS51c2VGYWN0b3J5PWUudXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VFeGlzdGluZ30oZSkmJihpLnVzZUV4aXN0aW5nPWUudXNlRXhpc3RpbmcpLGl9KG4sdCkpKSxlKX0pLG4uaGFzT3duUHJvcGVydHkoS2MpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixLYyx7Z2V0OigpPT57aWYobnVsbD09PWkpe2xldCByPVNzKCk7aT1yLmNvbXBpbGVGYWN0b3J5KFdILGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTpuLm5hbWUsdHlwZTpuLHR5cGVBcmd1bWVudENvdW50OjAsZGVwczpMTShuKSx0YXJnZXQ6ci5GYWN0b3J5VGFyZ2V0LkluamVjdGFibGV9KX1yZXR1cm4gaX0sY29uZmlndXJhYmxlOiEwfSl9KG4sdCkpO2Z1bmN0aW9uIFhIKG4sdD1udWxsLGU9bnVsbCxpKXtsZXQgcj10VShuLHQsZSxpKTtyZXR1cm4gci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxyfWZ1bmN0aW9uIHRVKG4sdD1udWxsLGU9bnVsbCxpLHI9bmV3IFNldCl7bGV0IG89W2V8fFVpLGphZShuKV07cmV0dXJuIGk9aXx8KCJvYmplY3QiPT10eXBlb2Ygbj92b2lkIDA6aG8obikpLG5ldyBnTShvLHR8fHhQKCksaXx8bnVsbCxyKX12YXIgYmk9KCgpPT57Y2xhc3MgbntzdGF0aWMgY3JlYXRlKGUsaSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gWEgoe25hbWU6IiJ9LGksZSwiIik7e2xldCByPWUubmFtZT8/IiI7cmV0dXJuIFhIKHtuYW1lOnJ9LGUucGFyZW50LGUucHJvdmlkZXJzLHIpfX19cmV0dXJuIG4uVEhST1dfSUZfTk9UX0ZPVU5EPXR5LG4uTlVMTD1uZXcgaE0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLHByb3ZpZGVkSW46ImFueSIsZmFjdG9yeTooKT0+Tyhqeil9KSxuLl9fTkdfRUxFTUVOVF9JRF9fPS0xLG59KSgpLFFfPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7aWYodGhpcy50b2tlbj10LHRoaXMuaWQ9ZSwhdCl0aHJvdyBuZXcgYnQoMjA4LCExKTt0aGlzLmRpc3BsYXlOYW1lPWhvKHRoaXMudG9rZW4pfXN0YXRpYyBnZXQodCl7cmV0dXJuIFFILmdldChraSh0KSl9c3RhdGljIGdldCBudW1iZXJPZktleXMoKXtyZXR1cm4gUUgubnVtYmVyT2ZLZXlzfX0sUUg9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fYWxsS2V5cz1uZXcgTWFwfWdldCh0KXtpZih0IGluc3RhbmNlb2YgUV8pcmV0dXJuIHQ7aWYodGhpcy5fYWxsS2V5cy5oYXModCkpcmV0dXJuIHRoaXMuX2FsbEtleXMuZ2V0KHQpO2xldCBlPW5ldyBRXyh0LFFfLm51bWJlck9mS2V5cyk7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2V0KHQsZSksZX1nZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2l6ZX19O2Z1bmN0aW9uIEMobix0PU1pLkRlZmF1bHQpe2xldCBlPUtlKCk7cmV0dXJuIG51bGw9PT1lP08obix0KTpyeihQbygpLGUsa2kobiksdCl9ZnVuY3Rpb24gX2woKXt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQiKX1mdW5jdGlvbiBuVShuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgbz1lW2krMV07aWYoLTEhPT1vKXtsZXQgYT1uLmRhdGFbb107dFAoZVtpXSksYS5jb250ZW50UXVlcmllcygyLHRbb10sbyl9fX1mdW5jdGlvbiBVTShuLHQsZSxpLHIsbyxhLHMsbCxjLGQpe2xldCB1PXQuYmx1ZXByaW50LnNsaWNlKCk7cmV0dXJuIHVbbHVdPXIsdVtzaV09NzZ8aSwobnVsbCE9PWR8fG4mJjEwMjQmbltzaV0pJiYodVtzaV18PTEwMjQpLFY1KHUpLHVbWXJdPXVbZGhdPW4sdVtJYV09ZSx1W3NNXT1hfHxuJiZuW3NNXSx1W2xpXT1zfHxuJiZuW2xpXSx1W3pSXT1sfHxuJiZuW3pSXXx8bnVsbCx1W2FNXT1jfHxuJiZuW2FNXXx8bnVsbCx1W0RhXT1vLHVbUk1dPWlhZSsrLHVbUjVdPWQsdVtmbF09Mj09dC50eXBlP25bZmxdOnUsdX1mdW5jdGlvbiBfaChuLHQsZSxpLHIpe2xldCBvPW4uZGF0YVt0XTtpZihudWxsPT09bylvPUNQKG4sdCxlLGksciksWG4ubEZyYW1lLmluSTE4biYmKG8uZmxhZ3N8PTMyKTtlbHNlIGlmKDY0Jm8udHlwZSl7by50eXBlPWUsby52YWx1ZT1pLG8uYXR0cnM9cjtsZXQgYT1yeSgpO28uaW5qZWN0b3JJbmRleD1udWxsPT09YT8tMTphLmluamVjdG9ySW5kZXh9cmV0dXJuIGFjKG8sITApLG99ZnVuY3Rpb24gQ1Aobix0LGUsaSxyKXtsZXQgbz16NSgpLGE9SmsoKSxsPW4uZGF0YVt0XT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJue3R5cGU6ZSxpbmRleDppLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp0P3QuaW5qZWN0b3JJbmRleDotMSxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEsY29tcG9uZW50T2Zmc2V0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczowLHByb3ZpZGVySW5kZXhlczowLHZhbHVlOnIsYXR0cnM6byxtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6dCxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAsYT9vOm8mJm8ucGFyZW50LGUsdCxpLHIpO3JldHVybiBudWxsPT09bi5maXJzdENoaWxkJiYobi5maXJzdENoaWxkPWwpLG51bGwhPT1vJiYoYT9udWxsPT1vLmNoaWxkJiZudWxsIT09bC5wYXJlbnQmJihvLmNoaWxkPWwpOm51bGw9PT1vLm5leHQmJihvLm5leHQ9bCxsLnByZXY9bykpLGx9ZnVuY3Rpb24gTXkobix0LGUsaSl7aWYoMD09PWUpcmV0dXJuLTE7bGV0IHI9dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxlO28rKyl0LnB1c2goaSksbi5ibHVlcHJpbnQucHVzaChpKSxuLmRhdGEucHVzaChudWxsKTtyZXR1cm4gcn1mdW5jdGlvbiBNUChuLHQsZSl7blAodCk7dHJ5e2xldCBpPW4udmlld1F1ZXJ5O251bGwhPT1pJiZ5aygxLGksZSk7bGV0IHI9bi50ZW1wbGF0ZTtudWxsIT09ciYmaVUobix0LHIsMSxlKSxuLmZpcnN0Q3JlYXRlUGFzcyYmKG4uZmlyc3RDcmVhdGVQYXNzPSExKSxuLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZuVShuLHQpLG4uc3RhdGljVmlld1F1ZXJpZXMmJnlrKDIsbi52aWV3UXVlcnksZSk7bGV0IG89bi5jb21wb25lbnRzO251bGwhPT1vJiZmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKVpzZShuLHRbZV0pfSh0LG8pfWNhdGNoKGkpe3Rocm93IG4uZmlyc3RDcmVhdGVQYXNzJiYobi5pbmNvbXBsZXRlRmlyc3RQYXNzPSEwLG4uZmlyc3RDcmVhdGVQYXNzPSExKSxpfWZpbmFsbHl7dFtzaV0mPS01LGlQKCl9fWZ1bmN0aW9uIGpNKG4sdCxlLGkpe2xldCByPXRbc2ldO2lmKDEyOCE9KDEyOCZyKSl7blAodCk7dHJ5e1Y1KHQpLFU1KG4uYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1lJiZpVShuLHQsZSwyLGkpO2xldCBhPTM9PSgzJnIpO2lmKGEpe2xldCBjPW4ucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1jJiZYQyh0LGMsbnVsbCl9ZWxzZXtsZXQgYz1uLnByZU9yZGVySG9va3M7bnVsbCE9PWMmJlFDKHQsYywwLG51bGwpLGdSKHQsMCl9aWYoZnVuY3Rpb24obil7Zm9yKGxldCB0PWRQKG4pO251bGwhPT10O3Q9dVAodCkpe2lmKCF0W2s1XSljb250aW51ZTtsZXQgZT10W2loXTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9ZVtpXTswPT0oNTEyJnJbc2ldKSYmS2socltZcl0sMSkscltzaV18PTUxMn19fSh0KSxmdW5jdGlvbihuKXtmb3IobGV0IHQ9ZFAobik7bnVsbCE9PXQ7dD11UCh0KSlmb3IobGV0IGU9VGE7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPXRbZV0scj1pW0JuXTtjTShpKSYmak0ocixpLHIudGVtcGxhdGUsaVtJYV0pfX0odCksbnVsbCE9PW4uY29udGVudFF1ZXJpZXMmJm5VKG4sdCksYSl7bGV0IGM9bi5jb250ZW50Q2hlY2tIb29rcztudWxsIT09YyYmWEModCxjKX1lbHNle2xldCBjPW4uY29udGVudEhvb2tzO251bGwhPT1jJiZRQyh0LGMsMSksZ1IodCwxKX0hZnVuY3Rpb24obix0KXtsZXQgZT1uLmhvc3RCaW5kaW5nT3BDb2RlcztpZihudWxsIT09ZSl0cnl7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCByPWVbaV07aWYocjwwKWpwKH5yKTtlbHNle2xldCBvPXIsYT1lWysraV0scz1lWysraV07Y29lKGEsbykscygyLHRbb10pfX19ZmluYWxseXtqcCgtMSl9fShuLHQpO2xldCBzPW4uY29tcG9uZW50cztudWxsIT09cyYmZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylRc2Uobix0W2VdKX0odCxzKTtsZXQgbD1uLnZpZXdRdWVyeTtpZihudWxsIT09bCYmeWsoMixsLGkpLGEpe2xldCBjPW4udmlld0NoZWNrSG9va3M7bnVsbCE9PWMmJlhDKHQsYyl9ZWxzZXtsZXQgYz1uLnZpZXdIb29rcztudWxsIT09YyYmUUModCxjLDIpLGdSKHQsMil9ITA9PT1uLmZpcnN0VXBkYXRlUGFzcyYmKG4uZmlyc3RVcGRhdGVQYXNzPSExKSx0W3NpXSY9LTQxLDUxMiZ0W3NpXSYmKHRbc2ldJj0tNTEzLEtrKHRbWXJdLC0xKSl9ZmluYWxseXtpUCgpfX19ZnVuY3Rpb24gaVUobix0LGUsaSxyKXtsZXQgbz11YSgpLGE9MiZpO3RyeXtqcCgtMSksYSYmdC5sZW5ndGg+WHImJiR6KG4sdCxYciwhMSksTXMoYT8yOjAsciksZShpLHIpfWZpbmFsbHl7anAobyksTXMoYT8zOjEscil9fWZ1bmN0aW9uIHdQKG4sdCxlKXtpZihaayh0KSl7bGV0IHI9dC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBvPXQuZGlyZWN0aXZlU3RhcnQ7bzxyO28rKyl7bGV0IGE9bi5kYXRhW29dO2EuY29udGVudFF1ZXJpZXMmJmEuY29udGVudFF1ZXJpZXMoMSxlW29dLG8pfX19ZnVuY3Rpb24gU1Aobix0LGUpeyFINSgpfHwoZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9ZS5kaXJlY3RpdmVTdGFydCxvPWUuZGlyZWN0aXZlRW5kO2tNKGUpJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9dHModCxuKSxyPXJVKGUpLG89bltzTV0sYT1HTShuLFVNKG4scixudWxsLGUub25QdXNoPzMyOjE2LGksdCxvLG8uY3JlYXRlUmVuZGVyZXIoaSxlKSxudWxsLG51bGwsbnVsbCkpO25bdC5pbmRleF09YX0odCxlLG4uZGF0YVtyK2UuY29tcG9uZW50T2Zmc2V0XSksbi5maXJzdENyZWF0ZVBhc3N8fGZNKGUsdCksc2MoaSx0KTtsZXQgYT1lLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBzPXI7czxvO3MrKyl7bGV0IGw9bi5kYXRhW3NdLGM9V3AodCxuLHMsZSk7c2MoYyx0KSxudWxsIT09YSYmV3NlKDAscy1yLGMsbCwwLGEpLG1sKGwpJiYoZWQoZS5pbmRleCx0KVtJYV09V3AodCxuLHMsZSkpfX0obix0LGUsdHMoZSx0KSksNjQ9PSg2NCZlLmZsYWdzKSYmc1Uobix0LGUpKX1mdW5jdGlvbiBFUChuLHQsZT10cyl7bGV0IGk9dC5sb2NhbE5hbWVzO2lmKG51bGwhPT1pKXtsZXQgcj10LmluZGV4KzE7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKz0yKXtsZXQgYT1pW28rMV0scz0tMT09PWE/ZSh0LG4pOm5bYV07bltyKytdPXN9fX1mdW5jdGlvbiByVShuKXtsZXQgdD1uLnRWaWV3O3JldHVybiBudWxsPT09dHx8dC5pbmNvbXBsZXRlRmlyc3RQYXNzP24udFZpZXc9VFAoMSxudWxsLG4udGVtcGxhdGUsbi5kZWNscyxuLnZhcnMsbi5kaXJlY3RpdmVEZWZzLG4ucGlwZURlZnMsbi52aWV3UXVlcnksbi5zY2hlbWFzLG4uY29uc3RzKTp0fWZ1bmN0aW9uIFRQKG4sdCxlLGkscixvLGEscyxsLGMpe2xldCBkPVhyK2ksdT1kK3IscD1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dDtpKyspZS5wdXNoKGk8bj9udWxsOkduKTtyZXR1cm4gZX0oZCx1KSxmPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2MoKTpjO3JldHVybiBwW0JuXT17dHlwZTpuLGJsdWVwcmludDpwLHRlbXBsYXRlOmUscXVlcmllczpudWxsLHZpZXdRdWVyeTpzLGRlY2xUTm9kZTp0LGRhdGE6cC5zbGljZSgpLmZpbGwobnVsbCxkKSxiaW5kaW5nU3RhcnRJbmRleDpkLGV4cGFuZG9TdGFydEluZGV4OnUsaG9zdEJpbmRpbmdPcENvZGVzOm51bGwsZmlyc3RDcmVhdGVQYXNzOiEwLGZpcnN0VXBkYXRlUGFzczohMCxzdGF0aWNWaWV3UXVlcmllczohMSxzdGF0aWNDb250ZW50UXVlcmllczohMSxwcmVPcmRlckhvb2tzOm51bGwscHJlT3JkZXJDaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLGNsZWFudXA6bnVsbCxjb250ZW50UXVlcmllczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygbz9vKCk6byxwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIGE/YSgpOmEsZmlyc3RDaGlsZDpudWxsLHNjaGVtYXM6bCxjb25zdHM6ZixpbmNvbXBsZXRlRmlyc3RQYXNzOiExfX1mdW5jdGlvbiBvVShuLHQsZSxpKXtsZXQgcj1kVSh0KTtudWxsPT09ZT9yLnB1c2goaSk6KHIucHVzaChlKSxuLmZpcnN0Q3JlYXRlUGFzcyYmdVUobikucHVzaChpLHIubGVuZ3RoLTEpKX1mdW5jdGlvbiBaSChuLHQsZSxpKXtmb3IobGV0IHIgaW4gbilpZihuLmhhc093blByb3BlcnR5KHIpKXtlPW51bGw9PT1lP3t9OmU7bGV0IG89bltyXTtudWxsPT09aT9LSChlLHQscixvKTppLmhhc093blByb3BlcnR5KHIpJiZLSChlLHQsaVtyXSxvKX1yZXR1cm4gZX1mdW5jdGlvbiBLSChuLHQsZSxpKXtuLmhhc093blByb3BlcnR5KGUpP25bZV0ucHVzaCh0LGkpOm5bZV09W3QsaV19ZnVuY3Rpb24gaXMobix0LGUsaSxyLG8sYSxzKXtsZXQgZCxsPXRzKHQsZSksYz10LmlucHV0czshcyYmbnVsbCE9YyYmKGQ9Y1tpXSk/KFJQKG4sZSxkLGksciksa00odCkmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9ZWQodCxuKTsxNiZlW3NpXXx8KGVbc2ldfD0zMil9KGUsdC5pbmRleCkpOjMmdC50eXBlJiYoaT1mdW5jdGlvbihuKXtyZXR1cm4iY2xhc3MiPT09bj8iY2xhc3NOYW1lIjoiZm9yIj09PW4/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PW4/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09bj8iaW5uZXJIVE1MIjoicmVhZG9ubHkiPT09bj8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1uPyJ0YWJJbmRleCI6bn0oaSkscj1udWxsIT1hP2Eocix0LnZhbHVlfHwiIixpKTpyLG8uc2V0UHJvcGVydHkobCxpLHIpKX1mdW5jdGlvbiBEUChuLHQsZSxpKXtpZihINSgpKXtsZXQgYSxzLHI9bnVsbD09PWk/bnVsbDp7IiI6LTF9LG89ZnVuY3Rpb24obix0KXtsZXQgZT1uLmRpcmVjdGl2ZVJlZ2lzdHJ5LGk9bnVsbCxyPW51bGw7aWYoZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IGE9ZVtvXTtpZihKeih0LGEuc2VsZWN0b3JzLCExKSlpZihpfHwoaT1bXSksbWwoYSkpaWYobnVsbCE9PWEuZmluZEhvc3REaXJlY3RpdmVEZWZzKXtsZXQgcz1bXTtyPXJ8fG5ldyBNYXAsYS5maW5kSG9zdERpcmVjdGl2ZURlZnMoYSxzLHIpLGkudW5zaGlmdCguLi5zLGEpLGdrKG4sdCxzLmxlbmd0aCl9ZWxzZSBpLnVuc2hpZnQoYSksZ2sobix0LDApO2Vsc2Ugcj1yfHxuZXcgTWFwLGEuZmluZEhvc3REaXJlY3RpdmVEZWZzPy4oYSxpLHIpLGkucHVzaChhKX1yZXR1cm4gbnVsbD09PWk/bnVsbDpbaSxyXX0obixlKTtudWxsPT09bz9hPXM9bnVsbDpbYSxzXT1vLG51bGwhPT1hJiZhVShuLHQsZSxhLHIscyksciYmZnVuY3Rpb24obix0LGUpe2lmKHQpe2xldCBpPW4ubG9jYWxOYW1lcz1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrPTIpe2xldCBvPWVbdFtyKzFdXTtpZihudWxsPT1vKXRocm93IG5ldyBidCgtMzAxLCExKTtpLnB1c2godFtyXSxvKX19fShlLGkscil9ZS5tZXJnZWRBdHRycz1veShlLm1lcmdlZEF0dHJzLGUuYXR0cnMpfWZ1bmN0aW9uIGFVKG4sdCxlLGkscixvKXtmb3IobGV0IGM9MDtjPGkubGVuZ3RoO2MrKylxUihmTShlLHQpLG4saVtjXS50eXBlKTshZnVuY3Rpb24obix0LGUpe24uZmxhZ3N8PTEsbi5kaXJlY3RpdmVTdGFydD10LG4uZGlyZWN0aXZlRW5kPXQrZSxuLnByb3ZpZGVySW5kZXhlcz10fShlLG4uZGF0YS5sZW5ndGgsaS5sZW5ndGgpO2ZvcihsZXQgYz0wO2M8aS5sZW5ndGg7YysrKXtsZXQgZD1pW2NdO2QucHJvdmlkZXJzUmVzb2x2ZXImJmQucHJvdmlkZXJzUmVzb2x2ZXIoZCl9bGV0IGE9ITEscz0hMSxsPU15KG4sdCxpLmxlbmd0aCxudWxsKTtmb3IobGV0IGM9MDtjPGkubGVuZ3RoO2MrKyl7bGV0IGQ9aVtjXTtlLm1lcmdlZEF0dHJzPW95KGUubWVyZ2VkQXR0cnMsZC5ob3N0QXR0cnMpLGpzZShuLGUsdCxsLGQpLHpzZShsLGQsciksbnVsbCE9PWQuY29udGVudFF1ZXJpZXMmJihlLmZsYWdzfD00KSwobnVsbCE9PWQuaG9zdEJpbmRpbmdzfHxudWxsIT09ZC5ob3N0QXR0cnN8fDAhPT1kLmhvc3RWYXJzKSYmKGUuZmxhZ3N8PTY0KTtsZXQgdT1kLnR5cGUucHJvdG90eXBlOyFhJiYodS5uZ09uQ2hhbmdlc3x8dS5uZ09uSW5pdHx8dS5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJIb29rcz8/KG4ucHJlT3JkZXJIb29rcz1bXSkpLnB1c2goZS5pbmRleCksYT0hMCksIXMmJih1Lm5nT25DaGFuZ2VzfHx1Lm5nRG9DaGVjaykmJigobi5wcmVPcmRlckNoZWNrSG9va3M/PyhuLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2goZS5pbmRleCkscz0hMCksbCsrfSFmdW5jdGlvbihuLHQsZSl7bGV0IHI9dC5kaXJlY3RpdmVFbmQsbz1uLmRhdGEsYT10LmF0dHJzLHM9W10sbD1udWxsLGM9bnVsbDtmb3IobGV0IGQ9dC5kaXJlY3RpdmVTdGFydDtkPHI7ZCsrKXtsZXQgdT1vW2RdLHA9ZT9lLmdldCh1KTpudWxsLG09cD9wLm91dHB1dHM6bnVsbDtsPVpIKHUuaW5wdXRzLGQsbCxwP3AuaW5wdXRzOm51bGwpLGM9WkgodS5vdXRwdXRzLGQsYyxtKTtsZXQgeT1udWxsPT09bHx8bnVsbD09PWF8fEt6KHQpP251bGw6cXNlKGwsZCxhKTtzLnB1c2goeSl9bnVsbCE9PWwmJihsLmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYodC5mbGFnc3w9OCksbC5oYXNPd25Qcm9wZXJ0eSgic3R5bGUiKSYmKHQuZmxhZ3N8PTE2KSksdC5pbml0aWFsSW5wdXRzPXMsdC5pbnB1dHM9bCx0Lm91dHB1dHM9Y30obixlLG8pfWZ1bmN0aW9uIHNVKG4sdCxlKXtsZXQgaT1lLmRpcmVjdGl2ZVN0YXJ0LHI9ZS5kaXJlY3RpdmVFbmQsbz1lLmluZGV4LGE9WG4ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDt0cnl7anAobyk7Zm9yKGxldCBzPWk7czxyO3MrKyl7bGV0IGw9bi5kYXRhW3NdLGM9dFtzXTtqUihzKSwobnVsbCE9PWwuaG9zdEJpbmRpbmdzfHwwIT09bC5ob3N0VmFyc3x8bnVsbCE9PWwuaG9zdEF0dHJzKSYmQnNlKGwsYyl9fWZpbmFsbHl7anAoLTEpLGpSKGEpfX1mdW5jdGlvbiBCc2Uobix0KXtudWxsIT09bi5ob3N0QmluZGluZ3MmJm4uaG9zdEJpbmRpbmdzKDEsdCl9ZnVuY3Rpb24gZ2sobix0LGUpe3QuY29tcG9uZW50T2Zmc2V0PWUsKG4uY29tcG9uZW50cz8/KG4uY29tcG9uZW50cz1bXSkpLnB1c2godC5pbmRleCl9ZnVuY3Rpb24genNlKG4sdCxlKXtpZihlKXtpZih0LmV4cG9ydEFzKWZvcihsZXQgaT0wO2k8dC5leHBvcnRBcy5sZW5ndGg7aSsrKWVbdC5leHBvcnRBc1tpXV09bjttbCh0KSYmKGVbIiJdPW4pfX1mdW5jdGlvbiBqc2Uobix0LGUsaSxyKXtuLmRhdGFbaV09cjtsZXQgbz1yLmZhY3Rvcnl8fChyLmZhY3Rvcnk9VXAoci50eXBlKSksYT1uZXcgR3AobyxtbChyKSxDKTtuLmJsdWVwcmludFtpXT1hLGVbaV09YSxmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPXIuaG9zdEJpbmRpbmdzO2lmKG8pe2xldCBhPW4uaG9zdEJpbmRpbmdPcENvZGVzO251bGw9PT1hJiYoYT1uLmhvc3RCaW5kaW5nT3BDb2Rlcz1bXSk7bGV0IHM9fnQuaW5kZXg7KGZ1bmN0aW9uKG4pe2xldCB0PW4ubGVuZ3RoO2Zvcig7dD4wOyl7bGV0IGU9blstLXRdO2lmKCJudW1iZXIiPT10eXBlb2YgZSYmZTwwKXJldHVybiBlfXJldHVybiAwfSkoYSkhPXMmJmEucHVzaChzKSxhLnB1c2goZSxpLG8pfX0obix0LGksTXkobixlLHIuaG9zdFZhcnMsR24pLHIpfWZ1bmN0aW9uIHBjKG4sdCxlLGkscixvKXtsZXQgYT10cyhuLHQpO0lQKHRbbGldLGEsbyxuLnZhbHVlLGUsaSxyKX1mdW5jdGlvbiBJUChuLHQsZSxpLHIsbyxhKXtpZihudWxsPT1vKW4ucmVtb3ZlQXR0cmlidXRlKHQscixlKTtlbHNle2xldCBzPW51bGw9PWE/WW4obyk6YShvLGl8fCIiLHIpO24uc2V0QXR0cmlidXRlKHQscixzLGUpfX1mdW5jdGlvbiBXc2Uobix0LGUsaSxyLG8pe2xldCBhPW9bdF07aWYobnVsbCE9PWEpe2xldCBzPWkuc2V0SW5wdXQ7Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDspe2xldCBjPWFbbCsrXSxkPWFbbCsrXSx1PWFbbCsrXTtudWxsIT09cz9pLnNldElucHV0KGUsdSxjLGQpOmVbZF09dX19fWZ1bmN0aW9uIHFzZShuLHQsZSl7bGV0IGk9bnVsbCxyPTA7Zm9yKDtyPGUubGVuZ3RoOyl7bGV0IG89ZVtyXTtpZigwIT09bylpZig1IT09byl7aWYoIm51bWJlciI9PXR5cGVvZiBvKWJyZWFrO2lmKG4uaGFzT3duUHJvcGVydHkobykpe251bGw9PT1pJiYoaT1bXSk7bGV0IGE9bltvXTtmb3IobGV0IHM9MDtzPGEubGVuZ3RoO3MrPTIpaWYoYVtzXT09PXQpe2kucHVzaChvLGFbcysxXSxlW3IrMV0pO2JyZWFrfX1yKz0yfWVsc2Ugcis9MjtlbHNlIHIrPTR9cmV0dXJuIGl9ZnVuY3Rpb24gbFUobix0LGUsaSl7cmV0dXJuW24sITAsITEsdCxudWxsLDAsaSxlLG51bGwsbnVsbF19ZnVuY3Rpb24gUXNlKG4sdCl7bGV0IGU9ZWQodCxuKTtpZihjTShlKSl7bGV0IGk9ZVtCbl07NDgmZVtzaV0/ak0oaSxlLGkudGVtcGxhdGUsZVtJYV0pOmVbVnBdPjAmJl9rKGUpfX1mdW5jdGlvbiBfayhuKXtmb3IobGV0IGk9ZFAobik7bnVsbCE9PWk7aT11UChpKSlmb3IobGV0IHI9VGE7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07aWYoY00obykpaWYoNTEyJm9bc2ldKXtsZXQgYT1vW0JuXTtqTShhLG8sYS50ZW1wbGF0ZSxvW0lhXSl9ZWxzZSBvW1ZwXT4wJiZfayhvKX1sZXQgZT1uW0JuXS5jb21wb25lbnRzO2lmKG51bGwhPT1lKWZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lZChlW2ldLG4pO2NNKHIpJiZyW1ZwXT4wJiZfayhyKX19ZnVuY3Rpb24gWnNlKG4sdCl7bGV0IGU9ZWQodCxuKSxpPWVbQm5dOyhmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT10Lmxlbmd0aDtlPG4uYmx1ZXByaW50Lmxlbmd0aDtlKyspdC5wdXNoKG4uYmx1ZXByaW50W2VdKX0pKGksZSksTVAoaSxlLGVbSWFdKX1mdW5jdGlvbiBHTShuLHQpe3JldHVybiBuW2l5XT9uW1JIXVtwbF09dDpuW2l5XT10LG5bUkhdPXQsdH1mdW5jdGlvbiBBUChuKXtmb3IoO247KXtuW3NpXXw9MzI7bGV0IHQ9Y1Aobik7aWYoUXJlKG4pJiYhdClyZXR1cm4gbjtuPXR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gY1Uobix0LGUsaT0hMCl7bGV0IHI9dFtzTV07ci5iZWdpbiYmci5iZWdpbigpO3RyeXtqTShuLHQsbi50ZW1wbGF0ZSxlKX1jYXRjaChhKXt0aHJvdyBpJiZmVSh0LGEpLGF9ZmluYWxseXtyLmVuZCYmci5lbmQoKX19ZnVuY3Rpb24geWsobix0LGUpe3RQKDApLHQobixlKX1mdW5jdGlvbiBkVShuKXtyZXR1cm4gbltueV18fChuW255XT1bXSl9ZnVuY3Rpb24gdVUobil7cmV0dXJuIG4uY2xlYW51cHx8KG4uY2xlYW51cD1bXSl9ZnVuY3Rpb24gcFUobix0LGUpe3JldHVybihudWxsPT09bnx8bWwobikpJiYoZT1mdW5jdGlvbihuKXtmb3IoO0FycmF5LmlzQXJyYXkobik7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bWGtdKXJldHVybiBuO249bltsdV19cmV0dXJuIG51bGx9KGVbdC5pbmRleF0pKSxlW2xpXX1mdW5jdGlvbiBmVShuLHQpe2xldCBlPW5bYU1dLGk9ZT9lLmdldChjYSxudWxsKTpudWxsO2kmJmkuaGFuZGxlRXJyb3IodCl9ZnVuY3Rpb24gUlAobix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoOyl7bGV0IGE9ZVtvKytdLHM9ZVtvKytdLGw9dFthXSxjPW4uZGF0YVthXTtudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwscixpLHMpOmxbc109cn19ZnVuY3Rpb24gb2Qobix0LGUpe2xldCBpPU9NKHQsbik7aHoobltsaV0saSxlKX1mdW5jdGlvbiB5TShuLHQsZSl7bGV0IGk9ZT9uLnN0eWxlczpudWxsLHI9ZT9uLmNsYXNzZXM6bnVsbCxvPTA7aWYobnVsbCE9PXQpZm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspe2xldCBzPXRbYV07Im51bWJlciI9PXR5cGVvZiBzP289czoxPT1vP3I9TFIocixzKToyPT1vJiYoaT1MUihpLHMrIjogIit0WysrYV0rIjsiKSl9ZT9uLnN0eWxlcz1pOm4uc3R5bGVzV2l0aG91dEhvc3Q9aSxlP24uY2xhc3Nlcz1yOm4uY2xhc3Nlc1dpdGhvdXRIb3N0PXJ9ZnVuY3Rpb24gZU0obix0LGUsaSxyPSExKXtmb3IoO251bGwhPT1lOyl7bGV0IG89dFtlLmluZGV4XTtpZihudWxsIT09byYmaS5wdXNoKFRzKG8pKSwkYyhvKSlmb3IobGV0IHM9VGE7czxvLmxlbmd0aDtzKyspe2xldCBsPW9bc10sYz1sW0JuXS5maXJzdENoaWxkO251bGwhPT1jJiZlTShsW0JuXSxsLGMsaSl9bGV0IGE9ZS50eXBlO2lmKDgmYSllTShuLHQsZS5jaGlsZCxpKTtlbHNlIGlmKDMyJmEpe2xldCBsLHM9bFAoZSx0KTtmb3IoO2w9cygpOylpLnB1c2gobCl9ZWxzZSBpZigxNiZhKXtsZXQgcz1Teih0LGUpO2lmKEFycmF5LmlzQXJyYXkocykpaS5wdXNoKC4uLnMpO2Vsc2V7bGV0IGw9Y1AodFtmbF0pO2VNKGxbQm5dLGwscyxpLCEwKX19ZT1yP2UucHJvamVjdGlvbk5leHQ6ZS5uZXh0fXJldHVybiBpfXZhciBZcD1jbGFzc3tnZXQgcm9vdE5vZGVzKCl7bGV0IHQ9dGhpcy5fbFZpZXcsZT10W0JuXTtyZXR1cm4gZU0oZSx0LGUuZmlyc3RDaGlsZCxbXSl9Y29uc3RydWN0b3IodCxlKXt0aGlzLl9sVmlldz10LHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlldz1lLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3W0lhXX1zZXQgY29udGV4dCh0KXt0aGlzLl9sVmlld1tJYV09dH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIDEyOD09KDEyOCZ0aGlzLl9sVmlld1tzaV0pfWRlc3Ryb3koKXtpZih0aGlzLl9hcHBSZWYpdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk7ZWxzZSBpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil7bGV0IHQ9dGhpcy5fbFZpZXdbWXJdO2lmKCRjKHQpKXtsZXQgZT10W2xNXSxpPWU/ZS5pbmRleE9mKHRoaXMpOi0xO2k+LTEmJihaUih0LGkpLG1NKGUsaSkpfXRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfV96KHRoaXMuX2xWaWV3W0JuXSx0aGlzLl9sVmlldyl9b25EZXN0cm95KHQpe29VKHRoaXMuX2xWaWV3W0JuXSx0aGlzLl9sVmlldyxudWxsLHQpfW1hcmtGb3JDaGVjaygpe0FQKHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlld3x8dGhpcy5fbFZpZXcpfWRldGFjaCgpe3RoaXMuX2xWaWV3W3NpXSY9LTY1fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbc2ldfD02NH1kZXRlY3RDaGFuZ2VzKCl7Y1UodGhpcy5fbFZpZXdbQm5dLHRoaXMuX2xWaWV3LHRoaXMuY29udGV4dCl9Y2hlY2tOb0NoYW5nZXMoKXt9YXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyBidCg5MDIsITEpO3RoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSEwfWRldGFjaEZyb21BcHBSZWYoKXt2YXIgdDt0aGlzLl9hcHBSZWY9bnVsbCxieSh0aGlzLl9sVmlld1tCbl0sdD10aGlzLl9sVmlldyx0W2xpXSwyLG51bGwsbnVsbCl9YXR0YWNoVG9BcHBSZWYodCl7aWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpdGhyb3cgbmV3IGJ0KDkwMiwhMSk7dGhpcy5fYXBwUmVmPXR9fSxiaz1jbGFzcyBleHRlbmRzIFlwe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX3ZpZXc9dH1kZXRlY3RDaGFuZ2VzKCl7bGV0IHQ9dGhpcy5fdmlldztjVSh0W0JuXSx0LHRbSWFdLCExKX1jaGVja05vQ2hhbmdlcygpe31nZXQgY29udGV4dCgpe3JldHVybiBudWxsfX0sYk09Y2xhc3MgZXh0ZW5kcyBRcntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubmdNb2R1bGU9dH1yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXtsZXQgZT13cyh0KTtyZXR1cm4gbmV3IHZNKGUsdGhpcy5uZ01vZHVsZSl9fTtmdW5jdGlvbiBKSChuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbiluLmhhc093blByb3BlcnR5KGUpJiZ0LnB1c2goe3Byb3BOYW1lOm5bZV0sdGVtcGxhdGVOYW1lOmV9KTtyZXR1cm4gdH12YXIgdk09Y2xhc3MgZXh0ZW5kcyBfTXtnZXQgaW5wdXRzKCl7cmV0dXJuIEpIKHRoaXMuY29tcG9uZW50RGVmLmlucHV0cyl9Z2V0IG91dHB1dHMoKXtyZXR1cm4gSkgodGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPXQsdGhpcy5uZ01vZHVsZT1lLHRoaXMuY29tcG9uZW50VHlwZT10LnR5cGUsdGhpcy5zZWxlY3Rvcj10LnNlbGVjdG9ycy5tYXAoeXNlKS5qb2luKCIsIiksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9dC5uZ0NvbnRlbnRTZWxlY3RvcnM/dC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5pc0JvdW5kVG9Nb2R1bGU9ISFlfWNyZWF0ZSh0LGUsaSxyKXtsZXQgbz0ocj1yfHx0aGlzLm5nTW9kdWxlKWluc3RhbmNlb2YgbGM/cjpyPy5pbmplY3RvcjtvJiZudWxsIT09dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yJiYobz10aGlzLmNvbXBvbmVudERlZi5nZXRTdGFuZGFsb25lSW5qZWN0b3Iobyl8fG8pO2xldCBhPW8/bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pbmplY3Rvcj10LHRoaXMucGFyZW50SW5qZWN0b3I9ZX1nZXQodCxlLGkpe2k9SU0oaSk7bGV0IHI9dGhpcy5pbmplY3Rvci5nZXQodCxDUixpKTtyZXR1cm4gciE9PUNSfHxlPT09Q1I/cjp0aGlzLnBhcmVudEluamVjdG9yLmdldCh0LGUsaSl9fSh0LG8pOnQscz1hLmdldChjYyxudWxsKTtpZihudWxsPT09cyl0aHJvdyBuZXcgYnQoNDA3LCExKTtsZXQgeSxNLGw9YS5nZXQob3NlLG51bGwpLGM9cy5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxkPXRoaXMuY29tcG9uZW50RGVmLnNlbGVjdG9yc1swXVswXXx8ImRpdiIsdT1pP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbi5zZWxlY3RSb290RWxlbWVudCh0LGU9PT1lcy5TaGFkb3dEb20pfShjLGksdGhpcy5jb21wb25lbnREZWYuZW5jYXBzdWxhdGlvbik6ZlAoYyxkLGZ1bmN0aW9uKG4pe2xldCB0PW4udG9Mb3dlckNhc2UoKTtyZXR1cm4ic3ZnIj09PXQ/TDU6Im1hdGgiPT09dD9ONTpudWxsfShkKSkscD10aGlzLmNvbXBvbmVudERlZi5vblB1c2g/Mjg4OjI3MixmPVRQKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpLG09VU0obnVsbCxmLG51bGwscCxudWxsLG51bGwscyxjLGwsYSxudWxsKTtuUChtKTt0cnl7bGV0IHgsdj10aGlzLmNvbXBvbmVudERlZixSPW51bGw7di5maW5kSG9zdERpcmVjdGl2ZURlZnM/KHg9W10sUj1uZXcgTWFwLHYuZmluZEhvc3REaXJlY3RpdmVEZWZzKHYseCxSKSx4LnB1c2godikpOng9W3ZdO2xldCBBPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bltCbl0saT1YcjtyZXR1cm4gbltpXT10LF9oKGUsaSwyLCIjaG9zdCIsbnVsbCl9KG0sdSksSD1mdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMpe2xldCBsPXJbQm5dOyFmdW5jdGlvbihuLHQsZSxpKXtmb3IobGV0IHIgb2Ygbil0Lm1lcmdlZEF0dHJzPW95KHQubWVyZ2VkQXR0cnMsci5ob3N0QXR0cnMpO251bGwhPT10Lm1lcmdlZEF0dHJzJiYoeU0odCx0Lm1lcmdlZEF0dHJzLCEwKSxudWxsIT09ZSYmRHooaSxlLHQpKX0oaSxuLHQsYSk7bGV0IGM9by5jcmVhdGVSZW5kZXJlcih0LGUpLGQ9VU0ocixyVShlKSxudWxsLGUub25QdXNoPzMyOjE2LHJbbi5pbmRleF0sbixvLGMsbnVsbCxudWxsLG51bGwpO3JldHVybiBsLmZpcnN0Q3JlYXRlUGFzcyYmZ2sobCxuLGkubGVuZ3RoLTEpLEdNKHIsZCkscltuLmluZGV4XT1kfShBLHUsdix4LG0scyxjKTtNPUI1KGYsWHIpLHUmJmZ1bmN0aW9uKG4sdCxlLGkpe2lmKGkpR1IobixlLFsibmctdmVyc2lvbiIsYXNlLmZ1bGxdKTtlbHNle2xldHthdHRyczpyLGNsYXNzZXM6b309ZnVuY3Rpb24obil7bGV0IHQ9W10sZT1bXSxpPTEscj0yO2Zvcig7aTxuLmxlbmd0aDspe2xldCBvPW5baV07aWYoInN0cmluZyI9PXR5cGVvZiBvKTI9PT1yPyIiIT09byYmdC5wdXNoKG8sblsrK2ldKTo4PT09ciYmZS5wdXNoKG8pO2Vsc2V7aWYoIWRsKHIpKWJyZWFrO3I9b31pKyt9cmV0dXJue2F0dHJzOnQsY2xhc3NlczplfX0odC5zZWxlY3RvcnNbMF0pO3ImJkdSKG4sZSxyKSxvJiZvLmxlbmd0aD4wJiZUeihuLGUsby5qb2luKCIgIikpfX0oYyx2LHUsaSksdm9pZCAwIT09ZSYmZnVuY3Rpb24obix0LGUpe2xldCBpPW4ucHJvamVjdGlvbj1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89ZVtyXTtpLnB1c2gobnVsbCE9bz9BcnJheS5mcm9tKG8pOm51bGwpfX0oTSx0aGlzLm5nQ29udGVudFNlbGVjdG9ycyxlKSx5PWZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgYT1QbygpLHM9cltCbl0sbD10cyhhLHIpO2FVKHMscixhLGUsbnVsbCxpKTtmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKylzYyhXcChyLHMsYS5kaXJlY3RpdmVTdGFydCtkLGEpLHIpO3NVKHMscixhKSxsJiZzYyhsLHIpO2xldCBjPVdwKHIscyxhLmRpcmVjdGl2ZVN0YXJ0K2EuY29tcG9uZW50T2Zmc2V0LGEpO2lmKG5bSWFdPXJbSWFdPWMsbnVsbCE9PW8pZm9yKGxldCBkIG9mIG8pZChjLHQpO3JldHVybiB3UChzLGEsbiksY30oSCx2LHgsUixtLFtvbGVdKSxNUChmLG0sbnVsbCl9ZmluYWxseXtpUCgpfXJldHVybiBuZXcgeGsodGhpcy5jb21wb25lbnRUeXBlLHksZ2goTSxtKSxtLE0pfX0seGs9Y2xhc3MgZXh0ZW5kcyBma3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKCksdGhpcy5sb2NhdGlvbj1pLHRoaXMuX3Jvb3RMVmlldz1yLHRoaXMuX3ROb2RlPW8sdGhpcy5pbnN0YW5jZT1lLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgYmsociksdGhpcy5jb21wb25lbnRUeXBlPXR9c2V0SW5wdXQodCxlKXtsZXQgcixpPXRoaXMuX3ROb2RlLmlucHV0cztpZihudWxsIT09aSYmKHI9aVt0XSkpe2xldCBvPXRoaXMuX3Jvb3RMVmlldztSUChvW0JuXSxvLHIsdCxlKSxBUChlZCh0aGlzLl90Tm9kZS5pbmRleCxvKSl9fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgenAodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KHQpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KHQpfX07ZnVuY3Rpb24gb2xlKCl7bGV0IG49UG8oKTtGTShLZSgpW0JuXSxuKX1mdW5jdGlvbiBtVShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1mdW5jdGlvbiBMZShuKXtsZXQgdD1tVShuLnR5cGUpLGU9ITAsaT1bbl07Zm9yKDt0Oyl7bGV0IHI7aWYobWwobikpcj10Llx1MDI3NWNtcHx8dC5cdTAyNzVkaXI7ZWxzZXtpZih0Llx1MDI3NWNtcCl0aHJvdyBuZXcgYnQoOTAzLCExKTtyPXQuXHUwMjc1ZGlyfWlmKHIpe2lmKGUpe2kucHVzaChyKTtsZXQgYT1uO2EuaW5wdXRzPXdSKG4uaW5wdXRzKSxhLmRlY2xhcmVkSW5wdXRzPXdSKG4uZGVjbGFyZWRJbnB1dHMpLGEub3V0cHV0cz13UihuLm91dHB1dHMpO2xldCBzPXIuaG9zdEJpbmRpbmdzO3MmJmNsZShuLHMpO2xldCBsPXIudmlld1F1ZXJ5LGM9ci5jb250ZW50UXVlcmllcztpZihsJiZzbGUobixsKSxjJiZsbGUobixjKSxoUihuLmlucHV0cyxyLmlucHV0cyksaFIobi5kZWNsYXJlZElucHV0cyxyLmRlY2xhcmVkSW5wdXRzKSxoUihuLm91dHB1dHMsci5vdXRwdXRzKSxtbChyKSYmci5kYXRhLmFuaW1hdGlvbil7bGV0IGQ9bi5kYXRhO2QuYW5pbWF0aW9uPShkLmFuaW1hdGlvbnx8W10pLmNvbmNhdChyLmRhdGEuYW5pbWF0aW9uKX19bGV0IG89ci5mZWF0dXJlcztpZihvKWZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKXtsZXQgcz1vW2FdO3MmJnMubmdJbmhlcml0JiZzKG4pLHM9PT1MZSYmKGU9ITEpfX10PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0hZnVuY3Rpb24obil7bGV0IHQ9MCxlPW51bGw7Zm9yKGxldCBpPW4ubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPW5baV07ci5ob3N0VmFycz10Kz1yLmhvc3RWYXJzLHIuaG9zdEF0dHJzPW95KHIuaG9zdEF0dHJzLGU9b3koZSxyLmhvc3RBdHRycykpfX0oaSl9ZnVuY3Rpb24gd1Iobil7cmV0dXJuIG49PT1aYz97fTpuPT09VWk/W106bn1mdW5jdGlvbiBzbGUobix0KXtsZXQgZT1uLnZpZXdRdWVyeTtuLnZpZXdRdWVyeT1lPyhpLHIpPT57dChpLHIpLGUoaSxyKX06dH1mdW5jdGlvbiBsbGUobix0KXtsZXQgZT1uLmNvbnRlbnRRdWVyaWVzO24uY29udGVudFF1ZXJpZXM9ZT8oaSxyLG8pPT57dChpLHIsbyksZShpLHIsbyl9OnR9ZnVuY3Rpb24gY2xlKG4sdCl7bGV0IGU9bi5ob3N0QmluZGluZ3M7bi5ob3N0QmluZGluZ3M9ZT8oaSxyKT0+e3QoaSxyKSxlKGkscil9OnR9dmFyIGRsZT1bInByb3ZpZGVyc1Jlc29sdmVyIl0sdWxlPVsidGVtcGxhdGUiLCJkZWNscyIsImNvbnN0cyIsInZhcnMiLCJvblB1c2giLCJuZ0NvbnRlbnRTZWxlY3RvcnMiLCJzdHlsZXMiLCJlbmNhcHN1bGF0aW9uIiwic2NoZW1hcyJdO2Z1bmN0aW9uIGhVKG4sdCxlKXtpZihudWxsIT09bi5ob3N0RGlyZWN0aXZlcylmb3IobGV0IGkgb2Ygbi5ob3N0RGlyZWN0aXZlcyl7bGV0IHI9aXUoaS5kaXJlY3RpdmUpO21sZShyLmRlY2xhcmVkSW5wdXRzLGkuaW5wdXRzKSxoVShyLHQsZSksZS5zZXQocixpKSx0LnB1c2gocil9fWZ1bmN0aW9uICRIKG4pe2lmKHZvaWQgMD09PW58fDA9PT1uLmxlbmd0aClyZXR1cm4gWmM7bGV0IHQ9e307Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKz0yKXRbbltlXV09bltlKzFdO3JldHVybiB0fWZ1bmN0aW9uIG1sZShuLHQpe2ZvcihsZXQgZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJihuW3RbZV1dPW5bZV0pfWZ1bmN0aW9uIGdVKG4pe3JldHVybiEha1AobikmJihBcnJheS5pc0FycmF5KG4pfHwhKG4gaW5zdGFuY2VvZiBNYXApJiZTeW1ib2wuaXRlcmF0b3IgaW4gbil9ZnVuY3Rpb24ga1Aobil7cmV0dXJuIG51bGwhPT1uJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2Ygbil9ZnVuY3Rpb24gZmMobix0LGUpe3JldHVybiBuW3RdPWV9ZnVuY3Rpb24gd3kobix0KXtyZXR1cm4gblt0XX1mdW5jdGlvbiBqbyhuLHQsZSl7cmV0dXJuIU9iamVjdC5pcyhuW3RdLGUpJiYoblt0XT1lLCEwKX1mdW5jdGlvbiBYcChuLHQsZSxpKXtsZXQgcj1qbyhuLHQsZSk7cmV0dXJuIGpvKG4sdCsxLGkpfHxyfWZ1bmN0aW9uIFdNKG4sdCxlLGkscil7bGV0IG89WHAobix0LGUsaSk7cmV0dXJuIGpvKG4sdCsyLHIpfHxvfWZ1bmN0aW9uIERzKG4sdCxlLGkscixvKXtsZXQgYT1YcChuLHQsZSxpKTtyZXR1cm4gWHAobix0KzIscixvKXx8YX1mdW5jdGlvbiBQZShuLHQsZSxpKXtsZXQgcj1LZSgpO3JldHVybiBqbyhyLHBoKCksdCkmJihFaSgpLHBjKGtyKCkscixuLHQsZSxpKSksUGV9ZnVuY3Rpb24geWgobix0KXtsZXQgZT0hMSxpPXRkKCk7Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKz0yKWU9am8obixpKyssdFtvXSl8fGU7aWYoVTUoaSksIWUpcmV0dXJuIEduO2xldCByPXRbMF07Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKz0yKXIrPVluKHRbb10pK3RbbysxXTtyZXR1cm4gcn1mdW5jdGlvbiBiaChuLHQsZSxpKXtyZXR1cm4gam8obixwaCgpLGUpP3QrWW4oZSkraTpHbn1mdW5jdGlvbiB2aChuLHQsZSxpLHIsbyl7bGV0IHM9WHAobix0ZCgpLGUscik7cmV0dXJuIG5kKDIpLHM/dCtZbihlKStpK1luKHIpK286R259ZnVuY3Rpb24geGgobix0LGUsaSxyLG8sYSxzKXtsZXQgYz1XTShuLHRkKCksZSxyLGEpO3JldHVybiBuZCgzKSxjP3QrWW4oZSkraStZbihyKStvK1luKGEpK3M6R259ZnVuY3Rpb24gQ2gobix0LGUsaSxyLG8sYSxzLGwsYyl7bGV0IHU9RHMobix0ZCgpLGUscixhLGwpO3JldHVybiBuZCg0KSx1P3QrWW4oZSkraStZbihyKStvK1luKGEpK3MrWW4obCkrYzpHbn1mdW5jdGlvbiBNaChuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSl7bGV0IHA9dGQoKSxmPURzKG4scCxlLHIsYSxsKTtyZXR1cm4gZj1qbyhuLHArNCxkKXx8ZixuZCg1KSxmP3QrWW4oZSkraStZbihyKStvK1luKGEpK3MrWW4obCkrYytZbihkKSt1OkdufWZ1bmN0aW9uIHdoKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZil7bGV0IG09dGQoKSx5PURzKG4sbSxlLHIsYSxsKTtyZXR1cm4geT1YcChuLG0rNCxkLHApfHx5LG5kKDYpLHk/dCtZbihlKStpK1luKHIpK28rWW4oYSkrcytZbihsKStjK1luKGQpK3UrWW4ocCkrZjpHbn1mdW5jdGlvbiBTaChuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5KXtsZXQgTT10ZCgpLHY9RHMobixNLGUscixhLGwpO3JldHVybiB2PVdNKG4sTSs0LGQscCxtKXx8dixuZCg3KSx2P3QrWW4oZSkraStZbihyKStvK1luKGEpK3MrWW4obCkrYytZbihkKSt1K1luKHApK2YrWW4obSkreTpHbn1mdW5jdGlvbiBFaChuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5LE0sdil7bGV0IHg9dGQoKSxSPURzKG4seCxlLHIsYSxsKTtyZXR1cm4gUj1EcyhuLHgrNCxkLHAsbSxNKXx8UixuZCg4KSxSP3QrWW4oZSkraStZbihyKStvK1luKGEpK3MrWW4obCkrYytZbihkKSt1K1luKHApK2YrWW4obSkreStZbihNKSt2OkdufWZ1bmN0aW9uIFMobix0LGUsaSxyLG8sYSxzKXtsZXQgbD1LZSgpLGM9RWkoKSxkPW4rWHIsdT1jLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMsbCl7bGV0IGM9dC5jb25zdHMsZD1faCh0LG4sNCxhfHxudWxsLG91KGMscykpO0RQKHQsZSxkLG91KGMsbCkpLEZNKHQsZCk7bGV0IHU9ZC50Vmlldz1UUCgyLGQsaSxyLG8sdC5kaXJlY3RpdmVSZWdpc3RyeSx0LnBpcGVSZWdpc3RyeSxudWxsLHQuc2NoZW1hcyxjKTtyZXR1cm4gbnVsbCE9PXQucXVlcmllcyYmKHQucXVlcmllcy50ZW1wbGF0ZSh0LGQpLHUucXVlcmllcz10LnF1ZXJpZXMuZW1iZWRkZWRUVmlldyhkKSksZH0oZCxjLGwsdCxlLGkscixvLGEpOmMuZGF0YVtkXTthYyh1LCExKTtsZXQgcD1sW2xpXS5jcmVhdGVDb21tZW50KCIiKTtCTShjLGwscCx1KSxzYyhwLGwpLEdNKGwsbFtkXT1sVShwLGwscCx1KSksUE0odSkmJlNQKGMsbCx1KSxudWxsIT1hJiZFUChsLHUscyl9ZnVuY3Rpb24gdHQobil7cmV0dXJuIHVoKFhuLmxGcmFtZS5jb250ZXh0TFZpZXcsWHIrbil9ZnVuY3Rpb24gXyhuLHQsZSl7bGV0IGk9S2UoKTtyZXR1cm4gam8oaSxwaCgpLHQpJiZpcyhFaSgpLGtyKCksaSxuLHQsaVtsaV0sZSwhMSksX31mdW5jdGlvbiBDayhuLHQsZSxpLHIpe2xldCBhPXI/ImNsYXNzIjoic3R5bGUiO1JQKG4sZSx0LmlucHV0c1thXSxhLGkpfWZ1bmN0aW9uIGgobix0LGUsaSl7bGV0IHI9S2UoKSxvPUVpKCksYT1YcituLHM9cltsaV0sbD1vLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IGE9dC5jb25zdHMsbD1faCh0LG4sMixpLG91KGEscikpO3JldHVybiBEUCh0LGUsbCxvdShhLG8pKSxudWxsIT09bC5hdHRycyYmeU0obCxsLmF0dHJzLCExKSxudWxsIT09bC5tZXJnZWRBdHRycyYmeU0obCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09dC5xdWVyaWVzJiZ0LnF1ZXJpZXMuZWxlbWVudFN0YXJ0KHQsbCksbH0oYSxvLHIsdCxlLGkpOm8uZGF0YVthXSxjPXJbYV09ZlAocyx0LFhuLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlKSxkPVBNKGwpO3JldHVybiBhYyhsLCEwKSxEeihzLGMsbCksMzIhPSgzMiZsLmZsYWdzKSYmQk0obyxyLGMsbCksMD09PVhuLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCYmc2MoYyxyKSxYbi5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQrKyxkJiYoU1AobyxyLGwpLHdQKG8sbCxyKSksbnVsbCE9PWkmJkVQKHIsbCksaH1mdW5jdGlvbiBnKCl7bGV0IG49UG8oKTtKaygpPyRrKCk6KG49bi5wYXJlbnQsYWMobiwhMSkpO2xldCB0PW47WG4ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50LS07bGV0IGU9RWkoKTtyZXR1cm4gZS5maXJzdENyZWF0ZVBhc3MmJihGTShlLG4pLFprKG4pJiZlLnF1ZXJpZXMuZWxlbWVudEVuZChuKSksbnVsbCE9dC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uKG4pe3JldHVybiAwIT0oOCZuLmZsYWdzKX0odCkmJkNrKGUsdCxLZSgpLHQuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxsIT10LnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbihuKXtyZXR1cm4gMCE9KDE2Jm4uZmxhZ3MpfSh0KSYmQ2soZSx0LEtlKCksdC5zdHlsZXNXaXRob3V0SG9zdCwhMSksZ31mdW5jdGlvbiBQKG4sdCxlLGkpe3JldHVybiBoKG4sdCxlLGkpLGcoKSxQfWZ1bmN0aW9uIFR0KG4sdCxlKXtsZXQgaT1LZSgpLHI9RWkoKSxvPW4rWHIsYT1yLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPXQuY29uc3RzLGE9b3UobyxpKSxzPV9oKHQsbiw4LCJuZy1jb250YWluZXIiLGEpO3JldHVybiBudWxsIT09YSYmeU0ocyxhLCEwKSxEUCh0LGUscyxvdShvLHIpKSxudWxsIT09dC5xdWVyaWVzJiZ0LnF1ZXJpZXMuZWxlbWVudFN0YXJ0KHQscyksc30obyxyLGksdCxlKTpyLmRhdGFbb107YWMoYSwhMCk7bGV0IHM9aVtvXT1pW2xpXS5jcmVhdGVDb21tZW50KCIiKTtyZXR1cm4gQk0ocixpLHMsYSksc2MocyxpKSxQTShhKSYmKFNQKHIsaSxhKSx3UChyLGEsaSkpLG51bGwhPWUmJkVQKGksYSksVHR9ZnVuY3Rpb24gRHQoKXtsZXQgbj1QbygpLHQ9RWkoKTtyZXR1cm4gSmsoKT8kaygpOihuPW4ucGFyZW50LGFjKG4sITEpKSx0LmZpcnN0Q3JlYXRlUGFzcyYmKEZNKHQsbiksWmsobikmJnQucXVlcmllcy5lbGVtZW50RW5kKG4pKSxEdH1mdW5jdGlvbiBUaShuLHQsZSl7cmV0dXJuIFR0KG4sdCxlKSxEdCgpLFRpfWZ1bmN0aW9uIGdlKCl7cmV0dXJuIEtlKCl9ZnVuY3Rpb24gVGgobil7cmV0dXJuISFuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi50aGVufWZ1bmN0aW9uIFBQKG4pe3JldHVybiEhbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4uc3Vic2NyaWJlfXZhciBPUD1QUDtmdW5jdGlvbiBEKG4sdCxlLGkpe2xldCByPUtlKCksbz1FaSgpLGE9UG8oKTtyZXR1cm4gRVUobyxyLHJbbGldLGEsbix0LGkpLER9ZnVuY3Rpb24gWnAobix0KXtsZXQgZT1QbygpLGk9S2UoKSxyPUVpKCk7cmV0dXJuIEVVKHIsaSxwVShlUChyLmRhdGEpLGUsaSksZSxuLHQpLFpwfWZ1bmN0aW9uIEVVKG4sdCxlLGkscixvLGEpe2xldCBzPVBNKGkpLGM9bi5maXJzdENyZWF0ZVBhc3MmJnVVKG4pLGQ9dFtJYV0sdT1kVSh0KSxwPSEwO2lmKDMmaS50eXBlfHxhKXtsZXQgeT10cyhpLHQpLE09YT9hKHkpOnksdj11Lmxlbmd0aCx4PWE/QT0+YShUcyhBW2kuaW5kZXhdKSk6aS5pbmRleCxSPW51bGw7aWYoIWEmJnMmJihSPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW4uY2xlYW51cDtpZihudWxsIT1yKWZvcihsZXQgbz0wO288ci5sZW5ndGgtMTtvKz0yKXtsZXQgYT1yW29dO2lmKGE9PT1lJiZyW28rMV09PT1pKXtsZXQgcz10W255XSxsPXJbbysyXTtyZXR1cm4gcy5sZW5ndGg+bD9zW2xdOm51bGx9InN0cmluZyI9PXR5cGVvZiBhJiYobys9Mil9cmV0dXJuIG51bGx9KG4sdCxyLGkuaW5kZXgpKSxudWxsIT09UikoUi5fX25nTGFzdExpc3RlbmVyRm5fX3x8UikuX19uZ05leHRMaXN0ZW5lckZuX189byxSLl9fbmdMYXN0TGlzdGVuZXJGbl9fPW8scD0hMTtlbHNle289dDUoaSx0LGQsbywhMSk7bGV0IEE9ZS5saXN0ZW4oTSxyLG8pO3UucHVzaChvLEEpLGMmJmMucHVzaChyLHgsdix2KzEpfX1lbHNlIG89dDUoaSx0LGQsbywhMSk7bGV0IG0sZj1pLm91dHB1dHM7aWYocCYmbnVsbCE9PWYmJihtPWZbcl0pKXtsZXQgeT1tLmxlbmd0aDtpZih5KWZvcihsZXQgTT0wO008eTtNKz0yKXtsZXQgSD10W21bTV1dW21bTSsxXV0uc3Vic2NyaWJlKG8pLHRlPXUubGVuZ3RoO3UucHVzaChvLEgpLGMmJmMucHVzaChyLGkuaW5kZXgsdGUsLSh0ZSsxKSl9fX1mdW5jdGlvbiBlNShuLHQsZSxpKXt0cnl7cmV0dXJuIE1zKDYsdCxlKSwhMSE9PWUoaSl9Y2F0Y2gocil7cmV0dXJuIGZVKG4sciksITF9ZmluYWxseXtNcyg3LHQsZSl9fWZ1bmN0aW9uIHQ1KG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uIG8oYSl7aWYoYT09PUZ1bmN0aW9uKXJldHVybiBpO0FQKG4uY29tcG9uZW50T2Zmc2V0Pi0xP2VkKG4uaW5kZXgsdCk6dCk7bGV0IGw9ZTUodCxlLGksYSksYz1vLl9fbmdOZXh0TGlzdGVuZXJGbl9fO2Zvcig7YzspbD1lNSh0LGUsYyxhKSYmbCxjPWMuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIHImJiExPT09bCYmKGEucHJldmVudERlZmF1bHQoKSxhLnJldHVyblZhbHVlPSExKSxsfX1mdW5jdGlvbiB3KG49MSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybihYbi5sRnJhbWUuY29udGV4dExWaWV3PWZ1bmN0aW9uKG4sdCl7Zm9yKDtuPjA7KXQ9dFtkaF0sbi0tO3JldHVybiB0fShuLFhuLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtJYV19KG4pfWZ1bmN0aW9uIHhsZShuLHQpe2xldCBlPW51bGwsaT1mdW5jdGlvbihuKXtsZXQgdD1uLmF0dHJzO2lmKG51bGwhPXQpe2xldCBlPXQuaW5kZXhPZig1KTtpZigwPT0oMSZlKSlyZXR1cm4gdFtlKzFdfXJldHVybiBudWxsfShuKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXTtpZigiKiIhPT1vKXtpZihudWxsPT09aT9KeihuLG8sITApOl9zZShpLG8pKXJldHVybiByfWVsc2UgZT1yfXJldHVybiBlfWZ1bmN0aW9uIGduKG4pe2xldCB0PUtlKClbZmxdW0RhXTtpZighdC5wcm9qZWN0aW9uKXtsZXQgaT10LnByb2plY3Rpb249WF8obj9uLmxlbmd0aDoxLG51bGwpLHI9aS5zbGljZSgpLG89dC5jaGlsZDtmb3IoO251bGwhPT1vOyl7bGV0IGE9bj94bGUobyxuKTowO251bGwhPT1hJiYoclthXT9yW2FdLnByb2plY3Rpb25OZXh0PW86aVthXT1vLHJbYV09byksbz1vLm5leHR9fX1mdW5jdGlvbiBYdChuLHQ9MCxlKXtsZXQgaT1LZSgpLHI9RWkoKSxvPV9oKHIsWHIrbiwxNixudWxsLGV8fG51bGwpO251bGw9PT1vLnByb2plY3Rpb24mJihvLnByb2plY3Rpb249dCksJGsoKSwzMiE9KDMyJm8uZmxhZ3MpJiZmdW5jdGlvbihuLHQsZSl7RXoodFtsaV0sMCx0LGUseXoobixlLHQpLHh6KGUucGFyZW50fHx0W0RhXSxlLHQpKX0ocixpLG8pfWZ1bmN0aW9uIEppKG4sdCxlKXtyZXR1cm4gU3kobiwiIix0LCIiLGUpLEppfWZ1bmN0aW9uIFN5KG4sdCxlLGkscil7bGV0IG89S2UoKSxhPWJoKG8sdCxlLGkpO3JldHVybiBhIT09R24mJmlzKEVpKCksa3IoKSxvLG4sYSxvW2xpXSxyLCExKSxTeX1mdW5jdGlvbiBxTShuLHQsZSxpLHIsbyxhKXtsZXQgcz1LZSgpLGw9dmgocyx0LGUsaSxyLG8pO3JldHVybiBsIT09R24mJmlzKEVpKCksa3IoKSxzLG4sbCxzW2xpXSxhLCExKSxxTX1mdW5jdGlvbiBZQyhuLHQpe3JldHVybiBuPDwxN3x0PDwyfWZ1bmN0aW9uIFFwKG4pe3JldHVybiBuPj4xNyYzMjc2N31mdW5jdGlvbiBNayhuKXtyZXR1cm4gMnxufWZ1bmN0aW9uIGFoKG4pe3JldHVybigxMzEwNjgmbik+PjJ9ZnVuY3Rpb24gU1Iobix0KXtyZXR1cm4tMTMxMDY5Jm58dDw8Mn1mdW5jdGlvbiB3ayhuKXtyZXR1cm4gMXxufWZ1bmN0aW9uIG41KG4sdCxlLGkscil7bGV0IG89bltlKzFdLGE9bnVsbD09PXQscz1pP1FwKG8pOmFoKG8pLGw9ITE7Zm9yKDswIT09cyYmKCExPT09bHx8YSk7KXtsZXQgZD1uW3MrMV07VGxlKG5bc10sdCkmJihsPSEwLG5bcysxXT1pP3drKGQpOk1rKGQpKSxzPWk/UXAoZCk6YWgoZCl9bCYmKG5bZSsxXT1pP01rKG8pOndrKG8pKX1mdW5jdGlvbiBUbGUobix0KXtyZXR1cm4gbnVsbD09PW58fG51bGw9PXR8fChBcnJheS5pc0FycmF5KG4pP25bMV06bik9PT10fHwhKCFBcnJheS5pc0FycmF5KG4pfHwic3RyaW5nIiE9dHlwZW9mIHQpJiZ5eShuLHQpPj0wfXZhciBtbz17dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVFbmQ6MH07ZnVuY3Rpb24gT1Uobil7cmV0dXJuIG4uc3Vic3RyaW5nKG1vLmtleSxtby5rZXlFbmQpfWZ1bmN0aW9uIERsZShuKXtyZXR1cm4gbi5zdWJzdHJpbmcobW8udmFsdWUsbW8udmFsdWVFbmQpfWZ1bmN0aW9uIEZVKG4sdCl7bGV0IGU9bW8udGV4dEVuZDtyZXR1cm4gZT09PXQ/LTE6KHQ9bW8ua2V5RW5kPWZ1bmN0aW9uKG4sdCxlKXtmb3IoO3Q8ZSYmbi5jaGFyQ29kZUF0KHQpPjMyOyl0Kys7cmV0dXJuIHR9KG4sbW8ua2V5PXQsZSksc2gobix0LGUpKX1mdW5jdGlvbiBMVShuLHQpe2xldCBlPW1vLnRleHRFbmQsaT1tby5rZXk9c2gobix0LGUpO3JldHVybiBlPT09aT8tMTooaT1tby5rZXlFbmQ9ZnVuY3Rpb24obix0LGUpe2xldCBpO2Zvcig7dDxlJiYoNDU9PT0oaT1uLmNoYXJDb2RlQXQodCkpfHw5NT09PWl8fCgtMzMmaSk+PTY1JiYoLTMzJmkpPD05MHx8aT49NDgmJmk8PTU3KTspdCsrO3JldHVybiB0fShuLGksZSksaT1pNShuLGksZSksaT1tby52YWx1ZT1zaChuLGksZSksaT1tby52YWx1ZUVuZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9LTEscj0tMSxvPS0xLGE9dCxzPWE7Zm9yKDthPGU7KXtsZXQgbD1uLmNoYXJDb2RlQXQoYSsrKTtpZig1OT09PWwpcmV0dXJuIHM7MzQ9PT1sfHwzOT09PWw/cz1hPXI1KG4sbCxhLGUpOnQ9PT1hLTQmJjg1PT09byYmODI9PT1yJiY3Nj09PWkmJjQwPT09bD9zPWE9cjUobiw0MSxhLGUpOmw+MzImJihzPWEpLG89cixyPWksaT0tMzMmbH1yZXR1cm4gc30obixpLGUpLGk1KG4saSxlKSl9ZnVuY3Rpb24gTlUobil7bW8ua2V5PTAsbW8ua2V5RW5kPTAsbW8udmFsdWU9MCxtby52YWx1ZUVuZD0wLG1vLnRleHRFbmQ9bi5sZW5ndGh9ZnVuY3Rpb24gc2gobix0LGUpe2Zvcig7dDxlJiZuLmNoYXJDb2RlQXQodCk8PTMyOyl0Kys7cmV0dXJuIHR9ZnVuY3Rpb24gaTUobix0LGUsaSl7cmV0dXJuKHQ9c2gobix0LGUpKTxlJiZ0KyssdH1mdW5jdGlvbiByNShuLHQsZSxpKXtsZXQgcj0tMSxvPWU7Zm9yKDtvPGk7KXtsZXQgYT1uLmNoYXJDb2RlQXQobysrKTtpZihhPT10JiY5MiE9PXIpcmV0dXJuIG87cj05Mj09YSYmOTI9PT1yPzA6YX10aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gTXQobix0LGUpe3JldHVybiB5bChuLHQsZSwhMSksTXR9ZnVuY3Rpb24gUWUobix0KXtyZXR1cm4geWwobix0LG51bGwsITApLFFlfWZ1bmN0aW9uIFJzKG4pe2JsKEhVLE9sZSxuLCExKX1mdW5jdGlvbiBPbGUobix0KXtmb3IobGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIE5VKG4pLExVKG4sc2gobiwwLG1vLnRleHRFbmQpKX0odCk7ZT49MDtlPUxVKHQsZSkpSFUobixPVSh0KSxEbGUodCkpfWZ1bmN0aW9uIGthKG4pe2JsKEhsZSxtYyxuLCEwKX1mdW5jdGlvbiBtYyhuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gTlUobiksRlUobixzaChuLDAsbW8udGV4dEVuZCkpfSh0KTtlPj0wO2U9RlUodCxlKSlucyhuLE9VKHQpLCEwKX1mdW5jdGlvbiB5bChuLHQsZSxpKXtsZXQgcj1LZSgpLG89RWkoKSxhPW5kKDIpO28uZmlyc3RVcGRhdGVQYXNzJiZWVShvLG4sYSxpKSx0IT09R24mJmpvKHIsYSx0KSYmelUobyxvLmRhdGFbdWEoKV0scixyW2xpXSxuLHJbYSsxXT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1ufHwiIj09PW58fCgic3RyaW5nIj09dHlwZW9mIHQ/bis9dDoib2JqZWN0Ij09dHlwZW9mIG4mJihuPWhvKFJhKG4pKSkpLG59KHQsZSksaSxhKX1mdW5jdGlvbiBibChuLHQsZSxpKXtsZXQgcj1FaSgpLG89bmQoMik7ci5maXJzdFVwZGF0ZVBhc3MmJlZVKHIsbnVsbCxvLGkpO2xldCBhPUtlKCk7aWYoZSE9PUduJiZqbyhhLG8sZSkpe2xldCBzPXIuZGF0YVt1YSgpXTtpZihVVShzLGkpJiYhQlUocixvKSl7bGV0IGw9aT9zLmNsYXNzZXNXaXRob3V0SG9zdDpzLnN0eWxlc1dpdGhvdXRIb3N0O251bGwhPT1sJiYoZT1MUihsLGV8fCIiKSksQ2socixzLGEsZSxpKX1lbHNlIWZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyl7cj09PUduJiYocj1VaSk7bGV0IGw9MCxjPTAsZD0wPHIubGVuZ3RoP3JbMF06bnVsbCx1PTA8by5sZW5ndGg/b1swXTpudWxsO2Zvcig7bnVsbCE9PWR8fG51bGwhPT11Oyl7bGV0IHkscD1sPHIubGVuZ3RoP3JbbCsxXTp2b2lkIDAsZj1jPG8ubGVuZ3RoP29bYysxXTp2b2lkIDAsbT1udWxsO2Q9PT11PyhsKz0yLGMrPTIscCE9PWYmJihtPXUseT1mKSk6bnVsbD09PXV8fG51bGwhPT1kJiZkPHU/KGwrPTIsbT1kKTooYys9MixtPXUseT1mKSxudWxsIT09bSYmelUobix0LGUsaSxtLHksYSxzKSxkPWw8ci5sZW5ndGg/cltsXTpudWxsLHU9YzxvLmxlbmd0aD9vW2NdOm51bGx9fShyLHMsYSxhW2xpXSxhW28rMV0sYVtvKzFdPWZ1bmN0aW9uKG4sdCxlKXtpZihudWxsPT1lfHwiIj09PWUpcmV0dXJuIFVpO2xldCBpPVtdLHI9UmEoZSk7aWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyluKGkscltvXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHIpZm9yKGxldCBvIGluIHIpci5oYXNPd25Qcm9wZXJ0eShvKSYmbihpLG8scltvXSk7ZWxzZSJzdHJpbmciPT10eXBlb2YgciYmdChpLHIpO3JldHVybiBpfShuLHQsZSksaSxvKX19ZnVuY3Rpb24gQlUobix0KXtyZXR1cm4gdD49bi5leHBhbmRvU3RhcnRJbmRleH1mdW5jdGlvbiBWVShuLHQsZSxpKXtsZXQgcj1uLmRhdGE7aWYobnVsbD09PXJbZSsxXSl7bGV0IG89clt1YSgpXSxhPUJVKG4sZSk7VVUobyxpKSYmbnVsbD09PXQmJiFhJiYodD0hMSksdD1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1lUChuKSxvPWk/dC5yZXNpZHVhbENsYXNzZXM6dC5yZXNpZHVhbFN0eWxlcztpZihudWxsPT09cikwPT09KGk/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncykmJihlPXN5KGU9RVIobnVsbCxuLHQsZSxpKSx0LmF0dHJzLGkpLG89bnVsbCk7ZWxzZXtsZXQgYT10LmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2lmKC0xPT09YXx8blthXSE9PXIpaWYoZT1FUihyLG4sdCxlLGkpLG51bGw9PT1vKXtsZXQgbD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9ZT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzO2lmKDAhPT1haChpKSlyZXR1cm4gbltRcChpKV19KG4sdCxpKTt2b2lkIDAhPT1sJiZBcnJheS5pc0FycmF5KGwpJiYobD1FUihudWxsLG4sdCxsWzFdLGkpLGw9c3kobCx0LmF0dHJzLGkpLGZ1bmN0aW9uKG4sdCxlLGkpe25bUXAoZT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzKV09aX0obix0LGksbCkpfWVsc2Ugbz1mdW5jdGlvbihuLHQsZSl7bGV0IGkscj10LmRpcmVjdGl2ZUVuZDtmb3IobGV0IG89MSt0LmRpcmVjdGl2ZVN0eWxpbmdMYXN0O288cjtvKyspaT1zeShpLG5bb10uaG9zdEF0dHJzLGUpO3JldHVybiBzeShpLHQuYXR0cnMsZSl9KG4sdCxpKX1yZXR1cm4gdm9pZCAwIT09byYmKGk/dC5yZXNpZHVhbENsYXNzZXM9bzp0LnJlc2lkdWFsU3R5bGVzPW8pLGV9KHIsbyx0LGkpLGZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgYT1vP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3Mscz1RcChhKSxsPWFoKGEpO25baV09ZTtsZXQgZCxjPSExO2lmKEFycmF5LmlzQXJyYXkoZSk/KGQ9ZVsxXSwobnVsbD09PWR8fHl5KGUsZCk+MCkmJihjPSEwKSk6ZD1lLHIpaWYoMCE9PWwpe2xldCBwPVFwKG5bcysxXSk7bltpKzFdPVlDKHAscyksMCE9PXAmJihuW3ArMV09U1IobltwKzFdLGkpKSxuW3MrMV09ZnVuY3Rpb24obix0KXtyZXR1cm4gMTMxMDcxJm58dDw8MTd9KG5bcysxXSxpKX1lbHNlIG5baSsxXT1ZQyhzLDApLDAhPT1zJiYobltzKzFdPVNSKG5bcysxXSxpKSkscz1pO2Vsc2UgbltpKzFdPVlDKGwsMCksMD09PXM/cz1pOm5bbCsxXT1TUihuW2wrMV0saSksbD1pO2MmJihuW2krMV09TWsobltpKzFdKSksbjUobixkLGksITApLG41KG4sZCxpLCExKSxmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPXI/bi5yZXNpZHVhbENsYXNzZXM6bi5yZXNpZHVhbFN0eWxlcztudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIHQmJnl5KG8sdCk+PTAmJihlW2krMV09d2soZVtpKzFdKSl9KHQsZCxuLGksbyksYT1ZQyhzLGwpLG8/dC5jbGFzc0JpbmRpbmdzPWE6dC5zdHlsZUJpbmRpbmdzPWF9KHIsbyx0LGUsYSxpKX19ZnVuY3Rpb24gRVIobix0LGUsaSxyKXtsZXQgbz1udWxsLGE9ZS5kaXJlY3RpdmVFbmQscz1lLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2ZvcigtMT09PXM/cz1lLmRpcmVjdGl2ZVN0YXJ0OnMrKztzPGEmJihvPXRbc10saT1zeShpLG8uaG9zdEF0dHJzLHIpLG8hPT1uKTspcysrO3JldHVybiBudWxsIT09biYmKGUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q9cyksaX1mdW5jdGlvbiBzeShuLHQsZSl7bGV0IGk9ZT8xOjIscj0tMTtpZihudWxsIT09dClmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7bGV0IGE9dFtvXTsibnVtYmVyIj09dHlwZW9mIGE/cj1hOnI9PT1pJiYoQXJyYXkuaXNBcnJheShuKXx8KG49dm9pZCAwPT09bj9bXTpbIiIsbl0pLG5zKG4sYSwhIWV8fHRbKytvXSkpfXJldHVybiB2b2lkIDA9PT1uP251bGw6bn1mdW5jdGlvbiBIVShuLHQsZSl7bnMobix0LFJhKGUpKX1mdW5jdGlvbiBIbGUobix0LGUpe2xldCBpPVN0cmluZyh0KTsiIiE9PWkmJiFpLmluY2x1ZGVzKCIgIikmJm5zKG4saSxlKX1mdW5jdGlvbiB6VShuLHQsZSxpLHIsbyxhLHMpe2lmKCEoMyZ0LnR5cGUpKXJldHVybjtsZXQgbD1uLmRhdGEsYz1sW3MrMV0sZD1mdW5jdGlvbihuKXtyZXR1cm4gMT09KDEmbil9KGMpP281KGwsdCxlLHIsYWgoYyksYSk6dm9pZCAwO3hNKGQpfHwoeE0obyl8fGZ1bmN0aW9uKG4pe3JldHVybiAyPT0oMiZuKX0oYykmJihvPW81KGwsbnVsbCxlLHIscyxhKSksZnVuY3Rpb24obix0LGUsaSxyKXtpZih0KXI/bi5hZGRDbGFzcyhlLGkpOm4ucmVtb3ZlQ2xhc3MoZSxpKTtlbHNle2xldCBvPS0xPT09aS5pbmRleE9mKCItIik/dm9pZCAwOkVzLkRhc2hDYXNlO251bGw9PXI/bi5yZW1vdmVTdHlsZShlLGksbyk6KCJzdHJpbmciPT10eXBlb2YgciYmci5lbmRzV2l0aCgiIWltcG9ydGFudCIpJiYocj1yLnNsaWNlKDAsLTEwKSxvfD1Fcy5JbXBvcnRhbnQpLG4uc2V0U3R5bGUoZSxpLHIsbykpfX0oaSxhLE9NKHVhKCksZSkscixvKSl9ZnVuY3Rpb24gbzUobix0LGUsaSxyLG8pe2xldCBzLGE9bnVsbD09PXQ7Zm9yKDtyPjA7KXtsZXQgbD1uW3JdLGM9QXJyYXkuaXNBcnJheShsKSxkPWM/bFsxXTpsLHU9bnVsbD09PWQscD1lW3IrMV07cD09PUduJiYocD11P1VpOnZvaWQgMCk7bGV0IGY9dT95UihwLGkpOmQ9PT1pP3A6dm9pZCAwO2lmKGMmJiF4TShmKSYmKGY9eVIobCxpKSkseE0oZikmJihzPWYsYSkpcmV0dXJuIHM7bGV0IG09bltyKzFdO3I9YT9RcChtKTphaChtKX1pZihudWxsIT09dCl7bGV0IGw9bz90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO251bGwhPWwmJihzPXlSKGwsaSkpfXJldHVybiBzfWZ1bmN0aW9uIHhNKG4pe3JldHVybiB2b2lkIDAhPT1ufWZ1bmN0aW9uIFVVKG4sdCl7cmV0dXJuIDAhPShuLmZsYWdzJih0Pzg6MTYpKX1mdW5jdGlvbiBUKG4sdD0iIil7bGV0IGU9S2UoKSxpPUVpKCkscj1uK1hyLG89aS5maXJzdENyZWF0ZVBhc3M/X2goaSxyLDEsdCxudWxsKTppLmRhdGFbcl0sYT1lW3JdPXBQKGVbbGldLHQpO0JNKGksZSxhLG8pLGFjKG8sITEpfWZ1bmN0aW9uIHV0KG4pe3JldHVybiB6ZSgiIixuLCIiKSx1dH1mdW5jdGlvbiB6ZShuLHQsZSl7bGV0IGk9S2UoKSxyPWJoKGksbix0LGUpO3JldHVybiByIT09R24mJm9kKGksdWEoKSxyKSx6ZX1mdW5jdGlvbiBkdShuLHQsZSxpLHIpe2xldCBvPUtlKCksYT12aChvLG4sdCxlLGkscik7cmV0dXJuIGEhPT1HbiYmb2Qobyx1YSgpLGEpLGR1fWZ1bmN0aW9uIFlNKG4sdCxlLGkscixvLGEpe2xldCBzPUtlKCksbD14aChzLG4sdCxlLGkscixvLGEpO3JldHVybiBsIT09R24mJm9kKHMsdWEoKSxsKSxZTX1mdW5jdGlvbiBEaChuLHQsZSl7YmwobnMsbWMsYmgoS2UoKSxuLHQsZSksITApfWZ1bmN0aW9uIENvKG4sdCxlKXtsZXQgaT1LZSgpO3JldHVybiBqbyhpLHBoKCksdCkmJmlzKEVpKCksa3IoKSxpLG4sdCxpW2xpXSxlLCEwKSxDb31mdW5jdGlvbiBLcChuLHQsZSl7bGV0IGk9S2UoKTtpZihqbyhpLHBoKCksdCkpe2xldCBvPUVpKCksYT1rcigpO2lzKG8sYSxpLG4sdCxwVShlUChvLmRhdGEpLGEsaSksZSwhMCl9cmV0dXJuIEtwfXZhciBOcD12b2lkIDAsc2NlPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0sTnBdLFtbIkFNIiwiUE0iXSxOcCxOcF0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sTnAsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLE5wLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsTnAsInsxfSAnYXQnIHswfSIsTnBdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24obil7bGV0IGU9TWF0aC5mbG9vcihNYXRoLmFicyhuKSksaT1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PWk/MTo1fV0sVFI9e307ZnVuY3Rpb24gUGEobil7bGV0IHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obiksZT1hNSh0KTtpZihlKXJldHVybiBlO2xldCBpPXQuc3BsaXQoIi0iKVswXTtpZihlPWE1KGkpLGUpcmV0dXJuIGU7aWYoImVuIj09PWkpcmV0dXJuIHNjZTt0aHJvdyBuZXcgYnQoNzAxLCExKX1mdW5jdGlvbiBhNShuKXtyZXR1cm4gbiBpbiBUUnx8KFRSW25dPVdyLm5nJiZXci5uZy5jb21tb24mJldyLm5nLmNvbW1vbi5sb2NhbGVzJiZXci5uZy5jb21tb24ubG9jYWxlc1tuXSksVFJbbl19dmFyIGdyPSgoKT0+e3JldHVybihuPWdyfHwoZ3I9e30pKVtuLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbltuLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLG5bbi5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLG5bbi5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixuW24uRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixuW24uTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLG5bbi5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixuW24uRXJhcz03XT0iRXJhcyIsbltuLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbltuLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixuW24uRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLG5bbi5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsbltuLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLG5bbi5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbltuLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixuW24uQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixuW24uQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbltuLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbltuLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixuW24uRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsbltuLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixuW24uRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixncjt2YXIgbn0pKCksY2NlPVsiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiXTt2YXIgQ009ImVuLVVTIixvaj17bWFya2VyOiJlbGVtZW50In0sYWo9e21hcmtlcjoiSUNVIn0sdWw9KCgpPT57cmV0dXJuKG49dWx8fCh1bD17fSkpW24uU0hJRlQ9Ml09IlNISUZUIixuW24uQVBQRU5EX0VBR0VSTFk9MV09IkFQUEVORF9FQUdFUkxZIixuW24uQ09NTUVOVD0yXT0iQ09NTUVOVCIsdWw7dmFyIG59KSgpLHNqPUNNO2Z1bmN0aW9uIGxqKG4sdCxlKXtsZXQgaT10Lmluc2VydEJlZm9yZUluZGV4LHI9QXJyYXkuaXNBcnJheShpKT9pWzBdOmk7cmV0dXJuIG51bGw9PT1yP0N6KG4sMCxlKTpUcyhlW3JdKX1mdW5jdGlvbiBjaihuLHQsZSxpLHIpe2xldCBvPXQuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShvKSl7bGV0IGE9aSxzPW51bGw7aWYoMyZ0LnR5cGV8fChzPWEsYT1yKSxudWxsIT09YSYmLTE9PT10LmNvbXBvbmVudE9mZnNldClmb3IobGV0IGw9MTtsPG8ubGVuZ3RoO2wrKylxcChuLGEsZVtvW2xdXSxzLCExKX19ZnVuY3Rpb24gZGoobix0KXtpZihuLnB1c2godCksbi5sZW5ndGg+MSlmb3IobGV0IGU9bi5sZW5ndGgtMjtlPj0wO2UtLSl7bGV0IGk9bltlXTt1aihpKXx8bWNlKGksdCkmJm51bGw9PT1oY2UoaSkmJmdjZShpLHQuaW5kZXgpfX1mdW5jdGlvbiB1aihuKXtyZXR1cm4hKDY0Jm4udHlwZSl9ZnVuY3Rpb24gbWNlKG4sdCl7cmV0dXJuIHVqKHQpfHxuLmluZGV4PnQuaW5kZXh9ZnVuY3Rpb24gaGNlKG4pe2xldCB0PW4uaW5zZXJ0QmVmb3JlSW5kZXg7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dFswXTp0fWZ1bmN0aW9uIGdjZShuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7QXJyYXkuaXNBcnJheShlKT9lWzBdPXQ6KHd6KGxqLGNqKSxuLmluc2VydEJlZm9yZUluZGV4PXQpfWZ1bmN0aW9uIFpfKG4sdCl7bGV0IGU9bi5kYXRhW3RdO3JldHVybiBudWxsPT09ZXx8InN0cmluZyI9PXR5cGVvZiBlP251bGw6ZS5oYXNPd25Qcm9wZXJ0eSgiY3VycmVudENhc2VMVmlld0luZGV4Iik/ZTplLnZhbHVlfWZ1bmN0aW9uIGJjZShuLHQsZSl7bGV0IGk9Q1AobixlLDY0LG51bGwsbnVsbCk7cmV0dXJuIGRqKHQsaSksaX1mdW5jdGlvbiBYTShuLHQpe2xldCBlPXRbbi5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO3JldHVybiBudWxsPT09ZT9lOmU8MD9+ZTplfWZ1bmN0aW9uIHZjZShuKXtyZXR1cm4gbj4+PjE3fWZ1bmN0aW9uIHhjZShuKXtyZXR1cm4oMTMxMDcwJm4pPj4+MX12YXIgbHk9MCxLXz0wO2Z1bmN0aW9uIHBqKG4sdCxlLGkpe2xldCBhLHI9ZVtsaV0sbz1udWxsO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXtsZXQgbD10W3NdO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7bGV0IGM9dFsrK3NdO251bGw9PT1lW2NdJiYoZVtjXT1wUChyLGwpKX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgbClzd2l0Y2goMSZsKXtjYXNlIDA6bGV0IGQsdSxjPXZjZShsKTtpZihudWxsPT09byYmKG89YyxhPU5NKHIsaSkpLGM9PT1vPyhkPWksdT1hKTooZD1udWxsLHU9VHMoZVtjXSkpLG51bGwhPT11KXtsZXQgeT14Y2UobCk7cXAocix1LGVbeV0sZCwhMSk7bGV0IHY9Wl8obix5KTtpZihudWxsIT09diYmIm9iamVjdCI9PXR5cGVvZiB2KXtsZXQgeD1YTSh2LGUpO251bGwhPT14JiZwaihuLHYuY3JlYXRlW3hdLGUsZVt2LmFuY2hvcklkeF0pfX1icmVhaztjYXNlIDE6bGV0IGY9dFsrK3NdLG09dFsrK3NdO0lQKHIsT00obD4+PjEsZSksbnVsbCxudWxsLGYsbSxudWxsKX1lbHNlIHN3aXRjaChsKXtjYXNlIGFqOmxldCBjPXRbKytzXSxkPXRbKytzXTtudWxsPT09ZVtkXSYmc2MoZVtkXT1sYWUocixjKSxlKTticmVhaztjYXNlIG9qOmxldCB1PXRbKytzXSxwPXRbKytzXTtudWxsPT09ZVtwXSYmc2MoZVtwXT1mUChyLHUsbnVsbCksZSl9fX1mdW5jdGlvbiBmaihuLHQsZSxpLHIpe2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgYT1lW29dLHM9ZVsrK29dO2lmKGEmcil7bGV0IGw9IiI7Zm9yKGxldCBjPW8rMTtjPD1vK3M7YysrKXtsZXQgZD1lW2NdO2lmKCJzdHJpbmciPT10eXBlb2YgZClsKz1kO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBkKWlmKGQ8MClsKz1Zbih0W2ktZF0pO2Vsc2V7bGV0IHU9ZD4+PjI7c3dpdGNoKDMmZCl7Y2FzZSAxOmxldCBwPWVbKytjXSxmPWVbKytjXSxtPW4uZGF0YVt1XTsic3RyaW5nIj09dHlwZW9mIG0/SVAodFtsaV0sdFt1XSxudWxsLG0scCxsLGYpOmlzKG4sbSx0LHAsbCx0W2xpXSxmLCExKTticmVhaztjYXNlIDA6bGV0IHk9dFt1XTtudWxsIT09eSYmaHoodFtsaV0seSxsKTticmVhaztjYXNlIDI6RWNlKG4sWl8obix1KSx0LGwpO2JyZWFrO2Nhc2UgMzpzNShuLFpfKG4sdSksaSx0KX19fX1lbHNle2xldCBsPWVbbysxXTtpZihsPjAmJjM9PSgzJmwpKXtsZXQgZD1aXyhuLGw+Pj4yKTt0W2QuY3VycmVudENhc2VMVmlld0luZGV4XTwwJiZzNShuLGQsaSx0KX19bys9c319ZnVuY3Rpb24gczUobix0LGUsaSl7bGV0IHI9aVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF07aWYobnVsbCE9PXIpe2xldCBvPWx5O3I8MCYmKHI9aVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF09fnIsbz0tMSksZmoobixpLHQudXBkYXRlW3JdLGUsbyl9fWZ1bmN0aW9uIEVjZShuLHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuLHQpe2xldCBlPW4uY2FzZXMuaW5kZXhPZih0KTtpZigtMT09PWUpc3dpdGNoKG4udHlwZSl7Y2FzZSAxOntsZXQgaT1mdW5jdGlvbihuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiBQYShuKVtnci5QbHVyYWxDYXNlXX0odCkocGFyc2VJbnQobiwxMCkpLGk9Y2NlW2VdO3JldHVybiB2b2lkIDAhPT1pP2k6Im90aGVyIn0odCxzaik7ZT1uLmNhc2VzLmluZGV4T2YoaSksLTE9PT1lJiYib3RoZXIiIT09aSYmKGU9bi5jYXNlcy5pbmRleE9mKCJvdGhlciIpKTticmVha31jYXNlIDA6ZT1uLmNhc2VzLmluZGV4T2YoIm90aGVyIil9cmV0dXJuLTE9PT1lP251bGw6ZX0odCxpKTtpZihYTSh0LGUpIT09ciYmKG1qKG4sdCxlKSxlW3QuY3VycmVudENhc2VMVmlld0luZGV4XT1udWxsPT09cj9udWxsOn5yLG51bGwhPT1yKSl7bGV0IGE9ZVt0LmFuY2hvcklkeF07YSYmcGoobix0LmNyZWF0ZVtyXSxlLGEpfX1mdW5jdGlvbiBtaihuLHQsZSl7bGV0IGk9WE0odCxlKTtpZihudWxsIT09aSl7bGV0IHI9dC5yZW1vdmVbaV07Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldCBhPXJbb107aWYoYT4wKXtsZXQgcz1PTShhLGUpO251bGwhPT1zJiZtUChlW2xpXSxzKX1lbHNlIG1qKG4sWl8obix+YSksZSl9fX1mdW5jdGlvbiBEY2UoKXtsZXQgZSxpLG49W10sdD0tMTtmdW5jdGlvbiBvKHMsbCl7dD0wO2xldCBjPVhNKHMsbCk7aT1udWxsIT09Yz9zLnJlbW92ZVtjXTpVaX1mdW5jdGlvbiBhKCl7aWYodDxpLmxlbmd0aCl7bGV0IHM9aVt0KytdO3JldHVybiBzPjA/ZVtzXToobi5wdXNoKHQsaSksbyhlW0JuXS5kYXRhW35zXSxlKSxhKCkpfXJldHVybiAwPT09bi5sZW5ndGg/bnVsbDooaT1uLnBvcCgpLHQ9bi5wb3AoKSxhKCkpfXJldHVybiBmdW5jdGlvbihzLGwpe2ZvcihlPWw7bi5sZW5ndGg7KW4ucG9wKCk7cmV0dXJuIG8ocy52YWx1ZSxsKSxhfX12YXIgTU09L1x1ZmZmZChcZCspOj9cZCpcdWZmZmQvZ2ksSWNlPS8oe1xzKlx1ZmZmZFxkKzo/XGQqXHVmZmZkXHMqLFxzKlxTezZ9XHMqLFtcc1xTXSp9KS9naSxBY2U9L1x1ZmZmZChcZCspXHVmZmZkLyxoaj0vXlxzKihcdWZmZmRcZCs6P1xkKlx1ZmZmZClccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sSl89Ilx1ZmZmZCIsUmNlPS9cdWZmZmRcLz9cKihcZCs6XGQrKVx1ZmZmZC9naSxrY2U9L1x1ZmZmZChcLz9bIypdXGQrKTo/XGQqXHVmZmZkL2dpLFBjZT0vXHVFNTAwL2c7ZnVuY3Rpb24gZ2oobix0LGUsaSxyLG8sYSl7bGV0IHM9TXkobixpLDEsbnVsbCksbD1zPDx1bC5TSElGVCxjPXJ5KCk7dD09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9dWwuQVBQRU5EX0VBR0VSTFkpLGEmJihsfD11bC5DT01NRU5ULGZ1bmN0aW9uKG4pe3ZvaWQgMD09PVFSJiYoUVI9bigpKX0oRGNlKSksci5wdXNoKGwsbnVsbD09PW8/IiI6byk7bGV0IGQ9Q1AobixzLGE/MzI6MSxudWxsPT09bz8iIjpvLG51bGwpO2RqKGUsZCk7bGV0IHU9ZC5pbmRleDtyZXR1cm4gYWMoZCwhMSksbnVsbCE9PWMmJnQhPT1jJiZmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PWU/KHd6KGxqLGNqKSxlPW4uaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsdF0pOihmdW5jdGlvbihuLHQsZSl7MSE9biYmTTUoIkV4cGVjdGluZyBhcnJheSBoZXJlIixuLCEwLCI9PSIpfShBcnJheS5pc0FycmF5KGUpKSxlLnB1c2godCkpfShjLHUpLGR9ZnVuY3Rpb24gTGNlKG4sdCxlLGkscixvLGEpe2xldCBzPWEubWF0Y2goTU0pLGw9Z2oobix0LGUsbyxpLHM/bnVsbDphLCExKTtzJiYkXyhyLGEsbC5pbmRleCxudWxsLDAsbnVsbCl9ZnVuY3Rpb24gJF8obix0LGUsaSxyLG8pe2xldCBhPW4ubGVuZ3RoLHM9YSsxO24ucHVzaChudWxsLG51bGwpO2xldCBsPWErMixjPXQuc3BsaXQoTU0pLGQ9MDtmb3IobGV0IHU9MDt1PGMubGVuZ3RoO3UrKyl7bGV0IHA9Y1t1XTtpZigxJnUpe2xldCBmPXIrcGFyc2VJbnQocCwxMCk7bi5wdXNoKC0xLWYpLGR8PV9qKGYpfWVsc2UiIiE9PXAmJm4ucHVzaChwKX1yZXR1cm4gbi5wdXNoKGU8PDJ8KGk/MTowKSksaSYmbi5wdXNoKGksbyksblthXT1kLG5bc109bi5sZW5ndGgtbCxkfWZ1bmN0aW9uIEJjZShuKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdOyJudW1iZXIiPT10eXBlb2YgaSYmaTwwJiZ0Kyt9cmV0dXJuIHR9ZnVuY3Rpb24gX2oobil7cmV0dXJuIDE8PE1hdGgubWluKG4sMzEpfWZ1bmN0aW9uIGw1KG4pe2xldCB0LG8sZT0iIixpPTAscj0hMTtmb3IoO251bGwhPT0odD1SY2UuZXhlYyhuKSk7KXI/dFswXT09PWAke0pffS8qJHtvfSR7Sl99YCYmKGk9dC5pbmRleCxyPSExKTooZSs9bi5zdWJzdHJpbmcoaSx0LmluZGV4K3RbMF0ubGVuZ3RoKSxvPXRbMV0scj0hMCk7cmV0dXJuIGUrPW4uc2xpY2UoaSksZX1mdW5jdGlvbiB5aihuLHQsZSxpLHIsbyl7bGV0IGE9MCxzPXt0eXBlOnIudHlwZSxjdXJyZW50Q2FzZUxWaWV3SW5kZXg6TXkobix0LDEsbnVsbCksYW5jaG9ySWR4Om8sY2FzZXM6W10sY3JlYXRlOltdLHJlbW92ZTpbXSx1cGRhdGU6W119OyhmdW5jdGlvbihuLHQsZSl7bi5wdXNoKF9qKHQubWFpbkJpbmRpbmcpLDIsLTEtdC5tYWluQmluZGluZyxlPDwyfDIpfSkoZSxyLG8pLGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uLmRhdGFbdF07bnVsbD09PWk/bi5kYXRhW3RdPWU6aS52YWx1ZT1lfShuLG8scyk7bGV0IGw9ci52YWx1ZXM7Zm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspe2xldCBkPWxbY10sdT1bXTtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl7bGV0IGY9ZFtwXTtpZigic3RyaW5nIiE9dHlwZW9mIGYpe2xldCBtPXUucHVzaChmKS0xO2RbcF09YFx4M2MhLS1cdWZmZmQke219XHVmZmZkLS1ceDNlYH19YT1VY2UobixzLHQsZSxpLHIuY2FzZXNbY10sZC5qb2luKCIiKSx1KXxhfWEmJmZ1bmN0aW9uKG4sdCxlKXtuLnB1c2godCwxLGU8PDJ8Myl9KGUsYSxvKX1mdW5jdGlvbiB6Y2Uobil7bGV0IHQ9W10sZT1bXSxpPTEscj0wLG89U2sobj1uLnJlcGxhY2UoaGosZnVuY3Rpb24oYSxzLGwpe3JldHVybiBpPSJzZWxlY3QiPT09bD8wOjEscj1wYXJzZUludChzLnNsaWNlKDEpLDEwKSwiIn0pKTtmb3IobGV0IGE9MDthPG8ubGVuZ3RoOyl7bGV0IHM9b1thKytdLnRyaW0oKTsxPT09aSYmKHM9cy5yZXBsYWNlKC9ccyooPzo9KT8oXHcrKVxzKi8sIiQxIikpLHMubGVuZ3RoJiZ0LnB1c2gocyk7bGV0IGw9U2sob1thKytdKTt0Lmxlbmd0aD5lLmxlbmd0aCYmZS5wdXNoKGwpfXJldHVybnt0eXBlOmksbWFpbkJpbmRpbmc6cixjYXNlczp0LHZhbHVlczplfX1mdW5jdGlvbiBTayhuKXtpZighbilyZXR1cm5bXTtsZXQgbyx0PTAsZT1bXSxpPVtdLHI9L1t7fV0vZztmb3Ioci5sYXN0SW5kZXg9MDtvPXIuZXhlYyhuKTspe2xldCBzPW8uaW5kZXg7aWYoIn0iPT1vWzBdKXtpZihlLnBvcCgpLDA9PWUubGVuZ3RoKXtsZXQgbD1uLnN1YnN0cmluZyh0LHMpO2hqLnRlc3QobCk/aS5wdXNoKHpjZShsKSk6aS5wdXNoKGwpLHQ9cysxfX1lbHNle2lmKDA9PWUubGVuZ3RoKXtsZXQgbD1uLnN1YnN0cmluZyh0LHMpO2kucHVzaChsKSx0PXMrMX1lLnB1c2goInsiKX19bGV0IGE9bi5zdWJzdHJpbmcodCk7cmV0dXJuIGkucHVzaChhKSxpfWZ1bmN0aW9uIFVjZShuLHQsZSxpLHIsbyxhLHMpe2xldCBsPVtdLGM9W10sZD1bXTt0LmNhc2VzLnB1c2gobyksdC5jcmVhdGUucHVzaChsKSx0LnJlbW92ZS5wdXNoKGMpLHQudXBkYXRlLnB1c2goZCk7bGV0IHA9TnooUnooKSkuZ2V0SW5lcnRCb2R5RWxlbWVudChhKSxmPWNrKHApfHxwO3JldHVybiBmP2JqKG4sdCxlLGksbCxjLGQsZixyLHMsMCk6MH1mdW5jdGlvbiBiaihuLHQsZSxpLHIsbyxhLHMsbCxjLGQpe2xldCB1PTAscD1zLmZpcnN0Q2hpbGQ7Zm9yKDtwOyl7bGV0IGY9TXkobixlLDEsbnVsbCk7c3dpdGNoKHAubm9kZVR5cGUpe2Nhc2UgTm9kZS5FTEVNRU5UX05PREU6bGV0IG09cCx5PW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHNrLmhhc093blByb3BlcnR5KHkpKXtEUihyLG9qLHksbCxmKSxuLmRhdGFbZl09eTtsZXQgUj1tLmF0dHJpYnV0ZXM7Zm9yKGxldCBBPTA7QTxSLmxlbmd0aDtBKyspe2xldCBIPVIuaXRlbShBKSx0ZT1ILm5hbWUudG9Mb3dlckNhc2UoKTtILnZhbHVlLm1hdGNoKE1NKT96ei5oYXNPd25Qcm9wZXJ0eSh0ZSkmJiRfKGEsSC52YWx1ZSxmLEgubmFtZSwwLF9QW3RlXT92eTpudWxsKTpxY2UocixmLEgpfXU9Ymoobix0LGUsaSxyLG8sYSxwLGYsYyxkKzEpfHUsYzUobyxmLGQpfWJyZWFrO2Nhc2UgTm9kZS5URVhUX05PREU6bGV0IE09cC50ZXh0Q29udGVudHx8IiIsdj1NLm1hdGNoKE1NKTtEUihyLG51bGwsdj8iIjpNLGwsZiksYzUobyxmLGQpLHYmJih1PSRfKGEsTSxmLG51bGwsMCxudWxsKXx1KTticmVhaztjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOmxldCB4PUFjZS5leGVjKHAudGV4dENvbnRlbnR8fCIiKTtpZih4KXtsZXQgQT1jW3BhcnNlSW50KHhbMV0sMTApXTtEUihyLGFqLCIiLGwsZikseWoobixlLGksbCxBLGYpLGpjZShvLGYsZCl9fXA9cC5uZXh0U2libGluZ31yZXR1cm4gdX1mdW5jdGlvbiBjNShuLHQsZSl7MD09PWUmJm4ucHVzaCh0KX1mdW5jdGlvbiBqY2Uobix0LGUpezA9PT1lJiYobi5wdXNoKH50KSxuLnB1c2godCkpfWZ1bmN0aW9uIERSKG4sdCxlLGkscil7bnVsbCE9PXQmJm4ucHVzaCh0KSxuLnB1c2goZSxyLGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gMHx0PDwxN3xlPDwxfSgwLGkscikpfWZ1bmN0aW9uIHFjZShuLHQsZSl7bi5wdXNoKHQ8PDF8MSxlLm5hbWUsZS52YWx1ZSl9dmFyIGQ1PTAsWWNlPS9cWyhcdWZmZmQuKz9cdWZmZmQ/KVxdLyxYY2U9L1xbKFx1ZmZmZC4rP1x1ZmZmZD8pXF18KFx1ZmZmZFwvP1wqXGQrOlxkK1x1ZmZmZCkvZyxRY2U9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxaY2U9L3soW0EtWjAtOV9dKyl9L2csS2NlPS9cdWZmZmRJMThOX0VYUF8oSUNVKF9cZCspPylcdWZmZmQvZyxKY2U9L1wvXCovLCRjZT0vXGQrXDooXGQrKS87ZnVuY3Rpb24gdmoobix0LGU9LTEpe2xldCBpPUVpKCkscj1LZSgpLG89WHIrbixhPW91KGkuY29uc3RzLHQpLHM9cnkoKTtpLmZpcnN0Q3JlYXRlUGFzcyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBhPXJ5KCkscz1bXSxsPVtdLGM9W1tdXTtyPWZ1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24obil7cmV0dXJuLTE9PT1ufSh0KSlyZXR1cm4gbDUobik7e2xldCBlPW4uaW5kZXhPZihgOiR7dH0ke0pffWApKzIrdC50b1N0cmluZygpLmxlbmd0aCxpPW4uc2VhcmNoKG5ldyBSZWdFeHAoYCR7Sl99XFwvXFwqXFxkKzoke3R9JHtKX31gKSk7cmV0dXJuIGw1KG4uc3Vic3RyaW5nKGUsaSkpfX0ocixvKTtsZXQgZD1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKFBjZSwiICIpfShyKS5zcGxpdChrY2UpO2ZvcihsZXQgdT0wO3U8ZC5sZW5ndGg7dSsrKXtsZXQgcD1kW3VdO2lmKDA9PSgxJnUpKXtsZXQgZj1TayhwKTtmb3IobGV0IG09MDttPGYubGVuZ3RoO20rKyl7bGV0IHk9ZlttXTtpZigwPT0oMSZtKSkiIiE9PXkmJkxjZShuLGEsY1swXSxzLGwsZSx5KTtlbHNle2xldCBNPXk7aWYoIm9iamVjdCIhPXR5cGVvZiBNKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIElDVSBleHByZXNzaW9uIGluICIke3J9IiBtZXNzYWdlLmApO3lqKG4sZSxsLHQsTSxnaihuLGEsY1swXSxlLHMsIiIsITApLmluZGV4KX19fWVsc2V7bGV0IGY9NDc9PT1wLmNoYXJDb2RlQXQoMCkseT0ocC5jaGFyQ29kZUF0KGY/MTowKSxYcitOdW1iZXIucGFyc2VJbnQocC5zdWJzdHJpbmcoZj8yOjEpKSk7aWYoZiljLnNoaWZ0KCksYWMocnkoKSwhMSk7ZWxzZXtsZXQgTT1iY2UobixjWzBdLHkpO2MudW5zaGlmdChbXSksYWMoTSwhMCl9fX1uLmRhdGFbaV09e2NyZWF0ZTpzLHVwZGF0ZTpsfX0oaSxudWxsPT09cz8wOnMuaW5kZXgscixvLGEsZSk7bGV0IGw9aS5kYXRhW29dLGQ9YnooaSxzPT09cltEYV0/bnVsbDpzLHIpOyhmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uW2xpXTtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7bGV0IGE9dFtvKytdLHM9dFtvXSxjPShhJnVsLkFQUEVORF9FQUdFUkxZKT09PXVsLkFQUEVORF9FQUdFUkxZLGQ9YT4+PnVsLlNISUZULHU9bltkXTtudWxsPT09dSYmKHU9bltkXT0oYSZ1bC5DT01NRU5UKT09PXVsLkNPTU1FTlQ/ci5jcmVhdGVDb21tZW50KHMpOnBQKHIscykpLGMmJm51bGwhPT1lJiZxcChyLGUsdSxpLCExKX19KShyLGwuY3JlYXRlLGQscyYmOCZzLnR5cGU/cltzLmluZGV4XTpudWxsKSxqNSghMCl9ZnVuY3Rpb24geGooKXtqNSghMSl9ZnVuY3Rpb24gUU0obix0LGUpe3ZqKG4sdCxlKSx4aigpfWZ1bmN0aW9uIEV5KG4pe3JldHVybiBmdW5jdGlvbihuKXtuJiYobHl8PTE8PE1hdGgubWluKEtfLDMxKSksS18rK30oam8oS2UoKSxwaCgpLG4pKSxFeX1mdW5jdGlvbiBaTShuKXshZnVuY3Rpb24obix0LGUpe2lmKEtfPjApe2xldCBpPW4uZGF0YVtlXTtmaihuLHQsQXJyYXkuaXNBcnJheShpKT9pOmkudXBkYXRlLHRkKCktS18tMSxseSl9bHk9MCxLXz0wfShFaSgpLEtlKCksbitYcil9ZnVuY3Rpb24gS00obix0PXt9KXtyZXR1cm4gZnVuY3Rpb24obix0PXt9KXtsZXQgZT1uO2lmKFljZS50ZXN0KG4pKXtsZXQgaT17fSxyPVtkNV07ZT1lLnJlcGxhY2UoWGNlLChvLGEscyk9PntsZXQgbD1hfHxzLGM9aVtsXXx8W107aWYoYy5sZW5ndGh8fChsLnNwbGl0KCJ8IikuZm9yRWFjaCh5PT57bGV0IE09eS5tYXRjaCgkY2UpLHY9TT9wYXJzZUludChNWzFdLDEwKTpkNSx4PUpjZS50ZXN0KHkpO2MucHVzaChbdix4LHldKX0pLGlbbF09YyksIWMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIHBsYWNlaG9sZGVyIC0gJHtsfWApO2xldCBkPXJbci5sZW5ndGgtMV0sdT0wO2ZvcihsZXQgeT0wO3k8Yy5sZW5ndGg7eSsrKWlmKGNbeV1bMF09PT1kKXt1PXk7YnJlYWt9bGV0W3AsZixtXT1jW3VdO3JldHVybiBmP3IucG9wKCk6ZCE9PXAmJnIucHVzaChwKSxjLnNwbGljZSh1LDEpLG19KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoJiYoZT1lLnJlcGxhY2UoUWNlLChpLHIsbyxhLHMsbCk9PnQuaGFzT3duUHJvcGVydHkobyk/YCR7cn0ke3Rbb119JHtsfWA6aSksZT1lLnJlcGxhY2UoWmNlLChpLHIpPT50Lmhhc093blByb3BlcnR5KHIpP3Rbcl06aSksZT1lLnJlcGxhY2UoS2NlLChpLHIpPT57aWYodC5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG89dFtyXTtpZighby5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBpMThuIHBvc3Rwcm9jZXNzOiB1bm1hdGNoZWQgSUNVIC0gJHtpfSB3aXRoIGtleTogJHtyfWApO3JldHVybiBvLnNoaWZ0KCl9cmV0dXJuIGl9KSksZX0obix0KX1mdW5jdGlvbiBFayhuLHQsZSxpLHIpe2lmKG49a2kobiksQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKylFayhuW29dLHQsZSxpLHIpO2Vsc2V7bGV0IG89RWkoKSxhPUtlKCkscz1vaChuKT9uOmtpKG4ucHJvdmlkZSksbD1YeihuKSxjPVBvKCksZD0xMDQ4NTc1JmMucHJvdmlkZXJJbmRleGVzLHU9Yy5kaXJlY3RpdmVTdGFydCxwPWMucHJvdmlkZXJJbmRleGVzPj4yMDtpZihvaChuKXx8IW4ubXVsdGkpe2xldCBmPW5ldyBHcChsLHIsQyksbT1BUihzLHQscj9kOmQrcCx1KTstMT09PW0/KHFSKGZNKGMsYSksbyxzKSxJUihvLG4sdC5sZW5ndGgpLHQucHVzaChzKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaChmKSxhLnB1c2goZikpOihlW21dPWYsYVttXT1mKX1lbHNle2xldCBmPUFSKHMsdCxkK3AsdSksbT1BUihzLHQsZCxkK3ApLE09bT49MCYmZVttXTtpZihyJiYhTXx8IXImJiEoZj49MCYmZVtmXSkpe3FSKGZNKGMsYSksbyxzKTtsZXQgdj1mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPW5ldyBHcChuLGUsQyk7cmV0dXJuIG8ubXVsdGk9W10sby5pbmRleD10LG8uY29tcG9uZW50UHJvdmlkZXJzPTAsQ2oobyxyLGkmJiFlKSxvfShyP3JkZTppZGUsZS5sZW5ndGgscixpLGwpOyFyJiZNJiYoZVttXS5wcm92aWRlckZhY3Rvcnk9diksSVIobyxuLHQubGVuZ3RoLDApLHQucHVzaChzKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaCh2KSxhLnB1c2godil9ZWxzZSBJUihvLG4sZj4tMT9mOm0sQ2ooZVtyP206Zl0sbCwhciYmaSkpOyFyJiZpJiZNJiZlW21dLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gSVIobix0LGUsaSl7bGV0IHI9b2godCksbz1mdW5jdGlvbihuKXtyZXR1cm4hIW4udXNlQ2xhc3N9KHQpO2lmKHJ8fG8pe2xldCBsPShvP2tpKHQudXNlQ2xhc3MpOnQpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihsKXtsZXQgYz1uLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKTtpZighciYmdC5tdWx0aSl7bGV0IGQ9Yy5pbmRleE9mKGUpOy0xPT09ZD9jLnB1c2goZSxbaSxsXSk6Y1tkKzFdLnB1c2goaSxsKX1lbHNlIGMucHVzaChlLGwpfX19ZnVuY3Rpb24gQ2oobix0LGUpe3JldHVybiBlJiZuLmNvbXBvbmVudFByb3ZpZGVycysrLG4ubXVsdGkucHVzaCh0KS0xfWZ1bmN0aW9uIEFSKG4sdCxlLGkpe2ZvcihsZXQgcj1lO3I8aTtyKyspaWYodFtyXT09PW4pcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gaWRlKG4sdCxlLGkpe3JldHVybiBUayh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiByZGUobix0LGUsaSl7bGV0IG8scj10aGlzLm11bHRpO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtsZXQgYT10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMscz1XcChlLGVbQm5dLHRoaXMucHJvdmlkZXJGYWN0b3J5LmluZGV4LGkpO289cy5zbGljZSgwLGEpLFRrKHIsbyk7Zm9yKGxldCBsPWE7bDxzLmxlbmd0aDtsKyspby5wdXNoKHNbbF0pfWVsc2Ugbz1bXSxUayhyLG8pO3JldHVybiBvfWZ1bmN0aW9uIFRrKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdC5wdXNoKCgwLG5bZV0pKCkpO3JldHVybiB0fWZ1bmN0aW9uIFJ0KG4sdD1bXSl7cmV0dXJuIGU9PntlLnByb3ZpZGVyc1Jlc29sdmVyPShpLHIpPT5mdW5jdGlvbihuLHQsZSl7bGV0IGk9RWkoKTtpZihpLmZpcnN0Q3JlYXRlUGFzcyl7bGV0IHI9bWwobik7RWsoZSxpLmRhdGEsaS5ibHVlcHJpbnQsciwhMCksRWsodCxpLmRhdGEsaS5ibHVlcHJpbnQsciwhMSl9fShpLHI/cihuKTpuLHQpfX12YXIgYXU9Y2xhc3N7fSxEaz1jbGFzc3t9LElrPWNsYXNzIGV4dGVuZHMgYXV7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10sdGhpcy5kZXN0cm95Q2JzPVtdLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBiTSh0aGlzKTtsZXQgaT1uaCh0KTt0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPSRDKGkuYm9vdHN0cmFwKSx0aGlzLl9yM0luamVjdG9yPXRVKHQsZSxbe3Byb3ZpZGU6YXUsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6UXIsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxobyh0KSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpLHRoaXMuX3IzSW5qZWN0b3IucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCksdGhpcy5pbnN0YW5jZT10aGlzLl9yM0luamVjdG9yLmdldCh0KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5fcjNJbmplY3Rvcn1kZXN0cm95KCl7bGV0IHQ9dGhpcy5fcjNJbmplY3RvcjshdC5kZXN0cm95ZWQmJnQuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGU9PmUoKSksdGhpcy5kZXN0cm95Q2JzPW51bGx9b25EZXN0cm95KHQpe3RoaXMuZGVzdHJveUNicy5wdXNoKHQpfX0sQWs9Y2xhc3MgZXh0ZW5kcyBEa3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT10fWNyZWF0ZSh0KXtyZXR1cm4gbmV3IElrKHRoaXMubW9kdWxlVHlwZSx0KX19LFJrPWNsYXNzIGV4dGVuZHMgYXV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGJNKHRoaXMpLHRoaXMuaW5zdGFuY2U9bnVsbDtsZXQgcj1uZXcgZ00oWy4uLnQse3Byb3ZpZGU6YXUsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6UXIsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxlfHx4UCgpLGksbmV3IFNldChbImVudmlyb25tZW50Il0pKTt0aGlzLmluamVjdG9yPXIsci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKX1kZXN0cm95KCl7dGhpcy5pbmplY3Rvci5kZXN0cm95KCl9b25EZXN0cm95KHQpe3RoaXMuaW5qZWN0b3Iub25EZXN0cm95KHQpfX0sc2RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5faW5qZWN0b3I9ZSx0aGlzLmNhY2hlZEluamVjdG9ycz1uZXcgTWFwfWdldE9yQ3JlYXRlU3RhbmRhbG9uZUluamVjdG9yKGUpe2lmKCFlLnN0YW5kYWxvbmUpcmV0dXJuIG51bGw7aWYoIXRoaXMuY2FjaGVkSW5qZWN0b3JzLmhhcyhlLmlkKSl7bGV0IGk9V3ooMCxlLnR5cGUpLHI9aS5sZW5ndGg+MD9mdW5jdGlvbihuLHQsZT1udWxsKXtyZXR1cm4gbmV3IFJrKG4sdCxlKS5pbmplY3Rvcn0oW2ldLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7ZS50eXBlLm5hbWV9XWApOm51bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGUuaWQscil9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChlLmlkKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IobGV0IGUgb2YgdGhpcy5jYWNoZWRJbmplY3RvcnMudmFsdWVzKCkpbnVsbCE9PWUmJmUuZGVzdHJveSgpfWZpbmFsbHl7dGhpcy5jYWNoZWRJbmplY3RvcnMuY2xlYXIoKX19fXJldHVybiBuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4scHJvdmlkZWRJbjoiZW52aXJvbm1lbnQiLGZhY3Rvcnk6KCk9Pm5ldyBuKE8obGMpKX0pLG59KSgpO2Z1bmN0aW9uIEZQKG4pe24uZ2V0U3RhbmRhbG9uZUluamVjdG9yPXQ9PnQuZ2V0KHNkZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3Iobil9ZnVuY3Rpb24gdXUobix0LGUpe2xldCBpPWRhKCkrbixyPUtlKCk7cmV0dXJuIHJbaV09PT1Hbj9mYyhyLGksZT90LmNhbGwoZSk6dCgpKTp3eShyLGkpfWZ1bmN0aW9uIFNuKG4sdCxlLGkpe3JldHVybiBNaihLZSgpLGRhKCksbix0LGUsaSl9ZnVuY3Rpb24gUHIobix0LGUsaSxyKXtyZXR1cm4gd2ooS2UoKSxkYSgpLG4sdCxlLGkscil9ZnVuY3Rpb24gVHkobix0LGUsaSxyLG8pe3JldHVybiBTaihLZSgpLGRhKCksbix0LGUsaSxyLG8pfWZ1bmN0aW9uIExQKG4sdCxlLGkscixvLGEpe3JldHVybiBFaihLZSgpLGRhKCksbix0LGUsaSxyLG8sYSl9ZnVuY3Rpb24gTlAobix0LGUsaSxyLG8sYSxzKXtsZXQgbD1kYSgpK24sYz1LZSgpLGQ9RHMoYyxsLGUsaSxyLG8pO3JldHVybiBqbyhjLGwrNCxhKXx8ZD9mYyhjLGwrNSxzP3QuY2FsbChzLGUsaSxyLG8sYSk6dChlLGkscixvLGEpKTp3eShjLGwrNSl9ZnVuY3Rpb24gRHkobix0KXtsZXQgZT1uW3RdO3JldHVybiBlPT09R24/dm9pZCAwOmV9ZnVuY3Rpb24gTWoobix0LGUsaSxyLG8pe2xldCBhPXQrZTtyZXR1cm4gam8obixhLHIpP2ZjKG4sYSsxLG8/aS5jYWxsKG8scik6aShyKSk6RHkobixhKzEpfWZ1bmN0aW9uIHdqKG4sdCxlLGkscixvLGEpe2xldCBzPXQrZTtyZXR1cm4gWHAobixzLHIsbyk/ZmMobixzKzIsYT9pLmNhbGwoYSxyLG8pOmkocixvKSk6RHkobixzKzIpfWZ1bmN0aW9uIFNqKG4sdCxlLGkscixvLGEscyl7bGV0IGw9dCtlO3JldHVybiBXTShuLGwscixvLGEpP2ZjKG4sbCszLHM/aS5jYWxsKHMscixvLGEpOmkocixvLGEpKTpEeShuLGwrMyl9ZnVuY3Rpb24gRWoobix0LGUsaSxyLG8sYSxzLGwpe2xldCBjPXQrZTtyZXR1cm4gRHMobixjLHIsbyxhLHMpP2ZjKG4sYys0LGw/aS5jYWxsKGwscixvLGEscyk6aShyLG8sYSxzKSk6RHkobixjKzQpfWZ1bmN0aW9uIFRqKG4sdCxlLGkscixvKXtsZXQgYT10K2Uscz0hMTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylqbyhuLGErKyxyW2xdKSYmKHM9ITApO3JldHVybiBzP2ZjKG4sYSxpLmFwcGx5KG8scikpOkR5KG4sYSl9ZnVuY3Rpb24gRyhuLHQpe2xldCBpLGU9RWkoKSxyPW4rWHI7ZS5maXJzdENyZWF0ZVBhc3M/KGk9ZnVuY3Rpb24obix0KXtpZih0KWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgaT10W2VdO2lmKG49PT1pLm5hbWUpcmV0dXJuIGl9fSh0LGUucGlwZVJlZ2lzdHJ5KSxlLmRhdGFbcl09aSxpLm9uRGVzdHJveSYmKGUuZGVzdHJveUhvb2tzPz8oZS5kZXN0cm95SG9va3M9W10pKS5wdXNoKHIsaS5vbkRlc3Ryb3kpKTppPWUuZGF0YVtyXTtsZXQgbz1pLmZhY3Rvcnl8fChpLmZhY3Rvcnk9VXAoaS50eXBlKSksYT1DcyhDKTt0cnl7bGV0IHM9cE0oITEpLGw9bygpO3JldHVybiBwTShzKSxmdW5jdGlvbihuLHQsZSxpKXtlPj1uLmRhdGEubGVuZ3RoJiYobi5kYXRhW2VdPW51bGwsbi5ibHVlcHJpbnRbZV09bnVsbCksdFtlXT1pfShlLEtlKCkscixsKSxsfWZpbmFsbHl7Q3MoYSl9fWZ1bmN0aW9uIFcobix0LGUpe2xldCBpPW4rWHIscj1LZSgpLG89dWgocixpKTtyZXR1cm4gSXkocixpKT9NaihyLGRhKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtKGUpfWZ1bmN0aW9uIEpwKG4sdCxlLGkpe2xldCByPW4rWHIsbz1LZSgpLGE9dWgobyxyKTtyZXR1cm4gSXkobyxyKT93aihvLGRhKCksdCxhLnRyYW5zZm9ybSxlLGksYSk6YS50cmFuc2Zvcm0oZSxpKX1mdW5jdGlvbiBCUChuLHQsZSxpLHIpe2xldCBvPW4rWHIsYT1LZSgpLHM9dWgoYSxvKTtyZXR1cm4gSXkoYSxvKT9TaihhLGRhKCksdCxzLnRyYW5zZm9ybSxlLGkscixzKTpzLnRyYW5zZm9ybShlLGkscil9ZnVuY3Rpb24gSXkobix0KXtyZXR1cm4gbltCbl0uZGF0YVt0XS5wdXJlfWZ1bmN0aW9uIFJSKG4pe3JldHVybiB0PT57c2V0VGltZW91dChuLHZvaWQgMCx0KX19dmFyIEw9Y2xhc3MgZXh0ZW5kcyBBZXtjb25zdHJ1Y3Rvcih0PSExKXtzdXBlcigpLHRoaXMuX19pc0FzeW5jPXR9ZW1pdCh0KXtzdXBlci5uZXh0KHQpfXN1YnNjcmliZSh0LGUsaSl7bGV0IHI9dCxvPWV8fCgoKT0+bnVsbCksYT1pO2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCl7bGV0IGw9dDtyPWwubmV4dD8uYmluZChsKSxvPWwuZXJyb3I/LmJpbmQobCksYT1sLmNvbXBsZXRlPy5iaW5kKGwpfXRoaXMuX19pc0FzeW5jJiYobz1SUihvKSxyJiYocj1SUihyKSksYSYmKGE9UlIoYSkpKTtsZXQgcz1zdXBlci5zdWJzY3JpYmUoe25leHQ6cixlcnJvcjpvLGNvbXBsZXRlOmF9KTtyZXR1cm4gdCBpbnN0YW5jZW9mIHluJiZ0LmFkZChzKSxzfX07ZnVuY3Rpb24gaGRlKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbU3ltYm9sLml0ZXJhdG9yXSgpfXZhciBJcz1jbGFzc3tnZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzfHwodGhpcy5fY2hhbmdlcz1uZXcgTCl9Y29uc3RydWN0b3IodD0hMSl7dGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk9dCx0aGlzLmRpcnR5PSEwLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5fY2hhbmdlc0RldGVjdGVkPSExLHRoaXMuX2NoYW5nZXM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuZmlyc3Q9dm9pZCAwLHRoaXMubGFzdD12b2lkIDA7bGV0IGU9SXMucHJvdG90eXBlO2VbU3ltYm9sLml0ZXJhdG9yXXx8KGVbU3ltYm9sLml0ZXJhdG9yXT1oZGUpfWdldCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0XX1tYXAodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfWZpbHRlcih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9ZmluZCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfXJlZHVjZSh0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfWZvckVhY2godCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfXNvbWUodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9cmVzZXQodCxlKXtsZXQgaT10aGlzO2kuZGlydHk9ITE7bGV0IHI9dHUodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24obix0LGUpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCByPW5baV0sbz10W2ldO2lmKGUmJihyPWUociksbz1lKG8pKSxvIT09cilyZXR1cm4hMX1yZXR1cm4hMH0oaS5fcmVzdWx0cyxyLGUpKSYmKGkuX3Jlc3VsdHM9cixpLmxlbmd0aD1yLmxlbmd0aCxpLmxhc3Q9clt0aGlzLmxlbmd0aC0xXSxpLmZpcnN0PXJbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3RoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX0sU2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189eWRlLG59KSgpLGdkZT1TaSxfZGU9Y2xhc3MgZXh0ZW5kcyBnZGV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1pfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUpe2xldCBpPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50VmlldyxyPVVNKHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsaSx0LDE2LG51bGwsaS5kZWNsVE5vZGUsbnVsbCxudWxsLG51bGwsbnVsbCxlfHxudWxsKTtyW2d5XT10aGlzLl9kZWNsYXJhdGlvbkxWaWV3W3RoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5pbmRleF07bGV0IGE9dGhpcy5fZGVjbGFyYXRpb25MVmlld1tvY107cmV0dXJuIG51bGwhPT1hJiYocltvY109YS5jcmVhdGVFbWJlZGRlZFZpZXcoaSkpLE1QKGkscix0KSxuZXcgWXAocil9fTtmdW5jdGlvbiB5ZGUoKXtyZXR1cm4gSk0oUG8oKSxLZSgpKX1mdW5jdGlvbiBKTShuLHQpe3JldHVybiA0Jm4udHlwZT9uZXcgX2RlKHQsbixnaChuLHQpKTpudWxsfXZhciBabj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz1iZGUsbn0pKCk7ZnVuY3Rpb24gYmRlKCl7cmV0dXJuIElqKFBvKCksS2UoKSl9dmFyIHZkZT1abixEaj1jbGFzcyBleHRlbmRzIHZkZXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPXQsdGhpcy5faG9zdFROb2RlPWUsdGhpcy5faG9zdExWaWV3PWl9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gZ2godGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyB6cCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtsZXQgdD1yUCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KTtpZihKNSh0KSl7bGV0IGU9dU0odCx0aGlzLl9ob3N0TFZpZXcpLGk9ZE0odCk7cmV0dXJuIG5ldyB6cChlW0JuXS5kYXRhW2krOF0sZSl9cmV0dXJuIG5ldyB6cChudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtsZXQgZT11NSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWUmJmVbdF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC1UYX1jcmVhdGVFbWJlZGRlZFZpZXcodCxlLGkpe2xldCByLG87Im51bWJlciI9PXR5cGVvZiBpP3I9aTpudWxsIT1pJiYocj1pLmluZGV4LG89aS5pbmplY3Rvcik7bGV0IGE9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30sbyk7cmV0dXJuIHRoaXMuaW5zZXJ0KGEsciksYX1jcmVhdGVDb21wb25lbnQodCxlLGkscixvKXtsZXQgcyxhPXQmJiFqXyh0KTtpZihhKXM9ZTtlbHNle2xldCB1PWV8fHt9O3M9dS5pbmRleCxpPXUuaW5qZWN0b3Iscj11LnByb2plY3RhYmxlTm9kZXMsbz11LmVudmlyb25tZW50SW5qZWN0b3J8fHUubmdNb2R1bGVSZWZ9bGV0IGw9YT90Om5ldyB2TSh3cyh0KSksYz1pfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFvJiZudWxsPT1sLm5nTW9kdWxlKXtsZXQgcD0oYT9jOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChsYyxudWxsKTtwJiYobz1wKX1sZXQgZD1sLmNyZWF0ZShjLHIsdm9pZCAwLG8pO3JldHVybiB0aGlzLmluc2VydChkLmhvc3RWaWV3LHMpLGR9aW5zZXJ0KHQsZSl7bGV0IGk9dC5fbFZpZXcscj1pW0JuXTtpZigkYyhpW1lyXSkpe2xldCBkPXRoaXMuaW5kZXhPZih0KTtpZigtMSE9PWQpdGhpcy5kZXRhY2goZCk7ZWxzZXtsZXQgdT1pW1lyXSxwPW5ldyBEaih1LHVbRGFdLHVbWXJdKTtwLmRldGFjaChwLmluZGV4T2YodCkpfX1sZXQgbz10aGlzLl9hZGp1c3RJbmRleChlKSxhPXRoaXMuX2xDb250YWluZXI7IWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPVRhK2ksbz1lLmxlbmd0aDtpPjAmJihlW3ItMV1bcGxdPXQpLGk8by1UYT8odFtwbF09ZVtyXSxseihlLFRhK2ksdCkpOihlLnB1c2godCksdFtwbF09bnVsbCksdFtZcl09ZTtsZXQgYT10W2d5XTtudWxsIT09YSYmZSE9PWEmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bltpaF07dFtmbF0hPT10W1lyXVtZcl1bZmxdJiYobltrNV09ITApLG51bGw9PT1lP25baWhdPVt0XTplLnB1c2godCl9KGEsdCk7bGV0IHM9dFtvY107bnVsbCE9PXMmJnMuaW5zZXJ0VmlldyhuKSx0W3NpXXw9NjR9KHIsaSxhLG8pO2xldCBzPUpSKG8sYSksbD1pW2xpXSxjPU5NKGwsYVtRa10pO3JldHVybiBudWxsIT09YyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2lbbHVdPXIsaVtEYV09dCxieShuLGksZSwxLHIsbyl9KHIsYVtEYV0sbCxpLGMscyksdC5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKSxseihrUihhKSxvLHQpLHR9bW92ZSh0LGUpe3JldHVybiB0aGlzLmluc2VydCh0LGUpfWluZGV4T2YodCl7bGV0IGU9dTUodGhpcy5fbENvbnRhaW5lcik7cmV0dXJuIG51bGwhPT1lP2UuaW5kZXhPZih0KTotMX1yZW1vdmUodCl7bGV0IGU9dGhpcy5fYWRqdXN0SW5kZXgodCwtMSksaT1aUih0aGlzLl9sQ29udGFpbmVyLGUpO2kmJihtTShrUih0aGlzLl9sQ29udGFpbmVyKSxlKSxfeihpW0JuXSxpKSl9ZGV0YWNoKHQpe2xldCBlPXRoaXMuX2FkanVzdEluZGV4KHQsLTEpLGk9WlIodGhpcy5fbENvbnRhaW5lcixlKTtyZXR1cm4gaSYmbnVsbCE9bU0oa1IodGhpcy5fbENvbnRhaW5lciksZSk/bmV3IFlwKGkpOm51bGx9X2FkanVzdEluZGV4KHQsZT0wKXtyZXR1cm4gdD8/dGhpcy5sZW5ndGgrZX19O2Z1bmN0aW9uIHU1KG4pe3JldHVybiBuW2xNXX1mdW5jdGlvbiBrUihuKXtyZXR1cm4gbltsTV18fChuW2xNXT1bXSl9ZnVuY3Rpb24gSWoobix0KXtsZXQgZSxpPXRbbi5pbmRleF07aWYoJGMoaSkpZT1pO2Vsc2V7bGV0IHI7aWYoOCZuLnR5cGUpcj1UcyhpKTtlbHNle2xldCBvPXRbbGldO3I9by5jcmVhdGVDb21tZW50KCIiKTtsZXQgYT10cyhuLHQpO3FwKG8sTk0obyxhKSxyLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4ubmV4dFNpYmxpbmcodCl9KG8sYSksITEpfXRbbi5pbmRleF09ZT1sVShpLHQscixuKSxHTSh0LGUpfXJldHVybiBuZXcgRGooZSxuLHQpfXZhciBjeT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnF1ZXJ5TGlzdD10LHRoaXMubWF0Y2hlcz1udWxsfWNsb25lKCl7cmV0dXJuIG5ldyBjeSh0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpfX0sZHk9Y2xhc3N7Y29uc3RydWN0b3IodD1bXSl7dGhpcy5xdWVyaWVzPXR9Y3JlYXRlRW1iZWRkZWRWaWV3KHQpe2xldCBlPXQucXVlcmllcztpZihudWxsIT09ZSl7bGV0IGk9bnVsbCE9PXQuY29udGVudFF1ZXJpZXM/dC5jb250ZW50UXVlcmllc1swXTplLmxlbmd0aCxyPVtdO2ZvcihsZXQgbz0wO288aTtvKyspe2xldCBhPWUuZ2V0QnlJbmRleChvKTtyLnB1c2godGhpcy5xdWVyaWVzW2EuaW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyBkeShyKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KHQpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl9ZGV0YWNoVmlldyh0KXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspbnVsbCE9PVBqKHQsZSkubWF0Y2hlcyYmdGhpcy5xdWVyaWVzW2VdLnNldERpcnR5KCl9fSx3TT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT1udWxsKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMuZmxhZ3M9ZSx0aGlzLnJlYWQ9aX19LHV5PWNsYXNze2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWVsZW1lbnRTdGFydCh0LGUpe2ZvcihsZXQgaT0wO2k8dGhpcy5xdWVyaWVzLmxlbmd0aDtpKyspdGhpcy5xdWVyaWVzW2ldLmVsZW1lbnRTdGFydCh0LGUpfWVsZW1lbnRFbmQodCl7Zm9yKGxldCBlPTA7ZTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2UrKyl0aGlzLnF1ZXJpZXNbZV0uZWxlbWVudEVuZCh0KX1lbWJlZGRlZFRWaWV3KHQpe2xldCBlPW51bGw7Zm9yKGxldCBpPTA7aTx0aGlzLmxlbmd0aDtpKyspe2xldCByPW51bGwhPT1lP2UubGVuZ3RoOjAsbz10aGlzLmdldEJ5SW5kZXgoaSkuZW1iZWRkZWRUVmlldyh0LHIpO28mJihvLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9aSxudWxsIT09ZT9lLnB1c2gobyk6ZT1bb10pfXJldHVybiBudWxsIT09ZT9uZXcgdXkoZSk6bnVsbH10ZW1wbGF0ZSh0LGUpe2ZvcihsZXQgaT0wO2k8dGhpcy5xdWVyaWVzLmxlbmd0aDtpKyspdGhpcy5xdWVyaWVzW2ldLnRlbXBsYXRlKHQsZSl9Z2V0QnlJbmRleCh0KXtyZXR1cm4gdGhpcy5xdWVyaWVzW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5xdWVyaWVzLmxlbmd0aH10cmFjayh0KXt0aGlzLnF1ZXJpZXMucHVzaCh0KX19LHB5PWNsYXNze2NvbnN0cnVjdG9yKHQsZT0tMSl7dGhpcy5tZXRhZGF0YT10LHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PWV9ZWxlbWVudFN0YXJ0KHQsZSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGUpJiZ0aGlzLm1hdGNoVE5vZGUodCxlKX1lbGVtZW50RW5kKHQpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09dC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1wbGF0ZSh0LGUpe3RoaXMuZWxlbWVudFN0YXJ0KHQsZSl9ZW1iZWRkZWRUVmlldyh0LGUpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUodCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtdC5pbmRleCxlKSxuZXcgcHkodGhpcy5tZXRhZGF0YSkpOm51bGx9aXNBcHBseWluZ1RvTm9kZSh0KXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2xldCBlPXRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4LGk9dC5wYXJlbnQ7Zm9yKDtudWxsIT09aSYmOCZpLnR5cGUmJmkuaW5kZXghPT1lOylpPWkucGFyZW50O3JldHVybiBlPT09KG51bGwhPT1pP2kuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKHQsZSl7bGV0IGk9dGhpcy5tZXRhZGF0YS5wcmVkaWNhdGU7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aVtyXTt0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUseGRlKGUsbykpLHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxaQyhlLHQsbywhMSwhMSkpfWVsc2UgaT09PVNpPzQmZS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxaQyhlLHQsaSwhMSwhMSkpfW1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsaSl7aWYobnVsbCE9PWkpe2xldCByPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09cilpZihyPT09YmV8fHI9PT1abnx8cj09PVNpJiY0JmUudHlwZSl0aGlzLmFkZE1hdGNoKGUuaW5kZXgsLTIpO2Vsc2V7bGV0IG89WkMoZSx0LHIsITEsITEpO251bGwhPT1vJiZ0aGlzLmFkZE1hdGNoKGUuaW5kZXgsbyl9ZWxzZSB0aGlzLmFkZE1hdGNoKGUuaW5kZXgsaSl9fWFkZE1hdGNoKHQsZSl7bnVsbD09PXRoaXMubWF0Y2hlcz90aGlzLm1hdGNoZXM9W3QsZV06dGhpcy5tYXRjaGVzLnB1c2godCxlKX19O2Z1bmN0aW9uIHhkZShuLHQpe2xldCBlPW4ubG9jYWxOYW1lcztpZihudWxsIT09ZSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpaWYoZVtpXT09PXQpcmV0dXJuIGVbaSsxXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBNZGUobix0LGUsaSl7cmV0dXJuLTE9PT1lP2Z1bmN0aW9uKG4sdCl7cmV0dXJuIDExJm4udHlwZT9naChuLHQpOjQmbi50eXBlP0pNKG4sdCk6bnVsbH0odCxuKTotMj09PWU/ZnVuY3Rpb24obix0LGUpe3JldHVybiBlPT09YmU/Z2godCxuKTplPT09U2k/Sk0odCxuKTplPT09Wm4/SWoodCxuKTp2b2lkIDB9KG4sdCxpKTpXcChuLG5bQm5dLGUsdCl9ZnVuY3Rpb24gQWoobix0LGUsaSl7bGV0IHI9dFtvY10ucXVlcmllc1tpXTtpZihudWxsPT09ci5tYXRjaGVzKXtsZXQgbz1uLmRhdGEsYT1lLm1hdGNoZXMscz1bXTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTIpe2xldCBjPWFbbF07cy5wdXNoKGM8MD9udWxsOk1kZSh0LG9bY10sYVtsKzFdLGUubWV0YWRhdGEucmVhZCkpfXIubWF0Y2hlcz1zfXJldHVybiByLm1hdGNoZXN9ZnVuY3Rpb24gUGsobix0LGUsaSl7bGV0IHI9bi5xdWVyaWVzLmdldEJ5SW5kZXgoZSksbz1yLm1hdGNoZXM7aWYobnVsbCE9PW8pe2xldCBhPUFqKG4sdCxyLGUpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7cys9Mil7bGV0IGw9b1tzXTtpZihsPjApaS5wdXNoKGFbcy8yXSk7ZWxzZXtsZXQgYz1vW3MrMV0sZD10Wy1sXTtmb3IobGV0IHU9VGE7dTxkLmxlbmd0aDt1Kyspe2xldCBwPWRbdV07cFtneV09PT1wW1lyXSYmUGsocFtCbl0scCxjLGkpfWlmKG51bGwhPT1kW2loXSl7bGV0IHU9ZFtpaF07Zm9yKGxldCBwPTA7cDx1Lmxlbmd0aDtwKyspe2xldCBmPXVbcF07UGsoZltCbl0sZixjLGkpfX19fX1yZXR1cm4gaX1mdW5jdGlvbiB3ZShuKXtsZXQgdD1LZSgpLGU9RWkoKSxpPUc1KCk7dFAoaSsxKTtsZXQgcj1QaihlLGkpO2lmKG4uZGlydHkmJmZ1bmN0aW9uKG4pe3JldHVybiA0PT0oNCZuW3NpXSl9KHQpPT09KDI9PSgyJnIubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PXIubWF0Y2hlcyluLnJlc2V0KFtdKTtlbHNle2xldCBvPXIuY3Jvc3Nlc05nVGVtcGxhdGU/UGsoZSx0LGksW10pOkFqKGUsdCxyLGkpO24ucmVzZXQobyxpc2UpLG4ubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gWWUobix0LGUpe2xldCBpPUVpKCk7aS5maXJzdENyZWF0ZVBhc3MmJihraihpLG5ldyB3TShuLHQsZSksLTEpLDI9PSgyJnQpJiYoaS5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLFJqKGksS2UoKSx0KX1mdW5jdGlvbiBjaShuLHQsZSxpKXtsZXQgcj1FaSgpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtsZXQgbz1QbygpO2tqKHIsbmV3IHdNKHQsZSxpKSxvLmluZGV4KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXN8fChuLmNvbnRlbnRRdWVyaWVzPVtdKTt0IT09KGUubGVuZ3RoP2VbZS5sZW5ndGgtMV06LTEpJiZlLnB1c2gobi5xdWVyaWVzLmxlbmd0aC0xLHQpfShyLG4pLDI9PSgyJmUpJiYoci5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9UmoocixLZSgpLGUpfWZ1bmN0aW9uIFNlKCl7cmV0dXJuIG49S2UoKSx0PUc1KCksbltvY10ucXVlcmllc1t0XS5xdWVyeUxpc3Q7dmFyIG4sdH1mdW5jdGlvbiBSaihuLHQsZSl7bGV0IGk9bmV3IElzKDQ9PSg0JmUpKTtvVShuLHQsaSxpLmRlc3Ryb3kpLG51bGw9PT10W29jXSYmKHRbb2NdPW5ldyBkeSksdFtvY10ucXVlcmllcy5wdXNoKG5ldyBjeShpKSl9ZnVuY3Rpb24ga2oobix0LGUpe251bGw9PT1uLnF1ZXJpZXMmJihuLnF1ZXJpZXM9bmV3IHV5KSxuLnF1ZXJpZXMudHJhY2sobmV3IHB5KHQsZSkpfWZ1bmN0aW9uIFBqKG4sdCl7cmV0dXJuIG4ucXVlcmllcy5nZXRCeUluZGV4KHQpfWZ1bmN0aW9uIFp0KG4sdCl7cmV0dXJuIEpNKG4sdCl9dmFyIG51PXsiXHUwMjc1XHUwMjc1YXR0cmlidXRlIjpQZSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiBfVShuLHQsZSxpLHIsbyl7bGV0IGE9S2UoKSxzPWJoKGEsdCxlLGkpO3JldHVybiBzIT09R24mJnBjKGtyKCksYSxuLHMscixvKSxfVX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24geVUobix0LGUsaSxyLG8sYSxzKXtsZXQgbD1LZSgpLGM9dmgobCx0LGUsaSxyLG8pO3JldHVybiBjIT09R24mJnBjKGtyKCksbCxuLGMsYSxzKSx5VX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyI6ZnVuY3Rpb24gYlUobix0LGUsaSxyLG8sYSxzLGwsYyl7bGV0IGQ9S2UoKSx1PXhoKGQsdCxlLGkscixvLGEscyk7cmV0dXJuIHUhPT1HbiYmcGMoa3IoKSxkLG4sdSxsLGMpLGJVfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiB2VShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSl7bGV0IHA9S2UoKSxmPUNoKHAsdCxlLGkscixvLGEscyxsLGMpO3JldHVybiBmIT09R24mJnBjKGtyKCkscCxuLGYsZCx1KSx2VX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24geFUobix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxmKXtsZXQgbT1LZSgpLHk9TWgobSx0LGUsaSxyLG8sYSxzLGwsYyxkLHUpO3JldHVybiB5IT09R24mJnBjKGtyKCksbSxuLHkscCxmKSx4VX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiI6ZnVuY3Rpb24gQ1Uobix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxmLG0seSl7bGV0IE09S2UoKSx2PXdoKE0sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZik7cmV0dXJuIHYhPT1HbiYmcGMoa3IoKSxNLG4sdixtLHkpLENVfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBNVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5LE0sdil7bGV0IHg9S2UoKSxSPVNoKHgsdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZixtLHkpO3JldHVybiBSIT09R24mJnBjKGtyKCkseCxuLFIsTSx2KSxNVX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gd1Uobix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxmLG0seSxNLHYseCxSKXtsZXQgQT1LZSgpLEg9RWgoQSx0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxmLG0seSxNLHYpO3JldHVybiBIIT09R24mJnBjKGtyKCksQSxuLEgseCxSKSx3VX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViI6ZnVuY3Rpb24gU1Uobix0LGUsaSl7bGV0IHI9S2UoKSxvPXloKHIsdCk7cmV0dXJuIG8hPT1HbiYmcGMoa3IoKSxyLG4sbyxlLGkpLFNVfSwiXHUwMjc1XHUwMjc1ZGVmaW5lQ29tcG9uZW50IjprLCJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiOnhlLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjpwZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOkIsIlx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIjpWLCJcdTAyNzVcdTAyNzVkZWZpbmVQaXBlIjpjaCwiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0IjpDLCJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5IjpDbiwiXHUwMjc1XHUwMjc1aW5qZWN0IjpPLCJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiOlZyLCJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSI6X2wsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpFNSwiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiOlp0LCJcdTAyNzVcdTAyNzVyZXNldFZpZXciOlEsIlx1MDI3NVx1MDI3NUhvc3REaXJlY3RpdmVzRmVhdHVyZSI6ZnVuY3Rpb24obil7cmV0dXJuIHQ9Pnt0LmZpbmRIb3N0RGlyZWN0aXZlRGVmcz1oVSx0Lmhvc3REaXJlY3RpdmVzPShBcnJheS5pc0FycmF5KG4pP246bigpKS5tYXAoZT0+ImZ1bmN0aW9uIj09dHlwZW9mIGU/e2RpcmVjdGl2ZTpraShlKSxpbnB1dHM6WmMsb3V0cHV0czpaY306e2RpcmVjdGl2ZTpraShlLmRpcmVjdGl2ZSksaW5wdXRzOiRIKGUuaW5wdXRzKSxvdXRwdXRzOiRIKGUub3V0cHV0cyl9KX19LCJcdTAyNzVcdTAyNzVOZ09uQ2hhbmdlc0ZlYXR1cmUiOkd0LCJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIjpSdCwiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbihuKXtsZXQgZSx0PW1VKG4udHlwZSk7ZT1tbChuKT90Llx1MDI3NWNtcDp0Llx1MDI3NWRpcjtsZXQgaT1uO2ZvcihsZXQgciBvZiBkbGUpaVtyXT1lW3JdO2lmKG1sKGUpKWZvcihsZXQgciBvZiB1bGUpaVtyXT1lW3JdfSwiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjpMZSwiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiOkZQLCJcdTAyNzVcdTAyNzVuZXh0Q29udGV4dCI6dywiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCI6T28sIlx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCI6ZnVuY3Rpb24oKXtYbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT1ONX0sIlx1MDI3NVx1MDI3NW5hbWVzcGFjZVNWRyI6VG4sIlx1MDI3NVx1MDI3NWVuYWJsZUJpbmRpbmdzIjpmdW5jdGlvbigpe1huLmJpbmRpbmdzRW5hYmxlZD0hMH0sIlx1MDI3NVx1MDI3NWRpc2FibGVCaW5kaW5ncyI6ZnVuY3Rpb24oKXtYbi5iaW5kaW5nc0VuYWJsZWQ9ITF9LCJcdTAyNzVcdTAyNzVlbGVtZW50U3RhcnQiOmgsIlx1MDI3NVx1MDI3NWVsZW1lbnRFbmQiOmcsIlx1MDI3NVx1MDI3NWVsZW1lbnQiOlAsIlx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJTdGFydCI6VHQsIlx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJFbmQiOkR0LCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyIjpUaSwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMCI6dXUsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjEiOlNuLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24yIjpQciwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMyI6VHksIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjQiOkxQLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb241IjpOUCwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8sYSxzLGwpe2xldCBjPWRhKCkrbixkPUtlKCksdT1EcyhkLGMsZSxpLHIsbyk7cmV0dXJuIFhwKGQsYys0LGEscyl8fHU/ZmMoZCxjKzYsbD90LmNhbGwobCxlLGkscixvLGEscyk6dChlLGkscixvLGEscykpOnd5KGQsYys2KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjciOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsLGMpe2xldCBkPWRhKCkrbix1PUtlKCkscD1Ecyh1LGQsZSxpLHIsbyk7cmV0dXJuIFdNKHUsZCs0LGEscyxsKXx8cD9mYyh1LGQrNyxjP3QuY2FsbChjLGUsaSxyLG8sYSxzLGwpOnQoZSxpLHIsbyxhLHMsbCkpOnd5KHUsZCs3KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjgiOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsLGMsZCl7bGV0IHU9ZGEoKStuLHA9S2UoKSxmPURzKHAsdSxlLGkscixvKTtyZXR1cm4gRHMocCx1KzQsYSxzLGwsYyl8fGY/ZmMocCx1KzgsZD90LmNhbGwoZCxlLGkscixvLGEscyxsLGMpOnQoZSxpLHIsbyxhLHMsbCxjKSk6d3kocCx1KzgpfSwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uViI6ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIFRqKEtlKCksZGEoKSxuLHQsZSxpKX0sIlx1MDI3NVx1MDI3NWdldEN1cnJlbnRWaWV3IjpnZSwiXHUwMjc1XHUwMjc1cmVzdG9yZVZpZXciOlgsIlx1MDI3NVx1MDI3NWxpc3RlbmVyIjpELCJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uIjpYdCwiXHUwMjc1XHUwMjc1c3ludGhldGljSG9zdFByb3BlcnR5IjpLcCwiXHUwMjc1XHUwMjc1c3ludGhldGljSG9zdExpc3RlbmVyIjpacCwiXHUwMjc1XHUwMjc1cGlwZUJpbmQxIjpXLCJcdTAyNzVcdTAyNzVwaXBlQmluZDIiOkpwLCJcdTAyNzVcdTAyNzVwaXBlQmluZDMiOkJQLCJcdTAyNzVcdTAyNzVwaXBlQmluZDQiOmZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgYT1uK1hyLHM9S2UoKSxsPXVoKHMsYSk7cmV0dXJuIEl5KHMsYSk/RWoocyxkYSgpLHQsbC50cmFuc2Zvcm0sZSxpLHIsbyxsKTpsLnRyYW5zZm9ybShlLGkscixvKX0sIlx1MDI3NVx1MDI3NXBpcGVCaW5kViI6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4rWHIscj1LZSgpLG89dWgocixpKTtyZXR1cm4gSXkocixpKT9UaihyLGRhKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtLmFwcGx5KG8sZSl9LCJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uRGVmIjpnbiwiXHUwMjc1XHUwMjc1aG9zdFByb3BlcnR5IjpDbywiXHUwMjc1XHUwMjc1cHJvcGVydHkiOl8sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUiOkppLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMSI6U3ksIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUyIjpxTSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uIFRVKG4sdCxlLGkscixvLGEscyxsKXtsZXQgYz1LZSgpLGQ9eGgoYyx0LGUsaSxyLG8sYSxzKTtyZXR1cm4gZCE9PUduJiZpcyhFaSgpLGtyKCksYyxuLGQsY1tsaV0sbCwhMSksVFV9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNCI6ZnVuY3Rpb24gRFUobix0LGUsaSxyLG8sYSxzLGwsYyxkKXtsZXQgdT1LZSgpLHA9Q2godSx0LGUsaSxyLG8sYSxzLGwsYyk7cmV0dXJuIHAhPT1HbiYmaXMoRWkoKSxrcigpLHUsbixwLHVbbGldLGQsITEpLERVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIElVKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHApe2xldCBmPUtlKCksbT1NaChmLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSk7cmV0dXJuIG0hPT1HbiYmaXMoRWkoKSxrcigpLGYsbixtLGZbbGldLHAsITEpLElVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIEFVKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZixtKXtsZXQgeT1LZSgpLE09d2goeSx0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxmKTtyZXR1cm4gTSE9PUduJiZpcyhFaSgpLGtyKCkseSxuLE0seVtsaV0sbSwhMSksQVV9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNyI6ZnVuY3Rpb24gUlUobix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxmLG0seSxNKXtsZXQgdj1LZSgpLHg9U2godix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxmLG0seSk7cmV0dXJuIHghPT1HbiYmaXMoRWkoKSxrcigpLHYsbix4LHZbbGldLE0sITEpLFJVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIGtVKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZixtLHksTSx2LHgpe2xldCBSPUtlKCksQT1FaChSLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5LE0sdik7cmV0dXJuIEEhPT1HbiYmaXMoRWkoKSxrcigpLFIsbixBLFJbbGldLHgsITEpLGtVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIFBVKG4sdCxlKXtsZXQgaT1LZSgpLHI9eWgoaSx0KTtyZXR1cm4gciE9PUduJiZpcyhFaSgpLGtyKCksaSxuLHIsaVtsaV0sZSwhMSksUFV9LCJcdTAyNzVcdTAyNzVwaXBlIjpHLCJcdTAyNzVcdTAyNzVxdWVyeVJlZnJlc2giOndlLCJcdTAyNzVcdTAyNzV2aWV3UXVlcnkiOlllLCJcdTAyNzVcdTAyNzVsb2FkUXVlcnkiOlNlLCJcdTAyNzVcdTAyNzVjb250ZW50UXVlcnkiOmNpLCJcdTAyNzVcdTAyNzVyZWZlcmVuY2UiOnR0LCJcdTAyNzVcdTAyNzVjbGFzc01hcCI6a2EsIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUxIjpEaCwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uKG4sdCxlLGkscil7YmwobnMsbWMsdmgoS2UoKSxuLHQsZSxpLHIpLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUzIjpmdW5jdGlvbihuLHQsZSxpLHIsbyxhKXtibChucyxtYyx4aChLZSgpLG4sdCxlLGkscixvLGEpLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU0IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMsbCl7YmwobnMsbWMsQ2goS2UoKSxuLHQsZSxpLHIsbyxhLHMsbCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsLGMsZCl7YmwobnMsbWMsTWgoS2UoKSxuLHQsZSxpLHIsbyxhLHMsbCxjLGQpLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU2IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwKXtibChucyxtYyx3aChLZSgpLG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHApLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU3IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSl7YmwobnMsbWMsU2goS2UoKSxuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZixtLHksTSl7YmwobnMsbWMsRWgoS2UoKSxuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5LE0pLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGVWIjpmdW5jdGlvbihuKXtibChucyxtYyx5aChLZSgpLG4pLCEwKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwIjpScywiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uKG4sdCxlKXtScyhiaChLZSgpLG4sdCxlKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24obix0LGUsaSxyKXtScyh2aChLZSgpLG4sdCxlLGkscikpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEpe1JzKHhoKEtlKCksbix0LGUsaSxyLG8sYSkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsKXtScyhDaChLZSgpLG4sdCxlLGkscixvLGEscyxsKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24obix0LGUsaSxyLG8sYSxzLGwsYyxkKXtScyhNaChLZSgpLG4sdCxlLGkscixvLGEscyxsLGMsZCkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHApe1JzKHdoKEtlKCksbix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZixtKXtScyhTaChLZSgpLG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZixtKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24obix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxmLG0seSxNKXtScyhFaChLZSgpLG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZixtLHksTSkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uKG4pe1JzKHloKEtlKCksbikpfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wIjpNdCwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiBRVShuLHQsZSxpLHIpe3JldHVybiB5bChuLGJoKEtlKCksdCxlLGkpLHIsITEpLFFVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGUyIjpmdW5jdGlvbiBaVShuLHQsZSxpLHIsbyxhKXtyZXR1cm4geWwobix2aChLZSgpLHQsZSxpLHIsbyksYSwhMSksWlV9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uIEtVKG4sdCxlLGkscixvLGEscyxsKXtyZXR1cm4geWwobix4aChLZSgpLHQsZSxpLHIsbyxhLHMpLGwsITEpLEtVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBKVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQpe3JldHVybiB5bChuLENoKEtlKCksdCxlLGkscixvLGEscyxsLGMpLGQsITEpLEpVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU1IjpmdW5jdGlvbiAkVShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwKXtyZXR1cm4geWwobixNaChLZSgpLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSkscCwhMSksJFV9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIGVqKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZixtKXtyZXR1cm4geWwobix3aChLZSgpLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYpLG0sITEpLGVqfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiB0aihuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5LE0pe3JldHVybiB5bChuLFNoKEtlKCksdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZixtLHkpLE0sITEpLHRqfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU4IjpmdW5jdGlvbiBuaihuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5LE0sdix4KXtyZXR1cm4geWwobixFaChLZSgpLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5LE0sdikseCwhMSksbmp9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIGlqKG4sdCxlKXtyZXR1cm4geWwobix5aChLZSgpLHQpLGUsITEpLGlqfSwiXHUwMjc1XHUwMjc1Y2xhc3NQcm9wIjpRZSwiXHUwMjc1XHUwMjc1YWR2YW5jZSI6YiwiXHUwMjc1XHUwMjc1dGVtcGxhdGUiOlMsIlx1MDI3NVx1MDI3NXRleHQiOlQsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZSI6dXQsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTEiOnplLCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUyIjpkdSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMyI6WU0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGpVKG4sdCxlLGkscixvLGEscyxsKXtsZXQgYz1LZSgpLGQ9Q2goYyxuLHQsZSxpLHIsbyxhLHMsbCk7cmV0dXJuIGQhPT1HbiYmb2QoYyx1YSgpLGQpLGpVfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNSI6ZnVuY3Rpb24gR1Uobix0LGUsaSxyLG8sYSxzLGwsYyxkKXtsZXQgdT1LZSgpLHA9TWgodSxuLHQsZSxpLHIsbyxhLHMsbCxjLGQpO3JldHVybiBwIT09R24mJm9kKHUsdWEoKSxwKSxHVX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIFdVKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHApe2xldCBmPUtlKCksbT13aChmLG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHApO3JldHVybiBtIT09R24mJm9kKGYsdWEoKSxtKSxXVX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHFVKG4sdCxlLGkscixvLGEscyxsLGMsZCx1LHAsZixtKXtsZXQgeT1LZSgpLE09U2goeSxuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSk7cmV0dXJuIE0hPT1HbiYmb2QoeSx1YSgpLE0pLHFVfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlOCI6ZnVuY3Rpb24gWVUobix0LGUsaSxyLG8sYSxzLGwsYyxkLHUscCxmLG0seSxNKXtsZXQgdj1LZSgpLHg9RWgodixuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5LE0pO3JldHVybiB4IT09R24mJm9kKHYsdWEoKSx4KSxZVX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIFhVKG4pe2xldCB0PUtlKCksZT15aCh0LG4pO3JldHVybiBlIT09R24mJm9kKHQsdWEoKSxlKSxYVX0sIlx1MDI3NVx1MDI3NWkxOG4iOlFNLCJcdTAyNzVcdTAyNzVpMThuQXR0cmlidXRlcyI6ZnVuY3Rpb24obix0KXtsZXQgZT1FaSgpLGk9b3UoZS5jb25zdHMsdCk7IWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1QbygpLmluZGV4LG89W107aWYobi5maXJzdENyZWF0ZVBhc3MmJm51bGw9PT1uLmRhdGFbdF0pe2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSs9Mil7bGV0IHM9ZVthXSxsPWVbYSsxXTtpZigiIiE9PWwpe2lmKEljZS50ZXN0KGwpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2x9Ii5gKTskXyhvLGwscixzLEJjZShvKSxudWxsKX19bi5kYXRhW3RdPW99fShlLG4rWHIsaSl9LCJcdTAyNzVcdTAyNzVpMThuRXhwIjpFeSwiXHUwMjc1XHUwMjc1aTE4blN0YXJ0Ijp2aiwiXHUwMjc1XHUwMjc1aTE4bkVuZCI6eGosIlx1MDI3NVx1MDI3NWkxOG5BcHBseSI6Wk0sIlx1MDI3NVx1MDI3NWkxOG5Qb3N0cHJvY2VzcyI6S00sIlx1MDI3NVx1MDI3NXJlc29sdmVXaW5kb3ciOmZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LCJcdTAyNzVcdTAyNzVyZXNvbHZlRG9jdW1lbnQiOnVjLCJcdTAyNzVcdTAyNzVyZXNvbHZlQm9keSI6ZnVuY3Rpb24obil7cmV0dXJuIG4ub3duZXJEb2N1bWVudC5ib2R5fSwiXHUwMjc1XHUwMjc1c2V0Q29tcG9uZW50U2NvcGUiOmh5LCJcdTAyNzVcdTAyNzVzZXROZ01vZHVsZVNjb3BlIjpmdW5jdGlvbihuLHQpe3JldHVybiBzdSgoKT0+e2xldCBlPW5oKG4sITApO2UuZGVjbGFyYXRpb25zPXQuZGVjbGFyYXRpb25zfHxVaSxlLmltcG9ydHM9dC5pbXBvcnRzfHxVaSxlLmV4cG9ydHM9dC5leHBvcnRzfHxVaX0pfSwiXHUwMjc1XHUwMjc1cmVnaXN0ZXJOZ01vZHVsZVR5cGUiOnB6LCJcdTAyNzVcdTAyNzVzYW5pdGl6ZUh0bWwiOmJQLCJcdTAyNzVcdTAyNzVzYW5pdGl6ZVN0eWxlIjpmdW5jdGlvbihuKXtsZXQgdD1DeSgpO3JldHVybiB0P3Quc2FuaXRpemUocXIuU1RZTEUsbil8fCIiOmdsKG4sIlN0eWxlIik/UmEobik6WW4obil9LCJcdTAyNzVcdTAyNzVzYW5pdGl6ZVJlc291cmNlVXJsIjpVeiwiXHUwMjc1XHUwMjc1c2FuaXRpemVTY3JpcHQiOmZ1bmN0aW9uKG4pe2xldCB0PUN5KCk7aWYodClyZXR1cm4gekgodC5zYW5pdGl6ZShxci5TQ1JJUFQsbil8fCIiKTtpZihnbChuLCJTY3JpcHQiKSlyZXR1cm4gekgoUmEobikpO3Rocm93IG5ldyBidCg5MDUsITEpfSwiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmwiOkFzLCJcdTAyNzVcdTAyNzVzYW5pdGl6ZVVybE9yUmVzb3VyY2VVcmwiOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4ic3JjIj09PXQmJigiZW1iZWQiPT09bnx8ImZyYW1lIj09PW58fCJpZnJhbWUiPT09bnx8Im1lZGlhIj09PW58fCJzY3JpcHQiPT09bil8fCJocmVmIj09PXQmJigiYmFzZSI9PT1ufHwibGluayI9PT1uKT9VejpBc30odCxlKShuKX0sIlx1MDI3NVx1MDI3NXRydXN0Q29uc3RhbnRIdG1sIjpmdW5jdGlvbihuKXtyZXR1cm4gaGgoblswXSl9LCJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50UmVzb3VyY2VVcmwiOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gSXooKT8uY3JlYXRlU2NyaXB0VVJMKG4pfHxufShuWzBdKX0sIlx1MDI3NVx1MDI3NXZhbGlkYXRlSWZyYW1lQXR0cmlidXRlIjpmdW5jdGlvbihuLHQsZSl7bGV0IGk9S2UoKSxyPWtyKCksbz10cyhyLGkpO2lmKDI9PT1yLnR5cGUmJiJpZnJhbWUiPT09dC50b0xvd2VyQ2FzZSgpKXtsZXQgYT1vO3Rocm93IGEuc3JjPSIiLGEuc3JjZG9jPWhoKCIiKSxtUChpW2xpXSxhKSxuZXcgYnQoLTkxMCwhMSl9cmV0dXJuIG59LGZvcndhcmRSZWY6Vm4scmVzb2x2ZUZvcndhcmRSZWY6a2l9LEdfPW51bGw7ZnVuY3Rpb24gT2oobil7cmV0dXJuISFuaChuKX12YXIgdE09W10sUFI9ITE7ZnVuY3Rpb24gRmoobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5ldmVyeShGaik6ISFraShuKX1mdW5jdGlvbiBPZGUobix0KXtsZXQgZT10dSh0LmRlY2xhcmF0aW9uc3x8VWkpLGk9bGgobik7ZS5mb3JFYWNoKHI9Pnsocj1raShyKSkuaGFzT3duUHJvcGVydHkoQU0pP0xqKHdzKHIpLGkpOiFyLmhhc093blByb3BlcnR5KHFrKSYmIXIuaGFzT3duUHJvcGVydHkoWWspJiYoci5uZ1NlbGVjdG9yU2NvcGU9bil9KX1mdW5jdGlvbiBMaihuLHQpe24uZGlyZWN0aXZlRGVmcz0oKT0+QXJyYXkuZnJvbSh0LmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMpLm1hcChlPT5lLmhhc093blByb3BlcnR5KEFNKT93cyhlKTppdShlKSkuZmlsdGVyKGU9PiEhZSksbi5waXBlRGVmcz0oKT0+QXJyYXkuZnJvbSh0LmNvbXBpbGF0aW9uLnBpcGVzKS5tYXAoZT0+cnUoZSkpLG4uc2NoZW1hcz10LnNjaGVtYXMsbi50Vmlldz1udWxsfWZ1bmN0aW9uIGxoKG4pe2lmKE9qKG4pKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uaChuLCEwKTtpZihudWxsIT09dC50cmFuc2l0aXZlQ29tcGlsZVNjb3BlcylyZXR1cm4gdC50cmFuc2l0aXZlQ29tcGlsZVNjb3BlcztsZXQgZT17c2NoZW1hczp0LnNjaGVtYXN8fG51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXR9fTtyZXR1cm4gJEModC5pbXBvcnRzKS5mb3JFYWNoKGk9PntsZXQgcj1saChpKTtyLmV4cG9ydGVkLmRpcmVjdGl2ZXMuZm9yRWFjaChvPT5lLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKG8pKSxyLmV4cG9ydGVkLnBpcGVzLmZvckVhY2gobz0+ZS5jb21waWxhdGlvbi5waXBlcy5hZGQobykpfSksJEModC5kZWNsYXJhdGlvbnMpLmZvckVhY2goaT0+e3J1KGkpP2UuY29tcGlsYXRpb24ucGlwZXMuYWRkKGkpOmUuY29tcGlsYXRpb24uZGlyZWN0aXZlcy5hZGQoaSl9KSwkQyh0LmV4cG9ydHMpLmZvckVhY2goaT0+e2xldCByPWk7aWYoT2oocikpe2xldCBvPWxoKHIpO28uZXhwb3J0ZWQuZGlyZWN0aXZlcy5mb3JFYWNoKGE9PntlLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKGEpLGUuZXhwb3J0ZWQuZGlyZWN0aXZlcy5hZGQoYSl9KSxvLmV4cG9ydGVkLnBpcGVzLmZvckVhY2goYT0+e2UuY29tcGlsYXRpb24ucGlwZXMuYWRkKGEpLGUuZXhwb3J0ZWQucGlwZXMuYWRkKGEpfSl9ZWxzZSBydShyKT9lLmV4cG9ydGVkLnBpcGVzLmFkZChyKTplLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKHIpfSksdC50cmFuc2l0aXZlQ29tcGlsZVNjb3Blcz1lLGV9KG4pO2lmKEQ1KG4pKXtpZihudWxsIT09KHdzKG4pfHxpdShuKSkpcmV0dXJue3NjaGVtYXM6bnVsbCxjb21waWxhdGlvbjp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXR9LGV4cG9ydGVkOntkaXJlY3RpdmVzOm5ldyBTZXQoW25dKSxwaXBlczpuZXcgU2V0fX07aWYobnVsbCE9PXJ1KG4pKXJldHVybntzY2hlbWFzOm51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXQoW25dKX19fXRocm93IG5ldyBFcnJvcihgJHtuLm5hbWV9IGRvZXMgbm90IGhhdmUgYSBtb2R1bGUgZGVmIChcdTAyNzVtb2QgcHJvcGVydHkpYCl9ZnVuY3Rpb24gcDUobil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nTW9kdWxlfShuKT9uLm5nTW9kdWxlOm59dmFyIE9SPTA7ZnVuY3Rpb24gTmoobix0KXtsZXQgZT1udWxsO1ZqKG4sdHx8e30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHFrLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9Qmoobix0fHx7fSk7ZT1TcygpLmNvbXBpbGVEaXJlY3RpdmUobnUsaS5zb3VyY2VNYXBVcmwsaS5tZXRhZGF0YSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfWZ1bmN0aW9uIEJqKG4sdCl7bGV0IGU9biYmbi5uYW1lLGk9YG5nOi8vLyR7ZX0vXHUwMjc1ZGlyLmpzYCxyPVNzKCksbz1IaihuLHQpO3JldHVybiBvLnR5cGVTb3VyY2VTcGFuPXIuY3JlYXRlUGFyc2VTb3VyY2VTcGFuKCJEaXJlY3RpdmUiLGUsaSksby51c2VzSW5oZXJpdGFuY2UmJnpqKG4pLHttZXRhZGF0YTpvLHNvdXJjZU1hcFVybDppfX1mdW5jdGlvbiBWaihuLHQpe2xldCBlPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sS2Mse2dldDooKT0+e2lmKG51bGw9PT1lKXtsZXQgaT1CaihuLHQpLHI9U3MoKTtlPXIuY29tcGlsZUZhY3RvcnkobnUsYG5nOi8vLyR7bi5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOmkubWV0YWRhdGEubmFtZSx0eXBlOmkubWV0YWRhdGEudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6TE0obiksdGFyZ2V0OnIuRmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9ZnVuY3Rpb24gVmRlKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wcm90b3R5cGUpPT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiBIaihuLHQpe2xldCBlPXNQKCksaT1lLm93blByb3BNZXRhZGF0YShuKTtyZXR1cm57bmFtZTpuLm5hbWUsdHlwZTpuLHNlbGVjdG9yOnZvaWQgMCE9PXQuc2VsZWN0b3I/dC5zZWxlY3RvcjpudWxsLGhvc3Q6dC5ob3N0fHxaYyxwcm9wTWV0YWRhdGE6aSxpbnB1dHM6dC5pbnB1dHN8fFVpLG91dHB1dHM6dC5vdXRwdXRzfHxVaSxxdWVyaWVzOmY1KG4saSxVaiksbGlmZWN5Y2xlOnt1c2VzT25DaGFuZ2VzOmUuaGFzTGlmZWN5Y2xlSG9vayhuLCJuZ09uQ2hhbmdlcyIpfSx0eXBlU291cmNlU3BhbjpudWxsLHVzZXNJbmhlcml0YW5jZTohVmRlKG4pLGV4cG9ydEFzOlVkZSh0LmV4cG9ydEFzKSxwcm92aWRlcnM6dC5wcm92aWRlcnN8fG51bGwsdmlld1F1ZXJpZXM6ZjUobixpLGpqKSxpc1N0YW5kYWxvbmU6ISF0LnN0YW5kYWxvbmUsaG9zdERpcmVjdGl2ZXM6dC5ob3N0RGlyZWN0aXZlcz8ubWFwKHI9PiJmdW5jdGlvbiI9PXR5cGVvZiByP3tkaXJlY3RpdmU6cn06cil8fG51bGx9fWZ1bmN0aW9uIHpqKG4pe2xldCB0PU9iamVjdC5wcm90b3R5cGUsZT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7ZSYmZSE9PXQ7KSFpdShlKSYmIXdzKGUpJiZHZGUoZSkmJk5qKGUsbnVsbCksZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9ZnVuY3Rpb24gSGRlKG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9XaihuKTpraShuKX1mdW5jdGlvbiB6ZGUobix0KXtyZXR1cm57cHJvcGVydHlOYW1lOm4scHJlZGljYXRlOkhkZSh0LnNlbGVjdG9yKSxkZXNjZW5kYW50czp0LmRlc2NlbmRhbnRzLGZpcnN0OnQuZmlyc3QscmVhZDp0LnJlYWQ/dC5yZWFkOm51bGwsc3RhdGljOiEhdC5zdGF0aWMsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ISF0LmVtaXREaXN0aW5jdENoYW5nZXNPbmx5fX1mdW5jdGlvbiBmNShuLHQsZSl7bGV0IGk9W107Zm9yKGxldCByIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG89dFtyXTtvLmZvckVhY2goYT0+e2lmKGUoYSkpe2lmKCFhLnNlbGVjdG9yKXRocm93IG5ldyBFcnJvcihgQ2FuJ3QgY29uc3RydWN0IGEgcXVlcnkgZm9yIHRoZSBwcm9wZXJ0eSAiJHtyfSIgb2YgIiR7amsobil9IiBzaW5jZSB0aGUgcXVlcnkgc2VsZWN0b3Igd2Fzbid0IGRlZmluZWQuYCk7aWYoby5zb21lKEdqKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb21iaW5lIEBJbnB1dCBkZWNvcmF0b3JzIHdpdGggcXVlcnkgZGVjb3JhdG9ycyIpO2kucHVzaCh6ZGUocixhKSl9fSl9cmV0dXJuIGl9ZnVuY3Rpb24gVWRlKG4pe3JldHVybiB2b2lkIDA9PT1uP251bGw6V2oobil9ZnVuY3Rpb24gVWoobil7bGV0IHQ9bi5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iQ29udGVudENoaWxkIj09PXR8fCJDb250ZW50Q2hpbGRyZW4iPT09dH1mdW5jdGlvbiBqaihuKXtsZXQgdD1uLm5nTWV0YWRhdGFOYW1lO3JldHVybiJWaWV3Q2hpbGQiPT09dHx8IlZpZXdDaGlsZHJlbiI9PT10fWZ1bmN0aW9uIEdqKG4pe3JldHVybiJJbnB1dCI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIFdqKG4pe3JldHVybiBuLnNwbGl0KCIsIikubWFwKHQ9PnQudHJpbSgpKX12YXIgamRlPVsibmdPbkNoYW5nZXMiLCJuZ09uSW5pdCIsIm5nT25EZXN0cm95IiwibmdEb0NoZWNrIiwibmdBZnRlclZpZXdJbml0IiwibmdBZnRlclZpZXdDaGVja2VkIiwibmdBZnRlckNvbnRlbnRJbml0IiwibmdBZnRlckNvbnRlbnRDaGVja2VkIl07ZnVuY3Rpb24gR2RlKG4pe2xldCB0PXNQKCk7aWYoamRlLnNvbWUoaT0+dC5oYXNMaWZlY3ljbGVIb29rKG4saSkpKXJldHVybiEwO2xldCBlPXQucHJvcE1ldGFkYXRhKG4pO2ZvcihsZXQgaSBpbiBlKXtsZXQgcj1lW2ldO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgYT1yW29dLHM9YS5uZ01ldGFkYXRhTmFtZTtpZihHaihhKXx8VWooYSl8fGpqKGEpfHwiT3V0cHV0Ij09PXN8fCJIb3N0QmluZGluZyI9PT1zfHwiSG9zdExpc3RlbmVyIj09PXMpcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIG01KG4sdCl7cmV0dXJue3R5cGU6bixuYW1lOm4ubmFtZSxwaXBlTmFtZTp0Lm5hbWUscHVyZTp2b2lkIDA9PT10LnB1cmV8fHQucHVyZSxpc1N0YW5kYWxvbmU6ISF0LnN0YW5kYWxvbmV9fXZhciBxZGU9X3koIkRpcmVjdGl2ZSIsKG49e30pPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9Pk5qKG4sdCkpO2Z1bmN0aW9uIFNNKC4uLm4pe31feSgiQ29tcG9uZW50Iiwobj17fSk9Pih7Y2hhbmdlRGV0ZWN0aW9uOnFfLkRlZmF1bHQsLi4ubn0pLHFkZSx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbDsoZnVuY3Rpb24obix0KXt1eih0KSYmKGF5LnNldChuLHQpLGR6LmFkZChuKSl9KShuLHQpLFZqKG4sdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sQU0se2dldDooKT0+e2lmKG51bGw9PT1lKXtsZXQgaT1TcygpO2lmKHV6KHQpKXtsZXQgYz1bYENvbXBvbmVudCAnJHtuLm5hbWV9JyBpcyBub3QgcmVzb2x2ZWQ6YF07dGhyb3cgdC50ZW1wbGF0ZVVybCYmYy5wdXNoKGAgLSB0ZW1wbGF0ZVVybDogJHt0LnRlbXBsYXRlVXJsfWApLHQuc3R5bGVVcmxzJiZ0LnN0eWxlVXJscy5sZW5ndGgmJmMucHVzaChgIC0gc3R5bGVVcmxzOiAke0pTT04uc3RyaW5naWZ5KHQuc3R5bGVVcmxzKX1gKSxjLnB1c2goIkRpZCB5b3UgcnVuIGFuZCB3YWl0IGZvciAncmVzb2x2ZUNvbXBvbmVudFJlc291cmNlcygpJz8iKSxuZXcgRXJyb3IoYy5qb2luKCJcbiIpKX1sZXQgbz10LnByZXNlcnZlV2hpdGVzcGFjZXM7dm9pZCAwPT09byYmKG89bnVsbCE9PUdfJiZ2b2lkIDAhPT1HXy5wcmVzZXJ2ZVdoaXRlc3BhY2VzJiZHXy5wcmVzZXJ2ZVdoaXRlc3BhY2VzKTtsZXQgYT10LmVuY2Fwc3VsYXRpb247dm9pZCAwPT09YSYmKGE9bnVsbCE9PUdfJiZ2b2lkIDAhPT1HXy5kZWZhdWx0RW5jYXBzdWxhdGlvbj9HXy5kZWZhdWx0RW5jYXBzdWxhdGlvbjplcy5FbXVsYXRlZCk7bGV0IHM9dC50ZW1wbGF0ZVVybHx8YG5nOi8vLyR7bi5uYW1lfS90ZW1wbGF0ZS5odG1sYCxsPXsuLi5IaihuLHQpLHR5cGVTb3VyY2VTcGFuOmkuY3JlYXRlUGFyc2VTb3VyY2VTcGFuKCJDb21wb25lbnQiLG4ubmFtZSxzKSx0ZW1wbGF0ZTp0LnRlbXBsYXRlfHwiIixwcmVzZXJ2ZVdoaXRlc3BhY2VzOm8sc3R5bGVzOnQuc3R5bGVzfHxVaSxhbmltYXRpb25zOnQuYW5pbWF0aW9ucyxkZWNsYXJhdGlvbnM6W10sY2hhbmdlRGV0ZWN0aW9uOnQuY2hhbmdlRGV0ZWN0aW9uLGVuY2Fwc3VsYXRpb246YSxpbnRlcnBvbGF0aW9uOnQuaW50ZXJwb2xhdGlvbix2aWV3UHJvdmlkZXJzOnQudmlld1Byb3ZpZGVyc3x8bnVsbH07T1IrKzt0cnl7aWYobC51c2VzSW5oZXJpdGFuY2UmJnpqKG4pLGU9aS5jb21waWxlQ29tcG9uZW50KG51LHMsbCksdC5zdGFuZGFsb25lKXtsZXQgYz10dSh0LmltcG9ydHN8fFVpKSx7ZGlyZWN0aXZlRGVmczpkLHBpcGVEZWZzOnV9PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7cmV0dXJue2RpcmVjdGl2ZURlZnM6KCk9PntpZihudWxsPT09ZSl7ZT1bd3MobildO2xldCBhPW5ldyBTZXQ7Zm9yKGxldCBzIG9mIHQpe2xldCBsPWtpKHMpO2lmKCFhLmhhcyhsKSlpZihhLmFkZChsKSxuaChsKSl7bGV0IGM9bGgobCk7Zm9yKGxldCBkIG9mIGMuZXhwb3J0ZWQuZGlyZWN0aXZlcyl7bGV0IHU9d3MoZCl8fGl1KGQpO3UmJiFhLmhhcyhkKSYmKGEuYWRkKGQpLGUucHVzaCh1KSl9fWVsc2V7bGV0IGM9d3MobCl8fGl1KGwpO2MmJmUucHVzaChjKX19fXJldHVybiBlfSxwaXBlRGVmczooKT0+e2lmKG51bGw9PT1pKXtpPVtdO2xldCBhPW5ldyBTZXQ7Zm9yKGxldCBzIG9mIHQpe2xldCBsPWtpKHMpO2lmKCFhLmhhcyhsKSlpZihhLmFkZChsKSxuaChsKSl7bGV0IGM9bGgobCk7Zm9yKGxldCBkIG9mIGMuZXhwb3J0ZWQucGlwZXMpe2xldCB1PXJ1KGQpO3UmJiFhLmhhcyhkKSYmKGEuYWRkKGQpLGkucHVzaCh1KSl9fWVsc2V7bGV0IGM9cnUobCk7YyYmaS5wdXNoKGMpfX19cmV0dXJuIGl9fX0obixjKTtlLmRpcmVjdGl2ZURlZnM9ZCxlLnBpcGVEZWZzPXUsZS5kZXBlbmRlbmNpZXM9KCk9PmMubWFwKGtpKX19ZmluYWxseXtPUi0tfWlmKDA9PT1PUiYmZnVuY3Rpb24oKXtpZighUFIpe1BSPSEwO3RyeXtmb3IobGV0IG49dE0ubGVuZ3RoLTE7bj49MDtuLS0pe2xldHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX09dE1bbl07ZS5kZWNsYXJhdGlvbnMmJmUuZGVjbGFyYXRpb25zLmV2ZXJ5KEZqKSYmKHRNLnNwbGljZShuLDEpLE9kZSh0LGUpKX19ZmluYWxseXtQUj0hMX19fSgpLGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nU2VsZWN0b3JTY29wZX0obikpe2xldCBjPWxoKG4ubmdTZWxlY3RvclNjb3BlKTtMaihlLGMpfWlmKHQuc2NoZW1hcyl7aWYoIXQuc3RhbmRhbG9uZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc2NoZW1hcycgd2FzIHNwZWNpZmllZCBmb3IgdGhlICR7amsobil9IGJ1dCBpcyBvbmx5IHZhbGlkIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgc3RhbmRhbG9uZS5gKTtlLnNjaGVtYXM9dC5zY2hlbWFzfWVsc2UgdC5zdGFuZGFsb25lJiYoZS5zY2hlbWFzPVtdKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLF95KCJQaXBlIixuPT4oe3B1cmU6ITAsLi4ubn0pLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sS2Mse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj1tNShuLHQpLG89U3MoKTtpPW8uY29tcGlsZUZhY3RvcnkobnUsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOnIubmFtZSx0eXBlOnIudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6TE0obiksdGFyZ2V0Om8uRmFjdG9yeVRhcmdldC5QaXBlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFlrLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IHI9bTUobix0KTtlPVNzKCkuY29tcGlsZVBpcGUobnUsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVwaXBlLmpzYCxyKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLGN1KCJJbnB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksY3UoIk91dHB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksY3UoIkhvc3RCaW5kaW5nIixuPT4oe2hvc3RQcm9wZXJ0eU5hbWU6bn0pKSxjdSgiSG9zdExpc3RlbmVyIiwobix0KT0+KHtldmVudE5hbWU6bixhcmdzOnR9KSksX3koIk5nTW9kdWxlIixuPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdD17fSl7KGZ1bmN0aW9uKG4sdCxlPSExKXtsZXQgaT10dSh0LmRlY2xhcmF0aW9uc3x8VWkpLHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkobixUNSx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+KG51bGw9PT1yJiYocj1TcygpLmNvbXBpbGVOZ01vZHVsZShudSxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NW1vZC5qc2Ase3R5cGU6bixib290c3RyYXA6dHUodC5ib290c3RyYXB8fFVpKS5tYXAoa2kpLGRlY2xhcmF0aW9uczppLm1hcChraSksaW1wb3J0czp0dSh0LmltcG9ydHN8fFVpKS5tYXAoa2kpLm1hcChwNSksZXhwb3J0czp0dSh0LmV4cG9ydHN8fFVpKS5tYXAoa2kpLm1hcChwNSksc2NoZW1hczp0LnNjaGVtYXM/dHUodC5zY2hlbWFzKTpudWxsLGlkOnQuaWR8fG51bGx9KSxyLnNjaGVtYXN8fChyLnNjaGVtYXM9W10pKSxyKX0pO2xldCBvPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sS2Mse2dldDooKT0+e2lmKG51bGw9PT1vKXtsZXQgcz1TcygpO289cy5jb21waWxlRmFjdG9yeShudSxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bixkZXBzOkxNKG4pLHRhcmdldDpzLkZhY3RvcnlUYXJnZXQuTmdNb2R1bGUsdHlwZUFyZ3VtZW50Q291bnQ6MH0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ITF9KTtsZXQgYT1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLE5SLHtnZXQ6KCk9PntpZihudWxsPT09YSl7bGV0IHM9e25hbWU6bi5uYW1lLHR5cGU6bixwcm92aWRlcnM6dC5wcm92aWRlcnN8fFVpLGltcG9ydHM6Wyh0LmltcG9ydHN8fFVpKS5tYXAoa2kpLCh0LmV4cG9ydHN8fFVpKS5tYXAoa2kpXX07YT1TcygpLmNvbXBpbGVJbmplY3RvcihudSxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWluai5qc2Ascyl9cmV0dXJuIGF9LGNvbmZpZ3VyYWJsZTohMX0pfSkobix0KSx2b2lkIDAhPT10LmlkJiZweihuLHQuaWQpLGZ1bmN0aW9uKG4sdCl7dE0ucHVzaCh7bW9kdWxlVHlwZTpuLG5nTW9kdWxlOnR9KX0obix0KX0obix0KSk7dmFyIFZQPW5ldyBpZSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSwkTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuYXBwSW5pdHM9ZSx0aGlzLnJlc29sdmU9U00sdGhpcy5yZWplY3Q9U00sdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoaSxyKT0+e3RoaXMucmVzb2x2ZT1pLHRoaXMucmVqZWN0PXJ9KX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtsZXQgZT1bXSxpPSgpPT57dGhpcy5kb25lPSEwLHRoaXMucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcihsZXQgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLmFwcEluaXRzW3JdKCk7aWYoVGgobykpZS5wdXNoKG8pO2Vsc2UgaWYoT1Aobykpe2xldCBhPW5ldyBQcm9taXNlKChzLGwpPT57by5zdWJzY3JpYmUoe2NvbXBsZXRlOnMsZXJyb3I6bH0pfSk7ZS5wdXNoKGEpfX1Qcm9taXNlLmFsbChlKS50aGVuKCgpPT57aSgpfSkuY2F0Y2gocj0+e3RoaXMucmVqZWN0KHIpfSksMD09PWUubGVuZ3RoJiZpKCksdGhpcy5pbml0aWFsaXplZD0hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhWUCw4KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksJHA9bmV3IGllKCJBcHBJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm5gJHtGUigpfSR7RlIoKX0ke0ZSKCl9YH19KTtmdW5jdGlvbiBGUigpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciBIUD1uZXcgaWUoIlBsYXRmb3JtIEluaXRpYWxpemVyIiksaGM9bmV3IGllKCJQbGF0Zm9ybSBJRCIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxkaT0obmV3IGllKCJBcHBsaWNhdGlvbiBQYWNrYWdlcyBSb290IFVSTCIpLG5ldyBpZSgiQW5pbWF0aW9uTW9kdWxlVHlwZSIpKSxhZD1uZXcgaWUoIkxvY2FsZUlkIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+cGkoYWQsTWkuT3B0aW9uYWx8TWkuU2tpcFNlbGYpfHx0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8Q019KSxLZGU9KG5ldyBpZSgiRGVmYXVsdEN1cnJlbmN5Q29kZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJVU0QifSksbmV3IGllKCJUcmFuc2xhdGlvbnMiKSxuZXcgaWUoIlRyYW5zbGF0aW9uc0Zvcm1hdCIpLG5ldyBpZSgiY29tcGlsZXJPcHRpb25zIiksUHJvbWlzZS5yZXNvbHZlKDApKTtmdW5jdGlvbiBPayhuKXt0eXBlb2YgWm9uZT4idSI/S2RlLnRoZW4oKCk9PntuJiZuLmFwcGx5KG51bGwsbnVsbCl9KTpab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInNjaGVkdWxlTWljcm90YXNrIixuKX12YXIgYXQ9Y2xhc3N7Y29uc3RydWN0b3Ioe2VuYWJsZUxvbmdTdGFja1RyYWNlOnQ9ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjplPSExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmk9ITF9KXtpZih0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEwoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgTCghMSksdGhpcy5vblN0YWJsZT1uZXcgTCghMSksdGhpcy5vbkVycm9yPW5ldyBMKCExKSx0eXBlb2YgWm9uZT4idSIpdGhyb3cgbmV3IGJ0KDkwOCwhMSk7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2xldCByPXRoaXM7ci5fbmVzdGluZz0wLHIuX291dGVyPXIuX2lubmVyPVpvbmUuY3VycmVudCxab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYoci5faW5uZXI9ci5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLHQmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKHIuX2lubmVyPXIuX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjKSksci5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uPSFpJiZlLHIuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb249aSxyLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxyLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbigpe2xldCBuPVdyLnJlcXVlc3RBbmltYXRpb25GcmFtZSx0PVdyLmNhbmNlbEFuaW1hdGlvbkZyYW1lO2lmKHR5cGVvZiBab25lPCJ1IiYmbiYmdCl7bGV0IGU9bltab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZSYmKG49ZSk7bGV0IGk9dFtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07aSYmKHQ9aSl9cmV0dXJue25hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZTpuLG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZyYW1lOnR9fSgpLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZSxmdW5jdGlvbihuKXtsZXQgdD0oKT0+eyFmdW5jdGlvbihuKXtuLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHwtMSE9PW4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkfHwobi5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9bi5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChXciwoKT0+e24uZmFrZVRvcEV2ZW50VGFza3x8KG4uZmFrZVRvcEV2ZW50VGFzaz1ab25lLnJvb3Quc2NoZWR1bGVFdmVudFRhc2soImZha2VUb3BFdmVudFRhc2siLCgpPT57bi5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsRmsobiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMCx6UChuKSxuLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSx2b2lkIDAsKCk9Pnt9LCgpPT57fSkpLG4uZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0pLEZrKG4pKX0obil9O24uX2lubmVyPW4uX2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazooZSxpLHIsbyxhLHMpPT57dHJ5e3JldHVybiBoNShuKSxlLmludm9rZVRhc2socixvLGEscyl9ZmluYWxseXsobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uJiYiZXZlbnRUYXNrIj09PW8udHlwZXx8bi5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJnQoKSxnNShuKX19LG9uSW52b2tlOihlLGkscixvLGEscyxsKT0+e3RyeXtyZXR1cm4gaDUobiksZS5pbnZva2UocixvLGEscyxsKX1maW5hbGx5e24uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJnQoKSxnNShuKX19LG9uSGFzVGFzazooZSxpLHIsbyk9PntlLmhhc1Rhc2socixvKSxpPT09ciYmKCJtaWNyb1Rhc2siPT1vLmNoYW5nZT8obi5faGFzUGVuZGluZ01pY3JvdGFza3M9by5taWNyb1Rhc2ssRmsobikselAobikpOiJtYWNyb1Rhc2siPT1vLmNoYW5nZSYmKG4uaGFzUGVuZGluZ01hY3JvdGFza3M9by5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjooZSxpLHIsbyk9PihlLmhhbmRsZUVycm9yKHIsbyksbi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vbkVycm9yLmVtaXQobykpLCExKX0pfShyKX1zdGF0aWMgaXNJbkFuZ3VsYXJab25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighYXQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IGJ0KDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5ndWxhclpvbmUoKXtpZihhdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgYnQoOTA5LCExKX1ydW4odCxlLGkpe3JldHVybiB0aGlzLl9pbm5lci5ydW4odCxlLGkpfXJ1blRhc2sodCxlLGkscil7bGV0IG89dGhpcy5faW5uZXIsYT1vLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIityLHQsJGRlLFNNLFNNKTt0cnl7cmV0dXJuIG8ucnVuVGFzayhhLGUsaSl9ZmluYWxseXtvLmNhbmNlbFRhc2soYSl9fXJ1bkd1YXJkZWQodCxlLGkpe3JldHVybiB0aGlzLl9pbm5lci5ydW5HdWFyZGVkKHQsZSxpKX1ydW5PdXRzaWRlQW5ndWxhcih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfX0sJGRlPXt9O2Z1bmN0aW9uIHpQKG4pe2lmKDA9PW4uX25lc3RpbmcmJiFuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhbi5pc1N0YWJsZSl0cnl7bi5fbmVzdGluZysrLG4ub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYobi5fbmVzdGluZy0tLCFuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtuLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLm9uU3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7bi5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIEZrKG4pe24uaGFzUGVuZGluZ01pY3JvdGFza3M9ISEobi5faGFzUGVuZGluZ01pY3JvdGFza3N8fChuLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PW4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiBoNShuKXtuLl9uZXN0aW5nKyssbi5pc1N0YWJsZSYmKG4uaXNTdGFibGU9ITEsbi5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIGc1KG4pe24uX25lc3RpbmctLSx6UChuKX12YXIgalAsVVA9bmV3IGllKCIiKSxBeT1uZXcgaWUoIiIpLGV3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX25nWm9uZT1lLHRoaXMucmVnaXN0cnk9aSx0aGlzLl9wZW5kaW5nQ291bnQ9MCx0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fZGlkV29yaz0hMSx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy50YXNrVHJhY2tpbmdab25lPW51bGwsalB8fChmdW5jdGlvbihuKXtqUD1ufShyKSxyLmFkZFRvV2luZG93KGkpKSx0aGlzLl93YXRjaEFuZ3VsYXJFdmVudHMoKSxlLnJ1bigoKT0+e3RoaXMudGFza1RyYWNraW5nWm9uZT10eXBlb2YgWm9uZT4idSI/bnVsbDpab25lLmN1cnJlbnQuZ2V0KCJUYXNrVHJhY2tpbmdab25lIil9KX1fd2F0Y2hBbmd1bGFyRXZlbnRzKCl7dGhpcy5fbmdab25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy5fZGlkV29yaz0hMCx0aGlzLl9pc1pvbmVTdGFibGU9ITF9fSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e2F0LmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxPaygoKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KX0pfWluY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnQrPTEsdGhpcy5fZGlkV29yaz0hMCx0aGlzLl9wZW5kaW5nQ291bnR9ZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBiZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9aXNTdGFibGUoKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfV9ydW5DYWxsYmFja3NJZlJlYWR5KCl7aWYodGhpcy5pc1N0YWJsZSgpKU9rKCgpPT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCBlPXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoZS50aW1lb3V0SWQpLGUuZG9uZUNiKHRoaXMuX2RpZFdvcmspfXRoaXMuX2RpZFdvcms9ITF9KTtlbHNle2xldCBlPXRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCk7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoaT0+IWkudXBkYXRlQ2J8fCFpLnVwZGF0ZUNiKGUpfHwoY2xlYXJUaW1lb3V0KGkudGltZW91dElkKSwhMSkpLHRoaXMuX2RpZFdvcms9ITB9fWdldFBlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLnRhc2tUcmFja2luZ1pvbmU/dGhpcy50YXNrVHJhY2tpbmdab25lLm1hY3JvVGFza3MubWFwKGU9Pih7c291cmNlOmUuc291cmNlLGNyZWF0aW9uTG9jYXRpb246ZS5jcmVhdGlvbkxvY2F0aW9uLGRhdGE6ZS5kYXRhfSkpOltdfWFkZENhbGxiYWNrKGUsaSxyKXtsZXQgbz0tMTtpJiZpPjAmJihvPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihhPT5hLnRpbWVvdXRJZCE9PW8pLGUodGhpcy5fZGlkV29yayx0aGlzLmdldFBlbmRpbmdUYXNrcygpKX0saSkpLHRoaXMuX2NhbGxiYWNrcy5wdXNoKHtkb25lQ2I6ZSx0aW1lb3V0SWQ6byx1cGRhdGVDYjpyfSl9d2hlblN0YWJsZShlLGkscil7aWYociYmIXRoaXMudGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvcGx1Z2lucy90YXNrLXRyYWNraW5nIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayhlLGksciksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfWdldFBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50fXJlZ2lzdGVyQXBwbGljYXRpb24oZSl7dGhpcy5yZWdpc3RyeS5yZWdpc3RlckFwcGxpY2F0aW9uKGUsdGhpcyl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkudW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpfWZpbmRQcm92aWRlcnMoZSxpLHIpe3JldHVybltdfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGF0KSxPKHR3KSxPKEF5KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdHc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FwcGxpY2F0aW9ucz1uZXcgTWFwfXJlZ2lzdGVyQXBwbGljYXRpb24oZSxpKXt0aGlzLl9hcHBsaWNhdGlvbnMuc2V0KGUsaSl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUoZSl9dW5yZWdpc3RlckFsbEFwcGxpY2F0aW9ucygpe3RoaXMuX2FwcGxpY2F0aW9ucy5jbGVhcigpfWdldFRlc3RhYmlsaXR5KGUpe3JldHVybiB0aGlzLl9hcHBsaWNhdGlvbnMuZ2V0KGUpfHxudWxsfWdldEFsbFRlc3RhYmlsaXRpZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfWdldEFsbFJvb3RFbGVtZW50cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy5rZXlzKCkpfWZpbmRUZXN0YWJpbGl0eUluVHJlZShlLGk9ITApe3JldHVybiBqUD8uZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsZSxpKT8/bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpLGV5PW51bGwscWo9bmV3IGllKCJBbGxvd011bHRpcGxlVG9rZW4iKSxZaj1uZXcgaWUoIlBsYXRmb3JtRGVzdHJveUxpc3RlbmVycyIpLGl1ZT1uZXcgaWUoImFwcEJvb3RzdHJhcExpc3RlbmVyIik7ZnVuY3Rpb24gR1Aobix0LGU9W10pe2xldCBpPWBQbGF0Zm9ybTogJHt0fWAscj1uZXcgaWUoaSk7cmV0dXJuKG89W10pPT57bGV0IGE9WGooKTtpZighYXx8YS5pbmplY3Rvci5nZXQocWosITEpKXtsZXQgcz1bLi4uZSwuLi5vLHtwcm92aWRlOnIsdXNlVmFsdWU6ITB9XTtuP24ocyk6ZnVuY3Rpb24obil7aWYoZXkmJiFleS5nZXQocWosITEpKXRocm93IG5ldyBidCg0MDAsITEpO2V5PW47bGV0IHQ9bi5nZXQoUWopOyhmdW5jdGlvbihuKXtsZXQgdD1uLmdldChIUCxudWxsKTt0JiZ0LmZvckVhY2goZT0+ZSgpKX0pKG4pfShmdW5jdGlvbihuPVtdLHQpe3JldHVybiBiaS5jcmVhdGUoe25hbWU6dCxwcm92aWRlcnM6W3twcm92aWRlOnpNLHVzZVZhbHVlOiJwbGF0Zm9ybSJ9LHtwcm92aWRlOllqLHVzZVZhbHVlOm5ldyBTZXQoWygpPT5leT1udWxsXSl9LC4uLm5dfSl9KHMsaSkpfXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1YaigpO2lmKCF0KXRocm93IG5ldyBidCg0MDEsITEpO3JldHVybiB0fSgpfX1mdW5jdGlvbiBYaigpe3JldHVybiBleT8uZ2V0KFFqKT8/bnVsbH12YXIgUWo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lLHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9Ym9vdHN0cmFwTW9kdWxlRmFjdG9yeShlLGkpe2xldCByPWZ1bmN0aW9uKG4sdCl7bGV0IGU7cmV0dXJuIGU9Im5vb3AiPT09bj9uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEwsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBMLHRoaXMub25TdGFibGU9bmV3IEwsdGhpcy5vbkVycm9yPW5ldyBMfXJ1bih0LGUsaSl7cmV0dXJuIHQuYXBwbHkoZSxpKX1ydW5HdWFyZGVkKHQsZSxpKXtyZXR1cm4gdC5hcHBseShlLGkpfXJ1bk91dHNpZGVBbmd1bGFyKHQpe3JldHVybiB0KCl9cnVuVGFzayh0LGUsaSxyKXtyZXR1cm4gdC5hcHBseShlLGkpfX06KCJ6b25lLmpzIj09PW4/dm9pZCAwOm4pfHxuZXcgYXQodCksZX0oaT8ubmdab25lLGZ1bmN0aW9uKG4pe3JldHVybntlbmFibGVMb25nU3RhY2tUcmFjZTohMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOiEoIW58fCFuLm5nWm9uZUV2ZW50Q29hbGVzY2luZyl8fCExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOiEoIW58fCFuLm5nWm9uZVJ1bkNvYWxlc2NpbmcpfHwhMX19KGkpKSxvPVt7cHJvdmlkZTphdCx1c2VWYWx1ZTpyfV07cmV0dXJuIHIucnVuKCgpPT57bGV0IGE9YmkuY3JlYXRlKHtwcm92aWRlcnM6byxwYXJlbnQ6dGhpcy5pbmplY3RvcixuYW1lOmUubW9kdWxlVHlwZS5uYW1lfSkscz1lLmNyZWF0ZShhKSxsPXMuaW5qZWN0b3IuZ2V0KGNhLG51bGwpO2lmKCFsKXRocm93IG5ldyBidCg0MDIsITEpO3JldHVybiByLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IGM9ci5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpkPT57bC5oYW5kbGVFcnJvcihkKX19KTtzLm9uRGVzdHJveSgoKT0+e25NKHRoaXMuX21vZHVsZXMscyksYy51bnN1YnNjcmliZSgpfSl9KSxmdW5jdGlvbihuLHQsZSl7dHJ5e2xldCBpPWUoKTtyZXR1cm4gVGgoaSk/aS5jYXRjaChyPT57dGhyb3cgdC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5oYW5kbGVFcnJvcihyKSkscn0pOml9Y2F0Y2goaSl7dGhyb3cgdC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5oYW5kbGVFcnJvcihpKSksaX19KGwsciwoKT0+e2xldCBjPXMuaW5qZWN0b3IuZ2V0KCRNKTtyZXR1cm4gYy5ydW5Jbml0aWFsaXplcnMoKSxjLmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbihuKXsoZnVuY3Rpb24obix0KXtudWxsPT1uJiZNNSgiRXhwZWN0ZWQgbG9jYWxlSWQgdG8gYmUgZGVmaW5lZCIsbixudWxsLCIhPSIpfSkobiksInN0cmluZyI9PXR5cGVvZiBuJiYoc2o9bi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0ocy5pbmplY3Rvci5nZXQoYWQsQ00pfHxDTSksdGhpcy5fbW9kdWxlRG9Cb290c3RyYXAocykscykpfSl9KX1ib290c3RyYXBNb2R1bGUoZSxpPVtdKXtsZXQgcj1aaih7fSxpKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPW5ldyBBayhlKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfSgwLDAsZSkudGhlbihvPT50aGlzLmJvb3RzdHJhcE1vZHVsZUZhY3RvcnkobyxyKSl9X21vZHVsZURvQm9vdHN0cmFwKGUpe2xldCBpPWUuaW5qZWN0b3IuZ2V0KGdjKTtpZihlLl9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0aD4wKWUuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChyPT5pLmJvb3RzdHJhcChyKSk7ZWxzZXtpZighZS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBidCgtNDAzLCExKTtlLmluc3RhbmNlLm5nRG9Cb290c3RyYXAoaSl9dGhpcy5fbW9kdWxlcy5wdXNoKGUpfW9uRGVzdHJveShlKXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goZSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IGJ0KDQwNCwhMSk7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goaT0+aS5kZXN0cm95KCkpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChpPT5pKCkpO2xldCBlPXRoaXMuX2luamVjdG9yLmdldChZaixudWxsKTtlJiYoZS5mb3JFYWNoKGk9PmkoKSksZS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oYmkpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksbn0pKCk7ZnVuY3Rpb24gWmoobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LnJlZHVjZShaaixuKTp7Li4ubiwuLi50fX12YXIgZ2M9KCgpPT57Y2xhc3MgbntnZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3pvbmU9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy50aWNrKCl9KX19KTtsZXQgbz1uZXcgZW4ocz0+e3RoaXMuX3N0YWJsZT10aGlzLl96b25lLmlzU3RhYmxlJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3MubmV4dCh0aGlzLl9zdGFibGUpLHMuY29tcGxldGUoKX0pfSksYT1uZXcgZW4ocz0+e2xldCBsO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpPT57YXQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLE9rKCgpPT57IXRoaXMuX3N0YWJsZSYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5fc3RhYmxlPSEwLHMubmV4dCghMCkpfSl9KX0pO2xldCBjPXRoaXMuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PnthdC5hc3NlcnRJbkFuZ3VsYXJab25lKCksdGhpcy5fc3RhYmxlJiYodGhpcy5fc3RhYmxlPSExLHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzLm5leHQoITEpfSkpfSk7cmV0dXJuKCk9PntsLnVuc3Vic2NyaWJlKCksYy51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9Y24obyxhLnBpcGUoU2EoKSkpfWJvb3RzdHJhcChlLGkpe2xldCBhLHI9ZSBpbnN0YW5jZW9mIF9NO2lmKCF0aGlzLl9pbmplY3Rvci5nZXQoJE0pLmRvbmUpdGhyb3chciYmRDUoZSksbmV3IGJ0KDQwNSxmYWxzZSk7YT1yP2U6dGhpcy5faW5qZWN0b3IuZ2V0KFFyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlKSx0aGlzLmNvbXBvbmVudFR5cGVzLnB1c2goYS5jb21wb25lbnRUeXBlKTtsZXQgcz1mdW5jdGlvbihuKXtyZXR1cm4gbi5pc0JvdW5kVG9Nb2R1bGV9KGEpP3ZvaWQgMDp0aGlzLl9pbmplY3Rvci5nZXQoYXUpLGM9YS5jcmVhdGUoYmkuTlVMTCxbXSxpfHxhLnNlbGVjdG9yLHMpLGQ9Yy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LHU9Yy5pbmplY3Rvci5nZXQoVVAsbnVsbCk7cmV0dXJuIHU/LnJlZ2lzdGVyQXBwbGljYXRpb24oZCksYy5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoYy5ob3N0Vmlldyksbk0odGhpcy5jb21wb25lbnRzLGMpLHU/LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihkKX0pLHRoaXMuX2xvYWRDb21wb25lbnQoYyksY310aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IGJ0KDEwMSwhMSk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwO2ZvcihsZXQgZSBvZiB0aGlzLl92aWV3cyllLmRldGVjdENoYW5nZXMoKX1jYXRjaChlKXt0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9leGNlcHRpb25IYW5kbGVyLmhhbmRsZUVycm9yKGUpKX1maW5hbGx5e3RoaXMuX3J1bm5pbmdUaWNrPSExfX1hdHRhY2hWaWV3KGUpe2xldCBpPWU7dGhpcy5fdmlld3MucHVzaChpKSxpLmF0dGFjaFRvQXBwUmVmKHRoaXMpfWRldGFjaFZpZXcoZSl7bGV0IGk9ZTtuTSh0aGlzLl92aWV3cyxpKSxpLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChlKXt0aGlzLmF0dGFjaFZpZXcoZS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goZSk7bGV0IGk9dGhpcy5faW5qZWN0b3IuZ2V0KGl1ZSxbXSk7aS5wdXNoKC4uLnRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycyksaS5mb3JFYWNoKHI9PnIoZSkpfW5nT25EZXN0cm95KCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl0cnl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGU9PmUoKSksdGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGU9PmUuZGVzdHJveSgpKSx0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShlKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpLCgpPT5uTSh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGUpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IGJ0KDQwNiwhMSk7bGV0IGU9dGhpcy5faW5qZWN0b3I7ZS5kZXN0cm95JiYhZS5kZXN0cm95ZWQmJmUuZGVzdHJveSgpfWdldCB2aWV3Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3MubGVuZ3RofXdhcm5JZkRlc3Ryb3llZCgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhhdCksTyhsYyksTyhjYSkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIG5NKG4sdCl7bGV0IGU9bi5pbmRleE9mKHQpO2U+LTEmJm4uc3BsaWNlKGUsMSl9dmFyIEZ0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPW11ZSxufSkoKTtmdW5jdGlvbiBtdWUobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihrTShuKSYmIWUpe2xldCBpPWVkKG4uaW5kZXgsdCk7cmV0dXJuIG5ldyBZcChpLGkpfXJldHVybiA0NyZuLnR5cGU/bmV3IFlwKHRbZmxdLHQpOm51bGx9KFBvKCksS2UoKSwxNj09KDE2Jm4pKX12YXIgRU09Y2xhc3N7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIGdVKHQpfWNyZWF0ZSh0KXtyZXR1cm4gbmV3IE5rKHQpfX0sZ3VlPShuLHQpPT50LE5rPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxndWV9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hPcGVyYXRpb24odCl7bGV0IGU9dGhpcy5faXRIZWFkLGk9dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxvPW51bGw7Zm9yKDtlfHxpOyl7bGV0IGE9IWl8fGUmJmUuY3VycmVudEluZGV4PHk1KGkscixvKT9lOmkscz15NShhLHIsbyksbD1hLmN1cnJlbnRJbmRleDtpZihhPT09aSlyLS0saT1pLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1hLnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7b3x8KG89W10pO2xldCBjPXMtcixkPWwtcjtpZihjIT1kKXtmb3IobGV0IHA9MDtwPGM7cCsrKXtsZXQgZj1wPG8ubGVuZ3RoP29bcF06b1twXT0wLG09ZitwO2Q8PW0mJm08YyYmKG9bcF09ZisxKX1vW2EucHJldmlvdXNJbmRleF09ZC1jfX1zIT09bCYmdChhLHMsbCl9fWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoTW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWZvckVhY2hJZGVudGl0eUNoYW5nZSh0KXtsZXQgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9ZGlmZih0KXtpZihudWxsPT10JiYodD1bXSksIWdVKHQpKXRocm93IG5ldyBidCg5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgcixvLGEsZT10aGlzLl9pdEhlYWQsaT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IobGV0IHM9MDtzPHRoaXMubGVuZ3RoO3MrKylvPXRbc10sYT10aGlzLl90cmFja0J5Rm4ocyxvKSxudWxsIT09ZSYmT2JqZWN0LmlzKGUudHJhY2tCeUlkLGEpPyhpJiYoZT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihlLG8sYSxzKSksT2JqZWN0LmlzKGUuaXRlbSxvKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSxvKSk6KGU9dGhpcy5fbWlzbWF0Y2goZSxvLGEscyksaT0hMCksZT1lLl9uZXh0fWVsc2Ugcj0wLGZ1bmN0aW9uKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0KG5bZV0pO2Vsc2V7bGV0IGksZT1uW1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOyEoaT1lLm5leHQoKSkuZG9uZTspdChpLnZhbHVlKX19KHQscz0+e2E9dGhpcy5fdHJhY2tCeUZuKHIscyksbnVsbCE9PWUmJk9iamVjdC5pcyhlLnRyYWNrQnlJZCxhKT8oaSYmKGU9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oZSxzLGEscikpLE9iamVjdC5pcyhlLml0ZW0scyl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGUscykpOihlPXRoaXMuX21pc21hdGNoKGUscyxhLHIpLGk9ITApLGU9ZS5fbmV4dCxyKyt9KSx0aGlzLmxlbmd0aD1yO3JldHVybiB0aGlzLl90cnVuY2F0ZShlKSx0aGlzLmNvbGxlY3Rpb249dCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IHQ7Zm9yKHQ9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0TW92ZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaCh0LGUsaSxyKXtsZXQgbztyZXR1cm4gbnVsbD09PXQ/bz10aGlzLl9pdFRhaWw6KG89dC5fcHJldix0aGlzLl9yZW1vdmUodCkpLG51bGwhPT0odD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChpLG51bGwpKT8oT2JqZWN0LmlzKHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9yZWluc2VydEFmdGVyKHQsbyxyKSk6bnVsbCE9PSh0PW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoaSxyKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fbW92ZUFmdGVyKHQsbyxyKSk6dD10aGlzLl9hZGRBZnRlcihuZXcgQmsoZSxpKSxvLHIpLHR9X3ZlcmlmeVJlaW5zZXJ0aW9uKHQsZSxpLHIpe2xldCBvPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KGksbnVsbCk7cmV0dXJuIG51bGwhPT1vP3Q9dGhpcy5fcmVpbnNlcnRBZnRlcihvLHQuX3ByZXYscik6dC5jdXJyZW50SW5kZXghPXImJih0LmN1cnJlbnRJbmRleD1yLHRoaXMuX2FkZFRvTW92ZXModCxyKSksdH1fdHJ1bmNhdGUodCl7Zm9yKDtudWxsIT09dDspe2xldCBlPXQuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpLHQ9ZX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX1fcmVpbnNlcnRBZnRlcih0LGUsaSl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTtsZXQgcj10Ll9wcmV2UmVtb3ZlZCxvPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09cj90aGlzLl9yZW1vdmFsc0hlYWQ9bzpyLl9uZXh0UmVtb3ZlZD1vLG51bGw9PT1vP3RoaXMuX3JlbW92YWxzVGFpbD1yOm8uX3ByZXZSZW1vdmVkPXIsdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLGkpLHRoaXMuX2FkZFRvTW92ZXModCxpKSx0fV9tb3ZlQWZ0ZXIodCxlLGkpe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLGkpLHRoaXMuX2FkZFRvTW92ZXModCxpKSx0fV9hZGRBZnRlcih0LGUsaSl7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0fV9pbnNlcnRBZnRlcih0LGUsaSl7bGV0IHI9bnVsbD09PWU/dGhpcy5faXRIZWFkOmUuX25leHQ7cmV0dXJuIHQuX25leHQ9cix0Ll9wcmV2PWUsbnVsbD09PXI/dGhpcy5faXRUYWlsPXQ6ci5fcHJldj10LG51bGw9PT1lP3RoaXMuX2l0SGVhZD10OmUuX25leHQ9dCxudWxsPT09dGhpcy5fbGlua2VkUmVjb3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3IFRNKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1pLHR9X3JlbW92ZSh0KXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpfV91bmxpbmsodCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKHQpO2xldCBlPXQuX3ByZXYsaT10Ll9uZXh0O3JldHVybiBudWxsPT09ZT90aGlzLl9pdEhlYWQ9aTplLl9uZXh0PWksbnVsbD09PWk/dGhpcy5faXRUYWlsPWU6aS5fcHJldj1lLHR9X2FkZFRvTW92ZXModCxlKXtyZXR1cm4gdC5wcmV2aW91c0luZGV4PT09ZXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD10OnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPXQpLHR9X2FkZFRvUmVtb3ZhbHModCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IFRNKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW51bGwsdC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPXQsdC5fcHJldlJlbW92ZWQ9bnVsbCk6KHQuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD10KSx0fV9hZGRJZGVudGl0eUNoYW5nZSh0LGUpe3JldHVybiB0Lml0ZW09ZSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9dCx0fX0sQms9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19LFRNPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1wdXQodCl7bGV0IGU9dC50cmFja0J5SWQsaT10aGlzLm1hcC5nZXQoZSk7aXx8KGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQodCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD10LHQuX25leHREdXA9bnVsbCx0Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPXQsdC5fcHJldkR1cD10aGlzLl90YWlsLHQuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPXQpfWdldCh0LGUpe2xldCBpO2ZvcihpPXRoaXMuX2hlYWQ7bnVsbCE9PWk7aT1pLl9uZXh0RHVwKWlmKChudWxsPT09ZXx8ZTw9aS5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoaS50cmFja0J5SWQsdCkpcmV0dXJuIGk7cmV0dXJuIG51bGx9cmVtb3ZlKHQpe2xldCBlPXQuX3ByZXZEdXAsaT10Ll9uZXh0RHVwO3JldHVybiBudWxsPT09ZT90aGlzLl9oZWFkPWk6ZS5fbmV4dER1cD1pLG51bGw9PT1pP3RoaXMuX3RhaWw9ZTppLl9wcmV2RHVwPWUsbnVsbD09PXRoaXMuX2hlYWR9fSx0aGlzLm1hcC5zZXQoZSxpKSksaS5hZGQodCl9Z2V0KHQsZSl7bGV0IHI9dGhpcy5tYXAuZ2V0KHQpO3JldHVybiByP3IuZ2V0KHQsZSk6bnVsbH1yZW1vdmUodCl7bGV0IGU9dC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChlKS5yZW1vdmUodCkmJnRoaXMubWFwLmRlbGV0ZShlKSx0fWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19O2Z1bmN0aW9uIHk1KG4sdCxlKXtsZXQgaT1uLnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWkpcmV0dXJuIGk7bGV0IHI9MDtyZXR1cm4gZSYmaTxlLmxlbmd0aCYmKHI9ZVtpXSksaSt0K3J9dmFyIERNPWNsYXNze2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWFwfHxrUCh0KX1jcmVhdGUoKXtyZXR1cm4gbmV3IEhrfX0sSGs9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9jaGFuZ2VzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZH1mb3JFYWNoSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9tYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9Zm9yRWFjaENoYW5nZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dENoYW5nZWQpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoUmVtb3ZlZEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX1kaWZmKHQpe2lmKHQpe2lmKCEodCBpbnN0YW5jZW9mIE1hcHx8a1AodCkpKXRocm93IG5ldyBidCg5MDAsITEpfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgZT10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaCh0LChpLHIpPT57aWYoZSYmZS5rZXk9PT1yKXRoaXMuX21heWJlQWRkVG9DaGFuZ2VzKGUsaSksdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxlPWUuX25leHQ7ZWxzZXtsZXQgbz10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShyLGkpO2U9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoZSxvKX19KSxlKXtlLl9wcmV2JiYoZS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9ZTtmb3IobGV0IGk9ZTtudWxsIT09aTtpPWkuX25leHRSZW1vdmVkKWk9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShpLmtleSksaS5fbmV4dFJlbW92ZWQ9aS5fbmV4dCxpLnByZXZpb3VzVmFsdWU9aS5jdXJyZW50VmFsdWUsaS5jdXJyZW50VmFsdWU9bnVsbCxpLl9wcmV2PW51bGwsaS5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQodCxlKXtpZih0KXtsZXQgaT10Ll9wcmV2O3JldHVybiBlLl9uZXh0PXQsZS5fcHJldj1pLHQuX3ByZXY9ZSxpJiYoaS5fbmV4dD1lKSx0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9ZSksdGhpcy5fYXBwZW5kQWZ0ZXI9dCx0fXJldHVybiB0aGlzLl9hcHBlbmRBZnRlcj8odGhpcy5fYXBwZW5kQWZ0ZXIuX25leHQ9ZSxlLl9wcmV2PXRoaXMuX2FwcGVuZEFmdGVyKTp0aGlzLl9tYXBIZWFkPWUsdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxudWxsfV9nZXRPckNyZWF0ZVJlY29yZEZvcktleSh0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXtsZXQgcj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhyLGUpO2xldCBvPXIuX3ByZXYsYT1yLl9uZXh0O3JldHVybiBvJiYoby5fbmV4dD1hKSxhJiYoYS5fcHJldj1vKSxyLl9uZXh0PW51bGwsci5fcHJldj1udWxsLHJ9bGV0IGk9bmV3IHprKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LGkpLGkuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMoaSksaX1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCx0PXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0Q2hhbmdlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXModCxlKXtPYmplY3QuaXMoZSx0LmN1cnJlbnRWYWx1ZSl8fCh0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWUsdC5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0NoYW5nZXModCkpfV9hZGRUb0FkZGl0aW9ucyh0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX1fYWRkVG9DaGFuZ2VzKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX1fZm9yRWFjaCh0LGUpe3QgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKGUpOk9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+ZSh0W2ldLGkpKX19LHprPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMua2V5PXQsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19O2Z1bmN0aW9uIGI1KCl7cmV0dXJuIG5ldyB2bChbbmV3IEVNXSl9dmFyIHZsPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5mYWN0b3JpZXM9ZX1zdGF0aWMgY3JlYXRlKGUsaSl7aWYobnVsbCE9aSl7bGV0IHI9aS5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgbihlKX1zdGF0aWMgZXh0ZW5kKGUpe3JldHVybntwcm92aWRlOm4sdXNlRmFjdG9yeTppPT5uLmNyZWF0ZShlLGl8fGI1KCkpLGRlcHM6W1tuLG5ldyBpZCxuZXcgQWFdXX19ZmluZChlKXtsZXQgaT10aGlzLmZhY3Rvcmllcy5maW5kKHI9PnIuc3VwcG9ydHMoZSkpO2lmKG51bGwhPWkpcmV0dXJuIGk7dGhyb3cgbmV3IGJ0KDkwMSwhMSl9fXJldHVybiBuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpiNX0pLG59KSgpO2Z1bmN0aW9uIHY1KCl7cmV0dXJuIG5ldyBreShbbmV3IERNXSl9dmFyIGt5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5mYWN0b3JpZXM9ZX1zdGF0aWMgY3JlYXRlKGUsaSl7aWYoaSl7bGV0IHI9aS5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgbihlKX1zdGF0aWMgZXh0ZW5kKGUpe3JldHVybntwcm92aWRlOm4sdXNlRmFjdG9yeTppPT5uLmNyZWF0ZShlLGl8fHY1KCkpLGRlcHM6W1tuLG5ldyBpZCxuZXcgQWFdXX19ZmluZChlKXtsZXQgaT10aGlzLmZhY3Rvcmllcy5maW5kKHI9PnIuc3VwcG9ydHMoZSkpO2lmKGkpcmV0dXJuIGk7dGhyb3cgbmV3IGJ0KDkwMSwhMSl9fXJldHVybiBuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTp2NX0pLG59KSgpLF91ZT1bbmV3IERNXSx5dWU9W25ldyBFTV0sS2o9KG5ldyB2bCh5dWUpLG5ldyBreShfdWUpLEdQKG51bGwsImNvcmUiLFtdKSksSmo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oZ2MpKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7fSksbn0pKCk7ZnVuY3Rpb24gbncobil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygbj9uOm51bGwhPW4mJiJmYWxzZSIhPT1ufXZhciBidWU9IjoiLHB1PWNsYXNze3N0YXRpYyB6ZXJvKCl7cmV0dXJuIG5ldyBwdShbMF0pfXN0YXRpYyBvbmUoKXtyZXR1cm4gbmV3IHB1KFsxXSl9Y29uc3RydWN0b3IodCl7dGhpcy5kaWdpdHM9dH1jbG9uZSgpe3JldHVybiBuZXcgcHUodGhpcy5kaWdpdHMuc2xpY2UoKSl9YWRkKHQpe2xldCBlPXRoaXMuY2xvbmUoKTtyZXR1cm4gZS5hZGRUb1NlbGYodCksZX1hZGRUb1NlbGYodCl7bGV0IGU9TWF0aC5tYXgodGhpcy5kaWdpdHMubGVuZ3RoLHQuZGlnaXRzLmxlbmd0aCksaT0wO2ZvcihsZXQgcj0wO3I8ZTtyKyspe2xldCBvPWk7cjx0aGlzLmRpZ2l0cy5sZW5ndGgmJihvKz10aGlzLmRpZ2l0c1tyXSkscjx0LmRpZ2l0cy5sZW5ndGgmJihvKz10LmRpZ2l0c1tyXSksbz49MTA/KHRoaXMuZGlnaXRzW3JdPW8tMTAsaT0xKToodGhpcy5kaWdpdHNbcl09byxpPTApfWk+MCYmKHRoaXMuZGlnaXRzW2VdPTEpfXRvU3RyaW5nKCl7bGV0IHQ9IiI7Zm9yKGxldCBlPXRoaXMuZGlnaXRzLmxlbmd0aC0xO2U+PTA7ZS0tKXQrPXRoaXMuZGlnaXRzW2VdO3JldHVybiB0fX0saXc9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wb3dlck9mVHdvcz1bdF19Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5wb3dlck9mVHdvc1swXX1tdWx0aXBseUJ5KHQpe2xldCBlPXB1Lnplcm8oKTtyZXR1cm4gdGhpcy5tdWx0aXBseUJ5QW5kQWRkVG8odCxlKSxlfW11bHRpcGx5QnlBbmRBZGRUbyh0LGUpe2ZvcihsZXQgaT0wOzAhPT10O3Q+Pj49MSxpKyspaWYoMSZ0KXtsZXQgcj10aGlzLmdldE11bHRpcGxpZWRCeVBvd2VyT2ZUd28oaSk7ZS5hZGRUb1NlbGYocil9fWdldE11bHRpcGxpZWRCeVBvd2VyT2ZUd28odCl7Zm9yKGxldCBlPXRoaXMucG93ZXJPZlR3b3MubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLnBvd2VyT2ZUd29zW2UtMV07dGhpcy5wb3dlck9mVHdvc1tlXT1pLmFkZChpKX1yZXR1cm4gdGhpcy5wb3dlck9mVHdvc1t0XX19O25ldyBjbGFzc3t2aXNpdFRleHQodCxlKXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0LGUpe3JldHVybmBbJHt0LmNoaWxkcmVuLm1hcChpPT5pLnZpc2l0KHRoaXMpKS5qb2luKCIsICIpfV1gfXZpc2l0SWN1KHQsZSl7bGV0IGk9T2JqZWN0LmtleXModC5jYXNlcykubWFwKHI9PmAke3J9IHske3QuY2FzZXNbcl0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LmV4cHJlc3Npb259LCAke3QudHlwZX0sICR7aS5qb2luKCIsICIpfX1gfXZpc2l0VGFnUGxhY2Vob2xkZXIodCxlKXtyZXR1cm4gdC5pc1ZvaWQ/YDxwaCB0YWcgbmFtZT0iJHt0LnN0YXJ0TmFtZX0iLz5gOmA8cGggdGFnIG5hbWU9IiR7dC5zdGFydE5hbWV9Ij4ke3QuY2hpbGRyZW4ubWFwKGk9PmkudmlzaXQodGhpcykpLmpvaW4oIiwgIil9PC9waCBuYW1lPSIke3QuY2xvc2VOYW1lfSI+YH12aXNpdFBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHQudmFsdWU/YDxwaCBuYW1lPSIke3QubmFtZX0iPiR7dC52YWx1ZX08L3BoPmA6YDxwaCBuYW1lPSIke3QubmFtZX0iLz5gfXZpc2l0SWN1UGxhY2Vob2xkZXIodCxlKXtyZXR1cm5gPHBoIGljdSBuYW1lPSIke3QubmFtZX0iPiR7dC52YWx1ZS52aXNpdCh0aGlzKX08L3BoPmB9fSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5iYXNlPXQsdGhpcy5leHBvbmVudHM9W25ldyBpdyhwdS5vbmUoKSldfXRvVGhlUG93ZXJPZih0KXtmb3IobGV0IGU9dGhpcy5leHBvbmVudHMubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLmV4cG9uZW50c1tlLTFdLm11bHRpcGx5QnkodGhpcy5iYXNlKTt0aGlzLmV4cG9uZW50c1tlXT1uZXcgaXcoaSl9cmV0dXJuIHRoaXMuZXhwb25lbnRzW3RdfX0oMjU2KTt2YXIgcnc9ZnVuY3Rpb24obiwuLi50KXtpZihydy50cmFuc2xhdGUpe2xldCBpPXJ3LnRyYW5zbGF0ZShuLHQpO249aVswXSx0PWlbMV19bGV0IGU9JGooblswXSxuLnJhd1swXSk7Zm9yKGxldCBpPTE7aTxuLmxlbmd0aDtpKyspZSs9dFtpLTFdKyRqKG5baV0sbi5yYXdbaV0pO3JldHVybiBlfSx4dWU9IjoiO2Z1bmN0aW9uICRqKG4sdCl7cmV0dXJuIHQuY2hhckF0KDApPT09eHVlP24uc3Vic3RyaW5nKGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTEsaT0xO2U8bi5sZW5ndGg7ZSsrLGkrKylpZigiXFwiPT09dFtpXSlpKys7ZWxzZSBpZihuW2VdPT09YnVlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW50ZXJtaW5hdGVkICRsb2NhbGl6ZSBtZXRhZGF0YSBibG9jayBpbiAiJHt0fSIuYCl9KG4sdCkrMSk6bn0oKCk9PnR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpc3x8dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCkuJGxvY2FsaXplPXJ3O3ZhciAkUD1udWxsO2Z1bmN0aW9uIE1sKCl7cmV0dXJuICRQfXZhciBmdz1jbGFzc3t9LGt0PW5ldyBpZSgiRG9jdW1lbnRUb2tlbiIpLHVHPSgoKT0+e2NsYXNzIG57aGlzdG9yeUdvKGUpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBPKHBHKX0scHJvdmlkZWRJbjoicGxhdGZvcm0ifSksbn0pKCk7bmV3IGllKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpO3ZhciBwRz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdUd7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZSx0aGlzLl9sb2NhdGlvbj13aW5kb3cubG9jYXRpb24sdGhpcy5faGlzdG9yeT13aW5kb3cuaGlzdG9yeX1nZXRCYXNlSHJlZkZyb21ET00oKXtyZXR1cm4gTWwoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfW9uUG9wU3RhdGUoZSl7bGV0IGk9TWwoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBpLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixlLCExKSwoKT0+aS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZSl9b25IYXNoQ2hhbmdlKGUpe2xldCBpPU1sKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlLCExKSwoKT0+aS5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoZSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9ZX1wdXNoU3RhdGUoZSxpLHIpe3RHKCk/dGhpcy5faGlzdG9yeS5wdXNoU3RhdGUoZSxpLHIpOnRoaXMuX2xvY2F0aW9uLmhhc2g9cn1yZXBsYWNlU3RhdGUoZSxpLHIpe3RHKCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUoZSxpLHIpOnRoaXMuX2xvY2F0aW9uLmhhc2g9cn1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2hpc3RvcnkuZ28oZSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhrdCkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgcEcoTyhrdCkpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtmdW5jdGlvbiB0Rygpe3JldHVybiEhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlfWZ1bmN0aW9uIGZHKG4sdCl7aWYoMD09bi5sZW5ndGgpcmV0dXJuIHQ7aWYoMD09dC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9MDtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpJiZlKyssdC5zdGFydHNXaXRoKCIvIikmJmUrKywyPT1lP24rdC5zdWJzdHJpbmcoMSk6MT09ZT9uK3Q6bisiLyIrdH1mdW5jdGlvbiBuRyhuKXtsZXQgdD1uLm1hdGNoKC8jfFw/fCQvKSxlPXQmJnQuaW5kZXh8fG4ubGVuZ3RoO3JldHVybiBuLnNsaWNlKDAsZS0oIi8iPT09bltlLTFdPzE6MCkpK24uc2xpY2UoZSl9ZnVuY3Rpb24gZWYobil7cmV0dXJuIG4mJiI/IiE9PW5bMF0/Ij8iK246bn12YXIgck89KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIHBpKFN1ZSl9LHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksd3VlPW5ldyBpZSgiYXBwQmFzZUhyZWYiKSxTdWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJPe2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWUsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5fYmFzZUhyZWY9aT8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/cGkoa3QpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShlKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShlKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShlKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBmRyh0aGlzLl9iYXNlSHJlZixlKX1wYXRoKGU9ITEpe2xldCBpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrZWYodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiByJiZlP2Ake2l9JHtyfWA6aX1wdXNoU3RhdGUoZSxpLHIsbyl7bGV0IGE9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwocitlZihvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoZSxpLGEpfXJlcGxhY2VTdGF0ZShlLGkscixvKXtsZXQgYT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChyK2VmKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShlLGksYSl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGU9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyh1RyksTyh3dWUsOCkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEZ5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fc3ViamVjdD1uZXcgTCx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1lO2xldCBpPXRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlUGF0aD1mdW5jdGlvbihuKXtpZihuZXcgUmVnRXhwKCJeKGh0dHBzPzopPy8vIikudGVzdChuKSl7bGV0WyxlXT1uLnNwbGl0KC9cL1wvW15cL10rLyk7cmV0dXJuIGV9cmV0dXJuIG59KG5HKGlHKGkpKSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKHI9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpyLnN0YXRlLHR5cGU6ci50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChlPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGUpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0aEVxdWFsVG8oZSxpPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrZWYoaSkpfW5vcm1hbGl6ZShlKXtyZXR1cm4gbi5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24obix0KXtpZighbnx8IXQuc3RhcnRzV2l0aChuKSlyZXR1cm4gdDtsZXQgZT10LnN1YnN0cmluZyhuLmxlbmd0aCk7cmV0dXJuIiI9PT1lfHxbIi8iLCI7IiwiPyIsIiMiXS5pbmNsdWRlcyhlWzBdKT9lOnR9KHRoaXMuX2Jhc2VQYXRoLGlHKGUpKSl9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBlJiYiLyIhPT1lWzBdJiYoZT0iLyIrZSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwoZSl9Z28oZSxpPSIiLHI9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5wdXNoU3RhdGUociwiIixlLGkpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK2VmKGkpKSxyKX1yZXBsYWNlU3RhdGUoZSxpPSIiLHI9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5yZXBsYWNlU3RhdGUociwiIixlLGkpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK2VmKGkpKSxyKX1mb3J3YXJkKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuaGlzdG9yeUdvPy4oZSl9b25VcmxDaGFuZ2UoZSl7cmV0dXJuIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKGUpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbnx8KHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj10aGlzLnN1YnNjcmliZShpPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGkudXJsLGkuc3RhdGUpfSkpLCgpPT57bGV0IGk9dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmluZGV4T2YoZSk7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnNwbGljZShpLDEpLDA9PT10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMubGVuZ3RoJiYodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsKX19X25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhlPSIiLGkpe3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5mb3JFYWNoKHI9PnIoZSxpKSl9c3Vic2NyaWJlKGUsaSxyKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppLGNvbXBsZXRlOnJ9KX19cmV0dXJuIG4ubm9ybWFsaXplUXVlcnlQYXJhbXM9ZWYsbi5qb2luV2l0aFNsYXNoPWZHLG4uc3RyaXBUcmFpbGluZ1NsYXNoPW5HLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhyTykpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgRnkoTyhyTykpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGlHKG4pe3JldHVybiBuLnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgdXc9KCgpPT57cmV0dXJuKG49dXd8fCh1dz17fSkpW24uRGVjaW1hbD0wXT0iRGVjaW1hbCIsbltuLlBlcmNlbnQ9MV09IlBlcmNlbnQiLG5bbi5DdXJyZW5jeT0yXT0iQ3VycmVuY3kiLG5bbi5TY2llbnRpZmljPTNdPSJTY2llbnRpZmljIix1dzt2YXIgbn0pKCksRm89KCgpPT57cmV0dXJuKG49Rm98fChGbz17fSkpW24uRm9ybWF0PTBdPSJGb3JtYXQiLG5bbi5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixGbzt2YXIgbn0pKCksWGk9KCgpPT57cmV0dXJuKG49WGl8fChYaT17fSkpW24uTmFycm93PTBdPSJOYXJyb3ciLG5bbi5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLG5bbi5XaWRlPTJdPSJXaWRlIixuW24uU2hvcnQ9M109IlNob3J0IixYaTt2YXIgbn0pKCkscGE9KCgpPT57cmV0dXJuKG49cGF8fChwYT17fSkpW24uU2hvcnQ9MF09IlNob3J0IixuW24uTWVkaXVtPTFdPSJNZWRpdW0iLG5bbi5Mb25nPTJdPSJMb25nIixuW24uRnVsbD0zXT0iRnVsbCIscGE7dmFyIG59KSgpLEdvPSgoKT0+e3JldHVybihuPUdvfHwoR289e30pKVtuLkRlY2ltYWw9MF09IkRlY2ltYWwiLG5bbi5Hcm91cD0xXT0iR3JvdXAiLG5bbi5MaXN0PTJdPSJMaXN0IixuW24uUGVyY2VudFNpZ249M109IlBlcmNlbnRTaWduIixuW24uUGx1c1NpZ249NF09IlBsdXNTaWduIixuW24uTWludXNTaWduPTVdPSJNaW51c1NpZ24iLG5bbi5FeHBvbmVudGlhbD02XT0iRXhwb25lbnRpYWwiLG5bbi5TdXBlcnNjcmlwdGluZ0V4cG9uZW50PTddPSJTdXBlcnNjcmlwdGluZ0V4cG9uZW50IixuW24uUGVyTWlsbGU9OF09IlBlck1pbGxlIixuW24uSW5maW5pdHk9OV09IkluZmluaXR5IixuW24uTmFOPTEwXT0iTmFOIixuW24uVGltZVNlcGFyYXRvcj0xMV09IlRpbWVTZXBhcmF0b3IiLG5bbi5DdXJyZW5jeURlY2ltYWw9MTJdPSJDdXJyZW5jeURlY2ltYWwiLG5bbi5DdXJyZW5jeUdyb3VwPTEzXT0iQ3VycmVuY3lHcm91cCIsR287dmFyIG59KSgpO2Z1bmN0aW9uIG93KG4sdCl7cmV0dXJuIGtzKFBhKG4pW2dyLkRhdGVGb3JtYXRdLHQpfWZ1bmN0aW9uIGF3KG4sdCl7cmV0dXJuIGtzKFBhKG4pW2dyLlRpbWVGb3JtYXRdLHQpfWZ1bmN0aW9uIHN3KG4sdCl7cmV0dXJuIGtzKFBhKG4pW2dyLkRhdGVUaW1lRm9ybWF0XSx0KX1mdW5jdGlvbiBsZChuLHQpe2xldCBlPVBhKG4pLGk9ZVtnci5OdW1iZXJTeW1ib2xzXVt0XTtpZih0eXBlb2YgaT4idSIpe2lmKHQ9PT1Hby5DdXJyZW5jeURlY2ltYWwpcmV0dXJuIGVbZ3IuTnVtYmVyU3ltYm9sc11bR28uRGVjaW1hbF07aWYodD09PUdvLkN1cnJlbmN5R3JvdXApcmV0dXJuIGVbZ3IuTnVtYmVyU3ltYm9sc11bR28uR3JvdXBdfXJldHVybiBpfWZ1bmN0aW9uIG1HKG4pe2lmKCFuW2dyLkV4dHJhRGF0YV0pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV4dHJhIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICIke25bZ3IuTG9jYWxlSWRdfSIuIFVzZSAicmVnaXN0ZXJMb2NhbGVEYXRhIiB0byBsb2FkIG5ldyBkYXRhLiBTZWUgdGhlICJJMThuIGd1aWRlIiBvbiBhbmd1bGFyLmlvIHRvIGtub3cgbW9yZS5gKX1mdW5jdGlvbiBrcyhuLHQpe2ZvcihsZXQgZT10O2U+LTE7ZS0tKWlmKHR5cGVvZiBuW2VdPCJ1IilyZXR1cm4gbltlXTt0aHJvdyBuZXcgRXJyb3IoIkxvY2FsZSBkYXRhIEFQSTogbG9jYWxlIGRhdGEgdW5kZWZpbmVkIil9ZnVuY3Rpb24gWVAobil7bGV0W3QsZV09bi5zcGxpdCgiOiIpO3JldHVybntob3VyczordCxtaW51dGVzOitlfX12YXIgTnVlPS9eKFxkezQsfSktPyhcZFxkKS0/KFxkXGQpKD86VChcZFxkKSg/Ojo/KFxkXGQpKD86Oj8oXGRcZCkoPzpcLihcZCspKT8pPyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkpPyk/JC8sUHk9e30sQnVlPS8oKD86W15CRUdITE1PU1dZWmFiY2RobXN3eXonXSspfCg/OicoPzpbXiddfCcnKSonKXwoPzpHezEsNX18eXsxLDR9fFl7MSw0fXxNezEsNX18THsxLDV9fHd7MSwyfXxXezF9fGR7MSwyfXxFezEsNn18Y3sxLDZ9fGF7MSw1fXxiezEsNX18QnsxLDV9fGh7MSwyfXxIezEsMn18bXsxLDJ9fHN7MSwyfXxTezEsM318ensxLDR9fFp7MSw1fXxPezEsNH0pKShbXHNcU10qKS8sQ2w9KCgpPT57cmV0dXJuKG49Q2x8fChDbD17fSkpW24uU2hvcnQ9MF09IlNob3J0IixuW24uU2hvcnRHTVQ9MV09IlNob3J0R01UIixuW24uTG9uZz0yXT0iTG9uZyIsbltuLkV4dGVuZGVkPTNdPSJFeHRlbmRlZCIsQ2w7dmFyIG59KSgpLEFpPSgoKT0+e3JldHVybihuPUFpfHwoQWk9e30pKVtuLkZ1bGxZZWFyPTBdPSJGdWxsWWVhciIsbltuLk1vbnRoPTFdPSJNb250aCIsbltuLkRhdGU9Ml09IkRhdGUiLG5bbi5Ib3Vycz0zXT0iSG91cnMiLG5bbi5NaW51dGVzPTRdPSJNaW51dGVzIixuW24uU2Vjb25kcz01XT0iU2Vjb25kcyIsbltuLkZyYWN0aW9uYWxTZWNvbmRzPTZdPSJGcmFjdGlvbmFsU2Vjb25kcyIsbltuLkRheT03XT0iRGF5IixBaTt2YXIgbn0pKCksSWk9KCgpPT57cmV0dXJuKG49SWl8fChJaT17fSkpW24uRGF5UGVyaW9kcz0wXT0iRGF5UGVyaW9kcyIsbltuLkRheXM9MV09IkRheXMiLG5bbi5Nb250aHM9Ml09Ik1vbnRocyIsbltuLkVyYXM9M109IkVyYXMiLElpO3ZhciBufSkoKTtmdW5jdGlvbiBWdWUobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obil7aWYockcobikpcmV0dXJuIG47aWYoIm51bWJlciI9PXR5cGVvZiBuJiYhaXNOYU4obikpcmV0dXJuIG5ldyBEYXRlKG4pO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7aWYobj1uLnRyaW0oKSwvXihcZHs0fSgtXGR7MSwyfSgtXGR7MSwyfSk/KT8pJC8udGVzdChuKSl7bGV0W3Isbz0xLGE9MV09bi5zcGxpdCgiLSIpLm1hcChzPT4rcyk7cmV0dXJuIG13KHIsby0xLGEpfWxldCBpLGU9cGFyc2VGbG9hdChuKTtpZighaXNOYU4obi1lKSlyZXR1cm4gbmV3IERhdGUoZSk7aWYoaT1uLm1hdGNoKE51ZSkpcmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PW5ldyBEYXRlKDApLGU9MCxpPTAscj1uWzhdP3Quc2V0VVRDRnVsbFllYXI6dC5zZXRGdWxsWWVhcixvPW5bOF0/dC5zZXRVVENIb3Vyczp0LnNldEhvdXJzO25bOV0mJihlPU51bWJlcihuWzldK25bMTBdKSxpPU51bWJlcihuWzldK25bMTFdKSksci5jYWxsKHQsTnVtYmVyKG5bMV0pLE51bWJlcihuWzJdKS0xLE51bWJlcihuWzNdKSk7bGV0IGE9TnVtYmVyKG5bNF18fDApLWUscz1OdW1iZXIobls1XXx8MCktaSxsPU51bWJlcihuWzZdfHwwKSxjPU1hdGguZmxvb3IoMWUzKnBhcnNlRmxvYXQoIjAuIisobls3XXx8MCkpKTtyZXR1cm4gby5jYWxsKHQsYSxzLGwsYyksdH0oaSl9bGV0IHQ9bmV3IERhdGUobik7aWYoIXJHKHQpKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGNvbnZlcnQgIiR7bn0iIGludG8gYSBkYXRlYCk7cmV0dXJuIHR9KG4pO3Q9c2QoZSx0KXx8dDtsZXQgcyxhPVtdO2Zvcig7dDspe2lmKHM9QnVlLmV4ZWModCksIXMpe2EucHVzaCh0KTticmVha317YT1hLmNvbmNhdChzLnNsaWNlKDEpKTtsZXQgZD1hLnBvcCgpO2lmKCFkKWJyZWFrO3Q9ZH19bGV0IGw9ci5nZXRUaW1lem9uZU9mZnNldCgpO2kmJihsPWdHKGksbCkscj1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybiBmdW5jdGlvbihuLHQpe3JldHVybihuPW5ldyBEYXRlKG4uZ2V0VGltZSgpKSkuc2V0TWludXRlcyhuLmdldE1pbnV0ZXMoKSt0KSxufShuLC0xKihnRyh0LHIpLXIpKX0ocixpKSk7bGV0IGM9IiI7cmV0dXJuIGEuZm9yRWFjaChkPT57bGV0IHU9ZnVuY3Rpb24obil7aWYoUVBbbl0pcmV0dXJuIFFQW25dO2xldCB0O3N3aXRjaChuKXtjYXNlIkciOmNhc2UiR0ciOmNhc2UiR0dHIjp0PWFyKElpLkVyYXMsWGkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiR0dHRyI6dD1hcihJaS5FcmFzLFhpLldpZGUpO2JyZWFrO2Nhc2UiR0dHR0ciOnQ9YXIoSWkuRXJhcyxYaS5OYXJyb3cpO2JyZWFrO2Nhc2UieSI6dD1pbyhBaS5GdWxsWWVhciwxLDAsITEsITApO2JyZWFrO2Nhc2UieXkiOnQ9aW8oQWkuRnVsbFllYXIsMiwwLCEwLCEwKTticmVhaztjYXNlInl5eSI6dD1pbyhBaS5GdWxsWWVhciwzLDAsITEsITApO2JyZWFrO2Nhc2UieXl5eSI6dD1pbyhBaS5GdWxsWWVhciw0LDAsITEsITApO2JyZWFrO2Nhc2UiWSI6dD1kdygxKTticmVhaztjYXNlIllZIjp0PWR3KDIsITApO2JyZWFrO2Nhc2UiWVlZIjp0PWR3KDMpO2JyZWFrO2Nhc2UiWVlZWSI6dD1kdyg0KTticmVhaztjYXNlIk0iOmNhc2UiTCI6dD1pbyhBaS5Nb250aCwxLDEpO2JyZWFrO2Nhc2UiTU0iOmNhc2UiTEwiOnQ9aW8oQWkuTW9udGgsMiwxKTticmVhaztjYXNlIk1NTSI6dD1hcihJaS5Nb250aHMsWGkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiTU1NTSI6dD1hcihJaS5Nb250aHMsWGkuV2lkZSk7YnJlYWs7Y2FzZSJNTU1NTSI6dD1hcihJaS5Nb250aHMsWGkuTmFycm93KTticmVhaztjYXNlIkxMTCI6dD1hcihJaS5Nb250aHMsWGkuQWJicmV2aWF0ZWQsRm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJMTExMIjp0PWFyKElpLk1vbnRocyxYaS5XaWRlLEZvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTEwiOnQ9YXIoSWkuTW9udGhzLFhpLk5hcnJvdyxGby5TdGFuZGFsb25lKTticmVhaztjYXNlInciOnQ9WFAoMSk7YnJlYWs7Y2FzZSJ3dyI6dD1YUCgyKTticmVhaztjYXNlIlciOnQ9WFAoMSwhMCk7YnJlYWs7Y2FzZSJkIjp0PWlvKEFpLkRhdGUsMSk7YnJlYWs7Y2FzZSJkZCI6dD1pbyhBaS5EYXRlLDIpO2JyZWFrO2Nhc2UiYyI6Y2FzZSJjYyI6dD1pbyhBaS5EYXksMSk7YnJlYWs7Y2FzZSJjY2MiOnQ9YXIoSWkuRGF5cyxYaS5BYmJyZXZpYXRlZCxGby5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2MiOnQ9YXIoSWkuRGF5cyxYaS5XaWRlLEZvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2MiOnQ9YXIoSWkuRGF5cyxYaS5OYXJyb3csRm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjY2MiOnQ9YXIoSWkuRGF5cyxYaS5TaG9ydCxGby5TdGFuZGFsb25lKTticmVhaztjYXNlIkUiOmNhc2UiRUUiOmNhc2UiRUVFIjp0PWFyKElpLkRheXMsWGkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiRUVFRSI6dD1hcihJaS5EYXlzLFhpLldpZGUpO2JyZWFrO2Nhc2UiRUVFRUUiOnQ9YXIoSWkuRGF5cyxYaS5OYXJyb3cpO2JyZWFrO2Nhc2UiRUVFRUVFIjp0PWFyKElpLkRheXMsWGkuU2hvcnQpO2JyZWFrO2Nhc2UiYSI6Y2FzZSJhYSI6Y2FzZSJhYWEiOnQ9YXIoSWkuRGF5UGVyaW9kcyxYaS5BYmJyZXZpYXRlZCk7YnJlYWs7Y2FzZSJhYWFhIjp0PWFyKElpLkRheVBlcmlvZHMsWGkuV2lkZSk7YnJlYWs7Y2FzZSJhYWFhYSI6dD1hcihJaS5EYXlQZXJpb2RzLFhpLk5hcnJvdyk7YnJlYWs7Y2FzZSJiIjpjYXNlImJiIjpjYXNlImJiYiI6dD1hcihJaS5EYXlQZXJpb2RzLFhpLkFiYnJldmlhdGVkLEZvLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYiI6dD1hcihJaS5EYXlQZXJpb2RzLFhpLldpZGUsRm8uU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJiYmJiYiI6dD1hcihJaS5EYXlQZXJpb2RzLFhpLk5hcnJvdyxGby5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlIkIiOmNhc2UiQkIiOmNhc2UiQkJCIjp0PWFyKElpLkRheVBlcmlvZHMsWGkuQWJicmV2aWF0ZWQsRm8uRm9ybWF0LCEwKTticmVhaztjYXNlIkJCQkIiOnQ9YXIoSWkuRGF5UGVyaW9kcyxYaS5XaWRlLEZvLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCQiI6dD1hcihJaS5EYXlQZXJpb2RzLFhpLk5hcnJvdyxGby5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiaCI6dD1pbyhBaS5Ib3VycywxLC0xMik7YnJlYWs7Y2FzZSJoaCI6dD1pbyhBaS5Ib3VycywyLC0xMik7YnJlYWs7Y2FzZSJIIjp0PWlvKEFpLkhvdXJzLDEpO2JyZWFrO2Nhc2UiSEgiOnQ9aW8oQWkuSG91cnMsMik7YnJlYWs7Y2FzZSJtIjp0PWlvKEFpLk1pbnV0ZXMsMSk7YnJlYWs7Y2FzZSJtbSI6dD1pbyhBaS5NaW51dGVzLDIpO2JyZWFrO2Nhc2UicyI6dD1pbyhBaS5TZWNvbmRzLDEpO2JyZWFrO2Nhc2Uic3MiOnQ9aW8oQWkuU2Vjb25kcywyKTticmVhaztjYXNlIlMiOnQ9aW8oQWkuRnJhY3Rpb25hbFNlY29uZHMsMSk7YnJlYWs7Y2FzZSJTUyI6dD1pbyhBaS5GcmFjdGlvbmFsU2Vjb25kcywyKTticmVhaztjYXNlIlNTUyI6dD1pbyhBaS5GcmFjdGlvbmFsU2Vjb25kcywzKTticmVhaztjYXNlIloiOmNhc2UiWloiOmNhc2UiWlpaIjp0PWN3KENsLlNob3J0KTticmVhaztjYXNlIlpaWlpaIjp0PWN3KENsLkV4dGVuZGVkKTticmVhaztjYXNlIk8iOmNhc2UiT08iOmNhc2UiT09PIjpjYXNlInoiOmNhc2UienoiOmNhc2Uienp6Ijp0PWN3KENsLlNob3J0R01UKTticmVhaztjYXNlIk9PT08iOmNhc2UiWlpaWiI6Y2FzZSJ6enp6Ijp0PWN3KENsLkxvbmcpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIFFQW25dPXQsdH0oZCk7Yys9dT91KHIsZSxsKToiJyciPT09ZD8iJyI6ZC5yZXBsYWNlKC8oXid8JyQpL2csIiIpLnJlcGxhY2UoLycnL2csIiciKX0pLGN9ZnVuY3Rpb24gbXcobix0LGUpe2xldCBpPW5ldyBEYXRlKDApO3JldHVybiBpLnNldEZ1bGxZZWFyKG4sdCxlKSxpLnNldEhvdXJzKDAsMCwwKSxpfWZ1bmN0aW9uIHNkKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIFBhKG4pW2dyLkxvY2FsZUlkXX0obik7aWYoUHlbZV09UHlbZV18fHt9LFB5W2VdW3RdKXJldHVybiBQeVtlXVt0XTtsZXQgaT0iIjtzd2l0Y2godCl7Y2FzZSJzaG9ydERhdGUiOmk9b3cobixwYS5TaG9ydCk7YnJlYWs7Y2FzZSJtZWRpdW1EYXRlIjppPW93KG4scGEuTWVkaXVtKTticmVhaztjYXNlImxvbmdEYXRlIjppPW93KG4scGEuTG9uZyk7YnJlYWs7Y2FzZSJmdWxsRGF0ZSI6aT1vdyhuLHBhLkZ1bGwpO2JyZWFrO2Nhc2Uic2hvcnRUaW1lIjppPWF3KG4scGEuU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtVGltZSI6aT1hdyhuLHBhLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nVGltZSI6aT1hdyhuLHBhLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbFRpbWUiOmk9YXcobixwYS5GdWxsKTticmVhaztjYXNlInNob3J0IjpsZXQgcj1zZChuLCJzaG9ydFRpbWUiKSxvPXNkKG4sInNob3J0RGF0ZSIpO2k9bHcoc3cobixwYS5TaG9ydCksW3Isb10pO2JyZWFrO2Nhc2UibWVkaXVtIjpsZXQgYT1zZChuLCJtZWRpdW1UaW1lIikscz1zZChuLCJtZWRpdW1EYXRlIik7aT1sdyhzdyhuLHBhLk1lZGl1bSksW2Esc10pO2JyZWFrO2Nhc2UibG9uZyI6bGV0IGw9c2QobiwibG9uZ1RpbWUiKSxjPXNkKG4sImxvbmdEYXRlIik7aT1sdyhzdyhuLHBhLkxvbmcpLFtsLGNdKTticmVhaztjYXNlImZ1bGwiOmxldCBkPXNkKG4sImZ1bGxUaW1lIiksdT1zZChuLCJmdWxsRGF0ZSIpO2k9bHcoc3cobixwYS5GdWxsKSxbZCx1XSl9cmV0dXJuIGkmJihQeVtlXVt0XT1pKSxpfWZ1bmN0aW9uIGx3KG4sdCl7cmV0dXJuIHQmJihuPW4ucmVwbGFjZSgvXHsoW159XSspfS9nLGZ1bmN0aW9uKGUsaSl7cmV0dXJuIG51bGwhPXQmJmkgaW4gdD90W2ldOmV9KSksbn1mdW5jdGlvbiB4bChuLHQsZT0iLSIsaSxyKXtsZXQgbz0iIjsobjwwfHxyJiZuPD0wKSYmKHI/bj0xLW46KG49LW4sbz1lKSk7bGV0IGE9U3RyaW5nKG4pO2Zvcig7YS5sZW5ndGg8dDspYT0iMCIrYTtyZXR1cm4gaSYmKGE9YS5zbGljZShhLmxlbmd0aC10KSksbythfWZ1bmN0aW9uIGlvKG4sdCxlPTAsaT0hMSxyPSExKXtyZXR1cm4gZnVuY3Rpb24obyxhKXtsZXQgcz1mdW5jdGlvbihuLHQpe3N3aXRjaChuKXtjYXNlIEFpLkZ1bGxZZWFyOnJldHVybiB0LmdldEZ1bGxZZWFyKCk7Y2FzZSBBaS5Nb250aDpyZXR1cm4gdC5nZXRNb250aCgpO2Nhc2UgQWkuRGF0ZTpyZXR1cm4gdC5nZXREYXRlKCk7Y2FzZSBBaS5Ib3VyczpyZXR1cm4gdC5nZXRIb3VycygpO2Nhc2UgQWkuTWludXRlczpyZXR1cm4gdC5nZXRNaW51dGVzKCk7Y2FzZSBBaS5TZWNvbmRzOnJldHVybiB0LmdldFNlY29uZHMoKTtjYXNlIEFpLkZyYWN0aW9uYWxTZWNvbmRzOnJldHVybiB0LmdldE1pbGxpc2Vjb25kcygpO2Nhc2UgQWkuRGF5OnJldHVybiB0LmdldERheSgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERhdGVUeXBlIHZhbHVlICIke259Ii5gKX19KG4sbyk7aWYoKGU+MHx8cz4tZSkmJihzKz1lKSxuPT09QWkuSG91cnMpMD09PXMmJi0xMj09PWUmJihzPTEyKTtlbHNlIGlmKG49PT1BaS5GcmFjdGlvbmFsU2Vjb25kcylyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4geGwobiwzKS5zdWJzdHJpbmcoMCx0KX0ocyx0KTtsZXQgbD1sZChhLEdvLk1pbnVzU2lnbik7cmV0dXJuIHhsKHMsdCxsLGkscil9fWZ1bmN0aW9uIGFyKG4sdCxlPUZvLkZvcm1hdCxpPSExKXtyZXR1cm4gZnVuY3Rpb24ocixvKXtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSxyLG8pe3N3aXRjaChlKXtjYXNlIElpLk1vbnRoczpyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPVBhKG4pLG89a3MoW2lbZ3IuTW9udGhzRm9ybWF0XSxpW2dyLk1vbnRoc1N0YW5kYWxvbmVdXSx0KTtyZXR1cm4ga3MobyxlKX0odCxyLGkpW24uZ2V0TW9udGgoKV07Y2FzZSBJaS5EYXlzOnJldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9UGEobiksbz1rcyhbaVtnci5EYXlzRm9ybWF0XSxpW2dyLkRheXNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIGtzKG8sZSl9KHQscixpKVtuLmdldERheSgpXTtjYXNlIElpLkRheVBlcmlvZHM6bGV0IGE9bi5nZXRIb3VycygpLHM9bi5nZXRNaW51dGVzKCk7aWYobyl7bGV0IGM9ZnVuY3Rpb24obil7bGV0IHQ9UGEobik7cmV0dXJuIG1HKHQpLCh0W2dyLkV4dHJhRGF0YV1bMl18fFtdKS5tYXAoaT0+InN0cmluZyI9PXR5cGVvZiBpP1lQKGkpOltZUChpWzBdKSxZUChpWzFdKV0pfSh0KSxkPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1QYShuKTttRyhpKTtsZXQgbz1rcyhbaVtnci5FeHRyYURhdGFdWzBdLGlbZ3IuRXh0cmFEYXRhXVsxXV0sdCl8fFtdO3JldHVybiBrcyhvLGUpfHxbXX0odCxyLGkpLHU9Yy5maW5kSW5kZXgocD0+e2lmKEFycmF5LmlzQXJyYXkocCkpe2xldFtmLG1dPXAseT1hPj1mLmhvdXJzJiZzPj1mLm1pbnV0ZXMsTT1hPG0uaG91cnN8fGE9PT1tLmhvdXJzJiZzPG0ubWludXRlcztpZihmLmhvdXJzPG0uaG91cnMpe2lmKHkmJk0pcmV0dXJuITB9ZWxzZSBpZih5fHxNKXJldHVybiEwfWVsc2UgaWYocC5ob3Vycz09PWEmJnAubWludXRlcz09PXMpcmV0dXJuITA7cmV0dXJuITF9KTtpZigtMSE9PXUpcmV0dXJuIGRbdV19cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1QYShuKSxvPWtzKFtpW2dyLkRheVBlcmlvZHNGb3JtYXRdLGlbZ3IuRGF5UGVyaW9kc1N0YW5kYWxvbmVdXSx0KTtyZXR1cm4ga3MobyxlKX0odCxyLGkpW2E8MTI/MDoxXTtjYXNlIElpLkVyYXM6cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGtzKFBhKG4pW2dyLkVyYXNdLHQpfSh0LGkpW24uZ2V0RnVsbFllYXIoKTw9MD8wOjFdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHRyYW5zbGF0aW9uIHR5cGUgJHtlfWApfX0ocixvLG4sdCxlLGkpfX1mdW5jdGlvbiBjdyhuKXtyZXR1cm4gZnVuY3Rpb24odCxlLGkpe2xldCByPS0xKmksbz1sZChlLEdvLk1pbnVzU2lnbiksYT1yPjA/TWF0aC5mbG9vcihyLzYwKTpNYXRoLmNlaWwoci82MCk7c3dpdGNoKG4pe2Nhc2UgQ2wuU2hvcnQ6cmV0dXJuKHI+PTA/IisiOiIiKSt4bChhLDIsbykreGwoTWF0aC5hYnMociU2MCksMixvKTtjYXNlIENsLlNob3J0R01UOnJldHVybiJHTVQiKyhyPj0wPyIrIjoiIikreGwoYSwxLG8pO2Nhc2UgQ2wuTG9uZzpyZXR1cm4iR01UIisocj49MD8iKyI6IiIpK3hsKGEsMixvKSsiOiIreGwoTWF0aC5hYnMociU2MCksMixvKTtjYXNlIENsLkV4dGVuZGVkOnJldHVybiAwPT09aT8iWiI6KHI+PTA/IisiOiIiKSt4bChhLDIsbykrIjoiK3hsKE1hdGguYWJzKHIlNjApLDIsbyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gem9uZSB3aWR0aCAiJHtufSJgKX19fXZhciBqdWU9MCxwdz00O2Z1bmN0aW9uIGhHKG4pe3JldHVybiBtdyhuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKyhwdy1uLmdldERheSgpKSl9ZnVuY3Rpb24gWFAobix0PSExKXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcjtpZih0KXtsZXQgbz1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLDEpLmdldERheSgpLTEsYT1lLmdldERhdGUoKTtyPTErTWF0aC5mbG9vcigoYStvKS83KX1lbHNle2xldCBvPWhHKGUpLGE9ZnVuY3Rpb24obil7bGV0IHQ9bXcobixqdWUsMSkuZ2V0RGF5KCk7cmV0dXJuIG13KG4sMCwxKyh0PD1wdz9wdzpwdys3KS10KX0oby5nZXRGdWxsWWVhcigpKSxzPW8uZ2V0VGltZSgpLWEuZ2V0VGltZSgpO3I9MStNYXRoLnJvdW5kKHMvNjA0OGU1KX1yZXR1cm4geGwocixuLGxkKGksR28uTWludXNTaWduKSl9fWZ1bmN0aW9uIGR3KG4sdD0hMSl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7cmV0dXJuIHhsKGhHKGUpLmdldEZ1bGxZZWFyKCksbixsZChpLEdvLk1pbnVzU2lnbiksdCl9fXZhciBRUD17fTtmdW5jdGlvbiBnRyhuLHQpe249bi5yZXBsYWNlKC86L2csIiIpO2xldCBlPURhdGUucGFyc2UoIkphbiAwMSwgMTk3MCAwMDowMDowMCAiK24pLzZlNDtyZXR1cm4gaXNOYU4oZSk/dDplfWZ1bmN0aW9uIHJHKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKG4udmFsdWVPZigpKX12YXIgWnVlPS9eKFxkKyk/XC4oKFxkKykoLShcZCspKT8pPyQvLG9HPTIyLGh3PSIuIixPeT0iMCIsS3VlPSI7IixKdWU9IiwiLFpQPSIjIjtmdW5jdGlvbiBvTyhuLHQsZSl7bGV0IGk9ZnVuY3Rpb24obix0KXtyZXR1cm4gUGEobilbZ3IuTnVtYmVyRm9ybWF0c11bdF19KHQsdXcuRGVjaW1hbCkscj1mdW5jdGlvbihuLHQ9Ii0iKXtsZXQgZT17bWluSW50OjEsbWluRnJhYzowLG1heEZyYWM6MCxwb3NQcmU6IiIscG9zU3VmOiIiLG5lZ1ByZToiIixuZWdTdWY6IiIsZ1NpemU6MCxsZ1NpemU6MH0saT1uLnNwbGl0KEt1ZSkscj1pWzBdLG89aVsxXSxhPS0xIT09ci5pbmRleE9mKGh3KT9yLnNwbGl0KGh3KTpbci5zdWJzdHJpbmcoMCxyLmxhc3RJbmRleE9mKE95KSsxKSxyLnN1YnN0cmluZyhyLmxhc3RJbmRleE9mKE95KSsxKV0scz1hWzBdLGw9YVsxXXx8IiI7ZS5wb3NQcmU9cy5zdWJzdHJpbmcoMCxzLmluZGV4T2YoWlApKTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl7bGV0IHU9bC5jaGFyQXQoZCk7dT09PU95P2UubWluRnJhYz1lLm1heEZyYWM9ZCsxOnU9PT1aUD9lLm1heEZyYWM9ZCsxOmUucG9zU3VmKz11fWxldCBjPXMuc3BsaXQoSnVlKTtpZihlLmdTaXplPWNbMV0/Y1sxXS5sZW5ndGg6MCxlLmxnU2l6ZT1jWzJdfHxjWzFdPyhjWzJdfHxjWzFdKS5sZW5ndGg6MCxvKXtsZXQgZD1yLmxlbmd0aC1lLnBvc1ByZS5sZW5ndGgtZS5wb3NTdWYubGVuZ3RoLHU9by5pbmRleE9mKFpQKTtlLm5lZ1ByZT1vLnN1YnN0cmluZygwLHUpLnJlcGxhY2UoLycvZywiIiksZS5uZWdTdWY9by5zbGljZSh1K2QpLnJlcGxhY2UoLycvZywiIil9ZWxzZSBlLm5lZ1ByZT10K2UucG9zUHJlLGUubmVnU3VmPWUucG9zU3VmO3JldHVybiBlfShpLGxkKHQsR28uTWludXNTaWduKSk7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscixvLGE9ITEpe2xldCBzPSIiLGw9ITE7aWYoaXNGaW5pdGUobikpe2xldCBjPWZ1bmN0aW9uKG4pe2xldCBpLHIsbyxhLHMsdD1NYXRoLmFicyhuKSsiIixlPTA7Zm9yKChyPXQuaW5kZXhPZihodykpPi0xJiYodD10LnJlcGxhY2UoaHcsIiIpKSwobz10LnNlYXJjaCgvZS9pKSk+MD8ocjwwJiYocj1vKSxyKz0rdC5zbGljZShvKzEpLHQ9dC5zdWJzdHJpbmcoMCxvKSk6cjwwJiYocj10Lmxlbmd0aCksbz0wO3QuY2hhckF0KG8pPT09T3k7bysrKTtpZihvPT09KHM9dC5sZW5ndGgpKWk9WzBdLHI9MTtlbHNle2ZvcihzLS07dC5jaGFyQXQocyk9PT1PeTspcy0tO2ZvcihyLT1vLGk9W10sYT0wO288PXM7bysrLGErKylpW2FdPU51bWJlcih0LmNoYXJBdChvKSl9cmV0dXJuIHI+b0cmJihpPWkuc3BsaWNlKDAsb0ctMSksZT1yLTEscj0xKSx7ZGlnaXRzOmksZXhwb25lbnQ6ZSxpbnRlZ2VyTGVuOnJ9fShuKTthJiYoYz1mdW5jdGlvbihuKXtpZigwPT09bi5kaWdpdHNbMF0pcmV0dXJuIG47bGV0IHQ9bi5kaWdpdHMubGVuZ3RoLW4uaW50ZWdlckxlbjtyZXR1cm4gbi5leHBvbmVudD9uLmV4cG9uZW50Kz0yOigwPT09dD9uLmRpZ2l0cy5wdXNoKDAsMCk6MT09PXQmJm4uZGlnaXRzLnB1c2goMCksbi5pbnRlZ2VyTGVuKz0yKSxufShjKSk7bGV0IGQ9dC5taW5JbnQsdT10Lm1pbkZyYWMscD10Lm1heEZyYWM7aWYobyl7bGV0IHg9by5tYXRjaChadWUpO2lmKG51bGw9PT14KXRocm93IG5ldyBFcnJvcihgJHtvfSBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvYCk7bGV0IFI9eFsxXSxBPXhbM10sSD14WzVdO251bGwhPVImJihkPUtQKFIpKSxudWxsIT1BJiYodT1LUChBKSksbnVsbCE9SD9wPUtQKEgpOm51bGwhPUEmJnU+cCYmKHA9dSl9IWZ1bmN0aW9uKG4sdCxlKXtpZih0PmUpdGhyb3cgbmV3IEVycm9yKGBUaGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGZyYWN0aW9uICgke3R9KSBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bSAoJHtlfSkuYCk7bGV0IGk9bi5kaWdpdHMscj1pLmxlbmd0aC1uLmludGVnZXJMZW4sbz1NYXRoLm1pbihNYXRoLm1heCh0LHIpLGUpLGE9bytuLmludGVnZXJMZW4scz1pW2FdO2lmKGE+MCl7aS5zcGxpY2UoTWF0aC5tYXgobi5pbnRlZ2VyTGVuLGEpKTtmb3IobGV0IHU9YTt1PGkubGVuZ3RoO3UrKylpW3VdPTB9ZWxzZXtyPU1hdGgubWF4KDAsciksbi5pbnRlZ2VyTGVuPTEsaS5sZW5ndGg9TWF0aC5tYXgoMSxhPW8rMSksaVswXT0wO2ZvcihsZXQgdT0xO3U8YTt1KyspaVt1XT0wfWlmKHM+PTUpaWYoYS0xPDApe2ZvcihsZXQgdT0wO3U+YTt1LS0paS51bnNoaWZ0KDApLG4uaW50ZWdlckxlbisrO2kudW5zaGlmdCgxKSxuLmludGVnZXJMZW4rK31lbHNlIGlbYS0xXSsrO2Zvcig7cjxNYXRoLm1heCgwLG8pO3IrKylpLnB1c2goMCk7bGV0IGw9MCE9PW8sYz10K24uaW50ZWdlckxlbixkPWkucmVkdWNlUmlnaHQoZnVuY3Rpb24odSxwLGYsbSl7cmV0dXJuIG1bZl09KHArPXUpPDEwP3A6cC0xMCxsJiYoMD09PW1bZl0mJmY+PWM/bS5wb3AoKTpsPSExKSxwPj0xMD8xOjB9LDApO2QmJihpLnVuc2hpZnQoZCksbi5pbnRlZ2VyTGVuKyspfShjLHUscCk7bGV0IGY9Yy5kaWdpdHMsbT1jLmludGVnZXJMZW4seT1jLmV4cG9uZW50LE09W107Zm9yKGw9Zi5ldmVyeSh4PT4heCk7bTxkO20rKylmLnVuc2hpZnQoMCk7Zm9yKDttPDA7bSsrKWYudW5zaGlmdCgwKTttPjA/TT1mLnNwbGljZShtLGYubGVuZ3RoKTooTT1mLGY9WzBdKTtsZXQgdj1bXTtmb3IoZi5sZW5ndGg+PXQubGdTaXplJiZ2LnVuc2hpZnQoZi5zcGxpY2UoLXQubGdTaXplLGYubGVuZ3RoKS5qb2luKCIiKSk7Zi5sZW5ndGg+dC5nU2l6ZTspdi51bnNoaWZ0KGYuc3BsaWNlKC10LmdTaXplLGYubGVuZ3RoKS5qb2luKCIiKSk7Zi5sZW5ndGgmJnYudW5zaGlmdChmLmpvaW4oIiIpKSxzPXYuam9pbihsZChlLGkpKSxNLmxlbmd0aCYmKHMrPWxkKGUscikrTS5qb2luKCIiKSkseSYmKHMrPWxkKGUsR28uRXhwb25lbnRpYWwpKyIrIit5KX1lbHNlIHM9bGQoZSxHby5JbmZpbml0eSk7cmV0dXJuIHM9bjwwJiYhbD90Lm5lZ1ByZStzK3QubmVnU3VmOnQucG9zUHJlK3MrdC5wb3NTdWYsc30obixyLHQsR28uR3JvdXAsR28uRGVjaW1hbCxlKX1mdW5jdGlvbiBLUChuKXtsZXQgdD1wYXJzZUludChuKTtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK24pO3JldHVybiB0fWZ1bmN0aW9uIF93KG4sdCl7dD1lbmNvZGVVUklDb21wb25lbnQodCk7Zm9yKGxldCBlIG9mIG4uc3BsaXQoIjsiKSl7bGV0IGk9ZS5pbmRleE9mKCI9IiksW3Isb109LTE9PWk/W2UsIiJdOltlLnNsaWNlKDAsaSksZS5zbGljZShpKzEpXTtpZihyLnRyaW0oKT09PXQpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChvKX1yZXR1cm4gbnVsbH12YXIgSlA9L1xzKy8sYUc9W10sYm49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9ZSx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9aSx0aGlzLl9uZ0VsPXIsdGhpcy5fcmVuZGVyZXI9byx0aGlzLmluaXRpYWxDbGFzc2VzPWFHLHRoaXMuc3RhdGVNYXA9bmV3IE1hcH1zZXQga2xhc3MoZSl7dGhpcy5pbml0aWFsQ2xhc3Nlcz1udWxsIT1lP2UudHJpbSgpLnNwbGl0KEpQKTphR31zZXQgbmdDbGFzcyhlKXt0aGlzLnJhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgZT9lLnRyaW0oKS5zcGxpdChKUCk6ZX1uZ0RvQ2hlY2soKXtmb3IobGV0IGkgb2YgdGhpcy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShpLCEwKTtsZXQgZT10aGlzLnJhd0NsYXNzO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBTZXQpZm9yKGxldCBpIG9mIGUpdGhpcy5fdXBkYXRlU3RhdGUoaSwhMCk7ZWxzZSBpZihudWxsIT1lKWZvcihsZXQgaSBvZiBPYmplY3Qua2V5cyhlKSl0aGlzLl91cGRhdGVTdGF0ZShpLEJvb2xlYW4oZVtpXSkpO3RoaXMuX2FwcGx5U3RhdGVEaWZmKCl9X3VwZGF0ZVN0YXRlKGUsaSl7bGV0IHI9dGhpcy5zdGF0ZU1hcC5nZXQoZSk7dm9pZCAwIT09cj8oci5lbmFibGVkIT09aSYmKHIuY2hhbmdlZD0hMCxyLmVuYWJsZWQ9aSksci50b3VjaGVkPSEwKTp0aGlzLnN0YXRlTWFwLnNldChlLHtlbmFibGVkOmksY2hhbmdlZDohMCx0b3VjaGVkOiEwfSl9X2FwcGx5U3RhdGVEaWZmKCl7Zm9yKGxldCBlIG9mIHRoaXMuc3RhdGVNYXApe2xldCBpPWVbMF0scj1lWzFdO3IuY2hhbmdlZD8odGhpcy5fdG9nZ2xlQ2xhc3MoaSxyLmVuYWJsZWQpLHIuY2hhbmdlZD0hMSk6ci50b3VjaGVkfHwoci5lbmFibGVkJiZ0aGlzLl90b2dnbGVDbGFzcyhpLCExKSx0aGlzLnN0YXRlTWFwLmRlbGV0ZShpKSksci50b3VjaGVkPSExfX1fdG9nZ2xlQ2xhc3MoZSxpKXsoZT1lLnRyaW0oKSkubGVuZ3RoPjAmJmUuc3BsaXQoSlApLmZvckVhY2gocj0+e2k/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHZsKSxDKGt5KSxDKGJlKSxDKGRjKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLGRuPSgoKT0+e2NsYXNzIG57c2V0IG5nRm9yT2YoZSl7dGhpcy5fbmdGb3JPZj1lLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMH1zZXQgbmdGb3JUcmFja0J5KGUpe3RoaXMuX3RyYWNrQnlGbj1lfWdldCBuZ0ZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufWNvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl92aWV3Q29udGFpbmVyPWUsdGhpcy5fdGVtcGxhdGU9aSx0aGlzLl9kaWZmZXJzPXIsdGhpcy5fbmdGb3JPZj1udWxsLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMCx0aGlzLl9kaWZmZXI9bnVsbH1zZXQgbmdGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fdGVtcGxhdGU9ZSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7bGV0IGU9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpKX1pZih0aGlzLl9kaWZmZXIpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2UmJnRoaXMuX2FwcGx5Q2hhbmdlcyhlKX19X2FwcGx5Q2hhbmdlcyhlKXtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyO2UuZm9yRWFjaE9wZXJhdGlvbigocixvLGEpPT57aWYobnVsbD09ci5wcmV2aW91c0luZGV4KWkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9aSx0aGlzLmNvdW50PXJ9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX0oci5pdGVtLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT1hP3ZvaWQgMDphKTtlbHNlIGlmKG51bGw9PWEpaS5yZW1vdmUobnVsbD09PW8/dm9pZCAwOm8pO2Vsc2UgaWYobnVsbCE9PW8pe2xldCBzPWkuZ2V0KG8pO2kubW92ZShzLGEpLGxHKHMscil9fSk7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyPG87cisrKXtsZXQgcz1pLmdldChyKS5jb250ZXh0O3MuaW5kZXg9cixzLmNvdW50PW8scy5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9ZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2Uocj0+e2xHKGkuZ2V0KHIuY3VycmVudEluZGV4KSxyKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoWm4pLEMoU2kpLEModmwpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJuZ0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksbn0pKCk7ZnVuY3Rpb24gbEcobix0KXtuLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX12YXIgRmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl9jb250ZXh0PW5ldyB0Tyx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWl9c2V0IG5nSWYoZSl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWUsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihlKXtjRygibmdJZlRoZW4iLGUpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShlKXtjRygibmdJZkVsc2UiLGUpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1lLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfV91cGRhdGVWaWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoWm4pLEMoU2kpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLHRPPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH19O2Z1bmN0aW9uIGNHKG4sdCl7aWYodCYmIXQuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtufSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtobyh0KX0nLmApfXZhciBndz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl90ZW1wbGF0ZVJlZj1lLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZSh0KXt0JiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiF0JiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19LCRpPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0Vmlld3M9W10sdGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1zZXQgbmdTd2l0Y2goZSl7dGhpcy5fbmdTd2l0Y2g9ZSwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KGUpe3RoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGUpfV9tYXRjaENhc2UoZSl7bGV0IGk9ZT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9dGhpcy5fbGFzdENhc2VzTWF0Y2hlZHx8aSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXgrKyx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9PT10aGlzLl9jYXNlQ291bnQmJih0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoIXRoaXMuX2xhc3RDYXNlc01hdGNoZWQpLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITEpLGl9X3VwZGF0ZURlZmF1bHRDYXNlcyhlKXtpZih0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoPjAmJmUhPT10aGlzLl9kZWZhdWx0VXNlZCl7dGhpcy5fZGVmYXVsdFVzZWQ9ZTtmb3IobGV0IGkgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKWkuZW5mb3JjZVN0YXRlKGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLHNyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMubmdTd2l0Y2g9cixyLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgZ3coZSxpKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhabiksQyhTaSksQygkaSw5KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLGZ1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3IuX2FkZERlZmF1bHQobmV3IGd3KGUsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFpuKSxDKFNpKSxDKCRpLDkpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hEZWZhdWx0IiwiIl1dLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxtdT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ0VsPWUsdGhpcy5fZGlmZmVycz1pLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5fbmdTdHlsZT1udWxsLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ1N0eWxlKGUpe3RoaXMuX25nU3R5bGU9ZSwhdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtsZXQgZT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTtlJiZ0aGlzLl9hcHBseUNoYW5nZXMoZSl9fV9zZXRTdHlsZShlLGkpe2xldFtyLG9dPWUuc3BsaXQoIi4iKSxhPS0xPT09ci5pbmRleE9mKCItIik/dm9pZCAwOkVzLkRhc2hDYXNlO251bGwhPWk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIsbz9gJHtpfSR7b31gOmksYSk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIsYSl9X2FwcGx5Q2hhbmdlcyhlKXtlLmZvckVhY2hSZW1vdmVkSXRlbShpPT50aGlzLl9zZXRTdHlsZShpLmtleSxudWxsKSksZS5mb3JFYWNoQWRkZWRJdGVtKGk9PnRoaXMuX3NldFN0eWxlKGkua2V5LGkuY3VycmVudFZhbHVlKSksZS5mb3JFYWNoQ2hhbmdlZEl0ZW0oaT0+dGhpcy5fc2V0U3R5bGUoaS5rZXksaS5jdXJyZW50VmFsdWUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSksQyhreSksQyhkYykpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxNbz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl92aWV3UmVmPW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoZSl7aWYoZS5uZ1RlbXBsYXRlT3V0bGV0fHxlLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7bGV0IGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZpLnJlbW92ZShpLmluZGV4T2YodGhpcy5fdmlld1JlZikpLHRoaXMubmdUZW1wbGF0ZU91dGxldCl7bGV0e25nVGVtcGxhdGVPdXRsZXQ6cixuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpvLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjphfT10aGlzO3RoaXMuX3ZpZXdSZWY9aS5jcmVhdGVFbWJlZGRlZFZpZXcocixvLGE/e2luamVjdG9yOmF9OnZvaWQgMCl9ZWxzZSB0aGlzLl92aWV3UmVmPW51bGx9ZWxzZSB0aGlzLl92aWV3UmVmJiZlLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiZ0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiYodGhpcy5fdmlld1JlZi5jb250ZXh0PXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFpuKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbR3RdfSksbn0pKCk7ZnVuY3Rpb24geXcobix0KXtyZXR1cm4gbmV3IGJ0KDIxMDAsITEpfXZhciBvcGU9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSxpPT57dGhyb3cgaX0pfWRpc3Bvc2UodCl7fX0sYXBlPW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppPT57dGhyb3cgaX19KX1kaXNwb3NlKHQpe3QudW5zdWJzY3JpYmUoKX19LGx0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsLHRoaXMuX3JlZj1lfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGUpe3JldHVybiB0aGlzLl9vYmo/ZSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGUpKTp0aGlzLl9sYXRlc3RWYWx1ZTooZSYmdGhpcy5fc3Vic2NyaWJlKGUpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKGUpe3RoaXMuX29iaj1lLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGUpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oZSxpPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShlLGkpKX1fc2VsZWN0U3RyYXRlZ3koZSl7aWYoVGgoZSkpcmV0dXJuIG9wZTtpZihQUChlKSlyZXR1cm4gYXBlO3Rocm93IHl3KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoZSxpKXtlPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9aSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEZ0LDE2KSl9LG4uXHUwMjc1cGlwZT1jaCh7bmFtZToiYXN5bmMiLHR5cGU6bixwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxscGU9bmV3IGllKCJEQVRFX1BJUEVfREVGQVVMVF9USU1FWk9ORSIpLGNwZT1uZXcgaWUoIkRBVEVfUElQRV9ERUZBVUxUX09QVElPTlMiKSxJaD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmxvY2FsZT1lLHRoaXMuZGVmYXVsdFRpbWV6b25lPWksdGhpcy5kZWZhdWx0T3B0aW9ucz1yfXRyYW5zZm9ybShlLGkscixvKXtpZihudWxsPT1lfHwiIj09PWV8fGUhPWUpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBWdWUoZSxpPz90aGlzLmRlZmF1bHRPcHRpb25zPy5kYXRlRm9ybWF0Pz8ibWVkaXVtRGF0ZSIsb3x8dGhpcy5sb2NhbGUscj8/dGhpcy5kZWZhdWx0T3B0aW9ucz8udGltZXpvbmU/P3RoaXMuZGVmYXVsdFRpbWV6b25lPz92b2lkIDApfWNhdGNoKGEpe3Rocm93IHl3KCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGFkLDE2KSxDKGxwZSwyNCksQyhjcGUsMjQpKX0sbi5cdTAyNzVwaXBlPWNoKHtuYW1lOiJkYXRlIix0eXBlOm4scHVyZTohMCxzdGFuZGFsb25lOiEwfSksbn0pKCksUHM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9sb2NhbGU9ZX10cmFuc2Zvcm0oZSxpLHIpe2lmKCFmdW5jdGlvbihuKXtyZXR1cm4hKG51bGw9PW58fCIiPT09bnx8biE9bil9KGUpKXJldHVybiBudWxsO3I9cnx8dGhpcy5fbG9jYWxlO3RyeXtsZXQgbz1mdW5jdGlvbihuKXtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFpc05hTihOdW1iZXIobiktcGFyc2VGbG9hdChuKSkpcmV0dXJuIE51bWJlcihuKTtpZigibnVtYmVyIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKGAke259IGlzIG5vdCBhIG51bWJlcmApO3JldHVybiBufShlKTtyZXR1cm4gb08obyxyLGkpfWNhdGNoKG8pe3Rocm93IHl3KCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGFkLDE2KSl9LG4uXHUwMjc1cGlwZT1jaCh7bmFtZToibnVtYmVyIix0eXBlOm4scHVyZTohMCxzdGFuZGFsb25lOiEwfSksbn0pKCksX0c9KCgpPT57Y2xhc3Mgbnt0cmFuc2Zvcm0oZSxpLHIpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7aWYoIXRoaXMuc3VwcG9ydHMoZSkpdGhyb3cgeXcoKTtyZXR1cm4gZS5zbGljZShpLHIpfXN1cHBvcnRzKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8QXJyYXkuaXNBcnJheShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cGlwZT1jaCh7bmFtZToic2xpY2UiLHR5cGU6bixwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxUZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7fSksbn0pKCksYU89ImJyb3dzZXIiO2Z1bmN0aW9uIGJ3KG4pe3JldHVybiBuPT09YU99bmV3IGhsKCIxNS4yLjkiKTt2YXIgdGY9Y2xhc3N7fTtmdW5jdGlvbiBocGUobil7cmV0dXJuIG4uc3RhcnRzV2l0aCgiLyIpP24uc2xpY2UoMSk6bn12YXIgZ3BlPW49Pm4uc3JjLF9wZT1uZXcgaWUoIkltYWdlTG9hZGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+Z3BlfSk7ZnVuY3Rpb24gdncobix0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciIT10eXBlb2Ygbnx8IiI9PT1uLnRyaW0oKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG5ldyBVUkwobiksITB9Y2F0Y2h7cmV0dXJuITF9fShpKXx8ZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgYnQoMjk1OSwhMSl9KCksaT1mdW5jdGlvbihuKXtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpP24uc2xpY2UoMCwtMSk6bn0oaSksW3twcm92aWRlOl9wZSx1c2VWYWx1ZTphPT4oZnVuY3Rpb24obil7cmV0dXJuL15odHRwcz86XC9cLy8udGVzdChuKX0oYS5zcmMpJiZmdW5jdGlvbihuLHQpe3Rocm93IG5ldyBidCgyOTU5LCExKX0oKSxuKGksey4uLmEsc3JjOmhwZShhLnNyYyl9KSl9XX19dncoZnVuY3Rpb24obix0KXtsZXQgZT0iZm9ybWF0PWF1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3aWR0aD0ke3Qud2lkdGh9YCksYCR7bn0vY2RuLWNnaS9pbWFnZS8ke2V9LyR7dC5zcmN9YH0pLHZ3KGZ1bmN0aW9uKG4sdCl7bGV0IGU9ImZfYXV0byxxX2F1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3XyR7dC53aWR0aH1gKSxgJHtufS9pbWFnZS91cGxvYWQvJHtlfS8ke3Quc3JjfWB9KSx2dyhmdW5jdGlvbihuLHQpe2xldCByLHtzcmM6ZSx3aWR0aDppfT10O3JldHVybiByPWk/W24sYHRyOnctJHtpfWAsZV06W24sZV0sci5qb2luKCIvIil9KSx2dyhmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBVUkwoYCR7bn0vJHt0LnNyY31gKTtyZXR1cm4gZS5zZWFyY2hQYXJhbXMuc2V0KCJhdXRvIiwiZm9ybWF0IiksdC53aWR0aCYmZS5zZWFyY2hQYXJhbXMuc2V0KCJ3Iix0LndpZHRoLnRvU3RyaW5nKCkpLGUuaHJlZn0pLG5ldyBpZSgiUFJFQ09OTkVDVF9DSEVDS19CTE9DS0xJU1QiKSxuZXcgaWUoIk5HX09QVElNSVpFRF9QUkVMT0FERURfSU1BR0VTIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3IFNldH0pO3ZhciB4dyx3cGU9e2JyZWFrcG9pbnRzOlsxNiwzMiw0OCw2NCw5NiwxMjgsMjU2LDM4NCw2NDAsNzUwLDgyOCwxMDgwLDEyMDAsMTkyMCwyMDQ4LDM4NDBdfSxsTz0obmV3IGllKCJJbWFnZUNvbmZpZyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndwZX0pLGNsYXNzIGV4dGVuZHMgZnd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9ITB9fSksVnk9Y2xhc3MgZXh0ZW5kcyBsT3tzdGF0aWMgbWFrZUN1cnJlbnQoKXt2YXIgbjtuPW5ldyBWeSwkUHx8KCRQPW4pfW9uQW5kQ2FuY2VsKHQsZSxpKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsaSwhMSksKCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxpLCExKX19ZGlzcGF0Y2hFdmVudCh0LGUpe3QuZGlzcGF0Y2hFdmVudChlKX1yZW1vdmUodCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFyZ2V0KHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9Z2V0QmFzZUhyZWYodCl7bGV0IGU9KEx5PUx5fHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIikpP0x5LmdldEF0dHJpYnV0ZSgiaHJlZiIpOm51bGw7cmV0dXJuIG51bGw9PWU/bnVsbDpmdW5jdGlvbihuKXsoeHc9eHd8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkuc2V0QXR0cmlidXRlKCJocmVmIixuKTtsZXQgdD14dy5wYXRobmFtZTtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKT90OmAvJHt0fWB9KGUpfXJlc2V0QmFzZUVsZW1lbnQoKXtMeT1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH1nZXRDb29raWUodCl7cmV0dXJuIF93KGRvY3VtZW50LmNvb2tpZSx0KX19LEx5PW51bGwsTUc9bmV3IGllKCJUUkFOU0lUSU9OX0lEIiksSXBlPVt7cHJvdmlkZTpWUCx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4oKT0+e2UuZ2V0KCRNKS5kb25lUHJvbWlzZS50aGVuKCgpPT57bGV0IGk9TWwoKSxyPXQucXVlcnlTZWxlY3RvckFsbChgc3R5bGVbbmctdHJhbnNpdGlvbj0iJHtufSJdYCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspaS5yZW1vdmUocltvXSl9KX19LGRlcHM6W01HLGt0LGJpXSxtdWx0aTohMH1dLEFwZT0oKCk9PntjbGFzcyBue2J1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQ3c9bmV3IGllKCJFdmVudE1hbmFnZXJQbHVnaW5zIiksTXc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3pvbmU9aSx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLGUuZm9yRWFjaChyPT57ci5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWUuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoaSkuYWRkRXZlbnRMaXN0ZW5lcihlLGkscil9YWRkR2xvYmFsRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoaSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcihlLGkscil9Z2V0Wm9uZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGUpe2xldCBpPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChlKTtpZihpKXJldHVybiBpO2xldCByPXRoaXMuX3BsdWdpbnM7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldCBhPXJbb107aWYoYS5zdXBwb3J0cyhlKSlyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGUsYSksYX10aHJvdyBuZXcgRXJyb3IoYE5vIGV2ZW50IG1hbmFnZXIgcGx1Z2luIGZvdW5kIGZvciBldmVudCAke2V9YCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oQ3cpLE8oYXQpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx3dz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb2M9dH1hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxpKXtsZXQgcj1NbCgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYyx0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAke3J9IGZvciBldmVudCAke2V9YCk7cmV0dXJuIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLGUsaSl9fSx3Rz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy51c2FnZUNvdW50PW5ldyBNYXB9YWRkU3R5bGVzKGUpe2ZvcihsZXQgaSBvZiBlKTE9PT10aGlzLmNoYW5nZVVzYWdlQ291bnQoaSwxKSYmdGhpcy5vblN0eWxlQWRkZWQoaSl9cmVtb3ZlU3R5bGVzKGUpe2ZvcihsZXQgaSBvZiBlKTA9PT10aGlzLmNoYW5nZVVzYWdlQ291bnQoaSwtMSkmJnRoaXMub25TdHlsZVJlbW92ZWQoaSl9b25TdHlsZVJlbW92ZWQoZSl7fW9uU3R5bGVBZGRlZChlKXt9Z2V0QWxsU3R5bGVzKCl7cmV0dXJuIHRoaXMudXNhZ2VDb3VudC5rZXlzKCl9Y2hhbmdlVXNhZ2VDb3VudChlLGkpe2xldCByPXRoaXMudXNhZ2VDb3VudCxvPXIuZ2V0KGUpPz8wO3JldHVybiBvKz1pLG8+MD9yLnNldChlLG8pOnIuZGVsZXRlKGUpLG99bmdPbkRlc3Ryb3koKXtmb3IobGV0IGUgb2YgdGhpcy5nZXRBbGxTdHlsZXMoKSl0aGlzLm9uU3R5bGVSZW1vdmVkKGUpO3RoaXMudXNhZ2VDb3VudC5jbGVhcigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxOeT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgd0d7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmRvYz1lLHRoaXMuc3R5bGVSZWY9bmV3IE1hcCx0aGlzLmhvc3ROb2Rlcz1uZXcgU2V0LHRoaXMucmVzZXRIb3N0Tm9kZXMoKX1vblN0eWxlQWRkZWQoZSl7Zm9yKGxldCBpIG9mIHRoaXMuaG9zdE5vZGVzKXRoaXMuYWRkU3R5bGVUb0hvc3QoaSxlKX1vblN0eWxlUmVtb3ZlZChlKXtsZXQgaT10aGlzLnN0eWxlUmVmO2kuZ2V0KGUpPy5mb3JFYWNoKG89Pm8ucmVtb3ZlKCkpLGkuZGVsZXRlKGUpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN0eWxlUmVmLmNsZWFyKCksdGhpcy5yZXNldEhvc3ROb2RlcygpfWFkZEhvc3QoZSl7dGhpcy5ob3N0Tm9kZXMuYWRkKGUpO2ZvcihsZXQgaSBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMuYWRkU3R5bGVUb0hvc3QoZSxpKX1yZW1vdmVIb3N0KGUpe3RoaXMuaG9zdE5vZGVzLmRlbGV0ZShlKX1hZGRTdHlsZVRvSG9zdChlLGkpe2xldCByPXRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ci50ZXh0Q29udGVudD1pLGUuYXBwZW5kQ2hpbGQocik7bGV0IG89dGhpcy5zdHlsZVJlZi5nZXQoaSk7bz9vLnB1c2gocik6dGhpcy5zdHlsZVJlZi5zZXQoaSxbcl0pfXJlc2V0SG9zdE5vZGVzKCl7bGV0IGU9dGhpcy5ob3N0Tm9kZXM7ZS5jbGVhcigpLGUuYWRkKHRoaXMuZG9jLmhlYWQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGt0KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksc089e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoTUwvIn0sdU89LyVDT01QJS9nLEVHPW5ldyBpZSgiUmVtb3ZlU3R5bGVzT25Db21wRGVzdG9yeSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiExfSk7ZnVuY3Rpb24gVEcobix0KXtyZXR1cm4gdC5mbGF0KDEwMCkubWFwKGU9PmUucmVwbGFjZSh1TyxuKSl9ZnVuY3Rpb24gYkcobil7cmV0dXJuIHQ9PntpZigiX19uZ1Vud3JhcF9fIj09PXQpcmV0dXJuIG47ITE9PT1uKHQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITEpfX12YXIgQnk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmV2ZW50TWFuYWdlcj1lLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1pLHRoaXMuYXBwSWQ9cix0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Rvcnk9byx0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcCx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgSHkoZSl9Y3JlYXRlUmVuZGVyZXIoZSxpKXtpZighZXx8IWkpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO2xldCByPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJlcihlLGkpO3JldHVybiByIGluc3RhbmNlb2YgU3c/ci5hcHBseVRvSG9zdChlKTpyIGluc3RhbmNlb2YgenkmJnIuYXBwbHlTdHlsZXMoKSxyfWdldE9yQ3JlYXRlUmVuZGVyZXIoZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyQnlDb21wSWQsbz1yLmdldChpLmlkKTtpZighbyl7bGV0IGE9dGhpcy5ldmVudE1hbmFnZXIscz10aGlzLnNoYXJlZFN0eWxlc0hvc3QsbD10aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Rvcnk7c3dpdGNoKGkuZW5jYXBzdWxhdGlvbil7Y2FzZSBlcy5FbXVsYXRlZDpvPW5ldyBTdyhhLHMsaSx0aGlzLmFwcElkLGwpO2JyZWFrO2Nhc2UgZXMuU2hhZG93RG9tOnJldHVybiBuZXcgZE8oYSxzLGUsaSk7ZGVmYXVsdDpvPW5ldyB6eShhLHMsaSxsKX1vLm9uRGVzdHJveT0oKT0+ci5kZWxldGUoaS5pZCksci5zZXQoaS5pZCxvKX1yZXR1cm4gb31uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5jbGVhcigpfWJlZ2luKCl7fWVuZCgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhNdyksTyhOeSksTygkcCksTyhFRykpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEh5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3koKXt9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybiBlP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzT1tlXXx8ZSx0KTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpfWNyZWF0ZUNvbW1lbnQodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodCl9Y3JlYXRlVGV4dCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCl9YXBwZW5kQ2hpbGQodCxlKXsoeEcodCk/dC5jb250ZW50OnQpLmFwcGVuZENoaWxkKGUpfWluc2VydEJlZm9yZSh0LGUsaSl7dCYmKHhHKHQpP3QuY29udGVudDp0KS5pbnNlcnRCZWZvcmUoZSxpKX1yZW1vdmVDaGlsZCh0LGUpe3QmJnQucmVtb3ZlQ2hpbGQoZSl9c2VsZWN0Um9vdEVsZW1lbnQodCxlKXtsZXQgaT0ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0O2lmKCFpKXRocm93IG5ldyBFcnJvcihgVGhlIHNlbGVjdG9yICIke3R9IiBkaWQgbm90IG1hdGNoIGFueSBlbGVtZW50c2ApO3JldHVybiBlfHwoaS50ZXh0Q29udGVudD0iIiksaX1wYXJlbnROb2RlKHQpe3JldHVybiB0LnBhcmVudE5vZGV9bmV4dFNpYmxpbmcodCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9c2V0QXR0cmlidXRlKHQsZSxpLHIpe2lmKHIpe2U9cisiOiIrZTtsZXQgbz1zT1tyXTtvP3Quc2V0QXR0cmlidXRlTlMobyxlLGkpOnQuc2V0QXR0cmlidXRlKGUsaSl9ZWxzZSB0LnNldEF0dHJpYnV0ZShlLGkpfXJlbW92ZUF0dHJpYnV0ZSh0LGUsaSl7aWYoaSl7bGV0IHI9c09baV07cj90LnJlbW92ZUF0dHJpYnV0ZU5TKHIsZSk6dC5yZW1vdmVBdHRyaWJ1dGUoYCR7aX06JHtlfWApfWVsc2UgdC5yZW1vdmVBdHRyaWJ1dGUoZSl9YWRkQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9cmVtb3ZlQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9c2V0U3R5bGUodCxlLGkscil7ciYoRXMuRGFzaENhc2V8RXMuSW1wb3J0YW50KT90LnN0eWxlLnNldFByb3BlcnR5KGUsaSxyJkVzLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6dC5zdHlsZVtlXT1pfXJlbW92ZVN0eWxlKHQsZSxpKXtpJkVzLkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn1zZXRQcm9wZXJ0eSh0LGUsaSl7dFtlXT1pfXNldFZhbHVlKHQsZSl7dC5ub2RlVmFsdWU9ZX1saXN0ZW4odCxlLGkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90aGlzLmV2ZW50TWFuYWdlci5hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxiRyhpKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LGUsYkcoaSkpfX07ZnVuY3Rpb24geEcobil7cmV0dXJuIlRFTVBMQVRFIj09PW4udGFnTmFtZSYmdm9pZCAwIT09bi5jb250ZW50fSJAIi5jaGFyQ29kZUF0KDApO3ZhciBkTz1jbGFzcyBleHRlbmRzIEh5e2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQpLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMuaG9zdEVsPWksdGhpcy5zaGFkb3dSb290PWkuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7bGV0IG89VEcoci5pZCxyLnN0eWxlcyk7Zm9yKGxldCBhIG9mIG8pe2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cy50ZXh0Q29udGVudD1hLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChzKX19bm9kZU9yU2hhZG93Um9vdCh0KXtyZXR1cm4gdD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDp0fWFwcGVuZENoaWxkKHQsZSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSxlKX1pbnNlcnRCZWZvcmUodCxlLGkpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUsaSl9cmVtb3ZlQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX0senk9Y2xhc3MgZXh0ZW5kcyBIeXtjb25zdHJ1Y3Rvcih0LGUsaSxyLG89aS5pZCl7c3VwZXIodCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0b3J5PXIsdGhpcy5yZW5kZXJlclVzYWdlQ291bnQ9MCx0aGlzLnN0eWxlcz1URyhvLGkuc3R5bGVzKX1hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXModGhpcy5zdHlsZXMpLHRoaXMucmVuZGVyZXJVc2FnZUNvdW50Kyt9ZGVzdHJveSgpeyF0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Rvcnl8fCh0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVzKSx0aGlzLnJlbmRlcmVyVXNhZ2VDb3VudC0tLDA9PT10aGlzLnJlbmRlcmVyVXNhZ2VDb3VudCYmdGhpcy5vbkRlc3Ryb3k/LigpKX19LFN3PWNsYXNzIGV4dGVuZHMgenl7Y29uc3RydWN0b3IodCxlLGkscixvKXtsZXQgYT1yKyItIitpLmlkO3N1cGVyKHQsZSxpLG8sYSksdGhpcy5jb250ZW50QXR0cj0iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2UodU8sYSksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbihuKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2UodU8sbil9KGEpfWFwcGx5VG9Ib3N0KHQpe3RoaXMuYXBwbHlTdHlsZXMoKSx0aGlzLnNldEF0dHJpYnV0ZSh0LHRoaXMuaG9zdEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQodCxlKXtsZXQgaT1zdXBlci5jcmVhdGVFbGVtZW50KHQsZSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShpLHRoaXMuY29udGVudEF0dHIsIiIpLGl9fSxOcGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHd3e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfXN1cHBvcnRzKGUpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoaSxyLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxyKX1yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oa3QpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxDRz1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hpZnQiXSxCcGU9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LFZwZT17YWx0Om49Pm4uYWx0S2V5LGNvbnRyb2w6bj0+bi5jdHJsS2V5LG1ldGE6bj0+bi5tZXRhS2V5LHNoaWZ0Om49Pm4uc2hpZnRLZXl9LEhwZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgd3d7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9c3VwcG9ydHMoZSl7cmV0dXJuIG51bGwhPW4ucGFyc2VFdmVudE5hbWUoZSl9YWRkRXZlbnRMaXN0ZW5lcihlLGkscil7bGV0IG89bi5wYXJzZUV2ZW50TmFtZShpKSxhPW4uZXZlbnRDYWxsYmFjayhvLmZ1bGxLZXkscix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+TWwoKS5vbkFuZENhbmNlbChlLG8uZG9tRXZlbnROYW1lLGEpKX1zdGF0aWMgcGFyc2VFdmVudE5hbWUoZSl7bGV0IGk9ZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIikscj1pLnNoaWZ0KCk7aWYoMD09PWkubGVuZ3RofHwia2V5ZG93biIhPT1yJiYia2V5dXAiIT09cilyZXR1cm4gbnVsbDtsZXQgbz1uLl9ub3JtYWxpemVLZXkoaS5wb3AoKSksYT0iIixzPWkuaW5kZXhPZigiY29kZSIpO2lmKHM+LTEmJihpLnNwbGljZShzLDEpLGE9ImNvZGUuIiksQ0cuZm9yRWFjaChjPT57bGV0IGQ9aS5pbmRleE9mKGMpO2Q+LTEmJihpLnNwbGljZShkLDEpLGErPWMrIi4iKX0pLGErPW8sMCE9aS5sZW5ndGh8fDA9PT1vLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD17fTtyZXR1cm4gbC5kb21FdmVudE5hbWU9cixsLmZ1bGxLZXk9YSxsfXN0YXRpYyBtYXRjaEV2ZW50RnVsbEtleUNvZGUoZSxpKXtsZXQgcj1CcGVbZS5rZXldfHxlLmtleSxvPSIiO3JldHVybiBpLmluZGV4T2YoImNvZGUuIik+LTEmJihyPWUuY29kZSxvPSJjb2RlLiIpLCEobnVsbD09cnx8IXIpJiYocj1yLnRvTG93ZXJDYXNlKCksIiAiPT09cj9yPSJzcGFjZSI6Ii4iPT09ciYmKHI9ImRvdCIpLENHLmZvckVhY2goYT0+e2EhPT1yJiYoMCxWcGVbYV0pKGUpJiYobys9YSsiLiIpfSksbys9cixvPT09aSl9c3RhdGljIGV2ZW50Q2FsbGJhY2soZSxpLHIpe3JldHVybiBvPT57bi5tYXRjaEV2ZW50RnVsbEtleUNvZGUobyxlKSYmci5ydW5HdWFyZGVkKCgpPT5pKG8pKX19c3RhdGljIF9ub3JtYWxpemVLZXkoZSl7cmV0dXJuImVzYyI9PT1lPyJlc2NhcGUiOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oa3QpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxHcGU9W3twcm92aWRlOmhjLHVzZVZhbHVlOmFPfSx7cHJvdmlkZTpIUCx1c2VWYWx1ZTpmdW5jdGlvbigpe1Z5Lm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTprdCx1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG49ZG9jdW1lbnQsJFI9bixkb2N1bWVudDt2YXIgbn0sZGVwczpbXX1dLGZPPUdQKEtqLCJicm93c2VyIixHcGUpLERHPW5ldyBpZSgiIiksV3BlPVt7cHJvdmlkZTpBeSx1c2VDbGFzczpjbGFzc3thZGRUb1dpbmRvdyh0KXtXci5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGkscj0hMCk9PntsZXQgbz10LmZpbmRUZXN0YWJpbGl0eUluVHJlZShpLHIpO2lmKG51bGw9PW8pdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB0ZXN0YWJpbGl0eSBmb3IgZWxlbWVudC4iKTtyZXR1cm4gb30sV3IuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXM9KCk9PnQuZ2V0QWxsVGVzdGFiaWxpdGllcygpLFdyLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PnQuZ2V0QWxsUm9vdEVsZW1lbnRzKCksV3IuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChXci5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksV3IuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChpPT57bGV0IHI9V3IuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKSxvPXIubGVuZ3RoLGE9ITEscz1mdW5jdGlvbihsKXthPWF8fGwsby0tLDA9PW8mJmkoYSl9O3IuZm9yRWFjaChmdW5jdGlvbihsKXtsLndoZW5TdGFibGUocyl9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUsaSl7cmV0dXJuIG51bGw9PWU/bnVsbDp0LmdldFRlc3RhYmlsaXR5KGUpPz8oaT9NbCgpLmlzU2hhZG93Um9vdChlKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6VVAsdXNlQ2xhc3M6ZXcsZGVwczpbYXQsdHcsQXldfSx7cHJvdmlkZTpldyx1c2VDbGFzczpldyxkZXBzOlthdCx0dyxBeV19XSxxcGU9W3twcm92aWRlOnpNLHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6Y2EsdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgY2F9LGRlcHM6W119LHtwcm92aWRlOkN3LHVzZUNsYXNzOk5wZSxtdWx0aTohMCxkZXBzOltrdCxhdCxoY119LHtwcm92aWRlOkN3LHVzZUNsYXNzOkhwZSxtdWx0aTohMCxkZXBzOltrdF19LHtwcm92aWRlOkJ5LHVzZUNsYXNzOkJ5LGRlcHM6W013LE55LCRwLEVHXX0se3Byb3ZpZGU6Y2MsdXNlRXhpc3Rpbmc6Qnl9LHtwcm92aWRlOndHLHVzZUV4aXN0aW5nOk55fSx7cHJvdmlkZTpOeSx1c2VDbGFzczpOeSxkZXBzOltrdF19LHtwcm92aWRlOk13LHVzZUNsYXNzOk13LGRlcHM6W0N3LGF0XX0se3Byb3ZpZGU6dGYsdXNlQ2xhc3M6QXBlLGRlcHM6W119LFtdXSxFdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTokcCx1c2VWYWx1ZTplLmFwcElkfSx7cHJvdmlkZTpNRyx1c2VFeGlzdGluZzokcH0sSXBlXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oREcsMTIpKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7cHJvdmlkZXJzOlsuLi5xcGUsLi4uV3BlXSxpbXBvcnRzOltUZSxKal19KSxufSkoKSxuZj0obmV3IGllKCJIYW1tZXJHZXN0dXJlQ29uZmlnIiksbmV3IGllKCJIYW1tZXJMb2FkZXIiKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oZSl7bGV0IGk9bnVsbDtyZXR1cm4gaT1lP25ldyhlfHxuKTpPKElHKSxpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpKSxJRz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbmZ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZX1zYW5pdGl6ZShlLGkpe2lmKG51bGw9PWkpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UgcXIuTk9ORTpyZXR1cm4gaTtjYXNlIHFyLkhUTUw6cmV0dXJuIGdsKGksIkhUTUwiKT9SYShpKTp5UCh0aGlzLl9kb2MsU3RyaW5nKGkpKS50b1N0cmluZygpO2Nhc2UgcXIuU1RZTEU6cmV0dXJuIGdsKGksIlN0eWxlIik/UmEoaSk6aTtjYXNlIHFyLlNDUklQVDppZihnbChpLCJTY3JpcHQiKSlyZXR1cm4gUmEoaSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iik7Y2FzZSBxci5VUkw6cmV0dXJuIGdsKGksIlVSTCIpP1JhKGkpOnZ5KFN0cmluZyhpKSk7Y2FzZSBxci5SRVNPVVJDRV9VUkw6aWYoZ2woaSwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gUmEoaSk7dGhyb3cgbmV3IEVycm9yKGB1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgJHtmeX0pYCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICR7ZX0gKHNlZSAke2Z5fSlgKX19YnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZWsobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyB0ayhuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFNjcmlwdChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBuayhuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFVybChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBpayhuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IHJrKG4pfShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhrdCkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbihlKXtsZXQgaT1udWxsO3JldHVybiBpPWU/bmV3IGU6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBJRyhuLmdldChrdCkpfShPKGJpKSksaX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxVeT0obmV3IGhsKCIxNS4yLjkiKSxiNChSRygpLDEpLGNsYXNze30pLFR3PWNsYXNze30sX2M9IioiO2Z1bmN0aW9uIGppKG4sdCl7cmV0dXJue3R5cGU6NyxuYW1lOm4sZGVmaW5pdGlvbnM6dCxvcHRpb25zOnt9fX1mdW5jdGlvbiBLbihuLHQ9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6dCx0aW1pbmdzOm59fWZ1bmN0aW9uIEd5KG4sdD1udWxsKXtyZXR1cm57dHlwZTozLHN0ZXBzOm4sb3B0aW9uczp0fX1mdW5jdGlvbiBEdyhuLHQ9bnVsbCl7cmV0dXJue3R5cGU6MixzdGVwczpuLG9wdGlvbnM6dH19ZnVuY3Rpb24gQnQobil7cmV0dXJue3R5cGU6NixzdHlsZXM6bixvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gSm4obix0LGUpe3JldHVybnt0eXBlOjAsbmFtZTpuLHN0eWxlczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gcmYobil7cmV0dXJue3R5cGU6NSxzdGVwczpufX1mdW5jdGlvbiBXbihuLHQsZT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6bixhbmltYXRpb246dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGNkKG49bnVsbCl7cmV0dXJue3R5cGU6OSxvcHRpb25zOm59fWZ1bmN0aW9uIGRkKG4sdCxlPW51bGwpe3JldHVybnt0eXBlOjExLHNlbGVjdG9yOm4sYW5pbWF0aW9uOnQsb3B0aW9uczplfX1mdW5jdGlvbiBrRyhuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKG4pfXZhciBndT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9b25TdGFydCh0KXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaCh0KSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9b25Eb25lKHQpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2godCksdGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7a0coKCk9PnRoaXMuX29uRmluaXNoKCkpfV9vblN0YXJ0KCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25TdGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9c2V0UG9zaXRpb24odCl7dGhpcy5fcG9zaXRpb249dGhpcy50b3RhbFRpbWU/dCp0aGlzLnRvdGFsVGltZToxfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudG90YWxUaW1lP3RoaXMuX3Bvc2l0aW9uL3RoaXMudG90YWxUaW1lOjF9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LGp5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPXQ7bGV0IGU9MCxpPTAscj0wLG89dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1vP2tHKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaChhPT57YS5vbkRvbmUoKCk9PnsrK2U9PW8mJnRoaXMuX29uRmluaXNoKCl9KSxhLm9uRGVzdHJveSgoKT0+eysraT09byYmdGhpcy5fb25EZXN0cm95KCl9KSxhLm9uU3RhcnQoKCk9PnsrK3I9PW8mJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgoYSxzKT0+TWF0aC5tYXgoYSxzLnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuaW5pdCgpKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKHQpe2xldCBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goaT0+e2xldCByPWkudG90YWxUaW1lP01hdGgubWluKDEsZS9pLnRvdGFsVGltZSk6MTtpLnNldFBvc2l0aW9uKHIpfSl9Z2V0UG9zaXRpb24oKXtsZXQgdD10aGlzLnBsYXllcnMucmVkdWNlKChlLGkpPT5udWxsPT09ZXx8aS50b3RhbFRpbWU+ZS50b3RhbFRpbWU/aTplLG51bGwpO3JldHVybiBudWxsIT10P3QuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT57dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChpPT5pKCkpLGUubGVuZ3RoPTB9fSxJdz0iISI7ZnVuY3Rpb24gUEcobil7cmV0dXJuIG5ldyBidCgzZTMsITEpfWZ1bmN0aW9uIEZPKCl7cmV0dXJuIHR5cGVvZiBwcm9jZXNzPCJ1IiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChwcm9jZXNzKX1mdW5jdGlvbiBfdShuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGd1O2Nhc2UgMTpyZXR1cm4gblswXTtkZWZhdWx0OnJldHVybiBuZXcgankobil9fWZ1bmN0aW9uIFhHKG4sdCxlLGkscj1uZXcgTWFwLG89bmV3IE1hcCl7bGV0IGE9W10scz1bXSxsPS0xLGM9bnVsbDtpZihpLmZvckVhY2goZD0+e2xldCB1PWQuZ2V0KCJvZmZzZXQiKSxwPXU9PWwsZj1wJiZjfHxuZXcgTWFwO2QuZm9yRWFjaCgobSx5KT0+e2xldCBNPXksdj1tO2lmKCJvZmZzZXQiIT09eSlzd2l0Y2goTT10Lm5vcm1hbGl6ZVByb3BlcnR5TmFtZShNLGEpLHYpe2Nhc2UgSXc6dj1yLmdldCh5KTticmVhaztjYXNlIF9jOnY9by5nZXQoeSk7YnJlYWs7ZGVmYXVsdDp2PXQubm9ybWFsaXplU3R5bGVWYWx1ZSh5LE0sdixhKX1mLnNldChNLHYpfSkscHx8cy5wdXNoKGYpLGM9ZixsPXV9KSxhLmxlbmd0aCl0aHJvdyBuZXcgYnQoMzUwMiwhMSk7cmV0dXJuIHN9ZnVuY3Rpb24gTE8obix0LGUsaSl7c3dpdGNoKHQpe2Nhc2Uic3RhcnQiOm4ub25TdGFydCgoKT0+aShlJiZoTyhlLCJzdGFydCIsbikpKTticmVhaztjYXNlImRvbmUiOm4ub25Eb25lKCgpPT5pKGUmJmhPKGUsImRvbmUiLG4pKSk7YnJlYWs7Y2FzZSJkZXN0cm95IjpuLm9uRGVzdHJveSgoKT0+aShlJiZoTyhlLCJkZXN0cm95IixuKSkpfX1mdW5jdGlvbiBoTyhuLHQsZSl7bGV0IG89Tk8obi5lbGVtZW50LG4udHJpZ2dlck5hbWUsbi5mcm9tU3RhdGUsbi50b1N0YXRlLHR8fG4ucGhhc2VOYW1lLGUudG90YWxUaW1lPz9uLnRvdGFsVGltZSwhIWUuZGlzYWJsZWQpLGE9bi5fZGF0YTtyZXR1cm4gbnVsbCE9YSYmKG8uX2RhdGE9YSksb31mdW5jdGlvbiBOTyhuLHQsZSxpLHI9IiIsbz0wLGEpe3JldHVybntlbGVtZW50Om4sdHJpZ2dlck5hbWU6dCxmcm9tU3RhdGU6ZSx0b1N0YXRlOmkscGhhc2VOYW1lOnIsdG90YWxUaW1lOm8sZGlzYWJsZWQ6ISFhfX1mdW5jdGlvbiBvcyhuLHQsZSl7bGV0IGk9bi5nZXQodCk7cmV0dXJuIGl8fG4uc2V0KHQsaT1lKSxpfWZ1bmN0aW9uIE9HKG4pe2xldCB0PW4uaW5kZXhPZigiOiIpO3JldHVybltuLnN1YnN0cmluZygxLHQpLG4uc2xpY2UodCsxKV19dmFyIHhPPShuLHQpPT4hMSxRRz0obix0LGUpPT5bXSxaRz1udWxsO2Z1bmN0aW9uIEJPKG4pe2xldCB0PW4ucGFyZW50Tm9kZXx8bi5ob3N0O3JldHVybiB0PT09Wkc/bnVsbDp0fShGTygpfHx0eXBlb2YgRWxlbWVudDwidSIpJiYodHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiPyhaRz0oKCk9PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkoKSx4Tz0obix0KT0+e2Zvcig7dDspe2lmKHQ9PT1uKXJldHVybiEwO3Q9Qk8odCl9cmV0dXJuITF9KTp4Tz0obix0KT0+bi5jb250YWlucyh0KSxRRz0obix0LGUpPT57aWYoZSlyZXR1cm4gQXJyYXkuZnJvbShuLnF1ZXJ5U2VsZWN0b3JBbGwodCkpO2xldCBpPW4ucXVlcnlTZWxlY3Rvcih0KTtyZXR1cm4gaT9baV06W119KTt2YXIgb2Y9bnVsbCxGRz0hMTt2YXIgS0c9eE8sSkc9UUcsVk89KCgpPT57Y2xhc3Mgbnt2YWxpZGF0ZVN0eWxlUHJvcGVydHkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe29mfHwob2Y9KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9keTpudWxsKXx8e30sRkc9ISFvZi5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gb2Yuc3R5bGUpO2xldCB0PSEwO3JldHVybiBvZi5zdHlsZSYmIWZ1bmN0aW9uKG4pe3JldHVybiJlYmtpdCI9PW4uc3Vic3RyaW5nKDEsNil9KG4pJiYodD1uIGluIG9mLnN0eWxlLCF0JiZGRyYmKHQ9IldlYmtpdCIrbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStuLnNsaWNlKDEpaW4gb2Yuc3R5bGUpKSx0fShlKX1tYXRjaGVzRWxlbWVudChlLGkpe3JldHVybiExfWNvbnRhaW5zRWxlbWVudChlLGkpe3JldHVybiBLRyhlLGkpfWdldFBhcmVudEVsZW1lbnQoZSl7cmV0dXJuIEJPKGUpfXF1ZXJ5KGUsaSxyKXtyZXR1cm4gSkcoZSxpLHIpfWNvbXB1dGVTdHlsZShlLGkscil7cmV0dXJuIHJ8fCIifWFuaW1hdGUoZSxpLHIsbyxhLHM9W10sbCl7cmV0dXJuIG5ldyBndShyLG8pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxKeT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5OT09QPW5ldyBWTyxufSkoKSxBZmU9MWUzLGU4PSJuZy1lbnRlciIsQ089Im5nLWxlYXZlIixBdz0ibmctdHJpZ2dlciIsT3c9Ii5uZy10cmlnZ2VyIixMRz0ibmctYW5pbWF0aW5nIixNTz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gdWQobil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBuO2xldCB0PW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIXR8fHQubGVuZ3RoPDI/MDp3TyhwYXJzZUZsb2F0KHRbMV0pLHRbMl0pfWZ1bmN0aW9uIHdPKG4sdCl7cmV0dXJuInMiPT09dD9uKkFmZTpufWZ1bmN0aW9uIEZ3KG4sdCxlKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9uOmZ1bmN0aW9uKG4sdCxlKXtsZXQgcixvPTAsYT0iIjtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBzPW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1zKXJldHVybiB0LnB1c2goUEcoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9d08ocGFyc2VGbG9hdChzWzFdKSxzWzJdKTtsZXQgbD1zWzNdO251bGwhPWwmJihvPXdPKHBhcnNlRmxvYXQobCksc1s0XSkpO2xldCBjPXNbNV07YyYmKGE9Yyl9ZWxzZSByPW47aWYoIWUpe2xldCBzPSExLGw9dC5sZW5ndGg7cjwwJiYodC5wdXNoKG5ldyBidCgzMTAwLCExKSkscz0hMCksbzwwJiYodC5wdXNoKG5ldyBidCgzMTAxLCExKSkscz0hMCkscyYmdC5zcGxpY2UobCwwLFBHKCkpfXJldHVybntkdXJhdGlvbjpyLGRlbGF5Om8sZWFzaW5nOmF9fShuLHQsZSl9ZnVuY3Rpb24gJHkobix0PXt9KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChlPT57dFtlXT1uW2VdfSksdH1mdW5jdGlvbiB0OChuKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGU9Pnt0LnNldChlLG5bZV0pfSksdH1mdW5jdGlvbiBSaChuLHQ9bmV3IE1hcCxlKXtpZihlKWZvcihsZXRbaSxyXW9mIGUpdC5zZXQoaSxyKTtmb3IobGV0W2kscl1vZiBuKXQuc2V0KGkscik7cmV0dXJuIHR9ZnVuY3Rpb24gTkcobix0LGUpe3JldHVybiBlP3QrIjoiK2UrIjsiOiIifWZ1bmN0aW9uIG44KG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5zdHlsZS5sZW5ndGg7ZSsrKXtsZXQgaT1uLnN0eWxlLml0ZW0oZSk7dCs9TkcoMCxpLG4uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShpKSl9Zm9yKGxldCBlIGluIG4uc3R5bGUpbi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShlKSYmIWUuc3RhcnRzV2l0aCgiXyIpJiYodCs9TkcoMCxMZmUoZSksbi5zdHlsZVtlXSkpO24uc2V0QXR0cmlidXRlKCJzdHlsZSIsdCl9ZnVuY3Rpb24geWMobix0LGUpe24uc3R5bGUmJih0LmZvckVhY2goKGkscik9PntsZXQgbz1ITyhyKTtlJiYhZS5oYXMocikmJmUuc2V0KHIsbi5zdHlsZVtvXSksbi5zdHlsZVtvXT1pfSksRk8oKSYmbjgobikpfWZ1bmN0aW9uIHNmKG4sdCl7bi5zdHlsZSYmKHQuZm9yRWFjaCgoZSxpKT0+e2xldCByPUhPKGkpO24uc3R5bGVbcl09IiJ9KSxGTygpJiZuOChuKSl9ZnVuY3Rpb24gV3kobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/MT09bi5sZW5ndGg/blswXTpEdyhuKTpufXZhciBTTz1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiBpOChuKXtsZXQgdD1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBlO2Zvcig7ZT1TTy5leGVjKG4pOyl0LnB1c2goZVsxXSk7U08ubGFzdEluZGV4PTB9cmV0dXJuIHR9ZnVuY3Rpb24gWXkobix0LGUpe2xldCBpPW4udG9TdHJpbmcoKSxyPWkucmVwbGFjZShTTywobyxhKT0+e2xldCBzPXRbYV07cmV0dXJuIG51bGw9PXMmJihlLnB1c2gobmV3IGJ0KDMwMDMsITEpKSxzPSIiKSxzLnRvU3RyaW5nKCl9KTtyZXR1cm4gcj09aT9uOnJ9ZnVuY3Rpb24gTHcobil7bGV0IHQ9W10sZT1uLm5leHQoKTtmb3IoOyFlLmRvbmU7KXQucHVzaChlLnZhbHVlKSxlPW4ubmV4dCgpO3JldHVybiB0fXZhciBGZmU9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIEhPKG4pe3JldHVybiBuLnJlcGxhY2UoRmZlLCguLi50KT0+dFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBMZmUobil7cmV0dXJuIG4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHJzKG4sdCxlKXtzd2l0Y2godC50eXBlKXtjYXNlIDc6cmV0dXJuIG4udmlzaXRUcmlnZ2VyKHQsZSk7Y2FzZSAwOnJldHVybiBuLnZpc2l0U3RhdGUodCxlKTtjYXNlIDE6cmV0dXJuIG4udmlzaXRUcmFuc2l0aW9uKHQsZSk7Y2FzZSAyOnJldHVybiBuLnZpc2l0U2VxdWVuY2UodCxlKTtjYXNlIDM6cmV0dXJuIG4udmlzaXRHcm91cCh0LGUpO2Nhc2UgNDpyZXR1cm4gbi52aXNpdEFuaW1hdGUodCxlKTtjYXNlIDU6cmV0dXJuIG4udmlzaXRLZXlmcmFtZXModCxlKTtjYXNlIDY6cmV0dXJuIG4udmlzaXRTdHlsZSh0LGUpO2Nhc2UgODpyZXR1cm4gbi52aXNpdFJlZmVyZW5jZSh0LGUpO2Nhc2UgOTpyZXR1cm4gbi52aXNpdEFuaW1hdGVDaGlsZCh0LGUpO2Nhc2UgMTA6cmV0dXJuIG4udmlzaXRBbmltYXRlUmVmKHQsZSk7Y2FzZSAxMTpyZXR1cm4gbi52aXNpdFF1ZXJ5KHQsZSk7Y2FzZSAxMjpyZXR1cm4gbi52aXNpdFN0YWdnZXIodCxlKTtkZWZhdWx0OnRocm93IG5ldyBidCgzMDA0LCExKX19ZnVuY3Rpb24gcjgobix0KXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobilbdF19dmFyIE53PSIqIjtmdW5jdGlvbiB6ZmUobix0KXtsZXQgZT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goaT0+ZnVuY3Rpb24obix0LGUpe2lmKCI6Ij09blswXSl7bGV0IGw9ZnVuY3Rpb24obix0KXtzd2l0Y2gobil7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtjYXNlIjppbmNyZW1lbnQiOnJldHVybihlLGkpPT5wYXJzZUZsb2F0KGkpPnBhcnNlRmxvYXQoZSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oZSxpKT0+cGFyc2VGbG9hdChpKTxwYXJzZUZsb2F0KGUpO2RlZmF1bHQ6cmV0dXJuIHQucHVzaChuZXcgYnQoMzAxNiwhMSkpLCIqID0+ICoifX0obixlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbClyZXR1cm4gdm9pZCB0LnB1c2gobCk7bj1sfWxldCBpPW4ubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIGUucHVzaChuZXcgYnQoMzAxNSwhMSkpLHQ7bGV0IHI9aVsxXSxvPWlbMl0sYT1pWzNdO3QucHVzaChCRyhyLGEpKSwiPCI9PW9bMF0mJiEocj09TncmJmE9PU53KSYmdC5wdXNoKEJHKGEscikpfShpLGUsdCkpOmUucHVzaChuKSxlfXZhciBSdz1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksa3c9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBCRyhuLHQpe2xldCBlPVJ3LmhhcyhuKXx8a3cuaGFzKG4pLGk9UncuaGFzKHQpfHxrdy5oYXModCk7cmV0dXJuKHIsbyk9PntsZXQgYT1uPT1Od3x8bj09cixzPXQ9PU53fHx0PT1vO3JldHVybiFhJiZlJiYiYm9vbGVhbiI9PXR5cGVvZiByJiYoYT1yP1J3LmhhcyhuKTprdy5oYXMobikpLCFzJiZpJiYiYm9vbGVhbiI9PXR5cGVvZiBvJiYocz1vP1J3Lmhhcyh0KTprdy5oYXModCkpLGEmJnN9fXZhciBHZmU9bmV3IFJlZ0V4cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24gbDgobix0LGUsaSl7cmV0dXJuIG5ldyBFTyhuKS5idWlsZCh0LGUsaSl9dmFyIEVPPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RyaXZlcj10fWJ1aWxkKHQsZSxpKXtsZXQgcj1uZXcgVE8oZSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUocikscnModGhpcyxXeSh0KSxyKX1fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZSh0KXt0LmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLHQuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdC5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLHQuY3VycmVudFRpbWU9MH12aXNpdFRyaWdnZXIodCxlKXtsZXQgaT1lLnF1ZXJ5Q291bnQ9MCxyPWUuZGVwQ291bnQ9MCxvPVtdLGE9W107cmV0dXJuIkAiPT10Lm5hbWUuY2hhckF0KDApJiZlLmVycm9ycy5wdXNoKG5ldyBidCgzMDA2LCExKSksdC5kZWZpbml0aW9ucy5mb3JFYWNoKHM9PntpZih0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGUpLDA9PXMudHlwZSl7bGV0IGw9cyxjPWwubmFtZTtjLnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGQ9PntsLm5hbWU9ZCxvLnB1c2godGhpcy52aXNpdFN0YXRlKGwsZSkpfSksbC5uYW1lPWN9ZWxzZSBpZigxPT1zLnR5cGUpe2xldCBsPXRoaXMudmlzaXRUcmFuc2l0aW9uKHMsZSk7aSs9bC5xdWVyeUNvdW50LHIrPWwuZGVwQ291bnQsYS5wdXNoKGwpfWVsc2UgZS5lcnJvcnMucHVzaChuZXcgYnQoMzAwNywhMSkpfSkse3R5cGU6NyxuYW1lOnQubmFtZSxzdGF0ZXM6byx0cmFuc2l0aW9uczphLHF1ZXJ5Q291bnQ6aSxkZXBDb3VudDpyLG9wdGlvbnM6bnVsbH19dmlzaXRTdGF0ZSh0LGUpe2xldCBpPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxyPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihpLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7bGV0IG89bmV3IFNldCxhPXJ8fHt9O2kuc3R5bGVzLmZvckVhY2gocz0+e3MgaW5zdGFuY2VvZiBNYXAmJnMuZm9yRWFjaChsPT57aTgobCkuZm9yRWFjaChjPT57YS5oYXNPd25Qcm9wZXJ0eShjKXx8by5hZGQoYyl9KX0pfSksby5zaXplJiYoTHcoby52YWx1ZXMoKSksZS5lcnJvcnMucHVzaChuZXcgYnQoMzAwOCwhMSkpKX1yZXR1cm57dHlwZTowLG5hbWU6dC5uYW1lLHN0eWxlOmksb3B0aW9uczpyP3twYXJhbXM6cn06bnVsbH19dmlzaXRUcmFuc2l0aW9uKHQsZSl7ZS5xdWVyeUNvdW50PTAsZS5kZXBDb3VudD0wO2xldCBpPXJzKHRoaXMsV3kodC5hbmltYXRpb24pLGUpO3JldHVybnt0eXBlOjEsbWF0Y2hlcnM6emZlKHQuZXhwcixlLmVycm9ycyksYW5pbWF0aW9uOmkscXVlcnlDb3VudDplLnF1ZXJ5Q291bnQsZGVwQ291bnQ6ZS5kZXBDb3VudCxvcHRpb25zOmFmKHQub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UodCxlKXtyZXR1cm57dHlwZToyLHN0ZXBzOnQuc3RlcHMubWFwKGk9PnJzKHRoaXMsaSxlKSksb3B0aW9uczphZih0Lm9wdGlvbnMpfX12aXNpdEdyb3VwKHQsZSl7bGV0IGk9ZS5jdXJyZW50VGltZSxyPTAsbz10LnN0ZXBzLm1hcChhPT57ZS5jdXJyZW50VGltZT1pO2xldCBzPXJzKHRoaXMsYSxlKTtyZXR1cm4gcj1NYXRoLm1heChyLGUuY3VycmVudFRpbWUpLHN9KTtyZXR1cm4gZS5jdXJyZW50VGltZT1yLHt0eXBlOjMsc3RlcHM6byxvcHRpb25zOmFmKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZSh0LGUpe2xldCBpPWZ1bmN0aW9uKG4sdCl7aWYobi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSlyZXR1cm4gbjtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIGdPKEZ3KG4sdCkuZHVyYXRpb24sMCwiIik7bGV0IGU9bjtpZihlLnNwbGl0KC9ccysvKS5zb21lKG89PiJ7Ij09by5jaGFyQXQoMCkmJiJ7Ij09by5jaGFyQXQoMSkpKXtsZXQgbz1nTygwLDAsIiIpO3JldHVybiBvLmR5bmFtaWM9ITAsby5zdHJWYWx1ZT1lLG99bGV0IHI9RncoZSx0KTtyZXR1cm4gZ08oci5kdXJhdGlvbixyLmRlbGF5LHIuZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1pO2xldCByLG89dC5zdHlsZXM/dC5zdHlsZXM6QnQoe30pO2lmKDU9PW8udHlwZSlyPXRoaXMudmlzaXRLZXlmcmFtZXMobyxlKTtlbHNle2xldCBhPXQuc3R5bGVzLHM9ITE7aWYoIWEpe3M9ITA7bGV0IGM9e307aS5lYXNpbmcmJihjLmVhc2luZz1pLmVhc2luZyksYT1CdChjKX1lLmN1cnJlbnRUaW1lKz1pLmR1cmF0aW9uK2kuZGVsYXk7bGV0IGw9dGhpcy52aXNpdFN0eWxlKGEsZSk7bC5pc0VtcHR5U3RlcD1zLHI9bH1yZXR1cm4gZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTo0LHRpbWluZ3M6aSxzdHlsZTpyLG9wdGlvbnM6bnVsbH19dmlzaXRTdHlsZSh0LGUpe2xldCBpPXRoaXMuX21ha2VTdHlsZUFzdCh0LGUpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGksZSksaX1fbWFrZVN0eWxlQXN0KHQsZSl7bGV0IGk9W10scj1BcnJheS5pc0FycmF5KHQuc3R5bGVzKT90LnN0eWxlczpbdC5zdHlsZXNdO2ZvcihsZXQgcyBvZiByKSJzdHJpbmciPT10eXBlb2Ygcz9zPT09X2M/aS5wdXNoKHMpOmUuZXJyb3JzLnB1c2gobmV3IGJ0KDMwMDIsITEpKTppLnB1c2godDgocykpO2xldCBvPSExLGE9bnVsbDtyZXR1cm4gaS5mb3JFYWNoKHM9PntpZihzIGluc3RhbmNlb2YgTWFwJiYocy5oYXMoImVhc2luZyIpJiYoYT1zLmdldCgiZWFzaW5nIikscy5kZWxldGUoImVhc2luZyIpKSwhbykpZm9yKGxldCBsIG9mIHMudmFsdWVzKCkpaWYobC50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe289ITA7YnJlYWt9fSkse3R5cGU6NixzdHlsZXM6aSxlYXNpbmc6YSxvZmZzZXQ6dC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOm8sb3B0aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdCh0LGUpe2xldCBpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZSxvPWUuY3VycmVudFRpbWU7aSYmbz4wJiYoby09aS5kdXJhdGlvbitpLmRlbGF5KSx0LnN0eWxlcy5mb3JFYWNoKGE9Pnsic3RyaW5nIiE9dHlwZW9mIGEmJmEuZm9yRWFjaCgocyxsKT0+e2xldCBjPWUuY29sbGVjdGVkU3R5bGVzLmdldChlLmN1cnJlbnRRdWVyeVNlbGVjdG9yKSxkPWMuZ2V0KGwpLHU9ITA7ZCYmKG8hPXImJm8+PWQuc3RhcnRUaW1lJiZyPD1kLmVuZFRpbWUmJihlLmVycm9ycy5wdXNoKG5ldyBidCgzMDEwLCExKSksdT0hMSksbz1kLnN0YXJ0VGltZSksdSYmYy5zZXQobCx7c3RhcnRUaW1lOm8sZW5kVGltZTpyfSksZS5vcHRpb25zJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9dC5wYXJhbXN8fHt9LHI9aTgobik7ci5sZW5ndGgmJnIuZm9yRWFjaChvPT57aS5oYXNPd25Qcm9wZXJ0eShvKXx8ZS5wdXNoKG5ldyBidCgzMDAxLCExKSl9KX0ocyxlLm9wdGlvbnMsZS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyh0LGUpe2xldCBpPXt0eXBlOjUsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWUuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBlLmVycm9ycy5wdXNoKG5ldyBidCgzMDExLCExKSksaTtsZXQgbz0wLGE9W10scz0hMSxsPSExLGM9MCxkPXQuc3RlcHMubWFwKHY9PntsZXQgeD10aGlzLl9tYWtlU3R5bGVBc3QodixlKSxSPW51bGwhPXgub2Zmc2V0P3gub2Zmc2V0OmZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbnVsbDtsZXQgdD1udWxsO2lmKEFycmF5LmlzQXJyYXkobikpbi5mb3JFYWNoKGU9PntpZihlIGluc3RhbmNlb2YgTWFwJiZlLmhhcygib2Zmc2V0Iikpe2xldCBpPWU7dD1wYXJzZUZsb2F0KGkuZ2V0KCJvZmZzZXQiKSksaS5kZWxldGUoIm9mZnNldCIpfX0pO2Vsc2UgaWYobiBpbnN0YW5jZW9mIE1hcCYmbi5oYXMoIm9mZnNldCIpKXtsZXQgZT1uO3Q9cGFyc2VGbG9hdChlLmdldCgib2Zmc2V0IikpLGUuZGVsZXRlKCJvZmZzZXQiKX1yZXR1cm4gdH0oeC5zdHlsZXMpLEE9MDtyZXR1cm4gbnVsbCE9UiYmKG8rKyxBPXgub2Zmc2V0PVIpLGw9bHx8QTwwfHxBPjEscz1zfHxBPGMsYz1BLGEucHVzaChBKSx4fSk7bCYmZS5lcnJvcnMucHVzaChuZXcgYnQoMzAxMiwhMSkpLHMmJmUuZXJyb3JzLnB1c2gobmV3IGJ0KDMyMDAsITEpKTtsZXQgdT10LnN0ZXBzLmxlbmd0aCxwPTA7bz4wJiZvPHU/ZS5lcnJvcnMucHVzaChuZXcgYnQoMzIwMiwhMSkpOjA9PW8mJihwPTEvKHUtMSkpO2xldCBmPXUtMSxtPWUuY3VycmVudFRpbWUseT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxNPXkuZHVyYXRpb247cmV0dXJuIGQuZm9yRWFjaCgodix4KT0+e2xldCBSPXA+MD94PT1mPzE6cCp4OmFbeF0sQT1SKk07ZS5jdXJyZW50VGltZT1tK3kuZGVsYXkrQSx5LmR1cmF0aW9uPUEsdGhpcy5fdmFsaWRhdGVTdHlsZUFzdCh2LGUpLHYub2Zmc2V0PVIsaS5zdHlsZXMucHVzaCh2KX0pLGl9dmlzaXRSZWZlcmVuY2UodCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpycyh0aGlzLFd5KHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOmFmKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKHQsZSl7cmV0dXJuIGUuZGVwQ291bnQrKyx7dHlwZTo5LG9wdGlvbnM6YWYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczphZih0Lm9wdGlvbnMpfX12aXNpdFF1ZXJ5KHQsZSl7bGV0IGk9ZS5jdXJyZW50UXVlcnlTZWxlY3RvcixyPXQub3B0aW9uc3x8e307ZS5xdWVyeUNvdW50KyssZS5jdXJyZW50UXVlcnk9dDtsZXRbbyxhXT1mdW5jdGlvbihuKXtsZXQgdD0hIW4uc3BsaXQoL1xzKixccyovKS5maW5kKGU9PiI6c2VsZiI9PWUpO3JldHVybiB0JiYobj1uLnJlcGxhY2UoR2ZlLCIiKSksbj1uLnJlcGxhY2UoL0BcKi9nLE93KS5yZXBsYWNlKC9AXHcrL2csZT0+T3crIi0iK2Uuc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyxNTyksW24sdF19KHQuc2VsZWN0b3IpO2UuY3VycmVudFF1ZXJ5U2VsZWN0b3I9aS5sZW5ndGg/aSsiICIrbzpvLG9zKGUuY29sbGVjdGVkU3R5bGVzLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7bGV0IHM9cnModGhpcyxXeSh0LmFuaW1hdGlvbiksZSk7cmV0dXJuIGUuY3VycmVudFF1ZXJ5PW51bGwsZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1pLHt0eXBlOjExLHNlbGVjdG9yOm8sbGltaXQ6ci5saW1pdHx8MCxvcHRpb25hbDohIXIub3B0aW9uYWwsaW5jbHVkZVNlbGY6YSxhbmltYXRpb246cyxvcmlnaW5hbFNlbGVjdG9yOnQuc2VsZWN0b3Isb3B0aW9uczphZih0Lm9wdGlvbnMpfX12aXNpdFN0YWdnZXIodCxlKXtlLmN1cnJlbnRRdWVyeXx8ZS5lcnJvcnMucHVzaChuZXcgYnQoMzAxMywhMSkpO2xldCBpPSJmdWxsIj09PXQudGltaW5ncz97ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiZnVsbCJ9OkZ3KHQudGltaW5ncyxlLmVycm9ycywhMCk7cmV0dXJue3R5cGU6MTIsYW5pbWF0aW9uOnJzKHRoaXMsV3kodC5hbmltYXRpb24pLGUpLHRpbWluZ3M6aSxvcHRpb25zOm51bGx9fX0sVE89Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5lcnJvcnM9dCx0aGlzLnF1ZXJ5Q291bnQ9MCx0aGlzLmRlcENvdW50PTAsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsLHRoaXMuY3VycmVudFF1ZXJ5PW51bGwsdGhpcy5jdXJyZW50UXVlcnlTZWxlY3Rvcj1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdGhpcy5vcHRpb25zPW51bGwsdGhpcy51bnN1cHBvcnRlZENTU1Byb3BlcnRpZXNGb3VuZD1uZXcgU2V0fX07ZnVuY3Rpb24gYWYobil7cmV0dXJuIG4/KG49JHkobikpLnBhcmFtcyYmKG4ucGFyYW1zPWZ1bmN0aW9uKG4pe3JldHVybiBuPyR5KG4pOm51bGx9KG4ucGFyYW1zKSk6bj17fSxufWZ1bmN0aW9uIGdPKG4sdCxlKXtyZXR1cm57ZHVyYXRpb246bixkZWxheTp0LGVhc2luZzplfX1mdW5jdGlvbiB6TyhuLHQsZSxpLHIsbyxhPW51bGwscz0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50Om4sa2V5ZnJhbWVzOnQscHJlU3R5bGVQcm9wczplLHBvc3RTdHlsZVByb3BzOmksZHVyYXRpb246cixkZWxheTpvLHRvdGFsVGltZTpyK28sZWFzaW5nOmEsc3ViVGltZWxpbmU6c319dmFyIFh5PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXB9Z2V0KHQpe3JldHVybiB0aGlzLl9tYXAuZ2V0KHQpfHxbXX1hcHBlbmQodCxlKXtsZXQgaT10aGlzLl9tYXAuZ2V0KHQpO2l8fHRoaXMuX21hcC5zZXQodCxpPVtdKSxpLnB1c2goLi4uZSl9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9fSxLZmU9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLCRmZT1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gYzgobix0LGUsaSxyLG89bmV3IE1hcCxhPW5ldyBNYXAscyxsLGM9W10pe3JldHVybihuZXcgRE8pLmJ1aWxkS2V5ZnJhbWVzKG4sdCxlLGkscixvLGEscyxsLGMpfXZhciBETz1jbGFzc3tidWlsZEtleWZyYW1lcyh0LGUsaSxyLG8sYSxzLGwsYyxkPVtdKXtjPWN8fG5ldyBYeTtsZXQgdT1uZXcgUXkodCxlLGMscixvLGQsW10pO3Uub3B0aW9ucz1sO2xldCBwPWwuZGVsYXk/dWQobC5kZWxheSk6MDt1LmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKHApLHUuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbYV0sbnVsbCx1LmVycm9ycyxsKSxycyh0aGlzLGksdSk7bGV0IGY9dS50aW1lbGluZXMuZmlsdGVyKG09Pm0uY29udGFpbnNBbmltYXRpb24oKSk7aWYoZi5sZW5ndGgmJnMuc2l6ZSl7bGV0IG07Zm9yKGxldCB5PWYubGVuZ3RoLTE7eT49MDt5LS0pe2xldCBNPWZbeV07aWYoTS5lbGVtZW50PT09ZSl7bT1NO2JyZWFrfX1tJiYhbS5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpJiZtLnNldFN0eWxlcyhbc10sbnVsbCx1LmVycm9ycyxsKX1yZXR1cm4gZi5sZW5ndGg/Zi5tYXAobT0+bS5idWlsZEtleWZyYW1lcygpKTpbek8oZSxbXSxbXSxbXSwwLHAsIiIsITEpXX12aXNpdFRyaWdnZXIodCxlKXt9dmlzaXRTdGF0ZSh0LGUpe312aXNpdFRyYW5zaXRpb24odCxlKXt9dmlzaXRBbmltYXRlQ2hpbGQodCxlKXtsZXQgaT1lLnN1Ykluc3RydWN0aW9ucy5nZXQoZS5lbGVtZW50KTtpZihpKXtsZXQgcj1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKSxvPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGE9dGhpcy5fdmlzaXRTdWJJbnN0cnVjdGlvbnMoaSxyLHIub3B0aW9ucyk7byE9YSYmZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoYSl9ZS5wcmV2aW91c05vZGU9dH12aXNpdEFuaW1hdGVSZWYodCxlKXtsZXQgaT1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtpLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLHRoaXMuX2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKFt0Lm9wdGlvbnMsdC5hbmltYXRpb24ub3B0aW9uc10sZSxpKSx0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLGkpLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGkuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxlLnByZXZpb3VzTm9kZT10fV9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyh0LGUsaSl7Zm9yKGxldCByIG9mIHQpe2xldCBvPXI/LmRlbGF5O2lmKG8pe2xldCBhPSJudW1iZXIiPT10eXBlb2Ygbz9vOnVkKFl5KG8scj8ucGFyYW1zPz97fSxlLmVycm9ycykpO2kuZGVsYXlOZXh0U3RlcChhKX19fV92aXNpdFN1Ykluc3RydWN0aW9ucyh0LGUsaSl7bGV0IG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsYT1udWxsIT1pLmR1cmF0aW9uP3VkKGkuZHVyYXRpb24pOm51bGwscz1udWxsIT1pLmRlbGF5P3VkKGkuZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1hJiZ0LmZvckVhY2gobD0+e2xldCBjPWUuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKGwsYSxzKTtvPU1hdGgubWF4KG8sYy5kdXJhdGlvbitjLmRlbGF5KX0pLG99dmlzaXRSZWZlcmVuY2UodCxlKXtlLnVwZGF0ZU9wdGlvbnModC5vcHRpb25zLCEwKSxycyh0aGlzLHQuYW5pbWF0aW9uLGUpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRTZXF1ZW5jZSh0LGUpe2xldCBpPWUuc3ViQ29udGV4dENvdW50LHI9ZSxvPXQub3B0aW9ucztpZihvJiYoby5wYXJhbXN8fG8uZGVsYXkpJiYocj1lLmNyZWF0ZVN1YkNvbnRleHQobyksci50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSxudWxsIT1vLmRlbGF5KSl7Nj09ci5wcmV2aW91c05vZGUudHlwZSYmKHIuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLHIucHJldmlvdXNOb2RlPUJ3KTtsZXQgYT11ZChvLmRlbGF5KTtyLmRlbGF5TmV4dFN0ZXAoYSl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2goYT0+cnModGhpcyxhLHIpKSxyLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxyLnN1YkNvbnRleHRDb3VudD5pJiZyLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0R3JvdXAodCxlKXtsZXQgaT1bXSxyPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zJiZ0Lm9wdGlvbnMuZGVsYXk/dWQodC5vcHRpb25zLmRlbGF5KTowO3Quc3RlcHMuZm9yRWFjaChhPT57bGV0IHM9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7byYmcy5kZWxheU5leHRTdGVwKG8pLHJzKHRoaXMsYSxzKSxyPU1hdGgubWF4KHIscy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGkucHVzaChzLmN1cnJlbnRUaW1lbGluZSl9KSxpLmZvckVhY2goYT0+ZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhhKSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUociksZS5wcmV2aW91c05vZGU9dH1fdmlzaXRUaW1pbmcodCxlKXtpZih0LmR5bmFtaWMpe2xldCBpPXQuc3RyVmFsdWU7cmV0dXJuIEZ3KGUucGFyYW1zP1l5KGksZS5wYXJhbXMsZS5lcnJvcnMpOmksZS5lcnJvcnMpfXJldHVybntkdXJhdGlvbjp0LmR1cmF0aW9uLGRlbGF5OnQuZGVsYXksZWFzaW5nOnQuZWFzaW5nfX12aXNpdEFuaW1hdGUodCxlKXtsZXQgaT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyh0LnRpbWluZ3MsZSkscj1lLmN1cnJlbnRUaW1lbGluZTtpLmRlbGF5JiYoZS5pbmNyZW1lbnRUaW1lKGkuZGVsYXkpLHIuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2xldCBvPXQuc3R5bGU7NT09by50eXBlP3RoaXMudmlzaXRLZXlmcmFtZXMobyxlKTooZS5pbmNyZW1lbnRUaW1lKGkuZHVyYXRpb24pLHRoaXMudmlzaXRTdHlsZShvLGUpLHIuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsZS5wcmV2aW91c05vZGU9dH12aXNpdFN0eWxlKHQsZSl7bGV0IGk9ZS5jdXJyZW50VGltZWxpbmUscj1lLmN1cnJlbnRBbmltYXRlVGltaW5nczshciYmaS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkmJmkuZm9yd2FyZEZyYW1lKCk7bGV0IG89ciYmci5lYXNpbmd8fHQuZWFzaW5nO3QuaXNFbXB0eVN0ZXA/aS5hcHBseUVtcHR5U3RlcChvKTppLnNldFN0eWxlcyh0LnN0eWxlcyxvLGUuZXJyb3JzLGUub3B0aW9ucyksZS5wcmV2aW91c05vZGU9dH12aXNpdEtleWZyYW1lcyh0LGUpe2xldCBpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24sbz1pLmR1cmF0aW9uLHM9ZS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO3MuZWFzaW5nPWkuZWFzaW5nLHQuc3R5bGVzLmZvckVhY2gobD0+e3MuZm9yd2FyZFRpbWUoKGwub2Zmc2V0fHwwKSpvKSxzLnNldFN0eWxlcyhsLnN0eWxlcyxsLmVhc2luZyxlLmVycm9ycyxlLm9wdGlvbnMpLHMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCl9KSxlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHMpLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHIrbyksZS5wcmV2aW91c05vZGU9dH12aXNpdFF1ZXJ5KHQsZSl7bGV0IGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscj10Lm9wdGlvbnN8fHt9LG89ci5kZWxheT91ZChyLmRlbGF5KTowO28mJig2PT09ZS5wcmV2aW91c05vZGUudHlwZXx8MD09aSYmZS5jdXJyZW50VGltZWxpbmUuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpKSYmKGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGUucHJldmlvdXNOb2RlPUJ3KTtsZXQgYT1pLHM9ZS5pbnZva2VRdWVyeSh0LnNlbGVjdG9yLHQub3JpZ2luYWxTZWxlY3Rvcix0LmxpbWl0LHQuaW5jbHVkZVNlbGYsISFyLm9wdGlvbmFsLGUuZXJyb3JzKTtlLmN1cnJlbnRRdWVyeVRvdGFsPXMubGVuZ3RoO2xldCBsPW51bGw7cy5mb3JFYWNoKChjLGQpPT57ZS5jdXJyZW50UXVlcnlJbmRleD1kO2xldCB1PWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMsYyk7byYmdS5kZWxheU5leHRTdGVwKG8pLGM9PT1lLmVsZW1lbnQmJihsPXUuY3VycmVudFRpbWVsaW5lKSxycyh0aGlzLHQuYW5pbWF0aW9uLHUpLHUuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLGE9TWF0aC5tYXgoYSx1LmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSl9KSxlLmN1cnJlbnRRdWVyeUluZGV4PTAsZS5jdXJyZW50UXVlcnlUb3RhbD0wLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGEpLGwmJihlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGwpLGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3RhZ2dlcih0LGUpe2xldCBpPWUucGFyZW50Q29udGV4dCxyPWUuY3VycmVudFRpbWVsaW5lLG89dC50aW1pbmdzLGE9TWF0aC5hYnMoby5kdXJhdGlvbikscz1hKihlLmN1cnJlbnRRdWVyeVRvdGFsLTEpLGw9YSplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChvLmR1cmF0aW9uPDA/InJldmVyc2UiOm8uZWFzaW5nKXtjYXNlInJldmVyc2UiOmw9cy1sO2JyZWFrO2Nhc2UiZnVsbCI6bD1pLmN1cnJlbnRTdGFnZ2VyVGltZX1sZXQgZD1lLmN1cnJlbnRUaW1lbGluZTtsJiZkLmRlbGF5TmV4dFN0ZXAobCk7bGV0IHU9ZC5jdXJyZW50VGltZTtycyh0aGlzLHQuYW5pbWF0aW9uLGUpLGUucHJldmlvdXNOb2RlPXQsaS5jdXJyZW50U3RhZ2dlclRpbWU9ci5jdXJyZW50VGltZS11KyhyLnN0YXJ0VGltZS1pLmN1cnJlbnRUaW1lbGluZS5zdGFydFRpbWUpfX0sQnc9e30sUXk9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLGEscyxsKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN1Ykluc3RydWN0aW9ucz1pLHRoaXMuX2VudGVyQ2xhc3NOYW1lPXIsdGhpcy5fbGVhdmVDbGFzc05hbWU9byx0aGlzLmVycm9ycz1hLHRoaXMudGltZWxpbmVzPXMsdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1Cdyx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9ucz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9bHx8bmV3IGtoKHRoaXMuX2RyaXZlcixlLDApLHMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfXVwZGF0ZU9wdGlvbnModCxlKXtpZighdClyZXR1cm47bGV0IGk9dCxyPXRoaXMub3B0aW9ucztudWxsIT1pLmR1cmF0aW9uJiYoci5kdXJhdGlvbj11ZChpLmR1cmF0aW9uKSksbnVsbCE9aS5kZWxheSYmKHIuZGVsYXk9dWQoaS5kZWxheSkpO2xldCBvPWkucGFyYW1zO2lmKG8pe2xldCBhPXIucGFyYW1zO2F8fChhPXRoaXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKG8pLmZvckVhY2gocz0+eyghZXx8IWEuaGFzT3duUHJvcGVydHkocykpJiYoYVtzXT1ZeShvW3NdLGEsdGhpcy5lcnJvcnMpKX0pfX1fY29weU9wdGlvbnMoKXtsZXQgdD17fTtpZih0aGlzLm9wdGlvbnMpe2xldCBlPXRoaXMub3B0aW9ucy5wYXJhbXM7aWYoZSl7bGV0IGk9dC5wYXJhbXM9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChyPT57aVtyXT1lW3JdfSl9fXJldHVybiB0fWNyZWF0ZVN1YkNvbnRleHQodD1udWxsLGUsaSl7bGV0IHI9ZXx8dGhpcy5lbGVtZW50LG89bmV3IFF5KHRoaXMuX2RyaXZlcixyLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVyQ2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsocixpfHwwKSk7cmV0dXJuIG8ucHJldmlvdXNOb2RlPXRoaXMucHJldmlvdXNOb2RlLG8uY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzLG8ub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLG8udXBkYXRlT3B0aW9ucyh0KSxvLmN1cnJlbnRRdWVyeUluZGV4PXRoaXMuY3VycmVudFF1ZXJ5SW5kZXgsby5jdXJyZW50UXVlcnlUb3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLG8ucGFyZW50Q29udGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50Kyssb310cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUodCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPUJ3LHRoaXMuY3VycmVudFRpbWVsaW5lPXRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LHQpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfWFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZSh0LGUsaSl7bGV0IHI9e2R1cmF0aW9uOmU/P3QuZHVyYXRpb24sZGVsYXk6dGhpcy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUrKGk/PzApK3QuZGVsYXksZWFzaW5nOiIifSxvPW5ldyBJTyh0aGlzLl9kcml2ZXIsdC5lbGVtZW50LHQua2V5ZnJhbWVzLHQucHJlU3R5bGVQcm9wcyx0LnBvc3RTdHlsZVByb3BzLHIsdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2gobykscn1pbmNyZW1lbnRUaW1lKHQpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK3QpfWRlbGF5TmV4dFN0ZXAodCl7dD4wJiZ0aGlzLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKHQpfWludm9rZVF1ZXJ5KHQsZSxpLHIsbyxhKXtsZXQgcz1bXTtpZihyJiZzLnB1c2godGhpcy5lbGVtZW50KSx0Lmxlbmd0aD4wKXt0PSh0PXQucmVwbGFjZShLZmUsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSkucmVwbGFjZSgkZmUsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgYz10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9aSk7MCE9PWkmJihjPWk8MD9jLnNsaWNlKGMubGVuZ3RoK2ksYy5sZW5ndGgpOmMuc2xpY2UoMCxpKSkscy5wdXNoKC4uLmMpfXJldHVybiFvJiYwPT1zLmxlbmd0aCYmYS5wdXNoKG5ldyBidCgzMDE0LCExKSksc319LGtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPWksdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPXIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZWFzaW5nPW51bGwsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT1uZXcgTWFwLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nU3R5bGVzPW5ldyBNYXAsdGhpcy5fYmFja0ZpbGw9bmV3IE1hcCx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4wfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAodCl7bGV0IGU9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8ZT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK3QpLGUmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz10fWZvcmsodCxlKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcga2godGhpcy5fZHJpdmVyLHQsZXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUodCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPXQsdGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KHQse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKHQpe3QmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLHQpO2ZvcihsZXRbZSxpXW9mIHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChlLGl8fF9jKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsX2MpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKHQsZSxpLHIpe2UmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGUpO2xldCBvPXImJnIucGFyYW1zfHx7fSxhPWZ1bmN0aW9uKG4sdCl7bGV0IGksZT1uZXcgTWFwO3JldHVybiBuLmZvckVhY2gocj0+e2lmKCIqIj09PXIpe2k9aXx8dC5rZXlzKCk7Zm9yKGxldCBvIG9mIGkpZS5zZXQobyxfYyl9ZWxzZSBSaChyLGUpfSksZX0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFtzLGxdb2YgYSl7bGV0IGM9WXkobCxvLGkpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KHMsYyksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMocyl8fHRoaXMuX2JhY2tGaWxsLnNldChzLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChzKT8/X2MpLHRoaXMuX3VwZGF0ZVN0eWxlKHMsYyl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgodCxlKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSx0KX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKHQsZSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGUpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFt0LGVdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldCh0LGUpLHRoaXMuX3VwZGF0ZVN0eWxlKHQsZSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7bGV0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXt0Ll9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoZSxpKT0+e2xldCByPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoaSk7KCFyfHxlLnRpbWU+ci50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoaSxlLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtsZXQgdD1uZXcgU2V0LGU9bmV3IFNldCxpPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb24scj1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgocyxsKT0+e2xldCBjPVJoKHMsbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7Yy5mb3JFYWNoKChkLHUpPT57ZD09PUl3P3QuYWRkKHUpOmQ9PT1fYyYmZS5hZGQodSl9KSxpfHxjLnNldCgib2Zmc2V0IixsL3RoaXMuZHVyYXRpb24pLHIucHVzaChjKX0pO2xldCBvPXQuc2l6ZT9Mdyh0LnZhbHVlcygpKTpbXSxhPWUuc2l6ZT9MdyhlLnZhbHVlcygpKTpbXTtpZihpKXtsZXQgcz1yWzBdLGw9bmV3IE1hcChzKTtzLnNldCgib2Zmc2V0IiwwKSxsLnNldCgib2Zmc2V0IiwxKSxyPVtzLGxdfXJldHVybiB6Tyh0aGlzLmVsZW1lbnQscixvLGEsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9fSxJTz1jbGFzcyBleHRlbmRzIGtoe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxhLHM9ITEpe3N1cGVyKHQsZSxhLmRlbGF5KSx0aGlzLmtleWZyYW1lcz1pLHRoaXMucHJlU3R5bGVQcm9wcz1yLHRoaXMucG9zdFN0eWxlUHJvcHM9byx0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1zLHRoaXMudGltaW5ncz17ZHVyYXRpb246YS5kdXJhdGlvbixkZWxheTphLmRlbGF5LGVhc2luZzphLmVhc2luZ319Y29udGFpbnNBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9YnVpbGRLZXlmcmFtZXMoKXtsZXQgdD10aGlzLmtleWZyYW1lcyx7ZGVsYXk6ZSxkdXJhdGlvbjppLGVhc2luZzpyfT10aGlzLnRpbWluZ3M7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJmUpe2xldCBvPVtdLGE9aStlLHM9ZS9hLGw9UmgodFswXSk7bC5zZXQoIm9mZnNldCIsMCksby5wdXNoKGwpO2xldCBjPVJoKHRbMF0pO2Muc2V0KCJvZmZzZXQiLEhHKHMpKSxvLnB1c2goYyk7bGV0IGQ9dC5sZW5ndGgtMTtmb3IobGV0IHU9MTt1PD1kO3UrKyl7bGV0IHA9UmgodFt1XSksZj1wLmdldCgib2Zmc2V0Iik7cC5zZXQoIm9mZnNldCIsSEcoKGUrZippKS9hKSksby5wdXNoKHApfWk9YSxlPTAscj0iIix0PW99cmV0dXJuIHpPKHRoaXMuZWxlbWVudCx0LHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLGksZSxyLCEwKX19O2Z1bmN0aW9uIEhHKG4sdD0zKXtsZXQgZT1NYXRoLnBvdygxMCx0LTEpO3JldHVybiBNYXRoLnJvdW5kKG4qZSkvZX12YXIgbGY9Y2xhc3N7fSx0bWU9bmV3IFNldChbIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImxlZnQiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImZvbnRTaXplIiwib3V0bGluZVdpZHRoIiwib3V0bGluZU9mZnNldCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nUmlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwidGV4dEluZGVudCIsInBlcnNwZWN0aXZlIl0pLFZ3PWNsYXNzIGV4dGVuZHMgbGZ7bm9ybWFsaXplUHJvcGVydHlOYW1lKHQsZSl7cmV0dXJuIEhPKHQpfW5vcm1hbGl6ZVN0eWxlVmFsdWUodCxlLGkscil7bGV0IG89IiIsYT1pLnRvU3RyaW5nKCkudHJpbSgpO2lmKHRtZS5oYXMoZSkmJjAhPT1pJiYiMCIhPT1pKWlmKCJudW1iZXIiPT10eXBlb2YgaSlvPSJweCI7ZWxzZXtsZXQgcz1pLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7cyYmMD09c1sxXS5sZW5ndGgmJnIucHVzaChuZXcgYnQoMzAwNSwhMSkpfXJldHVybiBhK299fTtmdW5jdGlvbiB6RyhuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6bix0cmlnZ2VyTmFtZTp0LGlzUmVtb3ZhbFRyYW5zaXRpb246cixmcm9tU3RhdGU6ZSxmcm9tU3R5bGVzOm8sdG9TdGF0ZTppLHRvU3R5bGVzOmEsdGltZWxpbmVzOnMscXVlcmllZEVsZW1lbnRzOmwscHJlU3R5bGVQcm9wczpjLHBvc3RTdHlsZVByb3BzOmQsdG90YWxUaW1lOnUsZXJyb3JzOnB9fXZhciBfTz17fSxIdz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPWl9bWF0Y2godCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIG4uc29tZShvPT5vKHQsZSxpLHIpKX0odGhpcy5hc3QubWF0Y2hlcnMsdCxlLGkscil9YnVpbGRTdHlsZXModCxlLGkpe2xldCByPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVybiB2b2lkIDAhPT10JiYocj10aGlzLl9zdGF0ZVN0eWxlcy5nZXQodD8udG9TdHJpbmcoKSl8fHIpLHI/ci5idWlsZFN0eWxlcyhlLGkpOm5ldyBNYXB9YnVpbGQodCxlLGkscixvLGEscyxsLGMsZCl7bGV0IHU9W10scD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8X08sbT10aGlzLmJ1aWxkU3R5bGVzKGkscyYmcy5wYXJhbXN8fF9PLHUpLHk9bCYmbC5wYXJhbXN8fF9PLE09dGhpcy5idWlsZFN0eWxlcyhyLHksdSksdj1uZXcgU2V0LHg9bmV3IE1hcCxSPW5ldyBNYXAsQT0idm9pZCI9PT1yLEg9e3BhcmFtczppbWUoeSxwKSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sdGU9ZD9bXTpjOCh0LGUsdGhpcy5hc3QuYW5pbWF0aW9uLG8sYSxtLE0sSCxjLHUpLEs9MDtpZih0ZS5mb3JFYWNoKFplPT57Sz1NYXRoLm1heChaZS5kdXJhdGlvbitaZS5kZWxheSxLKX0pLHUubGVuZ3RoKXJldHVybiB6RyhlLHRoaXMuX3RyaWdnZXJOYW1lLGkscixBLG0sTSxbXSxbXSx4LFIsSyx1KTt0ZS5mb3JFYWNoKFplPT57bGV0IEllPVplLmVsZW1lbnQsST1vcyh4LEllLG5ldyBTZXQpO1plLnByZVN0eWxlUHJvcHMuZm9yRWFjaChjZT0+SS5hZGQoY2UpKTtsZXQgcmU9b3MoUixJZSxuZXcgU2V0KTtaZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGNlPT5yZS5hZGQoY2UpKSxJZSE9PWUmJnYuYWRkKEllKX0pO2xldCBDZT1Mdyh2LnZhbHVlcygpKTtyZXR1cm4gekcoZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsQSxtLE0sdGUsQ2UseCxSLEspfX07ZnVuY3Rpb24gaW1lKG4sdCl7bGV0IGU9JHkodCk7Zm9yKGxldCBpIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShpKSYmbnVsbCE9bltpXSYmKGVbaV09bltpXSk7cmV0dXJuIGV9ZnVuY3Rpb24gVUcobix0LGUpe24uaGFzKHQpP24uaGFzKGUpfHxuLnNldChlLG4uZ2V0KHQpKTpuLmhhcyhlKSYmbi5zZXQodCxuLmdldChlKSl9dmFyIGFtZT1uZXcgWHksakc9Im5nLWFuaW1hdGUtcXVldWVkIix5Tz0ibmctYW5pbWF0ZS1kaXNhYmxlZCIsdW1lPVtdLGQ4PXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSxwbWU9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LE9zPSJfX25nX3JlbW92ZWQiLFp5PWNsYXNze2dldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc31jb25zdHJ1Y3Rvcih0LGU9IiIpe3RoaXMubmFtZXNwYWNlSWQ9ZTtsZXQgaT10JiZ0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9KGk/dC52YWx1ZTp0KT8/bnVsbCxpKXtsZXQgbz0keSh0KTtkZWxldGUgby52YWx1ZSx0aGlzLm9wdGlvbnM9b31lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9YWJzb3JiT3B0aW9ucyh0KXtsZXQgZT10LnBhcmFtcztpZihlKXtsZXQgaT10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGUpLmZvckVhY2gocj0+e251bGw9PWlbcl0mJihpW3JdPWVbcl0pfSl9fX0scXk9InZvaWQiLGJPPW5ldyBaeShxeSksS3k9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLnRyaWdnZXJOYW1lPWUsdGhpcy5lbGVtZW50PWksdGhpcy5fcGxheWVyPW5ldyBndSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhpcy5fcXVldWVkQ2FsbGJhY2tzPW5ldyBNYXAsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXNldFJlYWxQbGF5ZXIodCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPXQsdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGUsaSk9PntlLmZvckVhY2gocj0+TE8odCxpLHZvaWQgMCxyKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZSh0LnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKHQpe3RoaXMudG90YWxUaW1lPXR9c3luY1BsYXllckV2ZW50cyh0KXtsZXQgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJnQub25TdGFydCgoKT0+ZS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLHQub25Eb25lKCgpPT50aGlzLmZpbmlzaCgpKSx0Lm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KHQsZSl7b3ModGhpcy5fcXVldWVkQ2FsbGJhY2tzLHQsW10pLnB1c2goZSl9b25Eb25lKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIix0KSx0aGlzLl9wbGF5ZXIub25Eb25lKHQpfW9uU3RhcnQodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0Iix0KSx0aGlzLl9wbGF5ZXIub25TdGFydCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLHQpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kodCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQoKX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMuX3BsYXllci5maW5pc2goKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24odCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbih0KX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJmUudHJpZ2dlckNhbGxiYWNrKHQpfX07ZnVuY3Rpb24gUHcobil7cmV0dXJuIG4mJjE9PT1uLm5vZGVUeXBlfWZ1bmN0aW9uIEdHKG4sdCl7bGV0IGU9bi5zdHlsZS5kaXNwbGF5O3JldHVybiBuLnN0eWxlLmRpc3BsYXk9dD8/Im5vbmUiLGV9ZnVuY3Rpb24gV0cobix0LGUsaSxyKXtsZXQgbz1bXTtlLmZvckVhY2gobD0+by5wdXNoKEdHKGwpKSk7bGV0IGE9W107aS5mb3JFYWNoKChsLGMpPT57bGV0IGQ9bmV3IE1hcDtsLmZvckVhY2godT0+e2xldCBwPXQuY29tcHV0ZVN0eWxlKGMsdSxyKTtkLnNldCh1LHApLCghcHx8MD09cC5sZW5ndGgpJiYoY1tPc109cG1lLGEucHVzaChjKSl9KSxuLnNldChjLGQpfSk7bGV0IHM9MDtyZXR1cm4gZS5mb3JFYWNoKGw9PkdHKGwsb1tzKytdKSksYX1mdW5jdGlvbiBxRyhuLHQpe2xldCBlPW5ldyBNYXA7aWYobi5mb3JFYWNoKHM9PmUuc2V0KHMsW10pKSwwPT10Lmxlbmd0aClyZXR1cm4gZTtsZXQgaT0xLHI9bmV3IFNldCh0KSxvPW5ldyBNYXA7ZnVuY3Rpb24gYShzKXtpZighcylyZXR1cm4gaTtsZXQgbD1vLmdldChzKTtpZihsKXJldHVybiBsO2xldCBjPXMucGFyZW50Tm9kZTtyZXR1cm4gbD1lLmhhcyhjKT9jOnIuaGFzKGMpP2k6YShjKSxvLnNldChzLGwpLGx9cmV0dXJuIHQuZm9yRWFjaChzPT57bGV0IGw9YShzKTtsIT09aSYmZS5nZXQobCkucHVzaChzKX0pLGV9ZnVuY3Rpb24gRnMobix0KXtuLmNsYXNzTGlzdD8uYWRkKHQpfWZ1bmN0aW9uIEFoKG4sdCl7bi5jbGFzc0xpc3Q/LnJlbW92ZSh0KX1mdW5jdGlvbiBnbWUobix0LGUpe191KGUpLm9uRG9uZSgoKT0+bi5wcm9jZXNzTGVhdmVOb2RlKHQpKX1mdW5jdGlvbiB1OChuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdO2kgaW5zdGFuY2VvZiBqeT91OChpLnBsYXllcnMsdCk6dC5wdXNoKGkpfX1mdW5jdGlvbiBZRyhuLHQsZSl7bGV0IGk9ZS5nZXQobik7aWYoIWkpcmV0dXJuITE7bGV0IHI9dC5nZXQobik7cmV0dXJuIHI/aS5mb3JFYWNoKG89PnIuYWRkKG8pKTp0LnNldChuLGkpLGUuZGVsZXRlKG4pLCEwfXZhciB5dT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5ib2R5Tm9kZT10LHRoaXMuX2RyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9aSx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0ocixvKT0+e30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgY2xhc3N7X29uUmVtb3ZhbENvbXBsZXRlKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfWNvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShyLG8pPT57fX1nZXQgcXVldWVkUGxheWVycygpe2xldCB0PVtdO3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goZT0+e2UucGxheWVycy5mb3JFYWNoKGk9PntpLnF1ZXVlZCYmdC5wdXNoKGkpfSl9KSx0fWNyZWF0ZU5hbWVzcGFjZSh0LGUpe2xldCBpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5pZD10LHRoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLl9lbmdpbmU9aSx0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9bmV3IE1hcCx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrdCxGcyhlLHRoaXMuX2hvc3RDbGFzc05hbWUpfWxpc3Rlbih0LGUsaSxyKXtpZighdGhpcy5fdHJpZ2dlcnMuaGFzKGUpKXRocm93IG5ldyBidCgzMzAyLCExKTtpZihudWxsPT1pfHwwPT1pLmxlbmd0aCl0aHJvdyBuZXcgYnQoMzMwMywhMSk7aWYoInN0YXJ0IiE9KG49aSkmJiJkb25lIiE9bil0aHJvdyBuZXcgYnQoMzQwMCwhMSk7dmFyIG47bGV0IG89b3ModGhpcy5fZWxlbWVudExpc3RlbmVycyx0LFtdKSxhPXtuYW1lOmUscGhhc2U6aSxjYWxsYmFjazpyfTtvLnB1c2goYSk7bGV0IHM9b3ModGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCx0LG5ldyBNYXApO3JldHVybiBzLmhhcyhlKXx8KEZzKHQsQXcpLEZzKHQsQXcrIi0iK2UpLHMuc2V0KGUsYk8pKSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57bGV0IGw9by5pbmRleE9mKGEpO2w+PTAmJm8uc3BsaWNlKGwsMSksdGhpcy5fdHJpZ2dlcnMuaGFzKGUpfHxzLmRlbGV0ZShlKX0pfX1yZWdpc3Rlcih0LGUpe3JldHVybiF0aGlzLl90cmlnZ2Vycy5oYXModCkmJih0aGlzLl90cmlnZ2Vycy5zZXQodCxlKSwhMCl9X2dldFRyaWdnZXIodCl7bGV0IGU9dGhpcy5fdHJpZ2dlcnMuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBidCgzNDAxLCExKTtyZXR1cm4gZX10cmlnZ2VyKHQsZSxpLHI9ITApe2xldCBvPXRoaXMuX2dldFRyaWdnZXIoZSksYT1uZXcgS3kodGhpcy5pZCxlLHQpLHM9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7c3x8KEZzKHQsQXcpLEZzKHQsQXcrIi0iK2UpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KHQscz1uZXcgTWFwKSk7bGV0IGw9cy5nZXQoZSksYz1uZXcgWnkoaSx0aGlzLmlkKTtpZighKGkmJmkuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZsJiZjLmFic29yYk9wdGlvbnMobC5vcHRpb25zKSxzLnNldChlLGMpLGx8fChsPWJPKSxjLnZhbHVlIT09cXkmJmwudmFsdWU9PT1jLnZhbHVlKXtpZighZnVuY3Rpb24obix0KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPU9iamVjdC5rZXlzKHQpO2lmKGUubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89ZVtyXTtpZighdC5oYXNPd25Qcm9wZXJ0eShvKXx8bltvXSE9PXRbb10pcmV0dXJuITF9cmV0dXJuITB9KGwucGFyYW1zLGMucGFyYW1zKSl7bGV0IHk9W10sTT1vLm1hdGNoU3R5bGVzKGwudmFsdWUsbC5wYXJhbXMseSksdj1vLm1hdGNoU3R5bGVzKGMudmFsdWUsYy5wYXJhbXMseSk7eS5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKHkpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57c2YodCxNKSx5Yyh0LHYpfSl9cmV0dXJufWxldCBwPW9zKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO3AuZm9yRWFjaCh5PT57eS5uYW1lc3BhY2VJZD09dGhpcy5pZCYmeS50cmlnZ2VyTmFtZT09ZSYmeS5xdWV1ZWQmJnkuZGVzdHJveSgpfSk7bGV0IGY9by5tYXRjaFRyYW5zaXRpb24obC52YWx1ZSxjLnZhbHVlLHQsYy5wYXJhbXMpLG09ITE7aWYoIWYpe2lmKCFyKXJldHVybjtmPW8uZmFsbGJhY2tUcmFuc2l0aW9uLG09ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSx0cmFuc2l0aW9uOmYsZnJvbVN0YXRlOmwsdG9TdGF0ZTpjLHBsYXllcjphLGlzRmFsbGJhY2tUcmFuc2l0aW9uOm19KSxtfHwoRnModCxqRyksYS5vblN0YXJ0KCgpPT57QWgodCxqRyl9KSksYS5vbkRvbmUoKCk9PntsZXQgeT10aGlzLnBsYXllcnMuaW5kZXhPZihhKTt5Pj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKHksMSk7bGV0IE09dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKE0pe2xldCB2PU0uaW5kZXhPZihhKTt2Pj0wJiZNLnNwbGljZSh2LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKGEpLHAucHVzaChhKSxhfWRlcmVnaXN0ZXIodCl7dGhpcy5fdHJpZ2dlcnMuZGVsZXRlKHQpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZm9yRWFjaChlPT5lLmRlbGV0ZSh0KSksdGhpcy5fZWxlbWVudExpc3RlbmVycy5mb3JFYWNoKChlLGkpPT57dGhpcy5fZWxlbWVudExpc3RlbmVycy5zZXQoaSxlLmZpbHRlcihyPT5yLm5hbWUhPXQpKX0pfWNsZWFyRWxlbWVudENhY2hlKHQpe3RoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZGVsZXRlKHQpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZGVsZXRlKHQpO2xldCBlPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiYoZS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpe2xldCBpPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkodCxPdywhMCk7aS5mb3JFYWNoKHI9PntpZihyW09zXSlyZXR1cm47bGV0IG89dGhpcy5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChyKTtvLnNpemU/by5mb3JFYWNoKGE9PmEudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHIsZSwhMSwhMCkpOnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUocil9KSx0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5pLmZvckVhY2gocj0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShyKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsaSxyKXtsZXQgbz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KSxhPW5ldyBNYXA7aWYobyl7bGV0IHM9W107aWYoby5mb3JFYWNoKChsLGMpPT57aWYoYS5zZXQoYyxsLnZhbHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoYykpe2xldCBkPXRoaXMudHJpZ2dlcih0LGMscXkscik7ZCYmcy5wdXNoKGQpfX0pLHMubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCEwLGUsYSksaSYmX3Uocykub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpe2xldCBlPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpLGk9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYoZSYmaSl7bGV0IHI9bmV3IFNldDtlLmZvckVhY2gobz0+e2xldCBhPW8ubmFtZTtpZihyLmhhcyhhKSlyZXR1cm47ci5hZGQoYSk7bGV0IGw9dGhpcy5fdHJpZ2dlcnMuZ2V0KGEpLmZhbGxiYWNrVHJhbnNpdGlvbixjPWkuZ2V0KGEpfHxiTyxkPW5ldyBaeShxeSksdT1uZXcgS3kodGhpcy5pZCxhLHQpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6YSx0cmFuc2l0aW9uOmwsZnJvbVN0YXRlOmMsdG9TdGF0ZTpkLHBsYXllcjp1LGlzRmFsbGJhY2tUcmFuc2l0aW9uOiEwfSl9KX19cmVtb3ZlTm9kZSh0LGUpe2xldCBpPXRoaXMuX2VuZ2luZTtpZih0LmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMCkpcmV0dXJuO2xldCByPSExO2lmKGkudG90YWxBbmltYXRpb25zKXtsZXQgbz1pLnBsYXllcnMubGVuZ3RoP2kucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKG8mJm8ubGVuZ3RoKXI9ITA7ZWxzZXtsZXQgYT10O2Zvcig7YT1hLnBhcmVudE5vZGU7KWlmKGkuc3RhdGVzQnlFbGVtZW50LmdldChhKSl7cj0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpLHIpaS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITEsZSk7ZWxzZXtsZXQgbz10W09zXTsoIW98fG89PT1kOCkmJihpLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUodCkpLGkuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KSxpLl9vblJlbW92YWxDb21wbGV0ZSh0LGUpKX19aW5zZXJ0Tm9kZSh0LGUpe0ZzKHQsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyh0KXtsZXQgZT1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChpPT57bGV0IHI9aS5wbGF5ZXI7aWYoci5kZXN0cm95ZWQpcmV0dXJuO2xldCBvPWkuZWxlbWVudCxhPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO2EmJmEuZm9yRWFjaChzPT57aWYocy5uYW1lPT1pLnRyaWdnZXJOYW1lKXtsZXQgbD1OTyhvLGkudHJpZ2dlck5hbWUsaS5mcm9tU3RhdGUudmFsdWUsaS50b1N0YXRlLnZhbHVlKTtsLl9kYXRhPXQsTE8oaS5wbGF5ZXIscy5waGFzZSxsLHMuY2FsbGJhY2spfX0pLHIubWFya2VkRm9yRGVzdHJveT90aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e3IuZGVzdHJveSgpfSk6ZS5wdXNoKGkpfSksdGhpcy5fcXVldWU9W10sZS5zb3J0KChpLHIpPT57bGV0IG89aS50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxhPXIudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PW98fDA9PWE/by1hOnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGkuZWxlbWVudCxyLmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KHQpe3RoaXMucGxheWVycy5mb3JFYWNoKGU9PmUuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LHQpfWVsZW1lbnRDb250YWluc0RhdGEodCl7bGV0IGU9ITE7cmV0dXJuIHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuaGFzKHQpJiYoZT0hMCksZT0hIXRoaXMuX3F1ZXVlLmZpbmQoaT0+aS5lbGVtZW50PT09dCl8fGUsZX19KHQsZSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsZSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoaSxlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsaSksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09aX1fYmFsYW5jZU5hbWVzcGFjZUxpc3QodCxlKXtsZXQgaT10aGlzLl9uYW1lc3BhY2VMaXN0LHI9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtpZihpLmxlbmd0aC0xPj0wKXtsZXQgYT0hMSxzPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoZSk7Zm9yKDtzOyl7bGV0IGw9ci5nZXQocyk7aWYobCl7bGV0IGM9aS5pbmRleE9mKGwpO2kuc3BsaWNlKGMrMSwwLHQpLGE9ITA7YnJlYWt9cz10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KHMpfWF8fGkudW5zaGlmdCh0KX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gci5zZXQoZSx0KSx0fXJlZ2lzdGVyKHQsZSl7bGV0IGk9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3JldHVybiBpfHwoaT10aGlzLmNyZWF0ZU5hbWVzcGFjZSh0LGUpKSxpfXJlZ2lzdGVyVHJpZ2dlcih0LGUsaSl7bGV0IHI9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3ImJnIucmVnaXN0ZXIoZSxpKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KHQsZSl7aWYoIXQpcmV0dXJuO2xldCBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO3RoaXMuYWZ0ZXJGbHVzaCgoKT0+e3RoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGkuaG9zdEVsZW1lbnQpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07bGV0IHI9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGkpO3I+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKHIsMSl9KSx0aGlzLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+aS5kZXN0cm95KGUpKX1fZmV0Y2hOYW1lc3BhY2UodCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX1mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCl7bGV0IGU9bmV3IFNldCxpPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihpKWZvcihsZXQgciBvZiBpLnZhbHVlcygpKWlmKHIubmFtZXNwYWNlSWQpe2xldCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHIubmFtZXNwYWNlSWQpO28mJmUuYWRkKG8pfXJldHVybiBlfXRyaWdnZXIodCxlLGkscil7aWYoUHcoZSkpe2xldCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2lmKG8pcmV0dXJuIG8udHJpZ2dlcihlLGksciksITB9cmV0dXJuITF9aW5zZXJ0Tm9kZSh0LGUsaSxyKXtpZighUHcoZSkpcmV0dXJuO2xldCBvPWVbT3NdO2lmKG8mJm8uc2V0Rm9yUmVtb3ZhbCl7by5zZXRGb3JSZW1vdmFsPSExLG8uc2V0Rm9yTW92ZT0hMDtsZXQgYT10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTthPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKGEsMSl9aWYodCl7bGV0IGE9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7YSYmYS5pbnNlcnROb2RlKGUsaSl9ciYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpfWNvbGxlY3RFbnRlckVsZW1lbnQodCl7dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLnB1c2godCl9bWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl7ZT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZCh0KSxGcyh0LHlPKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksQWgodCx5TykpfXJlbW92ZU5vZGUodCxlLGkscil7aWYoUHcoZSkpe2xldCBvPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtpZihvP28ucmVtb3ZlTm9kZShlLHIpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLHIpLGkpe2xldCBhPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGUpO2EmJmEuaWQhPT10JiZhLnJlbW92ZU5vZGUoZSxyKX19ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShlLHIpfW1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSxpLHIsbyl7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZVtPc109e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDpyLGhhc0FuaW1hdGlvbjppLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6b319bGlzdGVuKHQsZSxpLHIsbyl7cmV0dXJuIFB3KGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLGkscixvKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24odCxlLGkscixvKXtyZXR1cm4gdC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLHQuZWxlbWVudCx0LmZyb21TdGF0ZS52YWx1ZSx0LnRvU3RhdGUudmFsdWUsaSxyLHQuZnJvbVN0YXRlLm9wdGlvbnMsdC50b1N0YXRlLm9wdGlvbnMsZSxvKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpe2xldCBlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsT3csITApO2UuZm9yRWFjaChpPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChpKSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoZT10aGlzLmRyaXZlci5xdWVyeSh0LE1PLCEwKSxlLmZvckVhY2goaT0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGkpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KHQpe2xldCBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGk9PntpLnF1ZXVlZD9pLm1hcmtlZEZvckRlc3Ryb3k9ITA6aS5kZXN0cm95KCl9KX1maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpe2xldCBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChpPT5pLmZpbmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gX3UodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PnQoKSk7dCgpfSl9cHJvY2Vzc0xlYXZlTm9kZSh0KXtsZXQgZT10W09zXTtpZihlJiZlLnNldEZvclJlbW92YWwpe2lmKHRbT3NdPWQ4LGUubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KTtsZXQgaT10aGlzLl9mZXRjaE5hbWVzcGFjZShlLm5hbWVzcGFjZUlkKTtpJiZpLmNsZWFyRWxlbWVudENhY2hlKHQpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKHQsZS5zZXRGb3JSZW1vdmFsKX10LmNsYXNzTGlzdD8uY29udGFpbnMoeU8pJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKSx0aGlzLmRyaXZlci5xdWVyeSh0LCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goaT0+e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGksITEpfSl9Zmx1c2godD0tMSl7bGV0IGU9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKGkscik9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGkscikpLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgaT0wO2k8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtpKyspRnModGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2ldLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2xldCBpPVtdO3RyeXtlPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhpLHQpfWZpbmFsbHl7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXSgpfX1lbHNlIGZvcihsZXQgaT0wO2k8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtpKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tpXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goaT0+aSgpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtsZXQgaT10aGlzLl93aGVuUXVpZXRGbnM7dGhpcy5fd2hlblF1aWV0Rm5zPVtdLGUubGVuZ3RoP191KGUpLm9uRG9uZSgoKT0+e2kuZm9yRWFjaChyPT5yKCkpfSk6aS5mb3JFYWNoKHI9PnIoKSl9fXJlcG9ydEVycm9yKHQpe3Rocm93IG5ldyBidCgzNDAyLCExKX1fZmx1c2hBbmltYXRpb25zKHQsZSl7bGV0IGk9bmV3IFh5LHI9W10sbz1uZXcgTWFwLGE9W10scz1uZXcgTWFwLGw9bmV3IE1hcCxjPW5ldyBNYXAsZD1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKG5lPT57ZC5hZGQobmUpO2xldCBkZT10aGlzLmRyaXZlci5xdWVyeShuZSwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCk7Zm9yKGxldCB1ZT0wO3VlPGRlLmxlbmd0aDt1ZSsrKWQuYWRkKGRlW3VlXSl9KTtsZXQgdT10aGlzLmJvZHlOb2RlLHA9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLGY9cUcocCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLG09bmV3IE1hcCx5PTA7Zi5mb3JFYWNoKChuZSxkZSk9PntsZXQgdWU9ZTgreSsrO20uc2V0KGRlLHVlKSxuZS5mb3JFYWNoKEdlPT5GcyhHZSx1ZSkpfSk7bGV0IE09W10sdj1uZXcgU2V0LHg9bmV3IFNldDtmb3IobGV0IG5lPTA7bmU8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtuZSsrKXtsZXQgZGU9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW25lXSx1ZT1kZVtPc107dWUmJnVlLnNldEZvclJlbW92YWwmJihNLnB1c2goZGUpLHYuYWRkKGRlKSx1ZS5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoZGUsIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaChHZT0+di5hZGQoR2UpKTp4LmFkZChkZSkpfWxldCBSPW5ldyBNYXAsQT1xRyhwLEFycmF5LmZyb20odikpO0EuZm9yRWFjaCgobmUsZGUpPT57bGV0IHVlPUNPK3krKztSLnNldChkZSx1ZSksbmUuZm9yRWFjaChHZT0+RnMoR2UsdWUpKX0pLHQucHVzaCgoKT0+e2YuZm9yRWFjaCgobmUsZGUpPT57bGV0IHVlPW0uZ2V0KGRlKTtuZS5mb3JFYWNoKEdlPT5BaChHZSx1ZSkpfSksQS5mb3JFYWNoKChuZSxkZSk9PntsZXQgdWU9Ui5nZXQoZGUpO25lLmZvckVhY2goR2U9PkFoKEdlLHVlKSl9KSxNLmZvckVhY2gobmU9Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUobmUpfSl9KTtsZXQgSD1bXSx0ZT1bXTtmb3IobGV0IG5lPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7bmU+PTA7bmUtLSl0aGlzLl9uYW1lc3BhY2VMaXN0W25lXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGUpLmZvckVhY2godWU9PntsZXQgR2U9dWUucGxheWVyLE1lPXVlLmVsZW1lbnQ7aWYoSC5wdXNoKEdlKSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXtsZXQgU3Q9TWVbT3NdO2lmKFN0JiZTdC5zZXRGb3JNb3ZlKXtpZihTdC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiZTdC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcyh1ZS50cmlnZ2VyTmFtZSkpe2xldCBybj1TdC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmdldCh1ZS50cmlnZ2VyTmFtZSksdmU9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHVlLmVsZW1lbnQpO2lmKHZlJiZ2ZS5oYXModWUudHJpZ2dlck5hbWUpKXtsZXQgaHQ9dmUuZ2V0KHVlLnRyaWdnZXJOYW1lKTtodC52YWx1ZT1ybix2ZS5zZXQodWUudHJpZ2dlck5hbWUsaHQpfX1yZXR1cm4gdm9pZCBHZS5kZXN0cm95KCl9fWxldCBOZT0hdXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh1LE1lKSxjdD1SLmdldChNZSksd3Q9bS5nZXQoTWUpLGZ0PXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24odWUsaSx3dCxjdCxOZSk7aWYoZnQuZXJyb3JzJiZmdC5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIHRlLnB1c2goZnQpO2lmKE5lKXJldHVybiBHZS5vblN0YXJ0KCgpPT5zZihNZSxmdC5mcm9tU3R5bGVzKSksR2Uub25EZXN0cm95KCgpPT55YyhNZSxmdC50b1N0eWxlcykpLHZvaWQgci5wdXNoKEdlKTtpZih1ZS5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gR2Uub25TdGFydCgoKT0+c2YoTWUsZnQuZnJvbVN0eWxlcykpLEdlLm9uRGVzdHJveSgoKT0+eWMoTWUsZnQudG9TdHlsZXMpKSx2b2lkIHIucHVzaChHZSk7bGV0IE9lPVtdO2Z0LnRpbWVsaW5lcy5mb3JFYWNoKFN0PT57U3Quc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITAsdGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhTdC5lbGVtZW50KXx8T2UucHVzaChTdCl9KSxmdC50aW1lbGluZXM9T2UsaS5hcHBlbmQoTWUsZnQudGltZWxpbmVzKSxhLnB1c2goe2luc3RydWN0aW9uOmZ0LHBsYXllcjpHZSxlbGVtZW50Ok1lfSksZnQucXVlcmllZEVsZW1lbnRzLmZvckVhY2goU3Q9Pm9zKHMsU3QsW10pLnB1c2goR2UpKSxmdC5wcmVTdHlsZVByb3BzLmZvckVhY2goKFN0LHJuKT0+e2lmKFN0LnNpemUpe2xldCB2ZT1sLmdldChybik7dmV8fGwuc2V0KHJuLHZlPW5ldyBTZXQpLFN0LmZvckVhY2goKGh0LG10KT0+dmUuYWRkKG10KSl9fSksZnQucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgoU3Qscm4pPT57bGV0IHZlPWMuZ2V0KHJuKTt2ZXx8Yy5zZXQocm4sdmU9bmV3IFNldCksU3QuZm9yRWFjaCgoaHQsbXQpPT52ZS5hZGQobXQpKX0pfSk7aWYodGUubGVuZ3RoKXtsZXQgbmU9W107dGUuZm9yRWFjaChkZT0+e25lLnB1c2gobmV3IGJ0KDM1MDUsITEpKX0pLEguZm9yRWFjaChkZT0+ZGUuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKG5lKX1sZXQgSz1uZXcgTWFwLENlPW5ldyBNYXA7YS5mb3JFYWNoKG5lPT57bGV0IGRlPW5lLmVsZW1lbnQ7aS5oYXMoZGUpJiYoQ2Uuc2V0KGRlLGRlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChuZS5wbGF5ZXIubmFtZXNwYWNlSWQsbmUuaW5zdHJ1Y3Rpb24sSykpfSksci5mb3JFYWNoKG5lPT57bGV0IGRlPW5lLmVsZW1lbnQ7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKGRlLCExLG5lLm5hbWVzcGFjZUlkLG5lLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goR2U9PntvcyhLLGRlLFtdKS5wdXNoKEdlKSxHZS5kZXN0cm95KCl9KX0pO2xldCBaZT1NLmZpbHRlcihuZT0+WUcobmUsbCxjKSksSWU9bmV3IE1hcDtXRyhJZSx0aGlzLmRyaXZlcix4LGMsX2MpLmZvckVhY2gobmU9PntZRyhuZSxsLGMpJiZaZS5wdXNoKG5lKX0pO2xldCByZT1uZXcgTWFwO2YuZm9yRWFjaCgobmUsZGUpPT57V0cocmUsdGhpcy5kcml2ZXIsbmV3IFNldChuZSksbCxJdyl9KSxaZS5mb3JFYWNoKG5lPT57bGV0IGRlPUllLmdldChuZSksdWU9cmUuZ2V0KG5lKTtJZS5zZXQobmUsbmV3IE1hcChbLi4uQXJyYXkuZnJvbShkZT8uZW50cmllcygpPz9bXSksLi4uQXJyYXkuZnJvbSh1ZT8uZW50cmllcygpPz9bXSldKSl9KTtsZXQgY2U9W10sZmU9W10sX2U9e307YS5mb3JFYWNoKG5lPT57bGV0e2VsZW1lbnQ6ZGUscGxheWVyOnVlLGluc3RydWN0aW9uOkdlfT1uZTtpZihpLmhhcyhkZSkpe2lmKGQuaGFzKGRlKSlyZXR1cm4gdWUub25EZXN0cm95KCgpPT55YyhkZSxHZS50b1N0eWxlcykpLHVlLmRpc2FibGVkPSEwLHVlLm92ZXJyaWRlVG90YWxUaW1lKEdlLnRvdGFsVGltZSksdm9pZCByLnB1c2godWUpO2xldCBNZT1fZTtpZihDZS5zaXplPjEpe2xldCBjdD1kZSx3dD1bXTtmb3IoO2N0PWN0LnBhcmVudE5vZGU7KXtsZXQgZnQ9Q2UuZ2V0KGN0KTtpZihmdCl7TWU9ZnQ7YnJlYWt9d3QucHVzaChjdCl9d3QuZm9yRWFjaChmdD0+Q2Uuc2V0KGZ0LE1lKSl9bGV0IE5lPXRoaXMuX2J1aWxkQW5pbWF0aW9uKHVlLm5hbWVzcGFjZUlkLEdlLEssbyxyZSxJZSk7aWYodWUuc2V0UmVhbFBsYXllcihOZSksTWU9PT1fZSljZS5wdXNoKHVlKTtlbHNle2xldCBjdD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KE1lKTtjdCYmY3QubGVuZ3RoJiYodWUucGFyZW50UGxheWVyPV91KGN0KSksci5wdXNoKHVlKX19ZWxzZSBzZihkZSxHZS5mcm9tU3R5bGVzKSx1ZS5vbkRlc3Ryb3koKCk9PnljKGRlLEdlLnRvU3R5bGVzKSksZmUucHVzaCh1ZSksZC5oYXMoZGUpJiZyLnB1c2godWUpfSksZmUuZm9yRWFjaChuZT0+e2xldCBkZT1vLmdldChuZS5lbGVtZW50KTtpZihkZSYmZGUubGVuZ3RoKXtsZXQgdWU9X3UoZGUpO25lLnNldFJlYWxQbGF5ZXIodWUpfX0pLHIuZm9yRWFjaChuZT0+e25lLnBhcmVudFBsYXllcj9uZS5zeW5jUGxheWVyRXZlbnRzKG5lLnBhcmVudFBsYXllcik6bmUuZGVzdHJveSgpfSk7Zm9yKGxldCBuZT0wO25lPE0ubGVuZ3RoO25lKyspe2xldCBkZT1NW25lXSx1ZT1kZVtPc107aWYoQWgoZGUsQ08pLHVlJiZ1ZS5oYXNBbmltYXRpb24pY29udGludWU7bGV0IEdlPVtdO2lmKHMuc2l6ZSl7bGV0IE5lPXMuZ2V0KGRlKTtOZSYmTmUubGVuZ3RoJiZHZS5wdXNoKC4uLk5lKTtsZXQgY3Q9dGhpcy5kcml2ZXIucXVlcnkoZGUsTU8sITApO2ZvcihsZXQgd3Q9MDt3dDxjdC5sZW5ndGg7d3QrKyl7bGV0IGZ0PXMuZ2V0KGN0W3d0XSk7ZnQmJmZ0Lmxlbmd0aCYmR2UucHVzaCguLi5mdCl9fWxldCBNZT1HZS5maWx0ZXIoTmU9PiFOZS5kZXN0cm95ZWQpO01lLmxlbmd0aD9nbWUodGhpcyxkZSxNZSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGRlKX1yZXR1cm4gTS5sZW5ndGg9MCxjZS5mb3JFYWNoKG5lPT57dGhpcy5wbGF5ZXJzLnB1c2gobmUpLG5lLm9uRG9uZSgoKT0+e25lLmRlc3Ryb3koKTtsZXQgZGU9dGhpcy5wbGF5ZXJzLmluZGV4T2YobmUpO3RoaXMucGxheWVycy5zcGxpY2UoZGUsMSl9KSxuZS5wbGF5KCl9KSxjZX1lbGVtZW50Q29udGFpbnNEYXRhKHQsZSl7bGV0IGk9ITEscj1lW09zXTtyZXR1cm4gciYmci5zZXRGb3JSZW1vdmFsJiYoaT0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8aX1hZnRlckZsdXNoKHQpe3RoaXMuX2ZsdXNoRm5zLnB1c2godCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKHQpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKHQpfV9nZXRQcmV2aW91c1BsYXllcnModCxlLGkscixvKXtsZXQgYT1bXTtpZihlKXtsZXQgcz10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTtzJiYoYT1zKX1lbHNle2xldCBzPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYocyl7bGV0IGw9IW98fG89PXF5O3MuZm9yRWFjaChjPT57Yy5xdWV1ZWR8fCFsJiZjLnRyaWdnZXJOYW1lIT1yfHxhLnB1c2goYyl9KX19cmV0dXJuKGl8fHIpJiYoYT1hLmZpbHRlcihzPT4hKGkmJmkhPXMubmFtZXNwYWNlSWR8fHImJnIhPXMudHJpZ2dlck5hbWUpKSksYX1fYmVmb3JlQW5pbWF0aW9uQnVpbGQodCxlLGkpe2xldCBvPWUuZWxlbWVudCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxzPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZTtmb3IobGV0IGwgb2YgZS50aW1lbGluZXMpe2xldCBjPWwuZWxlbWVudCxkPWMhPT1vLHU9b3MoaSxjLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYyxkLGEscyxlLnRvU3RhdGUpLmZvckVhY2goZj0+e2xldCBtPWYuZ2V0UmVhbFBsYXllcigpO20uYmVmb3JlRGVzdHJveSYmbS5iZWZvcmVEZXN0cm95KCksZi5kZXN0cm95KCksdS5wdXNoKGYpfSl9c2YobyxlLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbih0LGUsaSxyLG8sYSl7bGV0IHM9ZS50cmlnZ2VyTmFtZSxsPWUuZWxlbWVudCxjPVtdLGQ9bmV3IFNldCx1PW5ldyBTZXQscD1lLnRpbWVsaW5lcy5tYXAobT0+e2xldCB5PW0uZWxlbWVudDtkLmFkZCh5KTtsZXQgTT15W09zXTtpZihNJiZNLnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgZ3UobS5kdXJhdGlvbixtLmRlbGF5KTtsZXQgdj15IT09bCx4PWZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiB1OChuLHQpLHR9KChpLmdldCh5KXx8dW1lKS5tYXAoSz0+Sy5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoSz0+ISFLLmVsZW1lbnQmJksuZWxlbWVudD09PXkpLFI9by5nZXQoeSksQT1hLmdldCh5KSxIPVhHKDAsdGhpcy5fbm9ybWFsaXplciwwLG0ua2V5ZnJhbWVzLFIsQSksdGU9dGhpcy5fYnVpbGRQbGF5ZXIobSxILHgpO2lmKG0uc3ViVGltZWxpbmUmJnImJnUuYWRkKHkpLHYpe2xldCBLPW5ldyBLeSh0LHMseSk7Sy5zZXRSZWFsUGxheWVyKHRlKSxjLnB1c2goSyl9cmV0dXJuIHRlfSk7Yy5mb3JFYWNoKG09Pntvcyh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LG0uZWxlbWVudCxbXSkucHVzaChtKSxtLm9uRG9uZSgoKT0+ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZ2V0KHQpO2lmKGkpe2lmKGkubGVuZ3RoKXtsZXQgcj1pLmluZGV4T2YoZSk7aS5zcGxpY2UociwxKX0wPT1pLmxlbmd0aCYmbi5kZWxldGUodCl9cmV0dXJuIGl9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsbS5lbGVtZW50LG0pKX0pLGQuZm9yRWFjaChtPT5GcyhtLExHKSk7bGV0IGY9X3UocCk7cmV0dXJuIGYub25EZXN0cm95KCgpPT57ZC5mb3JFYWNoKG09PkFoKG0sTEcpKSx5YyhsLGUudG9TdHlsZXMpfSksdS5mb3JFYWNoKG09PntvcyhyLG0sW10pLnB1c2goZil9KSxmfV9idWlsZFBsYXllcih0LGUsaSl7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsaSk6bmV3IGd1KHQuZHVyYXRpb24sdC5kZWxheSl9fSh0LGUsaSksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMuX2FuaW1hdGlvbnM9bmV3IE1hcCx0aGlzLl9wbGF5ZXJzQnlJZD1uZXcgTWFwLHRoaXMucGxheWVycz1bXX1yZWdpc3Rlcih0LGUpe2xldCBpPVtdLHI9W10sbz1sOCh0aGlzLl9kcml2ZXIsZSxpLHIpO2lmKGkubGVuZ3RoKXRocm93IG5ldyBidCgzNTAzLCExKTt0aGlzLl9hbmltYXRpb25zLnNldCh0LG8pfV9idWlsZFBsYXllcih0LGUsaSl7bGV0IHI9dC5lbGVtZW50LG89WEcoMCx0aGlzLl9ub3JtYWxpemVyLDAsdC5rZXlmcmFtZXMsZSxpKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUocixvLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxbXSwhMCl9Y3JlYXRlKHQsZSxpPXt9KXtsZXQgYSxyPVtdLG89dGhpcy5fYW5pbWF0aW9ucy5nZXQodCkscz1uZXcgTWFwO2lmKG8/KGE9YzgodGhpcy5fZHJpdmVyLGUsbyxlOCxDTyxuZXcgTWFwLG5ldyBNYXAsaSxhbWUsciksYS5mb3JFYWNoKGQ9PntsZXQgdT1vcyhzLGQuZWxlbWVudCxuZXcgTWFwKTtkLnBvc3RTdHlsZVByb3BzLmZvckVhY2gocD0+dS5zZXQocCxudWxsKSl9KSk6KHIucHVzaChuZXcgYnQoMzMwMCwhMSkpLGE9W10pLHIubGVuZ3RoKXRocm93IG5ldyBidCgzNTA0LCExKTtzLmZvckVhY2goKGQsdSk9PntkLmZvckVhY2goKHAsZik9PntkLnNldChmLHRoaXMuX2RyaXZlci5jb21wdXRlU3R5bGUodSxmLF9jKSl9KX0pO2xldCBjPV91KGEubWFwKGQ9PntsZXQgdT1zLmdldChkLmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcihkLG5ldyBNYXAsdSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldCh0LGMpLGMub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kodCkpLHRoaXMucGxheWVycy5wdXNoKGMpLGN9ZGVzdHJveSh0KXtsZXQgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksdGhpcy5fcGxheWVyc0J5SWQuZGVsZXRlKHQpO2xldCBpPXRoaXMucGxheWVycy5pbmRleE9mKGUpO2k+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoaSwxKX1fZ2V0UGxheWVyKHQpe2xldCBlPXRoaXMuX3BsYXllcnNCeUlkLmdldCh0KTtpZighZSl0aHJvdyBuZXcgYnQoMzMwMSwhMSk7cmV0dXJuIGV9bGlzdGVuKHQsZSxpLHIpe2xldCBvPU5PKGUsIiIsIiIsIiIpO3JldHVybiBMTyh0aGlzLl9nZXRQbGF5ZXIodCksaSxvLHIpLCgpPT57fX1jb21tYW5kKHQsZSxpLHIpe2lmKCJyZWdpc3RlciI9PWkpcmV0dXJuIHZvaWQgdGhpcy5yZWdpc3Rlcih0LHJbMF0pO2lmKCJjcmVhdGUiPT1pKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKHQsZSxyWzBdfHx7fSk7bGV0IG89dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChpKXtjYXNlInBsYXkiOm8ucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOm8ucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpvLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpvLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6by5maW5pc2goKTticmVhaztjYXNlImluaXQiOm8uaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOm8uc2V0UG9zaXRpb24ocGFyc2VGbG9hdChyWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fX0odCxlLGkpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KHIsbyk9PnRoaXMub25SZW1vdmFsQ29tcGxldGUocixvKX1yZWdpc3RlclRyaWdnZXIodCxlLGkscixvKXtsZXQgYT10KyItIityLHM9dGhpcy5fdHJpZ2dlckNhY2hlW2FdO2lmKCFzKXtsZXQgbD1bXSxjPVtdLGQ9bDgodGhpcy5fZHJpdmVyLG8sbCxjKTtpZihsLmxlbmd0aCl0aHJvdyBuZXcgYnQoMzQwNCwhMSk7cz1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5uYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPW5ldyBNYXAsZS5zdGF0ZXMuZm9yRWFjaChyPT57bGV0IG89ci5vcHRpb25zJiZyLm9wdGlvbnMucGFyYW1zfHx7fTt0aGlzLnN0YXRlcy5zZXQoci5uYW1lLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zdHlsZXM9dCx0aGlzLmRlZmF1bHRQYXJhbXM9ZSx0aGlzLm5vcm1hbGl6ZXI9aX1idWlsZFN0eWxlcyh0LGUpe2xldCBpPW5ldyBNYXAscj0keSh0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG89PntsZXQgYT10W29dO251bGwhPT1hJiYocltvXT1hKX0pLHRoaXMuc3R5bGVzLnN0eWxlcy5mb3JFYWNoKG89Pnsic3RyaW5nIiE9dHlwZW9mIG8mJm8uZm9yRWFjaCgoYSxzKT0+e2EmJihhPVl5KGEscixlKSk7bGV0IGw9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShzLGUpO2E9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVN0eWxlVmFsdWUocyxsLGEsZSksaS5zZXQocyxhKX0pfSksaX19KHIuc3R5bGUsbyxpKSl9KSxVRyh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxVRyh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksZS50cmFuc2l0aW9ucy5mb3JFYWNoKHI9Pnt0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgSHcodCxyLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBIdyhuLHt0eXBlOjEsYW5pbWF0aW9uOnt0eXBlOjIsc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKGEscyk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LHQpfSh0LHRoaXMuc3RhdGVzKX1nZXQgY29udGFpbnNRdWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24odCxlLGkscil7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKGE9PmEubWF0Y2godCxlLGkscikpfHxudWxsfW1hdGNoU3R5bGVzKHQsZSxpKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXModCxlLGkpfX0obix0LGUpfShyLGQsdGhpcy5fbm9ybWFsaXplciksdGhpcy5fdHJpZ2dlckNhY2hlW2FdPXN9dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZSxyLHMpfXJlZ2lzdGVyKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3Rlcih0LGUpfWRlc3Ryb3kodCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmRlc3Ryb3kodCxlKX1vbkluc2VydCh0LGUsaSxyKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUodCxlLGkscil9b25SZW1vdmUodCxlLGkscil7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZW1vdmVOb2RlKHQsZSxyfHwhMSxpKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl9cHJvY2Vzcyh0LGUsaSxyKXtpZigiQCI9PWkuY2hhckF0KDApKXtsZXRbbyxhXT1PRyhpKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5kKG8sZSxhLHIpfWVsc2UgdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS50cmlnZ2VyKHQsZSxpLHIpfWxpc3Rlbih0LGUsaSxyLG8pe2lmKCJAIj09aS5jaGFyQXQoMCkpe2xldFthLHNdPU9HKGkpO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4oYSxlLHMsbyl9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKHQsZSxpLHIsbyl9Zmx1c2godD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaCh0KX1nZXQgcGxheWVycygpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19LHZtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fc3RhcnRTdHlsZXM9aSx0aGlzLl9lbmRTdHlsZXM9cix0aGlzLl9zdGF0ZT0wO2xldCBvPW4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5nZXQoZSk7b3x8bi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LnNldChlLG89bmV3IE1hcCksdGhpcy5faW5pdGlhbFN0eWxlcz1vfXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZ5Yyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwyJiYoeWModGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJih5Yyh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRlPDMmJihuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVsZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYoc2YodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX2VuZFN0eWxlcyYmKHNmKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCkseWModGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0zKX19cmV0dXJuIG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudD1uZXcgV2Vha01hcCxufSkoKTtmdW5jdGlvbiB2TyhuKXtsZXQgdD1udWxsO3JldHVybiBuLmZvckVhY2goKGUsaSk9PnsoZnVuY3Rpb24obil7cmV0dXJuImRpc3BsYXkiPT09bnx8InBvc2l0aW9uIj09PW59KShpKSYmKHQ9dHx8bmV3IE1hcCx0LnNldChpLGUpKX0pLHR9dmFyIHp3PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5vcHRpb25zPWksdGhpcy5fc3BlY2lhbFN0eWxlcz1yLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1cnJlbnRTbmFwc2hvdD1uZXcgTWFwLHRoaXMuX2R1cmF0aW9uPWkuZHVyYXRpb24sdGhpcy5fZGVsYXk9aS5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVyKCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEwO2xldCB0PXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMuX3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LHQsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPXQubGVuZ3RoP3RbdC5sZW5ndGgtMV06bmV3IE1hcCx0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLCgpPT50aGlzLl9vbkZpbmlzaCgpKX1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdCh0KXtsZXQgZT1bXTtyZXR1cm4gdC5mb3JFYWNoKGk9PntlLnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKGkpKX0pLGV9X3RyaWdnZXJXZWJBbmltYXRpb24odCxlLGkpe3JldHVybiB0LmFuaW1hdGUodGhpcy5fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGUpLGkpfW9uU3RhcnQodCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2godCksdGhpcy5fb25TdGFydEZucy5wdXNoKHQpfW9uRG9uZSh0KXt0aGlzLl9vcmlnaW5hbE9uRG9uZUZucy5wdXNoKHQpLHRoaXMuX29uRG9uZUZucy5wdXNoKHQpfW9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX1wbGF5KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLnN0YXJ0KCkpLHRoaXMuZG9tUGxheWVyLnBsYXkoKX1wYXVzZSgpe3RoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLnBhdXNlKCl9ZmluaXNoKCl7dGhpcy5pbml0KCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5maW5pc2goKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfXJlc2V0KCl7dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31fcmVzZXREb21QbGF5ZXJTdGF0ZSgpe3RoaXMuZG9tUGxheWVyJiZ0aGlzLmRvbVBsYXllci5jYW5jZWwoKX1yZXN0YXJ0KCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1zZXRQb3NpdGlvbih0KXt2b2lkIDA9PT10aGlzLmRvbVBsYXllciYmdGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9dCp0aGlzLnRpbWV9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWUvdGhpcy50aW1lfWdldCB0b3RhbFRpbWUoKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259YmVmb3JlRGVzdHJveSgpe2xldCB0PW5ldyBNYXA7dGhpcy5oYXNTdGFydGVkKCkmJnRoaXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoaSxyKT0+eyJvZmZzZXQiIT09ciYmdC5zZXQocix0aGlzLl9maW5pc2hlZD9pOnI4KHRoaXMuZWxlbWVudCxyKSl9KSx0aGlzLmN1cnJlbnRTbmFwc2hvdD10fXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goaT0+aSgpKSxlLmxlbmd0aD0wfX0sTW1lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBVeXtjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5fbmV4dEFuaW1hdGlvbklkPTAsdGhpcy5fcmVuZGVyZXI9ZS5jcmVhdGVSZW5kZXJlcihpLmJvZHkse2lkOiIwIixlbmNhcHN1bGF0aW9uOmVzLk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KX1idWlsZChlKXtsZXQgaT10aGlzLl9uZXh0QW5pbWF0aW9uSWQudG9TdHJpbmcoKTt0aGlzLl9uZXh0QW5pbWF0aW9uSWQrKztsZXQgcj1BcnJheS5pc0FycmF5KGUpP0R3KGUpOmU7cmV0dXJuIGY4KHRoaXMuX3JlbmRlcmVyLG51bGwsaSwicmVnaXN0ZXIiLFtyXSksbmV3IFVPKGksdGhpcy5fcmVuZGVyZXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGNjKSxPKGt0KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksVU89Y2xhc3MgZXh0ZW5kcyBUd3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5faWQ9dCx0aGlzLl9yZW5kZXJlcj1lfWNyZWF0ZSh0LGUpe3JldHVybiBuZXcgak8odGhpcy5faWQsdCxlfHx7fSx0aGlzLl9yZW5kZXJlcil9fSxqTz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmlkPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9cix0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy50b3RhbFRpbWU9MCx0aGlzLl9jb21tYW5kKCJjcmVhdGUiLGkpfV9saXN0ZW4odCxlKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudCxgQEAke3RoaXMuaWR9OiR7dH1gLGUpfV9jb21tYW5kKHQsLi4uZSl7cmV0dXJuIGY4KHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLHQsZSl9b25Eb25lKHQpe3RoaXMuX2xpc3RlbigiZG9uZSIsdCl9b25TdGFydCh0KXt0aGlzLl9saXN0ZW4oInN0YXJ0Iix0KX1vbkRlc3Ryb3kodCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95Iix0KX1pbml0KCl7dGhpcy5fY29tbWFuZCgiaW5pdCIpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0YXJ0ZWQ9ITB9cGF1c2UoKXt0aGlzLl9jb21tYW5kKCJwYXVzZSIpfXJlc3RhcnQoKXt0aGlzLl9jb21tYW5kKCJyZXN0YXJ0Iil9ZmluaXNoKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9ZGVzdHJveSgpe3RoaXMuX2NvbW1hbmQoImRlc3Ryb3kiKX1yZXNldCgpe3RoaXMuX2NvbW1hbmQoInJlc2V0IiksdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbih0KXt0aGlzLl9jb21tYW5kKCJzZXRQb3NpdGlvbiIsdCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZW5naW5lLnBsYXllcnNbK3RoaXMuaWRdPy5nZXRQb3NpdGlvbigpPz8wfX07ZnVuY3Rpb24gZjgobix0LGUsaSxyKXtyZXR1cm4gbi5zZXRQcm9wZXJ0eSh0LGBAQCR7ZX06JHtpfWAscil9dmFyIG04PSJALmRpc2FibGVkIix3bWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPWksdGhpcy5fem9uZT1yLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCx0aGlzLnByb21pc2U9UHJvbWlzZS5yZXNvbHZlKDApLGkub25SZW1vdmFsQ29tcGxldGU9KG8sYSk9PntsZXQgcz1hPy5wYXJlbnROb2RlKG8pO3MmJmEucmVtb3ZlQ2hpbGQocyxvKX19Y3JlYXRlUmVuZGVyZXIoZSxpKXtsZXQgbz10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGUsaSk7aWYoIShlJiZpJiZpLmRhdGEmJmkuZGF0YS5hbmltYXRpb24pKXtsZXQgZD10aGlzLl9yZW5kZXJlckNhY2hlLmdldChvKTtyZXR1cm4gZHx8KGQ9bmV3IEd3KCIiLG8sdGhpcy5lbmdpbmUsKCk9PnRoaXMuX3JlbmRlcmVyQ2FjaGUuZGVsZXRlKG8pKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChvLGQpKSxkfWxldCBhPWkuaWQscz1pLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7dGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIocyxlKTtsZXQgbD1kPT57QXJyYXkuaXNBcnJheShkKT9kLmZvckVhY2gobCk6dGhpcy5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGEscyxlLGQubmFtZSxkKX07cmV0dXJuIGkuZGF0YS5hbmltYXRpb24uZm9yRWFjaChsKSxuZXcgR08odGhpcyxzLG8sdGhpcy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5fY2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3RoaXMucHJvbWlzZS50aGVuKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30pfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhlLGkscil7ZT49MCYmZTx0aGlzLl9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bigoKT0+aShyKSk6KDA9PXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5sZW5ndGgmJlByb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgpPT57dGhpcy5fem9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIuZm9yRWFjaChvPT57bGV0W2Esc109bzthKHMpfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIucHVzaChbaSxyXSkpfWVuZCgpe3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3NjaGVkdWxlQ291bnRUYXNrKCksdGhpcy5lbmdpbmUuZmx1c2godGhpcy5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhjYyksTyh5dSksTyhhdCkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEd3PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9aSx0aGlzLl9vbkRlc3Ryb3k9cix0aGlzLmRlc3Ryb3lOb2RlPXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGU/bz0+ZS5kZXN0cm95Tm9kZShvKTpudWxsfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95KCl7dGhpcy5lbmdpbmUuZGVzdHJveSh0aGlzLm5hbWVzcGFjZUlkLHRoaXMuZGVsZWdhdGUpLHRoaXMuZGVsZWdhdGUuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveT8uKCl9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQodCxlKX1jcmVhdGVDb21tZW50KHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodCl9Y3JlYXRlVGV4dCh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHQpfWFwcGVuZENoaWxkKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LCExKX1pbnNlcnRCZWZvcmUodCxlLGkscj0hMCl7dGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUodCxlLGkpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LHIpfXJlbW92ZUNoaWxkKHQsZSxpKXt0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGUsdGhpcy5kZWxlZ2F0ZSxpKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQsZSl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpfW5leHRTaWJsaW5nKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpfXNldEF0dHJpYnV0ZSh0LGUsaSxyKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGUsaSxyKX1yZW1vdmVBdHRyaWJ1dGUodCxlLGkpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsZSxpKX1hZGRDbGFzcyh0LGUpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKX1yZW1vdmVDbGFzcyh0LGUpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX1zZXRTdHlsZSh0LGUsaSxyKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxpLHIpfXJlbW92ZVN0eWxlKHQsZSxpKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxpKX1zZXRQcm9wZXJ0eSh0LGUsaSl7IkAiPT1lLmNoYXJBdCgwKSYmZT09bTg/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LCEhaSk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsaSl9c2V0VmFsdWUodCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9bGlzdGVuKHQsZSxpKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLGkpfWRpc2FibGVBbmltYXRpb25zKHQsZSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnModCxlKX19LEdPPWNsYXNzIGV4dGVuZHMgR3d7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihlLGkscixvKSx0aGlzLmZhY3Rvcnk9dCx0aGlzLm5hbWVzcGFjZUlkPWV9c2V0UHJvcGVydHkodCxlLGkpeyJAIj09ZS5jaGFyQXQoMCk/Ii4iPT1lLmNoYXJBdCgxKSYmZT09bTg/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LGk9dm9pZCAwPT09aXx8ISFpKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsdCxlLnNsaWNlKDEpLGkpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLGkpfWxpc3Rlbih0LGUsaSl7aWYoIkAiPT1lLmNoYXJBdCgwKSl7bGV0IHI9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIG59fSh0KSxvPWUuc2xpY2UoMSksYT0iIjtyZXR1cm4iQCIhPW8uY2hhckF0KDApJiYoW28sYV09ZnVuY3Rpb24obil7bGV0IHQ9bi5pbmRleE9mKCIuIik7cmV0dXJuW24uc3Vic3RyaW5nKDAsdCksbi5zbGljZSh0KzEpXX0obykpLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFjZUlkLHIsbyxhLHM9Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKHMuX2RhdGF8fC0xLGkscyl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLGkpfX0sVG1lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5dXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLmJvZHksaSxyKX1uZ09uRGVzdHJveSgpe3RoaXMuZmx1c2goKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhrdCksTyhKeSksTyhsZiksTyhnYykpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGg4PVt7cHJvdmlkZTpVeSx1c2VDbGFzczpNbWV9LHtwcm92aWRlOmxmLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ3fX0se3Byb3ZpZGU6eXUsdXNlQ2xhc3M6VG1lfSx7cHJvdmlkZTpjYyx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHdtZShuLHQsZSl9LGRlcHM6W0J5LHl1LGF0XX1dLHA4PVt7cHJvdmlkZTpKeSx1c2VGYWN0b3J5OigpPT5uZXcgY2xhc3N7dmFsaWRhdGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiEwfXZhbGlkYXRlQW5pbWF0YWJsZVN0eWxlUHJvcGVydHkodCl7cmV0dXJuITB9bWF0Y2hlc0VsZW1lbnQodCxlKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQodCxlKXtyZXR1cm4gS0codCxlKX1nZXRQYXJlbnRFbGVtZW50KHQpe3JldHVybiBCTyh0KX1xdWVyeSh0LGUsaSl7cmV0dXJuIEpHKHQsZSxpKX1jb21wdXRlU3R5bGUodCxlLGkpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX1hbmltYXRlKHQsZSxpLHIsbyxhPVtdKXtsZXQgbD17ZHVyYXRpb246aSxkZWxheTpyLGZpbGw6MD09cj8iYm90aCI6ImZvcndhcmRzIn07byYmKGwuZWFzaW5nPW8pO2xldCBjPW5ldyBNYXAsZD1hLmZpbHRlcihmPT5mIGluc3RhbmNlb2YgencpOyhmdW5jdGlvbihuLHQpe3JldHVybiAwPT09bnx8MD09PXR9KShpLHIpJiZkLmZvckVhY2goZj0+e2YuY3VycmVudFNuYXBzaG90LmZvckVhY2goKG0seSk9PmMuc2V0KHksbSkpfSk7bGV0IHU9KG49ZSxuLmxlbmd0aD9uWzBdaW5zdGFuY2VvZiBNYXA/bjpuLm1hcCh0PT50OCh0KSk6W10pLm1hcChmPT5SaChmKSk7dmFyIG47dT1mdW5jdGlvbihuLHQsZSl7aWYoZS5zaXplJiZ0Lmxlbmd0aCl7bGV0IGk9dFswXSxyPVtdO2lmKGUuZm9yRWFjaCgobyxhKT0+e2kuaGFzKGEpfHxyLnB1c2goYSksaS5zZXQoYSxvKX0pLHIubGVuZ3RoKWZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgYT10W29dO3IuZm9yRWFjaChzPT5hLnNldChzLHI4KG4scykpKX19cmV0dXJuIHR9KHQsdSxjKTtsZXQgcD1mdW5jdGlvbihuLHQpe2xldCBlPW51bGwsaT1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD8oZT12Tyh0WzBdKSx0Lmxlbmd0aD4xJiYoaT12Tyh0W3QubGVuZ3RoLTFdKSkpOnQgaW5zdGFuY2VvZiBNYXAmJihlPXZPKHQpKSxlfHxpP25ldyB2bWUobixlLGkpOm51bGx9KHQsdSk7cmV0dXJuIG5ldyB6dyh0LHUsbCxwKX19fSx7cHJvdmlkZTpkaSx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5oOF0sQW1lPVt7cHJvdmlkZTpKeSx1c2VDbGFzczpWT30se3Byb3ZpZGU6ZGksdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uaDhdLGc4PSgoKT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOmUuZGlzYWJsZUFuaW1hdGlvbnM/QW1lOnA4fX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpwOCxpbXBvcnRzOltFd119KSxufSkoKSxYTz17fTtmdW5jdGlvbiB5ZShuLHQpe2lmKFhPW25dPShYT1tuXXx8MCkrMSwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gV08obiwoLi4uaSk9Pih7Li4udCguLi5pKSx0eXBlOm59KSk7c3dpdGNoKHQ/dC5fYXM6ImVtcHR5Iil7Y2FzZSJlbXB0eSI6cmV0dXJuIFdPKG4sKCk9Pih7dHlwZTpufSkpO2Nhc2UicHJvcHMiOnJldHVybiBXTyhuLGk9Pih7Li4uaSx0eXBlOm59KSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY29uZmlnLiIpfX1mdW5jdGlvbiBXTyhuLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidHlwZSIse3ZhbHVlOm4sd3JpdGFibGU6ITF9KX12YXIgazg9IkBuZ3J4L3N0b3JlL2luaXQiLE9oPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBSaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKHt0eXBlOms4fSl9bmV4dChlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJcbiAgICAgICAgRGlzcGF0Y2ggZXhwZWN0ZWQgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGEgZnVuY3Rpb24uXG4gICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgY3JlYXRlQWN0aW9uIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvblxuICAgICAgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGFjdGlvbi4gRm9yIGV4YW1wbGUsIHNvbWVBY3Rpb24gc2hvdWxkIGJlIHNvbWVBY3Rpb24oKS4iKTtpZih0eXBlb2YgZT4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWN0aW9ucyBtdXN0IGJlIG9iamVjdHMiKTtpZih0eXBlb2YgZS50eXBlPiJ1Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJBY3Rpb25zIG11c3QgaGF2ZSBhIHR5cGUgcHJvcGVydHkiKTtzdXBlci5uZXh0KGUpfWNvbXBsZXRlKCl7fW5nT25EZXN0cm95KCl7c3VwZXIuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksUm1lPVtPaF0sUDg9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSb290IEd1YXJkIiksXzg9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBJbml0aWFsIFN0YXRlIiksSk89bmV3IGllKCJAbmdyeC9zdG9yZSBJbml0aWFsIFN0YXRlIiksTzg9bmV3IGllKCJAbmdyeC9zdG9yZSBSZWR1Y2VyIEZhY3RvcnkiKSx5OD1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlZHVjZXIgRmFjdG9yeSBQcm92aWRlciIpLEY4PW5ldyBpZSgiQG5ncngvc3RvcmUgSW5pdGlhbCBSZWR1Y2VycyIpLHFPPW5ldyBpZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBSZWR1Y2VycyIpLGI4PW5ldyBpZSgiQG5ncngvc3RvcmUgU3RvcmUgRmVhdHVyZXMiKSx2OD1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIFJlZHVjZXJzIiksWU89bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIikseDg9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIENvbmZpZ3MiKSxMOD1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIEZlYXR1cmVzIiksQzg9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIFRva2VuIiksTjg9bmV3IGllKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFJlZHVjZXJzIiksTTg9bmV3IGllKCJAbmdyeC9zdG9yZSBVc2VyIFByb3ZpZGVkIE1ldGEgUmVkdWNlcnMiKSxQaD1uZXcgaWUoIkBuZ3J4L3N0b3JlIE1ldGEgUmVkdWNlcnMiKSx3OD1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlc29sdmVkIE1ldGEgUmVkdWNlcnMiKSxTOD1uZXcgaWUoIkBuZ3J4L3N0b3JlIFVzZXIgUnVudGltZSBDaGVja3MgQ29uZmlnIiksRTg9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLGViPW5ldyBpZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUnVudGltZSBDaGVja3MiKSwkTz1uZXcgaWUoIkBuZ3J4L3N0b3JlIENoZWNrIGlmIEFjdGlvbiB0eXBlcyBhcmUgdW5pcXVlIik7ZnVuY3Rpb24gY2Yobix0PXt9KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPXt9O2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgYT1lW29dOyJmdW5jdGlvbiI9PXR5cGVvZiBuW2FdJiYoaVthXT1uW2FdKX1sZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gZnVuY3Rpb24oYSxzKXthPXZvaWQgMD09PWE/dDphO2xldCBsPSExLGM9e307Zm9yKGxldCBkPTA7ZDxyLmxlbmd0aDtkKyspe2xldCB1PXJbZF0sZj1hW3VdLG09KDAsaVt1XSkoZixzKTtjW3VdPW0sbD1sfHxtIT09Zn1yZXR1cm4gbD9jOmF9fWZ1bmN0aW9uIEI4KC4uLm4pe3JldHVybiBmdW5jdGlvbih0KXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIHQ7bGV0IGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gbi5zbGljZSgwLC0xKS5yZWR1Y2VSaWdodCgocixvKT0+byhyKSxlKHQpKX19ZnVuY3Rpb24gVjgobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MCYmKG49QjguYXBwbHkobnVsbCxbLi4udCxuXSkpLChlLGkpPT57bGV0IHI9bihlKTtyZXR1cm4obyxhKT0+cihvPXZvaWQgMD09PW8/aTpvLGEpfX1uZXcgaWUoIkBuZ3J4L3N0b3JlIFJvb3QgU3RvcmUgUHJvdmlkZXIiKSxuZXcgaWUoIkBuZ3J4L3N0b3JlIEZlYXR1cmUgU3RhdGUgUHJvdmlkZXIiKTt2YXIgdGI9Y2xhc3MgZXh0ZW5kcyBlbnt9LFd3PWNsYXNzIGV4dGVuZHMgT2h7fSxxdz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUml7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyhyLGkpKSx0aGlzLmRpc3BhdGNoZXI9ZSx0aGlzLmluaXRpYWxTdGF0ZT1pLHRoaXMucmVkdWNlcnM9cix0aGlzLnJlZHVjZXJGYWN0b3J5PW99Z2V0IGN1cnJlbnRSZWR1Y2Vycygpe3JldHVybiB0aGlzLnJlZHVjZXJzfWFkZEZlYXR1cmUoZSl7dGhpcy5hZGRGZWF0dXJlcyhbZV0pfWFkZEZlYXR1cmVzKGUpe2xldCBpPWUucmVkdWNlKChyLHtyZWR1Y2VyczpvLHJlZHVjZXJGYWN0b3J5OmEsbWV0YVJlZHVjZXJzOnMsaW5pdGlhbFN0YXRlOmwsa2V5OmN9KT0+e2xldCBkPSJmdW5jdGlvbiI9PXR5cGVvZiBvP2Z1bmN0aW9uKG4pe2xldCB0PUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjA/QjgoLi4ubik6ZT0+ZTtyZXR1cm4oZSxpKT0+KGU9dChlKSwocixvKT0+ZShyPXZvaWQgMD09PXI/aTpyLG8pKX0ocykobyxsKTpWOChhLHMpKG8sbCk7cmV0dXJuIHJbY109ZCxyfSx7fSk7dGhpcy5hZGRSZWR1Y2VycyhpKX1yZW1vdmVGZWF0dXJlKGUpe3RoaXMucmVtb3ZlRmVhdHVyZXMoW2VdKX1yZW1vdmVGZWF0dXJlcyhlKXt0aGlzLnJlbW92ZVJlZHVjZXJzKGUubWFwKGk9Pmkua2V5KSl9YWRkUmVkdWNlcihlLGkpe3RoaXMuYWRkUmVkdWNlcnMoe1tlXTppfSl9YWRkUmVkdWNlcnMoZSl7dGhpcy5yZWR1Y2Vycz17Li4udGhpcy5yZWR1Y2VycywuLi5lfSx0aGlzLnVwZGF0ZVJlZHVjZXJzKE9iamVjdC5rZXlzKGUpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVtb3ZlUmVkdWNlcnMoW2VdKX1yZW1vdmVSZWR1Y2VycyhlKXtlLmZvckVhY2goaT0+e3RoaXMucmVkdWNlcnM9ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKGU9PmUhPT10KS5yZWR1Y2UoKGUsaSk9Pk9iamVjdC5hc3NpZ24oZSx7W2ldOm5baV19KSx7fSl9KHRoaXMucmVkdWNlcnMsaSl9KSx0aGlzLnVwZGF0ZVJlZHVjZXJzKGUpfXVwZGF0ZVJlZHVjZXJzKGUpe3RoaXMubmV4dCh0aGlzLnJlZHVjZXJGYWN0b3J5KHRoaXMucmVkdWNlcnMsdGhpcy5pbml0aWFsU3RhdGUpKSx0aGlzLmRpc3BhdGNoZXIubmV4dCh7dHlwZToiQG5ncngvc3RvcmUvdXBkYXRlLXJlZHVjZXJzIixmZWF0dXJlczplfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oV3cpLE8oSk8pLE8oRjgpLE8oTzgpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxObWU9W3F3LHtwcm92aWRlOnRiLHVzZUV4aXN0aW5nOnF3fSx7cHJvdmlkZTpXdyx1c2VFeGlzdGluZzpPaH1dLG5iPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBBZXtuZ09uRGVzdHJveSgpe3RoaXMuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEJtZT1bbmJdLFl3PWNsYXNzIGV4dGVuZHMgZW57fSxUOD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUml7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyk7bGV0IGM9ZS5waXBlKExwKEpBKSkucGlwZShZdChpKSkucGlwZShmdW5jdGlvbihuLHQpe3JldHVybiBLdChmdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybihvLGEpPT57bGV0IHM9ZSxsPXQsYz0wO28uc3Vic2NyaWJlKEh0KGEsZD0+e2xldCB1PWMrKztsPXM/bihsLGQsdSk6KHM9ITAsZCksYS5uZXh0KGwpfSx2b2lkIDApKX19KG4sdCxhcmd1bWVudHMubGVuZ3RoPj0yKSl9KFZtZSx7c3RhdGU6b30pKTt0aGlzLnN0YXRlU3Vic2NyaXB0aW9uPWMuc3Vic2NyaWJlKCh7c3RhdGU6ZCxhY3Rpb246dX0pPT57dGhpcy5uZXh0KGQpLHIubmV4dCh1KX0pfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuY29tcGxldGUoKX19cmV0dXJuIG4uSU5JVD1rOCxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oT2gpLE8odGIpLE8obmIpLE8oSk8pKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBWbWUobj17c3RhdGU6dm9pZCAwfSxbdCxlXSl7bGV0e3N0YXRlOml9PW47cmV0dXJue3N0YXRlOmUoaSx0KSxhY3Rpb246dH19dmFyIEhtZT1bVDgse3Byb3ZpZGU6WXcsdXNlRXhpc3Rpbmc6VDh9XSxrZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZW57Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5hY3Rpb25zT2JzZXJ2ZXI9aSx0aGlzLnJlZHVjZXJNYW5hZ2VyPXIsdGhpcy5zb3VyY2U9ZX1zZWxlY3QoZSwuLi5pKXtyZXR1cm4gcG4uY2FsbChudWxsLGUsLi4uaSkodGhpcyl9bGlmdChlKXtsZXQgaT1uZXcgbih0aGlzLHRoaXMuYWN0aW9uc09ic2VydmVyLHRoaXMucmVkdWNlck1hbmFnZXIpO3JldHVybiBpLm9wZXJhdG9yPWUsaX1kaXNwYXRjaChlKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5uZXh0KGUpfW5leHQoZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dChlKX1lcnJvcihlKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5lcnJvcihlKX1jb21wbGV0ZSgpe3RoaXMuYWN0aW9uc09ic2VydmVyLmNvbXBsZXRlKCl9YWRkUmVkdWNlcihlLGkpe3RoaXMucmVkdWNlck1hbmFnZXIuYWRkUmVkdWNlcihlLGkpfXJlbW92ZVJlZHVjZXIoZSl7dGhpcy5yZWR1Y2VyTWFuYWdlci5yZW1vdmVSZWR1Y2VyKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFl3KSxPKE9oKSxPKHF3KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksem1lPVtrZV07ZnVuY3Rpb24gcG4obix0LC4uLmUpe3JldHVybiBmdW5jdGlvbihyKXtsZXQgbztpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBhPVt0LC4uLmVdLmZpbHRlcihCb29sZWFuKTtvPXIucGlwZShmdW5jdGlvbiguLi5uKXtsZXQgdD1uLmxlbmd0aDtpZigwPT09dCl0aHJvdyBuZXcgRXJyb3IoImxpc3Qgb2YgcHJvcGVydGllcyBjYW5ub3QgYmUgZW1wdHkuIik7cmV0dXJuIFUoZT0+e2xldCBpPWU7Zm9yKGxldCByPTA7cjx0O3IrKyl7bGV0IG89aT8uW25bcl1dO2lmKCEodHlwZW9mIG88InUiKSlyZXR1cm47aT1vfXJldHVybiBpfSl9KG4sLi4uYSkpfWVsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5leHBlY3RlZCB0eXBlICcke3R5cGVvZiBufScgaW4gc2VsZWN0IG9wZXJhdG9yLCBleHBlY3RlZCAnc3RyaW5nJyBvciAnZnVuY3Rpb24nYCk7bz1yLnBpcGUoVShhPT5uKGEsdCkpKX1yZXR1cm4gby5waXBlKHVpKCkpfX12YXIgZUY9Imh0dHBzOi8vbmdyeC5pby9ndWlkZS9zdG9yZS9jb25maWd1cmF0aW9uL3J1bnRpbWUtY2hlY2tzIjtmdW5jdGlvbiBEOChuKXtyZXR1cm4gdm9pZCAwPT09bn1mdW5jdGlvbiBJOChuKXtyZXR1cm4gbnVsbD09PW59ZnVuY3Rpb24gSDgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobil9ZnVuY3Rpb24gejgobil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09bn1mdW5jdGlvbiBRTyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1mdW5jdGlvbiBBOChuLHQpe3JldHVybiBuPT09dH1mdW5jdGlvbiBVOChuLHQ9QTgsZT1BOCl7bGV0IG8saT1udWxsLHI9bnVsbDtyZXR1cm57bWVtb2l6ZWQ6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1vKXJldHVybiBvLnJlc3VsdDtpZighaSlyZXR1cm4gcj1uLmFwcGx5KG51bGwsYXJndW1lbnRzKSxpPWFyZ3VtZW50cyxyO2lmKCFmdW5jdGlvbihuLHQsZSl7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspaWYoIWUobltpXSx0W2ldKSlyZXR1cm4hMDtyZXR1cm4hMX0oYXJndW1lbnRzLGksdCkpcmV0dXJuIHI7bGV0IGQ9bi5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGk9YXJndW1lbnRzLGUocixkKT9yOihyPWQsZCl9LHJlc2V0OmZ1bmN0aW9uKCl7aT1udWxsLHI9bnVsbH0sc2V0UmVzdWx0OmZ1bmN0aW9uKGQpe289e3Jlc3VsdDpkfX0sY2xlYXJSZXN1bHQ6ZnVuY3Rpb24oKXtvPXZvaWQgMH19fWZ1bmN0aW9uIHEoLi4ubil7cmV0dXJuIGZ1bmN0aW9uKG4sdD17c3RhdGVGbjpKbWV9KXtyZXR1cm4gZnVuY3Rpb24oLi4uZSl7bGV0IGk9ZTtpZihBcnJheS5pc0FycmF5KGlbMF0pKXtsZXRbZCwuLi51XT1pO2k9Wy4uLmQsLi4udV19ZWxzZSAxPT09aS5sZW5ndGgmJmZ1bmN0aW9uKG4pe3JldHVybiEhbiYmIm9iamVjdCI9PXR5cGVvZiBuJiZPYmplY3QudmFsdWVzKG4pLmV2ZXJ5KHQ9PiJmdW5jdGlvbiI9PXR5cGVvZiB0KX0oaVswXSkmJihpPWZ1bmN0aW9uKG4pe2xldCB0PU9iamVjdC52YWx1ZXMobiksZT1PYmplY3Qua2V5cyhuKTtyZXR1cm5bLi4udCwoLi4ucik9PmUucmVkdWNlKChvLGEscyk9Pih7Li4ubyxbYV06cltzXX0pLHt9KV19KGlbMF0pKTtsZXQgcj1pLnNsaWNlKDAsaS5sZW5ndGgtMSksbz1pW2kubGVuZ3RoLTFdLGE9ci5maWx0ZXIoZD0+ZC5yZWxlYXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgZC5yZWxlYXNlKSxzPW4oZnVuY3Rpb24oLi4uZCl7cmV0dXJuIG8uYXBwbHkobnVsbCxkKX0pLGw9VTgoZnVuY3Rpb24oZCx1KXtyZXR1cm4gdC5zdGF0ZUZuLmFwcGx5KG51bGwsW2Qscix1LHNdKX0pO3JldHVybiBPYmplY3QuYXNzaWduKGwubWVtb2l6ZWQse3JlbGVhc2U6ZnVuY3Rpb24oKXtsLnJlc2V0KCkscy5yZXNldCgpLGEuZm9yRWFjaChkPT5kLnJlbGVhc2UoKSl9LHByb2plY3RvcjpzLm1lbW9pemVkLHNldFJlc3VsdDpsLnNldFJlc3VsdCxjbGVhclJlc3VsdDpsLmNsZWFyUmVzdWx0fSl9fShVOCkoLi4ubil9ZnVuY3Rpb24gSm1lKG4sdCxlLGkpe2lmKHZvaWQgMD09PWUpe2xldCBvPXQubWFwKGE9PmEobikpO3JldHVybiBpLm1lbW9pemVkLmFwcGx5KG51bGwsbyl9bGV0IHI9dC5tYXAobz0+byhuLGUpKTtyZXR1cm4gaS5tZW1vaXplZC5hcHBseShudWxsLFsuLi5yLGVdKX1mdW5jdGlvbiBNcihuKXtyZXR1cm4gcSh0PT50W25dLHQ9PnQpfWZ1bmN0aW9uIG5oZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGllP3BpKG4pOm59ZnVuY3Rpb24gaWhlKG4sdCl7cmV0dXJuIHQubWFwKChlLGkpPT57aWYobltpXWluc3RhbmNlb2YgaWUpe2xldCByPXBpKG5baV0pO3JldHVybntrZXk6ZS5rZXkscmVkdWNlckZhY3Rvcnk6ci5yZWR1Y2VyRmFjdG9yeT9yLnJlZHVjZXJGYWN0b3J5OmNmLG1ldGFSZWR1Y2VyczpyLm1ldGFSZWR1Y2Vycz9yLm1ldGFSZWR1Y2VyczpbXSxpbml0aWFsU3RhdGU6ci5pbml0aWFsU3RhdGV9fXJldHVybiBlfSl9ZnVuY3Rpb24gcmhlKG4pe3JldHVybiBuLm1hcCh0PT50IGluc3RhbmNlb2YgaWU/cGkodCk6dCl9ZnVuY3Rpb24gajgobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm59ZnVuY3Rpb24gb2hlKG4sdCl7cmV0dXJuIG4uY29uY2F0KHQpfWZ1bmN0aW9uIGFoZSgpe2lmKHBpKGtlLHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0pKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSByb290IFN0b3JlIGhhcyBiZWVuIHByb3ZpZGVkIG1vcmUgdGhhbiBvbmNlLiBGZWF0dXJlIG1vZHVsZXMgc2hvdWxkIHByb3ZpZGUgZmVhdHVyZSBzdGF0ZXMgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rpb24gWk8obil7T2JqZWN0LmZyZWV6ZShuKTtsZXQgdD1RTyhuKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikuZm9yRWFjaChlPT57aWYoIWUuc3RhcnRzV2l0aCgiXHUwMjc1IikmJmZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHQpfShuLGUpJiYoIXR8fCJjYWxsZXIiIT09ZSYmImNhbGxlZSIhPT1lJiYiYXJndW1lbnRzIiE9PWUpKXtsZXQgaT1uW2VdOyh6OChpKXx8UU8oaSkpJiYhT2JqZWN0LmlzRnJvemVuKGkpJiZaTyhpKX19KSxufWZ1bmN0aW9uIEtPKG4sdD1bXSl7cmV0dXJuKEQ4KG4pfHxJOChuKSkmJjA9PT10Lmxlbmd0aD97cGF0aDpbInJvb3QiXSx2YWx1ZTpufTpPYmplY3Qua2V5cyhuKS5yZWR1Y2UoKGkscik9PntpZihpKXJldHVybiBpO2xldCBvPW5bcl07cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBRTyhuKSYmbi5oYXNPd25Qcm9wZXJ0eSgiXHUwMjc1Y21wIil9KG8pP2k6IShEOChvKXx8STgobyl8fGZ1bmN0aW9uKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbn0obyl8fGZ1bmN0aW9uKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG59KG8pfHxmdW5jdGlvbihuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG59KG8pfHxIOChvKSkmJihmdW5jdGlvbihuKXtpZighZnVuY3Rpb24obil7cmV0dXJuIHo4KG4pJiYhSDgobil9KG4pKXJldHVybiExO2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtyZXR1cm4gdD09PU9iamVjdC5wcm90b3R5cGV8fG51bGw9PT10fShvKT9LTyhvLFsuLi50LHJdKTp7cGF0aDpbLi4udCxyXSx2YWx1ZTpvfSl9LCExKX1mdW5jdGlvbiBSOChuLHQpe2lmKCExPT09bilyZXR1cm47bGV0IGU9bi5wYXRoLmpvaW4oIi4iKSxpPW5ldyBFcnJvcihgRGV0ZWN0ZWQgdW5zZXJpYWxpemFibGUgJHt0fSBhdCAiJHtlfSIuICR7ZUZ9I3N0cmljdCR7dH1zZXJpYWxpemFiaWxpdHlgKTt0aHJvdyBpLnZhbHVlPW4udmFsdWUsaS51bnNlcmlhbGl6YWJsZVBhdGg9ZSxpfWZ1bmN0aW9uIGRoZShuKXtyZXR1cm57c3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6ITEsc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3M6ITF9fWZ1bmN0aW9uIHVoZSh7c3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5Om4sc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6dH0pe3JldHVybiBlPT5ufHx0P2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7dC5hY3Rpb24oaSkmJlI4KEtPKGkpLCJhY3Rpb24iKTtsZXQgcj1uKGUsaSk7cmV0dXJuIHQuc3RhdGUoKSYmUjgoS08ociksInN0YXRlIikscn19KGUse2FjdGlvbjppPT5uJiYhdEYoaSksc3RhdGU6KCk9PnR9KTplfWZ1bmN0aW9uIHBoZSh7c3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5Om4sc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6dH0pe3JldHVybiBlPT5ufHx0P2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7bGV0IHI9dC5hY3Rpb24oaSk/Wk8oaSk6aSxvPW4oZSxyKTtyZXR1cm4gdC5zdGF0ZSgpP1pPKG8pOm99fShlLHthY3Rpb246aT0+biYmIXRGKGkpLHN0YXRlOigpPT50fSk6ZX1mdW5jdGlvbiB0RihuKXtyZXR1cm4gbi50eXBlLnN0YXJ0c1dpdGgoIkBuZ3J4Iil9ZnVuY3Rpb24gZmhlKHtzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6bn0pe3JldHVybiB0PT5uP2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7aWYodC5hY3Rpb24oaSkmJiFhdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiAnJHtpLnR5cGV9JyBydW5uaW5nIG91dHNpZGUgTmdab25lLiAke2VGfSNzdHJpY3RhY3Rpb253aXRoaW5uZ3pvbmVgKTtyZXR1cm4gbihlLGkpfX0odCx7YWN0aW9uOmU9Pm4mJiF0RihlKX0pOnR9ZnVuY3Rpb24gbWhlKG4pe3JldHVyblt7cHJvdmlkZTpFOCx1c2VWYWx1ZTpufSx7cHJvdmlkZTpTOCx1c2VGYWN0b3J5OmhoZSxkZXBzOltFOF19LHtwcm92aWRlOmViLGRlcHM6W1M4XSx1c2VGYWN0b3J5OmRoZX0se3Byb3ZpZGU6UGgsbXVsdGk6ITAsZGVwczpbZWJdLHVzZUZhY3Rvcnk6cGhlfSx7cHJvdmlkZTpQaCxtdWx0aTohMCxkZXBzOltlYl0sdXNlRmFjdG9yeTp1aGV9LHtwcm92aWRlOlBoLG11bHRpOiEwLGRlcHM6W2ViXSx1c2VGYWN0b3J5OmZoZX1dfWZ1bmN0aW9uIEc4KCl7cmV0dXJuW3twcm92aWRlOiRPLG11bHRpOiEwLGRlcHM6W2ViXSx1c2VGYWN0b3J5OmdoZX1dfWZ1bmN0aW9uIGhoZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBnaGUobil7aWYoIW4uc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3MpcmV0dXJuO2xldCB0PU9iamVjdC5lbnRyaWVzKFhPKS5maWx0ZXIoKFssZV0pPT5lPjEpLm1hcCgoW2VdKT0+ZSk7aWYodC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gdHlwZXMgYXJlIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uY2UsICR7dC5tYXAoZT0+YCIke2V9ImApLmpvaW4oIiwgIil9LiAke2VGfSNzdHJpY3RhY3Rpb250eXBldW5pcXVlbmVzc2ApfWZ1bmN0aW9uIF9oZShuPXt9LHQ9e30pe3JldHVyblt7cHJvdmlkZTpQOCx1c2VGYWN0b3J5OmFoZX0se3Byb3ZpZGU6XzgsdXNlVmFsdWU6dC5pbml0aWFsU3RhdGV9LHtwcm92aWRlOkpPLHVzZUZhY3Rvcnk6ajgsZGVwczpbXzhdfSx7cHJvdmlkZTpxTyx1c2VWYWx1ZTpufSx7cHJvdmlkZTp2OCx1c2VFeGlzdGluZzpuIGluc3RhbmNlb2YgaWU/bjpxT30se3Byb3ZpZGU6RjgsZGVwczpbcU8sW25ldyBtaCh2OCldXSx1c2VGYWN0b3J5Om5oZX0se3Byb3ZpZGU6TTgsdXNlVmFsdWU6dC5tZXRhUmVkdWNlcnM/dC5tZXRhUmVkdWNlcnM6W119LHtwcm92aWRlOnc4LGRlcHM6W1BoLE04XSx1c2VGYWN0b3J5Om9oZX0se3Byb3ZpZGU6eTgsdXNlVmFsdWU6dC5yZWR1Y2VyRmFjdG9yeT90LnJlZHVjZXJGYWN0b3J5OmNmfSx7cHJvdmlkZTpPOCxkZXBzOlt5OCx3OF0sdXNlRmFjdG9yeTpWOH0sUm1lLE5tZSxCbWUsSG1lLHptZSxtaGUodC5ydW50aW1lQ2hlY2tzKSxHOCgpXX1mdW5jdGlvbiB5aGUobix0LGU9e30pe3JldHVyblt7cHJvdmlkZTp4OCxtdWx0aTohMCx1c2VWYWx1ZTpuIGluc3RhbmNlb2YgT2JqZWN0P3t9OmV9LHtwcm92aWRlOmI4LG11bHRpOiEwLHVzZVZhbHVlOntrZXk6biBpbnN0YW5jZW9mIE9iamVjdD9uLm5hbWU6bixyZWR1Y2VyRmFjdG9yeTplIGluc3RhbmNlb2YgaWV8fCFlLnJlZHVjZXJGYWN0b3J5P2NmOmUucmVkdWNlckZhY3RvcnksbWV0YVJlZHVjZXJzOmUgaW5zdGFuY2VvZiBpZXx8IWUubWV0YVJlZHVjZXJzP1tdOmUubWV0YVJlZHVjZXJzLGluaXRpYWxTdGF0ZTplIGluc3RhbmNlb2YgaWV8fCFlLmluaXRpYWxTdGF0ZT92b2lkIDA6ZS5pbml0aWFsU3RhdGV9fSx7cHJvdmlkZTpMOCxkZXBzOlt4OCxiOF0sdXNlRmFjdG9yeTppaGV9LHtwcm92aWRlOllPLG11bHRpOiEwLHVzZVZhbHVlOm4gaW5zdGFuY2VvZiBPYmplY3Q/bi5yZWR1Y2VyOnR9LHtwcm92aWRlOkM4LG11bHRpOiEwLHVzZUV4aXN0aW5nOnQgaW5zdGFuY2VvZiBpZT90OllPfSx7cHJvdmlkZTpOOCxtdWx0aTohMCxkZXBzOltZTyxbbmV3IG1oKEM4KV1dLHVzZUZhY3Rvcnk6cmhlfSxHOCgpXX12YXIgaWI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLGEscyl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKE9oKSxPKHRiKSxPKG5iKSxPKGtlKSxPKFA4LDgpLE8oJE8sOCkpfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHt9KSxufSkoKSxYdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8sYSl7dGhpcy5mZWF0dXJlcz1lLHRoaXMuZmVhdHVyZVJlZHVjZXJzPWksdGhpcy5yZWR1Y2VyTWFuYWdlcj1yO2xldCBzPWUubWFwKChsLGMpPT57bGV0IHU9aS5zaGlmdCgpW2NdO3JldHVybnsuLi5sLHJlZHVjZXJzOnUsaW5pdGlhbFN0YXRlOmo4KGwuaW5pdGlhbFN0YXRlKX19KTtyLmFkZEZlYXR1cmVzKHMpfW5nT25EZXN0cm95KCl7dGhpcy5yZWR1Y2VyTWFuYWdlci5yZW1vdmVGZWF0dXJlcyh0aGlzLmZlYXR1cmVzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhMOCksTyhOOCksTyhxdyksTyhpYiksTygkTyw4KSl9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe30pLG59KSgpLHdyPSgoKT0+e2NsYXNzIG57c3RhdGljIGZvclJvb3QoZSxpKXtyZXR1cm57bmdNb2R1bGU6aWIscHJvdmlkZXJzOlsuLi5faGUoZSxpKV19fXN0YXRpYyBmb3JGZWF0dXJlKGUsaSxyPXt9KXtyZXR1cm57bmdNb2R1bGU6WHcscHJvdmlkZXJzOlsuLi55aGUoZSxpLHIpXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHt9KSxufSkoKTtmdW5jdGlvbiBFZSguLi5uKXtyZXR1cm57cmVkdWNlcjpuLnBvcCgpLHR5cGVzOm4ubWFwKGk9PmkudHlwZSl9fWZ1bmN0aW9uIF9yKG4sLi4udCl7bGV0IGU9bmV3IE1hcDtmb3IobGV0IGkgb2YgdClmb3IobGV0IHIgb2YgaS50eXBlcyl7bGV0IG89ZS5nZXQocik7ZS5zZXQocixvPyhzLGwpPT5pLnJlZHVjZXIobyhzLGwpLGwpOmkucmVkdWNlcil9cmV0dXJuIGZ1bmN0aW9uKGk9bixyKXtsZXQgbz1lLmdldChyLnR5cGUpO3JldHVybiBvP28oaSxyKTppfX12YXIgYmhlPXtkaXNwYXRjaDohMCxmdW5jdGlvbmFsOiExLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6ITB9LFp3PSJfX0BuZ3J4L2VmZmVjdHNfY3JlYXRlX18iO2Z1bmN0aW9uIE9yKG4sdD17fSl7bGV0IGU9dC5mdW5jdGlvbmFsP246bigpLGk9ey4uLmJoZSwuLi50fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsWncse3ZhbHVlOml9KSxlfWZ1bmN0aW9uIFg4KG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobil9ZnVuY3Rpb24gUTgobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gVzgobil7cmV0dXJuIG4uZmlsdGVyKFE4KX1mdW5jdGlvbiBNaGUobix0LGUpe2xldCBpPVg4KG4pLmNvbnN0cnVjdG9yLm5hbWUscj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmZpbHRlcihpPT4hKCFuW2ldfHwhbltpXS5oYXNPd25Qcm9wZXJ0eShadykpJiZuW2ldW1p3XS5oYXNPd25Qcm9wZXJ0eSgiZGlzcGF0Y2giKSkubWFwKGk9Pih7cHJvcGVydHlOYW1lOmksLi4ubltpXVtad119KSl9KG4pfShuKS5tYXAoKHtwcm9wZXJ0eU5hbWU6byxkaXNwYXRjaDphLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6c30pPT57bGV0IGw9ImZ1bmN0aW9uIj09dHlwZW9mIG5bb10/bltvXSgpOm5bb10sYz1zP2UobCx0KTpsO3JldHVybiExPT09YT9jLnBpcGUoel8oKSk6Yy5waXBlKEt0KChuLHQpPT57bi5zdWJzY3JpYmUoSHQodCxlPT57dC5uZXh0KHZzLmNyZWF0ZU5leHQoZSkpfSwoKT0+e3QubmV4dCh2cy5jcmVhdGVDb21wbGV0ZSgpKSx0LmNvbXBsZXRlKCl9LGU9Pnt0Lm5leHQodnMuY3JlYXRlRXJyb3IoZSkpLHQuY29tcGxldGUoKX0pKX0pKS5waXBlKFUodT0+KHtlZmZlY3Q6bltvXSxub3RpZmljYXRpb246dSxwcm9wZXJ0eU5hbWU6byxzb3VyY2VOYW1lOmksc291cmNlSW5zdGFuY2U6bn0pKSl9KTtyZXR1cm4gY24oLi4ucil9dmFyIHdoZT0xMDtmdW5jdGlvbiBaOChuLHQsZT13aGUpe3JldHVybiBuLnBpcGUoZm8oaT0+KHQmJnQuaGFuZGxlRXJyb3IoaSksZTw9MT9uOlo4KG4sdCxlLTEpKSkpfXZhciBXbz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZW57Y29uc3RydWN0b3IoZSl7c3VwZXIoKSxlJiYodGhpcy5zb3VyY2U9ZSl9bGlmdChlKXtsZXQgaT1uZXcgbjtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLm9wZXJhdG9yPWUsaX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhuYikpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIHdpKC4uLm4pe3JldHVybiBWZSh0PT5uLnNvbWUoZT0+InN0cmluZyI9PXR5cGVvZiBlP2U9PT10LnR5cGU6ZS50eXBlPT09dC50eXBlKSl9dmFyIEs4PW5ldyBpZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEd1YXJkIiksUXc9bmV3IGllKCJAbmdyeC9lZmZlY3RzIFVzZXIgUHJvdmlkZWQgRWZmZWN0cyIpLG5GPW5ldyBpZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEVmZmVjdHMiKSxKOD1uZXcgaWUoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgUm9vdCBFZmZlY3RzIEluc3RhbmNlcyIpLHE4PW5ldyBpZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBGZWF0dXJlIEVmZmVjdHMiKSwkOD1uZXcgaWUoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgRmVhdHVyZSBFZmZlY3RzIEluc3RhbmNlIEdyb3VwcyIpLFNoZT1uZXcgaWUoIkBuZ3J4L2VmZmVjdHMgRWZmZWN0cyBFcnJvciBIYW5kbGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+Wjh9KSxlNj0iQG5ncngvZWZmZWN0cy9pbml0Ijt5ZShlNik7dmFyIEFoZT0ibmdyeE9uSWRlbnRpZnlFZmZlY3RzIixPaGU9Im5ncnhPbkluaXRFZmZlY3RzIjtmdW5jdGlvbiBGaGUobil7cmV0dXJuIGlGKG4sT2hlKX1mdW5jdGlvbiBpRihuLHQpe3JldHVybiBuJiZ0IGluIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuW3RdfXZhciB0Nj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQWV7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuZXJyb3JIYW5kbGVyPWUsdGhpcy5lZmZlY3RzRXJyb3JIYW5kbGVyPWl9YWRkRWZmZWN0cyhlKXt0aGlzLm5leHQoZSl9dG9BY3Rpb25zKCl7cmV0dXJuIHRoaXMucGlwZShVQyhlPT5mdW5jdGlvbihuKXtyZXR1cm4iT2JqZWN0IiE9PW4uY29uc3RydWN0b3IubmFtZSYmIkZ1bmN0aW9uIiE9PW4uY29uc3RydWN0b3IubmFtZX0oZSk/WDgoZSk6ZSksaG4oZT0+ZS5waXBlKFVDKExoZSkpKSxobihlPT57bGV0IGk9ZS5waXBlKEhDKG89PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGU9PntsZXQgaT1NaGUoZSxuLHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gaUYobiwibmdyeE9uUnVuRWZmZWN0cyIpfShlKT9lLm5ncnhPblJ1bkVmZmVjdHMoaSk6aX19KHRoaXMuZXJyb3JIYW5kbGVyLHRoaXMuZWZmZWN0c0Vycm9ySGFuZGxlcikobykpLFUobz0+KGZ1bmN0aW9uKG4sdCl7aWYoIk4iPT09bi5ub3RpZmljYXRpb24ua2luZCl7bGV0IGU9bi5ub3RpZmljYXRpb24udmFsdWU7IWZ1bmN0aW9uKG4pe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBuJiZuJiZuLnR5cGUmJiJzdHJpbmciPT10eXBlb2Ygbi50eXBlfShlKSYmdC5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYEVmZmVjdCAke2Z1bmN0aW9uKHtwcm9wZXJ0eU5hbWU6bixzb3VyY2VJbnN0YW5jZTp0LHNvdXJjZU5hbWU6ZX0pe2xldCBpPSJmdW5jdGlvbiI9PXR5cGVvZiB0W25dO3JldHVybmAiJHtlfS4ke1N0cmluZyhuKX0ke2k/IigpIjoiIn0iYH0obil9IGRpc3BhdGNoZWQgYW4gaW52YWxpZCBhY3Rpb246ICR7ZnVuY3Rpb24obil7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuKX1jYXRjaHtyZXR1cm4gbn19KGUpfWApKX19KG8sdGhpcy5lcnJvckhhbmRsZXIpLG8ubm90aWZpY2F0aW9uKSksVmUobz0+Ik4iPT09by5raW5kJiZudWxsIT1vLnZhbHVlKSxLdCgobix0KT0+e24uc3Vic2NyaWJlKEh0KHQsZT0+blIoZSx0KSkpfSkpO3JldHVybiBjbihpLGUucGlwZSh6dCgxKSxWZShGaGUpLFUobz0+by5uZ3J4T25Jbml0RWZmZWN0cygpKSkpfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGNhKSxPKFNoZSkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIExoZShuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGlGKG4sQWhlKX0obik/bi5uZ3J4T25JZGVudGlmeUVmZmVjdHMoKToiIn12YXIgbjY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZWZmZWN0U291cmNlcz1lLHRoaXMuc3RvcmU9aSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbH1nZXQgaXNTdGFydGVkKCl7cmV0dXJuISF0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb259c3RhcnQoKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb258fCh0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249dGhpcy5lZmZlY3RTb3VyY2VzLnRvQWN0aW9ucygpLnN1YnNjcmliZSh0aGlzLnN0b3JlKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24mJih0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8odDYpLE8oa2UpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxpNj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwpe3RoaXMuc291cmNlcz1lLGkuc3RhcnQoKTtmb3IobGV0IGMgb2YgbyllLmFkZEVmZmVjdHMoYyk7ci5kaXNwYXRjaCh7dHlwZTplNn0pfWFkZEVmZmVjdHMoZSl7dGhpcy5zb3VyY2VzLmFkZEVmZmVjdHMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8odDYpLE8objYpLE8oa2UpLE8oSjgpLE8oaWIsOCksTyhYdyw4KSxPKEs4LDgpKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7fSksbn0pKCksQmhlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7bGV0IGE9aS5mbGF0KCk7Zm9yKGxldCBzIG9mIGEpZS5hZGRFZmZlY3RzKHMpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGk2KSxPKCQ4KSxPKGliLDgpLE8oWHcsOCkpfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHt9KSxufSkoKSx3bz0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JGZWF0dXJlKC4uLmUpe2xldCBpPWUuZmxhdCgpLHI9VzgoaSk7cmV0dXJue25nTW9kdWxlOkJoZSxwcm92aWRlcnM6W3Ise3Byb3ZpZGU6cTgsbXVsdGk6ITAsdXNlVmFsdWU6aX0se3Byb3ZpZGU6UXcsbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOiQ4LG11bHRpOiEwLHVzZUZhY3Rvcnk6WTgsZGVwczpbcTgsUXddfV19fXN0YXRpYyBmb3JSb290KC4uLmUpe2xldCBpPWUuZmxhdCgpLHI9VzgoaSk7cmV0dXJue25nTW9kdWxlOmk2LHByb3ZpZGVyczpbcix7cHJvdmlkZTpuRix1c2VWYWx1ZTpbaV19LHtwcm92aWRlOks4LHVzZUZhY3Rvcnk6VmhlfSx7cHJvdmlkZTpRdyxtdWx0aTohMCx1c2VWYWx1ZTpbXX0se3Byb3ZpZGU6SjgsdXNlRmFjdG9yeTpZOCxkZXBzOltuRixRd119XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHt9KSxufSkoKTtmdW5jdGlvbiBZOChuLHQpe2xldCBlPVtdO2ZvcihsZXQgaSBvZiBuKWUucHVzaCguLi5pKTtmb3IobGV0IGkgb2YgdCllLnB1c2goLi4uaSk7cmV0dXJuIGUubWFwKGk9PlE4KGkpP3BpKGkpOmkpfWZ1bmN0aW9uIFZoZSgpe2xldCBuPXBpKG42LHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0pLHQ9cGkobkYse3NlbGY6ITB9KTtpZigoMSE9PXQubGVuZ3RofHwwIT09dFswXS5sZW5ndGgpJiZuKXRocm93IG5ldyBUeXBlRXJyb3IoIkVmZmVjdHNNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCB1c2UgRWZmZWN0c01vZHVsZS5mb3JGZWF0dXJlKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9dmFyIGtuPSgoKT0+e3JldHVybihuPWtufHwoa249e30pKVtuLlVOS05PV049MF09IlVOS05PV04iLG5bbi5FWFBFUklNRU5UUz0xXT0iRVhQRVJJTUVOVFMiLG5bbi5FWFBFUklNRU5UPTJdPSJFWFBFUklNRU5UIixuW24uQ09NUEFSRV9FWFBFUklNRU5UPTNdPSJDT01QQVJFX0VYUEVSSU1FTlQiLG5bbi5DQVJEPTRdPSJDQVJEIixuW24uTk9UX1NFVD01XT0iTk9UX1NFVCIsa247dmFyIG59KSgpLEt3PSJkZWZhdWx0RXhwZXJpbWVudElkIixGaD0oKCk9PntyZXR1cm4obj1GaHx8KEZoPXt9KSlbbi5FWFBFUklNRU5UUz0wXT0iRVhQRVJJTUVOVFMiLG5bbi5EQVNIQk9BUkQ9MV09IkRBU0hCT0FSRCIsRmg7dmFyIG59KSgpO2Z1bmN0aW9uIExoKG4pe3JldHVybiBuLnNwbGl0KCIsIikubWFwKHQ9PntsZXQgZT10LmluZGV4T2YoIjoiKTtpZihlPDApdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgY29sb24gZGVsaW1pdGluZyBuYW1lIGFuZCBJRDogJHt0fWApO2xldCBpPXQuc2xpY2UoMCxlKSxyPXQuc2xpY2UoZSsxKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBpZCB0byBiZSBub24tZmFsc3k6ICR7dH1gKTtyZXR1cm57bmFtZTppLGlkOnJ9fSl9ZnVuY3Rpb24gcjYobil7cmV0dXJuIG4ubWFwKCh7YWxpYXM6dCxpZDplfSk9PmAke3R9OiR7ZX1gKS5qb2luKCIsIil9ZnVuY3Rpb24gcmIobix0KXtzd2l0Y2gobil7Y2FzZSBrbi5FWFBFUklNRU5UOnJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZXhwZXJpbWVudElkIik/W3QuZXhwZXJpbWVudElkXTpbS3ddO2Nhc2Uga24uQ0FSRDp7bGV0IGU9dC5leHBlcmltZW50SWRzO3JldHVybiBlLmluZGV4T2YoIiwiKTwwP1tlXTpMaChlKS5tYXAoKHtpZDppfSk9PmkpfWNhc2Uga24uQ09NUEFSRV9FWFBFUklNRU5UOnJldHVybiBMaCh0LmV4cGVyaW1lbnRJZHMpLm1hcCgoe2lkOml9KT0+aSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gTG8obix0KXtpZighbnx8IXQpcmV0dXJuIG49PT10O2lmKG4ucm91dGVLaW5kIT09dC5yb3V0ZUtpbmQpcmV0dXJuITE7bGV0IGU9cmIobi5yb3V0ZUtpbmQsbi5wYXJhbXMpLGk9cmIodC5yb3V0ZUtpbmQsdC5wYXJhbXMpO2lmKG51bGw9PT1lfHxudWxsPT09aSlyZXR1cm4gZT09PWk7aWYoZS5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMTtsZXQgcj1pLnNvcnQoKTtyZXR1cm4gZS5zb3J0KCkuZXZlcnkoKG8sYSk9PnJbYV09PT1vKX1mdW5jdGlvbiByRihuKXtzd2l0Y2gobil7Y2FzZSBrbi5FWFBFUklNRU5UUzpyZXR1cm4gRmguRVhQRVJJTUVOVFM7Y2FzZSBrbi5FWFBFUklNRU5UOmNhc2Uga24uQ0FSRDpjYXNlIGtuLkNPTVBBUkVfRVhQRVJJTUVOVDpyZXR1cm4gRmguREFTSEJPQVJEO2Nhc2Uga24uVU5LTk9XTjpjYXNlIGtuLk5PVF9TRVQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEp3KG4sdCxlKXtsZXQgaT1yRihuKTtyZXR1cm4gbnVsbCE9PWkmJiFlLnNvbWUocj0+ci5kZWVwTGlua0dyb3VwPT09aSYmci5uYW1lc3BhY2VJZD09PXQpfXZhciBsNl9nZXRIcmVmPSgpPT53aW5kb3cubG9jYXRpb24uaHJlZixkZj0oKCk9PntjbGFzcyBue2dldEhyZWYoKXtyZXR1cm4gbDZfZ2V0SHJlZigpfWdldFNlYXJjaCgpe2xldCBlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksaT1bXTtyZXR1cm4gZS5mb3JFYWNoKChyLG8pPT57aS5wdXNoKHtrZXk6byx2YWx1ZTpyfSl9KSxpfWdldEhhc2goKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhhc2h9Z2V0UGF0aCgpe3JldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9Z2V0SGlzdG9yeVN0YXRlKCl7cmV0dXJuIHdpbmRvdy5oaXN0b3J5LnN0YXRlfXJlcGxhY2VTdGF0ZVVybChlKXt3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUod2luZG93Lmhpc3Rvcnkuc3RhdGUsIiIsZSl9cHVzaFN0YXRlVXJsKGUpe3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCIiLGUpfXJlcGxhY2VTdGF0ZURhdGEoZSl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKGUsIiIpfW9uUG9wU3RhdGUoKXtyZXR1cm4gYWkod2luZG93LCJwb3BzdGF0ZSIpLnBpcGUoVShlPT4oe3BhdGhuYW1lOnRoaXMuZ2V0UGF0aCgpLHN0YXRlOmUuc3RhdGV9KSkpfWdldFJlc29sdmVkUGF0aChlKXtyZXR1cm4gbmV3IFVSTChlLGw2X2dldEhyZWYoKSkucGF0aG5hbWV9Z2V0RnVsbFBhdGgoZSxpLHIpe2xldCBvPXRoaXMuZ2V0UmVzb2x2ZWRQYXRoKGUpLGE9IiI7cmV0dXJuIGkubGVuZ3RoJiYoYT0iPyIrZnVuY3Rpb24obil7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IobGV0e2tleTplLHZhbHVlOml9b2Ygbil0LmFwcGVuZChlLGkpO3JldHVybiB0fShpKS50b1N0cmluZygpKSxgJHtvfSR7YX0ke3I/dGhpcy5nZXRIYXNoKCk6IiJ9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdWY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmFwcFJvb3Q9dGhpcy5nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KGUpfWdldEFwcFJvb3RGcm9tTWV0YUVsZW1lbnQoZSl7bGV0IGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCBtZXRhW25hbWU9InRiLXJlbGF0aXZlLXJvb3QiXScpO2lmKCFpKXJldHVybiIvIjtsZXR7cGF0aG5hbWU6cn09bmV3IFVSTChpLmNvbnRlbnQsZS5nZXRIcmVmKCkpO3JldHVybiByLnJlcGxhY2UoL1wvKiQvLCIvIil9Z2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdChlKXtyZXR1cm4gdGhpcy5hcHBSb290LnNsaWNlKDAsLTEpK2V9Z2V0QXBwUm9vdGxlc3NQYXRobmFtZShlKXtyZXR1cm4gZS5zdGFydHNXaXRoKHRoaXMuYXBwUm9vdCk/Ii8iK2Uuc2xpY2UodGhpcy5hcHBSb290Lmxlbmd0aCk6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhkZikpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLE5oPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtwcm92aWRlcnM6W2RmXX0pLG59KSgpLEJoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtwcm92aWRlcnM6W3VmXSxpbXBvcnRzOltOaF19KSxufSkoKSxzRj1uZXcgaWUoIltBcHAgUm91dGluZ10gRGlydHkgVXBkYXRlcyIpLCR3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz1lfWdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpe3JldHVybiB0aGlzLmRpcnR5VXBkYXRlc1NlbGVjdG9yRmFjdG9yaWVzPz9bXX1zdGF0aWMgcmVnaXN0ZXJEaXJ0eVVwZGF0ZXMoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTpzRixtdWx0aTohMCx1c2VGYWN0b3J5OmV9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oc0YsOCkpfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHt9KSxufSkoKSxjNj15ZSgiW0FwcCBSb3V0aW5nXSBEaXNjYXJkaW5nIFVuc2F2ZWQgVXBkYXRlcyIpLFZoPXllKCJbQXBwIFJvdXRpbmddIFN0YXRlIFJlaHlkcmF0ZWQgRnJvbSBVcmwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxlUz15ZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWcgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbEY9eWUoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRpb24gUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSGg9eWUoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRpbmciLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxMcz15ZSgiW0FwcCBSb3V0aW5nXSBJbiBBcHAgTmF2aWdhdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZEY9bmV3IGllKCJbQXBwIFJvdXRpbmddIFByb2dyYW1tYXRpY2FsIE5hdmlnYXRpb24gUHJvdmlkZXIiKSx0Uz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucHJvdmlkZXJzPW5ldyBNYXA7Zm9yKGxldCBpIG9mIGV8fFtdKXtpZih0aGlzLnByb3ZpZGVycy5oYXMoaS5hY3Rpb25DcmVhdG9yLnR5cGUpKXRocm93IG5ldyBSYW5nZUVycm9yKGAiJHtpLmFjdGlvbkNyZWF0b3IudHlwZX0iIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgbmF2LiBNdWx0aXBsZSBuYXZpZ2F0aW9ucyBvbiBzYW1lIGtpY2sgaXMgbm90IGFsbG93ZWQuYCk7dGhpcy5wcm92aWRlcnMuc2V0KGkuYWN0aW9uQ3JlYXRvci50eXBlLGkubGFtYmRhKX19Z2V0TmF2aWdhdGlvbihlKXtsZXQgaT10aGlzLnByb3ZpZGVycy5nZXQoZS50eXBlKTtyZXR1cm4gaT9pKGUpOm51bGx9c3RhdGljIHJlZ2lzdGVyUHJvZ3JhbW1hdGljYWxOYXZpZ2F0aW9uKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6ZEYsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGRGLDgpKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7fSksbn0pKCk7ZnVuY3Rpb24gb2Iobil7cmV0dXJuIG51bGwhPW4ucm91dGVLaW5kfWZ1bmN0aW9uIGZGKG4pe3JldHVybiBwNihuKS5tYXAoZT0+e2xldCBpPWUuc3RhcnRzV2l0aCgiOiIpO3JldHVybiBpP3twYXRoUGFydDplLGlzUGFyYW06ITAscGFyYW1OYW1lOmUuc2xpY2UoMSl9OntwYXRoUGFydDplLGlzUGFyYW06aX19KX12YXIgemg9Y2xhc3N7c3RhdGljIGdldE1hdGNoZXIodCl7cmV0dXJuIG9iKHQpP25ldyBhYih0KTp2b2lkIDAhPT10LnJlZGlyZWN0aW9uUGF0aD9uZXcgdUYodCk6bmV3IHBGKHQpfWNvbnN0cnVjdG9yKHQpe3RoaXMudmFsaWRhdGVDb25maWcodCksdGhpcy5wYXRoRnJhZ21lbnRzPWZGKHQucGF0aCksdGhpcy5wYXRoTWF0Y2hlcnM9dGhpcy5nZXRQYXRoTWF0Y2hlcnModGhpcy5wYXRoRnJhZ21lbnRzKX12YWxpZGF0ZUNvbmZpZyh7cGF0aDp0fSl7aWYoIXQuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBzaG91bGQgc3RhcnQgd2l0aCAnLycuICR7dH1gKTtsZXQgZT0wO2Zvcig7KGU9dC5pbmRleE9mKCI6IixlKzEpKT49MDspe2lmKCIvIiE9PXRbZS0xXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBjb21lIGFmdGVyICcvJy4gJHt0fWApO2lmKHZvaWQgMD09PXRbZSsxXXx8Ii8iPT09dFtlKzFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IG5hbWUuICR7dH1gKX19Z2V0UGF0aE1hdGNoZXJzKHQpe3JldHVybiB0Lm1hcChlPT57bGV0e3BhdGhQYXJ0Oml9PWU7cmV0dXJuIGUuaXNQYXJhbT9yPT4oe2lzUGFyYW1QYXRoUGFydDohMCxwYXJ0TWF0Y2hlZDohMCxwYXJhbU5hbWU6ZS5wYXJhbU5hbWUscGFyYW1WYWx1ZTpyfSk6cj0+KHtpc1BhcmFtUGF0aFBhcnQ6ITEscGFydE1hdGNoZWQ6cj09PWl9KX0pfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBpPTA7Zm9yKGxldCByIG9mIHRoaXMucGF0aE1hdGNoZXJzKXtsZXQgYT1yKHRbaSsrXSk7aWYoIWEucGFydE1hdGNoZWQpcmV0dXJue3Jlc3VsdDohMX07YS5pc1BhcmFtUGF0aFBhcnQmJihlPXsuLi5lLFthLnBhcmFtTmFtZV06YS5wYXJhbVZhbHVlfSl9cmV0dXJue3Jlc3VsdDohMCxwYXJhbXM6ZSxwYXRoUGFydHM6dCxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1tYXRjaEJ5UGFyYW1zKHQpe3JldHVybntyZXN1bHQ6ITAscGFyYW1zOnQscGF0aFBhcnRzOnRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucGF0aEZyYWdtZW50cyx0KSxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1yZXByb2plY3RQYXRoQnlQYXJhbXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpZihyLmlzUGFyYW0pe2xldHtwYXJhbU5hbWU6b309cjtpZighZS5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmFpbGVkIHRvIHJlcHJvamVjdCBwYXJhbWV0ZXIuICIke299IiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHByZXNlbnQuYCk7aS5wdXNoKGVbb10pfWVsc2UgaS5wdXNoKHIucGF0aFBhcnQpO3JldHVybiBpfX0sYWI9Y2xhc3MgZXh0ZW5kcyB6aHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19LHVGPWNsYXNzIGV4dGVuZHMgemh7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5yZWRpcmVjdGlvbkZyYWdtZW50cz1mRih0LnJlZGlyZWN0aW9uUGF0aCl9bWF0Y2godCl7bGV0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2xldCBpPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczp2b2lkIDB9fX0scEY9Y2xhc3MgZXh0ZW5kcyB6aHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH1tYXRjaCh0KXtsZXQgZT1zdXBlci5tYXRjaCh0KTtpZighZS5yZXN1bHQpcmV0dXJuIGU7bGV0e3BhdGhQYXJ0czppLHF1ZXJ5UGFyYW1zOnJ9PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpyfX19LHNiPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0zKXtpZih0aGlzLm1heFJlZGlyZWN0aW9uPWUsZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJtYXhSZWRpcmVjdGlvbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlIG51bWJlciIpO3RoaXMudmFsaWRhdGVSb3V0ZUNvbmZpZ3ModCksdGhpcy5kZWZhdWx0Um91dGVDb25maWc9bnVsbCx0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycz1uZXcgTWFwLHRoaXMuY29uZmlnTWF0Y2hlcnM9W107Zm9yKGxldCBpIG9mIHQpe2xldCByPXpoLmdldE1hdGNoZXIoaSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHIpLHIgaW5zdGFuY2VvZiBhYiYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldChyLmRlZmluaXRpb24ucm91dGVLaW5kLHIpLHIuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1yKSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2xldCBlPXQuZmlsdGVyKG9iKSxpPWUuZmlsdGVyKG89Pm8uZGVmYXVsdFJvdXRlKTtpZihpLmxlbmd0aD4xKXtsZXQgbz1pLm1hcCgoe3BhdGg6YX0pPT5hKS5qb2luKCIsICIpO3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBkZWZhdWx0Um91dGVzLiAke299YCl9aWYoMT09PWkubGVuZ3RoKXtsZXR7cGF0aDpvfT1pWzBdO2lmKEJvb2xlYW4oZkYobykuZmluZCgoe2lzUGFyYW06c30pPT5zKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7b31gKX1sZXQgcj1uZXcgU2V0O2ZvcihsZXR7cm91dGVLaW5kOm99b2YgZSl7aWYoci5oYXMobykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE11bHRpcGxlIHJvdXRlIGNvbmZpZ3VyYXRpb24gZm9yIGtpbmQ6ICR7b30uIENvbmZpZ3VyYXRpb25zIHNob3VsZCBoYXZlIHVuaXF1ZSByb3V0ZUtpbmRzYCk7ci5hZGQobyl9fWdlbmVyYXRlQWN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0aW9uR2VuZXJhdG9yP3QuYWN0aW9uR2VuZXJhdG9yKGUpOm51bGx9bWF0Y2godCl7aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCdOYXZpZ2F0aW9uIGhhcyB0byBtYWRlIHdpdGggcGF0aG5hbWUgdGhhdCBzdGFydHMgd2l0aCAiLyInKTtsZXQgbyxlPXA2KHQucGF0aG5hbWUpLGk9MCxyPSExO2Zvcig7Oyl7bGV0IGE9ITE7Zm9yKGxldCBzIG9mIHRoaXMuY29uZmlnTWF0Y2hlcnMpe2xldCBsPXMubWF0Y2goZSk7aWYobC5yZXN1bHQpe2E9ITA7bGV0e3BhcmFtczpjLHBhdGhQYXJ0czpkLGlzUmVkaXJlY3Rpb246dX09bDtpZih1KXtlPWQscj0hMCxvPWwucmVkaXJlY3Rpb25RdWVyeVBhcmFtczticmVha31pZighKHMgaW5zdGFuY2VvZiBhYikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIGNvbmNyZXRlIHJvdXRlIGRlZmluaXRpb24gYG1hdGNoYCByZXR1cm4gcmVkaXJlY3Rpb24iKTtsZXR7ZGVmaW5pdGlvbjpwfT1zLGY9e3JvdXRlS2luZDpwLnJvdXRlS2luZCxwYXJhbXM6YyxwYXRobmFtZTp1NihkKSxkZWVwTGlua1Byb3ZpZGVyOnAuZGVlcExpbmtQcm92aWRlcnx8bnVsbCxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihwLGQpfTtyZXR1cm4gcj97Li4uZixvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6b306ey4uLmYsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExfX19aWYociYmaSsrLCFhfHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2xldHtkZWZpbml0aW9uOmF9PXRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnO3JldHVybntyb3V0ZUtpbmQ6YS5yb3V0ZUtpbmQsZGVlcExpbmtQcm92aWRlcjphLmRlZXBMaW5rUHJvdmlkZXI/P251bGwscGF0aG5hbWU6YS5wYXRoLHBhcmFtczp7fSxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dm9pZCAwLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKGEsZSl9fXJldHVybiBudWxsfW1hdGNoQnlSb3V0ZUtpbmQodCxlKXtsZXQgaT10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO2xldCByPWkubWF0Y2hCeVBhcmFtcyhlKTtyZXR1cm57cm91dGVLaW5kOnQscGFyYW1zOmUscGF0aG5hbWU6dTYoci5wYXRoUGFydHMpLGRlZXBMaW5rUHJvdmlkZXI6aS5kZWZpbml0aW9uLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGwsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKGkuZGVmaW5pdGlvbixyLnBhdGhQYXJ0cyl9fX07ZnVuY3Rpb24gcDYobil7cmV0dXJuIG4uc3BsaXQoIi8iKS5zbGljZSgxKX1mdW5jdGlvbiB1NihuKXtyZXR1cm4iLyIrbi5qb2luKCIvIil9dmFyIG1GPW5ldyBpZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKSx3bD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCFlKXJldHVybiB2b2lkKHRoaXMucm91dGVDb25maWdzPW5ldyBzYihbXSkpO2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKWZvcihsZXQgbyBvZiByKWkucHVzaChvKTt0aGlzLnJvdXRlQ29uZmlncz1uZXcgc2IoaSksaS5mb3JFYWNoKHI9PntvYihyKSYmdGhpcy5yb3V0ZUtpbmRUb05nQ29tcG9uZW50LnNldChyLnJvdXRlS2luZCxyLm5nQ29tcG9uZW50KX0pfWdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5rZXlzKCl9Z2V0Um91dGVDb25maWdzKCl7cmV0dXJuIHRoaXMucm91dGVDb25maWdzfWdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoZSl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5nZXQoZSl8fG51bGx9c3RhdGljIHJlZ2lzdGVyUm91dGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6bUYsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKG1GLDgpKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7fSksbn0pKCksblM9ImFwcF9yb3V0aW5nIixsYj1NcihuUyksZmE9cShsYixuPT5uLmFjdGl2ZVJvdXRlKSxoNj1xKGxiLG49Pm4ubmV4dFJvdXRlKSxnNj1xKGxiLG49Pm4uYWN0aXZlTmFtZXNwYWNlSWQpLF82PXEobGIsbj0+bi5yZWh5ZHJhdGVkRGVlcExpbmtzKSx5Nj1xKGxiLG49Pm4ucmVnaXN0ZXJlZFJvdXRlS2V5cyksTnM9cShmYSxuPT5uP24ucm91dGVLaW5kOmtuLk5PVF9TRVQpLGdGPXEoZmEsbj0+bj9uLnBhcmFtczp7fSkscm89cShOcyxnRiwobix0KT0+cmIobix0KSksQnM9KHEoTnMsZ0YsKG4sdCk9PntpZihuIT09a24uQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1MaChuLmV4cGVyaW1lbnRJZHMpO2ZvcihsZXR7aWQ6aSxuYW1lOnJ9b2YgZSlyJiZ0LnNldChpLHIpO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pLHEoTnMsZ0YsKG4sdCk9PntsZXQgZT10O2lmKG4hPT1rbi5DT01QQVJFX0VYUEVSSU1FTlQmJihuIT09a24uQ0FSRHx8LTE9PT1lLmV4cGVyaW1lbnRJZHMuaW5kZXhPZigiLCIpKSlyZXR1cm57fTtsZXQgaT1mdW5jdGlvbihuKXtsZXQgdD1uZXcgTWFwLGU9TGgobi5leHBlcmltZW50SWRzKSxpPTA7Zm9yKGxldHtpZDpyLG5hbWU6b31vZiBlKWkrKywhdC5oYXMocikmJnQuc2V0KHIse2FsaWFzVGV4dDpvLGFsaWFzTnVtYmVyOml9KTtyZXR1cm4gdH0oZSk7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhpLmVudHJpZXMoKSl9KSksX0Y9eWUoIltBcHAgUm91dGluZ10gRWZmZWN0cyBJbml0IiksbWE9KCgpPT57cmV0dXJuKG49bWF8fChtYT17fSkpW24uVU5DSEFOR0VEPTBdPSJVTkNIQU5HRUQiLG5bbi5ORVc9MV09Ik5FVyIsbltuLkZST01fSElTVE9SWT0yXT0iRlJPTV9ISVNUT1JZIixtYTt2YXIgbn0pKCksYjY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLGEscyxsKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMubG9jYXRpb249cix0aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5PW8sdGhpcy5yZWdpc3RyeT1hLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZNb2R1bGU9cyx0aGlzLmFwcFJvb3RQcm92aWRlcj1sLHRoaXMub25OYXZpZ2F0aW9uUmVxdWVzdGVkJD10aGlzLmFjdGlvbnMkLnBpcGUod2kobEYpLFUoYz0+KHtwYXRobmFtZTpjLnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKT90aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KGMucGF0aG5hbWUpOnRoaXMubG9jYXRpb24uZ2V0UmVzb2x2ZWRQYXRoKGMucGF0aG5hbWUpLG9wdGlvbnM6e2Jyb3dzZXJJbml0aWF0ZWQ6ITEscmVwbGFjZVN0YXRlOmMucmVwbGFjZVN0YXRlPz8hMSxuYW1lc3BhY2VVcGRhdGU6e29wdGlvbjpjLnJlc2V0TmFtZXNwYWNlZFN0YXRlP21hLk5FVzptYS5VTkNIQU5HRUR9fX0pKSksdGhpcy5ib290c3RyYXBSZWR1Y2VycyQ9T3IoKCk9PnRoaXMuYWN0aW9ucyQucGlwZSh3aShfRiksVSgoKT0+ZVMoe3JvdXRlS2luZHM6bmV3IFNldCh0aGlzLnJlZ2lzdHJ5LmdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCkpfSkpKSksdGhpcy5vbkluaXQkPXRoaXMuYWN0aW9ucyQucGlwZSh3aShfRikpLnBpcGUoeHMoMCksVSgoKT0+e2xldCBjPXRoaXMubG9jYXRpb24uZ2V0SGlzdG9yeVN0YXRlKCk/Lm5hbWVzcGFjZUlkLGQ9dm9pZCAwPT09Yz97b3B0aW9uOm1hLk5FV306e29wdGlvbjptYS5GUk9NX0hJU1RPUlksbmFtZXNwYWNlSWQ6Y307cmV0dXJue3BhdGhuYW1lOnRoaXMubG9jYXRpb24uZ2V0UGF0aCgpLG9wdGlvbnM6e2Jyb3dzZXJJbml0aWF0ZWQ6ITAscmVwbGFjZVN0YXRlOiEwLG5hbWVzcGFjZVVwZGF0ZTpkfX19KSksdGhpcy5vblBvcFN0YXRlJD10aGlzLmxvY2F0aW9uLm9uUG9wU3RhdGUoKS5waXBlKFUoYz0+KHtwYXRobmFtZTpjLnBhdGhuYW1lLG9wdGlvbnM6e2Jyb3dzZXJJbml0aWF0ZWQ6ITAscmVwbGFjZVN0YXRlOiEwLG5hbWVzcGFjZVVwZGF0ZTp2b2lkIDA9PT1jLnN0YXRlPy5uYW1lc3BhY2VJZD97b3B0aW9uOm1hLlVOQ0hBTkdFRH06e29wdGlvbjptYS5GUk9NX0hJU1RPUlksbmFtZXNwYWNlSWQ6Yy5zdGF0ZS5uYW1lc3BhY2VJZH19fSkpKSx0aGlzLnVzZXJJbml0TmF2Um91dGUkPWNuKHRoaXMub25OYXZpZ2F0aW9uUmVxdWVzdGVkJCx0aGlzLm9uSW5pdCQsdGhpcy5vblBvcFN0YXRlJCkucGlwZShVKGM9PntpZighYy5wYXRobmFtZS5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKGBbQXBwIHJvdXRpbmddIHBhdGhuYW1lIG11c3Qgc3RhcnQgd2l0aCAnLycuIEdvdDogJHtjLnBhdGhuYW1lfWApO3JldHVybnsuLi5jLHBhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUoYy5wYXRobmFtZSl9fSksVShjPT4oe3JvdXRlTWF0Y2g6dGhpcy5yb3V0ZUNvbmZpZ3MubWF0Y2goYyksb3B0aW9uczpjLm9wdGlvbnN9KSkpLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZSb3V0ZSQ9dGhpcy5hY3Rpb25zJC5waXBlKFUoYz0+dGhpcy5wcm9ncmFtbWF0aWNhbE5hdk1vZHVsZS5nZXROYXZpZ2F0aW9uKGMpKSxWZShjPT5udWxsIT09YyksVShjPT57bGV0IG0sZD1jLHtyZXBsYWNlU3RhdGU6dT0hMSxyZXNldE5hbWVzcGFjZWRTdGF0ZTpwLHJvdXRlS2luZDpmfT1kO3JldHVybiBtPWQucm91dGVLaW5kPT09a24uQ09NUEFSRV9FWFBFUklNRU5UP3tleHBlcmltZW50SWRzOnI2KGQucm91dGVQYXJhbXMuYWxpYXNBbmRFeHBlcmltZW50SWRzKX06ZC5yb3V0ZVBhcmFtcyx7cmVwbGFjZVN0YXRlOnUscm91dGVLaW5kOmYscm91dGVQYXJhbXM6bSxyZXNldE5hbWVzcGFjZWRTdGF0ZTpwfX0pLFUoKHtyZXBsYWNlU3RhdGU6Yyxyb3V0ZUtpbmQ6ZCxyb3V0ZVBhcmFtczp1LHJlc2V0TmFtZXNwYWNlZFN0YXRlOnB9KT0+KHtyb3V0ZU1hdGNoOnRoaXMucm91dGVDb25maWdzP3RoaXMucm91dGVDb25maWdzLm1hdGNoQnlSb3V0ZUtpbmQoZCx1KTpudWxsLG9wdGlvbnM6e3JlcGxhY2VTdGF0ZTpjLGJyb3dzZXJJbml0aWF0ZWQ6ITEsbmFtZXNwYWNlVXBkYXRlOntvcHRpb246cD9tYS5ORVc6bWEuVU5DSEFOR0VEfX19KSkpLHRoaXMudmFsaWRhdGVkUm91dGVNYXRjaCQ9Y24odGhpcy51c2VySW5pdE5hdlJvdXRlJCx0aGlzLnByb2dyYW1tYXRpY2FsTmF2Um91dGUkKS5waXBlKFZlKCh7cm91dGVNYXRjaDpjfSk9PkJvb2xlYW4oYykpLFUoKHtyb3V0ZU1hdGNoOmMsb3B0aW9uczpkfSk9Pih7cm91dGVNYXRjaDpjLG9wdGlvbnM6ZH0pKSksdGhpcy5uYXZpZ2F0ZSQ9T3IoKCk9PnRoaXMudmFsaWRhdGVkUm91dGVNYXRjaCQucGlwZShZdCh0aGlzLnN0b3JlLnNlbGVjdChmYSkpLGhuKChbdSxwXSk9PntsZXQgZj1udWxsIT09cCYmTG8ocCx1LnJvdXRlTWF0Y2gpLG09dGhpcy5kaXJ0eVVwZGF0ZXNSZWdpc3RyeS5nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKTtyZXR1cm4gZnx8IW0ubGVuZ3RoP3F0KHUpOnBvKHRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnkuZ2V0RGlydHlVcGRhdGVzU2VsZWN0b3JzKCkubWFwKHk9PnRoaXMuc3RvcmUuc2VsZWN0KHkpLnBpcGUoenQoMSkpKSkucGlwZShVKHk9PnZvaWQgMCE9PXlbMF0uZXhwZXJpbWVudElkcyYmeVswXS5leHBlcmltZW50SWRzLmxlbmd0aD4wKSxWZSh5PT57aWYoeSl7bGV0IE09d2luZG93LmNvbmZpcm0oIllvdSBoYXZlIHVuc2F2ZWQgZWRpdHMsIGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNjYXJkIHRoZW0/Iik7cmV0dXJuIE0mJnRoaXMuc3RvcmUuZGlzcGF0Y2goYzYoKSksTX1yZXR1cm4hMH0pLFUoKCk9PnUpKX0pLFl0KHRoaXMuc3RvcmUuc2VsZWN0KF82KSksVnQoKFt7cm91dGVNYXRjaDp1LG9wdGlvbnM6cH0sZl0pPT57aWYoIXAuYnJvd3NlckluaXRpYXRlZHx8IXUuZGVlcExpbmtQcm92aWRlcnx8cC5uYW1lc3BhY2VVcGRhdGUub3B0aW9uPT09bWEuRlJPTV9ISVNUT1JZJiYhSncodS5yb3V0ZUtpbmQscC5uYW1lc3BhY2VVcGRhdGUubmFtZXNwYWNlSWQsZikpcmV0dXJuO2xldCBtPXUub3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uJiZ1LnJlZGlyZWN0aW9uT25seVF1ZXJ5UGFyYW1zP3UucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dGhpcy5sb2NhdGlvbi5nZXRTZWFyY2goKSx5PXUuZGVlcExpbmtQcm92aWRlci5kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKG0pO3RoaXMuc3RvcmUuZGlzcGF0Y2goVmgoe3JvdXRlS2luZDp1LnJvdXRlS2luZCxwYXJ0aWFsU3RhdGU6eX0pKX0pLFZ0KChbe3JvdXRlTWF0Y2g6dX1dKT0+e3UuYWN0aW9uJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKHUuYWN0aW9uKX0pLHlpKChbe3JvdXRlTWF0Y2g6dSxvcHRpb25zOnB9XSk9Pm51bGw9PT11LmRlZXBMaW5rUHJvdmlkZXI/cXQoe3JvdXRlOntyb3V0ZUtpbmQ6dS5yb3V0ZUtpbmQscGFyYW1zOnUucGFyYW1zfSxwYXRobmFtZTp1LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOltdLG9wdGlvbnM6cH0pOnUuZGVlcExpbmtQcm92aWRlci5zZXJpYWxpemVTdGF0ZVRvUXVlcnlQYXJhbXModGhpcy5zdG9yZSkucGlwZShVKChmLG0pPT4oe3JvdXRlOntyb3V0ZUtpbmQ6dS5yb3V0ZUtpbmQscGFyYW1zOnUucGFyYW1zfSxwYXRobmFtZTp1LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOmYsb3B0aW9uczowPT09bT9wOnsuLi5wLG5hbWVzcGFjZVVwZGF0ZTp7b3B0aW9uOm1hLlVOQ0hBTkdFRH0scmVwbGFjZVN0YXRlOiEwfX0pKSkpLFZ0KCh7cm91dGU6dX0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChIaCh7YWZ0ZXI6dX0pKX0pLENyKDApKS5waXBlKFl0KHRoaXMuc3RvcmUuc2VsZWN0KGZhKSksVSgoW3UscF0pPT57bGV0IGY9bnVsbD09PXB8fG51bGw9PT11LnJvdXRlfHxMbyhwLHUucm91dGUpO3JldHVybnsuLi51LHByZXNlcnZlSGFzaDpmfX0pLFZ0KCh7cHJlc2VydmVIYXNoOnUscGF0aG5hbWU6cCxxdWVyeVBhcmFtczpmLG9wdGlvbnM6bX0pPT57KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4ucGF0aG5hbWU9PT10LnBhdGhuYW1lJiZuLnF1ZXJ5UGFyYW1zLmxlbmd0aD09PXQucXVlcnlQYXJhbXMubGVuZ3RoJiZuLnF1ZXJ5UGFyYW1zLmV2ZXJ5KChlLGkpPT57bGV0IHI9dC5xdWVyeVBhcmFtc1tpXTtyZXR1cm4gZS5rZXk9PT1yLmtleSYmZS52YWx1ZT09PXIudmFsdWV9KX0pKHtwYXRobmFtZTpwLHF1ZXJ5UGFyYW1zOmZ9LHtwYXRobmFtZTp0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBcHBSb290bGVzc1BhdGhuYW1lKHRoaXMubG9jYXRpb24uZ2V0UGF0aCgpKSxxdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpfSl8fChtLnJlcGxhY2VTdGF0ZT90aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZVVybCh0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHRoaXMubG9jYXRpb24uZ2V0RnVsbFBhdGgocCxmLHUpKSk6dGhpcy5sb2NhdGlvbi5wdXNoU3RhdGVVcmwodGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdCh0aGlzLmxvY2F0aW9uLmdldEZ1bGxQYXRoKHAsZix1KSkpKX0pKS5waXBlKFl0KHRoaXMuc3RvcmUuc2VsZWN0KGZhKSx0aGlzLnN0b3JlLnNlbGVjdChnNikpLFUoKFt7cm91dGU6dSxvcHRpb25zOnB9LGYsbV0pPT57bGV0IHk9ZnVuY3Rpb24obix0LGUpe3JldHVybiB0Lm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1tYS5GUk9NX0hJU1RPUlk/dC5uYW1lc3BhY2VVcGRhdGUubmFtZXNwYWNlSWQ6bnVsbD09ZXx8dC5uYW1lc3BhY2VVcGRhdGUub3B0aW9uPT09bWEuTkVXP2Ake0RhdGUubm93KCkudG9TdHJpbmcoKX06JHtmdW5jdGlvbigpe2xldCBuPW5ldyBVaW50OEFycmF5KDMyKTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG4pO2xldCB0PSIiO2ZvcihsZXQgZSBvZiBuKXQrPShlPj40KS50b1N0cmluZygxNik7cmV0dXJuIHR9KCl9YDplfSgwLHAsbSk7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlRGF0YSh7Li4udGhpcy5sb2NhdGlvbi5nZXRIaXN0b3J5U3RhdGUoKSxuYW1lc3BhY2VJZDp5fSksTHMoe2JlZm9yZTpmLGFmdGVyOnUsYmVmb3JlTmFtZXNwYWNlSWQ6bSxhZnRlck5hbWVzcGFjZUlkOnl9KX0pKSksdGhpcy5yb3V0ZUNvbmZpZ3M9YS5nZXRSb3V0ZUNvbmZpZ3MoKX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBfRigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFdvKSxPKGtlKSxPKGRmKSxPKCR3KSxPKHdsKSxPKHRTKSxPKHVmKSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksR2hlPV9yKHthY3RpdmVSb3V0ZTpudWxsLG5leHRSb3V0ZTpudWxsLGFjdGl2ZU5hbWVzcGFjZUlkOm51bGwscmVoeWRyYXRlZERlZXBMaW5rczpbXSxyZWdpc3RlcmVkUm91dGVLZXlzOm5ldyBTZXR9LEVlKEhoLChuLHthZnRlcjp0fSk9Pih7Li4ubixuZXh0Um91dGU6dH0pKSxFZShMcywobix7YWZ0ZXI6dCxhZnRlck5hbWVzcGFjZUlkOmV9KT0+e2xldCBpPW4ucmVoeWRyYXRlZERlZXBMaW5rcztyZXR1cm4gSncodC5yb3V0ZUtpbmQsZSxpKSYmKGk9Wy4uLmldLGkucHVzaCh7ZGVlcExpbmtHcm91cDpyRih0LnJvdXRlS2luZCksbmFtZXNwYWNlSWQ6ZX0pKSx7Li4ubixhY3RpdmVSb3V0ZTp0LG5leHRSb3V0ZTpudWxsLGFjdGl2ZU5hbWVzcGFjZUlkOmUscmVoeWRyYXRlZERlZXBMaW5rczppfX0pLEVlKGVTLChuLHtyb3V0ZUtpbmRzOnR9KT0+KHsuLi5uLHJlZ2lzdGVyZWRSb3V0ZUtleXM6dH0pKSk7ZnVuY3Rpb24gdjYobix0KXtyZXR1cm4gR2hlKG4sdCl9dmFyIFVoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtwcm92aWRlcnM6WyR3LHRTXSxpbXBvcnRzOlt3bCx3ci5mb3JGZWF0dXJlKG5TLHY2KSx3by5mb3JGZWF0dXJlKFtiNl0pLEJoLE5oXX0pLG59KSgpLHg2PSJfX3RhYl9fIixDNj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy50ZlN0b3JhZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtc3RvcmFnZSIpLGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWdsb2JhbHMiKS50Zl9nbG9iYWxzLnNldFVzZUhhc2goITApLHRoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2UubWlncmF0ZUxlZ2FjeVVSTFNjaGVtZSgpfWdldFN0cmluZyhlKXtyZXR1cm4gdGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5nZXRTdHJpbmcoZSl9c2V0U3RyaW5nKGUsaSxyKXt0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLnNldFN0cmluZyhlLGkscil9Z2V0UGx1Z2luSWQoKXtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoeDYpfXNldFBsdWdpbklkKGUsaSl7dGhpcy5zZXRTdHJpbmcoeDYsZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdnU9Y2xhc3N7fSxPYT0oKCk9PntyZXR1cm4obj1PYXx8KE9hPXt9KSkuQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLG4uTElHSFQ9ImxpZ2h0IixuLkRBUks9ImRhcmsiLE9hO3ZhciBufSkoKSxTbD15ZSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx5Rj1uZXcgaWUoIltQZXJzaXN0ZW50IFNldHRpbmdzXSBHbG9iYWwgU2V0dGluZ3MiKSxlcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZ2xvYmFsU2V0dGluZ1NlbGVjdG9ycz1bXSxlJiYodGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPWUubWFwKGk9PmkoKSkpfWdldEdsb2JhbFNldHRpbmdTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPz9bXX1zdGF0aWMgZGVmaW5lR2xvYmFsU2V0dGluZyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOnlGLG11bHRpOiEwLHVzZVZhbHVlOmV9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oeUYsOCkpfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHt9KSxufSkoKSxNNj0iX3RiX2dsb2JhbF9zZXR0aW5ncy50aW1lc2VyaWVzIix3Nj0iX3RiX2dsb2JhbF9zZXR0aW5ncyIsUzY9Im5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZXN0YW1wIixpUz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxyUz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxiRj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgclN7dWlUb0JhY2tlbmQoZSl7bGV0IGk9e307cmV0dXJuIHZvaWQgMCE9PWUuaWdub3JlT3V0bGllcnMmJihpLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLHZvaWQgMCE9PWUuc2NhbGFyU21vb3RoaW5nJiYoaS5zY2FsYXJTbW9vdGhpbmc9ZS5zY2FsYXJTbW9vdGhpbmcpLHZvaWQgMCE9PWUudG9vbHRpcFNvcnQmJihpLnRvb2x0aXBTb3J0PWUudG9vbHRpcFNvcnQpLHZvaWQgMCE9PWUuYXV0b1JlbG9hZCYmKGkuYXV0b1JlbG9hZD1lLmF1dG9SZWxvYWQpLHZvaWQgMCE9PWUuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihpLmF1dG9SZWxvYWRQZXJpb2RJbk1zPWUuYXV0b1JlbG9hZFBlcmlvZEluTXMpLHZvaWQgMCE9PWUucGFnZVNpemUmJihpLnBhZ2luYXRpb25TaXplPWUucGFnZVNpemUpLHZvaWQgMCE9PWUudGhlbWVPdmVycmlkZSYmKGkudGhlbWU9ZS50aGVtZU92ZXJyaWRlKSx2b2lkIDAhPT1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMmJihpLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM9ZS5ub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zKSx2b2lkIDAhPT1lLnNpZGVCYXJXaWR0aEluUGVyY2VudCYmKGkuc2lkZUJhcldpZHRoSW5QZXJjZW50PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50KSx2b2lkIDAhPT1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQmJihpLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ9ZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkKSx2b2lkIDAhPT1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgmJihpLnRpbWVTZXJpZXNDYXJkTWluV2lkdGg9ZS50aW1lU2VyaWVzQ2FyZE1pbldpZHRoKSx2b2lkIDAhPT1lLnN0ZXBTZWxlY3RvckVuYWJsZWQmJihpLnN0ZXBTZWxlY3RvckVuYWJsZWQ9ZS5zdGVwU2VsZWN0b3JFbmFibGVkKSx2b2lkIDAhPT1lLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCYmKGkucmFuZ2VTZWxlY3Rpb25FbmFibGVkPWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkKSx2b2lkIDAhPT1lLmxpbmtlZFRpbWVFbmFibGVkJiYoaS5saW5rZWRUaW1lRW5hYmxlZD1lLmxpbmtlZFRpbWVFbmFibGVkKSx2b2lkIDAhPT1lLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMmJihpLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnM9ZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSx2b2lkIDAhPT1lLnJhbmdlU2VsZWN0aW9uSGVhZGVycyYmKGkucmFuZ2VTZWxlY3Rpb25IZWFkZXJzPWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpfWJhY2tlbmRUb1VpKGUpe2xldCBpPXt9O3JldHVybiBlLmhhc093blByb3BlcnR5KCJzY2FsYXJTbW9vdGhpbmciKSYmIm51bWJlciI9PXR5cGVvZiBlLnNjYWxhclNtb290aGluZyYmKGkuc2NhbGFyU21vb3RoaW5nPWUuc2NhbGFyU21vb3RoaW5nKSxlLmhhc093blByb3BlcnR5KCJpZ25vcmVPdXRsaWVycyIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmlnbm9yZU91dGxpZXJzJiYoaS5pZ25vcmVPdXRsaWVycz1lLmlnbm9yZU91dGxpZXJzKSxlLmhhc093blByb3BlcnR5KCJ0b29sdGlwU29ydCIpJiYic3RyaW5nIj09dHlwZW9mIGUudG9vbHRpcFNvcnQmJihpLnRvb2x0aXBTb3J0PWUudG9vbHRpcFNvcnQpLGUuaGFzT3duUHJvcGVydHkoImF1dG9SZWxvYWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5hdXRvUmVsb2FkJiYoaS5hdXRvUmVsb2FkPWUuYXV0b1JlbG9hZCksZS5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZFBlcmlvZEluTXMiKSYmIm51bWJlciI9PXR5cGVvZiBlLmF1dG9SZWxvYWRQZXJpb2RJbk1zJiYoaS5hdXRvUmVsb2FkUGVyaW9kSW5Ncz1lLmF1dG9SZWxvYWRQZXJpb2RJbk1zKSxlLmhhc093blByb3BlcnR5KCJwYWdpbmF0aW9uU2l6ZSIpJiYibnVtYmVyIj09dHlwZW9mIGUucGFnaW5hdGlvblNpemUmJihpLnBhZ2VTaXplPWUucGFnaW5hdGlvblNpemUpLGUuaGFzT3duUHJvcGVydHkoInRoZW1lIikmJiJzdHJpbmciPT10eXBlb2YgZS50aGVtZSYmbmV3IFNldChPYmplY3QudmFsdWVzKE9hKSkuaGFzKGUudGhlbWUpJiYoaS50aGVtZU92ZXJyaWRlPWUudGhlbWUpLGUuaGFzT3duUHJvcGVydHkoIm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMiKSYmIm51bWJlciI9PXR5cGVvZiBlLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMmJihpLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM9ZS5ub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zKSxlLmhhc093blByb3BlcnR5KCJzaWRlQmFyV2lkdGhJblBlcmNlbnQiKSYmIm51bWJlciI9PXR5cGVvZiBlLnNpZGVCYXJXaWR0aEluUGVyY2VudCYmKGkuc2lkZUJhcldpZHRoSW5QZXJjZW50PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50KSxlLmhhc093blByb3BlcnR5KCJ0aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkIikmJiJib29sZWFuIj09dHlwZW9mIGUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCYmKGkudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZD1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQpLGUuaGFzT3duUHJvcGVydHkoInRpbWVTZXJpZXNDYXJkTWluV2lkdGgiKSYmIm51bWJlciI9PXR5cGVvZiBlLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgmJihpLnRpbWVTZXJpZXNDYXJkTWluV2lkdGg9ZS50aW1lU2VyaWVzQ2FyZE1pbldpZHRoKSxlLmhhc093blByb3BlcnR5KCJzdGVwU2VsZWN0b3JFbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUuc3RlcFNlbGVjdG9yRW5hYmxlZCYmKGkuc3RlcFNlbGVjdG9yRW5hYmxlZD1lLnN0ZXBTZWxlY3RvckVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoInJhbmdlU2VsZWN0aW9uRW5hYmxlZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCYmKGkucmFuZ2VTZWxlY3Rpb25FbmFibGVkPWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkKSxlLmhhc093blByb3BlcnR5KCJsaW5rZWRUaW1lRW5hYmxlZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmxpbmtlZFRpbWVFbmFibGVkJiYoaS5saW5rZWRUaW1lRW5hYmxlZD1lLmxpbmtlZFRpbWVFbmFibGVkKSxBcnJheS5pc0FycmF5KGUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycykmJnZvaWQgMCE9PWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVyc1swXS5uYW1lJiYoZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzLmZvckVhY2gocj0+e3IubW92YWJsZT1yLm1vdmFibGU/PyEwLHIuc29ydGFibGU9ci5zb3J0YWJsZT8/ITAsci5yZW1vdmFibGU9ci5yZW1vdmFibGU/PyEwfSksaS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksQXJyYXkuaXNBcnJheShlLnJhbmdlU2VsZWN0aW9uSGVhZGVycykmJnZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzWzBdLm5hbWUmJihlLnJhbmdlU2VsZWN0aW9uSGVhZGVycy5mb3JFYWNoKHI9PntyLm1vdmFibGU9ci5tb3ZhYmxlPz8hMCxyLnNvcnRhYmxlPXIuc29ydGFibGU/PyEwLHIucmVtb3ZhYmxlPXIucmVtb3ZhYmxlPz8hMH0pLGkucmFuZ2VTZWxlY3Rpb25IZWFkZXJzPWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PUNuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksRTY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbnZlcnRlcj1lfXNldFNldHRpbmdzKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKT90aGlzLmdldFNldHRpbmdzKCkucGlwZShWdChpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHc2LEpTT04uc3RyaW5naWZ5KHRoaXMuY29udmVydGVyLnVpVG9CYWNrZW5kKHsuLi5pLC4uLmV9KSkpLHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShNNiksd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFM2KX0pLFUoKCk9Pnt9KSk6dG99ZGVzZXJpYWxpemUoZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe3JldHVybnt9fX1nZXRTZXR0aW5ncygpe2xldCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShTNik7cmV0dXJuIHF0KHsuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKGU/SlNPTi5zdHJpbmdpZnkoe25vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM6TnVtYmVyKGUpfSk6Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKE02KT8/Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHc2KT8/Int9IikpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oclMpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxUNj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7cHJvdmlkZXJzOlt7cHJvdmlkZTppUyx1c2VDbGFzczpFNn0sYkYse3Byb3ZpZGU6clMsdXNlRXhpc3Rpbmc6YkZ9XX0pLG59KSgpLG9TPSJwZXJzaXN0ZW50X3NldHRpbmdzIixENj1xKE1yKG9TKSxuPT5uLnNob3VsZFBlcnNpc3RTZXR0aW5ncyksSTY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuY29uZmlnTW9kdWxlPXIsdGhpcy5kYXRhU291cmNlPW8sdGhpcy5pbml0aWFsaXplQW5kVXBkYXRlU2V0dGluZ3MkPU9yKCgpPT57bGV0IGE9dGhpcy5hY3Rpb25zJC5waXBlKHdpKEhoKSx6dCgxKSxZdCh0aGlzLnN0b3JlLnNlbGVjdChENikpLFZlKChbLHNdKT0+cyksaG4oKCk9PnRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpKSxWdChzPT57dGhpcy5zdG9yZS5kaXNwYXRjaChTbCh7cGFydGlhbFNldHRpbmdzOnN9KSl9KSx4cygwKSxobigoKT0+Y24oLi4udGhpcy5jb25maWdNb2R1bGUuZ2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpLm1hcChsPT50aGlzLnN0b3JlLnNlbGVjdChsKS5waXBlKHVpKChjLGQpPT57bGV0IHU9T2JqZWN0LnZhbHVlcyhjKSxwPU9iamVjdC52YWx1ZXMoZCk7cmV0dXJuIHUubGVuZ3RoPT09cC5sZW5ndGgmJnUuZXZlcnkoKGYsbSk9PmY9PT1wW21dKX0pLCRhKDEpKSkpKSxTYSgpKTtyZXR1cm4gYS5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBLdCgodCxlKT0+e2xldCBpPVtdO3JldHVybiB0LnN1YnNjcmliZShIdChlLHI9PmkucHVzaChyKSwoKT0+e2UubmV4dChpKSxlLmNvbXBsZXRlKCl9KSksbi5zdWJzY3JpYmUoSHQoZSwoKT0+e2xldCByPWk7aT1bXSxlLm5leHQocil9LHNsKSksKCk9PntpPW51bGx9fSl9KGEucGlwZShDcig1MDApKSksaG4ocz0+e2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gdG87bGV0IGw9e307Zm9yKGxldCBjIG9mIHMpT2JqZWN0LmFzc2lnbihsLGMpO3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2V0U2V0dGluZ3MobCl9KSl9LHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFdvKSxPKGtlKSxPKGVyKSxPKGlTKSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWmhlPV9yKHtzaG91bGRQZXJzaXN0U2V0dGluZ3M6ITB9KTtmdW5jdGlvbiBBNihuLHQpe3JldHVybiBaaGUobix0KX12YXIgdkY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbZXJdLGltcG9ydHM6W3dyLmZvckZlYXR1cmUob1MsQTYpLHdvLmZvckZlYXR1cmUoW0k2XSksVDZdfSksbn0pKCksZGI9Y2xhc3N7fSxsUz1jbGFzc3t9LGFzPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD8oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaChlPT57bGV0IGk9ZS5pbmRleE9mKCI6Iik7aWYoaT4wKXtsZXQgcj1lLnNsaWNlKDAsaSksbz1yLnRvTG93ZXJDYXNlKCksYT1lLnNsaWNlKGkrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLG8pLHRoaXMuaGVhZGVycy5oYXMobyk/dGhpcy5oZWFkZXJzLmdldChvKS5wdXNoKGEpOnRoaXMuaGVhZGVycy5zZXQobyxbYV0pfX0pfTooKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLGldKT0+e2xldCByO2lmKHI9InN0cmluZyI9PXR5cGVvZiBpP1tpXToibnVtYmVyIj09dHlwZW9mIGk/W2kudG9TdHJpbmcoKV06aS5tYXAobz0+by50b1N0cmluZygpKSxyLmxlbmd0aD4wKXtsZXQgbz1lLnRvTG93ZXJDYXNlKCk7dGhpcy5oZWFkZXJzLnNldChvLHIpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShlLG8pfX0pfTp0aGlzLmhlYWRlcnM9bmV3IE1hcH1oYXModCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXModC50b0xvd2VyQ2FzZSgpKX1nZXQodCl7dGhpcy5pbml0KCk7bGV0IGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUodCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGFzP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaCh0PT50aGlzLmFwcGx5VXBkYXRlKHQpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKHQpe3QuaW5pdCgpLEFycmF5LmZyb20odC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChlPT57dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVycy5nZXQoZSkpLHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQubm9ybWFsaXplZE5hbWVzLmdldChlKSl9KX1jbG9uZSh0KXtsZXQgZT1uZXcgYXM7cmV0dXJuIGUubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGFzP3RoaXMubGF6eUluaXQ6dGhpcyxlLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbdF0pLGV9YXBwbHlVcGRhdGUodCl7bGV0IGU9dC5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgaT10LnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgaSYmKGk9W2ldKSwwPT09aS5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZSh0Lm5hbWUsZSk7bGV0IHI9KCJhIj09PXQub3A/dGhpcy5oZWFkZXJzLmdldChlKTp2b2lkIDApfHxbXTtyLnB1c2goLi4uaSksdGhpcy5oZWFkZXJzLnNldChlLHIpO2JyZWFrO2Nhc2UiZCI6bGV0IG89dC52YWx1ZTtpZihvKXtsZXQgYT10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCFhKXJldHVybjthPWEuZmlsdGVyKHM9Pi0xPT09by5pbmRleE9mKHMpKSwwPT09YS5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpKTp0aGlzLmhlYWRlcnMuc2V0KGUsYSl9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKX19Zm9yRWFjaCh0KXt0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLmtleXMoKSkuZm9yRWFjaChlPT50KHRoaXMubm9ybWFsaXplZE5hbWVzLmdldChlKSx0aGlzLmhlYWRlcnMuZ2V0KGUpKSl9fSxKaGU9LyUoXGRbYS1mMC05XSkvZ2ksJGhlPXs0MDoiQCIsIjNBIjoiOiIsMjQ6IiQiLCIyQyI6IiwiLCIzQiI6IjsiLCIzRCI6Ij0iLCIzRiI6Ij8iLCIyRiI6Ii8ifTtmdW5jdGlvbiBSNihuKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG4pLnJlcGxhY2UoSmhlLCh0LGUpPT4kaGVbZV0/P3QpfWZ1bmN0aW9uIGFTKG4pe3JldHVybmAke259YH12YXIgYmM9Y2xhc3N7Y29uc3RydWN0b3IodD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9dC5lbmNvZGVyfHxuZXcgY2xhc3N7ZW5jb2RlS2V5KHQpe3JldHVybiBSNih0KX1lbmNvZGVWYWx1ZSh0KXtyZXR1cm4gUjYodCl9ZGVjb2RlS2V5KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZGVjb2RlVmFsdWUodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX19LHQuZnJvbVN0cmluZyl7aWYodC5mcm9tT2JqZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bmV3IE1hcDtyZXR1cm4gbi5sZW5ndGg+MCYmbi5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2gocj0+e2xldCBvPXIuaW5kZXhPZigiPSIpLFthLHNdPS0xPT1vP1t0LmRlY29kZUtleShyKSwiIl06W3QuZGVjb2RlS2V5KHIuc2xpY2UoMCxvKSksdC5kZWNvZGVWYWx1ZShyLnNsaWNlKG8rMSkpXSxsPWUuZ2V0KGEpfHxbXTtsLnB1c2gocyksZS5zZXQoYSxsKX0pLGV9KHQuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgdC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKHQuZnJvbU9iamVjdCkuZm9yRWFjaChlPT57bGV0IGk9dC5mcm9tT2JqZWN0W2VdLHI9QXJyYXkuaXNBcnJheShpKT9pLm1hcChhUyk6W2FTKGkpXTt0aGlzLm1hcC5zZXQoZSxyKX0pKTp0aGlzLm1hcD1udWxsfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuaGFzKHQpfWdldCh0KXt0aGlzLmluaXQoKTtsZXQgZT10aGlzLm1hcC5nZXQodCk7cmV0dXJuIGU/ZVswXTpudWxsfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KHQpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImEifSl9YXBwZW5kQWxsKHQpe2xldCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10W2ldO0FycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKG89PntlLnB1c2goe3BhcmFtOmksdmFsdWU6byxvcDoiYSJ9KX0pOmUucHVzaCh7cGFyYW06aSx2YWx1ZTpyLG9wOiJhIn0pfSksdGhpcy5jbG9uZShlKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfWRlbGV0ZSh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKHQ9PntsZXQgZT10aGlzLmVuY29kZXIuZW5jb2RlS2V5KHQpO3JldHVybiB0aGlzLm1hcC5nZXQodCkubWFwKGk9PmUrIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShpKSkuam9pbigiJiIpfSkuZmlsdGVyKHQ9PiIiIT09dCkuam9pbigiJiIpfWNsb25lKHQpe2xldCBlPW5ldyBiYyh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gZS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsZS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQodCksZX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKHQ9PnRoaXMubWFwLnNldCh0LHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQodCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaCh0PT57c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgZT0oImEiPT09dC5vcD90aGlzLm1hcC5nZXQodC5wYXJhbSk6dm9pZCAwKXx8W107ZS5wdXNoKGFTKHQudmFsdWUpKSx0aGlzLm1hcC5zZXQodC5wYXJhbSxlKTticmVhaztjYXNlImQiOmlmKHZvaWQgMD09PXQudmFsdWUpe3RoaXMubWFwLmRlbGV0ZSh0LnBhcmFtKTticmVha317bGV0IGk9dGhpcy5tYXAuZ2V0KHQucGFyYW0pfHxbXSxyPWkuaW5kZXhPZihhUyh0LnZhbHVlKSk7LTEhPT1yJiZpLnNwbGljZShyLDEpLGkubGVuZ3RoPjA/dGhpcy5tYXAuc2V0KHQucGFyYW0saSk6dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pfX19KSx0aGlzLmNsb25lRnJvbT10aGlzLnVwZGF0ZXM9bnVsbCl9fTtmdW5jdGlvbiBrNihuKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIFA2KG4pe3JldHVybiB0eXBlb2YgQmxvYjwidSImJm4gaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIE82KG4pe3JldHVybiB0eXBlb2YgRm9ybURhdGE8InUiJiZuIGluc3RhbmNlb2YgRm9ybURhdGF9dmFyIHBmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2xldCBvO2lmKHRoaXMudXJsPWUsdGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9dC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIkRFTEVURSI6Y2FzZSJHRVQiOmNhc2UiSEVBRCI6Y2FzZSJPUFRJT05TIjpjYXNlIkpTT05QIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0odGhpcy5tZXRob2QpfHxyPyh0aGlzLmJvZHk9dm9pZCAwIT09aT9pOm51bGwsbz1yKTpvPWksbyYmKHRoaXMucmVwb3J0UHJvZ3Jlc3M9ISFvLnJlcG9ydFByb2dyZXNzLHRoaXMud2l0aENyZWRlbnRpYWxzPSEhby53aXRoQ3JlZGVudGlhbHMsby5yZXNwb25zZVR5cGUmJih0aGlzLnJlc3BvbnNlVHlwZT1vLnJlc3BvbnNlVHlwZSksby5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPW8uaGVhZGVycyksby5jb250ZXh0JiYodGhpcy5jb250ZXh0PW8uY29udGV4dCksby5wYXJhbXMmJih0aGlzLnBhcmFtcz1vLnBhcmFtcykpLHRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgYXMpLHRoaXMuY29udGV4dHx8KHRoaXMuY29udGV4dD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldCh0LGUpe3JldHVybiB0aGlzLm1hcC5zZXQodCxlKSx0aGlzfWdldCh0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHQpfHx0aGlzLm1hcC5zZXQodCx0LmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQodCl9ZGVsZXRlKHQpe3JldHVybiB0aGlzLm1hcC5kZWxldGUodCksdGhpc31oYXModCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0KX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19KSx0aGlzLnBhcmFtcyl7bGV0IGE9dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09YS5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXtsZXQgcz1lLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9ZSsoLTE9PT1zPyI/IjpzPGUubGVuZ3RoLTE/IiYiOiIiKSthfX1lbHNlIHRoaXMucGFyYW1zPW5ldyBiYyx0aGlzLnVybFdpdGhQYXJhbXM9ZX1zZXJpYWxpemVCb2R5KCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDprNih0aGlzLmJvZHkpfHxQNih0aGlzLmJvZHkpfHxPNih0aGlzLmJvZHkpfHx0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1IiYmdGhpcy5ib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfHwic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT90aGlzLmJvZHk6dGhpcy5ib2R5IGluc3RhbmNlb2YgYmM/dGhpcy5ib2R5LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpP0pTT04uc3RyaW5naWZ5KHRoaXMuYm9keSk6dGhpcy5ib2R5LnRvU3RyaW5nKCl9ZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keXx8TzYodGhpcy5ib2R5KT9udWxsOlA2KHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6azYodGhpcy5ib2R5KT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5PyJ0ZXh0L3BsYWluIjp0aGlzLmJvZHkgaW5zdGFuY2VvZiBiYz8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5PyJhcHBsaWNhdGlvbi9qc29uIjpudWxsfWNsb25lKHQ9e30pe2xldCBlPXQubWV0aG9kfHx0aGlzLm1ldGhvZCxpPXQudXJsfHx0aGlzLnVybCxyPXQucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxvPXZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LGE9dm9pZCAwIT09dC53aXRoQ3JlZGVudGlhbHM/dC53aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHMscz12b2lkIDAhPT10LnJlcG9ydFByb2dyZXNzP3QucmVwb3J0UHJvZ3Jlc3M6dGhpcy5yZXBvcnRQcm9ncmVzcyxsPXQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLGM9dC5wYXJhbXN8fHRoaXMucGFyYW1zLGQ9dC5jb250ZXh0Pz90aGlzLmNvbnRleHQ7cmV0dXJuIHZvaWQgMCE9PXQuc2V0SGVhZGVycyYmKGw9T2JqZWN0LmtleXModC5zZXRIZWFkZXJzKS5yZWR1Y2UoKHUscCk9PnUuc2V0KHAsdC5zZXRIZWFkZXJzW3BdKSxsKSksdC5zZXRQYXJhbXMmJihjPU9iamVjdC5rZXlzKHQuc2V0UGFyYW1zKS5yZWR1Y2UoKHUscCk9PnUuc2V0KHAsdC5zZXRQYXJhbXNbcF0pLGMpKSxuZXcgcGYoZSxpLG8se3BhcmFtczpjLGhlYWRlcnM6bCxjb250ZXh0OmQscmVwb3J0UHJvZ3Jlc3M6cyxyZXNwb25zZVR5cGU6cix3aXRoQ3JlZGVudGlhbHM6YX0pfX0seHU9KCgpPT57cmV0dXJuKG49eHV8fCh4dT17fSkpW24uU2VudD0wXT0iU2VudCIsbltuLlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsbltuLlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIsbltuLkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLG5bbi5SZXNwb25zZT00XT0iUmVzcG9uc2UiLG5bbi5Vc2VyPTVdPSJVc2VyIix4dTt2YXIgbn0pKCksdWI9Y2xhc3N7Y29uc3RydWN0b3IodCxlPTIwMCxpPSJPSyIpe3RoaXMuaGVhZGVycz10LmhlYWRlcnN8fG5ldyBhcyx0aGlzLnN0YXR1cz12b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czplLHRoaXMuc3RhdHVzVGV4dD10LnN0YXR1c1RleHR8fGksdGhpcy51cmw9dC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fSxwYj1jbGFzcyBleHRlbmRzIHVie2NvbnN0cnVjdG9yKHQ9e30pe3N1cGVyKHQpLHRoaXMudHlwZT14dS5SZXNwb25zZUhlYWRlcn1jbG9uZSh0PXt9KXtyZXR1cm4gbmV3IHBiKHtoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX0samg9Y2xhc3MgZXh0ZW5kcyB1Yntjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLnR5cGU9eHUuUmVzcG9uc2UsdGhpcy5ib2R5PXZvaWQgMCE9PXQuYm9keT90LmJvZHk6bnVsbH1jbG9uZSh0PXt9KXtyZXR1cm4gbmV3IGpoKHtib2R5OnZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LGhlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fSxwZD1jbGFzcyBleHRlbmRzIHVie2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEsdGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke3QudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke3QudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke3Quc3RhdHVzfSAke3Quc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9dC5lcnJvcnx8bnVsbH19O2Z1bmN0aW9uIHhGKG4sdCl7cmV0dXJue2JvZHk6dCxoZWFkZXJzOm4uaGVhZGVycyxjb250ZXh0Om4uY29udGV4dCxvYnNlcnZlOm4ub2JzZXJ2ZSxwYXJhbXM6bi5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6bi5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOm4ud2l0aENyZWRlbnRpYWxzfX12YXIgZmY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmhhbmRsZXI9ZX1yZXF1ZXN0KGUsaSxyPXt9KXtsZXQgbztpZihlIGluc3RhbmNlb2YgcGYpbz1lO2Vsc2V7bGV0IGwsYztsPXIuaGVhZGVycyBpbnN0YW5jZW9mIGFzP3IuaGVhZGVyczpuZXcgYXMoci5oZWFkZXJzKSxyLnBhcmFtcyYmKGM9ci5wYXJhbXMgaW5zdGFuY2VvZiBiYz9yLnBhcmFtczpuZXcgYmMoe2Zyb21PYmplY3Q6ci5wYXJhbXN9KSksbz1uZXcgcGYoZSxpLHZvaWQgMCE9PXIuYm9keT9yLmJvZHk6bnVsbCx7aGVhZGVyczpsLGNvbnRleHQ6ci5jb250ZXh0LHBhcmFtczpjLHJlcG9ydFByb2dyZXNzOnIucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOnIucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOnIud2l0aENyZWRlbnRpYWxzfSl9bGV0IGE9cXQobykucGlwZShmdW5jdGlvbihuLHQpe3JldHVybiBfbih0KT9obihuLHQsMSk6aG4obiwxKX0obD0+dGhpcy5oYW5kbGVyLmhhbmRsZShsKSkpO2lmKGUgaW5zdGFuY2VvZiBwZnx8ImV2ZW50cyI9PT1yLm9ic2VydmUpcmV0dXJuIGE7bGV0IHM9YS5waXBlKFZlKGw9PmwgaW5zdGFuY2VvZiBqaCkpO3N3aXRjaChyLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goby5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBzLnBpcGUoVShsPT57aWYobnVsbCE9PWwuYm9keSYmIShsLmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIGwuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBzLnBpcGUoVShsPT57aWYobnVsbCE9PWwuYm9keSYmIShsLmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIGwuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBzLnBpcGUoVShsPT57aWYobnVsbCE9PWwuYm9keSYmInN0cmluZyIhPXR5cGVvZiBsLmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIGwuYm9keX0pKTtkZWZhdWx0OnJldHVybiBzLnBpcGUoVShsPT5sLmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gcztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtyLm9ic2VydmV9fWApfX1kZWxldGUoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUiLGUsaSl9Z2V0KGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixlLGkpfWhlYWQoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixlLGkpfWpzb25wKGUsaSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGUse3BhcmFtczoobmV3IGJjKS5hcHBlbmQoaSwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGUsaSl9cGF0Y2goZSxpLHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixlLHhGKHIsaSkpfXBvc3QoZSxpLHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGUseEYocixpKSl9cHV0KGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGUseEYocixpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oZGIpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBCNihuLHQpe3JldHVybiB0KG4pfWZ1bmN0aW9uIG5nZShuLHQpe3JldHVybihlLGkpPT50LmludGVyY2VwdChlLHtoYW5kbGU6cj0+bihyLGkpfSl9dmFyIHdGPW5ldyBpZSgiSFRUUF9JTlRFUkNFUFRPUlMiKSxTRj1uZXcgaWUoIkhUVFBfSU5URVJDRVBUT1JfRk5TIik7ZnVuY3Rpb24gcmdlKCl7bGV0IG49bnVsbDtyZXR1cm4odCxlKT0+KG51bGw9PT1uJiYobj0ocGkod0Yse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VSaWdodChuZ2UsQjYpKSxuKHQsZSkpfXZhciBGNj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZGJ7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuYmFja2VuZD1lLHRoaXMuaW5qZWN0b3I9aSx0aGlzLmNoYWluPW51bGx9aGFuZGxlKGUpe2lmKG51bGw9PT10aGlzLmNoYWluKXtsZXQgaT1BcnJheS5mcm9tKG5ldyBTZXQodGhpcy5pbmplY3Rvci5nZXQoU0YpKSk7dGhpcy5jaGFpbj1pLnJlZHVjZVJpZ2h0KChyLG8pPT5mdW5jdGlvbihuLHQsZSl7cmV0dXJuKGkscik9PmUucnVuSW5Db250ZXh0KCgpPT50KGksbz0+bihvLHIpKSl9KHIsbyx0aGlzLmluamVjdG9yKSxCNil9cmV0dXJuIHRoaXMuY2hhaW4oZSxpPT50aGlzLmJhY2tlbmQuaGFuZGxlKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhsUyksTyhsYykpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLG9nZT0vXlwpXF1cfScsP1xuLyxMNj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMueGhyRmFjdG9yeT1lfWhhbmRsZShlKXtpZigiSlNPTlAiPT09ZS5tZXRob2QpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gY29uc3RydWN0IEpzb25wIHJlcXVlc3Qgd2l0aG91dCBIdHRwQ2xpZW50SnNvbnBNb2R1bGUgaW5zdGFsbGVkLiIpO3JldHVybiBuZXcgZW4oaT0+e2xldCByPXRoaXMueGhyRmFjdG9yeS5idWlsZCgpO2lmKHIub3BlbihlLm1ldGhvZCxlLnVybFdpdGhQYXJhbXMpLGUud2l0aENyZWRlbnRpYWxzJiYoci53aXRoQ3JlZGVudGlhbHM9ITApLGUuaGVhZGVycy5mb3JFYWNoKChmLG0pPT5yLnNldFJlcXVlc3RIZWFkZXIoZixtLmpvaW4oIiwiKSkpLGUuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHxyLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFlLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7bGV0IGY9ZS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1mJiZyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZil9aWYoZS5yZXNwb25zZVR5cGUpe2xldCBmPWUucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7ci5yZXNwb25zZVR5cGU9Impzb24iIT09Zj9mOiJ0ZXh0In1sZXQgbz1lLnNlcmlhbGl6ZUJvZHkoKSxhPW51bGwscz0oKT0+e2lmKG51bGwhPT1hKXJldHVybiBhO2xldCBmPXIuc3RhdHVzVGV4dHx8Ik9LIixtPW5ldyBhcyhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx5PWZ1bmN0aW9uKG4pe3JldHVybiJyZXNwb25zZVVSTCJpbiBuJiZuLnJlc3BvbnNlVVJMP24ucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3Qobi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/bi5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KHIpfHxlLnVybDtyZXR1cm4gYT1uZXcgcGIoe2hlYWRlcnM6bSxzdGF0dXM6ci5zdGF0dXMsc3RhdHVzVGV4dDpmLHVybDp5fSksYX0sbD0oKT0+e2xldHtoZWFkZXJzOmYsc3RhdHVzOm0sc3RhdHVzVGV4dDp5LHVybDpNfT1zKCksdj1udWxsOzIwNCE9PW0mJih2PXR5cGVvZiByLnJlc3BvbnNlPiJ1Ij9yLnJlc3BvbnNlVGV4dDpyLnJlc3BvbnNlKSwwPT09bSYmKG09dj8yMDA6MCk7bGV0IHg9bT49MjAwJiZtPDMwMDtpZigianNvbiI9PT1lLnJlc3BvbnNlVHlwZSYmInN0cmluZyI9PXR5cGVvZiB2KXtsZXQgUj12O3Y9di5yZXBsYWNlKG9nZSwiIik7dHJ5e3Y9IiIhPT12P0pTT04ucGFyc2Uodik6bnVsbH1jYXRjaChBKXt2PVIseCYmKHg9ITEsdj17ZXJyb3I6QSx0ZXh0OnZ9KX19eD8oaS5uZXh0KG5ldyBqaCh7Ym9keTp2LGhlYWRlcnM6ZixzdGF0dXM6bSxzdGF0dXNUZXh0OnksdXJsOk18fHZvaWQgMH0pKSxpLmNvbXBsZXRlKCkpOmkuZXJyb3IobmV3IHBkKHtlcnJvcjp2LGhlYWRlcnM6ZixzdGF0dXM6bSxzdGF0dXNUZXh0OnksdXJsOk18fHZvaWQgMH0pKX0sYz1mPT57bGV0e3VybDptfT1zKCkseT1uZXcgcGQoe2Vycm9yOmYsc3RhdHVzOnIuc3RhdHVzfHwwLHN0YXR1c1RleHQ6ci5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciIsdXJsOm18fHZvaWQgMH0pO2kuZXJyb3IoeSl9LGQ9ITEsdT1mPT57ZHx8KGkubmV4dChzKCkpLGQ9ITApO2xldCBtPXt0eXBlOnh1LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmYubG9hZGVkfTtmLmxlbmd0aENvbXB1dGFibGUmJihtLnRvdGFsPWYudG90YWwpLCJ0ZXh0Ij09PWUucmVzcG9uc2VUeXBlJiYhIXIucmVzcG9uc2VUZXh0JiYobS5wYXJ0aWFsVGV4dD1yLnJlc3BvbnNlVGV4dCksaS5uZXh0KG0pfSxwPWY9PntsZXQgbT17dHlwZTp4dS5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6Zi5sb2FkZWR9O2YubGVuZ3RoQ29tcHV0YWJsZSYmKG0udG90YWw9Zi50b3RhbCksaS5uZXh0KG0pfTtyZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLGUucmVwb3J0UHJvZ3Jlc3MmJihyLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix1KSxudWxsIT09byYmci51cGxvYWQmJnIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5zZW5kKG8pLGkubmV4dCh7dHlwZTp4dS5TZW50fSksKCk9PntyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIsYyksZS5yZXBvcnRQcm9ncmVzcyYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHUpLG51bGwhPT1vJiZyLnVwbG9hZCYmci51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnJlYWR5U3RhdGUhPT1yLkRPTkUmJnIuYWJvcnQoKX19KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyh0ZikpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFY2PW5ldyBpZSgiWFNSRl9FTkFCTEVEIiksbGdlPW5ldyBpZSgiWFNSRl9DT09LSUVfTkFNRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYU1JGLVRPS0VOIn0pLGRnZT1uZXcgaWUoIlhTUkZfSEVBREVSX05BTUUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWC1YU1JGLVRPS0VOIn0pLGNTPWNsYXNze30sdWdlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZG9jPWUsdGhpcy5wbGF0Zm9ybT1pLHRoaXMuY29va2llTmFtZT1yLHRoaXMubGFzdENvb2tpZVN0cmluZz0iIix0aGlzLmxhc3RUb2tlbj1udWxsLHRoaXMucGFyc2VDb3VudD0wfWdldFRva2VuKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO2xldCBlPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGUhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1fdyhlLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWUpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGt0KSxPKGhjKSxPKGxnZSkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2Z1bmN0aW9uIHBnZShuLHQpe2xldCBlPW4udXJsLnRvTG93ZXJDYXNlKCk7aWYoIXBpKFY2KXx8IkdFVCI9PT1uLm1ldGhvZHx8IkhFQUQiPT09bi5tZXRob2R8fGUuc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxlLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpcmV0dXJuIHQobik7bGV0IGk9cGkoY1MpLmdldFRva2VuKCkscj1waShkZ2UpO3JldHVybiBudWxsIT1pJiYhbi5oZWFkZXJzLmhhcyhyKSYmKG49bi5jbG9uZSh7aGVhZGVyczpuLmhlYWRlcnMuc2V0KHIsaSl9KSksdChuKX12YXIgc1M9KCgpPT57cmV0dXJuKG49c1N8fChzUz17fSkpW24uSW50ZXJjZXB0b3JzPTBdPSJJbnRlcmNlcHRvcnMiLG5bbi5MZWdhY3lJbnRlcmNlcHRvcnM9MV09IkxlZ2FjeUludGVyY2VwdG9ycyIsbltuLkN1c3RvbVhzcmZDb25maWd1cmF0aW9uPTJdPSJDdXN0b21Yc3JmQ29uZmlndXJhdGlvbiIsbltuLk5vWHNyZlByb3RlY3Rpb249M109Ik5vWHNyZlByb3RlY3Rpb24iLG5bbi5Kc29ucFN1cHBvcnQ9NF09Ikpzb25wU3VwcG9ydCIsbltuLlJlcXVlc3RzTWFkZVZpYVBhcmVudD01XT0iUmVxdWVzdHNNYWRlVmlhUGFyZW50IixzUzt2YXIgbn0pKCk7ZnVuY3Rpb24gbWdlKC4uLm4pe2xldCB0PVtmZixMNixGNix7cHJvdmlkZTpkYix1c2VFeGlzdGluZzpGNn0se3Byb3ZpZGU6bFMsdXNlRXhpc3Rpbmc6TDZ9LHtwcm92aWRlOlNGLHVzZVZhbHVlOnBnZSxtdWx0aTohMH0se3Byb3ZpZGU6VjYsdXNlVmFsdWU6ITB9LHtwcm92aWRlOmNTLHVzZUNsYXNzOnVnZX1dO2ZvcihsZXQgZSBvZiBuKXQucHVzaCguLi5lLlx1MDI3NXByb3ZpZGVycyk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybnsiXHUwMjc1cHJvdmlkZXJzIjpufX0odCl9dmFyIE42PW5ldyBpZSgiTEVHQUNZX0lOVEVSQ0VQVE9SX0ZOIiksSDY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbbWdlKHsiXHUwMjc1a2luZCI6c1MuTGVnYWN5SW50ZXJjZXB0b3JzLCJcdTAyNzVwcm92aWRlcnMiOlt7cHJvdmlkZTpONix1c2VGYWN0b3J5OnJnZX0se3Byb3ZpZGU6U0YsdXNlRXhpc3Rpbmc6TjYsbXVsdGk6ITB9XX0pXX0pLG59KSgpLGRTPSJmZWF0dXJlIixHaD1NcihkUyksQ3U9cShHaCxuPT5uLmlzRmVhdHVyZUZsYWdzTG9hZGVkKSxGYT1xKEdoLG49Pih7Li4ubi5kZWZhdWx0RmxhZ3MsLi4ubi5mbGFnT3ZlcnJpZGVzfSkpLFU2PXEoR2gsbj0+bi5kZWZhdWx0RmxhZ3MpLGZiPXEoR2gsbj0+bi5mbGFnT3ZlcnJpZGVzfHx7fSksbWY9cShHaCxuPT5uLm1ldGFkYXRhKSxXaD1xKEdoLG49PntsZXQgdD17fTtmb3IobGV0IGUgaW4gbi5mbGFnT3ZlcnJpZGVzKXtsZXQgaT1uLm1ldGFkYXRhW2VdO2kmJmkucXVlcnlQYXJhbU92ZXJyaWRlJiZpLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuJiYodFtlXT1uLmZsYWdPdmVycmlkZXNbZV0pfXJldHVybiB0fSksajY9cShGYSxuPT5uLmlzQXV0b0RhcmtNb2RlQWxsb3dlZCksRWw9cShGYSxuPT5udWxsIT09bi5lbmFibGVEYXJrTW9kZU92ZXJyaWRlP24uZW5hYmxlRGFya01vZGVPdmVycmlkZTpuLmRlZmF1bHRFbmFibGVEYXJrTW9kZSksdVM9cShGYSxuPT5uLmVuYWJsZURhcmtNb2RlT3ZlcnJpZGUpLEc2PXEoRmEsbj0+bi5lbmFibGVkRXhwZXJpbWVudGFsUGx1Z2lucyksVzY9cShGYSxuPT5uLmluQ29sYWIpLHBTPXEoRmEsbj0+bi5tZXRyaWNzSW1hZ2VTdXBwb3J0RW5hYmxlZCksRUY9cShGYSxuPT5uLmZvcmNlU3ZnKSxxNj1xKEZhLG49PnZvaWQgMCE9PW4uc2hvd0ZsYWdzKSxmUz1xKEZhLG49Pm4uZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbiksaGY9cShGYSxuPT5uLmVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXMpO2Z1bmN0aW9uIF9nZShuLHQpe2lmKCFuKXJldHVybjtsZXQgZT1uIGluc3RhbmNlb2YgRm9ybURhdGE/ZnVuY3Rpb24obil7bGV0IHQ9e307Zm9yKGxldFtlLGldb2Ygbi5lbnRyaWVzKCkpdFtlXT1pO3JldHVybiB0fShuKTpuO3JldHVybiB0P3tbdF06SlNPTi5zdHJpbmdpZnkoZSl9OmV9dmFyIHlnZT0iWC1YU1JGLVByb3RlY3RlZCI7ZnVuY3Rpb24gVEYobil7bGV0IHQ9bi5oZWFkZXJzfHxuZXcgYXM7cmV0dXJuIHQ9dC5hcHBlbmQoeWdlLCIxIiksey4uLm4saGVhZGVyczp0fX12YXIgdmM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hcHBSb290UHJvdmlkZXI9ZSx0aGlzLmh0dHA9aSx0aGlzLnN0b3JlPXJ9cmVzb2x2ZUFwcFJvb3QoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSk6ZX1nZXQoZSxpPXt9KXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLnJlc29sdmVBcHBSb290KGUpLGkpfXBvc3QoZSxpLHI9e30sbyl7cmV0dXJuIHI9VEYociksdGhpcy5zdG9yZS5zZWxlY3QoQ3UpLnBpcGUoVmUoYT0+Qm9vbGVhbihhKSksenQoMSksWXQodGhpcy5zdG9yZS5zZWxlY3QoVzYpKSxobigoWyxhXSk9PntsZXQgcz10aGlzLnJlc29sdmVBcHBSb290KGUpO3JldHVybiBhP3RoaXMuaHR0cC5nZXQocyx7aGVhZGVyczpyLmhlYWRlcnM/P3t9LHBhcmFtczpfZ2UoaSxvKX0pOnRoaXMuaHR0cC5wb3N0KHMsaSxyKX0pKX1wdXQoZSxpLHI9e30pe3JldHVybiB0aGlzLmh0dHAucHV0KHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksaSxURihyKSl9ZGVsZXRlKGUsaT17fSl7cmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodGhpcy5yZXNvbHZlQXBwUm9vdChlKSxURihpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8odWYpLE8oZmYpLE8oa2UpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxxaD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7cHJvdmlkZXJzOlt2Y10saW1wb3J0czpbSDYsQmhdfSksbn0pKCksVnM9KCgpPT57cmV0dXJuKG49VnN8fChWcz17fSkpLlVOS05PV049IlVOS05PV04iLG4uTk9UX0ZPVU5EPSJOT1RfRk9VTkQiLG4uUEVSTUlTU0lPTl9ERU5JRUQ9IlBFUk1JU1NJT05fREVOSUVEIixWczt2YXIgbn0pKCksWTY9bmV3IGllKCJUZW5zb3JCb2FyZCBicmFuZCBuYW1lIiksb289KCgpPT57cmV0dXJuKG49b298fChvbz17fSkpLlNURVA9InN0ZXAiLG4uV0FMTF9USU1FPSJ3YWxsX3RpbWUiLG4uUkVMQVRJVkU9InJlbGF0aXZlIixvbzt2YXIgbn0pKCksU3I9KCgpPT57cmV0dXJuKG49U3J8fChTcj17fSkpLk9GRlNFVD0ib2Zmc2V0IixuLk9WRVJMQVk9Im92ZXJsYXkiLFNyO3ZhciBufSkoKTtmdW5jdGlvbiBYNihuKXtsZXQgdD1Wcy5VTktOT1dOO3JldHVybiBuIGluc3RhbmNlb2YgcGQmJig0MDQ9PT1uLnN0YXR1cyYmKHQ9VnMuTk9UX0ZPVU5EKSw0MDM9PT1uLnN0YXR1cyYmKHQ9VnMuUEVSTUlTU0lPTl9ERU5JRUQpKSxjbChuZXcgbWIodCkpfXZhciBtYj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmZhaWx1cmVDb2RlPXR9fSxoUz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMudGZCYWNrZW5kPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWJhY2tlbmQiKS50Zl9iYWNrZW5kfWZldGNoUGx1Z2luc0xpc3RpbmcoZSl7bGV0IGk9ZnVuY3Rpb24obil7aWYoIW4ubGVuZ3RoKXJldHVybiBudWxsO2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldCBlIG9mIG4pdC5hcHBlbmQoImV4cGVyaW1lbnRhbFBsdWdpbiIsZSk7cmV0dXJuIHR9KGUpLHI9aT9gZGF0YS9wbHVnaW5zX2xpc3Rpbmc/JHtpLnRvU3RyaW5nKCl9YDoiZGF0YS9wbHVnaW5zX2xpc3RpbmciO3JldHVybiB0aGlzLmh0dHAuZ2V0KHIpLnBpcGUoZm8oWDYpKX1mZXRjaEVudmlyb25tZW50KCl7cmV0dXJuIHBvKFt0aGlzLmh0dHAuZ2V0KCJkYXRhL2Vudmlyb25tZW50Iiksbm8odGhpcy50ZkJhY2tlbmQuZW52aXJvbm1lbnRTdG9yZS5yZWZyZXNoKCkpXSkucGlwZShVKChbcl0pPT5yKSxmbyhYNikpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKHZjKSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksUTY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbaFNdLGltcG9ydHM6W3FoXX0pLG59KSgpLERlPSgoKT0+e3JldHVybihuPURlfHwoRGU9e30pKVtuLk5PVF9MT0FERUQ9MF09Ik5PVF9MT0FERUQiLG5bbi5MT0FERUQ9MV09IkxPQURFRCIsbltuLkxPQURJTkc9Ml09IkxPQURJTkciLG5bbi5GQUlMRUQ9M109IkZBSUxFRCIsRGU7dmFyIG59KSgpLHhjPXllKCJbQ29yZV0gUGx1Z2luIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxnUz15ZSgiW0NvcmVdIFBsdWdpbiBVcmwgSGFzaCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWjY9eWUoIltDb3JlXSBMb2FkZWQiKSxIcz15ZSgiW0NvcmVdIFVzZXIgVHJpZ2dlcmVkIFJlbG9hZCIpLHNzPXllKCJbQ29yZV0gQXV0byBSZWxvYWQiKSxfUz15ZSgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggUmVxdWVzdGVkIiksZ2Y9eWUoIltDb3JlXSBQbHVnaW5MaXN0aW5nIEZldGNoIFN1Y2Nlc3NmdWwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxoYj15ZSgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkseVM9eWUoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIFJlcXVlc3RlZCIpLGJTPXllKCJbQ29yZV0gUG9seW1lciBDb21wb25lbnQgUnVucyBGZXRjaCBTdWNjZXNzZnVsIiksdlM9eWUoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIEZhaWxlZCIpLHhTPXllKCJbQ29yZV0gRW52aXJvbm1lbnQgRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEs2PXllKCJbQ29yZV0gUnVuIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSjY9eWUoIltDb3JlXSBSdW4gRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFloPXllKCJbQ29yZV0gU2lkZSBCYXIgV2lkdGggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLENTPXllKCJbQ29yZV0gUnVucyBUYWJsZSBGdWxsIFNjcmVlbiBUb2dnbGVkIik7ZnVuY3Rpb24gX2Yobix0LGUpe2xldCBpPU9iamVjdC5rZXlzKG4pLHI9ey4uLm4sLi4udCxwcml2YXRlTmFtZXNwYWNlZFN0YXRlOnt9fTtyZXR1cm57aW5pdGlhbFN0YXRlOnIscmVkdWNlcnM6X3IocixFZShMcywocyx7YmVmb3JlOmwsYWZ0ZXI6YyxiZWZvcmVOYW1lc3BhY2VJZDpkLGFmdGVyTmFtZXNwYWNlSWQ6dX0pPT57bGV0IHA9cztyZXR1cm4gZCE9PXUmJihwPWZ1bmN0aW9uKHMsbCxjKXtsZXQgZD17Li4ucy5wcml2YXRlTmFtZXNwYWNlZFN0YXRlfTtpZihsKXtsZXQgcD17fTtmb3IobGV0IGYgb2YgaSlwW2ZdPXNbZl07ZD17Li4uZCxbbF06cH19bGV0IHU9e307cmV0dXJuIHMucHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZT8uW2NdP3U9cy5wcml2YXRlTmFtZXNwYWNlZFN0YXRlW2NdOmwmJih1PW4pLHsuLi5zLC4uLnUscHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZTpkfX0ocyxkLHUpKSxlJiYocD1lKHAsbCxjKSkscH0pKX19ZnVuY3Rpb24geWYoLi4ubil7cmV0dXJuKHQsZSk9PntsZXQgaT10O2ZvcihsZXQgciBvZiBuKWk9cihpLGUpO3JldHVybiBpfX12YXIgZ2I9e2FjdGl2ZVBsdWdpbjpudWxsLHBsdWdpbnM6e30sY29yZURhdGFMb2FkU3RhdGU6e3N0YXRlOkRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBsdWdpbnNMaXN0TG9hZGVkOntzdGF0ZTpEZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsLGZhaWx1cmVDb2RlOm51bGx9LGVudmlyb25tZW50OntkYXRhX2xvY2F0aW9uOiIiLHdpbmRvd190aXRsZToiIn0scG9seW1lclJ1bnNMb2FkU3RhdGU6e3N0YXRlOkRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBvbHltZXJJbnRlcm9wUnVuczpbXSxwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0LHNpZGVCYXJXaWR0aEluUGVyY2VudDoyMCxydW5zVGFibGVGdWxsU2NyZWVuOiExfSx4Z2U9X3IoZ2IsRWUoeGMsZ1MsKG4se3BsdWdpbjp0fSk9Pih7Li4ubixhY3RpdmVQbHVnaW46dH0pKSxFZShfUyxuPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6RGUuTE9BRElOR30scGx1Z2luc0xpc3RMb2FkZWQ6ey4uLm4ucGx1Z2luc0xpc3RMb2FkZWQsc3RhdGU6RGUuTE9BRElOR319KSksRWUoaGIsKG4se2ZhaWx1cmVDb2RlOnR9KT0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOkRlLkZBSUxFRH0scGx1Z2luc0xpc3RMb2FkZWQ6ey4uLm4ucGx1Z2luc0xpc3RMb2FkZWQsc3RhdGU6RGUuRkFJTEVELGZhaWx1cmVDb2RlOnR9fSkpLEVlKGdmLChuLHtwbHVnaW5zOnR9KT0+e2xldCBlPU9iamVjdC5rZXlzKHQpLmZpbmQoYT0+dFthXS5lbmFibGVkKXx8bnVsbCxpPW4uYWN0aXZlUGx1Z2lufHxlLHI9RGF0ZS5ub3coKSxvPW4uY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIG4ucG9seW1lclJ1bnNMb2FkU3RhdGUuc3RhdGU9PT1EZS5MT0FERUQmJihvPXtzdGF0ZTpEZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnJ9KSx7Li4ubixhY3RpdmVQbHVnaW46aSxjb3JlRGF0YUxvYWRTdGF0ZTpvLHBsdWdpbnM6dCxwbHVnaW5zTGlzdExvYWRlZDp7c3RhdGU6RGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpyLGZhaWx1cmVDb2RlOm51bGx9fX0pLEVlKHlTLG49Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpEZS5MT0FESU5HfSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7Li4ubi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSxzdGF0ZTpEZS5MT0FESU5HfX0pKSxFZShiUyxuPT57bGV0IHQ9RGF0ZS5ub3coKSxlPW4uY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIG4ucGx1Z2luc0xpc3RMb2FkZWQuc3RhdGU9PT1EZS5MT0FERUQmJihlPXtzdGF0ZTpEZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnR9KSx7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTplLHBvbHltZXJSdW5zTG9hZFN0YXRlOnsuLi5uLnBvbHltZXJSdW5zTG9hZFN0YXRlLHN0YXRlOkRlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6dH19fSksRWUodlMsbj0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOkRlLkZBSUxFRH0scG9seW1lclJ1bnNMb2FkU3RhdGU6ey4uLm4ucG9seW1lclJ1bnNMb2FkU3RhdGUsc3RhdGU6RGUuRkFJTEVEfX0pKSxFZSh4Uywobix7ZW52aXJvbm1lbnQ6dH0pPT4oey4uLm4sZW52aXJvbm1lbnQ6dH0pKSxFZShKNiwobix7cnVuczp0fSk9Pih7Li4ubixwb2x5bWVySW50ZXJvcFJ1bnM6dH0pKSxFZShLNiwobix7bmV4dFNlbGVjdGlvbjp0fSk9Pih7Li4ubixwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0KHQpfSkpLEVlKFloLChuLHt3aWR0aEluUGVyY2VudDp0fSk9Pih7Li4ubixzaWRlQmFyV2lkdGhJblBlcmNlbnQ6TWF0aC5taW4oTWF0aC5tYXgoMCx0KSwxMDApfSkpLEVlKFNsLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57bGV0IGU9ey4uLm59LGk9dC5zaWRlQmFyV2lkdGhJblBlcmNlbnQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpJiZpPj0wJiZpPD0xMDAmJihlLnNpZGVCYXJXaWR0aEluUGVyY2VudD1pKSxlfSksRWUoQ1Msbj0+KHsuLi5uLHJ1bnNUYWJsZUZ1bGxTY3JlZW46IW4ucnVuc1RhYmxlRnVsbFNjcmVlbn0pKSkse3JlZHVjZXJzOkNnZX09X2YoZ2Ise30pO2Z1bmN0aW9uICQ2KG4sdCl7cmV0dXJuIHlmKHhnZSxDZ2UpKG4sdCl9dmFyIGZkPU1yKCJjb3JlIiksU1M9cShmZCxuPT5uLnBsdWdpbnNMaXN0TG9hZGVkKSxlVz1xKGZkLG49Pm4ucG9seW1lclJ1bnNMb2FkU3RhdGUpLHRXPXEoZmQsbj0+bi5jb3JlRGF0YUxvYWRTdGF0ZS5zdGF0ZSksWGg9cShmZCxuPT5uLmNvcmVEYXRhTG9hZFN0YXRlLmxhc3RMb2FkZWRUaW1lSW5NcykscW89cShmZCxuPT5uLmFjdGl2ZVBsdWdpbiksUWg9cShmZCxuPT5uLnBsdWdpbnMpLEVTPXEoZmQsbj0+bi5lbnZpcm9ubWVudCksVFM9cShmZCxuPT5uLnNpZGVCYXJXaWR0aEluUGVyY2VudCksWmg9cShmZCxuPT5uLnJ1bnNUYWJsZUZ1bGxTY3JlZW4pLG5XPW5ldyBTZXQoW2tuLkNPTVBBUkVfRVhQRVJJTUVOVCxrbi5FWFBFUklNRU5ULGtuLk5PVF9TRVRdKSxpVz0oKCk9PntjbGFzcyBue3JlZnJlc2hQb2x5bWVyUnVucygpe3JldHVybiBubyh0aGlzLnRmQmFja2VuZC5yZWYucnVuc1N0b3JlLnJlZnJlc2goKSl9ZmV0Y2hFbnZpcm9ubWVudCgpe3JldHVybiB0aGlzLndlYmFwcERhdGFTb3VyY2UuZmV0Y2hFbnZpcm9ubWVudCgpLnBpcGUoVnQoZT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goeFMoe2Vudmlyb25tZW50OmV9KSl9KSl9Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy53ZWJhcHBEYXRhU291cmNlPXIsdGhpcy50ZkJhY2tlbmQ9e3JlZjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1iYWNrZW5kIikudGZfYmFja2VuZH0sdGhpcy5vbkRhc2hib2FyZExvYWQkPWNuKHRoaXMuYWN0aW9ucyQucGlwZSh3aShaNixMcyksWXQodGhpcy5zdG9yZS5zZWxlY3QoZmEpKSx1aSgoWyxvXSxbLGFdKT0+TG8obyxhKSkpLHRoaXMuYWN0aW9ucyQucGlwZSh3aShzcyxIcykpKS5waXBlKFl0KHRoaXMuc3RvcmUuc2VsZWN0KE5zKSksVmUoKFssb10pPT5uVy5oYXMobykpLGV1KDEsdm9pZCAwLHtsZWFkaW5nOiEwfSkpLHRoaXMuZmV0Y2hXZWJBcHBEYXRhJD1PcigoKT0+e2xldCBvPXRoaXMub25EYXNoYm9hcmRMb2FkJC5waXBlKFl0KHRoaXMuc3RvcmUuc2VsZWN0KFNTKSx0aGlzLnN0b3JlLnNlbGVjdChHNikpLFZlKChbLHtzdGF0ZTpzfV0pPT5zIT09RGUuTE9BRElORyksVnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goX1MoKSkpLGhuKChbLCxzXSk9PmZ1bmN0aW9uKC4uLm4pe2xldCB0PXRjKG4pLGU9QkMobik7cmV0dXJuIGUubGVuZ3RoP25ldyBlbihpPT57bGV0IHI9ZS5tYXAoKCk9PltdKSxvPWUubWFwKCgpPT4hMSk7aS5hZGQoKCk9PntyPW89bnVsbH0pO2ZvcihsZXQgYT0wOyFpLmNsb3NlZCYmYTxlLmxlbmd0aDthKyspb2koZVthXSkuc3Vic2NyaWJlKEh0KGkscz0+e2lmKHJbYV0ucHVzaChzKSxyLmV2ZXJ5KGw9PmwubGVuZ3RoKSl7bGV0IGw9ci5tYXAoYz0+Yy5zaGlmdCgpKTtpLm5leHQodD90KC4uLmwpOmwpLHIuc29tZSgoYyxkKT0+IWMubGVuZ3RoJiZvW2RdKSYmaS5jb21wbGV0ZSgpfX0sKCk9PntvW2FdPSEwLCFyW2FdLmxlbmd0aCYmaS5jb21wbGV0ZSgpfSkpO3JldHVybigpPT57cj1vPW51bGx9fSk6dG99KHRoaXMud2ViYXBwRGF0YVNvdXJjZS5mZXRjaFBsdWdpbnNMaXN0aW5nKHMpLHRoaXMuZmV0Y2hFbnZpcm9ubWVudCgpKS5waXBlKFUoKFtsXSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGdmKHtwbHVnaW5zOmx9KSl9KSxmbyhsPT4odGhpcy5zdG9yZS5kaXNwYXRjaChoYihsIGluc3RhbmNlb2YgbWI/e2ZhaWx1cmVDb2RlOmwuZmFpbHVyZUNvZGV9OntmYWlsdXJlQ29kZTpWcy5VTktOT1dOfSkpLHRvKSkpKSk7cmV0dXJuIGNuKG8sdGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoVSgoWyxzXSk9PnMpLHlpKHM9PnMhPT1rbi5DT01QQVJFX0VYUEVSSU1FTlQ/cXQoW10pOnRoaXMuc3RvcmUuc2VsZWN0KEJzKS5waXBlKHVpKChsLGMpPT57bGV0IGQ9T2JqZWN0LmVudHJpZXMobCksdT1uZXcgTWFwKE9iamVjdC5lbnRyaWVzKGMpKTtpZihkLmxlbmd0aCE9PXUuc2l6ZSlyZXR1cm4hMTtmb3IobGV0W3AsZl1vZiBkKWlmKCF1LmdldChwKXx8dS5nZXQocCkuYWxpYXNUZXh0IT09Zi5hbGlhc1RleHR8fHUuZ2V0KHApLmFsaWFzTnVtYmVyIT09Zi5hbGlhc051bWJlcilyZXR1cm4hMTtyZXR1cm4hMH0pLHhzKDApLGV1KDUwMCx2b2lkIDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KSkpLFl0KHRoaXMuc3RvcmUuc2VsZWN0KE5zKSx0aGlzLnN0b3JlLnNlbGVjdChlVykpLFZlKChbLHMsbF0pPT5uVy5oYXMocykmJmwuc3RhdGUhPT1EZS5MT0FESU5HKSxWdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goeVMoKSl9KSx5aSgoKT0+dGhpcy5yZWZyZXNoUG9seW1lclJ1bnMoKSksVnQoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGJTKCkpfSksZm8oKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKHZTKCkpLHRvKSkpKX0se2Rpc3BhdGNoOiExfSksdGhpcy5kaXNwYXRjaENoYW5nZVBsdWdpbiQ9T3IoKCk9PmNuKHRoaXMub25EYXNoYm9hcmRMb2FkJCx0aGlzLmFjdGlvbnMkLnBpcGUod2koZ2YpKSkucGlwZShZdCh0aGlzLnN0b3JlLnNlbGVjdChxbykpLFUoKFssb10pPT5vKSx1aSgpLFZlKG89Pm51bGwhPT1vKSx6dCgxKSxWdChvPT57dGhpcy5zdG9yZS5kaXNwYXRjaCh4Yyh7cGx1Z2luOm99KSl9KSkse2Rpc3BhdGNoOiExfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oV28pLE8oa2UpLE8oaFMpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxERj1uZXcgaWUoIkNvcmUgRmVhdHVyZSBDb25maWciKTtmdW5jdGlvbiByVyhuKXtyZXR1cm57aW5pdGlhbFN0YXRlOnsuLi5nYixhY3RpdmVQbHVnaW46bi5nZXRQbHVnaW5JZCgpfHxudWxsfX19ZnVuY3Rpb24gU2dlKCl7cmV0dXJuIHEoVFMsbj0+KHtzaWRlQmFyV2lkdGhJblBlcmNlbnQ6bn0pKX12YXIgenM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6REYsZGVwczpbdnVdLHVzZUZhY3Rvcnk6cld9XSxpbXBvcnRzOlt3by5mb3JGZWF0dXJlKFtpV10pLHdyLmZvckZlYXR1cmUoImNvcmUiLCQ2LERGKSxRNixlci5kZWZpbmVHbG9iYWxTZXR0aW5nKFNnZSldfSksbn0pKCksb1c9bmV3IGllKCJbQWxlcnRdIEFjdGlvbi1Uby1BbGVydCBQcm92aWRlciIpLENjPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5wcm92aWRlcnM9bmV3IE1hcDtmb3IobGV0IGkgb2YgZXx8W10pZm9yKGxldCByIG9mIGkpe2lmKHRoaXMucHJvdmlkZXJzLmhhcyhyLmFjdGlvbkNyZWF0b3IudHlwZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCIke3IuYWN0aW9uQ3JlYXRvci50eXBlfSIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBhbGVydHMuIE11bHRpcGxlIGFsZXJ0cyBmb3IgdGhlIHNhbWUgYWN0aW9uIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChyLmFjdGlvbkNyZWF0b3IudHlwZSxyLmFsZXJ0RnJvbUFjdGlvbil9fWdldEFsZXJ0RnJvbUFjdGlvbihlKXtsZXQgaT10aGlzLnByb3ZpZGVycy5nZXQoZS50eXBlKTtyZXR1cm4gaT9pKGUpOm51bGx9c3RhdGljIHJlZ2lzdGVyQWxlcnRBY3Rpb25zKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6b1csbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKG9XLDgpKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7fSksbn0pKCksRFM9eWUoIltSdW5zXSBGZXRjaCBSdW5zIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE11PXllKCJbUnVuc10gRmV0Y2ggUnVucyBTdWNjZWVkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxLaD15ZSgiW1J1bnNdIEZldGNoIFJ1bnMgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksX2I9eWUoIltSdW5zXSBSdW4gU2VsZWN0aW9uIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJUz15ZSgiW1J1bnNdIFNpbmdsZSBSdW4gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx5Yj15ZSgiW1J1bnNdIFJ1biBQYWdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQVM9eWUoIltSdW5zXSBSdW4gU2VsZWN0b3IgUGFnaW5hdGlvbiBPcHRpb24gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFJTPXllKCJbUnVuc10gUnVuIFNlbGVjdG9yIFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGJiPXllKCJbUnVuc10gUnVuIFNlbGVjdG9yIFJlZ2V4IEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksa1M9eWUoIltSdW5zXSBSdW4gQ29sb3IgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBTPXllKCJbUnVuc10gUnVuIFRhYmxlIFNob3duIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSmg9eWUoIltSdW5zXSBSdW4gR3JvdXAgQnkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE9TPXllKCJbUnVuc10gUnVucyBUYWJsZSBIZWFkZXIgQWRkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxGUz15ZSgiW1J1bnNdIFJ1bnMgVGFibGUgSGVhZGVyIFJlbW92ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxMUz15ZSgiW1J1bnNdIFJ1bnMgVGFibGUgSGVhZGVyIE9yZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxOUz15ZSgiW1J1bnNdIFJ1bnMgVGFibGUgU29ydGluZyBJbmZvIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3dT0oKCk9PntyZXR1cm4obj13dXx8KHd1PXt9KSkuU1RBVFVTX1VOS05PV049IlNUQVRVU19VTktOT1dOIixuLlNUQVRVU19TVUNDRVNTPSJTVEFUVVNfU1VDQ0VTUyIsbi5TVEFUVVNfRkFJTFVSRT0iU1RBVFVTX0ZBSUxVUkUiLG4uU1RBVFVTX1JVTk5JTkc9IlNUQVRVU19SVU5OSU5HIix3dTt2YXIgbn0pKCksVW49KCgpPT57cmV0dXJuKG49VW58fChVbj17fSkpW24uRElTQ1JFVEU9MF09IkRJU0NSRVRFIixuW24uSU5URVJWQUw9MV09IklOVEVSVkFMIixVbjt2YXIgbn0pKCksQlM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksYmY9e307ekEoYmYse2hwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQ6KCk9PlJGLGhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQ6KCk9PmtGLGhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkOigpPT5QRn0pO3ZhciBSRj15ZSgiW0hwYXJhbXNdIEhwYXJhbXMgRGlzY3JldGUgSHBhcmFtIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksa0Y9eWUoIltIcGFyYW1zXSBIcGFyYW1zIEludGVydmFsIEhwYXJhbSBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBGPXllKCJbSHBhcmFtc10gSHBhcmFtcyBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiB2ZihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWy4uLm5dLnNvcnQoKSl9ZnVuY3Rpb24gdmIobil7bGV0IHQ9bmV3IE1hcCxlPW5ldyBNYXAsaT1uZXcgTWFwO2ZvcihsZXQgciBvZiBuKWZvcihsZXRbbyxhXW9mIHIpaWYoYS50eXBlPT09VW4uRElTQ1JFVEUpe2xldHtwb3NzaWJsZVZhbHVlczpzLHZhbHVlczpsfT1lLmdldChvKXx8e3Bvc3NpYmxlVmFsdWVzOm5ldyBTZXQsdmFsdWVzOm5ldyBTZXR9O2ZvcihsZXQgYyBvZiBhLmZpbHRlclZhbHVlcylsLmFkZChjKTtmb3IobGV0IGMgb2YgYS5wb3NzaWJsZVZhbHVlcylzLmFkZChjKTtlLnNldChvLHtwb3NzaWJsZVZhbHVlczpzLHZhbHVlczpsfSl9ZWxzZXtsZXQgcz1pLmdldChvKTtpLnNldChvLHtmaWx0ZXJMb3dlclZhbHVlOk1hdGgubWluKGEuZmlsdGVyTG93ZXJWYWx1ZSxzPy5maWx0ZXJMb3dlclZhbHVlPz8xLzApLGZpbHRlclVwcGVyVmFsdWU6TWF0aC5tYXgoYS5maWx0ZXJVcHBlclZhbHVlLHM/LmZpbHRlclVwcGVyVmFsdWU/Py0xLzApLG1pblZhbHVlOk1hdGgubWluKGEubWluVmFsdWUscz8ubWluVmFsdWU/PzEvMCksbWF4VmFsdWU6TWF0aC5tYXgoYS5tYXhWYWx1ZSxzPy5tYXhWYWx1ZT8/LTEvMCl9KX1mb3IobGV0W3Ise3ZhbHVlczpvLHBvc3NpYmxlVmFsdWVzOmF9XW9mIGUpdC5zZXQocix7dHlwZTpVbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5hXSxmaWx0ZXJWYWx1ZXM6Wy4uLm9dfSk7Zm9yKGxldFtyLHttaW5WYWx1ZTpvLG1heFZhbHVlOmEsZmlsdGVyTG93ZXJWYWx1ZTpzLGZpbHRlclVwcGVyVmFsdWU6bH1db2YgaSl7aWYodC5oYXMocikpe2xldCBjPXQuZ2V0KHIpO2lmKGMudHlwZT09PVVuLkRJU0NSRVRFJiZjLnBvc3NpYmxlVmFsdWVzLnNvbWUoZD0+ZCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENhbm5vdCBjb21iaW5lIGhwYXJhbSwgJHtyfSwgYXMgaXQgaXMgb2YgbWl4ZWQgdHlwZXMuYCl9dC5zZXQocix7dHlwZTpVbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOm8sbWF4VmFsdWU6YSxmaWx0ZXJMb3dlclZhbHVlOnMsZmlsdGVyVXBwZXJWYWx1ZTpsfSl9cmV0dXJuIHR9ZnVuY3Rpb24gVlMobil7bGV0IHQ9bmV3IE1hcDtmb3IobGV0IGUgb2Ygbilmb3IobGV0W2kscl1vZiBlKXtsZXQgbz10LmdldChpKTt0LnNldChpLHt0eXBlOlVuLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsLi4ubyxtaW5WYWx1ZTpNYXRoLm1pbihyLm1pblZhbHVlLG8/Lm1pblZhbHVlPz8xLzApLG1heFZhbHVlOk1hdGgubWF4KHIubWF4VmFsdWUsbz8ubWF4VmFsdWU/Py0xLzApLGZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4oci5maWx0ZXJMb3dlclZhbHVlLG8/LmZpbHRlckxvd2VyVmFsdWU/PzEvMCksZmlsdGVyVXBwZXJWYWx1ZTpNYXRoLm1heChyLmZpbHRlclVwcGVyVmFsdWUsbz8uZmlsdGVyVXBwZXJWYWx1ZT8/LTEvMCl9KX1yZXR1cm4gdH12YXIgUmdlPV9yKHtzcGVjczp7fSxmaWx0ZXJzOnt9fSxFZShSRiwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsaHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309dCxhPXZmKGUpLHM9bi5maWx0ZXJzW2FdPz97aHBhcmFtczpuZXcgTWFwfSxsPXMuaHBhcmFtcy5nZXQoaSk7aWYobCYmbC50eXBlIT09VW4uRElTQ1JFVEUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBkaXNjcmV0ZSBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArVW5bbC50eXBlXSk7bGV0IGM9dmIoZS5maWx0ZXIoZj0+Qm9vbGVhbihuLnNwZWNzW2ZdKSkubWFwKGY9Pm4uc3BlY3NbZl0uaHBhcmFtLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFjKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYW0sICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke2Uuam9pbigiLCAiKX1gKTtpZihjLnR5cGUhPT1Vbi5ESVNDUkVURSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgJHtpfSB3aGVuIGRlZmF1bHQgZmlsdGVyIGlzIG5vdCBvZiBkaXNjcmV0ZSB0eXBlLmApO2xldCBkPW5ldyBTZXQoYy5wb3NzaWJsZVZhbHVlcyksdT1bLi4ucl0uZmlsdGVyKGY9PiFkLmhhcyhmKSk7aWYodS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBOZXcgZmlsdGVyIGZvciAke2l9IGhhcyBtb3JlIHRoYW4gb25lIHZhbHVlIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIHNwZWMuIEJhZCB2YWx1ZXM6ICR7dS5qb2luKCIsICIpfWApO2xldCBwPW5ldyBNYXAocy5ocGFyYW1zKTtyZXR1cm4gcC5zZXQoaSx7Li4ubCx0eXBlOlVuLkRJU0NSRVRFLGluY2x1ZGVVbmRlZmluZWQ6byxwb3NzaWJsZVZhbHVlczpbLi4uZF0sZmlsdGVyVmFsdWVzOnJ9KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW2FdOnsuLi5zLGhwYXJhbXM6cH19fX0pLEVlKGtGLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZHM6ZSxocGFyYW1OYW1lOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOmF9PXQscz12ZihlKSxsPW4uZmlsdGVyc1tzXT8/e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGM9bC5ocGFyYW1zLmdldChpKTtpZihjJiZjLnR5cGUhPT1Vbi5JTlRFUlZBTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTmV3IGludGVydmFsIGZpbHRlciBvZiAke2l9IGNvbmZsaWN0cyBleGlzdGluZyBmaWx0ZXIgb2YgYCtVbltjLnR5cGVdKTtsZXQgZD12YihlLmZpbHRlcihwPT5Cb29sZWFuKG4uc3BlY3NbcF0pKS5tYXAocD0+bi5zcGVjc1twXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKS5nZXQoaSk7aWYoIWQpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IGhwYXJhLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtlLmpvaW4oIiwgIil9YCk7aWYoZC50eXBlIT09VW4uSU5URVJWQUwpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0ICR7aX0gd2hlbiBkZWZhdWx0IGZpbHRlciBpcyBub3Qgb2YgaW50ZXJ2YWwgdHlwZS5gKTtsZXQgdT1uZXcgTWFwKGwuaHBhcmFtcyk7cmV0dXJuIHUuc2V0KGksey4uLmMsdHlwZTpVbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOmEsbWluVmFsdWU6ZC5taW5WYWx1ZSxtYXhWYWx1ZTpkLm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm99KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW3NdOnsuLi5sLGhwYXJhbXM6dX19fX0pLEVlKFBGLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZHM6ZSxtZXRyaWNUYWc6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6YX09dCxzPXZmKGUpLGw9bi5maWx0ZXJzW3NdPz97bWV0cmljczpuZXcgTWFwLGhwYXJhbXM6bmV3IE1hcH0sYz1WUyhlLmZpbHRlcihwPT5Cb29sZWFuKG4uc3BlY3NbcF0pKS5tYXAocD0+bi5zcGVjc1twXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpKS5nZXQoaSk7aWYoIWMpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IG1ldHJpYywgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7ZS5qb2luKCIsICIpfWApO2xldCBkPWwubWV0cmljcy5nZXQoaSksdT1uZXcgTWFwKGwubWV0cmljcyk7cmV0dXJuIHUuc2V0KGksey4uLmQsdHlwZTpVbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOmEsbWluVmFsdWU6Yy5taW5WYWx1ZSxtYXhWYWx1ZTpjLm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm99KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW3NdOnsuLi5sLG1ldHJpY3M6dX19fX0pLEVlKE11LChuLHQpPT57aWYoMD09PU9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKS5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4uc3BlY3N9LGk9bmV3IE1hcCxyPW5ldyBTZXQ7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKSl7bGV0IGE9bmV3IE1hcCxzPW5ldyBNYXAsbD1uZXcgTWFwLGM9bmV3IE1hcCx7cnVuczpkLG1ldGFkYXRhOnV9PXQubmV3UnVuc0FuZE1ldGFkYXRhW29dO2ZvcihsZXQgcCBvZiBkKXtsZXQgZj11LnJ1blRvSHBhcmFtc0FuZE1ldHJpY3NbcC5pZF07aWYoZilmb3IobGV0IG0gb2YgZi5tZXRyaWNzKXtsZXQgeT1pLmdldChtLnRhZyk7aS5zZXQobS50YWcse21pbjp5P01hdGgubWluKHkubWluLG0udmFsdWUpOm0udmFsdWUsbWF4Onk/TWF0aC5tYXgoeS5tYXgsbS52YWx1ZSk6bS52YWx1ZX0pfX1mb3IobGV0e25hbWU6cCxkb21haW46Zn1vZiB1LmhwYXJhbVNwZWNzKWlmKGYudHlwZT09PVVuLkRJU0NSRVRFKXtsZXQgbT1sLmdldChwKXx8bmV3IFNldDtmb3IobGV0IHkgb2YgZi52YWx1ZXMpbS5hZGQoeSk7bC5zZXQocCxtKX1lbHNle2xldCBtPWMuZ2V0KHApO2Muc2V0KHAse21pblZhbHVlOm0/TWF0aC5taW4oZi5taW5WYWx1ZSxtLm1pblZhbHVlKTpmLm1pblZhbHVlLG1heFZhbHVlOm0/TWF0aC5tYXgoZi5tYXhWYWx1ZSxtLm1heFZhbHVlKTpmLm1heFZhbHVlfSl9Zm9yKGxldCBwIG9mIHUubWV0cmljU3BlY3Mpci5hZGQocC50YWcpO2ZvcihsZXRbcCxmXW9mIGwpYS5zZXQocCx7dHlwZTpVbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5mXSxmaWx0ZXJWYWx1ZXM6Wy4uLmZdfSk7Zm9yKGxldFtwLHttaW5WYWx1ZTpmLG1heFZhbHVlOm19XW9mIGMpYS5zZXQocCx7dHlwZTpVbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOmYsbWF4VmFsdWU6bSxmaWx0ZXJMb3dlclZhbHVlOmYsZmlsdGVyVXBwZXJWYWx1ZTptfSk7Zm9yKGxldCBwIG9mIHIpe2xldCBmPWkuZ2V0KHApLG09Zj8ubWluPz8wLHk9Zj8ubWF4Pz8wO3Muc2V0KHAse3R5cGU6VW4uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTptLG1heFZhbHVlOnksZmlsdGVyTG93ZXJWYWx1ZTptLGZpbHRlclVwcGVyVmFsdWU6eX0pfWVbb109e2hwYXJhbTp7Li4uZVtvXT8uaHBhcmFtLHNwZWNzOnUuaHBhcmFtU3BlY3MsZGVmYXVsdEZpbHRlcnM6YX0sbWV0cmljOnsuLi5lW29dPy5tZXRyaWMsc3BlY3M6dS5tZXRyaWNTcGVjcyxkZWZhdWx0RmlsdGVyczpzfX19cmV0dXJuey4uLm4sc3BlY3M6ZX19KSk7ZnVuY3Rpb24gbFcobix0KXtyZXR1cm4gUmdlKG4sdCl9dmFyIEhTPSJocGFyYW1zIixjVz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbd3IuZm9yRmVhdHVyZShIUyxsVyldfSksbn0pKCkselM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W2NXXX0pLG59KSgpLGRXPSJkYXRhL3BsdWdpbi9ocGFyYW1zIjtmdW5jdGlvbiBrZ2Uobix0KXtyZXR1cm5gJHt0fS8ke259YH1mdW5jdGlvbiBQZ2Uobil7bGV0IHQ7cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImRvbWFpbkRpc2NyZXRlIil9KG4pP3t0eXBlOlVuLkRJU0NSRVRFLHZhbHVlczpuLmRvbWFpbkRpc2NyZXRlfTpmdW5jdGlvbihuKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZG9tYWluSW50ZXJ2YWwiKX0obik/ey4uLm4uZG9tYWluSW50ZXJ2YWwsdHlwZTpVbi5JTlRFUlZBTH06e3R5cGU6VW4uSU5URVJWQUwsbWluVmFsdWU6LTEvMCxtYXhWYWx1ZToxLzB9LHtkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGRpc3BsYXlOYW1lOm4uZGlzcGxheU5hbWUsbmFtZTpuLm5hbWUsdHlwZTpuLnR5cGUsZG9tYWluOnR9fWZ1bmN0aW9uIE9nZShuKXtsZXR7bmFtZTp0LC4uLmV9PW47cmV0dXJuey4uLmUsdGFnOnQudGFnfX12YXIgdVc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZX1mZXRjaFJ1bnMoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYC9leHBlcmltZW50LyR7ZX0vZGF0YS9ydW5zYCkucGlwZShVKGk9PmkubWFwKHI9Pih7aWQ6a2dlKHIsZSksbmFtZTpyLHN0YXJ0VGltZTowfSkpKSl9ZmV0Y2hIcGFyYW1zTWV0YWRhdGEoZSl7cmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAvZXhwZXJpbWVudC8ke2V9LyR7ZFd9L2V4cGVyaW1lbnRgLHtleHBlcmltZW50TmFtZTplfSx7fSwicmVxdWVzdCIpLnBpcGUoVShyPT57bGV0IG89W107Zm9yKGxldCBzIG9mIHIuaHBhcmFtSW5mb3Mpby5wdXNoKHtocGFyYW06cy5uYW1lfSk7Zm9yKGxldCBzIG9mIHIubWV0cmljSW5mb3Mpby5wdXNoKHttZXRyaWM6cy5uYW1lfSk7cmV0dXJue2V4cGVyaW1lbnRIcGFyYW1zSW5mbzpyLGxpc3RTZXNzaW9uUmVxdWVzdFBhcmFtczp7ZXhwZXJpbWVudE5hbWU6ZSxhbGxvd2VkU3RhdHVzZXM6W3d1LlNUQVRVU19GQUlMVVJFLHd1LlNUQVRVU19SVU5OSU5HLHd1LlNUQVRVU19TVUNDRVNTLHd1LlNUQVRVU19VTktOT1dOXSxjb2xQYXJhbXM6byxzdGFydEluZGV4OjAsc2xpY2VTaXplOjFlNn19fSksaG4oKHtleHBlcmltZW50SHBhcmFtc0luZm86cixsaXN0U2Vzc2lvblJlcXVlc3RQYXJhbXM6b30pPT50aGlzLmh0dHAucG9zdChgL2V4cGVyaW1lbnQvJHtlfS8ke2RXfS9zZXNzaW9uX2dyb3Vwc2Asbyx7fSwicmVxdWVzdCIpLnBpcGUoVShhPT4oe2V4cGVyaW1lbnRIcGFyYW1zSW5mbzpyLHNlc3Npb25Hcm91cHNMaXN0OmF9KSkpKSxVKCh7ZXhwZXJpbWVudEhwYXJhbXNJbmZvOnIsc2Vzc2lvbkdyb3Vwc0xpc3Q6b30pPT57bGV0IGE9e307Zm9yKGxldCBzIG9mIG8uc2Vzc2lvbkdyb3Vwcyl7bGV0IGw9T2JqZWN0LmVudHJpZXMocy5ocGFyYW1zKS5tYXAoYz0+e2xldFtkLHVdPWM7cmV0dXJue25hbWU6ZCx2YWx1ZTp1fX0pO2ZvcihsZXQgYyBvZiBzLnNlc3Npb25zKWZvcihsZXQgZCBvZiBjLm1ldHJpY1ZhbHVlcyl7bGV0IHA9YCR7ZX0vJHtkLm5hbWUuZ3JvdXA/YCR7Yy5uYW1lfS8ke2QubmFtZS5ncm91cH1gOmMubmFtZX1gLGY9YVtwXXx8e21ldHJpY3M6W10saHBhcmFtczpsfTtmLm1ldHJpY3MucHVzaCh7dGFnOmQubmFtZS50YWcsdHJhaW5pbmdTdGVwOmQudHJhaW5pbmdTdGVwLHZhbHVlOmQudmFsdWV9KSxhW3BdPWZ9fXJldHVybntocGFyYW1TcGVjczpyLmhwYXJhbUluZm9zLm1hcChQZ2UpLG1ldHJpY1NwZWNzOnIubWV0cmljSW5mb3MubWFwKE9nZSkscnVuVG9IcGFyYW1zQW5kTWV0cmljczphfX0pLGZvKHI9PnIgaW5zdGFuY2VvZiBwZCYmNDAwPT09ci5zdGF0dXM/cXQoe2hwYXJhbVNwZWNzOltdLG1ldHJpY1NwZWNzOltdLHJ1blRvSHBhcmFtc0FuZE1ldHJpY3M6e319KTpjbChyKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKHZjKSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkscFc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6QlMsdXNlQ2xhc3M6dVd9XX0pLG59KSgpLGZXPXEoTXIoImFsZXJ0cyIpLG49Pm4ubGF0ZXN0QWxlcnQpLGpTPSJleHBlcmltZW50cyIsbVc9cShNcihqUyksbj0+bi5kYXRhKSxHUz1xKG1XLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZDplfT10O3JldHVybiBuLmV4cGVyaW1lbnRNYXBbZV18fG51bGx9KTtmdW5jdGlvbiBXUyhuLHQsZSl7cmV0dXJuIG48dD90Om4+ZT9lOm59ZnVuY3Rpb24gJGgobix0LGUpe2xldCBpPVdTKG4uc3RhcnQuc3RlcCx0LGUpLHI9bi5lbmQ/V1Mobi5lbmQuc3RlcCx0LGUpOm51bGw7cmV0dXJue3N0YXJ0U3RlcDppLGVuZFN0ZXA6cixjbGlwcGVkOmkhPT1uLnN0YXJ0LnN0ZXB8fHIhPT0obi5lbmQ/LnN0ZXA/P251bGwpfX1mdW5jdGlvbiBxUyhuLHQpe2xldCBlPXRbbi5pZF07cmV0dXJuIGUmJmUudmlzaWJsZSYmIUJvb2xlYW4oZS5hdXgpfWZ1bmN0aW9uIE9GKG4sdCl7cmV0dXJuIHQ/bjp7c3RhcnQ6bi5zdGFydCxlbmQ6bnVsbH19ZnVuY3Rpb24gRkYobix0LGUpe3JldHVybiBPRihmdW5jdGlvbihuLHttaW5TdGVwOnQsbWF4U3RlcDplfSl7cmV0dXJue3N0YXJ0OntzdGVwOldTKG4uc3RhcnQuc3RlcCx0LGUpfSxlbmQ6bi5lbmQ/e3N0ZXA6V1Mobi5lbmQuc3RlcCx0LGUpfTpudWxsfX0obix0KSxlKX12YXIgcW49KCgpPT57cmV0dXJuKG49cW58fChxbj17fSkpLlNDQUxBUlM9InNjYWxhcnMiLG4uSElTVE9HUkFNUz0iaGlzdG9ncmFtcyIsbi5JTUFHRVM9ImltYWdlcyIscW47dmFyIG59KSgpLFBpPSgoKT0+e3JldHVybihuPVBpfHwoUGk9e30pKS5TVEVQPSJzdGVwIixuLlJFTEFUSVZFPSJyZWxhdGl2ZSIsbi5XQUxMX1RJTUU9IndhbGx0aW1lIixQaTt2YXIgbn0pKCkseGI9InRpbWVzZXJpZXMiO2Z1bmN0aW9uIHZXKG4pe3JldHVybiBuPT09cW4uU0NBTEFSU3x8bj09PXFuLkhJU1RPR1JBTVN8fG49PT1xbi5JTUFHRVN9dmFyIFZnZT1bcW4uSU1BR0VTXTtmdW5jdGlvbiBscyhuKXtyZXR1cm4gVmdlLmluY2x1ZGVzKG4pfXZhciBIZ2U9W3FuLkhJU1RPR1JBTVMscW4uSU1BR0VTXTtmdW5jdGlvbiBjcyhuKXtyZXR1cm4gSGdlLmluY2x1ZGVzKG4pfWZ1bmN0aW9uIExGKG4pe3JldHVybiBjcyhuLnBsdWdpbil9dmFyIE1jPWNsYXNze307ZnVuY3Rpb24gWFMobil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImVycm9yIil9dmFyIE5GPSJkYXRhL3BsdWdpbi90aW1lc2VyaWVzIjtmdW5jdGlvbiB4VyhuKXtsZXQgdD1uLmluZGV4T2YoIi8iKTtyZXR1cm57cnVuOm4uc3Vic3RyaW5nKHQrMSksZXhwZXJpbWVudElkOm4uc3Vic3RyaW5nKDAsdCl9fWZ1bmN0aW9uIE1XKG4sdCl7cmV0dXJuYCR7dH0vJHtufWB9ZnVuY3Rpb24gQ1cobix0KXtsZXR7cnVuVG9TZXJpZXM6ZSxydW46aSwuLi5yfT1uLG89ey4uLnJ9O3JldHVybiBlJiYoby5ydW5Ub1Nlcmllcz1CRihlLHQpKSxpJiYoby5ydW5JZD1NVyhpLHQpKSxvfWZ1bmN0aW9uIEJGKG4sdCl7bGV0IGU9e307Zm9yKGxldCBpIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbTVcoaSx0KV09bltpXSk7cmV0dXJuIGV9dmFyIHdXPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmh0dHA9ZSx0aGlzLnN0b3JlPWl9ZmV0Y2hUYWdNZXRhZGF0YShlKXtsZXQgaT1lLm1hcChvPT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke299LyR7TkZ9L3RhZ3NgKS5waXBlKFUocz0+ZnVuY3Rpb24obix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpe2xldCByPWk7aWYobHMocikpe2xldHt0YWdSdW5TYW1wbGVkSW5mbzpvLC4uLmF9PW5bcl0scz17fTtmb3IobGV0IGwgaW4gbylvLmhhc093blByb3BlcnR5KGwpJiYoc1tsXT1CRihvW2xdLHQpKTtlW3JdPXsuLi5hLHRhZ1J1blNhbXBsZWRJbmZvOnN9fWVsc2V7bGV0e3J1blRhZ0luZm86bywuLi5hfT1uW3JdO2Vbcl09ey4uLmEscnVuVGFnSW5mbzpCRihvLHQpfX19cmV0dXJuIGV9KHMsbykpKSkscj10aGlzLnN0b3JlLnNlbGVjdChDdSkucGlwZShWZShCb29sZWFuKSx6dCgxKSxZdCh0aGlzLnN0b3JlLnNlbGVjdChwUykpLFUoKFssb10pPT5vKSk7cmV0dXJuIHBvKGkpLnBpcGUoWXQociksVSgoW28sYV0pPT57bGV0IHM9ZnVuY3Rpb24obil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIG4pZm9yKGxldCBpIG9mIE9iamVjdC52YWx1ZXMocW4pKWlmKGxzKGkpKXt0W2ldPXRbaV18fHt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319O2xldHt0YWdEZXNjcmlwdGlvbnM6cix0YWdSdW5TYW1wbGVkSW5mbzpvfT1lW2ldO3RbaV0udGFnRGVzY3JpcHRpb25zPXsuLi50W2ldLnRhZ0Rlc2NyaXB0aW9ucywuLi5yfTtsZXQgYT10W2ldLnRhZ1J1blNhbXBsZWRJbmZvO2ZvcihsZXQgcyBvZiBPYmplY3Qua2V5cyhvKSl7YVtzXT1hW3NdfHx7fTtmb3IobGV0IGwgb2YgT2JqZWN0LmtleXMob1tzXSkpYVtzXVtsXT1vW3NdW2xdfX1lbHNle3RbaV09dFtpXXx8e3RhZ0Rlc2NyaXB0aW9uczp7fSxydW5UYWdJbmZvOnt9fTtsZXR7dGFnRGVzY3JpcHRpb25zOnIscnVuVGFnSW5mbzpvfT1lW2ldO3RbaV0udGFnRGVzY3JpcHRpb25zPXsuLi50W2ldLnRhZ0Rlc2NyaXB0aW9ucywuLi5yfSx0W2ldLnJ1blRhZ0luZm89ey4uLnRbaV0ucnVuVGFnSW5mbywuLi5vfX1yZXR1cm4gdH0obyk7cmV0dXJuIGF8fChzW3FuLklNQUdFU109e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX0pLHN9KSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe2xldCBpPWUubWFwKHI9PntpZihjcyhyLnBsdWdpbikpe2xldHtydW5JZDpsLC4uLmN9PXIse3J1bjpkLGV4cGVyaW1lbnRJZDp1fT14VyhsKSxwPXsuLi5jLHJ1bjpkfTtyZXR1cm4gdGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChwLHUpLnBpcGUoVSgoe3Jlc3BvbnNlOmYsZXhwZXJpbWVudElkOm19KT0+Q1coZixtKSkpfWxldHtleHBlcmltZW50SWRzOm8sLi4uYX09cjtyZXR1cm4gcG8oby5tYXAobD0+dGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChhLGwpKSkucGlwZShVKGw9PntsZXR7cnVuVG9TZXJpZXM6YyxlcnJvcjpkLC4uLnV9PWxbMF0ucmVzcG9uc2UscD11O2ZvcihsZXR7cmVzcG9uc2U6ZixleHBlcmltZW50SWQ6bX1vZiBsKXtsZXQgeT1DVyhmLG0pO2lmKHAuZXJyb3IpY29udGludWU7bGV0e3J1blRvU2VyaWVzOk0sZXJyb3I6dn09eTtpZih2KXAuZXJyb3I9dixwLnJ1blRvU2VyaWVzPXZvaWQgMDtlbHNle3AucnVuVG9TZXJpZXM9cC5ydW5Ub1Nlcmllc3x8e307Zm9yKGxldCB4IG9mIE9iamVjdC5rZXlzKE0pKXAucnVuVG9TZXJpZXNbeF09TVt4XX19cmV0dXJuIHB9KSl9KTtyZXR1cm4gcG8oaSl9ZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QoZSxpKXtsZXQgcj1uZXcgRm9ybURhdGE7cmV0dXJuIHIuYXBwZW5kKCJyZXF1ZXN0cyIsSlNPTi5zdHJpbmdpZnkoW2VdKSksdGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7aX0vJHtORn0vdGltZVNlcmllc2AscikucGlwZShVKG89Pih7cmVzcG9uc2U6b1swXSxleHBlcmltZW50SWQ6aX0pKSl9aW1hZ2VVcmwoZSl7cmV0dXJuYCR7TkZ9L2ltYWdlRGF0YT9pbWFnZUlkPSR7ZX1gfWRvd25sb2FkVXJsKGUsaSxyLG8pe2xldCBsLHtydW46YSxleHBlcmltZW50SWQ6c309eFcocik7aWYoZSE9PXFuLlNDQUxBUlMpdGhyb3cgbmV3IEVycm9yKGBOb3QgaW1wbGVtZW50ZWQ6IGRvd25sb2FkVXJsIGZvciAke2V9IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRgKTtpZihsPSJzY2FsYXJzL3NjYWxhcnMiLCFzKXRocm93IG5ldyBFcnJvcigiZXhwZXJpbWVudElkIGlzIGVtcHR5OyBpdCBpcyByZXF1aXJlZCB0byBmb3JtIGRvd25sb2FkVXJsLiIpO3JldHVybmAvZXhwZXJpbWVudC8ke3N9L2RhdGEvcGx1Z2luL3NjYWxhcnMvc2NhbGFycz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzppLHJ1bjphLGZvcm1hdDpvfSl9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyh2YyksTyhrZSkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEdnZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLFFTPSgoKT0+e2NsYXNzIG57Z2V0UGFyYW1zKCl7cmV0dXJuIEdnZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQ2I9InRiX2ZlYXR1cmVfZmxhZ19zdG9yYWdlX2tleSIsVkY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXJ5UGFyYW1zPWV9Z2V0RmVhdHVyZXMoZSxpKXtsZXQgcj1lP3RoaXMuZ2V0UGFydGlhbEZlYXR1cmVzRnJvbU1lZGlhUXVlcnkoKTp7fSxvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgoZSxbaSxyXSk9PntsZXQgbz1mdW5jdGlvbihuLHQpe2xldCBlPW4ucXVlcnlQYXJhbU92ZXJyaWRlO2lmKCFlfHwhdC5oYXMoZSkpcmV0dXJuIG51bGw7bGV0IGk9dC5nZXQoZSk7cmV0dXJuIG51bGw9PWk/bnVsbDpuLnBhcnNlVmFsdWUoaSl9KHIsdCk7cmV0dXJuIG51bGwhPT1vJiYoZVtpXT1vKSxlfSx7fSl9KGksdGhpcy5xdWVyeVBhcmFtcy5nZXRQYXJhbXMoKSk7cmV0dXJuey4uLnIsLi4uT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpKS5maWx0ZXIoKFtzXSk9Pmlbc10pKSwuLi5vfX1wZXJzaXN0RmVhdHVyZUZsYWdzKGUpe2xldCByPXsuLi50aGlzLmdldFBlcnNpc3RlbnRGZWF0dXJlRmxhZ3MoKSwuLi5lfTt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oQ2IsSlNPTi5zdHJpbmdpZnkocikpfXJlc2V0UGVyc2lzdGVkRmVhdHVyZUZsYWcoZSl7bGV0IGk9dGhpcy5nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCk7aWYobnVsbCE9aVtlXSl7aWYoZGVsZXRlIGlbZV0sMD09PU9iamVjdC5rZXlzKGkpLmxlbmd0aClyZXR1cm4gdm9pZCB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oQ2IpO3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShDYixKU09OLnN0cmluZ2lmeShpKSl9fXJlc2V0QWxsUGVyc2lzdGVkRmVhdHVyZUZsYWdzKCl7d2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKENiKX1nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCl7bGV0IGU9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKENiKTtyZXR1cm4gbnVsbD09ZT97fTpKU09OLnBhcnNlKGUpfWdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCl7bGV0IGU9e307cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyYmKGUuZGVmYXVsdEVuYWJsZURhcmtNb2RlPSEwKSxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFFTKSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWlM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksVFc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbVkYsUVMse3Byb3ZpZGU6WlMsdXNlQ2xhc3M6VkZ9XX0pLG59KSgpLE1iPXllKCJbRkVBVFVSRSBGTEFHXSBQYXJ0aWFsIEZlYXR1cmUgRmxhZ3MgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS1M9eWUoIltGRUFUVVJFIEZMQUddIEVuYWJsZSBEYXJrIE1vZGUgT3ZlcnJpZGUgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHhmPXllKCJbRkVBVFVSRSBGTEFHXSBTdG9yZSB0aGUgZmVhdHVyZSBmbGFncyBpbiBwZXJzaXN0ZW50IGxvY2FsU3RvcmFnZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFN1PXllKCJbRkVBVFVSRSBGTEFHXSBSZXNldCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZWc9eWUoIltGRUFUVVJFIEZMQUddIFJlc2V0IGFsbCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIiksRFc9eWUoIltGRUFUVVJFIEZMQUddIEVmZmVjdHMgSW5pdCIpLElXPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy50ZkZlYXR1cmVGbGFncz17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWZlYXR1cmUtZmxhZ3MiKS50Zl9mZWF0dXJlX2ZsYWdzfSx0aGlzLmdldEZlYXR1cmVGbGFncyQ9T3IoKCk9PnRoaXMuYWN0aW9ucyQucGlwZSh3aShEVyksVmkodGhpcy5zdG9yZS5zZWxlY3QoajYpLHRoaXMuc3RvcmUuc2VsZWN0KG1mKSksVSgoWyxvLGFdKT0+e2xldCBzPXRoaXMuZGF0YVNvdXJjZS5nZXRGZWF0dXJlcyhvLGEpO3JldHVybiBNYih7ZmVhdHVyZXM6c30pfSkpKSx0aGlzLnVwZGF0ZVBvbHltZXJGZWF0dXJlRmxhZ3MkPU9yKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUod2koTWIpLFl0KHRoaXMuc3RvcmUuc2VsZWN0KEZhKSx0aGlzLnN0b3JlLnNlbGVjdChXaCkpLFZ0KChbLG8sYV0pPT57dGhpcy50ZkZlYXR1cmVGbGFncy5yZWYuc2V0RmVhdHVyZUZsYWdzKG8sYSl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5zdG9yZUZlYXR1cmVGbGFnJD1PcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKHdpKHhmKSxWdCgoe2ZsYWdzOm99KT0+e3RoaXMuZGF0YVNvdXJjZS5wZXJzaXN0RmVhdHVyZUZsYWdzKG8pfSkpLHtkaXNwYXRjaDohMX0pLHRoaXMucmVzZXRGZWF0dXJlRmxhZ092ZXJyaWRlcyQ9T3IoKCk9PnRoaXMuYWN0aW9ucyQucGlwZSh3aShTdSksVnQoKHtmbGFnczpvfSk9PntvLmZvckVhY2goYT0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldFBlcnNpc3RlZEZlYXR1cmVGbGFnKGEpfSl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZXNldEFsbEZlYXR1cmVGbGFnT3ZlcnJpZGVzJD1PcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKHdpKGVnKSxWdCgoKT0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldEFsbFBlcnNpc3RlZEZlYXR1cmVGbGFncygpfSkpLHtkaXNwYXRjaDohMX0pfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIERXKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oV28pLE8oa2UpLE8oWlMpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxrVz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZX1pbnRlcmNlcHQoZSxpKXtyZXR1cm4gdGhpcy5zdG9yZS5waXBlKHBuKFdoKSxmdW5jdGlvbihuLHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGk9PmkucGlwZShuP1ZlKChyLG8pPT5uKHIsbyxpKSk6bGEsenQoMSksZT9mdW5jdGlvbihuKXtyZXR1cm4gS3QoKHQsZSk9PntsZXQgaT0hMTt0LnN1YnNjcmliZShIdChlLHI9PntpPSEwLGUubmV4dChyKX0sKCk9PntpfHxlLm5leHQobiksZS5jb21wbGV0ZSgpfSkpfSl9KHQpOlNIKCgpPT5uZXcgV20pKX0oKSx5aShyPT4oZT1lLmNsb25lKHtoZWFkZXJzOmUuaGVhZGVycy5zZXQoIlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsSlNPTi5zdHJpbmdpZnkocikpfSksaS5oYW5kbGUoZSkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oa2UpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiB0ZyhuKXtyZXR1cm4iZmFsc2UiIT09bn12YXIgbixIRj17c2NhbGFyc0JhdGNoU2l6ZTp7ZGVmYXVsdFZhbHVlOnZvaWQgMCxxdWVyeVBhcmFtT3ZlcnJpZGU6InNjYWxhcnNCYXRjaFNpemUiLHBhcnNlVmFsdWU6cGFyc2VJbnR9LGVuYWJsZWRFeHBlcmltZW50YWxQbHVnaW5zOntkZWZhdWx0VmFsdWU6W10scXVlcnlQYXJhbU92ZXJyaWRlOiJleHBlcmltZW50YWxQbHVnaW4iLHBhcnNlVmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuIG4/bi5zcGxpdCgiLCIpOltdfX0sZm9yY2VTdmc6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImZvcmNlU1ZHIixwYXJzZVZhbHVlOnRnfSxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOntkZWZhdWx0VmFsdWU6bnVsbCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0sZGVmYXVsdEVuYWJsZURhcmtNb2RlOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJkYXJrTW9kZSIscGFyc2VWYWx1ZTp0Z30saXNBdXRvRGFya01vZGVBbGxvd2VkOntkZWZhdWx0VmFsdWU6ITAscXVlcnlQYXJhbU92ZXJyaWRlOm51bGx9LGluQ29sYWI6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6InRlbnNvcmJvYXJkQ29sYWIiLHBhcnNlVmFsdWU6dGd9LG1ldHJpY3NJbWFnZVN1cHBvcnRFbmFibGVkOntkZWZhdWx0VmFsdWU6ITAscXVlcnlQYXJhbU92ZXJyaWRlOm51bGx9LHNob3dGbGFnczp7ZGVmYXVsdFZhbHVlOnZvaWQgMCxxdWVyeVBhcmFtT3ZlcnJpZGU6InNob3dGbGFncyIscGFyc2VWYWx1ZTpuPT5ufSxlbmFibGVTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJlbmFibGVTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uIixwYXJzZVZhbHVlOnRnfSxlbmFibGVIcGFyYW1zSW5UaW1lU2VyaWVzOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJlbmFibGVIcGFyYW1zSW5UaW1lU2VyaWVzIixwYXJzZVZhbHVlOnRnfSxlbmFibGVTdWdnZXN0ZWRDYXJkczp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlU3VnZ2VzdGVkQ2FyZHMiLHBhcnNlVmFsdWU6dGd9fSx6Rj17aXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITEsZGVmYXVsdEZsYWdzOihuPUhGLE9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgodCxbZSxpXSk9Pih0W2VdPWkuZGVmYXVsdFZhbHVlLHQpLHt9KSksbWV0YWRhdGE6SEYsZmxhZ092ZXJyaWRlczp7fX0sVUY9bmV3IGllKCJbRmVhdHVyZSBGbGFnXSBTdG9yZSBDb25maWciKTtmdW5jdGlvbiBPVygpe3JldHVybntpbml0aWFsU3RhdGU6ekZ9fXZhciBLZ2U9X3IoekYsRWUoTWIsKG4se2ZlYXR1cmVzOnR9KT0+KHsuLi5uLGlzRmVhdHVyZUZsYWdzTG9hZGVkOiEwLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcywuLi50fX0pKSxFZShLUywobix7ZW5hYmxlRGFya01vZGU6dH0pPT4oey4uLm4sZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLGVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6dH19KSksRWUoeGYsKG4sdCk9Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsLi4udC5mbGFnc319KSksRWUoU3UsKG4sdCk9PntpZighdHx8IXQuZmxhZ3N8fCF0LmZsYWdzLmxlbmd0aClyZXR1cm4gbjtsZXQgZT17Li4ubi5mbGFnT3ZlcnJpZGVzfTtyZXR1cm4gdC5mbGFncy5mb3JFYWNoKGk9PntkZWxldGUgZVtpXX0pLHsuLi5uLGZsYWdPdmVycmlkZXM6ZX19KSxFZShlZyxuPT4oey4uLm4sZmxhZ092ZXJyaWRlczp7fX0pKSxFZShTbCwobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2lmKCF0LnRoZW1lT3ZlcnJpZGUpcmV0dXJuIG47bGV0IGU7c3dpdGNoKHQudGhlbWVPdmVycmlkZSl7Y2FzZSBPYS5CUk9XU0VSX0RFRkFVTFQ6ZT1udWxsO2JyZWFrO2Nhc2UgT2EuREFSSzplPSEwO2JyZWFrO2Nhc2UgT2EuTElHSFQ6ZT0hMX1yZXR1cm57Li4ubixmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsZW5hYmxlRGFya01vZGVPdmVycmlkZTplfX19KSk7ZnVuY3Rpb24gRlcobix0KXtyZXR1cm4gS2dlKG4sdCl9ZnVuY3Rpb24gSmdlKCl7cmV0dXJuIHEodVMsbj0+bnVsbD09PW4/e3RoZW1lT3ZlcnJpZGU6T2EuQlJPV1NFUl9ERUZBVUxUfTp7dGhlbWVPdmVycmlkZTpuP09hLkRBUks6T2EuTElHSFR9KX12YXIgbmc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6VUYsdXNlRmFjdG9yeTpPV30se3Byb3ZpZGU6d0YsdXNlQ2xhc3M6a1csbXVsdGk6ITB9XSxpbXBvcnRzOltUVyx3ci5mb3JGZWF0dXJlKGRTLEZXLFVGKSx3by5mb3JGZWF0dXJlKFtJV10pLGVyLmRlZmluZUdsb2JhbFNldHRpbmcoSmdlKV19KSxufSkoKSxKUz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7cHJvdmlkZXJzOlt7cHJvdmlkZTpNYyx1c2VDbGFzczp3V31dLGltcG9ydHM6W25nLHFoXX0pLG59KSgpLGFvPSgoKT0+KGZ1bmN0aW9uKG4pe24uREVGQVVMVD0iZGVmYXVsdCIsbi5BTFBIQUJFVElDQUw9ImFscGhhYmV0aWNhbCIsbi5BU0NFTkRJTkc9ImFzY2VuZGluZyIsbi5ERVNDRU5ESU5HPSJkZXNjZW5kaW5nIixuLk5FQVJFU1Q9Im5lYXJlc3QiLG4uTkVBUkVTVF9ZPSJuZWFyZXN0X1kifShhb3x8KGFvPXt9KSksYW8pKSgpLCRTPSJtZXRyaWNzIixMYT0oKCk9PihmdW5jdGlvbihuKXtuW24uTk9ORT0wXT0iTk9ORSIsbltuLk9WRVJSSURFX0FTX0VOQUJMRUQ9MV09Ik9WRVJSSURFX0FTX0VOQUJMRUQiLG5bbi5PVkVSUklERV9BU19ESVNBQkxFRD0yXT0iT1ZFUlJJREVfQVNfRElTQUJMRUQifShMYXx8KExhPXt9KSksTGEpKSgpLGUxPXtjYXJkTWluV2lkdGg6bnVsbCx0b29sdGlwU29ydDphby5BTFBIQUJFVElDQUwsaWdub3JlT3V0bGllcnM6ITAseEF4aXNUeXBlOlBpLlNURVAsaGlkZUVtcHR5Q2FyZHM6ITAsc2NhbGFyU21vb3RoaW5nOi42LHNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g6ITEsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaToxZTMsaW1hZ2VDb250cmFzdEluTWlsbGk6MWUzLGltYWdlU2hvd0FjdHVhbFNpemU6ITEsaGlzdG9ncmFtTW9kZTpTci5PRkZTRVR9LCRnZT0uMTtmdW5jdGlvbiBtZChuLHQsZSxpKXtyZXR1cm4gblt0XS5oYXNPd25Qcm9wZXJ0eShlKT9scyh0KT9uW3RdW2VdLmhhc093blByb3BlcnR5KGkpP25bdF1bZV1baV06bnVsbDpuW3RdW2VdOm51bGx9ZnVuY3Rpb24gdDEobix0LGUsaSl7aWYobHModCkpe2xldCBhPXsuLi5uW3RdfSxzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1uLmhhc093blByb3BlcnR5KHQpP3suLi5uW3RdfTp7fSxvPXIuaGFzT3duUHJvcGVydHkoZSk7cmV0dXJuIHJbZV09bz97Li4ucltlXX06e3J1blRvU2VyaWVzOnt9LHJ1blRvTG9hZFN0YXRlOnt9fSxyfShhLGUsaSk7cmV0dXJuIGFbZV09cyxhfWxldCByPXsuLi5uW3RdfSxvPXIuaGFzT3duUHJvcGVydHkoZSk7cmV0dXJuIHJbZV09bz97Li4ucltlXX06e3J1blRvU2VyaWVzOnt9LHJ1blRvTG9hZFN0YXRlOnt9fSxyfWZ1bmN0aW9uIGpGKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeShuKX1mdW5jdGlvbiBuMShuLHQsZSl7bGV0IGk9ey4uLmV9O2ZvcihsZXQgciBvZiB0KWlbcl09bjtyZXR1cm4gaX1mdW5jdGlvbiBpZyhuLHQsZSxpKXtpZihscyh0KSl7bGV0IG89blt0XS50YWdSdW5TYW1wbGVkSW5mbztyZXR1cm4gby5oYXNPd25Qcm9wZXJ0eShlKT9PYmplY3Qua2V5cyhvW2VdKS5maWx0ZXIocz0+aTxvW2VdW3NdLm1heFNhbXBsZXNQZXJTdGVwKTpbXX1sZXQgcj1uW3RdLnRhZ1RvUnVucztyZXR1cm4gci5oYXNPd25Qcm9wZXJ0eShlKT9yW2VdOltdfWZ1bmN0aW9uIG4wZShuLHQpe3JldHVybiBuLnBsdWdpbj09PXQucGx1Z2luJiZuLnRhZz09PXQudGFnJiZuLnNhbXBsZT09PXQuc2FtcGxlJiYobi5ydW5JZD09PXQucnVuSWR8fCFuLnJ1bklkJiYhdC5ydW5JZCl9ZnVuY3Rpb24gR0Yobix0LGUsaSxyLG8sYSxzKXtsZXQgbD1uZXcgU2V0KG4pLGM9W107Zm9yKGxldCB1IG9mIG4pZm9yKGxldCBwIG9mIHQpaWYobjBlKGVbcF0sdSkpe2MucHVzaChwKSxsLmRlbGV0ZSh1KTticmVha31pZighYy5sZW5ndGgpcmV0dXJue3VucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOm4sY2FyZE1ldGFkYXRhTWFwOmUsY2FyZFRvUGlubmVkQ29weTppLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpyLHBpbm5lZENhcmRUb09yaWdpbmFsOm8sY2FyZFN0ZXBJbmRleDphLGNhcmRTdGF0ZU1hcDpzfTtsZXQgZD17Y2FyZFRvUGlubmVkQ29weTppLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpyLHBpbm5lZENhcmRUb09yaWdpbmFsOm8sY2FyZFN0ZXBJbmRleDphLGNhcmRNZXRhZGF0YU1hcDplLGNhcmRTdGF0ZU1hcDpzfTtmb3IobGV0IHUgb2YgYylkPVdGKHUsZC5jYXJkVG9QaW5uZWRDb3B5LGQuY2FyZFRvUGlubmVkQ29weUNhY2hlLGQucGlubmVkQ2FyZFRvT3JpZ2luYWwsZC5jYXJkU3RlcEluZGV4LGQuY2FyZE1ldGFkYXRhTWFwLHMpO3JldHVybnsuLi5kLHVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOlsuLi5sXX19ZnVuY3Rpb24gV0Yobix0LGUsaSxyLG8sYSl7aWYodC5oYXMobikpcmV0dXJue2NhcmRUb1Bpbm5lZENvcHk6dCxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6ZSxwaW5uZWRDYXJkVG9PcmlnaW5hbDppLGNhcmRTdGVwSW5kZXg6cixjYXJkTWV0YWRhdGFNYXA6byxjYXJkU3RhdGVNYXA6YX07bGV0IHM9bmV3IE1hcCh0KSxsPW5ldyBNYXAoZSksYz1uZXcgTWFwKGkpLGQ9ey4uLnJ9LHU9ey4uLm99LHA9ey4uLmF9LGY9ZnVuY3Rpb24obil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtiYXNlQ2FyZElkOm59KX0obik7cy5zZXQobixmKSxsLnNldChuLGYpLGMuc2V0KGYsbiksci5oYXNPd25Qcm9wZXJ0eShuKSYmKGRbZl09cltuXSk7bGV0IG09b1tuXTtpZighbSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwaW4gYSBjYXJkIHdpdGhvdXQgbWV0YWRhdGEiKTtyZXR1cm4gdVtmXT1tLHBbbl0mJihwW2ZdPXBbbl0pLHtjYXJkVG9QaW5uZWRDb3B5OnMsY2FyZFRvUGlubmVkQ29weUNhY2hlOmwscGlubmVkQ2FyZFRvT3JpZ2luYWw6YyxjYXJkU3RlcEluZGV4OmQsY2FyZE1ldGFkYXRhTWFwOnUsY2FyZFN0YXRlTWFwOnB9fXZhciBpMGU9e01BWF9QSU5fQ09VTlQ6MTB9O2Z1bmN0aW9uIGkxKG4pe3JldHVybiBuLnBpbm5lZENhcmRUb09yaWdpbmFsLnNpemUrbi51bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkcy5sZW5ndGg8aTBlLk1BWF9QSU5fQ09VTlR9ZnVuY3Rpb24gcUYobix0LGUsaSl7bGV0IHI9ey4uLm59O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKG89PntpZighby5pbmNsdWRlcygnInBsdWdpbiI6ImltYWdlcyInKSlyZXR1cm47bGV0IGE9WUYobyx0LGUpLHM9bnVsbDtpZihudWxsPT09aS5lbmQpcz1mdW5jdGlvbihuLHQpe2xldCBlPXQuaW5kZXhPZihuKTtpZigtMSE9PWUpcmV0dXJue2luZGV4OmUsaXNDbG9zZXN0OiExfTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoLTE7aSsrKXtsZXQgcj10W2ldLG89dFtpKzFdLGE9KG8tcikqJGdlO2lmKG48cilyZXR1cm4gbnVsbDtpZighKG4+bykpe2lmKG4tcjw9YSlyZXR1cm57aW5kZXg6aSxpc0Nsb3Nlc3Q6ITB9O2lmKG8tbjw9YSlyZXR1cm57aW5kZXg6aSsxLGlzQ2xvc2VzdDohMH19fXJldHVybiBudWxsfShpLnN0YXJ0LnN0ZXAsYSk7ZWxzZXtsZXQgYz1hW25bb10uaW5kZXhdLGQ9ZnVuY3Rpb24obix0KXtpZighbilyZXR1cm5bXTtpZihudWxsPT09bi5lbmQpcmV0dXJuLTEhPT10LmluZGV4T2Yobi5zdGFydC5zdGVwKT9bbi5zdGFydC5zdGVwXTpbXTtsZXQgZT1bXTtmb3IobGV0IGkgb2YgdClpPj1uLnN0YXJ0LnN0ZXAmJmk8PW4uZW5kLnN0ZXAmJmUucHVzaChpKTtyZXR1cm4gZX0oaSxhKTtzPWZ1bmN0aW9uKG4sdCxlKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGk9blswXSxyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU+cj97aW5kZXg6dC5pbmRleE9mKHIpLGlzQ2xvc2VzdDohMX06ZTxpP3tpbmRleDp0LmluZGV4T2YoaSksaXNDbG9zZXN0OiExfTpudWxsfShkLGEsYyl9bnVsbCE9PXMmJihyW29dPXMpfSkscn1mdW5jdGlvbiBZRihuLHQsZSl7aWYoIXQuaGFzT3duUHJvcGVydHkobikpcmV0dXJuW107bGV0e3BsdWdpbjppLHRhZzpyLHNhbXBsZTpvLHJ1bklkOmF9PXRbbl07aWYobnVsbD09PWEpcmV0dXJuW107bGV0IHM9bWQoZSxpLHIsbyk7cmV0dXJuIG51bGwhPT1zJiZzLnJ1blRvU2VyaWVzLmhhc093blByb3BlcnR5KGEpP3MucnVuVG9TZXJpZXNbYV0ubWFwKGw9Pmwuc3RlcCk6W119ZnVuY3Rpb24gWEYobil7bGV0e2RhdGFNaW5NYXg6dCx1c2VyVmlld0JveDplfT1uLGk9ZT8ueDtpZighaSlyZXR1cm4gdDtsZXQgcj1pWzBdPGlbMV0/aVswXTppWzFdLG89cj09PWlbMF0/aVsxXTppWzBdO3JldHVybnttaW5TdGVwOk1hdGguY2VpbChyKSxtYXhTdGVwOk1hdGguZmxvb3Iobyl9fWZ1bmN0aW9uIHIxKG4sdCl7c3dpdGNoKG4pe2Nhc2UgTGEuT1ZFUlJJREVfQVNfRU5BQkxFRDpyZXR1cm4hMDtjYXNlIExhLk9WRVJSSURFX0FTX0RJU0FCTEVEOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIG8xKG4sdCxlLGkpe3JldHVybiBlP3Q6cjEobltpXT8ucmFuZ2VTZWxlY3Rpb25PdmVycmlkZSx0KX1mdW5jdGlvbiBDZihuKXtsZXQgdD1uZXcgTWFwO3JldHVybiguLi5lKT0+e2xldCBpPUpTT04uc3RyaW5naWZ5KGUpO2lmKHQuaGFzKGkpKXJldHVybiB0LmdldChpKTt7bGV0IHI9biguLi5lKTtyZXR1cm4gdC5zZXQoaSxyKSxyfX19dmFyIEdpPU1yKCRTKSx3Yj1xKEdpLG49Pm4udGFnTWV0YWRhdGFMb2FkU3RhdGUpLHpXPXEoR2ksbj0+bi50YWdNZXRhZGF0YSksbDBlPXEoR2ksbj0+bi5jYXJkTGlzdCksaGQ9cShHaSwobix0KT0+e2lmKCFuLmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gRGUuTk9UX0xPQURFRDtsZXR7cGx1Z2luOmUsdGFnOmkscnVuSWQ6cixzYW1wbGU6b309bi5jYXJkTWV0YWRhdGFNYXBbdF0sYT1tZChuLnRpbWVTZXJpZXNEYXRhLGUsaSxvKTtpZighYSlyZXR1cm4gRGUuTk9UX0xPQURFRDtsZXQgcz1hLnJ1blRvTG9hZFN0YXRlO2lmKHIpcmV0dXJuIHMuaGFzT3duUHJvcGVydHkocik/c1tyXTpEZS5OT1RfTE9BREVEO2xldCBsPWlnKG4udGFnTWV0YWRhdGEsZSxpLG8pO2lmKCFsLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIGEgY2FyZCB3aG9zZSB0YWcgaGFzIG5vIHJ1bnMiKTtyZXR1cm4gbC5ldmVyeShjPT5zW2NdPT09RGUuTE9BREVEKT9EZS5MT0FERUQ6bC5zb21lKGM9PnNbY109PT1EZS5MT0FESU5HKT9EZS5MT0FESU5HOkRlLk5PVF9MT0FERUR9KSxjMGU9Q2Yobj0+cSh0PT50LHQ9PntsZXR7cGx1Z2luOmUsdGFnOmksc2FtcGxlOnJ9PW4sbz1tZCh0LnRpbWVTZXJpZXNEYXRhLGUsaSxyKTtyZXR1cm4gbz9vLnJ1blRvU2VyaWVzOm51bGx9KSksRXU9cShHaSwobix0KT0+bi5jYXJkTWV0YWRhdGFNYXAuaGFzT3duUHJvcGVydHkodCk/YzBlKG4uY2FyZE1ldGFkYXRhTWFwW3RdKShuKTpudWxsKSxRRj1xKEdpLG49Pm4uY2FyZE1ldGFkYXRhTWFwKSxVcz1xKFFGLChuLHQpPT5uLmhhc093blByb3BlcnR5KHQpP25bdF06bnVsbCksanM9cShHaSxuPT5uLmNhcmRTdGF0ZU1hcCksZDBlPXEoR2ksbj0+bi52aXNpYmxlQ2FyZE1hcCksVVc9cShkMGUsbj0+bmV3IFNldChuLnZhbHVlcygpKSksYTE9cShsMGUsUUYsKG4sdCk9Pm4uZmlsdGVyKGU9PnQuaGFzT3duUHJvcGVydHkoZSkpLm1hcChlPT4oe2NhcmRJZDplLC4uLnRbZV19KSkpLFpGPXEoR2ksKG4sdCk9Pm4uY2FyZFN0ZXBJbmRleC5oYXNPd25Qcm9wZXJ0eSh0KT9uLmNhcmRTdGVwSW5kZXhbdF06bnVsbCksalc9cShHaSwobix0KT0+WUYodCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhKSksR1c9cShHaSxuPT5uLmNhcmRUb1Bpbm5lZENvcHkpLHUwZT1xKEdpLG49Pm4ucGlubmVkQ2FyZFRvT3JpZ2luYWwpLFNiPXEoR1csUUYsKG4sdCk9PlsuLi5uLnZhbHVlcygpXS5maWx0ZXIoZT0+dC5oYXNPd25Qcm9wZXJ0eShlKSkubWFwKGU9Pih7Y2FyZElkOmUsLi4udFtlXX0pKSksVHU9cShHVyx1MGUsKG4sdCxlKT0+bi5oYXMoZSl8fHQuaGFzKGUpKSxXVz1xKEdpLG49Pm4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMpLHFXPXEoR2ksbj0+aTEobikpLFRsPXEoR2ksbj0+KHsuLi5uLnNldHRpbmdzLC4uLm4uc2V0dGluZ092ZXJyaWRlc30pKSxZVz1xKEdpLG49Pm4uc2V0dGluZ092ZXJyaWRlcykscmc9cShUbCxuPT5uLmNhcmRNaW5XaWR0aCksTWY9cShUbCxuPT5uLnRvb2x0aXBTb3J0KSx3Zj1xKFRsLG49Pm4uaWdub3JlT3V0bGllcnMpLERsPXEoVGwsbj0+bi54QXhpc1R5cGUpLHMxPXEoVGwsbj0+bi5oaXN0b2dyYW1Nb2RlKSxYVz1xKFRsLG49Pm4uaGlkZUVtcHR5Q2FyZHMpLGdkPXEoVGwsbj0+bi5zY2FsYXJTbW9vdGhpbmcpLGwxPXEoVGwsbj0+bi5zY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYKSxjMT1xKFRsLG49Pm4uaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSksZDE9cShUbCxuPT5uLmltYWdlQ29udHJhc3RJbk1pbGxpKSx1MT1xKFRsLG49Pm4uaW1hZ2VTaG93QWN0dWFsU2l6ZSksSWw9cShHaSxuPT5uLnRhZ0ZpbHRlcikscDE9cShHaSwobix0KT0+Qm9vbGVhbihuLnRhZ0dyb3VwRXhwYW5kZWQuZ2V0KHQpKSksRHU9cShHaSxuPT5uLmxpbmtlZFRpbWVFbmFibGVkKSxFYj1xKEdpLG49Pm4uc3RlcFNlbGVjdG9yRW5hYmxlZCksSXU9cShHaSxuPT5uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCksS0Y9cShHaSxuPT57bGV0e21pbjp0LG1heDplfT1uLnN0ZXBNaW5NYXg7cmV0dXJue21pbjp0PT09MS8wPzA6dCxtYXg6ZT09PS0xLzA/MWUzOmV9fSksSkY9cShHaSxLRiwobix0KT0+bi5saW5rZWRUaW1lU2VsZWN0aW9uP24ubGlua2VkVGltZVNlbGVjdGlvbjp7c3RhcnQ6e3N0ZXA6dC5tYXh9LGVuZDpudWxsfSksQXU9cShHaSxKRiwobix0KT0+bi5saW5rZWRUaW1lRW5hYmxlZD90Om51bGwpLHdjPXEoR2ksbj0+bi5maWx0ZXJlZFBsdWdpblR5cGVzKSxmMT1xKEdpLG49Pm4uaXNTZXR0aW5nc1BhbmVPcGVuKSxtMT1xKEdpLG49Pm4uaXNTbGlkZW91dE1lbnVPcGVuKSxRVz1xKEdpLG49Pm4udGFibGVFZGl0b3JTZWxlY3RlZFRhYiksaDE9cShqcyxJdSxEdSwobix0LGUsaSk9Pm8xKG4sdCxlLGkpKSxaVz1xKGpzLChuLHQpPT57aWYoblt0XSlyZXR1cm4gWEYoblt0XSl9KSxLVz1xKGpzLChuLHQpPT5uW3RdPy5kYXRhTWluTWF4KSwkRj1xKGpzLChuLHQpPT5uW3RdPy51c2VyVmlld0JveD8/bnVsbCksSlc9cShqcyxFYixJdSxEdSxBdSwobix0LGUsaSxyLG8pPT57bGV0IGE9bltvXTtpZighYSlyZXR1cm47bGV0IHM9WEYoYSk7aWYoIXMpcmV0dXJuO2lmKGkmJnIpcmV0dXJuIEZGKHIscyxlKTtpZighcjEoYS5zdGVwU2VsZWN0aW9uT3ZlcnJpZGUsdCkpcmV0dXJuO2xldCBsPXIxKGEucmFuZ2VTZWxlY3Rpb25PdmVycmlkZSxlKSxjPWEudGltZVNlbGVjdGlvbjtyZXR1cm4gY3x8KGM9e3N0YXJ0OntzdGVwOnMubWluU3RlcH0sZW5kOntzdGVwOnMubWF4U3RlcH19KSxsP2MuZW5kfHwoYz17c3RhcnQ6e3N0ZXA6cy5taW5TdGVwfSxlbmQ6Yy5zdGFydH0pOmM9e3N0YXJ0OmMuZW5kPz9jLnN0YXJ0LGVuZDpudWxsfSxGRihjLHMsbCl9KSxUYj1xKEdpLG49Pm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksRGI9cShHaSxuPT5uLnJhbmdlU2VsZWN0aW9uSGVhZGVycyksZzE9Q2Yobj0+cSh0PT50LFRiLERiLCh0LGUsaSk9PmgxKHQsbik/aTplKSksZTc9TXIoIm5vdGlmaWNhdGlvbiIpLFNjPShxKGU3LG49Pm4ubm90aWZpY2F0aW9ucykscShlNyxuPT5uLmxhc3RSZWFkVGltZXN0YW1wSW5Ncz8/LTEpLCgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWFBFUklNRU5UX05BTUU9MF09IkVYUEVSSU1FTlRfTkFNRSIsbltuLkhQQVJBTT0xXT0iSFBBUkFNIixuW24uTUVUUklDPTJdPSJNRVRSSUMiLG5bbi5SVU5fTkFNRT0zXT0iUlVOX05BTUUifShTY3x8KFNjPXt9KSksU2MpKSgpKSxRaT0oKCk9PihmdW5jdGlvbihuKXtuW24uUlVOPTBdPSJSVU4iLG5bbi5FWFBFUklNRU5UPTFdPSJFWFBFUklNRU5UIixuW24uUkVHRVg9Ml09IlJFR0VYIn0oUWl8fChRaT17fSkpLFFpKSkoKTtmdW5jdGlvbiBBYihuLHQsZSl7bGV0IGk9e30scj1bXSxvPXttYXRjaGVzOmksbm9uTWF0Y2hlczpyfTtzd2l0Y2gobi5rZXkpe2Nhc2UgUWkuUlVOOmZvcihsZXQgcyBvZiB0KWlbcy5pZF09W3NdO2JyZWFrO2Nhc2UgUWkuRVhQRVJJTUVOVDpmb3IobGV0IHMgb2YgdCl7bGV0IGw9ZVtzLmlkXSxjPWlbbF18fFtdO2MucHVzaChzKSxpW2xdPWN9YnJlYWs7Y2FzZSBRaS5SRUdFWDppZighbi5yZWdleFN0cmluZylicmVhaztsZXQgYTt0cnl7YT1uZXcgUmVnRXhwKG4ucmVnZXhTdHJpbmcpfWNhdGNoe2JyZWFrfWZvcihsZXQgcyBvZiB0KXtsZXQgbD1zLm5hbWUubWF0Y2goYSk7aWYobCl7bGV0IGQ9bC5sZW5ndGg+MT9KU09OLnN0cmluZ2lmeShsLnNsaWNlKDEpKToicHNldWRvX2dyb3VwIix1PWlbZF18fFtdO3UucHVzaChzKSxpW2RdPXV9ZWxzZSByLnB1c2gocyl9fXJldHVybiBvfWZ1bmN0aW9uIHkxKG4sdCl7cmV0dXJuIG49PT1RaS5SRUdFWD97a2V5Om4scmVnZXhTdHJpbmc6dD8/IiJ9OntrZXk6bn19dmFyIHQ3PU1yKCJydW5zIiksTmE9cSh0NyxuPT5uLmRhdGEpLG43PXEoTmEsbj0+bi5ydW5JZFRvRXhwSWQpLGIxPXEoTmEsKG4sdCk9Pm4ucnVuSWRUb0V4cElkW3QucnVuSWRdPz9udWxsKSx2MT1xKE5hLChuLHQpPT5uLnJ1bk1ldGFkYXRhW3QucnVuSWRdPz9udWxsKSxFYz1xKE5hLChuLHQpPT4obi5ydW5JZHNbdC5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKGk9PkJvb2xlYW4obi5ydW5NZXRhZGF0YVtpXSkpLm1hcChpPT5uLnJ1bk1ldGFkYXRhW2ldKSkscjc9cShOYSwobix0KT0+bi5ydW5JZHNbdC5leHBlcmltZW50SWRdPz9bXSksbzc9cShOYSxuPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKG4ucnVuTWV0YWRhdGEpKSksUmI9cShOYSwobix0KT0+bi5ydW5zTG9hZFN0YXRlW3QuZXhwZXJpbWVudElkXXx8e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOkRlLk5PVF9MT0FERUR9KSxlMj1xKE5hLG49Pm51bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5P3kxKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpOm51bGwpLGE3PXEoZTIsTmEsKG4sdCk9Pm4/P3QuaW5pdGlhbEdyb3VwQnkpLF9kPXEoTmEsbj0+bi5yZWdleEZpbHRlciksa2I9cSh0NyxuPT5uLnVpKSx0Mj1xKGtiLG49Pm4ucGFnaW5hdGlvbk9wdGlvbiksbjI9cShrYixuPT5uLnNvcnQpLHM3PXEoa2Isbj0+bi5zZWxlY3Rpb25TdGF0ZSksbDc9cShOYSxuPT5uLnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KSxjNz1xKE5hLG49Pm4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSx4MT1xKE5hLG49Pm4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKSxkNz1xKGtiLG49Pm4ucnVuc1RhYmxlSGVhZGVycyksdTc9cShrYixuPT5uLnNvcnRpbmdJbmZvKSxDMT15ZSgiW1NldHRpbmdzXSBSZWxvYWQgRW5hYmxlIFRvZ2dsZWQiKSxNMT15ZSgiW1NldHRpbmdzXSBSZWxvYWQgUGVyaW9kIENoYW5nZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHcxPXllKCJbU2V0dGluZ3NdIFBhZ2UgU2l6ZSBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCYT17fTt6QShCYSx7Z2V0Q29sb3JQYWxldHRlOigpPT5wMGUsZ2V0UGFnZVNpemU6KCk9PlNmLGdldFJlbG9hZEVuYWJsZWQ6KCk9Pk9iLGdldFJlbG9hZFBlcmlvZEluTXM6KCk9PkZiLGdldFNldHRpbmdzTG9hZFN0YXRlOigpPT5pMn0pO3ZhciBTMT0ic2V0dGluZ3MiLG03PXtzdGF0ZTpEZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCksc2V0dGluZ3M6e3JlbG9hZFBlcmlvZEluTXM6M2U0LHJlbG9hZEVuYWJsZWQ6ITEscGFnZVNpemU6MTIsY29sb3JQYWxldHRlOntpZDoiZGVmYXVsdCIsbmFtZToiRGVmYWx0Iixjb2xvcnM6W3tuYW1lOiJTbGF0ZSIsbGlnaHRIZXg6IiM0MjUwNjYiLGRhcmtIZXg6IiM4ZTk4YTMifSx7bmFtZToiQ3lhbiIsbGlnaHRIZXg6IiMxMmI1Y2IiLGRhcmtIZXg6IiMxMmI1Y2IifSx7bmFtZToiUGluayIsbGlnaHRIZXg6IiNlNTI1OTIiLGRhcmtIZXg6IiNlNTI1OTIifSx7bmFtZToiWWVsbG93IixsaWdodEhleDoiI2Y5YWIwMCIsZGFya0hleDoiI2Y5YWIwMCJ9LHtuYW1lOiJQdXJwbGUiLGxpZ2h0SGV4OiIjOTMzNGU2IixkYXJrSGV4OiIjOTMzNGU2In0se25hbWU6IkxpZ2h0IEdyZWVuIixsaWdodEhleDoiIzdjYjM0MiIsZGFya0hleDoiIzdjYjM0MiJ9LHtuYW1lOiJPcmFuZ2UiLGxpZ2h0SGV4OiIjZTg3MTBhIixkYXJrSGV4OiIjZTg3MTBhIn1dLGluYWN0aXZlOntuYW1lOiJHcmF5IixsaWdodEhleDoiI2UwZTBlMCIsZGFya0hleDoiIzNiM2IzYiJ9fX19LFBiPU1yKFMxKSxpMj1xKFBiLG49Pm4uc3RhdGUpLE9iPXEoUGIsbj0+bi5zZXR0aW5ncy5yZWxvYWRFbmFibGVkKSxGYj1xKFBiLG49Pm4uc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcyksU2Y9cShQYixuPT5uLnNldHRpbmdzLnBhZ2VTaXplKSxwMGU9cShQYixuPT5uLnNldHRpbmdzLmNvbG9yUGFsZXR0ZSk7ZnVuY3Rpb24gb2cobix0LGUpe2lmKCF0KXJldHVybiEwO2xldCBpO3RyeXtpPW5ldyBSZWdFeHAodCwiaSIpfWNhdGNoe3JldHVybiExfWxldCByPVtuLnJ1bk5hbWVdO3JldHVybiBlJiZyLnB1c2gobi5leHBlcmltZW50QWxpYXMuYWxpYXNUZXh0LGAke24uZXhwZXJpbWVudEFsaWFzLmFsaWFzVGV4dH0vJHtuLnJ1bk5hbWV9YCksci5zb21lKG89PmkudGVzdChvKSl9dmFyIGYwZT1xKHJvLHM3LG43LChuLHQsZSk9PntpZighbilyZXR1cm4gbmV3IE1hcDtsZXQgaT1uZXcgTWFwO2ZvcihsZXRbcixvXW9mIHQuZW50cmllcygpKXtsZXQgYT1lW3JdO2EmJm4uaW5kZXhPZihhKT49MCYmaS5zZXQocixvKX1yZXR1cm4gaX0pLFJ1PXEocm8sZjBlLF9kLG49PntsZXQgdD1ybyhuKT8/W10sZT1CcyhuKSxpPW5ldyBNYXA7Zm9yKGxldCByIG9mIHQpe2xldCBvPUVjKG4se2V4cGVyaW1lbnRJZDpyfSk7Zm9yKGxldCBhIG9mIG8paS5zZXQoYS5pZCx7cnVuTmFtZTphLm5hbWUsZXhwZXJpbWVudEFsaWFzOmVbcl19KX1yZXR1cm4gaX0sTnMsKG4sdCxlLGkscik9PntpZighbilyZXR1cm4gbnVsbDtsZXQgbz1yPT09a24uQ09NUEFSRV9FWFBFUklNRU5ULGE9bmV3IE1hcDtmb3IobGV0W3MsbF1vZiB0LmVudHJpZXMoKSl7bGV0IGM9aS5nZXQocyk7YS5zZXQocyxvZyhjLGUsbykmJmwpfXJldHVybiBhfSksa3U9cShCYS5nZXRDb2xvclBhbGV0dGUsYzcsbDcsRWwsKG4sdCxlLGkpPT57bGV0IHI9e307cmV0dXJuIHQuZm9yRWFjaCgobyxhKT0+e2xldCBzPWk/bi5pbmFjdGl2ZS5kYXJrSGV4Om4uaW5hY3RpdmUubGlnaHRIZXg7aWYoZS5oYXMoYSkpcz1lLmdldChhKTtlbHNlIGlmKG8+PTApe2xldCBsPW4uY29sb3JzW28lbi5jb2xvcnMubGVuZ3RoXTtzPWk/bC5kYXJrSGV4OmwubGlnaHRIZXh9clthXT1zfSkscn0pLGg3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5ydW5zRGF0YVNvdXJjZT1yLHRoaXMubG9hZFJ1bnNPblJ1blRhYmxlU2hvd24kPU9yKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUod2koUFMpLGhuKCh7ZXhwZXJpbWVudElkczpvfSk9PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8scz0+cz09PURlLkZBSUxFRHx8cz09PURlLk5PVF9MT0FERUQpLnBpcGUoVmUocz0+ISFzLmxlbmd0aCksaG4ocz0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KG8scykpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQ9dGhpcy5hY3Rpb25zJC5waXBlKHdpKExzKSxZdCh0aGlzLnN0b3JlLnNlbGVjdChmYSkpLHVpKChbLG9dLFssYV0pPT5MbyhvLGEpKSxZdCh0aGlzLnN0b3JlLnNlbGVjdChybykpLFZlKChbLG9dKT0+ISFvKSxVKChbLG9dKT0+byksaG4obz0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxhPT5hPT09RGUuRkFJTEVEfHxhPT09RGUuTk9UX0xPQURFRCkucGlwZShVKGE9Pih7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDphfSkpKSkpLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkPXRoaXMuYWN0aW9ucyQucGlwZSh3aShzcyxIcyksWXQodGhpcy5zdG9yZS5zZWxlY3Qocm8pKSxWZSgoWyxvXSk9PiEhbyksVSgoWyxvXSk9Pm8pLGhuKG89PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8sYT0+YSE9PURlLkxPQURJTkcpLnBpcGUoVShhPT4oe2V4cGVyaW1lbnRJZHM6byxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6YX0pKSkpKSx0aGlzLmxvYWRSdW5zT25OYXZpZ2F0aW9uT3JSZWxvYWQkPU9yKCgpPT5jbih0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUm91dGVDaGFuZ2UkLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkKS5waXBlKFl0KHRoaXMuc3RvcmUuc2VsZWN0KGZhKSksVmUoKFssb10pPT5udWxsIT09byYmby5yb3V0ZUtpbmQhPT1rbi5DQVJEKSxobigoW3tleHBlcmltZW50SWRzOm8sZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOmF9XSk9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdChvLGEpKSkse2Rpc3BhdGNoOiExfSl9Z2V0UnVuc0xpc3RMb2FkU3RhdGUoZSl7cmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KFJiLHtleHBlcmltZW50SWQ6ZX0pLnBpcGUoenQoMSkpfWdldEV4cGVyaW1lbnRzV2l0aExvYWRTdGF0ZShlLGkpe3JldHVybiBwbyhlLm1hcChyPT50aGlzLmdldFJ1bnNMaXN0TG9hZFN0YXRlKHIpKSkucGlwZShVKHI9PmUuZmlsdGVyKChvLGEpPT5pKHJbYV0uc3RhdGUpKSkpfWZldGNoQWxsUnVuc0xpc3QoZSxpKXtyZXR1cm4gcXQoe2V4cGVyaW1lbnRJZHM6ZSxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6aX0pLnBpcGUoVnQoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKERTKHtleHBlcmltZW50SWRzOmUscmVxdWVzdGVkRXhwZXJpbWVudElkczppfSkpfSksaG4oKCk9PntsZXQgcj1uZXcgU2V0KGkpO3JldHVybiBwbyhlLm1hcChhPT5yLmhhcyhhKT90aGlzLmZldGNoUnVuc0ZvckV4cGVyaW1lbnQoYSk6dGhpcy5tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhhKSkpfSksVShyPT57bGV0IG89e30sYT1bXTtmb3IobGV0IHMgb2YgcilhLnB1c2goLi4ucy5ydW5zKSxzLmZyb21SZW1vdGUmJihvW3MuZXhwZXJpbWVudElkXT17cnVuczpzLnJ1bnMsbWV0YWRhdGE6cy5tZXRhZGF0YX0pO3JldHVybntuZXdSdW5zQW5kTWV0YWRhdGE6byxydW5zRm9yQWxsRXhwZXJpbWVudHM6YX19KSxWdCgoe25ld1J1bnNBbmRNZXRhZGF0YTpyLHJ1bnNGb3JBbGxFeHBlcmltZW50czpvfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKE11KHtleHBlcmltZW50SWRzOmUsbmV3UnVuc0FuZE1ldGFkYXRhOnIscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm99KSl9KSxmbyhyPT4odGhpcy5zdG9yZS5kaXNwYXRjaChLaCh7ZXhwZXJpbWVudElkczplLHJlcXVlc3RlZEV4cGVyaW1lbnRJZHM6aX0pKSxxdChudWxsKSkpLFUoKCk9Pm51bGwpKX1tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoUmIse2V4cGVyaW1lbnRJZDplfSkucGlwZShWZShpPT5pLnN0YXRlIT09RGUuTE9BRElORyksenQoMSksaG4oaT0+aS5zdGF0ZT09PURlLkZBSUxFRD9jbChuZXcgRXJyb3IoIlBlbmRpbmcgcmVxdWVzdCBmYWlsZWQiKSk6cXQoaSkpLFl0KHRoaXMuc3RvcmUuc2VsZWN0KEVjLHtleHBlcmltZW50SWQ6ZX0pKSxVKChbLGldKT0+KHtmcm9tUmVtb3RlOiExLGV4cGVyaW1lbnRJZDplLHJ1bnM6aX0pKSl9ZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChlKXtyZXR1cm4gcG8oW3RoaXMucnVuc0RhdGFTb3VyY2UuZmV0Y2hSdW5zKGUpLHRoaXMucnVuc0RhdGFTb3VyY2UuZmV0Y2hIcGFyYW1zTWV0YWRhdGEoZSldKS5waXBlKFUoKFtpLHJdKT0+KHtmcm9tUmVtb3RlOiEwLGV4cGVyaW1lbnRJZDplLHJ1bnM6aSxtZXRhZGF0YTpyfSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhXbyksTyhrZSksTyhCUykpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEdzPSgoKT0+KGZ1bmN0aW9uKG4pe24uQVNDPSJhc2MiLG4uREVTQz0iZGVzYyIsbi5VTlNFVD0iIn0oR3N8fChHcz17fSkpLEdzKSkoKSx2dD0oKCk9PihmdW5jdGlvbihuKXtuLkNPTE9SPSJDT0xPUiIsbi5SRUxBVElWRV9USU1FPSJSRUxBVElWRV9USU1FIixuLlJVTj0iUlVOIixuLlNURVA9IlNURVAiLG4uVElNRT0iVElNRSIsbi5WQUxVRT0iVkFMVUUiLG4uU01PT1RIRUQ9IlNNT09USEVEIixuLlZBTFVFX0NIQU5HRT0iVkFMVUVfQ0hBTkdFIixuLlNUQVJUX1NURVA9IlNUQVJUX1NURVAiLG4uRU5EX1NURVA9IkVORF9TVEVQIixuLlNUQVJUX1ZBTFVFPSJTVEFSVF9WQUxVRSIsbi5FTkRfVkFMVUU9IkVORF9WQUxVRSIsbi5NSU5fVkFMVUU9Ik1JTl9WQUxVRSIsbi5NQVhfVkFMVUU9Ik1BWF9WQUxVRSIsbi5QRVJDRU5UQUdFX0NIQU5HRT0iUEVSQ0VOVEFHRV9DSEFOR0UiLG4uU1RFUF9BVF9NQVg9IlNURVBfQVRfTUFYIixuLlNURVBfQVRfTUlOPSJTVEVQX0FUX01JTiIsbi5NRUFOPSJNRUFOIixuLlJBV19DSEFOR0U9IlJBV19DSEFOR0UiLG4uSFBBUkFNPSJIUEFSQU0iLG4uQ1VTVE9NPSJDVVNUT00ifSh2dHx8KHZ0PXt9KSksdnQpKSgpLHNvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5BU0NFTkRJTkc9MF09IkFTQ0VORElORyIsbltuLkRFU0NFTkRJTkc9MV09IkRFU0NFTkRJTkcifShzb3x8KHNvPXt9KSksc28pKSgpLGxvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TSU5HTEU9MF09IlNJTkdMRSIsbltuLlJBTkdFPTFdPSJSQU5HRSJ9KGxvfHwobG89e30pKSxsbykpKCkse2luaXRpYWxTdGF0ZTptMGUscmVkdWNlcnM6aDBlfT1fZih7cnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnk6bmV3IE1hcCxkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6bmV3IE1hcCxncm91cEtleVRvQ29sb3JJZDpuZXcgTWFwLGluaXRpYWxHcm91cEJ5OntrZXk6UWkuUlVOfSx1c2VyU2V0R3JvdXBCeUtleTpudWxsLGNvbG9yR3JvdXBSZWdleFN0cmluZzoiIixyZWdleEZpbHRlcjoiIn0se3J1bklkczp7fSxydW5JZFRvRXhwSWQ6e30scnVuTWV0YWRhdGE6e30scnVuc0xvYWRTdGF0ZTp7fX0sKG4sdCxlKT0+TG8odCxlKT9uOnsuLi5uLGluaXRpYWxHcm91cEJ5OntrZXk6ZS5yb3V0ZUtpbmQ9PT1rbi5DT01QQVJFX0VYUEVSSU1FTlQ/UWkuRVhQRVJJTUVOVDpRaS5SVU59fSksZzBlPV9yKG0wZSxFZShWaCwobix7cm91dGVLaW5kOnQscGFydGlhbFN0YXRlOmV9KT0+e2lmKHQhPT1rbi5DT01QQVJFX0VYUEVSSU1FTlQmJnQhPT1rbi5FWFBFUklNRU5UKXJldHVybiBuO2xldCByPWUucnVucy5ncm91cEJ5LG89ZS5ydW5zLnJlZ2V4RmlsdGVyPz8iIjtpZighciYmIW8pcmV0dXJuIG47bGV0e2NvbG9yR3JvdXBSZWdleFN0cmluZzphLHVzZXJTZXRHcm91cEJ5S2V5OnN9PW47cmV0dXJuIHImJihhPXIua2V5PT09UWkuUkVHRVg/ci5yZWdleFN0cmluZzpuLmNvbG9yR3JvdXBSZWdleFN0cmluZyxzPXIua2V5Pz9udWxsKSx7Li4ubixjb2xvckdyb3VwUmVnZXhTdHJpbmc6YSxyZWdleEZpbHRlcjpvLHVzZXJTZXRHcm91cEJ5S2V5OnN9fSksRWUoRFMsKG4sdCk9PntsZXQgZT17Li4ubi5ydW5zTG9hZFN0YXRlfTtmb3IobGV0IGkgb2YgdC5yZXF1ZXN0ZWRFeHBlcmltZW50SWRzKWVbaV09ZVtpXT97Li4uZVtpXSxzdGF0ZTpEZS5MT0FESU5HfTp7bGFzdExvYWRlZFRpbWVJbk1zOm51bGwsc3RhdGU6RGUuTE9BRElOR307cmV0dXJuey4uLm4scnVuc0xvYWRTdGF0ZTplfX0pLEVlKE11LChuLHQpPT57bGV0IGU9ey4uLm4ucnVuSWRzfSxpPXsuLi5uLnJ1bk1ldGFkYXRhfSxyPXsuLi5uLnJ1bklkVG9FeHBJZH0sbz17Li4ubi5ydW5zTG9hZFN0YXRlfTtmb3IobGV0IGEgb2YgT2JqZWN0LmtleXModC5uZXdSdW5zQW5kTWV0YWRhdGEpKXtsZXR7cnVuczpzLG1ldGFkYXRhOmx9PXQubmV3UnVuc0FuZE1ldGFkYXRhW2FdO2VbYV09cy5tYXAoKHtpZDpjfSk9PmMpLG9bYV09ey4uLm9bYV0sbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCksc3RhdGU6RGUuTE9BREVEfTtmb3IobGV0IGMgb2Ygcyl7bGV0IGQ9bC5ydW5Ub0hwYXJhbXNBbmRNZXRyaWNzW2MuaWRdO2lbYy5pZF09ey4uLmMsaHBhcmFtczpkP2QuaHBhcmFtczpudWxsLG1ldHJpY3M6ZD9kLm1ldHJpY3M6bnVsbH0scltjLmlkXT1hfX1yZXR1cm57Li4ubixydW5JZHM6ZSxydW5JZFRvRXhwSWQ6cixydW5NZXRhZGF0YTppLHJ1bnNMb2FkU3RhdGU6b319KSxFZShLaCwobix0KT0+e2xldCBlPXsuLi5uLnJ1bnNMb2FkU3RhdGV9O2ZvcihsZXQgaSBvZiB0LnJlcXVlc3RlZEV4cGVyaW1lbnRJZHMpZVtpXT1lW2ldP3suLi5lW2ldLHN0YXRlOkRlLkZBSUxFRH06e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOkRlLkZBSUxFRH07cmV0dXJuey4uLm4scnVuc0xvYWRTdGF0ZTplfX0pLEVlKE11LChuLHtydW5zRm9yQWxsRXhwZXJpbWVudHM6dH0pPT57bGV0IGU9bmV3IE1hcChuLmdyb3VwS2V5VG9Db2xvcklkKSxpPW5ldyBNYXAobi5kZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnkpLHI9bi5pbml0aWFsR3JvdXBCeTtudWxsIT09bi51c2VyU2V0R3JvdXBCeUtleSYmKHI9eTEobi51c2VyU2V0R3JvdXBCeUtleSxuLmNvbG9yR3JvdXBSZWdleFN0cmluZykpO2xldCBvPUFiKHIsdCxuLnJ1bklkVG9FeHBJZCk7T2JqZWN0LmVudHJpZXMoby5tYXRjaGVzKS5mb3JFYWNoKChbYSxzXSk9PntsZXQgbD1lLmdldChhKT8/ZS5zaXplO2Uuc2V0KGEsbCk7Zm9yKGxldCBjIG9mIHMpaS5zZXQoYy5pZCxsKX0pO2ZvcihsZXQgYSBvZiBvLm5vbk1hdGNoZXMpaS5zZXQoYS5pZCwtMSk7cmV0dXJuey4uLm4sZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5OmksZ3JvdXBLZXlUb0NvbG9ySWQ6ZX19KSxFZShKaCwobix7ZXhwZXJpbWVudElkczp0LGdyb3VwQnk6ZX0pPT57bGV0IGk9bmV3IE1hcCxyPW5ldyBNYXAobi5kZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnkpLGE9QWIoZSx0LmZsYXRNYXAobD0+bi5ydW5JZHNbbF0pLm1hcChsPT5uLnJ1bk1ldGFkYXRhW2xdKSxuLnJ1bklkVG9FeHBJZCk7T2JqZWN0LmVudHJpZXMoYS5tYXRjaGVzKS5mb3JFYWNoKChbbCxjXSk9PntsZXQgZD1pLmdldChsKT8/aS5zaXplO2kuc2V0KGwsZCk7Zm9yKGxldCB1IG9mIGMpci5zZXQodS5pZCxkKX0pO2ZvcihsZXQgbCBvZiBhLm5vbk1hdGNoZXMpci5zZXQobC5pZCwtMSk7bGV0IHM9ZS5rZXk9PT1RaS5SRUdFWD9lLnJlZ2V4U3RyaW5nOm4uY29sb3JHcm91cFJlZ2V4U3RyaW5nO3JldHVybnsuLi5uLGNvbG9yR3JvdXBSZWdleFN0cmluZzpzLHVzZXJTZXRHcm91cEJ5S2V5OmUua2V5LGRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeTpyLGdyb3VwS2V5VG9Db2xvcklkOmkscnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnk6bmV3IE1hcH19KSxFZShrUywobix7cnVuSWQ6dCxuZXdDb2xvcjplfSk9PntsZXQgaT1uZXcgTWFwKG4ucnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnkpO3JldHVybiBpLnNldCh0LGUpLHsuLi5uLHJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Oml9fSksRWUoYmIsKG4sdCk9Pih7Li4ubixyZWdleEZpbHRlcjp0LnJlZ2V4U3RyaW5nfSkpKSxfMGU9eWYoZzBlLGgwZSkseTBlPXtrZXk6bnVsbCxkaXJlY3Rpb246R3MuVU5TRVR9LHtpbml0aWFsU3RhdGU6YjBlLHJlZHVjZXJzOnYwZX09X2Yoe3BhZ2luYXRpb25PcHRpb246e3BhZ2VJbmRleDowLHBhZ2VTaXplOjEwfSxzb3J0OnkwZSxzZWxlY3Rpb25TdGF0ZTpuZXcgTWFwLHJ1bnNUYWJsZUhlYWRlcnM6W3t0eXBlOnZ0LlJVTixuYW1lOiJydW4iLGRpc3BsYXlOYW1lOiJSdW4iLGVuYWJsZWQ6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH1dLHNvcnRpbmdJbmZvOntuYW1lOiJydW4iLG9yZGVyOnNvLkRFU0NFTkRJTkd9fSx7fSwobix0LGUpPT57aWYoIUxvKHQsZSkpe2lmKGUucm91dGVLaW5kPT09a24uQ09NUEFSRV9FWFBFUklNRU5UJiYhbi5ydW5zVGFibGVIZWFkZXJzLmZpbmQoaT0+ImV4cGVyaW1lbnRBbGlhcyI9PT1pLm5hbWUpKXtsZXQgaT1bLi4ubi5ydW5zVGFibGVIZWFkZXJzLHt0eXBlOnZ0LkNVU1RPTSxuYW1lOiJleHBlcmltZW50QWxpYXMiLGRpc3BsYXlOYW1lOiJFeHBlcmltZW50IixlbmFibGVkOiEwLG1vdmFibGU6ITAsc29ydGFibGU6ITB9XTtyZXR1cm57Li4ubixydW5zVGFibGVIZWFkZXJzOml9fWlmKHQ/LnJvdXRlS2luZD09PWtuLkNPTVBBUkVfRVhQRVJJTUVOVCYmZS5yb3V0ZUtpbmQhPT1rbi5DT01QQVJFX0VYUEVSSU1FTlQpe2xldCBpPW4ucnVuc1RhYmxlSGVhZGVycy5maWx0ZXIocj0+ImV4cGVyaW1lbnRBbGlhcyIhPT1yLm5hbWUpO3JldHVybnsuLi5uLHJ1bnNUYWJsZUhlYWRlcnM6aX19fXJldHVybiBufSkseDBlPV9yKGIwZSxFZShBUywobix7cGFnZVNpemU6dCxwYWdlSW5kZXg6ZX0pPT4oey4uLm4scGFnaW5hdGlvbk9wdGlvbjp7cGFnZVNpemU6dCxwYWdlSW5kZXg6ZX19KSksRWUoYmIsKG4sdCk9Pih7Li4ubixwYWdpbmF0aW9uT3B0aW9uOnsuLi5uLnBhZ2luYXRpb25PcHRpb24scGFnZUluZGV4OjB9fSkpLEVlKFJTLChuLHQpPT4oey4uLm4sc29ydDp7a2V5OnQua2V5LGRpcmVjdGlvbjp0LmRpcmVjdGlvbn19KSksRWUoTXUsKG4sdCk9PntsZXQgZT1uZXcgTWFwKG4uc2VsZWN0aW9uU3RhdGUpLGk9dC5ydW5zRm9yQWxsRXhwZXJpbWVudHMubGVuZ3RoPD01MDA7Zm9yKGxldCByIG9mIHQucnVuc0ZvckFsbEV4cGVyaW1lbnRzKWUuaGFzKHIuaWQpfHxlLnNldChyLmlkLGkpO3JldHVybnsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSksRWUoX2IsKG4se3J1bklkOnR9KT0+e2xldCBlPW5ldyBNYXAobi5zZWxlY3Rpb25TdGF0ZSk7cmV0dXJuIGUuc2V0KHQsIUJvb2xlYW4oZS5nZXQodCkpKSx7Li4ubixzZWxlY3Rpb25TdGF0ZTplfX0pLEVlKElTLChuLHtydW5JZDp0fSk9PntsZXQgZT1uZXcgTWFwO2ZvcihsZXQgaSBvZiBuLnNlbGVjdGlvblN0YXRlLmtleXMoKSllLnNldChpLHQ9PT1pKTtyZXR1cm57Li4ubixzZWxlY3Rpb25TdGF0ZTplfX0pLEVlKHliLChuLHtydW5JZHM6dH0pPT57bGV0IGU9bmV3IE1hcChuLnNlbGVjdGlvblN0YXRlKSxpPSF0LmV2ZXJ5KHI9PkJvb2xlYW4oZS5nZXQocikpKTtmb3IobGV0IHIgb2YgdCllLnNldChyLGkpO3JldHVybnsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSksRWUoT1MsKG4se2hlYWRlcjp0LGluZGV4OmV9KT0+e2xldCBpPVsuLi5uLnJ1bnNUYWJsZUhlYWRlcnNdO3JldHVybiB2b2lkIDA9PT1lP2kucHVzaCh0KTppLnNwbGljZShlLDAsdCksey4uLm4scnVuc1RhYmxlSGVhZGVyczppfX0pLEVlKEZTLChuLHtoZWFkZXI6dH0pPT57bGV0IGU9bi5ydW5zVGFibGVIZWFkZXJzLmZpbHRlcigoe25hbWU6aX0pPT5pIT09dC5uYW1lKTtyZXR1cm57Li4ubixydW5zVGFibGVIZWFkZXJzOmV9fSksRWUoTFMsKG4se25ld0hlYWRlck9yZGVyOnR9KT0+KHsuLi5uLHJ1bnNUYWJsZUhlYWRlcnM6dH0pKSxFZShOUywobix7c29ydGluZ0luZm86dH0pPT4oey4uLm4sc29ydGluZ0luZm86dH0pKSksQzBlPXlmKHgwZSx2MGUpO2Z1bmN0aW9uIGc3KG4sdCl7cmV0dXJuIGNmKHtkYXRhOl8wZSx1aTpDMGV9KShuLHQpfWZ1bmN0aW9uIE0wZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpLaCxhbGVydEZyb21BY3Rpb246KCk9Pih7bG9jYWxpemVkTWVzc2FnZToiRmFpbGVkIHRvIGZldGNoIHJ1bnMifSl9XX12YXIgRTE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUoInJ1bnMiLGc3KSx3by5mb3JGZWF0dXJlKFtoN10pLHBXLENjLnJlZ2lzdGVyQWxlcnRBY3Rpb25zKE0wZSkselNdfSksbn0pKCkseWQ9KCgpPT4oZnVuY3Rpb24obil7bi5SVU5TX0NIQU5HRUQ9ImV4cGVyaW1lbnRhbC5SdW5zQ2hhbmdlZCIsbi5HRVRfUlVOUz0iZXhwZXJpbWVudGFsLkdldFJ1bnMiLG4uR0VUX1VSTF9EQVRBPSJleHBlcmltZW50YWwuR2V0VVJMUGx1Z2luRGF0YSIsbi5EQVRBX1JFTE9BREVEPSJleHBlcmltZW50YWwuRGF0YVJlbG9hZGVkIn0oeWR8fCh5ZD17fSkpLHlkKSkoKSx5Nz1uZXcgV2Vha01hcCxhZz1uZXcgU2V0LHIyPW5ldyBNYXAsRDE9bmV3IE1hcDtmdW5jdGlvbiBiNyhuLHQpe3JldHVybiBlPT57bGV0IGk9RDEuZ2V0KHQpLHI9eTcuZ2V0KGkpfHxudWxsO3JldHVybiBuKHIsZSl9fXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57aWYoImV4cGVyaW1lbnRhbC5ib290c3RyYXAiIT09bi5kYXRhKXJldHVybjtsZXQgdD1uLnBvcnRzWzBdO2lmKCF0KXJldHVybjtsZXQgZT1uLnNvdXJjZT9uLnNvdXJjZS5mcmFtZUVsZW1lbnQ6bnVsbDshZXx8ZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wb3J0PXQsdGhpcy5pZD0wLHRoaXMucmVzcG9uc2VXYWl0cz1uZXcgTWFwLHRoaXMubGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGU9PnRoaXMub25NZXNzYWdlKGUpKX1saXN0ZW4odCxlKXt0aGlzLmxpc3RlbmVycy5zZXQodCxlKX11bmxpc3Rlbih0KXt0aGlzLmxpc3RlbmVycy5kZWxldGUodCl9YXN5bmMgb25NZXNzYWdlKHQpe2xldCBlPUpTT04ucGFyc2UodC5kYXRhKSxpPWUudHlwZSxyPWUuaWQsbz1lLnBheWxvYWQsYT1lLmVycm9yO2lmKGUuaXNSZXBseSl7aWYoIXRoaXMucmVzcG9uc2VXYWl0cy5oYXMocikpcmV0dXJuO2xldHtyZXNvbHZlOnUscmVqZWN0OnB9PXRoaXMucmVzcG9uc2VXYWl0cy5nZXQocik7cmV0dXJuIHRoaXMucmVzcG9uc2VXYWl0cy5kZWxldGUociksdm9pZChhP3AobmV3IEVycm9yKGEpKTp1KG8pKX1sZXQgbD1udWxsLGM9bnVsbDtpZih0aGlzLmxpc3RlbmVycy5oYXMoaSkpe2xldCB1PXRoaXMubGlzdGVuZXJzLmdldChpKTt0cnl7bD1hd2FpdCB1KG8pfWNhdGNoKHApe2M9cH19dGhpcy5wb3N0TWVzc2FnZSh7dHlwZTppLGlkOnIscGF5bG9hZDpsLGVycm9yOmMsaXNSZXBseTohMH0pfXBvc3RNZXNzYWdlKHQpe3RoaXMucG9ydC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh0KSl9c2VuZE1lc3NhZ2UodCxlKXtsZXQgaT10aGlzLmlkKys7cmV0dXJuIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6dCxpZDppLHBheWxvYWQ6ZSxlcnJvcjpudWxsLGlzUmVwbHk6ITF9KSxuZXcgUHJvbWlzZSgobyxhKT0+e3RoaXMucmVzcG9uc2VXYWl0cy5zZXQoaSx7cmVzb2x2ZTpvLHJlamVjdDphfSl9KX19KG4pO2FnLmFkZChlKSxEMS5zZXQoZSx0KSxuLnN0YXJ0KCk7Zm9yKGxldFtpLHJdb2YgcjIpe2xldCBvPWI3KHIsZSk7ZS5saXN0ZW4oaSxvKX19KHQsZSl9KTt2YXIgYTIsc2c9KCgpPT57Y2xhc3Mgbnticm9hZGNhc3QoZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGkgb2YgYWcpRDEuZ2V0KGkpLmlzQ29ubmVjdGVkfHwoYWcuZGVsZXRlKGkpLEQxLmRlbGV0ZShpKSk7bGV0IGU9Wy4uLmFnXS5tYXAoaT0+aS5zZW5kTWVzc2FnZShuLHQpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9KGUsaSl9bGlzdGVuKGUsaSl7IWZ1bmN0aW9uKG4sdCl7cjIuc2V0KG4sdCk7Zm9yKGxldCBlIG9mIGFnKXtsZXQgaT1iNyh0LGUpO2UubGlzdGVuKG4saSl9fShlLGkpfXVubGlzdGVuKGUpeyFmdW5jdGlvbihuKXtyMi5kZWxldGUobik7Zm9yKGxldCB0IG9mIGFnKXQudW5saXN0ZW4obil9KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxJMT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXN0b3JhZ2UiKTt0aGlzLmlwYy5saXN0ZW4oeWQuR0VUX1VSTF9EQVRBLGk9PntpZighaSlyZXR1cm47bGV0IHI9YHAuJHtpLnBsdWdpbk5hbWV9LmAsbz17fSxhPWUudGZfc3RvcmFnZS5nZXRVcmxIYXNoRGljdCgpO2ZvcihsZXQgcyBpbiBhKXMuc3RhcnRzV2l0aChyKSYmKG9bcy5zdWJzdHJpbmcoci5sZW5ndGgpXT1hW3NdKTtyZXR1cm4gb30pLHRoaXMuc3RvcmUuc2VsZWN0KFhoKS5waXBlKFZlKGk9Pm51bGwhPT1pKSx1aSgpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmlwYy5icm9hZGNhc3QoeWQuREFUQV9SRUxPQURFRCx2b2lkIDApfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oc2cpLE8oa2UpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxBMT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe2xldCBlPXRoaXMuc3RvcmUuc2VsZWN0KHJvKS5waXBlKGhuKGk9Pmk/dW4oaS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoRWMse2V4cGVyaW1lbnRJZDpvfSkpKS5waXBlKFUobz0+by5mbGF0KCkpLHVpKChvLGEpPT5vLmxlbmd0aD09PWEubGVuZ3RoJiZvLmV2ZXJ5KChzLGwpPT5hW2xdLmlkPT09cy5pZCkpLFUobz0+by5tYXAoKHtuYW1lOmF9KT0+YSkpKTpxdChbXSkpKTtlLnN1YnNjcmliZShpPT57dGhpcy5pcGMuYnJvYWRjYXN0KHlkLlJVTlNfQ0hBTkdFRCxpKX0pLHRoaXMuaXBjLmxpc3Rlbih5ZC5HRVRfUlVOUywoKT0+ZS5waXBlKHp0KDEpKS50b1Byb21pc2UoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oc2cpLE8oa2UpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxSMT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7aS5pbml0KCksZS5pbml0KCl9cmVnaXN0ZXJQbHVnaW5JZnJhbWUoZSxpKXshZnVuY3Rpb24obix0KXt5Ny5zZXQobix7cGx1Z2luTmFtZTp0fSl9KGUsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oQTEpLE8oSTEpKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7cHJvdmlkZXJzOltzZyxJMSxBMV0saW1wb3J0czpbVWgsenMsRTFdfSksbn0pKCksbGc9eWUoIltBbGVydF0gQWxlcnQgUmVwb3J0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxDNz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuYWxlcnRBY3Rpb25Nb2R1bGU9cix0aGlzLnJlcG9ydFJlZ2lzdGVyZWRBY3Rpb25BbGVydHMkPU9yKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoVnQobz0+e2xldCBhPXRoaXMuYWxlcnRBY3Rpb25Nb2R1bGUuZ2V0QWxlcnRGcm9tQWN0aW9uKG8pO2EmJnRoaXMuc3RvcmUuZGlzcGF0Y2gobGcoYSkpfSkpLHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFdvKSxPKGtlKSxPKENjKSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksUDBlPV9yKHtsYXRlc3RBbGVydDpudWxsfSxFZShsZywobix7bG9jYWxpemVkTWVzc2FnZTp0LGZvbGxvd3VwQWN0aW9uOmV9KT0+e2xldCBpPXtsb2NhbGl6ZWRNZXNzYWdlOnQsY3JlYXRlZDpEYXRlLm5vdygpfTtyZXR1cm4gZSYmKGkuZm9sbG93dXBBY3Rpb249ZSksey4uLm4sbGF0ZXN0QWxlcnQ6aX19KSk7ZnVuY3Rpb24gTTcobix0KXtyZXR1cm4gUDBlKG4sdCl9dHJ5e2EyPXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2h7YTI9ITF9dmFyIGNnLE5iLGsxLEVmLG8yLCRuPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fcGxhdGZvcm1JZD1lLHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/YncodGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYhYTIpJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpLHRoaXMuRklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oaGMpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx3Nz1bImNvbG9yIiwiYnV0dG9uIiwiY2hlY2tib3giLCJkYXRlIiwiZGF0ZXRpbWUtbG9jYWwiLCJlbWFpbCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsIm1vbnRoIiwibnVtYmVyIiwicGFzc3dvcmQiLCJyYWRpbyIsInJhbmdlIiwicmVzZXQiLCJzZWFyY2giLCJzdWJtaXQiLCJ0ZWwiLCJ0ZXh0IiwidGltZSIsInVybCIsIndlZWsiXTtmdW5jdGlvbiBzMigpe2lmKGNnKXJldHVybiBjZztpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIGNnPW5ldyBTZXQodzcpO2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGNnPW5ldyBTZXQodzcuZmlsdGVyKHQ9PihuLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbi50eXBlPT09dCkpKX1mdW5jdGlvbiBZbyhuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihudWxsPT1OYiYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDooKT0+TmI9ITB9KSl9ZmluYWxseXtOYj1OYnx8ITF9cmV0dXJuIE5ifSgpP246ISFuLmNhcHR1cmV9ZnVuY3Rpb24gUDEoKXtpZihudWxsPT1FZil7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgRWxlbWVudHx8IUVsZW1lbnQpcmV0dXJuIEVmPSExO2lmKCJzY3JvbGxCZWhhdmlvciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpRWY9ITA7ZWxzZXtsZXQgbj1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbztFZj0hIW4mJiEvXHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdChuLnRvU3RyaW5nKCkpfX1yZXR1cm4gRWZ9ZnVuY3Rpb24gZGcoKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIDA7aWYobnVsbD09azEpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9bi5zdHlsZTtuLmRpcj0icnRsIix0LndpZHRoPSIxcHgiLHQub3ZlcmZsb3c9ImF1dG8iLHQudmlzaWJpbGl0eT0iaGlkZGVuIix0LnBvaW50ZXJFdmVudHM9Im5vbmUiLHQucG9zaXRpb249ImFic29sdXRlIjtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpPWUuc3R5bGU7aS53aWR0aD0iMnB4IixpLmhlaWdodD0iMXB4IixuLmFwcGVuZENoaWxkKGUpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksazE9MCwwPT09bi5zY3JvbGxMZWZ0JiYobi5zY3JvbGxMZWZ0PTEsazE9MD09PW4uc2Nyb2xsTGVmdD8xOjIpLG4ucmVtb3ZlKCl9cmV0dXJuIGsxfWZ1bmN0aW9uIE8xKG4pe2lmKGZ1bmN0aW9uKCl7aWYobnVsbD09bzIpe2xldCBuPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO28yPSEoIW58fCFuLmNyZWF0ZVNoYWRvd1Jvb3QmJiFuLmF0dGFjaFNoYWRvdyl9cmV0dXJuIG8yfSgpKXtsZXQgdD1uLmdldFJvb3ROb2RlP24uZ2V0Um9vdE5vZGUoKTpudWxsO2lmKHR5cGVvZiBTaGFkb3dSb290PCJ1IiYmU2hhZG93Um9vdCYmdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQmIoKXtsZXQgbj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudD9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGw7Zm9yKDtuJiZuLnNoYWRvd1Jvb3Q7KXtsZXQgdD1uLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtpZih0PT09bilicmVhaztuPXR9cmV0dXJuIG59ZnVuY3Rpb24gZHMobil7cmV0dXJuIG4uY29tcG9zZWRQYXRoP24uY29tcG9zZWRQYXRoKClbMF06bi50YXJnZXR9ZnVuY3Rpb24gVmIoKXtyZXR1cm4gdHlwZW9mIF9fa2FybWFfXzwidSImJiEhX19rYXJtYV9ffHx0eXBlb2YgamFzbWluZTwidSImJiEhamFzbWluZXx8dHlwZW9mIGplc3Q8InUiJiYhIWplc3R8fHR5cGVvZiBNb2NoYTwidSImJiEhTW9jaGF9ZnVuY3Rpb24geXIobiwuLi50KXtyZXR1cm4gdC5sZW5ndGg/dC5zb21lKGU9Pm5bZV0pOm4uYWx0S2V5fHxuLnNoaWZ0S2V5fHxuLmN0cmxLZXl8fG4ubWV0YUtleX1mdW5jdGlvbiBVdChuKXtyZXR1cm4gbnVsbCE9biYmImZhbHNlIiE9YCR7bn1gfWZ1bmN0aW9uIERpKG4sdD0wKXtyZXR1cm4gbDIobik/TnVtYmVyKG4pOnR9ZnVuY3Rpb24gbDIobil7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQobikpJiYhaXNOYU4oTnVtYmVyKG4pKX1mdW5jdGlvbiB1ZyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX1mdW5jdGlvbiBacihuKXtyZXR1cm4gbnVsbD09bj8iIjoic3RyaW5nIj09dHlwZW9mIG4/bjpgJHtufXB4YH1mdW5jdGlvbiBWYShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGJlP24ubmF0aXZlRWxlbWVudDpufXZhciBmZyxFNz0oKCk9PntjbGFzcyBue2NyZWF0ZShlKXtyZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI+InUiP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEwwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PWUsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfW5nT25EZXN0cm95KCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoaSkpfW9ic2VydmUoZSl7bGV0IGk9VmEoZSk7cmV0dXJuIG5ldyBlbihyPT57bGV0IGE9dGhpcy5fb2JzZXJ2ZUVsZW1lbnQoaSkuc3Vic2NyaWJlKHIpO3JldHVybigpPT57YS51bnN1YnNjcmliZSgpLHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoaSl9fSl9X29ic2VydmVFbGVtZW50KGUpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGUpKXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50Kys7ZWxzZXtsZXQgaT1uZXcgQWUscj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUobz0+aS5uZXh0KG8pKTtyJiZyLm9ic2VydmUoZSx7Y2hhcmFjdGVyRGF0YTohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLHRoaXMuX29ic2VydmVkRWxlbWVudHMuc2V0KGUse29ic2VydmVyOnIsc3RyZWFtOmksY291bnQ6MX0pfXJldHVybiB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5zdHJlYW19X3Vub2JzZXJ2ZUVsZW1lbnQoZSl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkmJih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5jb3VudC0tLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50fHx0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoZSkpfV9jbGVhbnVwT2JzZXJ2ZXIoZSl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkpe2xldHtvYnNlcnZlcjppLHN0cmVhbTpyfT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKTtpJiZpLmRpc2Nvbm5lY3QoKSxyLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEU3KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscGc9KCgpPT57Y2xhc3MgbntnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVV0KGUpLHRoaXMuX2Rpc2FibGVkP3RoaXMuX3Vuc3Vic2NyaWJlKCk6dGhpcy5fc3Vic2NyaWJlKCl9Z2V0IGRlYm91bmNlKCl7cmV0dXJuIHRoaXMuX2RlYm91bmNlfXNldCBkZWJvdW5jZShlKXt0aGlzLl9kZWJvdW5jZT1EaShlKSx0aGlzLl9zdWJzY3JpYmUoKX1jb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY29udGVudE9ic2VydmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuZXZlbnQ9bmV3IEwsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfW5nQWZ0ZXJDb250ZW50SW5pdCgpeyF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2xldCBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/ZS5waXBlKENyKHRoaXMuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KX1fdW5zdWJzY3JpYmUoKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEwwZSksQyhiZSksQyhhdCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtPYnNlcnZlQ29udGVudCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImRpc2FibGVkIl0sZGVib3VuY2U6ImRlYm91bmNlIn0sb3V0cHV0czp7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0sZXhwb3J0QXM6WyJjZGtPYnNlcnZlQ29udGVudCJdfSksbn0pKCksUHU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbRTddfSksbn0pKCksVDc9bmV3IFNldCxOMGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX21hdGNoTWVkaWE9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ3aW5kb3cubWF0Y2hNZWRpYT93aW5kb3cubWF0Y2hNZWRpYS5iaW5kKHdpbmRvdyk6VjBlfW1hdGNoTWVkaWEoZSl7cmV0dXJuKHRoaXMuX3BsYXRmb3JtLldFQktJVHx8dGhpcy5fcGxhdGZvcm0uQkxJTkspJiZmdW5jdGlvbihuKXtpZighVDcuaGFzKG4pKXRyeXtmZ3x8KChmZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZmcpKSxmZy5zaGVldCYmKGZnLnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke259IHtib2R5eyB9fWAsMCksVDcuYWRkKG4pKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX0oZSksdGhpcy5fbWF0Y2hNZWRpYShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTygkbikpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIFYwZShuKXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PW58fCIiPT09bixtZWRpYTpuLGFkZExpc3RlbmVyOigpPT57fSxyZW1vdmVMaXN0ZW5lcjooKT0+e319fXZhciBPdT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fbWVkaWFNYXRjaGVyPWUsdGhpcy5fem9uZT1pLHRoaXMuX3F1ZXJpZXM9bmV3IE1hcCx0aGlzLl9kZXN0cm95U3ViamVjdD1uZXcgQWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX1pc01hdGNoZWQoZSl7cmV0dXJuIEQ3KHVnKGUpKS5zb21lKHI9PnRoaXMuX3JlZ2lzdGVyUXVlcnkocikubXFsLm1hdGNoZXMpfW9ic2VydmUoZSl7bGV0IG89dW4oRDcodWcoZSkpLm1hcChhPT50aGlzLl9yZWdpc3RlclF1ZXJ5KGEpLm9ic2VydmFibGUpKTtyZXR1cm4gbz0kZChvLnBpcGUoenQoMSkpLG8ucGlwZSgkYSgxKSxDcigwKSkpLG8ucGlwZShVKGE9PntsZXQgcz17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIGEuZm9yRWFjaCgoe21hdGNoZXM6bCxxdWVyeTpjfSk9PntzLm1hdGNoZXM9cy5tYXRjaGVzfHxsLHMuYnJlYWtwb2ludHNbY109bH0pLHN9KSl9X3JlZ2lzdGVyUXVlcnkoZSl7aWYodGhpcy5fcXVlcmllcy5oYXMoZSkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KGUpO2xldCBpPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKGUpLG89e29ic2VydmFibGU6bmV3IGVuKGE9PntsZXQgcz1sPT50aGlzLl96b25lLnJ1bigoKT0+YS5uZXh0KGwpKTtyZXR1cm4gaS5hZGRMaXN0ZW5lcihzKSwoKT0+e2kucmVtb3ZlTGlzdGVuZXIocyl9fSkucGlwZShObihpKSxVKCh7bWF0Y2hlczphfSk9Pih7cXVlcnk6ZSxtYXRjaGVzOmF9KSksb3QodGhpcy5fZGVzdHJveVN1YmplY3QpKSxtcWw6aX07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KGUsbyksb319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhOMGUpLE8oYXQpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBENyhuKXtyZXR1cm4gbi5tYXAodD0+dC5zcGxpdCgiLCIpKS5yZWR1Y2UoKHQsZSk9PnQuY29uY2F0KGUpKS5tYXAodD0+dC50cmltKCkpfWZ1bmN0aW9uIEIxKG4sdCl7cmV0dXJuKG4uZ2V0QXR0cmlidXRlKHQpfHwiIikubWF0Y2goL1xTKy9nKXx8W119dmFyIE83PSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZSIsTDE9ImNkay1kZXNjcmliZWRieS1ob3N0IixmMj0wLEgxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX21lc3NhZ2VSZWdpc3RyeT1uZXcgTWFwLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwsdGhpcy5faWQ9IiIrZjIrKyx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX2lkPXBpKCRwKSsiLSIrZjIrK31kZXNjcmliZShlLGkscil7aWYoIXRoaXMuX2NhbkJlRGVzY3JpYmVkKGUsaSkpcmV0dXJuO2xldCBvPXUyKGkscik7InN0cmluZyIhPXR5cGVvZiBpPyhJNyhpLHRoaXMuX2lkKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KG8se21lc3NhZ2VFbGVtZW50OmkscmVmZXJlbmNlQ291bnQ6MH0pKTp0aGlzLl9tZXNzYWdlUmVnaXN0cnkuaGFzKG8pfHx0aGlzLl9jcmVhdGVNZXNzYWdlRWxlbWVudChpLHIpLHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLG8pfHx0aGlzLl9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsbyl9cmVtb3ZlRGVzY3JpcHRpb24oZSxpLHIpe2lmKCFpfHwhdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm47bGV0IG89dTIoaSxyKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZSxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLG8pLCJzdHJpbmciPT10eXBlb2YgaSl7bGV0IGE9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChvKTthJiYwPT09YS5yZWZlcmVuY2VDb3VudCYmdGhpcy5fZGVsZXRlTWVzc2FnZUVsZW1lbnQobyl9MD09PXRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCYmKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7TDF9PSIke3RoaXMuX2lkfSJdYCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZVtpXSksZVtpXS5yZW1vdmVBdHRyaWJ1dGUoTDEpO3RoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5yZW1vdmUoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcj1udWxsLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5jbGVhcigpfV9jcmVhdGVNZXNzYWdlRWxlbWVudChlLGkpe2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0k3KHIsdGhpcy5faWQpLHIudGV4dENvbnRlbnQ9ZSxpJiZyLnNldEF0dHJpYnV0ZSgicm9sZSIsaSksdGhpcy5fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KHUyKGUsaSkse21lc3NhZ2VFbGVtZW50OnIscmVmZXJlbmNlQ291bnQ6MH0pfV9kZWxldGVNZXNzYWdlRWxlbWVudChlKXt0aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGUpPy5tZXNzYWdlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmRlbGV0ZShlKX1fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKXtpZih0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcilyZXR1cm47bGV0IGU9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLWNvbnRhaW5lciIsaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtlfVtwbGF0Zm9ybT0ic2VydmVyIl1gKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpW29dLnJlbW92ZSgpO2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixyLmNsYXNzTGlzdC5hZGQoZSksci5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdGhpcy5fcGxhdGZvcm0mJiF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnIuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInNlcnZlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksdGhpcy5fbWVzc2FnZXNDb250YWluZXI9cn1fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZSl7bGV0IGk9QjEoZSwiYXJpYS1kZXNjcmliZWRieSIpLmZpbHRlcihyPT4wIT1yLmluZGV4T2YoTzcpKTtlLnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsaS5qb2luKCIgIikpfV9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsaSl7bGV0IHI9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChpKTsoZnVuY3Rpb24obix0LGUpe2xldCBpPUIxKG4sdCk7aS5zb21lKHI9PnIudHJpbSgpPT1lLnRyaW0oKSl8fChpLnB1c2goZS50cmltKCkpLG4uc2V0QXR0cmlidXRlKHQsaS5qb2luKCIgIikpKX0pKGUsImFyaWEtZGVzY3JpYmVkYnkiLHIubWVzc2FnZUVsZW1lbnQuaWQpLGUuc2V0QXR0cmlidXRlKEwxLHRoaXMuX2lkKSxyLnJlZmVyZW5jZUNvdW50Kyt9X3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UoZSxpKXtsZXQgcj10aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGkpO3IucmVmZXJlbmNlQ291bnQtLSxmdW5jdGlvbihuLHQsZSl7bGV0IHI9QjEobix0KS5maWx0ZXIobz0+byE9ZS50cmltKCkpO3IubGVuZ3RoP24uc2V0QXR0cmlidXRlKHQsci5qb2luKCIgIikpOm4ucmVtb3ZlQXR0cmlidXRlKHQpfShlLCJhcmlhLWRlc2NyaWJlZGJ5IixyLm1lc3NhZ2VFbGVtZW50LmlkKSxlLnJlbW92ZUF0dHJpYnV0ZShMMSl9X2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLGkpe2xldCByPUIxKGUsImFyaWEtZGVzY3JpYmVkYnkiKSxvPXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoaSksYT1vJiZvLm1lc3NhZ2VFbGVtZW50LmlkO3JldHVybiEhYSYmLTEhPXIuaW5kZXhPZihhKX1fY2FuQmVEZXNjcmliZWQoZSxpKXtpZighdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm4hMTtpZihpJiYib2JqZWN0Ij09dHlwZW9mIGkpcmV0dXJuITA7bGV0IHI9bnVsbD09aT8iIjpgJHtpfWAudHJpbSgpLG89ZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtyZXR1cm4hKCFyfHxvJiZvLnRyaW0oKT09PXIpfV9pc0VsZW1lbnROb2RlKGUpe3JldHVybiBlLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGt0KSxPKCRuKSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gdTIobix0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/YCR7dHx8IiJ9LyR7bn1gOm59ZnVuY3Rpb24gSTcobix0KXtuLmlkfHwobi5pZD1gJHtPN30tJHt0fS0ke2YyKyt9YCl9dmFyIFYxPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2l0ZW1zPXQsdGhpcy5fYWN0aXZlSXRlbUluZGV4PS0xLHRoaXMuX2FjdGl2ZUl0ZW09bnVsbCx0aGlzLl93cmFwPSExLHRoaXMuX2xldHRlcktleVN0cmVhbT1uZXcgQWUsdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXluLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9W10sdGhpcy5faG9tZUFuZEVuZD0hMSx0aGlzLl9wYWdlVXBBbmREb3duPXtlbmFibGVkOiExLGRlbHRhOjEwfSx0aGlzLl9za2lwUHJlZGljYXRlRm49ZT0+ZS5kaXNhYmxlZCx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgQWUsdGhpcy5jaGFuZ2U9bmV3IEFlLHQgaW5zdGFuY2VvZiBJcyYmKHRoaXMuX2l0ZW1DaGFuZ2VzU3Vic2NyaXB0aW9uPXQuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e2lmKHRoaXMuX2FjdGl2ZUl0ZW0pe2xldCByPWUudG9BcnJheSgpLmluZGV4T2YodGhpcy5fYWN0aXZlSXRlbSk7cj4tMSYmciE9PXRoaXMuX2FjdGl2ZUl0ZW1JbmRleCYmKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1yKX19KSl9c2tpcFByZWRpY2F0ZSh0KXtyZXR1cm4gdGhpcy5fc2tpcFByZWRpY2F0ZUZuPXQsdGhpc313aXRoV3JhcCh0PSEwKXtyZXR1cm4gdGhpcy5fd3JhcD10LHRoaXN9d2l0aFZlcnRpY2FsT3JpZW50YXRpb24odD0hMCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsPXQsdGhpc313aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc313aXRoQWxsb3dlZE1vZGlmaWVyS2V5cyh0KXtyZXR1cm4gdGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cz10LHRoaXN9d2l0aFR5cGVBaGVhZCh0PTIwMCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj10aGlzLl9sZXR0ZXJLZXlTdHJlYW0ucGlwZShWdChlPT50aGlzLl9wcmVzc2VkTGV0dGVycy5wdXNoKGUpKSxDcih0KSxWZSgoKT0+dGhpcy5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjApLFUoKCk9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLmpvaW4oIiIpKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLl9nZXRJdGVtc0FycmF5KCk7Zm9yKGxldCByPTE7cjxpLmxlbmd0aCsxO3IrKyl7bGV0IG89KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCtyKSVpLmxlbmd0aCxhPWlbb107aWYoIXRoaXMuX3NraXBQcmVkaWNhdGVGbihhKSYmMD09PWEuZ2V0TGFiZWwoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5pbmRleE9mKGUpKXt0aGlzLnNldEFjdGl2ZUl0ZW0obyk7YnJlYWt9fXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdfSksdGhpc31jYW5jZWxUeXBlYWhlYWQoKXtyZXR1cm4gdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpc313aXRoSG9tZUFuZEVuZCh0PSEwKXtyZXR1cm4gdGhpcy5faG9tZUFuZEVuZD10LHRoaXN9d2l0aFBhZ2VVcERvd24odD0hMCxlPTEwKXtyZXR1cm4gdGhpcy5fcGFnZVVwQW5kRG93bj17ZW5hYmxlZDp0LGRlbHRhOmV9LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtsZXQgZT10aGlzLl9hY3RpdmVJdGVtO3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KSx0aGlzLl9hY3RpdmVJdGVtIT09ZSYmdGhpcy5jaGFuZ2UubmV4dCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgpfW9uS2V5ZG93bih0KXtsZXQgZT10LmtleUNvZGUscj1bImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiXS5ldmVyeShvPT4hdFtvXXx8dGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cy5pbmRleE9mKG8pPi0xKTtzd2l0Y2goZSl7Y2FzZSA5OnJldHVybiB2b2lkIHRoaXMudGFiT3V0Lm5leHQoKTtjYXNlIDQwOmlmKHRoaXMuX3ZlcnRpY2FsJiZyKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzg6aWYodGhpcy5fdmVydGljYWwmJnIpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzk6aWYodGhpcy5faG9yaXpvbnRhbCYmcil7InJ0bCI9PT10aGlzLl9ob3Jpem9udGFsP3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk6dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM3OmlmKHRoaXMuX2hvcml6b250YWwmJnIpeyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldE5leHRJdGVtQWN0aXZlKCk6dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNjppZih0aGlzLl9ob21lQW5kRW5kJiZyKXt0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM1OmlmKHRoaXMuX2hvbWVBbmRFbmQmJnIpe3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzMzppZih0aGlzLl9wYWdlVXBBbmREb3duLmVuYWJsZWQmJnIpe2xldCBvPXRoaXMuX2FjdGl2ZUl0ZW1JbmRleC10aGlzLl9wYWdlVXBBbmREb3duLmRlbHRhO3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KG8+MD9vOjAsMSk7YnJlYWt9cmV0dXJuO2Nhc2UgMzQ6aWYodGhpcy5fcGFnZVVwQW5kRG93bi5lbmFibGVkJiZyKXtsZXQgbz10aGlzLl9hY3RpdmVJdGVtSW5kZXgrdGhpcy5fcGFnZVVwQW5kRG93bi5kZWx0YSxhPXRoaXMuX2dldEl0ZW1zQXJyYXkoKS5sZW5ndGg7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgobzxhP286YS0xLC0xKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCgocnx8eXIodCwic2hpZnRLZXkiKSkmJih0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTcpJiZ0aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX1nZXQgYWN0aXZlSXRlbUluZGV4KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleH1nZXQgYWN0aXZlSXRlbSgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfWlzVHlwaW5nKCl7cmV0dXJuIHRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wfXNldEZpcnN0SXRlbUFjdGl2ZSgpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9c2V0TGFzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9pdGVtcy5sZW5ndGgtMSwtMSl9c2V0TmV4dEl0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MD90aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKDEpfXNldFByZXZpb3VzSXRlbUFjdGl2ZSgpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9dXBkYXRlQWN0aXZlSXRlbSh0KXtsZXQgZT10aGlzLl9nZXRJdGVtc0FycmF5KCksaT0ibnVtYmVyIj09dHlwZW9mIHQ/dDplLmluZGV4T2YodCk7dGhpcy5fYWN0aXZlSXRlbT1lW2ldPz9udWxsLHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1pfWRlc3Ryb3koKXt0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9pdGVtQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW0uY29tcGxldGUoKSx0aGlzLnRhYk91dC5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fcHJlc3NlZExldHRlcnM9W119X3NldEFjdGl2ZUl0ZW1CeURlbHRhKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfV9zZXRBY3RpdmVJbldyYXBNb2RlKHQpe2xldCBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKTtmb3IobGV0IGk9MTtpPD1lLmxlbmd0aDtpKyspe2xldCByPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCppK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbcl0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShyKX19X3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5fYWN0aXZlSXRlbUluZGV4K3QsdCl9X3NldEFjdGl2ZUl0ZW1CeUluZGV4KHQsZSl7bGV0IGk9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2lmKGlbdF0pe2Zvcig7dGhpcy5fc2tpcFByZWRpY2F0ZUZuKGlbdF0pOylpZighaVt0Kz1lXSlyZXR1cm47dGhpcy5zZXRBY3RpdmVJdGVtKHQpfX1fZ2V0SXRlbXNBcnJheSgpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIElzP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKTp0aGlzLl9pdGVtc319LGhnPWNsYXNzIGV4dGVuZHMgVjF7c2V0QWN0aXZlSXRlbSh0KXt0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRJbmFjdGl2ZVN0eWxlcygpLHN1cGVyLnNldEFjdGl2ZUl0ZW0odCksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uc2V0QWN0aXZlU3R5bGVzKCl9fSxnZz1jbGFzcyBleHRlbmRzIFYxe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcmlnaW49InByb2dyYW0ifXNldEZvY3VzT3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7c3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5mb2N1cyh0aGlzLl9vcmlnaW4pfX0sVGY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lfWlzRGlzYWJsZWQoZSl7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuISEobi5vZmZzZXRXaWR0aHx8bi5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldENsaWVudFJlY3RzJiZuLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0oZSkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eX1pc1RhYmJhYmxlKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7bGV0IGk9ZnVuY3Rpb24obil7dHJ5e3JldHVybiBuLmZyYW1lRWxlbWVudH1jYXRjaHtyZXR1cm4gbnVsbH19KGZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fShlKSk7aWYoaSYmKC0xPT09QTcoaSl8fCF0aGlzLmlzVmlzaWJsZShpKSkpcmV0dXJuITE7bGV0IHI9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG89QTcoZSk7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKT8tMSE9PW86ISgiaWZyYW1lIj09PXJ8fCJvYmplY3QiPT09cnx8dGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksZT0iaW5wdXQiPT09dCYmbi50eXBlO3JldHVybiJ0ZXh0Ij09PWV8fCJwYXNzd29yZCI9PT1lfHwic2VsZWN0Ij09PXR8fCJ0ZXh0YXJlYSI9PT10fShlKSkmJigiYXVkaW8iPT09cj8hIWUuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiYtMSE9PW86InZpZGVvIj09PXI/LTEhPT1vJiYobnVsbCE9PW98fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1h8fGUuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKTplLnRhYkluZGV4Pj0wKX1pc0ZvY3VzYWJsZShlLGkpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4hZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiJpbnB1dCI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJiJoaWRkZW4iPT1uLnR5cGV9KG4pJiYoZnVuY3Rpb24obil7bGV0IHQ9bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10fHwic2VsZWN0Ij09PXR8fCJidXR0b24iPT09dHx8InRleHRhcmVhIj09PXR9KG4pfHxmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuImEiPT1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KG4pJiZuLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfShuKXx8bi5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxGNyhuKSl9KGUpJiYhdGhpcy5pc0Rpc2FibGVkKGUpJiYoaT8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKCRuKSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gRjcobil7aWYoIW4uaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx2b2lkIDA9PT1uLnRhYkluZGV4KXJldHVybiExO2xldCB0PW4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3JldHVybiEoIXR8fGlzTmFOKHBhcnNlSW50KHQsMTApKSl9ZnVuY3Rpb24gQTcobil7aWYoIUY3KG4pKXJldHVybiBudWxsO2xldCB0PXBhcnNlSW50KG4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKHQpPy0xOnR9dmFyIF9nPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2NoZWNrZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kb2N1bWVudD1yfWNyZWF0ZShlLGk9ITEpe3JldHVybiBuZXcgY2xhc3N7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZCh0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9Y29uc3RydWN0b3IodCxlLGkscixvPSExKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsb3x8dGhpcy5hdHRhY2hBbmNob3JzKCl9ZGVzdHJveSgpe2xldCB0PXRoaXMuX3N0YXJ0QW5jaG9yLGU9dGhpcy5fZW5kQW5jaG9yO3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLHQucmVtb3ZlKCkpLGUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxlLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudCh0KSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHt0fV0sIFtjZGtGb2N1c1JlZ2lvbiR7dH1dLCBbY2RrLWZvY3VzLSR7dH1dYCk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX1mb2N1c0luaXRpYWxFbGVtZW50KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtpZihlKXtpZighdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShlKSl7bGV0IGk9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoZSk7cmV0dXJuIGk/LmZvY3VzKHQpLCEhaX1yZXR1cm4gZS5mb2N1cyh0KSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KHQpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl7bGV0IGU9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWhhc0F0dGFjaGVkKCl7cmV0dXJuIHRoaXMuX2hhc0F0dGFjaGVkfV9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7bGV0IGU9dC5jaGlsZHJlbjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9ZVtpXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW47Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPWVbaV0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2NyZWF0ZUFuY2hvcigpe2xldCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLHQpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHR9X3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsZSl7dD9lLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik6ZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyh0KXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9lbmRBbmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKHQpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT90KCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoenQoMSkpLnN1YnNjcmliZSh0KX19KGUsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oVGYpLE8oYXQpLE8oa3QpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBIYihuKXtyZXR1cm4gMD09PW4uYnV0dG9uc3x8MD09PW4ub2Zmc2V0WCYmMD09PW4ub2Zmc2V0WX1mdW5jdGlvbiB6YihuKXtsZXQgdD1uLnRvdWNoZXMmJm4udG91Y2hlc1swXXx8bi5jaGFuZ2VkVG91Y2hlcyYmbi5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCF0fHwtMSE9PXQuaWRlbnRpZmllcnx8bnVsbCE9dC5yYWRpdXNYJiYxIT09dC5yYWRpdXNYfHxudWxsIT10LnJhZGl1c1kmJjEhPT10LnJhZGl1c1kpfW5ldyBpZSgiRk9DVVNfVFJBUF9JTkVSVF9TVFJBVEVHWSIpO3ZhciBhX2U9bmV3IGllKCJjZGstaW5wdXQtbW9kYWxpdHktZGV0ZWN0b3Itb3B0aW9ucyIpLHNfZT17aWdub3JlS2V5czpbMTgsMTcsMjI0LDkxLDE2XX0sbWc9WW8oe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLGxfZT0oKCk9PntjbGFzcyBue2dldCBtb3N0UmVjZW50TW9kYWxpdHkoKXtyZXR1cm4gdGhpcy5fbW9kYWxpdHkudmFsdWV9Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW51bGwsdGhpcy5fbW9kYWxpdHk9bmV3IFJpKG51bGwpLHRoaXMuX2xhc3RUb3VjaE1zPTAsdGhpcy5fb25LZXlkb3duPWE9Pnt0aGlzLl9vcHRpb25zPy5pZ25vcmVLZXlzPy5zb21lKHM9PnM9PT1hLmtleUNvZGUpfHwodGhpcy5fbW9kYWxpdHkubmV4dCgia2V5Ym9hcmQiKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PWRzKGEpKX0sdGhpcy5fb25Nb3VzZWRvd249YT0+e0RhdGUubm93KCktdGhpcy5fbGFzdFRvdWNoTXM8NjUwfHwodGhpcy5fbW9kYWxpdHkubmV4dChIYihhKT8ia2V5Ym9hcmQiOiJtb3VzZSIpLHRoaXMuX21vc3RSZWNlbnRUYXJnZXQ9ZHMoYSkpfSx0aGlzLl9vblRvdWNoc3RhcnQ9YT0+e3piKGEpP3RoaXMuX21vZGFsaXR5Lm5leHQoImtleWJvYXJkIik6KHRoaXMuX2xhc3RUb3VjaE1zPURhdGUubm93KCksdGhpcy5fbW9kYWxpdHkubmV4dCgidG91Y2giKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PWRzKGEpKX0sdGhpcy5fb3B0aW9ucz17Li4uc19lLC4uLm99LHRoaXMubW9kYWxpdHlEZXRlY3RlZD10aGlzLl9tb2RhbGl0eS5waXBlKCRhKDEpKSx0aGlzLm1vZGFsaXR5Q2hhbmdlZD10aGlzLm1vZGFsaXR5RGV0ZWN0ZWQucGlwZSh1aSgpKSxlLmlzQnJvd3NlciYmaS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlkb3duLG1nKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sbWcpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LG1nKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kYWxpdHkuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleWRvd24sbWcpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sbWcpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hzdGFydCxtZykpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKCRuKSxPKGF0KSxPKGt0KSxPKGFfZSw4KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksY19lPW5ldyBpZSgibGl2ZUFubm91bmNlckVsZW1lbnQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksdV9lPW5ldyBpZSgiTElWRV9BTk5PVU5DRVJfREVGQVVMVF9PUFRJT05TIikscF9lPTAseWc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1vLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fbGl2ZUVsZW1lbnQ9ZXx8dGhpcy5fY3JlYXRlTGl2ZUVsZW1lbnQoKX1hbm5vdW5jZShlLC4uLmkpe2xldCBvLGEscj10aGlzLl9kZWZhdWx0T3B0aW9ucztyZXR1cm4gMT09PWkubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGlbMF0/YT1pWzBdOltvLGFdPWksdGhpcy5jbGVhcigpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLG98fChvPXImJnIucG9saXRlbmVzcz9yLnBvbGl0ZW5lc3M6InBvbGl0ZSIpLG51bGw9PWEmJnImJihhPXIuZHVyYXRpb24pLHRoaXMuX2xpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIixvKSx0aGlzLl9saXZlRWxlbWVudC5pZCYmdGhpcy5fZXhwb3NlQW5ub3VuY2VyVG9Nb2RhbHModGhpcy5fbGl2ZUVsZW1lbnQuaWQpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+KHRoaXMuX2N1cnJlbnRQcm9taXNlfHwodGhpcy5fY3VycmVudFByb21pc2U9bmV3IFByb21pc2Uocz0+dGhpcy5fY3VycmVudFJlc29sdmU9cykpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLHRoaXMuX3ByZXZpb3VzVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9ZSwibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5jbGVhcigpLGEpKSx0aGlzLl9jdXJyZW50UmVzb2x2ZSgpLHRoaXMuX2N1cnJlbnRQcm9taXNlPXRoaXMuX2N1cnJlbnRSZXNvbHZlPXZvaWQgMH0sMTAwKSx0aGlzLl9jdXJyZW50UHJvbWlzZSkpfWNsZWFyKCl7dGhpcy5fbGl2ZUVsZW1lbnQmJih0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD0iIil9bmdPbkRlc3Ryb3koKXtjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9saXZlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9jdXJyZW50UmVzb2x2ZT8uKCksdGhpcy5fY3VycmVudFByb21pc2U9dGhpcy5fY3VycmVudFJlc29sdmU9dm9pZCAwfV9jcmVhdGVMaXZlRWxlbWVudCgpe2xldCBlPSJjZGstbGl2ZS1hbm5vdW5jZXItZWxlbWVudCIsaT10aGlzLl9kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpLHI9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5yZW1vdmUoKTtyZXR1cm4gci5jbGFzc0xpc3QuYWRkKGUpLHIuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksci5pZD0iY2RrLWxpdmUtYW5ub3VuY2VyLSIrcF9lKyssdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKSxyfV9leHBvc2VBbm5vdW5jZXJUb01vZGFscyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdib2R5ID4gLmNkay1vdmVybGF5LWNvbnRhaW5lciBbYXJpYS1tb2RhbD0idHJ1ZSJdJyk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl0sYT1vLmdldEF0dHJpYnV0ZSgiYXJpYS1vd25zIik7YT8tMT09PWEuaW5kZXhPZihlKSYmby5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsYSsiICIrZSk6by5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGNfZSw4KSxPKGF0KSxPKGt0KSxPKHVfZSw4KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksZl9lPW5ldyBpZSgiY2RrLWZvY3VzLW1vbml0b3ItZGVmYXVsdC1vcHRpb25zIiksTjE9WW8oe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLGxyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxhKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvcj1yLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb249ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MCx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudD1uZXcgTWFwLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXI9KCk9Pnt0aGlzLl93aW5kb3dGb2N1c2VkPSEwLHRoaXMuX3dpbmRvd0ZvY3VzVGltZW91dElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl93aW5kb3dGb2N1c2VkPSExKX0sdGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3Rvcj1uZXcgQWUsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj1zPT57Zm9yKGxldCBjPWRzKHMpO2M7Yz1jLnBhcmVudEVsZW1lbnQpImZvY3VzIj09PXMudHlwZT90aGlzLl9vbkZvY3VzKHMsYyk6dGhpcy5fb25CbHVyKHMsYyl9LHRoaXMuX2RvY3VtZW50PW8sdGhpcy5fZGV0ZWN0aW9uTW9kZT1hPy5kZXRlY3Rpb25Nb2RlfHwwfW1vbml0b3IoZSxpPSExKXtsZXQgcj1WYShlKTtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwxIT09ci5ub2RlVHlwZSlyZXR1cm4gcXQobnVsbCk7bGV0IG89TzEocil8fHRoaXMuX2dldERvY3VtZW50KCksYT10aGlzLl9lbGVtZW50SW5mby5nZXQocik7aWYoYSlyZXR1cm4gaSYmKGEuY2hlY2tDaGlsZHJlbj0hMCksYS5zdWJqZWN0O2xldCBzPXtjaGVja0NoaWxkcmVuOmksc3ViamVjdDpuZXcgQWUscm9vdE5vZGU6b307cmV0dXJuIHRoaXMuX2VsZW1lbnRJbmZvLnNldChyLHMpLHRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKHMpLHMuc3ViamVjdH1zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1WYShlKSxyPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKTtyJiYoci5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUoaSksdGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKHIpKX1mb2N1c1ZpYShlLGkscil7bGV0IG89VmEoZSk7bz09PXRoaXMuX2dldERvY3VtZW50KCkuYWN0aXZlRWxlbWVudD90aGlzLl9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKG8pLmZvckVhY2goKFtzLGxdKT0+dGhpcy5fb3JpZ2luQ2hhbmdlZChzLGksbCkpOih0aGlzLl9zZXRPcmlnaW4oaSksImZ1bmN0aW9uIj09dHlwZW9mIG8uZm9jdXMmJm8uZm9jdXMocikpfW5nT25EZXN0cm95KCl7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaCgoZSxpKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhpKSl9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fZ2V0Rm9jdXNPcmlnaW4oZSl7cmV0dXJuIHRoaXMuX29yaWdpbj90aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj90aGlzLl9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKGUpPyJ0b3VjaCI6InByb2dyYW0iOnRoaXMuX29yaWdpbjp0aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOmUmJnRoaXMuX2lzTGFzdEludGVyYWN0aW9uRnJvbUlucHV0TGFiZWwoZSk/Im1vdXNlIjoicHJvZ3JhbSJ9X3Nob3VsZEJlQXR0cmlidXRlZFRvVG91Y2goZSl7cmV0dXJuIDE9PT10aGlzLl9kZXRlY3Rpb25Nb2RlfHwhIWU/LmNvbnRhaW5zKHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5fbW9zdFJlY2VudFRhcmdldCl9X3NldENsYXNzZXMoZSxpKXtlLmNsYXNzTGlzdC50b2dnbGUoImNkay1mb2N1c2VkIiwhIWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1pKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay1rZXlib2FyZC1mb2N1c2VkIiwia2V5Ym9hcmQiPT09aSksZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09aSl9X3NldE9yaWdpbihlLGk9ITEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX29yaWdpbj1lLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSJ0b3VjaCI9PT1lJiZpLDA9PT10aGlzLl9kZXRlY3Rpb25Nb2RlJiYoY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCksdGhpcy5fb3JpZ2luVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuX29yaWdpbj1udWxsLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPzY1MDoxKSl9KX1fb25Gb2N1cyhlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKSxvPWRzKGUpOyFyfHwhci5jaGVja0NoaWxkcmVuJiZpIT09b3x8dGhpcy5fb3JpZ2luQ2hhbmdlZChpLHRoaXMuX2dldEZvY3VzT3JpZ2luKG8pLHIpfV9vbkJsdXIoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSk7IXJ8fHIuY2hlY2tDaGlsZHJlbiYmZS5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmaS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbWl0T3JpZ2luKHIsbnVsbCkpfV9lbWl0T3JpZ2luKGUsaSl7ZS5zdWJqZWN0Lm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9PmUuc3ViamVjdC5uZXh0KGkpKX1fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47bGV0IGk9ZS5yb290Tm9kZSxyPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKXx8MDtyfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLE4xKSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsTjEpfSksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGkscisxKSwxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmKHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dldFdpbmRvdygpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyKX0pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5tb2RhbGl0eURldGVjdGVkLnBpcGUob3QodGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3RvcikpLnN1YnNjcmliZShvPT57dGhpcy5fc2V0T3JpZ2luKG8sITApfSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcnMoZSl7bGV0IGk9ZS5yb290Tm9kZTtpZih0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5oYXMoaSkpe2xldCByPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKTtyPjE/dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGksci0xKTooaS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixOMSksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLE4xKSx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5kZWxldGUoaSkpfS0tdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50fHwodGhpcy5fZ2V0V2luZG93KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXIpLHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubmV4dCgpLGNsZWFyVGltZW91dCh0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCkpfV9vcmlnaW5DaGFuZ2VkKGUsaSxyKXt0aGlzLl9zZXRDbGFzc2VzKGUsaSksdGhpcy5fZW1pdE9yaWdpbihyLGkpLHRoaXMuX2xhc3RGb2N1c09yaWdpbj1pfV9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKChyLG8pPT57KG89PT1lfHxyLmNoZWNrQ2hpbGRyZW4mJm8uY29udGFpbnMoZSkpJiZpLnB1c2goW28scl0pfSksaX1faXNMYXN0SW50ZXJhY3Rpb25Gcm9tSW5wdXRMYWJlbChlKXtsZXR7X21vc3RSZWNlbnRUYXJnZXQ6aSxtb3N0UmVjZW50TW9kYWxpdHk6cn09dGhpcy5faW5wdXRNb2RhbGl0eURldGVjdG9yO2lmKCJtb3VzZSIhPT1yfHwhaXx8aT09PWV8fCJJTlBVVCIhPT1lLm5vZGVOYW1lJiYiVEVYVEFSRUEiIT09ZS5ub2RlTmFtZXx8ZS5kaXNhYmxlZClyZXR1cm4hMTtsZXQgbz1lLmxhYmVscztpZihvKWZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKWlmKG9bYV0uY29udGFpbnMoaSkpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oYXQpLE8oJG4pLE8obF9lKSxPKGt0LDgpLE8oZl9lLDgpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx4Mj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2ZvY3VzT3JpZ2luPW51bGwsdGhpcy5jZGtGb2N1c0NoYW5nZT1uZXcgTH1nZXQgZm9jdXNPcmlnaW4oKXtyZXR1cm4gdGhpcy5fZm9jdXNPcmlnaW59bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX21vbml0b3JTdWJzY3JpcHRpb249dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IoZSwxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoImNka01vbml0b3JTdWJ0cmVlRm9jdXMiKSkuc3Vic2NyaWJlKGk9Pnt0aGlzLl9mb2N1c09yaWdpbj1pLHRoaXMuY2RrRm9jdXNDaGFuZ2UuZW1pdChpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24mJnRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSksQyhscikpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIl0sWyIiLCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIiwiIl1dLG91dHB1dHM6e2Nka0ZvY3VzQ2hhbmdlOiJjZGtGb2N1c0NoYW5nZSJ9LGV4cG9ydEFzOlsiY2RrTW9uaXRvckZvY3VzIl19KSxufSkoKSxSNz0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLGs3PSJjZGstaGlnaC1jb250cmFzdC13aGl0ZS1vbi1ibGFjayIscDI9ImNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSIsQzI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPXBpKE91KS5vYnNlcnZlKCIoZm9yY2VkLWNvbG9yczogYWN0aXZlKSIpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlJiYodGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITEsdGhpcy5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSl9KX1nZXRIaWdoQ29udHJhc3RNb2RlKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gMDtsZXQgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiKDEsMiwzKSIsZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyxyPWkmJmkuZ2V0Q29tcHV0ZWRTdHlsZT9pLmdldENvbXB1dGVkU3R5bGUoZSk6bnVsbCxvPShyJiZyLmJhY2tncm91bmRDb2xvcnx8IiIpLnJlcGxhY2UoLyAvZywiIik7c3dpdGNoKGUucmVtb3ZlKCksbyl7Y2FzZSJyZ2IoMCwwLDApIjpjYXNlInJnYig0NSw1MCw1NCkiOmNhc2UicmdiKDMyLDMyLDMyKSI6cmV0dXJuIDI7Y2FzZSJyZ2IoMjU1LDI1NSwyNTUpIjpjYXNlInJnYigyNTUsMjUwLDIzOSkiOnJldHVybiAxfXJldHVybiAwfW5nT25EZXN0cm95KCl7dGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3Nlcygpe2lmKCF0aGlzLl9oYXNDaGVja2VkSGlnaENvbnRyYXN0TW9kZSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9kb2N1bWVudC5ib2R5KXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdDtlLnJlbW92ZShwMixSNyxrNyksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7bGV0IGk9dGhpcy5nZXRIaWdoQ29udHJhc3RNb2RlKCk7MT09PWk/ZS5hZGQocDIsUjcpOjI9PT1pJiZlLmFkZChwMixrNyl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKCRuKSxPKGt0KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksRGY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEMyKSl9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1B1XX0pLG59KSgpLG1fZT1uZXcgaWUoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBwaShrdCl9fSksZ19lPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pLEhpPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgTCxlJiYodGhpcy52YWx1ZT1mdW5jdGlvbihuKXtsZXQgdD1uPy50b0xvd2VyQ2FzZSgpfHwiIjtyZXR1cm4iYXV0byI9PT10JiZ0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yPy5sYW5ndWFnZT9nX2UudGVzdChuYXZpZ2F0b3IubGFuZ3VhZ2UpPyJydGwiOiJsdHIiOiJydGwiPT09dD8icnRsIjoibHRyIn0oKGUuYm9keT9lLmJvZHkuZGlyOm51bGwpfHwoZS5kb2N1bWVudEVsZW1lbnQ/ZS5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpfHwibHRyIikpfW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhtX2UsOCkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLE51PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHt9KSxufSkoKSx5X2U9WyJ0ZXh0Il0sUzI9KG5ldyBobCgiMTUuMi45IiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uU1RBTkRBUkRfQ1VSVkU9ImN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSIsbi5ERUNFTEVSQVRJT05fQ1VSVkU9ImN1YmljLWJlemllcigwLjAsMC4wLDAuMiwxKSIsbi5BQ0NFTEVSQVRJT05fQ1VSVkU9ImN1YmljLWJlemllcigwLjQsMC4wLDEsMSkiLG4uU0hBUlBfQ1VSVkU9ImN1YmljLWJlemllcigwLjQsMC4wLDAuNiwxKSIsbn0pKCkpLEUyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLkNPTVBMRVg9IjM3NW1zIixuLkVOVEVSSU5HPSIyMjVtcyIsbi5FWElUSU5HPSIxOTVtcyIsbn0pKCksejc9bmV3IGllKCJtYXQtc2FuaXR5LWNoZWNrcyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxRdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9zYW5pdHlDaGVja3M9aSx0aGlzLl9kb2N1bWVudD1yLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITEsZS5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzfHwodGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9X2NoZWNrSXNFbmFibGVkKGUpe3JldHVybiFWYigpJiYoImJvb2xlYW4iPT10eXBlb2YgdGhpcy5fc2FuaXR5Q2hlY2tzP3RoaXMuX3Nhbml0eUNoZWNrczohIXRoaXMuX3Nhbml0eUNoZWNrc1tlXSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oQzIpLE8oejcsOCksTyhrdCkpfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltOdSxOdV19KSxufSkoKTtmdW5jdGlvbiBLcihuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9VXQodCl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZWQ9ITF9fX1mdW5jdGlvbiBnbyhuLHQpe3JldHVybiBjbGFzcyBleHRlbmRzIG57Z2V0IGNvbG9yKCl7cmV0dXJuIHRoaXMuX2NvbG9yfXNldCBjb2xvcihlKXtsZXQgaT1lfHx0aGlzLmRlZmF1bHRDb2xvcjtpIT09dGhpcy5fY29sb3ImJih0aGlzLl9jb2xvciYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYG1hdC0ke3RoaXMuX2NvbG9yfWApLGkmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBtYXQtJHtpfWApLHRoaXMuX2NvbG9yPWkpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuZGVmYXVsdENvbG9yPXQsdGhpcy5jb2xvcj10fX19ZnVuY3Rpb24gUW8obil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntnZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9VXQodCl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX19fWZ1bmN0aW9uIHZkKG4sdD0wKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2dldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPy0xOnRoaXMuX3RhYkluZGV4fXNldCB0YWJJbmRleChlKXt0aGlzLl90YWJJbmRleD1udWxsIT1lP0RpKGUpOnRoaXMuZGVmYXVsdFRhYkluZGV4fWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuX3RhYkluZGV4PXQsdGhpcy5kZWZhdWx0VGFiSW5kZXg9dH19fWZ1bmN0aW9uIFViKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57dXBkYXRlRXJyb3JTdGF0ZSgpe2xldCB0PXRoaXMuZXJyb3JTdGF0ZSxvPSh0aGlzLmVycm9yU3RhdGVNYXRjaGVyfHx0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIpLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbD90aGlzLm5nQ29udHJvbC5jb250cm9sOm51bGwsdGhpcy5fcGFyZW50Rm9ybUdyb3VwfHx0aGlzLl9wYXJlbnRGb3JtKTtvIT09dCYmKHRoaXMuZXJyb3JTdGF0ZT1vLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5lcnJvclN0YXRlPSExfX19ZnVuY3Rpb24gamIobil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycz1bXSx0aGlzLmluaXRpYWxpemVkPW5ldyBlbihlPT57dGhpcy5faXNJbml0aWFsaXplZD90aGlzLl9ub3RpZnlTdWJzY3JpYmVyKGUpOnRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycy5wdXNoKGUpfSl9X21hcmtJbml0aWFsaXplZCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzLmZvckVhY2godGhpcy5fbm90aWZ5U3Vic2NyaWJlciksdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzPW51bGx9X25vdGlmeVN1YnNjcmliZXIodCl7dC5uZXh0KCksdC5jb21wbGV0ZSgpfX19bmV3IGllKCJNQVRfREFURV9MT0NBTEUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIHBpKGFkKX19KSxuZXcgaWUoIm1hdC1kYXRlLWZvcm1hdHMiKTt2YXIgSWY9KCgpPT57Y2xhc3Mgbntpc0Vycm9yU3RhdGUoZSxpKXtyZXR1cm4hIShlJiZlLmludmFsaWQmJihlLnRvdWNoZWR8fGkmJmkuc3VibWl0dGVkKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLE43PVlvKHtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9KSx3Mj17ZW50ZXJEdXJhdGlvbjoyMjUsZXhpdER1cmF0aW9uOjE1MH0sQjc9WW8oe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLFY3PVsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLEg3PVsibW91c2V1cCIsIm1vdXNlbGVhdmUiLCJ0b3VjaGVuZCIsInRvdWNoY2FuY2VsIl0sYmQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fdGFyZ2V0PXQsdGhpcy5fbmdab25lPWUsdGhpcy5fcGxhdGZvcm09cix0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IE1hcCx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSExLHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1WYShpKSl9ZmFkZUluUmlwcGxlKHQsZSxpPXt9KXtsZXQgcj10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz17Li4udzIsLi4uaS5hbmltYXRpb259O2kuY2VudGVyZWQmJih0PXIubGVmdCtyLndpZHRoLzIsZT1yLnRvcCtyLmhlaWdodC8yKTtsZXQgYT1pLnJhZGl1c3x8ZnVuY3Rpb24obix0LGUpe2xldCBpPU1hdGgubWF4KE1hdGguYWJzKG4tZS5sZWZ0KSxNYXRoLmFicyhuLWUucmlnaHQpKSxyPU1hdGgubWF4KE1hdGguYWJzKHQtZS50b3ApLE1hdGguYWJzKHQtZS5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaStyKnIpfSh0LGUscikscz10LXIubGVmdCxsPWUtci50b3AsYz1vLmVudGVyRHVyYXRpb24sZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm1hdC1yaXBwbGUtZWxlbWVudCIpLGQuc3R5bGUubGVmdD1zLWErInB4IixkLnN0eWxlLnRvcD1sLWErInB4IixkLnN0eWxlLmhlaWdodD0yKmErInB4IixkLnN0eWxlLndpZHRoPTIqYSsicHgiLG51bGwhPWkuY29sb3ImJihkLnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmNvbG9yKSxkLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gJHtjfW1zYCx0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGQpO2xldCB1PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGQpLGY9dS50cmFuc2l0aW9uRHVyYXRpb24sbT0ibm9uZSI9PT11LnRyYW5zaXRpb25Qcm9wZXJ0eXx8IjBzIj09PWZ8fCIwcywgMHMiPT09Znx8MD09PXIud2lkdGgmJjA9PT1yLmhlaWdodCx5PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPWksdGhpcy5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3M9cix0aGlzLnN0YXRlPTN9ZmFkZU91dCgpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9fSh0aGlzLGQsaSxtKTtkLnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUzZCgxLCAxLCAxKSIseS5zdGF0ZT0wLGkucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9eSk7bGV0IE09bnVsbDtyZXR1cm4hbSYmKGN8fG8uZXhpdER1cmF0aW9uKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IHY9KCk9PnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24oeSkseD0oKT0+dGhpcy5fZGVzdHJveVJpcHBsZSh5KTtkLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHYpLGQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIseCksTT17b25UcmFuc2l0aW9uRW5kOnYsb25UcmFuc2l0aW9uQ2FuY2VsOnh9fSksdGhpcy5fYWN0aXZlUmlwcGxlcy5zZXQoeSxNKSwobXx8IWMpJiZ0aGlzLl9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKHkpLHl9ZmFkZU91dFJpcHBsZSh0KXtpZigyPT09dC5zdGF0ZXx8Mz09PXQuc3RhdGUpcmV0dXJuO2xldCBlPXQuZWxlbWVudCxpPXsuLi53MiwuLi50LmNvbmZpZy5hbmltYXRpb259O2Uuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2kuZXhpdER1cmF0aW9ufW1zYCxlLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9MiwodC5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3N8fCFpLmV4aXREdXJhdGlvbikmJnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24odCl9ZmFkZU91dEFsbCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9PnQuZmFkZU91dCgpKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9Pnt0LmNvbmZpZy5wZXJzaXN0ZW50fHx0LmZhZGVPdXQoKX0pfXNldHVwVHJpZ2dlckV2ZW50cyh0KXtsZXQgZT1WYSh0KTshdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwhZXx8ZT09PXRoaXMuX3RyaWdnZXJFbGVtZW50fHwodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsVjcuZm9yRWFjaChpPT57YmQuX2V2ZW50TWFuYWdlci5hZGRIYW5kbGVyKHRoaXMuX25nWm9uZSxpLGUsdGhpcyl9KSl9aGFuZGxlRXZlbnQodCl7Im1vdXNlZG93biI9PT10LnR5cGU/dGhpcy5fb25Nb3VzZWRvd24odCk6InRvdWNoc3RhcnQiPT09dC50eXBlP3RoaXMuX29uVG91Y2hTdGFydCh0KTp0aGlzLl9vblBvaW50ZXJVcCgpLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntINy5mb3JFYWNoKGU9Pnt0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGUsdGhpcyxCNyl9KX0pLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQ9ITApfV9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKHQpezA9PT10LnN0YXRlP3RoaXMuX3N0YXJ0RmFkZU91dFRyYW5zaXRpb24odCk6Mj09PXQuc3RhdGUmJnRoaXMuX2Rlc3Ryb3lSaXBwbGUodCl9X3N0YXJ0RmFkZU91dFRyYW5zaXRpb24odCl7bGV0IGU9dD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUse3BlcnNpc3RlbnQ6aX09dC5jb25maWc7dC5zdGF0ZT0xLCFpJiYoIWV8fCF0aGlzLl9pc1BvaW50ZXJEb3duKSYmdC5mYWRlT3V0KCl9X2Rlc3Ryb3lSaXBwbGUodCl7bGV0IGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5nZXQodCk/P251bGw7dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCksdGhpcy5fYWN0aXZlUmlwcGxlcy5zaXplfHwodGhpcy5fY29udGFpbmVyUmVjdD1udWxsKSx0PT09dGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZSYmKHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bnVsbCksdC5zdGF0ZT0zLG51bGwhPT1lJiYodC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGUub25UcmFuc2l0aW9uRW5kKSx0LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIsZS5vblRyYW5zaXRpb25DYW5jZWwpKSx0LmVsZW1lbnQucmVtb3ZlKCl9X29uTW91c2Vkb3duKHQpe2xldCBlPUhiKHQpLGk9dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCYmRGF0ZS5ub3coKTx0aGlzLl9sYXN0VG91Y2hTdGFydEV2ZW50KzgwMDshdGhpcy5fdGFyZ2V0LnJpcHBsZURpc2FibGVkJiYhZSYmIWkmJih0aGlzLl9pc1BvaW50ZXJEb3duPSEwLHRoaXMuZmFkZUluUmlwcGxlKHQuY2xpZW50WCx0LmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfV9vblRvdWNoU3RhcnQodCl7aWYoIXRoaXMuX3RhcmdldC5yaXBwbGVEaXNhYmxlZCYmIXpiKHQpKXt0aGlzLl9sYXN0VG91Y2hTdGFydEV2ZW50PURhdGUubm93KCksdGhpcy5faXNQb2ludGVyRG93bj0hMDtsZXQgZT10LmNoYW5nZWRUb3VjaGVzO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZmFkZUluUmlwcGxlKGVbaV0uY2xpZW50WCxlW2ldLmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZyl9fV9vblBvaW50ZXJVcCgpeyF0aGlzLl9pc1BvaW50ZXJEb3dufHwodGhpcy5faXNQb2ludGVyRG93bj0hMSx0aGlzLl9nZXRBY3RpdmVSaXBwbGVzKCkuZm9yRWFjaCh0PT57IXQuY29uZmlnLnBlcnNpc3RlbnQmJigxPT09dC5zdGF0ZXx8dC5jb25maWcudGVybWluYXRlT25Qb2ludGVyVXAmJjA9PT10LnN0YXRlKSYmdC5mYWRlT3V0KCl9KSl9X2dldEFjdGl2ZVJpcHBsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hY3RpdmVSaXBwbGVzLmtleXMoKSl9X3JlbW92ZVRyaWdnZXJFdmVudHMoKXtsZXQgdD10aGlzLl90cmlnZ2VyRWxlbWVudDt0JiYoVjcuZm9yRWFjaChlPT5iZC5fZXZlbnRNYW5hZ2VyLnJlbW92ZUhhbmRsZXIoZSx0LHRoaXMpKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkJiZINy5mb3JFYWNoKGU9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHRoaXMsQjcpKSl9fTtiZC5fZXZlbnRNYW5hZ2VyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2V2ZW50cz1uZXcgTWFwLHRoaXMuX2RlbGVnYXRlRXZlbnRIYW5kbGVyPXQ9PntsZXQgZT1kcyh0KTtlJiZ0aGlzLl9ldmVudHMuZ2V0KHQudHlwZSk/LmZvckVhY2goKGkscik9Pnsocj09PWV8fHIuY29udGFpbnMoZSkpJiZpLmZvckVhY2gobz0+by5oYW5kbGVFdmVudCh0KSl9KX19YWRkSGFuZGxlcih0LGUsaSxyKXtsZXQgbz10aGlzLl9ldmVudHMuZ2V0KGUpO2lmKG8pe2xldCBhPW8uZ2V0KGkpO2E/YS5hZGQocik6by5zZXQoaSxuZXcgU2V0KFtyXSkpfWVsc2UgdGhpcy5fZXZlbnRzLnNldChlLG5ldyBNYXAoW1tpLG5ldyBTZXQoW3JdKV1dKSksdC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzLl9kZWxlZ2F0ZUV2ZW50SGFuZGxlcixONyl9KX1yZW1vdmVIYW5kbGVyKHQsZSxpKXtsZXQgcj10aGlzLl9ldmVudHMuZ2V0KHQpO2lmKCFyKXJldHVybjtsZXQgbz1yLmdldChlKTshb3x8KG8uZGVsZXRlKGkpLDA9PT1vLnNpemUmJnIuZGVsZXRlKGUpLDA9PT1yLnNpemUmJih0aGlzLl9ldmVudHMuZGVsZXRlKHQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLl9kZWxlZ2F0ZUV2ZW50SGFuZGxlcixONykpKX19O3ZhciBHYj1uZXcgaWUoIm1hdC1yaXBwbGUtZ2xvYmFsLW9wdGlvbnMiKSxGcj0oKCk9PntjbGFzcyBue2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7ZSYmdGhpcy5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpLHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCB0cmlnZ2VyKGUpe3RoaXMuX3RyaWdnZXI9ZSx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1jb25zdHJ1Y3RvcihlLGkscixvLGEpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9hbmltYXRpb25Nb2RlPWEsdGhpcy5yYWRpdXM9MCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX2dsb2JhbE9wdGlvbnM9b3x8e30sdGhpcy5fcmlwcGxlUmVuZGVyZXI9bmV3IGJkKHRoaXMsaSxlLHIpfW5nT25Jbml0KCl7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9ZmFkZU91dEFsbCgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGwoKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl9Z2V0IHJpcHBsZUNvbmZpZygpe3JldHVybntjZW50ZXJlZDp0aGlzLmNlbnRlcmVkLHJhZGl1czp0aGlzLnJhZGl1cyxjb2xvcjp0aGlzLmNvbG9yLGFuaW1hdGlvbjp7Li4udGhpcy5fZ2xvYmFsT3B0aW9ucy5hbmltYXRpb24sLi4uIk5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGU/e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH06e30sLi4udGhpcy5hbmltYXRpb259LHRlcm1pbmF0ZU9uUG9pbnRlclVwOnRoaXMuX2dsb2JhbE9wdGlvbnMudGVybWluYXRlT25Qb2ludGVyVXB9fWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhIXRoaXMuX2dsb2JhbE9wdGlvbnMuZGlzYWJsZWR9X3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpeyF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLl9yaXBwbGVSZW5kZXJlci5zZXR1cFRyaWdnZXJFdmVudHModGhpcy50cmlnZ2VyKX1sYXVuY2goZSxpPTAscil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZShlLGksey4uLnRoaXMucmlwcGxlQ29uZmlnLC4uLnJ9KTp0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoMCwwLHsuLi50aGlzLnJpcHBsZUNvbmZpZywuLi5lfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoYXQpLEMoJG4pLEMoR2IsOCksQyhkaSw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1yaXBwbGUiLCIiXSxbIiIsIm1hdFJpcHBsZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1yaXBwbGUiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmUWUoIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixpLnVuYm91bmRlZCl9LGlucHV0czp7Y29sb3I6WyJtYXRSaXBwbGVDb2xvciIsImNvbG9yIl0sdW5ib3VuZGVkOlsibWF0UmlwcGxlVW5ib3VuZGVkIiwidW5ib3VuZGVkIl0sY2VudGVyZWQ6WyJtYXRSaXBwbGVDZW50ZXJlZCIsImNlbnRlcmVkIl0scmFkaXVzOlsibWF0UmlwcGxlUmFkaXVzIiwicmFkaXVzIl0sYW5pbWF0aW9uOlsibWF0UmlwcGxlQW5pbWF0aW9uIiwiYW5pbWF0aW9uIl0sZGlzYWJsZWQ6WyJtYXRSaXBwbGVEaXNhYmxlZCIsImRpc2FibGVkIl0sdHJpZ2dlcjpbIm1hdFJpcHBsZVRyaWdnZXIiLCJ0cmlnZ2VyIl19LGV4cG9ydEFzOlsibWF0UmlwcGxlIl19KSxufSkoKSxabz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbUXQsUXRdfSksbn0pKCksVDI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hbmltYXRpb25Nb2RlPWUsdGhpcy5zdGF0ZT0idW5jaGVja2VkIix0aGlzLmRpc2FibGVkPSExLHRoaXMuYXBwZWFyYW5jZT0iZnVsbCJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoZGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wc2V1ZG8tY2hlY2tib3giXV0saG9zdEF0dHJzOlsxLCJtYXQtcHNldWRvLWNoZWNrYm94Il0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZRZSgibWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIiwiaW5kZXRlcm1pbmF0ZSI9PT1pLnN0YXRlKSgibWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkIiwiY2hlY2tlZCI9PT1pLnN0YXRlKSgibWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbCIsIm1pbmltYWwiPT09aS5hcHBlYXJhbmNlKSgibWF0LXBzZXVkby1jaGVja2JveC1mdWxsIiwiZnVsbCI9PT1pLmFwcGVhcmFuY2UpKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpfSxpbnB1dHM6e3N0YXRlOiJzdGF0ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIixhcHBlYXJhbmNlOiJhcHBlYXJhbmNlIn0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LHN0eWxlczpbJy5tYXQtcHNldWRvLWNoZWNrYm94e2JvcmRlci1yYWRpdXM6MnB4O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksYmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtjb250ZW50OiIiO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2l0aW9uOm9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1wc2V1ZG8tY2hlY2tib3guX21hdC1hbmltYXRpb24tbm9vcGFibGU6OmFmdGVye3RyYW5zaXRpb246bm9uZX0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlOjphZnRlcntsZWZ0OjFweDtvcGFjaXR5OjE7Ym9yZGVyLXJhZGl1czoycHh9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZDo6YWZ0ZXJ7bGVmdDoxcHg7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyk7b3BhY2l0eToxO2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtib3JkZXI6MnB4IHNvbGlkfS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtcHNldWRvLWNoZWNrYm94e3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQ6OmFmdGVye3dpZHRoOjE0cHg7aGVpZ2h0OjZweDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0b3A6LTQuMjQyNjQwNjg3MXB4O2xlZnQ6MDtib3R0b206MDtyaWdodDowO21hcmdpbjphdXRvfS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlOjphZnRlcnt0b3A6OHB4O3dpZHRoOjE2cHh9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQ6OmFmdGVye3dpZHRoOjEwcHg7aGVpZ2h0OjRweDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0b3A6LTIuODI4NDI3MTI0N3B4O2xlZnQ6MDtib3R0b206MDtyaWdodDowO21hcmdpbjphdXRvfS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlOjphZnRlcnt0b3A6NnB4O3dpZHRoOjEycHh9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRDI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1F0XX0pLG59KSgpLHhkPW5ldyBpZSgiTUFUX09QVElPTl9QQVJFTlRfQ09NUE9ORU5UIiksQ2Q9KEtyKGNsYXNze30pLG5ldyBpZSgiTWF0T3B0Z3JvdXAiKSksU19lPTAsYmc9Y2xhc3N7Y29uc3RydWN0b3IodCxlPSExKXt0aGlzLnNvdXJjZT10LHRoaXMuaXNVc2VySW5wdXQ9ZX19LEkyPSgoKT0+e2NsYXNzIG57Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Lm11bHRpcGxlfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5ncm91cCYmdGhpcy5ncm91cC5kaXNhYmxlZHx8dGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVV0KGUpfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmRpc2FibGVSaXBwbGUpfWdldCBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yKCl7cmV0dXJuISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IpfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3BhcmVudD1yLHRoaXMuZ3JvdXA9byx0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT0iIix0aGlzLmlkPSJtYXQtb3B0aW9uLSIrU19lKyssdGhpcy5vblNlbGVjdGlvbkNoYW5nZT1uZXcgTCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IEFlfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfWdldCB2aWV3VmFsdWUoKXtyZXR1cm4odGhpcy5fdGV4dD8ubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX1zZWxlY3QoKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWZvY3VzKGUsaSl7bGV0IHI9dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKTsiZnVuY3Rpb24iPT10eXBlb2Ygci5mb2N1cyYmci5mb2N1cyhpKX1zZXRBY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmV8fCh0aGlzLl9hY3RpdmU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfXNldEluYWN0aXZlU3R5bGVzKCl7dGhpcy5fYWN0aXZlJiYodGhpcy5fYWN0aXZlPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXRMYWJlbCgpe3JldHVybiB0aGlzLnZpZXdWYWx1ZX1faGFuZGxlS2V5ZG93bihlKXsoMTM9PT1lLmtleUNvZGV8fDMyPT09ZS5rZXlDb2RlKSYmIXlyKGUpJiYodGhpcy5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSxlLnByZXZlbnREZWZhdWx0KCkpfV9zZWxlY3RWaWFJbnRlcmFjdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zZWxlY3RlZD0hdGhpcy5tdWx0aXBsZXx8IXRoaXMuX3NlbGVjdGVkLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCghMCkpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdDaGVja2VkKCl7aWYodGhpcy5fc2VsZWN0ZWQpe2xldCBlPXRoaXMudmlld1ZhbHVlO2UhPT10aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlJiYodGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZSYmdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKSx0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPWUpfX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfV9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoZT0hMSl7dGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBiZyh0aGlzLGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe19sKCl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZZZSh5X2UsNyksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS5fdGV4dD1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e29uU2VsZWN0aW9uQ2hhbmdlOiJvblNlbGVjdGlvbkNoYW5nZSJ9fSksbn0pKCk7ZnVuY3Rpb24gQWYobix0LGUpe2lmKGUubGVuZ3RoKXtsZXQgaT10LnRvQXJyYXkoKSxyPWUudG9BcnJheSgpLG89MDtmb3IobGV0IGE9MDthPG4rMTthKyspaVthXS5ncm91cCYmaVthXS5ncm91cD09PXJbb10mJm8rKztyZXR1cm4gb31yZXR1cm4gMH1mdW5jdGlvbiB2ZyhuLHQsZSxpKXtyZXR1cm4gbjxlP246bit0PmUraT9NYXRoLm1heCgwLG4taSt0KTplfXZhciBqNz1bIm1hdC1idXR0b24iLCIiXSxHNz1bIioiXSxEX2U9WyJtYXQtYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwibWF0LXJhaXNlZC1idXR0b24iLCJtYXQtc3Ryb2tlZC1idXR0b24iLCJtYXQtbWluaS1mYWIiLCJtYXQtZmFiIl0sSV9lPWdvKEtyKFFvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSkpLEZuPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJX2V7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUpLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2FuaW1hdGlvbk1vZGU9cix0aGlzLmlzUm91bmRCdXR0b249dGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1mYWIiLCJtYXQtbWluaS1mYWIiKSx0aGlzLmlzSWNvbkJ1dHRvbj10aGlzLl9oYXNIb3N0QXR0cmlidXRlcygibWF0LWljb24tYnV0dG9uIik7Zm9yKGxldCBvIG9mIERfZSl0aGlzLl9oYXNIb3N0QXR0cmlidXRlcyhvKSYmdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKG8pO2UubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtYnV0dG9uLWJhc2UiKSx0aGlzLmlzUm91bmRCdXR0b24mJih0aGlzLmNvbG9yPSJhY2NlbnQiKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKX1mb2N1cyhlLGkpe2U/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2dldEhvc3RFbGVtZW50KCksZSxpKTp0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKGkpfV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9X2lzUmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLmRpc2FibGVkfV9oYXNIb3N0QXR0cmlidXRlcyguLi5lKXtyZXR1cm4gZS5zb21lKGk9PnRoaXMuX2dldEhvc3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSksQyhsciksQyhkaSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LXJhaXNlZC1idXR0b24iLCIiXSxbImJ1dHRvbiIsIm1hdC1pY29uLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWZhYiIsIiJdLFsiYnV0dG9uIiwibWF0LW1pbmktZmFiIiwiIl0sWyJidXR0b24iLCJtYXQtc3Ryb2tlZC1idXR0b24iLCIiXSxbImJ1dHRvbiIsIm1hdC1mbGF0LWJ1dHRvbiIsIiJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlllKEZyLDUpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkucmlwcGxlPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihQZSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpLFFlKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdEJ1dHRvbiJdLGZlYXR1cmVzOltMZV0sYXR0cnM6ajcsbmdDb250ZW50U2VsZWN0b3JzOkc3LGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsIm1hdC1idXR0b24td3JhcHBlciJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZ24oKSxoKDAsInNwYW4iLDApLFh0KDEpLGcoKSxQKDIsInNwYW4iLDEpKDMsInNwYW4iLDIpKSwyJmUmJihiKDIpLFFlKCJtYXQtYnV0dG9uLXJpcHBsZS1yb3VuZCIsaS5pc1JvdW5kQnV0dG9ufHxpLmlzSWNvbkJ1dHRvbiksXygibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZUNlbnRlcmVkIixpLmlzSWNvbkJ1dHRvbikoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpKX0sZGVwZW5kZW5jaWVzOltGcl0sc3R5bGVzOlsiLm1hdC1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfS5tYXQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wNH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9fS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtcmFpc2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtc3Ryb2tlZC1idXR0b257Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7cGFkZGluZzowIDE1cHg7bGluZS1oZWlnaHQ6MzRweH0ubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6LTFweDtsZWZ0Oi0xcHg7cmlnaHQ6LTFweDtib3R0b206LTFweH0ubWF0LWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1taW5pLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtbWluaS1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiBpLC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfS5tYXQtZmxhdC1idXR0b246OmJlZm9yZSwubWF0LXJhaXNlZC1idXR0b246OmJlZm9yZSwubWF0LWZhYjo6YmVmb3JlLC5tYXQtbWluaS1mYWI6OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgMnB4KSAqIC0xKX0ubWF0LXN0cm9rZWQtYnV0dG9uOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSArIDNweCkgKiAtMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmxhdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJhaXNlZC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWljb24tYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mYWIsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1pbmktZmFie291dGxpbmU6c29saWQgMXB4fS5tYXQtZGF0ZXBpY2tlci10b2dnbGUgLm1hdC1tZGMtYnV0dG9uLWJhc2V7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjhweCAwfS5tYXQtZGF0ZXBpY2tlci1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZXttYXJnaW4tbGVmdDo4cHh9W2Rpcj1ydGxdIC5tYXQtZGF0ZXBpY2tlci1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVTE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGksZSxyKSx0aGlzLl9uZ1pvbmU9byx0aGlzLl9oYWx0RGlzYWJsZWRFdmVudHM9YT0+e3RoaXMuZGlzYWJsZWQmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3N1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpLHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9KTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhsciksQyhiZSksQyhkaSw4KSxDKGF0LDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhIiwibWF0LWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1yYWlzZWQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJhIiwibWF0LWZhYiIsIiJdLFsiYSIsIm1hdC1taW5pLWZhYiIsIiJdLFsiYSIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1mbGF0LWJ1dHRvbiIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKFBlKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpLFFlKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W0xlXSxhdHRyczpqNyxuZ0NvbnRlbnRTZWxlY3RvcnM6RzcsZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnbigpLGgoMCwic3BhbiIsMCksWHQoMSksZygpLFAoMiwic3BhbiIsMSkoMywic3BhbiIsMikpLDImZSYmKGIoMiksUWUoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixpLmlzUm91bmRCdXR0b258fGkuaXNJY29uQnV0dG9uKSxfKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlQ2VudGVyZWQiLGkuaXNJY29uQnV0dG9uKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSkpfSxkZXBlbmRlbmNpZXM6W0ZyXSxzdHlsZXM6WyIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIGksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19Lm1hdC1mbGF0LWJ1dHRvbjo6YmVmb3JlLC5tYXQtcmFpc2VkLWJ1dHRvbjo6YmVmb3JlLC5tYXQtZmFiOjpiZWZvcmUsLm1hdC1taW5pLWZhYjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3Ryb2tlZC1idXR0b246OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgM3B4KSAqIC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSAubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6OHB4IDB9Lm1hdC1kYXRlcGlja2VyLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNle21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1kYXRlcGlja2VyLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmaT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbWm8sUXQsUXRdfSksbn0pKCksV2I9Y2xhc3N7fSxqMT1jbGFzcyBleHRlbmRzIFdie2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fZGF0YT10fWNvbm5lY3QoKXtyZXR1cm4gSF8odGhpcy5fZGF0YSk/dGhpcy5fZGF0YTpxdCh0aGlzLl9kYXRhKX1kaXNjb25uZWN0KCl7fX0scWI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnZpZXdDYWNoZVNpemU9MjAsdGhpcy5fdmlld0NhY2hlPVtdfWFwcGx5Q2hhbmdlcyh0LGUsaSxyLG8pe3QuZm9yRWFjaE9wZXJhdGlvbigoYSxzLGwpPT57bGV0IGMsZDtudWxsPT1hLnByZXZpb3VzSW5kZXg/KGM9dGhpcy5faW5zZXJ0VmlldygoKT0+aShhLHMsbCksbCxlLHIoYSkpLGQ9Yz8xOjApOm51bGw9PWw/KHRoaXMuX2RldGFjaEFuZENhY2hlVmlldyhzLGUpLGQ9Myk6KGM9dGhpcy5fbW92ZVZpZXcocyxsLGUscihhKSksZD0yKSxvJiZvKHtjb250ZXh0OmM/LmNvbnRleHQsb3BlcmF0aW9uOmQscmVjb3JkOmF9KX0pfWRldGFjaCgpe2ZvcihsZXQgdCBvZiB0aGlzLl92aWV3Q2FjaGUpdC5kZXN0cm95KCk7dGhpcy5fdmlld0NhY2hlPVtdfV9pbnNlcnRWaWV3KHQsZSxpLHIpe2xldCBvPXRoaXMuX2luc2VydFZpZXdGcm9tQ2FjaGUoZSxpKTtpZihvKXJldHVybiB2b2lkKG8uY29udGV4dC4kaW1wbGljaXQ9cik7bGV0IGE9dCgpO3JldHVybiBpLmNyZWF0ZUVtYmVkZGVkVmlldyhhLnRlbXBsYXRlUmVmLGEuY29udGV4dCxhLmluZGV4KX1fZGV0YWNoQW5kQ2FjaGVWaWV3KHQsZSl7bGV0IGk9ZS5kZXRhY2godCk7dGhpcy5fbWF5YmVDYWNoZVZpZXcoaSxlKX1fbW92ZVZpZXcodCxlLGkscil7bGV0IG89aS5nZXQodCk7cmV0dXJuIGkubW92ZShvLGUpLG8uY29udGV4dC4kaW1wbGljaXQ9cixvfV9tYXliZUNhY2hlVmlldyh0LGUpe2lmKHRoaXMuX3ZpZXdDYWNoZS5sZW5ndGg8dGhpcy52aWV3Q2FjaGVTaXplKXRoaXMuX3ZpZXdDYWNoZS5wdXNoKHQpO2Vsc2V7bGV0IGk9ZS5pbmRleE9mKHQpOy0xPT09aT90LmRlc3Ryb3koKTplLnJlbW92ZShpKX19X2luc2VydFZpZXdGcm9tQ2FjaGUodCxlKXtsZXQgaT10aGlzLl92aWV3Q2FjaGUucG9wKCk7cmV0dXJuIGkmJmUuaW5zZXJ0KGksdCksaXx8bnVsbH19LHhnPWNsYXNze2dldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPUFycmF5LmZyb20odGhpcy5fc2VsZWN0aW9uLnZhbHVlcygpKSksdGhpcy5fc2VsZWN0ZWR9Y29uc3RydWN0b3IodD0hMSxlLGk9ITAscil7dGhpcy5fbXVsdGlwbGU9dCx0aGlzLl9lbWl0Q2hhbmdlcz1pLHRoaXMuY29tcGFyZVdpdGg9cix0aGlzLl9zZWxlY3Rpb249bmV3IFNldCx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdLHRoaXMuY2hhbmdlZD1uZXcgQWUsZSYmZS5sZW5ndGgmJih0P2UuZm9yRWFjaChvPT50aGlzLl9tYXJrU2VsZWN0ZWQobykpOnRoaXMuX21hcmtTZWxlY3RlZChlWzBdKSx0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGg9MCl9c2VsZWN0KC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KSx0LmZvckVhY2goaT0+dGhpcy5fbWFya1NlbGVjdGVkKGkpKTtsZXQgZT10aGlzLl9oYXNRdWV1ZWRDaGFuZ2VzKCk7cmV0dXJuIHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpLGV9ZGVzZWxlY3QoLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpLHQuZm9yRWFjaChpPT50aGlzLl91bm1hcmtTZWxlY3RlZChpKSk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfXNldFNlbGVjdGlvbiguLi50KXt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCk7bGV0IGU9dGhpcy5zZWxlY3RlZCxpPW5ldyBTZXQodCk7dC5mb3JFYWNoKG89PnRoaXMuX21hcmtTZWxlY3RlZChvKSksZS5maWx0ZXIobz0+IWkuaGFzKG8pKS5mb3JFYWNoKG89PnRoaXMuX3VubWFya1NlbGVjdGVkKG8pKTtsZXQgcj10aGlzLl9oYXNRdWV1ZWRDaGFuZ2VzKCk7cmV0dXJuIHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpLHJ9dG9nZ2xlKHQpe3JldHVybiB0aGlzLmlzU2VsZWN0ZWQodCk/dGhpcy5kZXNlbGVjdCh0KTp0aGlzLnNlbGVjdCh0KX1jbGVhcih0PSEwKXt0aGlzLl91bm1hcmtBbGwoKTtsZXQgZT10aGlzLl9oYXNRdWV1ZWRDaGFuZ2VzKCk7cmV0dXJuIHQmJnRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpLGV9aXNTZWxlY3RlZCh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uLmhhcyh0aGlzLl9nZXRDb25jcmV0ZVZhbHVlKHQpKX1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLl9zZWxlY3Rpb24uc2l6ZX1oYXNWYWx1ZSgpe3JldHVybiF0aGlzLmlzRW1wdHkoKX1zb3J0KHQpe3RoaXMuX211bHRpcGxlJiZ0aGlzLnNlbGVjdGVkJiZ0aGlzLl9zZWxlY3RlZC5zb3J0KHQpfWlzTXVsdGlwbGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX3NlbGVjdGVkPW51bGwsKHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aHx8dGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5sZW5ndGgpJiYodGhpcy5jaGFuZ2VkLm5leHQoe3NvdXJjZTp0aGlzLGFkZGVkOnRoaXMuX3NlbGVjdGVkVG9FbWl0LHJlbW92ZWQ6dGhpcy5fZGVzZWxlY3RlZFRvRW1pdH0pLHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10pfV9tYXJrU2VsZWN0ZWQodCl7dD10aGlzLl9nZXRDb25jcmV0ZVZhbHVlKHQpLHRoaXMuaXNTZWxlY3RlZCh0KXx8KHRoaXMuX211bHRpcGxlfHx0aGlzLl91bm1hcmtBbGwoKSx0aGlzLmlzU2VsZWN0ZWQodCl8fHRoaXMuX3NlbGVjdGlvbi5hZGQodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX3NlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtTZWxlY3RlZCh0KXt0PXRoaXMuX2dldENvbmNyZXRlVmFsdWUodCksdGhpcy5pc1NlbGVjdGVkKHQpJiYodGhpcy5fc2VsZWN0aW9uLmRlbGV0ZSh0KSx0aGlzLl9lbWl0Q2hhbmdlcyYmdGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX1fdW5tYXJrQWxsKCl7dGhpcy5pc0VtcHR5KCl8fHRoaXMuX3NlbGVjdGlvbi5mb3JFYWNoKHQ9PnRoaXMuX3VubWFya1NlbGVjdGVkKHQpKX1fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpe31faGFzUXVldWVkQ2hhbmdlcygpe3JldHVybiEoIXRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoJiYhdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKX1fZ2V0Q29uY3JldGVWYWx1ZSh0KXtpZih0aGlzLmNvbXBhcmVXaXRoKXtmb3IobGV0IGUgb2YgdGhpcy5fc2VsZWN0aW9uKWlmKHRoaXMuY29tcGFyZVdpdGgodCxlKSlyZXR1cm4gZTtyZXR1cm4gdH1yZXR1cm4gdH19LEcxPW5ldyBpZSgiX1ZpZXdSZXBlYXRlciIpLEFfZT1bImNvbnRlbnRXcmFwcGVyIl0sUl9lPVsiKiJdLFg3PW5ldyBpZSgiVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kiKTtmdW5jdGlvbiBrX2Uobil7cmV0dXJuIG4uX3Njcm9sbFN0cmF0ZWd5fXZhciBRNz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5faXRlbVNpemU9MjAsdGhpcy5fbWluQnVmZmVyUHg9MTAwLHRoaXMuX21heEJ1ZmZlclB4PTIwMCx0aGlzLl9zY3JvbGxTdHJhdGVneT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IEFlLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT10aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLnBpcGUodWkoKSksdGhpcy5fdmlld3BvcnQ9bnVsbCx0aGlzLl9pdGVtU2l6ZT10LHRoaXMuX21pbkJ1ZmZlclB4PWUsdGhpcy5fbWF4QnVmZmVyUHg9aX1hdHRhY2godCl7dGhpcy5fdmlld3BvcnQ9dCx0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfWRldGFjaCgpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydD1udWxsfXVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKHQsZSxpKXt0aGlzLl9pdGVtU2l6ZT10LHRoaXMuX21pbkJ1ZmZlclB4PWUsdGhpcy5fbWF4QnVmZmVyUHg9aSx0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uQ29udGVudFNjcm9sbGVkKCl7dGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uRGF0YUxlbmd0aENoYW5nZWQoKXt0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uQ29udGVudFJlbmRlcmVkKCl7fW9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCl7fXNjcm9sbFRvSW5kZXgodCxlKXt0aGlzLl92aWV3cG9ydCYmdGhpcy5fdmlld3BvcnQuc2Nyb2xsVG9PZmZzZXQodCp0aGlzLl9pdGVtU2l6ZSxlKX1fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpeyF0aGlzLl92aWV3cG9ydHx8dGhpcy5fdmlld3BvcnQuc2V0VG90YWxDb250ZW50U2l6ZSh0aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCkqdGhpcy5faXRlbVNpemUpfV91cGRhdGVSZW5kZXJlZFJhbmdlKCl7aWYoIXRoaXMuX3ZpZXdwb3J0KXJldHVybjtsZXQgdD10aGlzLl92aWV3cG9ydC5nZXRSZW5kZXJlZFJhbmdlKCksZT17c3RhcnQ6dC5zdGFydCxlbmQ6dC5lbmR9LGk9dGhpcy5fdmlld3BvcnQuZ2V0Vmlld3BvcnRTaXplKCkscj10aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCksbz10aGlzLl92aWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCksYT10aGlzLl9pdGVtU2l6ZT4wP28vdGhpcy5faXRlbVNpemU6MDtpZihlLmVuZD5yKXtsZXQgbD1NYXRoLmNlaWwoaS90aGlzLl9pdGVtU2l6ZSksYz1NYXRoLm1heCgwLE1hdGgubWluKGEsci1sKSk7YSE9YyYmKGE9YyxvPWMqdGhpcy5faXRlbVNpemUsZS5zdGFydD1NYXRoLmZsb29yKGEpKSxlLmVuZD1NYXRoLm1heCgwLE1hdGgubWluKHIsZS5zdGFydCtsKSl9bGV0IHM9by1lLnN0YXJ0KnRoaXMuX2l0ZW1TaXplO2lmKHM8dGhpcy5fbWluQnVmZmVyUHgmJjAhPWUuc3RhcnQpe2xldCBsPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtcykvdGhpcy5faXRlbVNpemUpO2Uuc3RhcnQ9TWF0aC5tYXgoMCxlLnN0YXJ0LWwpLGUuZW5kPU1hdGgubWluKHIsTWF0aC5jZWlsKGErKGkrdGhpcy5fbWluQnVmZmVyUHgpL3RoaXMuX2l0ZW1TaXplKSl9ZWxzZXtsZXQgbD1lLmVuZCp0aGlzLl9pdGVtU2l6ZS0obytpKTtpZihsPHRoaXMuX21pbkJ1ZmZlclB4JiZlLmVuZCE9cil7bGV0IGM9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1sKS90aGlzLl9pdGVtU2l6ZSk7Yz4wJiYoZS5lbmQ9TWF0aC5taW4ocixlLmVuZCtjKSxlLnN0YXJ0PU1hdGgubWF4KDAsTWF0aC5mbG9vcihhLXRoaXMuX21pbkJ1ZmZlclB4L3RoaXMuX2l0ZW1TaXplKSkpfX10aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZFJhbmdlKGUpLHRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9pdGVtU2l6ZSplLnN0YXJ0KSx0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLm5leHQoTWF0aC5mbG9vcihhKSl9fSh0aGlzLml0ZW1TaXplLHRoaXMubWluQnVmZmVyUHgsdGhpcy5tYXhCdWZmZXJQeCl9Z2V0IGl0ZW1TaXplKCl7cmV0dXJuIHRoaXMuX2l0ZW1TaXplfXNldCBpdGVtU2l6ZShlKXt0aGlzLl9pdGVtU2l6ZT1EaShlKX1nZXQgbWluQnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fbWluQnVmZmVyUHh9c2V0IG1pbkJ1ZmZlclB4KGUpe3RoaXMuX21pbkJ1ZmZlclB4PURpKGUpfWdldCBtYXhCdWZmZXJQeCgpe3JldHVybiB0aGlzLl9tYXhCdWZmZXJQeH1zZXQgbWF4QnVmZmVyUHgoZSl7dGhpcy5fbWF4QnVmZmVyUHg9RGkoZSl9bmdPbkNoYW5nZXMoKXt0aGlzLl9zY3JvbGxTdHJhdGVneS51cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0aGlzLml0ZW1TaXplLHRoaXMubWluQnVmZmVyUHgsdGhpcy5tYXhCdWZmZXJQeCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLCJpdGVtU2l6ZSIsIiJdXSxpbnB1dHM6e2l0ZW1TaXplOiJpdGVtU2l6ZSIsbWluQnVmZmVyUHg6Im1pbkJ1ZmZlclB4IixtYXhCdWZmZXJQeDoibWF4QnVmZmVyUHgifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltSdChbe3Byb3ZpZGU6WDcsdXNlRmFjdG9yeTprX2UsZGVwczpbVm4oKCk9Pm4pXX1dKSxHdF19KSxufSkoKSxSZj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX3Njcm9sbGVkPW5ldyBBZSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9cn1yZWdpc3RlcihlKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKGUpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGUsZS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoZSkpKX1kZXJlZ2lzdGVyKGUpe2xldCBpPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQoZSk7aSYmKGkudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGUpKX1zY3JvbGxlZChlPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBlbihpPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0ZW5lcigpO2xldCByPWU+MD90aGlzLl9zY3JvbGxlZC5waXBlKGljKGUpKS5zdWJzY3JpYmUoaSk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGkpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntyLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6cXQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGUsaSk9PnRoaXMuZGVyZWdpc3RlcihpKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGUsaSl7bGV0IHI9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoZSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoaSkucGlwZShWZShvPT4hb3x8ci5pbmRleE9mKG8pPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgocixvKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQobyxlKSYmaS5wdXNoKG8pfSksaX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZSxpKXtsZXQgcj1WYShpKSxvPWUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYocj09bylyZXR1cm4hMH13aGlsZShyPXIucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+YWkodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKGF0KSxPKCRuKSxPKGt0LDgpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxCdT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuZWxlbWVudFJlZj1lLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1pLHRoaXMubmdab25lPXIsdGhpcy5kaXI9byx0aGlzLl9kZXN0cm95ZWQ9bmV3IEFlLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgZW4oYT0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmFpKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShhKSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHI9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtudWxsPT1lLmxlZnQmJihlLmxlZnQ9cj9lLmVuZDplLnN0YXJ0KSxudWxsPT1lLnJpZ2h0JiYoZS5yaWdodD1yP2Uuc3RhcnQ6ZS5lbmQpLG51bGwhPWUuYm90dG9tJiYoZS50b3A9aS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQtZS5ib3R0b20pLHImJjAhPWRnKCk/KG51bGwhPWUubGVmdCYmKGUucmlnaHQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUubGVmdCksMj09ZGcoKT9lLmxlZnQ9ZS5yaWdodDoxPT1kZygpJiYoZS5sZWZ0PWUucmlnaHQ/LWUucmlnaHQ6ZS5yaWdodCkpOm51bGwhPWUucmlnaHQmJihlLmxlZnQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUucmlnaHQpLHRoaXMuX2FwcGx5U2Nyb2xsVG9PcHRpb25zKGUpfV9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtQMSgpP2kuc2Nyb2xsVG8oZSk6KG51bGwhPWUudG9wJiYoaS5zY3JvbGxUb3A9ZS50b3ApLG51bGwhPWUubGVmdCYmKGkuc2Nyb2xsTGVmdD1lLmxlZnQpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpPSJsZWZ0IixyPSJyaWdodCIsbz10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09ZSlyZXR1cm4gby5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PWUpcmV0dXJuIG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0LW8uc2Nyb2xsVG9wO2xldCBhPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09ZT9lPWE/cjppOiJlbmQiPT1lJiYoZT1hP2k6ciksYSYmMj09ZGcoKT9lPT1pP28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnQ6by5zY3JvbGxMZWZ0OmEmJjE9PWRnKCk/ZT09aT9vLnNjcm9sbExlZnQrby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoOi1vLnNjcm9sbExlZnQ6ZT09aT9vLnNjcm9sbExlZnQ6by5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoLW8uc2Nyb2xsTGVmdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSksQyhSZiksQyhhdCksQyhIaSw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxLbz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX2NoYW5nZT1uZXcgQWUsdGhpcy5fY2hhbmdlTGlzdGVuZXI9bz0+e3RoaXMuX2NoYW5nZS5uZXh0KG8pfSx0aGlzLl9kb2N1bWVudD1yLGkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpZihlLmlzQnJvd3Nlcil7bGV0IG89dGhpcy5fZ2V0V2luZG93KCk7by5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxvLmFkZEV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKX0pfW5nT25EZXN0cm95KCl7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXtsZXQgZT10aGlzLl9nZXRXaW5kb3coKTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3cG9ydFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2xldCBlPXt3aWR0aDp0aGlzLl92aWV3cG9ydFNpemUud2lkdGgsaGVpZ2h0OnRoaXMuX3ZpZXdwb3J0U2l6ZS5oZWlnaHR9O3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fCh0aGlzLl92aWV3cG9ydFNpemU9bnVsbCksZX1nZXRWaWV3cG9ydFJlY3QoKXtsZXQgZT10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm57dG9wOmUudG9wLGxlZnQ6ZS5sZWZ0LGJvdHRvbTplLnRvcCtyLHJpZ2h0OmUubGVmdCtpLGhlaWdodDpyLHdpZHRoOml9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybnt0b3A6MCxsZWZ0OjB9O2xldCBlPXRoaXMuX2RvY3VtZW50LGk9dGhpcy5fZ2V0V2luZG93KCkscj1lLmRvY3VtZW50RWxlbWVudCxvPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotby50b3B8fGUuYm9keS5zY3JvbGxUb3B8fGkuc2Nyb2xsWXx8ci5zY3JvbGxUb3B8fDAsbGVmdDotby5sZWZ0fHxlLmJvZHkuc2Nyb2xsTGVmdHx8aS5zY3JvbGxYfHxyLnNjcm9sbExlZnR8fDB9fWNoYW5nZShlPTIwKXtyZXR1cm4gZT4wP3RoaXMuX2NoYW5nZS5waXBlKGljKGUpKTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91cGRhdGVWaWV3cG9ydFNpemUoKXtsZXQgZT10aGlzLl9nZXRXaW5kb3coKTt0aGlzLl92aWV3cG9ydFNpemU9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP3t3aWR0aDplLmlubmVyV2lkdGgsaGVpZ2h0OmUuaW5uZXJIZWlnaHR9Ont3aWR0aDowLGhlaWdodDowfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTygkbiksTyhhdCksTyhrdCw4KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscTc9bmV3IGllKCJWSVJUVUFMX1NDUk9MTEFCTEUiKSxGX2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEJ1e2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pfW1lYXN1cmVWaWV3cG9ydFNpemUoZSl7bGV0IGk9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwiPT09ZT9pLmNsaWVudFdpZHRoOmkuY2xpZW50SGVpZ2h0fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKFJmKSxDKGF0KSxDKEhpLDgpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixmZWF0dXJlczpbTGVdfSksbn0pKCksTl9lPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU8InUiPyRBOlVtLENnPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGX2V7Z2V0IG9yaWVudGF0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9ufXNldCBvcmllbnRhdGlvbihlKXt0aGlzLl9vcmllbnRhdGlvbiE9PWUmJih0aGlzLl9vcmllbnRhdGlvbj1lLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSl9Z2V0IGFwcGVuZE9ubHkoKXtyZXR1cm4gdGhpcy5fYXBwZW5kT25seX1zZXQgYXBwZW5kT25seShlKXt0aGlzLl9hcHBlbmRPbmx5PVV0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwsYyl7c3VwZXIoZSxzLHIsYSksdGhpcy5lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuc2Nyb2xsYWJsZT1jLHRoaXMuX3BsYXRmb3JtPXBpKCRuKSx0aGlzLl9kZXRhY2hlZFN1YmplY3Q9bmV3IEFlLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0PW5ldyBBZSx0aGlzLl9vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuX2FwcGVuZE9ubHk9ITEsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBlbihkPT50aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZSh1PT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLm5nWm9uZS5ydW4oKCk9PmQubmV4dCh1KSkpKSksdGhpcy5yZW5kZXJlZFJhbmdlU3RyZWFtPXRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LHRoaXMuX3RvdGFsQ29udGVudFNpemU9MCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iIix0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9IiIsdGhpcy5fcmVuZGVyZWRSYW5nZT17c3RhcnQ6MCxlbmQ6MH0sdGhpcy5fZGF0YUxlbmd0aD0wLHRoaXMuX3ZpZXdwb3J0U2l6ZT0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W10sdGhpcy5fdmlld3BvcnRDaGFuZ2VzPXluLkVNUFRZLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1sLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2hlY2tWaWV3cG9ydFNpemUoKX0pLHRoaXMuc2Nyb2xsYWJsZXx8KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay12aXJ0dWFsLXNjcm9sbGFibGUiKSx0aGlzLnNjcm9sbGFibGU9dGhpcyl9bmdPbkluaXQoKXshdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5zY3JvbGxhYmxlPT09dGhpcyYmc3VwZXIubmdPbkluaXQoKSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5zY3JvbGxhYmxlLmVsZW1lbnRTY3JvbGxlZCgpLnBpcGUoTm4obnVsbCksaWMoMCxOX2UpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFNjcm9sbGVkKCkpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFjaCgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fZGV0YWNoZWRTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRDaGFuZ2VzLnVuc3Vic2NyaWJlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1hdHRhY2goZSl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9mb3JPZj1lLHRoaXMuX2Zvck9mLmRhdGFTdHJlYW0ucGlwZShvdCh0aGlzLl9kZXRhY2hlZFN1YmplY3QpKS5zdWJzY3JpYmUoaT0+e2xldCByPWkubGVuZ3RoO3IhPT10aGlzLl9kYXRhTGVuZ3RoJiYodGhpcy5fZGF0YUxlbmd0aD1yLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKSksdGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pfSl9ZGV0YWNoKCl7dGhpcy5fZm9yT2Y9bnVsbCx0aGlzLl9kZXRhY2hlZFN1YmplY3QubmV4dCgpfWdldERhdGFMZW5ndGgoKXtyZXR1cm4gdGhpcy5fZGF0YUxlbmd0aH1nZXRWaWV3cG9ydFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRTaXplfWdldFJlbmRlcmVkUmFuZ2UoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRSYW5nZX1tZWFzdXJlQm91bmRpbmdDbGllbnRSZWN0V2l0aFNjcm9sbE9mZnNldChlKXtyZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXX1zZXRUb3RhbENvbnRlbnRTaXplKGUpe3RoaXMuX3RvdGFsQ29udGVudFNpemUhPT1lJiYodGhpcy5fdG90YWxDb250ZW50U2l6ZT1lLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCkpfXNldFJlbmRlcmVkUmFuZ2UoZSl7KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4uc3RhcnQ9PXQuc3RhcnQmJm4uZW5kPT10LmVuZH0pKHRoaXMuX3JlbmRlcmVkUmFuZ2UsZSl8fCh0aGlzLmFwcGVuZE9ubHkmJihlPXtzdGFydDowLGVuZDpNYXRoLm1heCh0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCxlLmVuZCl9KSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2U9ZSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50UmVuZGVyZWQoKSkpfWdldE9mZnNldFRvUmVuZGVyZWRDb250ZW50U3RhcnQoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlP251bGw6dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0fXNldFJlbmRlcmVkQ29udGVudE9mZnNldChlLGk9InRvLXN0YXJ0Iil7ZT10aGlzLmFwcGVuZE9ubHkmJiJ0by1zdGFydCI9PT1pPzA6ZTtsZXQgbz0iaG9yaXpvbnRhbCI9PXRoaXMub3JpZW50YXRpb24sYT1vPyJYIjoiWSIsbD1gdHJhbnNsYXRlJHthfSgke051bWJlcigobyYmdGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZT8tMToxKSplKX1weClgO3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD1lLCJ0by1lbmQiPT09aSYmKGwrPWAgdHJhbnNsYXRlJHthfSgtMTAwJSlgLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMCksdGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtIT1sJiYodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtPWwsdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+e3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT8odGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0LT10aGlzLm1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCksdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldCkpOnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCl9KSl9c2Nyb2xsVG9PZmZzZXQoZSxpPSJhdXRvIil7bGV0IHI9e2JlaGF2aW9yOml9OyJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/ci5zdGFydD1lOnIudG9wPWUsdGhpcy5zY3JvbGxhYmxlLnNjcm9sbFRvKHIpfXNjcm9sbFRvSW5kZXgoZSxpPSJhdXRvIil7dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsVG9JbmRleChlLGkpfW1lYXN1cmVTY3JvbGxPZmZzZXQoZSl7bGV0IGk7cmV0dXJuIGk9dGhpcy5zY3JvbGxhYmxlPT10aGlzP3I9PnN1cGVyLm1lYXN1cmVTY3JvbGxPZmZzZXQocik6cj0+dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQociksTWF0aC5tYXgoMCxpKGU/PygiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJzdGFydCI6InRvcCIpKS10aGlzLm1lYXN1cmVWaWV3cG9ydE9mZnNldCgpKX1tZWFzdXJlVmlld3BvcnRPZmZzZXQoZSl7bGV0IGkscj0ibGVmdCIsbz0icmlnaHQiLGE9InJ0bCI9PXRoaXMuZGlyPy52YWx1ZTtpPSJzdGFydCI9PWU/YT9vOnI6ImVuZCI9PWU/YT9yOm86ZXx8KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/ImxlZnQiOiJ0b3AiKTtsZXQgcz10aGlzLnNjcm9sbGFibGUubWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxPZmZzZXQoaSk7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2ldLXN9bWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKXtsZXQgZT10aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/ZS5vZmZzZXRXaWR0aDplLm9mZnNldEhlaWdodH1tZWFzdXJlUmFuZ2VTaXplKGUpe3JldHVybiB0aGlzLl9mb3JPZj90aGlzLl9mb3JPZi5tZWFzdXJlUmFuZ2VTaXplKGUsdGhpcy5vcmllbnRhdGlvbik6MH1jaGVja1ZpZXdwb3J0U2l6ZSgpe3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCl9X21lYXN1cmVWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3cG9ydFNpemU9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVWaWV3cG9ydFNpemUodGhpcy5vcmllbnRhdGlvbil9X21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoZSl7ZSYmdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb24ucHVzaChlKSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmd8fCh0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITAsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9kb0NoYW5nZURldGVjdGlvbigpfSkpKX1fZG9DaGFuZ2VEZXRlY3Rpb24oKXt0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtLHRoaXMubmdab25lLnJ1bigoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO2xldCBlPXRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uO3RoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdO2ZvcihsZXQgaSBvZiBlKWkoKX1fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpe3RoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyIiOmAke3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGA6IiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoRnQpLEMoYXQpLEMoWDcsOCksQyhIaSw4KSxDKFJmKSxDKEtvKSxDKHE3LDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZZZShBX2UsNyksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS5fY29udGVudFdyYXBwZXI9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZRZSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwiLCJob3Jpem9udGFsIj09PWkub3JpZW50YXRpb24pKCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwiLCJob3Jpem9udGFsIiE9PWkub3JpZW50YXRpb24pfSxpbnB1dHM6e29yaWVudGF0aW9uOiJvcmllbnRhdGlvbiIsYXBwZW5kT25seToiYXBwZW5kT25seSJ9LG91dHB1dHM6e3Njcm9sbGVkSW5kZXhDaGFuZ2U6InNjcm9sbGVkSW5kZXhDaGFuZ2UifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltSdChbe3Byb3ZpZGU6QnUsdXNlRmFjdG9yeToodCxlKT0+dHx8ZSxkZXBzOltbbmV3IEFhLG5ldyBtaChxNyldLG5dfV0pLExlLEZQXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ul9lLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzEsImNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIiXSxbImNvbnRlbnRXcmFwcGVyIiwiIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnbigpLGgoMCwiZGl2IiwwLDEpLFh0KDIpLGcoKSxQKDMsImRpdiIsMikpLDImZSYmKGIoMyksTXQoIndpZHRoIixpLl90b3RhbENvbnRlbnRXaWR0aCkoImhlaWdodCIsaS5fdG90YWxDb250ZW50SGVpZ2h0KSl9LHN0eWxlczpbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5jZGstdmlydHVhbC1zY3JvbGxhYmxle292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9uO2NvbnRhaW46c3RyaWN0Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjb250YWluOmNvbnRlbnR9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3JpZ2h0OjA7bGVmdDphdXRvfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4taGVpZ2h0OjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLXdpZHRoOjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntoZWlnaHQ6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwO2ZsZXg6MCAwIGF1dG99W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFk3KG4sdCxlKXtpZighZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIDA7bGV0IHI9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4iaG9yaXpvbnRhbCI9PT1uPyJzdGFydCI9PT10P3IubGVmdDpyLnJpZ2h0OiJzdGFydCI9PT10P3IudG9wOnIuYm90dG9tfXZhciBaNz0oKCk9PntjbGFzcyBue2dldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoZSl7dGhpcy5fY2RrVmlydHVhbEZvck9mPWUsZnVuY3Rpb24obil7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNvbm5lY3QmJiEobiBpbnN0YW5jZW9mIExfKX0oZSk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChlKTp0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KG5ldyBqMShIXyhlKT9lOkFycmF5LmZyb20oZXx8W10pKSl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeShlKXt0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeT1lPyhpLHIpPT5lKGkrKHRoaXMuX3JlbmRlcmVkUmFuZ2U/dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydDowKSxyKTp2b2lkIDB9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fdGVtcGxhdGU9ZSl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGUpe3RoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplPURpKGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5fdGVtcGxhdGU9aSx0aGlzLl9kaWZmZXJzPXIsdGhpcy5fdmlld1JlcGVhdGVyPW8sdGhpcy5fdmlld3BvcnQ9YSx0aGlzLnZpZXdDaGFuZ2U9bmV3IEFlLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzPW5ldyBBZSx0aGlzLmRhdGFTdHJlYW09dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMucGlwZShObihudWxsKSxZbSgpLHlpKChbbCxjXSk9PnRoaXMuX2NoYW5nZURhdGFTb3VyY2UobCxjKSksRWEoMSkpLHRoaXMuX2RpZmZlcj1udWxsLHRoaXMuX25lZWRzVXBkYXRlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgQWUsdGhpcy5kYXRhU3RyZWFtLnN1YnNjcmliZShsPT57dGhpcy5fZGF0YT1sLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGw9Pnt0aGlzLl9yZW5kZXJlZFJhbmdlPWwsdGhpcy52aWV3Q2hhbmdlLm9ic2VydmVycy5sZW5ndGgmJnMucnVuKCgpPT50aGlzLnZpZXdDaGFuZ2UubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlKSksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LmF0dGFjaCh0aGlzKX1tZWFzdXJlUmFuZ2VTaXplKGUsaSl7aWYoZS5zdGFydD49ZS5lbmQpcmV0dXJuIDA7bGV0IGEscyxyPWUuc3RhcnQtdGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCxvPWUuZW5kLWUuc3RhcnQ7Zm9yKGxldCBsPTA7bDxvO2wrKyl7bGV0IGM9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQobCtyKTtpZihjJiZjLnJvb3ROb2Rlcy5sZW5ndGgpe2E9cz1jLnJvb3ROb2Rlc1swXTticmVha319Zm9yKGxldCBsPW8tMTtsPi0xO2wtLSl7bGV0IGM9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQobCtyKTtpZihjJiZjLnJvb3ROb2Rlcy5sZW5ndGgpe3M9Yy5yb290Tm9kZXNbYy5yb290Tm9kZXMubGVuZ3RoLTFdO2JyZWFrfX1yZXR1cm4gYSYmcz9ZNyhpLCJlbmQiLHMpLVk3KGksInN0YXJ0IixhKTowfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlciYmdGhpcy5fbmVlZHNVcGRhdGUpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX3JlbmRlcmVkSXRlbXMpO2U/dGhpcy5fYXBwbHlDaGFuZ2VzKGUpOnRoaXMuX3VwZGF0ZUNvbnRleHQoKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMX19bmdPbkRlc3Ryb3koKXt0aGlzLl92aWV3cG9ydC5kZXRhY2goKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KHZvaWQgMCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLnZpZXdDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdSZXBlYXRlci5kZXRhY2goKX1fb25SZW5kZXJlZERhdGFDaGFuZ2UoKXshdGhpcy5fcmVuZGVyZWRSYW5nZXx8KHRoaXMuX3JlbmRlcmVkSXRlbXM9dGhpcy5fZGF0YS5zbGljZSh0aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSx0aGlzLl9kaWZmZXJ8fCh0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHRoaXMuX3JlbmRlcmVkSXRlbXMpLmNyZWF0ZSgoZSxpKT0+dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT90aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5KGUsaSk6aSkpLHRoaXMuX25lZWRzVXBkYXRlPSEwKX1fY2hhbmdlRGF0YVNvdXJjZShlLGkpe3JldHVybiBlJiZlLmRpc2Nvbm5lY3QodGhpcyksdGhpcy5fbmVlZHNVcGRhdGU9ITAsaT9pLmNvbm5lY3QodGhpcyk6cXQoKX1fdXBkYXRlQ29udGV4dCgpe2xldCBlPXRoaXMuX2RhdGEubGVuZ3RoLGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtpLS07KXtsZXQgcj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChpKTtyLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtpLHIuY29udGV4dC5jb3VudD1lLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoci5jb250ZXh0KSxyLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyhlKXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKGUsdGhpcy5fdmlld0NvbnRhaW5lclJlZiwobyxhLHMpPT50aGlzLl9nZXRFbWJlZGRlZFZpZXdBcmdzKG8scyksbz0+by5pdGVtKSxlLmZvckVhY2hJZGVudGl0eUNoYW5nZShvPT57dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoby5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PW8uaXRlbX0pO2xldCBpPXRoaXMuX2RhdGEubGVuZ3RoLHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtyLS07KXtsZXQgbz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChyKTtvLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtyLG8uY29udGV4dC5jb3VudD1pLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoby5jb250ZXh0KX19X3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoZSl7ZS5maXJzdD0wPT09ZS5pbmRleCxlLmxhc3Q9ZS5pbmRleD09PWUuY291bnQtMSxlLmV2ZW49ZS5pbmRleCUyPT0wLGUub2RkPSFlLmV2ZW59X2dldEVtYmVkZGVkVmlld0FyZ3MoZSxpKXtyZXR1cm57dGVtcGxhdGVSZWY6dGhpcy5fdGVtcGxhdGUsY29udGV4dDp7JGltcGxpY2l0OmUuaXRlbSxjZGtWaXJ0dWFsRm9yT2Y6dGhpcy5fY2RrVmlydHVhbEZvck9mLGluZGV4Oi0xLGNvdW50Oi0xLGZpcnN0OiExLGxhc3Q6ITEsb2RkOiExLGV2ZW46ITF9LGluZGV4Oml9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFpuKSxDKFNpKSxDKHZsKSxDKEcxKSxDKENnLDQpLEMoYXQpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JPZiIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2RrVmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W1J0KFt7cHJvdmlkZTpHMSx1c2VDbGFzczpxYn1dKV19KSxufSkoKSxSYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7fSksbn0pKCksTWQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W051LFJjLENnLE51LFJjXX0pLG59KSgpLFliPWNsYXNze2F0dGFjaCh0KXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRIb3N0PXQsdC5hdHRhY2godGhpcyl9ZGV0YWNoKCl7bGV0IHQ9dGhpcy5fYXR0YWNoZWRIb3N0O251bGwhPXQmJih0aGlzLl9hdHRhY2hlZEhvc3Q9bnVsbCx0LmRldGFjaCgpKX1nZXQgaXNBdHRhY2hlZCgpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9c2V0QXR0YWNoZWRIb3N0KHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fX0sUGw9Y2xhc3MgZXh0ZW5kcyBZYntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKCksdGhpcy5jb21wb25lbnQ9dCx0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmluamVjdG9yPWksdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9cix0aGlzLnByb2plY3RhYmxlTm9kZXM9b319LEpvPWNsYXNzIGV4dGVuZHMgWWJ7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoKSx0aGlzLnRlbXBsYXRlUmVmPXQsdGhpcy52aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5jb250ZXh0PWksdGhpcy5pbmplY3Rvcj1yfWdldCBvcmlnaW4oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZVJlZi5lbGVtZW50UmVmfWF0dGFjaCh0LGU9dGhpcy5jb250ZXh0KXtyZXR1cm4gdGhpcy5jb250ZXh0PWUsc3VwZXIuYXR0YWNoKHQpfWRldGFjaCgpe3JldHVybiB0aGlzLmNvbnRleHQ9dm9pZCAwLHN1cGVyLmRldGFjaCgpfX0sUjI9Y2xhc3MgZXh0ZW5kcyBZYntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZWxlbWVudD10IGluc3RhbmNlb2YgYmU/dC5uYXRpdmVFbGVtZW50OnR9fSxWdT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5hdHRhY2hEb21Qb3J0YWw9bnVsbH1oYXNBdHRhY2hlZCgpe3JldHVybiEhdGhpcy5fYXR0YWNoZWRQb3J0YWx9YXR0YWNoKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUGw/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hDb21wb25lbnRQb3J0YWwodCkpOnQgaW5zdGFuY2VvZiBKbz8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpKTp0aGlzLmF0dGFjaERvbVBvcnRhbCYmdCBpbnN0YW5jZW9mIFIyPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoRG9tUG9ydGFsKHQpKTp2b2lkIDB9ZGV0YWNoKCl7dGhpcy5fYXR0YWNoZWRQb3J0YWwmJih0aGlzLl9hdHRhY2hlZFBvcnRhbC5zZXRBdHRhY2hlZEhvc3QobnVsbCksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCksdGhpcy5faW52b2tlRGlzcG9zZUZuKCl9ZGlzcG9zZSgpe3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy5kZXRhY2goKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKSx0aGlzLl9pc0Rpc3Bvc2VkPSEwfXNldERpc3Bvc2VGbih0KXt0aGlzLl9kaXNwb3NlRm49dH1faW52b2tlRGlzcG9zZUZuKCl7dGhpcy5fZGlzcG9zZUZuJiYodGhpcy5fZGlzcG9zZUZuKCksdGhpcy5fZGlzcG9zZUZuPW51bGwpfX0sWGI9Y2xhc3MgZXh0ZW5kcyBWdXtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKCksdGhpcy5vdXRsZXRFbGVtZW50PXQsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWUsdGhpcy5fYXBwUmVmPWksdGhpcy5fZGVmYXVsdEluamVjdG9yPXIsdGhpcy5hdHRhY2hEb21Qb3J0YWw9YT0+e2xldCBzPWEuZWxlbWVudCxsPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImRvbS1wb3J0YWwiKTtzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwscyksdGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHMpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWEsc3VwZXIuc2V0RGlzcG9zZUZuKCgpPT57bC5wYXJlbnROb2RlJiZsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHMsbCl9KX0sdGhpcy5fZG9jdW1lbnQ9b31hdHRhY2hDb21wb25lbnRQb3J0YWwodCl7bGV0IHIsaT0odC5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ8fHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5jb21wb25lbnQpO3JldHVybiB0LnZpZXdDb250YWluZXJSZWY/KHI9dC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChpLHQudmlld0NvbnRhaW5lclJlZi5sZW5ndGgsdC5pbmplY3Rvcnx8dC52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yLHQucHJvamVjdGFibGVOb2Rlc3x8dm9pZCAwKSx0aGlzLnNldERpc3Bvc2VGbigoKT0+ci5kZXN0cm95KCkpKToocj1pLmNyZWF0ZSh0LmluamVjdG9yfHx0aGlzLl9kZWZhdWx0SW5qZWN0b3J8fGJpLk5VTEwpLHRoaXMuX2FwcFJlZi5hdHRhY2hWaWV3KHIuaG9zdFZpZXcpLHRoaXMuc2V0RGlzcG9zZUZuKCgpPT57dGhpcy5fYXBwUmVmLnZpZXdDb3VudD4wJiZ0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyhyLmhvc3RWaWV3KSxyLmRlc3Ryb3koKX0pKSx0aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZ2V0Q29tcG9uZW50Um9vdE5vZGUocikpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQscn1hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KXtsZXQgZT10LnZpZXdDb250YWluZXJSZWYsaT1lLmNyZWF0ZUVtYmVkZGVkVmlldyh0LnRlbXBsYXRlUmVmLHQuY29udGV4dCx7aW5qZWN0b3I6dC5pbmplY3Rvcn0pO3JldHVybiBpLnJvb3ROb2Rlcy5mb3JFYWNoKHI9PnRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZChyKSksaS5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zZXREaXNwb3NlRm4oKCk9PntsZXQgcj1lLmluZGV4T2YoaSk7LTEhPT1yJiZlLnJlbW92ZShyKX0pLHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsaX1kaXNwb3NlKCl7c3VwZXIuZGlzcG9zZSgpLHRoaXMub3V0bGV0RWxlbWVudC5yZW1vdmUoKX1fZ2V0Q29tcG9uZW50Um9vdE5vZGUodCl7cmV0dXJuIHQuaG9zdFZpZXcucm9vdE5vZGVzWzBdfX0sSzc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEpve2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhTaSksQyhabikpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtQb3J0YWwiLCIiXV0sZXhwb3J0QXM6WyJjZGtQb3J0YWwiXSxmZWF0dXJlczpbTGVdfSksbn0pKCksTm89KCgpPT57Y2xhc3MgbiBleHRlbmRzIFZ1e2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9aSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuYXR0YWNoZWQ9bmV3IEwsdGhpcy5hdHRhY2hEb21Qb3J0YWw9bz0+e2xldCBhPW8uZWxlbWVudCxzPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImRvbS1wb3J0YWwiKTtvLnNldEF0dGFjaGVkSG9zdCh0aGlzKSxhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHMsYSksdGhpcy5fZ2V0Um9vdE5vZGUoKS5hcHBlbmRDaGlsZChhKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1vLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+e3MucGFyZW50Tm9kZSYmcy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChhLHMpfSl9LHRoaXMuX2RvY3VtZW50PXJ9Z2V0IHBvcnRhbCgpe3JldHVybiB0aGlzLl9hdHRhY2hlZFBvcnRhbH1zZXQgcG9ydGFsKGUpe3RoaXMuaGFzQXR0YWNoZWQoKSYmIWUmJiF0aGlzLl9pc0luaXRpYWxpemVkfHwodGhpcy5oYXNBdHRhY2hlZCgpJiZzdXBlci5kZXRhY2goKSxlJiZzdXBlci5hdHRhY2goZSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZXx8bnVsbCl9Z2V0IGF0dGFjaGVkUmVmKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUmVmfW5nT25Jbml0KCl7dGhpcy5faXNJbml0aWFsaXplZD0hMH1uZ09uRGVzdHJveSgpe3N1cGVyLmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2hlZFJlZj10aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtsZXQgaT1udWxsIT1lLnZpZXdDb250YWluZXJSZWY/ZS52aWV3Q29udGFpbmVyUmVmOnRoaXMuX3ZpZXdDb250YWluZXJSZWYsbz0oZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ8fHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZS5jb21wb25lbnQpLGE9aS5jcmVhdGVDb21wb25lbnQobyxpLmxlbmd0aCxlLmluamVjdG9yfHxpLmluamVjdG9yLGUucHJvamVjdGFibGVOb2Rlc3x8dm9pZCAwKTtyZXR1cm4gaSE9PXRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQoYS5ob3N0Vmlldy5yb290Tm9kZXNbMF0pLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+YS5kZXN0cm95KCkpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9YSx0aGlzLmF0dGFjaGVkLmVtaXQoYSksYX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhlLnRlbXBsYXRlUmVmLGUuY29udGV4dCx7aW5qZWN0b3I6ZS5pbmplY3Rvcn0pO3JldHVybiBzdXBlci5zZXREaXNwb3NlRm4oKCk9PnRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1pLHRoaXMuYXR0YWNoZWQuZW1pdChpKSxpfV9nZXRSb290Tm9kZSgpe2xldCBlPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiBlLm5vZGVUeXBlPT09ZS5FTEVNRU5UX05PREU/ZTplLnBhcmVudE5vZGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoUXIpLEMoWm4pLEMoa3QpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLGlucHV0czp7cG9ydGFsOlsiY2RrUG9ydGFsT3V0bGV0IiwicG9ydGFsIl19LG91dHB1dHM6e2F0dGFjaGVkOiJhdHRhY2hlZCJ9LGV4cG9ydEFzOlsiY2RrUG9ydGFsT3V0bGV0Il0sZmVhdHVyZXM6W0xlXX0pLG59KSgpLHVzPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHt9KSxufSkoKSxKNz1QMSgpLHExPWNsYXNze2VuYWJsZSgpe31kaXNhYmxlKCl7fWF0dGFjaCgpe319O2Z1bmN0aW9uIE8yKG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLmJvdHRvbTxlLnRvcHx8bi50b3A+ZS5ib3R0b218fG4ucmlnaHQ8ZS5sZWZ0fHxuLmxlZnQ+ZS5yaWdodCl9ZnVuY3Rpb24gJDcobix0KXtyZXR1cm4gdC5zb21lKGU9Pm4udG9wPGUudG9wfHxuLmJvdHRvbT5lLmJvdHRvbXx8bi5sZWZ0PGUubGVmdHx8bi5yaWdodD5lLnJpZ2h0KX12YXIgUGY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1hdHRhY2godCl7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLmF1dG9DbG9zZSl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtPMihlLFt7d2lkdGg6aSxoZWlnaHQ6cixib3R0b206cixyaWdodDppLHRvcDowLGxlZnQ6MH1dKSYmKHRoaXMuZGlzYWJsZSgpLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCkpKX19KSl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fSxCX2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1pLHRoaXMuX25nWm9uZT1yLHRoaXMubm9vcD0oKT0+bmV3IHExLHRoaXMuY2xvc2U9YT0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPSgpPT57dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKX19YXR0YWNoKHQpe3RoaXMuX292ZXJsYXlSZWY9dH1lbmFibGUoKXtpZih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pcmV0dXJuO2xldCB0PXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCkucGlwZShWZShlPT4hZXx8IXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCkpKTt0aGlzLl9jb25maWcmJnRoaXMuX2NvbmZpZy50aHJlc2hvbGQmJnRoaXMuX2NvbmZpZy50aHJlc2hvbGQ+MT8odGhpcy5faW5pdGlhbFNjcm9sbFBvc2l0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcCx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dC5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3A7TWF0aC5hYnMoZS10aGlzLl9pbml0aWFsU2Nyb2xsUG9zaXRpb24pPnRoaXMuX2NvbmZpZy50aHJlc2hvbGQ/dGhpcy5fZGV0YWNoKCk6dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpOnRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSh0aGlzLl9kZXRhY2gpfWRpc2FibGUoKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9ZGV0YWNoKCl7dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsfX0odGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcixhKSx0aGlzLmJsb2NrPSgpPT5uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzPXt0b3A6IiIsbGVmdDoiIn0sdGhpcy5faXNFbmFibGVkPSExLHRoaXMuX2RvY3VtZW50PWV9YXR0YWNoKCl7fWVuYWJsZSgpe2lmKHRoaXMuX2NhbkJlRW5hYmxlZCgpKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdD10LnN0eWxlLmxlZnR8fCIiLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A9dC5zdHlsZS50b3B8fCIiLHQuc3R5bGUubGVmdD1acigtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0KSx0LnN0eWxlLnRvcD1acigtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLHRoaXMuX2lzRW5hYmxlZD0hMH19ZGlzYWJsZSgpe2lmKHRoaXMuX2lzRW5hYmxlZCl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9dC5zdHlsZSxyPXRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUsbz1pLnNjcm9sbEJlaGF2aW9yfHwiIixhPXIuc2Nyb2xsQmVoYXZpb3J8fCIiO3RoaXMuX2lzRW5hYmxlZD0hMSxpLmxlZnQ9dGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQsaS50b3A9dGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLnRvcCx0LmNsYXNzTGlzdC5yZW1vdmUoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSxKNyYmKGkuc2Nyb2xsQmVoYXZpb3I9ci5zY3JvbGxCZWhhdmlvcj0iYXV0byIpLHdpbmRvdy5zY3JvbGwodGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSxKNyYmKGkuc2Nyb2xsQmVoYXZpb3I9byxyLnNjcm9sbEJlaGF2aW9yPWEpfX1fY2FuQmVFbmFibGVkKCl7aWYodGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpfHx0aGlzLl9pc0VuYWJsZWQpcmV0dXJuITE7bGV0IGU9dGhpcy5fZG9jdW1lbnQuYm9keSxpPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJuIGUuc2Nyb2xsSGVpZ2h0PmkuaGVpZ2h0fHxlLnNjcm9sbFdpZHRoPmkud2lkdGh9fSh0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50KSx0aGlzLnJlcG9zaXRpb249YT0+bmV3IFBmKHRoaXMuX3Njcm9sbERpc3BhdGNoZXIsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9uZ1pvbmUsYSksdGhpcy5fZG9jdW1lbnQ9b319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhSZiksTyhLbyksTyhhdCksTyhrdCkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLFdzPWNsYXNze2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMuc2Nyb2xsU3RyYXRlZ3k9bmV3IHExLHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSExLHRoaXMuYmFja2Ryb3BDbGFzcz0iY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCIsdGhpcy5kaXNwb3NlT25OYXZpZ2F0aW9uPSExLHQpe2xldCBlPU9iamVjdC5rZXlzKHQpO2ZvcihsZXQgaSBvZiBlKXZvaWQgMCE9PXRbaV0mJih0aGlzW2ldPXRbaV0pfX19LHI5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fYXR0YWNoZWRPdmVybGF5cz1bXSx0aGlzLl9kb2N1bWVudD1lfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKX1hZGQoZSl7dGhpcy5yZW1vdmUoZSksdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5wdXNoKGUpfXJlbW92ZShlKXtsZXQgaT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmluZGV4T2YoZSk7aT4tMSYmdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5zcGxpY2UoaSwxKSwwPT09dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5sZW5ndGgmJnRoaXMuZGV0YWNoKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oa3QpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxWX2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHI5e2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoZSksdGhpcy5fbmdab25lPWksdGhpcy5fa2V5ZG93bkxpc3RlbmVyPXI9PntsZXQgbz10aGlzLl9hdHRhY2hlZE92ZXJsYXlzO2ZvcihsZXQgYT1vLmxlbmd0aC0xO2E+LTE7YS0tKWlmKG9bYV0uX2tleWRvd25FdmVudHMub2JzZXJ2ZXJzLmxlbmd0aD4wKXtsZXQgcz1vW2FdLl9rZXlkb3duRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5zLm5leHQocikpOnMubmV4dChyKTticmVha319fWFkZChlKXtzdXBlci5hZGQoZSksdGhpcy5faXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMuX2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSk6dGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIpLHRoaXMuX2lzQXR0YWNoZWQ9ITApfWRldGFjaCgpe3RoaXMuX2lzQXR0YWNoZWQmJih0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciksdGhpcy5faXNBdHRhY2hlZD0hMSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oa3QpLE8oYXQsOCkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEhfZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcjl7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUpLHRoaXMuX3BsYXRmb3JtPWksdGhpcy5fbmdab25lPXIsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMSx0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyPW89Pnt0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0PWRzKG8pfSx0aGlzLl9jbGlja0xpc3RlbmVyPW89PntsZXQgYT1kcyhvKSxzPSJjbGljayI9PT1vLnR5cGUmJnRoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ/dGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldDphO3RoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ9bnVsbDtsZXQgbD10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNsaWNlKCk7Zm9yKGxldCBjPWwubGVuZ3RoLTE7Yz4tMTtjLS0pe2xldCBkPWxbY107aWYoZC5fb3V0c2lkZVBvaW50ZXJFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aDwxfHwhZC5oYXNBdHRhY2hlZCgpKWNvbnRpbnVlO2lmKGQub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoYSl8fGQub3ZlcmxheUVsZW1lbnQuY29udGFpbnMocykpYnJlYWs7bGV0IHU9ZC5fb3V0c2lkZVBvaW50ZXJFdmVudHM7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW4oKCk9PnUubmV4dChvKSk6dS5uZXh0KG8pfX19YWRkKGUpe2lmKHN1cGVyLmFkZChlKSwhdGhpcy5faXNBdHRhY2hlZCl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuYm9keTt0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9hZGRFdmVudExpc3RlbmVycyhpKSk6dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoaSksdGhpcy5fcGxhdGZvcm0uSU9TJiYhdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKHRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWU9aS5zdHlsZS5jdXJzb3IsaS5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITApLHRoaXMuX2lzQXR0YWNoZWQ9ITB9fWRldGFjaCgpe2lmKHRoaXMuX2lzQXR0YWNoZWQpe2xldCBlPXRoaXMuX2RvY3VtZW50LmJvZHk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJhdXhjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksdGhpcy5fcGxhdGZvcm0uSU9TJiZ0aGlzLl9jdXJzb3JTdHlsZUlzU2V0JiYoZS5zdHlsZS5jdXJzb3I9dGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZSx0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSExKSx0aGlzLl9pc0F0dGFjaGVkPSExfX1fYWRkRXZlbnRMaXN0ZW5lcnMoZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwhMCksZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5hZGRFdmVudExpc3RlbmVyKCJhdXhjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oa3QpLE8oJG4pLE8oYXQsOCkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLE9mPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2RvY3VtZW50PWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jb250YWluZXJFbGVtZW50Py5yZW1vdmUoKX1nZXRDb250YWluZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckVsZW1lbnR8fHRoaXMuX2NyZWF0ZUNvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnR9X2NyZWF0ZUNvbnRhaW5lcigpe2xldCBlPSJjZGstb3ZlcmxheS1jb250YWluZXIiO2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8VmIoKSl7bGV0IHI9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7ZX1bcGxhdGZvcm09InNlcnZlciJdLCAuJHtlfVtwbGF0Zm9ybT0idGVzdCJdYCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspcltvXS5yZW1vdmUoKX1sZXQgaT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpLmNsYXNzTGlzdC5hZGQoZSksVmIoKT9pLnNldEF0dHJpYnV0ZSgicGxhdGZvcm0iLCJ0ZXN0Iik6dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHxpLnNldEF0dHJpYnV0ZSgicGxhdGZvcm0iLCJzZXJ2ZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9aX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhrdCksTygkbikpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLE9sPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxhLHMsbCxjLGQ9ITEpe3RoaXMuX3BvcnRhbE91dGxldD10LHRoaXMuX2hvc3Q9ZSx0aGlzLl9wYW5lPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fbmdab25lPW8sdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPWEsdGhpcy5fZG9jdW1lbnQ9cyx0aGlzLl9sb2NhdGlvbj1sLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXI9Yyx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ZCx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCx0aGlzLl9iYWNrZHJvcENsaWNrPW5ldyBBZSx0aGlzLl9hdHRhY2htZW50cz1uZXcgQWUsdGhpcy5fZGV0YWNobWVudHM9bmV3IEFlLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz15bi5FTVBUWSx0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlcj11PT50aGlzLl9iYWNrZHJvcENsaWNrLm5leHQodSksdGhpcy5fYmFja2Ryb3BUcmFuc2l0aW9uZW5kSGFuZGxlcj11PT57dGhpcy5fZGlzcG9zZUJhY2tkcm9wKHUudGFyZ2V0KX0sdGhpcy5fa2V5ZG93bkV2ZW50cz1uZXcgQWUsdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHM9bmV3IEFlLHIuc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9zY3JvbGxTdHJhdGVneT1yLnNjcm9sbFN0cmF0ZWd5LHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKSksdGhpcy5fcG9zaXRpb25TdHJhdGVneT1yLnBvc2l0aW9uU3RyYXRlZ3l9Z2V0IG92ZXJsYXlFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3BhbmV9Z2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2hvc3R9YXR0YWNoKHQpeyF0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudCYmdGhpcy5fcHJldmlvdXNIb3N0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpO2xldCBlPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2godCk7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuX3VwZGF0ZVN0YWNraW5nT3JkZXIoKSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKSx0aGlzLl9zY3JvbGxTdHJhdGVneSYmdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoenQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy51cGRhdGVQb3NpdGlvbigpfSksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMCksdGhpcy5fY29uZmlnLmhhc0JhY2tkcm9wJiZ0aGlzLl9hdHRhY2hCYWNrZHJvcCgpLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MsITApLHRoaXMuX2F0dGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIuYWRkKHRoaXMpLHRoaXMuX2NvbmZpZy5kaXNwb3NlT25OYXZpZ2F0aW9uJiYodGhpcy5fbG9jYXRpb25DaGFuZ2VzPXRoaXMuX2xvY2F0aW9uLnN1YnNjcmliZSgoKT0+dGhpcy5kaXNwb3NlKCkpKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLmFkZCh0aGlzKSwiZnVuY3Rpb24iPT10eXBlb2YgZT8ub25EZXN0cm95JiZlLm9uRGVzdHJveSgoKT0+e3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLmRldGFjaCgpKSl9KSxlfWRldGFjaCgpe2lmKCF0aGlzLmhhc0F0dGFjaGVkKCkpcmV0dXJuO3RoaXMuZGV0YWNoQmFja2Ryb3AoKSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCExKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneSYmdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO2xldCB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKSx0aGlzLl9sb2NhdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0fWRpc3Bvc2UoKXtsZXQgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCksdGhpcy5fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCksdGhpcy5fZGlzcG9zZUJhY2tkcm9wKHRoaXMuX2JhY2tkcm9wRWxlbWVudCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9wb3J0YWxPdXRsZXQuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaG1lbnRzLmNvbXBsZXRlKCksdGhpcy5fYmFja2Ryb3BDbGljay5jb21wbGV0ZSgpLHRoaXMuX2tleWRvd25FdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2hvc3Q/LnJlbW92ZSgpLHRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudD10aGlzLl9wYW5lPXRoaXMuX2hvc3Q9bnVsbCx0JiZ0aGlzLl9kZXRhY2htZW50cy5uZXh0KCksdGhpcy5fZGV0YWNobWVudHMuY29tcGxldGUoKX1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX1iYWNrZHJvcENsaWNrKCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wQ2xpY2t9YXR0YWNobWVudHMoKXtyZXR1cm4gdGhpcy5fYXR0YWNobWVudHN9ZGV0YWNobWVudHMoKXtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHN9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9rZXlkb3duRXZlbnRzfW91dHNpZGVQb2ludGVyRXZlbnRzKCl7cmV0dXJuIHRoaXMuX291dHNpZGVQb2ludGVyRXZlbnRzfWdldENvbmZpZygpe3JldHVybiB0aGlzLl9jb25maWd9dXBkYXRlUG9zaXRpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCl9dXBkYXRlUG9zaXRpb25TdHJhdGVneSh0KXt0IT09dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9dCx0aGlzLmhhc0F0dGFjaGVkKCkmJih0LmF0dGFjaCh0aGlzKSx0aGlzLnVwZGF0ZVBvc2l0aW9uKCkpKX11cGRhdGVTaXplKHQpe3RoaXMuX2NvbmZpZz17Li4udGhpcy5fY29uZmlnLC4uLnR9LHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCl9c2V0RGlyZWN0aW9uKHQpe3RoaXMuX2NvbmZpZz17Li4udGhpcy5fY29uZmlnLGRpcmVjdGlvbjp0fSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCl9YWRkUGFuZWxDbGFzcyh0KXt0aGlzLl9wYW5lJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdCwhMCl9cmVtb3ZlUGFuZWxDbGFzcyh0KXt0aGlzLl9wYW5lJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdCwhMSl9Z2V0RGlyZWN0aW9uKCl7bGV0IHQ9dGhpcy5fY29uZmlnLmRpcmVjdGlvbjtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnZhbHVlOiJsdHIifXVwZGF0ZVNjcm9sbFN0cmF0ZWd5KHQpe3QhPT10aGlzLl9zY3JvbGxTdHJhdGVneSYmKHRoaXMuX2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdC5lbmFibGUoKSkpfV91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCl7dGhpcy5faG9zdC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5nZXREaXJlY3Rpb24oKSl9X3VwZGF0ZUVsZW1lbnRTaXplKCl7aWYoIXRoaXMuX3BhbmUpcmV0dXJuO2xldCB0PXRoaXMuX3BhbmUuc3R5bGU7dC53aWR0aD1acih0aGlzLl9jb25maWcud2lkdGgpLHQuaGVpZ2h0PVpyKHRoaXMuX2NvbmZpZy5oZWlnaHQpLHQubWluV2lkdGg9WnIodGhpcy5fY29uZmlnLm1pbldpZHRoKSx0Lm1pbkhlaWdodD1acih0aGlzLl9jb25maWcubWluSGVpZ2h0KSx0Lm1heFdpZHRoPVpyKHRoaXMuX2NvbmZpZy5tYXhXaWR0aCksdC5tYXhIZWlnaHQ9WnIodGhpcy5fY29uZmlnLm1heEhlaWdodCl9X3RvZ2dsZVBvaW50ZXJFdmVudHModCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/IiI6Im5vbmUifV9hdHRhY2hCYWNrZHJvcCgpe2xldCB0PSJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIjt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiZ0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktYmFja2Ryb3Atbm9vcC1hbmltYXRpb24iKSx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9iYWNrZHJvcEVsZW1lbnQsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITApLHRoaXMuX2hvc3QucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2hvc3QpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXIpLCF0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQmJnR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU8InUiP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuX2JhY2tkcm9wRWxlbWVudCYmdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQodCl9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpfV91cGRhdGVTdGFja2luZ09yZGVyKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfWRldGFjaEJhY2tkcm9wKCl7bGV0IHQ9dGhpcy5fYmFja2Ryb3BFbGVtZW50O2lmKHQpe2lmKHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZClyZXR1cm4gdm9pZCB0aGlzLl9kaXNwb3NlQmFja2Ryb3AodCk7dC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIiksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLl9iYWNrZHJvcFRyYW5zaXRpb25lbmRIYW5kbGVyKX0pLHQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsdGhpcy5fYmFja2Ryb3BUaW1lb3V0PXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+c2V0VGltZW91dCgoKT0+e3RoaXMuX2Rpc3Bvc2VCYWNrZHJvcCh0KX0sNTAwKSl9fV90b2dnbGVDbGFzc2VzKHQsZSxpKXtsZXQgcj11ZyhlfHxbXSkuZmlsdGVyKG89PiEhbyk7ci5sZW5ndGgmJihpP3QuY2xhc3NMaXN0LmFkZCguLi5yKTp0LmNsYXNzTGlzdC5yZW1vdmUoLi4ucikpfV9kZXRhY2hDb250ZW50V2hlblN0YWJsZSgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCB0PXRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKG90KGNuKHRoaXMuX2F0dGFjaG1lbnRzLHRoaXMuX2RldGFjaG1lbnRzKSkpLnN1YnNjcmliZSgoKT0+eyghdGhpcy5fcGFuZXx8IXRoaXMuX2hvc3R8fDA9PT10aGlzLl9wYW5lLmNoaWxkcmVuLmxlbmd0aCkmJih0aGlzLl9wYW5lJiZ0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCExKSx0aGlzLl9ob3N0JiZ0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5faG9zdC5wYXJlbnRFbGVtZW50LHRoaXMuX2hvc3QucmVtb3ZlKCkpLHQudW5zdWJzY3JpYmUoKSl9KX0pfV9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKXtsZXQgdD10aGlzLl9zY3JvbGxTdHJhdGVneTt0JiYodC5kaXNhYmxlKCksdC5kZXRhY2gmJnQuZGV0YWNoKCkpfV9kaXNwb3NlQmFja2Ryb3AodCl7dCYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRoaXMuX2JhY2tkcm9wVHJhbnNpdGlvbmVuZEhhbmRsZXIpLHQucmVtb3ZlKCksdGhpcy5fYmFja2Ryb3BFbGVtZW50PT09dCYmKHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsKSksdGhpcy5fYmFja2Ryb3BUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX2JhY2tkcm9wVGltZW91dCksdGhpcy5fYmFja2Ryb3BUaW1lb3V0PXZvaWQgMCl9fSxlOT0iY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCIsel9lPS8oW0EtWmEteiVdKykkLztmdW5jdGlvbiBrZihuLHQpe2ZvcihsZXQgZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pO3JldHVybiBufWZ1bmN0aW9uIHQ5KG4pe2lmKCJudW1iZXIiIT10eXBlb2YgbiYmbnVsbCE9bil7bGV0W3QsZV09bi5zcGxpdCh6X2UpO3JldHVybiBlJiYicHgiIT09ZT9udWxsOnBhcnNlRmxvYXQodCl9cmV0dXJuIG58fG51bGx9ZnVuY3Rpb24gbjkobil7cmV0dXJue3RvcDpNYXRoLmZsb29yKG4udG9wKSxyaWdodDpNYXRoLmZsb29yKG4ucmlnaHQpLGJvdHRvbTpNYXRoLmZsb29yKG4uYm90dG9tKSxsZWZ0Ok1hdGguZmxvb3Iobi5sZWZ0KSx3aWR0aDpNYXRoLmZsb29yKG4ud2lkdGgpLGhlaWdodDpNYXRoLmZsb29yKG4uaGVpZ2h0KX19dmFyIGk5PSJjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciIsVV9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl9vdmVybGF5Q29udGFpbmVyPW99Z2xvYmFsKCl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2Nzc1Bvc2l0aW9uPSJzdGF0aWMiLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fYWxpZ25JdGVtcz0iIix0aGlzLl94UG9zaXRpb249IiIsdGhpcy5feE9mZnNldD0iIix0aGlzLl93aWR0aD0iIix0aGlzLl9oZWlnaHQ9IiIsdGhpcy5faXNEaXNwb3NlZD0hMX1hdHRhY2godCl7bGV0IGU9dC5nZXRDb25maWcoKTt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fd2lkdGgmJiFlLndpZHRoJiZ0LnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMuX3dpZHRofSksdGhpcy5faGVpZ2h0JiYhZS5oZWlnaHQmJnQudXBkYXRlU2l6ZSh7aGVpZ2h0OnRoaXMuX2hlaWdodH0pLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChpOSksdGhpcy5faXNEaXNwb3NlZD0hMX10b3AodD0iIil7cmV0dXJuIHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl90b3BPZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LXN0YXJ0Iix0aGlzfWxlZnQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249ImxlZnQiLHRoaXN9Ym90dG9tKHQ9IiIpe3JldHVybiB0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1lbmQiLHRoaXN9cmlnaHQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249InJpZ2h0Iix0aGlzfXN0YXJ0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJzdGFydCIsdGhpc31lbmQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249ImVuZCIsdGhpc313aWR0aCh0PSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe3dpZHRoOnR9KTp0aGlzLl93aWR0aD10LHRoaXN9aGVpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfWNlbnRlckhvcml6b250YWxseSh0PSIiKXtyZXR1cm4gdGhpcy5sZWZ0KHQpLHRoaXMuX3hQb3NpdGlvbj0iY2VudGVyIix0aGlzfWNlbnRlclZlcnRpY2FsbHkodD0iIil7cmV0dXJuIHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc31hcHBseSgpe2lmKCF0aGlzLl9vdmVybGF5UmVmfHwhdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKXJldHVybjtsZXQgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZSxpPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkse3dpZHRoOnIsaGVpZ2h0Om8sbWF4V2lkdGg6YSxtYXhIZWlnaHQ6c309aSxsPSEoIjEwMCUiIT09ciYmIjEwMHZ3IiE9PXJ8fGEmJiIxMDAlIiE9PWEmJiIxMDB2dyIhPT1hKSxjPSEoIjEwMCUiIT09byYmIjEwMHZoIiE9PW98fHMmJiIxMDAlIiE9PXMmJiIxMDB2aCIhPT1zKSxkPXRoaXMuX3hQb3NpdGlvbix1PXRoaXMuX3hPZmZzZXQscD0icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuZGlyZWN0aW9uLGY9IiIsbT0iIix5PSIiO2w/eT0iZmxleC1zdGFydCI6ImNlbnRlciI9PT1kPyh5PSJjZW50ZXIiLHA/bT11OmY9dSk6cD8ibGVmdCI9PT1kfHwiZW5kIj09PWQ/KHk9ImZsZXgtZW5kIixmPXUpOigicmlnaHQiPT09ZHx8InN0YXJ0Ij09PWQpJiYoeT0iZmxleC1zdGFydCIsbT11KToibGVmdCI9PT1kfHwic3RhcnQiPT09ZD8oeT0iZmxleC1zdGFydCIsZj11KTooInJpZ2h0Ij09PWR8fCJlbmQiPT09ZCkmJih5PSJmbGV4LWVuZCIsbT11KSx0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD1sPyIwIjpmLHQubWFyZ2luVG9wPWM/IjAiOnRoaXMuX3RvcE9mZnNldCx0Lm1hcmdpbkJvdHRvbT10aGlzLl9ib3R0b21PZmZzZXQsdC5tYXJnaW5SaWdodD1sPyIwIjptLGUuanVzdGlmeUNvbnRlbnQ9eSxlLmFsaWduSXRlbXM9Yz8iZmxleC1zdGFydCI6dGhpcy5fYWxpZ25JdGVtc31kaXNwb3NlKCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX292ZXJsYXlSZWYpcmV0dXJuO2xldCB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LGk9ZS5zdHlsZTtlLmNsYXNzTGlzdC5yZW1vdmUoaTkpLGkuanVzdGlmeUNvbnRlbnQ9aS5hbGlnbkl0ZW1zPXQubWFyZ2luVG9wPXQubWFyZ2luQm90dG9tPXQubWFyZ2luTGVmdD10Lm1hcmdpblJpZ2h0PXQucG9zaXRpb249IiIsdGhpcy5fb3ZlcmxheVJlZj1udWxsLHRoaXMuX2lzRGlzcG9zZWQ9ITB9fX1mbGV4aWJsZUNvbm5lY3RlZFRvKGUpe3JldHVybiBuZXcgY2xhc3N7Z2V0IHBvc2l0aW9ucygpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnN9Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX292ZXJsYXlDb250YWluZXI9byx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPXt3aWR0aDowLGhlaWdodDowfSx0aGlzLl9pc1B1c2hlZD0hMSx0aGlzLl9jYW5QdXNoPSEwLHRoaXMuX2dyb3dBZnRlck9wZW49ITEsdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPSEwLHRoaXMuX3Bvc2l0aW9uTG9ja2VkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTAsdGhpcy5fc2Nyb2xsYWJsZXM9W10sdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcz1uZXcgQWUsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXluLkVNUFRZLHRoaXMuX29mZnNldFg9MCx0aGlzLl9vZmZzZXRZPTAsdGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcz1bXSx0aGlzLnBvc2l0aW9uQ2hhbmdlcz10aGlzLl9wb3NpdGlvbkNoYW5nZXMsdGhpcy5zZXRPcmlnaW4odCl9YXR0YWNoKHQpe3RoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGU5KSx0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fYm91bmRpbmdCb3g9dC5ob3N0RWxlbWVudCx0aGlzLl9wYW5lPXQub3ZlcmxheUVsZW1lbnQsdGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLl9pc0luaXRpYWxSZW5kZXI9ITAsdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuYXBwbHkoKX0pfWFwcGx5KCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47aWYoIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmdGhpcy5fcG9zaXRpb25Mb2NrZWQmJnRoaXMuX2xhc3RQb3NpdGlvbilyZXR1cm4gdm9pZCB0aGlzLnJlYXBwbHlMYXN0UG9zaXRpb24oKTt0aGlzLl9jbGVhclBhbmVsQ2xhc3NlcygpLHRoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCksdGhpcy5fb3JpZ2luUmVjdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBhLHQ9dGhpcy5fb3JpZ2luUmVjdCxlPXRoaXMuX292ZXJsYXlSZWN0LGk9dGhpcy5fdmlld3BvcnRSZWN0LHI9dGhpcy5fY29udGFpbmVyUmVjdCxvPVtdO2ZvcihsZXQgcyBvZiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpe2xldCBsPXRoaXMuX2dldE9yaWdpblBvaW50KHQscixzKSxjPXRoaXMuX2dldE92ZXJsYXlQb2ludChsLGUscyksZD10aGlzLl9nZXRPdmVybGF5Rml0KGMsZSxpLHMpO2lmKGQuaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihzLGwpO3RoaXMuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnMoZCxjLGkpP28ucHVzaCh7cG9zaXRpb246cyxvcmlnaW46bCxvdmVybGF5UmVjdDplLGJvdW5kaW5nQm94UmVjdDp0aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QobCxzKX0pOighYXx8YS5vdmVybGF5Rml0LnZpc2libGVBcmVhPGQudmlzaWJsZUFyZWEpJiYoYT17b3ZlcmxheUZpdDpkLG92ZXJsYXlQb2ludDpjLG9yaWdpblBvaW50OmwscG9zaXRpb246cyxvdmVybGF5UmVjdDplfSl9aWYoby5sZW5ndGgpe2xldCBzPW51bGwsbD0tMTtmb3IobGV0IGMgb2Ygbyl7bGV0IGQ9Yy5ib3VuZGluZ0JveFJlY3Qud2lkdGgqYy5ib3VuZGluZ0JveFJlY3QuaGVpZ2h0KihjLnBvc2l0aW9uLndlaWdodHx8MSk7ZD5sJiYobD1kLHM9Yyl9cmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihzLnBvc2l0aW9uLHMub3JpZ2luKX1pZih0aGlzLl9jYW5QdXNoKXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMCx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oYS5wb3NpdGlvbixhLm9yaWdpblBvaW50KTt0aGlzLl9hcHBseVBvc2l0aW9uKGEucG9zaXRpb24sYS5vcmlnaW5Qb2ludCl9ZGV0YWNoKCl7dGhpcy5fY2xlYXJQYW5lbENsYXNzZXMoKSx0aGlzLl9sYXN0UG9zaXRpb249bnVsbCx0aGlzLl9wcmV2aW91c1B1c2hBbW91bnQ9bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2JvdW5kaW5nQm94JiZrZih0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSx7dG9wOiIiLGxlZnQ6IiIscmlnaHQ6IiIsYm90dG9tOiIiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSksdGhpcy5fcGFuZSYmdGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShlOSksdGhpcy5kZXRhY2goKSx0aGlzLl9wb3NpdGlvbkNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX2JvdW5kaW5nQm94PW51bGwsdGhpcy5faXNEaXNwb3NlZD0hMCl9cmVhcHBseUxhc3RQb3NpdGlvbigpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2xldCB0PXRoaXMuX2xhc3RQb3NpdGlvbjtpZih0KXt0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX2dldE9yaWdpblJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0aGlzLl9jb250YWluZXJSZWN0LHQpO3RoaXMuX2FwcGx5UG9zaXRpb24odCxlKX1lbHNlIHRoaXMuYXBwbHkoKX13aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVzPXQsdGhpc313aXRoUG9zaXRpb25zKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dCwtMT09PXQuaW5kZXhPZih0aGlzLl9sYXN0UG9zaXRpb24pJiYodGhpcy5fbGFzdFBvc2l0aW9uPW51bGwpLHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdGhpc313aXRoVmlld3BvcnRNYXJnaW4odCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0TWFyZ2luPXQsdGhpc313aXRoRmxleGlibGVEaW1lbnNpb25zKHQ9ITApe3JldHVybiB0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9dCx0aGlzfXdpdGhHcm93QWZ0ZXJPcGVuKHQ9ITApe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVuPXQsdGhpc313aXRoUHVzaCh0PSEwKXtyZXR1cm4gdGhpcy5fY2FuUHVzaD10LHRoaXN9d2l0aExvY2tlZFBvc2l0aW9uKHQ9ITApe3JldHVybiB0aGlzLl9wb3NpdGlvbkxvY2tlZD10LHRoaXN9c2V0T3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXdpdGhEZWZhdWx0T2Zmc2V0WCh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9d2l0aERlZmF1bHRPZmZzZXRZKHQpe3JldHVybiB0aGlzLl9vZmZzZXRZPXQsdGhpc313aXRoVHJhbnNmb3JtT3JpZ2luT24odCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yPXQsdGhpc31fZ2V0T3JpZ2luUG9pbnQodCxlLGkpe2xldCByLG87aWYoImNlbnRlciI9PWkub3JpZ2luWClyPXQubGVmdCt0LndpZHRoLzI7ZWxzZXtsZXQgYT10aGlzLl9pc1J0bCgpP3QucmlnaHQ6dC5sZWZ0LHM9dGhpcy5faXNSdGwoKT90LmxlZnQ6dC5yaWdodDtyPSJzdGFydCI9PWkub3JpZ2luWD9hOnN9cmV0dXJuIGUubGVmdDwwJiYoci09ZS5sZWZ0KSxvPSJjZW50ZXIiPT1pLm9yaWdpblk/dC50b3ArdC5oZWlnaHQvMjoidG9wIj09aS5vcmlnaW5ZP3QudG9wOnQuYm90dG9tLGUudG9wPDAmJihvLT1lLnRvcCkse3g6cix5Om99fV9nZXRPdmVybGF5UG9pbnQodCxlLGkpe2xldCByLG87cmV0dXJuIHI9ImNlbnRlciI9PWkub3ZlcmxheVg/LWUud2lkdGgvMjoic3RhcnQiPT09aS5vdmVybGF5WD90aGlzLl9pc1J0bCgpPy1lLndpZHRoOjA6dGhpcy5faXNSdGwoKT8wOi1lLndpZHRoLG89ImNlbnRlciI9PWkub3ZlcmxheVk/LWUuaGVpZ2h0LzI6InRvcCI9PWkub3ZlcmxheVk/MDotZS5oZWlnaHQse3g6dC54K3IseTp0Lnkrb319X2dldE92ZXJsYXlGaXQodCxlLGkscil7bGV0IG89bjkoZSkse3g6YSx5OnN9PXQsbD10aGlzLl9nZXRPZmZzZXQociwieCIpLGM9dGhpcy5fZ2V0T2Zmc2V0KHIsInkiKTtsJiYoYSs9bCksYyYmKHMrPWMpO2xldCBwPTAtcyxmPXMrby5oZWlnaHQtaS5oZWlnaHQsbT10aGlzLl9zdWJ0cmFjdE92ZXJmbG93cyhvLndpZHRoLDAtYSxhK28ud2lkdGgtaS53aWR0aCkseT10aGlzLl9zdWJ0cmFjdE92ZXJmbG93cyhvLmhlaWdodCxwLGYpLE09bSp5O3JldHVybnt2aXNpYmxlQXJlYTpNLGlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0Om8ud2lkdGgqby5oZWlnaHQ9PT1NLGZpdHNJblZpZXdwb3J0VmVydGljYWxseTp5PT09by5oZWlnaHQsZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHk6bT09by53aWR0aH19X2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnModCxlLGkpe2lmKHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyl7bGV0IHI9aS5ib3R0b20tZS55LG89aS5yaWdodC1lLngsYT10OSh0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbkhlaWdodCkscz10OSh0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbldpZHRoKTtyZXR1cm4odC5maXRzSW5WaWV3cG9ydFZlcnRpY2FsbHl8fG51bGwhPWEmJmE8PXIpJiYodC5maXRzSW5WaWV3cG9ydEhvcml6b250YWxseXx8bnVsbCE9cyYmczw9byl9cmV0dXJuITF9X3B1c2hPdmVybGF5T25TY3JlZW4odCxlLGkpe2lmKHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudCYmdGhpcy5fcG9zaXRpb25Mb2NrZWQpcmV0dXJue3g6dC54K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC54LHk6dC55K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC55fTtsZXQgcj1uOShlKSxvPXRoaXMuX3ZpZXdwb3J0UmVjdCxhPU1hdGgubWF4KHQueCtyLndpZHRoLW8ud2lkdGgsMCkscz1NYXRoLm1heCh0Lnkrci5oZWlnaHQtby5oZWlnaHQsMCksbD1NYXRoLm1heChvLnRvcC1pLnRvcC10LnksMCksYz1NYXRoLm1heChvLmxlZnQtaS5sZWZ0LXQueCwwKSxkPTAsdT0wO3JldHVybiBkPXIud2lkdGg8PW8ud2lkdGg/Y3x8LWE6dC54PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28ubGVmdC1pLmxlZnQtdC54OjAsdT1yLmhlaWdodDw9by5oZWlnaHQ/bHx8LXM6dC55PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28udG9wLWkudG9wLXQueTowLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD17eDpkLHk6dX0se3g6dC54K2QseTp0LnkrdX19X2FwcGx5UG9zaXRpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHQucGFuZWxDbGFzcyYmdGhpcy5fYWRkUGFuZWxDbGFzc2VzKHQucGFuZWxDbGFzcyksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLm9ic2VydmVycy5sZW5ndGgpe2xldCBpPXRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSxyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfX0odCxpKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChyKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2xldCBpLGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcikscj10Lm92ZXJsYXlZO2k9ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7aX0gJHtyfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2xldCBvLGEscyxkLHUscCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKWE9dC55LG89aS5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlzPWkuaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLG89aS5oZWlnaHQtcyt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2xldCBmPU1hdGgubWluKGkuYm90dG9tLXQueStpLnRvcCx0LnkpLG09dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7bz0yKmYsYT10LnktZixvPm0mJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYoYT10LnktbS8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFyfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmcilwPWkud2lkdGgtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGQ9dC54LXRoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFyfHwiZW5kIj09PWUub3ZlcmxheVgmJnIpdT10LngsZD1pLnJpZ2h0LXQueDtlbHNle2xldCBmPU1hdGgubWluKGkucmlnaHQtdC54K2kubGVmdCx0LngpLG09dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDtkPTIqZix1PXQueC1mLGQ+bSYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJih1PXQueC1tLzIpfXJldHVybnt0b3A6YSxsZWZ0OnUsYm90dG9tOnMscmlnaHQ6cCx3aWR0aDpkLGhlaWdodDpvfX1fc2V0Qm91bmRpbmdCb3hTdHlsZXModCxlKXtsZXQgaT10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTshdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0KSxpLndpZHRoPU1hdGgubWluKGkud2lkdGgsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aCkpO2xldCByPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlyLnRvcD1yLmxlZnQ9IjAiLHIuYm90dG9tPXIucmlnaHQ9ci5tYXhIZWlnaHQ9ci5tYXhXaWR0aD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle2xldCBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LGE9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1acihpLmhlaWdodCksci50b3A9WnIoaS50b3ApLHIuYm90dG9tPVpyKGkuYm90dG9tKSxyLndpZHRoPVpyKGkud2lkdGgpLHIubGVmdD1acihpLmxlZnQpLHIucmlnaHQ9WnIoaS5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihyLm1heEhlaWdodD1acihvKSksYSYmKHIubWF4V2lkdGg9WnIoYSkpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9aSxrZih0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxyKX1fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpe2tmKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9X3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKXtrZih0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiIsdHJhbnNmb3JtOiIifSl9X3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKHQsZSl7bGV0IGk9e30scj10aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCksbz10aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMsYT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO2lmKHIpe2xldCBkPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO2tmKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsZCkpLGtmKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsZCkpfWVsc2UgaS5wb3NpdGlvbj0ic3RhdGljIjtsZXQgcz0iIixsPXRoaXMuX2dldE9mZnNldChlLCJ4IiksYz10aGlzLl9nZXRPZmZzZXQoZSwieSIpO2wmJihzKz1gdHJhbnNsYXRlWCgke2x9cHgpIGApLGMmJihzKz1gdHJhbnNsYXRlWSgke2N9cHgpYCksaS50cmFuc2Zvcm09cy50cmltKCksYS5tYXhIZWlnaHQmJihyP2kubWF4SGVpZ2h0PVpyKGEubWF4SGVpZ2h0KTpvJiYoaS5tYXhIZWlnaHQ9IiIpKSxhLm1heFdpZHRoJiYocj9pLm1heFdpZHRoPVpyKGEubWF4V2lkdGgpOm8mJihpLm1heFdpZHRoPSIiKSksa2YodGhpcy5fcGFuZS5zdHlsZSxpKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsaSl7bGV0IHI9e3RvcDoiIixib3R0b206IiJ9LG89dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYobz10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKG8sdGhpcy5fb3ZlcmxheVJlY3QsaSkpLCJib3R0b20iPT09dC5vdmVybGF5WT9yLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShvLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOnIudG9wPVpyKG8ueSkscn1fZ2V0RXhhY3RPdmVybGF5WCh0LGUsaSl7bGV0IGEscj17bGVmdDoiIixyaWdodDoiIn0sbz10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihvPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4obyx0aGlzLl9vdmVybGF5UmVjdCxpKSksYT10aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIsInJpZ2h0Ij09PWE/ci5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKG8ueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjpyLmxlZnQ9WnIoby54KSxyfV9nZXRTY3JvbGxWaXNpYmlsaXR5KCl7bGV0IHQ9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXRoaXMuX3Njcm9sbGFibGVzLm1hcChyPT5yLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOiQ3KHQsaSksaXNPcmlnaW5PdXRzaWRlVmlldzpPMih0LGkpLGlzT3ZlcmxheUNsaXBwZWQ6JDcoZSxpKSxpc092ZXJsYXlPdXRzaWRlVmlldzpPMihlLGkpfX1fc3VidHJhY3RPdmVyZmxvd3ModCwuLi5lKXtyZXR1cm4gZS5yZWR1Y2UoKGkscik9PmktTWF0aC5tYXgociwwKSx0KX1fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGk9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDppLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0OmkubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDppLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206aS50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19X2lzUnRsKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfV9oYXNFeGFjdFBvc2l0aW9uKCl7cmV0dXJuIXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9uc3x8dGhpcy5faXNQdXNoZWR9X2dldE9mZnNldCh0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX1fdmFsaWRhdGVQb3NpdGlvbnMoKXt9X2FkZFBhbmVsQ2xhc3Nlcyh0KXt0aGlzLl9wYW5lJiZ1Zyh0KS5mb3JFYWNoKGU9PnsiIiE9PWUmJi0xPT09dGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5pbmRleE9mKGUpJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5wdXNoKGUpLHRoaXMuX3BhbmUuY2xhc3NMaXN0LmFkZChlKSl9KX1fY2xlYXJQYW5lbENsYXNzZXMoKXt0aGlzLl9wYW5lJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5mb3JFYWNoKHQ9Pnt0aGlzLl9wYW5lLmNsYXNzTGlzdC5yZW1vdmUodCl9KSx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdKX1fZ2V0T3JpZ2luUmVjdCgpe2xldCB0PXRoaXMuX29yaWdpbjtpZih0IGluc3RhbmNlb2YgYmUpcmV0dXJuIHQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0IGluc3RhbmNlb2YgRWxlbWVudClyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgZT10LndpZHRofHwwLGk9dC5oZWlnaHR8fDA7cmV0dXJue3RvcDp0LnksYm90dG9tOnQueStpLGxlZnQ6dC54LHJpZ2h0OnQueCtlLGhlaWdodDppLHdpZHRoOmV9fX0oZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtLHRoaXMuX292ZXJsYXlDb250YWluZXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEtvKSxPKGt0KSxPKCRuKSxPKE9mKSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksal9lPTAsT2k9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLGEscyxsLGMsZCx1LHAsZil7dGhpcy5zY3JvbGxTdHJhdGVnaWVzPWUsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1pLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMuX3Bvc2l0aW9uQnVpbGRlcj1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1hLHRoaXMuX2luamVjdG9yPXMsdGhpcy5fbmdab25lPWwsdGhpcy5fZG9jdW1lbnQ9Yyx0aGlzLl9kaXJlY3Rpb25hbGl0eT1kLHRoaXMuX2xvY2F0aW9uPXUsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1wLHRoaXMuX2FuaW1hdGlvbnNNb2R1bGVUeXBlPWZ9Y3JlYXRlKGUpe2xldCBpPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCkscj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChpKSxvPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChyKSxhPW5ldyBXcyhlKTtyZXR1cm4gYS5kaXJlY3Rpb249YS5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBPbChvLGkscixhLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbG9jYXRpb24sdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlciwiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uc01vZHVsZVR5cGUpfXBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQnVpbGRlcn1fY3JlYXRlUGFuZUVsZW1lbnQoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGkuaWQ9ImNkay1vdmVybGF5LSIral9lKyssaS5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1wYW5lIiksZS5hcHBlbmRDaGlsZChpKSxpfV9jcmVhdGVIb3N0RWxlbWVudCgpe2xldCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZChlKSxlfV9jcmVhdGVQb3J0YWxPdXRsZXQoZSl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoZ2MpKSxuZXcgWGIoZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsdGhpcy5fYXBwUmVmLHRoaXMuX2luamVjdG9yLHRoaXMuX2RvY3VtZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhCX2UpLE8oT2YpLE8oUXIpLE8oVV9lKSxPKFZfZSksTyhiaSksTyhhdCksTyhrdCksTyhIaSksTyhGeSksTyhIX2UpLE8oZGksOCkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEdfZT1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0sbzk9bmV3IGllKCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5IiksSHU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnRSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstb3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsIm92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIl1dLGV4cG9ydEFzOlsiY2RrT3ZlcmxheU9yaWdpbiJdLHN0YW5kYWxvbmU6ITB9KSxufSkoKSx6dT0oKCk9PntjbGFzcyBue2dldCBvZmZzZXRYKCl7cmV0dXJuIHRoaXMuX29mZnNldFh9c2V0IG9mZnNldFgoZSl7dGhpcy5fb2Zmc2V0WD1lLHRoaXMuX3Bvc2l0aW9uJiZ0aGlzLl91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uKX1nZXQgb2Zmc2V0WSgpe3JldHVybiB0aGlzLl9vZmZzZXRZfXNldCBvZmZzZXRZKGUpe3RoaXMuX29mZnNldFk9ZSx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcChlKXt0aGlzLl9oYXNCYWNrZHJvcD1VdChlKX1nZXQgbG9ja1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2tQb3NpdGlvbn1zZXQgbG9ja1Bvc2l0aW9uKGUpe3RoaXMuX2xvY2tQb3NpdGlvbj1VdChlKX1nZXQgZmxleGlibGVEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX2ZsZXhpYmxlRGltZW5zaW9uc31zZXQgZmxleGlibGVEaW1lbnNpb25zKGUpe3RoaXMuX2ZsZXhpYmxlRGltZW5zaW9ucz1VdChlKX1nZXQgZ3Jvd0FmdGVyT3Blbigpe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVufXNldCBncm93QWZ0ZXJPcGVuKGUpe3RoaXMuX2dyb3dBZnRlck9wZW49VXQoZSl9Z2V0IHB1c2goKXtyZXR1cm4gdGhpcy5fcHVzaH1zZXQgcHVzaChlKXt0aGlzLl9wdXNoPVV0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2Rpcj1hLHRoaXMuX2hhc0JhY2tkcm9wPSExLHRoaXMuX2xvY2tQb3NpdGlvbj0hMSx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2ZsZXhpYmxlRGltZW5zaW9ucz0hMSx0aGlzLl9wdXNoPSExLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uPXluLkVNUFRZLHRoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbj15bi5FTVBUWSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb249eW4uRU1QVFksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb249eW4uRU1QVFksdGhpcy52aWV3cG9ydE1hcmdpbj0wLHRoaXMub3Blbj0hMSx0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLmJhY2tkcm9wQ2xpY2s9bmV3IEwsdGhpcy5wb3NpdGlvbkNoYW5nZT1uZXcgTCx0aGlzLmF0dGFjaD1uZXcgTCx0aGlzLmRldGFjaD1uZXcgTCx0aGlzLm92ZXJsYXlLZXlkb3duPW5ldyBMLHRoaXMub3ZlcmxheU91dHNpZGVDbGljaz1uZXcgTCx0aGlzLl90ZW1wbGF0ZVBvcnRhbD1uZXcgSm8oaSxyKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9byx0aGlzLnNjcm9sbFN0cmF0ZWd5PXRoaXMuX3Njcm9sbFN0cmF0ZWd5RmFjdG9yeSgpfWdldCBvdmVybGF5UmVmKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXI/dGhpcy5fZGlyLnZhbHVlOiJsdHIifW5nT25EZXN0cm95KCl7dGhpcy5fYXR0YWNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpfW5nT25DaGFuZ2VzKGUpe3RoaXMuX3Bvc2l0aW9uJiYodGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbiksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0aGlzLndpZHRoLG1pbldpZHRoOnRoaXMubWluV2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LG1pbkhlaWdodDp0aGlzLm1pbkhlaWdodH0pLGUub3JpZ2luJiZ0aGlzLm9wZW4mJnRoaXMuX3Bvc2l0aW9uLmFwcGx5KCkpLGUub3BlbiYmKHRoaXMub3Blbj90aGlzLl9hdHRhY2hPdmVybGF5KCk6dGhpcy5fZGV0YWNoT3ZlcmxheSgpKX1fY3JlYXRlT3ZlcmxheSgpeyghdGhpcy5wb3NpdGlvbnN8fCF0aGlzLnBvc2l0aW9ucy5sZW5ndGgpJiYodGhpcy5wb3NpdGlvbnM9R19lKTtsZXQgZT10aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHRoaXMuX2J1aWxkQ29uZmlnKCkpO3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbj1lLmF0dGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgpPT50aGlzLmF0dGFjaC5lbWl0KCkpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbj1lLmRldGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgpPT50aGlzLmRldGFjaC5lbWl0KCkpLGUua2V5ZG93bkV2ZW50cygpLnN1YnNjcmliZShpPT57dGhpcy5vdmVybGF5S2V5ZG93bi5uZXh0KGkpLDI3PT09aS5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiF5cihpKSYmKGkucHJldmVudERlZmF1bHQoKSx0aGlzLl9kZXRhY2hPdmVybGF5KCkpfSksdGhpcy5fb3ZlcmxheVJlZi5vdXRzaWRlUG9pbnRlckV2ZW50cygpLnN1YnNjcmliZShpPT57dGhpcy5vdmVybGF5T3V0c2lkZUNsaWNrLm5leHQoaSl9KX1fYnVpbGRDb25maWcoKXtsZXQgZT10aGlzLl9wb3NpdGlvbj10aGlzLnBvc2l0aW9uU3RyYXRlZ3l8fHRoaXMuX2NyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKSxpPW5ldyBXcyh7ZGlyZWN0aW9uOnRoaXMuX2Rpcixwb3NpdGlvblN0cmF0ZWd5OmUsc2Nyb2xsU3RyYXRlZ3k6dGhpcy5zY3JvbGxTdHJhdGVneSxoYXNCYWNrZHJvcDp0aGlzLmhhc0JhY2tkcm9wfSk7cmV0dXJuKHRoaXMud2lkdGh8fDA9PT10aGlzLndpZHRoKSYmKGkud2lkdGg9dGhpcy53aWR0aCksKHRoaXMuaGVpZ2h0fHwwPT09dGhpcy5oZWlnaHQpJiYoaS5oZWlnaHQ9dGhpcy5oZWlnaHQpLCh0aGlzLm1pbldpZHRofHwwPT09dGhpcy5taW5XaWR0aCkmJihpLm1pbldpZHRoPXRoaXMubWluV2lkdGgpLCh0aGlzLm1pbkhlaWdodHx8MD09PXRoaXMubWluSGVpZ2h0KSYmKGkubWluSGVpZ2h0PXRoaXMubWluSGVpZ2h0KSx0aGlzLmJhY2tkcm9wQ2xhc3MmJihpLmJhY2tkcm9wQ2xhc3M9dGhpcy5iYWNrZHJvcENsYXNzKSx0aGlzLnBhbmVsQ2xhc3MmJihpLnBhbmVsQ2xhc3M9dGhpcy5wYW5lbENsYXNzKSxpfV91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KGUpe2xldCBpPXRoaXMucG9zaXRpb25zLm1hcChyPT4oe29yaWdpblg6ci5vcmlnaW5YLG9yaWdpblk6ci5vcmlnaW5ZLG92ZXJsYXlYOnIub3ZlcmxheVgsb3ZlcmxheVk6ci5vdmVybGF5WSxvZmZzZXRYOnIub2Zmc2V0WHx8dGhpcy5vZmZzZXRYLG9mZnNldFk6ci5vZmZzZXRZfHx0aGlzLm9mZnNldFkscGFuZWxDbGFzczpyLnBhbmVsQ2xhc3N8fHZvaWQgMH0pKTtyZXR1cm4gZS5zZXRPcmlnaW4odGhpcy5fZ2V0RmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKCkpLndpdGhQb3NpdGlvbnMoaSkud2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0aGlzLmZsZXhpYmxlRGltZW5zaW9ucykud2l0aFB1c2godGhpcy5wdXNoKS53aXRoR3Jvd0FmdGVyT3Blbih0aGlzLmdyb3dBZnRlck9wZW4pLndpdGhWaWV3cG9ydE1hcmdpbih0aGlzLnZpZXdwb3J0TWFyZ2luKS53aXRoTG9ja2VkUG9zaXRpb24odGhpcy5sb2NrUG9zaXRpb24pLndpdGhUcmFuc2Zvcm1PcmlnaW5Pbih0aGlzLnRyYW5zZm9ybU9yaWdpblNlbGVjdG9yKX1fY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpe2xldCBlPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2dldEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbigpKTtyZXR1cm4gdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneShlKSxlfV9nZXRGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oKXtyZXR1cm4gdGhpcy5vcmlnaW4gaW5zdGFuY2VvZiBIdT90aGlzLm9yaWdpbi5lbGVtZW50UmVmOnRoaXMub3JpZ2lufV9hdHRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLmhhc0JhY2tkcm9wPXRoaXMuaGFzQmFja2Ryb3A6dGhpcy5fY3JlYXRlT3ZlcmxheSgpLHRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKXx8dGhpcy5fb3ZlcmxheVJlZi5hdHRhY2godGhpcy5fdGVtcGxhdGVQb3J0YWwpLHRoaXMuaGFzQmFja2Ryb3A/dGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb249dGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKGU9Pnt0aGlzLmJhY2tkcm9wQ2xpY2suZW1pdChlKX0pOnRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGg+MCYmKHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPXRoaXMuX3Bvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKFVfKCgpPT50aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGg+MCkpLnN1YnNjcmliZShlPT57dGhpcy5wb3NpdGlvbkNoYW5nZS5lbWl0KGUpLDA9PT10aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9KSl9X2RldGFjaE92ZXJsYXkoKXt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhPaSksQyhTaSksQyhabiksQyhvOSksQyhIaSw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1jb25uZWN0ZWQtb3ZlcmxheSIsIiJdLFsiIiwiY29ubmVjdGVkLW92ZXJsYXkiLCIiXSxbIiIsImNka0Nvbm5lY3RlZE92ZXJsYXkiLCIiXV0saW5wdXRzOntvcmlnaW46WyJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwib3JpZ2luIl0scG9zaXRpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsInBvc2l0aW9ucyJdLHBvc2l0aW9uU3RyYXRlZ3k6WyJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25TdHJhdGVneSIsInBvc2l0aW9uU3RyYXRlZ3kiXSxvZmZzZXRYOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFgiLCJvZmZzZXRYIl0sb2Zmc2V0WTpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRZIiwib2Zmc2V0WSJdLHdpZHRoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoIiwid2lkdGgiXSxoZWlnaHQ6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGVpZ2h0IiwiaGVpZ2h0Il0sbWluV2lkdGg6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGgiLCJtaW5XaWR0aCJdLG1pbkhlaWdodDpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5IZWlnaHQiLCJtaW5IZWlnaHQiXSxiYWNrZHJvcENsYXNzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJiYWNrZHJvcENsYXNzIl0scGFuZWxDbGFzczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIiwicGFuZWxDbGFzcyJdLHZpZXdwb3J0TWFyZ2luOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVZpZXdwb3J0TWFyZ2luIiwidmlld3BvcnRNYXJnaW4iXSxzY3JvbGxTdHJhdGVneTpbImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsInNjcm9sbFN0cmF0ZWd5Il0sb3BlbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwib3BlbiJdLGRpc2FibGVDbG9zZTpbImNka0Nvbm5lY3RlZE92ZXJsYXlEaXNhYmxlQ2xvc2UiLCJkaXNhYmxlQ2xvc2UiXSx0cmFuc2Zvcm1PcmlnaW5TZWxlY3RvcjpbImNka0Nvbm5lY3RlZE92ZXJsYXlUcmFuc2Zvcm1PcmlnaW5PbiIsInRyYW5zZm9ybU9yaWdpblNlbGVjdG9yIl0saGFzQmFja2Ryb3A6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3AiLCJoYXNCYWNrZHJvcCJdLGxvY2tQb3NpdGlvbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iLCJsb2NrUG9zaXRpb24iXSxmbGV4aWJsZURpbWVuc2lvbnM6WyJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwiZmxleGlibGVEaW1lbnNpb25zIl0sZ3Jvd0FmdGVyT3BlbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwiZ3Jvd0FmdGVyT3BlbiJdLHB1c2g6WyJjZGtDb25uZWN0ZWRPdmVybGF5UHVzaCIsInB1c2giXX0sb3V0cHV0czp7YmFja2Ryb3BDbGljazoiYmFja2Ryb3BDbGljayIscG9zaXRpb25DaGFuZ2U6InBvc2l0aW9uQ2hhbmdlIixhdHRhY2g6ImF0dGFjaCIsZGV0YWNoOiJkZXRhY2giLG92ZXJsYXlLZXlkb3duOiJvdmVybGF5S2V5ZG93biIsb3ZlcmxheU91dHNpZGVDbGljazoib3ZlcmxheU91dHNpZGVDbGljayJ9LGV4cG9ydEFzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheSJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W0d0XX0pLG59KSgpLHFfZT17cHJvdmlkZTpvOSxkZXBzOltPaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LExyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtwcm92aWRlcnM6W09pLHFfZV0saW1wb3J0czpbTnUsdXMsTWQsTWRdfSksbn0pKCksWV9lPU1hdGgucG93KDIsMzEpLTEsd2Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9vdmVybGF5UmVmPWUsdGhpcy5fYWZ0ZXJEaXNtaXNzZWQ9bmV3IEFlLHRoaXMuX2FmdGVyT3BlbmVkPW5ldyBBZSx0aGlzLl9vbkFjdGlvbj1uZXcgQWUsdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITEsdGhpcy5jb250YWluZXJJbnN0YW5jZT10LHQuX29uRXhpdC5zdWJzY3JpYmUoKCk9PnRoaXMuX2ZpbmlzaERpc21pc3MoKSl9ZGlzbWlzcygpe3RoaXMuX2FmdGVyRGlzbWlzc2VkLmNsb3NlZHx8dGhpcy5jb250YWluZXJJbnN0YW5jZS5leGl0KCksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX1kaXNtaXNzV2l0aEFjdGlvbigpe3RoaXMuX29uQWN0aW9uLmNsb3NlZHx8KHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSEwLHRoaXMuX29uQWN0aW9uLm5leHQoKSx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpLHRoaXMuZGlzbWlzcygpKSxjbGVhclRpbWVvdXQodGhpcy5fZHVyYXRpb25UaW1lb3V0SWQpfWNsb3NlV2l0aEFjdGlvbigpe3RoaXMuZGlzbWlzc1dpdGhBY3Rpb24oKX1fZGlzbWlzc0FmdGVyKHQpe3RoaXMuX2R1cmF0aW9uVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuZGlzbWlzcygpLE1hdGgubWluKHQsWV9lKSl9X29wZW4oKXt0aGlzLl9hZnRlck9wZW5lZC5jbG9zZWR8fCh0aGlzLl9hZnRlck9wZW5lZC5uZXh0KCksdGhpcy5fYWZ0ZXJPcGVuZWQuY29tcGxldGUoKSl9X2ZpbmlzaERpc21pc3MoKXt0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fHRoaXMuX29uQWN0aW9uLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQubmV4dCh7ZGlzbWlzc2VkQnlBY3Rpb246dGhpcy5fZGlzbWlzc2VkQnlBY3Rpb259KSx0aGlzLl9hZnRlckRpc21pc3NlZC5jb21wbGV0ZSgpLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExfWFmdGVyRGlzbWlzc2VkKCl7cmV0dXJuIHRoaXMuX2FmdGVyRGlzbWlzc2VkfWFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuY29udGFpbmVySW5zdGFuY2UuX29uRW50ZXJ9b25BY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25BY3Rpb259fSxNZz1uZXcgaWUoIk1hdFNuYWNrQmFyRGF0YSIpLEZmPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5wb2xpdGVuZXNzPSJhc3NlcnRpdmUiLHRoaXMuYW5ub3VuY2VtZW50TWVzc2FnZT0iIix0aGlzLmR1cmF0aW9uPTAsdGhpcy5kYXRhPW51bGwsdGhpcy5ob3Jpem9udGFsUG9zaXRpb249ImNlbnRlciIsdGhpcy52ZXJ0aWNhbFBvc2l0aW9uPSJib3R0b20ifX0sQjI9e3NuYWNrQmFyU3RhdGU6amkoInN0YXRlIixbSm4oInZvaWQsIGhpZGRlbiIsQnQoe3RyYW5zZm9ybToic2NhbGUoMC44KSIsb3BhY2l0eTowfSkpLEpuKCJ2aXNpYmxlIixCdCh7dHJhbnNmb3JtOiJzY2FsZSgxKSIsb3BhY2l0eToxfSkpLFduKCIqID0+IHZpc2libGUiLEtuKCIxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxXbigiKiA9PiB2b2lkLCAqID0+IGhpZGRlbiIsS24oIjc1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKSIsQnQoe29wYWNpdHk6MH0pKSldKX0sWF9lPTAsVjI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFZ1e2NvbnN0cnVjdG9yKGUsaSxyLG8sYSl7c3VwZXIoKSx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9wbGF0Zm9ybT1vLHRoaXMuc25hY2tCYXJDb25maWc9YSx0aGlzLl9kb2N1bWVudD1waShrdCksdGhpcy5fdHJhY2tlZE1vZGFscz1uZXcgU2V0LHRoaXMuX2Fubm91bmNlRGVsYXk9MTUwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFubm91bmNlPW5ldyBBZSx0aGlzLl9vbkV4aXQ9bmV3IEFlLHRoaXMuX29uRW50ZXI9bmV3IEFlLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLl9saXZlRWxlbWVudElkPSJtYXQtc25hY2stYmFyLWNvbnRhaW5lci1saXZlLSIrWF9lKyssdGhpcy5hdHRhY2hEb21Qb3J0YWw9cz0+e3RoaXMuX2Fzc2VydE5vdEF0dGFjaGVkKCk7bGV0IGw9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaERvbVBvcnRhbChzKTtyZXR1cm4gdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLGx9LHRoaXMuX2xpdmU9ImFzc2VydGl2ZSIhPT1hLnBvbGl0ZW5lc3N8fGEuYW5ub3VuY2VtZW50TWVzc2FnZT8ib2ZmIj09PWEucG9saXRlbmVzcz8ib2ZmIjoicG9saXRlIjoiYXNzZXJ0aXZlIix0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YJiYoInBvbGl0ZSI9PT10aGlzLl9saXZlJiYodGhpcy5fcm9sZT0ic3RhdHVzIiksImFzc2VydGl2ZSI9PT10aGlzLl9saXZlJiYodGhpcy5fcm9sZT0iYWxlcnQiKSl9YXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpe3RoaXMuX2Fzc2VydE5vdEF0dGFjaGVkKCk7bGV0IGk9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChlKTtyZXR1cm4gdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLGl9YXR0YWNoVGVtcGxhdGVQb3J0YWwoZSl7dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwoZSk7cmV0dXJuIHRoaXMuX2FmdGVyUG9ydGFsQXR0YWNoZWQoKSxpfW9uQW5pbWF0aW9uRW5kKGUpe2xldHtmcm9tU3RhdGU6aSx0b1N0YXRlOnJ9PWU7aWYoKCJ2b2lkIj09PXImJiJ2b2lkIiE9PWl8fCJoaWRkZW4iPT09cikmJnRoaXMuX2NvbXBsZXRlRXhpdCgpLCJ2aXNpYmxlIj09PXIpe2xldCBvPXRoaXMuX29uRW50ZXI7dGhpcy5fbmdab25lLnJ1bigoKT0+e28ubmV4dCgpLG8uY29tcGxldGUoKX0pfX1lbnRlcigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2aXNpYmxlIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fc2NyZWVuUmVhZGVyQW5ub3VuY2UoKSl9ZXhpdCgpe3JldHVybiB0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5fYW5pbWF0aW9uU3RhdGU9ImhpZGRlbiIsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWF0LWV4aXQiLCIiKSxjbGVhclRpbWVvdXQodGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQpfSksdGhpcy5fb25FeGl0fW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX2NsZWFyRnJvbU1vZGFscygpLHRoaXMuX2NvbXBsZXRlRXhpdCgpfV9jb21wbGV0ZUV4aXQoKXt0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHp0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5fb25FeGl0Lm5leHQoKSx0aGlzLl9vbkV4aXQuY29tcGxldGUoKX0pfSl9X2FmdGVyUG9ydGFsQXR0YWNoZWQoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT10aGlzLnNuYWNrQmFyQ29uZmlnLnBhbmVsQ2xhc3M7aSYmKEFycmF5LmlzQXJyYXkoaSk/aS5mb3JFYWNoKHI9PmUuY2xhc3NMaXN0LmFkZChyKSk6ZS5jbGFzc0xpc3QuYWRkKGkpKSx0aGlzLl9leHBvc2VUb01vZGFscygpfV9leHBvc2VUb01vZGFscygpe2xldCBlPXRoaXMuX2xpdmVFbGVtZW50SWQsaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdib2R5ID4gLmNkay1vdmVybGF5LWNvbnRhaW5lciBbYXJpYS1tb2RhbD0idHJ1ZSJdJyk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl0sYT1vLmdldEF0dHJpYnV0ZSgiYXJpYS1vd25zIik7dGhpcy5fdHJhY2tlZE1vZGFscy5hZGQobyksYT8tMT09PWEuaW5kZXhPZihlKSYmby5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsYSsiICIrZSk6by5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsZSl9fV9jbGVhckZyb21Nb2RhbHMoKXt0aGlzLl90cmFja2VkTW9kYWxzLmZvckVhY2goZT0+e2xldCBpPWUuZ2V0QXR0cmlidXRlKCJhcmlhLW93bnMiKTtpZihpKXtsZXQgcj1pLnJlcGxhY2UodGhpcy5fbGl2ZUVsZW1lbnRJZCwiIikudHJpbSgpO3IubGVuZ3RoPjA/ZS5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIscik6ZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtb3ducyIpfX0pLHRoaXMuX3RyYWNrZWRNb2RhbHMuY2xlYXIoKX1fYXNzZXJ0Tm90QXR0YWNoZWQoKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX1fc2NyZWVuUmVhZGVyQW5ub3VuY2UoKXt0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZHx8dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+e2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbYXJpYS1oaWRkZW5dIiksaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiW2FyaWEtbGl2ZV0iKTtpZihlJiZpKXtsZXQgcj1udWxsO3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiYocj1kb2N1bWVudC5hY3RpdmVFbGVtZW50KSxlLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSxpLmFwcGVuZENoaWxkKGUpLHI/LmZvY3VzKCksdGhpcy5fb25Bbm5vdW5jZS5uZXh0KCksdGhpcy5fb25Bbm5vdW5jZS5jb21wbGV0ZSgpfX0sdGhpcy5fYW5ub3VuY2VEZWxheSl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhhdCksQyhiZSksQyhGdCksQygkbiksQyhGZikpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmWWUoTm8sNyksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS5fcG9ydGFsT3V0bGV0PXIuZmlyc3QpfX0sZmVhdHVyZXM6W0xlXX0pLG59KSgpLFkxPW5ldyBpZSgibWF0LXNuYWNrLWJhci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGZn19KSxIMj0oKCk9PntjbGFzcyBue2dldCBfb3BlbmVkU25hY2tCYXJSZWYoKXtsZXQgZT10aGlzLl9wYXJlbnRTbmFja0JhcjtyZXR1cm4gZT9lLl9vcGVuZWRTbmFja0JhclJlZjp0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsfXNldCBfb3BlbmVkU25hY2tCYXJSZWYoZSl7dGhpcy5fcGFyZW50U25hY2tCYXI/dGhpcy5fcGFyZW50U25hY2tCYXIuX29wZW5lZFNuYWNrQmFyUmVmPWU6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1lfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fbGl2ZT1pLHRoaXMuX2luamVjdG9yPXIsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPW8sdGhpcy5fcGFyZW50U25hY2tCYXI9YSx0aGlzLl9kZWZhdWx0Q29uZmlnPXMsdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1udWxsfW9wZW5Gcm9tQ29tcG9uZW50KGUsaSl7cmV0dXJuIHRoaXMuX2F0dGFjaChlLGkpfW9wZW5Gcm9tVGVtcGxhdGUoZSxpKXtyZXR1cm4gdGhpcy5fYXR0YWNoKGUsaSl9b3BlbihlLGk9IiIscil7bGV0IG89ey4uLnRoaXMuX2RlZmF1bHRDb25maWcsLi4ucn07cmV0dXJuIG8uZGF0YT17bWVzc2FnZTplLGFjdGlvbjppfSxvLmFubm91bmNlbWVudE1lc3NhZ2U9PT1lJiYoby5hbm5vdW5jZW1lbnRNZXNzYWdlPXZvaWQgMCksdGhpcy5vcGVuRnJvbUNvbXBvbmVudCh0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50LG8pfWRpc21pc3MoKXt0aGlzLl9vcGVuZWRTbmFja0JhclJlZiYmdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpfW5nT25EZXN0cm95KCl7dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCYmdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbC5kaXNtaXNzKCl9X2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyKGUsaSl7bGV0IG89YmkuY3JlYXRlKHtwYXJlbnQ6aSYmaS52aWV3Q29udGFpbmVyUmVmJiZpLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6RmYsdXNlVmFsdWU6aX1dfSksYT1uZXcgUGwodGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxpLnZpZXdDb250YWluZXJSZWYsbykscz1lLmF0dGFjaChhKTtyZXR1cm4gcy5pbnN0YW5jZS5zbmFja0JhckNvbmZpZz1pLHMuaW5zdGFuY2V9X2F0dGFjaChlLGkpe2xldCByPXsuLi5uZXcgRmYsLi4udGhpcy5fZGVmYXVsdENvbmZpZywuLi5pfSxvPXRoaXMuX2NyZWF0ZU92ZXJsYXkociksYT10aGlzLl9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihvLHIpLHM9bmV3IHdkKGEsbyk7aWYoZSBpbnN0YW5jZW9mIFNpKXtsZXQgbD1uZXcgSm8oZSxudWxsLHskaW1wbGljaXQ6ci5kYXRhLHNuYWNrQmFyUmVmOnN9KTtzLmluc3RhbmNlPWEuYXR0YWNoVGVtcGxhdGVQb3J0YWwobCl9ZWxzZXtsZXQgbD10aGlzLl9jcmVhdGVJbmplY3RvcihyLHMpLGM9bmV3IFBsKGUsdm9pZCAwLGwpLGQ9YS5hdHRhY2hDb21wb25lbnRQb3J0YWwoYyk7cy5pbnN0YW5jZT1kLmluc3RhbmNlfXJldHVybiB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZSgiKG1heC13aWR0aDogNTk5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIpLnBpcGUob3Qoby5kZXRhY2htZW50cygpKSkuc3Vic2NyaWJlKGw9PntvLm92ZXJsYXlFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUodGhpcy5oYW5kc2V0Q3NzQ2xhc3MsbC5tYXRjaGVzKX0pLHIuYW5ub3VuY2VtZW50TWVzc2FnZSYmYS5fb25Bbm5vdW5jZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9saXZlLmFubm91bmNlKHIuYW5ub3VuY2VtZW50TWVzc2FnZSxyLnBvbGl0ZW5lc3MpfSksdGhpcy5fYW5pbWF0ZVNuYWNrQmFyKHMsciksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9cyx0aGlzLl9vcGVuZWRTbmFja0JhclJlZn1fYW5pbWF0ZVNuYWNrQmFyKGUsaSl7ZS5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX29wZW5lZFNuYWNrQmFyUmVmPT1lJiYodGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9bnVsbCksaS5hbm5vdW5jZW1lbnRNZXNzYWdlJiZ0aGlzLl9saXZlLmNsZWFyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj8odGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCk9PntlLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCkpOmUuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKSxpLmR1cmF0aW9uJiZpLmR1cmF0aW9uPjAmJmUuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCk9PmUuX2Rpc21pc3NBZnRlcihpLmR1cmF0aW9uKSl9X2NyZWF0ZU92ZXJsYXkoZSl7bGV0IGk9bmV3IFdzO2kuZGlyZWN0aW9uPWUuZGlyZWN0aW9uO2xldCByPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxvPSJydGwiPT09ZS5kaXJlY3Rpb24sYT0ibGVmdCI9PT1lLmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PWUuaG9yaXpvbnRhbFBvc2l0aW9uJiYhb3x8ImVuZCI9PT1lLmhvcml6b250YWxQb3NpdGlvbiYmbyxzPSFhJiYiY2VudGVyIiE9PWUuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBhP3IubGVmdCgiMCIpOnM/ci5yaWdodCgiMCIpOnIuY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT1lLnZlcnRpY2FsUG9zaXRpb24/ci50b3AoIjAiKTpyLmJvdHRvbSgiMCIpLGkucG9zaXRpb25TdHJhdGVneT1yLHRoaXMuX292ZXJsYXkuY3JlYXRlKGkpfV9jcmVhdGVJbmplY3RvcihlLGkpe3JldHVybiBiaS5jcmVhdGUoe3BhcmVudDplJiZlLnZpZXdDb250YWluZXJSZWYmJmUudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTp3ZCx1c2VWYWx1ZTppfSx7cHJvdmlkZTpNZyx1c2VWYWx1ZTplLmRhdGF9XX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKE9pKSxPKHlnKSxPKGJpKSxPKE91KSxPKG4sMTIpLE8oWTEpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBaX2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDIpKDEsImJ1dHRvbiIsMyksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuYWN0aW9uKCkpfSksVCgyKSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtiKDIpLHV0KGUuZGF0YS5hY3Rpb24pfX1mdW5jdGlvbiBLX2Uobix0KXt9dmFyIEpfZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zbmFja0JhclJlZj1lLHRoaXMuZGF0YT1pfWFjdGlvbigpe3RoaXMuc25hY2tCYXJSZWYuZGlzbWlzc1dpdGhBY3Rpb24oKX1nZXQgaGFzQWN0aW9uKCl7cmV0dXJuISF0aGlzLmRhdGEuYWN0aW9ufX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHdkKSxDKE1nKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2ltcGxlLXNuYWNrLWJhciJdXSxob3N0QXR0cnM6WzEsIm1hdC1zaW1wbGUtc25hY2tiYXIiXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sxLCJtYXQtc2ltcGxlLXNuYWNrLWJhci1jb250ZW50Il0sWyJjbGFzcyIsIm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIiw0LCJuZ0lmIl0sWzEsIm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIl0sWyJtYXQtYnV0dG9uIiwiIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwic3BhbiIsMCksVCgxKSxnKCksUygyLFpfZSwzLDEsImRpdiIsMSkpLDImZSYmKGIoMSksdXQoaS5kYXRhLm1lc3NhZ2UpLGIoMSksXygibmdJZiIsaS5oYXNBY3Rpb24pKX0sZGVwZW5kZW5jaWVzOltGZSxGbl0sc3R5bGVzOlsiLm1hdC1zaW1wbGUtc25hY2tiYXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtsaW5lLWhlaWdodDoyMHB4O29wYWNpdHk6MX0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257ZmxleC1zaHJpbms6MDttYXJnaW46LThweCAtOHB4IC04cHggOHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiBidXR0b257bWF4LWhlaWdodDozNnB4O21pbi13aWR0aDowfVtkaXI9cnRsXSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtc2ltcGxlLXNuYWNrLWJhci1jb250ZW50e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLCRfZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVjJ7X2FmdGVyUG9ydGFsQXR0YWNoZWQoKXtzdXBlci5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLCJjZW50ZXIiPT09dGhpcy5zbmFja0JhckNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb24mJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLWNlbnRlciIpLCJ0b3AiPT09dGhpcy5zbmFja0JhckNvbmZpZy52ZXJ0aWNhbFBvc2l0aW9uJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci10b3AiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNuYWNrLWJhci1jb250YWluZXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc25hY2stYmFyLWNvbnRhaW5lciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZacCgiQHN0YXRlLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQW5pbWF0aW9uRW5kKG8pfSksMiZlJiZLcCgiQHN0YXRlIixpLl9hbmltYXRpb25TdGF0ZSl9LGZlYXR1cmVzOltMZV0sZGVjbHM6Myx2YXJzOjMsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApLFMoMSxLX2UsMCwwLCJuZy10ZW1wbGF0ZSIsMSksZygpLFAoMiwiZGl2IikpLDImZSYmKGIoMiksUGUoImFyaWEtbGl2ZSIsaS5fbGl2ZSkoInJvbGUiLGkuX3JvbGUpKCJpZCIsaS5fbGl2ZUVsZW1lbnRJZCkpfSxkZXBlbmRlbmNpZXM6W05vXSxzdHlsZXM6WyIubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjI0cHg7bWF4LXdpZHRoOjMzdnc7bWluLXdpZHRoOjM0NHB4O3BhZGRpbmc6MTRweCAxNnB4O21pbi1oZWlnaHQ6NDhweDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntib3JkZXI6c29saWQgMXB4fS5tYXQtc25hY2stYmFyLWhhbmRzZXR7d2lkdGg6MTAwJX0ubWF0LXNuYWNrLWJhci1oYW5kc2V0IC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcnttYXJnaW46OHB4O21heC13aWR0aDoxMDAlO21pbi13aWR0aDowO3dpZHRoOjEwMCV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbQjIuc25hY2tCYXJTdGF0ZV19fSksbn0pKCksejI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W0xyLHVzLFRlLGZpLFF0LFF0XX0pLG59KSgpLHM5PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBIMntjb25zdHJ1Y3RvcihlLGkscixvLGEscyl7c3VwZXIoZSxpLHIsbyxhLHMpLHRoaXMuc2ltcGxlU25hY2tCYXJDb21wb25lbnQ9Sl9lLHRoaXMuc25hY2tCYXJDb250YWluZXJDb21wb25lbnQ9JF9lLHRoaXMuaGFuZHNldENzc0NsYXNzPSJtYXQtc25hY2stYmFyLWhhbmRzZXQifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKE9pKSxPKHlnKSxPKGJpKSxPKE91KSxPKG4sMTIpLE8oWTEpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjp6Mn0pLG59KSgpLGV5ZT0vW1xcXiQuKis/KClbXF17fXxdL2csYzk9IlxcdTAwMDAtXFx1MDAyMFxcdTAwN2YtXFx1MDA5ZiIsbnllPW5ldyBSZWdFeHAoIig/OlthLXpBLVpdW2EtekEtWjAtOSsuLV17Mix9OlxcL1xcL3xkYXRhOnx3d3dcXC4pW15cXHMiK2M5KyciXXsyLH1bXlxccycrYzkrIlwiJyl9XFxdLDo7LiE/XSIsImd1Iik7ZnVuY3Rpb24gdTkobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7dC5mbGFncy5pbmNsdWRlcygiZyIpfHwodD1uZXcgUmVnRXhwKHQsdC5mbGFncysiZyIpKTtsZXQgZT1bXSxpPTA7Zm9yKGxldCByIG9mIG4ubWF0Y2hBbGwodCkpe2xldCBvPXIuaW5kZXgsYT1yWzBdO28+aSYmZS5wdXNoKHtpbmRleDppLHRleHQ6bi5zdWJzdHJpbmcoaSxvKSxtYXRjaGVzUmVnZXg6ITF9KSxlLnB1c2goe2luZGV4Om8sdGV4dDphLG1hdGNoZXNSZWdleDohMH0pLGk9bythLmxlbmd0aH1yZXR1cm4gbi5sZW5ndGg+aSYmZS5wdXNoKHtpbmRleDppLHRleHQ6bi5zdWJzdHJpbmcoaSxuLmxlbmd0aCksbWF0Y2hlc1JlZ2V4OiExfSksZX0obixueWUpLm1hcCgoe21hdGNoZXNSZWdleDp0LHRleHQ6ZX0pPT4oe2lzVVJMOnQsdGV4dDplfSkpfWZ1bmN0aW9uIGl5ZShuLHQpe2lmKDEmbiYmKFR0KDApLFQoMSksRHQoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0O2IoMSksemUoIiAiLGUudGV4dCwiICIpfX1mdW5jdGlvbiByeWUobix0KXtpZigxJm4mJihoKDAsImEiLDcpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQ7SmkoImhyZWYiLGUudGV4dCxBcyksYigxKSx1dChlLnRleHQpfX1mdW5jdGlvbiBveWUobix0KXtpZigxJm4mJihUdCgwKSxTKDEsaXllLDIsMSwibmctY29udGFpbmVyIiw1KSxTKDIscnllLDIsMiwibmctdGVtcGxhdGUiLG51bGwsNixadCksRHQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXR0KDMpO2IoMSksXygibmdJZiIsIWUuaXNVUkwpKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIGF5ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsOCksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25BY3Rpb25CdXR0b25DbGlja2VkKCkpfSksVCgxKSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7YigxKSx6ZSgiICIsZS5hbGVydC5mb2xsb3d1cEFjdGlvbi5sb2NhbGl6ZWRMYWJlbCwiICIpfX12YXIgcDk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5zbmFja0JhclJlZj1lLHRoaXMudW5rbm93bkRhdGE9aSx0aGlzLnN0b3JlPXIsdGhpcy5zcGxpdEJ5VVJMPXU5LHRoaXMuYWxlcnQ9aX1hc3luYyBvbkFjdGlvbkJ1dHRvbkNsaWNrZWQoKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3MoKTtsZXQgZT1hd2FpdCB0aGlzLmFsZXJ0LmZvbGxvd3VwQWN0aW9uLmdldEZvbGxvd3VwQWN0aW9uKHRoaXMuc3RvcmUpO3RoaXMuc3RvcmUuZGlzcGF0Y2goZSl9b25DbG9zZUJ1dHRvbkNsaWNrZWQoKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3MoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh3ZCksQyhNZyksQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImFsZXJ0LWRpc3BsYXktc25hY2tiYXIiXV0sZGVjbHM6Nix2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBjbG9zZSB0aGUgc25hY2tiYXIgbWVzc2FnZeKQn2VhNGQ5ZmU2MTQyMGEzZmNlODFjZjU0YzRjNjE1ZTNjMTljNjQ2YTbikJ8xNTM2MDg3NTE5NzQzNzA3MzYyOkRpc21pc3NgLFtbMSwibWVzc2FnZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1idXR0b24iLCIiLCJjbGFzcyIsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsImRpc21pc3MtYnV0dG9uIiwzLCJjbGljayJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxpbmtQaWVjZSIsIiJdLFsicmVsIiwibm9yZWZlcnJlciBub29wZW5lciIsInRhcmdldCIsIl9ibGFuayIsMywiaHJlZiJdLFsibWF0LWJ1dHRvbiIsIiIsMSwiZm9sbG93dXAtYnV0dG9uIiwzLCJjbGljayJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCksUygxLG95ZSw0LDIsIm5nLWNvbnRhaW5lciIsMSksZygpLGgoMiwiZGl2IiwyKSxTKDMsYXllLDIsMSwiYnV0dG9uIiwzKSxoKDQsImJ1dHRvbiIsNCksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DbG9zZUJ1dHRvbkNsaWNrZWQoKX0pLFQoNSwiIERpc21pc3MgIiksZygpKCkpLDImZSYmKGIoMSksXygibmdGb3JPZiIsaS5zcGxpdEJ5VVJMKGkuYWxlcnQubG9jYWxpemVkTWVzc2FnZSkpLGIoMiksXygibmdJZiIsaS5hbGVydC5mb2xsb3d1cEFjdGlvbikpfSxkZXBlbmRlbmNpZXM6W2RuLEZlLEZuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7YWxpZ24tc2VsZjpjZW50ZXI7bWFyZ2luOjVweCAwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1sZWZ0OmF1dG99YnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmOT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMuc25hY2tCYXI9aSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEFlfW5nT25Jbml0KCl7dGhpcy5zdG9yZS5zZWxlY3QoZlcpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxWZShlPT5Cb29sZWFuKGUpKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLnNob3dBbGVydChlKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1zaG93QWxlcnQoZSl7dGhpcy5zbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChwOSx7ZHVyYXRpb246NWUzLGhvcml6b250YWxQb3NpdGlvbjoic3RhcnQiLHZlcnRpY2FsUG9zaXRpb246ImJvdHRvbSIsZGF0YTplfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpLEMoczkpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhbGVydC1zbmFja2JhciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWDE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlLGZpLHoyXX0pLG59KSgpLFExPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltDYyxYMSx3ci5mb3JGZWF0dXJlKCJhbGVydHMiLE03KSx3by5mb3JGZWF0dXJlKFtDN10pXX0pLG59KSgpO2Z1bmN0aW9uIGx5ZShuLHQpe312YXIgTGY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFNb2RhbD0hMCx0aGlzLmF1dG9Gb2N1cz0iZmlyc3QtdGFiYmFibGUiLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuY2xvc2VPbk5hdmlnYXRpb249ITAsdGhpcy5jbG9zZU9uRGVzdHJveT0hMCx0aGlzLmNsb3NlT25PdmVybGF5RGV0YWNobWVudHM9ITB9fSxqMj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVnV7Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWksdGhpcy5fY29uZmlnPW8sdGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXI9YSx0aGlzLl9uZ1pvbmU9cyx0aGlzLl9vdmVybGF5UmVmPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9bnVsbCx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsLHRoaXMuYXR0YWNoRG9tUG9ydGFsPWQ9Pnt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgdT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKGQpO3JldHVybiB0aGlzLl9jb250ZW50QXR0YWNoZWQoKSx1fSx0aGlzLl9hcmlhTGFiZWxsZWRCeT10aGlzLl9jb25maWcuYXJpYUxhYmVsbGVkQnl8fG51bGwsdGhpcy5fZG9jdW1lbnQ9cn1fY29udGVudEF0dGFjaGVkKCl7dGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpLHRoaXMuX2hhbmRsZUJhY2tkcm9wQ2xpY2tzKCksdGhpcy5fY2FwdHVyZUluaXRpYWxGb2N1cygpfV9jYXB0dXJlSW5pdGlhbEZvY3VzKCl7dGhpcy5fdHJhcEZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXN0b3JlRm9jdXMoKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCk7bGV0IGk9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChlKTtyZXR1cm4gdGhpcy5fY29udGVudEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwoZSk7cmV0dXJuIHRoaXMuX2NvbnRlbnRBdHRhY2hlZCgpLGl9X3JlY2FwdHVyZUZvY3VzKCl7dGhpcy5fY29udGFpbnNGb2N1cygpfHx0aGlzLl90cmFwRm9jdXMoKX1fZm9yY2VGb2N1cyhlLGkpe3RoaXMuX2ludGVyYWN0aXZpdHlDaGVja2VyLmlzRm9jdXNhYmxlKGUpfHwoZS50YWJJbmRleD0tMSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgcj0oKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsciksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfTtlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHIpLGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixyKX0pKSxlLmZvY3VzKGkpfV9mb2N1c0J5Q3NzU2VsZWN0b3IoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlKTtyJiZ0aGlzLl9mb3JjZUZvY3VzKHIsaSl9X3RyYXBGb2N1cygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtzd2l0Y2godGhpcy5fY29uZmlnLmF1dG9Gb2N1cyl7Y2FzZSExOmNhc2UiZGlhbG9nIjp0aGlzLl9jb250YWluc0ZvY3VzKCl8fGUuZm9jdXMoKTticmVhaztjYXNlITA6Y2FzZSJmaXJzdC10YWJiYWJsZSI6dGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKS50aGVuKGk9PntpfHx0aGlzLl9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpfSk7YnJlYWs7Y2FzZSJmaXJzdC1oZWFkaW5nIjp0aGlzLl9mb2N1c0J5Q3NzU2VsZWN0b3IoJ2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIFtyb2xlPSJoZWFkaW5nIl0nKTticmVhaztkZWZhdWx0OnRoaXMuX2ZvY3VzQnlDc3NTZWxlY3Rvcih0aGlzLl9jb25maWcuYXV0b0ZvY3VzKX19X3Jlc3RvcmVGb2N1cygpe2xldCBlPXRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMsaT1udWxsO2lmKCJzdHJpbmciPT10eXBlb2YgZT9pPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk6ImJvb2xlYW4iPT10eXBlb2YgZT9pPWU/dGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ6bnVsbDplJiYoaT1lKSx0aGlzLl9jb25maWcucmVzdG9yZUZvY3VzJiZpJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5mb2N1cyl7bGV0IHI9QmIoKSxvPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsoIXJ8fHI9PT10aGlzLl9kb2N1bWVudC5ib2R5fHxyPT09b3x8by5jb250YWlucyhyKSkmJih0aGlzLl9mb2N1c01vbml0b3I/KHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYShpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlKSx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsKTppLmZvY3VzKCkpfXRoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX1fZm9jdXNEaWFsb2dDb250YWluZXIoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfV9jb250YWluc0ZvY3VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9QmIoKTtyZXR1cm4gZT09PWl8fGUuY29udGFpbnMoaSl9X2luaXRpYWxpemVGb2N1c1RyYXAoKXt0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLl9kb2N1bWVudCYmKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkPUJiKCkpfV9oYW5kbGVCYWNrZHJvcENsaWNrcygpe3RoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2NvbmZpZy5kaXNhYmxlQ2xvc2UmJnRoaXMuX3JlY2FwdHVyZUZvY3VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSksQyhfZyksQyhrdCw4KSxDKExmKSxDKFRmKSxDKGF0KSxDKE9sKSxDKGxyKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLWRpYWxvZy1jb250YWluZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZZZShObyw3KSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIi0xIiwxLCJjZGstZGlhbG9nLWNvbnRhaW5lciJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZQZSgiaWQiLGkuX2NvbmZpZy5pZHx8bnVsbCkoInJvbGUiLGkuX2NvbmZpZy5yb2xlKSgiYXJpYS1tb2RhbCIsaS5fY29uZmlnLmFyaWFNb2RhbCkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpfSxmZWF0dXJlczpbTGVdLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJjZGtQb3J0YWxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlMoMCxseWUsMCwwLCJuZy10ZW1wbGF0ZSIsMCl9LGRlcGVuZGVuY2llczpbTm9dLHN0eWxlczpbIi5jZGstZGlhbG9nLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDppbmhlcml0O21heC1oZWlnaHQ6aW5oZXJpdH0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRYj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMub3ZlcmxheVJlZj10LHRoaXMuY29uZmlnPWUsdGhpcy5jbG9zZWQ9bmV3IEFlLHRoaXMuZGlzYWJsZUNsb3NlPWUuZGlzYWJsZUNsb3NlLHRoaXMuYmFja2Ryb3BDbGljaz10LmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHM9dC5rZXlkb3duRXZlbnRzKCksdGhpcy5vdXRzaWRlUG9pbnRlckV2ZW50cz10Lm91dHNpZGVQb2ludGVyRXZlbnRzKCksdGhpcy5pZD1lLmlkLHRoaXMua2V5ZG93bkV2ZW50cy5zdWJzY3JpYmUoaT0+ezI3PT09aS5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiF5cihpKSYmKGkucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKHZvaWQgMCx7Zm9jdXNPcmlnaW46ImtleWJvYXJkIn0pKX0pLHRoaXMuYmFja2Ryb3BDbGljay5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRpc2FibGVDbG9zZXx8dGhpcy5jbG9zZSh2b2lkIDAse2ZvY3VzT3JpZ2luOiJtb3VzZSJ9KX0pLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbj10LmRldGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgpPT57ITEhPT1lLmNsb3NlT25PdmVybGF5RGV0YWNobWVudHMmJnRoaXMuY2xvc2UoKX0pfWNsb3NlKHQsZSl7aWYodGhpcy5jb250YWluZXJJbnN0YW5jZSl7bGV0IGk9dGhpcy5jbG9zZWQ7dGhpcy5jb250YWluZXJJbnN0YW5jZS5fY2xvc2VJbnRlcmFjdGlvblR5cGU9ZT8uZm9jdXNPcmlnaW58fCJwcm9ncmFtIix0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpLGkubmV4dCh0KSxpLmNvbXBsZXRlKCksdGhpcy5jb21wb25lbnRJbnN0YW5jZT10aGlzLmNvbnRhaW5lckluc3RhbmNlPW51bGx9fXVwZGF0ZVBvc2l0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXN9dXBkYXRlU2l6ZSh0PSIiLGU9IiIpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXN9YWRkUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3ModCksdGhpc31yZW1vdmVQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcyh0KSx0aGlzfX0sbTk9bmV3IGllKCJEaWFsb2dTY3JvbGxTdHJhdGVneSIpLGN5ZT1uZXcgaWUoIkRpYWxvZ0RhdGEiKSxkeWU9bmV3IGllKCJEZWZhdWx0RGlhbG9nQ29uZmlnIikscHllPXtwcm92aWRlOm05LGRlcHM6W09pXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKX19LGZ5ZT0wLEcyPSgoKT0+e2NsYXNzIG57Z2V0IG9wZW5EaWFsb2dzKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cub3BlbkRpYWxvZ3M6dGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbH1nZXQgYWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5hZnRlck9wZW5lZDp0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5faW5qZWN0b3I9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1yLHRoaXMuX3BhcmVudERpYWxvZz1vLHRoaXMuX292ZXJsYXlDb250YWluZXI9YSx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw9bmV3IEFlLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWw9bmV3IEFlLHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cz1uZXcgTWFwLHRoaXMuYWZ0ZXJBbGxDbG9zZWQ9S2EoKCk9PnRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoP3RoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5waXBlKE5uKHZvaWQgMCkpKSx0aGlzLl9zY3JvbGxTdHJhdGVneT1zfW9wZW4oZSxpKXsoaT17Li4udGhpcy5fZGVmYXVsdE9wdGlvbnN8fG5ldyBMZiwuLi5pfSkuaWQ9aS5pZHx8ImNkay1kaWFsb2ctIitmeWUrKyxpLmlkJiZ0aGlzLmdldERpYWxvZ0J5SWQoaS5pZCk7bGV0IG89dGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyhpKSxhPXRoaXMuX292ZXJsYXkuY3JlYXRlKG8pLHM9bmV3IFFiKGEsaSksbD10aGlzLl9hdHRhY2hDb250YWluZXIoYSxzLGkpO3JldHVybiBzLmNvbnRhaW5lckluc3RhbmNlPWwsdGhpcy5fYXR0YWNoRGlhbG9nQ29udGVudChlLHMsbCxpKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8dGhpcy5faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpLHRoaXMub3BlbkRpYWxvZ3MucHVzaChzKSxzLmNsb3NlZC5zdWJzY3JpYmUoKCk9PnRoaXMuX3JlbW92ZU9wZW5EaWFsb2cocywhMCkpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChzKSxzfWNsb3NlQWxsKCl7VTIodGhpcy5vcGVuRGlhbG9ncyxlPT5lLmNsb3NlKCkpfWdldERpYWxvZ0J5SWQoZSl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZChpPT5pLmlkPT09ZSl9bmdPbkRlc3Ryb3koKXtVMih0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLGU9PnshMT09PWUuY29uZmlnLmNsb3NlT25EZXN0cm95JiZ0aGlzLl9yZW1vdmVPcGVuRGlhbG9nKGUsITEpfSksVTIodGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCxlPT5lLmNsb3NlKCkpLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbD1bXX1fZ2V0T3ZlcmxheUNvbmZpZyhlKXtsZXQgaT1uZXcgV3Moe3Bvc2l0aW9uU3RyYXRlZ3k6ZS5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLHNjcm9sbFN0cmF0ZWd5OmUuc2Nyb2xsU3RyYXRlZ3l8fHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCkscGFuZWxDbGFzczplLnBhbmVsQ2xhc3MsaGFzQmFja2Ryb3A6ZS5oYXNCYWNrZHJvcCxkaXJlY3Rpb246ZS5kaXJlY3Rpb24sbWluV2lkdGg6ZS5taW5XaWR0aCxtaW5IZWlnaHQ6ZS5taW5IZWlnaHQsbWF4V2lkdGg6ZS5tYXhXaWR0aCxtYXhIZWlnaHQ6ZS5tYXhIZWlnaHQsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsZGlzcG9zZU9uTmF2aWdhdGlvbjplLmNsb3NlT25OYXZpZ2F0aW9ufSk7cmV0dXJuIGUuYmFja2Ryb3BDbGFzcyYmKGkuYmFja2Ryb3BDbGFzcz1lLmJhY2tkcm9wQ2xhc3MpLGl9X2F0dGFjaENvbnRhaW5lcihlLGkscil7bGV0IHMsbz1yLmluamVjdG9yfHxyLnZpZXdDb250YWluZXJSZWY/LmluamVjdG9yLGE9W3twcm92aWRlOkxmLHVzZVZhbHVlOnJ9LHtwcm92aWRlOlFiLHVzZVZhbHVlOml9LHtwcm92aWRlOk9sLHVzZVZhbHVlOmV9XTtyLmNvbnRhaW5lcj8iZnVuY3Rpb24iPT10eXBlb2Ygci5jb250YWluZXI/cz1yLmNvbnRhaW5lcjoocz1yLmNvbnRhaW5lci50eXBlLGEucHVzaCguLi5yLmNvbnRhaW5lci5wcm92aWRlcnMocikpKTpzPWoyO2xldCBsPW5ldyBQbChzLHIudmlld0NvbnRhaW5lclJlZixiaS5jcmVhdGUoe3BhcmVudDpvfHx0aGlzLl9pbmplY3Rvcixwcm92aWRlcnM6YX0pLHIuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtyZXR1cm4gZS5hdHRhY2gobCkuaW5zdGFuY2V9X2F0dGFjaERpYWxvZ0NvbnRlbnQoZSxpLHIsbyl7aWYoZSBpbnN0YW5jZW9mIFNpKXtsZXQgYT10aGlzLl9jcmVhdGVJbmplY3RvcihvLGkscix2b2lkIDApLHM9eyRpbXBsaWNpdDpvLmRhdGEsZGlhbG9nUmVmOml9O28udGVtcGxhdGVDb250ZXh0JiYocz17Li4ucywuLi4iZnVuY3Rpb24iPT10eXBlb2Ygby50ZW1wbGF0ZUNvbnRleHQ/by50ZW1wbGF0ZUNvbnRleHQoKTpvLnRlbXBsYXRlQ29udGV4dH0pLHIuYXR0YWNoVGVtcGxhdGVQb3J0YWwobmV3IEpvKGUsbnVsbCxzLGEpKX1lbHNle2xldCBhPXRoaXMuX2NyZWF0ZUluamVjdG9yKG8saSxyLHRoaXMuX2luamVjdG9yKSxzPXIuYXR0YWNoQ29tcG9uZW50UG9ydGFsKG5ldyBQbChlLG8udmlld0NvbnRhaW5lclJlZixhLG8uY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSk7aS5jb21wb25lbnRJbnN0YW5jZT1zLmluc3RhbmNlfX1fY3JlYXRlSW5qZWN0b3IoZSxpLHIsbyl7bGV0IGE9ZS5pbmplY3Rvcnx8ZS52aWV3Q29udGFpbmVyUmVmPy5pbmplY3RvcixzPVt7cHJvdmlkZTpjeWUsdXNlVmFsdWU6ZS5kYXRhfSx7cHJvdmlkZTpRYix1c2VWYWx1ZTppfV07cmV0dXJuIGUucHJvdmlkZXJzJiYoImZ1bmN0aW9uIj09dHlwZW9mIGUucHJvdmlkZXJzP3MucHVzaCguLi5lLnByb3ZpZGVycyhpLGUscikpOnMucHVzaCguLi5lLnByb3ZpZGVycykpLGUuZGlyZWN0aW9uJiYoIWF8fCFhLmdldChIaSxudWxsLHtvcHRpb25hbDohMH0pKSYmcy5wdXNoKHtwcm92aWRlOkhpLHVzZVZhbHVlOnt2YWx1ZTplLmRpcmVjdGlvbixjaGFuZ2U6cXQoKX19KSxiaS5jcmVhdGUoe3BhcmVudDphfHxvLHByb3ZpZGVyczpzfSl9X3JlbW92ZU9wZW5EaWFsb2coZSxpKXtsZXQgcj10aGlzLm9wZW5EaWFsb2dzLmluZGV4T2YoZSk7cj4tMSYmKHRoaXMub3BlbkRpYWxvZ3Muc3BsaWNlKHIsMSksdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGh8fCh0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuZm9yRWFjaCgobyxhKT0+e28/YS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIixvKTphLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKX0pLHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5jbGVhcigpLGkmJnRoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCkubmV4dCgpKSl9X2hpZGVOb25EaWFsb2dDb250ZW50RnJvbUFzc2lzdGl2ZVRlY2hub2xvZ3koKXtsZXQgZT10aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKTtpZihlLnBhcmVudEVsZW1lbnQpe2xldCBpPWUucGFyZW50RWxlbWVudC5jaGlsZHJlbjtmb3IobGV0IHI9aS5sZW5ndGgtMTtyPi0xO3ItLSl7bGV0IG89aVtyXTtvIT09ZSYmIlNDUklQVCIhPT1vLm5vZGVOYW1lJiYiU1RZTEUiIT09by5ub2RlTmFtZSYmIW8uaGFzQXR0cmlidXRlKCJhcmlhLWxpdmUiKSYmKHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5zZXQobyxvLmdldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSksby5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpKX19fV9nZXRBZnRlckFsbENsb3NlZCgpe2xldCBlPXRoaXMuX3BhcmVudERpYWxvZztyZXR1cm4gZT9lLl9nZXRBZnRlckFsbENsb3NlZCgpOnRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8oT2kpLE8oYmkpLE8oZHllLDgpLE8obiwxMiksTyhPZiksTyhtOSkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2Z1bmN0aW9uIFUyKG4sdCl7bGV0IGU9bi5sZW5ndGg7Zm9yKDtlLS07KXQobltlXSl9dmFyIFcyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtwcm92aWRlcnM6W0cyLHB5ZV0saW1wb3J0czpbTHIsdXMsRGYsdXNdfSksbn0pKCksTmY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5tYXhXaWR0aD0iODB2dyIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFNb2RhbD0hMCx0aGlzLmF1dG9Gb2N1cz0iZmlyc3QtdGFiYmFibGUiLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuZGVsYXlGb2N1c1RyYXA9ITAsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMH19LGg5PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBqMntjb25zdHJ1Y3RvcihlLGkscixvLGEscyxsLGMpe3N1cGVyKGUsaSxyLG8sYSxzLGwsYyksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkPW5ldyBMfV9jYXB0dXJlSW5pdGlhbEZvY3VzKCl7dGhpcy5fY29uZmlnLmRlbGF5Rm9jdXNUcmFwfHx0aGlzLl90cmFwRm9jdXMoKX1fb3BlbkFuaW1hdGlvbkRvbmUoZSl7dGhpcy5fY29uZmlnLmRlbGF5Rm9jdXNUcmFwJiZ0aGlzLl90cmFwRm9jdXMoKSx0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQubmV4dCh7c3RhdGU6Im9wZW5lZCIsdG90YWxUaW1lOmV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSksQyhfZyksQyhrdCw4KSxDKE5mKSxDKFRmKSxDKGF0KSxDKE9sKSxDKGxyKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLGZlYXR1cmVzOltMZV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFoxPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLl9yZWY9dCx0aGlzLl9jb250YWluZXJJbnN0YW5jZT1pLHRoaXMuX2FmdGVyT3BlbmVkPW5ldyBBZSx0aGlzLl9iZWZvcmVDbG9zZWQ9bmV3IEFlLHRoaXMuX3N0YXRlPTAsdGhpcy5kaXNhYmxlQ2xvc2U9ZS5kaXNhYmxlQ2xvc2UsdGhpcy5pZD10LmlkLGkuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKFZlKHI9PiJvcGVuZWQiPT09ci5zdGF0ZSksenQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2FmdGVyT3BlbmVkLm5leHQoKSx0aGlzLl9hZnRlck9wZW5lZC5jb21wbGV0ZSgpfSksaS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoVmUocj0+ImNsb3NlZCI9PT1yLnN0YXRlKSx6dCgxKSkuc3Vic2NyaWJlKCgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlRmFsbGJhY2tUaW1lb3V0KSx0aGlzLl9maW5pc2hEaWFsb2dDbG9zZSgpfSksdC5vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5fYmVmb3JlQ2xvc2VkLm5leHQodGhpcy5fcmVzdWx0KSx0aGlzLl9iZWZvcmVDbG9zZWQuY29tcGxldGUoKSx0aGlzLl9maW5pc2hEaWFsb2dDbG9zZSgpfSksY24odGhpcy5iYWNrZHJvcENsaWNrKCksdGhpcy5rZXlkb3duRXZlbnRzKCkucGlwZShWZShyPT4yNz09PXIua2V5Q29kZSYmIXRoaXMuZGlzYWJsZUNsb3NlJiYheXIocikpKSkuc3Vic2NyaWJlKHI9Pnt0aGlzLmRpc2FibGVDbG9zZXx8KHIucHJldmVudERlZmF1bHQoKSxxMih0aGlzLCJrZXlkb3duIj09PXIudHlwZT8ia2V5Ym9hcmQiOiJtb3VzZSIpKX0pfWNsb3NlKHQpe3RoaXMuX3Jlc3VsdD10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShWZShlPT4iY2xvc2luZyI9PT1lLnN0YXRlKSx6dCgxKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0KSx0aGlzLl9iZWZvcmVDbG9zZWQuY29tcGxldGUoKSx0aGlzLl9yZWYub3ZlcmxheVJlZi5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2Nsb3NlRmFsbGJhY2tUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCksZS50b3RhbFRpbWUrMTAwKX0pLHRoaXMuX3N0YXRlPTEsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX3N0YXJ0RXhpdEFuaW1hdGlvbigpfWFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuX2FmdGVyT3BlbmVkfWFmdGVyQ2xvc2VkKCl7cmV0dXJuIHRoaXMuX3JlZi5jbG9zZWR9YmVmb3JlQ2xvc2VkKCl7cmV0dXJuIHRoaXMuX2JlZm9yZUNsb3NlZH1iYWNrZHJvcENsaWNrKCl7cmV0dXJuIHRoaXMuX3JlZi5iYWNrZHJvcENsaWNrfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fcmVmLmtleWRvd25FdmVudHN9dXBkYXRlUG9zaXRpb24odCl7bGV0IGU9dGhpcy5fcmVmLmNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5O3JldHVybiB0JiYodC5sZWZ0fHx0LnJpZ2h0KT90LmxlZnQ/ZS5sZWZ0KHQubGVmdCk6ZS5yaWdodCh0LnJpZ2h0KTplLmNlbnRlckhvcml6b250YWxseSgpLHQmJih0LnRvcHx8dC5ib3R0b20pP3QudG9wP2UudG9wKHQudG9wKTplLmJvdHRvbSh0LmJvdHRvbSk6ZS5jZW50ZXJWZXJ0aWNhbGx5KCksdGhpcy5fcmVmLnVwZGF0ZVBvc2l0aW9uKCksdGhpc311cGRhdGVTaXplKHQ9IiIsZT0iIil7cmV0dXJuIHRoaXMuX3JlZi51cGRhdGVTaXplKHQsZSksdGhpc31hZGRQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLl9yZWYuYWRkUGFuZWxDbGFzcyh0KSx0aGlzfXJlbW92ZVBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX3JlZi5yZW1vdmVQYW5lbENsYXNzKHQpLHRoaXN9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9X2ZpbmlzaERpYWxvZ0Nsb3NlKCl7dGhpcy5fc3RhdGU9Mix0aGlzLl9yZWYuY2xvc2UodGhpcy5fcmVzdWx0LHtmb2N1c09yaWdpbjp0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZX0pLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9bnVsbH19O2Z1bmN0aW9uIHEyKG4sdCxlKXtyZXR1cm4gbi5fY2xvc2VJbnRlcmFjdGlvblR5cGU9dCxuLmNsb3NlKGUpfW5ldyBpZSgiTWF0TWRjRGlhbG9nRGF0YSIpLG5ldyBpZSgibWF0LW1kYy1kaWFsb2ctZGVmYXVsdC1vcHRpb25zIiksbmV3IGllKCJtYXQtbWRjLWRpYWxvZy1zY3JvbGwtc3RyYXRlZ3kiKTt2YXIgbXllPTAsZzk9KCgpPT57Y2xhc3MgbntnZXQgb3BlbkRpYWxvZ3MoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5vcGVuRGlhbG9nczp0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsfWdldCBhZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLmFmdGVyT3BlbmVkOnRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWx9X2dldEFmdGVyQWxsQ2xvc2VkKCl7bGV0IGU9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiBlP2UuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH1jb25zdHJ1Y3RvcihlLGkscixvLGEscyxsLGMsZCx1KXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZGVmYXVsdE9wdGlvbnM9cix0aGlzLl9wYXJlbnREaWFsb2c9byx0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3Rvcj1sLHRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGU9Yyx0aGlzLl9kaWFsb2dEYXRhVG9rZW49ZCx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw9bmV3IEFlLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWw9bmV3IEFlLHRoaXMuX2lkUHJlZml4PSJtYXQtZGlhbG9nLSIsdGhpcy5kaWFsb2dDb25maWdDbGFzcz1OZix0aGlzLmFmdGVyQWxsQ2xvc2VkPUthKCgpPT50aGlzLm9wZW5EaWFsb2dzLmxlbmd0aD90aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpOnRoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCkucGlwZShObih2b2lkIDApKSksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9cyx0aGlzLl9kaWFsb2c9aS5nZXQoRzIpfW9wZW4oZSxpKXtsZXQgcjsoaT17Li4udGhpcy5fZGVmYXVsdE9wdGlvbnN8fG5ldyBOZiwuLi5pfSkuaWQ9aS5pZHx8YCR7dGhpcy5faWRQcmVmaXh9JHtteWUrK31gLGkuc2Nyb2xsU3RyYXRlZ3k9aS5zY3JvbGxTdHJhdGVneXx8dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKTtsZXQgbz10aGlzLl9kaWFsb2cub3BlbihlLHsuLi5pLHBvc2l0aW9uU3RyYXRlZ3k6dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLmNlbnRlckhvcml6b250YWxseSgpLmNlbnRlclZlcnRpY2FsbHkoKSxkaXNhYmxlQ2xvc2U6ITAsY2xvc2VPbkRlc3Ryb3k6ITEsY2xvc2VPbk92ZXJsYXlEZXRhY2htZW50czohMSxjb250YWluZXI6e3R5cGU6dGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZSxwcm92aWRlcnM6KCk9Plt7cHJvdmlkZTp0aGlzLmRpYWxvZ0NvbmZpZ0NsYXNzLHVzZVZhbHVlOml9LHtwcm92aWRlOkxmLHVzZVZhbHVlOml9XX0sdGVtcGxhdGVDb250ZXh0OigpPT4oe2RpYWxvZ1JlZjpyfSkscHJvdmlkZXJzOihhLHMsbCk9PihyPW5ldyB0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3RvcihhLGksbCksci51cGRhdGVQb3NpdGlvbihpPy5wb3NpdGlvbiksW3twcm92aWRlOnRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGUsdXNlVmFsdWU6bH0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nRGF0YVRva2VuLHVzZVZhbHVlOnMuZGF0YX0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3IsdXNlVmFsdWU6cn1dKX0pO3JldHVybiByLmNvbXBvbmVudEluc3RhbmNlPW8uY29tcG9uZW50SW5zdGFuY2UsdGhpcy5vcGVuRGlhbG9ncy5wdXNoKHIpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChyKSxyLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpPT57bGV0IGE9dGhpcy5vcGVuRGlhbG9ncy5pbmRleE9mKHIpO2E+LTEmJih0aGlzLm9wZW5EaWFsb2dzLnNwbGljZShhLDEpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHx0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLm5leHQoKSl9KSxyfWNsb3NlQWxsKCl7dGhpcy5fY2xvc2VEaWFsb2dzKHRoaXMub3BlbkRpYWxvZ3MpfWdldERpYWxvZ0J5SWQoZSl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZChpPT5pLmlkPT09ZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9jbG9zZURpYWxvZ3ModGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCksdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWwuY29tcGxldGUoKX1fY2xvc2VEaWFsb2dzKGUpe2xldCBpPWUubGVuZ3RoO2Zvcig7aS0tOyllW2ldLmNsb3NlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtfbCgpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFpiPXtwYXJhbXM6e2VudGVyQW5pbWF0aW9uRHVyYXRpb246IjE1MG1zIixleGl0QW5pbWF0aW9uRHVyYXRpb246Ijc1bXMifX0sXzk9e2RpYWxvZ0NvbnRhaW5lcjpqaSgiZGlhbG9nQ29udGFpbmVyIixbSm4oInZvaWQsIGV4aXQiLEJ0KHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjcpIn0pKSxKbigiZW50ZXIiLEJ0KHt0cmFuc2Zvcm06Im5vbmUifSkpLFduKCIqID0+IGVudGVyIixHeShbS24oInt7ZW50ZXJBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixCdCh7dHJhbnNmb3JtOiJub25lIixvcGFjaXR5OjF9KSksZGQoIkAqIixjZCgpLHtvcHRpb25hbDohMH0pXSksWmIpLFduKCIqID0+IHZvaWQsICogPT4gZXhpdCIsR3koW0tuKCJ7e2V4aXRBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSIsQnQoe29wYWNpdHk6MH0pKSxkZCgiQCoiLGNkKCkse29wdGlvbmFsOiEwfSldKSxaYildKX07ZnVuY3Rpb24gaHllKG4sdCl7fXZhciB5OV9wYXJhbXNfZW50ZXJBbmltYXRpb25EdXJhdGlvbj0iMTUwbXMiLHk5X3BhcmFtc19leGl0QW5pbWF0aW9uRHVyYXRpb249Ijc1bXMiLEsxPWNsYXNzIGV4dGVuZHMgTmZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZW50ZXJBbmltYXRpb25EdXJhdGlvbj1aYi5wYXJhbXMuZW50ZXJBbmltYXRpb25EdXJhdGlvbix0aGlzLmV4aXRBbmltYXRpb25EdXJhdGlvbj1aYi5wYXJhbXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufX0sZ3llPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBoOXtfb25BbmltYXRpb25Eb25lKHt0b1N0YXRlOmUsdG90YWxUaW1lOml9KXsiZW50ZXIiPT09ZT90aGlzLl9vcGVuQW5pbWF0aW9uRG9uZShpKToiZXhpdCI9PT1lJiZ0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQubmV4dCh7c3RhdGU6ImNsb3NlZCIsdG90YWxUaW1lOml9KX1fb25BbmltYXRpb25TdGFydCh7dG9TdGF0ZTplLHRvdGFsVGltZTppfSl7ImVudGVyIj09PWU/dGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJvcGVuaW5nIix0b3RhbFRpbWU6aX0pOigiZXhpdCI9PT1lfHwidm9pZCI9PT1lKSYmdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJjbG9zaW5nIix0b3RhbFRpbWU6aX0pfV9zdGFydEV4aXRBbmltYXRpb24oKXt0aGlzLl9zdGF0ZT0iZXhpdCIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjLGQpe3N1cGVyKGUsaSxyLG8sYSxzLGwsZCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9Yyx0aGlzLl9zdGF0ZT0iZW50ZXIifV9nZXRBbmltYXRpb25TdGF0ZSgpe3JldHVybnt2YWx1ZTp0aGlzLl9zdGF0ZSxwYXJhbXM6e2VudGVyQW5pbWF0aW9uRHVyYXRpb246dGhpcy5fY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb258fHk5X3BhcmFtc19lbnRlckFuaW1hdGlvbkR1cmF0aW9uLGV4aXRBbmltYXRpb25EdXJhdGlvbjp0aGlzLl9jb25maWcuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufHx5OV9wYXJhbXNfZXhpdEFuaW1hdGlvbkR1cmF0aW9ufX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoX2cpLEMoa3QsOCksQyhLMSksQyhUZiksQyhhdCksQyhPbCksQyhGdCksQyhscikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsIm1hdC1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlpwKCJAZGlhbG9nQ29udGFpbmVyLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25BbmltYXRpb25TdGFydChvKX0pKCJAZGlhbG9nQ29udGFpbmVyLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkFuaW1hdGlvbkRvbmUobyl9KSwyJmUmJihDbygiaWQiLGkuX2NvbmZpZy5pZCksUGUoImFyaWEtbW9kYWwiLGkuX2NvbmZpZy5hcmlhTW9kYWwpKCJyb2xlIixpLl9jb25maWcucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpLEtwKCJAZGlhbG9nQ29udGFpbmVyIixpLl9nZXRBbmltYXRpb25TdGF0ZSgpKSl9LGZlYXR1cmVzOltMZV0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUygwLGh5ZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltOb10sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9ucy5tYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyLC5tYXQtZGlhbG9nLWFjdGlvbnNbYWxpZ249Y2VudGVyXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5tYXQtZGlhbG9nLWFjdGlvbnMubWF0LWRpYWxvZy1hY3Rpb25zLWFsaWduLWVuZCwubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWVuZF17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6OHB4fVtkaXI9cnRsXSAubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSxbZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbXzkuZGlhbG9nQ29udGFpbmVyXX19KSxufSkoKSxTZD1jbGFzcyBleHRlbmRzIFoxe30sS2I9bmV3IGllKCJNYXREaWFsb2dEYXRhIiksX3llPW5ldyBpZSgibWF0LWRpYWxvZy1kZWZhdWx0LW9wdGlvbnMiKSxiOT1uZXcgaWUoIm1hdC1kaWFsb2ctc2Nyb2xsLXN0cmF0ZWd5IiksYnllPXtwcm92aWRlOmI5LGRlcHM6W09pXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKX19LExsPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBnOXtjb25zdHJ1Y3RvcihlLGkscixvLGEscyxsLGMpe3N1cGVyKGUsaSxvLHMsbCxhLFNkLGd5ZSxLYixjKSx0aGlzLmRpYWxvZ0NvbmZpZ0NsYXNzPUsxfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKE9pKSxPKGJpKSxPKEZ5LDgpLE8oX3llLDgpLE8oYjkpLE8obiwxMiksTyhPZiksTyhkaSw4KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdnllPTAsSjE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5kaWFsb2dSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fZGlhbG9nPXIsdGhpcy50eXBlPSJidXR0b24ifW5nT25Jbml0KCl7dGhpcy5kaWFsb2dSZWZ8fCh0aGlzLmRpYWxvZ1JlZj14OSh0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpfW5nT25DaGFuZ2VzKGUpe2xldCBpPWUuX21hdERpYWxvZ0Nsb3NlfHxlLl9tYXREaWFsb2dDbG9zZVJlc3VsdDtpJiYodGhpcy5kaWFsb2dSZXN1bHQ9aS5jdXJyZW50VmFsdWUpfV9vbkJ1dHRvbkNsaWNrKGUpe3EyKHRoaXMuZGlhbG9nUmVmLDA9PT1lLnNjcmVlblgmJjA9PT1lLnNjcmVlblk/ImtleWJvYXJkIjoibW91c2UiLHRoaXMuZGlhbG9nUmVzdWx0KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhTZCw4KSxDKGJlKSxDKExsKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIiIsIm1hdERpYWxvZ0Nsb3NlIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZEKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2sobyl9KSwyJmUmJlBlKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoInR5cGUiLGkudHlwZSl9LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLHR5cGU6InR5cGUiLGRpYWxvZ1Jlc3VsdDpbIm1hdC1kaWFsb2ctY2xvc2UiLCJkaWFsb2dSZXN1bHQiXSxfbWF0RGlhbG9nQ2xvc2U6WyJtYXREaWFsb2dDbG9zZSIsIl9tYXREaWFsb2dDbG9zZSJdfSxleHBvcnRBczpbIm1hdERpYWxvZ0Nsb3NlIl0sZmVhdHVyZXM6W0d0XX0pLG59KSgpLHY5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2RpYWxvZ1JlZj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9kaWFsb2c9cix0aGlzLmlkPSJtYXQtZGlhbG9nLXRpdGxlLSIrdnllKyt9bmdPbkluaXQoKXt0aGlzLl9kaWFsb2dSZWZ8fCh0aGlzLl9kaWFsb2dSZWY9eDkodGhpcy5fZWxlbWVudFJlZix0aGlzLl9kaWFsb2cub3BlbkRpYWxvZ3MpKSx0aGlzLl9kaWFsb2dSZWYmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntsZXQgZT10aGlzLl9kaWFsb2dSZWYuX2NvbnRhaW5lckluc3RhbmNlO2UmJiFlLl9hcmlhTGFiZWxsZWRCeSYmKGUuX2FyaWFMYWJlbGxlZEJ5PXRoaXMuaWQpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoU2QsOCksQyhiZSksQyhMbCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLXRpdGxlIiwiIl0sWyIiLCJtYXREaWFsb2dUaXRsZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1kaWFsb2ctdGl0bGUiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmQ28oImlkIixpLmlkKX0saW5wdXRzOntpZDoiaWQifSxleHBvcnRBczpbIm1hdERpYWxvZ1RpdGxlIl19KSxufSkoKSwkMT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LWRpYWxvZy1jb250ZW50IiwiIl0sWyJtYXQtZGlhbG9nLWNvbnRlbnQiXSxbIiIsIm1hdERpYWxvZ0NvbnRlbnQiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtZGlhbG9nLWNvbnRlbnQiXX0pLG59KSgpLGVFPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsaWduPSJzdGFydCJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWFjdGlvbnMiLCIiXSxbIm1hdC1kaWFsb2ctYWN0aW9ucyJdLFsiIiwibWF0RGlhbG9nQWN0aW9ucyIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1kaWFsb2ctYWN0aW9ucyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZRZSgibWF0LWRpYWxvZy1hY3Rpb25zLWFsaWduLWNlbnRlciIsImNlbnRlciI9PT1pLmFsaWduKSgibWF0LWRpYWxvZy1hY3Rpb25zLWFsaWduLWVuZCIsImVuZCI9PT1pLmFsaWduKX0saW5wdXRzOnthbGlnbjoiYWxpZ24ifX0pLG59KSgpO2Z1bmN0aW9uIHg5KG4sdCl7bGV0IGU9bi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Zm9yKDtlJiYhZS5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC1kaWFsb2ctY29udGFpbmVyIik7KWU9ZS5wYXJlbnRFbGVtZW50O3JldHVybiBlP3QuZmluZChpPT5pLmlkPT09ZS5pZCk6bnVsbH12YXIgd2c9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbTGwsYnllXSxpbXBvcnRzOltXMixMcix1cyxRdCxRdF19KSxufSkoKTtmdW5jdGlvbiBDeWUobix0KXtpZigxJm4mJlAoMCwibWF0LXBzZXVkby1jaGVja2JveCIsNSksMiZuKXtsZXQgZT13KCk7Xygic3RhdGUiLGUuc2VsZWN0ZWQ/ImNoZWNrZWQiOiJ1bmNoZWNrZWQiKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpfX1mdW5jdGlvbiBNeWUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDYpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTtiKDEpLHplKCIoIixlLmdyb3VwLmxhYmVsLCIpIil9fXZhciB3eWU9WyIqIl0sSGE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEkye2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKEZ0KSxDKHhkLDgpLEMoQ2QsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1vcHRpb24iXV0saG9zdEF0dHJzOlsicm9sZSIsIm9wdGlvbiIsMSwibWF0LW9wdGlvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVLZXlkb3duKG8pfSksMiZlJiYoQ28oImlkIixpLmlkKSxQZSgidGFiaW5kZXgiLGkuX2dldFRhYkluZGV4KCkpKCJhcmlhLXNlbGVjdGVkIixpLnNlbGVjdGVkKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxRZSgibWF0LXNlbGVjdGVkIixpLnNlbGVjdGVkKSgibWF0LW9wdGlvbi1tdWx0aXBsZSIsaS5tdWx0aXBsZSkoIm1hdC1hY3RpdmUiLGkuYWN0aXZlKSgibWF0LW9wdGlvbi1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxleHBvcnRBczpbIm1hdE9wdGlvbiJdLGZlYXR1cmVzOltMZV0sbmdDb250ZW50U2VsZWN0b3JzOnd5ZSxkZWNsczo2LHZhcnM6NCxjb25zdHM6W1siY2xhc3MiLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsxLCJtYXQtb3B0aW9uLXRleHQiXSxbInRleHQiLCIiXSxbImNsYXNzIiwiY2RrLXZpc3VhbGx5LWhpZGRlbiIsNCwibmdJZiJdLFsibWF0LXJpcHBsZSIsIiIsMSwibWF0LW9wdGlvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdLFsxLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCJdLFsxLCJjZGstdmlzdWFsbHktaGlkZGVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZ24oKSxTKDAsQ3llLDEsMiwibWF0LXBzZXVkby1jaGVja2JveCIsMCksaCgxLCJzcGFuIiwxLDIpLFh0KDMpLGcoKSxTKDQsTXllLDIsMSwic3BhbiIsMyksUCg1LCJkaXYiLDQpKSwyJmUmJihfKCJuZ0lmIixpLm11bHRpcGxlKSxiKDQpLF8oIm5nSWYiLGkuZ3JvdXAmJmkuZ3JvdXAuX2luZXJ0KSxiKDEpLF8oIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5kaXNhYmxlZHx8aS5kaXNhYmxlUmlwcGxlKSl9LGRlcGVuZGVuY2llczpbRnIsRmUsVDJdLHN0eWxlczpbJy5tYXQtb3B0aW9ue3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O21heC13aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1vcHRpb25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fVtkaXI9cnRsXSAubWF0LW9wdGlvbnt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtb3B0aW9uIC5tYXQtaWNvbnttYXJnaW4tcmlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1vcHRpb24gLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tYXQtb3B0aW9uIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfS5tYXQtb3B0aW9uW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1vcHRncm91cCAubWF0LW9wdGlvbjpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDozMnB4fVtkaXI9cnRsXSAubWF0LW9wdGdyb3VwIC5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDozMnB4fS5tYXQtb3B0aW9uLm1hdC1hY3RpdmU6OmJlZm9yZXtjb250ZW50OiIifS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXXtvcGFjaXR5Oi41fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxNnB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3dpZHRoOjEwcHg7aGVpZ2h0OjA7Ym9yZGVyLWJvdHRvbTpzb2xpZCAxMHB4O2JvcmRlci1yYWRpdXM6MTBweH1bZGlyPXJ0bF0gLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjE2cHh9Lm1hdC1vcHRpb24tdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ubWF0LW9wdGlvbiAubWF0LW9wdGlvbi1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW9wdGlvbi1wc2V1ZG8tY2hlY2tib3h7bWFyZ2luLXJpZ2h0OjhweH1bZGlyPXJ0bF0gLm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94e21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH0nXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxTZz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbWm8sVGUsUXQsRDJdfSksbn0pKCksdEU9bmV3IGllKCJNYXRFcnJvciIpLG5FPW5ldyBpZSgiTWF0UHJlZml4IiksWTI9bmV3IGllKCJNYXRTdWZmaXgiKSxYMj17dHJhbnNpdGlvbk1lc3NhZ2VzOmppKCJ0cmFuc2l0aW9uTWVzc2FnZXMiLFtKbigiZW50ZXIiLEJ0KHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDAlKSJ9KSksV24oInZvaWQgPT4gZW50ZXIiLFtCdCh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlWSgtNXB4KSJ9KSxLbigiMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikiKV0pXSl9LE5sPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpufSksbn0pKCksQmw9bmV3IGllKCJNYXRGb3JtRmllbGQiKSxTeWU9KG5ldyBpZSgiTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TIiksWyJjb25uZWN0aW9uQ29udGFpbmVyIl0pLEV5ZT1bImlucHV0Q29udGFpbmVyIl0sVHllPVsibGFiZWwiXTtmdW5jdGlvbiBEeWUobix0KXsxJm4mJihUdCgwKSxoKDEsImRpdiIsMTQpLFAoMiwiZGl2IiwxNSkoMywiZGl2IiwxNikoNCwiZGl2IiwxNyksZygpLGgoNSwiZGl2IiwxOCksUCg2LCJkaXYiLDE1KSg3LCJkaXYiLDE2KSg4LCJkaXYiLDE3KSxnKCksRHQoKSl9ZnVuY3Rpb24gSXllKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwxOSksRCgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkudXBkYXRlT3V0bGluZUdhcCgpKX0pLFh0KDEsMSksZygpfTImbiYmXygiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsIm91dGxpbmUiIT13KCkuYXBwZWFyYW5jZSl9ZnVuY3Rpb24gQXllKG4sdCl7aWYoMSZuJiYoVHQoMCksWHQoMSwyKSxoKDIsInNwYW4iKSxUKDMpLGcoKSxEdCgpKSwyJm4pe2xldCBlPXcoMik7YigzKSx1dChlLl9jb250cm9sLnBsYWNlaG9sZGVyKX19ZnVuY3Rpb24gUnllKG4sdCl7MSZuJiZYdCgwLDMsWyIqbmdTd2l0Y2hDYXNlIiwidHJ1ZSJdKX1mdW5jdGlvbiBreWUobix0KXsxJm4mJihoKDAsInNwYW4iLDIzKSxUKDEsIiAqIiksZygpKX1mdW5jdGlvbiBQeWUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJsYWJlbCIsMjAsMjEpLEQoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLnVwZGF0ZU91dGxpbmVHYXAoKSl9KSxTKDIsQXllLDQsMSwibmctY29udGFpbmVyIiwxMiksUygzLFJ5ZSwxLDAsIm5nLWNvbnRlbnQiLDEyKSxTKDQsa3llLDIsMCwic3BhbiIsMjIpLGcoKX1pZigyJm4pe2xldCBlPXcoKTtRZSgibWF0LWVtcHR5IixlLl9jb250cm9sLmVtcHR5JiYhZS5fc2hvdWxkQWx3YXlzRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLWVtcHR5IixlLl9jb250cm9sLmVtcHR5JiYhZS5fc2hvdWxkQWx3YXlzRmxvYXQoKSkoIm1hdC1hY2NlbnQiLCJhY2NlbnQiPT1lLmNvbG9yKSgibWF0LXdhcm4iLCJ3YXJuIj09ZS5jb2xvciksXygiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsIm91dGxpbmUiIT1lLmFwcGVhcmFuY2UpKCJpZCIsZS5fbGFiZWxJZCkoIm5nU3dpdGNoIixlLl9oYXNMYWJlbCgpKSxQZSgiZm9yIixlLl9jb250cm9sLmlkKSgiYXJpYS1vd25zIixlLl9jb250cm9sLmlkKSxiKDIpLF8oIm5nU3dpdGNoQ2FzZSIsITEpLGIoMSksXygibmdTd2l0Y2hDYXNlIiwhMCksYigxKSxfKCJuZ0lmIiwhZS5oaWRlUmVxdWlyZWRNYXJrZXImJmUuX2NvbnRyb2wucmVxdWlyZWQmJiFlLl9jb250cm9sLmRpc2FibGVkKX19ZnVuY3Rpb24gT3llKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI0KSxYdCgxLDQpLGcoKSl9ZnVuY3Rpb24gRnllKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDI1KSxQKDEsInNwYW4iLDI2KSxnKCkpLDImbil7bGV0IGU9dygpO2IoMSksUWUoIm1hdC1hY2NlbnQiLCJhY2NlbnQiPT1lLmNvbG9yKSgibWF0LXdhcm4iLCJ3YXJuIj09ZS5jb2xvcil9fWZ1bmN0aW9uIEx5ZShuLHQpezEmbiYmKGgoMCwiZGl2IiksWHQoMSw1KSxnKCkpLDImbiYmXygiQHRyYW5zaXRpb25NZXNzYWdlcyIsdygpLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSl9ZnVuY3Rpb24gTnllKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDMwKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpO18oImlkIixlLl9oaW50TGFiZWxJZCksYigxKSx1dChlLmhpbnRMYWJlbCl9fWZ1bmN0aW9uIEJ5ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwyNyksUygxLE55ZSwyLDIsImRpdiIsMjgpLFh0KDIsNiksUCgzLCJkaXYiLDI5KSxYdCg0LDcpLGcoKSksMiZuKXtsZXQgZT13KCk7XygiQHRyYW5zaXRpb25NZXNzYWdlcyIsZS5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUpLGIoMSksXygibmdJZiIsZS5oaW50TGFiZWwpfX12YXIgVnllPVsiKiIsW1siIiwibWF0UHJlZml4IiwiIl1dLFtbIm1hdC1wbGFjZWhvbGRlciJdXSxbWyJtYXQtbGFiZWwiXV0sW1siIiwibWF0U3VmZml4IiwiIl1dLFtbIm1hdC1lcnJvciJdXSxbWyJtYXQtaGludCIsMywiYWxpZ24iLCJlbmQiXV0sW1sibWF0LWhpbnQiLCJhbGlnbiIsImVuZCJdXV0sSHllPVsiKiIsIlttYXRQcmVmaXhdIiwibWF0LXBsYWNlaG9sZGVyIiwibWF0LWxhYmVsIiwiW21hdFN1ZmZpeF0iLCJtYXQtZXJyb3IiLCJtYXQtaGludDpub3QoW2FsaWduPSdlbmQnXSkiLCJtYXQtaGludFthbGlnbj0nZW5kJ10iXSx6eWU9MCx3OT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pZD0ibWF0LWVycm9yLSIrenllKyssZXx8aS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFZyKCJhcmlhLWxpdmUiKSxDKGJlKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1lcnJvciJdXSxob3N0QXR0cnM6WyJhcmlhLWF0b21pYyIsInRydWUiLDEsIm1hdC1lcnJvciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZQZSgiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGZlYXR1cmVzOltSdChbe3Byb3ZpZGU6dEUsdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxVeWU9bmV3IGllKCJNYXRIaW50IiksRWc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1sYWJlbCJdXX0pLG59KSgpLGp5ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXBsYWNlaG9sZGVyIl1dfSksbn0pKCksQzk9MCxXeWU9Z28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0sInByaW1hcnkiKSxxeWU9bmV3IGllKCJNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMiKSxZcz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgV3lle2dldCBhcHBlYXJhbmNlKCl7cmV0dXJuIHRoaXMuX2FwcGVhcmFuY2V9c2V0IGFwcGVhcmFuY2UoZSl7bGV0IGk9dGhpcy5fYXBwZWFyYW5jZTt0aGlzLl9hcHBlYXJhbmNlPWV8fHRoaXMuX2RlZmF1bHRzPy5hcHBlYXJhbmNlfHwibGVnYWN5Iiwib3V0bGluZSI9PT10aGlzLl9hcHBlYXJhbmNlJiZpIT09ZSYmKHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlPSEwKX1nZXQgaGlkZVJlcXVpcmVkTWFya2VyKCl7cmV0dXJuIHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcn1zZXQgaGlkZVJlcXVpcmVkTWFya2VyKGUpe3RoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj1VdChlKX1fc2hvdWxkQWx3YXlzRmxvYXQoKXtyZXR1cm4iYWx3YXlzIj09PXRoaXMuZmxvYXRMYWJlbCYmIXRoaXMuX3Nob3dBbHdheXNBbmltYXRlfV9jYW5MYWJlbEZsb2F0KCl7cmV0dXJuIm5ldmVyIiE9PXRoaXMuZmxvYXRMYWJlbH1nZXQgaGludExhYmVsKCl7cmV0dXJuIHRoaXMuX2hpbnRMYWJlbH1zZXQgaGludExhYmVsKGUpe3RoaXMuX2hpbnRMYWJlbD1lLHRoaXMuX3Byb2Nlc3NIaW50cygpfWdldCBmbG9hdExhYmVsKCl7cmV0dXJuImxlZ2FjeSIhPT10aGlzLmFwcGVhcmFuY2UmJiJuZXZlciI9PT10aGlzLl9mbG9hdExhYmVsPyJhdXRvIjp0aGlzLl9mbG9hdExhYmVsfXNldCBmbG9hdExhYmVsKGUpe2UhPT10aGlzLl9mbG9hdExhYmVsJiYodGhpcy5fZmxvYXRMYWJlbD1lfHx0aGlzLl9nZXREZWZhdWx0RmxvYXRMYWJlbFN0YXRlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBfY29udHJvbCgpe3JldHVybiB0aGlzLl9leHBsaWNpdEZvcm1GaWVsZENvbnRyb2x8fHRoaXMuX2NvbnRyb2xOb25TdGF0aWN8fHRoaXMuX2NvbnRyb2xTdGF0aWN9c2V0IF9jb250cm9sKGUpe3RoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbD1lfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwpe3N1cGVyKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fZGlyPXIsdGhpcy5fZGVmYXVsdHM9byx0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX25nWm9uZT1zLHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSExLHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgQWUsdGhpcy5faGlkZVJlcXVpcmVkTWFya2VyPSExLHRoaXMuX3Nob3dBbHdheXNBbmltYXRlPSExLHRoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSIiLHRoaXMuX2hpbnRMYWJlbD0iIix0aGlzLl9oaW50TGFiZWxJZD0ibWF0LWhpbnQtIitDOSsrLHRoaXMuX2xhYmVsSWQ9Im1hdC1mb3JtLWZpZWxkLWxhYmVsLSIrQzkrKyx0aGlzLmZsb2F0TGFiZWw9dGhpcy5fZ2V0RGVmYXVsdEZsb2F0TGFiZWxTdGF0ZSgpLHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkPSJOb29wQW5pbWF0aW9ucyIhPT1sLHRoaXMuYXBwZWFyYW5jZT1vPy5hcHBlYXJhbmNlfHwibGVnYWN5IixvJiYodGhpcy5faGlkZVJlcXVpcmVkTWFya2VyPUJvb2xlYW4oby5oaWRlUmVxdWlyZWRNYXJrZXIpLG8uY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPW8uY29sb3IpKX1nZXRMYWJlbElkKCl7cmV0dXJuIHRoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKT90aGlzLl9sYWJlbElkOm51bGx9Z2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpe3JldHVybiB0aGlzLl9jb25uZWN0aW9uQ29udGFpbmVyUmVmfHx0aGlzLl9lbGVtZW50UmVmfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3ZhbGlkYXRlQ29udHJvbENoaWxkKCk7bGV0IGU9dGhpcy5fY29udHJvbDtlLmNvbnRyb2xUeXBlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LWZvcm0tZmllbGQtdHlwZS0ke2UuY29udHJvbFR5cGV9YCksZS5zdGF0ZUNoYW5nZXMucGlwZShObihudWxsKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdmFsaWRhdGVQbGFjZWhvbGRlcnMoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGUubmdDb250cm9sJiZlLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMmJmUubmdDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlJiZ0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pfSksY24odGhpcy5fcHJlZml4Q2hpbGRyZW4uY2hhbmdlcyx0aGlzLl9zdWZmaXhDaGlsZHJlbi5jaGFuZ2VzKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2hpbnRDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoTm4obnVsbCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Byb2Nlc3NIaW50cygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZXJyb3JDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoTm4obnVsbCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMudXBkYXRlT3V0bGluZUdhcCgpKX0pOnRoaXMudXBkYXRlT3V0bGluZUdhcCgpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5fdmFsaWRhdGVDb250cm9sQ2hpbGQoKSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseSYmdGhpcy51cGRhdGVPdXRsaW5lR2FwKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGU9ImVudGVyIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9zaG91bGRGb3J3YXJkKGUpe2xldCBpPXRoaXMuX2NvbnRyb2w/dGhpcy5fY29udHJvbC5uZ0NvbnRyb2w6bnVsbDtyZXR1cm4gaSYmaVtlXX1faGFzUGxhY2Vob2xkZXIoKXtyZXR1cm4hISh0aGlzLl9jb250cm9sJiZ0aGlzLl9jb250cm9sLnBsYWNlaG9sZGVyfHx0aGlzLl9wbGFjZWhvbGRlckNoaWxkKX1faGFzTGFiZWwoKXtyZXR1cm4hKCF0aGlzLl9sYWJlbENoaWxkTm9uU3RhdGljJiYhdGhpcy5fbGFiZWxDaGlsZFN0YXRpYyl9X3Nob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4gdGhpcy5fY2FuTGFiZWxGbG9hdCgpJiYodGhpcy5fY29udHJvbCYmdGhpcy5fY29udHJvbC5zaG91bGRMYWJlbEZsb2F0fHx0aGlzLl9zaG91bGRBbHdheXNGbG9hdCgpKX1faGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpe3JldHVybiJsZWdhY3kiPT09dGhpcy5hcHBlYXJhbmNlJiYhdGhpcy5faGFzTGFiZWwoKXx8dGhpcy5faGFzTGFiZWwoKSYmIXRoaXMuX3Nob3VsZExhYmVsRmxvYXQoKX1faGFzRmxvYXRpbmdMYWJlbCgpe3JldHVybiB0aGlzLl9oYXNMYWJlbCgpfHwibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmdGhpcy5faGFzUGxhY2Vob2xkZXIoKX1fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKXtyZXR1cm4gdGhpcy5fZXJyb3JDaGlsZHJlbiYmdGhpcy5fZXJyb3JDaGlsZHJlbi5sZW5ndGg+MCYmdGhpcy5fY29udHJvbC5lcnJvclN0YXRlPyJlcnJvciI6ImhpbnQifV9hbmltYXRlQW5kTG9ja0xhYmVsKCl7dGhpcy5faGFzRmxvYXRpbmdMYWJlbCgpJiZ0aGlzLl9jYW5MYWJlbEZsb2F0KCkmJih0aGlzLl9hbmltYXRpb25zRW5hYmxlZCYmdGhpcy5fbGFiZWwmJih0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMCxhaSh0aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2l0aW9uZW5kIikucGlwZSh6dCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGU9ITF9KSksdGhpcy5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fdmFsaWRhdGVQbGFjZWhvbGRlcnMoKXt9X3Byb2Nlc3NIaW50cygpe3RoaXMuX3ZhbGlkYXRlSGludHMoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKX1fdmFsaWRhdGVIaW50cygpe31fZ2V0RGVmYXVsdEZsb2F0TGFiZWxTdGF0ZSgpe3JldHVybiB0aGlzLl9kZWZhdWx0cyYmdGhpcy5fZGVmYXVsdHMuZmxvYXRMYWJlbHx8ImF1dG8ifV9zeW5jRGVzY3JpYmVkQnlJZHMoKXtpZih0aGlzLl9jb250cm9sKXtsZXQgZT1bXTtpZih0aGlzLl9jb250cm9sLnVzZXJBcmlhRGVzY3JpYmVkQnkmJiJzdHJpbmciPT10eXBlb2YgdGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiZlLnB1c2goLi4udGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5LnNwbGl0KCIgIikpLCJoaW50Ij09PXRoaXMuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpe2xldCBpPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChvPT4ic3RhcnQiPT09by5hbGlnbik6bnVsbCxyPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChvPT4iZW5kIj09PW8uYWxpZ24pOm51bGw7aT9lLnB1c2goaS5pZCk6dGhpcy5faGludExhYmVsJiZlLnB1c2godGhpcy5faGludExhYmVsSWQpLHImJmUucHVzaChyLmlkKX1lbHNlIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJmUucHVzaCguLi50aGlzLl9lcnJvckNoaWxkcmVuLm1hcChpPT5pLmlkKSk7dGhpcy5fY29udHJvbC5zZXREZXNjcmliZWRCeUlkcyhlKX19X3ZhbGlkYXRlQ29udHJvbENoaWxkKCl7fXVwZGF0ZU91dGxpbmVHYXAoKXtsZXQgZT10aGlzLl9sYWJlbD90aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50Om51bGwsaT10aGlzLl9jb25uZWN0aW9uQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQscj0iLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiLG89Ii5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCI7aWYoIm91dGxpbmUiIT09dGhpcy5hcHBlYXJhbmNlfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtpZighZXx8IWUuY2hpbGRyZW4ubGVuZ3RofHwhZS50ZXh0Q29udGVudC50cmltKCkpe2xldCBkPWkucXVlcnlTZWxlY3RvckFsbChgJHtyfSwgJHtvfWApO2ZvcihsZXQgdT0wO3U8ZC5sZW5ndGg7dSsrKWRbdV0uc3R5bGUud2lkdGg9IjAiO3JldHVybn1pZighdGhpcy5faXNBdHRhY2hlZFRvRE9NKCkpcmV0dXJuIHZvaWQodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITApO2xldCBhPTAscz0wLGw9aS5xdWVyeVNlbGVjdG9yQWxsKHIpLGM9aS5xdWVyeVNlbGVjdG9yQWxsKG8pO2lmKHRoaXMuX2xhYmVsJiZ0aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCl7bGV0IGQ9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPT09ZC53aWR0aCYmMD09PWQuaGVpZ2h0KXJldHVybiB0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCx2b2lkKHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSExKTtsZXQgdT10aGlzLl9nZXRTdGFydEVuZChkKSxwPWUuY2hpbGRyZW4sZj10aGlzLl9nZXRTdGFydEVuZChwWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxtPTA7Zm9yKGxldCB5PTA7eTxwLmxlbmd0aDt5KyspbSs9cFt5XS5vZmZzZXRXaWR0aDthPU1hdGguYWJzKGYtdSktNSxzPW0+MD8uNzUqbSsxMDowfWZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWxbZF0uc3R5bGUud2lkdGg9YCR7YX1weGA7Zm9yKGxldCBkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXS5zdHlsZS53aWR0aD1gJHtzfXB4YDt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT10aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMX1fZ2V0U3RhcnRFbmQoZSl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/ZS5yaWdodDplLmxlZnR9X2lzQXR0YWNoZWRUb0RPTSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZihlLmdldFJvb3ROb2RlKXtsZXQgaT1lLmdldFJvb3ROb2RlKCk7cmV0dXJuIGkmJmkhPT1lfXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoRnQpLEMoSGksOCksQyhxeWUsOCksQygkbiksQyhhdCksQyhkaSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWZvcm0tZmllbGQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKGNpKHIsTmwsNSksY2kocixObCw3KSxjaShyLEVnLDUpLGNpKHIsRWcsNyksY2kocixqeWUsNSksY2kocix0RSw1KSxjaShyLFV5ZSw1KSxjaShyLG5FLDUpLGNpKHIsWTIsNSkpLDImZSl7bGV0IG87d2Uobz1TZSgpKSYmKGkuX2NvbnRyb2xOb25TdGF0aWM9by5maXJzdCksd2Uobz1TZSgpKSYmKGkuX2NvbnRyb2xTdGF0aWM9by5maXJzdCksd2Uobz1TZSgpKSYmKGkuX2xhYmVsQ2hpbGROb25TdGF0aWM9by5maXJzdCksd2Uobz1TZSgpKSYmKGkuX2xhYmVsQ2hpbGRTdGF0aWM9by5maXJzdCksd2Uobz1TZSgpKSYmKGkuX3BsYWNlaG9sZGVyQ2hpbGQ9by5maXJzdCksd2Uobz1TZSgpKSYmKGkuX2Vycm9yQ2hpbGRyZW49byksd2Uobz1TZSgpKSYmKGkuX2hpbnRDaGlsZHJlbj1vKSx3ZShvPVNlKCkpJiYoaS5fcHJlZml4Q2hpbGRyZW49byksd2Uobz1TZSgpKSYmKGkuX3N1ZmZpeENoaWxkcmVuPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoWWUoU3llLDcpLFllKEV5ZSw1KSxZZShUeWUsNSkpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkuX2Nvbm5lY3Rpb25Db250YWluZXJSZWY9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuX2lucHV0Q29udGFpbmVyUmVmPXIuZmlyc3QpLHdlKHI9U2UoKSkmJihpLl9sYWJlbD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvcm0tZmllbGQiXSxob3N0VmFyczo0MCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJlFlKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT1pLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwiLCJmaWxsIj09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIiwib3V0bGluZSI9PWkuYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IiwibGVnYWN5Ij09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtaW52YWxpZCIsaS5fY29udHJvbC5lcnJvclN0YXRlKSgibWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IixpLl9jYW5MYWJlbEZsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQiLGkuX3Nob3VsZExhYmVsRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCIsaS5faGFzRmxvYXRpbmdMYWJlbCgpKSgibWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciIsaS5faGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpKSgibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQiLGkuX2NvbnRyb2wuZGlzYWJsZWQpKCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbGVkIixpLl9jb250cm9sLmF1dG9maWxsZWQpKCJtYXQtZm9jdXNlZCIsaS5fY29udHJvbC5mb2N1c2VkKSgibmctdW50b3VjaGVkIixpLl9zaG91bGRGb3J3YXJkKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLGkuX3Nob3VsZEZvcndhcmQoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixpLl9zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpKSgibmctZGlydHkiLGkuX3Nob3VsZEZvcndhcmQoImRpcnR5IikpKCJuZy12YWxpZCIsaS5fc2hvdWxkRm9yd2FyZCgidmFsaWQiKSkoIm5nLWludmFsaWQiLGkuX3Nob3VsZEZvcndhcmQoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLGkuX3Nob3VsZEZvcndhcmQoInBlbmRpbmciKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwhaS5fYW5pbWF0aW9uc0VuYWJsZWQpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsaGlkZVJlcXVpcmVkTWFya2VyOiJoaWRlUmVxdWlyZWRNYXJrZXIiLGhpbnRMYWJlbDoiaGludExhYmVsIixmbG9hdExhYmVsOiJmbG9hdExhYmVsIn0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXSxmZWF0dXJlczpbUnQoW3twcm92aWRlOkJsLHVzZUV4aXN0aW5nOm59XSksTGVdLG5nQ29udGVudFNlbGVjdG9yczpIeWUsZGVjbHM6MTUsdmFyczo4LGNvbnN0czpbWzEsIm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIiXSxbMSwibWF0LWZvcm0tZmllbGQtZmxleCIsMywiY2xpY2siXSxbImNvbm5lY3Rpb25Db250YWluZXIiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1wcmVmaXgiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJjZGtPYnNlcnZlQ29udGVudCIsNCwibmdJZiJdLFsxLCJtYXQtZm9ybS1maWVsZC1pbmZpeCJdLFsiaW5wdXRDb250YWluZXIiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImlkIiwibWF0LWVtcHR5IiwibWF0LWZvcm0tZmllbGQtZW1wdHkiLCJtYXQtYWNjZW50IiwibWF0LXdhcm4iLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZSIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siXSxbMSwibWF0LWZvcm0tZmllbGQtcHJlZml4IiwzLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJpZCIsIm5nU3dpdGNoIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbImxhYmVsIiwiIl0sWyJjbGFzcyIsIm1hdC1wbGFjZWhvbGRlci1yZXF1aXJlZCBtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkIiwibWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIl0sWzEsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCJdLFsxLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiXSxbMSwibWF0LWZvcm0tZmllbGQtcmlwcGxlIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtaGludCIsMywiaWQiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMSwibWF0LWhpbnQiLDMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZ24oVnllKSxoKDAsImRpdiIsMCkoMSwiZGl2IiwxLDIpLEQoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrJiZpLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2sobyl9KSxTKDMsRHllLDksMCwibmctY29udGFpbmVyIiwzKSxTKDQsSXllLDIsMSwiZGl2Iiw0KSxoKDUsImRpdiIsNSw2KSxYdCg3KSxoKDgsInNwYW4iLDcpLFMoOSxQeWUsNSwxNiwibGFiZWwiLDgpLGcoKSgpLFMoMTAsT3llLDIsMCwiZGl2Iiw5KSxnKCksUygxMSxGeWUsMiw0LCJkaXYiLDEwKSxoKDEyLCJkaXYiLDExKSxTKDEzLEx5ZSwyLDEsImRpdiIsMTIpLFMoMTQsQnllLDUsMiwiZGl2IiwxMyksZygpKCkpLDImZSYmKGIoMyksXygibmdJZiIsIm91dGxpbmUiPT1pLmFwcGVhcmFuY2UpLGIoMSksXygibmdJZiIsaS5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoKSxiKDUpLF8oIm5nSWYiLGkuX2hhc0Zsb2F0aW5nTGFiZWwoKSksYigxKSxfKCJuZ0lmIixpLl9zdWZmaXhDaGlsZHJlbi5sZW5ndGgpLGIoMSksXygibmdJZiIsIm91dGxpbmUiIT1pLmFwcGVhcmFuY2UpLGIoMSksXygibmdTd2l0Y2giLGkuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpLGIoMSksXygibmdTd2l0Y2hDYXNlIiwiZXJyb3IiKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsImhpbnQiKSl9LGRlcGVuZGVuY2llczpbRmUsJGksc3IscGddLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtZW1wdHkubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9jazt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaW5wdXQtc2VydmVyW3BsYWNlaG9sZGVyXTpub3QoOnBsYWNlaG9sZGVyLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1sYWJlbDpub3QoLm1hdC1mb3JtLWZpZWxkLWVtcHR5KXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNmb3JtOnNjYWxlM2QoMSwgMS4wMDAxLCAxKX0ubWF0LWZvcm0tZmllbGQtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3RyYW5zZm9ybS1vcmlnaW46NTAlO3RyYW5zZm9ybTpzY2FsZVgoMC41KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlcntmbGV4OjEgMCAxZW19Lm1hdC1lcnJvcntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1jb250cm9sLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5ke29yZGVyOjF9Lm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSAubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWRhdGVwaWNrZXItdG9nZ2xlIC5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzo4cHggMH0ubWF0LWZvcm0tZmllbGQgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSAubWF0LW1kYy1pY29uLWJ1dHRvbiAubWF0LWljb257Zm9udC1zaXplOjFlbTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46LTJweCAwIDFweH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtZGF0ZS1yYW5nZS1pbnB1dCAubWF0LWZvcm0tZmllbGQtaW5maXh7d2lkdGg6MjAwcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSAubWF0LW1kYy1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWRhdGVwaWNrZXItdG9nZ2xlIC5tYXQtbWRjLWljb24tYnV0dG9ue2ZvbnQtc2l6ZTppbmhlcml0O3dpZHRoOjEuNWVtO2hlaWdodDoxLjVlbTtwYWRkaW5nOjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1kZWZhdWx0LWljb24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1kZWZhdWx0LWljb257d2lkdGg6MWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtZGF0ZXBpY2tlci10b2dnbGUgLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtZGF0ZXBpY2tlci10b2dnbGUgLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1pY29ue2xpbmUtaGVpZ2h0OjEuNWVtO21hcmdpbjowfS5tYXQtZm9ybS1maWVsZCAubWF0LWRhdGVwaWNrZXItdG9nZ2xlIC5tYXQtbWRjLWJ1dHRvbi1iYXNle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSAubWF0LW1kYy1idXR0b24tYmFzZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0iLCcubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7cGFkZGluZzouNzVlbSAuNzVlbSAwIC43NWVtfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7b3V0bGluZS1jb2xvcjpHcmF5VGV4dH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7b3V0bGluZTpkYXNoZWQgM3B4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MXB4O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JvdHRvbTowO2hlaWdodDoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX0nLCcubWF0LWlucHV0LWVsZW1lbnR7Zm9udDppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtjb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6MDttYXJnaW46MDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOmluaGVyaXQ7Ym94LXNpemluZzpjb250ZW50LWJveH0ubWF0LWlucHV0LWVsZW1lbnQ6LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQsLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jb250YWN0cy1hdXRvLWZpbGwtYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jYXBzLWxvY2staW5kaWNhdG9yLC5tYXQtaW5wdXQtZWxlbWVudDpub3QoW3R5cGU9cGFzc3dvcmRdKTo6LXdlYmtpdC1jcmVkZW50aWFscy1hdXRvLWZpbGwtYnV0dG9ue3Zpc2liaWxpdHk6aGlkZGVufS5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGVdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZS1sb2NhbF0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9bW9udGhdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPXdlZWtdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPXRpbWVde2xpbmUtaGVpZ2h0OjF9Lm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZV06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1tb250aF06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPXdlZWtdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT10aW1lXTo6YWZ0ZXJ7Y29udGVudDoiICI7d2hpdGUtc3BhY2U6cHJlO3dpZHRoOjFweH0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3IsLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNsZWFyLWJ1dHRvbntmb250LXNpemU6Ljc1ZW19Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dHJhbnNpdGlvbjpjb2xvciA0MDBtcyAxMzMuMzMzMzMzMzMzM21zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dHJhbnNpdGlvbjpjb2xvciA0MDBtcyAxMzMuMzMzMzMzMzMzM21zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwwKSAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCkgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCkgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye29wYWNpdHk6MH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcnt0cmFuc2l0aW9uOm5vbmV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcnt0cmFuc2l0aW9uOm5vbmV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcnt0cmFuc2l0aW9uOm5vbmV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfXRleHRhcmVhLm1hdC1pbnB1dC1lbGVtZW50e3Jlc2l6ZTp2ZXJ0aWNhbDtvdmVyZmxvdzphdXRvfXRleHRhcmVhLm1hdC1pbnB1dC1lbGVtZW50LmNkay10ZXh0YXJlYS1hdXRvc2l6ZXtyZXNpemU6bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtwYWRkaW5nOjJweCAwO21hcmdpbjotMnB4IDB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50ey1tb3otYXBwZWFyYW5jZTpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1mbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLXRvcDoxZW07dG9wOi0xZW07bWFyZ2luLWJvdHRvbTotMWVtfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb250ZW50OiIiO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci10b3A6NXB4IHNvbGlkO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MDttYXJnaW4tdG9wOi0yLjVweDtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye3JpZ2h0OmF1dG87bGVmdDowfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtaW5wdXQtZWxlbWVudHtwYWRkaW5nLXJpZ2h0OjE1cHh9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtaW5wdXQtZWxlbWVudHtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE1cHh9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDEwcHgpfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye21hcmdpbi10b3A6LTVweH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcnttYXJnaW4tdG9wOi0xMHB4fScsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDEwMHB4KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue3dpZHRoOjFlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257Zm9udDppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDoxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDFweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0b3A6MDtoZWlnaHQ6MnB4O292ZXJmbG93OmhpZGRlbn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweDtib3JkZXItdG9wLWNvbG9yOkdyYXlUZXh0fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkOm5vdCgubWF0LWZvY3VzZWQpIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjFweH0iLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC13cmFwcGVye21hcmdpbjouMjVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWZsZXh7cGFkZGluZzowIC43NWVtIDAgLjc1ZW07bWFyZ2luLXRvcDotMC4yNWVtO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7dG9wOi4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDouMjVlbTtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7bWluLXdpZHRoOjVweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItcmFkaXVzOjAgNXB4IDVweCAwO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7ZmxleC1ncm93OjF9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7Ym9yZGVyLXJhZGl1czouMDAwMDAxcHg7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7Ym9yZGVyLWxlZnQtc3R5bGU6bm9uZTtib3JkZXItcmlnaHQtc3R5bGU6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre29wYWNpdHk6MH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci13aWR0aDoycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAxMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2JvcmRlcjozcHggZGFzaGVkfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre29wYWNpdHk6MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwYWRkaW5nOjAgMWVtfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHt0cmFuc2l0aW9uOm5vbmV9IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7cGFkZGluZy10b3A6Ljc1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDFweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JvdHRvbTowO2hlaWdodDoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1wb3NpdGlvbjowO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym9yZGVyLXRvcC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXRvcC13aWR0aDoycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQuX21hdC1hbmltYXRpb24tbm9vcGFibGU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RyYW5zaXRpb246bm9uZX0iXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltYMi50cmFuc2l0aW9uTWVzc2FnZXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFM5PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRQcmVmaXgiLCIiXV0sZmVhdHVyZXM6W1J0KFt7cHJvdmlkZTpuRSx1c2VFeGlzdGluZzpufV0pXX0pLG59KSgpLFZmPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxRdCxQdSxRdF19KSxufSkoKSxQOT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcmVuZGVyZXI9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5vbkNoYW5nZT1yPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319c2V0UHJvcGVydHkoZSxpKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZSxpKX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGRjKSxDKGJlKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm59KSxufSkoKSxIZj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUDl7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9Q24obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixmZWF0dXJlczpbTGVdfSksbn0pKCksSHI9bmV3IGllKCJOZ1ZhbHVlQWNjZXNzb3IiKSxZeWU9e3Byb3ZpZGU6SHIsdXNlRXhpc3Rpbmc6Vm4oKCk9Plh5ZSksbXVsdGk6ITB9LFh5ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSGZ7d3JpdGVWYWx1ZShlKXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIixlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC5jaGVja2VkKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGZlYXR1cmVzOltSdChbWXllXSksTGVdfSksbn0pKCksUXllPXtwcm92aWRlOkhyLHVzZUV4aXN0aW5nOlZuKCgpPT5JZyksbXVsdGk6ITB9LEt5ZT1uZXcgaWUoIkNvbXBvc2l0aW9uRXZlbnRNb2RlIiksSWc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFA5e2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkpLHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1yLHRoaXMuX2NvbXBvc2luZz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlvbk1vZGU9IWZ1bmN0aW9uKCl7bGV0IG49TWwoKT9NbCgpLmdldFVzZXJBZ2VudCgpOiIiO3JldHVybi9hbmRyb2lkIChcZCspLy50ZXN0KG4udG9Mb3dlckNhc2UoKSl9KCkpfXdyaXRlVmFsdWUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGU/PyIiKX1faGFuZGxlSW5wdXQoZSl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRoaXMub25DaGFuZ2UoZSl9X2NvbXBvc2l0aW9uU3RhcnQoKXt0aGlzLl9jb21wb3Npbmc9ITB9X2NvbXBvc2l0aW9uRW5kKGUpe3RoaXMuX2NvbXBvc2luZz0hMSx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJnRoaXMub25DaGFuZ2UoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoZGMpLEMoYmUpLEMoS3llLDgpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwibmdNb2RlbCIsIiJdLFsiIiwibmdEZWZhdWx0Q29udHJvbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlSW5wdXQoby50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fY29tcG9zaXRpb25TdGFydCgpfSkoImNvbXBvc2l0aW9uZW5kIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY29tcG9zaXRpb25FbmQoby50YXJnZXQudmFsdWUpfSl9LGZlYXR1cmVzOltSdChbUXllXSksTGVdfSksbn0pKCksSnllPSExO2Z1bmN0aW9uIFV1KG4pe3JldHVybiBudWxsPT1ufHwoInN0cmluZyI9PXR5cGVvZiBufHxBcnJheS5pc0FycmF5KG4pKSYmMD09PW4ubGVuZ3RofWZ1bmN0aW9uIE85KG4pe3JldHVybiBudWxsIT1uJiYibnVtYmVyIj09dHlwZW9mIG4ubGVuZ3RofXZhciBTbz1uZXcgaWUoIk5nVmFsaWRhdG9ycyIpLGp1PW5ldyBpZSgiTmdBc3luY1ZhbGlkYXRvcnMiKSwkeWU9L14oPz0uezEsMjU0fSQpKD89LnsxLDY0fUApW2EtekEtWjAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlwuW2EtekEtWjAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKykqQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxWbD1jbGFzc3tzdGF0aWMgbWluKHQpe3JldHVybiBGOSh0KX1zdGF0aWMgbWF4KHQpe3JldHVybiBMOSh0KX1zdGF0aWMgcmVxdWlyZWQodCl7cmV0dXJuIE45KHQpfXN0YXRpYyByZXF1aXJlZFRydWUodCl7cmV0dXJuIEI5KHQpfXN0YXRpYyBlbWFpbCh0KXtyZXR1cm4gVjkodCl9c3RhdGljIG1pbkxlbmd0aCh0KXtyZXR1cm4gSDkodCl9c3RhdGljIG1heExlbmd0aCh0KXtyZXR1cm4gejkodCl9c3RhdGljIHBhdHRlcm4odCl7cmV0dXJuIFU5KHQpfXN0YXRpYyBudWxsVmFsaWRhdG9yKHQpe3JldHVybiBudWxsfXN0YXRpYyBjb21wb3NlKHQpe3JldHVybiBYOSh0KX1zdGF0aWMgY29tcG9zZUFzeW5jKHQpe3JldHVybiBROSh0KX19O2Z1bmN0aW9uIEY5KG4pe3JldHVybiB0PT57aWYoVXUodC52YWx1ZSl8fFV1KG4pKXJldHVybiBudWxsO2xldCBlPXBhcnNlRmxvYXQodC52YWx1ZSk7cmV0dXJuIWlzTmFOKGUpJiZlPG4/e21pbjp7bWluOm4sYWN0dWFsOnQudmFsdWV9fTpudWxsfX1mdW5jdGlvbiBMOShuKXtyZXR1cm4gdD0+e2lmKFV1KHQudmFsdWUpfHxVdShuKSlyZXR1cm4gbnVsbDtsZXQgZT1wYXJzZUZsb2F0KHQudmFsdWUpO3JldHVybiFpc05hTihlKSYmZT5uP3ttYXg6e21heDpuLGFjdHVhbDp0LnZhbHVlfX06bnVsbH19ZnVuY3Rpb24gTjkobil7cmV0dXJuIFV1KG4udmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH1mdW5jdGlvbiBCOShuKXtyZXR1cm4hMD09PW4udmFsdWU/bnVsbDp7cmVxdWlyZWQ6ITB9fWZ1bmN0aW9uIFY5KG4pe3JldHVybiBVdShuLnZhbHVlKXx8JHllLnRlc3Qobi52YWx1ZSk/bnVsbDp7ZW1haWw6ITB9fWZ1bmN0aW9uIEg5KG4pe3JldHVybiB0PT5VdSh0LnZhbHVlKXx8IU85KHQudmFsdWUpP251bGw6dC52YWx1ZS5sZW5ndGg8bj97bWlubGVuZ3RoOntyZXF1aXJlZExlbmd0aDpuLGFjdHVhbExlbmd0aDp0LnZhbHVlLmxlbmd0aH19Om51bGx9ZnVuY3Rpb24gejkobil7cmV0dXJuIHQ9Pk85KHQudmFsdWUpJiZ0LnZhbHVlLmxlbmd0aD5uP3ttYXhsZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOm4sYWN0dWFsTGVuZ3RoOnQudmFsdWUubGVuZ3RofX06bnVsbH1mdW5jdGlvbiBVOShuKXtpZighbilyZXR1cm4gckU7bGV0IHQsZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/KGU9IiIsIl4iIT09bi5jaGFyQXQoMCkmJihlKz0iXiIpLGUrPW4sIiQiIT09bi5jaGFyQXQobi5sZW5ndGgtMSkmJihlKz0iJCIpLHQ9bmV3IFJlZ0V4cChlKSk6KGU9bi50b1N0cmluZygpLHQ9biksaT0+e2lmKFV1KGkudmFsdWUpKXJldHVybiBudWxsO2xldCByPWkudmFsdWU7cmV0dXJuIHQudGVzdChyKT9udWxsOntwYXR0ZXJuOntyZXF1aXJlZFBhdHRlcm46ZSxhY3R1YWxWYWx1ZTpyfX19fWZ1bmN0aW9uIHJFKG4pe3JldHVybiBudWxsfWZ1bmN0aW9uIGo5KG4pe3JldHVybiBudWxsIT1ufWZ1bmN0aW9uIEc5KG4pe2xldCB0PVRoKG4pP25vKG4pOm47aWYoSnllJiYhT1AodCkpe2xldCBlPSJFeHBlY3RlZCBhc3luYyB2YWxpZGF0b3IgdG8gcmV0dXJuIFByb21pc2Ugb3IgT2JzZXJ2YWJsZS4iO3Rocm93Im9iamVjdCI9PXR5cGVvZiBuJiYoZSs9IiBBcmUgeW91IHVzaW5nIGEgc3luY2hyb25vdXMgdmFsaWRhdG9yIHdoZXJlIGFuIGFzeW5jIHZhbGlkYXRvciBpcyBleHBlY3RlZD8iKSxuZXcgYnQoLTExMDEsZSl9cmV0dXJuIHR9ZnVuY3Rpb24gVzkobil7bGV0IHQ9e307cmV0dXJuIG4uZm9yRWFjaChlPT57dD1udWxsIT1lP3suLi50LC4uLmV9OnR9KSwwPT09T2JqZWN0LmtleXModCkubGVuZ3RoP251bGw6dH1mdW5jdGlvbiBxOShuLHQpe3JldHVybiB0Lm1hcChlPT5lKG4pKX1mdW5jdGlvbiBZOShuKXtyZXR1cm4gbi5tYXAodD0+ZnVuY3Rpb24obil7cmV0dXJuIW4udmFsaWRhdGV9KHQpP3Q6ZT0+dC52YWxpZGF0ZShlKSl9ZnVuY3Rpb24gWDkobil7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHQ9bi5maWx0ZXIoajkpO3JldHVybiAwPT10Lmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUpe3JldHVybiBXOShxOShlLHQpKX19ZnVuY3Rpb24gSjIobil7cmV0dXJuIG51bGwhPW4/WDkoWTkobikpOm51bGx9ZnVuY3Rpb24gUTkobil7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHQ9bi5maWx0ZXIoajkpO3JldHVybiAwPT10Lmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUpe3JldHVybiBwbyhxOShlLHQpLm1hcChHOSkpLnBpcGUoVShXOSkpfX1mdW5jdGlvbiAkMihuKXtyZXR1cm4gbnVsbCE9bj9ROShZOShuKSk6bnVsbH1mdW5jdGlvbiBFOShuLHQpe3JldHVybiBudWxsPT09bj9bdF06QXJyYXkuaXNBcnJheShuKT9bLi4ubix0XTpbbix0XX1mdW5jdGlvbiBaOShuKXtyZXR1cm4gbi5fcmF3VmFsaWRhdG9yc31mdW5jdGlvbiBLOShuKXtyZXR1cm4gbi5fcmF3QXN5bmNWYWxpZGF0b3JzfWZ1bmN0aW9uIFEyKG4pe3JldHVybiBuP0FycmF5LmlzQXJyYXkobik/bjpbbl06W119ZnVuY3Rpb24gb0Uobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLmluY2x1ZGVzKHQpOm49PT10fWZ1bmN0aW9uIFQ5KG4sdCl7bGV0IGU9UTIodCk7cmV0dXJuIFEyKG4pLmZvckVhY2gocj0+e29FKGUscil8fGUucHVzaChyKX0pLGV9ZnVuY3Rpb24gRDkobix0KXtyZXR1cm4gUTIodCkuZmlsdGVyKGU9PiFvRShuLGUpKX12YXIgYUU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9yYXdWYWxpZGF0b3JzPVtdLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWU6bnVsbH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxpZDpudWxsfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucGVuZGluZzpudWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpc2FibGVkOm51bGx9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lbmFibGVkOm51bGx9Z2V0IGVycm9ycygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVycm9yczpudWxsfWdldCBwcmlzdGluZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnByaXN0aW5lOm51bGx9Z2V0IGRpcnR5KCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH1nZXQgdG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzOm51bGx9Z2V0IHVudG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfWdldCBzdGF0dXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlczpudWxsfWdldCB2YWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZUNoYW5nZXM6bnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfV9zZXRWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dHx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1KMih0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10fHxbXSx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49JDIodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbnx8bnVsbH1fcmVnaXN0ZXJPbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLnB1c2godCl9X2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfXJlc2V0KHQpe3RoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLnJlc2V0KHQpfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcih0LGUpfWdldEVycm9yKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZ2V0RXJyb3IodCxlKTpudWxsfX0sJG89Y2xhc3MgZXh0ZW5kcyBhRXtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fSx6YT1jbGFzcyBleHRlbmRzIGFFe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLm5hbWU9bnVsbCx0aGlzLnZhbHVlQWNjZXNzb3I9bnVsbH19LFoyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NkPXR9Z2V0IGlzVG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnRvdWNoZWR9Z2V0IGlzVW50b3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udW50b3VjaGVkfWdldCBpc1ByaXN0aW5lKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucHJpc3RpbmV9Z2V0IGlzRGlydHkoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5kaXJ0eX1nZXQgaXNWYWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnZhbGlkfWdldCBpc0ludmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5pbnZhbGlkfWdldCBpc1BlbmRpbmcoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wZW5kaW5nfWdldCBpc1N1Ym1pdHRlZCgpe3JldHVybiEhdGhpcy5fY2Q/LnN1Ym1pdHRlZH19LHBFPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaMntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh6YSwyKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibmdNb2RlbCIsIiJdLFsiIiwiZm9ybUNvbnRyb2wiLCIiXV0saG9zdFZhcnM6MTQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZRZSgibmctdW50b3VjaGVkIixpLmlzVW50b3VjaGVkKSgibmctdG91Y2hlZCIsaS5pc1RvdWNoZWQpKCJuZy1wcmlzdGluZSIsaS5pc1ByaXN0aW5lKSgibmctZGlydHkiLGkuaXNEaXJ0eSkoIm5nLXZhbGlkIixpLmlzVmFsaWQpKCJuZy1pbnZhbGlkIixpLmlzSW52YWxpZCkoIm5nLXBlbmRpbmciLGkuaXNQZW5kaW5nKX0sZmVhdHVyZXM6W0xlXX0pLG59KSgpO2Z1bmN0aW9uIEo5KG4sdCl7cmV0dXJuIG4/YHdpdGggbmFtZTogJyR7dH0nYDpgYXQgaW5kZXg6ICR7dH1gfXZhciBLMj0hMSwkYj0iVkFMSUQiLGlFPSJJTlZBTElEIixEZz0iUEVORElORyIsZXY9IkRJU0FCTEVEIjtmdW5jdGlvbiAkOShuKXtyZXR1cm4oZkUobik/bi52YWxpZGF0b3JzOm4pfHxudWxsfWZ1bmN0aW9uIGVxKG4sdCl7cmV0dXJuKGZFKHQpP3QuYXN5bmNWYWxpZGF0b3JzOm4pfHxudWxsfWZ1bmN0aW9uIGZFKG4pe3JldHVybiBudWxsIT1uJiYhQXJyYXkuaXNBcnJheShuKSYmIm9iamVjdCI9PXR5cGVvZiBufXZhciBzRT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlPVtdLHRoaXMuX2Fzc2lnblZhbGlkYXRvcnModCksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGUpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKHQpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj10fWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT0kYn1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PWlFfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT1EZ31nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1ldn1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PWV2fWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRhdGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKHQpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnModCl9c2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyh0KX1hZGRWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhUOSh0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoVDkodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhEOSh0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoRDkodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IodCl7cmV0dXJuIG9FKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsdCl9aGFzQXN5bmNWYWxpZGF0b3IodCl7cmV0dXJuIG9FKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyx0KX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHQpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKHQ9PnQubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChlPT57ZS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQodCl9bWFya0FzRGlydHkodD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkodCl9bWFya0FzUHJpc3RpbmUodD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGU9PntlLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1tYXJrQXNQZW5kaW5nKHQ9e30pe3RoaXMuc3RhdHVzPURnLCExIT09dC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh0KX1kaXNhYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPWV2LHRoaXMuZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFjaENoaWxkKGk9PntpLmRpc2FibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMuX3VwZGF0ZVZhbHVlKCksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLnQsc2tpcFByaXN0aW5lQ2hlY2s6ZX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChpPT5pKCEwKSl9ZW5hYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPSRiLHRoaXMuX2ZvckVhY2hDaGlsZChpPT57aS5lbmFibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi50LHNraXBQcmlzdGluZUNoZWNrOmV9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goaT0+aSghMSkpfV91cGRhdGVBbmNlc3RvcnModCl7dGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpLHQuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KHQpe3RoaXMuX3BhcmVudD10fWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0PXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PSRifHx0aGlzLnN0YXR1cz09PURnKSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IodC5lbWl0RXZlbnQpKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpfV91cGRhdGVUcmVlVmFsaWRpdHkodD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGU9PmUuX3VwZGF0ZVRyZWVWYWxpZGl0eSh0KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9ldjokYn1fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKHQpe2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ipe3RoaXMuc3RhdHVzPURnLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMDtsZXQgZT1HOSh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhpLHtlbWl0RXZlbnQ6dH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKHQsZT17fSl7dGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX1nZXQodCl7bGV0IGU9dDtyZXR1cm4gbnVsbD09ZXx8KEFycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQoIi4iKSksMD09PWUubGVuZ3RoKT9udWxsOmUucmVkdWNlKChpLHIpPT5pJiZpLl9maW5kKHIpLHRoaXMpfWdldEVycm9yKHQsZSl7bGV0IGk9ZT90aGlzLmdldChlKTp0aGlzO3JldHVybiBpJiZpLmVycm9ycz9pLmVycm9yc1t0XTpudWxsfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9Z2V0IHJvb3QoKXtsZXQgdD10aGlzO2Zvcig7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH1fdXBkYXRlQ29udHJvbHNFcnJvcnModCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IEwsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBMfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP2V2OnRoaXMuZXJyb3JzP2lFOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKERnKT9EZzp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoaUUpP2lFOiRifV9hbnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGU9PmUuc3RhdHVzPT09dCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyh0PT50LnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1fdXBkYXRlVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7ZkUodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZCh0KXtyZXR1cm4gbnVsbH1fYXNzaWduVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkodCk/dC5zbGljZSgpOnQsdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1mdW5jdGlvbihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9KMihuKTpufHxudWxsfSh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fYXNzaWduQXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0LHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1mdW5jdGlvbihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT8kMihuKTpufHxudWxsfSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfX0sbEU9Y2xhc3MgZXh0ZW5kcyBzRXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoJDkoZSksZXEoaSxlKSksdGhpcy5jb250cm9scz10LHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX3NldFVwQ29udHJvbHMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KX1yZWdpc3RlckNvbnRyb2wodCxlKXtyZXR1cm4gdGhpcy5jb250cm9sc1t0XT90aGlzLmNvbnRyb2xzW3RdOih0aGlzLmNvbnRyb2xzW3RdPWUsZS5zZXRQYXJlbnQodGhpcyksZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxlKX1hZGRDb250cm9sKHQsZSxpPXt9KXt0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmkuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9cmVtb3ZlQ29udHJvbCh0LGU9e30pe3RoaXMuY29udHJvbHNbdF0mJnRoaXMuY29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250cm9sKHQsZSxpPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLGUmJnRoaXMucmVnaXN0ZXJDb250cm9sKHQsZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6aS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpcy5jb250cm9sc1t0XS5lbmFibGVkfXNldFZhbHVlKHQsZT17fSl7KGZ1bmN0aW9uKG4sdCxlKXtuLl9mb3JFYWNoQ2hpbGQoKGkscik9PntpZih2b2lkIDA9PT1lW3JdKXRocm93IG5ldyBidCgxMDAyLEsyP2Z1bmN0aW9uKG4sdCl7cmV0dXJuYE11c3Qgc3VwcGx5IGEgdmFsdWUgZm9yIGZvcm0gY29udHJvbCAke0o5KG4sdCl9YH0odCxyKToiIil9KX0pKHRoaXMsITAsdCksT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57KGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uLmNvbnRyb2xzO2lmKCEodD9PYmplY3Qua2V5cyhpKTppKS5sZW5ndGgpdGhyb3cgbmV3IGJ0KDFlMyxLMj9mdW5jdGlvbihuKXtyZXR1cm5gXG4gICAgVGhlcmUgYXJlIG5vIGZvcm0gY29udHJvbHMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgJHtuPyJncm91cCI6ImFycmF5In0geWV0LiBJZiB5b3UncmUgdXNpbmcgbmdNb2RlbCxcbiAgICB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgbmV4dCB0aWNrIChlLmcuIHVzZSBzZXRUaW1lb3V0KS5cbiAgYH0odCk6IiIpO2lmKCFpW2VdKXRocm93IG5ldyBidCgxMDAxLEsyP2Z1bmN0aW9uKG4sdCl7cmV0dXJuYENhbm5vdCBmaW5kIGZvcm0gY29udHJvbCAke0o5KG4sdCl9YH0odCxlKToiIil9KSh0aGlzLCEwLGkpLHRoaXMuY29udHJvbHNbaV0uc2V0VmFsdWUodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe251bGwhPXQmJihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10aGlzLmNvbnRyb2xzW2ldO3ImJnIucGF0Y2hWYWx1ZSh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSl9cmVzZXQodD17fSxlPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKGkscik9PntpLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKHQsZSxpKT0+KHRbaV09ZS5nZXRSYXdWYWx1ZSgpLHQpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCB0PXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLChlLGkpPT4hIWkuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8ZSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fV9mb3JFYWNoQ2hpbGQodCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChlPT57bGV0IGk9dGhpcy5jb250cm9sc1tlXTtpJiZ0KGksZSl9KX1fc2V0VXBDb250cm9scygpe3RoaXMuX2ZvckVhY2hDaGlsZCh0PT57dC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfV91cGRhdGVWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fcmVkdWNlVmFsdWUoKX1fYW55Q29udHJvbHModCl7Zm9yKGxldFtlLGldb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhlKSYmdChpKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGUsaSxyKT0+KChpLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoZVtyXT1pLnZhbHVlKSxlKSl9X3JlZHVjZUNoaWxkcmVuKHQsZSl7bGV0IGk9dDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChyLG8pPT57aT1lKGkscixvKX0pLGl9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IobGV0IHQgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1t0XS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fZmluZCh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KT90aGlzLmNvbnRyb2xzW3RdOm51bGx9fSx6Zj1uZXcgaWUoIkNhbGxTZXREaXNhYmxlZFN0YXRlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+aXZ9KSxpdj0iYWx3YXlzIjtmdW5jdGlvbiBtRShuLHQpe3JldHVyblsuLi50LnBhdGgsbl19ZnVuY3Rpb24gbnYobix0LGU9aXYpe2VMKG4sdCksdC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUobi52YWx1ZSksKG4uZGlzYWJsZWR8fCJhbHdheXMiPT09ZSkmJnQudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4obi5kaXNhYmxlZCksZnVuY3Rpb24obix0KXt0LnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShlPT57bi5fcGVuZGluZ1ZhbHVlPWUsbi5fcGVuZGluZ0NoYW5nZT0hMCxuLl9wZW5kaW5nRGlydHk9ITAsImNoYW5nZSI9PT1uLnVwZGF0ZU9uJiZ0cShuLHQpfSl9KG4sdCksZnVuY3Rpb24obix0KXtsZXQgZT0oaSxyKT0+e3QudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGkpLHImJnQudmlld1RvTW9kZWxVcGRhdGUoaSl9O24ucmVnaXN0ZXJPbkNoYW5nZShlKSx0Ll9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e24uX3VucmVnaXN0ZXJPbkNoYW5nZShlKX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7dC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKCgpPT57bi5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09bi51cGRhdGVPbiYmbi5fcGVuZGluZ0NoYW5nZSYmdHEobix0KSwic3VibWl0IiE9PW4udXBkYXRlT24mJm4ubWFya0FzVG91Y2hlZCgpfSl9KG4sdCksZnVuY3Rpb24obix0KXtpZih0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7bGV0IGU9aT0+e3QudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKGkpfTtuLnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShlKSx0Ll9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e24uX3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGUpfSl9fShuLHQpfWZ1bmN0aW9uIGNFKG4sdCxlPSEwKXtsZXQgaT0oKT0+e307dC52YWx1ZUFjY2Vzc29yJiYodC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoaSksdC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKGkpKSx1RShuLHQpLG4mJih0Ll9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKSxuLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pKX1mdW5jdGlvbiBkRShuLHQpe24uZm9yRWFjaChlPT57ZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl9KX1mdW5jdGlvbiBlTChuLHQpe2xldCBlPVo5KG4pO251bGwhPT10LnZhbGlkYXRvcj9uLnNldFZhbGlkYXRvcnMoRTkoZSx0LnZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZuLnNldFZhbGlkYXRvcnMoW2VdKTtsZXQgaT1LOShuKTtudWxsIT09dC5hc3luY1ZhbGlkYXRvcj9uLnNldEFzeW5jVmFsaWRhdG9ycyhFOShpLHQuYXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgaSYmbi5zZXRBc3luY1ZhbGlkYXRvcnMoW2ldKTtsZXQgcj0oKT0+bi51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7ZEUodC5fcmF3VmFsaWRhdG9ycyxyKSxkRSh0Ll9yYXdBc3luY1ZhbGlkYXRvcnMscil9ZnVuY3Rpb24gdUUobix0KXtsZXQgZT0hMTtpZihudWxsIT09bil7aWYobnVsbCE9PXQudmFsaWRhdG9yKXtsZXQgcj1aOShuKTtpZihBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aD4wKXtsZXQgbz1yLmZpbHRlcihhPT5hIT09dC52YWxpZGF0b3IpO28ubGVuZ3RoIT09ci5sZW5ndGgmJihlPSEwLG4uc2V0VmFsaWRhdG9ycyhvKSl9fWlmKG51bGwhPT10LmFzeW5jVmFsaWRhdG9yKXtsZXQgcj1LOShuKTtpZihBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aD4wKXtsZXQgbz1yLmZpbHRlcihhPT5hIT09dC5hc3luY1ZhbGlkYXRvcik7by5sZW5ndGghPT1yLmxlbmd0aCYmKGU9ITAsbi5zZXRBc3luY1ZhbGlkYXRvcnMobykpfX19bGV0IGk9KCk9Pnt9O3JldHVybiBkRSh0Ll9yYXdWYWxpZGF0b3JzLGkpLGRFKHQuX3Jhd0FzeW5jVmFsaWRhdG9ycyxpKSxlfWZ1bmN0aW9uIHRxKG4sdCl7bi5fcGVuZGluZ0RpcnR5JiZuLm1hcmtBc0RpcnR5KCksbi5zZXRWYWx1ZShuLl9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLHQudmlld1RvTW9kZWxVcGRhdGUobi5fcGVuZGluZ1ZhbHVlKSxuLl9wZW5kaW5nQ2hhbmdlPSExfWZ1bmN0aW9uIG5xKG4sdCl7ZUwobix0KX1mdW5jdGlvbiB0TChuLHQpe2lmKCFuLmhhc093blByb3BlcnR5KCJtb2RlbCIpKXJldHVybiExO2xldCBlPW4ubW9kZWw7cmV0dXJuISFlLmlzRmlyc3RDaGFuZ2UoKXx8IU9iamVjdC5pcyh0LGUuY3VycmVudFZhbHVlKX1mdW5jdGlvbiBpcShuLHQpe24uX3N5bmNQZW5kaW5nQ29udHJvbHMoKSx0LmZvckVhY2goZT0+e2xldCBpPWUuY29udHJvbDsic3VibWl0Ij09PWkudXBkYXRlT24mJmkuX3BlbmRpbmdDaGFuZ2UmJihlLnZpZXdUb01vZGVsVXBkYXRlKGkuX3BlbmRpbmdWYWx1ZSksaS5fcGVuZGluZ0NoYW5nZT0hMSl9KX1mdW5jdGlvbiBuTChuLHQpe2lmKCF0KXJldHVybiBudWxsO2xldCBlLGkscjtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSx0LmZvckVhY2gobz0+e28uY29uc3RydWN0b3I9PT1JZz9lPW86ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuLmNvbnN0cnVjdG9yKT09PUhmfShvKT9pPW86cj1vfSkscnx8aXx8ZXx8bnVsbH12YXIgZ2JlPXtwcm92aWRlOiRvLHVzZUV4aXN0aW5nOlZuKCgpPT5BZyl9LHR2PVByb21pc2UucmVzb2x2ZSgpLEFnPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyAkb3tjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPXIsdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy5fZGlyZWN0aXZlcz1uZXcgU2V0LHRoaXMubmdTdWJtaXQ9bmV3IEwsdGhpcy5mb3JtPW5ldyBsRSh7fSxKMihlKSwkMihpKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChlKXt0di50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO2UuY29udHJvbD1pLnJlZ2lzdGVyQ29udHJvbChlLm5hbWUsZS5jb250cm9sKSxudihlLmNvbnRyb2wsZSx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSxlLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5fZGlyZWN0aXZlcy5hZGQoZSl9KX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXt0di50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO2kmJmkucmVtb3ZlQ29udHJvbChlLm5hbWUpLHRoaXMuX2RpcmVjdGl2ZXMuZGVsZXRlKGUpfSl9YWRkRm9ybUdyb3VwKGUpe3R2LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCkscj1uZXcgbEUoe30pO25xKHIsZSksaS5yZWdpc3RlckNvbnRyb2woZS5uYW1lLHIpLHIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KX1yZW1vdmVGb3JtR3JvdXAoZSl7dHYudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtpJiZpLnJlbW92ZUNvbnRyb2woZS5uYW1lKX0pfWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUsaSl7dHYudGhlbigoKT0+e3RoaXMuZm9ybS5nZXQoZS5wYXRoKS5zZXRWYWx1ZShpKX0pfXNldFZhbHVlKGUpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShlKX1vblN1Ym1pdChlKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsaXEodGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdChlKSwiZGlhbG9nIj09PWU/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShlKXt0aGlzLmZvcm0ucmVzZXQoZSksdGhpcy5zdWJtaXR0ZWQ9ITF9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmZvcm0uX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2ZpbmRDb250YWluZXIoZSl7cmV0dXJuIGUucG9wKCksZS5sZW5ndGg/dGhpcy5mb3JtLmdldChlKTp0aGlzLmZvcm19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoU28sMTApLEMoanUsMTApLEMoemYsOCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZEKCJzdWJtaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3VibWl0KG8pfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltSdChbZ2JlXSksTGVdfSksbn0pKCk7ZnVuY3Rpb24gSTkobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX1mdW5jdGlvbiBBOShuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uJiYyPT09T2JqZWN0LmtleXMobikubGVuZ3RoJiYidmFsdWUiaW4gbiYmImRpc2FibGVkImluIG59dmFyIHJ2PWNsYXNzIGV4dGVuZHMgc0V7Y29uc3RydWN0b3IodD1udWxsLGUsaSl7c3VwZXIoJDkoZSksZXEoaSxlKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVsbCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLGZFKGUpJiYoZS5ub25OdWxsYWJsZXx8ZS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9QTkodCk/dC52YWx1ZTp0KX1zZXRWYWx1ZSh0LGU9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWUuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGk9PmkodGhpcy52YWx1ZSwhMSE9PWUuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXt0aGlzLnNldFZhbHVlKHQsZSl9cmVzZXQodD10aGlzLmRlZmF1bHRWYWx1ZSxlPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLm1hcmtBc1ByaXN0aW5lKGUpLHRoaXMubWFya0FzVW50b3VjaGVkKGUpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxlKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHModCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlLnB1c2godCl9X3VucmVnaXN0ZXJPbkNoYW5nZSh0KXtJOSh0aGlzLl9vbkNoYW5nZSx0KX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KXtJOSh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLHQpfV9mb3JFYWNoQ2hpbGQodCl7fV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUodCl7QTkodCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQudmFsdWUsdC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dH19LHJxPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyAkb3tuZ09uSW5pdCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRGb3JtR3JvdXAodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtR3JvdXAodGhpcyl9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1Hcm91cCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiBtRShudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLGZlYXR1cmVzOltMZV19KSxufSkoKSx5YmU9e3Byb3ZpZGU6JG8sdXNlRXhpc3Rpbmc6Vm4oKCk9PmJiZSl9LGJiZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcnF7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQygkbyw1KSxDKFNvLDEwKSxDKGp1LDEwKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWxHcm91cCIsIiJdXSxpbnB1dHM6e25hbWU6WyJuZ01vZGVsR3JvdXAiLCJuYW1lIl19LGV4cG9ydEFzOlsibmdNb2RlbEdyb3VwIl0sZmVhdHVyZXM6W1J0KFt5YmVdKSxMZV19KSxufSkoKSx2YmU9e3Byb3ZpZGU6emEsdXNlRXhpc3Rpbmc6Vm4oKCk9PmlMKX0sUjk9UHJvbWlzZS5yZXNvbHZlKCksaUw9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHphe2NvbnN0cnVjdG9yKGUsaSxyLG8sYSxzKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWEsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1zLHRoaXMuY29udHJvbD1uZXcgcnYsdGhpcy5fcmVnaXN0ZXJlZD0hMSx0aGlzLnVwZGF0ZT1uZXcgTCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9zZXRWYWxpZGF0b3JzKGkpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhyKSx0aGlzLnZhbHVlQWNjZXNzb3I9bkwoMCxvKX1uZ09uQ2hhbmdlcyhlKXtpZih0aGlzLl9jaGVja0ZvckVycm9ycygpLCF0aGlzLl9yZWdpc3RlcmVkfHwibmFtZSJpbiBlKXtpZih0aGlzLl9yZWdpc3RlcmVkJiYodGhpcy5fY2hlY2tOYW1lKCksdGhpcy5mb3JtRGlyZWN0aXZlKSl7bGV0IGk9ZS5uYW1lLnByZXZpb3VzVmFsdWU7dGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2woe25hbWU6aSxwYXRoOnRoaXMuX2dldFBhdGgoaSl9KX10aGlzLl9zZXRVcENvbnRyb2woKX0iaXNEaXNhYmxlZCJpbiBlJiZ0aGlzLl91cGRhdGVEaXNhYmxlZChlKSx0TChlLHRoaXMudmlld01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9nZXRQYXRoKHRoaXMubmFtZSl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfV9zZXRVcENvbnRyb2woKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRoaXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2lzU3RhbmRhbG9uZSgpe3JldHVybiF0aGlzLl9wYXJlbnR8fCEoIXRoaXMub3B0aW9uc3x8IXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKX1fc2V0VXBTdGFuZGFsb25lKCl7bnYodGhpcy5jb250cm9sLHRoaXMsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoZSl7UjkudGhlbigoKT0+e3RoaXMuY29udHJvbC5zZXRWYWx1ZShlLHtlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6ITF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fdXBkYXRlRGlzYWJsZWQoZSl7bGV0IGk9ZS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxyPTAhPT1pJiZudyhpKTtSOS50aGVuKCgpPT57ciYmIXRoaXMuY29udHJvbC5kaXNhYmxlZD90aGlzLmNvbnRyb2wuZGlzYWJsZSgpOiFyJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMuY29udHJvbC5lbmFibGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fZ2V0UGF0aChlKXtyZXR1cm4gdGhpcy5fcGFyZW50P21FKGUsdGhpcy5fcGFyZW50KTpbZV19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoJG8sOSksQyhTbywxMCksQyhqdSwxMCksQyhIciwxMCksQyhGdCw4KSxDKHpmLDgpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdLG9wdGlvbnM6WyJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W1J0KFt2YmVdKSxMZSxHdF19KSxufSkoKSx4YmU9e3Byb3ZpZGU6SHIsdXNlRXhpc3Rpbmc6Vm4oKCk9PnJMKSxtdWx0aTohMH0sckw9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEhme3dyaXRlVmFsdWUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGU/PyIiKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9aT0+e2UoIiI9PWk/bnVsbDpwYXJzZUZsb2F0KGkpKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9Q24obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbUnQoW3hiZV0pLExlXX0pLG59KSgpLENiZT17cHJvdmlkZTpIcix1c2VFeGlzdGluZzpWbigoKT0+d2JlKSxtdWx0aTohMH0sb3E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe30pLG59KSgpLE1iZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fYWNjZXNzb3JzPVtdfWFkZChlLGkpe3RoaXMuX2FjY2Vzc29ycy5wdXNoKFtlLGldKX1yZW1vdmUoZSl7Zm9yKGxldCBpPXRoaXMuX2FjY2Vzc29ycy5sZW5ndGgtMTtpPj0wOy0taSlpZih0aGlzLl9hY2Nlc3NvcnNbaV1bMV09PT1lKXJldHVybiB2b2lkIHRoaXMuX2FjY2Vzc29ycy5zcGxpY2UoaSwxKX1zZWxlY3QoZSl7dGhpcy5fYWNjZXNzb3JzLmZvckVhY2goaT0+e3RoaXMuX2lzU2FtZUdyb3VwKGksZSkmJmlbMV0hPT1lJiZpWzFdLmZpcmVVbmNoZWNrKGUudmFsdWUpfSl9X2lzU2FtZUdyb3VwKGUsaSl7cmV0dXJuISFlWzBdLmNvbnRyb2wmJmVbMF0uX3BhcmVudD09PWkuX2NvbnRyb2wuX3BhcmVudCYmZVsxXS5uYW1lPT09aS5uYW1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjpvcX0pLG59KSgpLHdiZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSGZ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpKSx0aGlzLl9yZWdpc3RyeT1yLHRoaXMuX2luamVjdG9yPW8sdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITEsdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1waSh6Zix7b3B0aW9uYWw6ITB9KT8/aXZ9bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldCh6YSksdGhpcy5fY2hlY2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZShlKXt0aGlzLl9zdGF0ZT1lPT09dGhpcy52YWx1ZSx0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIix0aGlzLl9zdGF0ZSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9mbj1lLHRoaXMub25DaGFuZ2U9KCk9PntlKHRoaXMudmFsdWUpLHRoaXMuX3JlZ2lzdHJ5LnNlbGVjdCh0aGlzKX19c2V0RGlzYWJsZWRTdGF0ZShlKXsodGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWR8fGV8fCJ3aGVuRGlzYWJsZWRGb3JMZWdhY3lDb2RlIj09PXRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpJiZ0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsZSksdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITB9ZmlyZVVuY2hlY2soZSl7dGhpcy53cml0ZVZhbHVlKGUpfV9jaGVja05hbWUoKXshdGhpcy5uYW1lJiZ0aGlzLmZvcm1Db250cm9sTmFtZSYmKHRoaXMubmFtZT10aGlzLmZvcm1Db250cm9sTmFtZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoZGMpLEMoYmUpLEMoTWJlKSxDKGJpKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZEKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LGZlYXR1cmVzOltSdChbQ2JlXSksTGVdfSksbn0pKCksU2JlPXtwcm92aWRlOkhyLHVzZUV4aXN0aW5nOlZuKCgpPT5FYmUpLG11bHRpOiEwfSxFYmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEhme3dyaXRlVmFsdWUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLHBhcnNlRmxvYXQoZSkpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57ZSgiIj09aT9udWxsOnBhcnNlRmxvYXQoaSkpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYW5nZSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGZlYXR1cmVzOltSdChbU2JlXSksTGVdfSksbn0pKCksb0w9bmV3IGllKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLFRiZT17cHJvdmlkZTp6YSx1c2VFeGlzdGluZzpWbigoKT0+YUwpfSxhTD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgemF7c2V0IGlzRGlzYWJsZWQoZSl7fWNvbnN0cnVjdG9yKGUsaSxyLG8sYSl7c3VwZXIoKSx0aGlzLl9uZ01vZGVsV2FybmluZ0NvbmZpZz1vLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9YSx0aGlzLnVwZGF0ZT1uZXcgTCx0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSksdGhpcy52YWx1ZUFjY2Vzc29yPW5MKDAscil9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5faXNDb250cm9sQ2hhbmdlZChlKSl7bGV0IGk9ZS5mb3JtLnByZXZpb3VzVmFsdWU7aSYmY0UoaSx0aGlzLCExKSxudih0aGlzLmZvcm0sdGhpcyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSx0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9dEwoZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLmZvcm0uc2V0VmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm0mJmNFKHRoaXMuZm9ybSx0aGlzLCExKX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX12aWV3VG9Nb2RlbFVwZGF0ZShlKXt0aGlzLnZpZXdNb2RlbD1lLHRoaXMudXBkYXRlLmVtaXQoZSl9X2lzQ29udHJvbENoYW5nZWQoZSl7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoImZvcm0iKX19cmV0dXJuIG4uX25nTW9kZWxXYXJuaW5nU2VudE9uY2U9ITEsbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFNvLDEwKSxDKGp1LDEwKSxDKEhyLDEwKSxDKG9MLDgpLEMoemYsOCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e2Zvcm06WyJmb3JtQ29udHJvbCIsImZvcm0iXSxpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbUnQoW1RiZV0pLExlLEd0XX0pLG59KSgpLERiZT17cHJvdmlkZTokbyx1c2VFeGlzdGluZzpWbigoKT0+UmcpfSxSZz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgJG97Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1yLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgTCx0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhpKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpLHRoaXMuX29sZEZvcm09dGhpcy5mb3JtKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmKHVFKHRoaXMuZm9ybSx0aGlzKSx0aGlzLmZvcm0uX29uQ29sbGVjdGlvbkNoYW5nZT09PXRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSYmdGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2woZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO3JldHVybiBudihpLGUsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmRpcmVjdGl2ZXMucHVzaChlKSxpfWdldENvbnRyb2woZSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoZS5wYXRoKX1yZW1vdmVDb250cm9sKGUpe2NFKGUuY29udHJvbHx8bnVsbCxlLCExKSxmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5kZXhPZih0KTtlPi0xJiZuLnNwbGljZShlLDEpfSh0aGlzLmRpcmVjdGl2ZXMsZSl9YWRkRm9ybUdyb3VwKGUpe3RoaXMuX3NldFVwRm9ybUNvbnRhaW5lcihlKX1yZW1vdmVGb3JtR3JvdXAoZSl7dGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIoZSl9Z2V0Rm9ybUdyb3VwKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9YWRkRm9ybUFycmF5KGUpe3RoaXMuX3NldFVwRm9ybUNvbnRhaW5lcihlKX1yZW1vdmVGb3JtQXJyYXkoZSl7dGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIoZSl9Z2V0Rm9ybUFycmF5KGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9dXBkYXRlTW9kZWwoZSxpKXt0aGlzLmZvcm0uZ2V0KGUucGF0aCkuc2V0VmFsdWUoaSl9b25TdWJtaXQoZSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGlxKHRoaXMuZm9ybSx0aGlzLmRpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdChlKSwiZGlhbG9nIj09PWU/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShlKXt0aGlzLmZvcm0ucmVzZXQoZSksdGhpcy5zdWJtaXR0ZWQ9ITF9X3VwZGF0ZURvbVZhbHVlKCl7dGhpcy5kaXJlY3RpdmVzLmZvckVhY2goZT0+e2xldCBpPWUuY29udHJvbCxyPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTtpIT09ciYmKGNFKGl8fG51bGwsZSksKG49Pm4gaW5zdGFuY2VvZiBydikocikmJihudihyLGUsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksZS5jb250cm9sPXIpKX0pLHRoaXMuZm9ybS5fdXBkYXRlVHJlZVZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fc2V0VXBGb3JtQ29udGFpbmVyKGUpe2xldCBpPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTtucShpLGUpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpe2lmKHRoaXMuZm9ybSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO2kmJmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHVFKG4sdCl9KGksZSkmJmkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9fV91cGRhdGVSZWdpc3RyYXRpb25zKCl7dGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLHRoaXMuX29sZEZvcm0mJnRoaXMuX29sZEZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSl9X3VwZGF0ZVZhbGlkYXRvcnMoKXtlTCh0aGlzLmZvcm0sdGhpcyksdGhpcy5fb2xkRm9ybSYmdUUodGhpcy5fb2xkRm9ybSx0aGlzKX1fY2hlY2tGb3JtUHJlc2VudCgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhTbywxMCksQyhqdSwxMCksQyh6Ziw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoInN1Ym1pdCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdWJtaXQobyl9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNldCgpfSl9LGlucHV0czp7Zm9ybTpbImZvcm1Hcm91cCIsImZvcm0iXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbUnQoW0RiZV0pLExlLEd0XX0pLG59KSgpLEliZT17cHJvdmlkZTokbyx1c2VFeGlzdGluZzpWbigoKT0+YXEpfSxhcT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcnF7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe2xxKHRoaXMuX3BhcmVudCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoJG8sMTMpLEMoU28sMTApLEMoanUsMTApKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtR3JvdXBOYW1lIiwibmFtZSJdfSxmZWF0dXJlczpbUnQoW0liZV0pLExlXX0pLG59KSgpLEFiZT17cHJvdmlkZTokbyx1c2VFeGlzdGluZzpWbigoKT0+c3EpfSxzcT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgJG97Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUFycmF5KHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUFycmF5KHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtQXJyYXkodGhpcyl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbUUobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfV9jaGVja1BhcmVudFR5cGUoKXtscSh0aGlzLl9wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKCRvLDEzKSxDKFNvLDEwKSxDKGp1LDEwKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6W1J0KFtBYmVdKSxMZV19KSxufSkoKTtmdW5jdGlvbiBscShuKXtyZXR1cm4hKG4gaW5zdGFuY2VvZiBhcXx8biBpbnN0YW5jZW9mIFJnfHxuIGluc3RhbmNlb2Ygc3EpfXZhciBSYmU9e3Byb3ZpZGU6emEsdXNlRXhpc3Rpbmc6Vm4oKCk9PmtiZSl9LGtiZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgemF7c2V0IGlzRGlzYWJsZWQoZSl7fWNvbnN0cnVjdG9yKGUsaSxyLG8sYSl7c3VwZXIoKSx0aGlzLl9uZ01vZGVsV2FybmluZ0NvbmZpZz1hLHRoaXMuX2FkZGVkPSExLHRoaXMudXBkYXRlPW5ldyBMLHRoaXMuX25nTW9kZWxXYXJuaW5nU2VudD0hMSx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9zZXRWYWxpZGF0b3JzKGkpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhyKSx0aGlzLnZhbHVlQWNjZXNzb3I9bkwoMCxvKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9hZGRlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksdEwoZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfWdldCBwYXRoKCl7cmV0dXJuIG1FKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7fV9zZXRVcENvbnRyb2woKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmNvbnRyb2w9dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fYWRkZWQ9ITB9fXJldHVybiBuLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQygkbywxMyksQyhTbywxMCksQyhqdSwxMCksQyhIciwxMCksQyhvTCw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtQ29udHJvbE5hbWUiLCJuYW1lIl0saXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOltSdChbUmJlXSksTGUsR3RdfSksbn0pKCksUGJlPXtwcm92aWRlOkhyLHVzZUV4aXN0aW5nOlZuKCgpPT5kcSksbXVsdGk6ITB9O2Z1bmN0aW9uIGNxKG4sdCl7cmV0dXJuIG51bGw9PW4/YCR7dH1gOih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0PSJPYmplY3QiKSxgJHtufTogJHt0fWAuc2xpY2UoMCw1MCkpfXZhciBkcT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSGZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZTtsZXQgcj1jcSh0aGlzLl9nZXRPcHRpb25JZChlKSxlKTt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIscil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGkpLGUodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGxldCBpIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChpKSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKTplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PUNuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZEKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W1J0KFtQYmVdKSxMZV19KSxufSkoKSx1cT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9aSx0aGlzLl9zZWxlY3Q9cix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoZSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsZSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKGNxKHRoaXMuaWQsZSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoZGMpLEMoZHEsOSkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpLEZiZT17cHJvdmlkZTpIcix1c2VFeGlzdGluZzpWbigoKT0+cHEpLG11bHRpOiEwfTtmdW5jdGlvbiBrOShuLHQpe3JldHVybiBudWxsPT1uP2Ake3R9YDooInN0cmluZyI9PXR5cGVvZiB0JiYodD1gJyR7dH0nYCksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodD0iT2JqZWN0IiksYCR7bn06ICR7dH1gLnNsaWNlKDAsNTApKX12YXIgcHE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEhme2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGUpe3RoaXMuX2NvbXBhcmVXaXRoPWV9d3JpdGVWYWx1ZShlKXtsZXQgaTtpZih0aGlzLnZhbHVlPWUsQXJyYXkuaXNBcnJheShlKSl7bGV0IHI9ZS5tYXAobz0+dGhpcy5fZ2V0T3B0aW9uSWQobykpO2k9KG8sYSk9PntvLl9zZXRTZWxlY3RlZChyLmluZGV4T2YoYS50b1N0cmluZygpKT4tMSl9fWVsc2UgaT0ocixvKT0+e3IuX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goaSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntsZXQgcj1bXSxvPWkuc2VsZWN0ZWRPcHRpb25zO2lmKHZvaWQgMCE9PW8pe2xldCBhPW87Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBjPXRoaXMuX2dldE9wdGlvblZhbHVlKGFbc10udmFsdWUpO3IucHVzaChjKX19ZWxzZXtsZXQgYT1pLm9wdGlvbnM7Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBsPWFbc107aWYobC5zZWxlY3RlZCl7bGV0IGM9dGhpcy5fZ2V0T3B0aW9uVmFsdWUobC52YWx1ZSk7ci5wdXNoKGMpfX19dGhpcy52YWx1ZT1yLGUocil9fV9yZWdpc3Rlck9wdGlvbihlKXtsZXQgaT0odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5zZXQoaSxlKSxpfV9nZXRPcHRpb25JZChlKXtmb3IobGV0IGkgb2YgQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25NYXAua2V5cygpKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGkpLl92YWx1ZSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKS5fdmFsdWU6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltSdChbRmJlXSksTGVdfSksbn0pKCksZnE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPWksdGhpcy5fc2VsZWN0PXIsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShlKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShrOSh0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShrOSh0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKTp0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSl9X3NldEVsZW1lbnRWYWx1ZShlKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIixlKX1fc2V0U2VsZWN0ZWQoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJzZWxlY3RlZCIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoZGMpLEMocHEsOSkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpO2Z1bmN0aW9uIG1xKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlSW50KG4sMTApfWZ1bmN0aW9uIGhxKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlRmxvYXQobil9dmFyIFVmPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9ckV9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gZSl7bGV0IGk9dGhpcy5ub3JtYWxpemVJbnB1dChlW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9dGhpcy5lbmFibGVkKGkpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGkpOnJFLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZShlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGUpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1lbmFibGVkKGUpe3JldHVybiBudWxsIT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixmZWF0dXJlczpbR3RdfSksbn0pKCksTmJlPXtwcm92aWRlOlNvLHVzZUV4aXN0aW5nOlZuKCgpPT5CYmUpLG11bHRpOiEwfSxCYmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFVme2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4Iix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9PmhxKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9Pkw5KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PUNuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWF4IiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJlBlKCJtYXgiLGkuX2VuYWJsZWQ/aS5tYXg6bnVsbCl9LGlucHV0czp7bWF4OiJtYXgifSxmZWF0dXJlczpbUnQoW05iZV0pLExlXX0pLG59KSgpLFZiZT17cHJvdmlkZTpTbyx1c2VFeGlzdGluZzpWbigoKT0+SGJlKSxtdWx0aTohMH0sSGJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBVZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbiIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5ocShlKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5GOShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZQZSgibWluIixpLl9lbmFibGVkP2kubWluOm51bGwpfSxpbnB1dHM6e21pbjoibWluIn0sZmVhdHVyZXM6W1J0KFtWYmVdKSxMZV19KSxufSkoKSx6YmU9e3Byb3ZpZGU6U28sdXNlRXhpc3Rpbmc6Vm4oKCk9PmdxKSxtdWx0aTohMH0sVWJlPXtwcm92aWRlOlNvLHVzZUV4aXN0aW5nOlZuKCgpPT5zTCksbXVsdGk6ITB9LGdxPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBVZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InJlcXVpcmVkIix0aGlzLm5vcm1hbGl6ZUlucHV0PW53LHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9Pk45fWVuYWJsZWQoZSl7cmV0dXJuIGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9Q24obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmUGUoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LGZlYXR1cmVzOltSdChbemJlXSksTGVdfSksbn0pKCksc0w9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGdxe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5COX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZQZSgicmVxdWlyZWQiLGkuX2VuYWJsZWQ/IiI6bnVsbCl9LGZlYXR1cmVzOltSdChbVWJlXSksTGVdfSksbn0pKCksamJlPXtwcm92aWRlOlNvLHVzZUV4aXN0aW5nOlZuKCgpPT5HYmUpLG11bHRpOiEwfSxHYmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFVme2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0iZW1haWwiLHRoaXMubm9ybWFsaXplSW5wdXQ9bncsdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+Vjl9ZW5hYmxlZChlKXtyZXR1cm4gZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwiZW1haWwiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwiZW1haWwiLCIiLCJuZ01vZGVsIiwiIl1dLGlucHV0czp7ZW1haWw6ImVtYWlsIn0sZmVhdHVyZXM6W1J0KFtqYmVdKSxMZV19KSxufSkoKSxXYmU9e3Byb3ZpZGU6U28sdXNlRXhpc3Rpbmc6Vm4oKCk9PnFiZSksbXVsdGk6ITB9LHFiZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVWZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJtaW5sZW5ndGgiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+bXEoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+SDkoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9Q24obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJtaW5sZW5ndGgiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmUGUoIm1pbmxlbmd0aCIsaS5fZW5hYmxlZD9pLm1pbmxlbmd0aDpudWxsKX0saW5wdXRzOnttaW5sZW5ndGg6Im1pbmxlbmd0aCJ9LGZlYXR1cmVzOltSdChbV2JlXSksTGVdfSksbn0pKCksWWJlPXtwcm92aWRlOlNvLHVzZUV4aXN0aW5nOlZuKCgpPT5YYmUpLG11bHRpOiEwfSxYYmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFVme2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4bGVuZ3RoIix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9Pm1xKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9Pno5KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PUNuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJlBlKCJtYXhsZW5ndGgiLGkuX2VuYWJsZWQ/aS5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxmZWF0dXJlczpbUnQoW1liZV0pLExlXX0pLG59KSgpLFFiZT17cHJvdmlkZTpTbyx1c2VFeGlzdGluZzpWbigoKT0+WmJlKSxtdWx0aTohMH0sWmJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBVZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InBhdHRlcm4iLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+ZSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5VOShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsInBhdHRlcm4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZQZSgicGF0dGVybiIsaS5fZW5hYmxlZD9pLnBhdHRlcm46bnVsbCl9LGlucHV0czp7cGF0dGVybjoicGF0dGVybiJ9LGZlYXR1cmVzOltSdChbUWJlXSksTGVdfSksbn0pKCksX3E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W29xXX0pLG59KSgpLGtnPShuZXcgaGwoIjE1LjIuOSIpLCgoKT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTp6Zix1c2VWYWx1ZTplLmNhbGxTZXREaXNhYmxlZFN0YXRlPz9pdn1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W19xXX0pLG59KSgpKSx5cT0oKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6b0wsdXNlVmFsdWU6ZS53YXJuT25OZ01vZGVsV2l0aEZvcm1Db250cm9sPz8iYWx3YXlzIn0se3Byb3ZpZGU6emYsdXNlVmFsdWU6ZS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/aXZ9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltfcV19KSxufSkoKSxldmU9WyJ0cmlnZ2VyIl0sdHZlPVsicGFuZWwiXSxicT0oamkoInRyYW5zZm9ybVBhbmVsV3JhcCIsW1duKCIqID0+IHZvaWQiLGRkKCJAdHJhbnNmb3JtUGFuZWwiLFtjZCgpXSx7b3B0aW9uYWw6ITB9KSldKSxqaSgidHJhbnNmb3JtUGFuZWwiLFtKbigidm9pZCIsQnQoe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDEsIDAuOCkifSkpLFduKCJ2b2lkID0+IHNob3dpbmciLEtuKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsQnQoe29wYWNpdHk6MSx0cmFuc2Zvcm06InNjYWxlKDEsIDEpIn0pKSksV24oIiogPT4gdm9pZCIsS24oIjEwMG1zIGxpbmVhciIsQnQoe29wYWNpdHk6MH0pKSldKSwwKSx2cT1uZXcgaWUoIm1hdC1zZWxlY3Qtc2Nyb2xsLXN0cmF0ZWd5IiksaXZlPW5ldyBpZSgiTUFUX1NFTEVDVF9DT05GSUciKSx4cT17cHJvdmlkZTp2cSxkZXBzOltPaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LENxPW5ldyBpZSgiTWF0U2VsZWN0VHJpZ2dlciIpLHJ2ZT1Rbyh2ZChLcihVYihjbGFzc3tjb25zdHJ1Y3RvcihuLHQsZSxpLHIpe3RoaXMuX2VsZW1lbnRSZWY9bix0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9dCx0aGlzLl9wYXJlbnRGb3JtPWUsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPWksdGhpcy5uZ0NvbnRyb2w9cix0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgQWV9fSkpKSksTXE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJ2ZXtnZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9mb2N1c2VkfHx0aGlzLl9wYW5lbE9wZW59Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLl9wbGFjZWhvbGRlcj1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoVmwucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9VXQoZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9VXQoZSl9Z2V0IGRpc2FibGVPcHRpb25DZW50ZXJpbmcoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZ31zZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyhlKXt0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPVV0KGUpfWdldCBjb21wYXJlV2l0aCgpe3JldHVybiB0aGlzLl9jb21wYXJlV2l0aH1zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZSx0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7dGhpcy5fYXNzaWduVmFsdWUoZSkmJnRoaXMuX29uQ2hhbmdlKGUpfWdldCB0eXBlYWhlYWREZWJvdW5jZUludGVydmFsKCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWx9c2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoZSl7dGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbD1EaShlKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV8fHRoaXMuX3VpZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5KXtzdXBlcihhLG8sbCxjLHUpLHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1zLHRoaXMuX3BhcmVudEZvcm1GaWVsZD1kLHRoaXMuX2xpdmVBbm5vdW5jZXI9bSx0aGlzLl9kZWZhdWx0T3B0aW9ucz15LHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0oTSx2KT0+TT09PXYsdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrYnErKyx0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLl9kZXN0cm95PW5ldyBBZSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl92YWx1ZUlkPSJtYXQtc2VsZWN0LXZhbHVlLSIrYnErKyx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW09bmV3IEFlLHRoaXMuX292ZXJsYXlQYW5lbENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5fZm9jdXNlZD0hMSx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtc2VsZWN0Iix0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPz8hMSx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXM9S2EoKCk9PntsZXQgTT10aGlzLm9wdGlvbnM7cmV0dXJuIE0/TS5jaGFuZ2VzLnBpcGUoTm4oTSkseWkoKCk9PmNuKC4uLk0ubWFwKHY9PnYub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKHp0KDEpLHlpKCgpPT50aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpKX0pLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBMLHRoaXMuX29wZW5lZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKFZlKE09Pk0pLFUoKCk9Pnt9KSksdGhpcy5fY2xvc2VkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoVmUoTT0+IU0pLFUoKCk9Pnt9KSksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEwsdGhpcy52YWx1ZUNoYW5nZT1uZXcgTCx0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyksbnVsbCE9eT8udHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9eS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9Zix0aGlzLl9zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHApfHwwLHRoaXMuaWQ9dGhpcy5pZH1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyB4Zyh0aGlzLm11bHRpcGxlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksdGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nU3RyZWFtLnBpcGUodWkoKSxvdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT50aGlzLl9wYW5lbERvbmVBbmltYXRpbmcodGhpcy5wYW5lbE9wZW4pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9pbml0S2V5TWFuYWdlcigpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShvdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGU9PntlLmFkZGVkLmZvckVhY2goaT0+aS5zZWxlY3QoKSksZS5yZW1vdmVkLmZvckVhY2goaT0+aS5kZXNlbGVjdCgpKX0pLHRoaXMub3B0aW9ucy5jaGFuZ2VzLnBpcGUoTm4obnVsbCksb3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Jlc2V0T3B0aW9ucygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX0pfW5nRG9DaGVjaygpe2xldCBlPXRoaXMuX2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpLGk9dGhpcy5uZ0NvbnRyb2w7aWYoZSE9PXRoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeSl7bGV0IHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeT1lLGU/ci5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZSk6ci5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpfWkmJih0aGlzLl9wcmV2aW91c0NvbnRyb2whPT1pLmNvbnRyb2wmJih2b2lkIDAhPT10aGlzLl9wcmV2aW91c0NvbnRyb2wmJm51bGwhPT1pLmRpc2FibGVkJiZpLmRpc2FibGVkIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuZGlzYWJsZWQ9aS5kaXNhYmxlZCksdGhpcy5fcHJldmlvdXNDb250cm9sPWkuY29udHJvbCksdGhpcy51cGRhdGVFcnJvclN0YXRlKCkpfW5nT25DaGFuZ2VzKGUpeyhlLmRpc2FibGVkfHxlLnVzZXJBcmlhRGVzY3JpYmVkQnkpJiZ0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksZS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fZGVzdHJveS5uZXh0KCksdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpLHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9dG9nZ2xlKCl7dGhpcy5wYW5lbE9wZW4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfW9wZW4oKXt0aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wYW5lbE9wZW49ITAsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKG51bGwpLHRoaXMuX2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Y2xvc2UoKXt0aGlzLl9wYW5lbE9wZW4mJih0aGlzLl9wYW5lbE9wZW49ITEsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX29uVG91Y2hlZCgpKX13cml0ZVZhbHVlKGUpe3RoaXMuX2Fzc2lnblZhbHVlKGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9wYW5lbE9wZW59Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkfHxbXTp0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF19Z2V0IHRyaWdnZXJWYWx1ZSgpe2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI7aWYodGhpcy5fbXVsdGlwbGUpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLm1hcChpPT5pLnZpZXdWYWx1ZSk7cmV0dXJuIHRoaXMuX2lzUnRsKCkmJmUucmV2ZXJzZSgpLGUuam9pbigiLCAiKX1yZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0udmlld1ZhbHVlfV9pc1J0bCgpe3JldHVybiEhdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZX1faGFuZGxlS2V5ZG93bihlKXt0aGlzLmRpc2FibGVkfHwodGhpcy5wYW5lbE9wZW4/dGhpcy5faGFuZGxlT3BlbktleWRvd24oZSk6dGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihlKSl9X2hhbmRsZUNsb3NlZEtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9NDA9PT1pfHwzOD09PWl8fDM3PT09aXx8Mzk9PT1pLG89MTM9PT1pfHwzMj09PWksYT10aGlzLl9rZXlNYW5hZ2VyO2lmKCFhLmlzVHlwaW5nKCkmJm8mJiF5cihlKXx8KHRoaXMubXVsdGlwbGV8fGUuYWx0S2V5KSYmcillLnByZXZlbnREZWZhdWx0KCksdGhpcy5vcGVuKCk7ZWxzZSBpZighdGhpcy5tdWx0aXBsZSl7bGV0IHM9dGhpcy5zZWxlY3RlZDthLm9uS2V5ZG93bihlKTtsZXQgbD10aGlzLnNlbGVjdGVkO2wmJnMhPT1sJiZ0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKGwudmlld1ZhbHVlLDFlNCl9fV9oYW5kbGVPcGVuS2V5ZG93bihlKXtsZXQgaT10aGlzLl9rZXlNYW5hZ2VyLHI9ZS5rZXlDb2RlLG89NDA9PT1yfHwzOD09PXIsYT1pLmlzVHlwaW5nKCk7aWYobyYmZS5hbHRLZXkpZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKTtlbHNlIGlmKGF8fDEzIT09ciYmMzIhPT1yfHwhaS5hY3RpdmVJdGVtfHx5cihlKSlpZighYSYmdGhpcy5fbXVsdGlwbGUmJjY1PT09ciYmZS5jdHJsS2V5KXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IHM9dGhpcy5vcHRpb25zLnNvbWUobD0+IWwuZGlzYWJsZWQmJiFsLnNlbGVjdGVkKTt0aGlzLm9wdGlvbnMuZm9yRWFjaChsPT57bC5kaXNhYmxlZHx8KHM/bC5zZWxlY3QoKTpsLmRlc2VsZWN0KCkpfSl9ZWxzZXtsZXQgcz1pLmFjdGl2ZUl0ZW1JbmRleDtpLm9uS2V5ZG93bihlKSx0aGlzLl9tdWx0aXBsZSYmbyYmZS5zaGlmdEtleSYmaS5hY3RpdmVJdGVtJiZpLmFjdGl2ZUl0ZW1JbmRleCE9PXMmJmkuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1lbHNlIGUucHJldmVudERlZmF1bHQoKSxpLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9X29uRm9jdXMoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fZm9jdXNlZD0hMCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkJsdXIoKXt0aGlzLl9mb2N1c2VkPSExLHRoaXMuX2tleU1hbmFnZXI/LmNhbmNlbFR5cGVhaGVhZCgpLCF0aGlzLmRpc2FibGVkJiYhdGhpcy5wYW5lbE9wZW4mJih0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkF0dGFjaGVkKCl7dGhpcy5fb3ZlcmxheURpci5wb3NpdGlvbkNoYW5nZS5waXBlKHp0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fcG9zaXRpb25pbmdTZXR0bGVkKCl9KX1fZ2V0UGFuZWxUaGVtZSgpe3JldHVybiB0aGlzLl9wYXJlbnRGb3JtRmllbGQ/YG1hdC0ke3RoaXMuX3BhcmVudEZvcm1GaWVsZC5jb2xvcn1gOiIifWdldCBlbXB0eSgpe3JldHVybiF0aGlzLl9zZWxlY3Rpb25Nb2RlbHx8dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpfV9pbml0aWFsaXplU2VsZWN0aW9uKCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMubmdDb250cm9sJiYodGhpcy5fdmFsdWU9dGhpcy5uZ0NvbnRyb2wudmFsdWUpLHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5fdmFsdWUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpe2lmKHRoaXMub3B0aW9ucy5mb3JFYWNoKGk9Pmkuc2V0SW5hY3RpdmVTdHlsZXMoKSksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLm11bHRpcGxlJiZlKUFycmF5LmlzQXJyYXkoZSksZS5mb3JFYWNoKGk9PnRoaXMuX3NlbGVjdE9wdGlvbkJ5VmFsdWUoaSkpLHRoaXMuX3NvcnRWYWx1ZXMoKTtlbHNle2xldCBpPXRoaXMuX3NlbGVjdE9wdGlvbkJ5VmFsdWUoZSk7aT90aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oaSk6dGhpcy5wYW5lbE9wZW58fHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSgtMSl9dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X3NlbGVjdE9wdGlvbkJ5VmFsdWUoZSl7bGV0IGk9dGhpcy5vcHRpb25zLmZpbmQocj0+e2lmKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQocikpcmV0dXJuITE7dHJ5e3JldHVybiBudWxsIT1yLnZhbHVlJiZ0aGlzLl9jb21wYXJlV2l0aChyLnZhbHVlLGUpfWNhdGNoe3JldHVybiExfX0pO3JldHVybiBpJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaSksaX1fYXNzaWduVmFsdWUoZSl7cmV0dXJuISEoZSE9PXRoaXMuX3ZhbHVlfHx0aGlzLl9tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShlKSkmJih0aGlzLm9wdGlvbnMmJnRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy5fdmFsdWU9ZSwhMCl9X2luaXRLZXlNYW5hZ2VyKCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgaGcodGhpcy5vcHRpb25zKS53aXRoVHlwZUFoZWFkKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKCkud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9pc1J0bCgpPyJydGwiOiJsdHIiKS53aXRoSG9tZUFuZEVuZCgpLndpdGhQYWdlVXBEb3duKCkud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWyJzaGlmdEtleSJdKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmKCF0aGlzLm11bHRpcGxlJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLmZvY3VzKCksdGhpcy5jbG9zZSgpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX3BhbmVsT3BlbiYmdGhpcy5wYW5lbD90aGlzLl9zY3JvbGxPcHRpb25JbnRvVmlldyh0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCk6IXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfSl9X3Jlc2V0T3B0aW9ucygpe2xldCBlPWNuKHRoaXMub3B0aW9ucy5jaGFuZ2VzLHRoaXMuX2Rlc3Ryb3kpO3RoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcy5waXBlKG90KGUpKS5zdWJzY3JpYmUoaT0+e3RoaXMuX29uU2VsZWN0KGkuc291cmNlLGkuaXNVc2VySW5wdXQpLGkuaXNVc2VySW5wdXQmJiF0aGlzLm11bHRpcGxlJiZ0aGlzLl9wYW5lbE9wZW4mJih0aGlzLmNsb3NlKCksdGhpcy5mb2N1cygpKX0pLGNuKC4uLnRoaXMub3B0aW9ucy5tYXAoaT0+aS5fc3RhdGVDaGFuZ2VzKSkucGlwZShvdChlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9vblNlbGVjdChlLGkpe2xldCByPXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoZSk7bnVsbCE9ZS52YWx1ZXx8dGhpcy5fbXVsdGlwbGU/KHIhPT1lLnNlbGVjdGVkJiYoZS5zZWxlY3RlZD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZSkpLGkmJnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShlKSx0aGlzLm11bHRpcGxlJiYodGhpcy5fc29ydFZhbHVlcygpLGkmJnRoaXMuZm9jdXMoKSkpOihlLmRlc2VsZWN0KCksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSxudWxsIT10aGlzLnZhbHVlJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKGUudmFsdWUpKSxyIT09dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKSYmdGhpcy5fcHJvcGFnYXRlQ2hhbmdlcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1fc29ydFZhbHVlcygpe2lmKHRoaXMubXVsdGlwbGUpe2xldCBlPXRoaXMub3B0aW9ucy50b0FycmF5KCk7dGhpcy5fc2VsZWN0aW9uTW9kZWwuc29ydCgoaSxyKT0+dGhpcy5zb3J0Q29tcGFyYXRvcj90aGlzLnNvcnRDb21wYXJhdG9yKGkscixlKTplLmluZGV4T2YoaSktZS5pbmRleE9mKHIpKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9fV9wcm9wYWdhdGVDaGFuZ2VzKGUpe2xldCBpPW51bGw7aT10aGlzLm11bHRpcGxlP3RoaXMuc2VsZWN0ZWQubWFwKHI9PnIudmFsdWUpOnRoaXMuc2VsZWN0ZWQ/dGhpcy5zZWxlY3RlZC52YWx1ZTplLHRoaXMuX3ZhbHVlPWksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGkpLHRoaXMuX29uQ2hhbmdlKGkpLHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5fZ2V0Q2hhbmdlRXZlbnQoaSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9oaWdobGlnaHRDb3JyZWN0T3B0aW9uKCl7dGhpcy5fa2V5TWFuYWdlciYmKHRoaXMuZW1wdHk/dGhpcy5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0pKX1fY2FuT3Blbigpe3JldHVybiF0aGlzLl9wYW5lbE9wZW4mJiF0aGlzLmRpc2FibGVkJiZ0aGlzLm9wdGlvbnM/Lmxlbmd0aD4wfWZvY3VzKGUpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpe2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2xldCBlPXRoaXMuX3BhcmVudEZvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpO3JldHVybiB0aGlzLmFyaWFMYWJlbGxlZGJ5PyhlP2UrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OmV9X2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCl7cmV0dXJuIHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLmlkOm51bGx9X2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpe2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2xldCBlPXRoaXMuX3BhcmVudEZvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpLGk9KGU/ZSsiICI6IiIpK3RoaXMuX3ZhbHVlSWQ7cmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkYnkmJihpKz0iICIrdGhpcy5hcmlhTGFiZWxsZWRieSksaX1fcGFuZWxEb25lQW5pbWF0aW5nKGUpe3RoaXMub3BlbmVkQ2hhbmdlLmVtaXQoZSl9c2V0RGVzY3JpYmVkQnlJZHMoZSl7ZS5sZW5ndGg/dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZS5qb2luKCIgIikpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiKX1vbkNvbnRhaW5lckNsaWNrKCl7dGhpcy5mb2N1cygpLHRoaXMub3BlbigpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX3BhbmVsT3Blbnx8IXRoaXMuZW1wdHl8fHRoaXMuX2ZvY3VzZWQmJiEhdGhpcy5fcGxhY2Vob2xkZXJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoS28pLEMoRnQpLEMoYXQpLEMoSWYpLEMoYmUpLEMoSGksOCksQyhBZyw4KSxDKFJnLDgpLEMoQmwsOCksQyh6YSwxMCksVnIoInRhYmluZGV4IiksQyh2cSksQyh5ZyksQyhpdmUsOCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFllKGV2ZSw1KSxZZSh0dmUsNSksWWUoenUsNSkpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkudHJpZ2dlcj1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS5wYW5lbD1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS5fb3ZlcmxheURpcj1yLmZpcnN0KX19LGlucHV0czp7dXNlckFyaWFEZXNjcmliZWRCeTpbImFyaWEtZGVzY3JpYmVkYnkiLCJ1c2VyQXJpYURlc2NyaWJlZEJ5Il0scGFuZWxDbGFzczoicGFuZWxDbGFzcyIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixyZXF1aXJlZDoicmVxdWlyZWQiLG11bHRpcGxlOiJtdWx0aXBsZSIsZGlzYWJsZU9wdGlvbkNlbnRlcmluZzoiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsY29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIix2YWx1ZToidmFsdWUiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sZXJyb3JTdGF0ZU1hdGNoZXI6ImVycm9yU3RhdGVNYXRjaGVyIix0eXBlYWhlYWREZWJvdW5jZUludGVydmFsOiJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIixzb3J0Q29tcGFyYXRvcjoic29ydENvbXBhcmF0b3IiLGlkOiJpZCJ9LG91dHB1dHM6e29wZW5lZENoYW5nZToib3BlbmVkQ2hhbmdlIixfb3BlbmVkU3RyZWFtOiJvcGVuZWQiLF9jbG9zZWRTdHJlYW06ImNsb3NlZCIsc2VsZWN0aW9uQ2hhbmdlOiJzZWxlY3Rpb25DaGFuZ2UiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltMZSxHdF19KSxufSkoKTtmdW5jdGlvbiBvdmUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDgpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTtiKDEpLHV0KGUucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBhdmUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDEyKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpO2IoMSksdXQoZS50cmlnZ2VyVmFsdWUpfX1mdW5jdGlvbiBzdmUobix0KXsxJm4mJlh0KDAsMCxbIipuZ1N3aXRjaENhc2UiLCJ0cnVlIl0pfWZ1bmN0aW9uIGx2ZShuLHQpezEmbiYmKGgoMCwic3BhbiIsOSksUygxLGF2ZSwyLDEsInNwYW4iLDEwKSxTKDIsc3ZlLDEsMCwibmctY29udGVudCIsMTEpLGcoKSksMiZuJiYoXygibmdTd2l0Y2giLCEhdygpLmN1c3RvbVRyaWdnZXIpLGIoMiksXygibmdTd2l0Y2hDYXNlIiwhMCkpfWZ1bmN0aW9uIGN2ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMTMpKDEsImRpdiIsMTQsMTUpLEQoIkB0cmFuc2Zvcm1QYW5lbC5kb25lIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5fcGFuZWxEb25lQW5pbWF0aW5nU3RyZWFtLm5leHQoci50b1N0YXRlKSl9KSgia2V5ZG93biIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuX2hhbmRsZUtleWRvd24ocikpfSksWHQoMywxKSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtfKCJAdHJhbnNmb3JtUGFuZWxXcmFwIix2b2lkIDApLGIoMSksRGgoIm1hdC1zZWxlY3QtcGFuZWwgIixlLl9nZXRQYW5lbFRoZW1lKCksIiIpLE10KCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl90cmFuc2Zvcm1PcmlnaW4pKCJmb250LXNpemUiLGUuX3RyaWdnZXJGb250U2l6ZSwicHgiKSxfKCJuZ0NsYXNzIixlLnBhbmVsQ2xhc3MpKCJAdHJhbnNmb3JtUGFuZWwiLGUubXVsdGlwbGU/InNob3dpbmctbXVsdGlwbGUiOiJzaG93aW5nIiksUGUoImlkIixlLmlkKyItcGFuZWwiKSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiLGUubXVsdGlwbGUpKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsZS5fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpKX19dmFyIGR2ZT1bW1sibWF0LXNlbGVjdC10cmlnZ2VyIl1dLCIqIl0sdXZlPVsibWF0LXNlbGVjdC10cmlnZ2VyIiwiKiJdLHdxPXt0cmFuc2Zvcm1QYW5lbFdyYXA6amkoInRyYW5zZm9ybVBhbmVsV3JhcCIsW1duKCIqID0+IHZvaWQiLGRkKCJAdHJhbnNmb3JtUGFuZWwiLFtjZCgpXSx7b3B0aW9uYWw6ITB9KSldKSx0cmFuc2Zvcm1QYW5lbDpqaSgidHJhbnNmb3JtUGFuZWwiLFtKbigidm9pZCIsQnQoe3RyYW5zZm9ybToic2NhbGVZKDAuOCkiLG1pbldpZHRoOiIxMDAlIixvcGFjaXR5OjB9KSksSm4oInNob3dpbmciLEJ0KHtvcGFjaXR5OjEsbWluV2lkdGg6ImNhbGMoMTAwJSArIDMycHgpIix0cmFuc2Zvcm06InNjYWxlWSgxKSJ9KSksSm4oInNob3dpbmctbXVsdGlwbGUiLEJ0KHtvcGFjaXR5OjEsbWluV2lkdGg6ImNhbGMoMTAwJSArIDY0cHgpIix0cmFuc2Zvcm06InNjYWxlWSgxKSJ9KSksV24oInZvaWQgPT4gKiIsS24oIjEyMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIikpLFduKCIqID0+IHZvaWQiLEtuKCIxMDBtcyAyNW1zIGxpbmVhciIsQnQoe29wYWNpdHk6MH0pKSldKX0sR3U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE1xe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9zY3JvbGxUb3A9MCx0aGlzLl90cmlnZ2VyRm9udFNpemU9MCx0aGlzLl90cmFuc2Zvcm1PcmlnaW49InRvcCIsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3Bvc2l0aW9ucz1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifV19X2NhbGN1bGF0ZU92ZXJsYXlTY3JvbGwoZSxpLHIpe2xldCBvPXRoaXMuX2dldEl0ZW1IZWlnaHQoKTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoMCxvKmUtaStvLzIpLHIpfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMucGFuZWxPcGVuJiYodGhpcy5fdHJpZ2dlclJlY3Q9dGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9b3Blbigpe3N1cGVyLl9jYW5PcGVuKCkmJihzdXBlci5vcGVuKCksdGhpcy5fdHJpZ2dlclJlY3Q9dGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fdHJpZ2dlckZvbnRTaXplPXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUodGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQpLmZvbnRTaXplfHwiMCIpLHRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlQb3NpdGlvbigpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKHp0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl90cmlnZ2VyRm9udFNpemUmJnRoaXMuX292ZXJsYXlEaXIub3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50JiYodGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLmZvbnRTaXplPWAke3RoaXMuX3RyaWdnZXJGb250U2l6ZX1weGApfSkpfV9zY3JvbGxPcHRpb25JbnRvVmlldyhlKXtsZXQgaT1BZihlLHRoaXMub3B0aW9ucyx0aGlzLm9wdGlvbkdyb3Vwcykscj10aGlzLl9nZXRJdGVtSGVpZ2h0KCk7dGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD0wPT09ZSYmMT09PWk/MDp2ZygoZStpKSpyLHIsdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCwyNTYpfV9wb3NpdGlvbmluZ1NldHRsZWQoKXt0aGlzLl9jYWxjdWxhdGVPdmVybGF5T2Zmc2V0WCgpLHRoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9dGhpcy5fc2Nyb2xsVG9wfV9wYW5lbERvbmVBbmltYXRpbmcoZSl7dGhpcy5wYW5lbE9wZW4/dGhpcy5fc2Nyb2xsVG9wPTA6KHRoaXMuX292ZXJsYXlEaXIub2Zmc2V0WD0wLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSxzdXBlci5fcGFuZWxEb25lQW5pbWF0aW5nKGUpfV9nZXRDaGFuZ2VFdmVudChlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSh0aGlzLGUpfV9nZXRPdmVybGF5TWluV2lkdGgoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlclJlY3Q/LndpZHRofV9jYWxjdWxhdGVPdmVybGF5T2Zmc2V0WCgpe2xldCBhLGU9dGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxyPXRoaXMuX2lzUnRsKCksbz10aGlzLm11bHRpcGxlPzU2OjMyO2lmKHRoaXMubXVsdGlwbGUpYT00MDtlbHNlIGlmKHRoaXMuZGlzYWJsZU9wdGlvbkNlbnRlcmluZylhPTE2O2Vsc2V7bGV0IGM9dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF18fHRoaXMub3B0aW9ucy5maXJzdDthPWMmJmMuZ3JvdXA/MzI6MTZ9cnx8KGEqPS0xKTtsZXQgcz0wLShlLmxlZnQrYS0ocj9vOjApKSxsPWUucmlnaHQrYS1pLndpZHRoKyhyPzA6byk7cz4wP2ErPXMrODpsPjAmJihhLT1sKzgpLHRoaXMuX292ZXJsYXlEaXIub2Zmc2V0WD1NYXRoLnJvdW5kKGEpLHRoaXMuX292ZXJsYXlEaXIub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfV9jYWxjdWxhdGVPdmVybGF5T2Zmc2V0WShlLGkscil7bGV0IGwsbz10aGlzLl9nZXRJdGVtSGVpZ2h0KCksYT0oby10aGlzLl90cmlnZ2VyUmVjdC5oZWlnaHQpLzIscz1NYXRoLmZsb29yKDI1Ni9vKTtyZXR1cm4gdGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPzA6KGw9MD09PXRoaXMuX3Njcm9sbFRvcD9lKm86dGhpcy5fc2Nyb2xsVG9wPT09cj8oZS0odGhpcy5fZ2V0SXRlbUNvdW50KCktcykpKm8rKG8tKHRoaXMuX2dldEl0ZW1Db3VudCgpKm8tMjU2KSVvKTppLW8vMixNYXRoLnJvdW5kKC0xKmwtYSkpfV9jaGVja092ZXJsYXlXaXRoaW5WaWV3cG9ydChlKXtsZXQgaT10aGlzLl9nZXRJdGVtSGVpZ2h0KCkscj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLG89dGhpcy5fdHJpZ2dlclJlY3QudG9wLTgsYT1yLmhlaWdodC10aGlzLl90cmlnZ2VyUmVjdC5ib3R0b20tOCxzPU1hdGguYWJzKHRoaXMuX29mZnNldFkpLGM9TWF0aC5taW4odGhpcy5fZ2V0SXRlbUNvdW50KCkqaSwyNTYpLXMtdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0O2M+YT90aGlzLl9hZGp1c3RQYW5lbFVwKGMsYSk6cz5vP3RoaXMuX2FkanVzdFBhbmVsRG93bihzLG8sZSk6dGhpcy5fdHJhbnNmb3JtT3JpZ2luPXRoaXMuX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKX1fYWRqdXN0UGFuZWxVcChlLGkpe2xldCByPU1hdGgucm91bmQoZS1pKTt0aGlzLl9zY3JvbGxUb3AtPXIsdGhpcy5fb2Zmc2V0WS09cix0aGlzLl90cmFuc2Zvcm1PcmlnaW49dGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpLHRoaXMuX3Njcm9sbFRvcDw9MCYmKHRoaXMuX3Njcm9sbFRvcD0wLHRoaXMuX29mZnNldFk9MCx0aGlzLl90cmFuc2Zvcm1PcmlnaW49IjUwJSBib3R0b20gMHB4Iil9X2FkanVzdFBhbmVsRG93bihlLGkscil7bGV0IG89TWF0aC5yb3VuZChlLWkpO2lmKHRoaXMuX3Njcm9sbFRvcCs9byx0aGlzLl9vZmZzZXRZKz1vLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj10aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCksdGhpcy5fc2Nyb2xsVG9wPj1yKXJldHVybiB0aGlzLl9zY3JvbGxUb3A9cix0aGlzLl9vZmZzZXRZPTAsdm9pZCh0aGlzLl90cmFuc2Zvcm1PcmlnaW49IjUwJSB0b3AgMHB4Iil9X2NhbGN1bGF0ZU92ZXJsYXlQb3NpdGlvbigpe2xldCBzLGU9dGhpcy5fZ2V0SXRlbUhlaWdodCgpLGk9dGhpcy5fZ2V0SXRlbUNvdW50KCkscj1NYXRoLm1pbihpKmUsMjU2KSxhPWkqZS1yO3M9dGhpcy5lbXB0eT8wOk1hdGgubWF4KHRoaXMub3B0aW9ucy50b0FycmF5KCkuaW5kZXhPZih0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSksMCkscys9QWYocyx0aGlzLm9wdGlvbnMsdGhpcy5vcHRpb25Hcm91cHMpO2xldCBsPXIvMjt0aGlzLl9zY3JvbGxUb3A9dGhpcy5fY2FsY3VsYXRlT3ZlcmxheVNjcm9sbChzLGwsYSksdGhpcy5fb2Zmc2V0WT10aGlzLl9jYWxjdWxhdGVPdmVybGF5T2Zmc2V0WShzLGwsYSksdGhpcy5fY2hlY2tPdmVybGF5V2l0aGluVmlld3BvcnQoYSl9X2dldE9yaWdpbkJhc2VkT25PcHRpb24oKXtsZXQgZT10aGlzLl9nZXRJdGVtSGVpZ2h0KCksaT0oZS10aGlzLl90cmlnZ2VyUmVjdC5oZWlnaHQpLzI7cmV0dXJuYDUwJSAke01hdGguYWJzKHRoaXMuX29mZnNldFkpLWkrZS8yfXB4IDBweGB9X2dldEl0ZW1IZWlnaHQoKXtyZXR1cm4gMyp0aGlzLl90cmlnZ2VyRm9udFNpemV9X2dldEl0ZW1Db3VudCgpe3JldHVybiB0aGlzLm9wdGlvbnMubGVuZ3RoK3RoaXMub3B0aW9uR3JvdXBzLmxlbmd0aH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1zZWxlY3QiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKGNpKHIsQ3EsNSksY2kocixIYSw1KSxjaShyLENkLDUpKSwyJmUpe2xldCBvO3dlKG89U2UoKSkmJihpLmN1c3RvbVRyaWdnZXI9by5maXJzdCksd2Uobz1TZSgpKSYmKGkub3B0aW9ucz1vKSx3ZShvPVNlKCkpJiYoaS5vcHRpb25Hcm91cHM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSIsIm5vbmUiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwibWF0LXNlbGVjdCJdLGhvc3RWYXJzOjE5LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkJsdXIoKX0pLDImZSYmKFBlKCJpZCIsaS5pZCkoInRhYmluZGV4IixpLnRhYkluZGV4KSgiYXJpYS1jb250cm9scyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5wYW5lbE9wZW4pKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQudG9TdHJpbmcoKSkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixpLl9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpKSxRZSgibWF0LXNlbGVjdC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1zZWxlY3QtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgibWF0LXNlbGVjdC1yZXF1aXJlZCIsaS5yZXF1aXJlZCkoIm1hdC1zZWxlY3QtZW1wdHkiLGkuZW1wdHkpKCJtYXQtc2VsZWN0LW11bHRpcGxlIixpLm11bHRpcGxlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdFNlbGVjdCJdLGZlYXR1cmVzOltSdChbe3Byb3ZpZGU6TmwsdXNlRXhpc3Rpbmc6bn0se3Byb3ZpZGU6eGQsdXNlRXhpc3Rpbmc6bn1dKSxMZV0sbmdDb250ZW50U2VsZWN0b3JzOnV2ZSxkZWNsczo5LHZhcnM6MTIsY29uc3RzOltbImNkay1vdmVybGF5LW9yaWdpbiIsIiIsMSwibWF0LXNlbGVjdC10cmlnZ2VyIiwzLCJjbGljayJdLFsib3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiIsInRyaWdnZXIiLCIiXSxbMSwibWF0LXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciJdLFsxLCJtYXQtc2VsZWN0LWFycm93Il0sWyJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJiYWNrZHJvcENsaWNrIiwiYXR0YWNoIiwiZGV0YWNoIl0sWzEsIm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtdmFsdWUtdGV4dCIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtcGFuZWwtd3JhcCJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnbihkdmUpLGgoMCwiZGl2IiwwLDEpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZSgpfSksaCgzLCJkaXYiLDIpLFMoNCxvdmUsMiwxLCJzcGFuIiwzKSxTKDUsbHZlLDMsMiwic3BhbiIsNCksZygpLGgoNiwiZGl2Iiw1KSxQKDcsImRpdiIsNiksZygpKCksUyg4LGN2ZSw0LDE0LCJuZy10ZW1wbGF0ZSIsNyksRCgiYmFja2Ryb3BDbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkoImF0dGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25BdHRhY2hlZCgpfSkoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkpLDImZSl7bGV0IHI9dHQoMSk7UGUoImFyaWEtb3ducyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSxiKDMpLF8oIm5nU3dpdGNoIixpLmVtcHR5KSxQZSgiaWQiLGkuX3ZhbHVlSWQpLGIoMSksXygibmdTd2l0Y2hDYXNlIiwhMCksYigxKSxfKCJuZ1N3aXRjaENhc2UiLCExKSxiKDMpLF8oImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIixpLl9vdmVybGF5UGFuZWxDbGFzcykoImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsaS5fc2Nyb2xsU3RyYXRlZ3kpKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixyKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLGkucGFuZWxPcGVuKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS5fcG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIixpLl9nZXRPdmVybGF5TWluV2lkdGgoKSkoImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRZIixpLl9vZmZzZXRZKX19LGRlcGVuZGVuY2llczpbYm4sJGksc3IsZnUsenUsSHVdLHN0eWxlczpbJy5tYXQtc2VsZWN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCU7b3V0bGluZTpub25lfS5tYXQtc2VsZWN0LXRyaWdnZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdHJpZ2dlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LXNlbGVjdC12YWx1ZXt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LXNlbGVjdC12YWx1ZS10ZXh0e3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye2hlaWdodDoxNnB4O2ZsZXgtc2hyaW5rOjA7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMjUlKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1oYXMtbGFiZWwgLm1hdC1zZWxlY3Q6bm90KC5tYXQtc2VsZWN0LWVtcHR5KSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWVtcHR5IC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtc2VsZWN0LWFycm93e3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci10b3A6NXB4IHNvbGlkO21hcmdpbjowIDRweH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9Lm1hdC1zZWxlY3QtcGFuZWwtd3JhcHtmbGV4LWJhc2lzOjEwMCV9Lm1hdC1zZWxlY3QtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXgtaGVpZ2h0OjI1NnB4O21pbi13aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2VsZWN0LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0Z3JvdXAtbGFiZWwsLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb257Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6M2VtO2hlaWdodDozZW19Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LXNlbGVjdDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleHtjdXJzb3I6cG9pbnRlcn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt3aWR0aDpjYWxjKDEwMCUgLSAxOHB4KX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcnt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApOy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpub25lO2Rpc3BsYXk6YmxvY2t9Lm1hdC1zZWxlY3QtbWluLWxpbmU6ZW1wdHk6OmJlZm9yZXtjb250ZW50OiIgIjt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Zpc2liaWxpdHk6aGlkZGVufSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3dxLnRyYW5zZm9ybVBhbmVsV3JhcCx3cS50cmFuc2Zvcm1QYW5lbF19LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWHM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbeHFdLGltcG9ydHM6W1RlLExyLFNnLFF0LFJjLFZmLFNnLFF0XX0pLG59KSgpO2Z1bmN0aW9uIG12ZShuLHQpezEmbiYmKFR0KDApLGgoMSwiZGl2IiwxKSxUKDIsIiBUaGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBEZWZhdWx0IC0gKEVuYWJsZWQvRGlzYWJsZWQpIGFuZCAoRW5hYmxlZC9EaXNhYmxlZCkgIiksZygpLGgoMywiZGl2IiwxKSxUKDQsIiBPbmx5IGZsYWdzIHdpdGggbm9uIGRlZmF1bHQgdmFsdWVzIGFyZSBzZW50IHRvIHRoZSBiYWNrZW5kLiAiKSxnKCksRHQoKSl9ZnVuY3Rpb24gaHZlKG4sdCl7aWYoMSZuJiYoVHQoMCksaCgxLCJkaXYiLDEpLFQoMiksZygpLER0KCkpLDImbil7bGV0IGU9dygpO2IoMiksemUoJyBGZWF0dXJlIEZsYWdzIGFyZSBmaWx0ZXJlZCB0byBvbmx5IHNob3cgZmVhdHVyZXMgY29udGFpbmluZyAiJyxlLnNob3dGbGFnc0ZpbHRlciwnIiAnKX19ZnVuY3Rpb24gZ3ZlKG4sdCl7MSZuJiYoaCgwLCJzdXAiLDExKSxUKDEsIjEiKSxnKCkpfWZ1bmN0aW9uIF92ZShuLHQpezEmbiYmVGkoMCl9ZnVuY3Rpb24geXZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwibWF0LXNlbGVjdCIsMTIpLEQoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCkuJGltcGxpY2l0O3JldHVybiBRKHcoKS5mbGFnQ2hhbmdlZC5lbWl0KHtmbGFnOm8uZmxhZyxzdGF0dXM6ci52YWx1ZX0pKX0pLGgoMSwibWF0LW9wdGlvbiIsMTMpLFQoMiksZygpLGgoMywibWF0LW9wdGlvbiIsMTQpLFQoNCwiRW5hYmxlZCIpLGcoKSxoKDUsIm1hdC1vcHRpb24iLDE1KSxUKDYsIkRpc2FibGVkIiksZygpKCl9aWYoMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygpO18oInZhbHVlIixlLnN0YXR1cyksYigyKSx6ZSgiIERlZmF1bHQgIixpLmZvcm1hdEZsYWdWYWx1ZShlLmRlZmF1bHRWYWx1ZSksIiAiKX19ZnVuY3Rpb24gYnZlKG4sdCl7aWYoMSZuJiYoaCgwLCJ0ZCIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KCk7YigxKSx6ZSgiVW5zdXBwb3J0ZWQgQnkgVUkgIixpLmZvcm1hdEZsYWdWYWx1ZShlLnZhbHVlKSwiIil9fWZ1bmN0aW9uIHZ2ZShuLHQpe2lmKDEmbiYmKFR0KDApLGgoMSwidHIiKSgyLCJ0ZCIpKDMsImRpdiIpLFQoNCksUyg1LGd2ZSwyLDAsInN1cCIsNyksZygpKCksUyg2LF92ZSwxLDAsIm5nLWNvbnRhaW5lciIsOCksUyg3LHl2ZSw3LDIsIm5nLXRlbXBsYXRlIixudWxsLDksWnQpLFMoOSxidmUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxadCksZygpLER0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10dCg4KSxyPXR0KDEwKSxvPXcoKTtiKDQpLHplKCIgIixlLmZsYWcsIiAiKSxiKDEpLF8oIm5nSWYiLGUuc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW4pLGIoMSksXygibmdJZiIsby5pc0VkaXRhYmxlKGUpKSgibmdJZlRoZW4iLGkpKCJuZ0lmRWxzZSIscil9fWZ1bmN0aW9uIHh2ZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxMSksVCgxLCIgMS4gU2VudCB0byBzZXJ2ZXIgd2hlbiBvdmVycmlkZGVuICIpLGcoKSl9dmFyIF9FLEVxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmhhc0ZsYWdzU2VudFRvU2VydmVyPSExLHRoaXMuZmxhZ0NoYW5nZWQ9bmV3IEwsdGhpcy5hbGxGbGFnc1Jlc2V0PW5ldyBMfXNlcmlhbGl6ZUZsYWdWYWx1ZShlKXtyZXR1cm4hMD09PWU/IkVuYWJsZWQiOiExPT09ZT8iRGlzYWJsZWQiOm51bGw9PWU/Im51bGwiOkFycmF5LmlzQXJyYXkoZSk/SlNPTi5zdHJpbmdpZnkoZSk6ZS50b1N0cmluZygpfWlzRWRpdGFibGUoZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZS5kZWZhdWx0VmFsdWV9Zm9ybWF0RmxhZ1ZhbHVlKGUpe2xldCBpPXRoaXMuc2VyaWFsaXplRmxhZ1ZhbHVlKGUpO3JldHVybiAwPT09aS5sZW5ndGg/IiI6YC0gJHtpfWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImZlYXR1cmUtZmxhZy1kaWFsb2ctY29tcG9uZW50Il1dLGlucHV0czp7ZmVhdHVyZUZsYWdTdGF0dXNlczoiZmVhdHVyZUZsYWdTdGF0dXNlcyIsaGFzRmxhZ3NTZW50VG9TZXJ2ZXI6Imhhc0ZsYWdzU2VudFRvU2VydmVyIixzaG93RmxhZ3NGaWx0ZXI6InNob3dGbGFnc0ZpbHRlciJ9LG91dHB1dHM6e2ZsYWdDaGFuZ2VkOiJmbGFnQ2hhbmdlZCIsYWxsRmxhZ3NSZXNldDoiYWxsRmxhZ3NSZXNldCJ9LGRlY2xzOjEyLHZhcnM6NCxjb25zdHM6W1sxLCJzY3JvbGxpbmctcGFnZSJdLFsxLCJtZXNzYWdlIl0sWzEsIndhcm5pbmciXSxbNCwibmdJZiJdLFsxLCJmZWF0dXJlLWZsYWctdGFibGUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtYnV0dG9uIiwiIiwzLCJjbGljayJdLFsiY2xhc3MiLCJub3RlLTEiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXSxbInNlbGVjdEJsb2NrIiwiIl0sWyJ1bnN1cHBvcnRlZEJsb2NrIiwiIl0sWzEsIm5vdGUtMSJdLFszLCJ2YWx1ZSIsInNlbGVjdGlvbkNoYW5nZSJdLFsidmFsdWUiLCJkZWZhdWx0Il0sWyJ2YWx1ZSIsImVuYWJsZWQiXSxbInZhbHVlIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJoMiIsMiksVCgzLCJXQVJOSU5HOiBFWFBFUklNRU5UQUwgRkVBVFVSRVMgQUhFQUQhIiksZygpLFQoNCwiIEJ5IGVuYWJsaW5nIHRoZXNlIGZlYXR1cmVzLCB5b3UgY291bGQgcHV0IHRoZSBhcHBsaWNhdGlvbiBpbiBhbiB1bnVzYWJsZSBzdGF0ZSBvciBleHBvc2UgeW91cnNlbGYgdG8gdW50ZXN0ZWQgZmVhdHVyZXMgb3IgcG90ZW50aWFsIGJ1Z3MuICIpLGcoKSxTKDUsbXZlLDUsMCwibmctY29udGFpbmVyIiwzKSxTKDYsaHZlLDMsMSwibmctY29udGFpbmVyIiwzKSxoKDcsInRhYmxlIiw0KSxTKDgsdnZlLDExLDUsIm5nLWNvbnRhaW5lciIsNSksZygpLGgoOSwiYnV0dG9uIiw2KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5hbGxGbGFnc1Jlc2V0LmVtaXQoKX0pLFQoMTAsIlJlc2V0IEFsbCIpLGcoKSxTKDExLHh2ZSwyLDAsImRpdiIsNyksZygpKSwyJmUmJihiKDUpLF8oIm5nSWYiLGkuaGFzRmxhZ3NTZW50VG9TZXJ2ZXIpLGIoMSksXygibmdJZiIsaS5zaG93RmxhZ3NGaWx0ZXIpLGIoMiksXygibmdGb3JPZiIsaS5mZWF0dXJlRmxhZ1N0YXR1c2VzKSxiKDMpLF8oIm5nSWYiLGkuaGFzRmxhZ3NTZW50VG9TZXJ2ZXIpKX0sZGVwZW5kZW5jaWVzOltkbixGZSxGbixHdSxIYV0sc3R5bGVzOlsiLm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MTZweH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2Y0NDMzNn0ubm90ZS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmY5ODAwfS5zY3JvbGxpbmctcGFnZVtfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDo5MHZofS5mZWF0dXJlLWZsYWctdGFibGVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9Il19KSxufSkoKSxUcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNob3dGbGFnc0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoZmIpLnBpcGUoVShpPT5pLnNob3dGbGFncz8udG9Mb3dlckNhc2UoKSkpLHRoaXMuaGFzRmxhZ3NTZW50VG9TZXJ2ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KG1mKS5waXBlKFUoaT0+T2JqZWN0LnZhbHVlcyhpKS5zb21lKHI9PnIuc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW4pKSksdGhpcy5mZWF0dXJlRmxhZ3MkPXRoaXMuc3RvcmUuc2VsZWN0KGZiKS5waXBlKFl0KHRoaXMuc3RvcmUuc2VsZWN0KFU2KSx0aGlzLnN0b3JlLnNlbGVjdChtZiksdGhpcy5zaG93RmxhZ3NGaWx0ZXIkKSxVKChbaSxyLG8sYV0pPT5PYmplY3QuZW50cmllcyhyKS5maWx0ZXIoKFtzXSk9PiFhfHxzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYSkpLm1hcCgoW3MsbF0pPT57bGV0IGM9ZnVuY3Rpb24obix0KXtyZXR1cm4gdm9pZCAwPT09dFtuXT8iZGVmYXVsdCI6dFtuXT8iZW5hYmxlZCI6ImRpc2FibGVkIn0ocyxpKTtyZXR1cm57ZmxhZzpzLGRlZmF1bHRWYWx1ZTpsLHN0YXR1czpjLHNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuOm9bc10uc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW59fSkpKX1vbkZsYWdDaGFuZ2VkKHtmbGFnOmUsc3RhdHVzOml9KXtzd2l0Y2goaSl7Y2FzZSJkZWZhdWx0Ijp0aGlzLnN0b3JlLmRpc3BhdGNoKFN1KHtmbGFnczpbZV19KSk7YnJlYWs7Y2FzZSJlbmFibGVkIjp0aGlzLnN0b3JlLmRpc3BhdGNoKHhmKHtmbGFnczp7W2VdOiEwfX0pKTticmVhaztjYXNlImRpc2FibGVkIjp0aGlzLnN0b3JlLmRpc3BhdGNoKHhmKHtmbGFnczp7W2VdOiExfX0pKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmxhZyBjaGFuZ2VkIHRvIGludmFsaWQgc3RhdHVzIil9fW9uQWxsRmxhZ3NSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZWcoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJmZWF0dXJlLWZsYWctZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImZlYXR1cmVGbGFnU3RhdHVzZXMiLCJoYXNGbGFnc1NlbnRUb1NlcnZlciIsInNob3dGbGFnc0ZpbHRlciIsImZsYWdDaGFuZ2VkIiwiYWxsRmxhZ3NSZXNldCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZmVhdHVyZS1mbGFnLWRpYWxvZy1jb21wb25lbnQiLDApLEQoImZsYWdDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkZsYWdDaGFuZ2VkKG8pfSkoImFsbEZsYWdzUmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25BbGxGbGFnc1Jlc2V0KCl9KSxHKDEsImFzeW5jIiksRygyLCJhc3luYyIpLEcoMywiYXN5bmMiKSxnKCkpLDImZSYmXygiZmVhdHVyZUZsYWdTdGF0dXNlcyIsVygxLDMsaS5mZWF0dXJlRmxhZ3MkKSkoImhhc0ZsYWdzU2VudFRvU2VydmVyIixXKDIsNSxpLmhhc0ZsYWdzU2VudFRvU2VydmVyJCkpKCJzaG93RmxhZ3NGaWx0ZXIiLFcoMyw3LGkuc2hvd0ZsYWdzRmlsdGVyJCkpfSxkZXBlbmRlbmNpZXM6W0VxLGx0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxEcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMuZGlhbG9nPWksdGhpcy5mZWF0dXJlRmxhZ0RpYWxvZ1R5cGU9VHEsdGhpcy5zaG93RmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChxNiksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBBZX1uZ09uSW5pdCgpe3RoaXMuc2hvd0ZlYXR1cmVGbGFncyQucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2lmKGUpcmV0dXJuIHRoaXMuZmVhdHVyZUZsYWdzRGlhbG9nPXRoaXMuZGlhbG9nLm9wZW4odGhpcy5mZWF0dXJlRmxhZ0RpYWxvZ1R5cGUpLHZvaWQgdGhpcy5mZWF0dXJlRmxhZ3NEaWFsb2cuYWZ0ZXJDbG9zZWQoKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goU3Uoe2ZsYWdzOlsic2hvd0ZsYWdzIl19KSksc2V0VGltZW91dCgoKT0+e3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sMSl9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSksQyhMbCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImZlYXR1cmUtZmxhZy1tb2RhbC10cmlnZ2VyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxFdmU9WyJyb3V0ZUNvbnRhaW5lciJdLElxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZX1uZ09uQ2hhbmdlcyhlKXtsZXQgaT1lLmFjdGl2ZU5nQ29tcG9uZW50O2lmKGkmJih0aGlzLnJvdXRlQ29udGFpbmVyLmNsZWFyKCksaS5jdXJyZW50VmFsdWUpKXtsZXQgcj10aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShpLmN1cnJlbnRWYWx1ZSk7dGhpcy5yb3V0ZUNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQocil9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFFyKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZZZShFdmUsNyxabiksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS5yb3V0ZUNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7YWN0aXZlTmdDb21wb25lbnQ6ImFjdGl2ZU5nQ29tcG9uZW50In0sZmVhdHVyZXM6W0d0XSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sicm91dGVDb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlRpKDAsbnVsbCwwKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQXE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLnJlZ2lzdHJ5PWksdGhpcy5hY3RpdmVOZ0NvbXBvbmVudCQ9dW4oW3RoaXMuc3RvcmUuc2VsZWN0KGZhKSx0aGlzLnN0b3JlLnNlbGVjdChoNildKS5waXBlKFUoKFtyLG9dKT0+ciYmKG51bGw9PT1vfHxMbyhyLG8pKT90aGlzLnJlZ2lzdHJ5LmdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoci5yb3V0ZUtpbmQpOm51bGwpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSksQyh3bCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJvdXRlci1vdXRsZXQiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiYWN0aXZlTmdDb21wb25lbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInJvdXRlci1vdXRsZXQtY29tcG9uZW50IiwwKSxHKDEsImFzeW5jIikpLDImZSYmXygiYWN0aXZlTmdDb21wb25lbnQiLFcoMSwxLGkuYWN0aXZlTmdDb21wb25lbnQkKSl9LGRlcGVuZGVuY2llczpbSXEsbHRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFJxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7ZS5zZWxlY3QoRWwpLnN1YnNjcmliZShpPT57ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGkpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXJrLW1vZGUtc3VwcG9ydGVyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE9nPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5BQ1RJVkVfUExVR0lOPTBdPSJBQ1RJVkVfUExVR0lOIn0oT2d8fChPZz17fSkpLE9nKSkoKSxrcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVlcExpbmtlcj1lLHRoaXMub25WYWx1ZUNoYW5nZT1uZXcgTCx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEFlLHRoaXMub25IYXNoQ2hhbmdlPWFpKHdpbmRvdywicG9wc3RhdGUiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKX1uZ09uSW5pdCgpe3RoaXMub25IYXNoQ2hhbmdlLnN1YnNjcmliZSgoKT0+e2xldCBlPXRoaXMuZGVlcExpbmtlci5nZXRQbHVnaW5JZCgpO2UhPT10aGlzLmFjdGl2ZVBsdWdpbklkJiZ0aGlzLm9uVmFsdWVDaGFuZ2UuZW1pdCh7cHJvcDpPZy5BQ1RJVkVfUExVR0lOLHZhbHVlOmV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uQ2hhbmdlcyhlKXtpZihlLmFjdGl2ZVBsdWdpbklkKXtsZXQgaT1lLmFjdGl2ZVBsdWdpbklkO3RoaXMuZGVlcExpbmtlci5zZXRQbHVnaW5JZChudWxsPT09aS5jdXJyZW50VmFsdWU/IiI6aS5jdXJyZW50VmFsdWUse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhdGlvblJlcGxhY2U6bnVsbD09PWkucHJldmlvdXNWYWx1ZXx8aS5maXJzdENoYW5nZX0pfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh2dSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImhhc2gtc3RvcmFnZS1jb21wb25lbnQiXV0saW5wdXRzOnthY3RpdmVQbHVnaW5JZDoiYWN0aXZlUGx1Z2luSWQifSxvdXRwdXRzOntvblZhbHVlQ2hhbmdlOiJvblZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W0d0XSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUHE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5hY3RpdmVQbHVnaW5JZCQ9dGhpcy5zdG9yZS5waXBlKHBuKHFvKSl9b25WYWx1ZUNoYW5nZWQoZSl7ZS5wcm9wPT09T2cuQUNUSVZFX1BMVUdJTiYmdGhpcy5zdG9yZS5kaXNwYXRjaChnUyh7cGx1Z2luOmUudmFsdWV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoYXNoLXN0b3JhZ2UiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiYWN0aXZlUGx1Z2luSWQiLCJvblZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJoYXNoLXN0b3JhZ2UtY29tcG9uZW50IiwwKSxEKCJvblZhbHVlQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblZhbHVlQ2hhbmdlZChvKX0pLEcoMSwiYXN5bmMiKSxnKCkpLDImZSYmXygiYWN0aXZlUGx1Z2luSWQiLFcoMSwxLGkuYWN0aXZlUGx1Z2luSWQkKSl9LGRlcGVuZGVuY2llczpba3EsbHRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksa3ZlPVsiKiJdO2Z1bmN0aW9uIHN2KG4pe3JldHVybiBmdW5jdGlvbigpe2lmKHZvaWQgMD09PV9FJiYoX0U9bnVsbCx0eXBlb2Ygd2luZG93PCJ1Iikpe2xldCBuPXdpbmRvdzt2b2lkIDAhPT1uLnRydXN0ZWRUeXBlcyYmKF9FPW4udHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciNjb21wb25lbnRzIix7Y3JlYXRlSFRNTDp0PT50fSkpfXJldHVybiBfRX0oKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBPcShuKXtyZXR1cm4gRXJyb3IoYFVuYWJsZSB0byBmaW5kIGljb24gd2l0aCB0aGUgbmFtZSAiJHtufSJgKX1mdW5jdGlvbiBGcShuKXtyZXR1cm4gRXJyb3IoYFRoZSBVUkwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBhIHJlc291cmNlIFVSTCB2aWEgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIFVSTCB3YXMgIiR7bn0iLmApfWZ1bmN0aW9uIExxKG4pe3JldHVybiBFcnJvcihgVGhlIGxpdGVyYWwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBzYWZlIEhUTUwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIGxpdGVyYWwgd2FzICIke259Ii5gKX12YXIgRWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudXJsPXQsdGhpcy5zdmdUZXh0PWUsdGhpcy5vcHRpb25zPWl9fSxGZz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2h0dHBDbGllbnQ9ZSx0aGlzLl9zYW5pdGl6ZXI9aSx0aGlzLl9lcnJvckhhbmRsZXI9byx0aGlzLl9zdmdJY29uQ29uZmlncz1uZXcgTWFwLHRoaXMuX2ljb25TZXRDb25maWdzPW5ldyBNYXAsdGhpcy5fY2FjaGVkSWNvbnNCeVVybD1uZXcgTWFwLHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzPW5ldyBNYXAsdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzPW5ldyBNYXAsdGhpcy5fcmVzb2x2ZXJzPVtdLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9WyJtYXRlcmlhbC1pY29ucyIsIm1hdC1saWdhdHVyZS1mb250Il0sdGhpcy5fZG9jdW1lbnQ9cn1hZGRTdmdJY29uKGUsaSxyKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uSW5OYW1lc3BhY2UoIiIsZSxpLHIpfWFkZFN2Z0ljb25MaXRlcmFsKGUsaSxyKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlKCIiLGUsaSxyKX1hZGRTdmdJY29uSW5OYW1lc3BhY2UoZSxpLHIsbyl7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcoZSxpLG5ldyBFZChyLG51bGwsbykpfWFkZFN2Z0ljb25SZXNvbHZlcihlKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZXJzLnB1c2goZSksdGhpc31hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlKGUsaSxyLG8pe2xldCBhPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShxci5IVE1MLHIpO2lmKCFhKXRocm93IExxKHIpO2xldCBzPXN2KGEpO3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKGUsaSxuZXcgRWQoIiIscyxvKSl9YWRkU3ZnSWNvblNldChlLGkpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRJbk5hbWVzcGFjZSgiIixlLGkpfWFkZFN2Z0ljb25TZXRMaXRlcmFsKGUsaSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZSgiIixlLGkpfWFkZFN2Z0ljb25TZXRJbk5hbWVzcGFjZShlLGkscil7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcoZSxuZXcgRWQoaSxudWxsLHIpKX1hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKGUsaSxyKXtsZXQgbz10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUocXIuSFRNTCxpKTtpZighbyl0aHJvdyBMcShpKTtsZXQgYT1zdihvKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyhlLG5ldyBFZCgiIixhLHIpKX1yZWdpc3RlckZvbnRDbGFzc0FsaWFzKGUsaT1lKXtyZXR1cm4gdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLnNldChlLGkpLHRoaXN9Y2xhc3NOYW1lRm9yRm9udEFsaWFzKGUpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuZ2V0KGUpfHxlfXNldERlZmF1bHRGb250U2V0Q2xhc3MoLi4uZSl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9ZSx0aGlzfWdldERlZmF1bHRGb250U2V0Q2xhc3MoKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzc31nZXRTdmdJY29uRnJvbVVybChlKXtsZXQgaT10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUocXIuUkVTT1VSQ0VfVVJMLGUpO2lmKCFpKXRocm93IEZxKGUpO2xldCByPXRoaXMuX2NhY2hlZEljb25zQnlVcmwuZ2V0KGkpO3JldHVybiByP3F0KHlFKHIpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcobmV3IEVkKGUsbnVsbCkpLnBpcGUoVnQobz0+dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5zZXQoaSxvKSksVShvPT55RShvKSkpfWdldE5hbWVkU3ZnSWNvbihlLGk9IiIpe2xldCByPU5xKGksZSksbz10aGlzLl9zdmdJY29uQ29uZmlncy5nZXQocik7aWYobylyZXR1cm4gdGhpcy5fZ2V0U3ZnRnJvbUNvbmZpZyhvKTtpZihvPXRoaXMuX2dldEljb25Db25maWdGcm9tUmVzb2x2ZXJzKGksZSksbylyZXR1cm4gdGhpcy5fc3ZnSWNvbkNvbmZpZ3Muc2V0KHIsbyksdGhpcy5fZ2V0U3ZnRnJvbUNvbmZpZyhvKTtsZXQgYT10aGlzLl9pY29uU2V0Q29uZmlncy5nZXQoaSk7cmV0dXJuIGE/dGhpcy5fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzKGUsYSk6Y2woT3EocikpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVzb2x2ZXJzPVtdLHRoaXMuX3N2Z0ljb25Db25maWdzLmNsZWFyKCksdGhpcy5faWNvblNldENvbmZpZ3MuY2xlYXIoKSx0aGlzLl9jYWNoZWRJY29uc0J5VXJsLmNsZWFyKCl9X2dldFN2Z0Zyb21Db25maWcoZSl7cmV0dXJuIGUuc3ZnVGV4dD9xdCh5RSh0aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKSkpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyhlKS5waXBlKFUoaT0+eUUoaSkpKX1fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzKGUsaSl7bGV0IHI9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKTtyZXR1cm4gcj9xdChyKTpwbyhpLmZpbHRlcihhPT4hYS5zdmdUZXh0KS5tYXAoYT0+dGhpcy5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKGEpLnBpcGUoZm8ocz0+e2xldCBjPWBMb2FkaW5nIGljb24gc2V0IFVSTDogJHt0aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUocXIuUkVTT1VSQ0VfVVJMLGEudXJsKX0gZmFpbGVkOiAke3MubWVzc2FnZX1gO3JldHVybiB0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IobmV3IEVycm9yKGMpKSxxdChudWxsKX0pKSkpLnBpcGUoVSgoKT0+e2xldCBhPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KGUsaSk7aWYoIWEpdGhyb3cgT3EoZSk7cmV0dXJuIGF9KSl9X2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KGUsaSl7Zm9yKGxldCByPWkubGVuZ3RoLTE7cj49MDtyLS0pe2xldCBvPWlbcl07aWYoby5zdmdUZXh0JiZvLnN2Z1RleHQudG9TdHJpbmcoKS5pbmRleE9mKGUpPi0xKXtsZXQgYT10aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhvKSxzPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChhLGUsby5vcHRpb25zKTtpZihzKXJldHVybiBzfX1yZXR1cm4gbnVsbH1fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKGUpe3JldHVybiB0aGlzLl9mZXRjaEljb24oZSkucGlwZShWdChpPT5lLnN2Z1RleHQ9aSksVSgoKT0+dGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcoZSkpKX1fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKGUpe3JldHVybiBlLnN2Z1RleHQ/cXQobnVsbCk6dGhpcy5fZmV0Y2hJY29uKGUpLnBpcGUoVnQoaT0+ZS5zdmdUZXh0PWkpKX1fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KGUsaSxyKXtsZXQgbz1lLnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7aWYoIW8pcmV0dXJuIG51bGw7bGV0IGE9by5jbG9uZU5vZGUoITApO2lmKGEucmVtb3ZlQXR0cmlidXRlKCJpZCIpLCJzdmciPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGEscik7aWYoInN5bWJvbCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXModGhpcy5fdG9TdmdFbGVtZW50KGEpLHIpO2xldCBzPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKHN2KCI8c3ZnPjwvc3ZnPiIpKTtyZXR1cm4gcy5hcHBlbmRDaGlsZChhKSx0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKHMscil9X3N2Z0VsZW1lbnRGcm9tU3RyaW5nKGUpe2xldCBpPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2kuaW5uZXJIVE1MPWU7bGV0IHI9aS5xdWVyeVNlbGVjdG9yKCJzdmciKTtpZighcil0aHJvdyBFcnJvcigiPHN2Zz4gdGFnIG5vdCBmb3VuZCIpO3JldHVybiByfV90b1N2Z0VsZW1lbnQoZSl7bGV0IGk9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoc3YoIjxzdmc+PC9zdmc+IikpLHI9ZS5hdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXR7bmFtZTphLHZhbHVlOnN9PXJbb107ImlkIiE9PWEmJmkuc2V0QXR0cmlidXRlKGEscyl9Zm9yKGxldCBvPTA7bzxlLmNoaWxkTm9kZXMubGVuZ3RoO28rKyllLmNoaWxkTm9kZXNbb10ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREUmJmkuYXBwZW5kQ2hpbGQoZS5jaGlsZE5vZGVzW29dLmNsb25lTm9kZSghMCkpO3JldHVybiBpfV9zZXRTdmdBdHRyaWJ1dGVzKGUsaSl7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJmaXQiLCIiKSxlLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTAwJSIpLGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjEwMCUiKSxlLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxlLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpJiZpLnZpZXdCb3gmJmUuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixpLnZpZXdCb3gpLGV9X2ZldGNoSWNvbihlKXtsZXR7dXJsOmksb3B0aW9uczpyfT1lLG89cj8ud2l0aENyZWRlbnRpYWxzPz8hMTtpZighdGhpcy5faHR0cENsaWVudCl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpO2lmKG51bGw9PWkpdGhyb3cgRXJyb3IoYENhbm5vdCBmZXRjaCBpY29uIGZyb20gVVJMICIke2l9Ii5gKTtsZXQgYT10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUocXIuUkVTT1VSQ0VfVVJMLGkpO2lmKCFhKXRocm93IEZxKGkpO2xldCBzPXRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmdldChhKTtpZihzKXJldHVybiBzO2xldCBsPXRoaXMuX2h0dHBDbGllbnQuZ2V0KGEse3Jlc3BvbnNlVHlwZToidGV4dCIsd2l0aENyZWRlbnRpYWxzOm99KS5waXBlKFUoYz0+c3YoYykpLGZ1bmN0aW9uKG4pe3JldHVybiBLdCgodCxlKT0+e3RyeXt0LnN1YnNjcmliZShlKX1maW5hbGx5e2UuYWRkKG4pfX0pfSgoKT0+dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZGVsZXRlKGEpKSxTYSgpKTtyZXR1cm4gdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuc2V0KGEsbCksbH1fYWRkU3ZnSWNvbkNvbmZpZyhlLGkscil7cmV0dXJuIHRoaXMuX3N2Z0ljb25Db25maWdzLnNldChOcShlLGkpLHIpLHRoaXN9X2FkZFN2Z0ljb25TZXRDb25maWcoZSxpKXtsZXQgcj10aGlzLl9pY29uU2V0Q29uZmlncy5nZXQoZSk7cmV0dXJuIHI/ci5wdXNoKGkpOnRoaXMuX2ljb25TZXRDb25maWdzLnNldChlLFtpXSksdGhpc31fc3ZnRWxlbWVudEZyb21Db25maWcoZSl7aWYoIWUuc3ZnRWxlbWVudCl7bGV0IGk9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoZS5zdmdUZXh0KTt0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGksZS5vcHRpb25zKSxlLnN2Z0VsZW1lbnQ9aX1yZXR1cm4gZS5zdmdFbGVtZW50fV9nZXRJY29uQ29uZmlnRnJvbVJlc29sdmVycyhlLGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5fcmVzb2x2ZXJzLmxlbmd0aDtyKyspe2xldCBvPXRoaXMuX3Jlc29sdmVyc1tyXShpLGUpO2lmKG8pcmV0dXJuIEx2ZShvKT9uZXcgRWQoby51cmwsbnVsbCxvLm9wdGlvbnMpOm5ldyBFZChvLG51bGwpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhmZiw4KSxPKG5mKSxPKGt0LDgpLE8oY2EpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiB5RShuKXtyZXR1cm4gbi5jbG9uZU5vZGUoITApfWZ1bmN0aW9uIE5xKG4sdCl7cmV0dXJuIG4rIjoiK3R9ZnVuY3Rpb24gTHZlKG4pe3JldHVybiEoIW4udXJsfHwhbi5vcHRpb25zKX1uZXcgQWEsbmV3IGlkLG5ldyBBYSxuZXcgQWE7dmFyIE52ZT1nbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksQnZlPW5ldyBpZSgiTUFUX0lDT05fREVGQVVMVF9PUFRJT05TIiksVnZlPW5ldyBpZSgibWF0LWljb24tbG9jYXRpb24iLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7bGV0IG49cGkoa3QpLHQ9bj9uLmxvY2F0aW9uOm51bGw7cmV0dXJue2dldFBhdGhuYW1lOigpPT50P3QucGF0aG5hbWUrdC5zZWFyY2g6IiJ9fX0pLEJxPVsiY2xpcC1wYXRoIiwiY29sb3ItcHJvZmlsZSIsInNyYyIsImN1cnNvciIsImZpbGwiLCJmaWx0ZXIiLCJtYXJrZXIiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXItbWlkIiwibWFya2VyLWVuZCIsIm1hc2siLCJzdHJva2UiXSx6dmU9QnEubWFwKG49PmBbJHtufV1gKS5qb2luKCIsICIpLFV2ZT0vXnVybFwoWyciXT8jKC4qPylbJyJdP1wpJC8sRG49KCgpPT57Y2xhc3MgbiBleHRlbmRzIE52ZXtnZXQgaW5saW5lKCl7cmV0dXJuIHRoaXMuX2lubGluZX1zZXQgaW5saW5lKGUpe3RoaXMuX2lubGluZT1VdChlKX1nZXQgc3ZnSWNvbigpe3JldHVybiB0aGlzLl9zdmdJY29ufXNldCBzdmdJY29uKGUpe2UhPT10aGlzLl9zdmdJY29uJiYoZT90aGlzLl91cGRhdGVTdmdJY29uKGUpOnRoaXMuX3N2Z0ljb24mJnRoaXMuX2NsZWFyU3ZnRWxlbWVudCgpLHRoaXMuX3N2Z0ljb249ZSl9Z2V0IGZvbnRTZXQoKXtyZXR1cm4gdGhpcy5fZm9udFNldH1zZXQgZm9udFNldChlKXtsZXQgaT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKGUpO2khPT10aGlzLl9mb250U2V0JiYodGhpcy5fZm9udFNldD1pLHRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpKX1nZXQgZm9udEljb24oKXtyZXR1cm4gdGhpcy5fZm9udEljb259c2V0IGZvbnRJY29uKGUpe2xldCBpPXRoaXMuX2NsZWFudXBGb250VmFsdWUoZSk7aSE9PXRoaXMuX2ZvbnRJY29uJiYodGhpcy5fZm9udEljb249aSx0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe3N1cGVyKGUpLHRoaXMuX2ljb25SZWdpc3RyeT1pLHRoaXMuX2xvY2F0aW9uPW8sdGhpcy5fZXJyb3JIYW5kbGVyPWEsdGhpcy5faW5saW5lPSExLHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzPVtdLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2g9eW4uRU1QVFkscyYmKHMuY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXMuY29sb3IpLHMuZm9udFNldCYmKHRoaXMuZm9udFNldD1zLmZvbnRTZXQpKSxyfHxlLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKX1fc3BsaXRJY29uTmFtZShlKXtpZighZSlyZXR1cm5bIiIsIiJdO2xldCBpPWUuc3BsaXQoIjoiKTtzd2l0Y2goaS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bIiIsaVswXV07Y2FzZSAyOnJldHVybiBpO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYEludmFsaWQgaWNvbiBuYW1lOiAiJHtlfSJgKX19bmdPbkluaXQoKXt0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXtsZXQgZT10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM7aWYoZSYmZS5zaXplKXtsZXQgaT10aGlzLl9sb2NhdGlvbi5nZXRQYXRobmFtZSgpO2khPT10aGlzLl9wcmV2aW91c1BhdGgmJih0aGlzLl9wcmV2aW91c1BhdGg9aSx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhpKSl9fW5nT25EZXN0cm95KCl7dGhpcy5fY3VycmVudEljb25GZXRjaC51bnN1YnNjcmliZSgpLHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCl9X3VzaW5nRm9udEljb24oKXtyZXR1cm4hdGhpcy5zdmdJY29ufV9zZXRTdmdFbGVtZW50KGUpe3RoaXMuX2NsZWFyU3ZnRWxlbWVudCgpO2xldCBpPXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7dGhpcy5fcHJldmlvdXNQYXRoPWksdGhpcy5fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXMoZSksdGhpcy5fcHJlcGVuZFBhdGhUb1JlZmVyZW5jZXMoaSksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGUpfV9jbGVhclN2Z0VsZW1lbnQoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT1lLmNoaWxkTm9kZXMubGVuZ3RoO2Zvcih0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMmJnRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcy5jbGVhcigpO2ktLTspe2xldCByPWUuY2hpbGROb2Rlc1tpXTsoMSE9PXIubm9kZVR5cGV8fCJzdmciPT09ci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSYmci5yZW1vdmUoKX19X3VwZGF0ZUZvbnRJY29uQ2xhc3Nlcygpe2lmKCF0aGlzLl91c2luZ0ZvbnRJY29uKCkpcmV0dXJuO2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPSh0aGlzLmZvbnRTZXQ/dGhpcy5faWNvblJlZ2lzdHJ5LmNsYXNzTmFtZUZvckZvbnRBbGlhcyh0aGlzLmZvbnRTZXQpLnNwbGl0KC8gKy8pOnRoaXMuX2ljb25SZWdpc3RyeS5nZXREZWZhdWx0Rm9udFNldENsYXNzKCkpLmZpbHRlcihyPT5yLmxlbmd0aD4wKTt0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcy5mb3JFYWNoKHI9PmUuY2xhc3NMaXN0LnJlbW92ZShyKSksaS5mb3JFYWNoKHI9PmUuY2xhc3NMaXN0LmFkZChyKSksdGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3M9aSx0aGlzLmZvbnRJY29uIT09dGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiYhaS5pbmNsdWRlcygibWF0LWxpZ2F0dXJlLWZvbnQiKSYmKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmZS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyksdGhpcy5mb250SWNvbiYmZS5jbGFzc0xpc3QuYWRkKHRoaXMuZm9udEljb24pLHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcz10aGlzLmZvbnRJY29uKX1fY2xlYW51cEZvbnRWYWx1ZShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ZS50cmltKCkuc3BsaXQoIiAiKVswXTplfV9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhlKXtsZXQgaT10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM7aSYmaS5mb3JFYWNoKChyLG8pPT57ci5mb3JFYWNoKGE9PntvLnNldEF0dHJpYnV0ZShhLm5hbWUsYHVybCgnJHtlfSMke2EudmFsdWV9JylgKX0pfSl9X2NhY2hlQ2hpbGRyZW5XaXRoRXh0ZXJuYWxSZWZlcmVuY2VzKGUpe2xldCBpPWUucXVlcnlTZWxlY3RvckFsbCh6dmUpLHI9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlc3x8bmV3IE1hcDtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylCcS5mb3JFYWNoKGE9PntsZXQgcz1pW29dLGw9cy5nZXRBdHRyaWJ1dGUoYSksYz1sP2wubWF0Y2goVXZlKTpudWxsO2lmKGMpe2xldCBkPXIuZ2V0KHMpO2R8fChkPVtdLHIuc2V0KHMsZCkpLGQucHVzaCh7bmFtZTphLHZhbHVlOmNbMV19KX19KX1fdXBkYXRlU3ZnSWNvbihlKXtpZih0aGlzLl9zdmdOYW1lc3BhY2U9bnVsbCx0aGlzLl9zdmdOYW1lPW51bGwsdGhpcy5fY3VycmVudEljb25GZXRjaC51bnN1YnNjcmliZSgpLGUpe2xldFtpLHJdPXRoaXMuX3NwbGl0SWNvbk5hbWUoZSk7aSYmKHRoaXMuX3N2Z05hbWVzcGFjZT1pKSxyJiYodGhpcy5fc3ZnTmFtZT1yKSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPXRoaXMuX2ljb25SZWdpc3RyeS5nZXROYW1lZFN2Z0ljb24ocixpKS5waXBlKHp0KDEpKS5zdWJzY3JpYmUobz0+dGhpcy5fc2V0U3ZnRWxlbWVudChvKSxvPT57dGhpcy5fZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKG5ldyBFcnJvcihgRXJyb3IgcmV0cmlldmluZyBpY29uICR7aX06JHtyfSEgJHtvLm1lc3NhZ2V9YCkpfSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKEZnKSxWcigiYXJpYS1oaWRkZW4iKSxDKFZ2ZSksQyhjYSksQyhCdmUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1pY29uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJpbWciLDEsIm1hdC1pY29uIiwibm90cmFuc2xhdGUiXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKFBlKCJkYXRhLW1hdC1pY29uLXR5cGUiLGkuX3VzaW5nRm9udEljb24oKT8iZm9udCI6InN2ZyIpKCJkYXRhLW1hdC1pY29uLW5hbWUiLGkuX3N2Z05hbWV8fGkuZm9udEljb24pKCJkYXRhLW1hdC1pY29uLW5hbWVzcGFjZSIsaS5fc3ZnTmFtZXNwYWNlfHxpLmZvbnRTZXQpKCJmb250SWNvbiIsaS5fdXNpbmdGb250SWNvbigpP2kuZm9udEljb246bnVsbCksUWUoIm1hdC1pY29uLWlubGluZSIsaS5pbmxpbmUpKCJtYXQtaWNvbi1uby1jb2xvciIsInByaW1hcnkiIT09aS5jb2xvciYmImFjY2VudCIhPT1pLmNvbG9yJiYid2FybiIhPT1pLmNvbG9yKSl9LGlucHV0czp7Y29sb3I6ImNvbG9yIixpbmxpbmU6ImlubGluZSIsc3ZnSWNvbjoic3ZnSWNvbiIsZm9udFNldDoiZm9udFNldCIsZm9udEljb246ImZvbnRJY29uIn0sZXhwb3J0QXM6WyJtYXRJY29uIl0sZmVhdHVyZXM6W0xlXSxuZ0NvbnRlbnRTZWxlY3RvcnM6a3ZlLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZ24oKSxYdCgwKSl9LHN0eWxlczpbIi5tYXQtaWNvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1pY29uLm1hdC1pY29uLWlubGluZXtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O3dpZHRoOmluaGVyaXR9Lm1hdC1pY29uLm1hdC1saWdhdHVyZS1mb250W2ZvbnRJY29uXTo6YmVmb3Jle2NvbnRlbnQ6YXR0cihmb250SWNvbil9W2Rpcj1ydGxdIC5tYXQtaWNvbi1ydGwtbWlycm9ye3RyYW5zZm9ybTpzY2FsZSgtMSwgMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG1pPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltRdCxRdF19KSxufSkoKSxqdmU9WyIqIixbWyJtYXQtdG9vbGJhci1yb3ciXV1dLEd2ZT1bIioiLCJtYXQtdG9vbGJhci1yb3ciXSxXdmU9Z28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pLHF2ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRvb2xiYXItcm93Il1dLGhvc3RBdHRyczpbMSwibWF0LXRvb2xiYXItcm93Il0sZXhwb3J0QXM6WyJtYXRUb29sYmFyUm93Il19KSxufSkoKSxWcT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgV3Zle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2RvY3VtZW50PXJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpLHRoaXMuX3Rvb2xiYXJSb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCkpKX1fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcygpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSksQygkbiksQyhrdCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sYmFyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJmNpKHIscXZlLDUpLDImZSl7bGV0IG87d2Uobz1TZSgpKSYmKGkuX3Rvb2xiYXJSb3dzPW8pfX0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZRZSgibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsaS5fdG9vbGJhclJvd3MubGVuZ3RoPjApKCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IiwwPT09aS5fdG9vbGJhclJvd3MubGVuZ3RoKX0saW5wdXRzOntjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXSxmZWF0dXJlczpbTGVdLG5nQ29udGVudFNlbGVjdG9yczpHdmUsZGVjbHM6Mix2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnbihqdmUpLFh0KDApLFh0KDEsMSkpfSxzdHlsZXM6WyIuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbGJhcntvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2xiYXIgLm1hdC1tZGMtYnV0dG9uLWJhc2UubWF0LXVudGhlbWVkey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IGluaGVyaXQ7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IGluaGVyaXR9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJX0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxIcT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbUXQsUXRdfSksbn0pKCk7ZnVuY3Rpb24gY0wobil7cmV0dXJuIG4uc3RhdGUhPT1EZS5OT1RfTE9BREVEJiZuLnN0YXRlIT09RGUuTE9BRElOR312YXIgWHZlPV9yKG03LEVlKEMxLG49PmNMKG4pP3suLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLHJlbG9hZEVuYWJsZWQ6IW4uc2V0dGluZ3MucmVsb2FkRW5hYmxlZH19Om4pLEVlKE0xLChuLHtwZXJpb2RJbk1zOnR9KT0+e2lmKCFjTChuKSlyZXR1cm4gbjtsZXQgZT10Pj0zZTQ/dDpuLnNldHRpbmdzLnJlbG9hZFBlcmlvZEluTXM7cmV0dXJuey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MscmVsb2FkUGVyaW9kSW5NczplfX19KSxFZSh3MSwobix7c2l6ZTp0fSk9PntpZighY0wobikpcmV0dXJuIG47bGV0IGU9dD4wP3Q6bi5zZXR0aW5ncy5wYWdlU2l6ZTtyZXR1cm57Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncyxwYWdlU2l6ZTplfX19KSxFZShTbCwobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3JldHVybiBOdW1iZXIuaXNGaW5pdGUodC5wYWdlU2l6ZSkmJnQucGFnZVNpemU+MCYmKGUucGFnZVNpemU9TnVtYmVyKHQucGFnZVNpemUpKSwiYm9vbGVhbiI9PXR5cGVvZiB0LmF1dG9SZWxvYWQmJihlLnJlbG9hZEVuYWJsZWQ9dC5hdXRvUmVsb2FkKSxOdW1iZXIuaXNGaW5pdGUodC5hdXRvUmVsb2FkUGVyaW9kSW5NcykmJnQuYXV0b1JlbG9hZFBlcmlvZEluTXM+M2U0JiYoZS5yZWxvYWRQZXJpb2RJbk1zPU51bWJlcih0LmF1dG9SZWxvYWRQZXJpb2RJbk1zKSksey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MsLi4uZX19fSkpO2Z1bmN0aW9uIHpxKG4sdCl7cmV0dXJuIFh2ZShuLHQpfXZhciBRdmU9WyJpbnB1dCJdLFp2ZT1bImxhYmVsIl0sS3ZlPVsiKiJdLHVMPW5ldyBpZSgibWF0LWNoZWNrYm94LWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifX19KTt2YXIgSnZlPXtwcm92aWRlOkhyLHVzZUV4aXN0aW5nOlZuKCgpPT50eGUpLG11bHRpOiEwfSwkdmU9MCxVcT17Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifSxleGU9dmQoZ28oUW8oS3IoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSkpLHBMPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBleGV7Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZH1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9VXQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCl7c3VwZXIoaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9uZ1pvbmU9byx0aGlzLl9hbmltYXRpb25Nb2RlPXMsdGhpcy5fb3B0aW9ucz1sLHRoaXMuYXJpYUxhYmVsPSIiLHRoaXMuYXJpYUxhYmVsbGVkYnk9bnVsbCx0aGlzLmxhYmVsUG9zaXRpb249ImFmdGVyIix0aGlzLm5hbWU9bnVsbCx0aGlzLmNoYW5nZT1uZXcgTCx0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2U9bmV3IEwsdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3M9IiIsdGhpcy5fY3VycmVudENoZWNrU3RhdGU9MCx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9jaGVja2VkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX2luZGV0ZXJtaW5hdGU9ITEsdGhpcy5fb3B0aW9ucz10aGlzLl9vcHRpb25zfHxVcSx0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXRoaXMuX29wdGlvbnMuY29sb3J8fFVxLmNvbG9yLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQoYSl8fDAsdGhpcy5pZD10aGlzLl91bmlxdWVJZD1gJHtlfSR7KyskdmV9YH1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKGUpe2xldCBpPVV0KGUpO2khPXRoaXMuY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXtsZXQgaT1VdChlKTtpIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBpbmRldGVybWluYXRlKCl7cmV0dXJuIHRoaXMuX2luZGV0ZXJtaW5hdGV9c2V0IGluZGV0ZXJtaW5hdGUoZSl7bGV0IGk9ZSE9dGhpcy5faW5kZXRlcm1pbmF0ZTt0aGlzLl9pbmRldGVybWluYXRlPVV0KGUpLGkmJih0aGlzLl90cmFuc2l0aW9uQ2hlY2tTdGF0ZSh0aGlzLl9pbmRldGVybWluYXRlPzM6dGhpcy5jaGVja2VkPzE6MiksdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSkpLHRoaXMuX3N5bmNJbmRldGVybWluYXRlKHRoaXMuX2luZGV0ZXJtaW5hdGUpfV9pc1JpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH1fb25MYWJlbFRleHRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmNoZWNrZWQ9ISFlfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfV90cmFuc2l0aW9uQ2hlY2tTdGF0ZShlKXtsZXQgaT10aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZSxyPXRoaXMuX2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKTtpZihpIT09ZSYmciYmKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyYmci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyksdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzPXRoaXMuX2dldEFuaW1hdGlvbkNsYXNzRm9yQ2hlY2tTdGF0ZVRyYW5zaXRpb24oaSxlKSx0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT1lLHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcy5sZW5ndGg+MCkpe3IuY2xhc3NMaXN0LmFkZCh0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MpO2xldCBvPXRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57ci5jbGFzc0xpc3QucmVtb3ZlKG8pfSwxZTMpfSl9fV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMuY2hlY2tlZCksdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCh0aGlzLmNoZWNrZWQpKSx0aGlzLl9pbnB1dEVsZW1lbnQmJih0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkPXRoaXMuY2hlY2tlZCl9dG9nZ2xlKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLmNoZWNrZWQpfV9oYW5kbGVJbnB1dENsaWNrKCl7bGV0IGU9dGhpcy5fb3B0aW9ucz8uY2xpY2tBY3Rpb247dGhpcy5kaXNhYmxlZHx8Im5vb3AiPT09ZT8hdGhpcy5kaXNhYmxlZCYmIm5vb3AiPT09ZSYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9dGhpcy5pbmRldGVybWluYXRlKToodGhpcy5pbmRldGVybWluYXRlJiYiY2hlY2siIT09ZSYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2luZGV0ZXJtaW5hdGU9ITEsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSl9KSx0aGlzLl9jaGVja2VkPSF0aGlzLl9jaGVja2VkLHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2NoZWNrZWQ/MToyKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSl9X29uSW50ZXJhY3Rpb25FdmVudChlKXtlLnN0b3BQcm9wYWdhdGlvbigpfV9vbkJsdXIoKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fb25Ub3VjaGVkKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1fZ2V0QW5pbWF0aW9uQ2xhc3NGb3JDaGVja1N0YXRlVHJhbnNpdGlvbihlLGkpe2lmKCJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlKXJldHVybiIiO3N3aXRjaChlKXtjYXNlIDA6aWYoMT09PWkpcmV0dXJuIHRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9DaGVja2VkO2lmKDM9PWkpcmV0dXJuIHRoaXMuX2NoZWNrZWQ/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5jaGVja2VkVG9JbmRldGVybWluYXRlOnRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9JbmRldGVybWluYXRlO2JyZWFrO2Nhc2UgMjpyZXR1cm4gMT09PWk/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAxOnJldHVybiAyPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb1VuY2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAzOnJldHVybiAxPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmluZGV0ZXJtaW5hdGVUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5pbmRldGVybWluYXRlVG9VbmNoZWNrZWR9cmV0dXJuIiJ9X3N5bmNJbmRldGVybWluYXRlKGUpe2xldCBpPXRoaXMuX2lucHV0RWxlbWVudDtpJiYoaS5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtfbCgpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFllKFF2ZSw1KSxZZShadmUsNSksWWUoRnIsNSkpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkuX2lucHV0RWxlbWVudD1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS5fbGFiZWxFbGVtZW50PXIuZmlyc3QpLHdlKHI9U2UoKSkmJihpLnJpcHBsZT1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0saWQ6ImlkIixyZXF1aXJlZDoicmVxdWlyZWQiLGxhYmVsUG9zaXRpb246ImxhYmVsUG9zaXRpb24iLG5hbWU6Im5hbWUiLHZhbHVlOiJ2YWx1ZSIsY2hlY2tlZDoiY2hlY2tlZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixpbmRldGVybWluYXRlOiJpbmRldGVybWluYXRlIn0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UiLGluZGV0ZXJtaW5hdGVDaGFuZ2U6ImluZGV0ZXJtaW5hdGVDaGFuZ2UifSxmZWF0dXJlczpbTGVdfSksbn0pKCksdHhlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwTHtjb25zdHJ1Y3RvcihlLGkscixvLGEscyl7c3VwZXIoIm1hdC1tZGMtY2hlY2tib3gtIixlLGkscixvLGEscyksdGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcz17dW5jaGVja2VkVG9DaGVja2VkOiJtZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQiLHVuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZToibWRjLWNoZWNrYm94LS1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIixjaGVja2VkVG9VbmNoZWNrZWQ6Im1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLXVuY2hlY2tlZCIsY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZToibWRjLWNoZWNrYm94LS1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSIsaW5kZXRlcm1pbmF0ZVRvQ2hlY2tlZDoibWRjLWNoZWNrYm94LS1hbmltLWluZGV0ZXJtaW5hdGUtY2hlY2tlZCIsaW5kZXRlcm1pbmF0ZVRvVW5jaGVja2VkOiJtZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQifX1mb2N1cygpe3RoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLnNvdXJjZT10aGlzLGkuY2hlY2tlZD1lLGl9X2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50fV9vbklucHV0Q2xpY2soKXtzdXBlci5faGFuZGxlSW5wdXRDbGljaygpfV9vblRvdWNoVGFyZ2V0Q2xpY2soKXtzdXBlci5faGFuZGxlSW5wdXRDbGljaygpLHRoaXMuZGlzYWJsZWR8fHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X3ByZXZlbnRCdWJibGluZ0Zyb21MYWJlbChlKXtlLnRhcmdldCYmdGhpcy5fbGFiZWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpJiZlLnN0b3BQcm9wYWdhdGlvbigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKEZ0KSxDKGF0KSxWcigidGFiaW5kZXgiKSxDKGRpLDgpLEModUwsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtY2hlY2tib3giXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihDbygiaWQiLGkuaWQpLFBlKCJ0YWJpbmRleCIsbnVsbCkoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpLFFlKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtZGMtY2hlY2tib3gtLWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LW1kYy1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1tZGMtY2hlY2tib3gtY2hlY2tlZCIsaS5jaGVja2VkKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdENoZWNrYm94Il0sZmVhdHVyZXM6W1J0KFtKdmVdKSxMZV0sbmdDb250ZW50U2VsZWN0b3JzOkt2ZSxkZWNsczoxNSx2YXJzOjE5LGNvbnN0czpbWzEsIm1kYy1mb3JtLWZpZWxkIiwzLCJjbGljayJdLFsxLCJtZGMtY2hlY2tib3giXSxbImNoZWNrYm94IiwiIl0sWzEsIm1hdC1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0IiwzLCJjbGljayJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sIiwzLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImRpc2FibGVkIiwiaWQiLCJyZXF1aXJlZCIsInRhYkluZGV4IiwiYmx1ciIsImNsaWNrIiwiY2hhbmdlIl0sWyJpbnB1dCIsIiJdLFsxLCJtZGMtY2hlY2tib3hfX3JpcHBsZSJdLFsxLCJtZGMtY2hlY2tib3hfX2JhY2tncm91bmQiXSxbImZvY3VzYWJsZSIsImZhbHNlIiwidmlld0JveCIsIjAgMCAyNCAyNCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWRjLWNoZWNrYm94X19jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwiZCIsIk0xLjczLDEyLjkxIDguMSwxOS4yOCAyMi43OSw0LjU5IiwxLCJtZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoIl0sWzEsIm1kYy1jaGVja2JveF9fbWl4ZWRtYXJrIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtbWRjLWNoZWNrYm94LXJpcHBsZSIsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIiwzLCJtYXRSaXBwbGVUcmlnZ2VyIiwibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCJdLFszLCJmb3IiXSxbImxhYmVsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZ24oKSxoKDAsImRpdiIsMCksRCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9wcmV2ZW50QnViYmxpbmdGcm9tTGFiZWwobyl9KSxoKDEsImRpdiIsMSwyKSgzLCJkaXYiLDMpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9vblRvdWNoVGFyZ2V0Q2xpY2soKX0pLGcoKSxoKDQsImlucHV0Iiw0LDUpLEQoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQmx1cigpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9vbklucHV0Q2xpY2soKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkludGVyYWN0aW9uRXZlbnQobyl9KSxnKCksUCg2LCJkaXYiLDYpLGgoNywiZGl2Iiw3KSxUbigpLGgoOCwic3ZnIiw4KSxQKDksInBhdGgiLDkpLGcoKSxPbygpLFAoMTAsImRpdiIsMTApLGcoKSxQKDExLCJkaXYiLDExKSxnKCksaCgxMiwibGFiZWwiLDEyLDEzKSxYdCgxNCksZygpKCkpLDImZSl7bGV0IHI9dHQoMik7UWUoIm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQiLCJiZWZvcmUiPT1pLmxhYmVsUG9zaXRpb24pLGIoNCksUWUoIm1kYy1jaGVja2JveC0tc2VsZWN0ZWQiLGkuY2hlY2tlZCksXygiY2hlY2tlZCIsaS5jaGVja2VkKSgiaW5kZXRlcm1pbmF0ZSIsaS5pbmRldGVybWluYXRlKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJpZCIsaS5pbnB1dElkKSgicmVxdWlyZWQiLGkucmVxdWlyZWQpKCJ0YWJJbmRleCIsaS50YWJJbmRleCksUGUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpKCJuYW1lIixpLm5hbWUpKCJ2YWx1ZSIsaS52YWx1ZSksYig3KSxfKCJtYXRSaXBwbGVUcmlnZ2VyIixyKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZVJpcHBsZXx8aS5kaXNhYmxlZCkoIm1hdFJpcHBsZUNlbnRlcmVkIiwhMCksYigxKSxfKCJmb3IiLGkuaW5wdXRJZCl9fSxkZXBlbmRlbmNpZXM6W0ZyXSxzdHlsZXM6WycubWRjLXRvdWNoLXRhcmdldC13cmFwcGVye2Rpc3BsYXk6aW5saW5lfUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoezAlLDUwJXtzdHJva2UtZGFzaG9mZnNldDoyOS43ODMzMzg1fTUwJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MH19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrezAlLDY4LjIle3RyYW5zZm9ybTpzY2FsZVgoMCl9NjguMiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMCwgMSl9MTAwJXt0cmFuc2Zvcm06c2NhbGVYKDEpfX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aHtmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSk7b3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjB9dG97b3BhY2l0eTowO3N0cm9rZS1kYXNob2Zmc2V0Oi0yOS43ODMzMzg1fX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO29wYWNpdHk6MX19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bWRjLWFuaW1hdGlvbi1kZWNlbGVyYXRpb24tY3VydmUtdGltaW5nLWZ1bmN0aW9uO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06cm90YXRlKDMxNWRlZyk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1pbmRldGVybWluYXRlLXVuY2hlY2tlZC1taXhlZG1hcmt7MCV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXI7dHJhbnNmb3JtOnNjYWxlWCgxKTtvcGFjaXR5OjF9MzIuOCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVYKDApO29wYWNpdHk6MH19Lm1kYy1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjAgMCAxOHB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7d2lkdGg6MThweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjpib3R0b219Lm1kYy1jaGVja2JveFtoaWRkZW5de2Rpc3BsYXk6bm9uZX0ubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19mb2N1cy1yaW5nLC5tZGMtY2hlY2tib3g6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWNoZWNrYm94X19mb2N1cy1yaW5ne3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZywubWRjLWNoZWNrYm94Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tib3JkZXItY29sb3I6Q2FudmFzVGV4dH19Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZzo6YWZ0ZXIsLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX2ZvY3VzLXJpbmc6OmFmdGVye2NvbnRlbnQ6IiI7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6OHB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDpjYWxjKDEwMCUgKyA0cHgpO3dpZHRoOmNhbGMoMTAwJSArIDRweCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZzo6YWZ0ZXIsLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpey5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tkaXNwbGF5Om5vbmV9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLWNoZWNrYm94X19taXhlZG1hcmt7bWFyZ2luOjAgMXB4fX0ubWRjLWNoZWNrYm94LS1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7ZGlzcGxheTppbmxpbmUtZmxleDtwb3NpdGlvbjphYnNvbHV0ZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MThweDtoZWlnaHQ6MThweDtib3JkZXI6MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7cG9pbnRlci1ldmVudHM6bm9uZTt3aWxsLWNoYW5nZTpiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSxib3JkZXItY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKX0ubWRjLWNoZWNrYm94X19jaGVja21hcmt7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDE4MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2hlY2tib3gtLXVwZ3JhZGVkIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3tvcGFjaXR5OjF9Lm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGh7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAxODBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDozLjEycHg7c3Ryb2tlLWRhc2hvZmZzZXQ6MjkuNzgzMzM4NTtzdHJva2UtZGFzaGFycmF5OjI5Ljc4MzMzODV9Lm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre3dpZHRoOjEwMCU7aGVpZ2h0OjA7dHJhbnNmb3JtOnNjYWxlWCgwKSByb3RhdGUoMGRlZyk7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpLHRyYW5zZm9ybSA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWRjLWNoZWNrYm94LS1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tZHVyYXRpb246MTgwbXM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXJ9Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19jaGVja21hcmstcGF0aHthbmltYXRpb246bWRjLWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoIDE4MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7YW5pbWF0aW9uOm1kYy1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmsgOTBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOm1kYy1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aCA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLWNoZWNrbWFyayA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFyayA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLWNoZWNrbWFyayA1MDBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tZGMtY2hlY2tib3hfX21peGVkbWFya3thbmltYXRpb246bWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmsgNTAwbXMgbGluZWFyIDBzO3RyYW5zaXRpb246bm9uZX0ubWRjLWNoZWNrYm94LS1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX21peGVkbWFya3thbmltYXRpb246bWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFyayAzMDBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSksYmFja2dyb3VuZC1jb2xvciA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpjaGVja2Vkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGgsLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoLC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luOjA7cGFkZGluZzowO29wYWNpdHk6MDtjdXJzb3I6aW5oZXJpdH0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtY2hlY2tib3gtLXRvdWNoe21hcmdpbjpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkpIC8gMil9Lm1kYy1jaGVja2JveC0tdG91Y2ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0MHB4KSAtIHZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0OHB4KSkgLyAyKTtyaWdodDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkpIC8gMik7bGVmdDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkpIC8gMik7d2lkdGg6dmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQ4cHgpO2hlaWdodDp2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCl9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6Y2hlY2tlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3t0cmFuc2l0aW9uOm9wYWNpdHkgMTgwbXMgMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpLHRyYW5zZm9ybSAxODBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7b3BhY2l0eToxfS5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoLTQ1ZGVnKX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3t0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDkwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSksdHJhbnNmb3JtIDkwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSl9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX21peGVkbWFyaywubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV1+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoMGRlZyk7b3BhY2l0eToxfS5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19jaGVja21hcmssLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLXVwZ3JhZGVkIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoLC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNpdGlvbjpub25lfS5tZGMtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1kYy1mb3JtLWZpZWxkW2hpZGRlbl17ZGlzcGxheTpub25lfS5tZGMtZm9ybS1maWVsZD5sYWJlbHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDphdXRvO3BhZGRpbmctbGVmdDo0cHg7cGFkZGluZy1yaWdodDowO29yZGVyOjB9W2Rpcj1ydGxdIC5tZGMtZm9ybS1maWVsZD5sYWJlbCwubWRjLWZvcm0tZmllbGQ+bGFiZWxbZGlyPXJ0bF17bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkPmxhYmVsLC5tZGMtZm9ybS1maWVsZD5sYWJlbFtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjRweH0ubWRjLWZvcm0tZmllbGQtLW5vd3JhcD5sYWJlbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWx7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjRweDtvcmRlcjotMX1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWwsLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWxbZGlyPXJ0bF17bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6YXV0b31bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWwsLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWxbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjRweDtwYWRkaW5nLXJpZ2h0OjB9Lm1kYy1mb3JtLWZpZWxkLS1zcGFjZS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tZGMtZm9ybS1maWVsZC0tc3BhY2UtYmV0d2Vlbj5sYWJlbHttYXJnaW46MH1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1zcGFjZS1iZXR3ZWVuPmxhYmVsLC5tZGMtZm9ybS1maWVsZC0tc3BhY2UtYmV0d2Vlbj5sYWJlbFtkaXI9cnRsXXttYXJnaW46MH0ubWF0LW1kYy1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94e3BhZGRpbmc6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKTttYXJnaW46Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGlzYWJsZWRdOm5vdCg6Y2hlY2tlZCk6bm90KDppbmRldGVybWluYXRlKTpub3QoW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXSl+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2Rpc2FibGVkXTpjaGVja2Vkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkaXNhYmxlZF06aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdW2Rpc2FibGVkXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19jaGVja21hcmt7Y29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvciwgI2ZmZil9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yLCAjZmZmKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmRpc2FibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2NvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3IsICNmZmYpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZGlzYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3IsICNmZmYpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3IsIHJnYmEoMCwgMCwgMCwgMC41NCkpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLThBMDAwMDAwRkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2ezAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fTUwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX0xMDAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2FuaW1hdGlvbi1uYW1lOm1kYy1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tbmFtZTptZGMtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZC04QTAwMDAwMEZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6Y2hlY2tlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpob3ZlciAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fTUwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX0xMDAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH19Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpob3Zlci5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIubWRjLWNoZWNrYm94LS1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tbmFtZTptZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLUZGMDE4Nzg2RkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2fS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIubWRjLWNoZWNrYm94LS1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmluZGV0ZXJtaW5hdGV+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXTplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpfUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4NnswJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9NTAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4NnswJSw4MCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpfTEwMCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZC5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZC5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoOmRpc2FibGVkKTphY3RpdmUgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjU0KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmluZGV0ZXJtaW5hdGV+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLThBMDAwMDAwRkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2ezAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3IsIHJnYmEoMCwgMCwgMCwgMC41NCkpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9NTAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9MTAwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZS5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KDpkaXNhYmxlZCk6YWN0aXZlLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC04QTAwMDAwMEZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZS5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KDpkaXNhYmxlZCk6YWN0aXZlLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9se3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkpIC8gMik7cmlnaHQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpO3dpZHRoOnZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0MHB4KTtoZWlnaHQ6dmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6bm90KFtkaXNhYmxlZF0pfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtvcGFjaXR5Oi4wNDt0cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNpdGlvbjpvcGFjaXR5IDgwbXMgMCBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSx0cmFuc2Zvcm0gODBtcyAwIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6bm90KFtkaXNhYmxlZF0pOmZvY3Vzfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtvcGFjaXR5Oi4xNn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5key13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0ubWF0LW1kYy1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAqLC5tYXQtbWRjLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlICo6OmJlZm9yZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWNoZWNrYm94IGxhYmVse2N1cnNvcjpwb2ludGVyfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1tZGMtY2hlY2tib3gtZGlzYWJsZWQgbGFiZWx7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1tZGMtY2hlY2tib3ggbGFiZWw6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmZvY3VzOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCBibGFjayl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1jaGVja2JveC5tYXQtbWRjLWNoZWNrYm94LWRpc2FibGVke29wYWNpdHk6LjV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19jaGVja21hcmt7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiBDYW52YXNUZXh0Oy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjogQ2FudmFzVGV4dH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19yaXBwbGV7b3BhY2l0eTowfS5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSwubWRjLWNoZWNrYm94X19yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1jaGVja2JveC1yaXBwbGU6bm90KDplbXB0eSksLm1kYy1jaGVja2JveF9fcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LW1kYy1jaGVja2JveC1yaXBwbGU6OmJlZm9yZXtib3JkZXItcmFkaXVzOjUwJX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpmb2N1c34ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG54ZT17cHJvdmlkZTpTbyx1c2VFeGlzdGluZzpWbigoKT0+aXhlKSxtdWx0aTohMH0saXhlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBzTHt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOltSdChbbnhlXSksTGVdfSksbn0pKCksZkw9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe30pLG59KSgpLHJ4ZT1mdW5jdGlvbihuKXtyZXR1cm57ZW50ZXJEdXJhdGlvbjpufX0sb3hlPVsiKiJdLGF4ZT17cHJvdmlkZTpIcix1c2VFeGlzdGluZzpWbigoKT0+SGwpLG11bHRpOiEwfSxIbD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcEx7Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCl7c3VwZXIoIm1hdC1jaGVja2JveC0iLGUsaSxvLGEscyxsKSx0aGlzLl9mb2N1c01vbml0b3I9cix0aGlzLl9hbmltYXRpb25DbGFzc2VzPXt1bmNoZWNrZWRUb0NoZWNrZWQ6Im1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1jaGVja2VkIix1bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU6Im1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIixjaGVja2VkVG9VbmNoZWNrZWQ6Im1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIixjaGVja2VkVG9JbmRldGVybWluYXRlOiJtYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUiLGluZGV0ZXJtaW5hdGVUb0NoZWNrZWQ6Im1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtY2hlY2tlZCIsaW5kZXRlcm1pbmF0ZVRvVW5jaGVja2VkOiJtYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCJ9fV9jcmVhdGVDaGFuZ2VFdmVudChlKXtsZXQgaT1uZXcgY2xhc3N7fTtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLmNoZWNrZWQ9ZSxpfV9nZXRBbmltYXRpb25UYXJnZXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1uZ0FmdGVyVmlld0luaXQoKXtzdXBlci5uZ0FmdGVyVmlld0luaXQoKSx0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoZT0+e2V8fHRoaXMuX29uQmx1cigpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZil9X29uSW5wdXRDbGljayhlKXtlLnN0b3BQcm9wYWdhdGlvbigpLHN1cGVyLl9oYW5kbGVJbnB1dENsaWNrKCl9Zm9jdXMoZSxpKXtlP3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9pbnB1dEVsZW1lbnQsZSxpKTp0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSksQyhGdCksQyhsciksQyhhdCksVnIoInRhYmluZGV4IiksQyhkaSw4KSxDKHVMLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giXV0saG9zdEF0dHJzOlsxLCJtYXQtY2hlY2tib3giXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihDbygiaWQiLGkuaWQpLFBlKCJ0YWJpbmRleCIsbnVsbCkoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpLFFlKCJtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSIsaS5pbmRldGVybWluYXRlKSgibWF0LWNoZWNrYm94LWNoZWNrZWQiLGkuY2hlY2tlZCkoIm1hdC1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUiLCJiZWZvcmUiPT1pLmxhYmVsUG9zaXRpb24pKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0Q2hlY2tib3giXSxmZWF0dXJlczpbUnQoW2F4ZV0pLExlXSxuZ0NvbnRlbnRTZWxlY3RvcnM6b3hlLGRlY2xzOjE3LHZhcnM6MjAsY29uc3RzOltbMSwibWF0LWNoZWNrYm94LWxheW91dCJdLFsibGFiZWwiLCIiXSxbMSwibWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtYXQtY2hlY2tib3gtaW5wdXQiLCJjZGstdmlzdWFsbHktaGlkZGVuIiwzLCJpZCIsInJlcXVpcmVkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwidGFiSW5kZXgiLCJjaGFuZ2UiLCJjbGljayJdLFsiaW5wdXQiLCIiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWNoZWNrYm94LXJpcHBsZSIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVJhZGl1cyIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlQW5pbWF0aW9uIl0sWzEsIm1hdC1yaXBwbGUtZWxlbWVudCIsIm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtYXQtY2hlY2tib3gtZnJhbWUiXSxbMSwibWF0LWNoZWNrYm94LWJhY2tncm91bmQiXSxbInZlcnNpb24iLCIxLjEiLCJmb2N1c2FibGUiLCJmYWxzZSIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1hdC1jaGVja2JveC1jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwic3Ryb2tlIiwid2hpdGUiLCJkIiwiTTQuMSwxMi43IDksMTcuNiAyMC4zLDYuMyIsMSwibWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIl0sWzEsIm1hdC1jaGVja2JveC1taXhlZG1hcmsiXSxbMSwibWF0LWNoZWNrYm94LWxhYmVsIiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsiY2hlY2tib3hMYWJlbCIsIiJdLFsyLCJkaXNwbGF5Iiwibm9uZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGduKCksaCgwLCJsYWJlbCIsMCwxKSgyLCJzcGFuIiwyKSgzLCJpbnB1dCIsMyw0KSxEKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkludGVyYWN0aW9uRXZlbnQobyl9KSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbklucHV0Q2xpY2sobyl9KSxnKCksaCg1LCJzcGFuIiw1KSxQKDYsInNwYW4iLDYpLGcoKSxQKDcsInNwYW4iLDcpLGgoOCwic3BhbiIsOCksVG4oKSxoKDksInN2ZyIsOSksUCgxMCwicGF0aCIsMTApLGcoKSxPbygpLFAoMTEsInNwYW4iLDExKSxnKCkoKSxoKDEyLCJzcGFuIiwxMiwxMyksRCgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uTGFiZWxUZXh0Q2hhbmdlKCl9KSxoKDE0LCJzcGFuIiwxNCksVCgxNSwiXHhhMCIpLGcoKSxYdCgxNiksZygpKCkpLDImZSl7bGV0IHI9dHQoMSksbz10dCgxMyk7UGUoImZvciIsaS5pbnB1dElkKSxiKDIpLFFlKCJtYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2luIiwhby50ZXh0Q29udGVudHx8IW8udGV4dENvbnRlbnQudHJpbSgpKSxiKDEpLF8oImlkIixpLmlucHV0SWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCkoImNoZWNrZWQiLGkuY2hlY2tlZCkoImRpc2FibGVkIixpLmRpc2FibGVkKSgidGFiSW5kZXgiLGkudGFiSW5kZXgpLFBlKCJ2YWx1ZSIsaS52YWx1ZSkoIm5hbWUiLGkubmFtZSkoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpLGIoMiksXygibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVSYWRpdXMiLDIwKSgibWF0UmlwcGxlQ2VudGVyZWQiLCEwKSgibWF0UmlwcGxlQW5pbWF0aW9uIixTbigxOCxyeGUsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGU/MDoxNTApKX19LGRlcGVuZGVuY2llczpbRnIscGddLHN0eWxlczpbJ0BrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZHswJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6MX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZHswJSw1MCV7b3BhY2l0eToxfTEwMCV7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtY2hlY2tlZC1jaGVja21hcmstcGF0aHswJSw1MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjIuOTEwMjU5fTUwJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7MCUsNjguMiV7dHJhbnNmb3JtOnNjYWxlWCgwKX02OC4yJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLCAxKX0xMDAle3RyYW5zZm9ybTpzY2FsZVgoMSl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtdW5jaGVja2VkLWNoZWNrbWFyay1wYXRoe2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKTtzdHJva2UtZGFzaG9mZnNldDowfXRve3N0cm9rZS1kYXNob2Zmc2V0Oi0yMi45MTAyNTl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4xNCwgMCwgMCwgMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMTQsIDAsIDAsIDEpO29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDMxNWRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya3swJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcjtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKX0zMi44JSwxMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApfX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1mcmFtZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSl7b3BhY2l0eTouMTZ9Lm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7dG9wOmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94LWxheW91dHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6aW5oZXJpdDthbGlnbi1pdGVtczpiYXNlbGluZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC1jaGVja2JveC1sYWJlbHstd2Via2l0LXVzZXItc2VsZWN0OmF1dG87dXNlci1zZWxlY3Q6YXV0b30ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDowO21hcmdpbjphdXRvO21hcmdpbi1yaWdodDo4cHg7b3JkZXI6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjE2cHg7ZmxleC1zaHJpbms6MH1bZGlyPXJ0bF0gLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2lue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1jaGVja2JveC1mcmFtZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOnNvbGlkfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWZyYW1le3RyYW5zaXRpb246bm9uZX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLG9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpOy13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3ggLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6bm9uZX0ubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0cmFuc2Zvcm06bm9uZX0ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjA0fS5tYXQtY2hlY2tib3guY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4xMn0ubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtY2hlY2tib3gubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTowfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCV9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDoyMi45MTAyNTk7c3Ryb2tlLWRhc2hhcnJheToyMi45MTAyNTk7c3Ryb2tlLXdpZHRoOjIuMTMzMzMzMzMzM3B4fS5jZGstaGlnaC1jb250cmFzdC1ibGFjay1vbi13aGl0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7d2lkdGg6Y2FsYygxMDAlIC0gNnB4KTtoZWlnaHQ6MnB4O29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApIHJvdGF0ZSgwZGVnKTtib3JkZXItcmFkaXVzOjJweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O21hcmdpbi10b3A6MnB4fS5tYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye29yZGVyOjE7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4cHh9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre29wYWNpdHk6MX0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3t0cmFuc2Zvcm06c2NhbGVYKDEpIHJvdGF0ZSgtNDVkZWcpfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZVgoMSkgcm90YXRlKDBkZWcpfS5tYXQtY2hlY2tib3gtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRofS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo1MDBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjMwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWlucHV0e2JvdHRvbTowO2xlZnQ6NTAlfS5tYXQtY2hlY2tib3gtaW5wdXQ6Zm9jdXN+Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFd1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltabyxRdCxQdSxmTCxRdCxmTF19KSxufSkoKSxHcT1Zbyh7cGFzc2l2ZTohMH0pLFdxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzPW5ldyBNYXB9bW9uaXRvcihlKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiB0bztsZXQgaT1WYShlKSxyPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChpKTtpZihyKXJldHVybiByLnN1YmplY3Q7bGV0IG89bmV3IEFlLGE9ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiLHM9bD0+eyJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCIhPT1sLmFuaW1hdGlvbk5hbWV8fGkuY2xhc3NMaXN0LmNvbnRhaW5zKGEpPyJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQiPT09bC5hbmltYXRpb25OYW1lJiZpLmNsYXNzTGlzdC5jb250YWlucyhhKSYmKGkuY2xhc3NMaXN0LnJlbW92ZShhKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT5vLm5leHQoe3RhcmdldDpsLnRhcmdldCxpc0F1dG9maWxsZWQ6ITF9KSkpOihpLmNsYXNzTGlzdC5hZGQoYSksdGhpcy5fbmdab25lLnJ1bigoKT0+by5uZXh0KHt0YXJnZXQ6bC50YXJnZXQsaXNBdXRvZmlsbGVkOiEwfSkpKX07cmV0dXJuIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2kuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLHMsR3EpLGkuY2xhc3NMaXN0LmFkZCgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIil9KSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5zZXQoaSx7c3ViamVjdDpvLHVubGlzdGVuOigpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIscyxHcSl9fSksb31zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1WYShlKSxyPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChpKTtyJiYoci51bmxpc3RlbigpLHIuc3ViamVjdC5jb21wbGV0ZSgpLGkuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIiksaS5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZGVsZXRlKGkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vbml0b3JlZEVsZW1lbnRzLmZvckVhY2goKGUsaSk9PnRoaXMuc3RvcE1vbml0b3JpbmcoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKCRuKSxPKGF0KSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksaEw9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe30pLG59KSgpLGx4ZT1uZXcgaWUoIk1BVF9JTlBVVF9WQUxVRV9BQ0NFU1NPUiIpLGN4ZT1bImJ1dHRvbiIsImNoZWNrYm94IiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic3VibWl0Il0sZHhlPTAsdXhlPVViKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkpe3RoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj1uLHRoaXMuX3BhcmVudEZvcm09dCx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9ZSx0aGlzLm5nQ29udHJvbD1pLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBBZX19KSxxcT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdXhle2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9VXQoZSksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChlKXt0aGlzLl9pZD1lfHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkPz90aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFZsLnJlcXVpcmVkKT8/ITF9c2V0IHJlcXVpcmVkKGUpe3RoaXMuX3JlcXVpcmVkPVV0KGUpfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX3R5cGV9c2V0IHR5cGUoZSl7dGhpcy5fdHlwZT1lfHwidGV4dCIsdGhpcy5fdmFsaWRhdGVUeXBlKCksIXRoaXMuX2lzVGV4dGFyZWEmJnMyKCkuaGFzKHRoaXMuX3R5cGUpJiYodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnR5cGU9dGhpcy5fdHlwZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX1zZXQgdmFsdWUoZSl7ZSE9PXRoaXMudmFsdWUmJih0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfWdldCByZWFkb25seSgpe3JldHVybiB0aGlzLl9yZWFkb25seX1zZXQgcmVhZG9ubHkoZSl7dGhpcy5fcmVhZG9ubHk9VXQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjLGQsdSl7c3VwZXIocyxvLGEsciksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX3BsYXRmb3JtPWksdGhpcy5fYXV0b2ZpbGxNb25pdG9yPWMsdGhpcy5fZm9ybUZpZWxkPXUsdGhpcy5fdWlkPSJtYXQtaW5wdXQtIitkeGUrKyx0aGlzLmZvY3VzZWQ9ITEsdGhpcy5zdGF0ZUNoYW5nZXM9bmV3IEFlLHRoaXMuY29udHJvbFR5cGU9Im1hdC1pbnB1dCIsdGhpcy5hdXRvZmlsbGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3R5cGU9InRleHQiLHRoaXMuX3JlYWRvbmx5PSExLHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzPVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIl0uZmlsdGVyKG09PnMyKCkuaGFzKG0pKSx0aGlzLl9pT1NLZXl1cExpc3RlbmVyPW09PntsZXQgeT1tLnRhcmdldDsheS52YWx1ZSYmMD09PXkuc2VsZWN0aW9uU3RhcnQmJjA9PT15LnNlbGVjdGlvbkVuZCYmKHkuc2V0U2VsZWN0aW9uUmFuZ2UoMSwxKSx5LnNldFNlbGVjdGlvblJhbmdlKDAsMCkpfTtsZXQgcD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZj1wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yPWx8fHAsdGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT10aGlzLnZhbHVlLHRoaXMuaWQ9dGhpcy5pZCxpLklPUyYmZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2UubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5faU9TS2V5dXBMaXN0ZW5lcil9KSx0aGlzLl9pc1NlcnZlcj0hdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyLHRoaXMuX2lzTmF0aXZlU2VsZWN0PSJzZWxlY3QiPT09Zix0aGlzLl9pc1RleHRhcmVhPSJ0ZXh0YXJlYSI9PT1mLHRoaXMuX2lzSW5Gb3JtRmllbGQ9ISF1LHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYodGhpcy5jb250cm9sVHlwZT1wLm11bHRpcGxlPyJtYXQtbmF0aXZlLXNlbGVjdC1tdWx0aXBsZSI6Im1hdC1uYXRpdmUtc2VsZWN0Iil9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShlPT57dGhpcy5hdXRvZmlsbGVkPWUuaXNBdXRvZmlsbGVkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX1uZ0RvQ2hlY2soKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpLG51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZCYmdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQhPT10aGlzLmRpc2FibGVkJiYodGhpcy5kaXNhYmxlZD10aGlzLm5nQ29udHJvbC5kaXNhYmxlZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpKSx0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKSx0aGlzLl9kaXJ0eUNoZWNrUGxhY2Vob2xkZXIoKX1mb2N1cyhlKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X2ZvY3VzQ2hhbmdlZChlKXtlIT09dGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25JbnB1dCgpe31fZGlydHlDaGVja05hdGl2ZVZhbHVlKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO3RoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUhPT1lJiYodGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X2RpcnR5Q2hlY2tQbGFjZWhvbGRlcigpe2xldCBlPXRoaXMuX2dldFBsYWNlaG9sZGVyKCk7aWYoZSE9PXRoaXMuX3ByZXZpb3VzUGxhY2Vob2xkZXIpe2xldCBpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl9wcmV2aW91c1BsYWNlaG9sZGVyPWUsZT9pLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLGUpOmkucmVtb3ZlQXR0cmlidXRlKCJwbGFjZWhvbGRlciIpfX1fZ2V0UGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnx8bnVsbH1fdmFsaWRhdGVUeXBlKCl7Y3hlLmluZGV4T2YodGhpcy5fdHlwZSl9X2lzTmV2ZXJFbXB0eSgpe3JldHVybiB0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcy5pbmRleE9mKHRoaXMuX3R5cGUpPi0xfV9pc0JhZElucHV0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbGlkaXR5O3JldHVybiBlJiZlLmJhZElucHV0fWdldCBlbXB0eSgpe3JldHVybiEodGhpcy5faXNOZXZlckVtcHR5KCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZXx8dGhpcy5faXNCYWRJbnB1dCgpfHx0aGlzLmF1dG9maWxsZWQpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7aWYodGhpcy5faXNOYXRpdmVTZWxlY3Qpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUub3B0aW9uc1swXTtyZXR1cm4gdGhpcy5mb2N1c2VkfHxlLm11bHRpcGxlfHwhdGhpcy5lbXB0eXx8ISEoZS5zZWxlY3RlZEluZGV4Pi0xJiZpJiZpLmxhYmVsKX1yZXR1cm4gdGhpcy5mb2N1c2VkfHwhdGhpcy5lbXB0eX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzZWR8fHRoaXMuZm9jdXMoKX1faXNJbmxpbmVTZWxlY3QoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYoZS5tdWx0aXBsZXx8ZS5zaXplPjEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKCRuKSxDKHphLDEwKSxDKEFnLDgpLEMoUmcsOCksQyhJZiksQyhseGUsMTApLEMoV3EpLEMoYXQpLEMoQmwsOCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdElucHV0IiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdElucHV0IiwiIl0sWyJzZWxlY3QiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJpbnB1dCIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXSxbInRleHRhcmVhIiwibWF0TmF0aXZlQ29udHJvbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtaW5wdXQtZWxlbWVudCJdLGhvc3RWYXJzOjE4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZCghMCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fZm9jdXNDaGFuZ2VkKCExKX0pKCJpbnB1dCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25JbnB1dCgpfSksMiZlJiYoQ28oImlkIixpLmlkKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCksUGUoIm5hbWUiLGkubmFtZXx8bnVsbCkoInJlYWRvbmx5IixpLnJlYWRvbmx5JiYhaS5faXNOYXRpdmVTZWxlY3R8fG51bGwpKCJhcmlhLWludmFsaWQiLGkuZW1wdHkmJmkucmVxdWlyZWQ/bnVsbDppLmVycm9yU3RhdGUpKCJhcmlhLXJlcXVpcmVkIixpLnJlcXVpcmVkKSgiaWQiLGkuaWQpLFFlKCJtYXQtaW5wdXQtc2VydmVyIixpLl9pc1NlcnZlcikoIm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0YXJlYS1jb250cm9sIixpLl9pc0luRm9ybUZpZWxkJiZpLl9pc1RleHRhcmVhKSgibWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2wiLGkuX2lzSW5Gb3JtRmllbGQpKCJtZGMtdGV4dC1maWVsZF9faW5wdXQiLGkuX2lzSW5Gb3JtRmllbGQpKCJtYXQtbWRjLW5hdGl2ZS1zZWxlY3QtaW5saW5lIixpLl9pc0lubGluZVNlbGVjdCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDoiaWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsbmFtZToibmFtZSIscmVxdWlyZWQ6InJlcXVpcmVkIix0eXBlOiJ0eXBlIixlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHVzZXJBcmlhRGVzY3JpYmVkQnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwidXNlckFyaWFEZXNjcmliZWRCeSJdLHZhbHVlOiJ2YWx1ZSIscmVhZG9ubHk6InJlYWRvbmx5In0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdLGZlYXR1cmVzOltSdChbe3Byb3ZpZGU6TmwsdXNlRXhpc3Rpbmc6bn1dKSxMZSxHdF19KSxufSkoKSxxdT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcXF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2xlZ2FjeUZvcm1GaWVsZD1waShCbCx7b3B0aW9uYWw6ITB9KX1fZ2V0UGxhY2Vob2xkZXIoKXtsZXQgZT10aGlzLl9sZWdhY3lGb3JtRmllbGQ7cmV0dXJuIGUmJiJsZWdhY3kiPT09ZS5hcHBlYXJhbmNlJiYhZS5faGFzTGFiZWw/LigpP251bGw6dGhpcy5wbGFjZWhvbGRlcn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdElucHV0IiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdElucHV0IiwiIl0sWyJzZWxlY3QiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJpbnB1dCIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXSxbInRleHRhcmVhIiwibWF0TmF0aXZlQ29udHJvbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1pbnB1dC1lbGVtZW50IiwibWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbCJdLGhvc3RWYXJzOjE1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKFBlKCJkYXRhLXBsYWNlaG9sZGVyIixpLnBsYWNlaG9sZGVyKSxRZSgibWF0LWlucHV0LXNlcnZlciIsaS5faXNTZXJ2ZXIpKCJtYXQtbWRjLWlucHV0LWVsZW1lbnQiLCExKSgibWF0LW1kYy1mb3JtLWZpZWxkLXRleHRhcmVhLWNvbnRyb2wiLCExKSgibWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2wiLCExKSgibWRjLXRleHQtZmllbGRfX2lucHV0IiwhMSkoIm1hdC1tZGMtbmF0aXZlLXNlbGVjdC1pbmxpbmUiLCExKSgibWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lIixpLl9pc0lubGluZVNlbGVjdCgpKSl9LGV4cG9ydEFzOlsibWF0SW5wdXQiXSxmZWF0dXJlczpbUnQoW3twcm92aWRlOk5sLHVzZUV4aXN0aW5nOm59XSksTGVdfSksbn0pKCksUXM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbSWZdLGltcG9ydHM6W2hMLFZmLFF0LGhMLFZmXX0pLG59KSgpO2Z1bmN0aW9uIHB4ZShuLHQpe2lmKDEmbiYmKGgoMCwibWF0LWVycm9yIiksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO2IoMSksemUoIiBSZWxvYWQgcGVyaW9kIGhhcyB0byBiZSBtaW5pbXVtIG9mICIsZS5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLCIgc2Vjb25kcy4gIil9fWZ1bmN0aW9uIGZ4ZShuLHQpezEmbiYmKGgoMCwibWF0LWVycm9yIiksVCgxLCIgUGFnZSBzaXplIGhhcyB0byBiZSBhIHBvc2l0aXZlIGludGVnZXIuICIpLGcoKSl9dmFyIFlxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnJlbG9hZFRvZ2dsZWQ9bmV3IEwsdGhpcy5yZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZD1uZXcgTCx0aGlzLnBhZ2VTaXplQ2hhbmdlZD1uZXcgTCx0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1M9MzAsdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sPW5ldyBydih0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MsW1ZsLnJlcXVpcmVkLFZsLm1pbih0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MpXSksdGhpcy5wYWdpbmF0aW9uQ29udHJvbD1uZXcgcnYoMSxbVmwucmVxdWlyZWQsVmwubWluKDEpLG49PntsZXQgdD1OdW1iZXIobi52YWx1ZSk7cmV0dXJuIE1hdGgucm91bmQodCk9PT1uLnZhbHVlP251bGw6e2ludGVnZXI6e3ZhbHVlOm4udmFsdWV9fX1dKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEFlfW5nT25Jbml0KCl7dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksQ3IoNTAwKSxWZSgoKT0+dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbGlkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbGlkJiZ0aGlzLnJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkLmVtaXQoMWUzKnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWx1ZSl9KSx0aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksQ3IoNTAwKSxWZSgoKT0+dGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWxpZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMucGFnZVNpemVDaGFuZ2VkLmVtaXQodGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWx1ZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5yZWxvYWRQZXJpb2RJbk1zKXtsZXQgaT1lLnJlbG9hZFBlcmlvZEluTXM7aS5wcmV2aW91c1ZhbHVlIT09aS5jdXJyZW50VmFsdWUmJnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5zZXRWYWx1ZShpLmN1cnJlbnRWYWx1ZS8xZTMpfWlmKGUucmVsb2FkRW5hYmxlZCYmKGUucmVsb2FkRW5hYmxlZC5jdXJyZW50VmFsdWU/dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLmVuYWJsZSgpOnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5kaXNhYmxlKCkpLGUucGFnZVNpemUpe2xldCBpPWUucGFnZVNpemU7aS5wcmV2aW91c1ZhbHVlIT09aS5jdXJyZW50VmFsdWUmJnRoaXMucGFnaW5hdGlvbkNvbnRyb2wuc2V0VmFsdWUoaS5jdXJyZW50VmFsdWUpfX1vblJlbG9hZFRvZ2dsZSgpe3RoaXMucmVsb2FkVG9nZ2xlZC5lbWl0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiXV0saW5wdXRzOntyZWxvYWRFbmFibGVkOiJyZWxvYWRFbmFibGVkIixyZWxvYWRQZXJpb2RJbk1zOiJyZWxvYWRQZXJpb2RJbk1zIixwYWdlU2l6ZToicGFnZVNpemUifSxvdXRwdXRzOntyZWxvYWRUb2dnbGVkOiJyZWxvYWRUb2dnbGVkIixyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZDoicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLHBhZ2VTaXplQ2hhbmdlZDoicGFnZVNpemVDaGFuZ2VkIn0sZmVhdHVyZXM6W0d0XSxkZWNsczoxNCx2YXJzOjUsY29uc3RzOltbMSwicmVsb2FkLXRvZ2dsZSJdLFszLCJjaGVja2VkIiwiY2hhbmdlIl0sWyJtYXRJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJwbGFjZWhvbGRlciIsIlJlbG9hZCBQZXJpb2QgKHNlY29uZHMpIiwxLCJyZWxvYWQtcGVyaW9kIiwzLCJmb3JtQ29udHJvbCJdLFs0LCJuZ0lmIl0sWyJtYXRJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJwbGFjZWhvbGRlciIsIlBhZ2luYXRpb24gTGltaXQiLDEsInBhZ2Utc2l6ZSIsMywiZm9ybUNvbnRyb2wiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImgzIiksVCgxLCJTZXR0aW5ncyIpLGcoKSxoKDIsImRpdiIpKDMsImRpdiIsMCkoNCwibWF0LWNoZWNrYm94IiwxKSxEKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGUoKX0pLFQoNSwiUmVsb2FkIGRhdGEiKSxnKCkoKSxoKDYsImRpdiIpKDcsIm1hdC1mb3JtLWZpZWxkIiksUCg4LCJpbnB1dCIsMiksZygpLFMoOSxweGUsMiwxLCJtYXQtZXJyb3IiLDMpLGcoKSgpLGgoMTAsImRpdiIpKDExLCJtYXQtZm9ybS1maWVsZCIpLFAoMTIsImlucHV0Iiw0KSxnKCksUygxMyxmeGUsMiwwLCJtYXQtZXJyb3IiLDMpLGcoKSksMiZlJiYoYig0KSxfKCJjaGVja2VkIixpLnJlbG9hZEVuYWJsZWQpLGIoNCksXygiZm9ybUNvbnRyb2wiLGkucmVsb2FkUGVyaW9kQ29udHJvbCksYigxKSxfKCJuZ0lmIixpLnJlbG9hZFBlcmlvZENvbnRyb2wuaGFzRXJyb3IoIm1pbiIpfHxpLnJlbG9hZFBlcmlvZENvbnRyb2wuaGFzRXJyb3IoInJlcXVpcmVkIikpLGIoMyksXygiZm9ybUNvbnRyb2wiLGkucGFnaW5hdGlvbkNvbnRyb2wpLGIoMSksXygibmdJZiIsaS5wYWdpbmF0aW9uQ29udHJvbC5pbnZhbGlkKSl9LGRlcGVuZGVuY2llczpbRmUsSWcsckwscEUsYUwsSGwsdzksWXMscXVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICBmb250LXNpemU6IDE1cHg7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgPiBkaXZbX25nY29udGVudC0lQ09NUCVdIHtcbiAgbWFyZ2luOiAxMHB4IDA7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgPiBbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICA+IFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbmgzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbn1cblxuLnJlbG9hZC10b2dnbGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn0iXX0pLG59KSgpLFhxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoT2IpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoRmIpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUuc2VsZWN0KFNmKX1vblJlbG9hZFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEMxKCkpfW9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChNMSh7cGVyaW9kSW5NczplfSkpfW9uUGFnZVNpemVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2godzEoe3NpemU6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNldHRpbmdzLWRpYWxvZyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJyZWxvYWRFbmFibGVkIiwicmVsb2FkUGVyaW9kSW5NcyIsInBhZ2VTaXplIiwicmVsb2FkVG9nZ2xlZCIsInJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIiwicGFnZVNpemVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJzZXR0aW5ncy1kaWFsb2ctY29tcG9uZW50IiwwKSxEKCJyZWxvYWRUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVsb2FkVG9nZ2xlZCgpfSkoInJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkKG8pfSkoInBhZ2VTaXplQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdlU2l6ZUNoYW5nZWQobyl9KSxHKDEsImFzeW5jIiksRygyLCJhc3luYyIpLEcoMywiYXN5bmMiKSxnKCkpLDImZSYmXygicmVsb2FkRW5hYmxlZCIsVygxLDMsaS5yZWxvYWRFbmFibGVkJCkpKCJyZWxvYWRQZXJpb2RJbk1zIixXKDIsNSxpLnJlbG9hZFBlcmlvZEluTXMkKSkoInBhZ2VTaXplIixXKDMsNyxpLnBhZ2VTaXplJCkpfSxkZXBlbmRlbmNpZXM6W1lxLGx0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlhbG9nPWV9aXNCdXR0b25EaXNhYmxlZCgpe3JldHVybiB0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09RGUuTk9UX0xPQURFRHx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PURlLkxPQURJTkd9b3BlbkRpYWxvZygpe3RoaXMuZGlhbG9nLm9wZW4oWHEse3dpZHRoOiI0MDBweCJ9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhMbCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNldHRpbmdzLWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntzZXR0aW5nc0xvYWRTdGF0ZToic2V0dGluZ3NMb2FkU3RhdGUifSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3NfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiYnV0dG9uIiwwKSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vcGVuRGlhbG9nKCl9KSxQKDEsIm1hdC1pY29uIiwxKSxnKCkpLDImZSYmXygiZGlzYWJsZWQiLGkuaXNCdXR0b25EaXNhYmxlZCgpKX0sZGVwZW5kZW5jaWVzOltGbixEbl0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWnE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoaTIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInNldHRpbmdzTG9hZFN0YXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50IiwwKSxHKDEsImFzeW5jIikpLDImZSYmXygic2V0dGluZ3NMb2FkU3RhdGUiLFcoMSwxLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSl9LGRlcGVuZGVuY2llczpbUXEsbHRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHl4ZT1bIm1hdC1tZW51LWl0ZW0iLCIiXTtmdW5jdGlvbiBieGUobix0KXsxJm4mJihUbigpLGgoMCwic3ZnIiwzKSxQKDEsInBvbHlnb24iLDQpLGcoKSl9dmFyIHZ4ZT1bW1sibWF0LWljb24iXSxbIiIsIm1hdE1lbnVJdGVtSWNvbiIsIiJdXSwiKiJdLHh4ZT1bIm1hdC1pY29uLCBbbWF0TWVudUl0ZW1JY29uXSIsIioiXSx4RT1uZXcgaWUoIk1BVF9NRU5VX1BBTkVMIiksQ3hlPVFvKEtyKGNsYXNze30pKSxOZz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQ3hle2NvbnN0cnVjdG9yKGUsaSxyLG8sYSl7c3VwZXIoKSx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9mb2N1c01vbml0b3I9cix0aGlzLl9wYXJlbnRNZW51PW8sdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9YSx0aGlzLnJvbGU9Im1lbnVpdGVtIix0aGlzLl9ob3ZlcmVkPW5ldyBBZSx0aGlzLl9mb2N1c2VkPW5ldyBBZSx0aGlzLl9oaWdobGlnaHRlZD0hMSx0aGlzLl90cmlnZ2Vyc1N1Ym1lbnU9ITEsbz8uYWRkSXRlbT8uKHRoaXMpfWZvY3VzKGUsaSl7dGhpcy5fZm9jdXNNb25pdG9yJiZlP3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9nZXRIb3N0RWxlbWVudCgpLGUsaSk6dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5mb2N1cyhpKSx0aGlzLl9mb2N1c2VkLm5leHQodGhpcyl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yJiZ0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCExKX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvciYmdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX3BhcmVudE1lbnUmJnRoaXMuX3BhcmVudE1lbnUucmVtb3ZlSXRlbSYmdGhpcy5fcGFyZW50TWVudS5yZW1vdmVJdGVtKHRoaXMpLHRoaXMuX2hvdmVyZWQuY29tcGxldGUoKSx0aGlzLl9mb2N1c2VkLmNvbXBsZXRlKCl9X2dldFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1fY2hlY2tEaXNhYmxlZChlKXt0aGlzLmRpc2FibGVkJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfV9oYW5kbGVNb3VzZUVudGVyKCl7dGhpcy5faG92ZXJlZC5uZXh0KHRoaXMpfWdldExhYmVsKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb25lTm9kZSghMCksaT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIm1hdC1pY29uLCAubWF0ZXJpYWwtaWNvbnMiKTtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdLnJlbW92ZSgpO3JldHVybiBlLnRleHRDb250ZW50Py50cmltKCl8fCIifV9zZXRIaWdobGlnaHRlZChlKXt0aGlzLl9oaWdobGlnaHRlZD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX1fc2V0VHJpZ2dlcnNTdWJtZW51KGUpe3RoaXMuX3RyaWdnZXJzU3VibWVudT1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX1faGFzRm9jdXMoKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLl9nZXRIb3N0RWxlbWVudCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKGt0KSxDKGxyKSxDKHhFLDgpLEMoRnQpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtbWVudS1pdGVtIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1tZW51LWl0ZW0iLCJtYXQtbWRjLWZvY3VzLWluZGljYXRvciIsIm1kYy1saXN0LWl0ZW0iXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9jaGVja0Rpc2FibGVkKG8pfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZU1vdXNlRW50ZXIoKX0pLDImZSYmKFBlKCJyb2xlIixpLnJvbGUpKCJ0YWJpbmRleCIsaS5fZ2V0VGFiSW5kZXgoKSkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksUWUoIm1hdC1tZGMtbWVudS1pdGVtLWhpZ2hsaWdodGVkIixpLl9oaWdobGlnaHRlZCkoIm1hdC1tZGMtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlciIsaS5fdHJpZ2dlcnNTdWJtZW51KSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixyb2xlOiJyb2xlIn0sZXhwb3J0QXM6WyJtYXRNZW51SXRlbSJdLGZlYXR1cmVzOltMZV0sYXR0cnM6eXhlLG5nQ29udGVudFNlbGVjdG9yczp4eGUsZGVjbHM6NSx2YXJzOjMsY29uc3RzOltbMSwibWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0Il0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1tZGMtbWVudS1yaXBwbGUiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsiY2xhc3MiLCJtYXQtbWRjLW1lbnUtc3VibWVudS1pY29uIiwidmlld0JveCIsIjAgMCA1IDEwIiwiZm9jdXNhYmxlIiwiZmFsc2UiLDQsIm5nSWYiXSxbInZpZXdCb3giLCIwIDAgNSAxMCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtbWRjLW1lbnUtc3VibWVudS1pY29uIl0sWyJwb2ludHMiLCIwLDAgNSw1IDAsMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnbih2eGUpLFh0KDApLGgoMSwic3BhbiIsMCksWHQoMiwxKSxnKCksUCgzLCJkaXYiLDEpLFMoNCxieGUsMiwwLCJzdmciLDIpKSwyJmUmJihiKDMpLF8oIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSxiKDEpLF8oIm5nSWYiLGkuX3RyaWdnZXJzU3VibWVudSkpfSxkZXBlbmRlbmNpZXM6W0ZlLEZyXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKcT1uZXcgaWUoIk1hdE1lbnVDb250ZW50IiksY3Y9e3RyYW5zZm9ybU1lbnU6amkoInRyYW5zZm9ybU1lbnUiLFtKbigidm9pZCIsQnQoe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDAuOCkifSkpLFduKCJ2b2lkID0+IGVudGVyIixLbigiMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLEJ0KHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSkpLFduKCIqID0+IHZvaWQiLEtuKCIxMDBtcyAyNW1zIGxpbmVhciIsQnQoe29wYWNpdHk6MH0pKSldKSxmYWRlSW5JdGVtczpqaSgiZmFkZUluSXRlbXMiLFtKbigic2hvd2luZyIsQnQoe29wYWNpdHk6MX0pKSxXbigidm9pZCA9PiAqIixbQnQoe29wYWNpdHk6MH0pLEtuKCI0MDBtcyAxMDBtcyBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSIpXSldKX0sTXhlPTAsZ0w9bmV3IGllKCJtYXQtbWVudS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue292ZXJsYXBUcmlnZ2VyOiExLHhQb3NpdGlvbjoiYWZ0ZXIiLHlQb3NpdGlvbjoiYmVsb3ciLGJhY2tkcm9wQ2xhc3M6ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIn19fSksTGc9KCgpPT57Y2xhc3MgbntnZXQgeFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3hQb3NpdGlvbn1zZXQgeFBvc2l0aW9uKGUpe3RoaXMuX3hQb3NpdGlvbj1lLHRoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9Z2V0IHlQb3NpdGlvbigpe3JldHVybiB0aGlzLl95UG9zaXRpb259c2V0IHlQb3NpdGlvbihlKXt0aGlzLl95UG9zaXRpb249ZSx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCBvdmVybGFwVHJpZ2dlcigpe3JldHVybiB0aGlzLl9vdmVybGFwVHJpZ2dlcn1zZXQgb3ZlcmxhcFRyaWdnZXIoZSl7dGhpcy5fb3ZlcmxhcFRyaWdnZXI9VXQoZSl9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcChlKXt0aGlzLl9oYXNCYWNrZHJvcD1VdChlKX1zZXQgcGFuZWxDbGFzcyhlKXtsZXQgaT10aGlzLl9wcmV2aW91c1BhbmVsQ2xhc3M7aSYmaS5sZW5ndGgmJmkuc3BsaXQoIiAiKS5mb3JFYWNoKHI9Pnt0aGlzLl9jbGFzc0xpc3Rbcl09ITF9KSx0aGlzLl9wcmV2aW91c1BhbmVsQ2xhc3M9ZSxlJiZlLmxlbmd0aCYmKGUuc3BsaXQoIiAiKS5mb3JFYWNoKHI9Pnt0aGlzLl9jbGFzc0xpc3Rbcl09ITB9KSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIiKX1nZXQgY2xhc3NMaXN0KCl7cmV0dXJuIHRoaXMucGFuZWxDbGFzc31zZXQgY2xhc3NMaXN0KGUpe3RoaXMucGFuZWxDbGFzcz1lfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1yLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPW8sdGhpcy5feFBvc2l0aW9uPXRoaXMuX2RlZmF1bHRPcHRpb25zLnhQb3NpdGlvbix0aGlzLl95UG9zaXRpb249dGhpcy5fZGVmYXVsdE9wdGlvbnMueVBvc2l0aW9uLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcz1uZXcgSXMsdGhpcy5fY2xhc3NMaXN0PXt9LHRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuX2FuaW1hdGlvbkRvbmU9bmV3IEFlLHRoaXMub3ZlcmxheVBhbmVsQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxheVBhbmVsQ2xhc3N8fCIiLHRoaXMuYmFja2Ryb3BDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5iYWNrZHJvcENsYXNzLHRoaXMuX292ZXJsYXBUcmlnZ2VyPXRoaXMuX2RlZmF1bHRPcHRpb25zLm92ZXJsYXBUcmlnZ2VyLHRoaXMuX2hhc0JhY2tkcm9wPXRoaXMuX2RlZmF1bHRPcHRpb25zLmhhc0JhY2tkcm9wLHRoaXMuY2xvc2VkPW5ldyBMLHRoaXMuY2xvc2U9dGhpcy5jbG9zZWQsdGhpcy5wYW5lbElkPSJtYXQtbWVudS1wYW5lbC0iK014ZSsrfW5nT25Jbml0KCl7dGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpLHRoaXMuX2tleU1hbmFnZXI9bmV3IGdnKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkud2l0aEhvbWVBbmRFbmQoKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCk9PnRoaXMuY2xvc2VkLmVtaXQoInRhYiIpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKE5uKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcykseWkoZT0+Y24oLi4uZS5tYXAoaT0+aS5fZm9jdXNlZCkpKSkuc3Vic2NyaWJlKGU9PnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLl9rZXlNYW5hZ2VyO2lmKCJlbnRlciI9PT10aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlJiZpLmFjdGl2ZUl0ZW0/Ll9oYXNGb2N1cygpKXtsZXQgcj1lLnRvQXJyYXkoKSxvPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMSxpLmFjdGl2ZUl0ZW1JbmRleHx8MCkpO3Jbb10mJiFyW29dLmRpc2FibGVkP2kuc2V0QWN0aXZlSXRlbShvKTppLnNldE5leHRJdGVtQWN0aXZlKCl9fSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmRlc3Ryb3koKSx0aGlzLmNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfV9ob3ZlcmVkKCl7cmV0dXJuIHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUoTm4odGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSx5aShpPT5jbiguLi5pLm1hcChyPT5yLl9ob3ZlcmVkKSkpKX1hZGRJdGVtKGUpe31yZW1vdmVJdGVtKGUpe31faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGUscj10aGlzLl9rZXlNYW5hZ2VyO3N3aXRjaChpKXtjYXNlIDI3OnlyKGUpfHwoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKSk7YnJlYWs7Y2FzZSAzNzp0aGlzLnBhcmVudE1lbnUmJiJsdHIiPT09dGhpcy5kaXJlY3Rpb24mJnRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKTticmVhaztjYXNlIDM5OnRoaXMucGFyZW50TWVudSYmInJ0bCI9PT10aGlzLmRpcmVjdGlvbiYmdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuKDM4PT09aXx8NDA9PT1pKSYmci5zZXRGb2N1c09yaWdpbigia2V5Ym9hcmQiKSx2b2lkIHIub25LZXlkb3duKGUpfWUuc3RvcFByb3BhZ2F0aW9uKCl9Zm9jdXNGaXJzdEl0ZW0oZT0icHJvZ3JhbSIpe3RoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKHp0KDEpKS5zdWJzY3JpYmUoKCk9PntsZXQgaT1udWxsO2lmKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5sZW5ndGgmJihpPXRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5maXJzdC5fZ2V0SG9zdEVsZW1lbnQoKS5jbG9zZXN0KCdbcm9sZT0ibWVudSJdJykpLCFpfHwhaS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSl7bGV0IHI9dGhpcy5fa2V5TWFuYWdlcjtyLnNldEZvY3VzT3JpZ2luKGUpLnNldEZpcnN0SXRlbUFjdGl2ZSgpLCFyLmFjdGl2ZUl0ZW0mJmkmJmkuZm9jdXMoKX19KX1yZXNldEFjdGl2ZUl0ZW0oKXt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfXNldEVsZXZhdGlvbihlKXtsZXQgaT1NYXRoLm1pbih0aGlzLl9iYXNlRWxldmF0aW9uK2UsMjQpLHI9YCR7dGhpcy5fZWxldmF0aW9uUHJlZml4fSR7aX1gLG89T2JqZWN0LmtleXModGhpcy5fY2xhc3NMaXN0KS5maW5kKGE9PmEuc3RhcnRzV2l0aCh0aGlzLl9lbGV2YXRpb25QcmVmaXgpKTsoIW98fG89PT10aGlzLl9wcmV2aW91c0VsZXZhdGlvbikmJih0aGlzLl9wcmV2aW91c0VsZXZhdGlvbiYmKHRoaXMuX2NsYXNzTGlzdFt0aGlzLl9wcmV2aW91c0VsZXZhdGlvbl09ITEpLHRoaXMuX2NsYXNzTGlzdFtyXT0hMCx0aGlzLl9wcmV2aW91c0VsZXZhdGlvbj1yKX1zZXRQb3NpdGlvbkNsYXNzZXMoZT10aGlzLnhQb3NpdGlvbixpPXRoaXMueVBvc2l0aW9uKXtsZXQgcj10aGlzLl9jbGFzc0xpc3Q7clsibWF0LW1lbnUtYmVmb3JlIl09ImJlZm9yZSI9PT1lLHJbIm1hdC1tZW51LWFmdGVyIl09ImFmdGVyIj09PWUsclsibWF0LW1lbnUtYWJvdmUiXT0iYWJvdmUiPT09aSxyWyJtYXQtbWVudS1iZWxvdyJdPSJiZWxvdyI9PT1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX1fc3RhcnRBbmltYXRpb24oKXt0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJlbnRlciJ9X3Jlc2V0QW5pbWF0aW9uKCl7dGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0idm9pZCJ9X29uQW5pbWF0aW9uRG9uZShlKXt0aGlzLl9hbmltYXRpb25Eb25lLm5leHQoZSksdGhpcy5faXNBbmltYXRpbmc9ITF9X29uQW5pbWF0aW9uU3RhcnQoZSl7dGhpcy5faXNBbmltYXRpbmc9ITAsImVudGVyIj09PWUudG9TdGF0ZSYmMD09PXRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4JiYoZS5lbGVtZW50LnNjcm9sbFRvcD0wKX1fdXBkYXRlRGlyZWN0RGVzY2VuZGFudHMoKXt0aGlzLl9hbGxJdGVtcy5jaGFuZ2VzLnBpcGUoTm4odGhpcy5fYWxsSXRlbXMpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5yZXNldChlLmZpbHRlcihpPT5pLl9wYXJlbnRNZW51PT09dGhpcykpLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKGF0KSxDKGdMKSxDKEZ0KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKGNpKHIsSnEsNSksY2kocixOZyw1KSxjaShyLE5nLDQpKSwyJmUpe2xldCBvO3dlKG89U2UoKSkmJihpLmxhenlDb250ZW50PW8uZmlyc3QpLHdlKG89U2UoKSkmJihpLl9hbGxJdGVtcz1vKSx3ZShvPVNlKCkpJiYoaS5pdGVtcz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmWWUoU2ksNSksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS50ZW1wbGF0ZVJlZj1yLmZpcnN0KX19LGlucHV0czp7YmFja2Ryb3BDbGFzczoiYmFja2Ryb3BDbGFzcyIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0seFBvc2l0aW9uOiJ4UG9zaXRpb24iLHlQb3NpdGlvbjoieVBvc2l0aW9uIixvdmVybGFwVHJpZ2dlcjoib3ZlcmxhcFRyaWdnZXIiLGhhc0JhY2tkcm9wOiJoYXNCYWNrZHJvcCIscGFuZWxDbGFzczpbImNsYXNzIiwicGFuZWxDbGFzcyJdLGNsYXNzTGlzdDoiY2xhc3NMaXN0In0sb3V0cHV0czp7Y2xvc2VkOiJjbG9zZWQiLGNsb3NlOiJjbG9zZSJ9fSksbn0pKCksJHE9bmV3IGllKCJtYXQtbWVudS1zY3JvbGwtc3RyYXRlZ3kiKSxlWT17cHJvdmlkZTokcSxkZXBzOltPaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LEtxPVlvKHtwYXNzaXZlOiEwfSksdFk9KCgpPT57Y2xhc3MgbntnZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcigpe3JldHVybiB0aGlzLm1lbnV9c2V0IF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IoZSl7dGhpcy5tZW51PWV9Z2V0IG1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudX1zZXQgbWVudShlKXtlIT09dGhpcy5fbWVudSYmKHRoaXMuX21lbnU9ZSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxlJiYodGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uPWUuY2xvc2Uuc3Vic2NyaWJlKGk9Pnt0aGlzLl9kZXN0cm95TWVudShpKSwoImNsaWNrIj09PWl8fCJ0YWIiPT09aSkmJnRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZC5lbWl0KGkpfSkpLHRoaXMuX21lbnVJdGVtSW5zdGFuY2U/Ll9zZXRUcmlnZ2Vyc1N1Ym1lbnUodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkpfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwsYyxkKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZWxlbWVudD1pLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9cix0aGlzLl9tZW51SXRlbUluc3RhbmNlPXMsdGhpcy5fZGlyPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fbmdab25lPWQsdGhpcy5fb3ZlcmxheVJlZj1udWxsLHRoaXMuX21lbnVPcGVuPSExLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uPXluLkVNUFRZLHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPXluLkVNUFRZLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbj15bi5FTVBUWSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1waShGdCksdGhpcy5faGFuZGxlVG91Y2hTdGFydD11PT57emIodSl8fCh0aGlzLl9vcGVuZWRCeT0idG91Y2giKX0sdGhpcy5fb3BlbmVkQnk9dm9pZCAwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMubWVudU9wZW5lZD1uZXcgTCx0aGlzLm9uTWVudU9wZW49dGhpcy5tZW51T3BlbmVkLHRoaXMubWVudUNsb3NlZD1uZXcgTCx0aGlzLm9uTWVudUNsb3NlPXRoaXMubWVudUNsb3NlZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT1hIGluc3RhbmNlb2YgTGc/YTp2b2lkIDAsaS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsS3EpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2hhbmRsZUhvdmVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKSx0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlVG91Y2hTdGFydCxLcSksdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWdldCBtZW51T3Blbigpe3JldHVybiB0aGlzLl9tZW51T3Blbn1nZXQgZGlyKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9dHJpZ2dlcnNTdWJtZW51KCl7cmV0dXJuISEodGhpcy5fbWVudUl0ZW1JbnN0YW5jZSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51JiZ0aGlzLm1lbnUpfXRvZ2dsZU1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudU9wZW4/dGhpcy5jbG9zZU1lbnUoKTp0aGlzLm9wZW5NZW51KCl9b3Blbk1lbnUoKXtsZXQgZT10aGlzLm1lbnU7aWYodGhpcy5fbWVudU9wZW58fCFlKXJldHVybjtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KGUpLHI9aS5nZXRDb25maWcoKSxvPXIucG9zaXRpb25TdHJhdGVneTt0aGlzLl9zZXRQb3NpdGlvbihlLG8pLHIuaGFzQmFja2Ryb3A9bnVsbD09ZS5oYXNCYWNrZHJvcD8hdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKTplLmhhc0JhY2tkcm9wLGkuYXR0YWNoKHRoaXMuX2dldFBvcnRhbChlKSksZS5sYXp5Q29udGVudCYmZS5sYXp5Q29udGVudC5hdHRhY2godGhpcy5tZW51RGF0YSksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgpPT50aGlzLmNsb3NlTWVudSgpKSx0aGlzLl9pbml0TWVudShlKSxlIGluc3RhbmNlb2YgTGcmJihlLl9zdGFydEFuaW1hdGlvbigpLGUuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUob3QoZS5jbG9zZSkpLnN1YnNjcmliZSgoKT0+e28ud2l0aExvY2tlZFBvc2l0aW9uKCExKS5yZWFwcGx5TGFzdFBvc2l0aW9uKCksby53aXRoTG9ja2VkUG9zaXRpb24oITApfSkpfWNsb3NlTWVudSgpe3RoaXMubWVudT8uY2xvc2UuZW1pdCgpfWZvY3VzKGUsaSl7dGhpcy5fZm9jdXNNb25pdG9yJiZlP3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKX1fZGVzdHJveU1lbnUoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLm1lbnVPcGVuKXJldHVybjtsZXQgaT10aGlzLm1lbnU7dGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMucmVzdG9yZUZvY3VzJiYoImtleWRvd24iPT09ZXx8IXRoaXMuX29wZW5lZEJ5fHwhdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkmJnRoaXMuZm9jdXModGhpcy5fb3BlbmVkQnkpLHRoaXMuX29wZW5lZEJ5PXZvaWQgMCxpIGluc3RhbmNlb2YgTGc/KGkuX3Jlc2V0QW5pbWF0aW9uKCksaS5sYXp5Q29udGVudD9pLl9hbmltYXRpb25Eb25lLnBpcGUoVmUocj0+InZvaWQiPT09ci50b1N0YXRlKSx6dCgxKSxvdChpLmxhenlDb250ZW50Ll9hdHRhY2hlZCkpLnN1YnNjcmliZSh7bmV4dDooKT0+aS5sYXp5Q29udGVudC5kZXRhY2goKSxjb21wbGV0ZTooKT0+dGhpcy5fc2V0SXNNZW51T3BlbighMSl9KTp0aGlzLl9zZXRJc01lbnVPcGVuKCExKSk6KHRoaXMuX3NldElzTWVudU9wZW4oITEpLGk/LmxhenlDb250ZW50Py5kZXRhY2goKSl9X2luaXRNZW51KGUpe2UucGFyZW50TWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpP3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudTp2b2lkIDAsZS5kaXJlY3Rpb249dGhpcy5kaXIsdGhpcy5fc2V0TWVudUVsZXZhdGlvbihlKSxlLmZvY3VzRmlyc3RJdGVtKHRoaXMuX29wZW5lZEJ5fHwicHJvZ3JhbSIpLHRoaXMuX3NldElzTWVudU9wZW4oITApfV9zZXRNZW51RWxldmF0aW9uKGUpe2lmKGUuc2V0RWxldmF0aW9uKXtsZXQgaT0wLHI9ZS5wYXJlbnRNZW51O2Zvcig7cjspaSsrLHI9ci5wYXJlbnRNZW51O2Uuc2V0RWxldmF0aW9uKGkpfX1fc2V0SXNNZW51T3BlbihlKXtlIT09dGhpcy5fbWVudU9wZW4mJih0aGlzLl9tZW51T3Blbj1lLHRoaXMuX21lbnVPcGVuP3RoaXMubWVudU9wZW5lZC5lbWl0KCk6dGhpcy5tZW51Q2xvc2VkLmVtaXQoKSx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZ0aGlzLl9tZW51SXRlbUluc3RhbmNlLl9zZXRIaWdobGlnaHRlZChlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2NyZWF0ZU92ZXJsYXkoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWYpe2xldCBpPXRoaXMuX2dldE92ZXJsYXlDb25maWcoZSk7dGhpcy5fc3Vic2NyaWJlVG9Qb3NpdGlvbnMoZSxpLnBvc2l0aW9uU3RyYXRlZ3kpLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUoaSksdGhpcy5fb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKCl9cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9X2dldE92ZXJsYXlDb25maWcoZSl7cmV0dXJuIG5ldyBXcyh7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50KS53aXRoTG9ja2VkUG9zaXRpb24oKS53aXRoR3Jvd0FmdGVyT3BlbigpLndpdGhUcmFuc2Zvcm1PcmlnaW5PbigiLm1hdC1tZW51LXBhbmVsLCAubWF0LW1kYy1tZW51LXBhbmVsIiksYmFja2Ryb3BDbGFzczplLmJhY2tkcm9wQ2xhc3N8fCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIscGFuZWxDbGFzczplLm92ZXJsYXlQYW5lbENsYXNzLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksZGlyZWN0aW9uOnRoaXMuX2Rpcn0pfV9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhlLGkpe2Uuc2V0UG9zaXRpb25DbGFzc2VzJiZpLnBvc2l0aW9uQ2hhbmdlcy5zdWJzY3JpYmUocj0+e2xldCBvPSJzdGFydCI9PT1yLmNvbm5lY3Rpb25QYWlyLm92ZXJsYXlYPyJhZnRlciI6ImJlZm9yZSIsYT0idG9wIj09PXIuY29ubmVjdGlvblBhaXIub3ZlcmxheVk/ImJlbG93IjoiYWJvdmUiO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5lLnNldFBvc2l0aW9uQ2xhc3NlcyhvLGEpKTplLnNldFBvc2l0aW9uQ2xhc3NlcyhvLGEpfSl9X3NldFBvc2l0aW9uKGUsaSl7bGV0W3Isb109ImJlZm9yZSI9PT1lLnhQb3NpdGlvbj9bImVuZCIsInN0YXJ0Il06WyJzdGFydCIsImVuZCJdLFthLHNdPSJhYm92ZSI9PT1lLnlQb3NpdGlvbj9bImJvdHRvbSIsInRvcCJdOlsidG9wIiwiYm90dG9tIl0sW2wsY109W2Esc10sW2QsdV09W3Isb10scD0wO2lmKHRoaXMudHJpZ2dlcnNTdWJtZW51KCkpe2lmKHU9cj0iYmVmb3JlIj09PWUueFBvc2l0aW9uPyJzdGFydCI6ImVuZCIsbz1kPSJlbmQiPT09cj8ic3RhcnQiOiJlbmQiLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSl7aWYobnVsbD09dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nKXtsZXQgZj10aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuaXRlbXMuZmlyc3Q7dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nPWY/Zi5fZ2V0SG9zdEVsZW1lbnQoKS5vZmZzZXRUb3A6MH1wPSJib3R0b20iPT09YT90aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc6LXRoaXMuX3BhcmVudElubmVyUGFkZGluZ319ZWxzZSBlLm92ZXJsYXBUcmlnZ2VyfHwobD0idG9wIj09PWE/ImJvdHRvbSI6InRvcCIsYz0idG9wIj09PXM/ImJvdHRvbSI6InRvcCIpO2kud2l0aFBvc2l0aW9ucyhbe29yaWdpblg6cixvcmlnaW5ZOmwsb3ZlcmxheVg6ZCxvdmVybGF5WTphLG9mZnNldFk6cH0se29yaWdpblg6byxvcmlnaW5ZOmwsb3ZlcmxheVg6dSxvdmVybGF5WTphLG9mZnNldFk6cH0se29yaWdpblg6cixvcmlnaW5ZOmMsb3ZlcmxheVg6ZCxvdmVybGF5WTpzLG9mZnNldFk6LXB9LHtvcmlnaW5YOm8sb3JpZ2luWTpjLG92ZXJsYXlYOnUsb3ZlcmxheVk6cyxvZmZzZXRZOi1wfV0pfV9tZW51Q2xvc2luZ0FjdGlvbnMoKXtsZXQgZT10aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSxpPXRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKTtyZXR1cm4gY24oZSx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU/dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZDpxdCgpLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKS5waXBlKFZlKGE9PmEhPT10aGlzLl9tZW51SXRlbUluc3RhbmNlKSxWZSgoKT0+dGhpcy5fbWVudU9wZW4pKTpxdCgpLGkpfV9oYW5kbGVNb3VzZWRvd24oZSl7SGIoZSl8fCh0aGlzLl9vcGVuZWRCeT0wPT09ZS5idXR0b24/Im1vdXNlIjp2b2lkIDAsdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmZS5wcmV2ZW50RGVmYXVsdCgpKX1faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGU7KDEzPT09aXx8MzI9PT1pKSYmKHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIpLHRoaXMudHJpZ2dlcnNTdWJtZW51KCkmJigzOT09PWkmJiJsdHIiPT09dGhpcy5kaXJ8fDM3PT09aSYmInJ0bCI9PT10aGlzLmRpcikmJih0aGlzLl9vcGVuZWRCeT0ia2V5Ym9hcmQiLHRoaXMub3Blbk1lbnUoKSl9X2hhbmRsZUNsaWNrKGUpe3RoaXMudHJpZ2dlcnNTdWJtZW51KCk/KGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vcGVuTWVudSgpKTp0aGlzLnRvZ2dsZU1lbnUoKX1faGFuZGxlSG92ZXIoKXshdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKXx8IXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudXx8KHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoVmUoZT0+ZT09PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UmJiFlLmRpc2FibGVkKSx4cygwLFVtKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3BlbmVkQnk9Im1vdXNlIix0aGlzLm1lbnUgaW5zdGFuY2VvZiBMZyYmdGhpcy5tZW51Ll9pc0FuaW1hdGluZz90aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmUucGlwZSh6dCgxKSx4cygwLFVtKSxvdCh0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5vcGVuTWVudSgpKTp0aGlzLm9wZW5NZW51KCl9KSl9X2dldFBvcnRhbChlKXtyZXR1cm4oIXRoaXMuX3BvcnRhbHx8dGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmIT09ZS50ZW1wbGF0ZVJlZikmJih0aGlzLl9wb3J0YWw9bmV3IEpvKGUudGVtcGxhdGVSZWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZikpLHRoaXMuX3BvcnRhbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhPaSksQyhiZSksQyhabiksQygkcSksQyh4RSw4KSxDKE5nLDEwKSxDKEhpLDgpLEMobHIpLEMoYXQpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVDbGljayhvKX0pKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZWRvd24obyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJlBlKCJhcmlhLWhhc3BvcHVwIixpLm1lbnU/Im1lbnUiOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLm1lbnVPcGVuKSgiYXJpYS1jb250cm9scyIsaS5tZW51T3Blbj9pLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yIl0sbWVudTpbIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudSJdLG1lbnVEYXRhOlsibWF0TWVudVRyaWdnZXJEYXRhIiwibWVudURhdGEiXSxyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifX0pLG59KSgpO2Z1bmN0aW9uIEV4ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMCksRCgia2V5ZG93biIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuX2hhbmRsZUtleWRvd24ocikpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmNsb3NlZC5lbWl0KCJjbGljayIpKX0pKCJAdHJhbnNmb3JtTWVudS5zdGFydCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuX29uQW5pbWF0aW9uU3RhcnQocikpfSkoIkB0cmFuc2Zvcm1NZW51LmRvbmUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLl9vbkFuaW1hdGlvbkRvbmUocikpfSksaCgxLCJkaXYiLDEpLFh0KDIpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO18oImlkIixlLnBhbmVsSWQpKCJuZ0NsYXNzIixlLl9jbGFzc0xpc3QpKCJAdHJhbnNmb3JtTWVudSIsZS5fcGFuZWxBbmltYXRpb25TdGF0ZSksUGUoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixlLmFyaWFMYWJlbGxlZGJ5fHxudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsZS5hcmlhRGVzY3JpYmVkYnl8fG51bGwpfX12YXIgblk9WyIqIl0sVHhlPVsibWF0LW1lbnUtaXRlbSIsIiJdO2Z1bmN0aW9uIER4ZShuLHQpezEmbiYmKFRuKCksaCgwLCJzdmciLDIpLFAoMSwicG9seWdvbiIsMyksZygpKX12YXIga2M9KCgpPT57Y2xhc3MgbiBleHRlbmRzIExne2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pLHRoaXMuX2VsZXZhdGlvblByZWZpeD0ibWF0LWVsZXZhdGlvbi16Iix0aGlzLl9iYXNlRWxldmF0aW9uPTR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoYXQpLEMoZ0wpLEMoRnQpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtbWVudSJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmUGUoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpKCJhcmlhLWRlc2NyaWJlZGJ5IixudWxsKX0sZXhwb3J0QXM6WyJtYXRNZW51Il0sZmVhdHVyZXM6W1J0KFt7cHJvdmlkZTp4RSx1c2VFeGlzdGluZzpufV0pLExlXSxuZ0NvbnRlbnRTZWxlY3RvcnM6blksZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbInRhYmluZGV4IiwiLTEiLCJyb2xlIiwibWVudSIsMSwibWF0LW1lbnUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyIsImtleWRvd24iLCJjbGljayJdLFsxLCJtYXQtbWVudS1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZ24oKSxTKDAsRXhlLDMsNiwibmctdGVtcGxhdGUiKSl9LGRlcGVuZGVuY2llczpbYm5dLHN0eWxlczpbJ21hdC1tZW51e2Rpc3BsYXk6bm9uZX0ubWF0LW1lbnUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQ4cHgpO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MDttaW4taGVpZ2h0OjY0cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZW51LXBhbmVsLm5nLWFuaW1hdGluZ3twb2ludGVyLWV2ZW50czpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtbWVudS1jb250ZW50Om5vdCg6ZW1wdHkpe3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1tZW51LWl0ZW17LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWVudS1pdGVtOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW17dGV4dC1hbGlnbjpyaWdodH0ubWF0LW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF06OmFmdGVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1pdGVte21hcmdpbi10b3A6MXB4fS5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcntwYWRkaW5nLXJpZ2h0OjMycHh9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcntwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjMycHh9Lm1hdC1tZW51LXN1Ym1lbnUtaWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6NXB4O2hlaWdodDoxMHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LW1lbnUtc3VibWVudS1pY29ue3JpZ2h0OmF1dG87bGVmdDoxNnB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpIHNjYWxlWCgtMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtc3VibWVudS1pY29ue2ZpbGw6Q2FudmFzVGV4dH1idXR0b24ubWF0LW1lbnUtaXRlbXt3aWR0aDoxMDAlfS5tYXQtbWVudS1pdGVtIC5tYXQtbWVudS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltjdi50cmFuc2Zvcm1NZW51LGN2LmZhZGVJbkl0ZW1zXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxZdT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTmd7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9Q24obikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtbWVudS1pdGVtIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjIwLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKFBlKCJyb2xlIixpLnJvbGUpKCJ0YWJpbmRleCIsaS5fZ2V0VGFiSW5kZXgoKSkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxRZSgibWF0LW1lbnUtaXRlbSIsITApKCJtYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkIixpLl9oaWdobGlnaHRlZCkoIm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyIixpLl90cmlnZ2Vyc1N1Ym1lbnUpKCJtYXQtbWRjLW1lbnUtaXRlbSIsITEpKCJtYXQtbWRjLWZvY3VzLWluZGljYXRvciIsITEpKCJtZGMtbGlzdC1pdGVtIiwhMSkoIm1hdC1tZGMtbWVudS1pdGVtLWhpZ2hsaWdodGVkIiwhMSkoIm1hdC1tZGMtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlciIsITEpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdE1lbnVJdGVtIl0sZmVhdHVyZXM6W1J0KFt7cHJvdmlkZTpOZyx1c2VFeGlzdGluZzpufV0pLExlXSxhdHRyczpUeGUsbmdDb250ZW50U2VsZWN0b3JzOm5ZLGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1tZW51LXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVUcmlnZ2VyIl0sWyJjbGFzcyIsIm1hdC1tZW51LXN1Ym1lbnUtaWNvbiIsInZpZXdCb3giLCIwIDAgNSAxMCIsImZvY3VzYWJsZSIsImZhbHNlIiw0LCJuZ0lmIl0sWyJ2aWV3Qm94IiwiMCAwIDUgMTAiLCJmb2N1c2FibGUiLCJmYWxzZSIsMSwibWF0LW1lbnUtc3VibWVudS1pY29uIl0sWyJwb2ludHMiLCIwLDAgNSw1IDAsMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnbigpLFh0KDApLFAoMSwiZGl2IiwwKSxTKDIsRHhlLDIsMCwic3ZnIiwxKSksMiZlJiYoYigxKSxfKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5kaXNhYmxlUmlwcGxlfHxpLmRpc2FibGVkKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSksYigxKSxfKCJuZ0lmIixpLl90cmlnZ2Vyc1N1Ym1lbnUpKX0sZGVwZW5kZW5jaWVzOltGZSxGcl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUGM9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHRZe31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PUNuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1tZW51LXRyaWdnZXItZm9yIiwiIl0sWyIiLCJtYXRNZW51VHJpZ2dlckZvciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZW51LXRyaWdnZXIiXSxleHBvcnRBczpbIm1hdE1lbnVUcmlnZ2VyIl0sZmVhdHVyZXM6W0xlXX0pLG59KSgpLFh1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtwcm92aWRlcnM6W2VZXSxpbXBvcnRzOltUZSxRdCxabyxMcixSYyxRdF19KSxufSkoKTtmdW5jdGlvbiBJeGUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDgpfWZ1bmN0aW9uIEF4ZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsOSl9ZnVuY3Rpb24gUnhlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiwxMCl9dmFyIFVhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5ERUZBVUxUPTBdPSJERUZBVUxUIixuW24uREFSS19NT0RFX09OPTFdPSJEQVJLX01PREVfT04iLG5bbi5EQVJLX01PREVfT0ZGPTJdPSJEQVJLX01PREVfT0ZGIn0oVWF8fChVYT17fSkpLFVhKSkoKSxpWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5EYXJrTW9kZU92ZXJyaWRlPVVhLHRoaXMub25PdmVycmlkZUNoYW5nZWQ9bmV3IEx9Z2V0QnV0dG9uVGl0bGUoKXtsZXQgZTtzd2l0Y2godGhpcy5kYXJrTW9kZU92ZXJyaWRlKXtjYXNlIFVhLkRFRkFVTFQ6ZT0iQnJvd3NlciBkZWZhdWx0IjticmVhaztjYXNlIFVhLkRBUktfTU9ERV9PTjplPSJEYXJrIG1vZGUiO2JyZWFrO2Nhc2UgVWEuREFSS19NT0RFX09GRjplPSJMaWdodCBtb2RlIn1yZXR1cm5gQ3VycmVudCBtb2RlOiBbJHtlfV0uIFN3aXRjaCBiZXR3ZWVuIGJyb3dzZXIgZGVmYXVsdCwgbGlnaHQsIG9yIGRhcmsgdGhlbWUuYH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlLWNvbXBvbmVudCJdXSxpbnB1dHM6e2RhcmtNb2RlT3ZlcnJpZGU6ImRhcmtNb2RlT3ZlcnJpZGUifSxvdXRwdXRzOntvbk92ZXJyaWRlQ2hhbmdlZDoib25PdmVycmlkZUNoYW5nZWQifSxkZWNsczoxNSx2YXJzOjYsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLCJNZW51IGZvciBjaGFuZ2luZyBsaWdodCBvciBkYXJrIHRoZW1lIiwzLCJtYXRNZW51VHJpZ2dlckZvciIsIm5nU3dpdGNoIiwidGl0bGUiXSxbInN2Z0ljb24iLCJicmlnaHRuZXNzXzZfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzdmdJY29uIiwibGlnaHRfbW9kZV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInN2Z0ljb24iLCJkYXJrX21vZGVfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJtZW51IiwibWF0TWVudSJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiU2V0IHRoZSB0aGVtZSB0byBtYXRjaCB0aGUgZGVmYXVsdCBtb2RlIGluIHRoZSBicm93c2VyLiIsMywiY2xpY2siXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJ0aXRsZSIsIkZvcmNlIGxpZ2h0IFRlbnNvckJvYXJkIHRoZW1lLiIsMywiY2xpY2siXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJ0aXRsZSIsIkZvcmNlIGRhcmsgVGVuc29yQm9hcmQgdGhlbWUuIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImJyaWdodG5lc3NfNl8yNHB4Il0sWyJzdmdJY29uIiwibGlnaHRfbW9kZV8yNHB4Il0sWyJzdmdJY29uIiwiZGFya19tb2RlXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImJ1dHRvbiIsMCksUygxLEl4ZSwxLDAsIm1hdC1pY29uIiwxKSxTKDIsQXhlLDEsMCwibWF0LWljb24iLDIpLFMoMyxSeGUsMSwwLCJtYXQtaWNvbiIsMyksZygpLGgoNCwibWF0LW1lbnUiLG51bGwsNCkoNiwiYnV0dG9uIiw1KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KGkuRGFya01vZGVPdmVycmlkZS5ERUZBVUxUKX0pLGgoNywibGFiZWwiKSxUKDgsIkJyb3dzZXIgZGVmYXVsdCIpLGcoKSgpLGgoOSwiYnV0dG9uIiw2KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGKX0pLGgoMTAsImxhYmVsIiksVCgxMSwiTGlnaHQiKSxnKCkoKSxoKDEyLCJidXR0b24iLDcpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQoaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTil9KSxoKDEzLCJsYWJlbCIpLFQoMTQsIkRhcmsiKSxnKCkoKSgpKSwyJmUmJihfKCJtYXRNZW51VHJpZ2dlckZvciIsdHQoNSkpKCJuZ1N3aXRjaCIsaS5kYXJrTW9kZU92ZXJyaWRlKSgidGl0bGUiLGkuZ2V0QnV0dG9uVGl0bGUoKSksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuRGFya01vZGVPdmVycmlkZS5ERUZBVUxUKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PRkYpLGIoMSksXygibmdTd2l0Y2hDYXNlIixpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09OKSl9LGRlcGVuZGVuY2llczpbRm4sRG4sa2MsWXUsUGMsJGksc3JdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHJZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZGFya01vZGVPdmVycmlkZSQ9dGhpcy5zdG9yZS5zZWxlY3QodVMpLnBpcGUoVShpPT5udWxsPT09aT9VYS5ERUZBVUxUOmk/VWEuREFSS19NT0RFX09OOlVhLkRBUktfTU9ERV9PRkYpKX1jaGFuZ2VEYXJrTW9kZShlKXtsZXQgaT1udWxsO3N3aXRjaChlKXtjYXNlIFVhLkRFRkFVTFQ6aT1udWxsO2JyZWFrO2Nhc2UgVWEuREFSS19NT0RFX09GRjppPSExO2JyZWFrO2Nhc2UgVWEuREFSS19NT0RFX09OOmk9ITB9dGhpcy5zdG9yZS5kaXNwYXRjaChLUyh7ZW5hYmxlRGFya01vZGU6aX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJkYXJrTW9kZU92ZXJyaWRlIiwib25PdmVycmlkZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiLDApLEQoIm9uT3ZlcnJpZGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5jaGFuZ2VEYXJrTW9kZShvKX0pLEcoMSwiYXN5bmMiKSxnKCkpLDImZSYmXygiZGFya01vZGVPdmVycmlkZSIsVygxLDEsaS5kYXJrTW9kZU92ZXJyaWRlJCkpfSxkZXBlbmRlbmNpZXM6W2lZLGx0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiBPeGUobix0KXt9dmFyIEZ4ZT1mdW5jdGlvbihuKXtyZXR1cm57YW5pbWF0aW9uRHVyYXRpb246bn19LEx4ZT1mdW5jdGlvbihuLHQpe3JldHVybnt2YWx1ZTpuLHBhcmFtczp0fX0sYkw9e3RyYW5zbGF0ZVRhYjpqaSgidHJhbnNsYXRlVGFiIixbSm4oImNlbnRlciwgdm9pZCwgbGVmdC1vcmlnaW4tY2VudGVyLCByaWdodC1vcmlnaW4tY2VudGVyIixCdCh7dHJhbnNmb3JtOiJub25lIn0pKSxKbigibGVmdCIsQnQoe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxKbigicmlnaHQiLEJ0KHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxXbigiKiA9PiBsZWZ0LCAqID0+IHJpZ2h0LCBsZWZ0ID0+IGNlbnRlciwgcmlnaHQgPT4gY2VudGVyIixLbigie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpKSxXbigidm9pZCA9PiBsZWZ0LW9yaWdpbi1jZW50ZXIiLFtCdCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxLbigie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpXSksV24oInZvaWQgPT4gcmlnaHQtb3JpZ2luLWNlbnRlciIsW0J0KHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIix2aXNpYmlsaXR5OiJoaWRkZW4ifSksS24oInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKV0pXSl9LHZMPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBOb3tjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGksbyksdGhpcy5faG9zdD1yLHRoaXMuX2NlbnRlcmluZ1N1Yj15bi5FTVBUWSx0aGlzLl9sZWF2aW5nU3ViPXluLkVNUFRZfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl9jZW50ZXJpbmdTdWI9dGhpcy5faG9zdC5fYmVmb3JlQ2VudGVyaW5nLnBpcGUoTm4odGhpcy5faG9zdC5faXNDZW50ZXJQb3NpdGlvbih0aGlzLl9ob3N0Ll9wb3NpdGlvbikpKS5zdWJzY3JpYmUoZT0+e2UmJiF0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuYXR0YWNoKHRoaXMuX2hvc3QuX2NvbnRlbnQpfSksdGhpcy5fbGVhdmluZ1N1Yj10aGlzLl9ob3N0Ll9hZnRlckxlYXZpbmdDZW50ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5faG9zdC5wcmVzZXJ2ZUNvbnRlbnR8fHRoaXMuZGV0YWNoKCl9KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fY2VudGVyaW5nU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fbGVhdmluZ1N1Yi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFFyKSxDKFpuKSxDKFZuKCgpPT5OeGUpKSxDKGt0KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRhYkJvZHlIb3N0IiwiIl1dLGZlYXR1cmVzOltMZV19KSxufSkoKSx4TD0oKCk9PntjbGFzcyBue3NldCBwb3NpdGlvbihlKXt0aGlzLl9wb3NpdGlvbkluZGV4PWUsdGhpcy5fY29tcHV0ZVBvc2l0aW9uQW5pbWF0aW9uU3RhdGUoKX1jb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2Rpcj1pLHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj15bi5FTVBUWSx0aGlzLl90cmFuc2xhdGVUYWJDb21wbGV0ZT1uZXcgQWUsdGhpcy5fb25DZW50ZXJpbmc9bmV3IEwsdGhpcy5fYmVmb3JlQ2VudGVyaW5nPW5ldyBMLHRoaXMuX2FmdGVyTGVhdmluZ0NlbnRlcj1uZXcgTCx0aGlzLl9vbkNlbnRlcmVkPW5ldyBMKCEwKSx0aGlzLmFuaW1hdGlvbkR1cmF0aW9uPSI1MDBtcyIsdGhpcy5wcmVzZXJ2ZUNvbnRlbnQ9ITEsaSYmKHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1pLmNoYW5nZS5zdWJzY3JpYmUobz0+e3RoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKG8pLHIubWFya0ZvckNoZWNrKCl9KSksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGUucGlwZSh1aSgobyxhKT0+by5mcm9tU3RhdGU9PT1hLmZyb21TdGF0ZSYmby50b1N0YXRlPT09YS50b1N0YXRlKSkuc3Vic2NyaWJlKG89Pnt0aGlzLl9pc0NlbnRlclBvc2l0aW9uKG8udG9TdGF0ZSkmJnRoaXMuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5fcG9zaXRpb24pJiZ0aGlzLl9vbkNlbnRlcmVkLmVtaXQoKSx0aGlzLl9pc0NlbnRlclBvc2l0aW9uKG8uZnJvbVN0YXRlKSYmIXRoaXMuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5fcG9zaXRpb24pJiZ0aGlzLl9hZnRlckxlYXZpbmdDZW50ZXIuZW1pdCgpfSl9bmdPbkluaXQoKXsiY2VudGVyIj09dGhpcy5fcG9zaXRpb24mJm51bGwhPXRoaXMub3JpZ2luJiYodGhpcy5fcG9zaXRpb249dGhpcy5fY29tcHV0ZVBvc2l0aW9uRnJvbU9yaWdpbih0aGlzLm9yaWdpbikpfW5nT25EZXN0cm95KCl7dGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGUuY29tcGxldGUoKX1fb25UcmFuc2xhdGVUYWJTdGFydGVkKGUpe2xldCBpPXRoaXMuX2lzQ2VudGVyUG9zaXRpb24oZS50b1N0YXRlKTt0aGlzLl9iZWZvcmVDZW50ZXJpbmcuZW1pdChpKSxpJiZ0aGlzLl9vbkNlbnRlcmluZy5lbWl0KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQpfV9nZXRMYXlvdXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1faXNDZW50ZXJQb3NpdGlvbihlKXtyZXR1cm4iY2VudGVyIj09ZXx8ImxlZnQtb3JpZ2luLWNlbnRlciI9PWV8fCJyaWdodC1vcmlnaW4tY2VudGVyIj09ZX1fY29tcHV0ZVBvc2l0aW9uQW5pbWF0aW9uU3RhdGUoZT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl7dGhpcy5fcG9zaXRpb249dGhpcy5fcG9zaXRpb25JbmRleDwwPyJsdHIiPT1lPyJsZWZ0IjoicmlnaHQiOnRoaXMuX3Bvc2l0aW9uSW5kZXg+MD8ibHRyIj09ZT8icmlnaHQiOiJsZWZ0IjoiY2VudGVyIn1fY29tcHV0ZVBvc2l0aW9uRnJvbU9yaWdpbihlKXtsZXQgaT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKTtyZXR1cm4ibHRyIj09aSYmZTw9MHx8InJ0bCI9PWkmJmU+MD8ibGVmdC1vcmlnaW4tY2VudGVyIjoicmlnaHQtb3JpZ2luLWNlbnRlciJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoSGksOCksQyhGdCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLGlucHV0czp7X2NvbnRlbnQ6WyJjb250ZW50IiwiX2NvbnRlbnQiXSxvcmlnaW46Im9yaWdpbiIsYW5pbWF0aW9uRHVyYXRpb246ImFuaW1hdGlvbkR1cmF0aW9uIixwcmVzZXJ2ZUNvbnRlbnQ6InByZXNlcnZlQ29udGVudCIscG9zaXRpb246InBvc2l0aW9uIn0sb3V0cHV0czp7X29uQ2VudGVyaW5nOiJfb25DZW50ZXJpbmciLF9iZWZvcmVDZW50ZXJpbmc6Il9iZWZvcmVDZW50ZXJpbmciLF9hZnRlckxlYXZpbmdDZW50ZXI6Il9hZnRlckxlYXZpbmdDZW50ZXIiLF9vbkNlbnRlcmVkOiJfb25DZW50ZXJlZCJ9fSksbn0pKCksTnhlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB4THtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKEhpLDgpLEMoRnQpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWJvZHkiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZZZShObyw1KSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLl9wb3J0YWxIb3N0PXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLXRhYi1ib2R5Il0sZmVhdHVyZXM6W0xlXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1siY2RrU2Nyb2xsYWJsZSIsIiIsMSwibWF0LW1kYy10YWItYm9keS1jb250ZW50Il0sWyJjb250ZW50IiwiIl0sWyJtYXRUYWJCb2R5SG9zdCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwLDEpLEQoIkB0cmFuc2xhdGVUYWIuc3RhcnQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQobyl9KSgiQHRyYW5zbGF0ZVRhYi5kb25lIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fdHJhbnNsYXRlVGFiQ29tcGxldGUubmV4dChvKX0pLFMoMixPeGUsMCwwLCJuZy10ZW1wbGF0ZSIsMiksZygpKSwyJmUmJl8oIkB0cmFuc2xhdGVUYWIiLFByKDMsTHhlLGkuX3Bvc2l0aW9uLFNuKDEsRnhlLGkuYW5pbWF0aW9uRHVyYXRpb24pKSl9LGRlcGVuZGVuY2llczpbdkxdLHN0eWxlczpbJy5tYXQtbWRjLXRhYi1ib2R5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO291dGxpbmU6MDtmbGV4LWJhc2lzOjEwMCV9Lm1hdC1tZGMtdGFiLWJvZHkubWF0LW1kYy10YWItYm9keS1hY3RpdmV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3otaW5kZXg6MTtmbGV4LWdyb3c6MX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LW1kYy10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC1tZGMtdGFiLWJvZHkubWF0LW1kYy10YWItYm9keS1hY3RpdmV7b3ZlcmZsb3cteTpoaWRkZW59Lm1hdC1tZGMtdGFiLWJvZHktY29udGVudHtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5tYXQtbWRjLXRhYi1ncm91cC1keW5hbWljLWhlaWdodCAubWF0LW1kYy10YWItYm9keS1jb250ZW50e292ZXJmbG93OmhpZGRlbn0ubWF0LW1kYy10YWItYm9keS1jb250ZW50W3N0eWxlKj0idmlzaWJpbGl0eTogaGlkZGVuIl17ZGlzcGxheTpub25lfSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2JMLnRyYW5zbGF0ZVRhYl19fSksbn0pKCksc1k9bmV3IGllKCJNYXRUYWJDb250ZW50IiksQ0U9bmV3IGllKCJNYXRUYWJMYWJlbCIpLENMPW5ldyBpZSgiTUFUX1RBQiIpLGxZPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLN3tjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl9jbG9zZXN0VGFiPXJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoU2kpLEMoWm4pLEMoQ0wsOCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtdGFiLWxhYmVsIiwiIl0sWyIiLCJtYXRUYWJMYWJlbCIsIiJdXSxmZWF0dXJlczpbUnQoW3twcm92aWRlOkNFLHVzZUV4aXN0aW5nOm59XSksTGVdfSksbn0pKCksX0w9Im1kYy10YWItaW5kaWNhdG9yLS1hY3RpdmUiLG9ZPSJtZGMtdGFiLWluZGljYXRvci0tbm8tdHJhbnNpdGlvbiI7ZnVuY3Rpb24gY1kobil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9maXRUb0NvbnRlbnQ9ITF9Z2V0IGZpdElua0JhclRvQ29udGVudCgpe3JldHVybiB0aGlzLl9maXRUb0NvbnRlbnR9c2V0IGZpdElua0JhclRvQ29udGVudCh0KXtsZXQgZT1VdCh0KTt0aGlzLl9maXRUb0NvbnRlbnQhPT1lJiYodGhpcy5fZml0VG9Db250ZW50PWUsdGhpcy5faW5rQmFyRWxlbWVudCYmdGhpcy5fYXBwZW5kSW5rQmFyRWxlbWVudCgpKX1hY3RpdmF0ZUlua0Jhcih0KXtsZXQgZT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZighdHx8IWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0fHwhdGhpcy5faW5rQmFyQ29udGVudEVsZW1lbnQpcmV0dXJuIHZvaWQgZS5jbGFzc0xpc3QuYWRkKF9MKTtsZXQgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dC53aWR0aC9pLndpZHRoLG89dC5sZWZ0LWkubGVmdDtlLmNsYXNzTGlzdC5hZGQob1kpLHRoaXMuX2lua0JhckNvbnRlbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGVYKCR7b31weCkgc2NhbGVYKCR7cn0pYCksZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlLmNsYXNzTGlzdC5yZW1vdmUob1kpLGUuY2xhc3NMaXN0LmFkZChfTCksdGhpcy5faW5rQmFyQ29udGVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoInRyYW5zZm9ybSIsIiIpfWRlYWN0aXZhdGVJbmtCYXIoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKF9MKX1uZ09uSW5pdCgpe3RoaXMuX2NyZWF0ZUlua0JhckVsZW1lbnQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2lua0JhckVsZW1lbnQ/LnJlbW92ZSgpLHRoaXMuX2lua0JhckVsZW1lbnQ9dGhpcy5faW5rQmFyQ29udGVudEVsZW1lbnQ9bnVsbH1fY3JlYXRlSW5rQmFyRWxlbWVudCgpe2xldCB0PXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm93bmVyRG9jdW1lbnR8fGRvY3VtZW50O3RoaXMuX2lua0JhckVsZW1lbnQ9dC5jcmVhdGVFbGVtZW50KCJzcGFuIiksdGhpcy5faW5rQmFyQ29udGVudEVsZW1lbnQ9dC5jcmVhdGVFbGVtZW50KCJzcGFuIiksdGhpcy5faW5rQmFyRWxlbWVudC5jbGFzc05hbWU9Im1kYy10YWItaW5kaWNhdG9yIix0aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudC5jbGFzc05hbWU9Im1kYy10YWItaW5kaWNhdG9yX19jb250ZW50IG1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUiLHRoaXMuX2lua0JhckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5faW5rQmFyQ29udGVudEVsZW1lbnQpLHRoaXMuX2FwcGVuZElua0JhckVsZW1lbnQoKX1fYXBwZW5kSW5rQmFyRWxlbWVudCgpeyh0aGlzLl9maXRUb0NvbnRlbnQ/dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLm1kYy10YWJfX2NvbnRlbnQiKTp0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuYXBwZW5kQ2hpbGQodGhpcy5faW5rQmFyRWxlbWVudCl9fX12YXIgZFk9bmV3IGllKCJNYXRJbmtCYXJQb3NpdGlvbmVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiB0PT4oe2xlZnQ6dD8odC5vZmZzZXRMZWZ0fHwwKSsicHgiOiIwIix3aWR0aDp0Pyh0Lm9mZnNldFdpZHRofHwwKSsicHgiOiIwIn0pfX0pLFZ4ZT1LcihjbGFzc3t9KSxNTD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVnhle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5lbGVtZW50UmVmPWV9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldE9mZnNldExlZnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdH1nZXRPZmZzZXRXaWR0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLGZlYXR1cmVzOltMZV19KSxufSkoKSxIeGU9KGNZKE1MKSxLcihjbGFzc3t9KSksd0w9bmV3IGllKCJNQVRfVEFCX0dST1VQIiksdVk9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEh4ZXtnZXQgY29udGVudCgpe3JldHVybiB0aGlzLl9jb250ZW50UG9ydGFsfWNvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5fY2xvc2VzdFRhYkdyb3VwPWksdGhpcy50ZXh0TGFiZWw9IiIsdGhpcy5fY29udGVudFBvcnRhbD1udWxsLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcgQWUsdGhpcy5wb3NpdGlvbj1udWxsLHRoaXMub3JpZ2luPW51bGwsdGhpcy5pc0FjdGl2ZT0hMX1uZ09uQ2hhbmdlcyhlKXsoZS5oYXNPd25Qcm9wZXJ0eSgidGV4dExhYmVsIil8fGUuaGFzT3duUHJvcGVydHkoImRpc2FibGVkIikpJiZ0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9bmdPbkluaXQoKXt0aGlzLl9jb250ZW50UG9ydGFsPW5ldyBKbyh0aGlzLl9leHBsaWNpdENvbnRlbnR8fHRoaXMuX2ltcGxpY2l0Q29udGVudCx0aGlzLl92aWV3Q29udGFpbmVyUmVmKX1fc2V0VGVtcGxhdGVMYWJlbElucHV0KGUpe2UmJmUuX2Nsb3Nlc3RUYWI9PT10aGlzJiYodGhpcy5fdGVtcGxhdGVMYWJlbD1lKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhabiksQyh3TCw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZZZShTaSw3KSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLl9pbXBsaWNpdENvbnRlbnQ9ci5maXJzdCl9fSxpbnB1dHM6e3RleHRMYWJlbDpbImxhYmVsIiwidGV4dExhYmVsIl0sYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxsYWJlbENsYXNzOiJsYWJlbENsYXNzIixib2R5Q2xhc3M6ImJvZHlDbGFzcyJ9LGZlYXR1cmVzOltMZSxHdF19KSxufSkoKSxhWT1Zbyh7cGFzc2l2ZTohMH0pLHBZPSgoKT0+e2NsYXNzIG57Z2V0IGRpc2FibGVQYWdpbmF0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVQYWdpbmF0aW9ufXNldCBkaXNhYmxlUGFnaW5hdGlvbihlKXt0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj1VdChlKX1nZXQgc2VsZWN0ZWRJbmRleCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4fXNldCBzZWxlY3RlZEluZGV4KGUpe2U9RGkoZSksdGhpcy5fc2VsZWN0ZWRJbmRleCE9ZSYmKHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSEwLHRoaXMuX3NlbGVjdGVkSW5kZXg9ZSx0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oZSkpfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3ZpZXdwb3J0UnVsZXI9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9wbGF0Zm9ybT1zLHRoaXMuX2FuaW1hdGlvbk1vZGU9bCx0aGlzLl9zY3JvbGxEaXN0YW5jZT0wLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgQWUsdGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scz0hMSx0aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9ITAsdGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0hMCx0aGlzLl9zdG9wU2Nyb2xsaW5nPW5ldyBBZSx0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLl9zZWxlY3RlZEluZGV4PTAsdGhpcy5zZWxlY3RGb2N1c2VkSW5kZXg9bmV3IEwsdGhpcy5pbmRleEZvY3VzZWQ9bmV3IEwsYS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2FpKGUubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fc3RvcEludGVydmFsKCl9KX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe2FpKHRoaXMuX3ByZXZpb3VzUGFnaW5hdG9yLm5hdGl2ZUVsZW1lbnQsInRvdWNoc3RhcnQiLGFZKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiKX0pLGFpKHRoaXMuX25leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIsYVkpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImFmdGVyIil9KX1uZ0FmdGVyQ29udGVudEluaXQoKXtsZXQgZT10aGlzLl9kaXI/dGhpcy5fZGlyLmNoYW5nZTpxdCgibHRyIiksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxNTApLHI9KCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKX07dGhpcy5fa2V5TWFuYWdlcj1uZXcgZ2codGhpcy5faXRlbXMpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpLndpdGhIb21lQW5kRW5kKCkud2l0aFdyYXAoKS5za2lwUHJlZGljYXRlKCgpPT4hMSksdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKHp0KDEpKS5zdWJzY3JpYmUociksY24oZSxpLHRoaXMuX2l0ZW1zLmNoYW5nZXMsdGhpcy5faXRlbXNSZXNpemVkKCkpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fbmdab25lLnJ1bigoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9zY3JvbGxEaXN0YW5jZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2UpKSxyKCl9KX0pLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9KSx0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5zdWJzY3JpYmUobz0+e3RoaXMuaW5kZXhGb2N1c2VkLmVtaXQobyksdGhpcy5fc2V0VGFiRm9jdXMobyl9KX1faXRlbXNSZXNpemVkKCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIFJlc2l6ZU9ic2VydmVyP3RvOnRoaXMuX2l0ZW1zLmNoYW5nZXMucGlwZShObih0aGlzLl9pdGVtcykseWkoZT0+bmV3IGVuKGk9PnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCByPW5ldyBSZXNpemVPYnNlcnZlcihvPT5pLm5leHQobykpO3JldHVybiBlLmZvckVhY2gobz0+ci5vYnNlcnZlKG8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSksKCk9PntyLmRpc2Nvbm5lY3QoKX19KSkpLCRhKDEpLFZlKGU9PmUuc29tZShpPT5pLmNvbnRlbnRSZWN0LndpZHRoPjAmJmkuY29udGVudFJlY3QuaGVpZ2h0PjApKSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5fdGFiTGFiZWxDb3VudCE9dGhpcy5faXRlbXMubGVuZ3RoJiYodGhpcy51cGRhdGVQYWdpbmF0aW9uKCksdGhpcy5fdGFiTGFiZWxDb3VudD10aGlzLl9pdGVtcy5sZW5ndGgsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkJiYodGhpcy5fc2Nyb2xsVG9MYWJlbCh0aGlzLl9zZWxlY3RlZEluZGV4KSx0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCksdGhpcy5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCksdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZCYmKHRoaXMuX3VwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2tleU1hbmFnZXI/LmRlc3Ryb3koKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3N0b3BTY3JvbGxpbmcuY29tcGxldGUoKX1faGFuZGxlS2V5ZG93bihlKXtpZigheXIoZSkpc3dpdGNoKGUua2V5Q29kZSl7Y2FzZSAxMzpjYXNlIDMyOmlmKHRoaXMuZm9jdXNJbmRleCE9PXRoaXMuc2VsZWN0ZWRJbmRleCl7bGV0IGk9dGhpcy5faXRlbXMuZ2V0KHRoaXMuZm9jdXNJbmRleCk7aSYmIWkuZGlzYWJsZWQmJih0aGlzLnNlbGVjdEZvY3VzZWRJbmRleC5lbWl0KHRoaXMuZm9jdXNJbmRleCksdGhpcy5faXRlbVNlbGVjdGVkKGUpKX1icmVhaztkZWZhdWx0OnRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGUpfX1fb25Db250ZW50Q2hhbmdlcygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtlIT09dGhpcy5fY3VycmVudFRleHRDb250ZW50JiYodGhpcy5fY3VycmVudFRleHRDb250ZW50PWV8fCIiLHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpfWdldCBmb2N1c0luZGV4KCl7cmV0dXJuIHRoaXMuX2tleU1hbmFnZXI/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg6MH1zZXQgZm9jdXNJbmRleChlKXshdGhpcy5faXNWYWxpZEluZGV4KGUpfHx0aGlzLmZvY3VzSW5kZXg9PT1lfHwhdGhpcy5fa2V5TWFuYWdlcnx8dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpfV9pc1ZhbGlkSW5kZXgoZSl7cmV0dXJuIXRoaXMuX2l0ZW1zfHwhIXRoaXMuX2l0ZW1zLnRvQXJyYXkoKVtlXX1fc2V0VGFiRm9jdXMoZSl7aWYodGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scyYmdGhpcy5fc2Nyb2xsVG9MYWJlbChlKSx0aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoKXt0aGlzLl9pdGVtcy50b0FycmF5KClbZV0uZm9jdXMoKTtsZXQgaT10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7aS5zY3JvbGxMZWZ0PSJsdHIiPT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8wOmkuc2Nyb2xsV2lkdGgtaS5vZmZzZXRXaWR0aH19X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJuO2xldCBlPXRoaXMuc2Nyb2xsRGlzdGFuY2UsaT0ibHRyIj09PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPy1lOmU7dGhpcy5fdGFiTGlzdC5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoaSl9cHgpYCwodGhpcy5fcGxhdGZvcm0uVFJJREVOVHx8dGhpcy5fcGxhdGZvcm0uRURHRSkmJih0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdD0wKX1nZXQgc2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2V9c2V0IHNjcm9sbERpc3RhbmNlKGUpe3RoaXMuX3Njcm9sbFRvKGUpfV9zY3JvbGxIZWFkZXIoZSl7cmV0dXJuIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Njcm9sbERpc3RhbmNlKygiYmVmb3JlIj09ZT8tMToxKSp0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgvMyl9X2hhbmRsZVBhZ2luYXRvckNsaWNrKGUpe3RoaXMuX3N0b3BJbnRlcnZhbCgpLHRoaXMuX3Njcm9sbEhlYWRlcihlKX1fc2Nyb2xsVG9MYWJlbChlKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtsZXQgaT10aGlzLl9pdGVtcz90aGlzLl9pdGVtcy50b0FycmF5KClbZV06bnVsbDtpZighaSlyZXR1cm47bGV0IHMsbCxyPXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCx7b2Zmc2V0TGVmdDpvLG9mZnNldFdpZHRoOmF9PWkuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50OyJsdHIiPT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8ocz1vLGw9cythKToobD10aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aC1vLHM9bC1hKTtsZXQgYz10aGlzLnNjcm9sbERpc3RhbmNlLGQ9dGhpcy5zY3JvbGxEaXN0YW5jZStyO3M8Yz90aGlzLnNjcm9sbERpc3RhbmNlLT1jLXM6bD5kJiYodGhpcy5zY3JvbGxEaXN0YW5jZSs9TWF0aC5taW4obC1kLHMtYykpfV9jaGVja1BhZ2luYXRpb25FbmFibGVkKCl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbil0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPSExO2Vsc2V7bGV0IGU9dGhpcy5fdGFiTGlzdElubmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg+dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO2V8fCh0aGlzLnNjcm9sbERpc3RhbmNlPTApLGUhPT10aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzJiZ0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPWV9fV9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCl7dGhpcy5kaXNhYmxlUGFnaW5hdGlvbj90aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9dGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0hMDoodGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0wPT10aGlzLnNjcm9sbERpc3RhbmNlLHRoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLnNjcm9sbERpc3RhbmNlPT10aGlzLl9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fdGFiTGlzdElubmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGgtdGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwwfV9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKXtsZXQgZT10aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVt0aGlzLnNlbGVjdGVkSW5kZXhdOm51bGwsaT1lP2UuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGw7aT90aGlzLl9pbmtCYXIuYWxpZ25Ub0VsZW1lbnQoaSk6dGhpcy5faW5rQmFyLmhpZGUoKX1fc3RvcEludGVydmFsKCl7dGhpcy5fc3RvcFNjcm9sbGluZy5uZXh0KCl9X2hhbmRsZVBhZ2luYXRvclByZXNzKGUsaSl7aSYmbnVsbCE9aS5idXR0b24mJjAhPT1pLmJ1dHRvbnx8KHRoaXMuX3N0b3BJbnRlcnZhbCgpLEphKDY1MCwxMDApLnBpcGUob3QoY24odGhpcy5fc3RvcFNjcm9sbGluZyx0aGlzLl9kZXN0cm95ZWQpKSkuc3Vic2NyaWJlKCgpPT57bGV0e21heFNjcm9sbERpc3RhbmNlOnIsZGlzdGFuY2U6b309dGhpcy5fc2Nyb2xsSGVhZGVyKGUpOygwPT09b3x8bz49cikmJnRoaXMuX3N0b3BJbnRlcnZhbCgpfSkpfV9zY3JvbGxUbyhlKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybnttYXhTY3JvbGxEaXN0YW5jZTowLGRpc3RhbmNlOjB9O2xldCBpPXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCk7cmV0dXJuIHRoaXMuX3Njcm9sbERpc3RhbmNlPU1hdGgubWF4KDAsTWF0aC5taW4oaSxlKSksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkPSEwLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx7bWF4U2Nyb2xsRGlzdGFuY2U6aSxkaXN0YW5jZTp0aGlzLl9zY3JvbGxEaXN0YW5jZX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoRnQpLEMoS28pLEMoSGksOCksQyhhdCksQygkbiksQyhkaSw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4saW5wdXRzOntkaXNhYmxlUGFnaW5hdGlvbjoiZGlzYWJsZVBhZ2luYXRpb24ifX0pLG59KSgpLGZZPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwWXtnZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKGUpe3RoaXMuX2Rpc2FibGVSaXBwbGU9VXQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCl7c3VwZXIoZSxpLHIsbyxhLHMsbCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1faXRlbVNlbGVjdGVkKGUpe2UucHJldmVudERlZmF1bHQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSksQyhGdCksQyhLbyksQyhIaSw4KSxDKGF0KSxDKCRuKSxDKGRpLDgpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxmZWF0dXJlczpbTGVdfSksbn0pKCksU0w9bmV3IGllKCJNQVRfVEFCU19DT05GSUciKSxqeGU9MCxHeGU9Z28oUW8oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pLCJwcmltYXJ5IiksbVk9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEd4ZXtnZXQgZHluYW1pY0hlaWdodCgpe3JldHVybiB0aGlzLl9keW5hbWljSGVpZ2h0fXNldCBkeW5hbWljSGVpZ2h0KGUpe3RoaXMuX2R5bmFtaWNIZWlnaHQ9VXQoZSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleChlKXt0aGlzLl9pbmRleFRvU2VsZWN0PURpKGUsbnVsbCl9Z2V0IGFuaW1hdGlvbkR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbkR1cmF0aW9ufXNldCBhbmltYXRpb25EdXJhdGlvbihlKXt0aGlzLl9hbmltYXRpb25EdXJhdGlvbj0vXlxkKyQvLnRlc3QoZSsiIik/ZSsibXMiOmV9Z2V0IGNvbnRlbnRUYWJJbmRleCgpe3JldHVybiB0aGlzLl9jb250ZW50VGFiSW5kZXh9c2V0IGNvbnRlbnRUYWJJbmRleChlKXt0aGlzLl9jb250ZW50VGFiSW5kZXg9RGkoZSxudWxsKX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVV0KGUpfWdldCBwcmVzZXJ2ZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fcHJlc2VydmVDb250ZW50fXNldCBwcmVzZXJ2ZUNvbnRlbnQoZSl7dGhpcy5fcHJlc2VydmVDb250ZW50PVV0KGUpfWdldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IoZSl7bGV0IGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtpLnJlbW92ZSgibWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kIixgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSxlJiZpLmFkZCgibWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kIixgbWF0LWJhY2tncm91bmQtJHtlfWApLHRoaXMuX2JhY2tncm91bmRDb2xvcj1lfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1vLHRoaXMuX3RhYnM9bmV3IElzLHRoaXMuX2luZGV4VG9TZWxlY3Q9MCx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwsdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9MCx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPXluLkVNUFRZLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uPXluLkVNUFRZLHRoaXMuX2R5bmFtaWNIZWlnaHQ9ITEsdGhpcy5fc2VsZWN0ZWRJbmRleD1udWxsLHRoaXMuaGVhZGVyUG9zaXRpb249ImFib3ZlIix0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLl9wcmVzZXJ2ZUNvbnRlbnQ9ITEsdGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlPW5ldyBMLHRoaXMuZm9jdXNDaGFuZ2U9bmV3IEwsdGhpcy5hbmltYXRpb25Eb25lPW5ldyBMLHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2U9bmV3IEwoITApLHRoaXMuX2dyb3VwSWQ9anhlKyssdGhpcy5hbmltYXRpb25EdXJhdGlvbj1yJiZyLmFuaW1hdGlvbkR1cmF0aW9uP3IuYW5pbWF0aW9uRHVyYXRpb246IjUwMG1zIix0aGlzLmRpc2FibGVQYWdpbmF0aW9uPSEoIXJ8fG51bGw9PXIuZGlzYWJsZVBhZ2luYXRpb24pJiZyLmRpc2FibGVQYWdpbmF0aW9uLHRoaXMuZHluYW1pY0hlaWdodD0hKCFyfHxudWxsPT1yLmR5bmFtaWNIZWlnaHQpJiZyLmR5bmFtaWNIZWlnaHQsdGhpcy5jb250ZW50VGFiSW5kZXg9cj8uY29udGVudFRhYkluZGV4Pz9udWxsLHRoaXMucHJlc2VydmVDb250ZW50PSEhcj8ucHJlc2VydmVDb250ZW50fW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZih0aGlzLl9zZWxlY3RlZEluZGV4IT1lKXtsZXQgaT1udWxsPT10aGlzLl9zZWxlY3RlZEluZGV4O2lmKCFpKXt0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoZSkpO2xldCByPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7ci5zdHlsZS5taW5IZWlnaHQ9ci5jbGllbnRIZWlnaHQrInB4In1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fdGFicy5mb3JFYWNoKChyLG8pPT5yLmlzQWN0aXZlPW89PT1lKSxpfHwodGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlLmVtaXQoZSksdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS5taW5IZWlnaHQ9IiIpfSl9dGhpcy5fdGFicy5mb3JFYWNoKChpLHIpPT57aS5wb3NpdGlvbj1yLWUsbnVsbCE9dGhpcy5fc2VsZWN0ZWRJbmRleCYmMD09aS5wb3NpdGlvbiYmIWkub3JpZ2luJiYoaS5vcmlnaW49ZS10aGlzLl9zZWxlY3RlZEluZGV4KX0pLHRoaXMuX3NlbGVjdGVkSW5kZXghPT1lJiYodGhpcy5fc2VsZWN0ZWRJbmRleD1lLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc3Vic2NyaWJlVG9BbGxUYWJDaGFuZ2VzKCksdGhpcy5fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPXRoaXMuX3RhYnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLl9jbGFtcFRhYkluZGV4KHRoaXMuX2luZGV4VG9TZWxlY3QpO2lmKGU9PT10aGlzLl9zZWxlY3RlZEluZGV4KXtsZXQgcixpPXRoaXMuX3RhYnMudG9BcnJheSgpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKWlmKGlbb10uaXNBY3RpdmUpe3RoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fc2VsZWN0ZWRJbmRleD1vLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCxyPWlbb107YnJlYWt9IXImJmlbZV0mJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntpW2VdLmlzQWN0aXZlPSEwLHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudChlKSl9KX10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfV9zdWJzY3JpYmVUb0FsbFRhYkNoYW5nZXMoKXt0aGlzLl9hbGxUYWJzLmNoYW5nZXMucGlwZShObih0aGlzLl9hbGxUYWJzKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl90YWJzLnJlc2V0KGUuZmlsdGVyKGk9PmkuX2Nsb3Nlc3RUYWJHcm91cD09PXRoaXN8fCFpLl9jbG9zZXN0VGFiR3JvdXApKSx0aGlzLl90YWJzLm5vdGlmeU9uQ2hhbmdlcygpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl90YWJzLmRlc3Ryb3koKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1yZWFsaWduSW5rQmFyKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpfXVwZGF0ZVBhZ2luYXRpb24oKXt0aGlzLl90YWJIZWFkZXImJnRoaXMuX3RhYkhlYWRlci51cGRhdGVQYWdpbmF0aW9uKCl9Zm9jdXNUYWIoZSl7bGV0IGk9dGhpcy5fdGFiSGVhZGVyO2kmJihpLmZvY3VzSW5kZXg9ZSl9X2ZvY3VzQ2hhbmdlZChlKXt0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PWUsdGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KGUpKX1fY3JlYXRlQ2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IHlMO3JldHVybiBpLmluZGV4PWUsdGhpcy5fdGFicyYmdGhpcy5fdGFicy5sZW5ndGgmJihpLnRhYj10aGlzLl90YWJzLnRvQXJyYXkoKVtlXSksaX1fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKXt0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbiYmdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj1jbiguLi50aGlzLl90YWJzLm1hcChlPT5lLl9zdGF0ZUNoYW5nZXMpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fY2xhbXBUYWJJbmRleChlKXtyZXR1cm4gTWF0aC5taW4odGhpcy5fdGFicy5sZW5ndGgtMSxNYXRoLm1heChlfHwwLDApKX1fZ2V0VGFiTGFiZWxJZChlKXtyZXR1cm5gbWF0LXRhYi1sYWJlbC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9nZXRUYWJDb250ZW50SWQoZSl7cmV0dXJuYG1hdC10YWItY29udGVudC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChlKXtpZighdGhpcy5fZHluYW1pY0hlaWdodHx8IXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KXJldHVybjtsZXQgaT10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O2kuc3R5bGUuaGVpZ2h0PXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KyJweCIsdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQmJihpLnN0eWxlLmhlaWdodD1lKyJweCIpfV9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpe2xldCBlPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9ZS5jbGllbnRIZWlnaHQsZS5zdHlsZS5oZWlnaHQ9IiIsdGhpcy5hbmltYXRpb25Eb25lLmVtaXQoKX1faGFuZGxlQ2xpY2soZSxpLHIpe2kuZm9jdXNJbmRleD1yLGUuZGlzYWJsZWR8fCh0aGlzLnNlbGVjdGVkSW5kZXg9cil9X2dldFRhYkluZGV4KGUpe3JldHVybiBlPT09KHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg/P3RoaXMuc2VsZWN0ZWRJbmRleCk/MDotMX1fdGFiRm9jdXNDaGFuZ2VkKGUsaSl7ZSYmIm1vdXNlIiE9PWUmJiJ0b3VjaCIhPT1lJiYodGhpcy5fdGFiSGVhZGVyLmZvY3VzSW5kZXg9aSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoRnQpLEMoU0wsOCksQyhkaSw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4saW5wdXRzOntkeW5hbWljSGVpZ2h0OiJkeW5hbWljSGVpZ2h0IixzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4IixoZWFkZXJQb3NpdGlvbjoiaGVhZGVyUG9zaXRpb24iLGFuaW1hdGlvbkR1cmF0aW9uOiJhbmltYXRpb25EdXJhdGlvbiIsY29udGVudFRhYkluZGV4OiJjb250ZW50VGFiSW5kZXgiLGRpc2FibGVQYWdpbmF0aW9uOiJkaXNhYmxlUGFnaW5hdGlvbiIscHJlc2VydmVDb250ZW50OiJwcmVzZXJ2ZUNvbnRlbnQiLGJhY2tncm91bmRDb2xvcjoiYmFja2dyb3VuZENvbG9yIn0sb3V0cHV0czp7c2VsZWN0ZWRJbmRleENoYW5nZToic2VsZWN0ZWRJbmRleENoYW5nZSIsZm9jdXNDaGFuZ2U6ImZvY3VzQ2hhbmdlIixhbmltYXRpb25Eb25lOiJhbmltYXRpb25Eb25lIixzZWxlY3RlZFRhYkNoYW5nZToic2VsZWN0ZWRUYWJDaGFuZ2UifSxmZWF0dXJlczpbTGVdfSksbn0pKCkseUw9Y2xhc3N7fSxXeGU9MCxoWT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcFl7Z2V0IGJhY2tncm91bmRDb2xvcigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29sb3J9c2V0IGJhY2tncm91bmRDb2xvcihlKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2kucmVtb3ZlKCJtYXQtdGFicy13aXRoLWJhY2tncm91bmQiLGBtYXQtYmFja2dyb3VuZC0ke3RoaXMuYmFja2dyb3VuZENvbG9yfWApLGUmJmkuYWRkKCJtYXQtdGFicy13aXRoLWJhY2tncm91bmQiLGBtYXQtYmFja2dyb3VuZC0ke2V9YCksdGhpcy5fYmFja2dyb3VuZENvbG9yPWV9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX1zZXQgZGlzYWJsZVJpcHBsZShlKXt0aGlzLl9kaXNhYmxlUmlwcGxlPVV0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwpe3N1cGVyKGUsbyxhLGkscixzLGwpLHRoaXMuX2Rpc2FibGVSaXBwbGU9ITEsdGhpcy5jb2xvcj0icHJpbWFyeSJ9X2l0ZW1TZWxlY3RlZCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9pdGVtcy5jaGFuZ2VzLnBpcGUoTm4obnVsbCksb3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy51cGRhdGVBY3RpdmVMaW5rKCl9KSxzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKX11cGRhdGVBY3RpdmVMaW5rKCl7aWYoIXRoaXMuX2l0ZW1zKXJldHVybjtsZXQgZT10aGlzLl9pdGVtcy50b0FycmF5KCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspaWYoZVtpXS5hY3RpdmUpcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleD1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHZvaWQodGhpcy50YWJQYW5lbCYmKHRoaXMudGFiUGFuZWwuX2FjdGl2ZVRhYklkPWVbaV0uaWQpKTt0aGlzLnNlbGVjdGVkSW5kZXg9LTEsdGhpcy5faW5rQmFyLmhpZGUoKX1fZ2V0Um9sZSgpe3JldHVybiB0aGlzLnRhYlBhbmVsPyJ0YWJsaXN0Ijp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJyb2xlIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoSGksOCksQyhhdCksQyhGdCksQyhLbyksQygkbiksQyhkaSw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4saW5wdXRzOntiYWNrZ3JvdW5kQ29sb3I6ImJhY2tncm91bmRDb2xvciIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJQYW5lbDoidGFiUGFuZWwifSxmZWF0dXJlczpbTGVdfSksbn0pKCkscXhlPXZkKFFvKEtyKGNsYXNze30pKSksZ1k9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHF4ZXtnZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0aXZlfXNldCBhY3RpdmUoZSl7bGV0IGk9VXQoZSk7aSE9PXRoaXMuX2lzQWN0aXZlJiYodGhpcy5faXNBY3RpdmU9aSx0aGlzLl90YWJOYXZCYXIudXBkYXRlQWN0aXZlTGluaygpKX1nZXQgcmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLl90YWJOYXZCYXIuZGlzYWJsZVJpcHBsZXx8ISF0aGlzLnJpcHBsZUNvbmZpZy5kaXNhYmxlZH1jb25zdHJ1Y3RvcihlLGkscixvLGEscyl7c3VwZXIoKSx0aGlzLl90YWJOYXZCYXI9ZSx0aGlzLmVsZW1lbnRSZWY9aSx0aGlzLl9mb2N1c01vbml0b3I9YSx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLmlkPSJtYXQtdGFiLWxpbmstIitXeGUrKyx0aGlzLnJpcHBsZUNvbmZpZz1yfHx7fSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KG8pfHwwLCJOb29wQW5pbWF0aW9ucyI9PT1zJiYodGhpcy5yaXBwbGVDb25maWcuYW5pbWF0aW9uPXtlbnRlckR1cmF0aW9uOjAsZXhpdER1cmF0aW9uOjB9KX1mb2N1cygpe3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5lbGVtZW50UmVmKX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLmVsZW1lbnRSZWYpfV9oYW5kbGVGb2N1cygpe3RoaXMuX3RhYk5hdkJhci5mb2N1c0luZGV4PXRoaXMuX3RhYk5hdkJhci5faXRlbXMudG9BcnJheSgpLmluZGV4T2YodGhpcyl9X2hhbmRsZUtleWRvd24oZSl7dGhpcy5fdGFiTmF2QmFyLnRhYlBhbmVsJiYzMj09PWUua2V5Q29kZSYmdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX1fZ2V0QXJpYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX3RhYk5hdkJhci50YWJQYW5lbD90aGlzLl90YWJOYXZCYXIudGFiUGFuZWw/LmlkOnRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiYXJpYS1jb250cm9scyIpfV9nZXRBcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fdGFiTmF2QmFyLnRhYlBhbmVsP3RoaXMuYWN0aXZlPyJ0cnVlIjoiZmFsc2UiOnRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIpfV9nZXRBcmlhQ3VycmVudCgpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuX3RhYk5hdkJhci50YWJQYW5lbD8icGFnZSI6bnVsbH1fZ2V0Um9sZSgpe3JldHVybiB0aGlzLl90YWJOYXZCYXIudGFiUGFuZWw/InRhYiI6dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJyb2xlIil9X2dldFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuX3RhYk5hdkJhci50YWJQYW5lbD90aGlzLl9pc0FjdGl2ZSYmIXRoaXMuZGlzYWJsZWQ/MDotMTp0aGlzLnRhYkluZGV4fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGhZKSxDKGJlKSxDKEdiLDgpLFZyKCJ0YWJpbmRleCIpLEMobHIpLEMoZGksOCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLGlucHV0czp7YWN0aXZlOiJhY3RpdmUiLGlkOiJpZCJ9LGZlYXR1cmVzOltMZV19KSxufSkoKTtmdW5jdGlvbiBZeGUobix0KXsxJm4mJlh0KDApfWNZKGdZKTt2YXIgeVk9WyIqIl07ZnVuY3Rpb24gWHhlKG4sdCl7fXZhciBReGU9ZnVuY3Rpb24obil7cmV0dXJue2FuaW1hdGlvbkR1cmF0aW9uOm59fSxaeGU9ZnVuY3Rpb24obix0KXtyZXR1cm57dmFsdWU6bixwYXJhbXM6dH19LEt4ZT1bInRhYkxpc3RDb250YWluZXIiXSxKeGU9WyJ0YWJMaXN0Il0sJHhlPVsidGFiTGlzdElubmVyIl0sZUNlPVsibmV4dFBhZ2luYXRvciJdLHRDZT1bInByZXZpb3VzUGFnaW5hdG9yIl0sbkNlPVsidGFiQm9keVdyYXBwZXIiXSxpQ2U9WyJ0YWJIZWFkZXIiXTtmdW5jdGlvbiByQ2Uobix0KXt9ZnVuY3Rpb24gb0NlKG4sdCl7MSZuJiZTKDAsckNlLDAsMCwibmctdGVtcGxhdGUiLDEwKSwyJm4mJl8oImNka1BvcnRhbE91dGxldCIsdygpLiRpbXBsaWNpdC50ZW1wbGF0ZUxhYmVsKX1mdW5jdGlvbiBhQ2Uobix0KXsxJm4mJlQoMCksMiZuJiZ1dCh3KCkuJGltcGxpY2l0LnRleHRMYWJlbCl9ZnVuY3Rpb24gc0NlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw2KSxEKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgcj1YKGUpLG89ci4kaW1wbGljaXQsYT1yLmluZGV4LHM9dygpLGw9dHQoMSk7cmV0dXJuIFEocy5faGFuZGxlQ2xpY2sobyxsLGEpKX0pKCJjZGtGb2N1c0NoYW5nZSIsZnVuY3Rpb24ocil7bGV0IGE9WChlKS5pbmRleDtyZXR1cm4gUSh3KCkuX3RhYkZvY3VzQ2hhbmdlZChyLGEpKX0pLGgoMSwiZGl2Iiw3KSxTKDIsb0NlLDEsMSwibmctdGVtcGxhdGUiLDgpLFMoMyxhQ2UsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw5LFp0KSxnKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXR0KDQpLG89dygpO1FlKCJtYXQtdGFiLWxhYmVsLWFjdGl2ZSIsby5zZWxlY3RlZEluZGV4PT09aSksXygiaWQiLG8uX2dldFRhYkxhYmVsSWQoaSkpKCJuZ0NsYXNzIixlLmxhYmVsQ2xhc3MpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCkoIm1hdFJpcHBsZURpc2FibGVkIixlLmRpc2FibGVkfHxvLmRpc2FibGVSaXBwbGUpLFBlKCJ0YWJJbmRleCIsby5fZ2V0VGFiSW5kZXgoaSkpKCJhcmlhLXBvc2luc2V0IixpKzEpKCJhcmlhLXNldHNpemUiLG8uX3RhYnMubGVuZ3RoKSgiYXJpYS1jb250cm9scyIsby5fZ2V0VGFiQ29udGVudElkKGkpKSgiYXJpYS1zZWxlY3RlZCIsby5zZWxlY3RlZEluZGV4PT09aSkoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IiwhZS5hcmlhTGFiZWwmJmUuYXJpYUxhYmVsbGVkYnk/ZS5hcmlhTGFiZWxsZWRieTpudWxsKSxiKDIpLF8oIm5nSWYiLGUudGVtcGxhdGVMYWJlbCkoIm5nSWZFbHNlIixyKX19ZnVuY3Rpb24gbENlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwibWF0LXRhYi1ib2R5IiwxMSksRCgiX29uQ2VudGVyZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuX3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCkpfSkoIl9vbkNlbnRlcmluZyIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuX3NldFRhYkJvZHlXcmFwcGVySGVpZ2h0KHIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXcoKTtRZSgibWF0LXRhYi1ib2R5LWFjdGl2ZSIsci5zZWxlY3RlZEluZGV4PT09aSksXygiaWQiLHIuX2dldFRhYkNvbnRlbnRJZChpKSkoIm5nQ2xhc3MiLGUuYm9keUNsYXNzKSgiY29udGVudCIsZS5jb250ZW50KSgicG9zaXRpb24iLGUucG9zaXRpb24pKCJvcmlnaW4iLGUub3JpZ2luKSgiYW5pbWF0aW9uRHVyYXRpb24iLHIuYW5pbWF0aW9uRHVyYXRpb24pKCJwcmVzZXJ2ZUNvbnRlbnQiLHIucHJlc2VydmVDb250ZW50KSxQZSgidGFiaW5kZXgiLG51bGwhPXIuY29udGVudFRhYkluZGV4JiZyLnNlbGVjdGVkSW5kZXg9PT1pP3IuY29udGVudFRhYkluZGV4Om51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLHIuX2dldFRhYkxhYmVsSWQoaSkpfX12YXIgX1k9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fbmdab25lPWksdGhpcy5faW5rQmFyUG9zaXRpb25lcj1yLHRoaXMuX2FuaW1hdGlvbk1vZGU9b31hbGlnblRvRWxlbWVudChlKXt0aGlzLnNob3coKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoenQoMSkpLnN1YnNjcmliZSgoKT0+e2xldCBpPXRoaXMuX2lua0JhclBvc2l0aW9uZXIoZSkscj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7ci5zdHlsZS5sZWZ0PWkubGVmdCxyLnN0eWxlLndpZHRoPWkud2lkdGh9KX0pfXNob3coKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSJ9aGlkZSgpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKGF0KSxDKGRZKSxDKGRpLDgpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWluay1iYXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtaW5rLWJhciJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZRZSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKX19KSxufSkoKSx1dj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdVl7Z2V0IHRlbXBsYXRlTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVMYWJlbH1zZXQgdGVtcGxhdGVMYWJlbChlKXt0aGlzLl9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9Q24obikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihjaShyLENFLDUpLGNpKHIsc1ksNyxTaSkpLDImZSl7bGV0IG87d2Uobz1TZSgpKSYmKGkudGVtcGxhdGVMYWJlbD1vLmZpcnN0KSx3ZShvPVNlKCkpJiYoaS5fZXhwbGljaXRDb250ZW50PW8uZmlyc3QpfX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFRhYiJdLGZlYXR1cmVzOltSdChbe3Byb3ZpZGU6Q0wsdXNlRXhpc3Rpbmc6bn1dKSxMZV0sbmdDb250ZW50U2VsZWN0b3JzOnlZLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZ24oKSxTKDAsWXhlLDEsMCwibmctdGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGNDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdkx7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoUXIpLEMoWm4pLEMoVm4oKCk9PmJZKSksQyhrdCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJCb2R5SG9zdCIsIiJdXSxmZWF0dXJlczpbTGVdfSksbn0pKCksYlk9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhMe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkscil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoSGksOCksQyhGdCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItYm9keSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlllKE5vLDUpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkuX3BvcnRhbEhvc3Q9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC10YWItYm9keSJdLGZlYXR1cmVzOltMZV0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbImNka1Njcm9sbGFibGUiLCIiLDEsIm1hdC10YWItYm9keS1jb250ZW50Il0sWyJjb250ZW50IiwiIl0sWyJtYXRUYWJCb2R5SG9zdCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwLDEpLEQoIkB0cmFuc2xhdGVUYWIuc3RhcnQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQobyl9KSgiQHRyYW5zbGF0ZVRhYi5kb25lIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fdHJhbnNsYXRlVGFiQ29tcGxldGUubmV4dChvKX0pLFMoMixYeGUsMCwwLCJuZy10ZW1wbGF0ZSIsMiksZygpKSwyJmUmJl8oIkB0cmFuc2xhdGVUYWIiLFByKDMsWnhlLGkuX3Bvc2l0aW9uLFNuKDEsUXhlLGkuYW5pbWF0aW9uRHVyYXRpb24pKSl9LGRlcGVuZGVuY2llczpbY0NlXSxzdHlsZXM6WycubWF0LXRhYi1ib2R5LWNvbnRlbnR7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30ubWF0LXRhYi1ncm91cC1keW5hbWljLWhlaWdodCAubWF0LXRhYi1ib2R5LWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtdGFiLWJvZHktY29udGVudFtzdHlsZSo9InZpc2liaWxpdHk6IGhpZGRlbiJde2Rpc3BsYXk6bm9uZX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltiTC50cmFuc2xhdGVUYWJdfX0pLG59KSgpLHZZPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBNTHt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihQZSgiYXJpYS1kaXNhYmxlZCIsISFpLmRpc2FibGVkKSxRZSgibWF0LXRhYi1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOltMZV19KSxufSkoKSxkQ2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGZZe2NvbnN0cnVjdG9yKGUsaSxyLG8sYSxzLGwpe3N1cGVyKGUsaSxyLG8sYSxzLGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKEZ0KSxDKEtvKSxDKEhpLDgpLEMoYXQpLEMoJG4pLEMoZGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItaGVhZGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJmNpKHIsdlksNCksMiZlKXtsZXQgbzt3ZShvPVNlKCkpJiYoaS5faXRlbXM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihZZShfWSw3KSxZZShLeGUsNyksWWUoSnhlLDcpLFllKCR4ZSw3KSxZZShlQ2UsNSksWWUodENlLDUpKSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLl9pbmtCYXI9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuX3RhYkxpc3RDb250YWluZXI9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuX3RhYkxpc3Q9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuX3RhYkxpc3RJbm5lcj1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS5fbmV4dFBhZ2luYXRvcj1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS5fcHJldmlvdXNQYWdpbmF0b3I9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC10YWItaGVhZGVyIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJlFlKCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWQiLGkuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMpKCJtYXQtdGFiLWhlYWRlci1ydGwiLCJydGwiPT1pLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9LGlucHV0czp7c2VsZWN0ZWRJbmRleDoic2VsZWN0ZWRJbmRleCJ9LG91dHB1dHM6e3NlbGVjdEZvY3VzZWRJbmRleDoic2VsZWN0Rm9jdXNlZEluZGV4IixpbmRleEZvY3VzZWQ6ImluZGV4Rm9jdXNlZCJ9LGZlYXR1cmVzOltMZV0sbmdDb250ZW50U2VsZWN0b3JzOnlZLGRlY2xzOjE0LHZhcnM6MTAsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJtYXQtcmlwcGxlIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiIsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIiwibWF0LWVsZXZhdGlvbi16NCIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsImNsaWNrIiwibW91c2Vkb3duIiwidG91Y2hlbmQiXSxbInByZXZpb3VzUGFnaW5hdG9yIiwiIl0sWzEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiJdLFsxLCJtYXQtdGFiLWxhYmVsLWNvbnRhaW5lciIsMywia2V5ZG93biJdLFsidGFiTGlzdENvbnRhaW5lciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLDEsIm1hdC10YWItbGlzdCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbInRhYkxpc3QiLCIiXSxbMSwibWF0LXRhYi1sYWJlbHMiXSxbInRhYkxpc3RJbm5lciIsIiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsIm1hdC1yaXBwbGUiLCIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciIsIm1hdC1lbGV2YXRpb24tejQiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiLCJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoZW5kIl0sWyJuZXh0UGFnaW5hdG9yIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZ24oKSxoKDAsImJ1dHRvbiIsMCwxKSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImJlZm9yZSIpfSkoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiLG8pfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLFAoMiwiZGl2IiwyKSxnKCksaCgzLCJkaXYiLDMsNCksRCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSxoKDUsImRpdiIsNSw2KSxEKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Db250ZW50Q2hhbmdlcygpfSksaCg3LCJkaXYiLDcsOCksWHQoOSksZygpLFAoMTAsIm1hdC1pbmstYmFyIiksZygpKCksaCgxMSwiYnV0dG9uIiw5LDEwKSxEKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygiYWZ0ZXIiLG8pfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYWZ0ZXIiKX0pKCJ0b3VjaGVuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc3RvcEludGVydmFsKCl9KSxQKDEzLCJkaXYiLDIpLGcoKSksMiZlJiYoUWUoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxCZWZvcmUpLF8oIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEJlZm9yZXx8bnVsbCksYig1KSxRZSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSxiKDYpLFFlKCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXIpLF8oIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fG51bGwpKX0sZGVwZW5kZW5jaWVzOltGcixwZyxfWV0sc3R5bGVzOlsiLm1hdC10YWItaGVhZGVye2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOjMycHg7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RvdWNoLWFjdGlvbjpub25lO2JveC1zaXppbmc6Y29udGVudC1ib3g7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO291dGxpbmU6MDtwYWRkaW5nOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntkaXNwbGF5OmZsZXh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1sZWZ0OjRweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSgtMTM1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLXJpZ2h0OjRweH0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweCAycHggMCAwO2hlaWdodDo4cHg7d2lkdGg6OHB4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVke2JveC1zaGFkb3c6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LXRhYi1saXN0e2ZsZXgtZ3JvdzoxO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246dHJhbnNmb3JtIDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LWluay1iYXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjJweDt0cmFuc2l0aW9uOjUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LWluay1iYXIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC1pbmstYmFye2JvdHRvbTphdXRvO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pbmstYmFye291dGxpbmU6c29saWQgMnB4O2hlaWdodDowfS5tYXQtdGFiLWxhYmVsc3tkaXNwbGF5OmZsZXh9W21hdC1hbGlnbi10YWJzPWNlbnRlcl0+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsc3tqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVttYXQtYWxpZ24tdGFicz1lbmRdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MX0ubWF0LXRhYi1saXN0Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9Lm1hdC10YWItbGFiZWw6OmJlZm9yZXttYXJnaW46NXB4fUBtZWRpYShtYXgtd2lkdGg6IDU5OXB4KXsubWF0LXRhYi1sYWJlbHttaW4td2lkdGg6NzJweH19Il0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksTUU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIG1Ze2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSxDKEZ0KSxDKFNMLDgpLEMoZGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmY2kocix1diw1KSwyJmUpe2xldCBvO3dlKG89U2UoKSkmJihpLl9hbGxUYWJzPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoWWUobkNlLDUpLFllKGlDZSw1KSksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS5fdGFiQm9keVdyYXBwZXI9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuX3RhYkhlYWRlcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1ncm91cCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZRZSgibWF0LXRhYi1ncm91cC1keW5hbWljLWhlaWdodCIsaS5keW5hbWljSGVpZ2h0KSgibWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIiLCJiZWxvdyI9PT1pLmhlYWRlclBvc2l0aW9uKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl0sZmVhdHVyZXM6W1J0KFt7cHJvdmlkZTp3TCx1c2VFeGlzdGluZzpufV0pLExlXSxkZWNsczo2LHZhcnM6Nyxjb25zdHM6W1szLCJzZWxlY3RlZEluZGV4IiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiaW5kZXhGb2N1c2VkIiwic2VsZWN0Rm9jdXNlZEluZGV4Il0sWyJ0YWJIZWFkZXIiLCIiXSxbImNsYXNzIiwibWF0LXRhYi1sYWJlbCBtYXQtZm9jdXMtaW5kaWNhdG9yIiwicm9sZSIsInRhYiIsIm1hdFRhYkxhYmVsV3JhcHBlciIsIiIsIm1hdC1yaXBwbGUiLCIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIiwzLCJpZCIsIm1hdC10YWItbGFiZWwtYWN0aXZlIiwibmdDbGFzcyIsImRpc2FibGVkIiwibWF0UmlwcGxlRGlzYWJsZWQiLCJjbGljayIsImNka0ZvY3VzQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibWF0LXRhYi1ib2R5LXdyYXBwZXIiXSxbInRhYkJvZHlXcmFwcGVyIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDMsImlkIiwibWF0LXRhYi1ib2R5LWFjdGl2ZSIsIm5nQ2xhc3MiLCJjb250ZW50IiwicG9zaXRpb24iLCJvcmlnaW4iLCJhbmltYXRpb25EdXJhdGlvbiIsInByZXNlcnZlQ29udGVudCIsIl9vbkNlbnRlcmVkIiwiX29uQ2VudGVyaW5nIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJ0YWIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiLCJtYXQtcmlwcGxlIiwiIiwiY2RrTW9uaXRvckVsZW1lbnRGb2N1cyIsIiIsMSwibWF0LXRhYi1sYWJlbCIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwibmdDbGFzcyIsImRpc2FibGVkIiwibWF0UmlwcGxlRGlzYWJsZWQiLCJjbGljayIsImNka0ZvY3VzQ2hhbmdlIl0sWzEsIm1hdC10YWItbGFiZWwtY29udGVudCJdLFszLCJuZ0lmIiwibmdJZkVsc2UiXSxbInRhYlRleHRMYWJlbCIsIiJdLFszLCJjZGtQb3J0YWxPdXRsZXQiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMywiaWQiLCJuZ0NsYXNzIiwiY29udGVudCIsInBvc2l0aW9uIiwib3JpZ2luIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJwcmVzZXJ2ZUNvbnRlbnQiLCJfb25DZW50ZXJlZCIsIl9vbkNlbnRlcmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWF0LXRhYi1oZWFkZXIiLDAsMSksRCgiaW5kZXhGb2N1c2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fZm9jdXNDaGFuZ2VkKG8pfSkoInNlbGVjdEZvY3VzZWRJbmRleCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2VsZWN0ZWRJbmRleD1vfSksUygyLHNDZSw1LDE1LCJkaXYiLDIpLGcoKSxoKDMsImRpdiIsMyw0KSxTKDUsbENlLDEsMTEsIm1hdC10YWItYm9keSIsNSksZygpKSwyJmUmJihfKCJzZWxlY3RlZEluZGV4IixpLnNlbGVjdGVkSW5kZXh8fDApKCJkaXNhYmxlUmlwcGxlIixpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlUGFnaW5hdGlvbiIsaS5kaXNhYmxlUGFnaW5hdGlvbiksYigyKSxfKCJuZ0Zvck9mIixpLl90YWJzKSxiKDEpLFFlKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpLGIoMiksXygibmdGb3JPZiIsaS5fdGFicykpfSxkZXBlbmRlbmNpZXM6W2JuLGRuLEZlLE5vLEZyLHgyLHZZLGJZLGRDZV0sc3R5bGVzOlsiLm1hdC10YWItZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXgtd2lkdGg6MTAwJX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlcntmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX0ubWF0LXRhYi1sYWJlbHtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweDtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3BhY2l0eTouNjttaW4td2lkdGg6MTYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC10YWItbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfS5tYXQtdGFiLWxhYmVsOmZvY3VzOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7b3BhY2l0eToxfS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke29wYWNpdHk6LjV9Lm1hdC10YWItbGFiZWwgLm1hdC10YWItbGFiZWwtY29udGVudHtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVse29wYWNpdHk6MX1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fUBtZWRpYShtYXgtd2lkdGg6IDk1OXB4KXsubWF0LXRhYi1sYWJlbHtwYWRkaW5nOjAgMTJweH19Lm1hdC10YWItZ3JvdXBbbWF0LXN0cmV0Y2gtdGFic10+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVse2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ib2R5LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6ZmxleDt0cmFuc2l0aW9uOmhlaWdodCA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC10YWItYm9keS13cmFwcGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC10YWItYm9keXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOjA7ZmxleC1iYXNpczoxMDAlfS5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87ei1pbmRleDoxO2ZsZXgtZ3JvdzoxfS5tYXQtdGFiLWdyb3VwLm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC10YWItYm9keS5tYXQtdGFiLWJvZHktYWN0aXZle292ZXJmbG93LXk6aGlkZGVufSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHhZPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsWXt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtdGFiLWxhYmVsIiwiIl0sWyIiLCJtYXRUYWJMYWJlbCIsIiJdXSxmZWF0dXJlczpbUnQoW3twcm92aWRlOkNFLHVzZUV4aXN0aW5nOm59XSksTGVdfSksbn0pKCksd0U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlLFF0LHVzLFpvLFB1LERmLFF0XX0pLG59KSgpO2Z1bmN0aW9uIHVDZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNwYW4iLDUpLEQoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKS4kaW1wbGljaXQ7cmV0dXJuIFEodygpLm9uQWN0aXZlUGx1Z2luU2VsZWN0aW9uKHIsby5pZCkpfSksVCgxKSxnKCl9aWYoMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0O1BlKCJkYXRhLXBsdWdpbi1pZCIsZS5pZCksYigxKSx6ZSgiICIsZS50YWJfbmFtZSwiICIpfX1mdW5jdGlvbiBwQ2Uobix0KXsxJm4mJihoKDAsIm1hdC10YWIiLDMpLFMoMSx1Q2UsMiwyLCJuZy10ZW1wbGF0ZSIsNCksZygpKSwyJm4mJl8oImRpc2FibGVkIiwhdC4kaW1wbGljaXQuZW5hYmxlZCl9ZnVuY3Rpb24gZkNlKG4sdCl7aWYoMSZuJiYoaCgwLCJtYXQtb3B0aW9uIiw5KSxUKDEpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtfKCJ2YWx1ZSIsZS5pZCksUGUoImRhdGEtcGx1Z2luLWlkIixlLmlkKSxiKDEpLHplKCIgIixlLnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIG1DZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1mb3JtLWZpZWxkIiw2KSgxLCJtYXQtbGFiZWwiKSxUKDIsIkluYWN0aXZlIiksZygpLGgoMywibWF0LXNlbGVjdCIsNyksRCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkRpc2FibGVkUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZChyKSl9KSxTKDQsZkNlLDIsMywibWF0LW9wdGlvbiIsOCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7YigzKSxfKCJ2YWx1ZSIsZS5zZWxlY3RlZFBsdWdpbiksYigxKSxfKCJuZ0Zvck9mIixlLmRpc2FibGVkUGx1Z2lucyl9fXZhciBNWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ9bmV3IEx9Z2V0QWN0aXZlUGx1Z2luSW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmVQbHVnaW5zLmZpbmRJbmRleCgoe2lkOmV9KT0+ZT09PXRoaXMuc2VsZWN0ZWRQbHVnaW4pfW9uQWN0aXZlUGx1Z2luU2VsZWN0aW9uKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KGkpfW9uRGlzYWJsZWRQbHVnaW5TZWxlY3Rpb25DaGFuZ2VkKGUpe3RoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoZS52YWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInBsdWdpbi1zZWxlY3Rvci1jb21wb25lbnQiXV0saW5wdXRzOnthY3RpdmVQbHVnaW5zOiJhY3RpdmVQbHVnaW5zIixkaXNhYmxlZFBsdWdpbnM6ImRpc2FibGVkUGx1Z2lucyIsc2VsZWN0ZWRQbHVnaW46InNlbGVjdGVkUGx1Z2luIn0sb3V0cHV0czp7b25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkOiJvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQifSxkZWNsczozLHZhcnM6Myxjb25zdHM6W1siYW5pbWF0aW9uRHVyYXRpb24iLCIxMDBtcyIsMSwiYWN0aXZlLXBsdWdpbi1saXN0IiwzLCJzZWxlY3RlZEluZGV4Il0sWzMsImRpc2FibGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImZsb2F0TGFiZWwiLCJuZXZlciIsNCwibmdJZiJdLFszLCJkaXNhYmxlZCJdLFsibWF0LXRhYi1sYWJlbCIsIiJdLFsxLCJwbHVnaW4tbmFtZSIsMywiY2xpY2siXSxbImZsb2F0TGFiZWwiLCJuZXZlciJdLFszLCJ2YWx1ZSIsInNlbGVjdGlvbkNoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJtYXQtdGFiLWdyb3VwIiwwKSxTKDEscENlLDIsMSwibWF0LXRhYiIsMSksZygpLFMoMixtQ2UsNSwyLCJtYXQtZm9ybS1maWVsZCIsMikpLDImZSYmKF8oInNlbGVjdGVkSW5kZXgiLGkuZ2V0QWN0aXZlUGx1Z2luSW5kZXgoKSksYigxKSxfKCJuZ0Zvck9mIixpLmFjdGl2ZVBsdWdpbnMpLGIoMSksXygibmdJZiIsaS5kaXNhYmxlZFBsdWdpbnMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltNRSx4WSx1dixZcyxFZyxHdSxIYSxkbixGZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Zm9udC1zaXplOjE0cHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufW1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMDttYXJnaW4tdG9wOjVweDt3aWR0aDoxMzBweH1tYXQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBtYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uYWN0aXZlLXBsdWdpbi1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOnN0cmV0Y2g7ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59LnBsdWdpbi1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MCAxMnB4O3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsIFtfbmdob3N0LSVDT01QJV0gICAgIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLCBbX25naG9zdC0lQ09NUCVdICAgICAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QtdmFsdWUsIFtfbmdob3N0LSVDT01QJV0gICAgIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC1hcnJvdywgW19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOmluaGVyaXR9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saXN0IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxpbmt7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi43fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWwubWF0LXRhYi1sYWJlbC1hY3RpdmUsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGluay5tYXQtdGFiLWxhYmVsLWFjdGl2ZXtvcGFjaXR5OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWRpc2FibGVke2Rpc3BsYXk6bm9uZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItbGlzdCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWxzLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVse2hlaWdodDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjQ4cHg7cGFkZGluZzowO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7aGVpZ2h0OjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlciAubWF0LXRhYi1saXN0e3BhZGRpbmc6MCAzNnB4fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+OmZpcnN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7bGVmdDowfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Omxhc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItbGFiZWwtY29udGFpbmVye3JpZ2h0OjB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH0iXX0pLG59KSgpLHdZPXEoUWgsbj0+T2JqZWN0LmtleXMobikubWFwKHQ9Pk9iamVjdC5hc3NpZ24oe30se2lkOnR9LG5bdF0pKSksZ0NlPXEod1ksbj0+bi5maWx0ZXIodD0+IXQuZW5hYmxlZCkpLFNZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUGx1Z2luJD10aGlzLnN0b3JlLnBpcGUocG4ocW8pKSx0aGlzLnBsdWdpbnMkPXRoaXMuc3RvcmUucGlwZShwbih3WSkpLHRoaXMuZGlzYWJsZWRQbHVnaW5zJD10aGlzLnN0b3JlLnBpcGUocG4oZ0NlKSl9b25QbHVnaW5TZWxlY3Rpb25DaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh4Yyh7cGx1Z2luOmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJwbHVnaW4tc2VsZWN0b3IiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiYWN0aXZlUGx1Z2lucyIsImRpc2FibGVkUGx1Z2lucyIsInNlbGVjdGVkUGx1Z2luIiwib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJwbHVnaW4tc2VsZWN0b3ItY29tcG9uZW50IiwwKSxEKCJvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKG8pfSksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSxHKDMsImFzeW5jIiksZygpKSwyJmUmJl8oImFjdGl2ZVBsdWdpbnMiLFcoMSwzLGkucGx1Z2lucyQpKSgiZGlzYWJsZWRQbHVnaW5zIixXKDIsNSxpLmRpc2FibGVkUGx1Z2lucyQpKSgic2VsZWN0ZWRQbHVnaW4iLFcoMyw3LGkuYWN0aXZlUGx1Z2luJCkpfSxkZXBlbmRlbmNpZXM6W01ZLGx0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx5Q2U9cShRaCxxbywobix0KT0+ISghdHx8IW5bdF0pJiZuW3RdLmRpc2FibGVfcmVsb2FkKSxFWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJlbG9hZERpc2FibGVkJD10aGlzLnN0b3JlLnNlbGVjdCh5Q2UpLHRoaXMuaXNSZWxvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KHRXKS5waXBlKFZpKHRoaXMucmVsb2FkRGlzYWJsZWQkKSxVKChbaSxyXSk9PiFyJiZpPT09RGUuTE9BRElORykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChYaCl9dHJpZ2dlclJlbG9hZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSHMoKSl9Z2V0UmVsb2FkVGl0bGUoZSl7cmV0dXJuIGU/YExhc3QgVXBkYXRlZDogJHtlfWA6IkxvYWRpbmcuLi4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1yZWxvYWQiXV0sZGVjbHM6Nix2YXJzOjEzLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDEsInJlbG9hZC1idXR0b24iLDMsInRpdGxlIiwiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsInJlZnJlc2hfMjRweCIsMSwicmVmcmVzaC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJidXR0b24iLDApLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRyaWdnZXJSZWxvYWQoKX0pLEcoMSwiYXN5bmMiKSxHKDIsImRhdGUiKSxHKDMsImFzeW5jIiksRyg0LCJhc3luYyIpLFAoNSwibWF0LWljb24iLDEpLGcoKSksMiZlJiYoUWUoImxvYWRpbmciLFcoMSw0LGkuaXNSZWxvYWRpbmckKSksXygidGl0bGUiLGkuZ2V0UmVsb2FkVGl0bGUoSnAoMiw2LFcoMyw5LGkubGFzdExvYWRlZFRpbWVJbk1zJCksIm1lZGl1bSIpKSkoImRpc2FibGVkIixXKDQsMTEsaS5yZWxvYWREaXNhYmxlZCQpKSl9LGRlcGVuZGVuY2llczpbRm4sRG4sbHQsSWhdLHN0eWxlczpbIi5yZWxvYWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlZnJlc2gtaWNvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLnJlbG9hZC1idXR0b24ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbmltYXRpb246IF9uZ2NvbnRlbnQtJUNPTVAlX3JvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgX25nY29udGVudC0lQ09NUCVfcm90YXRlIHtcbiAgICAgICAgMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICB9XG4gICAgICB9Il19KSxufSkoKSxUWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyIl1dLGRlY2xzOjksdmFyczowLGNvbnN0czpbWzEsImJyYW5kIl0sWzEsInBsdWdpbnMiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImhyZWYiLCJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiLCJyZWwiLCJub29wZW5lciBub3JlZmVycmVyIiwidGFyZ2V0IiwiX2JsYW5rIiwiYXJpYS1sYWJlbCIsIkhlbHAiLDEsInJlYWRtZSJdLFsic3ZnSWNvbiIsImhlbHBfb3V0bGluZV8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJtYXQtdG9vbGJhciIpKDEsInNwYW4iLDApLFQoMiwiVGVuc29yQm9hcmQiKSxnKCksUCgzLCJwbHVnaW4tc2VsZWN0b3IiLDEpKDQsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSIpKDUsImFwcC1oZWFkZXItcmVsb2FkIikoNiwic2V0dGluZ3MtYnV0dG9uIiksaCg3LCJhIiwyKSxQKDgsIm1hdC1pY29uIiwzKSxnKCkoKSl9LGRlcGVuZGVuY2llczpbVTEsRG4sVnEsWnEsclksU1ksRVldLHN0eWxlczpbIm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjY0cHg7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9LmJyYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlYWRtZVtfbmdjb250ZW50LSVDT01QJV0sIGFwcC1oZWFkZXItcmVsb2FkW19uZ2NvbnRlbnQtJUNPTVAlXSwgc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMCBhdXRvfS5icmFuZFtfbmdjb250ZW50LSVDT01QJV17bGV0dGVyLXNwYWNpbmc6LTAuMDI1ZW07bWFyZ2luLWxlZnQ6MTBweDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmb250LXNpemU6MTRweDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Il19KSxufSkoKSxDQ2Vfc2V0RG9jdW1lbnRUaXRsZT1mdW5jdGlvbihuKXtkb2N1bWVudC50aXRsZT1ufSxEWT0oKCk9PntjbGFzcyBue25nT25DaGFuZ2VzKGUpe2UudGl0bGUmJkNDZV9zZXREb2N1bWVudFRpdGxlKGUudGl0bGUuY3VycmVudFZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGFnZS10aXRsZS1jb21wb25lbnQiXV0saW5wdXRzOnt0aXRsZToidGl0bGUifSxmZWF0dXJlczpbR3RdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxJWT0iVGVuc29yQm9hcmQiLEFZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5jdXN0b21CcmFuZE5hbWU9aSx0aGlzLmdldEV4cGVyaW1lbnRJZCQ9dGhpcy5zdG9yZS5zZWxlY3Qocm8pLnBpcGUoVShyPT5yPy5bMF0pKSx0aGlzLmV4cGVyaW1lbnROYW1lJD10aGlzLmdldEV4cGVyaW1lbnRJZCQucGlwZShWZShCb29sZWFuKSxobihyPT50aGlzLnN0b3JlLnNlbGVjdChHUyx7ZXhwZXJpbWVudElkOnJ9KSksVShyPT5yP3IubmFtZTpudWxsKSksdGhpcy50aXRsZSQ9dGhpcy5zdG9yZS5zZWxlY3QoRVMpLnBpcGUoVmkodGhpcy5zdG9yZS5zZWxlY3QoTnMpLHRoaXMuZXhwZXJpbWVudE5hbWUkKSxVKChbcixvLGFdKT0+e2xldCBzPXRoaXMuY3VzdG9tQnJhbmROYW1lfHxJWTtyZXR1cm4gci53aW5kb3dfdGl0bGU/ci53aW5kb3dfdGl0bGU6bz09PWtuLkVYUEVSSU1FTlQmJmE/YCR7YX0gLSAke3N9YDpzfSksTm4odGhpcy5jdXN0b21CcmFuZE5hbWV8fElZKSx1aSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSksQyhZNiw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGFnZS10aXRsZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJ0aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwicGFnZS10aXRsZS1jb21wb25lbnQiLDApLEcoMSwiYXN5bmMiKSksMiZlJiZfKCJ0aXRsZSIsVygxLDEsaS50aXRsZSQpKX0sZGVwZW5kZW5jaWVzOltEWSxsdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxSWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEFlLHRoaXMuZ2V0UGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZShwbihTZikpLHRoaXMucGFnaW5hdGVkVmlld1N0b3JlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXBhZ2luYXRlZC12aWV3LXN0b3JlIikudGZfcGFnaW5hdGVkX3ZpZXd9bmdPbkluaXQoKXt0aGlzLmdldFBhZ2VTaXplJC5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksdWkoKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLnBhZ2luYXRlZFZpZXdTdG9yZS5zZXRMaW1pdChlKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNldHRpbmdzLXBvbHltZXItaW50ZXJvcCJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksa1k9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnZjUmVmPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoWm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi13ZWJhcHAiXV0sZGVjbHM6OSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsImFwcC1oZWFkZXIiKSxoKDEsIm1haW4iKSxQKDIsInJvdXRlci1vdXRsZXQiKSxnKCksUCgzLCJhbGVydC1zbmFja2JhciIpKDQsImhhc2gtc3RvcmFnZSIpKDUsInBhZ2UtdGl0bGUiKSg2LCJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiKSg3LCJkYXJrLW1vZGUtc3VwcG9ydGVyIikoOCwiZmVhdHVyZS1mbGFnLW1vZGFsLXRyaWdnZXIiKSl9LGRlcGVuZGVuY2llczpbRHEsQXEsZjksUnEsUHEsVFksQVksUlldLHN0eWxlczpbImh0bWxbX25nY29udGVudC0lQ09NUCVdLCBib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZjtoZWlnaHQ6MTAwJTttYXJnaW46MDtwYWRkaW5nOjB9W19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmNWY1ZjU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJX1hcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgMXB4IDNweCAzcHggcmdiYSgwLDAsMCwuMjUpO2ZsZXg6MCAwO3otaW5kZXg6MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBhcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYXBwLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDFweCAzcHggM3B4IHJnYmEoMjU1LDI1NSwyNTUsLjEpfW1haW5bX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO292ZXJmbG93OmF1dG99Il19KSxufSkoKSxQWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsQmgsTmgsd2xdfSksbn0pKCksT1k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe30pLG59KSgpLEZZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtwcm92aWRlcnM6W3twcm92aWRlOnZ1LHVzZUNsYXNzOkM2fV19KSxufSkoKSxMWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsRlldfSksbn0pKCksTlk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlXX0pLG59KSgpLEJZPXtpZDpLdyxuYW1lOiIiLHN0YXJ0X3RpbWU6MH0sVENlPV9yKHtleHBlcmltZW50TWFwOntbQlkuaWRdOkJZfX0pO2Z1bmN0aW9uIFZZKG4sdCl7cmV0dXJuIGNmKHtkYXRhOlRDZX0pKG4sdCl9dmFyIEhZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOlt3ci5mb3JGZWF0dXJlKGpTLFZZKV19KSxufSkoKSx6WT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsZmksWHNdfSksbn0pKCksVVk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlLHpZXX0pLG59KSgpLGpZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxrZyx5cSxmaSxXdSx3ZyxtaSxRc119KSxufSkoKTtmdW5jdGlvbiBEQ2UoKXtyZXR1cm4gcShPYixuPT4oe2F1dG9SZWxvYWQ6bn0pKX1mdW5jdGlvbiBJQ2UoKXtyZXR1cm4gcShGYixuPT4oe2F1dG9SZWxvYWRQZXJpb2RJbk1zOm59KSl9ZnVuY3Rpb24gQUNlKCl7cmV0dXJuIHEoU2Ysbj0+KHtwYWdlU2l6ZTpufSkpfXZhciBTRT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbd3IuZm9yRmVhdHVyZShTMSx6cSksZXIuZGVmaW5lR2xvYmFsU2V0dGluZyhEQ2UpLGVyLmRlZmluZUdsb2JhbFNldHRpbmcoSUNlKSxlci5kZWZpbmVHbG9iYWxTZXR0aW5nKEFDZSksalldfSksbn0pKCksR1k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W2ZpLG1pLHdFLEhxLFhzLFh1LFRlLHpzLFNFXX0pLG59KSgpLFdZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXtsZXQgcj1lLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgiLi9pY29uX2J1bmRsZS5zdmciKTtpLmFkZFN2Z0ljb25TZXQocil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8obmYpLE8oRmcpKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbbWldfSksbn0pKCksRUw9bmV3IGllKCJbcGx1Z2luc10gUGx1Z2luIHJlZ2lzdHJ5IGNvbmZpZyIpLHFZPW5ldyBNYXAsT2M9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtpZighZSlyZXR1cm47bGV0IGk9bmV3IFNldChlLm1hcChyPT5yLnBsdWdpbk5hbWUpKTtjb25zb2xlLmFzc2VydChpLnNpemU9PT1lLmxlbmd0aCwiQ2Fubm90IHJlZ2lzdGVyIHRoZSBzYW1lIHBsdWdpbiBtdWx0aXBsZSB0aW1lcy4iKTtmb3IobGV0IHIgb2YgZSl7bGV0e3BsdWdpbk5hbWU6byxjb21wb25lbnRDbGFzczphfT1yO3FZLnNldChvLGEpfX1zdGF0aWMgZm9yUGx1Z2luKGUsaSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTpFTCxtdWx0aTohMCx1c2VWYWx1ZTp7cGx1Z2luTmFtZTplLGNvbXBvbmVudENsYXNzOml9fV19fWdldENvbXBvbmVudChlKXtyZXR1cm4gcVkuZ2V0KGUpfHxudWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKEVMLDgpKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7fSksbn0pKCksRUU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZSx0aGlzLmh0dHBQYXRoUHJlZml4PSJkYXRhL3BsdWdpbi9kZWJ1Z2dlci12MiJ9ZmV0Y2hSdW5zKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3J1bnMiKX1mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMoZSxpLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9leGVjdXRpb24vZGlnZXN0cyIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hFeGVjdXRpb25EYXRhKGUsaSxyKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZXhlY3V0aW9uL2RhdGEiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKGUsaSxyLG8pe2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IEVycm9yKCJ0cmFjZV9pZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKCkgeWV0Iik7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBoX2V4ZWN1dGlvbi9kaWdlc3RzIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YShlLGkscixvKXtpZih2b2lkIDAhPT1vKXRocm93IG5ldyBFcnJvcigidHJhY2VfaWQgaXMgbm90IGltcGxlbWVudGVkIGZvciBmZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSgpIHlldCIpO3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaF9leGVjdXRpb24vZGF0YSIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hHcmFwaE9wSW5mbyhlLGkscil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBocy9vcF9pbmZvIix7cGFyYW1zOntydW46ZSxncmFwaF9pZDppLG9wX25hbWU6cn19KX1mZXRjaFNvdXJjZUZpbGVMaXN0KGUpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zb3VyY2VfZmlsZXMvbGlzdCIse3BhcmFtczp7cnVuOmV9fSl9ZmV0Y2hTb3VyY2VGaWxlKGUsaSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3NvdXJjZV9maWxlcy9maWxlIix7cGFyYW1zOntydW46ZSxpbmRleDpTdHJpbmcoaSl9fSl9ZmV0Y2hTdGFja0ZyYW1lcyhlLGkpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zdGFja19mcmFtZXMvc3RhY2tfZnJhbWVzIix7cGFyYW1zOntydW46ZSxzdGFja19mcmFtZV9pZHM6aS5qb2luKCIsIil9fSkucGlwZShVKHI9Pih7c3RhY2tfZnJhbWVzOnIuc3RhY2tfZnJhbWVzLm1hcChvPT5mdW5jdGlvbihuKXtyZXR1cm57aG9zdF9uYW1lOm5bMF0sZmlsZV9wYXRoOm5bMV0sbGluZW5vOm5bMl0sZnVuY3Rpb25fbmFtZTpuWzNdfX0obykpfSkpKX1mZXRjaEFsZXJ0cyhlLGkscixvKXtsZXQgYT17cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9O3JldHVybiB2b2lkIDAhPT1vJiYoYS5hbGVydF90eXBlPW8pLHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2FsZXJ0cyIse3BhcmFtczphfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE8odmMpKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxZWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7cHJvdmlkZXJzOltFRV0saW1wb3J0czpbcWhdfSksbn0pKCksVEU9eWUoIltEZWJ1Z2dlcl0gRGVidWdnZXIgTG9hZGVkIiksREU9eWUoIltEZWJ1Z2dlcl0gRGVidWdnZXIgVW5sb2FkZWQiKSxwdj15ZSgiW0RlYnVnZ2VyXSBBIE5ldyBEZWJ1Z2dlciBEYXRhIFBvbGxpbmcgRXZlbnQgQmVnaW5zIiksSUU9eWUoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBSZXF1ZXN0ZWQiKSxBRT15ZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFhZPXllKCJbRGVidWdnZXJdIERlYnVnZ2VyIFJ1bnMgUmVxdWVzdCBGYWlsZWQiKSxmdj15ZSgiW0RlYnVnZ2VyXSBOdW1iZXIgYW5kIEJyZWFrZG93biBvZiBBbGVydHMgUmVxdWVzdGVkIiksUkU9eWUoIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtFPXllKCJbRGVidWdnZXJdIEFsZXJ0cyBEYXRhIG9mIGFuIEFsZXJ0VHlwZSBJcyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCZz15ZSgiW0RlYnVnZ2VyXSBBbGVydCBUeXBlIEZvY3VzIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQRT15ZSgiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgVG9wLUxldmVsIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksT0U9eWUoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZFPXllKCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTEU9eWUoIltEZWJ1Z2dlcl0gRXhlY3V0aW9uRGlnZXN0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxWZz15ZSgiW0RlYnVnZ2VyXSBTY3JvbGwgTGVmdHdhcmQgb24gdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSIpLEhnPXllKCJbRGVidWdnZXJdIFNjcm9sbCBSaWdodHdhcmQgb24gdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSIpLHpnPXllKCJbRGVidWdnZXJdIFNjcm9sbCB0aGUgRXhlY3V0aW9uIFRpbWVsaW5lIHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVWc9eWUoIltEZWJ1Z2dlcl0gRXhlY3V0aW9uIERhdGEgT2JqZWN0cyBCZWluZyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTkU9eWUoIltEZWJ1Z2dlcl0gRXhlY3V0aW9uIERhdGEgT2JqZWN0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCRT15ZSgiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgSW50cmEtR3JhcGggRXhlY3V0aW9ucyBSZXF1ZXN0ZWQiKSxWRT15ZSgiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgSW50cmEtR3JhcGggRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxIRT15ZSgiW0RlYnVnZ2VyXSBJbnRyYS1HcmFwaCBFeGVjdXRpb24gRGF0YSBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6RT15ZSgiW0RlYnVnZ2VyXSBJbnRyYS1HcmFwaCBFeGVjdXRpb24gRGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxqZz15ZSgiW0RlYnVnZ2VyXSBTY3JvbGwgSW50cmEtR3JhcGggRXhlY3V0aW9uIExpc3QgdG8gR2l2ZW4gSW5kZXgiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxHZz15ZSgiW0RlYnVnZ2VyXSBHcmFwaCBFeGVjdXRpb24gaXMgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFdnPXllKCJbRGVidWdnZXJdIEdyYXBoIE9wIElzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxVRT15ZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGpFPXllKCJbRGVidWdnZXJdIEdyYXBoIE9wIEluZm8gTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksR0U9eWUoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGlzdCBSZXF1ZXN0ZWQuIiksV0U9eWUoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGlzdCBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxxZz15ZSgiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMaW5lIElzIEZvY3VzZWQgb24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxxRT15ZSgiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxZRT15ZSgiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxtdj15ZSgiW0RlYnVnZ2VyXSBBIFNldCBvZiBTdGFjayBGcmFtZXMgSGF2ZSBCZWVuIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGh2PSJkZWJ1Z2dlciIsRW89KCgpPT4oZnVuY3Rpb24obil7bltuLlVOU1BFQ0lGSUVEPTBdPSJVTlNQRUNJRklFRCIsbltuLk5PX1RFTlNPUj0xXT0iTk9fVEVOU09SIixuW24uQ1VSVF9IRUFMVEg9Ml09IkNVUlRfSEVBTFRIIixuW24uQ09OQ0lTRV9IRUFMVEg9M109IkNPTkNJU0VfSEVBTFRIIixuW24uRlVMTF9IRUFMVEg9NF09IkZVTExfSEVBTFRIIixuW24uU0hBUEU9NV09IlNIQVBFIixuW24uRlVMTF9OVU1FUklDUz02XT0iRlVMTF9OVU1FUklDUyIsbltuLkZVTExfVEVOU09SPTddPSJGVUxMX1RFTlNPUiIsbltuLlJFRFVDRV9JTkZfTkFOX1RIUkVFX1NMT1RTPThdPSJSRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUyJ9KEVvfHwoRW89e30pKSxFbykpKCksRmM9KCgpPT4oZnVuY3Rpb24obil7bi5GVU5DVElPTl9SRUNPTVBJTEVfQUxFUlQ9IkZ1bmN0aW9uUmVjb21waWxlc0FsZXJ0IixuLklORl9OQU5fQUxFUlQ9IkluZk5hbkFsZXJ0IixuLlRFTlNPUl9TSEFQRV9BTEVSVD0iVGVuc29yU2hhcGVBbGVydCJ9KEZjfHwoRmM9e30pKSxGYykpKCksQm89KCgpPT4oZnVuY3Rpb24obil7bltuLkVYRUNVVElPTj0wXT0iRVhFQ1VUSU9OIixuW24uR1JBUEhfT1BfQ1JFQVRJT049MV09IkdSQVBIX09QX0NSRUFUSU9OIn0oQm98fChCbz17fSkpLEJvKSkoKTtmdW5jdGlvbiBZZyhuKXtpZihudWxsPT09bi5jb2RlTG9jYXRpb25Gb2N1c1R5cGUpcmV0dXJuIG51bGw7bGV0IHQ9W107aWYobi5jb2RlTG9jYXRpb25Gb2N1c1R5cGU9PT1Cby5FWEVDVVRJT04pe2xldHtmb2N1c0luZGV4OmksZXhlY3V0aW9uRGF0YTpyfT1uLmV4ZWN1dGlvbnM7aWYobnVsbD09PWl8fHZvaWQgMD09PXJbaV0pcmV0dXJuIG51bGw7dD1yW2ldLnN0YWNrX2ZyYW1lX2lkc31lbHNle2lmKG51bGw9PT1uLmdyYXBocy5mb2N1c2VkT3ApcmV0dXJuIG51bGw7bGV0e2dyYXBoSWQ6aSxvcE5hbWU6cn09bi5ncmFwaHMuZm9jdXNlZE9wO2lmKHZvaWQgMD09PW4uZ3JhcGhzLm9wc1tpXXx8IW4uZ3JhcGhzLm9wc1tpXS5oYXMocikpcmV0dXJuIG51bGw7dD1uLmdyYXBocy5vcHNbaV0uZ2V0KHIpLnN0YWNrX2ZyYW1lX2lkc31sZXQgZT1bXTtmb3IobGV0IGkgb2YgdCl7aWYobnVsbD09bi5zdGFja0ZyYW1lc1tpXSlyZXR1cm4gbnVsbDtlLnB1c2gobi5zdGFja0ZyYW1lc1tpXSl9cmV0dXJuIGV9ZnVuY3Rpb24gZ3Yobix0KXtyZXR1cm4gbi5maW5kSW5kZXgoZT0+ZS5ob3N0X25hbWU9PT10Lmhvc3RfbmFtZSYmZS5maWxlX3BhdGg9PT10LmZpbGVfcGF0aCl9ZnVuY3Rpb24gREwobix0LGUpe2lmKHQ+PWUpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBiZWdpbiB0byBiZSBsZXNzIHRoYW4gZW5kLCBidXQgZ290IGJlZ2luPSR7dH0sIGVuZD0ke2V9YCk7cmV0dXJuIG4uZmluZEluZGV4KGk9PmkuYmVnaW49PT10JiZpLmVuZD09PWUpfWZ1bmN0aW9uIFhFKG4pe2xldCB0PW4uc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjO2lmKCFuLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlKXJldHVybiB0O2xldCBlPVlnKG4pO2lmKG51bGw9PT1lKXJldHVybiB0O2xldCBpPWZ1bmN0aW9uKG4sdCl7aWYobnVsbD09PXQpcmV0dXJuIG51bGw7Zm9yKGxldCBlPW4ubGVuZ3RoLTE7ZT49MDstLWUpe2xldCBpPW5bZV0se2hvc3RfbmFtZTpyLGZpbGVfcGF0aDpvfT1pO2lmKHI9PT10Lmhvc3RfbmFtZSYmbz09PXQuZmlsZV9wYXRoKXJldHVybiBpfXJldHVybiBudWxsfShlLHQpO3JldHVybiBudWxsPT09aT90Oml9dmFyIFVDZT1fcih7cnVuczp7fSxydW5zTG9hZGVkOntzdGF0ZTpEZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxhY3RpdmVSdW5JZDpudWxsLGxhc3REYXRhUG9sbE9uc2V0VGltZU1zOi0xLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOjEsYWxlcnRzOnthbGVydHNMb2FkZWQ6e3N0YXRlOkRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LG51bUFsZXJ0czowLGFsZXJ0c0JyZWFrZG93bjp7fSxhbGVydHM6e30sZXhlY3V0aW9uSW5kaWNlczp7fSxncmFwaEV4ZWN1dGlvbkluZGljZXM6e30sZm9jdXNUeXBlOm51bGx9LGV4ZWN1dGlvbnM6e251bUV4ZWN1dGlvbnNMb2FkZWQ6e3N0YXRlOkRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6e2xvYWRpbmdSYW5nZXM6W10sbnVtRXhlY3V0aW9uczowLHBhZ2VMb2FkZWRTaXplczp7fX0sZGlzcGxheUNvdW50OjUwLHBhZ2VTaXplOjEwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGV4ZWN1dGlvbkRpZ2VzdHM6e30sZXhlY3V0aW9uRGF0YTp7fX0sZ3JhcGhFeGVjdXRpb25zOntudW1FeGVjdXRpb25zTG9hZGVkOntzdGF0ZTpEZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOntsb2FkaW5nUmFuZ2VzOltdLG51bUV4ZWN1dGlvbnM6MCxwYWdlTG9hZGVkU2l6ZXM6e319LGRpc3BsYXlDb3VudDoxMDAscGFnZVNpemU6MjAwLHNjcm9sbEJlZ2luSW5kZXg6MCxmb2N1c0luZGV4Om51bGwsZ3JhcGhFeGVjdXRpb25EaWdlc3RzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczpbXSxncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXM6e30sZ3JhcGhFeGVjdXRpb25EYXRhOnt9fSxncmFwaHM6e29wczp7fSxsb2FkaW5nT3BzOnt9LGZvY3VzZWRPcDpudWxsfSxzdGFja0ZyYW1lczp7fSxjb2RlTG9jYXRpb25Gb2N1c1R5cGU6bnVsbCxzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZTohMSxzb3VyY2VDb2RlOntzb3VyY2VGaWxlTGlzdExvYWRlZDp7c3RhdGU6RGUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sc291cmNlRmlsZUxpc3Q6W10sZmlsZUNvbnRlbnRzOltdLGZvY3VzTGluZVNwZWM6bnVsbH19LEVlKElFLG49Pih7Li4ubixydW5zTG9hZGVkOnsuLi5uLnJ1bnNMb2FkZWQsc3RhdGU6RGUuTE9BRElOR319KSksRWUoWFksbj0+KHsuLi5uLHJ1bnNMb2FkZWQ6ey4uLm4ucnVuc0xvYWRlZCxzdGF0ZTpEZS5GQUlMRUR9fSkpLEVlKEFFLChuLHtydW5zOnR9KT0+e2xldCBlPU9iamVjdC5rZXlzKHQpLGk9ZS5sZW5ndGg+MCYmbnVsbD09PW4uYWN0aXZlUnVuSWQ7cmV0dXJuey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6aT9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMscnVuczp0LHJ1bnNMb2FkZWQ6e3N0YXRlOkRlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sYWN0aXZlUnVuSWQ6ZS5sZW5ndGg+MD9lWzBdOm51bGx9fSksRWUocHYsbj0+KHsuLi5uLGxhc3REYXRhUG9sbE9uc2V0VGltZU1zOkRhdGUubm93KCl9KSksRWUoZnYsbj0+bnVsbD09PW4uYWN0aXZlUnVuSWQ/bjp7Li4ubixhbGVydHM6ey4uLm4uYWxlcnRzLGFsZXJ0c0xvYWRlZDp7Li4ubi5hbGVydHMuYWxlcnRzTG9hZGVkLHN0YXRlOkRlLkxPQURJTkd9fX0pLEVlKFJFLChuLHtudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZX0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IHI9dD5uLmFsZXJ0cy5udW1BbGVydHM7cmV0dXJuey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6cj9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsYWxlcnRzOnsuLi5uLmFsZXJ0cyxhbGVydHNMb2FkZWQ6ey4uLm4uYWxlcnRzLmFsZXJ0c0xvYWRlZCxzdGF0ZTpEZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LG51bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplfX19KSxFZShrRSwobix7bnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmUsYWxlcnRUeXBlOmksYmVnaW46cixhbGVydHM6b30pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IHM9e30sbD1uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW2ldP24uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV0uc2xpY2UoKTpbXSxjPW4uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlc1tpXT9uLmFsZXJ0cy5ncmFwaEV4ZWN1dGlvbkluZGljZXNbaV0uc2xpY2UoKTpbXTtmb3IobGV0IHA9MDtwPG8ubGVuZ3RoOysrcCl7bGV0IGY9citwLG09b1twXTtpZihzW2ZdPW0sbS5hbGVydF90eXBlPT09RmMuSU5GX05BTl9BTEVSVCl7bGV0IHk9bTtsW2ZdPXkuZXhlY3V0aW9uX2luZGV4LG51bGwhPT15LmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCYmKGNbZl09eS5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgpfX12b2lkIDAhPT1uLmFsZXJ0cy5hbGVydHNbaV0mJk9iamVjdC5hc3NpZ24ocyxuLmFsZXJ0cy5hbGVydHNbaV0pO2xldCBkPW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LHU9bi5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleDtpZihpPT09RmMuSU5GX05BTl9BTEVSVCYmMD09PXIpe2xldCBwPW9bMF07ZD1NYXRoLm1heCgwLHAuZXhlY3V0aW9uX2luZGV4LU1hdGguZmxvb3Iobi5leGVjdXRpb25zLmRpc3BsYXlDb3VudC8yKSksbnVsbCE9PXAuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4JiYodT1wLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCl9cmV0dXJuey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6ZH0sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxmb2N1c0luZGV4OnV9LGFsZXJ0czp7Li4ubi5hbGVydHMsYWxlcnRzTG9hZGVkOnsuLi5uLmFsZXJ0cy5hbGVydHNMb2FkZWQsc3RhdGU6RGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZSxhbGVydHM6ey4uLm4uYWxlcnRzLmFsZXJ0cyxbaV06c30sZXhlY3V0aW9uSW5kaWNlczp7Li4ubi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlcyxbaV06bH0sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOnsuLi5uLmFsZXJ0cy5ncmFwaEV4ZWN1dGlvbkluZGljZXMsW2ldOmN9fX19KSxFZShCZywobix7YWxlcnRUeXBlOnR9KT0+e2xldCBlPXsuLi5uLGFsZXJ0czp7Li4ubi5hbGVydHMsZm9jdXNUeXBlOm4uYWxlcnRzLmZvY3VzVHlwZT09PXQ/bnVsbDp0fX0saT1lLmFsZXJ0cy5mb2N1c1R5cGU7aWYobnVsbCE9PWkpe2xldCByPWUuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV18fFtdO3ZvaWQgMCE9PXJbMF0mJihlLmV4ZWN1dGlvbnM9ey4uLmUuZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4Ok1hdGgubWF4KDAsTnVtYmVyKHJbMF0pLU1hdGguZmxvb3IoZS5leGVjdXRpb25zLmRpc3BsYXlDb3VudC8yKSl9KX1yZXR1cm4gZX0pLEVlKFBFLG49Pm51bGw9PT1uLmFjdGl2ZVJ1bklkP246ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOkRlLkxPQURJTkd9fX0pLEVlKE9FLChuLHtudW1FeGVjdXRpb25zOnR9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPXQ+bi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyxyPXsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOmk/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpEZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLG51bUV4ZWN1dGlvbnM6dH19fTtyZXR1cm4gdD4wJiZudWxsPT09bi5leGVjdXRpb25zLmZvY3VzSW5kZXgmJihyLmV4ZWN1dGlvbnMuZm9jdXNJbmRleD0wKSxyfSksRWUoRkUsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT1bLi4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubG9hZGluZ1Jhbmdlc107cmV0dXJuLTE9PT1ETChpLHQuYmVnaW4sdC5lbmQpJiZpLnB1c2goe2JlZ2luOnQuYmVnaW4sZW5kOnQuZW5kfSksey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLGxvYWRpbmdSYW5nZXM6aX19fX0pLEVlKExFLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9Wy4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLmxvYWRpbmdSYW5nZXNdLHI9REwoaSx0LmJlZ2luLHQuZW5kKTstMSE9PXImJmkuc3BsaWNlKHIsMSk7bGV0IG89ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLG51bUV4ZWN1dGlvbnM6dC5udW1fZGlnZXN0cyxsb2FkaW5nUmFuZ2VzOml9LGV4ZWN1dGlvbkRpZ2VzdHM6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzfX19O2ZvcihsZXQgYT10LmJlZ2luO2E8dC5lbmQ7KythKW8uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzW2FdPXQuZXhlY3V0aW9uX2RpZ2VzdHNbYS10LmJlZ2luXTtyZXR1cm4gdC5lbmQ+dC5iZWdpbiYmKG8uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLnBhZ2VMb2FkZWRTaXplcz17Li4uby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQucGFnZUxvYWRlZFNpemVzLFt0LmJlZ2luL24uZXhlY3V0aW9ucy5wYWdlU2l6ZV06dC5lbmQtdC5iZWdpbn0pLG99KSxFZShWZyxuPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXg7cmV0dXJuIGU+MCYmZS0tLHsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OmV9fX0pLEVlKEhnLG49PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleDtyZXR1cm4gZStuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50KzE8PW4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMmJmUrKyx7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDplfX19KSxFZSh6Zywobix0KT0+e2lmKHQuaW5kZXg8MHx8IU51bWJlci5pc0ludGVnZXIodC5pbmRleCkpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBuZWdhdGl2ZSBvciBub24taW50ZWdlciBleGVjdXRpb24gaW5kZXggKCR7dC5pbmRleH0pYCk7bGV0e2Rpc3BsYXlDb3VudDplfT1uLmV4ZWN1dGlvbnMse251bUV4ZWN1dGlvbnM6aX09bi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ7aWYodC5pbmRleD5NYXRoLm1heCgwLGktZSkpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBleGVjdXRpb24gaW5kZXggKCR7dC5pbmRleH0pLCB3aGljaCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBpbmRleCAobnVtRXhlY3V0aW9ucz0ke2l9OyBkaXNwbGF5Q291bnQ9JHtlfSlgKTtyZXR1cm57Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp0LmluZGV4fX19KSxFZShVZywobix0KT0+e2xldCBlPXsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxmb2N1c0luZGV4Om4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4K3QuZGlzcGxheUluZGV4fSxjb2RlTG9jYXRpb25Gb2N1c1R5cGU6Qm8uRVhFQ1VUSU9OLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZX19O3JldHVybiBlLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYz1YRShlKSxlfSksRWUoTkUsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT17Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGF0YTp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRhdGF9fX07Zm9yKGxldCByPXQuYmVnaW47cjx0LmVuZDsrK3IpaS5leGVjdXRpb25zLmV4ZWN1dGlvbkRhdGFbcl09dC5leGVjdXRpb25zW3ItdC5iZWdpbl07cmV0dXJuIGl9KSxFZShCRSxuPT5udWxsPT09bi5hY3RpdmVSdW5JZD9uOnsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpEZS5MT0FESU5HfX19KSxFZShWRSwobix7bnVtR3JhcGhFeGVjdXRpb25zOnR9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPXQ+bi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zLGk9ey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6ZT9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOkRlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxudW1FeGVjdXRpb25zOnR9fX07cmV0dXJuIHQ+MCYmbnVsbD09PW4uZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXgmJihpLmdyYXBoRXhlY3V0aW9ucy5mb2N1c0luZGV4PTApLGl9KSxFZShIRSwobix7cGFnZUluZGV4OnR9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPW4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcy5zbGljZSgpO3JldHVybi0xPT09ZS5pbmRleE9mKHQpJiZlLnB1c2godCksey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6ZX19fSksRWUoekUsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXR7cGFnZVNpemU6ZX09bi5ncmFwaEV4ZWN1dGlvbnMsaT1uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXMuc2xpY2UoKSxyPXsuLi5uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXN9LG89ey4uLm4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YX07Zm9yKGxldCBhPXQuYmVnaW47YTx0LmVuZDsrK2Epe2xldCBzPU1hdGguZmxvb3IoYS9lKTstMSE9PWkuaW5kZXhPZihzKSYmaS5zcGxpY2UoaS5pbmRleE9mKHMpLDEpLHZvaWQgMD09PXJbc10mJihyW3NdPTApLHZvaWQgMD09PW9bYV0mJnJbc10rKyxvW2FdPXQuZ3JhcGhfZXhlY3V0aW9uc1thLXQuYmVnaW5dfXJldHVybnsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOmksZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnIsZ3JhcGhFeGVjdXRpb25EYXRhOm99fX0pLEVlKGpnLChuLHQpPT57aWYodC5pbmRleDwwfHwhTnVtYmVyLmlzSW50ZWdlcih0LmluZGV4KSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIG5lZ2F0aXZlIG9yIG5vbi1pbnRlZ2VyIGdyYXBoLWV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSlgKTtyZXR1cm57Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6dC5pbmRleH19fSksRWUoR2csKG4sdCk9PktZKG4sdC5ncmFwaF9pZCx0Lm9wX25hbWUsdC5pbmRleCkpLEVlKFdnLChuLHQpPT5LWShuLHQuZ3JhcGhfaWQsdC5vcF9uYW1lKSksRWUoVUUsKG4sdCk9PntsZXR7Z3JhcGhfaWQ6ZSxvcF9uYW1lOml9PXQscj17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLGxvYWRpbmdPcHM6ey4uLm4uZ3JhcGhzLmxvYWRpbmdPcHN9fX07cmV0dXJuIHZvaWQgMD09PXIuZ3JhcGhzLmxvYWRpbmdPcHNbZV0mJihyLmdyYXBocy5sb2FkaW5nT3BzW2VdPW5ldyBNYXApLHIuZ3JhcGhzLmxvYWRpbmdPcHNbZV0uaGFzKGkpfHxyLmdyYXBocy5sb2FkaW5nT3BzW2VdLnNldChpLERlLkxPQURJTkcpLHJ9KSxFZShqRSwobix0KT0+e2xldHtncmFwaE9wSW5mb1Jlc3BvbnNlOmV9PXQse2dyYXBoX2lkczppfT1lLHI9aVtpLmxlbmd0aC0xXSxvPXsuLi5uLGdyYXBoczp7Li4ubi5ncmFwaHMsb3BzOnsuLi5uLmdyYXBocy5vcHMsW3JdOm5ldyBNYXAobi5ncmFwaHMub3BzW3JdKX0sbG9hZGluZ09wczp7Li4ubi5ncmFwaHMubG9hZGluZ09wcyxbcl06bmV3IE1hcChuLmdyYXBocy5sb2FkaW5nT3BzW3JdKX19fTtmb3IobGV0IGEgb2YgZS5pbnB1dHMpIWEuZGF0YXx8by5ncmFwaHMub3BzW3JdLnNldChhLm9wX25hbWUsYS5kYXRhKTtmb3IobGV0IGE9MDthPGUuY29uc3VtZXJzLmxlbmd0aDsrK2EpZm9yKGxldCBzIG9mIGUuY29uc3VtZXJzW2FdKSFzLmRhdGF8fG8uZ3JhcGhzLm9wc1tyXS5zZXQocy5vcF9uYW1lLHMuZGF0YSk7cmV0dXJuIG8uZ3JhcGhzLm9wc1tyXS5zZXQoZS5vcF9uYW1lLHsuLi5lLGlucHV0czplLmlucHV0cy5tYXAoYT0+KHtvcF9uYW1lOmEub3BfbmFtZSxvdXRwdXRfc2xvdDphLm91dHB1dF9zbG90fSkpLGNvbnN1bWVyczplLmNvbnN1bWVycy5tYXAoYT0+YS5tYXAocz0+KHtvcF9uYW1lOnMub3BfbmFtZSxpbnB1dF9zbG90OnMuaW5wdXRfc2xvdH0pKSl9KSxvLmdyYXBocy5sb2FkaW5nT3BzW3JdLnNldChlLm9wX25hbWUsRGUuTE9BREVEKSxvfSksRWUoR0Usbj0+KHsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxzb3VyY2VGaWxlTGlzdExvYWRlZDp7Li4ubi5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0TG9hZGVkLHN0YXRlOkRlLkxPQURJTkd9fX0pKSxFZShXRSwobix0KT0+e2xldCBlPXsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxzb3VyY2VGaWxlTGlzdExvYWRlZDp7Li4ubi5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0TG9hZGVkLHN0YXRlOkRlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sc291cmNlRmlsZUxpc3Q6dC5zb3VyY2VGaWxlcyxmaWxlQ29udGVudHM6bi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfX0saT10LnNvdXJjZUZpbGVzLmxlbmd0aCx7ZmlsZUNvbnRlbnRzOnJ9PWUuc291cmNlQ29kZTtmb3IobGV0IG89MDtvPGk7KytvKXJbb109bi5zb3VyY2VDb2RlLmZpbGVDb250ZW50c1tvXT8/e2xvYWRTdGF0ZTpEZS5OT1RfTE9BREVELGxpbmVzOm51bGx9O3JldHVybiBlfSksRWUocWcsKG4sdCk9PntsZXQgZT1ZZyhuKSxpPXsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxmb2N1c0xpbmVTcGVjOnQuc3RhY2tGcmFtZX19O3JldHVybiBudWxsIT09ZSYmKGkuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU9ZnVuY3Rpb24obix0KXtsZXQgZT0tMSxpPS0xO2lmKG4uZm9yRWFjaCgoe2ZpbGVfcGF0aDpyLGxpbmVubzpvfSxhKT0+e3I9PT10LmZpbGVfcGF0aCYmKGk9YSxvPT09dC5saW5lbm8mJihlPWEpKX0pLC0xPT09ZSl0aHJvdyBuZXcgRXJyb3IoYFN0YWNrIGZyYW1lICR7SlNPTi5zdHJpbmdpZnkodCl9IGlzIG5vdCBmb3VuZC5gKTtyZXR1cm4gZT09PWl9KGUsdC5zdGFja0ZyYW1lKSksaX0pLEVlKHFFLChuLHQpPT57bGV0IGU9ey4uLm4sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlLGZpbGVDb250ZW50czpuLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9fSxpPWd2KGUuc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdCx0KTtpZighKGk+PTApKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIGZvbGxvd2luZyBmaWxlIGluIGZpbGUgbGlzdDogaG9zdF9uYW1lPSIke3QuaG9zdF9uYW1lfSIsIGZpbGVfcGF0aD0iJHt0LmZpbGVfcGF0aH0iYCk7cmV0dXJuIGUuc291cmNlQ29kZS5maWxlQ29udGVudHMuc3BsaWNlKGksMSx7Li4uZS5zb3VyY2VDb2RlLmZpbGVDb250ZW50c1tpXSxsb2FkU3RhdGU6RGUuTE9BRElOR30pLGV9KSxFZShZRSwobix0KT0+e2xldCBlPXsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxmaWxlQ29udGVudHM6bi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfX0saT1ndihlLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3QsdCk7aWYoIShpPj0wKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBmb2xsb3dpbmcgZmlsZSBpbiBmaWxlIGxpc3Q6IGhvc3RfbmFtZT0iJHt0Lmhvc3RfbmFtZX0iLCBmaWxlX3BhdGg9IiR7dC5maWxlX3BhdGh9ImApO3JldHVybiBlLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNwbGljZShpLDEse2xvYWRTdGF0ZTpEZS5MT0FERUQsbGluZXM6dC5saW5lc30pLGV9KSxFZShtdiwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPXsuLi5uLHN0YWNrRnJhbWVzOnsuLi5uLnN0YWNrRnJhbWVzLC4uLnQuc3RhY2tGcmFtZXN9LHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZX19O3JldHVybiBpLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYz1YRShpKSxpfSkpO2Z1bmN0aW9uIEtZKG4sdCxlLGkpe2xldCByPXsuLi5uLGdyYXBoczp7Li4ubi5ncmFwaHMsZm9jdXNlZE9wOntncmFwaElkOnQsb3BOYW1lOmV9fSxjb2RlTG9jYXRpb25Gb2N1c1R5cGU6Qm8uR1JBUEhfT1BfQ1JFQVRJT04sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlfX07cmV0dXJuIHIuc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjPVhFKHIpLHZvaWQgMCE9PWkmJihyLmdyYXBoRXhlY3V0aW9ucz17Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZm9jdXNJbmRleDppfSkscn1mdW5jdGlvbiBKWShuLHQpe3JldHVybiBVQ2Uobix0KX12YXIgVG89TXIoaHYpLGpmPXEoVG8sbj0+bi5ydW5zKSxJTD1xKFRvLG49Pm4ucnVuc0xvYWRlZCksZWE9cShUbyxuPT5uLmFjdGl2ZVJ1bklkKSwkWT1xKFRvLG49Pm4ubGFzdERhdGFQb2xsT25zZXRUaW1lTXMtbi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyksWGc9cShUbyxuPT5uLmFsZXJ0cyksQUw9cShYZyxuPT5uLmFsZXJ0c0xvYWRlZCksZVg9cShYZyxuPT5uLm51bUFsZXJ0cyksUUU9cShYZyxuPT5uLmZvY3VzVHlwZSksdFg9cShYZyxuPT5udWxsPT09bi5mb2N1c1R5cGU/MDpuLmFsZXJ0c0JyZWFrZG93bltuLmZvY3VzVHlwZV18fDApLG5YPXEoWGcsbj0+bnVsbD09PW4uZm9jdXNUeXBlfHx2b2lkIDA9PT1uLmFsZXJ0c1tuLmZvY3VzVHlwZV0/bnVsbDpuLmFsZXJ0c1tuLmZvY3VzVHlwZV0pLGlYPXEoWGcsbj0+bi5hbGVydHNCcmVha2Rvd24pLEdmPXEoVG8sbj0+bi5leGVjdXRpb25zKSxaRT1xKEdmLG49Pm4ubnVtRXhlY3V0aW9uc0xvYWRlZCksX3Y9cShHZixuPT5uLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQpLFF1PXEoR2Ysbj0+bi5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMpLHl2PXEoR2Ysbj0+bi5zY3JvbGxCZWdpbkluZGV4KSxRZz1xKEdmLG49Pm4ucGFnZVNpemUpLFpnPXEoR2Ysbj0+bi5kaXNwbGF5Q291bnQpLHJYPXEoR2Ysbj0+e2xldCB0PVtdO2ZvcihsZXQgZT1uLnNjcm9sbEJlZ2luSW5kZXg7ZTxuLnNjcm9sbEJlZ2luSW5kZXgrbi5kaXNwbGF5Q291bnQ7KytlKXQucHVzaChlIGluIG4uZXhlY3V0aW9uRGlnZXN0cz9uLmV4ZWN1dGlvbkRpZ2VzdHNbZV06bnVsbCk7cmV0dXJuIHR9KSxadT1xKFRvLG49Pm4uZ3JhcGhFeGVjdXRpb25zKSxvWD1xKFp1LG49Pm4ubnVtRXhlY3V0aW9uc0xvYWRlZCksYnY9cShUbyxuPT5uLmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMpLGFYPXEoWnUsbj0+bi5zY3JvbGxCZWdpbkluZGV4KSxzWD1xKFp1LG49Pm4uZGlzcGxheUNvdW50KSxsWD1xKFp1LG49Pm4ucGFnZVNpemUpLGNYPXEoWnUsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXMpLGRYPXEoWnUsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXMpLFJMPXEoWnUsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGEpLGtMPXEoWnUsbj0+bi5mb2N1c0luZGV4KSxQTD1xKFRvLG49Pm4uZ3JhcGhzKSxPTD1xKFBMLG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47cmV0dXJuIG51bGw9PT10fHx2b2lkIDA9PT1lW3QuZ3JhcGhJZF0/bnVsbDplW3QuZ3JhcGhJZF0uZ2V0KHQub3BOYW1lKXx8bnVsbH0pLEZMPXEoUEwsbj0+e2xldHtmb2N1c2VkT3A6dCxvcHM6ZX09bjtpZihudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdfHwhZVt0LmdyYXBoSWRdLmhhcyh0Lm9wTmFtZSkpcmV0dXJuIG51bGw7e2xldCBpPWVbdC5ncmFwaElkXSx7aW5wdXRzOnJ9PWkuZ2V0KHQub3BOYW1lKTtyZXR1cm4gci5tYXAobz0+e2xldCBhPXsuLi5vfTtyZXR1cm4gaS5oYXMoby5vcF9uYW1lKSYmKGEuZGF0YT1pLmdldChvLm9wX25hbWUpKSxhfSl9fSksdVg9cShrTCxSTCxGTCwobix0LGUpPT57aWYobnVsbD09PW58fG51bGw9PT1lKXJldHVybiBudWxsO2xldCBpPWUubWFwKHM9PiExKSxyPVtdO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gcjtsZXQgbz10W25dLmdyYXBoX2lkLGE9TWF0aC5tYXgoMCxuLTIwMCk7Zm9yKGxldCBzPW4tMTtzPj1hOy0tcylpZih2b2lkIDAhPT10W3NdKWZvcihsZXQgbD0wO2w8ZS5sZW5ndGgmJihpW2xdfHx0W3NdLmdyYXBoX2lkIT09b3x8dFtzXS5vcF9uYW1lIT09ZVtsXS5vcF9uYW1lfHx0W3NdLm91dHB1dF9zbG90IT09ZVtsXS5vdXRwdXRfc2xvdHx8KHIucHVzaChzKSxpW2xdPSEwLHIubGVuZ3RoIT09ZS5sZW5ndGgpKTsrK2wpO3JldHVybiByfSkscFg9cShQTCxuPT57bGV0e2ZvY3VzZWRPcDp0LG9wczplfT1uO2lmKG51bGw9PT10fHx2b2lkIDA9PT1lW3QuZ3JhcGhJZF18fCFlW3QuZ3JhcGhJZF0uaGFzKHQub3BOYW1lKSlyZXR1cm4gbnVsbDt7bGV0IGk9ZVt0LmdyYXBoSWRdLHtjb25zdW1lcnM6cn09aS5nZXQodC5vcE5hbWUpO3JldHVybiByLm1hcChvPT5vLm1hcChhPT57bGV0IHM9ey4uLmF9O3JldHVybiBpLmhhcyhhLm9wX25hbWUpJiYocy5kYXRhPWkuZ2V0KGEub3BfbmFtZSkpLHN9KSl9fSksZlg9cShUbyxuPT57bGV0IHQ9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCtuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LGk9bmV3IEFycmF5KGUtdCkuZmlsbChudWxsKSxyPW4uYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsPT09cilyZXR1cm4gaTtsZXQgbz1uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW3JdO2lmKHZvaWQgMD09PW8pcmV0dXJuIGk7Zm9yKGxldCBhPXQ7YTxlOysrYSlvLmluY2x1ZGVzKGEpJiYoaVthLXRdPW4uYWxlcnRzLmZvY3VzVHlwZSk7cmV0dXJuIGl9KSxLRT1xKFRvLG49Pm4uZXhlY3V0aW9ucyksTEw9cShLRSxuPT5uLmZvY3VzSW5kZXgpLG1YPXEoS0Usbj0+e2lmKG51bGw9PT1uLmZvY3VzSW5kZXgpcmV0dXJuIG51bGw7bGV0e2ZvY3VzSW5kZXg6dCxzY3JvbGxCZWdpbkluZGV4OmUsZGlzcGxheUNvdW50Oml9PW47cmV0dXJuIHQ8ZXx8dD49ZStpP251bGw6dC1lfSksTkw9cShLRSxuPT5uLmV4ZWN1dGlvbkRhdGEpLGhYPXEoVG8sbj0+bi5ncmFwaHMubG9hZGluZ09wcyksQkw9cShUbyxuPT5uLnN0YWNrRnJhbWVzKSxXZj1xKEtFLG49PntsZXR7Zm9jdXNJbmRleDp0LGV4ZWN1dGlvbkRhdGE6ZX09bjtyZXR1cm4gbnVsbD09PXR8fHZvaWQgMD09PWVbdF0/bnVsbDplW3RdfSksdnY9cShUbyxMTCxXZixPTCwobix0LGUsaSk9PntsZXR7Y29kZUxvY2F0aW9uRm9jdXNUeXBlOnJ9PW47cmV0dXJuIG51bGw9PT1yP251bGw6cj09PUJvLkVYRUNVVElPTj9udWxsPT09dHx8bnVsbD09PWU/bnVsbDp7Y29kZUxvY2F0aW9uVHlwZTpCby5FWEVDVVRJT04sb3BUeXBlOmUub3BfdHlwZSxleGVjdXRpb25JbmRleDp0fTpudWxsPT09aT9udWxsOntjb2RlTG9jYXRpb25UeXBlOkJvLkdSQVBIX09QX0NSRUFUSU9OLG9wVHlwZTppLm9wX3R5cGUsb3BOYW1lOmkub3BfbmFtZX19KSxnWD1xKFRvLFlnKSxKRT1xKFRvLG49Pm4uc291cmNlQ29kZSksX1g9cShKRSxuPT5uLnNvdXJjZUZpbGVMaXN0TG9hZGVkKSxWTD0ocShKRSxuPT5uLnNvdXJjZUZpbGVMaXN0KSxxKEpFLG49PntsZXR7c291cmNlRmlsZUxpc3Q6dCxmb2N1c0xpbmVTcGVjOmV9PW47cmV0dXJuIG51bGw9PT1lPy0xOmd2KHQsZSl9KSksJEU9cShKRSxWTCwobix0KT0+LTE9PT10P251bGw6bi5maWxlQ29udGVudHNbdF18fG51bGwpLGVUPXEoVG8sbj0+bi5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWMpLHlYPXEoVG8sbj0+bi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSksYlg9ZnVuY3Rpb24obil7cmV0dXJuW25dfTtmdW5jdGlvbiBHQ2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDcpLEQoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoKS5vblRvZ2dsZUZvY3VzVHlwZS5lbWl0KG8udHlwZSkpfSksaCgxLCJkaXYiLDgpLFQoMiksZygpLGgoMywiZGl2Iiw5KSxUKDQpLGcoKSxQKDUsImRpdiIpLGcoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO18oIm5nQ2xhc3MiLFNuKDQsYlgsZS50eXBlPT09aS5mb2N1c1R5cGU/ImZvY3VzIjoiIikpLGIoMiksdXQoZS5kaXNwbGF5TmFtZSksYigyKSxkdSgiICIsZS5kaXNwbGF5U3ltYm9sLCI6ICIsZS5jb3VudCwiICIpfX12YXIgdlg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubnVtQWxlcnRzPTAsdGhpcy5hbGVydHNCcmVha2Rvd249W10sdGhpcy5mb2N1c1R5cGU9bnVsbCx0aGlzLm9uVG9nZ2xlRm9jdXNUeXBlPW5ldyBMfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhbGVydHMtY29tcG9uZW50Il1dLGlucHV0czp7bnVtQWxlcnRzOiJudW1BbGVydHMiLGFsZXJ0c0JyZWFrZG93bjoiYWxlcnRzQnJlYWtkb3duIixmb2N1c1R5cGU6ImZvY3VzVHlwZSJ9LG91dHB1dHM6e29uVG9nZ2xlRm9jdXNUeXBlOiJvblRvZ2dsZUZvY3VzVHlwZSJ9LGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1sxLCJhbGVydHMtY29udGFpbmVyIl0sWzEsImRlYnVnZ2luZy10aXRsZSJdLFsxLCJudW0tYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJudW0tYWxlcnRzLWxhYmVsIl0sWzEsIm51bS1hbGVydHMtdmFsdWUiLDMsIm5nQ2xhc3MiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi1jb250YWluZXIiXSxbImNsYXNzIiwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJhbGVydHMtYnJlYWtkb3duLXR5cGUiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsxLCJhbGVydC10eXBlLW5hbWUiXSxbMSwiYWxlcnQtdHlwZS1jb3VudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFQoMiwiRGVidWdnaW5nIiksZygpLGgoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFQoNSwiQWxlcnRzIiksZygpLGgoNiwiZGl2Iiw0KSxUKDcpLGcoKSgpLGgoOCwiZGl2Iiw1KSxTKDksR0NlLDYsNiwiZGl2Iiw2KSxnKCkoKSksMiZlJiYoYig2KSxfKCJuZ0NsYXNzIixTbigzLGJYLGkubnVtQWxlcnRzPjA/Im5vbi16ZXJvIjoiIikpLGIoMSksemUoIiAiLGkubnVtQWxlcnRzLCIgIiksYigyKSxfKCJuZ0Zvck9mIixpLmFsZXJ0c0JyZWFrZG93bikpfSxkZXBlbmRlbmNpZXM6W2JuLGRuXSxzdHlsZXM6WyIuYWxlcnRzLWJyZWFrZG93bi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBwYWRkaW5nOiAxMHB4IDEwcHggMTBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uYWxlcnRzLWJyZWFrZG93bi10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJvcmRlci1yYWRpdXM6IDAgMTBweCAxMHB4IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogNnB4IDAgNnB4IDUwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5hbGVydHMtYnJlYWtkb3duLXR5cGUuZm9jdXNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWVlMDtcbn1cblxuLmFsZXJ0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xufVxuXG4uYWxlcnQtdHlwZS1jb3VudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjb2xvcjogI2ZmZjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAzcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5hbGVydC10eXBlLW5hbWVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAzcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5kZWJ1Z2dpbmctdGl0bGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuXG4ubnVtLWFsZXJ0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDMwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm51bS1hbGVydHMtbGFiZWxbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEzcHg7XG59XG5cbi5udW0tYWxlcnRzLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMjBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMjRweDtcbn1cblxuLm51bS1hbGVydHMtdmFsdWUubm9uLXplcm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYjc4MDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59Il19KSxufSkoKSxxQ2U9e1tGYy5GVU5DVElPTl9SRUNPTVBJTEVfQUxFUlRdOntkaXNwbGF5TmFtZToiRnVuY3Rpb24gcmVjb21waWxlcyIsZGlzcGxheVN5bWJvbDoiQyJ9LFtGYy5JTkZfTkFOX0FMRVJUXTp7ZGlzcGxheU5hbWU6Ik5hTi9cdTIyMWUiLGRpc3BsYXlTeW1ib2w6Ilx1MjIxZSJ9LFtGYy5URU5TT1JfU0hBUEVfQUxFUlRdOntkaXNwbGF5TmFtZToiVGVuc29yIHNoYXBlIixkaXNwbGF5U3ltYm9sOiJcdTI1YTAifX0seFg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1BbGVydHMkPXRoaXMuc3RvcmUucGlwZShwbihlWCkpLHRoaXMuYWxlcnRzQnJlYWtkb3duJD10aGlzLnN0b3JlLnBpcGUocG4ocShpWCxpPT57bGV0IHI9T2JqZWN0LmtleXMoaSk7cmV0dXJuIHIuc29ydCgpLHIubWFwKG89Pih7dHlwZTpvLC4uLnFDZVtvXSxjb3VudDppW29dfSkpfSkpKSx0aGlzLmZvY3VzVHlwZSQ9dGhpcy5zdG9yZS5waXBlKHBuKFFFKSl9b25Ub2dnbGVGb2N1c1R5cGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChCZyh7YWxlcnRUeXBlOmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1hbGVydHMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibnVtQWxlcnRzIiwiYWxlcnRzQnJlYWtkb3duIiwiZm9jdXNUeXBlIiwib25Ub2dnbGVGb2N1c1R5cGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImFsZXJ0cy1jb21wb25lbnQiLDApLEQoIm9uVG9nZ2xlRm9jdXNUeXBlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRvZ2dsZUZvY3VzVHlwZShvKX0pLEcoMSwiYXN5bmMiKSxHKDIsImFzeW5jIiksRygzLCJhc3luYyIpLGcoKSksMiZlJiZfKCJudW1BbGVydHMiLFcoMSwzLGkubnVtQWxlcnRzJCkpKCJhbGVydHNCcmVha2Rvd24iLFcoMiw1LGkuYWxlcnRzQnJlYWtkb3duJCkpKCJmb2N1c1R5cGUiLFcoMyw3LGkuZm9jdXNUeXBlJCkpfSxkZXBlbmRlbmNpZXM6W3ZYLGx0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx4dj17MTk6ImZsb2F0MTYiLDE6ImZsb2F0MzIiLDI6ImZsb2F0NjQiLDM6ImludDMyIiw0OiJ1aW50OCIsMTc6InVpbnQxNiIsMjI6InVpbnQzMiIsMjM6InVpbnQ2NCIsNToiaW50MTYiLDY6ImludDgiLDc6InN0cmluZyIsODoiY29tcGxleDY0IiwxODoiY29tcGxleDEyOCIsOToiaW50NjQiLDEwOiJib29sIiwxMToicWludDgiLDEyOiJxdWludDgiLDE1OiJxaW50MTYiLDE2OiJxdWludDE2IiwxMzoicWludDMyIiwxNDoiYmZsb2F0MTYiLDIwOiJyZXNvdXJjZSIsMjE6InZhcmlhbnQiLDExOToiZmxvYXQxNl9yZWYiLDEwMToiZmxvYXQzMl9yZWYiLDEwMjoiZmxvYXQ2NF9yZWYiLDEwMzoiaW50MzJfcmVmIiwxMjI6InVpbnQzMl9yZWYiLDEwNDoidWludDhfcmVmIiwxMTc6InVpbnQxNl9yZWYiLDEwNToiaW50MTZfcmVmIiwxMDY6ImludDhfcmVmIiwxMDc6InN0cmluZ19yZWYiLDEwODoiY29tcGxleDY0X3JlZiIsMTE4OiJjb21wbGV4MTI4X3JlZiIsMTA5OiJpbnQ2NF9yZWYiLDEyMzoidWludDY0X3JlZiIsMTEwOiJib29sX3JlZiIsMTExOiJxaW50OF9yZWYiLDExMjoicXVpbnQ4X3JlZiIsMTE1OiJxaW50MTZfcmVmIiwxMTY6InF1aW50MTZfcmVmIiwxMTM6InFpbnQzMl9yZWYiLDExNDoiYmZsb2F0MTZfcmVmIiwxMjA6InJlc291cmNlX3JlZiIsMTIxOiJ2YXJpYW50X3JlZiJ9O2Z1bmN0aW9uIHRUKG4pe2xldHt0ZW5zb3JEZWJ1Z01vZGU6dCxhcnJheTplfT1uO3N3aXRjaCh0KXtjYXNlIEVvLk5PX1RFTlNPUjppZihudWxsIT09ZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWRseSByZWNlaXZlZCBub24tbnVsbCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdW5kZXIgTk9fVEVOU09SIG1vZGUiKTtyZXR1cm57fTtjYXNlIEVvLkNVUlRfSEVBTFRIOmlmKG51bGw9PT1lfHwyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBDVVJUX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMiwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO3JldHVybntoYXNJbmZPck5hTjpCb29sZWFuKGVbMV0pfTtjYXNlIEVvLkNPTkNJU0VfSEVBTFRIOntpZihudWxsPT09ZXx8NSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ09OQ0lTRV9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDUsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT17c2l6ZTplWzFdfTtyZXR1cm4gZVsyXT4wJiYoaS5udW1OZWdhdGl2ZUluZnM9ZVsyXSksZVszXT4wJiYoaS5udW1Qb3NpdGl2ZUluZnM9ZVszXSksZVs0XT4wJiYoaS5udW1OYU5zPWVbNF0pLGl9Y2FzZSBFby5TSEFQRTp7aWYobnVsbD09PWV8fDEwIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBTSEFQRSBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMTAsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT1lWzJdLHI9ZS5zbGljZSg0LE1hdGgubWluKDQraSxlLmxlbmd0aCkpO3JldHVybiByLmxlbmd0aDxpJiYocj1uZXcgQXJyYXkoaS1yLmxlbmd0aCkuY29uY2F0KHIpKSx7ZHR5cGU6eHZbZVsxXV0scmFuazppLHNpemU6ZVszXSxzaGFwZTpyfX1jYXNlIEVvLkZVTExfSEVBTFRIOntpZihudWxsPT09ZXx8MTEhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIEZVTExfSEVBTFRIIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCAxMSwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO2xldCByPXtkdHlwZTp4dltlWzJdXSxyYW5rOmVbM10sc2l6ZTplWzRdfTtyZXR1cm4gZVs1XT4wJiYoci5udW1OZWdhdGl2ZUluZnM9ZVs1XSksZVs2XT4wJiYoci5udW1Qb3NpdGl2ZUluZnM9ZVs2XSksZVs3XT4wJiYoci5udW1OYU5zPWVbN10pLGVbOF0+MCYmKHIubnVtTmVnYXRpdmVGaW5pdGVzPWVbOF0pLGVbOV0+MCYmKHIubnVtWmVyb3M9ZVs5XSksZVsxMF0+MCYmKHIubnVtUG9zaXRpdmVGaW5pdGVzPWVbMTBdKSxyfWNhc2UgRW8uRlVMTF9URU5TT1I6aWYobnVsbCE9PWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkbHkgcmVjZWl2ZWQgbm9uLW51bGwgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHVuZGVyIEZVTExfVEVOU09SIG1vZGUiKTtyZXR1cm57fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHRlbnNvckRlYnVnTW9kZTogJHt0fWApfX12YXIgSEw9Iltfbmdob3N0LSVDT01QJV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICBoZWlnaHQ6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gICAgbWFyZ2luOiAwIDJweDtcbiAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgfSI7ZnVuY3Rpb24gWENlKG4sdCl7MSZuJiZQKDAsImRpdiIsNCl9ZnVuY3Rpb24gUUNlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDcpKDEsInNwYW4iLDgpLFQoMiwiTmFOIiksZygpLGgoMywic3BhbiIsOSksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO2IoNCksemUoIlx4ZDciLGUubnVtTmFOcywiIil9fWZ1bmN0aW9uIFpDZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw3KSgxLCJzcGFuIiw4KSxUKDIsIi1cdTIyMWUiKSxnKCksaCgzLCJzcGFuIiw5KSxUKDQpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7Yig0KSx6ZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUluZnMsIiIpfX1mdW5jdGlvbiBLQ2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsNykoMSwic3BhbiIsOCksVCgyLCIrXHUyMjFlIiksZygpLGgoMywic3BhbiIsOSksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO2IoNCksemUoIlx4ZDciLGUubnVtUG9zaXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gSkNlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxUKDIsIi0iKSxnKCksaCgzLCJzcGFuIiw5KSxUKDQpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7Yig0KSx6ZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiAkQ2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsNykoMSwic3BhbiIsMTApLFQoMiwiMCIpLGcoKSxoKDMsInNwYW4iLDkpLFQoNCksZygpKCkpLDImbil7bGV0IGU9dygyKTtiKDQpLHplKCJceGQ3IixlLm51bVplcm9zLCIiKX19ZnVuY3Rpb24gZU1lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxUKDIsIisiKSxnKCksaCgzLCJzcGFuIiw5KSxUKDQpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7Yig0KSx6ZSgiXHhkNyIsZS5udW1Qb3NpdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiB0TWUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNSksUygxLFFDZSw1LDEsImRpdiIsNiksUygyLFpDZSw1LDEsImRpdiIsNiksUygzLEtDZSw1LDEsImRpdiIsNiksUyg0LEpDZSw1LDEsImRpdiIsNiksUyg1LCRDZSw1LDEsImRpdiIsNiksUyg2LGVNZSw1LDEsImRpdiIsNiksZygpKSwyJm4pe2xldCBlPXcoKTtiKDEpLF8oIm5nSWYiLHZvaWQgMCE9PWUubnVtTmFOcyYmZS5udW1OYU5zPjApLGIoMSksXygibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUluZnMmJmUubnVtTmVnYXRpdmVJbmZzPjApLGIoMSksXygibmdJZiIsdm9pZCAwIT09ZS5udW1Qb3NpdGl2ZUluZnMmJmUubnVtUG9zaXRpdmVJbmZzPjApLGIoMSksXygibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUZpbml0ZXMmJmUubnVtTmVnYXRpdmVGaW5pdGVzPjApLGIoMSksXygibmdJZiIsdm9pZCAwIT09ZS5udW1aZXJvcyYmZS5udW1aZXJvcz4wKSxiKDEpLF8oIm5nSWYiLHZvaWQgMCE9PWUubnVtUG9zaXRpdmVGaW5pdGVzJiZlLm51bVBvc2l0aXZlRmluaXRlcz4wKX19dmFyIG5NZT1mdW5jdGlvbihuKXtyZXR1cm5bImNvbnRhaW5lciIsbl19O2Z1bmN0aW9uIGlNZShuLHQpezEmbiYmUCgwLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDUpLDImbiYmXygiZHR5cGUiLHcoKS5kZWJ1Z1RlbnNvclZhbHVlLmR0eXBlKX1mdW5jdGlvbiByTWUobix0KXsxJm4mJlAoMCwiZGVidWctdGVuc29yLXJhbmsiLDYpLDImbiYmXygicmFuayIsdygpLmRlYnVnVGVuc29yVmFsdWUucmFuayl9ZnVuY3Rpb24gb01lKG4sdCl7MSZuJiZQKDAsImRlYnVnLXRlbnNvci1zaGFwZSIsNyksMiZuJiZfKCJzaGFwZSIsdygpLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpfWZ1bmN0aW9uIGFNZShuLHQpezEmbiYmUCgwLCJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLDgpLDImbiYmXygiaGFzSW5mT3JOYU4iLHcoKS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKX1mdW5jdGlvbiBzTWUobix0KXtpZigxJm4mJlAoMCwiZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIiw5KSwyJm4pe2xldCBlPXcoKTtKaSgic2l6ZSIsZS5kZWJ1Z1RlbnNvclZhbHVlLnNpemUpLF8oIm51bU5lZ2F0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlSW5mcykoIm51bVBvc2l0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlSW5mcykoIm51bU5hTnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1OYU5zKSgibnVtTmVnYXRpdmVGaW5pdGVzIixlLmRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVGaW5pdGVzKSgibnVtWmVyb3MiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1aZXJvcykoIm51bVBvc2l0aXZlRmluaXRlcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlRmluaXRlcyl9fXZhciBsTWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLWR0eXBlIl1dLGlucHV0czp7ZHR5cGU6ImR0eXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlQoMCksMiZlJiZ6ZSgiICIsaS5kdHlwZSwiICIpfSxzdHlsZXM6W0hMXX0pLG59KSgpLGNNZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItcmFuayJdXSxpbnB1dHM6e3Jhbms6InJhbmsifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmVCgwKSwyJmUmJnplKCIgIixpLnJhbmssIkQgIil9LHN0eWxlczpbSExdfSksbn0pKCksZE1lPSgoKT0+e2NsYXNzIG57Z2V0IHNoYXBlU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2hhcGUubWFwKGU9PnZvaWQgMD09PWU/Ij8iOlN0cmluZyhlKSkuam9pbigiLCIpKyJdIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXNoYXBlIl1dLGlucHV0czp7c2hhcGU6InNoYXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlQoMCksMiZlJiZ6ZSgiIHNoYXBlOiIsaS5zaGFwZVN0cmluZywiICIpfSxzdHlsZXM6W0hMXX0pLG59KSgpLHVNZT0oKCk9PntjbGFzcyBue2dldCBicmVha2Rvd25FeGlzdHMoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5udW1OYU5zfHx2b2lkIDAhPT10aGlzLm51bU5lZ2F0aXZlSW5mc3x8dm9pZCAwIT09dGhpcy5udW1Qb3NpdGl2ZUluZnN8fHZvaWQgMCE9PXRoaXMubnVtTmVnYXRpdmVGaW5pdGVzfHx2b2lkIDAhPT10aGlzLm51bVplcm9zfHx2b2lkIDAhPT10aGlzLm51bVBvc2l0aXZlRmluaXRlc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIl1dLGlucHV0czp7c2l6ZToic2l6ZSIsbnVtTmFOczoibnVtTmFOcyIsbnVtTmVnYXRpdmVJbmZzOiJudW1OZWdhdGl2ZUluZnMiLG51bVBvc2l0aXZlSW5mczoibnVtUG9zaXRpdmVJbmZzIixudW1OZWdhdGl2ZUZpbml0ZXM6Im51bU5lZ2F0aXZlRmluaXRlcyIsbnVtWmVyb3M6Im51bVplcm9zIixudW1Qb3NpdGl2ZUZpbml0ZXM6Im51bVBvc2l0aXZlRmluaXRlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpemUiXSxbMSwic2l6ZS12YWx1ZSJdLFsiY2xhc3MiLCJicmVhayIsNCwibmdJZiJdLFsiY2xhc3MiLCJicmVha2Rvd24iLDQsIm5nSWYiXSxbMSwiYnJlYWsiXSxbMSwiYnJlYWtkb3duIl0sWyJjbGFzcyIsImNhdGVnb3J5Iiw0LCJuZ0lmIl0sWzEsImNhdGVnb3J5Il0sWzEsImNhdGVnb3J5LXRhZyIsImluZmluaXRlIl0sWzEsImNhdGVnb3J5LWNvdW50Il0sWzEsImNhdGVnb3J5LXRhZyIsImZpbml0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJzcGFuIiksVCgyLCJzaXplOiIpLGcoKSxoKDMsInNwYW4iLDEpLFQoNCksZygpKCksUyg1LFhDZSwxLDAsImRpdiIsMiksUyg2LHRNZSw3LDYsImRpdiIsMykpLDImZSYmKGIoNCksdXQoaS5zaXplKSxiKDEpLF8oIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSxiKDEpLF8oIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSl9LGRlcGVuZGVuY2llczpbRmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgfVxuICAgICAgLmJyZWFrW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLnNpemVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTFweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDExcHg7XG4gICAgICAgIG1hcmdpbjogMCAzcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuYnJlYWtkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnlbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICAgIGhlaWd0aDogMTAwJTtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmNhdGVnb3J5LXRhZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgIHBhZGRpbmc6IDAgMnB4O1xuICAgICAgfVxuICAgICAgLmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhO1xuICAgICAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICAgIH1cbiAgICAgIC5pbmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIH0iXX0pLG59KSgpLHBNZT0oKCk9PntjbGFzcyBue2dldCBpbmZvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaGFzSW5mT3JOYU4/IkhhcyBcdTIyMWUvTmFOIjoiTm8gXHUyMjFlL05hTiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiJdXSxpbnB1dHM6e2hhc0luZk9yTmFOOiJoYXNJbmZPck5hTiJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCksVCgxKSxnKCkpLDImZSYmKF8oIm5nQ2xhc3MiLFNuKDIsbk1lLGkuaGFzSW5mT3JOYU4/Imhhcy1pbmYtb3ItbmFuIjoiIikpLGIoMSksemUoIiAiLGkuaW5mb1N0cmluZywiICIpKX0sZGVwZW5kZW5jaWVzOltibl0sc3R5bGVzOlsiLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGNvbG9yOiAjNjY2NjY2O1xuICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuaGFzLWluZi1vci1uYW5bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9Il19KSxufSkoKSxuVD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItdmFsdWUiXV0saW5wdXRzOntkZWJ1Z1RlbnNvclZhbHVlOiJkZWJ1Z1RlbnNvclZhbHVlIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiZHR5cGUiLDQsIm5nSWYiXSxbMywicmFuayIsNCwibmdJZiJdLFszLCJzaGFwZSIsNCwibmdJZiJdLFszLCJoYXNJbmZPck5hTiIsNCwibmdJZiJdLFszLCJzaXplIiwibnVtTmVnYXRpdmVJbmZzIiwibnVtUG9zaXRpdmVJbmZzIiwibnVtTmFOcyIsIm51bU5lZ2F0aXZlRmluaXRlcyIsIm51bVplcm9zIiwibnVtUG9zaXRpdmVGaW5pdGVzIiw0LCJuZ0lmIl0sWzMsImR0eXBlIl0sWzMsInJhbmsiXSxbMywic2hhcGUiXSxbMywiaGFzSW5mT3JOYU4iXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFMoMCxpTWUsMSwxLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDApLFMoMSxyTWUsMSwxLCJkZWJ1Zy10ZW5zb3ItcmFuayIsMSksUygyLG9NZSwxLDEsImRlYnVnLXRlbnNvci1zaGFwZSIsMiksUygzLGFNZSwxLDEsImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiIsMyksUyg0LHNNZSwxLDcsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsNCkpLDImZSYmKF8oIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSksYigxKSxfKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUucmFuayksYigxKSxfKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpLGIoMSksXygibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKSxiKDEpLF8oIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSl9LGRlcGVuZGVuY2llczpbRmUsbE1lLHBNZSx1TWUsY01lLGRNZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIH1cbiAgICAgIGRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93bltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBmTWUobix0KXsxJm4mJihoKDAsImRpdiIsMTIpLFQoMSwiXHUyNWI2IiksZygpKX12YXIgbU1lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTpuLGFycmF5OnR9fTtmdW5jdGlvbiBoTWUobix0KXtpZigxJm4mJlAoMCwiZGVidWctdGVuc29yLXZhbHVlIiwxNyksMiZuKXtsZXQgZT13KDIpLiRpbXBsaWNpdCxpPXcoMik7XygiZGVidWdUZW5zb3JWYWx1ZSIsaS5wYXJzZURlYnVnVGVuc29yVmFsdWUoUHIoMSxtTWUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0udGVuc29yX2RlYnVnX21vZGUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0uZGVidWdfdGVuc29yX3ZhbHVlKSkpfX1mdW5jdGlvbiBnTWUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiKSgxLCJkaXYiLDEzKSgyLCJidXR0b24iLDE0KSxEKCJjbGljayIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKS4kaW1wbGljaXQsbz13KDIpO3JldHVybiBRKG8ub25UZW5zb3JOYW1lQ2xpY2suZW1pdCh7aW5kZXg6cixncmFwaF9pZDpvLmdyYXBoRXhlY3V0aW9uRGF0YVtyXS5ncmFwaF9pZCxvcF9uYW1lOm8uZ3JhcGhFeGVjdXRpb25EYXRhW3JdLm9wX25hbWV9KSl9KSxUKDMpLGcoKSxoKDQsImRpdiIsMTUpLFQoNSksZygpKCksUyg2LGhNZSwxLDQsImRlYnVnLXRlbnNvci12YWx1ZSIsMTYpLGcoKX1pZigyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KDIpO2IoMiksSmkoInRpdGxlIixpLmdldFRlbnNvck5hbWUoZSkpLGIoMSksemUoIiAiLGkuZ2V0VGVuc29yTmFtZShlKSwiICIpLGIoMiksdXQoaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0ub3BfdHlwZSksYigxKSxfKCJuZ0lmIixudWxsIT09aS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0uZGVidWdfdGVuc29yX3ZhbHVlKX19ZnVuY3Rpb24gX01lKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDE4KSxUKDEsIiBMb2FkaW5nLi4uICIpLGcoKSl9dmFyIHlNZT1mdW5jdGlvbihuKXtyZXR1cm57ImlucHV0LW9mLWZvY3VzIjpufX07ZnVuY3Rpb24gYk1lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDUpKDEsImRpdiIsNikoMiwiZGl2Iiw3KSxTKDMsZk1lLDIsMCwiZGl2Iiw4KSxUKDQpLGcoKSxTKDUsZ01lLDcsNCwiZGl2Iiw5KSxTKDYsX01lLDIsMCwibmctdGVtcGxhdGUiLDEwLDExLFp0KSxnKCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXR0KDcpLHI9dygyKTtiKDEpLF8oIm5nQ2xhc3MiLFNuKDUseU1lLHIuaXNJbnB1dE9mRm9jdXMoZSkpKSxiKDIpLF8oIm5nSWYiLGU9PT1yLmZvY3VzSW5kZXgpLGIoMSksemUoIiAiLGUsIiAiKSxiKDEpLF8oIm5nSWYiLHIuZ3JhcGhFeGVjdXRpb25EYXRhW2VdKSgibmdJZkVsc2UiLGkpfX1mdW5jdGlvbiB2TWUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLDMpLEQoInNjcm9sbGVkSW5kZXhDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uU2Nyb2xsZWRJbmRleENoYW5nZS5lbWl0KHIpKX0pLFMoMSxiTWUsOCw3LCJkaXYiLDQpLGcoKX1pZigyJm4pe2xldCBlPXcoKTtiKDEpLF8oImNka1ZpcnR1YWxGb3JPZiIsZS5ncmFwaEV4ZWN1dGlvbkluZGljZXMpfX12YXIgTVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25TY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBMLHRoaXMub25UZW5zb3JOYW1lQ2xpY2s9bmV3IEwsdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9dFQsdGhpcy5URVNUX09OTFk9e2dldFZpZXdQb3J0OigpPT50aGlzLnZpZXdQb3J0fX1uZ09uQ2hhbmdlcyhlKXtpZih0aGlzLnZpZXdQb3J0JiZlLmZvY3VzSW5kZXgmJm51bGwhPT1lLmZvY3VzSW5kZXguY3VycmVudFZhbHVlKXtsZXQgaT10aGlzLnZpZXdQb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxyPWUuZm9jdXNJbmRleC5jdXJyZW50VmFsdWUsbz1NYXRoLnJvdW5kKChpLmVuZC1pLnN0YXJ0KS8zKSxhPU1hdGgubWF4KHItbywwKTt0aGlzLnZpZXdQb3J0LnNjcm9sbFRvSW5kZXgoYSxyPj1pLnN0YXJ0JiZyPGkuZW5kPyJzbW9vdGgiOnZvaWQgMCl9fWdldFRlbnNvck5hbWUoZSl7cmV0dXJuYCR7dGhpcy5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0ub3BfbmFtZX06JHt0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vdXRwdXRfc2xvdH1gfWlzSW5wdXRPZkZvY3VzKGUpe3JldHVybiBudWxsIT09dGhpcy5mb2N1c0lucHV0SW5kaWNlcyYmdGhpcy5mb2N1c0lucHV0SW5kaWNlcy5pbmNsdWRlcyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZZZShDZyw1KSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLnZpZXdQb3J0PXIuZmlyc3QpfX0saW5wdXRzOntudW1HcmFwaEV4ZWN1dGlvbnM6Im51bUdyYXBoRXhlY3V0aW9ucyIsZ3JhcGhFeGVjdXRpb25EYXRhOiJncmFwaEV4ZWN1dGlvbkRhdGEiLGdyYXBoRXhlY3V0aW9uSW5kaWNlczoiZ3JhcGhFeGVjdXRpb25JbmRpY2VzIixmb2N1c0luZGV4OiJmb2N1c0luZGV4Iixmb2N1c0lucHV0SW5kaWNlczoiZm9jdXNJbnB1dEluZGljZXMifSxvdXRwdXRzOntvblNjcm9sbGVkSW5kZXhDaGFuZ2U6Im9uU2Nyb2xsZWRJbmRleENoYW5nZSIsb25UZW5zb3JOYW1lQ2xpY2s6Im9uVGVuc29yTmFtZUNsaWNrIn0sZmVhdHVyZXM6W0d0XSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lciJdLFsxLCJncmFwaC1leGVjdXRpb25zLXRpdGxlIl0sWyJpdGVtU2l6ZSIsIjM4IiwiY2xhc3MiLCJncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0IiwzLCJzY3JvbGxlZEluZGV4Q2hhbmdlIiw0LCJuZ0lmIl0sWyJpdGVtU2l6ZSIsIjM4IiwxLCJncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0IiwzLCJzY3JvbGxlZEluZGV4Q2hhbmdlIl0sWyJjbGFzcyIsInRlbnNvci1jb250YWluZXIiLDQsImNka1ZpcnR1YWxGb3IiLCJjZGtWaXJ0dWFsRm9yT2YiXSxbMSwidGVuc29yLWNvbnRhaW5lciJdLFsxLCJ0ZW5zb3ItaXRlbSIsMywibmdDbGFzcyJdLFsxLCJncmFwaC1leGVjdXRpb24taW5kZXgiXSxbImNsYXNzIiwiZ3JhcGgtZXhlY3V0aW9uLWZvY3VzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiY2xhc3MiLCJ0ZW5zb3ItaXRlbSJdLFsiZGF0YUxvYWRpbmciLCIiXSxbMSwiZ3JhcGgtZXhlY3V0aW9uLWZvY3VzIl0sWzEsInRlbnNvci1uYW1lLWFuZC1vcC10eXBlIl0sWzEsInRlbnNvci1uYW1lIiwzLCJ0aXRsZSIsImNsaWNrIl0sWzEsIm9wLXR5cGUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSIsNCwibmdJZiJdLFszLCJkZWJ1Z1RlbnNvclZhbHVlIl0sWzEsImxvYWRpbmctc3Bpbm5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFQoMiksZygpLFMoMyx2TWUsMiwxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLDIpLGcoKSksMiZlJiYoYigyKSx6ZSgiIEdyYXBoIEV4ZWN1dGlvbnMgKCIsaS5udW1HcmFwaEV4ZWN1dGlvbnMsIikgIiksYigxKSxfKCJuZ0lmIixudWxsIT09aS5udW1HcmFwaEV4ZWN1dGlvbnMmJmkubnVtR3JhcGhFeGVjdXRpb25zPjApKX0sZGVwZW5kZW5jaWVzOltibixGZSxuVCxRNyxaNyxDZ10sc3R5bGVzOlsnLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDtwYWRkaW5nLWxlZnQ6MTBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5ncmFwaC1leGVjdXRpb24tZm9jdXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDo0cHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JhcGgtZXhlY3V0aW9ucy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjVweH0uZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7Zm9udC1zaXplOjEycHg7d2lkdGg6MTAwJTtvdmVyZmxvdy14OmhpZGRlbn0uaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjA5OX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0ubG9hZGluZy1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6YmxvY2t9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0udGVuc29yLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0udGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7aGVpZ2h0OjM4cHg7bGluZS1oZWlnaHQ6MzhweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0udGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtib3JkZXI6bm9uZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MTZweDttYXJnaW46MnB4IDAgMXB4O21heC13aWR0aDpjYWxjKDEwMCUgLSAycHgpO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjAgMnB4O3RleHQtYWxpZ246cmlnaHQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MXB4IHNvbGlkICNjNmNhZDF9LnRlbnNvci1uYW1lLWFuZC1vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLXJpZ2h0OjhweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjI0MHB4fWRlYnVnLXRlbnNvci12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCAwfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksd1g9KCgpPT57Y2xhc3MgbntvblNjcm9sbGVkSW5kZXhDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChqZyh7aW5kZXg6ZX0pKX1vblRlbnNvck5hbWVDbGljayhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEdnKGUpKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1HcmFwaEV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZShwbihidikpLHRoaXMuZ3JhcGhFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUocG4oUkwpKSx0aGlzLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKHBuKHEoYnYsaT0+MD09PWk/bnVsbDpBcnJheS5mcm9tKHtsZW5ndGg6aX0pLm1hcCgocixvKT0+bykpKSksdGhpcy5mb2N1c0luZGV4JD10aGlzLnN0b3JlLnBpcGUocG4oa0wpKSx0aGlzLmZvY3VzSW5wdXRJbmRpY2VzJD10aGlzLnN0b3JlLnBpcGUocG4odVgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnMiXV0sZGVjbHM6Nix2YXJzOjE1LGNvbnN0czpbWzMsIm51bUdyYXBoRXhlY3V0aW9ucyIsImdyYXBoRXhlY3V0aW9uRGF0YSIsImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsImZvY3VzSW5kZXgiLCJmb2N1c0lucHV0SW5kaWNlcyIsIm9uU2Nyb2xsZWRJbmRleENoYW5nZSIsIm9uVGVuc29yTmFtZUNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJncmFwaC1leGVjdXRpb25zLWNvbXBvbmVudCIsMCksRCgib25TY3JvbGxlZEluZGV4Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjcm9sbGVkSW5kZXhDaGFuZ2Uobyl9KSgib25UZW5zb3JOYW1lQ2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGVuc29yTmFtZUNsaWNrKG8pfSksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSxHKDMsImFzeW5jIiksRyg0LCJhc3luYyIpLEcoNSwiYXN5bmMiKSxnKCkpLDImZSYmXygibnVtR3JhcGhFeGVjdXRpb25zIixXKDEsNSxpLm51bUdyYXBoRXhlY3V0aW9ucyQpKSgiZ3JhcGhFeGVjdXRpb25EYXRhIixXKDIsNyxpLmdyYXBoRXhlY3V0aW9uRGF0YSQpKSgiZ3JhcGhFeGVjdXRpb25JbmRpY2VzIixXKDMsOSxpLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyQpKSgiZm9jdXNJbmRleCIsVyg0LDExLGkuZm9jdXNJbmRleCQpKSgiZm9jdXNJbnB1dEluZGljZXMiLFcoNSwxMyxpLmZvY3VzSW5wdXRJbmRpY2VzJCkpfSxkZXBlbmRlbmNpZXM6W01YLGx0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiBNTWUobix0KXsxJm4mJihoKDAsInNwYW4iKSxUKDEsIiBPdXRwdXQgIiksZygpKX1mdW5jdGlvbiB3TWUobix0KXsxJm4mJihoKDAsInNwYW4iKSxUKDEsIiBJbnB1dCAiKSxnKCkpfWZ1bmN0aW9uIFNNZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw2KSgxLCJzcGFuIiw3KSxTKDIsTU1lLDIsMCwic3BhbiIsOCksUygzLHdNZSwyLDAsInNwYW4iLDgpLGcoKSxUKDQpLGcoKSksMiZuKXtsZXQgZT13KCk7YigxKSxfKCJuZ1N3aXRjaCIsZS5raW5kKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsImlucHV0IiksYigxKSxfKCJuZ1N3aXRjaENhc2UiLCJjb25zdW1lciIpLGIoMSksemUoIiBzbG90OiAiLGUuc2xvdCwiICIpfX1mdW5jdGlvbiBFTWUobix0KXtpZigxJm4mJihoKDAsImRpdiIsOSksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO2IoMSksemUoIiAiLGUub3BEYXRhLm9wX3R5cGUsIiAiKX19ZnVuY3Rpb24gVE1lKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiwxMCksVCgxLCIgKE9wIGluZm8gdW5hdmFpbGFibGUuKSAiKSxnKCkpfXZhciBETWU9ZnVuY3Rpb24obil7cmV0dXJuW25dfSxTWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbk9wTmFtZUNsaWNrPW5ldyBMfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1vcCJdXSxpbnB1dHM6e2tpbmQ6ImtpbmQiLG9wTmFtZToib3BOYW1lIixzbG90OiJzbG90IixvcERhdGE6Im9wRGF0YSJ9LG91dHB1dHM6e29uT3BOYW1lQ2xpY2s6Im9uT3BOYW1lQ2xpY2sifSxkZWNsczo5LHZhcnM6Nyxjb25zdHM6W1sxLCJvcC1jb250YWluZXIiXSxbMSwiaW5wdXQtdGVuc29yLW5hbWUiXSxbMSwib3AtbmFtZSIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJjbGFzcyIsInNsb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwib3AtdHlwZSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWzEsInNsb3QiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm9wLXR5cGUiXSxbMSwib3AtaW5mby1taXNzaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoaCgwLCJidXR0b24iLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk9wTmFtZUNsaWNrLmVtaXQoe29wX25hbWU6aS5vcE5hbWV9KX0pLGgoMywic3BhbiIpLFQoNCksZygpKCksUyg1LFNNZSw1LDQsImRpdiIsMyksZygpLFMoNixFTWUsMiwxLCJkaXYiLDQpLFMoNyxUTWUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw1LFp0KSxnKCkpLDImZSl7bGV0IHI9dHQoOCk7YigyKSxfKCJuZ0NsYXNzIixTbig1LERNZSwic2VsZiI9PT1pLmtpbmQ/InNlbGYtb3AtbmFtZSI6IiIpKSxiKDIpLHV0KGkub3BOYW1lKSxiKDEpLF8oIm5nSWYiLCJzZWxmIiE9PWkua2luZCksYigxKSxfKCJuZ0lmIix2b2lkIDAhPT1pLm9wRGF0YSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbYm4sRmUsJGksc3JdLHN0eWxlczpbJy5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjJweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MXB4IDNweCAjZWVlO2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDVweCAwIDA7cGFkZGluZzoycHggNnB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjAwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzoxcHggM3B4ICM3NTc1NzV9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZTowfS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlcjoycHggc29saWQgI2ZmZDNiMn0ub3AtaW5mby1taXNzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdy13cmFwOmFueXdoZXJlO3BhZGRpbmc6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2hpdGUtc3BhY2U6cHJlLXdyYXB9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zZWxmLW9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xvdFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J119KSxufSkoKTtmdW5jdGlvbiBBTWUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxUKDIpLGcoKSxoKDMsImdyYXBoLW9wIiwxNSksRCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KDMpO3JldHVybiBRKG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpyLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXg7YigyKSx6ZSgiSW5wdXQgc2xvdCAiLGksIjoiKSxiKDEpLF8oImtpbmQiLCJpbnB1dCIpKCJvcE5hbWUiLGUub3BfbmFtZSkoInNsb3QiLGUub3V0cHV0X3Nsb3QpKCJvcERhdGEiLGUuZGF0YSl9fWZ1bmN0aW9uIFJNZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxMSkoMSwiZGl2IiksUygyLEFNZSw0LDUsImRpdiIsMTIpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7YigyKSxfKCJuZ0Zvck9mIixlLmlucHV0T3BzKX19ZnVuY3Rpb24ga01lKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDE2KSxUKDEsIiAoVGhpcyBvcCBoYXMgbm8gaW5wdXQgdGVuc29yLikgIiksZygpKX1mdW5jdGlvbiBQTWUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDIzKSgxLCJncmFwaC1vcCIsMTUpLEQoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dyg0KTtyZXR1cm4gUShvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6ci5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigxKSxfKCJraW5kIiwiY29uc3VtZXIiKSgib3BOYW1lIixlLm9wX25hbWUpKCJzbG90IixlLmlucHV0X3Nsb3QpKCJvcERhdGEiLGUuZGF0YSl9fWZ1bmN0aW9uIE9NZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxOSkoMSwiZGl2IiwyMCksVCgyKSxoKDMsInNwYW4iKSxRTSg0LDIxKSxnKCksVCg1LCIpICIpLGcoKSxTKDYsUE1lLDIsNCwiZGl2IiwyMiksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleDtiKDIpLGR1KCIgT3V0cHV0IHNsb3QgIixpLCI6ICgiLGUubGVuZ3RoLCIgIiksYigyKSxFeShlLmxlbmd0aCksWk0oNCksYigyKSxfKCJuZ0Zvck9mIixlKX19ZnVuY3Rpb24gRk1lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDE3KSgxLCJkaXYiKSxTKDIsT01lLDcsNCwiZGl2IiwxOCksZygpKCkpLDImbil7bGV0IGU9dygyKTtiKDIpLF8oIm5nRm9yT2YiLGUuY29uc3VtZXJPcHMpfX1mdW5jdGlvbiBMTWUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMjQpLFQoMSksaCgyLCJzcGFuIiksUU0oMywyNSksZygpLFQoNCwiIGFuZCBubyBjb25zdW1lci4pICIpLGcoKSksMiZuKXtsZXQgZT13KDIpO2IoMSksemUoIiAoVGhpcyBvcCBoYXMgIixlLm9wSW5mby5jb25zdW1lcnMubGVuZ3RoLCIgb3V0cHV0ICIpLGIoMiksRXkoZS5vcEluZm8uY29uc3VtZXJzLmxlbmd0aCksWk0oMyl9fWZ1bmN0aW9uIE5NZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIpLFMoMSxSTWUsMywxLCJkaXYiLDQpLFMoMixrTWUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw1LFp0KSxoKDQsImRpdiIsNikoNSwiZGl2Iiw3KSxUKDYsIk9wOiIpLGcoKSxoKDcsImdyYXBoLW9wIiw4KSxEKCJvbk9wTmFtZUNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKTtyZXR1cm4gUShvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6ci5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pKX0pLGcoKSgpLFMoOCxGTWUsMywxLCJkaXYiLDkpLFMoOSxMTWUsNSwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxadCksZygpfWlmKDImbil7bGV0IGU9dHQoMyksaT10dCgxMCkscj13KCk7YigxKSxfKCJuZ0lmIixyLmlucHV0T3BzLmxlbmd0aD4wKSgibmdJZkVsc2UiLGUpLGIoNiksXygia2luZCIsInNlbGYiKSgib3BOYW1lIixyLm9wSW5mby5vcF9uYW1lKSgib3BEYXRhIixyLm9wSW5mbyksYigxKSxfKCJuZ0lmIixyLnRvdGFsTnVtQ29uc3VtZXJzPjApKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIEJNZShuLHQpezEmbiYmKGgoMCwic3BhbiIsMjYpLFQoMSwiIChPcCBpbmZvIHVuYXZhaWxhYmxlLikgIiksZygpKX1mdW5jdGlvbiBWTWUobix0KXsxJm4mJihoKDAsImRpdiIsMjcpLFQoMSwiIE5vIGdyYXBoIG9wIHNlbGVjdGVkLiBDbGljayBhIHRlbnNvciBuYW1lIGluIHRoZSBHcmFwaCBFeGVjdXRpb25zIHRhYmxlIHRvIHZpZXcgdGhlIG5laWdoYm9yaG9vZCBvZiB0aGUgdGVuc29yJ3Mgb3AgaW4gaXRzIGdyYXBoLiAiKSxnKCkpfXZhciBFWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbkdyYXBoT3BOYXZpZ2F0ZT1uZXcgTH1nZXQgZ3JhcGhJZCgpe3JldHVybiB0aGlzLm9wSW5mby5ncmFwaF9pZHNbdGhpcy5vcEluZm8uZ3JhcGhfaWRzLmxlbmd0aC0xXX1nZXQgdG90YWxOdW1Db25zdW1lcnMoKXtyZXR1cm4gdGhpcy5jb25zdW1lck9wcy5yZWR1Y2UoKGUsaSk9PmUraS5sZW5ndGgsMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImdyYXBoLWNvbXBvbmVudCJdXSxpbnB1dHM6e29wSW5mbzoib3BJbmZvIixpbnB1dE9wczoiaW5wdXRPcHMiLGNvbnN1bWVyT3BzOiJjb25zdW1lck9wcyJ9LG91dHB1dHM6e29uR3JhcGhPcE5hdmlnYXRlOiJvbkdyYXBoT3BOYXZpZ2F0ZSJ9LGRlY2xzOjksdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGUsaSxyO3JldHVybiB0PSRsb2NhbGl6ZWA64pCfZmU1NWY5YjE5M2VhMjBhYWU1YjU2MzVlNjhkOTM4NjUwMzg0Nzc0NuKQnzQ5NTUxMzM3NDA4NDEyOTk4NTE6e1ZBUl9QTFVSQUwsIHBsdXJhbCwgPTAge2NvbnN1bWVyfSA9MSB7Y29uc3VtZXJ9IG90aGVyIHtjb25zdW1lcnN9fWAsdD1LTSh0LHtWQVJfUExVUkFMOiJcdWZmZmQwXHVmZmZkIn0pLGU9JGxvY2FsaXplYDrikJ9iYWE0NjBlMmYyYjg1N2UyNjI5MmIyNDZmYzE4YWUwZWE5YjVlNTM34pCfNTU1NjM0MDM0Mzg1MDE2NTUxNjogJHt0fTpJQ1U6YCxpPSRsb2NhbGl6ZWA64pCfNmFhNzVmNjI3ZTBkYzE2MTUwZWY0NDg0NjRlMGM4NTdhYWEwZGMxOOKQnzUxNTY3MTI5MzUxNTA1ODY4Nzg6e1ZBUl9QTFVSQUwsIHBsdXJhbCwgPTAge3RlbnNvcn0gPTEge3RlbnNvcn0gb3RoZXIge3RlbnNvcnN9fWAsaT1LTShpLHtWQVJfUExVUkFMOiJcdWZmZmQwXHVmZmZkIn0pLHI9JGxvY2FsaXplYDrikJ84OTM0NzZjMmM0MjFjZWU0NzY2M2M5NzMyZmE0MWE3NTBkM2E3M2Rm4pCfMjQ2MDY3MDUzNzM1MTYyNjM0OiAke2l9OklDVTpgLFtbMSwiZ3JhcGgtc3RydWN0dXJlLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm9wSW5mb01pc3NpbmciLCIiXSxbIm5vT3BGb2N1c2VkIiwiIl0sWyJjbGFzcyIsImlucHV0cy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9JbnB1dHMiLCIiXSxbMSwic2VsZi1vcC1jb250YWluZXIiXSxbMSwic2VsZi1vcC1oZWFkZXIiXSxbMywia2luZCIsIm9wTmFtZSIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbImNsYXNzIiwiY29uc3VtZXJzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0NvbnN1bWVycyIsIiJdLFsxLCJpbnB1dHMtY29udGFpbmVyIl0sWyJjbGFzcyIsImlucHV0LW9wLXNlY3Rpb24iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJpbnB1dC1vcC1zZWN0aW9uIl0sWzEsImlucHV0LXNsb3QtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJzbG90Iiwib3BEYXRhIiwib25PcE5hbWVDbGljayJdLFsxLCJpbnB1dHMtY29udGFpbmVyIiwibm8taW5wdXRzLWluZGljYXRvciJdLFsxLCJjb25zdW1lcnMtY29udGFpbmVyIl0sWyJjbGFzcyIsInNsb3QtY29uc3VtZXJzLWNvbnRhaW5lciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInNsb3QtY29uc3VtZXJzLWNvbnRhaW5lciJdLFsxLCJzbG90LWNvbnN1bWVycy1oZWFkZXIiXSxlLFsiY2xhc3MiLCJjb25zdW1lci1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29uc3VtZXItc2VjdGlvbiJdLFsxLCJvcC1jb25zdW1lcnMtY29udGFpbmVyIl0scixbMSwib3AtaW5mby1taXNzaW5nIl0sWzEsIm5vLW9wLWZvY3VzZWQiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoaCgwLCJkaXYiKSgxLCJkaXYiKSxUKDIsIkdyYXBoIFN0cnVjdHVyZSIpLGcoKSxoKDMsImRpdiIsMCksUyg0LE5NZSwxMSw3LCJkaXYiLDEpLGcoKSxTKDUsQk1lLDIsMCwibmctdGVtcGxhdGUiLG51bGwsMixadCksUyg3LFZNZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDMsWnQpLGcoKSksMiZlKXtsZXQgcj10dCg4KTtiKDQpLF8oIm5nSWYiLG51bGwhPWkub3BJbmZvKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltkbixGZSxTWF0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtvdmVyZmxvdy15OmF1dG99LmNvbnN1bWVycy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjVweDtvdmVyZmxvdy14OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfS5jb25zdW1lci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMH0uZ3JhcGgtc3RydWN0dXJlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7b3ZlcmZsb3cteTphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uaW5wdXRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO21hcmdpbi10b3A6NXB4O292ZXJmbG93LXg6YXV0bztwYWRkaW5nLWJvdHRvbTowO3doaXRlLXNwYWNlOm5vd3JhcH0uaW5wdXQtb3Atc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjVweDtwYWRkaW5nLWJvdHRvbTo1cHh9LmlucHV0LXNsb3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYwOTk7bWFyZ2luLWJvdHRvbTo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LXNsb3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LXNsb3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlNjUxMDB9LmlucHV0LXRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcH0ubm8tb3AtZm9jdXNlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheTtmb250LWZhbWlseToiUm9ib3RvIixBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTNweDt3aGl0ZS1zcGFjZTpub3JtYWx9LnNlbGYtb3AtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO21hcmdpbi1ib3R0b206NXB4fS5zZWxmLW9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO3BhZGRpbmctYm90dG9tOjVweH0uc2xvdC1jb25zdW1lcnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6NXB4O3BhZGRpbmctdG9wOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnNsb3QtY29uc3VtZXJzLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVFg9KCgpPT57Y2xhc3MgbntvbkdyYXBoT3BOYXZpZ2F0ZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFdnKGUpKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5vcEluZm8kPXRoaXMuc3RvcmUucGlwZShwbihPTCkpLHRoaXMuaW5wdXRPcHMkPXRoaXMuc3RvcmUucGlwZShwbihGTCkpLHRoaXMuY29uc3VtZXJPcHMkPXRoaXMuc3RvcmUucGlwZShwbihwWCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZ3JhcGgiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywib3BJbmZvIiwiaW5wdXRPcHMiLCJjb25zdW1lck9wcyIsIm9uR3JhcGhPcE5hdmlnYXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJncmFwaC1jb21wb25lbnQiLDApLEQoIm9uR3JhcGhPcE5hdmlnYXRlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkdyYXBoT3BOYXZpZ2F0ZShvKX0pLEcoMSwiYXN5bmMiKSxHKDIsImFzeW5jIiksRygzLCJhc3luYyIpLGcoKSksMiZlJiZfKCJvcEluZm8iLFcoMSwzLGkub3BJbmZvJCkpKCJpbnB1dE9wcyIsVygyLDUsaS5pbnB1dE9wcyQpKSgiY29uc3VtZXJPcHMiLFcoMyw3LGkuY29uc3VtZXJPcHMkKSl9LGRlcGVuZGVuY2llczpbRVgsbHRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLERYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImluYWN0aXZlLWNvbXBvbmVudCJdXSxkZWNsczo1NCx2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl0sWzEsImNvZGUiXSxbMSwiYXJnIl0sWzEsImV4aGliaXRzLWNvbnRhaW5lciJdLFsxLCJleGhpYml0Il0sWzEsInNjcmVlbnNob3QiXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQW95SHBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphclp4cGRoeTVjb1gvWXhWZUF1WmhPUmdDNTNnSFhyNi9pMkpyZW1xcm4rMVdpNlNLeFV3a0VIR0hRSURPL3VzL3Ivc1AvaHV0WlpkTDYzWFU2dmt2anp6aTVJdnVQLytOOXpINC9ENisvMUw5K2lyOC9Mcjc5bzNJNTZSM2ZyN1I1dWR6bUx4ZXZ2L0FYL2NJNitmWFhmLzZUdXhmRi9yNkJoZitqRUIzMXRmbngwSHlldnk4SHZMWGhZWjl2cWlqdHgrSHVyNHV0TC9lK0lieTlUZC9HOWJuay83dGZucWhNVXVuY0tNVW82V1EvUHVZUHlOSW43K1R2KzE5akx3djhOcE1LUVgzK2ZSMU1TYmtwOGY3NjdQM1AwN1FUNVA4MTFmdTE5bi85dFV2a3gvbjErdnBsN21zWDNQazYrKy9FY292cjZkdnQ0ay9oY08zRWNXZnYzRjd6UC95T0Y5Lzd6MzlYdnM4M2N5VkdhMWZFZlVtKzY4WjBoc1hVNTdlajFYK05QNFd2bTd2eitCUDk5TnZsdno0N1JkL2RoZ2hzaXJYaFJ4T21PRUdlNTkzMkF3eFI0dU56ekh1bU41clBiVTQ0azVhcDZ3LzRjYVdSanFwczI0N21tUE5jb3JmeGhMZWZjZTczdzZkTzUvQVcyUGdZbHJxdi8zai9xZHYvanQvM0wxYlV4UjgvelpYakNzcXJobUdWazRmZVJkTEVPN1h1cFUzd1gvOStWcCsvMFA4RUtxc1lIblQzSG5BNmRmbkVxdUU3N0dWM2pvbjNsZjQvRm5qNE5yNXVnQlR4TDBMZ3dtSkZmQTFwQkpxOEMzR0ZnTHoyRm1neWNoanluR3hBcUdVZUJoa3pDblY2RnJzVWZmbVoxcDQ3NDBsMXFpWHdTWVdvcVJLYm5WV2FMSllPUmZpcCtWT0RNMlNTaTZsMU5KS2QyV1VXVlBOdGRSYVd4WEl6WlphYnFYVjFscHZvODJlZXU2bDE5NTY3NlBQRVVjQ0E4dW9vNDAreHBnenVzbU5KdGVhdkgveXlvb3JyYnpLcXF1dHZzYWFtL0RaZVpkZGQ5dDlqejFQUE9rQUU2ZWVkdm9aWjFwd0JsSll0bUxWbW5VYk5pK3hkdFBOdDl4NjIrMTMzUGx0MWI1VzlWLysvQnVyRnI1V0xiNlYwdnZhdDFYalZkZmFYNWNJZ3BPaU5XUEZZZzZzZU5NS0VOQlJhK1o3eURscTViUm1ma1NTb2tRR1diUTI3Z1N0R0V1WUxjUnl3N2UxKzc1eS8yamRYT24vYU4zaW4xYk9hZW4rUDFiT3NYVC91bTYvV2JVam50dHZ4VDVacURuMWlleTdaWnk0M0k1eDFUTG50SmxhUzJYdUZYTUxhWmVRV3oyMXJucUJrOXZQTHQzSHhyZTZaNVlQbk1Na0hMOXlQYUhvUXIybWZPUHhFM2hmcGQwMTAyRnBrNTZ5TTQ2OVRyNjUzMVVZTFpjRy84NDhPN1JqM0xTc3VGZFk1dG8wbml1bGZYbmtsdkkrbnFRc0J3QmRmVzhtZGQ4V29tK3NaT285NTU3KzRvWWtLTDlsbmpaakp5RDVPSFZ6bTZXdVdjNWNaWmVUSnludnpmTzQyWWM2Um84UnJTR1NQbmxNUzIzbmNRbTFmSS9DeGFVZVRpM3dkZHNnd3RwMzdicHV5TVhhWWJKcnYxWUE3dVhUYWNiVDVkRGEzS3pEQ20weWY1VXhNMzNiNVFrOWhGMW40YVozU1JTRXMyOGZ6V0k2Vm1lSXlXeHM0MXErcmg3V09DMGFWekRpdUsvR1BCRVF3U21KQ09uK3hFUmFZOTdNMEViYnZoeml0bmF5b0xHRVBNSnN1MXBpa1FmZ05jdGw2WHNJMXRmTmxoMXozRzhvZHBLRndjTWh1eTZQNGxFVFFPSHVNNDJ5N0I3TlNDSU9UN3A5WHlZL0hPWDJRaUsxZlJaejFIWUVPWGlZZmtyTithUmx1L2hWZlIrUm1HUnR5VEk3blptb2ljZzcvdVp5RDhHOUR6azZFb05vc2FHUGFneDVaUktOY1laOFd6bjdpQXZQOWJQWktHWWtKdmNOUE5EMW5ZYytQQ1J3UFkxUXlIRHRhdFhjNnJYQ3hKZEpiWk9STWhlVmRMQithMHVSbXhJUmhjbGsyT2UwYm9jdzdpeUVKK1p6Vk1EeWdmK2R4TjJZZXNycnIvWFR5Tmk5V3BuNTlNMDAzV09OQlNZVkV2ZFY2QmF1SFBaS0RETldHeFZZS2JlNFdFY1NjR3crRTZFa3hzbkowQk05dEJLWXQ2QWJWejFPR2d1Z0lmZnZIRVQ2SkZvTDR3UWN6bUN5Szh6V1NLTWFod2ZIeUdHR2txWUdFTllCVG5PRGpNdGNaeEZZMmJZVmNBT1FJMklodDd1TnBTUkY5a1JDZENZWVBPVHJHeUEvVnJjdVltSGNYYStGblJseU9Zblp0VkRTM2p3T29kcHRTZkFrd1U4eU55NloxWGpBS2FCWXVaK3doYlVrRkFoYUEvUkpGdm8rUVFWYkF6Q3ViU2NGb3lka0pwTi9iaUhtSElIT3R3dWh0bmRPZTBtRXdRZkxHOGhSMHdnbEt4UkoyMkp4RTFDRGZONFRlcmRid0VER3lQVldkRHN0QUdPMkM4TGI2Qy9tUmdQTG1KaDRnS3JXenlTbWdmNEZGbGZ3ajVjSlVGRGtLa3dPa1hQbmNZMVpKZ0tQRVZhZ0c2blFvSlNJZGtzeGQ4VlFPMW15K1M0a21TMkZ4QllFVk5ZdWx5UWtZNUZRL2lFTWI2Y1FqdU9za3hKaWxGZ0RNb3p3OEtZQkdWRTZSaGl4MWhJOXQyOWtYeWRLWWp5ekxsWWhJMnVZeXBHQ2dlTTFBWGZlR3lBMDg5T2txSnRNZW1mMGkxd0hNRjYrZjI0a0pNaEZoRVhRaWpnQ0hiRU81QnY4dUMvNUltSWxCZ09NQ21vQ2cyUDdUYWlCM0FFQUJWdFJtSk1GSmlTenFHSEFLYTd1QVVPUEJwcDBCbVNRNGdVTklSTmZZUDFGVk56Yy9ENEFkMEdlb28wclV1MENZUkFCVHlxV3UyazRVQlR0dFhoV0l3Uk5yQXN4RGpKM3JkMVg3Y0lLaFd1VEtTQVNlU0JtSDBpWXl0V05zQWFoaHJtamxTV1ZXQ0x6MnpKRU9zWTlGUTZyd3ZiZWJWOGlrRXVrc2xseUxOQ05zemFBNktZSjN5MkxBY3kydVJnMHlaaFdtdWlVeGhVRUFMVlpJbFFQY01UVkd6UlBzdkxvbXhDY0Z4QWFyV1JDd3RhMUNFbTZUUGdRdXhpL2phNnYrQUFlR3NRaXF3MThJdHBZUjBKZU9Dd1dBVWxMWXVyMktzTUkwbzRuSU5YTjVUU1kraHhaOVhQNUZwZGNDbGVnc0VQSFlHSmg0VWoyVWxZZy9OcmxHbk1zSm1NalZMaFpZRVhUbG1JREZWbVd4SlNqb3pBT3hCY3EyWVBsVVU0M041SFUvWWFGdi8vczlFVUd0a3NtYXJvQWRPOExCWkVFWnlJbGRrSlE5VEJyUlI4Y1VyYklYb01QTWszTVNnT3pab0ZGN0JJWEZ6RllHcU5ackJ4NnlMTmVnRXNpbi9xR3VJS3VqaHpQSFRteVJIQ0VCcmxtRWpSOGU5VGxrT2RubGF0WlBhdW53d2ZqbmR3OEkxb1dkQWI3b3lNazQ5QmVxWEhQR01sbEVtT1VSc0FNTkV3MzVxaEFud0J5T2NnOGtET1RtMnY0WXdVaGdLSElCS1VGcENEUEMvcXh0UDU2VUdSc1lMOEZDUThnTFRtSW5wOHhLWkF1ZE1DSThzT1hmQU9vQUxrOERnK1Z6amFXcDBwSG5BZVI2Q2xtNWFUWmk1WFRGOW0vejE3RUoxbU1jb2w1QXgxTUplQU93Y3E5NEIyUlBRZ0pRaGpVSHVnVnBCeU1kQVc0QUdXVU9IUHRqZ0k4Ly9LeVhtM0tBd3h3MlFOUVFocVFOOEZTWC9ub0ViR1c1V0E5MGE3TXJYY0xXMlZvU2lJeUNla3ZySCtUeEtvRXpnMWkxMFpXMkRwRzhnellkM2Q0STI4bWdYVWhjcVJkajBOaWlYZVFCbVErUzVvQnExU1FDUFBGdk1JRXpHNUZvclNSK0loRzVCd2lPeXRtRTdDQXJKODdPVGlJTllSbHhLOXozNW1ZOTdvV0lnZm9aa2FnTVM3TTRJQUpjQzRkbnBtQmNvdUw2WWRIdHRla3VDQnNxdWVBSk9RMnF5bnhESHNzekFEWVRIREJCd2huSHBVdkNJY05tUFlKODJFSWdoSXpTTnd2aDYyL3FGc3doYWVUa0NJMFlDeFNIV3lYK3I5RFRtS0JUajBiOEVBNHMrNHNDeCtoYzUrUmFYdkRJb2hoWTdxMTVIeGo0SnBLWVdhR3lVRVV5RHFzUmt4MTY1M0Z1TUlXeFhWRnpFR1pDSTJUSlhoZFFoekFXNENwdUFIeVpSUm9OQVlML1JnUDI1RVJnWGtvOEdmZWltK1VRMGZBTGNLU2pPQ0JRYkx0OW43Z2F2Q1RzZkRjbmpTMTlBWlZpSG5NRm9NZjh4UkJHcWc1R0JEZmcrbDZ3MDFKd203MHUxdGdXRldnWENSekp2MlJOUTJHSjlZbmlMbXc1MFJySmtpTXlRVnAwb0pLa1RRcXNzMG5Kb1ltM0JVRi9FQzk2TVlFU1VORzgwenh6UkRBakd0b09MdXFkVitFMkVsZDZvSDVLS3JUbGZEMTJZVmZYdmoxTTg4Qmtac25DbGp5eG1JeVVGSzN5dG9OTFE4cXNVK0Uxc0I0SUZnMnVoOCtSQkloRDhrZVJEaHZ3UzB1RkFUMlUrYXBpcThObzFnRFZnWHJwZVVETTJGSWMwQ2V4OUMwcCtQQkw2SVJUYTRNK2Qyckt5ZEV5bnhnalIwQ2JrRWFNQWRWeXd1SnJMeGRzNDdzeFh6aVVnbG1GbjRsd0JrN0FkSGphSnNQYlMydXdHQU54b0JlMGFHUUY3QkdISGtVb2ljeFR3ZlJWRUVCQUlvaXY0cEZpZkR0S3c0bjRTMEdFOXdKZFZnUmJEdG5zOEI0aWFUS1FITVhKWUlXNnZJc1RLN2hpdURDblFGSkpneTloN2NHUzBHNXhGdkp2cWFFaDNJbVNiZEltYXFVYU0xeDM0cmNRUGZpSTlDSHZVYUZqdzNtc2hLQWd4aEg1c0hPQURrMEVGUEFxUjVWaGRmWDB2SnhaZ2VNRWk2YnFTTWZFUzlkdzdFYjVDTWxSN2tkN0RQSVY3SUJHN3RFQ1pmd0dnMEZIQWNUZmdqQTdiQSt0NkpNSTR4dGsrbkVUbHkvSUkyRGwwMVpNcjBVNG5VRG5TajlQVUg5S2prUDlWd0VKaTVoZ0crT3Q2QVlLdmlCYkNETU10UW1kc3prdXlvdGQrRXZzWDVRTUltUDZpWDRXWktPOVFlbE8yQVo4VHU1T0d3NVVBeWgrUVpSamd1WGJpQk5kRWwrR3c2S0M0MUVrbTlpT1pBODFhOVIwWnk0TGloQWhXMVdGb0lrc1J2RSt5aTF3Vmt6TjJSakJ0K3d0Z1NTS2d1NkczR3lBZU83aENsSFZvaGJvWWFpYkpCTlJ3QTI1bzdjUmxlU3UxYzJoY1ZsWmdGZzFwMHhtT1Myblp3TmFnR0lXQlhRRWlXRlk2N2dzRExaVFRDOE5WVkJ5SDl1TFdGM3lId01mVlJkMTBmSWxEQkRCYWFTNWxCUS9lN216alEyd0xaQzE3OFoyei8rcnZzZnZvM2dIWmkzeWRSVUtMczJTUkNNak9GRXZDcER5TWs0VHdEemVuVG80SHQ1dEJWNU51Z2FUTjk4WjRtMjhZZnBDV0pzZjg4a2ZTakk2Z1QrSWtUQ1NJQXl1cmJzQnRnNWVETmwvR1Z0d1dxMURaVjFnZytkamhDend6eXBOb04wUWI1K2dMWFV2dlFWMmdYMlJWa3RlVXlFVnBtcVFudkJKOCtHaWNkKzRUd2J1blFUMndENUJXdHlSQThOVkJ2UFF5RGpJOUFhcjhhQVJXQXNqdHh2Q0VWNEVHL2pzUkZIUWtRQ0UrZWgwVi9CS2tsRFhCWFFNT0ZYVVZwZ0ZtU25Za1p2cW03OGJrU0FkRVNuSTZUSnhiaE5QbkxqcGcyc0JKY2JNbWc5TTA5aU56eTI3Y0JGSFhaVThnUjl4M1NyYXNFaUJsYnd4U1g0SlcwWGtDbmtlSW1JeGJMRkgrVEU1Q21aS1dWRkdzY2pqM0V1NEFnRElZTFIyQ1VPcEEvS0RLMkxZdVk5ZXlxdXF5MzQ0RjVMQjhPbFM3eVBjV0xJN2kxRWRnRzFmbFZyT0ttR2pPOHBRV212Mm5pSU54Z3g0N1RRUXd2elhQd3dINkpRaW9zNDNCKzQrRDdnQlBCSTZYTlJyb0NJR2ZLb3FSSWNoRWc0aVFCaC9ZSmxuUFRLRUJsU0NIWURLaHhra29UR2ozaE93V3lSU3dnejNtODVTQmtmQ0ZBZWhWczJwb21YcWt6OVFFQTErQUlLQmZ6TlhjZ2NqVGtoTXE4S0NuNGtraGhBUnBYckRQQzh5Qnk4eEFGTVpCYk9aSmNxZjRkd3c1aWhDdEVoSkMzeENRWlBSb3ZiNTJhQU92Zm43ZkJLMFZjQmpWRndQSjJuSXc1c1Y3UVhERUpBRUVFb3ZnaHk0bW1OTWJKUzRhcllTcnFxL25zbVM0WDVneDhMZW42QUg3dE1CV2Jnc2ZkVzlSUGtoc2tOa0x3NVl0Y0JKY3kyYXF3TlQwR3VIZFlEcFRWeG1zd2ZBRlFCK29reElRTHc0N1YyOEpNMXhER2VjRkYzR2VyT3ljV0FCT011aUdnRUVLcHF5Sm1RYXdOSzZVT0tHbUlqRXJhUGVFOUd2YmhDWFRsM01wSjFOSW5maW9oQTJ5MWtQSzRSK1lJTTQ1MVFUdVhmQ0hPVkVaSmtQSlBVV2RJTE1HUkJySHlyN0FWNkhVNjRyVHBaS213dlZITVNiSGV4ZWd1Ym5VT3ZTT25FeHpFUVl5dDY4WkxIQ1NBTGlXK0NCQVZNanNZWm5zNldqYnZJQVVNV2NHTXlxd2tIa1FnZUVpcXF2ZkNvd1BpUmVjSlRkZVViZ2dMaU9vUUl5UzNUVkYzUXM3QWl2ak9mczkvU29tMjRDMHNhSVllTG9tem5WVUhIRURrejVxeDYrZXg1QXhlcVEvaFpnWkZ3dE5raCtjZzZUR050VFNWZjhOeS9FaDJvZytoRFBiK3FKdlluUU12R2NyRUVRN1Y0THllOXRodTRicHhEd0EyZ1ZWQkJYcFZuTXYvakoxWHJCODJEWnlGSVhpL0JlQkx1QlRXSFlxL0llaVFVb3dMOHhkam5xSnlBZEF0RitRRlFza1pqU0NWRHJVaTNoSEt6RElGZ3NqekNvOHJ3a3ozanF0VEh1RjNEaVdPRThheFlIdXlvU0lKVVZIWDU3clZBUTYzOVVCMXNUT3ZvU0RqR0JrNys2NHZOdFU4MGdJMkhHdWhBeE5yVlpzRUowbVBNSUJHS0NHeHlwZmRnTFM3UHRVT2RxZ2hweDhaam9WUjNOMlRocks1Q1krT0JDTG8xdnkvMVJTRXlEY2tXK0RmakIrOUlqZmpBbFM5QnVsNEVuYnhpNVNHWVF4ZUc5N1crcUN5Vzl2YUVrcis5K0U4Ly9lMUhCYnZ1NjZkYlRLbytCRlJ4cmR0dlpCQjhwdklNTVlrNlJHYUdxKzJkRmpzcVRvVm5ySStzWFJmVjE0aUZHQkZ6cXQwZTZkTktsdGpXcm9CQzhFck5HUUJ6dURzMGIzRDAxZzVFT3BYcHFxck40TFFyVjNmaUNvS2lvM3VnUmtnVTBUb0FjOUlyUkJGWnNpelBnek1XOHhUVktyQTJrSTU4SHNhNkU1a1dyMHNKc0FocnFCb0N2MGtoSkhTV2FvbS9HMWw0U3ZQb1ZjVUpXWHVGSmdFWUdmQlV4TVpma2grZm04WXowb2g0TEFoY29rSkpQV21URVBDejEyNnFhbzNaZ3lhRVFCeXd6Q0lFbmZhMnQwcFI4QXlhUEwzU2tYUXljcnFYbXlLWWx5T3d3cGZvWTc1R09hSkFtREVZdmdGZEx5U3V3OTVGV0VGVnRneUt4YXpCTFBUOGxtYkU2U0hyUzBoZVZYU2dIWW1lc1FZcklhako1dkZZVnNiTC9ZNkVZWnA0eHVhS2VSRW1hQ1pCbnlsODhHYWtZekR1Yzg2SThQQ0FYQkdWYm5obUtpZzlxeHl6bkJtQVBCSGpxRmtUbXNCNVZzaUoxeVF5WmNaaE9TZ1RFSUFXeUhRVmZ4b3d3a3dEV0VBMHN1NG13SVhVVEhQQ21vQ3RxclJra3JnS0xESTVHV0FUeHN0UGhxT1hWWkJDN1Rpc1FZQitONmtFWlJ0TEtoUkVScU8vRm9NbGdRRThucFh3dy9zeE5pZ1E5cTRxeXV3bG1FWW1abm1SSHNsOU1rZENTK1VWeEwzMkV1NitNQ0wzYkNRSElRajFRYVg0aEE1dXBKTHhVRUhpRjRhdXpLMDI2Z3hGempLRGc3V2NqRE1uNDdSWmh0c2srdkYzQ1AyTDVnQ3A0WjJsblFrMEhpRmZNVERjcTRvcVhjWjBxdXdudlFJOVZOZ1hsa2xoeTZGY1pET0crdzZicHlEL3NMcEhtdy9ZeUNDcjI3WTIrSFpQK3lMWUkwTUh1Q2RpaEF0Z0V3blpDVjVXeEFoQktLT1hDcEZhWW9GaVgzS1FpdVEvT1lLZVpRV1FQT3BBV054ODVZdmIzdW81V05JVGcwRjZtWkl3aXFvMWhRZ0pTeG1OdDBKV0Z0RXZjaFRXa3JQeWkxd0QxSGU4ZW1ORVJuVnQyMTdwcTRrTVpoNFlFcm9maEJ5bDk2WktWZGNtTWhJSTVRMHFJNXo4d1dBNGVWNjBDN09aNE1vcnpVVEt6anVKeTUyYXNPWUU3UndpUnJURkZBTEVLSmxlVlV5T2pjV2ZSQ1pNU3c2U01RUGdERis3Y21IUFgzY2MvdnpaL2MwM1htSFNFNXcvU04ydmN1VXZyNnBIakNkeXFreWtsTENXYzJ6c1hjS0dJN25nUXBBRGEzRWFHTnFUZ2xKSUFwL0FzUU5OVW1QVHRyK3hGancrOHZnUUZSMVFnTkd5N0dZQ1FsUmd5MHdTcnArOGdlSUlERHlzb1RwMjJFOGNXMGZqc2M0TkVHNTRmVGZsV3JWbkpqZFZ0RHRkRDdKTEdhaUV2ZDZ5akpzQjdKaWhzSGJ2R2RPaktobWtzeUNUS05VK0hIU3Y0bVF3d0dtK1RYK3l0V0VqTmhtSm9vRngxZ3MxZkZHVDd1SG5rTmZKdzNLZElHVmNtRDB1aE1iY0lpaE1pQm5XYThtS1NxV055dU9CbVZmS0hCMkROc1pUdHpXSWtSclgxUDRLdUt4U0xmZU9yazN5R1dtTzMxUHhrZmpSTmh6RDV6NEJMd3BtSXp1MVZjZlBBSDJxRFFOSFFObFJ1d3hRYzNLSkhxZ0ZjZUdscXQyVTNobHdXREZCZkhoRzFJZ0s5eVNqdE93YkFnbU9oMk0yVUxza0xGUUppRi9GT2JsMm1WVFVJWXpieHVFeVRMTlhwcVBGVkpBUFN1NVc0T0JscXBLUkZkclNhZHBKQ1VjNGdpaTczU25BTU1DR3hzR081MUs4NGFvWEQ4Zno1M2FzN1BISVNGeFlWRkJTRldoRm5odEd4WkJtTWdXOGQraUpnVTBHQjRIYXVyRmZBQVBNcG5JZlFzMlBpWHNhVUFiVXJGS0FxY2hVYnhsM2VoVTNWQXcxZExzakVNdFpTRVVpSitNU3h6YjhPalBVQ0lQSmRHT3d5cCtLbFh4MmYzckQrNXpiVTBFL0VWejgrVlgzZVRtckN3RTFMTXdIU0dTM2VWazg4c2M4NC9NYkVkcjBkTDVvaWVBZWlKbmJTWnBUbVNCQWlIeXBRL1VtVm8ybGVjME9zb21nY3VTeFFTNGl2aWdVSFNxL0JrL1VSdUlaQThDaXdRR21iWkVJaFZvNW9seXV0MGxzRUJCWFNKVFd5VzBydDhRY1RmU3piYWZTMWxGVHlXaVZjRlJSQ1c3V1B1a2NRbEdZa3JRUDVFd0k2UGtCQUlqMTRHbUdoanhBU0VPdUN6RUt3ajVmalFyS2hRa2k2azBiaFR3L2RBNnBRSnZFZzk1VENUNlVOTStMV1VyeUhLai9oaFFuVFJ6QWpPSkNaR1FZYTZtS2ZER0pBQk42Zld0UEVmTzhrdTJDTGtFOU1PY2dRNUJwU1ZQa1dERUxyWTZ0elFPeTVMeVo1NUg5djQvV244L3UvNHJXbitqUWhWNkFJTjVlaUJEN3Y0bW1EZmVlRWJCdjJCWSthL0RhR3BvenY2NGVkSzUzMGhqd040WW1MTWdXYVlwcmtPL3J1SlZVK3V6cFpLK2V5Ym04ZHVteTloQ0taRG82bmlraDVUcjZ3cW5KRE5nWnVCVDFUWGpWN0dBWGRXQVl3dnVvMVlEQUF5bjR1WWxuRGIxTDNsUVZZVkdDL2FJYk54WUMyTFBYK1lBeFJLUGFSZTBsaExsS3Y5TURSaDZVMkVXOVVvQUF4dXlxazJHczBodTJaOVpTRnBOUjBVY3NPSk1Xc1dUQXdsak1RRk43QlJKK3FXbWt5NldpQWZqT1BnVDR4QVZtK0JvSXhvYmg0OUNUQ1B2dXdCY0dweDNxSExzdUxxL1oxUWdKbXRYTmNzRmFEWHZLYW5BWFZSWFUwem0xU2RCVTVzWFRJMG1Td3pLamgwL3RYYjA2blZERXR2TG9VTVpSRlloSHIxZWx2ZkRLNHZCdlVMK05qT3dabDhsRUE2cEx4bUhJNzl1MmV3VngrYkpqcjNxdkhXdkVJYWxMOGlCOUcxQnZ0Y2JwVlFkZm9BSitBZnI3Q2tEM3Z3N2xueU5ZWXZRM0lmeEx4ZTJIRVA0UjRJZ1RNTEloWG10UmkxNk8rR1A4ZUN5TDljWktWNVF2RDQ5VnE3YXJIRGlDMEJQQlhxVWNuRUJDQTdJQTBGbU1XQWh0bDNPaHMydGxQVnZIZktwWEVnRWF1am9zSnJvWTB1RTJQVmVWWm1CTkVBakVTMHVYWkFXWENoc3A1UnJVTXR6eDlBb2RtQ2hPUk9ZR2FJOHdWOXhWUUdCK0pEZXAvSml2akZocVRNQ0RmUnpIM1JJV016MkNIS2dZVFFXOGhUaE9GUVcwc0dUb0R6K3h5bDBOZmFCY1VrK2IvaTRRRG43VVprZGhOUkhTWXpnVkdEZnordmJhMFVmaFU2WEVEQmIrNzlwemozSFhyZFJWcVZjRGtMU2U0aDZpR3JFd3dJREFaTVBQVUhwN1pTcDhSWWpTWGdKbDhsTjdudHlsbzVIMHM0Qzh1cW53ZkpnV0ZhdHRxUDJOVkdwZ2RuNmRZdkF5d2tyOWt0cTNTeUpuaUFPUm9KMkRBOTFqUWZFVEpLUnlRclk5WTcxNFhsRDRZcDNkWkxWbXVuNnBsUTJsc3hUejFZTUc2clVpc0M3U1hwMTd2cXV2aTFFQWFVbm1VQW9HeGM2VHMvTFplUXpLM2xQY2J6cTNFQ2ZtRk8vZUZrL3pRd3I4S2NMZFAwMkJQMldBKzY2NUp6RkFrQmIxZEJncUdYYUN0dmREOUxZd0hOQWlHTWVIb3ViVlg2RGQvUXUyQTNTWVpnVDB4dWdGbWUwQTZrMFlMMnJuSGlTREg4cFNHR3NuL1ZXZG1XV25NaWdzZ0RndlNkMkNXNW9XVFF4b0V2cEZFQmRHWk9INTMyUUVNb0RmVkhvbEpxd2tOVlduMVlkRHprRXBFdi8xcXB6ZUVZSmphZGRoRXBuVnQ2Rk95MnEzUklYY0FSbW45bzZJMnlFc1o5eXY1OGdWYlEva0dsbHBobll6U1pLbHU1Y2hHZ3IzSzRYbkFSejVCbUc2TXRrMmNOWXdpWFpReUFpOE9DRGd1QXBFUHRST2NORE9mVExSUk9CYytMcklEWGlDSkgwYWRITGd6akNaYXJDL2c4cjFYQmdzWmd4alBtNW45ZmlOT3pMZUQ4SERpNjlmUzVWRXlHRTh6NHAxcVFuQjM5WHdlUlBMSVFIUDhoWGIwSjE2TlJ3alYvRnRta3BwaUgxU0tsMzFjUUh2eHljbXpBaDRGV2JnNG55bnlnN0UrVkJoYkRRUHdpK0diOEFJcGtmb3JqSUQ2UTFXb2F5RERoUGNYdFJBaHNJMjZXdnRwNWRaQTA0VkZjZWpxWDlwa0NwcTA1N05aZGJ1OWxmeHZyM0pES3NYaUp3cGFnR00yaVZJMmtKSzVvV1FoNGYwOEE1b0JhV3BDV1BDNkFDbnF3aFRWby9waG1NQndTVWRwZE0xVVR2Y1hmWDZCb1l2aENTZUFvU2VjM3oyM0h0Vm5YUjF0Q3ByNG5EMG1EVWNFRWE3NHRYQjFqVDd0NDM0Zi96Wi9jMDMvbkVIUVBjUlZSRVdUS3VlOENITGtyU0IxWkJCVmFVaWdLMEFLT1I0K29XaGdEcmQ4TEZKN0V4ZnFBTlpvMi9xY0FuQ3lxdWlGcjJha2hIS1JITHlhaWxSNDJwR2plRmFNSGRvS0J3ZFlsNGRIT0ZEN1RndEorOWNCK0hpdFZtTzk4UjJ0L3FxVk1nUE5Xek85Yng4WGdnUndjTHhPRGJBQ3A5L2tDQTRjaUk1NGlDemYvNFllSnJxQXQ3STRsN1UxeFl5RDZ2K1gzZ0xndEttcVRRTGtTbzJKWkVKOFM2Nnprd1o1bGlubjFqOHJrTTROWWxRaDdZbFZpbmkrNXEzNnAyS2Z2U2FRZmJocUtyWXlKNWR5MmNYSWRma3VFbUJVUHZDZU12S1hXM1lzQkxZZnVZOUlIYU9PdXlnQWpYTFFabHhuMC9IRjNDR2NpZC84VHpadTJ6dzVGb3lKK3JnWGMxNFoxUTV3UjZwNkZqS1ZJc2hkcDgxU0RMQ1pLR0Z2WGJ6UXkxeitFdWZuSHlrUi9oOStyOVJXbG1OOGlnT2kxUFpScVozYmF0VUJjNGVMS2k2TDBFMWtrQWRPOUFaQ0J1M2s5S056V3Q3cTZrM2w4eGdtdFdsSGRRdWh1TzRBV1M4SW1Jc2pxbStEa0hrckZ1Z1RCZWEwemVienZmWExYSzBjdW9OcS85V1luei83UDV2aWZFOUw5eTN4QWo0Uk9RL0RpbURtQWlURVY0RElsNjN2K1JJbURINVpkT1JNZVNacm5lZTE5TS9uSURBTnI0RGFRTDlxMXVNREF0TDRxbCtkaGplUDhSckJuSTJYQ0N6MWlRTHB0cE1rQ0RFZm5OZUxlc0l5c0p0Tzl4MmNZeFJPOUhNY28zcXRjY3E0MzRhY1lQZ1ltSURaQlFHTE1GZFdTaHR2K0NFQVRaN0hlbllHcEJkNTE5QWFSUjhLd2pEWVF1RkFmYm1nbEdHNzVPMHEwNDhxTzl5cVhZR0d1c3d5WFJYeDBSSXU2QkdXZmpiQXFGOGNNUVdrQVRxNDlldWRvWkJzVFBjUGh2dU5KUFVHVis3dFdIcHB6YitIZTdFOTVuZ09TUURvMndyOTc1MEtJWG9RZGRsRlVSaWJ3ZmszV0JwcXFxV29Va3dNQk5ZelVHbGlOSWN6d0JyQU11Z016bE50QUxTNnBEMUt1WWExTkpLVUhKNWJOWk40RDVLTnV5dFhzUWJNcE9nMHgrWW1taWVhYjd2dUNUMnBUSXo0R01KbUczRTR0WDJQTXQ1WHU4ekNTaU5oc3IwT2dUME5udkZFVWdBNXNoVXBCM3Ewb3dhNTZ2aXF2VmxGNTNDUEZzTlNpVE0rbkRIVUNFclZKUm5Kd3F6Q3VyKzFWMmNIZXRvZy8xNkNab2ttdHFyMGl6L3FJenovYlA3VFgzbmQ5V2RIMTk3cFIzTUpkYXU3cFhSYVlBSnk3K0JYaWtWTW1mc2pBaTFRZndVc21ab245bE9RSEdvS0ZpMHAzTFFZSFY0U2UzUzFCYXJuWGZzdEF2cXdrZi9xbHFwWGkva0lkWmF4dVlNc1NiWEJ4NW0wZUdLaVVBQ0pra1VRRnoxUTNCT0xaT3EvamdTcFduL0hOcVdKQXZpQUxSVWxaa1lhbVFGL2RXb1JGamhQR1RSMUxhaFJsa05IVFdGWmpqekhBY1RsWTVHclZqcFJwQ0NtK1I0bTdlOTB3N1ZKeHpHOTlFa1pROXNGWS9DcE5TbVBXbFpCTGRoa0tyeG9QMzk4QWRpcW5vV0s3eVpZUEhhbndzSlZPSEhkQmYxSXZZZ1p3dW5RYTJEL0sxSFVKdlUyNXZHYXlsL2JieERYYmg3YVljUXlGaVlrS0YyT2dGV3JYSmpUQ05jcTYzUnF0YW5UdlFXWnd3OG9xRG02K0RSOWdTdTRTSjhIbVRob2RZTlFXWW9QZGpHQ1pZTENJSkFvYWt5VFNaS20zcW5iVTBVZG1aQTZ0QU42ajVnK1JFUUdSTkhITVUrSUNwbVQ3M3RpR3F6dHFPMk45b3BVWEtQVUlhZWRYNHRxV1c5ZFo5ZjR4M3FLZXJmQ1p5UTcwRmdDQzNSbUZ4Q3g0VlcvNXlwMWxGd1NVaHNJL2JXU1NZam50WHBpK3lkYitXbTltNlV6RldWVlJ3TE1oblFqeGsvZ0hKWEd5eXBPdS9DSEVKSWt1L2RhWThMVFlHczFvYks3QzNxekp0d2oxemd2ZTBsSzU0bmdRVTZtWWNXNnRsWG5Td2RQSWZPa0xGc0h1NC9Gek9vR3JKT3dPbUlVMUVMNjZoSzQ2UGpCZHRRUUhVUDFNM1N4dUxybitTQm5vRUlrbFRBaXNzcUhrMDFQWU1XMHVPTUNRT3BwblVnbm9qQllDTm1vVDNlcGZYc0M3QmNHNVZtekI3NENBQ0dGcHdLcGR5Zmh3cmEybEhKQzhHRTZsVmp2NDVZUnBEMW5SbHAwa293M0lycVFkd3FNUFNrWXpYdm9JNUxCRHJXZzJBR2pEVFFGZFdzaVl3anUzbHN4V3NpS0ZGK2hiUWhqeit0bkJlVjNsRVEyN1RwaFJWZHFhdEJ3VlRvZ2oySzlpQjErby9rMDZteXJoYWNQeHc2ZUovZHJ5L005THVkMi9FM3I3T2VxSnVHbDNPZWh3R3NWSVpZdGhJY3FiTmhwWXlrVXdGRVhLNXFHQXlxZE1FM3BpTmpxRkI3dS9OcU1EYlpCdnhhOE5ORDE3dkwvY2s2TWpqMU9FaUJialZvUytzT25ZOVVwSVdHNkQxRmlLQitWQWxFd3BwL2RLZDhKV1lqL09FSkxrbFRuZW5EMGxpb1IzWkp2VzFCRnErVC93RktVNnBsakJqeUJCdEU3c3Z2dWxXSWEvUnBtOEFOWVVGV3ZnWGRFcGtaOEVDOElna200cFVNVzhHdnJqT01ZYXNyQ0FEUTBTQUFEMzJFYmh6S3BsNVFRS0FuajAwRUdHTXg5VnV5Nk9yMXdIbGxIV3U5d042Vkt1OWxJS1hxYStVTndKUmpQZFNUcno2bnJhMFMxVUVLUU9WNVo1L29SQkRRZ3A3Z3lOb2lPV1dscG9TMnBXaGJKWXNPUWp1OGJxaGRsbk9oWDh0V1I3anN2Rnc3czZ6ejZJUzJDRncxQWVndnFXYVRYNmRSd0JLaTBPZnJpWWhadmZsSmhqQXh2MXEyT3NMTVY4M21yOU9DcEFRbWN0b2RKVVRlYlIxbkpLbTZqblF3ejZCV3l1YlVkcmluQXFkbWdIcngrSk1sQlpzZ1YvV0E0THEzZlB4bEZDU2Nlb0o3ZjNRRVovS2Rxak9YSXpwQ1U2azZuZ3ByYWpTS2tuMldkZm9MMnBpdnNxNU5nMlpiQWd6M1BKcGtxK3FGRWFRbDZkVVBTVTR2OVVsai9PUFY0UXhGL2xUZm9qYjgwSHVHeG9NVFpvU3BKMitwWUhsOGpXRkxUV2JjOGJVRU9mSmJKMTZBRVNPSmwxcEljQVozRTBYYTF6cWZRajVDT3dlVUtnWXBNOWNYczR4ZXJWRERWZUVlZ25MSTZsZHEwakdmNUYrUE9nQ0t3UENBVFh6dDE4aEtLT2tkU24wSFVPTWVDUmZlV05Ld0paRkx4ZmZQdEhHSVVlNzBDME9ISGdLRnJPT0hPb1h4cmltMkFMTlJPR3IzVVJkTWZtMzdPZ0JVTTRiUGZXN1pzRHM2akR0MUlyUEtQbzFJTW5ENXc0cnNxZTBySXAyNWI2bzJ2T08vK00ycmZqRUdpdlNBKzYrT2hiR3NDeXR3R2ZSZ0RVR0pGZ09HTFJsOEFIZXkzTWp0dzgrbEYxczZqd2xwNDRhSWFsWFEzSzA2SnNQVWtpSjg1SnVIUkFPUGp4Nm9pek1CSHlHMk9vUzlQQXlXc0d2VnA4NG5JYWdRTmI0NmozTWsrSEJyeUUxQ2ZhcHd5OUJFdDR4WVBRVjRrSUpPUHlwUUZCMFAxVzdUaHZrQlpsUjhFbGNXTG9SOWtsYkRxZjBCbG45Q1kzN2lnN3RDWGJDWXlKYXRWbGxoRTZGQko0ZVpFeDN6RzJBR3l6KzBWMkllb0YwQmtVMHVCektBbjJMd09wYW1rM2g0U3ZEbzZLd25ZWTJoVklPS2dFMEt0S21BWFZ0VzZUY0RzV1NjamtzT25ocEpvVUtqam9TK3ZnZlVTSEpFQWg1Nlh2Vm5EMEMzNlZpZ05JeUtGc0Fxcm5vZG5SYnM2dFhJMWxxR0owYVh6SHRPU3NlWFJ5bHV2aE1ES2VvYWdWVTY3OGpNdWtYblVMWVJFc2dpdUpqNXlmbWRrOUZPVEkwNHlxc3lzN3F4dFJQc0pKU2hBclZTVjBtRmhlUFdyNjI1NnQ3UHFobnZaRStiQS93MXFidEtuU2lpSnBBY3lPa2dJdUh0VkRjSlJ5YzVNc0dUbVlaeUZFOXhERFd1RVFvb3RLUTZkYml2WmZNcGJWVEc4VHJZcitvMWRKeW1XK0NsS3ZQQUhnWTBKamtxNExFdWRVMlRyb3I1T0tzaVZoeUtlckRQZm5aV1I0eUJST0tDdDhIUzFGUSs5UXNJTWhuOGRqOVZxaVBSWjFDSHRhb1hxQVVKVDlQdnFDRFJnSE5XaTRUU3IySkk2cUVFYWhrZFdWUlAyYS95QSs5Y0RXUU83ZkhMdnBPNEJFL1NNYnNkbWVXVnRCc2NNSlVIWWEwVEkvNkMyVk9IWC9Ec3dPVzRiNGNCTzRvOE5rblFxOU5HTnBOYTNsL2ZLTm1nTTJNQTF3RjhWVkt4TEFSdEZhYkZlQ1BCQ2srUEwwbUszdTVmK1g2dDE0TkNXSHkwQjZScXFQcnhkVjkxM00ybnhuWHZ0OEh5NiszVjRNWUFqclF5bksvRGpKTHdFUnRRNitmNHE5cml3TkpmeTRkcFpLVVpNWVgxdFQ3R1VjeThaVldoYTBvSkJwQWtMY0dpdWc2NURHOEkrdDBOREV2S2YrbjNWRFMxMzZvU0VnUk5iWVhQK1Q0Y0hjZ1QxZEdpWHNKUWxCZkkzWGNtMGRUT05QeCtIY1U2VG4zZWhvcllweDZOaVNUZjJ1a0RNSnZPVm1vZlVJQ3ZYN1lCWlZicFZjRU9VZTYxSjQ0Q3VNeXhtMTd0T1BoczlCYjZCQXA4OUlPS2FXckMwV1pQbDNnRjE4QTRSTmRhOEJLbzYwZFBIUytONkFFbHN0TzJWd096V2FEWHVRdHZYMi9JMFVTR0tOUGlpam9CSDFHRW9LRWVHUThFOFJIeGFxV2FSQmpMa1Z3UlBML3FCYTVOT3h3NGYvMCtEWlYyZWxFbEFSYUVFb1BNVTlwUGhPRmR1Vi9mWDdVQTJUMEJXM2o5SmloU0xFMUNGOXV1T3ErbDN4UVE5QnQrNXRhdnBqQVUzMmc2RTN1Zkw3MEhVYmtNUzBWMHhLNytvL2RUcjU2b0k5ZjhHeFJsVGhFK1RTNVNwZThoUVlwcTRPblJ2VjNTUUQwL3JFWlFYd3h4YWc3dW5Jb1FKQ3BmcUtYNjg3c2ZqbjZ6Q1c5YThBc29kWmR5R3JRaDlYRWRXK2NLY2xUYnNrNEdBYTZPV2ZTTVl1aFg2YWh6WDRwMWZCMGdJTWFBQ0l1U25UbXJaQnJIZk16NzJWZmxXZFJ2dEl3bmRYM2ppZkRxYW1OcUtNQUlUT3R3SWlLVm1OK1cvWTZDZkdndmFnOTZwUFNNNEg2U0Z5eUR3TlUwNS9DQ0FkRFdXWkNzTGR3dWNhSGZ6aFdDVHFxb2s2UWhNVmo4aGJoQytwYWpYeUtoQmhCMVdPZ2IyTGdWbkZ3cTRrNlRxczR0cG5hdFhaWitwWWM2NS9WZHNhNU9DNkpsbU9oY2xVZ3JhYWNDa0dvK2VUMmpBeEszMnM5WDBMbU5kRmpOZ1JObnBwcnlROGR3MVN5Y1ZDTXNQREpKa0xYRnFaTnhPakx6MTYvTWNnaUU5ZmVWSVJ3ajV0VDlOOUN1dGhqZzZ0MTRBQUFCZzJsRFExQkpRME1nY0hKdlptbHNaUUFBZUp4OWtUMUl3MEFjeFY5VHBhSVZCVHVJT0dTb1RoWkVSUnkxQ2tXb0VHcUZWaDFNTHYyQ0pnMUppb3VqNEZwdzhHT3g2dURpckt1RHF5QUlmb0E0T1RvcHVraUovMHNLTFdJOE9PN0h1M3VQdTNlQVVDOHp6ZW9ZQnpUZE5sT0p1SmpKcm9xaFY0UWdvQjg5Q01qTU11WWtLUW5mOFhXUEFGL3ZZanpMLzl5Zm8xZk5XUXdJaU1TenpEQnQ0ZzNpNlUzYjRMeFBIR0ZGV1NVK0p4NHo2WUxFajF4WFBIN2pYSEJaNEprUk01MmFKNDRRaTRVMlZ0cVlGVTJOZUlvNHFtbzY1UXNaajFYT1c1eTFjcFUxNzhsZkdNN3BLOHRjcHptTUJCYXhCQWtpRkZSUlFoazJZclRxcEZoSTBYN2N4ei9rK2lWeUtlUXFnWkZqQVJWb2tGMC8rQi84N3RiS1QwNTRTZUU0MFBuaU9COGpRR2dYYU5RYzUvdlljUm9uUVBBWnVOSmIva29kbVBra3ZkYlNva2RBM3pad2NkM1NsRDNnY2djWWZESmtVM2FsSUUwaG53ZmV6K2lic3NEQUxkQzk1dlhXM01mcEE1Q21ycEkzd01FaE1GcWc3SFdmZDNlMTkvYnZtV1ovUDhhN2NtTHcwWHh2QUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDVBY0NFQjhmQlZ4SHRBQUFJQUJKUkVGVWVOcnNuWGw4Vk9XOS85L1BtUzA3a0lXd2hNVUVBUkVFcEFXMEltb1JwWXExaUZXdy9rVEZ1clNpWGNDNjBOcUNYYkQxdXR3cVdtcXhyZEQySXJkWHNiVEk5WXBMQ3lpaVV0a0RFUklnZXpLVFdjK2M4L3orbUhNbUo1TUppeUlrOEx4ZnIvTUtaQ1l6a3pOblB2bnVYL0g5cjEzQW1xMVZSSDE5R1RieFp1WmQrQUczejF0RjBSMnJXRHR2R0ZETGlobmptTGRoSElzK1dNNzBQS0Q4R2E2NDlGSEtMMTNNOW1jbjA0cWZGYlBHTXUvTjBTellzSndiaXV6dlJ5bGZzWUNIRnIvQzVqMEJmSVZuTWY3bWU3aW1iZ0YzL0M3S3pHVWJXVGllTGtrNEhPYkFnUVBVMU5SUVYxZEhZMk1qVFUxTkJBSUJXbHBhQ0FhRGhNTmh3dUV3MFdpVWFEUktMQllqRm91aDZ6cTZyaE9QeDVPSFlSakpyNFpoWUpxbTg5L0NORTJjaDVUUy9pcWtsTmdISUZLL0FrZ3BoZlhTazE5VHZpZDI3ZHBWWEZCUTBOdm44eFc3WEs1aVRkT0tORTByRUVMa0F6MkFQQ0ZFSHBBTlpBR1pnTmM2WElCbVBaNEpHRURNT3NKQUNBaEtLZjJBWDByWkpLVnNrRkxXRzRaUnArdDZkU1FTcVRsNDhPREJrU05IMWxpUEl4MUh1LzhMSVZKdnM3OEhJSVVRN2I0NkRxbHBHa0lJTkUxTFBhVEw1Y0xsY3FGcEd2YS8zVzUzOHF0OWVEd2UzRzQzaG1IUXZYdDNmRDRmUHArUHpNeE1Nak16eWM3T0ppY25oOXpjWExwMzcwNlBIajBvTEN5a1o4K2U5T25UaDh6TXpHTzQ2dnlzbXp1Sm16ZFBaZFhhK1F4RGtZcDkwYmVlc2hXekdEdnZUVVl2Mk1EeVZtWDZISWl5YnM1WWJsNVZ4QjJyMWpLdmk3MDdzVmlNQXdjT2NPalFJZXJxNm1ob2FLQ3BxUW0vMzU4VXRGQW9SQ1FTSVJLSkhGSFFuR0xtUEV6VEZMYkFwWWhaR3lHenhja3BVcW1DNWZ4L1RVM040SnljbkVGdXQ3dE0wN1JTSWNSQUljUUFZQUNRMFVsT2N3VFlKNlg4eERUTkNzTXc5c1ppc1QyTmpZM2xBd1lNMkowaWNQSXdndGRPQUczaEUwSzBFVHBOMDJTcXlGbkNsaFE1NStFVU41ZkxoV0VZNU9YbDRmVjY4WHE5K0h3K01qSXl5TWpJSUNzckt5bHdlWGw1ZE8vZW5mejhmQW9MQytuVnF4ZDkrdlRCNi9VZVZ0QzJybmlSbDk1Y3hZcFZsUXhiOENyTGJ5aFJLcFlHZHkzUWFsaHRaZkh2MWhQakxDNGNYM1RjQkd6ck0zTlpWaktQK1ZOTDhObmZMVi9CNG5VQjZEdVZTN3VZcU8zZnY1OURodzVSVzF0TGZYMDlqWTJOK1AxK0FvRkFVdERDNGZCaEJVM1g5YVIxbGlwcTZjVE10c3BzWWJQL0tLVVJzamIvMzdWclY4OCtmZnFNOEhnOEkxd3UxOWxDaUxPQnN5RDVWblJtTW9EQlFvakJ0cEI0dlY1eWNuSXdUVE1LYkROTmMyczhIdDhhRG9jLzNybHo1OGZqeG8ycnN5eEZLUk1uU3RyL2Q0cWNsRklLSWV6N0pBWE9NSXlrOVdaYmM5WWhPaEk1cDdDWnBvbW1hWGc4SGp3ZUQxNnZsM0E0ak0vbkl4UUtFUXdHYVdscElSQUk0UGY3YVdwcW9yR3hrWWFHQm1wcmErblZxeGY5K3ZYcitMTzA2Z2wrdDc2SWNUYy95Wk5LMURxMjJJWmNjRDJUSnc2amlGbzJyMXZEQjFWUWV2TlNWczRmVDk1eGVZcEtWc3lheHJ3My9mUWROWkdKbzB2QXY1WDFyMnhnVDZ3dlZ5NWV5Wk9UaTdyRXlhcXVybTduZGpZM055ZmRUcWVnUlNLUmRvSjJCQ3ROMkc1bmlxQ0pEcXl5ZGhiWnRkZGU2MXF5Wk1rWE16SXl2dUJ5dWNZSUljNEZCcDltMS9RdTB6VGYxM1Y5czkvdmYvL3JYLy82Kyt2V3JUTWQ0cFlVT1NHRW1jNmlTMmZOYVpvbTAxaHh1Rnl1TmlJbnBTUXJLeXZwbmpvRnp1djFKcTIzek14TXNyS3lrdTVwdDI3ZDJybW54Y1hGU3FFK3JiQjkvNmF2c0c3OU51cklwYkJzTkZOdm5zYzkwNGNkSjFHenFXWDlpMCt3ZU5rNk5wZFhFYUNRMHZHVHVmbWVlN2hoZE9jWHRlYm1acXFxcXBKV1dqcTNNMTBjVGRkMVlyRlkwa0pMRTBjVHpqaGFHc3RNcEltWDJWYVorTjczdnVkNitPR0hML0Q1Zk9kcG1uYStFT0k4SUVkZDFtMW9rVkt1ajhmajZ3T0J3TWE3N3Jwci9WLys4cGQ0R3FFem5hNnJRK1NjY1RtWmFzbWx4TitrbEpLTWpJeDJzVGV2MTVzVXVJN2liMDczdEtpb2lGNjlldEczYjErNmRldW0zc1hQR21OVHRLTHJPdnYzNzI5anBUVTFOU1d0dEtPSm82VkxEdGlDbG1LZEpkMU1oMFdHVThpa2xGcERROE93bkp5Y2kxd3UxNFZDaUltQXV1cVA4ZStVYVpwdjZicitkblYxOWRzREJ3N2Nib2xiTzZ2T2FkSFoxcHZ6MzNhQ3dTbHlVa3A4UHA5TWwxeEl0ZDdTeGQ5czY2MTc5KzV0ckxkKy9mcmg4WGpVdTZlRTdiTng2TkFoS2lzcjJ5VUhuRzZuTFdxMmxXWmJhRWNyYUlaaEpOMU0welE3RkxOUUtIU3gxK3VkcEduYUpHQ0VlbmVPSy8rT3grT3YrLzMrTndvTEM5OG1rY1UxVThXdUk1R3prdzIydXdyZzlYcVRGbHhIQW1kYmNMYjFab3ViMHoxTlRTNlVsSlRRcTFjdjlZNHBZVHQyZ3NFZysvYnQ0OENCQTFSWFY2ZE5EaHlwZkNQRjdSUXBpUUduZFNaU0xMU2ttSVhENFNsZXIzZUtFR0lLMEZlOU15ZUVLc013L2hFSUJOYm01K2V2cGJWY0phM0lPV055dHFzSzRIYTdwYk04eEJhNUkxbHZxZTVwYm00dWVYbDU5T2pSZzRLQ0FvcUxpK25UcHcvOSsvY25PenRidlZ0SzJJNk8vZnYzSjYwMFp5d3RYWElnTlphV3hrbzdrcUNKMUpoWk1CaTh4T2Z6WFNXRXVGS0pXYWNRdWRWTlRVMnJpNHFLYkV1dWpjaWxXbkgydngzdWFUdUJjN3ZkSFFxYzAzcExUUzZreHQ1S1Nrb09rejFWS0dFREFvRUFuM3p5Q1ZWVlZXMnN0T2JtNWpZMWFVZFpaQ3RzMTlOMk53OWpuV21OalkzRGMzSnl2cVpwMnRXZ2FpMDdLZHRpc2RnckJ3NGMrRnRwYWVsV2g4QVpEcEZ6eHViYVdIRjI5dFFXT1V2WVpEcjNOTlY2YzlhKzJabFQyM3JyMjdjdkF3WU1JRGMzVjcxRFN0amFXMmwyZ2lCZHhyT2pFZzViMU5JSm1yTkx3Q2xvdHBpdFdyVXFZOUtrU2RlNjNlN3BRb2pMMUdYWWRUQk5jMDBvRkhyNXFhZWVldVhCQng4TUEvR09SQzZkd0RscjROSUpuQzF1SFpXR3BHWk83Y1NDc3Q2VXNBRVFDb1hZdTNkdnV3U0JiYVcxdExRa1kybEg2Qnc0bktBSnA5dloxTlEwSWpzNyt6cE4wNjREMUpYWXhmOG02cnIrMHY3OSsvODZhTkNnYlE1WDFVaDFWUjBDSjQ4a2NCMWxUdTNZVzA1T1R0SjZTMDBzbkhIR0dXUmxaYWwzNW5RVnRvTUhEeVpkejVxYW1qWUpnaVBWcFRsRUxhMmdXUVcxYmR6TlVDZzB4ZXYxemhCQ1hLc3V1VlBTaWx2WjFOVDBVbUZoNGV0U3lyZ1F3aWx3aHRPQ3M0WE9HWWRMRmJpT1ltL3A2dDVzMTdSbno1NUoxN1IzNzk2bi9YdmlQcDErV2NNd0tDOHZaOSsrZlJ3OGVERFpFdFhjM0l6Zjd5Y1lEQ1pGTFJxTnB1MGVzQVhORVVkTEsyZzMzbmlqYThtU0pUZTYzZTRiZ1F2VXgvL1VSZE8wYWZuNStkTmlzZGc3TzNmdS9QTXR0OXp5MHNhTkcrT1dtMnBJS2R0bFZnM0RrS1pwU2szVDdGaXNkSllFeGVOeDZTd1hzajBFWnlqRS9xTnIveEVPaFVMSmRxMnlzakpjTHBjU3RsT2RwcVltOXV6WjB5YnI2V3lKT2xLeGJScTNVemk2QkpLQ3RtblRwdHdSSTBiTWNybGNONkZxems0djkwZUlMMlZuWjMvcFgvLzYxemNqa2NqeVpjdVcvZVcyMjI3elc5WmJ2Q09CazFKS1I2RzJVK0JrYWd1ZXM5ZjRTQUpYV2xwSzkrN2RsU3Q2cWxKWldVbEZSUVdWbFpWcGE5UFNGZHNleGtwTEcwUGJ0bTFiajdLeXNsdGNMdGN0d0NEMU1ULzlNQXlEeXNwS0Jnd1lZSCtyUEJLSi9PR1ZWMTc1ODNYWFhkZG9XM0QyWWNYZ3pIUXhPR2ZkbTlNOVRTMExzWXQ2MDlXOGxaU1VNSERnUUVwS1NwU3duVXBJS2RtNWN5ZWZmUEpKc3VEMmNGblAxQTZDRHR4T084dXBTU25GaHg5K21IZldXV2ZOZHJsY3M0RXk5ZkZXd3VZUU5wczk0WEQ0OTMvNjA1K1czM3JycmMxSEVEalQwWFNmMnJrZzAzVXNkSlExdFF0NkJ3d1l3T0RCZzdHNkpaU3dkV1VDZ1FDN2QrOU94dE5xYW1xU1dVOW53VzBIcnFkSWJZVktzZEswK2ZQbnUrYlBuLzlObDh2MVRWVDkyUWw4WXc5QjlRNW9xSUJ3VStJQXlPeWVPUElIUXZFUXlPM1ZtWVROL2tPN0xSUUt2ZkQxcjM5OTJlclZxMk9Xd05raVp6b0V6a3kxM3B3QzUvRjRaRWY5cHM1cElmbjUrZlRzMlpQZXZYdlR2MzkvQmcwYWROclV2SjJTd2xaZFhVMTVlVG43OSsvbjRNR0Q3VW81VXVOcHpvQnNPcmZUVGd6WVdjNUlKSEs5eCtPNUV4aW5sT1lFMFZBQnU5Y2x2aDROK1FOaDBNVEUxMDRpYkE2QjIrajMrNWQyNzk3OUZTR0VuaUp3N1Z4VVJ3ZURUTFhlVW12ZVVndDY3WktRM3IxNzA2OWZQOHJLeWs2TGNVaW5YUEtnb3FLaVRaTEFucHZXVVR6TmFhWFpnVm1uMitsSURHaWhVT2dTcjlkN2w5WHlwRGhSYlBrclZIMTQ3RUs0c1FMNmpvSVJYKzFjMW9RUVk3dDE2emJXTUl3cmEycHFsdmJ1M2Z1ZlRvRkxUVExZQ1FacldJSk1tZDluLy8rb2tneVJTSVJ3T016QWdRT1ZzSFdWZU5xT0hUdllzMmRQc2pYS0hqUFVVVHl0QTllem5kdlowTkF3T0M4djcxdENpRHVVeXB4QTRoSFk4RUxDL2Z5MFZIMlFjRmZQdlE3Y0daM3ExOU0wN1N1OWV2WDZTaXdXVy9MeHh4Ly9mdlRvMGVVT2diUExSQXpBTkUzVHRQZGIyTmxUdTJYUEtXNnBJbWNud0ZMRkxSS0pNR1RJa0ZNMjduWktDRnM0SEdiSGpoMVVWRlMwNmZlMDY5TTZpcWVsV21tV3FDWGR6bG16WnJtZWUrNjV1MTB1MXh4QXpXRSswV3hZQ29IcTQrUEd2djluR0h0VHAvdzFQUjdQN0ZHalJrMEpCb1BQVHBndzRmZWJOMitPQWJwbHZXbTJpeXFsTk8xeDVsWUNTenFISzZRS1hMcFNFV2ZZeFJhM1kxc2tvNFR0aE5EWTJNak9uVHVwcUtoSURvUjBUdVZJVjU5bS9SVnppcHJUU3RPa2xDSVVDazMyK1h6M0FsOVdDbk9TM00vaklXcE9jZHZ5UDUzT0xYWFFOeXNyNnlmdnZ2dnV4VFUxTlV0NjkrNzlsaEFpNW5CUEJhMDlxVExGZ25NS25FeTNGQ2lkZTJwWEFRd2VQSmdlUFhxY1lzTG1YOEdNVWZQWWtIc052L3Z3VVNaMm9SZGZYVjNkcHB6RGJtSlBWM1RyS09VUXRubWV4a3JUS2lzcmV4VVhGOStyYWRwM2xMcWNKQm9xamoybWRyUnVhZCtSSnpTaDhDbmMwNHQ3OWVwMWNUUWEvZlhycjcvK3V5bFRwaHl5M0ZQTktYQ0pYVFRDN01oNmM3aXFISTJiT25qdzRGTXFxZEJsTGJiOSsvZXphOWN1UHZua2syUTVoN09USUYyU0lOVktNd3pEYWFWcGtVaGt1c2ZqK1E0d1JxbkxTV1RYRzYzLzFnL3gwSS8vd2JJR0dEZmo2eXlma0FrWVZINjRpWWRlM2N2NnlnaGtaak42NUFqbVRSL0NhS3NIUExwL053dFdiT0dWdlg0Q1pGQTZ1RDkzVEIvTDlOM3JZT3pBVG44S3ZGN3Z0eTY3N0xMejYrdnJueTBvS0ZndGhIQlo3cW51aUwwSlovd3RqY0IxR0h0THRlQnNnZXZ5VTBMODVheDdaUm51U2FQbXNRY2c4QkkzbDY1ajVrc2JXVmkybFJjWFBNVGlOVnVwaXZyb08yd2lOODlmeUMyajh6ckZheTh2TDJmMzd0MUpVYlBMT1ZLYjJEc1NOV2ZHVTBxcFZWZFg5eXNvS1BpdUVPSXVwU29ubWNBaGFQd2srZCt0cjI5a1JVUEt0ZnZ4djVqeGJEbFZlQ2dkV0l5dm9aWU42OWN6b3g3V2ZtY0lKYzE3bWZQNE83d1doc0xpWW9iUnpJYXRPNW4zZUl5OEg3cVlmTmFoazFMbmRxd0lJVWJuNStjdmpzVml2M25ublhlZXYvamlpeXVGRUpyRFBZMWp0ZkxaazBUc3pLbFQzSnhiejV6TGcrellzbk80UXl3V282eXNLOWFabDdOaXpod1dyZG1HMzVlTGUrYk1DL25kc2plcDhwWnk2UTNYY0dtUm4zVVB6V0wrS2o5OUw1ek9IU1hsdkxKc0ZRdG4rY2xidTVUcEozbXAxUGJ0MjVPRnQ4NmV6OE5rUG9XejE5TlJsNlpKS1VVa0Vwbm04WGkrQjN4QnFVcG5pQzlzYi8xMy9RNFd2TnBJTE9VdVc3ZldFczNMNXNJckxtZnBoQndJN1diV0Q5N2h6YjM3V0I4YXd1U0tmV3oxWk5CMzJGaFczbm9HUmJUdy9LS1hXRmhSeGFxOU1MbStva3NJbTQzSDQ3bHQ0c1NKWTJwcmF4Y1hGUld0c1dKdm1pVnF0dlZHd25DVHFkYWJTSW5Ea2VxaU9qZW4yUUkzZE9qUUxuYmhSS0hvR3VZdm44cmt2Qlc0YjVsM0phOHRlNU1xMzJobXpyK1RpWlR6VEhrZFVNclVlZk9aTnl6S3BXY3RadFdlWFBMOE9MWXJuMWlrbEh6ODhjZnMzcjI3emNKaWUydVVQWmtqSlVtUUttckplTnIyN2R1N2w1V1ZmVi9UdEhsS1RUb1I5UlhXUDJLcytlc0hiS0FINHdhMnNLRkNUOTVsL0xWZlkyTzZBVkFlTDNrZXlCczVrYmRHcG50d0Yza2VTendIanU5U3AwVUljVzVoWWVGemtVamtpVC8rOFkrL25UMTdkcU5sdmVtMGpzZ3liRUZ6eHQ3c1FhZE9jVXRkKzVnUXVTaE5GZS95NXlmMlVqanJQM2xzNXRsZHFCeGtHTlBuRDdPTnQzUXh0akltWGptS0o3Wjl3T0lyeDdKbTFIakdYM29OTSsrWnpMQ1Q1SW5xdXM3SEgzK2M3Q1pJTGJ4TkxlZXcwdG1wV2M5a2dpQVlERjdvOC9ubUNpRW1LeVhwWkZndFV0RzltMWl3S1VMZkN5WnljM3hkRzJHenFmMXdFd3ZlYTZaMmJ4VWI0aGxjZU8wb0pqczMxQjNhelVPdlZsRlpmNGoxRlJwOXg0emxqc0ZBUE5wbFQ0L1A1N3ZuNXB0dlBudlNwRW5QRGh3NDhGMHI5aGF6WEZNaGhEQVNobHByM00zcG1xWk1Fa2tJV3p4QzNkNHR2TDUvUHdmOEp1Nk1Ya3lkdklNUFA0eHo5dGxuZDhtMWYybVRCOFB1WE03YTBTdFl0dXcxMXExZng3SkhYMlBaNzY1azhkb25tWHlDeFMwU2lhUVZOYnZ3TnQwK0FvZWxsdXA2YXJGWTdIYVh5M1VmMEVlcFNDY2swZ3cwOC96eTNWUmw5dU9KcTN1UnR5TDlYZjE3OTdGcWt6L3huN3h1REN0T3FjZnkxN0ptVXdWMUFPNXNocDNSTGJFSS9MTVUvSFlDTkUyYk5HREFnR0Yrdi84LzgvTHkvZ3hvbG51YXROeHdKQlpzajhleTNvVGxzbUthVVJxcnlxbHRDcU9qNGMzcnlhQnpoelAyM0hNNFM2dGc1ODZFcTNyMjJXZVRrWkhSdGM0UmdNL3lVYU5Sd0wrZVorYk1aZEZyZWN4OGNpbXZibHpMUTZPQXVuV3MybnhpWDF3d0dPU2pqejQ2YkoxYVNseE54R0l4WWZkOFdtYTJacHFtVmxWVjFTY2Vqei9tY3JtZVVLTFd1YW45MTBZV1Y4SzRxOGN5OVRDVHJzdXUvaHA3bnY0R0crNDlpN05DMVN4KzlsK3NDVG51TVBnOE5qNTlFOXNXWE13MUJVRmVXL0U2aS9ZYXA4cHA2cE9ibS92VGFEUjYvNnBWcTBxa2xCbldSOWtMZUtTVUxpbWxabC8vVmd4TjJONU1KQklSNFdBejFRMGhvcVlnbytnTVJvNFl6QmtGR2VqTk5SdzRjSUNLaWdwMjd0ekpSeDk5UkRBWTdHSVdtNitJdkZ3Z3NJWUYwMlpSdm5BaGViVnJXTFZxSFZzclAyQnlTUzNyeWdGdkdhTk9ZTElrRUFpMHNkU2NMVksyb0RuSGQ5dXVwMVdmMWlickdRd0dKL2g4dnZ1RUVKY3EyZWprWkJpcytMOERCSUFOeTEraWRIbnJUUnVXLzRVSis3L0NxNWQ1cWRWZDVCWGtVT1J4VVRSNEdOZVViR05oUlMwYnFtRmlmZ3VWWVFOZlhqZEtzc0JYMEorWnc3SjVxVHJJNXAwdGNNN2dVK1owZWIzZTJWT21UQ25kdTNmdk0yZWNjY1o3VnR6TlRpd0lJWVJobXFacEwzaHVHM2R6aVc3ZE1tVkxNRUs0ZWpjYmF6OGh0N0F2WldjT1lxakRYYldQczg4K3U4dE1CM0hqbThnOTg2OWs2NEkxN0NrdnB5cGF3cDFQTHNYLzBBSit0KzUzTEk1NUtUenJVdTZZdDVCYlRsQlRVWE56YzFMVTdHYjIrdnI2ZHU3bllUS2Z5WGhhTkJyOWh0dnR2aDgxL0xGcmtObVRzalA3Y0tFajVGRmJlWWh0ZnBQYzRtTEdueUZZcy94bDVtMkZjVE8reHZJSk9SQnE0SU1HQUMrRm1WQzUvblV1L1o5R2NzZGN6RnUzOWllUE1PWFZZVUFqTDgvYjZYcEdqNE5yZXNtQUFRTUdORFEwUEpXZm4vK0s1WnFLRk5jVVo5ek5Gam1QSjFOMEwrd21QZWdFQTM2YWF6L2hnOW9xYXVPWGNxSFYyZURzVVQzNzdMUHAxcTFiMTRpeGxVMS9rclhUbmQ4ZXo1M1B2c3FkSitFRk5UVTFmV3BSY3lRSnRGdHV1Y1cxZVBIaUgyaWE5aUNuMlc2SExrM0JjQ1pmZXluT3JNNzYzLytabWVzakRMdGtJbytlbDBtdHB5K0ZXL2V6WWZuTFRIb3ZIMTkxTGR2OGtIdm1FS2IyZ2hMUEVNYXRXYytHVGV1WVZGMUVtZDdNaG1vVDh2b3hjMWdtRkE4OTVVNmJFS0tzUjQ4ZXZ3eUZRbjNHangrLzVLT1BQdEljMXB0dWlWa3k3aGFQeDl0a1RLWFhLM01LZWxQWUcyTEJJTzVvTTQyTnliS1JOc2ZaWjUvZDZVZU9kNm9QZkdOajR4RkZMWjM3bVpva09IVG9VTCtDZ29MN2hSQ3psVkowTVlxSEp1YXVIWWFpTDB4a09adFlzR1l2NjNkVlEyWWU0eTRZd2Z5ckJ5VW1GUlFNNGRsN1hTeGFzWVUxZTZ2WlFBWm5EVHVMTzZhUFlXbzNvR0RncVhyMjNKbVptZlBlZSsrOTR0ZGZmLzAzbDE5K2VhVnR1Vm5XVzl5K1k3cWtRdUtMajh6Y0FqSmxDODNONllYTkZyZk8zRi9hYVFaTk9rWE56bjdhb3VhTXFhV3gxT3pXS00wMFRSRUlCTDZRbVpuNWdKcVoxb1hac0xSTjk4RnhwY2NBR0RmcmMzbm9veDAwZVNJd0RHUDF6cDA3Rnc4Yk5td0xFTFd5cGpxUVhBK29hWm9VUXBqV2RGNXA3VlNRenBIajlrVGU3dDI3VTFCUVFLOWV2WklES3p1enVIVUtpODNwZnFhSzJ1SGNUNnZmTStsK2hzUGh5N3hlNzRPb3liWmRtek12Z28wdmZINlBmUnJnY3JtbURCMDZ0S0N5c3ZMcGtwS1N0NnhFZ20yNUlZVEFtVlN3ZzI2dGxsc3lGc2ZoakovaHc0ZDNTcmYwcEF1Yk0xSGdGTFhHeHNhMEV6cFMzTStrcUVXajBSbHV0L3RCNEV5bERGMmMvSUdKS1J6SGU4SkhKNS9zOFRuRTNjYjI2ZE1udjY2dTdxbkN3c0svU1NtZFNRVWRSMUxCSVdEU2NsM2JxVms2Z1JOQ01IejQ4RTZYVURpcHd1WXM2WERHMUd4Uk81ejc2UlMxV0N4Mmg4dmxlb2lUMXZDbE9PNk11QnI4aDQ3ZlRMWWVBeEtQZVpvaGhCaFVVRkR3VUZOVFUwNzM3dDMveTJHNXRRbEYyZUlXajhmVGlsdEhvbVlmSTBhTTZGU2xJQ2ROMklMQllJZUpnalIxYXNLNTQ5TXBhcnF1ejlVMDdTRWdRNm5CS2NhNFdjZG5pbTZQQVREbSt0UDVUQloxNjladGZrdExTM1pPVHM3dm5XNnBVN1RTaVp1ZFhFZ1Z0RlJoMHpTTkVTTkdrSjJkM1NsK1llMWtQS216VGVvb3NwL0N1VUhLanFrOS9mVFRIbDNYZjZocDJrSWxhcWNvN2d6NDBoMEpGL0t6dUovalpwMXl0V3VmZ296czdPd0hRcUhRN1ZkZWVXVzJvMVBCQTdpdFRnV1hhWnJDTUF6aDZGSWdHbzBLKy9NWURBYngrLzAwTlRWUlgxL1BvVU9IcUt5c3BMeThuSTgvL3BoSUpOSXBmbG5Yd3c4L2ZFS2ZVTmQxL3YzdmY3Y1pQZVMwMUZKaWFzTGV5RzRuQ3FTVTR0MTMzODM1eWxlKzhpTk4wMzZnUHYybkFjVkRFN0d4VUpQVlMzcVVWdG81VjUvUUtSNVNTdngrZjZldThmSjRQT2RObXpZTmw4dTFkZDI2ZGZFT3BuZklOSWtEa2VxU09wcnMyeHhGUlVXNFhLN1RSOWlrbEd6WnNxV05xS1hiSkpVNmRzZ3BhanQyN09neGRPalFIMnFhOWwzMWlUK055T3dPSmFNU0l1ZkxTVGhLbmd5SVdUMk11Y1dRWFpnUXNpR1RvUFNDeE0rY1FMcUNzQUc0M2U2eDU1OS92aWd1THQ3K3Q3LzlUWGRtUmpzU042Y0FPdXZaVWdYTy9scGNYSHhTUng2ZDBCaGJSNzJmVHZlem81SU9LYVVvTHk4djZOKy8vNE5DaUx2VkovMDBKYmRYNGxBTmNwOEpuODkzKzIyMzNhWjV2ZDRsdDk5K2V5MjB4czRjVnBsaEdJYnRhYlZKS0RqamE4NDRtOHZsd3Q1YVAzejQ4Rk5mMk96SnR4Mk5IanBNOFczU1VsT2lwbEFjVjNHNzdhYWJiaUlhalQ0M1o4NmNCcWRsbGs3Y2NHUkxPeEsyVkhFN1daTjRUNGdyV2w1ZW50d21kZkRnd1E3SGVhY3I2YkJqYXBiN09VZGRqb3JPU2xkeFJWUGMwakVqUjQ2VVFvaC92L25tbTRabGpiVnpTMVBFcmwyOHpYa09uTzZweStVaVB6Ly8xTFBZOXUvZmY5UXh0WFIxYWs4Ly9iUm41TWlSRDJxYWRvLzY2Q2dVeDUrTWpJemJIM2pnZ2ZpbVRadWVYYjE2TmVrc045TTBEV2d0QmJIS1JlVGgzRkdYeTRYVnBuWEN0MTk5cnNKV1hWMmRYSkdYdW5qbGNERTFaNTNhN05tekg5UTA3ZnZxOGxNb1BqOHlNek8vdFdMRmlsaDJkdlp2YlVGemlKdkVXdEpzK2FiSm1Kc1FRanJkVU9kaHU2TzJ1SjNJdmFXZm03RFpHOXFkN21kSDQ3eFRZMm9weGJjUHFzdE9vZmo4eWNySytrNGdFSWprNXViK2tiWlpVcGxheEd0L1h5U1FIY1haYkt2TkZyY1QxVFQvdVFoYk9CeHVJMnIyNHBYbTV1YkR1cC9XS085a201VFZVYUJRS0U0UU9UazUzMmxzYkF6MTZORmpwV1cxU1ZKaWJKYTRPUzAySVlTUXRxZzVCYzYyMkd4aE8rZWNjOGpNek94NndpYWxaTWVPSGUxMkZLUmFhdFkyS2VjU1kreUZLOUZvZEliVis2azZDaFNLRTB0RzkrN2Q1MVJYVndlTGk0di9MaFA5VjIwKzMvWlhlMkNsWmEyMXNkeWNGcHZUSmZYNWZJd2NPZkp6cjNFNzdzTG1GTFhVN0tlOTk3T2p5YmVtYVlwd09IeVpOYVZETmJRckZDZUhvcUtpb3J2Mjd0M3JQK09NTS82Wllyblo4VGE3OUFPSG9BbE4wMlJIY1RaYjJESXlNajczTXBEakttd1ZGUlhzMmJPSHFxcXFwS1dXNm40NnVncElLZXZRQW9IQUY2eDVhbXIwa0VKeEVoRkNET3Jmdi8vdG16ZHZiaG85ZXZUSGx1V1duTnNtaEdoanRaR1NJVTJOczduZGJ0eHVOMTZ2RjYvWFMwWkdCZ01IRHV6OHdsWmRYWjBVdGVycTZxU28yZjJmRHZlelRhdVVjNXgzWm1ibUE2Z2hrUXBGcDBEVHRDK09HREZpOXNxVkt4K2RObTFhbFVQY3BHTjJHNlpwbW5hbU5KM1Zac2ZhbkJsU2UwTHY1NVVwUFM3Q0ZnZ0VrcE02cXF1cjJ6UzFPMk5xNmNvNnBKVGlsbHR1Y1ZrN0N0UTRiNFdpRStGeXVTNi80b29yYW9jT0hmclk5dTNielJSeHN6T24wdDRxYjR1Yk01bGdXMnoyVjYvWG0zUkpzN0t5UHBjNWJwOVoyS1NVN1ZxbG5KWmF1cWIyMUF6bzRzV0xmNkFXcnlnVW5ST3YxM3ZqdSsrK1c1T2JtL3Q3UzlETUZIR1RxWmxTVGRQYVdHN3BTajk4UGgrWm1abU1HalhxdUNjVFByT3c3ZHk1azMzNzlpWExPbzVtVFY1S0J2UWJxbFpOb2VqYzVPVGszRk5kWFgyb3VMajQ3NENaeGkxdEUzT3p5ajZTNG5hNFdGdFdWaFpEaGd6cFBNSldXVm5acmxhdGcxWXAwbVZBZzhIZ0JHdVpzZHI3cVZCMGJ0eEZSVVYzYk4yNjlkQ3dZY1BldDZ3ejIwcHJseW1OeCtPeW80TGRkTEcyN094c1NrcU8zMGIyVHkwb1RVMU5hV3ZWT2hBMWtiS2xYVHR3NEVBZm44OTNIMm9BalVMUkpSQkNsQTBlUFBpV0YxOTg4Y0FOTjl4d3dPR1NKaTI0bFBxMnBFdWFUdGljNHBhVmxVVk9UczV4R3lEZy9qVDdHdzNUWk0rL3QxSzVldy9WKzZ0b09GUkRjMzA5Z2FabVF2NEFrV0NJU0NoRU5CSkJqOFNFcnNlSTYzRmhHcWFRTWlGc1BUM2hlYUpwMzZYcWNsR2NuRStwQmk0UGFKN0V3RXB2dGpvblI0SEw1YnA0MnJScEZjQlR0TWJiVE5Ja0UxTEZ6WmxJY0xxa3prVEN5SkVqajh2MDNVOWxzWlh2L1lUS3FvTlUxOVRSME5CSXM5OVBTMHVRVUNoTU9CSWhFbzBTamNYUVk3clE0M0hpY1NNeE5saEtJU1ZhckhyMzdVS0l1OVJsb2pocFNCUGlVU0FLc1JZSU5VSkdMbVRrMmQ2VW9nTXlNakp1cnErdnJ5Z29LUGdyWUhTVVRCQkNTRHZlbG1xNU9kMVJwN0RsNU9Rd2VQRGdFeTlzQjZ0cjJGZFp4YUhxV3VvYkdtbHE5aE1JdEJBTWhRaUZJMFFpVWFMUkdIcE1KeUZxY1JJeE5TbWtsQ0pZdGUxQ2w4dDFuN284RkoxTDZBd0lONEVlaHB5ZUNZdE8wU0g1K2ZsM2JOMjZ0Y0tLdDVrcGg1UlN5b1MyQ2VMeGVESTdHbzFHNlVqY01qTXprK1Vmdlh2M1BuSENGZ3FGK1dSL0pRY1AxVkJiWDA5alV6TW9NaklCQUFBZ0FFbEVRVlQrUUFzdFNWR0xFSTNGaU9reDlIaGM2UEU0aHRFNmdtajdodi90N3ZQNTVnSjkxS1doNkpURW8rQS9tQkEzbCtkemY3cDE2OVoxbWwvOW9vc3VPcGE3OXdadUF2YVNpTEcxRVRaQVdpVmRwbUVZeE9OeEdZdkZSRFFhbGZhMnE1YVdsdVMycStycWFxcXFxcWlvcUdEbnpwMlVsWldSa2ZIcFc4V1BTZGoyN3R0UDFjRnFhdXRzVVF2UUVuUllhckVZc1ppT3JzZUZyc2N4REJORFdpNG9pTEl6Qm54ZndHVDE2VkYwYXN3NGhPb1R1eFZPQUdWbmZyYSt5ZkpkMndIdzlmM2lwMzZNYU5XN0FGU2QrZVN4L05nbFlUTzJiVkQ1OTM5TFlxdThnWjFJQUNrUVVrZ3BNRTFKWEVMVWdHQmNhQ0ltTldKb0lvSkxoSENKSUc2WEg3ZXJDWStuRG8vM0VBY1haWEhHR1dkdzVtMGZmYXJmNTZqdDdmMVZCNmlzT2toTmJSMzFqVTAwK3dNRVdvS0V3bUVpNFVSY0xSYUxFZE4xZEQxTzNEQXdERk5JTXhGWGl4emNPVTNUdEhucVU2UG9NcGJiMGE3Nk80M0oxTHpmZW5mZ2p5ZVFtTVRqQTd5V3dlU1NTSmNFVFNLRmlSUUdramdtT2dZeDRrUmxuSWpVQ2Nzb1FUTkt3QXpUYUFTcGkvdXByYTJscHFibVU3K3VveEsyUUVzTCt5c1BjS2ltbHZyNlJwcWIvUVJhV2hMSkFxZW9XZFphc2w3TnlvQlc3M2l2bjhmai9wNjZEQlJkaW5CeklzbWdPTHhQNnVrKzY5bWlXYjA3RURkTmdtWTZ4RTJYcGtpS0d6b1JxUk9TVVZyTUNINGpUR004bUhSUFc0eFB0NEQ1cUZ6UlQvWlZjYUM2aHJyNkJocWJFM0cxWURCTXlKRUJqU1dTQmJhb1lab1NLYVdRU0swZ3Y4ZDNnUytvUytBVTh0YWFZd1NlMjBIa1g5VVlWYUV1OFpwZGZiUEpPSzhudWQ4Y2d0Yk5leFEvSVJON1MzMjVKKzAxZi9MWEozbUdhL241MWIxUDl0bkQ5L09iS0xpaWpzWXhMeE9PdGQ0aUVLTXZ6UnZ4ZFdyNXRlMlNTakNFTTVrQTBrUktBeE1CYU5JUUxpR2tTMnE0aFlaYnV2Q1lVYnpDamM5d296VTNrNW1aU2FVZVlhanIyRVB5UjdUWTlsY2RwT3JnSVdycjZtbXdrZ1dKREtpenNWMXY2NEphR2RDRUM3cHJ1aXJ0T1BYd1AvRXh3UlY3dTR5b0FSaFZRWUlyOXVKLzR1T2oveUU5ck43c284Q25lVzUrYitCUEpqZ3NOaS9nQWR3U3FRR2FCR0ZDV3BjMEtuWENVcmRjMGdoK3Y1K21waVlPNlUwYzBCdVByOFVXRElhb1BIQ1E2dG82R2hxYWt2VnF3WkF0YWpHaWxxakY0M0VSTjZ3c3FPV0NWbjY4dnBmSDQvNk9ldHRQUFNML3F1bXlyejI2cWY3bzd4eVBkc25mc2ZvZmovRFMzbUlLM0g1YUdnTzRoMDFrY0dBTGU1cjhOSWVMR2YrTm16aTM2UGhtZlh0NXV0MEVmSnpPYXBOSUNVS2FTRk1BQmxMR3BTazBZVWczY2FKb3VIRVJsaTY4cGhzUkROTGMzRXl0SGlWSHk2QzdLNHNzelhkOExMWkV2VnBOc2w3TkZyVkVFVzRzVVlTYkdCaHB1YUFtcGpSdEYxUVVGeFhkQzR4Uk1uQnFJUU02WmtPMHk3NStvemFNR2RDUDhwZnR1akcyZU9HWCtPcnM3M0xydHk4blkrTmE2cys5Z3h2dWVKQ1pZLzI4dmE3aXVEK2ZRSXdDcGx0V213L3dTaXZXWm1tTklHRzFZVnR0Y1dtSUdBWXhhUkNWT2hFWkl5U2poRUloV2xwYWFJd0hxWTM3cVlvMUhCOVg5RkIxTFFjT1ZWTmIxNUFvN1docG9TVVlJaHdKRTdXS2NHTkphODJ3dXd2c0xLZ0lIZGd4V2RPRXN0Wk9RVVN1cDJ2L0FvWkU2K3Evd3hIeGtKMmJtMWdha3BsUGRrNHgvZnNsZnVlYzNFemlrYy9OeGY3bUgvLzR4M1BUdUtSMmxsU2taa25qR09qRWlVa3JVMnJxUkNJUlFxRVFUVWFJK25pQVEzb3pOYnIvc3dtYkhvOWJMbWc5RFZacHh5ZnZyT0t2ZjkvQTN1WW9rVmcwVVlTcjY4U2pBZEhVN0Nlc3QzWVh6SnB4amN2bjlkNmI3ckUzLy9SNlNzKzdseGNQcE54UTl6SXp6cHZHUSsrbGNSMys3eWVNdldrWjVVcFRUaU95eVBqMUxmVForVFd5Q3gwWDdJVHp5Rjk5QzcxMzNrM3ZkNjZueHpmN3Q3bUlqM1M3NHZPblQ1OCtNd2VJN2hrT3E4MWpoYjAwYWNYYVpFTFlFdUxXSmtzYUowSkMyTUxoY0tJRUpCNmlMaDdnb041SVhCcWZYdGlTcFIwTmpUVDUvYlFFZzBSMEEwdy9GZVhWaEdLNm5RVWxiaVJNZGRsYWlLczk5L2pQN3dhKzNPR3p4ajVrMGE5ZXAvYW9YbUlMYTFaOVFNblVTeWhUMTh6cFl4Vk9ta0MzUzFNYTAwdkhrUC8wQ0Z3Yi8wbjlWWCtrN3BkMXVPKytuTzVmeXpxNjJ4VW5CRTNUSnE0KzR3ZFRIVmFicDFYY3BJdWt1TFc2cERwRzRwQnhZbEluR28wU2lVUUlHaEg4Um9qR2VJdmxralorT21GcjlnYzRjS2c2VWRyUjFKem9BdzJHaU1STnBBRFpjcENxeG9qZEJ5cmloa3k0MTFJS3BCUU41UjhNZHJsY2N3NzdyRG5aOE1aL3N1aWZMVWQraFhWdjg5SjdnNWg1VVM5MXhad3U1UFluNzRFQkdLOVZZanBDZWU1SlorS3AzVW56STl1SmJXOUUvKzgzYWRuZ3dqZXA3MUhkcmpoeGRITmwzZlRINHR2N09jV050clZ0d2xuYjVyVGFZc1NKeFdKRW8xRkNNa2FMR2FIWkNGRWZiNkU2M2tUQUNCKzdzRlVkU0hRWE5EUTJPVnFtd3NUaUpyaTdrWjhoQ2RmWEVkVGoxdURJNUtRU0laRmFYcDc0MXVabFB5bVpObmt5cFdNbU0vYWFlU3o2Wjl2QW4zZmdWZHd6R1Y3NjZYTnNQa0lNdXZhTnY3UDVDNWN6dWZCdzRyZVB6VnYyNFZmWFV5Y1RxQjU0Si9URjdTd0RHM3NSUmUvZFFON1lqa2JUdVBEY1BZSE11azAwLzNmYlVwTDQwdi9pME9WdkVZdWwvSWpQZFZTM2QwVUdYRDNuVTlXd0ZWODJqMXN2c3djM25zbVZjKy9tSEd0UHNmdWNPL251Tjg0NXhrYzBpUDdnZVE2TWFGdkRkaGo2bnA4eitHcFNFd2xDdUt4RFF4TkpxODFJSkJLSVc0a0VYZGVKeFdLRVpZeVFHU1ZnUkdpS0I2azdveS9oMzF4RXo5ZHZTaDVGLzNGbXUza3NiY285cW12ck9GUlRTNTA5dGNOcW1RcEhvc1RpRWt4QlpsRTNYQWVhOERlN1JKYTN0UThVaVFnZjJINUozYXI1ZDh4Nk5zWU5QMXZDczROaDYvS2ZNK2YreHpocjFVS21KaS93ZkNaLzc5dHN1T2JuUFBUY1ZieDZkMGV6SmcveHlpdjdHRDlyTEhuMnR3Njh6WUtmTG1OenJEL1gzUDF0SmdlZVk4N1NGc3A2dDdENXFWRTgrdFJNaHZtVXBweHd2SVZrL2VKaXNrdmp4RmYraytZTlJYVDd5Wm13SjRycmdiRkV2dk15TGRzTnFOcEg1TlVvK3A0T1lpVkR4OUo5R29SdS9RQzlhRkpLQ01OQU9nVFFOV0VjT2VPaVJPN2JkM1MzbnlZYzJGZkJDOC8reHhIdk4rbUtyL0hGOHk4NnFzZjBYVFNRZ3VlbUFoQmF1WTJtSDZ3OThzOW9ucHZlNlBmQU94ZnQvK2ttSUc0ZGlYNVNwQW5DTkVHQXhBQnBJSVdPSVYzRUVaYXdSV1Nja0JuREp5SmtHbDZhbTNiUXdCZW85NFNURzY1aWRhT1E3T3BZMkE0Y1RHUkJtNXFhQ2JRa0NuSERZYXNJMTVCSWFhRExESEo5UWpSR3drUTBqOUJNS1VpOE9NM3I5ZDZWZDk2M1diazhuN0krT1FCTW5IRTV3NVl0NDRNS21EckM4V1NGbHpELzdwZVo5S3ZIZVA2YXA3a2xYU0g0M3RkNTZlQW81cDJmay96VytxWEw0UGJIV2RsN0s0c2V1SXNadWRONTlybXJLQVBXLy9SZVh0bzVrMkVqbE02YzhMakt0UFBKcW4yVDJ2dGlaUHppTW9xdTkrUC8xbjhUM2dQaWExZFJjRVVQV3JiWFFkVWVBai9hMDhHajlDRDdKeU1Rci82ZHdJY0dUT3JBb252Z2VncG41Q044Y2VJci8wSHozMExIY1B1cFQ1LytBN24va1NlTzYyTkczNmpnd09Dbmp2bm5TbjA5cndIK0RlaUFMcVdNQzd2T1RhS1I2RXJBQk9LWVVwTkN4SVVoUlR5ZXNOcGtuQWh1UW1iQ0pXMm9yR0hIZFM4UXp5aG1lR2EvSTd1aSs2dGFYZEJtZjhJRlRmU0JKa1lSNllZRWFSQ1B4OEhud3lVa2hoN0hxdkxSN3YvYnJ1dUZFRmY2Q25Pby9jZGpUTHZ5U29hZU41blN5LzZERGJFWTZUek9rdW5mNXA2QnUzbmlwMytuTXMzdFcxZjlIZjlGVnpIZVlZSDV2RkM1WXg5YmQrNm1QT29sTDdDUHlnQkFDLzVBNG5iRmlVZjY0NGlpSG5oSEZlUHJDMmJNaDZjdzhXWm9lUzVrNE1qWkxOZjFFOGp0K3duK1grNXpXRjd0WFNMOXViOVJlKzFmYVBqaEx1U2tTZlM0cWNjeDNLNDRrYmlFZHRtbWdUKzV3T0dTZWxwcjI1SWRDWmhPbDVURTlGMWQxNU5kQ1JFWlMzUWxHR0dhakNCMWV1Q3dIUWx1Z0ppdWM2aTZwdFVGRGJaT3c3WHIxZUptUXRpTWVGekVEWUhISllRUk40VmhDbTFvWHFGTGM3bnZCQ2hmOWhDelh1ckZ3bC85bnFsRDh2RUYvczZNeWM5MThQU0R1T1dCcTNocDFuTXNlbU42cXF5eDdCOHhKdjlzRkU3UGN2VGRQK0RLNTVieHU0cEIzUHlySll5dWY1bTUzNzZMeGJRUUhUaUxKNGVvaStta0NOdmYzc0JmZEQ3Wk0rTEVubnFWNW0wOXlQdVBhUlRsdVlCcUFuY2RJWnZsTFNiN213UFFpcURIUDB1dHYySnVCTkR0Lys0a2ErbC9VZnVyT2l1bTJraThEdUxiNnpEUDZrdkJ0S0c0WC9nWDhXVE05UWkzSzA0b1BUM2RyaDJoOWY3WEZ2T2dibGx1VHBkVWdwQVNhVnJpSnVQU0ZDSWVseTZYQ3gwelVRSWlkY0ptakJZalFyTVdwc0Zvb1VadnBzaWRoMGU0MGd2YkFhc1h0TEdweVdwd1Q4eFlpOW9ON3JwTzNBQ2thWThqd2hRdU5CRVhwcFRDazkvdm04QTRhR0h6UDNlVE4rYWJUQitTbjNpR1FBdUh5dy80UnN4aS9wV3ZjL05UeThpTmVaTWxIZEgzWG1hTjd4S1dwcnFWdnY1TXZmc0hURTI2dEZmeDVBdFhFWTJDVDhYV1RpSWhvaStzSmZxQy9mOEEvaHYzZ2RjRnNhT29QWXJWMFRKN09TR254VDNxZkFwL2trWHcxcldFOS9qeFBuQTkzVXUzMFREN3c2Ukl5U2lKbkJzdXZBOWNlNWpiRlNjdFRJSDQ0cklCZDA4ZXNmZUJWVW1YRkd5WDFHcTVRaVJNcDBUNWg1WVlUb2t1VFhSY1JORUp5eGcrMDBPTEViRUtkMXM0cERmUnoxdlEvam5Ea1FpSGFscG5yTFVFZzRuQmtkRldhMDNYZGVKU0lqR0ZFVTh1T2haQ0NIRk5XZSs4RmlHK21YaTRITW9HNWxQM3IyVTgvOC9kYkgzdjd6eDAvMUkraUVHMFEzWExZZUxkMytaU2dnUmFyM0xXdmJTUm9pc3ZaOWhSbmp3bGFwMlVWRkhyVzBydXo4L0RWOWpleFRUMzFCSGY3ampxb2hDTkpyNWZGMFBmV0ljWU40YThiNWJpTHUyQlo5Slk4cTdJSXY3V25rVDErbUZ2VjV4TWVyaXpyNzA3NTh1NXBEVElKMXhScWFWMkpCaUdJUXpEd0ZrQ2ttaVVqeEUwSXdTczhVYTF1cCtJMmI0OVRtdFhzNVpjbmRjcWFyb2V4N0NHajVpbWFTMW1RVWlFZUd6dTJObGVXdlZuOU8wLzVLRVJoM2ppZTdjeDdZRVYrQytieGN6aE9VVHJEMU96Vm5nSjgrOGUyZnFITmZBMkwvMnpGOWRjMWw5ZEVhY2FmZnVUT2FrVVg5OWpMOEdRYS8rUCtoL3VRWHh0RWtWLy93YUZQeTVGdnJxV3hsOVdIOVh0aXBPSFFBeTlzK2VsbDlLMmFMZE5INmxkdEdzbWhBM0RTSlIvNk5MdUpVMklXOGgyU1kwUTlVWUwxWHBUKytmNzV6OWVZbGQ1UmJzRkxmNFd5eVZ0M1R3bG90SEVMb080WVFocFNtM3Jodi9OSDF4MnhqdHduSnNDRHJ6TjgvL01ZZXIwVVJTcGE2SlRjbURjeTEzNjlmZlpjTlV4bUJzRGp1cHVobUZRV1ZuSmdBRURqdnFodS9ET2d3NTU0NDAzMHY5aGtuTFBILzd3aHp1ZWYvNzVPaUFJaElDd0VDSm11YWlHRU1LMHRsbEphOUdMdExkWTJjdGVjbkp5Nk5hdEcvbjUrUlFYRjFOU1VzS2dRWVBhN0VodzE5VzNyMW16VnVjbHJEVnIwMVE4Ym1CWTFwcVVDWFV0R3pqZ2x1TXVhZ0I5THVDVzZVbzhGS2MrRXlkTzdEU3ZwWFV0Nk9kRzZhaFJveVk5Ly96eksrMVlteEJDeHlyL0VFS1lRb2prbWo3bjNsRjdXM3hPVGc1NWVYbms1K2RUVkZSRTc5Njk2ZCsvUDRNR0RhS3NyRldLTkhzcFN6RG9xRm16ZHhmWW9tYjV1NlpwQ3ROcW5kcjBmNnR5WFM3dEZuVnBLaFNLbzZWYnQyN1h6SjA3TnpmcGprcnBzZHpScEV1YVdOZHBDbXU3bGJCTFB4THJCeEt0VnZhbUs3L2ZUMk5qSXpVMU5ZUkNyZldLbWoxbkxSUU90NDc1dHVKcXVwNFV0bmJXMm9oaFEyWUJnOVJiZFhyaTZwVjFlcngyemFYZTdPT0lFS0xzdnZ2dXU1ajJTUVNYbEZKTFRONld3alJOTEdGTDFyVFo0bVkzeU5zejIrd1Zmb2NPSFdwOTJ4SWRCZ2tYTkdLTitVNjRvRHB4bzYyMUppMXI3Y2F2WCsxeXVWdzNxYmZwOU1VM3BxRHJ2dll2RkI2RENxcGFrZU5OZm43K1YwdExTNzFwckRiTnR0b3NjV3RudGRuaVpvODFDZ2FEQkFJQkdoc2JxYTJ0SlJKSkxIL1JuTmFhTXd0cUQ0ODBEQVBUTUszbExBbHJiY21UaTI0RVZPUFNhVXplUFdlVGRYVi9YSDJ6dTQ2bDFqZUw3T2xua0RkbjJOSC9rQ2RUdmRuSDMybzcrKzIzMzU1d05GYmI0U3czcDlYVzNOemN4bXB6Si9ZWFJOUEcxaEsxSkNhR1phMVpGcHZtZHJ0dlZHL1A2WTNXelV2MyswZWQ0cDlBRGJ3NTZzMytIQ2d1THI0Q2VOTVN0cGlVMGkyRWNKTklKR2d5Z2JES1BxUmhHQ0llajh2VVdGc2tFbWxqdGRYVjFWRlNVb0xiS3VXd2Q0SW1sVEZ1MVpFWXBvRXBKVkpLSklqUXdSMVRnQXZVVzZNNDVjbnNCa0o4L3M5akduQm9LN1RVbkRaYnNUUTRiK2VyaTBjTnZ1S09qWmJGNWtGS0hZRkxTZ3dTaGhTbU5ER2tnU0YxNG1hVXVCRW1IZytpeHdQRVlrMUVvZzJFSXpXMGhBL1FIUHlFK3BiZEhQTC9PeUZzeVdMY3VHMnRHUmkyRzJwS3BKbFl6Z0pTZUQyZUdlcUtWNXp5dUgzZ3kvdjhueWZVQ0pXYlFRK2RkcWQ0WU4vaVNjQUhTYXNOUEVJU1IwZ1hDRk1paFpSZ1Npa053OFF3VE9LR2lXNFk2THBCVEk4VDFYWENrU2pCY0pSQU1FeFRvSVc2eG1hMGFDVGhndXB4dlcwVzFISkRyYVFCVWlLYTltNFpJWVM0VmwzMWlsUGJuSEJCVHM4VDgxd3ROYWVscUFGNDNPNnIvdmUzQy9zbExiWkVuQzFsTndLWVVnb2pFV3NUY1NNUis5ZU5PSG84VGl5bUU0MVo0aFlLMHh3STBkQVVRSE9XZHlRTGNXMFgxRFFUYm1qQ1d0T3lzN091VTFlOTRwUzMxUEo2SitKcko0TG1BNmYxNlI0N1lzaUZwR3l6UWxvWlVva21wUlNtbEppbXhMQVRDYmE0eFExaThUalJtRTRrR2lNWWlSSUlobWdNQk5HU1RlNU9VVXRhYTNiQ0FMSHFUNy9MMERSTkNadmkxRVM0d0pzTnViMFMvejVSbk9hYjVuT3lNcTZZT1dWQ2htMjFTVnZjRXJQYUJJbVpSaUpodFVrTXd4UUpsOVNhL3FISGllbHhJcGJWMWhLTzRBOEUwZXdzcUc2NW9IYlNJR210V1NVZWt5NjY0RnFnbi9vRUtFNE5JZE1TMXBrM0I3SUxvWHNKYmZiOG5TaTY4RUxtNDBUSm8zTnZIWmZHSFhWSjBLUzBoWTJrMVJZM1RPSnhFOTIyMnZSV3F5MFVqaElJaFhIcnVJbmp4c0JGWEFvTUtZUWhCWVlsYUpacWF1N0MwdWtuSkVPa1VDaE9LM29XZEw4RWVOdGh0Ym1GeElXUVd1SXZrSlJTSWd3cE1Vd3BEZE1RY2NPUXR1V214MU9zdGxBRXJkVU5qU2RIaFNSYXA2UjlpTWJHeHVGQ2lNdlVXNkJRZEQyaWIvNkdvWGU4ek5aTyt2cmNMdGNsYTVjc1NFMGl1Q3lyTFRuT1NKclNLdGcxTGN1dE5kWm1KeElTVmxzRWQ3SnV6UkkyTTlrVG1oQTFRT1RrNUh4TlhSNEt4UW1rOGpXdXVQTVZ0clYrL01udE9aREowNmN4ZjBvSmh5MUVhZHpGaS8vclovejBNU2R3eWZndUhycnhLWmFsamtiem5NdmlsYk9ZZklTZi91THd3ZU9BVDFLc05oMkJoaVJSK2lHUXBta2xFcXpTRHp0ODFqYldGbXNWdHRha2dUWEZ3elJ0TjFSb21uYTF1dElVaWhPTVp4QUxmanVIRzNvQTZGUnVXczJjUjU5aWJ2YVBlUGJDd3pUeU4yN2pkOHVxeUx0OERHVW50SEhDemFVUFBzYXo0NC85SjNPek15Y0IvMDNiT0pzYlpOeXFraGFtRldzelRGTWFpVDVTbVlpM0dlaEdhNnd0SEkyaHBicWc5b0hWaUJvTUJpOEJocW1yVEtFNHFTcEh5WmdwM0R4RVovT1dHaXIvNTFkdDNjdnFONWcyN1JmODhyK2VZZXdEYjdCSDM4WGMyUTh6ZDVOMXUxN05TNC8vaWduVDVqRDArb1hNV1Z1ZDNFVVNyZHpFUS9jL3pNaHAzMlhvamIvZzloVzdxTFZ1Vy8vNGc0ejkwWitaZS84dm1IVGpmWXk4NHhtZTMzNk1kWGV4U3A2WjgxMnVXRnFaZU03R1RkeCsvWVBjL3FhMTRyejZJeFkrOE1qUVFmMzZEYlVFcmRVZGxiaE1LVFhEbENKdW1DSnFtQmlteE5RakhLenpVeCt6eXovQzdQN3czN3k1UDhUdURXK2gyYUtXTHI0R0NKL1BkNVc2cUJTS2s0MU83ZlozV0xiRHc3QWgrWlJjT0k3Uk5SK3h5bHJSV3Z2K1Iyd3RPWmV2WFhzbkczOTZFYVdlTTNsMHljTThPc2I2OFpvcWFvZC9nMWRYL29xMXM0dFp2K1JsMXJRQXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyazg5Y1Z4bm0wbnZ2WSswZkZySjBURDJMWG5nL0tYeEhoYmVFVys2OUNQNytaMTZzOUxQdU55dlpQUHdxRmw2WUI3RUtGdnpvUlRZUHVZN1gvL3I0ZWM0NG03UXlvNENtQ1NGY0FqQk5Jb2JFTUVGQ011YVdHSzBHcG1IUzgreHpFNjZvdy8zRWJuYTNEazBJY2FXNnFCU0trNkZsdTVuLy8rWXdQeGxqNjh2RTZiT1pQeWtQT0lkcmhxeGs4WnVWekN2Tlo5MzZLc291dks3am1GcmZjN2xqVWpGNVFONlljeWg3K2cxcWd4RGQ4VFlyZ2lONGR1YVppVEg4SldPWVAvMGRKcXgrbi9JcGx3SlFPT0pMVEM1T1dJMmpSNVRBK21vcUljM1kvaml2UFRLSFVzZDNMcnpuNXl5ZGxJV3ZkQXFQWHI2TkdRdWZKQzlZd3J3bngxRUVSTGU4d1lyZ0NKNmNlU2I5dkZ3Q0xFMjEyb1JJZENJZ2hLbUJRRXJNaFBVbFRNT1VpVGliaGlIQnRGeFNkNnExWnJ1aGdBaUh3MU9BdnVvS1V5aE9kb3d0bFR3bWZ2bE1Gcnk4amZMcCtieTJJNThyYnlzK1dxODI0WUxxRUcwTUVDMCtpeExIMkxtaW52bjRHcXM3dE1wOG55ckc1bUhZVnk5aTlNc3ZVdjdsNjVodS9VN1JSaitCcGdwdXYvNTlnRDREQnZRZjhja24rOTVyRzJkREJ3UVNJWVFRbWtDYTFoUnowelN0amdRd3BVd0ttNVlxYXBhbEJpQzhYdThVZFhVcEZKMlRvdkZqR1YzelBzdit2b1hOSmVPWVduTHNqK0hya1ltdnVwcktXT3YzYW1zYWlQWW9QczZMbEVLc1g3YWF6U1VEOEwyMW1oZXR4V0crbkR4eWUzNko1U3NmWS92S3g5aSs4aisrbUdxeFNkbmFpV0JLaVNHbE1HV3FLMm9tRnBTYWlkSVB6UkkwZTZpYnNNczhMRGRVQ1p0QzBWbkpPWXRyaGpmdzRyS1BLSmt3Z3FTdWVUUHhFYUt5NmNoQmZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODQ5cnFVaTBTMnZNUGV0Zk9ZOU9JZEh2K3huMGVOdlV3bjRobzlsTWh0WnRLSUNQNUNoTjE2VVlxMGxWL1JKcEdaYW9tYUNFRWlpRVYzb1JweHd3RTlkSEtTWnFHdHpweVlOYkRjMEZBcGRyTnhRaGFJems4WEVTWVB3YmZCejVYakhxUGFTYzdqNTNIZDQ2TTRmcyszQmhUeDZ1SWZ3RG1UZWo3L09nbDh2WmRJMFA5SHNmQ1orZFRaUFR2azBvOS9ieDlqZ0xCYTlNSWtQZnIyQm9objNjVU94QjJaTVkvSTlMekIzOVZrc256S01oVCtleG9KZkwyWENNajlSYjE2ZnkyWitlOGcvbHYzbmh5VDdSbkZKbVJnWmpoQkNBeUdsa0Y2WElLcEhPVmdmdytWeTQ5TWtwbFgrSVhyMjdFazBHaFd4V0l4NFBDNU0wOVNrbEM1ZDEzK21hZHAzMU1XalVCd2RuMmF2S0IrditteVcwS1kvTW1sNUNjdC9lUkVscDhoNURJWWlTM0xHWHZzaTBBSUVnS0NBTUlLb1FPaENZR2hDbUc2WEpyMGVGejZ2UjJiNnZHVDZmR1JsK3NqT3pFQkx6WWFTcUYvVE5FMmJwQzVWaGFMekVtMnM0UGtWMnlqNThybW5qS2dCWkdYNnprdm5pbUxOYWNOdXM1SlNKRG9SVEd1RmdaSHNSTkJTaW5LUlVvcUdob1pocUdVdENrWG5aYy9MWEhIck03elU0eW9XVHNrN3BYNDFJY1RacTUvNVVlOE94RTFJaVVDQ0thMU1xTE9IMURyY3FRM3ZKSHBETDFKWGprTFJpU205aXJVclQ5M2ErVEZubnprTTJHOExtd1NYa0dnSTIyS1RRb0tVZHUrb2RkaGJyWkpaVVZwSEZBbVh5M1dodW5JVUNzWEpvbnRlemlqTFNrdE8ra2djc2xXcnBOMC9LcE9WSFlaMWFLa1cyL2UrOXoyWEVHS2lPclVLaGVKazRYRzd6aHQ1WnIrVWh2aGtuSzExbEJHV0t5cmJ1cU5haWh2S3d3OC9mQUhRVFoxYWhVSnhFdW4yL0NQZkxYVmFiVExSRkovWUZpL0JtcTZMdEVRdE9kTElhYkZaQ0ovUGQ1NDZwd3FGNG1SVFd0SnJTSHRYRkszVkhVMFlaYVoxR0xJMUVhbzV5enhJekY0N1g1MVNoVUp4c3NuSnpqekhZYkcxS2Z1dzlVcGFXVkpwN1Q4MlpHS3NrV1piYTFKS2NlMjExN3FFRU1waVV5Z1VKeDIzeS9XRkFiM3lYU2tXbThzU05FMUtCRmh4dGpidWFHdU1UUUJpeVpJbFh3UnkxQ2xWS0JTZHdXaGI5dWg5L1oyaUpxMTlvemhXOHlYaWJNNmFOb2ZGQnBDUmtmRUZkUzRWQ2tWbjRjd0JmZHNrRUdnYlp5TTF6aWFsaVNuTlZ1VWpVYjgyUnAxS2hVTFJXZWlXbXpXRWRzbUR0bkUySEhFMjAweTBXYmtkWTRxRUVPSmNkU29WQ2tWbndlTjJENmQ5akMzWkw0cXpuaTNwanJaYWJPemF0YXNuTUZpZFNvVkMwVmtRUWd6NjVmZG01WFFrYmlSVUxWblBacnVsZG94TjlPblRSelc5S3hTS1RzZWw1NS9ieHhJeWErQWtHaEpoVDlXVldKVWRWaGVDbEk3c2dzZmpVY0ttVUNnNkhYMkxDL283ckxSMnRXeFlJNHhhdXhBU3dvYVVVcmhjcnJQVktWUW9GSjJObkt6TU14eWkxa2JZckRoYndpT1ZDTXNWRlpyZEl5cUVVTUttVUNnNkhSNlBlMUNLcUxrY0ZodXQ0cFpJSU5pdUtOWWR6bEtuVUtGUWREWTBJWVk0ckxUMkpSOXBFZ2dhSUdwcWFnWnp1SFdCQ29WQ2NTU3FOekYzem9NTW5Yb2ZjOWJyeC9PUmZTc2Z2Ny9RS1dqU21zZEdzdVREVGlBNExMYWNuSnhCNmwxUktFNVgvTHg0L3k5WVZBbFV2OEcwNzc5QjVURS9oczZhRi83Q3VwNVhzZmFsWC9Ea2VFL2JtN2UveElRYmw3SW05dWxlNGREU2ZrV2tMZEsxT3hBU2dxYnJCdUc0WmJHNTNlNHk5ZVlxRktjcExidDRzM0VnRjVaQTdaWnRSSWNQK2hUTFljTFVOdXFVakJqVVpxdDhrdEtMZUhMZUZNWjdQOTFMTE95UlY1ekdIUlZ0RHlrTTB4UzZBVzRwcGRBMHJWUzl1d3JGNmNaVzV0NzZJdXVDWWVwaUhqYmYrQkhSWUlDb3Q1SUpOZGV4ZHQ0NWJlTlRzVXBlZlByUExGNWZSUzJaRER0M0NndnZ1b0JoT1pVODgvMW5lR0pIbk5pT1JZeGRQWlpuRjEvRGFPZlA3bGpMN1kvb1BQcW5iekQremQ4d2NobmNVQnBtM1k1cWFtT1pUTHpwTmg2ZFZJeXY4VzFtM1BvT2VSZG1Vcm05Z2RvbUtQdnlOQmJjT0tSUFcwc3RHVjhUSmxKb2dHN2F4bU0wNFlvS0lRYXFOMW1oT04wWXhxTy9mWVNWTS9veWF1WjMyZmlIT2R4Uk1vajV6enpDVzZtaVJvZzFqei9ERTQxamVIYkpZMnhmY2lmWEJGY3o2L0ZOMUZMQ25iKzhqL25EM1l5NmFSNGJVMFV0SFRVTk1HVVdhMy83Q0cvZE81RDFTMTVtVFV1cmE4endHMWk1K0dFMlBqT05vdlV2OHBNM1E3MHR5Nnk5dUFGU0NPRjJpY1FkM043RURVS0lBZXBOVmloT1IzUzI3Z2hRZGtZeHRGVHlRYXd2dzNxa2MxZTNzR3g5SnROdnVvaGhPVUJPQ1RmY05vNjg5OTloWGVPbmVOcWVaM0hOaU1UYXdMelNNeW1MTlZBYnRHOHM1c0l4QlFsaDdYRU9kMHpJWmVNN08wbzZFRFY3c1Fza0J4VkozTllOU3RnVWl0T015dFhQTUdOWkpmNm1NR3g1a0hXRXFRdDYySHhyQlRjLytEM3VkQWFvbXZ6VVVrQnBUNmM0OWFXRWo5alRDUFQ0REMvRXlqTkVkU0JOREs2b09BLytIZW1YWXJFSkNacEltYVpyeTV1MmE5ZXVZaUJEdmMwS3hlbEZ5WlE3ZWV1WmFZenYreVdXL3VFUlhwMTVKbWRkZFRjYmY1c2lhZ0RkOHlpaW5qMDFiZDNKV3ZJbzdmSDV2czdLeWdiSXpzMzQyYnhiY2pxMDJGTFFDZ29LZXF1M1dLRTRUYW1wb0prdkJxQUFBQ0FBU1VSQlZMeTRoREtnZkU4OUphWEY2ZStYTTRLWjQ4T3NlT0Z0dHJZQUxaVzh1UFFOYXMvOUVoT1B1N0JWc2VwL0svQUQwY3EzZWVMTk1PTW5uTWtYQjUrUjV4Q3kxbnEyRktScDR2YjVmTVhxM1ZVb1RrLzhsUTFRTW9ZOC9KUlhlaWliNHVuZ25sbE12dmRPYXAvK003Tm1yOFFmeTZScy9CU2V2V3NNUmNmOVZlV1NWN21hYWRmdm9qS1d4K2dwTi9Eb3BEeWFkL2ZJNjhCYWExMUdKUkNHYVVnUmpVYnY5SHE5VDZ1M1dLSDRiQmlHUVdWbEpRTUdIRVBJK3VOVjZzUTVhWHliR2JlK3o1Vy9uY01OS1paZ1pYWGRnbjVmdnZrZElHQWZBa0lJSWdJUkV3SkRFOEowYVpwMGE1cFdwTTZtUXFIbzdHUmwrUEljYm1nYlM4MDU1UU1rbXFacEJlcVVLUlNLem83WDQyNFhZeU5kakExd0N5SHkxU2xUS0JTZGdoNFhzSHpsQldsdmNydmJDRnY3UXlKc21kUDRiQlVvQ29WQ2NVSndhVm82VjVRMlZwdFZxS3NCZWVxVUtSU0t6bzZtaVJ6U3hkWmtHM0VURXRDRUVFcllGQXBGcDBlSTlzS1dhcm5aWFZVYWtLMU9tVUtoNlBUQ2x0QXFwL3VacHV0QUpvVXRTNTB5aFVMUkJTeTJ6QlJSYzJpZWJDTndHcENwVHBsQ29lZ0NaQnpHRFcxanRXbWs3YWRYS0JTS1RvZTN2WGVhVHRaUXdxWlFLSTZHRUp0WFBNT0U2Ny9MME8rL1J2bkpFN1oyQ1lOMkFpZGI1NGNyRklwVGxTMS9adExDajRpaXMyN1JRdVp1K2hRYnBDcmY0YUZsZmlZL3ZKRHR2N3lVNDdja3BaNTEvL01HYTZxUDZzNnV3MWhzMWtaNE1HbHRTMUFvRktjb1d6ZFZVRFJtSUQ2cWVHMVBNUmNPOFJ6N2d6UTJVSnZkbHd1SEh1OWNZd092clZqTmEwZTNGa3ZyMEVxelRMWEVKbmdRVWtxcDNucUY0clBUMmFaN2xQL1BrOHhZVVlXL1NjZlhQUk9mbmxqYVVwamRrNXQvM0g2WVpPMm1sNW43bTNkWVg2UGo2M2ttMDJkOW5mbmpDNGl1WDhxRXh6K2lMZ2k1MlptTW4zMGZ6MDVxVy80YXJkekVnbCsvd2lzNy9FU3ppNW40MVdrc25ING1SY0M2UmZjeE4zczJHNzkxWnVMTzYzL0QwTi9rcy96SGVTeTRmeTFibThLUW5Vdlo1YmZ4NmxjcjB5NXplZlMyY3lnQnhQQ3AwNEFnaWVrZWZxQUZDQXFJU3RDQk9DQTFFcGFiUXFFNHhTajc2aHcyL3ZZbXB2WThoMGQvK3dodjNYc09mUytjemNZL3BKbVFXL2thc3g3OWlKSlo4L2h3NVM5WWUxcys2eDVmd3FJOTRCcy9pNDBQanFPdys3azgrYWRIMm9rYXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyRC84Q1N5NWw1UjltTTcxN0psUG5Qc0tyc3daYU43UmY1dkxRV2orSDFTcVJtQk9lR01xbW9RR0d1Z1FVaWxPVW1pcktldzVpbUJmS3QxZFROcnh2MnJ0dFh2ME9sY09uTUc5OEFUNDhGSTJaeXJ6aERheFlYWEhFcDRodWVac1Z3UkhNbTVtdzBId2xZNWcvdlMrYlY3Ly9LWk1NN1plNXJIOXJHLzcyV3RXK1Y5VENEY1JJcmxOUUtCU25CbHQ1Nkk2L3NLYkpUMTBzazJrM3JrN3NETTEraEFudlQrUFZlV1BhTkluWE5vYkpLeTV3ZkMrTGtwSmMvSlgxUkJtWXNvb3ZSZGdhQTBTTHoycXpLTG1vWno2K3htcHFqOE52a2xqbUVzYWYwS3FqUXVNWTdxeFFLTG9LdzFpNCtHR1dmam1mQys5NmtJMS9tTVhVbmlNU0xtbUtxQUVVOWNqRVgxMlBQL2tkbmNxYUFIazlDZzRyYWdDK0hwbjRxcXVwZENoSmJVMEQwUjdGaWJIaG43R2d6RnJtUWw1N3JaSXBYOXNJVzFoZEJBckZxVWlJOG1vb0s4bUN4bXJLdmNXVWRTQXlvNmQ4aVpKL3IyWFJKajlSRW9tRUo5N1BaL3FVZ1VkOEZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODZsRENncHljZS81U1BXTitwRUd5dDRmbldGUTZFOCtMdzZ0VFgxUkpQZlM3L01KUThpUi9Wcnk0UXJHbElYZ0VKeEt0TEFCNVVGbkZVQzdLMml0dWVnanV2UFNpNWw2ZHd3YzMvekNDTWZzYktpOTg1bVh1bFJQSTEzSVBOKy9IVVcvSG9wazZiNWlXYm5NL0dyczNseVNtSTRkOW5sMTNIUGxxWGMvdi9XRWUwK2dLa2o4c2xOL25CZnJwa3lrRm0vZVlSSmUrN2tyWm5RMFRJWEtXVTRqWFhtK0w5QUNJa3BUU21rbEI4QUk5VkZvRkI4TnRReWwrUEFZWmE1bUZKdWNZMjQ2b2UwbG5zNEY3cEVCVUlYZ3JnbWhLbEpLZjNxYkNvVWlzNk9sTEtsWTJ2Tm5wMmJRQU9Vc0NrVWlrNlBhY29XaDRESmRJSm1lYVM0cFpSTlFnaDExaFFLeGNubk1NdGNETU1JSE1aaWMrb2FtcFN5UVoxTmhVTFIyWWtiaGovRllwUHB4VTJnU1NucjFTbFRLQlNkbldoTTkzZmdma3JIdWdNQU5NTXc2dFFwVXlnVW5aMVFKQnFnZld4TnRuZEVRZE4xdlZxZE1vVkMwZGxwOGdjN2NrV1RZbWRuQzl5UlNLUW1KeWRIblRXRm9oUHh5WUVhZFJKUytHRDdua0RIb2lhdEZhT0pRV3p1Z3djUEhpd3NMRlJuVGFIb1JBem8wMU9kaEJTcTZ4dnRjZy9URmpXUjhENmw3WUlLSWRBMGdUWnk1TWdhanJZSFM2RlFLRTRPa2JtL1dobzZqQ3Y2Lzl0NzgvaW82bnYvLy9VNTIreExsc2tlRWhLV0VFUkFLK0R2aWxoLzZOV3FiUzlZV3JTOVNsdSthUHVyMUc4TDFRcTl0cUJ0b2N0RmJ5dFdyMWhic0ZxZ1ZXcFJSQlRVRmxjVU5TeWFSQ0FRUXNqQ3pHU1ptWFBPNS9mSG5IUHltWk16U2JCc3d1ZjFlQndUQW1hWk0vUE02NzE5M3RUYUNZKytvM2IzODhlTmk0dnJUQldsOUlBTlpEcmozREpFRExCUlN1aysvdEJ4Y1hHZHFkSjAvYUFOYWhsdXpkeVliQVNrYWJEcHV2NHhmK2k0dUxqT1ZDV1Rhck9EWTNOcytTQWt2Zk9BYXByV3lCODZMaTZ1TTFYeDdwNW1oeEEwYSt1SGxLWmhza0ZSK041a0xpNnVNMEVwYkZqNkE4eC9UVTMvc1dBYWZuN0haMW94aEJ3YklTUmRHUVZBT3pvNjZ2bUR5Y1YxWmluUjlCWVczWGszeGw5M0cycSs5a3NzMk56RW5ESTdORURVYlg0ZWEzZWZyTE5rVzdCcDdTdlkzbkdpUDYrTTZ4YjlDcnZXL1JMdkxCZ0hCVUJEL2I0MkJtWTIxMmFPVXhIcnZ3SUFXbEZSOFJGd25JOFpGeGZYeVZQeVF5eForaVIyVk0zQStzZC9oczBMejBmVHd3OWd3ZmJqZ1ZRUGRyeXdFV3Yybkt6VC8xdXdiczFMMk5aeGNqNjdTNUVSVEFlU2lUdSt2N3pEN3RRSW9JTms5TFNsQ3dna0hZcWExbTRYZ0FuOEdjWEZkZm9WM2Y0U05tQVNIcDE3ZnZvNDczRlhZT24xYitPYXA5NUQ2NVRKaURpY05MdHA2Zi9Ga3NMYjhQTGNTdXg0OU9lWTkydzdvbDBxa251V1lmempBT1FSV0h6ZlhGeWZBMFEzUDRCSmF5VmNWOWlPSFEzdGFGVktjZjNjRzdGNFN2bzQ3OFMyaHpCK1RTSFdyL3c4YWdFQUgyTFIxeDVHOUxzL3gzMFh0dUNSTysvRGlrWVZpVlFQdHY3d0IxZ053RFg4YWp6KzA4dXlIeitlb1c1c1g3c2FTNTdhaGZvdUlGZzJCblBtZmhtM2pnczYvRnU2eHdZMUhZQk9BUW9LQ3FTM3ZoTmlMQmFsZWpySGhuUmx0RTRRQkE0MkxxNHpRRTBOTFVEVlpBTXFhVldQcmtUd3FROVJqOG5wN1U4RGFPTE5QOERyTjBleCtzNjdzVzdLUXF6L1FsNy9mOVNwWXNLaS80dmxaVEphdHorS0dmKzlHbFVyYnNPTmhZTjlkNFg0K2svdndkZXhFL05tUEkzcWV4Y05iVGNDRzJhL3RSNjNQUVVzL09uUGNYMVpDblViZjQrYjcxbVA2b2R2eHBXMkNVOWQxK3ZSUDdlbUE5Q0oyWlJMUVRWS0lZR0FDQ0lFUWdnRlFGVlZyZU5QSnk2dU0wT0pMaFV1UmNwY2ZlZVQ0RXFwSnk1blZEQUNVOHJTSzRValU2N0dEUVVmNDIvdm5hSUR0UlVacmxRUFdqdWlpTUtMMnF1L2ljMFB6TUkwaDdGMVhVdnVRLy84R2hPQ0Vpb1FBSlJDQTFNOEFFQjdlbm8rNEU4bkxxNHpReTZmaEVUU0JyRXVGUWxaR25UUDV5ZFRBR1U1UUxUejFHempkSTJiZ2NlL093YTcxanlBNlYrNUM5UC9hejAydEtpT1AxdXlOMzdRQmpRTjlwWVBRaWhKVDhKVFF2cEdxdWpldlhzNTJMaTR6aEJWMXhRQ2V6NUVYVVo0Mm9SbzJVZ2poeVVEU0NGeHd0YWR4OURVQWdURG5qUjRGQm11Vk9xa1ZSUVRMUzFJakw0TTkvMTBFVjcvMDEyNGIyb1BWdDY5R21zZENoSFI5Z010QnNBMEJtckdaVlJFS1FVRklCQ1N2a3ppVFo0OCtTaUFEL2xUaW92ckRIQnNGMXlCNitYWHNlU2hPdFRIdTlHNit5VXNXTnVPSzc4d0xwMWZ5eWxGYmNGQi9PM2xKa1NSUXV2dTU3SHFmZFgyV1R3b3k1RlIvL1l1MUNlQlJEeUtLQXZDSXp1eGFYYzNnQlRxTnorTlZVY3FjYTJadkI5ZWllcU9YZmpiZTkwQXVsRzMrU1ZzNnJSL2wwR1U1YlJqKzl0TmlBS0lkblFQR1lTdDI1L0FOWGMrZ1UwdEtRQmVSQW9EY0NYN2c3UTNnWStPSGQ3Wmc2eXRIdWxMcHdDSUFKbWtpd2hXOFFDQXJ1djYyNElnak9SUEt5NnUweXlsRWdzWHpjS1MzenlKYTJhM0ErRlNYSG5EclZnK3hXdjhnekxNLy9abG1QZmZ2OEtFMzhzb1BlOENYSGxlQUUwWm4wVEd0SnRtNE1wN25zWTFNNThFd2hXWWY5ZjNjR3VOOGRjK0wzWTkvaXRNZXE4ZDBaeEtYTC93eHI3Q1FlRy9ZZWxOSCtLMmV4WmhWZEtEQ1pkZWdDbWw5bSt5RXJmTW5ZeDV2L2tWSnZ3ZUNKVCtHKzY3YnlhbURhSFh2K3dMTitQQmp2Vlk5djBmNExZdXdGVlFpZXUvZTZOUjRlMXIwS1dVZnVBVWhwSjBWVlNuNmVQWEFFS29MS2JkR2lFRVJCUkZXZGQxQ1lEYzA5TnpxOHZsK2hsL1ZuRnhIYjgrVFF1VG81c2Z3S1NuUitDWis2NFlZbnZHNmRIaG94Mi9MTDdzUDE5RmVrbHlISmxMa25zQmtoSUlWRUtJTGdrQ1ZTU0JLb3FjenJHWmxkRm9OUG8yZjNweWNYR2RLZHJkY0dDZnphMnhPVFpLakpFcW96R1hrblNPalFwc25EcHIxcXkzRFNweWNYRnhuVzdGdi9hRDVTM0lySVJtZ00yOENDR1VrTDRUZENWQ2lIRktPUFN0VzdmcWxOTHRoSkRwL0RIbDRqcDdGWngrSzNhZjRhOXlWZFBlYW1ydDdBYzFZNVNLQXNSd2JlYU1hQnBxYkI4YmpMZTZxcXJiK1czbjR1STYzWXJHdTk5M0NFUFpjSlNtWTFCWWJvMlk3UjdHSDZpWlo0dkZZcS96aDVTTGkrdDBhKy9IQnhzR2dockpPRG1YUUNCR0g1c2dJQ1BIQmtELzFyZSt0UjNBTWY2d2NuRnhuVVlkKzhhaVh6ZGxnWnBEamcyVUNBU0NRS2dnR0k2TkVYM3l5U2RWWGRkZjVvOHJGeGVYa3lnOStWOGpwYXF2MVRVZVlzTlFOUk51Zldld01lRW5DQkVnRUNGZFBDQ0VtSDF1RklDZVNxVmVjYmxjMS9KYnlNWEZCYVM3WVErblBEaVNVS0NCSUo3UVR1clhhMnRyMjVrdERLWHBBZ0tsNXRRQkNGS1VBRlFFcUFpcWkybXdBVll2bTA0cHBTMHRMYThNR3phTTMwMHVMaTdvRk5nUkN3S3VBUHg1UWZoOGZoU2U1Sy81NFVkL3IzZUFtZ1pBTTFsRkNLRkVFQ0FJQW1SWmhxSzQ0SEs1NEhhNzA4Y1dtWVVEMDdGVlZsYnVCdkErdjZWY1hGeUhVMjdBRlVCaFVRbDhQdjhwQ0hWcDNkeHZmcjNORm9hcUJ0UnNSeGFaUFd5Q2tWOUxnMDRRQkFGTW5zMkNtNnFxVy9ndDVlTGlPcEpRNEE4RVQ5blg2K3JxZWczT3ViVytpbWpha0JrdEhnSUVnY0NDbWloWTdSNW1LQXJqZjlTajBlaEwvSlp5Y1ozYm9oVFFxSkRkcWJWdHg4cnZmUVdmdS94aVRML3FQL0REdnpjREFKcWYvQ1l1dmVSaTQvb20vdHc4OUs5WlgvOVJIVEx6YTdiQ0FYVExpQm1UQm9JZ2dCaFFFd1VSa3VuWUdMaFJTcW1lbjUvL2lwN2V2bHpLYnk4WDE3a3BRb0I0VXN1U1U0dmg1ZnNXNDFsOEN5dWUrZytNVkdLSUlRQUFLSjcxTUxaOUlZRkUrOSt4NE1abmp1ZExIcnIyYzFmdHQ0V2d4bVVQUXlrMFZZY2twNkVtc283TnNHOU9TMGMxVGRPZTQ3ZVdpNHZMV2MzNDRNTWthcS8rSEVZR0FMZ0NDTEJINExwY2NCM251dUtlbnA1dDJkd2FJZENRc1hLUFVsM1hxSjUyYkZRUVJJaUNDRkh2N08vWXpMbFJBSG9zRnRzY0RvZS96bThnRnhjWEUzOWk0NTMvaWZ0M0pKR01KNEZmWEl2UC9RS0FNZ1YzL25rSnBycUc5amxlKytNeVBQamtkdXlQS3lpYWVBM21mZis3eU85c2ZOY0dOYXR3WUxSNTZBUklBODM0VE1sNEhPM3hPQVJQQkZWbFBvakVuUWFiZWVtNm5nRzMzTnpjelR3YzVlTGl5bFFlcnY3cE03Z2FlN0h5aHJuWS8vVy80ZDdweDdlSllkK1RQOENQLzE2Qk94L2NoS201Y2J5MjhuYjgrSHUvUGZUZTFwODBHc1pLdFlNTmxPb2doSUlRS2dvaVJLSWhxUko0d2lFRWpUWVBVUlFnZW5JZ3BDMmNrREV2eXBSVWRVM1ROdklieWNYRmRlSzBGeHYvK2lGcXYvcGRUQzEyQWE0OFRMN2xHNWg0OU9tWDRKaGI2ejlLUlVoNk94VWhBREhDVUVFVUlZb2lSRW1DSUlxaTVkak1rQlI5Ky91MHpzNU9Eall1THE0VHFIYTB0L3RSVkJ6bys1Q3JBZ0Z2MjQ1c1lhZ0Z0NHcyRHdBZ1NFTXRYUTBWUlJHU0tLYkJac0tOZ1pyVnp4YUpSRjVCZWtzOEZ4Y1gxd2xRTG5KejR6amNGck0rUW51Yjkvem1qUVAyYW1qS2hCckpQREhYT0NrMy9mK3lVQk5GQ1pJVzY2dUttbStaWTR5c0FkUmtNcm1CM3d3dUxxNVBySXcxZ2FOdzlSZEhvdTZSMytMbDVnU0FOcnp5MndkZVF2OUpnNHpDZ1hXd3BNRW9RUlJBb05ORWtrSVVDWFFLU0pJSWljWWdzWTZOeWJVUnBqcXFIVHAwNk8rVmxaVUwrZDNoNHVJYWlwcWYvQ2ErZkYvZnF1SjNicndZOXdPWTlNTk4rTVhuQXFpWTlYUDhWOXNTM0QvdlN2dzRya0FMalhqWHdhM1pHM01wVE9NbENCQmtCWDZ0Ry9HT0kyanNKSkQ5WlJpWG13TTVNQkpreElnUjZPM3RSVzl2TDBra0VraWxVa1JWVmFMcnVrQXBsWkRlek9wU1ZmV1BnaUJjeVc4WkY1ZXpQazFicW9ZcVNvRzNZMkVVVnB5OHJaeXFxcjQ0dktKc0pZQmU5RzJqTXE5dVFrZ0NRSW9Rb2hKQ2RGRVVxU1RKVkZFVXVOd3U2bmE3NFhGNzRQVjY0ZlA3RVF3RUlFaVNaRHEyak9xb1BSenQ3dTUrbWo5MXViak9MUkVDU0VSSFY5ZkoyL0hVM0h6b1ZZY1FOQVZBSllSa2JxVXkyQ1FJQWtSUm9GWnVUUkloU1JKa1NZS3NLSDNGQTNzUndWWWQxZSsvLy80TkFBN3dXODNGZFc2cFFFbWdLM1p5RHRXbWxEYjkxNDhXNzJMQWxyS0ZvVHJNSTRyTW5RYlcyRlFmdHlSUlNvTk5scUVvU3A5alkvTnNnaUNBb2FNT1FMdnJycnQ2VXFuVU9uNmJ1YmpPTFJVcENkQkVIRWVhbTA2NGM0dkg0ODg5dittNWxKTmJBNGc5djVhR216RVhhb2VhSk11UUZRVXVsd3VTSktVL2FQd2pLb29pMFRTTkNvSUFUZE1vNDlyVUF3Y08vTFdxcXVxNy9GWnpjWjFiNGVnRmdTaU9KTHB4dUMyTzJGRVJYY2tUYzRMdUs2Kzg4bllXdDZZQzFCeDhUM09JR3RKMWFKcEdOVTJGcXFhUVNvbElKa1ZJdlNKNlpRazlMcVVQYkV5dWpRMUhNMlpIUjR3WXNVdFYxZldDSU16Z3Q1dUw2OXlDVzZGYlJhRTdCa3FCekZVcG4weUpaT3B2bHkxYWROVG0xRklBVWdSUVFjd3dGRlFnb0NJQlpCRlFKTUN0RUhnVXdPc0N2RzRnNEFWQ2ZpQTNDQlRrQUlJc3k3QzVOdGdINDQxUkt3M3BTUVFlam5KeG5lT1FPeEhhM1hqZ1ZRZTNsdEhta2JGaXp6aDNUUlRUb2Fna2lwQWtFYklrUXBZa0tJb010MHVCMStQdUE1c29pdVpiYW9hbHpKSGhWblUwUHo5L0M2WDBWWDU3dWJpNFBxazBUZDgrWWViOHhnSGNtdFozL2xyYVhJbUVVRkVnRUFXUlNxSUlVVXpEVFpZa0tMSUV0eUxENDNiQjczVkRVQlFGc2l6RDd0eHNEYnRXRVFHQTJ0WFY5UVMvTlZ4Y1hKOVVCdzYzdmpDQVcxTU50NmFUOUpaM0toQkFFSWpoMUFSSWttQTROUkdLTE1GbHVUVVhBbDVQSDlnY2lnam1pRlhHN0NnQWJmcjA2ZXNvcFh6WkN4Y1gxM0ZMcDdSdTZsZS8vMzRXdDJiTWgvWVZEZEpnTTl5YUtGRFRxYVhiTzJ4dXplTkdNT0NENEhLNWtBVnVHYTZORFVkZmYvMTF0YmUzOTNGK2k3aTR1STVYUjlvNm4yMXE3V1NobGpTdU5OU0llWkpIdW45Tk1QWWFtQzBlYkc1TmtmcmNtcy90UXNEblJZNGRiRGE0c2E3TlBoaXZybG16NWtrQTlmdzJjWEZ4RFZXVTBvWWYzZitISFlPRW9kWkp1UVJBMnEwSkVNVjBiazJTUk1paVpCVU1YSVpiODNrOUNBVzh5QTBISUhnOEhqakJ6VlloWlVOU0RZQTJkKzdjYUc5djd4LzRyZUxpNGhxcVdqdWlHeDVhOTN6Q3lhMFJJR1VVRFRUQVBFZ3k3ZGhFVVRDS0JRSmtVWVFzRzdrMTJZQ2F4NFdBejROd3dJLzhuRkFhYkc2M3UxODRtcVg5STZQMVk4T0dEVThBYU9DM2k0dUxhd2h1clhIWncwKytaWU1hNjlqNldqelNSUU1JaEVDMGlnWnB0MmJPaENxeURMZExoc2Vsd08vMUlCVHdJUzhjUUZGZURnU2Z6d2UzMjIyNU5oWnc5dFlQVzY1Ti9mS1h2OXpSMDlQekdMOWxYRnhjZzdxMTltTlAvL0t4cDN0dElhanAxbFNRdmhWN3Bsc1RCVUxUYmkwZGhxYUJsbGtKOVhuY0NQZzh5QW1tM1pva2lSRDhmais4WG0rR2F6dWUxbzgvL2VsUGoxTksrUW03WEZ4Y0E3bTFQWGYvNW85dk9rRE5kRzBPTFI1RzBVQVVqUllQZXpPdURLL2JCYi9QY0d1aEFJcnljd0FBUWlBUWdNL25nejBrWmVEbTFQcGhWVWkvOFkxdkhPdnU3djQ5djNWY1hGeloxTnphL3ZRRFR6NDNXRzR0b3lGWE1OeWFKQXEwSDlRVUdSNlhLOE90UlhKRGNCdUxUSVZ3T0F6V3RRMVFKYzNxMm1iTm1yV0dVdm82djMxY1hGeDI2YnIrNXZSdi9IQ0hBOVFHY0d1QUtCQklnamxkMERkaDRKSmx1SlYwTTY3ZjUwRTQ0RU5lT0lpaS9GenJhd281T1RrSUJvT1dhM1BLdGJHdWpka2FiMjFyM3JoeFl6SWFqVDdLYnlFWEY1ZGREVTJIbjluVmVFakY0SlZRSFNCVVNCOGtTVVZCZ0NTSmhsdExRMDJSbWZZT2p4dEJueGM1d1FBS2NzUHdldnAybXdyNStma0loOE1JQkFMd2VyMFczRXpITmxUWEZnNkhOK2k2L25kK0c3bTR1RXlsVlBYNWtaK2J0OHZCcVEzdTFzUk10eVliQlFPUDJ4aWQ4bmtRRHZxUW54TkVVU1FuNCtzS0JRVUZ5TTNOUlRBWWhOL3Z0M0p0RGhNSkE3azJsUkNTT25Ma0NIZHRYRnhjbG5ic3F0K0V6R1pjQzJ5R1cxT0g2dFpjVm51SE1Ucmw5eUkzRkVCQlhoZytqenNUYkNVbEpjalB6MGRPVGc3TVFzSlFjbTFtTVlGMWJjWEZ4ZjlJcFZJUDg5dkp4Y1hWMWRPN1p2THM3eCt3UVMyUnphMEpSaVhVeWEwcHNnU1h5Mnp2Y0NIZzkxcnRIU1dSdkg1ZlcvQjRQQ2dxS2tKZVhoNUNvVkRXUW9KVGhkVGUxMFlJU1gzd3dRZVBBVGpJYnlzWDE3a3JDaHo4NitaL2JvTnp3WUIxYXhsOWExWWwxTzdXRktOZzRIYW4yenY4WHVTRmdpakt6NEhIcmZRSEd3Q1VsSlFnRW9tQUxTUjR2VjY0WEM1a0c1TFBsbXViT0hGaWZYZDM5NFA4MW5KeG5iczZjclRqeWEvZSthc09tMVBMNnRaSWhsc1RNODVaY3lreVhJb0NyMXVCejJzVURFSUJSSEpES0NuSWMvejZBZ0FvaW9LaW9pSmtLeVRZcXFUVW5FcXdyK2d6WGR2VXFWTWYwM1g5Ulg1N3ViZ0drZUk3NjM0a1ZkTmUvc3lYYm50akNHNU5NOXlhYms0WlNFYmZXcjhxcUhFeWJzQ2JidS9JRHdkUkZNbUZJa3Zad1FZQTVlWGxNQXNKWmtqcVZFaGdoK1NaR1ZLZGRXMDdkdXhJSGpseWhPZmF1TGdHVTZqa3JQdVJkdTVwZkthcHRkTStYWkFBa0NETUJpckRyZW5FT2tTU1dFNU50bzFOZVR6cGszSE4wenNLOHNJb0w4clArajBJN0IvTWtOUjBiUVAwdGxtdWpabElZSjFicXJpNCtPVmtNdmtiL3N6bDRocEFrWkZubFd1THhyc2Z2WERXN1I4YmJvMkZXdC9BZS8vejFxaElDRTBQdUlzMGZTcXVuT0hXMGhNR1hvU0Rma1J5c29lZ2ptQXJMQ3pNR3BJNmpGdFJTWkl5Q2dtc2F5T0VKTGRzMmJLS1VycURQM3U1dUxLSUNFRDFwVUJPQlNCN1B0VS9pcTdUZHgvNDB6UDJnb0dWV3lOQTBneEJtZlBXcUdDRm9HbW9aWnlLNnhTQzV1ZWlNQzg4NFBmU0wwQXRMUzFGZTNzN290RW80dkU0ZW5wNmtFZ2trRXdta1V3bWtVcWxvS29xVkZXRnBtblFOQTI2cm9OWjA2ZFJTZ1VBNnRWWFgzMjRyYTN0d2R6YzNKWDhHY3pGbGMxZWlFREp1RS85ai9IaG5qM3I3L2p2eCtJT1VFczdOa0xTQlFOQ05DTjlSUVZSaENqTGtGd3VTQzRYWkk4SGl0Y0xsOThQZHpBSWJ6Z01mMTRlZ29XRnlCMDJEQVVqUnFCMDNEZ2dGQnE2WXdPQVVDZ0VwOTYyTEkyN0dTRXBISnAyOC9MeU5xWlNxWWY0czVlTDYreFZQQjVmWFZOVHM0Y0pRVE9nUmdoaDErcnBBTktOdUtKSXpWWXlXWmFoR0p2YzNXNDNQQjRQZkQ0ZkFvRUFjbkp5a0orZmo1S1NFb1FHZ1pvajJJQjBJY0hzYldPSDVMUE5rdHFhZG5WQ2lOVnBUQWhKdmZycXE0OVFTdC9tdDUrTDYreVRydXZ2UFByb295K2lmMTZOaFZyS01Ec2FJVVEzSnBpc3RaOG0xRXl3ZVR3ZWVMMWUrUDEraE1OaDVPWGxvYWlvQ09YbDVVTXp3VTRmbEdVWlpXVmxLQ3dzN0ZjbGRUaHhkNkJDZ2dvZzlkblBmcmFwcmEyTmg2TmNYR2VoOXV6WnMvNDczL2xPTkdzSTJ0ZTNabXgySjFuZG11blVQQjRQL0g0L1FxRVFjbk56VVZoWWlMS3lNc2l5UEtUdlNjcjJGMFZGUmVqbzZFQTBHa1ZYVjFmV1hCdWJaOU4xbmVxNmJtNjEwaWlseEhCdFFpUVMyZFRiMjd2QzVYTE41MDhGTHE2elE4ZU9IWHU0dHJaMjd3QnV6ZG8rWmJnMWFvTE5iUGhublpycDF2eCtQNExCSUhKeWNoQ0pSRkJTVW9LaW9xSWhmMS9TUUg4NWJOZ3dkSFoySWhhTG9idTdPd051WmdIQnVLaXU2OFJXU0tBQWRFcXBWU1g5NHgvLytMOXo1c3daS3dqQ2RQNlU0T0lDOXUzYjk2bjkzbFZWZmVtZWUrNTUyUWExWHB0Ynk4aXJBYUNFRU90ekdDWUlBSkRHUnZxdHdSSHJZOGY3V0EwSU5wL1BoN0t5TXN1MWRYZDNXMkJMcFZKMjEwWTFUU082cmxQakc5TU54MmJtMjRSdmZ2T2JIZE9uVDMrd29xS2lGa0FKZjFwem5ldXFxS2o0dEg3cnphKysrdXFHVmF0VzlUaUVvTDJ3RlF5TXZKcHVPRFZxT0RScTV0TE1Ja0U0SEVadWJpNEtDZ3BRVmxhR3Fxb3ExTmJXRGptM05pU3dBZWxDd3JGanh5elgxdHZibXdFM3R2WERDRWRCMDRMUjEwWW9wV29hemtTb3JLeDhJeHFOL2s4Z0VMaVhQNjI1dUQ2ZE9uanc0Qjh2dWVTU0pnTnFMTkRzSWFocVRpWVJRcXk4bXIxWTRIYTdMY0FGZzBIazV1WWlFb21ndExUMHVLRUdaQ2tlT1AxV1lWdEEyRUY1V3dzSWRSaVNaOGV0VW9TUVpEQVlmQ0taVFBLUkt5NnVNMVIxUzZhaXF1cG1ySTMyLzd0NFBMNjZyS3pzYldTMmRsZ2hxQzJ2WmtITlZnV2wyYURHdG5aOFVrYzdKTEFGQW9HTUZwQlFLT1E0bFdDRG0xa2x6UmlTTngrSTU1OS8vbUZkMTdmd3B4QVhWMXJSdXJWWU11OGFUQjFmZzZxcUdveWZOQjJ6Rnp5Q3JhMW56dmVvcXVyV2xTdFhib0Z6QmRTQUcwMVNTbFZLcWFicnVxNXBtcTVwT3RWaHVUV3FLQXBFdFF2dDdURWs1WFE0R2dnRUVBcUZNbG83QW9IQUovbytwYUgrdy9MeWNzZHBCSWRjVzdhUUZFYk9UU1dFSksrOTl0cERqWTJORDFSVVZGUVFRcXI1MDVyclhGYnIxZ1dZUFc4ZEdvSVRjTzMxODNGREtSRGJ0UTBiTml6Rm5LMnZZY1V6RCtLNnlPbjlIaW1sRGR1M2IzOTZ3WUlGTVljUXRCZnBJZmNrcFdiQmdHaUVwRWVuS05WcEt0R0RoTWVIZ0dHQ3hHZ3ptbzhvQ05lY2x3RTFNNy8yU1VMUTR3WWJBQXdmUHR5eFF1b3daa1YxWFNkbVpRTUExWFdkYlFFaGhCQmgrUERoYjdhM3Q5K2ZrNVB6aStQOVhyaTR6aDZydGhYTEZxeERRMlFtVnExZmpta1d3RzdGTFRjc3dZeVpxN0JrMlZaY3VYd2FYS2ZSckRVMk5xNlpPblZxazgydFpZYWdsS1lMQmtUUVJNSHFWNE1rYU9qdVNhRTNucUJDWGhBdWx3dWlMSUFRRVc1dlptdEhhV2twaGc4Zi9pOTlzOEx4L0dPdjE0dUtpZ29VRnhkbkhFeVo1ZFJkS3N0eXY1RFVOcFdReU0zTjNkRFQwL01yL3V6bU9uZTV0Z1liamlxNGRQNUMwU0F4c2dBQUlBQkpSRUZVQm1wcEJTZmVnc1VMYnNDVmtRUmFiZm12WmFzWFlNYlVHbFNOWDRDdGFkK0hyUS9jaGhsVHg2T21xZ28xazY3QnpVczJvU25CZk1LdHQyRjgxWFFzV3JzYWkyWlB4L2lhS3RTTW40b1pDOWFpemlHZmxxamZnRVd6cDJQc2lJcUhxcXVyMzJlY1dpOTdFVUlTWUErUVRKL2NvWnVOdUxMTEI3OGtVSUhxSUhvNzluN3dBZDQ3bEFRaGNieS82Uzk0NUsvdkl4V0pvUGpJVTVnemF3NXUvLzJmY05zMWsxQlROUlZMNmdCc21vZWFxa2xZc0Qzeis5dTZZRHlxYXVaaEUvdkJwcTNINzVLS2k0c0hkRzFtT01xR3BHWUxpQkdhc3ZrMkFZQXdaY3FVaDk5ODg4MUNXWlp2NGs5enJuTk5kYS90UUJLMXVHS0tVNndad2JSYmwySmF2NDl2dzhwbFZiamkrdmxZVkZXTGFrU3hkZEVNekZtVHdPUWI1bVBwQkJkYVgxdUhsYXR1d2V6b0ttek9jSHNOV0xOb0ZhNmRQeC8zelE4aXVtMFZscTFjaU5sUkZ6WS9lQjM2dm92dFdIWnpIU28rKy9rbjlyZjhnKzFYNnhlQ3NsQURvRk1LU296RlQrbThtZ0ovVVNtS3ZWNzRQQkp5eHBZQnh4cnd3V0UzeGw0eEhSZVBIb054UlVVWTVnMUJrUko0ZnZrS2pMbjJSc3lmV1lXSkVRQk5RM2UvQzJiUCtXVGhYM1YxTmVMeGVOYjJEd1pzR1NFcHBaVHF1bTV2QVNFN2QrNFV0bXpaOHREMDZkTUxSRkc4bWovVnVjNGRKZERhR2dXVUNDSXMxNkt0YUdXZEZsd0lSb0lNbkVveDg3NzFXRDR0YVB6N1RWaXhIWmh3eTRONGRPSEU5TCs3L2pwRVdpZGg0YWEvWWZ2eWFRd2NGVXhlL0RqdXU5SDRnbE9tb0N3eEhUTlhyY0NxdXV1d3NMYnZhNDYvODRuTm56bXk0ZmtOOFI2blhqVjdGVlFsQXRHaFU1MVNuYVpTS1ZBSVVFUVpzaXhUYTdqZGx3NDlKYmtadTQ1NFVUbHVJaTQ1dndMRHk4cFFmU3k5UnEvcWxzZXhmbUh0Y1lmZWRTdVhZTjNCcWs4R05sRVVVVlZWMVE5czdEU0NiY3lLbUlVRUkrZkdGaE1JSVVTNDZxcXJtdXJxNmxiVzFOVGtFVUltOFNjODE3a0N0a1FpRFJFWDh5cmV2dVFhM0xEdWFOOEhBak94NnQzbERKeXFNWGxpa0lsWnI4VHl6VmZhUG5jUTFXVVJZSHNyb2dtZ2p4SXVSTW9pR2RDY09QTTZWSzFhaWUwN1dvRmE4KzhtdkZXdTdIMTYvdno1VVZ0T3JjZTRlbTM5YXVsR1hJbFFVSjFxdWs3VlpDK090U2RvM09WSFVYa0llVVpyUnlBUWdCU1ZJWW91QlBNTHJXWmM4VjBDSUlEYXliV2ZJSjlZajYxYkc0QXhDejU1d2o0Y0RxT3lzdEtDVzdZS0tldmNUTGdaVXdrZ2hKakZCSUVRUW1wcmE5OXJhbXI2YlVsSlNTNGhaQVIvMG5PZC9US0JaZ0RPZURYWDNuSWZWbDJiQUJERnRtWHpzV29vb1ZpMERtdFhyTUNhVGR0UmR6Q0dwR1hRcXROSUdvZ1VaVlVvQTFEZjBBUWdBa3BSMzlQVDl1ZDdaMTdWWW9OYVh3V1V5YXNadVhNcnJ5YkxMaXJMTW1SQnAycWlGL0dlT0pvYlBnTDFUY2Jra3JSamt6c1VTSklMNGNJU1ZGWldJaHdPLzR1UFpTc2FXZ0ZsWXZXL1Zva3NLeXV6QnVSWnVHWEx0UmxRTTRlL3pMQlVNeDRjQWtBb0t5dDcrZWpSby9mbjVlVXRBaERoVDN5dXN4MXNrVWdRU0RhaHFSVkFtZUcxcXFkZ1dqVUFSTkc2U2hsQ2pxa09EOHllZ2VXdEV6Rm40WElzckM1RDBBWFVyYndaQ3pjTjFUdGFPbnFndlh2MTRjT3ZOQ0p6c0wzWElhK1dNdk5xNWpKMWRyckE3WGJEazErRVNpV0ZwcjM3Y0tUaE1EQ2hDams1T1ZEYVhaQWtEL0xMS2xCV1ZuWkNIOVYvdWNWaTFLaFJHYTZORFVudEozOVFTdGw4bTI0T3d4cmhLU0dFRUVvcHljL1AvM3RuWjZjL0ZBb3RCdURtVDM2dXMxbTFsMDVFWU0xVy9HMVRFNzcrOVUvNEF0K3hCbXQyQVpldWVCQ0xyK3NMVVJQQklRWjA5ZStnQ1VDa3FxejM0TUdEcTY1ZThYWWQrdG82elBDVGRXdjlRbEJDcUs0bWswaUpMbmg5TWhSRnNmSnEza0FleXZNUG9MTXRpVlFnalB6OGZMaU91cUVvUGhSVmpSclNMd0Fna1VIZi9vcWdLZ0lrbTVxT3I5M0RTWVFRakJneHdwcE15TS9QdHlZVDdHTlhaZ3VJYmZHeU9YSmx0b0FrQVNUQzRmQ2Z1N3E2ZUJzSTExbXY0TFJiY0gxcEV1K3NXSUJINmhMOXdxdlcxdVFRN0ZZQ1VRQ0pLUFAvSitydy9JNVd1eHNERUVOOVhUMGJ3MkxUcWswNGlER1lNZ29QR2VOU0xOUjZHYmhsbkxGbXZuN05maldCZ0ZJOWhTVHBLeFo0dlY3NFBDbkU0Z1NDUHc5bGhma29LaXBDUldFSWlxSWdtU1NELzN5UkNDS0lvYjYrS2VQbmU2MHV4dnlqYWt5YlZnWHNXbk5pbW1JRGdRQ3FxNnY3RlJJMFRjczJJRDlZTVlGUVNvbmY3MytzdTd2YjQvRjRidWRQZjY2ek54cWRpSVVQTGtMZDdLVllPbU02bnIvdVNsdzZwaFE0Mm9EWE5tM0F0b1lBSnR3eUV4TUh0SDNYNHNyOGRWaTNaRGJtTlZ5SmFyUml4NllOMkhFd0NTQ0tSQlFBVTJ2WXRYdzJaalJjajJzbjVPUG9hMnV3K205SEViNzA5Z2QvTUtuZ0h3Nmhadzh5anlPeU9UV3pFVmVpYmg4UTYwclMrTkVXSkx1RHlBbW4wQk5ydzc3Mk5yUW5YYWllUGhVWEdJZEdqblNOUXVpSkxWaXpaQWx3eGFXNDdzWnBLQnZvNXl0ZGhWWExic2E4Z3pNeHdYVVE3MnphZ09jYkFEQ0w0R3R2V1l5WkcrYWN1Rzcvd3NKQ3gxeWJxcXBzUDF0R1dNb1dFNHhQbzluRDBsbXpaajM4NXovL1dYRzczZC9tcndDdXM1WnR0Vi9INDV0cjhjaXlGVml6ZFMxV3JJc2hxZVNqcW5ZYWJsazVIL092ckI2NFNoaWNocVdQTDROcjBRcHNXTDBTVzExVm1ITDlmWGg4d3ZOWXRMSUpCNW44SFJEQUZZc1dvMnpiQ3F4YzBvQ29xeFFqcjczN2tmcFhmN2tWL2FjS3JCQ1VFQ1FvTlZmb1dWRHJhOEtWWlNpS2o1YUdLSHFpY2NSN1kyZzlITU5SUVVHNHNBcFRwMTZPYS85dEpFcExTMUZWVllYeXkrL0U0amVic1d6REtxeG96Y2UwRzZjTkRQOUhseUc2WUFVMnJWcU9yWUVxVEx4dU1aWk5YSUdGR3pJZmgrV1Byd1JoRDNJN0VkcTllemQyNzk2TnhzWkdIRHAwQ0VlT0hFRjdlM3ZHMFVjR0FBa0RRR0wwdXdrQVJFcXBCRUFHNEtLVXVuLzBveCtGZi9qREg5N2ljcm5tOFpjQTE1a3FUZFBRMU5SMFpwK3h0dlUyakorekZkTld2WXY3REk3RVlySGZmL3ZiMzk3OGh6LzhvWWR4WlQwQXVvMjNQWVFRcTJCQWpHMVQ3UGxxek5IZTFobHI1dnluZWI1YVNVa0poZzhmanBxYUd0VFUxSnpVSC9PRXoyZU9IajNhQ2tudDdSOVpYSnQ1NGk2UVdTbTF3dEtmL09Rbm5aRkk1T0c1YytjS0xwZHJMbjhKY1hHZEdNVmlzVDhzWHJ4NGl3RzFKQU8xSGdacS9VN0RkYXFBc3NVQ244L25lTHgzWldVbFJvOGVmZEovcmhNT05rSUlSbzhlYllITjN2cWhhWnAxNUMrVGI4dFdLYlUrNTNlKzg1MDJSVkVldnVtbW04RGh4c1YxWXFDMmRPblN6U3RXck9oQ1pxR0FiY0RObGxmVEJVRmdOMHhSY3hHTC9jQkkwNjJaVUdPUEJ2L1VnQTBBUEI0UFJvMGExYTlwMTliUDFxK1lZTGcwMDdXeGNDT0VFREp2M3J6V1JDTHh1N2x6NStwdXQ1dUhwVnhjbjFESjd0anZGeTlldkdVQXFMRk9yZC9xUE9QQVNHcDNhdWJLdkZBb1pCMFlXVnhjaklxS0Nvd2FOUW9lejZuWmRpL2VmZmZkSitVVG13ZFFtbkF6SzZRczNHelhZQmluQUxCeDQ4WVVJZVQ5aXkrK1dKVmxtWTllY1oweG9wUWlHbzJlZ0E3Nms2aktxM0hEelRjODh2U3kvMi9MNzM3M3UrNXNUZzBPa3dWc29jQ0Vtc3Zsb3V3SnVQYVZlV2FoWU15WU1jalB6ejlsUCtaSlBRT3RzTEN3M3pTQ1E0VVVUSjdOcXBRQ2dHMWdIb1FRVUVxeGRPbFN2UFhXV3crdVhiczI2ZlY2ZVNzSUY5Y1ExZEhSOGVBVlYxeXg5YTIzM2twbWMycXdIVVBFVmo4eks2QjlUczNjMnM3bTFJcUtpbEJSVVlHUkkwZWlzTER3bFA2Y0ovMXd4L0x5OGd6WHhrNGoyRjFiK3BjZUpRQ29xcW9tM0RRMkxEWGh0bkhqUnZoOHZ2K054V0s5ZnIvL2R2QUpCUzZ1Z2RUYjJ0cjZVRUZCd1QvUS8vVGJnYUNtRVVJMG9lOElvcXpoWnpBWVJEaWNuaW9vS2lyQ3NHSERyT2I5VTYxVGNtcHRkWFYxMXVQRG1WTjJUVHR2NWRwVVZUWC96aEZ1QUJBSUJQN1kwZEhSSFE2SGJ3T2ZMZVhpY3RMUmd3Y1ByakltQ3RqWnp4NWIrT2tJTldiQmNRYlVuRmJubVZBckx5L0hpQkVqVUYxOWVrNzlQMlhIY2RmVTFHVGJpK0RvM0V5NEFlbitvQUhnUm5OeWN0YTN0TFIwUlNLUmIvRlRRYmk0d0JxRit2cjYrdFVqUjQ2c0c4U3BKYkpCamMycFpRcy9uYUIyc252VnpnaXdBY0RZc1dQN3dTMEwyQ3k0bVFtM2JIQXovMXhZV1Boc1kyTmpkTml3WWZNRVFiaUlQNlc1em5WcG12Yld1KysrKytjTEw3eXdFZjFuUHdkcjZiQ2dObGhPellSYVlXRWh5c3ZMVVYxZGpiRmp4NTdXbi8yVWdvMFFnckZqeDJaMWJRNi9iVmdINXdnMzQvTlNTaWtkUG56NFAzYnMyTkU1YnR5NGI0cWllQlYvYW5PZDhUcjJ1NVB5YVZNcGJmT1diYnVldm1ybS9TMU0rR21mL2V3aHhycThUS2hSalJCS1JZRlFVYUJVbG5USW9nNlhwTUl0cS9BcUtmamRTUVE5Q1lTOVBjanpkNkV3RkVkNVhoVFZoWjBZVzk0R0VuMzkzQUViQU1peWJNRnRFTWZHNXR1eXdZMGFINmRtYURweDRzUVAxcTlmdi95YWE2NXBWUlRsYS95VnczV3VxYnM3K2NURGoyMTdmdjRkZjQ0T0FMVmVBaVJBWUt0K1FpTUVhYWlKaE1xeUFFVVc0WEpKMU8yVzRmVW84UGxjQ1BqZENJZTh5TXYxbzZnd2hQTFNYRlFQTDhEWW1sTElrbmphSDRQVHN2TE83WFpqN05peGpuazIxcTJ4SVNraEJLbFVLbjBVU1ByLzAvcllsdW5jWnN5WWNiQ21wdVpYYjd6eHhoRy8zejhmZkxVZjE3a2h0YTA5L3RENGYvdXZsdzgyeCswN0N0anoxRXlvMlp3YWRJR0FDZ0toa2dFMVdSYVE2RXpRenFBTFkzTFNVQXNHR0tnVmhGQldtb3ZxNFJHTUhWTUN0MXMrSXg2STAvYUM5L2w4RnR6c1lMT0hwWVFRYXVUVDdLMGc5Z2tGYXNKdDkrN2RlaUFRZUt5bHBlVndKQks1aFM5bDVqcFR0ZjJlKzNIejBmOFg3LzY2OWhQdkRhV1VOalR1TzdxbWVzS2k5NUc1VGFyZmVXb00xTlNCb0tZb0luVXBJcWlRUkZLUjRmZTVFVENobHVkSFVVR3dEMm8xcGZCNVhhaC85cC9Zbmo4T04zN0c3L0JkeHJIMXZtZXc1T245YUlwSmlJd2JoOFUvbVk0clM4NGlzQUhwYzl6R2poM3I2TmpZdkJ4Ny93YUJHMldkR3dCYVdGajRiRjFkM2VGUm8wWjlYUlRGei9LWEVkZFpaOU5VYmV2Mk54cWVubnIxTDV5V0dkdVA4MDZBOUIzcDNRYzFRZ1VCVkpJRUtrdkVnSm9NdDF1QUpoS0lMaGNDQVRkeVdLZFcxZ2UxUU1BTlFFWGRjNjlnWlVtVkk5aGFuMzBHdHowdFllbGp0K082a2w1cy9kRWF6THZqRFd4KzdDS1VuVTFnQTRCUUtHVEJiUkNvOVlPYmtXOWp6M096Z0diQVRRZWcxOWJXdnIxNjllcERNMmJNK05qdGRzL2hMd1d1TTFXSlo5ZGgvSVBBamFNVDJMcXpEYTFKRjZiZE5oUExQNThIRjFxdzdEL1dZUHZvS3JqMnRLQXBsb0JZTldiMWVTUFZMYis1NXk4eFpMWnoyTU5QYSs2VFVxUUVRalFRNkNiVVJBRlVUZWswbWRRQlFxZ2dFNVNWeXZCNlJHZ1MwTzEyR1ZEelFEdTBIMzk2TG9aTzNZdnlDOGZqaHo4ZWp1dUMrN0hrUDU3QzJrTWFZbGlEU1hzdXdlTVBYNFMrTUVuRmp1Y09JZmp2czNCZGlRVEFqMmx6eHFINkt4OWllK3dpWEorb3c3eXZiRVhrWjdkaTZXZk9BckFCNlkxWEE1V0hUY0FSUXN5TEVrS0ltWE16YzIyNnJsTzJ2NDExYmpmZWVPTWhBUGUzdGJWOW5KdWJld3VBWXY0eTRqb2pkZWdZY05jc2JQNlpIOUZYbjhIME8xN0Nwcy9PeEhVQkFFaWdWUm1EOVgvNVFuUHk0LzEvTEp0d3o5dGIrNWFxSkJtSXNVZDVKd2hCa2xLa1FLQUtJQm9JTklHQUVvSG9va0JBVXhyVmlJQ2NQQmYxU3hUdHJRbTBkSXNvSzNCQmxRVW8zblQ0NlRuNk1WYnZDdUsySDgvQXZNdHo4ZkZqeitMbWIyOUc1QzlYWWZGZmJzV0UyMytOWlNVMzRPVUY5aEdxWHJUR1ZFUktHQ2VYNzBjRXZXZzlDbUQ0TU54eTE3OGpPTzRzY1d5bWNuSnlNdURHUUt3ZjJPek9EUUJoNWtyN09UY0F1dUhlYUY1ZTNsL3I2dW8rSGpWcTFFMmlLRjdPWDBWY1o1eEtxakRUQ09XQ280ZWhPdmtHV21NQUFnQWdvbVp5eFV0N3QzKzQ0WktyZnRHRWdiZXo5OXBDVHhWSWg1NkVRQmNFUWdXQlFKSUlKUnBCVWdjbGdnaVgzNFVSdVVFb1hpK0NBUWtwUlVEVTcwTnhnUXYxcjNXaCtrdWZ4N3pMaHlFbjdFWE9iWmZodXFmWFljMC9wbVBLWUltZWZxc2JSQUFxWWtrQThHUGlaLzFuVHlocWg5dDU1NTNYRDJvRFFJNlN0UHJsM0N3YjE5Y09Zb2FtV20xdDdkcy8rOW5QR3Ivem5lL3M4bnE5L01oeHJqTlhSalVoWVd4ajZVbHBENy95Mk5xWEgzNXVXNDh0bjlaLzd5ZVFwRUNLV0ZDRER2UkJUUlFKbFNRQ1dSS2dlQ1hxN2traDJ0Nk56clllQkNLNU9ML1lqWnl3Z3FSYlJHY29pUEl5TnhwVUwyb3ZISUdjc05kTUpxR3FSTVh6UjNzeDZMaTJZditBQmtCQ1FEbnhEOXNaMXdZUkRvZUhCRGQ3V0dxK2J4eU5wSnRBWTRvS09pSEVkRzc2SFhmY29kOXh4eDMvZStEQWdiMmxwYVUzRTBJbThsY1IxNWtxcXROM2R1MDVzdjd1VnhyM0FvMnFRejR0dzZVUmdpU29CVFNORUdpZzBFRkFCWkZRU1NCVWt0THRISW9pVWdrRXZrSS95djBLZkxLTzVvK080dDJtZkV3WTRVZlNJNkV0TndjanF2TVFyWGdmcjBaMTVqdUxvK0dvaEVqK1lHZFF1QkhKbDlCNktBNGdsUDdRMFRoYTRVUGtKSnhtSkp5Sk56RVVDbUhjdUhFWU9YSWtoZzBiaHVMaVlrUWlFZVRrNUdSYjdVY1ZSUUd6Mm84eXEvMDA0NHoyRklBa0lTUkJDREhQYys4dUx5L2Z1bTdkdWgvMjl2YXU0aThmcmpOUnFxNnRmdkdKTGY5VE8vbC9kaU56ejZmMVBHWXVhMFVlTloyYWNaWmEraGM4Mjg0aEdJMjNJbExIZXJDL1RZWHNkU09VNDBlK1g0TGk4Nkc0S0loOG40SkFRVDdHamFuQkYyY1BSOTJxRjdEaGtBcWdGenNlMllvTkdJTWIvaDhKZ0FTWFMwS2k3UmhhRS8wOTFKVExoaUg2M0hhc2JWU0J4REZzV3ZVTzZzZU53cFJBR3BBN1hteEFmZUlzZFd5bUFvRUF4bzBiQjBFUUhDOUNpUDJ0NWR4U3FaUlpNV1dMQ3BRSlRVMzNwZ0hRdnZTbEx6VUIrRTFUVTlQT2twS1Ntd2doRS9qTGlldDBTOWZwdXgvV3Q2OWYrK0diZTdEc1RaVUpQWk9PTG8yQkdhVjkrd2xJdWo5TkZ5aEZTdGRwVDFLRXp5dENVU1RxZGtsd3UyWGtqMUNnSEl6aG5UZmpvS0tNZ29waG1IMVZHU3JLdlVnRVhEaFlXb0pBd0kzQTU3K0FCNDgrZ3lYLytXc3NpRW1JakI2RHhiK1pqaWxHeUR6bCtuRW91K01wVFAzUFMvRE1FeGVEYlI0Tlh2WHZlUERRYzFnMDk5ZFlaUFN4M2ZlVGllbFdqNlA3c2ZKSFcxSDJtMXV4K1B4Ly9iRTc0VnVxVHJSNmUzdnh3UWNmb0w2K0hnY09ITURodzRkeDlPaFJkSFoySWhxTm9xdXJ5OXA4bFVna3pGMExoTmwrQlYzWENhVlVNQzhqYXlrQmtDbWxpcEhKY0FGd3JWcTFLakpyMXF6cnZWN3YvK0V2TGE3ajBTZmFVcFZsVmpRYTYzbjBnZjk5Y2RzZGR6OFZSMStCZ0IyUFlzUFFkT2dKTnZRa09rSC9Jb0VzQ1pCbGticVV0THZ5dUdWNHZhNk1pWUw4dkFDS0NrSW9MOHV4eHFUT2xJbUNUNzFqc3lKenR4dm5uMzgrUkZIc2Q3SHV6ZWJnc2hVVktKTjdNNHNLT3RKVlV3MkFPbWZPSEczT25Ea1A3ZDI3OTYycXFxb2JSRkdjeGwreVhLY3M3RlQxbDNlK2YrQ1pDeSs3OTJNRFVuYVh4dWJVa2dSSVprd1JvSzgvelhCcVZCU1lJb0VpVWtXUjRIYkpjQnRROC90Y0NBWTh5QWw1a1ovSHpINVdGV0RzbUROajl2T3NBeHVRSHB3ZlAzNDhKRW5xQnpiN1d3WjJWQkFFSWdnQ1ZGV2x6TDZGOU42L3Z0RFVxQlFSelF4TkFhaWpSbzE2ZmNTSUVUdGZmLzMxNjNKeWNtNENVTXBmZGx3blM1VGk0SkhXWTA5K1p0cFAzbWhLejNteVVFczRYRWtIbDlZWGVwcVRCR0pma1NEdDFHUzQzUkxjYmdVK2IzcjJNeFR3SUJ6MklXSkNyU3dYSTRZWFl1eVlVcHlDaFZMbkx0aUFkSHZIZWVlZEIwbVNqZ2R3L1NxbWhCQnFoS1pnblp1WmQwTjZHNzBHUVAzb280L1UzTnpjOVJzM2Juempzc3N1KzZMYjdiNkp2d1M1VHFoQy93ZGRYVjFyL3ZyWHYyNzc2bGZuZFF6aTBneWdFUk5vS2VNWHNYVitHck9iQUpJa09lNzhORSsrdGUvOVpJL3pQcDJIUko1VFlETlZVMU1EV1piTkNpaU1OV0NPSWFvSk4rTXRZZUFHUFMzclNDU3pnZGZKdlYxOTlkV05BSDViVjFmMzZzaVJJMmRLa3ZUdi9CWEo5YThxbFVvOXYyUEhqazJUSjA4K3dBQXRHOVNTRE5SVTlBMndteEdIdFd6Rk9NYmJmSjFRUlZGZ1B5RFNoRnB1Ym03R2lyelRlWnozT1EwMklMMUR3V3p2TUM4V2NFNmhxWEhEcmRDVXFacGFybzBKVFRYR3ZWbFBvdHJhMnJjQXZOL1UxUFJDY1hIeGwvaEp2VnlmUkxxdXY5blEwUERNeUpFamQ1bS9QRzFBU3pxNHRKU0RTOU9aaXhxLzJMTkN6ZXYxd3V2MUloQUlXSHMvQ3dvS0xLaU5IRG55dEN4ZTRXQmpWRjVlbmdFMzgyYWFvYXJkeFJtZ3MrQ1dTcVVvSWNRODhOSmVXTkFad0dXNE53Q3Bzckt5RnkrODhNSi9QdnZzczFmbTVlVjlpUkJTdzErdVhJUG4wZWllNXVibXA2ZFBuNzVqMTY1ZEtwTWZZM05wN051a0RXb3E4MHZYQXBxNUVrOFVSZmFYUFhXNVhCbFFNNWV1bUhzL0k1RUlTa3BLckdYR3AzcEYzc25VU1Z1WWZDcGsybW1uZkp6NWRvQnhMSHRhMUp3cmhRRTRHSEN6R24xTjJBSFFtNXVidGVYTGx6ZWtVcWtYTHJqZ2dtYTMyMTFDQ01uaEw5OXpHbHlPQzVNcHBZMnRyYTJQTFZ5NDhFK3paOC9lZi9Ub1Vic3I2M2RrTjlMTFZYcnQrVFJtY2JIVFJuWW9pa0lWUmVtWFMyT0J4aTVkcWE2dVB1WExqTGxqRzRKeWNuSncvdm5udy96dHhFd2daT1RoMkN1UlNEaUdwb3g3TTRmckJWdDRxZ0ZRamZBMEJTQjE3NzMzSnUrOTk5Ni9MRjI2OUlWdmYvdmIwME9oMEV4K3FDV1hBYlNHMXRiV0RjdVdMWHZybDcvOFpTK1RHM1BLcGJGaGFBcnA0NFZVUW1CR0N4cEEra1lGQVVwQWFQcXBTa0JCUUNtb1RnRktDWFFLYURxRnBnT3FScEhTZ0pRR0pGV0toQW9rVWtCdmlxQW5SYkQ3b3dNQURweFZqLzJuMnJHWmttVVpoWVdGanFlQURISGUxRzdnekJONzJSTkM3TlZUeTcwQjBMWnMyWkw0K2M5L3ZyZTd1L3Y1Q3k2NG9Nbmo4ZVFTUWdyNHkvdmNjMnpCWUxDdXBhWGxEOS83M3ZjZW56MTdkdU0vLy9uUFhnZUgxbStucHkybnBoSmlnZERJcDZXZmk0UUlFQVdSaXBJSVNUSnlhYklNUlVuL2NuZTUzWEM3UGZCNmZmRDUvQWdFQXdpRndzakp5VVYrcEFERnhTVW9IellNVmRVaklFbnlXWGt2enZqSmcrUFZ4eDkvaklhR0JqUTFOVmxUQ2gwZEhZaEdvNGpGWXVqdTdrWjNkemQ2ZTN1UlNDU1FUQ2JOVGZXRVhlcXM2em94TCtOeE1xY1cyTWtGaVZJcUE1Q1JQcnZBdXFxcXFwUlhYbmxsYW1GaDRUV0NJRnpNWC9abnY1TEo1UFkzM25qamhhOTg1U3Z2TnpVMW1TTk5yRU96RndneUhKb3gwOHlNUWhIemx5aGxLNTVtb1l3dEVHUXJFcGp0SEdiNFdWWldocXFxS2xSV1ZwN1Y5K0tzVzNKU1dWa0pqOGRqRHNlYmVZZWhGQmlvVVUwbHFxcGE0YW5aOTJhNk5TTTgxUWNJVDVNQWxJYUdCcVdrcE9RRkFOdjI3dDA3b2JLeWNyb3N5NS9uTC8relQ0bEU0bSs3ZCs5K2RjS0VDWTBNek5pd00ra0FOUloycWdFMXE5cHBnSTJheFFIanVVbVo1NjRGTkRPbnhoWUovSDUvUms2dHVMall5cW1kVFVXQ2N3WnNBRkJZV0FpdjEyc0J6dTEyZzMwUzJPSFcyOXRyQVM2WlRHYkx2VkZLS1dIUGVEUFBkMk9lbUNuRHdWbUFBNkNNR2pYcWRRRHZ2UERDQzA5TW1qVHBVci9mZncxd3dvOTU1enExWVdkVExCWjc3c1VYWDN6N2kxLzg0dEVzUUhPQ211bk9yR0YxSTQrbTI2dWRCdFJnVmp6TjU2dVRTek9oWmk4VW1PMGNadU50SUJBNEorN1BXUmVLMm5NZWUvZnV4YjU5KzNEbzBDRzB0TFNndmIzZEdxQ1B4K1BXQUwwWm1ocEQ5RWdtazFCVjFYUnZHZUdwc1hoR29KUVN3OEdaNGFsNXNTRXFHNnJLQUpRYmJyakJ2WHo1OHNrRkJRV1hTNUxFVC9IOUZFbFYxUmNQSERqdzZ1MjMzNzdycWFlZVNnMFJhQ2s3MEFDMktKQUJNOTJjZDJiRFR0YWx5YklNdHBYRFBra1FEb2VSbTV1THdzTENqSFlPOG1tZGorSmdjMVpUVXhNKy92aGpORFUxb2FXbEJXMXRiUVBtM2N6Y1d5cVZnbmxLQ0FNNFlxd01KT3cxQU9Da0xJQ1RBY2liTjI4dXYraWlpeVlIQW9IcHZCL3VqUDBGdWFlenMvT2xiZHUydmZ2RkwzNnhqUUdTRTlCU1dZQ20yb0ZtSG54cWhwdDJsOFlDemV4UE0xM2FRUG0wdkx3OEZCWVdvcXlzREpXVmxTZ3JPL2VDZzNNQ2JBRFEyZG1aVVZSb2JXMUZSMGNIamgwN2hsZ3NaaDEvMU52YjYxUllnQUUyWXJvM0ZuQk1nWUVGSEZ0a0VBMEhaNGRjeHZYZWUrL1ZWRmRYWCt6eGVDNEhVTUtSY2xwaGRxaTd1L3VsdXJxNkhaTW1UZHFQdmlyNFlFQ3o1ODVZVjJjUE9hbDVJQU9UNDJWZEdqdnI2Umg2c2syMzdNeW5XU1N3OTlSeHNKMkYwalFOOWZYMTJMOS9QNXFibTlIYTJvcTJ0alljTzNiTU90dXRxNnZMT3R1dHQ3YzNBMjRPN3MwTVQ4MHozd1lDM0ZBZ1ozNU0ycjE3OTdpS2lvcUwzRzczWlJ4eXB3NW1QVDA5Mno3NjZLTjN4NDhmMzJnTEY1MkFwZzRSWnYyQUJtc1BCeWdSQ0JSWjdoZDJzaTdOTEJDNFhDNXIzdFBuOHlFWURDSVVDaUV2THcrUlNNVEtwMVZYVjBNVXhYUDJYcDVUWURQVjNOeU1mZnYyNGVEQmd6aHk1RWhHYUJxUHh5MjRzWWRYc25CakFjY1VGd1lDSERIQUpqaUVxWklOYXJMdFk5TE9uVHRIVjFWVlRmQjZ2UmNUUXNaeUJKMDQ2YnBlMTlYVjlkcWVQWHZxTHJyb0l0YVo2UXlZQmdLYXlnQk5wWlNxUnFYYzZuRTBONld4UURNcm5icXVVMEVRNFhhNytnSE5IbnA2UEo1K1EreG02RmxRVUlEUzBsSlVWRlNndUpodmxqd253UVlBM2QzZGFHeHN6T2gzYTI5dng3Rmp4eENQeHhHUHh5MjRPWVdtV2NKVEMzQU9PVGpDT0xpTVhCd0RPQ2ZRWmZ6ZHhvMGJpeSs4OE1MYWNEZzhRWmJsaTJGdHh1QWFvbzZsVXFuWDJ0cmFkdjd6bi8rc256RmpScHNCSUgwQWQrWUVOZmFFalg3RkFNYWhXYmt6Tm9kbUZnWTBUWWNvaXZENXZPendlci9RMDRTYTMrL3YxOHBoaHA3RGh3K0gxK3ZsZC9oY0JwdXBBd2NPNE1DQkF6aDA2QkJhVzFzSHJKcXlvYWt0OXpZWTRNQVdHV3lRTTUyY0dhYUtkcGc1QVE2QU9INzhlUG1SUng2cHFxcXFHdTMzKzgrWEpPa3pBUHo4YVoyaHVLcXFiMFdqMGZmMzd0M2I4STF2ZktPcHJxNnUzK1NJTFhUTUJqUVdadXovbzl1QVpqazA0NElkYUdiWXFhb2FGU1VKQWI4dkEyaHNiMXEycXFjNXhGNWVYbjdXbk1yQndYWUNGWXZGck5DVXJacWE3czFwcjBJVzk1WUJPRjNYN1ZWVVpBbFQ3WkF6UTFVckwrY0FOc24yZDJKRlJZVzRaczJhWVNOSGpxd0toVUtqWlZrK2p4QXk0aHpMazMyVVRDWS82T2pvK0dqMzd0Mzd2dmExcjdVME5UWHBObGZtNU02eXVUVHI3OHhtYk52bnlJQ1p6YUdCclhLYXgybXhoWUZrU29Va1NRaUhnaGt1elF3OTdRMjNiTlhUREQzUGxkNDBEclovd2IyeFZWUFR2Y1Zpc2F3OWJ3NjVOd3R3cG5zeklXY1BVeG5BT1lXcTluQlZ0QUhPNlgzUmZ2M2lGNy93WDNIRkZTV2xwYVhEL0g3L2NGbVdSd2lDTUJyV0t0NVByUks2cnU5SkpwUDFzVmhzMy83OSt3OCs5OXh6TFhmZGRWZVBDWmhCWUpZTmFobnZNODRzSTh4a1EwM1k1b21adzAySXBRaVhBQUFHR1VsRVFWUXRtREV1alRLTnRrZ2tVNUFrR1htNTRheTlhWUZBSU1PbG1hRW5kMmtjYkVOV1YxY1g5dS9mYnpYMDJudmVzaFVXc2dGTzA3VEJBR2QzY1NiZ2lBUGtCQWZJRGZhKzZPQUdoZlhyMStmWDFOUkU4dlB6Qy8xK2Y0a3N5OFdpS0pZUlFzb3g2RXJ2VTZaZVN1a0JUZE1PSnBQSjVuZzgzbnpreUpIV3VycTZ0aTkvK2NzZFlBNG1HQVJtMlJ5YTQvdjI1RDhMTS9RdEFLSnNNY0IwWndBZ1NWSS9vTEY5YVd4eG9LYzNtVDdFb1NDL1g0SEFxVGV0cEtRRXc0WU5nOC9uNHk5V0RyYmoxK0hEaC9zVkZ1enV6ZDdVYTA0c09MZzNxL2VOQlp5bWFTYll3UFRDd2NIRjJTRm5BWXFCM0dDWFlIdGZzTDF2NWY5Ky9ldGYrOGVOR3hjc0tpb0toa0tob05mckRTcUtFcFFrS1NpS1lsQVFCRDhoeEU4SThSRkNQQVlJelFNQXpNOEpCZ3pXMmpoS2FRK2x0SXRTR3RkMVBhNXBXa3hWMVdnaWtZaDJkM2ZIT2pzN284M056YkdkTzNmR0Z5eFkwTTNBaTlwQVJnZUFtVzV6V05wZ2wvMjh2V3d3WTBGbXVqTm1TeG9GQUVWUkxKalpXamd5aWdPeUxLTzdKd2xGVVZCU1hHQTEyOXBkR2xzZ0tDb3E0aTlPRHJaL1RhbFV5aW9zSERseXhOcG5PdFNtM3FFQ3p1YmlXQWMzRU9RY1ljZE1Qd2dEUUUxMEFKdjlZci9PUUJjYzN0cmZ6MGlET2J6UHZoM29zb1BNZm1WemFmM2VONDkrZDRMWVlEQXozN2Z0MUlBb2lxQ1V3dVZ5WlFXYXZlSVo3K3FGeStWQ3hiRFNqR2JiY0RpTS9QeDhGQlFVV0FVQ1daYjVpNUtEN2NUcDJMRmpPSGp3WUwvYzIxRDYzb3laVTN0NG1oR21HdTdOZ3B3eHpXQ0Zxc3g5c3Vma2lBT0Vzc0ZPeUFJemNRaGdZd0VuT0VCdElNQU5CRGM3ME9BQXNZRWNtcDdGcmRrVCs0TkNqQ2tBVUZ1WWFjTE1LZ1F3RmM2TUhSdWlLRkpLS2R4dWR3YlFKRW15SEpxOU9CQ05kY1B0OFdEVWlPSDlLcDVGUlVVb0xTMUZLTVE3ZWpqWVRxSmFXbG95M0JzN2tqVlFhMGcyOThhMmg1alZVNXVMQXpOMGI3bzNlMDRPRG81dVVPRFpxckZPUUJzSWJzZmozSTRIYk1jVGRqb0NqcWxPWmdVWUF5OFdubUJ6WnVhZjJUQ1RYUTdFQUkyeXVUUktLYnhlYjFhWFptL2g2SXgyd2V2MTRmenphcXh6MDB5WGRpNGNMOFRCZGdicHdJRURsbnR6S2k3WXE2ZE9yU0dwVk1weWJqYkFRZGQxNGdBNDFzbkJGcXJhM1p6OXozWW9aWFZpRHVFdUdRUnMyVnliUFNTbEE4QnRJTURwVG45bW9EU1FzN1AvUHhsZmkvMnpMZFNFM1puWmdFWnRsVTdyYkQ5ZDErSHorUVpzdEdWblBOczZZZ2dFZ3BneWFhTGwwbmkxazRQdHRDbVpUT0xRb1VQOWlndHNlRHBZL20wQTl6WWc1TXhpQStQazdHNE9XUnlkSFVSTzE2RE9qQTJIVDBhT3piWlVodzRSZVBZTHRpUGRZUWVaM1pXWnpvekpuMldGbVIxcUp0ZzBUVU13R0J4d2FKMXR0RzA1ZWd6aGNBNnV1UHdTbEpTVVFGRVUvdUxpWUR2OTZ1bnA2UmVlc3RYVG9iU0gyT0ZtbTJCd21rZTFRNDV0SFlGRFhnNDJLTUhCMldFQUp6YlVmSm9UekxJNXRxRVdFdXlBd3dBQWd4MWM5andaa3krRExXOW0zME9iQVRPMmZZTmQxRzNQcFdtYWhuQTRuSFcrMDZ4Mm1tSG53Y1B0eUk4VTRMSkwrSXJhRXltSlB3VC9tandlRDZxcnExRlVWSVREaHc5bkROV3orVGNUY0hZSE4xRDExQUZ3bE1uREVSdmdxQTEwNWtWTm9GRkt6Y01HMlY5b2c0TEtDWVlEd0d5b3B4blNvVUxPWVMwaWJDRWwrMjh6M21lY21TUElISUJHN1V1M0J3TWFlMm1haHB5Y25INWIxOW1qaGN5aDlhS2lJa0NxNXk4aURyWXpWejZmRDlYVjFTZ3VMdTZYZjJQYlEreUFzOCtlWm1rUGNRcFJxUWsxVGRPcy9Kc1Q2RXpBTWE3T2hGMC8xODVBYkRCb1pRUFlKd1ZiVnNBeEo3LzIwYmdQZHJBNXNneUkyY0xNZmlBek42amJROC9Cd2s1N0RzMjhWRlZGZm42K2RheVFIV2htSG8wUHEzT3dmYXJrOVhwUlZWV0ZrcElTSy8vVzF0YVcwZi9tVkVFOUhnZG5DMDh6M0J5YmczTndjSGJZbVhCajMyWkFqLzI3VTVIQ1lCMlg3V1A5NEdWNzZ3Z3hCNkJsNU5CWXFObkR6c0VjbWoySDVuYTdrVXFsVUZKU2t0R1BscGVYWnpYWnV0MXUvaUxoWVB2MHl1MTJXOGN5c3dVR3RvTEtBdTU0Y25BTzdzMnBUY1FPdW40RkI5UFoyUUhIL0preVJRblcxZldqbWhQOGh1TFVuTTdoWnovR2dzdm14dXp1TEFObWJJdEdsdnlaWTdnNVZJZG16NkdaVXdPcFZBcVZsWlhJeWNuSm1CcVFKUDVTTzVYNi93SEYxRm5aOGoxaXh3QUFBQUJKUlU1RXJrSmdnZz09Il0sWzEsImRlc2NyaXB0aW9uIl0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJNQzNwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJmMVp0aVc1bFdVTC9rc3JvZ2tpcUFSb0Rpb1o0L1VnbTU5ejRpaU5SdEk5SXZ4bG1sSUwzbnV1Rk1BdTF0b1ZydjMvK1grKzYzLzlyLy8xdktta0srVzNsbGJLelgrcHBSWTYvNmozNzc5Mi9uenVkUDQ4LzhYeTUxL1B2Mzc5K3VzYmdiK2puL3g5NCsyL3Y1L08xL00vZitBZjkzakd2Mzc5cW4rK0UrcWZDLzM1QmhmK1BZRjM5dC9yN3cvSjE4UHY2MC82YzZHMmYvOG9yYjUvZjlUeDUwTHp6d2ZQby96NW5mNTZyTjlmL3Yvclg3N3dza29yYzZNWXdvNVB2TStmNmZjRThmZTc4L3M5ZndZKzkvQzFIbU1zRjM4OThmMXpNUmJrWDE3dkgzL2Y5OThYNkY4VytSLy91djU5OWYvNjE3OHRmdWgvdmg3L2JTM0xuelc2eTMvOWpTZi8yOWZqWDdjSi95SU9mejFSK05kdjNDSEYvM2lkUDcrL2I5WHYyNyszNjBoaFMrV1BSSjNGZnY1eEdUNDRXUEo0ZnF6dzYrVjM1dC92K2RYNFZlOStUN1o4M2ZNZS9KcFBld0s3OGwxUGV0YlRuKy9aNSsvNVRCNHhoUjFlL2c1aGhuaStWdU1iV3BqUmZVcitlcjd3eGhaWHJPemJEUHRpNjFJTWZ6M0xjKzdienYzbVU3bnpldmhvZUxpWVcvM2YvcnIrZDkvOG4veTZ2bSs2Uk05ZC8xb3JuaXNvMXp5R08rZWZmSW9OZWI0Lys1YlBBdi9qMTUvdHYvOG1QNGdxTzVqUE1sZGVzTi9qZDRtUm4zL0tWano3SFBsYzV1K2ZDajNYdS81Y2dDWGkzcG1IZVNJN2NKY241cWM4OXh2Qyt6eXNZMldET2s4ZVlncURIWGh5RG91SFJGNWlDZGNiYXZEZS9NejduTStHSEVyd3k5Z21OaUxIZ201VmRxaXpXU2xsNU9kTkZSbnFPZWFVY3k3NXpmWEtMZmNTU3lxNWxQSVdqVngvNDV2ZS9KYjNmZXZiM2w1alRUWFhVdDlhYTZ1OWhSYXhnYm1WOXJiYVd1czlYSjBiZGE3VitYem5LeU9NT05MSW80eDMxTkZHbjRqUFREUFBNdDlaWjV0OWhSVVhabUtWOWE2NjJ1cjd1VGFXWXFlZGQ5bnZycnZ0L2lGclgvelNsNy95dlYvOTJ0Zi8yclUvdS9vZnYvNEh1L2I4MmJWd2RzclB2WC90R2wrOTN2Y2ZsM2cwSjlrOVk4ZENldGp4MXgxQW9JTjdkdGNucGVET3VXZDNDeWhGRGp4a2RtK3U5YmhqYkdIYVQ4amY4OWZlL1hQbi9xLzI3Y3IxLzJyZnd2OXA1eTYzN3Y4Zk8zZXhkZis1Yi8vRnJpMzkzRHc3OXROQzEvU09hQitmNmFGZS9MNXYvdmpyYng2cDdwN0w2SG4xa1dkZXFhTWk5NzdmRjRmeWNObVpZbjkzdjFOWU82VXZocFRlSzliUWE4Wk81YStOc2Q1N2JOYzhzRFp2K3VwVDhGclBkcW5penBVMXJuMitiWS82MUw3ak84dkhoM2R1VjRtNHlCRXdaWVZscjJGekU0eGYvN2hvU3l6QnlPL3FmYzMwM2pQdzFud1hieHZZMGR4YS9ZbytPbzc3WXNPL09ubVorTDVmcVd6RDJobWZIc1lJdmV5TVJ3UUlQTHhsbmFPdHROTllMZk9jdVlYTXBuN0lFd0pVcjRFUlhwWG5DcW4xUFYvZXVlYjFmbThyOWV1MWpQWStYMEVvSXErNVcxOGRPOU16Ky9IdVozQ2hOMjA4d1hzOTdCNHVvdll2NTQ4djFQeWw4ZDFuVC9IZ2RjZTYyVS8ycnFlRW9JNVVTd2hydHZmRncxUldaQjNkdWNvN25sMTR6VmxIaWp6TllBay8xQUlkd0g0OXBha01uMUw1N2Z6bCtaWEpvOFZudDd6MnF1K2VIMXRjVUpGNWYzM3R3ZDUrTWRZNzl6QlN1dG1kOTVsMXphVVhXdC9kZWNiOERsNXZmVWhQV09OYisvbG1yeXU5Kzd0NGlxeDQ3UGNwNzNkdmZNSEx6OHhSMm14WXlQZDk0c2F2enBCdjlndWREM2ZKZGFQckc2ZjI3SW5FUFN0Y0kwMWVrajhpdCtvKzloZm5qWmNiM3JPbFhka3lkaTZ1Kzlzam9Wbzk4WWc3c0lNWWx6SkNyU0d4L1JPUmFDbjB2VldudVQ3V2xsdVArYjBvM1U0RnVZajM3clBpZFhkZ0M5QzV3YzY5TGgxWHcvWWdGL25DUG9Ua3hTcHFGbmZ4L2R0dXdiL1hOOC8vZjNwaHM1Nm5aVFM3M1RFMmZYZ1liM2kvMkhkZUk2MXJMRjRtM1BWTHJHRmlEenNPS2JjUmUvdFFjT0J1VzJOZ21DYmJ3Zjh3Vm14VGIvRWJvV0Nwa0tuVTN0d3ZmTk5DTXdjN0hWSkJxZ2VHQjdBQXNwdklGelp1YllUanJldkxBMlVaZS9LWU55L2xEU0pyMitabXQ2K05UajF6RlV4YlExYjd5bHZkZjdGSTkrQlJFS0cxUUl4ejhyRTNIRDBzV0krZXhoeiticXYwOWFDMDJpYmM1NDVlTGN6R005MnJwcktScjRhdGlieDFmN25MZzB6c2pxbGFxN1FXTUZBcGxkcnZ2TGdPeUw5aXhQWWNEeVlaUk5YQlZ4R2JJaTVlNmR0UC9saFdWZ3ZKU2JraU1hM3hrYlhxTE9sN0VOUVhGVTF4UWlFKzNqUnJUQkhWK21Jd3NBWCtMOFRCNXM0K1o4UWZvTHgzVGhnbDlCZ2wzOXc5THBUM2V3RjZvUTlzZHJ2ZFl2UVQrTVhiOCsrWSsxMnd6YkgzdDk1alloZmkzZG8zSzR2Q1U5MjVZVTE0aFRsQi9yRXNsdnZDek1YTmpzeGNucFI3VFJqcThLUTNJSU1kTHFDSHV3dUxneWZJZzQwYWhlY2N1d0ZXeHV4bGxZU0hBRVRVbVBKNGNrVFVKMnBYc084VDNMcmJmTit1TUxIM3JPUERzaURzdlBsdUdBM1cwVjNFcDdFay9VWXZMcGE1cE1ETEQyMUw0c1ZRSUM1MmYvNTRYaXhmd2dFTlJHVy8yTitNU3FMMGZLNDJibzZ3aDgwRjl0VzRZNHQ1cnJjTzFCem5zSEJ5dURLRUR1L1YwZmZZNTUxS0tNL0h2MnY1VUY5TU9UOHhQOXhGM0R2anhhRlpHNXVYRTUvQUFLWStzRTY4YnVVdlRENWVBdUY4ZTZxajNCT0ZCbVVETmpGeGVYd0ZiVVlpTXo3andXV3ZoUnRwWGg5bm05N2FlbVpWMFFoV0Z2SEg2bUtHZmVmQk15TmhyNUx4ZklNbmEvVjQzdlcxV2E5SEN5S3c1eG5SRnN4NUx3RkJ3STY2L0E4K0d5ZVJ0SWpOVmVUYkJiRFBXN0RTN0ZoVDBsNFpwRnVNVVFOS1lIa2p0cFJYeTFoUlZpYS82RCtDV1ZyR2tDTSsrR0YwclFxbnY3bGJTWURSa2p2T1pWelNndzlHOElZUlpzVUF5VlhDOXVJZG1VSmxrSjVVUGtES2hpdjBnWWdqSDBYUDlXSE1jWWhMYTMwOXFPVVJwWFhqejlhSDJyZHYrWUg3UXhLaEVBVVFrR0NtTENieXhZOGhBN21pTkI4cnpSODM5dll0MTFzbkYwY0pWd2U4N2JleUl3cmRNeFl1ODFiZXNONVR3SUF2akJxMnIyYzgyQXg0eHc5UitmYis4Q0s4SytnQTRJSVJ3b2hqOFlCbGoyNmQ3V3Y3Z3gwTkVNOUNLRUZCS0M2QzhHMFdQN0o2SDc0Qng5QVJodXZHQ29SM0RGejBERHpqM1dOUkZWa3NTQUtQMnBDRDJZb2NXQlB6WWNBQk9Ed1M5OGFWWWtqdzdSSGp2M2paamRGSndDVllJVGRhZU8xajlNZUdaUDM5SnhyS3picC83NUdma0F1N2dZWlhEUGVGN2VVaURTZ3hwRVRsUlZ0QkZHOTlYTlZieGVkR1BDdTdFU2FlVDBjTGF2eGFqZ3BPeGcxaTBGOEFPeVlVQlh1ZlVQQUtlQSswbGdzQXk5Qlp4SGgvZ3hYTEdLRGVubmV5K3FrOEQ1Z25nVGg1SWxaUWczYTlFL1BMT3BaUFUrbEs3YWNDSDBabDYzc3JlYlQwRnFBVzBvaWZIamp5K1FEWXBqR0NxcmlpM1R3WFFHdlA5dUVBRmV3RjZzR2xjR0hVRkNlUGlSTTVndDJ3VDAvSEZVajlVRHBzVlB0dXR2RURmTU9Obm5JMW5BWXFnM0haQmJERjVvQWZzVnFaalgzQU9NMTM1MllWZzg0LzhYMlFYY3dsL2pHT3dpYmphUkhBZENIdFNGbGNRVU1PbW4vVGdpRUNWc1E0b1VBcWNvQktsSXhqdUpWdGRBaVpQOGdETkFFdUwySGdsYTVibUlOb0taTVF4M0dXSGhkWGdhWW85WU92QmdLK0dHTitQSlNXbG55UzF3c1pnY1gvSWNaM25lbWFGVE8xVmU4bXdjZER4L3VOMEZYV1RjU1IwVXpFSFMvT1ZvTlhjcGh6QXdyeGlZSEwzQ3c3TnFpVks3SUhXTGdHL0FNN0k3MW9PU3Yxdks3eWc1NkhoZy9EK0FZd05nUVB1UHNoZWVLdG1yazVxcFVnVFB2cTZCUXdJUmVjV0FJeklBZ29QcThGT1lZYUpZZ0hkMEh5SjJDVkhaL0lGWmoxdzNOdnZBSGZPVngrWFZpbXg4akpDeVg1eDllUHZ5NTFQVEtHOWZzQUZ1VHZINW5IcHYzdEo2Ly85ei82cno5NW5SL2RvK1M3WWd4N2F0aWVDSnFjWTJKT1lTbUk2SVBSaFphQzlMRGZDR25MRUlDWEhTcWlrZC9iWHZOSUs5Ymh4ZTIvOCtBQWRMVCtZeVYrMzRCRitDMlY5MEFaVE5ETnphS2F6eTNuVGhjQ09QRnlvTCtBSG1GdFhpQXI2b082SHVUSFBrSms4Z3NkMkYySGt6SHU3S0M0SFVCWC9mUERNMStMN1VHNzN4VUVkZy9NQU1VT01zOGN2VFdrWmVEbWNXOTR1dyt2SkU2TGdNUTNkamowRFJBZlJqb3VjSERCR1dPQnNac05nY0dBaHhlNENLWm1LYmduZG0wQWNnR2JQR3BNY1dnVEVxaDFwTHVCYWhOeTNPTjFieTRGcWNHUGJSWm5vQzJzQk9hUGp3VEpJSzQrUkZ3WVZvbEhHYkFqckxEUlQ0aGpiM3VQdmRhbzMyWG9DdUFxb0ZMUDBTelVEWjRjV0JBWU5adGJFbWF2cy8wTkdaMDRwcG1mTU1TbjdEUFVHMk4wZi9tcWNHdUFKZENndmtwSmlobjNCUHY0S3A0NUQ1eCtydHh6ZGhGWVNWS01oQ0dhK203czBvSTJMNjU5VFRRU1NsamZJVHBpalhDV2NUenBHOUQvUGxnMWVQNkh6TUNTeDFmeGRqc0hIQlppMVdTUkQyNityUEZnMkxqekIrd0FqZUJESUFqdm01OThLQVIrQWxTR0NQWENZdDBpL1RkTTlMNjlBVjVRUlNKdzZ3UmtYeGVxSGZSVUJidUJ0SDFmKzRQSEFPOXhZNWphRVZoZ0lkWXN3bmcvWE5QODhEdm9pQnl4QXRUWnp5dGovUnF3SDZ6K3BNQnQ1ZUxuaDFHS0cvekE0K1hJM21ON2VDM2VuMzFubFo4TUZvcEE4WTRGRGUwRnNiRWZRRTJlQTFvQjJVS3FOb1JpcHdSNVlVZUN6QXVVOG9DY01KNll4QWc5d3RtaHVDelhEZVNTb2x6RlhjZkRBWFIxbkJtbUpibzNwaWd3TGVnZnNBR1V6dTQwT0lBc21wL2xIYll1YWNKOU1XUGh1WDc4ck9MdG9KYTd2MndUb3BCNWQ1VDFabFZ1VER1MjFUQUdEQjZ6Q1ppTE9NQ2huMDI4WGtxbzdydzZJQnRFaGs0VWJTK09DSGpUV1V6OENZNUJ6b1RvWWVqaE14MUVDQk9GVGtpMjJNNEhhQVhrZkRSc0NUM283eDRzUFJzeThLcUdIOUNXRFBERGMyRW5CTU0za09jYjJBQnNUeEFuZWowZUwyRE1XYjN5WG1VamU5c2NBekNzMyt4U3llOUJoMi9HdjdGRU9OWlZXUkxqYnM4TFRPa2JHN0x3ZExPQWpockVtblcvUU5aWWlpQlpLdm5CaVJvMUFhYkEyTytXSDNYemhNTEV2RGpZd3JPM0ZjTXFBRng0Q2VqdlpRM3ZjcTNxSG1TbGNIVE1Sb1hpSkw0SUJJMlNZdkFOc0czaGpZYVNBdHlJaWdXaTlPb0gxUW53ejQyS0hDWVBtTUpVOFNCcnZTQjZsQi9oNEw2YlZjS0pZYzRDQ2kwWkc1V05CY0hOVzdXOTN3RWhoRzdzQzRJTDlrSFV3ZGY1L011ZGcrT3pZcENxZ0kxR1lQa1NXTmVRNHR3dk9CZWJuc0V1aGlSUVhBUzhYNENZZ0YvQUM1YU5QT0NLdFZ0VG1NRHl1ZXlvVGw4R0NtS29idzRxY3BlMnNtNExFUXlWRndQNnNUZ1lEVVFNdFVSY3VUZXlFUnFNSE13R2FoQ2xWR3c4SGtxdml6MWx6WkNNelRibWdUSFJoT1BicjVNNkFhQXZzUld3Qm16NUhTZ2RjQ0RmMjNIdXJDRzYvQUVPY0pPZjRmWVhIS2tDQVg0MmN1Sy9UVUpwRU1ieFo0TmJJZnBZZm9CV1FMNXF5TytFTFhXOERsNElLNDJkbCtrQkdQazhKQUtXaVZLOXo1VmcrVGphdHU3ZHE2ckFOcUlEckdMSUlqak1icm1CS3dOZXQ5bkhKUDJHb2Y3alNmN3hJTmVmSjBFUCtyR0tCbjBFMVh5SzNVRkl2N3hPZkplMWhnMFhTRFBZQzhWaWRlSmROSjYzRHYzS01GZE1yczVBRXQxUWJYNmcxSUpBWTdaaGM0akFnNmJmZmNsWnZ2TG4xbmp4OVAzejl0ZmY3eDgvd0sxb0F5TEtBcDBGN1N2ajBnRzZCbG1rUWMzb21ORS9CYlBINTJ1WXROd3ZURnFTaWhiSWZ4TkFnOEZiZERGbHNDOE1EUG4rak9nbTZhQ3hJSmdqdHBVdE5jUjlGbjIwY0NVOFVPQ3hmRGZNTnFBVi93YWlEcytJUU9JQWoxUm1jYWI1T1NMellzV2hWTU9jNE4vQ0dwZHhqZFlibmdIZmNvUmdISkFsc1AwRHQvNXRmLzdyN2JuKzJoOHQvd0NCNEN6eWcvK0YzK0JaRjZRSEd3YnN5TFZnT2xJNFVjVWJwTERuMFU4ajZTakx0YkNRYStiS0MwekRCZ0hsWWRNYjJzYzJicnhVbEZzY29MNm1pQXQrTm5CNzZBQVB4eGFEVEZoWUxPUytIeUQ5MHpvdktNM0xFM3M0MEV5TWJOREh3MGw1NmdlSzYxN2lZOS96cW8veDhyMzdUMW11dTVRNzdxckZFeGd2dlB0RUd5RzFrcTRURTRPWHlScll1eE9kVG51QU96NXN6RjVWNW84Q2xIcE5IQ0hLWFRMd3B3Q1RFSVEzd25OQnFCQVVLSGRmVDNCdEIxNk42L085VlFXdWZDTHlUT3dydXJrMEk0anlQV0RBS0JSbW1MWHBFU0tNbTB3UlVJSGx1Q1Zhc21EZUh5dUUxUVVsU1lDZVZlSEtHM2YwakF1RU53d2FHTjFIWmhkcUpOVjh4MmQ4R0JRTWJPblF3aGhpVWRrTldBL2o4SzlCbEtYeGI2dUVkU0hOTUdtRG5Ed2prZzFkZ0thT2IyWWM3YU5aNkJXeWdLeGxLTXFlMHFHeXNaUEdwa1BTbmlKVkkxMUd6bHBubFg1N1d4dE9RQWdIcW1oUWQ3T3JyQ0Uvelpla3B4aGhRK25pdXNERmNaVGdLL2pLVlJzVzJEVDMvYXBMb3J4dkYwWFlUQVJNc3FPQ09JcVYyc2J3c3pOQTA2NVMzRkJsdkRyUGlud1lRS2g0aW5yamJpclVxT25raGlRS1JJKzNpUk1VQTdQN01zdUNnWTN6Qjd3Z2VSR29rbVlBOEVNbzZoVkVRaER1bGNGUCsyQTE0T3YzYmlRYVVpd0kzem5pOHlGbkgxcXc4Ym52QjVUaEpoK1dISk5UOEpoVHhKYkJIK3JzUE9xNGpTMFhWZzI4T1NlMGMrQWpqQUZEUW5HdllHTjR4c2RGY2VHWXpGWnJpZERRQzE3OExwZGQwYTA0RGZnUnEyaUFrNFZQT0dXZUZ3K3dZaDlyNTJXQXc0MVBPck9HRUppb3h0NWY0Snh0M0NFMGJyaGtMM2xVMEUweUFZQVRPK0lYUG53c1duaVhiNlBhS1R6b2Z0WG56VGRXZ05LYVY5MjRiMURZbDJ0Q3NjRE1DTzhOOFgxZ05pdHh1N3FCT3hEdS9EN2dINU1uY0RVdzJNMXRBQXREM1dueE1qUTBaY2NRNm9DdHdEd2x0UmlTZ0dEK0kzUmZzVTFQaHRpKzBFaDBialhFUndlUVZvc2dqU2RmQVMxeVlUZGVlRWltOTZ0MTI1aUNEREsrTzdnVWZ3cnZpMGEwUUxJYkMzaFhjekdGSmZwKzBQN2tSWkJnby9PUEllMG5KYUF6QXNVK0JoMHkwZzNPM2RLQ1J6ZGw0bjdNOVFCSmNWTy9uQkpMbks4aEdETGtnUkZwaUJ2YWJqRHhSSStCSlZKWUVGWXZFcGtRVVNIZUQ1SEZ0Y016dExwUVg2U3FYeGlVa1JBRVZnRi9OdlBocjF0bkFMaUlRcldGSEdKM3NSY0w4OGJydzlJU3VBaWZlWnM0ZUJhVWFGKzZTendIMndTSGhvYTJwMFlBUENKeWcwL3lFWGJJTDZ6dzQ0RmZTQ0FmUUdLNWIwYnVRZjVnUlJ6WkJYcGNieXFEYjQwSi94NzhSalc1aEtIbkFxb0VSeGovdUxHendNY25MK0g0L1Z2aXB4cWdXeXc0K0tpYXQ5ZWNpWE1OdjJoMHFrYkpid0J4bnR1ZzI5MTF5WWFsMEg1WTJtNXhQWGxHSlFIbHVNU01ZS0tOMFVSV09oQnFwaStFYm5YTjFwMXJ0K2FTR2d5SkFQaVVaY05oY1MrTWNZakJqRW9HUkZTd1pQOFA0UlBuLzIzZE1BaDhNR09ySS9BaG9vV1ovOTdYZVBhZEowK0s4VzhtcGRDeEpkbXl4Q2ViSkdXZkRURmhGZmNHNjBNUEJDYi9manNFOHNjRDQ2VTR4bi9lL2NGVFlDbnJNSTJrU0p0clN5Y3FBaitCZE1TVGhHTFhhOCt4Ui9OK3JZZnhYcCtGTGJWalAxSFIyOWcxUk9NRi9KZit6OXVkdTAyREFGdDRPdXVCRUR3UTNuUGh1d0JQRjhKZkUzZ2Y0SVE1eDhzVUF3SjREM3dxZnROMFg2eVloMSt1RDdNWmtzOHdOL0tCUWdCVnh0RFdYUHpiVDZZdllpaTNBZnp2WkFsOTE3TWdmeTBIK0pnSGlUZHdQT0NDc1cyNDFsWngxWERrKzJLSHh6M2h1cmp6cmFpQk5iV3ZrbzErdGg0OGhkbHIvNGViWFArNFN6NFNBVWptM1lFR2FMVUxEOFpENFRDWXVMc09UOG5uOFYvQS9NdDJBQTdteWZMaGZDN2diUnpZNTR4dmVqNFVHb3ZzbXM2VGpmM1hCL2pidHYvTGU4WWFRUDRzRFJ3REl3Rml3b1ZrVGZHSjZXQXlHOXVDRFVIWlFaZEdrYnFrNWUrN2gvWEMrdlN4TDBnNldvbFV5dEFOT09LWEkyWVZNWmJzakNkQzVORkY3REc4NTMyQnYrQTVKS2RYNUMvcXZrenhLWkQ0YnpZQUlpU016bFdhTnF1R3pqaUNGQkZZQnJvcVg5RUdoWm54UkRqdzl5OVFXaWFROFNyQ3VmRUhtcU9WRTRxTFA4VWxRNUFiMmdRVktDK1diVXYvYnBPRnoxR0NabUprUDloUmRIYysxNUJjR01xQnd0enhYdWptTU04SzFvVE5taHpCaEpaM2M5Rzh6d2FBUlQ0enRaQWhQMzFqUExBb2x6NXZtT21ZK0lOOUloRGNqMlhHeDZmNjRXNHhsU2JKd0NhTlp3UTVyY0x5c3VLc25RVmxHYVRSOTJYQWNuMG1ia3J2WEFWbmhJaU1lbWRaRlR1QzZaOW8wSy9LWmZMcTIxZ1lQamF6UWRVOHZrWVN1cjRUeGlQd1hpYlJYK09kNFBScFRka1RQak5VOG9yZXNaWGJJQnY4MzJqWlNRVWE2Q3JyYWV3UHFMWUI4aDgwZnhnOWovMEJFTEd6Y24xY1NHZGpKcVprakNQU1ZVSWhpREFTemNydllPWTRocThIdkVnNzlZbHd1ME1sUHJqbGhMc1ZUR1FHcFVXcjZmZ1paQzByS1ZQSlI2WndhOXorUzVnU3J2Mll6bEE0VFRWSGxwMVZnU3hiaHZDTGFZSDd1NVVqM0RzTmdCNTcyTER5TDh4UlB3aGdCdFVDTFo1OVJlQWxaQ0dEeE9SNG90MjNJWGxKWklodkxTdkRxMXFZNlFTbjJFeUFDK3lETlRTK1h2UEo1RDJtNlJ0MExCWFRHY2FvOFMxY1RFdHV2WU4wVlN5cytjUEhyRU9WWUlOZ2p2UWtCSjM3NDIyeGtkZnptSFNva3gzQVdJeGpXOFBQKzhLanVPTWI0SU1MaElDSUFIQlJhTVRydFdnbWZnQXpBQW52SFBjRlJ2QmJxSk5xdytzaGpMTjNKQjhvQmwrdGVMWnZRZUdXZ1k3OEdMSlMvLys2NDdtZnlVejkweERpb3lUb2RjVHg0TEFnL2pIaGJzVmhpVjJER0NCSCtIU1RnUG5GVTZNQmo5OFB4a3UrZmpYOE5ONW5BblhhKzVqNkJDV0M4WEEyUXFCUWpBTHhMbENXdUZHa2x2QlhKOWxkQVErZ3laR0tNT3JpVVlCd0E0dUREdDVZVThnQ05HcURBU3JZTytYNFlMYVEvMmNOOXEwY0hnYktRWW5CNFA2NUVKaUpQZnBiamtIY0QwQkt0NG5vWDhidnh4VWp5cHpMNFlxWUdmalJCL1FCNUpna1MrOER3Uy9YMXdjWUtpMWVDU2tDSWdMU3A3YnpPWWtIeGRtNm9CdWptdzB5Z3preGozbGpKdzJyOFB3WStyb25oaTNrb1o1dU1XMHlWN3RNdTNmTE9VQ0NTR1FVdExlbDdSUm5Md1AzM1NEaFNVekdYOHIrMHZGSGpPVUh1TTNscERSK2JQN0J1ZTRIQk1iM3Y2YVIrcjJNMG94d3ZMb0JNVFJlQS9xTzBsYVVITitiSVNuV3ZTQ2tCaTd4aVR4L1J5eXl0VXlnRi9CQnJnQ2h1azRCTlVDTHI0RGg0YTVKTk5KTWVrUlVKUFZYVHplTnpnRmFVNDl2d2lJaWdZWWhlU3VVdmNSa3JBNXZQWUJJMGJEY1l4WVJRbnhGODVQc1RyQktSY3FLalZZTnhoaStoN1JCcnhLTHNWV2NTTVhaWW1DeExqaTdjcTlmREtDVUN3c0NyVGdMRmtvK1A0UVJnT2dCL2pDL3JBK0FBNXVCYU93RjhBY0NBcUVtR2phd0pwZ1M3aHRHWFNCL2ZLSkpBTmxOUlJSV3g2RVpOK0RkYmpsQ040akJicUhYVm9weHp3UytFbTZNdjczNEJVK0hHRm1PdHdZdzRzRk9mTUhhRlRnak1tNGxqd2dKbSszV205RUFxeVFnR080WXVDaGVoSzNkMjByZnVBQUZ0UjVCNFBkU0g3SDRIK2dQQUc3cXE4UGxBK3hyak00aWxjejZXRHRpNlZHMFhNRDgyZ2N1aEd3K3hnQS85dVhCcVBQS3JHUnNRMFdDa3FOZ3dMSnlGcTJlOVFQUW16cWYzSVJyWVJMcTFhQVBrSU1ialc4dzluTFNveDlXRVhPSDgrTDN4cDRNakg5OVRmbnZDbWZsZmdLYzIwVFc4YjRqWHRFUTFYbVg4UDZXTUJzVndIWkIzVzVqN29BdGtDTW9CRVNVZ2hsQlNCR2NXNS95R3ZaK2tKNThJWmEzRjBMZVlEd3NVTG9iajlqUjduYkNFam1mdEJhMElxQjdWaXhpa3RrTHNhakpVdlBGT05lejJKWEw1SGREaTRlbEFZY1ZRU0JBRWF3S3lHNXVFSXFBUWJMQVhtQUxjQjVJc01WU1pSbzltWmVSUVpacytkN28xUnJzY0RReXRBeWU2VG0ybVFjNG82Vi9vby83TTBzeEFhdDgwWW9qci9kZE1JV2VyZUVTTW9kYWNJbzMxczJ5aHdTQTJQR1lpUnRuQXhQY2x2NEJDbnZkRFU4Q1dNMElHRVJ0dGdzTGJFUkdlSmg3TlErRlBxTG5HTFo2U20wQXl0V0VOSStYWXNaNkEvQkFoVkNqOVZoU2NHUHVNQWlBQ0o4SDZHRFdMWnJiUndicVFoYkJUK1UrSmRrWnNqMXcyaGJJWTdBTndBRDhkVVliRnkzZ3llT2FXSWVOQi84c21RSlUxMnJBUWIyTTNDSVhnekhmSVJHc3RlbDYxamRYby9pbXdaRHFWSkc0TmkremY1dDdmNERLOXZaaTZHcytJRHVYR0E2QUlOekJNT1g5amZHcjNMOTNISllWQ3NuTnY3SnFMMDhVNzdSUHJTRWdoMGV0cHJjTTJRd2xQT0NkTUtVR2kzQWNpYlY5bXFVTXhnaTNWZWdBc1g1cVF5K3NNcFRLekUweUNtbHBPbERBU2dZeGlMY0hZbVJFeitvQjYzYkFRUjBFanMxN0UzSTF1blVYRDd0V1VUME1NRGZNMnpJelh1M1JqbjI4UGpDaFdTZG9jQTJ2MExSZFlMM0JUc09WbGNOVmVYYkFON3EydDZVVkpvWUFZNy9rUE1TZWEvbyswTGREQTVCa05CYy9oSERMQkxKNTcySlFOb1lUdVYyc2tmZ0llUVludkJWUVBqSkVKQmpEZkRBZ3dMTStoNldURmVqRzZrSUYrNHVBRnhZWkV6YjdBeUR1YjduMkN4UkZiZ0EyWnJSYTNOTTBtcFV2Z0IzaklkKzB3SEVhY0R2NTBSUGJUMzU1TEdReEh3VDJvR3RUSjQxTzdveHQ0WGRTcmpWOGVLWUVlOENXM01naVd4V01WdFlwU2VhS0FsM1E2N1FjTmdmcklRM001WEkva0JaV2hFdmkrcE5PYW9mT3ZyQVh0NFdsNzdES3cyenVsRHVlY0hzM2pKaGVFT0ZsTmVTZnJFUFYxa2JyUmZqaUwxZUwwVFNDekplZzVjbXlhYXRXMUFSNWk2V2UrME1KY0R3Zy93Y0VCUy9PMll2MXRuR01PTS8zUmErbjRSS1RaRHdRV0FBRDJ3empyMmd4Z0xWalNpVk1qQVc4MHZydkh2YmZuMVZUYlREelZ5TVJiaFpDN3d3UVp6L0RaWmhMYVR4MW1LZzlHS0Nua0tCKzBEUTBLV0NacGd5bDUxTyswR1JCVmpKTlhBZG1Ca0lGQTQvcENtd0NnQWhROWVpcXpCQWExZWFudnYvcXFmNDgvbC9KalQ4dk1QSmwwZnc2M3dJcEhCdUZtQlJjNllrQ2hjT3RjenN4M21DVUVvcWJtb0YxSE9EM0V6TGp3Zmw2MVhkMFBJckhrVEVBeWR4OFNzZ0tsSHQxMDEyc2dyeTk3TU1OMTFxditCV29CL01HQjdNb3NLT3EyWVA4VDR2cUJDalZOSElDL21KdThzbGdKK1N2WWVzQVFCYXZKUFBxa05NTUdKbFkrRzRjQjNka08wRDY2VWI0ZmtwUWZsVnN1azZBblJVMXI3c2FUelhiOGF6YjZrRTRMRitZRFNkWjhnVUJZTjlnUmV3WXptSGpBbmx6WEhFQ3lHUFo1MHdnbmhNUldzYWVIMnM1Z1IxQVZaYm13Nyt4YXZsYjEwa1BRRnh1cUhUYkp0T01oVUFzc0grUHhaTGhHMko4bnE3OEl4bjExNk1kMGpST1U4bUZoRXR1VDJ6OXMwSmxHUWxvL3JpUDBIbzB2NkkxSHZoTXN6bTV6aUFWVXZqNXMwNDg0dXFYRnVqR3dUYXd1dVdrMVlMbFZYaE5pQXQyQmM2RUh3WlNscHdOQ2NrT0FpNGlXL0J6M2hIT0JBYStEQTdNZitUSlhPWHh5NkQ5YzVYLzgyVitVT2JGb1lsc29rYjVRWTRPMjhERUE2QlNNTXp5enZITFZvbS9oQ213aHBGWnhWQnV1OFFDNjgxYW5DUkNBd0ZqUHRFMXl4NEVJVkNiKzFldkx1ZEZzd0xNQmljZnNSd3dDQUFsUUJQNkF2Y01tbGFXaDFkRDlMRmFzb01yS1hRNG5BZEVpSWdpaWpDQS9QNWFmVjVERWMxQThuZGFackNTMnR3aGZZYnlCMUNwVFB3R0YxNUdPSU5PMDRRRmFONW1rLy9wcW8wT3AvMUxPTlAzV3pZWWJJNTJKeVRRL1lpamJMTmtKcGZTdEpRQlMyTWR2dVd5ZVJvZEttMWo4VnpzbUc1Z1dNTkNza0R1UFdhUzJ4c1BBMzBYaUdyRy9YSVIvQU9Zb2dQTit1RVcxb1ZEN0VMZ0JhOW45T2VuWWN0V2pHS2NnL1VWclUwNDlyT2EvbnZITzFjdk8wVVArRGFjTDVRWHNIbi85SE9mcEhnL0pGTmptdUl2NEcySjJIRzEvVFV6S1RWM0RmQ01acFBZNWJidUNlZTAxSHh1Q0NPNkZxcmRWY2JPY1VDMkpKZzNlMW13WllrTW9CMUVqZ3V3akJta2lnQmFZR1kwNXpIcmZVUlR2M0VwT1hIVzMxNTgzQlVlUE8yQ1lUMStYN1BraEZkQWhJOFh4VWppUW5oM05nTHppRU8yL21GZUZyN3hxaFhrcjc0OXVNME9vUVF2c1Y3TE5FblpBOXFDRmJFYWN6MW1IaXhtZk15K1ZlUHQ3T29ET1k0NjBQRWZxd01xdjMreWhHRndFYlg4K1FDVytBdmF3YWp2MzRMWk9IQk4yelVSdTN0TGFSQXZaQmJNaEttd3pjc2FJOGpEampnUkMxOTdmV2Y4UUkvc0t5eENYdnZsWW16NytsanhhaTJMelNSWlBwdngwYmZ0TGkvT0FlLzE5dnNFVlgydUIzS04yMnRZbTEydEFVSEYwVHN3TUo2Mnd3M1JSVjU4V2M5a2p1WlRwbUlwa0M0QlNZVGdQbmlhaWRtTDJDalFLMWJpQkdhbXhkNUFMeE4xMml6OGVRbWdKTU5LcGxUdmFtMEFVTHNBWTRWWXRoeFptd0pJKzdSKzRLenZUNUxsdDdzWEx0UTBtWjRudlBCUGxobWJ6MlpJK0FNcktWNkRackhoRnYxSTBvSEttUFFuVnd0ajd0ZmkvejJ1ekRmYk5vQWM1ZytUdlVheE9raFpKQUFUQ0xZbHhYeHlXZmlXK2t6SXJFVlFBZnJiakI1YW9IOHRnQVVnSVNCZDFlUjlZWGRuTFR3RkdQUzI1OHNWV0pZSmdqS0xKWW80WHcwVlZoWEEvaHBWZzNkY3I5MFhjZ0owcWhpUmg4RStXaXBUTGpPQ1NOZW9keHNOaWRnYlc4bHF2OFppbzQwVnBXTlN4b1BzWHRrNkJIemQrMkJ5Z2xIQitTdkFRYmFCRzQvMTNValQ5QVhaZDVNSXNCbXJkTmtIYkhoa2I4Q2J6OVhNVkcxb3h5bTNoc3MrVm1qRENrQjdvSE13R3JUaWZubkJ0NTMvaSt3OHdJZkM0NWI3eTgrbzJKUUpZcHQyUFVCcWpvdkVmaUVxN0NuSU52Q0R2QWI4aTMxL0Nnd01lbXY1MHdPaGd5c0F2bkpHMEFPWUxkNlhqMnpqajdsTWtOakhtMWRiUWxsTGtWMHhEbjRiZGhrbm1vK2t0bWJlRklsNVBvc1dSQzZQRHZKVEVjNDJjbWZ3RDQ3TnFzTXRSOVNzeFpQWHQwVUxGTmpFZmJOYVVNSUw1OU1qOHV3S283dXlyWFFEeTEveUNDZ1M1aXpmS1ExZkIwYkFRMmJjOTJNczB0b1JNMVJ2ejZlMUNkTTVnRkxSeXFyN21paE5BcXdIaVNEMk5PT2EwaTgzYW1yZjZrbzA1OWxOeW1SZWZwWmZkVmNDYzMwTFd3a2wrdVVnc1VVL2ExT3M5VWtuUFduOVpZVDkzeWM2Rk4vL3ZOamY3bm51ZUV3dHlCWklhY0V2bG9WZGVMSFJvVC80K1JmOEJhS0d0UmdOQk12SUNic0I5OWZvaUltUmIwNlVOVi90Ly9LTy83d2grQVlUdml4RHJTYTg3YzVGYWEzd1NSSFBnREIydUdjSGZleW84N3J4QXljYTlWb2hnYW5VdW9TVFBaQWduU0lDRVlOZUNRWlpRSGw5TmE2UC83VDdnMGMyM1JsaHNSRGZvVnRLRWR4eGVqOHdVYk5ZSklXaFJ5Y0JlQmxrYlJFdHZoOVl4N1hjL0lCMVEyM1JWOVFPbWRQNk50OEQwcCtSLzJVN0ZwK0hwRTE0NUVKYjhaSmNHOFp4d1NXVEtkaGZLOVFHWHFIcEZ2MW1TR0RoU3NzTU1wU1l4MEJoaDJuYlVYRExCWE13Wmg0R2NRVVJ6ekJuY1dCTHNYQ25tVHAvMFVVOGNMYXdEM2lDOEQzUmN0YmJMUFJ0bjJOUGFMaWhTalFScWxXUTdGUWI3OXZTblpHemQxbHpjb3YzT2g5ZkZVS2F0dlY1Q1JObk1NeGtxc0VHNjlnQ1hzVU9UdnZQcnJzZ0hiYStueHdQL3k0ejdPM0RBV1hRUW4wcFc0YmMvT3FScFU1NGw5UFJDcjh3QXdlbnVOc1YwQXRydU5Lako3NFBUbjRWb2JFTUFVRXQ4ZjRiUkpPZko3MFdMNXJBd3loQUt1dmRyWm01YlhpNUxNTXg3V3I0OUhQYnJIdVozUzVsaUxpdG9XWWR6Ly9rODM3QlVoYWtJRFpBVmx0OCtFRXFMNzBremdHaWpWTkRIbitVWloyWUNzOVhzbDAxdHNXODJVNndiOThMNjQ3ODNnYVFSb21vVk5peEE5Z25iZ21pZ3hldnZCeUdOZHZMdGF6N2U1QzlPN1lLbEY2R1RTZlMxSzF1Wkd0aE11aW1WWE8zelpHWHdBQXRPRzA0M1M0NFdJaTE0QWFBeStoSlRtaWpkYlVOVkZ6SGZvN0dTeGE4R2dhQ1MvRXlrSnBxWVVlMFR0Z1FOV3NIZU9rZDN3cUJ3NDNWOXJKSkEzRTBoSG9IYlBtOHhRc1p0cnB2T1N6dmsyYTZVS014dWpLQVkwRWlZSkJXQmtQanpLMmNlcEtWTEtCQjhLMXJRTXBDTWRVL2JCL2IvdUJudzlZRnYzaGF0Sm5Gc29rQXhjM0JlUmYzcjlidVJuZnRkc2FpUG5iZEJRdFJjbzg4S0x4MlFwTXR0T0VScmxvd1hKYUw1ZklyNGx0VzRDZjRLeXNRQkZiVHd2VngrbTROUDBBZlpoSjNSQi9KZm9udEY2NXBFQ3lDUEFNN3lRNmR2SVVKSWR1T3JkaFd1RzhiWG80K2RvakhpWjBsYkRJMDZaVVRBQ2NhaUMzYkNZVWtBOWNBQ3ZNR2wvSmNHS2JIUWtUK0Z5SFpFMkNMYnpzWGh1R2hTSjkxcHNrY0J1UWVNUHE5eTQ2QnZaZUZFVHh3MDZIanZMQitFN2VRd3BrZmczSkdheFhTeEQ4Nm9jTW5xVkNjKzdITE9kMFhUSFBxUjVMSkt2WUhEeFAxMHlDR1lZSHpLb2FnNUErMVlRVWVwOGRnVEIzK1lldkdON1hJNzNkZnRqbEE2Y3FKTTBGVTY3QktwMzVyMWV3NjFjOE12c2g0L1lDQnFNbHNBQ0RsRVdBQXd1NDA4MVY5bTJ3N245NzBzL2UxL0JyWDVtNkdsUnFMZ0sycDVvd2UrTTNhVWxOSkZMU2ExWURlRyt3RytWdkdZNzdIM21BMGtLZDVnRlZmaXZZTVRzdUVPeUsxb3kzaEZRT2FkZmpXMmUzYkpCNm9kd1BKcm1KVlNtT0RiNlhSdmNCbnJiQ2JuWlh3M1c3VmtCR0s3TndJNjdRRm90RTFLOUFkSU9MSE5oVjgvelRpakUxOGJQSkh5SGwrOERPU1p2a2IzcVRaK1hCcXRZQkdwdy84Tlo3UDB4a0gyWGsvTDFoM1h3NmpFTk4rMDU3Sk5uUWt4WWc2R0JuUUFZNDNhMmZhK2IxMXhVRjJEWFlBVU5wNTNwTFY5M2RmMXRXZWR0MWhXNER4WTc0Tk9zTU5JSXdmYm5uV2hCV1BCZ1FRZUFQb0ZkWlJtcGp6VFNrT25TbFUxTmdzUDVBQTYxZ3RLOGJITkVsclZwZWwvekJoUm5kcjBoNThBTnBuV1hsLzkvWktYSGpZZUtvVnJ4V3RJUWkxc0JlZ1k2Zzdvb0FPZ1RkZmROT3VOaXo5YWNROWxCMVViVHZMQnpFQWgyQzVYeXZWNTc3YStCV1pEbXNQZGJ0bXhnUG10cUFaN1o4QmoxOVY4bXQxQ0FvZ285c0YycmJtYTZRNVAxNEkwYmp6MDRDY3ZHK3lwdmdCdFg4RkRXVDVnTDQxb0dHUHIvdVlxYnF0Uzc3TmVlZFdPZzdJZlBuMS9xcnhoNE5jOERsUEhJWURwb0hvejNRREtzSnF1dFJnak1lSW5WV3RwcFFOa3RoaW5ubjUrVnc0QlR1UldBdWNyQ0pxdEJOMStVNWhFbTRjQjJBUExONm0zS2dDcUw0cVU3Y0Y0U2lJVVVCem5sZTI2djdyanJWd3B0T3ZJanR1eWZnN3NYamdlREFHdUczaDY3Q2p1T1JpTlFPMFl1c1owMzc3aGpkY1dDS00xTVFzN1JhNEsvY0ZhQ0diZ3FLVEdMVFVZYkZJOVFiRmZraVY3UENKb0NORXIvRkpmTUtLRjVhZGwwSUoyVXRjb0ROTE9tK0thaTV6NmFjRkhYc045YmVieFhqTXRPTUM4Y0w1N2RIdDlXUTN3b1VUc2Nwaldlc0lXMlB2UU9vTDA3Vk1jdHBtanBHMGZBVCtEN1JmV2VVd2lZQVhlaHhLMEZLSEp0Y0xrTm1xZVNxdzl2MUFsRjQ3eVJxdXhraE5ONHhnZWJ3c09laVgrTmZEVXE1VHBldGJQalpqM2VXeWxla3RQNmxGZ3NISHhoTGk5eE8yQlVuL0pyTFBBd3dqK3JvS3FCNXVHUmRtbmhSMGhIM285NFZmL0xhanZuZ0ExdGU1Tm05SmVpSk10L2xJYS9WUS9mYldkVHVNQnZDVjlPV2dNRVF1Yjl0Zys4YlRzc3ZSeGdRdzlPbi9LRnpEZkgwMndqenN0dWtuczVxc1h4Qms4WDc3QVBvTndaNGlnNDFEdjlBZnE0cmlabHRmRUhKSTNEajVpbVpqV0RTZ3haTlBCOGs3ZVV3YjZONWs4M0VDOUo3WUp0YmlUbGMxeExiakVjVFhDb2J5TEhOMm16VjVPdVRPTWxKOVg1ejJHSlFUMjRoQUFXTWtDYkxDRG9BWnRpb0NKbTAyNFFGdmwyTnFESWFGVTRzTWpnY293bVpWOTNVeU5MeFVzRFNqbi9BOWdORWVSejV4L1I4K01qVjRqaFZ3QkUyMjlRbDZISVRQdVFnVG12U2c3VEV1bHVPRWt1b25BRDVZSFAvUXJWNXpoQXZDYkR3K0FUeFo3aTdFd2p3Q2NEQWVlbDVuTmZRT2w3MldOVnZMSG5XMjNqamo1NVFTU0REbU5waUtyS2U2NmdSMGJMbEIrT0VxQmdoNUpKTjZFOU1BNmRhd0xXTXhXRmNnQnNZODNGYStOMXcrWkFiYk5MdVc2Yk5DTEM1OFZiWlFxanFKQjVjSEFnSzJodzFndHlZa3VndjVzWnFrVDhFTU9qMDZTQXlpNEpnTmk5YmdReG5sQWtuQU5CQ0xHMUF2OXVqSUdSRHh1d0xpL3FIengrWTFhUjBQaiswelBsVW4ydzZrUU9vVHB2UERKSnRZMFgxdHl4ZmduY1hDT0V6dGdJc0FLOUgzZnFyUkM3b2hjUi9WK241OGJNYUJRTCtlSUZuWXAyOHJhd3M2QUdvTHE0OFZBb2RmV2xyOUV0TEhTMWg2K0oxRjVnYnZ2NGlEZEREYkFTOXpTSFl5c2s3b0FCQUhyQUFWeGM5ejlSSE5LNE1WeXd0d0dNRVVCMjRmSzNTZnlVaC9YVk42YnpEMng1WEdMMExBQ2x4bjJKSlZhNWhhczByclYzUno2bDMvN2N2RzBITDlieTU1L2ZPYS83OWQ4dnF2SHZQL3pTV3YvLzJiczd5b0lpUTBZRzV2YStLRTBpZjZrSDRMZVRjY24zRklKejhzZyt6MytJL0wvQ3lIY3hCK3RzTXNwZTIrTVBlZ252ZmY0SUJUdTN6OSs5Y05IdjBYTDJ1ZEpPWUZOZDZJbzUxVXVmMW8xN0xNOUF1WFExdWdaSmdpZkNkVzBNTG5Qait3SWh3cGgybzhoSFd3Wk85VEZHMW0xQ1RvaDBRVHVEV3JOc3ZWM20wUEtmYndYTisrS0J6eHJLNFpvR1pWc0RVZUQ3dXd3cHdPdlVHWjRKSExrbmowUmtoczZPYjZiT2I3ckhVR1c1U0JaZGhXZ3pWNzlEc2VheHNVL09JeDNWWnliSXRoYjl1QkhQMFJzRG1mSTVRc3EzN3QrZnF3elJsc2lFTkV4Wko5YXYxNUxJUUFEZk0xVE1vQ2htclA3Q2ZBQW42R21kakU2YlNEMUM4c2FJZkR0RlFDak8wV2pqdEQ3eGpPTjd6THJqSEwvWUp4TlNjZzdRRGdkdnJNNTJ3MTUwN0FDWnBnRk9XSENzT3VvZzJyZU96UDhIODUxWnJSQnVwa21mVm5kYUxmMUNkRE81Rkt5STNKMHUva3RpNFdDNE1KN3Rxd1NDaUNwc2R3ZExGMHlkaTVmdmZPUHB3ellaQkE4UWtJeUM0bDJ5QUNIaUdZcDUxbjlscTNsWDdjRWtNcHhiUXF4Z2Q3VHFPRkpYcXV6MGtmbWRHRUFkejFjTXJIbUR3c0hONlBpdVR1OXA5Q1dNVHh3MlZEN1NQR1pqeXVaUlVHRnlpcDJhdzE4QU1CcDFLQlIxQkV4ZkNiVmlBNDYwTU90VXdhaFZPZkc1emZ4ZzRub3phVzRTNG43U1FMR3V4VWorQXNiUE50UlFxK3JEM3c0eXZjZ29xU3dRYThUY1R4NXo4Vm8zc3NpZFp0WU1PeHBILzl6Zk82RzlYSmZBQnJLT2Q2KzJrNlpZc0ZLamY3QnZDMFZ1aXpNc1FhVllBOGtFYWkxRSt2L3lmYTNXQk9tT1NMVHp5N0NFLzhlRFVUZElvanFNbm04NDRvZ2M1aWJhQkI1eVhzYWY4RlBnWFFCNUp1eHJUZ0NwSzc1THlPamg5YSs4cllvd25LZi9LcDFFZ1dQeWN1RVIxamd4cW5XRXl6Qk9kQ0RXdlljVTdnOVR3aDNSVStMRlYyVE5hRmxDYzI2OHVIcVlJZGRGK0RIWjIrSDhBR2pKWWN1bW1GRFI1OGRoT2lmaFZENHJnWk5JbWRYSmRSSWhNUW9KaU5YSDJ2cERuZXpyNTY0WDRxVjA4akE2YWRXY1crckZTY0ZLZ0REWTVYbTg0OEt0bW8zOWRPSTlkMkxnK3lETDhRbTIyTVUxYjlUMjJ0ZzV6QTNOemxEbVhQMCtBMnNKbVFLR3U4OXJwMHE5QWpPT1pHSmV5N0dNQWdlSkRCTXJHM1JvRFhXYzZGM2ZPa3VrOXgyTnJQbVRsa3JSRlk1bkxTaGZrdExyRGhmMWdpVUt3OXJvNGNhbGhHN004d0NnUVlTaCs2RDIxaC9leGJDZllKWXRjL2N5QVhhQkwvMEU5UzFwQ1ZMc0ZhdFdMT3o1UkR3VmFjVVlmOU9mV2RJZzZ6UVFzQXI3a3JnSVFTeDNWaW5MRllDZHJ2VmNvOWZHM2N1SE1FNnNNWGlnR3RaQVZBZkQ2UXJ6MHM2N1NQYUtqR3I5UXpYVGFyWlhZQk84SnRSc0MyZDJmZzJhMThRMWJ0ZVVnZENXZEo0VkNBYlg4WTJ4a21ycVpOMlBZMFQyUy95Qm03QnVGN0R4NTZONHNrUTg2aVZNU3UyS2pGbi9kb0xMSnhOaU5ucDZNcG41U01jMENRYkpocXNMYnZrTjdxYUtUMWE4MEY5Wm5ZUEpNNVdqVmRtaUhoblo5dk1lUG53bE1iaU1iWmNuMlB5d1FlNzRrdk5uUTUyc24rTzUzUWNWdFlBc2NFYXA0c2NqMnp3Nnh6Y3ppRjB4ak9hdy9SS2RBUDlKNmp5cE5ZNTJVMzFRamxRY1N4VHJFa3kzcHU3MitGNlBQc1dqRDhUcmw3TFNacnR4TjJIcmp0ZGFmakQ4dy9yejJqdFZIZHlISjJobDl1em5jS1JVTGZUNWs5aG5qeDJmdXhiUGlaaGc2YzZ3VmQvL25YZWlxYkhjVmg0ZWRuL3dYNm9iSUgrK2JMWTVQeGQ0dnBIWGgxaGlnYUhyVmMwMExDbmk5WEptRUxNL3R1YkxMYk8zUjNqSThpblo2K2tuT3k3dXhrcEZoNEcyQUpCaW80ZCtwR3E4Nk9MOW1SUGRZMkNaY1BVQXBzeHJJajdOREtZRWtHUGhkYmJWSHJOSXI5dnBGcnB2WWFjc0NsWUFaUlpCemVaWWtRSnBkZnh0anc2Z2dYcERTYmNJeEFHa0dXeVFNY0UwYldHVWRMaWV0Mkx5Sy9xWnJEUi9pdkh0OWpkNFdEZVZ2Q3NoeXlkaGVuRmpxV1l0c0Q4Q0MyR2FZNzdhZVAwYkdNRmlmYUFZeHd3SG4yOVNURnlqSTJRelN2UmFaV3RGblpDV000Q1ZVYkh4elhOL01OSTMyek5YeHMxVDR6Ry9qQmJ1bm1sYzR3UDd1VExhRnc3aGxMNTU3ajNuU01mQXREWWVVc2l6OC95NTk1OU9lTVQwVFJxMmxBVEVtNEZvNm5JMXloTzIvcVBVbUo5U3dzbXoyR1RrZUM3VXdzTnM0aldyeWFMVWFTejhDRjdER2NKclhMZDdHcEFkRWNmQmljQlNiQWU3Q3I5Mm1CZ0pEZ3pzemtETXpZc2xyRE1rellDaUp1bEd3WVlhaldLRjdSOFpOdlNoTllaREwvTnhjeXNxbjZLQTBscEZ1ZG5mWjhuZ0dnYjNST1N2dWdheGpqTUhyQUZrSkY0V3UzMC92TWlnS2dINmpxWjBzTTJtd3I4R09zekM3MVlWTDJzZllyNUk3VzI1WGk0Rm9NZkovOXNvL0hvVzdRK2ZLY1dBSzJIbmdGRkhvNmNtckxTM1JpREFidlVEVTg4SXZCc3NEVEVHZVZRdS8yWHY5KzE2YzVqTEtPdi9jOGZZYm1ZL3lYai83NnN2NzY4SHV0OTlkVy8xOSsyb28ybTJZY3MyRTIwWG04dU05OU85UmdSSXhMZXh6WFluRUZGZzhuc2o0aHB5WGIrMUVOWUFzWmZ5QkJmTWRVdXZsak9rdXRtalVCeWlLbXhjRmZyOVdhVmVMMzNkVnFKZENRUFBxSGplS2ZSTUZwZEJIQ0c3ZGF6YWhzTXFBRU5FaC9taW02NGNocEVnb2R4dVUxaDhvNHRndGJheGNNTG1WYnhCckFSc3ZlZFdjVW1WZDAxSWR3ekVsc2dGZm5XWHd2YkpnMVNoWnhPbm9EVmNkdk81bkYydVFIWTVmNEY1UTRkSWUxMmd6bkZJVzdDZzJSSFQ2emJLaTNjdmU3T202a3h0amRWRXdGTmxhaHRvUnhWa3lpcWZmZEg1Tmh3QlV3eTBRSFR2QjQyQzJCcDhyMloyS1BCdHVHR1J5T3RJTHl4OU15UEgvVk0vdXpFRktKRjlDZU52UDNoeS90TU1nc084c2F1cFBhL296aytYM2l6L2Vmdnk3WC8zNDVuRUw5MTd2NTdiL3VkZjF1OXU4WCszT3pZWnY3KzRBNXdWbzRHSUM1ZnRZSmV1dTBBSm5RUWNEYm50ZWZCV25sdjdqZC8rM0xPWFhwTW1nSkttR2xMVEhGQm1sZklVYWZVb1ZYaGhYQ1g5N3o5ZGFIeGN0RGFobFAvTkZSRFRndDAvU25nK1kzWFhTViswOWxKazl3aXNrUTAxT3lqSE0zRHY0Q2NFYzZVVDRINTVuM2h1RmFIeEZRMnBGTzJXaHp1RkpDbVVCM1RsdnFqckxVNFJ6QVA3czVxWk1NZ1AwKy9UUGJacmV2ZFJ3MzhEcGV1Nlh0dUJIczJENnIwK2RaZk50Sy96enM3MUZ0MVhQU2I5UmxPaThRZC9SYVpmZllmRjJ1VXV1WVozelV2RSt6VE5vQ01qMDJTL0hzcms1N3lBTm9CUHk1bmFXS0FZZEFSTjFXL2NmY0U1RC9mejRKcE5zaEtkRVorZEJ1YTN1TElkb2MwWFZuWUJRMEpGbjNaSjNLWjA5NXU4Qkx2cXdlSXI0aUhpOW9tOG5FYnlaVEozek1OaVY4VzBOZzdFWlhkRWFNelp6M3dOb0tqSzVvYk1GSm1OYitQK0FTcDVjMHAwM01GSVVXay9mb2o2MjExWEc0SVFHUU1USHhWR25nMjRlOWZXVmNqOFBFQnRwbEZCaW9hT1U4Zmo5aGtuTUZhNHJOeStoeWhkMTJjWnpTRkJra0VCN290STZZdWcyMGw2MVYzU1lDUG4xTTFZMG5ldXhtNDRraXZpZndvbkQxM2NOcnRQZ2RDYnJqcXQ0T2NWYjZNRXRmdll6em5xNnp4eXBIVUtqMW5lY2dDZXhLa0gvYjBkUUJHZFpKWWUxNFRJK1hlREIzRDg0WFI4NFNMVlRFZEFBT3lFamx4NElEY2Ezc2M5ekZzbitUSmNNM2RTSENWZ2Ewejh1U1FHN3NTSVIvekNmSEhUbWtDY0M1Q2p6ZXdZZmdGNFVrR3ZBM2JlSElqZkE2d2hoOFVSMXVCcjIwUUxJMWdLVXpYKzFydHUzTStsN0FvNTFyeHIyWDRSQ2JvMWFSa2JYeHE2Und0eDNmaEMxWmpyYnNOdDA2bXJUWkpoMHV4eCtFaEg4RklJSUNiOGU2R01rNEpZb3hPeGtITUhVYjRyUnJhY3ZHckJoNlBXakRnbjBUREVqOGhZWVg2Yk1KV3JNWUMzTDE4R0pwREljQlliZC9NNkRPZkkvYlFWcE9ZZ05RU0hZVjd3ZVozMjFkZGErVFJuZWtLcHdqTy9kMU9FWWt2bzREZGhqK0djRTBucnV5dUdjMkZvRFNzckU3OVpxbFdPV2N3dkR1bk9ZNE15dXpnL0dCYXdyaTQ5em1NNGhrbEYvaG5vYlVtSVVzSHdQZ3pDelRTaGlDQmRHLzBFaFFITlRWdVRaQ25MYVBWZXY2dVhRN1p2Nk1lVisyemZJU29oZHJZVnQzSUlLbGFyQktRT2pGN2pkc2UvSkpIL2t4OStuamNkemN0b0tGMVRlU2J3R1Vsc2lBRkFyOG1DT2Jwb1k3dEFjb0VDNlA0bkE2aHVVTXAxUlNaQXUxL1pWTXZHY3k3ZW5yZDlhVk9lbmwrUS9RUWg3dHBIczYzaFk1WWRmczNPZS9aYk1pVW1TZ1dDNEQvTXZSbWppSFg2RDMzNGtyNlZKTVhyWlNMRmdLMWlzaXM3a0RqNDA3T2t3aE9CaXVRSHZDeWVNNW9VTHNhbkhhWWd1ZEZ2QnQzUUo3S2tWdlR0aVMrRmwyczY1ZG0wMDF3UmpQNUhtZHZNdWwzcE1iZzBBNTNXN0FPRHFJWTlvTEVneldMSHZjc2pLNk16QUE4Ym84cldHaVhzVmhQZ2tFYmwwd0dJR2ZldTM5QSt0SDUyMWlEcjVwODJNcGdoRWJwTzFTYmJhUGFnSXVQcEhuTktYY25QLytBdmRaVVpPUTJRNTlGSGFoM0V1MzdieVFWTGNRMEs0SkdOeGZZNnNReVBjNHhYOGJYU1U3TmdCNUI4ZFEyQnpDbDE5WDNjd29QdEVDQjE4K1FVMjNTWmIzUWw4dytzV3VKMjluSGF3VG1DcytvVGtZMzk2WmFuK2VrUmhkcTEzOWF4Z3lmUzN5UDJWTWQ3b3YwVlpsMjUyNlpnc05FcThZdjZmZGFUazN4dk9Gd3EvQkhxWUU3Ri9SbWhTbk85OUdmZmNKbjF4bzl3ZU4rRHl5Qld6czNNdHpwc2lYbm1pUnFaMGsyUmR5dE42L0pJTnQ0UG5uOUtyckgrT3JUS0RDR1ROY1o3RzVEaWMwL0dYenRPYzFGQ3YxK002MkpnWlB3UVo4VHRSeElqUU9NYldyQkFzNllNUGZWL0swWVE3U1o5UTFzejBRNHJVMTNwYk9Jay93WFNFUUsycHJFdHVLeW1wRTBhekxtY2VtaW02TXFIUFFVU3hXODhYcllhdTFOZEdPdTU0ek1vQjJzOEFzVnJIYkdHeGcvL2hJNHdNMlgvekViZ1dLZHVielduSUwvd3c0clhMR0w3L0FzQWFZRlpwaG84YXRNTllEWlhHMlJsRVFQbEJMdXh5MVpXOHlaSHBiWFZ4US9TQmN5cGEvcy8rc2lpMHNFK1Z6cUluaXNrOVN6V0J4YzJnNE9qNDMwSzh0eStudEdKeVc3ejdPdUxUekZsS0NKUGRqZHJHWThqMEVGa3A0VzhnVzdTMHZkalZhN3ZhT0s1WnNsNS9sbHVaYkxWcEhzT3B2c3VGdGRHSGdZdkNkR3ZjWm5aZFRuSXlRNjNJOVR3Sk5ZQWluL1pPNk94bGQwVU5VTVIwYTR1a1ZSdHFHRXdhaHFvZ2J6Z1FENUtEdzRXd3g0SktqVkR3bTVESzAvMWl0Q1RNMWh1ZjhWNHdHckFUcVlEN0U2Z04rMnFrZ0huNnc5bTVOUDJER0huVlBJempMT1Y5R2N3VmF4YzRzWHVqTVZpeUNZWFNXbDEvT202MU9sd3ptTVQzSVkySnRicTRNamlwWWFSczdXN3lTSmN3V2UzZ1NUN2RkeHE2Wnp3SkI1Nzg3MkRlbHoyS1U3cUJvVzVSOXdBWVE4WkFKamJyenZMN0w3cDdITWo5ci9lMVl6YzV0QmtMd0FqZHd4RzVlNEtUZGNmZm5EQlI3MjdOczEra2tnS2xsRnRTb0g1TG9kSGVZUFU0ME9lcjZYbzdkNG9HcUk1UU02emxWeGxaT0FGV1Foajl2cWc2akFzS01BWjVCQ0s4Y3ExV2p4OHJaTGZJdHAvS2lBT09NZER6YW5mcDYwalRnbUFxUW96alV5cWJGS0RjbzQ0VGpyN2dkTlpSQWpzYWg4Q0dhTlJ2MzdQVzMwdmFjS3VBRXlSSzVQZThlSGd2UERYTy80YlI0bm5rV0YwaU1hK05ieTRCMHoxMnRyTm0ybnpza0paaitCM0k1dTk2aFA5aU1kaVl1QThHclUwT0FBVHJxV2ZCcjRjbkcrZmM2UlgrYWZGYmx6QUZ3aERsNjVVU284Zm9zemFsYzFlbkhqNTJjRS92blJ2Q0NrSnJQU2FMZENiMjJ3L01Hd2VnaDdCZFcvc3lGRllxWkpXdmwxcnc2dE43REVTQWFxS2I5cEkrVHR1TzRUa2xqUGlOdGVYVUhFUlM3a3M0RzhNcjl6SVhVVE85VHkrR0V0MkszK1BLNEJZQklldkZ2MElQTGVwZDU2dGlzcGtBRnN4bDJHM2lUNGNWMHlwMUJ5S2MxcmhlYkdCOXIyRUcraUFZd3J0NW5jUDNGYXRnNmNzVFplcTBqMEZiTW1pZHF2L1RKZzVmL2paMCtFWXBkQnliQzNwdS82Y0FGTk1oT3JuQW9POThZOVVGcDU2K3QrKzNoc3gzODN5NTUzTVcvL0JUN2Z2MVRxSjczRGhXYzhadGZZckZyLy9kTDVwOVgvdHZQOFBRT3g1N3JPbTJUKzBhZHNSdFNhdERGdWoxbUFTY2QyK256WDh0SjFyRmdYdS84cGpQTzRIWkduYk9qMmpodmVQMXpYWDd2S0VQOVBlLy83UG11ZjMzQWZ6eGZCQXkxVlJ5bSs4QVQrMnRhYmp2SXltcmhRMXl6aFdUM2hIZ0hlKzh2Si9hbDkwK2IxOUVXREdob1dIL2tlK1V6Z2p3QWRvS1JHbmI5SElqenJDK2ZTanFMYUNOUTlKa1hacVpGQi9zdW85Vm5Ndmo0NEVleHZ0bm9mTFVrc1owT2lnZU54Rm5EUkR5MkIzNjZmS0w2RnVOL09NaHpSb1V6MVZ5YU5OZzdRTy9lVHA1ajllMVhyTGFpbndwcGlFVURuajhOV2pyMGZjMTRDY3YzWGF2Vlg1djA5MXRJQ2E3elVESXdkd3RPUUFnVGtRZC9ZV3FEWFp2WWs5Y1JCbVU3Ui9nSTZjMGFtV3Q1REV6djRUU3p3Q3Fpc3RZYkJ0Ti9Ob0VOY1VYVnZ3V25yR0VmdjM0N0ZOUVJjSjQwOGE1d2RZODYrdXhmOEFYT21GdkxWbmZ3K0ozdDZ6Nk92SE0yY1hWMkpaWUVZTHVhQ25lT0g5aW5GaVZmbHFQYVRIeE9mTE4xSU5qQ2J3SUVQYmYwZnZ4NjUrQjJtQ3Nza29YUnhlcFE0KzFHdzlLUksvdjd2OXVoSXlmYnlzOVpCV2pmb3FNWnJDMndXVDJmVXlhSDFYVk8vLzh6YXVXY0paWnhwZTB0OGJJWXhrazUzUW01TmlUb3pWNGpNN2dBOGU5WDg2L3lvUUFxTXErRGV3TDBKUHNFdUFOYytuR3c5OFVLZUpsdDdRRTNQNE94c3pkK2s0ZXN4TjRobUNGM1l6cmRvc2o4Y1p2eFdGenVYSWJqeDVEMHF6dkdjejhuaUtIdnJUYm1aTFBpYk13Wk1tcXpUZ2Rhb25RQlJ1bm8zZjQ2WGRKdW1uRG5DY1Z0VHF0K3pWREpIZU1haGp5QmRmYW1PRWpRR0M4S2dWbSsyN2JjYWxxQ09VNWVFRGZhOFJQR3doY28rS3IxeklhWVFxVG1DSU8yeHVOSktmSUttNVF4SXUxZEh0amxxVkZHMEl5L0EvS2NNeFZDZGd5RXNSR1dZWTFpQXl0SzQ4UUE1NDJiQzdZTFlOdEo2SW1ZemRQV0tqaW1DMTBkaXJlc0szRGUza25Jd1duWm1OZFl6YXRCeHNGQkdCMTlaUWUzalh6T0ZzV0ZoWFBnbUFIV1J6RGtsT3BxLzQ1VEJWN0lTZ2NlNHpsWE94cnlaL1N1cDJ2QWR4T0FFTjRJYnVGQy9PY2NEUWRjUEwybWF1TnBIcFpRWVFYcVBuWCtzTmd6NldlOURqVEJ2TDRPRUpsUS9XV0I5N1pIUERudTFRbW1BOUtQNlFBQ2R0WURhY0pwclFlcGdFSmc5QUtJSlRzWFpNOEhON2xnSlU5ZTZEWTR5NVkrYkxUSFVEUlBXektHSEhqR3gzSnBRZloyd0Jpa0pqdEVibjNPemJiSDdBN2I0SlBSRmRUVzdybGx6WnFKdzVGc3REdmI5OERaUEJPdzVXankzOU5WMkRVNzNMZW54bGh3NGlHc096bnpGdkF5RUIzbnpOZ0RjM3VjWEMvL01ndmJ3cVl5L3ZUVHJyK1pzNXovL3ExLy9jNFptbW5hMElIWXcrRjRTOVNRem5sc0ZqSlZxRGtneTU0OUozNGoxL0VjMVZOdFFSdW5yZ1loVHNueDBKYmNJQWpiM3JMVkZwN2Y4ZXpEYWNUMWdqMEQ4bkowSU1ZcGJiSkw1VDBaaVBramR1Q2svKzdyRzNRS0NhczlOb2Nwc0pvNVFKNnFjMlphc01FNnozTjQwV3RJTldHN25qNGQ2M3BtVE5zMGRRcElteFgvQUc4ZStZa1hGc3l3OFRZMWZsc045ajk4cG1LZmZCd0RtcldPcTBxMVNxOGZFSmVlRnhLQVpRNnZoWXlmQjl2QkFaYjcxb0tWQWw4emNPdEpUWFo1UEU0WnhvUlg2eUtBMG0xRDBXMHlkNmJTaVNMWFgyVFlzMjRNVW5pNG5tTWg0NWxZZ3BOMHJ2Q0p1K1Z3cllWN21WYm9POW9SOFppdjRZUHFxQmN3Tjl0NG5qLy82YS8vRFFhM21lc2M5MlVtNk1oTHZJNjRIR0ZoMWY0cFNQSGZ2aTU5M2JxcWZCRC9hMEdEVll0V21zQUVlcnlLM1NnQTh3cTczc1hJMkZxZUJ3QnlIQTcvZENZemJNMDVkbllreE5xQ25pT1krUmVkUDVLaENJVzROZHJzV0xJWWY4azFrM05qMlYvRGljTW12QS9XMEkyS25LbXJ3VnJuNHJGY0ZsSTRJZVdrMWEvL05xL3VtWGIyWWV1NFVZY3prQW9HNGxRVXlQUDBFS1VCV2hTTTQ4UHlKZkMrblV4Z0JiZlJRS2VncmVuOFM2T1pnODEzcUxlVkx2czljNnN0MDlKYWFFL0RtOUY5UXdZWE1LTURUQ1FRY0xKdUlIS2hoUG11VGxWL25DTnVCMkg5bkwvRXowaEwwam5BemtIb0EvNTlnNGJnSW13aE8zWG5BdXBvNW4wL1IxNkJOWndVTmswR2RTbmU2N3dMUkpBMTNBWnJzRWlHcnozaVlJQXNjNGNjODNPbUwvczlTbUczcG1jdW5CcG0yTFZJQmF2bHFaaUlQSTZTSGZIY1NLZytUc3ltclZHSHVZam53b0FCY1l6ZExOU2dUVXc4cmcvbytTNEw4WjdIdHVuaTNOeHNPKzNub0JnYjd5d1pibmZCVEJlanAvQitUS2FuQVZUcmhMTjFFL0djM2dPZ3ZIZkZjSDlHSEVCaVdGV0xXSVlENDdkRE1MbjE2N2xOc0U3ZUJGMnp2QitIZXRjS0JuRzBlUDg4eEk3bk5HY1RuMmRZWi9mbnlDdVB3b0hTL3M3SWFyZ293K1hoSEp5RXE3SC8rM01NdHVld05tZTA0QzdSWUtSb2ZSVWJ3U1dkVStRWXpISnlMYTloeUF6QkJlMTRFa091bDNQSFc3V1h3bmx0ck84SHRrYWVuWWtsbFB0ekdpT2dFUTd4MDd4UExPM1FobmVkempsWTUwVDdiNFBtT3g2bGdmLzliMzdVb0hZOThZVHFKSlhpYVdmQlRuZFcxTUM0VSs2c25KYm1lOUFkZ3Y3OEFOV050Sm5nRzhsTUNWemRtd0h0SEFFenpsR1JxNkRZb0RHbkREZjcweE13cVlLUW5EWDdIQ0x0eU5LN2ZkWFRPejA1OWN4M1FmcnJjRHlEZHJMQUxJRDdEbEQ1S3J1bXhKeUlpWlRIczE4OFpRL2s3YUc0dytIK3dTRkw4VDdCbHBvZHZnZUtWNTVQZHZCclRxcXpXMHhvNFBTNjRjUkZEMGV0UUtLNlBDUFM4U3hkc3V5cjhrOUFoVlUvejMwYUFUeWYwN3A0YkVudjdUcUpGOUNsZzJhVmllaWg1WkM5UitvdkI3REJBb2RRN0hBby9WUWEyMEpsMVE4bTBIR0pTTjFiQUtOcm56TW5vR0JCL1p1Ty9Cb3ZiQnNEYWsyZFo1M1lsb3ZpUEFHaTFQM0JkZWJWb2pPZXc0YkphNWZwL2pySzQwUUtYTXp6TEQzZEVna0oydTNhVC9ZemRyUGxZR2d3RkovSmY1MTNXcitUKzIrWGRZSDNPZHJIQks1UlRNdTFxb25pWUR0TFlWMkFOcERJSTJKL0JBeGt6RlliY3dkbDJpQ1lFY2hUc1c4OThmQW93SGxLWmw2bkhqaFFFMlZ6aXA1OXlSQ2RmV3V0djJqRjdqNk5uTk9CZFpDdmpvWHN2NGtoeTlFUDZWK1Z3b2cvTUJiejI2b0htb0phV2NFRG5XMTVsWDBYNXp4N0NvTVRiMDZ4Mll1dUJ5VVZNMncweFZOdVlyQUZyVnJwNDZrdGtBZnJHZi8yaWtlSGpnWmQ5emxDcHRXRDZJc1RLb0taaXZ2YnhUa1ljWGhnQVlUVUh1dlg4ZGU1ZUE0Wmh0VVUrdHhXaUdEQjM4dVdCQ2R3Mld0NzZ2L3pMMGJDNHRaUWYyWHAzNS8zenZpUCtEcGtPR0liWXJubFpmMTBIcS9MZzJYUVZDZlFUSDRZeEZxc1Q0Mi9uaFljMWZyZlhmcmtyWUtEMDY4bCtMWnRBUmlNT0ZyZGhqbVl4NDk1Mk5BNTZRNi9GZlJYNW91dHpFUHpEVnhDQVlQdE9pYkFMMzJDZ1NlRGpZNmJEeDRQZ0dMQ2NzN1p3STdBZkR6cEdMVjUwMWgydUtmYndmYnY4YTNnVzZoV0hGYzk3V2FtZE9YeVJWeGN6UzNvZjdjVkVjT2h3Q2ExQzQ3S2s1QTlabU1iZ0JxZVZYc0x1a3l3T0hJWExDbjdpNmJjUHFjdEd0TXNRVXAwVGlscUo2ZDVvMzJtSXg4blY1YUQ1aEgrYUlOem1QUDZwU29GYXNIMHROT2YwMkQ5bHFOM25kRWI0enJUbWMyc3RUT1l6VURmNDRtb3poN3BKeTN6b212ak50MWpxV0p4aXFPbE0veVk4MU1xSy9VQXBSMm1XVytQdXdSSEZEdGNBQmt0Z2ZkZTV5SzNQL05xZVVpWThNblF6TlNkQzJTZStINHdBTHVlU1BHTXU4YmtNYjdaREJlT3VucWVGTXpRTXQxNENtRytDd2RXSCtjQ3ZtVTFzQTk0Mm41YnozNTF2TUE2WTF3ODBleHhMay8rZFZNOGY4N1Z3c0J0VDY0QmRGMVdUTnVRNy9HQXJMT1QvZmM1SE9aOHRCNjNQSm9ub0p3SVRzQzdyNG9yaTU1NitwMVJxeDdNbU9EOVZyRkFRSjBYamJleWlMLzhUUzA5Ly91RkJNZm1hUXBPZFRRRVpxT0RTZnVURVR4RFVDOU1qR2JaZVFmSXlHMEZuUU9tSEhhMFR6cXQ1Tjg1UHRaZEZhZXMyMEg0bi9wLzZVS2RvL0NkdlAzZks4M2ZadkFXUkhMYUJUM2w3VTM0eFZvZFRGQTgzdkp6T1BuNzRnKzNaL253bzlwS2VJaGQzazZVQ3c1OXkwaVEyNDM4VktNcjAyTlZzSDhuVHZTZTA3V2hDajFZRGNvbnJuaHFUWkRrVTNuVG5aNTRzeUxvd0x6UElRT2oyVzZKRUU4bktOcDhiM0d5SWJieU9Ea1poZ0RvU0pjTkx0YVBXVG0yaHZQaGtzZmtnYUVmaDhNSEo1YS9uZ3I2Mmd6ZG5PMnBMM0w2cVJXWW5yV0J2RUhYMzlmanc4VHhqL044K1Jtbk8rQ0lkYVpXN0s3b3NNOXUvUTRPK3daMk8zcjhPY1Z5ZUFCMmFEcE00RG9oRkFDNStHVTYyZ0ZnNWJBZ2c5UFJVOEtEeHhFNS9NekRUNnl0aE94Nzh0M3lhRGxJaEFLUzhQMC8wb0tjTjFOaWdHWkQxMkU2cmNhSjJxK05EaW44OHRIMmJpZlU4UFdjS1N1dGNlWEpRdWRRN3N0Y2RRd1oxbStlZHppdVl0M0NRanZSRGV1Yks1SXh6eE9UdzMyV09UQWxveDhrMGV1SUtET28xck1Ta1dYZFRJRkkyS2xSREpuK0NpdzFUTTZlM3RGRGZLM3g3UmFFYnVNTDJHSGtkVHYwc1RuWjY4OWswN25QSVhNZTBwREZhR3hyR3lmVmhLa2YyOWxtRW1qUFMweW1mOHpqLzg0N0F1cjlacks4QzFPQmVTMmUrUHhyZ2JRbXBKNGhua1hHNlFHTjFWbmlGaVpoNHExbWZteDF4S2ZiakhRNldLWm52enpid1ZPNGpUZWVmQjJ2M2U5d3N1YU9uclJvekJTVnc1ejVUQTdBaHZyMWc5YnZEeVhEdFhtMldKYVlwdGtTQW96bU90SGZFNmxONFFHbHpwRkdOcFFBOHl3TEhSNjEzaDJpM0o1cXM0SDlXTTZybFdBODV0M1J5eGgyUUdNTW5qMm1EeDNRVUIyY1d5eWVsdVp0TEhnemNlRXVPNURXSkNPc3RsMW53aXcyMi9PL3krZTVndmFOVEpkbHRHTTVrY1BuOUkwNkNPSjJCb09EWWhUTlpGdnJPUXNsTFk5eWFpZjV4MjRhWGJIeHFXbmVUdnJPWkp3elJ0WFk3V25BVmt4Z0V1SDEvdGpkalZMakE2dERGSk1CYnE5L2gyTWhEcEhTWEVIZWx0bjltTTVSV3g3QXhMN1pHOHU3MnJpaHF6WWN1YkgybDlVZXJ6bnpjelM5REdlbk03YXBXZk53Q2xkVzV6WGY5M1I4WTVGd21kbkdHNk9BbnZzVHo3SGZGK1ROZ2pWTFM1cjhJdU81N3p3OGRDSmo2UlpiWUNWRkVoMDYrUTAzalgzVElYZ3YrWkJkcDlhd3Z4N2VpZzJ3RU1hS0pydzZUMlgwZEZwMyttWHJZVDh1Q01IQ3VaZmxvUjNZeDlJTlpUM3VnTW5UeTAxWVo5Nzk0TW51NVpFWUNJQnpSb1NrRm0rSm9MZkYzR2RtMWhsbzdSQ3d1czhCMzFhN2xQWmRBUy9aN00wS1R0d2Q5em5zT1ZuVHREekJRalY5ekN1YkVuUzRQUGFlYjJlSHdsYjcxN09uRmZlK0w5dWpIVCtGM21WUDMrck9CdkRjUC90WHduTU9WUExRR0E5eHFpYmcyRi9KWnZmSWVnK3R3YXpwZjY1ekxDckk1ZnIvQXBZVHFBOGFKZXJZQUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUNRU1IxL1VNUUFBSUFCSlJFRlVlTnJzWFdkNEZGWGJ2cy9NMW5UU0V3SkpxRUtvU3ErQ1NGRXNLS0orb29DZ2lJclN1d2d2dlNnZFFTa1dSSDFGUklvRkMvS0NnQ0NDUWlDMGtKQzJ1OGx1eXZhZGNyNGZPek5zR29ZU2l1eHpYWE50c2p1N00zUG1uSHVlZWorRVVvcTdWZjc4ODArTUdERUNmLy85TjhMRHc5R3paMC9FeHNiaXE2Kyt3dG16WndFQUd6ZHV4T3paczVHYm00dEhIMzBVTE1zaUpDUUVhOWFzQVFEczNic1hJMGVPeE9uVHA1R1ltSWhHalJyaHQ5OSt3OWl4WTJHejJiQjU4MllVRmhiaTBVY2ZoZHZ0aHNQaHdOR2pSMkV5bVFBQW9hR2hTRTVPaGlpSzRIa2VnaUFvcjRJZ1FCUkYzNytKS0lydzNTaWw4aXVobEVMZUFKQ3lyd0JBS1NYUzVTdXZaZDRqNTg2ZGk0bUlpSWpUYXJVeExNdkdNQXdUeFRCTUJDRWtIRUFOQUNHRWtCQUFnUUFDQU9nQmFLU05CY0JJdnljQ0VBQjRwTTBKd0FIQVRpa3RBVkJDS1MyaWxGb29wV1pCRUFvNGpqTzZYQzVUWGw1ZVh2UG16VTNTNzFDZnJkei9oSkN5bjhudkFRQWxoSlI3OWRrb3d6QWdoSUJobUxJYlpWa1dMTXVDWVJqSWY2dFVLdVZWM3RScU5kUnFOVFFhRFRRYURiUmFMYlJhTGZSNlBmUjZQUUlEQXhFVUZJVGc0R0NFaFlXaFJvMGFpSXlNUkhSME5PTGo0M0g0OEdIVXJYOFAvSEpqaE56TndIWTk0dkY0a0p1YkM0UEJnSUtDQWxnc0ZoUVZGYUdrcEFRMm13MTJ1eDBPaHdNdWx3c3Vsd3R1dHhzZWp3Y2Vqd2NjeDRIak9QQThYMnFUQWN4M0UwV1J5QUJYQnN4S0FabjhmeGtBS3dWWXZ2OXYyN2F0Z1Y2dnI4ZXliRjJHWWVvQVNDS0VKQUpJQktDN1RZYlpCZUFTcFRTVFVwb2hpdUpGanVQU3JWYnJoUUVEQnB5WHdjMEgyQ29EdkhJQVNBaWgwbmhSRUhKNVlBZ3BCWHkrSU9jTGVtWEJ6aGYwZk1GT3A5ZERwOVVpTkRRVU1URXhDc0NGaElRZ0xDd000ZUhoaUl5TVJFWkdCdHEyN3dTMVd1MWZYSDVndTNZWk9YSWtWcTVjZVZ1ZFUzUjB0RmZOcVFETVpLMU1CamI1M3NtYW1pOTQrZjYvYi8vQjZKalkyS1pxdGJvcHd6QXBoSkFVQUkwQWFPL3dXK2dHY0ZvVXhWT0NJSnh5dVp5cDZSZlNVeC9wMjZkQTBoUjlRVTBzQTRDZ2xDci9YMEdqbzRSaHdCQUdERVBBTURLWU1aUmgyQXBCalZXeFVLblVVS3RVVUtuVjBLalZFaGdTcURVYTFFcElRRUJBQUFJREF4RWNISXlRa0JEVXFGRURPVGs1YU5xc0pRUkJRRXhNakIrWi9NQjI4OFJvTkNJM054Y21rd2tGQlFVb0xDeEVjWEV4ckZZcmJEWWJIQTRIbkU2bm9xV1YxZEQrUVVzanN0bFpCdEI4TmJOUzJsaFpVSHU0N3lQczRuZVd0TmJwZEswWWhybVBFSEl2Z0FaMzJXMDZKNHJpbjdrNVdjYzBHdldmWThlTStYUHYzcjJpRDlpSmxRQ2VaTVlTU2dnb1FFQklaU0RIZ0dFWnNBd0RobUZwS1lCVHNWQ3hsN1UybFd5aXF0VVFSUkhCd1VHSWlJaUFYcTlIUUVDQVlwNGFqVWJVYjNBUGFrZ2FYR3hNTENLam92eUx6ZzlzMVNmRnhjWEl5Y21Cd1dCQWZuNStoV2FuMCttRTArbUUyKzFXekU2TzQrRHhlTUR6ZkNsUTgvR2pFVjgvV2dXYUdhbkFYNlpvWm1QSGptVWZlK3p4VHVHUlVlMkRnb0k3RUVMYUF3ankzekhBYnJmQldsS01WdmZkYTZPVUh1SjUvcERWYWozODZxdXZIdnJpaXk5NFFraFpvQk1yTW0zTGFIRzBsRitPVWNBTkxNdUFZYjBncDJKWnNMN2dKZ0Vjd3pCZ2lGY3pMK3QvTTV2TnFGVTdDYUdob1Y0VE5TSUMwZEhSaUl1TFEzQndpUCtHK29IdHhnbkhjY2pLeWlxbHBSVVZGU2xhV2xYOGFHVzFORms3OHcwT3lKcVpiR2I2YUdTK3ZqSkNLV1VzRmt2am9LQ2crMW1XN1FLUXJrZU9IQW1OVDZqdHYxa1ZTRzdPSmJScDNicmNjK3JRNzRmM1JVWEg3aThveU4vZnZtM3JOQW5VS3RMcXhFcEE3cklteHpDVUlUNGFITXVDbGJXNGN0cWJDcUlnSWpJeVFna3c2SFE2NkhRNkZCVVZJUzZ1SmdLREFoRWNISUxRMEZCRmU0dUppVVZ3VUJDeXN6Smh0OXNxdmQ3QXdDQWtKZGRGU0dqb0xSdnprdUppWkZ5OGNNdlBVM1czVFhaS0tRd0dBMHdtRTNoQmdNMXFyWEEvaThVQ2s4bFVTanV6MisyS2R1WUxaUDhBWWhWR05XV0h2MlQvZ1BqNHg4cUNtY1BoNktiUmFIb3dETk1EUUZQZjgzUTZIWDRFcTBTY2pnckhKdFR0Y3ZiVmFyVjlhOVpNd0tYc3ZKTTh6LzlpczlsK2JaclNhRDhoRUh5QmpsSmFUcU9UL0hNQUlaU0lJa1JDd0lnTUJNSlFoaEhBc2d4aEdCWXN6MUtlNWFGU1NSb2NwNElnOExEWnROQm9OSXAyNzNLNVVGSlNBcTFPRDZmTHEvazdITjY1WnJOYVVWSlNnaUpMQVFJREF4RVdGblpGTFRYajRnVTBhM0h2TFJ2emkrbm40WERZLzFHYnJ1N3pWTjF0b0hiczJER0FNQWdNQ2taZ1lCQmlZa3Z2NDNBNGtKT1REYmVIQjhlTDRBUVJna2doVWlpdkZLVDBSbEZtbzZBVUVDbUZLRklpS3BGTDcxYld4S1NVRWlxWm1jUWJybU9jVG1jZmpVYlRoeERTQjBETmE3M21IM2YvZ0kwYjFzTmtNaUkrUGg0ZmIvb001ODZkeGRBaGc1UjlKazJaaG9jZWV2aHV4YjhtS3BXcVNWaFkyQnRaT1hrNWdpRDhZTGZiZjBwcDFPQW55VndWS2dVNVNpa0ZvZDRBS3dVaElrU1JRQkI4QUk1bHdmTXNXQlZQVmJ3S29pakE0WENBNHppbzFXckZYV0czMjZFcExsYUFUblp0T0J4MjJPdzJGSmlNQ0EwTmhjMW1RMlJrSkhRNlhhV2djU3ZsbjBEdFpwM25YUVZzQm9NQklBeWlZK0lxTmwxeWM1R1htd3RUdmdsbXN4bEZoWVdLSDgzaHNNTXBtNTF1Tnp4dU56eWNCNXhIMHRaNEh4OGFMMEFRZU1uY0ZDR0tzc2xKQ2FVaUtBVUJLTGxzY25yLy8rMjNBOTBURTJzL0doOGYzL2Q2d016M2VoYk1uNHVacythZ2RlczJLQ2twQVFEVXExY2ZQLzc4S3dEZ3BhR0RxMjI4TjZ4Zmg4Y2U3NGVJaUloeTU3VnN5VHM0Y2VKdmFEUWE5SGl3RjBhOCtocFlsZ1VBWkdkblk4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEcEdPV2ZQRXlSTXZhclhhRjZkTW5aWXpkTmpMMzludDl1K2FOV20wWHdJNG9ZelpXbGFMazRJUElrU1JnU2dTeWdnQ0JJWUZLekJFWUhtSW9raWRUbWM1WUhNNEhGQ3JOVjVYaGpTLzNHNDNuRTRYSEE0bkNpMEZFdEE1WUxmYkVSRVJnY2pJU0w5YTdnYzJ3R1RLUjJCUWNMbjNiVFlic3JPenZEbHArZm13RkZwUVhDVDcwUzVITzkwdUY5d2VOenh1anhmVU9BNDh4NEZUQUkwSEx3Y0VGRkFUSlRDVEUyaTlJQ2FibWFkT24yMFNFQmpZajJHWXgrMTJXK1A4L0h6RXg4ZmZrT3M5azNZYWtaR1I2Tml4RXdBb0M0RVFBcTFXcS94ZFhmTGh4dlhvM0tWTE9XQ2I4ZlkwTkduU0ZQK1pQUmZGUlVVWU0vcE4xRXlvaVg3OW5vUW9pcGcwWVJ5NmRYOEFzK2JNZzhsb3hMaXhveEFWRlkzK1R3Mm9sdk9zNUpnMW82S2loL1YvYXNDd3JCekQ2YzRkMiszNHoreTUzNzR3OFA5T0FSQWs3VTBneEt1WVg5YmtLS1dVVUVJRVNpa2hvaWhTUWtRSUFrTloxdXVPY0xsY1VLbFVWQTRxcWRWcXVGd3VxTlIyeWFYaDlkTzZQUjdKWEhXaHVLaFEwZVpjTGhjY0RnY2NEZ2Vpb3FLZzErdXY2YnEvMnZJbDNsdTlFai85c2hjQThNckx3MkN4V0VxNVl5Wk5ub0llRC9ZRUFKdytmUXE3ZHU1QTgrWXQ4R0RQWHRXK1hoZk1uNHR2ZCsxVTV1anJJOTlFLzZjR0lEMDlIVXZlWFl5UzRpSUVoNFJpNHFUSnFGWEw2MmMrZU9BM3JGbXordTRDTmw3Z0VSZ1lWRVo3eUVGdVRpNk1SaVBNWm04S2gxZExzMTcycDhuUlRvL2tVL1BJL2pRdnFBazhENTczRFFnSXZta2FwSFJBQU14SEgzK2k2OXlsNjFNc3kvWW5oUFR5ZGFyYVNvcXUrenFQSHorR0dkT25LWnJBNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWdmo3Smt6eW1LcUVSNk81d1lPaEVhalFVS3RXdWpZcVRQUzBrNVgyN3lvd2pFYkVVSWF4Y2JHVHJpVW5iZmI2WFJzbnpIOXJSMmZmYmJaQ1lDWE5EY1o3QlNRazMxeGhGQlE2alZUS2FYVTdYYUQ1M2tpQlJVb3ovTnd1OTFnV1JWNE5RK092K3l6NWFSZ2xMV2tSQWxNZVR5ZVVnQVhHUmxab2ZZbWlpSVloaW4zTndEazVlWGgyMTA3UysyLzV2MTF5dDl1bHd0REJyK0FqcDA2QXdCV3IxcUo5UFFMY05qdHFGZXYvdFhaK2syYUtJbnNWenJIc3Y5YnpHYTh0K1lETkU1SktmV2RXZjk1RzZOR2pVSHpGaTJ4YStjT0xGKzJGSXNXdnd1WHk0bUZDK1poNWVxMVlPNG1ZUE1ORkRpZFRwdzVjd1puejU3RnhZdnB5TTdPUWw1ZUh2THpUUXJBRlJjWHd5cVpvamE3SFE2N0EwNkgweWRYelEyMzIwM2NiZy94QmhFODRIbU9TRGxwUkJSRlJoUkZobExLVWtyWjFOTm5tMmRjeXA3ZHJmc0RKMVFxMVFlK29PYXJQVjZ2dEdqUkV0dTI3OEtibzhhZ1pzMEViTnUrQzl1Mjc2b3lxRjA0Zng1dlRadUNFYSs5amwzZjdjWlRBNTdHbU5GdndHUTBBZ0F5TXpNd2U5Wk1USnc0QlR1Ly9RR1BQUElZcGs2ZERJZmtyRit4Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXU5SldnTXcrQzVnYzhqTEt5RzE5bDhNUjBIZnZzTmJkdTJVN1RLRlN0WFE2ZlRLeFA5K0xGamFOYXNlYlhOaTZzNUppR2taMEJBNE1vRmk5N1pYNzlCZ3lscjMxL1hqRktxaFRmaFdRTkFEVkFWcFZRbDMzZDVIa2h6Z25BY1J6eVNOdVp5dVlqTDVTSXlXRG1kVGpnZFRqanNEdGpzZHRoc05saWx3SlhOWmtOeGNURUtDd3RoTnB0aE1wbVFsNWVIckt3c1hMcDBDVzYzV3puUEkwY09ZK3JraWVBNERoYUxCUzhOSFZKS0cxdTBjRDVHdnZGbXBXUHkzWGZmb2xQbkxvbzJPT3lsbDdING5TV29VN2Z1Vlk5dlNFZ0lOQnBOaFordFgvYytObis2Q1FCdzRzVGZlUE9OMThzOWNNcjZ5Ujk5N0hFMGI5RVNBSERQUFkxZ2xnQXpMeThQWVdFMVVMTm16YnN2S3VvMVNZM0l6c3FXbmlMNUtDeTA0TUtGQzlqOXcvZm8xdTBCdUZ4T09GMnV5NmFucEtWbFptWWdyRVlORUVJZzhEemhlYStHNXZHNElRZ0NZVlVxOEJ4SFpKSE56ZDY5Ky9SWis4SDZaL2Y5Yis5VEgyN2NBSTdqVUxkZVBVeWFQRVZaVExlVDdOeTVIVjN2NzZhWXNMMzdQSVR2dnR1RjNidC93TURuWDBCRVJDUTJiUHdZdFdwNzFmOUhIbjBNUzVlOGc2eXNTMmpZc0dyMWpxa25UMkwwcUpGd3VWeTR2MXQzZE9sNmY0WDdyWGx2RmZRQkFYam80YjQzN2ZxcmNreENTSzJJOEloUlFjSEJvekt6Y3JlV2xCUi8xVFNsMFM4QTRhWElxaUJwYllLdkJnZUE4anhQR1lhUjh4ZXBsTmRJR0lZQkw2Z29ML2dtY1h2OXQwNkhvMVErcEt6UmVSUnoxV3VtUmtsSnZhMWF0Y2F2ZTM3QnpCblRrWk9UalNlZmZBcmhFa2hzLzJZYjZ0YXRoMGFOVXlvMXpiZCs5U1VXTG41WGVhOHlZTHBlZWZiL0JtTDBxRGRnTmhkZzMvLytoMWx6NWlxZm1TMW1USjgyQldhTEdXM2F0TVhvTWVPZzFXclJyOStUeWo1ZmZQNFpldmJ1RFFDSWpZMkR4V0pHZW5yNjNhV3hpYUtJOVBRTE9IUG1qS1NsWFVKZVhoNU1KaFBPcEtXQjUzbGN5cnFrVkJMSWVXcE9oeE5PbHhPVVVuamNIdUp4dTB0cGFGTGFCcUdpeUJCQ0dFb3AwKytKSjFVWExsNGFQRzc4aEIrN2RMMS9xOWxzZm1yRjhtVjRkK2t5ZlBMcFoxQ3IxTmo2MVZlM2JaQWxMcTYwbjY5MjdTUVlESGtBZ0tDZ0lCdzkrZ2VHdnp3VXp6MzdOQWEvTUZBWjM2cEtTcE1tMlAzVEhueng1VmJrNWVWaHcvcDE1ZmI1K0tNUDhmdnZoekIzN255b1ZEZm5HVnpWWTFKS1lTbTBJQ2d3Q0F6RFBCRVdWdVBUUzlsNVc5TE9ubisyZWZNV2VrcXBEcGVKQVh3MU9JWlN5Z2lDd1BBOFQzaWVKeHpIRVo3bjVjQUJjYnZjeE9WeWVWTS9IRTRsVjFJT0h2QThyMVFzaElhR1FxL1h3MlF5SVRjM0YxbFpXVWhQdndCS0tZWVBINEUvai80QnJVYXJnTFRSYU1DTzdkOWcyTENYS3IyMjMvYnZRMUp5SGNUR3hsM1hXUGJ1M1J2OSsvZEhmSHc4T25Ub2dQNzkrNk54NDhhbDlna0tDc0lycjd5S0wvLzdCYnAxNzE3cXdUaCsvRVM4OCs1U2JQcjBjNWpOWm55OWRVdXA3Mjc1OHI4b01CZmdxYWVlQmdEbzlYcE1uaklOOCtmTnZuczB0cUtpSXB3L2Z4NnNTZ3RUdmhFV3N6Yy96V3IxbXBwWldaY1FHeGVIM053Y3hNVEVLRTlDUTE0ZU9JNERJUVNVVXNKeEhnQUVITWNSUWVDQjBqV2FaUE5uWHdRdldqaC84SktseXdjUlFwb2VQSGdBOCtZdkJCVkZ2REZxdEdLQ05iem5IdVRsNWQ2V1l4VVRFd05EWGw2cDkzSnlzdEd5cFRmdmFOLy85dUxUVFo5Z3lkTGxTS2hWQ3dEUXBWUDdpclNhY21EbmRybnczWGZmb2srZmg2RFY2UkFYRjRjZVBSN0UvdjM3eWszYUgzZi9nR1VyVnQyMGhOT3JPZWFSSTRlaFVhdlJvR0ZEMyt2dEdCZ1kySEg3em05ZmRydmRuMzM5OVZmL25UQnViQWtoUkpCOGNiSVdwL2ppQkVHZ2xGSXFpaUk0am9NZ2lKUmxSUWlpUUFSQm9JSktnQ0I0UWM4M0o5SnV0ME9qMFVDbjB5bmxXYkwvN2Z5NTh5aklMOENhTmFzdzhQbEJPSHNtRFF2bXo4V2t5Vk94YzhjT1dHMVd2REw4SllCNHlSeUdESG9lYTlaK0FLMlVRdkxGNTUvaDVWZEdYUGQ0ZnYvOTl3Q0FEaDA2SUNNakE3bTU1ZWY3aFFzWE1IL2VIUHhuMWh4czNMQU90Uk9UOFBERGZTRUlBbHEwdkZjeGhYdjI3SVhEdi8rdWZPL1hQYi9neHg5L3dMdExscGVLbHJkcjN3SHQybmU0T3pTMjdPeHNuRHg1RWxsWldjakt1b1M4M0R5WVRKZURCVWFEQVlJZ0lpZ3dDRVdGaFlvZnJTQS9INElnSUNRa2xHaTFPa0lwaFNBSWhCZDRJZ2c4WVNRQndEejVaUC93aTVuWll6dDE3bklvSmpaMmNkcnBVMDJ6c2k0QkFKS1NraEVWSFkzT25ic29pM3ZIam0vUW84ZUR0eTZRSXBrNkFFQWx5aVFaaEI3dSt3ajI3dDJEdzRkL0I4L3orT1dYbjVGNjhnUjY5dks2Qk0xbU13Z0JHSlpGY1hHUjRpT2hZdWtxbHJqNGVCdzZlQkFjeHlGZm9tblNhTFg0NU9PUDhQbm5tOEZ4SElxS0NyRnYzLy9RckZtenk2YndqdTNZOXZWV0xGMitVakdmcXQzOHJ1SXgzVzQzZmo5MEVQUG56Y0h3VjE1RllHQmdSWURlUktmVHpYbjIyZWUrUDM4aFk4VHE5OVpHU1JxY2xsS3FvWlNxZlRVNHlRL0xlTWtQZU1MeEhQRUdEZHpFN1hZVGw4c05INTljS2UzTmJyZkRLaVh4eXI2M3JLeExPSFRvQU9yVXFZdHUzUi9BdE9rem9ORm9ZYkZZTUhUWVMvajhpeTNZK05FbldMTjJIVFFhRFRaKzlJa0NhcWRQbllMYjQ2bFduNmF2SFAzakNDWk5ub3I3dTNYSHUwdFg0RlRxU1ZCS1VWeGNqQmNHL3ArU29uVDgrREVrSlNjcmYzLzA0VWJNWDdDb3d2RUgvdVhwSHBSU25EMTdGcG1abVFyRkVLdFNvNlM0QkZhYkZRNjdIUTZuRTlrNTJRZ0kwRXZPVjRMaTRtSVFoc0RsY2hPMVdnVVA1NEVvQ2dCQWZPaUJHQURraHg5L0NibDBLWFBZZ2YzN2hqRU1VeGNBT25ic2pJTUhEeUl3TUJDZE8zY3RadzdQbVRNTER6elFvMUlmUjNWTDJRVGRCZlBuWXNIOHVYaXdaeSs4TlgwRzZ0ZHZnTGRuenNKN3ExZkNrSmVIMm9tSldMajRYY1JJMmN4OUhub1lKMCtld05BaEw0QmxWWGpzOFg2b1g3OEJMSVdXVXNjWk0yWWNGaTlhNkgwUzE2Nk5kUnMrZ2thandZS0ZpN0Z5eFRKODhmbG5VS3ZWNkhwL053d2EvQ0lBUUJBRUxGcm9OUU9mZmJwL2FUTngwK2JyTm84cWtxb2VjK1JycjRJUUlERXhDV1BIVFZCOGtGZVF1bHFkYmtiZlJ4NTlvY2VEUFQvK1p0dlhuNDBiTzdwWTF0NGsvNXVpeFhsVFE0aElLQVgxVnFoUVFSUWhpZ0xoZVI0c3kxSzVjcVVpaWl2NVlXVXc1S0ZHalhBMGFOQVFaOCtlZ2NQaHdKaXg0NnFVMnZQNVo1L2lxUnVjVm5QZ3dJRktQeHZ3OURQSzN4RVJFUmcvWVJJQUlEdzhIQzhPRzRiWFh4ME9Tb0hrT25YUTd3bXZiMjMrdkRsd3U5MFk1Uk5vbVByVzIyalFvQ0VLQ3kxNGVkalFmMit0cU5WcXhmbno1M0hwMG1VLzJsOS8vUVdHVmNGdXM4SHVrNXVXbG5iNnN2WkNLZFJxTmRIcGRMQmFyVEx2RnBHSUlBbkRNSVJTeWlRbEpiRjc5dTUvbVdYWmwzLzY2Y2ZHKy8rM0Z6UCtNeHNBa0o2ZWpubHpaeU1vTUJDRFh4eUs1czFiS09lMWJPbTc0RGdPNDhaUHJEZ2llUzROWGJ0MnJmSjE3dDI3MTA5UVdJbFVOcGEzY014T3A1NDQvdEh5NWNzM2YvZmRkeDRKNEJRVEZkN2FWUG1WeXNYMkRNTlFRUkFVL2plVlNrVlpsb1ZhcllaS3BWTElMV1hUTkNtNWpzVDNKcEZaeHNTZ1pzMEVKQ2NubFV0M3V0Rnk4TGYvVlhuZjloMjdWTnQ1L0NzMU5xUFJpQXNYTGlBcnk1dkM0VXNFeWJBcXJ6UFc2WVRMN1lMZGJnZlA4NGlPaVFIUGNYQzZYTVJodDROaFdSQkNpQ0FJY2k2YUV1VThmZWI4TXk4TS9MOFJScU94Ylh4OFBQTEsrQTdxMUtrRHU4Mkdnb0o4TkcxNjJjVGEvT2ttbU0xbXpKZzU2NFpkcTE0ZjRFZXdxeHliV3pobWpXclVDSisvYytmT0owcEtTajRNQ3d2YlFRamhmQUZPMHVLSVY0c0RwVlNnb2xTckovbmpJSW9pVWFsVTFKY1ZSdGJhQUlLaW9pTHdISzhrKzdyZGJyaGRMcmhjVGlRbEpsVXJIVkpBUUdDVnlxb0NBZ0tyZGFEL2RjQ1drWkdCOVBSMFpHZG5LMG1CY3RLdDFXb0Z3N0JLS29mSDQ0SEZiSUZLcFlMYjVTWTh6NE5LQmVyZXRBMkdpQ0pQQkVFZ0FKZzJiZHAyZjJmSjBsY0RBd1A3VHBveUZWTW5UMFNOOEhDb1ZDd0N5aXlXanAwNm82UzRTRWsyTkJvTldQUGVLaVFrMU1LUVFkNG9Jc093MlBqUko5ZDF2U3pMd202M1ZmdVQrRTRUdTgxYWFRa1djNHZHekc2emdsV3BRQWhwRXhvYTJrWVFoTDRtaytuRHVMaTRBNFFRamxMS0UwSmtnQk5CSUlKQ2hDZ3FCSm1pNk0wYWthbXRSRkZVekZNQTBPbjBzSmFVZUZOQ2VEa2xoTHRjeWVCeXcrbHlvWllVOUxuUmtseW4zajhXd2djRUJDSzVUcjFxSGV0L2pTbEtLY1daTTJlUW5wNk9uSndjR0kxR2hXWklydmZNeWNrQllSZ3ZLMGVwc2lpZWVOazRlRi82SUZsTFkwNmtwalVJRGc1K2pSRHl5cTB5bnlvSDhreVlMUmJFeE1iNzBjeFhhemZrSWpJeUFvbTF5MU02WldSbXdteSsrV05tTk9RaUlpSUNTWW1sejRuanVIV3BxYWtmdDJ6WjhnSUFEZ0F2UlZJVkg1ek1IK2ZMQ2VkRGNFbkxtcVV5SlpJY01aVlRROExEd3hFVkZZVzR1RGpVcmwyN1drdnFicVg4S3pRMnVZb2dJeU5EQVRXejJZemk0bUtmSW5ZSDNHNDNSRXA5eTZJSXovUGdCUjZpUWl0RUNRVWxvSlQwZjJvQXUzRFJPeU5abG4wRFFNTE51SmFnNE9DcjJqOHhzVGJ5ODAwd0duSVJGQnh5MTJ0dWRwc1ZOcHNWQXM5WENHb0FrSlNZQ0pQcDVvMlpmRTZpSUpRRE5RQlFxOVhEV3JSbzBjZHV0Ni90M0xueng4ZU9IZlBJQUFkdmtNcTNBRi9oaHBOQmptRVlJdm5mcUV4Ujd0dGNSZ1k0WDlaZXVlZEN3NFlOcjduVzlIYVdPMTVqS3l3c3hObXpaNVU4R1Y4T3RiSmtrSVdGaGZCV0MvRGdLdGZTR0FEazNJV01uaHFOWmhTQUIyN21vblM3bldqV3RPbFZhNnNYTXpKaHNaZ2g4Q0pjcnJ1VG8wMnZEd0REc29pTWlFUmlZcTEvMUVZeU15OGh2NkFBQWk5VTI1anA5UUZnVmFvS05iV0tSQlRGUFNhVGFWMWNYTncrUW9odmdJR1hORGRCQWpSUkRpNndMRXQ5d0l5cTFlcFNKSmErUFJia0JqSnlkNnlrcENRMGFOQUFOV3JVOEFQYmJXTnVHSTJsMGpsazJ1NktHRzdkYmpmc2RqdGNMaGNSS1lVZ0VVRXFXaHFsQktETWthUEhZcU9pb2tjUlFrYmY3T3N4R2ZNUUZ4dUR1TGc0K09YdUZvL0hzK3FYWDM3WjJLZFBINE1VWUpBMU9NRW5jaXFERzVXMU5WbFRVNnZWVkc0QldCYmNmRTNTK1BoNEpDWW1va0dEQnYrcUpqSjNyQ21hbFpXRmMrZk9JVE16VTBubjhHMnVJdE82K0RMZENvSkFQQjZ1SXZZTkJnQno0ZUtsL2lxVmFqU0ErMjdtdFRqc050aXNKUUNvSDlUOEFnRFFhRFN2OWVyVnE0UFpiRjRiRVJIeEhTR0VsY0NOODhsL0kxNGxUeFI5R3Y1UUg2cDVXbG11VzJWMXA5VVZWUEFEV3hYa3dvVUxPSC8rdkFKcWNqcEgyZVlxWmVpN0NjZHhBS2g4MCtVdVQ4eTJiZHRxaFlTRWpNbThlUDdWbTMwdHdjSEJVS2xVaUkrUFEyeHNySDlGKytXeU9VVkl5L0R3OERVZWorZUQzMzc3YlVPM2J0MnlDU0dNYkpwU1NubGNabDRXdlY0SjZoc3BKYjVSMDdMcElUSjl2UysxdmNmalFkMXJZUER3QTl0MVNscGFtcEo0SzNlTktpekZkT3NvQzJyRXB4ZUI0a3VEVkRuZ2RydWZVS3ZWWXdHMDhpOGx2OXlPb2xhclgrcmF0ZXQ5K2ZuNWE2S2lvblpMdmpkR0FqVlplNU5UUWNwcWIrWFNRc3BXTHZoMlRwTUI3cDU3N3V5a2I1S1JrWEZIbktoY0hpVUhDWHo5YVdXMU5KOU9VY1JiV096dERDV25jRkJLeWM4Ly94eVdtSmc0am1HWUNmNmw0NWM3eVBlMmJPdldyZXNuVFpwVUNNRGprK0FyeVA0M3VXcEJTZ254OWIxUjN3b0Z1ZlZmVUZCUU9iK2JIRlM0VTlOQlZJbUppYmY5U1hJY2g5VFVWTVYzVmxHSHFBcTZRdmwyVS9jRk5jWnV0M2ZSYXJYakNTRTkvVXZGTDNlWXZEbCsvUGlVWjU1NVptMVNVdElSQUN3QU9YcEtVSnJKRjZJb2doQWlsMlFSbWYrdHJJYm1XMlR2Y0RoZ3RWcFJWRlNFbEpRVXFOVnF2eWw2bzhYbGNpRTFOVlVwa1pLckNYeGI0aWs5Q1NUQ1BWbFRrMDFQQ2RnWVNpbmo4WGlHc3l3N0VZQS9vOVV2ZDZRd0ROTWpNVEd4Y1VsSnljcVFrSkF2QURDU2VTb25sWmNLTE1nV0QvVUtrYXNYZlByWTRrckY5U2twS1pWMnhicHRUZEhiT2QzRGJyZVhBcld5MVFSbEd4YkwvalRKL0pUclBCbFJGRWx1Ym01OGRIVDBCRUxJcS82bDRaZmIxZDFpTUJoZ05Kb2dDQUpzTnVzL2ZvZm4rWFZIamh4Wk4zbnk1RnhKYzVNckY1VGllcCs4TjBpcElYSVNyNUx6Sm5lbUwxdWxFQjBkalpvMWF5STVPZm0yQUxmZzRCQ3dMSVBvNk9nclpoRGN0aHFiMVdxdEZOUmtobHU1OTZKdmtFQUdOWi9JSjJPMzJ6dHJ0ZHFKaEpBSC9jdkhMN2NycUIwN2Rnd1VSS21HcUdKVzJiRDZEUnZYNmRydGdmYzZ0R3Z6QndBRzNzaXBUSURxcFVYeS9rT2x2cmRlalkxU0wwT1MxQWRYM3VRZXVvSkl3UXNVSEMvQzdSR1FtSnlBb0tCYlg5bGl0OXVRbTJkQWJsNGU3cnYzM2pzSDJJcUxpeFZRazR2WnpXWnpoWnBhSlpGUHhaL21kcnNIcWxTcXlRRHErWmVQWDI1WE1SZ01vQ0RYVkwvS01FejNXclZxSjU1TVRWdlJKT1dlSGFDVW9ZQnYzdzFCb2dzUnZiRUFDc2tDQmJ6cmhDb21xUnhSbGN4VVVhUVFxUlJOcFNJYU5taUk0SkNRV3pwV2dZRkJDQXdNZ3NtWUI0UEJVR0dhMUczRm9QdkREeitnZmZ2MmlJbUpRZGV1WFRGaHdnVHMyYk5IWWVpb0tBTHFWdm9QZUgxcTBzYUlvcWlhUDMvK2xQVDA5TFhmZi8vOWJRTnFQTTlqMUtoUmlJNk9SbWhvS0lZUEg2NTBkL0xMM1NzbVV6NkNncThMTU9xR2hvVXRQbmYrNHZDRzl6UUtBS0NUdW1mSlBSZFlTc0ZTS25mTEVnalBjL0J3bkplcDErV1dlaXg0dTJOWnJWWVVGeFhCWWpIRFpEUWhKeWNIR1Jjdkl1MU1Ha3FLaTIrTE1Rc01Db1pSNnB4V1Z0Z1pNMmJjRmllNWQrOWU5T3paRXlrcEtYamdnUWVRbEpTRW9xSWlIRDU4V0k3c0tJQlcxdnlVdFRRdnRiTEFwS1NrMVByODg4L25kdTNhZGN5QUFRT1lrSkFRZE9uUzViYTR6b2tUSjJMYnRtMzQ5Tk5QOGV5enoyTHAwcVU0ZGVvVUhudnNNZi9xdm9zbE56Y1hOY0lqcnZwN3AwK2xZdDVVN01lSEFBQWdBRWxFUVZTYzJlalZ1dzhBTUNxMXV1T3ovL2RjU0t2V2JTNTh2ZlVyQitCVjNTb3pmeWxBY0xtUnQyU08wc3VicEtrVkZPVGowTUdES0N3c1JFUkVCSUtDZ3FIVDZmRDExMTloL3R6WjJMWnRLd290aFdncG1ZYjUrZmw0YTlvVWJONjhDVC8vOUJPYU5HMkswTkF3QU1CZmZ4M0h0Q21Uc0hYckZody85aWRhdDJsN1RWMndOQm9Ock5aaXhGZmdhN3R0VE5HMWE5ZWlhZE9tZU9hWlo1Q1ZsUVZDQ0ZxMmJJbUNnZ0tjT1hNR0tTa3BsU1hlbGdvU1BQamdnNjBhTldvMHBWdTNibjNsbTNlN2lOMXV4NnBWcTdCcDB5YUZtdWo5OTk5SHo1NDlzV0RCZ2dxYjN2cmw3aENydFFUUjEyQ0dOcnluRWQ2ZStaOVM3Nm5WNmtGZHVuU0ovdVhYLzYzcGZuK1hFNVJTUmtJM3hUU1ZzVTBVQkpHWGZHMkE5OVVMZUJLd2dlSkMrZ1Z3SEFlV1lSRVJFWUdNakF4UUFJR0JnZGk2WlF2V2ZyQWVHbzBHWThlOGlTTkhEcU4xNnpaWXZXb0Z1bmQvQUgwZmVSUi8vSEVFQytiTnhhcjMxb0xuZWN5Yk13dnpGeTVHVWxJeTFuM2c3U3Y2MHN2RHIybmNmSHNGMzNhbWFGRlJFZXgyTzNKeWNuRGh3b1ZTUHJYRXhFUWtKaVlxS1IxMnV4MzUrZm1rc0xBUU5wdU51Rnd1SWdnQ0k0b2lrNVNVMVB2SEgzOWNzbno1OHI2RUVIVHAwZ1ZIang3RlcyKzloWGJ0dkExNTI3VnJoOW16WjZONzkrNElDQWhBdlhyMThQMzMzMlBac21WSVNFaEFhR2dvaGcwYnBoRDNVVW94Yjk0ODFLOWZIeHFOQmhFUkVSZzBhQkRzZGpzOEhnK2FObTJLQngrOEhKUFl0R2tUdEZvdGpoOC9EZ0RvMzc4L1dyWHlGalVjTzNZTVRxZXpGTjlhNTg3ZVR0c0hEeDcwcjI2L2xCT3oyWXl4WTBaaDBQUC9oOEdEQnVMM1E5NTVrcDJkalFIOW44Q1QvUjdGcURkR2x2ck81SW5qTVdUUTgzMW0vMmZHMUpTVWxDNEFkS0RVdDVFTUs0b2lLNjhicFlrTXg2R2twSmdZREhsZVFrcW50M0Z6WkdRa0dqWm9DSTFXZzVLU0V1VG01aUF6SXdPN2YvZ0JLVTJhSUNEQVM3SmFJNndHL3BMbS9WOS9IVWVYTHQ1NUhob2FpclMwMC9CNFBERGs1VUduMXlNcHlkdVlKVHc4SEg4ZFAzYkR4KzJXYTJ4eW9LQmR1M2I0OXR0dk1YZnVYTVRGeFNFa0pBUjZ2UjR5MTd1YzBtRTJtd2tBcUZRcVFpbVZ1NjR6VnF2MVdZMUdNN1Z2Mzc3MUd6WnNpRVdMRm9GaEdMUnYzeDZQUFBJSXBreVpvaHh6L3Z6NTJMRmpCenAxNm9SWFhua0YvZnIxdytPUFA0N1RwMC9qMUtsVDZOYXRHeDU2NkNFODhjUVRXTFZxRlJZdVhJak5temVqY2VQR09INzhPQVlPSElqbXpadGp6Smd4K1BEREQ5R3VYVHQ4OHNrbjZONjlPMGFPSEltWk0yZWlSWXNXQ3JBVkZoWUNBSEp5Y2hSdzlIbTZJaUlpQXRuWjJmNVY3SmR5OHNYbm05R3NXVE1NR3Z3aTB0UFRzWHJWQ3JSdDF4NEpDUW40NzVhdE9IZnVMT2JPTGswMVAyL0JJbWx0RmJVWi90TFE4QTgvK21URjRFSFBmeXNwTWtTeVRqa0tDTjRIT0JHbGZGNFFRcWhLcFNKdXQ5dXJ4QUdnb0NDRWdkdmxnczFtUTc0cEh3QkJabVlHQWdJQ2NQRmlPbFlzV3dwQkZCQXMrUW1MaTR1aDFlbXdZL3MzK09tbjNkQm9OTERaYkNncEtZRldxNFhINDhIS0ZjdVFtNXVMb3FLaUd6NXV0MVJqODAzcEVFVVJBd2NPUk4yNmRXRXltWERxMUNrY1BYb1VxYW1wS0NrcGdkdnRSa2xKQ1pIQVFJbjRNQXpEQkFjSHYvTGxsMTh1MG1nMDllV0dGenFkRGhxTkJvUVFoVmxVbG43OStxRmJ0MjVRcTlWNDRva240SEs1TUhmdVhBUUhCNk50MjdabzBxUUpVbE5UQVFCSlNVbFl2MzQ5K3ZUcGc4VEVSRHoyMkdQbzJyV3I4dmw5OTkySFNaTW1ZZno0OFJneVpBaWFOR21DQ1JNdVYyazk4OHd6R0RIQzI2UFI0WEJVbUF1azFXcWxEbGwrOFV0cGFkMm1MWDcrNlVkODlPRkd1RjB1TEg1blNaVytKNG9pWnM1NEd3LzNmYlRlQXowZW5IWXE3ZHdBQURwcDAxQksxYUJVQllBRktLT2tSd0dFWlZYZ09BL3h1RDArcmY3c2NIczhjRGdjc0JSYWtKOXZRbEZSRVU3OC9SZkdqeHVENTU1L0FkMjZsYVl1bkRkbkZqSXlMbUx4TzB1aDFXcExLVE5qUnIrSnhvMVRNUEtOTjZ0bDNHNFpzUGttMzhvcEhTNlhDM1hxMUVHclZxM1F1SEZqUkVSRVFCQUVHSTFHNG5hN0pYWU83eE5IemxIak9HNThTa3JLZ3RUVTFDcDNxUEF0STVNSFBDRWhvWlJUVWdhYXZuMzdvbmJ0MnBnNWN5YWVlKzQ1dEdqUkF0OTk5NTNVT01NcjA2ZFBSMFJFQlBiczJZT1BQLzVZNlhOUVZ2UjZQVHdlVDduMzNXNTNwZjBSL1hLWEExdnJObGk1YWcxcUppVGc0NDgyNHUyM3BsYnBlK3ZYdlErZFRvZUJ6NzhBQUZIQndjRnZmZjNOOXNFQTlCSzRhUWtoYWtLSWlsTEtBbUI4QW5DRTQzaDRPQTlSSXFaT0p6aVBGK2hLaW90aHNWamdjYnRSWEZLQ3h4OS9BZ1FFSmRZU2hJYUZLZVpuaDQ2ZE1QS05VVkNyMWZCNFBBcHpiMGx4TVVhUEdZZmVmUjZDeStWQ21QU2RPeDdZZk11a3NyT3prWk9UZ3kxYnR1RGl4WXRLbmhySGNkRHI5UWdKQ1NHQWwvN2JGOVJXcjE2dDVqaHVPc013czBWUjFKWHRPSDVGKzF0VjNnS3ZyTmgzeVpJbDZOQ2hBekl6TTlHaFF3ZXNYYnNXdlh2M0xyV1AwV2hFVGs0T0tLWDQ5ZGRmS3oxdVFrSUNYQzVYS2RXYjR6aVl6V2JVckZuVHY0cjlVazdteloyTncwY09vMGVQQnpGNXlqUWNPblFRL3pUWDkrL2ZoNzIvL29vcFU5L3luZGU2SmsyYVRybjMzbnVITjJ2V1BCQlNPZ2lsVkEwcEhRUUFTMFdSOER4SEJJRW5QRmM2SFlUbmViamRic1drVkdzMGNEZ2NLQ2pJeDhXTDZkajl3L2RvMUxneEFLQkZpNWJLZWY1NTlDaVNrcEtoMFdnUUd4ZUgwTEF3YUNVTGF2KytmV2plb3NXZDcyT1RDOXA5YXorTGlvcVFuNThQaDhPQjVPUmszK1JiSW1zNGN2czdBR1RuenAxQlBYdjJuTW93ekxpaW9pS2NPblVLUTRjT3JmQjQxOHRPc0dUSkVreWVQQmt6Wjg1VTNzdkl5Q2dWd1h6cHBaZlFva1VMOU92WEQ2TkhqMGJQbmowckJLcVdMVnRDcjlkajM3NTllT1NSUjZSSnVCOE13eWpCRGIvNHhWY0dEbndCaXhjdndPZWJQNFVvaWhnemRqd1loa0YyZGpiR2pIb0RIT2RCY1hFeEJ2Ui9BdmZlZHg4bVRaNktsY3VYd3VWeTRiVVJMeXUvczNMMVdnUUhCMlBCb25kR3Y3Tm9vYWFnSUg5ZGJtNnUvSVNWbzZXOHROWUViMk1zd2V0aWsvYmhlWUY2T0s4NUNnSUVCd1VqTGk0ZW4yN3lkcEsvOTk3N0VCd2NESjduOGVwckl6Ri8zaHg4K2Q4dm9OZnJNWEh5RkVXcG1ETDFMY3lhTlFPY2gwT3RXclV3WWRLVU94dllLS1hseXFUazZHZHljakxPbnorUDFOUlVCQVFFUUJBRXVOM2Vwd1FoUkNiVEl5a3BLVFZtejU0OU5TSWk0azIxV28wcFU2WWdKQ1FFQXdaVTNMMDZLQ2dJQnc4ZXhLRkRoNjRKUE1MRHczSGd3QUhrNXVaQ0VBUXNYTGdRcDA2ZFFsT3BMOEg2OWV1eFo4OGUvUDMzMzZoWHJ4NDJiZHFFbDE1NkNkOSsreTBBNFBQUFAwZGhZU0ZHakJpQndNQkFEQjA2RksrLy9qcUNnNE9oMFdnd2ZQaHdEQmt5Qk9IaDRmNVY3SmR5VXF0MmJTeGJ2cXBDN2YrL1c3WlcrSjNQLy90VnBiOTN6ejJOOE1INmphKzUzVzdWNWs4M3JadisxbFN6dExaOGxBRUdsSXFDS0RLbHdDMG9LQWdhclVhMm5rQkFVQ01zREVsSlNZaUlpRUJNVEN3eU16TEFzaXdhTjA2cDFCL1l0R2t6ckgxL2ZiV08yMDAxUmE5VTBCNFVGSVRZMkZpSW9paWJvMFFHTlpabENhV1VYTGh3SWVMNzc3OS9LeTR1N3MwSEhuZ0FYYnAwZ1ZhcnhmNzkreXUxMDE5NzdUVWNPSEFBZ3djUHZxWnozckJoQTBwS1NsQzNibDIwYTljT05wc05reVpOd3A5Ly9vbXNyQ3lNR1RNR1U2ZE9SWU1HRGNBd0RENzQ0QVA4K09PUDJMQmhBd0JneTVZdFdMLys4azFjdkhneEhucm9JVHorK09QbzI3Y3Y3ci8vZml4YnRzeS9ndjF5VTBXcjFRNS9idURBbCtjdFdCUUZRQ3RWS2FpOXlvNVNwVUJFMFp0NTRHM0E3QTBvdU4zZUtnV0h3K0UxU3lXZm04bGtRbTV1TGpJeU1uRDJ6SmxiZW4wM2pkMGpMUzBOYVdscFNvczh1WnVVWENibHkzeGJKdm1XVUVySm1UTm5hdFNwVStjdFFzaEkvN1FzTGFJb0lpUHpFaXdXQ3dSQmdNdDVkNVpvNmZSNnNDeUw4Qm9SU0VxcVhXa1FSN1lldkdObUJzOVgzNWpwOUhxb1ZDcEVoRWNnS2FseTdzTzllL2VpYnYyYnoxcnJjYnMvMkxUcGsvZmZuajdOQXNCRkNIRkRhUnhEQkVJZ0VNSW9EV1BVYWhYVUdnM1ZhcVMrcFFFQkNBb01STERVemk4aUloS3hzYkdvWGJzMjZ0YXJqM3IxcXJlYXNiSSt2RGZGRkpWN0ZKVGxVNU03U1IwL2Z0eTNRb0Q0MnYzU0ZsU3ZYcjJwQVA3Vm9HWXdHSzY2VTVEYjdjRmZmLzBGVnFWQ2NFaW92NitvM1liQ29rSVVITTFIaStZdG9OR29Ld1MxUC80NENvWmxFUlJjL1dObXQ5dGd0bGlRWDVDUDFxMnV6RUNmYy9QekdWL3ExcTI3ZUhISWkycy8zTGhCV1lkZTA5UmJZZ1dJZ2loU1VHOHhQQlVFa1FpOFFKVnU4ejRrbFU2SEEzYTdEVlpyQ1lvS2kyQXVLQ2lWY1hBanBlWVZmcmZhZ1Mwcks2dFVqNEt5M2RrZERnZHExNjZ0YUdvZWo2ZFU3ZWZxMWF2Vnc0WU5tOG93ekp2d1N6bkpNK1NCVmFuOG5lQWxrWmtmaklaYzVPYmxJcWtDaHVpTEdabGdXUGFtalpudk9XVm1Ya0xpRmZxTDFreEl1QlhETm56cXRPbDhSa2JHMmwvMy9GS1poaXRjQmp1UlVpb1NTc3YzVWVBbFpsNlBoNFBMNDgyQkk0UWcvaVpIL2FzVjJJeEdvOUlpcjJ6amxRbzZTWkdLdU5Ra1VCdm5YN0lWaTduQWpLQ1FVUDlBbEpHZzRCQVVGSmdyQkRhTHhZTGdXekJtUWNFaEtEQVhYQkhZYnBrWnI5Tzk5djRINnowTjZpV3ZsN1ZhT2FCQXZkRUZLcGJLTXlFVUlBUWdjbGQ2RUVMQWVNa3N3VEFzV0phRmlsVkI1VFZmRVJVVmRlY0RtOXloWFc2Umw1K2ZYeW1kZDFtZm1tL3lMY013VS8zTHRESS9FU0FJd2wxdmZsYW1KUlVYV1NyODdGYU5XV0JnRUlvTExkZjAzWkxpWW1SY3ZBQzczWGJGMzA5S3JvdVEwR3NEYmIxZVB6cnQ3QVhYUFEzcWJwTHdUSmxxUG1NblhtN2Z4MUdPOHhBSitFQVlBc0l3RXJBeFlGa0dLcFhDMWd1TlJvUFEwTkE3RjlpY1RtY3BVQ3ZMcDFZSlNhVGNmSVZJdlFsZVlSaG0ycFVYOXRWVEtkOXVVbFdxNDRxRUVNRHA5SE81VlRvUEsrRzV1NVhCbFd1OVh4ZlR6OFBoc0Y5eEg3dmRob3lMRjlDc3hiM1hBYjZCbzArZU91Tm8wcmpoVmg5UW8yVTBPQkVBRlVXUjhEeFBuVTRIWVZtV01vU0FFQVlNUXlDWE5ubzNGVlJxTlRScURSbzFibnhUS01adk9MQlJTbkhtekJtbFRaNGMvU3lycVpXSmZzcU5KUmlKOWZaWmxtV253VnY2VWVseHJwRksrYmFUcWxBZFg2djh1UHNIYk55d0hpYVRFZkh4OGZoNDAyYzRkKzRzaGc0WnBPd3phY28wUFBUUXczNGt2STNsbjBETmR5NWRyMVVhR2hyNnhyRy9UdHBiTm0veXZhKzJWZ2JjQUVDa2xIcDlhcHlIZUhzclhBWTJobVhCTWhLd3lWcWJWb1BHalZPcXZhM2ZEUWMyWDFBcjI4ellicmRYU09mdDYxZHpPcDI5VkNyVlZBQlhOTWl2aDByNWRqU2Ivb25xK0Zva056Y1hDK2JQeGN4WmM5QzZkUnVVbEpRQUFPclZxNDhmZi80VkFQRFMwTUhWZGwwYjFxL0RZNC8zSzhWbUlwL1hzaVh2NE1TSnY2SFJhTkRqd1Y0WThlcHJZRmtXZ0plU1o4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEdm1uWTNicDFCNXF0UnFFTUVoS1NzS1FvY1BRc1dPbmZ5dU9Sa1ZFUkx5NmN1WEtrdGRmZi8xQUdjMk5Fa0tvOUQrUm0yRHhIT2ZsSW1jSUpRd0JReVEvbTZTNUtjQ20xa0NyMGFKZS9mclZlZ0UzTkVFM0l5TUQ2ZW5wbGVhcHlkUkRVb3M4K0xMZlVrb1pxOVhhU3FQUlRBWHdqMWQ5QTZpVWJ6K0F1d0xWOFRVOVpOSk9Jekl5RWgwN2RvSkdvMUhLd0FnaFNtZWk2bnh5ZnJoeFBTd1djN24zWjd3OURUVVRFdkQxTnp2eC9nY2JjT2pnQVd6ZnZnMkFOeWR2MG9SeGFORHdIbXo3WmlkV3JGaU52Yi91d2RkYnY2cTI4NnpxTVZldVhvTWR1NzdEa0tIRHNIamhmR3o5YXNzdG1TZUVFTng3NzczbzJiTW5ldlRvZ2ZqNHEzdTRDNEtBMzM3Ymo4a1R4eU03SzZ1eVk5U0xpb29hdm1EQmdzYVM1U1RUakt1VnVsSks1VzcwaE9kNThKdzM5Y05US3ZYRGpzS2lRdnowNDI2c1hmTWU1cytmZy8zNzl5RkxPbTdXcFVzWStmcXJlUGFacHpCbTFCc29LaXBVenVHakR6Zml1V2VmeGpOUDk4ZXVuVHR1amNabU5Cb1ZVRE1halFxb3libHF2bDNhZlRxMEs2Qm1NQmhxNmZYNktRRGFWdlhtL051YzVvR0JRYkJacjU5UC92anhZNWd4ZlJvOEVzM000NDk2emN4K1QvVEhvTUZEcXZRYmh3NGV3TW9WeTJFdzVDRXhNUWxqeG81SFNwTW15dWQ3ZjkyRERSdldJZDlrUWt4c0xJWVBINEYyN1RzQUFFYSsvaXF5TG1VQ0FFYS8rUVpVS2hZSkNiV3djdlVhaUtLSXJsMjc0ZUcrZmFIVmFoRWRFNE5XclZzcm1lb1dpd1Uxd3NQeDNNQ0IwR2cwU0toVkN4MDdkVVphMnVscUcvZXJPYVplcjBmSGpwMmduaklOYjArZmhsNjkrOXgwWnBiazVHU3dMSXZkdTNkRHE5V2llL2Z1eU0vUGg4UitVd3F3NVNSbDM3L2ZmT04xMUt4WkU2ZFBuNElnQ2xjQzBOYUppWW5EeG80ZHUraWRkOTdKa2JVMkg1K2JIR0FRQlVFRUlieTM3cEV3bERBTUNFUEFzQXh5YzNOQkNNRURQWG9BbEdMRCtuV29WNzgrOURvZGxpNTVCNDg5M2c4OWVqeUlMejcvRE8rdFhvWEpVNmJoeEltL3ZYTnM0MGR3dTkwWVBud1lXdDU3WDVWQi9JWm9iRmFyVldIcThLMy9sRHUzWHltdGcxSktYbnp4UlRZaUltSXlJYVJ2MVk5WmNrTW5pOWxzeHVSSkUvRGNzMDlqM3R6WnR3emNLcU02dmhwcDBhSWx0bTNmaFRkSGpVSE5tZ25ZdG4wWHRtM2ZWV1ZRdTNEK1BONmFOZ1VqWG5zZHU3N2JqYWNHUEkweG85K0FTZEltTXpNek1IdldURXljT0FVN3YvMEJqenp5R0taT25hdzBwVm14Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXZYZUNjY3crQzVnYzhqTEt5RzF5bCtNUjBIZnZzTmJkdDY2M2dqSXlPeFl1VnE2SFI2WlVFZVAzWU16Wm8xcjdZeHY1Wmp0bTdURmg2T3V5V2xRNUdSa2NqTnpWVjhYYUlvb2thTkdxWDJPWExrTUtaT25naU80MkN4V1BEUzBDR3dXTHdSMlhlWExNUGtLZE9xcEJnd0ROUDd2dnZ1R3h3VEU2T1h0RGFmMGl1d0FCaHZSemlSdUZ3dTRuSzV3SEVlWWpHYmtaZWJDNWZUaGVMaUlnUUdCcUtrcEFRcXRScUNJQ0QxNUFsa1pHWWdMZTIwY3U4ZmVyZ3ZEdjkrQ0FCdy90eFp0R2paRWxxZERpR2hvV2pmdmdQK09ITDQ1cG1pbE5KeVZRVyttcHB2Qk5TM1E3dHZCSFRObWpXVENDSERic1JOLzJyTGwzanUyYWZ4N0ROUFlmNjhPWEM3WEZYNjN2dHIzOE05OXpUQ3A1OTlnYkhqTGhORm1veEc3Tnl4L2E1eVZPL2N1UjFkNysrR2poMDdRYXZWb25lZmgzQlBvMGJZdmZzSEFFQkVSQ1EyYlB3WWpWTlN3REFNSG5uME1YQWVEN0t5TGxYNUdLa25UNkpuajI0WTlQeHp1S2RSSTNUcGVuK0YrNjE1YnhYMEFRRjQ2T0crTiszNnEzSk1RZ2pDYTRURGR2M08rcXNXalVZRFFSQVFFUkdCVHAwNlFSVEZVa1NPQU5DcVZXdUVSMFJnNW96cEdEdm1UZlI3NGttRmFPRnFHNmVvVktybkZ5MWFOQkJlTGpkZmsxUWxZUWdqVWtvWWhvSEg0eUUybXcwdWw0c0VCZ2JDN1haRHBWTEJZTWlEMVdwRmRuWTJDZ3N0eU0zTlJXNU9EaUlqb3lBbkJSODZlQUJXcTNjODY5U3RoNk4vSEZFb2tsSlRUOEptczkwOFlEdDc5aXd1WGJxa3BIVlVwZmRubVFqb3dCdVZxM2JpeE4vWXN1Vy9XUHZCZW55NitRc3dESVAxNjlkVjZidm56NTFEaDQ0ZHk5MzQvUHg4N05qeHpWMEZiQWFEQVhGeHBWWCsycldUWUREa0FmQ3lQQnc5K2dlR3Z6d1V6ejM3TkFhL01GRFJkS29xS1UyYVlQZFBlL0RGbDF1Umw1ZUhEUlhjcDQ4LytoQy8vMzRJYytmT3I1QkRyenFrcXNla2xNSlNhRUhRTFhLSEpDY25vMUdqUnZqdHQ5K1VvRkJaNEIwK2ZBVCtQUG9IdEJydGRUMFk5SG85Qmc0YytLYkJZT2haZ2IvTnE3bDUvVzBNSVFTQ0lFQ3Qxa0FRQk9MeHVCRVVGQXhlRUhENDkwTTRmU29WRE1QQTRYREFaREtoVjYvZStPYWJyekZrOFBOSVRUMkp3RUJ2LzRUbXpWdWdaNjgrR1BuNkNFeWZOZ1VCK2dEb0EvUTN4OGVXbloxZExsZk50MVRLQjlSUVVRVFVicmQzbHBvWjM1QlphN05hRVJRVWpJQ0FBREFNZ3hlSHZvU0xGOU9seFpxSFJRc1hJTjlrUkdoWURZd2JQd0dKaVVuNCtlZWY4Tjh2UGtObVppYm16cGtGalVhRDU1NTdIbDI2M28rbFM5N0JzVCtQd21Bd1lQakxYcjYzdGUrdng0YjE2L0RubjBkaE5CaVEwcVFKTHFaZlFHUlVOTjU1ZHlrb3BWaTlhaVgrK09Nd09BK0g5aDA2NHJYWFI0SlNpbkZqUnVIK2J0M3h5S09QNGNTSnZ6Rm45bit3YnYySHQwVjNiVitKaVltQklTK3YxSHM1T2RsbzJkS2Jpckx2ZjN2eDZhWlBzR1RwY2lUVXFnWEFHeldzYUhHVkJUdTN5NFh2dnZzV2ZmbzhCSzFPaDdpNE9QVG84U0QyNzk5WGFyOHRYLzRYUCs3K0FjdFdyTHJtaE5PcmxhczU1cEVqaDZGUnE5R2dZY09iZm4ra3NrUDgrZWVmQUFDV1pjdFJ5OXRzTm93ZlB3WURueCtFczJmU3NHRCtYRXlhUFBXYWdrVk9weE5idG14UkFYamxyNy8rTWpSdjN2eFB5ZGNtU3Y0MkpXSktLU1VNdzhMamNWT24wOXVVbmpBTW9xS2lFQkFRQUoxT2g3Ly8rZ3VpSU1KaU1VTWJGNC9uWHhpTUJnMGE0bUo2T2k1bFppckhmVzdnODNodTRQTUFnSmVHdllpNmRhdGVVSC9OR2x0UlVWR0Z1V3FWZ0JvcDA2V2R5YzNOamRkcXRSTnhBenUwdDI3VEZqVnIxc1RMdzE3RTExdTNRS2ZUb1hYck5nQ0FPYk5ub1dmUFh2aDQwMmQ0L29WQm1DNVJMRC93UUErc2ZYODlhdGFNeDdTM1ptRHQrK3NWczJqVTZMR1lNSEVLa3BLVHNmYjk5YVU0cE5xMmJZY1pNMmNoTXpNREgzMnlHWmN5TTJHeFdHQTBHaEFZR0lBTkd6L0d4NXMySS9Ya0NSdy9mZ3lFRUV5Wk5oMmZidm9ZYVdtbk1YZk9MRXg3NisxYkJtclMvZkJxSDZLb2FOSUE4SERmUjdCMzd4NGNQdnc3ZUo3SEw3LzhqTlNUSjlDelZ5L0ZIMGtJd0xBc2lvdUxzUG5UVGRMdmxHYUtpWXVQeDZHREI4RnhIUEpOSnE4MnJOWGlrNDgvd3VlZmJ3YkhjU2dxS3NTK2ZmOURzMmJOTHB2Q083WmoyOWRic1hUNXlwdkdVMWZWWTdyZGJ2eCs2Q0RtejV1RDRhKzhla3NvM2ZQejh4V0EwbWcwQ0FzTEs5Y1E1Y0tGOCtqYXRSdis3N21CbURaOUJqUWFyZUpqdXc2cFc3OSsvUmRIalJvVlc1Ry9qVkxLTUF6RHlGUmpIbzhISE04UnpzUEI0M2JEWVhmZ3pKa3ppSXFLZ3QxaFIxRlJFUW9LQ21BMEdQREhIMGV3Zk5rU1BQbFVhVjVGanVPdzZaT1BRWWlYeDYxYU5UWkJFSkNlbnE0RUMzd2pvQldrZFpBeWFSMkVVc3BFUjBkUElJUThlQ052dUVxbHdveVpzM0Q2VkNxKy9mWmJESDVoSUdiTm5vczZkZXZpN0prMDlGemhKZXhyMDZZdDNuVzVZRElhRVIxemJXbTlXcTBXT3IxZU1Wc0RBdlRnT1E2eHNYR0lqSXpDeEFsandUSXNERWF2MzlIcm00ckE2REhqOFBxcnIrRDVGd2FqU1pPbXR3VFV5aWJvTHBnL0Z3dm16OFdEUFh2aHJla3pVTDkrQTd3OWN4YmVXNzBTaHJ3ODFFNU14TUxGN3lJbXhwdGYxK2VoaDNIeTVBa01IZklDV0ZhRnh4N3ZoL3IxRzhCU3BseG96Smh4V0x4b0lUWnVXSWZhdFd0ajNZYVBvTkZvc0dEaFlxeGNzUXhmZlA0WjFHbzF1dDdmRFlNR3Y2ak1yVVVMdldiZ3MwLzNMMjBtYnRxTTJOaTRHejRlVlQzbXlOZGVCU0ZBWW1JU3hvNmJjRVB6MklLRGc2dThiMFpHQnNMQ3d0Q2pSdzhBd1BIang4djEwbWpldkFXYU4yK2hySXV4NDhiZklQL3J6bTZ0VzdmT0FMRENSMnNUQVZCQ2lEZEdTa1VxMTR2eVBFOFp3cEFTYXdubE9RNmhvV0dJam9tRjNXNkhXcVdHV3EzR3JsMDd3RElzbm5yNmFiU1hJdXVBbCtKOCtkSjMwYng1Uzh4ZnNMaENiYk95Y2JzbVlQT05nRmJHcVZZRzFHUUdBTGxjYWpnaDVOVWJQVUZQbno0Rm5VNkhSbzFUMEtoeENyNzl0akUrK0dBdDVzMWJvSmhHaXBuRU1LQzQ4VngwZi8xMUhMdDI3c0RTWlN1ZzFla3dZM3JwcWpDSHd3RzFXZzJYeTFudEFOYXJkeCs1UTNncHFWKy9BZjYzLzhwOVREdDI3RlRwd3RWcXRaajIxdHVsM3F1bzRXMmJ0dTBxWkhtdFY3OCtsaTVmV2VGdnN5eUx2ZnNPM0ZTZ3I4b3gvMm04YnNRNTJPMjJLa1VxNWFxYjY1VlBQL3ZpbXI2blZxdUhiTml3SWVQRkYxL2NCaS9GcmtnQktyV1NwL0NtZ1lpaUtGS0JGOEFURG9FQkFVU3IxVkdkWGdlMzJ3V253MXVOb0ZLcjBLMWJkOFRHeHFGV3Jkckl5TGlJT25YcUFnQTZkZXFNVHAwNlYzb2VkcHUxVWovb1ZadWllWGw1Q2dXUmIxcEhCUkZRK0lDYW9xM1o3Zll1TE10T3JJN0prWFhwRWhiT253ZTczVnQrWWk0b1FHaG9LTFE2SGVvM2FJZ2ZwYWplSDM4Y2dWcWxRblQwUDJ0cm9hR2hLTWd2cUxDN1ZFVmlOcHVoMSt1aDFtaVFuNS92ellXU2lva05oank4dDNvbDN2OWdBdzcvL2p1T1hFWDR1bkxIYmdEOGNuVmpjeXZIckxKalIwZEh3M0dGV3VlQWdLcVp2RlhkNzNwL0t5Z282SlYzMzMyM2hSSk1rSnJDeUNhcG5BSWlpZ0xoZVFFY3o0UGpQUEI0WkFaZUZ4d09CK3cyRzBxS1M3d012UGxHS2JtL2FrbnFkcHNWMGRIUjF3OXNEb2VqRkZ2SFB3UUx5aVhocHFXbGhXbTEydkVBcXFVT3FtZXYzdWpjcFN0ZUh2WWlubjNtS2FTZVBJSFhSM3BwM0taT200NXZkKzNFNEVFRHNYSDlPc3o0ejV3cU9WSVRhdFZDMjNidDhQU0FKL0hDd0dkaE5CcXV1SCtuVHAyaDArdngxSlA5TUgzYUZOU3RWeDkydXgwOHoyUG0yOVB4MHN1dm9GYnQycGo2MXR0WXZIRCtkZnM5NUNlOVg4cFArc3BLc0poYk5HWjJteFZzSlJwR1hGd2NLQldSYjh5cjhOeVM2OVQ3UjlBS0NBaEVjcDBieDFqN0Q4ZU1pNCtQSC9UQ0M0TnF5T0JHeTRNYlF5a2xvaWdRZ2VmQmNiemtiL1BBN1hMQjVYVEM3bkRBYXJPaXVMZ0lGck1GSnFNUjJWblpTbCtGeXNiUlpNZ0ZDQ290UDd3cWF2RFUxRlNrcGFVaE16TlRxUVgxTlVWOUtneUlyTFZKdmpWR29pR2F4VERNaEJzeDZMZUtTcm02cFRLcTQ4cjlMWmt3V3l4K29za3lZalRrSWpJeUFvbTF5M09mWldSbXdteSsrV05tTk9RaUlpSUNTVmZnWXpPWlREQVlET0I1SGxicjdjOVc0M0s1VnZYdTNYczlBSWUwdVFCNENDRWNBSjRRSWhKQ1JJbGFYS1l2b2xxdGwxbzhJQ0FBZ1lHQkNBNE9SbzBhTlJBUkVZRzR1RGpVcmwwYnljbko1VFhGNEdDb1ZTckV4c1pXcXExZGxZOHRLeXNMMmRuWk1KbE1NSnZORlFZTFBCNVB1ZFFPT1ZqZ2NybWV1RkdnZHJYTzFqdEpydmE2RWhOckl6L2ZCS01oVjJFNXVkczFOWnZOQ29Ibkt3UTFBRWhLVElUSmRQUEdURDRuVVJDdUNHcXlTWHFsQlhzYnltdFpXVmxuYTlXcXRWZjJ0eEZDbElBQ0FIaFpQd2hrY0ZPcFZOQm9OTkJxdGREcjlRcXdoWWFHSWp3OEhGRlJVWWlMaTBPZE9uVlFTMG9udWxxcEVyQlpyVmFsc3FBc3FQbldnUHFtZHZpYW9FYWpzWlphclI1N3E1eXRkOUtpdk5wRVZFSUlXclZxaFlzWm1iQll6Q2l5V09CeTNaMGNiWHA5QUJpV1JXUkVKQklUcjd3ZzJyUnVqY3pNUzhndktLaldNZFByQThDcVZQK29xZDNKVXJObXpjRmZmdm5sMmFlZWVpb2JsNk9rTXJCUk9aTGdKYWZrS2NNd2hHVlp5cklzWEM1WEtTSktHZXdDQWdJUUhKdGcwTndBQUNBQVNVUkJWQnlNc0xDd2ExSmlxclNLWk5QVE53bTNnc29DWDFDVHF3c0lwWlNKaUlnWUE2RFZqUnpNNk9ob0dBekdmeDJ3eGNkZmZUb0RJUVIxa3BOUUp6bkpiNE5lcGJhYitDOEZtNXNwaEpDV2ZmdjJIUUJnRlFCQjZvL2dqWlpLcEpUd0VsTlNDZHpBY1p3Q2JpcVZxa0p3Q3d3TVJFaElDSnI0a0M5VVZmNHhlSkNWbFlXY25CekZuMVlacUYzQkJPMWZIYWtkaXJQVlpJRGpEbmVlTyt3MnJ6TVU5SVp4c2ZuRkx6ZFRkRHJka096czdNNlF5cTBvcFJwSXlidStnUVJCRUlnRWJBcHV5QjJ1SEJMTlVVbUpOMHFhbjUrUG5Kd2NoZUxvaG1sc2RydTl3bncxWDhKSUdkaDRuaTluZ21ablo4ZXExZXJSMVRXWTk5NTdMNHhHSTR3bUU2d2x4WGNrTmJqc0RFMUlxSG1uK1ZiODRwZFNFaDhmUDJqanhvMnBRNFlNRVNSL20rQnJscFkxU2FYcUJPcExSR20zMnhXdFRRNHNoSVNFSUR3OC9LcXFQSzRJYkdYejFjcEVQbjN6MVNveVFVbE1UTXdvQVBkVjUyREd4TVJjZFM5T3YvakZMOVZpa3JZWU1HQkEveUZEaG53QWdQY3hTUVhKSkJYaFpkMVZURktHWVloS3BhSXlDNGh2WUtHb3FLaVVyNjFSbzBaVkI3Wk1uNkpUWDhuUHo4ZVpNMmRLTVhlVTlhK1ZEUno0Y3F5bHBhWDF6TXJLR3UyLzNYN3h5MTBsTCsvWnMrZG90MjdkRHN2Z0JpbFNLaGZMUzAxZzVLcDVoVlB1Y3Zlcnk2WnFXVE8xcWkzOFZJbGhQNVI3aytNRjVGL01BbkVhUU54bUVFOHhDR2NESTloQkJCY2d1QURCNDkxRWpsQlJBQ2dsOGpiNC85cXc5YVAzalBMZlk3LzQ1ZTZUaEdiaS85VkxydkgzK1l1RlBBQ0JBQUpBWmJPVWdSZk5BQ3FDaWp5RjZDWVFYQlNDQXhDc0lJSU9qR0FCNGZKQlBMa2c3a3dRNXpuQWxvcjQ1RnBRcS82NTkwV0Z3WU9zYkFzTXBtS1lMVFlVRlR0aHM3bmdjTHJoZEhKd3V6bDRQRHc4SEErT0Y4RHpJZ1NCUWhRcFJFb0pCWmozbHcwZUNlQUIveTMyaTErdVRTaTljOCtkWlptdWgvZE1md1J5SU1FYlJKQURDU3lWaUNsRmtVSVFLSGhlQk1jTDhIQThQQjRlYmpjSHA1T0R3K21HemVaQ1ViRVRab3NOQmxNeExtVlZyVktubkkrdHVNU0ozTHdpRkJSWVVWamtnTlhxaE4zaEJUV1htNFBidzhQakVjQnhBbmhlSkx4QUlRaVVpSlFTVUJETHhYY2JzQ3p6aG45cStzVXZWeWNpQlF5V1NKZ0t3eUNJTEd4M2RqcmlvQVVMRmh5Wk9ISGlSYTlKNmcwbWVFMVNpSklGU2tSS3dBdUVjZ0pEUER4TDNad0tUbzhhTnBjYUpVNHRDbTA2RkZqMU1CWUZJdHNjQkVOeENQSks0bEFuZ1VOY2VBRXFxNG9zQjJ3NXVZVXc1WmZBVW1oSGlkVUptOTBOaDlNRGw4c2pnUm9QanVQQisycHJGS0FVaEFKTVNJaitOUUFKL21ucUY3OWNIYWdkTzFjZllNTVFGSEpuOThtVnBHWkM3ZVRISjA2Y3VCb0FEMitFVkg0VlFRZ0Z2RzM4Q0NFZ1VyTmxJdEVkc1NvMVZDbzFWR29OMUJvdE5Gb2R0TG9BaUNRUXhUWTE4b29Ta0djT3c3MzF6MWNJYnFWTVVXTitDUXpHWWhSWWJDZ3Fkc0JxYzhIaDhNRHA0dUJ5eTZBbXlDWW80YjBtS0tFaUpaU0NPUEpXZENlRXZQSnZtbkRqcG0zQi9YM2Z1V0cveC9NQ1JrMytBdEgxeGlHMDlwc1lQbW9USEE2UGYyWGY1V0lvakFUWU1NVEV4djlya3M2MVd1MmdQYi91YTQ3TFZPSWFTdUZESmU3Tm5oQkZrUWlDQUY3Z0NjOTVBd2VjNS8vWk8rL3dLS28yaXY5bXRtVlRJRTE2Q1VoSGFWSkUwQUFmVWtSQkJDc2xJQWdxTFlMU2xkNkQ5TjVFcFNnSWlpQktFWkFlbENJSVVnVUVFdEo3c21WbXZqOW1kNUpOSXlCTjJmTTgrMEIyWm5idTNwMTU1MjMzSENzV3F3V0xROFpQMVQ1SUpENHVqdVNVRkhRNkErZ0tjelBlTDlkenV4aTJHeEVKUk1jbWs1Q2dHclhVTkF2cEdkYk12SnJEc05udHNtQzNPMEpRR1VFQkFSQ05Sc1A3N2tzMGZ3d2JzNUZOUC96T3VzOTZzV2wxSDNidStaTitnOWU2SitZUlIxUjhvZitjVGk1QXVmTGxPMlF4YkFaUURHU3FXNG5PMWpCSmxnWEpMbUczMndXYjNaWlpGYlZtVmtWVFVsSklURXdrTGphV3lKdVJlUHY0M3Rxdy9YMDlUZzFCNDFKSlRFb2pKZFZDZXBxVmpBd2JGb3VqV0pEcHJTRkpNcktzT0FzY1lrYlV2RGNFZ1JmZGwyamVTRTIxTUcvcGJzTEdkeUM0Y1NXQ0cxZGk4YXpPckZ4emtKaFlOL1hRb3dwRkFVblMzNUduZHViMEh3d012ZmNwN1ROblRoTTJiWXJHYWVqRXhvM2ZFTkxsTFVLNmRuSVI1SW1Pam1iZ0J3TjR1M3ZYbGkxYXRtcE1GaXB4UlZIVUlvS2lpQTdtSHhSSHE0Y2syYlYyRHlmRlVZYWo1U00xTlpYazVDU05Vand4TVFtN3JNKzEwQ0lDV0cxMk5RU05UU0VoS1kza0ZBdHBhUmJTblViTldUQ3dTOWp0a21DWFpDUVp4N0lweEk4L2FxMHo2SFh2UGVnTDVPbm1rd2tkOWhYQmJjSUlxakdjSnhxTzRmdXRKN1R0ZFp0TVpQallqVlN0UDRyaWxUL2k3UGxJTEJZYll5WnZwbnpORVhnVTdVTzlwaFBac2R0VktOZG1rK2dkK2lYZUpmdFR2UEpIZkRwdmUrWVBHSlBNSzUwWDRsZjJBN3hMOXVlRlYrZHc0VktVdHIxajEwWFViVElSZ0dPLy8wMTZ1bzNnUnBXMDdjODJWRVh2RDRaZmROL2hqeWdFQVZMU2hEczZ0bktWcW93YU0vYWVqbS8rdkxrc1c3cUVTeGN2YWlTdUFGZXZYbUhEK3ZVc1dMU1VaY3RYY3VMRU1ZMDhkZjY4T1RScjlqOVdmcjZLZDk5Ny8xVVBEN09ITXh6RlVTRVZCRUVIT0kyYnl0c21TVWlPVlV3Mm13MnJMWXV5ZkhvNnFTbXBKQ2FxSVdsMFZCUUppVkt1T1RZOXdJMGJDVVRISkJPZmtFcFNrbG9GVFhPMGRsaXNkcXlhcHliaHFJSTZ2RFUxRFAxNDhFdTlLS0NDKzczR2dtVy9zSFY5UDVvOVY0WE5QLzdPSzEwV2Nuam5VR3JYVUJjN3o1aS9rNVVMdW1FeTZxbFVvU2c5KzMzQmp6di9ZT0duYjFHcFFsR1dmcjZQRjE2ZHcvRzlJNmxXUmVYck9uRDRJdVhLQm5CMHp3aU9ucmhLajM2ZlU4akhUTSt1alFrZDlqVVdxNDN3bjRjQzBHL3dWNFM4OXhuN2YxSVptanEycTBOOGdscmV1aDZSZ05Hb0o4QS84OGxzTU9nSThQZmkybzBFOXgzdVJnN0V4c1l5Y2NJNFlxS2pFRVNSOTk3clE0T25HM0x0MmpVR2h2YkhaclBpNit2SGlwVmZaS1k3aG56RWpSdlhBVlYweWRQTGl6VnIxd0VxcmYrY1dUTklURXJFMzgrZndVT0hhVm9XQU91Ky9vb05HOVpyK3dQMGZLY1hScU9Sc0dsVFhNYjIrNGtUUEZXM0xwNmVudGp0ZHZ4OC9UaHgvRGoxNnRYbnhJbmpmUENCU3VqajYrdGJyMFNKNGkwdVhicTBHYkE1WGxvaFFWRVUyUkdTT2xZa1NPaDBkdXgyR3phYkhxdk4wYWlibms2YVNRMUpFeElTaUltTndXVEl2YWRObjU1dTFYcldFcE95VkVFMW8rYklxemx5YTQ0UTFPbXRDU2YyZlZ4SXB4TjdQU3dYd2xzZDY5SHNPWldBOHNWV05XamVwQ29MbC8vQ29wbXE5bVdiRmsveVdudVZhQ1F1UHBYUFZoOWcxWklldk5SYVZmMmVOcTRqaDM3OWl5bXpmbUxsQWxVNXZWalJRaXliMHhXVHlVQ2xDa1g1N2ZnVjVpemVSYyt1amJsOE5aYlNKZjBvV2R3UFQwOGp5K2QyNWRxTmVHMDhiM1NvcC8wL0xkMktoNGMrbHlTckhvdlY3cjZMM2NpQnI5YXVwa2FOR29SMGU1dExseTR4Zjk0Y0dqemRrRktsU3ZIMStnMmNQMytPaWVQSHVSd3phY28wQUJJVEUrajlUZzgrR1BnaG9NcjJUUncvbHZFVEoxTzhlSEYrK25FckMrYlBZL1NZek9OcjFxcVZnM2s0TDRIbHhNUkVQRHc4aUk2T1p0S0VjVWl5aEk4alQ1aVltSWpKdzRQdk4zM0hqaDNiOFBUMGZMVkh6M2YyTEZ1NnhPbzBiSTVWQ1pJajM2YklpaUlJYWtpcTJDVzdZTFByRkwwekpEV29JV2w2ZWpxcHFTbHFTQm9majBFdmtwNHVZemE3amxHOEVhbUdvUEdKbVQxckdlbVpCUU9iemRtemx0VmJBOW5oclZXdFhMd25VTzFodVJEcTFIU2xvYWxlcFRpbnp0elEvcTc0ZU9aQzh6Tm5JNUJsaFliMXlyc2MwL2pwQ3Z4eEpsTlhzMjd0SUV3bWcvWjMvYWZLOGVlNVNHUlpac2lBbG56LzQrOEVQajZRTnEvTjRic2ZUbEM5U3U3TXJHWVBBMWFybE9OOWk4V09sNmZSZlJlN2tRUDE2amRnNTQ3dHJQeHNCWmFNRE1LbXp5alFjYklzTTJiMEtOcTgySmI2OWRWZzZxKy9Mbkh0MnQ4TUh6cVk3aUZkV0wzNlM2SnV1dW9MVktwVW1WYzZkQ3p3K0U2Zi9vT1JJNGJ5VHU5M2FkclV0U2QvMG9SeFhMNzhGMkhUWjJJeW1hcDA2OTdqZVZ3S0NZNEtxWm9TRTFDOU5tUlpRckpMU0hhN1F5dEJyWkphTFJZeUxCbWtwNlZyaFlURXhFUnVSQ2JtOU5qVW5yVVVraHplV3JyVFc3TTRRbEJuejVva0M1SmQ5ZGFjemJobndzZjQ2WFJpejRmcFFwQ3phVnRtV096b2RKbkYzNndHSkx1Vnovb1pXWVYramRuY1hiMWVSSzhYRVVXUnRpL1U1UHFaS1h5LzlYZCszUGtIdzhkK3kveGx1em04WXhpZTJZeFZxUkorWkdUWVNFaE13N2V3cDVhL2k0MUxwV1J4WC9kZDdFWk93MWF2UG5QbkxTVDhTRGlmcjF5QjBXaGt6TGdKdHp4dTJkTEZlSGg0MExsTDF5eTVZaHZGaWhWekNWdi9DUW9YTGt4R1JnWmgwMmRTcUZBaFRwdzRUbUZmWDIzYk00MGEwNkpsSzgxYkxGNjgrS3U5ZXIyN2MvSGloZFlzNGFpZExMeHRMbDZiWFJKMGRydmlVaVcxV0VqUFNDYzFOWTNrNUdUME9vR29hSmxpUlF2aDVXbks5TmhpWXBOSlNFeFhlOWJTclZyQndLWlZRZVZNYjAxV3ZUVm5idTN4Y28rOURUeitNRjBJNFVjdnUveDk2TWdsYXRmSW5VMjFZdmtpNlBVaUI0OWNjbm4vUVBoRnFsVEt6RHVjdmVENlZEdCs4bStxVlZZSklZZU0yc0Q1aTFGMGVlTnBWaTNwd2Y2ZlB1TFU2UnNjUDVtVFE2cDJqZEtZelFiMkhqaXZ2YmZ2MEFWRVVlRHBiRjZqRzI0QVRKbzRudkFqNFRSdi9qekRoby9rMEtHRExnL2QzTEJ2MzE3MjdON044QkVmdXdnV1ZhaFFnYVNrSkg3WnMxdkx0MzIvNlR1WFk4K2ZQOGZHamQ4VWFHeFAxcWlCMVdyRlpESWhTUklIRCt5blppMVZ5N1JXcmRyYU9JLys5aHRCUWVVd21VemwrL1R0MTV4c1JZVHNYcHZzOU5yVVFrSm1sZFNtQ2k5Yk1qSklUMWR6YlNrcEtjVEVKaE41MDlWcjA4Y25xQ3NNVWgzZW1zVmlVOWRzT1VOUW04TmJrMXk5dGQvMkRQZlI2Y1MzSDdxY3hJWmZlYWIrNHp6ZnRDb3JWaDNnNU9ucnJGclNJOWQ5Zlh3ODZOZXJHWU5HcnNmYnkwU2xDa1ZaL3VWK0RvWmZZdXJXRDdYOS9qaHpnNFhMOS9EdTI4RWMvdlV2NWl6YXhkSTVYUnhHTDVJK0g2NWhYdGliQlBoN3NXTFZBYnk5VFpwaFhQdk5FZUlUMG5pdlJ6QmVYaVo2ZEdsTTM4RnI4Zkh4d0dqUTB6djBTN3AzZWdaL1B5LzNYZXhHRG5UdTNKV3dzQ21zWGIwS1daWVpPT2dqUkZGMEtSNGtKaWJ5V3NkWHFQUFVVd3dkTm9LNXMyZVNrWkZCbi9jeVU5OXo1eS9DeDhlSFNWT21NZlBUNlN4YXVBQlBUMDhHWmhOU1BuYjBLQnMycktkOSt3NjNIRnZac2tHMGI5K0JkM3YxUkVIaDJXZURxVmV2UGdEdjkrbkg1RWtUV1BmMVY1ak5ab1lNR3c2QW43OS9oL2F2ZE5pK2NjTTNOc0RxTUc1MlZHVXJsVzFYYmRwMTVOcFVyeTFybGRSaXRXcTliVG9SNGhNa29xS1RLVjdVVjR1U2hGbVRYK1ZHUkR4Uk1jbkV4NmVTbUt3dWVrOU5zMnBMcVRJc2ttQzFTdGp0aWlESmlxZ29pTmJvK2YxME9qSHNZYm9Jbm00K21TZXFsdURDWDlFY09uS0pHdFZMTVgxOFI1NTlSbTJwcU50a0lpKzNxY25Jajlwb3gxaXRka2FPLzQ0dnZqcEVRbUk2dFo0c3pmaVJiZmxmc01yOTlPSEk5Wnc1RjRHZnJ5Yy8vM0lXblU1a2FHZ3IrcnpUQkZEYlBRWU0vWXJ0dTg2UW5KSkJuWnBsbURhMkE0MmVWbVhRT25aZHhPV3JzZnk2ZTdnam4yWWpkTmpYclBubUNLSWcwTEZkSFdaUGVRTVBENFA3TG42RXNlZDQ1ZitrNmxwdWlJK1BuMWpqaWFyZkF5bEFLcEFtQ0lJRlZkM0s3bEMxa25VNm5XSXdHakVaVFlxSGh3a1BzeGxQc3lkZTNsNzQrQlRDdDdBdm9nZ05hMG1VRDNxTWFsVktVRDVJcFRVU3hvOTh5WFVabGNON1MwMnprcDVoSlNQREpsaXNFamFiSWtpU0xNZ3lZdWZYNitrL1c5RGpNUERrdzJiWVdqV3Z6dWloTHoyeU40aWlnQ0M0di92RE1tY0YvZXhIeWJBcGl2SkhvNFlOM3YvNzc2c3BEdU9XSmdoQ09tQkJsZXlUUkZHVVJWRlVEQWFEb2hKUGVpZ2VIaDZZUGMxNGVucmg3ZTFONFVLRkVRU0Zlay9LbENubFQ2VUt4YWo1UkdrOFBBem9VeHk1dFl3TUcxWkwxdFVGV1JhNVordGJXenFuVzVlSHphaGxoK0RiKzEvM2cwZWVtMGJSSXJlL3JFWlM5RnlPcWt4OGtoNUpGc2xJZnpSVnFqek1ablNpZ244aE8wRkZ6aUlLZWJmUXlBcGNpYWxNYklJSlNkYmRzemxUeHlRVFdOaEMyY2ZPM3RMSVhiOTI3Vkg0cWFvdldMajQyUmZidE5ycHlMWFpGRVd4Z1dBWEJMV1FJTXV5QUNnMm15M1RJT0pZNlNTckt4VThUQ2ExdVRsRklqRXBrOW9vcUV3Zyt0UTBpNE81STF0dVRaS1JKRm1RSk1XeHlrQjlvU0RxOWJvdUQvMVRJV0hSSTNFenA5djkrUDFDS2ZRR0Qzd0t1M1ZGVTFOVGlFOU9JaWFoS2pVZnY0cEpuNWlyVWZ2MTNCUG85T2I3TW1lcHFTbkVKaWNSRmY4RTlTcWR5dGU0bFN6MWFCRGpGQzlSb2czd2k4T3dXUUc5SUtESDBkZUdxbXdscU12UUJRVUVRUlFFUlJUVmJnUlJwOE5pdFNLZ2tKb21rWnljUVh4Q0dqRXh5WlFxNFllWW5tNVR2VFdyU3lNdWRydUVKTWxxSmRSQm5xU0FrSFp6Ym11ZzhjTTRXWWQyREgza3d0REl1Q0xvRFI3L0tWYUlmd0l2TDIrS0ZpdUJUdTlCUkZ6dWlsK1hvNnVoMDV2djI1eGxqc25NbFpqS3VBR2lLRGJjcy9kQUxUSkpLQTJLb3VoUUs2U3FOVk1VRkVWV0s2U3lNNHJNdXBaVWxTUklUN2VSa3BwQllsSWFzZkdwUkVZbElhWnJQR3RxejVyTkxtR1hIRWJOR1lKbU1uZ0lSb1B1VGZmUDh2QWdOdEgwbjJTRitLZnc5aWxFVEtJcDEyMXhpZm9ITW1mZVBvV0lTVEM1Znh3SFNwY3VuYjMxdzhuOG9YT3lmamhvalpBbHRmM0Q3bGdrYjdmWnNEcGFRTkl6cktTbVdVbE95U0FoSVkyWTJHVDBGa3NtZWFUV3M2Ym0xZ1MxYjAxeFdFNkVoQ3N6bnhRRTRkWGJDZ2tmNFdUMnZaNGZTZFloeVRxM3A1YUhsNVFZSDRzc2d5aTZ6dmVEbWpOMVRIRjM5SnNuSlNaeSthK0xwT2Fqb2V2bDVVMVF1Y2NwVkxqd1hSbnZ2VDZud1dCb3UvYXI5Vis5OFhySEMyUlNoK3NGUWJBN3dsRlpsZXhUQkVtU0ZVbVNCTWt1S1U2dnpXNnpBUW9XaTB4NnVwWFVWQXVKeWVuRXhhV2lWM05yV1pkTnlRNXZUVmFMQmdvNCtkYTh2RXl2RjJUQS96R0s0M3Y3RlBjRW5VNmlpRzlDdmxUSHVVRW5Tbzlzb2FBZ1NFOVBkekZxb0JxVUJ6bG42ZWxwZC9RZysrdlNCZExTVXZQZEp6VTFoY3QvWGFSR3JUcDNaYXozNDV5MTY5UitEcmlhSmRkbWRYaHRrcUtvdVRaRmtSVlZ4VXB5cFRheTJ4RlFzRmdsTWl3MjFXdEx6aUErTVExOUZ2MENOYTltenl3YXlBNVhFQVZoODFkOVBFUlJlTDBnUnUwL1JuRjh6NUdhbWtKRWdsKytWTWQzaXUzYmZtTEY4bVZFUmQya1JJa1NmUDdsR3M2ZlAwZVA3aUhhUGtPSGorU0ZGOXE0ZjRpSEdMY3lNRm12cFgvVE9UMDl2ZHEwZTduOSt1KyszV2pKekxWaEV3UkVVQnk1TmtGUUZCbEpraFZKbGdTN3VrZ2V1OTJHQUZpdE1oa1dHK25wVmxKU00waEtTa2VmblVEU25pVzNsblg1VlBPbTFWNEZTdDlxb0ZrcGp0MG9lSWppNWVYTnpVaVptL0YrRlBPUHZ5dWZlK1BHRGFaTW5zaVljUk9vVjY4K1NVbEpBRlNvVUpIdE8zY0Q4RTZQYnZmc2V5MWZ0cFIyTDdjbklDQWd4N2htelpqT3laTy9ZelFhYWY1OFM5NTd2NC9HS25IdDJqWG16SnJCeVZNbk1abE10R2pSa2w2OTM4dkJPbkUzY2F0elB0ZTRJUWFEQVVFUUNRb0tvbnVQbmpScTFOaDk4ZjV6bEJyNThhZ0czMzI3Y1JmYUVpdEZEMEttUG9KS0lhNWt6YldwaStRbFFNRnFrN0ZZN0dSWWJLU2xxN2syMFJtQ1NwS2MyZUloWjdaNDRHengwT2tLdE9UL3YwcHhmRi9DMG55b2p1OEVaLzg4UTJCZ0lJMGFOY1pvTkJJWUdPZ0l4d1JNSmhNbWs4bGxMZUhkeG1jcmxoRVhGNXZqL2RHalJsS3lWQ2syZnJlWnhVdVdjK2pnQVRadCtsYjErR1dab1lNL3BGTGxLbno3M1dibXpKblBudDI3MkxqaG0zczJ6b0tlYys3OGhYeS9aU3ZkZS9Ra2JPcGtObnl6L29GY0o0SWdVS2RPSFZxMGFFSHo1czBwVWVMMm5BaEprdGkvZngvRGhuekV0Yi8vdmk4cGdiRmpSdkhXRzYvUnZWc1h6cHcrclczNysrcFZ4bzhiMDR3czFWRWM2MGVkREx1U0pBbVNKQW1LSWd1U2F0d0VwN0N5SktrUnA5VnFkL0hhTk1QbTB0NGhPU20vMVJhUCtLc3puaEFFV3Q3cUMvd1RpbU0zVk04dEw2cmoyOEh4NDhkNHVXMGJwazJkVEdSa0pDKzNiY1BMYmR1dzhyTVZCZjZNUXdjUDBQbXROMmplTEpnZTNVUDQ0OVFwbCsxN2R1OGlwR3NuWG1qMVBOMjdkZUhRd1FQYXRuNTkzK2ZsdG1wbys4R0EvcnpjdGcxOTMzOVhNeUxCd1UzcEd0SU5rOGxFa2FKRnFWdXZIdWZPbmdVZ0xpNE9QMzkvT25YdWpORm9wRlRwMGpScS9DeC8vbm5tbnMzNzdaelRiRGJUcUZGamhnMGZ5WkxGQzEwWVplOFh5cFVyaDA2blk5dTJiZXpkdTVlYU5XdGlNQmh5TmRpNS9YOUEvNzc4c21jM1o4NmNScEtsMnpwMzQ4YU4wZXYxZVQ0Z2N2dDczZGRmNGVucHllcTFYek40OEZER2p4dUQ0cmpJWjg2WXpzdnRYMm0yWnUyNjBtVFRId1YwZ2lBSW9pZzYxNDRpYXpVQVNYczVxZFdzRmpzWkdUYlMwcXlJem9LQlhTc1lPTFVNdEtLQjRPM2wwYjVnVDVJN3B6aDJRMFZLcXZDUGMyeTFhdFhtMjAxYkdCQTZrSklsUy9IdHBpMTh1MmtMSWQyNkYrajRpeGN1OFBISTRielhweTlidG03ajFkZGVaK0FIL1RYdXJpdFhMak4rM0JpR0RCbk81aDkrNHFXWDJqRml4RERTMHRTay9KeTU4L2wyMHhZQVpzeWF6YmVidGpCMy9rSUFSRkdrVStjdStQcXFudWxmZjEzaXdQNzlOR2p3TkFDQmdZSE1tVHNmRHcremRuTWNQM2FNR2pWcTNyTTV2NU56MXF2ZkFLdk5waG5rKzRuQXdFQnUzTGpoY0NaVWlpMC9QMWRQLzhpUmNFWU1HNExOWmlNdUxvNTNlblFuTGs0VkcvNTB4aXlHRFI5NVJ3NUlRRUJBbmw3K2h3TkRPWDdzcUdiTUZzeWY1N2llem11L2I5VnExVEVhalZ5N3BucUs1OCtmbzBHRHA2bFZ1MWFEWEx3MkVSQVZCVUVRQkxYdFE4bGFSSEMwZ05pemVtMTIwak9zaUhaSjFzUlpuR0dvckdTeWVLQW9naWdLTC8rVEgyTFF3RkJlNjlpZWtDNXYwYlh6bTJ6Wi9MMlcxM2l0NHl1MGIvY2kzVVB1N1dLRzdpRmR1SGp4OW5RRnR2MzBJNjkxZklVWFdyZGc5cXk4Q2Y1MjdOak82RTlHL21lTTYrYk5td2h1MHBSR2pScGpNcGxvMWZvRnFsU3R5amFIa0VkQVFDRExWM3hPdGVyVkVVV1JsOXEydzJhMTh2ZmZWd3Q4amo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMHVYODZRUVU1cHlBSStQdjVrNUo2LzBWNGpFWWpraVFSRUJCQTQ4YU5rV1VaazhtMVA2NXUzWHI0QndRd1p2UW5EQm80Z1BhdmRNRGYzMTg3L2w2Z1Q5LytUSnd3bnJselpyUDFoeTEwNmFvV3FCNnZVSUZmOXV4QmxtVXVYYnJFelp1UnBDU3I4L2I0NHhYWXMzc1hYbDdlemJNWk5YMm1jY3ZzYVZOa1J6anExRWVRVk1kTVZaS1hzRmh0cEdmWUVMTVlOYTFnSUN1QW8yaVFHakczR1hlQklmZWpJY05ZK2NWcTVzeGJ3T2NyVjNEcDBpV04zbmhxMktjUDVRM2VvbVVydmw2L2dXN2QzdVpSUW1Sa0pNV0x1K1p0eXBRSklqSlNaUlgyOXZibXQ5OStwWGV2SG5SNjgzVzZkZTJjYXlpU0g2by84UVRiZHV6aXEzVWJpSWlJY0ZFNGN1THpsWjl4K1BBaEprNmNuR2Y0YzdkUjBITXFpa0pjZkJ6ZUR5anRVcTVjT2FwV3JjcisvZnUxb2xCMnc5dTc5M3NjL2UxWFRFYlRQM293bU0xbU9uYnNTTWVPSFRFWURMUnIxNDZPSFR2eTJHT1B1ZXozZUlVSzZqM3oxUnA2OVg2WFFvWFVYUHVycjcyQlRxK2plN2N1ZlBINVozaDdlMlAyVkwzalFSOE81dWVmZC9KMjk2NVZ1b2FFVkhFWXM2eDVOcDJpS0NwWG0zTTFnaXdqT1VOVFdkWTZPbFN2VGNKaXNhR1hzcXd5Y0RUa09zTlFBTUZrMHJlOW16OUk0Y0srUFBGa0RTNWVPRS81OG5tVEt5WW1KakI1NGdTaW9xS3cyMjEwNnR4VlkrTThjK1kwTTJkTUp6MHRqU0pGaXpGMDJBZ3RNYjU3MTgrc1h2MGxsb3dNcWoveEpCOE0vRkRMUCt6NmVTZGpSMzlNZW5vR2ZmdjExN3lFYjlhdlU1UFhpa0xUWnYralcvY2V0L3dlUjQ2RTgrbjBhWWlDU01sU0pmRTBlMnJiOGh0RDgyYkI5Qi93QVV1WExFSlI0UHN0V3g4NncxYTBhRkVpSXlKYzNydCsvUnExYTZ1OVNudC8yY09xTDc5Z3hzelpsQ3F0RnNxZmE5d3cxNXNydTdHelpHU3dkZXNQdEc3OUFpWVBENG9YTDA3ejVzK3piOTllbC8zV3IvdWE3ZHQrWXRhY2VYZXQ0ZlJXdUoxekhqa1NqdEZnb0ZMbCs3OUV5bXExWXJmYk9YcFVEZnQwT2gwV2k4VTFwWkdTd2tjZkRhUnpseERPbmYyVEtaTW5NblRZaURzcUZxV25wN04rdlZvb2FkZXVIVC84OEFOWkY2ZG5qWEIyNy9xWjhSTW1NVDFzR2hNbVRhWlNwY3FZeldhR0Roc0JRRkpTRW0rODFvRVNKVW9DVUtwMGFUNmRNY3R4Myt4cStQbktsWDlrTld5Q0lEakNVVVhJR25xcktUTUpSUkdRSkFXN1hmWGFiRFk3Rm90ZERVVlZiMDBXSEVVRFRhaEZVUlJSRUlTN0dnTkVSMFZ4NnVUdlZLbFNOZC85enAwN3gvK2FQOCt5RlN1Wk0zY0JzMmJPd09wWUd6YnE0eEdFaGc3azh5L1g4TXd6alZpeWFJR1dyMW0vZmgxejVzeG41UmVyQWZoaHkyYnRNMzE4ZkZqNXhXcEdqeG5IL1BsekFaVlliL1BtVFN4Y3RKUWx5ejdqdDk5K1k5ZlBPL01kbThWaVljSzRNWXdhUFpZdlY2K2xUT215MnJaYmpjRnV0eE1WRmNXNmI3NWwvVGNiSDVqeGNuWnZBeWl5ak4xdTE0eFFteGRmWXMrZVhZU0hIOFp1dC9Qenp6djU0OVJKV3JSVTYwZXhzYkVJQW9nNkhZbUpDYXhlOWFYamMxeXJIc1ZMbE9EUXdZUFliRGFpbzFSSlFxUEp4QmVmcjJUdDJ0WFliRFlTRXVMWnUvY1hhdFNva1JrS2Y3K0piemR1WU9ic3VWcjRkTS9EN3dLZTAyS3hjUGpRUVNaUG1rRHZkOS9IeSt2K0U0UkdSMGRyQnNwb05PTHI2MHRDZ3F2SzJjV0xGd2dPYnNwYm5Ub3o4cFBSR0kwbUxjZDJyM0R5NUVrK25UR0w1NEtiTU9MalQvanQxeU11MjVPU2twZzJkVEl2dnRRMlJ6ajg5OTlYV2JaMGNiTXNJYWhXUkhCNGJLSWdDQzdMckZRYU5kbFJJM0ROdGVuVlNxaXNlV3V5eW1FcEFFSjY1THpXUU1tNzhhV25oMDNGN0dIR2FETFNwMjkvU3BjcGsrLytOV3ZXWXZteUpXemI5aU02blI2TEpZUGs1R1FTNHVQeDl2YWhhclhxQUx6VXRoMU5telVENFBEaFExejcreXJ2OW41SGU3SjVlL3RrNWgwYzdKNVZxMVhURXVIaDRZZDQvdm1XbU0ycWEvemlpeThSSG42WXBzMytsK2ZZcmw2OXdtT1BGZEdNYzVWcTFkajN5NTRDalFHZ2EwaTNlNWJuS0FpeU4raE9tVHlSS1pNbjhueUxsbno4eVdncVZxekVxREhqV0RCL0xwRVJFWlFwVzVhcFlaOXFNbTJ0WDJqRHFWTW42ZEc5S3pxZG5uWXZ0NmRpeFVyRXhidmVPQU1IZmtqWXRLbXNXTDZVTW1YS3NIVDVTb3hHSTFPbWhqRjN6aXkrV3JzR2c4RkFjSk9taERqQ2ZVbVNtRFpWRFFQZmZOMjF3K2p6TDFkVHJGanh1ejRmQlQxbnZ6N3ZJd2dxYyt5Z0R3ZmZ0VDQyUlFGdno0S1h3aTlmdm95dnJ5L05temNINFBqeDQxaXQxaHozdzYyQXVRQUFJQUJKUkVGVVQ4MmFLazIzWHE5blVEYW0zRHZGZDk5OWwzY3VQY3M1YXRXcVRhMWF0YlcvRnk5YXdPNWR1L2hmOCtkekZMSDY5M3VmbE9RVVFycS9YV0wwMlBGUE5ubXUwYS9aOG13MlFiWGt6bkJVVVlzSU1vS2dlbXlTbzFiZ3pMWHBKYWZ5bEhQNWxKcGJBeENNUmwzcnUzWHhEUHB3c0VZYlhCQ3NYYk1LdTgzT2xLblRFUVJCYXg5d2hqaE9HQXdHL1B6VUo2ek5haU80U1ZOTmJpeS94Ry9XRUNtcmR5NElnbGFLemkrL2tsZXphRUhHSUdaZjUzT1AwTEpWYTFxMnl2a1RWcXhZaVYvMkhjejMyRWFOR3VkNTQ1cE1Ka1orUE1ybHZYZDY1ZVMvcTkvZ2FiNWV2eUhIK3hVcVZtVG03TG01ZnJaT3AyUFAzZ1AzMWRBWDVKeTNtcTkvQWtFQXZjNU9hbXBLZ1NxVmlxSnc3Tml4ZjN6ZVZXdSt1bTl6M0t2M2UvVHFuYnVtK3V3NTg3T21LdW9CeDdPRm83cHM0YWlneUxJaVNYWkVRVVNTQk1maWdreXZUWlNkWWFpakdxcVN1V2xoYUdzZUVLS2pZL0QyOFVZUUJJNGZQMFpTVWhLS29sQzZUQm1TazVNNWYvNGNBRC85dUZVVGNxMVh2ejQvNzl6SjlldXFXT3pPblRzNGVmTDNmTTlUdDI1OXRtL2JSbnA2T2phYmpSKzJiS2Erb3pTZEY4cVdEU0k2T2xvcnVVZmN5SlQzdTVNeC9KTW52VGxMYnMrTjdFbHZ6eHc5Z1E5NnpuSWJFMEFSM3dSU2svTVd6ZmIwTEZqSVc5RDk3dVpuM2Mxem1qdzhtbVR6MXB3OWJhTGo1U0RsVUFSSmtoQUV1eUE3bzg0c1hwdGVDME1WQlNWTEdKb1dNYmZwM1FwRDgwSitnaFN2dmZZNlk4ZU00b2N0VzZoY3BRb1ZLbFlrTVNHQndNQkF4b3diejZkaDA3QllMQVErRnNpUW9XcGlza3FWcXZUclA0Q2hnei9FWnJkUkxxZ2NnNGNPeTNjTVQ5V3RTOHRXclhtM2wxb3dlUGE1SmpSdDJreExoaTVkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR1A3SmsxNFU1UUkvNlI4bHBLWWtJNHB5anA1QWRjNmtCekpucVNuSjZFUXAxejdGWXY1eDNJajFKeXBTd2N2SEw4Zll5cFd2Y010RjZaNmVYcFFyWCtHdWpmZEJuQk1vc1gzSHJzclBOMjk2Z2l3MFJrNmpwaG8yQkZtV0hlNGJTTEtnZFhZNEs2UkNrVUF6RnF0ZHNGcGw3SklpeUtwWWk4NFdzMkNTS0FvZjNPNm9IaVh1OW51QmkrZi9KTGhXd1pzK0wwZFZKamE1a0h0dGJqYmNqTHhCUUtFa2doN0xPWmVYb3lzVG0zVC81eXkvTVRtOXlhajRRa1RHQjJDVGpLUStvc1F0NmVucFMxdTNicjBLVlE4aEdWWHdKZDBoK0dJVEJDUlJGR1NEWGxDTVJoR1RVYStZUFF5WXpRWTh6U2E4dkV6b25XR29rb1hKUTFFVVVSU0Y1dmM2Q2VwR1RuaDdLcmZGMTFVbThEeFI4ZFc1R1hrRGJ4ODNOWGhxU2pJcEtjblliUm1VQ1RpWGV5b2g4Q3hSY1UvZXR6bHpqa215cDFNMjhHeStIbmhSL3lTSytpYzk0cUk4U2tQZ3F5emhxTTdCOXFGV1J4RWNDK05CbGhWRlZwdDJGVWxTMUFxcFhVS2ZyU2tYQllTNHl6T3FjUWRpTGJlYkJIVWo1dzJnMTlsdjY0SVdSWm02bGM1d09ib3ljWWxXRXVMaXlNaDROQi8xWnJNbm9pZ1RVTmhHMmNmT0lRcEtudGRwdlVvbnVSSlRtWmdFeXoyZE03UFpFNTBvRWVCcm9XemcyUUwvdG84eU9hc2dDTlczcnU5YnZIWEh1WDlweGsxQmgrRElzWUVnS0tyTmttWFViZzVIWmRUNTBxdlUzOW5XaG5wN05MblRRUlh4VFNBaUljRnQyTzRBS1NtSmxQUzdmY29pVWJCVHZzZ2ZsQy9pbHQrN0hjTVI5TmhaZ2g1N09PVDMzSERGVTdXQ3FnRi9PdzJiQWpvaGF3RkJ6YlVwaXFOTlRYS3NSbkQwdHlFNnZEVUJiVzBvZ2s0VW43dlRBUlh6ajBPUkVvaTZlWTIwQjdDTzd0K0l0TlFVb2lLdWdwUklVYjkveHNYMmFEL3BINzQ1Y3h1MU80T3ZyMmN0MUtLQm5zd0NnaXIwb3RHcEtZS3NJRGk4TmtHV2xTd2VtNU9leU9HeERlclhUQ2NJQlArVEgvS3BTcGU0R2UvRHpmZ0FraE9OcEtTNmY2aTg0TzBGQnAyVlVvRnhGUEZOY2srSUcyNEFCcjJ1WWMzcXhRd24vb2pVWndsSFJRUkVCVVVBUVZBVXh4SXJ4Ykc0d0VHN0pza3lncGRaSjlqc2lpQ3AxVkF4K2Zyc3BwNW00NC91cVhYRERUY2VKSTZldU5MbnFlQ0pwOGhTSFJVRTBnR3JJQWcyUVVEV2FkVlJIUjRtdmVMaFljQnNOcUszUzFrV3ZpdUtjRE1xc2VIOTZveDN3dzAzM01qVGF6UG9LZ04vWmcxRkZRVlJFRkE3T0JDUVpRVzdCSUpOUmhEc2FzZ29nT0RoNFNIYTdYWkJVUlJSVVJTZDNXN2ZKQWpDOCs1cGRjTU5OeDRrN0hiN2JvUEJNREdMeDVZaUNFSXFZQkVFd1NvSWdpUUlncXpYNnhXajBhZzQ2TzRWczltTTZGd1hxU2lLOE9xcnIrb0VRV2pvbmxJMzNIRGpRVU92MTljdFc3WnMxc0tCVmtCd09HS3VWRVpaWG9MUmFCUWxTUklWUmRFbEppWTI5UGIyM3VXZVVqZmN1UDlRRklYSXlFaHUzb3hDa2lSU1VwSWYrVGs1ZGVwVTc3NTkrNTUxZW15T1Y3b2dDRmJBN3ZUYWREcWRvdGZyTVJnTWlzbGtRcCtWeWNMRHc2T3UrL0p5dzQwSFk5U09IVHVHZ3FDdGhuRHI4WUt2LzJQbGdRdGthZnR3a0U5cWpUU0NJQ0FJQXFLb1E2L1hvOWNiTWhlV0FvSk9wM3ZxMy9qbFEwTkRhZFdxVllIMlRVbEpRUkFFZHUvZWZjZm5xMVdyRnBNblQ3N1R2QUdob2FFVUtWS0V3b1VMMDd0M2IwMEV4WTFIRjVHUmtTZ0lGQzFXd3QzY25nVStQajZWczRXaG9wTjRNcXZ0VWhtSlpMV2ZUWkhWSEp0em5hZ2dDSFhjVTNsdk1XellNRFp0MnNTNmRldll0R2tUTzNmdXBGKy9mdTZKZWNRUkZSWHQxdVBOQlFhRDRRbHk1dGl5R1RVRmxXNU5RVkZrRkZuV2R1RDgrZk5GZ0VydXFieDNTRTFOWmQ2OGVZU0ZoUkVjSEV4d2NEQ0xGeTltNWNxVnhNVEV1Q2ZvRVlZa1NYZmtxWjA1L1FjRFEvdmY4L0dkT1hPYXNHbFQyTzVRS25OaTQ4WnZDT255RmlGZE83a0k4a1JIUnpQd2d3R0VkTzFFM3o3dmNmWHFGVzNiaVJQSDZmbDJON3FGZEdiMEp5UHoxV1lWQktIQ3lJOUhlZWRqM0FBRUhBc05uTTI2enFxb1VLSkVpU2YvS3hmSmQ5OTlSLzM2OVRHYnpYaDVlZEc4ZVhQT25YTmxldmpsbDErb1ZxMGFIaDRlTkd2V2pMLysra3ZiSnNzeVk4ZU9wWFRwMG5oN2U5T29VU1AyNzkrZjY3bWlvNk41NVpWWDhQUHp3OXZibXhkZWVJRUxGeTVvMndNREEvbndRNVZOOTlpeFk2U25weE1jbkxtdzQ5bG5ud1hnNE1HRDdydjdFVVp5OHAydE9xbGNwU3FqeG95OXAyT2JQMjh1eTVZdTRkTEZpeTVHNk9yVksyeFl2NTRGaTVheWJQbEtUcHc0eHBFajRZNWo1dENzMmY5WStma3F1blYvbXltVEptcXBtRWtUeGpIeWsxRjh0dkpMU3BVdW8ybG01SVZubndzdTRUQmtMb1NUanJCVVc0R2dLbGlwWHB2bTBoa01oditFWWZ2OTk5OTU1WlZYNk55NU0yZk9uR0hIamgzY3ZIbFRNeTVPekpvMWkwbVRKbkg4K0hHOHZiMXAxcXlacHJ3emNlSkVsaXhad3BJbFN6aDU4aVFkT25TZ2VmUG1uTTFGSERjME5CU0x4VUo0ZURqSGpoMURsbVZDUWpMMUJBWU5HcVJ4MDErL2ZoMmowVWhBUUVCV1Y1dUFnQUN1WGJ2bXZydmR5SUhZMkZnR0RRd2xwTXRiZEF2cHpPRkQ2Z1BRcWNuYm9YMWJRdnU3cGpLR0RmbEk5YUs2dkVXN2wxN2d6VGRlMWJaZHZIaVIwUDU5NmQ2dEM0TStHTURObTVFdXg2NzcraXVYL1FGNnZ0T0xzT2t6S1AvNDQ2NzMyb2tUUEZXM0xwNmVLc21xbjY4Zko0NGYxN3l5NTU1VEgrQ0ZDeGZtenovUFlMVmFpWXlJd01Oc0ppaW9IQUQrL3Y2Y09KNC96WG54WXNYS1pERnFqanhiMW5CVXlReEoxVHdiZWxCNzJIUTZYZlgvd29XZ0tBcWZmdm9wL2Z1cjdubFFVQkFoSVNFc1dMREFaYjlQUHZtRWR1M2FBYkJpeFFwS2xTckY1czJiZWVtbGw1ZzhlVExMbHkvWENoSURCdzVrMTY1ZHpKdzVNOGZuWEw1OG1kS2xTMU95WkVrOFBUMVp2bnk1aTVFYU5peVRQVGN0TFEwUEQ0OGNZemFaVERuazA5eHdBK0NydGF1cFVhTUdJZDNlNXRLbFM4eWZONGNHVHpmVU5IblBuei9IeFBIalhJNlpOR1Vhb0VwWTluNm5oNmEvWWJWYW1UaCtMT01uVHFaNDhlTDg5T05XRnN5ZngrZ3htY2ZYckZVcmg1NUhYc0pEaVltSmVIaDRFQjBkemFRSjQ1QmtDUjlIbmpBeE1SR1Rod2ZmYi9xT0hUdTJZVFFhU1VsSklTa3BDWlBKaE5WcVplNmNXZHk0Y1NPSHdsWjJlSGw3bDh0aTFCd0dUaEVkRkFPT1hqYWN0UUpGVVJSQjcyeHlFd1RoUDJIWWF0YXNTVUJBQU5PblQrZk1tVE9jUFh1V1gzLzlsYUpGWFl2bmpSdG5DcFVFQkFSUXZueDUvdmpqRDU1ODhrbFNVMVBwMXEwYmI3K2RLWlJzdFZwZGpuRml5SkFodlBubW13UUdCdEswYVZOZWZQRkZ1bmJ0bXV2WXpHWnpEalVoVUNYZEhvU01teHNQUCtyVmI4Q2NXVE1BZ2ZyMUd4QTJmVWFCanBObG1UR2pSOUhteGJiVXI5OEFVS1VocjEzN20rRkRCNnY3S0RKZTJmUUtLbFdxVEtWS0JkZEtQWDM2RDQ2TkdFcm9CNE00KytlZlhNeVNocGswWVJ3QmdZR0VUWi9KcXgxZWRqR0lBejhZd0lzdnZrU0hqcTh5WXRqUWZNOWhNQmdxWk11dDVjeXhvYUNBVmtEUVoyNmc2bi9oUWpoNDhDRE5taldqU1pNbU5HM2FsTmRlZTQzdzhIQ1dMbDJhNzFOSXI5ZGpOQm8xcmMwMWE5WlF2YnFycmMvTjIycmJ0aTNYcjEvbisrKy81OGNmZjJUNDhPSE1ueitmdzRjUGF5NjZFNlZLbFNJakk0T0VoQVI4ZlgwQnNObHN4TWJHVXJKa1NmZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEw1a1BXWnJOUnJGZ3hWcXo4NHE2TXJYRGh3bVJrWkJBMmZTYUZDaFhpeEluakZIWmMxNFVMRithWlJvMDFrWE5WaHRLYlFvVUtrWlNZeUlTSlUzajg4Y2M1ZS9aUDdWN0lDNElnVk02U1c4dWFaOHRlUUZDY0JRUVJFS0tpb2lvQnB2L0NoYkJnd1FMcTE2L1AxcTFiR1R4NE1DMWF0T0RHalJzNUpQV3k1c3VTazVPNWVQRWkxYXRYcDN6NThwaE1KaTVjdUVDRkNoVzAxNkpGaTlpeVpVdXVIdHY1OCtmcDBxVUxxMWF0WXYvKy9adzZkWXJqamx4RFZ0U3VYUnV6MmN6ZXZabXE1L3YyN1VNVVJaNSsrbW4zWGV4R0RreWFPSjd3SStFMGIvNDh3NGFQNU5DaGd5N1NrYmxoMzc2OTdObTltK0VqUG5hUnFxeFFvUUpKU1VuOHNtZTNsbS83ZnBPclR1ajU4K2ZZdVBHYkFvM3R5Um8xc0ZxdG1Fd21KRW5pNElIOTFLeWxhcG5XcWxWYkcrZlIzMzRqS0tnY1JxT1JZc1dMVTlqWEY1UERzZGkzZDY5MlRENHdMVjY2UERBWGc2YjFzQUZaUERaSGpzM2IyN3ZDZitWQzhQZjNaK2ZPblp3OGVaS1NKVXV5YnQwNmxpMWJocCtmbjh0KzQ4ZVBwM0hqeHZqNitoSWFHa3JGaWhWcDNibzFvaWd5Y09CQXhvNGRTN0ZpeFdqWXNDSHIxNjlueG93WmJOKytQY2Y1enA0OVM1OCtmWmczYng0QkFRR3NXTEVDYjI5dnFsUlJCVzBtVFpwRTdkcTFhZFdxRlY1ZVh2VG8wWU8rZmZ2aTQrT0QwV2lrZCsvZWRPL2UvYjRwbnJ2eDcwTG56bDBKQzV2QzJ0V3JrR1daZ1lNK1FoVEZmQlhlNXM2ZVNVWkdCbjNlNjZWOXp0ejVpL0R4OFdIU2xHbk0vSFE2aXhZdXdOUFRrNEhaaEpTUEhUM0toZzNyYWQrK3d5M0hWclpzRU8zYmQrRGRYajFSVUhqMjJXQk5PL2o5UHYyWVBHa0M2NzcrQ3JQWnpKQmh3N1hJYVBpSWp4azNialEycTQzU3BVc3plT2p3VzU2clFvV0tqd0hYYy9mWUhEb2hHcmVrZ2lDS29vZkZZaG1nMStzbi8xdC8vTkRRVVA3ODgwOSsvUEZIWW1OajZkbXpKenQzN3NSZ01QRFVVMC94eGh0djBMTm5UNjVldllxdnJ5OCtQajVNblRxVmxTdFg4dmZmZjlPb1VTTVdMbHhJR1ljNnZjMW1ZOHlZTVh6MjJXZkV4TVJRdVhKbFB2bmtFenAwNk9CNEd0WGlqVGZlWU9qUW9VUkhSek5nd0FDMmI5OU9jbkl5ZGVyVVlkcTBhVFJxMUFoUTJ6MjZkZXRHV0ZpWWxrOExEUTFselpvMWlLSkl4NDRkbVQxN2RxNWhyaHVQRHZiczJlTldkOHNIY2JHeFlUVnJWTitPdW1iVStVb1RCQ0VEVlNsZUVrVlJYVE5xTUNpQ0lBaG11OTArVXhURlh1N3BjOE1OdDJGN0dKR1JucjY2WW9WeVgyUXpiS2xaREp0ZEVFUlpweE1WdmNHZzZCM0p1YUIvNnhlZU4yOGVmZnYyL1UvOGVKR1JrVG1xdHdXQkxNdGN2bktWdUxnNEpFa2lJLzNSWEh2cVlUYWowK253OXdzZ0tLZ00rUkdtS29yaW1MTlk3UFo3TjJjZVpqTjZ2WjRBL3dDQ2dzcmVjdi9yN243R1hDRkpVbkVjVGJsWlg0cWlwaEhWN2c0WldRYkpMaUVJZ3VBcHkvSlJvTEo3K3Y1OXNGaXNuRGh4QXAxZTc5WVZCVkpUVTBoSlRrS1M3TlNxV1F1ajBaQ3JVZnYxMTk4UWRicjdveXZxR0pNc1M5U3JXOWZ0c2QwQkZFVTVYNlpVOFEvSUpKMTBFazg2cWNMdGpuQlUwZXYxaXJPNlVOWTlkZjlPUkVSR29OUHIzYXdRRG5oNWVWTzBXQWwwT2owM0ltN2t1czlmbDY4ZzZuVDNiYzZjWXhKRkhWZXVYSFZmdEhjQVFSQktaL1BZc3YvZnBWbFhQSC8rZkZIQW5ibitseUkySnRiTkNwRUx2SDBLRVJNVG0rdTJ1TGk0QnpKbjNqNkZpSWwxa3gzY2FWVC95ZWd4M3VUWjh1SFViUUZRMEFjRUJCUjN6OW0vMVQyL2MxYUlSOEZ6UzB5SXkzWGJnNW96THk5dkV1UGo3dWpZcE1SRUx2OTFrZFI4dEhxOXZMd0pLdmM0aFFvWGZtRHpmaS9IV2JWS3RVSkFUQzdlbXZPT3dObjZvVGVaVEVYdi9nM25wamd1S0h4OENxSFRpUlFwVW9UaXhXL3ZHU01Ja0o3dUpxbk1DK2w1RUhnK3lPTEtuZjVlZjEyNlFGcGEvZ0s5cWFrcFhQN3JJalZxUFRoYXhYczV6c2VLRkNtVTNWdHpGQThFMTNCVVVmUTZuZTZ1R2pZM3hmSHRJelUxaFJzUmtkeUlpT0NwT25mM290eSs3U2RXTEY5R1ZOUk5TcFFvd2VkZnJ1SDgrWFAwNko3SlFESjArRWhlZUtHTis0ZDRpSEVyWTVIMVd2cXZqck5Rb1VLRnNoZ3daM091NEZnTW56V1NFZlNpS0Q1Mk43OVlWb3BqTndvZW9uaDVlUk4xTTRMSXlFaUtGU3QyVno3M3hvMGJUSms4a1RIakpsQ3ZYbjJTa2xUT3J3b1ZLcko5NTI0QTN1blI3WjU5citYTGx0THU1Zll1TkUzT2NjMmFNWjJUSjMvSGFEVFMvUG1XdlBkK0g0MVY0dHExYTh5Wk5ZT1RwMDVpTXBsbzBhSWx2WHEvbDROMTRtN2lWdWQ4cm5GRERBWURnaUFTRkJSRTl4NDlhZFNvc2Z2aXZZOHdtejBLdVJxMUhDL0gwa2tGVVJURmdMdDVjamZGOFQ4d2NONCszTHg1ODY1OTN0ay96eEFZR0VpalJvMHhHbzBFQmdZNlFsZ0Jod2FqeTFyQ3U0M1BWaXdqTGk1bkFuLzBxSkdVTEZXS2pkOXRadkdTNVJ3NmVJQk5tNzRGMUo2OG9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuSWlEQi9ZVDByVVRyNy82Q2pNK0RkUFdkTnBzTnNLbVRTR2t5MXQwRCtuQ3ZuMlphNXJ6WThTOWQ1Rk1LcHUrKzVhaGcxWGFKWVBCbU4xakUzRVVEckpHakZhckZWRVFoTHU2U05HZHpQNW5ucHRka3Y3eDV4dy9mb3lYMjdaaDJ0VEpSRVpHOG5MYk5yemN0ZzByUDF0UjRNODRkUEFBbmQ5NmcrYk5ndW5SUFlRL1RwMXkyYjVuOXk1Q3VuYmloVmJQMDcxYkZ3NGRQS0J0NjlmM2ZWNXVxNGEySHd6b3o4dHQyOUQzL1hjMUl4SWMzSlN1SWQwd21Vd1VLVnFVdXZYcWNjNUJTaEFYRjRlZnZ6K2RPbmZHYURSU3FuUnBHalYrbGovL1BIUFA1djEyem1rMm0yblVxREhEaG85a3llS0YrZEphM3l1VUsxY09uVTdIdG0zYjJMdDNMelZyMXNSZ01PUnFzTFAvUHlNam5hbFRKakZ4MGxSV3IxMUhURXdNMjM3NkVZQ3RQMndoSXlPRGxWK3NadnFNV2N5ZSthbm01ZWZGaUZzUVBQSEVFOXBETmI4eFp2MDdKaWFHZDNwMDU4S0Y4OXJ2b05mckMrWGhxV2t2V1piUjYvV0lnTi9kblBRN3BUaDJRMFZLOGo4dnROU3FWWnR2TjIxaFFPaEFTcFlzeGJlYnR2RHRwaTJFZE90ZW9PTXZYcmpBeHlPSDgxNmZ2bXpadW8xWFgzdWRnUi8wSjhyaFRWNjVjcG54NDhZd1pNaHdOdi93RXkrOTFJNFJJNFpwYWx0ejVzN24yMDBxRThxTVdiUDVkdE1XNXM1ZkNJQW9pblRxM0FWZlgvV3krK3V2U3h6WXY1OEdEVlIyazhEQVFPYk1uWStIaDFtNzBJOGZPMGFOR2pYdjJaemZ5VG5yMVcrQTFXYlREUEw5UkdCZ0lEZHUzTkE4RkZtV2M1QThIRGtTem9oaFE3RFpiTVRGeGZGT2orN0V4Y1VSRVJHQnI2OGZKVXVXUktmVDBhcFZhdzRmUGdTb3JMZlBQdnVjNDNjU01CaU1uRHQzVnR1V0d5TnVBWE5qZVpKVkxsdTZXS01HUDNueWR3YjBWMWNSK2ZyNjhzV3FOWVIweStSRTFPbDB1WVdpdUlhaHFrY3JBdmM4Ymh3ME1KVFhPcllucE10YmRPMzhKbHMyZjYvbE5WN3IrQXJ0MjcxSTk1QXU5M1FNM1VPNmNQSGl4ZHM2WnR0UFAvSmF4MWQ0b1hVTFpzL0ttK0J2eDQ3dGpQNWs1SC9HdUc3ZXZJbmdKazFwMUtneEpwT0pWcTFmb0VyVnFteHpDSGtFQkFTeWZNWG5WS3RlSFZFVWVhbHRPMnhXSzMvL1hmRG0wejlPbmFKRjg2YUVkT2xFbGFwVmVTNjRTYTc3TFZ3d0Q3T25KeSswZWZHK2ZmK0NuRk1RQlB6OS9FbDVBTWw2bzlHSUpFa0VCQVRRdUhGalpGbkdaSEpsSGF0YnR4NytBUUdNR2YwSmd3WU9vUDBySGZEMzk2ZFlzZUxFeGNWeTZkSWw3SFk3NGVIaHBLU28zOEhKaUh2cTFFbUdEUDRRbzhsSVltS2l0czNKaUR0M3ppeU5FZmVmNHMyM09yTnIxOC9NbVQyVGNXTkcwN2RmZjZkM2xpT25LZ2lDZHo2NU5SY2pweGNFNGI0a3hENGFNb3g2OWVxVG1KaEFyNTV2VTdXYXluMldGNzN4dzRBV0xWdlJvbVVydnY1cUxaR1JFWStNMXhnWkdVbUZDaFZkM2l0VEpraWJBMjl2YjNaczM4YjQ4V05JU1U3Sk02eklEOVdmZUlKdE8zWVJFUkhCSngrUFlQbXlwZlI4eDVXSDRmT1ZuM0g0OENIbXpKbVBYcSsvTDkrOW9PZFVGSVc0K0RpOEgxRGF4Um1PN3QrL24xcTU4SmtKZ2tEdjN1L3h4dXNkS1ZPbXJHYWt6V1l6dzRhUFpQS2s4WTdmdFN5ZVpyTjIzUGZmYnlJOVBaMUprNmN4ZSthbkxwK1pGeU51WG1qVnFoWGUzdXI4T1BPQXAwK2Y1dlRwMDlvKzN0N2V2UHZ1KzN3UTJvODMzK3BFNWNwNUx5c1RSZEU3bnpCVU0ybzJtdzA5Y0Y4NXFRc1g5dVdKSjJ0dzhjSjV5cGN2bitkK2lZa0pUSjQ0Z2Fpb0tPeDJHNTA2ZDlYWU9NK2NPYzNNR2ROSlQwdWpTTkZpREIwMlFvdmhkKy82bWRXcnY4U1NrVUgxSjU3a2c0RWZhdm1IWFQvdlpPem9qMGxQejZCdnYvNmFsL0ROK25WcThscFJhTnJzZjNUcjN1T1czK1BJa1hBK25UNE5VUkFwV2Fva251Wk10dHo4eHRDOFdURDlCM3pBMGlXTFVCVDRmc3ZXaDg2d0ZTMWFsTWdJVjBOKy9mbzFhdGRXVzFIMi9yS0hWVjkrd1l5WnN5bFZ1alNnVmcxenU3bXlHenRMUmdaYnQvNUE2OVl2WVBMd29Iang0alJ2L3J4TG9ocGcvYnF2MmI3dEoyYk5tWGZmR2s1djU1eEhqb1JqTkJpb1ZQbitMN0cyV3EzWTdYYU9IajNxRE5GeWFHYWtwS1R3MFVjRDZkd2xoSE5uLzJUSzVJa01IVFlDUVJCNHV1RXpQTjN3R1VmdWJLNUdTMSs0Y0dITVpqTmp4MDFBRkVVc0ZndUZIZk9RRnlOdWZ2anhSelYzOTh3enozRDU4bVV0ZkhaSmUxeTh5T1JKRXhnN2JnSXJsaStsVE5rZzJ1VHRLWHRsTTJKWmpKcVFOV1JGQkR6djU0OFNIUlhGcVpPL1U2Vksva3prNTg2ZDQzL05uMmZaaXBYTW1idUFXVE5uWUxWYXNWcXRqUHA0QktHaEEvbjh5elU4ODB3amxpeGFvT1ZyMXE5Zng1dzU4MW41eFdvQWZ0aXlXZnRNSHg4ZlZuNnhtdEZqeGpGLy9seEFKZGJidkhrVEN4Y3RaY215ei9qdHQ5L1k5ZlBPZk1kbXNWaVlNRzRNbzBhUDVjdlZheWxUT25PcDdhM0dZTGZiaVlxS1l0MDMzN0wrbTQwUHpIalo3WGFOQmwyUlpleDJ1MmFFMnJ6NEVudjI3Q0k4L0RCMnU1MmZmOTdKSDZkTzBxSmxTMEJWVGhJRUVIVTZFaE1UdEJ5SklydXlGQmN2VVlKREJ3OWlzOW1Jam9wU3d5aVRpUzgrWDhuYXRhdXgyV3drSk1TemQrOHYxS2hSSXpNVS9uNFQzMjdjd016WmMrOGJBV2RCejJteFdEaDg2Q0NUSjAyZzk3dnZQeEN0aXVqb2FLMmFiVFFhOGZYMXpTR0ljdkhpQllLRG0vSldwODZNL0dRMFJxT0p1RGpYVlErSER4MWt4NDV0V2c5anJWcTFzZHZ0aUtKSVFrSThGeTllcEZMRlN0cTIzQmh4L3lsKysvVUlRNGVOb0VuVFpudzZjdzZuL3ppVmcrMDZ5NFBTbk0yb1pYMkd1cFQzOVlENWZ2d1kwOE9tWXZZd1l6UVo2ZE8zUDZVZHBJNTVvV2JOV2l4ZnRvUnQyMzVFcDlOanNXU1FuSnhNUW53ODN0NCtWSzJtNmhHODFMWWRUWnMxVTMrb3c0ZTQ5dmRWM3UzOVRwYW5pazltM3NIQjdsbTFXalV0RVI0ZWZvam5uMitKMmVHT3YvamlTNFNISDZacHMvL2xPYmFyVjYvdzJHTkZOT05jcFZvMTl2MnlwMEJqQU9nYTB1MnVYQlIzaXV3TnVsTW1UMlRLNUlrODM2SWxIMzh5bW9vVkt6RnF6RGdXeko5TFpFUUVaY3FXWldyWXB4UXRxdmJYdFg2aERhZE9uYVJIOTY3b2RIcmF2ZHllaWhVckVaZHR1ZERBZ1I4U05tMnEraVF1VTRhbHkxZGlOQnFaTWpXTXVYTm04ZFhhTlJnTUJvS2JOTldTeEpJa01XM3FaUFI2UFcrKzN0RTFUUHh5TmNXSzNmMFZnQVU5Wjc4Kzd5TUlLblBzb0E4SDM5VStOaDhmbndMdmUvbnlaWHg5ZlRWWngrUEhqK2RJNU5lc1dZdWFOV3RwK2FwQldaaHk0K1BqNk5XekI2VkxsMmJpcENrOFZxU0k5cnVlTzNkT3kzZjNHeENxZWE1NU1lSVdCQWNPSE1oejIydXZ2Nkg5UHlBZ2dJOEc1eXZzNHBGUEdPcXdjQ0tTSktFSDdzc2ROdWpEd1JwdGNFR3dkczBxN0RZN1U2Wk9SeEFFclgzQWFaNmRNQmdNK1BtcFQxaWIxVVp3azZhYTNGaCtpZCtzSVZMV1ZpNUJFUEo4WW1UTnIrVFZMRnFRTWVUSEUzWTMwYkpWYTFxMmFwM2ovWW9WSy9ITHZ2d0ZtaHMxYXB6bmpXc3ltUmo1OFNpWDk5N3AxVHZIZnZVYlBNM1g2emZrZUw5Q3hZck1uRDAzMTgvVzZYVHMyWHZndmhyNmdwenpWdk4xTjhhUW1wcFNvRllwNStxZU80V2Zuei9yY29rV3NodkFyQWdNREN5d1F0YmRSRUJBZ0ZaaHo4VldDZG50Z1NDQVRxZTJlenc0MXlGZmR6c0dieDl2QkVIZytQRmpKQ1Vsb1NnS3BjdVVJVGs1bWZQblZXWDNuMzdjU3RpMEtRRFVxMStmbjNmdTVQcjE2d0RzM0xtRGt5ZC96L2M4ZGV2V1ovdTJiYVNucDJPejJmaGh5MmJxTjhoZldLVnMyU0NpbzZPMW5FRkVsdHpCbll6aG44QnM5c1NOMjV1YkJ6bG5lWjI3U0pFaXBPV3pwdHJUczJBaGIwSDN1MWU0eCtNMDV1S3BDVW8ycjgwWml1b2UxQ1RrSjBqeDJtdXZNM2JNS0g3WXNvWEtWYXBRb1dKRkVoTVNDQXdNWk15NDhYd2FOZzJMeFVMZ1k0RU1HVHBDRFFtclZLVmYvd0VNSGZ3aE5ydU5ja0hsR0R4MFdMNWplS3B1WFZxMmFzMjd2ZFNDd2JQUE5hRnBVelcwM2ZiVGp5eGRzcGlVMUJSa1NXTGYzcjEwNlJyQ1MyM2JNWFQ0Q0VZTUc0S2Z2ejk2dlU0ckh0ekpHTzdYay81UlFtcEtjcDVldGZpQTVpdzFKUmxkSHBYVzRzV0xFeEVSUWZUTkNEeTlmWEtNclZ6NUNyZGNZTzdwNlVXNThnOVdsK2tlajFPWG04ZVdXOTVOVUc0VmQ5MG1qaDQ5U3BGaWJvM01PMFZVNUhYcTNNWkMrTXVYcnhBYkYrZGVtNXNOTnlOdkVCZ1lRTmxjY3JtWHIxd2hOdmIrejluTnlCc0VCQVFRVkRidi9ISlVWQlNSa1pIWTdYYVNrOTJzT05uUnBFbVQ5a0FhS29OdUVwbWlMaFkwN1FOQnZ1dk5RVzRQNHA4OTBXKzNYNnRzMlRKRVIwY2pudHFQQUFBZ0FFbEVRVlJ4TS9LR214cmNNWWNwS2NsSWRudXVSZzBncUd4Wm9xTHUzNXc1eHlSTFVyNUd6Um1TRm5Fazg5M0lGZG5EVHNHWll4TUVRVjExSUlxQ29DaUtoTHBFNGE0Z0lpS0N5TWliUEZiVXpWOTUrOTdhRFVxVUtIN2I3QjZLb3ZEWDVTdkV4Y1VpMldVeU1oNU5qamF6MlJOUnB5TXdJSkN5WlV2ZmNvSC9sU3RYaVk2SlFiSkw5MnpPekdaUGRIcjlMVDAxTndvRVdSQ0Vqa0JxRm84dFJSQ0VWTUFpQ0lKTkVBUzdLSXFLb0NpS0ZURGM3WEJVRUhWNGVYbmo2ZmJjYm9rMGg5Z0hLTGNWaHJyaHhpTUdteUFJcjJjeGJNbEFzaUFJYVVCR1ZzT21CKzY2WWF0VHB3NDNiOTdrWmxRVXlVbUpiZ2JkZk9EdDQ0TkJyNmRVcVpMdUVNUU5OL0tIdGFBN09nM2JYYThSRnkxYTlJNDBNdDF3d3cwM0NtallsR3ovYWhDQmRQZDh1ZUdHRy84Q1pCVFlZN3R5NVlwYkRjUU5OOXg0NktFb1Nub3UzcG1pT0JSZG5KMXJpcUlvK3JKbHk2YTZwOHdOTjl4NDJDSExjbXFXMEZNemNObmJQUVJCUUZRVXhVMTU2NFliYnZ3YlBMYnN6SlpLdHY5cmYrdFJlMEhjY01PTkIzL2p1dlY0ODRIZGJrL0pZc0NVTEtHb2tqVVVsV1VadmFJb0NmZFNxY2dOTjl3b21GRno2L0htRDR2RmtweWJ4K1pxdnpKRDBiaEhiWUpLbFNwRnRXclZjaFdqOFBiMjVyUFBQcnVYVHgxQ1EwTXBVcVFJaFFzWHBuZnYzcG9JaWh1UExyTHE4YnFYSStaNTd5Umw4OWdVY21uMUFOV3d4VDZLazNUbXpCa21UWnAwMzg4N2JOZ3dObTNheExwMTY5aTBhUk03ZCs2a1g3OSs3cXYyRVlkYmovZldzRnF0U1ZrOHRWenlhNExLclNpQUtFbFN6S000U2VYS2xXUGl4SW1jT1hQbXZwMHpOVFdWZWZQbUVSWVdSbkJ3TU1IQndTeGV2SmlWSzFjU0V4UGp2bklmWWR5cEh1K1owMzh3TUxUL2ZYQUVUaE0yYlFyYkhVcGxUbXpjK0EwaFhkNGlwR3NubGk5YnFyMmZuOER5aVJQSDZmbDJON3FGZEdiMEp5TUxyTTJhbnA2V2pHdFRicmJxcU5OZkE5Rm1zOTE4RkMrazNyMTdVNzE2ZGQ1NTU1MThHWFBYcjEvUGswOCtpZGxzcG5yMTZpeGR1dFJsKzg4Ly8weWRPblV3bTgzVXExZVBzTEF3RjNIWXdNQkFQdnhRWmRNOWR1d1k2ZW5wQkFjSGE5dWZmZlpaQUE0ZVBPaSt1eDloM0trZWIrVXFWUmsxWnV3OUhkdjhlWE5adG5RSmx5NWVkREZDVjY5ZVljUDY5U3hZdEpSbHkxZHk0c1F4amh3SmR4eVR1OEN5M1c1bjBvUnhqUHhrRkordC9KSlNwY3RvbWhtM1FsSmlVbDZoYUk0VkNQcU1qSXlvVzZuTi9CZWgwK2xZc21RSkRSbzBZTkdpUmJ6NzdyczU5dG03ZHkrZE9uVmk5dXpadEdyVmlxTkhqOUs3ZDI5ME9oM2R1M2ZuNHNXTHRHblRocjU5KzdKbXpScCsrZVVYK3Zmdjd5THdNV2pRSUdyWHJnM0E5ZXZYTVJxTkJBUUVhTnNOQmdNQkFRRmN1M2JOZlhlN2tRT3hzYkZNbkRDT21PZ29CRkhrdmZmNjBPRHBoaTRrcmI2K2ZxeFkrVVZtdW1QSVI5eTRvVEk0SnlRazRPbmx4WnExNndCVkZXck9yQmtrSmlYaTcrZlA0S0hETkMwTGdIVmZmOFdHRGV1MS9RRjZ2dE1MbzlHb01WVTc4ZnVKRXp4VnR5NmVucDdZN1hiOGZQMDRjZnc0OWVyVjU4U0o0M3p3d1NEQVZXQTU2dVpOUE14bWdvTEtBZUR2NzgvUE8zY1VhQzV1UnQxTUxvQlJVd0QwRVJFUkVYbkp6Ly9YOGRSVFR4RWFHc3FRSVVObzI3YXRwbjNveElRSkUralJvd2U5ZTZ0OC9tWExsdVhTcFV0TW5UcVY3dDI3czNEaFFxcFVxY0swYWRQVXAyZmx5cHc4ZVpMVnExZTc1TlNjU0V0THc4UERJOGM0VENaVER2azBOOXdBK0dydGFtclVxRUZJdDdlNWRPa1M4K2ZOb2NIVERTbFZxbFNlbXJ5VHBxalhZMkppQXIzZjZhSHBiMWl0VmlhT0g4djRpWk1wWHJ3NFAvMjRsUVh6NXpGNlRPYnhOV3ZWeXNFOG5KZndrRk5nT1RvNm1ra1R4aUhKRWo2T1BHRldnZVVkTzdacEFzdEpTVW1ZVENhc1ZpdHo1OHppeG8wYk9SUzI4ZzY3VHp2YlBlUzhQRFZuTUNyV3JGa3ppdHRZZy9WZnc5aXhZd2tJQ0tCdjM3NDV0cDA2ZFlwbHk1Ymg3ZTJ0dlVhT0hNbUZDeGVRSkluang0OVR2NzZyUUUyalJvM3lQSmZaYk02MUVtdXhXQjZJakpzYkR6L3ExVy9BemgzYldmblpDaXdaR1FVV1ZKRmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjlNOXBBdXJWMytwcWJVNVVhbFNaVjdwMExIQTR6dDkrZzlHamhqS083M2ZwV2xUVjJXM1NSUEdjZm55WDRSTm4rbWlWSitZbU1qQUR3WlFyVnAxK3ZVZlVOQlRaVXdZUHpZdG4xQlVNM1NDb0Rib0Fsd0ZLajJLRjQ2bnB5Y0xGeTZrWmN1V2JOem9xdHhqdDlzWk5HZ1FiNy85ZG83alJGRkVyOWZuRUFUT0wxOVhxbFFwTWpJeVNFaEl3TmZYRjFCVnEyTmpZeWxaMGsybjdrWXVocTFlZmViT1cwajRrWEErWDdrQ285SEltSEVUYm5uY3NxV0w4ZkR3b0hPWHJ0cDdOcHVOWXNXS3VZU3Qvd1NGQ3hjbUl5T0RzT2t6S1ZTb0VDZE9IS2V3NDdyT1MyQzVVS0ZDSkNVbU1tSGlGQjUvL0hIT252MVR1eGZ5ZzZJb2YyY3pZSElXenkzbi9ha2VvMXg1bEMrZUZpMWEwTGx6Wi9yMjdhdUpDQU5VcTFhTmt5ZFBVcUZDQmUxMTRNQUJaczJhaFNBSVBQbmtreHc1Y3NUbHM3TC9uUlcxYTlmR2JEYXpkMittNnZtK2Zmc1FSWkdubjM3YWZSZTdrUU9USm80bi9FZzR6WnMvejdEaEl6bDA2R0NPaDJsMjdOdTNsejI3ZHpOOHhNY3V6YXNWS2xRZ0tTbUpYL2JzMXZKdDMyLzZ6dVhZOCtmUHNYSGpOd1VhMjVNMWFtQzFXakdaVEVpU3hNRUQrNmxaUzlVeXpVdGd1Vmp4NGhUMjljWGtDRy8zN2QyckhaTWZKRW02bnMybzVlR3RxZjBlZWtDUlpmbHlYb28randwbXpKaEIxYXBWWFhKZFE0WU1vVldyVm93ZVBacE9uVHB4K3ZScCt2ZnZ6OENCQXdIbzI3Y3ZzMmZQWnVqUW9iejk5dHNjT25TSUJRc1d1SVNWa3laTm9uYnQyclJxMVFvdkx5OTY5T2hCMzc1OThmSHh3V2cwMHJ0M2I3cDM3MzdmRk0vZCtIZWhjK2V1aElWTlllM3FWY2l5ek1CQkh5R0tZcjRLYjNObnp5UWpJNE0rNy9YU1BtZnUvRVg0K1Bnd2FjbzBabjQ2blVVTEYrRHA2Y25BYkRxaXg0NGVaY09HOWJSdjMrR1dZeXRiTm9qMjdUdndicStlS0NnOCsyeXdwaDJjbDhDeVhxOW4rSWlQR1RkdU5EYXJqZEtsU3pONDZLM0ZsMjAyVzBRdUhwdWlxdSs1ZW0yQ2dDSUlndUNka1pIUnoyZzBUbnhVTHBaU3BVb1JHaHFxdFdFNDhjVVhYOUMxYTFkV3JGaEJ0MjdkQUZpMWFoVVRKMDdrd29VTEZDdFdqSjQ5ZXpKeTVFanRTZmpUVHo4eGNPQkFMbHk0UU8zYXRXblFvQUhyMTYvWGRFVURBd1BwMXEwYllXRmhXajR0TkRTVU5XdldJSW9pSFR0MlpQYnMyYmtXRmR4NGRMQm56eDRlcjFqRlBSRjVJQ1ltNXRQYU5aLzRCVmRhOEJRbkxUZ3FiYmdraXFLczArbFZ3NWFVbE5URzI5dDdyWHY2Ymc4blQ1NGtMUzJOQmcwYWFPK05IajJhSDM3NGdmRHc4UHMyRGxtV3VYemxLbkZ4Y1VpU1JFYjZvN2xFeThOc1JxZlQ0ZThYUUZCUUdVUlJ6QzluNDVpeldPejJlemRuSG1ZemVyMmVBUDhBZ29MS3VnM2JIZUxzbjM4T2EvNi9KcWZKS2VTU0RqaWs5MFJKRkVWWnI5Y3Bla0NKajQrLytDajBza21TZE52eWR2bmRHQmN1WEtCTGx5NnNXcldLV3JWcWNmTGtTZWJObThmdzRjUEpqUGNManNqSXlOdW1VN2RZckp3NGNRS2RYbzlQb2NKdStiM1VGT0lUNG9uNUxacGFOV3RoTkJweS9lMSsvZlUzUkowT2I1OTdQMmVwcVNuRXhzVVJIUk5OdmJwMTg5MzN1cnVmTVZjY09uZ2dsc3lDZ1ZZNGNEQjdPRUpSQlFVRldaWVJCRUh3Qkl6L1orKzc0NXVvLy8rZmQ1ZGNkdmVtcFlXMkRGR2dTQUUvRkJGL2JCemdGMFVGUkN4WWtDRWdJaFFVRkdRclFnc2lVNUNsSUdKWkFySmt5aXBZaG15UTBxYnBidE9SY1hlL1AyNDBTZE5Tb0dYbTlYaEVhZFpkM25mM3ZOZDhQbG1XMVFOUXVKYnc3bXpxMUtsWXZIZ3gwdExTRUJ3Y2pMaTRPSXdlUGJwU2I2RTY3V0dKL3o3cXhvc1RleUVzdEx5WGRPMzZEZVRtNWo0VXdXUWZiMitFT3BIaGMzbHNsZCsvUTJvRjlBRXZZMkIwQ0VWTEFKZ0ZvV1NHSkVsT0pwTnhKTXFTY1JkYzYzZjNGaDhmait2WHI4TmtNdUhxMWFzWU0yYk1Bd00xQU1qT3luWU5UenN4cmM0TldWbk8rUjF5Y25JZXlwcHBkVzdJeW5iTkJOOURxdVVpN0ZzOGJGczk3SXNISW9PdTZKMnpMSHZldFlTUGwzSGN2UTlQUCttbTBXakJza3lGS1ltSHNXWWFqUmFNbFhFZG5MczBpOFZ5RmVYNzF4ejcySGgyRHdIY1pBUkJjQnpIY1ZhcjlYeEZveE11ZXpTTklJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTckl6OGVONjFkUlZHU3NGRGpENm9URHpkMzlvZjIrbXRoUG83SHdwaE5BSytleEVVU1o3b0ZNZktHa3BPU2NDOWdxODQ1NDJtYUR3UUFydzhCWVdEMjB6VnF0RGpLNURINit2Z2dNREt6Mi9kNjFjd2VXTDFzS2d5RURRVUZCV0xscUxTNWZ2b1RZL3Yyazk0eU5uNEN1WGJ1NUR2SWpiTmV2WFVGeGNlWDBQa1ZGUnR5NGZoV05telo3b3Ziejl1MjAydzZBeGdCZ2hhSkJ1WWNJYkFEQVhicDA2VngwZExUckRLb0ExSktUa3dHQ2hFYXI0Mm1iQTZydis0dUtqRWpYWnlBOVBSM05tbFhmU1ptV2xvWVowNmZpeThsZkl6cTZCUW9LZUdxY2lJaEk3TnE5RHdBd01QYjlHbHUzWlV1WDRQWHVQZXpZVE1UOW1qdm5HNlNrL0FPYXB0RytReWNNL21pSU5IeWRtcHFLaExsemtISTJCUXFGQWgwN2RzS0hjWU5SazAza2Q5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBenNFN2dZWHR1ZlF3clNiMmMvKyt2UmtDYURFaXFObDdiYnlYQmx1VktoSGxXclpzbVFYZ3Nndkd5cHRlcndjSUVuNytnVFdTbTlGb3RQRHpEd1JBSUQwOXZkcSs5K0svRitEajQ0UFdyV05BMDdURUUwY1FCQlFLQlJRS0JXcFM3K0xINVV1UmsxTStnVDlwNGdUVUNnN0diNzl2d2FMRnkzRDB5R0VrSlcwQ3dQZmtqUjB6R3ZYcU44Q20zN2NnSVdFQjl1L2JpOTgyL2xwaisxblZiU1l1V0lqTlc3ZWpmK3dBeko0NUhSdC8zZUM2T0dyZXFiZ3ljOGEwa3NyQ1VJSVFRbEhZaDZJUTNzQ3lMSHVLSk1sSTEzTGFtOEdRQ1kxV1YrUGIwZWpjWURBWTdqc2tQWDA2R1pPK21BQ3oyWXppNG1KMGY0MFBNM3U4MFJQOTN1OWZwZTg0ZXVRd0VoUG1RYTlQUjJob0dFWjk4aWthUGZ1czdWMFV5NVl0UWFiQkFQK0FBTVRGRFVhckYvNEhBQmcyOUNQY0VoaFRSMzQ4SERJWmhlRGdFQ1F1V0FpV1pkRzJiVHQwZStVVktCUUsrUG43bzNsME5DNWR2QWlBcjFoNmVubWhkNTgrb0drYXdTRWhhQjNUQnYvK1czTkYrN3ZacGtxbFF1dldNWkRIVDhERUx5YWdVK2N1angwekM4TXdPSHIwQ0xZay9ZNGhRNGNqT0NRRUFEOGtQL2U3YjVIeXp4bVFKSVhZZ1I4aUpvWW5RczNNek1TMHFWT1FuWjBGbmM0Tll6NGJpOXExUXl2ZERrRVFpSXFLZ28rUEQxaVd4Zm56NTVHV2xsYmwvVnp4NDNMOHNYM2JPV2RoS0FDVzR6aTJMTDlHY0NBSXZrRzlvRUFxSGdBQVo3RllraFVLUlM4WGxObWJsYkUra0NxYVJxT0ZzU0R2dnIrbmFkTW9iRXJhaWgxL2JNZktGVDlpOWRxZjcrcnpWNjljd2VjVDRqSHBxeWxvM2p3YWUvZnN4cWlSdy9IVHFyWHc4L2ZIelpzM01HWHlsNWc3Yno0YU5HeUlUYjl0eFBqeDQ3QjV5M2FvMVdva0pDNlF3cmM1YytjaE1yS01PSVlrU2ZUdTA3Y3NKM1A5R2c0Zk9vU1BodkMwVVQ0K1B0TG5SVy9xZEhJeVh1L2VvOGJXL1Y2MkdkMmlKY3dXQ3k1ZHZJaW9aczBleWZPV1pWbXA5Y2oyM3g4UEg0cGF0V3Jod29YellHd3F4OXUzYlVWcGFTbFcvTFFHT1RrNUdQUmhMQm8zYmdJM056ZUpFZmVWVjEvRGlSUEhNV1BhVk16Ly9vZEt0MStuVGgxUUZJV2RPM2RDb1ZEZzVaZGZSbVptSml3V2k5Tjl0UDA3SmVVZjdOKzNGN05tZjN2bGhWYlJqbUdvYlk0TklvQVJBamhydFZxKzNVTk13aFVVRkp4eXdWaDVxNjVDUVpXMlpUUSs5Tis3WlVzUzJyN1VEcTFieDBDaFVLQnpsNjVvMExBaGRncDg5OTdlUGxpMmZDV2VhZFFJSkVuaTFkZGVoOFZzeHExYi8xVjVHK2ZPbmtYSDl1M1FyMjl2TkdqWUVDKzJmY25wK3haK1B4OHF0UnBkdTczeXdINS9WYlpKRUFTOFBMMWdMREkra3VmczhlUEhNSDdjWjdCWUxNakp5Y0hBMlA3SXllRUY2YjZkTXhmajRpZVV1MW1mT1hNYWJkcThLTnlBQ01qbE5DNWR1aWk5OXVLTFBLVzlMU1B1blc0WW9vZkdjZnhFZ0tlbnA5MTdsaTVaSkZHRHA2VDhnNCtIOHplNEs1Y3ZvV2xVRkc3eHJyK3R0OFk0Q1VmQmNad0VjSEk1YmRlZ3k3MzExbHVud0hmMnVxd1NPM1BtTkRwMWVCbDVlYm1TaDlPdjc3dFBWRTR4TU5DK0s3OTI3VERvOVh6K1Q2dlY0dVRKRTRqN01CYTkzK21GOTkvckk5MXRxMnFObm4wV08vL2NpNS9YYjBSNmVycWRFSWhvSzFmOGlMLy9Qb3FwVTZkWDJ5amNuYXlxMitRNERqbTVPZEErb2oyRXpadEh3OHZiRzE5TytnS2ZqUG9ZUGQ3NFA0bEI1azZNdUdmUHB1Q3pNYU5CSzJqazUrZExyNG1NdUlrSmN5VkczTXFNcG1rd0RBTnZiMi9FeE1TQVpWazd3a2tBZU9mZFB0aTdkdzhTNW4ySHlWOU93dEJodkRCTjNmQUluRHh4M0RoMHlFY1pEaUdvSGJBSllGWk8xSVVVa3NjY0FIYi8vdjBzeDNGSFhkQjFaeXNwS2NHYTFhdWZ5Ti9tNys4UHZVTVI0L2J0VklrYi84QmYrN0Y2MVUvNC9QTkpXTDMyNXdwRFhZSWd5b0dkcWJRVW0zN2JDRk1wVDlvY0dCaUk5dTA3NE15WjAzYnYyN0QrRit6YXVRTnp2a3Q0WUgxWmQ3UE40OGVQZ1piTFVhOSsvWWR5ZkRwMjdDZzlIRm1jeGJXUGl4dU1VeWRQUUVFcnF1enhidDZjaE9YTGxtTGE5RmtJZGNpaFZjU0llNmR3dEdIRGhqaDA2SkJVbGJjMXJWYUxRWU0rd3ZwZmZrYTdsMTlHL2ZyOFdGbVRKazNSdmtPbmt3WkRSbVdneHBiTmlZckJLSy96UU1LZU41eTFXcTB1WUt2aUFkdTdaN2ZrM3R2YXZyMTc4T0hBRDlDdjc3dVlPV09hbEZOSVMwdkRvQThIb1BjN3ZUQnI1blFwcWY5UThvWldxMFNxeWJFc3JGYXJCRUxkWG5rVisvZnZ4YkZqZjhOcXRXTFBudDA0ZHpZRkhUdDFBc0FMakJBRVFGSVU4dlB6cEZDQ1krM0pUQU9EZ25EMHlCRllMQlprR2d6OFhWeWh3RThyVjJEZHVqV3dXQ3pJeTh2RmdRTi9vWEhqeG1XaDhPWWtiUHB0STc2YmwvakFlT3FxdWsyVHlZUy9qeDdCOUdsZkkyN1FSdytsY0pDUmtZR2RPM2RLRDJkTU1rYWpFWjkrT2dwOSt2WkRRRUFBWmt5ZldpbTdzeGhpZW5oNFlOYnNiK0hsNVFXVHlRUjNBZUJGUnR4aHcwZEFMcGRMakxpVm1kbHNoc2xrd3NHREIyRXltVUJSVkRsdGo2dFhyMkw2dEsveDFlU3ZjZlRJWVd6ZHVrVjY3ZFZYWHp2ckpBeGxiSE5zb21OR0VJU1VxM056ZDRkTUtJOXlvbHRYV0ZoNHpFVjZlR2RUcXpYbzJLa0xWcTlhaVM1ZHlnRHErdlZyMkxCaFBSSVNGa0NoVkdMbWpHbll0blVMWHUvZUEzUG5mSVAySFRxaTU1dHY0ZGpmUjNIbzRJR0hzdStPRGJvenBrL0ZqT2xUMGFGakozeit4U1JFUnRiRHhDOG40L3NGaWRDbnA2TjJhQ2htenY1Vzh0aTZkTzJHczJkVEVOdi9QVkNVREs5Mzc0SEl5SHJJeWJVSCtWR2pSbVAyckpsWXZtd0phdGV1alNYTFZvQ21hY3lZT1J1SkNYUHg4N3Exa012bGFQdFNPL1I3bjZkZlp4Z0dzMmJ5WWVBN3ZleTU5MWV1V29PQWdPcHZZcTdxTm9jTitRZ0V3Uk1zZmpKNnpBUHRZN3RidTNyMUN0cTJiWWQzZS9lQjFXckYzTy9tSUNjbnAxeFBvYTAxYlJxRmMrZk9naVJKNU9YbDR1clZxNmduRkg0cVlzU3R6REl6TSszQ1h3OFBqM0xDTFNkUEhNZlljZVB4ZlBQbWVLNXhFeXhidWhoZHUzWURRUkM0ZHYzYXRZcEFEUTVUQnlSSlFTYWpZRFlERkVtVlRSNklIdHRISDMxMGROMjZkZmtBM0Yzd1ZibTk4WDg5MGE5dmI0azFGQUQrL3Zzb1VtLzloMEZ4QTZXN2xsWm9GVWxKK1FjVEJVV2c4SWlhNzZycDFMa0xPblh1VXU3NXlNaDYrT3RnNVRxbXJWdkhWSGpoS2hRS1RQaDhvdDF6QXorTUsvZStGaTFiNFpjTkc4czlIeEVaaWUvbUpUcjlib3Fpc1AvQTRRZDZIS3V5elR1dDEvMmFUbGU5N1VSTm1qUkZreVk4NWJaTUpzTW5Ea3k1enF4TDEyNjRkT2tTK3ZmanE5YkRQaDRoaGVRVk1lSldaamR1M0lDSGh3ZmF0MjhQQURoOStuUzVnc05idmQ2Vy91M3Q3WTFQeDR5VlVuNXhBMk5UbllJYVFiRGdPSllUakNSSmppUUpqaUJJYUxWYUxqYzNoL2ZZYkhPaXYvenlpM1hObWpVSFNKSjh4UVZkRlJ0QkVGQ3BWSGlqWjArc1dsVW1qbUV4VzlEMnBYYVM1Smxqd3JrbUcySmQ5dmdhUlZFb0tqSSswT0Y4eDl4b1pRRG80K05UWllVczIvTTlPVG41bnZiTllySDhyZGZyYmNOUXF3aHVCQTl1bkRSbFFKSWdDQklrU1lCV0tPRHU3c0VYRHh4bXJsaUx4WExRZGFyZEdkZ0FvRWYzTjNBNzlaYjBmSFNMRnRpemU3ZEVEYjU3OTU5SVNmbEhjdWUzYjl2S2g0TkNHZjErVGFWU3V3N0dYYTdOdzF5emlyYnQ1K2VIWW1OaHBhbVBxcVpJSG5hS3BqcmVsNXViKzA4bFlhaERLQ3FNVXBFa1NJSUVTWkpTVlJSQ0lvNEZ3R1ZrWkxpQXJZcW1VQ3JScDI5WnZxcEJnNFlZTnZ4ampCMHpHbS8zNm9rL2QrNUFjSEF3QUdENGlGSFl1ZU1QOUg2bkY3WnQyd3F5R21ZZnhUdTl5K3l0eUZoWTRXd3ArWkRXck1oWUNLcUNGcExBd0VCd0hJdk1qSFNuKzFhbmJzUWR3VUN0MXFCTzNZaUh1dTdWdForblRwNjQ2Z1RVeEVlWm1BdEI4SVVza2lnRE5aSUVvVktwQ0t2VlNyQXNTM0ljUjNFY0p3ZWdZRmwySDRCblhaY0ljUExVS2ZnSDNML3U1NFVMNTFHclZqRGMzTnl3Wjg5dWJOKzJGYk5tZjJ2M25nejliVHgvRjUzc04yN2NSSGFPaTBIWDBUTDBhZkR4OFVabzdmSnN0UStMZFpobjlmVkdtQk1HWGRFTUJnUDBlajJzVmlzS0gyQmorS05rSE1lZGI5ZXUzU1R3SWkyMjRpMUZBSW9KZ2hBMERnaUdJQWlXSkVtT29palFOTTNSTkEyRlFnRVpINTlLZVI4cEhMVmFyWHRrTXBrTDJBRElxaW4vVVZwU2lqR2pSL0hLNzFvdFBoczdydHdkWFM2WDM5VjNob2JXUm1hbUFSbjZOR2gxYmk3TkEyTWhqTVpDTUZhclUxQURnTERRVUJnTUQyN054SDFpR2FaU1VCTkRVajgvdjZmNkdCWVdGdjROSjdrMUFJd1lWWXF0SGhSRlFTNlhnNlpwS0pWS0tKVktxRlFxRUZxdGxyQllMQVRETUFUTHNoVEhjUlFBT2lzcjYyVXZMNitOTGxnRDB0UFRrYTdQRUJnNGFzNE1HZWtJRFBDLzZ5RjRqdU53L2NaTjVPUmtnN0d5S0MxOU9za25WU28xU0lxQ2o3Y1BRa05EN2xpb3VYbnpQMlJtWllHeE1qVzJaaXFWR3BSTWRrZFB6V1ZsZHVMRWlVK2pvNk92QWloR21jYUJrU0NJSXNHTE13djZCZ3hGVVp4Y0x1Y1VDZ1dVU2lXblZDcWhWcXRCdUxtNUVXYXpXUVEyMjNCVXliSnNNb0JhcnFVR1RwMUtCa0VRMEdoMVVGZnpIYjY0eUFoallRRUFybHI1MkZ6bXNzY3dERTBqU1hLa1RSaHFDMndsQUVvSmdyRFJFS1U0bXFZbFlGT3BWRkNyMVh3b1NwSWt4ekNNYlNqS0FXQVlodGxCVWRRSHJ1VUdtaldMUW5wNk9neUdUQlFXNUZYYnNMcE9wNE5NSmtOUVVDQUNBZ0pjQysyeXA5cEtTa3IrZ24wMTFDNFVkY0Fvb1llTnh6Q1NKRUZSRkNpS0tzdXhpVzBmd2xBcEM0QXRMQ3o4MDhQRHd3VnNnZ1VHQnRZSWZiZkxYT1l5M3E1Y3VYTEdBZFNzQUt3RVFkaTFlaEFPZld3aW9Jbi9Kc1h5cURoblpkUFR4bnA1ZWYwSjRMWnJ1VjNtTXBjOWlEQzBTWk1tMXdYd3NqbzhHRnRRQXdCYjdMSUZONHFpSUdOWmx1TTRyb3h0MHNaakE4QmV1M1p0TzBWUkExekw3aktYdWF5R3c5QjlqcDZhQTZpSnpMbWNHRjBLUEc4Y3d6QmdHQVpXcXhVV2l3VXloVUloa3JSSjAvOEMyTEVBR0hkMzkrM2UzdDR1WUhPWnkxeFdvM2I4K1BIa1NzSlFpZEZEOU5Ca01obmtjam1Fd2dIRXdvRldxd1ZwRzV2YWNMTko0YWl2cis5QnVGVGlYZVl5bDlWc0dIcXhSWXNXL3ptQW1nVVZNSG80NXRha0VGUW00eDgyRlFXQ0pFbU9aVmxDaUdGRnNRVEdiRFp2cG1tNm9XdjVYZWF5R3IyNG9kZnJrWkZoQU1Nd01CcWZuc21Ed3NMQ2ZiQnZ5cFVlSE1lSmpia2l3U1JZbHVVc0ZndHNkQS9BY1p3VWpzcHNQVGJCYStPSU1vVVhGZ0NUbHBhMkxTd3NiSXpyMUhPWnkyb08xSktUazhHQmtLWWgvSitpMzc5enh4OW5uSGhyVnZEVEJuYkVraVJKY3BSTUJscE9RNkdnb1ZBcW9WS3FvRktyb0ZGcm9OUHB5a0pSVzNCekRFZnIxcTE3bm1YWm5VL2FZaVltSmtLcFZEN1FiVnF0Vm93WU1RSitmbjV3ZDNkSFhGd2Npb3VMWFZmMlUyNTZ2UjRjQ1BnSEJEMTFZM0ZXcTNWdjdBZnZaOXNBbThYQmF5c2Zob29ENzdaaEtDV0RUQzZIWEM0SEtaUEpSRkRqYkR3MnpvYnRnd1hBRkJjWEo3bE92L3UzY2VQR0lTa3BDZXZYcjBkU1VoSjI3OTZOWWNPR3VSYm1LVGVESVJOYW5kdFQrZHZUMDlNT09RbEJMYWk0ZjAxb3hpVTVpaFNBVGNibjErUXlHZVEwWFJhS09oWVJDSUt3YS8xSVNFallQRzdjdU04QWhMaE93M3V6b3FJaXpKOC9INnRXclVMYnRyeVUyYUpGaTlDeFkwZk1tREZEVW1wMzJkTm5ETVBjazZkMjRmdzVMRjcwQTc3OWJsNk43dCtGQytleGRjdG1OR25TRkIwNmRwS2UvKzIzWDdGcDQ2OEFRYUJ0MjNiNElKWnZvS2hNWVBuTW1kTkltUHNkckl3VllhRmhxZGV1WDcvZzRLMUpZYWlJUDQ0TnVTUkZnaVFkdkRXaFNrclRkSm5IWmh1S2l1R29qZGZHakI4L3ZzUmlzZno2dEoxd2E5ZXVSWk1tVGFCU3FWQzNibDNNbTJkL0F1M1pzd2ZObWpXRFNxVkNkSFEwWnMrZWJRZFFQWHYyUlBQbXpRRUF5Y25KS0NrcGtVQU5BTnEwNFpXMmp4dzU0cnE2bjJJckxDeTRwOC9WYjlBUUU3Lzhxa2IzYmNIOFJDeGRzaGpYcmw1RlVWR1I5UHgvLzkzRXhnMGI4UDBQUzdCMDJRcWNPWk9NNDhlUENaL2hCWlpYckZ5TjkvdC9nQm5UcGtxcG1HbGZUOGFFTHliaXh4V3I0T1BydDJQdm50MFdaOTRhUU5oWFJFVndJMGxRdHVOVEFxako1SExJUmRvaXNUd3F2SW1qS0lwZ0dJWWpTUklNdzBoNU5nRFdXN2R1YmFwYnQrNklwK1ZrKyttbm54QWJHNHR2dnZrR25UdDN4bDkvL1lYaHc0ZERyVlpqd0lBQnVIcjFLcnAxNjRhaFE0ZGk3ZHExMHV1MnlrVTllL1pFYmk2dlAzcjc5bTNRTkcwbnFDR1h5K0h0N1kzVTFGVFgxZTJ5Y3BhZG5ZMnBYMDlHVnFZQkJFbGk4T0FoYU5ucUJhU21wbUxVaU9Hd1dNenc4UERFOGhWbDlQVGpQdnNVYVduOHdGQmVYaDdVR2czV3Jsc1BnRmVGU3BnN0Iva0YrZkR5OU1LWXNlTWtrUjRBV1AvTHo5aTRjWVAwZmdBWU1QQkQwRFNOMmJObTJPM2JQMmZPNFBubXphRldxMkcxV3VIcDRZa3pwMDhqT3JvRnpwdzVqWkVqUHdGZ0w3QnN5TWlBVXFWQ1dGZ2QwYk03VllHM1ppVUlNYjlHY0FEQkVRQkhrQ1JIa1NSSWt1S2tTRk1NUXdWdlRhRlFsZ0diVGE3Tk5oeTFteDJOaUlpNFlMVmFONUlrK2NiVGNGSjk4ODAzK09DREQ2UWNXR1JrSkc3Y3VJSEpreWRqd0lBQldMaHdJUm8wYUlCWnMyYnhkOC82OVpHU2tvSTFhOVpJMy9IMjIyVmlGY1hGeFU2TEZRcUZvcHdzbWN0Y0JnQS9yMXVEeG8wYm85LzdIK0RhdFd0WU1EOEJMVnU5Z09EZ1lQeXlZU011WDc2RXFWTW0yMzFtMmd6K2ZNelB6MFBjd0ZoSmY4TnNObVBxbEs4d1plcDBCQVlHWXNjZjIvSDlndm1ZOVBqTzdyUUFBQ0FBU1VSQlZHWFo1NXMwYlZxT2VmaE9Bc3VabVptWTl2VmtNQ3dEblpBbnRCVlkvdlBQblpMQWNrRkJBUlFLQmN4bU0rWis5KzJXWlVzWFp6bDRhcmJnSm9TaDRQaUhXRFN3U1ovSnlydzFXbWpXVmFtVUlPVnlPUnk4TmpnT3hndTlJZ3dBSmk4djc2a0pSOCtmUDQ4WFhuakI3cm1ZbUJqODk5OS9NQnFOT0gzNmREbXgydGF0VzFmNGZTcVZxcHhLRDhCclZUNE1mVXFYUGZvVzNhSWxkdis1Q3l0K1hBNVRhV21WQlZWWWxzV1hreWFpMnl1dm9VV0xsZ0I0YWNqVTFGdUlIenNHL2Z2MXhabzFxMkRJeUxEN1hMMTY5ZkhHLy9XOGkydmtIQ2FNSDR1QmNZUFFydDMvc3dmWUNnU1c4L1B6TVdya3gvQnc5empreEZ1ekxScEliQjYydVRXS3NnbERaUlJrTXJtTnQ2YUFTcVdHVEFRMnNXdFhERWNwaXVJRUhVSGIyVkhHeDhkbkQ4TXdod2lDYVAya24xUXFsY3JwQ1NQK1h5YVRsVk02cjB5VU5qZzRHS1dscGNqTHk0T0hod2NBd0dLeElEczdHN1ZxdVdqdlhPWUUyS0piSUhIK1FodzdmZ3dyVnl3SFRkUDRjdkxYZC96YzBpV0xvRlFxMGFmdmU5SnpGb3NGQVFFQmRtSHIvWmk3dXp0S1Mwc3grNXZ2NE9ibWhqTm5Uc05kT0s5RmdlV09uVHBMM3FKV3E0V2JteHNLOHZNeGVjcTBveSsvMU9aNkpkNmEyTHZHbG5WcENHRW9qMUdTUXlhWHlVREw1YUFWQ2lpVktxZzFhcEEwVFVNdTlINVVFSkxhRlJFQVdJdUtpbjUrR2s2cWhnMGJsa3ZxSHo1OEdJR0JnWEJ6YzhOenp6Mkg0OGVQMjczdStMZXRSVVZGUWFWUzRjQ0JNcUhrZ3djUGdpUkp0R3JWeW5VVnU2eWNUWnM2QmNlT0gwUDc5aDB3TG40Q2poNDlVdTVtNm1nSER4N0EvbjM3RUQvK2N6c1c0WWlJQ0JRVUZPQ3YvZnVrZk52bXBOL3RQbnY1OGlYODlsdlZnckxuR2plRzJXeUdRcUVBd3pBNGN2Z1FtalRsdFV3ckVsZ09DQXlFdTRjSDhuSnpkMWZrclFHRUhac0hRTmg0YkdWNU5jck9XMU5BcVZCQ3JWWkJxOUZDSmdKYlJVVUVtN1lQYVJLaGZmdjJ2eDQ1Y3VSRGdpQWVlMDBFbG1YeHh4OS9sSHUrYmR1MmlJK1BSOCtlUGZIc3M4K2ljK2ZPT0hqd0lPYk1tWU9KRTNteDRLRkRoMkxldkhrWU8zWXNQdmpnQXh3OWVoVGZmLys5WFZpNWJ0MDY1T2JtWXZEZ3dkQm9OSWlOamNYUW9VT2gwK2xBMHpUaTR1TFF2MzkvU1RIYlpTNnp0VDU5M3NQczJUT3diczFxc0N5TFVaOThDcElrN1lvSCtmbjVlS3ZuRzJqMi9QTVlPMjQ4RXVkOWg5TFNVZ3daL0tIMFBZa0xmb0JPcDhPMEdiUHczYmZmNEllRjMwT3RWbU9VZzQ1bzhxbFQyTGh4QTNyMCtMODc3bHRvYUJoNjlQZy9EUHB3QURod2FOT21yU1FlWHBIQXNrd213N2o0Q2VkZmU2WHIyUXE4TlF0QmlLQW1GQTBJOE40YVJZSWlLVTRtVlVMbFV0OGFyYUNoVkNtaEZpWVBpSjQ5ZXlJL1B4K0ZoWVVvS2lwQ2NYRXhTa3BLWURLWkNKUEpCQnM5QkpMak9Ca0FPUUJsVVZIUkFKVks5ZlhqZk5Ja0ppWlcyQng3L2ZwMWhJV0ZZZG15WlpneFl3WnUzTGlCc0xBd0RCOCtIRU9HREpIZXQyUEhEb3dhTlFwWHJseEJWRlFVV3Jac2lRMGJOa2k2b2oxNzlzU05HemR3NHNRSktaODJZc1FJckYyN0ZpUkpvbWZQbnBnM2I5NERuNEJ3MmFObCsvZnZSM2hrZzZmaXR4b01obStmajJwOEJEejl0NmhyWUFSUEJWNUNFRVFwRDNDRWxWZWhvamlaVENZcVVIRzJUQjRhclJZNm5RNmVucDd3OGZGRlVGQVF3c0xDUVBUdTNSdDVlWGtvS0NoQVVWRVJpb3FLVUZKU2d0TFNVcGhNSnNKc05zTnF0WklzeXhJMmVnajA0c1dMdldKalkvOEFFUDYwbm93cEtTa29MaTVHeTVZdHBlY21UWnFFYmR1MjRkaXhZdy9VNjd4eDh6L2s1T1NBWVJpVWxqeWRJMXBLbFFvVVJjSEwweHRoWWJVbDhsUm54bkdjc0diWnNGcHJiczJVS2hWa01obTh2YndSRmhiNjFBTWJ4M0hYUGhzemV1TGFOYXVMQUpTZ1ROZkFDRjVhcndTQVdRQTJScERXWTRWd2sxTW9GZnhjcUVvRnRVWURuVllMTjNkM2VIbDV3OS9mRDhIQklRaVBpSUJNcFZLaHBLUUVORTNEYkRaRExwZkRZckU0VmtodFExSUdBRE53NE1DQzNyMTcvNlJVS2ljOWpnczhiTmd3SkNZbTNzOEJ3cFVyVjlDM2IxK3NYcjBhVFpzMlJVcEtDdWJQbjQvNGVON3R2cE5La3FQcDlYcjQrOS9kNkxQSlpNYVpNMmRBeVdUUXVibTc1UGVLak1qTnkwWFd5VXcwYmRJVU5DMTNldXhPbkRnSmtxS2cxZFg4bWhVVkdaR2RrNFBNckV4RUM4M2FGZG50Sjd5Zk1UYzNkL1BhTmF0Tk5pR29XUVF5QUJZT1lBZ0hiUVB4UHh6SGdXTTVzQ3dMbG1WNUpnK0J6Y05xdGNCaXNjQmlOc05zTXZQQXBsUXFVVkpTWXBkcms4bGtzRnF0b0NnS0RNT0E0emlKTnB6ak9BWUFzM256NXAvZmZQUE45d0RVZmR3V09DRWhBUWtKQ2ZmMUhUMTY5RUI4ZkR4R2pCaUJ0TFEwQkFjSDQ5TlBQOFhISDM4c1hVQTFiZW42ZEZBeW1Vc3dXVENOUmd1TlJvc01mUnJTMHRNUUZscmVTN3ArNHlaSWlucGdhMmE3VHpkdi9vZlFTbVQ0YWdVSFA4bmUydldsUzVlY2RBQTFtOXhhV1l0SEdhRWtCYmxNMUEzbHE1Nml0NmJWYXVIdTdnNVBUeS80K2ZraE9EZ1lkY1BEMGFqUnN5QTFHZzJVU2lVVUNnVm9tb1p0TVVFb0lvQ2lLTTZtbjAxcy9iRDI2dFVydDZTa1pPWFRmQ0hGeDhmait2WHJNSmxNdUhyMUtzYU1HVk5wQ0ZUZGxwMlYvZFFPVDFkbVdwMGJzckt5bmI2V2s1UHpVTlpNcTNORFZuYldVM3RNc3JPemt4WXZXbGdLKzRLQkNHNFNrNGR0aXdjZmlwS2daQlJIVVE3TnVNS1VnVnF0a2tETzI4c2JNcGtNcEZhcmhWcXRobEtweEwyMGZxeGJ0MjR0eDNFdWh0MkhjZ2U4OStIcHA4RnpZMW5HNldzUGE4MDBHaTBZSy9PVW5xdmN4VzltenpyaEJOVEVmRm81d1JaZTZaMTBtQWZsUjZma0FxaXBWRXBvTkJxNHVibkJ3OU1Udm42K0FBQ1pUcWVUS3FKQ3djQXUxeWFUeVRpcjFVb3dET08wWVRjMk5qYi9yYmZlV3FIUmFLWS80UWNHZXIwZUJvTUJWb2FCc2JCNjJFMjFXaDFrY2huOGZIM3ZXdHFQSUlDU0VoZVhXMFZXVWdIUDNjTXNydHpyOFNLU00wSE1Ud2F1NU4zYmhpTTh3QTJKQWhmbFd5Mi9veUEvSHpldVgwVlJrYkZTSUErckV3NDNkM2RrWkdRa3JmcHBSWVc1TlRocHlDVkprdVA3MW1TY1RFYnhvQ2FUZzZiTGRBNTRqUU1kNzYxNSswQ2g0THNMWkI0ZUhpZ29LSURSYUpTcW9XYXpXUUkzcTlVS21Vd0dobUhFcEozVTB5YmsycXh2dmZYV21pMWJ0cnhCRUVTTEp4WFVrcE9UQVlLRVJxdmoyVTJyVWR1NHFNaUlkSDBHMHRQVHExMEpmdGZPSFZpK2JDa01oZ3dFQlFWaDVhcTF1SHo1RW1MNzk1UGVNelorQXJwMjdlWkN3a2ZaRXBPQnEzbjMvdmtyZVNEbUo0TmIwckZhZHVmNnRTc29MaTY2NDNsOTQvcFZQTnU0NllsM2VyMlo3QVRVbkhwcmtKaHliWWZjNVpETDVKRFRmRE91UXFHQVVxV0NSc05QTTNoNjhYazIwV1NlbnA3SXk4dERZV0doYlE4YmFKcm1xd3dPWHBzTjY0ZWsxcng5KzNaelFVSEJqKzd1N2s4a3NPbjFlb0FnNGVkZk0yTEpZbkxab0U5RGVucDZ0WWt5cDZXbFljYjBxZmh5OHRlSWptNkJnZ0tlR2ljaUloSzdkdThEQUF5TWZiL0cxbTNaMGlWNHZYc1BPellUY2IvbXp2a0dLU24vZ0tacHRPL1FDWU0vR2lJTlg2ZW1waUpoN2h5a25FMkJRcUZBeDQ2ZDhHSGM0SExEMmRWcGQ5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBemtIaWZrRE5CdHlxeSs0RWFyYmc5dC9ObTF1dlhMbHN2WU8zeHBUUHJWR1FVUlFualU3SjVUd2RPRTJYZVdzNkxkdzlQT0R0N1dNM0FrbjYrUGpBdzhNRE9wME9hclVhS3BVS0NvVkN5clU1eTdjNXk3VjVlSGhzWmxsMjI1TUliQVpESmpSYVhjM25ZSFJ1TUJnTTFmWjlGLys5QUI4Zkg3UnVIUU9hcGlXZU9JSWdvRkR3ZDcyN2JVbTVHL3R4K1ZMazVKUlA0RSthT0FHMWdvUHgyKzlic0dqeE1odzljaGhKU1pzQThEMTVZOGVNUnIzNkRiRHA5eTFJU0ZpQS9mdjI0cmVOTmNlOVVOVnRKaTVZaU0xYnQ2Ti83QURNbmprZEczL2Q0UElrNzJCV3EzVlhtNWdYTGpqeDFDcjAxa2c3YjYwTTFPVENQS2hDcVlSS3hjdnN1YnU1dzh2VEMvNDIzaG9Ba0g1K2Z2RHk4b0tibXh1MFdpM0U5Zyt4U21vRGJKd05oYmpkaUJYNGFYeUx3V0Q0OFlrOE9JejFnU1NiTlJvdHJGYnJmWC9QNmRQSjZQNWFOOHlhT1IxNnZSN2RYK3VHN3E5MXc0b2ZsMWY1TzQ0ZU9Zdys3NzZOOWkrM1JXei9mamgzOXF6ZDYvdjM3VVcvOTNxamErY082UDkrWHh3OWNsaDZiZGpRajlEOU5UNjBIZm54Y0hSL3JSdUdmalJJQXBHMmJkdmh2WDd2UTZGUXdNL2ZIODJqbzNIcDRrVUFmTVhTMDhzTHZmdjBBVTNUQ0E0SlFldVlOdmozMzVxclQ5M05ObFVxRlZxM2pzRzQrQWxZdkdpaEhmSGlrMkJGUlVWSStuMFR4bzRaWFQwaDYvWHJPMkUvRTJvSGJCekhXVG1PWXppT1kxbVc1UWhBOHRaS1NvcTVUSU1CcWJkdW9hQ2dvSXk5UTZtQ1JxT0dRcUhBZ3ZtSk9IandMNmpVYW50Z0N3b0tnbytQRHp3OVBhSFQ2ZURZL2xGSmxiU2MxeFlZR0hqWVlyRXNlZEtBcmJvS0JWWGFsdEY0MzkvUnRHa1VOaVZ0eGNjalJxRldyV0JzU3RxS1RVbGIwZS85L2xYNi9OVXJWL0Q1aEhnTUhqSVVXN2Z2eEp0djljS29rY01saXB1Yk4yOWd5dVF2OGRsbjhkaXliUWRlZmZWMWpCOC9UaEtsU1VoY2dFMUpXd0VBYytiT3c2YWtyVWhjc0pBLzRVZ1N2ZnYwaFllSHAzRGlYOFBoUTRmUXNpVlBBdURqNDRPRXhBVlFLbFVTRUo1T1RrYmp4azFxYk0zdlpadlJMVnJDYkxGSWdQdzRtZU1RdmZoM1ZsWVdCc2IyeDVVcmw2dmxSbEphV3JwbS9Qanh0eHhBemVUb3JmRmpVenllTUF3RGtxVEFzZ3dzRmdzL1NSQWVqc3lzVExBY0I2VkNDWlhRM25IczJGRW9sVXE0dWJtWDJ6YXBVcWtRRUJBQWIyOXZ1THU3dzdiOW96S3Z6VmxmRzBFUWxuUG56cTBFY052bGhEKyt0bVZMRXRxKzFBNnRXOGRBb1ZDZ2M1ZXVhTkN3SVhidTNBRUE4UGIyd2JMbEsvRk1vMFlnU1JLdnZ2WTZMR1l6YnQzNnI4cmJPSGYyTERxMmI0ZCtmWHVqUWNPR2VMSHRTMDdmdC9ENytWQ3AxZWphN1pVSDl2dXJzazJDSU9EbDZRVmprZkhST1hBRW9QMGdDbTZqL3dkQ0tZUHF0ZnB3RzljR2hKdkM3bTJqUjQzQTZlUlRBSGpHM084WHpBY0FlSGg0NEtmVmE5SHYvUStxWTI5dUh6dDI3SzhLUERYYjNqVVc0SE5yRkVWeEhNZHhGRVdCWlZsT29WQUl3KzBxZUh0NXdXZ3NoRW9vR09UbDVjRnNNdUhGRjErRVhGNSt1b1FFZ0tDZ0lQajYrc0xUMHhOdWJtN1FhRFJRcTlWU0hzWVpBMGhGdWJhb3FLaXJ4Y1hGUHp6cEYzL1h6aDFRV1Boa0N0cnE5WG9FQnRwMzVkZXVIUWE5UGgwQW9OVnFjZkxrQ2NSOUdJdmU3L1RDKysvMWNlb0pWR2FObm4wV08vL2NpNS9YYjBSNmVqcVdMUzN2Nks5YzhTUCsvdnNvcGs2ZERwbE05a0IrZTFXM3lYRWNjbkp6b0gyRWVnaVZIU05BcU9SZ2Mwcmd2ZlExcU45b2lOSS9yOEw5VTN2cXhDRkRoMlBxMTFPUW1EQVAyN2R0UmQvMytBcTVlRzFYaCtYbDVmMlNtSmlZNitDcG1aem4xaml1VE1vWWtNa29LSlJLbU0xbVVDU1BOY1hGeFNBSVFuQzZGRGg4NkJBR0RJaUR6czE1bzdVTTRLbC9Bd0lDa0pPVFUySHJoOFZpRVdheXJKekE5c0d4TEF1Q0lGaU80d2piWEZ1Yk5tMVdIajkrdkIxSmt1MWMvcy9qWi83Ky90Q25wOXZmZm0rbklpcUtiMFU1OE5kK3JGNzFFK1o4TncvQklieG8yWXN4THpqMWFoekJ6bFJhaXUzYnQ2RkxsNjVRS0pVSURBeEUrL1lkY1BEZ0FidjNiVmovQzNidDNJRzVDZlBoNXU3K1FINzMzV3p6K1BGam9PVnkxS3RmLzRFZkgwWHJFTGpIdnlqOWJmazNFN21mN0lTOG5qZEt0bDJHOVhvdWRNTmJJbmZrRHBpUHAwSDdnWDBMVVhoRUJEcDI2b3lWSzVaajVxeHY0T1oyNzFNWWNya2M3ZHJaWCtZN2R1dzRNSHIwNk9OVjhOWVlBVDlZcTlYS0NaRWdLSm1NVXlxVUlBa0NOMjVjbDRZSGVEWVBEVTZmVHNaTDdWNUd2UVlOOE8vRkN4VURHd0NFaElRZ0t5dkxhZXVIQ0d3aXVERU1JejJFR1ZJV0FDSDJ0U1VuSjVzTkJzT1NnSUNBcHhMWWZ0MnducS95Y1J6YXZmei84SDcvV0FCOG04TlhrNzVBWVdFaG1rWkY0ZERCQTFJdTZrR2JiWkdDWTFsWXJWWnB3cVRiSzY5aXlPQTRkT2pVQ2MyYVBZKy8vdHFQYzJkVDhOblljUUI0Z1JHQ0FFaUtRbjUrSHJadTJTSjhqLzFzYkdCUUVJNGVPWUs2ZGNPUmw1c0xYejgvMEFvRmZscTVBdm41ZVhpM2QxOFVGUmx4NE1CZmFOS2tMSisxWlhNU052MjJFWE1UNWo4d25ycXFidE5rTXVGMDhpbk1tREVOY1lNK2VpaVU3cVpEdDJEb3RycjhNYjJlQzdxSlArVFArY0Y2TXcrcVYrdkJjamtiY0RndU8zZjhnWDE3OTJESzE5UHd6ZXhaK0hyYWROU3JkMjhBYmJGWXNIT252WmI2dFd2WHRoWVVGRGhPRjRnZVd6bUdYSXFpUUZJVXdIRlMzNnhjTGtkQVlDQTBHZzEwV2gzKytlY00vUDBEUU5NS1hMMXlCWVVGaGJqNDd3WGs1R1NESkVuSTVYTDBldnVkOHNBbWhxUzV1Ym5JejgrSDBXaEVjWEV4VENhVEhialplbTBNdzNBY3gwRjRTTk1JQUN5QmdZRUhUQ2JUZkpxbWh6eE5vSlo4NmhTMmJFbkN3aCtXZ0tJb2ZESnFCRUpEdzlEdTVmK0h1WE8rUWZzT0hkSHp6YmR3N08rak9PVGdwVHdvYzJ6UW5URjlLbVpNbjRvT0hUdmg4eThtSVRLeUhpWitPUm5mTDBpRVBqMGR0VU5ETVhQMnQ1S2FVWmV1M1hEMmJBcGkrNzhIaXBMaDllNDlFQmxaRHptNU9YYmJHVFZxTkdiUG1vbmx5NWFnZHUzYVdMSnNCV2lheG95WnM1R1lNQmMvcjFzTHVWeU90aSsxay9JNkRNTmcxa3crREh5bmx6MzMvc3BWYXhBUVVQMjloRlhkNXJBaEg0RWdlSUxGVDBhUGVhQjliRld4a3UyWDRmYkovMEQ1cUpIVmV5TTBiejREOTg5aWtEL2pvTjM3VWxKUzhPMmN1ZkR6OTRlYnV6dE9uamgrejhCV2JoOUtTbjRjTjI3Y0RRRzh6STRGQTFRd1pRQ0FzMWdzMEdpMW5OeEd3MEF1cDVHV25nYVpUSVk2ZGVyQ3o4OFAwMmZPUm9QNkRlRGo2NHVGMzgrSFZxdXpBN1Z5d09idjc0L3M3R3prNWVWSndDYU9XWWtlbTQzWDVoaVMyazBqRUFSaDNyTm56L0pPblRyOWp5Q0lxS2NGMkk0ZE80b09IVHBKellLdnZQSXFqaDM3RysxZS9uOUlTZmtIRXdWRm9QQ0l5QnJmbDA2ZHU2QlQ1eTdsbm8rTXJJZS9EbGF1WTlxNmRVeUZGNjVDb2NDRXp5ZmFQVGZ3dzdoeTcydlJzaFYrMmJDeDNQTVJrWkg0YnA1enlpaUtvckQvd09FSGVzeXFzczA3cmRmOW1rNVhEWDJTREllQ21ZZWtQNDNMVHdQTFQ1ZDcyeWMyckxsTm0wYWhhZFBxdVR3NWpqdnp4eDkvT0JZTWJITnJaaW0zUmhDc1FQbk5XYTFXRGdDVVNpV24wK21rV2RDaW9tSmN1bmdSL3Y0QjZOQ3hFOC9rSVV3WStQaFdQaHBXTGp0YXExYXRjcmsyMFdOejhOcWtjSlJsV1Z2VmVJYmpPQktBdFV1WEx2cnM3T3dmdkx5OEZqNU5YcHR0ejZ2QVl5Y2xuR3V5SWRabGo2OVJGSVdpSXVNalFXamc3ZTE5VHltU3RMUzBqV3ZYcmpVNkFUV1RIYWp4bkdzc1FZQWpTWktuOXBielBXcmkySlNDcHVIdDVZWDY5ZXNMdEVTKzhQRHdnSStQajkxa3pxREJ6Z1BDY3Z3Njd1N3VjTmJiVmtIakxpZlNHMVhVdE92dDdiM2RZckVzZmxwTzBPYk5XMkRYenAwb0tTbUJ4V0xCdHExYjBFTG8wV3JhTkFyYnQvRW56T1ZMMWRQL3BGS3BYYWh3bDJ2ek1OZXNvbTM3K2ZtaDJGaHhsWjBMOTdoL2o2b2F2a00wdGRvK3QxaGFXcnA2NU1pUkYyMUNVSk9EdDJaWE1DQUlnaU9FWm44WnJ6akZ5ZVV5WVJhVWxtWkIrU0YzZ1NYWDJ4disvZ0dTZHVsZGVXd0FYMGdRdlRaYnFuQkhyODIyaUNCNmJTeGZCbU9FU2lsSkVBUjE2TkNoWlczYnRuMmVJSWhtVDlLRk0rQ0RmaUFFN2pWZlh6OGtKQzdBODgyYm8xUG5MaGowSVY4d2FQUGlTMmpYN21VQXdQQVJvL0RseE0veDY0YjFDSStJNEJPbVQ5Q2QvbEd5SW1OaGhhMEw1RU5hc3lKaklhZ0tXa2dDQXdPUm5wNk96SXgwcUFXaUJUc2JHZ1V1TWZtZVowYTVjQTlnYVBWbGhPclVqWkFHNFRtT083MW56NTY5VHZKcXR1MGRqa1VEZm5SS0hKdVN5eUNYQzU0YkxZNU5sUTI1ZTNsNndjL1hyOG95bFU1WFdTNlhJemc0Mks2SVlFdHBKSWFpanUwZlRnb0pWZ0NXZHUzYXBXWm1aaTcwOGZGWjlEaGVKRm9uK1k5dGYreXE4UDI5M242blhESVRBUEx5Y2pGejlyZHdjM1BEbmoyN1VWSlNVcVZ0M1Nsc3lNN0pjUUdiZ3htTmhmRHg5WEg2bW8rUE43S3pIL3lhR1kyRjVRZ0JiSzFaczJZd0dBelE2L1VvS3N5Mzc1UFVBaGhiRzBEdCs5aURiT0J5ZHZWZEYxb050Rm9OYnQ2OHVmSEhIMzhzcUNnRWhZT3lPNStWRVpUdk9BNGN5M0ljeTRKbEdUQ01sWDlZTGJCYXpMQ1lTMkV4bDhKVVdneFRhUkZ1WHI5eTc4QUdBQUVCQWNqTnpiWHoycHpsMm13OU5vZENndWkxV1FpQ0lIMTlmWGVXbHBiT1ZTZ1VIejl1RjRtc211N3dwU1dsR0RONkZLLzhydFZLN1JPMmQzUm5YZFNWV1dob2JXUm1HcENoVDROVzUrYlNQREFXd21nc0JHTzFJclMyY3hBSUN3MkZ3ZkRnMWt6Y0o1WmhFQlphT1RENStmblowZTg4NnBhZm43L2twWmRldWxTUnQwWVFoQWhzREVFUWpNamNJYXBPMFRRTmxVb2xlR2RsZE45ZVhsN3c5UzFUbldyUW9BRWFObXhZOVd1MnNoZHIxNjVkWVYrYm85ZkdzaXpoVUVnb1Z5VmR0V3JWMHY3OSt6Y2lTYkw5NDNTeCtQbjVJVjJmY2Q4WFFGU3pabGk0cU9KUjJxSWlJd0lEN2s3TWhTQUlORy9lSE5kdjNFUk9UamJ5Y25KUVd2cDBraytxVkdxUUZBVWZieCtFaG9aVSt0NFcwZEc0ZWZNL1pHWmwxZWlhcVZScVVESVp2TDI5N3docWo1dFpyZFo5RXlkT1BPQUFhcVVpc0FtZ1pwOVhFN1FNUkNWM3VWek95ZVZseEpHMkFPZmg0UUZ2YjI4RUJBU2dkdTI3V3p2aVRvSWp0Mjdkd3ZuejUzSHQyaldrcHFiQ1lEQWdKeWRIQWp4SExWSUI5QWlXWlFtV1pTbU80eWp3V3FRMHgzSEtHemR1dEFvTkRaMEw0TEZTSHpsMUtoa0VRVUNqMVVGZHpYZjQ0aUlqaklVRkFMaHFKNXAwbWN0cXlOSVBIVG8wT3lZbTVwWUFaQ1hnTlVLTFlLOFBhaXVseDloNmF3cUZncFAwUVRXODBMR0hod2U4dkd6RVdlcld4VFBQUElPUWtKQzdpN0x1OUlhUWtCQkpVTmt4MStiWStpSEtZbkc4MlU0a1dIbm5naUREd3NLT0Z4UVVKT3AwdXFtUDAxRnMxaXdLNmVucE1CZ3lVVmlRVnkwc0hBRGZ2eVNUeVJBVUZJaUFnQURYNWVLeXg4SnUzNzY5S2lZbUpsVUlNOFhRczlSSkNHb1Z2RFZwMEYwaWpSUkNVVnVhYjFHL1FBeEZhOVdxZGRlZ1ZpVmc0L000b1U1emJVNTYyc1JDZ21Odm16aHVaU0VJZ25KemMvdlpaRExWcFdsNndPTjBNQU1EQTZ1TjNkWmxMbnRjeldnMHJnNE9EajRGKzlZT3h4RFVZaE9Dc3M1QzBJcEFqVmQxOTBGUVVCQkNRMFB2YVIrcnBCT24wK2tRRWhKaVIyOWt5N2dyRHFrSy9XMTJ2VzJDMXliMXRva0xzV3ZYcmlVc3krNXhuU1l1YzlsamxWZmJ2M0Rod2oxd1hnR1ZQRFk0eklNSzVKR2NMYWpSQXNXM0dJN3FkS0lvQzU5WEN3a0p1ZWVKRE5uTm16ZXJqb0k4VlpIVDdubnhPZkYxNFNFbThGaWhBNThRd2UyVlYxNUpPM0Rnd1BjaElTR2hBTUpkcDR6TFhQWm9HOGR4MTA2Y09KSDA2YWVmRmpvSlFjdUJtaUNBYkNlblo0c2ZGZUVJTCtSQ2dtVlozQTArMlFIYjNiaDZ2cjYrVGljUmJBU1dZVU1mVHBoTUpoQUVBVUc2VDJvQklmaGZSTFpwMCtaRVRrNU9ncWVuNSt5cWhzVXVjNW5MSG82emR1M2F0VFZ2dnZsbXFvTzM1aXdFdGRxMmRvamhwOER2S0JVTXRGcXRYZWdwVmo4akl5UFJ1SEZqcU5YM1BpRnlWMkNpVnFzUkdocGFib2EwZ3ZsUmptVlpRaXdrY0J6SENnVUYyNmtFMHN2TGEzTnhjWEdRU3FVYTR6cDNYT2F5UjlPeXM3TVhoNGVIbjdYeDFFcHRId1JCbUd4QnpURUVGU1FHeXVYVmJNSE5WOURXRFEwTnZTOVF1MnRnQS9nRWVrVjhiYzdHck1UR1hRSGNPR0VxUWN5M2tRRElWcTFhTFRseDRvUy9YQzd2NXpxRlhQWVVoM3JRNi9YSXlEQ0FZUmdZalk4R1EzTnBhZW5QNzc3N3JtMi9XcmtRbE9NNENkUTRqbU1GUmx5T1pWbU9ZUmc3dmo4eHNoTWZZcFZVb1ZCQXJWWkRMcGZqMHFWTER4YllBQ0E4UE56cHFKV1RhUVJPNkdjVFI2M0VXVkxiRmhEaW4zLytJZmZzMmJPNGZmdjJmaFJGZFhHZDRpNTdHa0V0T1RrWkhBaHBHc0wvRWRndmk4WHk1MDhyVit6S3ljbXhPQUUxMndrRGZteUtJRmdDWVBsMEZLL2VMakIzY0VvbEw4U2kwV2o1bmpWM0QzaDVlOEhmUHdDMWdvTVJYamRjMHRHNFg3dW5iNkFvQ25YcjFrVndjREQ4L2YzaDVlVmxWeWxWS3BXMitUZE9aQUt4VmJZUzNGVXIrQllRYytmT25WTXZYYnEwa09PNFk0L3pDYnBwMHlZb2xjcUtFeFZXSzBhTUdBRS9Qeis0dTdzakxpNU9VbmR5MmROcmVyMGVIQWo0QndROU1tTnhMTXVlUEhUd1lOTEVMeVlVT09UVVNvUkhxUjJvU1hSRUpGZStDbHArdWtEbnBvT0hoNmRFUlZRN05MUmFRTzJlZ1EzZ0ZXM0N3c0lRRkJRRVIyMVNKeXBYb3BxelhRdUlBN2labm5ubW1aUzB0TFFGSE1kZGVWSlA0SEhqeGlFcEtRbnIxNjlIVWxJU2R1L2VqV0hEaHJtdTdLZmNESVpNYUhWdWo4eitjQngzOWR5NWMrdjc5bmtud3dIVWJDdWdKanRRRTNyV1NGS2FCNFZjSnVma3RDaDBySUJLWlQ5bDRPUGpBLytBQUlTRTFMNHY3WVZxQXpZQUNBNE9SbWhvS0FJREF5WCt0a3JBRGJiOWJRSi9tMFFsTGp4TXdjSEJCM0p5Y2hJQVpENXBKMjlSVVJIbXo1K1AyYk5ubzIzYnRtamJ0aTBXTFZxRUZTdFdJQ3NyeTNWMVA4WEdNTXc5ZVdvWHpwL0RxQkhEcTN0M3NtN2V2TG02YStjTzEyRS8yRzRIYkFSQldEaU9zNGlDeHh6SENSeHJGRWVRSklxS2pNak56VUdtd1FBQ3ZOaTBScTJHMldUQ2diLyt3cFl0bS9IbnJwM3c5dmF1OXNiMysvYjc2dFdyaDlxMWEwdmc1dUhoWVNmaFp3TnVZa2dxOXNPeHprSlNBQ1lmSDU5dCtmbjUzd2tMV0tQV3FsVXJUSmt5QlMrLy9ETFVhalVpSWlMd3h4OS9ZTzdjdVFnT0RvYTd1enNHREJnZ3FTMk5HREVDblR0M3R2dU83dDI3WTlDZ1FVNi92MmZQbm1qZXZEa0FJRGs1R1NVbEpXamJ0cTMwZXBzMmJRQUFSNDRjY1YzZFQ3RVZGaGJjMCtmcU4yaUlpVjkrVloyN1VxclhweTl2MDdyVmVaUzFkWlRhaEo2OHQyYlgya0V5SkVteEhNZXg0RGpJWkJUTUpoTlVLalVYRWxJYi9nRUJTRTlQaDFxdGdWcWpRVXJLUDNqbDFWY3hldlFZUkVSRTR2Q2hROVcrbnZmZE8wWVFCQ0lpSXB3cVdqbXJqb290SUFBSUFFNkxDUnpIa1I0ZUh1dU5ScU5HbzlIRTEvUkpOWDM2ZEd6ZXZCa3hNVEVZTkdnUWV2VG9nZTdkdStQQ2hRczRmLzQ4MnJWcmg2NWR1K0tOTjk2NDYrL3UyYk1uY25OekFRQzNiOThHVGROMm5GeHl1UnplM3Q1SVRVMTFYZDB1SzJmWjJkbVkrdlZrWkdVYVFKQWtCZzhlZ3BhdFhrQnFhaXBHalJnT2k4VU1EdzlQTEYveFUxbTY0N05Qa1piR2E1Ym41ZVZCcmRGZzdicjFBSUNyVjY4aVllNGM1QmZrdzh2VEMyUEdqcE5FZWdCZytiS2xpNy80ZlB3cEIxQXJ0UUUzdmxnQVdJUnJsaVVJc0FSSmNBUkhnT000VGlhVGdXVlp6dDNESFFxRkFnUkJRSitlRHJWS0RZcWlvRmFyVWI5QlF3VFZxb1dpSWlNT0hUejRNcm5Fd0FBQUlBQkpSRUZVNkFFYndJOWNoWWVIbHlPakZNdThUZ2JrYmZ2YklJU2s0bVNDQ0c2RVZxdGRXVnhjckZLcFZDTnI4dVRwMGFPSHBJMzR4aHR2WU5teVpaZzZkU3AwT2gxYXRteUpaNTk5RnVmT25ic25ZSHY3N2JlbGZ4Y1hGenN0TENnVUNwaE1KdGRWN0xKeTl2TzZOV2pjdURINnZmOEJybDI3aGdYekU5Q3kxUXNJRGc3R0x4czI0dkxsUzVnNlpiTGRaNmJObUFVQXlNL1BROXpBV0l3Y05Sb0FZRGFiTVhYS1Y1Z3lkVG9DQXdPeDQ0L3QrSDdCZkV3U0JJYnk4L04rK09MejhZZWRoSjRsZDhpcmNTekRpRlJsa010cFVad0ZSVVZGTUFwc3hrb1ZINzFwdEZyNCt2cGkrN2F0eU0vUFIxNWUzcU1KYkFDdmNHVkxJVzdidEd2anNkbjJ0VW5neHBhcDZqSUMwRW5nOXRaYmJ5MVp2MzQ5clZRcWEwekd6M2I2UXFGUVNQbEQwV2lhcmhiZ1VhbFVNSnZONVo0M21Vd1BSWi9TWlkrK1JiZG9pWVM1Y3dBUWFOR2lKV1ovTTZkS24yTlpGbDlPbW9odXI3eUdGaTFhQWdDdVg3K0cxTlJiaUIvTDk4S3pIQXVOb0YxUVdGaTQ3SjFlYisxSCtha0MreERVUmtKUEZEdG1HSWFUeStVYzc1eUFvMm1lTERYVFlJQkdvMFYwZEF2OC9mZFJ1THQ3UUtWVWdtVlpyUGh4T1hyMWVoc05uM2tHNDhlTmZYU0JEUURDd3NMc3RCRWNweEZzaUNoaDQ2MXhBdmlKa3drUW12MUFFQVN4WmNzV1l0cTBhVXZpNCtObENvVWlyaVpPSHBrVEh2cUsxS1NjUFcreFdLcTBuZURnWUpTV2xpSXZMdzhlSGg3U1o3T3pzNnZNNWU2eXB3ellvbHNnY2Y1Q0hEdCtEQ3RYTEFkTjAvaHk4dGQzL056U0pZdWdWQ3JScCs5N2R1ZHBRRUNBWGRnS0FFYWpjY1dFK0hGN1UxTCtjZXhUY3dRMU96WmNvZG1lb3hVS2pwYkxZYlpZUUpFa2FJVUNGRVhCMTljWGRlclVoYnU3QndpQ1FHQlFJSFJhSFJpckZSTStuNGp3OEhCY3ZQaXZkQzA4c3NBR0FQWHIxeStuUmVvWWpqcDRiU0s5RVd4eWJveVFneU1JZ2lDKyt1cXJQRjlmM3lVREJ3NGtGUXJGd0lkNW90RTBYYzUxdm5UcFVwVTRvNktpb3FCU3FYRGd3QUc4K3VxckFJQ0RCdytDSkVtMGF0WEtkUlc3ckp4Tm16b0YwUzFhb24zN0RtZ1IzUUp2OXV3QmxtVXI3ZmM2ZVBBQTl1L2JoNFdMbHRqZGlDTWlJbEJRVUlDLzl1L0RpMjFmd3RXclYzSHE1SW1menA0OXUyZmp4ZzBsTnA1YWljUERSQkNFV2NpcDJiSGhNaXpMeVNnWlpESTVTa3BLT0hjdmJ5aVZTdWgwYmxBbytQK1hta3I1SnR4YXdRZ0xEVU5BWUNBVU5NM3Y2NEVEYU5LMDZhTVBiQVJCb0g3OStoS3dPWHBzRE1QWWVteTI0QVpoRkFOQ3ZzM3VPNGNORzVaTjAvU1NmdjM2NFdHQ1c4dVdMVEY3OW13c1c3WU16WnMzeDZKRmk1Q2VubDdoKzlldFc0ZmMzRndNSGp3WUdvMEdzYkd4R0RwMEtIUTZIV2lhUmx4Y0hQcjM3dzh2THkvWFZleXljdGFuejN1WVBYc0cxcTFaRFpabE1lcVRUMEdTcEYzeElEOC9IMi8xZkFQTm5uOGVZOGVOUitLODcxQmFXb29oZ3orVXZpZHh3US9RNlhTWU5tTVd2dnYyRy95dzhIdlFOUDJUaDZmbm54dlcvMUlFKzBLQmJRT3V5WEVPVk9wWG95Z1FESU9Ta21LVWxwWndhclVhbmw1ZVVLbFVxRmUvUG03ZXVJR2pSdzlEcDlPaDE5dnZJaVE0QlBYcTEwZjgrTTh4ZWZJa1dNd1doSVNFWU16WStFY2YyTVJjVXIxNjlld3FwTGE1TmlHdlZxNllBUHRLcVMyNEVRUkJFSEZ4Y1prbWsyblJ3SUVEV2FWU0dmY3dUclRYWDM4ZEkwZU94T2pSbzhHeUxQcjE2NGNCQXdhZ3ROUjVaOHFHRFJ0dzQ4WU5EQjQ4R0FBd2UvWnNXSzFXZE8vZUhTUkpvbWZQbnBnN2Q2N3JDbmFaVXd1cFhSdHo1ODEzbXRiNFpjTkc1emZUWDM2dDhQc2FOR2lJaFl1V3dHZzBycGcxYzhhZVpVc1hWd1Jxa3FjbWdocEprZ3hRUmhvcG95aE9ybFNDcGhVYzMzd3JpTEtvTlhCemQwZGtaQ1Q4L1B3UUZGUUxZWFhxb0c1NE9KUktKWjU3cmpGK1dMUzBSdGZ0anBvSDkyTVpHUms0ZCs0Y3JseTVndFRVVk9qMWVtUm5aNWZUU3hCQ1YwSUFRRUpnNFNVNGppTnROQlBrSE1jcEFDZ25USmpnSGg4Zkg2dFNxWWE0VG4wK1VYemo1bi9JeWNrQnd6QW9MWGs2UjdTVUtoVW9pb0tYcHpmQ3dtcFhHcTV4SENlc1dUYXMxcHBiTTZWS0JabE1CbTh2YjRTRlZVd1J0bi8vZm9SSE5uZ2c2MVJZV0xoc1F2eTR2VGJocHpOUXMyWHNzSWlNSFdKelBVWEpPSUhlbXdjMXBiMjRzYWRubWNwVWFGZ1k2dGR2QUY5ZjN3ZDJMdFFvQjVxL3YzKzU0WGduRlZMWTVObWtTcWx3d2RyMnVJbUZCVXlaTWdVblQ1NzhZY09HRFdhMVduM1ByU0FkT25UQW4zLysrY2hjbUhxOUh2NytkemY2YkRLWmNlYk1HVkF5R1hSdTdpNzV2U0lqY3ZOeWtYVXlFMDJiTklWWW9YTUV0Uk1uVG9La0tHaDFOYjltUlVWR1pPZmtJRE1yRTlGQ3MzWkZkcnVHK3hrTENncCtHRHBrOFA1TGx5NmFLd00xbEZWQUpUMVFnVGhXVUpvaUlJeE9TYXdkSkNWUWYxTVU1RElaeFBsUXRWSUZzOGxVNDcvdGdRRWJ3SXZCaU9CV1dYVlVySkFLdld5YzFXb1Z3WTJ4RFV0RmNOdStmVHMwR3MzU3dzTENVcTFXT3hLQThtNzNiZGV1WFkvOWhaeXVUd2NsazhFL0lBZ3VBelFhTFRRYUxUTDBhVWhMVDBPWUV5TFY2emR1Z3FTb0I3Wm10dnQwOCtaL0NLMUVocStXVFp0Uk5WdHBkbmIyNGxZdG14OUdlZmJiaWp3MUt3aUNJUUNHRUR3MUdVVnhNcG5ncVlsRDdXbzF0Qm9OZEhha2tZR29YVHNVa1pHUkNBMExlK0Rud1FOaHJRMFBENjlJWUZrQ09KdTdxWlJyczFxdDRtdE93UTBBZERyZHF0emMzR0lQRDQvaEFIeWZ0Z3M1T3lzYldqZDNGNkk1bUZibmhxeXNiS2ZBbHBPVEE5MURXRE90emcxWjJWbVZBbHNOV1paZW43NDgrdm1vVTdDZi9YVDAwdXhCRFFLb0VTUkhFaVJIa1FKYkIyMURHQ25NZjJvRnZRSStCUFZEclZwOFh1MWhnTm9EQXpZK2FkbkFLYkE1ZW0yaTV5YUNHOEFQQ0ZjQ2JweW5wK2ZHakl5TUlsOWYzNDhJZ29oNFdpNWVqcnYzNGVtbndYUEx6OHR4K3RyRFdqT05Sb3Y4M0p4NytpeVJuQWxpZmpKdzVlNjY5RGx3VjIrYXNsYTMvbS95K1R0NGFxWnlvRVlJb0VZU0FndXVESEk1elNsb2thbERBRFdKQmRjTGJqb2RMT1pTNU9WbUl6TkRnOHlNTktmckVGWW5IRzd1N284L3NBRkFvMGFOeW9GYkJjQW1nWnVZY0tzSTNNUy8vZjM5LzdoKy9YcEI3ZHExNDBpU2pLNStFT0haVFEwR0E2d01BMk5oOWJDYmFyVTZ5T1F5K0FtMHlIZDFzaE5BU1ltTHk2MGlLNm1BNSs1aEZsZnUrWGdsSmdOWDd3N1VXSEFuejVYY1d0ODVkZloxbEovOXRHL3BzTXVwbFFjMW1RQnF0SUwzMUJ5TEJhTElzZFZpZ29lSFI2WEs3VVZGUnR5NGZoV05telo3TW9DTklBZzBhdFNvUXEvTkdaalllSEJPd1UzNFhvN2pPSzVPblRxSGs1T1Q4NTU3N3JrQkZFVjFyazVRUzA1T0JnZ1NHcTJPWnpldFJtM2pvaUlqMHZVWlNFOVByM1lsK0YwN2QyRDVzcVV3R0RJUUZCU0VsYXZXNHZMbFM0anRYOGJDUGpaK0FycDI3ZVpDd2tmWWlMc0VOUXZIL0htdzhHSlNuNHlGR1RiaHArUHNaNGtBYXVaeU9UVTdVSk9ERmdTT2xRcEJMay9qV0FIMVEyQlFFSXdGZVpXQ211MDUvMFNFb3FMSjVYSUozTzdnc2RubTJ5b0NOM0h3bGhORDA2aW9xSE1iTjI2YzFhMWJ0MHlhcHZ0V3h6N3I5WHFBSU9Iblh6Tml5V0p5MmFCUFEzcDZlclZ4VTZXbHBXSEc5S240Y3ZMWGlJNXVnWUlDbmhvbklpSVN1M2J2QXdBTWpIMi94bzcxc3FWTDhIcjNIblpzSnVKK3paM3pEVkpTL2dGTjAyamZvUk1HZnpRRUZFVUJBRkpUVTVFd2R3NVN6cVpBb1ZDZ1k4ZE8rREJ1c1BSNlRkaWR0dmxpekF1UXkrVWdDQkpoWVdIb0h6c0FyVnZIUEpxZUttditlVTMyb1YxZjVQMVdVQW1vbGZQVUJBTFlDa0NONzFWVHFrUVJGbDBacVBueGJSMWhvV0hJejh1dTBlTlVWU01meGthVlNpVWFOV3FFOFBCd0JBY0hTMExNdGx4dVlyT2ZRcUdReEZWbE1obG5JOFRNMkhLNUNUbUNVZ0FsYjd6eHh1MG1UWnA4YXpRYXZ4RmV2eTh6R0RLaDBlcHFmRjAwT2pjWURJWnErNzZMLzE2QWo0OFBXcmVPQVUzVDhQSHhrVHhuUVFxdHdwblk2ckFmbHk5RlRrNTJ1ZWNuVFp5QVdzSEIrTzMzTFZpMGVCbU9Iam1NcEtSTmZQakVzaGc3WmpUcTFXK0FUYjl2UVVMQ0F1emZ0eGUvYmZ5MXh2YXpxdHRNWExBUW03ZHVSLy9ZQVpnOWN6bzIvcnJob1Z5MDNqOTJoOXZvLzBsL2V5VjBoYkpUQkFCWWM2MUYzN2UrTnZIM0wvSit5M2ZJcFJVTGo3THFweTJvZ1dCZ1UvMmtLRms1VUFNSFpHWm1vcmk0V01xcCtmcjZJaWd3Q0tHaFlhaFh2ejVvWVZSS1BNK2FOV3VHamgwN29uMzc5Z2dLdXJzcTlJb2ZsNlAzTzczd2RxK2UyTHBsYzVrM2FyRmc5cXdaNk5mM1hmVHYxeGNIRHg1NCtCNWJtWmVpUWFOR2pad054WmNMUzBXeFZkaFVTNFVUMG5GQ2dSUEQwbi8vL1pmVjZYUXJNekl5OUw2K3ZvTUlncmhuVVdZclkzMGd5V2FOUmd0andmMVR1Sncrbll4SlgweUEyV3hHY1hFeHVyL0doNWs5M3VpSmZ1LzNyOUozSEQxeUdJa0o4NkRYcHlNME5BeWpQdmtValo1OVZucDkvNzY5V0xac0NUSU5CdmdIQkNBdWJqQmF2Y0JmYk1PR2ZvUmIvL0ZDdHlNL0hnNlpqRUp3Y0FnU0Z5d0V5N0pvMjdZZHVyM3lDaFFLQmZ6OC9kRThPaHFYTGw0RXdGY3NQYjI4MEx0UEg5QTBqZUNRRUxTT2FZTi8vNzFRWSt0K045dFVxVlJvM1RvRzh2Z0ptUGpGQkhUcTNPV2hNTE5vK2pTR2NWa3kySndTSVp6aHJ2MW56bHJ6d3MydnpzSmVUY29abjVvUWZoSldnQk5CamVVZEJ0S21VQ0RuYUtGUWtKK2ZEMFpRbXFKcEdsNWVaWjVhYUJnUGFvNlNlWFhxMUFGRlVkaTVjeWNVQ2dWZWZ2bGxaR1ptMnBGR09NNjlpbitucFB6RG4yUExWOEJrTWlFdWJnQ2ltajJQb0tBZ2JOKzJGYVdscFZqeDB4cms1T1JnMElleGFOeTRpVVF0bnA2ZS9uQThOdEYwT3AxVHo4M1QweE02bmM0WnhiaWRNSXlvbitEZ3Vaa0Z6NjBVUUxHL3YvOGYvLzc3N3lTR1lmYmU2MzVXVjZHZ1N0c3kzbi91b1duVEtHeEsyb3FQUjR4Q3JWckIySlMwRlp1U3RsWVoxSzVldVlMUEo4Umo4SkNoMkxwOUo5NThxeGRHalJ3T1EwWUdBT0RtelJ1WU12bExmUFpaUExaczI0RlhYMzBkNDhlUGswUnBFaElYWUZQU1ZnREFuTG56c0NscEt4SVhMT1JEQkpKRTd6NTk0ZUhoQ1lDbjBqbDg2QkJhdHVSSkFIeDhmSkNRdUFCS3BVbzYwVThuSjZOeDR5WTF0dWIzc3Mzb0ZpMWh0bGdrUUg3UVpqbHJnUGJENS9rYkwydmQvL2Z0Yy9OZnVQbFZDdXdaYjRzZEhxVUUvekFEaEFVRXlrQ056K3h3VnF1Rms4bDVDdis4dkh6STVES29WQ3JVQ2F1RHFHYlB3OHZiRzFxdEZyNitmcnluRmhhRyt2WHFRNnZWT2wzWHRMUTB5VmxoV1JhZW5wNTI3MW02WkJIV3JGNEZBRWhKK1FjZkR4OEtBTGh5K1JLYVJrVkJvVlRDemQwZEw3endQNXc0enVzOG5UbHpHbTNhdkNpY1R3VGtjaHFYTHBVZGgxa3pwejljWUFNQWQzZDNDZHhDUWtMc3dPME9GT08yWVNrcmhLYmluVW9FdHhJQXhjODg4OHlwbjMvK2VVcHBhZWx5VnhyNnpyWmxTeExhdnRRT3JWdkhRS0ZRb0hPWHJtalFzQ0YyN3R6QmgwTGVQbGkyZktVa2xmYnFhNi9EWWpiajFxMy9xcnlOYzJmUG9tUDdkdWpYdHpjYU5HeUlGOXUrNVBSOUM3K2ZENVZhamE3ZFhubGd2NzhxMnlRSUFsNmVYakRXY0JLOHdodmd5ak5RZFk1QWlTZTFPdUhYNVN1Ny9UYm1sZ09vT1FKYkNRR1VBb1NaZjhCS0NLcFNKTUNSSURpYXBqbVNKRkZTWE13VkZCVEEzY01kT3EyT24vMTBjNE83dXp0VUtoWGMzTno0bkpvQWFyb0tSRmhvbWdiRE1QRDI5a1pNVEF4WWxwWDREa1Y3NTkwKzJMdDNEeExtZllmSlgwN0MwR0c4ZmtQZDhBaWNQSEVjUnFNUkJRVUZPSGZ1ckhUVHo4L1BoMUtweE5tektmaHN6R2pRQ2hyNStma0FnS1RmTnlFOFBPTGhoYUsyNXVIaGdVYU5HbFY2RW9uL0Z4NGNRUkNFeFdMaGJPc01MTXR5dHYxdFlsZ0tnT3ZkdTNjYWdJVHM3T3diWGw1ZWd3RGNjNGIrd29YemlCc1lpMlhMVnlJaU1oSkxseXpHNXFSTmtwZFNrWDAzNXhzY1BuUUlPVGs1bURqcFM3UjVzZTBqQ1d4NnZSNFJFWkYyejlXdUhRYTlubWN4MFdxMStIUFhUa3laOGlXTWhVYTdNS0txMXVqWlo3SHp6NzFJVDAvSEY1K1B4N0tsU3pCZzRJZDI3MW01NGtmOC9mZFJKQ1FzY01xWlZ4TlcxVzF5SEllYzNCeG9IMUlQSVZka1NiODhmL2VxaHNlR25NSXhpZnhSQkRaVEJhR25CZUJFcFhhR0FNRUp3QVlLQkNlWHk2RlVxcmk4dkZ4UWxBd0IvZ0ZDOVZNSE56YzNlSGw1UWEvWHdOUExTd2cvRzl5eEYwME1SdzhkT29TbVR1aUp0Rm90QmczNkNDTkhETU03Ny9aRy9mcjh2R3lUSmszUnNWTVhEQnM2R081dTdsQ3IxRkNwVmRMbk5tOU9Ra2xKQ2FaTm40VjUzMzBMQU1qSTBHTnowdTlJblAvOW93RnNBT0RwNldrSGJqWWdWZzdZeEdPTHNpWmV3bWF1VkFRNmFhNE5BQ3VTNG5sN2UyODZmLzc4alhyMTZ2V2pLT3JsZTkxZnVWeU92LzdhajRqSVNCdytWRFhPOWhFalA4R0lrWjlnbk1CZytxaWF2NzgvOUE1VVRMZHZweUlxaW05Rk9mRFhmcXhlOVJQbWZEY1B3UUlQM1lzeEx6aTlJVG1DbmFtMEZOdTNiME9YTGwyaFVDb1JHQmlJOXUwN2xFc0FiMWovQzNidDNJRzVDZk5ydEpIelhyZDUvUGd4MEhJNTZ0V3YvOENQajVXeDd2dGJmMzV6dHgvalUxR0pPcnQ5Z1lDUWV0UUFnaVVKZ2lWQWNDVEhnZ0xKeVVCQ0pwTnorZmw1Y0hOM0IyTzF3bURJd0xQUE5TNmJLUER6aFZ2cUxmajYrcUYrL2YvZjNwbkhSMVhlKy8vem5HWDJ5YjRNeVlTRWtJUmN0dUNsd3JWaVhTNHVWRnNwdUsrWHFxMC8vZlc2SWxhOXJiVjFCWmNxeXExNlJhdTFldVVWYmRVZjlkNjZ3cjBnb2xHSkNZUWtKQ1FrSVNHUVpTYVptYk04dnovT2VVNmVPWmxKUUFGSnpQTjZIZVprTXBNWnpweDVuODkzTDBmcUtNZUlOWnY5N0xQUEFCanppTzJkcUJzYUd2REEvZmZpbnQvZWk3WFBQWXZKaFVVNDIxVEtsMTUyT1M2OXpFaHN1T2JxbjJMcTFCTEx5bk83M2JqbnQvZENFQVJFbzFHa3BxYmlyVGZmUkgrb0g5ZisvSnB2M3hTMXcyM216SmtvS1NsQlFVRkIzRmkvMU5SVXkrZm1kcnVaYVVyWjNGS2JXY3I4Ym9yTk5CMWdwdW1xVmF2dUhoZ1llUExydnRkL21ENERIMys4Q1hWMU94RGcwak0rM3J3Sks1YmZZdjM4NkNPcnZyWG8yWWhmRHJPN01RQlFYYmZhU2dIQTJlZjhDQjkrK0Q2MmJQa1lxcXJpdmZmZXhWZlYyM0RHbVdjQ01BYU1FQUlJb29qZTNoN0xSMEwxK0tEUHBMdzhiTjYwQ1lxaW9NdU05anFjVHJ6NHh4Znd5aXN2UTFFVTlQUWN3SVlOSDJIMjdObERwdkNiZjhVYnIxZmlzY2RYSDdVK2RRZjdtdEZvRkI5djNvUUg3cjhYUDcvMnVxTWVPT2pUQnArOS9mSGZyVDM3YjNlTVpub09BSWlZMDZSaUFCUkN6SUhHRkxvZ2lWUWtBcFVnVUJrQ0hFU2toQUIrZndyeTg0T1lWdjRQY0xuY2NMdmN5TWpJUkU1T0R2THo4cEdlbG82OHZMeFJvUVlZRVZRbVJCd09COUxTMG9ZMWFmMTA2eWU0L1pkMzRwUlRUOE1qanoyQm1xK3E0NEtIaXFMZ3BSZi9DRUtBV2JObVd6NWsxUXhrOVBRY1FFTkRBOHBLeTNEVjFkZmdsVmZYWWUwTEx4NDdpbzAzUzJmT25EbE1zWTJ3VVdJc0VFS3NOdU9ta3FOY2dxL09lclFEMEcrLy9YYjk5dHR2LzQrV2xwYTYvUHo4ZnlHRUhIY283OU1oeS9CNlBIanhqeTlnd1VrbjRhdnFiV1BHaDJaUDBIM3dnZnZ3NEFQMzRmUXp6c1MvL2VwdWxKYVc0ZGUvK1MzV1BMVWFIZTN0bUZ4WWlJZFdQV0pOTTFyMHc3TlJYYjBOVnkyN0FxSW80ZHpGUDBGcGFSbjIyOHFGYnI3NVZxeGErWkJ4Slo0OEdjOCs5d0ljRGdjZWZHZ1ZWai94ZTd6NnlwOGh5ekpPUHVWVVhQa3ZQd1ZnNUNtdWZPZ0JTSktFaXk4OEw5NU1mT2xsQkFLSFA1ZndZRi96RjlkZkIwS0F3c0lpM0hMcmJVYzFqMDBIL2J3aHNyZnlsSmI3NnRBNGxPSmtVMnJXTGNGUUh6VUFSaVVCaUE1UUtnQlVwSVJLZ2dCUkEyUWlVaWNrT05QU2gyby9mVDRVRkJRTTVhbVpnWUlkTzdZUGkzNG1XMDFOVFVoTFM4UENoUXNCQUo5Ly92bXdtUjhYWERnMDdDZ3pNeFBMYnh1YWY3Qng0d1k4L3RnanFLZzREZzg4dU1xQzVLSWZubzI2dWpvc3U5SlFjNys0NGNaaENsczZGcjk0cWFtcG1EVnJsdFVPaFJCaTNmTDczSDBXM0FCUXJxcEI1M3h3aVV4VHJhQ2c0TVBYWG51dDdweHp6cm5BNVhJdE85ajNxS2dxVHZ2bmhmajlZNC9naGh0dnhoL1dQSFhNSGNjenoxcUVNODlhTk96KzB0SXlmTFJ4NURtbUo1NjRJT2tYMStsMDRxNS8rM1hjZmRmOGJIamZ6M256L3lsaE04U1MwbEk4OXZqcWhIOWJGRVY4dU9GL2orcHhPcGpYSE8xNGZkUGw5eWZQa3h3SWgvLzAycjRQMzcvclFHVWZaM3JHRWdITjlLY3BBRFdnUmcyZ0VRcWRnRklDUWtVUUtpb2FKQUF5a1F5b1FZYmI0ekdTYi8xRFByWHM3QndqcGNQTVUvdmU5dzYrV3RHcTJQbWFhOEdDazdCZ3dVbkQ3cGNrQ2JmY3VuekU1eDZUWUdNZk5BODMrNVlBY0JiY0ZFV2hab1VDSDFTZ1hLVUNVMjhhQU8zODg4OXZCZkJrYTJ2cmwzbDVlVmNTUWtadHdxNXJHcjUvNGdJME5UWEZSWG9FVVlSK0JKdDNUcXp4dVVSUlJEZ2Npc3VYMUhYOWkxMjdkbFdlOG9NVGQ0QkxaeG9CYWpFeXBOSllkdzZkQUdhUWdFQUVvUklFeUJBc3FMa2d3K1gwd09QendlZnpXVDYxbkJ5alRLcW9NSEdlV3FMbDhYZ3hNQkErcU1jZHlTVWR5eCsyMSt2RjdObXpJWXFpdFkwQ09tb3FPQll4dFFjVm1HMnEyMDFUQUZvd0dQeGc3ZHExWDExd3dRWG5lVHllbjQzMi9qSXlNdkIvZi9HdjZPZnkzUEx6ZzlqZDNJUllMQWFxNjZpdHJVRmhZZEVSTzBadXQyZUNDb2Q0Ykw3Tlk1YnN0WE55Y3REUnNkY0NXeWpVLy93ZlgzaitvL3Z2dXpka1UybDg1SlBmZUtpWlppZDBFMmpVaUh3S1ZBS0JURVRxZ0FnSFpMaUlETGZEQTA5SkRueG1TZ2VER3QvOTFwNm1rV3hOS1M3QnJzYjZFZUhtOFhneHBiamt1d3Myd0NpL3NzUE5EcmtFSmlwVGIvWXFCY3I1M3BocHFwdW1xUVpBWGJac21iWnMyYkpuNnVycVBpMHVMcjVFRk1WRHlzbkl5OHZEcWFmOU15Ni85Q0trcEtSYVpVeEFmTHJIVjlYYjhNVGp2OGY5RHp5RXFTVmYvME5PZEtXZldFRFlITktiYUFuZjBqRUxoL29oSmtraG1UUnBFdHJiMjlIUjFycGhkMHZyMjB1WExHNUtvdEo0bnhvTGpNV0dWSm94UmNxNGNCczFuNElnVWtrU0lVbG1odzZIREFkckVtbk9LR0Q5MUN6ek16L2Z5Rk9iVm41SXFUWXBxYW1vT0c3dXQvNzVIOUdaQjRkelVVcXQrUWt0TFMzbzZPaEFWMWNYZW5wNjBOdmJpM0E0akhBNGpFZ2t3by8vSTl6Z1pxTHJPcHVsUUFDd2VRcWlDWGlaVXVvQTRBRGdCT0FzS1NseGJkbXk1VWVOdTNaZG1SczRPb00vOTNic3dkeEQ2UERSMU5TTTd2MzdKenJvRGp1T2Jjakt5a1JoZ2s0VFRjM042TzQrK3Nkc2IwY2JNak16VVpTZzBTU2xkRTluWitkL3pwa3o1NU9Pamc3RkJyVm9Jb1VHSzlwSlZCaU5JVFRURXFGc015dDBJRWtTSk1tYVV3QW5CemFQeHdPLzM0KzB0RFJrWkdRZ056Y1grZm41bURKbHloR3RKZjVPS3phTHdJUmc1c3laN0FNYXB0enN0K1kyTEdKS0NLRW0zTUFyTjJhYXdwaEdyd0ZRNit2cjFZeU1qTW9ubjN6eWt3VS9PR1Z4UmtibWxVZjZpaTdMOGlFOXA3QndNcnE2T3JHM293MCtmOHJFeklOUVAwS2hmbWlxbWhCcUFGQlVXSWpPenFOM3pOaDcwalV0SWRUQzRmRExiN3p4eGtlWFhYYlpnVkZVV3BSVGFOWkVkbE9sYVNiTWRBNW1Sc2RiMmRiSzI4MzFValBiZVdkblp5TVFDR0R5NU1rb0tTbEJlWG41bUQ0UHhveGk0MWREUXdQcTYrdlIzTnlNOXZaMjdOdTNEL3YzNzBkZlh4OUNvUkRDNFRBR0J3Y3Q1V2JPWENEY0dFQmV2UW1tZWhOTTBFc0FKRTY5V1FydS9RODJWRXdwTGw0cWl1S1pSK0wvMWJtM0haTUN1WWZjdG9oU2lsMU56ZGkvdnh1YXFpTVMrVzQybjNTN1BSQkVFVm1aV1Nnc0xCaFZiVFEzNzBiWHZuM1FWTzJJSFRPMzJ3TlJraElxTlVWUi9ydXFxdXEvNXMrZjM4SUJMUm5VRXBtZDZwRFphUUhObUUxZ0FzMG9aSTlYYUY2djE0SmFSa1lHc3JLeU1HblNKQlFXRnFLa3BBUlRwMDRkOCtmQ21BUWJBTFMwdEdEbnpwMFczRG83TzNIZ3dBSDA5dmFpdjc4ZkF3TUQvR2kvWVhEVE5JMll3NXZabUQ4R04yYWVzcEYvTWc4M0FNNVBQcTFha0pPVGUvN2g2dFE3RUE0aDFOOEhnQjcyUnBNVDY5aGJ1cTV2Yld4c2ZMdTB0TFRXVkZ4MmxSWkxvTktVQkNwTjV6WnFXakJKb2VZeDB6bjgxbnlDZENQeWFVS3R0TFFVQldZbHlWaGYwbGg5NHdVRkJUQ3JEbUFXeFZ1M2ljeFYwMFNsZ2lBUVFSQ2dLQW9saExDR2wvYkFnaFVwSllRdzA5UTZBWStmZTl6N0pTVWxteDUrK09FelVsSlN6aWVFZkczZDd2ZjdJVWtTOHZJbUlSQUlUSHpyeC9HaWxPNW9iMi8vNjhLRkM2dHFhMnNaek95K3RKak5oOFpEelJZY3NJWVhVMUVVcVNpSzF2ZEJsbVhLZXU0eHFIbTlYZ3RxUnBEQWJEdFVXSWl5c3JKREh2MDRBYllqdEhKemM4R2FVUEtBU3dRMXp2ZkdaaUVTUlZGQUNHRUp2WlFPRFRYVmJXa2hHZ0RWbkcrcW1QNDM1ZHh6ejMzcmpqdnUrUERXVzI4OVBTMHQ3WHhDU1BIRTEzZGlKUURhcnE2dXJyL2VmZmZkVzllc1dSUGxUTWxZQXRPVDNTcDJzNU9kaTh5WHhpYXkyMVdhTE1zVzBPeFFZd0VDbHM1UlZGU0Vzckt5WWUyRXhyd3AydFRVTk9iL0U1RklCSTJOalZhMGROKytmVmEwTkJRS1lXQmdBSU9EZzRoR281WlphaGJvRWxZenljeFNMbXBLYkthcFNDbVZtSW5LK2Q4Y0FKeTMzSEpMeWhWWFhMRXdKU1ZsNlRkcGFqbXh4aFhRR3ZmdjMvL21talZyUG4zMjJXY2pIS0NVSkVDTGNiQ3pSenVaVXJPaW5jejg1S3dVcTlzMFUydDhvQ0ExTlJWcGFXbm0zTThBQ2dvS1VGeGNESmZMTmU2Ty9aajFzU1U0aWJCanh3NDBOalppejU0OTJMdDNyd1U0RmxSZ2dPUDlic3ozeGdHT21GMTlDZk8vSVQ0MVJJUVJYRWdFT01meTVjdjlLMWFzT0RVakkrTmNRc2lNaWEvM2Q5S0hWdFBaMmZtM1gvM3FWMVhQUFBOTWRBU2cyVGZGTkR0VkRtWWFiM2JhVlpxcDFPS0FsaWp5eVlER1VqbUtpNHN4YmRxME1adk84WjBCRzF0TlRVMW9iR3hFYTJ1cnBkNE9IRGlBdnI2K3BFR0ZCSUdGdU1ncFUyOE1jaGpLZlVzS3VPTGlZc2ZHalJ0UHlzM05QVnNRaEJNbXZ1N2pmMm1hdHJtbHBlWGRrMDQ2cWJxMXRaWEJpUWVhY2hCQVk4K3pBZ01BS0IveFpDcU5EeEFrQ3hLa3hFMW5EeUFZREtLNHVCaEYzOUlnNHdrZjI5ZGNSVVZGZkZ1ak9CL2NLQUVHZGlWazZvMXFtbWJsdmNITWRUUFZXMXh3d2VaL2l3RndORFkyT3ZMeTh0NEY4RkZkWGQyY29xS2loYklzLzNqaTZ6LytWalFhZld2Nzl1My9NMmZPbkYwY3pIaVZGa3NBTlNVSjBQamdRRnlTTGEvU2VMUFQ0WEFNODZjeDA1TlA1eWdvS01EVXFWUEhWWkRnT3dNMndBZ3E4SDNiWEM0WCtKUEFEcmRJSkdJQkxoYUxXWkZUQmpjdXVFRDRrWCtzUXdpTWZDSVZnR0lxT0F0d0FCeGxaV1ZiQUh6KzdydnZ2anB2M3J3ZitIeStzd0VFSjVBd3BsMGZyZjM5L2UrOC8vNzdueTFldkhoZkVxQWxncG95a2tJekw1aDhsQjRzcHNXdGtKVHlBQUFUVGtsRVFWVG1CdWk2VG5WZGg2WnBWbDh5UlZHc0JIV202QndPQjhMaE1OeHVOL3I3KzlIYjI0dnQyN2RqKy9idGgrVVkrUDBwRUVYQlNobVpNRVdQb3QrdHJxNE96YzNOYUd0cnc5NjllN0YvLy80Ui9XNW1LVmJDNEFLWDFBdlROR1dsV1hGQkJwdUp5cHVxTWdESEpaZGM0bHE1Y3VYOG5KeWMweVJKT20wQ0UyTm5xYXI2Zmt0THkvL2NkTk5OdFgvNXkxK1Vnd1Nha2dCbzlxQUFnNWxPaUFDanhsT2dnaWhDRWtXSXJDUktraUU3WkRoa0I0eXA3S1pTYzd2aDhYcmg5L21Sa21xTXhzdkt5a0p1SUlCZzBBZ1NIQWwvV3BqTHdaeDdET1Znaml1d1hYVFJSWGoxMVZkeC9mWFhZL1hxb1g1ZnJhMnRhR3Bxd2cwMzNJRFBQdnNNNTU1N0xnb0tDcEw2M2JpRVhwaCt0NUdDQzJRVXdFbEpBQ2NEa0JjdFdsU3dkdTNhK1RrNU9RdS9TVDdjeERxaUY4Z2RQVDA5SDN6MDBVZGZMRjY4dUp1RFVpS2dLVW1BcGlZRG10a2prREpmR2hFRWlLWXZUUlFOb0VteVdSb2xPeUE3SEhDYVVITzdYSERINWFnWjZSeFoyZG1tK1RuNXFLaXB6cjN0eUpzVU9HWnlNY2VkS1NyTE10NTQ0dzA4OGNRVDFoVXFHQXhDRUFSVVYxY0RNRHAxQmdLQllUNDRleTVjTEJhREtJcFFGSVZsZFpORTVxbk5COGM2aFFpbWlTcHhKcXBrbnZBVzJOYXZYMThmQ0FTYUFieStiZHUyOHFsVHA1N2dkcnRQQXpCUjFmN3R3cXh0WUdEZ2c1cWFtcXA1OCtidFpqN1Znd0FhdjZtbVF0TVNtWndNYUlJZ1VFcXBtVjlwSk5xS2tnaEpaTFdlRW1UWllTZzFGaVJ3R3BGUHR4bjU5UHVOeUdkR1pnWnlzbk9SbDVlSHlZV0YxcXpOSTcyOFBqLzI3dDA3QWJZanRSWXNXSUFOR3paZ3k1WXRtRDkvdm5YL3hvMGJNV2ZPSEd6ZHV0VXE5alVuemNjQkxod09XMEdHU0NSaUFjNVViOVFlWE5CMW5ROHdKQW95YUFCRTg0b3RVVW9aMk94S1RwNDFhOWJuQUw0QzhQejI3ZHRuRlJZV0h1OXl1VTZaZ056Umc5bmc0T0JIOWZYMVgxUlVWT3ppMVZVU29La0hDYk9FUU9NREE3cXVVMW1XTVV5bHhabWVUcmo0ZEE2dkY3Rm9GRnMvK1FRWFgzSUpNak96a0dPbWN4UVZUWWtiUlB4TlYyMXREZDUrNjAxVVZNekI2V2NNTDVYMmVuMEk5ZmNlTTUvbHVBTmJSa1lHVGozMVZGUldWc2FCYmQyNmRiamdnZ3Z3NmFlZkloZ01vclMwRkI2UEJ6VTFOYWlzckVSUFR3L2NiamZLeTh1Um41K1B3Y0ZCU0pLRW5UdDNZdCsrZmRhZ0UwbVNhR1ptSmtSUkpLRlFDSkZJaElxaUNOYXhGd0FSUmRFQ25LN3JnbWwyaUdia1ZEUlBmR2FtU2dsQUo1V1hsMjhGOERtQXRWOSsrZVcwNHVMaU9SNlA1NFNKM0xqRHUzUmRyd21Id3gvdjJMR2o1dmpqaitlVm1jNkJhU1NncVJ6UTdPWW1pNXpUWkVCajZSdXFxc0xoY0VCa0hUa2swNEpnS3MzaGhOTTEzUFQwcDZSZ3puSEhJUmljYktSekZBU1JrM040bzU1UFBia2FqWTBOR0FpSGg0MWw1TmZSSEN6K25RTWJBQ3hkdWhRUFAvd3dIbnp3UVFEQTRPQWcxcTlmajVVclYyTEZpaFZJVDAvSDdObXpVVmRYaCtlZmZ4NlhYSElKQ2dvS1VGdGJpemZmZkJPeUxDTVlER0wzN3QzbzZ1cENhV2twWkZsR1QwOFA5dXpaZzRHQkFhU21wdEpZTElaSUpFSjBYWWZYNjZXYXBpRVNpVURYZFNwSkV1R2lxTVM4V2dzMk01V3ZhT0EzSG5UUzdObXp2ekNWM0t2cjE2K2ZOSGZ1M09scGFXbHpaRmsrQVVEcUJKNE9hZlVxaXZKeGQzZjNsNXMyYldwWXNtUkpONFlpa2NuVVdTS284UjAyVk50emRVNmhVYjQvR2t1d0ZTd2ZtaEhCRkFTQk9wMHVQajhOc3NNQmdSRHMzcjBibXFwQ2xDVE1ualViK2NFZ0tBWCszOXR2UVJBRXBLZG40SkhISHJlc2tGK3VXSTYydGowQWdKNmVIbmk4WHZ6NWxkY0FHSjF4bnZqOW8ranQ2MFZHZWdadXUvMlgxcEFlQUhqdFAxOUZaZVU2Ni9FQWNQVTFQNFBENGNDcWxRK09tUTk1WElKdDhlTEZ1TzY2NjFCZFhZMlpNMmRpL2ZyMW1ENTlPZ29MQzYzSGVEd2V2UHp5eTdqNDRvdHg3YlhYb3EydERjRmdFS0ZRQ0pzMmJVSkZSUVZ5YzNQaDkvdVJsWldGU0NRQ244K0hmZnYyUWRNMHVOMXVSQ0lSQUtEcDZla1FCTUV5VVZWVmhTaUtiTllDaTZJUzB6UVZ6UHNZNEVUeml5S1pxazYwUVk0SG5iUm8wYUpkQUZvQS9MMmlva0orN3JubmlvdUxpNmY1Zkw3WmtpUjlEOEJFSzEyYmtGQlY5ZE8rdnI3cXVycTZ4cXV1dXFxMXBxWkd0eWt6eldZNkpnTWFEelArT2JyTjNMUVVtcmtoR2RCWXp6UkNDRnd1MXpDVnRxZHREM0t5Y3pCOXhneW9xb3J0dGJXWS8wOG5JRDA5SGQvLy9vbUl4YUo0OVpVL1l4bzMzL1QrQjFjYUJPL3R3Yyt2dVFvMzNYd3JBR1BPNTMyL3V3ZS91KzhCVEpvMENlLzhiVDNXUFBVazd2N05iNjNuVnN5Wk02enpzTVBoR0hNZityak5ZMXV3WUFGZWYvMTF6Snc1RSt2V3JjTjU1NTAzN0hIVjFkWG82dXBDWldVbHVNbFcwSFVkMmRuWmNMbGNhR3hzeE02ZE82MDBFVVZSa0pLU0FxL1hpNEVCbzRlWDMrK0hwbWxVVlZVTURnNFNWVlVoeTdLVmEyUkdVVmsrRWpYSGFRMVRjS2FaYWxVMmNKQkxCRHZwaXkrK2tPYk9uVnNOWUR1QXR3b0xDOFdYWDM1NWNtbHBhWEZxYXVvMFdaWm5Fa0pLdmtzVW81VFd4Mkt4cnc0Y09GQy9mZnYyNXNzdnYzeHZhMnVyYmxObGlkUlpNcFZtL1k0bFk5ditCdTgzaXpNM2VhQnhDZUJ4UUdNS2pSQUN0OGM5bE1aaG1wN0JZQUYyMXUxQVcxc2JTa3BLY01sbGx5RWozWWg2QmdJQlJLTlJ1TjN1UkNZMmZuUDNyM0gyT1QvR3ZIbUdTMmJYcmthMHRyYmdEbk5ndDA1MWVHMURWY3JLcHFHc2JOcVlQdytrOFhxQ0wxMjZGR3ZYcnNWdHQ5Mkd0OTkrRy9mZWUrK3d4NmlxaWx0dXVRVS8vYWt4MDdLOXZkMXFPUzZLSXQ1NDR3Mjg4ODQ3S0M0dXh1VEprekZqeGd4VVZWVkJraVQ0ZkQ1cmlJdlg2N1ZTUTJSWnB0Rm9GRTZuazVqUlUycUxvREt3V1ZQc0thVzZlUitEbkFBalJZQXZ3QmR0Z0J1MjM5emNMSjU0NG9rN0FOUURlQmVBdUdyVkt0L3BwNStlbDUrZlA5bm44MDJSWmJsRUVJUnBNSHJMamVVVjFYVjlSeXdXYStqdjcyL2V2WHYzbm5mZWVXZnZuWGZlT1FndUoyd0VtQ1dEV3R3K3A4eml6RXliT3FNMm9GRytrd3pmWWNZT05MWUJnTmZqalE4UWVEekl5OHZIak9uVGNhQ25CenZyZHFDOXJRMDMzblFMSnVYbElTOHZEenQzMWlVOE9QL3g3Tk53dVZ5NDdQSXJyUHNVUlVFZ0VNRGFGMTRjOXhlNGNRdTJKVXVXNE1ZYmI4VFRUeitOc3JJeVRKa3laZGhqcGsrZmptM2J0cUhFSEtaU1VsS0NaNTU1QmhzM2JzUlZWMTJGVFpzMlllSENoVml3WUlHVjg3WjU4MmE0M1c3NC9YNXJxclhYNjdVaXB3NkhnNWtWbEc5b3FXa2FCRUdncXFxQ1VncFJGQ21sbEpoQkI4S3BPRlo0VHpqSUNTYmtoQVNRRzNILzFsdHZIUVRRRGFDR00zMkZ5c3JLclBMeTh1eXNyS3hjbjgrWEo4dnlKRkVVZzRTUUFnREhTcnVIQ0tXMFJkTzBQYkZZckQwVUNyVjNkbloyMWRUVWRGOTQ0WVVITUpTZHI0OENzMlFLTGVFK0J6UGREak1NRFFDaXlkUlpJcURaaXRhdGpVWGpBY0RuOThlVlJ2bDhQbXpkK2dtbVRTdkhxYWVlQnJmYmpYdC9kdyttbFpmRDUwdnVjZGk0Y1FNKy9PQUQvUHZUejhZbDVaYVVsS0N2cnc4ZmZmZ0JmbkR5S1dob2FFRE5WOVg0MFkvUHRSNnpjMmNkcXF1MzRTYy9XVG9CdG1OeEJZTkJ6SnMzRDNmZGRSZnV2UFBPaEk5WnNXSUZ6anJyTE54OTk5MjQ5TkpMVVZOVGcrWExsK1BtbTIvR2pCa3prSldWaFk2T0R2ajlmaWlLZ3ZmZWV3K1JTQVN5TENNOVBSMzc5eHVUejMwK24xV3h3RTVTdDlzTlZWV3hmLzkrcWlnS2ZENGZKRWtpZzRPRDBEU05NajhHU3hjUkJJRVYyNE1CYmdUSVdZQ3lkUjBaYWVPVGg0VWxTNVlNQU5qRC9WMzJHdVRSUngvMXpabzFLeVVRQ0tTa3BxYW1lRHllRklmRGtTSkpVb29vaWltQ0lQZ0lJVDVDaUpjUTRqWkJ5Qm9Bc05jQ0J3WnJiQnlsZEpCU0dxYVVoblJkRDJtYTFxK3FhbDgwR3UwYkdCam83K25wNld0dmIrLy84c3N2UTh1WEx4L2c0RVZ0SUtNandFeTNLU3h0dEkxMTBVZ0FzamlZOFNBRFM2ZzFwNlR4NWlhRG1hMnRVQnpRV044MHA5TUpTaWxTVTFOdHJidFRjZFpaUDhTNzcvNDNHaHZxNFhRNmNlZGR2NExQNTBOcmF5dHV2dkZmb1NneDlQYjI0b0x6bHVBZjU4N0Y3Yis4RTZzZmZ3eVJTQVRYLzUraENaS3JuL29EL0g0LzduOXdKUjU3NUdIODRkL1h3T1B4NEdiYjRPR3F6ejVEWmVXNk1RKzJjVmQ1b0tvcTFxMWJCd0JZdVhJbGJydnROalEwTktDNDJPZ0JLVWtTWG5ycEpWeDAwVVVBZ0QvOTZVKzQ3Nzc3VUY5ZmowQWdnS3V2dmhwMzNYVVhDQ0hZc21VTHJyNzZhdFRXMXNMajhhQzgzSml2V0ZWVmhXWExscUcydGhaLy8vdmZzWGp4WXF0cVlkZXVYV2h1YmtaRlJRVVVSY0hPblR1aHFpcUN3U0NibG9YdTdtNm0xQ0FJQWp1eENlZUxzeURIOWhOQUxnNTJuSm9URW9Fc3dUNS9tMmpqWDJla0RRbHU3ZnR4YnJBRSsvenRTSnNkWlBZdG1Vb2J0czhHOXlTQzJHZ3dZL3UyeHFVSEJUUmVwZkhOSUh0NmVqQnBVajY4UGkvOGZuTytwMW5BbnBzYlFINSsvaUdOd2ZzMlZzUE83VGo1NUpNbndEWldWbTl2TC9iczJXUDUzK3oxcG14NGpMMlpKVmR6Q200TW9GVzh6TXhVUHNqQXlyVzRzaTMrY3lJMjBNVkJqbElRZ0E2RDNTSCtuQWhzUE9DRUJGQWJDWEFqd2MwT05DU0EyRWdLVFUraTF1eU8vVkVoWm5zOTNtL0dZR2JkY3FhbmZYQTN0WGR0WmpCenVkeElTZkVQYXdMSkZGcDNkemNLSmhkWnpTQXpNak90NG5LL1AyVk1mRStPSmJDTkcxUDBoQk5Pd09iTm04ZGNFSSsveUtTbXBqTHpsSEpkSEFqWDNZRVFRdUpVSEl4eGdjVHcwMEVBQ0VrRUpVb2gyS0JIUmdIYVNIQTdGT1YyS0dBN0ZMTXpHZUNvRFdnakFVeTNBd3dnbEJCUWdJQVFDMlFHekFRQkFqRWhKZ29RK1JJb3RobWxVRU5xVFpZaENBUUNJVkExRGRtcHFjTWFRZnI5ZmhCQ0VBd0dvV2thZkQ0L1VsTlM0ZlY0MGRmYmg3N2V2bVArUk00UEhsdk5hc1lOMkRadDJuVFVYb3NmMk56ZDNSM1h5REljRG8vVXFkZFNib3FpV01yTlZHOThEU3JoRkJ6bGxCeTdwVFpUbGNGRTU5VWRyN0lJQVVrRVBRNlNvNEZNR0FWb3lhQkdFa0I4TkxWR2t5aTNaS0JqY05KSGVnNXo5ck9ac3B6elA1RXFzOEdNUUJEWTdGcUJDc0x3bVJxU0pCbGdrMlRJSnRRY1pxS3QwK0dBcnV1UUpCbVptWmxXNVFCckJDbUtJb3FMcHlMYm5FVXdzU2JBZHRSWFFVRUJjbk56MGRiV1puWHBUV1Nlc280aEl3R08zeGpZUm9NY0J6aG9ta1lKa3hoRFFJdURqVTNoeFVHUFN6MFpCakRUdEIwSlpFZlN4MmI3bVNtcHBNQ2ppWjdQZGM3QXNIMkQ5Z2JRQ0FFQkFSRUlGUWhCbkRvekZCb1ZCUUdDS0VLMFEwMlNJRW5NcDJaQVRYWTQ0SkJsT0V5ejA2Z3FFQ0dLQWdLQmdOV3VteldDbEdVWjAyZk1PT1NCMlJOckFteUhkVGtjRGhRVkZWbUE2K3pzdE5xUTkvVDBvTCsvZjBUL1d6TEFjZjQzcTRNSUR6a3VpZGlDbkdtZUluNjRQYS9jQ0V4QVlRaDJJT3c3bmd4WU5wVTNxaitOc24wNmltSWoxczNCUUc0VTRQRS9HK1lqLzNkc1RuOEFvTHBPSVFnQ0RKNFJhdlkvQTdHVW1jQUZCa1RUN0RSdmVZVW1Nb1hHQWMxVWFQSEJBVGM4SHNPWHBpb0tKaytlYkxYclp0T2lvdEhvaUZBalZWMGdUMVlCOVQySC8yUXVTUU85L2pqUTQ3SW53RFllRjZVVUhSMGQ2T3pzaEtwcGgxVFVHNGxFME4vZmI1bWpiRXZXeUpKdGxBSTZwWkFrQ1U2bmN5VEFRZE0wdnByQmdwd2dpS0JVcDdwT1RjRHBvQlNnb0t6OUtnQkNUUENaMzNlWUlCd09LaTZnUkVhNWpkdTNlSFZ3L1F6cElTcTUrRGVmNEhkY3poWmwrYytpS0ZyUFllYWxwbWtRUldrWXpBaWZnMmI0enl5b2plWkhrMDJ6MCtGd3d1RjB4QUhONHhtYXZENFE3a2RwYVNseWNuSVFDQVRnOVhvUDdnUmJYUVUwOUJ5WkU3KytCK1RKS3RCbno1Z0EyM2lFV2xWVkZVQUVlSDErZUwwKzVINk4xbEtEZzRQbzdPeEVkL2MrOUppVDZmdjYreEFPaFJBT0QyQndjQUNSd1FnaTBRaGlwbm9iR0J4RUpESUlWVkdNcTNwaTh6UnVZNHBOVlZWSWtnUmRwMFNuT3FpdXd3Q2NNUnFWUldWTkFCRFo0WUJ1bXJxTVJ5eTZOOFFuQWs3TklZbDV5WU1TQjJHQ2pnSTJBa0tTQWk0T1dQR1A0MzRtaEplYW9KUmFkWmpzLzBnSU1TcEVIQTdtTzZNTWFoYk1ERC9hY0xOelJLQ3h0a0l1dU53dXVOMGVlTDBlZUgwK3BKanBHMm5wNlFqMzk2S2lvZ0llaitlUXppdHlwS0RHd1czQ0ZCMkhxNk9qQXlBQ2NuSy9XYmRSdDl1TndzSkNCQUs1Nk9yc1F2ZCtNN2pRMjJ1WnB3TURZUXdNR0RDTFJxTndlenlJeFdMbzcrdUZKRWx3dTkwam1xaE10V21hQmtWUklFbnlVSkJoQ0c1RVZZMi80WFE2emNlWS9qaFJoSzRiMWxzMEdqV1VpaWhpeUpaRkhOZ1NwQVF4Zm1Bb2RrRVRYaXlTdGFObWJhRGkxWlQxUEdyL3ZablF6SVBOQWxnQ3B6OElJZEEwRFE2SHd3SWFNeThCd09sd3hxZHFpSUwxR1ZGSzRUTHJORjF1RjBSUndoZWZWMWwvMStQeG9LUzBGSG1abVhIcEczYUY1dmY3a1pLYWl2VDBkR1JtWkNJN0p4dXR1NXNPR1dvVGF3SnNYM3QxZG5iQjYvTWZ0ci9uZExvUUxDaEFZTklrTS9ldDIxSncvZjM5Q0lWREdEQVYzT0JnQk5Gb0JBNVp4dURnQUh3KzM0ZytPSDZMeFdLUVpVZGNBYjhKT0txR0ZCQkM0UGY3VFJWSENhVTZkTXBNVm1vTXJ5RUNaRW5pL1hTY3YyN0lGY1lCei9xSERPME5neDhiTkdLREcxVlYxWUlWcFlDbXFTQ0VRaENNYWd4RlVVQUVBWkpvdkNkVlZhRHJsQnJGNGtNcXpYTDYyemFCR0NhbXBxblU1WElOeXpkajRPS2hGZ3FGRUFxRlVGdzhGUzYzRzNzN090RFd0Z2V6WnMwR1UzM2ZPMzRlMHRMUzBOZlhoK3B0WDhMcGNHTEd6Rmx3bXdyTjQvWEE1L1daTGJvTmhaYVJrWW5zN096RG1seWIrZnhpS05XZDZGdjF2d0NBakNkK2lJRzM2aEI1cHo3cGMvelhIUS9uS1VYWWQ0SFJqc2g3K1d4SVU5TFJlOCtIQi8yNm96V2JQSmJXL3djYUx0Ynd1T0xUcXdBQUFBQkpSVTVFcmtKZ2dnPT0iXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQktvbnBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphcloxdGx1VzRyV1gvYXhSdkNCSy9PUnp4UTJ2MURIcjR2VGNqczF4VnRsLzdyVzZYcXlJejRzYTlFZ2tjbkFNQzBMWC85Ly82cnYvNnIvOTZTbXZoU3JtMjBrdTUrVi9xcVllWFA3VDc1My85L1BlNTAvbnYrVjhzdi83MC9QWDcxeDgvQ0h5TnZ2TG5CL1g5K2ZxOGZELy80eGQrZjhZei92cjlxLzM2U1dpLzN1alhEM2pqbnl2d2svM3ordk5GOHYzdzgvMG4vWHFqdm4vK1VIcXJmNzdVOGV1TjVxOFhua3Y1OVcvNjQ3Sit2dmozNnkvZnFLelN5bnhRREdISEo5N252K25uQ3VMUHZ5Ly8xdlBmd091ZUdQbnpFOXQxdnZ5K0pSYmtMN2YzKyt0OS8zbUIvckxJdi85MC9YMzEvL2pUM3hZL3ZMKytILysybHVYWEd0M2xYLy9neVgvN2Z2empZOEpmek9HUEt3cC8vY0VZNlo5djU5ZS8zN2ZhOSsyZnUzdFRZVVhMTDRzNmkvMzhmaHRlT0ZqeWVINnQ4RS9sMzh5ZjYvbW44MCs3MzN1eTVldWU5K0NmK2ZRbnNDdmY5YVJuUGUvelBmdDhuYy9rRWxQWW9mSTFoQm5pK1Y2TE5mUXdvL3VVL09mNVFvMDlydGpZeXhuMnhmYWxHUDY0bHVkOGJqK2ZONS9HSjYrSGw0YUhOM3Y0bFgvN3ovWGYvZkIvOHMvMWZkTWxldTcyeDFweFhVRzc1akxjT2YvTHE5aUQ1L3UxYi9rczhPOS9mbTMvL1NmN3dWVFp3WHlXdVhHRDd6MSszbUxrNXgrMkZjOCtSMTZYK2ZxenljOVYxNjgzWUluNDdNekZQSkVkdU1zVDgxT2V1NFpRbjRkMWJHelF5NVdIbU1KZ0I1NmN3K0lpUTRxeGhLdUdGdnhzZnFjKzU3VWhoeEw4TnRqRVJ1Ulk4SzNHRHIxc1Zrb1orNm1wWVVOdmpqbmxuRXV1dVYyNTU3ZkVra291cGRRaXlMMDExbFJ6TGJYV1ZudDlXMnlwNVZaYWJhMzE5dmJRSXhpWWUrbTF0OTc3KzRicjVZTmUzdXZsOVMvZkdXSEVrVVllWmRUUlJoL3Z4SHhtbW5tV1dXZWJmYjRyckxpQWlWVldYVzMxOWU3bjJpREZUanZ2c3V0dXUrLzN3OWErK0tVdmYrV3JYL3Y2OS82eGE3OTI5Wi8rK1IvczJ2TnIxOExaS1Y5WC85ZzF2bnZWK3ZzdEh1RWt1MmZzV0VnUE8xN2RBUXc2dUdkM2UxSUs3cHg3ZHZlQVUrVEFSV2IzNWxxUE84WVdwdjJFL0QxLzdOMC9kdTQvMnJjcnQvOW8zOEwvYmVjdXQrNy94ODVkYk4wLzc5dS8yTFZsbkp0bngzNjgwRFc5STk3SGE5N0FGWDFqZmZ5MXhDKy84YXZqMjdOdVlkSWYvK2MvdlY3dlo3LzE0VjdMdStwVGMwaWx2V3h1SEozTEdIUGlWMmxFTDJXL2laZU1IZExYV255NWc5bldNKzg5cmpCbkhMdTJKKzg2ZHN4ZmU0RzZiK3kxVjU0SmU5cVR6MXExMzJ2dDhYQWZNKzkzalRWQ0duenVFL29NcVY1UDQ2MG02NFgxM1h2WG1RWTJzTCtZNy81OE5lMzY4TE9ZNTczbUhwM3RIUFVlVDhwanMyT0EvOHN1WWxUWFRLTFZzK2FxTDhRa3gwMTRmZGZMT25RdU1lVEJubGJXSjR6U0FmWTN6L3FOVk4vd0xTeHJmaVhPWEVlNklEVjEzaXhHYlFtRDdrU1ozc3Yzc01GZjNTekdIUHh4eGEvTkw5eGNudjR6b0NGMThxNnh6b0J6enE5ZGJlV1MwbUtkWnI1SHVWc1A3UHNjUUg3ZnE0VTFTMXhoclB0TCtWc1kwRno0UVk5NXJ4cHEzeVd3RVNtWHE3U0hQZmxxNXVhTU4rdTcyWXpPNjl6WWY3UDV6OHlyY1RIQVFTejl1MGNxMXpEZ3hidVV0UWF3d3EyRnVQRWpEQk96aldzVXRqbHlLWFBFL1BJSkJjZC9CNSs4NDZoY3lvTWg4R3ZYR01lcS9qdUwreGMvbTZXTVdQYVk4Y09wOTJ6ZkZkWXFIZmVPaWJET1BXTWJLVXhYcHNjMlYvYlcxajYzK1h3dllQL0hXMk10SWJBaFJQcjJmQmVoL1FGOUZtQ0NLZlc1dWNmK3hsQXg0bWVYd1hLWDhSVSt2UlI4OHlQQ1l5ZnRUZmViV250NVQ4eDlyblcxOHVVSmlIM0huTXFMRFg3LzdncStmdlBpcjZWdngvcHhRVEdOc0h0Ym9PUDFzb1A4dFh3UkFNSzd1VXBRRE44SEZVYm5mbk1BU2NTczJPVis3N05lYkNBYUJSZi81bzlYNzY5ZVVoNHV2dGZ2aWQvWi9mMDFYZUZsaTJyQldwNVpndWF5ODRRbUxqeGs4LzZzSWV5R1QzMjBsVEJodFlTVHhJY2tQUXgzL1BhajV3NXNhb1JudlBWaks3aitZNWNkTUs2d0JSY3UxZGJmTC9MaGtYZTRObEc2bDhhT0R1Z1NLMVJUK2JCalhqbEhMOXQ3WHZ5aEZaYWtoNmZuRzJzTEtRZnViNy9TNzdyRzgxNnBqRldlZC9JcGdHdHZCQUt3R09OLzhsdnpSK0J2TlU3d2xML09BejR6cHhiM3lDek1malRIY1dOVTE4TTlWWnowVGJNMjdoNUhlOWRSRUptOWxJN0pMbExBMTBKZ0pmK2R5VjcvdVQwL1h2SEtHdzRYSmpmTkJSY2lUK2NlcERVM3hqZUJWVHhhT2xwRHdUS0pydlV0R3lOczd5N2xHNERBZ3BEbGN2ZlJpbXZFUlk5S0dKMVZUSG9IVjlRelZERUJwcE9RcHJrV1ByVHp5ZzF1d25uNC8vZXlpckVOWUpLVjRwNzUwekQyQVR2c3lWcFB2OHJUZExXT05RSlFmT0p1OGRDdXpYczloQzhDWWt4RXhNZFBHUnU4aWdSVklta3BzZDBFOC9SaUd2dGEvVTQ1Z28rZG5jZW5TOFpRSGx5clB4MThZSjltNUJjcWNjWlBXcVcrWHd0N0VqSW4vc1J2YmFJQWNZMzd3RnJaNWtCRVh1bmV4TS8rZU5zdmlBT3lEZEIxMTRKb1drRERBMFpoTWMvZ2QwZHEvVDdzRysrNVFPRmtWRFdDRFlKYzIxWGt4ZWkrQXRCa1FoUG9jRStDL2lEK3M3SjFQanZpOXgzR1V4OUR6cTQ1WFdQaTd2RVJFTURZeGtKeStiemxuQVQrR3JtaU1jcXp1TTNiMEFRUmdPaDhIU3dCL2lOK0dTQXJmTzlLOFNVOGNodjh6U1VocW1DNjVka3BHOGJBSlZaLzg0dG44VEdMbGdGckl4Vy9qemtsc0FFeUVhK1JGb3NPUUk2YXhTaG9GUHpxL25hQU9zQzI5b2RZTFFOQ1JkUWpYb3pBSGNBaXFtamEwaUljZjVOMXV6Wk9DSVpGU0VlcXdENlVZMGxDcHRZRGpFU1FzUzhpVFNHNFZqQ3NOTDZ1dlo4SmZNU1ZoYkV2dlZkSmE5OGd3ZDczT3dpM2tXQ2VYdXc4QXk4ZjcvSHRZcEM1VTJFbFo5dkljYkFLLzBPTHNWdllQcHp0SmtDK2hPUWJ1cGQwcHp1dnRVSW0zTDdiQ3dVRVNzejVXYmxCSE91SFMzUFJtTUtRSlJMU1lERWZzQkhZTlJ5K2x3eDI5bHN0QmJ6aVFSdkN4d2RqZmRBVUdDQXh6VVdGeExWYUNPRmpBOURneFFmZFpITUpKUmU2ekhDQ3pSUGVJVWg0TjVmUDRzUDFRSFo0M3MwTnNVNHBEYUltZG5BTEJqS24vdjVjRmplVzR4VXlSR2krSFhMWUMvNkN4QUtWY0NQOGpoc2hxT1pudndUbXNEYjJuRURWaVRNUVplL2FpWDdZS0phdjhJdlF4ZzVtOTRGNVlFejNCOW9BRzRtTDc4QXc5S2pnM1VSMGRoNEVaM1hlbk5oWjNwZGJ4V1Q3M250ZFMzNUJOQW9ZZDRzRHozZzdMdnBKQS9BYUtCWnZnQk1YMW4yOVdNbWNIZGJSY3lDWUpTVlc1WGQ2dmZTZVJQZ0k4QnRDOWF1ZHdDZ211QTZsSS83Y0IvV1FCa0FNWkJLK1dONVFGd3FoNUFGWTFjNlBCbS9VZVBsczNuWGlWckVNcENCMG5vMURYMWVNSXh2bmVvTkpnZ0VMcmM2YWFrdWJWWGxZbDRWbEJRSWtiTXJOVGMwZFJjZWtHZ2hvcUljMmMrdDU0b2tUTXdBdVFBYmVlMkUxaTFENlFNWUMwZ0NxU2VSWUY4eXVtU0tBanFVcUhpQkljQTU1R1ZFd3NaUlFwRGsvc0creElZU3JDVTBCUjNadVdncHNZY0w1MkRYQXZHdktQVWFpQXdJS2x3V3BXSFB6UGZ3V1ZCTmtqdEF3VENPV2I3NWdub3QrUWhXdndLbnJ2bnJDbTlZTDJ6VHlQVFVBeklRTDRESmtkQVdYRGdxaFBrQ1laMjNlSFJ3QmFOeHEyR3JxT0FnN2VvUFpnQWg0RHVKcWh2ZFRqVE5xc0JjSlhURENSSFI5Mk1EcFp3Z09OMkU3dzhwQmF3SXpEbG9ENEhvQjVIQ0xVREo0OVFiV0N4VGlBb24reUFEczVlMndpL0tDbkVRWGpIYjM1eDR2Q3h6QlVvSUlXOHJXb1VXZ3IwUWIvSE9OcEJXai8xaXhUdUJoWSsrcHo1NTBHeXNFUnR4dzVwNGpJVGRPSWhpVUFFSjhBL0lRclNlVmhZWUpRanM3N0gyK2NDUXVHWDhrSEJDOE96aUZIRzBoSmNJc1lWTWdMdGd2VXFVU1A5VU1GMFFwanU4dUh4NnNXZ256WXpIblU4SGtyK2NLeHpkU0FUeVREWUlrVHJidWdUQUNQQldUZnJHcmhHOWVMOUhLUDZKTStSTkdVSlArNnk5MWJpWEJzN2lxZ0o0QzFBSExoUVJDVmdTa1RKUTlZa2U0TE5RUHZJa2RKb0NPaWxJNUNkR0FrOVVYaEk0RUtaeDgrOEdHT3Q4WHFwYkN5OW9EVTVDS3lwSzFXY2VGZlV3WXdyY0NvaFg5M1JNc0VIN29Uc0FFMGJtOEFRZ3dDTVBwVWJSQjBJM0ZMNlFFbklhMHNNdDN2ZEFrMzBOY2hLR3lwSERhSmpYZXQxSWJVK3FUaTlrOVpKZ2Y5UGcxakhrRkV6S0dHNktGNzdJaDF3bmhSNmoxcGlEampTVU9vTklORkJwckJ5R08vK0JaZXN6NzVjNTFGUlRsQm9sYklPSmwvQnBKeDFaZUVjditqSTEzbDQrQ3dvRVk5TEsyUkVWZXlKMHZUTjBQWVZNSkZ4MlRhd2d4Z2pPWWl4SHRQSUNrQzdjWUgrOFA0bjFMVGY2OU4wNnZqZ1RtVW1oZ0M0dUh3NEVvMkNUT0FnRUQ2aUJWbnd1R1JZLzh0Z3MwakhzaEJGQUZEZmNObUVyMmN4QzRpK0J1S3F5ejZnTW43cUFRd1pOb2puYzExU3ZtR0hDOHVIRVJYZ2tNYnN4RzVNaUdZUUpRZmt0NkFOZTM0VkhObldjTkRpRDFrMVpFNDM1dk96RnA0akFENGNmSHNoTUp3aEpnNVRBRkZ1ZjgxZ0E4TUNlRFVkc0dJbHk1SnhPYUl4THAyRHN3Q3NrTW5zQjhMdmdBZkp4OU53b013UHJlSU4zTnZSQzdNZU1YTzRiRVRwWWZQdjZDZzF3Rmk4VjExd1RyZWdzYjJVYTRaSE1nQmFvZWlXc3VGYU5KWExNOHBCTnA5dEVvbU1lSUNlRDd5ckd6bDZWbEtURS9TRFpMUDVFUWdBdmsrTlhqbDJaRzRBZGxvQk80U0NWU3dmaUlJWlYvdi81RU16UklpVWVYSm1wT0JkNElZOHpyVFJnOGtRVyt6VzlYV0dFMFJUSkN4NGVKRWdBZ2R3SHlmRk41WHpFUzFQNDlzRnpvMzNvRVFaWWxYeTBaN0RHTDczTzdJakljVGNsNnZRQ0l2MDRVYmtab2ZpV1BEMUkrRXlTQmVBUEhiZnpwWFFpSkhTNTBZTTY5dzJ2TC9neTZCUFBLVnZ4YURoY2pFWWhRaWIyYmdJQUNzemhQVFRkUnFiRzF5QVFXdEpsaGYvZzczeFhIUzVBQmJLUXMxbzZqQ095QVVpb3plYkF3RVRWZlJnMzZTWWczS0czSk4rdk5HN1h3Qk5qZDRIS0krTUFQY2FraTVIQnRERGVqKzlnempHS1lNTVRKaUFBZzI1MzRYRmtOL0NHR2hjVmRFMHZlQ2s2azViY2lLLzF6UWR5RWx5VHFIYTcyNVVHWVFESHp1Wkcvb25wQjVZclNmUkNUZlVOR1lkWTNuSFBJWkFKeUQvNmNYendLQm9uUGNTUEFGWnJQZTRaVndqakdxTVh3U2lSOE5QRE94U0N6cXZENXI1YVZnSWlZUkpNVVJENWU4YjRxUHZpN0Y1TUM3MGNvYnhncGtwQXJZaStoS1lxTHBkOGs0aU4zK21IcGtLcWdac201aEhQa2xYbHYrSXFadEk0NzhUMkUyMjlidi83cFFoQWVLUEJ6SmdGU1lZNnNDT3h0QzNoM0FLSUQyaWplUmxsVys4R0xIaVJSdXZobDZUdWNLK0pWaElZTU9VSU9RRFVLWlA4TExNaG1sWEJzeURBaHlqd21sNy8rdGp2WDkzdHpjTkVjRGp2bURiaWhuUk9Pai9hUmZrYzJDeVoxQ0dEYmtERndGeFNxSzV2VUsxOVpGL3JtSVJ3VDdMeFRqMlpNRldmMkZpYi9uWk01S0J3b1FIamQzQlpzOWc5ei9jZEZzVWJiSzY4WksvbHUxRTh3ek8raDYwSzh3R3o4RFZuUmVLOGxyMFZheE5kTUw2UnU5M0diNlVXV2huakJmRk9ycHNyVVpWa1VoWEdFb2YzOXEwOG1aa2kxVFgraUxZQWErWEo5dUtKOW05dG1IV0NGSGJxeVppRFdvTGlBZkN6SENBZFlZcWNtdkJGUUQzK0R0MmJzR1Y0SHFRYW4wS2tROWc0VE80bW50eUpDUy93M1Y4SUs2TEd4d2poWXJGQU5mOHArSUJVeWVSR3VDdEVUTVlWQThKUjJtME1DODkrQi9YNTF3K2FnS093T2tmZE81dUtXeW1pZ0JBdnFMR2dLNE01MW44djQvdXlvZjc2UWp6MEc5cEN4alNoQzdNWVB3UisyRk9XTnIvRCtjUFRTRzhDR1ZtZ05KWHQvQlZZRyswUEJoeUdoQk53N0lUUEJBR1dxUlAveHFvMGdhWmdZNFA3ZUFEaWtBVFZ5N2VlRnR1NnQ5b0pPUWM0RkZSZzZ2UHJGMU1HZVhUL0UrZ1BxcGc5V2h0U0ZnQU8rQ0llWjNJc0t4RjdRUWVMMWN6d2ptM3NzQ01pQ2VxdlRvNVM0aHprbjJRMXZuRG82SFZva2hxc0x3VFRDMkFNRDJSZWhuc1dBTTNTbzJ3ZnRoeVpBR0Q1MzVYbjVWYVFsd211bXdtMFFOTUNGQ0QzQ05jdnU3RE1lRFV5T1pqNzdoeDdoNU5nSFV0SXMyRHNWaUliS2JDb2FWcDBDTWFoNWpBUDNmVEZMZUJVRWxpZ0hQK1NTTC9VdWxrelEzcmZISEpBT1VDeDZxdHkwY3lrQWVyc1hreVVUR0J6L0dnYXZoR1ErWndQbEhGaW5RLy9RTy9EQlYva0hjR1djQWRuVTRHNGdhekRCNFE3eWxqQmJyamRyLzNnL1AyTDFrVzltc0JBU1k2RllSTTEzNFpLWURmc2lBUUV2Q1NkOENqc1BpM2lmMjBUSVJHczh4T3pyZy8zaWhxQlBXRENMWVdvTUFOdmI3QmJMU3B5RzFTQ1FRRjVBR0NkcEd5Zi96TG1pVEovMkZjK3VJRnEvVHZtRnJNZGZPQm54eVdWTFc3RHZpVkVpa2VEeEExV0ZtMFhzaEhVQjV6QnJOTUdFMW02UE13aFJZRTB6dzVuUUhlemFEVmplSUJOdmpBNzU3cDhVNzRSakxQT2szUGQ0YnUrZlVCUlordlRHY3ZrbHY4bzlJbkJQNkErcEpKdmhrVmhCSXhkVGhCRGVneEJRTnFKa0lBaUdqLy80blR0ajhOKytWTHJmQ2JYdzU0VkJCUk9pR3dHQTViTmx2QzF2VE9BSkNpelRjWVowb2dJQjdtTmxaUTR2dGc4ZWdZVlFRUzQrZUtiTmRpRGNDYXNEQnpSTjVCRjlOK1dKVnVtSFBSVitCTWk4VC9tTWZxbDUxQzBiZWZkRVd3K3dybmt3QXkwRTR3bGhEeHdUaTBEVFdINHczRXZvWXovWkhSVjJCN3d6ZUkyd04rbnJZa1RQcjVROWlwWEYvektNaW5qL0lnTUJYV3hwdGladjczampvL0dDYVd5ZktRSzJjMEVUTDZ3Tklib251eFhEQUptTzNHa1JodEZ1ZHJpYWFrVko4NVkzOFNTWlJNZEF1RnpJVTN4dVhtK2VaMTRtYWowQnd5YUEvY3dPc3NxbUdFQlNMbjFnR2JlSG1oTkdVUU1CQ1ViS3k3aVUwUlZqTmNDU0FuZ0VhcmtzbWRYQUlWajNDblNqREpJL3hjeUJUR1F6TzZJOEI1MlIxZHk0YUdndUszZEFHa0JvL1dMVm9rZXFzczlzRHU0eFZ5QVBVR1crejhSK3NmUjFrc0VwbjNPdUFGQTB6NFYwanFtU2UrS0JFYWkvMG9WMVlGZkxCK2VEUFlNV3c2UUZ3UWQyakl3YmdOczM0RnFMSFlNSVJZVHZzOGRraitIUjE0S05OYzJkVDlDYkg4d285Qzk0Nk5XTS8rSXNzY25ySktCREx3TFhORjVvbm1lQmhJWkJuT3JKek9pUnpnTTZSaERrMzlpSmMwaG9FeDEzckhDOFdhYld2VytjQlRoN01pVFovRHJ4SVJIS3NEZENkb05ZOFJWSEtBRHo5cXpRUThlNUlBTlEvTytjbGo0QkdZQjhSSTQ4QVJUbmdyRW4zQnlGalJEYnJQaUZxK1VZQVdoQ1RabGRvd3d2OGNqTTJGNDNsMkMrK2I2SnQ4MWNYczluZllnb0EwWUlQZ0xzUU5wM2VmenRTVEJHMEhDYjZhSFdMSjV3dWtpN1JzKzhBYlNIVDRXRFpVVHBqU2NYZVlmcFhUNGNXQ3hnTnB1MWM0UVZFc0M1YTZ5ZHBSdjZnam93UG1xOGtuRUpOQURnNG5uQkIxT1FxZDBJbklEWUFzbS9xNThqTU5nMFBnakh3Tzg4cW5qalMrd0pVQjh3Q2c3WElKVlFIVURRT0xsMm5oMEhuYXpmbkh4YTdkWkUrS1hpWk1FY2p3b2MzdjZrS2tYNkNCQUxGaDFNc1dXdUFsVDk5b3ZwNEFiZklwUmcyMWdYNkh2bDBuTkpyWXNCSC94K21VZ3o1bnhvSG9nVkxHc1MzeXN3aGd4aGRTcUxGRTUwY2tzc0JZQkExK2ZpTS9PVFFDVElEUGpKZFhzWWlEMjl0YjFjVW9RYnd1WFBnY09ReTZBRmN5dG1nN2NudVI5V2g2eUx2Qkc4Q1JhYk1wSDlQV3dITzVkUUI1VDlGNUk2S21NZGt4Zy9DWnVZSGF2SkhzTjcwTFlZbzZ4bXNtdmZuYzA4WUtGcEhBVDRJTEVzRlIvVk52RVBzLzlraDZ3S09yT2hQelBXNFdGRGZXRHhlRG5zazhWTzdnWDZFd2FTWVdhK2NVbFI4WHR6U1dBcVhBNFhHY3Jld2QzazduRVE3N21RME85M2t0K3MvY1ZHSnBPa2tmODAxaGFWUWNTSXJpRU96SjVpeEN3OHpHTWNkYzdtQnZWU3ZORUxqOWlOQy9NcDJORURTOWtmWVFMVzBJRW1OSWVxSGw0VWpLVGJzeWJRdE4xNFdJdFlLMzhEcVRJYldHY2tKbVF6T0pjNmVucTRiVjFUelBMaURqUlg3TndFVFVvSk8wTGFjaG1JZkZuRmtxRkdrd090c3h6M1NvVVB2Z2pkY0FzVXlrbER3VEF3Tnk3VkUwK1dNSjZERytKc2d3MXpmNnNRdXNmTjlkK2Ztc0xqekd6S2ZsektRY0IvUXk5Z0o3RDNpZWEya3FZQWN1RlFBaHozeTZZb1AwOWNmMzBsM0RlTFQyN1l5Z3Qzdm9KT25ZMzloSTVVZ3A4Rnl1UVA2czc3d2lMeEI0SCtlVmpvZ28vaWIzdzFpSnVQQkxPSlYxaDI4SXY1V3lJN3NhaXVUckErQlJpeXZtYXhnV3lXV0liUVJnZ2h6bDVwNVZnUW1tWFVBc3NoaVZmUHBwb3RaeWp6M21iNVpHS3lnUVEvQWhNQVgwU2UvczV0VEVJSEVXY3JOV0dQT1cwMEgwSHJDOWZIdldZaURCYnZNWEQ3elZsdVM0OStjUllzOEpBV3YvNm1MWWg1L0l6bC8zNFkwT1Y1RUpkcmpVekdWcTJBeUlxUUxuRnFQNVVSNkJ6ZTMrTnBmQVU0Ky9XRFg5OW1PL2pCWmRWcU9uVUdlRW8za2Zld3ljU2pZS2tTenJKWTBZRGRBT2x3NUtWVCt4UGpuWnc2UVF1UTNPa0NRYUxSazlqbUFjTk0yWElsd2pZVXR2MmNTU1NEQXpIOHNXNGwrZG9Kbm52dUZzdDRUNlZKd3RlZ1RTVnNYcTJjWXk4TlJkd2ZGMi9RUWdkbWVBZ3VtTTM4UmVqSmhLVkhWd2w3KzlRcGlBYnprSXNZSU9oRU0vdGFFdW9HU01FOVZPc2VwN0xOZzQwSXJBWGhYbTRGa3JIcW5xeHREQno5QkI2aDlFSEM0QW5JVWoxOW9TVmpHd29DdkdpZXRkMFZydWpCN0NzMzBFL2VmRnNUZ1Q1Q1Q4WXhQWUx1VUdiYzRnVnlJK292L05iNlppd0paNE1ZV2N3NHhXYVZJandobitOd1pDZmlsMGpiUVhZbzk3cFlmZ2drNUFuVUp1S0JEb1ZZQUhzWWFncmVzSGwrRGl5VzVzY0JlRmh3U2FqVEczT0ZFOHdQMHZhdWE5MWNFaUlkY0s0cHZxYU1NWUxDQnNDWDJQM2pKQURMMTBYbUFNZ1JDRGNSZ3N1SGZTV0oyZ0l1TGd0N0lLZTNDSkNlMTN3anZqYlVDcDRhcWhMWnlqcFpKalllUU5NZXUwa0V6d3E0ZHpaMUxld0k0WlZiZ29SWVZRYlAzZENXNWYyZ1FSY1hrenlJQXdkeFYvUU0xTWxVVEFnblNuYlBrdkJzRER4Y3hJbHVMdWdHL2tDTmVKTGpyeUkvSUJwWnZWY2ptTTNnZ2t5VEk0VnpOdm15YmNDRnJLU3lJTmZSZDZnMUJGRXFUMHFZeDRDZG0zajF2Qnl1WkNHSmxIYXREd0dSY0ZIcmJLWlZYTkdqUWV5SnYxOGVGTTdpZ2ZYTEN5dVlnNTU4MkZ3UUZ2a0x1VFdCZzBJcGFYSi9jSXQ4dng2MGJqMHpHOU83U2RmcnVTWGphRTlNNyszcWNHVDlubnRDTEt6VllnOENieFB1VWFmbFkwMHJHcGlBRlJnRUJUZ2dhaTdBajVUQ1ZpWDI1Mlk5RFNYRTdJWnk1QmZoSjU0eEVtMkkxTkUxaDdFSGF3THdqQUlwK0Y3dkJ2NWFMamFQeFNkQWg2Y3ZyTUxqdVY4NnoyUnBSZXQ4ZWc4TURQYThDSENzQVJqU0lBNHhudFNoWlNQek10ZXdQbFFDV0RndGxVaXNNazZWd1pOUUxDK0J1UlBBOHBzOEl3Q05SM3JpMXVnOW8wSnllMnlkKzJYVm1qVTcwQ1BJUW1GaGtYZ3h3bTFhTE83SVBPVlJyRHU4RkRLNGdyQzA1Yjc4ZzZTMi9xTDE3MUlabm16NnRLcGtla3FIQ3NFaXNQYmFNaUNEN3hLVDhXb1kwSWhHR1NMK1l6VVJUSVJWZzR2dzI5ZkRqNkFzME5FR3UxK285S1A5UHp5WXkzeVFjMzE3d0tXZE5lUVRzb2RJSWlNUjEzRi9sQ29Xdks4eWRydk5hWUVHWFBDRzB6WlBYOTZBcDJZcjFtQm1XQnAweWxNbWdpWnVpc1FHS3daMytwMWpQbXdjcUlXQUZDQm40RFNTSzFIWlBJV25hUStoNFVQeVdVN1NNUC9rMFdnbGRPSHVPeGRVQjN0L2QwakF2RTQyQi9mUzRNRFpMeEQ0SmxweWU3S044V1lnazRpQW12M3dLSWdyOGR3Q0NmWWlXNTExRXpvZU5OcEY4SjRQU0pIUTBGNWt4S1BqQjg1akRBblJBdU41OWNKRFkxNVBnWEI5aE1zODVZSEVHZUJDMkxocWhmbUQrT3o3U3F3dmhKVDFqRStjMzcwOFd1ZTlFYWRWczRKaEdkQytVMWgxa3R5OUtPeDE5Q3RDTVZYRXBadGl5ZFkyQTRnbTF2c0E3Vm9hdC9rMjRlelR4aHZHM2l4WHdpOEpaTU55TzI0blhFUWYxTDVITCtZZmVWdDhJbkROQ09mUUJ1dVpWU2pkMCtpWndrOGQyd3hBeU1PMno0Z2ZIWkhiTUVoQ0N0ekhZZ0ZZVEZ2TjBtTkMxU0wyVmlVT3VMSUhqTnJpa3cxZlN3WmlZdDBIMENvd3VZSEFyUkd3WUJFQnNudnlsZWFNdVp6SGNsOVdlbHFJU3h5dHcwekhucm4vOEpaa2FZRkhJT003b3NqRFRIRDVaRVJZMGZNVkR2Mk5NSElBMllpTWgyMThZRDVzNjJSbldNbnp0Y0ozNEsyUTVHRFJIZXJvNXcyYXF2cHdFV0lGSENUOC9PRFAzNFpYRXd3ZVpEaTBMQ05GRTJ3N0FlZzNXRWFBQlBJSSsraVhCOUNLeVlOS1hOeVRTY2lKdVJURVp4andOWXZaaVpaRWJpQlpvMGsvbkNtejM1OTVTRlBYVnVBVFlxRURFTWdXOFE4enc1RC91QWlZNFpYNVZpZ1RkbW9SVDhBaXBiMmdLeTQ0WnVhS0NITUE2aXVmSDBiN1l2RU9ZZTlGejJHY2dNSE9saW53VGxDQTVkNFFjOU5YM2wwOStRVkRDUUR4YXJDb2hrNUE3dktHajNtS2x3L0hlT0Rsbms5K2ZncHk1ejBWM0hDOVlnVU11QldoTFZrakJCZ0dlSVFOVjlBRFVXUEppUTVIK014UTBVV2MvenduaFBkZ0hjWGNSUkVDaVRGcllYZ0VxUnVIUnZQaXhsY05uaktoQklnenNtSVFHSnd3YzVnc3ZIemhpTVAxZ0x2NFpaMzhCVGMzOS9aSTV5UkhhbHdXNkdaTUhPV3dNbmFER09KdGxmeVlKaDZJNTRscm5tOWtzMWMxSGNrN1gxNWlFYUhKM0w0VEYzNnhteXhreTNCN0FKV3dWNENRRE0rekJvOFFvRktLQ0NJUDhyOWR6Mms2b2loWk1vdFZnRkd2UlJuelFwNjQ3NW13bGphTW9pZ25QZHY0dXZLZExRSEtTdWNqVXJmMjB2cVNHeTNBbFFIakE1cGt6dVpOT0czMEhWK1BlamV1VDNUeXlKN3cwME1GbzJBY2pVMW0vL2tLQXB2M0JkUzlLU3RWTEpmMGlDQmYrU2xXVnVMVlpoQ3g1M21EcUFVL2dZZGJRVzdlZnB0T1dOWGFNNnYyVGY0cytTclVDbXFRaUlEemdwV1diWEVac1N5S0RwMlZHM3dHWVQ2WmpLOWY1ZFZkaFdOdHdjWk0wU0tvYm5odkRCNEF3cEZEdk41SC80R2VJK3pGU1U5MFhXZ2dUU3BIZUFraDVCdDA1aDFkb21xbEZ0d1VpRVAzWWFIcWpWUXYweUxGbnBVdmVvWnJ3aGh2KzFEQjhPd01zQzU3aXhEcTMydWxkaXQ0YkpGb0tURm15OFNJT1UyeWVPcGNMUnhKMW95cVdaRFZxa1pXNjMzTW9pcmRjT0JzMGNCandrT3JUNS90RG55RzlTb1FqWGhKYVYrMldlOENtRnMzdFhCYlYyZHhocFdQZUxGNVNuTVkxVkRIZHFOTXNhRjlKNlFKRWhlWGJOalJTYmhtT050VTdySjVzRHJpNC9Ra1pYbFloZmhBNVFIOXczd1ZvdlN6RlNGOEN2bHFRb2RYak1zNmxUWk9xNDh4MUNvL1VNNktHcVR3dWIvTmxYT0R5MmFnUkJodjVpM1IvamFOUUZiT3I1ZDJIVWpyMXNUMDkvRU0veFJYbmFRak1SRCsxUWpnWEhBTG51L0JzT1J0dUJEclY2eW16eWNmY3BkTC95REc0WlZKYmMvVkVDcDlPMjQyWlFGZzVJZGRzUjZNT0llRVlZa3c2Qml5cm9RdmhKTXJ1anl3eGdDMng2WkZhWlVzOWtWK2N1R2JXQkhiOXliUHVvcThXOGU3N1pSQkVjSkVWT29DQUpkMDNkOUo5QUtFSGx3UFAxVkZDS1MrWmdKaGFVSEx0M2o0c1cxdjJ3QlJvSkhZUDR1QnVYbSsvcXpMRTFsM2lrMEJ2RHBvMTB6TlFEUnY2eWNhUE5hVHdHTGhIZ1NZU01hL0NETm8yWHJWY1lYM2duZGREWjVQSU1TSVh1dmhlejVIMHVobnFIQ3N5end2SnZ3TjNyUGV3U0tmMjFSRVZrZmVrSDZDLzNvQXV3c3oyZ1ZDWVM4RWl3cnFZQUxaSlBPNHQxazJjQk0xaUh3SFlTMVg5elQxMjFCWTFtWS9Ia1N0RnllK2Jtemh0bHAydmVWV2I0YjJlVUx3SlF0UTlvc1VqQjllQ0dVS2NBQ2JIOWdRYzRhbklNbmNhSlNsWEF0MitMelFHbUV5V3ZFSGtQWU9WeUVTWTQ5Sk5meHBCekFXNVRCNmhMdkNVVjhFbkdrc3BHU0RSSnk0RDc5RkJKVTVVZUlzdHZtYkV1QWVqYjJ2cHVwTk1scVRYQzEzeHpxZ1U0UUZsdlFKMWRPU3VTL0xKSW5GbUVVbERJQVVjSHZUVzNWd3o3bjNXbGdza05naUQ2SWZFZXk5VHhVenFxdFkzeVl2aEFaY2lOK2Zia3dyZVRFbjhRRXdlSHN3bzNNYmdMY0ZtaG1pVGdSQXNZQm5BMTVrOUFGZlhHbndaVmxXYlVrWjhmdFU4eUs0Q1drS3FTZXRVM2VBSUlIUXNqQVQxUTJKOEtnakRmUk1oNTI3NTJ3eUNBalBQdFgwbGlUZU54b2RhZFYzdHRpaERvM05JdW0wakRLNVNuZUZKVnU4MnQ4eVRkZC9ubXI2dDVrbUlES25DK1BJcDRwKzNoN1lXYzVhMm8wL1AyaHV2L0hhai94Ly8zcjlKeS9FUUwrbXRBNjdib3MzUWR4NDloZXNjdU5tZXkvdUQ2V1BDbEQwZ1JJNXFxNEpaY0dNd2VrSEdxdlVvMVpQcVJwRVEraDNqMUh2dHFmczUwTkN3Snl6WjkrUXpXbDUvcFEwMitGUW9Sa1YvUE13YnMzWHVrRUxPT3A5aWh5TjE3Q1E1Rm51YThmV1pTbWVhRnR0QVNsVGtZWXJSUTgxS3NJaHZ4V3FBU0VBZzFCZEhnaWlrcERXdUdERFh3bGhmcnVuaS9oYjl5bFF0R1RXZzdueVUxYVIwS3daTmcwclRzMDJtdnNoVUJERlRPNWE4RSs0R3FqNXRPMjdhVmZmMmdvc3Q3SHBTNEsxUVo2QTV4eGJoOHBDUHN4L1ZHTFBUMFo1ZWtoeWpyYjVVSlFtU2ljL1Z3YWxyTHQ2ckZJREFQNWhQTmpVTC9PQm1tbEFmdFdBTkovOFZ3SHhwT3ZmQ0FoOGIySGY0QXVJWkdGRUJsRHVjenh1a3lBK3JFSjhna1NtVFVqUnhZNWk1eDU5MjdrUVpDV3RleWpYSUVVR3ptcllHelovZWZCK0UycUl3LzNlN0d1MEgrV3p5YUxlMTRaenhlR2gycHVoNXpnczRkM0RENXM3b2gxZ0ZqYTFJaUdDMHNMNHRnYklVc0lVSVZpSnV3ZHc3Y3kwemhEbW1LeGxKd3hvUmVqVkl4SU1UeS9raUlWOHZtTDhBazZnVndhRmRIK0laaERyNS9TWFhjdmFEc0RMaW9JNzlvRkhHWnRaSHl0eE5od0VqSUpDOHRiYlZ1TzFMSDM4aW9NS0NPTHBOYVYrM2VkMCtnNzRRclRPOUFVb3VXVVRHUGFDVEl0Tmk4ZUdxNEdIMktiY0ZQSG9ZZWhMa0xESkcxVmFMOHU4eHZzaG5UejVObWNhMzNkYVM1VE5pc3JncDgxTHJNT3cyQzE2VjRRTG5EZDUvdGVuRFJscFhqOFY1NmxteTdyWTdoMWdDY05PRUg0WC80UVVQZk93SmE4TTl2amFIT1JaU05WTzdaUE8vSGhkL0lkdHZLc25udUZXQVZiN3Y0TG50REpjWEJtdzl1aFZDUmM4cmJmWGdNQXk4ZVVNc0Z1cWtQTUZ0Vlh6QXJDc2Q3RTBJd1I3MUJJWHhNb2pRU2UveHR2aTR6REw1NjBRaUk1ck51MGh4Zzk5d0VhTnEyY0N1Y0s1bjQ2Qi9tcEFvMldQS203ZEtVNTc1bEZCSDRUL0ZWYzJGdTBwZWJ3Sm9xZVdGWnBEN0VldFFCclNZNDN4NmYrSW1DQ0tGcDV2VFkwbzVYa1h2TG9wcWdEenoycEtZak1xUzFVSDJNdVBoTHB2blB3b3Q5SHdvcG93RHVMYU9aMTRCU0MyRktLQmF5eGdEUzRNSDhNK0pXRlFvS2RCNXVCSFpaNXlTbUo4Wm1NOFhtTEZZTHhzT3BvanRQSGVmTWNRRGtMY0xnOUFjWHVtSW1TbzJjNVhTejJuYVlGbFVTTUJCYU9UUVdlcjBFR0swV1hucVgrYis5NW93enNFOWJrbEpETWFoOHhjNHliWFNnUmw3ZzNlYkRrYVpsVGE1dzVQdTA3Wk9LVDZkNXZ3WGFhTk1EM0NPWXJmUGpVK1BkU2Z2Rkh4WE1RU0dzbnB0bExIWE0yclhuNHRuRVI2b0dtZTZuRXhHdE9hWURTTnhWYnZ1b25YWU53Z1NBSXkxMk41VkxSYVB4TjFZR3hRTFN3cnZLYjRQUWMxdEkxNFRxZms3MkFHTG05REgyNkNxVmlZNXBuQ2xjL0Z3c3B2MDBlQk5VZmNOL2p6WStEeFhKTGJRbVRZOXhUUGVkZmNrR25yVHRHWllEeDB6MmtDbDZtZG5RNlBNTnRkVDRLbm1PRjVmNTFNL1NYRDg1M1dRZkg1QjUwUE5qc0w1UHBUZnVjSHRYL3lPei9ablpQYnNUVG5qK3pPN3h3T1FlZVAxSTdpRDZlVmV1SVVpeFY1YlpuL1VMakk3WjBscUY4TGxtRVppZE50WitZdHN3a1NTTVc3WndMRVBKSGhRdWg3QklBMnR3U0FuUXNtdzNNRnltMGtpV3pUR3NCR1BOM0ZNbDM3a2lyeExSTUk4YlRhUFcwY0Y1UUxYcVhZUnpCK3RwL2NNdEQ1M3RZNnZUYXZJcEpaUHhRb1FvWXJnQ2w3T3BXRzRpS0FyYTBDOGRkMFpVOTlpRjA0dDVvVXJ3aFdMdGhzQURZUUVvcWRMUTJaYzAvelJWdFRXcXphOE9BcFlMb1FkaFF1Sk5hZ2dneUdvNFNJaUo2akhXbUJVUFBVc3lUQlJDUWhaRUcxVjhSRDhmcmNUOCsvZlRMMWdzbWlZdkMzaytNaWltV1BkajBJRlZDdDlhMGIzMzhMZ3NQdXJXSFJIQ3JWRSsvYk9IQVRpcjhYY2R4TlRyS2lxSWFBWnhlNDlsZHFCcEc1ZUpqMU1uOUlyR3V2OVNQZGNvQTJyZkN5UldVb1hiNlJHNkxHUGxMUDgwYUI2VnREbGl3ditPYnRNUnErdk9SQ2FPRlRJem05Wlg2S3JNZGFvS0UyMUJHaFFyN1FyVVJpT0RoTEVrOXVHQ1FZZDdZUkZDVEJZZmtRQy9ROXM3TVNpQVY5OFZhNEdMYUVVV3picUV1OTJHSG9VN2NZSENIK0pxakVBcXFFWnB5WXo1QXMrMm53ZWpQYWIzREtRaUpZUnoweFB1VlVickZyWDdhZERTbldMVWZGTllqMnBkc2xBSnN3aHJNUkhtczBlY3lLL0xENVNTMzkycERubFhSRnQzOWhrOG1TSG1TTUtRTTdaSzFvYlRicDNnZEo4LzNIVjZ6NkJwMGhML2plSFo1b0RjRzhMM1ljaTl6Mzk0eTFJVDVyUTdGd3RpT0NXVXlUSkpXTCtDeU5lSDRUNG1DYlNEdDBlS2F2OFdhb0kvajNwMERLSnNqTVpTUTRoYjIrbUNwQXNDd3o2bTlWWjI1RFZKdldYWnNWcmVFemJNVVBMbkRaMTczNkdDWUlocXpOWG1ZWUwzelp5dExrb1lLdEZYcVNMYzNFQ0FESG1seHJrakMzdUxsSkZydXNaVTlMTEJrVnVvc0ZCN2pTeVc2Q2pmWnpkb2hWd2UvdEJPcjdIdGF3b3hJZUs3WkNMbVlQaU80WHEyTXUxS1JLOWppR1RjUENoMG1mYW9iWlRuWEwxNkVOeGZROS9Bb0RZWGZoTlhnMEcvVlk4ZGl1MC9xUzJUdjdwOUVxV0JDM1pYZFZ1QWZFeFdLdEdON3ErWkx1YTllYmRTK0liTWlrV2Nxa3BvV043T1VwYURTaFM0ejdxZmdiME5PRDJLUEdPM1FwNDJOM3BvWTkyZEZwQ2pRQ3NNbVpTOEQrd1B0L3VpVFp1MDYwWUM5WWVWdUg0UE8rMnRCRGxBUFdRN2Vub0VPM2hpWDdHNTVyZEZIMUUxYjdaUVVjM2dXdTRvZ2Y4Tlh0dFFuMkNPR25ZSWNqYTlnUlpQdXc5UlY3d0ZBa2xpZUt6OWNHZVJpaDNhdklhSFMwNGFoQ01oYmFOMzBlUzhjQlZUcDVMSHZPaUJnSUxXTEd3QnBxcS9DY2lZOXdrWjhXZjltWGg3TURiOHFMaEJvSFpqeFZ0RDBaQW5qYkJvMENaeHNBeG1FNUNsU0hCYnVmKy9Ub1JHTTRscDFodUJxTjgwRkt0dUVBRGRSKzhvK0xxSXFvUUZuY2xreDN4VjUyUnNyQ1B0aWpVNlpzVWU1VDltVWhaVFJ4aXluWEUreTM4cnoyMCtLRVcwTmoyVmpDWXZZOHN2MzVMOE5oV1orQ2E2WExHa2tMRGdQQjFKemViU1YwaFJ0dkR6R3NFYlR2UGllUEZrL040dW5SdCszSlVzc3h3eTQyKzBCR29jb3ZzWThvQkxDZHMvSWJ6bUVueU5MMnVFZVcwOGtoaFZVM0VmdHVBQVQvdGtldnl1RVF3ZDB5eHVIQkl2WVI3dHdxQk1DVCtmZ2tHM3JzNWcvOFB4RllIUDB3alZlWVN6THA5VVhBQXVqajkzRHlDNXJPajl3QVNGUDd3QzlpUk1JNHQrVlhIWE8zOE9KOTdqUVZpdkt3YytDRExUbE9BV00weTlIV2hTTEhKZ25wbnB0OU50MjJFdTdYSTJnLzJLSnAyeFVnSlhhcUNxU1BSN3AyT0Nkb0tWS2pnYVhodWV5R3g1a3hudWVyZzdqM3ZkK3BvdzBUVWJCNGp5U0JKT1NqWlorYkFMdk1QVUhvZ0tKNWl2UHg3NGJ3ZS9OeUhsaDdmaVo1Z0tyQTZZQXduVGFkYXBVMnY0VmZQeGp1UkpUQTMrMHBPdDIzN054cDRCcmo4aUlkSldFZFFuNklZZzRtd1I3NXRJRFdBNjdpK296Y0lOeEk3Q0pYSUFtMHN2QlVvVG04QUtPNlRsVVFIL0M2U3QzMHBiTmlHaXlEaFpYL2VsWmhKVEdMeDRJRTV4NndVNTVXNVJ2NVorbWFKeUtYZlRBQkxPdFdjTUdTMFozb1BrU2d4Uml3VGxRM0RERTYxYU1OOTZoNmhBUGdqMmRwUURZMVFkakNGWnVOWThsNDVrZ25HYUNESnJUY1J3VmFUNjRSNDhja3JTejc4MS9rM0dBenB2TFdDd0k5WlJ0UVpEemdCa0FncjdZWFk2Tld3VXZtTXpwRzFwK1QxUS9OQTdISFJvRGFSSkxHbmdXSDMvRkRhM3VKSHNSS0xUQkNuNU5kc3M4UDNxemJuZ3lMNElJVkFZWHdMc094cHdtZU9nMGMvYnYrakk1UVNHVEp6YkpNQTJxeU5BRHU5SjBnbDg1UWc1dXR1Z1cyZldhQUNGV3ZSd0g5VWhSOEFXRnpHci82R2dSZEM5bWlaMzJZZFNLOFlVRElVM1BGSnBXd1FidUJUbkV4ZnRRMlRtQmY5c09xT0Jya0NNTS9yYU9KUnJQR09KcEYxZyswM2VKZUdGU3h6aEl6OEt3ZXY2eEhrVGxLSlVsa1VmVm5KNGQ1M2drenQxN0hBenhFc0gyUXhWNWNhd3EzS05JZVI4bDRvQUpGQStnZk1MdStaNG9JNEdMSGJMUnAxcmlZUFZHNms0NXNpZitmY2JIeDQyWHpyNEhOUW1Uczhic2lVSm1zbCtINm9ZamRkUFNSY3BZZDN3TG5Qb1RjWmxKTG05My9aWVZycW56T3kxWGFZYmJqaGJERytzWW5nT3BKbm4rcml0ZjNUQk1yc0kzSERubUVZQnFuWlVpQ041RWhqN0tud0tCN2htcGVyS0F6Wmo3TFd1QWN4NUJlbTBtc2owQVdsUXBXMjJHVG1rSXlUWnRsVHBFMEROdUtYbXRQVTNOa0lXeWd5Vk4xbzNxYTA3SUNnS3RzWjU0T1FJRWtLRmJybUt0MGxrMHdqSjRwUWhGb3RUMitYaXpHK094YnJRdFVZRFhzclZtd2htRGJPOXUxZ2FWcWpTbmZYQkdHVXgzWTByRlI4Rzg1RU1WVlRSQ3RhU3J5ak9xeGhPTk1BYnFqZmNvZjlMM1pSYk9reVkxTGcvVEJxVzdMZng5bDF5bll1NjBPT3J0bTlTcWFuSHUxZHJWVm0yS1JYb252SVR0bWI2Y2ZGSmJTTnJHSXEzalhUNjZ3bnVFaHBwRHVkWUh3ZDdZQjlrVzl0cG9KTzl1NVFzUFhlTDZ1QklJOUlJb2VqTnloQU1zVUVPd2JGc0hXM3ZkSlplRWlQNk1WdUd0VWlBWE1kekluQW1kcDQ0ZGF4Ny9YUC95cjhvZnJmMXovQUg1YU9HUVpPM2JOeFJJZEg1dVhuUkFUUFVpOVpUWGJpbXJ6RGNzVGQvVGRBaEpxc2xFWE0vRmtEbmNoZGp2S3hzazVZWjVFMC8xYzUvVGFPc3p1U0pMUUdzUTdHeS81M0czbGFuRHdUYldIQWxjZml1OVJGcGJaaTUwdDNTaUJXQTVYc0VsYWlaUS9ITHlhRWljUUkvQk9TTWJWYjQ5Umt0VlFOc2VjbVQ1SVpNK0phbStZSnlMV1pOaUZnV0JpdTM0ZDQ3SmNuVEFTVGQzT0JWWERWenhDaHBKVmh3MHNQcU5uQzhuUElGRDkrSDVzbnJON0ZTVDJZb1pWT3RnenIzSll4eTBsZEJwQjk4RFpRVGhIdllQMUVWM0xkUk1aK0trZHlkbUVTTG1Lc3pYZ251Z3hqRG9IbEYrSGVFR1F1aE11Y0xzVnovVEQxMFdxVDdKUE1IdUF3R3VzNWp3ZGlTK1dqVXFyNHlIYUZQU0QxUkIyNFh5MUlna3NjSnEyWHp1OElKeVkrazAvMWNsLzBwNlJjZVE2MkFWTHp3Rit5N3lKY253aVc5QnRXUHlRRE9xK0FDRXl0VzM5MWpRTGpabUF2aXhpa2w5Tlc3WnNIMEN1VjhkL25lRlVMMWorVFJ1OTJOd1A3bzA5bVIwN2RiYjNaNHQyUkJTak00dlZaYytaUlFEbFJmek5jZG1SQmJXeGxmTzBRcldmd1hOSVdkNGd2dXhjRWpHKzNFVTlKSjFDMnV6cHRISktRaFNWQ00zaGQ2RE51S1hYWnVmQUFWc3VBQlRlM3g1T0lnbnNkbHF4bHh6Z1lGMUIxYldKeE9hVkliVTJBRjFsOE9sY20yVWFKWEo5ZGJQLzdIN0MwTHVwQzlNTlQ3Y3NoTldwOXM4OUZnNG9Lci9LZmdDb2hQaXJFWG1iTGQ0bXVyVmlHeWVkYVRvOVJiSlBmZndhN21IN0RQQU1TN0ZFWHJFMHpzZ1IxTk00TTFsZ3lyZWpSQ3A0UjZnd0dXSFZ4dlQ4dWhMV3FpMkg2QnRIM2ppSllscm5pWnNjb3BneXdZS1lNNi8zN3J6YWdRaE9hdUd1c1BlcThzOW13KzYxU2lVbzFRUWR0M3ZlbkdNaHlHS1U0WkVtaEFmayszSzRia3ZkTElqWjBhYks5NXlMejI3d05Zc0wrL1BZRGtGRE9QTzA4bFNnY2tmVlJZZDVSdXZkVUtTWGM0bFFsSXVBZzNpQU41eENjU3MrWCtnQVNoakw2bDRKS0FwZmY1VFh3WUtqS20zeTNGOWhOZVBGTzhPNzdHeDB5b1ZETk12SGhVQUE4UFhGeDhFbnAyT0F5bnRTOEN3aWEyZEZyeVB2SE5YRzMxQVQ0TkZXNGtEemw3eU9FRFhVaytha0F1NXo2aEU5TU5zcXlZMjZzeWkxdjkwalYvemI3aGRFMmszc1ArMnVOZG16MjI0ejVPS01LUUdQNmkwUUtrUTRPMEtTczhLU1V5ekRaK0hFTXpkRTFhcFMvZVZhZXptdkFDT0h3cnlaQzI0UUVIQUExMTJXNmVKZGtIQTdXZVA0R1hsa1NYeXc2cmJhQUV1WVF6c0wvazRKR1N0c3h6UWd2bXhQc0Z0NjJXQnUzUzUwVmNpcUd5cndnV2JOMlg2d2dkNHRjV0JYNEJiN0ptUURzRGR4OFN4c3MxNGRVL0N1TUZ1WW5LM2VqdmNzelpZdlFMTnpnNDdVTzNVaCtod3FFN2VEWjc5bmRxbWQvYkF2cStteEhKUVgvby9Mb3BvN24yRm5mSmxJczFqT1hMUElXdzUyTm0raDBwbGVsMVBnTEloK29ZSndBeFR4K0lnY0x3cDFPYXZGZ0dGeXhoUG1ZcFI0aTNYSmFhTmx4NWswWjRGWHlwYyttZXhhYVNkWHgzNVVzM1phcDZNeVc5V2hsbW5LZFVZSVd0RDdoTStJWVNQNDh0QWM1UUhQdG44bUJpZURmQjY2bm82TVd3NkpxRjNPbkgzc3hjMjREQjVwM1F5TVp6WUhYa0E5VXdJUjdaL3RGOXEybTU0bWFuK0NsbnEyT212bWxNNTBCd1FrU3dOTlJXNUhYam9FeGdoSlJMSlJIUm8vbGFRNExTUXhlcnBSN0pERWUrNkdmSHFKSzhFYVdPazNOM1I3S1o5OVJxZmt2cGpmeERiUTVOeThReit1RnUvdGRKZEtHRnpPN0pDa1RZZnVlWVJwMjhjMExYeWZZdHlLMk9HTnEvT01uSzRRUFQ2NHR6SGdzZ0VTSVpzd1l0VGdhNi81czdtWnluSTBTL1VkSFFzWXNCSFR1VFNkS0JSTXZ6d3FEWENVaU9JMHBHdEd1MFl0T0IyM2c4TEVIWWRSc01VT1FhbTh1L2xLTE96R2daRktFS0JvQ2drS21LRWhlcUhvY0ZrOGJMK1VmZ05MbTl0R01rZEx3UjZ4azk2emhjTmVSN2Z1MHg0NVp4amxKRHNCdTBSK3MyalgvMU5Mem9aaXoxZnpjaEp6OUFEanpPT0RIU0VEMGlNdnpXTTVHY0IyUVBndTI0Y202aGtiQ2VkSWVkbGxrMDgrdFNja3JYTzBWaE5CYlg5NzBVN0padjl6V284YXZKWE5CYUFDWDk3WFlpU3JkbzFWdHNWQWRYck5aK29BTGtKSWNtN0hlckl0N2NYWlFleE5pK3V6d1JBUEZtV3lsQTVjbDllWnNMQVNld0RmZ0prN2JUZkV0Vm4xT3Q1bytsSXl0dmRqVWYzS1lJQjE1UkNGYm5jTGhLZnAyVW9FaTVuU2l6Vmx0Nkp4L3dGZ0s5Qm5pOWo0TzdIS28rL0hVdlY2Y3EzQm9jcjJjeFMwUElqaTRCYXU2Sndxb0FHaXVkTzdtOHF6aHAwZGR3NGVETXhCWTNnOGtZK1kxcTNPTWp0bi9xZkhjMkZlUkROOTcvRElNVE1oMFBsNHRmYnJjZklJOHF6ZVZnRGNRUEhKODVnNUtJNERhZjloTWN2MSt3OThORzcyUmFVT1hCRFQ3eTlhaDh2YnJQZVlhSFBIQjVVelZUT1kzM1FqVUMvd3hNOUJBYWRlL3U0T2hTVnNPaEhyNlU2N08rZFcyQW9CMVNQSEl5U3l3d0N5cmpmL2lpMEo1bS9iQ1FSaW52R29lNnhwZXRLcWVaVFdaOHV2OUFYRkRsTkFISFkxaUQzczlwdUFDZmxNNVFYeDZ1WHM4ZWRNTVlDUERZSlJzZSsxbmxFM2RzMXVhRjZBa2lUbk5jQmliaWR4dmE3L0diTmlsc2Z4MSsxQ040VFRBV0RuVWJROWMvdkJYZ3hibzcwTkoxK3pTTzh3N1dMeGJIZXdYaWV1bnVvYVhCZi8xZnUzdllnT29iMm5rNHNjNmZYWnhJdzlnT2RGZUVNeERLQ3NPUmpxTTFMYi9QMFI5d2g2anI3emVMV2o4c3FwS3Q3Mm9pQ1duTGxjRllOZ1ZtZ2VURmhhdE02QXJoYndwK2JzUTJ1S0FJRFBDdnorMU12bzhqcUhwWG9WMXFJVUQvMXdOY2NkalhiS3kyRU9DWVd4UGZNbUppQXJwc1dObnZUZlo3ejNHeTZvMkQraFVScEswTDlxeWhjelE3NkowS3poR1c3V1hZb0pPMzN4NXN1RmN3VFY0L2dqTzJtS1F5VDNHVm50L0RuSXZQVXpVdVpodmFQZE9aSy9nYmRPcS84UVJRNXlRV1VUbDkya1plOEVhMm5DRFM5OEFYTEgyRVhWcFMxMDRUUXZUUk9iTUNNSCtVNUZwM2w0cTJhdXR3SEpBV3RJRHJSR0ZoYWJSQWg2emxvdEhsdHVod0U0d29hVmN6ajI3enFWdzhYQkRsUHJCV0JEZEExRmFQU1F5ZnFRR1J5TUxRNVh1TjFZRGpFdWpvU2RpZGR0MXBQZFc2WnhQNURXNTNhWTVyNmNFMXljaCtjMFJNelowNXB3TDJBU29zL2xwRE12ZFlHZjZSeVI4Z2M0K1RJTnptZG1TN2tKN2M5anliQ2VhSGNySzJxZ3Nya1BpY2oyZU52OEJKb0JCd25tOWp3dWNKWm82ZEdSSGl3Z2xNVXN1SThGV1phbmVJNTYwcnVaYnpnMUJEcTBDclJ0V3Bqd09wak4vQzRYSGR3U0lPV3hOR1E2NDhHcFYrdUtFRElmcllHMlFwQk9PeDJtSlR2TlVZTFd1Nk8zeStlUGNNQ2l1TDJkK0NBa0wraUNyVU1FREpoLytkZ2tEeENjelNCYjNQbFJ2RnNEQVgwTzlaU2lPc242N2JjbnF0bnhWQjJ1UFpKam0wR2JaWTN4aGRzL3MyUWtxN01XSWNUM0dlTmJZY2g1Yi9tUE8yVzFsbWVQVmc3ZERoTUowMkViYzhwNklSYmx1VHcyaTA3QTR6NHJmTlJCamtHVkg1MHpiOVlnclE3dk1WVU10MEpFSjhoRjZpQ2I5U0tJVFdoYlNlbWFMcDFIZHBBS3p6aXFoK2pCSTh4enlieE5VZzQ3VE0yVGRXeEVQaHlNdmc3WmNkWm5YSkM5aXdYTUdYNzBkc2Z0b1Q2Uk11aGFoN281RStBSTR0Y3lXQmFEbjVtSlBLVjFEbnE1WHlzRWlyMEZuU3VLWjc0SFJMUFlyVTBnOXNoWGQrTzMrNHlDdzdJa0p3Y2Y0MkVxMHRMMFBURS9iT0hCMmVaK3kzVnNidU8waHpIeDRhM1pydXhnT0V6YlRtM3I1bStWZGJLczMrSWw1elRDVkk3c2FNN05ubm5ad2ZKNUVqUk85aUtBUXdUWkRXS3hXbDkzd3VGZy80YWQ1Y0ZheERPNDdNT09paFZ3enNnOFIrL3pxaTNyanpiTmdkWFJtbVJFYVkybjZQdUZTamduU2ZZUXpvbU9mZVFZQktMTXJ2a3p3YzdPOFp3dngrNmY0ZllQQkVuY2VDVkt6NmxXVGFZcm0yMnBjVFJMRWRBOTJxdjFNYzVVdUNIYTIvNzJCUnNCTEIxMkFLNklIcFBMeHJQZjVCeGNCMGJaZUJmdEZMR1V6RWNCNUZkZXRVMzJFQmZMM1J4ZmlicTZBUElVcmI2MDJUNmZLZEtRdkFBdlk0M3Q1cTAyeWNWNVlPcWdYUHVzRERXcjlWcU44Slg5Ni9raTJJVFZVRDdVWVZvWG9QVG5zajMvYnR5Q2pjWWorUnFjeXpxTnh5NGJlZVhqbU1uYlUyV2c0eHFLci9zZFVYMktRSzAycnNleXA3eDNFSitSQ0M5ZlFLdmw1QitSZkczSG5kc1JsQWEzUXdBSW1WMUxKdmVlNHVobFFrUkc3N3dKS1pmc0NLM3pPUWZVWnlxbXd6QnRWMHFFTkxZV3VGeW1kcXFqVnNEc3dqM3NFdXd0Tmxub3RDS3ovVTZmSFVzbURPZGVHb2Z6czNlZDVzNm5kYXI3REdRTVcwbGVpTFErZ2NOUjJGeG9IUjBBZStDSVFMNkhTY1Y0RHgrWUUyWmVrYWtZRnJJS3NpY0xiQVpnRzdUdFJMN09JNEdzQkhwUTBRNmk5akVSblVoNFNtbE45Y1ZmcWZ4N1F1ZVFEaTk0VlFuRURvb01UdFhhbFNEREd0blBDb0lRMFZsc0E3V0gvMjg5WTV3czRmbHI2SFlpYzJ0U0FLRHdUSHpHQTlBczF5bnV0Q29wK2N3SVQvQlJiYXVlMlJaT0luSjhxVnhQbW50T1dKeEpqaUpiQlZWeGp1Q1FacWlDeTdaclowK1lQWWxPUkF5RVlQU2lGTHQxL2dWY3h6bDNzVFhrT1pPNG5NMW9sL1FaTHNSclBNKy93blF1SElEQ0lqcHVibHVKdno1QnpKNzZoQjYzTk5LWlhPOHI2eHZkWTRKa2Q1QkpxK0swYnJ0OHRtTS9Tbldvc01PRE1ERTA0SEppM0YyRHg0WFA4ckV2NXU4ZHd1TlFMdE1QM1Q2K25LeGJDY04raGl2RGIvT1ppZXVBR1FkT1pQMklHOTVvMWZjOHBNcVNwdFBicmZKVGdBWWZLR052a3ZPUnQwOGJtUmYyMFcxdHNMVHlTK0VwNDNhYzRuTzYvWjFJdnUwd1I3WEU2dXhpL05tU2FmNis3UUo4N0dpUzVUaXVHSmJrZFVySGlwTzJUanNoUHR1enRVMVdQRVZreG1zamtHY3NIdGE0eks5anBHQXhYRGtoWlY5V2hMUFFZMGhDUWZaWW5DOXZuc2xHRDBlblRvOE5MU3MyZUxDZ3RpRUxGa1FQTUJxL1FrM0VkS0VTQjl4M09HRy9PcXpiYytVN08vUU1FbXA5b3pNNVlYVk83UWtlM1Rrc0lVNGZJd005WklOWm16SHFaUmRldDM0WldVVTBIUVNheDBJQUVCMU9qSGtSOGZGQzNPWG4rVlV6TmJPd1RuTTJnZVRJN0dYZG5OUFBWdFdqOSsxSjhubUVUc3NlMVRUc09ZbWlxWnpKenQxQ1VqYkVrbGxJZ2hKcm5tZGJGUWRMWGVNOG1DRytDQ3M3M1ZzOFBVNTludEgwSGl3RmorM251VDByTjYyRWhxY2lxT2Vwc2JGWFFXUkNpd3l1M2NkVkNJUGd6SFNLbDlVVmhBLzdqWHlhRlZ4M255Rnh6dWNiRXVGRGFnZUNFZlJweHJLTEdNY0cxZWM4eG9WRkM1Wk1ycy8yVWdMSFo4TmRQc09hc3NZL0hPQVNwSnk5clFjZGhjL3NjeGg1V1JUOUFsa2VqQklDMkZySHJmTFNSY0NQOHVVV3dta25URTZPVjJEWTRGT3JKZzZkcmFkSDhDdlhxeGMvbmd3QXpNMm5YWlNOcEd2eWhHYUNncUJLV0o0d2xCTVVYck1hUGxmRE05MDVMYm5rWFV1NUhCeTFidDRob0ltY1EvUVltanhySDVBZGJzV1p5Q1U1QnM0SGpIbVVPOC9NaG16cnVNaGt3K0FMaHdUbXBKcnJnMVRwSDE4MVRMTnlNU0FmSVlUck5uK0VKWVIwQ29vOXdmS3dhNXhuUnRnd05DcVJGbnJpMEhtSFBVcmhjdjJpVTFvY2cyL2VIdk5uKzNCY1p6S2tkVW94WGdMa1poY01sT3E0TTB6NzRrMVpNMGNxUDdhR212WlhnSG00cEVOeDAzMDVUZUZrK2U0enN2UjliU2diVS9WT2pFZHNGd3d5M3phMm4yZVpmT1laNEp1dzVtQnZHMDd4Uk1mN1EyeFlSQ2RlV3B3Umc4Zmp6dUQwRVNMVG04TWpyd290ZEVobFErWkRmMTVQVTZFaHpZbmgzMm1FZGNLTUZkM2JpZ1VucDhYNzFORi90amxMTTFnT3BDalVhSnVIUkhSL1owNDNHR0MzeUxmOW44blFuUkVNSGk2Zkt2Nzl5VUJBdE1VRjMxYTRxYnFMYklTMVU3dHZITVhpVitkT090TEQ2aE5ZS2lFL3p1REpPRCtOTWpaN1BzOVAxOC9JSDJ3RXNMK2NZZ1NYeHRpakU4RXNOVHd0enE4QS9kMjJ4ei8yQ0hUMnhPWVdKQ09PQzJFR1grNC9xc2FKL1E3YlFRQlpvWWNHdWxXdTFlb3ZyTkU1cnRzcFI1OFliTVVMN0tBNm8vaDk2NWxydVRCTTFOWUdOODhBbkR0Z0E4RmhtUWpONlNEb0JlWkRCTE9QQmJEakhFTHdWZDVjZlltT3RwVUNUUUkzMm1kSTBoZlNaVzF2UDQvVklhcER4bDZrOW52TEFCT29LZkt1TTdOQ1BMQ2p2eUsxUk9xZWJjOTQ3QWhTdDkvWHVPMlVLSStqTW53Q0RqUXUyKzRFUEtsV05OdG4ydkl5dkVrdmRxVEVwUTROanQwN3ovMGc0TmpDTUIyK0RuVERtQkQwVHNmM0lWQnpnTnZRNi9ZemhsTmFycnBTbFVHZnUrZkZ6UUhGODhVZzQ4ZXRvV0E4Z0Ivd016dk1hem5WL0E3d3RxcnE3czZVZW4xMmhGMVF2TmR0SVZwWUJNa0owNnNGVE1SUkw3TzRsaFUyczhDQjJIWUdhRXF3VC9YZmFZSHljTWl4K1gzNGtNSk1KQjBPbkxjNDByWnJLZmdIclhGV2c2ak4rL3U0SE1UNjRjL2JLR2VXRFFKamdZeGo3NTA2aGlna0RGbkZBNEttZVZ0NURGZThRQllZOUxkNklNNWo4SGJUelBFTjA2MGQ4d1VvUFhFa2ZpMFBQUWlrUVA3eTJRanMybXpCL0ZWS2xudllIeDU4T0E5czNQeVNUVWZ1UjhGMUxBODNDVmk0TXdkTDMyOXdZcFd4M2o2K24vS29hdU1wck5idXNuNmU4VE1PaFhYV1BRcjljUWQ5TEJEczBVa25acG50MDRBOXFLelk0b25hOGF6VHFkZDVYczR3N2FhelFJd2tGQ0RwQUJBZ3dybWNyK2Mwc3BYWnpJdG11QnNSb0RvVUdnMmY1RGFuWWRFNUVkRklMbXFkZ3ZCbWR0RHhkTU5YMVdvTnZROXVFUWliZGFESlBEWHJMVUxiL0RESGVTYmFldzFqd3VOa2Z2aml5YXRidEdkQnVQWER5Tkg3VjVuYzU4RCs0UFMxQndMNUZvamg2WkU1VTdReHlONWZINVBuVThoWVRaOFFVY3lyQnlLb1RkWUJIKzRQd1luSTVxTWVzek95YlNhMU5zcHNNU0NUbk1kK2ZVS3lVMzU4SXBVUEV3aU9rcldiL05UaFkxQ0ZOVmJrMkZQc09CM0VySlZxYi9JNUtwYVB5S3pMTloxQWMwb2RvNDl1eUVGUXhxOFFDZmVaeER6RVRaOVQxcVd6RG5UY0hxQzlmRnIwak0wbjZPd0ZyUWxPRFN2MmZTVnJWc3JwaE1WSlVOZG55Q0NZMElGTUk5NlEySnc4M2o3UGw0eU9XSzhSZWZMQklaL3d0WHhTSGphVW0rb1o3N1FySldQeFhFNXhVQ3dLMUFlc2JLT1NUZkdPZlBtNlJQbk1nY1Y2ek5VU3d5MnNIaVhhTzB2NFNJTVhPZVFTTkR4SjB0UDRmYWJhcWZGaC9zdGFKQUlDdi9ZNGJ6dDlWeFlwSkZVTzBYWXVUenE1L25rb3UvSEExT3hKTEh2MnZKMjBCN05wNXJQR012QnhYeXhGZ3ZvdER3NlhCK2pGYnMrNStsaU8zTGZRR2VkSXArcmVzckc1N3VqYzNZM2RPc1lmWSsvZXZvTzE3OHZCRW5leUJBTWk1RUFSOWJRZEx1TzBjeW05enpSVnJNc0RUc05nUm01NkcvYlFtQ1k3UVlQRnZzRVczcHdMSkZaOVRrYVdJamh6eEVmdlFXS2NBdS80Y1hqVk5nZnBXU0ZyWFdkQnF2dUFoNG9kWHdnNmZvWFA1UHF3Ryt4b0JuejZ0SVJidE04aU9hU3BPZmZVc2JtT2tuak91SXpwdWZBY3lyZnc1c3NScnl5SkZQUFhzOU13eUdrVHVNODZlVEUrWU5iNXo0NHI4ZnpFZG9UUHlBdjRQVTVYbVYxMjRPZ0NxM2R1TUxuSWJDdG8rOGdGQUZtazFEcXpvM3pvbk95TEJlUm1wYU1lUmNGSnpUNlpQdnVlaTQxblM1N1hHdTNndVkvVFdRQlRLSGVGVjY5dFRaa0greW9taTJ6T2M5dWVIY2JuUXgvMEZ4K08xYS8zVENpMTFNaE9ZR0lIckxIN2JDZXJzdGxESjhkVkoraDZ6T2ZEUFJ3bGtwMDVXbndLVFBJdVRkMWNJN3BYenpQeVQ1bGVObHc2M2dKRzlxQUNsSENQTGZ0UWlzOENoalBQenc0NTYxRWNWcGxmUi9aZTJJbFBuWU9heEF3bjgzZ1pjSWdvQy9UNnlWcURiUFk4bktkZHpXb3Yrc05LQjRQUjgvajRGeTVzK3JBN2EzRjhvcFoxbXltY1pGeDAzTnVwdC9ZeGRQMHRVSDY4OVIxbldwV0hOdXdLTXVXUjBRTUhNNjdydTAvNUtmdnpoVlZPVnQvU041RFVKOFE1VU1hSFBWaHFOTXlVbU9xTHhCK1dtWS8zc1ljSWU3YTJYWTZYZGlpaWJXNDQ2ODlNWkd3YXh2dTVKeU9jeHpqc2JmL1RZMTdmTWp1YkN5Q2J6bW00bXdlYjR6cVJPL2xZWWVodzhyR1B5OVF3Nkg2eXNkc0gxK0syNTdBMjJoWmpoMlV4a3hOOWhBOE1FWmVFK0RwcmJOa3NrYU1QOCswK29jN1JURWZ3TGl2R2lJUmVDbmJoOFlIc3Zwc3ljSnc2RUlzZjVWUFNjNWxXVUxmNllMdm5IR0RZZUswY1JKN0FUeDdpQmN5TDNmUkpJdzQveFBNOUtYMGo3bHJzdXpsbmxsZER5dmlJaGVjMkxZMjVmUEZNQncvTFRyNWdmWVJUaHdnMnhBZTIydGtFNk96aFUrSFdjdjY0bytTMG8yMWZvTW1qZTV4SGU1YndGSityTVFGbHgxaDlCSE1mK3VSakhHQlIrZGVvcWZ2MHo1aVlQWDRNSGprU3gvTnFXR1VqMkcySEREcmdLeE5wWVhIZFpwWGlRNWtMdU9DY3NtYndSUUlhWHl5ejhEUGZlb204NlZjL0k0cnF0YXdmTmVxMFVqMkEzYkk0eDBjMzJibnNRMTdzUUQxUHViS3BHTnN3N3p6MlJiU1lSaFdIbnBxdDRyY3RteVo4RW9BbXhCYjVacnFia0Izbk14NWJhWHdpeE9jakhoM0RpVHBzRnVnQ2xzMnVNcXR3eTdiU0JEbjNzRGg4RWdCUHdQaFRUeVBCNVBuZG5WN0ZFdnYvZVo4eGg3Tjk3Q0tNU0NHZkFGc0pSaDZiblRHcll6cTVQWHVzV1oyQ0dJZlBkNElGL3IzaGtkVzR0a2Q0UG43cmtZR2JxSExlRU84QzZ6QllFMm5FVFpPZ1RqcVJRVHNJQ1hlSzJlZWNkc2M2eExhdVUxV3JCWml0T2dQYmEyMU9GL1NRenZHM1ZreGd1WHRHQjVXZHB5Q2RWdjd1V0NZVFV5THNlQzRIV0ZydFlNdEtkQW9RaXNRSjYrTnpOQ3ZZOFp5Ukt3NDh4UUNoYThnY09LTlpWQ3VLZ2s4cGZYekNRRlhLcnZBNUU5OE8yZXpqQjZyOXZpamY1VE4vRytLMU9QeTZPOG9TVW5JN0dyOURlN0Y4SStEc25tV2o5VDJmeHlpTEhJb0ZnSSs2OEo1NzRTeE8zYTdMNThQNGJKMEEvcjNxcFNSQi9FenhlUnFSZlFJVHhoaUFWcGpGbUQ3Y2JKdTI5Umpma3Ywelh1MDdCeCtPNXhDK2ZXNVdQdW1vZWNvWUVWOEFjcnYyUExOTWtHZndSVlpLVU1TSnN5VWlIakhHMTltSHFUdSszeDZUSHM2elNhQmV3SWZEK29vUGRBNzJISCtWdXh6V0o5bXBCdXQzakh5MnJRekYzQ3JvYW1JZm1MdWRNTUNOUWRSc3IvQTVqNXMzdzJCWnZldk1BU2svbGNTT0xEelBKNFdPTCtOR3NSbHlxRHpmWGoyMUR6NDJPUHRvaWNma2NiU21mSjJ6MjR1bEhvN0U1aXFRaWhha1R4K1RHcERlTXoxQzJVZjR6QjMxNWZOVUxQVzUyK05qcVo5NysxeW5ZQkhVNHlOVG5UUnpwamVpYzMwR2VmbDV4dGdwSC9MSkFzUVk0N3dkYVdDVkE0SldjVFRwTU4zdHdUVC9zbXU3VjgrKytDN3JBRGtFOXg3SENWaHc4bnBnN0lPcEhYWG84eHA5cU9PcC92Rmh5TDRZazM3VTA5RkJremJIM2FnREJ4dXdXdDI0T2thMU5XQWxqMElSRkQ2emFaWUdlWHJpT2NDM1dKL2xyY3VXdSs4ODdheWZydjdoZ2FYajhweStWeUptZDVxSEljMldyampNd0dNZ0tCZlUyTm84eStVcjB2aStjVnVqOCtWNGcyMEJrMCtzdzRZOWh1WENpVUdPVFhmcUdwVFpKeUY1K2o1Zm43c21mOXYyNHpxeC93VDR1dXBWUEhJZ05IZ1c1SUZ1UDdNOXZvUkxmZFZIRDhHSUFmZnNBY1I5R3ZlVEQwQWJCZG1IQTN5UGVlRVhMZEtHbTRyN29aN1BYRWY4QkNKdm5ScXY5eG1OVnQxR0h3NTlocDFqSDhSdEsxVXNpMkZsZllidERENnB3bno3emhIRWM1enpycWRRREJhbWhTenA1NW56WmFzWnZvRTVMZ25rNFpUSnMxdmxmRW5UY1h6ejFKZEVINXhta2lEeUJxOUQ4ckZqYkljRmwvTE94ZldiZzdRbXloSFdEd1NCejc0L2JxZjduR09zNnZVMHdRZk5BUm5Pckx0dDVhaHE2L2M4eFdQZU9UbmNzMFdUZkZZcjNSNHBwek9nVHp6QlJ5NnJuQUNFODh5MEp3MldNcW1uaStOOWJhYXhlOENHZm9tQ3d3THMvZmc4ZXpZVlBCeGtyaXRhZ1dDVGdnY3pQVHZFMzRkdUpwK2ltQjJ3ZFNyMVgydlpBRUZqNkRlQXpXS2F4SWR3UHpBM3Uza2lvdU02RDFKS1g1cWVmTXRLdWRKbGhwdG8ySDFNd1p1ZHR3WEVxdWVjOHd1YXNXT0FyR08rNjdRamkrVytQaDkvKzRxVEZpVzBEaUI2U05LRzAvaHR6MFc0d3BpMlJsODN1NUVTOGdQZHlmWjRQb2lSR2J2aVpibWxOWWFXZkZvbGlMQllwalNmZDNZRjRPdUVGTHVYMXZESnUydlk4dTJENnQvMlpXUUlkdTVVbTN3VkM5VzZjK1J0OGJQWkdtZGp5WjNZeEJyYk1YdGI3dm42Q0hFY3cvUDU2cEFWYktsWk9rQzQ1SXJTOVZrTWRkdVVaOE5Fc04za3RrTjN3YmJsN0dCcFF3QzJuZzArbm9vNDhqaWFyOGRqN0xVQVp2OFBQUGZ2RWE2TzBVNEFBQUdEYVVORFVFbERReUJ3Y205bWFXeGxBQUI0bkgyUlBVakRRQnpGWDFPbG9oVUZPNGc0WktoT0ZrUkZITFVLUmFnUWFvVldIVXd1L1lJbURVbUtpNlBnV25Ed1k3SHE0T0tzcTRPcklBaCtnRGc1T2ltNlNJbi9Td290WWp3NDdzZTdlNCs3ZDRCUUx6UE42aGdITk4wMlU0bTRtTW11aXFGWGhDQ2dIejBJeU13eTVpUXBDZC94ZFk4QVgrOWlQTXYvM0oralY4MVpEQWlJeExQTU1HM2lEZUxwVGR2Z3ZFOGNZVVZaSlQ0bkhqUHBnc1NQWEZjOGZ1TmNjRm5nbVJFem5ab25qaENMaFRaVzJwZ1ZUWTE0aWppcWFqcmxDeG1QVmM1Ym5MVnlsVFh2eVY4WXp1a3J5MXluT1l3RUZyRUVDU0lVVkZGQ0dUWml0T3FrV0VqUmZ0ekhQK1Q2SlhJcDVDcUJrV01CRldpUVhULzRIL3p1MXNwUFRuaEo0VGpRK2VJNEh5TkFhQmRvMUJ6bis5aHhHaWRBOEJtNDBsditTaDJZK1NTOTF0S2lSMERmTm5CeDNkS1VQZUJ5QnhoOE1tUlRkcVVnVFNHZkI5N1A2SnV5d01BdDBMM205ZGJjeCtrRGtLYXVramZBd1NFd1dxRHNkWjkzZDdYMzl1K1pabjgveHJ0eVl2RFJmRzhBQUFBR1lrdEhSQUQvQVA4QS82QzlwNU1BQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBQUhkRWxOUlFma0J3SVJFZytzaDBPcUFBQWdBRWxFUVZSNDJ1eGRkM2dVMWQ1K3oyekxwdmVFa0lSaUNDMFFhZ2hkT3FHSU5CRkVVY0VHSW9JRnBQaGh1VjdBY20zWDNwQXJLZ29pSUNBaXZZbDBFa3BDU085bGU1dlptZlA5c1R2RDdHWkRVVVRVL1QzUFBKdmR6Y3llT1hQbW5mZlhDYVVVZnZudFlyUFpVRjVlanVycWF0VFcxa0tuMDBHdjE4TmtNc0ZzTnNOaXNjQm1zOEZtczhIaGNNRGhjSUJsV2JBc0M0N2p3SEVjbkU2bnRQRThMNzN5UEE5QkVPUi9FMEVRSU44b3BlSXJvWlJDM0FBUTcxY0FvSlFTOTlDbFY2L1BTRjVlWGx4VVZGUVRqVVlUcDFBbzRoaUdpV0VZSm9vUUVna2dBa0FvSVNRVVFCQ0FRQUJhQUdyM3BnREF1SThuQU9BQnNPN05Cc0FLd0VJcE5RSXdVa3IxbE5KNlNta2R6L08xSE1kVjJlMzI2b3FLaW9yMDlQUnE5M0dvYkd2d25oRGkvWjM0R1FCUVFraURWOWxHR1lZQklRUU13MEFRQktqVmFqQU1BNFpocUVLaGdFS2hBTU13RVA5V0twWFNxN2lwVkNxb1ZDcW8xV3FvMVdwb05CcG9OQnBvdFZwb3RWb0VCUVVoT0RnWUlTRWhDQThQUjBSRUJLS2pveEViRzR1RWhBUm90VnIvelhRZGhmaUI3YmNKeTdJb0x5OUhaV1VsYW10clVWOWZENzFlRDZQUktBR2ExV3FGM1c2SDNXNi9JcURKd1V5K0NZSkFSSUR6QWpNUElCUEJTUTVTM29BbGYxOWRYWjBhSEJ5Y29sUXFiMkVZcGlVaHBEa2hwQm1BWmdBQ2JwSnB0Z01vcHBRV0NZSlF5UE44QWN1eUYzVTZYWDZ6WnMwdWVBRWN2UXpnTlFCQUVmZ0lJUjVBUnltbFNxVlNCRFlKME9RZ0o5L2s0TllZd0FVRUJDQWdJQUNCZ1lFU3dJV0doaUk4UEJ5UmtaR0lqbzVHZkh3OEVoSVNvRmFyL1RlWEg5aitIQ2twS1VGbFpTVnFhbXBRVjFjSG5VNEhvOUVJazhra0Fack5acnNzb0hFY0o3RXpiMUR6QldZaUt4T0JUYngyUG9ETTQzMWVYbDVzUWtKQ0I1VksxVUdoVUxRbmhMUUgwQmFBNXE5OERYaWVkNVNXbHA1TlNrbzY0M1E2ejloc3RwemMzTnljSGoxNjFMcVpvaHpVQkRkVDgyQjIza0FuQXBzSWFDS2J1eExJaWFDbVVDaWdVcWt1QzNCYXJWWUN1SkNRRUlTR2hpSWlJZ0pSVVZHSWlZbEJmSHc4a3BLUy9EZVpIOWh1bkZSVlZUVlFPdzBHZzZSMnlnSE5icmMzQUxRcnNEUWlxcDFlZ0VZYVlXVU5HTm5FaVJNVkgzMzBVZmVBZ0lCdUNvV2lLeUdrQzREVXYrTzE0SGtlcGFXbGFOYXNtZmRYZVlJZ0hPTTQ3cmpSYUR4Mnh4MTNITnU5ZTdjZ0F6c0o5QWdoZ2plamN3TmJBemJITUF6MUFYQlFLQlQwU3V4TkRuQWlleE1CVGxSUHc4TENHcWluY1hGeC9wdk9EMngvbkJnTUJwU1ZsVWtzelpmYTZjdU94bkVjV0phVkdKb1BPeHFSMjlGOE1EUGl3MTRtc2pMeXhCTlBLSll1WGRwSG85SDBaQmltRnlHa0o0RGdmOEkxdVF5d2VZdVpVbnJJNlhRZU1wbE1oMmZPbkhsb3pabzFUaDlBSjRqQTVnWTA2c011UjcyWm5KZjlqWHJiMzBRR3AxYXJKWUJyelA0bVYwOUY5dGEwYVZPRWhZWDViMEkvc0YwLzRUZ09KU1VsSGl4TnI5ZExMTzFxN0dpK25BTWlvSG14TTBuTmxERXl5SUdNVXNyVTE5ZTNDdzRPdmxXaFVQUWpoUFFIOEk5YzlkY0FiQTJlVTRJZzdPVTRibDlWVmRXKzVzMmJuM09EV3dOV0oyZDBJbnVUL3kwNkdPUWdKd0pjWTg2Rks5bmZSUFlXSGg3dXdkNlNrcEtnVXFuOE42VWYySDZmVkZaV29yUzB0SUZ6UUs1MmlxQW1zalNSb1YwdG9QRThMNm1aZ2lBMENtWldxM1dBV3EwZXpERE1ZQUFkL0ZmbmR3R2J0MlE3bmM0ZFJxTnhWM1IwOUQ2NHZMaUNOOWcxQm5JTXcwanFxa0tob0ZjTGNDS0RFOW1iQ0c1eTlkVGJ1WkNZbUlqNCtIai94ZmNEMjdXTHhXSkJjWEV4eXN2TFVWVlY1ZE01Y0tYd0RTKzFrM2c1QnVUc2pIZ3hOQW5NYkRaYmxscXR6aUtFWkFGbzZyOHlOMFRLZUo3LzBXUXliWStNak55T1MrRXFQa0ZPcHE1NnFLb2lpL1B5b05JcnNUZHY5ZFRidVJBWEY0ZUVoQVFrSnljaktDaklmN1g4d0haMVVsSlNJckUwdVMzTmwzUEEyNWJtZzZWZENkQ0l0ODNNWXJFTTFHZzB0eEZDUnZuQjdLWUF1UzE2dlg1TFRFeU15T1E4UU02YnhjbEFybEdBVXlxVmpRS2NuTDE1T3hlOGJXK0ppWWwrNzZrZjJDNHZKcE1KUlVWRktDc3I4MkJwQm9QQkl5YnRLb05zaWFoNml1cm1aZGdabzlQcDBvS0RnOGN5REhNN2dIYitKWGxUeWxtV1pUZVdsNWR2YnRteTVSa1p3UEV5a0tPeTF3WXNUcTZtdW9HTlhrMXdyenoyVGZTY2l1eXRhZE9tYU5hc0dVSkNRdnhYeUE5c0RWbWE2Q0R3NWZGc0xJUkRCRFZmZ0NiUEVwQURtZ2htbXpadENoZzhlUEJFcFZJNWdSQXl6TDhNL3pvaUNNSTJxOVc2NGEyMzN0cTRhTkVpR3dDbkhPUmtMRTRRMlp1M211b1ZIdUlCY0NLNE5SWWE0dTA1RlIwTGZ2Ym1CellBZ05WcVJVRkJRUU1IZ2NqU3pHYXpaRXU3UXViQTVRQ055TlZPdlY3ZklTZ29hQkxETUpNQStGZmlYL3laeUhIYzJwS1NrdlVwS1Nsblphb3E3NjJxeWdDT1hnbmdMaGZZcTlWcUVSd2NMTEUzYjhkQ2l4WXRFQmdZNkw4eS8xUmdxNmlva0ZUUDZ1cHFEd2ZCbGVMU1pLRG1FOURjQWJVZTZxYlZhczFTcTlXVENTRVQvVXZ1YjhuaTF1bjErclhSMGRFNzNBeE9EbkM4THpWVkZpYlNBT0FhczczNWluc1RWZFBZMkZoSk5XM1NwTWsvL3Bvby8wa255L004OHZQelVWeGNqSXFLQ2lrbHltQXd3R2cwd21LeFNLRG1jRGg4WmcrSWdDYXpvL2tFdEx2dnZsdngwVWNmM2ExVUt1OEcwTWQvKy85OWhXR1ljWkdSa2VONG50OXZzVmkrSGp4NDhOckRodzg3UlpDamxEYndyUEk4VHdWQm9HTGlQYy96VkI0UzVIUTZxVHhjU05RUTVLWVE4YUVyUG9TdFZpdk1aak5NSmhOdXVlVVdLQlNLZnk1akt5d3MvRWVjcU5GbzlBbG9vc2RUcm5aZXpvN21TK1dVc1RPeWFkT21rTmF0VzkrclVDaW13Ujl6OW84VVNtbTJ3K0g0Y3YzNjlXc1dMRmhnSklUd01pYlhRRTJWc1RodkJuZForNXRjUFJVRGU4V2MweVpObWlBNU9SbWhvYUgvVEdEak9PNXZmNUpsWldVb0xDeVV2SjVpQm9HMzZ0bFlHSWVYMmtsa2FVOFNxR1ZuWjBlMGJObnlmb1ZDY1QrQUZQL3Q3UmNBK1hhN2ZkV21UWnUrbmpKbGlzNUxUZVhkNENhcHFPNWdYeXJQUWZWV1QzMkZoWGluWkVWSFIwdGUwK2JObTZOcDAzOWU1TkRmMnNaR0tVVnViaTZLaW9xa2dOdkxlVDI5TXdnYVVUdEZMeWRES1NVblQ1NE1iZHUyN1F5RlFqRUR3QzMrZTlrdlB1U2l6V2I3L0t1dnZ2cHkrdlRwaHNzQkhDRkVrQ1hkZTJjdVVGOFpDNDE1VGNXQTNtYk5taUUxTlJYdWJBay9zUDJWeFdReTRjS0ZDNUw2V1YxZExYazk1UUczamVSNUV1OVVLQzlQSjdOa3lSTEZraVZMSGxRb0ZBL0NIMy9tbDZ0NzBKNjFXcTByNzdqamp0VmJ0bXhoM1FBbnFhZ3lnQlBrSGxUdjFDeVZTa1VieXplVnE2V1JrWkdJalkyVjFOS1VsSlIvVE16YjN4TFlxcXFxa0orZmo1S1NFbFJVVkRRSTVmQk9YcGZiMUx4WW1vZGpRUFJ5MnUzMk8xVXExU01BZXZodlY3LzhCb0E3YkRRYVB3c1BEOTlJQ09HOEFNNmJ3VkZaQmdQMVptL2VNVy9lQWIxaVNFaVRKazJRbEpTRVcyNjU1UjlSRHVsdjV4VXRMQ3pFeFlzWFBlTFQ1TG1lM3NucmNwWW1PZ3JrYXFmTWpzWllyZGFCYXJWNnBqdmx5UzkrK1cxc2dwQ01zTEN3REo3blIxVlhWMy9XcEVtVEEzS0E4L2FpOGp4UDNRSkJFS2hYL1Q3eFBYeDVVVVd6aXVoRnRkdnRzTmxzYU42OHVSL1kvaXIydFBQbnorUGl4WXVOT2drdVU5bTJBVXVUcTUzMTlmV3BvYUdoc3dnaEQvdHZTNzljTDJFWVprUjhmUHdJbG1VL3lzbkorYnh6NTg3NU1vQVR3MFI0QUlJZ0NJTFkzOEs5VVRGbFR3NXUzaUFuT3NDOHdjMXV0Nk4xNjlaL1c3dmIzd0xZYkRZYnpwOC83K0g1bE1lbk5XWlA4MlpwYmxDVDFNNTc3NzFYOGNFSEg4eFdLQlNQQVVqMDM0cCsrU05FcFZMTjZOU3BVNWJGWW5tL2I5KytueDgvZnB3RndMblpHeU9xcUpSU3FSaW0yNEZGNWNVVnZBSE91MXF6SE9CWWxwWEE3ZS9ZU09ZdkQydzZuUTY1dWJrb0xDeVVDa0xLcTNMNEtnYnBmb3JKUVUzTzBoaEtLYkZhclVNMUdzM2pBQWI1YnoyLzNBQnBHaGdZK1B5dnYvNDZvTHE2K3FNbVRacnNKWVN3TXZXVTRGSk9LdlZpY0hLQW83NmFBdmxTVDhVb2dOVFVWRVJFUlBpQjdXYVJxcW9xajNBT01ZbmRWNFZiV1NnSEVlbTVENWJHbEphV3hzZkZ4VDNPTU14Yy83M21sejlCUFIwUUh4OC93T0Z3L0hmSGpoMmZabVZsVmJyVlUwWU9jSzRLNWtSb2pMM0pWRlZjalpxYW1wcjZ0M0lxL0dXQnJhU2tCSGw1ZVNncUtwTENPZVROVlh3NUNieFpHcy96Y3BiRzJPMzJDU3FWYW03cHVlTmR5eDNCeUVodmRWT2RjMzE5UFdwcmE1R2FtdXBIZ0wrQTZQVjZiTnEwQ1E2SEE0TUdEYm9tZzcxYXJaNDFiTml3WG5WMWRlOUhSVVZ0SVlRbzNPb3BKN085RWJuOVRRNXdMTXNTbG1VYnRiMTVNemlPNDFCVFV3T3oyUXdBaUlpSVFPdldyWDgzOFNnb0tBQUF4TWZIWDlYNVYxUlV3T0Z3L0c3bkJ0UG9ONndlbnl4N0VvUDdaeUlqc3o4ZVdmZ3F5a3pPbTJMQjVPZm40OHlaTXg1eGFwZlltZzdGRjg3ZzJKRmZrWjJkZzhMaU1saHNkamdjRGlJQ25EczFpZ2lDd0FpQ29LaXNyRXgyT3AydnFWU3Evd0hvdXZvLzgzRFB3bmR1aW5NOWZQZ3czbnp6VFFEQWtTTkg4TnByci8ycFkvZzl3bkVjQmcwYUJJUEI4S2VONFhyTDJiTm5ZYmZiRzN6dWREb3hZY0lFRkJVVklUQXdFRmFyOVpxUFRRanBIQmtaK1I3THNvdDM3TmpSakZJYVFDblZ3TldZV2tVcFZWQktGWUlnS0FSQllIaWVKMDZuazdBc0M1UEpCS1BSU0VRdnFEeVAxR0F3U0ZXaUt5b3FVRnhjakFzWEx1RFFvVVA0K09PUDhmYmJiLy9tZGZiU1N5L2h6Smt6QUlDQ2dnS3NXN2NPSzFhc3dLcFZxNjVxUFd6WnNzWG4vMTdyZW1nVTJMWjk4Q3hlL0hRM1JrNS9CdiszNEQ3ay9mZ2VIbm4yNHo5OUlaMDdkdzVuejU1RmZuNitSN1Zia2ExVkZlY2h2NlFheXNCUWhBUUhnSE5ZU0gyOW5vaU16YzNVaUNBSUlrc2JGeDBkL1JVaFpPYk4rTlQvOHNzdmtaR1I4YmNZZzBxbHd2dnZ2LytidWk3ZERQUGdTK2JNbVlPU2twSUduK2ZsNVlFUWdrV0xGbUh5NU1sbzE2N2Q3NW0zQi9yMzcvL2ZFeWRPWkFIUXd0VVRWZ1EzcFJ2Z0dCSGMzTDAwQ00vemNEZ2N4RzYzRXhIY0xCWUxUQ1lUVHA0OGlZS0NBdFRVMUVqOVBWaVd4Wmd4WXpCdzRNRGZORTZUeVlUZHUzZWpUWnMyQUlETXpFeXNXTEVDdDkxMjJ3MWZENDBDVzFGUkVVaEVjMHlaTkFZamI3OFhMeTkvRWNPNkpNRUpRRjk0RkhQdm40Q01qRXpjTnZraDdENVhCUUE0dXY1TkRNKzZGM2syQUhEaXhZZEc0dUZsWDdwNStVbE15aHFPZDcvWWlEbFRiMGRtUmlZKzIxM29ZbUNIdnNjOTQ0WWlJNk1YcGo3NkhQSnJIU0p0eE5aUGxtUDBnTDdJN0RzWUR5NTRCYWZQblVOQlFZSFVEcys3SjBGRmVUWEFxQkFhRkFDVldrdlVTZ1dvNEhTQm10TkpPSTVsbkU0bjAyUEFpUEJ2OXAxNVFhVlNmUW1nMjRGdjM4VHcvcjB3OExaN2NMalFKS2V1SG1OWTh1WWFPRzdRVFdNMEduSDI3Rm4wNkhFcER0aHF0V0xldkhubzM3OC9IbnZzTVRnY3J0R1l6V1k4OWRSVEdEcDBLQ1pObW9SVHAwNEJBTDc0NGdzOCt1aWpHREJnQUJZdlhveXNyQ3pNbVROSGJMcU10V3ZYWXVUSWtjakt5dkw1cFBRMWhsOSsrUVhqeDQvSDRNR0RzV1RKRXRoc05nQkFiVzB0WnMrZWpheXNMSXdmUHg2Ly9QS0x0TTlkZDkyRmtTTkhZczZjT1pLNkk4cW5uMzZLNGNPSFk4aVFJWGp0dGRmZ0hUVHVQWWJ2di84ZTc3MzNudlQ5NmRPbnNXREJBb2twTFZ1MkRFT0hEc1hZc1dPbE1aak5aa3lmUGgydnYvNDZoZ3daZ29rVEo2S29xQWdBOE1JTEwyRC8vdjNTOFZhdlhvM1ZxMWRmOXRyczJiTUhFeWRPUkdscEtlYk9uWXVKRXlkaTU4NmRBSUNubjM0YVR6enhCQ29xS2pCeDRrUk1uRGdSTE10ZTluanIxNi9INjYrL2poa3pacUJmdjM1WXVuU3BOQS9MbHkvSHFGR2p1aXhjdVBDRFhidDJ6ZjN3d3crakthVUJBRFNVVWhXbFZDa0lncExuZVViYzNNQkdEQVlEYW10clVWdGJTMncyRzNRNkhVNmZQZzJqMFlqczdHeHMyN1lOUjQ4ZVJXVmxKY3JLeWxCUVVJRGk0bUxVMWRWSnY1K1hsNGQ3N3JrSGdpQkk0NTA5ZXphT0hqM3FjUTRiTjI3RXFGR2p3RERNRmRmMjVkYkR1WFBuTUdIQ0JBd1lNQUNmZnZycEZkZmtoUXNYTUhQbVREend3QVBvMzc4L0ZpNWNDTWgwYzQrdDhzUUc5R2pmRXAxNmpjRFNWOTdCNlJMWGlWTGVnRmtqT3FIN3NHbjRidE42ekpwd0sxcjNtSUFTTzhXdWorZWpSWXMrT0dtbW9KVERJNE5TTUd6Mlc2NzlxdmVoUzRzV2FObTZFMmJNbTQ5Rjg1L0Uzbnd6K0xvVEdOQytKVVkvK0N3MnJGK04wVDNiWXRUanJuMU9yRnVHbGkzYVl2N3JLL0hLMGpsSWlvbEMxclFuTUgvK2ZFeWZQaDNqeG8zRDRNR0RrWm1aaVk0ZE95STFOUlVhQlFGUmFoQVpHVWxDUWtLSVZxc2xhcldhVVNxVkN1S3lLYXBYcmZsMjhPSUhSLy9Zc20wZmVxeWFvNDdTUGJSclNnczY5cUdsZFAzYWxYUll0MVRhZXNUamxGSktUNnhiUmx1MmFFdWZlZXQvZE8ybksyaW5sSlowMmJvVDlFYklxbFdyNk50dnZ5MjkvL0hISDJuLy92MXBXVmtaZFRnYzlNNDc3NlJyMTY2bGxGSzZZTUVDK3E5Ly9Zc0tna0FQSHo1TWUvVG9RYTFXSzMzOTlkZnBmLzd6SDNya3lCRTZkT2hReW5FYzdkV3JGNjJ0cmFVSER4NmtJMGVPcEhxOW51cjFlanBreUJCNjh1VEp5NDVCcDlQUjd0MjcwN05uejFLZTUrbkNoUXZwRzIrOFFTbWw5UDMzMzZlZmYvNDVwWlRTUTRjTzBYNzkra243bVV3bWFqUWFhWHA2T2pVWUROTG41OCtmcC8zNjlhTVdpNFZhTEJZNlpjb1Urc3N2djF4MkREVTFOYlIzNzk2VTR6aEtLYVZMbGl5aGE5YXNvWlJTK3ZycnI5T25uMzZhT3AxT2V2YnNXWnFabVVudGRqczFHQXcwSlNXRkhqaHdnRkpLNllvVksrajgrZk9sZVowNWM2WjAvR0hEaHRIQ3dzS3J1a1pEaGd5aHVibTVEVDQvY2VJRUhUTm16RlZmNjQ4Ly9wamVkdHR0VktmVFViUFpUQWNPSEVoLy9mVlhTaW1sTnB1TkdvMUdPbVBHRFByamp6OVNudWQvS2l3c25BQ2dHWUFtQUtJSUlXRUFnZ0FFTUF5akpvUW9DU0VLdFZyTkJBUUVFQUFrTEN5TXhNZkhJems1R1FFQkFXamV2RGt5TXpNeGVQQmdqQnMzRHRPblQ4ZjgrZlB4MEVNUFllREFnVGgrL0RoWWxnV2xGR1BHak1IT25UdEJLY1c1YytmUXQyOWZPSjFPRDh3WU4yNGN5c3JLR21ESnA1OStpdWVmZjk3ak03ZXFqUFQwZEJnTUJ1bnpqei8rR0dQSGpvWFpiRVpWVlJVeU16T1JuWjN0c2UrcVZhdnc5dHR2Uys5UG56Nk5ybDI3b3F5c0RGYXJGUk1uVG15Y3NjV2xqOGJXcmQvanZxd08yUC9OZXhnemVBZysrZmtjaE9JRDJISFdnSWtQUG8zYlI0N0Jvc2Z1Qmx0OUZMdFAxbDhWQ3huMTZISjgrT295dkxqc1pmUnBHWVNDZzd0UmFHVXdmZDRpakI0ekdXKzgrd0ZtanV2dGVnSjh2d0UwTEFGOHhSbmtGQmtRb0hEaTlQR2pVcHlhZDBpSHpXWURUeWtnOEI2cXA4dnJLVEFVVU14K1k5UERVeWVPWDdsay9zeWhHbnNadHUzT1JmNnZoMURQQitEQnA1L0JtSEgzWUdDWGhFdFBvZTgzQUJGSlNGQVlVV1VMUkdJRWcxMjc5dDBReHJaMjdWcU1HemZPNDdNMmJkb2dJU0VCYXJVYTNicDFRMFZGQlFEZ3A1OSt3b3daTTBBSVFmZnUzWkdjbkl3VEowNEFnRlIxTlNRa0JFcWxFa0ZCUVdCWkZwczNiMGFUSmsyd2R1MWFyRjI3RmpFeE1UaDA2TkJseDNENDhHRjA2TkFCYmRxMEFjTXdXTEJnQWNhUEh3OEFtREZqQmhJU0V2RDIyMjlqNTg2ZHFLbXBrZllUZjk4N0lEUXVMZzRxbFFydnZQTU9UcDgralpVclZ6WlFNYnpIRUIwZGpTNWR1bUQzN3QxZ1dSYTdkKy9HcUZHdVpKQWZmdmdCSVNFaFdMbHlKUTRjT0FDR1lYRCsvSGxwREQxNzlnUUFaR1Jrb0tyS3BXa01IRGdRT1RrNTBPbDBPSG55Sk9MaTRxNUhXNzlybHU3ZHV5TThQQnhCUVVGbzM3NDlLaXNyQVFBQkFRRUlDUW1SNnFzeERETzRXYk5tYjN6enpUZFQzS3BwZ0tpYUFoQlZVd1VBUnN5ZUlZUVF0eU9OMk8xMjhEd1B1OTB1cWFaNnZSNTFkWFZTWUx2UmFFUnViaTVPblRvRnU5Mk9HVE5tNFBQUFB3Y0FmUFhWVjdqbm5uczg2cjNsNXVZaUpDUUVDUWtKVjNXdWphMEhBT2pjdVRPQ2dvSVFHeHVMWWNPR2VURC94dTZMaElRRUpDUWtRS3ZWNHE2Nzdtb00yRmhzVy9NWjloY3llR3p4TW16YnN4ZTNkMURobGRmZWQzbFFBR2cwcnVhdEt2Y3J4L0x1ZlFYSUdHc0RDZmVLbDJFNUJ3QUZOQnFYZzdaRmVoOWs5ZTNzb3B3bUN6aWJIaGZPbjBkaFlSSENrMUlSRzZLOFhQY29Ra0VJcFlKVU84M3A1QmllNTVuaXZPMEp2VnEyZUMxQXEzMERRSUpTbzRZQ0FNZXo0Snc4QUFXVW1vWk9ZcnZORGlYRG82YXlFcFdWMWVpU05RVlp2ZHJlRUZ0aWVIajRaYXVoTWd3anFRc2N4MEdqMFVqZmFiWGFLNm8vTnBzTm9hR2gwaloyN0ZqMDZkUG5zbVBnT0E1cXRWcDZIeElTSXBYRmVlMjExN0IrL1hyMDZORURJMGFNdUtyekRBc0x3OGFORzVHYW1vcHZ2dmtHdzRZTlExbFoyUlhuWWVyVXFmajIyMit4ZmZ0MkRCbzBTQW95dGRsc2lJeU1sTTVwN3R5NVB1ZFFQbmRLcFJMang0L0g5OTkvajNYcjF1R3V1Kzc2MDIxM2hCQmNJWTg3UWExV3Z6Uno1c3huTm0zYWxDaXFwaktBRTRHTmNkdVRJUWdDY1FmbkVrRVFpTVBoOEhBcTZQVjY2ZDZ5V0N3b0xDeVV3SzF2Mzc3SXo4L0h1WFBuc0czYk5reWFOTWxqTUd2V3JNR0VDUk91K3p5bzFXcklTNnRkelgyaDBXZ2FBellsanYrNEVrOHRlQlo3VCthanRMUVFlclByeGxFMDY0Wk8wU3I4c081L0tDd3R4YW92TndDQkxkR3RZd3ppWStJQTFPR1hnOW5JUDdrTEY2cjVLdzY4WlpjTVJDaFliUHBtSGNwSzgvRFl1RXowdnVkRm1Fd21ORW0rQlpiYUtnaWg4YmlsWlRNb0JSWUJha1dET0RWM3hWdkNzaXdVaEFCVUlDekxFWjduR1VHZ3pOQ0hYKzNYcEhubWg1bnR3MmJ1MnJnRzU0cEw4ZTJxTmJDUUVHUjBhWTFiT25SRUlDeFl2Mm9kQ3M4ZnhjbThPbWw4ZlhyM0JLZlhJU0VqQ3c4L09BMXQ0c09Ra2RIbEQxL1lhOWFzd1IxMzNIRk5UL3N0VzdaSWJ2YnM3R3gwN05qeGl2dFVWVlZoekpneG1EQmhBbHEzYnUyeFlIeU5vWFBuempoNjlDajBlcjMwUHg5ODhJSGt0UjAzYmh5NmQrOHVxUWxYa2wyN2R1SGxsMS9HYmJmZGhsZGVlUVZ0MjdiRndZTUhyemdQM2J0M1IybHBLVmF1WElrcFU2WkluMmRrWklCbFdVeVlNQUVUSmt4QVFrTENWUVdmVHBvMENldlhyOGZodzRldnlYaXUxV3BSVjFmM3A0QmZlbm82amg0OU9xTlhyMTR2RlJRVTlQRGxXQUNnRUFTQkVkbWI2RFdsbE1LWFUwSE0xckhaYkZJSi9ieThQSnc5ZXhhVEprM0NvNDgraXFGRGgzcFVDZUU0RHJ0MjdjTFFvVU92eTNrVkZoYUNVZ3FIdzRIZHUzZWpRNGNPVjF3UE9wMU9zamYvOU5OUGpjV3hNWGpzcGYraWV2NUN6QmczQkJ3Rm9sdDJ3Y3N2ejRGUzNRVExYdjhYWnM1N0hnUDdyWUk2ckNtZWVlVnRwSVVDR0h3blJxVjlnK1VQMzRaUFcvZERpNlpoMEYzaEpEVEovZkhLMGdmeDFMOFhvZSs3SEtLYWQ4VnpDNmZnOU9uVGlPNDRCSm10TCtEbmJ6NEQ2K1NoMElhZ1pZb0dBWEI2eDZoSjhXbFFLQWdSQkNJSVBBSEFESjc0eU5UWC8rL2had2pScGl4NCtYVVVQVElQSTI3dEIwVkFCTzViK2hxR3R0SUNHSW9sRHc3QnN4OCtqUjlYeDZKOXdxV3FvOE1mZmg2UGx6NkJOeDZmZ3VVOEVOMnFLMTdxUHhsQStCKzJZRm1XeFo0OWV5U0QrTlhJMHFWTE1YUG1UR3phdEFrVkZSVll1blRwRlcvbzhlUEg0L1RwMDhqS3lrSk1UQXdVQ29YazVtOXNEQWtKQ1pnN2R5NG1USmlBbUpnWUFKRGM3ak5tek1EQ2hRc1JHeHVMMk5oWUNJSUFnOEdBc0xBd2pCczNEdlgxOVRDWlRCZzFhaFNDZ29Ld1pjc1daR1ptWXZYcTFSZ3pab3pyd2FsUVNEZkk1ZWFCRUlLSkV5ZGl5NVl0U0VtNVZOZHo0Y0tGZVBUUlJ6RjI3RmhRU3RHdVhidXI4cWFLUFFOYXRXb0ZwZkxxd3p1blRwMktPWFBtb0huejVoZzllalNtVHAxNjNkZkQ4ODgvangwN2RxQzJ0aGJIamgzRFN5KzloUGZmZngrdFc3ZkcxS2xUTVdyVXFJRnhjWEhOQmcwYTlOYlBQLys4MFoyR0phL3N6QU1BcFZSd3gyNUNvVkJRa1JDbzFXb2FIeDhQczltTVU2ZE9TV3p4czg4K1EvdjI3VEZ5NUVnSWdvQTJiZHFndUxnWTk5NTdyOGY0ZnY3NVovVHQyOWVEeVFQQWhnMGI4TnBycjhGa01zSHBkT0xubjMvR0k0ODhna21USmpXNkhrU1FHanQyTFBSNlBYcjA2Q0daRHk2M0hod09CKzY5OTE0cDlPYUtaWXRZaHdsV0I0UHdVSy9PMDRJVDlYbzlna09qb2ZaWUJ3TDA5WG9FUjBaZVUvU3Z3RHFnTjlzQUJqaWJrK01SemxGZFhZWGFlaDBjTmx1RGJBSTVxTW15Q0pocGQwOVZMUC9QZnhkRWh3Y3Rna2Nnc210ODJ1QndhTlNlaE5WbTBRUEtZR2g5cUtTc3d3S2pqVWQwK0I5ZmF2bnMyYk00Y3VRSTdyNzc3bXZldDY2dURxR2hvVkNwVkZlOWo4MW1BOGR4SG1Xa3J6UUdsbVZoTnBzUkdSblpZSUhaYkRhRWgxOGI4SnRNSmhCQ0VCd2NmRjNtd1dBd1FLMVcvKzQ4eUNsVHBqU0l1OXU0Y2FPSDUwL3NrWEdsY3k0dUxzWWpqenppOFZuNzl1MnhZc1dLM3p5K21wb2FhTFZhTUF5RGYvM3JYODdFeE1UWDNudnZ2WTlPblRwbGQ2ZGtjZTdONmE3ekpoQkNCSGtoUzQxR0E3VmFUY1hhYm1McEk3Rm9aVlJVRk9MajQyRTBHcEdUazROVnExWjVuT3VubjM2S1BuMzZvRldyNnhmUUxpYnJ5ME5CR2xzUDJkblpXTGh3SWI3Nzdqdm85WHBFUmtiZVhQWFlkRG9kY3J4QVRYUVNpTTFXNU4yalpLQW1yNXZHVkZaV0prVkZSVDFEQ0prQnYvamxieXFDSU9EdXUrOUcwNlpOd2ZNOFRwMDZoYSsvL2hvaElTRXJkK3pZOGVIdzRjTkxDU0VPTDNEanZjQk5LajB1Z3B1OEc1WUlicVdscFNnb0tNQ3NXYlBRcDA4ZnRHL2YvcWJKTHhXQmJjT0dEWmNZL2MwQ2JISlFLeWtwOFFBMWVjTVZIMHhOVEkxaUJFRWdKcE9wbTFhclhlaXZtZWFYZndxNFpXZG53MjYzSXowOVhYSWc4VHkvSlRjMzk3MTI3ZHFkQnVDUXNUZW51N2tNNys2eElJaU5ZK1RnSnBZY0Y3MlhZZzIzbEpRVXFXRGx6UUp1VnFzVmhZV0ZIa0hRTndXdzZmVjZaR2RuK3dRMWthbjVVajlsV1FTRVVzclliTFpoYXJWNkVmeVZiZjNpRjFCS0Q1ZVhsNytUbUppNDF3dmNPRGU0U2N6TlhYNjhBYmcxcHBhSzRKYVdsbmJOWm9jYklYOTZFcnpCWVBESjFIUTZuYzhLSFY3cXB3UnFEb2Rqc2xLcFhBU2dsWDlKKzhVdnJrcTlDUWtKa2JXMXRXOUZSMGR2cHBReXhCVTRSaWlsSE54T0JjR2RVdUFtT1JRdXh3UDFBWlMrZmdOcGFXbS9LUzNxYnd0c0pwUEpwMDFOQkxYTHFaOXlVR05aOW1HRlFyRVlRSXgvT2Z2Rkx4N0FreElWRmJWWXI5Y0hoNGVIZitNdWQwUzhOVFlSM0p4T3AwOXdhd3pVeEsxRGh3NDNWYU1ZNXMvNllZdkYwcWlqd0VjVFk5SVlxSEVjOTVSQ29WanVCN1hHN1EvMzNYZmZUVFdtd3NKQy9OVWFkYi84OHN2bzNiczNoZzRkS3FVYVRaNDhHWk1uVDhiMDZkT3YrKy90Mzc4ZjE3SG5iMHhZV05nU3M5bDhMd0N0TEpoWG5xa2daU2s0blU3aXJscEpSN1FBQUNBQVNVUkJWTk1tSmREYmJEYVBRTjY2dWpvcGVUNC9QeDg1T1Rtd1dDdzRlL2FzbE5IaExmUG16Wk15WlJxVHpaczNTeGtPZnpsZ3M5dnQxK0w5SlBJT1VxSk43WjEzM2xGeEhQY3N3ekF2d3BWUzRoY2Z3dk04amh3NWNsT042Y1VYWDRURllwSGVHNDFHeko0OSs2YWR3NU1uVDJMTGxpMzQ2YWVmc0czYk5uVHExQWtxbFFxdnZQSUtubnZ1dWVzK3Z6VTFOVmkrZlBrMWhlejRrb3NYTCtLNTU1NFQzd1lFQlFVdHJLeXNmRWlqMFFRMUFtNEtRUkNJdlB5UnU5S3VCRzRXaXdWR283RlJjSHZpaVNjOFVxM2tjdXJVS2FsZ1FtTlNXVmtwRlNmNFM2bWlITWRkMXZ2cFpWTVRjejRoTDhmeTY2Ky9CcWVucHk5aUdPYkp2eU1ZSFRod0FNMmJOOGYrL2ZzUkZ4ZUh2bjM3U2psMVpyTVoyN2R2QndEMDZkTUgwZEhSMG43bDVlWFl0MjhmSWlNak1YRGdRSjlWRms2ZE9nV05SaU1WRWF5dHJjWE9uVHNSR0JpSWZ2MzZlYWdUUjQ4ZVJWNWVIdnIxNjRmYzNGemNldXV0a2xxeWI5OCtsSmVYbzNmdjNraE12TlFPb3F5c0RQdjI3VU5vYUNnR0Roem9rZVlGdUxJaWFtcHEwTDU5ZXdCQVRrNE96cDQ5aTkyN2QyUGJ0bTBBZ0w1OSswcnhaOFhGeFRodzRBQ1NrNVBScTFjdkNRZ3ZYTGlBbUpnWTdOKy9INm1wcWVqU3Bjc1Z4MEFweGQ2OWUxRlJVWUdlUFhzaU9UbFoyaWNuSndkUlVWRW9MUzFGYm00dSt2WHJoOFRFUk96Y3VST0hEaDFDUkVRRTl1M2JCN1ZhTGMxRDA2Wk5ZVEtaR21XbGh3NGRRbEpTRW5yMTZnVkNDSTRkTzRiVTFGUm90VnFjUG4wYW5UcDF3b1VMRnhBWUdPaVJZN2x1M1RxTUhUdjJpdXZoK1BIamlJNk9SbEpTRWdCSWViT0RCZzNDc1dQSGNQVG9VZXphdFVzS2NCMDZkQ2kwV3UzYzFxMWJxNGNORy9iUnl5Ky9ySGVybEtMZHplbFdTM2wzcVh4UkxZWEQ0U0NDSUZDajBRaTFXbzNFeEVRUFZaUVFncEtTRWdRRUJIalkyOFRyNTZ0czA5R2pSNUdibTR0dTNicDV4TUFKZ29BZE8zYWd2cjRlUTRZTWtZNzN5eSsvb0UyYk5nZ0xDd1BMc2podzRJQjBMZXgyTzdadDJ3YWxVb2wyN2RyZFdNWkdLZlVBTlhreXUzZlRGVmx2QWc5UU8zLytmRVI2ZXZyU3Z5dW9BYTR5T2s4KytTVDBlajJXTFZzbVpRUG9kRHJjZHR0dEtDMHRSV0ZoSVVhUEhvM2EybG9Bd0xGanh6QnAwaVRvOVhwczNyd1pEenp3UUlQamJ0bXlCZlBuejVmQThPTEZpNWc0Y2FLVS9EMW16QmdwTFdYMTZ0VjQrdW1uWVRRYXNXalJJano5OU5NZUtzWFhYMzhObzlHSUtWT21JRHM3R3dCdy9QaHgzSDMzM1RBYWpkaTVjeWNtVDU3Y3dEYXpidDA2andUbXVybzZsSmFXUWhBRUZCVVZvYWlvU0xUellPZk9uWGpnZ1FkZ3NWanc3cnZ2U29Hc3BhV2xtRFZyRnQ1NDR3M29kRHJNbWpVTHUzYnR1dUlZNXMyYmh5KysrQUlta3dsVHAwNzFLRlcwYXRVcVRKOCtIZSsrK3k1eWNuSlFYKzhxNmxCU1VvS2FtaHJZYkRZVUZSV2h0TFQwaXRkdjU4NmR1TysrKzJDeFdQRFJSeDlKa2ZJYk4yN0VrU05IY1Bic1dUenh4Qk1BZ1BmZmY5OURQYU9VNHZ2dnY4ZnR0OTkreGZWdy92eDVQUC84ODlML2JkMjZGWjkvL2prWWhrRjFkVFVxS3l2QnNxdzByNkt3TER2TDRYQThQSEhpeEdnQVl2RktGUUNsSUFnS0FBcEtLV0ZaVmxKTFRTWVRxcXFxWUxGWVVGMWRqWnljSEEvbVZsVlZoYTFidDZKZHUzYkl5Y2tCcFJSbnpwekIrUEhqVVYxZGpjOC8vOXhqN2w1OTlWVzgvdnJyc0ZxdGVPU1JSN0JqeHc3cHV3MGJOdURvMGFNNGZmbzB4b3daSTdINzVjdVhTeVlNbzlHSUo1OThVZ0xDcVZPbll2djI3Y2pQejNkbGZ6Uld0dWlQMkU2ZlBvMXZ2LzBXcjd6eUN1Yk5tNGVwVTZkaTVNaVI2Tk9uRHpwMTZvVFUxRlFrSlNVaE5qWVc0ZUhoSkNnb2lHZzBHa2FwVkNvVUNvV3lzTEF3VGhDRU4rbmZYSVlQSDA2enM3TXBwWlNXbHBiU0RoMDZVS2ZUU1d0cmErbXhZOGNvcFpTeUxFdG56SmhCdDJ6WlFpbWw5UDc3NzZlYk5tMmk3dExRZE1HQ0JWU24wMUdqMFVqVDB0TG8xcTFiNlpBaFEyaFZWWlgwTzZXbHBmVE1tVFBTOGJLeXN1anAwNmNwcFpUMjc5OWZHa041ZVRudDNyMDdwWlRTNDhlUDB4RWpSbEJYTldwS3Yvbm1HL3JVVTA5UlNpbjk5Tk5QNmV6WnM2blQ2WlMrczlsczB1OEpna0N6c3JLb1RxZnpPTithbWhyYXRXdlhCdk13ZVBCZ2FRd1dpNFYyN3R5Wk9od09tcE9UUXdjTkdpU040WU1QUHFEUFBmZmNaY2R3NXN3WmV1dXR0MUt4UitldVhidm8rUEhqcGQrYVAzOCtmZjc1NTMxZWowMmJOdEZaczJiNS9NNW9OTktPSFR0NmZEWnExQ2g2K1BCaFNpbWxITWZSbmoxNzB2ejhmUHJkZDkvUmQ5NTVoMzc0NFlkMDRNQ0J0TEt5a280ZE85WmpqbzRjT2RMZ3R4cGJEM2E3bldaa1pORGk0bUpLS2FWMzNua24zYkZqeDJWTEp4a01CcHFXbGtZNWpxTjJ1LzJEMmJOblp3Qm9BU0FCUUJTQVVFSklJTU13R2dCS2htRVVHbzJHSVlTUXdNQkFFaHNiaTRTRUJEQU1nMDZkT3FGUG56NFlPWElrSmsrZWpDWk5tbURGaWhYNDl0dHZwUnA1SDMvOHNYVC85K3ZYRC9uNSthaXNyRVJHUmdic2Rqc29wVGg0OENDbVRKa2lsUzFhdEdpUnRNLzA2ZE94ZnYxNlVFb3hkdXhZbkRoeEFwUlMxTlRVb0d2WHJxQ1U0cGRmZnNHSUVTTWdzc3kzM25ycnhxbWk1ODZkdzRVTEZ5VDFVOTd6VTdTcE5SSjhLekcxNU9Ua1JZU1EyZmdIaUppdjJMUnBVekFNQTZQUmlKQ1FFS3hldlJvclZxeEFhR2dvY25KeXBDZDdZV0docEY0U1F2RHZmLzhiZ012emJMZmJNWC8rZlBUczJWUEs3d1JjcFdPZWYvNTVXQ3dXQkFjSG82S2lBanpQUzZ4SVBKN2MxcE9ibTR2eThuS01IRGxTc3VHMWJldXFkako1OG1RVUZSVmgyTEJoU0UxTnhiUnAweEFRY01uOGVlVElFYVNrcEZ4VjNCUFA4OGpQejhkVFR6M2xNVjR4K1Y2cjFVcnFlWEJ3c0ZUSnBMRXhGQlFVb0czYnRwSjZucGFXSnRYakYrVjZwUVJkdkhoUlVyMlVTaVhhdEdtRHdzSkNwS2VuWStmT25YQTRISmc2ZFNvT0hqd0lwVkxwTVVlTkpYbjdXZzhSRVJHWU9uVXFWcTFhaGNtVEo2T21wZ2I5Ky9lL3FyWGwzaDRZTjI0Yzl1N2QrOEdKRXlmcXZiVXJkODRvTCthWDhqeFBXWllWKy8vQlpyTkphbWg1ZVRsaVkyTlJYVjBObFVvRmhVS0IwNmRQUytXazVPc29QejhmRm90RlVyY0ZRZkJZRTNMelJXcHFxa2UxRjE5U1ZsYm0wU05WcFZMZEdHREx6OC8zQ1dvK0tuUTBDT2tRYldvdFdyVDR4NENhWEl4R0kxaVdSWEJ3TUxaczJRS2owWWd2djNSVkpYNzAwVWVsLzR1T2prWkZSWVdVRUw1bnp4NTA3OTdkNVNGaUdHemV2Qm56NXMzRGUrKzlKK1Vycmw2OUdvbUppVml5WkFrQWVLZy9VVkZScUt5czlMQ2ZpWiszYmR2V1o0WFp2THc4UFB6d3czajIyV2R4N05neFBQamdnOWkyYlJ1aW9xSXVlOU1TUWp5cXN3S0FRcUZBZUhnNFB2endRNmtza2lpaSt1MUxHaHREVEV5TXh3MVNWbGJtQWZMWFU4VGZFcHZ1aUwvVnZIbHpWRlpXSWpBd0VJTUdEY0xpeFlzOUdxWllMQlljUDM1Y2VpaGRhVDBBcmlUOEVTTkdnR1ZaVEpzMnpjT3U2bXRldlVXdFZqL1FwazBiWWRTb1VlKy8rT0tMYUF6Y1JBRGlPRTRLQlJFZEFZUVFYTHg0RWQyNmRVTnRiUzBVQ29Ya1FEaCsvRGg2OSs0dEhVOWNROUhSMGRpMGFaTlBPN0I4ek9YbDVjak16QlRIS2ozQTVDYU9xS2lvQnVyOEh3NXNKU1VsVXRNVmI2Ym1iVlB6RmRMeHpqdnZxTnlPZ2puL0pFQjc3NzMzTUdYS0ZLeGF0UW9qUm95QVNxVkNiR3lzVkErcnVMZ1l1M2J0a2tyc1RKczJUZktrNWVibTRxdXZ2c0tHRFJ2Z2REcWhWcXVSa0pDQXQ5NTZDN2ZmZmp2YXRXdUgvdjM3SXlZbUJsdTNic1dPSFR0dzRzUUpuRGx6UnJLeFRabzBDUXNYTHNTRER6N29rWVBYdDI5ZnZQTEtLM2oxMVZmUnYzOS83Tml4QTBsSlNaZzhlVEtPSERtQ2JkdTJZYzZjT2FpcHFZRmFyWmFldm1MbGlPWExsemM0MS9Ed2NDZ1VDbnoxMVZkbzBxUUoyclZyaDVpWUdEend3QU9ZTTJjTzVzMmJoN3E2T216WnNnWC8vZTkvTHp0dmpZMmhhOWV1SUlUZzdiZmZSa1pHQnBZdFc5YWdTc1cxZXBzM2JOZ0F1OTBPanVQdzNYZmZJVFEwRklNR0RjTDk5OStQSlV1VzRNa25uOFRldlhzUkZoYUd0TFEwRUVJUUdCaUl0bTNiSWprNUdVVkZSUjc5QURadjNvemh3NGY3dk5sOXJRZkExVTFxOE9EQjJMQmhBL2J0OHl5QW1wU1VoT0xpWXZ6d3d3OElDQWlRQU1KYkZBckZRd3NYTG5UdTNMbnovZjM3OXpld2k3cmY4NElnU0hGdWxGTGljRGdvSVFUeXB1TjZ2VjRDdHRUVVZMejc3cnVJakl5RXpXWkRjWEV4QUtCMTY5Wm8zcnc1RmkxYWhQSGp4K1BZc1dPd1dDeVlPM2V1TkE5ZHUzYUZ5V1RDL3YzN3NYanhZZ0JBMTY1ZDhmbm5uOFBoY09DSEgzNlF4cGVabVluLys3Ly93M3Z2dllkV3JWcGh6Wm8xVUN4ZHV2UVB1em1ycXFwd3p0MmpRTjdNMkdBd2VCU0k5RTZUa3NlcHJWKy9mZ25ETUF2K1NhRDJ4UmRmWU5Tb1VUaDQ4Q0JhdEdpQnVYUG5RcVZTSVRFeEVZbUppZGkzYngvaTQrTXhZY0lFUkVWRklURXhFYTFhdFVKU1VwS3JGcFZTaVJkZWVFSHlMQ29VQ25UdjNoMUJRVUhvMGFNSHpwdzVnL1QwZExScjF3NHFsUXFIRGgxQ1dsb2FoZzRkaW9TRUJNVEV4Q0FqSXdOV3F4VkhqaHhCdDI3ZGNPalFJVXlmUGgwS2hRSzMzWFliY25OemNmVG9VYlJwMHdZVEprd0F3ekJJVDA5SFVGQVFkdTdjQ1l2RmdzV0xGMHU5S3RldFc0Y21UWnBJSGpxNU1BeURYcjE2WWQrK2ZhaW9xRUJhV2hwQ1EwT2xpcktpK2pacjFpeUpxUVFHQm5yVTZZcUxpME9MRmkwYUhRTWhCQ05IamtSMmRqYU9IeitPaVJNbk5tZ3kwckpsUzhUR3h2cThKbEZSVVEwOGQ5dTNiNGZGWWtHM2J0MWdNQmpnZERxUm5wNk85UFIwaElXRllmdjI3WWlLaXNLenp6NHJsZlNKaUloQXQyN2RFQjBkamVqb2FHUm1aa3FlNk9lZWV3NlBQLzU0Z3lqK3h0YURuRHcwYjk0Y0F3WU04TmhQcTlXaVk4ZU8yTE5uRDNRNkhUcDE2b1NBZ0FBb0ZBcDA2OVpOK3Ird3NEQjA3Tmd4NDg0Nzc3Uy85TkpMcDJXTVQwUTRLcXFjY2lhblZDcUo2TlFLQ1FueHFLUkNLVVZrWkNTYU5XdUdFeWRPSUNrcENWbFpXVWhMUzROV3EwVldWaGFxcTZ0eDhPQkJ4TWJHNHQ1Nzc1WFU3ZDY5ZXlNdkx3OWxaV1Y0OXRsbkplOTF0MjdkVUZwYWlweWNIRXlhTkFteHNiSG8ycldyVk9ycThPSERxS3FxUW54OC9CK1hLNnJUNlpDZG5lM0Ixcnl6Q3J6RE91UnhhbUx3clR0T3pTOSs4Y3NORUxQWi9PK1FrSkQvQWJDNUs0TTRBTENRVlFZUmMwdVZTaVYxTTJJcTVwV0tTZk1SRVJGU1htbHljakpTVWxLUWxwWjJ3NUxtL3hCVjFHYXpTUjNhS3lvcVVGdGJLN1hIdTV6NnlmTTg1R2xTRE1NczlpODF2L2pseGtsd2NQQmNuVTVuallpSVdPZG1aaFR1V0RhdjlDdnFJblhFbGFORkNHVVlCZ3pEZ0JBQzhXK2xVZ21WU2dWM2NqMDZkdXo0dTJ2ay9TbkFSaW5GK2ZQblVWaFk2S0YreXF0MGlCNVFlWkZJdDZ1V0VSUGEzYm1mL293Q3Yvamx4a3BBZUhqNFkxVlZWWmE0dUxpdDFKVmM2bTF2Zzd1SGd1QjBPa1hQcUFoeUlJUklkalp4RXdGT285RWdQVDNkWnhPWG14clk1S0FtTmpJV0hRVVdpK1d5bFc4RlFTQTJtMjJZdTBxSFAvZlRMMzc1Y3lRbUppWm1aa0ZCZ2JGRml4WUh2SmdiQlVBRlFSQzlvNUFCR2hHTFY0cWJITlJFWUFzSUNKQ2FLdjhsZ0syd3NCQVhMMTVFV1ZtWlQwZUIzVzV2a0ZVZ0MrdGdUQ1pUTjNjOU5YL3BJYi80NVU4VVFraEtjbkx5UThlUEg5ZDM3dHc1eDgzY1JKV1VpbjBSUk5ZR21ZTkJWRVc5R1p0U3FZUmFyWVphclpiNm12NVJjdDI4b2xWVlZaSmRyYnk4M0tkZHJURVBxRmpPT3pRMDlDVkN5RUQvc3ZLTFgyNEtjR3NhRXhNVDJxbFRwOU5mZi8yMXpRMWVrcWNVUG1xMnVWVlM4Vy81NTVCL0xvYSt5SHRjWEZmR2RqMWFoNW5OWnB3NWMwWmlhMklPcUhlYlBJZkQ0ZUVCRmRYUHUrNjZTd0hnbWZyNmVuODViNy80NWVhUzRabVptVFVwS1NtdlhiaHdRWkF4TjFmNmdmc1A5eXZjV1FuRW5VSUgrZVowT3FYTlhUVUU3ZHExKzBQQVRmbDdhejVSU3BHWGw0Zmk0bUpVVkZRMHNLczFWdExiN1N3Z0FKaGx5NVl0Y0RxZE42VHhpdGhUMGJ2cXhKWEVZckVnTUZBTFFoai9VdmZMUDQyNTNiMTE2OWJxbEpTVXo5MDRKc2pCalJBUnh3VEs4enpoT0k2NmFSc1Z2YVJ5RmRYYlk5cStmZnZyN2t4UUJnVUYvcTRENU9YbG9iYTJCbnE5RG1hekNWYXJCWGE3cEhMS0tuUTRpUmlkTFBlQTF0YldUSFU3QzI2SThMd1RUaWVQYXoxdm5VNkh5TWlJYStvNWFUQVlFUklTN0RPUzNDOSsrU3RKVUZEZ25QejhDNVczM0pLeUZZQTNjNVArVHhBRWdlZDVPSjFPS0JRTTRUaU9LcFZLaWFIWjdUWllyUmFZelNibzlUclUxdGFnb3FMOHVyYnVBd0RsdGR5bzNsSldWb2F5c25KVVY5ZWd2bDRIZzhFSXM3bEJqd0kzdUVtZ1J0eFVsZFRXMXZRTkNBaDRCamV3THB6cmFTSGd0NXkzYUFDOVdqR1pUQWdMQzhYdm1XTy8rT1VtRVdWOGZQekR4NDhmcSt6Y3Vjc3hYOHpOL1VvRVFRRFA4NVRqbkdBWXppdmtRd21WU2cyMVdnT05KZ0JhYlNDQ2dvSVJHaHJhSUNmNGR3MjJzV3FYVjVMUzhqSWNQM3NCT25kR2djRndLYW5kYkxiQWJMV0J2UVJzSWxzanZDQVFLbENtcUtnd0lTZ29hRDZBbEJ0THF4a3B6dVphVlc1NWN1OGZ0YzhmSWZwamU2Qm9sb0dRcUJzVEZrZzVPNncxOVZCR1JFT2pWUU53b21Mckp0aHNnS3BwR3lSbHRQbGIzT20vWlY1dGhUbXdPS01SblJMWHlIL1lVYlhqTUNKdjdRZVZtK2c3aWs2ajdGZytBSUxZUWFNUkhNcGN4N0ZFSURvbDRXcDN1YVYxNjliM3IxeTVzbnphdEdubEFNUkFYZkdWaXA1U251ZmhEdHFWUWtBdWVVY3Q3dEFQdGJzVGxoYkJ3VUVJQ3d1N3BxWXdqdEpjR0l4YXhMWkxhbkJPeW10V2s2Z1ZpejdZZ1AxRjVTQjFaU2l2cVVmWHVGQW9MU1pZTEdhVWxKV2hzTjRNd3RrZ0NFQ0lFc1RwZE1MSmNjVEJPUW5nc3F1OWsydCsrcm40K0NIa1QxaVFsT0thMVVNeFArNWE5dnN0Ky93UlV2TFpjZ1JOL2d4aHZRUC84TitxMi9ZWkRyL3lKYlROV3NCUlZvQm04OTlGbS81SlVBVUV3bkp1Tjg0ZHFFS3p6SFovQzJEN0xmTnFPTEFHaGZwTXhLYU9iSXpuSS8rOXp4RFk5MVpvM0VTZlVXcWcxZ2JnNHRzdlFKMStHMExERzY2bnl1OC9Sc0R0YVFpTDhSeEx3ZnRMb2V6MUdKSTZSRGJZeDN6aVI1UVlPaU0yTmZGYU5KNEI0OGFOSzV3MmJkcGJNdFlteUZnYjRJcHpnMXNscFF6REVJV0NvUTZIQWtxbGF4TXpFZFRxUzIzK2dvT0QwYkZqeDZzbUFwYmptM0gyVkJMaTA1bzFPS2RyQnphbzBUK3REWG8yRFVGaG9ScTc5cFppN3prZHVrY29ZTmJYNFdLZEZZbmhnZUR0UUVWMUhURXJsVkFJVG5DdUNHVkNBTVpTbS8vUXlEZjJ6TXpKVEVYSEc1eGJJRGRpL2pZMWx2bkQ5d0VFVURCdzZxdkEwU0FFUm5oNmpTZ0VFREN3VjVWRDBJUWpNUHpTWXJaWGxZSlhoaUlvS3ZUU0Rxd2RvQVRPdW1vSW1qQUVoSHFtdERpTmRiQVpIUWlNaTRkQzlkdEJtQy9kai8yTFY2TEgybzFvMGl3VUVHeXcxbk5nR0EzaUI0OUFNRk9PL0FLTGova1E0S2lwQnNjcEVKUVFBOCtISFE5YmVRVUVWVEFDWThJOXZxTU9LOHhWdGRERXhFR3QxZHhrOCtyN25BalBnVG9GVUtzQk5nc1FIQmZoT1Q1bkRQcCsreG1JYkk2MHpkcWhlYk4ycVB4b0NZQ0dhNWM2bldqLzNDb1FaY1BQemFjT1FObHFPb2dRRGlpVjBqaW80RVQ4N2ZNUUwvdnMwakE0V01zcndFVEdJU0JRMDJDdDhFYkhmVlVWVllWeFRlTFdBK0I5cWFTQ0lBaUVFT3AwT3NFd0JBNGJKWVF3MUtYQktLRlV1dE9zVkdvRWFOUlFPT3pRS0xVSURRMTEyOXNFMkNyTFFRTWlQYTREQUhDNktuQWtCRVRnUUoyOE5CL3ljMUplcXplaW9xSWVhazZQa3FwSzFOWFZnemhaMk13bVdOUXExT29NSUFvQ2NDNjdtb0pRY0N3TEVFcW9xNlk2c1ZoTS9aVE91dmtjbzBTd2tvQ1FHdzFzbHdEdXR6QzJhOW52dCt3REFPZWZtWWlMdVNvd1NpV0V5b3NJdm4waCtzNGQ3ZnJTZUFycit6K0RwR0V4cUR5bEE4dzZkUGprSnpSTE11TFFmVk5SWjQyRXlsSUdrallSdDc0Nkd5b0dvRTRPaFcvTlI3RktBWHZCR2NUUFhvSHVkN2tLRWhiKzUxR2MzRlNDaU9ZUk1GNm9ROFozR3hFclBkd2RPUG5rVEtnR3pVSzdyQzVYWGhzL3JJZXErd1FrTkhlckU0cEFCTW55UndnVlFIbkJhejZxc1hQd2VMQXhMYUdDQVNaZEtQcXUraENSTVJwUVV6SDJUTGtIOXRDV1VBczYyQk1HSXV0VlYwaysvZTdQc1dmUkp3aHRtd0o3MlVVa1Ava0oyZzFzZnBQTWErUG5CSUdIOGVlVjJIN2dLekNXTXFEMW5SajR4aXdvQVZTdSt5OU9mYmtEK21OMUdIeG1MeUs5c1pyakFIaXVKL2JzejlqOS9FZXduUDRWcmQvZWk3YTNObkdwWk1jMllkL0xYOENTVXdKUzhEaktQOUVpK3JaSDBHVnlQd0JsT0hEM2s5QVZua2ZJN1l2Ui8rbExwZHJ0dVh1d2U5WWlNRTFhZ1MzTVE5eERMNkhiWFgxOXJaV0g5eHpJTHV6WEsrMllTeFdsQWtBRVVTMTF1MGtKejdKdzJ1MVVTUWpzT2gzNDZIZzNhMU9DNk10UTlRdUxXcFVkUWVwZ1hGVCtpSUIzWGtDZ3ZReDV6endITnJRWlVIOFJRVVBub3ZjVDQwQWc0T0pyczNGeVl5SENZalhnV0FkSW0yVDNmSGllMHpVQm05VnFsY0k2YW12cm9LK3Z4dkhDU3NRRmg3cmFjOW5zSUx3QW85RUdvOE5KRkZRQUZTaWhEQWhEd0l4YnNpTDhrVFU3bjZxdjB5ZE1HejhZS2VvL1F4SDliY0QyZS9hN1poRGxuWEJHOXNLb2o1NENNZVhoaDh6eHFKZ3lBZ254U2hldnFEa0ZSZVptakY3ZUVRQUxKNnRFMWVvM1VhWHFoOUhmTDRiQ2FjQ3VJWm5JMnpNTzdRY2tBcndUeXJRc0RINXVDcHpsZTdGK3dCSzBHcmNMRVlIVk9QZmhYbVRzT29XRU9BQk9GandqZjlnSU1KdzZBazE3M1ZXZGcrWENCUVFuOTJ6OGY2a0F3ZWtOYkJIb3MzNDcxQ0V1NnA3M3doU2MrV29YK2o0MkhPWURQNkErYkRER2ZlRXFoTW16ckxSdjRlY2ZvTm5UbjZIVEdOZlRuV2VGSzQ3eHhzMXI0K2NFZ1ljVnlSajc3WnRRQ3dic0hOUUQrWWZ1UUp1ZXNXZ3lmZzZhakIrTEg5cE1kQU9ZMS9pZEhFQTlnVTNUYmpDR2ZqVVlSKzdxQnRCTGF5Mnc2MmdNL1dvMGp0L2ZHNm83MzBMYTBHVFprUkxSNTh1dlVQTCtZN2hRVDJYSHMrTElZM09Rc09CcmRCemNHb0xwUERiM200SDZNWHNSRmRKZ3JUUmhxV0xhc21YL0xsaXc0Qm1CVWdpRVFJRE1ZMG9wQlFVRXlpaWcwQVpRRlp6RVhGdER0YUdCVUNqc0lDd0xjMTAxNG9lUFJHeUxKb2lMamtadFJRVjIvdWRWSkkxOEdjTm5EUUdjT3V3WU9BQ2w0MGFpcWZvUWpuNXlBVU1QYjBWNGtJRGo5dzlHbGZTZzlEeW5hM0xYRlJRVW9Lek1uUU5hWDR1REo4N0FvUXBDc3NJSnM5a09qbVVoY0FLYzFFbkFTNG50RUFRUVFhREVrZHpweWJuOTJ3MnRMem1QVjdjZndhalVFWWhUd1M4K0pMWlBMMWVublpCV2lHa0QxSjhxUjBLOGUzRnFVbkhMNkk2U2FVQ3BCblFuVHlLdTc1TlFBSUF5REUxNnQwZjE2ZFBBQUpmOUpLNm5xNHFwTXFFN29xSXVvajdmam9nT2tZanZHWWtqRDB4RDhwQitpQjg0RFBIdDVmYVdRUFQvNmRRZmZLWU1xamUrZzl6dmRzTm10b090TGtLSXU1eTBOcTBybUZNUFlOY2NCK0o2ZEVYeXlKRUlVcnZucDJjdkhQalhMRGpQamtCVWozNUlIdERsSnBwWFphUG5CQUJSbVpsUU13Q1lNTVIzYjRYNjdHeWc1MDJRY0dQS1JYVzJEWXE5MytEWVFaZHFUcDJsMEJXWUVkWFI1MW9aT0h2MjdMTUxGanp6c1ZzbDViM3NiZFNOMEpUbmVUQXFCZ0xsaWMzT1VxVkNBY0p5Y0FaR1FDQXNqRVlqTkJvTkFtc0tVSCtzQ0h6MGVoeXIvd1VVQU90MG9ENm5CQkdxTTJEU01oQWV4QUJnRU4rM0o2ck9OTGFxcnRaUVdsS0MwdEpTVkZkWG9hNnVGa2RPbkVLSlE0SFdvVXJZN2E1cUhWUVFJSEFjR01KQXpRQzhRQWxBQ2FXVW1mYjhmOFpOSGRybjZaN040ekd5YngrMDV3cXhyZERpUjdCRzZjVmx2dE1HNGZkRmtCRDNsVmVpODBmYjBIdnhkS2k1TXV3ZlB4UjV4MnArODFHRFdqYUhzYUQ0bXZheDdGK0pneCtmUkpkMy9vZVJXN2FnNi8xRDNkb01vRXpzZ2RIN2ZrTEtrRTR3N1ZxRkgyNS9ES3g3djZZUHZJd1JYNjVBZUh3QXppKzVCNGZlMzNIVHpPdmx6c25uWG96aUpsbDBBcUNLUlB6SUxDUm1aU0VwYXlSNmZMb1dUVzhKYkhTdEJBWUd6aW9wS2U0TFZ5VWVEYVZVRFZmNGxvSlNxcUFBUXlsMTl5cmx3UVBnT0JZczY0Q0Q0OEJCZ05WcWhjbGtoc0ZnUUYyZERqcU9BZHVxTFVpWExrakt5a0tYTi8rSGxGN1hGZ3B5VmNCbU1wazhlb0FlUDNVS1o0d1VIYUkwWU8wMjJPME9zS3dEQ2dDVXRST0hLMmFOVUVFZ0JHQ3Fxa3FUUWdQVlR4VFZHbHpUWnplZ3hFSVFIT0NQNzJwTXF2Y2VjQmtyVEhtb09RZEVkcnk4U3o0aXZRT3E5dTRGRHdCT0F5cjI1eUJTVm1HMjZ1QmVsL0czL0ZmVTZWb2hxa1VBQUJhc1JVQlVSaiswbS9jc1V2ckZ3cGd2NytMTkl1Zi81dUQ4OXF0amJRbWp4NEhkdHhwbEJRYjNmV0tGcGRwd3llMFVHUW0yckFST3VYbWpyQXdCcmRJUkhoTUVDQmFVL2JUM2txSGFaQUxDNHBBNGFnSzZ2N1lVeXBKenNMcDNaazBtQk4zU0NTbjNQb3hPRDk0Ry9ibThtMlplTDNkT0FGQzNieDlZd1hXOHlsL3pFTmtoN2VyY2RwSGhzRnloc1ltM0tEVWFzSFgxVi9mUElXMFEyOW9HcXlrY3NkMjZJclpiVjRTM2FBWlZFSFBadGRLMGFkTjd2L2xtVFJNUjNBQkk0QWFBb1FMUHVPeHRUc0lUUUhCeWhHVTVPRGduV040Sm04MFZ0T3NDTnc2MGFTREtDcXRnaXdpSHRuVXFvbHEzaERva0VFR2RPb0JtSDRiZUlnQndvbkx2d2NiUCsyck8xNVhZN2k0WVdWT0tBM21Wc0xGMjdDbTNRV0R0Z0FBa0JDbmhwQ0FxeHRXOUJ0UlZoNDRCbUtpb3VIbVBqdXpkN1lGdk4rTG9rUmpvYTJ1UjBMRW5SaVJwL0FqV2lDaHFEK0xIY1hlQXI3NkkwQWRlY051QkdwZjRPeDlIM0E5MzRvY1JKNkN5bFlHa1BZUlcvUytwbGR6SkxkZzZjU3ZzQldmUWZNbGJjRG1hcXJGcjJGandDYWxRb3g1Rzh5MFlPRlFlaXNHaGN0TTNVTWNPUit2QkhhOThFeVgzUjc5L1Q4SCsyL3Nqb0VVTE9FcUxrZkxTYW5RWTZuSW1hTHFNUkt1V1gyRjl0OTdRZEJtQjBSOHNRdFNnU1ZDL2RSZTJURHdLeGxhUGdPaExEZ0R6d2YvaDU4VmZJcUpOQzlnS3ppQjY1Z0tFdWFmaDdJSTdVSFJSaTVBWU5YUzUxZWo2d2VNM3pid0tsemtuQU5BcXl2SFQ3ZVBBV01yQWRIb010MlJFQWREaDREMzNRRmZ2Z05GUWdRUGpSa09wYllFK2E5K0UyTUs2OWR6NTJQbllPT1F2RFViN2w3OUVxNTRKeUZ2eEtQTDJGTUdhV3cxU2NpOEtYOU1pYmZuL2tOemV0VmZ5UFE5ajF4T1BvT3lURU1UZCtUUXlwZzlHN2RaM2NQanRMV0FyTDhMQi9Zck4rMWVpeVgwTDBYbDhUM1I3ODNYc2ZuQXFTdDVMZ1pLcmhkbVNnQ0UvZll6Z3k2d1ZRa2puVWFORzNRSGd2ektWbEhmVFZJRlNTZ1dua3dvQVZTclZjRHFkNERpT0VKNm5uRUJodDl2ZHdidXV5aDlSUFFlZ2F2dEtiRHorRTNJaUF4QmxEVVBmRGQ4akpyNHZ1ajdRRWo4UEc0N1FXQzE0cW5FMURBUWFuQk9oR21uUWdRQUFJQUJKUkVGVVZMaWlDaW9tdUplV2l1V0k2cURYRzN4MW1YSW51SE9FNXdWQ0tWWFk3YmFKS3BYcWZ5N3JMNGR5Z3dVYWJSQ2l0SCtPY2EyNnVob3N5eUV4OGRxb2JYWjJEbEpUVzBtMTYvK29mUURnN0ZPalllbTZGQjJISllJVGdoRVVGWFRWKzdyQ0VrSVFGTlV3ME5GUlV3a2hJQlRha0VBUDljTldXUWtuVkFpT2o4SDFjT2RRMWdwemVUVlVNZkVJQ0xxS2VCNkJoYW00RXVyWUJHZ0NsVjVmV1dHcHJJVXFJaFlCSVo3SFlnMDFjQmdjQ0V4SWhFSjVrODNyWmM0SkFIaExIV3hteGl2YzQyWVJBZGJ5VWxCTkJJS2lRcTU2clpTVmxjMU5URXphQmNBQ1YybHhPNldVSllSdzdyTGl2SGRKY2ExV2k4REFRQVFGQlNFa0pBVGg0V0dJakl4Q2JHd3M0a0lEMGF4WkszVHVuWW5rcEV0QnVHeGRGWnhNTUFJamduNGJZN05ZTENndExVVlZsYnkybWdrV2k5V2REM29wYmNycGxISkJpU0M0Z25CTFMwdmlWU3JWM0V1UFN4VVNJc1BobDZzVGRVUWMxTmU0VDBCYzQ4R1dtcGg0bjlZSWJYekNkUjAzVVFjaTVGcHFiVEZxaERSUGJ1U3JRSVFrKy81T0hSWURkZGhOT3ErWE9TY0FVQVJGSVRqb1psMTVEQUlUa3E5NXJTUWtKRXo3OU5OUGN1Njc3MzRlQUE5UWliWGhVb0ZLTVplVUtoUUt3cklzZFdVa0tLQlNLV0d4cUtUT1lvR0JXaGhZTzhwS1N4RVZHWW1nSU5lRXFhT3VmUDB1YTJPNzFJVEYxVEpQQkRWWGFXOEhIQTRXSE9lUk1pVjZRZ21sbE1URnhUME9vS3Nmb3E1TkVtZjhIMUp1VGZGUGhIOWUvMUpDQ09sMHh4MTNUSERiMlRTVVF1NUlZRVJja0dVbGdPTTR3bkVzSEE0V2Ryc0ROcHNORm92Vm5TU3ZSMTFkTFNvcks2WFdmVmR0VzJ6c2k4cktTcS95M2lhWXpSYlliRllQcHNheW5GUmpTUkI0S2NIZGFyVU1aUmhtcnY5eVg3dUV0TzdtbndUL3ZQNGxKVEF3OE1IYzNQTkhVMU5iSHdiZ2RERzNTN1kyU0lueVVyb1ZXSmFEUXNGS1NmSTJtd3BtczlxZEpLOURVRkFRUWtOREVSRVJnZmo0K0t2a25ENkU0emd2RmRSVlc4MW1zOEptczd1OW9LeFUybHV1Z2xKS3liMzNUbE5vTkpySC9aZlpMMzc1NTBuTGxpMm5wS1NreUQya0tqZUpZdUFPL3hBRU1RVEVDYWZUU1RpT0E4dUtyTTBPbTgwS3M5a01nOEdJK3ZwNlZGVlZvN1MwRkZkYlA5SW5zTGxDTzZyY0txaEJxck5tczhtWkd1dlJBZHBkSlpOUVNwa1BQdmhnTm9CQi9rdDg3VkpkWFkzUzBqTC9SUGpsTHlzS2hhTC80Y08vakJhQmpWS3FFc0dOVXFxZ2xETHU2dGx5bFZUQ0ZZZkRCVzZYNnJZWjNDcHBGVXBLU240YnNCa01CbmZQZ2hyb2RIcVlUSzYyZVdMTFBIbU5OYWVUSS9JdVV3QklmWDFkcWtLaGVNeC9lZjNpbDMrdVJFUkVUTnV5WlhPU0Y3aEpzVzBBaUNBSU10YkdTYXpOVlpEUzdyYTNXV0F5R2FIVDZWRmJXNFB5OG5JWURJWnJCelo1aHlsWGVXOExyRlpQVURPYXpLZzFtS0EzV1dGak9ibkRnQkU0NjZ4WE51eE1YTEJ1TC9hV21TNGQyR25ITjdzUDRjbXZ0dUhmMjArZ3lrSDlWLzk2aTlPQzJ0UG5YY0drdjFNcVZyK0FnKzl2dSs1RDVDdC94WTdaeXozR2FEaTJIY2VXek1lKzJYTng1cnU5RUg3WEx3alFuOWlQOHgrK2d4TnZyb1RENjd1cXJTdHhjUFpqT1BMS2g3QmFaYi9rck1PKysyZkM1RStHdVY3UzlOWmJiNzNkRFd3ZVFic2lhL04wSkhneU54SGNyRlliekdZTGpFYVhTbHBkWFkyeXF3aFM5Z0MycXFvcVZGWld1aExjM1hGcUxoWFVKck9yMldHdzJNRVFWeUVQd2NrUnB5dG1qVmdORlFObmY3VDVZUzRxRVNOYi9qOTc1eDBmUlozLy8rZk1sdXhtMDNzMmdTUWtoQllnR0NEU0lRS0NvS0FDSXZZR25PVzhzNWV2RFU4NXozTHF6M1lxbGtOUkViRmdwQmNGUktRSENNMlFoUFJlTjl0bmZuL3NKdGtVVWhDVTAzazl6QU96bTVuNXpPZnptZmU4Nit0dDRLSDN2dUZBdldzTGY1VCtIVXR6Yk13ZE1Zamcyanh1WHZIenI5ekFDdHJBZEpRdDF6N2FWSGIwcTJSa1hSbVd5dHF6UHNUakx6MUw4TVV6OFN3aXl2bGlKWDdESnhFM1l4VFpqOTlNNW9iY1gzR0ZLakpmZUlYcXpEMWt2dnB4aTdtbzN2dzJQL3pqYTZMblhvZTJhQ09iN251MXVjSktIVXpNRUMwSDN0K2c3S096QkoxT2QwTm01dUhCSGxyYjZhS2tMYlMybHY2Mnhxb0VsMGxhWGw1QmNYRXhKU1VsWFJkc2hZV3VaaXpWMVZVdFRGQ3IxWUxOMWlqWUpQeTl0WUpXRkJBRkJORlZ4aThBWXVISjdOdVArTVZ5LzZqZWpFbStnTGtKQWl2MkZ3QldOaHd1NGRaSkl4a2FFOEg4UzBkZ1AzYVVnMlpsOGM4V2lyNWV3djZYbHVLb084bmh4WXZadi9oNXFpcWtSaWxGMXB2UHMvMk9POW43OGhJYVRGMTdwY2gxaFJ4YS9BamI3MzJFZ294OFQ2bEg5anN2c2YyT085bjkwcEtXbWsrSGd2Y0l4OWFhaUp2Y3A4WEhnNTk1ZzRSTEp4STFjUmFSS1NHWUNvdC94VXdFTS9LajVhVGVmdzJ0S3pDelAxeEs3TUtINlRGcUdJTVdQWUw5dS85UzVtSFZSTTIrbk9ML3ZvZEZlZU9lTmZUdTNmdEtXZ1lSTkI3bWFLUFcxbFJMNmhsSXNObXNXSzB0VGRMcTZpckt5c29vTEN6cW1tREx5M01WdUxlT2dycE1VRmRhaDBlVDQrYUFnU3VDSzFvczVybkh5NnVuSjBTRTRHeW81MVNkbGNTSUVJNlhWZ0ZPSEpLTVN1VytuS2hDSmRkenN0S3VyUHhaZ2svL1lZU05HWUtvQ1NJNExZMnd0TEhvOWE3NVB2SDBBbzd1cVNIK3RsdlI1RzlrdzkwdmRrbGJMbHJ4R2VvaDA0aWRFTWRQMTh5anZNSUJPTWk0ZXc2L1pEcEpXREFmSC9NZU52NzEzMTA2WDkzUFAyQlBISTdmYWJJcmk1Y3RJanUzRi8wdUgzWU9ac2hDOWRFOC9Qc25Vbi95R0RhdlJBSWl5cW5KYW5hWGlCRXBCSWw3S2M2eUtSdnFMRUd0VmwrY241ODNtcWJjdG1aZlcyTkRKemVkZUl0QWdrdTQyZDM1YlcyanBLV2xKZVRsNVhjczJHdzJHOFhGcmxyUTZ1cHF0d25hNEJFRlBVMTZoOU1weUxJczN2SFFZeXFOUnZNWHM4Mkd0MWJGcDJ2V2NzMktuOUZyMU5UYUhZQTNJK0tEV1BGakJtWDFEYXpkdW85Y1djQnNkU2dyZjViZzIzc1F4bUZKaUxvQUlsSlRNYWFtb3ZNR0tDTjc1UzZTSG4yY2lPUmtCaTU2Rk9lNjVWVFVkMzVPLzZsWDAzZktLS0ttMzBiOE1DYzVHektRUzNkeWJLT1RvWXZ1SWlneGtmaTc3MFhjc1lLcWhzN1BWM3Z5Sklib21IYS9hOWkvZ20ydjdTTnQrUkw4Zk04Rmxib0pteGxVbW1LMlRCeExabm91YWowNDZqek5CaDk4WW5UVVpSVXJHK29zSWpJeWNuWktTb3JPcmJXMUNTUTBtcVh0cFgrNHRMYkdLR21EMnlTdHByeThuT0xpSW15MjlsOUNhcGNKV3RpaUg2aXIvck94WktwWlcydE14SFU2bmE0MmRwSWtDSUlndlBMMFkvT0JWTDFXUzRQSnlkWFRMK0VTcDVxOU96ZmpwM0hWaE40Mll3cld0VHU1ZldrV0EvdjBaWHpRQ2J3VmRvOXpEMGMxRGRYK2VJZTUxU1R2VVBTKzFWZ3FnVTc2MUJvOGtpSDF4a2pLSzh0eGxOWml0UlN5NjlZYm05UjlyNlFrc0FLZFVQL0xPT0EwTk9rVk83WVJjUEZzQWtQUEZWZThBYTBlblBZSUp2NjBEMDFJRUQ4c0JyV3Z2dTJmU2s1bDM1eEZpS0k0Yk0yYTFaTkRROE8rQmV6dUh3ZHVXbkZjeWJ1Q3V5OXBrNXp4MU5xMFdsY2dRYWR6QlJLcXFocE4wa0ppMnluZlU1dk41aVk2SWxjdHFHZVQ0NWI1YWc2SFEzQUxOY0h1Y0FtMWpBUDcvVlFxMVh5QVBxR0IvSEswSE5Gck1LSEE4ZUp5RW51NE9oSnB2UU80NS9LTDNTNmFRaVpzOCtYK1VJVmw4dXp1SUFGQmNyYWtIRk1INEIxUVEwT3BEZUswWUNyRFhCZUFMcWdMT282SHI4dGNXSVIrc0JGMW1BRXZRenlqUHY0VVF6ZmZTMzZSY1pnM3RKK0hGRFR4V3BKc29lMGJrU1g1NEIySXp2ZlhGRmZxQ09qZmc1ck00K2d1R0FhbURLcEx3eGdRNzl2Q1hHMG9NQkVTRjludUdKeGFmd3lCdnNvK094UFBaM0R3N0VjZWVmajdaNTlkYkFQc3NpdzczQXdnVHJmVzFxSjFuOXN5bEp1anBEWjNsTFRSSksyaG9zSVZTQWdQRDBldmIvbUNFcHZvaUtvYTIrYzFlRFE4dGpiV2d1SndOUHJXSE5oc0RnQUJXUmIyMURodVhiYi9WSCtBMkw1OTZWZWJ3L1BiVDdCbC8xNCt6WktabGV3cUhpNDZsY3RIZTA2dzZlQXgvcjUwRTRNdUhFcWNJdGZPc2xJU2c2LzZCSm52ZlVIZXVnMDBtQUJDaWIxaUdJZWUrUWZGR2ZzNStNUmlWSlBuRU96VCtlbHExbjdNMFRYYktmajJIYkwyYU9nNXNUOUNXQ3A5eHRyNDhmN25LZDZmUWRIbU5leCs0WjB1cFpqNGpSaUprTGtIVXpzZWlNcE5Lem0rZW5lN3grMjVkZ3piWDE3VjVXa28rdllqam55K0FhZTluS3dQUGlSNyt5RUFlbDEzUFRsdlBFUHU5enM1OFBpemFLWmNTNmhIRWIxY2NZQnkweUFpK3JUVkdnL2NNWVh2bjEydTdMRXpoQ0FJZmUrNzc3NUp0SzFHOEV6OWFKRzA2M0EwK3ZXYlRWS0x4VlZMV2xkWDU4NXRLMjgza0tDYU8vY3FqOXkxS21wcmE5cHBlbXpGWm5PRllwME9SeE43eHlQdmZSYWs5dlo1M1NwcWc0WkhCNEhLaTdSK1VSdzRsa1ZHcFpNN0x4M0hNSGVmUTZmTndwYk1iUGFYMURJd2FUQVBqSW5uOStBTk5abE1PSjBTZm41KzNUcXV0TFNNNE9EZ2J2VUlQWk5qem5SOHJ0M2pqWEhTaFppT0hxUWh2d2pEd0F2UmV3c0VqNW1NcXV3d2VhdTNJTWFPWlBpamYwSGJoWDRUd2VNbVl6dXdscExNV2dZKy9VL0NZL3dBa2ZBcE0xQ1ZIaVF2ZlFPMWhiVUVqeHhMVUZ4azU1Ukgra2pzR1V1cDhSNURXSytXTEMrU3RRRjFXQ3hCY2ExcUFhVmlEdi96Yll4M1BFWlliTmVZWWFwKzJrUkRyWmF3NFFNUkdreUlmajBKN20xRUYzY0JJVkYyVHFXdlJZZ2V6ZkJIRnFEVk5JKzY2SlBYYU9nMW5jUXg3ZmM5OVJzd2pPRDRTRVZLbmFuT3JOTVpOUnJOK2syYk5sdHgxNDgyVW9rTGd0RFlXZDZ6azV3Z2lnS2lxSEwvaU80T1Z5cDNseXMxV3EwV25jNkxvS0NnRnZSZ3dqZmZmTzNSeTZCUnVOVzZtVHdhazNQTldDeU5YR3NPd2VsMGlySXNpemFiOVY2VlN2WHMvOUxrbnU5OGJHYzZ2djhWMkxJMnNQSHBINW44d2VOZGVySFpNcjVnMVNNL00rUGI1emluSGxsSEJWdXUrQXVEUHZ5VW9FQlJrVUxuQ05YVjFmOEtEQXhhaVl1enpTUUlRZ011RDYxTkVBU0hJQWlTU3FXU0dqbmJkRG92V2FmVDQrMnR4MkF3NE9Qamk1K2ZIMEZCZ1lTR2hoRVZaU1F1TG83Ky9mc1RIeC9mYklwNkJnemNaSkdOR2hwMnU4T3RFam9GZDNwSFUrblVuajI3ZlZVcTFjM0tVaW5vRHJUeEU1bmFSYUVHb0UyYXdlVmZMZWFjaDVuVXdZei9acmtpMU00eC9QMzlyN3ovL3Z0OEc4MVJkNFJVUmF0U0szZHVHdzZISzFKcXR6dXcyZXdlVVZKWGJsdGpJS0cwdEpTR2h1YlF2T2dxY3E5dlpYcTJ6RmxyajJ0dDRNQ0JOd0lLdVpXQ2N3dFJqYWhXaE0wZnlOY1cvK0NERDA1d0M3WjJmVzJ0T2R2YTVyWlpXd1FTWEVYeXJrQkMwN1pwV2VUZW1LL1dOaExxWnU0UUFPRzY2NjVWcVZTcUc1UmxVcUJBUVhjUkZCUTBvMWV2WHRwMnREYXhVV3Z6cUVob3lwMXREaVI0a2xJMkZzbTcwajhzRm90THNMbTBOVmVSZXp0Q3paT1NxRWxiZS9mZGQ2OERCaXBMZFBiaEl0VlRVZ29VL0tHMXRnSGJ0bTBkMHhXdHJYM05yVkc0TlJiSnQwei9BQkJicG5mWVd2alduRTZuTzIrdG1Sa1hFTlZxOVhYSzhweEx3ZWFuVElTQ1B6VEN3OE9udVFWYW85YW1waFVaWldNMVFxTU1hdWxyczUwMi9jUGhjS0J1ckFkdDFOWWE4OVdhS3d5YWZHdTRLYituQXFPcmEydXBzWXRFQmZyUXJndkVLWU9xZFFLQWs2S3FPZ3pldnZoNXFaVFZQUTJLMTN4S1ZiRVZNYVFYZmFhUDZkSXh0dndqbEJTSzlCamVwOHZYc1JjZklXdk56OGhBK01RckNJbytWNXFpaE9Sb1cwMHFxTlZucFN0V2l5dFY1Wkt6dDR4ZUYzV0RCcnd1bjJOZmJFUUNBbE12SnFKZjEraW5LN2F2UnRWN0hBRmgzbDIrVk1YV2RFcXp5aEYwNGNUUG5jTFpTdVdVR2lvbzNMSU5xMG5FZU9tbDZIVy8zWDQxbmRoTnJUV1V5S1NZTGg4aml1S0k0OGVQSmJzcHhCdUw0KzF1cmMzcE5rZWJORGFuMDRuRFpzRlVYNDlUcTRYUVNMeTh2RnJWa1RacWJTV0lybnJRNWdvREQyMnRUY0FBRUxScTI5VjMvZnNEcHIzMUxYLy82RXRHdjdTQ0hhV045WFpXbnZ2b0MwWSs5UjhTRmkzSHMwVFZZYXBnL2lzZnNlQ3p6Vno2NGxJK1BGS21TTERUUU9WbFFGTnpoRDJ2Zk43bFl4cjJmY3UrRDlaMnp5UVF0V2dNQm9vL2VaSEN6S3B6ZGorbjNubVlsU2xEV1ptU3pDZkdhRDRmTXBTVktVUForTVJIditxOCtSOHQ1c2lHSXkxZm5RVzcrUG1GLzNidlJLSWFqY0ZBNWRvUHlmN3hlSmNQeTM3ak1Zb09WWGZ2VWw1NnRHSTUrNTk2bmJOWGF1OWc5MDJYOE11bVE1aEx5NUhPSVR2SndZZHVvcml3NVFVcU55MGo4OHRkM1Q1WGJHenNSRTl6dEZXRVZHZ2RTSEE2blRobEdXdDFPZldWZFUwVkNXYXpwVWxyYzlXUmxpRTJVaEo1Q2pWM2hZRm4wQUJabG9YcTZxcUJna283ZThHc21XeC9ZQjRyNzc2T0IvcDdzV2pEd2NaSGtza2pMMlRWZ290by9lNWY5ZjJQMVBVY3pEY0xMMmZsTlVONSthdnRWQ2owTU8waWRNS2w5SnFjZW5ydHJLS0UybE9GT051WlAyZERIWFg1cGJTaDhaUnNtRTdsWURGWm1qNVNoOFVUUDNzV2dWRytwMzFnR3ZKUFVWOVN4YStoQmUxNTIzUE1PckNmV1FkVzRlY2R5S2kxKzVsMVlEOFRuN3EyZVhpU1M3TXo1ZWRncWJOMHJxRTRISmlPSGFEbVZEbVN3MEdiOXJpU2picWNmT3kyTG13eVF3UzlaczhpTlBFMHJlVWNOa3o1cHpCVnRNL2NhaTB0eEZ6VDBNNWExRkNiazk5aW5RS0hweEUvNHlKT0YraVZMQ1pxYzNLd05saTZPTHNTa2lPZnNuMGlTWXNlcFA5ZmJzRGdvVUE2VFJYVW5jcHZkNi9JQUE0TGRUazVYWm9ueWVHZ2V1Y1dURFUyMTV5M3UvZUsyeks5dUs5aGJXaFpjcUxSYUM3YnVIRkREdytOcmNrY2JmSzF1VnNPdUlRYWd1anREUm9WRG1kakxha0h0VkZkRGFVNTJSUms1NkgyVE85b0xwdHk0blJLU0ZLenhnYUlCb1BoS2hCSjh1amczalBJSDB0SkkvMlFtaUc5b3FBbXA4MFU3c2dxWk1KRll3RUlqdWxGUDhkV2RwWTV1U1JjTVVtN1k5THR2R29NWmVaSXZIMGxxck1iU0gzL0U2TDZ1SnJ1Mmc2dlpzMnN6V2lvd3F3Znh1UlBua2V2QmZPeExXeWUveUFxWXlMVzdPTkUzUDR2aGw4L3JzTXJ5WFc1YkprOUQ0dHZMN1J5Slphb1NVeDdwYmsvaiszWUpyWXVXazd5RzI4UjdQOHI3K3JJbDN5eTRITVNldFZSVmlSaHIzSXdldjFhTEovZXcvSFNrVnowMkN6QXdwYVIvWWo5T0pzWXpRN1cvZTFGTENjT1lqYzhSZlYzQVJoR3ptSE1QWFBjNW1nV1c2NmJpNjJ1bnVwU1B5YXZYMEhBR1ZyWjloUHJXSFhOMC9qMjdvVlVmaElwYmpvWHZmRWdXcmRneW43MVhuTFZLaXpabVVUZS9SS3AxNDhISkU2OTh3aTdsL3lFZjN3UXRmbDJSbjY0alBEWWpnZFJ2Zmw5TmovNEx2NzlFN0FVWkJIejRGSUdUSXpyOEppODkvN0I0VzkyVWx0VHhFL3o1cUpXQnpEcy9YY0o5b1dDOXg3aHB6ZTJFUkFYU0hXdWpaR2ZmVXBrbkd1eENwZmN6NEdkRW1MMkxwd2FiNnoreWN6ODVKK25kUTJVci9zUHU5OWVRMTIybVlwN3J1YUVRVVhQK1UvUmYvSUFBTXo3dm1iOXRjdVJLbjVCNm5NTlU5KytGeFZRdldNNVA5ejlQUG8rZlRFZCs0WEVmN3piZEF6QThPR3BZNEZUYnEzTkJySU5CQld5N0pSbFdaUkFscHhPV1JCRTFHcVg1aVpMTW9Ma2JKSCswVkJ5Z3IwcnZpUXkya2lKMUlDNnRXK3QwVkhuMHRhYVRkQnZ2LzFXSjRyaVZTMVgzY1I3TzdPWU0rbXlUcmFIbGJJNkJ5UDhSRjc0YkEzSm8wY1I3Z05sdFdZSTkxSGtWZGNOR1lhOHV3YXRyK3NCS2ZyZ0VmYS9zNUtvRjI1eHpYSzFscWxydjhTZ3M3SDdxbEZrZnIyZmxObUo3UDdyMzRoKzdETUdUZXlEVkhlTTc4YmVTc1hsV3dudTREbXIzNTVPVmZBVXJ2ajRNZGZidUJVOWpMT3VsSXI5aDdDZEpYdEtQckdId0JjMmt6cmNDQTRMVHFEd2RDWjA5QWltckZqQjhTZm1VaFgzZDFKdmJLbmRTcVVtQnE3OW1tQi9rZDFYRFNmMyt5d0Nwc2VmbVZzZ2FnU1gvcmdWalJyQXdyWXBROG5kUFovZXcxMHZFKzNnUzVuNDFEd2NoVnY1YXNKakpNN2FnaUY3TlR2L2M0eUxOMi9DejFlay9JdG4rT241OTVuK2VzZXRRTEtYdmt2Y294K1FQS00zSU9Ic2doYlY0K2JINlhIektWWWxYTTNJRlNzSWFzeGtyc3ZnNTMrdVovUzJyWVNINmNoLy9XNTJQZmMrbDczVi9IS3Eybm1VU3phdEl5QlloOU5pNmREZkdUSjVBVk1tTDJEcmhEaWlYdjJjWHIxYnBreWJIVVl1LytZNTFKWWMwZ2ZOcEt6aVhpSjhDOWw1K3o5SVdycVJYa21oMlBPMzhQWE1wNGlidUJ3M1ZTQStQb1pwOCtiTlc3RnMyVEtyeXh4Rkl5RGJaUkFGd2ZXZjRDS3p4ZWwweWs2blU1QWxXUmFjVG5jdHFic0JqQ0dBNk5temlJd01wMmZQQ05TTlVWQ1hHZXIwU1BGbzZWK2JPSEhpYktDNXo3eGs1L1V2VnVOSVNHVkIvK0N1ZW5VdzZEUm9SRUdSVVdlSW11MHJ5Znc0SFZORkhZN3FFcVMremU4YVE4cG9ERG9BTFNHamgzSDh3Q0dZQXFXSHpLaTJmczdlSFNBaklUdnlxY3F1SjNqUTZWOHErcVFVeEl6YjJISzNsZkRVRkhwT200YkJvekpNUDNRdWN3N1BQWHMzRm5NaHZZYTdUVUcxN2xmVkVhdmlrd2oyZHoxNGh1aEk2cXFyei9oY2dtamh4UE9MeWQ5NUFMdFZ3cHhUUzBCbERlQVNiT0VqUnJtR2JCeEdjUEJKS3JNc21IZHZBMi9JZXZsWlZ3djB5aFBVSFBUQzZYWWVuUTVoSTBieTR6TjM0RGh5Q2NHcFkrazU0WUl6SHJmbFdBYm1xR0dFaGJtaUNCRmp4MUM3TkwzRkdBSW16aVRBWGN1dDB2MjZhRU5neWhCWGRZZ3VBa05JRFpaYWNKYnZvcnpHaTZBdi8wUFZsNEJrUnF6TXBLWUs5TTBpSS9yNTUvK1Z1bXpac3MyTjVxanNNa2NkSUR0bEdjbmxiNU5rU1hLMjB0ZzhvcVJhTThVL2JhR2lwcDRDalJmcVJoUFU2V3lkNHRHY2tBdUlhclZxbHNmN21rOVhyV2FyR01mN1UvdlRlVjY0RjZHK2FzcHFuZnhseGtWQUEvK3BoMUEvdlNLcE9yWThXN29xVHE1ank2UExHZmZGZndtTERhYnE2eGZaOHJXdEl3WFBkUkpORUJIVHB1TGpYcWdlVTZmakcrL2Q0YlhVMGFsY3VtMDlSVnUzVXZqTlV0TGZXY3ZNelcraFBVZTNLdW9OcDlsSFV0Ty9jaGQ1U1FWUEIxWTNpaGJhZTkxbXYvb1ErYVVwakYyMkNKMjNtdDNYRFVPVzVOT2Z3WDA5cjVqQlJFMmQ2djU4S2oxdkRtZ3hsUGF1RlhYYjgxeVN0cCtpclQ5eDdMSHJLYnp1VlVZdFNEdG4yMHZyYy9hZVAwRThUZEdiZnpSUlU2YzJsY1QxbURhN2pWc2dMQ3dzRGRqV3l0Zm1tYkFydTFJL1hKUkdzb3dnT0oyeVMyYTUzR2hWbVlkQk5qSmdTaHJSUFl5SXpjbTR6dmJTTzVCbFdhaXFxa3dTQk9IaVJuOVordnIxZkZZWHdqdFhwalNwbEoxdG1aR0pSallmeXdhZ0xQY2t4OVNScElZcS9yWFR6bGh3Q09yeVhFd2Vjc3RlVklRYzJaZmcyR0RBUWQ2NmxvMUhUSHUyVVc4QnNGRytiUmVoQXdlQmIxL0MrcGhwcUFzZ2JHZ0tZVU5UQ0lpTFFXTm9Yamh0U0FoMUJTMGJxRGpxNnNBL25PanBzeGoyMHBPbzg0N2k2ZnUxWlcxbCsxMFBVMWwzN3ViQUt5Q0FCamY5czdQNEFKVkZMY21SMUhvRGxzcnlzL2VnaHdSaE90V1NicnFob0lDQUljUFFlYXR4Vmh5aWFHZExQcm1TSFZ0ZDgxVzRpNHFxM2dUSDZRZ1pQaHByMWlIMC9ZWTB6Ym1mTWFoWm1CbUMwRHFLTVZXMWxOUzJ1am9NOGNrazNMaVE1UG1YVVgzMHhCbmZpNjdQSUhRRnV5Z3RkUVVoaW4vWWlsL3k0Ri9OcUtQMjFXTXI3MW9FWFJVM2pCQnlzUnBpbStjaExncE5xN2VqV3ExTzI3QmhmWTkyQkp1cTBXSnNsRWVTSkNFTDRMRFpXblMyc3BnYUVQejljVGl0MUpkbm8yNFVhbTJyREpxQ0JvS1BqOC9semNaMENZczNaVkdyOHlMdFdWZW9YUnZhaSswTEp3RHc1TnNma0Y1c284N21ZTWFpSlNRTkhzYUhNd1l4ZmN3b3ZudG5GWmU5ZVpLYXFscitldmswZ3BVU3dOTUx0ckFSREo0Wnd1b0xSNkEycG5EeHQ2K2hIellWSTIremV1WmN0R0lkdXFDUWxvSWdTT0tIV1planBncUw3MFFtenhnRXdOQlhYK2I3K2RlUzkxWUNhbnM1OVNZams5WXZhU0xRN1hYTFBXeTYrVDYrZkY5SDNOOWZKUG5Lb2RUditJaU4vL2NKZ1gzak1HZG5Fbkw3US9oN3ZKU2Q1U2ZKL3V3clloNWJUTkE1U244TG1YZ0Zxbi9PSVgzbVQ2ajlJdEdGdE5SempKZGZ6OUZiSCtLYjFhL2dOLzU2eGo5NjdhKzZYdlRjQlp5WU41K1ZJOThrNHBxSEdIbkhOR0t1dVpYMUN4WlF0M0VnbGhyUUo3UmtYYkVmV00yYTJXdXdaR2NTKzlqL0k4QWJHRENWMUp1MnMzN0NPUHo3eFdJK2xZM2ZwUTh5OXA1TDNVOXlUd2JmZHhGYjAwYWc4b3RoVFBvS2duM2d5RU56eUQycHh6ZFVTOVh4VWxMZS90dVozNHp2SUZJZnVwanQweWZqSHg5TWRiYU5rWjhzK3RWcmtuRFRRcmJmUFpOZi9BM0UzUDBTQTZjbmRmQ21NSkw2MmtOc3ZXa0tKK0w3SWxlVllnbEtaZnBIaTlvSTJHSERocVVDdVo3Q1RaWmx1K0NLa0VxeUlMak5VUW1WbHc3SlZFOVZ0Z2xiWURqYVdDOTA0VVpxTTM4aXEvd2tKWUlPWWZEZ3dlNytCbVlzRm90Z3RWcXgyKzJDdytFUTNDRlhsZFBwMkFQMFB4dTJWVWxWUFhxREFUL3Q3Nk90bmUrMFJaM0RnU2svSDFWZ0JEcERXNytJczZHT2hsb0xQaEdocmN3ZGlZYkNmR1N2UUF6QlhaTkVrcTBCVTNFNW1zQXdkTDY2MzJXOVpKdUordEk2dktNaitMMzBlMmRESFEybE5YajNqRWJWenN2WVdsYU1wUE5ENzl2U3ZKY3NKa3lsRlhpRlJhRFZkVzBQMkdyS3NOWlk4VFpHb3pvTGxDWk9VdzBORlNhOG80M3RqdjIzY2FuWU1PVVhJL3FIb1BkdlA1bFpsdVdqb3FpNkE2Z0g2bkJSR3BrQmk0QmdGMFRCS1FpQ3BGYXJaWTFHSTN0NWVhSFQ2V1M5WG8rM3Q3ZUwwc2hiajQ5V1QxalBIaTZOcmRrRWJkYlljQ2ZJbVV6MWFXZEhxTGtjSHVHQlNyblFyelFHTUVUSG5sNzk5L2JGMTl1MzNibjNOdmJzM21wcHZmSHQyZk4zdlZ0QmE4QTMydkM3amtIbDdZdHZCNmthWHFIdFZ5cUlPZ08rUGJzM2RxMS9LRnIvc3poMmd6KytCdi9mZDh1S1dneWQ3Q05CRVBvZVBKalJkK0RBUWZ2Ym1LUElUbVFrUVJBRVNYSnBiWTJCQk04NlVvY2tJMm5WMkd3V3hNYkdMTTI1YTgzK05VRHc4dks2VEJFbUNoUW9PTmVJajQ4ZjBjb1ViYzM0UVhPWmxZU243UElza0xkYWJZZ2V2alhCN1ZzVFBCeDJvaUFJMDVVcFY2QkF3Ym1HWHE5UG83bjZvTjBXZmE0ZnFaSDVRMmloc1RWMXRySTFhbXlTUitEQXBha0JndG5jTUJXSVVxWmNnUUlGdndHTVI0OGVHVWpMOHFwR3hvL0cxRE5Ca2p5TDQ1czF0MmIyanliQjFvWnp6ZVhlMEdxbktuUDkyNkswdEpUOC9BSmxJaFQ4S1JFVEV6UE1VMk56bTZPcVZ1Wm9DNjQyTjRWNEM2MU5kQWNNbWxTN3hnUGRacWdpMkJRb1VQQ2JRYWZUalcrbHJiVm5qcmFRV2EwRENYYTdIZEhUREczVTFBQ2hvY0Uwb1gwejFNbk9qTU1zV3JtQmU1ZHY0djE5dVI3MEt6SlplWGw4dW0wdnIyNDhTSzNIVVE1ckE5c1BIZWV0alR0Wm5sbWlyT0J2aUVQM1hjR0pIY1hud1Vna2ZyNTZQQVduL2poemF5dk5wYnF3NGd5UHJtUGJaWmRTMnFYRGJWUmxITUorRmhoeGFqY3RZY01UUzgvcVBNZ05GWlFleVczeitjL1hqQ1V2cDN2bWFFYkdnVDRlV2xzTGphM3hweVZYbTlRbVFpcTJNa1B4TUVNbnRyODM2L2hxYnlGOVltUEV6UktVQUFBZ0FFbEVRVlM0dEg4VW03ZHM0UEVmR2tkdTVyMzFlemhTWE1KYlAyUzJFR3lsZVRtOHN6ZWIvYitjNUl0amltRDdMV0V0SzhCdXRwMEhJeEdKbnJjUXY4QS9rT3RnMVN2c1diTCtqQVc5cFNBUFIxZTZUVlBPanF0dnBOcDhGbDR2cGtvYXlzNHUvNTZVK3dNYi92cGltODh0ZVRuWTdkMDdWNjlldlpJOU5iYlRtS040bXFQTldwdExzS21ibzZHTlRCNHVNMVFVeGZZRm14akE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5TekdjMEo4UEV2cXplc05hUHFoVGhNMjVRUFhPZEk0dlg0OGREUUVqcDlIL3l2Rk5TYnEyNHFQc2UreDF6RlpmRXY5Mk55RkdYOEJDM3JJUEtkcDdGTHRkVGZDa1dmU1pub29BVlArY1RtV2xub1k5RzZpcEZJbTc2WGFNU2U0aWRVY2QyZSsvUStIK2szakZENkgvd3B2dzl1NDQrOU4wNkFkT3JOb09vaGJ2MGEwRWI4NStNcGQ4Z3FuYWlpRitDSDBYM3RBNUEreHB4bEN6ZHcxRkJmNzB2WFFFQUpXYlYxSWxKUkovVVJKbDZ6NmlRVzJrY25NNkZtY3dDZlB2SURUVzMvMndsM0w4blhlb3lDckJrRFNPL3JkY2lWYmRxSTJVY2VLOTl5ZzdVb0JYejBRU2JyNlZBUDlxTWw5K240bzlHZFRWbGJGL2NUWkNaREtEYjNSNWJ4d1ZXUng5OTBPcVQ5VVNNUFl5K2wyVjVrNHd0cEgzMFZ1YzJubVNnTFRKZEVVQnEveCtCYWQrM0kvWlZNT0pGeFpUb0JXSm5MT1E4SGgvMS9tV3ZVdmVqcU9valFra3pwL2ZWTmplc1FKWXpiR1huNlU4dTRySVdUZlRhMHkvSnMwdy8vUDN5UHZoRUtxSVJCSVhkbjYrM0E5ZW92TGdBZVRpWFBZdFhveWdDcVQzM3hZMmtTYVlUK3hrOTVKUHNYdEZNK0NldS9Gemw3Qlk4ak00OXM3SDFGVTdDSjE2TllsVGhpSUEzdDdlSTREUFdwdWlqZVlvc2lRNUpVbkE2VVFscW1WSkl3bE91MDAyMWRSZ2t5UXNYdDZJalZMUG5aU0xMQ05VVmxiMHA0dk5XbzZVbHBOb0RGR2t5dThNdVdRbkcrWS9UK2pNYStsejNSVUk1cG9XUklBbmwzOUY2Q1d6Q2RCbHMvWEIxNXBNb1pwQ08xR3pyNlAzdkdrVXZYSTdCOWNjQTZCbVZ6bzcvdlk0bXBScHhFN293WTZycjZXaVJnSWNaTnc5aDE4eW5TUXNtSStQZVE4Yi8vcnZUaDlRVFhnc1lXbWpLZm44VlZxU2JUU3c4NmJyY2ZhNW1IN3piOFEvUU1MYTZSdis5R1B3Nnp1SXdsZnY0OFR1UW14Wlcvbmg0ZjhRTUNqUnBmT3MvNHdkRDd4STRPUzVHQk1kYkxuMlRzd09seFd5ODVvWmxKbU1KTjUySXh6OWpCK2VXOTVrb2Z3MDd6SUtDbjFKdUcwKzRiMjhxTTJ0QkxVdndlUFM4RThNUXh2ZGw3QzBOTUtISnJwdktaOHRNK2ZRRUpCQ245dXVvdjdiWjluOXdYWUFTajU5bGwyZkhpTHVwaHNSOXEya3JMRHp5bjVkM0VEQzBsSlJhNzBJSEpOR1dOcDRmSUpjbklpRlN4NWoxNmNaeE41ME13R2FrNnlmZDErWG1IbnIxbjFLUStTRnhNOGN5YUU3cnlMM21JdEVNK3U1djdCL1ZUYXhOODBuTkt5VXpkYzkxT241L0llT0lXUllFdmhHRUo2V1J0aTRDOTAwVHk2dE5HZEZPc1paMTZBdDNjSlB6eTl6T2JSSzk3TnU1aTJJZ3liUlo5NWxGTDU4QjRjM1pRR3VaaStyVjM4WDJaNmZEVmtXWkFSQkVBUVFhSEtqT2UxV25LalJCSWVpRGRDaGJsM3dqcXMyZEh4WEhxWlQyWWQ1ODdDVGQrN3NwMGlXMzl0NzFWQ0p3NkZIYjR3bUpENkNrT1NXMzhkZGR5ZlJJL29qUjExTnh1VWZZQU8waERMZ3J6ZFJzWDgvNW1vYi9vUGlLTjkxRUthNCtpWUVYSHdOZmFhTUFrWVJ0K0k5Y2pjZEkyaFVKY2MyT3BtNDZ5NThOQkIwOTcxa3BWNUxWY085QkhkQS9hOE43WWt4MU1ndmJUUTdLNVpxSzRGaFlRUU1TQ0o0WUhMblFyeDBad2RqTURMeXRhZFpjOHR0NUJocTZmdmlSd1NITnBjelJjNWJTT3lZWVRCbU1Ma2ZEaUIvYnhVeDZ2WGtsdmRuNXIxWG93TDg3NzJEcjJlOGp1WFJPWWdacThrcFR1REtyMjUzTVpza045ZEdocWVtWWo4VVFaazJIbU5xTXlkYzFmcmwxQmluTWY2R2k1R0JRWGZkeUtwRlh6SDh4bEhrcmxoSjc3OStqZkdDT0l6OTcrZkVoMWQyZXIvZVBmdmczZE1YalVaSFNHb3FvWVptb1pHOTRpdjZQdlE5eGdzaUlQa0pjcFplUU1HSmw0anIzWEVKbCthQ1MwbStLZzBCNkRmek0zTFRmeUFtZmpCSGx1d2llZE9QaElhb2tmdmZUKzdTRVJSbE9ZaUpQMzE5VjBEU01IeFYrUWlHdkJiejBJamVDLytPY1dnZ2dmWlpySHJPVlY5ZThQbjdhTWJmU3Y5cG81R0FnUXV1WU1meWRKTFNYSngxS1NrcC9ZRThUM05VRUlTbVpGMEVRVUFVWlVIRXBaaHB2TkQ1YW5BNnJOZ0ZMNWRnYSt6dTN2aWpVcW5HZGpiWkZVVTVMUGo4QUl0dW1FbWlRYWxtLzcyaGlwdkV5SHN5T0hEbkhING90R0s4NXUrTWVHQnVVMzJsVjZDcjVGM1FhUkVjRGlUQVdaSEoraGszNFQxeUtnRVIvalFVMXlQNU5GTlNlMGVFTnYyL1BqU002c29TSEtYbFdDMkY3THIxeGlZYUhxK2tKTEFDM21jeThrQ0d2Zm9NKzE5OW1DLytua2ZBaU1zWThjcVQrSGF3cHh5bFJSMk9RZGRuUERHSml6aGVNSmp4bzFvMkdOR0hOZEovYS9FMit0TlFYazJEc3hpcE1vTnROOXpZUEtvQjhVaUF0YkFZVFV4OHQraWE2b3Z6Y1J6ZHc1WWJtdnNuQlBjZTdqcGZhUjFCWVdGdVZTd0NROEN2S1FnMVl5azFvMnUwbU1SQURHRmdxNndET3VaSTFJVkZOYmtwZE1Zd0dySXFvYVlJczluTW9YdHY1V2pUbStBQ1ZOamM4dVhNL0tycVFKZFRWYVZSSVZ1dHJwRVhGV0Q2OFFpYmI5amNyUGtOYVM1eUNnZ0lTQVkyZUdocnJoOEJBVmtXSktkVGtKMlNJSW9xSkVtU0hlWmFvYWJVS2h0OGZCRjB0cllhMjczMzNxc1NCS0ZEM3VpNmlnSnUrV2diZDg2ZHdiZ0liMFdxbkJkUTAvT1dCK2w1eTRQWVNqTllOMjQyUmRmT0pkcllnZTltNHdvY1EyNWc3TDl1QitENEU3dndERmcyRkRjMzNER1hsZUoxWVRqcU1BMWVobmhHZmZ3cEJ2WFpHWG5nbUZsTUdETUwyVkxGam5tVE9mN2RIRkptbjU0MVFoMFcyZUVZeXI5NWtkenFJY1QzK29XZlg5L0FxRHVhM2NYbTRrSWdCYkRSVUZoRFpFZ0EzdW9JVkpHcFRQanN0VGFGOWpaakJQYmNuZGdrbXVqQVBTRUlBbktyN2lrK0VkRjRwWVF5OGIySDJ3cVVjSC9NcGFWQUhGaUtNVlU3dWl3Z0JGRnExZHRCank1TWo2V3dISHBIZ0ZTRnFSU01YYUJic1pRV0lMczFHVXRoS2Q0UlFlQWZqdDdnejVDM2xoRWVlQWJLU2plNnlPZ2pqZmhmTkpPSlQ3ZlB5S0xSYUVZTUhqeEljK0JBUnF0RVhVRjA2V3VDZ0N6aHROdVJOR3JzWmdzYW4yQjBZZjdvdkhXb1c1bWhQUG5rRTZPQjAxZk4ydXU0YzBrNnV1ZytWQlprczdRQVZQb0E1aVc3aWx5M0h6akV5WXB5ckU0elgyN1BJQ0U4a3FrSm9VZ04xU3c3Y0lyRHA2b3B0VWtzM1FHcEEvcVI2S2RSWk5KWmdDMXJPMGMyRlJDWk9nQkgvazZzMmhoOEFqb3hjYUo2MExBbm5ZS2ZSMFB4TG81OXV3Lzk5RXVhZ3hGclArYm9ta0g0T2c2UnZjL0ErRmY2SVBoTDlCbHI0OGY3bjJmZ0RSY2pWeFZTc0NlUElmZmQxaUg3UnRYKzdaaHFySmhOVGlwM2JrRjl5b3VRMUJIb2RLVWMvTmNLZ3NhTlJFc2w5YVYyZ21QQ094eTNFSlo2MmpFNHM3YXo3UjlyR2ZYTk40VDRsckYreWh4T3BQYW45MUNYaEMvNjVDMXlVaU1Rc2xkVFlyK1FZUmNFb2hXbjB0UDNSYlkvczRRK2w2YmlLRHhHU2JiRUJYK1pqWGJRVkdJai9zMzIvM3VEL25QSFlzdmRneHc1aVo3dTgvbkg5NlhxZzY4NE9UUUliV2dNMGNQN0VUaHBEajR2WE03UGIvWW1ia3dpNXF4RFZKdkNHRFJ2SWpGenJtVGJxNHNKQ2JtZHFxL2VvTDZyY28wUUFtSWNuSGh6S2Ria1NBSlNSdU1ickNOdTFreCtldkZKQW53WFVyL3BBMm9pcGhIVnUzUDkwcjQzblgyZlhZd3hvb1lqM3h4bHlLZmpRZTFMdjVzR3N2dXVoMG4rNnpXbzdlVVViZHBQd21QMzBCbUJ2eW82SG4zQk14ejZmQlgrZ1VHRWp4L1ZGSHhwRDFHemIrVEFKWDhobzM4SXhnRkc2bzd1eE9xVFROOUxoalVwY08rOTkzNnZsSlNVUXpRM1UxWUpJQ0lJSXJMc1JFWkFGR1JabHBGRkFidTVGbHVEQnJtNkZKVmFyUmJjaWJrQ0lENzExSk5YaTZKNGVoK2JaS2ZLcGlMY29NRmlkMkN4TzdDS1dvWkhCd0Z3TFBjVWVWWTFRMk5Ed2VGQXJmY2xLY3dYMlZyUEQ5bGwrUGdIMGkvSUc0dmRRVlI0QkJINjM1YU14bVF5NFhSSzNXNUtYRnBhUm5Cd01DcVY2cHdlYzZialEzQlN0V3M3UlpzMlUxc3FNSERSMDRRYW03ZWpiNzhVRElIdTZKWW1nTEJoL2RIMUhFeGdVQTA1WDY3QmpKR2syMlpqNkpGQVlGdzROYnZTY2NSY2hMNXNENlhIVFF4OCtwK0U5L0FGUk1LbnpFQlZlcEM4OUEzVUZ0WVNQSElzUVhHUkhYTG1sNjFiU2RYeGZIeVRVaEZyQ3pFWGxPQnpRU282THpCbkhhQm8weWJLRHVjUWZjdWpKSTVONkZSN09kMFl5cmR2Sm5UMlh6RDJqVURRQmhBNW9pOFZod3NKR1JoUHhmcFAwSTJkaStQZ0pxcktmRWg1N2duOEEzUWdlQkYxMlV4c1I3ZVR2KzRIVEZWMndzYU93ejhxQkFRdm9pK2JnVDE3Si9scmY4RHFDTUE0WVFRNmI5ZFRxNDBkVEVpVVFQWGg0MWpNV3NJSDl3YU5IejFuVEtMdTU4MFViTnlLMWFvbFl1eDRmTU44TVF3WWdhK1lUKzQzbTlHTm1VMU1TaStDaGc3RnExTlpKQkkrTVExYjFpSHE4L0xSeFNWakNOTGhlOEU0Zk9RQ1RxMWFqODBRei9Cbkg4YmczYmtxYlJpZWhsZkJ6K1QvbkVYQy9jOFNrK3dTMUVHakw4RkhLQ0l2L1R1cXNvcnh1MkEwWWYxaU9pY2k5Z29uYW13L2FqSU9ZUzZzeG45NENvM01aQUhKSTlDN0RUdkJONXl3UVFtSWhraGlMeGxCeFpZMUZHNzdDWWNZVE9UWTBYZ0hORnVBZXIwKzY3bm5uanVCcTkrb0hYQUk0QUNjZ0NRSW9peXFSRmtRQk5SZU9sU1NFNm5CZ3RvUWlLRFQ2VVJQN2pXSHcvNk5JQWlUL3FpYXpmbk94M2FtNHp2YnlIMzlkckpOa3hqL3dPVi9tTFUvY3YrbG1GS2VaT2pjRkVYRi94K0F3K0hZb3RGb242V1pvNjFlRUFRVFlCVUV3U1lJelJ4dFdxMkxvODNMeThYUkpyb1RjcEZsV1pnOWU1WktFSVFSeXBRcThBcUx3eWNpNkE5MVQ3cVlSTHhERkovdy80elhXSzBlR2hNVDB4dzRhTmxNV1d4MG43bVNkUnQvWEtscmFzODBqM2ZmZlhjWW9QVERVMERFN1B1SitJUGRVOXlkTHlvTCs3OEZuMlhMUHU0NWF0VG9ZelQzUUJEZGFSK05wVldDTE11eUxEZm40MHFTMUt5eEFlaDB1cUhLWENwUW9PQjhRZS9ldlh1NWhacG4ya2VqWUtPbHh1YnExU0pKVXN2Q1VwVktwVGdmemlMQ3drSzdGVGdBTUJnTStQbjVLcE9uUUFIZzcrL2ZwNVVaS25yOENLMDBOeVRKUldtazlxQXBFZ1JCdUVDWnlyTXAyTUs2Zll6QllGQW1Ub0VDTnpRYVRSSnRmV3lOeGZCTlRCK2VSZkdlR2hzblRod1BBeEs3ZXNIcTJscHlLK3B4bkM0bno5bTJxYXpWYkNhM3JCcXpRMVpXVElFQ0JaMUNFSVNFRjE1NDNxZWxZSk5ibTZOQ2N6NnVSL0FBRUl4R1k1ZUszcEhxdWV1VkZleTFhd24zY2xKbzEvUHY2NmN4SWt3UFdIbnVvMi81T3F1Y1VpbUFMVTlkUmJUN3NQZFhydVNOekRwNkJIaVJWMlZod1JXWGNPdUFNR1hsRkNoUTBDRW1UWnBrQkNwb0lweEVGQVFFRDgwTmFQYTF5YktFdXRGRzFXaTBYUk5zb29ZRnMyYVMxTU9WMXI3eXUxVXMybkNRMWZPR0F5b21qN3lRV3llYW1mam1uaGFIalVnZHhUVXp3OUdLa0g5MEQ1TlhiT1B5QVZkMFV0R21RSUdDUHp1aW9xSjZBcGx1UWRhaWN4VnRvcU11NFNhNkpaMmdVb2tEdW5ZWnJ5YWhCdEF6eUI5TEU4K01taUc5b2dqV3Q4MTg3aHNWM2xSckZ4YmtoK2l3WTVXVVJWT2dRRUhIOFBIeGlmTVFhcTFiOGpYbHNyazdXQ0ZKa3RDVTVDWUl3b0J1WDlGdTRyMmRXY3hKN2R1TmcyUSsyWHFRWWNPVE1DcWtJQW9VS09nRUdvMG1vWlZRYStGamE1Mm9LOHR5VXdtWUFIU1BWRTJ5OC9vWHEzRWtwTEtnZjljTnloMC9iK1hqY2o5ZW1EUkFXVEVGQ2hSMENsRVUrM2hvYVc2aEpudWFvOUFpZ09BU2JFSnBhVWtpNE5YMVN6bjVkTlZxdG9weHZESzFQMTFWdkE1bTdPS3huMnA1NTdvMGdoVlNEd1VLRkhRTlhpdFhmaEhpSWR4RVdhWUZoNlJuQUVHV1hla2UrUGo0SkhUOUdqTHA2OWZ6V1YwSTcxeVpncjZMVXUzRThRUDhmVk1CYjl3MGhSaHZ4UVpWb0VCQjE5RzNiOTlRVHArazZ5SFVYT2FvR2hEVWFuVjhsNjlnTG1IeHBpeHFkVjZrUGV1aStkV0c5bUw3d2drQVBQbjJCNlFYMjZpek9aaXhhQWxKZzRmeDRZeEIvR2YxRGdvclJhNTUrVVAzaWZTOGQ5ODhCdXFWUlZPZ1FFSEhDQWtKRFc5cmpyYlUyanpNVVZrUUJFSHZjTmhmRmtWeC9wOWhnbjVMMmlJRkNoU2NIWmpONW1YZTNvYWx1T2lMNm9BNk40V1JCYkFMZ3VBUVJWRlNxOVd5UnFPUlJRQkJFR0tWcVZPZ1FNSDVDbzFHRStuV3lzVFRtS0tlYVIrdUx3UkJpRkdtVG9FQ0JlY3JWQ3BWOUdtRW11QWgzQUFaa0p1K1ZBU2JBZ1VLemxzSWd0Q2psY1lteUhLTGxBOTM5UUhJTW9nblRod1BCM1RLMUNsUW9PQThodTdmLzM3SnAzT056V1dPaXNIQndaSEtuQ2xRb09COHg4Q0JBLzA4QkZtYmRJOUdvU2JMTXFLWGwxZjRtVnprVEdpTHpPWUdjc3VxTWRuL1BMUkZzdVJBa3BTaVdBVUtmaTBpSWlMOFRxT3R0ZjVCclZLcHVpZll6cEMyNktPdlZ2TG1VUlBodmxvS0swM2NPR01xQ3dmOXdaWEZ3azBzVDc0ZVZZOElaSnNGcjdnVWhyLzRFaEc5T3k5Qk0rMyttZ1BiSFl5OCswcGxSeXRRQVBqNys3ZlcyRTVuaWdxaUtJcWgzVHE3bTdabyt3UHpXSG4zZFR6UTM0dEZHdzY2djNUUkZxMWFjQkd0eWEydm5EcWQ3UTlkeDhvN3JpTDkycUc4K3MxUFZQd1pWc01ya1VsN2RqUDc0SDc2RG5Hdy9mLytYNHV2SFRWbDFPWVhJN1hROGlUc3hkbVVIdndGeWRFOWpVOEdjRmlveThuQmJwUGM1M045WjZzcW83NjBwczB4OXBveWFrL2w0N0FwbXFXQzh4ZmUzdDUrcHhGcVRkVGdqYVZWYWxFVXUwbUo1a1ZTaitheTBwNUIvbGhLV3RJV1VaUFQ1aWk5UjBkWUNWQ3J4QTRiN1A3eG9DWnNlQXFXelVkeEFpb3NISHY2TGc1dnlNTS9WRU50YlJBVFBsdENRR0FkTytmZlJzV0pIQnJLSk5iTjNRVUJTVXg0OTBtOEtDUzk3K1VNMzdPVFVBTlVmcm1ZYmVzTlhQYkdYMTBLNHBMN09iQlRRc3plaFZQampkVS9tWm1mL0pPOU42VlNJUXhCTmxYVGNEU0RpTCsveFlpYnh3S1EvY0pDOW4yVFMyQnNFTFcvbEhQaHFyV0VOKzBJQy92L3ZnRDFSWGVSTkYzcDg2UGc5NFZXcSszVXgrYlcyRkFMZ25EbXpTTWJhWXNtWGRhbFAvOXB6eTVlM1pYTnlRb3IvNWgzS1VGL2h0V1E2aWpldElscVN3MG5YL3VDdUd1ZVFnVlViM2lQakIwYUx0dTRCaTgxNUx3OG4zMXZyV0xDdzVkejRic3JxUG51VlRaL1pXWEsyL2QzNjNKVk80OXl5YVoxQkFUcmNGb3NUYXV1NlRlVkNRL093TEo3R1YvZXU0emhONDlGUlNsSGwvekloVnN5TUlZRERodk9GbVc4RWpXSDl1RTFzRnA1cWhUOC9xcUJXdTFIeDc0MW9WbU5nTUF6ZTJDN1QxczBzRzgvbmpMR3NHM3ZIbDdkdUorTGJoM1BINzUxaVZSTDhhcHZFWXFQVWFNZnl1UWJKZ0pRdG4wN0drUXlGLzhEQ2JEblZsQmxQUVQ4dXM3ckFSTm5FaERzeXQ1UjZacXplTUtHREFaQUZ4Mk5XRjJOSFZBUlJNU0lJSGJmZGdNOUo0MGxJdTFpSWdaRWV5ci9qRnVmb1R4UkNzNExxRlNxZGt4UkdSQ0UxZzRaRWZEci9pWE9qTGJJWVBDaGQyUVlOMDBkalYvK01YNnMrQk5FUjlWUkpQLzdKY1orc29wZWtjZlk5VnA2MCtRYmtsS0ptanFWSGxPbjBtdmhJNHg5L0phdVNNcm01V3NuSkszMWFaOVZRRkM3VjBsc2FSNFBlWGNkby83dkZyVDJBclpmT1prVGU4dVVKMGpCZVFsUkZIMW80MXRyV1ZMbC9neFJFSVJ1Q3JZem9TMlNLS294TmYxV1dWcE1ua05Mb083UDVHVVQ2WGYvQTVRc2VaN0tHb25RVVNPcHpUeUJmM0lLWVVOVENCczZHRU5Rcy82cTlqVmdMNitrcGVqeXhjdW5sb2JDQnBmV3QyL1ByeHlURFp0SkluajRXUHJmOHpnSlk4T296U3BwOGYzaEorN20yQVpGYTFQdyswTVFCSjlPVE5BbVhqWTFkTk1hUENQYW9yNjhzdlF6dHB0MWhPcEZjaXRNekpsK0VVUC9aQzAwTmJGcDlCMy9MQWYvazg2NEIyNGxhY2ZkcEkrYlRFQ3ZjT3B6ZnlIcWpwZEl1V3FFUzd0Tm1Vb2tOL0xOdUlsb0lsSzQ2TFBuME9GTDcrc25zWFBXeFJ4TENFZHJFTUhuMTR5b2xDMFhYNDdUbUlpV1NtcnI0MG1iM04vamV6dkYzMzZPTm13S2ZTWU9VcDRzQmIrM1lEUFFzdWk5VGFvSHpSSk9LZ0NNdjhYQVRBMG1LaXdPZ24xOU1XaCtIN0xKODQyMnlHbXFvYUdxRG4yWUViVzJhM05pTFN0RTBnV2c5L1UrQ3lPUU1CY1g0MENEVDBUb255eFNyZUIvREVXQ0lDNEVUTGlvaTJxQmVrRVF6SUJWRUFTN0lBaE9sVW9scVlIZmpPclI0RzNBNEsyc2ppZFVCbjk4RGY3ZE9zWXI5R3kraDBUMEVVWmxJUlQ4TDBEWGdSbnFBVmZ3UUdGT1ZLQkF3ZjhDV3N1cWRnME1XVVlSYkFvVUtQaWZFbXh0QWdidENiaEcvbkFGQ2hRb09OK2g2a0JqYXlIZ0dzc1NGSndESERwMEdKdk5wa3lFQWdWbkIySkhXbHA3ZjZoQWdRSUYvd3NRT3ZrZFFCQ0JibEk2T05tWmNaaEZLemR3Ny9KTnZMOHZsMmFkUkNZckw0OVB0KzNsMVkwSHFXM3ZjSWVKOXpmK3hKYjhHbVdKT29LdG1NeC9QVWZlL3R6ZjVmSy92SFF2NlpkTVl2bm9HMmc0aDljeFo2U1RQdjFTVmc0Znd0SHY4My9YS2EvUE9vU3BSdEd3ejJOMFdWYUpnTE43cDY3anE3MkY5SW1ONGRMK1VXemVzb0hIZjhocDNLYTh0MzRQUjRwTGVPdUh6SFlGMitvdDIzamp4d3kyRk5RcXk5VFJRN2JqYXc1OXNKVDkvL255ZDdsK3dqMHZNdTJUNXhHcktqbVhoVy82UWRPWTl1MHFlaVY1NDdEK3ZyUkpKNTVaUVBiT1ltWHpuYjl3bmtaYmE2TzFxUUVib09tNmxSdkE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5tME5yaTdOWld1akQ3RGp2YzZvRi9CR1F0M29OdmU1OWlQeVhQNmJXOWpmOHVoQzdydDZaenZIbDY3R2pJV0RrTlBwZk9iNXB4VTFIdG5OczJUZVlheVg4TDd5WWZsZFBSSVdGdkdVZlVyVDNLSGE3bXVCSnMrZ3pQYlhUSk4ySzdhdklYZjBqRFZVbWZBZU5vZTlOczJsa3BhcmJ1NDdTbWlDOFNuNGlkK3RSZk1aY3dlQzVhV2Y4Z2k3NWJpblphM2VCWHhUeHR5d2tOTmJGMlNBM2xITHM3WGNvUDFHRWx6R0dYamNzSkRqYXhRSm9PcnlWSXgrdXhHb1Y4UmswbHY2M3pPaHdnMXV6ZG5GaytRWktqcFlqcm5nVHh4NC8vRVplU3E5eFNVM25PN2IwSzh4V0xWRnpieVEydFE4QWhWKzhnMndjUk9sM0t6RmJmVW44MjkyRUdGMWpzT2JzSjNQSko1aXFyUmppaDlCMzRRM29kUjNmRTVnNDhmcFNncWRjU002U3BWZ2N2dlQ1Mi8wRUd3M0tBK0cyWTdxanNmMHEzZnRJYVRtSnhwQXU3RkViejMzN013dW5Ec05MU1cvdlpLNnF5RitYVGVUVU9VUW1scERmQlMxQ0x0bkpodm5QRXpyeld2cGNkd1dDdWFaSjA3SWNXY09hZVErZ0czb3hmVzZhZzFEVzZENm9vNmJRVHRUczYrZzlieHBGcjl6T3dUWEhPcjFXWFZZdWdXblQ2YmZnZXFUTXovamhtWSthdjl1M25yMzMvWTFUMlY3RXpKcUoybEYzeGhwZjlZYlgrT0haZEtMbTNreGtuSk10Vjk1RXJmdU5lUHpaMjhrdkRLVHY3UXVKSE5JRFM2VzdGdG1Xei9mejdzSTdiUTU5YjVtTEhoT09UcTZqRG9vaUxDME43eEFEUG9NdUpDd3REZis0OE9hNXUvNVJmTkpta25ERk9JN2VlejNaQjZzQUtQcm1YWFkrOXlHaGw4d21RSmZOMWdkZmM1K3hnWjAzWFkreno4WDBtMzhqL2dFU1Zudm45d1Ftc2w1N2tSLy83elg4UjE1TTlLZ0VMT1YxeXZOd2VzRW10L3EzaGNabTVneXBpMDVsSCtiTncwN2V1Yk5mcDMvNzg4NGRWUGRJWm15b2xuM0tBblVJYThaR0tueFNDVGRxa2RMR2NHVHRPdnFQdWI1aldkaFFpY09oUjIrTUppUStncERrNXU5eWxyNU42SFdQMG4rR1MzTUtTUjdtL2lhVUFYKzlpWXI5K3pGWDIvQWZGRWY1cm9Nd3BVK0gxNHE5L25acWoreW5wcUFjLzZUK0hGdXhHN2kyK1cyWmtNYUloMjlEQUtKL3hUemtMbDlCM08wdjBXUEVCVEJpRUlVckI1SDNVejREMHFLeFZsYWlpUXJCTDc0dklRT1NQTForTlZhVENsMVlCSUdENGdnZU5LelQ2NmdDalJoVGpaU0U2TkVrRHNHWTJyTjU3dDcvRDJFM1BFU3ZzY09RZ2I2emg1R2R2b200Z1M3SzlyanI3aVI2Ukgva3FLdkp1UHdEYklBV0s1WnFLNEZoWVFRTVNDSjRZSEtYN3NuMWlKcnBjKzl6eEE4TlZoNkV0ckIwUjJNN0k2dXdvaWlIQlo4ZllORU5VMGswZEJKY3RWWHdqNDNaREEzWHNQN3dTVTdXMk1rckxPWlFoVWxacW5aUXVHNHRHcjJGbzYrL1FVVmVQV1ZyMTJMdDdPR01tOFRJZThaejRNNDVMQitjeXJaL2ZkcmtrREFYRk9BYkY5ZldZVkdSeWRxME5ESlhyS2ZxMEdFYWl1dVJISjN0SFJPN3I3K1lINS85TDVYN0QxT1hYWVJrczdWNFpmb21KcDZWbWxOTFpTWGVJV0ZONzJCOVdDQ1cwbklBK2p6d0FsNTVYL1B0aUtGOGZjbTFGSjV3RTgzN0pESHlwZHM0K2VRQ3ZoaVF6S1lIWHNicU9QTXhtRW9LS2Z2eVRiYmNjQ1BmMzNBanYveFlqazl3czJub0ZlaGlJUkIwV2dTSHcrM2REbVRZcTg5US9zN0RmREV3bVhXM1BrNmRTZXIwbmx3TEdZSnZ2Q0xVMnJWS1pObmNqbmJXbmtFZ3EzRVZsSFlMZFJVRjNQTFJOdTZjTzROeEVWMG8vcFJWakIwWVMyN3VLWEtCN0hvNzl0SlNUbFRFa2hTcytBOWF2NVR5MTI4bGZNSzlxQXhhVkgxSEVwRCtUd29PbXVnMXNLTzVVdFB6bGdmcGVjdUQyRW96V0RkdU5rWFh6aVhhQ1BvZVVaUmtad010TmV2S2pTdHdETG1Cc2YrNjNXWGVQYkdMVXkya3BSclI0V2l4YytUOEhadzRITUdWZTE1R0M5UnVlSTNET3pKZGRIK05iOHN6U0NJUzFDcWtSbnZORFYxUUVBM2xwVUJQd0lHNXRBcS9NSmZid3l2MkFpNTg2MlBBUWRiaUJleC9hd1hHRnhjQUVIN1pRc0l2VzRpekpwOHQweWFRcy9jRytnenZvbEhTcXIrRUlkeEk1T2g3R0hIYm1HN2RUK0NZV1V3WU13dlpVc1dPZVpNNS90MGNVbVluZFhoUGRESi90b3BpYkE0dmZNSUQvNnlDemVRaHpEcjBjS2hsV2E0VmhHNjhYKzExM0xra0hWMTBIeW9Mc2xsYUFDcDlBUE9TWGVyNzlnT0hPRmxSanRWcDVzdnRHU1NFUnpJMUlaVDdab3h2T3NVckgrZFRsVENJeXhOREZUbldXb3ZLLzVIQzNKNU12ZSsycG9DQmZQQXI4amQrVDYrQmw1eGVLYzdhenBGTkJVU21Ec0NSdnhPck5nYWZBTGZwZU0xOERzOTdpc3g0SFdGeHZwUituMEhjWGJmZ0hkV0RoajNwRlB3OEdvcDNjZXpiZmVpbmUxekRweGVoc1VWa3ZQQWhFWDBpTVU2ZGpDNHdDbS96UWJMVzdTRFlZT0x3cXg4RFEzNzFmWWVtam1EWGYxL0JJRTNDZjlDRmhNU0YwblBPTERZOCtTL0M0eDVDeWxwTmZsRWlGMS9vTXRteVAzZ1ZvZWN3ZkVNMVZKekl3eWY1S3JjcGNZZ0R5L1lRUGlZRm9TYUxCcE12dmwxMHZ2djFUdURZOG5meEZjZmlIVGVJME40UnhONndnTU0zUE1iUnlDY0o2ZWxIOWQ0ZkVIdlBvTmVvdUE3T1ZNckJmNjBnYU54SXRGUlNYMm9uT01ibHMrdm9uanJETDA5ZVQyYnBTR1o5OXVTZlZiRFZkNkN0dFJCMnFpZWVlT0pLUVJBU3UrN1l0bE5sVXhGdTBHQ3hPN0RZSFZoRkxjT2pYUjBNanVXZUlzK3FabWhzS0RnY3FQVytKSVg1dGpsTmRIZzRzWDYvZmJjT3Npd0FBQ0FBU1VSQlZBTjZrOG1FMHluaDU5YzlmczNTMGpLQ2c0TlJxVlRuOUJoclFTSHF2c1Bva1J6ZjlKbDNsQkdIWFVOby85Z09WQjRuVmJ1MlU3UnBNN1dsQWdNWFBVMm8wV1VtcVVNVGlCazNnSksxNlJUL2ZBaDk3MVRDQjhiaTFYTXdnVUUxNUh5NUJqTkdrbTZiamFGSEFvRnhqUjBaTlJndnZnanpzUXdzSlNZQ2hxYWc5UTdGbUJwTHdjb3ZxY3F0cDk5ZHQrTWRIa1Y0Y3JQNTZSVVo3M0dPcnNFM2VRdytZaVcxV2Jtb0l4UHhqd3hBMzJzWW9VWWJwNzVLeDFRZnhKQi9MaUlvMUVWRzQ2ak1wV2pUWmtwKzNJY2hkUzdKdDE2Q1NnUkVnZHFNSFJSdDJVVGxMMVVrUHZnMDBmM0N1cVpsRFJ1UDJseE0zUzg1NEJkRllHd1k2ckFFWXNiMHBuaE5Pc1UvSFVEd2pjVTRiamc2Z3l2TzZ0c3ZCVU9nZXg5ckFnZ2I1bUtVTm1jZG9HalRKc29PNXhCOXk2TWtqazBBNlBDZVhOQVNOR3dvV25YN1l6VDBIa3pvZ05nLzUwdmY2VHo2OU5QLytCbFhFTUhhK0s4Z0NIYkFLUWlDSkFpQ0xBaUNMRGlkam85RVViem16ekk1dnlVZjI3bmljRk9nNEUvcHBMRllWdXIxM3YrbExSOWJBeTM0MkVSSmxHVzVVcGt5QlFvVW5POXdPQnkxSGlhbmZIcGZtNEFveTNLRk1tVUtGQ2c0MzJHMVdodkxsVm9MdERZQ1RuUTZuZVhLbENsUW9PQjhSME5EUXgwdGszSlBHeDBWN1haN2lUSmw1d1poWWFIZENod29VS0RnOUtpdXJqNmRLZG9rN0JvelBFU0x4VktxVE5tNUVteGhpbUJUb09Bc29haW9xSzYxUUJPRU5tVlZzaUNBV0ZSVVhIUkcwck8ybHR5S2VoeW5JMlJ3dHRJUUpSbUhVMnI2a2FRL3o0TEk3bngwdVIzV2xkTVZ1elY5TGlrYldvRUNnSXlNZy9YdVIwTnFGbTVDTzQrUGdIcnc0TUdsa3VTMDRPb0Ewem1rZXU1NlpRVjc3VnJDdlp3VTJ2WDgrL3BwakFqVEExYWUrK2hidnM0cXAxUUtZTXRUVnpYVkNuNjFialdQN0NqQXo1MmdNL3JDVWJ4d1VlSWZmelZxOXZERnBIOHo0K2NuU0I5d0Q1TU9yMnBxNUpxLzVCNU8xa3lnbi9FQUI0NGtNUEdwdVUySGJadVFST3lIaHlpOEo1blFwM2ZUcTU5YTJka0svc3l3M0gvLy9RMGRtS0l0L0cyTlQ4c3BvR3RTUnRTd1lOWk1rbnE0MHRwWGZyZUtSUnNPc25yZWNFREY1SkVYY3V0RU14UGZiTnVsZk9xRUNidzRQa0ZaSWdVS0ZIVFA2cEhsdkZZQ1RQTFEzRnJxYTRLQTZEcEc3Z1pOcTFlVFVBUG9HZVNQcGFuR1Q4MlFYbEVFNjl2WExxcXJxOWh5Sklmc0dzdWZhRWtFVkY1ZWdJaEtyMjlSSEM2cXZCQzFJb0pLaGRncTFWelU2MEVFMFV2djRqbFdvT0JQREtmVFdkQktxTFh5dFFteUlBZzBCZy9VZ0N4SlVzNFpPYm50SnQ3Ym1jV2NTWmQxK3FjYUx4MzJrbkpXN1M5aDYvSjFUSjh5aGNjOTZHSCtzUEMvZ011M0xnSGcwdDNMVzN4bHZIRXhybGJGMDJoTnhUanF1MTBBOVBoNGg3S3JGZnpwWWJQWml0clIyTnBOK1JBRVFWWURzdFBwek82MllKUHN2UDdGYWh3SnFTem8zem5OeXJRSmFVeHovMzlaN21FbXZMZWQ2eS9vU2F4R1dUUUZDaFIwalByNitxSjJUTkRUK3RsRXR6UTgyVTNGa0U5WHJXYXJHTWNyVS90M3U5VlZhSFFrVVk1NlRpbjg0QW9VS09nQ1NrdEx5K2lDajYzUkhCVUJ1YXFxS3F2cmw1QkpYNytleitwQ2VPZktGUFJpMTQ2cHJEYzMvWloxN0NRRittRDYrQ2dMcGtDQmdzNlJtWmxaNFNITXBFNU1VUVJCRUx3QnJTUTVpd0d2VHE5Z0xtYjBvaStvMVhuaEpib2NkZHJRWG14Zk9BR0FKOS8rZ1BSaUcxVm1CLzU2TDVJR0QrUERHUU80NzVYMzJPUHd3Vjhqa1ZjcmNlL3NxY3pyRS9LYlQ5QnZ5ZTZoUUlHQ3N3S3JJSWpYNG1walVJK0wyYU5PRUlSNjkyYzJRUkFjb2lnNlZTcFIxbWcwc2lBSWd0NHQyTFlBeWVkdWJCSmwxZldZblFMaEFiNTQvVTRKK1lwZ1U2RGdmd3VTSkdXb1ZPcEZ1Tm9ZZUFvMms0ZGdjN29FbTByV2FEUnlZNDZCTEVsU3BpaUs1MUN3aVlRRytDbXJwRUNCZ203QlpyTmwwZGEzMXRySEpudVlvWWlDSU1pQTdIQTRNcFVwVktCQXdmbUd1cnE2M0hZRVdwT1ByWFVPVzFQd0FKRE5adk5oWlFvVktGQnd2dUhVcVZNRnJRU2FrOU9rZkRRS3VjYVlwbno4K0FsRnNDbFFvT0M4dzlxMTYwcmNnc3ZwSWRUYXBIczBtYUdpNEtvOEFPVFUxTlJ5U1hLZUFIci9wcU4rNTlLMm4xMXdOYVRNVTFaVWdZSS9PV1JaL3VYUlJ4ODF0elpEM1hSRm5wcWFoM0FUbTRyZ1pVQ1NKR212S0lxOS84Z1Q1VldUaTZvd0U2cTcxNVRXNzlRcFJNY0pVQ3NzR3dvVS9GYXcyZXlIMnpWRFpTUUVXUUpCUnBaQmxtUkJsaEdjSURqa3B1QUJnR3kzMi9kMWZpa25Pek1PczJqbEJ1NWR2b24zOStWaWE1YXZaT1hsOGVtMnZieTY4U0MxclczbC9CeWUrWElqOTYzWXpFZVpoWCs2UlNyZnQ1bXhUMzdSNHJPVDI3NWwrcjlXdC92M1A2NVp3ZWpaZDVFODYxSDIxbmg4NGFobDBaUC9ZTkFWZDNQSjRxOS8yNXR3RkhQdFRROHk5SXFGWFB2R0QxMCs3SVVuSCtHL2U2dTZkYWxsLzNtTjBkZituZWdaejNBMjJWQy9XN242LzdOMzduRlIxZm4vZjU0ekY0WmhHRVlZWUVSRVJGSkRSRU15SkRVemM4M016Rnh6eTh5MXNqSXoxM1ZiYTExei9mVTF0MjI3bUd0bWRqTXoxOHpNVE0xWU5EUFh5c3pJQzVrUklSSWlJZ3pETU16bGZINS96SVVad0d2cVZzNzc4VGdQWmM3bDh6bm44em12ODc2K1BwelI3SE0zc0t1b2xCTXRLTC9talpmSkdUV1pubVAvU2NWNWUvQXU5dTByeHRhTW4yLzVpMDh6NS8xdnoraEtCYXRmcCsrNDZhUmQrd2QyMjg1aEZ4VWJVNmJQNDREOTNKRUlIcmZhRHJaaWhnYjcyUENUVFVwSXlGSlQ4QUIvWk5ScXRlNDZkZWZyV0xPcm5DNnBIYmdob3gyYnQrUXphMnVKYjJjREwzLzRCZnNyanJCbzY3NFFZRHRXZG9EZnZicU51TGJKREwwMEdkbmx2dWlBemUyb3AvUm9iY2h2c1IweXVPdnFMcTBjWGNmc2Y3N0h6UGxQc252Vi81RWQwN1NuL0xPUGVMazhnWjJybjJYOXd6ZGUySnRRVzFqMnl0K1pOeXFMR3J2cjlFSDlhQ1ZXdStlTW1ycjFuc2xzV3pnSmRhMlZjL0dxNUc5NGo0SUR4eml3NXh1cTdjZVovL0phcWs1bkd0cExHWDcvaTdTNk9JaTltQmt2RnJKczZiUHNYdlpITE9mdHdkY3ljZEpjaXBvUjQxaXJxNm11ZDUzUmxRYU92SjF0Uy85Q2txdnV4RVN4WnlHRm05YXlyMDBXbmZYbmpvNm1xUGpRRDgyMHRXQWZtNUQ4NE9ZRE9GK3FoMUFIMjZtalI5K3lhL1BtQWh0dzRtSW4yY1RqNDY4Ti9ObkdmcFQ3ZHY4QS9WTUJQZjgzWVFUVWxyRDI2MDlEVGx1eGJSZlhEUnJJdmJsSkZ4V1lPWTRmNXNtWDExSmNyMlZvdWk3a0M3enN0YmNvc2lwWUxzME9PV2ZudHYrdzVzdHZLYXgyczNybFcyeFRSVEx4enB0SmliU3orTVYzMkxYM2F4eFZHdVk4dDR6WWpwbE1HOWJ6WjNHdmJsc1ZpMWZtcy92N0NoU2RrZEUzM2NEZ2pQZ21jQ3Y5aG9mbXZJbE5uOENVMzQrZ2E1eTMwTVYrL0RBTDN0aklubklibWJsOW1UcThGNmRLZzFZYWpyTm8yWHZzK1A0WXNZbUpqQnM5Z3V5MitwTy8wQU91WXRuS3RiejhTU0ZibERVOE5QNG16S2Z3TEd6NVlCMzVYeGRqclQvTUU4OHRRNC9NcldQSGtORkdKdi85dFd6Wjh5MWxqZ2FXdlBRbWVsMGMwKzYrRHRNSnI5YkkwdGMzVWVPcTVxQTlnYUdkbkt6OC9CalQ3NytkakRnTnV6Ly9oQlVGZXlpdmJTRHQwaDVNSFhNMUpnM3MvdTltVnUwOFNJbTlua1dMbG1IUlNBeTk0VWJ5VWcwK0JiNktKeGNzWnM5UkdELzJ0d3k0cE0xUEdFUTd5OTlZdzZadmptRHBlQWxUYnh1S3hRZFVaVVc3ZVdMRlJ5aHRraG1lRlk4anRoUERlN1FMV0hLTC9sM0FyVk9mRHJIdVZpeC9CMk5xZTlaLzhDbTZ4STVNLy8zMVdIeDFtRFVsKzFtMjMwbU85a2VXRkJTUjBPa3laazY0Q2owdTFxOWV4Nm92ZnJDOXNXSHJrV1phbWdkUWhOY2M5Vk9EQzBsQ0tJcUNyY0dEcmRHRjdITzZDVUQ1NktPUEZDSEVqak41RHZzcnEraWNkS3JTS0JkN1MydUpFY2U1Yy9GYjNQcnlCajc0b2VaaThCQXdmZHBzRHVxN01HbFlOc3ZleVEvYXB5STdweWRkdFVkWmxCK2FRcGpjSVowaHVkMHdTUkhrNVdZekpLODdSZzJBaHQ2OUx5T3ZjeUlHY3lKRHJzeW0vNlZ0VDlvRDY2RUR6Rm40SnJPYmJadUt6djNpWk03cUNxcTFDWXkvWlRoais3Vm42b04vWVh0Vms1YTI1SjB0REJvMmhOeW9IeG55aHhleEF6UWNaZFNFUjZtTTZjeVVXNitoWk5QclRQLzMxNmRzYThuOHAxaC9KSnBwZDl6STBPNEpWQjF2T09VNXhRZjJzK09IT3BMajQwblFPZGoweWQ0V3BsMXpTZXQ4S1VONlg0Sk9ZNlQvbGRrTXViSW5DVHJ2aTVuZTlWS0c1S1NqMHhrWWVHVTJneS92Y2dvYTZrYVd2dkltY3FmZWxIKzhuTVY3dGVSR1ZmREV1MThCY0xDa2dwd3I4NWcyZGdnY0tHRE1zNXNBU0VycHhKQXJNNGpWYU9qZE81c2hWMTVHU3BzbTZGKzk3aitrOWVyTHNJNkMwWDk1aVovQ0xmSHFNLzlnZm1FOUUyOGRSdXlQWHpENHJ5dTg2bEZ0TVVNbnpTY2w5eXBHOXpJeWJmWjhWbjhaWk5EYmZtRFRnU2o2ZG9zT0FiWlZiNzdCak5jL1ovU282NGl0M01uSXVVMnVrNW9maXBqOTVIUE0vMjhOSTYrL2lsU2RDd2RRc0h3SlU5NzlqdHQrZTkwWFRwZGJhY1VFOVp1aGlpS0VrUERxYlkxdUJZMUdUWXhlRzRpS0JzRE43WGJ2MEdnMGcwN25JWlIrdjVmbjkzcDRjZktscC9vTVlITzVXYi92Q00rUEdZYXQvQnNtdkxhUmpnK040ZGRNRHE1VTdHWEY5M0hzZVdrZ0ZobG0zdDZmVVIvNEg3ZE1ScmNNNU1PNzRmdlE4eXp0TzJCcHI4T2dpU0NuVndhWkFhMUNRODhlR2FqTGQyTW9qNlJ2ZHNhcExVZU5sZ1J6U3gzQ29EbjNOVzM2bEV5bUQ2L2hzMisrd3laTVpDUTQrR3hmTlhuOXZWcmJtTnQreStEc1M2RG5IYno4MW4xc09UeUoxRDBGN0V2c3c2clJWeUFEYys0Y1NzYlRXNWwvUy9lVHRsVjkzSXErYlF4cHFSM28yU1h0dFBvbkd5ek1lK1ErWHA3N0RFTm0zQWRGM3lPZndtcEs2ZGlKbERnM1dtMDB1ZGtaSWFabWFxZExTSTJwUnhjUlRWNTJ4a2swdGVEdldSeUQrbDJLODBNelNxL0xHT0NwWjlVWDNvL01xTi9lUlBHM0J5bjZzWmJNcnFuTVgxY0VEQ2FoWFFvSjdmUVlOVnF5c3pQSWFhYVlEaHgySFNQN1pNRGwwY3hlT0k4U0oyU2NWZVZmRFV2WDcyZm1xNCtRbDZJaHI5TTRsdlNmeTI3N3JjZ2ZmNEl6YXhEVGgzaXRnd2xYZjBoaDhFZnR4ekxLWXhKSWFVVUR2dmZPMituZlBZYitLV05ZK0p0RkZEOTZFMm0rNCt5R05CYlBIT00xRWZNQUZKYS8vekZUSmovSFpSMjFlMW94UXoyQVI1Szg0Q1lFSUNIOGE3cW8xU29pSXlKUSszSS9oUGNnSWVycTZqNkxqWTA5NVNNNDltTUo5N3oxRlhQdUdFSG5xRlBaMUdyMGFoalcrekpTalpGZ3pLSlAxSFkrSzdmL3FvSE5XVk9MclUwY1p0L2pzY1RHQXhkMlVUQTVRb2ZGM05JME1lcFBIZDFkdHVCSlpxN2REOGc4OGR4OFJuZUpQUG1IYmxjK2cyYSt5NUJCdVNSRXFhbXllM0M0bS93L3lXYmZ2SktOV0dKY1ZOWTBJbGRXWWozNERTTWZQQlE0cm5mSFMxSGdwSFJZOTk1L1A0OHNXRUgyc05mUkpYWmsvditieXNDT0p5L1pTK3ZVQVlBaE4xOVBFbURzMnZIQ1R3cFpqVm9HV2FWQzFraG9aUlgyUmdFME1IUEtJMndScVF6cVpvSGpWVGhjcHhlQk54dDk5NjFXb1ZhNVVjUloreEtvckRWZ01mdElFaU5OSkVUWktEOE82dG9hTE9ZbVd2K0UySmpRanppZ3lGSXJGOVdRbE9BN05pYVdCTWxLcFIzU2ZGMU83cGpjek8vVlNFVlZJME1zSmc2VWZGdmNHcWdGKzllRWQwT1NaYlFvMURjNHNOa2RoUGpZQUdYU3BQdDNyRmp4WmkwUWM2TDdyenQybUR1WGJXUHltQnU1eXFJL2pTZW1vV09pQVpmYkhYZ01MbytFUnY1MUwwMm5qVFZoUEg2TUtnVXNNbFJVSGIzd1ByN3FvNnovNlBNV3p2Y2hwbFF5MjBhZjlOeXhrNmN6ZHZJSjdrMmp4dUVLRFFhc2VtY0RJeWRPWmQ2SVRvQ0w0aTN2aE93dnE2b0N6S0JZcWFqVmtSUWJRWEpDQWdsWmJkajQxTmdUYURncVpMZW5SVVRTMUw0ekMvOCtDL0N3YlA0L21QbmFGcmJQSG41YXo2UnJ0elBNYUpJbFpNVnp4Z0VNbTdXV0tyc2cxWElhdXR5UGUxbjRUUnlsSHp5SUFTaloralpQZkZFU2RJQUUwcG12N3VhMDJ5Zy8za2h5dXppYWtjK2pWU2s0Z29kUWJTQWh4a1pGbFF0U05HQ3ZvYkxlUUZJYjBKbmpLZDNXRlBNdHF6Z0tRZDhSWFdJOENjY3JLVmNnVFE1MVE1VWZxWUVVRTlSV1V5bU1tSU1nUTI0QmhoRll6QkdVVjlUVVB2cjRNMlVuQUxXUWtpclpWM0VRcWRQU1Jxc1JHaFZlalMxSXhNcVZLOTNMbDcveHNTekx3MXAzbDlVeCthWDMwU1Yzb2Zydzk3eCtHRlNSSm03dDZhWDUvdVNyUFJRZnE2TFIwOEE3bnhTU250aVc2OUxqdWJIWHBVd28rQzg5alRuVUh6N0k1NHFGdjdhTCtGVURtNXlRd2EzcHg1anh3bVltWDJIaXNUYytob1MrWHNDcFBjcTJmWWNwUGZBajlxTnE4dis3RzFOQ01qbWR6aTJWazZsVGR4Yi9yZnM1djdlczd0MG9ldWtkRm1mcFNVMXV6K0FlSFVocGw4Q0tyVnZZMlZWaTM4Y2ZzUDRISlVRalgvbkcyd3hPR1UzbHArOVQycUVmZmR2SzZFMERTVnYwQ05OZWE4ZXRWNlJRV1ZMTUhuc2JIaHFaNHowcHFoMEQyaDlqenZNYkdOekp6TUNCbHhPcmhsWC9YZ1h0dXRMWnJHYm45NVdrWjE1ei9nWlNuMGhYZFJrTFZueEVYdHNvY2k3UDRYUys1eHZmWE15WWRSNXM3ODA0OVJKd01mRWtPYjVqMlVkN3lORTdlT0tsRHduTmxUZVIwZDdEb3FVYnFleG1KaU1yaTdRMnA3WTNDemU5emVWemQvSHRaODhTdW94U0RQMTdSUEhVb3JjcDcyVWhMNjhQeVFZVDQ0WmV5bVBQTGlYMnp2NXNXL1VtdXY1WDAxTVBjcjkrSkQ4OWsrbXZwWkFUV2NXcm54NGhOM2h3amVrTTdsakw5cUlHMGpKQ05mdEZMeThqTS9JM2JGKzFrdVJyQjVCK1VrVlU1dGJyKzNIUDh5OTlldkQ3OG1BejFCMENic0svTXFXdlJsUW8xRHNFa2lTanVEMm8xR3ExSklSQUNDSDV0SC81NFljZlRsQ3IxYTM3MlJRWHg1MHFFcU0wT0Z4dUhDNDNqYktXM3NsZU0rT2JIMG81MUtnbUp6VWUzRzdVa2RGa0prUmpUa3lpbTc2UkRWLy93STlLSkErUDZFY25neHAydmRteWpiYmRJYW43ZVptampkWGxLSFZIMGV2MVozUmViVzB0MGRIUnlQS1poTEpWRE9pWHc0R2RPL2pQL3FQY2Njc3dPcVVra2R1NUxiYUtVbFordklkYUtab2VTVkdVVmxSaDE1ckk3aGdNYkZwNlpYY21xaFVOUHlvdWdaeU84Zjh6ME5hWlV4amMxY2dYUlQ5UXI0bWhkM29pR2QyekVPVUhlUHVqUXFJdTdjdTkxM1NrVTNwblV0cDRQMkRYWDNVNS84bmZ6QTlTSWd2K2ZDdUprU3JRUkhIemIzTDQ5c3N2V2ZmSlYxUTZ0UXpzY3hrZDR2UUJOOFkxQTNMNDhidGlTcW9hNk5HakM5RnFzTmRVc09tVFhlUi9mb0NVN0VITXZqV1hpUE8xNkkyazR6Zjl1MUY4c0pqaThtT2tYWnBCZkdUUW9HZ005T21SU212dmEzeFNDbGQxVHdreXExWDA2SkZPSkpEY3NSUEpNVnAwSmpPWFhaTEc0T3kyckZ1L2xjL0xHbmhnd2syMGl6ZlRyMXY3d0F0L1ZiOWVWSlY4ejdlSGo1S1lrazU3azlZWFhPaElla0pVWU03a1pIY2gyRHNVYmJZd29OY2xOSGNrOUwzeUN1b3JTdmp1eCtPa2RlMUdnbDZpWisvZTZLdS9aK1htTDlFa1o3TGd3WnVJMWtpZ01YTFRvQ3dPZkYxRWpiNDkvUklhT0dycXlnM2RMWUg3U2hCVkxOaFZ6MjE5T2dhQ0J5dmZmSThieG81aWUvNFdHaTBaTEhqZ0JxSTBUYzlPWnpMVE96MDBTYVpqOTU3RVdnKzk4ODcydlljQUo5QUlPSHovT2dHWEgrQlVzcXlvSkFtMVNrWlJCRTYzQjZjaUllbDBPdG50ZGt0Q0NGa0lvUkpDYUV0S3Z1K2VrcEt5N1lLOElSZTRwS3IyMjg5eGwrOGpMdTdNS2c5S1MwdEpTa3BDSGE0OENNdEZLa1hmZkVkcXAwNm9uY2U1OWZkL1pPak1weG5mUGNoajVhcGgxTDFQTWVmWjJXUVlaTURKcUJ2R01YYlJDa2FjR2YwaDcrUnZ2Mi9rSCtiOVNDZ0htMDJDZWlRYUpTU25KT0dSSkVsUnk3TFFxbVVSb2RVUUVhRVIvdUNCa0NRSjRZMHZDRUJKVGUxWXBDaWVQVUJtZURqREVwYXdBR3o5Y0EzalpwZWhTSkVNSFRXSmNkMmJ1ZUUxSmxhOU5DZkVMNWpldFJPeFo3aGdreUxFdnBGL21IZXNtUm5xcG1XNmg1QjhPV3orSUtoS2tsSEpFbXBabGdueXN3WEF6ZTEyRjZqVjZsOGRzTGtqWW5ESHBrRkM0cG1ac0xVU0lqNFZOT0ZsdGNKeWNjckVPUzh3OFF6UG1mZmFXMmZjVHIydC90TVQrTlk4U0pJWDFDUUVrb1FreTk0SXMxcUxTcU5GMWtZZ1IrZ0M2UjVJa3VSVDJyeUlhTFZhdDhUR3hrNzV0UTJPUjJmQ0pVZEJ3cG5weG8yVkxrVDhKUkNtQmc5TFdNNnJmRk82Y3graGFSNXV3Q05KVXBER0ppRkpzcEJrRlpKS2c2elJJbXQxeUZvZHFnaDlrOGJXTEo5Tk1admp0eW1LNXpEUTdyemVSZmJ2V3Y3V3RudDRkTU1TbG90UWhCRGxsMS9ldTdTWkNlcmZmSlJGVWdocnJpekxnVTJsVXFGU3lWNWdrMlZaZUR5ZVlGTlVBQjZQeC9PQlNxV2FjRjd2Sk15N0ZwYXdoTVVuRFEwTlcxdlQxb0syRUI0MldaYUZIOE84d09ZRk43azFqYzJQakhWMXR2d1RkYURHYXVXSFk3WVRzd040UXRPZkZVWEI3UW5kZnZXaVZMTmk4U0lXTFZyRSt1MUZ2N3JicXlrdll2V0s1U3hmZHlFQzZFNEtWcSttMG5FUnZOMk9LdGJuZjNiQzNmdTJiNlN3TkxUV2V2ZVdOUlJWdEY0bFdsbThrNVhMbDdObXkrNW04OVBKWndWcldiNXNHWHRLbTdoNFBpdFlUNVh6ZjNQckJ3OSs5MVV6VUhNRDdsQXpsQllhV3hPZ3FWQ3AxRjVnODI4UTREWVNnQkliRzVzUEhBNTlHRFllZVBwVnJsKzBqajhzZTRlK1Q2M2l2NVgrQXVSRy9yN3NiZkwrOWdMcGMxWlNGampKeFVQL2VvMis4M3piNHk5ejZjd2xmRlFqZnVVelZNWmdNRkM2NHkwV3J0N3hpK3U5dTJRTG82YzgxZnBPNng0RzVWM1A5cUpTS2lwck9QK2ZLVHRQVEh1UXdvdUFPMkhkTTM5aS9iNFRFNld0WC93d3E3ZVhoZnkyOGRXL3MrMkF0U1ZHbG13aWQrQ2Q3Q2t0bzdJNjlPR3RuZmQ3N24zaWJjcktLN0RhbTJvN2JIdldNSDMreHYrSkdkcWpSNC92ZmVEVjNBeHRLcVh5RllZR1k1Y1gwSm8ydFUrRms1clNQaVFoU1NoQ0NBVlFQQjdQQnBWS2RWZlR1NnJobmxFanlHenZMUk5admY0OTV1Ui96WVpiZXdNcUJ1ZmxjdGVnQmdZOS8wVlFselU4K2NEdkEzK1ZGMzNKeU0zSDZXT1NmdVc0Wm1MWXJXUFJWWDlDWWNrSnRKN0tNbXJjT2xLYk02UW9Uc3BLeTVBTlpwTE1vVFdRRGxzMTVaVld6RW5KR0hYbkthOU9VWERVbExGcCsxZTQzVzZRWmRUKzVHUkZ3VnEwazFMTFFPYk5uTzZkV0tkMVRVQUdlMDBWbFRaSVRXNjZaNmU5aHJJS0swbXBLZWlDTCtaMlVGSldpU1hsREpkdVZKeVVsWmFqajdVUWE5U0ZkS0t5ckJTMzNreFNyT0gwQU41aHBjb0dsbGd0WmVVMUpDVmJtdTdYTjA0NmN4Sm1RMmc3MVJYbFdKMXFVbElzSWM5SEFSUzdsYklxRzhrcFNhR0p2YzVTNWkzWnljTGRyN1I0ZUJXbHBlak1MV20vRkxlYjZVcytRYTJXVzFoSnhUdDJZT2g3QzdPbVQwT1cxU0huYk4rK2czRlROak41Y0doKzVzRHhrNWlhL1FDbFU0YVFjZ0ZqWlhhN2Zjc0pmR3VlSVArYUFnRWZXOEFNOVd0c2FyVUt0VnFOMm1lUEVteVMrc0tqQ3VDcHFhblpFQmNYMXdSc1JKRFp2cWtVS2lVMkJzY1JmNkd6bXN2UzJrRnR5VWx2NEsyZGV4bVdmVFVYZFh4UnNURjMvQTI4V3VnbVJWOURsYkV2RzljOGowVUg5cklkREI1MEc3cjBuc2pXTW1MNzM4K0t4OFlCc09YVnYzRFgzUFZrWmFaUWV1QUFNNVovenFnc3d6bnYzaE9UaDdOKzV3L1lEbFF4YU1oMXFPVkVGcTVkUm1jZFBEWnhDSnQySDZibVlBMURobHlIbkhvVkc1Zk1QQ1c0amUvZEJuMy9DV3pOMzRKZWRqQmd5Z3M4TVNHUHRmTWZaT3FDcldSME5sTlUyc2lyYTliVE44MklyWFE3Z3diOURsMTZGZzZIaTVvZ2pxRXhtWkdNV3RYQXFLNVFzMk1KWGFkK1NzV09Gd0U0c0cwcG84Yy9TbXpuTEp4VkpReWE5aUt6eC9UR1hyNkwwU051bzhxWUJsVUhTQjN4S010bmp6MXB2OGZudHFYRW5FdnBycy9vbXRzSGEvRlg5Sno0QWdzbURhUnkzeVpHanJrZmJYSUdOUWYzTVhENjh6dzVjUkJRd2Npc2ZsUW1kQ2FXR2c1VW0xaTUvbTJ5TERvMlBuTTNqNnc5UWl5TjJLdUtjR2JjeWZZVnN3THZRa25CS2lvNi80YVFJWFZXTVduRU5XeXJTY0NFQTdldG1zRkRmSXB6NFRwR1RudVdvbDNibUw3OFc2WU9TZmFkVk1XVWtiOWo1OEVERkZmS0RCbXlHVXZ1TFN4NzdDNUt0eTVqd3B6WEtOcFZqcUg4TnRZOXBXUGNySmNZMTk5YkZvbXhKNE03bDdPcW9JUnBRMUl2MkN1eGI5LytMMDlpaGdacGJLRkJneVlUMUd1R3F0VnFTRTV1aDlsc2xxS2pvNldJaUFoWnJWYXJaRm5XU0pJVUtVbVNVWktrQkNHVWZVSW9vc1htckJQM1BmT1NXTGozYU9qdk5jV2k1NnczeGFGV3puSFZIUko1czVlSy9RMnRYTzhDYkVlT1ZJaERodzZkOFhsZmYvMjFhR3gwbkZXYkh6NTNqN2orankrSC9QYkRCMCtLeEY2M2lGcVBJb1J3aUQ5ZmY2bDQ4SVd0UWdoRi9PZTVlOFhWOXkwTUhCdmM3dTJYeFloWFByZjYvbmFLeGtiM1Nkdis4YVBGb20xaW9raHN0ajM2eG1lbjdIZkQxOHRGVEs4N1d0MTMvUE9YUmVLVjk1elJjN2lqVjVTNDVyNW5oTXQvL1FhN3FQMXFsVWpzZUpYNHZ0WjdIMSs4TVVQMHVuMnVFRUlSejk3ZFIvenU4VFhlOXI1YUlXS2tSUEhoajk1emIra1dJZDdhNyt2TGZ4ZUx4Q3Z1OUxiaktoTlh0NDhYcjN4UzVtdlhMWTRkcnhGQ0tPTFJtN3VMKzU3Tjl4MVhKVzdzMWs2OCs2Mzk1SDIrSWxHOHRkOHBYdnZ6OWVMMmY2d1J4ejVaSXJyOWRvNFF3aVorZjNrNzhmZjM5d2doRk9HcDNTTjZ0YjlVZkZIckhjL2EycWJydnZibjY4VHR2dnZZOFBTZG9sMi9lMFc5VUlSb09DaDZ0V2tuUGo3YTFONWJmN3RGM1BqdzBwQStmUEhHSTZManRkTkVvMUNFYUNnVlY3WFRpRWZmTEF3NTVzL1hkeEJQYnlodE9XL2ZuQ1Y2M1BGRXEvZjJ4K3M3aU9jK0xHOTEzK3NQM3lodStkdktDL1plS29xbkNCZ05EQWNHQWJsQU55QlZrcVFFSHhaRnlyS3NVYXZWcW9pSUNEazZPbG95bTgxU2NuSTcwdFBUeWNyS29rK2ZQbHg3N2JXb1pWbmxqeWhJc2l3TFJWRWtYeERCYjQ1Nm5FN25lMXF0TnBSMFRYSHhyN2MzNEU2L2duc3lUcjg4YWR2Ty9jUmYycFd1T2k1cTJiWHJTM3IydlFhakRLQmx3T0E4SHR1NUd5YjJKYk4zZnc3TS9UUGo1Ukw2NXZWbDVNaWgrSW1rQmd6c3k1eTdidVRBeU92b08yZ29RL05PenNsbTZYOFg1UlYzL1d4OGptUEdqZzJZWGpxZGpoM2JDbEQwc0dqdVg3elRxcXFJUGJ0MEtNQ3VuWHNZT01GTEdtREtHa0JQODZrTlh2ZUJiWHdtOTJadFhsS2d6VmlURWFoa3k5WUR4Sm8vWU1hTUQ3MDZqZHRCNGU0U2hxZDNQY2tWOVJnTWFqQWFNQmxpTVJqdE9PdzJzTzVqeTI0N2NzSHJ6TmpxTlJXZDdsTDJITFNSbmExang2b25XYmppUXlxdERtb3Fpa2tkZFhQZ2lqMXplNk1IMENXUm1sQkRWUTNnczhxcnE2c3dKWWV5Z1JUdS9wSzhBWGQ2dFRwZE1nUHowcys3VDlNWWE2S3E3TUk1Tkd0cWFyYlFzdElneEJTVkpFa0pyQnNhRWcwTjhxMnAxV2cwR3E4cDJzd2NGVkpUdHE0Q2VNckx5OWVucHFZK0ZCVHlaTVY3Ry9oWTdzZ3IxMlZ3MnJYSFNpTXJzU09ncEFBQUlBQkpSRUZVZHhZemNzUkZsdUp4aHNYWkNiM0hzRzkzTGdYNUJheGUramVlWExHZGZXdm5JZ01Ubm55WC9ydTJVYkJsQ3pORzlXUDN3bzk0Wk1TSkMwUXFkNnhnOEwxL2IvSDd1Tm12TVcxRTFvVVBwaGhia2c5WTBub3hZb1IvN1lZYkdUVTU5cFNQek92Vjh6cnRGRVZwZXRGUGVxS2VBVU52b25lQzk2OFJJMjRrSlQzbDlBWlA5akZFZU9FVFVGQzBaZ2FQdkpFVTJYKzltMG5ycktkOHkwSW1MUGlDL0kzdjBUWEJ3UG9uNzJSK1JSTVVxZVVUKzBXTkpoTldxN1dWUHNnWGRLUnNWaXNtaytHQ3RiZDE2OGRmTlFNMTEwbk1VQkdhdHhia1cvTUJtK3hQYUdzQ3R3QlZlQ0E2bXBiV2FaK2lLSnQ4c1F2ZS8vQkQvbDFuNXNXYmV4RjVCcy83NkEvZjhJbW5MY1BUREJjVnJsbGkyMUpjWEJMeWxjM092b3pkMi82RFZRRndzbVhqZG5KeWVnWW1sU0VobFJHM1RtRHhNdzlUc1c4L0RwOEQyV3ExazU3ZG40blRadkhRK0w3czJYZmdwRzJiczRlemZ0MTdyR3UyM1RXNDZ5bjdyZFhwVUtxcmZIMDhmVm4yeEJUbUxzMC9yV096K3c2azZzQlhKR1gySmpjM2w5emNYTko4UVlYczNKNFViUEdta3RRVWJtRlhWVk5IWXMxR1NrdThrY0VkMjNZRW5xMDZ2Uys5bGM5WUdZZ2FLdFRVV0lFRUJ2UlA1bUNGTTlCT2RrYm5Wb0gyOUZTYVRBWm0yQ20xeGdhdWw1bWVodEVnVTFGYVNrTFhYblJOTUlCaVkrMjZndE8rYkU1MkwvYnRDYVdLejg2K2pPMWJ0bmxYZzNPVWtiLzk0UG4zZCszWlEwNTJ6Z1Y1UDl4dTkrWVJJMFljQ3dJMkZ5MFRjNE55MTZTUVpOeGczNXBHbzBhcjFhSldxOVYrVVBORlIyVWhTUXJOelZHN3ZXR3R3UkExbUlZalBGN3dIVlpkQkFQbjd2ZStBUEZwZkhMdjFRRE1YdndxNzFjNHFYTzZ1WEhPUzJUMnVKelhidlJxQm05L3ZwOSt2WHBoa2k4cVhDTnorQVR5WHI2SnRLNXZrVFgwUHRZK05abVVRUk9ac3Z4OWNuS3VJa1ZucGNyWW40M2p2R2JYWnl0bU0vR1pqOG5zbWtKeDRXNG1QZktTMTNUQnpVUERlN0JMU1NmSjZLU3d4TTN5OVlOUHJtOW85U1FsbjkzTEs2Y1BaR3J2WjhuSnVneWpJWlZsQmUvUTlUUXV0V1BUVyt4Tzc4d2o0MDdOTUcvTUdzSGlTUjh4c0dkM3VtYW1VMVZ5a0s2ai9zYXJNMGR4MXlOL1orWGczekZnNjRzNDNZTGtJRk4wM01TN0dUcStINXV5T21NeFJ5RGpXL3RCbmNTaTVmOWd6TGlyV05ZMUU2V3FqRUZUbjJmbW1ONDhOUDhWeG82OG5aemx5VmkwRGc2V0NaWnQzVXJPV1ZIZzZabjM2a3VNSG5NRGE1L3FpczVaU2FtdEhmazdWNUUxZER6bUo2NG5iL0NuNk94VldCTFNUdnVxNllOR1lwaDJHd2NkaitGZit5ZHIxQlNHTGIyR25MeHJpWlZkS09ZbW1wK1haOS9CeS9uRkZPK3JRRmR5RTZzZTB6Tmo0WHNNeXpLZS9ZUzFIMkRqTGlQTGw2VmZrUGZqMEtHeVQxb3hRVjBuTUVPRkpNbEIwZEFtVGMydnJXbTFXcVJ1M2JyUjBOQkFRME1EalkwT3FiSFJpY3Zsa2hSRmtSVkZrWVVRYWtEN2YvLzNtUEhoaHgvZUJyVC9KWU5NWldVbFRxZUw1T1F6cXhUYnMyY3ZuVHRmZ3ZZYzE0cldWSlZqZFd0SnNZUytYVTY3bGZMS2Frd0pTWmowMmhiblZOdGxVcEl0cUg4bEh3bTN3MFo1UlJXeGxpUU1PbTN3RHNyS3FraElTVWJiN0Y1dFZlWFlNR0l4dDJJQktFN0tTOHZSbVMzRUdrSWR1dFVWcFRqUVk3R1l6NEdCcDFCUlZncTZXQ3pCYVRtS2s5S1Njb3lXWkV6Nk0wdkpXVDdySm5hblBjd1Q0M3VIdEZOWlhvYk9sSFJhdE80L1JiWXZtY2FUcFRtc25uUCtYVVpDaUxLYmJocjU1M2ZmZmRkT0UwV1JEYkJKa21USHk4UG1sQ1RKTGN1eUlzdXlvdEZvUkVTRWxvZ0luWWlNakNReU1wS29xQ2dNQmdOR281SFkyRFpJUFhyMHdHNjMwOURRZ01QaGtCb2JHM0c1WEZJempqWU5vR3RzZER5aTBXaW1ob0V0TEdFNWY2SllpMW02cVlUeG93YitUOW92V1BVcTZVUEdrV0k0LzE5TnE5WDZVa3lNNlFPZ2dWRHV0WHBKa2hvQWh5UkpMa21Tdk54cmFyWHdBbHNFT3AwWDJQUjZQVkZSVVVSSFJ4TVRFME5jWEp6WEZQV2JveXFWU3FoVUtzbmo4UWhabHZCNFJIQ0psZnZRb1VOcjB0TFNwb2FuWGxoK1BWTEQ4b1hMcUc3Rmoyako3TXVvQVJkK3pWYlptTWI0VVduL3N5Y3ljTlQ0QzliVzVzMWJkalh6clozUXZ5YkxrdkNibno2c0NqSkIxV2kxR2lJaUlvaU0xUG1CVFVXUXI4MFhIWlh4eGtZRDBWRWxQZjJTL1c2M2E3VXN5eVBETDBSWWZoMWk0dFpKazhPUDRYOGdqWTJONjBhTUdGRkZxRi9OQmJna1NRcXdlUkNvRFExbDhRakdMcjl2VGFlTElESlNqNnpSYUFJSEJLZCtCQmZHK3dJSkhyeVZDRytIaHlRc1lRbkxUNVdpb3FKUFd0SFdnb01HbnRZb2lwcW5lR2cwR2pRYUxWcHRCRHFkRHIwK0FHeWFRTGpVcitLcFZMSm96dllCZU16bStBSWh4Q2ZoWVFsTFdNSnl0dUx4ZUhiMDdIblo5eWZSMWxxd2VhaFVUV2FvRjZ2VXFOV2FGdHFhd1JDRldxdlZvTkY0YlZTWHk0dUFicmNiYjBXQ2dxSW9BWEFUUW5nQWQzMTkvYi9kaW5KbHJVdW1YUnRENjVFNWp3QlZzeUozajR2eTR6WWlvZ3pFUllZcHRuL09zcnRnTlRzT1ZJSXVpWEhqaDZNUFA1S3duRU01ZEtqc1B5ZlIxdnlNdVVwb3Nic3F4QVQxNDViZnQ2YlRlUU1KMGRIUnFMVmFMUnFORnJYYTJVb1F3ZDFpb1JmQWs5SWw4KzFMSDV3N01USENrMW51aXVUcGNkZlRKeUVTTDIzUk90Nzlyb3BLeGNTV3Y5MkN2eVQzeUtGdkdiOXNHM0dXZUk1WEhxVnpyenorT2FnTGNuaU1XNVh5SFRCbkN5eWE4YjlwWDZ2VFk1QXJtZnJRRzR3SUExdFl6cUVvaXJLdlg3KytlMXJYMXBxVzFzTy9ZSXNrQ1ZtV1dna2ErRTFRdjdZV2ljRVFoZEVZZ3h3UkVZRlhhL09hcEUzZ0p2dTBOam1Rck9zSHR1UGxoOXo1RDl6MDV1b0hiK2VoakFqbTVIL3Q2N0tYdHVpOWU2NmgrUnJqYjJ6OWxPNTVWN1BzOThONGQ5SzFmTHA1TzE4MVhDUUQ2ZnZYV2dWbEZhSDc3RFZRWEVySVN1ZUtBclp5MkxvTDNHN09hUFZ2QmU5VUtTa0d1ek8wQTdicWx1MmZTREx5aGpCMjlGQk9GUEYzTzZ3VUY1ZGdkN2JzWEUxbEdTV2w1YlRZcFRncEt5bW12TW9hZnJzdllxbXNyTnhZVm5ZNEdOU2NCTllMRFNtaFVrSzF0ZUNnZ2Q4RWJkTFdvcUs4MmxxYk5pYmtpQWdkV20yRXp3SFhsTUdyVXFtRnZ5SWhLSWpnYXd6Mzh1WExWd0xmcGNURzRHZ01wUzJLaTJ5WlFHalFhbEg1bDdPWEFMVVdnK3JpR01qK0ZwajJFT1FOZ3VHRFlJR3ZPRzN4RE9qWkg2Wk1nS3plVUZUdC9mMmhNVEJ1TnBSc2dTRkRZUEFZOE8waTF3eTdmUnlFZTFaQXo3Rk43ZVF2Z0FGallIQXVqQmtMMlNPOHY4OFlDVU5Hd3NneE1DZ2JKaS84aVdicTJtZm8zTGtYVTZiY1E5Zk9QVmk1bzlTM3g4bVRFNitoNzlBN21EcjU5L1RNSG81L2o3MXNCMzB6TG1YODVEOHhmdVMxakptNU5QeUdYNFFpaENpZU5ldlJMMDloaHJZb2VQZVZUWW5nOUE0dnNFVVFFYUh6SmVrYWlJbUpJVFkyRm5Wa3BJNkdCcTg2NTNScWZMNDJkZk1JYWJCSjZnRThkOTg5MFhyYjZCR3Z2L3pwZDdOSFh6djhsRGQweDNYWDhNRHJteGhmdkpmcVl6WGNPZnBhTHJsWWNsM2RFdFd4Z2owK1ptYUhBNHJYdzJOYm9YQVhtTlN3ZGk0ODlCU3NmUXllWEFrSDE4Q0lGWkMvNHN5YTJya05kdTZHRExPM25jQ0hKUk5XellHYUhaQTZFWjZaQkdlVnY2NVVNbTNTLytPeHRkOXdhN2FaZmF0bU0yRGFZNHpZdmhodHpXNFdyTEt5cGVwelVtVlFuTTZBdHJwanpWSzBBLzlFL3NKN3ZSRG9kSWJmOG90UWpoNDkrdDZMTDc3WTJKcTJKa21TM3d6MTBFVC9MVUlqb2NHZ3BpVWlRa3RrcEM2Z3JabE1Kc3ptZU9USVNEMDZuWTRtWDV1R1prbTd3ZWtmSWFrZmsyYiszNy9kNlZjVW53NXQwWmJQdnFCU1orR2VxN0s1NS9KMnZKRy9rd0EvNWE5ZFpNR3RRWnFWVGdmYnRvQWVtRGNUWnN5QWpidGhUK0ZQYjZyblVDK28rZHZ4UzU2dk9zZVVBcnBxYjNyMzJUbi9DaW0wWnpBZzI5dEl4c0JCcUFzL3AxUUJqT24wVDY5a3pMRGJtZnZNSW5hWDFRVEFNN04zZnc2c2VaenhrMmV3WlBrNmJJbzYvSlpmZk5yYTkwODg4Y1FYelVBdFdHTnJrZUxSSE5SYSt0WjB2a2lvSVZCMVlMRWtJa2RGNmRIcEl2SDYyclQ0bzZTaHFSOHFFUVJxQ3Q0SXFmdVYrYzhjLy91QWprdFBIUUJvWk9XbjMzTGJ0VmZTSjlYQzlmMzYwczFWd3FhUytvc0UyTUJvYU9rTFMra0pJMFo0dDNIVFlOVVRaK2F6VTl3dDl4bFBVUHNjWU1vNW45RWFPWmFsMi9jeWYvb3R5Qlc3R056N2NyYVdlVFV6THhYVFI0ekk2OHpXcFg4amIvUk1sUEM3ZnJGcGEydi8rYytuSE0xTVVMKzIxdW9TZThFWUZGeGg0TlhXV3ZyV3pHWXphclVhMldBd29OZEhobWh0VFVtNzZ0YTQybnpnSm5ra1NYS3ZXYm5pVFNIRS9wUGZrZ3BEaElvZnFtcTlMNlNqbGtQMUVnYmR4ZnZWN2o4QURoUkMxeHpJemZWdUtVRjE4SG9qV0N0RGd3b0FDVVlvOVRIeWJQdnNQSGZTWU1ic0xxZWtPcWdYU1psazZmZXhaVmNWQVBzSzhuRm5YZTdsSkhQYXNMcjE5QjQ0akJuekZqSWkzVUZSaVZjM1BERVZVMWd1RW0zdG05bXpaKzlzQmRTY1FmNjFWbEk4WkVKTHAwSzFOYjArc3BtMjVtVStVVWRIRzZtcnE2TyszbzdEMFVCall5Tk9weGFOeG9YTDVVS3RWZ3UzMnkxNVBCNmhlTU56UWdnVUVJb1FlQ1pNdUxQMmhUckxhenVtWERjUFRreGJOUG42SzdsNzFYdDhzVE9lbXFvcWtyTDZNRFJvN1lTTFRkS0d3c3l0a0pNRm1lbmVLT2JRaDJEdU9COSs1SHI1a2JPeXdKQUVHemRDTERCaEl0dzFDQloyQmJNQk9KL1VkdXBVWnM4YXlxMDl1NkEzcGJGaSs0ZGtHaXc4dGVDdmpCclpoK1daYWV6WlY4NkM1ZTk3MlYxckN1bWZlenZtakN6a21oSnFFc1l3TDlmTC9YdGlLcWF3WEF6eTQ0OC9ybjMrK1VXbjhxMkZKT1FHMFJLSmxxQVdFV0QxaUk0MjBxWk5HK0xqNDlINS9DL1NhNis5U21scEtSVVZSemgycklxYW1scnE2cXpZYlBXbnkvcWh2ZTY2SWZwMTY5YXRraVNwOTBudnp1T2l2TGFlaU1pby8xbUM3cytOM2NOaGc0cHFzRmhBZDVxWHJxNEVSUWRtNC85dW9yb2ROc29xcWtoSVRrRWZuS0d0T0ttb0tNZXROcEdjRUVweGZUSXFwckQ4ZWtWUmxKMlptZDJmMnI5L3Z3TXZpMGU5YjdNQmRoK0xoL04wV0R3TUJpK1FtVXd4eE1XWnNWZ1NTVWxKNFpKTExxRkhqeDdvOWQ3UHBicE5temJVMU5SUVYyZkRicStub2NGQlkyTUVXcTBUbDhzYklWV3JWY0x0OXJOK3lIZzhua0N5THVEWnNHR2owMnExdmhvVEUzTnlZRk5wU0lvMWhVYzZTSFFHU0QxRHJTczI0WC9mYjdYT1FHcHJIWmUxV0pKU1d6MUhxemVTbW1vTUQvcEZKc1hGeGUvdjM3L2Z6YWtqb1FwTnE3djd0TFhtdnJVSUg0T0hWMXN6R3IzYVdrSkNRZ0RVQUdTejJZekpaQ0k2Mm9CZUgwVmtwSTZJaUFpZnI2MTFmMXRRMUNLdytJTEoxT1k5UlZIV2g0Y3hMR0VKaTE5Y0x0ZUhsMXpTZVg4elFEdWxiNjAxdjVwR293M1FFdW4xVVVSSEczenBIZWFBYnkwQWJBa0ppY1RHeG1JMHhtQXdST0ZOLzRpZ3FTSkI3VXNCVVlrZ0N2R1FFaXU4aXk2NEtpc3JYdzBQWlZqQ0VoYS9mUG5sbDVzSVRjWU5BSnRQVzNPZlhGdlROS3NIYlNwME54cTl5YmdKQ1lsRVJVV0ZBbHRTVWx2TVpqTnQycGlJam80bU5QMGpJa2hyMHpTUGtyYlEydHEyVGRydWNybVdoSWN6TEdFSlMzMTkvZklycnNnOTFBelVHaytrcmZtWDFHdGVOdVduSkRwUmVrZFNVdHVXSHBISXlFZ3NGZ3R4Y1hIRXhNVGdUZi93SnUxR1JHaDlLU0FCY3pTNHpFbzBxeUYxUzVMazJydDM3MUxnOEs5dGtESXp1NFZwd2NNU2x0TVVJY1RoTld2V2JHMU5VMnVtcllYa3JiVVdDZlZYR1BpNTFwcW5kMFJHUnJZRU5vQ2twQ1RpNCtOcDA2WU5ScU9ScUtnbzlQcElJaUw4NEtZNWJWL2JaWmRsZjJlMzIxOElEMjFZd25MeFNtVmw1Y3F4WTI4LzNreFRPNkcyZGlMZm10Y0UxUklSNGMxWkN3NFl4TWZIazVTVTFHcjczblhJdFZvc0ZxOUo2ZzBrUktQWDZ3T0JCSzAySWxoekU0b1FPTjBlNGZZb1FoRk5yQjkrZE83YUkzdnBzL21GbTBNNEhOd08zdnBvQjlOWGJPTHgvTjBjYVJUaDBROUxXSDZGNG5hN1A4N0p5Zm44TkxTMWtLWDEvTlVGdmxRUFh5VlVSRkRBSUxnZTFJekYwdmFFVmxRZ0FhbDkrMlQ4Z1lTWUdDTUdnd0YvSFdtdzFxYlJ5RGpkb05ab1VLbFVJQVRDMXprL3VCMDZlTUM1WU1OL2x3UUQyN0wzMS9ONmlaTXhmYktJc3g1aXdxclB3aVUxWVFuTHIxQUtDd3ZmTHlzNzNMeTZvQkZvREFZMUg2QXB3VFdoVFZIUUptMHR0QjdVR0FnWXRHK2ZmTUkraEZRT0ppVzFKVDQrSHBPcERkSFJYcE0wTXRKcmtqWnBiVHJNYmFLRklUS0NDSzFHcUZTeThHSmJ3RmIyU0JLdWcwL2Q5N0hMNmZ5WDk4cU41Tzg5d2wzWDVwSFR3Y0xFRy9yZytxYUlyeHZDa3lBc1lmazFpZFZxZmJWWHI1d1NIM2dGZzFwd3dYdHp2aldmdHFacVJWdlRoVlFZbUV4K0U3VHRTZnNSQW15SmlZbFlMQmJNNWpoTXBoaWZTZW9GTjUydXlSejFSVW1GV3ExR0JOR0xOR2x0a2h0d2Jpc29lRVVJOFNWNGNDc0NsY3JYbkt4Q0pXd1VWN3ZDTXlFc1lmbVZpS0lvWHozLy9LTG1BWU9BYjAyU0pDZXQrOVo4SnFoR05HbHJUV1ZUM3B5MWFFeW1HTXhtYjhBZ01USHg5SUVOb0YyN2RpUWtKUGh5MjR3WURGR0JJbmsvQTRnL2tBQUtpcEJRYTlRQklrcEpDakJndXNkZE43VGkrUEhqTDRDZVBwMWlXYlc5a0tNMk94OTgvQ1UvQ0ltR1JuZDROb1FsTEw4UytmYmJiMWZQbURIRDFncW8rVFUyUDZnRnAzaTBXSEdxaWJuRFgrUWU1VnZoUFphRWhBVGF0VHQxT1dRTFlJdUppU0VwS1Ftek9kNlgyOVpra2dhRG15eEJuY01qZEhvOUdwV3ExYVJkSk1rVkYyZmU0SEs1WHJ6N3hpRjA1d2lUWHQvQXAwb2lBMkpWNkhWaFRxNndoT1hYSURhYjdZMnVYUy85SnNnRWJXeW1yYldhak5zVU1OQ0k1cUFXV3VUdUpaQk1Ta29pSmlibWxQMXBGVm5hdDI5UGRYVTFWcXVWK3ZwNlh5RjhJMDZuRTZmVGlhT2huaU8yUm93bUUycVBrOFpHQlVWUkVFSUlSVkVVRUI0aGtDU1FrU1RWSjU5ODh2SlZWMTNWYTlwTnY4a0djTmVWYy9XMmFQNFVIMTZwS2l4aCtSV1lvTHRmZmZXMXphMzQxWUpCellVMzE5VWpTWkxTUEJtM3lhOFdXalpsTUVTSEZMeTNiOS8rdFByVUtyQnBOQnFTazVPcHJhM0ZacXZEYnJmamNEaThsRWFPQnI0K1ZvY3FNZ3BKdUdod0s4SXRKRW10VWdraEZEd2U4TklhU1lvQU53TFgxVmNQTE52ejVhNUZYM3FpRmlkcEZkNzUrSE95Y252VE1ZeHJZUW5MTDE2KytlYWIxUTg4OElEMUpDWm9pMlJjMzZwVExkSTd2SDYxbGxIUXhNUUVrcE9UMFdoT0R6Uk95S2Rxc1ZpYUplNUcrMnBKSTRtUGk4T2tqd0NWQ2ttbFFwSzlxQ3ZMS2lGSkNDUkpTSkt2WWwvQ0pVbVNNL095N0UybEpTWFByaTg2VE0vZWZYbDZjT2Z3akFoTFdIN2hVbHRidXlRam85dUJrMmhyZm1Eeis5WjhBWU1BcUlVdzRucWpvUDVhME9pUVJOem1oZTVuckxINUpTVWxKWWpTeU82ak5Hb2tQVm54Y2JiWnFLKzMwOURRSUJvYkd5V1B4NE5hcmNiajhRaWZCQlpabGlUSm1WaFQrdEtNMy8rK215ekxnOEpUSWl4aCtXV0wyKzNlOHVpanN6OXVCbW9PbW5MV1RoUUZEVFpCaFplMUk1ZzhVdTh6UVUwK0U5UkNTa3JLR2ZYdHBBejRVVkZSSkNjbms1aVk0RXZjamNGZ0NDNlVid29tK0d1N1ZMNUFnbitwUG9JcUV1NjY2KzdqaHc0ZGVnRW9EMCtMc0lUbEZ5MC9mdnJwcCs4OSsreXpEYTJZb0k1bUptaWd3aUEwWUtBV3dacWF2OERkWUlnT0xLUG5OMEdiczNmOEpJME52SUdFMnRyYWdOWVc4TFU1dmRUaGJyY2J0OXVOeCtOQlVacUNDRUlJZk9BbUNTSGNnQ1JKa3B5YTJ2RnpxN1YyUVhSMDlOenczQWhMV0g2WmN2anc0V1Y5Ky9Zcjg0RlhNS0ExTjBIZFFSVUdvbWxSbHRCZ2diL0FQU3JLNEV2dGFFTjh2RGUxNDNRREJtY0ViQUFkT25Ud1JVaHRORFEwME5qb3dPbDA0bkk1ZzRETmpjZmpFUjZQUndvR09KL1dKdmxNVXBja1NTcWpNZWJmalkyT05LMVdlMWQ0aW9RbExMOHNzZGxzYnlRbnQ5OUZhR3BIY3hQVVJXalpWQXNUdElsakxiakFQWlNPcUVPSERtZlZ4OU5hakMwNk9wcjI3ZHNIMFJzRk0rNzZxeEw4eEpTYVU1bWtUcUR4d3cvemx5aUtVaENlSm1FSnl5OUgzRzczUjRzV0xTcWc5UWhvUUdNN21RbnFCeld0TnFKWmRZR0JtQmhUZ0k2b2ZmdjJSRWRIbjFVL1R6dER0bjM3OWxpdDNrVmVRclUydjBucXdlUHg0UEVvSnpKSkVVSklQdFhVT1d6WXNQTHZ2eTkrdmtPSDFBNlNSS2Z3bEFsTFdIN2VJb1FvM3JGang5by8vZW1odWxaTVVBY3RBd2FlRTV1Z1hrMU5wNHYwc1hiNE9kYThCZTdKeWNsblpZS2VrY2JtbDQ0ZE85S3VuVGNGSkZLdkIwMGsrcWlvSUdMS0NMUWFEWklzQzFubFgwaytoRzAzRUVpUUpNblpzV1BhenBxYTQ4L1Jjdm5NaTBhc3BYdFl2MjNQdWJuTzluMFhwTS9iMXErZ3pQcHpmNjZ3ZnR1RmFzMU93Zm90T0g4aGM2VzVmTFpwTlFlclQva0t1b3UvL3UveWZ2MzZselhUMWxvelFmMkp1TDdxQXE4SnF0SDR0YlZRdjVxL1pLcE5tMWppNCtOcDF5NkpqaDA3L3FSN09pTmcwK3YxZEdodjVxMVBDbm45NnpJK0tTbG4wM2VWTktpOU5ySWtQSlJVMTNITTdzUnFkd2k3UzBGV3FZVXNTMEtTVUJUaFhZdFVDT0VXQXBja1NZMnhzWEh2TlRRMFBQVkxBYUluSm85a1c5bTVJMXlxTE16bm1aVmJmdkoxeWo5YnhTTUwxMTZRZTFydzBPL1o4VE9QYTFjV3dqTXJXM2xPTytEZWVlZTJyZDByNS9Ga3dVRzB2NUM1MGx4ZW5uTS8yNHB0SnozbTJMSHFGOU43OU4wVHBLazVnamRKa2hxRFFhM0pCSldFU3FVV1hsRFRpaFBWZ1hyejFjeTBiWnRFaHc0ZFFsYWNPdS9BQnRDMlhYc20vbTRNODM4L2dnZHVHRVMvOWtiMjF6aUppb3JDRUIzRHBSM2FrWjZVUUx1RU5raEN3WVdNTEt1RUlvUUFTY2l5djFCZStCa0FHbk56YzVlNFhLN1hmZ0grQlFxM2ZVaFpqVGRvRWlyZUNhdzRiQlFYbCtJTW1zLzJtaXFLaTB1d3UwTW51YUlvcEE2WnpNYjVrMXU5bHNOV1JVbFoxWm4xMFc2bHBMU2lCZGVkdzFaRFNYRXhOb2Y3RE83SnUzNW9jVWtwZG1mTEY3U21zb3lLNnBZdmhLMnF2TlYrSzA0N0pjWEZWRm50NTNXY0ZBVlNoOERHK1MxL3Q1WEQxbDNnZG52L0R0bnZnSklTc0xlaWVpbDQ3WXFTNHViNzdUejV4QnRNbWpUMmx6VlhGQ2RsSlNYWVdoblg1dU5rdDl2LzNhTkhqK0I4dFJZbUtDMVRPM3hyR0toRU1NZGE4MkNCbnppeUtWK3RQVzNidHYzSmMrQXNxdEFqdUs1dlQ3NzZTc1p1YnlERmtzQ250ZFVZREJHNFhHNGtXY2FHZ3NmalFhMVJDNkZTUzJvWkhJMU9aRmtTRWlLUUFpSzhLU0JTWWVIWGNrRkJ3WXVEQmcxS1VLbFUxLzBjUWExdzNUTk1lK1pkQ2cvYTJYM1hkU3d4cUJrMjlaOU1IWllGd0t2VGIyUjFUVWNxUDlzTWVoM3F6SnZadG1RR1Q5dzdpR1c3UGFRbDZOaXpyNXpacjc3TjJMN3BnSU5aNDRhVFgvZ050cXo3MkxOc1JxQ3RSVk4vdzRvRGNhamR4Nms2V0VqSzZNZFpPMi84S2Z0WVhiaUdBWU0rUUVjMUZmbzhDdFkvVDRJV1ZzNFp5NnpWMzlNNTFjekJ3aUxHUC9FR0Q0M0tPZVU5clZ2d0lGT2Uya1JHVm1mS0R4UXpkKzBYREVuMzZpWExabzluc2ZVSSszYnVZdXJMLzJINnNFeHdWek5yL00yc0xGSkkwZHVwTnZSbTNlcC9ZZEZCeGU0MURCNzFKMUl5czdCVkhpUjcvTk04TlhIZ2VSbXJXZU1ndnhCc1diQm5XZFB2RDQyQmJVVlFVZ0ZEaGdDeHNISWx4QUk3VnNMNEdaQ2VDUWVLWU81eUdKWGpQUzkvQWN6WkJycURZTlZDalFtS2ZBdE5Pb3JXVTJEUFlVbWE3aGN6VjVTYWc0d2MvQnNxREYyUjdRMDRLcDNrK3ZZMUg2ZWV0LzhqUDgzMXpZZUhEeDl1TFZldE5STlVDYTRGOWE4SnF0Rm9SZE1xVTVHQk90Q1lHQk94c1hFa0ppYVNuTnllVHAzT2tidGRDT1dzdHVQSHEvbDQ4d2YwdjJVODE5My9aKzY3N3o1R2ovNHQxMTU3TFZkY2NRV2RMMGxETnNRUmIybExiR3diU1ZLcEpKVldLMHV5ckpKa1dRTlNCSklVSlVtU1NaS2tSS0REdm4xN2h5dUs1MU52d2NMNTJZNGNxUkNIRGgwNjYvTnY2eEVsM3RydmJQSDdLMys4WHNUM0dpVitySGNMSVJUUjBHZ1hRaWlpdHJZbWNNejNHNTRRSGE2ZEduTGUvcmRtaVc2M3pRMzU3ZmtIcnhHWDN6WlhlSVFpWEljTFJMdTRLOFFQbnBQM2EvOWJzNFNtWFQ5eHFFRVJRampFSDMvVFVmenA5YzlhOUtGdS95b1IzK1ZtVVgrS2U2cjlhcFdJYTNlRjJIL000ZjJ0c1VZY3IvUGUyeTNkVk9LUEwyNFhRaWhpNzc5bmlrNDN6QkJDS0dMemM1TkVqNXNmRVkxQ0VVSzR4ZE4zWHluKzhPSTIzL081VHR6eGo3V0I2emMyT2s3K3JCdjNpVDV0RTBWaVl1aDI5ZjN6VDJ1YzlyK2xpRzYzdGZ6OTIzY1UwZTJXME44OFJ4WFJLVkVSbnh6Mi92M2p4NHBvMzA4Ukx0LytENTlUUkdRN1Jldzk2djI3b2FIcDNDOWVteUc2Lys2eFg5UmNlZmZ4c2FMZmZkN24ySGhraCtnVXFSS3ZmRjdkWXB6Y2J0Zk85OTViK3dEd1cyQTRNQmpvQzJRRFhZRU9raVFsK3Q3aEtGbVdJMVFxbFVhdFZxc2lJaUprZzhFZ3hjYkdTbTNidGlVdHJTT1ptZDI0NG9vcnVQYmFheGs5K3JmY2Q5OTkvTzF2ZitPVlYxN200NCszY3Z4NDlWbmpVZlB0ckhtRFRNWW90dXd0SnJKYkg0YkZleWd2Sy9ORlNOMDBOdFJ6eU9yQ2toaUh4dDJJUTNpRUpNbVNKS3VFMS95V0ZDRjVrTHhxcXdUSWtpUkpHUm5kdmk0ck83UXdLU2twVnBLazlGOWFJR0R3eUZ1eDZMM1d2VTdyL1lKWEZHNWk4ak92Y0tDc0dzVlJSYVdjZDFyWDZwMlhpd3pJU2NtWW5kVlluWUR1NU9lazVWNU5zZzVBUy8rQmVTemN1UnZHNW1BcjNjbU1lZjlpOThFS0ZMZU5tbW9qVnVCa1hveGRPd3BJSFhRelhXTjluaU90RVpPMlNkSHZuZWRWWjVKU1VyQlZmUTdBMXEyYjBkcHptRFhqWVFCS1MreFU2QXFCUExMNzltUEc1RDl4YjhWbjVQWHR6NmhoZ3pqcG1sL2FybXd2Ly9HQ2pGdkpkaWhYdzVyNXNOWnJwV0hkNHkyUDhSZnk5QndLR1didi8zVkI0MUJaZlJTak1ma1hOVmQyN2Z5Yy9pT25leDl6UWc1OU00eUJmVTNqOU9sM1NXMlQzbnAwK3YxSG1nVUtnaU9nSi9DcnlhSnBCWGQvc0tBcEFtb3dHSHhyZ3JZaEljRmJCNXFhbW9ySlpEcG5ZM3FXd09aaHhYc2IyQk9md3hQWEdQaitteUtjUGxvamg3Mk9UNDdXMFM0NW1XakZRWDI5MXo4Z3ExUklzcG9JTGNMamNlTlVFRWlTZ2k5eDF3OXd5Y250UDY2cU92cGNYRnpjVENEK2x3UnNPcU9obWJPcGtGR2ovc3BqNno5Z1dIWUs5bDFMc1V6NDhQUUdSZzRhR3ZuTUhkQ0szNE9xVkRGaCtHME1XL1FoOHdkbm9xN2NnaVh6cno4NURDMEg5OC9uckZLQXJOeHJHVEhZOTAwYWNTUEdoRlFBc2tiTVlGL09jUEkzRmJCMDNuMHMzZkpIOHArNTk4UU5PQTh5SXUrM2xEVHJhTmRoRDdEaXNRbm5mT3lNeVRCeVJOUGZJOGRBUXZCK1krdm5tWTNSMk96V1g5WmNrZVhXM0hUQjQxUzE3UFYvdi9IZzlQdS9KN1N3M2RHS1h5MUE5UjIwMkxId3J3bmFNZ0pxOEFVTHZQeHFiZHQ2azNDVGs1UFA2WGllQmJBSjN2L3dRLzVkWjJicDczcGhrQVdlaGdZY0RnY09XdzNyZGh3ak9TMmRSQnhZcmJWNHpGTmlBQUFnQUVsRVFWU0JVcXVveUFoUjV4U1NUcTFHOGJnQlNaRWxDUUY0Q3hTOC9qWWhoR1EyeDYrdnFUbHVpSW1KK2V1cDlaUUxLd2FqbnFyS2F1aWFjT3FEcThzb1ZhZlF0MmNLTXJCK3pidTQwWiszdmhYdjJFeVpZemJKT2lmYkNyYVRNL1lQNEs2a3ROcEkvN3hNMU1DTzlldXBWRTU5VDltNUF5bVo4dytLcXFkNHRUYTNsUnFIQVpQaHhQR21BZjJ2NXFGdHhXVFBHdXZWeGhRN1ZUWGV4cXhXSzdISkdZeWVrRUZ1a3B1OEo0dE9malBhVkJhdmZZL212bTJ0NGFkOTFmVkdzRlo2dmR6K3laK2FCNFpTa0ZPaHQ0OUFvcXJxOUNaZTE1NDVsRCt6QVNlMDBFQi9ybk9sZDA0djVtM2JDcmRtNGF6Y3liWWlLd044KzZ4V3E2TkJpbm5sd1VmKzN6NmEwam9jUUVNSXFMVk03ZkJyYThIOGFxSzF5Z0wvS2xOdDIxcElTZWxBNTg3bm51bm56SUd0NFFpUEYzeUhWUmZCd0xuN0FWQkZXM2lxZHdxRmhWOXlTTkdpUG5LTWIreDF1QnZzdE5GSFl0YnBpRFhGVUgva21LaHY5RWpDSTRSS3JaWmsvTVNVSWZXa2toQkNOcG5hdkdXejFVVkZSVVU5OG5NQ3RnbVQvc0Q0Q1ZleDJHUmd6Q012OHRESW5pYytPR1VBVS9JZXBXL3VOYVFaRk13cDhZRUhYckZqQmFPbS93dDdWUWtsVlRKOSs3NVA1ckFIV1RSajFGbjN6V0wyTUhiUTFhaXBwdEk0bElMUjJhQlZtRDZoTThOeis5QXpXWStjMUI2TGZPcDdNbWFONE5VWkh6RTBwd2NaV1oycExDM2xzWldmTWpqOXhBYmtnSWx6R1ByWmI4bnNlU1VaS1NZT0hpaG04b0wzdVhlUWdiVlBqT2V4OVVmSlNJMWxYMkVSanl4OCs1UlRNeUhwekwvaUZUdGcxSFN3VjBGSkZmVHRDNW5EWUpIUDM1NlVDNE9BckN3d0pNSEdqUkJyaHVYellWeWVOM2hnTFFkdER1UXZPbzBQWGMraDVMa2ZaV3VaazBISjJsL0VYQmx5N3l4ZUhuUTl1UU0vUU8xMFliUTBxYVBMSHYzZGkvYy9zMkZYTTFCekJJR2J0eGEwbFdDQmY2RmpYd1JVdEJZQmpZa3hCZFl0YU44K2hmVDBUa2lTZE03ZlUwbUljNU5uYytUSUVmYnUzY3QzMzMzSG9VTmxIRGxTd2JGanh6aCt2SWE2dWpycTY3MUY5UFgxRFRoZFRzbnRMYUNYUEI2UEpJU1FmWnNhMEFCYUlZUU9pTFRiNisrSmpJejh3N202NGNyS1NweE9GOG5KN1M0WUdGYVZsZURXbTdIRUdzNTdXMjY3bGZJYUI4bEpDU0c1UERXVlpkZ3drSnh3WmhxUDIyR2p2TElhc3lVWnZmYjBzb1BzTlpWVVdkMVlrcExRQm4wNkhiWXF5cXRzV0pKU1R2dGFGMUlVTjVTVmdkRU1wak1ZcW0xTHBqSy9OSStWYzBiL2d1YUttL0xTY2t4QjQzcjgrUEVYWW1QanRqUXpQUnNBdSs5ZnI5WW1TVTdKbTJRZkFEWmZaWUUvVDAwMEFacUI2R2h2L1dkY1hCeUppUmJhdDArbVU2ZE9kT3ZXN1pTTHNweXRxR2JQZnZUY21HZ0dBNUlrMGRqb0xZNTN1ZnlGOFFxSzR2R1hXUGxEc1Q1UUZVMi9CZHU2WHMwTmdLKysrbXJQeUpFalVhdlZ2YzlGUCt2cjYvRjRGSXduY3BxY0I5RWJUUmdpdFJla0xWa1RRVXgwRk0yL2dib29JOGFvTTdmcVpiV1dtSmdZTktyVC82cHFkRkhFeEVTamFvWmRhcTJlTmliVEdWM3JRb29rUTR3SmRHYzRWQ2xadldrOFhFYlhIbDFSL1dMbWlreDAwTGpXMXRhK1BHalF0WnQvL1BGSFZ5dkE1azNDOWZuVkpFbHlOVE0vQTZEbU56LzlDeHo3QXdWdDJyVHhyVm5RTm1CK25tdS8yamtJSHJRdXFhbXBPQndPbkU0dnJaSGI3UXBRR25rOGlnL2t2R0RXQkdwQ2VKTWxGY1ZYVjRvUXd1VjN1cTFiOTc3MCtPUHpsanp5eU1QcWlJaUllN2hvcFlibEM1ZFIzWXFDYmNuc3k2Z0JQUW5MLzBqVXNZd2ROK0lYTzFmcTZ1cGVlK0NCQnpaLzhjVVh6ZlBVbWtETkd3SDFhMm9lZk13ZC9naG84d1JjYndUVW42c1d1c0pVV2xwSFVsTlR6KytRbk9zTGR1blN4Y2ZaNWd5a2YvZ0w1UDJhbTI4VFFnaWYxa1pBbFZNVTRXY0NrZncrdHpsejV0VEV4NXVYM0gzMzNYSkVSTVRkRitmYlkrTFdTWlBESUJLV2N6cFg2dXJxWHYvclgyY1Z2UDc2c29ZZ1RhMGhlUE9ER2tHVkJiSXN0UllCRGZqVnZJU1JocUFhMElSQVdrZVhMbDNPLzdmbW5Ldnpra1NYTGwxb2JHejA4Ylc1L0Z4dEFjMnRLWkZPQklHYlFBaWgrSWhBUWt4VVNaSjQ0SUVweDdSYTdaSTc3cmlEaXhmY3doS1djeWQxZFhXdlAvYllZL25QUHZ0c1BhR0Jnb0EvelFkcUlmbHFYaE5VYmhFQjlTL0UwcHd3MHB1cjFwYlUxQTUwNmRMbHZBUUx6anV3QVVSR1J0SzVjK2NnV2lPdjF0YmthL09hcEQ2ejFBOXV3cWVsK1NPbHdlQW1TUkxTUGZmY2U3U3hzWEh4M1hmZnJlaDB1bnZDVXpNc1lUbHJVSHZ0cjMrZFZYQVNVR3VRcE5CVnBvS1h6Z3VPZ0RacGFrMEp1REV4eG9CZnpaK3Ixcmx6WnlJakl5L0kvWjJ6NEVGcjRLYlQ2UUxnNXZINHdTM0ExZWJYMnZ5YkQ4YkZpWFJCQWJCaHcwYVhKRWw3K3ZUSmRXczBtak1PS1B3dmdnZGhDY3ZQU1dwcmExK2VQSGx5d2VMRkw5cFBwS25SU21WQkU2akp3ci9BY1dnRU5LckZlZ1YrbjlxbGwxNksyV3krWVBkNEZqRjNENThXN21YTzZueit1TEtBVjc3OEljQkQxVmhmdy9LUFBtWEd2emZ4bDNlM1U2eEVjY2tsbDlDaFF3b0o1amdhRkluRDlZM1VDSzF2ZFhsOThPcnlRcVBSb0ZLcGhUK0QyUjkxb1luRHJSRndQUGJZWTdVMzN6enFCYnZkL3ZTRm5oUUg5K3lrMm5HdXJ1WmszNjdkMkU0NzQ2YWNrVG0vNGNCWkVIOVpLNG9wT2dQMmgyMnZQc0s5VDY3NTJiK2tJM09ncUpYbnNXOFhaL0JjVDBmY3pMdHJORnRLN0QvcHVaNUtLa3VMS0trOFM3STc5d0dHWk45TTJVa09PWDc4K0F2WFhETW9QOGluMWtKVG95VU5VWEJodTQrR0tOU25GaG1wOXlYZ2Vxc0s0dVBOV0N4dDZkQWhoVXN1dWVTOHBYV2NPMkJUNmxpenE1d3VxUjI0SWFNZG03ZmtNMnRyQ1FBL0ZKZndkYjNNMWQwN2t4MHJlT0NGVlJ3MnRDVTlQWjFvblliOURSTDFIc0VSUllQUmFNUmdhRVpTNlFNM3Rkb1BibDV5eW1ZRWxZMkFZOE9HRGZWUlVZYVhiRGJiNDc2QnVTQXllK3pWRkpTY0sxN01TaVlPdllraSsra0RZV2xKTWM2emVHRS9XL1U0MHhlc08rM2piVFZIcWFpeS9leUJiZnhVU0dobEZrOGN5aGs4MTlNWXFSMUxXVkdSUnY5VS9VOTZycWVTdGZQL3dMelZoV2Y5b1N3cExqMVJ1WnpqNk5Hano4WEd4bTBKaW42ZURxaDVKRW55K0lNRkxjM1BVTEpJZjFXQm40SW9QVDM5SnpIaFhqZ2ZtMnppOGZIWEJ2NXNZei9LZmJ0L2dQNnBkTzdlazhlNysvZWtzbXZ2ZnJaK1g4MUQyWjF3dVFZU2s5Q085emV1cDZEY2dja2srY3pTUU5vSFByOWF3TmZtZHVNckpjVVQ3SFB6cFlRQUVCMXRYSGI4ZUxYZFpESk40VHpXbHBidVhNZmlOWjlTV09IRS9zeWo3RGJMNUk2NG0yRTUzakxwZlZ0WHMyVDUrMWpsTm95NWR5cURzcnc1T29xOWdrWFB6R2RIMFdGaWt6c3k3dDVwWktjWTJaMi9qRlZidnFERVZzT2lPWC9Gb3BVWk91NFA1SFUrZFFMdDd2eWx6RisxbVlTTXE1ZytiVHdtTmJpdFpTeGU5REs3aTc1SDBjY3hlc0lVQm1lbmdMT2NwK1krejg0ZHV6aGdyV1Rtek8vUUpmZGk1cjBqQWk5RC9zckZyTnI0QlJqYU1tckNKQWIxOVBYZFdjMlN1WSt3N2VBeGhrMzRJNlA2K2twZjNGWldMSnpQcHAzZmt0RDVjcVpPbXhRbzZONjNiVFdMbHI2UERTMFpBMjVpMnEyRE9SK3B1UHUyd3ZKTjNobmNPK1Rad0tvdFVHS0RSWFBBb29XaDR5RFAxL1h0NjJEWkduQWJZT0kweVBGWHVUdmdtUVV3WkRBc1hnQjJBMHlmQmVtKzRYaDE4UXNNSC90QzA3MmM0cm5hcXc2d1lQNGk5cFRVa2pub3Qwd2ROeVJRY3JWajNXSmVYZjFmbkZvamVjTnY0NjZodlZHcTlqSG4vN2QzN3VGUmxIZjcvOHpzSVp2TlpyTXNJUWtoaVRGZ2lDSEVpQmdSSXlJaUlsSkVSS1NJaUpRaVdxcldvclZLS1M4dlB6elVJcVVVclZJOElaNFFFUkVwSXFVVUVSQVJNVWFNTWNRUVlnZ2hoR1d6MmV6T3p2UDdZL1l3dXptQWVLSytQdGMxMTU1blptZWV1ZWYrbnU3dndoZll0YldDdXJLL002dm1uNlFWWHNhTWNZTlB3TkpjTEYvNENCdEx2MkxJMkl1amtheWhnb1VMRjFOV2Zhd2hQam45cVNjZWZXQTMwYldmTFRIbVo3dWdwbXR3SEFWcWtVQkJBb21KMGFDbVZSWDArdlpraUw1ellJc1puOVkza0p0K1Z0c1AvTWVwT0tJeUtUVUpnTHk4UEJSRm9WdEtOK0piV2toT1J1ZHJDeTFoOEFxREcwQWcwQ200aVM1ZG5Lc09IYXByN3RhdDIyM2ZsU3FJUFNPUDRjTnRiSC94RVlwS0xtTkl0cG0wRE0xUFY3NWhFU1B1ZkkwRmkvNlhaRjhsTThaY3hkSnQ3MU9jWW1icGZUZXl6bmNGODJhT283NXlEdzBOYnNpeWs5NnJIOE10RnRZc2VaSGlJVmVRYjRPczVKTklvRldxV1BaeU9RL2Uva3RXekwrRHlYTXNySjQzSGw5OUpZMldiQ2JmTmdwZi9XNXVHMzBaUzNkK3lzQVVPNE9HWG9IczJrMWxiUitHRDc4QzJSYXBYWHh4OWczTTIyWm53Wnhic1hwcUtOMVhIZ2EyTFM4L3g4Z2xEekVoZXhzVHh0NU1jZlc3WkprVkhweHlCWnZOVnpEN3pqc29YZmtvSXlZM3N1dmwyVkMzbFJIai80Y0Z6LzZkYkx1UGJYczB3Y3ZPZ0czYnFzZlpzUGRRek0yeks3ZmRONE9VVG1ablNqWU1Id3BUUjhQWWV5RXQrTjMwWGpEY0FtdVdRUEVRZ3NjMWFGNHZnNmxQd01KSGdGb1lQd3cyN1lFc1N4RFk1c0c2N1RCMU10QUlqUzdBQWREQSt2V1YzRGV2VUhmbGRISmNQZFdNSFh3RitWTWY0dlpSYVN5Yit4dG1laXdzbWo2WXh0MHJHRDN6RlpZdmV3aUgyc0R1YXMyTWxhMHBEQjErQmQ3eURjaFpGekI4ZUJIVzVCTTNDVjQ1N3hjczNKdkJvdnQreWJwRjkxS2hvMnR6cHY2TStuTm5mWEg5OWJiblI0NjhKbFQ3R1p1bkZscGFPd0sxVUZWQlorYW5CbXBkU1V0TEpUTXprMTY5ZXBLWGwvZURNZmx2Qkd6Vit6L2hzVThDUERuajdGaDdsV2ZXYkNUdTdBRmMyU011L0c2ZlBuMUlUMDhub2JtWjFGUTZDaUlFdnkwRWhLT2xIWUliYUlDWW1wcTJmdi8rL2E2c3JNeGJaRmsrLzlzK1VJNjBYcFNrOVNMTlppUy8veUJLOGlLSGJ1bkN2ekJ4MXF1TUtNa0Qrak4xNkZPc1dMdUw0aWtEYVd4b3dKcVZRazV1QVVXRlJib0xNNStVYkR0MnM0VitKU1gwUDlrS0d0bkt6TGx6S000MlVqajN0NlNNZWc3WHZQSFlldzFpNXFROGR1N1pqVnROSVQvZHpjN2R0UXdja1VYL2toS2E5cVNUYk02bHBLUkVCNUxWTEZ5OGxRVjd2bVJZbGhrb1J2Y3BCU052Wk5xb0lVQXhBMmY5bWIyMWtHWFp5c0oxQ3Bzcjd5WGJEUDN1K3dOUDlQb1pwWjdaNUxzYmFGS3NwR1JrMFM4M25YNzlUL3gzTEE0bmFXbHRiaU1ZVDBEemtyT2dKQXRzeHJhQWw1SU5kalAwS3lIcXVDNTZCTzU2QWdZSDkydjAwN0I2Szl3K05QZ0ZEOXk3Q0lha3gyeXNxWkpLVndiWitpSmIyZGJoY1MxYit5eGxHZGV3Y3Zvb1pHRHV2YmVTZjgrTExKbytHRzlESTZyRlJscEdOZ1ZaL1FnZkltc3lKU1VsN0Z2dHBLbFhVZlI1NnRoaHdQSVZHNW01NmlBREM2d1V6NzJISmF2L0VQR25IV3I4b0xYVi9jcklrVGZ1cDIzdHA2NUVpbGFKamtITllEQUlrOG1JMld6U2dWcHNVWHVvWENvelhDNzFRNDVUQnJZalgxVnh5eXNmTWZlbTBlUW02R2VoWU1PbWpieDZQSm5sTnhaRzNhMGxTU0k3TzV2RTR5NHlNOUNab21xVU9ScGFqOGJnb0RQbUJoSWFlUlBpekRQUDNQYmhoN3ViK3ZidE85VmdNQXovdmc1aWRYVXRaWXQveDY1blEvL1d3dENoMnZQcGMvL09mYlArbDM2NTkyUEpLR0xSc3FjWWt2Y05va055Q3VsQmVtSkp5OERhVkU4ajBMVDFhWVpPZnBUaFk2NG14VzZtd2EzZzlaMGd5dUN1cFVaTkl5ZXIvUktlWkljelBFM01aZ1ZGQVc5ZERZM2VHdTRjZDAza2UwWG5vSHJCMkdza3o4N2F6YXhKVjFCZTQyWDQxUHQ1Zk03a1RuWFhiSTRVMHRKaXZpSGJ2NU04cE9wYVdEb0xWdW1JY1QvOWhoeVFtOTZ1WXhsRi9qcmIrUkpYNlhiR2pQNDAvRjV4M2tXb1FQclF5VHc0cG9LcEl5K2syaVV6K2Q1SG1ULzlWS2RxRTNYMUZqS1NOYitmTVMwTlozQS8vWDcveG9zbjNyN214aG0zSHRLWm4zcFFDeGUxUzdSUjZvZ0JOUk1tVTNzTldFS3kzbTFCN2Z2SVZmdldnZTM0a1lQOFl2bFdab3kvbWt2U29wMnA3NzczSC83eXVjelROMStNdlozQ09ZUFJnQ09ySnozUEZLaHFJSWF0aFlBczVHOExtNlFkZ1ZzSURVWElORDMzM0g2ZnJGcjE2cCt1dXVxcXcyYXorY1p2UGRvaXk2Z3hZdmxaV1JrVVRmOGI5NDVxYXdVN2NvcFpzdUlOUUdINXJKOHphOEZ5dGoxeFp5UjJJNnR0dFBjN0Q5N1VVMU9yVUpSanhGdFhnOGVaUVRMd3hMTEhHRFByS1I2YzNBL3dVYm5tejdFNzNtYS9zYVdUSWRkUldlMmpWOWJKMVNlYTB6Sncybko1ZXUxYllmTlBQNTFHelpqTHFCbHpjZFh0Wm5EaDVXeWVPcGxoblpRRVZ1N1p3dHB0QjJKV2swcnhpQ0hZdjRselRtN2IweUFySGNZc2h2RUZYek9VNXNnbXgxSkhUUVAwU3VHRXh6VXIvUXhTQnFTeWZ1VzhkclpoWThyc2hVeVp2WkQ2MGxVVURmdzlVNllPcDVkUlA3OU9OampsSUQzRlMwMkRCOUtzS0hWMU5LclE0dkc4OU5qU2Y3eDl4eDEvY0hVQ2FsNmRXYXFQZnJZQnRVaGhlN3hPcWNPdTYxV1FHaXhzejZGUG56NllUS1lmUEtqMDlZSE5mNXdaLzNnVFMwWnZHZy91NTdtRFlJaDNNS0VvaS8zbGU3ajFyYys1NGRMK3JQOUFpK3ljZGNhWkRFaFBSUFUwc2VLamFqNnBidUtJVDJWdk55ZjJ0RFBJVUtOOWJEcFFDejBYSWF2VDc5ZHkyYlJFWHdJUmJBc3pRaUdFRUdQR1hIc3dMeTl2d2Z2djc2eTMyV3gzOEMwbUl1Zm45Mkw1b2dWWVJoYlFxM0FnK1ZsT3B0NzVLNGJmOVV0eXpQOURybE5tNTZiMTVJeTZoNkg1ZGxZKy9pQmtEeVEzemN5dWZWWDA2bitUM25BaVAwZmg4UVZQVU44L2cvd0JROGc1a1o5TjliSmd6aXhTYmgvRml2bC9adGpFMzJFRHNyS3plWEh0OCt3cWtpbGI5d1RyeWhYMEtsZTV1WDNZdmVRbFhoeVFqQ010aCtFREM4Q1l4WjB6U3JocnlxMHNtUE1yck40YTlqWGFtRHF1NDE0RWNsb0pkdzcxTVhuNkhHWk5Id1dOTmF6ZFhzWGMyYmZqSzkvTW92WFZEQ2twd2xPOWxRWnpEdG5PenYvTzhDbXpHWDRLdXBHN3QwS2pGMXcrMkw0Skdxd3djSEJFRlRnL0J4NWZBUFg5SVg4QTVDVEQ3VE5oNmpTd3pkZUNDbHZXdytEYm9kOEpDWFFhdzRhbXNHMTdPWU5IUld1SHRYZGM4MGRPSW1mdXBkeTFJSThKUS9LcEw5OURxVHVOZTZhTW9HcnJhbGFWK3hqY0w1ZmEzYnVRczdKSjFzM092RjVuOCtDS2Y3QXF3MDF5Umg2RCtuWG1Ncll4Y2VKdzVzKytuNno3ZnM2YVJZOG94eFhseVV0emUvL25VTnNlQlhwQTgwcVMxQ3FFYUNmNVZoOG9NSWFZbW9pUEQ1bWZOaDFUMDBBdDFLdWdUNTgrV0N5bmgzemkxMC9RVmYwYzlSbElUVERoOVN0NC9RcXRzcG5pRENmSG0xdXcybXlZUkNEOFdWSVhKemxKRmtTcm15MzdEMk5MNnNMWlRpdCtJWkdYbTR2VEtGQVVCVldObEZ1cHFnaWJvanF5Um9pOUNkSGgzZ2xKa2dRZ0dob2ExQWNlZUtEc3R0dHVyYkphclQwbFNYTENOMC9RTFI1eUZVcmRQajZ0cUNLK1J4OXkwNVBvMm5NQVZ4WTVXZlBxcTJ4K3Z3eHJabCtHWG53ZWlYRXlub1pLTnF6L0p4czM3eVNyWkRKemZqMmFPRGxDRVM0WmNTVU41WHY0Zkg4MXFiMzZrOW4xQkJORFRtWFVzRE40L3BtVk9NLzlPUS9kTTU0NEdmSXZ1QlJSdFlOWDMvZ1hDZjNHTVgxMEVUMzdGSk9WckdWNkorV2N4NEFzaWQwZmZVcWR4OHpGNTJtTzNZSkxSNU5ycWVPMVYxL240Mm9YRncrOWd1eFU3ZGc0TTNwVGtKTWEzdGMreFJlVEhDOVRNbW9jbHJvUFdiVnFIWjhlT0VhL1M0WnlUcThlR0NTRkQ3ZjlpdzNyLzBuWlZ4Si9XUEFvNS9WSS9FNG03dHN2dzBjVjBQZENjQitFNmhvNGQxQUUyQzRaQVEzbDhQbCtTTzBGbVYwaDYxd1kwQjFXdlFvN1BvSzBQakQ0ZkxBWUlyZjVBUU1ocnAzdFpYZnhNK2ZwWFV3YmUwblUrKzBlVjFNUzE0Njdpcy9mWGMvYXR6WlIzeHJIa0tIRE9DUFZqb3lYN1p2ZjVxMzE3L0JsU3pjZS9zc0RuSmtVT2VlWjU1WndWdHd4UGl3cngyMTBjbjUrZHFmSDRleUxobUUvOUFFdnJYdTNNbWZ3MVkrdFgvblkrODNIajNlazBLRlA1L0FGQVMwcStUWTIraGxxdmhJZnI1bWZpWW4yb0FTUkpoU3BCUXA2VVZCUWdNMW00M1FaMzVvZTI2bU9ZOGVPVVZwYVNrWEZGeHc0Y0lDNnVqcU9IR21JMFhGckNSYld0K0x6K1NSL1VNdE5WVlZKVmRXUW5wc0JNS0RwdVptRUVIRm9jOVJTVnZaSlVXNXU3aFNEd1hEcEQ2SEg5dFA0TVF3UGQ0NitrbEVMMzJKSXR2VzAyak5GVWY2OWZmdjJOUjAwTSs2Z1Q0SHdDMEZBbHVXQVB2bTIvVHkxV0YyMVVFcUhGdjBzS0NnZ0tTbnB0RG9teGg5NkI1S1NrdWpUcDQvTzlOU2JsbEZFVFUvZkpOQjZKMmltYWRqSklVSit0NkJacWdKcWZuNmYzYzgvLzN6dG1ESFhWQUUzbjg2WFQvbXVUZXl0YW16bkV6dkR4ZzdqcDBLd0gycFlXYmo2MzkvN1ZuME5GYXpadktmZHozS0xoNUxqTkQ3LytPT1BiN3I3N251T0U1M09FV3QrNnR2aytTVkpEa2dTcXI1TXFyMktnbENlV3F6NXFSZUxQTjFBN2JRQU5nQ0h3MEdmUHZrNlVKTjBqMUlZNENSSkNpMUNraVJKODdrcFFVQlRVVlVoOVBsdElaOGJJRzY0NFlaYTRLK2ZmYmF2eW1wTm1BNTBQeDB2bjR5OEl1d1o3VVF6WlNPMm45RGwvOXd3MmpNWVZHS2pIYnZxSzdmSHRUd3hNVHNrNDYxUDU5Q2JvTzMxL2d3QUFhMnlSMWJiTDJqWGZHb2g4ek1VL2RTWVdnalU4ci9WemxJL09tQUQ2TktsU3pEM0pRSm1Hb2lGbUpzVWZoM0wzQUJKVlNVVlZDa0VhbnJtQnFoQjlpWjY5ODVidlduVHBxcnUzZE51TWhnTVEwNjNFMksxT2JIK2hHQS9qZEQ5ekd3aEpTYlJUMUdVelR0MjdIaWpwT1RpR2pydnpxNnZKR2l2OFVxb3FYR2Jpb0pJOG0xSGdZSjh1blRwY3RvZXQrOU0zZU5VUm54OFBIYTdQYXpmRmdva2hMSTZPZ2dhZEpZd0U3WnRRd0FIaUdlZWVlYXcxV3JkMGE5ZlA4K3BLSVQ4Tkg0YVA5UTRkdXpZMHZ2dXUvLzFXMjY1NVlqTzlEeFJ6V2RVTWJ0T2VpZ21uY09pNjlJZUt6Mms5Nm4xT2ExQkRVNkQ0RUVISjQ5UFBpbmppeSsrb0tibUFIVjFoemh5NUFoTlRVMjRYQzZhbTV2eGVEenRCQlQ4S0VvZ0ZGQ0lEU29ZMFlJS1pvSkJCU0R1d0lIcWkzdjA2REZaa3FSemY3cHNmaHFuNjFCVmRjOW5uMzIyS2orL1QzbVFwY1g2MC9RbWFKVHBpU2JqSFdKcUl0TFEyRVRIUGpXOStSbk4xRTVIbjlxM3h0aWFYQzRPdWYzWUxHWmtQV2NLS05RMkhzTWpETmpNMFJtNnJTMHRIR3hxSmk0dURwUGNNZEd5V0N3NEhJNXdUOUxvNmdUQ3ZyaVk1R2FwSS9JV1NnSFJtNmFoMTQ4Kyt1akJnb0tDblRrNU9YNmowZmk5ZzV1cnVwUjNQcTduckt5VWsvK1J0NTVWYTNiUTgrd3p2M0h6a05OcFZPM2R5dnAzdGxEWFlpR25SOWZ2ZndkTzhiaHVYZnNpY2xvQjlyanZacmZjYnZmelR6NjU5T1dSSTBjZXBQMTZUMzBxaDFmcXVPZW5ydTdUSEdacVF2Rmh0am13MnhKSVRJdzBYd2xKRDRWVU9nb0tDazZZSnJWM3l6b0NYWHVTYUpaQWJlVEZKNTloNi91N3FQZlpPQ3Z6KzlOaisvbytOdFhOci8reWt0MStNNmx4QVdyOThUdzY2U291VEltbjV2T1B1ZTdGSFRnZGRqeXU0M1R2MVplL1gxZE1vZ3hQclZyRmtyTGpaRHJpT0hEVXl5MWpSakMxVDhjWGMySmlJbjM3OWtXV1pXVFpFSHlNTEpLa2Y0d0VGQ1JKd3UvM2kyQ0ZnaEJDb0twcVZDQWhxUEdtQ2swNkpIRGRkZU5xZ0wvVjFCelltNTZlZnBNa1NkOXFaNVQxUzJkUmtUNmVHU1BhcHJ6WDc5M0l3ZzFHUnBRVW5Qd0tQVlhNZjNBcGc4Y013ZmxmQkZ4NzFpeGtWV01CY3ljUGJmTlozYlluR0RUbE9hWlAvaGx5aXVjNzI0ZmE3Uzh6ZDdQQzQvZE8rSmFPcThxS0JYOWtWTUY0TXI3bGtMV3FxaDk5L3ZubnEvTHl6djVNeDlKaU83TjN4TklVU1pJQ1FxaXFFQWpaYUZJTkJnT1JFcWxJbmxyZG9hOHdkYzBpTVRFeHFxQTlVaWFsVlJRa0pDUjBmbCtvM3N6a1dTK3daY3VJa0ljUW04M0czZzFQc2JiQ3dvaUJlYWN4c01rbWJoazdtb0pNTFJxeWF0MGJ6TjM0TVc5TktNYnFUT2ZWMzk1RXV0V0U2bk16YWNGenZGU2V4OVE4T3hkZWNCRTNqRTdGTEVQTnZnOFl0bklyMS9RWlEyZjM1WVNFQkFvTEM5Rk9pSXpCMEI3SVNVRmdrd21LVTZKRlRQM0JvRUs0SVROaHBOTVlteXBKVWlpb29BS0JqSXpNelU4OXRleVRjZVBHamJWYXJkUGF2WHMyMVZQdlVzbktTb3M2ZUNyZ2RUWFE0SmJKU285Y0ZxcWlVRjMyQWFXK0lTaUtnaXdia2VYd3hDVjcrQXpXanpTMnVWamNqZlg0ekU3c3NvYzZ0MHhHaWozOG1XTHZ4ODd0eTl0VUFDbEtkQ21PYkRSR3ZxUDZxS211d1pLY1RyTE5FcnM1a0ZYcXFxc3dPdEpKdG4vNzJlT3FxbEJYOVFtN2ErenRIQWVGbmR2ZW85L1lXN2huNW5oazQ4bE5TOFhyb3JxMmtiU01tRDZsS3FpS20rcmFKdEt6TThLMXFxcXE0cTZ0WU10dWIzQWZ0RGwwd3VQcWRkSGdoalNubVpyYUp0SXowc0xmVVJTVlJScy9iVk8wcnlwS1ZDUlQvMzhCbXVxcWNjdjJObjFlUTJvb0IvZVhQLzIzZjZ6WThzRC9tK3NtRWlEUWwwZnB6ZEQyVEU5VmtpUlZWVFhyUktnaXVwbXgyWXdzeThSWnJKaGtpRSt3NFhBNHRNVnV3MktPSXkwOWc5emNzNElWQldadER0VTJrcDZSUmtOTk5iYTBMS3k2VS9Yc3dnY1lNdmwvSXRGNzJjSElDUk94Tkw3TDNxb083dEZOOWRTNUZMS3kwcU91SjhYcnBxYTJIa2RLT283WStSbzhTbzIxMWZnc3pxZ2VyS3JQUTNWdHc2bEVSZU1veUl4dzdpeG5FdDVEZmdDY1hTTXdKWnNUeUxBYmFmRnBGMXRlajRpQ1pvclRqcXo0YVQyUnBrM1FMSTJBbXlFRzVDS3NMY0xncEJEQVNaSWtpZERGSGdRNGdTNWkyZzU3VTI2K2VVcmc1cHVuUEZsZS90a0hPVGs1RXd3R3d5V2hnL24wZlQ5bnp1cEs4dE5rS3R6cHJGNzNFdm5KWmxZL2NpT3pWaDdBYmpRZ2U2b3hGOTNDdW1Vek1WZHZZZmlVLzZWbTMyNmFiSGRUc2NwSjl1QWJXVHByRXVCbDlxUlJiTno3R2U3Q1d5bGRIbXhWN3Q1RGJ0YlBLQ2pKWS92ZVJnYjBTMlBmN3IzTVcvMHhZNG9jckh4NEJvK3YyY0cyS2lmVk5XOFRKdmMxV3hnKy92Nmc0cWFQMHAyN1diVDlLSlA2MmFndjI4Q1k4Yi9DbkpGUFUwVVpRMlkreGlQVE5OYWtsTDZJWS94elRNazl4dFlhZ2FkUlljV3VIZlQ3TnFQNDNuSW1qZm9WWmRXbFZMbTNNWHozQzFoeUwyZnRrbnZBVmNyNHNiK2h2THlVR25VWHc3Yy9ROUhvTzNoa3hzZ1Rzcjh4TS81R2ZtRU9lMHRyZWVURk54azNJSXVtN1V2Sm1mQVlSU2xXTEZhRmZlNTBObXg4aFY3Mkp1NFpmejFiOTFWUVZhY3lmUGg3NER5SGwxOStCQ2QwZUZ3bkQraE9WZklBcW5mdkpHL0FoYmdxUDZKbzJ0OVpmTnNReWpjczViYUhuMmZ2OXUwczJkUEMySEQxazR1N3h2Mk1YZlVhdEZYdjI4M1FXYSt3N000UnFLNUtwbzI5anQwZUp3NWZQUlQ4bkxYTDdnMVdUTlJ4Y1dyLy81d3hyT2pORjVhdnErcUFwZW5OVUY4UTBIeDZsaGE2YVV0YXVFM0VtUXlpVlZFSjlmMDBHK0dyMm9Pb0JoUHlWNGVRVkxBbUp0RzFxNU5Ebi95SDF5czlaR2VrOFB3enk3bmwwWmM1N3p3THkrKzlodm1ibXJHN1A4V1ljUjQyNVN2cWs2OWs5OHR6Z3BkSFBTKytYTWJzZTA4MkZ1ZmxpYWN4dkRnQUFDQUFTVVJCVkh0djRwRjFWZVNtbUtsMEpiTnEvU3ZrT1kxc2ZmbytKai84TmdXNTZWU1hsVEx3dHIrdytNN2dmR2phUlhiZXJZd2RuY3FHWFVkUVhJM01XL01SK2FXUE1QemhMUlE1QkUxTnRlZzZScDNDNGp2T3JRdi93WkpQRHJmNXJIWi9LUmZPZjRVRDN0amZCWGg2NVVvbXYvbngxOXFXcWdiNCtPTzl2UGJhYXl4YTlCZnV1Ky8zL1BLWHYrUzY2OFl5Yk5nd0xycG9JRVZGUmVUbDlTWTdPNXZ1M2J1VG5Kd3NKU1VsU1FrSlZpa3VMazQybVV3R2c4RmdsR1haSk10eW5DUkpWa21TRWlWSjZpSkpVZ3FRQWVRQVp3TkZ2WHIxR3REWWVPVC9DYUhXTkgrNlNuVHRmcUhZMzZ3SUlWVHh0MTlkS241Mi83TkNDRlc4OXFjYlJMY0xKb3ZqQVZVSWY0TzQrdXl1NHFrZERVSUlWUWloaWlkL2U0VzQ1YkV0NGRmNjVkTlhab3MrTjh5UHZIZDh0emlyeDZYaXNGREV6ZWNsaVgrODN5aGVlK0FHOGF2SE5rVytjM2lMNk5Iak1uRzRuZlVKb1lwM0h2dTFPUGZxZTdUOUVXNXg4L2s5eEVOdmxnb2hWQkU0VmlyT3l6eGJmSEJNKzY3LzR4WENZT2dpbm5xM1d2dTkzeU5hL08ydlZ3aFZ2UC84YkpHYW1ocXpkQmRQL3J1Mnc5K0VscmYvK2d0eDFlK1d0ZnZaRzMrNlNWejd4eFVuWEljUXFoQ0JPbkZwank3aStRL3FoUkNxK09TVjJhTGJoVk5GcTFERjBmZWVFSWI0czhTT3cxNGhoQ3IrL011THhFMFByUTMvOXZQWDVvcysxODl1ZjczdEhOZWJMa2dWcjN6cUU4Lzg3aXB4NDU5V2l5UHZMaFY5cnB1cis1MVBYTjhuUWJ6eWVmdjcrdFdISzBYdjNpWGk0K0QrUEhYM1ZlTEszeTRUQWFFS0lUemlqc3ZPRW45NXAxcW9hcUNtcnU2akJUTDhIQmdMakFhdUFpNEhCZ0VYQUVYQnVaa0RaRWlTbEJLY3U0bVNKRmxsV1k2VFpkbGtNQmlNSnBQSllKUWxHY2tnSmRrVEpBa2taMnAzc3JPelNYUEVZYktuY3RGRkE3bDg4UG1ZSkNpNWVoTDMzZmQ3SG5yb0lWNTc3VFUrL25ndnJyS1ZkT3Q5TGMxQzVibmZYYzJ2SDl2TWwyODhUT1pWZHlJQzVaeDc1aVVjQ2w2ZmdmM3I2Tkw5TWc2M2MrMisvZGRidU9xM3k2TGUrK0xOaDhtODhBYU8rclhYci8rLzYvblovU3NRUXVYNHNTWUNvZlVlM1U3UHJ1ZnlSZkI3NHVoT3pqQ1orTU1MdTRMcjh0TFNxdkRwSzNPSlAvTUtEcldxQ09INkJubHNxcCsvdmZvV1NxOEx1Q1UvMnFCc2J2eUtXMS8rZ1B0dnVJYU1HSWZxZXp2L3cvTU5kbDZZOHZYMG1pUkpvcUNnQUtQUmlORm93R0F3aGhtY0xPc2ZvM3h4WWIrYkpDa2g5aVpVVlEwcmh1allXNmkvUWlERTNpb3FLaFNucyt1cXQ5NWE5MzdYUTl0SE93ZGNlbE4yVUNsMjZKRExtUC9FYm1BaUFNV0RCbUdUQWRuSjRJRTU3TnBkeXVUaVFhZDBhR1diSFJzeWRvY2R1ODJPeldiRDdUazVtZTdxcmM4eWZVazU2N2E4b2UyUHE0ek5lenpJbTU3ajNpMGE4L1FwMVpSV3VPblhUNlB3NXB4QmpCOFlsT0F3V3VqTUVPMC9ZUTUxRStiOHNNNjYycjNzOWVRek9GaTluajlrS01iSnY2WmFoV1RBbmorUS9zbWFBVHBrME1Vc1c3c0xHSEdLRzdOaXN4bkJic05oYzJLemUvQ2U1TG53TlpReWJ2ejl6SC94WHhRRTkyZlR4aTM0Y3JPNTc5N1BBQ2gzcXh4NWYvdUtGVisxYnBrNDhjYWpKMkJwb1JwUG55UkpvVFNPZ0M3cUtmVDVhVDdGTDR4eDhaamo0akViUEtMVkQ5YXU4YmdQK2VuYW96dDJleEoyZXlLWjl0MGtkVTJoUjQ4TUVrUWpMeTVkVEhXREIxVngwOVJvSjlTQndXNnpZM1hZY2RvOElOdXc0aWJrRGZVMk5lQ3hPemhab3I5MTg3K3hJdlBnck45ckhMZXlubEx2SG1BOGFsTUY5OTcxSjNhV1ZlRlZmZFM3RzJod1EwNW81Wlo4Sm8zdEYzeGh4aEwwTldUM3Y0QVVNNER0VklFdHdJdHZ2TVYvNURONTZzcjhLR3V5MWQzQXJjOXU1TnFycitLcXJPaE0wNC8zdnM4ZnRydjR4OVFSZEQxRlpaTzh2RHhDemsrajBZakJFQUs2aUptcStlSEN2amdSZkpTQ0VWR2RiellLNEZRZHdJWEFMUUFvVjE0NVlqK3dKUE95WDc2cktNcTFScVB4aXBOeEtuL3pJVWRzOVpOWW5hZDJOK09uL0puRnEvOUZMNGN4dkIrcU9abGhZNjRtSzdpcTBhT3ZKU2MzVXU4b1cyMmNyRmR0NytvRlRKcnpYSnYzNzMzOG40d2ZrTUtQYjhqaGg4alpPQWxaSWFXSjI4ZmZRTW5zcHhoVGxCYTF2Z0ZEcjJaa2dRMUZVZDQrNjZ4ZUc2Wk9IWGRnZVFUUU9nSTF2WTlOMFptZVlYOXhxRStJTEJ1RTBTRHdla0gxdWtWRGF6TUlnYi9GUzBLQ2pUaXpqTWxxbzB1WExqaWREcXhHaWE2cFBlaDVabGZtL2ZJUFhMOXNNOU9IRldDczMweGF3UjlpL20zN2M5Sml0MlAydUhCQjI4Q0wzTjdWb1pKVmRER2pSNGR1L2xjejFaRUJLTnczNldvc2s1NW53eE9ETUZOTmNmSkYwZFBmYXNQU0RuTEpzdkViQkE4UXZQbjIyN3gwUEpsbmYzNGU4YnFkVmp4TjNQSFVlZ1lPR2NhTnZhUC8zdWZsSC9HYlRRZFo4b3VSbkdIOVppcjRQWHYyeEd3MkJ3SE9pTWtVRFhEdE1MY2d3RWxTUkhvOFVxRVFZbTI2d0VKQXg5N0NrK2pBTzA5K1lESTlXVnBUYytDZHQ5L1plRjIvL2xQQ1NyMDd0MnpCclU3R3BqYXllVnNsbzZaR1pLUnRWaHVORGZYZjdmWG5xMmY2dUJzWStlQUxETXZYSFh0N0FVUHlQVlM3bkl3YnJrbnV1QnNhTU5wTzdSemtEWnZLMnY3ajJzeGNaOHFKUS9sV2F5SU5EViszbzVPUGhUT25ZeDB5ZzJramduZnA5QUlLcldWczN0M0FoSDdKbEczYWlGSjRQbGt5ZUFCWDJWWjJOZmdvVGphemFjdC82Ti92OTVGOXNOdHcxZGVnOEYyVzNhZ3N2ZWRHYWdwL3paSUpBNkkrR1RKMElLOStYck5yMHVDU04zdWZsZnRwNk9ZWkEyanRnSnJrbHlRTitJUVFBUUVCT1p4d2l4b0lxQUxKZ05sb0VrYWpFZUZyQnRra3pzaE0xd1FpWlM4ZmYvWVZSbHNpNmFsZCtkenRvVnUzYmppdFhnNDJCUmllY1NiNXVRa2NjWGRsME1BQ2pNRDJkZXVvUDhuN3M1emRqMExmUHNvYW9TUUcyZEtjM2FuY1dCVWxFejlvOENYTW1mOFplZjN2UWJzSEs1cHNQaDZxcXoxTUxTbkdMRVBWcGpYc1BZV21YVi8vM0xZYzRvRk5YK0N5eERGa3ZxWVFhdTZXdzd2VEwyWEhoeCt5c2U0NEg3eStsbis4SG1RSGx3L2ovZ0daL1AydDk2aHRsTGxoNFRQQkZjV3piT1lFK3A1aS85VE16RXdkdUpuUWtnMk5ZVk0xbXNXRmdVNElJYVJnUGFtUXBFQW9WeTRjV05DeHR4REFSYkUzd0orUmtma3YyUmovM3I4L2VYNllFT0k2SUMrRlNvWU51Z3lqcHdaenllK1pNQ0J5ZG9lTnY0VkY0MzVGMGVvSHlCdDJDeS9PbjByZDloY1pPL052ZUJxcXFHcVFLU2w1azRLUmQvRDRqRTcwdDd6N0dEZnNsOVI2WGRUWFZ6T3k1R0xNR1JlejhjWDUxRzk2a2VXNzZpaWNlek12ejlWTzdid1YvMlprdnBVSG4vNEg0OGIvakRVTDhyRDQ2cWwyOTJEanJwVmtuTUp4TjF2dFpGaFBMYStoLzhoSk9CNi9nWUtpRjNBV1hjT1dwMmVkRkxCdFhQa2NqclJSRVdDVDAxaXcrQStNSFhNaEt3cHlLQzJyWmZHS056R2pBWnM5emM2OUl5L0ZhbFVwZDJldzdwR0lRbTM2Z05FTTVSb0tDOC9EbG40QjY5Y3Z3ZG5KY2Uxc3pKOTJCZXZLM095cjlMQjMzRVVzdERwWXNPcE5pdTE3ZVhEUmVzaXJvVi9SMzdUcllPWmYrZU1ORjMwMjlCZXoxdnlxNzZBUGV6OGNVSFJSVEwwaWh5K1dvVW5nRjVvYWh4S2NoMm9FMUNRaHl3aEZFVUpJTW1hemRqMGNiM1lKYzBKeXVBdWMxZXJFWVR5QXF6V080dUtMYUZqM1QxNSt6VVc4MFlTemF6d1pQZlBJN05tTG1WTnlHVFhnUW9veXJNanBtYVNkN1AxUHptRGM2Q3pXYjloRHlmam9iS21DVVZNWXVPd2Fjdkplb1hERXJheFpNSU9jRWJjemE4dk45Qzg4bjRKZTZWUlY3bVBFUFU4eWY5SWdicnR6QWxPSFg4Q3lnalM4MXU3ME9vV2NwdE95OHVEcmpLTkhqMUplWGs1VjFaZlUxdFpTWDE5UFkrTVJtcHFPQldXUFFsVUtMWGk5clhnOEhudytIMEtva3RhaFhpRVFDRWpCL2d1aGFnVXBXTEVnQjhIZkNCaURWUXNtdE1vRk14QjMzMzIvVHp6YlVuSDU2c0ExMXkyL2EyaE9nMWNtSStWMHpDNVRxYXVwQm91VHRPUWZoMGFJNG5WVFU5ZEFTa1lXMW1DK1JkUDJwZVROL0lEYVRYK2lwczVGZWt3YXdROHhoQkQ3RHg4K3ZHYk9uRG03SG52czhWYWRLZWxyeC9RTVBmcURFVTlGdDZoNlgxcXdpb0JnMG0zUWVqR0hHaGxqc1VTNnMydXF0NGs0SEVrNG5WMUpTZWxLdk5uQzJlZWNSMkdmM2xFbFVrMzFOYml4dFVsRk9kRndsYTJoWk1ZR2RtNWFmTkt1RGErN2licEdGMmxwR1ZoMEtUdnV4bm9hUERKWkdjbW4xT1hNK044K3VidDA2VUpoWVNGeGNYSEV4Wm5EZHl3OWc5TXpOeUhVVUljckljdCtTWlpsRkVVUmdVQVVld3NWMThzeDVta0FVSUxtcVIvd3o1Ly9nQTk0cmZjZzhZNzN6dUZEZTNSTHVoYm9lZm9kS1ptMGpPd2ZsZmZMYUxHUm5kMitZb0JzdHBHVlpmdWhBYTN5OE9IRGJ6ejg4TU1mL1BuUEM3dzZnUEozQUdpeGdRRkZIeHdJQXBzSWxVVUY1YnZSUUUzTFR3dFdFMFNCbXMybXFkNG1KWVg2RTJnZDJyT3pzK25kdXpmeDhkRm1reU1sZzFQSjlySG5qMkxoakVacVhTbzVKNm5yYnJFNXlMYTEzWnJObVlMdEcvQ0QvM3JHcHB0RWZQYlpaMVJXN3VmZ3dSb09IVHBFUTBPa3Z0VHRkdVB4ZUhDNWp0SFM0a1VJZ2MvbncrZno0ZmY3SlVWcGw3MUpRZ2c1Q0hDaG1sTkRrTDJaZ3V6TnJGL3V2bnRtNHU5Kzk3dExuVTduMVpJazllR244ZjJ5dUtZYXR1eHpNV1JBL2cvSGpWVzFyTDYrZnYzczJYLzg4TWtubjJ6dEJOQmlGMzhRMU5vRE5EMm9oVmxhRU5SRU1FY052ZVJRQk5UMDFRU3A5T2lSUVU3T21mVHUzZnNIYjdyeVhZMGZEYkNGUmxWVkZaV1ZsZFRVMUZCWFYwZERnNmJHNjNJZDQvaHhOMGVQSHNYajhTQ0VDQmJRdCtMeitmSDcvU0ZsM2lCekMwaXFLcVJnNURSa29vWkNRZ2FkZWRvdXdPWGs1SmkzYnYzUHhhbXBxVmZKc256aFQ1RHo0eCtCUUdEN2dRTTE3MXg4Y1VscFRjMUJKU1l3MEJtbzZRRXQ3RWNMVlE4QVFoL3hiTXZTVEpqTmNlZ1ZiNjFXZmQxbnBKRnhSa1lHT1RrNVpHZG4vNmpQaGZISDlvZXlzN09KajQvSFlva25MaTRPc3prdUhHUXdHazBFQWdGa1dVWUlvVE5UV3pFWURLRTdZWWk5aVVBZ2dDUkpvYnkza0VrcXh3WVhZc3hUSDJDdXJLdzBwNmYzZUFmWVVsNytXVkYyZHZaUWs4azA2cWZMLzhjM1dsdGIxKzdidCsvZG9xSno5K3ZBVE0vU2ZPMkFtcjhEUUF2b1VqakNabWNzU3pNYWpVR1dwb0dheFdMUnlYZ25ZTE1sa3BTVWhOT3BseDNLb21mUEhGSlRVMy8wNThUNFkveFRxYW1wV0szV0lNQlpzRmdpQUJjSUtCZ01CbFJWRFVkUXZWNWpDTnp3K1h4Q2x1WDJmRzhpYUpyR1JrOERCSnRpb0lYaVRYcUFBOHk1dWIxM0FudmVlV2ZqUzhYRkZ3eXkyUkt1Z2xNS1N2NDBUaC9YUjgzeDQ4Zi8rYTkvYmQ0OWV2VG9oZzRBclQxUTgzZkcwRG95TzBNc3JYM1RVKzlQMDRJRVNVa09uRTRuS1NuZDZONjlPMWxaWjlDclYwOFNFeFAvVDV5ZlV6WkZtMXd1anZsbGVuU3hSUmNBQnhScWp4N0hFSjlBYWtKMHI4cVdGZy8xYmgvSmppUVNUTkwzTWZrb0x5L255eSsxaU9taFEvVWNPRkROMGFOTnFHb0F0MXVMbUxhMFJKckZ0TGEyNHZmNzhQbTBoakU2M3h1aDVqRnFRS0FLSVFmYm1ZWk0xSTU4Y0hwVDFRU1lKMHlZWVBuVG54NitJQ1VsWllqUmFPeFF4WGZQNXRWWThvYVJsM2J5elVOcXk2QkNnVUdGUDY2SldyRnJNMnBHTWJuaFk2R2lLRkZsNWhpREUvRkVKY2lxcXVxSzM2TStvYjZtR3AvWjBTWWkyTlJRUTZNYjB0TFQvblhvWU0yN3Yvbk5iejU5L2ZYWC9TY0phUDUyQUMzUUFVTlRRL1hPd1FBQjBTd3Qwcnk0clQ4dG9xUG1kR3BCZ3ZUMGRNNDQ0d3h5YzNPL1UzOWE5ZDZ0dUoyRjVHZWNIaEgzNzAyMmFQbnFWVHkycjVuVVJETzFqYzFNdnZwS3BoZCt0MjBISkVtaWQrL2VKQ1FrQlBONTR2SDcvUmdNUmxRMUVKWGtHNWs4QmxwYmpSZ01QdngrdjlDK0wwdUtFa0JSRktINEF2aFZGVWtTS3RwTk5hd1dFc3gzTXdRbmE0akJHWU9BNWdzQjI0b1ZLMXBYckZqeEwyRHJ4bzF2UDNYKytlZGZrSmlZT0ZTU3BDaGRsL1ZQUDBUeWxBRmZDOWoyYllNVmpUOHVZRk5kNVV5Wit2OVlzZjN0OEhzcjU5M0F4QWZYayt5d2hhZnlJMnMrWW55L1JvcHQ1ekp2MzFHR3Q4ZUpQV1VVcEJWZ0gvY3cyNWZPakFCWHhWYkdqYnVKV21NR2RxVWV1ZkJtdGo1OUQzanJ1V1BDMVordC9zUzNPY25RL05ISG41WWYwWUZTZTREbTd3RFFsQk1BbW1nL09HREFhRFRwcFlhSWl6TVRGMmRweDUrbUtkNTI3WnBNYW1vcUdSazkyUDM2WXR6WExhTDNkeHdrc0NrMWpKbStsbTFySDhSOEdzeVpVMkJzclpRZWFJbVNMWHF5S1pXM0poVFRlT1FJM25oN2xHelI0TkUzTURYUFRrdXJqL2c0N1M4ZjJiK1hpNS8vZ3YvTXVvYnZTMDZ3cWFtSnlzcjlsSmFXVWx0YlN5QVE0T2pSUm80ZDA0SUtzZmx1UVdYZVVOUVVSVkh3Ky8xUzgvRUFmalZBbkRrU1BkVUZHQ1Foa0tGTmtNRVFaSERHR0JZWHRYejg4ZDY4bmoxN1hoZ2ZIejlFVlpSMFZjZENUZ29BVkcyUmpUR01KVWhoM0kzUTVJT010SzhKTEY2b3FvV01iQWlsR25tYW9LNFIwcktJa3E0SjFiNVVWMEZ5QmxoMXMxenhRblVkWkdXM3ZhT3F3YzlTMHFOL0E3QngwVFNXTkE1aDFaenhPbUQ3T1F0ckxtSHI0OU5qMWxSRi8wNkFyWEx0ZzR4ZHNndDMyV0UyVi95YmRDT0FtMG45ZTJLZjloS0xwdzBHb0xTMHJQYk1NOC9ZL05KRDB6Nzh4ZisrVUIzeXFaNEVvT2tYSmNqUUF1MlpuQVNGVDRNMXpURm1wd0dEd1JSc1dteWlJOU16SVNHQlJKc1ZDWWt1S2VuMHpNNElCZ2t5eWM3SzRwRnBBM0ZNZnBPN1JtUkh5MWdCN29aYUdyeG1zak9TMjh5VnhycHFGR3N5S2Zib202cW5xWjY2Smk5cDZSblJVbEg0bUQ2b0Q0TVh2cy80Zmo5OGc1ZnZUYllvQkdxaFkyYzB5SHlmZ1dhSHc4RTU1eFRTMnVyRlpES2hLSDdpNHkzRXhWbUNRUWJORWR2Y2JNSm9iTUZrTXVMMWFpek81L1BoYi9WenBNRWdWRldSQkFxdHJZcVE1QUJtazRxRUpIeCtEZHhDUVFaWkRnY1pBa0pnQUNsWXhTTkN6SzBOeVBYdFc3Z0grQVI0K29JTEx1aDc0TE1QejcvN2hZckJkdzdQU0QrWi96aHRPT3lxZ093SnNIcGU1UDE3eDhBZUdWUTNWSmZDMEZtdytMWVRyKy9wbWJDcUNlcDNBbFl3RnNEV3BmRHdkRmkrQjNKU29MUU01andORTB2QXZRY3l4c0hJWEdod3daNDYyTElMY3UxUXR4c0dqNGFNUXUyZjc5c01XNXNnRzlqK01reStGM29WUVBrK21MOEN4dllQd3lFclZyek82RVVQZnl2ellNM3FOeGc2NFZHOFM2OWw3ZllHcHBVazQ5MjNudFVWV2V5WmZFbXR4K1BaVWxIeHhVZm5uSFBPZmoyNzZnRFEyZ08yMEh1aG9GSWdER2l5ckVwQ3FHcW9JemdJSkVrWVRTWU1zaVM4TFMzSTVnUzZXT1BBM3l3YWpyckl6TTdHYXRGQXpXS0pJeTR1MUpIZFNrS0NqWGpKemVzdnY0RTE3UXppMUdaU2lzZng1SnpCMkJwMk0yNzhQWlR2cWNGWWVSTWJGbGtaTVA1dTVrMGRCa29qc3lkZnk4djdWTEtzSGhwdHhheGQ5VGZTTERCelJDYmJQSDB4bWczVVYrNWw5T3puZUhDeVZzLzU0dHdibVBWeUpZVzlrcW5ZVjg4VFczY3dJSXlKWmthTnVvZ2xMNjlsZkwrSlVjZmNWYmFlQ2ZjOHk3emxLeWh5bkxiQXBoditacGJ0K0lKeGw3Y045bjFWOVNsYmpqbDVXVmN6dXYyRDkxbjAvbjRxajdReWI4TFB2bmYxVjRQQlFNK2VQWW1McytEenRXSzFKZ1M3WE1jQ25KbVdGaTJLMnRyYXFvR2IwY2NaMlVhTzF2bUZLK0NuUzZJV1BRMEVBcUxGRndCSnhXeFNoYXFxa3FJZ0NSQ1NGSTZpQmdDREpLR0FaQWhPZkdQUVREVzJBM1RHSFR0MjdBTDIvT2JLcktjdTIvdFI3NXljbkNLcjFYcGhaN2x4U3pmQTJvV3d0SjF5VEZzQnJKd0xUZHNoZXhvc3ZPM2tUdjcyUGJCM082Ulp3UnZzQ2pqOVliZ242RXFwV2crRDU4TEVEY0U3ZWgzY3N4TUtIWERQY0ZpNUVlNGJBdy9mQzJNZmhIa1RvR29EOU5vWXZNazF3TVRiNGRuZE1EQWQ2clpDOFYwd2VrdHcvM3dWN0N5MWMzdEIyeXVpZE0xZkdGcnhxamFSMHk1ZzlmSjVuV2U4cTNXc1hsZkY3SG45OGRSZXl1TnIxekYxNE1TeThnLzM3ZkIwY1pUMWpEUG9tWm1xWTFtZEFacWlZMmVLSHN3a0NUWFlsRmhvaWd1U2tHUkpHTU9SVG9sV2I2dFFoWUY0czRuNE9CT05UY2RGZ0hpT0hXc2hMYXNuU2JiNHNEOHQwajNLaXMybXFkMGUrYlNVaEw0amVmaXVjZlRva1U1NmVqcFpXVm1RbTh2R2plT1pOZlpzSEpPZlorYkk3UEJoMlB6NGJOWjRMMkx2cm5tWVVWazQ3UkllWHI2TkJWTUhhaVJnd0RqV1BUd1pUL1ZHZXZXL20ybmpkNUJqcVdQSjRzMHMyM3VRUVdtQTRzTVhZMHdVRmhheDY4R2RoQlJ2d3JjbVZ4MjdkbjJFMi9mZkVCVTlCZG1pdm5sbjh6L3BaN0IxOXdjc2VtY1BsMDBkVE1JUFFGTlRVbEp3T3J1UW1KaUl6WllRRlVIVkp0RngzRzR6WnJPSGxoYU40WVZNMDJhekQ4bHZ4R0x4aTJCZ1FmSzRGUXltZ0RBYXRSNE5BVVVWSUNSWkRrZFJKUTNraEJ5OFVPVGdoV0FJbXFuaHNxMTJnTTVZV0hqT1IwRW05OUpiYjYzcmZ0NTU1K1U3SEk0aWs4bDBJWEJTblRVR0J2WC9IRmxnYVFRM25GUjIrYkF4R3FnQllYbVl1cjB3WXlHVTEyZ21aTDF1Z3R0eU5WQUR5TXFDVU8vblhidGg5dFBhOCt5QmtCR2NlVlhib05ZSXF4ZkJHa0QxZ2FzVWFvRXNBRmNEalVZSGpuYmNqRG1Ecm1QeG5LREV0OUYyUXQ5TzQvYTFsS1pkZHV6OHJvRWQ5VVhGZTkrWjlOY3ZEQTlOUGhMeWtYYkN6dG9ETmIzQ1JyVHZERlNCcEdxUFFvUjdic2l5TU1nSTdZYW9DSkMwM3BFR0l4YUxSUmlOUnRLTmNQQndBL2JVYkxwM3Rlc0NCQnFvMld6UnFSelpDZWZ6K3FLVlBMc3lnV0hEUnBCYmRHS2h4eTFiL29YWjA1L1o5LzQrNkRid1VHZlpDMmpBTm1TUVpvNWJzd1pTYkM5bGQ1VkNUbDR5UXdZbGM5dTRheGczOGpJR0R4L0ZvTUtzcVBYYW5RNWM5VWZhYk04NVlESjFkWk5QZDFNVVRsVzJLQ0hCeGxrSk5zNjZzb1EzNXE1ZzI1Rkx1THpyRDVQNWJMVmE2ZE9uRDNhN25jVEVSQklTYkZpdFZxeldlSnFhTkFibmRzZGhOamRqTnB2d2VrMTR2YTBjTnhzeDRDYytQdXg3RTdMa0IyTkFNcHMxQnVkcjFSaWNMR3NwSW9HQVFKS0ZoQWdIN0tUZ1hWM1dtSnprMS9uaURERWdwd2M2WTFCQzZRQ3c4Wnh6Q2szTGxqMlZrNU56Wm0rYnpWWm9OQnI3US90OWxjT0tMbCt6OE00U0crUnl3OWl4TUc4ZGpPd0hudDJRTnFXZDdjUnNTemFDVDRuNEl2U2VYWHNHakJrZGVUMW1QSVFGa093TzdJb0xseGRpNlpqVmtVNWUzZ2wxOU4yS29uemdjcmxLRno3K1ZPV1JEN2ZYMk0zTDFSaG1Gb2p4ZzNVRWFIb3cwLzlHMWZ2UGdvMGlWVWxDSUJDeUxLTUdBa0tXRGFoS3F4RElKTm9UTVp1TUhHdHNFQWFUQmw0bWt3bVA1d2l5TE9Ieks5Z1NiY1RIdE1RTDlmbDBPcDEwNjVaQ2V2cUZiTHZtSmo3NzlGTldQZnNnZjMzdEE4cld6Tzg4S2d3VURyaWMwY09DZ2d1anI4YWVrbjFDcUpqejh2dU0zcjZGTFpzMk1ISEkrVHk0N21NbUZFZWtxdHhOTG16TzA2T0QxZmNrVzZUeTFiRVd1aWRwL0t5eHZvNERpcGt1bGgrK25DTXpNeE9Id3hFRU9Gc1k0T0xqajJLeGFPQ21CUlphTUpsYU9CWm53b0NQaEFSanFHS0JoRGdqTHNVdkxIWURpaThndVlXQ3lSd1FKbGtsRUFqZzk2dElraURZVHliVTZGbHZwc3JCQzhRZ1NWSTQ2S0FEdWZiQXp2alJSM3VONTUxM1hpbXdEMWg3eGhsbkdHNGI5WHhXcStHc0hKOHZxYmZKWkNxUUpLblh0M3JBR3FIYUNDVkYyazZ2VzMxUzZtUU1HZ2pyMThDSUdiQjNQZFFvRWZabXF3WTVHNHFEUVkyR0JoMkdtWE1wem0ya3ROeERZZUdKbzhOQ2lBcFZpRStPSHE2cjJGeXg3OHNiYjV4MHFLYW1SbzFoWmUyeHM0NVlXdml6b05LTEVyTU9WUWloVDlVUVdndGNTY2d5QkZTRXdXQkE4ZnVGd1dSQ1ZWb3htT0t4eHNjSmd4UkFVU0UrVG10N0o3eE5mSFZNMEsrNG1PcTlIMURqeXViOE5JY3U0VllmOWRUcVBidDI2VUpxang2Y2ZlNkZETy9uSUcza2MzZzFsNmpHb0MwVzZoc2EwTHlaMmhnODZGTHUyVnBKdjlrVE5aYXJlbWhvaXR4cU5tM1p4TXlSVS9CVWIyT25xNEFGMlViQWg4dXRValJ3S0VVRGg5SlUray9LeW10QkIyeGxaYVVVOVcvTEdOM2xtNWd4ZnhYM0xGcE12djEwQmJaVGtpMUs1Uy9QdmNTN0xSYTZ4Y3Q4ZWFTWmNTTXZvMy9DYVFIdUpDWW1VbEJRUUZKU2tnN2dFckJhRzJscWlzZGljUkVYMTB4Y25KbkdPRE1tNGNWbU05SGFxa1ZOMHpKOXVDdE0xQi8ySTFSRnlHWUZlNElpQlpON2hkY2JRRGFxUWhhcUZFcjAxUVVhUWlBWFpuSEJ2RGcvMGJseGhoaUFhL1A4eXkrL05QenVyeVdmQVJWeEMza0hNRHp5eUo5c2g1b3VUMDkwOWNocWJiV2RhUkttWGlEM1JsTW8rZm9qQzI0ZkNDVURJTWNHeVZrbk40bnVlaGhHajRIOHBaRGJIN0tDZHFPY0RDc1d3YVNCV3ZEQVZRdm0vckR4OFloVGV1eTRLMWk1ZmlNVENrZEZoK2VGK016cjlYNXgvUGp4TDZ1cnF3Lys4NThiRHQxLy8vMHRnRHFoWDdvNEFaaDFCR3F4ejhOTDhQeEVKZElHMndNSmlLUnJJRWxDUXNKb2tJUmYwZEtLZksxZVRPWTRMQ1pWSEdseWM3akJDMExDYUpBd3g4VmpOY1BlZlhYazlSdElhbGM3R1lNdjR1Mk5PL0hrOXlhN1czSlFsY05KdDI3ZHdxVlJtWm1aYkhyaUxpNWUrQjhLOHJLbzNMdUgyKzc3QjNyNEh6dnRONHlkZGdNYkY5c1pQUGwvV0RCakJJT256V1hFenVzb0tMcUkvQ3dIRmVXVnpGajhKdE9IYW1TL2FmdkxEQnI2R2syVnBVeDYrQmx5TEFCMWpDKytGSGRHUG5ZYXFIVG5zbVprWVJSNVdidm0zNHlkTzYvTnVmZldsL1BNTXk4eDhjSHZEOWkrMTFyUlprOHpSN3dLWFJNVFNUREpQd2lJMWRmWDQvUDV5Y2pvMGY0K05qZFRYVjBkVHVnOWNpUlVhK29LeXlDMXRHaSt0OVpXYnhEY3RIcFRqOXVISWhTRXFxV0hoSXJxUTlVTHdScFVnaldvb1VKN1FrQ25lNVNEZ0NmcmxwQ01raUdtQ2ZTSm5odGlmdy9JcTFhOW1weVhsOWN0T2JsYnFzMldrRzR5bWJvYkRJWU1TWkl5MnhwOWJVZEREU2hXU1B1YUVTQkZBV29oYXlpVWwwZnNabFdCbWhxd0o0TWpZa3g3aFJBSFdnL3ZPamh3K0IrL1dySDI2YStVeHZyRFpXVmxSNjYvZnZ4UklocDY0ZlNKRHNDc0k0Ylc0Zk5ROGJudTkvb1VqWENxUnVneDJCMHRxTllzaVpCY3ZXNkpsRU1aWkFRUzFnUWJscmhRbmFjNUdQRU1CUWdTd3Uzd3VuUnhoRmxhS0RpZ2I0WG44N2lvclcvVU9qcFpUejZMek5OVVQ0TkxJUzA5SFhQdzdqUnplQ2JaTTk5bllxR0NZbkdTSEpYdW9kSlFXNHNiTTFucEtkR3BJL3ZXTW5ENk9yWnZYb0wxTkNBclA3b2krRzhLYktGUlYxY1hMS1EvUkVQRFlSb2JHNE1hYnhHbEVJK24vWW9Gdjk4ZnpuM1RWeTRFQW9vVUNLaGhnQXNFMUNDd3FhaHFHTlRRTWJxT1FDNE1VREdxSTUwdGNzeHpPZVo1YUJ2U280OHVzUFh0MjllZWxwWm1UMHBLc2x1dFZydlpiTFlialVhN3dXQ3d5N0pza3lUSkprbFNnaVJKOFVFZ0RBa0FHSFRldFJBdytHcTM0cHY1TE41emU0dVdiYStKNXZRSndyM3dsNm83RUFnY1Z4VEYxZHJhNnZKNFBNZWJtcHBjWDMzMTFmRzllejkyMzMzMzNSNGRlSWtZSUJPZGIrLzA0Z0FBQzh4SlJFRlVnSmtleURwaWFsRkxKMEFXQldaNklBT0VMRXRDNjVJbVlURElPa0NUTVJpTXNaVURSQkp0MjFZUWFNbTJtaUpIWXFJOXpOS1NrN3NGdTdGck9XcmY1UWdCMjR5aFgyODcrN2F0cGNGUlRFbis2U0VQL3hPd2RaYk40dmR6NE1DQnNJQ2xKb04wbEdQSFhPMktXRWFyaGZpQ0FLZTBBM0FSRnFkMXVsZEQ1VnJFTUxqT1FLNWRzTk9WZDhtZGdKcWhIV0NMWGZUYjZXeWhuY2ZZNTlGTzJyYlA5WStkTGJGQUZydDB4TkxhUEE5SnY3Y0hZaWNDczlEem1KNGFVZXlzTGFDRlFDMVN1TjZSR0dSU2toMkhvd3ZKeVYxeHlHNys4MkVsRG1jWERJYm8vdlQ5aDQxblFPNjMyMTE5Mzg3TldIc05KTXRwL3ErK3puOEN0cE1ZeDQ0ZDQrREJnOVRWMVhINGNJaTlSWFRlbXBzOU92TTBVclVRcVRtTkJyaEFJQkJscHFxcUdnVnlRcWlTcW9xd3FVcTQ0Yk9RaEVBUGRGSTdJQlFEVU1LZ1ZVTzB5OUk2QXplcEE0Q1Qyd0cxemdDdU0zQ0xCVFRhQWJIT0dKcmFBVnVMZXEybDJraWRnbGpRWjZick54djJtNFhBTEdocVNraFNOSmpwUUUyRUZHUDBnR1kwUmhoYXFIcWdiVjZhVFZmbkdmR2w5ZWpSZzZTa0pINGEzM2xVOVAvZVNFcEtJaWtwaWE1ZHUxSmIreFgxOVllQ09tOUhneVZaeDRNRjljM2hnbnF2VjErU3BXZHZJUk0xRUtVZW9nbGNCZ2dFVkZSVkZVR1FFNnFxU3FGK00xcS9CcUpZWFBBQ2ptVjBPZ0NTWkVtS0JUd2hCd0d5TTBEckROeStEblA3T3NEMmRjek9kZ0V1Q0VpZEFoalJ6YkxEb0tyM21ZVmVCd0V0aXBscFFDYUgyajZLRUZPTDFIWWF3d3JPRVpZV3FSNndSS1Z3aEZoYUVsMjZkQ0U1T1ptVWxGVFMwN3YvbjVBWCtnbllmdUJSV3ZvSnVibG5rWnFheW9FRE5kVFZmY1hodzRjNWN1UklsSkJseUR6Vks0Ym9hMDQxMzVzR2NvRkFHT0FJQkFKNmlTUkp4K0JFaE1tSjBLT0lNVlhSUjFjamJGeEk3WU5TRk5oRmZhY2RjMWM2QWJCMXhOcGlUVkxSQ2JoMUJuQnFlNjkxb05RWnM0djlUZFMyOUs5alRFMWtXZFlGQS9TQVppQ2t1aEVMYUFaRGhLSHBpOWJiVTdiVnpNNklFR1RYcmwyRExLMDdtWmsvS1ZyOUJHdy93TWpNekNBMU5ZWGEydHF3U205Yjg3UTVHRndJQVp3dnh2L1docjJGQWd4QmtGTTdCRGtkd0JITjVxUllvSXQ2M3M1bmJaWmdIbDBuekV4TDB2b3VmV3hCMW5XeVRLNmpCYjFwR2ZPYTlsaFppSm5wL0dmdGdGbkk3RFIyd3RMMGZqUnpVQk13WGljQ0dXMTJodFJ0MDlQVE1adk5QMTFnUHd5d0JkaXhkeC8vclBpS1k0cE13Vms5dWVIY016QURyYzFOdkxyck0vYldIY05nc1RHeXVKQUx1OGNrd2l2TlBQWHZqem16OTlrTXp2anY5UjJZeldheXM3TkpUVTF0WTU3cW82ZlIvamM5ZytzNGVxb29Db3EvbFpaV0NZdFppZ0k1WGJDaFBaQWowaVlWS2ZaUlZWVWtXUTRKMk1ReU96cGhZcnJYVWtqVzYyVEJyQ1BHRnZXZUNOblpKMlp5ZEFKZ2tkOExJVlJWWURESVVVeE01eTlEbjZJUkMyYWh3SUMrQ2JlZW9YVVc3WXo0MFN4dC9HaWhhR2VzMlJuYlVLVzlVYllic29xZzNaYXc3aW9tVEhtWXhTdVc0TlJkMWJYbGU1QlQ4a2x6ZkR1QTZTbGR4ZUM1dTlqNTh2eHZ2SjRoYzNleC9SVFdjekwvNlJUMDJJNnplbmN0UllYWnBKcFZscjI5a2MrT1g4YURnN0w1c3JLS2o1dGxMdTJiaS92SVFYNzk5NVVzdm1NaUE3cEVOdlBXNXEwc2VlOUxyckwxK0s4R3R0Q0lqNCtuWjg4YzB0SlNxYXVybzc2K1BtaWU2djF2SVlCcmFTT0wxRkgwdExuaENJY2JBK1JrcGVqVFE0VE9ENmNIT1lSUWhSWndVQWtHSHNKQUY3ek9KU0VFa2l3alJjQ09rMkZkTWNCM0lqQTcyWEtTTnFhcGlQdzRDcVJDN0tvanRxY0h4UER6NFA4ekdBemg5Mk1DQUVRZVk4Rk0xalhkMWdPYUlkaVl1Nk5vWjdTc1VFaUZRd08waUIrdGE5ZXVwS1Nra0phV0ZwV1BkcUl4YlFRc3JJRCs3UlROclZzeUI4dUE4VkdnQnJEa3ZwL2ptUHhXVkJIOE43cWhweFZ3KzZSdm50S2hlbDFVVlI4K3BkK2V6SC82K3NBbU8zaGc4dVhobDEwOGg3bDF6NWN3S0p2Y3ZrVTgwRGYwU1RhN1AvbVVMZnNiR2RCRk94Q3V1djA4VjJ2anVqT3RlSDVrMURjaElZR2VQWHZTdlh2M2NQVDBTTzFuUFAvQ2UvUXRLY0hlY2h6WG9VbzJmVkpMbjc2NUpMUzJCQU1Nc1F6T3k0RXZ2cURwV0ROQ0VSdzVjZ1JWTXBHUzRvUkFnSURpNWZEaFkxaXRSbkhNNVVKRnhwN2tRQloreWVWeW93UzBXSUlwemlKTVJna2hCQUcvRDE4Z0lBQkpsZzFJaE1CT1JWRlVMU0NocXFDeGxwTUZyVFlBcGtYWXBUQ2xDNmJrSTdjdmNpakMzd21CclBiOVlGNFlZWUFLN20yUTFXbUFKSVFxaE5CK0wwa3lScU1oQkhBRUZEOENDVW5Xb3BRaFVBdjRXMUV4b3JTMkVoQmd0ZG14eHBuQ1FOWk8yZ1p0ZldudE16U3Q3MEFRMEl6eDdQbkVTdTRaTm5ac1M2UmJUaEkzVDNTUTNrM3pveDJ0U09OdnoxaHh5VEIrT2d3dEJEeXdjQkdNdnhQU0xPQ3JoMGVlaFJsM1FlVW1XTGtacXR6dytGeElNOE9JU1RBd040UVNqU3grNGwvY3RXVnArT0EybFc5andiTnZzYm0wSHN2eVA5TzAzVUhlNEd1Wk9GUnJabHk1Y3kxYm01SkpxZDNDaTVzK0lYZkl6N2x2OG5BcWQyM2c2WmZmb3JxdWtmVGM4NWx4KzNUUzdScE1ySHY2WWJaVkhNZWFkWDdVaWF6WXZvYnRqWGE4ZXphd3RlSUlJNmY4bHJFbHVTZHgxZmhZdldRZWEzWitTYitSTjNIYjJCSmtvTDU4TzB1ZlhVVjU5U0djR2IyWmR2dWQ1S1ZaVC9pZlZFODl5eFl2Wm12cEFiNXgrdituOVEza3ByZVRTK00vVHNVUmxUNnBRVmFtK25obzdVNm1YM2srY1QvT2psK0FWbHlmazVQRE9lZWNRLzY1Z3pqSDBjQ0xHOHZJeWtwangvbzFtRFB5eVV4THBWdTNGSktUdStKME9uRTR1b1RMdWV4Mk82azlNa2gxSmlLWkUwaExTeU0xcFNzSlZvMEJ4TWNaY0x1UGMrUm9NM2FIRTd2Tmd0RWNSNXhSRnJJcFR0aVRrb1F0d1N4OExjMWdER2EwV3pRNUpzMDJNd21UeVNTTVJxTXdHaVFSQkFoaE1CcUUxc1JCVWcwR2d5ckxjbnRMSUxpRUd2ZEdMNXIybkNKSmtxWjRvZFZWaGwvSExBRkprZ0t5SkFWa1dRNG15V3JybG1VcHZCMkJVSVdHdW1wd3U2ckJZRkFsdEk1TkpwTlJTS2hDQ2FqQ2FEUUtrOGtrVENhek1FaUlnQ3AwaXJOeGlJQkNhMnVyc0NRa0NwdFpGbTdYY1JFWHIvbS9Jbzc5NEhHT2o4ZHF0WEM4c1o1RGh3NVJWMWRIYlcwdEJ3OGU1S3NqYnV4Mk8wbEpTVGdjWFlKK3NxNTA2NVpDYW1vcTZjbmRlVzlMQm1VTlozRDk5VGswN3N4bFcxMCs1NXh6RGtwRkR0ZmVhYVZrTEV3YUNYZU5nWjMxZ0JXeWZERHBIazBzZE5ZVWNLV0JYWWIwWGpCOE9Eak5VRHhFZTU2bHUrUjg1WnZZS2ZkblFIcUVwMWlTc3hnMi9BcXlVMnowNm5jeHc0ZGZRYjllRVZtL3lwMXZjdCswWDdDcXdzTDRpZGRqVlZ3QVZGV1UwMnZBbGR4KzF4MWt1ZDlqMkpSNVljR0N2SDZES2NrSzhNaXlOMktBN1ExbVRMc2J0V0FvRTRabU1uM3N6VlNmaEVSUjArNVZiSEQxWXZxVWExazkrem9XYjZnRW9LYXlBbWQrQ1hmZWRRY2xLWWNZTnVJVzNDZjZUNnFMR1NNdVpsMk5uV20zMy9ITmdnZlYrei9oc1U4Q1BEbmo3RmlpeVROck5oSjM5Z0N1N0tHVkpPN2M4UjVObVVVTTZtYm13LzhEemt1THhVSjJkalozTFg2QlR5Ky9tTWNmLzRER3pKSE12dTRTM0M1OWlvaW5UWW1XMVpxSVRiaW85UGpKeU1pSTlzRVp0Um1UY1ZadkVnMUNaNlphTU1mN2FQWTBvMGp4eUhLTFVERVFGMmRHbU0zRVdWUWFXcjJTMFJ4SG5DRm9zaXFDRnE5ZnhOc1NrSVdndGFVWlJZRFJhQ1Jpd1lxUU9Sb21Xa0VpRmtXK2hORGlwcW8vQUxLTWpDb0ZBbUF3R0pHbGprMVFqV1JKK0gwK0pJTVJveHg1RDBBRUFnUWtDWXNsTHNxa05KdE5CQlNGZ0Nvd0dtUjhBVUZjbkJsSmtwRXNGcFFXRjY1V1NWZ3NjV0Z6cy9XNGhDa3VpV1NuQTFsSzRIaGxMWEpjUFBGR2ZiV0FQakFnMDJwTEpJNW9jOVNjMkFXbnMwdVVEMDNmU01WT0VpYWpnOS8rMFVtLzFHNTBQNTdLcXpWR0xCWll1aEFtem9JUkpkci9uem9VVnF5RjRpa3daaFpzSGdGanhrQlRDbXdNeXBxbFpHdUwzUXo5U3RxYW9yWGxWVmh5TXFOa1hTek9ERXBLTWxpZllzV1JYMHhKU1Z1enpaaDNCWS9QdXgwWkdCNThiOGo0R2RSVzdHVnZlUTBaaGVkUzkreGJOQUxKUUU1aE1TbStNdVJsYlUzSWdwRTNNbTNVRUtDWWdiUCt6TjVhVFNtNTA1RStpUG4zanNjQnpKcHhEZmU4dUlyYmg4MmszL0NKWkZmdlkwOVpKZVplNTJDcGZJQUtOeFIxOHA5Y3UxZXp2RGFQbXMwenNRUC9IM2l4Z0ptUU81d3VBQUFBQUVsRlRrU3VRbUNDIl0sWzEsImRldGFpbHMtY29udGFpbmVyIl0sWzEsImRldGFpbHMiXSxbImhyZWYiLCJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvZGVidWdnaW5nL2V4cGVyaW1lbnRhbC9lbmFibGVfZHVtcF9kZWJ1Z19pbmZvIiwidGFyZ2V0IiwiYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFQoMiwiRGVidWdnZXIgVjIgaXMgaW5hY3RpdmUgYmVjYXVzZSBubyBkYXRhIGlzIGF2YWlsYWJsZS4iKSxnKCksaCgzLCJkaXYiKSxUKDQsIlRvIHVzZSB0aGUgZGVidWdnZXIsIiksZygpLGgoNSwiZGl2IikoNiwib2wiKSg3LCJsaSIpLFQoOCwiIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gdGhlIGJlZ2lubmluZyBvZiB5b3VyIHByb2dyYW06ICIpLGgoOSwiZGl2IiwyKSgxMCwic3BhbiIpLFQoMTEsInRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygiKSxnKCksaCgxMiwic3BhbiIsMyksVCgxMywibG9nZGlyIiksZygpLFQoMTQsIiwgIiksaCgxNSwic3BhbiIsMyksVCgxNiwndGVuc29yX2RlYnVnX21vZGU9IkZVTExfSEVBTFRIIicpLGcoKSxUKDE3LCIsICIpLGgoMTgsInNwYW4iLDMpLFQoMTksImNpcmN1bGFyX2J1ZmZlcl9zaXplPS0xIiksZygpLGgoMjAsInNwYW4iKSxUKDIxLCIpIiksZygpKCkoKSxoKDIyLCJsaSIpLFQoMjMsIlJlLXJ1biB0aGUgcHJvZ3JhbS4iKSxnKCkoKSgpLGgoMjQsImRpdiIsNCkoMjUsImRpdiIsNSkoMjYsImRpdiIsNiksUCgyNywiaW1nIiw3KSxnKCksaCgyOCwiZGl2Iiw4KSxUKDI5LCJBdXRvLWFsZXJ0cyBmb3IgcHJvYmxlbXMgZm91bmQiKSxnKCkoKSxoKDMwLCJkaXYiLDUpKDMxLCJkaXYiLDYpLFAoMzIsImltZyIsOSksZygpLGgoMzMsImRpdiIsOCksVCgzNCwiIEludGVncmF0ZWQgZGVidWdnaW5nIHRvIHRyYWNlIHByb2JsZW1zIHRvIHRoZWlyIGNhdXNlcyAiKSxnKCkoKSxoKDM1LCJkaXYiLDUpKDM2LCJkaXYiLDYpLFAoMzcsImltZyIsMTApLGcoKSxoKDM4LCJkaXYiLDgpLFQoMzksIkxpbmsgbG9nIHRvIGNvZGUiKSxnKCkoKSgpLGgoNDAsImRpdiIsMTEpKDQxLCJkaXYiLDEyKSxUKDQyLCIgVGhlIGxvZyBkaXJlY3RvcnkgbXVzdCBjb250YWluIFRlbnNvckZsb3cgRGVidWdnZXIgKFYyKSBkYXRhLiB0Zi5kZWJ1Z2dpbmcuZXhwZXJpbWVudGFsLmVuYWJsZV9kdW1wX2RlYnVnX2luZm8oKSB3aWxsIGNvbGxlY3QgdGVuc29yIGRhdGEsIGdyYXBoIHN0cnVjdHVyZXMsIHRoZSBhc3NvY2lhdGVkIHN0YWNrIHRyYWNlcywgYW5kIHNvdXJjZSBjb2RlIHRvIHRoZSBzcGVjaWZpY2VkIGRpcmVjdG9yeSBsb2dkaXIgYXMgdGhlIGluc3RydW1lbnRlZCBUZW5zb3JGbG93IHByb2dyYW0gZXhlY3V0ZXMuICIpLGcoKSxoKDQzLCJkaXYiLDEyKSg0NCwiZGl2IiksVCg0NSwiIFNlZSAiKSxoKDQ2LCJhIiwxMyksVCg0NywiIGRvY3VtZW50YXRpb24gIiksZygpLFQoNDgsIiBvZiB0aGUgUHl0aG9uIEFQSSBvZiBEZWJ1Z2dlciBWMi4gIiksZygpLGgoNDksImRpdiIpLFQoNTAsIiBTZWUgIiksaCg1MSwiYSIsMTQpLFQoNTIsIiBoZXJlICIpLGcoKSxUKDUzLCIgZm9yIG90aGVyIFRlbnNvckZsb3cgZGVidWdnaW5nIEFQSXMuICIpLGcoKSgpKCkoKSl9LHN0eWxlczpbIi5hcmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgY29sb3I6IGxpZ2h0Ymx1ZTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBtYXJnaW46IDJweDtcbn1cblxuLmNvZGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgbWFyZ2luOiAxMHB4O1xufVxuXG4uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMTAwJTtcbiAgZm9udC1mYW1pbHk6IFJvYm90bztcbiAgZm9udC1zaXplOiAxNXB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBwYWRkaW5nOiA1MHB4O1xufVxuXG4uZGV0YWlscy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMTBweCA2MHB4O1xuICB3aWR0aDogNTAlO1xufVxuXG4uZXhoaWJpdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDEwcHggNjBweDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IDMxMHB4O1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0gICAuZGVzY3JpcHRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2lkdGg6IDMxMHB4O1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0gICAuc2NyZWVuc2hvdFtfbmdjb250ZW50LSVDT01QJV0gICBjYW52YXNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAyMDBweDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi50aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufSJdfSksbn0pKCksSVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSJdXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUCgwLCJpbmFjdGl2ZS1jb21wb25lbnQiKX0sZGVwZW5kZW5jaWVzOltEWF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksUlg9e2dldFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB3aW5kb3d9fTtmdW5jdGlvbiBBWChuKXtsZXQgdD1SWC5nZXRXaW5kb3coKS5yZXF1aXJlO3JldHVybiBuZXcgUHJvbWlzZShlPT57dChuLGUpfSl9dmFyIFVMX2xvYWRNb25hY289YXN5bmMgZnVuY3Rpb24oKXtsZXQgbj1SWC5nZXRXaW5kb3coKTtpZih2b2lkIDA9PT1uLm1vbmFjbyl7aWYoIW4ucmVxdWlyZSl0aHJvdyBuZXcgRXJyb3IoImxvYWRNb25hY28oKSBmYWlsZWQgYmVjYXVzZSBmdW5jdGlvbiByZXF1aXJlKCkgaXMgdW5hdmFpbGFibGUiKTtuLnJlcXVpcmUuY29uZmlnKHtwYXRoczp7dnM6Ii90Zi1pbXBvcnRzL3ZzIn19KSxhd2FpdCBBWChbInZzL2VkaXRvci9lZGl0b3IubWFpbiJdKSxhd2FpdCBBWChbInZzL3B5dGhvbi9weXRob24uY29udHJpYnV0aW9uIl0pfX07ZnVuY3Rpb24gaVQobil7cmV0dXJuIG4/InZzLWRhcmsiOiJ2cyJ9dmFyIHFmPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5yZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5Ncz0xMDAsdGhpcy5vblJlc2l6ZT1uZXcgTCx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBBZSx0aGlzLm9uUmVzaXplJD1uZXcgQWU7bGV0IGk9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT57dGhpcy5vblJlc2l6ZSQubmV4dCgpfSk7aS5vYnNlcnZlKGUubmF0aXZlRWxlbWVudCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5zdWJzY3JpYmUoKCk9PntpLnVub2JzZXJ2ZShlLm5hdGl2ZUVsZW1lbnQpfSl9bmdPbkluaXQoKXt0aGlzLm9uUmVzaXplJC5waXBlKCRhKDEpLENyKHRoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMpLG90KHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm9uUmVzaXplLmVtaXQoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlJC5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImRldGVjdFJlc2l6ZSIsIiJdXSxpbnB1dHM6e3Jlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zOiJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyJ9LG91dHB1dHM6e29uUmVzaXplOiJvblJlc2l6ZSJ9fSksbn0pKCksWU1lPVsiY29kZVZpZXdlckNvbnRhaW5lciJdLEZYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmxpbmVzPW51bGwsdGhpcy5mb2N1c2VkTGluZW5vPW51bGwsdGhpcy5tb25hY289bnVsbCx0aGlzLmVkaXRvcj1udWxsLHRoaXMuZGVjb3JhdGlvbnM9W10sdGhpcy5SRVNJWkVfREVCT1VOQ0VfSU5URVJWQUxfTVM9NTB9b25SZXNpemUoKXt0aGlzLmVkaXRvciYmdGhpcy5lZGl0b3IubGF5b3V0KCl9bmdPbkNoYW5nZXMoZSl7aWYobnVsbD09PXRoaXMubW9uYWNvKXJldHVybjtsZXQgaT1lLm1vbmFjbyYmbnVsbD09PXRoaXMuZWRpdG9yO251bGw9PT10aGlzLmVkaXRvciYmKHRoaXMuZWRpdG9yPXRoaXMubW9uYWNvLmVkaXRvci5jcmVhdGUodGhpcy5jb2RlVmlld2VyQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQse3ZhbHVlOih0aGlzLmxpbmVzPz9bXSkuam9pbigiXG4iKSxsYW5ndWFnZToicHl0aG9uIixyZWFkT25seTohMCxmb250U2l6ZToxMCxtaW5pbWFwOntlbmFibGVkOiEwfSx0aGVtZTppVCh0aGlzLnVzZURhcmtNb2RlKX0pKSxlLmxpbmVzJiZ0aGlzLmxpbmVzJiZ0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLmxpbmVzLmpvaW4oIlxuIikpO2xldCByPWl8fGUuZm9jdXNlZExpbmVubz90aGlzLmZvY3VzZWRMaW5lbm86bnVsbDtpZihyJiZ0aGlzLmxpbmVzKXt0aGlzLmVkaXRvci5yZXZlYWxMaW5lSW5DZW50ZXIocix0aGlzLm1vbmFjby5lZGl0b3IuU2Nyb2xsVHlwZS5TbW9vdGgpO2xldCBvPXRoaXMubGluZXNbci0xXS5sZW5ndGg7dGhpcy5kZWNvcmF0aW9ucz10aGlzLmVkaXRvci5kZWx0YURlY29yYXRpb25zKHRoaXMuZGVjb3JhdGlvbnMsW3tyYW5nZTpuZXcgdGhpcy5tb25hY28uUmFuZ2UociwxLHIsMSksb3B0aW9uczp7aXNXaG9sZUxpbmU6ITAsbGluZXNEZWNvcmF0aW9uc0NsYXNzTmFtZToiaGlnaGxpZ2h0LWd1dHRlciJ9fSx7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKHIsMSxyLG8rMSksb3B0aW9uczp7aW5saW5lQ2xhc3NOYW1lOiJoaWdobGlnaHQtbGluZSJ9fV0pfWUudXNlRGFya01vZGUmJnRoaXMubW9uYWNvLmVkaXRvci5zZXRUaGVtZShpVCh0aGlzLnVzZURhcmtNb2RlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNvdXJjZS1jb2RlLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlllKFlNZSw3LGJlKSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLmNvZGVWaWV3ZXJDb250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e2xpbmVzOiJsaW5lcyIsZm9jdXNlZExpbmVubzoiZm9jdXNlZExpbmVubyIsbW9uYWNvOiJtb25hY28iLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbImRldGVjdFJlc2l6ZSIsIiIsMSwiY29kZS12aWV3ZXItY29udGFpbmVyIiwzLCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsIm9uUmVzaXplIl0sWyJjb2RlVmlld2VyQ29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDAsMSksRCgib25SZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemUoKX0pLGcoKSksMiZlJiZfKCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsaS5SRVNJWkVfREVCT1VOQ0VfSU5URVJWQUxfTVMpfSxkZXBlbmRlbmNpZXM6W3FmXSxzdHlsZXM6WyIuY29kZS12aWV3ZXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICAgLmhpZ2hsaWdodC1ndXR0ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTExLCAwLCAwLjcpO1xuICB3aWR0aDogNXB4ICFpbXBvcnRhbnQ7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgIC5oaWdobGlnaHQtbGluZSB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxMTEsIDAsIDAuMyk7XG59Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxMWD0oKCk9PntjbGFzcyBue25nT25Jbml0KCl7dGhpcy5tb25hY28kPW5vKFVMX2xvYWRNb25hY28oKSkucGlwZShVKCgpPT53aW5kb3cubW9uYWNvKSl9Y29uc3RydWN0b3IoKXt0aGlzLmxpbmVzPW51bGwsdGhpcy5mb2N1c2VkTGluZW5vPW51bGwsdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLm1vbmFjbyQ9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWNvZGUiXV0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGRlY2xzOjIsdmFyczo2LGNvbnN0czpbWzMsImxpbmVzIiwiZm9jdXNlZExpbmVubyIsIm1vbmFjbyIsInVzZURhcmtNb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJzb3VyY2UtY29kZS1jb21wb25lbnQiLDApLEcoMSwiYXN5bmMiKSksMiZlJiZfKCJsaW5lcyIsaS5saW5lcykoImZvY3VzZWRMaW5lbm8iLGkuZm9jdXNlZExpbmVubykoIm1vbmFjbyIsVygxLDQsaS5tb25hY28kKSkoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKX0sZGVwZW5kZW5jaWVzOltGWCxsdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gWk1lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDYpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTtiKDEpLHplKCIgIixlLmZvY3VzZWRTb3VyY2VMaW5lU3BlYy5maWxlX3BhdGgsIiAiKX19ZnVuY3Rpb24gS01lKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDcpLFQoMSwiIE5vIGZpbGUgc2VsZWN0ZWQuIENsaWNrIGEgbGluZSBudW1iZXIgaW4gdGhlIFN0YWNrIFRyYWNlIHNlY3Rpb24gdG8gc2hvdyB0aGUgc291cmNlIGNvZGUuICIpLGcoKSl9ZnVuY3Rpb24gSk1lKG4sdCl7aWYoMSZuJiZQKDAsInNvdXJjZS1jb2RlIiw4KSwyJm4pe2xldCBlPXcoKTtfKCJsaW5lcyIsZS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpKCJmb2N1c2VkTGluZW5vIixlLmZvY3VzZWRTb3VyY2VMaW5lU3BlYy5saW5lbm8pKCJ1c2VEYXJrTW9kZSIsZS51c2VEYXJrTW9kZSl9fXZhciBOWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQ9bnVsbCx0aGlzLmZvY3VzZWRTb3VyY2VMaW5lU3BlYz1udWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtZmlsZXMtY29tcG9uZW50Il1dLGlucHV0czp7Zm9jdXNlZFNvdXJjZUZpbGVDb250ZW50OiJmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQiLGZvY3VzZWRTb3VyY2VMaW5lU3BlYzoiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxkZWNsczo4LHZhcnM6Myxjb25zdHM6W1sxLCJzb3VyY2UtZmlsZXMtY29udGFpbmVyIl0sWzEsImhlYWRlci1zZWN0aW9uIl0sWzEsInRpdGxlLXRhZyJdLFsiY2xhc3MiLCJmaWxlLWxhYmVsIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vRmlsZVNlbGVjdGVkIiwiIl0sWzMsImxpbmVzIiwiZm9jdXNlZExpbmVubyIsInVzZURhcmtNb2RlIiw0LCJuZ0lmIl0sWzEsImZpbGUtbGFiZWwiXSxbMSwibm8tZmlsZS1zZWxlY3RlZCJdLFszLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImRpdiIsMiksVCgzLCJTb3VyY2UgQ29kZSIpLGcoKSxTKDQsWk1lLDIsMSwiZGl2IiwzKSxTKDUsS01lLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxadCksZygpLFMoNyxKTWUsMSwzLCJzb3VyY2UtY29kZSIsNSksZygpKSwyJmUpe2xldCByPXR0KDYpO2IoNCksXygibmdJZiIsbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUxpbmVTcGVjKSgibmdJZkVsc2UiLHIpLGIoMyksXygibmdJZiIsbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50JiZudWxsIT09aS5mb2N1c2VkU291cmNlTGluZVNwZWMmJm51bGwhPT1pLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudC5saW5lcyl9fSxkZXBlbmRlbmNpZXM6W0ZlLExYXSxzdHlsZXM6WycuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDoyNHB4O3BhZGRpbmctYm90dG9tOjZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWxlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO292ZXJmbG93LXdyYXA6YW55d2hlcmU7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MCAyMHB4fS5uby1maWxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojNjY2O3BhZGRpbmc6MCAyMHB4O3doaXRlLXNwYWNlOm5vcm1hbH0uc291cmNlLWZpbGVzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTAwJX0udGl0bGUtdGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpib2xkO2hlaWdodDoxMDAlO3BhZGRpbmctbGVmdDo2cHg7dmVydGljYWwtYWxpZ246dG9wfXNvdXJjZS1jb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfSddfSksbn0pKCksQlg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkPXRoaXMuc3RvcmUuc2VsZWN0KCRFKSx0aGlzLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQ9dGhpcy5zdG9yZS5zZWxlY3QoZVQpLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KEVsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQiLCJmb2N1c2VkU291cmNlTGluZVNwZWMiLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwic291cmNlLWZpbGVzLWNvbXBvbmVudCIsMCksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSxHKDMsImFzeW5jIikpLDImZSYmXygiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IixXKDEsMyxpLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQpKSgiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIixXKDIsNSxpLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQpKSgidXNlRGFya01vZGUiLFcoMyw3LGkudXNlRGFya01vZGUkKSl9LGRlcGVuZGVuY2llczpbTlgsbHRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHR3ZT1bInN0YWNrRnJhbWVBcnJheSJdO2Z1bmN0aW9uIG53ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMTMpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMyk7YigxKSx6ZSgiICMiLGUuZXhlY3V0aW9uSW5kZXgsIjogIil9fWZ1bmN0aW9uIGl3ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMTQpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMyk7YigxKSx6ZSgiICIsZS5vcFR5cGUsIiAiKX19ZnVuY3Rpb24gcndlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiKSxUKDEsIiBFYWdlciBleGVjdXRpb24gIiksUygyLG53ZSwyLDEsInNwYW4iLDExKSxTKDMsaXdlLDIsMSwic3BhbiIsMTIpLGcoKSksMiZuKXtsZXQgZT13KDIpO2IoMiksXygibmdJZiIsbnVsbCE9PWUub3BUeXBlKSxiKDEpLF8oIm5nSWYiLG51bGwhPT1lLm9wVHlwZSl9fWZ1bmN0aW9uIG93ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMTYpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMyk7YigxKSx6ZSgnICInLGUub3BOYW1lLCciICcpfX1mdW5jdGlvbiBhd2Uobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDE0KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDMpO2IoMSksemUoIiAiLGUub3BUeXBlLCIgIil9fWZ1bmN0aW9uIHN3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiksVCgxLCIgQ3JlYXRpb24gb2YgZ3JhcGggb3AgIiksUygyLG93ZSwyLDEsInNwYW4iLDE1KSxTKDMsYXdlLDIsMSwic3BhbiIsMTIpLGcoKSksMiZuKXtsZXQgZT13KDIpO2IoMiksXygibmdJZiIsbnVsbCE9PWUub3BOYW1lKSxiKDEpLF8oIm5nSWYiLG51bGwhPT1lLm9wVHlwZSl9fWZ1bmN0aW9uIGx3ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMTcpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMik7YigxKSx6ZSgiIChIb3N0IG5hbWU6ICIsZS5zdGFja0ZyYW1lc0ZvckRpc3BsYXlbMF0uaG9zdF9uYW1lLCIpICIpfX1mdW5jdGlvbiBjd2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsNykoMSwic3BhbiIpKDIsInNwYW4iLDgpLFMoMyxyd2UsNCwyLCJkaXYiLDkpLFMoNCxzd2UsNCwyLCJkaXYiLDkpLGcoKSgpLGgoNSwiZGl2IiksUyg2LGx3ZSwyLDEsInNwYW4iLDEwKSxnKCkoKSksMiZuKXtsZXQgZT13KCk7YigyKSxfKCJuZ1N3aXRjaCIsZS5jb2RlTG9jYXRpb25UeXBlKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsZS5Db2RlTG9jYXRpb25UeXBlLkVYRUNVVElPTiksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuQ29kZUxvY2F0aW9uVHlwZS5HUkFQSF9PUF9DUkVBVElPTiksYigyKSxfKCJuZ0lmIixudWxsIT09ZS5zdGFja0ZyYW1lc0ZvckRpc3BsYXkmJmUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5Lmxlbmd0aD4wKX19ZnVuY3Rpb24gZHdlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDE4KSxUKDEsIiBDbGljayBhbiBlYWdlciBleGVjdXRpb24gb3IgZ3JhcGggb3AgdG8gc2hvdyBpdHMgb3JpZ2luYWwgc3RhY2sgdHJhY2UuICIpLGcoKSl9ZnVuY3Rpb24gdXdlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI4KSxUKDEsIiBcdTI5MTMgIiksZygpKX12YXIgcHdlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuW24sdF19O2Z1bmN0aW9uIGZ3ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMjIpKDEsImRpdiIsMjMpLFQoMiksZygpLGgoMywiZGl2IiwyNCksUyg0LHV3ZSwyLDAsImRpdiIsMjUpLGgoNSwiZGl2IiwyNiksRCgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5vblNvdXJjZUxpbmVDbGlja2VkLmVtaXQobykpfSksVCg2KSxnKCksaCg3LCJkaXYiLDI3KSxUKDgpLGcoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMik7XygibmdDbGFzcyIsUHIoNixwd2UsZS5iZWxvbmdzVG9Gb2N1c2VkRmlsZT8iZm9jdXNlZC1maWxlIjoiIixlLmZvY3VzZWQ/ImZvY3VzZWQtc3RhY2stZnJhbWUiOiIiKSksYigxKSxKaSgidGl0bGUiLGUuZmlsZV9wYXRoKSxiKDEpLHplKCIgIixlLmNvbmNpc2VfZmlsZV9wYXRoLCIgIiksYigyKSxfKCJuZ0lmIixpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJiZlLmZvY3VzZWQpLGIoMiksemUoIiBMaW5lICIsZS5saW5lbm8sIiAiKSxiKDIpLHplKCIgIixlLmZ1bmN0aW9uX25hbWUsIiAiKX19ZnVuY3Rpb24gbXdlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDE5LDIwKSxTKDIsZndlLDksOSwiZGl2IiwyMSksZygpKSwyJm4pe2xldCBlPXcoKTtiKDIpLF8oIm5nRm9yT2YiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KX19ZnVuY3Rpb24gaHdlKG4sdCl7fXZhciBWWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFja0ZyYW1lc0ZvckRpc3BsYXk9bnVsbCx0aGlzLm9uU291cmNlTGluZUNsaWNrZWQ9bmV3IEwsdGhpcy5Db2RlTG9jYXRpb25UeXBlPUJvfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2lmKHZvaWQgMD09PXRoaXMuc3RhY2tGcmFtZUFycmF5KXJldHVybjtsZXQgZT10aGlzLnN0YWNrRnJhbWVBcnJheS5uYXRpdmVFbGVtZW50LGk9ZS5xdWVyeVNlbGVjdG9yKCIuZm9jdXNlZC1zdGFjay1mcmFtZSIpO2lmKG51bGwhPT1pKXJldHVybiB2b2lkIHRoaXMuc2Nyb2xsVG9FbGVtZW50KGUsaSk7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuc3RhY2stZnJhbWUtY29udGFpbmVyOmxhc3QtY2hpbGQiKTtudWxsIT09ciYmdGhpcy5zY3JvbGxUb0VsZW1lbnQoZSxyKX1zY3JvbGxUb0VsZW1lbnQoZSxpKXtlLnNjcm9sbFRvcD1pLm9mZnNldFRvcH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic3RhY2stdHJhY2UtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmWWUodHdlLDUpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkuc3RhY2tGcmFtZUFycmF5PXIuZmlyc3QpfX0saW5wdXRzOntjb2RlTG9jYXRpb25UeXBlOiJjb2RlTG9jYXRpb25UeXBlIixvcFR5cGU6Im9wVHlwZSIsb3BOYW1lOiJvcE5hbWUiLGV4ZWN1dGlvbkluZGV4OiJleGVjdXRpb25JbmRleCIsc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU6InN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlIixzdGFja0ZyYW1lc0ZvckRpc3BsYXk6InN0YWNrRnJhbWVzRm9yRGlzcGxheSJ9LG91dHB1dHM6e29uU291cmNlTGluZUNsaWNrZWQ6Im9uU291cmNlTGluZUNsaWNrZWQifSxkZWNsczoxMCx2YXJzOjQsY29uc3RzOltbMSwic3RhY2stdHJhY2UtY29udGFpbmVyIl0sWzEsInN0YWNrLXRyYWNlLWhlYWRlciJdLFsxLCJzdGFjay10cmFjZS10aXRsZSJdLFsiY2xhc3MiLCJzdGFjay10cmFjZS1hdXgtaW5mbyIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub1N0YWNrVHJhY2UiLCIiXSxbImNsYXNzIiwic3RhY2stZnJhbWUtYXJyYXkiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibG9hZGluZ1NlY3Rpb24iLCIiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iXSxbMSwiY29kZS1sb2NhdGlvbi1vcmlnaW4iLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiZWFnZXItZXhlY3V0aW9uLWluZGV4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wLXR5cGUiLDQsIm5nSWYiXSxbMSwiZWFnZXItZXhlY3V0aW9uLWluZGV4Il0sWzEsIm9wLXR5cGUiXSxbImNsYXNzIiwib3AtbmFtZSIsNCwibmdJZiJdLFsxLCJvcC1uYW1lIl0sWzEsInN0YWNrLXRyYWNlLWhvc3QtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1hdXgtaW5mbyIsIm5vLXN0YWNrLXRyYWNlIl0sWzEsInN0YWNrLWZyYW1lLWFycmF5Il0sWyJzdGFja0ZyYW1lQXJyYXkiLCIiXSxbImNsYXNzIiwic3RhY2stZnJhbWUtY29udGFpbmVyIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwic3RhY2stZnJhbWUtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsInN0YWNrLWZyYW1lLWZpbGUtcGF0aCIsMywidGl0bGUiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vLWZ1bmN0aW9uIl0sWyJjbGFzcyIsInN0aWNrLXRvLWJvdHRvbW1vc3QtaW5kaWNhdG9yIiwidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsNCwibmdJZiJdLFsxLCJzdGFjay1mcmFtZS1saW5lbm8iLDMsImNsaWNrIl0sWzEsInN0YWNrLWZyYW1lLWZ1bmN0aW9uIl0sWyJ0aXRsZSIsIlN0aWNraW5nIHRvIHRoZSBib3R0b21tb3N0IGZyYW1lIGluIHRoZSBjdXJyZW50IHNvdXJjZSBmaWxlIHdoZW4gbmF2aWdhdGluZyBleGVjdXRpb25zIGFuZCBncmFwaCBvcHMuIFRvIHJlbW92ZSB0aGlzIHN0aWNraW5nLCBjbGljayBhbnkgbm9uLWJvdHRvbW1vc3Qgc3RhY2sgZnJhbWUuIiwxLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsInNwYW4iLDIpLFQoMywiIFN0YWNrIFRyYWNlICIpLGcoKSxTKDQsY3dlLDcsNCwiZGl2IiwzKSxTKDUsZHdlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxadCksZygpLFMoNyxtd2UsMywxLCJkaXYiLDUpLFMoOCxod2UsMCwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LFp0KSxnKCkpLDImZSl7bGV0IHI9dHQoNiksbz10dCg5KTtiKDQpLF8oIm5nSWYiLG51bGwhPT1pLmNvZGVMb2NhdGlvblR5cGUpKCJuZ0lmRWxzZSIsciksYigzKSxfKCJuZ0lmIixudWxsIT09aS5zdGFja0ZyYW1lc0ZvckRpc3BsYXkpKCJuZ0lmRWxzZSIsbyl9fSxkZXBlbmRlbmNpZXM6W2JuLGRuLEZlLCRpLHNyXSxzdHlsZXM6WycuZm9jdXNlZC1maWxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkfS5mb2N1c2VkLXN0YWNrLWZyYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMSwwLC4zKX0ubm8tc3RhY2stdHJhY2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXl9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDphbnl3aGVyZX0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zdGFjay1mcmFtZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpZHRoOmNhbGMoMTAwJSAtIDhweCl9LnN0YWNrLWZyYW1lLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2EwYTBhMH0uc3RhY2stZnJhbWUtZmlsZS1wYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6MTgwcHg7d2lkdGg6MTgwcHh9LnN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YWNrLWZyYW1lLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MjAwcHg7cGFkZGluZy1sZWZ0OjEwcHg7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDoyMDBweDt3b3JkLXdyYXA6YW55d2hlcmV9LnN0YWNrLWZyYW1lLWxpbmVub1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjgwcHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2lkdGg6ODBweH0uc3RhY2stdHJhY2UtYXV4LWluZm9bX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTVweDtwYWRkaW5nLWxlZnQ6MjRweH0uc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW47Zm9udC1zaXplOjEwcHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7aGVpZ2h0OjEwMCU7bWFyZ2luLWxlZnQ6OHB4O21heC1oZWlnaHQ6MzYwcHg7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTpoaWRkZW47cGFkZGluZy1sZWZ0OjhweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGFjay10cmFjZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uc3RhY2stdHJhY2UtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgNXB4IDNweCAtM3B4ICNjY2M7cGFkZGluZy1ib3R0b206M3B4fS5zdGFjay10cmFjZS1ob3N0LW5hbWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXl9LnN0YWNrLXRyYWNlLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkfS5zdGljay10by1ib3R0b21tb3N0LWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTJweDtwYWRkaW5nLXJpZ2h0OjNweH0nXX0pLG59KSgpLEhYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY29kZUxvY2F0aW9uVHlwZSQ9dGhpcy5zdG9yZS5waXBlKHBuKHEodnYsaT0+bnVsbD09PWk/bnVsbDppLmNvZGVMb2NhdGlvblR5cGUpKSksdGhpcy5vcFR5cGUkPXRoaXMuc3RvcmUucGlwZShwbihxKHZ2LGk9Pm51bGw9PT1pP251bGw6aS5vcFR5cGUpKSksdGhpcy5vcE5hbWUkPXRoaXMuc3RvcmUucGlwZShwbihxKHZ2LGk9Pm51bGw9PT1pfHxpLmNvZGVMb2NhdGlvblR5cGUhPT1Cby5HUkFQSF9PUF9DUkVBVElPTj9udWxsOmkub3BOYW1lKSkpLHRoaXMuZXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZShwbihxKHZ2LGk9Pm51bGw9PT1pfHxpLmNvZGVMb2NhdGlvblR5cGUhPT1Cby5FWEVDVVRJT04/bnVsbDppLmV4ZWN1dGlvbkluZGV4KSkpLHRoaXMuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkPXRoaXMuc3RvcmUucGlwZShwbih5WCkpLHRoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JD10aGlzLnN0b3JlLnBpcGUocG4ocShnWCxlVCwoaSxyKT0+e2lmKG51bGw9PT1pKXJldHVybiBudWxsO2xldCBvPVtdO2ZvcihsZXQgYSBvZiBpKXtsZXR7aG9zdF9uYW1lOnMsZmlsZV9wYXRoOmwsbGluZW5vOmMsZnVuY3Rpb25fbmFtZTpkfT1hLHU9bC5zcGxpdCgiLyIpLGY9bnVsbCE9PXImJnM9PT1yLmhvc3RfbmFtZSYmbD09PXIuZmlsZV9wYXRoO28ucHVzaCh7aG9zdF9uYW1lOnMsZmlsZV9wYXRoOmwsY29uY2lzZV9maWxlX3BhdGg6dVt1Lmxlbmd0aC0xXSxsaW5lbm86YyxmdW5jdGlvbl9uYW1lOmQsYmVsb25nc1RvRm9jdXNlZEZpbGU6Zixmb2N1c2VkOmYmJmM9PT1yLmxpbmVub30pfXJldHVybiBvfSkpKX1vblNvdXJjZUxpbmVDbGlja2VkKGUpe2xldHtob3N0X25hbWU6aSxmaWxlX3BhdGg6cixsaW5lbm86byxmdW5jdGlvbl9uYW1lOmF9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChxZyh7c3RhY2tGcmFtZTp7aG9zdF9uYW1lOmksZmlsZV9wYXRoOnIsbGluZW5vOm8sZnVuY3Rpb25fbmFtZTphfX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLXN0YWNrLXRyYWNlIl1dLGRlY2xzOjcsdmFyczoxOCxjb25zdHM6W1szLCJjb2RlTG9jYXRpb25UeXBlIiwib3BUeXBlIiwib3BOYW1lIiwiZXhlY3V0aW9uSW5kZXgiLCJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsInN0YWNrRnJhbWVzRm9yRGlzcGxheSIsIm9uU291cmNlTGluZUNsaWNrZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInN0YWNrLXRyYWNlLWNvbXBvbmVudCIsMCksRCgib25Tb3VyY2VMaW5lQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Tb3VyY2VMaW5lQ2xpY2tlZChvKX0pLEcoMSwiYXN5bmMiKSxHKDIsImFzeW5jIiksRygzLCJhc3luYyIpLEcoNCwiYXN5bmMiKSxHKDUsImFzeW5jIiksRyg2LCJhc3luYyIpLGcoKSksMiZlJiZfKCJjb2RlTG9jYXRpb25UeXBlIixXKDEsNixpLmNvZGVMb2NhdGlvblR5cGUkKSkoIm9wVHlwZSIsVygyLDgsaS5vcFR5cGUkKSkoIm9wTmFtZSIsVygzLDEwLGkub3BOYW1lJCkpKCJleGVjdXRpb25JbmRleCIsVyg0LDEyLGkuZXhlY3V0aW9uSW5kZXgkKSkoInN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlIixXKDUsMTQsaS5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSQpKSgic3RhY2tGcmFtZXNGb3JEaXNwbGF5IixXKDYsMTYsaS5zdGFja0ZyYW1lc0ZvckRpc3BsYXkkKSl9LGRlcGVuZGVuY2llczpbVlgsbHRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHl3ZT1mdW5jdGlvbihuLHQpe3JldHVybnt0ZW5zb3JEZWJ1Z01vZGU6bixhcnJheTp0fX07ZnVuY3Rpb24gYndlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxUKDIpLGcoKSxoKDMsImRpdiIsMTQpLFAoNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNSksZygpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9dygzKTtiKDIpLHplKCJPdXRwdXQgc2xvdCAiLGksIjoiKSxiKDIpLF8oImRlYnVnVGVuc29yVmFsdWUiLHIucGFyc2VEZWJ1Z1RlbnNvclZhbHVlKFByKDIseXdlLHIudGVuc29yRGVidWdNb2RlLGUpKSl9fWZ1bmN0aW9uIHZ3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxMCksUygxLGJ3ZSw1LDUsImRpdiIsMTEpLGcoKSksMiZuKXtsZXQgZT13KDIpO2IoMSksXygibmdGb3JPZiIsZS5kZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uIHh3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IikoMSwiZGl2IikoMiwiZGl2IiwzKSgzLCJzcGFuIiw0KSxUKDQsIiBPcDogIiksZygpLGgoNSwic3BhbiIsNSksVCg2KSxnKCkoKSxoKDcsImRpdiIsMykoOCwic3BhbiIsNCksVCg5LCIgIyBvZiBpbnB1dCB0ZW5zb3JzOiAiKSxnKCksaCgxMCwic3BhbiIsNiksVCgxMSksZygpKCksaCgxMiwiZGl2IiwzKSgxMywic3BhbiIsNCksVCgxNCwiICMgb2Ygb3V0cHV0IHRlbnNvcnM6ICIpLGcoKSxoKDE1LCJzcGFuIiw3KSxUKDE2KSxnKCksaCgxNywic3BhbiIsOCksVCgxOCksZygpKCksUygxOSx2d2UsMiwxLCJkaXYiLDkpLGcoKSgpKSwyJm4pe2xldCBlPXcoKTtiKDYpLHplKCIgIixlLmZvY3VzZWRFeGVjdXRpb25EYXRhLm9wX3R5cGUsIiAiKSxiKDUpLHplKCIgIixudWxsPT1lLmZvY3VzZWRFeGVjdXRpb25EYXRhLmlucHV0X3RlbnNvcl9pZHM/MDplLmZvY3VzZWRFeGVjdXRpb25EYXRhLmlucHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIiksYig1KSx6ZSgiICIsbnVsbD09ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcz8wOmUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3V0cHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIiksYigyKSx6ZSgiIChkZWJ1ZyBtb2RlOiAiLGUuVGVuc29yRGVidWdNb2RlW2UudGVuc29yRGVidWdNb2RlXSwiKSAiKSxiKDEpLF8oIm5nSWYiLGUuaGFzRGVidWdUZW5zb3JWYWx1ZXMpfX1mdW5jdGlvbiBDd2Uobix0KXt9dmFyIHpYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRlbnNvckRlYnVnTW9kZT1Fby5VTlNQRUNJRklFRCx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzPSExLHRoaXMuZGVidWdUZW5zb3JWYWx1ZXM9bnVsbCx0aGlzLmRlYnVnVGVuc29yRHR5cGVzPW51bGwsdGhpcy5UZW5zb3JEZWJ1Z01vZGU9RW8sdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9dFR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLHRlbnNvckRlYnVnTW9kZToidGVuc29yRGVidWdNb2RlIixoYXNEZWJ1Z1RlbnNvclZhbHVlczoiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yVmFsdWVzOiJkZWJ1Z1RlbnNvclZhbHVlcyIsZGVidWdUZW5zb3JEdHlwZXM6ImRlYnVnVGVuc29yRHR5cGVzIn0sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwiZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdfc2VjdGlvbiIsIiJdLFsxLCJleGVjdXRpb24tZGF0YS1maWVsZCJdLFsxLCJleGVjdXRpb24tZGF0YS1rZXkiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvcC10eXBlIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwiaW5wdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsIm91dHB1dC10ZW5zb3JzIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90cyIsNCwibmdJZiJdLFsxLCJvdXRwdXQtc2xvdHMiXSxbImNsYXNzIiwib3V0cHV0LXNsb3QtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3V0cHV0LXNsb3QtY29udGFpbmVyIl0sWzEsIm91dHB1dC1zbG90LW51bWJlciJdLFsxLCJvdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiKSgyLCJzcGFuIiksVCgzKSxnKCkoKSxTKDQseHdlLDIwLDUsImRpdiIsMSksUyg1LEN3ZSwwLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsWnQpLGcoKSksMiZlKXtsZXQgcj10dCg2KTtiKDMpLHplKCIgUHl0aG9uIEV4ZWN1dGlvbiAjIixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCwiICIpLGIoMSksXygibmdJZiIsbnVsbCE9PWkuZm9jdXNlZEV4ZWN1dGlvbkRhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W2RuLEZlLG5UXSxzdHlsZXM6WycuZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMDt0ZXh0LWFsaWduOmxlZnR9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZXhlY3V0aW9uLWRhdGEtZmllbGRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZXhlY3V0aW9uLWRhdGEta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoxMjBweH0uZXhlY3V0aW9uLWRhdGEtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjEwcHh9LmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmY2M4MDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtoZWlnaHQ6MTIwcHg7cGFkZGluZzo1cHg7d2lkdGg6MzYwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5vdXRwdXQtc2xvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo2MHB4O292ZXJmbG93LXg6YXV0bztvdmVyZmxvdy15OmF1dG99Lm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjJweCAwO3ZlcnRpY2FsLWFsaWduOnRvcH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3V0cHV0LXNsb3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0ub3V0cHV0LXNsb3QtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlfS5vdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjNweCAwIDNweCAzMHB4fS5vdXRwdXQtdGVuc29yc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1cHh9J119KSxufSkoKSxVWD0iVW5rbm93biBkdHlwZSIsalg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKHBuKFdmKSksdGhpcy50ZW5zb3JEZWJ1Z01vZGUkPXRoaXMuc3RvcmUucGlwZShwbihxKFdmLGk9Pm51bGw9PT1pP0VvLlVOU1BFQ0lGSUVEOmkudGVuc29yX2RlYnVnX21vZGUpKSksdGhpcy5oYXNEZWJ1Z1RlbnNvclZhbHVlcyQ9dGhpcy5zdG9yZS5waXBlKHBuKHEoV2YsaT0+e2lmKG51bGw9PT1pfHxudWxsPT09aS5kZWJ1Z190ZW5zb3JfdmFsdWVzKXJldHVybiExO2ZvcihsZXQgciBvZiBpLmRlYnVnX3RlbnNvcl92YWx1ZXMpaWYobnVsbCE9PXImJnIubGVuZ3RoPjApcmV0dXJuITA7cmV0dXJuITF9KSkpLHRoaXMuZGVidWdUZW5zb3JWYWx1ZXMkPXRoaXMuc3RvcmUucGlwZShwbihxKFdmLGk9Pm51bGw9PT1pP251bGw6aS5kZWJ1Z190ZW5zb3JfdmFsdWVzKSkpLHRoaXMuZGVidWdUZW5zb3JEdHlwZXMkPXRoaXMuc3RvcmUucGlwZShwbihxKFdmLGk9PntpZihudWxsPT09aXx8bnVsbD09PWkuZGVidWdfdGVuc29yX3ZhbHVlc3x8aS50ZW5zb3JfZGVidWdfbW9kZSE9PUVvLkZVTExfSEVBTFRIJiZpLnRlbnNvcl9kZWJ1Z19tb2RlIT09RW8uU0hBUEUpcmV0dXJuIG51bGw7bGV0IHI9W107Zm9yKGxldCBvIG9mIGkuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsPT09bylyLnB1c2goVVgpO2Vsc2V7bGV0IGE9U3RyaW5nKGkudGVuc29yX2RlYnVnX21vZGU9PT1Fby5GVUxMX0hFQUxUSD9vWzJdOm9bMV0pO3IucHVzaCh4dlthXXx8VVgpfXJldHVybiByfSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIl1dLGlucHV0czp7Zm9jdXNlZEV4ZWN1dGlvbkluZGV4OiJmb2N1c2VkRXhlY3V0aW9uSW5kZXgifSxkZWNsczo2LHZhcnM6MTYsY29uc3RzOltbMywiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IiwiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLCJ0ZW5zb3JEZWJ1Z01vZGUiLCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsImRlYnVnVGVuc29yVmFsdWVzIiwiZGVidWdUZW5zb3JEdHlwZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCIsMCksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSxHKDMsImFzeW5jIiksRyg0LCJhc3luYyIpLEcoNSwiYXN5bmMiKSksMiZlJiZfKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KSgiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLFcoMSw2LGkuZm9jdXNlZEV4ZWN1dGlvbkRhdGEkKSkoInRlbnNvckRlYnVnTW9kZSIsVygyLDgsaS50ZW5zb3JEZWJ1Z01vZGUkKSkoImhhc0RlYnVnVGVuc29yVmFsdWVzIixXKDMsMTAsaS5oYXNEZWJ1Z1RlbnNvclZhbHVlcyQpKSgiZGVidWdUZW5zb3JWYWx1ZXMiLFcoNCwxMixpLmRlYnVnVGVuc29yVmFsdWVzJCkpKCJkZWJ1Z1RlbnNvckR0eXBlcyIsVyg1LDE0LGkuZGVidWdUZW5zb3JEdHlwZXMkKSl9LGRlcGVuZGVuY2llczpbelgsbHRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFN3ZT1bInNsaWRlcldyYXBwZXIiXSxacz1Zbyh7cGFzc2l2ZTohMX0pLEF3ZT17cHJvdmlkZTpIcix1c2VFeGlzdGluZzpWbigoKT0+VGQpLG11bHRpOiEwfSxSd2U9dmQoZ28oS3IoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pLCJhY2NlbnQiKSksVGQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJ3ZXtnZXQgaW52ZXJ0KCl7cmV0dXJuIHRoaXMuX2ludmVydH1zZXQgaW52ZXJ0KGUpe3RoaXMuX2ludmVydD1VdChlKX1nZXQgbWF4KCl7cmV0dXJuIHRoaXMuX21heH1zZXQgbWF4KGUpe3RoaXMuX21heD1EaShlLHRoaXMuX21heCksdGhpcy5fcGVyY2VudD10aGlzLl9jYWxjdWxhdGVQZXJjZW50YWdlKHRoaXMuX3ZhbHVlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgbWluKCl7cmV0dXJuIHRoaXMuX21pbn1zZXQgbWluKGUpe3RoaXMuX21pbj1EaShlLHRoaXMuX21pbiksdGhpcy5fcGVyY2VudD10aGlzLl9jYWxjdWxhdGVQZXJjZW50YWdlKHRoaXMuX3ZhbHVlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgc3RlcCgpe3JldHVybiB0aGlzLl9zdGVwfXNldCBzdGVwKGUpe3RoaXMuX3N0ZXA9RGkoZSx0aGlzLl9zdGVwKSx0aGlzLl9zdGVwJTEhPTAmJih0aGlzLl9yb3VuZFRvRGVjaW1hbD10aGlzLl9zdGVwLnRvU3RyaW5nKCkuc3BsaXQoIi4iKS5wb3AoKS5sZW5ndGgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCB0aHVtYkxhYmVsKCl7cmV0dXJuIHRoaXMuX3RodW1iTGFiZWx9c2V0IHRodW1iTGFiZWwoZSl7dGhpcy5fdGh1bWJMYWJlbD1VdChlKX1nZXQgdGlja0ludGVydmFsKCl7cmV0dXJuIHRoaXMuX3RpY2tJbnRlcnZhbH1zZXQgdGlja0ludGVydmFsKGUpe3RoaXMuX3RpY2tJbnRlcnZhbD0iYXV0byI9PT1lPyJhdXRvIjoibnVtYmVyIj09dHlwZW9mIGV8fCJzdHJpbmciPT10eXBlb2YgZT9EaShlLHRoaXMuX3RpY2tJbnRlcnZhbCk6MH1nZXQgdmFsdWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3ZhbHVlJiYodGhpcy52YWx1ZT10aGlzLl9taW4pLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShlKXtpZihlIT09dGhpcy5fdmFsdWUpe2xldCBpPURpKGUsMCk7dGhpcy5fcm91bmRUb0RlY2ltYWwmJmkhPT10aGlzLm1pbiYmaSE9PXRoaXMubWF4JiYoaT1wYXJzZUZsb2F0KGkudG9GaXhlZCh0aGlzLl9yb3VuZFRvRGVjaW1hbCkpKSx0aGlzLl92YWx1ZT1pLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9fWdldCB2ZXJ0aWNhbCgpe3JldHVybiB0aGlzLl92ZXJ0aWNhbH1zZXQgdmVydGljYWwoZSl7dGhpcy5fdmVydGljYWw9VXQoZSl9Z2V0IGRpc3BsYXlWYWx1ZSgpe3JldHVybiB0aGlzLmRpc3BsYXlXaXRoP3RoaXMuZGlzcGxheVdpdGgodGhpcy52YWx1ZSk6dGhpcy5fcm91bmRUb0RlY2ltYWwmJnRoaXMudmFsdWUmJnRoaXMudmFsdWUlMSE9MD90aGlzLnZhbHVlLnRvRml4ZWQodGhpcy5fcm91bmRUb0RlY2ltYWwpOnRoaXMudmFsdWV8fDB9Zm9jdXMoZSl7dGhpcy5fZm9jdXNIb3N0RWxlbWVudChlKX1ibHVyKCl7dGhpcy5fYmx1ckhvc3RFbGVtZW50KCl9Z2V0IHBlcmNlbnQoKXtyZXR1cm4gdGhpcy5fY2xhbXAodGhpcy5fcGVyY2VudCl9X3Nob3VsZEludmVydEF4aXMoKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbD8hdGhpcy5pbnZlcnQ6dGhpcy5pbnZlcnR9X2lzTWluVmFsdWUoKXtyZXR1cm4gMD09PXRoaXMucGVyY2VudH1fZ2V0VGh1bWJHYXAoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD83OnRoaXMuX2lzTWluVmFsdWUoKSYmIXRoaXMudGh1bWJMYWJlbD90aGlzLl9pc0FjdGl2ZT8xMDo3OjB9X2dldFRyYWNrQmFja2dyb3VuZFN0eWxlcygpe2xldCBpPXRoaXMudmVydGljYWw/YDEsICR7MS10aGlzLnBlcmNlbnR9LCAxYDoxLXRoaXMucGVyY2VudCsiLCAxLCAxIjtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpPyItIjoiIn0ke3RoaXMuX2dldFRodW1iR2FwKCl9cHgpIHNjYWxlM2QoJHtpfSlgfX1fZ2V0VHJhY2tGaWxsU3R5bGVzKCl7bGV0IGU9dGhpcy5wZXJjZW50LHI9dGhpcy52ZXJ0aWNhbD9gMSwgJHtlfSwgMWA6YCR7ZX0sIDEsIDFgO3JldHVybnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCk/IiI6Ii0ifSR7dGhpcy5fZ2V0VGh1bWJHYXAoKX1weCkgc2NhbGUzZCgke3J9KWAsZGlzcGxheTowPT09ZT8ibm9uZSI6IiJ9fV9nZXRUaWNrc0NvbnRhaW5lclN0eWxlcygpe3JldHVybnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iLSI6IiJ9JHt0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50LzIqMTAwfSUpYH19X2dldFRpY2tzU3R5bGVzKCl7bGV0IGU9MTAwKnRoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQscz17YmFja2dyb3VuZFNpemU6dGhpcy52ZXJ0aWNhbD9gMnB4ICR7ZX0lYDpgJHtlfSUgMnB4YCx0cmFuc2Zvcm06YHRyYW5zbGF0ZVooMCkgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy52ZXJ0aWNhbHx8InJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpPyIiOiItIn0ke2UvMn0lKSR7dGhpcy52ZXJ0aWNhbHx8InJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpPyIiOiIgcm90YXRlKDE4MGRlZykifWB9O2lmKHRoaXMuX2lzTWluVmFsdWUoKSYmdGhpcy5fZ2V0VGh1bWJHYXAoKSl7bGV0IGMsbD10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7Yz10aGlzLnZlcnRpY2FsP2w/IkJvdHRvbSI6IlRvcCI6bD8iUmlnaHQiOiJMZWZ0IixzW2BwYWRkaW5nJHtjfWBdPWAke3RoaXMuX2dldFRodW1iR2FwKCl9cHhgfXJldHVybiBzfV9nZXRUaHVtYkNvbnRhaW5lclN0eWxlcygpe2xldCBlPXRoaXMuX3Nob3VsZEludmVydEF4aXMoKTtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oLSR7MTAwKigoInJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpfHx0aGlzLnZlcnRpY2FsP2U6IWUpP3RoaXMucGVyY2VudDoxLXRoaXMucGVyY2VudCl9JSlgfX1fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKXtsZXQgZT10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJuInJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpfHx0aGlzLnZlcnRpY2FsP2U6IWV9X2dldERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjKXtzdXBlcihlKSx0aGlzLl9mb2N1c01vbml0b3I9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX2Rpcj1vLHRoaXMuX25nWm9uZT1zLHRoaXMuX2FuaW1hdGlvbk1vZGU9Yyx0aGlzLl9pbnZlcnQ9ITEsdGhpcy5fbWF4PTEwMCx0aGlzLl9taW49MCx0aGlzLl9zdGVwPTEsdGhpcy5fdGh1bWJMYWJlbD0hMSx0aGlzLl90aWNrSW50ZXJ2YWw9MCx0aGlzLl92YWx1ZT1udWxsLHRoaXMuX3ZlcnRpY2FsPSExLHRoaXMuY2hhbmdlPW5ldyBMLHRoaXMuaW5wdXQ9bmV3IEwsdGhpcy52YWx1ZUNoYW5nZT1uZXcgTCx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5fcGVyY2VudD0wLHRoaXMuX2lzU2xpZGluZz1udWxsLHRoaXMuX2lzQWN0aXZlPSExLHRoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9MCx0aGlzLl9zbGlkZXJEaW1lbnNpb25zPW51bGwsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj0oKT0+e30sdGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uPXluLkVNUFRZLHRoaXMuX3BvaW50ZXJEb3duPWQ9Pnt0aGlzLmRpc2FibGVkfHx0aGlzLl9pc1NsaWRpbmd8fCFDdihkKSYmMCE9PWQuYnV0dG9ufHx0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5fdG91Y2hJZD1DdihkKT9mdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8bi50b3VjaGVzLmxlbmd0aDtlKyspe2xldCBpPW4udG91Y2hlc1tlXS50YXJnZXQ7aWYodD09PWl8fHQuY29udGFpbnMoaSkpcmV0dXJuIG4udG91Y2hlc1tlXS5pZGVudGlmaWVyfX0oZCx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpOnZvaWQgMDtsZXQgdT1XWChkLHRoaXMuX3RvdWNoSWQpO2lmKHUpe2xldCBwPXRoaXMudmFsdWU7dGhpcy5faXNTbGlkaW5nPSJwb2ludGVyIix0aGlzLl9sYXN0UG9pbnRlckV2ZW50PWQsdGhpcy5fZm9jdXNIb3N0RWxlbWVudCgpLHRoaXMuX29uTW91c2VlbnRlcigpLHRoaXMuX2JpbmRHbG9iYWxFdmVudHMoZCksdGhpcy5fZm9jdXNIb3N0RWxlbWVudCgpLHRoaXMuX3VwZGF0ZVZhbHVlRnJvbVBvc2l0aW9uKHUpLHRoaXMuX3ZhbHVlT25TbGlkZVN0YXJ0PXAsZC5jYW5jZWxhYmxlJiZkLnByZXZlbnREZWZhdWx0KCkscCE9dGhpcy52YWx1ZSYmdGhpcy5fZW1pdElucHV0RXZlbnQoKX19KX0sdGhpcy5fcG9pbnRlck1vdmU9ZD0+e2lmKCJwb2ludGVyIj09PXRoaXMuX2lzU2xpZGluZyl7bGV0IHU9V1goZCx0aGlzLl90b3VjaElkKTtpZih1KXtkLmNhbmNlbGFibGUmJmQucHJldmVudERlZmF1bHQoKTtsZXQgcD10aGlzLnZhbHVlO3RoaXMuX2xhc3RQb2ludGVyRXZlbnQ9ZCx0aGlzLl91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbih1KSxwIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX19LHRoaXMuX3BvaW50ZXJVcD1kPT57InBvaW50ZXIiPT09dGhpcy5faXNTbGlkaW5nJiYoIUN2KGQpfHwibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3RvdWNoSWR8fEdMKGQuY2hhbmdlZFRvdWNoZXMsdGhpcy5fdG91Y2hJZCkpJiYoZC5jYW5jZWxhYmxlJiZkLnByZXZlbnREZWZhdWx0KCksdGhpcy5fcmVtb3ZlR2xvYmFsRXZlbnRzKCksdGhpcy5faXNTbGlkaW5nPW51bGwsdGhpcy5fdG91Y2hJZD12b2lkIDAsdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQhPXRoaXMudmFsdWUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD10aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwpfSx0aGlzLl93aW5kb3dCbHVyPSgpPT57dGhpcy5fbGFzdFBvaW50ZXJFdmVudCYmdGhpcy5fcG9pbnRlclVwKHRoaXMuX2xhc3RQb2ludGVyRXZlbnQpfSx0aGlzLl9kb2N1bWVudD1sLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQoYSl8fDAscy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCBkPWUubmF0aXZlRWxlbWVudDtkLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sWnMpLGQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sWnMpfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKGU9Pnt0aGlzLl9pc0FjdGl2ZT0hIWUmJiJrZXlib2FyZCIhPT1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX0pLHRoaXMuX2RpciYmKHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj10aGlzLl9kaXIuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixacyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixacyksdGhpcy5fbGFzdFBvaW50ZXJFdmVudD1udWxsLHRoaXMuX3JlbW92ZUdsb2JhbEV2ZW50cygpLHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fb25Nb3VzZWVudGVyKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NsaWRlckRpbWVuc2lvbnM9dGhpcy5fZ2V0U2xpZGVyRGltZW5zaW9ucygpLHRoaXMuX3VwZGF0ZVRpY2tJbnRlcnZhbFBlcmNlbnQoKSl9X29uRm9jdXMoKXt0aGlzLl9zbGlkZXJEaW1lbnNpb25zPXRoaXMuX2dldFNsaWRlckRpbWVuc2lvbnMoKSx0aGlzLl91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCl9X29uQmx1cigpe3RoaXMub25Ub3VjaGVkKCl9X29uS2V5ZG93bihlKXtpZih0aGlzLmRpc2FibGVkfHx5cihlKXx8dGhpcy5faXNTbGlkaW5nJiYia2V5Ym9hcmQiIT09dGhpcy5faXNTbGlkaW5nKXJldHVybjtsZXQgaT10aGlzLnZhbHVlO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgMzM6dGhpcy5faW5jcmVtZW50KDEwKTticmVhaztjYXNlIDM0OnRoaXMuX2luY3JlbWVudCgtMTApO2JyZWFrO2Nhc2UgMzU6dGhpcy52YWx1ZT10aGlzLm1heDticmVhaztjYXNlIDM2OnRoaXMudmFsdWU9dGhpcy5taW47YnJlYWs7Y2FzZSAzNzp0aGlzLl9pbmNyZW1lbnQoInJ0bCI9PXRoaXMuX2dldERpcmVjdGlvbigpPzE6LTEpO2JyZWFrO2Nhc2UgMzg6dGhpcy5faW5jcmVtZW50KDEpO2JyZWFrO2Nhc2UgMzk6dGhpcy5faW5jcmVtZW50KCJydGwiPT10aGlzLl9nZXREaXJlY3Rpb24oKT8tMToxKTticmVhaztjYXNlIDQwOnRoaXMuX2luY3JlbWVudCgtMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59aSE9dGhpcy52YWx1ZSYmKHRoaXMuX2VtaXRJbnB1dEV2ZW50KCksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCkpLHRoaXMuX2lzU2xpZGluZz0ia2V5Ym9hcmQiLGUucHJldmVudERlZmF1bHQoKX1fb25LZXl1cCgpeyJrZXlib2FyZCI9PT10aGlzLl9pc1NsaWRpbmcmJih0aGlzLl9pc1NsaWRpbmc9bnVsbCl9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV9iaW5kR2xvYmFsRXZlbnRzKGUpe2xldCBpPXRoaXMuX2RvY3VtZW50LHI9Q3YoZSksYT1yPyJ0b3VjaGVuZCI6Im1vdXNldXAiO2kuYWRkRXZlbnRMaXN0ZW5lcihyPyJ0b3VjaG1vdmUiOiJtb3VzZW1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLFpzKSxpLmFkZEV2ZW50TGlzdGVuZXIoYSx0aGlzLl9wb2ludGVyVXAsWnMpLHImJmkuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMuX3BvaW50ZXJVcCxacyk7bGV0IHM9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIHM8InUiJiZzJiZzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXIpfV9yZW1vdmVHbG9iYWxFdmVudHMoKXtsZXQgZT10aGlzLl9kb2N1bWVudDtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fcG9pbnRlck1vdmUsWnMpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fcG9pbnRlclVwLFpzKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fcG9pbnRlck1vdmUsWnMpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMuX3BvaW50ZXJVcCxacyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGNhbmNlbCIsdGhpcy5fcG9pbnRlclVwLFpzKTtsZXQgaT10aGlzLl9nZXRXaW5kb3coKTt0eXBlb2YgaTwidSImJmkmJmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1cil9X2luY3JlbWVudChlKXtsZXQgaT10aGlzLl9jbGFtcCh0aGlzLnZhbHVlfHwwLHRoaXMubWluLHRoaXMubWF4KTt0aGlzLnZhbHVlPXRoaXMuX2NsYW1wKGkrdGhpcy5zdGVwKmUsdGhpcy5taW4sdGhpcy5tYXgpfV91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbihlKXtpZighdGhpcy5fc2xpZGVyRGltZW5zaW9ucylyZXR1cm47bGV0IGE9dGhpcy5fY2xhbXAoKCh0aGlzLnZlcnRpY2FsP2UueTplLngpLSh0aGlzLnZlcnRpY2FsP3RoaXMuX3NsaWRlckRpbWVuc2lvbnMudG9wOnRoaXMuX3NsaWRlckRpbWVuc2lvbnMubGVmdCkpLyh0aGlzLnZlcnRpY2FsP3RoaXMuX3NsaWRlckRpbWVuc2lvbnMuaGVpZ2h0OnRoaXMuX3NsaWRlckRpbWVuc2lvbnMud2lkdGgpKTtpZih0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpJiYoYT0xLWEpLDA9PT1hKXRoaXMudmFsdWU9dGhpcy5taW47ZWxzZSBpZigxPT09YSl0aGlzLnZhbHVlPXRoaXMubWF4O2Vsc2V7bGV0IHM9dGhpcy5fY2FsY3VsYXRlVmFsdWUoYSksbD1NYXRoLnJvdW5kKChzLXRoaXMubWluKS90aGlzLnN0ZXApKnRoaXMuc3RlcCt0aGlzLm1pbjt0aGlzLnZhbHVlPXRoaXMuX2NsYW1wKGwsdGhpcy5taW4sdGhpcy5tYXgpfX1fZW1pdENoYW5nZUV2ZW50KCl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLnZhbHVlKSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSksdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCgpKX1fZW1pdElucHV0RXZlbnQoKXt0aGlzLmlucHV0LmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoKSl9X3VwZGF0ZVRpY2tJbnRlcnZhbFBlcmNlbnQoKXtpZighdGhpcy50aWNrSW50ZXJ2YWx8fCF0aGlzLl9zbGlkZXJEaW1lbnNpb25zKXJldHVybjtsZXQgZTtpZigiYXV0byI9PXRoaXMudGlja0ludGVydmFsKXtsZXQgaT10aGlzLnZlcnRpY2FsP3RoaXMuX3NsaWRlckRpbWVuc2lvbnMuaGVpZ2h0OnRoaXMuX3NsaWRlckRpbWVuc2lvbnMud2lkdGg7ZT1NYXRoLmNlaWwoMzAvKGkqdGhpcy5zdGVwLyh0aGlzLm1heC10aGlzLm1pbikpKSp0aGlzLnN0ZXAvaX1lbHNlIGU9dGhpcy50aWNrSW50ZXJ2YWwqdGhpcy5zdGVwLyh0aGlzLm1heC10aGlzLm1pbik7dGhpcy5fdGlja0ludGVydmFsUGVyY2VudD1HWChlKT9lOjB9X2NyZWF0ZUNoYW5nZUV2ZW50KGU9dGhpcy52YWx1ZSl7bGV0IGk9bmV3IGNsYXNze307cmV0dXJuIGkuc291cmNlPXRoaXMsaS52YWx1ZT1lLGl9X2NhbGN1bGF0ZVBlcmNlbnRhZ2UoZSl7bGV0IGk9KChlfHwwKS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKTtyZXR1cm4gR1goaSk/aTowfV9jYWxjdWxhdGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5taW4rZSoodGhpcy5tYXgtdGhpcy5taW4pfV9jbGFtcChlLGk9MCxyPTEpe3JldHVybiBNYXRoLm1heChpLE1hdGgubWluKGUscikpfV9nZXRTbGlkZXJEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX3NsaWRlcldyYXBwZXI/dGhpcy5fc2xpZGVyV3JhcHBlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOm51bGx9X2ZvY3VzSG9zdEVsZW1lbnQoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9ibHVySG9zdEVsZW1lbnQoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXdyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMobHIpLEMoRnQpLEMoSGksOCksVnIoInRhYmluZGV4IiksQyhhdCksQyhrdCksQyhkaSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNsaWRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlllKFN3ZSw1KSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLl9zbGlkZXJXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsInNsaWRlciIsMSwibWF0LXNsaWRlciIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoyOSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25CbHVyKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uS2V5ZG93bihvKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25LZXl1cCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uTW91c2VlbnRlcigpfSkoInNlbGVjdHN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gby5wcmV2ZW50RGVmYXVsdCgpfSksMiZlJiYoQ28oInRhYkluZGV4IixpLnRhYkluZGV4KSxQZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoImFyaWEtdmFsdWVtYXgiLGkubWF4KSgiYXJpYS12YWx1ZW1pbiIsaS5taW4pKCJhcmlhLXZhbHVlbm93IixpLnZhbHVlKSgiYXJpYS12YWx1ZXRleHQiLG51bGw9PWkudmFsdWVUZXh0P2kuZGlzcGxheVZhbHVlOmkudmFsdWVUZXh0KSgiYXJpYS1vcmllbnRhdGlvbiIsaS52ZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIiksUWUoIm1hdC1zbGlkZXItZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtc2xpZGVyLWhhcy10aWNrcyIsaS50aWNrSW50ZXJ2YWwpKCJtYXQtc2xpZGVyLWhvcml6b250YWwiLCFpLnZlcnRpY2FsKSgibWF0LXNsaWRlci1heGlzLWludmVydGVkIixpLl9zaG91bGRJbnZlcnRBeGlzKCkpKCJtYXQtc2xpZGVyLWludmVydC1tb3VzZS1jb29yZHMiLGkuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCkpKCJtYXQtc2xpZGVyLXNsaWRpbmciLGkuX2lzU2xpZGluZykoIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyIsaS50aHVtYkxhYmVsKSgibWF0LXNsaWRlci12ZXJ0aWNhbCIsaS52ZXJ0aWNhbCkoIm1hdC1zbGlkZXItbWluLXZhbHVlIixpLl9pc01pblZhbHVlKCkpKCJtYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrIixpLmRpc2FibGVkfHxpLl9pc01pblZhbHVlKCkmJmkuX2dldFRodW1iR2FwKCkmJmkuX3Nob3VsZEludmVydEF4aXMoKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgiLGludmVydDoiaW52ZXJ0IixtYXg6Im1heCIsbWluOiJtaW4iLHN0ZXA6InN0ZXAiLHRodW1iTGFiZWw6InRodW1iTGFiZWwiLHRpY2tJbnRlcnZhbDoidGlja0ludGVydmFsIix2YWx1ZToidmFsdWUiLGRpc3BsYXlXaXRoOiJkaXNwbGF5V2l0aCIsdmFsdWVUZXh0OiJ2YWx1ZVRleHQiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIixpbnB1dDoiaW5wdXQiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0U2xpZGVyIl0sZmVhdHVyZXM6W1J0KFtBd2VdKSxMZV0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWzEsIm1hdC1zbGlkZXItd3JhcHBlciJdLFsic2xpZGVyV3JhcHBlciIsIiJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXIiXSxbMSwibWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stZmlsbCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRpY2tzIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVyIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItZm9jdXMtcmluZyJdLFsxLCJtYXQtc2xpZGVyLXRodW1iIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwiXSxbMSwibWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDAsMSkoMiwiZGl2IiwyKSxQKDMsImRpdiIsMykoNCwiZGl2Iiw0KSxnKCksaCg1LCJkaXYiLDUpLFAoNiwiZGl2Iiw2KSxnKCksaCg3LCJkaXYiLDcpLFAoOCwiZGl2Iiw4KSg5LCJkaXYiLDkpLGgoMTAsImRpdiIsMTApKDExLCJzcGFuIiwxMSksVCgxMiksZygpKCkoKSgpKSwyJmUmJihiKDMpLF8oIm5nU3R5bGUiLGkuX2dldFRyYWNrQmFja2dyb3VuZFN0eWxlcygpKSxiKDEpLF8oIm5nU3R5bGUiLGkuX2dldFRyYWNrRmlsbFN0eWxlcygpKSxiKDEpLF8oIm5nU3R5bGUiLGkuX2dldFRpY2tzQ29udGFpbmVyU3R5bGVzKCkpLGIoMSksXygibmdTdHlsZSIsaS5fZ2V0VGlja3NTdHlsZXMoKSksYigxKSxfKCJuZ1N0eWxlIixpLl9nZXRUaHVtYkNvbnRhaW5lclN0eWxlcygpKSxiKDUpLHV0KGkuZGlzcGxheVZhbHVlKSl9LGRlcGVuZGVuY2llczpbbXVdLHN0eWxlczpbJy5tYXQtc2xpZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtvdXRsaW5lOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6YWN0aXZlLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItc2xpZGluZzpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpe2N1cnNvcjpncmFiYmluZ30ubWF0LXNsaWRlci13cmFwcGVyey13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LXNsaWRlci10cmFjay13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdHJhY2stZmlsbHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10aWNrc3std2Via2l0LWJhY2tncm91bmQtY2xpcDpjb250ZW50LWJveDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItZm9jdXMtcmluZ3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWJ7Y3Vyc29yOmdyYWJ9Lm1hdC1zbGlkZXItdGh1bWJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7Ym90dG9tOi0xMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O2JvcmRlcjozcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMC43KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItcmFkaXVzIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3otaW5kZXg6MTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjowbXN9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7b3BhY2l0eToxfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tze29wYWNpdHk6MX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpmbGV4fS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWJ7dHJhbnNmb3JtOnNjYWxlKDApfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym9yZGVyLXJhZGl1czo1MCUgNTAlIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1tb3VzZS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXRvdWNoLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlKDEpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MH0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6NHB4O3RyYW5zZm9ybTpzY2FsZSgwLjUpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci1ob3Jpem9udGFse2hlaWdodDo0OHB4O21pbi13aWR0aDoxMjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7aGVpZ2h0OjJweDt0b3A6MjNweDtsZWZ0OjhweDtyaWdodDo4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntoZWlnaHQ6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweDtyaWdodDowO3RvcDowfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDApfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgxKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MDtvdXRsaW5lOnNvbGlkIDJweDt0b3A6MXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjA7dG9wOjUwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dG9wOi0xNXB4O3JpZ2h0Oi0xNXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7cmlnaHQ6LTE0cHg7dG9wOi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06bm9uZX0ubWF0LXNsaWRlci12ZXJ0aWNhbHt3aWR0aDo0OHB4O21pbi1oZWlnaHQ6MTI4cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcnt3aWR0aDoycHg7dG9wOjhweDtib3R0b206OHB4O2xlZnQ6MjNweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt3aWR0aDoycHg7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym90dG9tOjA7bGVmdDowfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgxKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjA7b3V0bGluZTpzb2xpZCAycHg7bGVmdDoxcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tib3R0b206LTE1cHg7bGVmdDotMTVweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3t3aWR0aDoycHg7aGVpZ2h0OjEwMCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye2hlaWdodDoxMDAlO3dpZHRoOjA7bGVmdDo1MCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3R0b206LTE0cHg7bGVmdDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7bGVmdDowO3JpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0LC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gR1gobil7cmV0dXJuIWlzTmFOKG4pJiZpc0Zpbml0ZShuKX1mdW5jdGlvbiBDdihuKXtyZXR1cm4idCI9PT1uLnR5cGVbMF19ZnVuY3Rpb24gV1gobix0KXtsZXQgZTtyZXR1cm4gZT1DdihuKT8ibnVtYmVyIj09dHlwZW9mIHQ/R0wobi50b3VjaGVzLHQpfHxHTChuLmNoYW5nZWRUb3VjaGVzLHQpOm4udG91Y2hlc1swXXx8bi5jaGFuZ2VkVG91Y2hlc1swXTpuLGU/e3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfTp2b2lkIDB9ZnVuY3Rpb24gR0wobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKylpZihuW2VdLmlkZW50aWZpZXI9PT10KXJldHVybiBuW2VdfXZhciBLdT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsUXQsUXRdfSksbn0pKCk7ZnVuY3Rpb24gUHdlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwibWF0LXNsaWRlciIsMTEpLEQoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25TbGlkZXJDaGFuZ2UuZW1pdChyLnZhbHVlKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO18oIm1pbiIsMCkoIm1heCIsZS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCkoInZhbHVlIixlLnNjcm9sbEJlZ2luSW5kZXgpfX1mdW5jdGlvbiBPd2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDYpKDEsImJ1dHRvbiIsNyksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25OYXZpZ2F0ZUxlZnQuZW1pdCgpKX0pLFQoMiwiIDwgIiksZygpLGgoMywiZGl2Iiw4KSxUKDQpLGcoKSxoKDUsImJ1dHRvbiIsOSksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25OYXZpZ2F0ZVJpZ2h0LmVtaXQoKSl9KSxUKDYsIiA+ICIpLGcoKSxTKDcsUHdlLDEsMywibWF0LXNsaWRlciIsMTApLGcoKX1pZigyJm4pe2xldCBlPXcoKTtiKDQpLFlNKCIgIixlLnNjcm9sbEJlZ2luSW5kZXgsIiB+ICIsZS5zY3JvbGxCZWdpbkluZGV4K2UuZGlzcGxheUNvdW50LTEsIiBvZiAiLGUubnVtRXhlY3V0aW9ucywiICIpLGIoMyksXygibmdJZiIsZS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD4wKX19dmFyIEZ3ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuW24sdCxlXX07ZnVuY3Rpb24gTHdlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwxNCksRCgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89WChlKS5pbmRleDtyZXR1cm4gUSh3KDIpLm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZC5lbWl0KG8pKX0pLGgoMSwiZGl2IiwxNSksVCgyKSxnKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXcoMik7YigxKSxKaSgidGl0bGUiLGUub3BfdHlwZSksXygibmdDbGFzcyIsVHkoMyxGd2UsZS5pc19ncmFwaD8iZnVuYy1ncmFwaC1leGVjdXRpb24iOiIiLGk9PT1yLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg/ImZvY3VzZWQiOiIiLHIuZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzW2ldfHwiIikpLGIoMSksemUoIiAiLGUuc2hvcnRfb3BfdHlwZSwiICIpfX1mdW5jdGlvbiBOd2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTIpLFMoMSxMd2UsMyw3LCJkaXYiLDEzKSxnKCkpLDImbil7bGV0IGU9dygpO2IoMSksXygibmdGb3JPZiIsZS5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyl9fWZ1bmN0aW9uIEJ3ZShuLHQpe2lmKDEmbiYmKFR0KDApLFAoMSwidGYtZGVidWdnZXItdjItZXhlY3V0aW9uLWRhdGEiLDE2KSxEdCgpKSwyJm4pe2xldCBlPXcoKTtiKDEpLF8oImZvY3VzZWRFeGVjdXRpb25JbmRleCIsZS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgpfX12YXIgcVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlUnVuSWQ9bnVsbCx0aGlzLmxvYWRpbmdOdW1FeGVjdXRpb25zPSExLHRoaXMubnVtRXhlY3V0aW9ucz0wLHRoaXMuc2Nyb2xsQmVnaW5JbmRleD0wLHRoaXMuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQ9MCx0aGlzLnBhZ2VTaXplPTAsdGhpcy5kaXNwbGF5Q291bnQ9MCx0aGlzLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzPVtdLHRoaXMuZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzPVtdLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkluZGV4PW51bGwsdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PW51bGwsdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGF0YT1udWxsLHRoaXMub25OYXZpZ2F0ZUxlZnQ9bmV3IEwsdGhpcy5vbk5hdmlnYXRlUmlnaHQ9bmV3IEwsdGhpcy5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ9bmV3IEwsdGhpcy5vblNsaWRlckNoYW5nZT1uZXcgTH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGltZWxpbmUtY29tcG9uZW50Il1dLGlucHV0czp7YWN0aXZlUnVuSWQ6ImFjdGl2ZVJ1bklkIixsb2FkaW5nTnVtRXhlY3V0aW9uczoibG9hZGluZ051bUV4ZWN1dGlvbnMiLG51bUV4ZWN1dGlvbnM6Im51bUV4ZWN1dGlvbnMiLHNjcm9sbEJlZ2luSW5kZXg6InNjcm9sbEJlZ2luSW5kZXgiLHNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0OiJzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCIscGFnZVNpemU6InBhZ2VTaXplIixkaXNwbGF5Q291bnQ6ImRpc3BsYXlDb3VudCIsZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM6ImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIixkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXM6ImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsZm9jdXNlZEV4ZWN1dGlvbkluZGV4OiJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg6ImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLGZvY3VzZWRFeGVjdXRpb25EYXRhOiJmb2N1c2VkRXhlY3V0aW9uRGF0YSJ9LG91dHB1dHM6e29uTmF2aWdhdGVMZWZ0OiJvbk5hdmlnYXRlTGVmdCIsb25OYXZpZ2F0ZVJpZ2h0OiJvbk5hdmlnYXRlUmlnaHQiLG9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZDoib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIixvblNsaWRlckNoYW5nZToib25TbGlkZXJDaGFuZ2UifSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1sxLCJ0aW1lbGluZS10aXRsZSJdLFsxLCJleGVjdXRpb24tY291bnQiXSxbMSwidG9wLWxldmVsLWV4ZWN1dGlvbnMiXSxbImNsYXNzIiwibmF2aWdhdGlvbi1zZWN0aW9uIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4ZWN1dGlvbi10aW1lbGluZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5hdmlnYXRpb24tc2VjdGlvbiJdLFsibWF0LWJ1dHRvbiIsIiIsMSwibmF2aWdhdGlvbi1idXR0b24tbGVmdCIsMywiY2xpY2siXSxbMSwibmF2aWdhdGlvbi1wb3NpdGlvbi1pbmZvIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJuYXZpZ2F0aW9uLWJ1dHRvbi1yaWdodCIsMywiY2xpY2siXSxbImNsYXNzIiwidGltZWxpbmUtc2xpZGVyIiwic3RlcCIsIjEiLDMsIm1pbiIsIm1heCIsInZhbHVlIiwiaW5wdXQiLDQsIm5nSWYiXSxbInN0ZXAiLCIxIiwxLCJ0aW1lbGluZS1zbGlkZXIiLDMsIm1pbiIsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiZXhlY3V0aW9uLXRpbWVsaW5lIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiZXhlY3V0aW9uLWRpZ2VzdCIsMywibmdDbGFzcyIsInRpdGxlIl0sWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IikoMSwiZGl2IiwwKSxUKDIsIiBQeXRob24gRXhlY3V0aW9uIFRpbWVsaW5lICIpLGgoMywic3BhbiIsMSksVCg0KSxnKCkoKSxoKDUsImRpdiIsMiksUyg2LE93ZSw4LDQsImRpdiIsMyksUyg3LE53ZSwyLDEsImRpdiIsNCksUyg4LEJ3ZSwyLDEsIm5nLWNvbnRhaW5lciIsNSksZygpKCkpLDImZSYmKGIoNCksemUoIiAoIixpLm51bUV4ZWN1dGlvbnMsIikgIiksYigyKSxfKCJuZ0lmIixpLm51bUV4ZWN1dGlvbnMpLGIoMSksXygibmdJZiIsaS5udW1FeGVjdXRpb25zKSxiKDEpLF8oIm5nSWYiLG51bGwhPT1pLmFjdGl2ZVJ1bklkJiZudWxsIT09aS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgpKX0sZGVwZW5kZW5jaWVzOltibixkbixGZSxqWCxGbixUZF0sc3R5bGVzOlsiLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgY29sb3I6ICM0MjUwNjY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxMHB4O1xuICBoZWlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTJweDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZnVuYy1ncmFwaC1leGVjdXRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M3ZGJmNTtcbiAgY29sb3I6ICM0ZTU2NjQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ0YjM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5JbmZOYW5BbGVydFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBjb2xvcjogI2ZmZjtcbn1cblxuXG4uZXhlY3V0aW9uLWRpZ2VzdFtfbmdjb250ZW50LSVDT01QJV06aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLnRpbWVsaW5lLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogNDhweDtcbiAgbGVmdDogMzQwcHg7IFxuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiA0MHB4O1xufVxuXG4gIC50aW1lbGluZS1zbGlkZXIgLm1hdC1zbGlkZXItdGh1bWIge1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIHJpZ2h0OiAtNDBweDtcbiAgd2lkdGg6IDgwcHg7XG59XG5cblxuLm5hdmlnYXRpb24tcG9zaXRpb24taW5mb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm5hdmlnYXRpb24tc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGxpbmUtaGVpZ2h0OiA0OHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSHdlPVsiX19mb3J3YXJkXyIsIl9fYmFja3dhcmRfIiwiX19pbmZlcmVuY2VfIl0sWVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5hY3RpdmVSdW5JZCQ9dGhpcy5zdG9yZS5waXBlKHBuKGVhKSksdGhpcy5sb2FkaW5nTnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKHBuKHEoWkUsaT0+aS5zdGF0ZT09RGUuTE9BRElORykpKSx0aGlzLnNjcm9sbEJlZ2luSW5kZXgkPXRoaXMuc3RvcmUucGlwZShwbih5dikpLHRoaXMuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQkPXRoaXMuc3RvcmUucGlwZShwbihxKFF1LFpnLChpLHIpPT5NYXRoLm1heCgwLGktcikpKSksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5waXBlKHBuKFFnKSksdGhpcy5kaXNwbGF5Q291bnQkPXRoaXMuc3RvcmUucGlwZShwbihaZykpLHRoaXMuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMkPXRoaXMuc3RvcmUucGlwZShwbihxKHJYLGk9PmkubWFwKHI9PmZ1bmN0aW9uKG4sdD0xKXtpZighbilyZXR1cm57b3BfdHlwZToiKE4vQSkiLHNob3J0X29wX3R5cGU6Ii4uIixpc19ncmFwaDohMX07bGV0IGU9SHdlLmZpbHRlcihpPT5uLm9wX3R5cGUuc3RhcnRzV2l0aChpKSk7aWYoZS5sZW5ndGgpe2xldCBpPW4ub3BfdHlwZS5zbGljZShlWzBdLmxlbmd0aCk7cmV0dXJue29wX3R5cGU6bi5vcF90eXBlLHNob3J0X29wX3R5cGU6aS5zbGljZSgwLHQpLGlzX2dyYXBoOiEwfX1yZXR1cm57b3BfdHlwZTpuLm9wX3R5cGUsc2hvcnRfb3BfdHlwZTpuLm9wX3R5cGUuc2xpY2UoMCx0KSxpc19ncmFwaDohMX19KHIpKSkpKSx0aGlzLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQ9dGhpcy5zdG9yZS5waXBlKHBuKGZYKSksdGhpcy5mb2N1c2VkRXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZShwbihMTCkpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQ9dGhpcy5zdG9yZS5waXBlKHBuKG1YKSksdGhpcy5udW1FeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUocG4oUXUpKX1vbk5hdmlnYXRlTGVmdCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goVmcoKSl9b25OYXZpZ2F0ZVJpZ2h0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChIZygpKX1vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChVZyh7ZGlzcGxheUluZGV4OmV9KSl9b25TbGlkZXJDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh6Zyh7aW5kZXg6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lIl1dLGRlY2xzOjEyLHZhcnM6MzMsY29uc3RzOltbMywiYWN0aXZlUnVuSWQiLCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsIm51bUV4ZWN1dGlvbnMiLCJzY3JvbGxCZWdpbkluZGV4Iiwic2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQiLCJwYWdlU2l6ZSIsImRpc3BsYXlDb3VudCIsImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIiwiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIiwiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IiwiZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCIsIm9uTmF2aWdhdGVMZWZ0Iiwib25OYXZpZ2F0ZVJpZ2h0Iiwib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIiwib25TbGlkZXJDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInRpbWVsaW5lLWNvbXBvbmVudCIsMCksRCgib25OYXZpZ2F0ZUxlZnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25OYXZpZ2F0ZUxlZnQoKX0pKCJvbk5hdmlnYXRlUmlnaHQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25OYXZpZ2F0ZVJpZ2h0KCl9KSgib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQobyl9KSgib25TbGlkZXJDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2xpZGVyQ2hhbmdlKG8pfSksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSxHKDMsImFzeW5jIiksRyg0LCJhc3luYyIpLEcoNSwiYXN5bmMiKSxHKDYsImFzeW5jIiksRyg3LCJhc3luYyIpLEcoOCwiYXN5bmMiKSxHKDksImFzeW5jIiksRygxMCwiYXN5bmMiKSxHKDExLCJhc3luYyIpLGcoKSksMiZlJiZfKCJhY3RpdmVSdW5JZCIsVygxLDExLGkuYWN0aXZlUnVuSWQkKSkoImxvYWRpbmdOdW1FeGVjdXRpb25zIixXKDIsMTMsaS5sb2FkaW5nTnVtRXhlY3V0aW9ucyQpKSgibnVtRXhlY3V0aW9ucyIsVygzLDE1LGkubnVtRXhlY3V0aW9ucyQpKSgic2Nyb2xsQmVnaW5JbmRleCIsVyg0LDE3LGkuc2Nyb2xsQmVnaW5JbmRleCQpKSgic2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQiLFcoNSwxOSxpLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0JCkpKCJwYWdlU2l6ZSIsVyg2LDIxLGkucGFnZVNpemUkKSkoImRpc3BsYXlDb3VudCIsVyg3LDIzLGkuZGlzcGxheUNvdW50JCkpKCJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsVyg4LDI1LGkuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMkKSkoImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsVyg5LDI3LGkuZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzJCkpKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLFcoMTAsMjksaS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgkKSkoImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLFcoMTEsMzEsaS5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4JCkpfSxkZXBlbmRlbmNpZXM6W3FYLGx0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBqd2Uobix0KXsxJm4mJlAoMCwidGYtZGVidWdnZXItdjItaW5hY3RpdmUiKX1mdW5jdGlvbiBHd2Uobix0KXsxJm4mJihoKDAsImRpdiIsMyksUCgxLCJ0Zi1kZWJ1Z2dlci12Mi1hbGVydHMiKSxoKDIsImRpdiIsNCksUCgzLCJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSIpKDQsInRmLWRlYnVnZ2VyLXYyLWdyYXBoIiksZygpLFAoNSwidGYtZGVidWdnZXItdjItZ3JhcGgtZXhlY3V0aW9ucyIpLGcoKSxoKDYsImRpdiIsNSksUCg3LCJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiKSg4LCJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSIpLGcoKSl9dmFyIFhYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnJ1bnM9e30sdGhpcy5ydW5JZHM9W10sdGhpcy5hY3RpdmVSdW5JZD1udWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Z2dlci1jb21wb25lbnQiXV0saW5wdXRzOntydW5zOiJydW5zIixydW5JZHM6InJ1bklkcyIsYWN0aXZlUnVuSWQ6ImFjdGl2ZVJ1bklkIn0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiZGVidWdnZXItY29udGFpbmVyIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZGF0YUF2YWlsYWJsZSIsIiJdLFsxLCJ0b3Atc2VjdGlvbiJdLFsxLCJ0b3AtY2VudGVyLXNlY3Rpb24iXSxbMSwiYm90dG9tLXNlY3Rpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCksUygxLGp3ZSwxLDAsInRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIiwxKSxTKDIsR3dlLDksMCwibmctdGVtcGxhdGUiLG51bGwsMixadCksZygpKSwyJmUpe2xldCByPXR0KDMpO2IoMSksXygibmdJZiIsMD09PWkucnVuSWRzLmxlbmd0aCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbeFgsRmUsd1gsVFgsSVgsQlgsSFgsWVhdLHN0eWxlczpbIi5ib3R0b20tc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO2hlaWdodDozNCU7cGFkZGluZy10b3A6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ib3R0b20tc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ib3R0b20tc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0uZGVidWdnZXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufS50b3Atc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtoZWlnaHQ6NjYlO3BhZGRpbmc6NnB4IDB9dGYtZGVidWdnZXItdjItYWxlcnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEwcHg7bWluLXdpZHRoOjE2MHB4O3dpZHRoOmNhbGMoMTUlIC0gMTFweCl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItYWxlcnRzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItYWxlcnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICM1NTV9dGYtZGVidWdnZXItdjItZ3JhcGgtZXhlY3V0aW9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7bWluLXdpZHRoOjU0MHB4O3dpZHRoOjU0MHB4fXRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6NzAlfXRmLWRlYnVnZ2VyLXYyLXN0YWNrLXRyYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4LWdyb3c6MTtoZWlnaHQ6MTAwJTttaW4td2lkdGg6NTQwcHg7d2lkdGg6NTQwcHh9LnRvcC1jZW50ZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6YXV0bzt3aWR0aDo1NSV9dGYtZGVidWdnZXItdjItdGltZWxpbmVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9dGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5zJD10aGlzLnN0b3JlLnBpcGUocG4oamYpKSx0aGlzLnJ1bnNJZHMkPXRoaXMuc3RvcmUucGlwZShwbihxKGpmLGk9Pk9iamVjdC5rZXlzKGkpKSkpLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZShwbihlYSkpfW5nT25Jbml0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChURSgpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goREUoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12MiJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJydW5zIiwicnVuSWRzIiwiYWN0aXZlUnVuSWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsImRlYnVnZ2VyLWNvbXBvbmVudCIsMCksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSxHKDMsImFzeW5jIikpLDImZSYmXygicnVucyIsVygxLDMsaS5ydW5zJCkpKCJydW5JZHMiLFcoMiw1LGkucnVuc0lkcyQpKSgiYWN0aXZlUnVuSWQiLFcoMyw3LGkuYWN0aXZlUnVuSWQkKSl9LGRlcGVuZGVuY2llczpbWFgsbHRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdfSksbn0pKCksYVQ9ImRlYnVnZ2VyLXYyIjtmdW5jdGlvbiBXTChuLHQsZSxpLHIpe2lmKGU8PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYWdlU2l6ZTogJHtlfWApO2lmKHQ+aSl0aHJvdyBuZXcgRXJyb3IoYGVuZCBpbmRleCAoJHt0fSkgZXhjZWVkcyB0b3RhbCBudW1iZXIgb2YgaXRlbXMgKCR7aX0pYCk7aWYodC1uPmUpdGhyb3cgbmV3IEVycm9yKCJiZWdpbi1lbmQgc3BhbiBleGNlZWRzIHBhZ2Ugc2l6ZSwgd2hpY2ggaXMgbm90IGFsbG93ZWQiKTtsZXQgbz1bXSxhPU1hdGguZmxvb3Iobi9lKTsoIShhIGluIHIpfHxyW2FdPGUmJmEqZStyW2FdPGkpJiZvLnB1c2goYSk7bGV0IHM9TWF0aC5mbG9vcigodC0xKS9lKTtyZXR1cm4gcyE9PWEmJighKHMgaW4gcil8fHMqZStyW3NdPHQmJnQ8aSkmJm8ucHVzaChzKSxvfXZhciBKWD0oKCk9PntjbGFzcyBue29uRGVidWdnZXJEYXRhUG9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUod2koVEUpLHlpKGU9PmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbi5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBLdCgodCxlKT0+e2xldCBpLG8scj0hMSxhPSExLHM9ITEsbD0oKT0+cyYmYSYmKGUuY29tcGxldGUoKSwhMCksZD0oKT0+e3M9ITEsaT10LnN1YnNjcmliZShIdChlLHZvaWQgMCwoKT0+e3M9ITAsIWwoKSYmKG98fChvPW5ldyBBZSxuKG8pLnN1YnNjcmliZShIdChlLCgpPT57aT9kKCk6cj0hMH0sKCk9PnthPSEwLGwoKX0pKSksbykubmV4dCgpfSkpLHImJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLHI9ITEsZCgpKX07ZCgpfSl9KGk9PmkucGlwZShZdCh0KSxxbSgoWyxyXSk9PkphKHIpKSkpLG90KGUpLFUoKCk9Pnt9KSl9KHF0KGUpLHRoaXMuc3RvcmUuc2VsZWN0KCRZKS5waXBlKFUoaT0+ZnVuY3Rpb24obil7cmV0dXJuIG4+NmU0PzZlNDpuPjRlMz9uOjJlM30oaSkpKSx0aGlzLmFjdGlvbnMkLnBpcGUod2koREUpKSkpLFZ0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKHB2KCkpKSxVKCgpPT57fSkpfW9uQ29yZVJlbG9hZCgpe3JldHVybiBjbih0aGlzLmFjdGlvbnMkLnBpcGUod2koSHMsc3MpKSx0aGlzLmFjdGlvbnMkLnBpcGUod2koeGMpKS5waXBlKFl0KHRoaXMuc3RvcmUuc2VsZWN0KElMKSksVmUoKFssZV0pPT5lLnN0YXRlPT09RGUuTk9UX0xPQURFRHx8ZS5zdGF0ZT09PURlLkZBSUxFRCYmbnVsbD09PWUubGFzdExvYWRlZFRpbWVJbk1zKSkpLnBpcGUoWXQodGhpcy5zdG9yZS5zZWxlY3QocW8pKSxWZSgoWyxlXSk9PmU9PT1hVCksVnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2gocHYoKSkpLFUoKCk9Pnt9KSl9bG9hZERlYnVnZ2VyUnVucyhlKXtyZXR1cm4gZS5waXBlKFl0KHRoaXMuc3RvcmUuc2VsZWN0KElMKSksVmUoKFsse3N0YXRlOml9XSk9PmkhPT1EZS5MT0FESU5HKSxWdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChJRSgpKSksaG4oKCk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFJ1bnMoKS5waXBlKFZ0KGk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEFFKHtydW5zOml9KSl9KSxVKCgpPT57fSkpKSl9Y3JlYXRlTnVtRXhlY3V0aW9uTG9hZGVyKGUpe3JldHVybiBlLnBpcGUoWXQodGhpcy5zdG9yZS5zZWxlY3QoamYpLHRoaXMuc3RvcmUuc2VsZWN0KFpFKSksVmUoKFssaSxyXSk9Pk9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiZyLnN0YXRlIT09RGUuTE9BRElORyksVnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goUEUoKSkpLGhuKChbLGldKT0+e2xldCByPU9iamVjdC5rZXlzKGkpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hFeGVjdXRpb25EaWdlc3RzKHIsMCwwKS5waXBlKFZ0KHM9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKE9FKHtudW1FeGVjdXRpb25zOnMubnVtX2RpZ2VzdHN9KSl9KSxVKCgpPT57fSkpfSkpfWNyZWF0ZU51bUdyYXBoRXhlY3V0aW9uTG9hZGVyKGUpe3JldHVybiBlLnBpcGUoWXQodGhpcy5zdG9yZS5zZWxlY3QoamYpLHRoaXMuc3RvcmUuc2VsZWN0KG9YKSksVmUoKFssaSxyXSk9Pk9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiZyLnN0YXRlIT09RGUuTE9BRElORyksVnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goQkUoKSkpLGhuKChbLGldKT0+e2xldCByPU9iamVjdC5rZXlzKGkpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMociwwLDApLnBpcGUoVnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goVkUoe251bUdyYXBoRXhlY3V0aW9uczpzLm51bV9kaWdlc3RzfSkpfSksVSgoKT0+e30pKX0pKX1jcmVhdGVOdW1BbGVydHNBbmRCcmVha2Rvd25Mb2FkZXIoZSl7cmV0dXJuIGUucGlwZShZdCh0aGlzLnN0b3JlLnNlbGVjdChqZiksdGhpcy5zdG9yZS5zZWxlY3QoQUwpKSxWZSgoWyxpLHJdKT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJnIuc3RhdGUhPT1EZS5MT0FESU5HKSxWdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChmdigpKSksaG4oKFssaV0pPT57bGV0IHI9T2JqZWN0LmtleXMoaSlbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEFsZXJ0cyhyLDAsMCkucGlwZShWdChzPT57dGhpcy5zdG9yZS5kaXNwYXRjaChSRSh7bnVtQWxlcnRzOnMubnVtX2FsZXJ0cyxhbGVydHNCcmVha2Rvd246cy5hbGVydHNfYnJlYWtkb3dufSkpfSksVSgoKT0+e30pKX0pKX1jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGV0ZWN0b3IoZSl7cmV0dXJuIGUucGlwZShZdCh0aGlzLnN0b3JlLnNlbGVjdChRdSksdGhpcy5zdG9yZS5zZWxlY3QoX3YpKSxWZSgoWyxpLHJdKT0+aT4wJiYwPT09T2JqZWN0LmtleXMoci5wYWdlTG9hZGVkU2l6ZXMpLmxlbmd0aCksVSgoKT0+e30pKX1jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGlnZXN0KGUpe3JldHVybiBlLnBpcGUoWXQodGhpcy5zdG9yZS5zZWxlY3QoUXUpLHRoaXMuc3RvcmUuc2VsZWN0KGVhKSx0aGlzLnN0b3JlLnNlbGVjdChRZykpLFZlKChbLCxpXSk9Pm51bGwhPT1pKSxVKChbLGkscixvXSk9Pih7YmVnaW46MCxlbmQ6TWF0aC5taW4oaSxvKSxydW5JZDpyfSkpKX1vbkV4ZWN1dGlvblNjcm9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUod2koVmcsSGcsemcpLFl0KHRoaXMuc3RvcmUuc2VsZWN0KGVhKSx0aGlzLnN0b3JlLnNlbGVjdCh5diksdGhpcy5zdG9yZS5zZWxlY3QoUXUpLHRoaXMuc3RvcmUuc2VsZWN0KFpnKSx0aGlzLnN0b3JlLnNlbGVjdChRZykpLFZlKChbZV0pPT5udWxsIT09ZSksVSgoWyxlLGkscixvLGFdKT0+KHtydW5JZDplLGJlZ2luOmksZW5kOk1hdGgubWluKHIsaStvKSxwYWdlU2l6ZTphfSkpLFl0KHRoaXMuc3RvcmUuc2VsZWN0KF92KSksVSgoW2UsaV0pPT4oe3Byb3BzOmUsbG9hZGVkOmksbWlzc2luZ1BhZ2VzOldMKGUuYmVnaW4sZS5lbmQsZS5wYWdlU2l6ZSxpLm51bUV4ZWN1dGlvbnMsaS5wYWdlTG9hZGVkU2l6ZXMpfSkpLFZlKCh7bWlzc2luZ1BhZ2VzOmV9KT0+ZS5sZW5ndGg+MCksVSgoe3Byb3BzOmUsbG9hZGVkOmksbWlzc2luZ1BhZ2VzOnJ9KT0+e2xldHtydW5JZDpvLHBhZ2VTaXplOmF9PWU7cmV0dXJue2JlZ2luOnJbMF0qYSxlbmQ6TWF0aC5taW4oaS5udW1FeGVjdXRpb25zLChyW3IubGVuZ3RoLTFdKzEpKmEpLHJ1bklkOm99fSkpfWNyZWF0ZUV4ZWN1dGlvbkRpZ2VzdExvYWRlcihlKXtyZXR1cm4gZS5waXBlKFl0KHRoaXMuc3RvcmUuc2VsZWN0KF92KSksVmUoKFt7YmVnaW46aSxlbmQ6cn0sb10pPT5yPmkmJiFmdW5jdGlvbihuLHQsZSl7aWYodD49ZSl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJlZ2luIHRvIGJlIGxlc3MgdGhhbiBlbmQsIGJ1dCBnb3QgYmVnaW49JHt0fSwgZW5kPSR7ZX1gKTtyZXR1cm4tMSE9PW4uZmluZEluZGV4KGk9PmkuYmVnaW4+PXQmJmkuZW5kPD1lKX0oby5sb2FkaW5nUmFuZ2VzLGkscikpLFZ0KChbe2JlZ2luOmksZW5kOnJ9XSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEZFKHtiZWdpbjppLGVuZDpyfSkpfSksaG4oKFt7cnVuSWQ6aSxiZWdpbjpyLGVuZDpvfV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hFeGVjdXRpb25EaWdlc3RzKGkscixvKS5waXBlKFZ0KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKExFKGEpKX0pLFUoKCk9Pnt9KSkpKX1vbkV4ZWN1dGlvbkRpZ2VzdEZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKHdpKFVnKSxZdCh0aGlzLnN0b3JlLnNlbGVjdChlYSksdGhpcy5zdG9yZS5zZWxlY3QoTkwpLHRoaXMuc3RvcmUuc2VsZWN0KHl2KSksVSgoW2UsaSxyLG9dKT0+KHthY3RpdmVSdW5JZDppLGxvYWRlZEV4ZWN1dGlvbkRhdGE6cixmb2N1c0luZGV4Om8rZS5kaXNwbGF5SW5kZXh9KSkpfWNyZWF0ZUV4ZWN1dGlvbkRhdGFBbmRTdGFja0ZyYW1lc0xvYWRlcihlKXtyZXR1cm4gZS5waXBlKFZlKCh7YWN0aXZlUnVuSWQ6aSxsb2FkZWRFeGVjdXRpb25EYXRhOnIsZm9jdXNJbmRleDpvfSk9Pm51bGwhPT1pJiZudWxsIT09byYmdm9pZCAwPT09cltvXSksaG4oKHthY3RpdmVSdW5JZDppLGZvY3VzSW5kZXg6cn0pPT57bGV0IG89cixhPW8rMTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGF0YShpLG8sYSkucGlwZShWdChzPT57dGhpcy5zdG9yZS5kaXNwYXRjaChORShzKSl9KSxVKHM9Pih7ZXhlY3V0aW9uRGF0YTpzLGJlZ2luOm8sZW5kOmF9KSkpfSksVSgoe2V4ZWN1dGlvbkRhdGE6aX0pPT5pLmV4ZWN1dGlvbnNbMF0pLFl0KHRoaXMuc3RvcmUuc2VsZWN0KGVhKSx0aGlzLnN0b3JlLnNlbGVjdChCTCkpLFZlKChbaSxyLG9dKT0+e2lmKG51bGw9PT1yKXJldHVybiExO2ZvcihsZXQgYSBvZiBpLnN0YWNrX2ZyYW1lX2lkcylpZih2b2lkIDA9PT1vW2FdKXJldHVybiEwO3JldHVybiExfSksaG4oKFtpLHJdKT0+e2xldCBvPWkuc3RhY2tfZnJhbWVfaWRzO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hTdGFja0ZyYW1lcyhyLG8pLnBpcGUoVnQoYT0+e2xldCBzPXt9O2ZvcihsZXQgbD0wO2w8by5sZW5ndGg7KytsKXNbb1tsXV09YS5zdGFja19mcmFtZXNbbF07dGhpcy5zdG9yZS5kaXNwYXRjaChtdih7c3RhY2tGcmFtZXM6c30pKX0pLFUoKCk9Pnt9KSl9KSl9b25HcmFwaEV4ZWN1dGlvblNjcm9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUod2koamcpLENyKDEwMCksWXQodGhpcy5zdG9yZS5zZWxlY3QoZWEpLHRoaXMuc3RvcmUuc2VsZWN0KGJ2KSx0aGlzLnN0b3JlLnNlbGVjdChhWCkpLFZlKChbLGUsaV0pPT5udWxsIT09ZSYmaT4wKSxVKChbLGUsaSxyXSk9Pih7cnVuSWQ6ZSxudW1HcmFwaEV4ZWN1dGlvbnM6aSxzY3JvbGxCZWdpbkluZGV4OnJ9KSksWXQodGhpcy5zdG9yZS5zZWxlY3QobFgpLHRoaXMuc3RvcmUuc2VsZWN0KHNYKSx0aGlzLnN0b3JlLnNlbGVjdChjWCksdGhpcy5zdG9yZS5zZWxlY3QoZFgpKSxVKChbe3J1bklkOmUsbnVtR3JhcGhFeGVjdXRpb25zOmksc2Nyb2xsQmVnaW5JbmRleDpyfSxvLGEscyxsXSk9PntsZXQgYz1XTChyLE1hdGgubWluKHIrYSxpKSxvLGksbCk7cmV0dXJuIGM9Yy5maWx0ZXIoZD0+LTE9PT1zLmluZGV4T2YoZCkpLHtydW5JZDplLG1pc3NpbmdQYWdlczpjLHBhZ2VTaXplOm8sbnVtR3JhcGhFeGVjdXRpb25zOml9fSkpfWxvYWRHcmFwaEV4ZWN1dGlvblBhZ2VzKGUpe3JldHVybiBlLnBpcGUoVmUoKHttaXNzaW5nUGFnZXM6aX0pPT5pLmxlbmd0aD4wKSxWdCgoe21pc3NpbmdQYWdlczppfSk9PntpLmZvckVhY2gocj0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goSEUoe3BhZ2VJbmRleDpyfSkpfSl9KSxobigoe3J1bklkOmksbWlzc2luZ1BhZ2VzOnIscGFnZVNpemU6byxudW1HcmFwaEV4ZWN1dGlvbnM6YX0pPT57bGV0IHM9clswXSpvLGw9TWF0aC5taW4oKHJbci5sZW5ndGgtMV0rMSkqbyxhKTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoR3JhcGhFeGVjdXRpb25EYXRhKGkscyxsKS5waXBlKFZ0KGM9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHpFKGMpKX0pLFUoKCk9Pnt9KSl9KSl9bG9hZEdyYXBoT3BJbmZvKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZSh3aShXZyxHZyksWXQodGhpcy5zdG9yZS5zZWxlY3QoZWEpLHRoaXMuc3RvcmUuc2VsZWN0KGhYKSksVmUoKFtlLGkscl0pPT57bGV0e2dyYXBoX2lkOm8sb3BfbmFtZTphfT1lO3JldHVybiEobnVsbD09PWl8fHZvaWQgMCE9PXJbb10mJnJbb10uaGFzKGEpJiYocltvXS5nZXQoYSk9PT1EZS5MT0FESU5HfHxyW29dLmdldChhKT09PURlLkxPQURFRCkpfSksVnQoKFt7Z3JhcGhfaWQ6ZSxvcF9uYW1lOml9XSk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goVUUoe2dyYXBoX2lkOmUsb3BfbmFtZTppfSkpKSxobigoW2UsaV0pPT57bGV0e2dyYXBoX2lkOnIsb3BfbmFtZTpvfT1lO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaE9wSW5mbyhpLHIsbykucGlwZShWdChhPT50aGlzLnN0b3JlLmRpc3BhdGNoKGpFKHtncmFwaE9wSW5mb1Jlc3BvbnNlOmF9KSkpLFUoYT0+KHtydW5JZDppLHN0YWNrRnJhbWVJZHM6YS5zdGFja19mcmFtZV9pZHN9KSkpfSkpfWxvYWRHcmFwaE9wU3RhY2tGcmFtZXMoZSl7cmV0dXJuIGUucGlwZShZdCh0aGlzLnN0b3JlLnNlbGVjdChCTCkpLFUoKFt7cnVuSWQ6aSxzdGFja0ZyYW1lSWRzOnJ9LG9dKT0+KHtydW5JZDppLG1pc3NpbmdTdGFja0ZyYW1lSWRzOnIuZmlsdGVyKHM9PnZvaWQgMD09PW9bc10pfSkpLFZlKCh7cnVuSWQ6aSxtaXNzaW5nU3RhY2tGcmFtZUlkczpyfSk9Pm51bGwhPT1pJiZyLmxlbmd0aD4wKSxobigoe3J1bklkOmksbWlzc2luZ1N0YWNrRnJhbWVJZHM6cn0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTdGFja0ZyYW1lcyhpLHIpLnBpcGUoVnQobz0+e2xldCBhPXt9O2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7KytzKWFbcltzXV09by5zdGFja19mcmFtZXNbc107dGhpcy5zdG9yZS5kaXNwYXRjaChtdih7c3RhY2tGcmFtZXM6YX0pKX0pLFUoKCk9Pnt9KSkpKX1vbkFsZXJ0VHlwZUZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKHdpKEJnKSxZdCh0aGlzLnN0b3JlLnNlbGVjdChlYSksdGhpcy5zdG9yZS5zZWxlY3QoUUUpLHRoaXMuc3RvcmUuc2VsZWN0KHRYKSx0aGlzLnN0b3JlLnNlbGVjdChuWCksdGhpcy5zdG9yZS5zZWxlY3QoQUwpKSxWZSgoWyxlLGkscixvLGFdKT0+bnVsbCE9PWUmJm51bGwhPT1pJiZyPjAmJihudWxsPT09b3x8T2JqZWN0LmtleXMobykubGVuZ3RoPHIpJiZhLnN0YXRlIT09RGUuTE9BRElORyksVnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goZnYoKSkpLGhuKChbLGUsaV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hBbGVydHMoZSwwLC0xLGkpKSxWdCgoe251bV9hbGVydHM6ZSxhbGVydHNfYnJlYWtkb3duOmksYWxlcnRfdHlwZTpyLGJlZ2luOm8sZW5kOmEsYWxlcnRzOnN9KT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goa0Uoe251bUFsZXJ0czplLGFsZXJ0c0JyZWFrZG93bjppLGFsZXJ0VHlwZTpyLGJlZ2luOm8sZW5kOmEsYWxlcnRzOnN9KSl9KSl9ZmV0Y2hFeGVjdXRpb25EaWdlc3RzRm9yQWxlcnRUeXBlRm9jdXMoZSl7cmV0dXJuIGUucGlwZShZdCh0aGlzLnN0b3JlLnNlbGVjdChRZyksdGhpcy5zdG9yZS5zZWxlY3QoWmcpLHRoaXMuc3RvcmUuc2VsZWN0KFF1KSx0aGlzLnN0b3JlLnNlbGVjdChfdiksdGhpcy5zdG9yZS5zZWxlY3QoZWEpKSxVKChbaSxyLG8sYSxzLGxdKT0+e2xldCBkPWkuYWxlcnRzWzBdLmV4ZWN1dGlvbl9pbmRleCx1PVdMKE1hdGgubWF4KDAsZC1NYXRoLmZsb29yKG8vMikpLE1hdGgubWluKGQrTWF0aC5mbG9vcihvLzIpLGEpLHIsYSxzLnBhZ2VMb2FkZWRTaXplcyk7cmV0dXJuIDA9PT11Lmxlbmd0aD97cnVuSWQ6bCxiZWdpbjowLGVuZDowfTp7cnVuSWQ6bCxiZWdpbjp1WzBdKnIsZW5kOk1hdGgubWluKHMubnVtRXhlY3V0aW9ucywodVt1Lmxlbmd0aC0xXSsxKSpyKX19KSl9bG9hZFNvdXJjZUZpbGVMaXN0KGUpe3JldHVybiBlLnBpcGUoWXQodGhpcy5zdG9yZS5zZWxlY3QoZWEpLHRoaXMuc3RvcmUuc2VsZWN0KF9YKSksVmUoKFssaSxyXSk9Pm51bGwhPT1pJiZyLnN0YXRlIT09RGUuTE9BRElORyksVnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goR0UoKSkpLGhuKChbLGldKT0+dGhpcy5kYXRhU291cmNlLmZldGNoU291cmNlRmlsZUxpc3QoaSkucGlwZShWdChyPT57bGV0IG89W107ci5mb3JFYWNoKChbYSxzXSk9PntvLnB1c2goe2hvc3RfbmFtZTphLGZpbGVfcGF0aDpzfSl9KSx0aGlzLnN0b3JlLmRpc3BhdGNoKFdFKHtzb3VyY2VGaWxlczpvfSkpfSksVSgoKT0+e30pKSkpfW9uU291cmNlRmlsZUZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKHdpKHFnKSxZdCh0aGlzLnN0b3JlLnNlbGVjdChlYSksdGhpcy5zdG9yZS5zZWxlY3QoVkwpLHRoaXMuc3RvcmUuc2VsZWN0KCRFKSksVSgoW2UsaSxyLG9dKT0+KHtydW5JZDppLHN0YWNrRnJhbWU6ZS5zdGFja0ZyYW1lLGZpbGVJbmRleDpyLGZpbGVDb250ZW50Om99KSksVmUoKHtydW5JZDplLGZpbGVDb250ZW50Oml9KT0+bnVsbCE9PWUmJm51bGwhPT1pJiZpLmxvYWRTdGF0ZT09PURlLk5PVF9MT0FERUQpLFZ0KCh7c3RhY2tGcmFtZTplfSk9PnRoaXMuc3RvcmUuZGlzcGF0Y2gocUUoe2hvc3RfbmFtZTplLmhvc3RfbmFtZSxmaWxlX3BhdGg6ZS5maWxlX3BhdGh9KSkpLGhuKCh7ZmlsZUluZGV4OmUscnVuSWQ6aX0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTb3VyY2VGaWxlKGksZSkucGlwZShWdChyPT57dGhpcy5zdG9yZS5kaXNwYXRjaChZRShyKSl9KSxVKCgpPT57fSkpKSl9Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy5sb2FkRGF0YSQ9T3IoKCk9PntsZXQgbz10aGlzLmxvYWREZWJ1Z2dlclJ1bnMoY24odGhpcy5vbkRlYnVnZ2VyRGF0YVBvbGwoKSx0aGlzLm9uQ29yZVJlbG9hZCgpKSkucGlwZShTYSgpKSxhPXRoaXMubG9hZFNvdXJjZUZpbGVMaXN0KG8pLHM9dGhpcy5jcmVhdGVOdW1FeGVjdXRpb25Mb2FkZXIobyksbD10aGlzLmNyZWF0ZU51bUFsZXJ0c0FuZEJyZWFrZG93bkxvYWRlcihvKSxjPXRoaXMub25BbGVydFR5cGVGb2N1c2VkKCksZD10aGlzLmZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGMpLHU9dGhpcy5jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGV0ZWN0b3IocykucGlwZShTYSgpKSxwPXRoaXMuY3JlYXRlRXhlY3V0aW9uRGlnZXN0TG9hZGVyKGNuKHRoaXMub25FeGVjdXRpb25TY3JvbGwoKSx0aGlzLmNyZWF0ZUluaXRpYWxFeGVjdXRpb25EaWdlc3QodSksZCkpLGY9dGhpcy5jcmVhdGVFeGVjdXRpb25EYXRhQW5kU3RhY2tGcmFtZXNMb2FkZXIoY24odGhpcy5vbkV4ZWN1dGlvbkRpZ2VzdEZvY3VzZWQoKSx1LnBpcGUoWXQodGhpcy5zdG9yZS5zZWxlY3QoZWEpLHRoaXMuc3RvcmUuc2VsZWN0KE5MKSksVSgoWyx4LFJdKT0+KHthY3RpdmVSdW5JZDp4LGxvYWRlZEV4ZWN1dGlvbkRhdGE6Uixmb2N1c0luZGV4OjB9KSkpKSk7cmV0dXJuIGNuKGwscCxmLHRoaXMuY3JlYXRlTnVtR3JhcGhFeGVjdXRpb25Mb2FkZXIobyksYSx0aGlzLm9uU291cmNlRmlsZUZvY3VzZWQoKSx0aGlzLmxvYWRHcmFwaEV4ZWN1dGlvblBhZ2VzKHRoaXMub25HcmFwaEV4ZWN1dGlvblNjcm9sbCgpKSx0aGlzLmxvYWRHcmFwaE9wU3RhY2tGcmFtZXModGhpcy5sb2FkR3JhcGhPcEluZm8oKSkpLnBpcGUoVSgoKT0+KHt9KSkpfSx7ZGlzcGF0Y2g6ITF9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTyhXbyksTyhrZSksTyhFRSkpfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLCRYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZV19KSxufSkoKSxlUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGVdfSksbn0pKCksc1Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlXX0pLG59KSgpLHRRPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxzVCxNZF19KSxufSkoKSxuUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7fSksbn0pKCksSnU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe30pLG59KSgpLGxUPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxKdV19KSxufSkoKSxpUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsbFRdfSksbn0pKCksclE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlLGxUXX0pLG59KSgpLG9RPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxzVF19KSxufSkoKSxhUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsb1EsZmksS3VdfSksbn0pKCksc1E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6WyRYLFRlLHpzLHRRLGVRLG5RLGlRLHJRLFlZLGFRLHdyLmZvckZlYXR1cmUoaHYsSlkpLHdvLmZvckZlYXR1cmUoW0pYXSksT2MuZm9yUGx1Z2luKGFULFFYKV19KSxufSkoKSxjVD15ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgUGFuZSBDbG9zZWQiKSxkVD15ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgUGFuZSBUb2dnbGVkIiksdVQ9eWUoIltNZXRyaWNzXSBTbGlkZSBvdXQgc2V0dGluZ3MgbWVudSB0b2dnbGVkIikscFQ9eWUoIltNZXRyaWNzXSBVc2VyIHJlcXVlc3RlZCB0byBvcGVuIHRoZSBzbGlkZSBvdXQgbWVudSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGZUPXllKCJbTWV0cmljc10gVXNlciBjaGFuZ2VkIHRoZSB0YWIgaW4gdGhlIHRhYmxlIGVkaXRvciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG1UPXllKCJbTWV0cmljc10gU2xpZGUgb3V0IHNldHRpbmdzIG1lbnUgY2xvc2VkIiksaFQ9eWUoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBSZXF1ZXN0ZWQiKSxnVD15ZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLF9UPXllKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgRmFpbGVkIikseVQ9eWUoIltNZXRyaWNzXSBNZXRyaWNzIENhcmQgU3RhdGUgVXBkYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEtnPXllKCJbTWV0cmljc10gTWV0cmljcyBDYXJkIEZ1bGwgU2l6ZSBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYlQ9eWUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIENoYW5nZSBUb29sdGlwIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdlQ9KHllKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBUb2dnbGUgU2hvdyBEYXRhIERvd25sb2FkIikseWUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgVG9nZ2xlIElnbm9yZSBPdXRsaWVyIikpLHhUPXllKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBYIEF4aXMgVHlwZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLENUPXllKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBDYXJkIFdpZHRoIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTVQ9eWUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUmVzZXQgQ2FyZCBXaWR0aCIpLHdUPXllKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBTY2FsYXIgU21vb3RoaW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU1Q9eWUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUGFydGl0aW9uIE5vbiBNb25vdG9uaWMgWCBUb2dnbGVkIiksRVQ9eWUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIEJyaWdodG5lc3MiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxUVD15ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgSW1hZ2UgQ29udHJhc3QiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxEVD15ZSgiW01ldHJpY3NdIEltYWdlIEJyaWdodG5lc3MgU2V0dGluZyBSZXNldCIpLElUPXllKCJbTWV0cmljc10gSW1hZ2UgQ29udHJhc3QgU2V0dGluZyBSZXNldCIpLEFUPXllKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJbWFnZSBTaG93IEFjdHVhbCBTaXplIiksUlQ9eWUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEhpc3RvZ3JhbSBNb2RlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksa1Q9eWUoIltNZXRyaWNzXSBNdWx0aXBsZSBUaW1lIFNlcmllcyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQVD15ZSgiW01ldHJpY3NdIEZldGNoIFRpbWUgU2VyaWVzIFJlcXVlc3QgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksT1Q9eWUoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXNwb25zZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxKZz15ZSgiW01ldHJpY3NdIENhcmQgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRlQ9eWUoIltNZXRyaWNzXSBDYXJkIFN0ZXAgU2xpZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxMVD15ZSgiW01ldHJpY3NdIFRhZyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE5UPXllKCJbTWV0cmljc10gTWV0cmljcyBUYWcgR3JvdXAgRXhwYW5zaW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSwkZz15ZSgiW01ldHJpY3NdIENhcmQgUGluIFN0YXRlIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCVD15ZSgiW01ldHJpY3NdIFRvZ2dsZSBWaXNpYmxlIFBsdWdpbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFZUPXllKCJbTWV0cmljc10gVG9nZ2xlIFNob3cgQWxsIFBsdWdpbnMiKSxZZj15ZSgiW01ldHJpY3NdIFRpbWUgU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxNdj15ZSgiW01ldHJpY3NdIENhcmQgVXNlciBWaWV3IEJveCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSFQ9eWUoIltNZXRyaWNzXSBMaW5rZWQgVGltZSBFbmFibGUgVG9nZ2xlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbFE9eWUoIltNZXRyaWNzXSBTb3J0aW5nIERhdGEgVGFibGUgQnkgSGVhZGVyIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZTA9eWUoIltNZXRyaWNzXSBEYXRhIHRhYmxlIGNvbHVtbnMgZWRpdGVkIGluIGVkaXQgbWVudSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHQwPXllKCJbTWV0cmljc10gRGF0YSB0YWJsZSBjb2x1bW4gdG9nZ2xlZCBpbiBlZGl0IG1lbnUgb3IgZGVsZXRlIGJ1dHRvbiBjbGlja2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRGQ9eWUoIltNZXRyaWNzXSBUaW1lIFNlbGVjdG9yIEVuYWJsZSBUb2dnbGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6VD15ZSgiW01ldHJpY3NdIFJhbmdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY1E9eWUoIltNZXRyaWNzXSBIaWRlIEVtcHR5IENhcmRzIENoYW5nZWQiKTtmdW5jdGlvbiB3dihuLHQpe2xldCBlPXt9O2ZvcihsZXQgaSBvZiBPYmplY3Qua2V5cyhuKSllW2ldPXQobltpXSxpKTtyZXR1cm4gZX12YXIgamE9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJubyBhZmZvcmRhbmNlIixuLkVYVEVOREVEX0xJTkU9ImV4dGVuZGVkTGluZSIsbi5GT0I9ImZvYiIsbi5GT0JfUkVNT1ZFRD0iZm9iUmVtb3ZlZCIsbi5GT0JfVEVYVD0iZm9iVGV4dCIsbi5ISVNUT0dSQU1fQ0xJQ0tfVE9fUkFOR0U9Imhpc3RvZ3JhbUNsaWNrVG9SYW5nZSIsbi5GT0JfQURERUQ9ImZvYkFkZGVkIn0oamF8fChqYT17fSkpLGphKSkoKSxHYT0oKCk9PihmdW5jdGlvbihuKXtuLk5PTkU9Im5vIHRvZ2dsZSBhZmZvcmRhbmNlIixuLkZPQl9ERVNFTEVDVD0iZm9iRGVzZWxlY3QiLG4uQ0hFQ0tfQk9YPSJjaGVja0JveCJ9KEdhfHwoR2E9e30pKSxHYSkpKCksZ2E9KCgpPT4oZnVuY3Rpb24obil7bltuLkhPUklaT05UQUw9MF09IkhPUklaT05UQUwiLG5bbi5WRVJUSUNBTD0xXT0iVkVSVElDQUwifShnYXx8KGdhPXt9KSksZ2EpKSgpO2Z1bmN0aW9uIFVUKG4pe2xldCB0PW5ldyBNYXAsZT1uLnNsaWNlKCkuc29ydCgoaSxyKT0+U3YoaS50YWcsci50YWcpKTtmb3IobGV0IGkgb2YgZSl7bGV0IHI9WndlKGkudGFnKTt0LmhhcyhyKXx8dC5zZXQocix7Z3JvdXBOYW1lOnIsaXRlbXM6W119KSx0LmdldChyKS5pdGVtcy5wdXNoKGkpfXJldHVyblsuLi50LnZhbHVlcygpXX1mdW5jdGlvbiBad2Uobil7cmV0dXJuIG4uc3BsaXQoIi8iLDEpWzBdfWZ1bmN0aW9uIFN2KG4sdCl7bGV0IGU9MCxpPTA7Zm9yKDs7KXtpZihlPT09bi5sZW5ndGgpcmV0dXJuIGk9PT10Lmxlbmd0aD8wOi0xO2lmKGk9PT10Lmxlbmd0aClyZXR1cm4gMTtpZihYZihuW2VdKSYmWGYodFtpXSkpe2xldCByPWUsbz1pO2U9ZFEobixlKzEpLGk9ZFEodCxpKzEpO2xldCBhPU51bWJlcihuLnNsaWNlKHIsZSkpLHM9TnVtYmVyKHQuc2xpY2UobyxpKSk7aWYoYTxzKXJldHVybi0xO2lmKGE+cylyZXR1cm4gMX1lbHNle2lmKHFMKG5bZV0pKXtpZighcUwodFtpXSkpcmV0dXJuLTF9ZWxzZXtpZihxTCh0W2ldKSlyZXR1cm4gMTtpZihuW2VdPHRbaV0pcmV0dXJuLTE7aWYobltlXT50W2ldKXJldHVybiAxfWUrKyxpKyt9fX1mdW5jdGlvbiBkUShuLHQpe2xldCBlO3ZhciBvOyhvPWV8fChlPXt9KSlbby5OQVRVUkFMPTBdPSJOQVRVUkFMIixvW28uUkVBTD0xXT0iUkVBTCIsb1tvLkVYUE9ORU5UX1NJR049Ml09IkVYUE9ORU5UX1NJR04iLG9bby5FWFBPTkVOVD0zXT0iRVhQT05FTlQiO2xldCBpPWUuTkFUVVJBTCxyPXQ7Zm9yKDtyPG4ubGVuZ3RoO3IrKylpZihpPT09ZS5OQVRVUkFMKXtpZigiLiI9PT1uW3JdKWk9ZS5SRUFMO2Vsc2UgaWYoImUiPT09bltyXXx8IkUiPT09bltyXSlpPWUuRVhQT05FTlRfU0lHTjtlbHNlIGlmKCFYZihuW3JdKSlicmVha31lbHNlIGlmKGk9PT1lLlJFQUwpe2lmKCJlIj09PW5bcl18fCJFIj09PW5bcl0paT1lLkVYUE9ORU5UX1NJR047ZWxzZSBpZighWGYobltyXSkpYnJlYWt9ZWxzZSBpZihpPT09ZS5FWFBPTkVOVF9TSUdOKXtpZighWGYobltyXSkmJiIrIiE9PW5bcl0mJiItIiE9PW5bcl0pYnJlYWs7aT1lLkVYUE9ORU5UfWVsc2UgaWYoaT09PWUuRVhQT05FTlQmJiFYZihuW3JdKSlicmVhaztyZXR1cm4gcn1mdW5jdGlvbiBYZihuKXtyZXR1cm4iMCI8PW4mJm48PSI5In1mdW5jdGlvbiBxTChuKXtyZXR1cm4iLyI9PT1ufHxYZihuKX1mdW5jdGlvbiBZTChuLHQsZSl7bGV0e3BsdWdpbjppLHRhZzpyLHJ1bklkOm8sc2FtcGxlOmF9PXRbbl0scz1tZChlLGkscixhKTtpZihzKXtpZihudWxsIT09byYmcy5ydW5Ub1Nlcmllcy5oYXNPd25Qcm9wZXJ0eShvKSl7bGV0IGM9cy5ydW5Ub1Nlcmllc1tvXS5sZW5ndGg7cmV0dXJuIGM+MD9jLTE6bnVsbH1sZXQgbD1PYmplY3QudmFsdWVzKHMucnVuVG9TZXJpZXMpLm1hcChjPT5jLmxlbmd0aCk7aWYobC5sZW5ndGgpcmV0dXJuIE1hdGgubWF4KC4uLmwpLTF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSndlKG4sdCxlLGkpe2xldCByPXsuLi50fTtmb3IobGV0IG8gaW4gbil7aWYoIW4uaGFzT3duUHJvcGVydHkobykpY29udGludWU7bGV0IGE9WUwobyxuLGUpO2lmKG51bGw9PT1hKWNvbnRpbnVlO2xldCBzPXQuaGFzT3duUHJvcGVydHkobyk/dFtvXS5pbmRleDpudWxsLGw9WUwobyxuLGkpOyhudWxsIT09cyYmcz5hfHxudWxsPT09c3x8bnVsbCE9PXMmJnM9PT1sKSYmKHJbb109e2luZGV4OmEsaXNDbG9zZXN0OiExfSl9cmV0dXJuIHJ9ZnVuY3Rpb24gdVEobil7bGV0IHQ9d3Yobi5ydW5Ub0xvYWRTdGF0ZSxlPT5lPT09RGUuTE9BRElORz9EZS5MT0FESU5HOkRlLk5PVF9MT0FERUQpO3JldHVybnsuLi5uLHJ1blRvTG9hZFN0YXRlOnR9fWZ1bmN0aW9uIHBRKG4sdCxlLGkpe3JldHVybiBKU09OLnN0cmluZ2lmeShbbix0LGV8fCIiLGldKX12YXJ7aW5pdGlhbFN0YXRlOm1RLHJlZHVjZXJzOiR3ZX09X2Yoe3RhZ01ldGFkYXRhTG9hZFN0YXRlOntzdGF0ZTpEZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSx0YWdNZXRhZGF0YTp7c2NhbGFyczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1RvUnVuczp7fX0saGlzdG9ncmFtczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1RvUnVuczp7fX0saW1hZ2VzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319fSxjYXJkTGlzdDpbXSxjYXJkVG9QaW5uZWRDb3B5Om5ldyBNYXAsY2FyZFRvUGlubmVkQ29weUNhY2hlOm5ldyBNYXAscGlubmVkQ2FyZFRvT3JpZ2luYWw6bmV3IE1hcCx1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpbXSxjYXJkTWV0YWRhdGFNYXA6e30sY2FyZFN0YXRlTWFwOnt9LGNhcmRTdGVwSW5kZXg6e30sdGFnRmlsdGVyOiIiLHRhZ0dyb3VwRXhwYW5kZWQ6bmV3IE1hcCxsaW5rZWRUaW1lU2VsZWN0aW9uOm51bGwsbGlua2VkVGltZUVuYWJsZWQ6ITEsc3RlcFNlbGVjdG9yRW5hYmxlZDohMSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6ITEsc2luZ2xlU2VsZWN0aW9uSGVhZGVyczpbe3R5cGU6dnQuUlVOLG5hbWU6InJ1biIsZGlzcGxheU5hbWU6IlJ1biIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6dnQuU01PT1RIRUQsbmFtZToic21vb3RoZWQiLGRpc3BsYXlOYW1lOiJTbW9vdGhlZCIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6dnQuVkFMVUUsbmFtZToidmFsdWUiLGRpc3BsYXlOYW1lOiJWYWx1ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6dnQuU1RFUCxuYW1lOiJzdGVwIixkaXNwbGF5TmFtZToiU3RlcCIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6dnQuUkVMQVRJVkVfVElNRSxuYW1lOiJyZWxhdGl2ZSIsZGlzcGxheU5hbWU6IlJlbGF0aXZlIixlbmFibGVkOiEwLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfV0scmFuZ2VTZWxlY3Rpb25IZWFkZXJzOlt7dHlwZTp2dC5SVU4sbmFtZToicnVuIixkaXNwbGF5TmFtZToiUnVuIixlbmFibGVkOiEwLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTp2dC5NSU5fVkFMVUUsbmFtZToibWluIixkaXNwbGF5TmFtZToiTWluIixlbmFibGVkOiEwLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTp2dC5NQVhfVkFMVUUsbmFtZToibWF4IixkaXNwbGF5TmFtZToiTWF4IixlbmFibGVkOiEwLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTp2dC5TVEFSVF9WQUxVRSxuYW1lOiJzdGFydCIsZGlzcGxheU5hbWU6IlN0YXJ0IFZhbHVlIixlbmFibGVkOiEwLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTp2dC5FTkRfVkFMVUUsbmFtZToiZW5kIixkaXNwbGF5TmFtZToiRW5kIFZhbHVlIixlbmFibGVkOiEwLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTp2dC5WQUxVRV9DSEFOR0UsbmFtZToidmFsdWVDaGFuZ2UiLGRpc3BsYXlOYW1lOiJWYWx1ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6dnQuUEVSQ0VOVEFHRV9DSEFOR0UsbmFtZToicGVyY2VudGFnZUNoYW5nZSIsZGlzcGxheU5hbWU6IiUiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOnZ0LlNUQVJUX1NURVAsbmFtZToic3RhcnRTdGVwIixkaXNwbGF5TmFtZToiU3RhcnQgU3RlcCIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6dnQuRU5EX1NURVAsbmFtZToiZW5kU3RlcCIsZGlzcGxheU5hbWU6IkVuZCBTdGVwIixlbmFibGVkOiEwLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTp2dC5TVEVQX0FUX01BWCxuYW1lOiJzdGVwQXRNYXgiLGRpc3BsYXlOYW1lOiJTdGVwIEF0IE1heCIsZW5hYmxlZDohMSxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6dnQuU1RFUF9BVF9NSU4sbmFtZToic3RlcEF0TWluIixkaXNwbGF5TmFtZToiU3RlcCBBdCBNaW4iLGVuYWJsZWQ6ITEscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOnZ0Lk1FQU4sbmFtZToibWVhbiIsZGlzcGxheU5hbWU6Ik1lYW4iLGVuYWJsZWQ6ITEscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOnZ0LlJBV19DSEFOR0UsbmFtZToicmF3Q2hhbmdlIixkaXNwbGF5TmFtZToiUmF3IixlbmFibGVkOiExLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfV0sZmlsdGVyZWRQbHVnaW5UeXBlczpuZXcgU2V0LHN0ZXBNaW5NYXg6e21pbjoxLzAsbWF4Oi0xLzB9fSx7aXNTZXR0aW5nc1BhbmVPcGVuOiEwLGlzU2xpZGVvdXRNZW51T3BlbjohMSx0YWJsZUVkaXRvclNlbGVjdGVkVGFiOmxvLlNJTkdMRSx0aW1lU2VyaWVzRGF0YTp7c2NhbGFyczp7fSxoaXN0b2dyYW1zOnt9LGltYWdlczp7fX0sc2V0dGluZ3M6ZTEsc2V0dGluZ092ZXJyaWRlczp7fSx2aXNpYmxlQ2FyZE1hcDpuZXcgTWFwfSwobix0LGUpPT5Mbyh0LGUpP246ey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOkRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRNZXRhZGF0YU1hcDp7fSx2aXNpYmxlQ2FyZE1hcDpuZXcgTWFwfSksWEw9bVEsZVNlPV9yKG1RLEVlKFZoLChuLHtyb3V0ZUtpbmQ6dCxwYXJ0aWFsU3RhdGU6ZX0pPT57aWYodCE9PWtuLkVYUEVSSU1FTlQmJnQhPT1rbi5DT01QQVJFX0VYUEVSSU1FTlQpcmV0dXJuIG47bGV0IGk9bmV3IFNldDtmb3IobGV0IGQgb2Ygbi5waW5uZWRDYXJkVG9PcmlnaW5hbC5rZXlzKCkpe2xldHtwbHVnaW46dSx0YWc6cCxydW5JZDpmLHNhbXBsZTptfT1uLmNhcmRNZXRhZGF0YU1hcFtkXTtpLmFkZChwUSh1LHAsZixtKSl9bGV0IHI9ZSxvPVtdO2ZvcihsZXQgZCBvZlsuLi5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLC4uLnIubWV0cmljcy5waW5uZWRDYXJkc10pe2xldCB1PXBRKGQucGx1Z2luLGQudGFnLGQucnVuSWQsZC5zYW1wbGUpO2kuaGFzKHUpfHwoaS5hZGQodSksby5wdXNoKGQpKX1sZXQgYT1HRihvLG4uY2FyZExpc3Qsbi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkVG9QaW5uZWRDb3B5LG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwsbi5jYXJkU3RlcEluZGV4LG4uY2FyZFN0YXRlTWFwKSxzPXIubWV0cmljcy5zbW9vdGhpbmcsbD1uLnNldHRpbmdPdmVycmlkZXM7aWYoTnVtYmVyLmlzRmluaXRlKHMpJiZudWxsIT09cyl7bGV0IGQ9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihzLnRvUHJlY2lzaW9uKDMpKSkpO2w9ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6ZH19bGV0IGM9ey4uLm4sLi4uYSxzZXR0aW5nT3ZlcnJpZGVzOmx9O3JldHVybiBudWxsIT09ci5tZXRyaWNzLnRhZ0ZpbHRlciYmKGMudGFnRmlsdGVyPXIubWV0cmljcy50YWdGaWx0ZXIpLGN9KSxFZShTbCwobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3QudG9vbHRpcFNvcnQmJk9iamVjdC52YWx1ZXMoYW8pLmluY2x1ZGVzKHQudG9vbHRpcFNvcnQpJiYoZS50b29sdGlwU29ydD10LnRvb2x0aXBTb3J0KSwibnVtYmVyIj09dHlwZW9mIHQudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGUuY2FyZE1pbldpZHRoPXQudGltZVNlcmllc0NhcmRNaW5XaWR0aCksImJvb2xlYW4iPT10eXBlb2YgdC5pZ25vcmVPdXRsaWVycyYmKGUuaWdub3JlT3V0bGllcnM9dC5pZ25vcmVPdXRsaWVycyksIm51bWJlciI9PXR5cGVvZiB0LnNjYWxhclNtb290aGluZyYmKGUuc2NhbGFyU21vb3RoaW5nPXQuc2NhbGFyU21vb3RoaW5nKTtsZXQgaT10LnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ/P24uaXNTZXR0aW5nc1BhbmVPcGVuLHI9dC5zdGVwU2VsZWN0b3JFbmFibGVkPz9uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz10LnJhbmdlU2VsZWN0aW9uRW5hYmxlZD8/bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQsYT10LmxpbmtlZFRpbWVFbmFibGVkPz9uLmxpbmtlZFRpbWVFbmFibGVkLHM9dC5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPz9uLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsbD10LnJhbmdlU2VsZWN0aW9uSGVhZGVycz8/bi5yYW5nZVNlbGVjdGlvbkhlYWRlcnM7cmV0dXJuey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOmksc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpvLGxpbmtlZFRpbWVFbmFibGVkOmEsc2luZ2xlU2VsZWN0aW9uSGVhZGVyczpzLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpsLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLC4uLmV9fX0pLEVlKHNzLEhzLG49PntsZXQgdD1uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLnN0YXRlPT09RGUuTE9BRElORz9EZS5MT0FESU5HOkRlLk5PVF9MT0FERUQsZT13dihuLnRpbWVTZXJpZXNEYXRhLChpLHIpPT53dihpLG89PmxzKHIpP3d2KG8sYT0+dVEoYSkpOnVRKG8pKSk7cmV0dXJuey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6dH0sdGltZVNlcmllc0RhdGE6ZX19KSxFZShoVCxuPT4oey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6RGUuTE9BRElOR319KSksRWUoX1Qsbj0+KHsuLi5uLHRhZ01ldGFkYXRhTG9hZFN0YXRlOnsuLi5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLHN0YXRlOkRlLkZBSUxFRH19KSksRWUoZ1QsKG4se3RhZ01ldGFkYXRhOnR9KT0+e2xldCBlPXtzY2FsYXJzOmZRKHQscW4uU0NBTEFSUyksaGlzdG9ncmFtczpmUSh0LHFuLkhJU1RPR1JBTVMpLGltYWdlczp0W3FuLklNQUdFU119LGk9e30scj1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2YgT2JqZWN0LmtleXMobikpe2xldCByLGk9ZTtpZihscyhpKSl7aWYoIWNzKGkpKXRocm93IG5ldyBFcnJvcigiTXVsdGktcnVuLCBzYW1wbGVkIHBsdWdpbiBzdXBwb3J0IG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTt7bGV0IG89bltpXS50YWdSdW5TYW1wbGVkSW5mbztmb3IobGV0IGEgb2YgT2JqZWN0LmtleXMobykpZm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKG9bYV0pKXtsZXR7bWF4U2FtcGxlc1BlclN0ZXA6bH09b1thXVtzXTtmb3IobGV0IGM9MDtjPGw7YysrKXQucHVzaCh7cGx1Z2luOmksdGFnOmEscnVuSWQ6cyxzYW1wbGU6YyxudW1TYW1wbGU6bH0pfX19ZWxzZSBpZihjcyhpKSl7cj1uW2ldLnRhZ1RvUnVucztmb3IobGV0IG8gb2YgT2JqZWN0LmtleXMocikpZm9yKGxldCBhIG9mIHJbb10pdC5wdXNoKHtwbHVnaW46aSx0YWc6byxydW5JZDphfSl9ZWxzZXtyPW5baV0udGFnVG9SdW5zO2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyhyKSl0LnB1c2goe3BsdWdpbjppLHRhZzpvLHJ1bklkOm51bGx9KX19cmV0dXJuIHR9KGUpLG89W107Zm9yKGxldCBmIG9mIHIpe2xldCBtPWpGKGYpO2lbbV09ZixvLnB1c2gobSl9bGV0IGE9bi50YWdHcm91cEV4cGFuZGVkO2lmKDA9PT1uLnRhZ0dyb3VwRXhwYW5kZWQuc2l6ZSl7bGV0IG09VVQoby5tYXAoeT0+KHsuLi5pW3ldLGNhcmRJZDp5fSkpLmZpbHRlcihCb29sZWFuKSk7YT1uZXcgTWFwKG4udGFnR3JvdXBFeHBhbmRlZCk7Zm9yKGxldCB5IG9mIG0uc2xpY2UoMCwyKSlhLnNldCh5Lmdyb3VwTmFtZSwhMCl9bGV0e25leHRDYXJkVG9QaW5uZWRDb3B5OnMsbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOmwscGlubmVkQ2FyZE1ldGFkYXRhTWFwOmN9PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgTWFwLHI9bmV3IE1hcCxvPXt9O3JldHVybiBuLmZvckVhY2goKGEscyk9PnstMSE9PWUuaW5kZXhPZihzKSYmKGkuc2V0KHMsYSksci5zZXQoYSxzKSxvW2FdPXRbc10pfSkse25leHRDYXJkVG9QaW5uZWRDb3B5OmksbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOnIscGlubmVkQ2FyZE1ldGFkYXRhTWFwOm99fShuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxpLG8pLGQ9ey4uLmksLi4uY30sdT1mdW5jdGlvbihuLHQpe2xldCBlPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbaSxyXSk9Pnt0W2ldJiYoZVtpXT1yKX0pLGV9KG4uY2FyZFN0ZXBJbmRleCxkKSxwPUdGKG4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsbyxkLHMsbi5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsbCx1LG4uY2FyZFN0YXRlTWFwKTtyZXR1cm57Li4ubiwuLi5wLHRhZ0dyb3VwRXhwYW5kZWQ6YSx0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6RGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSx0YWdNZXRhZGF0YTplLGNhcmRMaXN0Om99fSksRWUoeVQsKG4se2NhcmRJZDp0LHNldHRpbmdzOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07cmV0dXJuIGlbdF09ey4uLmlbdF0sLi4uZX0sey4uLm4sY2FyZFN0YXRlTWFwOml9fSksRWUoS2csKG4se2NhcmRJZDp0fSk9PntsZXQgZT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBlW3RdPXsuLi5lW3RdLGZ1bGxXaWR0aDohZVt0XT8uZnVsbFdpZHRoLHRhYmxlRXhwYW5kZWQ6IWVbdF0/LmZ1bGxXaWR0aH0sey4uLm4sY2FyZFN0YXRlTWFwOmV9fSksRWUoTFQsKG4se3RhZ0ZpbHRlcjp0fSk9Pih7Li4ubix0YWdGaWx0ZXI6dH0pKSxFZShiVCwobix7c29ydDp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsdG9vbHRpcFNvcnQ6dH19KSksRWUodlQsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLmlnbm9yZU91dGxpZXJzPz9uLnNldHRpbmdzLmlnbm9yZU91dGxpZXJzKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaWdub3JlT3V0bGllcnM6dH19fSksRWUoeFQsKG4se3hBeGlzVHlwZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMseEF4aXNUeXBlOnR9fSkpLEVlKHdULChuLHtzbW9vdGhpbmc6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHNjYWxhclNtb290aGluZzp0fX0pKSxFZShTVCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWD8/bi5zZXR0aW5ncy5zY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDp0fX19KSxFZShFVCwobix7YnJpZ2h0bmVzc0luTWlsbGk6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlQnJpZ2h0bmVzc0luTWlsbGk6dH19KSksRWUoVFQsKG4se2NvbnRyYXN0SW5NaWxsaTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VDb250cmFzdEluTWlsbGk6dH19KSksRWUoRFQsbj0+e2xldHtpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSxFZShJVCxuPT57bGV0e2ltYWdlQ29udHJhc3RJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSxFZShBVCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuaW1hZ2VTaG93QWN0dWFsU2l6ZT8/bi5zZXR0aW5ncy5pbWFnZVNob3dBY3R1YWxTaXplKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VTaG93QWN0dWFsU2l6ZTp0fX19KSxFZShSVCwobix7aGlzdG9ncmFtTW9kZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaGlzdG9ncmFtTW9kZTp0fX0pKSxFZShDVCwobix7Y2FyZE1pbldpZHRoOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6dH19KSksRWUoTVQsbj0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6bnVsbH19KSksRWUoY1Esbj0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxoaWRlRW1wdHlDYXJkczohbi5zZXR0aW5nT3ZlcnJpZGVzLmhpZGVFbXB0eUNhcmRzfX0pKSxFZShrVCwobix7cmVxdWVzdHM6dH0pPT57aWYoIXQubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLnRpbWVTZXJpZXNEYXRhfTtmb3IobGV0IGkgb2YgdCl7bGV0e3BsdWdpbjpyLHRhZzpvLHNhbXBsZTphfT1pO2Vbcl09dDEoZSxyLG8sYSk7bGV0IHM9bWQoZSxyLG8sYSksbD1MRihpKT9baS5ydW5JZF06aWcobi50YWdNZXRhZGF0YSxyLG8sYSk7cy5ydW5Ub0xvYWRTdGF0ZT1uMShEZS5MT0FESU5HLGwscy5ydW5Ub0xvYWRTdGF0ZSl9cmV0dXJuey4uLm4sdGltZVNlcmllc0RhdGE6ZX19KSxFZShQVCwobix7cmVxdWVzdDp0fSk9PntsZXQgZT17Li4ubi50aW1lU2VyaWVzRGF0YX0se3BsdWdpbjppLHRhZzpyLHNhbXBsZTpvfT10O2VbaV09dDEoZSxpLHIsbyk7bGV0IGE9bWQoZSxpLHIsbykscz1MRih0KT9bdC5ydW5JZF06aWcobi50YWdNZXRhZGF0YSxpLHIsbyk7cmV0dXJuIGEucnVuVG9Mb2FkU3RhdGU9bjEoRGUuRkFJTEVELHMsYS5ydW5Ub0xvYWRTdGF0ZSksey4uLm4sdGltZVNlcmllc0RhdGE6ZX19KSxFZShPVCwobix7cmVzcG9uc2U6dH0pPT57bGV0IGU9ey4uLm4uc3RlcE1pbk1heH0saT17Li4ubi5jYXJkU3RhdGVNYXB9LHI9ey4uLm4udGltZVNlcmllc0RhdGF9LHtwbHVnaW46byx0YWc6YSxydW5JZDpzLHNhbXBsZTpsfT10O3Jbb109dDEocixvLGEsbCk7bGV0IGM9bWQocixvLGEsbCk7aWYoWFModCkpe2xldCB1PXM/W3NdOmlnKG4udGFnTWV0YWRhdGEsbyxhLGwpO2MucnVuVG9Mb2FkU3RhdGU9bjEoRGUuRkFJTEVELHUsYy5ydW5Ub0xvYWRTdGF0ZSl9ZWxzZXtsZXQgdT10LnJ1blRvU2VyaWVzO2MucnVuVG9TZXJpZXM9ey4uLmMucnVuVG9TZXJpZXN9LGMucnVuVG9Mb2FkU3RhdGU9ey4uLmMucnVuVG9Mb2FkU3RhdGV9O2ZvcihsZXQgcCBpbiB1KWlmKHUuaGFzT3duUHJvcGVydHkocCkpe2MucnVuVG9TZXJpZXNbcF09dVtwXSxjLnJ1blRvTG9hZFN0YXRlW3BdPURlLkxPQURFRDtmb3IobGV0IGYgb2YgdVtwXSllLm1pbj1NYXRoLm1pbihlLm1pbixmLnN0ZXApLGUubWF4PU1hdGgubWF4KGUubWF4LGYuc3RlcCl9fWlmKHQucnVuVG9TZXJpZXMmJnQucGx1Z2luPT09cW4uU0NBTEFSUyl7bGV0IHU9akYoe3BsdWdpbjpvLHRhZzphLHJ1bklkOm51bGx9KSxwPWZ1bmN0aW9uKG4pe2xldCB0PTEvMCxlPS0xLzA7cmV0dXJuIE9iamVjdC52YWx1ZXMobikuZmxhdCgpLmZvckVhY2goaT0+e3Q9TWF0aC5taW4odCxpLnN0ZXApLGU9TWF0aC5tYXgoZSxpLnN0ZXApfSkse21pblN0ZXA6dCxtYXhTdGVwOmV9fShjLnJ1blRvU2VyaWVzKTtpW3VdPXsuLi5pW3VdLGRhdGFNaW5NYXg6cH07bGV0IGY9bi5jYXJkVG9QaW5uZWRDb3B5LmdldCh1KTtmJiYoaVtmXT17Li4uaVtmXSxkYXRhTWluTWF4OnB9KX1yZXR1cm57Li4ubix0aW1lU2VyaWVzRGF0YTpyLGNhcmRTdGVwSW5kZXg6SndlKG4uY2FyZE1ldGFkYXRhTWFwLG4uY2FyZFN0ZXBJbmRleCxyLG4udGltZVNlcmllc0RhdGEpLHN0ZXBNaW5NYXg6ZSxjYXJkU3RhdGVNYXA6aX19KSxFZShGVCwobix7Y2FyZElkOnQsc3RlcEluZGV4OmV9KT0+e2xldCBpPVlMKHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkscj1lO3JldHVybiBudWxsPT09aT9yPW51bGw6ZT5pJiYocj1pKSx7Li4ubixjYXJkU3RlcEluZGV4OnsuLi5uLmNhcmRTdGVwSW5kZXgsW3RdOntpbmRleDpyLGlzQ2xvc2VzdDohMX19fX0pLEVlKE5ULChuLHt0YWdHcm91cDp0fSk9PntsZXQgZT1uZXcgTWFwKG4udGFnR3JvdXBFeHBhbmRlZCk7cmV0dXJuIGUuc2V0KHQsIWUuZ2V0KHQpKSx7Li4ubix0YWdHcm91cEV4cGFuZGVkOmV9fSksRWUoSmcsKG4se2VudGVyZWRDYXJkczp0LGV4aXRlZENhcmRzOmV9KT0+e2lmKCF0Lmxlbmd0aCYmIWUubGVuZ3RoKXJldHVybiBuO2xldCBpPW5ldyBNYXAobi52aXNpYmxlQ2FyZE1hcCk7cmV0dXJuIHQuZm9yRWFjaCgoe2VsZW1lbnRJZDpyLGNhcmRJZDpvfSk9PntsZXQgYT1pLmdldChyKT8/bnVsbDtpZihudWxsIT09YSYmYSE9PW8pdGhyb3cgbmV3IEVycm9yKCJBIERPTSBlbGVtZW50IGNhbm5vdCBiZSByZXVzZWQgZm9yIG1vcmUgdGhhbiAxIHVuaXF1ZSBjYXJkIG1ldGFkYXRhIik7aS5zZXQocixvKX0pLGUuZm9yRWFjaCgoe2VsZW1lbnRJZDpyfSk9PntpLmRlbGV0ZShyKX0pLHsuLi5uLHZpc2libGVDYXJkTWFwOml9fSksRWUoJGcsKG4se2NhcmRJZDp0fSk9PntsZXQgZT1uLnBpbm5lZENhcmRUb09yaWdpbmFsLmhhcyh0KSxpPSFlJiYhbi5jYXJkVG9QaW5uZWRDb3B5Lmhhcyh0KTtpZihpJiYhaTEobikpcmV0dXJuIG47bGV0IHI9bmV3IE1hcChuLmNhcmRUb1Bpbm5lZENvcHkpLG89bmV3IE1hcChuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSksYT1uZXcgTWFwKG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwpLHM9ey4uLm4uY2FyZE1ldGFkYXRhTWFwfSxsPXsuLi5uLmNhcmRTdGVwSW5kZXh9LGM9ey4uLm4uY2FyZFN0YXRlTWFwfTtpZihlKXtsZXQgZD1uLnBpbm5lZENhcmRUb09yaWdpbmFsLmdldCh0KTtyLmRlbGV0ZShkKSxvLmRlbGV0ZShkKSxhLmRlbGV0ZSh0KSxkZWxldGUgc1t0XSxkZWxldGUgbFt0XSxkZWxldGUgY1t0XX1lbHNlIGlmKGkpe2xldCBkPVdGKHQscixvLGEsbCxzLGMpO3I9ZC5jYXJkVG9QaW5uZWRDb3B5LG89ZC5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsYT1kLnBpbm5lZENhcmRUb09yaWdpbmFsLHM9ZC5jYXJkTWV0YWRhdGFNYXAsbD1kLmNhcmRTdGVwSW5kZXgsYz1kLmNhcmRTdGF0ZU1hcH1lbHNle2xldCBkPW4uY2FyZFRvUGlubmVkQ29weS5nZXQodCk7ci5kZWxldGUodCksby5kZWxldGUodCksYS5kZWxldGUoZCksZGVsZXRlIHNbZF0sZGVsZXRlIGxbZF0sZGVsZXRlIGNbdF19cmV0dXJuey4uLm4sY2FyZE1ldGFkYXRhTWFwOnMsY2FyZFN0YXRlTWFwOmMsY2FyZFN0ZXBJbmRleDpsLGNhcmRUb1Bpbm5lZENvcHk6cixjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6byxwaW5uZWRDYXJkVG9PcmlnaW5hbDphfX0pLEVlKEhULG49PntsZXQgdD0hbi5saW5rZWRUaW1lRW5hYmxlZCxlPXsuLi5uLmNhcmRTdGVwSW5kZXh9LGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uLHI9bi5zdGVwU2VsZWN0b3JFbmFibGVkLG89bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ7aWYodCl7bGV0e21heDphfT1uLnN0ZXBNaW5NYXg7aT1uLmxpbmtlZFRpbWVTZWxlY3Rpb24/P3tzdGFydDp7c3RlcDphPT09LTEvMD8wOmF9LGVuZDpudWxsfSxlPXFGKG4uY2FyZFN0ZXBJbmRleCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhLGkpLHI9dCxvPUJvb2xlYW4oaS5lbmQpfXJldHVybnsuLi5uLGNhcmRTdGVwSW5kZXg6ZSxsaW5rZWRUaW1lRW5hYmxlZDp0LGxpbmtlZFRpbWVTZWxlY3Rpb246aSxzdGVwU2VsZWN0b3JFbmFibGVkOnIscmFuZ2VTZWxlY3Rpb25FbmFibGVkOm99fSksRWUoelQsbj0+e2xldCB0PSFuLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCxlPW4uc3RlcFNlbGVjdG9yRW5hYmxlZCxpPW4ubGlua2VkVGltZVNlbGVjdGlvbixyPU9iamVjdC5lbnRyaWVzKG4uY2FyZFN0YXRlTWFwKS5yZWR1Y2UoKG8sW2Esc10pPT4ob1thXT17Li4ucyxzdGVwU2VsZWN0aW9uT3ZlcnJpZGU6TGEuTk9ORSxyYW5nZVNlbGVjdGlvbk92ZXJyaWRlOkxhLk5PTkV9LG8pLHt9KTtyZXR1cm4gdD8oZT10LGl8fChpPXtzdGFydDp7c3RlcDpuLnN0ZXBNaW5NYXgubWlufSxlbmQ6e3N0ZXA6bi5zdGVwTWluTWF4Lm1heH19KSxpLmVuZHx8KGk9e3N0YXJ0OntzdGVwOm4uc3RlcE1pbk1heC5taW59LGVuZDppLnN0YXJ0fSkpOmkmJihpPXtzdGFydDppLmVuZD8/aS5zdGFydCxlbmQ6bnVsbH0pLHsuLi5uLHN0ZXBTZWxlY3RvckVuYWJsZWQ6ZSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6dCxsaW5rZWRUaW1lU2VsZWN0aW9uOmksY2FyZFN0YXRlTWFwOnJ9fSksRWUoWWYsKG4sdCk9PntsZXR7Y2FyZElkOmUsdGltZVNlbGVjdGlvbjppfT10LHI9aS5zdGFydC5zdGVwLG89aS5lbmQ/LnN0ZXAscz1uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZDtuLmxpbmtlZFRpbWVFbmFibGVkJiYocz12b2lkIDAhPT1vKTtsZXQgbD17c3RhcnQ6e3N0ZXA6cn0sZW5kOnZvaWQgMD09PW8/bnVsbDp7c3RlcDpyPm8/cjpvfX0sYz1xRihuLmNhcmRTdGVwSW5kZXgsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSxsKSxkPXsuLi5uLmNhcmRTdGF0ZU1hcH07cmV0dXJuIGUmJihkW2VdPXsuLi5kW2VdLHRpbWVTZWxlY3Rpb246bCxzdGVwU2VsZWN0aW9uT3ZlcnJpZGU6TGEuT1ZFUlJJREVfQVNfRU5BQkxFRCxyYW5nZVNlbGVjdGlvbk92ZXJyaWRlOnZvaWQgMD09PWwuZW5kPy5zdGVwP0xhLk9WRVJSSURFX0FTX0RJU0FCTEVEOkxhLk9WRVJSSURFX0FTX0VOQUJMRUR9KSx7Li4ubixsaW5rZWRUaW1lU2VsZWN0aW9uOmwsY2FyZFN0ZXBJbmRleDpjLGNhcmRTdGF0ZU1hcDpkLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpzfX0pLEVlKE12LChuLHtjYXJkSWQ6dCx1c2VyVmlld0JveDplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLHVzZXJWaWV3Qm94OmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLEVlKERkLChuLHthZmZvcmRhbmNlOnQsY2FyZElkOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07aWYoZSl7bGV0e3RpbWVTZWxlY3Rpb246cywuLi5sfT1pW2VdfHx7fTtpW2VdPXsuLi5sLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpMYS5PVkVSUklERV9BU19ESVNBQkxFRH19ZWxzZSBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHM9PntpW3NdPXsuLi5pW3NdLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpMYS5OT05FfX0pO2lmKCFuLmxpbmtlZFRpbWVFbmFibGVkJiZ0IT09R2EuQ0hFQ0tfQk9YKXJldHVybnsuLi5uLGNhcmRTdGF0ZU1hcDppfTtsZXQgcj0hbi5zdGVwU2VsZWN0b3JFbmFibGVkLG89ciYmbi5saW5rZWRUaW1lRW5hYmxlZCxhPXImJm4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkO3JldHVybnsuLi5uLGxpbmtlZFRpbWVFbmFibGVkOm8sc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDphLGNhcmRTdGF0ZU1hcDppfX0pLEVlKGZULChuLHt0YWI6dH0pPT4oey4uLm4sdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLEVlKGUwLChuLHtkYXRhVGFibGVNb2RlOnQsaGVhZGVyczplfSk9PntsZXQgaT1bXSxyPVtdO3JldHVybiBlLmZvckVhY2gobz0+e28uZW5hYmxlZD9pLnB1c2gobyk6ci5wdXNoKG8pfSksdD09PWxvLlJBTkdFP3suLi5uLHJhbmdlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX19KSxFZSh0MCwobix7ZGF0YVRhYmxlTW9kZTp0LGhlYWRlcjplLGNhcmRJZDppfSk9PntsZXR7Y2FyZFN0YXRlTWFwOnIscmFuZ2VTZWxlY3Rpb25FbmFibGVkOm8sbGlua2VkVGltZUVuYWJsZWQ6YX09bixzPWk/bzEocixvLGEsaSk6dD09PWxvLlJBTkdFLGw9cz9uLnJhbmdlU2VsZWN0aW9uSGVhZGVyczpuLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsYz1sLmZpbmRJbmRleChwPT5wLm5hbWU9PT1lLm5hbWUpLGQ9ZnVuY3Rpb24obil7bGV0IHQ9MDtyZXR1cm4gbi5mb3JFYWNoKGU9PntlLmVuYWJsZWQmJnQrK30pLHR9KGwpO2xbY10uZW5hYmxlZCYmZC0tO2xldCB1PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bLi4uZV07cmV0dXJuIGkuc3BsaWNlKG4sMSksaS5zcGxpY2UodCwwLGVbbl0pLGl9KGMsZCxsKTtyZXR1cm4gdVtkXT17Li4udVtkXSxlbmFibGVkOiF1W2RdLmVuYWJsZWR9LHM/ey4uLm4scmFuZ2VTZWxlY3Rpb25IZWFkZXJzOnV9OnsuLi5uLHNpbmdsZVNlbGVjdGlvbkhlYWRlcnM6dX19KSxFZShCVCwobix7cGx1Z2luOnR9KT0+e2xldCBlPW5ldyBTZXQobi5maWx0ZXJlZFBsdWdpblR5cGVzKTtyZXR1cm4gZS5oYXModCk/ZS5kZWxldGUodCk6ZS5hZGQodCksT2JqZWN0LnZhbHVlcyhxbikuZXZlcnkoaT0+ZS5oYXMoaSkpJiYoZT1uZXcgU2V0KSx7Li4ubixmaWx0ZXJlZFBsdWdpblR5cGVzOmV9fSksRWUoVlQsbj0+KHsuLi5uLGZpbHRlcmVkUGx1Z2luVHlwZXM6bmV3IFNldH0pKSxFZShkVCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiFuLmlzU2V0dGluZ3NQYW5lT3Blbn0pKSxFZShjVCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiExfSkpLEVlKHVULG49Pih7Li4ubixpc1NsaWRlb3V0TWVudU9wZW46IW4uaXNTbGlkZW91dE1lbnVPcGVufSkpLEVlKHBULChuLHttb2RlOnR9KT0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3BlbjohMCxpc1NldHRpbmdzUGFuZU9wZW46ITAsdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLEVlKG1ULG49Pih7Li4ubixpc1NsaWRlb3V0TWVudU9wZW46ITF9KSkpO2Z1bmN0aW9uIGhRKG4sdCl7cmV0dXJuIHlmKGVTZSwkd2UpKG4sdCl9ZnVuY3Rpb24gZlEobix0KXtyZXR1cm57dGFnRGVzY3JpcHRpb25zOm5bdF0udGFnRGVzY3JpcHRpb25zLHRhZ1RvUnVuczp0U2Uoblt0XS5ydW5UYWdJbmZvKX19ZnVuY3Rpb24gdFNlKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuKWZvcihsZXQgaSBvZiBuW2VdKXRbaV09Wy4uLnRbaV18fFtdLGVdO3JldHVybiB0fXZhciByU2U9cShoZCxVcywobix0LGUpPT50P3suLi50LGxvYWRTdGF0ZTpuLGlkOmV9Om51bGwpLGdRPXllKCJbTWV0cmljcyBFZmZlY3RzXSBJbml0IiksX1E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkPXRoaXMuYWN0aW9ucyQucGlwZSh3aShnUSx4YyxnZixMcyksWXQodGhpcy5zdG9yZS5zZWxlY3QocW8pLHRoaXMuc3RvcmUuc2VsZWN0KHdiKSksVmUoKFssbyxhXSk9Pm89PT14YiYmYS5zdGF0ZT09PURlLk5PVF9MT0FERUQpKSx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kPXRoaXMuYWN0aW9ucyQucGlwZSh3aShzcyxIcyksWXQodGhpcy5zdG9yZS5zZWxlY3QocW8pKSxWZSgoWyxvXSk9Pm89PT14YikpLHRoaXMubG9hZFRhZ01ldGFkYXRhJD1jbih0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkLHRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQpLnBpcGUoWXQodGhpcy5zdG9yZS5zZWxlY3Qod2IpLHRoaXMuc3RvcmUuc2VsZWN0KHJvKSksVmUoKFssbyxhXSk9Pm8uc3RhdGUhPT1EZS5MT0FESU5HJiZudWxsIT09YSksZXUoMTApLFZ0KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChoVCgpKX0pLHlpKChbLCxvXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFRhZ01ldGFkYXRhKG8pLnBpcGUoVnQoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goZ1Qoe3RhZ01ldGFkYXRhOmF9KSl9KSxmbygoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goX1QoKSkscXQobnVsbCkpKSkpKSx0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKHdpKEpnKSxZdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxVKChbLG9dKT0+by5maWx0ZXIoYT0+YS5sb2FkU3RhdGU9PT1EZS5OT1RfTE9BREVEKSkpLHRoaXMudmlzaWJsZUNhcmRzUmVsb2FkZWQkPXRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQucGlwZShZdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxVKChbLG9dKT0+by5maWx0ZXIoYT0+YS5sb2FkU3RhdGUhPT1EZS5MT0FESU5HKSkpLHRoaXMubG9hZFRpbWVTZXJpZXMkPWNuKHRoaXMudmlzaWJsZUNhcmRzV2l0aG91dERhdGFDaGFuZ2VkJCx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJCkucGlwZShWZShvPT5vLmxlbmd0aD4wKSxZdCh0aGlzLnN0b3JlLnNlbGVjdChybykucGlwZShWZShvPT5udWxsIT09bykpKSxobigoW28sYV0pPT50aGlzLmZldGNoVGltZVNlcmllc0ZvckNhcmRzKG8sYSkpKSx0aGlzLmRhdGFFZmZlY3RzJD1PcigoKT0+Y24odGhpcy5sb2FkVGFnTWV0YWRhdGEkLHRoaXMubG9hZFRpbWVTZXJpZXMkKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBnUSgpfWdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChVVykucGlwZSh5aShpPT5pLnNpemU/cG8oWy4uLmldLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdChyU2UsbykucGlwZSh6dCgxKSkpKTpxdChbXSkpLFUoaT0+aS5maWx0ZXIoQm9vbGVhbikpKX1mZXRjaFRpbWVTZXJpZXMoZSl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaFRpbWVTZXJpZXMoW2VdKS5waXBlKFZ0KGk9PntsZXQgcj1pLmZpbHRlcihYUyk7ci5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRpbWUgc2VyaWVzIHJlc3BvbnNlIGNvbnRhaW5lZCBlcnJvcnM6IixyKSx0aGlzLnN0b3JlLmRpc3BhdGNoKE9UKHtyZXNwb25zZTppWzBdfSkpfSksZm8oKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKFBUKHtyZXF1ZXN0OmV9KSkscXQobnVsbCkpKSl9ZmV0Y2hUaW1lU2VyaWVzRm9yQ2FyZHMoZSxpKXtyZXR1cm4gcXQoZS5tYXAobz0+e2xldHtwbHVnaW46YSx0YWc6cyxydW5JZDpsLHNhbXBsZTpjfT1vLGQ9Y3MoYSk/e3BsdWdpbjphLHRhZzpzLHJ1bklkOmx9OntwbHVnaW46YSx0YWc6cyxleHBlcmltZW50SWRzOml9O3JldHVybiB2b2lkIDAhPT1jJiYoZC5zYW1wbGU9YyksZH0pKS5waXBlKFZ0KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGtUKHtyZXF1ZXN0czpvfSkpfSksaG4obz0+Y24oLi4uby5tYXAocz0+dGhpcy5mZXRjaFRpbWVTZXJpZXMocykpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPKFdvKSxPKGtlKSxPKE1jKSl9LG4uXHUwMjc1cHJvdj1wZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksUUw9bmV3IGllKCJNZXRyaWNzIFN0b3JlIENvbmZpZyIpLFpMPW5ldyBpZSgiTWV0cmljcyBJbml0aWFsIFNldHRpbmdzIENvbmZpZyIpO2Z1bmN0aW9uIHlRKG4pe3JldHVybiBuP3tpbml0aWFsU3RhdGU6ey4uLlhMLHNldHRpbmdzOm59fTp7aW5pdGlhbFN0YXRlOlhMfX12YXIgcHM9KCgpPT4oZnVuY3Rpb24obil7bltuLkxFRlQ9MV09IkxFRlQiLG5bbi5SSUdIVD0yXT0iUklHSFQiLG5bbi5NSURETEU9NF09Ik1JRERMRSIsbltuLkZPVVJUSD04XT0iRk9VUlRIIixuW24uRklGVEg9MzJdPSJGSUZUSCJ9KHBzfHwocHM9e30pKSxwcykpKCksYlE9MDtmdW5jdGlvbiBvU2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDMpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmV4cGFuZFNpZGViYXIoKSl9KSxQKDEsIm1hdC1pY29uIiw0KSxnKCl9fWZ1bmN0aW9uIGFTZShuLHQpe2lmKDEmbiYmKGgoMCwibmF2Iiw1KSxHKDEsImFzeW5jIiksRygyLCJhc3luYyIpLFh0KDMsMSksZygpKSwyJm4pe2xldCBlPXcoKTtNdCgid2lkdGgiLFcoMSw2LGUud2lkdGgkKSwiJSIpKCJtaW4td2lkdGgiLGUuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYLCJweCIpKCJtYXgtd2lkdGgiLFcoMiw4LGUucnVuc1RhYmxlRnVsbFNjcmVlbiQpPzEwMDoiIiwiJSIpfX1mdW5jdGlvbiBzU2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDYpLEQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5yZXNpemVHcmFiYmVkKCkpfSksZygpfX12YXIgbFNlPVtbWyIiLCJtYWluIiwiIl1dLFtbIiIsInNpZGViYXIiLCIiXV1dLGNTZT1bIlttYWluXSIsIltzaWRlYmFyXSJdLHhRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJD10aGlzLnN0b3JlLnNlbGVjdChaaCksdGhpcy53aWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoVFMpLnBpcGUoVmkodGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJCksVSgoW3Isb10pPT5vPzEwMDpyKSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBBZSx0aGlzLnJlc2l6aW5nPSExLHRoaXMuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYPTc1LGFpKGkubmF0aXZlRWxlbWVudCwibW91c2Vtb3ZlIikucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFZlKCgpPT50aGlzLnJlc2l6aW5nKSkuc3Vic2NyaWJlKHI9PntpZigoci5idXR0b25zJnBzLkxFRlQpIT09cHMuTEVGVClyZXR1cm4gdm9pZCh0aGlzLnJlc2l6aW5nPSExKTtyLnByZXZlbnREZWZhdWx0KCk7bGV0e3dpZHRoOm99PWkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnN0b3JlLmRpc3BhdGNoKFloKHt3aWR0aEluUGVyY2VudDpyLmNsaWVudFg8PXRoaXMuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYPzA6ci5jbGllbnRYL28qMTAwfSkpfSksYWkoaS5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5yZXNpemluZz0hMX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1yZXNpemVHcmFiYmVkKCl7dGhpcy5yZXNpemluZz0hMH1leHBhbmRTaWRlYmFyKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChZaCh7d2lkdGhJblBlcmNlbnQ6MjB9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpLEMoYmUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXNoYm9hcmQtbGF5b3V0Il1dLG5nQ29udGVudFNlbGVjdG9yczpjU2UsZGVjbHM6Nyx2YXJzOjksY29uc3RzOltbImNsYXNzIiwiZXhwYW5kIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiwzLCJ3aWR0aCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwicmVzaXplciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsImV4cGFuZCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il0sWzEsInNpZGViYXIiXSxbMSwicmVzaXplciIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZ24obFNlKSxTKDAsb1NlLDIsMCwiYnV0dG9uIiwwKSxHKDEsImFzeW5jIiksUygyLGFTZSw0LDEwLCJuYXYiLDEpLEcoMywiYXN5bmMiKSxTKDQsc1NlLDEsMCwiZGl2IiwyKSxHKDUsImFzeW5jIiksWHQoNikpLDImZSYmKF8oIm5nSWYiLDA9PT1XKDEsMyxpLndpZHRoJCkpLGIoMiksXygibmdJZiIsVygzLDUsaS53aWR0aCQpPjApLGIoMiksXygibmdJZiIsVyg1LDcsaS53aWR0aCQpPjApKX0sZGVwZW5kZW5jaWVzOltGZSxEbixsdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDo4MHZ3fS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNlYmViZWI7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXg6MCAwO2p1c3RpZnktc2VsZjpzdHJldGNofWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NX0uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4fS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDJweDtjdXJzb3I6ZXctcmVzaXplO2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LXNlbGY6c3RyZXRjaH0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlci1jb2xvcjojY2NjO291dGxpbmU6M3B4IHNvbGlkICNjY2M7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye291dGxpbmUtY29sb3I6Izc3Nztib3JkZXItY29sb3I6Izc3N30uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MCAxcHggMCAwO2NvbG9yOmluaGVyaXQ7Y29udGFpbjpjb250ZW50O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LXNlbGY6c3RyZXRjaDtwYWRkaW5nOjB9LmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksS0w9bmV3IFdlYWtNYXAsRXY9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJvb3Q9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMuZGVzdHJveWVkVGFyZ2V0cz1uZXcgV2Vha1NldH1pbml0aWFsaXplKHQpe2lmKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpcmV0dXJuO3RoaXMuaW50ZXJzZWN0aW9uQ2FsbGJhY2s9dDtsZXQgZT17dGhyZXNob2xkOjAscm9vdDp0aGlzLnJvb3Q/P251bGx9O3RoaXMuYnVmZmVyJiYoZS5yb290TWFyZ2luPXRoaXMuYnVmZmVyKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpLGUpfWFkZCh0KXt0aGlzLmVuc3VyZUluaXRpYWxpemVkKCkmJnRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0KX13aWxsRGVzdHJveSh0KXt0aGlzLmVuc3VyZUluaXRpYWxpemVkKCkmJnRoaXMuZGVzdHJveWVkVGFyZ2V0cy5hZGQodCl9ZW5zdXJlSW5pdGlhbGl6ZWQoKXtpZighdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcil0aHJvdyBuZXcgRXJyb3IoIkNhcmRPYnNlcnZlciBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UiKTtyZXR1cm4hMH1vbkNhcmRJbnRlcnNlY3Rpb24odCl7dC5zb3J0KChyLG8pPT5yLnRpbWUtby50aW1lKTtsZXQgZT1uZXcgU2V0LGk9bmV3IFNldDtmb3IobGV0e2lzSW50ZXJzZWN0aW5nOnIsdGFyZ2V0Om99b2YgdClyPyhlLmFkZChvKSxpLmRlbGV0ZShvKSk6KGUuZGVsZXRlKG8pLGkuYWRkKG8pKSx0aGlzLmRlc3Ryb3llZFRhcmdldHMuaGFzKG8pJiYhciYmKHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5kZWxldGUobyksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci51bm9ic2VydmUobykpO3RoaXMuaW50ZXJzZWN0aW9uQ2FsbGJhY2soZSxpKX1vbkNhcmRJbnRlcnNlY3Rpb25Gb3JUZXN0KHQpe3RoaXMub25DYXJkSW50ZXJzZWN0aW9uKHQpfX0sQ1E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuc3RvcmU9aX1vbkNhcmRJbnRlcnNlY3Rpb24oZSxpKXtsZXQgcj1bLi4uZV0ubWFwKGE9PntsZXQgcz1LTC5nZXQoYSk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDpzLmVsZW1lbnRJZCxjYXJkSWQ6cy5jYXJkSWR9fSksbz1bLi4uaV0ubWFwKGE9PntsZXQgcz1LTC5nZXQoYSk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDpzLmVsZW1lbnRJZCxjYXJkSWQ6cy5jYXJkSWR9fSk7dGhpcy5zdG9yZS5kaXNwYXRjaChKZyh7ZW50ZXJlZENhcmRzOnIsZXhpdGVkQ2FyZHM6b30pKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O0tMLnNldChlLHtlbGVtZW50SWQ6KGJRKyssU3ltYm9sKGJRKSksY2FyZElkOnRoaXMuY2FyZElkfSksdGhpcy5jYXJkT2JzZXJ2ZXJ8fCh0aGlzLmNhcmRPYnNlcnZlcj1uZXcgRXYpLHRoaXMuY2FyZE9ic2VydmVyLmluaXRpYWxpemUodGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24uYmluZCh0aGlzKSksdGhpcy5jYXJkT2JzZXJ2ZXIuYWRkKGUpfW5nT25EZXN0cm95KCl7dGhpcy5jYXJkT2JzZXJ2ZXImJnRoaXMuY2FyZE9ic2VydmVyLndpbGxEZXN0cm95KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KX1ob3N0Rm9yVGVzdCgpe3JldHVybiB0aGlzLmhvc3R9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoa2UpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2FyZExhenlMb2FkZXIiLCIiXV0saW5wdXRzOntjYXJkSWQ6WyJjYXJkTGF6eUxvYWRlciIsImNhcmRJZCJdLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn19KSxufSkoKTtmdW5jdGlvbiBwU2Uobix0KXsxJm4mJihUdCgwKSxYdCgxKSxEdCgpKX12YXIgZlNlPVsiKiJdLE1RPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1pfW5nT25Jbml0KCl7aWYodGhpcy5jdXN0b21pemFibGVDb21wb25lbnQpe2xldCBlPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY3VzdG9taXphYmxlQ29tcG9uZW50LmNvbnN0cnVjdG9yKTt0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhabiksQyhRcikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWN1c3RvbWl6YXRpb24iXV0saW5wdXRzOntjdXN0b21pemFibGVDb21wb25lbnQ6ImN1c3RvbWl6YWJsZUNvbXBvbmVudCJ9LG5nQ29udGVudFNlbGVjdG9yczpmU2UsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGduKCksUygwLHBTZSwyLDAsIm5nLWNvbnRhaW5lciIsMCkpLDImZSYmXygibmdJZiIsIWkuY3VzdG9taXphYmxlQ29tcG9uZW50KX0sZGVwZW5kZW5jaWVzOltGZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksaFNlPVsiYnV0dG9uIl0sZ1NlPVsiKiJdLHdRPW5ldyBpZSgiTUFUX0JVVFRPTl9UT0dHTEVfREVGQVVMVF9PUFRJT05TIiksU1E9bmV3IGllKCJNYXRCdXR0b25Ub2dnbGVHcm91cCIpLF9TZT17cHJvdmlkZTpIcix1c2VFeGlzdGluZzpWbigoKT0+SkwpLG11bHRpOiEwfSxFUT0wLGpUPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSxKTD0oKCk9PntjbGFzcyBue2dldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9c2V0IG5hbWUoZSl7dGhpcy5fbmFtZT1lLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVV0KGUpfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2UubWFwKGk9PmkudmFsdWUpOmVbMF0/ZVswXS52YWx1ZTp2b2lkIDB9c2V0IHZhbHVlKGUpe3RoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfWdldCBzZWxlY3RlZCgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2U6ZVswXXx8bnVsbH1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKGUpe3RoaXMuX211bHRpcGxlPVV0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVV0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1jb25zdHJ1Y3RvcihlLGkpe3RoaXMuX2NoYW5nZURldGVjdG9yPWUsdGhpcy5fdmVydGljYWw9ITEsdGhpcy5fbXVsdGlwbGU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl9uYW1lPSJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC0iK0VRKyssdGhpcy52YWx1ZUNoYW5nZT1uZXcgTCx0aGlzLmNoYW5nZT1uZXcgTCx0aGlzLmFwcGVhcmFuY2U9aSYmaS5hcHBlYXJhbmNlP2kuYXBwZWFyYW5jZToic3RhbmRhcmQifW5nT25Jbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWw9bmV3IHhnKHRoaXMubXVsdGlwbGUsdm9pZCAwLCExKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4udGhpcy5fYnV0dG9uVG9nZ2xlcy5maWx0ZXIoZT0+ZS5jaGVja2VkKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnZhbHVlPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5fb25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9X2VtaXRDaGFuZ2VFdmVudChlKXtsZXQgaT1uZXcgalQoZSx0aGlzLnZhbHVlKTt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKGkudmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQoaSl9X3N5bmNCdXR0b25Ub2dnbGUoZSxpLHI9ITEsbz0hMSl7IXRoaXMubXVsdGlwbGUmJnRoaXMuc2VsZWN0ZWQmJiFlLmNoZWNrZWQmJih0aGlzLnNlbGVjdGVkLmNoZWNrZWQ9ITEpLHRoaXMuX3NlbGVjdGlvbk1vZGVsP2k/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGUpOnRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGUpOm89ITAsbz9Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLl91cGRhdGVNb2RlbFZhbHVlKGUscikpOnRoaXMuX3VwZGF0ZU1vZGVsVmFsdWUoZSxyKX1faXNTZWxlY3RlZChlKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoZSl9X2lzUHJlY2hlY2tlZChlKXtyZXR1cm4hKHR5cGVvZiB0aGlzLl9yYXdWYWx1ZT4idSIpJiYodGhpcy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0aGlzLl9yYXdWYWx1ZSk/dGhpcy5fcmF3VmFsdWUuc29tZShpPT5udWxsIT1lLnZhbHVlJiZpPT09ZS52YWx1ZSk6ZS52YWx1ZT09PXRoaXMuX3Jhd1ZhbHVlKX1fc2V0U2VsZWN0aW9uQnlWYWx1ZShlKXt0aGlzLl9yYXdWYWx1ZT1lLHRoaXMuX2J1dHRvblRvZ2dsZXMmJih0aGlzLm11bHRpcGxlJiZlPyhBcnJheS5pc0FycmF5KGUpLHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksZS5mb3JFYWNoKGk9PnRoaXMuX3NlbGVjdFZhbHVlKGkpKSk6KHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksdGhpcy5fc2VsZWN0VmFsdWUoZSkpKX1fY2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMuX2J1dHRvblRvZ2dsZXMuZm9yRWFjaChlPT5lLmNoZWNrZWQ9ITEpfV9zZWxlY3RWYWx1ZShlKXtsZXQgaT10aGlzLl9idXR0b25Ub2dnbGVzLmZpbmQocj0+bnVsbCE9ci52YWx1ZSYmci52YWx1ZT09PWUpO2kmJihpLmNoZWNrZWQ9ITAsdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGkpKX1fdXBkYXRlTW9kZWxWYWx1ZShlLGkpe2kmJnRoaXMuX2VtaXRDaGFuZ2VFdmVudChlKSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSl9X21hcmtCdXR0b25zRm9yQ2hlY2soKXt0aGlzLl9idXR0b25Ub2dnbGVzPy5mb3JFYWNoKGU9PmUuX21hcmtGb3JDaGVjaygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhGdCksQyh3USw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJmNpKHIsYlNlLDUpLDImZSl7bGV0IG87d2Uobz1TZSgpKSYmKGkuX2J1dHRvblRvZ2dsZXM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JvdXAiLDEsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihQZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCksUWUoIm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIixpLnZlcnRpY2FsKSgibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCIsInN0YW5kYXJkIj09PWkuYXBwZWFyYW5jZSkpfSxpbnB1dHM6e2FwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLG5hbWU6Im5hbWUiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCIsdmFsdWU6InZhbHVlIixtdWx0aXBsZToibXVsdGlwbGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsY2hhbmdlOiJjaGFuZ2UifSxleHBvcnRBczpbIm1hdEJ1dHRvblRvZ2dsZUdyb3VwIl0sZmVhdHVyZXM6W1J0KFtfU2Use3Byb3ZpZGU6U1EsdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSx5U2U9UW8oY2xhc3N7fSksYlNlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5U2V7Z2V0IGJ1dHRvbklkKCl7cmV0dXJuYCR7dGhpcy5pZH0tYnV0dG9uYH1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuYXBwZWFyYW5jZTp0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKGUpe3RoaXMuX2FwcGVhcmFuY2U9ZX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX2lzU2VsZWN0ZWQodGhpcyk6dGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZChlKXtsZXQgaT1VdChlKTtpIT09dGhpcy5fY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9aSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiZ0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8dGhpcy5idXR0b25Ub2dnbGVHcm91cCYmdGhpcy5idXR0b25Ub2dnbGVHcm91cC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9VXQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9lbGVtZW50UmVmPXIsdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5fY2hlY2tlZD0hMSx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5jaGFuZ2U9bmV3IEw7bGV0IGw9TnVtYmVyKGEpO3RoaXMudGFiSW5kZXg9bHx8MD09PWw/bDpudWxsLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA9ZSx0aGlzLmFwcGVhcmFuY2U9cyYmcy5hcHBlYXJhbmNlP3MuYXBwZWFyYW5jZToic3RhbmRhcmQifW5nT25Jbml0KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLmlkPXRoaXMuaWR8fCJtYXQtYnV0dG9uLXRvZ2dsZS0iK0VRKyssZSYmKGUuX2lzUHJlY2hlY2tlZCh0aGlzKT90aGlzLmNoZWNrZWQ9ITA6ZS5faXNTZWxlY3RlZCh0aGlzKSE9PXRoaXMuX2NoZWNrZWQmJmUuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLmJ1dHRvblRvZ2dsZUdyb3VwO3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSxlJiZlLl9pc1NlbGVjdGVkKHRoaXMpJiZlLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsITEsITEsITApfWZvY3VzKGUpe3RoaXMuX2J1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fb25CdXR0b25DbGljaygpe2xldCBlPSEhdGhpcy5faXNTaW5nbGVTZWxlY3RvcigpfHwhdGhpcy5fY2hlY2tlZDtlIT09dGhpcy5fY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9ZSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiYodGhpcy5idXR0b25Ub2dnbGVHcm91cC5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQsITApLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX29uVG91Y2hlZCgpKSksdGhpcy5jaGFuZ2UuZW1pdChuZXcgalQodGhpcyx0aGlzLnZhbHVlKSl9X21hcmtGb3JDaGVjaygpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9nZXRCdXR0b25OYW1lKCl7cmV0dXJuIHRoaXMuX2lzU2luZ2xlU2VsZWN0b3IoKT90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLm5hbWU6dGhpcy5uYW1lfHxudWxsfV9pc1NpbmdsZVNlbGVjdG9yKCl7cmV0dXJuIHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJiF0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLm11bHRpcGxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFNRLDgpLEMoRnQpLEMoYmUpLEMobHIpLFZyKCJ0YWJpbmRleCIpLEMod1EsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmWWUoaFNlLDUpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkuX2J1dHRvbkVsZW1lbnQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXMoKX0pLDImZSYmKFBlKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiaWQiLGkuaWQpKCJuYW1lIixudWxsKSxRZSgibWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSIsIWkuYnV0dG9uVG9nZ2xlR3JvdXApKCJtYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIixpLmNoZWNrZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PT1pLmFwcGVhcmFuY2UpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGlkOiJpZCIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIix0YWJJbmRleDoidGFiSW5kZXgiLGFwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLGNoZWNrZWQ6ImNoZWNrZWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRCdXR0b25Ub2dnbGUiXSxmZWF0dXJlczpbTGVdLG5nQ29udGVudFNlbGVjdG9yczpnU2UsZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGduKCksaCgwLCJidXR0b24iLDAsMSksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2soKX0pLGgoMiwic3BhbiIsMiksWHQoMyksZygpKCksUCg0LCJzcGFuIiwzKSg1LCJzcGFuIiw0KSksMiZlKXtsZXQgcj10dCgxKTtfKCJpZCIsaS5idXR0b25JZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxQZSgidGFiaW5kZXgiLGkuZGlzYWJsZWQ/LTE6aS50YWJJbmRleCkoImFyaWEtcHJlc3NlZCIsaS5jaGVja2VkKSgibmFtZSIsaS5fZ2V0QnV0dG9uTmFtZSgpKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXJpYUxhYmVsbGVkYnkpLGIoNSksXygibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpfX0sZGVwZW5kZW5jaWVzOltGcl0sc3R5bGVzOlsiLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCk6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLWJvdHRvbTpzb2xpZCAzNnB4O29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZDpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi42fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksR1Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1F0LFpvLFF0XX0pLG59KSgpLFRRPShnbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSwicHJpbWFyeSIpLG5ldyBpZSgibWF0LXByb2dyZXNzLXNwaW5uZXItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntkaWFtZXRlcjpDU2V9fX0pKSxDU2U9MTAwO2Z1bmN0aW9uIE1TZShuLHQpe2lmKDEmbiYmKFRuKCksUCgwLCJjaXJjbGUiLDQpKSwyJm4pe2xldCBlPXcoKSxpPXR0KDEpO010KCJhbmltYXRpb24tbmFtZSIsIm1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtIitlLl9zcGlubmVyQW5pbWF0aW9uTGFiZWwpKCJzdHJva2UtZGFzaG9mZnNldCIsZS5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5IixlLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsZS5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpKCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4oaSkpLFBlKCJyIixlLl9nZXRDaXJjbGVSYWRpdXMoKSl9fWZ1bmN0aW9uIHdTZShuLHQpe2lmKDEmbiYmKFRuKCksUCgwLCJjaXJjbGUiLDQpKSwyJm4pe2xldCBlPXcoKSxpPXR0KDEpO010KCJzdHJva2UtZGFzaG9mZnNldCIsZS5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5IixlLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsZS5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpKCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4oaSkpLFBlKCJyIixlLl9nZXRDaXJjbGVSYWRpdXMoKSl9fXZhciBFU2U9Z28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0sInByaW1hcnkiKSx6cj1jbGFzcyBleHRlbmRzIEVTZXtnZXQgZGlhbWV0ZXIoKXtyZXR1cm4gdGhpcy5fZGlhbWV0ZXJ9c2V0IGRpYW1ldGVyKHQpe3RoaXMuX2RpYW1ldGVyPURpKHQpLHRoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbD10aGlzLl9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKSx0aGlzLl9zdHlsZVJvb3QmJnRoaXMuX2F0dGFjaFN0eWxlTm9kZSgpfWdldCBzdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLl9zdHJva2VXaWR0aHx8dGhpcy5kaWFtZXRlci8xMH1zZXQgc3Ryb2tlV2lkdGgodCl7dGhpcy5fc3Ryb2tlV2lkdGg9RGkodCl9Z2V0IHZhbHVlKCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl92YWx1ZTowfXNldCB2YWx1ZSh0KXt0aGlzLl92YWx1ZT1NYXRoLm1heCgwLE1hdGgubWluKDEwMCxEaSh0KSkpfWNvbnN0cnVjdG9yKHQsZSxpLHIsbyxhLHMsbCl7c3VwZXIodCksdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9kaWFtZXRlcj0xMDAsdGhpcy5fdmFsdWU9MCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249eW4uRU1QVFksdGhpcy5tb2RlPSJkZXRlcm1pbmF0ZSI7bGV0IGM9enIuX2RpYW1ldGVyczt0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWw9dGhpcy5fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCksYy5oYXMoaS5oZWFkKXx8Yy5zZXQoaS5oZWFkLG5ldyBTZXQoWzEwMF0pKSx0aGlzLl9ub29wQW5pbWF0aW9ucz0iTm9vcEFuaW1hdGlvbnMiPT09ciYmISFvJiYhby5fZm9yY2VBbmltYXRpb25zLCJtYXQtc3Bpbm5lciI9PT10Lm5hdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHRoaXMubW9kZT0iaW5kZXRlcm1pbmF0ZSIpLG8mJihvLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1vLmNvbG9yKSxvLmRpYW1ldGVyJiYodGhpcy5kaWFtZXRlcj1vLmRpYW1ldGVyKSxvLnN0cm9rZVdpZHRoJiYodGhpcy5zdHJva2VXaWR0aD1vLnN0cm9rZVdpZHRoKSksZS5pc0Jyb3dzZXImJmUuU0FGQVJJJiZzJiZhJiZsJiYodGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXMuY2hhbmdlKDE1MCkuc3Vic2NyaWJlKCgpPT57ImluZGV0ZXJtaW5hdGUiPT09dGhpcy5tb2RlJiZsLnJ1bigoKT0+YS5tYXJrRm9yQ2hlY2soKSl9KSl9bmdPbkluaXQoKXtsZXQgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fc3R5bGVSb290PU8xKHQpfHx0aGlzLl9kb2N1bWVudC5oZWFkLHRoaXMuX2F0dGFjaFN0eWxlTm9kZSgpLHQuY2xhc3NMaXN0LmFkZCgibWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb24iKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9nZXRDaXJjbGVSYWRpdXMoKXtyZXR1cm4odGhpcy5kaWFtZXRlci0xMCkvMn1fZ2V0Vmlld0JveCgpe2xldCB0PTIqdGhpcy5fZ2V0Q2lyY2xlUmFkaXVzKCkrdGhpcy5zdHJva2VXaWR0aDtyZXR1cm5gMCAwICR7dH0gJHt0fWB9X2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKXtyZXR1cm4gMipNYXRoLlBJKnRoaXMuX2dldENpcmNsZVJhZGl1cygpfV9nZXRTdHJva2VEYXNoT2Zmc2V0KCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCkqKDEwMC10aGlzLl92YWx1ZSkvMTAwOm51bGx9X2dldENpcmNsZVN0cm9rZVdpZHRoKCl7cmV0dXJuIHRoaXMuc3Ryb2tlV2lkdGgvdGhpcy5kaWFtZXRlcioxMDB9X2dldENpcmNsZVRyYW5zZm9ybU9yaWdpbih0KXtsZXQgZT01MCoodC5jdXJyZW50U2NhbGU/PzEpO3JldHVybmAke2V9JSAke2V9JWB9X2F0dGFjaFN0eWxlTm9kZSgpe2xldCB0PXRoaXMuX3N0eWxlUm9vdCxlPXRoaXMuX2RpYW1ldGVyLGk9enIuX2RpYW1ldGVycyxyPWkuZ2V0KHQpO2lmKCFyfHwhci5oYXMoZSkpe2xldCBvPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7by5zZXRBdHRyaWJ1dGUoIm1hdC1zcGlubmVyLWFuaW1hdGlvbiIsdGhpcy5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsKSxvLnRleHRDb250ZW50PXRoaXMuX2dldEFuaW1hdGlvblRleHQoKSx0LmFwcGVuZENoaWxkKG8pLHJ8fChyPW5ldyBTZXQsaS5zZXQodCxyKSksci5hZGQoZSl9fV9nZXRBbmltYXRpb25UZXh0KCl7bGV0IHQ9dGhpcy5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpO3JldHVybiJcbiBAa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtRElBTUVURVIge1xuICAgIDAlICAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTsgfVxuICAgIDEyLjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTsgfVxuICAgIDEyLjUwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKTsgfVxuICAgIDI1JSAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyk7IH1cblxuICAgIDI1LjAwMDElICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyB9XG4gICAgMzcuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7IH1cbiAgICAzNy41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpOyB9XG4gICAgNTAlICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyk7IH1cblxuICAgIDUwLjAwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH1cbiAgICA2Mi41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsgfVxuICAgIDYyLjUwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyk7IH1cbiAgICA3NSUgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKTsgfVxuXG4gICAgNzUuMDAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOyB9XG4gICAgODcuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsgfVxuICAgIDg3LjUwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyk7IH1cbiAgICAxMDAlICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKTsgfVxuICB9XG4iLnJlcGxhY2UoL1NUQVJUX1ZBTFVFL2csIiIrLjk1KnQpLnJlcGxhY2UoL0VORF9WQUxVRS9nLCIiKy4yKnQpLnJlcGxhY2UoL0RJQU1FVEVSL2csYCR7dGhpcy5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsfWApfV9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKXtyZXR1cm4gdGhpcy5kaWFtZXRlci50b1N0cmluZygpLnJlcGxhY2UoIi4iLCJfIil9fTt6ci5fZGlhbWV0ZXJzPW5ldyBXZWFrTWFwLHpyLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fHpyKShDKGJlKSxDKCRuKSxDKGt0LDgpLEMoZGksOCksQyhUUSksQyhGdCksQyhLbyksQyhhdCkpfSx6ci5cdTAyNzVjbXA9ayh7dHlwZTp6cixzZWxlY3RvcnM6W1sibWF0LXByb2dyZXNzLXNwaW5uZXIiXSxbIm1hdC1zcGlubmVyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJwcm9ncmVzc2JhciIsInRhYmluZGV4IiwiLTEiLDEsIm1hdC1wcm9ncmVzcy1zcGlubmVyIiwibWF0LXNwaW5uZXIiXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxlKXsyJnQmJihQZSgiYXJpYS12YWx1ZW1pbiIsImRldGVybWluYXRlIj09PWUubW9kZT8wOm51bGwpKCJhcmlhLXZhbHVlbWF4IiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlPzEwMDpudWxsKSgiYXJpYS12YWx1ZW5vdyIsImRldGVybWluYXRlIj09PWUubW9kZT9lLnZhbHVlOm51bGwpKCJtb2RlIixlLm1vZGUpLE10KCJ3aWR0aCIsZS5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixlLmRpYW1ldGVyLCJweCIpLFFlKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsZS5fbm9vcEFuaW1hdGlvbnMpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpYW1ldGVyOiJkaWFtZXRlciIsc3Ryb2tlV2lkdGg6InN0cm9rZVdpZHRoIixtb2RlOiJtb2RlIix2YWx1ZToidmFsdWUifSxleHBvcnRBczpbIm1hdFByb2dyZXNzU3Bpbm5lciJdLGZlYXR1cmVzOltMZV0sZGVjbHM6NCx2YXJzOjgsY29uc3RzOltbInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiwiZm9jdXNhYmxlIiwiZmFsc2UiLCJhcmlhLWhpZGRlbiIsInRydWUiLDMsIm5nU3dpdGNoIl0sWyJzdmciLCIiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsImFuaW1hdGlvbi1uYW1lIiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLXdpZHRoIiwidHJhbnNmb3JtLW9yaWdpbiIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIiwzLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2Utd2lkdGgiLCJ0cmFuc2Zvcm0tb3JpZ2luIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxlKXsxJnQmJihUbigpLGgoMCwic3ZnIiwwLDEpLFMoMixNU2UsMSwxMSwiY2lyY2xlIiwyKSxTKDMsd1NlLDEsOSwiY2lyY2xlIiwzKSxnKCkpLDImdCYmKE10KCJ3aWR0aCIsZS5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixlLmRpYW1ldGVyLCJweCIpLF8oIm5nU3dpdGNoIiwiaW5kZXRlcm1pbmF0ZSI9PT1lLm1vZGUpLFBlKCJ2aWV3Qm94IixlLl9nZXRWaWV3Qm94KCkpLGIoMiksXygibmdTd2l0Y2hDYXNlIiwhMCksYigxKSxfKCJuZ1N3aXRjaENhc2UiLCExKSl9LGRlcGVuZGVuY2llczpbJGksc3JdLHN0eWxlczpbIi5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgc3Zne3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0b3A6MDtsZWZ0OjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle2ZpbGw6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IDIyNW1zIGxpbmVhcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOkNhbnZhc1RleHR9Lm1hdC1wcm9ncmVzcy1zcGlubmVyW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlIDIwMDBtcyBsaW5lYXIgaW5maW5pdGV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb24tcHJvcGVydHk6c3Ryb2tlO2FuaW1hdGlvbi1kdXJhdGlvbjo0MDAwbXM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSk7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgc3ZnLC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBjaXJjbGV7YW5pbWF0aW9uOm5vbmU7dHJhbnNpdGlvbjpub25lfUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItbGluZWFyLXJvdGF0ZXswJXt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfTEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtMTAwezAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDApfTEyLjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDApfTEyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKX0yNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1LjAwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9MzcuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpfTUwJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpfTUwLjAwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9NjIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpfTc1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpfTc1LjAwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9ODcuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX0xMDAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyl9fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pO3ZhciBMYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbUXQsVGUsUXRdfSksbn0pKCk7ZnVuY3Rpb24gRFNlKG4sdCl7aWYoMSZuJiYoaCgwLCJiIiksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDtiKDEpLHplKCIiLGUuZGlzcGxheUFsaWFzLCI6Iil9fWZ1bmN0aW9uIElTZShuLHQpe2lmKDEmbiYmKGgoMCwibWF0LW9wdGlvbiIsMikoMSwic3BhbiIsMyksUygyLERTZSwyLDEsImIiLDQpLFQoMyksZygpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7XygidmFsdWUiLGUudmFsdWUpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCksYigxKSxxTSgidGl0bGUiLCIiLGUuZGlzcGxheUFsaWFzLCI6ICIsZS5kaXNwbGF5VGV4dCwiIiksYigxKSxfKCJuZ0lmIixlLmRpc3BsYXlBbGlhcyksYigxKSx6ZSgiICIsZS5kaXNwbGF5VGV4dCwiICIpfX12YXIgSVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5vcHRpb25zPVtdLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBMfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kcm9wZG93biJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsb3B0aW9uczoib3B0aW9ucyJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIn0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbMywidmFsdWUiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbMywidmFsdWUiLCJkaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiXSxbMSwib3B0aW9uLWNvbnRlbnQiLDMsInRpdGxlIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1hdC1zZWxlY3QiLDApLEQoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoby52YWx1ZSl9KSxTKDEsSVNlLDQsNiwibWF0LW9wdGlvbiIsMSksZygpKSwyJmUmJihfKCJ2YWx1ZSIsaS52YWx1ZSksYigxKSxfKCJuZ0Zvck9mIixpLm9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOltkbixGZSxHdSxIYV0sc3R5bGVzOlsibWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjZweH1tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG99ICAubWF0LXNlbGVjdC1wYW5lbHttYXgtd2lkdGg6NzB2d30gIG1hdC1vcHRpb24ubWF0LW9wdGlvbntoZWlnaHQ6YXV0b30gIC5tYXQtb3B0aW9uLXRleHR7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5vcHRpb24tY29udGVudFtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfSJdfSksbn0pKCksUlNlPWZ1bmN0aW9uKG4pe3JldHVybnsiY29sdW1uLWVkaXQtbWVudS10b2dnbGUiOiEwLCJ0b2dnbGUtb3BlbmVkIjpufX07ZnVuY3Rpb24ga1NlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwzMSksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25TbGlkZU91dFRvZ2dsZWQuZW1pdCgpKX0pLFAoMSwibWF0LWljb24iLDMyKSxUKDIsIiBFZGl0IFRhYmxlIENvbHVtbnMgIiksZygpfWlmKDImbil7bGV0IGU9dygpO18oIm5nQ2xhc3MiLFNuKDEsUlNlLGUuaXNTbGlkZU91dE1lbnVPcGVuKSl9fWZ1bmN0aW9uIFBTZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNlY3Rpb24iLDMzKSgxLCJoMyIsMSksVCgyLCJJbWFnZXMiKSxnKCksaCgzLCJkaXYiLDM0KSg0LCJkaXYiLDM1KSxUKDUsIkJyaWdodG5lc3MiKSxnKCksaCg2LCJkaXYiLDEzKSg3LCJtYXQtc2xpZGVyIiwzNiksRCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLmVtaXQoci52YWx1ZSkpfSksZygpLGgoOCwiYnV0dG9uIiwzNyksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuaW1hZ2VCcmlnaHRuZXNzUmVzZXQuZW1pdCgpKX0pLFAoOSwibWF0LWljb24iLDE2KSxnKCkoKSgpLGgoMTAsImRpdiIsMzgpKDExLCJkaXYiLDM5KSxUKDEyLCJDb250cmFzdCIpLGcoKSxoKDEzLCJkaXYiLDEzKSgxNCwibWF0LXNsaWRlciIsNDApLEQoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQuZW1pdChyLnZhbHVlKSl9KSxnKCksaCgxNSwiYnV0dG9uIiw0MSksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuaW1hZ2VDb250cmFzdFJlc2V0LmVtaXQoKSl9KSxQKDE2LCJtYXQtaWNvbiIsMTYpLGcoKSgpKCksaCgxNywiZGl2Iiw0MikoMTgsIm1hdC1jaGVja2JveCIsMjUpLEQoImNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQuZW1pdChyLmNoZWNrZWQpKX0pLFQoMTksIlNob3cgYWN0dWFsIGltYWdlIHNpemUiKSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dygpO2IoNyksXygibWF4IiwyZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpKCJ0aHVtYkxhYmVsIiwhMCkoImRpc3BsYXlXaXRoIixlLmZvcm1hdE1pbGxpVG9aZXJvdGgpLGIoNyksXygibWF4Iiw1ZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQ29udHJhc3RJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsZS5mb3JtYXRNaWxsaVRvWmVyb3RoKSxiKDQpLF8oImNoZWNrZWQiLGUuaW1hZ2VTaG93QWN0dWFsU2l6ZSl9fXZhciBSUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMubG9jYWxlPWUsdGhpcy5saW5rZWRUaW1lVG9nZ2xlZD1uZXcgTCx0aGlzLnN0ZXBTZWxlY3RvclRvZ2dsZWQ9bmV3IEwsdGhpcy5yYW5nZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEwsdGhpcy5vblNsaWRlT3V0VG9nZ2xlZD1uZXcgTCx0aGlzLlRvb2x0aXBTb3J0RHJvcGRvd25PcHRpb25zPVt7dmFsdWU6YW8uQUxQSEFCRVRJQ0FMLGRpc3BsYXlUZXh0OiJBbHBoYWJldGljYWwifSx7dmFsdWU6YW8uQVNDRU5ESU5HLGRpc3BsYXlUZXh0OiJBc2NlbmRpbmcifSx7dmFsdWU6YW8uREVTQ0VORElORyxkaXNwbGF5VGV4dDoiRGVzY2VuZGluZyJ9LHt2YWx1ZTphby5ORUFSRVNULGRpc3BsYXlUZXh0OiJOZWFyZXN0IFBpeGVsIn0se3ZhbHVlOmFvLk5FQVJFU1RfWSxkaXNwbGF5VGV4dDoiTmVhcmVzdCBZIn1dLHRoaXMudG9vbHRpcFNvcnRDaGFuZ2VkPW5ldyBMLHRoaXMuaWdub3JlT3V0bGllcnNDaGFuZ2VkPW5ldyBMLHRoaXMuWEF4aXNUeXBlPVBpLHRoaXMuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6UGkuU1RFUCxkaXNwbGF5VGV4dDoiU3RlcCJ9LHt2YWx1ZTpQaS5SRUxBVElWRSxkaXNwbGF5VGV4dDoiUmVsYXRpdmUifSx7dmFsdWU6UGkuV0FMTF9USU1FLGRpc3BsYXlUZXh0OiJXYWxsIn1dLHRoaXMueEF4aXNUeXBlQ2hhbmdlZD1uZXcgTCx0aGlzLk1BWF9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRT03MzUsdGhpcy5NSU5fQ0FSRF9XSURUSF9TTElERVJfVkFMVUU9MzM1LHRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQ9bmV3IEwsdGhpcy5jYXJkV2lkdGhDaGFuZ2VkPXRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQucGlwZShpYygyNTApKSx0aGlzLmNhcmRXaWR0aFJlc2V0PW5ldyBMLHRoaXMuSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOlNyLk9GRlNFVCxkaXNwbGF5VGV4dDoiT2Zmc2V0In0se3ZhbHVlOlNyLk9WRVJMQVksZGlzcGxheVRleHQ6Ik92ZXJsYXkifV0sdGhpcy5oaXN0b2dyYW1Nb2RlQ2hhbmdlZD1uZXcgTCx0aGlzLk1BWF9TTU9PVEhJTkdfVkFMVUU9Ljk5OSx0aGlzLk1BWF9TTU9PVEhJTkdfU0xJREVSX1ZBTFVFPS45OSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJD1uZXcgTCx0aGlzLnNjYWxhclNtb290aGluZ0NoYW5nZWQ9dGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQucGlwZShpYygyNTApKSx0aGlzLnNjYWxhclBhcnRpdGlvblhUb2dnbGVkPW5ldyBMLHRoaXMuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQ9bmV3IEwsdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLnBpcGUoaWMoMjUwKSksdGhpcy5pbWFnZUJyaWdodG5lc3NSZXNldD1uZXcgTCx0aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJD1uZXcgTCx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5waXBlKGljKDI1MCkpLHRoaXMuaW1hZ2VDb250cmFzdFJlc2V0PW5ldyBMLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ9bmV3IEx9b25TY2FsYXJTbW9vdGhpbmdJbnB1dChlKXtsZXQgaT1lLnRhcmdldDtpZighaS52YWx1ZSlyZXR1cm47bGV0IHI9TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGkudmFsdWUpKSwuOTk5KTtyIT09cGFyc2VGbG9hdChpLnZhbHVlKSYmKGkudmFsdWU9U3RyaW5nKHIpKSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5lbWl0KHIpfWZvcm1hdE1pbGxpVG9aZXJvdGgoZSl7cmV0dXJuIG9PKGUvMWUzLHRoaXMubG9jYWxlfHwiZW4tVVMiLCIxLjAtMiIpfWdldExpbmtlZFRpbWVTZWxlY3Rpb25TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkfHxudWxsPT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHxudWxsIT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZD8iIjp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcH1pc0F4aXNUeXBlU3RlcCgpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PVBpLlNURVB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYWQpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntpc0xpbmtlZFRpbWVFbmFibGVkOiJpc0xpbmtlZFRpbWVFbmFibGVkIixpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQ6ImlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQ6ImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIixpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkOiJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixzdGVwTWluTWF4OiJzdGVwTWluTWF4Iixpc1NsaWRlT3V0TWVudU9wZW46ImlzU2xpZGVPdXRNZW51T3BlbiIsaXNJbWFnZVN1cHBvcnRFbmFibGVkOiJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLHRvb2x0aXBTb3J0OiJ0b29sdGlwU29ydCIsaWdub3JlT3V0bGllcnM6Imlnbm9yZU91dGxpZXJzIix4QXhpc1R5cGU6InhBeGlzVHlwZSIsY2FyZE1pbldpZHRoOiJjYXJkTWluV2lkdGgiLGhpc3RvZ3JhbU1vZGU6Imhpc3RvZ3JhbU1vZGUiLHNjYWxhclNtb290aGluZzoic2NhbGFyU21vb3RoaW5nIixzY2FsYXJQYXJ0aXRpb25YOiJzY2FsYXJQYXJ0aXRpb25YIixpbWFnZUJyaWdodG5lc3NJbk1pbGxpOiJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIixpbWFnZUNvbnRyYXN0SW5NaWxsaToiaW1hZ2VDb250cmFzdEluTWlsbGkiLGltYWdlU2hvd0FjdHVhbFNpemU6ImltYWdlU2hvd0FjdHVhbFNpemUifSxvdXRwdXRzOntsaW5rZWRUaW1lVG9nZ2xlZDoibGlua2VkVGltZVRvZ2dsZWQiLHN0ZXBTZWxlY3RvclRvZ2dsZWQ6InN0ZXBTZWxlY3RvclRvZ2dsZWQiLHJhbmdlU2VsZWN0aW9uVG9nZ2xlZDoicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixvblNsaWRlT3V0VG9nZ2xlZDoib25TbGlkZU91dFRvZ2dsZWQiLHRvb2x0aXBTb3J0Q2hhbmdlZDoidG9vbHRpcFNvcnRDaGFuZ2VkIixpZ25vcmVPdXRsaWVyc0NoYW5nZWQ6Imlnbm9yZU91dGxpZXJzQ2hhbmdlZCIseEF4aXNUeXBlQ2hhbmdlZDoieEF4aXNUeXBlQ2hhbmdlZCIsY2FyZFdpZHRoQ2hhbmdlZDoiY2FyZFdpZHRoQ2hhbmdlZCIsY2FyZFdpZHRoUmVzZXQ6ImNhcmRXaWR0aFJlc2V0IixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6NTQsdmFyczozMCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGk7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgY2FyZCB3aWR0aCBzZXR0aW5n4pCfY2NkYzk2YjAwM2ZiYmE5MGRiN2E2OTU5YjViMjZlM2NjNThmN2Q4MOKQnzUyMjMxMTEwNDc5NjgxMDI0NjY6UmVzZXQgY2FyZCB3aWR0aGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBicmlnaHRuZXNzIHNldHRpbmfikJ9jNDgyYjNhNDdlYTA5NzVmYThiZTAxYWZiM2ZiZWM5Yjc2NjI4YmQ34pCfMTE4OTE2MTg1NzI0MDM3ODM5NTpSZXNldCBicmlnaHRuZXNzYCxpPSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcmVzZXQgdGhlIGltYWdlIGNvbnRyYXN0IHNldHRpbmfikJ9lZDcxMmE4YjkyNzA0MWJlMTUyNTJiMjllYjUyMWViYjEzNzRiYWQ44pCfNTM3MDcwMzM0MjkyMzYxMTk1NTpSZXNldCBjb250cmFzdGAsW1sxLCJnZW5lcmFsIl0sWzEsInNlY3Rpb24tdGl0bGUiXSxbMSwiY29udHJvbC1yb3ciLCJ4LWF4aXMtdHlwZSJdLFsiaWQiLCJ4LWF4aXMtdHlwZS1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWzMsInZhbHVlIiwib3B0aW9ucyIsInNlbGVjdGlvbkNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtc3RlcC1zZWxlY3RvciIsMywidGl0bGUiXSxbMywiY2hlY2tlZCIsImRpc2FibGVkIiwiY2hhbmdlIl0sWzEsImluZGVudCJdLFsxLCJpbmRlbnQiLCJyYW5nZS1zZWxlY3Rpb24iXSxbMSwiY29udHJvbC1yb3ciLCJsaW5rZWQtdGltZSIsImluZGVudCJdLFsibWF0LWJ1dHRvbiIsIiIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93IiwiY2FyZC13aWR0aCJdLFsiaWQiLCJjYXJkLXdpZHRoLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiY2FyZC13aWR0aC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIlJlc2V0IGNhcmQgd2lkdGgiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Il0sWzEsInNjYWxhcnMiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXNtb290aGluZyJdLFsiaWQiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIwIiwic3RlcCIsIjAuMDAxIiwxLCJzbGlkZXItaW5wdXQiLDMsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udHJvbC1yb3ciLCJ0b29sdGlwLXNvcnQiXSxbMSwiY29udHJvbC1uYW1lIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1pZ25vcmUtb3V0bGllcnMiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtcGFydGl0aW9uLXgiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCIsInRpdGxlIiwiTm9uLW1vbm90b25pYyBzdGVwcyBjYW4gb2NjdXIgd2hlbiByZXVzaW5nIGEgbG9nZGlyIHdpdGggbXVsdGlwbGUgc3VtbWFyeSB3cml0ZXJzIGFuZCBvdmVybGFwcGluZyBzdGVwcy4gTGluZSBjaGFydHMsIHdpdGhvdXQgdGhpcyBvcHRpb24gZW5hYmxlZCwgY2FuIGFwcGVhciB6aWcgemFnZ2VkLiBUaGlzIGlzIGNvbW1vbiB3aGVuIHJlc3RhcnRpbmcgZnJvbSBhIGNoZWNrcG9pbnQuXG5cbldoZW4gZW5hYmxlZCwgYSBub24tbW9ub3RvbmljIHRpbWUgc2VyaWVzIGNvbXBvc2VkIG9mIE4gbW9ub3RvbmljIHBpZWNlcyB3aWxsIGJlIHNob3duIGFzIE4gbW9ub3RvbmljIGxpbmVzLiIsMSwiaW5mbyJdLFsxLCJIaXN0b2dyYW1zIl0sWzEsImNvbnRyb2wtcm93IiwiaGlzdG9ncmFtLW1vZGUiXSxbImNsYXNzIiwiaW1hZ2UiLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsic3ZnSWNvbiIsImVkaXRfMjRweCJdLFsxLCJpbWFnZSJdLFsxLCJjb250cm9sLXJvdyIsImltYWdlLWJyaWdodG5lc3MiXSxbImlkIiwiaW1hZ2UtYnJpZ2h0bmVzcy1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJtYXgiLCJtaW4iLCJzdGVwIiwidmFsdWUiLCJ0aHVtYkxhYmVsIiwiZGlzcGxheVdpdGgiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJSZXNldCBicmlnaHRuZXNzIiwxLCJyZXNldC1idXR0b24iLDMsImNsaWNrIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtY29udHJhc3QiXSxbImlkIiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWNvbnN0cmFzdC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImRpc3BsYXlXaXRoIiwiaW5wdXQiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGksInRpdGxlIiwiUmVzZXQgY29udHJhc3QiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1zaG93LWFjdHVhbC1zaXplIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwic2VjdGlvbiIsMCkoMSwiaDMiLDEpLFQoMiwiR2VuZXJhbCIpLGcoKSxoKDMsImRpdiIsMikoNCwiZGl2IiwzKSxUKDUsIkhvcml6b250YWwgQXhpcyIpLGcoKSxoKDYsInRiLWRyb3Bkb3duIiw0KSxEKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnhBeGlzVHlwZUNoYW5nZWQuZW1pdChvKX0pLGcoKSgpLGgoNywiZGl2Iiw1KSg4LCJtYXQtY2hlY2tib3giLDYpLEQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5zdGVwU2VsZWN0b3JUb2dnbGVkLmVtaXQoKX0pLFQoOSwiRW5hYmxlIHN0ZXAgc2VsZWN0aW9uIGFuZCBkYXRhIHRhYmxlICIpLGcoKSxoKDEwLCJzcGFuIiw3KSxUKDExLCIoU2NhbGFycyBvbmx5KSIpLGcoKSxoKDEyLCJkaXYiLDgpKDEzLCJtYXQtY2hlY2tib3giLDYpLEQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5yYW5nZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksVCgxNCwiRW5hYmxlIFJhbmdlIFNlbGVjdGlvbiAiKSxnKCkoKSxoKDE1LCJkaXYiLDkpKDE2LCJtYXQtY2hlY2tib3giLDYpLEQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5saW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCl9KSxUKDE3KSxnKCkoKSxTKDE4LGtTZSwzLDMsImJ1dHRvbiIsMTApLGcoKSxoKDE5LCJkaXYiLDExKSgyMCwiZGl2IiwxMiksVCgyMSwiQ2FyZCBXaWR0aCIpLGcoKSxoKDIyLCJkaXYiLDEzKSgyMywibWF0LXNsaWRlciIsMTQpLEQoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5jYXJkV2lkdGhTbGlkZXJDaGFuZ2VkJC5lbWl0KG8udmFsdWUpfSksZygpLGgoMjQsImJ1dHRvbiIsMTUpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmNhcmRXaWR0aFJlc2V0LmVtaXQoKX0pLFAoMjUsIm1hdC1pY29uIiwxNiksZygpKCkoKSgpLGgoMjYsInNlY3Rpb24iLDE3KSgyNywiaDMiLDEpLFQoMjgsIlNjYWxhcnMiKSxnKCksaCgyOSwiZGl2IiwxOCkoMzAsImRpdiIsMTkpLFQoMzEsIlNtb290aGluZyIpLGcoKSxoKDMyLCJkaXYiLDEzKSgzMywibWF0LXNsaWRlciIsMjApLEQoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLGcoKSxoKDM0LCJpbnB1dCIsMjEpLEQoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0lucHV0KG8pfSksZygpKCkoKSxoKDM1LCJkaXYiLDIyKSgzNiwiZGl2IiwyMyksVCgzNywiVG9vbHRpcCBzb3J0aW5nIG1ldGhvZCIpLGcoKSxoKDM4LCJ0Yi1kcm9wZG93biIsNCksRCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50b29sdGlwU29ydENoYW5nZWQuZW1pdChvKX0pLGcoKSgpLGgoMzksImRpdiIsMjQpKDQwLCJtYXQtY2hlY2tib3giLDI1KSxEKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KG8uY2hlY2tlZCl9KSxUKDQxLCJJZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZyIpLGcoKSgpLGgoNDIsImRpdiIsMjYpKDQzLCJtYXQtY2hlY2tib3giLDI1KSxEKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQuZW1pdCgpfSksVCg0NCwiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksZygpLFAoNDUsIm1hdC1pY29uIiwyNyksZygpKCksaCg0Niwic2VjdGlvbiIsMjgpKDQ3LCJoMyIsMSksVCg0OCwiSGlzdG9ncmFtcyIpLGcoKSxoKDQ5LCJkaXYiLDI5KSg1MCwiZGl2IiwyMyksVCg1MSwiTW9kZSIpLGcoKSxoKDUyLCJ0Yi1kcm9wZG93biIsNCksRCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KG8pfSksZygpKCkoKSxTKDUzLFBTZSwyMCwxMywic2VjdGlvbiIsMzApKSwyJmUmJihiKDYpLF8oInZhbHVlIixpLnhBeGlzVHlwZSkoIm9wdGlvbnMiLGkuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zKSxiKDEpLF8oInRpdGxlIixpLmlzQXhpc1R5cGVTdGVwKCk/IiI6Ik9ubHkgYXZhaWxhYmxlIHdoZW4gSG9yaXpvbnRhbCBBeGlzIGlzIHNldCB0byBzdGVwIiksYigxKSxfKCJjaGVja2VkIixpLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCkoImRpc2FibGVkIiwhaS5pc0F4aXNUeXBlU3RlcCgpKSxiKDUpLF8oImNoZWNrZWQiLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWkuaXNBeGlzVHlwZVN0ZXAoKSksYigzKSxfKCJjaGVja2VkIixpLmlzTGlua2VkVGltZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWkuaXNBeGlzVHlwZVN0ZXAoKSksYigxKSx6ZSgiTGluayBieSBzdGVwICIsaS5nZXRMaW5rZWRUaW1lU2VsZWN0aW9uU3RhcnRTdGVwKCksIiAiKSxiKDEpLF8oIm5nSWYiLGkuaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCksYig1KSxfKCJtYXgiLGkuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFKSgibWluIixpLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRSkoInN0ZXAiLDUwKSgidmFsdWUiLGkuY2FyZE1pbldpZHRoKSgidGh1bWJMYWJlbCIsITEpLGIoMTApLF8oIm1heCIsaS5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixpLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSxiKDEpLF8oIm1heCIsaS5NQVhfU01PT1RISU5HX1ZBTFVFKSgidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSxiKDQpLF8oInZhbHVlIixpLnRvb2x0aXBTb3J0KSgib3B0aW9ucyIsaS5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucyksYigyKSxfKCJjaGVja2VkIixpLmlnbm9yZU91dGxpZXJzKSxiKDMpLF8oImNoZWNrZWQiLGkuc2NhbGFyUGFydGl0aW9uWCksYig5KSxfKCJ2YWx1ZSIsaS5oaXN0b2dyYW1Nb2RlKSgib3B0aW9ucyIsaS5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zKSxiKDEpLF8oIm5nSWYiLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRlcGVuZGVuY2llczpbYm4sRmUsSVEsRm4sSGwsRG4sVGRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTJweH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9c2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtwYWRkaW5nOjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDpub3JtYWw7bWFyZ2luOjAgMCAxMnB4IDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2VjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250cm9sLXJvd1tfbmdjb250ZW50LSVDT01QJV06bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tYm90dG9tOjEycHh9LmNvbnRyb2wtbmFtZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTo4cHh9LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI4cHh9LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnJlc2V0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6NnB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXI6MXB4IHNvbGlkICM4ZTk4YTM7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjEwMCU7bWFyZ2luLWxlZnQ6MTJweDtwYWRkaW5nOjAgNHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzQyNTA2Nn0uc2NhbGFycy1zbW9vdGhpbmdbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO3dpZHRoOjVlbX0uc2NhbGFycy1wYXJ0aXRpb24teFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uc2NhbGFycy1wYXJ0aXRpb24teFtfbmdjb250ZW50LSVDT01QJV0gICAuaW5mb1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6NXB4O3dpZHRoOjE1cHg7bWluLXdpZHRoOjE1cHh9bWF0LXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxO21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXJpZ2h0Oi04cHh9LmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDoyOHB4O3BhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDoxMnB4fS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZS5tYXQtYnV0dG9uLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZS50b2dnbGUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlLnRvZ2dsZS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29sdW1uLWVkaXQtbWVudS10b2dnbGUudG9nZ2xlLW9wZW5lZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTVweDttYXJnaW4tcmlnaHQ6NnB4fXRiLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfS5saW5rZWQtdGltZVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzo1cHggMH0uY29udHJvbC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLmluZGVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MjVweH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGtRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChFYiksdGhpcy5pc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoSXUpLHRoaXMuaXNMaW5rZWRUaW1lRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoRHUpLHRoaXMuaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoZlMpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QoSkYpLHRoaXMuc3RlcE1pbk1heCQ9dGhpcy5zdG9yZS5zZWxlY3QoS0YpLHRoaXMuaXNTbGlkZU91dE1lbnVPcGVuJD10aGlzLnN0b3JlLnNlbGVjdChtMSksdGhpcy5pc0ltYWdlU3VwcG9ydEVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEN1KS5waXBlKFZlKEJvb2xlYW4pLHp0KDEpLFl0KHRoaXMuc3RvcmUuc2VsZWN0KHBTKSksVSgoWyxpXSk9PmkpKSx0aGlzLnRvb2x0aXBTb3J0JD10aGlzLnN0b3JlLnNlbGVjdChNZiksdGhpcy5pZ25vcmVPdXRsaWVycyQ9dGhpcy5zdG9yZS5zZWxlY3Qod2YpLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChEbCksdGhpcy5jYXJkTWluV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KHJnKSx0aGlzLmhpc3RvZ3JhbU1vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KHMxKSx0aGlzLnNjYWxhclNtb290aGluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoZ2QpLHRoaXMuc2NhbGFyUGFydGl0aW9uWCQ9dGhpcy5zdG9yZS5zZWxlY3QobDEpLHRoaXMuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QoYzEpLHRoaXMuaW1hZ2VDb250cmFzdEluTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGQxKSx0aGlzLmltYWdlU2hvd0FjdHVhbFNpemUkPXRoaXMuc3RvcmUuc2VsZWN0KHUxKX1vblRvb2x0aXBTb3J0Q2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGJUKHtzb3J0OmV9KSl9b25JZ25vcmVPdXRsaWVyc0NoYW5nZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHZUKCkpfW9uWEF4aXNUeXBlQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHhUKHt4QXhpc1R5cGU6ZX0pKX1vbkNhcmRXaWR0aENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChDVCh7Y2FyZE1pbldpZHRoOmV9KSl9b25DYXJkV2lkdGhSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goTVQoKSl9b25IaXN0b2dyYW1Nb2RlQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFJUKHtoaXN0b2dyYW1Nb2RlOmV9KSl9b25TY2FsYXJTbW9vdGhpbmdDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2god1Qoe3Ntb290aGluZzplfSkpfW9uU2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFNUKCkpfW9uSW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChFVCh7YnJpZ2h0bmVzc0luTWlsbGk6ZX0pKX1vbkltYWdlQnJpZ2h0bmVzc1Jlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChEVCgpKX1vbkltYWdlQ29udHJhc3RSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSVQoKSl9b25JbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChUVCh7Y29udHJhc3RJbk1pbGxpOmV9KSl9b25JbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQVQoKSl9b25MaW5rZWRUaW1lVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSFQoe2FmZm9yZGFuY2U6R2EuQ0hFQ0tfQk9YfSkpfW9uU3RlcFNlbGVjdG9yVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRGQoe2FmZm9yZGFuY2U6R2EuQ0hFQ0tfQk9YfSkpfW9uUmFuZ2VTZWxlY3Rpb25Ub2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh6VCh7YWZmb3JkYW5jZTpHYS5DSEVDS19CT1h9KSl9b25TbGlkZU91dFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHVUKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MiXV0sZGVjbHM6MTksdmFyczo1NCxjb25zdHM6W1szLCJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLCJ0b29sdGlwU29ydCIsImlnbm9yZU91dGxpZXJzIiwieEF4aXNUeXBlIiwiY2FyZE1pbldpZHRoIiwiaGlzdG9ncmFtTW9kZSIsInNjYWxhclNtb290aGluZyIsInNjYWxhclBhcnRpdGlvblgiLCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIiwiaW1hZ2VDb250cmFzdEluTWlsbGkiLCJpbWFnZVNob3dBY3R1YWxTaXplIiwiaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkIiwiaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQiLCJpc0xpbmtlZFRpbWVFbmFibGVkIiwiaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzdGVwTWluTWF4IiwiaXNTbGlkZU91dE1lbnVPcGVuIiwidG9vbHRpcFNvcnRDaGFuZ2VkIiwiaWdub3JlT3V0bGllcnNDaGFuZ2VkIiwieEF4aXNUeXBlQ2hhbmdlZCIsImNhcmRXaWR0aENoYW5nZWQiLCJjYXJkV2lkdGhSZXNldCIsImhpc3RvZ3JhbU1vZGVDaGFuZ2VkIiwic2NhbGFyU21vb3RoaW5nQ2hhbmdlZCIsInNjYWxhclBhcnRpdGlvblhUb2dnbGVkIiwiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQiLCJpbWFnZUJyaWdodG5lc3NSZXNldCIsImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsImltYWdlQ29udHJhc3RSZXNldCIsImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIiwibGlua2VkVGltZVRvZ2dsZWQiLCJzdGVwU2VsZWN0b3JUb2dnbGVkIiwicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIiwib25TbGlkZU91dFRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudCIsMCksRCgidG9vbHRpcFNvcnRDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRvb2x0aXBTb3J0Q2hhbmdlZChvKX0pKCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JZ25vcmVPdXRsaWVyc0NoYW5nZWQoKX0pKCJ4QXhpc1R5cGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblhBeGlzVHlwZUNoYW5nZWQobyl9KSgiY2FyZFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DYXJkV2lkdGhDaGFuZ2VkKG8pfSkoImNhcmRXaWR0aFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2FyZFdpZHRoUmVzZXQoKX0pKCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IaXN0b2dyYW1Nb2RlQ2hhbmdlZChvKX0pKCJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0NoYW5nZWQobyl9KSgic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpfSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKG8pfSkoImltYWdlQnJpZ2h0bmVzc1Jlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VCcmlnaHRuZXNzUmVzZXQoKX0pKCJpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKG8pfSkoImltYWdlQ29udHJhc3RSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlQ29udHJhc3RSZXNldCgpfSkoImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKX0pKCJsaW5rZWRUaW1lVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVUb2dnbGVkKCl9KSgic3RlcFNlbGVjdG9yVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblN0ZXBTZWxlY3RvclRvZ2dsZWQoKX0pKCJyYW5nZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SYW5nZVNlbGVjdGlvblRvZ2dsZWQoKX0pKCJvblNsaWRlT3V0VG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNsaWRlT3V0VG9nZ2xlZCgpfSksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSxHKDMsImFzeW5jIiksRyg0LCJhc3luYyIpLEcoNSwiYXN5bmMiKSxHKDYsImFzeW5jIiksRyg3LCJhc3luYyIpLEcoOCwiYXN5bmMiKSxHKDksImFzeW5jIiksRygxMCwiYXN5bmMiKSxHKDExLCJhc3luYyIpLEcoMTIsImFzeW5jIiksRygxMywiYXN5bmMiKSxHKDE0LCJhc3luYyIpLEcoMTUsImFzeW5jIiksRygxNiwiYXN5bmMiKSxHKDE3LCJhc3luYyIpLEcoMTgsImFzeW5jIiksZygpKSwyJmUmJl8oImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsVygxLDE4LGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkJCkpKCJ0b29sdGlwU29ydCIsVygyLDIwLGkudG9vbHRpcFNvcnQkKSkoImlnbm9yZU91dGxpZXJzIixXKDMsMjIsaS5pZ25vcmVPdXRsaWVycyQpKSgieEF4aXNUeXBlIixXKDQsMjQsaS54QXhpc1R5cGUkKSkoImNhcmRNaW5XaWR0aCIsVyg1LDI2LGkuY2FyZE1pbldpZHRoJCkpKCJoaXN0b2dyYW1Nb2RlIixXKDYsMjgsaS5oaXN0b2dyYW1Nb2RlJCkpKCJzY2FsYXJTbW9vdGhpbmciLFcoNywzMCxpLnNjYWxhclNtb290aGluZyQpKSgic2NhbGFyUGFydGl0aW9uWCIsVyg4LDMyLGkuc2NhbGFyUGFydGl0aW9uWCQpKSgiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsVyg5LDM0LGkuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSQpKSgiaW1hZ2VDb250cmFzdEluTWlsbGkiLFcoMTAsMzYsaS5pbWFnZUNvbnRyYXN0SW5NaWxsaSQpKSgiaW1hZ2VTaG93QWN0dWFsU2l6ZSIsVygxMSwzOCxpLmltYWdlU2hvd0FjdHVhbFNpemUkKSkoImlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCIsVygxMiw0MCxpLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCQpKSgiaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQiLFcoMTMsNDIsaS5pc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCQpKSgiaXNMaW5rZWRUaW1lRW5hYmxlZCIsVygxNCw0NCxpLmlzTGlua2VkVGltZUVuYWJsZWQkKSkoImlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLFcoMTUsNDYsaS5pc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkJCkpKCJsaW5rZWRUaW1lU2VsZWN0aW9uIixXKDE2LDQ4LGkubGlua2VkVGltZVNlbGVjdGlvbiQpKSgic3RlcE1pbk1heCIsVygxNyw1MCxpLnN0ZXBNaW5NYXgkKSkoImlzU2xpZGVPdXRNZW51T3BlbiIsVygxOCw1MixpLmlzU2xpZGVPdXRNZW51T3BlbiQpKX0sZGVwZW5kZW5jaWVzOltSUSxsdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUFE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSJdXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUCgwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyIpfSxkZXBlbmRlbmNpZXM6W2tRXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBIU2Uobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDQpfWZ1bmN0aW9uIHpTZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsNCl9ZnVuY3Rpb24gVVNlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw0KX1mdW5jdGlvbiBqU2Uobix0KXsxJm4mJlAoMCwiZGl2Iiw1KX12YXIgcVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuQ29sdW1uSGVhZGVyVHlwZT12dH1nZXRTcGVjaWFsVHlwZUNsYXNzZXMoZSl7c3dpdGNoKGUpe2Nhc2UgdnQuU1RFUF9BVF9NSU46cmV0dXJuInN0ZXAtYXQtbWluIjtjYXNlIHZ0LlNURVBfQVRfTUFYOnJldHVybiJzdGVwLWF0LW1heCI7ZGVmYXVsdDpyZXR1cm4iIn19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUtaGVhZGVyIl1dLGlucHV0czp7aGVhZGVyOiJoZWFkZXIifSxkZWNsczo3LHZhcnM6Nixjb25zdHM6W1sxLCJoZWFkZXItY29udGFpbmVyIiwzLCJuZ1N3aXRjaCJdLFsic3ZnSWNvbiIsImNoYW5nZV9oaXN0b3J5XzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJleHRyYS1yaWdodC1wYWRkaW5nIiw0LCJuZ1N3aXRjaERlZmF1bHQiXSxbMywibmdDbGFzcyJdLFsic3ZnSWNvbiIsImNoYW5nZV9oaXN0b3J5XzI0cHgiXSxbMSwiZXh0cmEtcmlnaHQtcGFkZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSxTKDEsSFNlLDEsMCwibWF0LWljb24iLDEpLFMoMix6U2UsMSwwLCJtYXQtaWNvbiIsMSksUygzLFVTZSwxLDAsIm1hdC1pY29uIiwxKSxTKDQsalNlLDEsMCwiZGl2IiwyKSxoKDUsInNwYW4iLDMpLFQoNiksZygpKCkpLDImZSYmKF8oIm5nU3dpdGNoIixpLmhlYWRlci50eXBlKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlZBTFVFX0NIQU5HRSksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuQ29sdW1uSGVhZGVyVHlwZS5QRVJDRU5UQUdFX0NIQU5HRSksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuQ29sdW1uSGVhZGVyVHlwZS5SQVdfQ0hBTkdFKSxiKDIpLF8oIm5nQ2xhc3MiLGkuZ2V0U3BlY2lhbFR5cGVDbGFzc2VzKGkuaGVhZGVyLnR5cGUpKSxiKDEpLHV0KGkuaGVhZGVyLmRpc3BsYXlOYW1lKSl9LGRlcGVuZGVuY2llczpbYm4sJGksc3IsZnUsRG5dLHN0eWxlczpbIi5oZWFkZXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5leHRyYS1yaWdodC1wYWRkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLXJpZ2h0OjFweH1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweDttaW4td2lkdGg6MTJweDtsaW5lLWhlaWdodDoxMnB4fS5zdGVwLWF0LW1pbltfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjM3cHh9LnN0ZXAtYXQtbWF4W19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6NDBweH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEdTZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsOSksRCgiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoMikuZHJhZ1N0YXJ0KG8pKX0pKCJkcmFnZW5kIixmdW5jdGlvbigpe1goZSk7bGV0IHI9dygpLmRhdGFUYWJsZU1vZGU7cmV0dXJuIFEodygpLmRyYWdFbmQocikpfSkoImRyYWdlbnRlciIsZnVuY3Rpb24oKXtsZXQgbz1YKGUpLiRpbXBsaWNpdCxhPXcoKS5kYXRhVGFibGVNb2RlO3JldHVybiBRKHcoKS5kcmFnRW50ZXIobyxhKSl9KSxoKDEsIm1hdC1jaGVja2JveCIsMTApLEQoImNoYW5nZSIsZnVuY3Rpb24oKXtsZXQgbz1YKGUpLiRpbXBsaWNpdCxhPXcoKS5kYXRhVGFibGVNb2RlO3JldHVybiBRKHcoKS50b2dnbGVIZWFkZXIobyxhKSl9KSxQKDIsInRiLWRhdGEtdGFibGUtaGVhZGVyIiwxMSksZygpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtfKCJuZ0NsYXNzIix3KDIpLmdldEhpZ2hsaWdodENsYXNzZXMoZSkpLGIoMSksXygiY2hlY2tlZCIsZS5lbmFibGVkKSxiKDEpLF8oImhlYWRlciIsZSl9fWZ1bmN0aW9uIFdTZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw3KSxTKDEsR1NlLDMsMywiZGl2Iiw4KSxnKCkpLDImbil7bGV0IGU9dC5oZWFkZXJzO2IoMSksXygibmdGb3JPZiIsZSl9fXZhciBGUT1mdW5jdGlvbihuLHQpe3JldHVybntoZWFkZXJzOm4sZGF0YVRhYmxlTW9kZTp0fX0sJEw9bj0+e24ucHJldmVudERlZmF1bHQoKX0scVNlPShuLHQsZSk9PntsZXQgaT1bLi4uZV07cmV0dXJuIGkuc3BsaWNlKG4sMSksaS5zcGxpY2UodCwwLGVbbl0pLGl9LFlUPShuLHQpPT50LmZpbmRJbmRleChlPT5lLm5hbWU9PT1uLm5hbWUpLCR1PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5UT1A9MF09IlRPUCIsbltuLkJPVFRPTT0xXT0iQk9UVE9NIn0oJHV8fCgkdT17fSkpLCR1KSkoKSxMUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLkRhdGFUYWJsZU1vZGU9bG8sdGhpcy5oaWdobGlnaHRFZGdlPSR1LlRPUCx0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0PW5ldyBMLHRoaXMub25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQ9bmV3IEwsdGhpcy5vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkPW5ldyBMLHRoaXMub25UYWJDaGFuZ2U9bmV3IEx9bmdPbkRlc3Ryb3koKXt0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCRMKX10YWJDaGFuZ2UoZSl7dGhpcy5vblRhYkNoYW5nZS5lbWl0KDA9PT1lLmluZGV4P2xvLlNJTkdMRTpsby5SQU5HRSl9ZHJhZ1N0YXJ0KGUpe3RoaXMuZHJhZ2dpbmdIZWFkZXI9ZSx0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCRMKX1kcmFnRW5kKGUpe2lmKCF0aGlzLmRyYWdnaW5nSGVhZGVyfHwhdGhpcy5oaWdobGlnaHRlZEhlYWRlcilyZXR1cm47bGV0IGk9dGhpcy5nZXRIZWFkZXJzRm9yTW9kZShlKTt0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0LmVtaXQoe2RhdGFUYWJsZU1vZGU6ZSxoZWFkZXJzOnFTZShZVCh0aGlzLmRyYWdnaW5nSGVhZGVyLGkpLFlUKHRoaXMuaGlnaGxpZ2h0ZWRIZWFkZXIsaSksaSl9KSx0aGlzLmRyYWdnaW5nSGVhZGVyPXZvaWQgMCx0aGlzLmhpZ2hsaWdodGVkSGVhZGVyPXZvaWQgMCx0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCRMKX1kcmFnRW50ZXIoZSxpKXtpZighdGhpcy5kcmFnZ2luZ0hlYWRlcilyZXR1cm47bGV0IHI9dGhpcy5nZXRIZWFkZXJzRm9yTW9kZShpKTt0aGlzLmhpZ2hsaWdodEVkZ2U9WVQoZSxyKTxZVCh0aGlzLmRyYWdnaW5nSGVhZGVyLHIpPyR1LlRPUDokdS5CT1RUT00sdGhpcy5oaWdobGlnaHRlZEhlYWRlcj1lfXRvZ2dsZUhlYWRlcihlLGkpe3RoaXMub25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQuZW1pdCh7ZGF0YVRhYmxlTW9kZTppLGhlYWRlcjplfSl9Z2V0SGlnaGxpZ2h0Q2xhc3NlcyhlKXtyZXR1cm4gZS5uYW1lIT09dGhpcy5oaWdobGlnaHRlZEhlYWRlcj8ubmFtZT97fTp7aGlnaGxpZ2h0ZWQ6ITAsImhpZ2hsaWdodC10b3AiOnRoaXMuaGlnaGxpZ2h0RWRnZT09PSR1LlRPUCwiaGlnaGxpZ2h0LWJvdHRvbSI6dGhpcy5oaWdobGlnaHRFZGdlPT09JHUuQk9UVE9NfX1nZXRTZWxlY3RlZFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWI9PT1sby5TSU5HTEU/MDoxfWdldEhlYWRlcnNGb3JNb2RlKGUpe3JldHVybiBlPT09bG8uU0lOR0xFP3RoaXMuc2luZ2xlSGVhZGVyczp0aGlzLnJhbmdlSGVhZGVyc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3ItY29tcG9uZW50Il1dLGlucHV0czp7cmFuZ2VIZWFkZXJzOiJyYW5nZUhlYWRlcnMiLHNpbmdsZUhlYWRlcnM6InNpbmdsZUhlYWRlcnMiLHNlbGVjdGVkVGFiOiJzZWxlY3RlZFRhYiJ9LG91dHB1dHM6e29uU2NhbGFyVGFibGVDb2x1bW5FZGl0OiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdCIsb25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQ6Im9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIixvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkOiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixvblRhYkNoYW5nZToib25UYWJDaGFuZ2UifSxkZWNsczoxMSx2YXJzOjEzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgb24gYSBidXR0b24gdG8gY2xvc2UgdGhlIGNvbHVtbiBlZGl0b3Iu4pCfY2I2MTZjZTliNDMyN2I0MWU2YmRiOTM0NDY2OWJhN2M3MmUyYzcwZeKQnzcyMDU2MzU3NjQ3MTMwMzQ4NDI6Q2xvc2UgY29sdW1uIGVkaXRvcmAsW1sxLCJlZGl0b3ItY29udHJvbHMiXSxbMSwidGFiLWdyb3VwIiwzLCJzZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxbMywibGFiZWwiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImZvb3RlciJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiY2xvc2UtYnV0dG9uIiwzLCJjbGljayJdLFsiaGVhZGVyTGlzdCIsIiJdLFsxLCJoZWFkZXItbGlzdCJdLFsiY2xhc3MiLCJoZWFkZXItbGlzdC1pdGVtIiwiZHJhZ2dhYmxlIiwidHJ1ZSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZHJhZ2dhYmxlIiwidHJ1ZSIsMSwiaGVhZGVyLWxpc3QtaXRlbSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFszLCJoZWFkZXIiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoaCgwLCJkaXYiLDApKDEsIm1hdC10YWItZ3JvdXAiLDEpLEQoInNlbGVjdGVkVGFiQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50YWJDaGFuZ2Uobyl9KSxoKDIsIm1hdC10YWIiLDIpLFAoMywibmdDb250ZXh0IiwzKSxnKCksaCg0LCJtYXQtdGFiIiwyKSxQKDUsIm5nQ29udGV4dCIsMyksZygpKCkoKSxoKDYsImRpdiIsNCkoNywiYnV0dG9uIiw1KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkLmVtaXQoKX0pLFQoOCwiIENsb3NlICIpLGcoKSgpLFMoOSxXU2UsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LFp0KSksMiZlKXtsZXQgcj10dCgxMCk7YigxKSxfKCJzZWxlY3RlZEluZGV4IixpLmdldFNlbGVjdGVkVGFiSW5kZXgoKSksYigxKSxfKCJsYWJlbCIsIlNpbmdsZSIpLGIoMSksXygibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixQcig3LEZRLGkuc2luZ2xlSGVhZGVycyxpLkRhdGFUYWJsZU1vZGUuU0lOR0xFKSksYigxKSxfKCJsYWJlbCIsIlJhbmdlIiksYigxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixyKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFByKDEwLEZRLGkucmFuZ2VIZWFkZXJzLGkuRGF0YVRhYmxlTW9kZS5SQU5HRSkpfX0sZGVwZW5kZW5jaWVzOltibixkbixNbyxxVCxIbCxNRSx1dixGbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjA7cGFkZGluZzowIDMwcHh9LmVkaXRvci1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwJSAtIDQ1cHgpfS50YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MDtoZWlnaHQ6MTAwJX0uaGVhZGVyLWxpc3RbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6NSU7bWFyZ2luLWxlZnQ6NSV9LmhlYWRlci1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4fS5oaWdobGlnaHRlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfS5oaWdobGlnaHQtYm90dG9tW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZmY5ODAwfS5oaWdobGlnaHQtdG9wW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjJweCBzb2xpZCAjZmY5ODAwfS5mb290ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtwYWRkaW5nOjRweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5mb290ZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NX0uY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO3dpZHRoOjg0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSAgLm1hdC10YWItYm9keS13cmFwcGVye2ZsZXg6MX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE5RPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2luZ2xlSGVhZGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoVGIpLHRoaXMucmFuZ2VIZWFkZXJzJD10aGlzLnN0b3JlLnNlbGVjdChEYiksdGhpcy5zZWxlY3RlZFRhYiQ9dGhpcy5zdG9yZS5zZWxlY3QoUVcpfW9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2godDAoZSkpfW9uU2NhbGFyVGFibGVDb2x1bW5FZGl0KGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZTAoZSkpfW9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKG1UKCkpfW9uVGFiQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZlQoe3RhYjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvciJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJzaW5nbGVIZWFkZXJzIiwicmFuZ2VIZWFkZXJzIiwic2VsZWN0ZWRUYWIiLCJvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCIsIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0Iiwib25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCIsIm9uVGFiQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yLWNvbXBvbmVudCIsMCksRCgib25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkKG8pfSkoIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdChvKX0pKCJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQoKX0pKCJvblRhYkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UYWJDaGFuZ2Uobyl9KSxHKDEsImFzeW5jIiksRygyLCJhc3luYyIpLEcoMywiYXN5bmMiKSxnKCkpLDImZSYmXygic2luZ2xlSGVhZGVycyIsVygxLDMsaS5zaW5nbGVIZWFkZXJzJCkpKCJyYW5nZUhlYWRlcnMiLFcoMiw1LGkucmFuZ2VIZWFkZXJzJCkpKCJzZWxlY3RlZFRhYiIsVygzLDcsaS5zZWxlY3RlZFRhYiQpKX0sZGVwZW5kZW5jaWVzOltMUSxsdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZXA9e307ekEoZXAse2dldEV4cGVyaW1lbnRzSHBhcmFtc0FuZE1ldHJpY3NTcGVjczooKT0+bk4sZ2V0SHBhcmFtRmlsdGVyTWFwOigpPT5LU2UsZ2V0SHBhcmFtRmlsdGVyTWFwRnJvbUV4cGVyaW1lbnRJZHM6KCk9PmVOLGdldE1ldHJpY0ZpbHRlck1hcDooKT0+ZTFlLGdldE1ldHJpY0ZpbHRlck1hcEZyb21FeHBlcmltZW50SWRzOigpPT50Tn0pO3ZhciBJZD1NcihIUyk7ZnVuY3Rpb24gVlEobix0KXtsZXQgZT1bXTtmb3IobGV0IGkgb2YgdCkhbi5zcGVjc1tpXXx8ZS5wdXNoKG4uc3BlY3NbaV0uaHBhcmFtLmRlZmF1bHRGaWx0ZXJzKTtyZXR1cm4gdmIoZSl9dmFyIFFTZT1xKElkLFZRKTtmdW5jdGlvbiBIUShuLHQsZSl7bGV0IGk9dmYoZSk7cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubi5maWx0ZXJzW2ldPy5ocGFyYW1zPz9bXV0pfXZhciBLU2U9cShJZCxRU2UsSFEpO2Z1bmN0aW9uIGVOKG4sdCl7cmV0dXJuIHEoSWQsZnVuY3Rpb24obil7cmV0dXJuIHEoSWQsdD0+VlEodCxuKSl9KG4pLChlLGkpPT5IUShlLHQ/aTpuZXcgTWFwLG4pKX1mdW5jdGlvbiB6UShuLHQpe2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KSFuLnNwZWNzW2ldfHxlLnB1c2gobi5zcGVjc1tpXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpO3JldHVybiBWUyhlKX12YXIgSlNlPXEoSWQselEpO2Z1bmN0aW9uIFVRKG4sdCxlKXtsZXQgaT12ZihlKTtyZXR1cm4gbmV3IE1hcChbLi4udCwuLi5uLmZpbHRlcnNbaV0/Lm1ldHJpY3M/P1tdXSl9dmFyIGUxZT1xKElkLEpTZSxVUSk7ZnVuY3Rpb24gdE4obix0KXtyZXR1cm4gcShJZCxmdW5jdGlvbihuKXtyZXR1cm4gcShJZCx0PT56USh0LG4pKX0obiksKGUsaSk9PlVRKGUsdD9pOm5ldyBNYXAsbikpfXZhciBuTj1xKElkLChuLHQpPT5mdW5jdGlvbiguLi5uKXtsZXQgdD1uZXcgTWFwLGU9bmV3IE1hcCxpPW5ldyBNYXAscj1uZXcgTWFwLG89W107Zm9yKGxldCBhIG9mIG4pe2ZvcihsZXQgcyBvZiBhLmhwYXJhbXMpaWYoZS5oYXMocy5uYW1lKXx8ZS5zZXQocy5uYW1lLG5ldyBTZXQpLGUuZ2V0KHMubmFtZSkuYWRkKHMuZGlzcGxheU5hbWUpLHQuaGFzKHMubmFtZSkpe2xldCBsPXQuZ2V0KHMubmFtZSksYz1zO2lmKGwudHlwZSE9PWMudHlwZSYmby5wdXNoKGBIcGFyYW0sICR7Yy5uYW1lfSwgdHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wudHlwZX0gdnMuICR7Yy50eXBlfWApLGwuZG9tYWluLnR5cGU9PT1Vbi5JTlRFUlZBTCYmYy5kb21haW4udHlwZT09PVVuLklOVEVSVkFMKShsLmRvbWFpbi5taW5WYWx1ZSE9PWMuZG9tYWluLm1pblZhbHVlfHxsLmRvbWFpbi5tYXhWYWx1ZSE9PWMuZG9tYWluLm1heFZhbHVlKSYmby5wdXNoKGBIcGFyYW0sICR7Yy5uYW1lfSwgZG9tYWlucyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC5kb21haW59IHZzLiAke2MuZG9tYWlufWApO2Vsc2UgaWYobC5kb21haW4udHlwZT09PVVuLkRJU0NSRVRFJiZjLmRvbWFpbi50eXBlPT09VW4uRElTQ1JFVEUpe2xldCBkPW5ldyBTZXQoWy4uLmwuZG9tYWluLnZhbHVlcywuLi5jLmRvbWFpbi52YWx1ZXNdKTsobC5kb21haW4udmFsdWVzLmxlbmd0aCE9PWMuZG9tYWluLnZhbHVlcy5sZW5ndGh8fGwuZG9tYWluLnZhbHVlcy5sZW5ndGghPT1kLnNpemUpJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCl9ZWxzZSBvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCl9ZWxzZSB0LnNldChzLm5hbWUsey4uLnN9KTtmb3IobGV0IHMgb2YgYS5tZXRyaWNzKWlmKHIuaGFzKHMudGFnKXx8ci5zZXQocy50YWcsbmV3IFNldCksci5nZXQocy50YWcpLmFkZChzLmRpc3BsYXlOYW1lKSxpLmhhcyhzLnRhZykpe2xldCBsPWkuZ2V0KHMudGFnKTtsLmRhdGFzZXRUeXBlIT09cy5kYXRhc2V0VHlwZSYmby5wdXNoKGBNZXRyaWMsICR7cy50YWd9LCBkYXRhc2V0VHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZGF0YXNldFR5cGV9IHZzLiAke3MuZGF0YXNldFR5cGV9YCl9ZWxzZSBpLnNldChzLnRhZyx7Li4uc30pfWlmKG8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVmFsaWRhdGlvbiBlcnJvcjpcbiR7by5qb2luKCJcbiIpfWApO3JldHVybntocGFyYW1zOlsuLi50XS5tYXAoKFthLHNdKT0+KHsuLi5zLGRpc3BsYXlOYW1lOlsuLi5lLmdldChhKV0uam9pbigiIG9yICIpfSkpLG1ldHJpY3M6Wy4uLmldLm1hcCgoW2Esc10pPT4oey4uLnMsZGlzcGxheU5hbWU6Wy4uLnIuZ2V0KGEpXS5qb2luKCIgb3IgIil9KSl9fSguLi50LmV4cGVyaW1lbnRJZHMubWFwKGU9PntsZXQgaT1uLnNwZWNzW2VdO3JldHVybiBpP3tocGFyYW1zOmkuaHBhcmFtLnNwZWNzLG1ldHJpY3M6aS5tZXRyaWMuc3BlY3N9Om51bGx9KS5maWx0ZXIoQm9vbGVhbikpKSxyMD0oKCk9PihmdW5jdGlvbihuKXtuW24uT1JJR0lOQUw9MF09Ik9SSUdJTkFMIixuW24uREVSSVZFRD0xXT0iREVSSVZFRCJ9KHIwfHwocjA9e30pKSxyMCkpKCksdDFlPXEoelcsUnUsKG4sdCk9Pm5ldyBTZXQoT2JqZWN0LmVudHJpZXMobi5zY2FsYXJzLnRhZ1RvUnVucykuZmlsdGVyKChbLGVdKT0+IXR8fCF0LnNpemV8fGUuc29tZShpPT50Py5nZXQoaSkpKS5tYXAoKFtlXSk9PmUpKSksbjFlPXEoYTEsUnUsWFcsdDFlLChuLHQsZSxpKT0+e2xldCByPUFycmF5LmZyb20odD8udmFsdWVzKCl8fFtdKS5zb21lKEJvb2xlYW4pO3JldHVybiBuLmZpbHRlcihvPT5jcyhvLnBsdWdpbik/Qm9vbGVhbih0JiZ0LmdldChvLnJ1bklkKSk6IWV8fCFyfHxvLnBsdWdpbiE9PXFuLlNDQUxBUlN8fGkuaGFzKG8udGFnKSl9KSxRZj1xKG4xZSxuPT5uLnNvcnQoKHQsZSk9PlN2KHQudGFnLGUudGFnKSkpLFhUPXtmaWx0ZXJSdW5JdGVtc0J5UmVnZXg6KG4sdCxlKT0+dD9uLmZpbHRlcihpPT5vZyh7cnVuTmFtZTppLnJ1bi5uYW1lLGV4cGVyaW1lbnRBbGlhczppLmV4cGVyaW1lbnRBbGlhc30sdCxlKSk6bixtYXRjaEZpbHRlcjoobix0KT0+dm9pZCAwPT09dD9uLmluY2x1ZGVVbmRlZmluZWQ6bi50eXBlPT09VW4uRElTQ1JFVEU/bi5maWx0ZXJWYWx1ZXMuaW5jbHVkZXModCk6bi50eXBlPT09VW4uSU5URVJWQUwmJiJudW1iZXIiPT10eXBlb2YgdCYmbi5maWx0ZXJMb3dlclZhbHVlPD10JiZ0PD1uLmZpbHRlclVwcGVyVmFsdWUsZmlsdGVyUnVuSXRlbXNCeUhwYXJhbUFuZE1ldHJpY0ZpbHRlcjoobix0LGUpPT5uLmZpbHRlcigoe2hwYXJhbXM6aSxtZXRyaWNzOnJ9KT0+e2xldCBvPVsuLi50LmVudHJpZXMoKV0uZXZlcnkoKFtzLGxdKT0+e2xldCBjPWkuZ2V0KHMpO3JldHVybiBYVC5tYXRjaEZpbHRlcihsLGMpfSksYT1bLi4uZS5lbnRyaWVzKCldLmV2ZXJ5KChbcyxsXSk9PntsZXQgYz1yLmdldChzKTtyZXR1cm4gWFQubWF0Y2hGaWx0ZXIobCxjKX0pO3JldHVybiBvJiZhfSl9LGkxZT1DZihuPT5xKChuPT5xKE5hLHQ9Pm4ucmVkdWNlKChlLGkpPT4oKHQucnVuSWRzW2ldfHxbXSkuZmlsdGVyKHI9PkJvb2xlYW4odC5ydW5NZXRhZGF0YVtyXSkpLmZvckVhY2gocj0+e2UucHVzaCh7Li4udC5ydW5NZXRhZGF0YVtyXSxleHBlcmltZW50SWQ6aX0pfSksZSksW10pKSkobiksKG49PnEobVcsdD0+bi5tYXAoZT0+dC5leHBlcmltZW50TWFwW2VdKS5maWx0ZXIoQm9vbGVhbikucmVkdWNlKChlLGkpPT4oZVtpLmlkXT1pLm5hbWUsZSkse30pKSkobiksUnUsa3UsQnMsKHQsZSxpLHIsbyk9PnQubWFwKGE9PntsZXQgcz1uZXcgTWFwOyhhLmhwYXJhbXN8fFtdKS5mb3JFYWNoKGM9PntzLnNldChjLm5hbWUsYy52YWx1ZSl9KTtsZXQgbD1uZXcgTWFwO3JldHVybihhLm1ldHJpY3N8fFtdKS5mb3JFYWNoKGM9PntsLnNldChjLnRhZyxjLnZhbHVlKX0pLHtydW46YSxleHBlcmltZW50TmFtZTplW2EuZXhwZXJpbWVudElkXXx8IiIsZXhwZXJpbWVudEFsaWFzOm9bYS5leHBlcmltZW50SWRdLHNlbGVjdGVkOkJvb2xlYW4oaSYmaS5nZXQoYS5pZCkpLHJ1bkNvbG9yOnJbYS5pZF0saHBhcmFtczpzLG1ldHJpY3M6bH19KSkpLHIxZT1DZihuPT5xKF9kLGkxZShuKSxlTihuKSx0TihuKSxOcywodCxlLGkscixvKT0+e2xldCBhPVhULmZpbHRlclJ1bkl0ZW1zQnlSZWdleChlLHQsbz09PWtuLkNPTVBBUkVfRVhQRVJJTUVOVCk7cmV0dXJuIFhULmZpbHRlclJ1bkl0ZW1zQnlIcGFyYW1BbmRNZXRyaWNGaWx0ZXIoYSxpLHIpfSkpLGlOPXEobj0+bixybywobix0KT0+cjFlKHR8fFtdKShuKSksalE9cShpTixuPT5uZXcgU2V0KG4ubWFwKCh7cnVuOntpZDp0fX0pPT50KSkpLHJOPXEobj0+bixybywobix0KT0+e2lmKCF0KXJldHVybltdO2xldHtocGFyYW1zOmV9PW5OKG4se2V4cGVyaW1lbnRJZHM6dH0pO3JldHVybiBlLm1hcChpPT4oe3R5cGU6dnQuSFBBUkFNLG5hbWU6aS5uYW1lLGRpc3BsYXlOYW1lOmkuZGlzcGxheU5hbWV8fGkubmFtZSxlbmFibGVkOiExLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSkpfSksbzA9KENmKG49PnEoZzEobiksck4sKHQsZSk9PlsuLi50LC4uLmVdKSksKCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5jZGtTY3JvbGxhYmxlPWksdGhpcy5vblZpc2liaWxpdHlDaGFuZ2U9bmV3IEwsdGhpcy5uZ1Vuc3Vic2NyaWJlJD1uZXcgQWUsdGhpcy5vbkV2ZW50JD1uZXcgQWV9bmdPbkluaXQoKXtsZXQgZT17cm9vdDp0aGlzLmNka1Njcm9sbGFibGU/dGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50Om51bGx9O3RoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW4mJihlLnJvb3RNYXJnaW49dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbik7bGV0IGk9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHI9Pnt0aGlzLm9uRXZlbnQkLm5leHQocil9LGUpO2kub2JzZXJ2ZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLm5nVW5zdWJzY3JpYmUkLnN1YnNjcmliZSgoKT0+e2kudW5vYnNlcnZlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpfSksdGhpcy5vbkV2ZW50JC5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUocj0+e2xldCBvPXIuc2xpY2UoLTEpWzBdO3RoaXMub25WaXNpYmlsaXR5Q2hhbmdlLmVtaXQoe3Zpc2libGU6by5pc0ludGVyc2VjdGluZ30pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCl9d2FpdEZvckV2ZW50Rm9yVGVzdE9ubHkoKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+dGhpcy5vbkV2ZW50JC5waXBlKHp0KDEpKS5zdWJzY3JpYmUoKCk9PntlKCl9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoQnUsOCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIl1dLGlucHV0czp7aW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW46ImludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luIn0sb3V0cHV0czp7b25WaXNpYmlsaXR5Q2hhbmdlOiJvblZpc2liaWxpdHlDaGFuZ2UifX0pLG59KSgpKSxHUT0iL3NjYWxhcl9zdW1tYXJ5IjtmdW5jdGlvbiBhMChuLHQpe2xldCBlPW47cmV0dXJuIHQmJm4uc3RhcnRzV2l0aCh0KyIvIikmJihlPW4uc2xpY2UodC5sZW5ndGgrMSkpLGUuZW5kc1dpdGgoR1EpJiYoZT1lLnNsaWNlKDAsLUdRLmxlbmd0aCkpLGV8fG59dmFyIFFUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuaHJlZkF0dHI9dm9pZCAwLHRoaXMuc3JjQXR0cj12b2lkIDAsdGhpcy5pbmNsdWRlRmVhdHVyZUZsYWdzPSEwfWdldFVybFdpdGhGZWF0dXJlRmxhZ3MoZSl7cmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KFdoKS5waXBlKFUoaT0+e2lmKE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wKXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKFtbInRlbnNvckJvYXJkRmVhdHVyZUZsYWdzIixKU09OLnN0cmluZ2lmeShpKV1dKSxvPWUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iO3JldHVybiBlK28rU3RyaW5nKHIpfXJldHVybiBlfSkpfXNldCBocmVmKGUpe2UmJk9DKHRoaXMuZ2V0VXJsV2l0aEZlYXR1cmVGbGFncyhlKSkudGhlbihpPT57dGhpcy5ocmVmQXR0cj1pLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfSl9c2V0IHNyYyhlKXtlJiZPQyh0aGlzLmdldFVybFdpdGhGZWF0dXJlRmxhZ3MoZSkpLnRoZW4oaT0+e3RoaXMuc3JjQXR0cj1pLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpLEMoRnQpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siYSIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiLCIiXSxbImltZyIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJlBlKCJocmVmIixpLmhyZWZBdHRyLEFzKSgic3JjIixpLnNyY0F0dHIsQXMpfSxpbnB1dHM6e2luY2x1ZGVGZWF0dXJlRmxhZ3M6ImluY2x1ZGVGZWF0dXJlRmxhZ3MiLGhyZWY6ImhyZWYiLHNyYzoic3JjIn19KSxufSkoKSxvMWU9WyJtZWFzdXJlciJdLGExZT1bImlucHV0Il0scVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLnN0eWxlPSJkZWZhdWx0Iix0aGlzLnBhdHRlcm5SZWdleD1uZXcgUmVnRXhwKCIuKiIpLHRoaXMuaXNWYWxpZD0hMCx0aGlzLm9uVmFsdWVDaGFuZ2U9bmV3IEwsdGhpcy5ibHVyPW5ldyBMLHRoaXMuZm9jdXM9bmV3IEwsdGhpcy5rZXlkb3duPW5ldyBMLHRoaXMua2V5dXA9bmV3IEwsdGhpcy5pbnRlcm5hbFZhbHVlPSIiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyPXRoaXMudXBkYXRlSW5wdXRXaWR0aC5iaW5kKHRoaXMpfW5nT25Jbml0KCl7ZG9jdW1lbnQuZm9udHMmJmRvY3VtZW50LmZvbnRzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRpbmdkb25lIix0aGlzLmZvbnRDaGFuZ2VMaXN0ZW5lcil9bmdPbkRlc3Ryb3koKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGluZ2RvbmUiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyKX1uZ09uQ2hhbmdlcyhlKXtlLnBhdHRlcm4mJih0aGlzLnBhdHRlcm5SZWdleD1uZXcgUmVnRXhwKHRoaXMucGF0dGVybj8/IiIpKSxlLnZhbHVlJiYodGhpcy5pbnRlcm5hbFZhbHVlPXRoaXMudmFsdWUpLHRoaXMuaXNWYWxpZD10aGlzLnBhdHRlcm5SZWdleC50ZXN0KHRoaXMuaW50ZXJuYWxWYWx1ZSl9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy51cGRhdGVJbnB1dFdpZHRoKCl9b25JbnB1dChlKXtsZXQgaT10aGlzLmludGVybmFsVmFsdWU7dGhpcy5pbnRlcm5hbFZhbHVlPXRoaXMuaW5wdXRFbFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlLHRoaXMuaW50ZXJuYWxWYWx1ZSE9PWkmJih0aGlzLmlzVmFsaWQ9dGhpcy5wYXR0ZXJuUmVnZXgudGVzdCh0aGlzLmludGVybmFsVmFsdWUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpLHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHt2YWx1ZTp0aGlzLmludGVybmFsVmFsdWV9KX11cGRhdGVJbnB1dFdpZHRoKCl7bGV0e3dpZHRoOmV9PXRoaXMubWVhc3VyZXJFbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuaW5wdXRFbFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoPWAke2V9cHhgfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEZ0KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY29udGVudC13cmFwcGluZy1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihZZShvMWUsNyxiZSksWWUoYTFlLDcsYmUpKSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLm1lYXN1cmVyRWxSZWY9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuaW5wdXRFbFJlZj1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZrYShpLnN0eWxlKX0saW5wdXRzOnt2YWx1ZToidmFsdWUiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsc3R5bGU6InN0eWxlIixwYXR0ZXJuOiJwYXR0ZXJuIn0sb3V0cHV0czp7b25WYWx1ZUNoYW5nZToib25WYWx1ZUNoYW5nZSIsYmx1cjoiYmx1ciIsZm9jdXM6ImZvY3VzIixrZXlkb3duOiJrZXlkb3duIixrZXl1cDoia2V5dXAifSxmZWF0dXJlczpbR3RdLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1lYXN1cmVyIl0sWyJtZWFzdXJlciIsIiJdLFsiYXV0b2NvbXBsZXRlIiwib2ZmIiwic3BlbGxjaGVjayIsImZhbHNlIiwidHlwZSIsInRleHQiLDMsInZhbHVlIiwicGxhY2Vob2xkZXIiLCJibHVyIiwiZm9jdXMiLCJpbnB1dCIsImtleWRvd24iLCJrZXl1cCJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInNwYW4iKSgxLCJzcGFuIiwwLDEpLFQoMyksZygpLGgoNCwiaW5wdXQiLDIsMyksRCgiYmx1ciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuYmx1ci5lbWl0KG8pfSkoImZvY3VzIixmdW5jdGlvbihvKXtyZXR1cm4gaS5mb2N1cy5lbWl0KG8pfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbklucHV0KG8pfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLmtleWRvd24uZW1pdChvKX0pKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkua2V5dXAuZW1pdChvKX0pLGcoKSgpKSwyJmUmJihRZSgiY29udGFpbmVyIiwhMCkoImlzLXZhbGlkIixpLmlzVmFsaWQpLGIoMyksdXQoaS5pbnRlcm5hbFZhbHVlfHxpLnBsYWNlaG9sZGVyKSxiKDEpLF8oInZhbHVlIixpLnZhbHVlKSgicGxhY2Vob2xkZXIiLGkucGxhY2Vob2xkZXIpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O3dpZHRoOm1heC1jb250ZW50fVtfbmdob3N0LSVDT01QJV06Zm9jdXMtd2l0aGluICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNmNTdjMDB9LmRlZmF1bHRbX25naG9zdC0lQ09NUCVdOmhvdmVyICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNlYmViZWJ9LmVycm9yW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06bm90KC5pcy12YWxpZCl7Ym9yZGVyLWNvbG9yOiNlZjlhOWF9LmVycm9yW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCAuZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMtd2l0aGluLCBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06bm90KC5pcy12YWxpZCk6aG92ZXIsIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKTpmb2N1cy13aXRoaW57Ym9yZGVyLWNvbG9yOiNlZjlhOWF9LmhpZ2gtY29udHJhc3RbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNiZGJkYmR9LmhpZ2gtY29udHJhc3RbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Ym9yZGVyLWNvbG9yOiM3NTc1NzV9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO3BhZGRpbmc6MXB4IDJweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dmlzaWJpbGl0eTpoaWRkZW59Lm1lYXN1cmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6MS40O3BhZGRpbmc6MDt3aGl0ZS1zcGFjZTpwcmV9Lm1lYXN1cmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eSwgaW5wdXRbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e3dpZHRoOjJjaH1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXI6MDtjb2xvcjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtZmFtaWx5OmluaGVyaXQ7b3V0bGluZTowfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3twYWRkaW5nLXJpZ2h0OjFjaH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGwxZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImNvbnRlbnQtd3JhcHBpbmctaW5wdXQiLDMpLEQoIm9uVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmFsaWFzQ2hhbmdlZC5lbWl0KHIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoKTtScyhlLmlzQWxpYXNOYW1lTGVnYWw/ImhpZ2gtY29udHJhc3QiOiJlcnJvciIpLF8oInZhbHVlIixlLmFsaWFzLmFsaWFzVGV4dCl9fWZ1bmN0aW9uIGMxZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsNCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO1FlKCJpbGxlZ2FsIiwhZS5pc0FsaWFzTmFtZUxlZ2FsKSxfKCJ0aXRsZSIsZS50aXRsZSksYigxKSx1dChlLmFsaWFzLmFsaWFzVGV4dCl9fXZhciB0cD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5pc0FsaWFzTmFtZUxlZ2FsPSEwLHRoaXMuYWxpYXNDaGFuZ2VkPW5ldyBMfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1leHBlcmltZW50LWFsaWFzIl1dLGlucHV0czp7YWxpYXM6ImFsaWFzIixhbGlhc0VkaXRhYmxlOiJhbGlhc0VkaXRhYmxlIix0aXRsZToidGl0bGUiLGlzQWxpYXNOYW1lTGVnYWw6ImlzQWxpYXNOYW1lTGVnYWwifSxvdXRwdXRzOnthbGlhc0NoYW5nZWQ6ImFsaWFzQ2hhbmdlZCJ9LGRlY2xzOjUsdmFyczozLGNvbnN0czpbWzEsImFsaWFzLW51bWJlciJdLFsicGxhY2Vob2xkZXIiLCJBbGlhcyBmb3IgZXhwZXJpbWVudCIsMywic3R5bGUiLCJ2YWx1ZSIsIm9uVmFsdWVDaGFuZ2UiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9FZGl0QWxpYXNOYW1lIiwiIl0sWyJwbGFjZWhvbGRlciIsIkFsaWFzIGZvciBleHBlcmltZW50IiwzLCJ2YWx1ZSIsIm9uVmFsdWVDaGFuZ2UiXSxbMywidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsInNwYW4iLDApLFQoMSksZygpLFMoMixsMWUsMSwzLCJjb250ZW50LXdyYXBwaW5nLWlucHV0IiwxKSxTKDMsYzFlLDIsNCwibmctdGVtcGxhdGUiLG51bGwsMixadCkpLDImZSl7bGV0IHI9dHQoNCk7YigxKSx1dChpLmFsaWFzLmFsaWFzTnVtYmVyKSxiKDEpLF8oIm5nSWYiLGkuYWxpYXNFZGl0YWJsZSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbRmUscVFdLHN0eWxlczpbIi5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Y29sb3I6IzIxMjEyMTtib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MnB4O3BhZGRpbmc6MCAycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpiYXNlbGluZX0iXX0pLG59KSgpO2Z1bmN0aW9uIGQxZShuLHQpezEmbiYmUCgwLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwyKSwyJm4mJl8oImFsaWFzIix3KCkuZXhwZXJpbWVudEFsaWFzKX1mdW5jdGlvbiB1MWUobix0KXsxJm4mJihoKDAsInNwYW4iKSxUKDEsIi8iKSxnKCkpfXZhciBZUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGV4cGVyaW1lbnRBbGlhczoiZXhwZXJpbWVudEFsaWFzIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMywiYWxpYXMiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJhbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFMoMCxkMWUsMSwxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwwKSxTKDEsdTFlLDIsMCwic3BhbiIsMSksaCgyLCJzcGFuIiksVCgzKSxnKCkpLDImZSYmKF8oIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSxiKDEpLF8oIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSxiKDIpLHV0KGkubmFtZSkpfSxkZXBlbmRlbmNpZXM6W0ZlLHRwXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksS1Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9bmdPbkluaXQoKXt0aGlzLm5hbWUkPXVuKFt0aGlzLnN0b3JlLnNlbGVjdCh2MSx7cnVuSWQ6dGhpcy5ydW5JZH0pXSkucGlwZShVKChbZV0pPT5mdW5jdGlvbihuLHQsZSl7aWYoIXQpcmV0dXJuIG47bGV0IGk9dD8ubmFtZT8/Ii4uLiI7cmV0dXJuIGl9KHRoaXMucnVuSWQsZSkpKSx0aGlzLmV4cGVyaW1lbnRBbGlhcyQ9dW4oW3RoaXMuc3RvcmUuc2VsZWN0KGIxLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoQnMpXSkucGlwZShVKChbZSxpXSk9PmU/aVtlXTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lIl1dLGlucHV0czp7cnVuSWQ6InJ1bklkIn0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibmFtZSIsImV4cGVyaW1lbnRBbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwiY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiLDApLEcoMSwiYXN5bmMiKSxHKDIsImFzeW5jIiksRygzLCJhc3luYyIpKSwyJmUmJihfKCJuYW1lIixXKDEsMyxpLm5hbWUkKSkoImV4cGVyaW1lbnRBbGlhcyIsVygzLDcsaS5leHBlcmltZW50QWxpYXMkKSksUGUoInRpdGxlIixXKDIsNSxpLm5hbWUkKSkpfSxkZXBlbmRlbmNpZXM6W1lRLGx0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBmMWUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTtiKDEpLHV0KGUuZmlyc3RUZXh0UGFydCgpKX19dmFyIHMwPSgoKT0+e2NsYXNzIG57cGFyc2VWYWx1ZSgpe2xldCBlPXRoaXMudmFsdWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWU/e2ZpcnN0OiIiLHNlY29uZDp0aGlzLnZhbHVlfTp7Zmlyc3Q6dGhpcy52YWx1ZS5zbGljZSgwLGUpLHNlY29uZDp0aGlzLnZhbHVlLnNsaWNlKGUpfX1maXJzdFRleHRQYXJ0KCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZSgpLmZpcnN0fXNlY29uZFRleHRQYXJ0KCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZSgpLnNlY29uZH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItdHJ1bmNhdGVkLXBhdGgiXV0saW5wdXRzOnt2YWx1ZToidmFsdWUifSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1siY2xhc3MiLCJmaXJzdC10ZXh0LXBhcnQiLDQsIm5nSWYiXSxbMSwic2Vjb25kLXRleHQtcGFydCJdLFsxLCJmaXJzdC10ZXh0LXBhcnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsZjFlLDIsMSwic3BhbiIsMCksaCgxLCJzcGFuIiwxKSxUKDIpLGcoKSksMiZlJiYoXygibmdJZiIsaS5maXJzdFRleHRQYXJ0KCkubGVuZ3RoPjApLGIoMiksdXQoaS5zZWNvbmRUZXh0UGFydCgpKSl9LGRlcGVuZGVuY2llczpbRmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgNGNoO21heC13aWR0aDptYXgtY29udGVudH0uZmlyc3QtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlY29uZC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfSJdfSksbn0pKCk7ZnVuY3Rpb24gbTFlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiwyKX1mdW5jdGlvbiBoMWUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDMpfXZhciBsMD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5pc0NsaXBwZWQ9ITEsdGhpcy5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ9ITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyJdXSxpbnB1dHM6e2lzQ2xpcHBlZDoiaXNDbGlwcGVkIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJkYXRhLXZhbHVlIiwiY2xpcHBlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiIsNCwibmdJZiJdLFsiZGF0YS12YWx1ZSIsImNsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkRhdGEgaXMgbm90IGZvdW5kIG9uIHNlbGVjdGVkIHN0ZXAuIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iLDQsIm5nSWYiXSxbImRhdGEtdmFsdWUiLCJjbGlwcGVkIiwic3ZnSWNvbiIsImluZm9fb3V0bGluZV8yNHB4IiwidGl0bGUiLCJMaW5rZWQgc3RlcCBpcyBub3QgZm91bmQgaW4gdGhpcyB2aXN1YWxpemF0aW9uLiBXZSBoaWdobGlnaHRlZCB0aGUgY2xvc2VzdCBzdGVwIGZvciB5b3UuIl0sWyJkYXRhLXZhbHVlIiwiY2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiRGF0YSBpcyBub3QgZm91bmQgb24gc2VsZWN0ZWQgc3RlcC4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFMoMCxtMWUsMSwwLCJtYXQtaWNvbiIsMCksUygxLGgxZSwxLDAsIm1hdC1pY29uIiwxKSksMiZlJiYoXygibmdJZiIsaS5pc0NsaXBwZWQpLGIoMSksXygibmdJZiIsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQpKX0sZGVwZW5kZW5jaWVzOltGZSxEbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojZDMyZjJmO2hlaWdodDoxZW07bGluZS1oZWlnaHQ6MDtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojZDMyZjJmfVtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGcxZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMTkpLFQoMSksRygyLCJudW1iZXIiKSxnKCkpLDImbil7bGV0IGU9dygpO2IoMSksemUoIlN0ZXAgIixXKDIsMSxlLnN0ZXBzW2Uuc3RlcEluZGV4XSksIiIpfX1mdW5jdGlvbiBfMWUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDIwKSxUKDEpLEcoMiwibnVtYmVyIiksRygzLCJudW1iZXIiKSxnKCkpLDImbil7bGV0IGU9dygpO2IoMSksZHUoIlNhbXBsZSAiLFcoMiwyLGUuc2FtcGxlKzEpLCIvIixXKDMsNCxlLm51bVNhbXBsZSksIiIpfX1mdW5jdGlvbiB5MWUobix0KXsxJm4mJlAoMCwibWF0LXNwaW5uZXIiLDIxKX1mdW5jdGlvbiBiMWUobix0KXtpZigxJm4mJihoKDAsInNwYW4iKSxQKDEsInNwYW4iLDMwKSgyLCJzcGFuIiwzMSksZygpKSwyJm4pe2xldCBlPXcoMyk7YigyKSxNdCgibGVmdCIsZS5zbGlkZXJTdGFydFBvc2l0aW9uKSgid2lkdGgiLGUuc2xpZGVyVHJhY2tXaWR0aCl9fWZ1bmN0aW9uIHYxZShuLHQpe2lmKDEmbiYmUCgwLCJkaXYiLDMyKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygzKTtNdCgibGVmdCIsaS5nZXRMaW5rZWRUaW1lVGlja0xlZnRTdHlsZShlKSkoIm1hcmdpbi1sZWZ0IixpLmdldExpbmtlZFRpbWVUaWNrTWFyZ2luTGVmdFN0eWxlKGUpKX19ZnVuY3Rpb24geDFlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDI3KSxTKDEsYjFlLDMsNCwic3BhbiIsMjgpLFMoMix2MWUsMSw0LCJkaXYiLDI5KSxnKCkpLDImbil7bGV0IGU9dygyKTtiKDEpLF8oIm5nSWYiLG51bGwhPT1lLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kU3RlcCksYigxKSxfKCJuZ0Zvck9mIixlLnNlbGVjdGVkU3RlcHMpfX12YXIgQzFlPWZ1bmN0aW9uKG4pe3JldHVybltuXX0sTTFlPWZ1bmN0aW9uKG4pe3JldHVybntmaWx0ZXI6bn19O2Z1bmN0aW9uIHcxZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtUdCgwKSxoKDEsImRpdiIsMjIpKDIsIm1hdC1zbGlkZXIiLDIzKSxEKCJpbnB1dCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25TbGlkZXJJbnB1dChyKSl9KSxnKCksUygzLHgxZSwzLDIsImRpdiIsMjQpLGcoKSxoKDQsImRpdiIsMjUpLFAoNSwiaW1nIiwyNiksZygpLER0KCl9aWYoMiZuKXtsZXQgZT13KCk7YigyKSxfKCJuZ0NsYXNzIixTbigxMSxDMWUsZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA/ImhpZGUtc2xpZGVyIjoiIikpKCJkaXNhYmxlZCIsZS5zdGVwcy5sZW5ndGg8PTEpKCJtaW4iLDApKCJtYXgiLGUuc3RlcHMubGVuZ3RoLTEpKCJzdGVwIiwxKSgidGlja0ludGVydmFsIiwxKSgidmFsdWUiLGUuc3RlcEluZGV4KSxiKDEpLF8oIm5nSWYiLGUubGlua2VkVGltZVNlbGVjdGlvbiksYigyKSxTeSgiYWx0IiwiSW1hZ2UgYXQgc3RlcCAiLGUuc3RlcHNbZS5zdGVwSW5kZXhdLCIiKSxKaSgic3JjIixlLmltYWdlVXJsLEFzKSxfKCJuZ1N0eWxlIixTbigxMyxNMWUsZS5jc3NGaWx0ZXIoKSkpfX1mdW5jdGlvbiBTMWUobix0KXsxJm4mJihoKDAsImRpdiIsMzQpLFQoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLGcoKSl9ZnVuY3Rpb24gRTFlKG4sdCl7aWYoMSZuJiZTKDAsUzFlLDIsMCwiZGl2IiwzMyksMiZuKXtsZXQgZT13KCk7XygibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIFQxZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSxRUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5EYXRhTG9hZFN0YXRlPURlLHRoaXMuc2xpZGVyU3RhcnRQb3NpdGlvbj0iIix0aGlzLnNsaWRlclRyYWNrV2lkdGg9IiIsdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uPW51bGwsdGhpcy5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ9ITEsdGhpcy5vbkFjdHVhbFNpemVUb2dnbGU9bmV3IEwsdGhpcy5zdGVwSW5kZXhDaGFuZ2U9bmV3IEwsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEx9Y3NzRmlsdGVyKCl7cmV0dXJuYGNvbnRyYXN0KCR7dGhpcy5jb250cmFzdEluTWlsbGkvMTB9JSkgYnJpZ2h0bmVzcygke3RoaXMuYnJpZ2h0bmVzc0luTWlsbGkvMWUzfSlgfW9uU2xpZGVySW5wdXQoZSl7dGhpcy5zdGVwSW5kZXhDaGFuZ2UuZW1pdChlLnZhbHVlKX1jaGFuZ2VEaXN0aW5jdChlKXtyZXR1cm4gZS5jdXJyZW50VmFsdWUhPT1lLnByZXZpb3VzVmFsdWV9bmdPbkNoYW5nZXMoZSl7KGUuc2VsZWN0ZWRTdGVwcyYmdGhpcy5jaGFuZ2VEaXN0aW5jdChlLnNlbGVjdGVkU3RlcHMpfHxlLmxpbmtlZFRpbWVTZWxlY3Rpb24mJnRoaXMuY2hhbmdlRGlzdGluY3QoZS5saW5rZWRUaW1lU2VsZWN0aW9uKSkmJnRoaXMucmVuZGVyUmFuZ2VTbGlkZXIoKX1yZW5kZXJSYW5nZVNsaWRlcigpe2lmKCF0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb258fCF0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kU3RlcClyZXR1cm47bGV0IGU9dGhpcy5zdGVwcy5sZW5ndGgtMSxpPXRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5zdGFydFN0ZXA8dGhpcy5zdGVwc1swXT90aGlzLnN0ZXBzWzBdOnRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5zdGFydFN0ZXAscj10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kU3RlcD50aGlzLnN0ZXBzW2VdP3RoaXMuc3RlcHNbZV06dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXAse3N0YXJ0UG9zaXRpb246byx3aWR0aDphfT10aGlzLmdldFRyYWNrU3RhcnRQb3NpdGlvbkFuZFdpZHRoKGkscixlKTt0aGlzLnNsaWRlclN0YXJ0UG9zaXRpb249MTAwKm8rIiUiLHRoaXMuc2xpZGVyVHJhY2tXaWR0aD0xMDAqYSsiJSJ9Z2V0VHJhY2tTdGFydFBvc2l0aW9uQW5kV2lkdGgoZSxpLHIpe2xldCBvPTEvcixhPTAscz0wLGw9MDtmb3IoO2w8dGhpcy5zdGVwcy5sZW5ndGgtMTtsKyspe2xldCBjPXRoaXMuc3RlcHNbbF0sZD10aGlzLnN0ZXBzW2wrMV07aWYoYzw9ZSYmZTw9ZCl7YSs9KGUtYykvKGQtYyk7YnJlYWt9fWZvcihhPShhK2wpKm87bDx0aGlzLnN0ZXBzLmxlbmd0aC0xO2wrKyl7bGV0IGM9dGhpcy5zdGVwc1tsXSxkPXRoaXMuc3RlcHNbbCsxXTtpZihlPj1jJiZpPD1kKXtzPShpLWUpLyhkLWMpO2JyZWFrfWlmKGU+PWMmJmk+PWQpcys9KGQtZSkvKGQtYyk7ZWxzZXtpZighKGk+PWQpKXtzKz0oaS1jKS8oZC1jKTticmVha31zKz0xfX1yZXR1cm4gcyo9bywoYT4xfHxhPDApJiYoYT0wKSx7c3RhcnRQb3NpdGlvbjphLHdpZHRoOnN9fWdldExpbmtlZFRpbWVUaWNrTGVmdFN0eWxlKGUpe2lmKC0xPT10aGlzLnN0ZXBzLmluZGV4T2YoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0ZXBJbmRleDogc3RlcEluZGV4IHZhbHVlIGlzIG5vdCBpbmNsdWRlZCBpbiBzdGVwcyIpO3JldHVybiB0aGlzLnN0ZXBzLmluZGV4T2YoZSkvKHRoaXMuc3RlcHMubGVuZ3RoLTEpKjEwMCsiJSJ9Z2V0TGlua2VkVGltZVRpY2tNYXJnaW5MZWZ0U3R5bGUoZSl7aWYoLTE9PXRoaXMuc3RlcHMuaW5kZXhPZihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RlcEluZGV4OiBzdGVwSW5kZXggdmFsdWUgaXMgbm90IGluY2x1ZGVkIGluIHN0ZXBzIik7cmV0dXJuYC0ke3RoaXMuc3RlcHMuaW5kZXhPZihlKS8odGhpcy5zdGVwcy5sZW5ndGgtMSkqMTR9cHhgfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmUWUoImFjdHVhbC1zaXplIixpLnNob3dBY3R1YWxTaXplKX0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixzYW1wbGU6InNhbXBsZSIsbnVtU2FtcGxlOiJudW1TYW1wbGUiLGltYWdlVXJsOiJpbWFnZVVybCIsc3RlcEluZGV4OiJzdGVwSW5kZXgiLHN0ZXBzOiJzdGVwcyIsYnJpZ2h0bmVzc0luTWlsbGk6ImJyaWdodG5lc3NJbk1pbGxpIixjb250cmFzdEluTWlsbGk6ImNvbnRyYXN0SW5NaWxsaSIsc2hvd0FjdHVhbFNpemU6InNob3dBY3R1YWxTaXplIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIixhbGxvd1RvZ2dsZUFjdHVhbFNpemU6ImFsbG93VG9nZ2xlQWN0dWFsU2l6ZSIsaXNQaW5uZWQ6ImlzUGlubmVkIixzZWxlY3RlZFN0ZXBzOiJzZWxlY3RlZFN0ZXBzIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uQWN0dWFsU2l6ZVRvZ2dsZToib25BY3R1YWxTaXplVG9nZ2xlIixzdGVwSW5kZXhDaGFuZ2U6InN0ZXBJbmRleENoYW5nZSIsb25QaW5DbGlja2VkOiJvblBpbkNsaWNrZWQifSxmZWF0dXJlczpbR3RdLGRlY2xzOjIxLHZhcnM6MTYsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLGU9JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBhbiBpbWFnZSBjYXJkIHRoYXQgdG9nZ2xlcyBhY3R1YWwgaW1hZ2Ugc2l6ZS7ikJ8zY2EwNWVmM2E2ZTNhMzcwNjVmNWUwZjY5YzVkNWEyMTc4ZDkwNzkx4pCfNzYzNTEwMTkzNjY2NDc4OTE0MDpUb2dnbGUgYWN0dWFsIGltYWdlIHNpemVgLFtbMSwiaGVhZGluZyJdLFsxLCJsaW5lIl0sWzEsInRhZyJdLFsxLCJ0YWctcGF0aCIsMywidGl0bGUiLCJ2YWx1ZSJdLFszLCJpc0NsaXBwZWQiLCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwicGluLWJ1dHRvbiIsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJUb2dnbGUgYWN0dWFsIGltYWdlIHNpemUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJpbWFnZV9zZWFyY2hfMjRweCJdLFsxLCJydW4iXSxbMSwiZG90IiwzLCJuZ1N0eWxlIl0sWzEsInJ1bi10ZXh0IiwzLCJydW5JZCJdLFsxLCJtZXRhZGF0YSJdLFsiY2xhc3MiLCJzdGVwIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNhbXBsZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nIiwiZGlhbWV0ZXIiLCIxOCIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW1hZ2VEYXRhIiwiIl0sWzEsInN0ZXAiXSxbMSwic2FtcGxlIl0sWyJkaWFtZXRlciIsIjE4IiwxLCJsb2FkaW5nIl0sWzEsInNsaWRlci1yb3ciXSxbImNvbG9yIiwicHJpbWFyeSIsMSwic3RlcC1zbGlkZXIiLDMsIm5nQ2xhc3MiLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ0aWNrSW50ZXJ2YWwiLCJ2YWx1ZSIsImlucHV0Il0sWyJjbGFzcyIsImxpbmtlZC10aW1lLXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiaW1nLWNvbnRhaW5lciJdLFszLCJhbHQiLCJzcmMiLCJuZ1N0eWxlIiwiaW5jbHVkZUZlYXR1cmVGbGFncyJdLFsxLCJsaW5rZWQtdGltZS13cmFwcGVyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwibGlua2VkLXRpbWUtdGljayIsMywibGVmdCIsIm1hcmdpbi1sZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwic2xpZGVyLXRyYWNrIl0sWzEsInNsaWRlci10cmFjay1maWxsIl0sWzEsImxpbmtlZC10aW1lLXRpY2siXSxbImNsYXNzIiwiZW1wdHktbWVzc2FnZSIsNCwibmdJZiJdLFsxLCJlbXB0eS1tZXNzYWdlIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsInNwYW4iLDIpLFAoMywidGItdHJ1bmNhdGVkLXBhdGgiLDMpKDQsInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyIsNCksZygpLGgoNSwic3BhbiIsNSkoNiwiYnV0dG9uIiw2KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxQKDcsIm1hdC1pY29uIiw3KSxnKCksaCg4LCJidXR0b24iLDgpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxQKDksIm1hdC1pY29uIiw5KSxnKCkoKSgpLGgoMTAsImRpdiIsMSkoMTEsInNwYW4iLDEwKSxQKDEyLCJzcGFuIiwxMSkoMTMsImNhcmQtcnVuLW5hbWUiLDEyKSxnKCksaCgxNCwiZGl2IiwxMyksUygxNSxnMWUsMywzLCJzcGFuIiwxNCksUygxNixfMWUsNCw2LCJzcGFuIiwxNSksUygxNyx5MWUsMSwwLCJtYXQtc3Bpbm5lciIsMTYpLGcoKSgpKCksUygxOCx3MWUsNiwxNSwibmctY29udGFpbmVyIiwxNyksUygxOSxFMWUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxOCxadCkpLDImZSl7bGV0IHI9dHQoMjApO2IoMyksSmkoInRpdGxlIixpLnRhZyksSmkoInZhbHVlIixpLnRpdGxlKSxiKDEpLF8oImlzQ2xpcHBlZCIsaS5saW5rZWRUaW1lU2VsZWN0aW9uJiZpLmxpbmtlZFRpbWVTZWxlY3Rpb24uY2xpcHBlZCkoImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQpLGIoMiksUGUoInRpdGxlIixpLmlzUGlubmVkPyJVbnBpbiBjYXJkIjoiUGluIGNhcmQiKSxiKDEpLF8oInN2Z0ljb24iLGkuaXNQaW5uZWQ/ImtlZXBfMjRweCI6ImtlZXBfb3V0bGluZV8yNHB4IiksYigxKSxfKCJkaXNhYmxlZCIsIWkuYWxsb3dUb2dnbGVBY3R1YWxTaXplKSxiKDQpLF8oIm5nU3R5bGUiLFNuKDE0LFQxZSxpLnJ1bkNvbG9yU2NhbGUoaS5ydW5JZCkpKSxiKDEpLF8oInJ1bklkIixpLnJ1bklkKSxiKDIpLF8oIm5nSWYiLG51bGwhPT1pLnN0ZXBJbmRleCYmaS5zdGVwSW5kZXg8aS5zdGVwcy5sZW5ndGgpLGIoMSksXygibmdJZiIsaS5udW1TYW1wbGU+MSksYigxKSxfKCJuZ0lmIixpLmxvYWRTdGF0ZT09PWkuRGF0YUxvYWRTdGF0ZS5MT0FESU5HKSxiKDEpLF8oIm5nSWYiLG51bGwhPT1pLnN0ZXBJbmRleCYmaS5zdGVwSW5kZXg8aS5zdGVwcy5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W2JuLGRuLEZlLG11LFFULEZuLERuLHpyLFRkLEtULHMwLGwwLFBzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczozMThweDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV17aGVpZ2h0OmF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubGluZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIG1heC1jb250ZW50fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweH0ubWV0YWRhdGFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXgtd2lkdGg6MTc1cHg7dGV4dC1hbGlnbjplbmR9LnRhZy1wYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2FsaWduLXNlbGY6YmFzZWxpbmU7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAuZG90W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtib3JkZXItcmFkaXVzOjUwJTttYXJnaW4tcmlnaHQ6NHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLnJ1bi10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczttYXgtd2lkdGg6MTIwcHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0sIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVdLCAuc3RlcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNhbXBsZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7anVzdGlmeS1zZWxmOmZsZXgtZW5kO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO292ZXJmbG93LXk6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0uaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBpbWdbX25nY29udGVudC0lQ09NUCVde2ltYWdlLXJlbmRlcmluZzotbW96LWNyaXNwLWVkZ2VzO2ltYWdlLXJlbmRlcmluZzpwaXhlbGF0ZWR9LmFjdHVhbC1zaXplW19uZ2hvc3QtJUNPTVAlXSAgIC5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6bm9uZX1bX25naG9zdC0lQ09NUCVdOm5vdCguYWN0dWFsLXNpemUpICAgaW1nW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTttYXgtaGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjEwMCU7d2lkdGg6YXV0bztoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvbnRhaW59LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI0cHg7cG9zaXRpb246cmVsYXRpdmV9LnN0ZXAtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH1bX25naG9zdC0lQ09NUCVdICAgICAuaGlkZS1zbGlkZXIubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjB9LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MWVtO2ZvbnQtc2l6ZToxM3B4fS5saW5rZWQtdGltZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NXB4O3dpZHRoOjEwMCV9LmxpbmtlZC10aW1lLXRpY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6MTRweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxNHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxpbmtlZC10aW1lLXRpY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX0uc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MnB4O3RvcDo2cHg7cG9zaXRpb246YWJzb2x1dGV9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yNik7bGVmdDo3cHg7d2lkdGg6Y2FsYygxMDAlIC0gMTRweCl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9LnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNlZjZjMDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxaUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMuZGF0YVNvdXJjZT1pLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgTCx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgTCx0aGlzLmJyaWdodG5lc3NJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChjMSksdGhpcy5jb250cmFzdEluTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGQxKSx0aGlzLmFjdHVhbFNpemVHbG9iYWxTZXR0aW5nJD10aGlzLnN0b3JlLnNlbGVjdCh1MSksdGhpcy5zaG93QWN0dWFsU2l6ZT0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZWQ9ITEsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0PW5ldyBSaSh0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZWQpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgQWV9b25TdGVwSW5kZXhDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRlQoe2NhcmRJZDp0aGlzLmNhcmRJZCxzdGVwSW5kZXg6ZX0pKX1pc0ltYWdlQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PXFuLklNQUdFU31vbkFjdHVhbFNpemVUb2dnbGUoKXt0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZWQ9IXRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3QubmV4dCh0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZWQpfW5nT25Jbml0KCl7dW4oW3RoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdF0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxWdCgoW2wsY10pPT57dGhpcy5zaG93QWN0dWFsU2l6ZT1sfHxjLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KHRoaXMuc2hvd0FjdHVhbFNpemUpfSkpLnN1YnNjcmliZSgoKT0+e30pO2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFVzLHRoaXMuY2FyZElkKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksVmUobD0+ISFsJiZ0aGlzLmlzSW1hZ2VDYXJkTWV0YWRhdGEobCkpLFUobD0+bCksRWEoMSkpLG89dW4oW2ksdGhpcy5zdG9yZS5zZWxlY3QoRXUsdGhpcy5jYXJkSWQpXSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFUoKFtsLGNdKT0+e2xldCBkPWwucnVuSWQ7cmV0dXJuIGMmJmMuaGFzT3duUHJvcGVydHkoZCk/Y1tkXTpbXX0pLHVpKChsLGMpPT5sLmxlbmd0aD09PWMubGVuZ3RoJiYwPT09bC5sZW5ndGh8fGw9PT1jKSxFYSgxKSk7dGhpcy5zdGVwSW5kZXgkPXRoaXMuc3RvcmUuc2VsZWN0KFpGLHRoaXMuY2FyZElkKS5waXBlKFUobD0+bD9sLmluZGV4Om51bGwpKSx0aGlzLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoWkYsdGhpcy5jYXJkSWQpLnBpcGUoVShsPT4hIWwmJmwuaXNDbG9zZXN0KSksdGhpcy5sb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KGhkLHRoaXMuY2FyZElkKSx0aGlzLnRhZyQ9aS5waXBlKFUobD0+bC50YWcpKSx0aGlzLnRpdGxlJD10aGlzLnRhZyQucGlwZShVKGw9PmEwKGwsdGhpcy5ncm91cE5hbWUpKSksdGhpcy5ydW5JZCQ9aS5waXBlKFUobD0+bC5ydW5JZCkpLHRoaXMuc2FtcGxlJD1pLnBpcGUoVShsPT5sLnNhbXBsZSkpLHRoaXMubnVtU2FtcGxlJD1pLnBpcGUoVShsPT5sLm51bVNhbXBsZSkpLHRoaXMuc3RlcHMkPXRoaXMuc3RvcmUuc2VsZWN0KGpXLHRoaXMuY2FyZElkKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdChUdSx0aGlzLmNhcmRJZCksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChBdSkucGlwZShWaSh0aGlzLnN0ZXBzJCksVSgoW2wsY10pPT5sPyRoKGwsTWF0aC5taW4oLi4uYyksTWF0aC5tYXgoLi4uYykpOm51bGwpKSx0aGlzLnNlbGVjdGVkU3RlcHMkPXRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQucGlwZShWaSh0aGlzLnN0ZXBzJCksVSgoW2wsY10pPT5sP251bGw9PT1sLmVuZFN0ZXA/LTEhPT1jLmluZGV4T2YobC5zdGFydFN0ZXApP1tsLnN0YXJ0U3RlcF06W106Yy5maWx0ZXIoZD0+ZD49bC5zdGFydFN0ZXAmJmQ8PWwuZW5kU3RlcCk6W10pKTtsZXQgcz11bihbbyx0aGlzLnN0ZXBJbmRleCRdKS5waXBlKFUoKFtsLGNdKT0+bnVsbCE9PWMmJmxbY10/bFtjXTpudWxsKSk7dGhpcy5pbWFnZVVybCQ9cy5waXBlKFUobD0+bD90aGlzLmRhdGFTb3VyY2UuaW1hZ2VVcmwobC5pbWFnZUlkKTpudWxsKSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSxDKE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaW1hZ2UtY2FyZCJdXSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MTcsdmFyczo1MCxjb25zdHM6W1szLCJsb2FkU3RhdGUiLCJ0aXRsZSIsInRhZyIsInJ1bklkIiwic2FtcGxlIiwibnVtU2FtcGxlIiwiaW1hZ2VVcmwiLCJzdGVwSW5kZXgiLCJzdGVwcyIsImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsImJyaWdodG5lc3NJbk1pbGxpIiwiY29udHJhc3RJbk1pbGxpIiwicnVuQ29sb3JTY2FsZSIsInNob3dBY3R1YWxTaXplIiwiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwiaXNQaW5uZWQiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwic2VsZWN0ZWRTdGVwcyIsInN0ZXBJbmRleENoYW5nZSIsIm9uQWN0dWFsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiaW1hZ2UtY2FyZC1jb21wb25lbnQiLDApLEQoInN0ZXBJbmRleENoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdGVwSW5kZXhDaGFuZ2VkKG8pfSkoIm9uQWN0dWFsU2l6ZVRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFjdHVhbFNpemVUb2dnbGUoKX0pKCJvblBpbkNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnBpblN0YXRlQ2hhbmdlZC5lbWl0KG8pfSksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSxHKDMsImFzeW5jIiksRyg0LCJhc3luYyIpLEcoNSwiYXN5bmMiKSxHKDYsImFzeW5jIiksRyg3LCJhc3luYyIpLEcoOCwiYXN5bmMiKSxHKDksImFzeW5jIiksRygxMCwiYXN5bmMiKSxHKDExLCJhc3luYyIpLEcoMTIsImFzeW5jIiksRygxMywiYXN5bmMiKSxHKDE0LCJhc3luYyIpLEcoMTUsImFzeW5jIiksRygxNiwiYXN5bmMiKSxnKCkpLDImZSYmXygibG9hZFN0YXRlIixXKDEsMTgsaS5sb2FkU3RhdGUkKSkoInRpdGxlIixXKDIsMjAsaS50aXRsZSQpKSgidGFnIixXKDMsMjIsaS50YWckKSkoInJ1bklkIixXKDQsMjQsaS5ydW5JZCQpKSgic2FtcGxlIixXKDUsMjYsaS5zYW1wbGUkKSkoIm51bVNhbXBsZSIsVyg2LDI4LGkubnVtU2FtcGxlJCkpKCJpbWFnZVVybCIsVyg3LDMwLGkuaW1hZ2VVcmwkKSkoInN0ZXBJbmRleCIsVyg4LDMyLGkuc3RlcEluZGV4JCkpKCJzdGVwcyIsVyg5LDM0LGkuc3RlcHMkKSkoImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsVygxMCwzNixpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQpKSgiYnJpZ2h0bmVzc0luTWlsbGkiLFcoMTEsMzgsaS5icmlnaHRuZXNzSW5NaWxsaSQpKSgiY29udHJhc3RJbk1pbGxpIixXKDEyLDQwLGkuY29udHJhc3RJbk1pbGxpJCkpKCJydW5Db2xvclNjYWxlIixpLnJ1bkNvbG9yU2NhbGUpKCJzaG93QWN0dWFsU2l6ZSIsaS5zaG93QWN0dWFsU2l6ZSkoImFsbG93VG9nZ2xlQWN0dWFsU2l6ZSIsITE9PT1XKDEzLDQyLGkuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckKSkoImlzUGlubmVkIixXKDE0LDQ0LGkuaXNQaW5uZWQkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFcoMTUsNDYsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpKCJzZWxlY3RlZFN0ZXBzIixXKDE2LDQ4LGkuc2VsZWN0ZWRTdGVwcyQpKX0sZGVwZW5kZW5jaWVzOltRUSxsdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFppPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KFppfHwoWmk9e30pKSxaaSkpKCksaXI9KCgpPT4oZnVuY3Rpb24obil7bltuLkxJTkVBUj0wXT0iTElORUFSIixuW24uTE9HMTA9MV09IkxPRzEwIixuW24uVElNRT0yXT0iVElNRSJ9KGlyfHwoaXI9e30pKSxpcikpKCksVHI9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJOT05FIixuLkRSQUdfWk9PTUlORz0iRFJBR19aT09NSU5HIixuLlNDUk9MTF9aT09NSU5HPSJTQ1JPTExfWk9PTUlORyIsbi5QQU5OSU5HPSJQQU5OSU5HIn0oVHJ8fChUcj17fSkpLFRyKSkoKTtmdW5jdGlvbiBSMWUobix0KXsxJm4mJihoKDAsInNwYW4iKSxUKDEsInNjYWxhciIpLGcoKSl9ZnVuY3Rpb24gazFlKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiksVCgxLCJoaXN0b2dyYW0iKSxnKCkpfWZ1bmN0aW9uIFAxZShuLHQpezEmbiYmKGgoMCwic3BhbiIpLFQoMSwidW5rbm93biIpLGcoKSl9ZnVuY3Rpb24gTzFlKG4sdCl7aWYoMSZuJiYoVHQoMCwxMyksUygxLFIxZSwyLDAsInNwYW4iLDE0KSxTKDIsazFlLDIsMCwic3BhbiIsMTQpLFMoMyxQMWUsMiwwLCJzcGFuIiwxNSksRHQoKSksMiZuKXtsZXQgZT13KDIpO18oIm5nU3dpdGNoIixlLmNhcmRNZXRhZGF0YS5wbHVnaW4pLGIoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuU0NBTEFSUyksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19ZnVuY3Rpb24gRjFlKG4sdCl7MSZuJiZUaSgwKX1mdW5jdGlvbiBMMWUobix0KXtpZigxJm4mJihoKDAsIm9wdGlvbiIsMTYpLFQoMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O18oInZhbHVlIixlLmlkKSxiKDEpLHV0KGUubmFtZSl9fWZ1bmN0aW9uIE4xZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtUdCgwKSxoKDEsImgyIiksUygyLE8xZSw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIsWnQpLGgoNCwic3BhbiIpLFQoNSwiRG93bmxvYWRceGEwIiksZygpLFMoNixGMWUsMSwwLCJuZy1jb250YWluZXIiLDMpLGgoNywic3BhbiIpLFQoOCwiXHhhMGRhdGEgZm9yXHhhMCIpLGcoKSxoKDksImNvZGUiLDQpLFQoMTApLGcoKSgpLGgoMTEsIm1hdC1kaWFsb2ctY29udGVudCIpKDEyLCJtYXQtZm9ybS1maWVsZCIsNSkoMTMsIm1hdC1sYWJlbCIpLFQoMTQsIlNlbGVjdCBhIHJ1biB0byBkb3dubG9hZCBhIGRhdGEgZm9yIGEgc2VyaWVzIiksZygpLGgoMTUsInNlbGVjdCIsNiksRCgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5ydW5TZWxlY3RlZC5lbWl0KHIudGFyZ2V0LnZhbHVlKSl9KSxoKDE2LCJvcHRpb24iLDcpLFQoMTcsIi0iKSxnKCksUygxOCxMMWUsMiwyLCJvcHRpb24iLDgpLGcoKSgpLGgoMTksImRpdiIsOSkoMjAsInNwYW4iKSxUKDIxLCJEb3dubG9hZCBhc1x1MjAyNiIpLGcoKSxUKDIyLCJceGEwIiksaCgyMywiYSIsMTApLFQoMjQsIkpTT04iKSxnKCksaCgyNSwiYSIsMTApLFQoMjYsIkNTViIpLGcoKSgpKCksaCgyNywibWF0LWRpYWxvZy1hY3Rpb25zIiwxMSkoMjgsImJ1dHRvbiIsMTIpLFQoMjksIkNsb3NlIiksZygpKCksRHQoKX1pZigyJm4pe2xldCBlPXR0KDMpLGk9dygpO2IoNiksXygibmdUZW1wbGF0ZU91dGxldCIsZSksYigzKSxfKCJ0aXRsZSIsaS5jYXJkTWV0YWRhdGEudGFnKSxiKDEpLHV0KGkuY2FyZE1ldGFkYXRhLnRhZyksYig1KSxfKCJ2YWx1ZSIsaS5zZWxlY3RlZFJ1bklkfHwiIiksYigxKSxfKCJ2YWx1ZSIsIiIpLGIoMiksXygibmdGb3JPZiIsaS5ydW5zKSxiKDUpLF8oImRpc2FibGVkIiwhaS5kb3dubG9hZFVybEpzb24pKCJkb3dubG9hZCIsaS5nZXREb3dubG9hZE5hbWUoImpzb24iKSkoImhyZWYiLGkuZG93bmxvYWRVcmxKc29uLEFzKSxiKDIpLF8oImRpc2FibGVkIiwhaS5kb3dubG9hZFVybENzdikoImRvd25sb2FkIixpLmdldERvd25sb2FkTmFtZSgiY3N2IikpKCJocmVmIixpLmRvd25sb2FkVXJsQ3N2LEFzKX19ZnVuY3Rpb24gQjFlKG4sdCl7MSZuJiZUKDAsIkxvYWRpbmcuLi4iKX12YXIgSlE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucnVuU2VsZWN0ZWQ9bmV3IEwsdGhpcy5QbHVnaW5UeXBlPXFufWdldERvd25sb2FkTmFtZShlKXtsZXQgaT10aGlzLnJ1bnMuZmluZChyPT5yLmlkPT09dGhpcy5zZWxlY3RlZFJ1bklkKTtyZXR1cm4gaT9gJHtpLm5hbWV9LiR7ZX1gOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiXV0saW5wdXRzOntjYXJkTWV0YWRhdGE6ImNhcmRNZXRhZGF0YSIscnVuczoicnVucyIsc2VsZWN0ZWRSdW5JZDoic2VsZWN0ZWRSdW5JZCIsZG93bmxvYWRVcmxDc3Y6ImRvd25sb2FkVXJsQ3N2Iixkb3dubG9hZFVybEpzb246ImRvd25sb2FkVXJsSnNvbiJ9LG91dHB1dHM6e3J1blNlbGVjdGVkOiJydW5TZWxlY3RlZCJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9DYXJkTWV0YWRhdGEiLCIiXSxbImRhdGFOYW1lIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidGFnLW5hbWUiLDMsInRpdGxlIl0sWyJhcHBlYXJhbmNlIiwiZmlsbCIsMSwicnVuLXNlbGVjdG9yIl0sWyJtYXROYXRpdmVDb250cm9sIiwiIiwibmFtZSIsInJ1biIsImNka0ZvY3VzSW5pdGlhbCIsIiIsInJlcXVpcmVkIiwiIiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsic2VsZWN0ZWQiLCIiLDMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZG93bmxvYWQtY29udHJvbHMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJkb3dubG9hZCIsImhyZWYiLCJpbmNsdWRlRmVhdHVyZUZsYWdzIl0sWyJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIk5nU3dpdGNoRGVmYXVsdCJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFMoMCxOMWUsMzAsMTIsIm5nLWNvbnRhaW5lciIsMCksUygxLEIxZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDEsWnQpKSwyJmUpe2xldCByPXR0KDIpO18oIm5nSWYiLGkuY2FyZE1ldGFkYXRhKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltkbixGZSxNbywkaSxzcixRVCx1cSxmcSxGbixVMSxKMSwkMSxlRSxZcyxFZyxxdV0sc3R5bGVzOlsiaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxLjI1ZW07b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5ydW4tc2VsZWN0b3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtO3dpZHRoOjEwMCV9LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbX0uZG93bmxvYWQtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjNweCAxMHB4IDNweCAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksJFE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5zZWxlY3RlZFJ1bklkJD1uZXcgUmkobnVsbCksdGhpcy5jYXJkTWV0YWRhdGEkPWUuc2VsZWN0KFVzLHIuY2FyZElkKS5waXBlKFZlKG89PkJvb2xlYW4obykpKSx0aGlzLmRvd25sb2FkVXJsQ3N2JD11bihbZS5zZWxlY3QoVXMsci5jYXJkSWQpLHRoaXMuc2VsZWN0ZWRSdW5JZCRdKS5waXBlKFUoKFtvLGFdKT0+byYmYT9pLmRvd25sb2FkVXJsKG8ucGx1Z2luLG8udGFnLGEsImNzdiIpOm51bGwpLE5uKG51bGwpKSx0aGlzLmRvd25sb2FkVXJsSnNvbiQ9dW4oW2Uuc2VsZWN0KFVzLHIuY2FyZElkKSx0aGlzLnNlbGVjdGVkUnVuSWQkXSkucGlwZShVKChbbyxhXSk9Pm8mJmE/aS5kb3dubG9hZFVybChvLnBsdWdpbixvLnRhZyxhLCJqc29uIik6bnVsbCksTm4obnVsbCkpLHRoaXMucnVucyQ9dW4oW2Uuc2VsZWN0KG83KSxlLnNlbGVjdChFdSxyLmNhcmRJZCldKS5waXBlKFUoKFtvLGFdKT0+YT9PYmplY3Qua2V5cyhhKS5tYXAocz0+by5nZXQocykpLmZpbHRlcihCb29sZWFuKTpbXSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSxDKE1jKSxDKEtiKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGF0YV9kb3dubG9hZF9kaWFsb2ciXV0sZGVjbHM6Nix2YXJzOjE1LGNvbnN0czpbWzMsImNhcmRNZXRhZGF0YSIsInJ1bnMiLCJzZWxlY3RlZFJ1bklkIiwiZG93bmxvYWRVcmxDc3YiLCJkb3dubG9hZFVybEpzb24iLCJydW5TZWxlY3RlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGF0YV9kb3dubG9hZF9kaWFsb2dfY29tcG9uZW50IiwwKSxEKCJydW5TZWxlY3RlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2VsZWN0ZWRSdW5JZCQubmV4dChvKX0pLEcoMSwiYXN5bmMiKSxHKDIsImFzeW5jIiksRygzLCJhc3luYyIpLEcoNCwiYXN5bmMiKSxHKDUsImFzeW5jIiksZygpKSwyJmUmJl8oImNhcmRNZXRhZGF0YSIsVygxLDUsaS5jYXJkTWV0YWRhdGEkKSkoInJ1bnMiLFcoMiw3LGkucnVucyQpKSgic2VsZWN0ZWRSdW5JZCIsVygzLDksaS5zZWxlY3RlZFJ1bklkJCkpKCJkb3dubG9hZFVybENzdiIsVyg0LDExLGkuZG93bmxvYWRVcmxDc3YkKSkoImRvd25sb2FkVXJsSnNvbiIsVyg1LDEzLGkuZG93bmxvYWRVcmxKc29uJCkpfSxkZXBlbmRlbmNpZXM6W0pRLGx0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBLcyhuLHQpe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn1mdW5jdGlvbiBUdihuKXtyZXR1cm4gMT09PW4ubGVuZ3RoJiYobj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gS3Mobih0KSxlKX19KG4pKSx7bGVmdDpmdW5jdGlvbih0LGUsaSxyKXtmb3IobnVsbD09aSYmKGk9MCksbnVsbD09ciYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBvPWkrcj4+PjE7bih0W29dLGUpPDA/aT1vKzE6cj1vfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbih0LGUsaSxyKXtmb3IobnVsbD09aSYmKGk9MCksbnVsbD09ciYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBvPWkrcj4+PjE7bih0W29dLGUpPjA/cj1vOmk9bysxfXJldHVybiBpfX19dmFyIE5jPVR2KEtzKS5yaWdodCxsTj1NYXRoLnNxcnQoNTApLGNOPU1hdGguc3FydCgxMCksZE49TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIER2KG4sdCxlKXt2YXIgaSxvLGEscyxyPS0xO2lmKGU9K2UsKG49K24pPT0odD0rdCkmJmU+MClyZXR1cm5bbl07aWYoKGk9dDxuKSYmKG89bixuPXQsdD1vKSwwPT09KHM9YzAobix0LGUpKXx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3Iobj1NYXRoLmNlaWwobi9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LW4rMSkpOysrcjxvOylhW3JdPShuK3IpKnM7ZWxzZSBmb3Iobj1NYXRoLmZsb29yKG4qcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChuLXQrMSkpOysrcjxvOylhW3JdPShuLXIpL3M7cmV0dXJuIGkmJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gYzAobix0LGUpe3ZhciBpPSh0LW4pL01hdGgubWF4KDAsZSkscj1NYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCksbz1pL01hdGgucG93KDEwLHIpO3JldHVybiByPj0wPyhvPj1sTj8xMDpvPj1jTj81Om8+PWROPzI6MSkqTWF0aC5wb3coMTAscik6LU1hdGgucG93KDEwLC1yKS8obz49bE4/MTA6bz49Y04/NTpvPj1kTj8yOjEpfWZ1bmN0aW9uIEFkKG4sdCxlKXt2YXIgaT1NYXRoLmFicyh0LW4pL01hdGgubWF4KDAsZSkscj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCkpLG89aS9yO3JldHVybiBvPj1sTj9yKj0xMDpvPj1jTj9yKj01Om8+PWROJiYocio9MiksdDxuPy1yOnJ9dmFyICRUPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBvWihuKXtyZXR1cm4gbn12YXIgcE49MSx0RD0yLGZOPTMsZUQ9NCxhWj0xZS02O2Z1bmN0aW9uIFExZShuKXtyZXR1cm4idHJhbnNsYXRlKCIrKG4rLjUpKyIsMCkifWZ1bmN0aW9uIFoxZShuKXtyZXR1cm4idHJhbnNsYXRlKDAsIisobisuNSkrIikifWZ1bmN0aW9uIEsxZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuK24odCl9fWZ1bmN0aW9uIEoxZShuKXt2YXIgdD1NYXRoLm1heCgwLG4uYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gbi5yb3VuZCgpJiYodD1NYXRoLnJvdW5kKHQpKSxmdW5jdGlvbihlKXtyZXR1cm4rbihlKSt0fX1mdW5jdGlvbiAkMWUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gc1oobix0KXt2YXIgZT1bXSxpPW51bGwscj1udWxsLG89NixhPTYscz0zLGw9bj09PXBOfHxuPT09ZUQ/LTE6MSxjPW49PT1lRHx8bj09PXREPyJ4IjoieSIsZD1uPT09cE58fG49PT1mTj9RMWU6WjFlO2Z1bmN0aW9uIHUocCl7dmFyIGY9aT8/KHQudGlja3M/dC50aWNrcy5hcHBseSh0LGUpOnQuZG9tYWluKCkpLG09cj8/KHQudGlja0Zvcm1hdD90LnRpY2tGb3JtYXQuYXBwbHkodCxlKTpvWikseT1NYXRoLm1heChvLDApK3MsTT10LnJhbmdlKCksdj0rTVswXSsuNSx4PStNW00ubGVuZ3RoLTFdKy41LFI9KHQuYmFuZHdpZHRoP0oxZTpLMWUpKHQuY29weSgpKSxBPXAuc2VsZWN0aW9uP3Auc2VsZWN0aW9uKCk6cCxIPUEuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLHRlPUEuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoZix0KS5vcmRlcigpLEs9dGUuZXhpdCgpLENlPXRlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksWmU9dGUuc2VsZWN0KCJsaW5lIiksSWU9dGUuc2VsZWN0KCJ0ZXh0Iik7SD1ILm1lcmdlKEguZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLHRlPXRlLm1lcmdlKENlKSxaZT1aZS5tZXJnZShDZS5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLEllPUllLm1lcmdlKENlLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCp5KS5hdHRyKCJkeSIsbj09PXBOPyIwZW0iOm49PT1mTj8iMC43MWVtIjoiMC4zMmVtIikpLHAhPT1BJiYoSD1ILnRyYW5zaXRpb24ocCksdGU9dGUudHJhbnNpdGlvbihwKSxaZT1aZS50cmFuc2l0aW9uKHApLEllPUllLnRyYW5zaXRpb24ocCksSz1LLnRyYW5zaXRpb24ocCkuYXR0cigib3BhY2l0eSIsYVopLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIGlzRmluaXRlKEk9UihJKSk/ZChJKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxDZS5hdHRyKCJvcGFjaXR5IixhWikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXt2YXIgcmU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gZChyZSYmaXNGaW5pdGUocmU9cmUoSSkpP3JlOlIoSSkpfSkpLEsucmVtb3ZlKCksSC5hdHRyKCJkIixuPT09ZUR8fG49PXREP2E/Ik0iK2wqYSsiLCIrdisiSDAuNVYiK3grIkgiK2wqYToiTTAuNSwiK3YrIlYiK3g6YT8iTSIrdisiLCIrbCphKyJWMC41SCIreCsiViIrbCphOiJNIit2KyIsMC41SCIreCksdGUuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gZChSKEkpKX0pLFplLmF0dHIoYysiMiIsbCpvKSxJZS5hdHRyKGMsbCp5KS50ZXh0KG0pLEEuZmlsdGVyKCQxZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsbj09PXREPyJzdGFydCI6bj09PWVEPyJlbmQiOiJtaWRkbGUiKSxBLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1SfSl9cmV0dXJuIHUuc2NhbGU9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cCx1KTp0fSx1LnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGU9JFQuY2FsbChhcmd1bWVudHMpLHV9LHUudGlja0FyZ3VtZW50cz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT1wP1tdOiRULmNhbGwocCksdSk6ZS5zbGljZSgpfSx1LnRpY2tWYWx1ZXM9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09cD9udWxsOiRULmNhbGwocCksdSk6aSYmaS5zbGljZSgpfSx1LnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cCx1KTpyfSx1LnRpY2tTaXplPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K3AsdSk6b30sdS50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStwLHUpOm99LHUudGlja1NpemVPdXRlcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rcCx1KTphfSx1LnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStwLHUpOnN9LHV9dmFyIGVFZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBjWigpe2Zvcih2YXIgaSxuPTAsdD1hcmd1bWVudHMubGVuZ3RoLGU9e307bjx0Oysrbil7aWYoIShpPWFyZ3VtZW50c1tuXSsiIil8fGkgaW4gZXx8L1tccy5dLy50ZXN0KGkpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2kpO2VbaV09W119cmV0dXJuIG5ldyBuRChlKX1mdW5jdGlvbiBuRChuKXt0aGlzLl89bn1mdW5jdGlvbiBuRWUobix0KXtmb3IodmFyIHIsZT0wLGk9bi5sZW5ndGg7ZTxpOysrZSlpZigocj1uW2VdKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZX1mdW5jdGlvbiBsWihuLHQsZSl7Zm9yKHZhciBpPTAscj1uLmxlbmd0aDtpPHI7KytpKWlmKG5baV0ubmFtZT09PXQpe25baV09ZUVlLG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1lJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn1uRC5wcm90b3R5cGU9Y1oucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuRCxvbjpmdW5jdGlvbihuLHQpe3ZhciByLGU9dGhpcy5fLGk9ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGUpe3ZhciBpPSIiLHI9ZS5pbmRleE9mKCIuIik7aWYocj49MCYmKGk9ZS5zbGljZShyKzEpLGU9ZS5zbGljZSgwLHIpKSxlJiYhdC5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtyZXR1cm57dHlwZTplLG5hbWU6aX19KX0obisiIixlKSxvPS0xLGE9aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYocj0obj1pW29dKS50eXBlKWVbcl09bFooZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZihudWxsPT10KWZvcihyIGluIGUpZVtyXT1sWihlW3JdLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigocj0obj1pW29dKS50eXBlKSYmKHI9bkVlKGVbcl0sbi5uYW1lKSkpcmV0dXJuIHJ9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgbj17fSx0PXRoaXMuXztmb3IodmFyIGUgaW4gdCluW2VdPXRbZV0uc2xpY2UoKTtyZXR1cm4gbmV3IG5EKG4pfSxjYWxsOmZ1bmN0aW9uKG4sdCl7aWYoKHI9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcixvLGU9bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWVbaV09YXJndW1lbnRzW2krMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3IoaT0wLHI9KG89dGhpcy5fW25dKS5sZW5ndGg7aTxyOysraSlvW2ldLnZhbHVlLmFwcGx5KHQsZSl9LGFwcGx5OmZ1bmN0aW9uKG4sdCxlKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2Zvcih2YXIgaT10aGlzLl9bbl0scj0wLG89aS5sZW5ndGg7cjxvOysrcilpW3JdLnZhbHVlLmFwcGx5KHQsZSl9fTt2YXIgZ049Y1osaUQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLF9OPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDppRCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIFJkKG4pe3ZhciB0PW4rPSIiLGU9dC5pbmRleE9mKCI6Iik7cmV0dXJuIGU+PTAmJiJ4bWxucyIhPT0odD1uLnNsaWNlKDAsZSkpJiYobj1uLnNsaWNlKGUrMSkpLF9OLmhhc093blByb3BlcnR5KHQpP3tzcGFjZTpfTlt0XSxsb2NhbDpufTpufWZ1bmN0aW9uIGlFZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PWlEJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1pRD90LmNyZWF0ZUVsZW1lbnQobik6dC5jcmVhdGVFbGVtZW50TlMoZSxuKX19ZnVuY3Rpb24gckVlKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4uc3BhY2Usbi5sb2NhbCl9fWZ1bmN0aW9uIHJEKG4pe3ZhciB0PVJkKG4pO3JldHVybih0LmxvY2FsP3JFZTppRWUpKHQpfWZ1bmN0aW9uIG9FZSgpe31mdW5jdGlvbiBaZihuKXtyZXR1cm4gbnVsbD09bj9vRWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKG4pfX1mdW5jdGlvbiBhRWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBBdihuKXtyZXR1cm4gbnVsbD09bj9hRWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKG4pfX1mdW5jdGlvbiBSdihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKG4pfX1mdW5jdGlvbiBvRChuKXtyZXR1cm4gbmV3IEFycmF5KG4ubGVuZ3RoKX1mdW5jdGlvbiBrdihuLHQpe3RoaXMub3duZXJEb2N1bWVudD1uLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9bi5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1uLHRoaXMuX19kYXRhX189dH1rdi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmt2LGFwcGVuZENoaWxkOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKG4sdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKG4sdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKG4pfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChuKX19O3ZhciBoWj0iJCI7ZnVuY3Rpb24gc0VlKG4sdCxlLGkscixvKXtmb3IodmFyIHMsYT0wLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0saVthXT1zKTplW2FdPW5ldyBrdihuLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKHJbYV09cyl9ZnVuY3Rpb24gbEVlKG4sdCxlLGkscixvLGEpe3ZhciBzLGwsZixjPXt9LGQ9dC5sZW5ndGgsdT1vLmxlbmd0aCxwPW5ldyBBcnJheShkKTtmb3Iocz0wO3M8ZDsrK3MpKGw9dFtzXSkmJihwW3NdPWY9aForYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLGYgaW4gYz9yW3NdPWw6Y1tmXT1sKTtmb3Iocz0wO3M8dTsrK3MpKGw9Y1tmPWhaK2EuY2FsbChuLG9bc10scyxvKV0pPyhpW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbZl09bnVsbCk6ZVtzXT1uZXcga3YobixvW3NdKTtmb3Iocz0wO3M8ZDsrK3MpKGw9dFtzXSkmJmNbcFtzXV09PT1sJiYocltzXT1sKX1mdW5jdGlvbiBjRWUobix0KXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59ZnVuY3Rpb24gZEVlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfX1mdW5jdGlvbiB1RWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBwRWUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBmRWUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCx0KX19ZnVuY3Rpb24gbUVlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNldEF0dHJpYnV0ZShuLGUpfX1mdW5jdGlvbiBoRWUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gYUQobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxuLmRvY3VtZW50JiZufHxuLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGdFZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBfRWUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiB5RWUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4saSxlKX19ZnVuY3Rpb24gbnAobix0KXtyZXR1cm4gbi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxhRChuKS5nZXRDb21wdXRlZFN0eWxlKG4sbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBiRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbbl19fWZ1bmN0aW9uIHZFZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24geEVlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1tuXTp0aGlzW25dPWV9fWZ1bmN0aW9uIFJaKG4pe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiB5TihuKXtyZXR1cm4gbi5jbGFzc0xpc3R8fG5ldyBrWihuKX1mdW5jdGlvbiBrWihuKXt0aGlzLl9ub2RlPW4sdGhpcy5fbmFtZXM9Uloobi5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBQWihuLHQpe2Zvcih2YXIgZT15TihuKSxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWUuYWRkKHRbaV0pfWZ1bmN0aW9uIE9aKG4sdCl7Zm9yKHZhciBlPXlOKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gQ0VlKG4pe3JldHVybiBmdW5jdGlvbigpe1BaKHRoaXMsbil9fWZ1bmN0aW9uIE1FZShuKXtyZXR1cm4gZnVuY3Rpb24oKXtPWih0aGlzLG4pfX1mdW5jdGlvbiB3RWUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/UFo6T1opKHRoaXMsbil9fWZ1bmN0aW9uIFNFZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gRUVlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gVEVlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD8/IiJ9fWZ1bmN0aW9uIERFZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIElFZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1ufX1mdW5jdGlvbiBBRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD8/IiJ9fWZ1bmN0aW9uIFJFZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBrRWUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBQRWUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBPRWUoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBGRWUoKXt2YXIgbj10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUobix0aGlzLm5leHRTaWJsaW5nKTpufWZ1bmN0aW9uIExFZSgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59a1oucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24obil7dGhpcy5fbmFtZXMuaW5kZXhPZihuKTwwJiYodGhpcy5fbmFtZXMucHVzaChuKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihuKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2Yobik+PTB9fTt2YXIgcVo9e30sYk49bnVsbDtmdW5jdGlvbiBORWUobix0LGUpe3JldHVybiBuPVlaKG4sdCxlKSxmdW5jdGlvbihpKXt2YXIgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHxyIT09dGhpcyYmISg4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpKSYmbi5jYWxsKHRoaXMsaSl9fWZ1bmN0aW9uIFlaKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9Yk47Yk49aTt0cnl7bi5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LGUpfWZpbmFsbHl7Yk49cn19fWZ1bmN0aW9uIFZFZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYodCl7Zm9yKHZhciBvLGU9MCxpPS0xLHI9dC5sZW5ndGg7ZTxyOysrZSlvPXRbZV0sbi50eXBlJiZvLnR5cGUhPT1uLnR5cGV8fG8ubmFtZSE9PW4ubmFtZT90WysraV09bzp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gSEVlKG4sdCxlKXt2YXIgaT1xWi5oYXNPd25Qcm9wZXJ0eShuLnR5cGUpP05FZTpZWjtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBsLHM9dGhpcy5fX29uLGM9aSh0LG8sYSk7aWYocylmb3IodmFyIGQ9MCx1PXMubGVuZ3RoO2Q8dTsrK2QpaWYoKGw9c1tkXSkudHlwZT09PW4udHlwZSYmbC5uYW1lPT09bi5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ZSksdm9pZChsLnZhbHVlPXQpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihuLnR5cGUsYyxlKSxsPXt0eXBlOm4udHlwZSxuYW1lOm4ubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTplfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBRWihuLHQsZSl7dmFyIGk9YUQobikscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gekVlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFFaKHRoaXMsbix0KX19ZnVuY3Rpb24gVUVlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFFaKHRoaXMsbix0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fXR5cGVvZiBkb2N1bWVudDwidSImJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KHFaPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgdk49W251bGxdO2Z1bmN0aW9uIFVyKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIEtaKCl7cmV0dXJuIG5ldyBVcihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHZOKX1Vci5wcm90b3R5cGU9S1oucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpVcixzZWxlY3Q6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVpmKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBsLGMsbz10W3JdLGE9by5sZW5ndGgscz1pW3JdPW5ldyBBcnJheShhKSxkPTA7ZDxhOysrZCkobD1vW2RdKSYmKGM9bi5jYWxsKGwsbC5fX2RhdGFfXyxkLG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW2RdPWMpO3JldHVybiBuZXcgVXIoaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1BdihuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9W10scj1bXSxvPTA7bzxlOysrbylmb3IodmFyIGwsYT10W29dLHM9YS5sZW5ndGgsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihpLnB1c2gobi5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxyLnB1c2gobCkpO3JldHVybiBuZXcgVXIoaSxyKX0sZmlsdGVyOmZ1bmN0aW9uKG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1SdihuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgbCxvPXRbcl0sYT1vLmxlbmd0aCxzPWlbcl09W10sYz0wO2M8YTsrK2MpKGw9b1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgVXIoaSx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbihuLHQpe2lmKCFuKXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odGUpe2ZbKytjXT10ZX0pLGY7dmFyIGU9dD9sRWU6c0VlLGk9dGhpcy5fcGFyZW50cyxyPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fShuKSk7Zm9yKHZhciBvPXIubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgZD1pW2NdLHU9cltjXSxwPXUubGVuZ3RoLGY9bi5jYWxsKGQsZCYmZC5fX2RhdGFfXyxjLGkpLG09Zi5sZW5ndGgseT1zW2NdPW5ldyBBcnJheShtKSxNPWFbY109bmV3IEFycmF5KG0pO2UoZCx1LHksTSxsW2NdPW5ldyBBcnJheShwKSxmLHQpO2Zvcih2YXIgQSxILHg9MCxSPTA7eDxtOysreClpZihBPXlbeF0pe2Zvcih4Pj1SJiYoUj14KzEpOyEoSD1NW1JdKSYmKytSPG07KTtBLl9uZXh0PUh8fG51bGx9fXJldHVybihhPW5ldyBVcihhLGkpKS5fZW50ZXI9cyxhLl9leGl0PWwsYX0sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVyKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKG9EKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgVXIodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChvRCksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24obix0LGUpe3ZhciBpPXRoaXMuZW50ZXIoKSxyPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKGkpOmkuYXBwZW5kKG4rIiIpLG51bGwhPXQmJihyPXQocikpLG51bGw9PWU/by5yZW1vdmUoKTplKG8pLGkmJnI/aS5tZXJnZShyKS5vcmRlcigpOnJ9LG1lcmdlOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT1uLl9ncm91cHMsaT10Lmxlbmd0aCxvPU1hdGgubWluKGksZS5sZW5ndGgpLGE9bmV3IEFycmF5KGkpLHM9MDtzPG87KytzKWZvcih2YXIgcCxsPXRbc10sYz1lW3NdLGQ9bC5sZW5ndGgsdT1hW3NdPW5ldyBBcnJheShkKSxmPTA7ZjxkOysrZikocD1sW2ZdfHxjW2ZdKSYmKHVbZl09cCk7Zm9yKDtzPGk7KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IFVyKGEsdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPXRoaXMuX2dyb3Vwcyx0PS0xLGU9bi5sZW5ndGg7Kyt0PGU7KWZvcih2YXIgYSxpPW5bdF0scj1pLmxlbmd0aC0xLG89aVtyXTstLXI+PTA7KShhPWlbcl0pJiYobyYmNF5hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbihuKXtmdW5jdGlvbiB0KHUscCl7cmV0dXJuIHUmJnA/bih1Ll9fZGF0YV9fLHAuX19kYXRhX18pOiF1LSFwfW58fChuPWNFZSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGMsYT1lW29dLHM9YS5sZW5ndGgsbD1yW29dPW5ldyBBcnJheShzKSxkPTA7ZDxzOysrZCkoYz1hW2RdKSYmKGxbZF09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgVXIocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciBuPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7blsrK3RdPXRoaXN9KSxufSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPXRoaXMuX2dyb3Vwcyx0PTAsZT1uLmxlbmd0aDt0PGU7Kyt0KWZvcih2YXIgaT1uW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBhPWlbcl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciBuPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrbn0pLG59LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLGk9dC5sZW5ndGg7ZTxpOysrZSlmb3IodmFyIHMscj10W2VdLG89MCxhPXIubGVuZ3RoO288YTsrK28pKHM9cltvXSkmJm4uY2FsbChzLHMuX19kYXRhX18sbyxyKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbihuLHQpe3ZhciBlPVJkKG4pO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIGUubG9jYWw/aS5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOmkuZ2V0QXR0cmlidXRlKGUpfXJldHVybiB0aGlzLmVhY2goKG51bGw9PXQ/ZS5sb2NhbD91RWU6ZEVlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2UubG9jYWw/aEVlOm1FZTplLmxvY2FsP2ZFZTpwRWUpKGUsdCkpfSxzdHlsZTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PXQ/Z0VlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3lFZTpfRWUpKG4sdCxlPz8iIikpOm5wKHRoaXMubm9kZSgpLG4pfSxwcm9wZXJ0eTpmdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT10P2JFZToiZnVuY3Rpb24iPT10eXBlb2YgdD94RWU6dkVlKShuLHQpKTp0aGlzLm5vZGUoKVtuXX0sY2xhc3NlZDpmdW5jdGlvbihuLHQpe3ZhciBlPVJaKG4rIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPXlOKHRoaXMubm9kZSgpKSxyPS0xLG89ZS5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKGVbcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3dFZTp0P0NFZTpNRWUpKGUsdCkpfSx0ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP1NFZTooImZ1bmN0aW9uIj09dHlwZW9mIG4/VEVlOkVFZSkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP0RFZTooImZ1bmN0aW9uIj09dHlwZW9mIG4/QUVlOklFZSkobikpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFJFZSl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChrRWUpfSxhcHBlbmQ6ZnVuY3Rpb24obil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpyRChuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uKG4sdCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpyRChuKSxpPW51bGw9PXQ/UEVlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WmYodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKE9FZSl9LGNsb25lOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNlbGVjdChuP0xFZTpGRWUpfSxkYXR1bTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsbik6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKG4sdCxlKXt2YXIgcixhLGk9ZnVuY3Rpb24obil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixpPXQuaW5kZXhPZigiLiIpO3JldHVybiBpPj0wJiYoZT10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHt0eXBlOnQsbmFtZTplfX0pfShuKyIiKSxvPWkubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9dD9IRWU6VkVlLG51bGw9PWUmJihlPSExKSxyPTA7cjxvOysrcil0aGlzLmVhY2gocyhpW3JdLHQsZSkpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGQsbD0wLGM9cy5sZW5ndGg7bDxjOysrbClmb3Iocj0wLGQ9c1tsXTtyPG87KytyKWlmKChhPWlbcl0pLnR5cGU9PT1kLnR5cGUmJmEubmFtZT09PWQubmFtZSlyZXR1cm4gZC52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9VRWU6ekVlKShuLHQpKX19O3ZhciBrZD1LWjtmdW5jdGlvbiBzRChuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bmV3IFVyKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgVXIoW1tuXV0sdk4pfWZ1bmN0aW9uIEtmKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiBkMChuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBpcCgpe312YXIgY0Q9MS8uNyx1MD0iXFxzKihbKy1dP1xcZCspXFxzKiIsT3Y9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsVmM9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLGpFZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxHRWU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3UwLHUwLHUwXSsiXFwpJCIpLFdFZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbVmMsVmMsVmNdKyJcXCkkIikscUVlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbdTAsdTAsdTAsT3ZdKyJcXCkkIiksWUVlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbVmMsVmMsVmMsT3ZdKyJcXCkkIiksWEVlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tPdixWYyxWY10rIlxcKSQiKSxRRWU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tPdixWYyxWYyxPdl0rIlxcKSQiKSxKWj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiAkWigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGVLKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gemwobil7dmFyIHQsZTtyZXR1cm4gbj0obisiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9akVlLmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksNj09PWU/dEsodCk6Mz09PWU/bmV3IHRhKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXwyNDAmdCwoMTUmdCk8PDR8MTUmdCwxKTo4PT09ZT9sRCh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCgyNTUmdCkvMjU1KTo0PT09ZT9sRCh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8MjQwJnQsKCgxNSZ0KTw8NHwxNSZ0KS8yNTUpOm51bGwpOih0PUdFZS5leGVjKG4pKT9uZXcgdGEodFsxXSx0WzJdLHRbM10sMSk6KHQ9V0VlLmV4ZWMobikpP25ldyB0YSgyNTUqdFsxXS8xMDAsMjU1KnRbMl0vMTAwLDI1NSp0WzNdLzEwMCwxKToodD1xRWUuZXhlYyhuKSk/bEQodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9WUVlLmV4ZWMobikpP2xEKDI1NSp0WzFdLzEwMCwyNTUqdFsyXS8xMDAsMjU1KnRbM10vMTAwLHRbNF0pOih0PVhFZS5leGVjKG4pKT9ySyh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PVFFZS5leGVjKG4pKT9ySyh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOkpaLmhhc093blByb3BlcnR5KG4pP3RLKEpaW25dKToidHJhbnNwYXJlbnQiPT09bj9uZXcgdGEoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB0SyhuKXtyZXR1cm4gbmV3IHRhKG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbiwxKX1mdW5jdGlvbiBsRChuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IHRhKG4sdCxlLGkpfWZ1bmN0aW9uIE1OKG4pe3JldHVybiBuIGluc3RhbmNlb2YgaXB8fChuPXpsKG4pKSxuP25ldyB0YSgobj1uLnJnYigpKS5yLG4uZyxuLmIsbi5vcGFjaXR5KTpuZXcgdGF9ZnVuY3Rpb24gcDAobix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP01OKG4pOm5ldyB0YShuLHQsZSxpPz8xKX1mdW5jdGlvbiB0YShuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gbksoKXtyZXR1cm4iIyIreE4odGhpcy5yKSt4Tih0aGlzLmcpK3hOKHRoaXMuYil9ZnVuY3Rpb24gaUsoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0obj1pc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT1uPyIpIjoiLCAiK24rIikiKX1mdW5jdGlvbiB4TihuKXtyZXR1cm4oKG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpKTwxNj8iMCI6IiIpK24udG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHJLKG4sdCxlLGkpe3JldHVybiBpPD0wP249dD1lPU5hTjplPD0wfHxlPj0xP249dD1OYU46dDw9MCYmKG49TmFOKSxuZXcgQmMobix0LGUsaSl9ZnVuY3Rpb24gb0sobil7aWYobiBpbnN0YW5jZW9mIEJjKXJldHVybiBuZXcgQmMobi5oLG4ucyxuLmwsbi5vcGFjaXR5KTtpZihuIGluc3RhbmNlb2YgaXB8fChuPXpsKG4pKSwhbilyZXR1cm4gbmV3IEJjO2lmKG4gaW5zdGFuY2VvZiBCYylyZXR1cm4gbjt2YXIgdD0obj1uLnJnYigpKS5yLzI1NSxlPW4uZy8yNTUsaT1uLmIvMjU1LHI9TWF0aC5taW4odCxlLGkpLG89TWF0aC5tYXgodCxlLGkpLGE9TmFOLHM9by1yLGw9KG8rcikvMjtyZXR1cm4gcz8oYT10PT09bz8oZS1pKS9zKzYqKGU8aSk6ZT09PW8/KGktdCkvcysyOih0LWUpL3MrNCxzLz1sPC41P28rcjoyLW8tcixhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEJjKGEscyxsLG4ub3BhY2l0eSl9ZnVuY3Rpb24gSmYobix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP29LKG4pOm5ldyBCYyhuLHQsZSxpPz8xKX1mdW5jdGlvbiBCYyhuLHQsZSxpKXt0aGlzLmg9K24sdGhpcy5zPSt0LHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gQ04obix0LGUpe3JldHVybiAyNTUqKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpfUtmKGlwLHpsLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OiRaLGZvcm1hdEhleDokWixmb3JtYXRIc2w6ZnVuY3Rpb24oKXtyZXR1cm4gb0sodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjplSyx0b1N0cmluZzplS30pLEtmKHRhLHAwLGQwKGlwLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uP2NEOk1hdGgucG93KGNELG4pLG5ldyB0YSh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24obil7cmV0dXJuIG49bnVsbD09bj8uNzpNYXRoLnBvdyguNyxuKSxuZXcgdGEodGhpcy5yKm4sdGhpcy5nKm4sdGhpcy5iKm4sdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpuSyxmb3JtYXRIZXg6bkssZm9ybWF0UmdiOmlLLHRvU3RyaW5nOmlLfSkpLEtmKEJjLEpmLGQwKGlwLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uP2NEOk1hdGgucG93KGNELG4pLG5ldyBCYyh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBCYyh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IHRhKENOKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLENOKG4scixpKSxDTihuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0obj1pc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09bj8iKSI6IiwgIituKyIpIil9fSkpO3ZhciBhSz1NYXRoLlBJLzE4MCxzSz0xODAvTWF0aC5QSSxsSz0uOTY0MjIsY0s9MSxkSz0uODI1MjEsdUs9NC8yOSxmMD02LzI5LHBLPTMqZjAqZjAsS0VlPWYwKmYwKmYwO2Z1bmN0aW9uIGZLKG4pe2lmKG4gaW5zdGFuY2VvZiBIYylyZXR1cm4gbmV3IEhjKG4ubCxuLmEsbi5iLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIFBkKXJldHVybiBtSyhuKTtuIGluc3RhbmNlb2YgdGF8fChuPU1OKG4pKTt2YXIgbyxhLHQ9VE4obi5yKSxlPVROKG4uZyksaT1UTihuLmIpLHI9d04oKC4yMjI1MDQ1KnQrLjcxNjg3ODYqZSsuMDYwNjE2OSppKS9jSyk7cmV0dXJuIHQ9PT1lJiZlPT09aT9vPWE9cjoobz13TigoLjQzNjA3NDcqdCsuMzg1MDY0OSplKy4xNDMwODA0KmkpL2xLKSxhPXdOKCguMDEzOTMyMip0Ky4wOTcxMDQ1KmUrLjcxNDE3MzMqaSkvZEspKSxuZXcgSGMoMTE2KnItMTYsNTAwKihvLXIpLDIwMCooci1hKSxuLm9wYWNpdHkpfWZ1bmN0aW9uIEhjKG4sdCxlLGkpe3RoaXMubD0rbix0aGlzLmE9K3QsdGhpcy5iPStlLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiB3TihuKXtyZXR1cm4gbj5LRWU/TWF0aC5wb3cobiwxLzMpOm4vcEsrdUt9ZnVuY3Rpb24gU04obil7cmV0dXJuIG4+ZjA/bipuKm46cEsqKG4tdUspfWZ1bmN0aW9uIEVOKG4pe3JldHVybiAyNTUqKG48PS4wMDMxMzA4PzEyLjkyKm46MS4wNTUqTWF0aC5wb3cobiwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gVE4obil7cmV0dXJuKG4vPTI1NSk8PS4wNDA0NT9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gJGYobix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKG4pe2lmKG4gaW5zdGFuY2VvZiBQZClyZXR1cm4gbmV3IFBkKG4uaCxuLmMsbi5sLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIEhjfHwobj1mSyhuKSksMD09PW4uYSYmMD09PW4uYilyZXR1cm4gbmV3IFBkKE5hTiwwPG4ubCYmbi5sPDEwMD8wOk5hTixuLmwsbi5vcGFjaXR5KTt2YXIgdD1NYXRoLmF0YW4yKG4uYixuLmEpKnNLO3JldHVybiBuZXcgUGQodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KG4uYSpuLmErbi5iKm4uYiksbi5sLG4ub3BhY2l0eSl9KG4pOm5ldyBQZChuLHQsZSxpPz8xKX1mdW5jdGlvbiBQZChuLHQsZSxpKXt0aGlzLmg9K24sdGhpcy5jPSt0LHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gbUsobil7aWYoaXNOYU4obi5oKSlyZXR1cm4gbmV3IEhjKG4ubCwwLDAsbi5vcGFjaXR5KTt2YXIgdD1uLmgqYUs7cmV0dXJuIG5ldyBIYyhuLmwsTWF0aC5jb3ModCkqbi5jLE1hdGguc2luKHQpKm4uYyxuLm9wYWNpdHkpfWZ1bmN0aW9uIElOKG4sdCxlLGkscil7dmFyIG89bipuLGE9bypuO3JldHVybigoMS0zKm4rMypvLWEpKnQrKDQtNipvKzMqYSkqZSsoMSszKm4rMypvLTMqYSkqaSthKnIpLzZ9ZnVuY3Rpb24gbTAobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIF9LKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuK2UqdH19ZnVuY3Rpb24gdUQobix0KXt2YXIgZT10LW47cmV0dXJuIGU/X0sobixlPjE4MHx8ZTwtMTgwP2UtMzYwKk1hdGgucm91bmQoZS8zNjApOmUpOm0wKGlzTmFOKG4pP3Q6bil9ZnVuY3Rpb24gV2Eobix0KXt2YXIgZT10LW47cmV0dXJuIGU/X0sobixlKTptMChpc05hTihuKT90Om4pfUtmKEhjLGZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mSyhuKTpuZXcgSGMobix0LGUsaT8/MSl9LGQwKGlwLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEhjKHRoaXMubCsxOCoobj8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBIYyh0aGlzLmwtMTgqKG4/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIG49KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9uOm4rdGhpcy5hLzUwMCxlPWlzTmFOKHRoaXMuYik/bjpuLXRoaXMuYi8yMDA7cmV0dXJuIG5ldyB0YShFTigzLjEzMzg1NjEqKHQ9bEsqU04odCkpLTEuNjE2ODY2Nyoobj1jSypTTihuKSktLjQ5MDYxNDYqKGU9ZEsqU04oZSkpKSxFTigtLjk3ODc2ODQqdCsxLjkxNjE0MTUqbisuMDMzNDU0KmUpLEVOKC4wNzE5NDUzKnQtLjIyODk5MTQqbisxLjQwNTI0MjcqZSksdGhpcy5vcGFjaXR5KX19KSksS2YoUGQsJGYsZDAoaXAse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgUGQodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG4/PzEpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFBkKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihuPz8xKSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gbUsodGhpcykucmdiKCl9fSkpO3ZhciBlbT1mdW5jdGlvbiBuKHQpe3ZhciBlPWZ1bmN0aW9uKG4pe3JldHVybiAxPT0obj0rbik/V2E6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10P2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbj1NYXRoLnBvdyhuLGUpLHQ9TWF0aC5wb3codCxlKS1uLGU9MS9lLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyhuK2kqdCxlKX19KHQsZSxuKTptMChpc05hTih0KT9lOnQpfX0odCk7ZnVuY3Rpb24gaShyLG8pe3ZhciBhPWUoKHI9cDAocikpLnIsKG89cDAobykpLnIpLHM9ZShyLmcsby5nKSxsPWUoci5iLG8uYiksYz1XYShyLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuIHIucj1hKGQpLHIuZz1zKGQpLHIuYj1sKGQpLHIub3BhY2l0eT1jKGQpLHIrIiJ9fXJldHVybiBpLmdhbW1hPW4saX0oMSk7ZnVuY3Rpb24gYksobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBhLHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKTtmb3IoYT0wO2E8ZTsrK2Epcz1wMCh0W2FdKSxpW2FdPXMucnx8MCxyW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gaT1uKGkpLHI9bihyKSxvPW4obykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1pKGwpLHMuZz1yKGwpLHMuYj1vKGwpLHMrIiJ9fX1mdW5jdGlvbiB2SyhuLHQpe3R8fCh0PVtdKTt2YXIgcixlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihyPTA7cjxlOysrcilpW3JdPW5bcl0qKDEtbykrdFtyXSpvO3JldHVybiBpfX1mdW5jdGlvbiBDSyhuLHQpe3ZhciBhLGU9dD90Lmxlbmd0aDowLGk9bj9NYXRoLm1pbihlLG4ubGVuZ3RoKTowLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGUpO2ZvcihhPTA7YTxpOysrYSlyW2FdPXRtKG5bYV0sdFthXSk7Zm9yKDthPGU7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPGk7KythKW9bYV09clthXShzKTtyZXR1cm4gb319ZnVuY3Rpb24gTUsobix0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBlLnNldFRpbWUobiooMS1pKSt0KmkpLGV9fWZ1bmN0aW9uIFZvKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIHdLKG4sdCl7dmFyIHIsZT17fSxpPXt9O2ZvcihyIGluKG51bGw9PT1ufHwib2JqZWN0IiE9dHlwZW9mIG4pJiYobj17fSksKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpJiYodD17fSksdClyIGluIG4/ZVtyXT10bShuW3JdLHRbcl0pOmlbcl09dFtyXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKHIgaW4gZSlpW3JdPWVbcl0obyk7cmV0dXJuIGl9fWJLKGZ1bmN0aW9uKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0sbz1uW2krMV07cmV0dXJuIElOKChlLWkvdCkqdCxpPjA/bltpLTFdOjIqci1vLHIsbyxpPHQtMT9uW2krMl06MipvLXIpfX0pLGJLKGZ1bmN0aW9uKG4pe3ZhciB0PW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqdCk7cmV0dXJuIElOKChlLWkvdCkqdCxuWyhpK3QtMSkldF0sbltpJXRdLG5bKGkrMSkldF0sblsoaSsyKSV0XSl9fSk7dmFyIFJOPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxBTj1uZXcgUmVnRXhwKFJOLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIEZ2KG4sdCl7dmFyIGkscixvLGU9Uk4ubGFzdEluZGV4PUFOLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2ZvcihuKz0iIix0Kz0iIjsoaT1STi5leGVjKG4pKSYmKHI9QU4uZXhlYyh0KSk7KShvPXIuaW5kZXgpPmUmJihvPXQuc2xpY2UoZSxvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChpPWlbMF0pPT09KHI9clswXSk/c1thXT9zW2FdKz1yOnNbKythXT1yOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlZvKGkscil9KSksZT1BTi5sYXN0SW5kZXg7cmV0dXJuIGU8dC5sZW5ndGgmJihvPXQuc2xpY2UoZSksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpKyIifX0obFswXS54KTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19KHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdSxkPTA7ZDx0OysrZClzWyh1PWxbZF0pLmldPXUueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIHRtKG4sdCl7dmFyIGksZT10eXBlb2YgdDtyZXR1cm4gbnVsbD09dHx8ImJvb2xlYW4iPT09ZT9tMCh0KTooIm51bWJlciI9PT1lP1ZvOiJzdHJpbmciPT09ZT8oaT16bCh0KSk/KHQ9aSxlbSk6RnY6dCBpbnN0YW5jZW9mIHpsP2VtOnQgaW5zdGFuY2VvZiBEYXRlP01LOmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0odCk/dks6QXJyYXkuaXNBcnJheSh0KT9DSzoiZnVuY3Rpb24iIT10eXBlb2YgdC52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgdC50b1N0cmluZ3x8aXNOYU4odCk/d0s6Vm8pKG4sdCl9ZnVuY3Rpb24ga04obix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4qKDEtZSkrdCplKX19dmFyIEx2LE9OLEVLLGZELFNLPTE4MC9NYXRoLlBJLHBEPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIFBOKG4sdCxlLGkscixvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KG4qbit0KnQpKSYmKG4vPWEsdC89YSksKGw9biplK3QqaSkmJihlLT1uKmwsaS09dCpsKSwocz1NYXRoLnNxcnQoZSplK2kqaSkpJiYoZS89cyxpLz1zLGwvPXMpLG4qaTx0KmUmJihuPS1uLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LG4pKlNLLHNrZXdYOk1hdGguYXRhbihsKSpTSyxzY2FsZVg6YSxzY2FsZVk6c319ZnVuY3Rpb24gSUsobix0LGUsaSl7ZnVuY3Rpb24gcihjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dmFyIHU9W10scD1bXTtyZXR1cm4gYz1uKGMpLGQ9bihkKSxmdW5jdGlvbihjLGQsdSxwLGYsbSl7aWYoYyE9PXV8fGQhPT1wKXt2YXIgeT1mLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLGUpO20ucHVzaCh7aTp5LTQseDpWbyhjLHUpfSx7aTp5LTIseDpWbyhkLHApfSl9ZWxzZSh1fHxwKSYmZi5wdXNoKCJ0cmFuc2xhdGUoIit1K3QrcCtlKX0oYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSxkLnRyYW5zbGF0ZVgsZC50cmFuc2xhdGVZLHUscCksZnVuY3Rpb24oYyxkLHUscCl7YyE9PWQ/KGMtZD4xODA/ZCs9MzYwOmQtYz4xODAmJihjKz0zNjApLHAucHVzaCh7aTp1LnB1c2gocih1KSsicm90YXRlKCIsbnVsbCxpKS0yLHg6Vm8oYyxkKX0pKTpkJiZ1LnB1c2gocih1KSsicm90YXRlKCIrZCtpKX0oYy5yb3RhdGUsZC5yb3RhdGUsdSxwKSxmdW5jdGlvbihjLGQsdSxwKXtjIT09ZD9wLnB1c2goe2k6dS5wdXNoKHIodSkrInNrZXdYKCIsbnVsbCxpKS0yLHg6Vm8oYyxkKX0pOmQmJnUucHVzaChyKHUpKyJza2V3WCgiK2QraSl9KGMuc2tld1gsZC5za2V3WCx1LHApLGZ1bmN0aW9uKGMsZCx1LHAsZixtKXtpZihjIT09dXx8ZCE9PXApe3ZhciB5PWYucHVzaChyKGYpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTttLnB1c2goe2k6eS00LHg6Vm8oYyx1KX0se2k6eS0yLHg6Vm8oZCxwKX0pfWVsc2UoMSE9PXV8fDEhPT1wKSYmZi5wdXNoKHIoZikrInNjYWxlKCIrdSsiLCIrcCsiKSIpfShjLnNjYWxlWCxjLnNjYWxlWSxkLnNjYWxlWCxkLnNjYWxlWSx1LHApLGM9ZD1udWxsLGZ1bmN0aW9uKGYpe2Zvcih2YXIgTSxtPS0xLHk9cC5sZW5ndGg7KyttPHk7KXVbKE09cFttXSkuaV09TS54KGYpO3JldHVybiB1LmpvaW4oIiIpfX19dmFyIEZOPUlLKGZ1bmN0aW9uKG4pe3JldHVybiJub25lIj09PW4/cEQ6KEx2fHwoTHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksT049ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LEVLPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMdi5zdHlsZS50cmFuc2Zvcm09bixuPUVLLmdldENvbXB1dGVkU3R5bGUoT04uYXBwZW5kQ2hpbGQoTHYpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLE9OLnJlbW92ZUNoaWxkKEx2KSxQTigrKG49bi5zbGljZSg3LC0xKS5zcGxpdCgiLCIpKVswXSwrblsxXSwrblsyXSwrblszXSwrbls0XSwrbls1XSkpfSwicHgsICIsInB4KSIsImRlZykiKSxMTj1JSyhmdW5jdGlvbihuKXtyZXR1cm4gbnVsbD09bj9wRDooZkR8fChmRD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxmRC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbiksKG49ZkQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/UE4oKG49bi5tYXRyaXgpLmEsbi5iLG4uYyxuLmQsbi5lLG4uZik6cEQpfSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIEFLKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBpPW4oKHQ9SmYodCkpLmgsKGU9SmYoZSkpLmgpLHI9V2EodC5zLGUucyksbz1XYSh0LmwsZS5sKSxhPVdhKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gdC5oPWkocyksdC5zPXIocyksdC5sPW8ocyksdC5vcGFjaXR5PWEocyksdCsiIn19fXZhciBOTj1BSyh1RCk7ZnVuY3Rpb24gUksobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD0kZih0KSkuaCwoZT0kZihlKSkuaCkscj1XYSh0LmMsZS5jKSxvPVdhKHQubCxlLmwpLGE9V2EodC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9aShzKSx0LmM9cihzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19QUsoV2EpO3ZhciBtRCxWdixCTj1SSyh1RCksaDA9KFJLKFdhKSwwKSxCdj0wLE52PTAsUEs9MWUzLGhEPTAsbm09MCxnRD0wLEh2PSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLE9LPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobiwxNyl9O2Z1bmN0aW9uIGcwKCl7cmV0dXJuIG5tfHwoT0soYVRlKSxubT1Idi5ub3coKStnRCl9ZnVuY3Rpb24gYVRlKCl7bm09MH1mdW5jdGlvbiB6digpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gX0Qobix0LGUpe3ZhciBpPW5ldyB6djtyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIGtLKCl7bm09KGhEPUh2Lm5vdygpKStnRCxoMD1Cdj0wO3RyeXshZnVuY3Rpb24oKXtnMCgpLCsraDA7Zm9yKHZhciB0LG49bUQ7bjspKHQ9bm0tbi5fdGltZSk+PTAmJm4uX2NhbGwuY2FsbChudWxsLHQpLG49bi5fbmV4dDstLWgwfSgpfWZpbmFsbHl7aDA9MCxmdW5jdGlvbigpe2Zvcih2YXIgbixlLHQ9bUQsaT0xLzA7dDspdC5fY2FsbD8oaT50Ll90aW1lJiYoaT10Ll90aW1lKSxuPXQsdD10Ll9uZXh0KTooZT10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PW4/bi5fbmV4dD1lOm1EPWUpO1Z2PW4sVk4oaSl9KCksbm09MH19ZnVuY3Rpb24gc1RlKCl7dmFyIG49SHYubm93KCksdD1uLWhEO3Q+UEsmJihnRC09dCxoRD1uKX1mdW5jdGlvbiBWTihuKXtoMHx8KEJ2JiYoQnY9Y2xlYXJUaW1lb3V0KEJ2KSksbi1ubT4yND8objwxLzAmJihCdj1zZXRUaW1lb3V0KGtLLG4tSHYubm93KCktZ0QpKSxOdiYmKE52PWNsZWFySW50ZXJ2YWwoTnYpKSk6KE52fHwoaEQ9SHYubm93KCksTnY9c2V0SW50ZXJ2YWwoc1RlLFBLKSksaDA9MSxPSyhrSykpKX1mdW5jdGlvbiB5RChuLHQsZSl7dmFyIGk9bmV3IHp2O3JldHVybiBpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0PW51bGw9PXQ/MDordCxlKSxpfXp2LnByb3RvdHlwZT1fRC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnp2LHJlc3RhcnQ6ZnVuY3Rpb24obix0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7ZT0obnVsbD09ZT9nMCgpOitlKSsobnVsbD09dD8wOit0KSwhdGhpcy5fbmV4dCYmVnYhPT10aGlzJiYoVnY/VnYuX25leHQ9dGhpczptRD10aGlzLFZ2PXRoaXMpLHRoaXMuX2NhbGw9bix0aGlzLl90aW1lPWUsVk4oKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsVk4oKSl9fTt2YXIgY1RlPWdOKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGRUZT1bXSxOSz0wLEhOPTEsdkQ9MixiRD0zLExLPTQseEQ9NSxVdj02O2Z1bmN0aW9uIHJwKG4sdCxlLGkscixvKXt2YXIgYT1uLl9fdHJhbnNpdGlvbjtpZihhKXtpZihlIGluIGEpcmV0dXJufWVsc2Ugbi5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKG4sdCxlKXt2YXIgcixpPW4uX190cmFuc2l0aW9uO2Z1bmN0aW9uIGEoYyl7dmFyIGQsdSxwLGY7aWYoZS5zdGF0ZSE9PUhOKXJldHVybiBsKCk7Zm9yKGQgaW4gaSlpZigoZj1pW2RdKS5uYW1lPT09ZS5uYW1lKXtpZihmLnN0YXRlPT09YkQpcmV0dXJuIHlEKGEpO2Yuc3RhdGU9PT1MSz8oZi5zdGF0ZT1VdixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsbixuLl9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbZF0pOitkPHQmJihmLnN0YXRlPVV2LGYudGltZXIuc3RvcCgpLGYub24uY2FsbCgiY2FuY2VsIixuLG4uX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxkZWxldGUgaVtkXSl9aWYoeUQoZnVuY3Rpb24oKXtlLnN0YXRlPT09YkQmJihlLnN0YXRlPUxLLGUudGltZXIucmVzdGFydChzLGUuZGVsYXksZS50aW1lKSxzKGMpKX0pLGUuc3RhdGU9dkQsZS5vbi5jYWxsKCJzdGFydCIsbixuLl9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksZS5zdGF0ZT09PXZEKXtmb3IoZS5zdGF0ZT1iRCxyPW5ldyBBcnJheShwPWUudHdlZW4ubGVuZ3RoKSxkPTAsdT0tMTtkPHA7KytkKShmPWUudHdlZW5bZF0udmFsdWUuY2FsbChuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSkmJihyWysrdV09Zik7ci5sZW5ndGg9dSsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgZD1jPGUuZHVyYXRpb24/ZS5lYXNlLmNhbGwobnVsbCxjL2UuZHVyYXRpb24pOihlLnRpbWVyLnJlc3RhcnQobCksZS5zdGF0ZT14RCwxKSx1PS0xLHA9ci5sZW5ndGg7Kyt1PHA7KXJbdV0uY2FsbChuLGQpO2Uuc3RhdGU9PT14RCYmKGUub24uY2FsbCgiZW5kIixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtmb3IodmFyIGMgaW4gZS5zdGF0ZT1VdixlLnRpbWVyLnN0b3AoKSxkZWxldGUgaVt0XSxpKXJldHVybjtkZWxldGUgbi5fX3RyYW5zaXRpb259aVt0XT1lLGUudGltZXI9X0QoZnVuY3Rpb24oYyl7ZS5zdGF0ZT1ITixlLnRpbWVyLnJlc3RhcnQoYSxlLmRlbGF5LGUudGltZSksZS5kZWxheTw9YyYmYShjLWUuZGVsYXkpfSwwLGUudGltZSl9KG4sZSx7bmFtZTp0LGluZGV4OmksZ3JvdXA6cixvbjpjVGUsdHdlZW46ZFRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOk5LfSl9ZnVuY3Rpb24ganYobix0KXt2YXIgZT1fbyhuLHQpO2lmKGUuc3RhdGU+TkspdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBfYShuLHQpe3ZhciBlPV9vKG4sdCk7aWYoZS5zdGF0ZT5iRCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gZX1mdW5jdGlvbiBfbyhuLHQpe3ZhciBlPW4uX190cmFuc2l0aW9uO2lmKCFlfHwhKGU9ZVt0XSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBlfWZ1bmN0aW9uIHBUZShuLHQpe3ZhciBlLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9X2EodGhpcyxuKSxvPXIudHdlZW47aWYobyE9PWUpZm9yKHZhciBhPTAscz0oaT1lPW8pLmxlbmd0aDthPHM7KythKWlmKGlbYV0ubmFtZT09PXQpeyhpPWkuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9ci50d2Vlbj1pfX1mdW5jdGlvbiBmVGUobix0LGUpe3ZhciBpLHI7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPV9hKHRoaXMsbiksYT1vLnR3ZWVuO2lmKGEhPT1pKXtyPShpPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6ZX0sbD0wLGM9ci5sZW5ndGg7bDxjOysrbClpZihyW2xdLm5hbWU9PT10KXtyW2xdPXM7YnJlYWt9bD09PWMmJnIucHVzaChzKX1vLnR3ZWVuPXJ9fWZ1bmN0aW9uIF8wKG4sdCxlKXt2YXIgaT1uLl9pZDtyZXR1cm4gbi5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9X2EodGhpcyxpKTsoci52YWx1ZXx8KHIudmFsdWU9e30pKVt0XT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHIpe3JldHVybiBfbyhyLGkpLnZhbHVlW3RdfX1mdW5jdGlvbiBDRChuLHQpe3ZhciBlO3JldHVybigibnVtYmVyIj09dHlwZW9mIHQ/Vm86dCBpbnN0YW5jZW9mIHpsP2VtOihlPXpsKHQpKT8odD1lLGVtKTpGdikobix0KX1mdW5jdGlvbiBtVGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGhUZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9fWZ1bmN0aW9uIGdUZShuLHQsZSl7dmFyIGksbyxyPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGUobik7cmV0dXJuIGE9PT1yP251bGw6YT09PWk/bzpvPXQoaT1hLGUpfX1mdW5jdGlvbiBfVGUobix0LGUpe3ZhciBpLG8scj1lKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTtyZXR1cm4gYT09PXI/bnVsbDphPT09aT9vOm89dChpPWEsZSl9fWZ1bmN0aW9uIHlUZShuLHQsZSl7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLGwscz1lKHRoaXMpO3JldHVybiBudWxsPT1zP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6KGE9dGhpcy5nZXRBdHRyaWJ1dGUobikpPT09KGw9cysiIik/bnVsbDphPT09aSYmbD09PXI/bzoocj1sLG89dChpPWEscykpfX1mdW5jdGlvbiBiVGUobix0LGUpe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxsLHM9ZSh0aGlzKTtyZXR1cm4gbnVsbD09cz92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCkpPT09KGw9cysiIik/bnVsbDphPT09aSYmbD09PXI/bzoocj1sLG89dChpPWEscykpfX1mdW5jdGlvbiBDVGUobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihlPShpPW8pJiZmdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCx0LmNhbGwodGhpcyxlKSl9fShuLG8pKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gTVRlKG4sdCl7dmFyIGUsaTtmdW5jdGlvbiByKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1pJiYoZT0oaT1vKSYmZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUobix0LmNhbGwodGhpcyxlKSl9fShuLG8pKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gd1RlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7anYodGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFNUZShuLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7anYodGhpcyxuKS5kZWxheT10fX1mdW5jdGlvbiBFVGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtfYSh0aGlzLG4pLmR1cmF0aW9uPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gVFRlKG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtfYSh0aGlzLG4pLmR1cmF0aW9uPXR9fXZhciBrVGU9a2QucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEpLKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9fXZhciBqVGU9MDtmdW5jdGlvbiBuYShuLHQsZSxpKXt0aGlzLl9ncm91cHM9bix0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1lLHRoaXMuX2lkPWl9ZnVuY3Rpb24gTUQoKXtyZXR1cm4rK2pUZX12YXIgeTA9a2QucHJvdG90eXBlO25hLnByb3RvdHlwZT1mdW5jdGlvbihuKXtyZXR1cm4ga2QoKS50cmFuc2l0aW9uKG4pfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5hLHNlbGVjdDpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVpmKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpZm9yKHZhciBkLHUscz1pW2FdLGw9cy5sZW5ndGgsYz1vW2FdPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCkoZD1zW3BdKSYmKHU9bi5jYWxsKGQsZC5fX2RhdGFfXyxwLHMpKSYmKCJfX2RhdGFfXyJpbiBkJiYodS5fX2RhdGFfXz1kLl9fZGF0YV9fKSxjW3BdPXUscnAoY1twXSx0LGUscCxjLF9vKGQsZSkpKTtyZXR1cm4gbmV3IG5hKG8sdGhpcy5fcGFyZW50cyx0LGUpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1BdihuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10sYT1bXSxzPTA7czxyOysrcylmb3IodmFyIGQsbD1pW3NdLGM9bC5sZW5ndGgsdT0wO3U8YzsrK3UpaWYoZD1sW3VdKXtmb3IodmFyIGYscD1uLmNhbGwoZCxkLl9fZGF0YV9fLHUsbCksbT1fbyhkLGUpLHk9MCxNPXAubGVuZ3RoO3k8TTsrK3kpKGY9cFt5XSkmJnJwKGYsdCxlLHkscCxtKTtvLnB1c2gocCksYS5wdXNoKGQpfXJldHVybiBuZXcgbmEobyxhLHQsZSl9LGZpbHRlcjpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49UnYobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsbz10W3JdLGE9by5sZW5ndGgscz1pW3JdPVtdLGM9MDtjPGE7KytjKShsPW9bY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IG5hKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24obil7aWYobi5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCksYT1uZXcgQXJyYXkoaSkscz0wO3M8bzsrK3MpZm9yKHZhciBwLGw9dFtzXSxjPWVbc10sZD1sLmxlbmd0aCx1PWFbc109bmV3IEFycmF5KGQpLGY9MDtmPGQ7KytmKShwPWxbZl18fGNbZl0pJiYodVtmXT1wKTtmb3IoO3M8aTsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgbmEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtUZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fbmFtZSx0PXRoaXMuX2lkLGU9TUQoKSxpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgbCxhPWlbb10scz1hLmxlbmd0aCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciBkPV9vKGwsdCk7cnAobCxuLGUsYyxhLHt0aW1lOmQudGltZStkLmRlbGF5K2QuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpkLmR1cmF0aW9uLGVhc2U6ZC5lYXNlfSl9cmV0dXJuIG5ldyBuYShpLHRoaXMuX3BhcmVudHMsbixlKX0sY2FsbDp5MC5jYWxsLG5vZGVzOnkwLm5vZGVzLG5vZGU6eTAubm9kZSxzaXplOnkwLnNpemUsZW1wdHk6eTAuZW1wdHksZWFjaDp5MC5lYWNoLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9fbyh0aGlzLm5vZGUoKSxlKS5vbi5vbihuKTp0aGlzLmVhY2goZnVuY3Rpb24obix0LGUpe3ZhciBpLHIsbz1mdW5jdGlvbihuKXtyZXR1cm4obisiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pfSh0KT9qdjpfYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsbikscz1hLm9uO3MhPT1pJiYocj0oaT1zKS5jb3B5KCkpLm9uKHQsZSksYS5vbj1yfX0oZSxuLHQpKX0sYXR0cjpmdW5jdGlvbihuLHQpe3ZhciBlPVJkKG4pLGk9InRyYW5zZm9ybSI9PT1lP0xOOkNEO3JldHVybiB0aGlzLmF0dHJUd2VlbihuLCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlLmxvY2FsP2JUZTp5VGUpKGUsaSxfMCh0aGlzLCJhdHRyLiIrbix0KSk6bnVsbD09dD8oZS5sb2NhbD9oVGU6bVRlKShlKTooZS5sb2NhbD9fVGU6Z1RlKShlLGksdCkpfSxhdHRyVHdlZW46ZnVuY3Rpb24obix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3ZhciBpPVJkKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/Q1RlOk1UZSkoaSx0KSl9LHN0eWxlOmZ1bmN0aW9uKG4sdCxlKXt2YXIgaT0idHJhbnNmb3JtIj09KG4rPSIiKT9GTjpDRDtyZXR1cm4gbnVsbD09dD90aGlzLnN0eWxlVHdlZW4obixmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1ucCh0aGlzLG4pLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobiksbnAodGhpcyxuKSk7cmV0dXJuIG89PT1hP251bGw6bz09PWUmJmE9PT1pP3I6cj10KGU9byxpPWEpfX0obixpKSkub24oImVuZC5zdHlsZS4iK24sSksobikpOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3RoaXMuc3R5bGVUd2VlbihuLGZ1bmN0aW9uKG4sdCxlKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bnAodGhpcyxuKSxzPWUodGhpcyksbD1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxsPXM9bnAodGhpcyxuKSksYT09PWw/bnVsbDphPT09aSYmbD09PXI/bzoocj1sLG89dChpPWEscykpfX0obixpLF8wKHRoaXMsInN0eWxlLiIrbix0KSkpLmVhY2goZnVuY3Rpb24obix0KXt2YXIgZSxpLHIscyxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1fYSh0aGlzLG4pLGM9bC5vbixkPW51bGw9PWwudmFsdWVbb10/c3x8KHM9SksodCkpOnZvaWQgMDsoYyE9PWV8fHIhPT1kKSYmKGk9KGU9YykuY29weSgpKS5vbihhLHI9ZCksbC5vbj1pfX0odGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLGZ1bmN0aW9uKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1ucCh0aGlzLG4pO3JldHVybiBhPT09cj9udWxsOmE9PT1pP286bz10KGk9YSxlKX19KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9InN0eWxlLiIrKG4rPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGk9dGhpcy50d2VlbihpKSkmJmkuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oaSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oaSxmdW5jdGlvbihuLHQsZSl7dmFyIGkscjtmdW5jdGlvbiBvKCl7dmFyIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1yJiYoaT0ocj1hKSYmZnVuY3Rpb24obix0LGUpe3JldHVybiBmdW5jdGlvbihpKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4sdC5jYWxsKHRoaXMsaSksZSl9fShuLGEsZSkpLGl9cmV0dXJuIG8uX3ZhbHVlPXQsb30obix0LGU/PyIiKSl9LHRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10Pz8iIn19KF8wKHRoaXMsInRleHQiLG4pKTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fShudWxsPT1uPyIiOm4rIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKG4pe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxmdW5jdGlvbihuKXt2YXIgdCxlO2Z1bmN0aW9uIGkoKXt2YXIgcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PWUmJih0PShlPXIpJiZmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1uLmNhbGwodGhpcyx0KX19KHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9KG4pKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGUgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2UhPT1uKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX0odGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLl9pZDtpZihuKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgYSxpPV9vKHRoaXMubm9kZSgpLGUpLnR3ZWVuLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaWYoKGE9aVtyXSkubmFtZT09PW4pcmV0dXJuIGEudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09dD9wVGU6ZlRlKShlLG4sdCkpfSxkZWxheTpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP3dUZTpTVGUpKHQsbikpOl9vKHRoaXMubm9kZSgpLHQpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP0VUZTpUVGUpKHQsbikpOl9vKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbihuLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtfYSh0aGlzLG4pLmVhc2U9dH19KHQsbikpOl9vKHRoaXMubm9kZSgpLHQpLmVhc2V9LGVuZDpmdW5jdGlvbigpe3ZhciBuLHQsZT10aGlzLGk9ZS5faWQscj1lLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLXImJm8oKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPV9hKHRoaXMsaSksZD1jLm9uO2QhPT1uJiYoKHQ9KG49ZCkuY29weSgpKS5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9fTt2YXIgVU49e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uKG4pe3JldHVybigobio9Mik8PTE/bipuKm46KG4tPTIpKm4qbisyKS8yfX07ZnVuY3Rpb24gR1RlKG4sdCl7Zm9yKHZhciBlOyEoZT1uLl9fdHJhbnNpdGlvbil8fCEoZT1lW3RdKTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIFVOLnRpbWU9ZzAoKSxVTjtyZXR1cm4gZX1mdW5jdGlvbiBqTihuKXtyZXR1cm57dHlwZTpufX1rZC5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXshZnVuY3Rpb24obix0KXt2YXIgaSxyLGEsZT1uLl9fdHJhbnNpdGlvbixvPSEwO2lmKGUpe2ZvcihhIGluIHQ9bnVsbD09dD9udWxsOnQrIiIsZSkoaT1lW2FdKS5uYW1lPT09dD8ocj1pLnN0YXRlPnZEJiZpLnN0YXRlPHhELGkuc3RhdGU9VXYsaS50aW1lci5zdG9wKCksaS5vbi5jYWxsKHI/ImludGVycnVwdCI6ImNhbmNlbCIsbixuLl9fZGF0YV9fLGkuaW5kZXgsaS5ncm91cCksZGVsZXRlIGVbYV0pOm89ITE7byYmZGVsZXRlIG4uX190cmFuc2l0aW9ufX0odGhpcyxuKX0pfSxrZC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbihuKXt2YXIgdCxlO24gaW5zdGFuY2VvZiBuYT8odD1uLl9pZCxuPW4uX25hbWUpOih0PU1EKCksKGU9VU4pLnRpbWU9ZzAoKSxuPW51bGw9PW4/bnVsbDpuKyIiKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBsLGE9aVtvXSxzPWEubGVuZ3RoLGM9MDtjPHM7KytjKShsPWFbY10pJiZycChsLG4sdCxjLGEsZXx8R1RlKGwsdCkpO3JldHVybiBuZXcgbmEoaSx0aGlzLl9wYXJlbnRzLG4sdCl9LFsidyIsImUiXS5tYXAoak4pLFsibiIsInMiXS5tYXAoak4pLFsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKGpOKSxNYXRoO3ZhciBmcz0iJCI7ZnVuY3Rpb24gU0QoKXt9ZnVuY3Rpb24gbEoobix0KXt2YXIgZT1uZXcgU0Q7aWYobiBpbnN0YW5jZW9mIFNEKW4uZWFjaChmdW5jdGlvbihzLGwpe2Uuc2V0KGwscyl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBvLGk9LTEscj1uLmxlbmd0aDtpZihudWxsPT10KWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KG89bltpXSxpLG4pLG8pfWVsc2UgaWYobilmb3IodmFyIGEgaW4gbillLnNldChhLG5bYV0pO3JldHVybiBlfWZ1bmN0aW9uIEVEKCl7fVNELnByb3RvdHlwZT1sSi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlNELGhhczpmdW5jdGlvbihuKXtyZXR1cm4gZnMrbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbZnMrbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW2ZzK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PWZzK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PWZzJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1mcyYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZnMmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1mcyYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1mcyYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1mcylyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZnMmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07dmFyIHJtPWxKLnByb3RvdHlwZTtmdW5jdGlvbiBvbShuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiB6YyhuKXtyZXR1cm4obj1vbShNYXRoLmFicyhuKSkpP25bMV06TmFOfUVELnByb3RvdHlwZT1mdW5jdGlvbihuLHQpe3ZhciBlPW5ldyBFRDtpZihuIGluc3RhbmNlb2YgRUQpbi5lYWNoKGZ1bmN0aW9uKG8pe2UuYWRkKG8pfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RUQsaGFzOnJtLmhhcyxhZGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbZnMrKG4rPSIiKV09bix0aGlzfSxyZW1vdmU6cm0ucmVtb3ZlLGNsZWFyOnJtLmNsZWFyLHZhbHVlczpybS5rZXlzLHNpemU6cm0uc2l6ZSxlbXB0eTpybS5lbXB0eSxlYWNoOnJtLmVhY2h9LE1hdGgsTWF0aC5zcXJ0KDUpO3ZhciBHTiwkVGU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gb3Aobil7aWYoISh0PSRUZS5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgVEQoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9ZnVuY3Rpb24gVEQobil7dGhpcy5maWxsPXZvaWQgMD09PW4uZmlsbD8iICI6bi5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09bi5hbGlnbj8iPiI6bi5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09bi5zaWduPyItIjpuLnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09bi5zeW1ib2w/IiI6bi5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhbi56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09bi53aWR0aD92b2lkIDA6K24ud2lkdGgsdGhpcy5jb21tYT0hIW4uY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09bi5wcmVjaXNpb24/dm9pZCAwOituLnByZWNpc2lvbix0aGlzLnRyaW09ISFuLnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PW4udHlwZT8iIjpuLnR5cGUrIiJ9ZnVuY3Rpb24gV04obix0KXt2YXIgZT1vbShuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdO3JldHVybiByPDA/IjAuIituZXcgQXJyYXkoLXIpLmpvaW4oIjAiKStpOmkubGVuZ3RoPnIrMT9pLnNsaWNlKDAscisxKSsiLiIraS5zbGljZShyKzEpOmkrbmV3IEFycmF5KHItaS5sZW5ndGgrMikuam9pbigiMCIpfW9wLnByb3RvdHlwZT1URC5wcm90b3R5cGUsVEQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIHFOPXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4oMTAwKm4pLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGguYWJzKG49TWF0aC5yb3VuZChuKSk+PTFlMjE/bi50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOm4udG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9FeHBvbmVudGlhbCh0KX0sZjpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRml4ZWQodCl9LGc6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZChuKS50b1N0cmluZyg4KX0scDpmdW5jdGlvbihuLHQpe3JldHVybiBXTigxMDAqbix0KX0scjpXTixzOmZ1bmN0aW9uKG4sdCl7dmFyIGU9b20obix0KTtpZighZSlyZXR1cm4gbisiIjt2YXIgaT1lWzBdLHI9ZVsxXSxvPXItKEdOPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSkrMSxhPWkubGVuZ3RoO3JldHVybiBvPT09YT9pOm8+YT9pK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9pLnNsaWNlKDAsbykrIi4iK2kuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrb20obixNYXRoLm1heCgwLHQrby0xKSlbMF19LFg6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gWU4obil7cmV0dXJuIG59dmFyIERELEpyLElELGdKPUFycmF5LnByb3RvdHlwZS5tYXAsX0o9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gSnMoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX1ERD1mdW5jdGlvbihuKXt2YXIgdD12b2lkIDA9PT1uLmdyb3VwaW5nfHx2b2lkIDA9PT1uLnRob3VzYW5kcz9ZTjpmdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxvPVtdLGE9MCxzPW5bMF0sbD0wO3I+MCYmcz4wJiYobCtzKzE+aSYmKHM9TWF0aC5tYXgoMSxpLWwpKSxvLnB1c2goZS5zdWJzdHJpbmcoci09cyxyK3MpKSwhKChsKz1zKzEpPmkpKTspcz1uW2E9KGErMSklbi5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX0oZ0ouY2FsbChuLmdyb3VwaW5nLE51bWJlciksbi50aG91c2FuZHMrIiIpLGU9dm9pZCAwPT09bi5jdXJyZW5jeT8iIjpuLmN1cnJlbmN5WzBdKyIiLGk9dm9pZCAwPT09bi5jdXJyZW5jeT8iIjpuLmN1cnJlbmN5WzFdKyIiLHI9dm9pZCAwPT09bi5kZWNpbWFsPyIuIjpuLmRlY2ltYWwrIiIsbz12b2lkIDA9PT1uLm51bWVyYWxzP1lOOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuWytlXX0pfX0oZ0ouY2FsbChuLm51bWVyYWxzLFN0cmluZykpLGE9dm9pZCAwPT09bi5wZXJjZW50PyIlIjpuLnBlcmNlbnQrIiIscz12b2lkIDA9PT1uLm1pbnVzPyItIjpuLm1pbnVzKyIiLGw9dm9pZCAwPT09bi5uYW4/Ik5hTiI6bi5uYW4rIiI7ZnVuY3Rpb24gYyh1KXt2YXIgcD0odT1vcCh1KSkuZmlsbCxmPXUuYWxpZ24sbT11LnNpZ24seT11LnN5bWJvbCxNPXUuemVybyx2PXUud2lkdGgseD11LmNvbW1hLFI9dS5wcmVjaXNpb24sQT11LnRyaW0sSD11LnR5cGU7Im4iPT09SD8oeD0hMCxIPSJnIik6cU5bSF18fCh2b2lkIDA9PT1SJiYoUj0xMiksQT0hMCxIPSJnIiksKE18fCIwIj09PXAmJiI9Ij09PWYpJiYoTT0hMCxwPSIwIixmPSI9Iik7dmFyIHRlPSIkIj09PXk/ZToiIyI9PT15JiYvW2JveFhdLy50ZXN0KEgpPyIwIitILnRvTG93ZXJDYXNlKCk6IiIsSz0iJCI9PT15P2k6L1slcF0vLnRlc3QoSCk/YToiIixDZT1xTltIXSxaZT0vW2RlZmdwcnMlXS8udGVzdChIKTtmdW5jdGlvbiBJZShJKXt2YXIgZmUsX2UsbmUscmU9dGUsY2U9SztpZigiYyI9PT1IKWNlPUNlKEkpK2NlLEk9IiI7ZWxzZXt2YXIgZGU9KEk9K0kpPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpDZShNYXRoLmFicyhJKSxSKSxBJiYoST1mdW5jdGlvbihuKXtlOmZvcih2YXIgcix0PW4ubGVuZ3RoLGU9MSxpPS0xO2U8dDsrK2Upc3dpdGNoKG5bZV0pe2Nhc2UiLiI6aT1yPWU7YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9ZSkscj1lO2JyZWFrO2RlZmF1bHQ6aWYoIStuW2VdKWJyZWFrIGU7aT4wJiYoaT0wKX1yZXR1cm4gaT4wP24uc2xpY2UoMCxpKStuLnNsaWNlKHIrMSk6bn0oSSkpLGRlJiYwPT0rSSYmIisiIT09bSYmKGRlPSExKSxyZT0oZGU/IigiPT09bT9tOnM6Ii0iPT09bXx8IigiPT09bT8iIjptKStyZSxjZT0oInMiPT09SD9fSls4K0dOLzNdOiIiKStjZSsoZGUmJiIoIj09PW0/IikiOiIiKSxaZSlmb3IoZmU9LTEsX2U9SS5sZW5ndGg7KytmZTxfZTspaWYoNDg+KG5lPUkuY2hhckNvZGVBdChmZSkpfHxuZT41Nyl7Y2U9KDQ2PT09bmU/citJLnNsaWNlKGZlKzEpOkkuc2xpY2UoZmUpKStjZSxJPUkuc2xpY2UoMCxmZSk7YnJlYWt9fXgmJiFNJiYoST10KEksMS8wKSk7dmFyIHVlPXJlLmxlbmd0aCtJLmxlbmd0aCtjZS5sZW5ndGgsR2U9dWU8dj9uZXcgQXJyYXkodi11ZSsxKS5qb2luKHApOiIiO3N3aXRjaCh4JiZNJiYoST10KEdlK0ksR2UubGVuZ3RoP3YtY2UubGVuZ3RoOjEvMCksR2U9IiIpLGYpe2Nhc2UiPCI6ST1yZStJK2NlK0dlO2JyZWFrO2Nhc2UiPSI6ST1yZStHZStJK2NlO2JyZWFrO2Nhc2UiXiI6ST1HZS5zbGljZSgwLHVlPUdlLmxlbmd0aD4+MSkrcmUrSStjZStHZS5zbGljZSh1ZSk7YnJlYWs7ZGVmYXVsdDpJPUdlK3JlK0krY2V9cmV0dXJuIG8oSSl9cmV0dXJuIFI9dm9pZCAwPT09Uj82Oi9bZ3Byc10vLnRlc3QoSCk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxSKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxSKSksSWUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdSsiIn0sSWV9cmV0dXJue2Zvcm1hdDpjLGZvcm1hdFByZWZpeDpmdW5jdGlvbih1LHApe3ZhciBmPWMoKCh1PW9wKHUpKS50eXBlPSJmIix1KSksbT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih6YyhwKS8zKSkpLHk9TWF0aC5wb3coMTAsLW0pLE09X0pbOCttLzNdO3JldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gZih5KnYpK019fX19KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KSxKcj1ERC5mb3JtYXQsSUQ9REQuZm9ybWF0UHJlZml4LGZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpPW51bGw9PWk/MDoraSxyPW51bGw9PXI/MTorciwxPT09YXJndW1lbnRzLmxlbmd0aD8ocj1pLGk9MCk6ci09aSxmdW5jdGlvbigpe3JldHVybiB0KCkqcitpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShKcyk7dmFyIEpOPWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3ZhciBvLGE7cmV0dXJuIGk9bnVsbD09aT8wOitpLHI9bnVsbD09cj8xOityLGZ1bmN0aW9uKCl7dmFyIHM7aWYobnVsbCE9bylzPW8sbz1udWxsO2Vsc2UgZG97bz0yKnQoKS0xLHM9Mip0KCktMSxhPW8qbytzKnN9d2hpbGUoIWF8fGE+MSk7cmV0dXJuIGkrcipzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIGUuc291cmNlPW4sZX0oSnMpLCROPShmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoKXt2YXIgaT1KTi5zb3VyY2UodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChpKCkpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShKcyksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj0wLG89MDtvPGk7KytvKXIrPXQoKTtyZXR1cm4gcn19cmV0dXJuIGUuc291cmNlPW4sZX0oSnMpKTtmdW5jdGlvbiBxYShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKX1yZXR1cm4gdGhpc30oZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3ZhciByPSROLnNvdXJjZSh0KShpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KShKcyksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvaX19cmV0dXJuIGUuc291cmNlPW4sZX0oSnMpO3ZhciBiSj1BcnJheS5wcm90b3R5cGUscXY9YkoubWFwLGFtPWJKLnNsaWNlO2Z1bmN0aW9uIGUzKG4pe3JldHVybitufXZhciB4Sj1bMCwxXTtmdW5jdGlvbiBZYShuKXtyZXR1cm4gbn1mdW5jdGlvbiB0MyhuLHQpe3JldHVybih0LT1uPStuKT9mdW5jdGlvbihlKXtyZXR1cm4oZS1uKS90fTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19KGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24gQ0oobil7dmFyIGksdD1uWzBdLGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gdD5lJiYoaT10LHQ9ZSxlPWkpLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUscikpfX1mdW5jdGlvbiBvRGUobix0LGUpe3ZhciBpPW5bMF0scj1uWzFdLG89dFswXSxhPXRbMV07cmV0dXJuIHI8aT8oaT10MyhyLGkpLG89ZShhLG8pKTooaT10MyhpLHIpLG89ZShvLGEpKSxmdW5jdGlvbihzKXtyZXR1cm4gbyhpKHMpKX19ZnVuY3Rpb24gYURlKG4sdCxlKXt2YXIgaT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCktMSxyPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShpKSxhPS0xO2ZvcihuW2ldPG5bMF0mJihuPW4uc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8aTspclthXT10MyhuW2FdLG5bYSsxXSksb1thXT1lKHRbYV0sdFthKzFdKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGw9TmMobixzLDEsaSktMTtyZXR1cm4gb1tsXShyW2xdKHMpKX19ZnVuY3Rpb24gYXAobix0KXtyZXR1cm4gdC5kb21haW4obi5kb21haW4oKSkucmFuZ2Uobi5yYW5nZSgpKS5pbnRlcnBvbGF0ZShuLmludGVycG9sYXRlKCkpLmNsYW1wKG4uY2xhbXAoKSkudW5rbm93bihuLnVua25vd24oKSl9ZnVuY3Rpb24gWXYoKXt2YXIgaSxyLG8scyxsLGMsbj14Six0PXhKLGU9dG0sYT1ZYTtmdW5jdGlvbiBkKCl7cmV0dXJuIHM9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpPjI/YURlOm9EZSxsPWM9bnVsbCx1fWZ1bmN0aW9uIHUocCl7cmV0dXJuIGlzTmFOKHA9K3ApP286KGx8fChsPXMobi5tYXAoaSksdCxlKSkpKGkoYShwKSkpfXJldHVybiB1LmludmVydD1mdW5jdGlvbihwKXtyZXR1cm4gYShyKChjfHwoYz1zKHQsbi5tYXAoaSksVm8pKSkocCkpKX0sdS5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cXYuY2FsbChwLGUzKSxhPT09WWF8fChhPUNKKG4pKSxkKCkpOm4uc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1hbS5jYWxsKHApLGQoKSk6dC5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHQ9YW0uY2FsbChwKSxlPWtOLGQoKX0sdS5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1wP0NKKG4pOllhLHUpOmEhPT1ZYX0sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wLGQoKSk6ZX0sdS51bmtub3duPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXAsdSk6b30sZnVuY3Rpb24ocCxmKXtyZXR1cm4gaT1wLHI9ZixkKCl9fWZ1bmN0aW9uIFh2KG4sdCl7cmV0dXJuIFl2KCkobix0KX1mdW5jdGlvbiBVbCgpe3ZhciBuPVh2KFlhLFlhKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGFwKG4sVWwoKSl9LHFhLmFwcGx5KG4sYXJndW1lbnRzKSxmdW5jdGlvbihuKXt2YXIgdD1uLmRvbWFpbjtyZXR1cm4gbi50aWNrcz1mdW5jdGlvbihlKXt2YXIgaT10KCk7cmV0dXJuIER2KGlbMF0saVtpLmxlbmd0aC0xXSxlPz8xMCl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihlLGkpe3ZhciByPXQoKTtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7dmFyIG8scj1BZChuLHQsZSk7c3dpdGNoKChpPW9wKGk/PyIsZiIpKS50eXBlKXtjYXNlInMiOnZhciBhPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gbnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoemModCkvMykpKS16YyhNYXRoLmFicyhuKSkpfShyLGEpKSYmKGkucHJlY2lzaW9uPW8pLElEKGksYSk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49TWF0aC5hYnMobiksdD1NYXRoLmFicyh0KS1uLE1hdGgubWF4KDAsemModCktemMobikpKzF9KHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1vLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCgwLC16YyhNYXRoLmFicyhuKSkpfShyKSkmJihpLnByZWNpc2lvbj1vLTIqKCIlIj09PWkudHlwZSkpfXJldHVybiBKcihpKX0oclswXSxyW3IubGVuZ3RoLTFdLGU/PzEwLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9MTApO3ZhciBsLGk9dCgpLHI9MCxvPWkubGVuZ3RoLTEsYT1pW3JdLHM9aVtvXTtyZXR1cm4gczxhJiYobD1hLGE9cyxzPWwsbD1yLHI9byxvPWwpLChsPWMwKGEscyxlKSk+MD9sPWMwKGE9TWF0aC5mbG9vcihhL2wpKmwscz1NYXRoLmNlaWwocy9sKSpsLGUpOmw8MCYmKGw9YzAoYT1NYXRoLmNlaWwoYSpsKS9sLHM9TWF0aC5mbG9vcihzKmwpL2wsZSkpLGw+MD8oaVtyXT1NYXRoLmZsb29yKGEvbCkqbCxpW29dPU1hdGguY2VpbChzL2wpKmwsdChpKSk6bDwwJiYoaVtyXT1NYXRoLmNlaWwoYSpsKS9sLGlbb109TWF0aC5mbG9vcihzKmwpL2wsdChpKSksbn0sbn0obil9ZnVuY3Rpb24gQUQobix0KXt2YXIgYSxlPTAsaT0obj1uLnNsaWNlKCkpLmxlbmd0aC0xLHI9bltlXSxvPW5baV07cmV0dXJuIG88ciYmKGE9ZSxlPWksaT1hLGE9cixyPW8sbz1hKSxuW2VdPXQuZmxvb3IociksbltpXT10LmNlaWwobyksbn1mdW5jdGlvbiBNSihuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gd0oobil7cmV0dXJuIE1hdGguZXhwKG4pfWZ1bmN0aW9uIHNEZShuKXtyZXR1cm4tTWF0aC5sb2coLW4pfWZ1bmN0aW9uIGxEZShuKXtyZXR1cm4tTWF0aC5leHAoLW4pfWZ1bmN0aW9uIGNEZShuKXtyZXR1cm4gaXNGaW5pdGUobik/KygiMWUiK24pOm48MD8wOm59ZnVuY3Rpb24gU0oobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1uKC10KX19ZnVuY3Rpb24gUXYoKXt2YXIgbj1mdW5jdGlvbihuKXt2YXIgcixvLHQ9bihNSix3SiksZT10LmRvbWFpbixpPTEwO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcj1mdW5jdGlvbihuKXtyZXR1cm4gbj09PU1hdGguRT9NYXRoLmxvZzoxMD09PW4mJk1hdGgubG9nMTB8fDI9PT1uJiZNYXRoLmxvZzJ8fChuPU1hdGgubG9nKG4pLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9ufSl9KGkpLG89ZnVuY3Rpb24obil7cmV0dXJuIDEwPT09bj9jRGU6bj09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3cobix0KX19KGkpLGUoKVswXTwwPyhyPVNKKHIpLG89U0oobyksbihzRGUsbERlKSk6bihNSix3SiksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStzLGEoKSk6aX0sdC5kb21haW49ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUocyksYSgpKTplKCl9LHQudGlja3M9ZnVuY3Rpb24ocyl7dmFyIHUsbD1lKCksYz1sWzBdLGQ9bFtsLmxlbmd0aC0xXTsodT1kPGMpJiYocD1jLGM9ZCxkPXApO3ZhciBtLHksTSxwPXIoYyksZj1yKGQpLHY9bnVsbD09cz8xMDorcyx4PVtdO2lmKCEoaSUxKSYmZi1wPHYpe2lmKHA9TWF0aC5yb3VuZChwKS0xLGY9TWF0aC5yb3VuZChmKSsxLGM+MCl7Zm9yKDtwPGY7KytwKWZvcih5PTEsbT1vKHApO3k8aTsrK3kpaWYoISgoTT1tKnkpPGMpKXtpZihNPmQpYnJlYWs7eC5wdXNoKE0pfX1lbHNlIGZvcig7cDxmOysrcClmb3IoeT1pLTEsbT1vKHApO3k+PTE7LS15KWlmKCEoKE09bSp5KTxjKSl7aWYoTT5kKWJyZWFrO3gucHVzaChNKX19ZWxzZSB4PUR2KHAsZixNYXRoLm1pbihmLXAsdikpLm1hcChvKTtyZXR1cm4gdT94LnJldmVyc2UoKTp4fSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocyxsKXtpZihudWxsPT1sJiYobD0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9SnIobCkpLHM9PT0xLzApcmV0dXJuIGw7bnVsbD09cyYmKHM9MTApO3ZhciBjPU1hdGgubWF4KDEsaSpzL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbihkKXt2YXIgdT1kL28oTWF0aC5yb3VuZChyKGQpKSk7cmV0dXJuIHUqaTxpLS41JiYodSo9aSksdTw9Yz9sKGQpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUoQUQoZSgpLHtmbG9vcjpmdW5jdGlvbihzKXtyZXR1cm4gbyhNYXRoLmZsb29yKHIocykpKX0sY2VpbDpmdW5jdGlvbihzKXtyZXR1cm4gbyhNYXRoLmNlaWwocihzKSkpfX0pKX0sdH0oWXYoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBhcChuLFF2KCkpLmJhc2Uobi5iYXNlKCkpfSxxYS5hcHBseShuLGFyZ3VtZW50cyksbn12YXIgcjM9bmV3IERhdGUsbzM9bmV3IERhdGU7ZnVuY3Rpb24gcnIobix0LGUsaSl7ZnVuY3Rpb24gcihvKXtyZXR1cm4gbihvPTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCtvKSksb31yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihvKXtyZXR1cm4gbihvPW5ldyBEYXRlKCtvKSksb30sci5jZWlsPWZ1bmN0aW9uKG8pe3JldHVybiBuKG89bmV3IERhdGUoby0xKSksdChvLDEpLG4obyksb30sci5yb3VuZD1mdW5jdGlvbihvKXt2YXIgYT1yKG8pLHM9ci5jZWlsKG8pO3JldHVybiBvLWE8cy1vP2E6c30sci5vZmZzZXQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gdChvPW5ldyBEYXRlKCtvKSxudWxsPT1hPzE6TWF0aC5mbG9vcihhKSksb30sci5yYW5nZT1mdW5jdGlvbihvLGEscyl7dmFyIGMsbD1bXTtpZihvPXIuY2VpbChvKSxzPW51bGw9PXM/MTpNYXRoLmZsb29yKHMpLCEobzxhJiZzPjApKXJldHVybiBsO2Rve2wucHVzaChjPW5ldyBEYXRlKCtvKSksdChvLHMpLG4obyl9d2hpbGUoYzxvJiZvPGEpO3JldHVybiBsfSxyLmZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4gcnIoZnVuY3Rpb24oYSl7aWYoYT49YSlmb3IoO24oYSksIW8oYSk7KWEuc2V0VGltZShhLTEpfSxmdW5jdGlvbihhLHMpe2lmKGE+PWEpaWYoczwwKWZvcig7KytzPD0wOylmb3IoO3QoYSwtMSksIW8oYSk7KTtlbHNlIGZvcig7LS1zPj0wOylmb3IoO3QoYSwxKSwhbyhhKTspO30pfSxlJiYoci5jb3VudD1mdW5jdGlvbihvLGEpe3JldHVybiByMy5zZXRUaW1lKCtvKSxvMy5zZXRUaW1lKCthKSxuKHIzKSxuKG8zKSxNYXRoLmZsb29yKGUocjMsbzMpKX0sci5ldmVyeT1mdW5jdGlvbihvKXtyZXR1cm4gbz1NYXRoLmZsb29yKG8pLGlzRmluaXRlKG8pJiZvPjA/bz4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oYSl7cmV0dXJuIGkoYSklbz09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIHIuY291bnQoMCxhKSVvPT0wfSk6cjpudWxsfSkscn12YXIgUkQ9cnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LW59KTtSRC5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLGlzRmluaXRlKG4pJiZuPjA/bj4xP3JyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbikqbil9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2Uqbil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbn0pOlJEOm51bGx9O3ZhciBrRD1SRCxPZD02ZTQsT0Q9NjA0OGU1LFRKPXJyKGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbisxZTMqdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvMWUzfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENTZWNvbmRzKCl9KSxGRD1USixJSj1ycihmdW5jdGlvbihuKXtuLnNldFRpbWUobi1uLmdldE1pbGxpc2Vjb25kcygpLTFlMypuLmdldFNlY29uZHMoKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QqT2QpfSxmdW5jdGlvbihuLHQpe3JldHVybih0LW4pL09kfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNaW51dGVzKCl9KSxzMz1JSixBSj1ycihmdW5jdGlvbihuKXtuLnNldFRpbWUobi1uLmdldE1pbGxpc2Vjb25kcygpLTFlMypuLmdldFNlY29uZHMoKS1uLmdldE1pbnV0ZXMoKSpPZCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzM2ZTUqdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvMzZlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLGwzPUFKLFJKPXJyKGZ1bmN0aW9uKG4pe24uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXREYXRlKG4uZ2V0RGF0ZSgpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybih0LW4tKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1uLmdldFRpbWV6b25lT2Zmc2V0KCkpKk9kKS84NjRlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgpLTF9KSxiMD1SSjtmdW5jdGlvbiBjbShuKXtyZXR1cm4gcnIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctbiklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpPZCkvT0R9KX12YXIgZG09Y20oMCksdjA9Y20oMSksc3A9KGNtKDIpLGNtKDMpLGNtKDQpKSxOSj0oY20oNSksY20oNikscnIoZnVuY3Rpb24obil7bi5zZXREYXRlKDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRNb250aChuLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1uLmdldE1vbnRoKCkrMTIqKHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNb250aCgpfSkpLGMzPU5KLGQzPXJyKGZ1bmN0aW9uKG4pe24uc2V0TW9udGgoMCwxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRGdWxsWWVhcigpfSk7ZDMuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIGlzRmluaXRlKG49TWF0aC5mbG9vcihuKSkmJm4+MD9ycihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL24pKm4pLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2Uqbil9KTpudWxsfTt2YXIgRmQ9ZDMsQko9cnIoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvODY0ZTV9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSksTEQ9Qko7ZnVuY3Rpb24gdW0obil7cmV0dXJuIHJyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LW4pJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvT0R9KX12YXIgWnY9dW0oMCkseDA9dW0oMSksbHA9KHVtKDIpLHVtKDMpLHVtKDQpKSx1Mz0odW0oNSksdW0oNikscnIoZnVuY3Rpb24obil7bi5zZXRVVENNb250aCgwLDEpLG4uc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRVVENGdWxsWWVhcihuLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1uLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0Z1bGxZZWFyKCl9KSk7dTMuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIGlzRmluaXRlKG49TWF0aC5mbG9vcihuKSkmJm4+MD9ycihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL24pKm4pLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2Uqbil9KTpudWxsfTt2YXIgcG09dTM7ZnVuY3Rpb24gcDMobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpfWZ1bmN0aW9uIGYzKG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpfWZ1bmN0aW9uIEt2KG4sdCxlKXtyZXR1cm57eTpuLG06dCxkOmUsSDowLE06MCxTOjAsTDowfX12YXIgQzAsTTAsR0o9eyItIjoiIixfOiIgIiwwOiIwIn0sRG89L15ccypcZCsvLFJEZT0vXiUvLGtEZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gRmkobix0LGUpe3ZhciBpPW48MD8iLSI6IiIscj0oaT8tbjpuKSsiIixvPXIubGVuZ3RoO3JldHVybiBpKyhvPGU/bmV3IEFycmF5KGUtbysxKS5qb2luKHQpK3I6cil9ZnVuY3Rpb24gUERlKG4pe3JldHVybiBuLnJlcGxhY2Uoa0RlLCJcXCQmIil9ZnVuY3Rpb24gSnYobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKFBEZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uICR2KG4pe2Zvcih2YXIgdD17fSxlPS0xLGk9bi5sZW5ndGg7KytlPGk7KXRbbltlXS50b0xvd2VyQ2FzZSgpXT1lO3JldHVybiB0fWZ1bmN0aW9uIE9EZShuLHQsZSl7dmFyIGk9RG8uZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4udz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGRGUobix0LGUpe3ZhciBpPURvLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTERlKG4sdCxlKXt2YXIgaT1Eby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5VPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5EZShuLHQsZSl7dmFyIGk9RG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uVj0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCRGUobix0LGUpe3ZhciBpPURvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV0oobix0LGUpe3ZhciBpPURvLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcUoobix0LGUpe3ZhciBpPURvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBWRGUobix0LGUpe3ZhciBpPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKHQuc2xpY2UoZSxlKzYpKTtyZXR1cm4gaT8obi5aPWlbMV0/MDotKGlbMl0rKGlbM118fCIwMCIpKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBIRGUobix0LGUpe3ZhciBpPURvLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnE9MyppWzBdLTMsZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gekRlKG4sdCxlKXt2YXIgaT1Eby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5tPWlbMF0tMSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZSihuLHQsZSl7dmFyIGk9RG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBVRGUobix0LGUpe3ZhciBpPURvLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiBpPyhuLm09MCxuLmQ9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWEoobix0LGUpe3ZhciBpPURvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLkg9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gakRlKG4sdCxlKXt2YXIgaT1Eby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5NPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdEZShuLHQsZSl7dmFyIGk9RG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXRGUobix0LGUpe3ZhciBpPURvLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiBpPyhuLkw9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcURlKG4sdCxlKXt2YXIgaT1Eby5leGVjKHQuc2xpY2UoZSxlKzYpKTtyZXR1cm4gaT8obi5MPU1hdGguZmxvb3IoaVswXS8xZTMpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFlEZShuLHQsZSl7dmFyIGk9UkRlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpP2UraVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gWERlKG4sdCxlKXt2YXIgaT1Eby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLlE9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUURlKG4sdCxlKXt2YXIgaT1Eby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUUoobix0KXtyZXR1cm4gRmkobi5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBaRGUobix0KXtyZXR1cm4gRmkobi5nZXRIb3VycygpLHQsMil9ZnVuY3Rpb24gS0RlKG4sdCl7cmV0dXJuIEZpKG4uZ2V0SG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBKRGUobix0KXtyZXR1cm4gRmkoMStiMC5jb3VudChGZChuKSxuKSx0LDMpfWZ1bmN0aW9uIGUkKG4sdCl7cmV0dXJuIEZpKG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiAkRGUobix0KXtyZXR1cm4gZSQobix0KSsiMDAwIn1mdW5jdGlvbiBlSWUobix0KXtyZXR1cm4gRmkobi5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiB0SWUobix0KXtyZXR1cm4gRmkobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBuSWUobix0KXtyZXR1cm4gRmkobi5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBpSWUobil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIHJJZShuLHQpe3JldHVybiBGaShkbS5jb3VudChGZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gdCQobil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gdD49NHx8MD09PXQ/c3Aobik6c3AuY2VpbChuKX1mdW5jdGlvbiBvSWUobix0KXtyZXR1cm4gbj10JChuKSxGaShzcC5jb3VudChGZChuKSxuKSsoND09PUZkKG4pLmdldERheSgpKSx0LDIpfWZ1bmN0aW9uIGFJZShuKXtyZXR1cm4gbi5nZXREYXkoKX1mdW5jdGlvbiBzSWUobix0KXtyZXR1cm4gRmkodjAuY291bnQoRmQobiktMSxuKSx0LDIpfWZ1bmN0aW9uIGxJZShuLHQpe3JldHVybiBGaShuLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gY0llKG4sdCl7cmV0dXJuIEZpKChuPXQkKG4pKS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIGRJZShuLHQpe3JldHVybiBGaShuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gdUllKG4sdCl7dmFyIGU9bi5nZXREYXkoKTtyZXR1cm4gRmkoKG49ZT49NHx8MD09PWU/c3Aobik6c3AuY2VpbChuKSkuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBwSWUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStGaSh0LzYwfDAsIjAiLDIpK0ZpKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIFpKKG4sdCl7cmV0dXJuIEZpKG4uZ2V0VVRDRGF0ZSgpLHQsMil9ZnVuY3Rpb24gZkllKG4sdCl7cmV0dXJuIEZpKG4uZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIG1JZShuLHQpe3JldHVybiBGaShuLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gaEllKG4sdCl7cmV0dXJuIEZpKDErTEQuY291bnQocG0obiksbiksdCwzKX1mdW5jdGlvbiBuJChuLHQpe3JldHVybiBGaShuLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gZ0llKG4sdCl7cmV0dXJuIG4kKG4sdCkrIjAwMCJ9ZnVuY3Rpb24gX0llKG4sdCl7cmV0dXJuIEZpKG4uZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24geUllKG4sdCl7cmV0dXJuIEZpKG4uZ2V0VVRDTWludXRlcygpLHQsMil9ZnVuY3Rpb24gYkllKG4sdCl7cmV0dXJuIEZpKG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gdkllKG4pe3ZhciB0PW4uZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiB4SWUobix0KXtyZXR1cm4gRmkoWnYuY291bnQocG0obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGkkKG4pe3ZhciB0PW4uZ2V0VVRDRGF5KCk7cmV0dXJuIHQ+PTR8fDA9PT10P2xwKG4pOmxwLmNlaWwobil9ZnVuY3Rpb24gQ0llKG4sdCl7cmV0dXJuIG49aSQobiksRmkobHAuY291bnQocG0obiksbikrKDQ9PT1wbShuKS5nZXRVVENEYXkoKSksdCwyKX1mdW5jdGlvbiBNSWUobil7cmV0dXJuIG4uZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gd0llKG4sdCl7cmV0dXJuIEZpKHgwLmNvdW50KHBtKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBTSWUobix0KXtyZXR1cm4gRmkobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEVJZShuLHQpe3JldHVybiBGaSgobj1pJChuKSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBUSWUobix0KXtyZXR1cm4gRmkobi5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIERJZShuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIEZpKChuPWU+PTR8fDA9PT1lP2xwKG4pOmxwLmNlaWwobikpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSUllKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBLSigpe3JldHVybiIlIn1mdW5jdGlvbiBKSihuKXtyZXR1cm4rbn1mdW5jdGlvbiAkSihuKXtyZXR1cm4gTWF0aC5mbG9vcigrbi8xZTMpfUMwPWZ1bmN0aW9uKG4pe3ZhciB0PW4uZGF0ZVRpbWUsZT1uLmRhdGUsaT1uLnRpbWUscj1uLnBlcmlvZHMsbz1uLmRheXMsYT1uLnNob3J0RGF5cyxzPW4ubW9udGhzLGw9bi5zaG9ydE1vbnRocyxjPUp2KHIpLGQ9JHYociksdT1KdihvKSxwPSR2KG8pLGY9SnYoYSksbT0kdihhKSx5PUp2KHMpLE09JHYocyksdj1KdihsKSx4PSR2KGwpLFI9e2E6ZnVuY3Rpb24odmUpe3JldHVybiBhW3ZlLmdldERheSgpXX0sQTpmdW5jdGlvbih2ZSl7cmV0dXJuIG9bdmUuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHZlKXtyZXR1cm4gbFt2ZS5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih2ZSl7cmV0dXJuIHNbdmUuZ2V0TW9udGgoKV19LGM6bnVsbCxkOlFKLGU6UUosZjokRGUsZzpjSWUsRzp1SWUsSDpaRGUsSTpLRGUsajpKRGUsTDplJCxtOmVJZSxNOnRJZSxwOmZ1bmN0aW9uKHZlKXtyZXR1cm4gclsrKHZlLmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odmUpe3JldHVybiAxK35+KHZlLmdldE1vbnRoKCkvMyl9LFE6SkosczokSixTOm5JZSx1OmlJZSxVOnJJZSxWOm9JZSx3OmFJZSxXOnNJZSx4Om51bGwsWDpudWxsLHk6bEllLFk6ZEllLFo6cEllLCIlIjpLSn0sQT17YTpmdW5jdGlvbih2ZSl7cmV0dXJuIGFbdmUuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHZlKXtyZXR1cm4gb1t2ZS5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odmUpe3JldHVybiBsW3ZlLmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHZlKXtyZXR1cm4gc1t2ZS5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6WkosZTpaSixmOmdJZSxnOkVJZSxHOkRJZSxIOmZJZSxJOm1JZSxqOmhJZSxMOm4kLG06X0llLE06eUllLHA6ZnVuY3Rpb24odmUpe3JldHVybiByWysodmUuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih2ZSl7cmV0dXJuIDErfn4odmUuZ2V0VVRDTW9udGgoKS8zKX0sUTpKSixzOiRKLFM6YkllLHU6dkllLFU6eEllLFY6Q0llLHc6TUllLFc6d0llLHg6bnVsbCxYOm51bGwseTpTSWUsWTpUSWUsWjpJSWUsIiUiOktKfSxIPXthOmZ1bmN0aW9uKHZlLGh0LG10KXt2YXIgb2U9Zi5leGVjKGh0LnNsaWNlKG10KSk7cmV0dXJuIG9lPyh2ZS53PW1bb2VbMF0udG9Mb3dlckNhc2UoKV0sbXQrb2VbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih2ZSxodCxtdCl7dmFyIG9lPXUuZXhlYyhodC5zbGljZShtdCkpO3JldHVybiBvZT8odmUudz1wW29lWzBdLnRvTG93ZXJDYXNlKCldLG10K29lWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odmUsaHQsbXQpe3ZhciBvZT12LmV4ZWMoaHQuc2xpY2UobXQpKTtyZXR1cm4gb2U/KHZlLm09eFtvZVswXS50b0xvd2VyQ2FzZSgpXSxtdCtvZVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHZlLGh0LG10KXt2YXIgb2U9eS5leGVjKGh0LnNsaWNlKG10KSk7cmV0dXJuIG9lPyh2ZS5tPU1bb2VbMF0udG9Mb3dlckNhc2UoKV0sbXQrb2VbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih2ZSxodCxtdCl7cmV0dXJuIENlKHZlLHQsaHQsbXQpfSxkOllKLGU6WUosZjpxRGUsZzpxSixHOldKLEg6WEosSTpYSixqOlVEZSxMOldEZSxtOnpEZSxNOmpEZSxwOmZ1bmN0aW9uKHZlLGh0LG10KXt2YXIgb2U9Yy5leGVjKGh0LnNsaWNlKG10KSk7cmV0dXJuIG9lPyh2ZS5wPWRbb2VbMF0udG9Mb3dlckNhc2UoKV0sbXQrb2VbMF0ubGVuZ3RoKTotMX0scTpIRGUsUTpYRGUsczpRRGUsUzpHRGUsdTpGRGUsVTpMRGUsVjpORGUsdzpPRGUsVzpCRGUseDpmdW5jdGlvbih2ZSxodCxtdCl7cmV0dXJuIENlKHZlLGUsaHQsbXQpfSxYOmZ1bmN0aW9uKHZlLGh0LG10KXtyZXR1cm4gQ2UodmUsaSxodCxtdCl9LHk6cUosWTpXSixaOlZEZSwiJSI6WURlfTtmdW5jdGlvbiB0ZSh2ZSxodCl7cmV0dXJuIGZ1bmN0aW9uKG10KXt2YXIgcHQsb24sd24sb2U9W10sc3Q9LTEsWGU9MCxfdD12ZS5sZW5ndGg7Zm9yKG10IGluc3RhbmNlb2YgRGF0ZXx8KG10PW5ldyBEYXRlKCttdCkpOysrc3Q8X3Q7KTM3PT09dmUuY2hhckNvZGVBdChzdCkmJihvZS5wdXNoKHZlLnNsaWNlKFhlLHN0KSksbnVsbCE9KG9uPUdKW3B0PXZlLmNoYXJBdCgrK3N0KV0pP3B0PXZlLmNoYXJBdCgrK3N0KTpvbj0iZSI9PT1wdD8iICI6IjAiLCh3bj1odFtwdF0pJiYocHQ9d24obXQsb24pKSxvZS5wdXNoKHB0KSxYZT1zdCsxKTtyZXR1cm4gb2UucHVzaCh2ZS5zbGljZShYZSxzdCkpLG9lLmpvaW4oIiIpfX1mdW5jdGlvbiBLKHZlLGh0KXtyZXR1cm4gZnVuY3Rpb24obXQpe3ZhciBYZSxfdCxvZT1LdigxOTAwLHZvaWQgMCwxKTtpZihDZShvZSx2ZSxtdCs9IiIsMCkhPW10Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvZSlyZXR1cm4gbmV3IERhdGUob2UuUSk7aWYoInMiaW4gb2UpcmV0dXJuIG5ldyBEYXRlKDFlMypvZS5zKygiTCJpbiBvZT9vZS5MOjApKTtpZihodCYmISgiWiJpbiBvZSkmJihvZS5aPTApLCJwImluIG9lJiYob2UuSD1vZS5IJTEyKzEyKm9lLnApLHZvaWQgMD09PW9lLm0mJihvZS5tPSJxImluIG9lP29lLnE6MCksIlYiaW4gb2Upe2lmKG9lLlY8MXx8b2UuVj41MylyZXR1cm4gbnVsbDsidyJpbiBvZXx8KG9lLnc9MSksIloiaW4gb2U/KF90PShYZT1mMyhLdihvZS55LDAsMSkpKS5nZXRVVENEYXkoKSxYZT1fdD40fHwwPT09X3Q/eDAuY2VpbChYZSk6eDAoWGUpLFhlPUxELm9mZnNldChYZSw3KihvZS5WLTEpKSxvZS55PVhlLmdldFVUQ0Z1bGxZZWFyKCksb2UubT1YZS5nZXRVVENNb250aCgpLG9lLmQ9WGUuZ2V0VVRDRGF0ZSgpKyhvZS53KzYpJTcpOihfdD0oWGU9cDMoS3Yob2UueSwwLDEpKSkuZ2V0RGF5KCksWGU9X3Q+NHx8MD09PV90P3YwLmNlaWwoWGUpOnYwKFhlKSxYZT1iMC5vZmZzZXQoWGUsNyoob2UuVi0xKSksb2UueT1YZS5nZXRGdWxsWWVhcigpLG9lLm09WGUuZ2V0TW9udGgoKSxvZS5kPVhlLmdldERhdGUoKSsob2Uudys2KSU3KX1lbHNlKCJXImluIG9lfHwiVSJpbiBvZSkmJigidyJpbiBvZXx8KG9lLnc9InUiaW4gb2U/b2UudSU3OiJXImluIG9lPzE6MCksX3Q9IloiaW4gb2U/ZjMoS3Yob2UueSwwLDEpKS5nZXRVVENEYXkoKTpwMyhLdihvZS55LDAsMSkpLmdldERheSgpLG9lLm09MCxvZS5kPSJXImluIG9lPyhvZS53KzYpJTcrNypvZS5XLShfdCs1KSU3Om9lLncrNypvZS5VLShfdCs2KSU3KTtyZXR1cm4iWiJpbiBvZT8ob2UuSCs9b2UuWi8xMDB8MCxvZS5NKz1vZS5aJTEwMCxmMyhvZSkpOnAzKG9lKX19ZnVuY3Rpb24gQ2UodmUsaHQsbXQsb2Upe2Zvcih2YXIgcHQsb24sc3Q9MCxYZT1odC5sZW5ndGgsX3Q9bXQubGVuZ3RoO3N0PFhlOyl7aWYob2U+PV90KXJldHVybi0xO2lmKDM3PT09KHB0PWh0LmNoYXJDb2RlQXQoc3QrKykpKXtpZihwdD1odC5jaGFyQXQoc3QrKyksIShvbj1IW3B0IGluIEdKP2h0LmNoYXJBdChzdCsrKTpwdF0pfHwob2U9b24odmUsbXQsb2UpKTwwKXJldHVybi0xfWVsc2UgaWYocHQhPW10LmNoYXJDb2RlQXQob2UrKykpcmV0dXJuLTF9cmV0dXJuIG9lfXJldHVybiBSLng9dGUoZSxSKSxSLlg9dGUoaSxSKSxSLmM9dGUodCxSKSxBLng9dGUoZSxBKSxBLlg9dGUoaSxBKSxBLmM9dGUodCxBKSx7Zm9ybWF0OmZ1bmN0aW9uKHZlKXt2YXIgaHQ9dGUodmUrPSIiLFIpO3JldHVybiBodC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB2ZX0saHR9LHBhcnNlOmZ1bmN0aW9uKHZlKXt2YXIgaHQ9Syh2ZSs9IiIsITEpO3JldHVybiBodC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB2ZX0saHR9LHV0Y0Zvcm1hdDpmdW5jdGlvbih2ZSl7dmFyIGh0PXRlKHZlKz0iIixBKTtyZXR1cm4gaHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdmV9LGh0fSx1dGNQYXJzZTpmdW5jdGlvbih2ZSl7dmFyIGh0PUsodmUrPSIiLCEwKTtyZXR1cm4gaHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdmV9LGh0fX19KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSksTTA9QzAuZm9ybWF0O3ZhciBleD0xZTMsdHg9NjAqZXgsbng9NjAqdHgsaXg9MjQqbngsQUllPTcqaXgscyQ9MzAqaXgsZzM9MzY1Kml4O2Z1bmN0aW9uIFJJZShuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24ga0llKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZT8rbjorbmV3IERhdGUoK24pfWZ1bmN0aW9uIF8zKG4sdCxlLGkscixvLGEscyxsKXt2YXIgYz1YdihZYSxZYSksZD1jLmludmVydCx1PWMuZG9tYWluLHA9bCgiLiVMIiksZj1sKCI6JVMiKSxtPWwoIiVJOiVNIikseT1sKCIlSSAlcCIpLE09bCgiJWEgJWQiKSx2PWwoIiViICVkIikseD1sKCIlQiIpLFI9bCgiJVkiKSxBPVtbYSwxLGV4XSxbYSw1LDUqZXhdLFthLDE1LDE1KmV4XSxbYSwzMCwzMCpleF0sW28sMSx0eF0sW28sNSw1KnR4XSxbbywxNSwxNSp0eF0sW28sMzAsMzAqdHhdLFtyLDEsbnhdLFtyLDMsMypueF0sW3IsNiw2Km54XSxbciwxMiwxMipueF0sW2ksMSxpeF0sW2ksMiwyKml4XSxbZSwxLEFJZV0sW3QsMSxzJF0sW3QsMywzKnMkXSxbbiwxLGczXV07ZnVuY3Rpb24gSChLKXtyZXR1cm4oYShLKTxLP3A6byhLKTxLP2Y6cihLKTxLP206aShLKTxLP3k6dChLKTxLP2UoSyk8Sz9NOnY6bihLKTxLP3g6UikoSyl9ZnVuY3Rpb24gdGUoSyxDZSxaZSxJZSl7aWYobnVsbD09SyYmKEs9MTApLCJudW1iZXIiPT10eXBlb2YgSyl7dmFyIEk9TWF0aC5hYnMoWmUtQ2UpL0sscmU9VHYoZnVuY3Rpb24oY2Upe3JldHVybiBjZVsyXX0pLnJpZ2h0KEEsSSk7cmU9PT1BLmxlbmd0aD8oSWU9QWQoQ2UvZzMsWmUvZzMsSyksSz1uKTpyZT8oSWU9KHJlPUFbSS9BW3JlLTFdWzJdPEFbcmVdWzJdL0k/cmUtMTpyZV0pWzFdLEs9cmVbMF0pOihJZT1NYXRoLm1heChBZChDZSxaZSxLKSwxKSxLPXMpfXJldHVybiBudWxsPT1JZT9LOksuZXZlcnkoSWUpfXJldHVybiBjLmludmVydD1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IERhdGUoZChLKSl9LGMuZG9tYWluPWZ1bmN0aW9uKEspe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UocXYuY2FsbChLLGtJZSkpOnUoKS5tYXAoUkllKX0sYy50aWNrcz1mdW5jdGlvbihLLENlKXt2YXIgY2UsWmU9dSgpLEllPVplWzBdLEk9WmVbWmUubGVuZ3RoLTFdLHJlPUk8SWU7cmV0dXJuIHJlJiYoY2U9SWUsSWU9SSxJPWNlKSxjZT0oY2U9dGUoSyxJZSxJLENlKSk/Y2UucmFuZ2UoSWUsSSsxKTpbXSxyZT9jZS5yZXZlcnNlKCk6Y2V9LGMudGlja0Zvcm1hdD1mdW5jdGlvbihLLENlKXtyZXR1cm4gbnVsbD09Q2U/SDpsKENlKX0sYy5uaWNlPWZ1bmN0aW9uKEssQ2Upe3ZhciBaZT11KCk7cmV0dXJuKEs9dGUoSyxaZVswXSxaZVtaZS5sZW5ndGgtMV0sQ2UpKT91KEFEKFplLEspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYXAoYyxfMyhuLHQsZSxpLHIsbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIGZtKCl7cmV0dXJuIHFhLmFwcGx5KF8zKEZkLGMzLGRtLGIwLGwzLHMzLEZELGtELE0wKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiB5Mygpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIHcwKG4pe24uVT1uLkM9bi5MPW4uUj1uLlA9bi5OPW51bGx9ZnVuY3Rpb24gcngobix0KXt2YXIgZT10LGk9dC5SLHI9ZS5VO3I/ci5MPT09ZT9yLkw9aTpyLlI9aTpuLl89aSxpLlU9cixlLlU9aSxlLlI9aS5MLGUuUiYmKGUuUi5VPWUpLGkuTD1lfWZ1bmN0aW9uIG94KG4sdCl7dmFyIGU9dCxpPXQuTCxyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5MPWkuUixlLkwmJihlLkwuVT1lKSxpLlI9ZX1mdW5jdGlvbiBjJChuKXtmb3IoO24uTDspbj1uLkw7cmV0dXJuIG59eTMucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5MyxpbnNlcnQ6ZnVuY3Rpb24obix0KXt2YXIgZSxpLHI7aWYobil7aWYodC5QPW4sdC5OPW4uTixuLk4mJihuLk4uUD10KSxuLk49dCxuLlIpe2ZvcihuPW4uUjtuLkw7KW49bi5MO24uTD10fWVsc2Ugbi5SPXQ7ZT1ufWVsc2UgdGhpcy5fPyhuPWMkKHRoaXMuXyksdC5QPW51bGwsdC5OPW4sbi5QPW4uTD10LGU9bik6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxlPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPWUsdC5DPSEwLG49dDtlJiZlLkM7KWU9PT0oaT1lLlUpLkw/KHI9aS5SKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYocngodGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsb3godGhpcyxpKSk6KHI9aS5MKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5MJiYob3godGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAscngodGhpcyxpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciBlLG8sYSx0PW4uVSxpPW4uTCxyPW4uUjtpZihvPWk/cj9jJChyKTppOnIsdD90Lkw9PT1uP3QuTD1vOnQuUj1vOnRoaXMuXz1vLGkmJnI/KGE9by5DLG8uQz1uLkMsby5MPWksaS5VPW8sbyE9PXI/KHQ9by5VLG8uVT1uLlUsdC5MPW49by5SLG8uUj1yLHIuVT1vKTooby5VPXQsdD1vLG49by5SKSk6KGE9bi5DLG49byksbiYmKG4uVT10KSwhYSl7aWYobiYmbi5DKXJldHVybiB2b2lkKG4uQz0hMSk7ZG97aWYobj09PXRoaXMuXylicmVhaztpZihuPT09dC5MKXtpZigoZT10LlIpLkMmJihlLkM9ITEsdC5DPSEwLHJ4KHRoaXMsdCksZT10LlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpeyghZS5SfHwhZS5SLkMpJiYoZS5MLkM9ITEsZS5DPSEwLG94KHRoaXMsZSksZT10LlIpLGUuQz10LkMsdC5DPWUuUi5DPSExLHJ4KHRoaXMsdCksbj10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9dC5MKS5DJiYoZS5DPSExLHQuQz0hMCxveCh0aGlzLHQpLGU9dC5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuTHx8IWUuTC5DKSYmKGUuUi5DPSExLGUuQz0hMCxyeCh0aGlzLGUpLGU9dC5MKSxlLkM9dC5DLHQuQz1lLkwuQz0hMSxveCh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfWUuQz0hMCxuPXQsdD10LlV9d2hpbGUoIW4uQyk7biYmKG4uQz0hMSl9fX07dmFyIGIzPXkzO2Z1bmN0aW9uIFMwKG4sdCxlLGkpe3ZhciByPVtudWxsLG51bGxdLG89SW8ucHVzaChyKS0xO3JldHVybiByLmxlZnQ9bixyLnJpZ2h0PXQsZSYmYXgocixuLHQsZSksaSYmYXgocix0LG4saSkseWFbbi5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobykseWFbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobykscn1mdW5jdGlvbiBFMChuLHQsZSl7dmFyIGk9W3QsZV07cmV0dXJuIGkubGVmdD1uLGl9ZnVuY3Rpb24gYXgobix0LGUsaSl7blswXXx8blsxXT9uLmxlZnQ9PT1lP25bMV09aTpuWzBdPWk6KG5bMF09aSxuLmxlZnQ9dCxuLnJpZ2h0PWUpfWZ1bmN0aW9uIEZJZShuLHQsZSxpLHIpe3ZhciB5LG89blswXSxhPW5bMV0scz1vWzBdLGw9b1sxXSx1PTAscD0xLGY9YVswXS1zLG09YVsxXS1sO2lmKHk9dC1zLGZ8fCEoeT4wKSl7aWYoeS89ZixmPDApe2lmKHk8dSlyZXR1cm47eTxwJiYocD15KX1lbHNlIGlmKGY+MCl7aWYoeT5wKXJldHVybjt5PnUmJih1PXkpfWlmKHk9aS1zLGZ8fCEoeTwwKSl7aWYoeS89ZixmPDApe2lmKHk+cClyZXR1cm47eT51JiYodT15KX1lbHNlIGlmKGY+MCl7aWYoeTx1KXJldHVybjt5PHAmJihwPXkpfWlmKHk9ZS1sLG18fCEoeT4wKSl7aWYoeS89bSxtPDApe2lmKHk8dSlyZXR1cm47eTxwJiYocD15KX1lbHNlIGlmKG0+MCl7aWYoeT5wKXJldHVybjt5PnUmJih1PXkpfWlmKHk9ci1sLG18fCEoeTwwKSl7aWYoeS89bSxtPDApe2lmKHk+cClyZXR1cm47eT51JiYodT15KX1lbHNlIGlmKG0+MCl7aWYoeTx1KXJldHVybjt5PHAmJihwPXkpfXJldHVybiEodT4wKSYmIShwPDEpfHwodT4wJiYoblswXT1bcyt1KmYsbCt1Km1dKSxwPDEmJihuWzFdPVtzK3AqZixsK3AqbV0pKSwhMH19fX19ZnVuY3Rpb24gTEllKG4sdCxlLGkscil7dmFyIG89blsxXTtpZihvKXJldHVybiEwO3ZhciB5LE0sYT1uWzBdLHM9bi5sZWZ0LGw9bi5yaWdodCxjPXNbMF0sZD1zWzFdLHU9bFswXSxwPWxbMV0sZj0oYyt1KS8yO2lmKHA9PT1kKXtpZihmPHR8fGY+PWkpcmV0dXJuO2lmKGM+dSl7aWYoYSl7aWYoYVsxXT49cilyZXR1cm59ZWxzZSBhPVtmLGVdO289W2Yscl19ZWxzZXtpZihhKXtpZihhWzFdPGUpcmV0dXJufWVsc2UgYT1bZixyXTtvPVtmLGVdfX1lbHNlIGlmKE09KGQrcCkvMi0oeT0oYy11KS8ocC1kKSkqZix5PC0xfHx5PjEpaWYoYz51KXtpZihhKXtpZihhWzFdPj1yKXJldHVybn1lbHNlIGE9WyhlLU0pL3ksZV07bz1bKHItTSkveSxyXX1lbHNle2lmKGEpe2lmKGFbMV08ZSlyZXR1cm59ZWxzZSBhPVsoci1NKS95LHJdO289WyhlLU0pL3ksZV19ZWxzZSBpZihkPHApe2lmKGEpe2lmKGFbMF0+PWkpcmV0dXJufWVsc2UgYT1bdCx5KnQrTV07bz1baSx5KmkrTV19ZWxzZXtpZihhKXtpZihhWzBdPHQpcmV0dXJufWVsc2UgYT1baSx5KmkrTV07bz1bdCx5KnQrTV19cmV0dXJuIG5bMF09YSxuWzFdPW8sITB9ZnVuY3Rpb24gTkllKG4sdCl7dmFyIGU9bi5zaXRlLGk9dC5sZWZ0LHI9dC5yaWdodDtyZXR1cm4gZT09PXImJihyPWksaT1lKSxyP01hdGguYXRhbjIoclsxXS1pWzFdLHJbMF0taVswXSk6KGU9PT1pPyhpPXRbMV0scj10WzBdKTooaT10WzBdLHI9dFsxXSksTWF0aC5hdGFuMihpWzBdLXJbMF0sclsxXS1pWzFdKSl9ZnVuY3Rpb24gdjMobix0KXtyZXR1cm4gdFsrKHQubGVmdCE9PW4uc2l0ZSldfWZ1bmN0aW9uIEJJZShuLHQpe3JldHVybiB0WysodC5sZWZ0PT09bi5zaXRlKV19dmFyIE5ELG0kPVtdO2Z1bmN0aW9uIFZJZSgpe3cwKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBtbShuKXt2YXIgdD1uLlAsZT1uLk47aWYodCYmZSl7dmFyIGk9dC5zaXRlLHI9bi5zaXRlLG89ZS5zaXRlO2lmKGkhPT1vKXt2YXIgYT1yWzBdLHM9clsxXSxsPWlbMF0tYSxjPWlbMV0tcyxkPW9bMF0tYSx1PW9bMV0tcyxwPTIqKGwqdS1jKmQpO2lmKCEocD49LWgkKSl7dmFyIGY9bCpsK2MqYyxtPWQqZCt1KnUseT0odSpmLWMqbSkvcCxNPShsKm0tZCpmKS9wLHY9bSQucG9wKCl8fG5ldyBWSWU7di5hcmM9bix2LnNpdGU9cix2Lng9eSthLHYueT0odi5jeT1NK3MpK01hdGguc3FydCh5KnkrTSpNKSxuLmNpcmNsZT12O2Zvcih2YXIgeD1udWxsLFI9VDAuXztSOylpZih2Lnk8Ui55fHx2Lnk9PT1SLnkmJnYueDw9Ui54KXtpZighUi5MKXt4PVIuUDticmVha31SPVIuTH1lbHNle2lmKCFSLlIpe3g9UjticmVha31SPVIuUn1UMC5pbnNlcnQoeCx2KSx4fHwoTkQ9dil9fX19ZnVuY3Rpb24gaG0obil7dmFyIHQ9bi5jaXJjbGU7dCYmKHQuUHx8KE5EPXQuTiksVDAucmVtb3ZlKHQpLG0kLnB1c2godCksdzAodCksbi5jaXJjbGU9bnVsbCl9dmFyIF8kPVtdO2Z1bmN0aW9uIEhJZSgpe3cwKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBnJChuKXt2YXIgdD1fJC5wb3AoKXx8bmV3IEhJZTtyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiB4MyhuKXtobShuKSxnbS5yZW1vdmUobiksXyQucHVzaChuKSx3MChuKX1mdW5jdGlvbiB5JChuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxpPXQuY3kscj1bZSxpXSxvPW4uUCxhPW4uTixzPVtuXTt4MyhuKTtmb3IodmFyIGw9bztsLmNpcmNsZSYmTWF0aC5hYnMoZS1sLmNpcmNsZS54KTx0ciYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8dHI7KW89bC5QLHMudW5zaGlmdChsKSx4MyhsKSxsPW87cy51bnNoaWZ0KGwpLGhtKGwpO2Zvcih2YXIgYz1hO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPHRyJiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTx0cjspYT1jLk4scy5wdXNoKGMpLHgzKGMpLGM9YTtzLnB1c2goYyksaG0oYyk7dmFyIHUsZD1zLmxlbmd0aDtmb3IodT0xO3U8ZDsrK3UpYXgoKGM9c1t1XSkuZWRnZSwobD1zW3UtMV0pLnNpdGUsYy5zaXRlLHIpOyhjPXNbZC0xXSkuZWRnZT1TMCgobD1zWzBdKS5zaXRlLGMuc2l0ZSxudWxsLHIpLG1tKGwpLG1tKGMpfWZ1bmN0aW9uIGIkKG4pe2Zvcih2YXIgaSxyLG8sYSx0PW5bMF0sZT1uWzFdLHM9Z20uXztzOylpZigobz12JChzLGUpLXQpPnRyKXM9cy5MO2Vsc2V7aWYoISgoYT10LXpJZShzLGUpKT50cikpe28+LXRyPyhpPXMuUCxyPXMpOmE+LXRyPyhpPXMscj1zLk4pOmk9cj1zO2JyZWFrfWlmKCFzLlIpe2k9czticmVha31zPXMuUn0hZnVuY3Rpb24obil7eWFbbi5pbmRleF09e3NpdGU6bixoYWxmZWRnZXM6W119fShuKTt2YXIgbD1nJChuKTtpZihnbS5pbnNlcnQoaSxsKSxpfHxyKXtpZihpPT09cilyZXR1cm4gaG0oaSkscj1nJChpLnNpdGUpLGdtLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9UzAoaS5zaXRlLGwuc2l0ZSksbW0oaSksdm9pZCBtbShyKTtpZighcilyZXR1cm4gdm9pZChsLmVkZ2U9UzAoaS5zaXRlLGwuc2l0ZSkpO2htKGkpLGhtKHIpO3ZhciBjPWkuc2l0ZSxkPWNbMF0sdT1jWzFdLHA9blswXS1kLGY9blsxXS11LG09ci5zaXRlLHk9bVswXS1kLE09bVsxXS11LHY9MioocCpNLWYqeSkseD1wKnArZipmLFI9eSp5K00qTSxBPVsoTSp4LWYqUikvditkLChwKlIteSp4KS92K3VdO2F4KHIuZWRnZSxjLG0sQSksbC5lZGdlPVMwKGMsbixudWxsLEEpLHIuZWRnZT1TMChuLG0sbnVsbCxBKSxtbShpKSxtbShyKX19ZnVuY3Rpb24gdiQobix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxvPXItdDtpZighbylyZXR1cm4gaTt2YXIgYT1uLlA7aWYoIWEpcmV0dXJuLTEvMDt2YXIgcz0oZT1hLnNpdGUpWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gczt2YXIgZD1zLWksdT0xL28tMS9jLHA9ZC9jO3JldHVybiB1PygtcCtNYXRoLnNxcnQocCpwLTIqdSooZCpkLygtMipjKS1sK2MvMityLW8vMikpKS91K2k6KGkrcykvMn1mdW5jdGlvbiB6SWUobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gdiQoZSx0KTt2YXIgaT1uLnNpdGU7cmV0dXJuIGlbMV09PT10P2lbMF06MS8wfXZhciBnbSx5YSxUMCxJbyx0cj0xZS02LGgkPTFlLTEyO2Z1bmN0aW9uIFVJZShuLHQsZSl7cmV0dXJuKG5bMF0tZVswXSkqKHRbMV0tblsxXSktKG5bMF0tdFswXSkqKGVbMV0tblsxXSl9ZnVuY3Rpb24gakllKG4sdCl7cmV0dXJuIHRbMV0tblsxXXx8dFswXS1uWzBdfWZ1bmN0aW9uIEJEKG4sdCl7dmFyIGkscixvLGU9bi5zb3J0KGpJZSkucG9wKCk7Zm9yKElvPVtdLHlhPW5ldyBBcnJheShuLmxlbmd0aCksZ209bmV3IGIzLFQwPW5ldyBiMzs7KWlmKG89TkQsZSYmKCFvfHxlWzFdPG8ueXx8ZVsxXT09PW8ueSYmZVswXTxvLngpKShlWzBdIT09aXx8ZVsxXSE9PXIpJiYoYiQoZSksaT1lWzBdLHI9ZVsxXSksZT1uLnBvcCgpO2Vsc2V7aWYoIW8pYnJlYWs7eSQoby5hcmMpfWlmKGZ1bmN0aW9uKCl7Zm9yKHZhciBlLGkscixvLG49MCx0PXlhLmxlbmd0aDtuPHQ7KytuKWlmKChlPXlhW25dKSYmKG89KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3Iocj0wO3I8bzsrK3IpYVtyXT1yLHNbcl09TkllKGUsSW9baVtyXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSkscj0wO3I8bzsrK3Ipc1tyXT1pW2Fbcl1dO2ZvcihyPTA7cjxvOysrcilpW3JdPXNbcl19fSgpLHQpe3ZhciBhPSt0WzBdWzBdLHM9K3RbMF1bMV0sbD0rdFsxXVswXSxjPSt0WzFdWzFdOyhmdW5jdGlvbihuLHQsZSxpKXtmb3IodmFyIG8scj1Jby5sZW5ndGg7ci0tOylMSWUobz1Jb1tyXSxuLHQsZSxpKSYmRkllKG8sbix0LGUsaSkmJihNYXRoLmFicyhvWzBdWzBdLW9bMV1bMF0pPnRyfHxNYXRoLmFicyhvWzBdWzFdLW9bMV1bMV0pPnRyKXx8ZGVsZXRlIElvW3JdfSkoYSxzLGwsYyksZnVuY3Rpb24obix0LGUsaSl7dmFyIG8sYSxzLGwsYyxkLHUscCxmLG0seSxNLHI9eWEubGVuZ3RoLHY9ITA7Zm9yKG89MDtvPHI7KytvKWlmKGE9eWFbb10pe2ZvcihzPWEuc2l0ZSxsPShjPWEuaGFsZmVkZ2VzKS5sZW5ndGg7bC0tOylJb1tjW2xdXXx8Yy5zcGxpY2UobCwxKTtmb3IobD0wLGQ9Yy5sZW5ndGg7bDxkOyl5PShtPUJJZShhLElvW2NbbF1dKSlbMF0sTT1tWzFdLHA9KHU9djMoYSxJb1tjWysrbCVkXV0pKVswXSxmPXVbMV0sKE1hdGguYWJzKHktcCk+dHJ8fE1hdGguYWJzKE0tZik+dHIpJiYoYy5zcGxpY2UobCwwLElvLnB1c2goRTAocyxtLE1hdGguYWJzKHktbik8dHImJmktTT50cj9bbixNYXRoLmFicyhwLW4pPHRyP2Y6aV06TWF0aC5hYnMoTS1pKTx0ciYmZS15PnRyP1tNYXRoLmFicyhmLWkpPHRyP3A6ZSxpXTpNYXRoLmFicyh5LWUpPHRyJiZNLXQ+dHI/W2UsTWF0aC5hYnMocC1lKTx0cj9mOnRdOk1hdGguYWJzKE0tdCk8dHImJnktbj50cj9bTWF0aC5hYnMoZi10KTx0cj9wOm4sdF06bnVsbCkpLTEpLCsrZCk7ZCYmKHY9ITEpfWlmKHYpe3ZhciB4LFIsQSxIPTEvMDtmb3Iobz0wLHY9bnVsbDtvPHI7KytvKShhPXlhW29dKSYmKEE9KHg9KHM9YS5zaXRlKVswXS1uKSp4KyhSPXNbMV0tdCkqUik8SCYmKEg9QSx2PWEpO2lmKHYpe3ZhciB0ZT1bbix0XSxLPVtuLGldLENlPVtlLGldLFplPVtlLHRdO3YuaGFsZmVkZ2VzLnB1c2goSW8ucHVzaChFMChzPXYuc2l0ZSx0ZSxLKSktMSxJby5wdXNoKEUwKHMsSyxDZSkpLTEsSW8ucHVzaChFMChzLENlLFplKSktMSxJby5wdXNoKEUwKHMsWmUsdGUpKS0xKX19Zm9yKG89MDtvPHI7KytvKShhPXlhW29dKSYmKGEuaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlIHlhW29dKX0oYSxzLGwsYyl9dGhpcy5lZGdlcz1Jbyx0aGlzLmNlbGxzPXlhLGdtPVQwPUlvPXlhPW51bGx9ZnVuY3Rpb24gX20obix0LGUpe3RoaXMuaz1uLHRoaXMueD10LHRoaXMueT1lfUJELnByb3RvdHlwZT17Y29uc3RydWN0b3I6QkQscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIHYzKHQsbltpXSl9KTtyZXR1cm4gZS5kYXRhPXQuc2l0ZS5kYXRhLGV9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIG49W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oZSxpKXtpZihzPShvPWUuaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciBvLHMsbCxyPWUuc2l0ZSxhPS0xLGM9dFtvW3MtMV1dLGQ9Yy5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdDsrK2E8czspbD1kLGQ9KGM9dFtvW2FdXSkubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQsbCYmZCYmaTxsLmluZGV4JiZpPGQuaW5kZXgmJlVJZShyLGwsZCk8MCYmbi5wdXNoKFtyLmRhdGEsbC5kYXRhLGQuZGF0YV0pfSksbn0sbGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4ucmlnaHR9KS5tYXAoZnVuY3Rpb24obil7cmV0dXJue3NvdXJjZTpuLmxlZnQuZGF0YSx0YXJnZXQ6bi5yaWdodC5kYXRhfX0pfSxmaW5kOmZ1bmN0aW9uKG4sdCxlKXtmb3IodmFyIHIscyxpPXRoaXMsbz1pLl9mb3VuZHx8MCxhPWkuY2VsbHMubGVuZ3RoOyEocz1pLmNlbGxzW29dKTspaWYoKytvPj1hKXJldHVybiBudWxsO3ZhciBsPW4tcy5zaXRlWzBdLGM9dC1zLnNpdGVbMV0sZD1sKmwrYypjO2Rve3M9aS5jZWxsc1tyPW9dLG89bnVsbCxzLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHUpe3ZhciBwPWkuZWRnZXNbdV0sZj1wLmxlZnQ7aWYoZiE9PXMuc2l0ZSYmZnx8KGY9cC5yaWdodCkpe3ZhciBtPW4tZlswXSx5PXQtZlsxXSxNPW0qbSt5Knk7TTxkJiYoZD1NLG89Zi5pbmRleCl9fSl9d2hpbGUobnVsbCE9PW8pO3JldHVybiBpLl9mb3VuZD1yLG51bGw9PWV8fGQ8PWUqZT9zLnNpdGU6bnVsbH19LF9tLnByb3RvdHlwZT17Y29uc3RydWN0b3I6X20sc2NhbGU6ZnVuY3Rpb24obil7cmV0dXJuIDE9PT1uP3RoaXM6bmV3IF9tKHRoaXMuaypuLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24obix0KXtyZXR1cm4gMD09PW4mMD09PXQ/dGhpczpuZXcgX20odGhpcy5rLHRoaXMueCt0aGlzLmsqbix0aGlzLnkrdGhpcy5rKnQpfSxhcHBseTpmdW5jdGlvbihuKXtyZXR1cm5bblswXSp0aGlzLmsrdGhpcy54LG5bMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihuKXtyZXR1cm4gbip0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKG4pe3JldHVyblsoblswXS10aGlzLngpL3RoaXMuaywoblsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24obil7cmV0dXJuKG4tdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24obil7cmV0dXJuKG4tdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0scmVzY2FsZVk6ZnVuY3Rpb24obil7cmV0dXJuIG4uY29weSgpLmRvbWFpbihuLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAobi5pbnZlcnQsbikpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fSxuZXcgX20oMSwwLDApO3ZhciBBMz0xZTQsUjM9LjAwMSx3JD1KcigiLjJ+ZSIpLEdJZT1KcigiLjR+ciIpLHgkPUpyKCIsfiIpO2Z1bmN0aW9uIEMkKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49QTN8fHQ8UjM/dyQobik6R0llKG4pfXZhciBjcD17Zm9ybWF0VGljazpDJCxmb3JtYXRTaG9ydDpDJCxmb3JtYXRSZWFkYWJsZShuKXtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49QTN8fHQ8UjM/dyQobik6eCQobil9LGZvcm1hdExvbmc6eCR9LFdJZT1uZXcgSW50bC5OdW1iZXJGb3JtYXQodm9pZCAwLHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6NH0pO2Z1bmN0aW9uIFZEKG4pe3JldHVybiBXSWUuZm9ybWF0KG4pfXZhciBJMD17Zm9ybWF0VGljazpWRCxmb3JtYXRTaG9ydDpWRCxmb3JtYXRSZWFkYWJsZTpWRCxmb3JtYXRMb25nOlZEfSxxSWU9SnIoIjAuM35zIiksWUllPUpyKCIsLjN+ZiIpO2Z1bmN0aW9uIEhEKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1BM3x8dDxSMz9xSWUobik6WUllKG4pfXZhciBrMz17Zm9ybWF0VGljazpIRCxmb3JtYXRTaG9ydDpIRCxmb3JtYXRSZWFkYWJsZTpIRCxmb3JtYXRMb25nOkhEfSxFMz0xZTMsVDM9NjAqRTMsRDM9NjAqVDMsSTM9MjQqRDMsTSQ9MzY1KkkzLEQwPUpyKCIuNH4iKTtmdW5jdGlvbiB6RChuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5zaWduKG4pPjA/IiI6Ii0iLGU9TWF0aC5hYnMobik7cmV0dXJuIHQrPWU8RTM/YCR7RDAoZSl9IG1zYDplPFQzP2Ake0QwKGUvRTMpfSBzZWNgOmU8RDM/YCR7RDAoZS9UMyl9IG1pbmA6ZTxJMz9gJHtEMChlL0QzKX0gaHJgOmU8TSQ/YCR7RDAoZS9JMyl9IGRheWA6YCR7RDAoZS9NJCl9IHlyYCx0fXZhciBTMyxBMD17Zm9ybWF0VGljazp6RCxmb3JtYXRTaG9ydDp6RCxmb3JtYXRSZWFkYWJsZTp6RCxmb3JtYXRMb25nOnpEfSxYSWU9Zm0oKS50aWNrRm9ybWF0KCksUyQ9e2Zvcm1hdFRpY2s6bj0+WEllKG5ldyBEYXRlKG4pKSxmb3JtYXRTaG9ydDpuPT5uZXcgRGF0ZShuKS50b0xvY2FsZVN0cmluZyhTMyx7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIn0pLGZvcm1hdFJlYWRhYmxlOm49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKFMzLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSksZm9ybWF0TG9uZzpuPT5uZXcgRGF0ZShuKS50b0xvY2FsZVN0cmluZyhTMyx7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQiLGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6M30pfTtmdW5jdGlvbiBqbChuKXtzd2l0Y2gobil7Y2FzZSBpci5MSU5FQVI6cmV0dXJuIG5ldyBzeDtjYXNlIGlyLkxPRzEwOnJldHVybiBuZXcgUDM7Y2FzZSBpci5USU1FOnJldHVybiBuZXcgbHg7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcihgU2NhbGVUeXBlICR7bn0gbm90IHN1cHBvcnRlZC5gKX19dmFyIHN4PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPWNwfXRyYW5zZm9ybSh0LGUsaSl7bGV0W3Isb109dCxhPW8tcixbcyxsXT1lO3JldHVybiAwPT09YT9zOihsLXMpL2EqKGktcikrc31mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odCxlLGkpfXJldmVyc2UodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybShlLHQsaSl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10O2lmKGk8ZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgaW5wdXQ6IG1pbiBpcyBsYXJnZXIgdGhhbiBtYXgiKTtpZihpPT09ZSlyZXR1cm4gMD09PWU/Wy0xLDFdOmU8MD9bMiplLDBdOlswLDIqZV07bGV0IHI9VWwoKSxvPS4wNSooaS1lK051bWJlci5FUFNJTE9OKSxbYSxzXT1yLmRvbWFpbihbZS1vLGkrb10pLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bYSxzXX10aWNrcyh0LGUpe3JldHVybiBVbCgpLmRvbWFpbih0KS50aWNrcyhlKX1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KX19LFAzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPWNwfXRyYW5zZm9ybSh0KXtyZXR1cm4gTWF0aC5sb2cxMCh0PjA/dDpOdW1iZXIuTUlOX1ZBTFVFKX11bnRyYW5zZm9ybSh0KXtyZXR1cm4gTWF0aC5leHAodC9NYXRoLkxPRzEwRSl9Zm9yd2FyZCh0LGUsaSl7aWYoaTw9MClyZXR1cm4gZVswXTtsZXRbcixvXT10LFthLHNdPWUsbD10aGlzLnRyYW5zZm9ybShyKSxkPXRoaXMudHJhbnNmb3JtKG8pLWwsdT1zLWE7cmV0dXJuIGk9dGhpcy50cmFuc2Zvcm0oaSksdS8oZCtOdW1iZXIuRVBTSUxPTikqKGktbCkrYX1yZXZlcnNlKHQsZSxpKXtsZXRbcixvXT10LFthLHNdPWUsbD10aGlzLnRyYW5zZm9ybShyKSxkPXRoaXMudHJhbnNmb3JtKG8pLWw7cmV0dXJuIHRoaXMudW50cmFuc2Zvcm0oZC8ocy1hK051bWJlci5FUFNJTE9OKSooaS1hKStsKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoZT5pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCByPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSksbz1NYXRoLm1heChpLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBpPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLC41KnIpLDIqb119dGlja3ModCxlKXtsZXQgaT10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxyPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLG89UXYoKS5kb21haW4oW2kscl0pLnRpY2tzKGUpO3JldHVybiBvLmxlbmd0aD9vOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LGx4PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1mbSgpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1TJH1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sTzM9ITE7aWYoc2VsZi5oYXNPd25Qcm9wZXJ0eSgiV2ViR0wyUmVuZGVyaW5nQ29udGV4dCIpJiZzZWxmLmhhc093blByb3BlcnR5KCJkb2N1bWVudCIpKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiLCgpPT57TzM9ITF9KTtsZXQgdD1uLmdldENvbnRleHQoIndlYmdsMiIpO08zPUJvb2xlYW4odCl9dmFyIEdsX2NvbnZlcnRSZWN0VG9FeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fSxHbF9pc1dlYkdsMlN1cHBvcnRlZD1mdW5jdGlvbigpe3JldHVybiBPM30sR2xfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXtpZighc2VsZi5oYXNPd25Qcm9wZXJ0eSgiT2Zmc2NyZWVuQ2FudmFzIikpcmV0dXJuITE7bGV0IG49bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLmdldENvbnRleHQoIndlYmdsMiIpO3JldHVybiBCb29sZWFuKG4pfSxHbF9hcmVQb2x5bGluZXNFcXVhbD1mdW5jdGlvbihuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9LFIwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy54U2NhbGU9amwoaXIuTElORUFSKSx0aGlzLnlTY2FsZT1qbChpci5MSU5FQVIpLHRoaXMuZG9tQ29udGFpbmVyUmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX19Z2V0VXBkYXRlSWRlbnRpZmllcigpe3JldHVybiB0aGlzLmxhc3RVcGRhdGVkfXVwZGF0ZUlkZW50aWZpZXIoKXt0aGlzLmxhc3RVcGRhdGVkKyt9aXNZQXhpc1BvaW50ZWREb3duKCl7cmV0dXJuITB9c2V0WFNjYWxlKHQpe3RoaXMueFNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0WVNjYWxlKHQpe3RoaXMueVNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9Z2V0Q3VycmVudFZpZXdCb3hSZWN0KCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXdCb3hSZWN0fXNldFZpZXdCb3hSZWN0KHQpe3RoaXMuY3VycmVudFZpZXdCb3hSZWN0PXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0RG9tQ29udGFpbmVyUmVjdCh0KXt0aGlzLmRvbUNvbnRhaW5lclJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX10cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsZSl7bGV0IGk9dCxyPUdsX2NvbnZlcnRSZWN0VG9FeHRlbnQodGhpcy5jdXJyZW50Vmlld0JveFJlY3QpO3JldHVyblt0aGlzLnhTY2FsZS5mb3J3YXJkKHIueCxbaS54LGkueCtpLndpZHRoXSxlWzBdKSx0aGlzLnlTY2FsZS5mb3J3YXJkKHIueSx0aGlzLmlzWUF4aXNQb2ludGVkRG93bigpP1tpLnkraS5oZWlnaHQsaS55XTpbaS55LGkueStpLmhlaWdodF0sZVsxXSldfX07ZnVuY3Rpb24gVUQobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpvLG9wYWNpdHk6YX09aSxzPW47cmV0dXJuIHN8fG8/KHM9cz8/dCgpLHM9ZShzKSxzLnN0eWxlLmRpc3BsYXk9bz8iIjoibm9uZSIscy5zdHlsZS5zdHJva2U9cixzLnN0eWxlLm9wYWNpdHk9U3RyaW5nKGE/PzEpLHMpOm51bGx9dmFyIE9WPSIxMzciLHRBZT0wLEUkPTEsbkFlPTIsbHRlPTEsaUFlPTIsYng9MyxTeD0wLHlvPTEsb189Mix5cD0wLHh4PTEsVCQ9MixEJD0zLEkkPTQsckFlPTUsSzA9MTAwLG9BZT0xMDEsYUFlPTEwMixBJD0xMDMsUiQ9MTA0LHNBZT0yMDAsbEFlPTIwMSxjQWU9MjAyLGRBZT0yMDMsZHRlPTIwNCx1dGU9MjA1LHVBZT0yMDYscEFlPTIwNyxmQWU9MjA4LG1BZT0yMDksaEFlPTIxMCxnQWU9MCxfQWU9MSx5QWU9Mix2Qj0zLGJBZT00LHZBZT01LHhBZT02LENBZT03LEpJPTAsTUFlPTEsd0FlPTIsYnA9MCxTQWU9MSxFQWU9MixUQWU9MyxEQWU9NCxJQWU9NSxaeD0zMDEsS3g9MzAyLHhCPTMwMyxDQj0zMDQsJEk9MzA2LEZWPTMwNyxNQj0xZTMsZ3M9MTAwMSx3Qj0xMDAyLGJvPTEwMDMsayQ9MTAwNCxQJD0xMDA1LHJhPTEwMDYsQUFlPTEwMDcsZUE9MTAwOCx2cD0xMDA5LFJBZT0xMDEwLGtBZT0xMDExLEV4PTEwMTIsUEFlPTEwMTMsQ0k9MTAxNCxDbT0xMDE1LHRfPTEwMTYsT0FlPTEwMTcsRkFlPTEwMTgsbl89MTAyMCxMQWU9MTAyMSxiYT0xMDIzLE5BZT0xMDI0LEJBZT0xMDI1LHdtPTEwMjYsYV89MTAyNyxWQWU9MTAyOCxIQWU9MTAyOSx6QWU9MTAzMCxVQWU9MTAzMSxqQWU9MTAzMyxGMz0zMzc3NixMMz0zMzc3NyxOMz0zMzc3OCxCMz0zMzc3OSxPJD0zNTg0MCxGJD0zNTg0MSxMJD0zNTg0MixOJD0zNTg0MyxHQWU9MzYxOTYsQiQ9Mzc0OTIsViQ9Mzc0OTYsSCQ9Mzc4MDgseiQ9Mzc4MDksVSQ9Mzc4MTAsaiQ9Mzc4MTEsRyQ9Mzc4MTIsVyQ9Mzc4MTMscSQ9Mzc4MTQsWSQ9Mzc4MTUsWCQ9Mzc4MTYsUSQ9Mzc4MTcsWiQ9Mzc4MTgsSyQ9Mzc4MTksSiQ9Mzc4MjAsJCQ9Mzc4MjEsZWVlPTM2NDkyLEowPTI0MDAsJDA9MjQwMSxNcD0zZTMsRHI9MzAwMSxaQWU9MzIwMSx5Xz0wLEtBZT0xLFR4PTM1MDQ0LEVJPTM1MDQ4LHRlZT0iMzAwIGVzIixTQj0xMDM1LFVkPWNsYXNze2FkZEV2ZW50TGlzdGVuZXIodCxlKXt2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9e30pO2xldCBpPXRoaXMuX2xpc3RlbmVyczt2b2lkIDA9PT1pW3RdJiYoaVt0XT1bXSksLTE9PT1pW3RdLmluZGV4T2YoZSkmJmlbdF0ucHVzaChlKX1oYXNFdmVudExpc3RlbmVyKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybiExO2xldCBpPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gdm9pZCAwIT09aVt0XSYmLTEhPT1pW3RdLmluZGV4T2YoZSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHZvaWQgMCE9PXIpe2xldCBvPXIuaW5kZXhPZihlKTstMSE9PW8mJnIuc3BsaWNlKG8sMSl9fWRpc3BhdGNoRXZlbnQodCl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZih2b2lkIDAhPT1pKXt0LnRhcmdldD10aGlzO2xldCByPWkuc2xpY2UoMCk7Zm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXJbb10uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX0sSG89W107Zm9yKGxldCBuPTA7bjwyNTY7bisrKUhvW25dPShuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNik7dmFyIHozPU1hdGguUEkvMTgwLEVCPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIFFsKCl7bGV0IG49NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsdD00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxlPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGk9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKEhvWzI1NSZuXStIb1tuPj44JjI1NV0rSG9bbj4+MTYmMjU1XStIb1tuPj4yNCYyNTVdKyItIitIb1syNTUmdF0rSG9bdD4+OCYyNTVdKyItIitIb1t0Pj4xNiYxNXw2NF0rSG9bdD4+MjQmMjU1XSsiLSIrSG9bNjMmZXwxMjhdK0hvW2U+PjgmMjU1XSsiLSIrSG9bZT4+MTYmMjU1XStIb1tlPj4yNCYyNTVdK0hvWzI1NSZpXStIb1tpPj44JjI1NV0rSG9baT4+MTYmMjU1XStIb1tpPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFhhKG4sdCxlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX1mdW5jdGlvbiBVMyhuLHQsZSl7cmV0dXJuKDEtZSkqbitlKnR9ZnVuY3Rpb24gbmVlKG4pe3JldHVybiAwPT0obiZuLTEpJiYwIT09bn1mdW5jdGlvbiBlUmUobil7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMikpfXZhciAkZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLng9dCx0aGlzLnk9ZX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LGUpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbM10qaStyWzZdLHRoaXMueT1yWzFdKmUrcls0XSppK3JbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgZT10aGlzLngtdC54LGk9dGhpcy55LXQueTtyZXR1cm4gZSplK2kqaX1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSksbz10aGlzLngtdC54LGE9dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PW8qaS1hKnIrdC54LHRoaXMueT1vKnIrYSppK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fTskZS5wcm90b3R5cGUuaXNWZWN0b3IyPSEwO3ZhciB2bz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMSwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQsZSxpLHIsbyxhLHMsbCxjKXtsZXQgZD10aGlzLmVsZW1lbnRzO3JldHVybiBkWzBdPXQsZFsxXT1yLGRbMl09cyxkWzNdPWUsZFs0XT1vLGRbNV09bCxkWzZdPWksZFs3XT1hLGRbOF09Yyx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKSx0aGlzfWNvcHkodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMF09aVswXSxlWzFdPWlbMV0sZVsyXT1pWzJdLGVbM109aVszXSxlWzRdPWlbNF0sZVs1XT1pWzVdLGVbNl09aVs2XSxlWzddPWlbN10sZVs4XT1pWzhdLHRoaXN9ZXh0cmFjdEJhc2lzKHQsZSxpKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDApLGUuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMiksdGhpc31zZXRGcm9tTWF0cml4NCh0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbNF0sZVs4XSxlWzFdLGVbNV0sZVs5XSxlWzJdLGVbNl0sZVsxMF0pLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7bGV0IGk9dC5lbGVtZW50cyxyPWUuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9aVswXSxzPWlbM10sbD1pWzZdLGM9aVsxXSxkPWlbNF0sdT1pWzddLHA9aVsyXSxmPWlbNV0sbT1pWzhdLHk9clswXSxNPXJbM10sdj1yWzZdLHg9clsxXSxSPXJbNF0sQT1yWzddLEg9clsyXSx0ZT1yWzVdLEs9cls4XTtyZXR1cm4gb1swXT1hKnkrcyp4K2wqSCxvWzNdPWEqTStzKlIrbCp0ZSxvWzZdPWEqditzKkErbCpLLG9bMV09Yyp5K2QqeCt1Kkgsb1s0XT1jKk0rZCpSK3UqdGUsb1s3XT1jKnYrZCpBK3UqSyxvWzJdPXAqeStmKngrbSpILG9bNV09cCpNK2YqUittKnRlLG9bOF09cCp2K2YqQSttKkssdGhpc31tdWx0aXBseVNjYWxhcih0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbM10qPXQsZVs2XSo9dCxlWzFdKj10LGVbNF0qPXQsZVs3XSo9dCxlWzJdKj10LGVbNV0qPXQsZVs4XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10sYT10WzRdLHM9dFs1XSxsPXRbNl0sYz10WzddLGQ9dFs4XTtyZXR1cm4gZSphKmQtZSpzKmMtaSpvKmQraSpzKmwrcipvKmMtciphKmx9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10sYT10WzRdLHM9dFs1XSxsPXRbNl0sYz10WzddLGQ9dFs4XSx1PWQqYS1zKmMscD1zKmwtZCpvLGY9YypvLWEqbCxtPWUqdStpKnArcipmO2lmKDA9PT1tKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCk7bGV0IHk9MS9tO3JldHVybiB0WzBdPXUqeSx0WzFdPShyKmMtZCppKSp5LHRbMl09KHMqaS1yKmEpKnksdFszXT1wKnksdFs0XT0oZCplLXIqbCkqeSx0WzVdPShyKm8tcyplKSp5LHRbNl09Zip5LHRbN109KGkqbC1jKmUpKnksdFs4XT0oYSplLWkqbykqeSx0aGlzfXRyYW5zcG9zZSgpe2xldCB0LGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdD1lWzFdLGVbMV09ZVszXSxlWzNdPXQsdD1lWzJdLGVbMl09ZVs2XSxlWzZdPXQsdD1lWzVdLGVbNV09ZVs3XSxlWzddPXQsdGhpc31nZXROb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQodCkuaW52ZXJ0KCkudHJhbnNwb3NlKCl9dHJhbnNwb3NlSW50b0FycmF5KHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbM10sdFsyXT1lWzZdLHRbM109ZVsxXSx0WzRdPWVbNF0sdFs1XT1lWzddLHRbNl09ZVsyXSx0WzddPWVbNV0sdFs4XT1lWzhdLHRoaXN9c2V0VXZUcmFuc2Zvcm0odCxlLGkscixvLGEscyl7bGV0IGw9TWF0aC5jb3MobyksYz1NYXRoLnNpbihvKTtyZXR1cm4gdGhpcy5zZXQoaSpsLGkqYywtaSoobCphK2MqcykrYSt0LC1yKmMscipsLC1yKigtYyphK2wqcykrcytlLDAsMCwxKSx0aGlzfXNjYWxlKHQsZSl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaVswXSo9dCxpWzNdKj10LGlbNl0qPXQsaVsxXSo9ZSxpWzRdKj1lLGlbN10qPWUsdGhpc31yb3RhdGUodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxyPXRoaXMuZWxlbWVudHMsbz1yWzBdLGE9clszXSxzPXJbNl0sbD1yWzFdLGM9cls0XSxkPXJbN107cmV0dXJuIHJbMF09ZSpvK2kqbCxyWzNdPWUqYStpKmMscls2XT1lKnMraSpkLHJbMV09LWkqbytlKmwscls0XT0taSphK2UqYyxyWzddPS1pKnMrZSpkLHRoaXN9dHJhbnNsYXRlKHQsZSl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaVswXSs9dCppWzJdLGlbM10rPXQqaVs1XSxpWzZdKz10KmlbOF0saVsxXSs9ZSppWzJdLGlbNF0rPWUqaVs1XSxpWzddKz1lKmlbOF0sdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gdFtlXT1pWzBdLHRbZSsxXT1pWzFdLHRbZSsyXT1pWzJdLHRbZSszXT1pWzNdLHRbZSs0XT1pWzRdLHRbZSs1XT1pWzVdLHRbZSs2XT1pWzZdLHRbZSs3XT1pWzddLHRbZSs4XT1pWzhdLHR9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX19O2Z1bmN0aW9uIG10ZShuKXtmb3IobGV0IHQ9bi5sZW5ndGgtMTt0Pj0wOy0tdClpZihuW3RdPjY1NTM1KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIER4KG4pe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG4pfXZvLnByb3RvdHlwZS5pc01hdHJpeDM9ITA7dmFyIGllZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSxXbD17aDowLHM6MCxsOjB9LGpEPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gajMobix0LGUpe3JldHVybiBlPDAmJihlKz0xKSxlPjEmJihlLT0xKSxlPDEvNj9uKzYqKHQtbikqZTplPC41P3Q6ZTwyLzM/bis2Kih0LW4pKigyLzMtZSk6bn1mdW5jdGlvbiBpXyhuKXtyZXR1cm4gbjwuMDQwNDU/LjA3NzM5OTM4MDgqbjpNYXRoLnBvdyguOTQ3ODY3Mjk4NipuKy4wNTIxMzI3MDE0LDIuNCl9ZnVuY3Rpb24gRzMobil7cmV0dXJuIG48LjAwMzEzMDg/MTIuOTIqbjoxLjA1NSpNYXRoLnBvdyhuLC40MTY2NiktLjA1NX12YXIgYW49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7cmV0dXJuIHZvaWQgMD09PWkmJnZvaWQgMD09PXI/dGhpcy5zZXQoZSk6dGhpcy5zZXRSR0IoZSxpLHIpfXNldChlKXtyZXR1cm4gZSYmZS5pc0NvbG9yP3RoaXMuY29weShlKToibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5zZXRIZXgoZSk6InN0cmluZyI9PXR5cGVvZiBlJiZ0aGlzLnNldFN0eWxlKGUpLHRoaXN9c2V0U2NhbGFyKGUpe3JldHVybiB0aGlzLnI9ZSx0aGlzLmc9ZSx0aGlzLmI9ZSx0aGlzfXNldEhleChlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLHRoaXMucj0oZT4+MTYmMjU1KS8yNTUsdGhpcy5nPShlPj44JjI1NSkvMjU1LHRoaXMuYj0oMjU1JmUpLzI1NSx0aGlzfXNldFJHQihlLGkscil7cmV0dXJuIHRoaXMucj1lLHRoaXMuZz1pLHRoaXMuYj1yLHRoaXN9c2V0SFNMKGUsaSxyKXtpZihlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuKG4lMSsxKSUxfShlKSxpPVhhKGksMCwxKSxyPVhhKHIsMCwxKSwwPT09aSl0aGlzLnI9dGhpcy5nPXRoaXMuYj1yO2Vsc2V7bGV0IG89cjw9LjU/ciooMStpKTpyK2ktcippLGE9MipyLW87dGhpcy5yPWozKGEsbyxlKzEvMyksdGhpcy5nPWozKGEsbyxlKSx0aGlzLmI9ajMoYSxvLGUtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZShlKXtmdW5jdGlvbiBpKG8pe3ZvaWQgMCE9PW8mJnBhcnNlRmxvYXQobyk8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrZSsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgcjtpZihyPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKGUpKXtsZXQgbyxzPXJbMl07c3dpdGNoKHJbMV0pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKG89L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhzKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChvWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQob1syXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KG9bM10sMTApKS8yNTUsaShvWzRdKSx0aGlzO2lmKG89L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhzKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChvWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQob1syXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KG9bM10sMTApKS8xMDAsaShvWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKG89L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMocykpe2xldCBsPXBhcnNlRmxvYXQob1sxXSkvMzYwLGM9cGFyc2VJbnQob1syXSwxMCkvMTAwLGQ9cGFyc2VJbnQob1szXSwxMCkvMTAwO3JldHVybiBpKG9bNF0pLHRoaXMuc2V0SFNMKGwsYyxkKX19fWVsc2UgaWYocj0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWMoZSkpe2xldCBvPXJbMV0sYT1vLmxlbmd0aDtpZigzPT09YSlyZXR1cm4gdGhpcy5yPXBhcnNlSW50KG8uY2hhckF0KDApK28uY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KG8uY2hhckF0KDEpK28uY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KG8uY2hhckF0KDIpK28uY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZig2PT09YSlyZXR1cm4gdGhpcy5yPXBhcnNlSW50KG8uY2hhckF0KDApK28uY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KG8uY2hhckF0KDIpK28uY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KG8uY2hhckF0KDQpK28uY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gZSYmZS5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZShlKTp0aGlzfXNldENvbG9yTmFtZShlKXtsZXQgaT1pZWVbZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gdm9pZCAwIT09aT90aGlzLnNldEhleChpKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weShlKXtyZXR1cm4gdGhpcy5yPWUucix0aGlzLmc9ZS5nLHRoaXMuYj1lLmIsdGhpc31jb3B5U1JHQlRvTGluZWFyKGUpe3JldHVybiB0aGlzLnI9aV8oZS5yKSx0aGlzLmc9aV8oZS5nKSx0aGlzLmI9aV8oZS5iKSx0aGlzfWNvcHlMaW5lYXJUb1NSR0IoZSl7cmV0dXJuIHRoaXMucj1HMyhlLnIpLHRoaXMuZz1HMyhlLmcpLHRoaXMuYj1HMyhlLmIpLHRoaXN9Y29udmVydFNSR0JUb0xpbmVhcigpe3JldHVybiB0aGlzLmNvcHlTUkdCVG9MaW5lYXIodGhpcyksdGhpc31jb252ZXJ0TGluZWFyVG9TUkdCKCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvU1JHQih0aGlzKSx0aGlzfWdldEhleCgpe3JldHVybiAyNTUqdGhpcy5yPDwxNl4yNTUqdGhpcy5nPDw4XjI1NSp0aGlzLmI8PDB9Z2V0SGV4U3RyaW5nKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9Z2V0SFNMKGUpe2xldCBsLGMsaT10aGlzLnIscj10aGlzLmcsbz10aGlzLmIsYT1NYXRoLm1heChpLHIsbykscz1NYXRoLm1pbihpLHIsbyksZD0ocythKS8yO2lmKHM9PT1hKWw9MCxjPTA7ZWxzZXtsZXQgdT1hLXM7c3dpdGNoKGM9ZDw9LjU/dS8oYStzKTp1LygyLWEtcyksYSl7Y2FzZSBpOmw9KHItbykvdSsocjxvPzY6MCk7YnJlYWs7Y2FzZSByOmw9KG8taSkvdSsyO2JyZWFrO2Nhc2UgbzpsPShpLXIpL3UrNH1sLz02fXJldHVybiBlLmg9bCxlLnM9YyxlLmw9ZCxlfWdldFN0eWxlKCl7cmV0dXJuInJnYigiKygyNTUqdGhpcy5yfDApKyIsIisoMjU1KnRoaXMuZ3wwKSsiLCIrKDI1NSp0aGlzLmJ8MCkrIikifW9mZnNldEhTTChlLGkscil7cmV0dXJuIHRoaXMuZ2V0SFNMKFdsKSxXbC5oKz1lLFdsLnMrPWksV2wubCs9cix0aGlzLnNldEhTTChXbC5oLFdsLnMsV2wubCksdGhpc31hZGQoZSl7cmV0dXJuIHRoaXMucis9ZS5yLHRoaXMuZys9ZS5nLHRoaXMuYis9ZS5iLHRoaXN9YWRkQ29sb3JzKGUsaSl7cmV0dXJuIHRoaXMucj1lLnIraS5yLHRoaXMuZz1lLmcraS5nLHRoaXMuYj1lLmIraS5iLHRoaXN9YWRkU2NhbGFyKGUpe3JldHVybiB0aGlzLnIrPWUsdGhpcy5nKz1lLHRoaXMuYis9ZSx0aGlzfXN1YihlKXtyZXR1cm4gdGhpcy5yPU1hdGgubWF4KDAsdGhpcy5yLWUuciksdGhpcy5nPU1hdGgubWF4KDAsdGhpcy5nLWUuZyksdGhpcy5iPU1hdGgubWF4KDAsdGhpcy5iLWUuYiksdGhpc31tdWx0aXBseShlKXtyZXR1cm4gdGhpcy5yKj1lLnIsdGhpcy5nKj1lLmcsdGhpcy5iKj1lLmIsdGhpc31tdWx0aXBseVNjYWxhcihlKXtyZXR1cm4gdGhpcy5yKj1lLHRoaXMuZyo9ZSx0aGlzLmIqPWUsdGhpc31sZXJwKGUsaSl7cmV0dXJuIHRoaXMucis9KGUuci10aGlzLnIpKmksdGhpcy5nKz0oZS5nLXRoaXMuZykqaSx0aGlzLmIrPShlLmItdGhpcy5iKSppLHRoaXN9bGVycENvbG9ycyhlLGkscil7cmV0dXJuIHRoaXMucj1lLnIrKGkuci1lLnIpKnIsdGhpcy5nPWUuZysoaS5nLWUuZykqcix0aGlzLmI9ZS5iKyhpLmItZS5iKSpyLHRoaXN9bGVycEhTTChlLGkpe3RoaXMuZ2V0SFNMKFdsKSxlLmdldEhTTChqRCk7bGV0IHI9VTMoV2wuaCxqRC5oLGkpLG89VTMoV2wucyxqRC5zLGkpLGE9VTMoV2wubCxqRC5sLGkpO3JldHVybiB0aGlzLnNldEhTTChyLG8sYSksdGhpc31lcXVhbHMoZSl7cmV0dXJuIGUucj09PXRoaXMuciYmZS5nPT09dGhpcy5nJiZlLmI9PT10aGlzLmJ9ZnJvbUFycmF5KGUsaT0wKXtyZXR1cm4gdGhpcy5yPWVbaV0sdGhpcy5nPWVbaSsxXSx0aGlzLmI9ZVtpKzJdLHRoaXN9dG9BcnJheShlPVtdLGk9MCl7cmV0dXJuIGVbaV09dGhpcy5yLGVbaSsxXT10aGlzLmcsZVtpKzJdPXRoaXMuYixlfWZyb21CdWZmZXJBdHRyaWJ1dGUoZSxpKXtyZXR1cm4gdGhpcy5yPWUuZ2V0WChpKSx0aGlzLmc9ZS5nZXRZKGkpLHRoaXMuYj1lLmdldFooaSksITA9PT1lLm5vcm1hbGl6ZWQmJih0aGlzLnIvPTI1NSx0aGlzLmcvPTI1NSx0aGlzLmIvPTI1NSksdGhpc310b0pTT04oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19cmV0dXJuIG4uTkFNRVM9aWVlLG59KSgpO2FuLnByb3RvdHlwZS5pc0NvbG9yPSEwLGFuLnByb3RvdHlwZS5yPTEsYW4ucHJvdG90eXBlLmc9MSxhbi5wcm90b3R5cGUuYj0xO3ZhciBrMCxqZD1jbGFzc3tzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYyl8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudD4idSIpcmV0dXJuIHQuc3JjO2xldCBlO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCllPXQ7ZWxzZXt2b2lkIDA9PT1rMCYmKGswPUR4KCJjYW52YXMiKSksazAud2lkdGg9dC53aWR0aCxrMC5oZWlnaHQ9dC5oZWlnaHQ7bGV0IGk9azAuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP2kucHV0SW1hZ2VEYXRhKHQsMCwwKTppLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlPWswfXJldHVybiBlLndpZHRoPjIwNDh8fGUuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxlLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTplLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IGU9RHgoImNhbnZhcyIpO2Uud2lkdGg9dC53aWR0aCxlLmhlaWdodD10LmhlaWdodDtsZXQgaT1lLmdldENvbnRleHQoIjJkIik7aS5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCk7bGV0IHI9aS5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG89ci5kYXRhO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKW9bYV09MjU1KmlfKG9bYV0vMjU1KTtyZXR1cm4gaS5wdXRJbWFnZURhdGEociwwLDApLGV9aWYodC5kYXRhKXtsZXQgZT10LmRhdGEuc2xpY2UoMCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspZVtpXT1lIGluc3RhbmNlb2YgVWludDhBcnJheXx8ZSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P01hdGguZmxvb3IoMjU1KmlfKGVbaV0vMjU1KSk6aV8oZVtpXSk7cmV0dXJue2RhdGE6ZSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLiIpLHR9fSx0UmU9MCx1bz1jbGFzcyBleHRlbmRzIFVke2NvbnN0cnVjdG9yKHQ9dW8uREVGQVVMVF9JTUFHRSxlPXVvLkRFRkFVTFRfTUFQUElORyxpPWdzLHI9Z3Msbz1yYSxhPWVBLHM9YmEsbD12cCxjPTEsZD1NcCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTp0UmUrK30pLHRoaXMudXVpZD1RbCgpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1lLHRoaXMud3JhcFM9aSx0aGlzLndyYXBUPXIsdGhpcy5tYWdGaWx0ZXI9byx0aGlzLm1pbkZpbHRlcj1hLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PXMsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyAkZSgwLDApLHRoaXMucmVwZWF0PW5ldyAkZSgxLDEpLHRoaXMuY2VudGVyPW5ldyAkZSgwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IHZvLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz1kLHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaW1hZ2U9dC5pbWFnZSx0aGlzLm1pcG1hcHM9dC5taXBtYXBzLnNsaWNlKDApLHRoaXMubWFwcGluZz10Lm1hcHBpbmcsdGhpcy53cmFwUz10LndyYXBTLHRoaXMud3JhcFQ9dC53cmFwVCx0aGlzLm1hZ0ZpbHRlcj10Lm1hZ0ZpbHRlcix0aGlzLm1pbkZpbHRlcj10Lm1pbkZpbHRlcix0aGlzLmFuaXNvdHJvcHk9dC5hbmlzb3Ryb3B5LHRoaXMuZm9ybWF0PXQuZm9ybWF0LHRoaXMuaW50ZXJuYWxGb3JtYXQ9dC5pbnRlcm5hbEZvcm1hdCx0aGlzLnR5cGU9dC50eXBlLHRoaXMub2Zmc2V0LmNvcHkodC5vZmZzZXQpLHRoaXMucmVwZWF0LmNvcHkodC5yZXBlYXQpLHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPXQuZ2VuZXJhdGVNaXBtYXBzLHRoaXMucHJlbXVsdGlwbHlBbHBoYT10LnByZW11bHRpcGx5QWxwaGEsdGhpcy5mbGlwWT10LmZsaXBZLHRoaXMudW5wYWNrQWxpZ25tZW50PXQudW5wYWNrQWxpZ25tZW50LHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9dG9KU09OKHQpe2xldCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdDtpZighZSYmdm9pZCAwIT09dC50ZXh0dXJlc1t0aGlzLnV1aWRdKXJldHVybiB0LnRleHR1cmVzW3RoaXMudXVpZF07bGV0IGk9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJUZXh0dXJlIixnZW5lcmF0b3I6IlRleHR1cmUudG9KU09OIn0sdXVpZDp0aGlzLnV1aWQsbmFtZTp0aGlzLm5hbWUsbWFwcGluZzp0aGlzLm1hcHBpbmcscmVwZWF0Olt0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnldLG9mZnNldDpbdGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55XSxjZW50ZXI6W3RoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueV0scm90YXRpb246dGhpcy5yb3RhdGlvbix3cmFwOlt0aGlzLndyYXBTLHRoaXMud3JhcFRdLGZvcm1hdDp0aGlzLmZvcm1hdCx0eXBlOnRoaXMudHlwZSxlbmNvZGluZzp0aGlzLmVuY29kaW5nLG1pbkZpbHRlcjp0aGlzLm1pbkZpbHRlcixtYWdGaWx0ZXI6dGhpcy5tYWdGaWx0ZXIsYW5pc290cm9weTp0aGlzLmFuaXNvdHJvcHksZmxpcFk6dGhpcy5mbGlwWSxwcmVtdWx0aXBseUFscGhhOnRoaXMucHJlbXVsdGlwbHlBbHBoYSx1bnBhY2tBbGlnbm1lbnQ6dGhpcy51bnBhY2tBbGlnbm1lbnR9O2lmKHZvaWQgMCE9PXRoaXMuaW1hZ2Upe2xldCByPXRoaXMuaW1hZ2U7aWYodm9pZCAwPT09ci51dWlkJiYoci51dWlkPVFsKCkpLCFlJiZ2b2lkIDA9PT10LmltYWdlc1tyLnV1aWRdKXtsZXQgbztpZihBcnJheS5pc0FycmF5KHIpKXtvPVtdO2ZvcihsZXQgYT0wLHM9ci5sZW5ndGg7YTxzO2ErKylvLnB1c2goVzMoclthXS5pc0RhdGFUZXh0dXJlP3JbYV0uaW1hZ2U6clthXSkpfWVsc2Ugbz1XMyhyKTt0LmltYWdlc1tyLnV1aWRdPXt1dWlkOnIudXVpZCx1cmw6b319aS5pbWFnZT1yLnV1aWR9cmV0dXJuInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxlfHwodC50ZXh0dXJlc1t0aGlzLnV1aWRdPWkpLGl9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX10cmFuc2Zvcm1Vdih0KXtpZigzMDAhPT10aGlzLm1hcHBpbmcpcmV0dXJuIHQ7aWYodC5hcHBseU1hdHJpeDModGhpcy5tYXRyaXgpLHQueDwwfHx0Lng+MSlzd2l0Y2godGhpcy53cmFwUyl7Y2FzZSBNQjp0Lng9dC54LU1hdGguZmxvb3IodC54KTticmVhaztjYXNlIGdzOnQueD10Lng8MD8wOjE7YnJlYWs7Y2FzZSB3Qjp0Lng9MT09PU1hdGguYWJzKE1hdGguZmxvb3IodC54KSUyKT9NYXRoLmNlaWwodC54KS10Lng6dC54LU1hdGguZmxvb3IodC54KX1pZih0Lnk8MHx8dC55PjEpc3dpdGNoKHRoaXMud3JhcFQpe2Nhc2UgTUI6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWs7Y2FzZSBnczp0Lnk9dC55PDA/MDoxO2JyZWFrO2Nhc2Ugd0I6dC55PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik/TWF0aC5jZWlsKHQueSktdC55OnQueS1NYXRoLmZsb29yKHQueSl9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fTtmdW5jdGlvbiBXMyhuKXtyZXR1cm4gdHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQ8InUiJiZuIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PCJ1IiYmbiBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXA8InUiJiZuIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXA/amQuZ2V0RGF0YVVSTChuKTpuLmRhdGE/e2RhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobi5kYXRhKSx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCx0eXBlOm4uZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfXVvLkRFRkFVTFRfSU1BR0U9dm9pZCAwLHVvLkRFRkFVTFRfTUFQUElORz0zMDAsdW8ucHJvdG90eXBlLmlzVGV4dHVyZT0hMDt2YXIgS2k9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cn1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy56fXNldCB3aWR0aCh0KXt0aGlzLno9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMud31zZXQgaGVpZ2h0KHQpe3RoaXMudz10fXNldCh0LGUsaSxyKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpcy53PXIsdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXMudz10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Vyh0KXtyZXR1cm4gdGhpcy53PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7Y2FzZSAzOnRoaXMudz1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtjYXNlIDM6cmV0dXJuIHRoaXMudztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueix0aGlzLncpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXMudz12b2lkIDAhPT10Lnc/dC53OjEsdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzLncrPXQudyx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXMudys9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpcy53PXQudytlLncsdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpcy53Kz10LncqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMudy09dC53LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpcy53LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzLnc9dC53LWUudyx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzLncqPXQudyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzLncqPXQsdGhpc31hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LG89dGhpcy53LGE9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWFbMF0qZSthWzRdKmkrYVs4XSpyK2FbMTJdKm8sdGhpcy55PWFbMV0qZSthWzVdKmkrYVs5XSpyK2FbMTNdKm8sdGhpcy56PWFbMl0qZSthWzZdKmkrYVsxMF0qcithWzE0XSpvLHRoaXMudz1hWzNdKmUrYVs3XSppK2FbMTFdKnIrYVsxNV0qbyx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfXNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHQpe3RoaXMudz0yKk1hdGguYWNvcyh0LncpO2xldCBlPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiBlPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9lLHRoaXMueT10LnkvZSx0aGlzLno9dC56L2UpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlLGkscixvLGw9dC5lbGVtZW50cyxjPWxbMF0sZD1sWzRdLHU9bFs4XSxwPWxbMV0sZj1sWzVdLG09bFs5XSx5PWxbMl0sTT1sWzZdLHY9bFsxMF07aWYoTWF0aC5hYnMoZC1wKTwuMDEmJk1hdGguYWJzKHUteSk8LjAxJiZNYXRoLmFicyhtLU0pPC4wMSl7aWYoTWF0aC5hYnMoZCtwKTwuMSYmTWF0aC5hYnModSt5KTwuMSYmTWF0aC5hYnMobStNKTwuMSYmTWF0aC5hYnMoYytmK3YtMyk8LjEpcmV0dXJuIHRoaXMuc2V0KDEsMCwwLDApLHRoaXM7ZT1NYXRoLlBJO2xldCBSPShjKzEpLzIsQT0oZisxKS8yLEg9KHYrMSkvMix0ZT0oZCtwKS80LEs9KHUreSkvNCxDZT0obStNKS80O3JldHVybiBSPkEmJlI+SD9SPC4wMT8oaT0wLHI9LjcwNzEwNjc4MSxvPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChSKSxyPXRlL2ksbz1LL2kpOkE+SD9BPC4wMT8oaT0uNzA3MTA2NzgxLHI9MCxvPS43MDcxMDY3ODEpOihyPU1hdGguc3FydChBKSxpPXRlL3Isbz1DZS9yKTpIPC4wMT8oaT0uNzA3MTA2NzgxLHI9LjcwNzEwNjc4MSxvPTApOihvPU1hdGguc3FydChIKSxpPUsvbyxyPUNlL28pLHRoaXMuc2V0KGkscixvLGUpLHRoaXN9bGV0IHg9TWF0aC5zcXJ0KChNLW0pKihNLW0pKyh1LXkpKih1LXkpKyhwLWQpKihwLWQpKTtyZXR1cm4gTWF0aC5hYnMoeCk8LjAwMSYmKHg9MSksdGhpcy54PShNLW0pL3gsdGhpcy55PSh1LXkpL3gsdGhpcy56PShwLWQpL3gsdGhpcy53PU1hdGguYWNvcygoYytmK3YtMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihlLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihlLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihlLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihlLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpcy53PXRoaXMudzwwP01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzLnc9LXRoaXMudyx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0LnordGhpcy53KnQud31sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopK01hdGguYWJzKHRoaXMudyl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXMudys9KHQudy10aGlzLncpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzLno9dC56KyhlLnotdC56KSppLHRoaXMudz10LncrKGUudy10LncpKmksdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnomJnQudz09PXRoaXMud31mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpcy53PXRbZSszXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHRbZSsyXT10aGlzLnosdFtlKzNdPXRoaXMudyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiB2b2lkIDAhPT1pJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzLnc9dC5nZXRXKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXMudz1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnoseWllbGQgdGhpcy53fX07S2kucHJvdG90eXBlLmlzVmVjdG9yND0hMDt2YXIgUWE9Y2xhc3MgZXh0ZW5kcyBVZHtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIoKSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmRlcHRoPTEsdGhpcy5zY2lzc29yPW5ldyBLaSgwLDAsdCxlKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IEtpKDAsMCx0LGUpLHRoaXMudGV4dHVyZT1uZXcgdW8odm9pZCAwLGkubWFwcGluZyxpLndyYXBTLGkud3JhcFQsaS5tYWdGaWx0ZXIsaS5taW5GaWx0ZXIsaS5mb3JtYXQsaS50eXBlLGkuYW5pc290cm9weSxpLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDoxfSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXZvaWQgMCE9PWkuZ2VuZXJhdGVNaXBtYXBzJiZpLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUuaW50ZXJuYWxGb3JtYXQ9dm9pZCAwIT09aS5pbnRlcm5hbEZvcm1hdD9pLmludGVybmFsRm9ybWF0Om51bGwsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj12b2lkIDAhPT1pLm1pbkZpbHRlcj9pLm1pbkZpbHRlcjpyYSx0aGlzLmRlcHRoQnVmZmVyPXZvaWQgMD09PWkuZGVwdGhCdWZmZXJ8fGkuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXZvaWQgMCE9PWkuc3RlbmNpbEJ1ZmZlciYmaS5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXZvaWQgMCE9PWkuZGVwdGhUZXh0dXJlP2kuZGVwdGhUZXh0dXJlOm51bGx9c2V0VGV4dHVyZSh0KXt0LmltYWdlPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxkZXB0aDp0aGlzLmRlcHRofSx0aGlzLnRleHR1cmU9dH1zZXRTaXplKHQsZSxpPTEpeyh0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1lfHx0aGlzLmRlcHRoIT09aSkmJih0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmRlcHRoPWksdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1lLHRoaXMudGV4dHVyZS5pbWFnZS5kZXB0aD1pLHRoaXMuZGlzcG9zZSgpKSx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxlKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LGUpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5jb3B5KHQudmlld3BvcnQpLHRoaXMudGV4dHVyZT10LnRleHR1cmUuY2xvbmUoKSx0aGlzLnRleHR1cmUuaW1hZ2U9T2JqZWN0LmFzc2lnbih7fSx0LnRleHR1cmUuaW1hZ2UpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O1FhLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0PSEwLGNsYXNzIGV4dGVuZHMgUWF7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSk7bGV0IHI9dGhpcy50ZXh0dXJlO3RoaXMudGV4dHVyZT1bXTtmb3IobGV0IG89MDtvPGk7bysrKXRoaXMudGV4dHVyZVtvXT1yLmNsb25lKCl9c2V0U2l6ZSh0LGUsaT0xKXtpZih0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1lfHx0aGlzLmRlcHRoIT09aSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD1pO2ZvcihsZXQgcj0wLG89dGhpcy50ZXh0dXJlLmxlbmd0aDtyPG87cisrKXRoaXMudGV4dHVyZVtyXS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZVtyXS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuZGVwdGg9aTt0aGlzLmRpc3Bvc2UoKX1yZXR1cm4gdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKSx0aGlzfWNvcHkodCl7dGhpcy5kaXNwb3NlKCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5zY2lzc29yLnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpcy50ZXh0dXJlLmxlbmd0aD0wO2ZvcihsZXQgZT0wLGk9dC50ZXh0dXJlLmxlbmd0aDtlPGk7ZSsrKXRoaXMudGV4dHVyZVtlXT10LnRleHR1cmVbZV0uY2xvbmUoKTtyZXR1cm4gdGhpc319LnByb3RvdHlwZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPSEwO3ZhciBJeD1jbGFzcyBleHRlbmRzIFFhe2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcih0LGUsaSksdGhpcy5zYW1wbGVzPTQsdGhpcy5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weT12b2lkIDA9PT1pLmlnbm9yZURlcHRofHxpLmlnbm9yZURlcHRoLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPXZvaWQgMCE9PWkudXNlUmVuZGVyVG9UZXh0dXJlJiZpLnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj0hMT09PXRoaXMudXNlUmVuZGVyVG9UZXh0dXJlfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2FtcGxlcz10LnNhbXBsZXMsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dC51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9dC51c2VSZW5kZXJidWZmZXIsdGhpc319O0l4LnByb3RvdHlwZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ITA7dmFyIGFhPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9MSl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fdz1yfXN0YXRpYyBzbGVycCh0LGUsaSxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiBTdGF0aWMgLnNsZXJwKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApIGluc3RlYWQuIiksaS5zbGVycFF1YXRlcm5pb25zKHQsZSxyKX1zdGF0aWMgc2xlcnBGbGF0KHQsZSxpLHIsbyxhLHMpe2xldCBsPWlbciswXSxjPWlbcisxXSxkPWlbcisyXSx1PWlbciszXSxwPW9bYSswXSxmPW9bYSsxXSxtPW9bYSsyXSx5PW9bYSszXTtpZigwPT09cylyZXR1cm4gdFtlKzBdPWwsdFtlKzFdPWMsdFtlKzJdPWQsdm9pZCh0W2UrM109dSk7aWYoMT09PXMpcmV0dXJuIHRbZSswXT1wLHRbZSsxXT1mLHRbZSsyXT1tLHZvaWQodFtlKzNdPXkpO2lmKHUhPT15fHxsIT09cHx8YyE9PWZ8fGQhPT1tKXtsZXQgTT0xLXMsdj1sKnArYypmK2QqbSt1KnkseD12Pj0wPzE6LTEsUj0xLXYqdjtpZihSPk51bWJlci5FUFNJTE9OKXtsZXQgSD1NYXRoLnNxcnQoUiksdGU9TWF0aC5hdGFuMihILHYqeCk7TT1NYXRoLnNpbihNKnRlKS9ILHM9TWF0aC5zaW4ocyp0ZSkvSH1sZXQgQT1zKng7aWYobD1sKk0rcCpBLGM9YypNK2YqQSxkPWQqTSttKkEsdT11Kk0reSpBLE09PT0xLXMpe2xldCBIPTEvTWF0aC5zcXJ0KGwqbCtjKmMrZCpkK3UqdSk7bCo9SCxjKj1ILGQqPUgsdSo9SH19dFtlXT1sLHRbZSsxXT1jLHRbZSsyXT1kLHRbZSszXT11fXN0YXRpYyBtdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LGUsaSxyLG8sYSl7bGV0IHM9aVtyXSxsPWlbcisxXSxjPWlbcisyXSxkPWlbciszXSx1PW9bYV0scD1vW2ErMV0sZj1vW2ErMl0sbT1vW2ErM107cmV0dXJuIHRbZV09cyptK2QqdStsKmYtYypwLHRbZSsxXT1sKm0rZCpwK2MqdS1zKmYsdFtlKzJdPWMqbStkKmYrcypwLWwqdSx0W2UrM109ZCptLXMqdS1sKnAtYypmLHR9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHcoKXtyZXR1cm4gdGhpcy5fd31zZXQgdyh0KXt0aGlzLl93PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fdz1yLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC54LHRoaXMuX3k9dC55LHRoaXMuX3o9dC56LHRoaXMuX3c9dC53LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21FdWxlcih0LGUpe2lmKCF0fHwhdC5pc0V1bGVyKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IGk9dC5feCxyPXQuX3ksbz10Ll96LGE9dC5fb3JkZXIscz1NYXRoLmNvcyxsPU1hdGguc2luLGM9cyhpLzIpLGQ9cyhyLzIpLHU9cyhvLzIpLHA9bChpLzIpLGY9bChyLzIpLG09bChvLzIpO3N3aXRjaChhKXtjYXNlIlhZWiI6dGhpcy5feD1wKmQqdStjKmYqbSx0aGlzLl95PWMqZip1LXAqZCptLHRoaXMuX3o9YypkKm0rcCpmKnUsdGhpcy5fdz1jKmQqdS1wKmYqbTticmVhaztjYXNlIllYWiI6dGhpcy5feD1wKmQqdStjKmYqbSx0aGlzLl95PWMqZip1LXAqZCptLHRoaXMuX3o9YypkKm0tcCpmKnUsdGhpcy5fdz1jKmQqdStwKmYqbTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1wKmQqdS1jKmYqbSx0aGlzLl95PWMqZip1K3AqZCptLHRoaXMuX3o9YypkKm0rcCpmKnUsdGhpcy5fdz1jKmQqdS1wKmYqbTticmVhaztjYXNlIlpZWCI6dGhpcy5feD1wKmQqdS1jKmYqbSx0aGlzLl95PWMqZip1K3AqZCptLHRoaXMuX3o9YypkKm0tcCpmKnUsdGhpcy5fdz1jKmQqdStwKmYqbTticmVhaztjYXNlIllaWCI6dGhpcy5feD1wKmQqdStjKmYqbSx0aGlzLl95PWMqZip1K3AqZCptLHRoaXMuX3o9YypkKm0tcCpmKnUsdGhpcy5fdz1jKmQqdS1wKmYqbTticmVhaztjYXNlIlhaWSI6dGhpcy5feD1wKmQqdS1jKmYqbSx0aGlzLl95PWMqZip1LXAqZCptLHRoaXMuX3o9YypkKm0rcCpmKnUsdGhpcy5fdz1jKmQqdStwKmYqbTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrYSl9cmV0dXJuITEhPT1lJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tQXhpc0FuZ2xlKHQsZSl7bGV0IGk9ZS8yLHI9TWF0aC5zaW4oaSk7cmV0dXJuIHRoaXMuX3g9dC54KnIsdGhpcy5feT10Lnkqcix0aGlzLl96PXQueipyLHRoaXMuX3c9TWF0aC5jb3MoaSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlPXQuZWxlbWVudHMsaT1lWzBdLHI9ZVs0XSxvPWVbOF0sYT1lWzFdLHM9ZVs1XSxsPWVbOV0sYz1lWzJdLGQ9ZVs2XSx1PWVbMTBdLHA9aStzK3U7aWYocD4wKXtsZXQgZj0uNS9NYXRoLnNxcnQocCsxKTt0aGlzLl93PS4yNS9mLHRoaXMuX3g9KGQtbCkqZix0aGlzLl95PShvLWMpKmYsdGhpcy5fej0oYS1yKSpmfWVsc2UgaWYoaT5zJiZpPnUpe2xldCBmPTIqTWF0aC5zcXJ0KDEraS1zLXUpO3RoaXMuX3c9KGQtbCkvZix0aGlzLl94PS4yNSpmLHRoaXMuX3k9KHIrYSkvZix0aGlzLl96PShvK2MpL2Z9ZWxzZSBpZihzPnUpe2xldCBmPTIqTWF0aC5zcXJ0KDErcy1pLXUpO3RoaXMuX3c9KG8tYykvZix0aGlzLl94PShyK2EpL2YsdGhpcy5feT0uMjUqZix0aGlzLl96PShsK2QpL2Z9ZWxzZXtsZXQgZj0yKk1hdGguc3FydCgxK3UtaS1zKTt0aGlzLl93PShhLXIpL2YsdGhpcy5feD0obytjKS9mLHRoaXMuX3k9KGwrZCkvZix0aGlzLl96PS4yNSpmfXJldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tVW5pdFZlY3RvcnModCxlKXtsZXQgaT10LmRvdChlKSsxO3JldHVybiBpPE51bWJlci5FUFNJTE9OPyhpPTAsTWF0aC5hYnModC54KT5NYXRoLmFicyh0LnopPyh0aGlzLl94PS10LnksdGhpcy5feT10LngsdGhpcy5fej0wLHRoaXMuX3c9aSk6KHRoaXMuX3g9MCx0aGlzLl95PS10LnosdGhpcy5fej10LnksdGhpcy5fdz1pKSk6KHRoaXMuX3g9dC55KmUuei10LnoqZS55LHRoaXMuX3k9dC56KmUueC10LngqZS56LHRoaXMuX3o9dC54KmUueS10LnkqZS54LHRoaXMuX3c9aSksdGhpcy5ub3JtYWxpemUoKX1hbmdsZVRvKHQpe3JldHVybiAyKk1hdGguYWNvcyhNYXRoLmFicyhYYSh0aGlzLmRvdCh0KSwtMSwxKSkpfXJvdGF0ZVRvd2FyZHModCxlKXtsZXQgaT10aGlzLmFuZ2xlVG8odCk7aWYoMD09PWkpcmV0dXJuIHRoaXM7bGV0IHI9TWF0aC5taW4oMSxlL2kpO3JldHVybiB0aGlzLnNsZXJwKHQsciksdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgwLDAsMCwxKX1pbnZlcnQoKXtyZXR1cm4gdGhpcy5jb25qdWdhdGUoKX1jb25qdWdhdGUoKXtyZXR1cm4gdGhpcy5feCo9LTEsdGhpcy5feSo9LTEsdGhpcy5feio9LTEsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLl94KnQuX3grdGhpcy5feSp0Ll95K3RoaXMuX3oqdC5feit0aGlzLl93KnQuX3d9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93KX1ub3JtYWxpemUoKXtsZXQgdD10aGlzLmxlbmd0aCgpO3JldHVybiAwPT09dD8odGhpcy5feD0wLHRoaXMuX3k9MCx0aGlzLl96PTAsdGhpcy5fdz0xKToodD0xL3QsdGhpcy5feD10aGlzLl94KnQsdGhpcy5feT10aGlzLl95KnQsdGhpcy5fej10aGlzLl96KnQsdGhpcy5fdz10aGlzLl93KnQpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlRdWF0ZXJuaW9ucyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsZSkpOnRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCx0aGlzKX1tdWx0aXBseVF1YXRlcm5pb25zKHQsZSl7bGV0IGk9dC5feCxyPXQuX3ksbz10Ll96LGE9dC5fdyxzPWUuX3gsbD1lLl95LGM9ZS5feixkPWUuX3c7cmV0dXJuIHRoaXMuX3g9aSpkK2EqcytyKmMtbypsLHRoaXMuX3k9cipkK2EqbCtvKnMtaSpjLHRoaXMuX3o9bypkK2EqYytpKmwtcipzLHRoaXMuX3c9YSpkLWkqcy1yKmwtbypjLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwKHQsZSl7aWYoMD09PWUpcmV0dXJuIHRoaXM7aWYoMT09PWUpcmV0dXJuIHRoaXMuY29weSh0KTtsZXQgaT10aGlzLl94LHI9dGhpcy5feSxvPXRoaXMuX3osYT10aGlzLl93LHM9YSp0Ll93K2kqdC5feCtyKnQuX3krbyp0Ll96O2lmKHM8MD8odGhpcy5fdz0tdC5fdyx0aGlzLl94PS10Ll94LHRoaXMuX3k9LXQuX3ksdGhpcy5fej0tdC5feixzPS1zKTp0aGlzLmNvcHkodCkscz49MSlyZXR1cm4gdGhpcy5fdz1hLHRoaXMuX3g9aSx0aGlzLl95PXIsdGhpcy5fej1vLHRoaXM7bGV0IGw9MS1zKnM7aWYobDw9TnVtYmVyLkVQU0lMT04pe2xldCBmPTEtZTtyZXR1cm4gdGhpcy5fdz1mKmErZSp0aGlzLl93LHRoaXMuX3g9ZippK2UqdGhpcy5feCx0aGlzLl95PWYqcitlKnRoaXMuX3ksdGhpcy5fej1mKm8rZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bGV0IGM9TWF0aC5zcXJ0KGwpLGQ9TWF0aC5hdGFuMihjLHMpLHU9TWF0aC5zaW4oKDEtZSkqZCkvYyxwPU1hdGguc2luKGUqZCkvYztyZXR1cm4gdGhpcy5fdz1hKnUrdGhpcy5fdypwLHRoaXMuX3g9aSp1K3RoaXMuX3gqcCx0aGlzLl95PXIqdSt0aGlzLl95KnAsdGhpcy5fej1vKnUrdGhpcy5feipwLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwUXVhdGVybmlvbnModCxlLGkpe3JldHVybiB0aGlzLmNvcHkodCkuc2xlcnAoZSxpKX1yYW5kb20oKXtsZXQgdD1NYXRoLnJhbmRvbSgpLGU9TWF0aC5zcXJ0KDEtdCksaT1NYXRoLnNxcnQodCkscj0yKk1hdGguUEkqTWF0aC5yYW5kb20oKSxvPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpO3JldHVybiB0aGlzLnNldChlKk1hdGguY29zKHIpLGkqTWF0aC5zaW4obyksaSpNYXRoLmNvcyhvKSxlKk1hdGguc2luKHIpKX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX3c9PT10aGlzLl93fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMuX3g9dFtlXSx0aGlzLl95PXRbZSsxXSx0aGlzLl96PXRbZSsyXSx0aGlzLl93PXRbZSszXSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl93LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLl94PXQuZ2V0WChlKSx0aGlzLl95PXQuZ2V0WShlKSx0aGlzLl96PXQuZ2V0WihlKSx0aGlzLl93PXQuZ2V0VyhlKSx0aGlzfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTthYS5wcm90b3R5cGUuaXNRdWF0ZXJuaW9uPSEwO3ZhciAkPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aX1zZXQodCxlLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyh0LGUpKToodGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcyl9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIiksdGhpcy5hcHBseVF1YXRlcm5pb24ocmVlLnNldEZyb21FdWxlcih0KSl9YXBwbHlBeGlzQW5nbGUodCxlKXtyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24ocmVlLnNldEZyb21BeGlzQW5nbGUodCxlKSl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1szXSppK29bNl0qcix0aGlzLnk9b1sxXSplK29bNF0qaStvWzddKnIsdGhpcy56PW9bMl0qZStvWzVdKmkrb1s4XSpyLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzLGE9MS8ob1szXSplK29bN10qaStvWzExXSpyK29bMTVdKTtyZXR1cm4gdGhpcy54PShvWzBdKmUrb1s0XSppK29bOF0qcitvWzEyXSkqYSx0aGlzLnk9KG9bMV0qZStvWzVdKmkrb1s5XSpyK29bMTNdKSphLHRoaXMuej0ob1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKSphLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQueCxhPXQueSxzPXQueixsPXQudyxjPWwqZSthKnItcyppLGQ9bCppK3MqZS1vKnIsdT1sKnIrbyppLWEqZSxwPS1vKmUtYSppLXMqcjtyZXR1cm4gdGhpcy54PWMqbCtwKi1vK2QqLXMtdSotYSx0aGlzLnk9ZCpsK3AqLWErdSotby1jKi1zLHRoaXMuej11KmwrcCotcytjKi1hLWQqLW8sdGhpc31wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkSW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeCl9dW5wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCl9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1s0XSppK29bOF0qcix0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIsdGhpcy56PW9bMl0qZStvWzZdKmkrb1sxMF0qcix0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzLno9dC56KyhlLnotdC56KSppLHRoaXN9Y3Jvc3ModCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKHQsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsdCl9Y3Jvc3NWZWN0b3JzKHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LGE9ZS54LHM9ZS55LGw9ZS56O3JldHVybiB0aGlzLng9cipsLW8qcyx0aGlzLnk9byphLWkqbCx0aGlzLno9aSpzLXIqYSx0aGlzfXByb2plY3RPblZlY3Rvcih0KXtsZXQgZT10Lmxlbmd0aFNxKCk7aWYoMD09PWUpcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtsZXQgaT10LmRvdCh0aGlzKS9lO3JldHVybiB0aGlzLmNvcHkodCkubXVsdGlwbHlTY2FsYXIoaSl9cHJvamVjdE9uUGxhbmUodCl7cmV0dXJuIHEzLmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKHEzKX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihxMy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKDIqdGhpcy5kb3QodCkpKX1hbmdsZVRvKHQpe2xldCBlPU1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqdC5sZW5ndGhTcSgpKTtpZigwPT09ZSlyZXR1cm4gTWF0aC5QSS8yO2xldCBpPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhYYShpLC0xLDEpKX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7bGV0IGU9dGhpcy54LXQueCxpPXRoaXMueS10Lnkscj10aGlzLnotdC56O3JldHVybiBlKmUraSppK3Iqcn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KStNYXRoLmFicyh0aGlzLnotdC56KX1zZXRGcm9tU3BoZXJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHModC5yYWRpdXMsdC5waGksdC50aGV0YSl9c2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LGUsaSl7bGV0IHI9TWF0aC5zaW4oZSkqdDtyZXR1cm4gdGhpcy54PXIqTWF0aC5zaW4oaSksdGhpcy55PU1hdGguY29zKGUpKnQsdGhpcy56PXIqTWF0aC5jb3MoaSksdGhpc31zZXRGcm9tQ3lsaW5kcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQucmFkaXVzLHQudGhldGEsdC55KX1zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModCxlLGkpe3JldHVybiB0aGlzLng9dCpNYXRoLnNpbihlKSx0aGlzLnk9aSx0aGlzLno9dCpNYXRoLmNvcyhlKSx0aGlzfXNldEZyb21NYXRyaXhQb3NpdGlvbih0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9ZVsxMl0sdGhpcy55PWVbMTNdLHRoaXMuej1lWzE0XSx0aGlzfXNldEZyb21NYXRyaXhTY2FsZSh0KXtsZXQgZT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1pLHRoaXMuej1yLHRoaXN9c2V0RnJvbU1hdHJpeENvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLDQqZSl9c2V0RnJvbU1hdHJpeDNDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cywzKmUpfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXN9cmFuZG9tRGlyZWN0aW9uKCl7bGV0IHQ9MiooTWF0aC5yYW5kb20oKS0uNSksZT1NYXRoLnJhbmRvbSgpKk1hdGguUEkqMixpPU1hdGguc3FydCgxLXQqKjIpO3JldHVybiB0aGlzLng9aSpNYXRoLmNvcyhlKSx0aGlzLnk9aSpNYXRoLnNpbihlKSx0aGlzLno9dCx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56fX07JC5wcm90b3R5cGUuaXNWZWN0b3IzPSEwO3ZhciBxMz1uZXcgJCxyZWU9bmV3IGFhLF9zPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQoMS8wLDEvMCwxLzApLGU9bmV3ICQoLTEvMCwtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAsbz0tMS8wLGE9LTEvMCxzPS0xLzA7Zm9yKGxldCBsPTAsYz10Lmxlbmd0aDtsPGM7bCs9Myl7bGV0IGQ9dFtsXSx1PXRbbCsxXSxwPXRbbCsyXTtkPGUmJihlPWQpLHU8aSYmKGk9dSkscDxyJiYocj1wKSxkPm8mJihvPWQpLHU+YSYmKGE9dSkscD5zJiYocz1wKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQobyxhLHMpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAsbz0tMS8wLGE9LTEvMCxzPS0xLzA7Zm9yKGxldCBsPTAsYz10LmNvdW50O2w8YztsKyspe2xldCBkPXQuZ2V0WChsKSx1PXQuZ2V0WShsKSxwPXQuZ2V0WihsKTtkPGUmJihlPWQpLHU8aSYmKGk9dSkscDxyJiYocj1wKSxkPm8mJihvPWQpLHU+YSYmKGE9dSkscD5zJiYocz1wKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQobyxhLHMpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtsZXQgaT15bS5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIoaSksdGhpcy5tYXguY29weSh0KS5hZGQoaSksdGhpc31zZXRGcm9tT2JqZWN0KHQsZT0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LGUpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQsZT0hMSl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7bGV0IGk9dC5nZW9tZXRyeTtpZih2b2lkIDAhPT1pKWlmKGUmJm51bGwhPWkuYXR0cmlidXRlcyYmdm9pZCAwIT09aS5hdHRyaWJ1dGVzLnBvc2l0aW9uKXtsZXQgbz1pLmF0dHJpYnV0ZXMucG9zaXRpb247Zm9yKGxldCBhPTAscz1vLmNvdW50O2E8czthKyspeW0uZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGEpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQoeW0pfWVsc2UgbnVsbD09PWkuYm91bmRpbmdCb3gmJmkuY29tcHV0ZUJvdW5kaW5nQm94KCksWTMuY29weShpLmJvdW5kaW5nQm94KSxZMy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy51bmlvbihZMyk7bGV0IHI9dC5jaGlsZHJlbjtmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspdGhpcy5leHBhbmRCeU9iamVjdChyW29dLGUpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIseW0pLHltLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCBlLGk7cmV0dXJuIHQubm9ybWFsLng+MD8oZT10Lm5vcm1hbC54KnRoaXMubWluLngsaT10Lm5vcm1hbC54KnRoaXMubWF4LngpOihlPXQubm9ybWFsLngqdGhpcy5tYXgueCxpPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhlKz10Lm5vcm1hbC55KnRoaXMubWluLnksaSs9dC5ub3JtYWwueSp0aGlzLm1heC55KTooZSs9dC5ub3JtYWwueSp0aGlzLm1heC55LGkrPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhlKz10Lm5vcm1hbC56KnRoaXMubWluLnosaSs9dC5ub3JtYWwueip0aGlzLm1heC56KTooZSs9dC5ub3JtYWwueip0aGlzLm1heC56LGkrPXQubm9ybWFsLnoqdGhpcy5taW4ueiksZTw9LXQuY29uc3RhbnQmJmk+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihkeCksR0Quc3ViVmVjdG9ycyh0aGlzLm1heCxkeCksUDAuc3ViVmVjdG9ycyh0LmEsZHgpLE8wLnN1YlZlY3RvcnModC5iLGR4KSxGMC5zdWJWZWN0b3JzKHQuYyxkeCksZHAuc3ViVmVjdG9ycyhPMCxQMCksdXAuc3ViVmVjdG9ycyhGMCxPMCksYm0uc3ViVmVjdG9ycyhQMCxGMCk7bGV0IGU9WzAsLWRwLnosZHAueSwwLC11cC56LHVwLnksMCwtYm0ueixibS55LGRwLnosMCwtZHAueCx1cC56LDAsLXVwLngsYm0ueiwwLC1ibS54LC1kcC55LGRwLngsMCwtdXAueSx1cC54LDAsLWJtLnksYm0ueCwwXTtyZXR1cm4hKCFYMyhlLFAwLE8wLEYwLEdEKXx8KGU9WzEsMCwwLDAsMSwwLDAsMCwxXSwhWDMoZSxQMCxPMCxGMCxHRCkpKSYmKFdELmNyb3NzVmVjdG9ycyhkcCx1cCksZT1bV0QueCxXRC55LFdELnpdLFgzKGUsUDAsTzAsRjAsR0QpKX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB5bS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz0uNSp0aGlzLmdldFNpemUoeW0pLmxlbmd0aCgpLHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKXx8KExkWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLExkWzFdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLExkWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLExkWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLExkWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLExkWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLExkWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLExkWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0RnJvbVBvaW50cyhMZCkpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07X3MucHJvdG90eXBlLmlzQm94Mz0hMDt2YXIgTGQ9W25ldyAkLG5ldyAkLG5ldyAkLG5ldyAkLG5ldyAkLG5ldyAkLG5ldyAkLG5ldyAkXSx5bT1uZXcgJCxZMz1uZXcgX3MsUDA9bmV3ICQsTzA9bmV3ICQsRjA9bmV3ICQsZHA9bmV3ICQsdXA9bmV3ICQsYm09bmV3ICQsZHg9bmV3ICQsR0Q9bmV3ICQsV0Q9bmV3ICQsdm09bmV3ICQ7ZnVuY3Rpb24gWDMobix0LGUsaSxyKXtmb3IobGV0IG89MCxhPW4ubGVuZ3RoLTM7bzw9YTtvKz0zKXt2bS5mcm9tQXJyYXkobixvKTtsZXQgcz1yLngqTWF0aC5hYnModm0ueCkrci55Kk1hdGguYWJzKHZtLnkpK3IueipNYXRoLmFicyh2bS56KSxsPXQuZG90KHZtKSxjPWUuZG90KHZtKSxkPWkuZG90KHZtKTtpZihNYXRoLm1heCgtTWF0aC5tYXgobCxjLGQpLE1hdGgubWluKGwsYyxkKSk+cylyZXR1cm4hMX1yZXR1cm4hMH12YXIgblJlPW5ldyBfcyxvZWU9bmV3ICQscUQ9bmV3ICQsUTM9bmV3ICQsd3A9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgJCxlPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9ZSx0aGlzfXNldEZyb21Qb2ludHModCxlKXtsZXQgaT10aGlzLmNlbnRlcjt2b2lkIDAhPT1lP2kuY29weShlKTpuUmUuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspcj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQodFtvXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQociksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1lKmV9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LGUpe2xldCBpPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiBlLmNvcHkodCksaT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKGUuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxlLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxlfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtRMy5zdWJWZWN0b3JzKHQsdGhpcy5jZW50ZXIpO2xldCBlPVEzLmxlbmd0aFNxKCk7aWYoZT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyl7bGV0IGk9TWF0aC5zcXJ0KGUpLHI9LjUqKGktdGhpcy5yYWRpdXMpO3RoaXMuY2VudGVyLmFkZChRMy5tdWx0aXBseVNjYWxhcihyL2kpKSx0aGlzLnJhZGl1cys9cn1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4hMD09PXRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik/cUQuc2V0KDAsMCwxKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyk6cUQuc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLmNlbnRlcikubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpLHRoaXMuZXhwYW5kQnlQb2ludChvZWUuY29weSh0LmNlbnRlcikuYWRkKHFEKSksdGhpcy5leHBhbmRCeVBvaW50KG9lZS5jb3B5KHQuY2VudGVyKS5zdWIocUQpKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19LE5kPW5ldyAkLFozPW5ldyAkLFlEPW5ldyAkLHBwPW5ldyAkLEszPW5ldyAkLFhEPW5ldyAkLEozPW5ldyAkLFNwPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCgwLDAsLTEpKXt0aGlzLm9yaWdpbj10LHRoaXMuZGlyZWN0aW9uPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodCksdGhpcy5kaXJlY3Rpb24uY29weShlKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodC5vcmlnaW4pLHRoaXMuZGlyZWN0aW9uLmNvcHkodC5kaXJlY3Rpb24pLHRoaXN9YXQodCxlKXtyZXR1cm4gZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5vcmlnaW4pfWxvb2tBdCh0KXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24uY29weSh0KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXN9cmVjYXN0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCxOZCkpLHRoaXN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2Uuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtsZXQgaT1lLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGk8MD9lLmNvcHkodGhpcy5vcmlnaW4pOmUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMub3JpZ2luKX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQpKX1kaXN0YW5jZVNxVG9Qb2ludCh0KXtsZXQgZT1OZC5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGU8MD90aGlzLm9yaWdpbi5kaXN0YW5jZVRvU3F1YXJlZCh0KTooTmQuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZSkuYWRkKHRoaXMub3JpZ2luKSxOZC5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LGUsaSxyKXtaMy5jb3B5KHQpLmFkZChlKS5tdWx0aXBseVNjYWxhciguNSksWUQuY29weShlKS5zdWIodCkubm9ybWFsaXplKCkscHAuY29weSh0aGlzLm9yaWdpbikuc3ViKFozKTtsZXQgdSxwLGYsbSxvPS41KnQuZGlzdGFuY2VUbyhlKSxhPS10aGlzLmRpcmVjdGlvbi5kb3QoWUQpLHM9cHAuZG90KHRoaXMuZGlyZWN0aW9uKSxsPS1wcC5kb3QoWUQpLGM9cHAubGVuZ3RoU3EoKSxkPU1hdGguYWJzKDEtYSphKTtpZihkPjApaWYodT1hKmwtcyxwPWEqcy1sLG09bypkLHU+PTApaWYocD49LW0paWYocDw9bSl7bGV0IHk9MS9kO3UqPXkscCo9eSxmPXUqKHUrYSpwKzIqcykrcCooYSp1K3ArMipsKStjfWVsc2UgcD1vLHU9TWF0aC5tYXgoMCwtKGEqcCtzKSksZj0tdSp1K3AqKHArMipsKStjO2Vsc2UgcD0tbyx1PU1hdGgubWF4KDAsLShhKnArcykpLGY9LXUqdStwKihwKzIqbCkrYztlbHNlIHA8PS1tPyh1PU1hdGgubWF4KDAsLSgtYSpvK3MpKSxwPXU+MD8tbzpNYXRoLm1pbihNYXRoLm1heCgtbywtbCksbyksZj0tdSp1K3AqKHArMipsKStjKTpwPD1tPyh1PTAscD1NYXRoLm1pbihNYXRoLm1heCgtbywtbCksbyksZj1wKihwKzIqbCkrYyk6KHU9TWF0aC5tYXgoMCwtKGEqbytzKSkscD11PjA/bzpNYXRoLm1pbihNYXRoLm1heCgtbywtbCksbyksZj0tdSp1K3AqKHArMipsKStjKTtlbHNlIHA9YT4wPy1vOm8sdT1NYXRoLm1heCgwLC0oYSpwK3MpKSxmPS11KnUrcCoocCsyKmwpK2M7cmV0dXJuIGkmJmkuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodSkuYWRkKHRoaXMub3JpZ2luKSxyJiZyLmNvcHkoWUQpLm11bHRpcGx5U2NhbGFyKHApLmFkZChaMyksZn1pbnRlcnNlY3RTcGhlcmUodCxlKXtOZC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtsZXQgaT1OZC5kb3QodGhpcy5kaXJlY3Rpb24pLHI9TmQuZG90KE5kKS1pKmksbz10LnJhZGl1cyp0LnJhZGl1cztpZihyPm8pcmV0dXJuIG51bGw7bGV0IGE9TWF0aC5zcXJ0KG8tcikscz1pLWEsbD1pK2E7cmV0dXJuIHM8MCYmbDwwP251bGw6dGhpcy5hdChzPDA/bDpzLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7bGV0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZigwPT09ZSlyZXR1cm4gMD09PXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT8wOm51bGw7bGV0IGk9LSh0aGlzLm9yaWdpbi5kb3QodC5ub3JtYWwpK3QuY29uc3RhbnQpL2U7cmV0dXJuIGk+PTA/aTpudWxsfWludGVyc2VjdFBsYW5lKHQsZSl7bGV0IGk9dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIG51bGw9PT1pP251bGw6dGhpcy5hdChpLGUpfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIDA9PT1lfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgaSxyLG8sYSxzLGwsYz0xL3RoaXMuZGlyZWN0aW9uLngsZD0xL3RoaXMuZGlyZWN0aW9uLnksdT0xL3RoaXMuZGlyZWN0aW9uLnoscD10aGlzLm9yaWdpbjtyZXR1cm4gYz49MD8oaT0odC5taW4ueC1wLngpKmMscj0odC5tYXgueC1wLngpKmMpOihpPSh0Lm1heC54LXAueCkqYyxyPSh0Lm1pbi54LXAueCkqYyksZD49MD8obz0odC5taW4ueS1wLnkpKmQsYT0odC5tYXgueS1wLnkpKmQpOihvPSh0Lm1heC55LXAueSkqZCxhPSh0Lm1pbi55LXAueSkqZCksaT5hfHxvPnJ8fCgobz5pfHxpIT1pKSYmKGk9byksKGE8cnx8ciE9cikmJihyPWEpLHU+PTA/KHM9KHQubWluLnotcC56KSp1LGw9KHQubWF4LnotcC56KSp1KToocz0odC5tYXguei1wLnopKnUsbD0odC5taW4uei1wLnopKnUpLGk+bHx8cz5yKXx8KChzPml8fGkhPWkpJiYoaT1zKSwobDxyfHxyIT1yKSYmKHI9bCkscjwwKT9udWxsOnRoaXMuYXQoaT49MD9pOnIsZSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gbnVsbCE9PXRoaXMuaW50ZXJzZWN0Qm94KHQsTmQpfWludGVyc2VjdFRyaWFuZ2xlKHQsZSxpLHIsbyl7SzMuc3ViVmVjdG9ycyhlLHQpLFhELnN1YlZlY3RvcnMoaSx0KSxKMy5jcm9zc1ZlY3RvcnMoSzMsWEQpO2xldCBzLGE9dGhpcy5kaXJlY3Rpb24uZG90KEozKTtpZihhPjApe2lmKHIpcmV0dXJuIG51bGw7cz0xfWVsc2V7aWYoIShhPDApKXJldHVybiBudWxsO3M9LTEsYT0tYX1wcC5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPXMqdGhpcy5kaXJlY3Rpb24uZG90KFhELmNyb3NzVmVjdG9ycyhwcCxYRCkpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1zKnRoaXMuZGlyZWN0aW9uLmRvdChLMy5jcm9zcyhwcCkpO2lmKGM8MHx8bCtjPmEpcmV0dXJuIG51bGw7bGV0IGQ9LXMqcHAuZG90KEozKTtyZXR1cm4gZDwwP251bGw6dGhpcy5hdChkL2Esbyl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX0sTW49Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQsZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYsbSx5LE0pe2xldCB2PXRoaXMuZWxlbWVudHM7cmV0dXJuIHZbMF09dCx2WzRdPWUsdls4XT1pLHZbMTJdPXIsdlsxXT1vLHZbNV09YSx2WzldPXMsdlsxM109bCx2WzJdPWMsdls2XT1kLHZbMTBdPXUsdlsxNF09cCx2WzNdPWYsdls3XT1tLHZbMTFdPXksdlsxNV09TSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IE1uKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sZVs5XT1pWzldLGVbMTBdPWlbMTBdLGVbMTFdPWlbMTFdLGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLGVbMTVdPWlbMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVszXSxlWzZdLDAsZVsxXSxlWzRdLGVbN10sMCxlWzJdLGVbNV0sZVs4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQsZSxpKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksaS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxlLGkpe3JldHVybiB0aGlzLnNldCh0LngsZS54LGkueCwwLHQueSxlLnksaS55LDAsdC56LGUueixpLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cyxyPTEvTDAuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG89MS9MMC5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksYT0xL0wwLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gZVswXT1pWzBdKnIsZVsxXT1pWzFdKnIsZVsyXT1pWzJdKnIsZVszXT0wLGVbNF09aVs0XSpvLGVbNV09aVs1XSpvLGVbNl09aVs2XSpvLGVbN109MCxlWzhdPWlbOF0qYSxlWzldPWlbOV0qYSxlWzEwXT1pWzEwXSphLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQueCxyPXQueSxvPXQueixhPU1hdGguY29zKGkpLHM9TWF0aC5zaW4oaSksbD1NYXRoLmNvcyhyKSxjPU1hdGguc2luKHIpLGQ9TWF0aC5jb3MobyksdT1NYXRoLnNpbihvKTtpZigiWFlaIj09PXQub3JkZXIpe2xldCBwPWEqZCxmPWEqdSxtPXMqZCx5PXMqdTtlWzBdPWwqZCxlWzRdPS1sKnUsZVs4XT1jLGVbMV09ZittKmMsZVs1XT1wLXkqYyxlWzldPS1zKmwsZVsyXT15LXAqYyxlWzZdPW0rZipjLGVbMTBdPWEqbH1lbHNlIGlmKCJZWFoiPT09dC5vcmRlcil7bGV0IHA9bCpkLGY9bCp1LG09YypkLHk9Yyp1O2VbMF09cCt5KnMsZVs0XT1tKnMtZixlWzhdPWEqYyxlWzFdPWEqdSxlWzVdPWEqZCxlWzldPS1zLGVbMl09ZipzLW0sZVs2XT15K3AqcyxlWzEwXT1hKmx9ZWxzZSBpZigiWlhZIj09PXQub3JkZXIpe2xldCBwPWwqZCxmPWwqdSxtPWMqZCx5PWMqdTtlWzBdPXAteSpzLGVbNF09LWEqdSxlWzhdPW0rZipzLGVbMV09ZittKnMsZVs1XT1hKmQsZVs5XT15LXAqcyxlWzJdPS1hKmMsZVs2XT1zLGVbMTBdPWEqbH1lbHNlIGlmKCJaWVgiPT09dC5vcmRlcil7bGV0IHA9YSpkLGY9YSp1LG09cypkLHk9cyp1O2VbMF09bCpkLGVbNF09bSpjLWYsZVs4XT1wKmMreSxlWzFdPWwqdSxlWzVdPXkqYytwLGVbOV09ZipjLW0sZVsyXT0tYyxlWzZdPXMqbCxlWzEwXT1hKmx9ZWxzZSBpZigiWVpYIj09PXQub3JkZXIpe2xldCBwPWEqbCxmPWEqYyxtPXMqbCx5PXMqYztlWzBdPWwqZCxlWzRdPXktcCp1LGVbOF09bSp1K2YsZVsxXT11LGVbNV09YSpkLGVbOV09LXMqZCxlWzJdPS1jKmQsZVs2XT1mKnUrbSxlWzEwXT1wLXkqdX1lbHNlIGlmKCJYWlkiPT09dC5vcmRlcil7bGV0IHA9YSpsLGY9YSpjLG09cypsLHk9cypjO2VbMF09bCpkLGVbNF09LXUsZVs4XT1jKmQsZVsxXT1wKnUreSxlWzVdPWEqZCxlWzldPWYqdS1tLGVbMl09bSp1LWYsZVs2XT1zKmQsZVsxMF09eSp1K3B9cmV0dXJuIGVbM109MCxlWzddPTAsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMuY29tcG9zZShpUmUsdCxyUmUpfWxvb2tBdCh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gbXMuc3ViVmVjdG9ycyh0LGUpLDA9PT1tcy5sZW5ndGhTcSgpJiYobXMuej0xKSxtcy5ub3JtYWxpemUoKSxmcC5jcm9zc1ZlY3RvcnMoaSxtcyksMD09PWZwLmxlbmd0aFNxKCkmJigxPT09TWF0aC5hYnMoaS56KT9tcy54Kz0xZS00Om1zLnorPTFlLTQsbXMubm9ybWFsaXplKCksZnAuY3Jvc3NWZWN0b3JzKGksbXMpKSxmcC5ub3JtYWxpemUoKSxRRC5jcm9zc1ZlY3RvcnMobXMsZnApLHJbMF09ZnAueCxyWzRdPVFELngscls4XT1tcy54LHJbMV09ZnAueSxyWzVdPVFELnkscls5XT1tcy55LHJbMl09ZnAueixyWzZdPVFELnosclsxMF09bXMueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7bGV0IGk9dC5lbGVtZW50cyxyPWUuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9aVswXSxzPWlbNF0sbD1pWzhdLGM9aVsxMl0sZD1pWzFdLHU9aVs1XSxwPWlbOV0sZj1pWzEzXSxtPWlbMl0seT1pWzZdLE09aVsxMF0sdj1pWzE0XSx4PWlbM10sUj1pWzddLEE9aVsxMV0sSD1pWzE1XSx0ZT1yWzBdLEs9cls0XSxDZT1yWzhdLFplPXJbMTJdLEllPXJbMV0sST1yWzVdLHJlPXJbOV0sY2U9clsxM10sZmU9clsyXSxfZT1yWzZdLG5lPXJbMTBdLGRlPXJbMTRdLHVlPXJbM10sR2U9cls3XSxNZT1yWzExXSxOZT1yWzE1XTtyZXR1cm4gb1swXT1hKnRlK3MqSWUrbCpmZStjKnVlLG9bNF09YSpLK3MqSStsKl9lK2MqR2Usb1s4XT1hKkNlK3MqcmUrbCpuZStjKk1lLG9bMTJdPWEqWmUrcypjZStsKmRlK2MqTmUsb1sxXT1kKnRlK3UqSWUrcCpmZStmKnVlLG9bNV09ZCpLK3UqSStwKl9lK2YqR2Usb1s5XT1kKkNlK3UqcmUrcCpuZStmKk1lLG9bMTNdPWQqWmUrdSpjZStwKmRlK2YqTmUsb1syXT1tKnRlK3kqSWUrTSpmZSt2KnVlLG9bNl09bSpLK3kqSStNKl9lK3YqR2Usb1sxMF09bSpDZSt5KnJlK00qbmUrdipNZSxvWzE0XT1tKlplK3kqY2UrTSpkZSt2Kk5lLG9bM109eCp0ZStSKkllK0EqZmUrSCp1ZSxvWzddPXgqSytSKkkrQSpfZStIKkdlLG9bMTFdPXgqQ2UrUipyZStBKm5lK0gqTWUsb1sxNV09eCpaZStSKmNlK0EqZGUrSCpOZSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVs0XSo9dCxlWzhdKj10LGVbMTJdKj10LGVbMV0qPXQsZVs1XSo9dCxlWzldKj10LGVbMTNdKj10LGVbMl0qPXQsZVs2XSo9dCxlWzEwXSo9dCxlWzE0XSo9dCxlWzNdKj10LGVbN10qPXQsZVsxMV0qPXQsZVsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFs0XSxyPXRbOF0sbz10WzEyXSxhPXRbMV0scz10WzVdLGw9dFs5XSxjPXRbMTNdLGQ9dFsyXSx1PXRbNl0scD10WzEwXSxmPXRbMTRdO3JldHVybiB0WzNdKigrbypsKnUtcipjKnUtbypzKnAraSpjKnArcipzKmYtaSpsKmYpK3RbN10qKCtlKmwqZi1lKmMqcCtvKmEqcC1yKmEqZityKmMqZC1vKmwqZCkrdFsxMV0qKCtlKmMqdS1lKnMqZi1vKmEqdStpKmEqZitvKnMqZC1pKmMqZCkrdFsxNV0qKC1yKnMqZC1lKmwqdStlKnMqcCtyKmEqdS1pKmEqcCtpKmwqZCl9dHJhbnNwb3NlKCl7bGV0IGUsdD10aGlzLmVsZW1lbnRzO3JldHVybiBlPXRbMV0sdFsxXT10WzRdLHRbNF09ZSxlPXRbMl0sdFsyXT10WzhdLHRbOF09ZSxlPXRbNl0sdFs2XT10WzldLHRbOV09ZSxlPXRbM10sdFszXT10WzEyXSx0WzEyXT1lLGU9dFs3XSx0WzddPXRbMTNdLHRbMTNdPWUsZT10WzExXSx0WzExXT10WzE0XSx0WzE0XT1lLHRoaXN9c2V0UG9zaXRpb24odCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhyWzEyXT10LngsclsxM109dC55LHJbMTRdPXQueik6KHJbMTJdPXQsclsxM109ZSxyWzE0XT1pKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSxkPXRbOF0sdT10WzldLHA9dFsxMF0sZj10WzExXSxtPXRbMTJdLHk9dFsxM10sTT10WzE0XSx2PXRbMTVdLHg9dSpNKmMteSpwKmMreSpsKmYtcypNKmYtdSpsKnYrcypwKnYsUj1tKnAqYy1kKk0qYy1tKmwqZithKk0qZitkKmwqdi1hKnAqdixBPWQqeSpjLW0qdSpjK20qcypmLWEqeSpmLWQqcyp2K2EqdSp2LEg9bSp1KmwtZCp5KmwtbSpzKnArYSp5KnArZCpzKk0tYSp1Kk0sdGU9ZSp4K2kqUityKkErbypIO2lmKDA9PT10ZSlyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7bGV0IEs9MS90ZTtyZXR1cm4gdFswXT14KkssdFsxXT0oeSpwKm8tdSpNKm8teSpyKmYraSpNKmYrdSpyKnYtaSpwKnYpKkssdFsyXT0ocypNKm8teSpsKm8reSpyKmMtaSpNKmMtcypyKnYraSpsKnYpKkssdFszXT0odSpsKm8tcypwKm8tdSpyKmMraSpwKmMrcypyKmYtaSpsKmYpKkssdFs0XT1SKkssdFs1XT0oZCpNKm8tbSpwKm8rbSpyKmYtZSpNKmYtZCpyKnYrZSpwKnYpKkssdFs2XT0obSpsKm8tYSpNKm8tbSpyKmMrZSpNKmMrYSpyKnYtZSpsKnYpKkssdFs3XT0oYSpwKm8tZCpsKm8rZCpyKmMtZSpwKmMtYSpyKmYrZSpsKmYpKkssdFs4XT1BKkssdFs5XT0obSp1Km8tZCp5Km8tbSppKmYrZSp5KmYrZCppKnYtZSp1KnYpKkssdFsxMF09KGEqeSpvLW0qcypvK20qaSpjLWUqeSpjLWEqaSp2K2Uqcyp2KSpLLHRbMTFdPShkKnMqby1hKnUqby1kKmkqYytlKnUqYythKmkqZi1lKnMqZikqSyx0WzEyXT1IKkssdFsxM109KGQqeSpyLW0qdSpyK20qaSpwLWUqeSpwLWQqaSpNK2UqdSpNKSpLLHRbMTRdPShtKnMqci1hKnkqci1tKmkqbCtlKnkqbCthKmkqTS1lKnMqTSkqSyx0WzE1XT0oYSp1KnItZCpzKnIrZCppKmwtZSp1KmwtYSppKnArZSpzKnApKkssdGhpc31zY2FsZSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LG89dC56O3JldHVybiBlWzBdKj1pLGVbNF0qPXIsZVs4XSo9byxlWzFdKj1pLGVbNV0qPXIsZVs5XSo9byxlWzJdKj1pLGVbNl0qPXIsZVsxMF0qPW8sZVszXSo9aSxlWzddKj1yLGVbMTFdKj1vLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0sdFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0sdFs4XSp0WzhdK3RbOV0qdFs5XSt0WzEwXSp0WzEwXSkpfW1ha2VUcmFuc2xhdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsZSwwLDAsMSxpLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsZSwtaSwwLDAsaSxlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsMCxpLDAsMCwxLDAsMCwtaSwwLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwtaSwwLDAsaSxlLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSksbz0xLWksYT10Lngscz10LnksbD10LnosYz1vKmEsZD1vKnM7cmV0dXJuIHRoaXMuc2V0KGMqYStpLGMqcy1yKmwsYypsK3IqcywwLGMqcytyKmwsZCpzK2ksZCpsLXIqYSwwLGMqbC1yKnMsZCpsK3IqYSxvKmwqbCtpLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxlLGkpe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsZSwwLDAsMCwwLGksMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LGUsaSxyLG8sYSl7cmV0dXJuIHRoaXMuc2V0KDEsaSxvLDAsdCwxLGEsMCxlLHIsMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxvPWUuX3gsYT1lLl95LHM9ZS5feixsPWUuX3csYz1vK28sZD1hK2EsdT1zK3MscD1vKmMsZj1vKmQsbT1vKnUseT1hKmQsTT1hKnUsdj1zKnUseD1sKmMsUj1sKmQsQT1sKnUsSD1pLngsdGU9aS55LEs9aS56O3JldHVybiByWzBdPSgxLSh5K3YpKSpILHJbMV09KGYrQSkqSCxyWzJdPShtLVIpKkgsclszXT0wLHJbNF09KGYtQSkqdGUscls1XT0oMS0ocCt2KSkqdGUscls2XT0oTSt4KSp0ZSxyWzddPTAscls4XT0obStSKSpLLHJbOV09KE0teCkqSyxyWzEwXT0oMS0ocCt5KSkqSyxyWzExXT0wLHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56LHJbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMsbz1MMC5zZXQoclswXSxyWzFdLHJbMl0pLmxlbmd0aCgpLGE9TDAuc2V0KHJbNF0scls1XSxyWzZdKS5sZW5ndGgoKSxzPUwwLnNldChyWzhdLHJbOV0sclsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYobz0tbyksdC54PXJbMTJdLHQueT1yWzEzXSx0Lno9clsxNF0scWwuY29weSh0aGlzKTtsZXQgYz0xL28sZD0xL2EsdT0xL3M7cmV0dXJuIHFsLmVsZW1lbnRzWzBdKj1jLHFsLmVsZW1lbnRzWzFdKj1jLHFsLmVsZW1lbnRzWzJdKj1jLHFsLmVsZW1lbnRzWzRdKj1kLHFsLmVsZW1lbnRzWzVdKj1kLHFsLmVsZW1lbnRzWzZdKj1kLHFsLmVsZW1lbnRzWzhdKj11LHFsLmVsZW1lbnRzWzldKj11LHFsLmVsZW1lbnRzWzEwXSo9dSxlLnNldEZyb21Sb3RhdGlvbk1hdHJpeChxbCksaS54PW8saS55PWEsaS56PXMsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLGkscixvLGEpe3ZvaWQgMD09PWEmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBzPXRoaXMuZWxlbWVudHMsYz0yKm8vKGktciksZD0oZSt0KS8oZS10KSx1PShpK3IpLyhpLXIpLHA9LShhK28pLyhhLW8pLGY9LTIqYSpvLyhhLW8pO3JldHVybiBzWzBdPTIqby8oZS10KSxzWzRdPTAsc1s4XT1kLHNbMTJdPTAsc1sxXT0wLHNbNV09YyxzWzldPXUsc1sxM109MCxzWzJdPTAsc1s2XT0wLHNbMTBdPXAsc1sxNF09ZixzWzNdPTAsc1s3XT0wLHNbMTFdPS0xLHNbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQsZSxpLHIsbyxhKXtsZXQgcz10aGlzLmVsZW1lbnRzLGw9MS8oZS10KSxjPTEvKGktciksZD0xLyhhLW8pLHU9KGUrdCkqbCxwPShpK3IpKmMsZj0oYStvKSpkO3JldHVybiBzWzBdPTIqbCxzWzRdPTAsc1s4XT0wLHNbMTJdPS11LHNbMV09MCxzWzVdPTIqYyxzWzldPTAsc1sxM109LXAsc1syXT0wLHNbNl09MCxzWzEwXT0tMipkLHNbMTRdPS1mLHNbM109MCxzWzddPTAsc1sxMV09MCxzWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcj0wO3I8MTY7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTwxNjtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gdFtlXT1pWzBdLHRbZSsxXT1pWzFdLHRbZSsyXT1pWzJdLHRbZSszXT1pWzNdLHRbZSs0XT1pWzRdLHRbZSs1XT1pWzVdLHRbZSs2XT1pWzZdLHRbZSs3XT1pWzddLHRbZSs4XT1pWzhdLHRbZSs5XT1pWzldLHRbZSsxMF09aVsxMF0sdFtlKzExXT1pWzExXSx0W2UrMTJdPWlbMTJdLHRbZSsxM109aVsxM10sdFtlKzE0XT1pWzE0XSx0W2UrMTVdPWlbMTVdLHR9fTtNbi5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciBMMD1uZXcgJCxxbD1uZXcgTW4saVJlPW5ldyAkKDAsMCwwKSxyUmU9bmV3ICQoMSwxLDEpLGZwPW5ldyAkLFFEPW5ldyAkLG1zPW5ldyAkLGFlZT1uZXcgTW4sc2VlPW5ldyBhYSxFcD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPUVwLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cn1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZT10aGlzLl9vcmRlcixpPSEwKXtsZXQgcj10LmVsZW1lbnRzLG89clswXSxhPXJbNF0scz1yWzhdLGw9clsxXSxjPXJbNV0sZD1yWzldLHU9clsyXSxwPXJbNl0sZj1yWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKFhhKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLWQsZiksdGhpcy5fej1NYXRoLmF0YW4yKC1hLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKHAsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLVhhKGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyxmKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtdSxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihYYShwLC0xLDEpKSxNYXRoLmFicyhwKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC11LGYpLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1YYSh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKHAsZiksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1hLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oWGEobCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtZCxjKSx0aGlzLl95PU1hdGguYXRhbjIoLXUsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMsZikpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtWGEoYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihwLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC1kLGYpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSwhMD09PWkmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4gYWVlLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGFlZSxlLGkpfXNldEZyb21WZWN0b3IzKHQsZT10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LGUpfXJlb3JkZXIodCl7cmV0dXJuIHNlZS5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihzZWUsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdm9pZCAwIT09dFszXSYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgJCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O0VwLnByb3RvdHlwZS5pc0V1bGVyPSEwLEVwLkRlZmF1bHRPcmRlcj0iWFlaIixFcC5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO3ZhciBUST1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9KDE8PHR8MCk+Pj4wfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuIDAhPSh0aGlzLm1hc2smdC5tYXNrKX1pc0VuYWJsZWQodCl7cmV0dXJuIDAhPSh0aGlzLm1hc2smKDE8PHR8MCkpfX0sb1JlPTAsbGVlPW5ldyAkLE4wPW5ldyBhYSxCZD1uZXcgTW4sWkQ9bmV3ICQsdXg9bmV3ICQsYVJlPW5ldyAkLHNSZT1uZXcgYWEsY2VlPW5ldyAkKDEsMCwwKSxkZWU9bmV3ICQoMCwxLDApLHVlZT1uZXcgJCgwLDAsMSksbFJlPXt0eXBlOiJhZGRlZCJ9LHBlZT17dHlwZToicmVtb3ZlZCJ9LHppPWNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOm9SZSsrfSksdGhpcy51dWlkPVFsKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPXppLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyAkLGU9bmV3IEVwLGk9bmV3IGFhLHI9bmV3ICQoMSwxLDEpO2UuX29uQ2hhbmdlKGZ1bmN0aW9uKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9KSxpLl9vbkNoYW5nZShmdW5jdGlvbigpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTplfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTppfSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgTW59LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IHZvfX0pLHRoaXMubWF0cml4PW5ldyBNbix0aGlzLm1hdHJpeFdvcmxkPW5ldyBNbix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9emkuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBUSSx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxlKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LGUpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxlKXtyZXR1cm4gTjAuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShOMCksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LGUpe3JldHVybiBOMC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE4wKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGNlZSx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhkZWUsdCl9cm90YXRlWih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXModWVlLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LGUpe3JldHVybiBsZWUuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZChsZWUubXVsdGlwbHlTY2FsYXIoZSkpLHRoaXN9dHJhbnNsYXRlWCh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoY2VlLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGRlZSx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1ZWUsdCl9bG9jYWxUb1dvcmxkKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX13b3JsZFRvTG9jYWwodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KEJkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LGUsaSl7dC5pc1ZlY3RvcjM/WkQuY29weSh0KTpaRC5zZXQodCxlLGkpO2xldCByPXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHV4LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/QmQubG9va0F0KHV4LFpELHRoaXMudXApOkJkLmxvb2tBdChaRCx1eCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KEJkKSxyJiYoQmQuZXh0cmFjdFJvdGF0aW9uKHIubWF0cml4V29ybGQpLE4wLnNldEZyb21Sb3RhdGlvbk1hdHJpeChCZCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE4wLmludmVydCgpKSl9YWRkKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0aGlzLmFkZChhcmd1bWVudHNbZV0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyhudWxsIT09dC5wYXJlbnQmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQobFJlKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbaV0pO3JldHVybiB0aGlzfWxldCBlPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4tMSE9PWUmJih0LnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW4uc3BsaWNlKGUsMSksdC5kaXNwYXRjaEV2ZW50KHBlZSkpLHRoaXN9cmVtb3ZlRnJvbVBhcmVudCgpe2xldCB0PXRoaXMucGFyZW50O3JldHVybiBudWxsIT09dCYmdC5yZW1vdmUodGhpcyksdGhpc31jbGVhcigpe2ZvcihsZXQgdD0wO3Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7dCsrKXtsZXQgZT10aGlzLmNoaWxkcmVuW3RdO2UucGFyZW50PW51bGwsZS5kaXNwYXRjaEV2ZW50KHBlZSl9cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPTAsdGhpc31hdHRhY2godCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLEJkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbnVsbCE9PXQucGFyZW50JiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLEJkLm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQoQmQpLHRoaXMuYWRkKHQpLHQudXBkYXRlV29ybGRNYXRyaXgoITEsITApLHRoaXN9Z2V0T2JqZWN0QnlJZCh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsdCl9Z2V0T2JqZWN0QnlOYW1lKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoIm5hbWUiLHQpfWdldE9iamVjdEJ5UHJvcGVydHkodCxlKXtpZih0aGlzW3RdPT09ZSlyZXR1cm4gdGhpcztmb3IobGV0IGk9MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k8cjtpKyspe2xldCBhPXRoaXMuY2hpbGRyZW5baV0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKHZvaWQgMCE9PWEpcmV0dXJuIGF9fWdldFdvcmxkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfWdldFdvcmxkUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UodXgsdCxhUmUpLHR9Z2V0V29ybGRTY2FsZSh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UodXgsc1JlLHQpLHR9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoZVs4XSxlWzldLGVbMTBdKS5ub3JtYWxpemUoKX1yYXljYXN0KCl7fXRyYXZlcnNlKHQpe3QodGhpcyk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS50cmF2ZXJzZSh0KX10cmF2ZXJzZVZpc2libGUodCl7aWYoITE9PT10aGlzLnZpc2libGUpcmV0dXJuO3QodGhpcyk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS50cmF2ZXJzZVZpc2libGUodCl9dHJhdmVyc2VBbmNlc3RvcnModCl7bGV0IGU9dGhpcy5wYXJlbnQ7bnVsbCE9PWUmJih0KGUpLGUudHJhdmVyc2VBbmNlc3RvcnModCkpfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LmNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSwodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlfHx0KSYmKG51bGw9PT10aGlzLnBhcmVudD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHQ9ITApO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udXBkYXRlTWF0cml4V29ybGQodCl9dXBkYXRlV29ybGRNYXRyaXgodCxlKXtsZXQgaT10aGlzLnBhcmVudDtpZighMD09PXQmJm51bGwhPT1pJiZpLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksbnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSwhMD09PWUpe2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXJbb10udXBkYXRlV29ybGRNYXRyaXgoITEsITApfX10b0pTT04odCl7bGV0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0LGk9e307ZSYmKHQ9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fSxzaGFwZXM6e30sc2tlbGV0b25zOnt9LGFuaW1hdGlvbnM6e319LGkubWV0YWRhdGE9e3ZlcnNpb246NC41LHR5cGU6Ik9iamVjdCIsZ2VuZXJhdG9yOiJPYmplY3QzRC50b0pTT04ifSk7bGV0IHI9e307ZnVuY3Rpb24gbyhzLGwpe3JldHVybiB2b2lkIDA9PT1zW2wudXVpZF0mJihzW2wudXVpZF09bC50b0pTT04odCkpLGwudXVpZH1pZihyLnV1aWQ9dGhpcy51dWlkLHIudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJihyLm5hbWU9dGhpcy5uYW1lKSwhMD09PXRoaXMuY2FzdFNoYWRvdyYmKHIuY2FzdFNoYWRvdz0hMCksITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJihyLnJlY2VpdmVTaGFkb3c9ITApLCExPT09dGhpcy52aXNpYmxlJiYoci52aXNpYmxlPSExKSwhMT09PXRoaXMuZnJ1c3R1bUN1bGxlZCYmKHIuZnJ1c3R1bUN1bGxlZD0hMSksMCE9PXRoaXMucmVuZGVyT3JkZXImJihyLnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKHIudXNlckRhdGE9dGhpcy51c2VyRGF0YSksci5sYXllcnM9dGhpcy5sYXllcnMubWFzayxyLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCksITE9PT10aGlzLm1hdHJpeEF1dG9VcGRhdGUmJihyLm1hdHJpeEF1dG9VcGRhdGU9ITEpLHRoaXMuaXNJbnN0YW5jZWRNZXNoJiYoci50eXBlPSJJbnN0YW5jZWRNZXNoIixyLmNvdW50PXRoaXMuY291bnQsci5pbnN0YW5jZU1hdHJpeD10aGlzLmluc3RhbmNlTWF0cml4LnRvSlNPTigpLG51bGwhPT10aGlzLmluc3RhbmNlQ29sb3ImJihyLmluc3RhbmNlQ29sb3I9dGhpcy5pbnN0YW5jZUNvbG9yLnRvSlNPTigpKSksdGhpcy5pc1NjZW5lKXRoaXMuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZC5pc0NvbG9yP3IuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKCk6dGhpcy5iYWNrZ3JvdW5kLmlzVGV4dHVyZSYmKHIuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKHQpLnV1aWQpKSx0aGlzLmVudmlyb25tZW50JiZ0aGlzLmVudmlyb25tZW50LmlzVGV4dHVyZSYmKHIuZW52aXJvbm1lbnQ9dGhpcy5lbnZpcm9ubWVudC50b0pTT04odCkudXVpZCk7ZWxzZSBpZih0aGlzLmlzTWVzaHx8dGhpcy5pc0xpbmV8fHRoaXMuaXNQb2ludHMpe3IuZ2VvbWV0cnk9byh0Lmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSk7bGV0IHM9dGhpcy5nZW9tZXRyeS5wYXJhbWV0ZXJzO2lmKHZvaWQgMCE9PXMmJnZvaWQgMCE9PXMuc2hhcGVzKXtsZXQgbD1zLnNoYXBlcztpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYz0wLGQ9bC5sZW5ndGg7YzxkO2MrKylvKHQuc2hhcGVzLGxbY10pO2Vsc2Ugbyh0LnNoYXBlcyxsKX19aWYodGhpcy5pc1NraW5uZWRNZXNoJiYoci5iaW5kTW9kZT10aGlzLmJpbmRNb2RlLHIuYmluZE1hdHJpeD10aGlzLmJpbmRNYXRyaXgudG9BcnJheSgpLHZvaWQgMCE9PXRoaXMuc2tlbGV0b24mJihvKHQuc2tlbGV0b25zLHRoaXMuc2tlbGV0b24pLHIuc2tlbGV0b249dGhpcy5za2VsZXRvbi51dWlkKSksdm9pZCAwIT09dGhpcy5tYXRlcmlhbClpZihBcnJheS5pc0FycmF5KHRoaXMubWF0ZXJpYWwpKXtsZXQgcz1bXTtmb3IobGV0IGw9MCxjPXRoaXMubWF0ZXJpYWwubGVuZ3RoO2w8YztsKyspcy5wdXNoKG8odC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtsXSkpO3IubWF0ZXJpYWw9c31lbHNlIHIubWF0ZXJpYWw9byh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsKTtpZih0aGlzLmNoaWxkcmVuLmxlbmd0aD4wKXtyLmNoaWxkcmVuPVtdO2ZvcihsZXQgcz0wO3M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7cysrKXIuY2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW3NdLnRvSlNPTih0KS5vYmplY3QpfWlmKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg+MCl7ci5hbmltYXRpb25zPVtdO2ZvcihsZXQgcz0wO3M8dGhpcy5hbmltYXRpb25zLmxlbmd0aDtzKyspci5hbmltYXRpb25zLnB1c2gobyh0LmFuaW1hdGlvbnMsdGhpcy5hbmltYXRpb25zW3NdKSl9aWYoZSl7bGV0IHM9YSh0Lmdlb21ldHJpZXMpLGw9YSh0Lm1hdGVyaWFscyksYz1hKHQudGV4dHVyZXMpLGQ9YSh0LmltYWdlcyksdT1hKHQuc2hhcGVzKSxwPWEodC5za2VsZXRvbnMpLGY9YSh0LmFuaW1hdGlvbnMpO3MubGVuZ3RoPjAmJihpLmdlb21ldHJpZXM9cyksbC5sZW5ndGg+MCYmKGkubWF0ZXJpYWxzPWwpLGMubGVuZ3RoPjAmJihpLnRleHR1cmVzPWMpLGQubGVuZ3RoPjAmJihpLmltYWdlcz1kKSx1Lmxlbmd0aD4wJiYoaS5zaGFwZXM9dSkscC5sZW5ndGg+MCYmKGkuc2tlbGV0b25zPXApLGYubGVuZ3RoPjAmJihpLmFuaW1hdGlvbnM9Zil9cmV0dXJuIGkub2JqZWN0PXIsaTtmdW5jdGlvbiBhKHMpe2xldCBsPVtdO2ZvcihsZXQgYyBpbiBzKXtsZXQgZD1zW2NdO2RlbGV0ZSBkLm1ldGFkYXRhLGwucHVzaChkKX1yZXR1cm4gbH19Y2xvbmUodCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMsdCl9Y29weSh0LGU9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSwhMD09PWUpZm9yKGxldCBpPTA7aTx0LmNoaWxkcmVuLmxlbmd0aDtpKyspdGhpcy5hZGQodC5jaGlsZHJlbltpXS5jbG9uZSgpKTtyZXR1cm4gdGhpc319O3ppLkRlZmF1bHRVcD1uZXcgJCgwLDEsMCksemkuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITAsemkucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIFlsPW5ldyAkLFZkPW5ldyAkLCQzPW5ldyAkLEhkPW5ldyAkLEIwPW5ldyAkLFYwPW5ldyAkLGZlZT1uZXcgJCxlQj1uZXcgJCx0Qj1uZXcgJCxuQj1uZXcgJCxqcj1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQsaT1uZXcgJCl7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPWl9c3RhdGljIGdldE5vcm1hbCh0LGUsaSxyKXtyLnN1YlZlY3RvcnMoaSxlKSxZbC5zdWJWZWN0b3JzKHQsZSksci5jcm9zcyhZbCk7bGV0IG89ci5sZW5ndGhTcSgpO3JldHVybiBvPjA/ci5tdWx0aXBseVNjYWxhcigxL01hdGguc3FydChvKSk6ci5zZXQoMCwwLDApfXN0YXRpYyBnZXRCYXJ5Y29vcmQodCxlLGkscixvKXtZbC5zdWJWZWN0b3JzKHIsZSksVmQuc3ViVmVjdG9ycyhpLGUpLCQzLnN1YlZlY3RvcnModCxlKTtsZXQgYT1ZbC5kb3QoWWwpLHM9WWwuZG90KFZkKSxsPVlsLmRvdCgkMyksYz1WZC5kb3QoVmQpLGQ9VmQuZG90KCQzKSx1PWEqYy1zKnM7aWYoMD09PXUpcmV0dXJuIG8uc2V0KC0yLC0xLC0xKTtsZXQgcD0xL3UsZj0oYypsLXMqZCkqcCxtPShhKmQtcypsKSpwO3JldHVybiBvLnNldCgxLWYtbSxtLGYpfXN0YXRpYyBjb250YWluc1BvaW50KHQsZSxpLHIpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsaSxyLEhkKSxIZC54Pj0wJiZIZC55Pj0wJiZIZC54K0hkLnk8PTF9c3RhdGljIGdldFVWKHQsZSxpLHIsbyxhLHMsbCl7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsSGQpLGwuc2V0KDAsMCksbC5hZGRTY2FsZWRWZWN0b3IobyxIZC54KSxsLmFkZFNjYWxlZFZlY3RvcihhLEhkLnkpLGwuYWRkU2NhbGVkVmVjdG9yKHMsSGQueiksbH1zdGF0aWMgaXNGcm9udEZhY2luZyh0LGUsaSxyKXtyZXR1cm4gWWwuc3ViVmVjdG9ycyhpLGUpLFZkLnN1YlZlY3RvcnModCxlKSxZbC5jcm9zcyhWZCkuZG90KHIpPDB9c2V0KHQsZSxpKXtyZXR1cm4gdGhpcy5hLmNvcHkodCksdGhpcy5iLmNvcHkoZSksdGhpcy5jLmNvcHkoaSksdGhpc31zZXRGcm9tUG9pbnRzQW5kSW5kaWNlcyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5hLmNvcHkodFtlXSksdGhpcy5iLmNvcHkodFtpXSksdGhpcy5jLmNvcHkodFtyXSksdGhpc31zZXRGcm9tQXR0cmlidXRlQW5kSW5kaWNlcyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5hLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSx0aGlzLmIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGkpLHRoaXMuYy5mcm9tQnVmZmVyQXR0cmlidXRlKHQsciksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gWWwuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxWZC5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLC41KllsLmNyb3NzKFZkKS5sZW5ndGgoKX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiBqci5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxlKXtyZXR1cm4ganIuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLGkscixvKXtyZXR1cm4ganIuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlLGkscixvKX1jb250YWluc1BvaW50KHQpe3JldHVybiBqci5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIGpyLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2xldCBhLHMsaT10aGlzLmEscj10aGlzLmIsbz10aGlzLmM7QjAuc3ViVmVjdG9ycyhyLGkpLFYwLnN1YlZlY3RvcnMobyxpKSxlQi5zdWJWZWN0b3JzKHQsaSk7bGV0IGw9QjAuZG90KGVCKSxjPVYwLmRvdChlQik7aWYobDw9MCYmYzw9MClyZXR1cm4gZS5jb3B5KGkpO3RCLnN1YlZlY3RvcnModCxyKTtsZXQgZD1CMC5kb3QodEIpLHU9VjAuZG90KHRCKTtpZihkPj0wJiZ1PD1kKXJldHVybiBlLmNvcHkocik7bGV0IHA9bCp1LWQqYztpZihwPD0wJiZsPj0wJiZkPD0wKXJldHVybiBhPWwvKGwtZCksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihCMCxhKTtuQi5zdWJWZWN0b3JzKHQsbyk7bGV0IGY9QjAuZG90KG5CKSxtPVYwLmRvdChuQik7aWYobT49MCYmZjw9bSlyZXR1cm4gZS5jb3B5KG8pO2xldCB5PWYqYy1sKm07aWYoeTw9MCYmYz49MCYmbTw9MClyZXR1cm4gcz1jLyhjLW0pLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoVjAscyk7bGV0IE09ZCptLWYqdTtpZihNPD0wJiZ1LWQ+PTAmJmYtbT49MClyZXR1cm4gZmVlLnN1YlZlY3RvcnMobyxyKSxzPSh1LWQpLyh1LWQrKGYtbSkpLGUuY29weShyKS5hZGRTY2FsZWRWZWN0b3IoZmVlLHMpO2xldCB2PTEvKE0reStwKTtyZXR1cm4gYT15KnYscz1wKnYsZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihCMCxhKS5hZGRTY2FsZWRWZWN0b3IoVjAscyl9ZXF1YWxzKHQpe3JldHVybiB0LmEuZXF1YWxzKHRoaXMuYSkmJnQuYi5lcXVhbHModGhpcy5iKSYmdC5jLmVxdWFscyh0aGlzLmMpfX0sY1JlPTAsUm89Y2xhc3MgZXh0ZW5kcyBVZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6Y1JlKyt9KSx0aGlzLnV1aWQ9UWwoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJNYXRlcmlhbCIsdGhpcy5mb2c9ITAsdGhpcy5ibGVuZGluZz14eCx0aGlzLnNpZGU9U3gsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPWR0ZSx0aGlzLmJsZW5kRHN0PXV0ZSx0aGlzLmJsZW5kRXF1YXRpb249SzAsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz12Qix0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPTUxOSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD03NjgwLHRoaXMuc3RlbmNpbFpGYWlsPTc2ODAsdGhpcy5zdGVuY2lsWlBhc3M9NzY4MCx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMuYWxwaGFXcml0ZT0hMCx0aGlzLnByZWNpc2lvbj1udWxsLHRoaXMucG9seWdvbk9mZnNldD0hMSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MCx0aGlzLnBvbHlnb25PZmZzZXRVbml0cz0wLHRoaXMuZGl0aGVyaW5nPSExLHRoaXMuYWxwaGFUb0NvdmVyYWdlPSExLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLl9hbHBoYVRlc3Q9MH1nZXQgYWxwaGFUZXN0KCl7cmV0dXJuIHRoaXMuX2FscGhhVGVzdH1zZXQgYWxwaGFUZXN0KHQpe3RoaXMuX2FscGhhVGVzdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2FscGhhVGVzdD10fW9uQnVpbGQoKXt9b25CZWZvcmVSZW5kZXIoKXt9b25CZWZvcmVDb21waWxlKCl7fWN1c3RvbVByb2dyYW1DYWNoZUtleSgpe3JldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpfXNldFZhbHVlcyh0KXtpZih2b2lkIDAhPT10KWZvcihsZXQgZSBpbiB0KXtsZXQgaT10W2VdO2lmKHZvaWQgMD09PWkpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK2UrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZigic2hhZGluZyI9PT1lKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1pO2NvbnRpbnVlfWxldCByPXRoaXNbZV07dm9pZCAwIT09cj9yJiZyLmlzQ29sb3I/ci5zZXQoaSk6ciYmci5pc1ZlY3RvcjMmJmkmJmkuaXNWZWN0b3IzP3IuY29weShpKTp0aGlzW2VdPWk6Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIil9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O2Z1bmN0aW9uIHIobyl7bGV0IGE9W107Zm9yKGxldCBzIGluIG8pe2xldCBsPW9bc107ZGVsZXRlIGwubWV0YWRhdGEsYS5wdXNoKGwpfXJldHVybiBhfWlmKGkudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKGkuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5yb3VnaG5lc3MmJihpLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdm9pZCAwIT09dGhpcy5tZXRhbG5lc3MmJihpLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdm9pZCAwIT09dGhpcy5zaGVlbiYmKGkuc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKGkuc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hlZW5Sb3VnaG5lc3MmJihpLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKGkuZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmMSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGkuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zcGVjdWxhckludGVuc2l0eSYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKGkuc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hpbmluZXNzJiYoaS5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0JiYoaS5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKGkubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYoaS5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYoaS5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKGkubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxpLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYoaS5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLGkuYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYoaS5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxpLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsaS5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKGkuZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLGkuZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxpLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihpLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihpLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKGkuZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHZvaWQgMCE9PXRoaXMuY29tYmluZSYmKGkuY29tYmluZT10aGlzLmNvbWJpbmUpKSx2b2lkIDAhPT10aGlzLmVudk1hcEludGVuc2l0eSYmKGkuZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10aGlzLnJlZmxlY3Rpdml0eSYmKGkucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx2b2lkIDAhPT10aGlzLnJlZnJhY3Rpb25SYXRpbyYmKGkucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKGkuZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy50cmFuc21pc3Npb24mJihpLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKGkudHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRoaWNrbmVzcyYmKGkudGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYoaS50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25Db2xvciYmKGkuYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2l6ZSYmKGkuc2l6ZT10aGlzLnNpemUpLG51bGwhPT10aGlzLnNoYWRvd1NpZGUmJihpLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx2b2lkIDAhPT10aGlzLnNpemVBdHRlbnVhdGlvbiYmKGkuc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSx0aGlzLmJsZW5kaW5nIT09eHgmJihpLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpLHRoaXMuc2lkZSE9PVN4JiYoaS5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihpLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihpLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSwhMD09PXRoaXMudHJhbnNwYXJlbnQmJihpLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLGkuZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLGkuZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LGkuZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsaS5jb2xvcldyaXRlPXRoaXMuY29sb3JXcml0ZSxpLmFscGhhV3JpdGU9dGhpcy5hbHBoYVdyaXRlLGkuc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLGkuc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssaS5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLGkuc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsaS5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssaS5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLGkuc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLGkuc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJjAhPT10aGlzLnJvdGF0aW9uJiYoaS5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSwhMD09PXRoaXMucG9seWdvbk9mZnNldCYmKGkucG9seWdvbk9mZnNldD0hMCksMCE9PXRoaXMucG9seWdvbk9mZnNldEZhY3RvciYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLDAhPT10aGlzLnBvbHlnb25PZmZzZXRVbml0cyYmKGkucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmMSE9PXRoaXMubGluZXdpZHRoJiYoaS5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHZvaWQgMCE9PXRoaXMuZGFzaFNpemUmJihpLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHZvaWQgMCE9PXRoaXMuZ2FwU2l6ZSYmKGkuZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHZvaWQgMCE9PXRoaXMuc2NhbGUmJihpLnNjYWxlPXRoaXMuc2NhbGUpLCEwPT09dGhpcy5kaXRoZXJpbmcmJihpLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKGkuYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSwhMD09PXRoaXMuYWxwaGFUb0NvdmVyYWdlJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dGhpcy5hbHBoYVRvQ292ZXJhZ2UpLCEwPT09dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEmJihpLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksITA9PT10aGlzLndpcmVmcmFtZSYmKGkud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYoaS53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLCJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVjYXAmJihpLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lam9pbiYmKGkud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksITA9PT10aGlzLmZsYXRTaGFkaW5nJiYoaS5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSwhMT09PXRoaXMudmlzaWJsZSYmKGkudmlzaWJsZT0hMSksITE9PT10aGlzLnRvbmVNYXBwZWQmJihpLnRvbmVNYXBwZWQ9ITEpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksZSl7bGV0IG89cih0LnRleHR1cmVzKSxhPXIodC5pbWFnZXMpO28ubGVuZ3RoPjAmJihpLnRleHR1cmVzPW8pLGEubGVuZ3RoPjAmJihpLmltYWdlcz1hKX1yZXR1cm4gaX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCBlPXQuY2xpcHBpbmdQbGFuZXMsaT1udWxsO2lmKG51bGwhPT1lKXtsZXQgcj1lLmxlbmd0aDtpPW5ldyBBcnJheShyKTtmb3IobGV0IG89MDtvIT09cjsrK28paVtvXT1lW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9aSx0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX07Um8ucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIFNtPWNsYXNzIGV4dGVuZHMgUm97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1KSSx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtTbS5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgZHI9bmV3ICQsS0Q9bmV3ICRlLEFyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1pLHRoaXMudXNhZ2U9VHgsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCByPTAsbz10aGlzLml0ZW1TaXplO3I8bztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IGE9dFtyXTt2b2lkIDA9PT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsciksYT1uZXcgYW4pLGVbaSsrXT1hLnIsZVtpKytdPWEuZyxlW2krK109YS5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IGE9dFtyXTt2b2lkIDA9PT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksYT1uZXcgJGUpLGVbaSsrXT1hLngsZVtpKytdPWEueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBhPXRbcl07dm9pZCAwPT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLGE9bmV3ICQpLGVbaSsrXT1hLngsZVtpKytdPWEueSxlW2krK109YS56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IGE9dFtyXTt2b2lkIDA9PT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksYT1uZXcgS2kpLGVbaSsrXT1hLngsZVtpKytdPWEueSxlW2krK109YS56LGVbaSsrXT1hLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKDI9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUtELmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxLRC5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLEtELngsS0QueSk7ZWxzZSBpZigzPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylkci5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksZHIuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsZHIueCxkci55LGRyLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylkci54PXRoaXMuZ2V0WChlKSxkci55PXRoaXMuZ2V0WShlKSxkci56PXRoaXMuZ2V0WihlKSxkci5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxkci54LGRyLnksZHIueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspZHIueD10aGlzLmdldFgoZSksZHIueT10aGlzLmdldFkoZSksZHIuej10aGlzLmdldFooZSksZHIuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxkci54LGRyLnksZHIueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKWRyLng9dGhpcy5nZXRYKGUpLGRyLnk9dGhpcy5nZXRZKGUpLGRyLno9dGhpcy5nZXRaKGUpLGRyLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLGRyLngsZHIueSxkci56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIsbyl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiIiIT09dGhpcy5uYW1lJiYodC5uYW1lPXRoaXMubmFtZSksdGhpcy51c2FnZSE9PVR4JiYodC51c2FnZT10aGlzLnVzYWdlKSwoMCE9PXRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0fHwtMSE9PXRoaXMudXBkYXRlUmFuZ2UuY291bnQpJiYodC51cGRhdGVSYW5nZT10aGlzLnVwZGF0ZVJhbmdlKSx0fX07QXIucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBEST1jbGFzcyBleHRlbmRzIEFye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19LElJPWNsYXNzIGV4dGVuZHMgQXJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxlLGkpfX07KGNsYXNzIGV4dGVuZHMgQXJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxlLGkpfX0pLnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEJyPWNsYXNzIGV4dGVuZHMgQXJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19LGRSZT0wLCRzPW5ldyBNbixpQj1uZXcgemksSDA9bmV3ICQsaHM9bmV3IF9zLHB4PW5ldyBfcyxBbz1uZXcgJCxXaT1jbGFzcyBleHRlbmRzIFVke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpkUmUrK30pLHRoaXMudXVpZD1RbCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gdGhpcy5pbmRleD1BcnJheS5pc0FycmF5KHQpP25ldyhtdGUodCk/SUk6REkpKHQsMSk6dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzW3RdfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKHZvaWQgMCE9PWkpe2xldCBvPShuZXcgdm8pLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KG8pLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PXImJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gJHMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQoJHMpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gJHMubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NCgkcyksdGhpc31yb3RhdGVZKHQpe3JldHVybiAkcy5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KCRzKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuICRzLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQoJHMpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4gJHMubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NCgkcyksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuICRzLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQoJHMpLHRoaXN9bG9va0F0KHQpe3JldHVybiBpQi5sb29rQXQodCksaUIudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoaUIubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKEgwKS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShIMC54LEgwLnksSDAueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IG89dFtpXTtlLnB1c2goby54LG8ueSxvLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBCcihlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe251bGw9PT10aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgX3MpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3ICQoLTEvMCwtMS8wLC0xLzApLG5ldyAkKDEvMCwxLzAsMS8wKSk7aWYodm9pZCAwIT09dCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWhzLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtpXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oQW8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixocy5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChBbyksQW8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxocy5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChBbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoaHMubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoaHMubWF4KSl9ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe251bGw9PT10aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgd3ApO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3ICQsMS8wKTtpZih0KXtsZXQgaT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihocy5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXB4LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtvXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oQW8uYWRkVmVjdG9ycyhocy5taW4scHgubWluKSxocy5leHBhbmRCeVBvaW50KEFvKSxBby5hZGRWZWN0b3JzKGhzLm1heCxweC5tYXgpLGhzLmV4cGFuZEJ5UG9pbnQoQW8pKTooaHMuZXhwYW5kQnlQb2ludChweC5taW4pLGhzLmV4cGFuZEJ5UG9pbnQocHgubWF4KSk7aHMuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAsYT10LmNvdW50O288YTtvKyspQW8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKEFvKSk7aWYoZSlmb3IobGV0IG89MCxhPWUubGVuZ3RoO288YTtvKyspe2xldCBzPWVbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLGQ9cy5jb3VudDtjPGQ7YysrKUFvLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxsJiYoSDAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLEFvLmFkZChIMCkpLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKEFvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KHIpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmF0dHJpYnV0ZXM7aWYobnVsbD09PXR8fHZvaWQgMD09PWUucG9zaXRpb258fHZvaWQgMD09PWUubm9ybWFsfHx2b2lkIDA9PT1lLnV2KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO2xldCBpPXQuYXJyYXkscj1lLnBvc2l0aW9uLmFycmF5LG89ZS5ub3JtYWwuYXJyYXksYT1lLnV2LmFycmF5LHM9ci5sZW5ndGgvMzt2b2lkIDA9PT1lLnRhbmdlbnQmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgQXIobmV3IEZsb2F0MzJBcnJheSg0KnMpLDQpKTtsZXQgbD1lLnRhbmdlbnQuYXJyYXksYz1bXSxkPVtdO2ZvcihsZXQgSWU9MDtJZTxzO0llKyspY1tJZV09bmV3ICQsZFtJZV09bmV3ICQ7bGV0IHU9bmV3ICQscD1uZXcgJCxmPW5ldyAkLG09bmV3ICRlLHk9bmV3ICRlLE09bmV3ICRlLHY9bmV3ICQseD1uZXcgJDtmdW5jdGlvbiBSKEllLEkscmUpe3UuZnJvbUFycmF5KHIsMypJZSkscC5mcm9tQXJyYXkociwzKkkpLGYuZnJvbUFycmF5KHIsMypyZSksbS5mcm9tQXJyYXkoYSwyKkllKSx5LmZyb21BcnJheShhLDIqSSksTS5mcm9tQXJyYXkoYSwyKnJlKSxwLnN1Yih1KSxmLnN1Yih1KSx5LnN1YihtKSxNLnN1YihtKTtsZXQgY2U9MS8oeS54Kk0ueS1NLngqeS55KTshaXNGaW5pdGUoY2UpfHwodi5jb3B5KHApLm11bHRpcGx5U2NhbGFyKE0ueSkuYWRkU2NhbGVkVmVjdG9yKGYsLXkueSkubXVsdGlwbHlTY2FsYXIoY2UpLHguY29weShmKS5tdWx0aXBseVNjYWxhcih5LngpLmFkZFNjYWxlZFZlY3RvcihwLC1NLngpLm11bHRpcGx5U2NhbGFyKGNlKSxjW0llXS5hZGQodiksY1tJXS5hZGQodiksY1tyZV0uYWRkKHYpLGRbSWVdLmFkZCh4KSxkW0ldLmFkZCh4KSxkW3JlXS5hZGQoeCkpfWxldCBBPXRoaXMuZ3JvdXBzOzA9PT1BLmxlbmd0aCYmKEE9W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgSWU9MCxJPUEubGVuZ3RoO0llPEk7KytJZSl7bGV0IHJlPUFbSWVdLGNlPXJlLnN0YXJ0O2ZvcihsZXQgX2U9Y2UsbmU9Y2UrcmUuY291bnQ7X2U8bmU7X2UrPTMpUihpW19lKzBdLGlbX2UrMV0saVtfZSsyXSl9bGV0IEg9bmV3ICQsdGU9bmV3ICQsSz1uZXcgJCxDZT1uZXcgJDtmdW5jdGlvbiBaZShJZSl7Sy5mcm9tQXJyYXkobywzKkllKSxDZS5jb3B5KEspO2xldCBJPWNbSWVdO0guY29weShJKSxILnN1YihLLm11bHRpcGx5U2NhbGFyKEsuZG90KEkpKSkubm9ybWFsaXplKCksdGUuY3Jvc3NWZWN0b3JzKENlLEkpO2xldCBjZT10ZS5kb3QoZFtJZV0pPDA/LTE6MTtsWzQqSWVdPUgueCxsWzQqSWUrMV09SC55LGxbNCpJZSsyXT1ILnosbFs0KkllKzNdPWNlfWZvcihsZXQgSWU9MCxJPUEubGVuZ3RoO0llPEk7KytJZSl7bGV0IHJlPUFbSWVdLGNlPXJlLnN0YXJ0O2ZvcihsZXQgX2U9Y2UsbmU9Y2UrcmUuY291bnQ7X2U8bmU7X2UrPTMpWmUoaVtfZSswXSksWmUoaVtfZSsxXSksWmUoaVtfZSsyXSl9fWNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2lmKHZvaWQgMCE9PWUpe2xldCBpPXRoaXMuZ2V0QXR0cmlidXRlKCJub3JtYWwiKTtpZih2b2lkIDA9PT1pKWk9bmV3IEFyKG5ldyBGbG9hdDMyQXJyYXkoMyplLmNvdW50KSwzKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixpKTtlbHNlIGZvcihsZXQgcD0wLGY9aS5jb3VudDtwPGY7cCsrKWkuc2V0WFlaKHAsMCwwLDApO2xldCByPW5ldyAkLG89bmV3ICQsYT1uZXcgJCxzPW5ldyAkLGw9bmV3ICQsYz1uZXcgJCxkPW5ldyAkLHU9bmV3ICQ7aWYodClmb3IobGV0IHA9MCxmPXQuY291bnQ7cDxmO3ArPTMpe2xldCBtPXQuZ2V0WChwKzApLHk9dC5nZXRYKHArMSksTT10LmdldFgocCsyKTtyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxtKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx5KSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxNKSxkLnN1YlZlY3RvcnMoYSxvKSx1LnN1YlZlY3RvcnMocixvKSxkLmNyb3NzKHUpLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLG0pLGwuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLHkpLGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLE0pLHMuYWRkKGQpLGwuYWRkKGQpLGMuYWRkKGQpLGkuc2V0WFlaKG0scy54LHMueSxzLnopLGkuc2V0WFlaKHksbC54LGwueSxsLnopLGkuc2V0WFlaKE0sYy54LGMueSxjLnopfWVsc2UgZm9yKGxldCBwPTAsZj1lLmNvdW50O3A8ZjtwKz0zKXIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHArMCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCsxKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxwKzIpLGQuc3ViVmVjdG9ycyhhLG8pLHUuc3ViVmVjdG9ycyhyLG8pLGQuY3Jvc3ModSksaS5zZXRYWVoocCswLGQueCxkLnksZC56KSxpLnNldFhZWihwKzEsZC54LGQueSxkLnopLGkuc2V0WFlaKHArMixkLngsZC55LGQueik7dGhpcy5ub3JtYWxpemVOb3JtYWxzKCksaS5uZWVkc1VwZGF0ZT0hMH19bWVyZ2UodCxlKXtpZighdHx8IXQuaXNCdWZmZXJHZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTt2b2lkIDA9PT1lJiYoZT0wLGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogT3ZlcndyaXRpbmcgb3JpZ2luYWwgZ2VvbWV0cnksIHN0YXJ0aW5nIGF0IG9mZnNldD0wLiBVc2UgQnVmZmVyR2VvbWV0cnlVdGlscy5tZXJnZUJ1ZmZlckdlb21ldHJpZXMoKSBmb3IgbG9zc2xlc3MgbWVyZ2UuIikpO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHIgaW4gaSl7aWYodm9pZCAwPT09dC5hdHRyaWJ1dGVzW3JdKWNvbnRpbnVlO2xldCBhPWlbcl0uYXJyYXkscz10LmF0dHJpYnV0ZXNbcl0sbD1zLmFycmF5LGM9cy5pdGVtU2l6ZSplLGQ9TWF0aC5taW4obC5sZW5ndGgsYS5sZW5ndGgtYyk7Zm9yKGxldCB1PTAscD1jO3U8ZDt1KysscCsrKWFbcF09bFt1XX1yZXR1cm4gdGhpc31ub3JtYWxpemVOb3JtYWxzKCl7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtmb3IobGV0IGU9MCxpPXQuY291bnQ7ZTxpO2UrKylBby5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksQW8ubm9ybWFsaXplKCksdC5zZXRYWVooZSxBby54LEFvLnksQW8ueil9dG9Ob25JbmRleGVkKCl7ZnVuY3Rpb24gdChzLGwpe2xldCBjPXMuYXJyYXksZD1zLml0ZW1TaXplLHU9cy5ub3JtYWxpemVkLHA9bmV3IGMuY29uc3RydWN0b3IobC5sZW5ndGgqZCksZj0wLG09MDtmb3IobGV0IHk9MCxNPWwubGVuZ3RoO3k8TTt5Kyspe2Y9cy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP2xbeV0qcy5kYXRhLnN0cmlkZStzLm9mZnNldDpsW3ldKmQ7Zm9yKGxldCB2PTA7djxkO3YrKylwW20rK109Y1tmKytdfXJldHVybiBuZXcgQXIocCxkLHUpfWlmKG51bGw9PT10aGlzLmluZGV4KXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IGU9bmV3IFdpLGk9dGhpcy5pbmRleC5hcnJheSxyPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHMgaW4gcil7bGV0IGM9dChyW3NdLGkpO2Uuc2V0QXR0cmlidXRlKHMsYyl9bGV0IG89dGhpcy5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBzIGluIG8pe2xldCBsPVtdLGM9b1tzXTtmb3IobGV0IGQ9MCx1PWMubGVuZ3RoO2Q8dTtkKyspe2xldCBmPXQoY1tkXSxpKTtsLnB1c2goZil9ZS5tb3JwaEF0dHJpYnV0ZXNbc109bH1lLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7bGV0IGE9dGhpcy5ncm91cHM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzPGw7cysrKXtsZXQgYz1hW3NdO2UuYWRkR3JvdXAoYy5zdGFydCxjLmNvdW50LGMubWF0ZXJpYWxJbmRleCl9cmV0dXJuIGV9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJCdWZmZXJHZW9tZXRyeSIsZ2VuZXJhdG9yOiJCdWZmZXJHZW9tZXRyeS50b0pTT04ifX07aWYodC51dWlkPXRoaXMudXVpZCx0LnR5cGU9dGhpcy50eXBlLCIiIT09dGhpcy5uYW1lJiYodC5uYW1lPXRoaXMubmFtZSksT2JqZWN0LmtleXModGhpcy51c2VyRGF0YSkubGVuZ3RoPjAmJih0LnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHZvaWQgMCE9PXRoaXMucGFyYW1ldGVycyl7bGV0IGw9dGhpcy5wYXJhbWV0ZXJzO2ZvcihsZXQgYyBpbiBsKXZvaWQgMCE9PWxbY10mJih0W2NdPWxbY10pO3JldHVybiB0fXQuZGF0YT17YXR0cmlidXRlczp7fX07bGV0IGU9dGhpcy5pbmRleDtudWxsIT09ZSYmKHQuZGF0YS5pbmRleD17dHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSl9KTtsZXQgaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBsIGluIGkpdC5kYXRhLmF0dHJpYnV0ZXNbbF09aVtsXS50b0pTT04odC5kYXRhKTtsZXQgcj17fSxvPSExO2ZvcihsZXQgbCBpbiB0aGlzLm1vcnBoQXR0cmlidXRlcyl7bGV0IGM9dGhpcy5tb3JwaEF0dHJpYnV0ZXNbbF0sZD1bXTtmb3IobGV0IHU9MCxwPWMubGVuZ3RoO3U8cDt1KyspZC5wdXNoKGNbdV0udG9KU09OKHQuZGF0YSkpO2QubGVuZ3RoPjAmJihyW2xdPWQsbz0hMCl9byYmKHQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM9cix0LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZSk7bGV0IGE9dGhpcy5ncm91cHM7YS5sZW5ndGg+MCYmKHQuZGF0YS5ncm91cHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhKSkpO2xldCBzPXRoaXMuYm91bmRpbmdTcGhlcmU7cmV0dXJuIG51bGwhPT1zJiYodC5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6cy5jZW50ZXIudG9BcnJheSgpLHJhZGl1czpzLnJhZGl1c30pLHR9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IGU9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgaT10LmluZGV4O251bGwhPT1pJiZ0aGlzLnNldEluZGV4KGkuY2xvbmUoZSkpO2xldCByPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gcil0aGlzLnNldEF0dHJpYnV0ZShjLHJbY10uY2xvbmUoZSkpO2xldCBvPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBvKXtsZXQgZD1bXSx1PW9bY107Zm9yKGxldCBwPTAsZj11Lmxlbmd0aDtwPGY7cCsrKWQucHVzaCh1W3BdLmNsb25lKGUpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT1kfXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10Lmdyb3Vwcztmb3IobGV0IGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspe2xldCB1PWFbY107dGhpcy5hZGRHcm91cCh1LnN0YXJ0LHUuY291bnQsdS5tYXRlcmlhbEluZGV4KX1sZXQgcz10LmJvdW5kaW5nQm94O251bGwhPT1zJiYodGhpcy5ib3VuZGluZ0JveD1zLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIG51bGwhPT1sJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx2b2lkIDAhPT10LnBhcmFtZXRlcnMmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtXaS5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgbWVlPW5ldyBNbix6MD1uZXcgU3AsckI9bmV3IHdwLG1wPW5ldyAkLGhwPW5ldyAkLGdwPW5ldyAkLG9CPW5ldyAkLGFCPW5ldyAkLHNCPW5ldyAkLEpEPW5ldyAkLCREPW5ldyAkLGVJPW5ldyAkLHRJPW5ldyAkZSxuST1uZXcgJGUsaUk9bmV3ICRlLGxCPW5ldyAkLHJJPW5ldyAkLGNvPWNsYXNzIGV4dGVuZHMgeml7Y29uc3RydWN0b3IodD1uZXcgV2ksZT1uZXcgU20pe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx2b2lkIDAhPT10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyYmKHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnNsaWNlKCkpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5JiYodGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9T2JqZWN0LmFzc2lnbih7fSx0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSkpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc311cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7bzxhO28rKyl7bGV0IHM9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX1yYXljYXN0KHQsZSl7bGV0IGEsaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRlcmlhbCxvPXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwIT09ciYmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHJCLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksckIuYXBwbHlNYXRyaXg0KG8pLCExIT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShyQikpJiYobWVlLmNvcHkobykuaW52ZXJ0KCksejAuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KG1lZSksbnVsbD09PWkuYm91bmRpbmdCb3h8fCExIT09ejAuaW50ZXJzZWN0c0JveChpLmJvdW5kaW5nQm94KSkpaWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcz1pLmluZGV4LGw9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGM9aS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sZD1pLm1vcnBoVGFyZ2V0c1JlbGF0aXZlLHU9aS5hdHRyaWJ1dGVzLnV2LHA9aS5hdHRyaWJ1dGVzLnV2MixmPWkuZ3JvdXBzLG09aS5kcmF3UmFuZ2U7aWYobnVsbCE9PXMpaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IHk9MCxNPWYubGVuZ3RoO3k8TTt5Kyspe2xldCB2PWZbeV0seD1yW3YubWF0ZXJpYWxJbmRleF07Zm9yKGxldCBIPU1hdGgubWF4KHYuc3RhcnQsbS5zdGFydCksdGU9TWF0aC5taW4ocy5jb3VudCxNYXRoLm1pbih2LnN0YXJ0K3YuY291bnQsbS5zdGFydCttLmNvdW50KSk7SDx0ZTtIKz0zKXtsZXQgSz1zLmdldFgoSCksQ2U9cy5nZXRYKEgrMSksWmU9cy5nZXRYKEgrMik7YT1vSSh0aGlzLHgsdCx6MCxsLGMsZCx1LHAsSyxDZSxaZSksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoSC8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD12Lm1hdGVyaWFsSW5kZXgsZS5wdXNoKGEpKX19ZWxzZSBmb3IobGV0IHY9TWF0aC5tYXgoMCxtLnN0YXJ0KSx4PU1hdGgubWluKHMuY291bnQsbS5zdGFydCttLmNvdW50KTt2PHg7dis9Myl7bGV0IFI9cy5nZXRYKHYpLEE9cy5nZXRYKHYrMSksSD1zLmdldFgodisyKTthPW9JKHRoaXMscix0LHowLGwsYyxkLHUscCxSLEEsSCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3Iodi8zKSxlLnB1c2goYSkpfWVsc2UgaWYodm9pZCAwIT09bClpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgeT0wLE09Zi5sZW5ndGg7eTxNO3krKyl7bGV0IHY9Zlt5XSx4PXJbdi5tYXRlcmlhbEluZGV4XTtmb3IobGV0IEg9TWF0aC5tYXgodi5zdGFydCxtLnN0YXJ0KSx0ZT1NYXRoLm1pbihsLmNvdW50LE1hdGgubWluKHYuc3RhcnQrdi5jb3VudCxtLnN0YXJ0K20uY291bnQpKTtIPHRlO0grPTMpYT1vSSh0aGlzLHgsdCx6MCxsLGMsZCx1LHAsSCxIKzEsSCsyKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihILzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXYubWF0ZXJpYWxJbmRleCxlLnB1c2goYSkpfWVsc2UgZm9yKGxldCB2PU1hdGgubWF4KDAsbS5zdGFydCkseD1NYXRoLm1pbihsLmNvdW50LG0uc3RhcnQrbS5jb3VudCk7djx4O3YrPTMpYT1vSSh0aGlzLHIsdCx6MCxsLGMsZCx1LHAsdix2KzEsdisyKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcih2LzMpLGUucHVzaChhKSl9ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fTtmdW5jdGlvbiBvSShuLHQsZSxpLHIsbyxhLHMsbCxjLGQsdSl7bXAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGMpLGhwLmZyb21CdWZmZXJBdHRyaWJ1dGUocixkKSxncC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsdSk7bGV0IHA9bi5tb3JwaFRhcmdldEluZmx1ZW5jZXM7aWYobyYmcCl7SkQuc2V0KDAsMCwwKSwkRC5zZXQoMCwwLDApLGVJLnNldCgwLDAsMCk7Zm9yKGxldCBtPTAseT1vLmxlbmd0aDttPHk7bSsrKXtsZXQgTT1wW21dLHY9b1ttXTswIT09TSYmKG9CLmZyb21CdWZmZXJBdHRyaWJ1dGUodixjKSxhQi5mcm9tQnVmZmVyQXR0cmlidXRlKHYsZCksc0IuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LHUpLGE/KEpELmFkZFNjYWxlZFZlY3RvcihvQixNKSwkRC5hZGRTY2FsZWRWZWN0b3IoYUIsTSksZUkuYWRkU2NhbGVkVmVjdG9yKHNCLE0pKTooSkQuYWRkU2NhbGVkVmVjdG9yKG9CLnN1YihtcCksTSksJEQuYWRkU2NhbGVkVmVjdG9yKGFCLnN1YihocCksTSksZUkuYWRkU2NhbGVkVmVjdG9yKHNCLnN1YihncCksTSkpKX1tcC5hZGQoSkQpLGhwLmFkZCgkRCksZ3AuYWRkKGVJKX1uLmlzU2tpbm5lZE1lc2gmJihuLmJvbmVUcmFuc2Zvcm0oYyxtcCksbi5ib25lVHJhbnNmb3JtKGQsaHApLG4uYm9uZVRyYW5zZm9ybSh1LGdwKSk7bGV0IGY9ZnVuY3Rpb24obix0LGUsaSxyLG8sYSxzKXtsZXQgbDtpZihsPXQuc2lkZT09PXlvP2kuaW50ZXJzZWN0VHJpYW5nbGUoYSxvLHIsITAscyk6aS5pbnRlcnNlY3RUcmlhbmdsZShyLG8sYSx0LnNpZGUhPT1vXyxzKSxudWxsPT09bClyZXR1cm4gbnVsbDtySS5jb3B5KHMpLHJJLmFwcGx5TWF0cml4NChuLm1hdHJpeFdvcmxkKTtsZXQgYz1lLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhySSk7cmV0dXJuIGM8ZS5uZWFyfHxjPmUuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6ckkuY2xvbmUoKSxvYmplY3Q6bn19KG4sdCxlLGksbXAsaHAsZ3AsbEIpO2lmKGYpe3MmJih0SS5mcm9tQnVmZmVyQXR0cmlidXRlKHMsYyksbkkuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGQpLGlJLmZyb21CdWZmZXJBdHRyaWJ1dGUocyx1KSxmLnV2PWpyLmdldFVWKGxCLG1wLGhwLGdwLHRJLG5JLGlJLG5ldyAkZSkpLGwmJih0SS5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksbkkuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLGQpLGlJLmZyb21CdWZmZXJBdHRyaWJ1dGUobCx1KSxmLnV2Mj1qci5nZXRVVihsQixtcCxocCxncCx0SSxuSSxpSSxuZXcgJGUpKTtsZXQgbT17YTpjLGI6ZCxjOnUsbm9ybWFsOm5ldyAkLG1hdGVyaWFsSW5kZXg6MH07anIuZ2V0Tm9ybWFsKG1wLGhwLGdwLG0ubm9ybWFsKSxmLmZhY2U9bX1yZXR1cm4gZn1jby5wcm90b3R5cGUuaXNNZXNoPSEwO3ZhciBFbT1jbGFzcyBleHRlbmRzIFdpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxvPTEsYT0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpvLGRlcHRoU2VnbWVudHM6YX07bGV0IHM9dGhpcztyPU1hdGguZmxvb3Iociksbz1NYXRoLmZsb29yKG8pLGE9TWF0aC5mbG9vcihhKTtsZXQgbD1bXSxjPVtdLGQ9W10sdT1bXSxwPTAsZj0wO2Z1bmN0aW9uIG0oeSxNLHYseCxSLEEsSCx0ZSxLLENlLFplKXtsZXQgSWU9QS9LLEk9SC9DZSxyZT1BLzIsY2U9SC8yLGZlPXRlLzIsX2U9SysxLG5lPUNlKzEsZGU9MCx1ZT0wLEdlPW5ldyAkO2ZvcihsZXQgTWU9MDtNZTxuZTtNZSsrKXtsZXQgTmU9TWUqSS1jZTtmb3IobGV0IGN0PTA7Y3Q8X2U7Y3QrKylHZVt5XT0oY3QqSWUtcmUpKngsR2VbTV09TmUqUixHZVt2XT1mZSxjLnB1c2goR2UueCxHZS55LEdlLnopLEdlW3ldPTAsR2VbTV09MCxHZVt2XT10ZT4wPzE6LTEsZC5wdXNoKEdlLngsR2UueSxHZS56KSx1LnB1c2goY3QvSyksdS5wdXNoKDEtTWUvQ2UpLGRlKz0xfWZvcihsZXQgTWU9MDtNZTxDZTtNZSsrKWZvcihsZXQgTmU9MDtOZTxLO05lKyspe2xldCB3dD1wK05lK19lKihNZSsxKSxmdD1wKyhOZSsxKStfZSooTWUrMSksT2U9cCsoTmUrMSkrX2UqTWU7bC5wdXNoKHArTmUrX2UqTWUsd3QsT2UpLGwucHVzaCh3dCxmdCxPZSksdWUrPTZ9cy5hZGRHcm91cChmLHVlLFplKSxmKz11ZSxwKz1kZX1tKCJ6IiwieSIsIngiLC0xLC0xLGksZSx0LGEsbywwKSxtKCJ6IiwieSIsIngiLDEsLTEsaSxlLC10LGEsbywxKSxtKCJ4IiwieiIsInkiLDEsMSx0LGksZSxyLGEsMiksbSgieCIsInoiLCJ5IiwxLC0xLHQsaSwtZSxyLGEsMyksbSgieCIsInkiLCJ6IiwxLC0xLHQsZSxpLHIsbyw0KSxtKCJ4IiwieSIsInoiLC0xLC0xLHQsZSwtaSxyLG8sNSksdGhpcy5zZXRJbmRleChsKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBCcihjLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQnIoZCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgQnIodSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgRW0odC53aWR0aCx0LmhlaWdodCx0LmRlcHRoLHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQuZGVwdGhTZWdtZW50cyl9fTtmdW5jdGlvbiBzXyhuKXtsZXQgdD17fTtmb3IobGV0IGUgaW4gbil7dFtlXT17fTtmb3IobGV0IGkgaW4gbltlXSl7bGV0IHI9bltlXVtpXTt0W2VdW2ldPXImJihyLmlzQ29sb3J8fHIuaXNNYXRyaXgzfHxyLmlzTWF0cml4NHx8ci5pc1ZlY3RvcjJ8fHIuaXNWZWN0b3IzfHxyLmlzVmVjdG9yNHx8ci5pc1RleHR1cmV8fHIuaXNRdWF0ZXJuaW9uKT9yLmNsb25lKCk6QXJyYXkuaXNBcnJheShyKT9yLnNsaWNlKCk6cn19cmV0dXJuIHR9ZnVuY3Rpb24gaWEobil7bGV0IHQ9e307Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPXNfKG5bZV0pO2ZvcihsZXQgciBpbiBpKXRbcl09aVtyXX1yZXR1cm4gdH12YXIgcFJlPXtjbG9uZTpzXyxtZXJnZTppYX0sR2Q9Y2xhc3MgZXh0ZW5kcyBSb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLHRoaXMuZnJhZ21lbnRTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7XG59Iix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx2b2lkIDAhPT10JiYodm9pZCAwIT09dC5hdHRyaWJ1dGVzJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1zXyh0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7ZS5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLGUudW5pZm9ybXM9e307Zm9yKGxldCByIGluIHRoaXMudW5pZm9ybXMpe2xldCBhPXRoaXMudW5pZm9ybXNbcl0udmFsdWU7ZS51bmlmb3Jtc1tyXT1hJiZhLmlzVGV4dHVyZT97dHlwZToidCIsdmFsdWU6YS50b0pTT04odCkudXVpZH06YSYmYS5pc0NvbG9yP3t0eXBlOiJjIix2YWx1ZTphLmdldEhleCgpfTphJiZhLmlzVmVjdG9yMj97dHlwZToidjIiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yMz97dHlwZToidjMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yND97dHlwZToidjQiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzTWF0cml4Mz97dHlwZToibTMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzTWF0cml4ND97dHlwZToibTQiLHZhbHVlOmEudG9BcnJheSgpfTp7dmFsdWU6YX19T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgaT17fTtmb3IobGV0IHIgaW4gdGhpcy5leHRlbnNpb25zKSEwPT09dGhpcy5leHRlbnNpb25zW3JdJiYoaVtyXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPWkpLGV9fTtHZC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgQXg9Y2xhc3MgZXh0ZW5kcyB6aXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyBNbix0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IE1uLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IE1ufWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX07QXgucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBvYT1jbGFzcyBleHRlbmRzIEF4e2NvbnN0cnVjdG9yKHQ9NTAsZT0xLGk9LjEscj0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9aSx0aGlzLmZhcj1yLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9ZSx0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgZT0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PTIqRUIqTWF0aC5hdGFuKGUpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oLjUqejMqdGhpcy5mb3YpO3JldHVybi41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL3R9Z2V0RWZmZWN0aXZlRk9WKCl7cmV0dXJuIDIqRUIqTWF0aC5hdGFuKE1hdGgudGFuKC41KnozKnRoaXMuZm92KS90aGlzLnpvb20pfWdldEZpbG1XaWR0aCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX1nZXRGaWxtSGVpZ2h0KCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlL01hdGgubWF4KHRoaXMuYXNwZWN0LDEpfXNldFZpZXdPZmZzZXQodCxlLGkscixvLGEpe3RoaXMuYXNwZWN0PXQvZSxudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1pLHRoaXMudmlldy5vZmZzZXRZPXIsdGhpcy52aWV3LndpZHRoPW8sdGhpcy52aWV3LmhlaWdodD1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PXRoaXMubmVhcixlPXQqTWF0aC50YW4oLjUqejMqdGhpcy5mb3YpL3RoaXMuem9vbSxpPTIqZSxyPXRoaXMuYXNwZWN0Kmksbz0tLjUqcixhPXRoaXMudmlldztpZihudWxsIT09dGhpcy52aWV3JiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGw9YS5mdWxsV2lkdGgsYz1hLmZ1bGxIZWlnaHQ7bys9YS5vZmZzZXRYKnIvbCxlLT1hLm9mZnNldFkqaS9jLHIqPWEud2lkdGgvbCxpKj1hLmhlaWdodC9jfWxldCBzPXRoaXMuZmlsbU9mZnNldDswIT09cyYmKG8rPXQqcy90aGlzLmdldEZpbG1XaWR0aCgpKSx0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKG8sbytyLGUsZS1pLHQsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LmZvdj10aGlzLmZvdixlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsZS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1cyxlLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3QsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlLm9iamVjdC5maWxtR2F1Z2U9dGhpcy5maWxtR2F1Z2UsZS5vYmplY3QuZmlsbU9mZnNldD10aGlzLmZpbG1PZmZzZXQsZX19O29hLnByb3RvdHlwZS5pc1BlcnNwZWN0aXZlQ2FtZXJhPSEwO3ZhciBSeD1jbGFzcyBleHRlbmRzIHppe2NvbnN0cnVjdG9yKHQsZSxpKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsITAhPT1pLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkN1YmVDYW1lcmE6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBhbiBpbnN0YW5jZSBvZiBXZWJHTEN1YmVSZW5kZXJUYXJnZXQgYXMgdGhpcmQgcGFyYW1ldGVyLiIpO3RoaXMucmVuZGVyVGFyZ2V0PWk7bGV0IHI9bmV3IG9hKDkwLDEsdCxlKTtyLmxheWVycz10aGlzLmxheWVycyxyLnVwLnNldCgwLC0xLDApLHIubG9va0F0KG5ldyAkKDEsMCwwKSksdGhpcy5hZGQocik7bGV0IG89bmV3IG9hKDkwLDEsdCxlKTtvLmxheWVycz10aGlzLmxheWVycyxvLnVwLnNldCgwLC0xLDApLG8ubG9va0F0KG5ldyAkKC0xLDAsMCkpLHRoaXMuYWRkKG8pO2xldCBhPW5ldyBvYSg5MCwxLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLDEpLGEubG9va0F0KG5ldyAkKDAsMSwwKSksdGhpcy5hZGQoYSk7bGV0IHM9bmV3IG9hKDkwLDEsdCxlKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsLTEpLHMubG9va0F0KG5ldyAkKDAsLTEsMCkpLHRoaXMuYWRkKHMpO2xldCBsPW5ldyBvYSg5MCwxLHQsZSk7bC5sYXllcnM9dGhpcy5sYXllcnMsbC51cC5zZXQoMCwtMSwwKSxsLmxvb2tBdChuZXcgJCgwLDAsMSkpLHRoaXMuYWRkKGwpO2xldCBjPW5ldyBvYSg5MCwxLHQsZSk7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgJCgwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxlKXtudWxsPT09dGhpcy5wYXJlbnQmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgaT10aGlzLnJlbmRlclRhcmdldCxbcixvLGEscyxsLGNdPXRoaXMuY2hpbGRyZW4sZD10LnhyLmVuYWJsZWQsdT10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgcD1pLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2kudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQoaSwwKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMSksdC5yZW5kZXIoZSxvKSx0LnNldFJlbmRlclRhcmdldChpLDIpLHQucmVuZGVyKGUsYSksdC5zZXRSZW5kZXJUYXJnZXQoaSwzKSx0LnJlbmRlcihlLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KGksNCksdC5yZW5kZXIoZSxsKSxpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXAsdC5zZXRSZW5kZXJUYXJnZXQoaSw1KSx0LnJlbmRlcihlLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KHUpLHQueHIuZW5hYmxlZD1kLGkudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sbF89Y2xhc3MgZXh0ZW5kcyB1b3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8sYSxzLGwsYyxkKXtzdXBlcih0PXZvaWQgMCE9PXQ/dDpbXSxlPXZvaWQgMCE9PWU/ZTpaeCxpLHIsbyxhLHMsbCxjLGQpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07bF8ucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIEFJPWNsYXNzIGV4dGVuZHMgUWF7Y29uc3RydWN0b3IodCxlLGkpe051bWJlci5pc0ludGVnZXIoZSkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLGU9aSksc3VwZXIodCx0LGUpLHRoaXMudGV4dHVyZT1uZXcgbF8odm9pZCAwLChlPWV8fHt9KS5tYXBwaW5nLGUud3JhcFMsZS53cmFwVCxlLm1hZ0ZpbHRlcixlLm1pbkZpbHRlcixlLmZvcm1hdCxlLnR5cGUsZS5hbmlzb3Ryb3B5LGUuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz12b2lkIDAhPT1lLmdlbmVyYXRlTWlwbWFwcyYmZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj12b2lkIDAhPT1lLm1pbkZpbHRlcj9lLm1pbkZpbHRlcjpyYX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGUpe3RoaXMudGV4dHVyZS50eXBlPWUudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PWJhLHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2xldCBpX3VuaWZvcm1zPXt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSxpX3ZlcnRleFNoYWRlcj0iXG5cblx0XHRcdFx0dmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcblxuXHRcdFx0XHR2ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRcdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cblx0XHRcdFx0XHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHRcdFx0XHRcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblxuXHRcdFx0XHR9XG5cdFx0XHQiLGlfZnJhZ21lbnRTaGFkZXI9IlxuXG5cdFx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdFx0dmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApO1xuXG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cblx0XHRcdFx0fVxuXHRcdFx0IixyPW5ldyBFbSg1LDUsNSksbz1uZXcgR2Qoe25hbWU6IkN1YmVtYXBGcm9tRXF1aXJlY3QiLHVuaWZvcm1zOnNfKGlfdW5pZm9ybXMpLHZlcnRleFNoYWRlcjppX3ZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjppX2ZyYWdtZW50U2hhZGVyLHNpZGU6eW8sYmxlbmRpbmc6eXB9KTtvLnVuaWZvcm1zLnRFcXVpcmVjdC52YWx1ZT1lO2xldCBhPW5ldyBjbyhyLG8pLHM9ZS5taW5GaWx0ZXI7cmV0dXJuIGUubWluRmlsdGVyPT09ZUEmJihlLm1pbkZpbHRlcj1yYSksbmV3IFJ4KDEsMTAsdGhpcykudXBkYXRlKHQsYSksZS5taW5GaWx0ZXI9cyxhLmdlb21ldHJ5LmRpc3Bvc2UoKSxhLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzfWNsZWFyKHQsZSxpLHIpe2xldCBvPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7Zm9yKGxldCBhPTA7YTw2O2ErKyl0LnNldFJlbmRlclRhcmdldCh0aGlzLGEpLHQuY2xlYXIoZSxpLHIpO3Quc2V0UmVuZGVyVGFyZ2V0KG8pfX07QUkucHJvdG90eXBlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PSEwO3ZhciBjQj1uZXcgJCxoUmU9bmV3ICQsZ1JlPW5ldyB2byxYbD1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkKDEsMCwwKSxlPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9ZSx0aGlzfXNldENvbXBvbmVudHModCxlLGkscil7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LGUsaSksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1lLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxlLGkpe2xldCByPWNCLnN1YlZlY3RvcnMoaSxlKS5jcm9zcyhoUmUuc3ViVmVjdG9ycyh0LGUpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChyLHQpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7bGV0IHQ9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTtyZXR1cm4gdGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIodCksdGhpcy5jb25zdGFudCo9dCx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLmNvbnN0YW50Kj0tMSx0aGlzLm5vcm1hbC5uZWdhdGUoKSx0aGlzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuZG90KHQpK3RoaXMuY29uc3RhbnR9ZGlzdGFuY2VUb1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQodC5jZW50ZXIpLXQucmFkaXVzfXByb2plY3RQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxlKXtsZXQgaT10LmRlbHRhKGNCKSxyPXRoaXMubm9ybWFsLmRvdChpKTtpZigwPT09cilyZXR1cm4gMD09PXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpP2UuY29weSh0LnN0YXJ0KTpudWxsO2xldCBvPS0odC5zdGFydC5kb3QodGhpcy5ub3JtYWwpK3RoaXMuY29uc3RhbnQpL3I7cmV0dXJuIG88MHx8bz4xP251bGw6ZS5jb3B5KGkpLm11bHRpcGx5U2NhbGFyKG8pLmFkZCh0LnN0YXJ0KX1pbnRlcnNlY3RzTGluZSh0KXtsZXQgZT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KSxpPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuZW5kKTtyZXR1cm4gZTwwJiZpPjB8fGk8MCYmZT4wfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHQuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfWNvcGxhbmFyUG9pbnQodCl7cmV0dXJuIHQuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuY29uc3RhbnQpfWFwcGx5TWF0cml4NCh0LGUpe2xldCBpPWV8fGdSZS5nZXROb3JtYWxNYXRyaXgodCkscj10aGlzLmNvcGxhbmFyUG9pbnQoY0IpLmFwcGx5TWF0cml4NCh0KSxvPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5jb25zdGFudD0tci5kb3QobyksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY29uc3RhbnQtPXQuZG90KHRoaXMubm9ybWFsKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmdC5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtYbC5wcm90b3R5cGUuaXNQbGFuZT0hMDt2YXIgRzA9bmV3IHdwLGFJPW5ldyAkLGNfPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFhsLGU9bmV3IFhsLGk9bmV3IFhsLHI9bmV3IFhsLG89bmV3IFhsLGE9bmV3IFhsKXt0aGlzLnBsYW5lcz1bdCxlLGkscixvLGFdfXNldCh0LGUsaSxyLG8sYSl7bGV0IHM9dGhpcy5wbGFuZXM7cmV0dXJuIHNbMF0uY29weSh0KSxzWzFdLmNvcHkoZSksc1syXS5jb3B5KGkpLHNbM10uY29weShyKSxzWzRdLmNvcHkobyksc1s1XS5jb3B5KGEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWVbaV0uY29weSh0LnBsYW5lc1tpXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7bGV0IGU9dGhpcy5wbGFuZXMsaT10LmVsZW1lbnRzLHI9aVswXSxvPWlbMV0sYT1pWzJdLHM9aVszXSxsPWlbNF0sYz1pWzVdLGQ9aVs2XSx1PWlbN10scD1pWzhdLGY9aVs5XSxtPWlbMTBdLHk9aVsxMV0sTT1pWzEyXSx2PWlbMTNdLHg9aVsxNF0sUj1pWzE1XTtyZXR1cm4gZVswXS5zZXRDb21wb25lbnRzKHMtcix1LWwseS1wLFItTSkubm9ybWFsaXplKCksZVsxXS5zZXRDb21wb25lbnRzKHMrcix1K2wseStwLFIrTSkubm9ybWFsaXplKCksZVsyXS5zZXRDb21wb25lbnRzKHMrbyx1K2MseStmLFIrdikubm9ybWFsaXplKCksZVszXS5zZXRDb21wb25lbnRzKHMtbyx1LWMseS1mLFItdikubm9ybWFsaXplKCksZVs0XS5zZXRDb21wb25lbnRzKHMtYSx1LWQseS1tLFIteCkubm9ybWFsaXplKCksZVs1XS5zZXRDb21wb25lbnRzKHMrYSx1K2QseSttLFIreCkubm9ybWFsaXplKCksdGhpc31pbnRlcnNlY3RzT2JqZWN0KHQpe2xldCBlPXQuZ2VvbWV0cnk7cmV0dXJuIG51bGw9PT1lLmJvdW5kaW5nU3BoZXJlJiZlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEcwLmNvcHkoZS5ib3VuZGluZ1NwaGVyZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShHMCl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gRzAuY2VudGVyLnNldCgwLDAsMCksRzAucmFkaXVzPS43MDcxMDY3ODExODY1NDc2LEcwLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoRzApfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5wbGFuZXMsaT10LmNlbnRlcixyPS10LnJhZGl1cztmb3IobGV0IG89MDtvPDY7bysrKWlmKGVbb10uZGlzdGFuY2VUb1BvaW50KGkpPHIpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKXtsZXQgcj1lW2ldO2lmKGFJLng9ci5ub3JtYWwueD4wP3QubWF4Lng6dC5taW4ueCxhSS55PXIubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksYUkuej1yLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LHIuZGlzdGFuY2VUb1BvaW50KGFJKTwwKXJldHVybiExfXJldHVybiEwfWNvbnRhaW5zUG9pbnQodCl7bGV0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBpPTA7aTw2O2krKylpZihlW2ldLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX07ZnVuY3Rpb24gaHRlKCl7bGV0IG49bnVsbCx0PSExLGU9bnVsbCxpPW51bGw7ZnVuY3Rpb24gcihvLGEpe2UobyxhKSxpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpfXJldHVybntzdGFydDpmdW5jdGlvbigpeyEwIT09dCYmbnVsbCE9PWUmJihpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpLHQ9ITApfSxzdG9wOmZ1bmN0aW9uKCl7bi5jYW5jZWxBbmltYXRpb25GcmFtZShpKSx0PSExfSxzZXRBbmltYXRpb25Mb29wOmZ1bmN0aW9uKG8pe2U9b30sc2V0Q29udGV4dDpmdW5jdGlvbihvKXtuPW99fX1mdW5jdGlvbiBfUmUobix0KXtsZXQgZT10LmlzV2ViR0wyLGk9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihjKXtyZXR1cm4gYy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpLGkuZ2V0KGMpfSxyZW1vdmU6ZnVuY3Rpb24oYyl7Yy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpO2xldCBkPWkuZ2V0KGMpO2QmJihuLmRlbGV0ZUJ1ZmZlcihkLmJ1ZmZlciksaS5kZWxldGUoYykpfSx1cGRhdGU6ZnVuY3Rpb24oYyxkKXtpZihjLmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2xldCBwPWkuZ2V0KGMpO3JldHVybiB2b2lkKCghcHx8cC52ZXJzaW9uPGMudmVyc2lvbikmJmkuc2V0KGMse2J1ZmZlcjpjLmJ1ZmZlcix0eXBlOmMudHlwZSxieXRlc1BlckVsZW1lbnQ6Yy5lbGVtZW50U2l6ZSx2ZXJzaW9uOmMudmVyc2lvbn0pKX1jLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dm9pZCAwPT09dT9pLnNldChjLGZ1bmN0aW9uKGMsZCl7bGV0IHU9Yy5hcnJheSxwPWMudXNhZ2UsZj1uLmNyZWF0ZUJ1ZmZlcigpO24uYmluZEJ1ZmZlcihkLGYpLG4uYnVmZmVyRGF0YShkLHUscCksYy5vblVwbG9hZENhbGxiYWNrKCk7bGV0IG09NTEyNjtyZXR1cm4gdSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT9tPTUxMjY6dSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuIik6dSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P2MuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlP2U/bT01MTMxOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVc2FnZSBvZiBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIFdlYkdMMi4iKTptPTUxMjM6dSBpbnN0YW5jZW9mIEludDE2QXJyYXk/bT01MTIyOnUgaW5zdGFuY2VvZiBVaW50MzJBcnJheT9tPTUxMjU6dSBpbnN0YW5jZW9mIEludDMyQXJyYXk/bT01MTI0OnUgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/bT01MTIwOih1IGluc3RhbmNlb2YgVWludDhBcnJheXx8dSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSYmKG09NTEyMSkse2J1ZmZlcjpmLHR5cGU6bSxieXRlc1BlckVsZW1lbnQ6dS5CWVRFU19QRVJfRUxFTUVOVCx2ZXJzaW9uOmMudmVyc2lvbn19KGMsZCkpOnUudmVyc2lvbjxjLnZlcnNpb24mJihmdW5jdGlvbihjLGQsdSl7bGV0IHA9ZC5hcnJheSxmPWQudXBkYXRlUmFuZ2U7bi5iaW5kQnVmZmVyKHUsYyksLTE9PT1mLmNvdW50P24uYnVmZmVyU3ViRGF0YSh1LDAscCk6KGU/bi5idWZmZXJTdWJEYXRhKHUsZi5vZmZzZXQqcC5CWVRFU19QRVJfRUxFTUVOVCxwLGYub2Zmc2V0LGYuY291bnQpOm4uYnVmZmVyU3ViRGF0YSh1LGYub2Zmc2V0KnAuQllURVNfUEVSX0VMRU1FTlQscC5zdWJhcnJheShmLm9mZnNldCxmLm9mZnNldCtmLmNvdW50KSksZi5jb3VudD0tMSl9KHUuYnVmZmVyLGMsZCksdS52ZXJzaW9uPWMudmVyc2lvbil9fX12YXIga3g9Y2xhc3MgZXh0ZW5kcyBXaXtjb25zdHJ1Y3Rvcih0PTEsZT0xLGk9MSxyPTEpe3N1cGVyKCksdGhpcy50eXBlPSJQbGFuZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOnQsaGVpZ2h0OmUsd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOnJ9O2xldCBvPXQvMixhPWUvMixzPU1hdGguZmxvb3IoaSksbD1NYXRoLmZsb29yKHIpLGM9cysxLGQ9bCsxLHU9dC9zLHA9ZS9sLGY9W10sbT1bXSx5PVtdLE09W107Zm9yKGxldCB2PTA7djxkO3YrKyl7bGV0IHg9dipwLWE7Zm9yKGxldCBSPTA7UjxjO1IrKyltLnB1c2goUip1LW8sLXgsMCkseS5wdXNoKDAsMCwxKSxNLnB1c2goUi9zKSxNLnB1c2goMS12L2wpfWZvcihsZXQgdj0wO3Y8bDt2KyspZm9yKGxldCB4PTA7eDxzO3grKyl7bGV0IEE9eCtjKih2KzEpLEg9eCsxK2MqKHYrMSksdGU9eCsxK2MqdjtmLnB1c2goeCtjKnYsQSx0ZSksZi5wdXNoKEEsSCx0ZSl9dGhpcy5zZXRJbmRleChmKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBCcihtLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgQnIoeSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgQnIoTSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcga3godC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSx2aT17YWxwaGFtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0ZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZztcbiNlbmRpZiIsYWxwaGFtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcbiNlbmRpZiIsYWxwaGF0ZXN0X2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBVEVTVFxuXHRpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDtcbiNlbmRpZiIsYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFURVNUXG5cdHVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0O1xuI2VuZGlmIixhb21hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHRmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uO1xuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEIClcblx0XHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciAqPSBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGRvdE5WLCBhbWJpZW50T2NjbHVzaW9uLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0I2VuZGlmXG4jZW5kaWYiLGFvbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQU9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XG5cdHVuaWZvcm0gZmxvYXQgYW9NYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGJlZ2luX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7IixiZWdpbm5vcm1hbF92ZXJ0ZXg6InZlYzMgb2JqZWN0Tm9ybWFsID0gdmVjMyggbm9ybWFsICk7XG4jaWZkZWYgVVNFX1RBTkdFTlRcblx0dmVjMyBvYmplY3RUYW5nZW50ID0gdmVjMyggdGFuZ2VudC54eXogKTtcbiNlbmRpZiIsYnNkZnM6InZlYzMgQlJERl9MYW1iZXJ0KCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7XG59XG52ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHtcblx0ZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLSA1LjU1NDczICogZG90VkggLSA2Ljk4MzE2ICkgKiBkb3RWSCApO1xuXHRyZXR1cm4gZjAgKiAoIDEuMCAtIGZyZXNuZWwgKSArICggZjkwICogZnJlc25lbCApO1xufVxuZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGljayggZjAsIGY5MCwgZG90VkggKTtcblx0ZmxvYXQgViA9IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggViAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7XG5cdGNvbnN0IGZsb2F0IExVVF9TQ0FMRSA9ICggTFVUX1NJWkUgLSAxLjAgKSAvIExVVF9TSVpFO1xuXHRjb25zdCBmbG9hdCBMVVRfQklBUyA9IDAuNSAvIExVVF9TSVpFO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApO1xuXHR2ZWMyIHV2ID0gdmVjMiggcm91Z2huZXNzLCBzcXJ0KCAxLjAgLSBkb3ROViApICk7XG5cdHV2ID0gdXYgKiBMVVRfU0NBTEUgKyBMVVRfQklBUztcblx0cmV0dXJuIHV2O1xufVxuZmxvYXQgTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIGYgKSB7XG5cdGZsb2F0IGwgPSBsZW5ndGgoIGYgKTtcblx0cmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApO1xufVxudmVjMyBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgdjEsIGNvbnN0IGluIHZlYzMgdjIgKSB7XG5cdGZsb2F0IHggPSBkb3QoIHYxLCB2MiApO1xuXHRmbG9hdCB5ID0gYWJzKCB4ICk7XG5cdGZsb2F0IGEgPSAwLjg1NDM5ODUgKyAoIDAuNDk2NTE1NSArIDAuMDE0NTIwNiAqIHkgKSAqIHk7XG5cdGZsb2F0IGIgPSAzLjQxNzU5NDAgKyAoIDQuMTYxNjcyNCArIHkgKSAqIHk7XG5cdGZsb2F0IHYgPSBhIC8gYjtcblx0ZmxvYXQgdGhldGFfc2ludGhldGEgPSAoIHggPiAwLjAgKSA/IHYgOiAwLjUgKiBpbnZlcnNlc3FydCggbWF4KCAxLjAgLSB4ICogeCwgMWUtNyApICkgLSB2O1xuXHRyZXR1cm4gY3Jvc3MoIHYxLCB2MiApICogdGhldGFfc2ludGhldGE7XG59XG52ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHtcblx0dmVjMyB2MSA9IHJlY3RDb29yZHNbIDEgXSAtIHJlY3RDb29yZHNbIDAgXTtcblx0dmVjMyB2MiA9IHJlY3RDb29yZHNbIDMgXSAtIHJlY3RDb29yZHNbIDAgXTtcblx0dmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTtcblx0aWYoIGRvdCggbGlnaHROb3JtYWwsIFAgLSByZWN0Q29vcmRzWyAwIF0gKSA8IDAuMCApIHJldHVybiB2ZWMzKCAwLjAgKTtcblx0dmVjMyBUMSwgVDI7XG5cdFQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7XG5cdFQyID0gLSBjcm9zcyggTiwgVDEgKTtcblx0bWF0MyBtYXQgPSBtSW52ICogdHJhbnNwb3NlTWF0MyggbWF0MyggVDEsIFQyLCBOICkgKTtcblx0dmVjMyBjb29yZHNbIDQgXTtcblx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTtcblx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTtcblx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcblx0Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcblx0Y29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XG5cdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApO1xuXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcblx0Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XG5cdHZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XG5cdGZsb2F0IHJlc3VsdCA9IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggdmVjdG9yRm9ybUZhY3RvciApO1xuXHRyZXR1cm4gdmVjMyggcmVzdWx0ICk7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MgKSB7XG5cdHZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7XG5cdGZsb2F0IEcgPSBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICk7XG5cdGZsb2F0IEQgPSBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzcywgZG90TkggKTtcblx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XG59XG4jaWYgZGVmaW5lZCggVVNFX1NIRUVOIClcbmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHtcblx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcblx0ZmxvYXQgaW52QWxwaGEgPSAxLjAgLyBhbHBoYTtcblx0ZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IO1xuXHRmbG9hdCBzaW4yaCA9IG1heCggMS4wIC0gY29zMmgsIDAuMDA3ODEyNSApO1xuXHRyZXR1cm4gKCAyLjAgKyBpbnZBbHBoYSApICogcG93KCBzaW4yaCwgaW52QWxwaGEgKiAwLjUgKSAvICggMi4wICogUEkgKTtcbn1cbmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkge1xuXHRyZXR1cm4gc2F0dXJhdGUoIDEuMCAvICggNC4wICogKCBkb3ROTCArIGRvdE5WIC0gZG90TkwgKiBkb3ROViApICkgKTtcbn1cbnZlYzMgQlJERl9TaGVlbiggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgdmVjMyBzaGVlbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGVlblJvdWdobmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IEQgPSBEX0NoYXJsaWUoIHNoZWVuUm91Z2huZXNzLCBkb3ROSCApO1xuXHRmbG9hdCBWID0gVl9OZXViZWx0KCBkb3ROViwgZG90TkwgKTtcblx0cmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7XG59XG4jZW5kaWYiLGJ1bXBtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9CVU1QTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7XG5cdHVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlO1xuXHR2ZWMyIGRIZHh5X2Z3ZCgpIHtcblx0XHR2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7XG5cdFx0dmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApO1xuXHRcdGZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDtcblx0XHRmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDtcblx0XHRmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDtcblx0XHRyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTtcblx0fVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5LCBmbG9hdCBmYWNlRGlyZWN0aW9uICkge1xuXHRcdHZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7XG5cdFx0dmVjMyB2TiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7XG5cdFx0dmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApO1xuXHRcdGZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICkgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdHZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xuXHRcdHJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTtcblx0fVxuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2ZWM0IHBsYW5lO1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0aWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgPSB0cnVlO1xuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0XHRmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XG5cdFx0XHRwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0XHRjbGlwcGVkID0gKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApICYmIGNsaXBwZWQ7XG5cdFx0fVxuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdFx0aWYgKCBjbGlwcGVkICkgZGlzY2FyZDtcblx0I2VuZGlmXG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247XG5cdHVuaWZvcm0gdmVjNCBjbGlwcGluZ1BsYW5lc1sgTlVNX0NMSVBQSU5HX1BMQU5FUyBdO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuI2VuZGlmIixjb2xvcl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXG5cdGRpZmZ1c2VDb2xvciAqPSB2Q29sb3I7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKVxuXHRkaWZmdXNlQ29sb3IucmdiICo9IHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXG5cdHZhcnlpbmcgdmVjNCB2Q29sb3I7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKVxuXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXG5cdHZhcnlpbmcgdmVjNCB2Q29sb3I7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXG5cdHZDb2xvciA9IHZlYzQoIDEuMCApO1xuI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKVxuXHR2Q29sb3IgPSB2ZWMzKCAxLjAgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DT0xPUlxuXHR2Q29sb3IgKj0gY29sb3I7XG4jZW5kaWZcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUlxuXHR2Q29sb3IueHl6ICo9IGluc3RhbmNlQ29sb3IueHl6O1xuI2VuZGlmIixjb21tb246IiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTNcbiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxuI2RlZmluZSB3aGl0ZUNvbXBsZW1lbnQoIGEgKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBtYXgzKCBjb25zdCBpbiB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH1cbmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9XG5oaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkge1xuXHRjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7XG5cdGhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApO1xuXHRyZXR1cm4gZnJhY3QoIHNpbiggc24gKSAqIGMgKTtcbn1cbiNpZmRlZiBISUdIX1BSRUNJU0lPTlxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfVxuI2Vsc2Vcblx0ZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkge1xuXHRcdGZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7XG5cdFx0cmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50O1xuXHR9XG4jZW5kaWZcbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtcbn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWw7XG4jZW5kaWZcbn07XG52ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcbn1cbnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTtcbn1cbm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkge1xuXHRtYXQzIHRtcDtcblx0dG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7XG5cdHRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApO1xuXHR0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtcblx0cmV0dXJuIHRtcDtcbn1cbmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7XG5cdHZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTtcblx0cmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7XG59XG5ib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHtcblx0cmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wO1xufVxudmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHtcblx0ZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdGZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTtcblx0cmV0dXJuIHZlYzIoIHUsIHYgKTtcbn0iLGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudDoiI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0I2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wXG5cdCNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMFxuXHQjZGVmaW5lIGN1YmVVVl9tYXhUaWxlU2l6ZSAyNTYuMFxuXHQjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wXG5cdGZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkge1xuXHRcdHZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmYWNlID0gLSAxLjA7XG5cdFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZTtcblx0fVxuXHR2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHtcblx0XHR2ZWMyIHV2O1xuXHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xuXHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXHRcdFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XG5cdFx0fVxuXHRcdHJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7XG5cdH1cblx0dmVjMyBiaWxpbmVhckN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBkaXJlY3Rpb24sIGZsb2F0IG1pcEludCApIHtcblx0XHRmbG9hdCBmYWNlID0gZ2V0RmFjZSggZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgZmlsdGVySW50ID0gbWF4KCBjdWJlVVZfbWluTWlwTGV2ZWwgLSBtaXBJbnQsIDAuMCApO1xuXHRcdG1pcEludCA9IG1heCggbWlwSW50LCBjdWJlVVZfbWluTWlwTGV2ZWwgKTtcblx0XHRmbG9hdCBmYWNlU2l6ZSA9IGV4cDIoIG1pcEludCApO1xuXHRcdGZsb2F0IHRleGVsU2l6ZSA9IDEuMCAvICggMy4wICogY3ViZVVWX21heFRpbGVTaXplICk7XG5cdFx0dmVjMiB1diA9IGdldFVWKCBkaXJlY3Rpb24sIGZhY2UgKSAqICggZmFjZVNpemUgLSAxLjAgKSArIDAuNTtcblx0XHRpZiAoIGZhY2UgPiAyLjAgKSB7XG5cdFx0XHR1di55ICs9IGZhY2VTaXplO1xuXHRcdFx0ZmFjZSAtPSAzLjA7XG5cdFx0fVxuXHRcdHV2LnggKz0gZmFjZSAqIGZhY2VTaXplO1xuXHRcdGlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkge1xuXHRcdFx0dXYueSArPSAyLjAgKiBjdWJlVVZfbWF4VGlsZVNpemU7XG5cdFx0fVxuXHRcdHV2LnkgKz0gZmlsdGVySW50ICogMi4wICogY3ViZVVWX21pblRpbGVTaXplO1xuXHRcdHV2LnggKz0gMy4wICogbWF4KCAwLjAsIGN1YmVVVl9tYXhUaWxlU2l6ZSAtIDIuMCAqIGZhY2VTaXplICk7XG5cdFx0dXYgKj0gdGV4ZWxTaXplO1xuXHRcdHJldHVybiB0ZXh0dXJlMkQoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdH1cblx0I2RlZmluZSByMCAxLjBcblx0I2RlZmluZSB2MCAwLjMzOVxuXHQjZGVmaW5lIG0wIC0gMi4wXG5cdCNkZWZpbmUgcjEgMC44XG5cdCNkZWZpbmUgdjEgMC4yNzZcblx0I2RlZmluZSBtMSAtIDEuMFxuXHQjZGVmaW5lIHI0IDAuNFxuXHQjZGVmaW5lIHY0IDAuMDQ2XG5cdCNkZWZpbmUgbTQgMi4wXG5cdCNkZWZpbmUgcjUgMC4zMDVcblx0I2RlZmluZSB2NSAwLjAxNlxuXHQjZGVmaW5lIG01IDMuMFxuXHQjZGVmaW5lIHI2IDAuMjFcblx0I2RlZmluZSB2NiAwLjAwMzhcblx0I2RlZmluZSBtNiA0LjBcblx0ZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSAwLjA7XG5cdFx0aWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7XG5cdFx0XHRtaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkge1xuXHRcdFx0bWlwID0gKCByMSAtIHJvdWdobmVzcyApICogKCBtNCAtIG0xICkgLyAoIHIxIC0gcjQgKSArIG0xO1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNSApIHtcblx0XHRcdG1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7XG5cdFx0XHRtaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1pcCA9IC0gMi4wICogbG9nMiggMS4xNiAqIHJvdWdobmVzcyApO1x0XHR9XG5cdFx0cmV0dXJuIG1pcDtcblx0fVxuXHR2ZWM0IHRleHR1cmVDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgc2FtcGxlRGlyLCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdFx0ZmxvYXQgbWlwID0gY2xhbXAoIHJvdWdobmVzc1RvTWlwKCByb3VnaG5lc3MgKSwgbTAsIGN1YmVVVl9tYXhNaXBMZXZlbCApO1xuXHRcdGZsb2F0IG1pcEYgPSBmcmFjdCggbWlwICk7XG5cdFx0ZmxvYXQgbWlwSW50ID0gZmxvb3IoIG1pcCApO1xuXHRcdHZlYzMgY29sb3IwID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKTtcblx0XHRpZiAoIG1pcEYgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTtcblx0XHRcdHJldHVybiB2ZWM0KCBtaXgoIGNvbG9yMCwgY29sb3IxLCBtaXBGICksIDEuMCApO1xuXHRcdH1cblx0fVxuI2VuZGlmIixkZWZhdWx0bm9ybWFsX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDtcbiNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xuXHRtYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApO1xuXHR0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2VuZGlmXG50cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2lmZGVmIEZMSVBfU0lERURcblx0dHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RBTkdFTlRcblx0dmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAoIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdHRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7XG5cdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhcztcbiNlbmRpZiIsZGlzcGxhY2VtZW50bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dHJhbnNmb3JtZWQgKz0gbm9ybWFsaXplKCBvYmplY3ROb3JtYWwgKSAqICggdGV4dHVyZTJEKCBkaXNwbGFjZW1lbnRNYXAsIHZVdiApLnggKiBkaXNwbGFjZW1lbnRTY2FsZSArIGRpc3BsYWNlbWVudEJpYXMgKTtcbiNlbmRpZiIsZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdHRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjtcbiNlbmRpZiIsZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDtcbiNlbmRpZiIsZW5jb2RpbmdzX2ZyYWdtZW50OiJnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb091dHB1dFRleGVsKCBnbF9GcmFnQ29sb3IgKTsiLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OiJ2ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG52ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApO1xufSIsZW52bWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dmVjMyBjYW1lcmFUb0ZyYWc7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdH1cblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbHNlXG5cdFx0dmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7XG5cdCNlbHNlXG5cdFx0dmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApO1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKVxuXHRcdG91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTtcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7XG5cdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdCNlbmRpZlxuXHRcbiNlbmRpZiIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKVxuXHRcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0XG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApXG5cdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZSQUNUSU9OXG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuXHR2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHdvcmxkTm9ybWFsLCAxLjAgKTtcblx0XHRcdHJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHZlYzMoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdHZlYzMgZ2V0SUJMUmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHQjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWM7XG5cdFx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0XHRyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTtcblx0XHRcdFx0cmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHJlZmxlY3RWZWMgPSByZWZyYWN0KCAtIHZpZXdEaXIsIG5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCByb3VnaG5lc3MgKTtcblx0XHRcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB2ZWMzKCAwLjAgKTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmIixlbnZtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcblx0I2Vsc2Vcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4O1xuXHRcdGlmICggaXNPcnRob2dyYXBoaWMgKSB7XG5cdFx0XHRjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2UmVmbGVjdCA9IHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixmb2dfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuXHR2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejtcbiNlbmRpZiIsZm9nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuXHR2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDtcbiNlbmRpZiIsZm9nX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHRmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBmb2dGYWN0b3IgPSBzbW9vdGhzdGVwKCBmb2dOZWFyLCBmb2dGYXIsIHZGb2dEZXB0aCApO1xuXHQjZW5kaWZcblx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApO1xuI2VuZGlmIixmb2dfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0dW5pZm9ybSB2ZWMzIGZvZ0NvbG9yO1xuXHR2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDtcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0Zhcjtcblx0I2VuZGlmXG4jZW5kaWYiLGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfR1JBRElFTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7XG4jZW5kaWZcbnZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHtcblx0ZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTtcblx0dmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTtcblx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHRcdHJldHVybiB2ZWMzKCB0ZXh0dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnIgKTtcblx0I2Vsc2Vcblx0XHRyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xuXHQjZW5kaWZcbn0iLGxpZ2h0bWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlO1xuI2VuZGlmIixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIixsaWdodHNfbGFtYmVydF92ZXJ0ZXg6InZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApO1xuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5nZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTtcbkdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5O1xuYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5iYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDtcbmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjtcbnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7XG52SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCApO1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7XG5cdHZJbmRpcmVjdEJhY2sgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbmZsb2F0IGRvdE5MO1xudmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG52SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xudkluZGlyZWN0RnJvbnQgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApO1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2SW5kaXJlY3RCYWNrICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTtcbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkluZGlyZWN0QmFjayArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmIixsaWdodHNfcGFyc19iZWdpbjoidW5pZm9ybSBib29sIHJlY2VpdmVTaGFkb3c7XG51bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7XG51bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdO1xudmVjMyBzaEdldElycmFkaWFuY2VBdCggaW4gdmVjMyBub3JtYWwsIGluIHZlYzMgc2hDb2VmZmljaWVudHNbIDkgXSApIHtcblx0ZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejtcblx0dmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxudmVjMyBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBsaWdodFByb2JlWyA5IF0sIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApO1xuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxuZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG5cdCNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApXG5cdFx0ZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApO1xuXHRcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7XG5cdFx0XHRkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGRpc3RhbmNlRmFsbG9mZjtcblx0I2Vsc2Vcblx0XHRpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuXHRcdH1cblx0XHRyZXR1cm4gMS4wO1xuXHQjZW5kaWZcbn1cbmZsb2F0IGdldFNwb3RBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgY29uZUNvc2luZSwgY29uc3QgaW4gZmxvYXQgcGVudW1icmFDb3NpbmUsIGNvbnN0IGluIGZsb2F0IGFuZ2xlQ29zaW5lICkge1xuXHRyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7XG59XG4jaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHR9O1xuXHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07XG5cdHZvaWQgZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGNvbnN0IGluIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7XG5cdFx0bGlnaHQuY29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yO1xuXHRcdGxpZ2h0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uO1xuXHRcdGxpZ2h0LnZpc2libGUgPSB0cnVlO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUG9pbnRMaWdodCB7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHR9O1xuXHR1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRQb2ludExpZ2h0SW5mbyggY29uc3QgaW4gUG9pbnRMaWdodCBwb2ludExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBwb2ludExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdGxpZ2h0LmNvbG9yID0gcG9pbnRMaWdodC5jb2xvcjtcblx0XHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBwb2ludExpZ2h0LmRpc3RhbmNlLCBwb2ludExpZ2h0LmRlY2F5ICk7XG5cdFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRzdHJ1Y3QgU3BvdExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdFx0ZmxvYXQgY29uZUNvcztcblx0XHRmbG9hdCBwZW51bWJyYUNvcztcblx0fTtcblx0dW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07XG5cdHZvaWQgZ2V0U3BvdExpZ2h0SW5mbyggY29uc3QgaW4gU3BvdExpZ2h0IHNwb3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgPSBkb3QoIGxpZ2h0LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IHNwb3RBdHRlbnVhdGlvbiA9IGdldFNwb3RBdHRlbnVhdGlvbiggc3BvdExpZ2h0LmNvbmVDb3MsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgYW5nbGVDb3MgKTtcblx0XHRpZiAoIHNwb3RBdHRlbnVhdGlvbiA+IDAuMCApIHtcblx0XHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRcdGxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uO1xuXHRcdFx0bGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcblx0XHRcdGxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7XG5cdFx0XHRsaWdodC52aXNpYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDBcblx0c3RydWN0IFJlY3RBcmVhTGlnaHQge1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aDtcblx0XHR2ZWMzIGhhbGZIZWlnaHQ7XG5cdH07XG5cdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xO1x0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7XG5cdHVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTtcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0c3RydWN0IEhlbWlzcGhlcmVMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBza3lDb2xvcjtcblx0XHR2ZWMzIGdyb3VuZENvbG9yO1xuXHR9O1xuXHR1bmlmb3JtIEhlbWlzcGhlcmVMaWdodCBoZW1pc3BoZXJlTGlnaHRzWyBOVU1fSEVNSV9MSUdIVFMgXTtcblx0dmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdHJldHVybiBpcnJhZGlhbmNlO1xuXHR9XG4jZW5kaWYiLGxpZ2h0c190b29uX2ZyYWdtZW50OiJUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOyIsbGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5zdHJ1Y3QgVG9vbk1hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG59O1xudm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfVG9vblxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX1Rvb25cbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVx0KDApIixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6IkJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5tYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7XG5tYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyA9IHNoaW5pbmVzcztcbm1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGggPSBzcGVjdWxhclN0cmVuZ3RoOyIsbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHR2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0IHNwZWN1bGFyU2hpbmluZXNzO1xuXHRmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xufTtcbnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfQmxpbm5QaG9uZ1xuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmdcbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVx0KDApIixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6IlBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTtcbnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTtcbmZsb2F0IGdlb21ldHJ5Um91Z2huZXNzID0gbWF4KCBtYXgoIGR4eS54LCBkeHkueSApLCBkeHkueiApO1xubWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcbm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTtcbiNpZmRlZiBJT1Jcblx0I2lmZGVmIFNQRUNVTEFSXG5cdFx0ZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTtcblx0XHR2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yO1xuXHRcdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHRcdHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJJbnRlbnNpdHlNYXAsIHZVdiApLmE7XG5cdFx0I2VuZGlmXG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUkNPTE9STUFQXG5cdFx0XHRzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiO1xuXHRcdCNlbmRpZlxuXHRcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IDEuMDtcblx0XHR2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSB2ZWMzKCAxLjAgKTtcblx0XHRtYXRlcmlhbC5zcGVjdWxhckY5MCA9IDEuMDtcblx0I2VuZGlmXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZWxzZVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHRtYXRlcmlhbC5zcGVjdWxhckY5MCA9IDEuMDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0O1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBjbGVhcmNvYXRSb3VnaG5lc3M7XG5cdG1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApO1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdFx0bWF0ZXJpYWwuY2xlYXJjb2F0ICo9IHRleHR1cmUyRCggY2xlYXJjb2F0TWFwLCB2VXYgKS54O1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55O1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApO1x0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWF4KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDAuMDUyNSApO1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHRtYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjtcblx0I2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQXG5cdFx0bWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjtcblx0I2VuZGlmXG5cdG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTtcblx0I2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUFxuXHRcdG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7XG5cdCNlbmRpZlxuI2VuZGlmIixsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoic3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcblx0ZmxvYXQgcm91Z2huZXNzO1xuXHR2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0IHNwZWN1bGFyRjkwO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGZsb2F0IGNsZWFyY29hdDtcblx0XHRmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG5cdFx0dmVjMyBjbGVhcmNvYXRGMDtcblx0XHRmbG9hdCBjbGVhcmNvYXRGOTA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0dmVjMyBzaGVlbkNvbG9yO1xuXHRcdGZsb2F0IHNoZWVuUm91Z2huZXNzO1xuXHQjZW5kaWZcbn07XG52ZWMzIGNsZWFyY29hdFNwZWN1bGFyID0gdmVjMyggMC4wICk7XG52ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcbmZsb2F0IElCTFNoZWVuQlJERiggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0ZmxvYXQgcjIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG5cdGZsb2F0IGEgPSByb3VnaG5lc3MgPCAwLjI1ID8gLTMzOS4yICogcjIgKyAxNjEuNCAqIHJvdWdobmVzcyAtIDI1LjkgOiAtOC40OCAqIHIyICsgMTQuMyAqIHJvdWdobmVzcyAtIDkuOTU7XG5cdGZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43Mjtcblx0ZmxvYXQgREcgPSBleHAoIGEgKiBkb3ROViArIGIgKSArICggcm91Z2huZXNzIDwgMC4yNSA/IDAuMCA6IDAuMSAqICggcm91Z2huZXNzIC0gMC4yNSApICk7XG5cdHJldHVybiBzYXR1cmF0ZSggREcgKiBSRUNJUFJPQ0FMX1BJICk7XG59XG52ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dztcblx0cmV0dXJuIGZhYjtcbn1cbnZlYzMgRW52aXJvbm1lbnRCUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHRyZXR1cm4gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTtcbn1cbnZvaWQgY29tcHV0ZU11bHRpc2NhdHRlcmluZyggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBpbm91dCB2ZWMzIHNpbmdsZVNjYXR0ZXIsIGlub3V0IHZlYzMgbXVsdGlTY2F0dGVyICkge1xuXHR2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0dmVjMyBGc3NFc3MgPSBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xuXHRmbG9hdCBFc3MgPSBmYWIueCArIGZhYi55O1xuXHRmbG9hdCBFbXMgPSAxLjAgLSBFc3M7XG5cdHZlYzMgRmF2ZyA9IHNwZWN1bGFyQ29sb3IgKyAoIDEuMCAtIHNwZWN1bGFyQ29sb3IgKSAqIDAuMDQ3NjE5O1x0dmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7XG5cdHNpbmdsZVNjYXR0ZXIgKz0gRnNzRXNzO1xuXHRtdWx0aVNjYXR0ZXIgKz0gRm1zICogRW1zO1xufVxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHR2b2lkIFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbCggY29uc3QgaW4gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IG1hdGVyaWFsLnJvdWdobmVzcztcblx0XHR2ZWMzIHJlY3RDb29yZHNbIDQgXTtcblx0XHRyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XHRcdHJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdFx0dmVjNCB0MSA9IHRleHR1cmUyRCggbHRjXzEsIHV2ICk7XG5cdFx0dmVjNCB0MiA9IHRleHR1cmUyRCggbHRjXzIsIHV2ICk7XG5cdFx0bWF0MyBtSW52ID0gbWF0Myhcblx0XHRcdHZlYzMoIHQxLngsIDAsIHQxLnkgKSxcblx0XHRcdHZlYzMoICAgIDAsIDEsICAgIDAgKSxcblx0XHRcdHZlYzMoIHQxLnosIDAsIHQxLncgKVxuXHRcdCk7XG5cdFx0dmVjMyBmcmVzbmVsID0gKCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICogdDIueCArICggdmVjMyggMS4wICkgLSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICkgKiB0Mi55ICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIGZyZXNuZWwgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEuMCApLCByZWN0Q29vcmRzICk7XG5cdH1cbiNlbmRpZlxudm9pZCBSRV9EaXJlY3RfUGh5c2ljYWwoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRmbG9hdCBkb3ROTGNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRcdHZlYzMgY2NJcnJhZGlhbmNlID0gZG90TkxjYyAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdGNsZWFyY29hdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0c2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2xlYXJjb2F0UmFkaWFuY2UgKiBFbnZpcm9ubWVudEJSREYoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0c2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApO1xuXHQjZW5kaWZcblx0dmVjMyBzaW5nbGVTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XG5cdHZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XG5cdHZlYzMgY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlID0gaXJyYWRpYW5jZSAqIFJFQ0lQUk9DQUxfUEk7XG5cdGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcywgc2luZ2xlU2NhdHRlcmluZywgbXVsdGlTY2F0dGVyaW5nICk7XG5cdHZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSByYWRpYW5jZSAqIHNpbmdsZVNjYXR0ZXJpbmc7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfUGh5c2ljYWxcbiNkZWZpbmUgUkVfRGlyZWN0X1JlY3RBcmVhXHRcdFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0U3BlY3VsYXJcdFx0UkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbFxuZmxvYXQgY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApO1xufSIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOiJcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdO1xuXHRcdGdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIClcblx0XHRzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKVxuXHRcdGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhIClcblx0UmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdCNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKVxuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0XHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0XHRpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0fVxuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHZlYzMgcmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjbGVhcmNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuI2VuZGlmIixsaWdodHNfZnJhZ21lbnRfbWFwczoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0bGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJO1xuXHRcdCNlbmRpZlxuXHRcdGlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlO1xuXHQjZW5kaWZcblx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApICYmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdGlibElycmFkaWFuY2UgKz0gZ2V0SUJMSXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsICk7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRyYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9lbmQ6IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHRSRV9JbmRpcmVjdERpZmZ1c2UoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRSRV9JbmRpcmVjdFNwZWN1bGFyKCByYWRpYW5jZSwgaWJsSXJyYWRpYW5jZSwgY2xlYXJjb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0Z2xfRnJhZ0RlcHRoRVhUID0gdklzUGVyc3BlY3RpdmUgPT0gMC4wID8gZ2xfRnJhZ0Nvb3JkLnogOiBsb2cyKCB2RnJhZ0RlcHRoICkgKiBsb2dEZXB0aEJ1ZkZDICogMC41O1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApXG5cdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcblx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHR2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0XHR2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcblx0I2VuZGlmXG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHRcdHZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApO1xuXHQjZWxzZVxuXHRcdGlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkge1xuXHRcdFx0Z2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wO1xuXHRcdFx0Z2xfUG9zaXRpb24ueiAqPSBnbF9Qb3NpdGlvbi53O1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLG1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApO1xuXHQjaWZkZWYgREVDT0RFX1ZJREVPX1RFWFRVUkVcblx0XHRzYW1wbGVkRGlmZnVzZUNvbG9yID0gdmVjNCggbWl4KCBwb3coIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiICogMC45NDc4NjcyOTg2ICsgdmVjMyggMC4wNTIxMzI3MDE0ICksIHZlYzMoIDIuNCApICksIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLncgKTtcblx0I2VuZGlmXG5cdGRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yO1xuI2VuZGlmIixtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmIixtYXBfcGFydGljbGVfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfTUFQXG5cdGRpZmZ1c2VDb2xvciAqPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6ImZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzcztcbiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7XG5cdG1ldGFsbmVzc0ZhY3RvciAqPSB0ZXhlbE1ldGFsbmVzcy5iO1xuI2VuZGlmIixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XG5cdCNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRVxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHtcblx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XG5cdFx0fVxuXHQjZWxzZVxuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0XHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0I2VuZGlmXG4jZW5kaWYiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdO1xuXHRcdHVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTtcblx0XHR1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7XG5cdFx0dmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHtcblx0XHRcdGZsb2F0IHRleGVsSW5kZXggPSBmbG9hdCggdmVydGV4SW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKTtcblx0XHRcdGZsb2F0IHkgPSBmbG9vciggdGV4ZWxJbmRleCAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnggKTtcblx0XHRcdGZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7XG5cdFx0XHR2ZWMzIG1vcnBoVVYgPSB2ZWMzKCAoIHggKyAwLjUgKSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLngsIHkgLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS55LCBtb3JwaFRhcmdldEluZGV4ICk7XG5cdFx0XHRyZXR1cm4gdGV4dHVyZSggbW9ycGhUYXJnZXRzVGV4dHVyZSwgbW9ycGhVViApLnh5ejtcblx0XHR9XG5cdCNlbHNlXG5cdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgOCBdO1xuXHRcdCNlbHNlXG5cdFx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHR0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XG5cdCNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRVxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHtcblx0XHRcdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHRcdFx0XHRpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMSApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHRpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XG5cdFx0XHQjZW5kaWZcblx0XHR9XG5cdCNlbHNlXG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG5cdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xuXHRcdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ2ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07XG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLG5vcm1hbF9mcmFnbWVudF9iZWdpbjoiZmxvYXQgZmFjZURpcmVjdGlvbiA9IGdsX0Zyb250RmFjaW5nID8gMS4wIDogLSAxLjA7XG4jaWZkZWYgRkxBVF9TSEFERURcblx0dmVjMyBmZHggPSB2ZWMzKCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeCggdlZpZXdQb3NpdGlvbi55ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTtcbiNlbHNlXG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgPSBub3JtYWwgKiBmYWNlRGlyZWN0aW9uO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApO1xuXHRcdHZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdFx0Yml0YW5nZW50ID0gYml0YW5nZW50ICogZmFjZURpcmVjdGlvbjtcblx0XHQjZW5kaWZcblx0XHQjaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIClcblx0XHRcdG1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmXG52ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsOyIsbm9ybWFsX2ZyYWdtZW50X21hcHM6IiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVBcblx0bm9ybWFsID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRub3JtYWwgPSAtIG5vcm1hbDtcblx0I2VuZGlmXG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgPSBub3JtYWwgKiBmYWNlRGlyZWN0aW9uO1xuXHQjZW5kaWZcblx0bm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTtcbiNlbGlmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHRtYXBOLnh5ICo9IG5vcm1hbFNjYWxlO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRub3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBtYXBOICk7XG5cdCNlbHNlXG5cdFx0bm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7XG5cdCNlbmRpZlxuI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKVxuXHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsQXJiKCAtIHZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCksIGZhY2VEaXJlY3Rpb24gKTtcbiNlbmRpZiIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6IiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWYiLG5vcm1hbF9wYXJzX3ZlcnRleDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX3ZlcnRleDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0dkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcblx0I2VuZGlmXG4jZW5kaWYiLG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTtcbiNlbmRpZlxuI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4O1xuI2VuZGlmXG4jaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4sIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7XG5cdFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcblx0XHR2ZWMzIE4gPSBzdXJmX25vcm07XG5cdFx0dmVjMyBxMXBlcnAgPSBjcm9zcyggcTEsIE4gKTtcblx0XHR2ZWMzIHEwcGVycCA9IGNyb3NzKCBOLCBxMCApO1xuXHRcdHZlYzMgVCA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7XG5cdFx0dmVjMyBCID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTtcblx0XHRmbG9hdCBkZXQgPSBtYXgoIGRvdCggVCwgVCApLCBkb3QoIEIsIEIgKSApO1xuXHRcdGZsb2F0IHNjYWxlID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApO1xuXHRcdHJldHVybiBub3JtYWxpemUoIFQgKiAoIG1hcE4ueCAqIHNjYWxlICkgKyBCICogKCBtYXBOLnkgKiBzY2FsZSApICsgTiAqIG1hcE4ueiApO1xuXHR9XG4jZW5kaWYiLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW46IiNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdHZlYzMgY2xlYXJjb2F0Tm9ybWFsID0gZ2VvbWV0cnlOb3JtYWw7XG4jZW5kaWYiLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHZlYzMgY2xlYXJjb2F0TWFwTiA9IHRleHR1cmUyRCggY2xlYXJjb2F0Tm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdGNsZWFyY29hdE1hcE4ueHkgKj0gY2xlYXJjb2F0Tm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTtcblx0I2Vsc2Vcblx0XHRjbGVhcmNvYXROb3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBjbGVhcmNvYXROb3JtYWwsIGNsZWFyY29hdE1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZW5kaWYiLGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRSb3VnaG5lc3NNYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBjbGVhcmNvYXROb3JtYWxTY2FsZTtcbiNlbmRpZiIsb3V0cHV0X2ZyYWdtZW50OiIjaWZkZWYgT1BBUVVFXG5kaWZmdXNlQ29sb3IuYSA9IDEuMDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cbmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xO1xuI2VuZGlmXG5nbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApOyIscGFja2luZzoidmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTtcbn1cbnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkge1xuXHRyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDtcbn1cbmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAvIDI1Ni47XG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApO1xuY29uc3QgdmVjNCBVbnBhY2tGYWN0b3JzID0gVW5wYWNrRG93bnNjYWxlIC8gdmVjNCggUGFja0ZhY3RvcnMsIDEuICk7XG5jb25zdCBmbG9hdCBTaGlmdFJpZ2h0OCA9IDEuIC8gMjU2LjtcbnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkge1xuXHR2ZWM0IHIgPSB2ZWM0KCBmcmFjdCggdiAqIFBhY2tGYWN0b3JzICksIHYgKTtcblx0ci55encgLT0gci54eXogKiBTaGlmdFJpZ2h0ODtcdHJldHVybiByICogUGFja1Vwc2NhbGU7XG59XG5mbG9hdCB1bnBhY2tSR0JBVG9EZXB0aCggY29uc3QgaW4gdmVjNCB2ICkge1xuXHRyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7XG59XG52ZWM0IHBhY2sySGFsZlRvUkdCQSggdmVjMiB2ICkge1xuXHR2ZWM0IHIgPSB2ZWM0KCB2LngsIGZyYWN0KCB2LnggKiAyNTUuMCApLCB2LnksIGZyYWN0KCB2LnkgKiAyNTUuMCApICk7XG5cdHJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7XG59XG52ZWMyIHVucGFja1JHQkFUbzJIYWxmKCB2ZWM0IHYgKSB7XG5cdHJldHVybiB2ZWMyKCB2LnggKyAoIHYueSAvIDI1NS4wICksIHYueiArICggdi53IC8gMjU1LjAgKSApO1xufVxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApO1xufVxuZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XG59XG5mbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIHZpZXdaICk7XG59XG5mbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggbmVhciAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIGludkNsaXBaIC0gZmFyICk7XG59IixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiIjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQVxuXHRnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xuI2VuZGlmIixwcm9qZWN0X3ZlcnRleDoidmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247XG4jZW5kaWZcbm12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBtdlBvc2l0aW9uO1xuZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsiLGRpdGhlcmluZ19mcmFnbWVudDoiI2lmZGVmIERJVEhFUklOR1xuXHRnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWYiLGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdHZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRcdGZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTtcblx0XHR2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApO1xuXHRcdGRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7XG5cdFx0cmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjtcblx0fVxuI2VuZGlmIixyb3VnaG5lc3NtYXBfZnJhZ21lbnQ6ImZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzcztcbiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXG5cdHZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7XG5cdHJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nO1xuI2VuZGlmIixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xuI2VuZGlmIixzaGFkb3dtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHRmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdHJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApO1xuXHR9XG5cdHZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkge1xuXHRcdHJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTtcblx0fVxuXHRmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXtcblx0XHRmbG9hdCBvY2NsdXNpb24gPSAxLjA7XG5cdFx0dmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTtcblx0XHRmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApO1xuXHRcdGlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7XG5cdFx0XHRmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7XG5cdFx0XHRmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApO1xuXHRcdFx0ZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTtcdFx0XHRzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTtcdFx0XHRvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9jY2x1c2lvbjtcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0XHRzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudztcblx0XHRzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7XG5cdFx0YnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApO1xuXHRcdGJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTtcblx0XHRidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7XG5cdFx0Ym9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTtcblx0XHRpZiAoIGZydXN0dW1UZXN0ICkge1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgyID0gZHgwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkyID0gZHkwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHgzID0gZHgxIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkzID0gZHkxIC8gMi4wO1xuXHRcdFx0c2hhZG93ID0gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyAxNy4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeCA9IHRleGVsU2l6ZS54O1xuXHRcdFx0ZmxvYXQgZHkgPSB0ZXhlbFNpemUueTtcblx0XHRcdHZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTtcblx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTtcblx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi54ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi55ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHRcdCAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHRcdCAgZi54ICksXG5cdFx0XHRcdFx0IGYueSApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxuXHRcdFx0c2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZW5kaWZcblx0XHR9XG5cdFx0cmV0dXJuIHNoYWRvdztcblx0fVxuXHR2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7XG5cdFx0dmVjMyBhYnNWID0gYWJzKCB2ICk7XG5cdFx0ZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7XG5cdFx0YWJzViAqPSBzY2FsZVRvQ3ViZTtcblx0XHR2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7XG5cdFx0dmVjMiBwbGFuYXIgPSB2Lnh5O1xuXHRcdGZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7XG5cdFx0ZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsO1xuXHRcdGlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGlmICggdi56ID4gMC4wIClcblx0XHRcdFx0cGxhbmFyLnggPSA0LjAgLSB2Lng7XG5cdFx0fSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7XG5cdFx0fSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wO1xuXHRcdFx0cGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDtcblx0XHR9XG5cdFx0cmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApO1xuXHR9XG5cdGZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkge1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XG5cdFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XG5cdFx0ZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTtcdFx0ZHAgKz0gc2hhZG93Qmlhcztcblx0XHR2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApO1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHR2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuI2VuZGlmIixzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHR2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdCNlbmRpZlxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBzcG90TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xuXHRcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogcG9pbnRMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlBvaW50U2hhZG93Q29vcmRbIGkgXSA9IHBvaW50U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuI2VuZGlmIixzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ6ImZsb2F0IGdldFNoYWRvd01hc2soKSB7XG5cdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0UG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn0iLHNraW5iYXNlX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcblx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XG5cdG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xuXHRtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcbiNlbmRpZiIsc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcblx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmIixza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHR0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6O1xuI2VuZGlmIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbk1hdHJpeCAqIGJpbmRNYXRyaXg7XG5cdG9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xuXHQjZW5kaWZcbiNlbmRpZiIsc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ImZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG4jaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApO1xuXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xuI2Vsc2Vcblx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcbiNlbmRpZiIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBUT05FX01BUFBJTkcgKVxuXHRnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBzYXR1cmF0ZVxuI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZW5kaWZcbnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTtcbnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdHJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7XG59XG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApO1xufVxudmVjMyBPcHRpbWl6ZWRDaW5lb25Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0Y29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7XG5cdHJldHVybiBwb3coICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMC41ICkgKSAvICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMS43ICkgKyAwLjA2ICksIHZlYzMoIDIuMiApICk7XG59XG52ZWMzIFJSVEFuZE9EVEZpdCggdmVjMyB2ICkge1xuXHR2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNztcblx0dmVjMyBiID0gdiAqICggMC45ODM3MjkgKiB2ICsgMC40MzI5NTEwICkgKyAwLjIzODA4MTtcblx0cmV0dXJuIGEgLyBiO1xufVxudmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbnN0IG1hdDMgQUNFU0lucHV0TWF0ID0gbWF0Myhcblx0XHR2ZWMzKCAwLjU5NzE5LCAwLjA3NjAwLCAwLjAyODQwICksXHRcdHZlYzMoIDAuMzU0NTgsIDAuOTA4MzQsIDAuMTMzODMgKSxcblx0XHR2ZWMzKCAwLjA0ODIzLCAwLjAxNTY2LCAwLjgzNzc3IClcblx0KTtcblx0Y29uc3QgbWF0MyBBQ0VTT3V0cHV0TWF0ID0gbWF0Myhcblx0XHR2ZWMzKCAgMS42MDQ3NSwgLTAuMTAyMDgsIC0wLjAwMzI3ICksXHRcdHZlYzMoIC0wLjUzMTA4LCAgMS4xMDgxMywgLTAuMDcyNzYgKSxcblx0XHR2ZWMzKCAtMC4wNzM2NywgLTAuMDA2MDUsICAxLjA3NjAyIClcblx0KTtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZSAvIDAuNjtcblx0Y29sb3IgPSBBQ0VTSW5wdXRNYXQgKiBjb2xvcjtcblx0Y29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7XG5cdGNvbG9yID0gQUNFU091dHB1dE1hdCAqIGNvbG9yO1xuXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yICk7XG59XG52ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH0iLHRyYW5zbWlzc2lvbl9mcmFnbWVudDoiI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0ZmxvYXQgdHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7XG5cdGZsb2F0IHRyYW5zbWlzc2lvbkZhY3RvciA9IHRyYW5zbWlzc2lvbjtcblx0ZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzO1xuXHQjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUFxuXHRcdHRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQXG5cdFx0dGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nO1xuXHQjZW5kaWZcblx0dmVjMyBwb3MgPSB2V29ybGRQb3NpdGlvbjtcblx0dmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApO1xuXHR2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjNCB0cmFuc21pc3Npb24gPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKFxuXHRcdG4sIHYsIHJvdWdobmVzc0ZhY3RvciwgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCxcblx0XHRwb3MsIG1vZGVsTWF0cml4LCB2aWV3TWF0cml4LCBwcm9qZWN0aW9uTWF0cml4LCBpb3IsIHRoaWNrbmVzc0ZhY3Rvcixcblx0XHRhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7XG5cdHRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcblx0dHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIHRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgdHJhbnNtaXNzaW9uRmFjdG9yICk7XG4jZW5kaWYiLHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHR1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjtcblx0dW5pZm9ybSBmbG9hdCB0aGlja25lc3M7XG5cdHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZTtcblx0dW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIHZlYzIgdHJhbnNtaXNzaW9uU2FtcGxlclNpemU7XG5cdHVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7XG5cdHVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7XG5cdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0dmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHtcblx0XHR2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTtcblx0XHR2ZWMzIG1vZGVsU2NhbGU7XG5cdFx0bW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7XG5cdFx0bW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7XG5cdFx0bW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTtcblx0fVxuXHRmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHtcblx0XHRyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTtcblx0fVxuXHR2ZWM0IGdldFRyYW5zbWlzc2lvblNhbXBsZSggY29uc3QgaW4gdmVjMiBmcmFnQ29vcmQsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuXHRcdGZsb2F0IGZyYW1lYnVmZmVyTG9kID0gbG9nMiggdHJhbnNtaXNzaW9uU2FtcGxlclNpemUueCApICogYXBwbHlJb3JUb1JvdWdobmVzcyggcm91Z2huZXNzLCBpb3IgKTtcblx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcblx0XHQjZW5kaWZcblx0fVxuXHR2ZWMzIGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIGZsb2F0IHRyYW5zbWlzc2lvbkRpc3RhbmNlLCBjb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7XG5cdFx0aWYgKCBhdHRlbnVhdGlvbkRpc3RhbmNlID09IDAuMCApIHtcblx0XHRcdHJldHVybiByYWRpYW5jZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTtcblx0XHRcdHZlYzMgdHJhbnNtaXR0YW5jZSA9IGV4cCggLSBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ICogdHJhbnNtaXNzaW9uRGlzdGFuY2UgKTtcdFx0XHRyZXR1cm4gdHJhbnNtaXR0YW5jZSAqIHJhZGlhbmNlO1xuXHRcdH1cblx0fVxuXHR2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLFxuXHRcdGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsXG5cdFx0Y29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLFxuXHRcdGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcblx0XHR2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7XG5cdFx0dmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7XG5cdFx0dmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApO1xuXHRcdHZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53O1xuXHRcdHJlZnJhY3Rpb25Db29yZHMgKz0gMS4wO1xuXHRcdHJlZnJhY3Rpb25Db29yZHMgLz0gMi4wO1xuXHRcdHZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTtcblx0XHR2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7XG5cdFx0dmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7XG5cdFx0cmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTtcblx0fVxuI2VuZGlmIix1dl9wYXJzX2ZyYWdtZW50OiIjaWYgKCBkZWZpbmVkKCBVU0VfVVYgKSAmJiAhIGRlZmluZWQoIFVWU19WRVJURVhfT05MWSApIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcbiNlbmRpZiIsdXZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfVVZcblx0I2lmZGVmIFVWU19WRVJURVhfT05MWVxuXHRcdHZlYzIgdlV2O1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMiB2VXY7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG4jZW5kaWYiLHV2X3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuI2VuZGlmIix1djJfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuI2VuZGlmIix1djJfcGFyc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHRhdHRyaWJ1dGUgdmVjMiB1djI7XG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuXHR1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtO1xuI2VuZGlmIix1djJfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTtcbiNlbmRpZiIsd29ybGRwb3NfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKSB8fCBkZWZpbmVkICggVVNFX1RSQU5TTUlTU0lPTiApXG5cdHZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0I2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdFx0d29ybGRQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogd29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdHdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247XG4jZW5kaWYiLGJhY2tncm91bmRfdmVydDoidmFyeWluZyB2ZWMyIHZVdjtcbnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbnZvaWQgbWFpbigpIHtcblx0dlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcblx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTtcbn0iLGJhY2tncm91bmRfZnJhZzoidW5pZm9ybSBzYW1wbGVyMkQgdDJEO1xudmFyeWluZyB2ZWMyIHZVdjtcbnZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixjdWJlX3ZlcnQ6InZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdGdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53O1xufSIsY3ViZV9mcmFnOiIjaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgdlJlZmxlY3QgPSB2V29ybGREaXJlY3Rpb247XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IGVudkNvbG9yO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixkZXB0aF92ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dztcbn0iLGRlcHRoX2ZyYWc6IiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHRmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCB2ZWMzKCAxLjAgLSBmcmFnQ29vcmRaICksIG9wYWNpdHkgKTtcblx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXG5cdFx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBmcmFnQ29vcmRaICk7XG5cdCNlbmRpZlxufSIsZGlzdGFuY2VSR0JBX3ZlcnQ6IiNkZWZpbmUgRElTVEFOQ0VcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG59IixkaXN0YW5jZVJHQkFfZnJhZzoiI2RlZmluZSBESVNUQU5DRVxudW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uO1xudW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7XG51bmlmb3JtIGZsb2F0IGZhckRpc3RhbmNlO1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbiAoKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0ZmxvYXQgZGlzdCA9IGxlbmd0aCggdldvcmxkUG9zaXRpb24gLSByZWZlcmVuY2VQb3NpdGlvbiApO1xuXHRkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7XG5cdGRpc3QgPSBzYXR1cmF0ZSggZGlzdCApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGRpc3QgKTtcbn0iLGVxdWlyZWN0X3ZlcnQ6InZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG59IixlcXVpcmVjdF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixsaW5lZGFzaGVkX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2NhbGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHR2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbGluZWRhc2hlZF9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7XG51bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHRpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgPiBkYXNoU2l6ZSApIHtcblx0XHRkaXNjYXJkO1xuXHR9XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsbWVzaGJhc2ljX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hiYXNpY19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0dmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZlYzMoIDEuMCApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gZGlmZnVzZUNvbG9yLnJnYjtcblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaGxhbWJlcnRfdmVydDoiI2RlZmluZSBMQU1CRVJUXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2xhbWJlcnRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixtZXNobGFtYmVydF9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gKCBnbF9Gcm9udEZhY2luZyApID8gdkluZGlyZWN0RnJvbnQgOiB2SW5kaXJlY3RCYWNrO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2SW5kaXJlY3RGcm9udDtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD5cblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpO1xuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobWF0Y2FwX3ZlcnQ6IiNkZWZpbmUgTUFUQ0FQXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG59IixtZXNobWF0Y2FwX2ZyYWc6IiNkZWZpbmUgTUFUQ0FQXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDtcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0dmVjMyB2aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG5cdHZlYzMgeCA9IG5vcm1hbGl6ZSggdmVjMyggdmlld0Rpci56LCAwLjAsIC0gdmlld0Rpci54ICkgKTtcblx0dmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTtcblx0dmVjMiB1diA9IHZlYzIoIGRvdCggeCwgbm9ybWFsICksIGRvdCggeSwgbm9ybWFsICkgKSAqIDAuNDk1ICsgMC41O1xuXHQjaWZkZWYgVVNFX01BVENBUFxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB0ZXh0dXJlMkQoIG1hdGNhcCwgdXYgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApO1xuXHQjZW5kaWZcblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYiAqIG1hdGNhcENvbG9yLnJnYjtcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hub3JtYWxfdmVydDoiI2RlZmluZSBOT1JNQUxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLG1lc2hub3JtYWxfZnJhZzoiI2RlZmluZSBOT1JNQUxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3BhY2l0eSApO1xufSIsbWVzaHBob25nX3ZlcnQ6IiNkZWZpbmUgUEhPTkdcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hwaG9uZ19mcmFnOiIjZGVmaW5lIFBIT05HXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gdmVjMyBzcGVjdWxhcjtcbnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hwaHlzaWNhbF92ZXJ0OiIjZGVmaW5lIFNUQU5EQVJEXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuI2VuZGlmXG59IixtZXNocGh5c2ljYWxfZnJhZzoiI2RlZmluZSBTVEFOREFSRFxuI2lmZGVmIFBIWVNJQ0FMXG5cdCNkZWZpbmUgSU9SXG5cdCNkZWZpbmUgU1BFQ1VMQVJcbiNlbmRpZlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmZGVmIElPUlxuXHR1bmlmb3JtIGZsb2F0IGlvcjtcbiNlbmRpZlxuI2lmZGVmIFNQRUNVTEFSXG5cdHVuaWZvcm0gZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHk7XG5cdHVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yO1xuXHQjaWZkZWYgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJJbnRlbnNpdHlNYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwO1xuXHQjZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7XG5cdHVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdHVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yO1xuXHR1bmlmb3JtIGZsb2F0IHNoZWVuUm91Z2huZXNzO1xuXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzaGVlbkNvbG9yTWFwO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuUm91Z2huZXNzTWFwO1xuXHQjZW5kaWZcbiNlbmRpZlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIHRvdGFsRGlmZnVzZSA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgdG90YWxTcGVjdWxhciA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhcjtcblx0I2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdG90YWxEaWZmdXNlICsgdG90YWxTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2lmZGVmIFVTRV9TSEVFTlxuXHRcdGZsb2F0IHNoZWVuRW5lcmd5Q29tcCA9IDEuMCAtIDAuMTU3ICogbWF4MyggbWF0ZXJpYWwuc2hlZW5Db2xvciApO1xuXHRcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogc2hlZW5FbmVyZ3lDb21wICsgc2hlZW5TcGVjdWxhcjtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgZG90TlZjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdFx0dmVjMyBGY2MgPSBGX1NjaGxpY2soIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIGRvdE5WY2MgKTtcblx0XHRvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqICggMS4wIC0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogRmNjICkgKyBjbGVhcmNvYXRTcGVjdWxhciAqIG1hdGVyaWFsLmNsZWFyY29hdDtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNodG9vbl92ZXJ0OiIjZGVmaW5lIFRPT05cbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixtZXNodG9vbl9mcmFnOiIjZGVmaW5lIFRPT05cbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLHBvaW50c192ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNpemU7XG51bmlmb3JtIGZsb2F0IHNjYWxlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdGdsX1BvaW50U2l6ZSA9IHNpemU7XG5cdCNpZmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXG5cdFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdGlmICggaXNQZXJzcGVjdGl2ZSApIGdsX1BvaW50U2l6ZSAqPSAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHBvaW50c19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cbn0iLHNoYWRvd192ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNoYWRvd19mcmFnOiJ1bmlmb3JtIHZlYzMgY29sb3I7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSIsc3ByaXRlX3ZlcnQ6InVuaWZvcm0gZmxvYXQgcm90YXRpb247XG51bmlmb3JtIHZlYzIgY2VudGVyO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0dmVjMiBzY2FsZTtcblx0c2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7XG5cdHNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXHQjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7XG5cdCNlbmRpZlxuXHR2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlO1xuXHR2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcblx0cm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdG12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uO1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixzcHJpdGVfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSJ9LFB0PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBhbigxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyB2b30sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgdm99LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9fSxzcGVjdWxhcm1hcDp7c3BlY3VsYXJNYXA6e3ZhbHVlOm51bGx9fSxlbnZtYXA6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9LHJlZmxlY3Rpdml0eTp7dmFsdWU6MX0saW9yOnt2YWx1ZToxLjV9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fX0sYW9tYXA6e2FvTWFwOnt2YWx1ZTpudWxsfSxhb01hcEludGVuc2l0eTp7dmFsdWU6MX19LGxpZ2h0bWFwOntsaWdodE1hcDp7dmFsdWU6bnVsbH0sbGlnaHRNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxlbWlzc2l2ZW1hcDp7ZW1pc3NpdmVNYXA6e3ZhbHVlOm51bGx9fSxidW1wbWFwOntidW1wTWFwOnt2YWx1ZTpudWxsfSxidW1wU2NhbGU6e3ZhbHVlOjF9fSxub3JtYWxtYXA6e25vcm1hbE1hcDp7dmFsdWU6bnVsbH0sbm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyAkZSgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LGRpc3BsYWNlbWVudFNjYWxlOnt2YWx1ZToxfSxkaXNwbGFjZW1lbnRCaWFzOnt2YWx1ZTowfX0scm91Z2huZXNzbWFwOntyb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxtZXRhbG5lc3NtYXA6e21ldGFsbmVzc01hcDp7dmFsdWU6bnVsbH19LGdyYWRpZW50bWFwOntncmFkaWVudE1hcDp7dmFsdWU6bnVsbH19LGZvZzp7Zm9nRGVuc2l0eTp7dmFsdWU6MjVlLTV9LGZvZ05lYXI6e3ZhbHVlOjF9LGZvZ0Zhcjp7dmFsdWU6MmUzfSxmb2dDb2xvcjp7dmFsdWU6bmV3IGFuKDE2Nzc3MjE1KX19LGxpZ2h0czp7YW1iaWVudExpZ2h0Q29sb3I6e3ZhbHVlOltdfSxsaWdodFByb2JlOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxjb2xvcjp7fX19LGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxkaXJlY3Rpb25hbFNoYWRvd01hcDp7dmFsdWU6W119LGRpcmVjdGlvbmFsU2hhZG93TWF0cml4Ont2YWx1ZTpbXX0sc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e319fSxzcG90TGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkZWNheTp7fSxkaXN0YW5jZTp7fX19LHBvaW50TGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e30sc2hhZG93Q2FtZXJhTmVhcjp7fSxzaGFkb3dDYW1lcmFGYXI6e319fSxwb2ludFNoYWRvd01hcDp7dmFsdWU6W119LHBvaW50U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0saGVtaXNwaGVyZUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LHNreUNvbG9yOnt9LGdyb3VuZENvbG9yOnt9fX0scmVjdEFyZWFMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19LGx0Y18xOnt2YWx1ZTpudWxsfSxsdGNfMjp7dmFsdWU6bnVsbH19LHBvaW50czp7ZGlmZnVzZTp7dmFsdWU6bmV3IGFuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sc2l6ZTp7dmFsdWU6MX0sc2NhbGU6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyB2b319LHNwcml0ZTp7ZGlmZnVzZTp7dmFsdWU6bmV3IGFuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sY2VudGVyOnt2YWx1ZTpuZXcgJGUoLjUsLjUpfSxyb3RhdGlvbjp7dmFsdWU6MH0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IHZvfX19LGpjPXtiYXNpYzp7dW5pZm9ybXM6aWEoW1B0LmNvbW1vbixQdC5zcGVjdWxhcm1hcCxQdC5lbnZtYXAsUHQuYW9tYXAsUHQubGlnaHRtYXAsUHQuZm9nXSksdmVydGV4U2hhZGVyOnZpLm1lc2hiYXNpY192ZXJ0LGZyYWdtZW50U2hhZGVyOnZpLm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3JtczppYShbUHQuY29tbW9uLFB0LnNwZWN1bGFybWFwLFB0LmVudm1hcCxQdC5hb21hcCxQdC5saWdodG1hcCxQdC5lbWlzc2l2ZW1hcCxQdC5mb2csUHQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGFuKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6dmkubWVzaGxhbWJlcnRfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5tZXNobGFtYmVydF9mcmFnfSxwaG9uZzp7dW5pZm9ybXM6aWEoW1B0LmNvbW1vbixQdC5zcGVjdWxhcm1hcCxQdC5lbnZtYXAsUHQuYW9tYXAsUHQubGlnaHRtYXAsUHQuZW1pc3NpdmVtYXAsUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLFB0LmZvZyxQdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgYW4oMCl9LHNwZWN1bGFyOnt2YWx1ZTpuZXcgYW4oMTExODQ4MSl9LHNoaW5pbmVzczp7dmFsdWU6MzB9fV0pLHZlcnRleFNoYWRlcjp2aS5tZXNocGhvbmdfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOmlhKFtQdC5jb21tb24sUHQuZW52bWFwLFB0LmFvbWFwLFB0LmxpZ2h0bWFwLFB0LmVtaXNzaXZlbWFwLFB0LmJ1bXBtYXAsUHQubm9ybWFsbWFwLFB0LmRpc3BsYWNlbWVudG1hcCxQdC5yb3VnaG5lc3NtYXAsUHQubWV0YWxuZXNzbWFwLFB0LmZvZyxQdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgYW4oMCl9LHJvdWdobmVzczp7dmFsdWU6MX0sbWV0YWxuZXNzOnt2YWx1ZTowfSxlbnZNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjp2aS5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5tZXNocGh5c2ljYWxfZnJhZ30sdG9vbjp7dW5pZm9ybXM6aWEoW1B0LmNvbW1vbixQdC5hb21hcCxQdC5saWdodG1hcCxQdC5lbWlzc2l2ZW1hcCxQdC5idW1wbWFwLFB0Lm5vcm1hbG1hcCxQdC5kaXNwbGFjZW1lbnRtYXAsUHQuZ3JhZGllbnRtYXAsUHQuZm9nLFB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX19XSksdmVydGV4U2hhZGVyOnZpLm1lc2h0b29uX3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkubWVzaHRvb25fZnJhZ30sbWF0Y2FwOnt1bmlmb3JtczppYShbUHQuY29tbW9uLFB0LmJ1bXBtYXAsUHQubm9ybWFsbWFwLFB0LmRpc3BsYWNlbWVudG1hcCxQdC5mb2cse21hdGNhcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOnZpLm1lc2htYXRjYXBfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5tZXNobWF0Y2FwX2ZyYWd9LHBvaW50czp7dW5pZm9ybXM6aWEoW1B0LnBvaW50cyxQdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6dmkucG9pbnRzX3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkucG9pbnRzX2ZyYWd9LGRhc2hlZDp7dW5pZm9ybXM6aWEoW1B0LmNvbW1vbixQdC5mb2cse3NjYWxlOnt2YWx1ZToxfSxkYXNoU2l6ZTp7dmFsdWU6MX0sdG90YWxTaXplOnt2YWx1ZToyfX1dKSx2ZXJ0ZXhTaGFkZXI6dmkubGluZWRhc2hlZF92ZXJ0LGZyYWdtZW50U2hhZGVyOnZpLmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOmlhKFtQdC5jb21tb24sUHQuZGlzcGxhY2VtZW50bWFwXSksdmVydGV4U2hhZGVyOnZpLmRlcHRoX3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkuZGVwdGhfZnJhZ30sbm9ybWFsOnt1bmlmb3JtczppYShbUHQuY29tbW9uLFB0LmJ1bXBtYXAsUHQubm9ybWFsbWFwLFB0LmRpc3BsYWNlbWVudG1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnZpLm1lc2hub3JtYWxfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5tZXNobm9ybWFsX2ZyYWd9LHNwcml0ZTp7dW5pZm9ybXM6aWEoW1B0LnNwcml0ZSxQdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6dmkuc3ByaXRlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkuc3ByaXRlX2ZyYWd9LGJhY2tncm91bmQ6e3VuaWZvcm1zOnt1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IHZvfSx0MkQ6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6dmkuYmFja2dyb3VuZF92ZXJ0LGZyYWdtZW50U2hhZGVyOnZpLmJhY2tncm91bmRfZnJhZ30sY3ViZTp7dW5pZm9ybXM6aWEoW1B0LmVudm1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnZpLmN1YmVfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5jdWJlX2ZyYWd9LGVxdWlyZWN0Ont1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOnZpLmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkuZXF1aXJlY3RfZnJhZ30sZGlzdGFuY2VSR0JBOnt1bmlmb3JtczppYShbUHQuY29tbW9uLFB0LmRpc3BsYWNlbWVudG1hcCx7cmVmZXJlbmNlUG9zaXRpb246e3ZhbHVlOm5ldyAkfSxuZWFyRGlzdGFuY2U6e3ZhbHVlOjF9LGZhckRpc3RhbmNlOnt2YWx1ZToxZTN9fV0pLHZlcnRleFNoYWRlcjp2aS5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjp2aS5kaXN0YW5jZVJHQkFfZnJhZ30sc2hhZG93Ont1bmlmb3JtczppYShbUHQubGlnaHRzLFB0LmZvZyx7Y29sb3I6e3ZhbHVlOm5ldyBhbigwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnZpLnNoYWRvd192ZXJ0LGZyYWdtZW50U2hhZGVyOnZpLnNoYWRvd19mcmFnfX07ZnVuY3Rpb24gR1BlKG4sdCxlLGkscixvKXtsZXQgbCxjLGE9bmV3IGFuKDApLHM9ITA9PT1yPzA6MSxkPW51bGwsdT0wLHA9bnVsbDtmdW5jdGlvbiBtKHksTSl7ZS5idWZmZXJzLmNvbG9yLnNldENsZWFyKHkucix5LmcseS5iLE0sbyl9cmV0dXJue2dldENsZWFyQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbih5LE09MSl7YS5zZXQoeSkscz1NLG0oYSxzKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKHkpe3M9eSxtKGEscyl9LHJlbmRlcjpmdW5jdGlvbih5LE0pe2xldCB2PSExLHg9ITA9PT1NLmlzU2NlbmU/TS5iYWNrZ3JvdW5kOm51bGw7eCYmeC5pc1RleHR1cmUmJih4PXQuZ2V0KHgpKTtsZXQgUj1uLnhyLEE9Ui5nZXRTZXNzaW9uJiZSLmdldFNlc3Npb24oKTtBJiYiYWRkaXRpdmUiPT09QS5lbnZpcm9ubWVudEJsZW5kTW9kZSYmKHg9bnVsbCksbnVsbD09PXg/bShhLHMpOngmJnguaXNDb2xvciYmKG0oeCwxKSx2PSEwKSwobi5hdXRvQ2xlYXJ8fHYpJiZuLmNsZWFyKG4uYXV0b0NsZWFyQ29sb3Isbi5hdXRvQ2xlYXJEZXB0aCxuLmF1dG9DbGVhclN0ZW5jaWwpLHgmJih4LmlzQ3ViZVRleHR1cmV8fHgubWFwcGluZz09PSRJKT8odm9pZCAwPT09YyYmKGM9bmV3IGNvKG5ldyBFbSgxLDEsMSksbmV3IEdkKHtuYW1lOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3JtczpzXyhqYy5jdWJlLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6amMuY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6amMuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOnlvLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoInV2IiksYy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbihILHRlLEspe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKEsubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLGkudXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT14LGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT14LmlzQ3ViZVRleHR1cmUmJiExPT09eC5pc1JlbmRlclRhcmdldFRleHR1cmU/LTE6MSwoZCE9PXh8fHUhPT14LnZlcnNpb258fHAhPT1uLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsZD14LHU9eC52ZXJzaW9uLHA9bi50b25lTWFwcGluZykseS51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6eCYmeC5pc1RleHR1cmUmJih2b2lkIDA9PT1sJiYobD1uZXcgY28obmV3IGt4KDIsMiksbmV3IEdkKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOnNfKGpjLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpqYy5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpqYy5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6U3gsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGkudXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT14LCEwPT09eC5tYXRyaXhBdXRvVXBkYXRlJiZ4LnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh4Lm1hdHJpeCksKGQhPT14fHx1IT09eC52ZXJzaW9ufHxwIT09bi50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLGQ9eCx1PXgudmVyc2lvbixwPW4udG9uZU1hcHBpbmcpLHkudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfX19ZnVuY3Rpb24gV1BlKG4sdCxlLGkpe2xldCByPW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSxvPWkuaXNXZWJHTDI/bnVsbDp0LmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxhPWkuaXNXZWJHTDJ8fG51bGwhPT1vLHM9e30sbD15KG51bGwpLGM9bDtmdW5jdGlvbiBwKGNlKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmJpbmRWZXJ0ZXhBcnJheShjZSk6by5iaW5kVmVydGV4QXJyYXlPRVMoY2UpfWZ1bmN0aW9uIGYoY2Upe3JldHVybiBpLmlzV2ViR0wyP24uZGVsZXRlVmVydGV4QXJyYXkoY2UpOm8uZGVsZXRlVmVydGV4QXJyYXlPRVMoY2UpfWZ1bmN0aW9uIHkoY2Upe2xldCBmZT1bXSxfZT1bXSxuZT1bXTtmb3IobGV0IGRlPTA7ZGU8cjtkZSsrKWZlW2RlXT0wLF9lW2RlXT0wLG5lW2RlXT0wO3JldHVybntnZW9tZXRyeTpudWxsLHByb2dyYW06bnVsbCx3aXJlZnJhbWU6ITEsbmV3QXR0cmlidXRlczpmZSxlbmFibGVkQXR0cmlidXRlczpfZSxhdHRyaWJ1dGVEaXZpc29yczpuZSxvYmplY3Q6Y2UsYXR0cmlidXRlczp7fSxpbmRleDpudWxsfX1mdW5jdGlvbiB4KCl7bGV0IGNlPWMubmV3QXR0cmlidXRlcztmb3IobGV0IGZlPTAsX2U9Y2UubGVuZ3RoO2ZlPF9lO2ZlKyspY2VbZmVdPTB9ZnVuY3Rpb24gUihjZSl7QShjZSwwKX1mdW5jdGlvbiBBKGNlLGZlKXtsZXQgbmU9Yy5lbmFibGVkQXR0cmlidXRlcyxkZT1jLmF0dHJpYnV0ZURpdmlzb3JzO2MubmV3QXR0cmlidXRlc1tjZV09MSwwPT09bmVbY2VdJiYobi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShjZSksbmVbY2VdPTEpLGRlW2NlXSE9PWZlJiYoKGkuaXNXZWJHTDI/bjp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtpLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oY2UsZmUpLGRlW2NlXT1mZSl9ZnVuY3Rpb24gSCgpe2xldCBjZT1jLm5ld0F0dHJpYnV0ZXMsZmU9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IF9lPTAsbmU9ZmUubGVuZ3RoO19lPG5lO19lKyspZmVbX2VdIT09Y2VbX2VdJiYobi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoX2UpLGZlW19lXT0wKX1mdW5jdGlvbiB0ZShjZSxmZSxfZSxuZSxkZSx1ZSl7ITAhPT1pLmlzV2ViR0wyfHw1MTI0IT09X2UmJjUxMjUhPT1fZT9uLnZlcnRleEF0dHJpYlBvaW50ZXIoY2UsZmUsX2UsbmUsZGUsdWUpOm4udmVydGV4QXR0cmliSVBvaW50ZXIoY2UsZmUsX2UsZGUsdWUpfWZ1bmN0aW9uIEkoKXtyZSgpLGMhPT1sJiYoYz1sLHAoYy5vYmplY3QpKX1mdW5jdGlvbiByZSgpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6ZnVuY3Rpb24oY2UsZmUsX2UsbmUsZGUpe2xldCB1ZT0hMTtpZihhKXtsZXQgR2U9ZnVuY3Rpb24oY2UsZmUsX2Upe2xldCBuZT0hMD09PV9lLndpcmVmcmFtZSxkZT1zW2NlLmlkXTt2b2lkIDA9PT1kZSYmKGRlPXt9LHNbY2UuaWRdPWRlKTtsZXQgdWU9ZGVbZmUuaWRdO3ZvaWQgMD09PXVlJiYodWU9e30sZGVbZmUuaWRdPXVlKTtsZXQgR2U9dWVbbmVdO3JldHVybiB2b2lkIDA9PT1HZSYmKEdlPXkoaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6by5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKSx1ZVtuZV09R2UpLEdlfShuZSxfZSxmZSk7YyE9PUdlJiYoYz1HZSxwKGMub2JqZWN0KSksdWU9ZnVuY3Rpb24oY2UsZmUpe2xldCBfZT1jLmF0dHJpYnV0ZXMsbmU9Y2UuYXR0cmlidXRlcyxkZT0wO2ZvcihsZXQgdWUgaW4gbmUpe2xldCBHZT1fZVt1ZV0sTWU9bmVbdWVdO2lmKHZvaWQgMD09PUdlfHxHZS5hdHRyaWJ1dGUhPT1NZXx8R2UuZGF0YSE9PU1lLmRhdGEpcmV0dXJuITA7ZGUrK31yZXR1cm4gYy5hdHRyaWJ1dGVzTnVtIT09ZGV8fGMuaW5kZXghPT1mZX0obmUsZGUpLHVlJiZmdW5jdGlvbihjZSxmZSl7bGV0IF9lPXt9LG5lPWNlLmF0dHJpYnV0ZXMsZGU9MDtmb3IobGV0IHVlIGluIG5lKXtsZXQgR2U9bmVbdWVdLE1lPXt9O01lLmF0dHJpYnV0ZT1HZSxHZS5kYXRhJiYoTWUuZGF0YT1HZS5kYXRhKSxfZVt1ZV09TWUsZGUrK31jLmF0dHJpYnV0ZXM9X2UsYy5hdHRyaWJ1dGVzTnVtPWRlLGMuaW5kZXg9ZmV9KG5lLGRlKX1lbHNle2xldCBHZT0hMD09PWZlLndpcmVmcmFtZTsoYy5nZW9tZXRyeSE9PW5lLmlkfHxjLnByb2dyYW0hPT1fZS5pZHx8Yy53aXJlZnJhbWUhPT1HZSkmJihjLmdlb21ldHJ5PW5lLmlkLGMucHJvZ3JhbT1fZS5pZCxjLndpcmVmcmFtZT1HZSx1ZT0hMCl9ITA9PT1jZS5pc0luc3RhbmNlZE1lc2gmJih1ZT0hMCksbnVsbCE9PWRlJiZlLnVwZGF0ZShkZSwzNDk2MyksdWUmJihmdW5jdGlvbihjZSxmZSxfZSxuZSl7aWYoITE9PT1pLmlzV2ViR0wyJiYoY2UuaXNJbnN0YW5jZWRNZXNofHxuZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmbnVsbD09PXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpcmV0dXJuO3goKTtsZXQgZGU9bmUuYXR0cmlidXRlcyx1ZT1fZS5nZXRBdHRyaWJ1dGVzKCksR2U9ZmUuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IE1lIGluIHVlKXtsZXQgTmU9dWVbTWVdO2lmKE5lLmxvY2F0aW9uPj0wKXtsZXQgY3Q9ZGVbTWVdO2lmKHZvaWQgMD09PWN0JiYoImluc3RhbmNlTWF0cml4Ij09PU1lJiZjZS5pbnN0YW5jZU1hdHJpeCYmKGN0PWNlLmluc3RhbmNlTWF0cml4KSwiaW5zdGFuY2VDb2xvciI9PT1NZSYmY2UuaW5zdGFuY2VDb2xvciYmKGN0PWNlLmluc3RhbmNlQ29sb3IpKSx2b2lkIDAhPT1jdCl7bGV0IHd0PWN0Lm5vcm1hbGl6ZWQsZnQ9Y3QuaXRlbVNpemUsT2U9ZS5nZXQoY3QpO2lmKHZvaWQgMD09PU9lKWNvbnRpbnVlO2xldCBBbj1PZS5idWZmZXIsU3Q9T2UudHlwZSxybj1PZS5ieXRlc1BlckVsZW1lbnQ7aWYoY3QuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IHZlPWN0LmRhdGEsaHQ9dmUuc3RyaWRlLG10PWN0Lm9mZnNldDtpZih2ZSYmdmUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcil7Zm9yKGxldCBvZT0wO29lPE5lLmxvY2F0aW9uU2l6ZTtvZSsrKUEoTmUubG9jYXRpb24rb2UsdmUubWVzaFBlckF0dHJpYnV0ZSk7ITAhPT1jZS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PW5lLl9tYXhJbnN0YW5jZUNvdW50JiYobmUuX21heEluc3RhbmNlQ291bnQ9dmUubWVzaFBlckF0dHJpYnV0ZSp2ZS5jb3VudCl9ZWxzZSBmb3IobGV0IG9lPTA7b2U8TmUubG9jYXRpb25TaXplO29lKyspUihOZS5sb2NhdGlvbitvZSk7bi5iaW5kQnVmZmVyKDM0OTYyLEFuKTtmb3IobGV0IG9lPTA7b2U8TmUubG9jYXRpb25TaXplO29lKyspdGUoTmUubG9jYXRpb24rb2UsZnQvTmUubG9jYXRpb25TaXplLFN0LHd0LGh0KnJuLChtdCtmdC9OZS5sb2NhdGlvblNpemUqb2UpKnJuKX1lbHNle2lmKGN0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKXtmb3IobGV0IHZlPTA7dmU8TmUubG9jYXRpb25TaXplO3ZlKyspQShOZS5sb2NhdGlvbit2ZSxjdC5tZXNoUGVyQXR0cmlidXRlKTshMCE9PWNlLmlzSW5zdGFuY2VkTWVzaCYmdm9pZCAwPT09bmUuX21heEluc3RhbmNlQ291bnQmJihuZS5fbWF4SW5zdGFuY2VDb3VudD1jdC5tZXNoUGVyQXR0cmlidXRlKmN0LmNvdW50KX1lbHNlIGZvcihsZXQgdmU9MDt2ZTxOZS5sb2NhdGlvblNpemU7dmUrKylSKE5lLmxvY2F0aW9uK3ZlKTtuLmJpbmRCdWZmZXIoMzQ5NjIsQW4pO2ZvcihsZXQgdmU9MDt2ZTxOZS5sb2NhdGlvblNpemU7dmUrKyl0ZShOZS5sb2NhdGlvbit2ZSxmdC9OZS5sb2NhdGlvblNpemUsU3Qsd3QsZnQqcm4sZnQvTmUubG9jYXRpb25TaXplKnZlKnJuKX19ZWxzZSBpZih2b2lkIDAhPT1HZSl7bGV0IHd0PUdlW01lXTtpZih2b2lkIDAhPT13dClzd2l0Y2god3QubGVuZ3RoKXtjYXNlIDI6bi52ZXJ0ZXhBdHRyaWIyZnYoTmUubG9jYXRpb24sd3QpO2JyZWFrO2Nhc2UgMzpuLnZlcnRleEF0dHJpYjNmdihOZS5sb2NhdGlvbix3dCk7YnJlYWs7Y2FzZSA0Om4udmVydGV4QXR0cmliNGZ2KE5lLmxvY2F0aW9uLHd0KTticmVhaztkZWZhdWx0Om4udmVydGV4QXR0cmliMWZ2KE5lLmxvY2F0aW9uLHd0KX19fX1IKCl9KGNlLGZlLF9lLG5lKSxudWxsIT09ZGUmJm4uYmluZEJ1ZmZlcigzNDk2MyxlLmdldChkZSkuYnVmZmVyKSl9LHJlc2V0OkkscmVzZXREZWZhdWx0U3RhdGU6cmUsZGlzcG9zZTpmdW5jdGlvbigpe0koKTtmb3IobGV0IGNlIGluIHMpe2xldCBmZT1zW2NlXTtmb3IobGV0IF9lIGluIGZlKXtsZXQgbmU9ZmVbX2VdO2ZvcihsZXQgZGUgaW4gbmUpZihuZVtkZV0ub2JqZWN0KSxkZWxldGUgbmVbZGVdO2RlbGV0ZSBmZVtfZV19ZGVsZXRlIHNbY2VdfX0scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6ZnVuY3Rpb24oY2Upe2lmKHZvaWQgMD09PXNbY2UuaWRdKXJldHVybjtsZXQgZmU9c1tjZS5pZF07Zm9yKGxldCBfZSBpbiBmZSl7bGV0IG5lPWZlW19lXTtmb3IobGV0IGRlIGluIG5lKWYobmVbZGVdLm9iamVjdCksZGVsZXRlIG5lW2RlXTtkZWxldGUgZmVbX2VdfWRlbGV0ZSBzW2NlLmlkXX0scmVsZWFzZVN0YXRlc09mUHJvZ3JhbTpmdW5jdGlvbihjZSl7Zm9yKGxldCBmZSBpbiBzKXtsZXQgX2U9c1tmZV07aWYodm9pZCAwPT09X2VbY2UuaWRdKWNvbnRpbnVlO2xldCBuZT1fZVtjZS5pZF07Zm9yKGxldCBkZSBpbiBuZSlmKG5lW2RlXS5vYmplY3QpLGRlbGV0ZSBuZVtkZV07ZGVsZXRlIF9lW2NlLmlkXX19LGluaXRBdHRyaWJ1dGVzOngsZW5hYmxlQXR0cmlidXRlOlIsZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXM6SH19ZnVuY3Rpb24gcVBlKG4sdCxlLGkpe2xldCBvLHI9aS5pc1dlYkdMMjt0aGlzLnNldE1vZGU9ZnVuY3Rpb24oYyl7bz1jfSx0aGlzLnJlbmRlcj1mdW5jdGlvbihjLGQpe24uZHJhd0FycmF5cyhvLGMsZCksZS51cGRhdGUoZCxvLDEpfSx0aGlzLnJlbmRlckluc3RhbmNlcz1mdW5jdGlvbihjLGQsdSl7aWYoMD09PXUpcmV0dXJuO2xldCBwLGY7aWYocilwPW4sZj0iZHJhd0FycmF5c0luc3RhbmNlZCI7ZWxzZSBpZihwPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksZj0iZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIixudWxsPT09cClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtwW2ZdKG8sYyxkLHUpLGUudXBkYXRlKGQsbyx1KX19ZnVuY3Rpb24gWVBlKG4sdCxlKXtsZXQgaTtmdW5jdGlvbiBvKEspe2lmKCJoaWdocCI9PT1LKXtpZihuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO0s9Im1lZGl1bXAifXJldHVybiJtZWRpdW1wIj09PUsmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMzLDM2MzM3KS5wcmVjaXNpb24+MCYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzIsMzYzMzcpLnByZWNpc2lvbj4wPyJtZWRpdW1wIjoibG93cCJ9bGV0IGE9dHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ8InUiJiZuIGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dHx8dHlwZW9mIFdlYkdMMkNvbXB1dGVSZW5kZXJpbmdDb250ZXh0PCJ1IiYmbiBpbnN0YW5jZW9mIFdlYkdMMkNvbXB1dGVSZW5kZXJpbmdDb250ZXh0LHM9dm9pZCAwIT09ZS5wcmVjaXNpb24/ZS5wcmVjaXNpb246ImhpZ2hwIixsPW8ocyk7bCE9PXMmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IixzLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsbCwiaW5zdGVhZC4iKSxzPWwpO2xldCBjPWF8fHQuaGFzKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKSxkPSEwPT09ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHU9bi5nZXRQYXJhbWV0ZXIoMzQ5MzApLHA9bi5nZXRQYXJhbWV0ZXIoMzU2NjApLGY9bi5nZXRQYXJhbWV0ZXIoMzM3OSksbT1uLmdldFBhcmFtZXRlcigzNDA3NikseT1uLmdldFBhcmFtZXRlcigzNDkyMSksTT1uLmdldFBhcmFtZXRlcigzNjM0Nyksdj1uLmdldFBhcmFtZXRlcigzNjM0OCkseD1uLmdldFBhcmFtZXRlcigzNjM0OSksUj1wPjAsQT1hfHx0LmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKTtyZXR1cm57aXNXZWJHTDI6YSxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1pKXJldHVybiBpO2lmKCEwPT09dC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKXtsZXQgSz10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aT1uLmdldFBhcmFtZXRlcihLLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBpPTA7cmV0dXJuIGl9LGdldE1heFByZWNpc2lvbjpvLHByZWNpc2lvbjpzLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6ZCxtYXhUZXh0dXJlczp1LG1heFZlcnRleFRleHR1cmVzOnAsbWF4VGV4dHVyZVNpemU6ZixtYXhDdWJlbWFwU2l6ZTptLG1heEF0dHJpYnV0ZXM6eSxtYXhWZXJ0ZXhVbmlmb3JtczpNLG1heFZhcnlpbmdzOnYsbWF4RnJhZ21lbnRVbmlmb3Jtczp4LHZlcnRleFRleHR1cmVzOlIsZmxvYXRGcmFnbWVudFRleHR1cmVzOkEsZmxvYXRWZXJ0ZXhUZXh0dXJlczpSJiZBLG1heFNhbXBsZXM6YT9uLmdldFBhcmFtZXRlcigzNjE4Myk6MH19ZnVuY3Rpb24gWFBlKG4pe2xldCB0PXRoaXMsZT1udWxsLGk9MCxyPSExLG89ITEsYT1uZXcgWGwscz1uZXcgdm8sbD17dmFsdWU6bnVsbCxuZWVkc1VwZGF0ZTohMX07ZnVuY3Rpb24gYygpe2wudmFsdWUhPT1lJiYobC52YWx1ZT1lLGwubmVlZHNVcGRhdGU9aT4wKSx0Lm51bVBsYW5lcz1pLHQubnVtSW50ZXJzZWN0aW9uPTB9ZnVuY3Rpb24gZCh1LHAsZixtKXtsZXQgeT1udWxsIT09dT91Lmxlbmd0aDowLE09bnVsbDtpZigwIT09eSl7aWYoTT1sLnZhbHVlLCEwIT09bXx8bnVsbD09PU0pe2xldCB2PWYrNCp5LHg9cC5tYXRyaXhXb3JsZEludmVyc2U7cy5nZXROb3JtYWxNYXRyaXgoeCksKG51bGw9PT1NfHxNLmxlbmd0aDx2KSYmKE09bmV3IEZsb2F0MzJBcnJheSh2KSk7Zm9yKGxldCBSPTAsQT1mO1IhPT15OysrUixBKz00KWEuY29weSh1W1JdKS5hcHBseU1hdHJpeDQoeCxzKSxhLm5vcm1hbC50b0FycmF5KE0sQSksTVtBKzNdPWEuY29uc3RhbnR9bC52YWx1ZT1NLGwubmVlZHNVcGRhdGU9ITB9cmV0dXJuIHQubnVtUGxhbmVzPXksdC5udW1JbnRlcnNlY3Rpb249MCxNfXRoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24odSxwLGYpe2xldCBtPTAhPT11Lmxlbmd0aHx8cHx8MCE9PWl8fHI7cmV0dXJuIHI9cCxlPWQodSxmLDApLGk9dS5sZW5ndGgsbX0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLGQobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKHUscCxmKXtsZXQgbT11LmNsaXBwaW5nUGxhbmVzLHk9dS5jbGlwSW50ZXJzZWN0aW9uLE09dS5jbGlwU2hhZG93cyx2PW4uZ2V0KHUpO2lmKCFyfHxudWxsPT09bXx8MD09PW0ubGVuZ3RofHxvJiYhTSlvP2QobnVsbCk6YygpO2Vsc2V7bGV0IHg9bz8wOmksUj00KngsQT12LmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1BLEE9ZChtLHAsUixmKTtmb3IobGV0IEg9MDtIIT09UjsrK0gpQVtIXT1lW0hdO3YuY2xpcHBpbmdTdGF0ZT1BLHRoaXMubnVtSW50ZXJzZWN0aW9uPXk/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9eH19fWZ1bmN0aW9uIFFQZShuKXtsZXQgdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBlKGEscyl7cmV0dXJuIHM9PT14Qj9hLm1hcHBpbmc9Wng6cz09PUNCJiYoYS5tYXBwaW5nPUt4KSxhfWZ1bmN0aW9uIHIoYSl7bGV0IHM9YS50YXJnZXQ7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKTtsZXQgbD10LmdldChzKTt2b2lkIDAhPT1sJiYodC5kZWxldGUocyksbC5kaXNwb3NlKCkpfXJldHVybntnZXQ6ZnVuY3Rpb24oYSl7aWYoYSYmYS5pc1RleHR1cmUmJiExPT09YS5pc1JlbmRlclRhcmdldFRleHR1cmUpe2xldCBzPWEubWFwcGluZztpZihzPT09eEJ8fHM9PT1DQil7aWYodC5oYXMoYSkpcmV0dXJuIGUodC5nZXQoYSkudGV4dHVyZSxhLm1hcHBpbmcpO3tsZXQgbD1hLmltYWdlO2lmKGwmJmwuaGVpZ2h0PjApe2xldCBjPW5ldyBBSShsLmhlaWdodC8yKTtyZXR1cm4gYy5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZShuLGEpLHQuc2V0KGEsYyksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKSxlKGMudGV4dHVyZSxhLm1hcHBpbmcpfXJldHVybiBudWxsfX19cmV0dXJuIGF9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0PW5ldyBXZWFrTWFwfX19amMucGh5c2ljYWw9e3VuaWZvcm1zOmlhKFtqYy5zdGFuZGFyZC51bmlmb3Jtcyx7Y2xlYXJjb2F0Ont2YWx1ZTowfSxjbGVhcmNvYXRNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdFJvdWdobmVzczp7dmFsdWU6MH0sY2xlYXJjb2F0Um91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXROb3JtYWxTY2FsZTp7dmFsdWU6bmV3ICRlKDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOjB9LHNoZWVuQ29sb3I6e3ZhbHVlOm5ldyBhbigwKX0sc2hlZW5Db2xvck1hcDp7dmFsdWU6bnVsbH0sc2hlZW5Sb3VnaG5lc3M6e3ZhbHVlOjF9LHNoZWVuUm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb246e3ZhbHVlOjB9LHRyYW5zbWlzc2lvbk1hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uU2FtcGxlclNpemU6e3ZhbHVlOm5ldyAkZX0sdHJhbnNtaXNzaW9uU2FtcGxlck1hcDp7dmFsdWU6bnVsbH0sdGhpY2tuZXNzOnt2YWx1ZTowfSx0aGlja25lc3NNYXA6e3ZhbHVlOm51bGx9LGF0dGVudWF0aW9uRGlzdGFuY2U6e3ZhbHVlOjB9LGF0dGVudWF0aW9uQ29sb3I6e3ZhbHVlOm5ldyBhbigwKX0sc3BlY3VsYXJJbnRlbnNpdHk6e3ZhbHVlOjF9LHNwZWN1bGFySW50ZW5zaXR5TWFwOnt2YWx1ZTpudWxsfSxzcGVjdWxhckNvbG9yOnt2YWx1ZTpuZXcgYW4oMSwxLDEpfSxzcGVjdWxhckNvbG9yTWFwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6dmkubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6dmkubWVzaHBoeXNpY2FsX2ZyYWd9O3ZhciBUbT1jbGFzcyBleHRlbmRzIEF4e2NvbnN0cnVjdG9yKHQ9LTEsZT0xLGk9MSxyPS0xLG89LjEsYT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiLHRoaXMuem9vbT0xLHRoaXMudmlldz1udWxsLHRoaXMubGVmdD10LHRoaXMucmlnaHQ9ZSx0aGlzLnRvcD1pLHRoaXMuYm90dG9tPXIsdGhpcy5uZWFyPW8sdGhpcy5mYXI9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLnRvcD10LnRvcCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuem9vbT10Lnpvb20sdGhpcy52aWV3PW51bGw9PT10LnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpc31zZXRWaWV3T2Zmc2V0KHQsZSxpLHIsbyxhKXtudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1pLHRoaXMudmlldy5vZmZzZXRZPXIsdGhpcy52aWV3LndpZHRoPW8sdGhpcy52aWV3LmhlaWdodD1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvKDIqdGhpcy56b29tKSxlPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvKDIqdGhpcy56b29tKSxpPSh0aGlzLnJpZ2h0K3RoaXMubGVmdCkvMixyPSh0aGlzLnRvcCt0aGlzLmJvdHRvbSkvMixvPWktdCxhPWkrdCxzPXIrZSxsPXItZTtpZihudWxsIT09dGhpcy52aWV3JiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGM9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS90aGlzLnZpZXcuZnVsbFdpZHRoL3RoaXMuem9vbSxkPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmZ1bGxIZWlnaHQvdGhpcy56b29tO28rPWMqdGhpcy52aWV3Lm9mZnNldFgsYT1vK2MqdGhpcy52aWV3LndpZHRoLHMtPWQqdGhpcy52aWV3Lm9mZnNldFksbD1zLWQqdGhpcy52aWV3LmhlaWdodH10aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhvLGEscyxsLHRoaXMubmVhcix0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubGVmdD10aGlzLmxlZnQsZS5vYmplY3QucmlnaHQ9dGhpcy5yaWdodCxlLm9iamVjdC50b3A9dGhpcy50b3AsZS5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixudWxsIT09dGhpcy52aWV3JiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGV9fTtUbS5wcm90b3R5cGUuaXNPcnRob2dyYXBoaWNDYW1lcmE9ITA7dmFyIGRfPWNsYXNzIGV4dGVuZHMgR2R7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50eXBlPSJSYXdTaGFkZXJNYXRlcmlhbCJ9fTtkXy5wcm90b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbD0hMDt2YXIgcl89NCx4cD04LFVjPU1hdGgucG93KDIseHApLGd0ZT1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0sX3RlPXhwLXJfKzErZ3RlLmxlbmd0aCxkQj1uZXcgVG0se19sb2RQbGFuZXM6ZngsX3NpemVMb2RzOmhlZSxfc2lnbWFzOnNJfT1aUGUoKSxnZWU9bmV3IGFuLHVCPW51bGwseG09KDErTWF0aC5zcXJ0KDUpKS8yLHEwPTEveG0sX2VlPVtuZXcgJCgxLDEsMSksbmV3ICQoLTEsMSwxKSxuZXcgJCgxLDEsLTEpLG5ldyAkKC0xLDEsLTEpLG5ldyAkKDAseG0scTApLG5ldyAkKDAseG0sLXEwKSxuZXcgJChxMCwwLHhtKSxuZXcgJCgtcTAsMCx4bSksbmV3ICQoeG0scTAsMCksbmV3ICQoLXhtLHEwLDApXSxSST1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoMjApLGU9bmV3ICQoMCwxLDApO3JldHVybiBuZXcgZF8oe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bjoyMH0sdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sc2FtcGxlczp7dmFsdWU6MX0sd2VpZ2h0czp7dmFsdWU6dH0sbGF0aXR1ZGluYWw6e3ZhbHVlOiExfSxkVGhldGE6e3ZhbHVlOjB9LG1pcEludDp7dmFsdWU6MH0scG9sZUF4aXM6e3ZhbHVlOmV9fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gaW50IHNhbXBsZXM7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IHdlaWdodHNbIG4gXTtcblx0XHRcdHVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZFRoZXRhO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBtaXBJbnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzMgcG9sZUF4aXM7XG5cblx0XHRcdCNkZWZpbmUgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHRcdFx0I2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cblxuXHRcdFx0dmVjMyBnZXRTYW1wbGUoIGZsb2F0IHRoZXRhLCB2ZWMzIGF4aXMgKSB7XG5cblx0XHRcdFx0ZmxvYXQgY29zVGhldGEgPSBjb3MoIHRoZXRhICk7XG5cdFx0XHRcdC8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvblxuXHRcdFx0XHR2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YVxuXHRcdFx0XHRcdCsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKVxuXHRcdFx0XHRcdCsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApO1xuXG5cdFx0XHRcdHJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHR2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0aWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7XG5cblx0XHRcdFx0XHRheGlzID0gdmVjMyggdk91dHB1dERpcmVjdGlvbi56LCAwLjAsIC0gdk91dHB1dERpcmVjdGlvbi54ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF4aXMgPSBub3JtYWxpemUoIGF4aXMgKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApO1xuXG5cdFx0XHRcdGZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHtcblxuXHRcdFx0XHRcdGlmICggaSA+PSBzYW1wbGVzICkge1xuXG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzp5cCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LGU9MCxpPS4xLHI9MTAwKXt1Qj10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbz10aGlzLl9hbGxvY2F0ZVRhcmdldHMoKTtyZXR1cm4gdGhpcy5fc2NlbmVUb0N1YmVVVih0LGkscixvKSxlPjAmJnRoaXMuX2JsdXIobywwLDAsZSksdGhpcy5fYXBwbHlQTVJFTShvKSx0aGlzLl9jbGVhbnVwKG8pLG99ZnJvbUVxdWlyZWN0YW5ndWxhcih0LGU9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQsZSl9ZnJvbUN1YmVtYXAodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWNvbXBpbGVDdWJlbWFwU2hhZGVyKCl7bnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPXZlZSgpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe251bGw9PT10aGlzLl9lcXVpcmVjdFNoYWRlciYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPWJlZSgpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9lcXVpcmVjdFNoYWRlcikpfWRpc3Bvc2UoKXt0aGlzLl9ibHVyTWF0ZXJpYWwuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCYmdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9jdWJlbWFwU2hhZGVyJiZ0aGlzLl9jdWJlbWFwU2hhZGVyLmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJnRoaXMuX2VxdWlyZWN0U2hhZGVyLmRpc3Bvc2UoKTtmb3IobGV0IHQ9MDt0PGZ4Lmxlbmd0aDt0KyspZnhbdF0uZGlzcG9zZSgpfV9jbGVhbnVwKHQpe3RoaXMuX3JlbmRlcmVyLnNldFJlbmRlclRhcmdldCh1QiksdC5zY2lzc29yVGVzdD0hMSxsSSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KX1fZnJvbVRleHR1cmUodCxlKXt1Qj10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgaT1lfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LGkpLHRoaXMuX2FwcGx5UE1SRU0oaSksdGhpcy5fY2xlYW51cChpKSxpfV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IGU9e21hZ0ZpbHRlcjpyYSxtaW5GaWx0ZXI6cmEsZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6dF8sZm9ybWF0OmJhLGVuY29kaW5nOk1wLGRlcHRoQnVmZmVyOiExfSxpPXllZShlKTtyZXR1cm4gaS5kZXB0aEJ1ZmZlcj0hdCxudWxsPT09dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD15ZWUoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgY28oZnhbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLGRCKX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgcz1uZXcgb2EoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLGQ9dGhpcy5fcmVuZGVyZXIsdT1kLmF1dG9DbGVhcixwPWQudG9uZU1hcHBpbmc7ZC5nZXRDbGVhckNvbG9yKGdlZSksZC50b25lTWFwcGluZz1icCxkLmF1dG9DbGVhcj0hMTtsZXQgZj1uZXcgU20oe25hbWU6IlBNUkVNLkJhY2tncm91bmQiLHNpZGU6eW8sZGVwdGhXcml0ZTohMSxkZXB0aFRlc3Q6ITF9KSxtPW5ldyBjbyhuZXcgRW0sZikseT0hMSxNPXQuYmFja2dyb3VuZDtNP00uaXNDb2xvciYmKGYuY29sb3IuY29weShNKSx0LmJhY2tncm91bmQ9bnVsbCx5PSEwKTooZi5jb2xvci5jb3B5KGdlZSkseT0hMCk7Zm9yKGxldCB2PTA7djw2O3YrKyl7bGV0IHg9diUzOzA9PT14PyhzLnVwLnNldCgwLGxbdl0sMCkscy5sb29rQXQoY1t2XSwwLDApKToxPT09eD8ocy51cC5zZXQoMCwwLGxbdl0pLHMubG9va0F0KDAsY1t2XSwwKSk6KHMudXAuc2V0KDAsbFt2XSwwKSxzLmxvb2tBdCgwLDAsY1t2XSkpLGxJKHIseCpVYyx2PjI/VWM6MCxVYyxVYyksZC5zZXRSZW5kZXJUYXJnZXQocikseSYmZC5yZW5kZXIobSxzKSxkLnJlbmRlcih0LHMpfW0uZ2VvbWV0cnkuZGlzcG9zZSgpLG0ubWF0ZXJpYWwuZGlzcG9zZSgpLGQudG9uZU1hcHBpbmc9cCxkLmF1dG9DbGVhcj11LHQuYmFja2dyb3VuZD1NfV90ZXh0dXJlVG9DdWJlVVYodCxlKXtsZXQgaT10aGlzLl9yZW5kZXJlcixyPXQubWFwcGluZz09PVp4fHx0Lm1hcHBpbmc9PT1LeDtyPyhudWxsPT09dGhpcy5fY3ViZW1hcFNoYWRlciYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9dmVlKCkpLHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT0hMT09PXQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEpOm51bGw9PT10aGlzLl9lcXVpcmVjdFNoYWRlciYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPWJlZSgpKTtsZXQgbz1yP3RoaXMuX2N1YmVtYXBTaGFkZXI6dGhpcy5fZXF1aXJlY3RTaGFkZXIsYT1uZXcgY28oZnhbMF0sbykscz1vLnVuaWZvcm1zO3MuZW52TWFwLnZhbHVlPXQscnx8cy50ZXhlbFNpemUudmFsdWUuc2V0KDEvdC5pbWFnZS53aWR0aCwxL3QuaW1hZ2UuaGVpZ2h0KSxsSShlLDAsMCwzKlVjLDIqVWMpLGkuc2V0UmVuZGVyVGFyZ2V0KGUpLGkucmVuZGVyKGEsZEIpfV9hcHBseVBNUkVNKHQpe2xldCBlPXRoaXMuX3JlbmRlcmVyLGk9ZS5hdXRvQ2xlYXI7ZS5hdXRvQ2xlYXI9ITE7Zm9yKGxldCByPTE7cjxfdGU7cisrKXtsZXQgbz1NYXRoLnNxcnQoc0lbcl0qc0lbcl0tc0lbci0xXSpzSVtyLTFdKTt0aGlzLl9ibHVyKHQsci0xLHIsbyxfZWVbKHItMSklX2VlLmxlbmd0aF0pfWUuYXV0b0NsZWFyPWl9X2JsdXIodCxlLGkscixvKXtsZXQgYT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LGEsZSxpLHIsImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihhLHQsaSxpLHIsImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQsZSxpLHIsbyxhLHMpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsOyJsYXRpdHVkaW5hbCIhPT1hJiYibG9uZ2l0dWRpbmFsIiE9PWEmJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT1uZXcgY28oZnhbcl0sYykscD1jLnVuaWZvcm1zLGY9aGVlW2ldLTEsbT1pc0Zpbml0ZShvKT9NYXRoLlBJLygyKmYpOjIqTWF0aC5QSS8zOSx5PW8vbSxNPWlzRmluaXRlKG8pPzErTWF0aC5mbG9vcigzKnkpOjIwO00+MjAmJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke299LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7TX0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAyMGApO2xldCB2PVtdLHg9MDtmb3IobGV0IHRlPTA7dGU8MjA7Kyt0ZSl7bGV0IEs9dGUveSxDZT1NYXRoLmV4cCgtSypLLzIpO3YucHVzaChDZSksMD09PXRlP3grPUNlOnRlPE0mJih4Kz0yKkNlKX1mb3IobGV0IHRlPTA7dGU8di5sZW5ndGg7dGUrKyl2W3RlXT12W3RlXS94O3AuZW52TWFwLnZhbHVlPXQudGV4dHVyZSxwLnNhbXBsZXMudmFsdWU9TSxwLndlaWdodHMudmFsdWU9dixwLmxhdGl0dWRpbmFsLnZhbHVlPSJsYXRpdHVkaW5hbCI9PT1hLHMmJihwLnBvbGVBeGlzLnZhbHVlPXMpLHAuZFRoZXRhLnZhbHVlPW0scC5taXBJbnQudmFsdWU9eHAtaTtsZXQgUj1oZWVbcl07bEkoZSwzKk1hdGgubWF4KDAsVWMtMipSKSwoMD09PXI/MDoyKlVjKSsyKlIqKHI+eHAtcl8/ci14cCtyXzowKSwzKlIsMipSKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcih1LGRCKX19O2Z1bmN0aW9uIFpQZSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPXhwO2ZvcihsZXQgcj0wO3I8X3RlO3IrKyl7bGV0IG89TWF0aC5wb3coMixpKTt0LnB1c2gobyk7bGV0IGE9MS9vO3I+eHAtcl8/YT1ndGVbci14cCtyXy0xXTowPT09ciYmKGE9MCksZS5wdXNoKGEpO2xldCBzPTEvKG8tMSksbD0tcy8yLGM9MStzLzIsZD1bbCxsLGMsbCxjLGMsbCxsLGMsYyxsLGNdLHU9NixwPTYsZj0zLG09Mix5PTEsTT1uZXcgRmxvYXQzMkFycmF5KGYqcCp1KSx2PW5ldyBGbG9hdDMyQXJyYXkobSpwKnUpLHg9bmV3IEZsb2F0MzJBcnJheSh5KnAqdSk7Zm9yKGxldCBBPTA7QTx1O0ErKyl7bGV0IEg9QSUzKjIvMy0xLHRlPUE+Mj8wOi0xO00uc2V0KFtILHRlLDAsSCsyLzMsdGUsMCxIKzIvMyx0ZSsxLDAsSCx0ZSwwLEgrMi8zLHRlKzEsMCxILHRlKzEsMF0sZipwKkEpLHYuc2V0KGQsbSpwKkEpLHguc2V0KFtBLEEsQSxBLEEsQV0seSpwKkEpfWxldCBSPW5ldyBXaTtSLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBBcihNLGYpKSxSLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBBcih2LG0pKSxSLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgQXIoeCx5KSksbi5wdXNoKFIpLGk+cl8mJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24geWVlKG4pe2xldCB0PW5ldyBRYSgzKlVjLDMqVWMsbik7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPSRJLHQudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLHQuc2Npc3NvclRlc3Q9ITAsdH1mdW5jdGlvbiBsSShuLHQsZSxpLHIpe24udmlld3BvcnQuc2V0KHQsZSxpLHIpLG4uc2Npc3Nvci5zZXQodCxlLGkscil9ZnVuY3Rpb24gYmVlKCl7bGV0IG49bmV3ICRlKDEsMSk7cmV0dXJuIG5ldyBkXyh7bmFtZToiRXF1aXJlY3Rhbmd1bGFyVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHRleGVsU2l6ZTp7dmFsdWU6bn19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcblxuXHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXG5cdFx0XHRcdHZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cdFx0XHRcdHZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTtcblx0XHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdFx0dmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnggKz0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgdHIgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di55ICs9IHRleGVsU2l6ZS55O1xuXHRcdFx0XHR2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueCAtPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cblx0XHRcdFx0dmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTtcblx0XHRcdFx0dmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggdG0sIGJtLCBmLnkgKTtcblxuXHRcdFx0fVxuXHRcdCIsYmxlbmRpbmc6eXAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiB2ZWUoKXtyZXR1cm4gbmV3IGRfKHtuYW1lOiJDdWJlbWFwVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOnlwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gSlBlKG4pe2xldCB0PW5ldyBXZWFrTWFwLGU9bnVsbDtmdW5jdGlvbiBvKHMpe2xldCBsPXMudGFyZ2V0O2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7bGV0IGM9dC5nZXQobCk7dm9pZCAwIT09YyYmKHQuZGVsZXRlKGwpLGMuZGlzcG9zZSgpKX1yZXR1cm57Z2V0OmZ1bmN0aW9uKHMpe2lmKHMmJnMuaXNUZXh0dXJlKXtsZXQgbD1zLm1hcHBpbmcsYz1sPT09eEJ8fGw9PT1DQixkPWw9PT1aeHx8bD09PUt4O2lmKGN8fGQpe2lmKHMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlJiYhMD09PXMubmVlZHNQTVJFTVVwZGF0ZSl7cy5uZWVkc1BNUkVNVXBkYXRlPSExO2xldCB1PXQuZ2V0KHMpO3JldHVybiBudWxsPT09ZSYmKGU9bmV3IFJJKG4pKSx1PWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKHMsdSk6ZS5mcm9tQ3ViZW1hcChzLHUpLHQuc2V0KHMsdSksdS50ZXh0dXJlfWlmKHQuaGFzKHMpKXJldHVybiB0LmdldChzKS50ZXh0dXJlO3tsZXQgdT1zLmltYWdlO2lmKGMmJnUmJnUuaGVpZ2h0PjB8fGQmJnUmJmZ1bmN0aW9uKHMpe2xldCBsPTA7Zm9yKGxldCBkPTA7ZDw2O2QrKyl2b2lkIDAhPT1zW2RdJiZsKys7cmV0dXJuIDY9PT1sfSh1KSl7bnVsbD09PWUmJihlPW5ldyBSSShuKSk7bGV0IHA9Yz9lLmZyb21FcXVpcmVjdGFuZ3VsYXIocyk6ZS5mcm9tQ3ViZW1hcChzKTtyZXR1cm4gdC5zZXQocyxwKSxzLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHAudGV4dHVyZX1yZXR1cm4gbnVsbH19fXJldHVybiBzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dD1uZXcgV2Vha01hcCxudWxsIT09ZSYmKGUuZGlzcG9zZSgpLGU9bnVsbCl9fX1mdW5jdGlvbiAkUGUobil7bGV0IHQ9e307ZnVuY3Rpb24gZShpKXtpZih2b2lkIDAhPT10W2ldKXJldHVybiB0W2ldO2xldCByO3N3aXRjaChpKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjpyPW4uZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDpyPW4uZ2V0RXh0ZW5zaW9uKGkpfXJldHVybiB0W2ldPXIscn1yZXR1cm57aGFzOmZ1bmN0aW9uKGkpe3JldHVybiBudWxsIT09ZShpKX0saW5pdDpmdW5jdGlvbihpKXtpLmlzV2ViR0wyP2UoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTooZSgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLGUoIk9FU190ZXh0dXJlX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLGUoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIiksZSgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIiksZSgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLGUoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksZSgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxlKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxlKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxlKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKGkpe2xldCByPWUoaSk7cmV0dXJuIG51bGw9PT1yJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIraSsiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLHJ9fX1mdW5jdGlvbiBlT2Uobix0LGUsaSl7bGV0IHI9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBhKHUpe2xldCBwPXUudGFyZ2V0O251bGwhPT1wLmluZGV4JiZ0LnJlbW92ZShwLmluZGV4KTtmb3IobGV0IG0gaW4gcC5hdHRyaWJ1dGVzKXQucmVtb3ZlKHAuYXR0cmlidXRlc1ttXSk7cC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxkZWxldGUgcltwLmlkXTtsZXQgZj1vLmdldChwKTtmJiYodC5yZW1vdmUoZiksby5kZWxldGUocCkpLGkucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkocCksITA9PT1wLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkmJmRlbGV0ZSBwLl9tYXhJbnN0YW5jZUNvdW50LGUubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBjKHUpe2xldCBwPVtdLGY9dS5pbmRleCxtPXUuYXR0cmlidXRlcy5wb3NpdGlvbix5PTA7aWYobnVsbCE9PWYpe2xldCB4PWYuYXJyYXk7eT1mLnZlcnNpb247Zm9yKGxldCBSPTAsQT14Lmxlbmd0aDtSPEE7Uis9Myl7bGV0IEg9eFtSKzBdLHRlPXhbUisxXSxLPXhbUisyXTtwLnB1c2goSCx0ZSx0ZSxLLEssSCl9fWVsc2V7eT1tLnZlcnNpb247Zm9yKGxldCBSPTAsQT1tLmFycmF5Lmxlbmd0aC8zLTE7UjxBO1IrPTMpe2xldCBIPVIrMCx0ZT1SKzEsSz1SKzI7cC5wdXNoKEgsdGUsdGUsSyxLLEgpfX1sZXQgTT1uZXcobXRlKHApP0lJOkRJKShwLDEpO00udmVyc2lvbj15O2xldCB2PW8uZ2V0KHUpO3YmJnQucmVtb3ZlKHYpLG8uc2V0KHUsTSl9cmV0dXJue2dldDpmdW5jdGlvbih1LHApe3JldHVybiEwPT09cltwLmlkXXx8KHAuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSkscltwLmlkXT0hMCxlLm1lbW9yeS5nZW9tZXRyaWVzKyspLHB9LHVwZGF0ZTpmdW5jdGlvbih1KXtsZXQgcD11LmF0dHJpYnV0ZXM7Zm9yKGxldCBtIGluIHApdC51cGRhdGUocFttXSwzNDk2Mik7bGV0IGY9dS5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBtIGluIGYpe2xldCB5PWZbbV07Zm9yKGxldCBNPTAsdj15Lmxlbmd0aDtNPHY7TSsrKXQudXBkYXRlKHlbTV0sMzQ5NjIpfX0sZ2V0V2lyZWZyYW1lQXR0cmlidXRlOmZ1bmN0aW9uKHUpe2xldCBwPW8uZ2V0KHUpO2lmKHApe2xldCBmPXUuaW5kZXg7bnVsbCE9PWYmJnAudmVyc2lvbjxmLnZlcnNpb24mJmModSl9ZWxzZSBjKHUpO3JldHVybiBvLmdldCh1KX19fWZ1bmN0aW9uIHRPZShuLHQsZSxpKXtsZXQgbyxzLGwscj1pLmlzV2ViR0wyO3RoaXMuc2V0TW9kZT1mdW5jdGlvbihwKXtvPXB9LHRoaXMuc2V0SW5kZXg9ZnVuY3Rpb24ocCl7cz1wLnR5cGUsbD1wLmJ5dGVzUGVyRWxlbWVudH0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24ocCxmKXtuLmRyYXdFbGVtZW50cyhvLGYscyxwKmwpLGUudXBkYXRlKGYsbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24ocCxmLG0pe2lmKDA9PT1tKXJldHVybjtsZXQgeSxNO2lmKHIpeT1uLE09ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZih5PXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksTT0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT15KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTt5W01dKG8sZixzLHAqbCxtKSxlLnVwZGF0ZShmLG8sbSl9fWZ1bmN0aW9uIG5PZShuKXtsZXQgZT17ZnJhbWU6MCxjYWxsczowLHRyaWFuZ2xlczowLHBvaW50czowLGxpbmVzOjB9O3JldHVybnttZW1vcnk6e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxyZW5kZXI6ZSxwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDpmdW5jdGlvbigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH0sdXBkYXRlOmZ1bmN0aW9uKG8sYSxzKXtzd2l0Y2goZS5jYWxscysrLGEpe2Nhc2UgNDplLnRyaWFuZ2xlcys9cyooby8zKTticmVhaztjYXNlIDE6ZS5saW5lcys9cyooby8yKTticmVhaztjYXNlIDM6ZS5saW5lcys9cyooby0xKTticmVhaztjYXNlIDI6ZS5saW5lcys9cypvO2JyZWFrO2Nhc2UgMDplLnBvaW50cys9cypvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGEpfX19fXZhciBQeD1jbGFzcyBleHRlbmRzIHVve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHI9MSl7c3VwZXIobnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0OmksZGVwdGg6cn0sdGhpcy5tYWdGaWx0ZXI9Ym8sdGhpcy5taW5GaWx0ZXI9Ym8sdGhpcy53cmFwUj1ncyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtmdW5jdGlvbiBpT2Uobix0KXtyZXR1cm4gblswXS10WzBdfWZ1bmN0aW9uIHJPZShuLHQpe3JldHVybiBNYXRoLmFicyh0WzFdKS1NYXRoLmFicyhuWzFdKX1mdW5jdGlvbiB4ZWUobix0KXtsZXQgZT0xLGk9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O2kgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZT0xMjc6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZT0zMjc2NzppIGluc3RhbmNlb2YgSW50MzJBcnJheT9lPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsaSksbi5kaXZpZGVTY2FsYXIoZSl9ZnVuY3Rpb24gb09lKG4sdCxlKXtsZXQgaT17fSxyPW5ldyBGbG9hdDMyQXJyYXkoOCksbz1uZXcgV2Vha01hcCxhPW5ldyAkLHM9W107Zm9yKGxldCBjPTA7Yzw4O2MrKylzW2NdPVtjLDBdO3JldHVybnt1cGRhdGU6ZnVuY3Rpb24oYyxkLHUscCl7bGV0IGY9Yy5tb3JwaFRhcmdldEluZmx1ZW5jZXM7aWYoITA9PT10LmlzV2ViR0wyKXtsZXQgbT1kLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGgseT1vLmdldChkKTtpZih2b2lkIDA9PT15fHx5LmNvdW50IT09bSl7bGV0IHJlPWZ1bmN0aW9uKCl7SWUuZGlzcG9zZSgpLG8uZGVsZXRlKGQpLGQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscmUpfTt2b2lkIDAhPT15JiZ5LnRleHR1cmUuZGlzcG9zZSgpO2xldCB4PXZvaWQgMCE9PWQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxSPWQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLEE9ZC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsfHxbXSx0ZT0hMD09PXg/MjoxLEs9ZC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50KnRlLENlPTE7Sz50Lm1heFRleHR1cmVTaXplJiYoQ2U9TWF0aC5jZWlsKEsvdC5tYXhUZXh0dXJlU2l6ZSksSz10Lm1heFRleHR1cmVTaXplKTtsZXQgWmU9bmV3IEZsb2F0MzJBcnJheShLKkNlKjQqbSksSWU9bmV3IFB4KFplLEssQ2UsbSk7SWUuZm9ybWF0PWJhLEllLnR5cGU9Q20sSWUubmVlZHNVcGRhdGU9ITA7bGV0IEk9NCp0ZTtmb3IobGV0IGNlPTA7Y2U8bTtjZSsrKXtsZXQgZmU9UltjZV0sX2U9QVtjZV0sbmU9SypDZSo0KmNlO2ZvcihsZXQgZGU9MDtkZTxmZS5jb3VudDtkZSsrKXthLmZyb21CdWZmZXJBdHRyaWJ1dGUoZmUsZGUpLCEwPT09ZmUubm9ybWFsaXplZCYmeGVlKGEsZmUpO2xldCB1ZT1kZSpJO1plW25lK3VlKzBdPWEueCxaZVtuZSt1ZSsxXT1hLnksWmVbbmUrdWUrMl09YS56LFplW25lK3VlKzNdPTAsITA9PT14JiYoYS5mcm9tQnVmZmVyQXR0cmlidXRlKF9lLGRlKSwhMD09PV9lLm5vcm1hbGl6ZWQmJnhlZShhLF9lKSxaZVtuZSt1ZSs0XT1hLngsWmVbbmUrdWUrNV09YS55LFplW25lK3VlKzZdPWEueixaZVtuZSt1ZSs3XT0wKX19eT17Y291bnQ6bSx0ZXh0dXJlOkllLHNpemU6bmV3ICRlKEssQ2UpfSxvLnNldChkLHkpLGQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscmUpfWxldCBNPTA7Zm9yKGxldCB4PTA7eDxmLmxlbmd0aDt4KyspTSs9Zlt4XTtsZXQgdj1kLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS1NO3AuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLHYpLHAuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGYpLHAuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlIix5LnRleHR1cmUsZSkscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIix5LnNpemUpfWVsc2V7bGV0IG09dm9pZCAwPT09Zj8wOmYubGVuZ3RoLHk9aVtkLmlkXTtpZih2b2lkIDA9PT15fHx5Lmxlbmd0aCE9PW0pe3k9W107Zm9yKGxldCBBPTA7QTxtO0ErKyl5W0FdPVtBLDBdO2lbZC5pZF09eX1mb3IobGV0IEE9MDtBPG07QSsrKXtsZXQgSD15W0FdO0hbMF09QSxIWzFdPWZbQV19eS5zb3J0KHJPZSk7Zm9yKGxldCBBPTA7QTw4O0ErKylBPG0mJnlbQV1bMV0/KHNbQV1bMF09eVtBXVswXSxzW0FdWzFdPXlbQV1bMV0pOihzW0FdWzBdPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHNbQV1bMV09MCk7cy5zb3J0KGlPZSk7bGV0IE09ZC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sdj1kLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwseD0wO2ZvcihsZXQgQT0wO0E8ODtBKyspe2xldCBIPXNbQV0sdGU9SFswXSxLPUhbMV07dGUhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmSz8oTSYmZC5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitBKSE9PU1bdGVdJiZkLnNldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0EsTVt0ZV0pLHYmJmQuZ2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrQSkhPT12W3RlXSYmZC5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitBLHZbdGVdKSxyW0FdPUsseCs9Syk6KE0mJiEwPT09ZC5oYXNBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitBKSYmZC5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitBKSx2JiYhMD09PWQuaGFzQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrQSkmJmQuZGVsZXRlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrQSkscltBXT0wKX1sZXQgUj1kLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS14O3AuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLFIpLHAuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLHIpfX19fWZ1bmN0aW9uIGFPZShuLHQsZSxpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBzKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksZS5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksbnVsbCE9PWMuaW5zdGFuY2VDb2xvciYmZS5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOmZ1bmN0aW9uKGwpe2xldCBjPWkucmVuZGVyLmZyYW1lLHU9dC5nZXQobCxsLmdlb21ldHJ5KTtyZXR1cm4gci5nZXQodSkhPT1jJiYodC51cGRhdGUodSksci5zZXQodSxjKSksbC5pc0luc3RhbmNlZE1lc2gmJighMT09PWwuaGFzRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscykmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksZS51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbnVsbCE9PWwuaW5zdGFuY2VDb2xvciYmZS51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksdX0sZGlzcG9zZTpmdW5jdGlvbigpe3I9bmV3IFdlYWtNYXB9fX1QeC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTJEQXJyYXk9ITA7dmFyIGtJPWNsYXNzIGV4dGVuZHMgdW97Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1ibyx0aGlzLm1pbkZpbHRlcj1ibyx0aGlzLndyYXBSPWdzLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2tJLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIHl0ZT1uZXcgdW8sYnRlPW5ldyBQeCx2dGU9bmV3IGtJLHh0ZT1uZXcgbF8sQ2VlPVtdLE1lZT1bXSx3ZWU9bmV3IEZsb2F0MzJBcnJheSgxNiksU2VlPW5ldyBGbG9hdDMyQXJyYXkoOSksRWVlPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gYl8obix0LGUpe2xldCBpPW5bMF07aWYoaTw9MHx8aT4wKXJldHVybiBuO2xldCByPXQqZSxvPUNlZVtyXTtpZih2b2lkIDA9PT1vJiYobz1uZXcgRmxvYXQzMkFycmF5KHIpLENlZVtyXT1vKSwwIT09dCl7aS50b0FycmF5KG8sMCk7Zm9yKGxldCBhPTEscz0wO2EhPT10OysrYSlzKz1lLG5bYV0udG9BcnJheShvLHMpfXJldHVybiBvfWZ1bmN0aW9uIHZhKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gc2Eobix0KXtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspbltlXT10W2VdfWZ1bmN0aW9uIHRBKG4sdCl7bGV0IGU9TWVlW3RdO3ZvaWQgMD09PWUmJihlPW5ldyBJbnQzMkFycmF5KHQpLE1lZVt0XT1lKTtmb3IobGV0IGk9MDtpIT09dDsrK2kpZVtpXT1uLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gZX1mdW5jdGlvbiBzT2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMWYodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24gbE9lKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT10LngpKGVbMF0hPT10Lnh8fGVbMV0hPT10LnkpJiYobi51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLGVbMF09dC54LGVbMV09dC55KTtlbHNle2lmKHZhKGUsdCkpcmV0dXJuO24udW5pZm9ybTJmdih0aGlzLmFkZHIsdCksc2EoZSx0KX19ZnVuY3Rpb24gY09lKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT10LngpKGVbMF0hPT10Lnh8fGVbMV0hPT10Lnl8fGVbMl0hPT10LnopJiYobi51bmlmb3JtM2YodGhpcy5hZGRyLHQueCx0LnksdC56KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueik7ZWxzZSBpZih2b2lkIDAhPT10LnIpKGVbMF0hPT10LnJ8fGVbMV0hPT10Lmd8fGVbMl0hPT10LmIpJiYobi51bmlmb3JtM2YodGhpcy5hZGRyLHQucix0LmcsdC5iKSxlWzBdPXQucixlWzFdPXQuZyxlWzJdPXQuYik7ZWxzZXtpZih2YShlLHQpKXJldHVybjtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLHQpLHNhKGUsdCl9fWZ1bmN0aW9uIGRPZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09dC54KShlWzBdIT09dC54fHxlWzFdIT09dC55fHxlWzJdIT09dC56fHxlWzNdIT09dC53KSYmKG4udW5pZm9ybTRmKHRoaXMuYWRkcix0LngsdC55LHQueix0LncpLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56LGVbM109dC53KTtlbHNle2lmKHZhKGUsdCkpcmV0dXJuO24udW5pZm9ybTRmdih0aGlzLmFkZHIsdCksc2EoZSx0KX19ZnVuY3Rpb24gdU9lKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYodmEoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxzYShlLHQpfWVsc2V7aWYodmEoZSxpKSlyZXR1cm47RWVlLnNldChpKSxuLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLEVlZSksc2EoZSxpKX19ZnVuY3Rpb24gcE9lKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYodmEoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxzYShlLHQpfWVsc2V7aWYodmEoZSxpKSlyZXR1cm47U2VlLnNldChpKSxuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLFNlZSksc2EoZSxpKX19ZnVuY3Rpb24gZk9lKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYodm9pZCAwPT09aSl7aWYodmEoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxzYShlLHQpfWVsc2V7aWYodmEoZSxpKSlyZXR1cm47d2VlLnNldChpKSxuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHdlZSksc2EoZSxpKX19ZnVuY3Rpb24gbU9lKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIGhPZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7dmEoZSx0KXx8KG4udW5pZm9ybTJpdih0aGlzLmFkZHIsdCksc2EoZSx0KSl9ZnVuY3Rpb24gZ09lKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTt2YShlLHQpfHwobi51bmlmb3JtM2l2KHRoaXMuYWRkcix0KSxzYShlLHQpKX1mdW5jdGlvbiBfT2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO3ZhKGUsdCl8fChuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLHNhKGUsdCkpfWZ1bmN0aW9uIHlPZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7ZVswXSE9PXQmJihuLnVuaWZvcm0xdWkodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24gYk9lKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTt2YShlLHQpfHwobi51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCksc2EoZSx0KSl9ZnVuY3Rpb24gdk9lKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTt2YShlLHQpfHwobi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksc2EoZSx0KSl9ZnVuY3Rpb24geE9lKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTt2YShlLHQpfHwobi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCksc2EoZSx0KSl9ZnVuY3Rpb24gQ09lKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNhZmVTZXRUZXh0dXJlMkQodHx8eXRlLHIpfWZ1bmN0aW9uIE1PZShuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zZXRUZXh0dXJlM0QodHx8dnRlLHIpfWZ1bmN0aW9uIHdPZShuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZUN1YmUodHx8eHRlLHIpfWZ1bmN0aW9uIFNPZShuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zZXRUZXh0dXJlMkRBcnJheSh0fHxidGUscil9ZnVuY3Rpb24gVE9lKG4sdCl7bi51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBET2Uobix0KXtsZXQgZT1iXyh0LHRoaXMuc2l6ZSwyKTtuLnVuaWZvcm0yZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIElPZShuLHQpe2xldCBlPWJfKHQsdGhpcy5zaXplLDMpO24udW5pZm9ybTNmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gQU9lKG4sdCl7bGV0IGU9Yl8odCx0aGlzLnNpemUsNCk7bi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBST2Uobix0KXtsZXQgZT1iXyh0LHRoaXMuc2l6ZSw0KTtuLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIGtPZShuLHQpe2xldCBlPWJfKHQsdGhpcy5zaXplLDkpO24udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gUE9lKG4sdCl7bGV0IGU9Yl8odCx0aGlzLnNpemUsMTYpO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gT09lKG4sdCl7bi51bmlmb3JtMWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBGT2Uobix0KXtuLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIExPZShuLHQpe24udW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gTk9lKG4sdCl7bi51bmlmb3JtNGl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCT2Uobix0KXtuLnVuaWZvcm0xdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWT2Uobix0KXtuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBIT2Uobix0KXtuLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiB6T2Uobix0KXtuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBVT2Uobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9dEEoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNhZmVTZXRUZXh0dXJlMkQodFtvXXx8eXRlLHJbb10pfWZ1bmN0aW9uIGpPZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj10QShlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2V0VGV4dHVyZTNEKHRbb118fHZ0ZSxyW29dKX1mdW5jdGlvbiBHT2Uobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9dEEoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNhZmVTZXRUZXh0dXJlQ3ViZSh0W29dfHx4dGUscltvXSl9ZnVuY3Rpb24gV09lKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPXRBKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zZXRUZXh0dXJlMkRBcnJheSh0W29dfHxidGUscltvXSl9ZnVuY3Rpb24gWU9lKG4sdCxlKXt0aGlzLmlkPW4sdGhpcy5hZGRyPWUsdGhpcy5jYWNoZT1bXSx0aGlzLnNldFZhbHVlPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIDUxMjY6cmV0dXJuIHNPZTtjYXNlIDM1NjY0OnJldHVybiBsT2U7Y2FzZSAzNTY2NTpyZXR1cm4gY09lO2Nhc2UgMzU2NjY6cmV0dXJuIGRPZTtjYXNlIDM1Njc0OnJldHVybiB1T2U7Y2FzZSAzNTY3NTpyZXR1cm4gcE9lO2Nhc2UgMzU2NzY6cmV0dXJuIGZPZTtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gbU9lO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gaE9lO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gZ09lO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gX09lO2Nhc2UgNTEyNTpyZXR1cm4geU9lO2Nhc2UgMzYyOTQ6cmV0dXJuIGJPZTtjYXNlIDM2Mjk1OnJldHVybiB2T2U7Y2FzZSAzNjI5NjpyZXR1cm4geE9lO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gQ09lO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBNT2U7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gd09lO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIFNPZX19KHQudHlwZSl9ZnVuY3Rpb24gQ3RlKG4sdCxlKXt0aGlzLmlkPW4sdGhpcy5hZGRyPWUsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gVE9lO2Nhc2UgMzU2NjQ6cmV0dXJuIERPZTtjYXNlIDM1NjY1OnJldHVybiBJT2U7Y2FzZSAzNTY2NjpyZXR1cm4gQU9lO2Nhc2UgMzU2NzQ6cmV0dXJuIFJPZTtjYXNlIDM1Njc1OnJldHVybiBrT2U7Y2FzZSAzNTY3NjpyZXR1cm4gUE9lO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBPT2U7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBGT2U7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBMT2U7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBOT2U7Y2FzZSA1MTI1OnJldHVybiBCT2U7Y2FzZSAzNjI5NDpyZXR1cm4gVk9lO2Nhc2UgMzYyOTU6cmV0dXJuIEhPZTtjYXNlIDM2Mjk2OnJldHVybiB6T2U7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBVT2U7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIGpPZTtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBHT2U7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gV09lfX0odC50eXBlKX1mdW5jdGlvbiBNdGUobil7dGhpcy5pZD1uLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fUN0ZS5wcm90b3R5cGUudXBkYXRlQ2FjaGU9ZnVuY3Rpb24obil7bGV0IHQ9dGhpcy5jYWNoZTtuIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZ0Lmxlbmd0aCE9PW4ubGVuZ3RoJiYodGhpcy5jYWNoZT1uZXcgRmxvYXQzMkFycmF5KG4ubGVuZ3RoKSksc2EodCxuKX0sTXRlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dGhpcy5zZXE7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyIT09bzsrK3Ipe2xldCBhPWlbcl07YS5zZXRWYWx1ZShuLHRbYS5pZF0sZSl9fTt2YXIgcEI9LyhcdyspKFxdKT8oXFt8XC4pPy9nO2Z1bmN0aW9uIFRlZShuLHQpe24uc2VxLnB1c2godCksbi5tYXBbdC5pZF09dH1mdW5jdGlvbiBYT2Uobix0LGUpe2xldCBpPW4ubmFtZSxyPWkubGVuZ3RoO2ZvcihwQi5sYXN0SW5kZXg9MDs7KXtsZXQgbz1wQi5leGVjKGkpLHM9b1sxXSxjPW9bM107aWYoIl0iPT09b1syXSYmKHN8PTApLHZvaWQgMD09PWN8fCJbIj09PWMmJnBCLmxhc3RJbmRleCsyPT09cil7VGVlKGUsdm9pZCAwPT09Yz9uZXcgWU9lKHMsbix0KTpuZXcgQ3RlKHMsbix0KSk7YnJlYWt9e2xldCB1PWUubWFwW3NdO3ZvaWQgMD09PXUmJih1PW5ldyBNdGUocyksVGVlKGUsdSkpLGU9dX19fWZ1bmN0aW9uIENwKG4sdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IGU9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgaT0wO2k8ZTsrK2kpe2xldCByPW4uZ2V0QWN0aXZlVW5pZm9ybSh0LGkpO1hPZShyLG4uZ2V0VW5pZm9ybUxvY2F0aW9uKHQsci5uYW1lKSx0aGlzKX19ZnVuY3Rpb24gRGVlKG4sdCxlKXtsZXQgaT1uLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gbi5zaGFkZXJTb3VyY2UoaSxlKSxuLmNvbXBpbGVTaGFkZXIoaSksaX1DcC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9dGhpcy5tYXBbdF07dm9pZCAwIT09ciYmci5zZXRWYWx1ZShuLGUsaSl9LENwLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dFtlXTt2b2lkIDAhPT1pJiZ0aGlzLnNldFZhbHVlKG4sZSxpKX0sQ3AudXBsb2FkPWZ1bmN0aW9uKG4sdCxlLGkpe2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7ciE9PW87KytyKXtsZXQgYT10W3JdLHM9ZVthLmlkXTshMSE9PXMubmVlZHNVcGRhdGUmJmEuc2V0VmFsdWUobixzLnZhbHVlLGkpfX0sQ3Auc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj1uLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPW5baV07by5pZCBpbiB0JiZlLnB1c2gobyl9cmV0dXJuIGV9O3ZhciBRT2U9MDtmdW5jdGlvbiBJZWUobix0LGUpe2xldCBpPW4uZ2V0U2hhZGVyUGFyYW1ldGVyKHQsMzU3MTMpLHI9bi5nZXRTaGFkZXJJbmZvTG9nKHQpLnRyaW0oKTtyZXR1cm4gaSYmIiI9PT1yPyIiOmUudG9VcHBlckNhc2UoKSsiXG5cbiIrcisiXG5cbiIrZnVuY3Rpb24obil7bGV0IHQ9bi5zcGxpdCgiXG4iKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPWUrMSsiOiAiK3RbZV07cmV0dXJuIHQuam9pbigiXG4iKX0obi5nZXRTaGFkZXJTb3VyY2UodCkpfWZ1bmN0aW9uIEpPZShuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIE1wOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSBEcjpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6IixuKSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX0odCk7cmV0dXJuInZlYzQgIituKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrZVswXStlWzFdKyI7IH0ifWZ1bmN0aW9uICRPZShuLHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIFNBZTplPSJMaW5lYXIiO2JyZWFrO2Nhc2UgRUFlOmU9IlJlaW5oYXJkIjticmVhaztjYXNlIFRBZTplPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgREFlOmU9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgSUFlOmU9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxlPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrbisiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIitlKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gdngobil7cmV0dXJuIiIhPT1ufWZ1bmN0aW9uIEFlZShuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBSZWUobix0KXtyZXR1cm4gbi5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcy10Lm51bUNsaXBJbnRlcnNlY3Rpb24pfXZhciBpRmU9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBJQihuKXtyZXR1cm4gbi5yZXBsYWNlKGlGZSxyRmUpfWZ1bmN0aW9uIHJGZShuLHQpe2xldCBlPXZpW3RdO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJDYW4gbm90IHJlc29sdmUgI2luY2x1ZGUgPCIrdCsiPiIpO3JldHVybiBJQihlKX12YXIgb0ZlPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csYUZlPS8jcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XHMrZm9yXHMqXChccyppbnRccytpXHMqPVxzKihcZCspXHMqO1xzKmlccyo8XHMqKFxkKylccyo7XHMqaVxzKlwrXCtccypcKVxzKnsoW1xzXFNdKz8pfVxzKyNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kL2c7ZnVuY3Rpb24ga2VlKG4pe3JldHVybiBuLnJlcGxhY2UoYUZlLHd0ZSkucmVwbGFjZShvRmUsc0ZlKX1mdW5jdGlvbiBzRmUobix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiV2ViR0xQcm9ncmFtOiAjcHJhZ21hIHVucm9sbF9sb29wIHNoYWRlciBzeW50YXggaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0IHN5bnRheCBpbnN0ZWFkLiIpLHd0ZSgwLHQsZSxpKX1mdW5jdGlvbiB3dGUobix0LGUsaSl7bGV0IHI9IiI7Zm9yKGxldCBvPXBhcnNlSW50KHQpO288cGFyc2VJbnQoZSk7bysrKXIrPWkucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK28rIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLG8pO3JldHVybiByfWZ1bmN0aW9uIFBlZShuKXtsZXQgdD0icHJlY2lzaW9uICIrbi5wcmVjaXNpb24rIiBmbG9hdDtcbnByZWNpc2lvbiAiK24ucHJlY2lzaW9uKyIgaW50OyI7cmV0dXJuImhpZ2hwIj09PW4ucHJlY2lzaW9uP3QrPSJcbiNkZWZpbmUgSElHSF9QUkVDSVNJT04iOiJtZWRpdW1wIj09PW4ucHJlY2lzaW9uP3QrPSJcbiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiI6Imxvd3AiPT09bi5wcmVjaXNpb24mJih0Kz0iXG4jZGVmaW5lIExPV19QUkVDSVNJT04iKSx0fWZ1bmN0aW9uIHBGZShuLHQsZSxpKXtsZXQgeSxNLHI9bi5nZXRDb250ZXh0KCksbz1lLmRlZmluZXMsYT1lLnZlcnRleFNoYWRlcixzPWUuZnJhZ21lbnRTaGFkZXIsbD1mdW5jdGlvbihuKXtsZXQgdD0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiO3JldHVybiBuLnNoYWRvd01hcFR5cGU9PT1sdGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjpuLnNoYWRvd01hcFR5cGU9PT1pQWU/dD0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOm4uc2hhZG93TWFwVHlwZT09PWJ4JiYodD0iU0hBRE9XTUFQX1RZUEVfVlNNIiksdH0oZSksYz1mdW5jdGlvbihuKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYobi5lbnZNYXApc3dpdGNoKG4uZW52TWFwTW9kZSl7Y2FzZSBaeDpjYXNlIEt4OnQ9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgJEk6Y2FzZSBGVjp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIn1yZXR1cm4gdH0oZSksZD1mdW5jdGlvbihuKXtsZXQgdD0iRU5WTUFQX01PREVfUkVGTEVDVElPTiI7aWYobi5lbnZNYXApc3dpdGNoKG4uZW52TWFwTW9kZSl7Y2FzZSBLeDpjYXNlIEZWOnQ9IkVOVk1BUF9NT0RFX1JFRlJBQ1RJT04ifXJldHVybiB0fShlKSx1PWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfQkxFTkRJTkdfTk9ORSI7aWYobi5lbnZNYXApc3dpdGNoKG4uY29tYmluZSl7Y2FzZSBKSTp0PSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgTUFlOnQ9IkVOVk1BUF9CTEVORElOR19NSVgiO2JyZWFrO2Nhc2Ugd0FlOnQ9IkVOVk1BUF9CTEVORElOR19BREQifXJldHVybiB0fShlKSxwPWUuaXNXZWJHTDI/IiI6ZnVuY3Rpb24obil7cmV0dXJuW24uZXh0ZW5zaW9uRGVyaXZhdGl2ZXN8fG4uZW52TWFwQ3ViZVVWfHxuLmJ1bXBNYXB8fG4udGFuZ2VudFNwYWNlTm9ybWFsTWFwfHxuLmNsZWFyY29hdE5vcm1hbE1hcHx8bi5mbGF0U2hhZGluZ3x8InBoeXNpY2FsIj09PW4uc2hhZGVySUQ/IiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlIjoiIiwobi5leHRlbnNpb25GcmFnRGVwdGh8fG4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikmJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLG4uZXh0ZW5zaW9uRHJhd0J1ZmZlcnMmJm4ucmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVycz8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXB8fG4udHJhbnNtaXNzaW9uKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcih2eCkuam9pbigiXG4iKX0oZSksZj1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTshMSE9PWkmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oIlxuIil9KG8pLG09ci5jcmVhdGVQcm9ncmFtKCksdj1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rIlxuIjoiIjtlLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KHk9W2ZdLmZpbHRlcih2eCkuam9pbigiXG4iKSx5Lmxlbmd0aD4wJiYoeSs9IlxuIiksTT1bcCxmXS5maWx0ZXIodngpLmpvaW4oIlxuIiksTS5sZW5ndGg+MCYmKE0rPSJcbiIpKTooeT1bUGVlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGYsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitkOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiYhMT09PWUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIlx0YXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiXHRhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCJcdGF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiXHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIlx0YXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiXHQjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiXHQjZWxzZSIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiXHQjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsIlxuIl0uZmlsdGVyKHZ4KS5qb2luKCJcbiIpLE09W3AsUGVlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGYsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK2Q6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsZS50b25lTWFwcGluZyE9PWJwPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsZS50b25lTWFwcGluZyE9PWJwP3ZpLnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsZS50b25lTWFwcGluZyE9PWJwPyRPZSgidG9uZU1hcHBpbmciLGUudG9uZU1hcHBpbmcpOiIiLGUuZGl0aGVyaW5nPyIjZGVmaW5lIERJVEhFUklORyI6IiIsZS5hbHBoYVdyaXRlPyIiOiIjZGVmaW5lIE9QQVFVRSIsdmkuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsSk9lKCJsaW5lYXJUb091dHB1dFRleGVsIixlLm91dHB1dEVuY29kaW5nKSxlLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrZS5kZXB0aFBhY2tpbmc6IiIsIlxuIl0uZmlsdGVyKHZ4KS5qb2luKCJcbiIpKSxhPUlCKGEpLGE9QWVlKGEsZSksYT1SZWUoYSxlKSxzPUlCKHMpLHM9QWVlKHMsZSkscz1SZWUocyxlKSxhPWtlZShhKSxzPWtlZShzKSxlLmlzV2ViR0wyJiYhMCE9PWUuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKHY9IiN2ZXJzaW9uIDMwMCBlc1xuIix5PVsicHJlY2lzaW9uIG1lZGl1bXAgc2FtcGxlcjJEQXJyYXk7IiwiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oIlxuIikrIlxuIit5LE09WyIjZGVmaW5lIHZhcnlpbmcgaW4iLGUuZ2xzbFZlcnNpb249PT10ZWU/IiI6ImxheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLGUuZ2xzbFZlcnNpb249PT10ZWU/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oIlxuIikrIlxuIitNKTtsZXQgdGUsSyxSPXYrTStzLEE9RGVlKHIsMzU2MzMsdit5K2EpLEg9RGVlKHIsMzU2MzIsUik7aWYoci5hdHRhY2hTaGFkZXIobSxBKSxyLmF0dGFjaFNoYWRlcihtLEgpLHZvaWQgMCE9PWUuaW5kZXgwQXR0cmlidXRlTmFtZT9yLmJpbmRBdHRyaWJMb2NhdGlvbihtLDAsZS5pbmRleDBBdHRyaWJ1dGVOYW1lKTohMD09PWUubW9ycGhUYXJnZXRzJiZyLmJpbmRBdHRyaWJMb2NhdGlvbihtLDAsInBvc2l0aW9uIiksci5saW5rUHJvZ3JhbShtKSxuLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtsZXQgQ2U9ci5nZXRQcm9ncmFtSW5mb0xvZyhtKS50cmltKCksWmU9ci5nZXRTaGFkZXJJbmZvTG9nKEEpLnRyaW0oKSxJZT1yLmdldFNoYWRlckluZm9Mb2coSCkudHJpbSgpLEk9ITAscmU9ITA7aWYoITE9PT1yLmdldFByb2dyYW1QYXJhbWV0ZXIobSwzNTcxNCkpe0k9ITE7bGV0IGNlPUllZShyLEEsInZlcnRleCIpLGZlPUllZShyLEgsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIityLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK3IuZ2V0UHJvZ3JhbVBhcmFtZXRlcihtLDM1NzE1KSsiXG5cblByb2dyYW0gSW5mbyBMb2c6ICIrQ2UrIlxuIitjZSsiXG4iK2ZlKX1lbHNlIiIhPT1DZT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogUHJvZ3JhbSBJbmZvIExvZzoiLENlKTooIiI9PT1aZXx8IiI9PT1JZSkmJihyZT0hMSk7cmUmJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTpJLHByb2dyYW1Mb2c6Q2UsdmVydGV4U2hhZGVyOntsb2c6WmUscHJlZml4Onl9LGZyYWdtZW50U2hhZGVyOntsb2c6SWUscHJlZml4Ok19fSl9cmV0dXJuIHIuZGVsZXRlU2hhZGVyKEEpLHIuZGVsZXRlU2hhZGVyKEgpLHRoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGUmJih0ZT1uZXcgQ3AocixtKSksdGV9LHRoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1LJiYoSz1mdW5jdGlvbihuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBvPW4uZ2V0QWN0aXZlQXR0cmliKHQsciksYT1vLm5hbWUscz0xOzM1Njc0PT09by50eXBlJiYocz0yKSwzNTY3NT09PW8udHlwZSYmKHM9MyksMzU2NzY9PT1vLnR5cGUmJihzPTQpLGVbYV09e3R5cGU6by50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxhKSxsb2NhdGlvblNpemU6c319cmV0dXJuIGV9KHIsbSkpLEt9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0obSksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPVFPZSsrLHRoaXMuY2FjaGVLZXk9dCx0aGlzLnVzZWRUaW1lcz0xLHRoaXMucHJvZ3JhbT1tLHRoaXMudmVydGV4U2hhZGVyPUEsdGhpcy5mcmFnbWVudFNoYWRlcj1ILHRoaXN9dmFyIGZGZT0wLEFCPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoaSksYT10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiExPT09YS5oYXMocikmJihhLmFkZChyKSxyLnVzZWRUaW1lcysrKSwhMT09PWEuaGFzKG8pJiYoYS5hZGQobyksby51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLDA9PT1pLnVzZWRUaW1lcyYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiExPT09ZS5oYXModCkmJmUuc2V0KHQsbmV3IFNldCksZS5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCBlPXRoaXMuc2hhZGVyQ2FjaGU7aWYoITE9PT1lLmhhcyh0KSl7bGV0IGk9bmV3IFJCO2Uuc2V0KHQsaSl9cmV0dXJuIGUuZ2V0KHQpfX0sUkI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmlkPWZGZSsrLHRoaXMudXNlZFRpbWVzPTB9fTtmdW5jdGlvbiBtRmUobix0LGUsaSxyLG8sYSl7bGV0IHM9bmV3IFRJLGw9bmV3IEFCLGM9W10sZD1yLmlzV2ViR0wyLHU9ci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHA9ci5mbG9hdFZlcnRleFRleHR1cmVzLGY9ci5tYXhWZXJ0ZXhVbmlmb3JtcyxtPXIudmVydGV4VGV4dHVyZXMseT1yLnByZWNpc2lvbixNPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoidG9vbiIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIixTaGFkb3dNYXRlcmlhbDoic2hhZG93IixTcHJpdGVNYXRlcmlhbDoic3ByaXRlIn07cmV0dXJue2dldFBhcmFtZXRlcnM6ZnVuY3Rpb24oSSxyZSxjZSxmZSxfZSl7bGV0IE5lLGN0LHd0LGZ0LG5lPWZlLmZvZyx1ZT0oSS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2U6dCkuZ2V0KEkuZW52TWFwfHwoSS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2ZlLmVudmlyb25tZW50Om51bGwpKSxHZT1NW0kudHlwZV0sTWU9X2UuaXNTa2lubmVkTWVzaD9mdW5jdGlvbihJKXtsZXQgY2U9SS5za2VsZXRvbi5ib25lcztpZihwKXJldHVybiAxMDI0O3tsZXQgX2U9TWF0aC5mbG9vcigoZi0yMCkvNCksbmU9TWF0aC5taW4oX2UsY2UubGVuZ3RoKTtyZXR1cm4gbmU8Y2UubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK2NlLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK25lKyIuIiksMCk6bmV9fShfZSk6MDtpZihudWxsIT09SS5wcmVjaXNpb24mJih5PXIuZ2V0TWF4UHJlY2lzaW9uKEkucHJlY2lzaW9uKSx5IT09SS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixJLnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLHksImluc3RlYWQuIikpLEdlKXtsZXQgdmU9amNbR2VdO05lPXZlLnZlcnRleFNoYWRlcixjdD12ZS5mcmFnbWVudFNoYWRlcn1lbHNlIE5lPUkudmVydGV4U2hhZGVyLGN0PUkuZnJhZ21lbnRTaGFkZXIsbC51cGRhdGUoSSksd3Q9bC5nZXRWZXJ0ZXhTaGFkZXJJRChJKSxmdD1sLmdldEZyYWdtZW50U2hhZGVySUQoSSk7bGV0IE9lPW4uZ2V0UmVuZGVyVGFyZ2V0KCksU3Q9SS5jbGVhcmNvYXQ+MDtyZXR1cm57aXNXZWJHTDI6ZCxzaGFkZXJJRDpHZSxzaGFkZXJOYW1lOkkudHlwZSx2ZXJ0ZXhTaGFkZXI6TmUsZnJhZ21lbnRTaGFkZXI6Y3QsZGVmaW5lczpJLmRlZmluZXMsY3VzdG9tVmVydGV4U2hhZGVySUQ6d3QsY3VzdG9tRnJhZ21lbnRTaGFkZXJJRDpmdCxpc1Jhd1NoYWRlck1hdGVyaWFsOiEwPT09SS5pc1Jhd1NoYWRlck1hdGVyaWFsLGdsc2xWZXJzaW9uOkkuZ2xzbFZlcnNpb24scHJlY2lzaW9uOnksaW5zdGFuY2luZzohMD09PV9lLmlzSW5zdGFuY2VkTWVzaCxpbnN0YW5jaW5nQ29sb3I6ITA9PT1fZS5pc0luc3RhbmNlZE1lc2gmJm51bGwhPT1fZS5pbnN0YW5jZUNvbG9yLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6bSxvdXRwdXRFbmNvZGluZzpudWxsPT09T2U/bi5vdXRwdXRFbmNvZGluZzohMD09PU9lLmlzWFJSZW5kZXJUYXJnZXQ/T2UudGV4dHVyZS5lbmNvZGluZzpNcCxtYXA6ISFJLm1hcCxtYXRjYXA6ISFJLm1hdGNhcCxlbnZNYXA6ISF1ZSxlbnZNYXBNb2RlOnVlJiZ1ZS5tYXBwaW5nLGVudk1hcEN1YmVVVjohIXVlJiYodWUubWFwcGluZz09PSRJfHx1ZS5tYXBwaW5nPT09RlYpLGxpZ2h0TWFwOiEhSS5saWdodE1hcCxhb01hcDohIUkuYW9NYXAsZW1pc3NpdmVNYXA6ISFJLmVtaXNzaXZlTWFwLGJ1bXBNYXA6ISFJLmJ1bXBNYXAsbm9ybWFsTWFwOiEhSS5ub3JtYWxNYXAsb2JqZWN0U3BhY2VOb3JtYWxNYXA6SS5ub3JtYWxNYXBUeXBlPT09S0FlLHRhbmdlbnRTcGFjZU5vcm1hbE1hcDpJLm5vcm1hbE1hcFR5cGU9PT15XyxkZWNvZGVWaWRlb1RleHR1cmU6ISFJLm1hcCYmITA9PT1JLm1hcC5pc1ZpZGVvVGV4dHVyZSYmSS5tYXAuZW5jb2Rpbmc9PT1EcixjbGVhcmNvYXQ6U3QsY2xlYXJjb2F0TWFwOlN0JiYhIUkuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDpTdCYmISFJLmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6U3QmJiEhSS5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEhSS5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEhSS5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEhSS5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISFJLnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEhSS5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEhSS5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEhSS5hbHBoYU1hcCxhbHBoYVRlc3Q6SS5hbHBoYVRlc3Q+MCxhbHBoYVdyaXRlOkkuYWxwaGFXcml0ZXx8SS50cmFuc3BhcmVudCxncmFkaWVudE1hcDohIUkuZ3JhZGllbnRNYXAsc2hlZW46SS5zaGVlbj4wLHNoZWVuQ29sb3JNYXA6ISFJLnNoZWVuQ29sb3JNYXAsc2hlZW5Sb3VnaG5lc3NNYXA6ISFJLnNoZWVuUm91Z2huZXNzTWFwLHRyYW5zbWlzc2lvbjpJLnRyYW5zbWlzc2lvbj4wLHRyYW5zbWlzc2lvbk1hcDohIUkudHJhbnNtaXNzaW9uTWFwLHRoaWNrbmVzc01hcDohIUkudGhpY2tuZXNzTWFwLGNvbWJpbmU6SS5jb21iaW5lLHZlcnRleFRhbmdlbnRzOiEhSS5ub3JtYWxNYXAmJiEhX2UuZ2VvbWV0cnkmJiEhX2UuZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczpJLnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6ITA9PT1JLnZlcnRleENvbG9ycyYmISFfZS5nZW9tZXRyeSYmISFfZS5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiY0PT09X2UuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSx2ZXJ0ZXhVdnM6ISEoSS5tYXB8fEkuYnVtcE1hcHx8SS5ub3JtYWxNYXB8fEkuc3BlY3VsYXJNYXB8fEkuYWxwaGFNYXB8fEkuZW1pc3NpdmVNYXB8fEkucm91Z2huZXNzTWFwfHxJLm1ldGFsbmVzc01hcHx8SS5jbGVhcmNvYXRNYXB8fEkuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHxJLmNsZWFyY29hdE5vcm1hbE1hcHx8SS5kaXNwbGFjZW1lbnRNYXB8fEkudHJhbnNtaXNzaW9uTWFwfHxJLnRoaWNrbmVzc01hcHx8SS5zcGVjdWxhckludGVuc2l0eU1hcHx8SS5zcGVjdWxhckNvbG9yTWFwfHxJLnNoZWVuQ29sb3JNYXB8fEkuc2hlZW5Sb3VnaG5lc3NNYXApLHV2c1ZlcnRleE9ubHk6IShJLm1hcHx8SS5idW1wTWFwfHxJLm5vcm1hbE1hcHx8SS5zcGVjdWxhck1hcHx8SS5hbHBoYU1hcHx8SS5lbWlzc2l2ZU1hcHx8SS5yb3VnaG5lc3NNYXB8fEkubWV0YWxuZXNzTWFwfHxJLmNsZWFyY29hdE5vcm1hbE1hcHx8SS50cmFuc21pc3Npb24+MHx8SS50cmFuc21pc3Npb25NYXB8fEkudGhpY2tuZXNzTWFwfHxJLnNwZWN1bGFySW50ZW5zaXR5TWFwfHxJLnNwZWN1bGFyQ29sb3JNYXB8fEkuc2hlZW4+MHx8SS5zaGVlbkNvbG9yTWFwfHxJLnNoZWVuUm91Z2huZXNzTWFwfHwhSS5kaXNwbGFjZW1lbnRNYXApLGZvZzohIW5lLHVzZUZvZzpJLmZvZyxmb2dFeHAyOm5lJiZuZS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISFJLmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjpJLnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsc2tpbm5pbmc6ITA9PT1fZS5pc1NraW5uZWRNZXNoJiZNZT4wLG1heEJvbmVzOk1lLHVzZVZlcnRleFRleHR1cmU6cCxtb3JwaFRhcmdldHM6ISFfZS5nZW9tZXRyeSYmISFfZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhX2UuZ2VvbWV0cnkmJiEhX2UuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxtb3JwaFRhcmdldHNDb3VudDpfZS5nZW9tZXRyeSYmX2UuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP19lLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCxudW1EaXJMaWdodHM6cmUuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOnJlLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOnJlLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOnJlLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOnJlLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpyZS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6cmUucG9pbnRTaGFkb3dNYXAubGVuZ3RoLG51bVNwb3RMaWdodFNoYWRvd3M6cmUuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6YS5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjphLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6SS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpuLnNoYWRvd01hcC5lbmFibGVkJiZjZS5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOm4uc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6SS50b25lTWFwcGVkP24udG9uZU1hcHBpbmc6YnAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6bi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6SS5wcmVtdWx0aXBsaWVkQWxwaGEsZG91YmxlU2lkZWQ6SS5zaWRlPT09b18sZmxpcFNpZGVkOkkuc2lkZT09PXlvLGRlcHRoUGFja2luZzp2b2lkIDAhPT1JLmRlcHRoUGFja2luZyYmSS5kZXB0aFBhY2tpbmcsaW5kZXgwQXR0cmlidXRlTmFtZTpJLmluZGV4MEF0dHJpYnV0ZU5hbWUsZXh0ZW5zaW9uRGVyaXZhdGl2ZXM6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMsZXh0ZW5zaW9uRnJhZ0RlcHRoOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmZyYWdEZXB0aCxleHRlbnNpb25EcmF3QnVmZmVyczpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5kcmF3QnVmZmVycyxleHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLnNoYWRlclRleHR1cmVMT0QscmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg6ZHx8aS5oYXMoIkVYVF9mcmFnX2RlcHRoIikscmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVyczpkfHxpLmhhcygiV0VCR0xfZHJhd19idWZmZXJzIikscmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kOmR8fGkuaGFzKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIiksY3VzdG9tUHJvZ3JhbUNhY2hlS2V5OkkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl9fSxnZXRQcm9ncmFtQ2FjaGVLZXk6ZnVuY3Rpb24oSSl7bGV0IHJlPVtdO2lmKEkuc2hhZGVySUQ/cmUucHVzaChJLnNoYWRlcklEKToocmUucHVzaChJLmN1c3RvbVZlcnRleFNoYWRlcklEKSxyZS5wdXNoKEkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLHZvaWQgMCE9PUkuZGVmaW5lcylmb3IobGV0IGNlIGluIEkuZGVmaW5lcylyZS5wdXNoKGNlKSxyZS5wdXNoKEkuZGVmaW5lc1tjZV0pO3JldHVybiExPT09SS5pc1Jhd1NoYWRlck1hdGVyaWFsJiYoZnVuY3Rpb24oSSxyZSl7SS5wdXNoKHJlLnByZWNpc2lvbiksSS5wdXNoKHJlLm91dHB1dEVuY29kaW5nKSxJLnB1c2gocmUuZW52TWFwTW9kZSksSS5wdXNoKHJlLmNvbWJpbmUpLEkucHVzaChyZS52ZXJ0ZXhVdnMpLEkucHVzaChyZS5mb2dFeHAyKSxJLnB1c2gocmUuc2l6ZUF0dGVudWF0aW9uKSxJLnB1c2gocmUubWF4Qm9uZXMpLEkucHVzaChyZS5tb3JwaFRhcmdldHNDb3VudCksSS5wdXNoKHJlLm51bURpckxpZ2h0cyksSS5wdXNoKHJlLm51bVBvaW50TGlnaHRzKSxJLnB1c2gocmUubnVtU3BvdExpZ2h0cyksSS5wdXNoKHJlLm51bUhlbWlMaWdodHMpLEkucHVzaChyZS5udW1SZWN0QXJlYUxpZ2h0cyksSS5wdXNoKHJlLm51bURpckxpZ2h0U2hhZG93cyksSS5wdXNoKHJlLm51bVBvaW50TGlnaHRTaGFkb3dzKSxJLnB1c2gocmUubnVtU3BvdExpZ2h0U2hhZG93cyksSS5wdXNoKHJlLnNoYWRvd01hcFR5cGUpLEkucHVzaChyZS50b25lTWFwcGluZyksSS5wdXNoKHJlLm51bUNsaXBwaW5nUGxhbmVzKSxJLnB1c2gocmUubnVtQ2xpcEludGVyc2VjdGlvbiksSS5wdXNoKHJlLmFscGhhV3JpdGUpfShyZSxJKSxmdW5jdGlvbihJLHJlKXtzLmRpc2FibGVBbGwoKSxyZS5pc1dlYkdMMiYmcy5lbmFibGUoMCkscmUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmcy5lbmFibGUoMSkscmUuaW5zdGFuY2luZyYmcy5lbmFibGUoMikscmUuaW5zdGFuY2luZ0NvbG9yJiZzLmVuYWJsZSgzKSxyZS5tYXAmJnMuZW5hYmxlKDQpLHJlLm1hdGNhcCYmcy5lbmFibGUoNSkscmUuZW52TWFwJiZzLmVuYWJsZSg2KSxyZS5lbnZNYXBDdWJlVVYmJnMuZW5hYmxlKDcpLHJlLmxpZ2h0TWFwJiZzLmVuYWJsZSg4KSxyZS5hb01hcCYmcy5lbmFibGUoOSkscmUuZW1pc3NpdmVNYXAmJnMuZW5hYmxlKDEwKSxyZS5idW1wTWFwJiZzLmVuYWJsZSgxMSkscmUubm9ybWFsTWFwJiZzLmVuYWJsZSgxMikscmUub2JqZWN0U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDEzKSxyZS50YW5nZW50U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDE0KSxyZS5jbGVhcmNvYXQmJnMuZW5hYmxlKDE1KSxyZS5jbGVhcmNvYXRNYXAmJnMuZW5hYmxlKDE2KSxyZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDE3KSxyZS5jbGVhcmNvYXROb3JtYWxNYXAmJnMuZW5hYmxlKDE4KSxyZS5kaXNwbGFjZW1lbnRNYXAmJnMuZW5hYmxlKDE5KSxyZS5zcGVjdWxhck1hcCYmcy5lbmFibGUoMjApLHJlLnJvdWdobmVzc01hcCYmcy5lbmFibGUoMjEpLHJlLm1ldGFsbmVzc01hcCYmcy5lbmFibGUoMjIpLHJlLmdyYWRpZW50TWFwJiZzLmVuYWJsZSgyMykscmUuYWxwaGFNYXAmJnMuZW5hYmxlKDI0KSxyZS5hbHBoYVRlc3QmJnMuZW5hYmxlKDI1KSxyZS52ZXJ0ZXhDb2xvcnMmJnMuZW5hYmxlKDI2KSxyZS52ZXJ0ZXhBbHBoYXMmJnMuZW5hYmxlKDI3KSxyZS52ZXJ0ZXhVdnMmJnMuZW5hYmxlKDI4KSxyZS52ZXJ0ZXhUYW5nZW50cyYmcy5lbmFibGUoMjkpLHJlLnV2c1ZlcnRleE9ubHkmJnMuZW5hYmxlKDMwKSxyZS5mb2cmJnMuZW5hYmxlKDMxKSxJLnB1c2gocy5tYXNrKSxzLmRpc2FibGVBbGwoKSxyZS51c2VGb2cmJnMuZW5hYmxlKDApLHJlLmZsYXRTaGFkaW5nJiZzLmVuYWJsZSgxKSxyZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZzLmVuYWJsZSgyKSxyZS5za2lubmluZyYmcy5lbmFibGUoMykscmUudXNlVmVydGV4VGV4dHVyZSYmcy5lbmFibGUoNCkscmUubW9ycGhUYXJnZXRzJiZzLmVuYWJsZSg1KSxyZS5tb3JwaE5vcm1hbHMmJnMuZW5hYmxlKDYpLHJlLnByZW11bHRpcGxpZWRBbHBoYSYmcy5lbmFibGUoNykscmUuc2hhZG93TWFwRW5hYmxlZCYmcy5lbmFibGUoOCkscmUucGh5c2ljYWxseUNvcnJlY3RMaWdodHMmJnMuZW5hYmxlKDkpLHJlLmRvdWJsZVNpZGVkJiZzLmVuYWJsZSgxMCkscmUuZmxpcFNpZGVkJiZzLmVuYWJsZSgxMSkscmUuZGVwdGhQYWNraW5nJiZzLmVuYWJsZSgxMikscmUuZGl0aGVyaW5nJiZzLmVuYWJsZSgxMykscmUuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnMuZW5hYmxlKDE0KSxyZS5zcGVjdWxhckNvbG9yTWFwJiZzLmVuYWJsZSgxNSkscmUudHJhbnNtaXNzaW9uJiZzLmVuYWJsZSgxNikscmUudHJhbnNtaXNzaW9uTWFwJiZzLmVuYWJsZSgxNykscmUudGhpY2tuZXNzTWFwJiZzLmVuYWJsZSgxOCkscmUuc2hlZW4mJnMuZW5hYmxlKDE5KSxyZS5zaGVlbkNvbG9yTWFwJiZzLmVuYWJsZSgyMCkscmUuc2hlZW5Sb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxyZS5kZWNvZGVWaWRlb1RleHR1cmUmJnMuZW5hYmxlKDIyKSxJLnB1c2gocy5tYXNrKX0ocmUsSSkscmUucHVzaChuLm91dHB1dEVuY29kaW5nKSkscmUucHVzaChJLmN1c3RvbVByb2dyYW1DYWNoZUtleSkscmUuam9pbigpfSxnZXRVbmlmb3JtczpmdW5jdGlvbihJKXtsZXQgY2UscmU9TVtJLnR5cGVdO3JldHVybiBjZT1yZT9wUmUuY2xvbmUoamNbcmVdLnVuaWZvcm1zKTpJLnVuaWZvcm1zLGNlfSxhY3F1aXJlUHJvZ3JhbTpmdW5jdGlvbihJLHJlKXtsZXQgY2U7Zm9yKGxldCBmZT0wLF9lPWMubGVuZ3RoO2ZlPF9lO2ZlKyspe2xldCBuZT1jW2ZlXTtpZihuZS5jYWNoZUtleT09PXJlKXtjZT1uZSwrK2NlLnVzZWRUaW1lczticmVha319cmV0dXJuIHZvaWQgMD09PWNlJiYoY2U9bmV3IHBGZShuLHJlLEksbyksYy5wdXNoKGNlKSksY2V9LHJlbGVhc2VQcm9ncmFtOmZ1bmN0aW9uKEkpe2lmKDA9PS0tSS51c2VkVGltZXMpe2xldCByZT1jLmluZGV4T2YoSSk7Y1tyZV09Y1tjLmxlbmd0aC0xXSxjLnBvcCgpLEkuZGVzdHJveSgpfX0scmVsZWFzZVNoYWRlckNhY2hlOmZ1bmN0aW9uKEkpe2wucmVtb3ZlKEkpfSxwcm9ncmFtczpjLGRpc3Bvc2U6ZnVuY3Rpb24oKXtsLmRpc3Bvc2UoKX19fWZ1bmN0aW9uIGhGZSgpe2xldCBuPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24obyl7bGV0IGE9bi5nZXQobyk7cmV0dXJuIHZvaWQgMD09PWEmJihhPXt9LG4uc2V0KG8sYSkpLGF9LHJlbW92ZTpmdW5jdGlvbihvKXtuLmRlbGV0ZShvKX0sdXBkYXRlOmZ1bmN0aW9uKG8sYSxzKXtuLmdldChvKVthXT1zfSxkaXNwb3NlOmZ1bmN0aW9uKCl7bj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIGdGZShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/bi5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOm4ueiE9PXQuej9uLnotdC56Om4uaWQtdC5pZH1mdW5jdGlvbiBPZWUobix0KXtyZXR1cm4gbi5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP24uZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6bi5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/bi5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOm4ueiE9PXQuej90Lnotbi56Om4uaWQtdC5pZH1mdW5jdGlvbiBGZWUoKXtsZXQgbj1bXSx0PTAsZT1bXSxpPVtdLHI9W107ZnVuY3Rpb24gYSh1LHAsZixtLHksTSl7bGV0IHY9blt0XTtyZXR1cm4gdm9pZCAwPT09dj8odj17aWQ6dS5pZCxvYmplY3Q6dSxnZW9tZXRyeTpwLG1hdGVyaWFsOmYsZ3JvdXBPcmRlcjptLHJlbmRlck9yZGVyOnUucmVuZGVyT3JkZXIsejp5LGdyb3VwOk19LG5bdF09dik6KHYuaWQ9dS5pZCx2Lm9iamVjdD11LHYuZ2VvbWV0cnk9cCx2Lm1hdGVyaWFsPWYsdi5ncm91cE9yZGVyPW0sdi5yZW5kZXJPcmRlcj11LnJlbmRlck9yZGVyLHYuej15LHYuZ3JvdXA9TSksdCsrLHZ9cmV0dXJue29wYXF1ZTplLHRyYW5zbWlzc2l2ZTppLHRyYW5zcGFyZW50OnIsaW5pdDpmdW5jdGlvbigpe3Q9MCxlLmxlbmd0aD0wLGkubGVuZ3RoPTAsci5sZW5ndGg9MH0scHVzaDpmdW5jdGlvbih1LHAsZixtLHksTSl7bGV0IHY9YSh1LHAsZixtLHksTSk7Zi50cmFuc21pc3Npb24+MD9pLnB1c2godik6ITA9PT1mLnRyYW5zcGFyZW50P3IucHVzaCh2KTplLnB1c2godil9LHVuc2hpZnQ6ZnVuY3Rpb24odSxwLGYsbSx5LE0pe2xldCB2PWEodSxwLGYsbSx5LE0pO2YudHJhbnNtaXNzaW9uPjA/aS51bnNoaWZ0KHYpOiEwPT09Zi50cmFuc3BhcmVudD9yLnVuc2hpZnQodik6ZS51bnNoaWZ0KHYpfSxmaW5pc2g6ZnVuY3Rpb24oKXtmb3IobGV0IHU9dCxwPW4ubGVuZ3RoO3U8cDt1Kyspe2xldCBmPW5bdV07aWYobnVsbD09PWYuaWQpYnJlYWs7Zi5pZD1udWxsLGYub2JqZWN0PW51bGwsZi5nZW9tZXRyeT1udWxsLGYubWF0ZXJpYWw9bnVsbCxmLmdyb3VwPW51bGx9fSxzb3J0OmZ1bmN0aW9uKHUscCl7ZS5sZW5ndGg+MSYmZS5zb3J0KHV8fGdGZSksaS5sZW5ndGg+MSYmaS5zb3J0KHB8fE9lZSksci5sZW5ndGg+MSYmci5zb3J0KHB8fE9lZSl9fX1mdW5jdGlvbiBfRmUoKXtsZXQgbj1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGkscil7bGV0IG87cmV0dXJuITE9PT1uLmhhcyhpKT8obz1uZXcgRmVlLG4uc2V0KGksW29dKSk6cj49bi5nZXQoaSkubGVuZ3RoPyhvPW5ldyBGZWUsbi5nZXQoaSkucHVzaChvKSk6bz1uLmdldChpKVtyXSxvfSxkaXNwb3NlOmZ1bmN0aW9uKCl7bj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIHlGZSgpe2xldCBuPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09blt0LmlkXSlyZXR1cm4gblt0LmlkXTtsZXQgZTtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgJCxjb2xvcjpuZXcgYW59O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgJCxkaXJlY3Rpb246bmV3ICQsY29sb3I6bmV3IGFuLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgJCxjb2xvcjpuZXcgYW4sZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6ZT17ZGlyZWN0aW9uOm5ldyAkLHNreUNvbG9yOm5ldyBhbixncm91bmRDb2xvcjpuZXcgYW59O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6ZT17Y29sb3I6bmV3IGFuLHBvc2l0aW9uOm5ldyAkLGhhbGZXaWR0aDpuZXcgJCxoYWxmSGVpZ2h0Om5ldyAkfX1yZXR1cm4gblt0LmlkXT1lLGV9fX12YXIgdkZlPTA7ZnVuY3Rpb24geEZlKG4sdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShuLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBDRmUobix0KXtsZXQgZT1uZXcgeUZlLGk9ZnVuY3Rpb24oKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PW5bdC5pZF0pcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpjYXNlIlNwb3RMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyAkZX07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3ICRlLHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfX1yZXR1cm4gblt0LmlkXT1lLGV9fX0oKSxyPXt2ZXJzaW9uOjAsaGFzaDp7ZGlyZWN0aW9uYWxMZW5ndGg6LTEscG9pbnRMZW5ndGg6LTEsc3BvdExlbmd0aDotMSxyZWN0QXJlYUxlbmd0aDotMSxoZW1pTGVuZ3RoOi0xLG51bURpcmVjdGlvbmFsU2hhZG93czotMSxudW1Qb2ludFNoYWRvd3M6LTEsbnVtU3BvdFNoYWRvd3M6LTF9LGFtYmllbnQ6WzAsMCwwXSxwcm9iZTpbXSxkaXJlY3Rpb25hbDpbXSxkaXJlY3Rpb25hbFNoYWRvdzpbXSxkaXJlY3Rpb25hbFNoYWRvd01hcDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDpbXSxzcG90OltdLHNwb3RTaGFkb3c6W10sc3BvdFNoYWRvd01hcDpbXSxzcG90U2hhZG93TWF0cml4OltdLHJlY3RBcmVhOltdLHJlY3RBcmVhTFRDMTpudWxsLHJlY3RBcmVhTFRDMjpudWxsLHBvaW50OltdLHBvaW50U2hhZG93OltdLHBvaW50U2hhZG93TWFwOltdLHBvaW50U2hhZG93TWF0cml4OltdLGhlbWk6W119O2ZvcihsZXQgZD0wO2Q8OTtkKyspci5wcm9iZS5wdXNoKG5ldyAkKTtsZXQgbz1uZXcgJCxhPW5ldyBNbixzPW5ldyBNbjtyZXR1cm57c2V0dXA6ZnVuY3Rpb24oZCx1KXtsZXQgcD0wLGY9MCxtPTA7Zm9yKGxldCBaZT0wO1plPDk7WmUrKylyLnByb2JlW1plXS5zZXQoMCwwLDApO2xldCB5PTAsTT0wLHY9MCx4PTAsUj0wLEE9MCxIPTAsdGU9MDtkLnNvcnQoeEZlKTtsZXQgSz0hMCE9PXU/TWF0aC5QSToxO2ZvcihsZXQgWmU9MCxJZT1kLmxlbmd0aDtaZTxJZTtaZSsrKXtsZXQgST1kW1plXSxyZT1JLmNvbG9yLGNlPUkuaW50ZW5zaXR5LGZlPUkuZGlzdGFuY2UsX2U9SS5zaGFkb3cmJkkuc2hhZG93Lm1hcD9JLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKEkuaXNBbWJpZW50TGlnaHQpcCs9cmUucipjZSpLLGYrPXJlLmcqY2UqSyxtKz1yZS5iKmNlKks7ZWxzZSBpZihJLmlzTGlnaHRQcm9iZSlmb3IobGV0IG5lPTA7bmU8OTtuZSsrKXIucHJvYmVbbmVdLmFkZFNjYWxlZFZlY3RvcihJLnNoLmNvZWZmaWNpZW50c1tuZV0sY2UpO2Vsc2UgaWYoSS5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBuZT1lLmdldChJKTtpZihuZS5jb2xvci5jb3B5KEkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEkuaW50ZW5zaXR5KkspLEkuY2FzdFNoYWRvdyl7bGV0IGRlPUkuc2hhZG93LHVlPWkuZ2V0KEkpO3VlLnNoYWRvd0JpYXM9ZGUuYmlhcyx1ZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMsdWUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyx1ZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1t5XT11ZSxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW3ldPV9lLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbeV09SS5zaGFkb3cubWF0cml4LEErK31yLmRpcmVjdGlvbmFsW3ldPW5lLHkrK31lbHNlIGlmKEkuaXNTcG90TGlnaHQpe2xldCBuZT1lLmdldChJKTtpZihuZS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSS5tYXRyaXhXb3JsZCksbmUuY29sb3IuY29weShyZSkubXVsdGlwbHlTY2FsYXIoY2UqSyksbmUuZGlzdGFuY2U9ZmUsbmUuY29uZUNvcz1NYXRoLmNvcyhJLmFuZ2xlKSxuZS5wZW51bWJyYUNvcz1NYXRoLmNvcyhJLmFuZ2xlKigxLUkucGVudW1icmEpKSxuZS5kZWNheT1JLmRlY2F5LEkuY2FzdFNoYWRvdyl7bGV0IGRlPUkuc2hhZG93LHVlPWkuZ2V0KEkpO3VlLnNoYWRvd0JpYXM9ZGUuYmlhcyx1ZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMsdWUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyx1ZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUsci5zcG90U2hhZG93W3ZdPXVlLHIuc3BvdFNoYWRvd01hcFt2XT1fZSxyLnNwb3RTaGFkb3dNYXRyaXhbdl09SS5zaGFkb3cubWF0cml4LHRlKyt9ci5zcG90W3ZdPW5lLHYrK31lbHNlIGlmKEkuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgbmU9ZS5nZXQoSSk7bmUuY29sb3IuY29weShyZSkubXVsdGlwbHlTY2FsYXIoY2UpLG5lLmhhbGZXaWR0aC5zZXQoLjUqSS53aWR0aCwwLDApLG5lLmhhbGZIZWlnaHQuc2V0KDAsLjUqSS5oZWlnaHQsMCksci5yZWN0QXJlYVt4XT1uZSx4Kyt9ZWxzZSBpZihJLmlzUG9pbnRMaWdodCl7bGV0IG5lPWUuZ2V0KEkpO2lmKG5lLmNvbG9yLmNvcHkoSS5jb2xvcikubXVsdGlwbHlTY2FsYXIoSS5pbnRlbnNpdHkqSyksbmUuZGlzdGFuY2U9SS5kaXN0YW5jZSxuZS5kZWNheT1JLmRlY2F5LEkuY2FzdFNoYWRvdyl7bGV0IGRlPUkuc2hhZG93LHVlPWkuZ2V0KEkpO3VlLnNoYWRvd0JpYXM9ZGUuYmlhcyx1ZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMsdWUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyx1ZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUsdWUuc2hhZG93Q2FtZXJhTmVhcj1kZS5jYW1lcmEubmVhcix1ZS5zaGFkb3dDYW1lcmFGYXI9ZGUuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W01dPXVlLHIucG9pbnRTaGFkb3dNYXBbTV09X2Usci5wb2ludFNoYWRvd01hdHJpeFtNXT1JLnNoYWRvdy5tYXRyaXgsSCsrfXIucG9pbnRbTV09bmUsTSsrfWVsc2UgaWYoSS5pc0hlbWlzcGhlcmVMaWdodCl7bGV0IG5lPWUuZ2V0KEkpO25lLnNreUNvbG9yLmNvcHkoSS5jb2xvcikubXVsdGlwbHlTY2FsYXIoY2UqSyksbmUuZ3JvdW5kQ29sb3IuY29weShJLmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihjZSpLKSxyLmhlbWlbUl09bmUsUisrfX14PjAmJih0LmlzV2ViR0wyfHwhMD09PW4uaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT8oci5yZWN0QXJlYUxUQzE9UHQuTFRDX0ZMT0FUXzEsci5yZWN0QXJlYUxUQzI9UHQuTFRDX0ZMT0FUXzIpOiEwPT09bi5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik/KHIucmVjdEFyZWFMVEMxPVB0LkxUQ19IQUxGXzEsci5yZWN0QXJlYUxUQzI9UHQuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLHIuYW1iaWVudFswXT1wLHIuYW1iaWVudFsxXT1mLHIuYW1iaWVudFsyXT1tO2xldCBDZT1yLmhhc2g7KENlLmRpcmVjdGlvbmFsTGVuZ3RoIT09eXx8Q2UucG9pbnRMZW5ndGghPT1NfHxDZS5zcG90TGVuZ3RoIT09dnx8Q2UucmVjdEFyZWFMZW5ndGghPT14fHxDZS5oZW1pTGVuZ3RoIT09Unx8Q2UubnVtRGlyZWN0aW9uYWxTaGFkb3dzIT09QXx8Q2UubnVtUG9pbnRTaGFkb3dzIT09SHx8Q2UubnVtU3BvdFNoYWRvd3MhPT10ZSkmJihyLmRpcmVjdGlvbmFsLmxlbmd0aD15LHIuc3BvdC5sZW5ndGg9dixyLnJlY3RBcmVhLmxlbmd0aD14LHIucG9pbnQubGVuZ3RoPU0sci5oZW1pLmxlbmd0aD1SLHIuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPUEsci5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9QSxyLnBvaW50U2hhZG93Lmxlbmd0aD1ILHIucG9pbnRTaGFkb3dNYXAubGVuZ3RoPUgsci5zcG90U2hhZG93Lmxlbmd0aD10ZSxyLnNwb3RTaGFkb3dNYXAubGVuZ3RoPXRlLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPUEsci5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9SCxyLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPXRlLENlLmRpcmVjdGlvbmFsTGVuZ3RoPXksQ2UucG9pbnRMZW5ndGg9TSxDZS5zcG90TGVuZ3RoPXYsQ2UucmVjdEFyZWFMZW5ndGg9eCxDZS5oZW1pTGVuZ3RoPVIsQ2UubnVtRGlyZWN0aW9uYWxTaGFkb3dzPUEsQ2UubnVtUG9pbnRTaGFkb3dzPUgsQ2UubnVtU3BvdFNoYWRvd3M9dGUsci52ZXJzaW9uPXZGZSsrKX0sc2V0dXBWaWV3OmZ1bmN0aW9uKGQsdSl7bGV0IHA9MCxmPTAsbT0wLHk9MCxNPTAsdj11Lm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHg9MCxSPWQubGVuZ3RoO3g8Ujt4Kyspe2xldCBBPWRbeF07aWYoQS5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBIPXIuZGlyZWN0aW9uYWxbcF07SC5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEudGFyZ2V0Lm1hdHJpeFdvcmxkKSxILmRpcmVjdGlvbi5zdWIobyksSC5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHYpLHArK31lbHNlIGlmKEEuaXNTcG90TGlnaHQpe2xldCBIPXIuc3BvdFttXTtILnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxILnBvc2l0aW9uLmFwcGx5TWF0cml4NCh2KSxILmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS50YXJnZXQubWF0cml4V29ybGQpLEguZGlyZWN0aW9uLnN1YihvKSxILmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odiksbSsrfWVsc2UgaWYoQS5pc1JlY3RBcmVhTGlnaHQpe2xldCBIPXIucmVjdEFyZWFbeV07SC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksSC5wb3NpdGlvbi5hcHBseU1hdHJpeDQodikscy5pZGVudGl0eSgpLGEuY29weShBLm1hdHJpeFdvcmxkKSxhLnByZW11bHRpcGx5KHYpLHMuZXh0cmFjdFJvdGF0aW9uKGEpLEguaGFsZldpZHRoLnNldCguNSpBLndpZHRoLDAsMCksSC5oYWxmSGVpZ2h0LnNldCgwLC41KkEuaGVpZ2h0LDApLEguaGFsZldpZHRoLmFwcGx5TWF0cml4NChzKSxILmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KHMpLHkrK31lbHNlIGlmKEEuaXNQb2ludExpZ2h0KXtsZXQgSD1yLnBvaW50W2ZdO0gucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLEgucG9zaXRpb24uYXBwbHlNYXRyaXg0KHYpLGYrK31lbHNlIGlmKEEuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBIPXIuaGVtaVtNXTtILmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksSC5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHYpLEguZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLE0rK319fSxzdGF0ZTpyfX1mdW5jdGlvbiBMZWUobix0KXtsZXQgZT1uZXcgQ0ZlKG4sdCksaT1bXSxyPVtdO3JldHVybntpbml0OmZ1bmN0aW9uKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfSxzdGF0ZTp7bGlnaHRzQXJyYXk6aSxzaGFkb3dzQXJyYXk6cixsaWdodHM6ZX0sc2V0dXBMaWdodHM6ZnVuY3Rpb24odSl7ZS5zZXR1cChpLHUpfSxzZXR1cExpZ2h0c1ZpZXc6ZnVuY3Rpb24odSl7ZS5zZXR1cFZpZXcoaSx1KX0scHVzaExpZ2h0OmZ1bmN0aW9uKHUpe2kucHVzaCh1KX0scHVzaFNoYWRvdzpmdW5jdGlvbih1KXtyLnB1c2godSl9fX1mdW5jdGlvbiBNRmUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKG8sYT0wKXtsZXQgcztyZXR1cm4hMT09PWUuaGFzKG8pPyhzPW5ldyBMZWUobix0KSxlLnNldChvLFtzXSkpOmE+PWUuZ2V0KG8pLmxlbmd0aD8ocz1uZXcgTGVlKG4sdCksZS5nZXQobykucHVzaChzKSk6cz1lLmdldChvKVthXSxzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7ZT1uZXcgV2Vha01hcH19fXZhciBQST1jbGFzcyBleHRlbmRzIFJve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9MzIwMCx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtQSS5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgT0k9Y2xhc3MgZXh0ZW5kcyBSb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3ICQsdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTtPSS5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgd0ZlPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsU0ZlPSJ1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzcztcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xudW5pZm9ybSBmbG9hdCByYWRpdXM7XG4jaW5jbHVkZSA8cGFja2luZz5cbnZvaWQgbWFpbigpIHtcblx0Y29uc3QgZmxvYXQgc2FtcGxlcyA9IGZsb2F0KCBWU01fU0FNUExFUyApO1xuXHRmbG9hdCBtZWFuID0gMC4wO1xuXHRmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7XG5cdGZsb2F0IHV2U3RyaWRlID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAyLjAgLyAoIHNhbXBsZXMgLSAxLjAgKTtcblx0ZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7XG5cdGZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkge1xuXHRcdGZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTtcblx0XHQjaWZkZWYgSE9SSVpPTlRBTF9QQVNTXG5cdFx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG5cdFx0XHRtZWFuICs9IGRpc3RyaWJ1dGlvbi54O1xuXHRcdFx0c3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54O1xuXHRcdCNlbHNlXG5cdFx0XHRmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG5cdFx0XHRtZWFuICs9IGRlcHRoO1xuXHRcdFx0c3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7XG5cdFx0I2VuZGlmXG5cdH1cblx0bWVhbiA9IG1lYW4gLyBzYW1wbGVzO1xuXHRzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzO1xuXHRmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTtcblx0Z2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTtcbn0iO2Z1bmN0aW9uIFN0ZShuLHQsZSl7bGV0IGk9bmV3IGNfLHI9bmV3ICRlLG89bmV3ICRlLGE9bmV3IEtpLHM9bmV3IFBJKHtkZXB0aFBhY2tpbmc6WkFlfSksbD1uZXcgT0ksYz17fSxkPWUubWF4VGV4dHVyZVNpemUsdT17MDp5bywxOlN4LDI6b199LHA9bmV3IEdkKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyAkZX0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOndGZSxmcmFnbWVudFNoYWRlcjpTRmV9KSxmPXAuY2xvbmUoKTtmLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IG09bmV3IFdpO20uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEFyKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgeT1uZXcgY28obSxwKSxNPXRoaXM7ZnVuY3Rpb24gdihBLEgpe2xldCB0ZT10LnVwZGF0ZSh5KTtwLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1BLmJsdXJTYW1wbGVzJiYocC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMsZi5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMscC5uZWVkc1VwZGF0ZT0hMCxmLm5lZWRzVXBkYXRlPSEwKSxwLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPUEubWFwLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcFBhc3MpLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChILG51bGwsdGUscCx5LG51bGwpLGYudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9QS5tYXBQYXNzLnRleHR1cmUsZi51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxmLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcCksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KEgsbnVsbCx0ZSxmLHksbnVsbCl9ZnVuY3Rpb24geChBLEgsdGUsSyxDZSxaZSxJZSl7bGV0IEk9bnVsbCxyZT0hMD09PUsuaXNQb2ludExpZ2h0P0EuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbDpBLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoST12b2lkIDAhPT1yZT9yZTohMD09PUsuaXNQb2ludExpZ2h0P2w6cyxuLmxvY2FsQ2xpcHBpbmdFbmFibGVkJiYhMD09PXRlLmNsaXBTaGFkb3dzJiYwIT09dGUuY2xpcHBpbmdQbGFuZXMubGVuZ3RofHx0ZS5kaXNwbGFjZW1lbnRNYXAmJjAhPT10ZS5kaXNwbGFjZW1lbnRTY2FsZXx8dGUuYWxwaGFNYXAmJnRlLmFscGhhVGVzdD4wKXtsZXQgY2U9SS51dWlkLGZlPXRlLnV1aWQsX2U9Y1tjZV07dm9pZCAwPT09X2UmJihfZT17fSxjW2NlXT1fZSk7bGV0IG5lPV9lW2ZlXTt2b2lkIDA9PT1uZSYmKG5lPUkuY2xvbmUoKSxfZVtmZV09bmUpLEk9bmV9cmV0dXJuIEkudmlzaWJsZT10ZS52aXNpYmxlLEkud2lyZWZyYW1lPXRlLndpcmVmcmFtZSxJLnNpZGU9SWU9PT1ieD9udWxsIT09dGUuc2hhZG93U2lkZT90ZS5zaGFkb3dTaWRlOnRlLnNpZGU6bnVsbCE9PXRlLnNoYWRvd1NpZGU/dGUuc2hhZG93U2lkZTp1W3RlLnNpZGVdLEkuYWxwaGFNYXA9dGUuYWxwaGFNYXAsSS5hbHBoYVRlc3Q9dGUuYWxwaGFUZXN0LEkuY2xpcFNoYWRvd3M9dGUuY2xpcFNoYWRvd3MsSS5jbGlwcGluZ1BsYW5lcz10ZS5jbGlwcGluZ1BsYW5lcyxJLmNsaXBJbnRlcnNlY3Rpb249dGUuY2xpcEludGVyc2VjdGlvbixJLmRpc3BsYWNlbWVudE1hcD10ZS5kaXNwbGFjZW1lbnRNYXAsSS5kaXNwbGFjZW1lbnRTY2FsZT10ZS5kaXNwbGFjZW1lbnRTY2FsZSxJLmRpc3BsYWNlbWVudEJpYXM9dGUuZGlzcGxhY2VtZW50QmlhcyxJLndpcmVmcmFtZUxpbmV3aWR0aD10ZS53aXJlZnJhbWVMaW5ld2lkdGgsSS5saW5ld2lkdGg9dGUubGluZXdpZHRoLCEwPT09Sy5pc1BvaW50TGlnaHQmJiEwPT09SS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsJiYoSS5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCksSS5uZWFyRGlzdGFuY2U9Q2UsSS5mYXJEaXN0YW5jZT1aZSksSX1mdW5jdGlvbiBSKEEsSCx0ZSxLLENlKXtpZighMT09PUEudmlzaWJsZSlyZXR1cm47aWYoQS5sYXllcnMudGVzdChILmxheWVycykmJihBLmlzTWVzaHx8QS5pc0xpbmV8fEEuaXNQb2ludHMpJiYoQS5jYXN0U2hhZG93fHxBLnJlY2VpdmVTaGFkb3cmJkNlPT09YngpJiYoIUEuZnJ1c3R1bUN1bGxlZHx8aS5pbnRlcnNlY3RzT2JqZWN0KEEpKSl7QS5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyh0ZS5tYXRyaXhXb3JsZEludmVyc2UsQS5tYXRyaXhXb3JsZCk7bGV0IEk9dC51cGRhdGUoQSkscmU9QS5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHJlKSl7bGV0IGNlPUkuZ3JvdXBzO2ZvcihsZXQgZmU9MCxfZT1jZS5sZW5ndGg7ZmU8X2U7ZmUrKyl7bGV0IG5lPWNlW2ZlXSxkZT1yZVtuZS5tYXRlcmlhbEluZGV4XTtpZihkZSYmZGUudmlzaWJsZSl7bGV0IHVlPXgoQSwwLGRlLEssdGUubmVhcix0ZS5mYXIsQ2UpO24ucmVuZGVyQnVmZmVyRGlyZWN0KHRlLG51bGwsSSx1ZSxBLG5lKX19fWVsc2UgaWYocmUudmlzaWJsZSl7bGV0IGNlPXgoQSwwLHJlLEssdGUubmVhcix0ZS5mYXIsQ2UpO24ucmVuZGVyQnVmZmVyRGlyZWN0KHRlLG51bGwsSSxjZSxBLG51bGwpfX1sZXQgSWU9QS5jaGlsZHJlbjtmb3IobGV0IEk9MCxyZT1JZS5sZW5ndGg7STxyZTtJKyspUihJZVtJXSxILHRlLEssQ2UpfXRoaXMuZW5hYmxlZD0hMSx0aGlzLmF1dG9VcGRhdGU9ITAsdGhpcy5uZWVkc1VwZGF0ZT0hMSx0aGlzLnR5cGU9bHRlLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEEsSCx0ZSl7aWYoITE9PT1NLmVuYWJsZWR8fCExPT09TS5hdXRvVXBkYXRlJiYhMT09PU0ubmVlZHNVcGRhdGV8fDA9PT1BLmxlbmd0aClyZXR1cm47bGV0IEs9bi5nZXRSZW5kZXJUYXJnZXQoKSxDZT1uLmdldEFjdGl2ZUN1YmVGYWNlKCksWmU9bi5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLEllPW4uc3RhdGU7SWUuc2V0QmxlbmRpbmcoeXApLEllLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoMSwxLDEsMSksSWUuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxJZS5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCBJPTAscmU9QS5sZW5ndGg7STxyZTtJKyspe2xldCBjZT1BW0ldLGZlPWNlLnNoYWRvdztpZih2b2lkIDA9PT1mZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLGNlLCJoYXMgbm8gc2hhZG93LiIpO2NvbnRpbnVlfWlmKCExPT09ZmUuYXV0b1VwZGF0ZSYmITE9PT1mZS5uZWVkc1VwZGF0ZSljb250aW51ZTtyLmNvcHkoZmUubWFwU2l6ZSk7bGV0IF9lPWZlLmdldEZyYW1lRXh0ZW50cygpO2lmKHIubXVsdGlwbHkoX2UpLG8uY29weShmZS5tYXBTaXplKSwoci54PmR8fHIueT5kKSYmKHIueD5kJiYoby54PU1hdGguZmxvb3IoZC9fZS54KSxyLng9by54Kl9lLngsZmUubWFwU2l6ZS54PW8ueCksci55PmQmJihvLnk9TWF0aC5mbG9vcihkL19lLnkpLHIueT1vLnkqX2UueSxmZS5tYXBTaXplLnk9by55KSksbnVsbD09PWZlLm1hcCYmIWZlLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09Yngpe2xldCBkZT17bWluRmlsdGVyOnJhLG1hZ0ZpbHRlcjpyYSxmb3JtYXQ6YmF9O2ZlLm1hcD1uZXcgUWEoci54LHIueSxkZSksZmUubWFwLnRleHR1cmUubmFtZT1jZS5uYW1lKyIuc2hhZG93TWFwIixmZS5tYXBQYXNzPW5ldyBRYShyLngsci55LGRlKSxmZS5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfW51bGw9PT1mZS5tYXAmJihmZS5tYXA9bmV3IFFhKHIueCxyLnkse21pbkZpbHRlcjpibyxtYWdGaWx0ZXI6Ym8sZm9ybWF0OmJhfSksZmUubWFwLnRleHR1cmUubmFtZT1jZS5uYW1lKyIuc2hhZG93TWFwIixmZS5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxuLnNldFJlbmRlclRhcmdldChmZS5tYXApLG4uY2xlYXIoKTtsZXQgbmU9ZmUuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgZGU9MDtkZTxuZTtkZSsrKXtsZXQgdWU9ZmUuZ2V0Vmlld3BvcnQoZGUpO2Euc2V0KG8ueCp1ZS54LG8ueSp1ZS55LG8ueCp1ZS56LG8ueSp1ZS53KSxJZS52aWV3cG9ydChhKSxmZS51cGRhdGVNYXRyaWNlcyhjZSxkZSksaT1mZS5nZXRGcnVzdHVtKCksUihILHRlLGZlLmNhbWVyYSxjZSx0aGlzLnR5cGUpfSFmZS5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PWJ4JiZ2KGZlLHRlKSxmZS5uZWVkc1VwZGF0ZT0hMX1NLm5lZWRzVXBkYXRlPSExLG4uc2V0UmVuZGVyVGFyZ2V0KEssQ2UsWmUpfX1mdW5jdGlvbiBFRmUobix0LGUpe2xldCBpPWUuaXNXZWJHTDIscz1uZXcgZnVuY3Rpb24oKXtsZXQgc2U9ITEsdG49bmV3IEtpLFd0PW51bGwsSW49bmV3IEtpKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFdlKXtXdCE9PVdlJiYhc2UmJihuLmNvbG9yTWFzayhXZSxXZSxXZSxXZSksV3Q9V2UpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oV2Upe3NlPVdlfSxzZXRDbGVhcjpmdW5jdGlvbihXZSx2bixoaSx1cixVbyl7ITA9PT1VbyYmKFdlKj11cix2bio9dXIsaGkqPXVyKSx0bi5zZXQoV2Usdm4saGksdXIpLCExPT09SW4uZXF1YWxzKHRuKSYmKG4uY2xlYXJDb2xvcihXZSx2bixoaSx1ciksSW4uY29weSh0bikpfSxyZXNldDpmdW5jdGlvbigpe3NlPSExLFd0PW51bGwsSW4uc2V0KC0xLDAsMCwwKX19fSxsPW5ldyBmdW5jdGlvbigpe2xldCBzZT0hMSx0bj1udWxsLFd0PW51bGwsSW49bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihXZSl7V2U/T2UoMjkyOSk6QW4oMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oV2Upe3RuIT09V2UmJiFzZSYmKG4uZGVwdGhNYXNrKFdlKSx0bj1XZSl9LHNldEZ1bmM6ZnVuY3Rpb24oV2Upe2lmKFd0IT09V2Upe2lmKFdlKXN3aXRjaChXZSl7Y2FzZSBnQWU6bi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIF9BZTpuLmRlcHRoRnVuYyg1MTkpO2JyZWFrO2Nhc2UgeUFlOm4uZGVwdGhGdW5jKDUxMyk7YnJlYWs7Y2FzZSB2QjpuLmRlcHRoRnVuYyg1MTUpO2JyZWFrO2Nhc2UgYkFlOm4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSB2QWU6bi5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIHhBZTpuLmRlcHRoRnVuYyg1MTYpO2JyZWFrO2Nhc2UgQ0FlOm4uZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpuLmRlcHRoRnVuYyg1MTUpfWVsc2Ugbi5kZXB0aEZ1bmMoNTE1KTtXdD1XZX19LHNldExvY2tlZDpmdW5jdGlvbihXZSl7c2U9V2V9LHNldENsZWFyOmZ1bmN0aW9uKFdlKXtJbiE9PVdlJiYobi5jbGVhckRlcHRoKFdlKSxJbj1XZSl9LHJlc2V0OmZ1bmN0aW9uKCl7c2U9ITEsdG49bnVsbCxXdD1udWxsLEluPW51bGx9fX0sYz1uZXcgZnVuY3Rpb24oKXtsZXQgc2U9ITEsdG49bnVsbCxXdD1udWxsLEluPW51bGwsV2U9bnVsbCx2bj1udWxsLGhpPW51bGwsdXI9bnVsbCxVbz1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKHZyKXtzZXx8KHZyP09lKDI5NjApOkFuKDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbih2cil7dG4hPT12ciYmIXNlJiYobi5zdGVuY2lsTWFzayh2ciksdG49dnIpfSxzZXRGdW5jOmZ1bmN0aW9uKHZyLGJzLENhKXsoV3QhPT12cnx8SW4hPT1ic3x8V2UhPT1DYSkmJihuLnN0ZW5jaWxGdW5jKHZyLGJzLENhKSxXdD12cixJbj1icyxXZT1DYSl9LHNldE9wOmZ1bmN0aW9uKHZyLGJzLENhKXsodm4hPT12cnx8aGkhPT1ic3x8dXIhPT1DYSkmJihuLnN0ZW5jaWxPcCh2cixicyxDYSksdm49dnIsaGk9YnMsdXI9Q2EpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24odnIpe3NlPXZyfSxzZXRDbGVhcjpmdW5jdGlvbih2cil7VW8hPT12ciYmKG4uY2xlYXJTdGVuY2lsKHZyKSxVbz12cil9LHJlc2V0OmZ1bmN0aW9uKCl7c2U9ITEsdG49bnVsbCxXdD1udWxsLEluPW51bGwsV2U9bnVsbCx2bj1udWxsLGhpPW51bGwsdXI9bnVsbCxVbz1udWxsfX19LGQ9e30sdT17fSxwPW5ldyBXZWFrTWFwLGY9W10sbT1udWxsLHk9ITEsTT1udWxsLHY9bnVsbCx4PW51bGwsUj1udWxsLEE9bnVsbCxIPW51bGwsdGU9bnVsbCxLPSExLENlPW51bGwsWmU9bnVsbCxJZT1udWxsLEk9bnVsbCxyZT1udWxsLGNlPW4uZ2V0UGFyYW1ldGVyKDM1NjYxKSxmZT0hMSxfZT0wLG5lPW4uZ2V0UGFyYW1ldGVyKDc5MzgpOy0xIT09bmUuaW5kZXhPZigiV2ViR0wiKT8oX2U9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMobmUpWzFdKSxmZT1fZT49MSk6LTEhPT1uZS5pbmRleE9mKCJPcGVuR0wgRVMiKSYmKF9lPXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhuZSlbMV0pLGZlPV9lPj0yKTtsZXQgZGU9bnVsbCx1ZT17fSxHZT1uLmdldFBhcmFtZXRlcigzMDg4KSxNZT1uLmdldFBhcmFtZXRlcigyOTc4KSxOZT0obmV3IEtpKS5mcm9tQXJyYXkoR2UpLGN0PShuZXcgS2kpLmZyb21BcnJheShNZSk7ZnVuY3Rpb24gd3Qoc2UsdG4sV3Qpe2xldCBJbj1uZXcgVWludDhBcnJheSg0KSxXZT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKHNlLFdlKSxuLnRleFBhcmFtZXRlcmkoc2UsMTAyNDEsOTcyOCksbi50ZXhQYXJhbWV0ZXJpKHNlLDEwMjQwLDk3MjgpO2ZvcihsZXQgdm49MDt2bjxXdDt2bisrKW4udGV4SW1hZ2UyRCh0bit2biwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLEluKTtyZXR1cm4gV2V9bGV0IGZ0PXt9O2Z1bmN0aW9uIE9lKHNlKXshMCE9PWRbc2VdJiYobi5lbmFibGUoc2UpLGRbc2VdPSEwKX1mdW5jdGlvbiBBbihzZSl7ITEhPT1kW3NlXSYmKG4uZGlzYWJsZShzZSksZFtzZV09ITEpfWZ0WzM1NTNdPXd0KDM1NTMsMzU1MywxKSxmdFszNDA2N109d3QoMzQwNjcsMzQwNjksNikscy5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksT2UoMjkyOSksbC5zZXRGdW5jKHZCKSxYZSghMSksX3QoRSQpLE9lKDI4ODQpLG9lKHlwKTtsZXQgaHQ9e1tLMF06MzI3NzQsW29BZV06MzI3NzgsW2FBZV06MzI3Nzl9O2lmKGkpaHRbQSRdPTMyNzc1LGh0W1IkXT0zMjc3NjtlbHNle2xldCBzZT10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO251bGwhPT1zZSYmKGh0W0EkXT1zZS5NSU5fRVhULGh0W1IkXT1zZS5NQVhfRVhUKX1sZXQgbXQ9e1tzQWVdOjAsW2xBZV06MSxbY0FlXTo3NjgsW2R0ZV06NzcwLFtoQWVdOjc3NixbZkFlXTo3NzQsW3VBZV06NzcyLFtkQWVdOjc2OSxbdXRlXTo3NzEsW21BZV06Nzc1LFtwQWVdOjc3M307ZnVuY3Rpb24gb2Uoc2UsdG4sV3QsSW4sV2Usdm4saGksdXIpe2lmKHNlIT09eXApe2lmKCExPT09eSYmKE9lKDMwNDIpLHk9ITApLHNlPT09ckFlKVdlPVdlfHx0bix2bj12bnx8V3QsaGk9aGl8fEluLCh0biE9PXZ8fFdlIT09QSkmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShodFt0bl0saHRbV2VdKSx2PXRuLEE9V2UpLChXdCE9PXh8fEluIT09Unx8dm4hPT1IfHxoaSE9PXRlKSYmKG4uYmxlbmRGdW5jU2VwYXJhdGUobXRbV3RdLG10W0luXSxtdFt2bl0sbXRbaGldKSx4PVd0LFI9SW4sSD12bix0ZT1oaSksTT1zZSxLPW51bGw7ZWxzZSBpZihzZSE9PU18fHVyIT09Syl7aWYoKHYhPT1LMHx8QSE9PUswKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksdj1LMCxBPUswKSx1cilzd2l0Y2goc2Upe2Nhc2UgeHg6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSBUJDpuLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgRCQ6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgSSQ6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OCwwLDc3MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLHNlKX1lbHNlIHN3aXRjaChzZSl7Y2FzZSB4eDpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgVCQ6bi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgRCQ6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgSSQ6bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixzZSl9eD1udWxsLFI9bnVsbCxIPW51bGwsdGU9bnVsbCxNPXNlLEs9dXJ9fWVsc2UhMD09PXkmJihBbigzMDQyKSx5PSExKX1mdW5jdGlvbiBYZShzZSl7Q2UhPT1zZSYmKG4uZnJvbnRGYWNlKHNlPzIzMDQ6MjMwNSksQ2U9c2UpfWZ1bmN0aW9uIF90KHNlKXtzZSE9PXRBZT8oT2UoMjg4NCksc2UhPT1aZSYmbi5jdWxsRmFjZShzZT09PUUkPzEwMjk6c2U9PT1uQWU/MTAyODoxMDMyKSk6QW4oMjg4NCksWmU9c2V9ZnVuY3Rpb24gb24oc2UsdG4sV3Qpe3NlPyhPZSgzMjgyMyksKEkhPT10bnx8cmUhPT1XdCkmJihuLnBvbHlnb25PZmZzZXQodG4sV3QpLEk9dG4scmU9V3QpKTpBbigzMjgyMyl9ZnVuY3Rpb24gaWkoc2Upe3ZvaWQgMD09PXNlJiYoc2U9MzM5ODQrY2UtMSksZGUhPT1zZSYmKG4uYWN0aXZlVGV4dHVyZShzZSksZGU9c2UpfXJldHVybntidWZmZXJzOntjb2xvcjpzLGRlcHRoOmwsc3RlbmNpbDpjfSxlbmFibGU6T2UsZGlzYWJsZTpBbixiaW5kRnJhbWVidWZmZXI6ZnVuY3Rpb24oc2UsdG4pe3JldHVybiB1W3NlXSE9PXRuJiYobi5iaW5kRnJhbWVidWZmZXIoc2UsdG4pLHVbc2VdPXRuLGkmJigzNjAwOT09PXNlJiYodVszNjE2MF09dG4pLDM2MTYwPT09c2UmJih1WzM2MDA5XT10bikpLCEwKX0sZHJhd0J1ZmZlcnM6ZnVuY3Rpb24oc2UsdG4pe2xldCBXdD1mLEluPSExO2lmKHNlKWlmKFd0PXAuZ2V0KHRuKSx2b2lkIDA9PT1XdCYmKFd0PVtdLHAuc2V0KHRuLFd0KSksc2UuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyl7bGV0IFdlPXNlLnRleHR1cmU7aWYoV3QubGVuZ3RoIT09V2UubGVuZ3RofHwzNjA2NCE9PVd0WzBdKXtmb3IobGV0IHZuPTAsaGk9V2UubGVuZ3RoO3ZuPGhpO3ZuKyspV3Rbdm5dPTM2MDY0K3ZuO1d0Lmxlbmd0aD1XZS5sZW5ndGgsSW49ITB9fWVsc2UgMzYwNjQhPT1XdFswXSYmKFd0WzBdPTM2MDY0LEluPSEwKTtlbHNlIDEwMjkhPT1XdFswXSYmKFd0WzBdPTEwMjksSW49ITApO0luJiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKFd0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChXdCkpfSx1c2VQcm9ncmFtOmZ1bmN0aW9uKHNlKXtyZXR1cm4gbSE9PXNlJiYobi51c2VQcm9ncmFtKHNlKSxtPXNlLCEwKX0sc2V0QmxlbmRpbmc6b2Usc2V0TWF0ZXJpYWw6ZnVuY3Rpb24oc2UsdG4pe3NlLnNpZGU9PT1vXz9BbigyODg0KTpPZSgyODg0KTtsZXQgV3Q9c2Uuc2lkZT09PXlvO3RuJiYoV3Q9IVd0KSxYZShXdCksc2UuYmxlbmRpbmc9PT14eCYmITE9PT1zZS50cmFuc3BhcmVudD9vZSh5cCk6b2Uoc2UuYmxlbmRpbmcsc2UuYmxlbmRFcXVhdGlvbixzZS5ibGVuZFNyYyxzZS5ibGVuZERzdCxzZS5ibGVuZEVxdWF0aW9uQWxwaGEsc2UuYmxlbmRTcmNBbHBoYSxzZS5ibGVuZERzdEFscGhhLHNlLnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKHNlLmRlcHRoRnVuYyksbC5zZXRUZXN0KHNlLmRlcHRoVGVzdCksbC5zZXRNYXNrKHNlLmRlcHRoV3JpdGUpLHMuc2V0TWFzayhzZS5jb2xvcldyaXRlKTtsZXQgSW49c2Uuc3RlbmNpbFdyaXRlO2Muc2V0VGVzdChJbiksSW4mJihjLnNldE1hc2soc2Uuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKHNlLnN0ZW5jaWxGdW5jLHNlLnN0ZW5jaWxSZWYsc2Uuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKHNlLnN0ZW5jaWxGYWlsLHNlLnN0ZW5jaWxaRmFpbCxzZS5zdGVuY2lsWlBhc3MpKSxvbihzZS5wb2x5Z29uT2Zmc2V0LHNlLnBvbHlnb25PZmZzZXRGYWN0b3Isc2UucG9seWdvbk9mZnNldFVuaXRzKSwhMD09PXNlLmFscGhhVG9Db3ZlcmFnZT9PZSgzMjkyNik6QW4oMzI5MjYpfSxzZXRGbGlwU2lkZWQ6WGUsc2V0Q3VsbEZhY2U6X3Qsc2V0TGluZVdpZHRoOmZ1bmN0aW9uKHNlKXtzZSE9PUllJiYoZmUmJm4ubGluZVdpZHRoKHNlKSxJZT1zZSl9LHNldFBvbHlnb25PZmZzZXQ6b24sc2V0U2Npc3NvclRlc3Q6ZnVuY3Rpb24oc2Upe3NlP09lKDMwODkpOkFuKDMwODkpfSxhY3RpdmVUZXh0dXJlOmlpLGJpbmRUZXh0dXJlOmZ1bmN0aW9uKHNlLHRuKXtudWxsPT09ZGUmJmlpKCk7bGV0IFd0PXVlW2RlXTt2b2lkIDA9PT1XdCYmKFd0PXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sdWVbZGVdPVd0KSwoV3QudHlwZSE9PXNlfHxXdC50ZXh0dXJlIT09dG4pJiYobi5iaW5kVGV4dHVyZShzZSx0bnx8ZnRbc2VdKSxXdC50eXBlPXNlLFd0LnRleHR1cmU9dG4pfSx1bmJpbmRUZXh0dXJlOmZ1bmN0aW9uKCl7bGV0IHNlPXVlW2RlXTt2b2lkIDAhPT1zZSYmdm9pZCAwIT09c2UudHlwZSYmKG4uYmluZFRleHR1cmUoc2UudHlwZSxudWxsKSxzZS50eXBlPXZvaWQgMCxzZS50ZXh0dXJlPXZvaWQgMCl9LGNvbXByZXNzZWRUZXhJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24uY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHNlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsc2UpfX0sdGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHNlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsc2UpfX0sdGV4SW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHNlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsc2UpfX0sdGV4U3RvcmFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3RvcmFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChzZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHNlKX19LHRleFN0b3JhZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goc2Upe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixzZSl9fSx0ZXhTdWJJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goc2Upe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixzZSl9fSx0ZXhTdWJJbWFnZTNEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goc2Upe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixzZSl9fSxjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChzZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHNlKX19LHNjaXNzb3I6ZnVuY3Rpb24oc2UpeyExPT09TmUuZXF1YWxzKHNlKSYmKG4uc2Npc3NvcihzZS54LHNlLnksc2UueixzZS53KSxOZS5jb3B5KHNlKSl9LHZpZXdwb3J0OmZ1bmN0aW9uKHNlKXshMT09PWN0LmVxdWFscyhzZSkmJihuLnZpZXdwb3J0KHNlLngsc2UueSxzZS56LHNlLncpLGN0LmNvcHkoc2UpKX0scmVzZXQ6ZnVuY3Rpb24oKXtuLmRpc2FibGUoMzA0Miksbi5kaXNhYmxlKDI4ODQpLG4uZGlzYWJsZSgyOTI5KSxuLmRpc2FibGUoMzI4MjMpLG4uZGlzYWJsZSgzMDg5KSxuLmRpc2FibGUoMjk2MCksbi5kaXNhYmxlKDMyOTI2KSxuLmJsZW5kRXF1YXRpb24oMzI3NzQpLG4uYmxlbmRGdW5jKDEsMCksbi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDAsMSwwKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5jbGVhckNvbG9yKDAsMCwwLDApLG4uZGVwdGhNYXNrKCEwKSxuLmRlcHRoRnVuYyg1MTMpLG4uY2xlYXJEZXB0aCgxKSxuLnN0ZW5jaWxNYXNrKDQyOTQ5NjcyOTUpLG4uc3RlbmNpbEZ1bmMoNTE5LDAsNDI5NDk2NzI5NSksbi5zdGVuY2lsT3AoNzY4MCw3NjgwLDc2ODApLG4uY2xlYXJTdGVuY2lsKDApLG4uY3VsbEZhY2UoMTAyOSksbi5mcm9udEZhY2UoMjMwNSksbi5wb2x5Z29uT2Zmc2V0KDAsMCksbi5hY3RpdmVUZXh0dXJlKDMzOTg0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSwhMD09PWkmJihuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSksbi51c2VQcm9ncmFtKG51bGwpLG4ubGluZVdpZHRoKDEpLG4uc2Npc3NvcigwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxuLnZpZXdwb3J0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGQ9e30sZGU9bnVsbCx1ZT17fSx1PXt9LHA9bmV3IFdlYWtNYXAsZj1bXSxtPW51bGwseT0hMSxNPW51bGwsdj1udWxsLHg9bnVsbCxSPW51bGwsQT1udWxsLEg9bnVsbCx0ZT1udWxsLEs9ITEsQ2U9bnVsbCxaZT1udWxsLEllPW51bGwsST1udWxsLHJlPW51bGwsTmUuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGN0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxzLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX19fWZ1bmN0aW9uIFRGZShuLHQsZSxpLHIsbyxhKXtsZXQgeSxzPXIuaXNXZWJHTDIsbD1yLm1heFRleHR1cmVzLGM9ci5tYXhDdWJlbWFwU2l6ZSxkPXIubWF4VGV4dHVyZVNpemUsdT1yLm1heFNhbXBsZXMsZj10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxtPW5ldyBXZWFrTWFwLE09ITE7dHJ5e009dHlwZW9mIE9mZnNjcmVlbkNhbnZhczwidSImJm51bGwhPT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKX1jYXRjaHt9ZnVuY3Rpb24gdihaLE4pe3JldHVybiBNP25ldyBPZmZzY3JlZW5DYW52YXMoWixOKTpEeCgiY2FudmFzIil9ZnVuY3Rpb24geChaLE4sSGUseXQpe2xldCBubj0xO2lmKChaLndpZHRoPnl0fHxaLmhlaWdodD55dCkmJihubj15dC9NYXRoLm1heChaLndpZHRoLFouaGVpZ2h0KSksbm48MXx8ITA9PT1OKXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJlogaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZaIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJlogaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IEJlPU4/ZVJlOk1hdGguZmxvb3IsbW49QmUobm4qWi53aWR0aCksc249QmUobm4qWi5oZWlnaHQpO3ZvaWQgMD09PXkmJih5PXYobW4sc24pKTtsZXQgTnQ9SGU/dihtbixzbik6eTtyZXR1cm4gTnQud2lkdGg9bW4sTnQuaGVpZ2h0PXNuLE50LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKFosMCwwLG1uLHNuKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK1oud2lkdGgrIngiK1ouaGVpZ2h0KyIpIHRvICgiK21uKyJ4IitzbisiKS4iKSxOdH1yZXR1cm4iZGF0YSJpbiBaJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrWi53aWR0aCsieCIrWi5oZWlnaHQrIikuIiksWn1yZXR1cm4gWn1mdW5jdGlvbiBSKFope3JldHVybiBuZWUoWi53aWR0aCkmJm5lZShaLmhlaWdodCl9ZnVuY3Rpb24gSChaLE4pe3JldHVybiBaLmdlbmVyYXRlTWlwbWFwcyYmTiYmWi5taW5GaWx0ZXIhPT1ibyYmWi5taW5GaWx0ZXIhPT1yYX1mdW5jdGlvbiB0ZShaKXtuLmdlbmVyYXRlTWlwbWFwKFopfWZ1bmN0aW9uIEsoWixOLEhlLHl0LG5uPSExKXtpZighMT09PXMpcmV0dXJuIE47aWYobnVsbCE9PVope2lmKHZvaWQgMCE9PW5bWl0pcmV0dXJuIG5bWl07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK1orIiciKX1sZXQgQmU9TjtyZXR1cm4gNjQwMz09PU4mJig1MTI2PT09SGUmJihCZT0zMzMyNiksNTEzMT09PUhlJiYoQmU9MzMzMjUpLDUxMjE9PT1IZSYmKEJlPTMzMzIxKSksMzMzMTk9PT1OJiYoNTEyNj09PUhlJiYoQmU9MzMzMjgpLDUxMzE9PT1IZSYmKEJlPTMzMzI3KSw1MTIxPT09SGUmJihCZT0zMzMyMykpLDY0MDg9PT1OJiYoNTEyNj09PUhlJiYoQmU9MzQ4MzYpLDUxMzE9PT1IZSYmKEJlPTM0ODQyKSw1MTIxPT09SGUmJihCZT15dD09PURyJiYhMT09PW5uPzM1OTA3OjMyODU2KSwzMjgxOT09PUhlJiYoQmU9MzI4NTQpLDMyODIwPT09SGUmJihCZT0zMjg1NSkpLCgzMzMyNT09PUJlfHwzMzMyNj09PUJlfHwzMzMyNz09PUJlfHwzMzMyOD09PUJlfHwzNDg0Mj09PUJlfHwzNDgzNj09PUJlKSYmdC5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxCZX1mdW5jdGlvbiBDZShaLE4sSGUpe3JldHVybiEwPT09SChaLEhlKXx8Wi5pc0ZyYW1lYnVmZmVyVGV4dHVyZSYmWi5taW5GaWx0ZXIhPT1ibyYmWi5taW5GaWx0ZXIhPT1yYT9NYXRoLmxvZzIoTWF0aC5tYXgoTi53aWR0aCxOLmhlaWdodCkpKzE6dm9pZCAwIT09Wi5taXBtYXBzJiZaLm1pcG1hcHMubGVuZ3RoPjA/Wi5taXBtYXBzLmxlbmd0aDpaLmlzQ29tcHJlc3NlZFRleHR1cmUmJkFycmF5LmlzQXJyYXkoWi5pbWFnZSk/Ti5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIFplKFope3JldHVybiBaPT09Ym98fFo9PT1rJHx8Wj09PVAkPzk3Mjg6OTcyOX1mdW5jdGlvbiBJZShaKXtsZXQgTj1aLnRhcmdldDtOLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEllKSxmdW5jdGlvbihaKXtsZXQgTj1pLmdldChaKTt2b2lkIDAhPT1OLl9fd2ViZ2xJbml0JiYobi5kZWxldGVUZXh0dXJlKE4uX193ZWJnbFRleHR1cmUpLGkucmVtb3ZlKFopKX0oTiksTi5pc1ZpZGVvVGV4dHVyZSYmbS5kZWxldGUoTiksYS5tZW1vcnkudGV4dHVyZXMtLX1mdW5jdGlvbiBJKFope2xldCBOPVoudGFyZ2V0O04ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSSksZnVuY3Rpb24oWil7bGV0IE49Wi50ZXh0dXJlLEhlPWkuZ2V0KFopLHl0PWkuZ2V0KE4pO2lmKFope2lmKHZvaWQgMCE9PXl0Ll9fd2ViZ2xUZXh0dXJlJiYobi5kZWxldGVUZXh0dXJlKHl0Ll9fd2ViZ2xUZXh0dXJlKSxhLm1lbW9yeS50ZXh0dXJlcy0tKSxaLmRlcHRoVGV4dHVyZSYmWi5kZXB0aFRleHR1cmUuZGlzcG9zZSgpLFouaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBubj0wO25uPDY7bm4rKyluLmRlbGV0ZUZyYW1lYnVmZmVyKEhlLl9fd2ViZ2xGcmFtZWJ1ZmZlcltubl0pLEhlLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoSGUuX193ZWJnbERlcHRoYnVmZmVyW25uXSk7ZWxzZSBuLmRlbGV0ZUZyYW1lYnVmZmVyKEhlLl9fd2ViZ2xGcmFtZWJ1ZmZlciksSGUuX193ZWJnbERlcHRoYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihIZS5fX3dlYmdsRGVwdGhidWZmZXIpLEhlLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmbi5kZWxldGVGcmFtZWJ1ZmZlcihIZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLEhlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoSGUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxIZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKEhlLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYoWi5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKWZvcihsZXQgbm49MCxCZT1OLmxlbmd0aDtubjxCZTtubisrKXtsZXQgbW49aS5nZXQoTltubl0pO21uLl9fd2ViZ2xUZXh0dXJlJiYobi5kZWxldGVUZXh0dXJlKG1uLl9fd2ViZ2xUZXh0dXJlKSxhLm1lbW9yeS50ZXh0dXJlcy0tKSxpLnJlbW92ZShOW25uXSl9aS5yZW1vdmUoTiksaS5yZW1vdmUoWil9fShOKX1sZXQgZmU9MDtmdW5jdGlvbiBkZShaLE4pe2xldCBIZT1pLmdldChaKTtpZihaLmlzVmlkZW9UZXh0dXJlJiZmdW5jdGlvbihaKXtsZXQgTj1hLnJlbmRlci5mcmFtZTttLmdldChaKSE9PU4mJihtLnNldChaLE4pLFoudXBkYXRlKCkpfShaKSxaLnZlcnNpb24+MCYmSGUuX192ZXJzaW9uIT09Wi52ZXJzaW9uKXtsZXQgeXQ9Wi5pbWFnZTtpZih2b2lkIDA9PT15dCljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2V7aWYoITEhPT15dC5jb21wbGV0ZSlyZXR1cm4gdm9pZCBPZShIZSxaLE4pO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgaW5jb21wbGV0ZSIpfX1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrTiksZS5iaW5kVGV4dHVyZSgzNTUzLEhlLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBNZShaLE4pe2xldCBIZT1pLmdldChaKTtaLnZlcnNpb24+MCYmSGUuX192ZXJzaW9uIT09Wi52ZXJzaW9uP2Z1bmN0aW9uKFosTixIZSl7aWYoNiE9PU4uaW1hZ2UubGVuZ3RoKXJldHVybjtmdChaLE4pLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtIZSksZS5iaW5kVGV4dHVyZSgzNDA2NyxaLl9fd2ViZ2xUZXh0dXJlKSxuLnBpeGVsU3RvcmVpKDM3NDQwLE4uZmxpcFkpLG4ucGl4ZWxTdG9yZWkoMzc0NDEsTi5wcmVtdWx0aXBseUFscGhhKSxuLnBpeGVsU3RvcmVpKDMzMTcsTi51bnBhY2tBbGlnbm1lbnQpLG4ucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IHl0PU4mJihOLmlzQ29tcHJlc3NlZFRleHR1cmV8fE4uaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSksbm49Ti5pbWFnZVswXSYmTi5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLEJlPVtdO2ZvcihsZXQgV2U9MDtXZTw2O1dlKyspQmVbV2VdPXl0fHxubj9ubj9OLmltYWdlW1dlXS5pbWFnZTpOLmltYWdlW1dlXTp4KE4uaW1hZ2VbV2VdLCExLCEwLGMpLEJlW1dlXT1vbihOLEJlW1dlXSk7bGV0IEluLG1uPUJlWzBdLHNuPVIobW4pfHxzLE50PW8uY29udmVydChOLmZvcm1hdCxOLmVuY29kaW5nKSxMdD1vLmNvbnZlcnQoTi50eXBlKSxIbj1LKE4uaW50ZXJuYWxGb3JtYXQsTnQsTHQsTi5lbmNvZGluZyksc2U9cyYmITAhPT1OLmlzVmlkZW9UZXh0dXJlLHRuPXZvaWQgMD09PVouX192ZXJzaW9uLFd0PUNlKE4sbW4sc24pO2lmKHd0KDM0MDY3LE4sc24pLHl0KXtzZSYmdG4mJmUudGV4U3RvcmFnZTJEKDM0MDY3LFd0LEhuLG1uLndpZHRoLG1uLmhlaWdodCk7Zm9yKGxldCBXZT0wO1dlPDY7V2UrKyl7SW49QmVbV2VdLm1pcG1hcHM7Zm9yKGxldCB2bj0wO3ZuPEluLmxlbmd0aDt2bisrKXtsZXQgaGk9SW5bdm5dO04uZm9ybWF0IT09YmE/bnVsbCE9PU50P3NlP2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzQwNjkrV2Usdm4sMCwwLGhpLndpZHRoLGhpLmhlaWdodCxOdCxoaS5kYXRhKTplLmNvbXByZXNzZWRUZXhJbWFnZTJEKDM0MDY5K1dlLHZuLEhuLGhpLndpZHRoLGhpLmhlaWdodCwwLGhpLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnNldFRleHR1cmVDdWJlKCkiKTpzZT9lLnRleFN1YkltYWdlMkQoMzQwNjkrV2Usdm4sMCwwLGhpLndpZHRoLGhpLmhlaWdodCxOdCxMdCxoaS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrV2Usdm4sSG4saGkud2lkdGgsaGkuaGVpZ2h0LDAsTnQsTHQsaGkuZGF0YSl9fX1lbHNle0luPU4ubWlwbWFwcyxzZSYmdG4mJihJbi5sZW5ndGg+MCYmV3QrKyxlLnRleFN0b3JhZ2UyRCgzNDA2NyxXdCxIbixCZVswXS53aWR0aCxCZVswXS5oZWlnaHQpKTtmb3IobGV0IFdlPTA7V2U8NjtXZSsrKWlmKG5uKXtzZT9lLnRleFN1YkltYWdlMkQoMzQwNjkrV2UsMCwwLDAsQmVbV2VdLndpZHRoLEJlW1dlXS5oZWlnaHQsTnQsTHQsQmVbV2VdLmRhdGEpOmUudGV4SW1hZ2UyRCgzNDA2OStXZSwwLEhuLEJlW1dlXS53aWR0aCxCZVtXZV0uaGVpZ2h0LDAsTnQsTHQsQmVbV2VdLmRhdGEpO2ZvcihsZXQgdm49MDt2bjxJbi5sZW5ndGg7dm4rKyl7bGV0IHVyPUluW3ZuXS5pbWFnZVtXZV0uaW1hZ2U7c2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLHZuKzEsMCwwLHVyLndpZHRoLHVyLmhlaWdodCxOdCxMdCx1ci5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrV2Usdm4rMSxIbix1ci53aWR0aCx1ci5oZWlnaHQsMCxOdCxMdCx1ci5kYXRhKX19ZWxzZXtzZT9lLnRleFN1YkltYWdlMkQoMzQwNjkrV2UsMCwwLDAsTnQsTHQsQmVbV2VdKTplLnRleEltYWdlMkQoMzQwNjkrV2UsMCxIbixOdCxMdCxCZVtXZV0pO2ZvcihsZXQgdm49MDt2bjxJbi5sZW5ndGg7dm4rKyl7bGV0IGhpPUluW3ZuXTtzZT9lLnRleFN1YkltYWdlMkQoMzQwNjkrV2Usdm4rMSwwLDAsTnQsTHQsaGkuaW1hZ2VbV2VdKTplLnRleEltYWdlMkQoMzQwNjkrV2Usdm4rMSxIbixOdCxMdCxoaS5pbWFnZVtXZV0pfX19SChOLHNuKSYmdGUoMzQwNjcpLFouX192ZXJzaW9uPU4udmVyc2lvbixOLm9uVXBkYXRlJiZOLm9uVXBkYXRlKE4pfShIZSxaLE4pOihlLmFjdGl2ZVRleHR1cmUoMzM5ODQrTiksZS5iaW5kVGV4dHVyZSgzNDA2NyxIZS5fX3dlYmdsVGV4dHVyZSkpfWxldCBOZT17W01CXToxMDQ5NyxbZ3NdOjMzMDcxLFt3Ql06MzM2NDh9LGN0PXtbYm9dOjk3MjgsW2skXTo5OTg0LFtQJF06OTk4NixbcmFdOjk3MjksW0FBZV06OTk4NSxbZUFdOjk5ODd9O2Z1bmN0aW9uIHd0KFosTixIZSl7aWYoSGU/KG4udGV4UGFyYW1ldGVyaShaLDEwMjQyLE5lW04ud3JhcFNdKSxuLnRleFBhcmFtZXRlcmkoWiwxMDI0MyxOZVtOLndyYXBUXSksKDMyODc5PT09Wnx8MzU4NjY9PT1aKSYmbi50ZXhQYXJhbWV0ZXJpKFosMzI4ODIsTmVbTi53cmFwUl0pLG4udGV4UGFyYW1ldGVyaShaLDEwMjQwLGN0W04ubWFnRmlsdGVyXSksbi50ZXhQYXJhbWV0ZXJpKFosMTAyNDEsY3RbTi5taW5GaWx0ZXJdKSk6KG4udGV4UGFyYW1ldGVyaShaLDEwMjQyLDMzMDcxKSxuLnRleFBhcmFtZXRlcmkoWiwxMDI0MywzMzA3MSksKDMyODc5PT09Wnx8MzU4NjY9PT1aKSYmbi50ZXhQYXJhbWV0ZXJpKFosMzI4ODIsMzMwNzEpLChOLndyYXBTIT09Z3N8fE4ud3JhcFQhPT1ncykmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZy4iKSxuLnRleFBhcmFtZXRlcmkoWiwxMDI0MCxaZShOLm1hZ0ZpbHRlcikpLG4udGV4UGFyYW1ldGVyaShaLDEwMjQxLFplKE4ubWluRmlsdGVyKSksTi5taW5GaWx0ZXIhPT1ibyYmTi5taW5GaWx0ZXIhPT1yYSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIikpLCEwPT09dC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKXtsZXQgeXQ9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2lmKE4udHlwZT09PUNtJiYhMT09PXQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8ITE9PT1zJiZOLnR5cGU9PT10XyYmITE9PT10LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSlyZXR1cm47KE4uYW5pc290cm9weT4xfHxpLmdldChOKS5fX2N1cnJlbnRBbmlzb3Ryb3B5KSYmKG4udGV4UGFyYW1ldGVyZihaLHl0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKE4uYW5pc290cm9weSxyLmdldE1heEFuaXNvdHJvcHkoKSkpLGkuZ2V0KE4pLl9fY3VycmVudEFuaXNvdHJvcHk9Ti5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24gZnQoWixOKXt2b2lkIDA9PT1aLl9fd2ViZ2xJbml0JiYoWi5fX3dlYmdsSW5pdD0hMCxOLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEllKSxaLl9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIE9lKFosTixIZSl7bGV0IHl0PTM1NTM7Ti5pc0RhdGFUZXh0dXJlMkRBcnJheSYmKHl0PTM1ODY2KSxOLmlzRGF0YVRleHR1cmUzRCYmKHl0PTMyODc5KSxmdChaLE4pLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtIZSksZS5iaW5kVGV4dHVyZSh5dCxaLl9fd2ViZ2xUZXh0dXJlKSxuLnBpeGVsU3RvcmVpKDM3NDQwLE4uZmxpcFkpLG4ucGl4ZWxTdG9yZWkoMzc0NDEsTi5wcmVtdWx0aXBseUFscGhhKSxuLnBpeGVsU3RvcmVpKDMzMTcsTi51bnBhY2tBbGlnbm1lbnQpLG4ucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IG5uPWZ1bmN0aW9uKFope3JldHVybiFzJiYoWi53cmFwUyE9PWdzfHxaLndyYXBUIT09Z3N8fFoubWluRmlsdGVyIT09Ym8mJloubWluRmlsdGVyIT09cmEpfShOKSYmITE9PT1SKE4uaW1hZ2UpLEJlPXgoTi5pbWFnZSxubiwhMSxkKTtCZT1vbihOLEJlKTtsZXQgbW49UihCZSl8fHMsc249by5jb252ZXJ0KE4uZm9ybWF0LE4uZW5jb2RpbmcpLE50PW8uY29udmVydChOLnR5cGUpLEx0PUsoTi5pbnRlcm5hbEZvcm1hdCxzbixOdCxOLmVuY29kaW5nLE4uaXNWaWRlb1RleHR1cmUpO3d0KHl0LE4sbW4pO2xldCBIbixzZT1OLm1pcG1hcHMsdG49cyYmITAhPT1OLmlzVmlkZW9UZXh0dXJlLFd0PXZvaWQgMD09PVouX192ZXJzaW9uLEluPUNlKE4sQmUsbW4pO2lmKE4uaXNEZXB0aFRleHR1cmUpTHQ9NjQwMixzP0x0PU4udHlwZT09PUNtPzM2MDEyOk4udHlwZT09PUNJPzMzMTkwOk4udHlwZT09PW5fPzM1MDU2OjMzMTg5Ok4udHlwZT09PUNtJiZjb25zb2xlLmVycm9yKCJXZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCBkZXB0aCB0ZXh0dXJlIHJlcXVpcmVzIFdlYkdMMi4iKSxOLmZvcm1hdD09PXdtJiY2NDAyPT09THQmJk4udHlwZSE9PUV4JiZOLnR5cGUhPT1DSSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLE4udHlwZT1FeCxOdD1vLmNvbnZlcnQoTi50eXBlKSksTi5mb3JtYXQ9PT1hXyYmNjQwMj09PUx0JiYoTHQ9MzQwNDEsTi50eXBlIT09bl8mJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksTi50eXBlPW5fLE50PW8uY29udmVydChOLnR5cGUpKSksdG4mJld0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxMdCxCZS53aWR0aCxCZS5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsTHQsQmUud2lkdGgsQmUuaGVpZ2h0LDAsc24sTnQsbnVsbCk7ZWxzZSBpZihOLmlzRGF0YVRleHR1cmUpaWYoc2UubGVuZ3RoPjAmJm1uKXt0biYmV3QmJmUudGV4U3RvcmFnZTJEKDM1NTMsSW4sTHQsc2VbMF0ud2lkdGgsc2VbMF0uaGVpZ2h0KTtmb3IobGV0IFdlPTAsdm49c2UubGVuZ3RoO1dlPHZuO1dlKyspSG49c2VbV2VdLHRuP2UudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLEhuLndpZHRoLEhuLmhlaWdodCxzbixOdCxIbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxXZSxMdCxIbi53aWR0aCxIbi5oZWlnaHQsMCxzbixOdCxIbi5kYXRhKTtOLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHRuPyhXdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxJbixMdCxCZS53aWR0aCxCZS5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLEJlLndpZHRoLEJlLmhlaWdodCxzbixOdCxCZS5kYXRhKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxMdCxCZS53aWR0aCxCZS5oZWlnaHQsMCxzbixOdCxCZS5kYXRhKTtlbHNlIGlmKE4uaXNDb21wcmVzc2VkVGV4dHVyZSl7dG4mJld0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEluLEx0LHNlWzBdLndpZHRoLHNlWzBdLmhlaWdodCk7Zm9yKGxldCBXZT0wLHZuPXNlLmxlbmd0aDtXZTx2bjtXZSsrKUhuPXNlW1dlXSxOLmZvcm1hdCE9PWJhP251bGwhPT1zbj90bj9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsV2UsMCwwLEhuLndpZHRoLEhuLmhlaWdodCxzbixIbi5kYXRhKTplLmNvbXByZXNzZWRUZXhJbWFnZTJEKDM1NTMsV2UsTHQsSG4ud2lkdGgsSG4uaGVpZ2h0LDAsSG4uZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6dG4/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsV2UsMCwwLEhuLndpZHRoLEhuLmhlaWdodCxzbixOdCxIbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxXZSxMdCxIbi53aWR0aCxIbi5oZWlnaHQsMCxzbixOdCxIbi5kYXRhKX1lbHNlIGlmKE4uaXNEYXRhVGV4dHVyZTJEQXJyYXkpdG4/KFd0JiZlLnRleFN0b3JhZ2UzRCgzNTg2NixJbixMdCxCZS53aWR0aCxCZS5oZWlnaHQsQmUuZGVwdGgpLGUudGV4U3ViSW1hZ2UzRCgzNTg2NiwwLDAsMCwwLEJlLndpZHRoLEJlLmhlaWdodCxCZS5kZXB0aCxzbixOdCxCZS5kYXRhKSk6ZS50ZXhJbWFnZTNEKDM1ODY2LDAsTHQsQmUud2lkdGgsQmUuaGVpZ2h0LEJlLmRlcHRoLDAsc24sTnQsQmUuZGF0YSk7ZWxzZSBpZihOLmlzRGF0YVRleHR1cmUzRCl0bj8oV3QmJmUudGV4U3RvcmFnZTNEKDMyODc5LEluLEx0LEJlLndpZHRoLEJlLmhlaWdodCxCZS5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsQmUud2lkdGgsQmUuaGVpZ2h0LEJlLmRlcHRoLHNuLE50LEJlLmRhdGEpKTplLnRleEltYWdlM0QoMzI4NzksMCxMdCxCZS53aWR0aCxCZS5oZWlnaHQsQmUuZGVwdGgsMCxzbixOdCxCZS5kYXRhKTtlbHNlIGlmKE4uaXNGcmFtZWJ1ZmZlclRleHR1cmUpdG4mJld0P2UudGV4U3RvcmFnZTJEKDM1NTMsSW4sTHQsQmUud2lkdGgsQmUuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLEx0LEJlLndpZHRoLEJlLmhlaWdodCwwLHNuLE50LG51bGwpO2Vsc2UgaWYoc2UubGVuZ3RoPjAmJm1uKXt0biYmV3QmJmUudGV4U3RvcmFnZTJEKDM1NTMsSW4sTHQsc2VbMF0ud2lkdGgsc2VbMF0uaGVpZ2h0KTtmb3IobGV0IFdlPTAsdm49c2UubGVuZ3RoO1dlPHZuO1dlKyspSG49c2VbV2VdLHRuP2UudGV4U3ViSW1hZ2UyRCgzNTUzLFdlLDAsMCxzbixOdCxIbik6ZS50ZXhJbWFnZTJEKDM1NTMsV2UsTHQsc24sTnQsSG4pO04uZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgdG4/KFd0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEluLEx0LEJlLndpZHRoLEJlLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsc24sTnQsQmUpKTplLnRleEltYWdlMkQoMzU1MywwLEx0LHNuLE50LEJlKTtIKE4sbW4pJiZ0ZSh5dCksWi5fX3ZlcnNpb249Ti52ZXJzaW9uLE4ub25VcGRhdGUmJk4ub25VcGRhdGUoTil9ZnVuY3Rpb24gU3QoWixOLEhlLHl0LG5uKXtsZXQgQmU9by5jb252ZXJ0KEhlLmZvcm1hdCxIZS5lbmNvZGluZyksbW49by5jb252ZXJ0KEhlLnR5cGUpLHNuPUsoSGUuaW50ZXJuYWxGb3JtYXQsQmUsbW4sSGUuZW5jb2RpbmcpO2kuZ2V0KE4pLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KDMyODc5PT09bm58fDM1ODY2PT09bm4/ZS50ZXhJbWFnZTNEKG5uLDAsc24sTi53aWR0aCxOLmhlaWdodCxOLmRlcHRoLDAsQmUsbW4sbnVsbCk6ZS50ZXhJbWFnZTJEKG5uLDAsc24sTi53aWR0aCxOLmhlaWdodCwwLEJlLG1uLG51bGwpKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxaKSxOLnVzZVJlbmRlclRvVGV4dHVyZT9mLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAseXQsbm4saS5nZXQoSGUpLl9fd2ViZ2xUZXh0dXJlLDAsX3QoTikpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAseXQsbm4saS5nZXQoSGUpLl9fd2ViZ2xUZXh0dXJlLDApLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIHJuKFosTixIZSl7aWYobi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLFopLE4uZGVwdGhCdWZmZXImJiFOLnN0ZW5jaWxCdWZmZXIpe2xldCB5dD0zMzE4OTtpZihIZXx8Ti51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBubj1OLmRlcHRoVGV4dHVyZTtubiYmbm4uaXNEZXB0aFRleHR1cmUmJihubi50eXBlPT09Q20/eXQ9MzYwMTI6bm4udHlwZT09PUNJJiYoeXQ9MzMxOTApKTtsZXQgQmU9X3QoTik7Ti51c2VSZW5kZXJUb1RleHR1cmU/Zi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsQmUseXQsTi53aWR0aCxOLmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsQmUseXQsTi53aWR0aCxOLmhlaWdodCl9ZWxzZSBuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEseXQsTi53aWR0aCxOLmhlaWdodCk7bi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxaKX1lbHNlIGlmKE4uZGVwdGhCdWZmZXImJk4uc3RlbmNpbEJ1ZmZlcil7bGV0IHl0PV90KE4pO0hlJiZOLnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5dCwzNTA1NixOLndpZHRoLE4uaGVpZ2h0KTpOLnVzZVJlbmRlclRvVGV4dHVyZT9mLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSx5dCwzNTA1NixOLndpZHRoLE4uaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsMzQwNDEsTi53aWR0aCxOLmhlaWdodCksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzMzMwNiwzNjE2MSxaKX1lbHNle2xldCB5dD0hMD09PU4uaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz9OLnRleHR1cmVbMF06Ti50ZXh0dXJlLG5uPW8uY29udmVydCh5dC5mb3JtYXQseXQuZW5jb2RpbmcpLEJlPW8uY29udmVydCh5dC50eXBlKSxtbj1LKHl0LmludGVybmFsRm9ybWF0LG5uLEJlLHl0LmVuY29kaW5nKSxzbj1fdChOKTtIZSYmTi51c2VSZW5kZXJidWZmZXI/bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsc24sbW4sTi53aWR0aCxOLmhlaWdodCk6Ti51c2VSZW5kZXJUb1RleHR1cmU/Zi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsc24sbW4sTi53aWR0aCxOLmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLG1uLE4ud2lkdGgsTi5oZWlnaHQpfW4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX1mdW5jdGlvbiBodChaKXtsZXQgTj1pLmdldChaKSxIZT0hMD09PVouaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ7aWYoWi5kZXB0aFRleHR1cmUmJiFOLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIpe2lmKEhlKXRocm93IG5ldyBFcnJvcigidGFyZ2V0LmRlcHRoVGV4dHVyZSBub3Qgc3VwcG9ydGVkIGluIEN1YmUgcmVuZGVyIHRhcmdldHMiKTshZnVuY3Rpb24oWixOKXtpZihOJiZOLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXRocm93IG5ldyBFcnJvcigiRGVwdGggVGV4dHVyZSB3aXRoIGN1YmUgcmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLFopLCFOLmRlcHRoVGV4dHVyZXx8IU4uZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKXRocm93IG5ldyBFcnJvcigicmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZSIpOyghaS5nZXQoTi5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlfHxOLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCE9PU4ud2lkdGh8fE4uZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCE9PU4uaGVpZ2h0KSYmKE4uZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPU4ud2lkdGgsTi5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PU4uaGVpZ2h0LE4uZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKSxkZShOLmRlcHRoVGV4dHVyZSwwKTtsZXQgeXQ9aS5nZXQoTi5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLG5uPV90KE4pO2lmKE4uZGVwdGhUZXh0dXJlLmZvcm1hdD09PXdtKU4udXNlUmVuZGVyVG9UZXh0dXJlP2YuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzNjA5NiwzNTUzLHl0LDAsbm4pOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1Myx5dCwwKTtlbHNle2lmKE4uZGVwdGhUZXh0dXJlLmZvcm1hdCE9PWFfKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iik7Ti51c2VSZW5kZXJUb1RleHR1cmU/Zi5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDMzMzA2LDM1NTMseXQsMCxubik6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLHl0LDApfX0oTi5fX3dlYmdsRnJhbWVidWZmZXIsWil9ZWxzZSBpZihIZSl7Ti5fX3dlYmdsRGVwdGhidWZmZXI9W107Zm9yKGxldCB5dD0wO3l0PDY7eXQrKyllLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxOLl9fd2ViZ2xGcmFtZWJ1ZmZlclt5dF0pLE4uX193ZWJnbERlcHRoYnVmZmVyW3l0XT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHJuKE4uX193ZWJnbERlcHRoYnVmZmVyW3l0XSxaLCExKX1lbHNlIGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLE4uX193ZWJnbEZyYW1lYnVmZmVyKSxOLl9fd2ViZ2xEZXB0aGJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHJuKE4uX193ZWJnbERlcHRoYnVmZmVyLFosITEpO2UuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIF90KFope3JldHVybiBzJiYoWi51c2VSZW5kZXJidWZmZXJ8fFoudXNlUmVuZGVyVG9UZXh0dXJlKT9NYXRoLm1pbih1LFouc2FtcGxlcyk6MH1mdW5jdGlvbiBvbihaLE4pe2xldCBIZT1aLmVuY29kaW5nLHl0PVouZm9ybWF0LG5uPVoudHlwZTtyZXR1cm4hMD09PVouaXNDb21wcmVzc2VkVGV4dHVyZXx8ITA9PT1aLmlzVmlkZW9UZXh0dXJlfHxaLmZvcm1hdD09PVNCfHxIZSE9PU1wJiYoSGU9PT1Ecj8hMT09PXM/ITA9PT10LmhhcygiRVhUX3NSR0IiKSYmeXQ9PT1iYT8oWi5mb3JtYXQ9U0IsWi5taW5GaWx0ZXI9cmEsWi5nZW5lcmF0ZU1pcG1hcHM9ITEpOk49amQuc1JHQlRvTGluZWFyKE4pOih5dCE9PWJhfHxubiE9PXZwKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBzUkdCIGVuY29kZWQgdGV4dHVyZXMgaGF2ZSB0byB1c2UgUkdCQUZvcm1hdCBhbmQgVW5zaWduZWRCeXRlVHlwZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBVbnN1cHBvcnRlZCB0ZXh0dXJlIGVuY29kaW5nOiIsSGUpKSxOfWxldCB3bj0hMSxpaT0hMTt0aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtsZXQgWj1mZTtyZXR1cm4gWj49bCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBUcnlpbmcgdG8gdXNlICIrWisiIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAiK2wpLGZlKz0xLFp9LHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9ZnVuY3Rpb24oKXtmZT0wfSx0aGlzLnNldFRleHR1cmUyRD1kZSx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uKFosTil7bGV0IEhlPWkuZ2V0KFopO1oudmVyc2lvbj4wJiZIZS5fX3ZlcnNpb24hPT1aLnZlcnNpb24/T2UoSGUsWixOKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K04pLGUuYmluZFRleHR1cmUoMzU4NjYsSGUuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlM0Q9ZnVuY3Rpb24oWixOKXtsZXQgSGU9aS5nZXQoWik7Wi52ZXJzaW9uPjAmJkhlLl9fdmVyc2lvbiE9PVoudmVyc2lvbj9PZShIZSxaLE4pOihlLmFjdGl2ZVRleHR1cmUoMzM5ODQrTiksZS5iaW5kVGV4dHVyZSgzMjg3OSxIZS5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmVDdWJlPU1lLHRoaXMucmViaW5kVGV4dHVyZXM9ZnVuY3Rpb24oWixOLEhlKXtsZXQgeXQ9aS5nZXQoWik7dm9pZCAwIT09TiYmU3QoeXQuX193ZWJnbEZyYW1lYnVmZmVyLFosWi50ZXh0dXJlLDM2MDY0LDM1NTMpLHZvaWQgMCE9PUhlJiZodChaKX0sdGhpcy5zZXR1cFJlbmRlclRhcmdldD1mdW5jdGlvbihaKXtsZXQgTj1aLnRleHR1cmUsSGU9aS5nZXQoWikseXQ9aS5nZXQoTik7Wi5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixJKSwhMCE9PVouaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyYmKHZvaWQgMD09PXl0Ll9fd2ViZ2xUZXh0dXJlJiYoeXQuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkpLHl0Ll9fdmVyc2lvbj1OLnZlcnNpb24sYS5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IG5uPSEwPT09Wi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCxCZT0hMD09PVouaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyxtbj1OLmlzRGF0YVRleHR1cmUzRHx8Ti5pc0RhdGFUZXh0dXJlMkRBcnJheSxzbj1SKFopfHxzO2lmKG5uKXtIZS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBOdD0wO050PDY7TnQrKylIZS5fX3dlYmdsRnJhbWVidWZmZXJbTnRdPW4uY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKEhlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCksQmUpaWYoci5kcmF3QnVmZmVycyl7bGV0IE50PVoudGV4dHVyZTtmb3IobGV0IEx0PTAsSG49TnQubGVuZ3RoO0x0PEhuO0x0Kyspe2xldCBzZT1pLmdldChOdFtMdF0pO3ZvaWQgMD09PXNlLl9fd2ViZ2xUZXh0dXJlJiYoc2UuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCksYS5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihaLnVzZVJlbmRlcmJ1ZmZlcilpZihzKXtIZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLEhlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxIZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCBOdD1vLmNvbnZlcnQoTi5mb3JtYXQsTi5lbmNvZGluZyksTHQ9by5jb252ZXJ0KE4udHlwZSksSG49SyhOLmludGVybmFsRm9ybWF0LE50LEx0LE4uZW5jb2RpbmcpLHNlPV90KFopO24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHNlLEhuLFoud2lkdGgsWi5oZWlnaHQpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEhlLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxIZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSxaLmRlcHRoQnVmZmVyJiYoSGUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCkscm4oSGUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLFosITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKG5uKXtlLmJpbmRUZXh0dXJlKDM0MDY3LHl0Ll9fd2ViZ2xUZXh0dXJlKSx3dCgzNDA2NyxOLHNuKTtmb3IobGV0IE50PTA7TnQ8NjtOdCsrKVN0KEhlLl9fd2ViZ2xGcmFtZWJ1ZmZlcltOdF0sWixOLDM2MDY0LDM0MDY5K050KTtIKE4sc24pJiZ0ZSgzNDA2NyksZS51bmJpbmRUZXh0dXJlKCl9ZWxzZSBpZihCZSl7bGV0IE50PVoudGV4dHVyZTtmb3IobGV0IEx0PTAsSG49TnQubGVuZ3RoO0x0PEhuO0x0Kyspe2xldCBzZT1OdFtMdF0sdG49aS5nZXQoc2UpO2UuYmluZFRleHR1cmUoMzU1Myx0bi5fX3dlYmdsVGV4dHVyZSksd3QoMzU1MyxzZSxzbiksU3QoSGUuX193ZWJnbEZyYW1lYnVmZmVyLFosc2UsMzYwNjQrTHQsMzU1MyksSChzZSxzbikmJnRlKDM1NTMpfWUudW5iaW5kVGV4dHVyZSgpfWVsc2V7bGV0IE50PTM1NTM7bW4mJihzP050PU4uaXNEYXRhVGV4dHVyZTNEPzMyODc5OjM1ODY2OmNvbnNvbGUud2FybigiVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5IG9ubHkgc3VwcG9ydGVkIHdpdGggV2ViR0wyLiIpKSxlLmJpbmRUZXh0dXJlKE50LHl0Ll9fd2ViZ2xUZXh0dXJlKSx3dChOdCxOLHNuKSxTdChIZS5fX3dlYmdsRnJhbWVidWZmZXIsWixOLDM2MDY0LE50KSxIKE4sc24pJiZ0ZShOdCksZS51bmJpbmRUZXh0dXJlKCl9Wi5kZXB0aEJ1ZmZlciYmaHQoWil9LHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uKFope2xldCBOPVIoWil8fHMsSGU9ITA9PT1aLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM/Wi50ZXh0dXJlOltaLnRleHR1cmVdO2ZvcihsZXQgeXQ9MCxubj1IZS5sZW5ndGg7eXQ8bm47eXQrKyl7bGV0IEJlPUhlW3l0XTtpZihIKEJlLE4pKXtsZXQgbW49Wi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLHNuPWkuZ2V0KEJlKS5fX3dlYmdsVGV4dHVyZTtlLmJpbmRUZXh0dXJlKG1uLHNuKSx0ZShtbiksZS51bmJpbmRUZXh0dXJlKCl9fX0sdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1mdW5jdGlvbihaKXtpZihaLnVzZVJlbmRlcmJ1ZmZlcilpZihzKXtsZXQgTj1aLndpZHRoLEhlPVouaGVpZ2h0LHl0PTE2Mzg0LG5uPVszNjA2NF0sQmU9Wi5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O1ouZGVwdGhCdWZmZXImJm5uLnB1c2goQmUpLFouaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fChaLmRlcHRoQnVmZmVyJiYoeXR8PTI1NiksWi5zdGVuY2lsQnVmZmVyJiYoeXR8PTEwMjQpKTtsZXQgbW49aS5nZXQoWik7ZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbW4uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxtbi5fX3dlYmdsRnJhbWVidWZmZXIpLFouaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHkmJihuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOCxbQmVdKSxuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOSxbQmVdKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLE4sSGUsMCwwLE4sSGUseXQsOTcyOCksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsbm4pLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LG1uLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcil9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKX0sdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPWh0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9U3QsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWZ1bmN0aW9uKFosTil7WiYmWi5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoITE9PT13biYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLHduPSEwKSxaPVoudGV4dHVyZSksZGUoWixOKX0sdGhpcy5zYWZlU2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oWixOKXtaJiZaLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoITE9PT1paSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxpaT0hMCksWj1aLnRleHR1cmUpLE1lKFosTil9fWZ1bmN0aW9uIERGZShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtyZXR1cm57Y29udmVydDpmdW5jdGlvbihvLGE9bnVsbCl7bGV0IHM7aWYobz09PXZwKXJldHVybiA1MTIxO2lmKG89PT1PQWUpcmV0dXJuIDMyODE5O2lmKG89PT1GQWUpcmV0dXJuIDMyODIwO2lmKG89PT1SQWUpcmV0dXJuIDUxMjA7aWYobz09PWtBZSlyZXR1cm4gNTEyMjtpZihvPT09RXgpcmV0dXJuIDUxMjM7aWYobz09PVBBZSlyZXR1cm4gNTEyNDtpZihvPT09Q0kpcmV0dXJuIDUxMjU7aWYobz09PUNtKXJldHVybiA1MTI2O2lmKG89PT10XylyZXR1cm4gaT81MTMxOihzPXQuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksbnVsbCE9PXM/cy5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZihvPT09TEFlKXJldHVybiA2NDA2O2lmKG89PT1iYSlyZXR1cm4gNjQwODtpZihvPT09TkFlKXJldHVybiA2NDA5O2lmKG89PT1CQWUpcmV0dXJuIDY0MTA7aWYobz09PXdtKXJldHVybiA2NDAyO2lmKG89PT1hXylyZXR1cm4gMzQwNDE7aWYobz09PVZBZSlyZXR1cm4gNjQwMztpZihvPT09U0IpcmV0dXJuIHM9dC5nZXQoIkVYVF9zUkdCIiksbnVsbCE9PXM/cy5TUkdCX0FMUEhBX0VYVDpudWxsO2lmKG89PT1IQWUpcmV0dXJuIDM2MjQ0O2lmKG89PT16QWUpcmV0dXJuIDMzMzE5O2lmKG89PT1VQWUpcmV0dXJuIDMzMzIwO2lmKG89PT1qQWUpcmV0dXJuIDM2MjQ5O2lmKG89PT1GM3x8bz09PUwzfHxvPT09TjN8fG89PT1CMylpZihhPT09RHIpe2lmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2IiKSxudWxsPT09cylyZXR1cm4gbnVsbDtpZihvPT09RjMpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PUwzKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUO2lmKG89PT1OMylyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVDtpZihvPT09QjMpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFR9ZWxzZXtpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLG51bGw9PT1zKXJldHVybiBudWxsO2lmKG89PT1GMylyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO2lmKG89PT1MMylyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZihvPT09TjMpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYobz09PUIzKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUfWlmKG89PT1PJHx8bz09PUYkfHxvPT09TCR8fG89PT1OJCl7aWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiksbnVsbD09PXMpcmV0dXJuIG51bGw7aWYobz09PU8kKXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PUYkKXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYobz09PUwkKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKG89PT1OJClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31pZihvPT09R0FlKXJldHVybiBzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpLG51bGwhPT1zP3MuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDpudWxsO2lmKG89PT1CJHx8bz09PVYkKXtpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksbnVsbD09PXMpcmV0dXJuIG51bGw7aWYobz09PUIkKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0I4X0VUQzI6cy5DT01QUkVTU0VEX1JHQjhfRVRDMjtpZihvPT09ViQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOnMuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31pZihvPT09SCR8fG89PT16JHx8bz09PVUkfHxvPT09aiR8fG89PT1HJHx8bz09PVckfHxvPT09cSR8fG89PT1ZJHx8bz09PVgkfHxvPT09USR8fG89PT1aJHx8bz09PUskfHxvPT09SiR8fG89PT0kJCl7aWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxudWxsPT09cylyZXR1cm4gbnVsbDtpZihvPT09SCQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7aWYobz09PXokKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKG89PT1VJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjtpZihvPT09aiQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7aWYobz09PUckKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKG89PT1XJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjtpZihvPT09cSQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7aWYobz09PVkkKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKG89PT1YJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSO2lmKG89PT1RJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO2lmKG89PT1aJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKG89PT1LJClyZXR1cm4gYT09PURyP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI7aWYobz09PUokKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtpZihvPT09JCQpcmV0dXJuIGE9PT1Ecj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWlmKG89PT1lZWUpe2lmKHM9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxudWxsPT09cylyZXR1cm4gbnVsbDtpZihvPT09ZWVlKXJldHVybiBhPT09RHI/cy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6cy5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9cmV0dXJuIG89PT1uXz9pPzM0MDQyOihzPXQuZ2V0KCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksbnVsbCE9PXM/cy5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDpudWxsKTp2b2lkIDB9fX12YXIgRkk9Y2xhc3MgZXh0ZW5kcyBvYXtjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMuY2FtZXJhcz10fX07RkkucHJvdG90eXBlLmlzQXJyYXlDYW1lcmE9ITA7dmFyIE1tPWNsYXNzIGV4dGVuZHMgeml7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iR3JvdXAifX07TW0ucHJvdG90eXBlLmlzR3JvdXA9ITA7dmFyIElGZT17dHlwZToibW92ZSJ9LEN4PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fdGFyZ2V0UmF5PW51bGwsdGhpcy5fZ3JpcD1udWxsLHRoaXMuX2hhbmQ9bnVsbH1nZXRIYW5kU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kPW5ldyBNbSx0aGlzLl9oYW5kLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5faGFuZC52aXNpYmxlPSExLHRoaXMuX2hhbmQuam9pbnRzPXt9LHRoaXMuX2hhbmQuaW5wdXRTdGF0ZT17cGluY2hpbmc6ITF9KSx0aGlzLl9oYW5kfWdldFRhcmdldFJheVNwYWNlKCl7cmV0dXJuIG51bGw9PT10aGlzLl90YXJnZXRSYXkmJih0aGlzLl90YXJnZXRSYXk9bmV3IE1tLHRoaXMuX3RhcmdldFJheS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExLHRoaXMuX3RhcmdldFJheS5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl90YXJnZXRSYXkubGluZWFyVmVsb2NpdHk9bmV3ICQsdGhpcy5fdGFyZ2V0UmF5Lmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl90YXJnZXRSYXkuYW5ndWxhclZlbG9jaXR5PW5ldyAkKSx0aGlzLl90YXJnZXRSYXl9Z2V0R3JpcFNwYWNlKCl7cmV0dXJuIG51bGw9PT10aGlzLl9ncmlwJiYodGhpcy5fZ3JpcD1uZXcgTW0sdGhpcy5fZ3JpcC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2dyaXAudmlzaWJsZT0hMSx0aGlzLl9ncmlwLmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAubGluZWFyVmVsb2NpdHk9bmV3ICQsdGhpcy5fZ3JpcC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5hbmd1bGFyVmVsb2NpdHk9bmV3ICQpLHRoaXMuX2dyaXB9ZGlzcGF0Y2hFdmVudCh0KXtyZXR1cm4gbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmdGhpcy5fdGFyZ2V0UmF5LmRpc3BhdGNoRXZlbnQodCksbnVsbCE9PXRoaXMuX2dyaXAmJnRoaXMuX2dyaXAuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5faGFuZCYmdGhpcy5faGFuZC5kaXNwYXRjaEV2ZW50KHQpLHRoaXN9ZGlzY29ubmVjdCh0KXtyZXR1cm4gdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6dH0pLG51bGwhPT10aGlzLl90YXJnZXRSYXkmJih0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwLnZpc2libGU9ITEpLG51bGwhPT10aGlzLl9oYW5kJiYodGhpcy5faGFuZC52aXNpYmxlPSExKSx0aGlzfXVwZGF0ZSh0LGUsaSl7bGV0IHI9bnVsbCxvPW51bGwsYT1udWxsLHM9dGhpcy5fdGFyZ2V0UmF5LGw9dGhpcy5fZ3JpcCxjPXRoaXMuX2hhbmQ7aWYodCYmInZpc2libGUtYmx1cnJlZCIhPT1lLnNlc3Npb24udmlzaWJpbGl0eVN0YXRlKWlmKG51bGwhPT1zJiYocj1lLmdldFBvc2UodC50YXJnZXRSYXlTcGFjZSxpKSxudWxsIT09ciYmKHMubWF0cml4LmZyb21BcnJheShyLnRyYW5zZm9ybS5tYXRyaXgpLHMubWF0cml4LmRlY29tcG9zZShzLnBvc2l0aW9uLHMucm90YXRpb24scy5zY2FsZSksci5saW5lYXJWZWxvY2l0eT8ocy5oYXNMaW5lYXJWZWxvY2l0eT0hMCxzLmxpbmVhclZlbG9jaXR5LmNvcHkoci5saW5lYXJWZWxvY2l0eSkpOnMuaGFzTGluZWFyVmVsb2NpdHk9ITEsci5hbmd1bGFyVmVsb2NpdHk/KHMuaGFzQW5ndWxhclZlbG9jaXR5PSEwLHMuYW5ndWxhclZlbG9jaXR5LmNvcHkoci5hbmd1bGFyVmVsb2NpdHkpKTpzLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoSUZlKSkpLGMmJnQuaGFuZCl7YT0hMDtmb3IobGV0IHkgb2YgdC5oYW5kLnZhbHVlcygpKXtsZXQgTT1lLmdldEpvaW50UG9zZSh5LGkpO2lmKHZvaWQgMD09PWMuam9pbnRzW3kuam9pbnROYW1lXSl7bGV0IHg9bmV3IE1tO3gubWF0cml4QXV0b1VwZGF0ZT0hMSx4LnZpc2libGU9ITEsYy5qb2ludHNbeS5qb2ludE5hbWVdPXgsYy5hZGQoeCl9bGV0IHY9Yy5qb2ludHNbeS5qb2ludE5hbWVdO251bGwhPT1NJiYodi5tYXRyaXguZnJvbUFycmF5KE0udHJhbnNmb3JtLm1hdHJpeCksdi5tYXRyaXguZGVjb21wb3NlKHYucG9zaXRpb24sdi5yb3RhdGlvbix2LnNjYWxlKSx2LmpvaW50UmFkaXVzPU0ucmFkaXVzKSx2LnZpc2libGU9bnVsbCE9PU19bGV0IHA9Yy5qb2ludHNbImluZGV4LWZpbmdlci10aXAiXS5wb3NpdGlvbi5kaXN0YW5jZVRvKGMuam9pbnRzWyJ0aHVtYi10aXAiXS5wb3NpdGlvbiksZj0uMDIsbT0uMDA1O2MuaW5wdXRTdGF0ZS5waW5jaGluZyYmcD5mK20/KGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohYy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZwPD1mLW0mJihjLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIG51bGwhPT1sJiZ0LmdyaXBTcGFjZSYmKG89ZS5nZXRQb3NlKHQuZ3JpcFNwYWNlLGkpLG51bGwhPT1vJiYobC5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksbC5tYXRyaXguZGVjb21wb3NlKGwucG9zaXRpb24sbC5yb3RhdGlvbixsLnNjYWxlKSxvLmxpbmVhclZlbG9jaXR5PyhsLmhhc0xpbmVhclZlbG9jaXR5PSEwLGwubGluZWFyVmVsb2NpdHkuY29weShvLmxpbmVhclZlbG9jaXR5KSk6bC5oYXNMaW5lYXJWZWxvY2l0eT0hMSxvLmFuZ3VsYXJWZWxvY2l0eT8obC5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsbC5hbmd1bGFyVmVsb2NpdHkuY29weShvLmFuZ3VsYXJWZWxvY2l0eSkpOmwuaGFzQW5ndWxhclZlbG9jaXR5PSExKSk7cmV0dXJuIG51bGwhPT1zJiYocy52aXNpYmxlPW51bGwhPT1yKSxudWxsIT09bCYmKGwudmlzaWJsZT1udWxsIT09byksbnVsbCE9PWMmJihjLnZpc2libGU9bnVsbCE9PWEpLHRoaXN9fSxPeD1jbGFzcyBleHRlbmRzIHVve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxhLHMsbCxjLGQpe2lmKChkPXZvaWQgMCE9PWQ/ZDp3bSkhPT13bSYmZCE9PWFfKXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTt2b2lkIDA9PT1pJiZkPT09d20mJihpPUV4KSx2b2lkIDA9PT1pJiZkPT09YV8mJihpPW5fKSxzdXBlcihudWxsLHIsbyxhLHMsbCxkLGksYyksdGhpcy5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6ZX0sdGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09cz9zOmJvLHRoaXMubWluRmlsdGVyPXZvaWQgMCE9PWw/bDpibyx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07T3gucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO3ZhciBrQj1jbGFzcyBleHRlbmRzIFVke2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKTtsZXQgaT10aGlzLHI9bnVsbCxvPTEsYT1udWxsLHM9ImxvY2FsLWZsb29yIixsPXQuZXh0ZW5zaW9ucy5oYXMoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpLGM9bnVsbCxkPW51bGwsdT1udWxsLHA9bnVsbCxmPSExLG09bnVsbCx5PWUuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSxNPW51bGwsdj1udWxsLHg9W10sUj1uZXcgTWFwLEE9bmV3IG9hO0EubGF5ZXJzLmVuYWJsZSgxKSxBLnZpZXdwb3J0PW5ldyBLaTtsZXQgSD1uZXcgb2E7SC5sYXllcnMuZW5hYmxlKDIpLEgudmlld3BvcnQ9bmV3IEtpO2xldCB0ZT1bQSxIXSxLPW5ldyBGSTtLLmxheWVycy5lbmFibGUoMSksSy5sYXllcnMuZW5hYmxlKDIpO2xldCBDZT1udWxsLFplPW51bGw7ZnVuY3Rpb24gSWUoTWUpe2xldCBOZT1SLmdldChNZS5pbnB1dFNvdXJjZSk7TmUmJk5lLmRpc3BhdGNoRXZlbnQoe3R5cGU6TWUudHlwZSxkYXRhOk1lLmlucHV0U291cmNlfSl9ZnVuY3Rpb24gSSgpe1IuZm9yRWFjaChmdW5jdGlvbihNZSxOZSl7TWUuZGlzY29ubmVjdChOZSl9KSxSLmNsZWFyKCksQ2U9bnVsbCxaZT1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KE0pLHA9bnVsbCx1PW51bGwsZD1udWxsLHI9bnVsbCx2PW51bGwsR2Uuc3RvcCgpLGkuaXNQcmVzZW50aW5nPSExLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX1mdW5jdGlvbiByZShNZSl7bGV0IE5lPXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgY3Q9MDtjdDx4Lmxlbmd0aDtjdCsrKVIuc2V0KE5lW2N0XSx4W2N0XSk7Zm9yKGxldCBjdD0wO2N0PE1lLnJlbW92ZWQubGVuZ3RoO2N0Kyspe2xldCB3dD1NZS5yZW1vdmVkW2N0XSxmdD1SLmdldCh3dCk7ZnQmJihmdC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6d3R9KSxSLmRlbGV0ZSh3dCkpfWZvcihsZXQgY3Q9MDtjdDxNZS5hZGRlZC5sZW5ndGg7Y3QrKyl7bGV0IHd0PU1lLmFkZGVkW2N0XSxmdD1SLmdldCh3dCk7ZnQmJmZ0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNvbm5lY3RlZCIsZGF0YTp3dH0pfX10aGlzLmNhbWVyYUF1dG9VcGRhdGU9ITAsdGhpcy5lbmFibGVkPSExLHRoaXMuaXNQcmVzZW50aW5nPSExLHRoaXMuZ2V0Q29udHJvbGxlcj1mdW5jdGlvbihNZSl7bGV0IE5lPXhbTWVdO3JldHVybiB2b2lkIDA9PT1OZSYmKE5lPW5ldyBDeCx4W01lXT1OZSksTmUuZ2V0VGFyZ2V0UmF5U3BhY2UoKX0sdGhpcy5nZXRDb250cm9sbGVyR3JpcD1mdW5jdGlvbihNZSl7bGV0IE5lPXhbTWVdO3JldHVybiB2b2lkIDA9PT1OZSYmKE5lPW5ldyBDeCx4W01lXT1OZSksTmUuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbihNZSl7bGV0IE5lPXhbTWVdO3JldHVybiB2b2lkIDA9PT1OZSYmKE5lPW5ldyBDeCx4W01lXT1OZSksTmUuZ2V0SGFuZFNwYWNlKCl9LHRoaXMuc2V0RnJhbWVidWZmZXJTY2FsZUZhY3Rvcj1mdW5jdGlvbihNZSl7bz1NZSwhMD09PWkuaXNQcmVzZW50aW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSBmcmFtZWJ1ZmZlciBzY2FsZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLnNldFJlZmVyZW5jZVNwYWNlVHlwZT1mdW5jdGlvbihNZSl7cz1NZSwhMD09PWkuaXNQcmVzZW50aW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSByZWZlcmVuY2Ugc3BhY2UgdHlwZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLmdldFJlZmVyZW5jZVNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LHRoaXMuZ2V0QmFzZUxheWVyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT11P3U6cH0sdGhpcy5nZXRCaW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGR9LHRoaXMuZ2V0RnJhbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbX0sdGhpcy5nZXRTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHRoaXMuc2V0U2Vzc2lvbj1hc3luYyBmdW5jdGlvbihNZSl7aWYocj1NZSxudWxsIT09cil7aWYoTT10LmdldFJlbmRlclRhcmdldCgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixJZSksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsSWUpLHIuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZW5kIixJZSksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixJZSksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLEllKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVlbmQiLEllKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIsSSksci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLHJlKSwhMCE9PXkueHJDb21wYXRpYmxlJiZhd2FpdCBlLm1ha2VYUkNvbXBhdGlibGUoKSx2b2lkIDA9PT1yLnJlbmRlclN0YXRlLmxheWVyc3x8ITE9PT10LmNhcGFiaWxpdGllcy5pc1dlYkdMMilwPW5ldyBYUldlYkdMTGF5ZXIocixlLHthbnRpYWxpYXM6dm9pZCAwIT09ci5yZW5kZXJTdGF0ZS5sYXllcnN8fHkuYW50aWFsaWFzLGFscGhhOnkuYWxwaGEsZGVwdGg6eS5kZXB0aCxzdGVuY2lsOnkuc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOm99KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtiYXNlTGF5ZXI6cH0pLHY9bmV3IFFhKHAuZnJhbWVidWZmZXJXaWR0aCxwLmZyYW1lYnVmZmVySGVpZ2h0LHtmb3JtYXQ6YmEsdHlwZTp2cCxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSk7ZWxzZXtmPXkuYW50aWFsaWFzO2xldCBOZT1udWxsLGN0PW51bGwsd3Q9bnVsbDt5LmRlcHRoJiYod3Q9eS5zdGVuY2lsPzM1MDU2OjMzMTkwLE5lPXkuc3RlbmNpbD9hXzp3bSxjdD15LnN0ZW5jaWw/bl86RXgpO2xldCBmdD17Y29sb3JGb3JtYXQ6dC5vdXRwdXRFbmNvZGluZz09PURyPzM1OTA3OjMyODU2LGRlcHRoRm9ybWF0Ond0LHNjYWxlRmFjdG9yOm99O2Q9bmV3IFhSV2ViR0xCaW5kaW5nKHIsZSksdT1kLmNyZWF0ZVByb2plY3Rpb25MYXllcihmdCksci51cGRhdGVSZW5kZXJTdGF0ZSh7bGF5ZXJzOlt1XX0pLHY9Zj9uZXcgSXgodS50ZXh0dXJlV2lkdGgsdS50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6YmEsdHlwZTp2cCxkZXB0aFRleHR1cmU6bmV3IE94KHUudGV4dHVyZVdpZHRoLHUudGV4dHVyZUhlaWdodCxjdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxOZSksc3RlbmNpbEJ1ZmZlcjp5LnN0ZW5jaWwsaWdub3JlRGVwdGg6dS5pZ25vcmVEZXB0aFZhbHVlcyx1c2VSZW5kZXJUb1RleHR1cmU6bCxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSk6bmV3IFFhKHUudGV4dHVyZVdpZHRoLHUudGV4dHVyZUhlaWdodCx7Zm9ybWF0OmJhLHR5cGU6dnAsZGVwdGhUZXh0dXJlOm5ldyBPeCh1LnRleHR1cmVXaWR0aCx1LnRleHR1cmVIZWlnaHQsY3Qsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsTmUpLHN0ZW5jaWxCdWZmZXI6eS5zdGVuY2lsLGlnbm9yZURlcHRoOnUuaWdub3JlRGVwdGhWYWx1ZXMsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pfXYuaXNYUlJlbmRlclRhcmdldD0hMCx0aGlzLnNldEZvdmVhdGlvbigxKSxhPWF3YWl0IHIucmVxdWVzdFJlZmVyZW5jZVNwYWNlKHMpLEdlLnNldENvbnRleHQociksR2Uuc3RhcnQoKSxpLmlzUHJlc2VudGluZz0hMCxpLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25zdGFydCJ9KX19O2xldCBjZT1uZXcgJCxmZT1uZXcgJDtmdW5jdGlvbiBuZShNZSxOZSl7bnVsbD09PU5lP01lLm1hdHJpeFdvcmxkLmNvcHkoTWUubWF0cml4KTpNZS5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKE5lLm1hdHJpeFdvcmxkLE1lLm1hdHJpeCksTWUubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoTWUubWF0cml4V29ybGQpLmludmVydCgpfXRoaXMudXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKE1lKXtpZihudWxsPT09cilyZXR1cm47Sy5uZWFyPUgubmVhcj1BLm5lYXI9TWUubmVhcixLLmZhcj1ILmZhcj1BLmZhcj1NZS5mYXIsKENlIT09Sy5uZWFyfHxaZSE9PUsuZmFyKSYmKHIudXBkYXRlUmVuZGVyU3RhdGUoe2RlcHRoTmVhcjpLLm5lYXIsZGVwdGhGYXI6Sy5mYXJ9KSxDZT1LLm5lYXIsWmU9Sy5mYXIpO2xldCBOZT1NZS5wYXJlbnQsY3Q9Sy5jYW1lcmFzO25lKEssTmUpO2ZvcihsZXQgZnQ9MDtmdDxjdC5sZW5ndGg7ZnQrKyluZShjdFtmdF0sTmUpO0subWF0cml4V29ybGQuZGVjb21wb3NlKEsucG9zaXRpb24sSy5xdWF0ZXJuaW9uLEsuc2NhbGUpLE1lLnBvc2l0aW9uLmNvcHkoSy5wb3NpdGlvbiksTWUucXVhdGVybmlvbi5jb3B5KEsucXVhdGVybmlvbiksTWUuc2NhbGUuY29weShLLnNjYWxlKSxNZS5tYXRyaXguY29weShLLm1hdHJpeCksTWUubWF0cml4V29ybGQuY29weShLLm1hdHJpeFdvcmxkKTtsZXQgd3Q9TWUuY2hpbGRyZW47Zm9yKGxldCBmdD0wLE9lPXd0Lmxlbmd0aDtmdDxPZTtmdCsrKXd0W2Z0XS51cGRhdGVNYXRyaXhXb3JsZCghMCk7Mj09PWN0Lmxlbmd0aD9mdW5jdGlvbihNZSxOZSxjdCl7Y2Uuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE5lLm1hdHJpeFdvcmxkKSxmZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oY3QubWF0cml4V29ybGQpO2xldCB3dD1jZS5kaXN0YW5jZVRvKGZlKSxmdD1OZS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLE9lPWN0LnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsQW49ZnRbMTRdLyhmdFsxMF0tMSksU3Q9ZnRbMTRdLyhmdFsxMF0rMSkscm49KGZ0WzldKzEpL2Z0WzVdLHZlPShmdFs5XS0xKS9mdFs1XSxodD0oZnRbOF0tMSkvZnRbMF0sbXQ9KE9lWzhdKzEpL09lWzBdLG9lPUFuKmh0LHN0PUFuKm10LFhlPXd0LygtaHQrbXQpLF90PVhlKi1odDtOZS5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoTWUucG9zaXRpb24sTWUucXVhdGVybmlvbixNZS5zY2FsZSksTWUudHJhbnNsYXRlWChfdCksTWUudHJhbnNsYXRlWihYZSksTWUubWF0cml4V29ybGQuY29tcG9zZShNZS5wb3NpdGlvbixNZS5xdWF0ZXJuaW9uLE1lLnNjYWxlKSxNZS5tYXRyaXhXb3JsZEludmVyc2UuY29weShNZS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IHB0PUFuK1hlLG9uPVN0K1hlO01lLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKG9lLV90LHN0Kyh3dC1fdCkscm4qU3Qvb24qcHQsdmUqU3Qvb24qcHQscHQsb24pfShLLEEsSCk6Sy5wcm9qZWN0aW9uTWF0cml4LmNvcHkoQS5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gS30sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXU/dS5maXhlZEZvdmVhdGlvbjpudWxsIT09cD9wLmZpeGVkRm92ZWF0aW9uOnZvaWQgMH0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24oTWUpe251bGwhPT11JiYodS5maXhlZEZvdmVhdGlvbj1NZSksbnVsbCE9PXAmJnZvaWQgMCE9PXAuZml4ZWRGb3ZlYXRpb24mJihwLmZpeGVkRm92ZWF0aW9uPU1lKX07bGV0IGRlPW51bGwsR2U9bmV3IGh0ZTtHZS5zZXRBbmltYXRpb25Mb29wKGZ1bmN0aW9uKE1lLE5lKXtpZihjPU5lLmdldFZpZXdlclBvc2UoYSksbT1OZSxudWxsIT09Yyl7bGV0IHd0PWMudmlld3M7bnVsbCE9PXAmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKHYscC5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQodikpO2xldCBmdD0hMTt3dC5sZW5ndGghPT1LLmNhbWVyYXMubGVuZ3RoJiYoSy5jYW1lcmFzLmxlbmd0aD0wLGZ0PSEwKTtmb3IobGV0IE9lPTA7T2U8d3QubGVuZ3RoO09lKyspe2xldCBBbj13dFtPZV0sU3Q9bnVsbDtpZihudWxsIT09cClTdD1wLmdldFZpZXdwb3J0KEFuKTtlbHNle2xldCB2ZT1kLmdldFZpZXdTdWJJbWFnZSh1LEFuKTtTdD12ZS52aWV3cG9ydCwwPT09T2UmJih0LnNldFJlbmRlclRhcmdldFRleHR1cmVzKHYsdmUuY29sb3JUZXh0dXJlLHUuaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOnZlLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KHYpKX1sZXQgcm49dGVbT2VdO3JuLm1hdHJpeC5mcm9tQXJyYXkoQW4udHJhbnNmb3JtLm1hdHJpeCkscm4ucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoQW4ucHJvamVjdGlvbk1hdHJpeCkscm4udmlld3BvcnQuc2V0KFN0LngsU3QueSxTdC53aWR0aCxTdC5oZWlnaHQpLDA9PT1PZSYmSy5tYXRyaXguY29weShybi5tYXRyaXgpLCEwPT09ZnQmJksuY2FtZXJhcy5wdXNoKHJuKX19bGV0IGN0PXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgd3Q9MDt3dDx4Lmxlbmd0aDt3dCsrKXhbd3RdLnVwZGF0ZShjdFt3dF0sTmUsYSk7ZGUmJmRlKE1lLE5lKSxtPW51bGx9KSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oTWUpe2RlPU1lfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gQUZlKG4pe2Z1bmN0aW9uIGkodix4KXt2Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHguY29sb3ImJnYuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHguZW1pc3NpdmUmJnYuZW1pc3NpdmUudmFsdWUuY29weSh4LmVtaXNzaXZlKS5tdWx0aXBseVNjYWxhcih4LmVtaXNzaXZlSW50ZW5zaXR5KSx4Lm1hcCYmKHYubWFwLnZhbHVlPXgubWFwKSx4LmFscGhhTWFwJiYodi5hbHBoYU1hcC52YWx1ZT14LmFscGhhTWFwKSx4LnNwZWN1bGFyTWFwJiYodi5zcGVjdWxhck1hcC52YWx1ZT14LnNwZWN1bGFyTWFwKSx4LmFscGhhVGVzdD4wJiYodi5hbHBoYVRlc3QudmFsdWU9eC5hbHBoYVRlc3QpO2xldCBBLEgsUj1uLmdldCh4KS5lbnZNYXA7UiYmKHYuZW52TWFwLnZhbHVlPVIsdi5mbGlwRW52TWFwLnZhbHVlPVIuaXNDdWJlVGV4dHVyZSYmITE9PT1SLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLHYucmVmbGVjdGl2aXR5LnZhbHVlPXgucmVmbGVjdGl2aXR5LHYuaW9yLnZhbHVlPXguaW9yLHYucmVmcmFjdGlvblJhdGlvLnZhbHVlPXgucmVmcmFjdGlvblJhdGlvKSx4LmxpZ2h0TWFwJiYodi5saWdodE1hcC52YWx1ZT14LmxpZ2h0TWFwLHYubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9eC5saWdodE1hcEludGVuc2l0eSkseC5hb01hcCYmKHYuYW9NYXAudmFsdWU9eC5hb01hcCx2LmFvTWFwSW50ZW5zaXR5LnZhbHVlPXguYW9NYXBJbnRlbnNpdHkpLHgubWFwP0E9eC5tYXA6eC5zcGVjdWxhck1hcD9BPXguc3BlY3VsYXJNYXA6eC5kaXNwbGFjZW1lbnRNYXA/QT14LmRpc3BsYWNlbWVudE1hcDp4Lm5vcm1hbE1hcD9BPXgubm9ybWFsTWFwOnguYnVtcE1hcD9BPXguYnVtcE1hcDp4LnJvdWdobmVzc01hcD9BPXgucm91Z2huZXNzTWFwOngubWV0YWxuZXNzTWFwP0E9eC5tZXRhbG5lc3NNYXA6eC5hbHBoYU1hcD9BPXguYWxwaGFNYXA6eC5lbWlzc2l2ZU1hcD9BPXguZW1pc3NpdmVNYXA6eC5jbGVhcmNvYXRNYXA/QT14LmNsZWFyY29hdE1hcDp4LmNsZWFyY29hdE5vcm1hbE1hcD9BPXguY2xlYXJjb2F0Tm9ybWFsTWFwOnguY2xlYXJjb2F0Um91Z2huZXNzTWFwP0E9eC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA6eC5zcGVjdWxhckludGVuc2l0eU1hcD9BPXguc3BlY3VsYXJJbnRlbnNpdHlNYXA6eC5zcGVjdWxhckNvbG9yTWFwP0E9eC5zcGVjdWxhckNvbG9yTWFwOngudHJhbnNtaXNzaW9uTWFwP0E9eC50cmFuc21pc3Npb25NYXA6eC50aGlja25lc3NNYXA/QT14LnRoaWNrbmVzc01hcDp4LnNoZWVuQ29sb3JNYXA/QT14LnNoZWVuQ29sb3JNYXA6eC5zaGVlblJvdWdobmVzc01hcCYmKEE9eC5zaGVlblJvdWdobmVzc01hcCksdm9pZCAwIT09QSYmKEEuaXNXZWJHTFJlbmRlclRhcmdldCYmKEE9QS50ZXh0dXJlKSwhMD09PUEubWF0cml4QXV0b1VwZGF0ZSYmQS51cGRhdGVNYXRyaXgoKSx2LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoQS5tYXRyaXgpKSx4LmFvTWFwP0g9eC5hb01hcDp4LmxpZ2h0TWFwJiYoSD14LmxpZ2h0TWFwKSx2b2lkIDAhPT1IJiYoSC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoSD1ILnRleHR1cmUpLCEwPT09SC5tYXRyaXhBdXRvVXBkYXRlJiZILnVwZGF0ZU1hdHJpeCgpLHYudXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoSC5tYXRyaXgpKX1mdW5jdGlvbiB1KHYseCl7di5yb3VnaG5lc3MudmFsdWU9eC5yb3VnaG5lc3Msdi5tZXRhbG5lc3MudmFsdWU9eC5tZXRhbG5lc3MseC5yb3VnaG5lc3NNYXAmJih2LnJvdWdobmVzc01hcC52YWx1ZT14LnJvdWdobmVzc01hcCkseC5tZXRhbG5lc3NNYXAmJih2Lm1ldGFsbmVzc01hcC52YWx1ZT14Lm1ldGFsbmVzc01hcCkseC5lbWlzc2l2ZU1hcCYmKHYuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYodi5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx2LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT15byYmKHYuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYodi5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAsdi5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PXlvJiZ2Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHYuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx2LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSxuLmdldCh4KS5lbnZNYXAmJih2LmVudk1hcEludGVuc2l0eS52YWx1ZT14LmVudk1hcEludGVuc2l0eSl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3JtczpmdW5jdGlvbih2LHgpe3YuZm9nQ29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx4LmlzRm9nPyh2LmZvZ05lYXIudmFsdWU9eC5uZWFyLHYuZm9nRmFyLnZhbHVlPXguZmFyKTp4LmlzRm9nRXhwMiYmKHYuZm9nRGVuc2l0eS52YWx1ZT14LmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbih2LHgsUixBLEgpe3guaXNNZXNoQmFzaWNNYXRlcmlhbD9pKHYseCk6eC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGkodix4KSxmdW5jdGlvbih2LHgpe3guZW1pc3NpdmVNYXAmJih2LmVtaXNzaXZlTWFwLnZhbHVlPXguZW1pc3NpdmVNYXApfSh2LHgpKTp4LmlzTWVzaFRvb25NYXRlcmlhbD8oaSh2LHgpLGZ1bmN0aW9uKHYseCl7eC5ncmFkaWVudE1hcCYmKHYuZ3JhZGllbnRNYXAudmFsdWU9eC5ncmFkaWVudE1hcCkseC5lbWlzc2l2ZU1hcCYmKHYuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYodi5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx2LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT15byYmKHYuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYodi5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAsdi5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PXlvJiZ2Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHYuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx2LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX0odix4KSk6eC5pc01lc2hQaG9uZ01hdGVyaWFsPyhpKHYseCksZnVuY3Rpb24odix4KXt2LnNwZWN1bGFyLnZhbHVlLmNvcHkoeC5zcGVjdWxhciksdi5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgoeC5zaGluaW5lc3MsMWUtNCkseC5lbWlzc2l2ZU1hcCYmKHYuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYodi5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx2LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT15byYmKHYuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYodi5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAsdi5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PXlvJiZ2Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHYuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx2LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX0odix4KSk6eC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPyhpKHYseCkseC5pc01lc2hQaHlzaWNhbE1hdGVyaWFsP2Z1bmN0aW9uKHYseCxSKXt1KHYseCksdi5pb3IudmFsdWU9eC5pb3IseC5zaGVlbj4wJiYodi5zaGVlbkNvbG9yLnZhbHVlLmNvcHkoeC5zaGVlbkNvbG9yKS5tdWx0aXBseVNjYWxhcih4LnNoZWVuKSx2LnNoZWVuUm91Z2huZXNzLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3MseC5zaGVlbkNvbG9yTWFwJiYodi5zaGVlbkNvbG9yTWFwLnZhbHVlPXguc2hlZW5Db2xvck1hcCkseC5zaGVlblJvdWdobmVzc01hcCYmKHYuc2hlZW5Sb3VnaG5lc3NNYXAudmFsdWU9eC5zaGVlblJvdWdobmVzc01hcCkpLHguY2xlYXJjb2F0PjAmJih2LmNsZWFyY29hdC52YWx1ZT14LmNsZWFyY29hdCx2LmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzcyx4LmNsZWFyY29hdE1hcCYmKHYuY2xlYXJjb2F0TWFwLnZhbHVlPXguY2xlYXJjb2F0TWFwKSx4LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKHYuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwKSx4LmNsZWFyY29hdE5vcm1hbE1hcCYmKHYuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUuY29weSh4LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx2LmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZT14LmNsZWFyY29hdE5vcm1hbE1hcCx4LnNpZGU9PT15byYmdi5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkpLHgudHJhbnNtaXNzaW9uPjAmJih2LnRyYW5zbWlzc2lvbi52YWx1ZT14LnRyYW5zbWlzc2lvbix2LnRyYW5zbWlzc2lvblNhbXBsZXJNYXAudmFsdWU9Ui50ZXh0dXJlLHYudHJhbnNtaXNzaW9uU2FtcGxlclNpemUudmFsdWUuc2V0KFIud2lkdGgsUi5oZWlnaHQpLHgudHJhbnNtaXNzaW9uTWFwJiYodi50cmFuc21pc3Npb25NYXAudmFsdWU9eC50cmFuc21pc3Npb25NYXApLHYudGhpY2tuZXNzLnZhbHVlPXgudGhpY2tuZXNzLHgudGhpY2tuZXNzTWFwJiYodi50aGlja25lc3NNYXAudmFsdWU9eC50aGlja25lc3NNYXApLHYuYXR0ZW51YXRpb25EaXN0YW5jZS52YWx1ZT14LmF0dGVudWF0aW9uRGlzdGFuY2Usdi5hdHRlbnVhdGlvbkNvbG9yLnZhbHVlLmNvcHkoeC5hdHRlbnVhdGlvbkNvbG9yKSksdi5zcGVjdWxhckludGVuc2l0eS52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5LHYuc3BlY3VsYXJDb2xvci52YWx1ZS5jb3B5KHguc3BlY3VsYXJDb2xvcikseC5zcGVjdWxhckludGVuc2l0eU1hcCYmKHYuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eU1hcCkseC5zcGVjdWxhckNvbG9yTWFwJiYodi5zcGVjdWxhckNvbG9yTWFwLnZhbHVlPXguc3BlY3VsYXJDb2xvck1hcCl9KHYseCxIKTp1KHYseCkpOnguaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KGkodix4KSxmdW5jdGlvbih2LHgpe3gubWF0Y2FwJiYodi5tYXRjYXAudmFsdWU9eC5tYXRjYXApLHguYnVtcE1hcCYmKHYuYnVtcE1hcC52YWx1ZT14LmJ1bXBNYXAsdi5idW1wU2NhbGUudmFsdWU9eC5idW1wU2NhbGUseC5zaWRlPT09eW8mJih2LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx4Lm5vcm1hbE1hcCYmKHYubm9ybWFsTWFwLnZhbHVlPXgubm9ybWFsTWFwLHYubm9ybWFsU2NhbGUudmFsdWUuY29weSh4Lm5vcm1hbFNjYWxlKSx4LnNpZGU9PT15byYmdi5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseC5kaXNwbGFjZW1lbnRNYXAmJih2LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx2LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUsdi5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50Qmlhcyl9KHYseCkpOnguaXNNZXNoRGVwdGhNYXRlcmlhbD8oaSh2LHgpLGZ1bmN0aW9uKHYseCl7eC5kaXNwbGFjZW1lbnRNYXAmJih2LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx2LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUsdi5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50Qmlhcyl9KHYseCkpOnguaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oaSh2LHgpLGZ1bmN0aW9uKHYseCl7eC5kaXNwbGFjZW1lbnRNYXAmJih2LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx2LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUsdi5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50Qmlhcyksdi5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KHgucmVmZXJlbmNlUG9zaXRpb24pLHYubmVhckRpc3RhbmNlLnZhbHVlPXgubmVhckRpc3RhbmNlLHYuZmFyRGlzdGFuY2UudmFsdWU9eC5mYXJEaXN0YW5jZX0odix4KSk6eC5pc01lc2hOb3JtYWxNYXRlcmlhbD8oaSh2LHgpLGZ1bmN0aW9uKHYseCl7eC5idW1wTWFwJiYodi5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx2LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT15byYmKHYuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYodi5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAsdi5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PXlvJiZ2Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHYuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx2LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX0odix4KSk6eC5pc0xpbmVCYXNpY01hdGVyaWFsPyhmdW5jdGlvbih2LHgpe3YuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHYub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHl9KHYseCkseC5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmZnVuY3Rpb24odix4KXt2LmRhc2hTaXplLnZhbHVlPXguZGFzaFNpemUsdi50b3RhbFNpemUudmFsdWU9eC5kYXNoU2l6ZSt4LmdhcFNpemUsdi5zY2FsZS52YWx1ZT14LnNjYWxlfSh2LHgpKTp4LmlzUG9pbnRzTWF0ZXJpYWw/ZnVuY3Rpb24odix4LFIsQSl7bGV0IEg7di5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvciksdi5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx2LnNpemUudmFsdWU9eC5zaXplKlIsdi5zY2FsZS52YWx1ZT0uNSpBLHgubWFwJiYodi5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih2LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguYWxwaGFUZXN0PjAmJih2LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCkseC5tYXA/SD14Lm1hcDp4LmFscGhhTWFwJiYoSD14LmFscGhhTWFwKSx2b2lkIDAhPT1IJiYoITA9PT1ILm1hdHJpeEF1dG9VcGRhdGUmJkgudXBkYXRlTWF0cml4KCksdi51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KEgubWF0cml4KSl9KHYseCxSLEEpOnguaXNTcHJpdGVNYXRlcmlhbD9mdW5jdGlvbih2LHgpe2xldCBSO3YuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHYub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHksdi5yb3RhdGlvbi52YWx1ZT14LnJvdGF0aW9uLHgubWFwJiYodi5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih2LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguYWxwaGFUZXN0PjAmJih2LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCkseC5tYXA/Uj14Lm1hcDp4LmFscGhhTWFwJiYoUj14LmFscGhhTWFwKSx2b2lkIDAhPT1SJiYoITA9PT1SLm1hdHJpeEF1dG9VcGRhdGUmJlIudXBkYXRlTWF0cml4KCksdi51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFIubWF0cml4KSl9KHYseCk6eC5pc1NoYWRvd01hdGVyaWFsPyh2LmNvbG9yLnZhbHVlLmNvcHkoeC5jb2xvciksdi5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSk6eC5pc1NoYWRlck1hdGVyaWFsJiYoeC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gcWkobj17fSl7bGV0IHQ9dm9pZCAwIT09bi5jYW52YXM/bi5jYW52YXM6ZnVuY3Rpb24oKXtsZXQgbj1EeCgiY2FudmFzIik7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLG59KCksZT12b2lkIDAhPT1uLmNvbnRleHQ/bi5jb250ZXh0Om51bGwsaT12b2lkIDAhPT1uLmFscGhhJiZuLmFscGhhLHI9dm9pZCAwPT09bi5kZXB0aHx8bi5kZXB0aCxvPXZvaWQgMD09PW4uc3RlbmNpbHx8bi5zdGVuY2lsLGE9dm9pZCAwIT09bi5hbnRpYWxpYXMmJm4uYW50aWFsaWFzLHM9dm9pZCAwPT09bi5wcmVtdWx0aXBsaWVkQWxwaGF8fG4ucHJlbXVsdGlwbGllZEFscGhhLGw9dm9pZCAwIT09bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXImJm4ucHJlc2VydmVEcmF3aW5nQnVmZmVyLGM9dm9pZCAwIT09bi5wb3dlclByZWZlcmVuY2U/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLGQ9dm9pZCAwIT09bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0JiZuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsdT1udWxsLHA9bnVsbCxmPVtdLG09W107dGhpcy5kb21FbGVtZW50PXQsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5vdXRwdXRFbmNvZGluZz1NcCx0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9YnAsdGhpcy50b25lTWFwcGluZ0V4cG9zdXJlPTE7bGV0IHk9dGhpcyxNPSExLHY9MCx4PTAsUj1udWxsLEE9LTEsSD1udWxsLHRlPW5ldyBLaSxLPW5ldyBLaSxDZT1udWxsLFplPXQud2lkdGgsSWU9dC5oZWlnaHQsST0xLHJlPW51bGwsY2U9bnVsbCxmZT1uZXcgS2koMCwwLFplLEllKSxfZT1uZXcgS2koMCwwLFplLEllKSxuZT0hMSxkZT1uZXcgY18sdWU9ITEsR2U9ITEsTWU9bnVsbCxOZT1uZXcgTW4sY3Q9bmV3ICQsd3Q9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiBmdCgpe3JldHVybiBudWxsPT09Uj9JOjF9bGV0IFN0LHJuLHZlLGh0LG10LG9lLHN0LFhlLF90LHB0LG9uLHduLGlpLExpLE5pLFosTixIZSx5dCxubixCZSxtbixzbixPZT1lO2Z1bmN0aW9uIEFuKEUseil7Zm9yKGxldCBZPTA7WTxFLmxlbmd0aDtZKyspe2xldCBhZT10LmdldENvbnRleHQoRVtZXSx6KTtpZihudWxsIT09YWUpcmV0dXJuIGFlfXJldHVybiBudWxsfXRyeXtsZXQgRT17YWxwaGE6ITAsZGVwdGg6cixzdGVuY2lsOm8sYW50aWFsaWFzOmEscHJlbXVsdGlwbGllZEFscGhhOnMscHJlc2VydmVEcmF3aW5nQnVmZmVyOmwscG93ZXJQcmVmZXJlbmNlOmMsZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDpkfTtpZigic2V0QXR0cmlidXRlImluIHQmJnQuc2V0QXR0cmlidXRlKCJkYXRhLWVuZ2luZSIsYHRocmVlLmpzIHIke09WfWApLHQuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsSG4sITEpLHQuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHNlLCExKSxudWxsPT09T2Upe2xldCB6PVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZighMD09PXkuaXNXZWJHTDFSZW5kZXJlciYmei5zaGlmdCgpLE9lPUFuKHosRSksbnVsbD09PU9lKXRocm93IEFuKHopP25ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dCB3aXRoIHlvdXIgc2VsZWN0ZWQgYXR0cmlidXRlcy4iKTpuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIil9dm9pZCAwPT09T2UuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0JiYoT2UuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KX1jYXRjaChFKXt0aHJvdyBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK0UubWVzc2FnZSksRX1mdW5jdGlvbiBOdCgpe1N0PW5ldyAkUGUoT2UpLHJuPW5ldyBZUGUoT2UsU3QsbiksU3QuaW5pdChybiksbW49bmV3IERGZShPZSxTdCxybiksdmU9bmV3IEVGZShPZSxTdCxybiksaHQ9bmV3IG5PZShPZSksbXQ9bmV3IGhGZSxvZT1uZXcgVEZlKE9lLFN0LHZlLG10LHJuLG1uLGh0KSxzdD1uZXcgUVBlKHkpLFhlPW5ldyBKUGUoeSksX3Q9bmV3IF9SZShPZSxybiksc249bmV3IFdQZShPZSxTdCxfdCxybikscHQ9bmV3IGVPZShPZSxfdCxodCxzbiksb249bmV3IGFPZShPZSxwdCxfdCxodCkseXQ9bmV3IG9PZShPZSxybixvZSksWj1uZXcgWFBlKG10KSx3bj1uZXcgbUZlKHksc3QsWGUsU3Qscm4sc24sWiksaWk9bmV3IEFGZShtdCksTGk9bmV3IF9GZSxOaT1uZXcgTUZlKFN0LHJuKSxIZT1uZXcgR1BlKHksc3QsdmUsb24saSxzKSxOPW5ldyBTdGUoeSxvbixybiksbm49bmV3IHFQZShPZSxTdCxodCxybiksQmU9bmV3IHRPZShPZSxTdCxodCxybiksaHQucHJvZ3JhbXM9d24ucHJvZ3JhbXMseS5jYXBhYmlsaXRpZXM9cm4seS5leHRlbnNpb25zPVN0LHkucHJvcGVydGllcz1tdCx5LnJlbmRlckxpc3RzPUxpLHkuc2hhZG93TWFwPU4seS5zdGF0ZT12ZSx5LmluZm89aHR9TnQoKTtsZXQgTHQ9bmV3IGtCKHksT2UpO2Z1bmN0aW9uIEhuKEUpe0UucHJldmVudERlZmF1bHQoKSxjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LiIpLE09ITB9ZnVuY3Rpb24gc2UoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSxNPSExO2xldCBFPWh0LmF1dG9SZXNldCx6PU4uZW5hYmxlZCxZPU4uYXV0b1VwZGF0ZSxKPU4ubmVlZHNVcGRhdGUsYWU9Ti50eXBlO050KCksaHQuYXV0b1Jlc2V0PUUsTi5lbmFibGVkPXosTi5hdXRvVXBkYXRlPVksTi5uZWVkc1VwZGF0ZT1KLE4udHlwZT1hZX1mdW5jdGlvbiB0bihFKXtsZXQgej1FLnRhcmdldDt6LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHRuKSxmdW5jdGlvbihFKXsoZnVuY3Rpb24oRSl7bGV0IHo9bXQuZ2V0KEUpLnByb2dyYW1zO3ZvaWQgMCE9PXomJih6LmZvckVhY2goZnVuY3Rpb24oWSl7d24ucmVsZWFzZVByb2dyYW0oWSl9KSxFLmlzU2hhZGVyTWF0ZXJpYWwmJnduLnJlbGVhc2VTaGFkZXJDYWNoZShFKSl9KShFKSxtdC5yZW1vdmUoRSl9KHopfXRoaXMueHI9THQsdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIE9lfSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIE9lLmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBFPVN0LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7RSYmRS5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgRT1TdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0UmJkUucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIEl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihFKXt2b2lkIDAhPT1FJiYoST1FLHRoaXMuc2V0U2l6ZShaZSxJZSwhMSkpfSx0aGlzLmdldFNpemU9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuc2V0KFplLEllKX0sdGhpcy5zZXRTaXplPWZ1bmN0aW9uKEUseixZKXtMdC5pc1ByZXNlbnRpbmc/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDYW4ndCBjaGFuZ2Ugc2l6ZSB3aGlsZSBWUiBkZXZpY2UgaXMgcHJlc2VudGluZy4iKTooWmU9RSxJZT16LHQud2lkdGg9TWF0aC5mbG9vcihFKkkpLHQuaGVpZ2h0PU1hdGguZmxvb3IoeipJKSwhMSE9PVkmJih0LnN0eWxlLndpZHRoPUUrInB4Iix0LnN0eWxlLmhlaWdodD16KyJweCIpLHRoaXMuc2V0Vmlld3BvcnQoMCwwLEUseikpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKEUpe3JldHVybiBFLnNldChaZSpJLEllKkkpLmZsb29yKCl9LHRoaXMuc2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oRSx6LFkpe1plPUUsSWU9eixJPVksdC53aWR0aD1NYXRoLmZsb29yKEUqWSksdC5oZWlnaHQ9TWF0aC5mbG9vcih6KlkpLHRoaXMuc2V0Vmlld3BvcnQoMCwwLEUseil9LHRoaXMuZ2V0Q3VycmVudFZpZXdwb3J0PWZ1bmN0aW9uKEUpe3JldHVybiBFLmNvcHkodGUpfSx0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKEUpe3JldHVybiBFLmNvcHkoZmUpfSx0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKEUseixZLEope0UuaXNWZWN0b3I0P2ZlLnNldChFLngsRS55LEUueixFLncpOmZlLnNldChFLHosWSxKKSx2ZS52aWV3cG9ydCh0ZS5jb3B5KGZlKS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yPWZ1bmN0aW9uKEUpe3JldHVybiBFLmNvcHkoX2UpfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oRSx6LFksSil7RS5pc1ZlY3RvcjQ/X2Uuc2V0KEUueCxFLnksRS56LEUudyk6X2Uuc2V0KEUseixZLEopLHZlLnNjaXNzb3IoSy5jb3B5KF9lKS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBuZX0sdGhpcy5zZXRTY2lzc29yVGVzdD1mdW5jdGlvbihFKXt2ZS5zZXRTY2lzc29yVGVzdChuZT1FKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKEUpe3JlPUV9LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKEUpe2NlPUV9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihFKXtyZXR1cm4gRS5jb3B5KEhlLmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe0hlLnNldENsZWFyQ29sb3IuYXBwbHkoSGUsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIEhlLmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7SGUuc2V0Q2xlYXJBbHBoYS5hcHBseShIZSxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKEUseixZKXtsZXQgSj0wOyh2b2lkIDA9PT1FfHxFKSYmKEp8PTE2Mzg0KSwodm9pZCAwPT09enx8eikmJihKfD0yNTYpLCh2b2lkIDA9PT1ZfHxZKSYmKEp8PTEwMjQpLE9lLmNsZWFyKEopfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsSG4sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHNlLCExKSxMaS5kaXNwb3NlKCksTmkuZGlzcG9zZSgpLG10LmRpc3Bvc2UoKSxzdC5kaXNwb3NlKCksWGUuZGlzcG9zZSgpLG9uLmRpc3Bvc2UoKSxzbi5kaXNwb3NlKCksd24uZGlzcG9zZSgpLEx0LmRpc3Bvc2UoKSxMdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLGhpKSxMdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIix1ciksTWUmJihNZS5kaXNwb3NlKCksTWU9bnVsbCksVW8uc3RvcCgpfSx0aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihFLHosWSxKLGFlLFVlKXtudWxsPT09eiYmKHo9d3QpO2xldCBldD1hZS5pc01lc2gmJmFlLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxxZT1mdW5jdGlvbihFLHosWSxKLGFlKXshMCE9PXouaXNTY2VuZSYmKHo9d3QpLG9lLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFVlPXouZm9nLHFlPW51bGw9PT1SP3kub3V0cHV0RW5jb2Rpbmc6ITA9PT1SLmlzWFJSZW5kZXJUYXJnZXQ/Ui50ZXh0dXJlLmVuY29kaW5nOk1wLHJ0PShKLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/WGU6c3QpLmdldChKLmVudk1hcHx8KEouaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD96LmVudmlyb25tZW50Om51bGwpKSxkdD0hMD09PUoudmVydGV4Q29sb3JzJiYhIVkuYXR0cmlidXRlcy5jb2xvciYmND09PVkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSxFdD0hIUoubm9ybWFsTWFwJiYhIVkuYXR0cmlidXRlcy50YW5nZW50LEF0PSEhWS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbG49ISFZLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsWWk9WS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/WS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAseGk9Si50b25lTWFwcGVkP3kudG9uZU1hcHBpbmc6YnAsZm49bXQuZ2V0KEopLFBuPXAuc3RhdGUubGlnaHRzOyEwIT09dWV8fCEwIT09R2UmJkU9PT1IfHxaLnNldFN0YXRlKEosRSxFPT09SCYmSi5pZD09PUEpO2xldCBJdD0hMTtKLnZlcnNpb249PT1mbi5fX3ZlcnNpb24/KGZuLm5lZWRzTGlnaHRzJiZmbi5saWdodHNTdGF0ZVZlcnNpb24hPT1Qbi5zdGF0ZS52ZXJzaW9ufHxmbi5vdXRwdXRFbmNvZGluZyE9PXFlfHxhZS5pc0luc3RhbmNlZE1lc2gmJiExPT09Zm4uaW5zdGFuY2luZ3x8IWFlLmlzSW5zdGFuY2VkTWVzaCYmITA9PT1mbi5pbnN0YW5jaW5nfHxhZS5pc1NraW5uZWRNZXNoJiYhMT09PWZuLnNraW5uaW5nfHwhYWUuaXNTa2lubmVkTWVzaCYmITA9PT1mbi5za2lubmluZ3x8Zm4uZW52TWFwIT09cnR8fEouZm9nJiZmbi5mb2chPT1VZXx8dm9pZCAwIT09Zm4ubnVtQ2xpcHBpbmdQbGFuZXMmJihmbi5udW1DbGlwcGluZ1BsYW5lcyE9PVoubnVtUGxhbmVzfHxmbi5udW1JbnRlcnNlY3Rpb24hPT1aLm51bUludGVyc2VjdGlvbil8fGZuLnZlcnRleEFscGhhcyE9PWR0fHxmbi52ZXJ0ZXhUYW5nZW50cyE9PUV0fHxmbi5tb3JwaFRhcmdldHMhPT1BdHx8Zm4ubW9ycGhOb3JtYWxzIT09bG58fGZuLnRvbmVNYXBwaW5nIT09eGl8fCEwPT09cm4uaXNXZWJHTDImJmZuLm1vcnBoVGFyZ2V0c0NvdW50IT09WWkpJiYoSXQ9ITApOihJdD0hMCxmbi5fX3ZlcnNpb249Si52ZXJzaW9uKTtsZXQgZ2k9Zm4uY3VycmVudFByb2dyYW07ITA9PT1JdCYmKGdpPVBfKEoseixhZSkpO2xldCBlaT0hMSxqbj0hMSxRbj0hMSxqdD1naS5nZXRVbmlmb3JtcygpLEJpPWZuLnVuaWZvcm1zO2lmKHZlLnVzZVByb2dyYW0oZ2kucHJvZ3JhbSkmJihlaT0hMCxqbj0hMCxRbj0hMCksSi5pZCE9PUEmJihBPUouaWQsam49ITApLGVpfHxIIT09RSl7aWYoanQuc2V0VmFsdWUoT2UsInByb2plY3Rpb25NYXRyaXgiLEUucHJvamVjdGlvbk1hdHJpeCkscm4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmanQuc2V0VmFsdWUoT2UsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKEUuZmFyKzEpL01hdGguTE4yKSksSCE9PUUmJihIPUUsam49ITAsUW49ITApLEouaXNTaGFkZXJNYXRlcmlhbHx8Si5pc01lc2hQaG9uZ01hdGVyaWFsfHxKLmlzTWVzaFRvb25NYXRlcmlhbHx8Si5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxKLmVudk1hcCl7bGV0IHhuPWp0Lm1hcC5jYW1lcmFQb3NpdGlvbjt2b2lkIDAhPT14biYmeG4uc2V0VmFsdWUoT2UsY3Quc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEUubWF0cml4V29ybGQpKX0oSi5pc01lc2hQaG9uZ01hdGVyaWFsfHxKLmlzTWVzaFRvb25NYXRlcmlhbHx8Si5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEouaXNNZXNoQmFzaWNNYXRlcmlhbHx8Si5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxKLmlzU2hhZGVyTWF0ZXJpYWwpJiZqdC5zZXRWYWx1ZShPZSwiaXNPcnRob2dyYXBoaWMiLCEwPT09RS5pc09ydGhvZ3JhcGhpY0NhbWVyYSksKEouaXNNZXNoUGhvbmdNYXRlcmlhbHx8Si5pc01lc2hUb29uTWF0ZXJpYWx8fEouaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxKLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fEouaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Si5pc1NoYWRlck1hdGVyaWFsfHxKLmlzU2hhZG93TWF0ZXJpYWx8fGFlLmlzU2tpbm5lZE1lc2gpJiZqdC5zZXRWYWx1ZShPZSwidmlld01hdHJpeCIsRS5tYXRyaXhXb3JsZEludmVyc2UpfWlmKGFlLmlzU2tpbm5lZE1lc2gpe2p0LnNldE9wdGlvbmFsKE9lLGFlLCJiaW5kTWF0cml4IiksanQuc2V0T3B0aW9uYWwoT2UsYWUsImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IHhuPWFlLnNrZWxldG9uO3huJiYocm4uZmxvYXRWZXJ0ZXhUZXh0dXJlcz8obnVsbD09PXhuLmJvbmVUZXh0dXJlJiZ4bi5jb21wdXRlQm9uZVRleHR1cmUoKSxqdC5zZXRWYWx1ZShPZSwiYm9uZVRleHR1cmUiLHhuLmJvbmVUZXh0dXJlLG9lKSxqdC5zZXRWYWx1ZShPZSwiYm9uZVRleHR1cmVTaXplIix4bi5ib25lVGV4dHVyZVNpemUpKTpqdC5zZXRPcHRpb25hbChPZSx4biwiYm9uZU1hdHJpY2VzIikpfXJldHVybiEhWSYmKHZvaWQgMCE9PVkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9ufHx2b2lkIDAhPT1ZLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwpJiZ5dC51cGRhdGUoYWUsWSxKLGdpKSwoam58fGZuLnJlY2VpdmVTaGFkb3chPT1hZS5yZWNlaXZlU2hhZG93KSYmKGZuLnJlY2VpdmVTaGFkb3c9YWUucmVjZWl2ZVNoYWRvdyxqdC5zZXRWYWx1ZShPZSwicmVjZWl2ZVNoYWRvdyIsYWUucmVjZWl2ZVNoYWRvdykpLGpuJiYoanQuc2V0VmFsdWUoT2UsInRvbmVNYXBwaW5nRXhwb3N1cmUiLHkudG9uZU1hcHBpbmdFeHBvc3VyZSksZm4ubmVlZHNMaWdodHMmJmZ1bmN0aW9uKEUseil7RS5hbWJpZW50TGlnaHRDb2xvci5uZWVkc1VwZGF0ZT16LEUubGlnaHRQcm9iZS5uZWVkc1VwZGF0ZT16LEUuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9eixFLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPXosRS5wb2ludExpZ2h0cy5uZWVkc1VwZGF0ZT16LEUucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9eixFLnNwb3RMaWdodHMubmVlZHNVcGRhdGU9eixFLnNwb3RMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9eixFLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPXosRS5oZW1pc3BoZXJlTGlnaHRzLm5lZWRzVXBkYXRlPXp9KEJpLFFuKSxVZSYmSi5mb2cmJmlpLnJlZnJlc2hGb2dVbmlmb3JtcyhCaSxVZSksaWkucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMoQmksSixJLEllLE1lKSxDcC51cGxvYWQoT2UsZm4udW5pZm9ybXNMaXN0LEJpLG9lKSksSi5pc1NoYWRlck1hdGVyaWFsJiYhMD09PUoudW5pZm9ybXNOZWVkVXBkYXRlJiYoQ3AudXBsb2FkKE9lLGZuLnVuaWZvcm1zTGlzdCxCaSxvZSksSi51bmlmb3Jtc05lZWRVcGRhdGU9ITEpLEouaXNTcHJpdGVNYXRlcmlhbCYmanQuc2V0VmFsdWUoT2UsImNlbnRlciIsYWUuY2VudGVyKSxqdC5zZXRWYWx1ZShPZSwibW9kZWxWaWV3TWF0cml4IixhZS5tb2RlbFZpZXdNYXRyaXgpLGp0LnNldFZhbHVlKE9lLCJub3JtYWxNYXRyaXgiLGFlLm5vcm1hbE1hdHJpeCksanQuc2V0VmFsdWUoT2UsIm1vZGVsTWF0cml4IixhZS5tYXRyaXhXb3JsZCksZ2l9KEUseixZLEosYWUpO3ZlLnNldE1hdGVyaWFsKEosZXQpO2xldCBydD1ZLmluZGV4LGR0PVkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsPT09cnQpe2lmKHZvaWQgMD09PWR0fHwwPT09ZHQuY291bnQpcmV0dXJufWVsc2UgaWYoMD09PXJ0LmNvdW50KXJldHVybjtsZXQgRXQ9MTshMD09PUoud2lyZWZyYW1lJiYocnQ9cHQuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKFkpLEV0PTIpLHNuLnNldHVwKGFlLEoscWUsWSxydCk7bGV0IEF0LGxuPW5uO251bGwhPT1ydCYmKEF0PV90LmdldChydCksbG49QmUsbG4uc2V0SW5kZXgoQXQpKTtsZXQgWWk9bnVsbCE9PXJ0P3J0LmNvdW50OmR0LmNvdW50LHhpPVkuZHJhd1JhbmdlLnN0YXJ0KkV0LGZuPVkuZHJhd1JhbmdlLmNvdW50KkV0LFBuPW51bGwhPT1VZT9VZS5zdGFydCpFdDowLEl0PW51bGwhPT1VZT9VZS5jb3VudCpFdDoxLzAsZ2k9TWF0aC5tYXgoeGksUG4pLGVpPU1hdGgubWluKFlpLHhpK2ZuLFBuK0l0KS0xLGpuPU1hdGgubWF4KDAsZWktZ2krMSk7aWYoMCE9PWpuKXtpZihhZS5pc01lc2gpITA9PT1KLndpcmVmcmFtZT8odmUuc2V0TGluZVdpZHRoKEoud2lyZWZyYW1lTGluZXdpZHRoKmZ0KCkpLGxuLnNldE1vZGUoMSkpOmxuLnNldE1vZGUoNCk7ZWxzZSBpZihhZS5pc0xpbmUpe2xldCBRbj1KLmxpbmV3aWR0aDt2b2lkIDA9PT1RbiYmKFFuPTEpLHZlLnNldExpbmVXaWR0aChRbipmdCgpKSxsbi5zZXRNb2RlKGFlLmlzTGluZVNlZ21lbnRzPzE6YWUuaXNMaW5lTG9vcD8yOjMpfWVsc2UgYWUuaXNQb2ludHM/bG4uc2V0TW9kZSgwKTphZS5pc1Nwcml0ZSYmbG4uc2V0TW9kZSg0KTtpZihhZS5pc0luc3RhbmNlZE1lc2gpbG4ucmVuZGVySW5zdGFuY2VzKGdpLGpuLGFlLmNvdW50KTtlbHNlIGlmKFkuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSl7bGV0IFFuPU1hdGgubWluKFkuaW5zdGFuY2VDb3VudCxZLl9tYXhJbnN0YW5jZUNvdW50KTtsbi5yZW5kZXJJbnN0YW5jZXMoZ2ksam4sUW4pfWVsc2UgbG4ucmVuZGVyKGdpLGpuKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbihFLHope3A9TmkuZ2V0KEUpLHAuaW5pdCgpLG0ucHVzaChwKSxFLnRyYXZlcnNlVmlzaWJsZShmdW5jdGlvbihZKXtZLmlzTGlnaHQmJlkubGF5ZXJzLnRlc3Qoei5sYXllcnMpJiYocC5wdXNoTGlnaHQoWSksWS5jYXN0U2hhZG93JiZwLnB1c2hTaGFkb3coWSkpfSkscC5zZXR1cExpZ2h0cyh5LnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxFLnRyYXZlcnNlKGZ1bmN0aW9uKFkpe2xldCBKPVkubWF0ZXJpYWw7aWYoSilpZihBcnJheS5pc0FycmF5KEopKWZvcihsZXQgYWU9MDthZTxKLmxlbmd0aDthZSsrKVBfKEpbYWVdLEUsWSk7ZWxzZSBQXyhKLEUsWSl9KSxtLnBvcCgpLHA9bnVsbH07bGV0IFdlPW51bGw7ZnVuY3Rpb24gaGkoKXtVby5zdG9wKCl9ZnVuY3Rpb24gdXIoKXtVby5zdGFydCgpfWxldCBVbz1uZXcgaHRlO2Z1bmN0aW9uIHZyKEUseixZLEope2lmKCExPT09RS52aXNpYmxlKXJldHVybjtpZihFLmxheWVycy50ZXN0KHoubGF5ZXJzKSlpZihFLmlzR3JvdXApWT1FLnJlbmRlck9yZGVyO2Vsc2UgaWYoRS5pc0xPRCkhMD09PUUuYXV0b1VwZGF0ZSYmRS51cGRhdGUoeik7ZWxzZSBpZihFLmlzTGlnaHQpcC5wdXNoTGlnaHQoRSksRS5jYXN0U2hhZG93JiZwLnB1c2hTaGFkb3coRSk7ZWxzZSBpZihFLmlzU3ByaXRlKXtpZighRS5mcnVzdHVtQ3VsbGVkfHxkZS5pbnRlcnNlY3RzU3ByaXRlKEUpKXtKJiZjdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oRS5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KE5lKTtsZXQgZXQ9b24udXBkYXRlKEUpLHFlPUUubWF0ZXJpYWw7cWUudmlzaWJsZSYmdS5wdXNoKEUsZXQscWUsWSxjdC56LG51bGwpfX1lbHNlIGlmKChFLmlzTWVzaHx8RS5pc0xpbmV8fEUuaXNQb2ludHMpJiYoRS5pc1NraW5uZWRNZXNoJiZFLnNrZWxldG9uLmZyYW1lIT09aHQucmVuZGVyLmZyYW1lJiYoRS5za2VsZXRvbi51cGRhdGUoKSxFLnNrZWxldG9uLmZyYW1lPWh0LnJlbmRlci5mcmFtZSksIUUuZnJ1c3R1bUN1bGxlZHx8ZGUuaW50ZXJzZWN0c09iamVjdChFKSkpe0omJmN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihFLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoTmUpO2xldCBldD1vbi51cGRhdGUoRSkscWU9RS5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHFlKSl7bGV0IHJ0PWV0Lmdyb3Vwcztmb3IobGV0IGR0PTAsRXQ9cnQubGVuZ3RoO2R0PEV0O2R0Kyspe2xldCBBdD1ydFtkdF0sbG49cWVbQXQubWF0ZXJpYWxJbmRleF07bG4mJmxuLnZpc2libGUmJnUucHVzaChFLGV0LGxuLFksY3QueixBdCl9fWVsc2UgcWUudmlzaWJsZSYmdS5wdXNoKEUsZXQscWUsWSxjdC56LG51bGwpfWxldCBVZT1FLmNoaWxkcmVuO2ZvcihsZXQgZXQ9MCxxZT1VZS5sZW5ndGg7ZXQ8cWU7ZXQrKyl2cihVZVtldF0seixZLEopfWZ1bmN0aW9uIGJzKEUseixZLEope2xldCBhZT1FLm9wYXF1ZSxVZT1FLnRyYW5zbWlzc2l2ZSxldD1FLnRyYW5zcGFyZW50O3Auc2V0dXBMaWdodHNWaWV3KFkpLFVlLmxlbmd0aD4wJiZmdW5jdGlvbihFLHosWSl7bnVsbD09PU1lJiYoTWU9bmV3KCEwPT09YSYmITA9PT1ybi5pc1dlYkdMMj9JeDpRYSkoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpudWxsIT09bW4uY29udmVydCh0Xyk/dF86dnAsbWluRmlsdGVyOmVBLG1hZ0ZpbHRlcjpibyx3cmFwUzpncyx3cmFwVDpncyx1c2VSZW5kZXJUb1RleHR1cmU6U3QuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0pKTtsZXQgSj15LmdldFJlbmRlclRhcmdldCgpO3kuc2V0UmVuZGVyVGFyZ2V0KE1lKSx5LmNsZWFyKCk7bGV0IGFlPXkudG9uZU1hcHBpbmc7eS50b25lTWFwcGluZz1icCxybChFLHosWSkseS50b25lTWFwcGluZz1hZSxvZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChNZSksb2UudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKE1lKSx5LnNldFJlbmRlclRhcmdldChKKX0oYWUseixZKSxKJiZ2ZS52aWV3cG9ydCh0ZS5jb3B5KEopKSxhZS5sZW5ndGg+MCYmcmwoYWUseixZKSxVZS5sZW5ndGg+MCYmcmwoVWUseixZKSxldC5sZW5ndGg+MCYmcmwoZXQseixZKX1mdW5jdGlvbiBybChFLHosWSl7bGV0IEo9ITA9PT16LmlzU2NlbmU/ei5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBhZT0wLFVlPUUubGVuZ3RoO2FlPFVlO2FlKyspe2xldCBldD1FW2FlXSxxZT1ldC5vYmplY3QscnQ9ZXQuZ2VvbWV0cnksZHQ9bnVsbD09PUo/ZXQubWF0ZXJpYWw6SixFdD1ldC5ncm91cDtxZS5sYXllcnMudGVzdChZLmxheWVycykmJkJBKHFlLHosWSxydCxkdCxFdCl9fWZ1bmN0aW9uIEJBKEUseixZLEosYWUsVWUpe0Uub25CZWZvcmVSZW5kZXIoeSx6LFksSixhZSxVZSksRS5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhZLm1hdHJpeFdvcmxkSW52ZXJzZSxFLm1hdHJpeFdvcmxkKSxFLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoRS5tb2RlbFZpZXdNYXRyaXgpLGFlLm9uQmVmb3JlUmVuZGVyKHkseixZLEosRSxVZSksITA9PT1hZS50cmFuc3BhcmVudCYmYWUuc2lkZT09PW9fPyhhZS5zaWRlPXlvLGFlLm5lZWRzVXBkYXRlPSEwLHkucmVuZGVyQnVmZmVyRGlyZWN0KFkseixKLGFlLEUsVWUpLGFlLnNpZGU9U3gsYWUubmVlZHNVcGRhdGU9ITAseS5yZW5kZXJCdWZmZXJEaXJlY3QoWSx6LEosYWUsRSxVZSksYWUuc2lkZT1vXyk6eS5yZW5kZXJCdWZmZXJEaXJlY3QoWSx6LEosYWUsRSxVZSksRS5vbkFmdGVyUmVuZGVyKHkseixZLEosYWUsVWUpfWZ1bmN0aW9uIFBfKEUseixZKXshMCE9PXouaXNTY2VuZSYmKHo9d3QpO2xldCBKPW10LmdldChFKSxhZT1wLnN0YXRlLmxpZ2h0cyxldD1hZS5zdGF0ZS52ZXJzaW9uLHFlPXduLmdldFBhcmFtZXRlcnMoRSxhZS5zdGF0ZSxwLnN0YXRlLnNoYWRvd3NBcnJheSx6LFkpLHJ0PXduLmdldFByb2dyYW1DYWNoZUtleShxZSksZHQ9Si5wcm9ncmFtcztKLmVudmlyb25tZW50PUUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD96LmVudmlyb25tZW50Om51bGwsSi5mb2c9ei5mb2csSi5lbnZNYXA9KEUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9YZTpzdCkuZ2V0KEUuZW52TWFwfHxKLmVudmlyb25tZW50KSx2b2lkIDA9PT1kdCYmKEUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdG4pLGR0PW5ldyBNYXAsSi5wcm9ncmFtcz1kdCk7bGV0IEV0PWR0LmdldChydCk7aWYodm9pZCAwIT09RXQpe2lmKEouY3VycmVudFByb2dyYW09PT1FdCYmSi5saWdodHNTdGF0ZVZlcnNpb249PT1ldClyZXR1cm4gb0MoRSxxZSksRXR9ZWxzZSBxZS51bmlmb3Jtcz13bi5nZXRVbmlmb3JtcyhFKSxFLm9uQnVpbGQoWSxxZSx5KSxFLm9uQmVmb3JlQ29tcGlsZShxZSx5KSxFdD13bi5hY3F1aXJlUHJvZ3JhbShxZSxydCksZHQuc2V0KHJ0LEV0KSxKLnVuaWZvcm1zPXFlLnVuaWZvcm1zO2xldCBBdD1KLnVuaWZvcm1zOyghRS5pc1NoYWRlck1hdGVyaWFsJiYhRS5pc1Jhd1NoYWRlck1hdGVyaWFsfHwhMD09PUUuY2xpcHBpbmcpJiYoQXQuY2xpcHBpbmdQbGFuZXM9Wi51bmlmb3JtKSxvQyhFLHFlKSxKLm5lZWRzTGlnaHRzPWZ1bmN0aW9uKEUpe3JldHVybiBFLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8RS5pc01lc2hUb29uTWF0ZXJpYWx8fEUuaXNNZXNoUGhvbmdNYXRlcmlhbHx8RS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxFLmlzU2hhZG93TWF0ZXJpYWx8fEUuaXNTaGFkZXJNYXRlcmlhbCYmITA9PT1FLmxpZ2h0c30oRSksSi5saWdodHNTdGF0ZVZlcnNpb249ZXQsSi5uZWVkc0xpZ2h0cyYmKEF0LmFtYmllbnRMaWdodENvbG9yLnZhbHVlPWFlLnN0YXRlLmFtYmllbnQsQXQubGlnaHRQcm9iZS52YWx1ZT1hZS5zdGF0ZS5wcm9iZSxBdC5kaXJlY3Rpb25hbExpZ2h0cy52YWx1ZT1hZS5zdGF0ZS5kaXJlY3Rpb25hbCxBdC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy52YWx1ZT1hZS5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdyxBdC5zcG90TGlnaHRzLnZhbHVlPWFlLnN0YXRlLnNwb3QsQXQuc3BvdExpZ2h0U2hhZG93cy52YWx1ZT1hZS5zdGF0ZS5zcG90U2hhZG93LEF0LnJlY3RBcmVhTGlnaHRzLnZhbHVlPWFlLnN0YXRlLnJlY3RBcmVhLEF0Lmx0Y18xLnZhbHVlPWFlLnN0YXRlLnJlY3RBcmVhTFRDMSxBdC5sdGNfMi52YWx1ZT1hZS5zdGF0ZS5yZWN0QXJlYUxUQzIsQXQucG9pbnRMaWdodHMudmFsdWU9YWUuc3RhdGUucG9pbnQsQXQucG9pbnRMaWdodFNoYWRvd3MudmFsdWU9YWUuc3RhdGUucG9pbnRTaGFkb3csQXQuaGVtaXNwaGVyZUxpZ2h0cy52YWx1ZT1hZS5zdGF0ZS5oZW1pLEF0LmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPWFlLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLEF0LmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPWFlLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LEF0LnNwb3RTaGFkb3dNYXAudmFsdWU9YWUuc3RhdGUuc3BvdFNoYWRvd01hcCxBdC5zcG90U2hhZG93TWF0cml4LnZhbHVlPWFlLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsQXQucG9pbnRTaGFkb3dNYXAudmFsdWU9YWUuc3RhdGUucG9pbnRTaGFkb3dNYXAsQXQucG9pbnRTaGFkb3dNYXRyaXgudmFsdWU9YWUuc3RhdGUucG9pbnRTaGFkb3dNYXRyaXgpO2xldCBsbj1FdC5nZXRVbmlmb3JtcygpLFlpPUNwLnNlcVdpdGhWYWx1ZShsbi5zZXEsQXQpO3JldHVybiBKLmN1cnJlbnRQcm9ncmFtPUV0LEoudW5pZm9ybXNMaXN0PVlpLEV0fWZ1bmN0aW9uIG9DKEUseil7bGV0IFk9bXQuZ2V0KEUpO1kub3V0cHV0RW5jb2Rpbmc9ei5vdXRwdXRFbmNvZGluZyxZLmluc3RhbmNpbmc9ei5pbnN0YW5jaW5nLFkuc2tpbm5pbmc9ei5za2lubmluZyxZLm1vcnBoVGFyZ2V0cz16Lm1vcnBoVGFyZ2V0cyxZLm1vcnBoTm9ybWFscz16Lm1vcnBoTm9ybWFscyxZLm1vcnBoVGFyZ2V0c0NvdW50PXoubW9ycGhUYXJnZXRzQ291bnQsWS5udW1DbGlwcGluZ1BsYW5lcz16Lm51bUNsaXBwaW5nUGxhbmVzLFkubnVtSW50ZXJzZWN0aW9uPXoubnVtQ2xpcEludGVyc2VjdGlvbixZLnZlcnRleEFscGhhcz16LnZlcnRleEFscGhhcyxZLnZlcnRleFRhbmdlbnRzPXoudmVydGV4VGFuZ2VudHMsWS50b25lTWFwcGluZz16LnRvbmVNYXBwaW5nfVVvLnNldEFuaW1hdGlvbkxvb3AoZnVuY3Rpb24oRSl7V2UmJldlKEUpfSksdHlwZW9mIHdpbmRvdzwidSImJlVvLnNldENvbnRleHQod2luZG93KSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oRSl7V2U9RSxMdC5zZXRBbmltYXRpb25Mb29wKEUpLG51bGw9PT1FP1VvLnN0b3AoKTpVby5zdGFydCgpfSxMdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLGhpKSxMdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIix1ciksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oRSx6KXtpZih2b2lkIDA9PT16fHwhMD09PXouaXNDYW1lcmEpe2lmKCEwIT09TSl7aWYoITA9PT1FLmF1dG9VcGRhdGUmJkUudXBkYXRlTWF0cml4V29ybGQoKSxudWxsPT09ei5wYXJlbnQmJnoudXBkYXRlTWF0cml4V29ybGQoKSwhMD09PUx0LmVuYWJsZWQmJiEwPT09THQuaXNQcmVzZW50aW5nJiYoITA9PT1MdC5jYW1lcmFBdXRvVXBkYXRlJiZMdC51cGRhdGVDYW1lcmEoeiksej1MdC5nZXRDYW1lcmEoKSksITA9PT1FLmlzU2NlbmUmJkUub25CZWZvcmVSZW5kZXIoeSxFLHosUikscD1OaS5nZXQoRSxtLmxlbmd0aCkscC5pbml0KCksbS5wdXNoKHApLE5lLm11bHRpcGx5TWF0cmljZXMoei5wcm9qZWN0aW9uTWF0cml4LHoubWF0cml4V29ybGRJbnZlcnNlKSxkZS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChOZSksR2U9dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCx1ZT1aLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxHZSx6KSx1PUxpLmdldChFLGYubGVuZ3RoKSx1LmluaXQoKSxmLnB1c2godSksdnIoRSx6LDAseS5zb3J0T2JqZWN0cyksdS5maW5pc2goKSwhMD09PXkuc29ydE9iamVjdHMmJnUuc29ydChyZSxjZSksITA9PT11ZSYmWi5iZWdpblNoYWRvd3MoKSxOLnJlbmRlcihwLnN0YXRlLnNoYWRvd3NBcnJheSxFLHopLCEwPT09dWUmJlouZW5kU2hhZG93cygpLCEwPT09dGhpcy5pbmZvLmF1dG9SZXNldCYmdGhpcy5pbmZvLnJlc2V0KCksSGUucmVuZGVyKHUsRSkscC5zZXR1cExpZ2h0cyh5LnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSx6LmlzQXJyYXlDYW1lcmEpe2xldCBKPXouY2FtZXJhcztmb3IobGV0IGFlPTAsVWU9Si5sZW5ndGg7YWU8VWU7YWUrKyl7bGV0IGV0PUpbYWVdO2JzKHUsRSxldCxldC52aWV3cG9ydCl9fWVsc2UgYnModSxFLHopO251bGwhPT1SJiYob2UudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoUiksb2UudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKFIpKSwhMD09PUUuaXNTY2VuZSYmRS5vbkFmdGVyUmVuZGVyKHksRSx6KSx2ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLHZlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksdmUuYnVmZmVycy5jb2xvci5zZXRNYXNrKCEwKSx2ZS5zZXRQb2x5Z29uT2Zmc2V0KCExKSxzbi5yZXNldERlZmF1bHRTdGF0ZSgpLEE9LTEsSD1udWxsLG0ucG9wKCkscD1tLmxlbmd0aD4wP21bbS5sZW5ndGgtMV06bnVsbCxmLnBvcCgpLHU9Zi5sZW5ndGg+MD9mW2YubGVuZ3RoLTFdOm51bGx9fWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLiIpfSx0aGlzLmdldEFjdGl2ZUN1YmVGYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHZ9LHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4geH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gUn0sdGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcz1mdW5jdGlvbihFLHosWSl7bXQuZ2V0KEUudGV4dHVyZSkuX193ZWJnbFRleHR1cmU9eixtdC5nZXQoRS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPVk7bGV0IEo9bXQuZ2V0KEUpO0ouX19oYXNFeHRlcm5hbFRleHR1cmVzPSEwLEouX19oYXNFeHRlcm5hbFRleHR1cmVzJiYoSi5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPXZvaWQgMD09PVksSi5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyfHxFLnVzZVJlbmRlclRvVGV4dHVyZSYmKGNvbnNvbGUud2FybigicmVuZGVyLXRvLXRleHR1cmUgZXh0ZW5zaW9uIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGFuIGV4dGVybmFsIHRleHR1cmUgd2FzIHByb3ZpZGVkIiksRS51c2VSZW5kZXJUb1RleHR1cmU9ITEsRS51c2VSZW5kZXJidWZmZXI9ITApKX0sdGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbihFLHope2xldCBZPW10LmdldChFKTtZLl9fd2ViZ2xGcmFtZWJ1ZmZlcj16LFkuX191c2VEZWZhdWx0RnJhbWVidWZmZXI9dm9pZCAwPT09en0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oRSx6PTAsWT0wKXtSPUUsdj16LHg9WTtsZXQgSj0hMDtpZihFKXtsZXQgcnQ9bXQuZ2V0KEUpO3ZvaWQgMCE9PXJ0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyPyh2ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksSj0hMSk6dm9pZCAwPT09cnQuX193ZWJnbEZyYW1lYnVmZmVyP29lLnNldHVwUmVuZGVyVGFyZ2V0KEUpOnJ0Ll9faGFzRXh0ZXJuYWxUZXh0dXJlcyYmb2UucmViaW5kVGV4dHVyZXMoRSxtdC5nZXQoRS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxtdC5nZXQoRS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlKX1sZXQgYWU9bnVsbCxVZT0hMSxldD0hMTtpZihFKXtsZXQgcnQ9RS50ZXh0dXJlOyhydC5pc0RhdGFUZXh0dXJlM0R8fHJ0LmlzRGF0YVRleHR1cmUyREFycmF5KSYmKGV0PSEwKTtsZXQgZHQ9bXQuZ2V0KEUpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PyhhZT1kdFt6XSxVZT0hMCk6YWU9RS51c2VSZW5kZXJidWZmZXI/bXQuZ2V0KEUpLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpkdCx0ZS5jb3B5KEUudmlld3BvcnQpLEsuY29weShFLnNjaXNzb3IpLENlPUUuc2Npc3NvclRlc3R9ZWxzZSB0ZS5jb3B5KGZlKS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpLEsuY29weShfZSkubXVsdGlwbHlTY2FsYXIoSSkuZmxvb3IoKSxDZT1uZTtpZih2ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsYWUpJiZybi5kcmF3QnVmZmVycyYmSiYmdmUuZHJhd0J1ZmZlcnMoRSxhZSksdmUudmlld3BvcnQodGUpLHZlLnNjaXNzb3IoSyksdmUuc2V0U2Npc3NvclRlc3QoQ2UpLFVlKXtsZXQgcnQ9bXQuZ2V0KEUudGV4dHVyZSk7T2UuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkreixydC5fX3dlYmdsVGV4dHVyZSxZKX1lbHNlIGlmKGV0KXtsZXQgcnQ9bXQuZ2V0KEUudGV4dHVyZSk7T2UuZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoMzYxNjAsMzYwNjQscnQuX193ZWJnbFRleHR1cmUsWXx8MCx6fHwwKX1BPS0xfSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oRSx6LFksSixhZSxVZSxldCl7aWYoIUV8fCFFLmlzV2ViR0xSZW5kZXJUYXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO2xldCBxZT1tdC5nZXQoRSkuX193ZWJnbEZyYW1lYnVmZmVyO2lmKEUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJnZvaWQgMCE9PWV0JiYocWU9cWVbZXRdKSxxZSl7dmUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHFlKTt0cnl7bGV0IHJ0PUUudGV4dHVyZSxkdD1ydC5mb3JtYXQsRXQ9cnQudHlwZTtpZihkdCE9PWJhJiZtbi5jb252ZXJ0KGR0KSE9PU9lLmdldFBhcmFtZXRlcigzNTczOSkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7bGV0IEF0PUV0PT09dF8mJihTdC5oYXMoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpfHxybi5pc1dlYkdMMiYmU3QuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IikpO2lmKCEoRXQ9PT12cHx8bW4uY29udmVydChFdCk9PT1PZS5nZXRQYXJhbWV0ZXIoMzU3MzgpfHxFdD09PUNtJiYocm4uaXNXZWJHTDJ8fFN0LmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKXx8U3QuaGFzKCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSl8fEF0KSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIik7MzYwNTM9PT1PZS5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT96Pj0wJiZ6PD1FLndpZHRoLUomJlk+PTAmJlk8PUUuaGVpZ2h0LWFlJiZPZS5yZWFkUGl4ZWxzKHosWSxKLGFlLG1uLmNvbnZlcnQoZHQpLG1uLmNvbnZlcnQoRXQpLFVlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtsZXQgcnQ9bnVsbCE9PVI/bXQuZ2V0KFIpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjpudWxsO3ZlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxydCl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24oRSx6LFk9MCl7aWYoITAhPT16LmlzRnJhbWVidWZmZXJUZXh0dXJlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuIik7bGV0IEo9TWF0aC5wb3coMiwtWSksYWU9TWF0aC5mbG9vcih6LmltYWdlLndpZHRoKkopLFVlPU1hdGguZmxvb3Ioei5pbWFnZS5oZWlnaHQqSik7b2Uuc2V0VGV4dHVyZTJEKHosMCksT2UuY29weVRleFN1YkltYWdlMkQoMzU1MyxZLDAsMCxFLngsRS55LGFlLFVlKSx2ZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmU9ZnVuY3Rpb24oRSx6LFksSj0wKXtsZXQgYWU9ei5pbWFnZS53aWR0aCxVZT16LmltYWdlLmhlaWdodCxldD1tbi5jb252ZXJ0KFkuZm9ybWF0KSxxZT1tbi5jb252ZXJ0KFkudHlwZSk7b2Uuc2V0VGV4dHVyZTJEKFksMCksT2UucGl4ZWxTdG9yZWkoMzc0NDAsWS5mbGlwWSksT2UucGl4ZWxTdG9yZWkoMzc0NDEsWS5wcmVtdWx0aXBseUFscGhhKSxPZS5waXhlbFN0b3JlaSgzMzE3LFkudW5wYWNrQWxpZ25tZW50KSx6LmlzRGF0YVRleHR1cmU/T2UudGV4U3ViSW1hZ2UyRCgzNTUzLEosRS54LEUueSxhZSxVZSxldCxxZSx6LmltYWdlLmRhdGEpOnouaXNDb21wcmVzc2VkVGV4dHVyZT9PZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLEosRS54LEUueSx6Lm1pcG1hcHNbMF0ud2lkdGgsei5taXBtYXBzWzBdLmhlaWdodCxldCx6Lm1pcG1hcHNbMF0uZGF0YSk6T2UudGV4U3ViSW1hZ2UyRCgzNTUzLEosRS54LEUueSxldCxxZSx6LmltYWdlKSwwPT09SiYmWS5nZW5lcmF0ZU1pcG1hcHMmJk9lLmdlbmVyYXRlTWlwbWFwKDM1NTMpLHZlLnVuYmluZFRleHR1cmUoKX0sdGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEPWZ1bmN0aW9uKEUseixZLEosYWU9MCl7aWYoeS5pc1dlYkdMMVJlbmRlcmVyKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2xldCBFdCxVZT1FLm1heC54LUUubWluLngrMSxldD1FLm1heC55LUUubWluLnkrMSxxZT1FLm1heC56LUUubWluLnorMSxydD1tbi5jb252ZXJ0KEouZm9ybWF0KSxkdD1tbi5jb252ZXJ0KEoudHlwZSk7aWYoSi5pc0RhdGFUZXh0dXJlM0Qpb2Uuc2V0VGV4dHVyZTNEKEosMCksRXQ9MzI4Nzk7ZWxzZXtpZighSi5pc0RhdGFUZXh0dXJlMkRBcnJheSlyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogb25seSBzdXBwb3J0cyBUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkuIik7b2Uuc2V0VGV4dHVyZTJEQXJyYXkoSiwwKSxFdD0zNTg2Nn1PZS5waXhlbFN0b3JlaSgzNzQ0MCxKLmZsaXBZKSxPZS5waXhlbFN0b3JlaSgzNzQ0MSxKLnByZW11bHRpcGx5QWxwaGEpLE9lLnBpeGVsU3RvcmVpKDMzMTcsSi51bnBhY2tBbGlnbm1lbnQpO2xldCBBdD1PZS5nZXRQYXJhbWV0ZXIoMzMxNCksbG49T2UuZ2V0UGFyYW1ldGVyKDMyODc4KSxZaT1PZS5nZXRQYXJhbWV0ZXIoMzMxNikseGk9T2UuZ2V0UGFyYW1ldGVyKDMzMTUpLGZuPU9lLmdldFBhcmFtZXRlcigzMjg3NyksUG49WS5pc0NvbXByZXNzZWRUZXh0dXJlP1kubWlwbWFwc1swXTpZLmltYWdlO09lLnBpeGVsU3RvcmVpKDMzMTQsUG4ud2lkdGgpLE9lLnBpeGVsU3RvcmVpKDMyODc4LFBuLmhlaWdodCksT2UucGl4ZWxTdG9yZWkoMzMxNixFLm1pbi54KSxPZS5waXhlbFN0b3JlaSgzMzE1LEUubWluLnkpLE9lLnBpeGVsU3RvcmVpKDMyODc3LEUubWluLnopLFkuaXNEYXRhVGV4dHVyZXx8WS5pc0RhdGFUZXh0dXJlM0Q/T2UudGV4U3ViSW1hZ2UzRChFdCxhZSx6Lngsei55LHoueixVZSxldCxxZSxydCxkdCxQbi5kYXRhKTpZLmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksT2UuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoRXQsYWUsei54LHoueSx6LnosVWUsZXQscWUscnQsUG4uZGF0YSkpOk9lLnRleFN1YkltYWdlM0QoRXQsYWUsei54LHoueSx6LnosVWUsZXQscWUscnQsZHQsUG4pLE9lLnBpeGVsU3RvcmVpKDMzMTQsQXQpLE9lLnBpeGVsU3RvcmVpKDMyODc4LGxuKSxPZS5waXhlbFN0b3JlaSgzMzE2LFlpKSxPZS5waXhlbFN0b3JlaSgzMzE1LHhpKSxPZS5waXhlbFN0b3JlaSgzMjg3NyxmbiksMD09PWFlJiZKLmdlbmVyYXRlTWlwbWFwcyYmT2UuZ2VuZXJhdGVNaXBtYXAoRXQpLHZlLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihFKXtvZS5zZXRUZXh0dXJlMkQoRSwwKSx2ZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMucmVzZXRTdGF0ZT1mdW5jdGlvbigpe3Y9MCx4PTAsUj1udWxsLHZlLnJlc2V0KCksc24ucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXzwidSImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfXFpLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITAsY2xhc3MgZXh0ZW5kcyBxaXt9LnByb3RvdHlwZS5pc1dlYkdMMVJlbmRlcmVyPSEwO3ZhciBGeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MjVlLTUpe3RoaXMubmFtZT0iIix0aGlzLmNvbG9yPW5ldyBhbih0KSx0aGlzLmRlbnNpdHk9ZX1jbG9uZSgpe3JldHVybiBuZXcgRngodGhpcy5jb2xvcix0aGlzLmRlbnNpdHkpfXRvSlNPTigpe3JldHVybnt0eXBlOiJGb2dFeHAyIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLGRlbnNpdHk6dGhpcy5kZW5zaXR5fX19O0Z4LnByb3RvdHlwZS5pc0ZvZ0V4cDI9ITA7dmFyIEx4PWNsYXNze2NvbnN0cnVjdG9yKHQsZT0xLGk9MWUzKXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgYW4odCksdGhpcy5uZWFyPWUsdGhpcy5mYXI9aX1jbG9uZSgpe3JldHVybiBuZXcgTHgodGhpcy5jb2xvcix0aGlzLm5lYXIsdGhpcy5mYXIpfXRvSlNPTigpe3JldHVybnt0eXBlOiJGb2ciLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksbmVhcjp0aGlzLm5lYXIsZmFyOnRoaXMuZmFyfX19O0x4LnByb3RvdHlwZS5pc0ZvZz0hMDt2YXIgdV89Y2xhc3MgZXh0ZW5kcyB6aXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJTY2VuZSIsdGhpcy5iYWNrZ3JvdW5kPW51bGwsdGhpcy5lbnZpcm9ubWVudD1udWxsLHRoaXMuZm9nPW51bGwsdGhpcy5vdmVycmlkZU1hdGVyaWFsPW51bGwsdGhpcy5hdXRvVXBkYXRlPSEwLHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX188InUiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSxudWxsIT09dC5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kPXQuYmFja2dyb3VuZC5jbG9uZSgpKSxudWxsIT09dC5lbnZpcm9ubWVudCYmKHRoaXMuZW52aXJvbm1lbnQ9dC5lbnZpcm9ubWVudC5jbG9uZSgpKSxudWxsIT09dC5mb2cmJih0aGlzLmZvZz10LmZvZy5jbG9uZSgpKSxudWxsIT09dC5vdmVycmlkZU1hdGVyaWFsJiYodGhpcy5vdmVycmlkZU1hdGVyaWFsPXQub3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpKSx0aGlzLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBudWxsIT09dGhpcy5mb2cmJihlLm9iamVjdC5mb2c9dGhpcy5mb2cudG9KU09OKCkpLGV9fTt1Xy5wcm90b3R5cGUuaXNTY2VuZT0hMDt2YXIgRG09Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmFycmF5PXQsdGhpcy5zdHJpZGU9ZSx0aGlzLmNvdW50PXZvaWQgMCE9PXQ/dC5sZW5ndGgvZTowLHRoaXMudXNhZ2U9VHgsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wLHRoaXMudXVpZD1RbCgpfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5jb3VudD10LmNvdW50LHRoaXMuc3RyaWRlPXQuc3RyaWRlLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LGUsaSl7dCo9dGhpcy5zdHJpZGUsaSo9ZS5zdHJpZGU7Zm9yKGxldCByPTAsbz10aGlzLnN0cmlkZTtyPG87cisrKXRoaXMuYXJyYXlbdCtyXT1lLmFycmF5W2krcl07cmV0dXJuIHRoaXN9c2V0KHQsZT0wKXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCxlKSx0aGlzfWNsb25lKHQpe3ZvaWQgMD09PXQuYXJyYXlCdWZmZXJzJiYodC5hcnJheUJ1ZmZlcnM9e30pLHZvaWQgMD09PXRoaXMuYXJyYXkuYnVmZmVyLl91dWlkJiYodGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9UWwoKSksdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPXRoaXMuYXJyYXkuc2xpY2UoMCkuYnVmZmVyKTtsZXQgZT1uZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0pLGk9bmV3IHRoaXMuY29uc3RydWN0b3IoZSx0aGlzLnN0cmlkZSk7cmV0dXJuIGkuc2V0VXNhZ2UodGhpcy51c2FnZSksaX1vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc310b0pTT04odCl7cmV0dXJuIHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzJiYodC5hcnJheUJ1ZmZlcnM9e30pLHZvaWQgMD09PXRoaXMuYXJyYXkuYnVmZmVyLl91dWlkJiYodGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9UWwoKSksdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5LmJ1ZmZlcikpKSx7dXVpZDp0aGlzLnV1aWQsYnVmZmVyOnRoaXMuYXJyYXkuYnVmZmVyLl91dWlkLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLHN0cmlkZTp0aGlzLnN0cmlkZX19fTtEbS5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgJHI9bmV3ICQsSW09Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscj0hMSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLm9mZnNldD1pLHRoaXMubm9ybWFsaXplZD0hMD09PXJ9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuZGF0YS5jb3VudH1nZXQgYXJyYXkoKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5fXNldCBuZWVkc1VwZGF0ZSh0KXt0aGlzLmRhdGEubmVlZHNVcGRhdGU9dH1hcHBseU1hdHJpeDQodCl7Zm9yKGxldCBlPTAsaT10aGlzLmRhdGEuY291bnQ7ZTxpO2UrKykkci54PXRoaXMuZ2V0WChlKSwkci55PXRoaXMuZ2V0WShlKSwkci56PXRoaXMuZ2V0WihlKSwkci5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSwkci54LCRyLnksJHIueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspJHIueD10aGlzLmdldFgoZSksJHIueT10aGlzLmdldFkoZSksJHIuej10aGlzLmdldFooZSksJHIuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSwkci54LCRyLnksJHIueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKSRyLng9dGhpcy5nZXRYKGUpLCRyLnk9dGhpcy5nZXRZKGUpLCRyLno9dGhpcy5nZXRaKGUpLCRyLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLCRyLngsJHIueSwkci56KTtyZXR1cm4gdGhpc31zZXRYKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdPWUsdGhpc31zZXRZKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV09ZSx0aGlzfXNldFoodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXT1lLHRoaXN9c2V0Vyh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdPWUsdGhpc31nZXRYKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XX1nZXRZKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdfWdldFoodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19Z2V0Vyh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXX1zZXRYWSh0LGUsaSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzfXNldFhZWih0LGUsaSxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXMuZGF0YS5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIsbyl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXMuZGF0YS5hcnJheVt0KzNdPW8sdGhpc31jbG9uZSh0KXtpZih2b2lkIDA9PT10KXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUuY2xvbmUoKTogQ2xvbmluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNvdW50O2krKyl7bGV0IHI9aSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgbz0wO288dGhpcy5pdGVtU2l6ZTtvKyspZS5wdXNoKHRoaXMuZGF0YS5hcnJheVtyK29dKX1yZXR1cm4gbmV3IEFyKG5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKGUpLHRoaXMuaXRlbVNpemUsdGhpcy5ub3JtYWxpemVkKX1yZXR1cm4gdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnMmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IEltKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitvXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6ZSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19cmV0dXJuIHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEudG9KU09OKHQpKSx7aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTohMCxpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLGRhdGE6dGhpcy5kYXRhLnV1aWQsb2Zmc2V0OnRoaXMub2Zmc2V0LG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX19O0ltLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBMST1jbGFzcyBleHRlbmRzIFJve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTcHJpdGVNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMucm90YXRpb249MCx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O0xJLnByb3RvdHlwZS5pc1Nwcml0ZU1hdGVyaWFsPSEwO3ZhciBZMCxteD1uZXcgJCxYMD1uZXcgJCxRMD1uZXcgJCxaMD1uZXcgJGUsaHg9bmV3ICRlLEV0ZT1uZXcgTW4sY0k9bmV3ICQsZ3g9bmV3ICQsZEk9bmV3ICQsTmVlPW5ldyAkZSxmQj1uZXcgJGUsQmVlPW5ldyAkZTtmdW5jdGlvbiB1SShuLHQsZSxpLHIsbyl7WjAuc3ViVmVjdG9ycyhuLGUpLmFkZFNjYWxhciguNSkubXVsdGlwbHkoaSksdm9pZCAwIT09cj8oaHgueD1vKlowLngtcipaMC55LGh4Lnk9cipaMC54K28qWjAueSk6aHguY29weShaMCksbi5jb3B5KHQpLG4ueCs9aHgueCxuLnkrPWh4Lnksbi5hcHBseU1hdHJpeDQoRXRlKX0oY2xhc3MgZXh0ZW5kcyB6aXtjb25zdHJ1Y3Rvcih0KXtpZihzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlIix2b2lkIDA9PT1ZMCl7WTA9bmV3IFdpO2xldCBlPW5ldyBGbG9hdDMyQXJyYXkoWy0uNSwtLjUsMCwwLDAsLjUsLS41LDAsMSwwLC41LC41LDAsMSwxLC0uNSwuNSwwLDAsMV0pLGk9bmV3IERtKGUsNSk7WTAuc2V0SW5kZXgoWzAsMSwyLDAsMiwzXSksWTAuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEltKGksMywwLCExKSksWTAuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEltKGksMiwzLCExKSl9dGhpcy5nZW9tZXRyeT1ZMCx0aGlzLm1hdGVyaWFsPXZvaWQgMCE9PXQ/dDpuZXcgTEksdGhpcy5jZW50ZXI9bmV3ICRlKC41LC41KX1yYXljYXN0KHQsZSl7bnVsbD09PXQuY2FtZXJhJiZjb25zb2xlLmVycm9yKCdUSFJFRS5TcHJpdGU6ICJSYXljYXN0ZXIuY2FtZXJhIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyksWDAuc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpLEV0ZS5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxRMC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJiExPT09dGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb24mJlgwLm11bHRpcGx5U2NhbGFyKC1RMC56KTtsZXQgcixvLGk9dGhpcy5tYXRlcmlhbC5yb3RhdGlvbjswIT09aSYmKG89TWF0aC5jb3MoaSkscj1NYXRoLnNpbihpKSk7bGV0IGE9dGhpcy5jZW50ZXI7dUkoY0kuc2V0KC0uNSwtLjUsMCksUTAsYSxYMCxyLG8pLHVJKGd4LnNldCguNSwtLjUsMCksUTAsYSxYMCxyLG8pLHVJKGRJLnNldCguNSwuNSwwKSxRMCxhLFgwLHIsbyksTmVlLnNldCgwLDApLGZCLnNldCgxLDApLEJlZS5zZXQoMSwxKTtsZXQgcz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShjSSxneCxkSSwhMSxteCk7aWYobnVsbD09PXMmJih1SShneC5zZXQoLS41LC41LDApLFEwLGEsWDAscixvKSxmQi5zZXQoMCwxKSxzPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKGNJLGRJLGd4LCExLG14KSxudWxsPT09cykpcmV0dXJuO2xldCBsPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKG14KTtsPHQubmVhcnx8bD50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTpsLHBvaW50Om14LmNsb25lKCksdXY6anIuZ2V0VVYobXgsY0ksZ3gsZEksTmVlLGZCLEJlZSxuZXcgJGUpLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdm9pZCAwIT09dC5jZW50ZXImJnRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzfX0pLnByb3RvdHlwZS5pc1Nwcml0ZT0hMDt2YXIgVmVlPW5ldyAkLEhlZT1uZXcgS2ksemVlPW5ldyBLaSxrRmU9bmV3ICQsVWVlPW5ldyBNbixOST1jbGFzcyBleHRlbmRzIGNve2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNraW5uZWRNZXNoIix0aGlzLmJpbmRNb2RlPSJhdHRhY2hlZCIsdGhpcy5iaW5kTWF0cml4PW5ldyBNbix0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBNbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQsZSl7dGhpcy5za2VsZXRvbj10LHZvaWQgMD09PWUmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksZT10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShlKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoZSkuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7bGV0IHQ9bmV3IEtpLGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBpPTAscj1lLmNvdW50O2k8cjtpKyspe3QueD1lLmdldFgoaSksdC55PWUuZ2V0WShpKSx0Lno9ZS5nZXRaKGkpLHQudz1lLmdldFcoaSk7bGV0IG89MS90Lm1hbmhhdHRhbkxlbmd0aCgpO28hPT0xLzA/dC5tdWx0aXBseVNjYWxhcihvKTp0LnNldCgxLDAsMCwwKSxlLnNldFhZWlcoaSx0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSwiYXR0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6ImRldGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxlKXtsZXQgaT10aGlzLnNrZWxldG9uLHI9dGhpcy5nZW9tZXRyeTtIZWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbkluZGV4LHQpLHplZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luV2VpZ2h0LHQpLFZlZS5jb3B5KGUpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLGUuc2V0KDAsMCwwKTtmb3IobGV0IG89MDtvPDQ7bysrKXtsZXQgYT16ZWUuZ2V0Q29tcG9uZW50KG8pO2lmKDAhPT1hKXtsZXQgcz1IZWUuZ2V0Q29tcG9uZW50KG8pO1VlZS5tdWx0aXBseU1hdHJpY2VzKGkuYm9uZXNbc10ubWF0cml4V29ybGQsaS5ib25lSW52ZXJzZXNbc10pLGUuYWRkU2NhbGVkVmVjdG9yKGtGZS5jb3B5KFZlZSkuYXBwbHlNYXRyaXg0KFVlZSksYSl9fXJldHVybiBlLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19O05JLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwLGNsYXNzIGV4dGVuZHMgeml7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fS5wcm90b3R5cGUuaXNCb25lPSEwLGNsYXNzIGV4dGVuZHMgdW97Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscixvLGEscyxsLGM9Ym8sZD1ibyx1LHApe3N1cGVyKG51bGwsYSxzLGwsYyxkLHIsbyx1LHApLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppfSx0aGlzLm1hZ0ZpbHRlcj1jLHRoaXMubWluRmlsdGVyPWQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmU9ITA7dmFyIE54PWNsYXNzIGV4dGVuZHMgQXJ7Y29uc3RydWN0b3IodCxlLGkscj0xKXsibnVtYmVyIj09dHlwZW9mIGkmJihyPWksaT0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBub3JtYWxpemVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4iKSksc3VwZXIodCxlLGkpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1yfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0Lm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHQuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITAsdH19O054LnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgamVlPW5ldyBNbixHZWU9bmV3IE1uLHBJPVtdLF94PW5ldyBjbzsoY2xhc3MgZXh0ZW5kcyBjb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmluc3RhbmNlTWF0cml4PW5ldyBOeChuZXcgRmxvYXQzMkFycmF5KDE2KmkpLDE2KSx0aGlzLmluc3RhbmNlQ29sb3I9bnVsbCx0aGlzLmNvdW50PWksdGhpcy5mcnVzdHVtQ3VsbGVkPSExfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZU1hdHJpeC5jb3B5KHQuaW5zdGFuY2VNYXRyaXgpLG51bGwhPT10Lmluc3RhbmNlQ29sb3ImJih0aGlzLmluc3RhbmNlQ29sb3I9dC5pbnN0YW5jZUNvbG9yLmNsb25lKCkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzfWdldENvbG9yQXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlQ29sb3IuYXJyYXksMyp0KX1nZXRNYXRyaXhBdCh0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksMTYqdCl9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMubWF0cml4V29ybGQscj10aGlzLmNvdW50O2lmKF94Lmdlb21ldHJ5PXRoaXMuZ2VvbWV0cnksX3gubWF0ZXJpYWw9dGhpcy5tYXRlcmlhbCx2b2lkIDAhPT1feC5tYXRlcmlhbClmb3IobGV0IG89MDtvPHI7bysrKXt0aGlzLmdldE1hdHJpeEF0KG8samVlKSxHZWUubXVsdGlwbHlNYXRyaWNlcyhpLGplZSksX3gubWF0cml4V29ybGQ9R2VlLF94LnJheWNhc3QodCxwSSk7Zm9yKGxldCBhPTAscz1wSS5sZW5ndGg7YTxzO2ErKyl7bGV0IGw9cElbYV07bC5pbnN0YW5jZUlkPW8sbC5vYmplY3Q9dGhpcyxlLnB1c2gobCl9cEkubGVuZ3RoPTB9fXNldENvbG9yQXQodCxlKXtudWxsPT09dGhpcy5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPW5ldyBOeChuZXcgRmxvYXQzMkFycmF5KDMqdGhpcy5pbnN0YW5jZU1hdHJpeC5jb3VudCksMykpLGUudG9BcnJheSh0aGlzLmluc3RhbmNlQ29sb3IuYXJyYXksMyp0KX1zZXRNYXRyaXhBdCh0LGUpe2UudG9BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LDE2KnQpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pLnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIFdkPWNsYXNzIGV4dGVuZHMgUm97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O1dkLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBXZWU9bmV3ICQscWVlPW5ldyAkLFllZT1uZXcgTW4sbUI9bmV3IFNwLGZJPW5ldyB3cCxCeD1jbGFzcyBleHRlbmRzIHppe2NvbnN0cnVjdG9yKHQ9bmV3IFdpLGU9bmV3IFdkKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVswXTtmb3IobGV0IHI9MSxvPWUuY291bnQ7cjxvO3IrKylXZWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHItMSkscWVlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxpW3JdPWlbci0xXSxpW3JdKz1XZWUuZGlzdGFuY2VUbyhxZWUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBCcihpLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRyaXhXb3JsZCxvPXQucGFyYW1zLkxpbmUudGhyZXNob2xkLGE9aS5kcmF3UmFuZ2U7aWYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksZkkuY29weShpLmJvdW5kaW5nU3BoZXJlKSxmSS5hcHBseU1hdHJpeDQociksZkkucmFkaXVzKz1vLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShmSSkpcmV0dXJuO1llZS5jb3B5KHIpLmludmVydCgpLG1CLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChZZWUpO2xldCBzPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1zKnMsYz1uZXcgJCxkPW5ldyAkLHU9bmV3ICQscD1uZXcgJCxmPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IG09aS5pbmRleCxNPWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09bSlmb3IobGV0IFI9TWF0aC5tYXgoMCxhLnN0YXJ0KSxBPU1hdGgubWluKG0uY291bnQsYS5zdGFydCthLmNvdW50KS0xO1I8QTtSKz1mKXtsZXQgSD1tLmdldFgoUiksdGU9bS5nZXRYKFIrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKE0sSCksZC5mcm9tQnVmZmVyQXR0cmlidXRlKE0sdGUpLG1CLmRpc3RhbmNlU3FUb1NlZ21lbnQoYyxkLHAsdSk+bCljb250aW51ZTtwLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgQ2U9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8ocCk7Q2U8dC5uZWFyfHxDZT50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTpDZSxwb2ludDp1LmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OlIsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9ZWxzZSBmb3IobGV0IFI9TWF0aC5tYXgoMCxhLnN0YXJ0KSxBPU1hdGgubWluKE0uY291bnQsYS5zdGFydCthLmNvdW50KS0xO1I8QTtSKz1mKXtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoTSxSKSxkLmZyb21CdWZmZXJBdHRyaWJ1dGUoTSxSKzEpLG1CLmRpc3RhbmNlU3FUb1NlZ21lbnQoYyxkLHAsdSk+bCljb250aW51ZTtwLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgdGU9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8ocCk7dGU8dC5uZWFyfHx0ZT50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTp0ZSxwb2ludDp1LmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OlIsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9fWVsc2UgaS5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYodm9pZCAwIT09cil7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O0J4LnByb3RvdHlwZS5pc0xpbmU9ITA7dmFyIFhlZT1uZXcgJCxRZWU9bmV3ICQsVng9Y2xhc3MgZXh0ZW5kcyBCeHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVtdO2ZvcihsZXQgcj0wLG89ZS5jb3VudDtyPG87cis9MilYZWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIpLFFlZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUscisxKSxpW3JdPTA9PT1yPzA6aVtyLTFdLGlbcisxXT1pW3JdK1hlZS5kaXN0YW5jZVRvKFFlZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IEJyKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX07VngucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzPSEwLGNsYXNzIGV4dGVuZHMgQnh7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZUxvb3AifX0ucHJvdG90eXBlLmlzTGluZUxvb3A9ITA7dmFyIEJJPWNsYXNzIGV4dGVuZHMgUm97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O0JJLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO3ZhciBaZWU9bmV3IE1uLFZCPW5ldyBTcCxtST1uZXcgd3AsaEk9bmV3ICQ7ZnVuY3Rpb24gS2VlKG4sdCxlLGkscixvLGEpe2xldCBzPVZCLmRpc3RhbmNlU3FUb1BvaW50KG4pO2lmKHM8ZSl7bGV0IGw9bmV3ICQ7VkIuY2xvc2VzdFBvaW50VG9Qb2ludChuLGwpLGwuYXBwbHlNYXRyaXg0KGkpO2xldCBjPXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGwpO2lmKGM8ci5uZWFyfHxjPnIuZmFyKXJldHVybjtvLnB1c2goe2Rpc3RhbmNlOmMsZGlzdGFuY2VUb1JheTpNYXRoLnNxcnQocykscG9pbnQ6bCxpbmRleDp0LGZhY2U6bnVsbCxvYmplY3Q6YX0pfX0oY2xhc3MgZXh0ZW5kcyB6aXtjb25zdHJ1Y3Rvcih0PW5ldyBXaSxlPW5ldyBCSSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50cyIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRyaXhXb3JsZCxvPXQucGFyYW1zLlBvaW50cy50aHJlc2hvbGQsYT1pLmRyYXdSYW5nZTtpZihudWxsPT09aS5ib3VuZGluZ1NwaGVyZSYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxtSS5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLG1JLmFwcGx5TWF0cml4NChyKSxtSS5yYWRpdXMrPW8sITE9PT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKG1JKSlyZXR1cm47WmVlLmNvcHkocikuaW52ZXJ0KCksVkIuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KFplZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcztpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPWkuaW5kZXgsdT1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PWMpZm9yKGxldCBtPU1hdGgubWF4KDAsYS5zdGFydCkseT1NYXRoLm1pbihjLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7bTx5O20rKyl7bGV0IE09Yy5nZXRYKG0pO2hJLmZyb21CdWZmZXJBdHRyaWJ1dGUodSxNKSxLZWUoaEksTSxsLHIsdCxlLHRoaXMpfWVsc2UgZm9yKGxldCBtPU1hdGgubWF4KDAsYS5zdGFydCkseT1NYXRoLm1pbih1LmNvdW50LGEuc3RhcnQrYS5jb3VudCk7bTx5O20rKyloSS5mcm9tQnVmZmVyQXR0cmlidXRlKHUsbSksS2VlKGhJLG0sbCxyLHQsZSx0aGlzKX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7bzxhO28rKyl7bGV0IHM9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19KS5wcm90b3R5cGUuaXNQb2ludHM9ITAsY2xhc3MgZXh0ZW5kcyB1b3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8sYSxzLGwsYyl7c3VwZXIodCxlLGkscixvLGEscyxsLGMpLHRoaXMubWluRmlsdGVyPXZvaWQgMCE9PWE/YTpyYSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1vP286cmEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7bGV0IGQ9dGhpczsicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soZnVuY3Rpb24gdSgpe2QubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKHUpfSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtsZXQgdD10aGlzLmltYWdlOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQ9PTAmJnQucmVhZHlTdGF0ZT49dC5IQVZFX0NVUlJFTlRfREFUQSYmKHRoaXMubmVlZHNVcGRhdGU9ITApfX0ucHJvdG90eXBlLmlzVmlkZW9UZXh0dXJlPSEwLGNsYXNzIGV4dGVuZHMgdW97Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHt3aWR0aDp0LGhlaWdodDplfSksdGhpcy5mb3JtYXQ9aSx0aGlzLm1hZ0ZpbHRlcj1ibyx0aGlzLm1pbkZpbHRlcj1ibyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfX0ucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlPSEwLGNsYXNzIGV4dGVuZHMgdW97Y29uc3RydWN0b3IodCxlLGkscixvLGEscyxsLGMsZCx1LHApe3N1cGVyKG51bGwsYSxzLGwsYyxkLHIsbyx1LHApLHRoaXMuaW1hZ2U9e3dpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fS5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIHVve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxhLHMsbCxjKXtzdXBlcih0LGUsaSxyLG8sYSxzLGwsYyksdGhpcy5uZWVkc1VwZGF0ZT0hMH19LnByb3RvdHlwZS5pc0NhbnZhc1RleHR1cmU9ITA7dmFyIHBfPWNsYXNzIGV4dGVuZHMgV2l7Y29uc3RydWN0b3IodD0xLGU9OCxpPTAscj0yKk1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJDaXJjbGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxzZWdtZW50czplLHRoZXRhU3RhcnQ6aSx0aGV0YUxlbmd0aDpyfSxlPU1hdGgubWF4KDMsZSk7bGV0IG89W10sYT1bXSxzPVtdLGw9W10sYz1uZXcgJCxkPW5ldyAkZTthLnB1c2goMCwwLDApLHMucHVzaCgwLDAsMSksbC5wdXNoKC41LC41KTtmb3IobGV0IHU9MCxwPTM7dTw9ZTt1KysscCs9Myl7bGV0IGY9aSt1L2UqcjtjLng9dCpNYXRoLmNvcyhmKSxjLnk9dCpNYXRoLnNpbihmKSxhLnB1c2goYy54LGMueSxjLnopLHMucHVzaCgwLDAsMSksZC54PShhW3BdL3QrMSkvMixkLnk9KGFbcCsxXS90KzEpLzIsbC5wdXNoKGQueCxkLnkpfWZvcihsZXQgdT0xO3U8PWU7dSsrKW8ucHVzaCh1LHUrMSwwKTt0aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEJyKGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBCcihzLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBCcihsLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBwXyh0LnJhZGl1cyx0LnNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LFphPShuZXcgJCxuZXcgJCxuZXcgJCxuZXcganIsY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IkN1cnZlIix0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9Z2V0UG9pbnQoKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLmdldFBvaW50KCkgbm90IGltcGxlbWVudGVkLiIpLG51bGx9Z2V0UG9pbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0UG9pbnQoaSxlKX1nZXRQb2ludHModD01KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gZX1nZXRTcGFjZWRQb2ludHModD01KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludEF0KGkvdCkpO3JldHVybiBlfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfWdldExlbmd0aHModD10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyl7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PXQrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7bGV0IGksZT1bXSxyPXRoaXMuZ2V0UG9pbnQoMCksbz0wO2UucHVzaCgwKTtmb3IobGV0IGE9MTthPD10O2ErKylpPXRoaXMuZ2V0UG9pbnQoYS90KSxvKz1pLmRpc3RhbmNlVG8ociksZS5wdXNoKG8pLHI9aTtyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM9ZSxlfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuZ2V0TGVuZ3RocygpfWdldFV0b1RtYXBwaW5nKHQsZSl7bGV0IGEsaT10aGlzLmdldExlbmd0aHMoKSxyPTAsbz1pLmxlbmd0aDthPWV8fHQqaVtvLTFdO2xldCBjLHM9MCxsPW8tMTtmb3IoO3M8PWw7KWlmKHI9TWF0aC5mbG9vcihzKyhsLXMpLzIpLGM9aVtyXS1hLGM8MClzPXIrMTtlbHNle2lmKCEoYz4wKSl7bD1yO2JyZWFrfWw9ci0xfWlmKHI9bCxpW3JdPT09YSlyZXR1cm4gci8oby0xKTtsZXQgZD1pW3JdO3JldHVybihyKyhhLWQpLyhpW3IrMV0tZCkpLyhvLTEpfWdldFRhbmdlbnQodCxlKXtsZXQgcj10LTFlLTQsbz10KzFlLTQ7cjwwJiYocj0wKSxvPjEmJihvPTEpO2xldCBhPXRoaXMuZ2V0UG9pbnQocikscz10aGlzLmdldFBvaW50KG8pLGw9ZXx8KGEuaXNWZWN0b3IyP25ldyAkZTpuZXcgJCk7cmV0dXJuIGwuY29weShzKS5zdWIoYSkubm9ybWFsaXplKCksbH1nZXRUYW5nZW50QXQodCxlKXtsZXQgaT10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFRhbmdlbnQoaSxlKX1jb21wdXRlRnJlbmV0RnJhbWVzKHQsZSl7bGV0IGk9bmV3ICQscj1bXSxvPVtdLGE9W10scz1uZXcgJCxsPW5ldyBNbjtmb3IobGV0IGY9MDtmPD10O2YrKylyW2ZdPXRoaXMuZ2V0VGFuZ2VudEF0KGYvdCxuZXcgJCk7b1swXT1uZXcgJCxhWzBdPW5ldyAkO2xldCBjPU51bWJlci5NQVhfVkFMVUUsZD1NYXRoLmFicyhyWzBdLngpLHU9TWF0aC5hYnMoclswXS55KSxwPU1hdGguYWJzKHJbMF0ueik7ZDw9YyYmKGM9ZCxpLnNldCgxLDAsMCkpLHU8PWMmJihjPXUsaS5zZXQoMCwxLDApKSxwPD1jJiZpLnNldCgwLDAsMSkscy5jcm9zc1ZlY3RvcnMoclswXSxpKS5ub3JtYWxpemUoKSxvWzBdLmNyb3NzVmVjdG9ycyhyWzBdLHMpLGFbMF0uY3Jvc3NWZWN0b3JzKHJbMF0sb1swXSk7Zm9yKGxldCBmPTE7Zjw9dDtmKyspe2lmKG9bZl09b1tmLTFdLmNsb25lKCksYVtmXT1hW2YtMV0uY2xvbmUoKSxzLmNyb3NzVmVjdG9ycyhyW2YtMV0scltmXSkscy5sZW5ndGgoKT5OdW1iZXIuRVBTSUxPTil7cy5ub3JtYWxpemUoKTtsZXQgbT1NYXRoLmFjb3MoWGEocltmLTFdLmRvdChyW2ZdKSwtMSwxKSk7b1tmXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHMsbSkpfWFbZl0uY3Jvc3NWZWN0b3JzKHJbZl0sb1tmXSl9aWYoITA9PT1lKXtsZXQgZj1NYXRoLmFjb3MoWGEob1swXS5kb3Qob1t0XSksLTEsMSkpO2YvPXQsclswXS5kb3Qocy5jcm9zc1ZlY3RvcnMob1swXSxvW3RdKSk+MCYmKGY9LWYpO2ZvcihsZXQgbT0xO208PXQ7bSsrKW9bbV0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhyW21dLGYqbSkpLGFbbV0uY3Jvc3NWZWN0b3JzKHJbbV0sb1ttXSl9cmV0dXJue3RhbmdlbnRzOnIsbm9ybWFsczpvLGJpbm9ybWFsczphfX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O3JldHVybiB0LmFyY0xlbmd0aERpdmlzaW9ucz10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyx0LnR5cGU9dGhpcy50eXBlLHR9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSksZl89Y2xhc3MgZXh0ZW5kcyBaYXtjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MSxyPTEsbz0wLGE9MipNYXRoLlBJLHM9ITEsbD0wKXtzdXBlcigpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXQsdGhpcy5hWT1lLHRoaXMueFJhZGl1cz1pLHRoaXMueVJhZGl1cz1yLHRoaXMuYVN0YXJ0QW5nbGU9byx0aGlzLmFFbmRBbmdsZT1hLHRoaXMuYUNsb2Nrd2lzZT1zLHRoaXMuYVJvdGF0aW9uPWx9Z2V0UG9pbnQodCxlKXtsZXQgaT1lfHxuZXcgJGUscj0yKk1hdGguUEksbz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLGE9TWF0aC5hYnMobyk8TnVtYmVyLkVQU0lMT047Zm9yKDtvPDA7KW8rPXI7Zm9yKDtvPnI7KW8tPXI7bzxOdW1iZXIuRVBTSUxPTiYmKG89YT8wOnIpLCEwPT09dGhpcy5hQ2xvY2t3aXNlJiYhYSYmKG89PT1yP289LXI6by09cik7bGV0IHM9dGhpcy5hU3RhcnRBbmdsZSt0Km8sbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhzKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKHMpO2lmKDAhPT10aGlzLmFSb3RhdGlvbil7bGV0IGQ9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLHU9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLHA9bC10aGlzLmFYLGY9Yy10aGlzLmFZO2w9cCpkLWYqdSt0aGlzLmFYLGM9cCp1K2YqZCt0aGlzLmFZfXJldHVybiBpLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O2ZfLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgVkk9Y2xhc3MgZXh0ZW5kcyBmX3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8sYSl7c3VwZXIodCxlLGksaSxyLG8sYSksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTtmdW5jdGlvbiBCVigpe2xldCBuPTAsdD0wLGU9MCxpPTA7ZnVuY3Rpb24gcihvLGEscyxsKXtuPW8sdD1zLGU9LTMqbyszKmEtMipzLWwsaT0yKm8tMiphK3MrbH1yZXR1cm57aW5pdENhdG11bGxSb206ZnVuY3Rpb24obyxhLHMsbCxjKXtyKGEscyxjKihzLW8pLGMqKGwtYSkpfSxpbml0Tm9udW5pZm9ybUNhdG11bGxSb206ZnVuY3Rpb24obyxhLHMsbCxjLGQsdSl7bGV0IHA9KGEtbykvYy0ocy1vKS8oYytkKSsocy1hKS9kLGY9KHMtYSkvZC0obC1hKS8oZCt1KSsobC1zKS91O3AqPWQsZio9ZCxyKGEscyxwLGYpfSxjYWxjOmZ1bmN0aW9uKG8pe2xldCBhPW8qbztyZXR1cm4gbit0Km8rZSphK2kqKGEqbyl9fX1WSS5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDt2YXIgZ0k9bmV3ICQsaEI9bmV3IEJWLGdCPW5ldyBCVixfQj1uZXcgQlYsSEk9Y2xhc3MgZXh0ZW5kcyBaYXtjb25zdHJ1Y3Rvcih0PVtdLGU9ITEsaT0iY2VudHJpcGV0YWwiLHI9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPWUsdGhpcy5jdXJ2ZVR5cGU9aSx0aGlzLnRlbnNpb249cn1nZXRQb2ludCh0LGU9bmV3ICQpe2xldCBjLGQsaT1lLHI9dGhpcy5wb2ludHMsbz1yLmxlbmd0aCxhPShvLSh0aGlzLmNsb3NlZD8wOjEpKSp0LHM9TWF0aC5mbG9vcihhKSxsPWEtczt0aGlzLmNsb3NlZD9zKz1zPjA/MDooTWF0aC5mbG9vcihNYXRoLmFicyhzKS9vKSsxKSpvOjA9PT1sJiZzPT09by0xJiYocz1vLTIsbD0xKSx0aGlzLmNsb3NlZHx8cz4wP2M9clsocy0xKSVvXTooZ0kuc3ViVmVjdG9ycyhyWzBdLHJbMV0pLmFkZChyWzBdKSxjPWdJKTtsZXQgdT1yW3Mlb10scD1yWyhzKzEpJW9dO2lmKHRoaXMuY2xvc2VkfHxzKzI8bz9kPXJbKHMrMiklb106KGdJLnN1YlZlY3RvcnMocltvLTFdLHJbby0yXSkuYWRkKHJbby0xXSksZD1nSSksImNlbnRyaXBldGFsIj09PXRoaXMuY3VydmVUeXBlfHwiY2hvcmRhbCI9PT10aGlzLmN1cnZlVHlwZSl7bGV0IGY9ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGU/LjU6LjI1LG09TWF0aC5wb3coYy5kaXN0YW5jZVRvU3F1YXJlZCh1KSxmKSx5PU1hdGgucG93KHUuZGlzdGFuY2VUb1NxdWFyZWQocCksZiksTT1NYXRoLnBvdyhwLmRpc3RhbmNlVG9TcXVhcmVkKGQpLGYpO3k8MWUtNCYmKHk9MSksbTwxZS00JiYobT15KSxNPDFlLTQmJihNPXkpLGhCLmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLngsdS54LHAueCxkLngsbSx5LE0pLGdCLmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnksdS55LHAueSxkLnksbSx5LE0pLF9CLmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnosdS56LHAueixkLnosbSx5LE0pfWVsc2UiY2F0bXVsbHJvbSI9PT10aGlzLmN1cnZlVHlwZSYmKGhCLmluaXRDYXRtdWxsUm9tKGMueCx1LngscC54LGQueCx0aGlzLnRlbnNpb24pLGdCLmluaXRDYXRtdWxsUm9tKGMueSx1LnkscC55LGQueSx0aGlzLnRlbnNpb24pLF9CLmluaXRDYXRtdWxsUm9tKGMueix1LnoscC56LGQueix0aGlzLnRlbnNpb24pKTtyZXR1cm4gaS5zZXQoaEIuY2FsYyhsKSxnQi5jYWxjKGwpLF9CLmNhbGMobCkpLGl9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5wb2ludHMubGVuZ3RoO2U8aTtlKyspdC5wb2ludHMucHVzaCh0aGlzLnBvaW50c1tlXS50b0FycmF5KCkpO3JldHVybiB0LmNsb3NlZD10aGlzLmNsb3NlZCx0LmN1cnZlVHlwZT10aGlzLmN1cnZlVHlwZSx0LnRlbnNpb249dGhpcy50ZW5zaW9uLHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3ICQpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc319O2Z1bmN0aW9uIEplZShuLHQsZSxpLHIpe2xldCBvPS41KihpLXQpLGE9LjUqKHItZSkscz1uKm47cmV0dXJuKDIqZS0yKmkrbythKSoobipzKSsoLTMqZSszKmktMipvLWEpKnMrbypuK2V9ZnVuY3Rpb24gTXgobix0LGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqdH0obix0KStmdW5jdGlvbihuLHQpe3JldHVybiAyKigxLW4pKm4qdH0obixlKStmdW5jdGlvbihuLHQpe3JldHVybiBuKm4qdH0obixpKX1mdW5jdGlvbiB3eChuLHQsZSxpLHIpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKmUqdH0obix0KStmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gMyplKmUqbip0fShuLGUpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIDMqKDEtbikqbipuKnR9KG4saSkrZnVuY3Rpb24obix0KXtyZXR1cm4gbipuKm4qdH0obixyKX1ISS5wcm90b3R5cGUuaXNDYXRtdWxsUm9tQ3VydmUzPSEwO3ZhciBIeD1jbGFzcyBleHRlbmRzIFphe2NvbnN0cnVjdG9yKHQ9bmV3ICRlLGU9bmV3ICRlLGk9bmV3ICRlLHI9bmV3ICRlKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgJGUpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBpLnNldCh3eCh0LHIueCxvLngsYS54LHMueCksd3godCxyLnksby55LGEueSxzLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O0h4LnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIHpJPWNsYXNzIGV4dGVuZHMgWmF7Y29uc3RydWN0b3IodD1uZXcgJCxlPW5ldyAkLGk9bmV3ICQscj1uZXcgJCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aSx0aGlzLnYzPXJ9Z2V0UG9pbnQodCxlPW5ldyAkKXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEsYT10aGlzLnYyLHM9dGhpcy52MztyZXR1cm4gaS5zZXQod3godCxyLngsby54LGEueCxzLngpLHd4KHQsci55LG8ueSxhLnkscy55KSx3eCh0LHIueixvLnosYS56LHMueikpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07ekkucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7dmFyIG1fPWNsYXNzIGV4dGVuZHMgWmF7Y29uc3RydWN0b3IodD1uZXcgJGUsZT1uZXcgJGUpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUiLHRoaXMudjE9dCx0aGlzLnYyPWV9Z2V0UG9pbnQodCxlPW5ldyAkZSl7bGV0IGk9ZTtyZXR1cm4gMT09PXQ/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWdldFRhbmdlbnQodCxlKXtsZXQgaT1lfHxuZXcgJGU7cmV0dXJuIGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTttXy5wcm90b3R5cGUuaXNMaW5lQ3VydmU9ITA7dmFyIHp4PWNsYXNzIGV4dGVuZHMgWmF7Y29uc3RydWN0b3IodD1uZXcgJGUsZT1uZXcgJGUsaT1uZXcgJGUpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyAkZSl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gaS5zZXQoTXgodCxyLngsby54LGEueCksTXgodCxyLnksby55LGEueSkpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07engucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmU9ITA7dmFyIFVJPWNsYXNzIGV4dGVuZHMgWmF7Y29uc3RydWN0b3IodD1uZXcgJCxlPW5ldyAkLGk9bmV3ICQpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gaS5zZXQoTXgodCxyLngsby54LGEueCksTXgodCxyLnksby55LGEueSksTXgodCxyLnosby56LGEueikpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07VUkucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3ZhciBVeD1jbGFzcyBleHRlbmRzIFphe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSIsdGhpcy5wb2ludHM9dH1nZXRQb2ludCh0LGU9bmV3ICRlKXtsZXQgaT1lLHI9dGhpcy5wb2ludHMsbz0oci5sZW5ndGgtMSkqdCxhPU1hdGguZmxvb3Iobykscz1vLWEsbD1yWzA9PT1hP2E6YS0xXSxjPXJbYV0sZD1yW2E+ci5sZW5ndGgtMj9yLmxlbmd0aC0xOmErMV0sdT1yW2E+ci5sZW5ndGgtMz9yLmxlbmd0aC0xOmErMl07cmV0dXJuIGkuc2V0KEplZShzLGwueCxjLngsZC54LHUueCksSmVlKHMsbC55LGMueSxkLnksdS55KSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0aGlzLnBvaW50cy5wdXNoKHQucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5wb2ludHMubGVuZ3RoO2U8aTtlKyspdC5wb2ludHMucHVzaCh0aGlzLnBvaW50c1tlXS50b0FycmF5KCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyAkZSkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpc319O1V4LnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBUdGU9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6VkksQ2F0bXVsbFJvbUN1cnZlMzpISSxDdWJpY0JlemllckN1cnZlOkh4LEN1YmljQmV6aWVyQ3VydmUzOnpJLEVsbGlwc2VDdXJ2ZTpmXyxMaW5lQ3VydmU6bV8sTGluZUN1cnZlMzpjbGFzcyBleHRlbmRzIFphe2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZTMiLHRoaXMuaXNMaW5lQ3VydmUzPSEwLHRoaXMudjE9dCx0aGlzLnYyPWV9Z2V0UG9pbnQodCxlPW5ldyAkKXtsZXQgaT1lO3JldHVybiAxPT09dD9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX0sUXVhZHJhdGljQmV6aWVyQ3VydmU6engsUXVhZHJhdGljQmV6aWVyQ3VydmUzOlVJLFNwbGluZUN1cnZlOlV4fSkscUI9Y2xhc3MgZXh0ZW5kcyBaYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDdXJ2ZVBhdGgiLHRoaXMuY3VydmVzPVtdLHRoaXMuYXV0b0Nsb3NlPSExfWFkZCh0KXt0aGlzLmN1cnZlcy5wdXNoKHQpfWNsb3NlUGF0aCgpe2xldCB0PXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLGU9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO3QuZXF1YWxzKGUpfHx0aGlzLmN1cnZlcy5wdXNoKG5ldyBtXyhlLHQpKX1nZXRQb2ludCh0LGUpe2xldCBpPXQqdGhpcy5nZXRMZW5ndGgoKSxyPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCksbz0wO2Zvcig7bzxyLmxlbmd0aDspe2lmKHJbb10+PWkpe2xldCBhPXJbb10taSxzPXRoaXMuY3VydmVzW29dLGw9cy5nZXRMZW5ndGgoKTtyZXR1cm4gcy5nZXRQb2ludEF0KDA9PT1sPzA6MS1hL2wsZSl9bysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLGU9MDtmb3IobGV0IGk9MCxyPXRoaXMuY3VydmVzLmxlbmd0aDtpPHI7aSsrKWUrPXRoaXMuY3VydmVzW2ldLmdldExlbmd0aCgpLHQucHVzaChlKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKSxlfWdldFBvaW50cyh0PTEyKXtsZXQgaSxlPVtdO2ZvcihsZXQgcj0wLG89dGhpcy5jdXJ2ZXM7cjxvLmxlbmd0aDtyKyspe2xldCBhPW9bcl0sbD1hLmdldFBvaW50cyhhJiZhLmlzRWxsaXBzZUN1cnZlPzIqdDphJiYoYS5pc0xpbmVDdXJ2ZXx8YS5pc0xpbmVDdXJ2ZTMpPzE6YSYmYS5pc1NwbGluZUN1cnZlP3QqYS5wb2ludHMubGVuZ3RoOnQpO2ZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKXtsZXQgZD1sW2NdO2kmJmkuZXF1YWxzKGQpfHwoZS5wdXNoKGQpLGk9ZCl9fXJldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5sZW5ndGg+MSYmIWVbZS5sZW5ndGgtMV0uZXF1YWxzKGVbMF0pJiZlLnB1c2goZVswXSksZX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10LmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl0aGlzLmN1cnZlcy5wdXNoKHQuY3VydmVzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QuYXV0b0Nsb3NlPXRoaXMuYXV0b0Nsb3NlLHQuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspdC5jdXJ2ZXMucHVzaCh0aGlzLmN1cnZlc1tlXS50b0pTT04oKSk7cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10LmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaCgobmV3IFR0ZVtyLnR5cGVdKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxqeD1jbGFzcyBleHRlbmRzIHFCe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgJGUsdCYmdGhpcy5zZXRGcm9tUG9pbnRzKHQpfXNldEZyb21Qb2ludHModCl7dGhpcy5tb3ZlVG8odFswXS54LHRbMF0ueSk7Zm9yKGxldCBlPTEsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMubGluZVRvKHRbZV0ueCx0W2VdLnkpO3JldHVybiB0aGlzfW1vdmVUbyh0LGUpe3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfWxpbmVUbyh0LGUpe2xldCBpPW5ldyBtXyh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyAkZSh0LGUpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxlLGkscil7bGV0IG89bmV3IHp4KHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3ICRlKHQsZSksbmV3ICRlKGkscikpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKG8pLHRoaXMuY3VycmVudFBvaW50LnNldChpLHIpLHRoaXN9YmV6aWVyQ3VydmVUbyh0LGUsaSxyLG8sYSl7bGV0IHM9bmV3IEh4KHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3ICRlKHQsZSksbmV3ICRlKGksciksbmV3ICRlKG8sYSkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKHMpLHRoaXMuY3VycmVudFBvaW50LnNldChvLGEpLHRoaXN9c3BsaW5lVGhydSh0KXtsZXQgZT1bdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKV0uY29uY2F0KHQpLGk9bmV3IFV4KGUpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKGkpLHRoaXMuY3VycmVudFBvaW50LmNvcHkodFt0Lmxlbmd0aC0xXSksdGhpc31hcmModCxlLGkscixvLGEpe3JldHVybiB0aGlzLmFic2FyYyh0K3RoaXMuY3VycmVudFBvaW50LngsZSt0aGlzLmN1cnJlbnRQb2ludC55LGkscixvLGEpLHRoaXN9YWJzYXJjKHQsZSxpLHIsbyxhKXtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQsZSxpLGkscixvLGEpLHRoaXN9ZWxsaXBzZSh0LGUsaSxyLG8sYSxzLGwpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxpLHIsbyxhLHMsbCksdGhpc31hYnNlbGxpcHNlKHQsZSxpLHIsbyxhLHMsbCl7bGV0IGM9bmV3IGZfKHQsZSxpLHIsbyxhLHMsbCk7aWYodGhpcy5jdXJ2ZXMubGVuZ3RoPjApe2xldCB1PWMuZ2V0UG9pbnQoMCk7dS5lcXVhbHModGhpcy5jdXJyZW50UG9pbnQpfHx0aGlzLmxpbmVUbyh1LngsdS55KX10aGlzLmN1cnZlcy5wdXNoKGMpO2xldCBkPWMuZ2V0UG9pbnQoMSk7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LmNvcHkoZCksdGhpc31jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY3VycmVudFBvaW50LmNvcHkodC5jdXJyZW50UG9pbnQpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuY3VycmVudFBvaW50PXRoaXMuY3VycmVudFBvaW50LnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLmN1cnJlbnRQb2ludC5mcm9tQXJyYXkodC5jdXJyZW50UG9pbnQpLHRoaXN9fSxxZD1jbGFzcyBleHRlbmRzIGp4e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudXVpZD1RbCgpLHRoaXMudHlwZT0iU2hhcGUiLHRoaXMuaG9sZXM9W119Z2V0UG9pbnRzSG9sZXModCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj10aGlzLmhvbGVzLmxlbmd0aDtpPHI7aSsrKWVbaV09dGhpcy5ob2xlc1tpXS5nZXRQb2ludHModCk7cmV0dXJuIGV9ZXh0cmFjdFBvaW50cyh0KXtyZXR1cm57c2hhcGU6dGhpcy5nZXRQb2ludHModCksaG9sZXM6dGhpcy5nZXRQb2ludHNIb2xlcyh0KX19Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10LmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXRoaXMuaG9sZXMucHVzaCh0LmhvbGVzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QudXVpZD10aGlzLnV1aWQsdC5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuaG9sZXMubGVuZ3RoO2U8aTtlKyspdC5ob2xlcy5wdXNoKHRoaXMuaG9sZXNbZV0udG9KU09OKCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMudXVpZD10LnV1aWQsdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuaG9sZXNbZV07dGhpcy5ob2xlcy5wdXNoKChuZXcgangpLmZyb21KU09OKHIpKX1yZXR1cm4gdGhpc319O2Z1bmN0aW9uIER0ZShuLHQsZSxpLHIpe2xldCBvLGE7aWYocj09PWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTA7Zm9yKGxldCBvPXQsYT1lLWk7bzxlO28rPWkpcis9KG5bYV0tbltvXSkqKG5bbysxXStuW2ErMV0pLGE9bztyZXR1cm4gcn0obix0LGUsaSk+MClmb3Iobz10O288ZTtvKz1pKWE9JGVlKG8sbltvXSxuW28rMV0sYSk7ZWxzZSBmb3Iobz1lLWk7bz49dDtvLT1pKWE9JGVlKG8sbltvXSxuW28rMV0sYSk7cmV0dXJuIGEmJm5BKGEsYS5uZXh0KSYmKHF4KGEpLGE9YS5uZXh0KSxhfWZ1bmN0aW9uIFRwKG4sdCl7aWYoIW4pcmV0dXJuIG47dHx8KHQ9bik7bGV0IGksZT1uO2Rve2lmKGk9ITEsZS5zdGVpbmVyfHwhbkEoZSxlLm5leHQpJiYwIT09TnIoZS5wcmV2LGUsZS5uZXh0KSllPWUubmV4dDtlbHNle2lmKHF4KGUpLGU9dD1lLnByZXYsZT09PWUubmV4dClicmVhaztpPSEwfX13aGlsZShpfHxlIT09dCk7cmV0dXJuIHR9ZnVuY3Rpb24gR3gobix0LGUsaSxyLG8sYSl7aWYoIW4pcmV0dXJuOyFhJiZvJiZmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uO2Rve251bGw9PT1yLnomJihyLno9WUIoci54LHIueSx0LGUsaSkpLHIucHJldlo9ci5wcmV2LHIubmV4dFo9ci5uZXh0LHI9ci5uZXh0fXdoaWxlKHIhPT1uKTtyLnByZXZaLm5leHRaPW51bGwsci5wcmV2Wj1udWxsLGZ1bmN0aW9uKG4pe2xldCB0LGUsaSxyLG8sYSxzLGwsYz0xO2Rve2ZvcihlPW4sbj1udWxsLG89bnVsbCxhPTA7ZTspe2ZvcihhKyssaT1lLHM9MCx0PTA7dDxjJiYocysrLGk9aS5uZXh0WixpKTt0KyspO2ZvcihsPWM7cz4wfHxsPjAmJmk7KTAhPT1zJiYoMD09PWx8fCFpfHxlLno8PWkueik/KHI9ZSxlPWUubmV4dFoscy0tKToocj1pLGk9aS5uZXh0WixsLS0pLG8/by5uZXh0Wj1yOm49cixyLnByZXZaPW8sbz1yO2U9aX1vLm5leHRaPW51bGwsYyo9Mn13aGlsZShhPjEpfShyKX0obixpLHIsbyk7bGV0IGwsYyxzPW47Zm9yKDtuLnByZXYhPT1uLm5leHQ7KWlmKGw9bi5wcmV2LGM9bi5uZXh0LG8/VUZlKG4saSxyLG8pOnpGZShuKSl0LnB1c2gobC5pL2UpLHQucHVzaChuLmkvZSksdC5wdXNoKGMuaS9lKSxxeChuKSxuPWMubmV4dCxzPWMubmV4dDtlbHNlIGlmKChuPWMpPT09cyl7YT8xPT09YT9HeChuPWpGZShUcChuKSx0LGUpLHQsZSxpLHIsbywyKToyPT09YSYmR0ZlKG4sdCxlLGkscixvKTpHeChUcChuKSx0LGUsaSxyLG8sMSk7YnJlYWt9fWZ1bmN0aW9uIHpGZShuKXtsZXQgdD1uLnByZXYsZT1uLGk9bi5uZXh0O2lmKE5yKHQsZSxpKT49MClyZXR1cm4hMTtsZXQgcj1uLm5leHQubmV4dDtmb3IoO3IhPT1uLnByZXY7KXtpZihlXyh0LngsdC55LGUueCxlLnksaS54LGkueSxyLngsci55KSYmTnIoci5wcmV2LHIsci5uZXh0KT49MClyZXR1cm4hMTtyPXIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBVRmUobix0LGUsaSl7bGV0IHI9bi5wcmV2LG89bixhPW4ubmV4dDtpZihOcihyLG8sYSk+PTApcmV0dXJuITE7bGV0IGM9ci54Pm8ueD9yLng+YS54P3IueDphLng6by54PmEueD9vLng6YS54LGQ9ci55Pm8ueT9yLnk+YS55P3IueTphLnk6by55PmEueT9vLnk6YS55LHU9WUIoci54PG8ueD9yLng8YS54P3IueDphLng6by54PGEueD9vLng6YS54LHIueTxvLnk/ci55PGEueT9yLnk6YS55Om8ueTxhLnk/by55OmEueSx0LGUsaSkscD1ZQihjLGQsdCxlLGkpLGY9bi5wcmV2WixtPW4ubmV4dFo7Zm9yKDtmJiZmLno+PXUmJm0mJm0uejw9cDspe2lmKGYhPT1uLnByZXYmJmYhPT1uLm5leHQmJmVfKHIueCxyLnksby54LG8ueSxhLngsYS55LGYueCxmLnkpJiZOcihmLnByZXYsZixmLm5leHQpPj0wfHwoZj1mLnByZXZaLG0hPT1uLnByZXYmJm0hPT1uLm5leHQmJmVfKHIueCxyLnksby54LG8ueSxhLngsYS55LG0ueCxtLnkpJiZOcihtLnByZXYsbSxtLm5leHQpPj0wKSlyZXR1cm4hMTttPW0ubmV4dFp9Zm9yKDtmJiZmLno+PXU7KXtpZihmIT09bi5wcmV2JiZmIT09bi5uZXh0JiZlXyhyLngsci55LG8ueCxvLnksYS54LGEueSxmLngsZi55KSYmTnIoZi5wcmV2LGYsZi5uZXh0KT49MClyZXR1cm4hMTtmPWYucHJldlp9Zm9yKDttJiZtLno8PXA7KXtpZihtIT09bi5wcmV2JiZtIT09bi5uZXh0JiZlXyhyLngsci55LG8ueCxvLnksYS54LGEueSxtLngsbS55KSYmTnIobS5wcmV2LG0sbS5uZXh0KT49MClyZXR1cm4hMTttPW0ubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gakZlKG4sdCxlKXtsZXQgaT1uO2Rve2xldCByPWkucHJldixvPWkubmV4dC5uZXh0OyFuQShyLG8pJiZJdGUocixpLGkubmV4dCxvKSYmV3gocixvKSYmV3gobyxyKSYmKHQucHVzaChyLmkvZSksdC5wdXNoKGkuaS9lKSx0LnB1c2goby5pL2UpLHF4KGkpLHF4KGkubmV4dCksaT1uPW8pLGk9aS5uZXh0fXdoaWxlKGkhPT1uKTtyZXR1cm4gVHAoaSl9ZnVuY3Rpb24gR0ZlKG4sdCxlLGkscixvKXtsZXQgYT1uO2Rve2xldCBzPWEubmV4dC5uZXh0O2Zvcig7cyE9PWEucHJldjspe2lmKGEuaSE9PXMuaSYmJEZlKGEscykpe2xldCBsPUF0ZShhLHMpO3JldHVybiBhPVRwKGEsYS5uZXh0KSxsPVRwKGwsbC5uZXh0KSxHeChhLHQsZSxpLHIsbyksdm9pZCBHeChsLHQsZSxpLHIsbyl9cz1zLm5leHR9YT1hLm5leHR9d2hpbGUoYSE9PW4pfWZ1bmN0aW9uIHFGZShuLHQpe3JldHVybiBuLngtdC54fWZ1bmN0aW9uIFlGZShuLHQpe2lmKHQ9ZnVuY3Rpb24obix0KXtsZXQgYSxlPXQsaT1uLngscj1uLnksbz0tMS8wO2Rve2lmKHI8PWUueSYmcj49ZS5uZXh0LnkmJmUubmV4dC55IT09ZS55KXtsZXQgcD1lLngrKHItZS55KSooZS5uZXh0LngtZS54KS8oZS5uZXh0LnktZS55KTtpZihwPD1pJiZwPm8pe2lmKG89cCxwPT09aSl7aWYocj09PWUueSlyZXR1cm4gZTtpZihyPT09ZS5uZXh0LnkpcmV0dXJuIGUubmV4dH1hPWUueDxlLm5leHQueD9lOmUubmV4dH19ZT1lLm5leHR9d2hpbGUoZSE9PXQpO2lmKCFhKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiBhO2xldCB1LHM9YSxsPWEueCxjPWEueSxkPTEvMDtlPWE7ZG97aT49ZS54JiZlLng+PWwmJmkhPT1lLngmJmVfKHI8Yz9pOm8scixsLGMscjxjP286aSxyLGUueCxlLnkpJiYodT1NYXRoLmFicyhyLWUueSkvKGktZS54KSxXeChlLG4pJiYodTxkfHx1PT09ZCYmKGUueD5hLnh8fGUueD09PWEueCYmUUZlKGEsZSkpKSYmKGE9ZSxkPXUpKSxlPWUubmV4dH13aGlsZShlIT09cyk7cmV0dXJuIGF9KG4sdCksdCl7bGV0IGU9QXRlKHQsbik7VHAodCx0Lm5leHQpLFRwKGUsZS5uZXh0KX19ZnVuY3Rpb24gUUZlKG4sdCl7cmV0dXJuIE5yKG4ucHJldixuLHQucHJldik8MCYmTnIodC5uZXh0LG4sbi5uZXh0KTwwfWZ1bmN0aW9uIFlCKG4sdCxlLGkscil7cmV0dXJuKG49MTQzMTY1NTc2NSYoKG49ODU4OTkzNDU5Jigobj0yNTI2NDUxMzUmKChuPTE2NzExOTM1Jigobj0zMjc2Nyoobi1lKSpyKXxuPDw4KSl8bjw8NCkpfG48PDIpKXxuPDwxKSl8KHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1pKSpyKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSk8PDF9ZnVuY3Rpb24gSkZlKG4pe2xldCB0PW4sZT1uO2Rveyh0Lng8ZS54fHx0Lng9PT1lLngmJnQueTxlLnkpJiYoZT10KSx0PXQubmV4dH13aGlsZSh0IT09bik7cmV0dXJuIGV9ZnVuY3Rpb24gZV8obix0LGUsaSxyLG8sYSxzKXtyZXR1cm4oci1hKSoodC1zKS0obi1hKSooby1zKT49MCYmKG4tYSkqKGktcyktKGUtYSkqKHQtcyk+PTAmJihlLWEpKihvLXMpLShyLWEpKihpLXMpPj0wfWZ1bmN0aW9uICRGZShuLHQpe3JldHVybiBuLm5leHQuaSE9PXQuaSYmbi5wcmV2LmkhPT10LmkmJiFmdW5jdGlvbihuLHQpe2xldCBlPW47ZG97aWYoZS5pIT09bi5pJiZlLm5leHQuaSE9PW4uaSYmZS5pIT09dC5pJiZlLm5leHQuaSE9PXQuaSYmSXRlKGUsZS5uZXh0LG4sdCkpcmV0dXJuITA7ZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiExfShuLHQpJiYoV3gobix0KSYmV3godCxuKSYmZnVuY3Rpb24obix0KXtsZXQgZT1uLGk9ITEscj0obi54K3QueCkvMixvPShuLnkrdC55KS8yO2Rve2UueT5vIT1lLm5leHQueT5vJiZlLm5leHQueSE9PWUueSYmcjwoZS5uZXh0LngtZS54KSooby1lLnkpLyhlLm5leHQueS1lLnkpK2UueCYmKGk9IWkpLGU9ZS5uZXh0fXdoaWxlKGUhPT1uKTtyZXR1cm4gaX0obix0KSYmKE5yKG4ucHJldixuLHQucHJldil8fE5yKG4sdC5wcmV2LHQpKXx8bkEobix0KSYmTnIobi5wcmV2LG4sbi5uZXh0KT4wJiZOcih0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIE5yKG4sdCxlKXtyZXR1cm4odC55LW4ueSkqKGUueC10LngpLSh0Lngtbi54KSooZS55LXQueSl9ZnVuY3Rpb24gbkEobix0KXtyZXR1cm4gbi54PT09dC54JiZuLnk9PT10Lnl9ZnVuY3Rpb24gSXRlKG4sdCxlLGkpe2xldCByPXlJKE5yKG4sdCxlKSksbz15SShOcihuLHQsaSkpLGE9eUkoTnIoZSxpLG4pKSxzPXlJKE5yKGUsaSx0KSk7cmV0dXJuISEociE9PW8mJmEhPT1zfHwwPT09ciYmX0kobixlLHQpfHwwPT09byYmX0kobixpLHQpfHwwPT09YSYmX0koZSxuLGkpfHwwPT09cyYmX0koZSx0LGkpKX1mdW5jdGlvbiBfSShuLHQsZSl7cmV0dXJuIHQueDw9TWF0aC5tYXgobi54LGUueCkmJnQueD49TWF0aC5taW4obi54LGUueCkmJnQueTw9TWF0aC5tYXgobi55LGUueSkmJnQueT49TWF0aC5taW4obi55LGUueSl9ZnVuY3Rpb24geUkobil7cmV0dXJuIG4+MD8xOm48MD8tMTowfWZ1bmN0aW9uIFd4KG4sdCl7cmV0dXJuIE5yKG4ucHJldixuLG4ubmV4dCk8MD9OcihuLHQsbi5uZXh0KT49MCYmTnIobixuLnByZXYsdCk+PTA6TnIobix0LG4ucHJldik8MHx8TnIobixuLm5leHQsdCk8MH1mdW5jdGlvbiBBdGUobix0KXtsZXQgZT1uZXcgWEIobi5pLG4ueCxuLnkpLGk9bmV3IFhCKHQuaSx0LngsdC55KSxyPW4ubmV4dCxvPXQucHJldjtyZXR1cm4gbi5uZXh0PXQsdC5wcmV2PW4sZS5uZXh0PXIsci5wcmV2PWUsaS5uZXh0PWUsZS5wcmV2PWksby5uZXh0PWksaS5wcmV2PW8saX1mdW5jdGlvbiAkZWUobix0LGUsaSl7bGV0IHI9bmV3IFhCKG4sdCxlKTtyZXR1cm4gaT8oci5uZXh0PWkubmV4dCxyLnByZXY9aSxpLm5leHQucHJldj1yLGkubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gcXgobil7bi5uZXh0LnByZXY9bi5wcmV2LG4ucHJldi5uZXh0PW4ubmV4dCxuLnByZXZaJiYobi5wcmV2Wi5uZXh0Wj1uLm5leHRaKSxuLm5leHRaJiYobi5uZXh0Wi5wcmV2Wj1uLnByZXZaKX1mdW5jdGlvbiBYQihuLHQsZSl7dGhpcy5pPW4sdGhpcy54PXQsdGhpcy55PWUsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9dmFyIEdjPWNsYXNze3N0YXRpYyBhcmVhKHQpe2xldCBlPXQubGVuZ3RoLGk9MDtmb3IobGV0IHI9ZS0xLG89MDtvPGU7cj1vKyspaSs9dFtyXS54KnRbb10ueS10W29dLngqdFtyXS55O3JldHVybi41Kml9c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiBHYy5hcmVhKHQpPDB9c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUodCxlKXtsZXQgaT1bXSxyPVtdLG89W107ZXRlKHQpLHR0ZShpLHQpO2xldCBhPXQubGVuZ3RoO2UuZm9yRWFjaChldGUpO2ZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKXIucHVzaChhKSxhKz1lW2xdLmxlbmd0aCx0dGUoaSxlW2xdKTtsZXQgcz1mdW5jdGlvbihuLHQsZT0yKXtsZXQgcyxsLGMsZCx1LHAsZixpPXQmJnQubGVuZ3RoLHI9aT90WzBdKmU6bi5sZW5ndGgsbz1EdGUobiwwLHIsZSwhMCksYT1bXTtpZighb3x8by5uZXh0PT09by5wcmV2KXJldHVybiBhO2lmKGkmJihvPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCBvLGEscyxsLGMscj1bXTtmb3Iobz0wLGE9dC5sZW5ndGg7bzxhO28rKylzPXRbb10qaSxsPW88YS0xP3RbbysxXSppOm4ubGVuZ3RoLGM9RHRlKG4scyxsLGksITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLHIucHVzaChKRmUoYykpO2ZvcihyLnNvcnQocUZlKSxvPTA7bzxyLmxlbmd0aDtvKyspWUZlKHJbb10sZSksZT1UcChlLGUubmV4dCk7cmV0dXJuIGV9KG4sdCxvLGUpKSxuLmxlbmd0aD44MCplKXtzPWM9blswXSxsPWQ9blsxXTtmb3IobGV0IG09ZTttPHI7bSs9ZSl1PW5bbV0scD1uW20rMV0sdTxzJiYocz11KSxwPGwmJihsPXApLHU+YyYmKGM9dSkscD5kJiYoZD1wKTtmPU1hdGgubWF4KGMtcyxkLWwpLGY9MCE9PWY/MS9mOjB9cmV0dXJuIEd4KG8sYSxlLHMsbCxmKSxhfShpLHIpO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCs9MylvLnB1c2gocy5zbGljZShsLGwrMykpO3JldHVybiBvfX07ZnVuY3Rpb24gZXRlKG4pe2xldCB0PW4ubGVuZ3RoO3Q+MiYmblt0LTFdLmVxdWFscyhuWzBdKSYmbi5wb3AoKX1mdW5jdGlvbiB0dGUobix0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyluLnB1c2godFtlXS54KSxuLnB1c2godFtlXS55KX12YXIgRHA9Y2xhc3MgZXh0ZW5kcyBXaXtjb25zdHJ1Y3Rvcih0PW5ldyBxZChbbmV3ICRlKC41LC41KSxuZXcgJGUoLS41LC41KSxuZXcgJGUoLS41LC0uNSksbmV3ICRlKC41LC0uNSldKSxlPXt9KXtzdXBlcigpLHRoaXMudHlwZT0iRXh0cnVkZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczp0LG9wdGlvbnM6ZX0sdD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2xldCBpPXRoaXMscj1bXSxvPVtdO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrKylhKHRbc10pO2Z1bmN0aW9uIGEocyl7bGV0IGw9W10sYz12b2lkIDAhPT1lLmN1cnZlU2VnbWVudHM/ZS5jdXJ2ZVNlZ21lbnRzOjEyLGQ9dm9pZCAwIT09ZS5zdGVwcz9lLnN0ZXBzOjEsdT12b2lkIDAhPT1lLmRlcHRoP2UuZGVwdGg6MSxwPXZvaWQgMD09PWUuYmV2ZWxFbmFibGVkfHxlLmJldmVsRW5hYmxlZCxmPXZvaWQgMCE9PWUuYmV2ZWxUaGlja25lc3M/ZS5iZXZlbFRoaWNrbmVzczouMixtPXZvaWQgMCE9PWUuYmV2ZWxTaXplP2UuYmV2ZWxTaXplOmYtLjEseT12b2lkIDAhPT1lLmJldmVsT2Zmc2V0P2UuYmV2ZWxPZmZzZXQ6MCxNPXZvaWQgMCE9PWUuYmV2ZWxTZWdtZW50cz9lLmJldmVsU2VnbWVudHM6Myx2PWUuZXh0cnVkZVBhdGgseD12b2lkIDAhPT1lLlVWR2VuZXJhdG9yP2UuVVZHZW5lcmF0b3I6aTJlO3ZvaWQgMCE9PWUuYW1vdW50JiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLHU9ZS5hbW91bnQpO2xldCBSLEgsdGUsSyxDZSxBPSExO3YmJihSPXYuZ2V0U3BhY2VkUG9pbnRzKGQpLEE9ITAscD0hMSxIPXYuY29tcHV0ZUZyZW5ldEZyYW1lcyhkLCExKSx0ZT1uZXcgJCxLPW5ldyAkLENlPW5ldyAkKSxwfHwoTT0wLGY9MCxtPTAseT0wKTtsZXQgWmU9cy5leHRyYWN0UG9pbnRzKGMpLEllPVplLnNoYXBlLEk9WmUuaG9sZXM7aWYoIUdjLmlzQ2xvY2tXaXNlKEllKSl7SWU9SWUucmV2ZXJzZSgpO2ZvcihsZXQgb2U9MCxzdD1JLmxlbmd0aDtvZTxzdDtvZSsrKXtsZXQgWGU9SVtvZV07R2MuaXNDbG9ja1dpc2UoWGUpJiYoSVtvZV09WGUucmV2ZXJzZSgpKX19bGV0IGNlPUdjLnRyaWFuZ3VsYXRlU2hhcGUoSWUsSSksZmU9SWU7Zm9yKGxldCBvZT0wLHN0PUkubGVuZ3RoO29lPHN0O29lKyspSWU9SWUuY29uY2F0KElbb2VdKTtmdW5jdGlvbiBfZShvZSxzdCxYZSl7cmV0dXJuIHN0fHxjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IHZlYyBkb2VzIG5vdCBleGlzdCIpLHN0LmNsb25lKCkubXVsdGlwbHlTY2FsYXIoWGUpLmFkZChvZSl9bGV0IG5lPUllLmxlbmd0aCxkZT1jZS5sZW5ndGg7ZnVuY3Rpb24gdWUob2Usc3QsWGUpe2xldCBfdCxwdCxvbix3bj1vZS54LXN0LngsaWk9b2UueS1zdC55LExpPVhlLngtb2UueCxOaT1YZS55LW9lLnksWj13bip3bitpaSppaTtpZihNYXRoLmFicyh3bipOaS1paSpMaSk+TnVtYmVyLkVQU0lMT04pe2xldCBIZT1NYXRoLnNxcnQoWikseXQ9TWF0aC5zcXJ0KExpKkxpK05pKk5pKSxubj1zdC54LWlpL0hlLEJlPXN0Lnkrd24vSGUsTnQ9KChYZS54LU5pL3l0LW5uKSpOaS0oWGUueStMaS95dC1CZSkqTGkpLyh3bipOaS1paSpMaSk7X3Q9bm4rd24qTnQtb2UueCxwdD1CZStpaSpOdC1vZS55O2xldCBMdD1fdCpfdCtwdCpwdDtpZihMdDw9MilyZXR1cm4gbmV3ICRlKF90LHB0KTtvbj1NYXRoLnNxcnQoTHQvMil9ZWxzZXtsZXQgSGU9ITE7d24+TnVtYmVyLkVQU0lMT04/TGk+TnVtYmVyLkVQU0lMT04mJihIZT0hMCk6d248LU51bWJlci5FUFNJTE9OP0xpPC1OdW1iZXIuRVBTSUxPTiYmKEhlPSEwKTpNYXRoLnNpZ24oaWkpPT09TWF0aC5zaWduKE5pKSYmKEhlPSEwKSxIZT8oX3Q9LWlpLHB0PXduLG9uPU1hdGguc3FydChaKSk6KF90PXduLHB0PWlpLG9uPU1hdGguc3FydChaLzIpKX1yZXR1cm4gbmV3ICRlKF90L29uLHB0L29uKX1sZXQgR2U9W107Zm9yKGxldCBvZT0wLHN0PWZlLmxlbmd0aCxYZT1zdC0xLF90PW9lKzE7b2U8c3Q7b2UrKyxYZSsrLF90KyspWGU9PT1zdCYmKFhlPTApLF90PT09c3QmJihfdD0wKSxHZVtvZV09dWUoZmVbb2VdLGZlW1hlXSxmZVtfdF0pO2xldCBOZSxNZT1bXSxjdD1HZS5jb25jYXQoKTtmb3IobGV0IG9lPTAsc3Q9SS5sZW5ndGg7b2U8c3Q7b2UrKyl7bGV0IFhlPUlbb2VdO05lPVtdO2ZvcihsZXQgX3Q9MCxwdD1YZS5sZW5ndGgsb249cHQtMSx3bj1fdCsxO190PHB0O190Kyssb24rKyx3bisrKW9uPT09cHQmJihvbj0wKSx3bj09PXB0JiYod249MCksTmVbX3RdPXVlKFhlW190XSxYZVtvbl0sWGVbd25dKTtNZS5wdXNoKE5lKSxjdD1jdC5jb25jYXQoTmUpfWZvcihsZXQgb2U9MDtvZTxNO29lKyspe2xldCBzdD1vZS9NLFhlPWYqTWF0aC5jb3Moc3QqTWF0aC5QSS8yKSxfdD1tKk1hdGguc2luKHN0Kk1hdGguUEkvMikreTtmb3IobGV0IHB0PTAsb249ZmUubGVuZ3RoO3B0PG9uO3B0Kyspe2xldCB3bj1fZShmZVtwdF0sR2VbcHRdLF90KTtTdCh3bi54LHduLnksLVhlKX1mb3IobGV0IHB0PTAsb249SS5sZW5ndGg7cHQ8b247cHQrKyl7bGV0IHduPUlbcHRdO05lPU1lW3B0XTtmb3IobGV0IGlpPTAsTGk9d24ubGVuZ3RoO2lpPExpO2lpKyspe2xldCBOaT1fZSh3bltpaV0sTmVbaWldLF90KTtTdChOaS54LE5pLnksLVhlKX19fWxldCB3dD1tK3k7Zm9yKGxldCBvZT0wO29lPG5lO29lKyspe2xldCBzdD1wP19lKEllW29lXSxjdFtvZV0sd3QpOkllW29lXTtBPyhLLmNvcHkoSC5ub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihzdC54KSx0ZS5jb3B5KEguYmlub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihzdC55KSxDZS5jb3B5KFJbMF0pLmFkZChLKS5hZGQodGUpLFN0KENlLngsQ2UueSxDZS56KSk6U3Qoc3QueCxzdC55LDApfWZvcihsZXQgb2U9MTtvZTw9ZDtvZSsrKWZvcihsZXQgc3Q9MDtzdDxuZTtzdCsrKXtsZXQgWGU9cD9fZShJZVtzdF0sY3Rbc3RdLHd0KTpJZVtzdF07QT8oSy5jb3B5KEgubm9ybWFsc1tvZV0pLm11bHRpcGx5U2NhbGFyKFhlLngpLHRlLmNvcHkoSC5iaW5vcm1hbHNbb2VdKS5tdWx0aXBseVNjYWxhcihYZS55KSxDZS5jb3B5KFJbb2VdKS5hZGQoSykuYWRkKHRlKSxTdChDZS54LENlLnksQ2UueikpOlN0KFhlLngsWGUueSx1L2Qqb2UpfWZvcihsZXQgb2U9TS0xO29lPj0wO29lLS0pe2xldCBzdD1vZS9NLFhlPWYqTWF0aC5jb3Moc3QqTWF0aC5QSS8yKSxfdD1tKk1hdGguc2luKHN0Kk1hdGguUEkvMikreTtmb3IobGV0IHB0PTAsb249ZmUubGVuZ3RoO3B0PG9uO3B0Kyspe2xldCB3bj1fZShmZVtwdF0sR2VbcHRdLF90KTtTdCh3bi54LHduLnksdStYZSl9Zm9yKGxldCBwdD0wLG9uPUkubGVuZ3RoO3B0PG9uO3B0Kyspe2xldCB3bj1JW3B0XTtOZT1NZVtwdF07Zm9yKGxldCBpaT0wLExpPXduLmxlbmd0aDtpaTxMaTtpaSsrKXtsZXQgTmk9X2Uod25baWldLE5lW2lpXSxfdCk7QT9TdChOaS54LE5pLnkrUltkLTFdLnksUltkLTFdLngrWGUpOlN0KE5pLngsTmkueSx1K1hlKX19fWZ1bmN0aW9uIEFuKG9lLHN0KXtsZXQgWGU9b2UubGVuZ3RoO2Zvcig7LS1YZT49MDspe2xldCBfdD1YZSxwdD1YZS0xO3B0PDAmJihwdD1vZS5sZW5ndGgtMSk7Zm9yKGxldCBvbj0wLHduPWQrMipNO29uPHduO29uKyspe2xldCBpaT1uZSpvbixMaT1uZSoob24rMSk7dmUoc3QrX3QraWksc3QrcHQraWksc3QrcHQrTGksc3QrX3QrTGkpfX19ZnVuY3Rpb24gU3Qob2Usc3QsWGUpe2wucHVzaChvZSksbC5wdXNoKHN0KSxsLnB1c2goWGUpfWZ1bmN0aW9uIHJuKG9lLHN0LFhlKXtodChvZSksaHQoc3QpLGh0KFhlKTtsZXQgX3Q9ci5sZW5ndGgvMyxwdD14LmdlbmVyYXRlVG9wVVYoaSxyLF90LTMsX3QtMixfdC0xKTttdChwdFswXSksbXQocHRbMV0pLG10KHB0WzJdKX1mdW5jdGlvbiB2ZShvZSxzdCxYZSxfdCl7aHQob2UpLGh0KHN0KSxodChfdCksaHQoc3QpLGh0KFhlKSxodChfdCk7bGV0IHB0PXIubGVuZ3RoLzMsb249eC5nZW5lcmF0ZVNpZGVXYWxsVVYoaSxyLHB0LTYscHQtMyxwdC0yLHB0LTEpO210KG9uWzBdKSxtdChvblsxXSksbXQob25bM10pLG10KG9uWzFdKSxtdChvblsyXSksbXQob25bM10pfWZ1bmN0aW9uIGh0KG9lKXtyLnB1c2gobFszKm9lKzBdKSxyLnB1c2gobFszKm9lKzFdKSxyLnB1c2gobFszKm9lKzJdKX1mdW5jdGlvbiBtdChvZSl7by5wdXNoKG9lLngpLG8ucHVzaChvZS55KX0oZnVuY3Rpb24oKXtsZXQgb2U9ci5sZW5ndGgvMztpZihwKXtsZXQgc3Q9MCxYZT1uZSpzdDtmb3IobGV0IF90PTA7X3Q8ZGU7X3QrKyl7bGV0IHB0PWNlW190XTtybihwdFsyXStYZSxwdFsxXStYZSxwdFswXStYZSl9c3Q9ZCsyKk0sWGU9bmUqc3Q7Zm9yKGxldCBfdD0wO190PGRlO190Kyspe2xldCBwdD1jZVtfdF07cm4ocHRbMF0rWGUscHRbMV0rWGUscHRbMl0rWGUpfX1lbHNle2ZvcihsZXQgc3Q9MDtzdDxkZTtzdCsrKXtsZXQgWGU9Y2Vbc3RdO3JuKFhlWzJdLFhlWzFdLFhlWzBdKX1mb3IobGV0IHN0PTA7c3Q8ZGU7c3QrKyl7bGV0IFhlPWNlW3N0XTtybihYZVswXStuZSpkLFhlWzFdK25lKmQsWGVbMl0rbmUqZCl9fWkuYWRkR3JvdXAob2Usci5sZW5ndGgvMy1vZSwwKX0pKCksZnVuY3Rpb24oKXtsZXQgb2U9ci5sZW5ndGgvMyxzdD0wO0FuKGZlLHN0KSxzdCs9ZmUubGVuZ3RoO2ZvcihsZXQgWGU9MCxfdD1JLmxlbmd0aDtYZTxfdDtYZSsrKXtsZXQgcHQ9SVtYZV07QW4ocHQsc3QpLHN0Kz1wdC5sZW5ndGh9aS5hZGRHcm91cChvZSxyLmxlbmd0aC8zLW9lLDEpfSgpfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEJyKHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEJyKG8sMikpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2lmKGUuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBpPTAscj1uLmxlbmd0aDtpPHI7aSsrKWUuc2hhcGVzLnB1c2gobltpXS51dWlkKTtlbHNlIGUuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdm9pZCAwIT09dC5leHRydWRlUGF0aCYmKGUub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxlfSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2xldCBpPVtdO2ZvcihsZXQgbz0wLGE9dC5zaGFwZXMubGVuZ3RoO288YTtvKyspaS5wdXNoKGVbdC5zaGFwZXNbb11dKTtsZXQgcj10Lm9wdGlvbnMuZXh0cnVkZVBhdGg7cmV0dXJuIHZvaWQgMCE9PXImJih0Lm9wdGlvbnMuZXh0cnVkZVBhdGg9KG5ldyBUdGVbci50eXBlXSkuZnJvbUpTT04ocikpLG5ldyBEcChpLHQub3B0aW9ucyl9fSxpMmU9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgcz10WzMqaV0sbD10WzMqaSsxXSxjPXRbMypyXSxkPXRbMypyKzFdO3JldHVybltuZXcgJGUodFszKmVdLHRbMyplKzFdKSxuZXcgJGUocyxsKSxuZXcgJGUoYyxkKV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IGE9dFszKmVdLHM9dFszKmUrMV0sbD10WzMqZSsyXSxjPXRbMyppXSxkPXRbMyppKzFdLHU9dFszKmkrMl0scD10WzMqcl0sZj10WzMqcisxXSxtPXRbMypyKzJdLHk9dFszKm9dLE09dFszKm8rMV0sdj10WzMqbysyXTtyZXR1cm4gTWF0aC5hYnMocy1kKTxNYXRoLmFicyhhLWMpP1tuZXcgJGUoYSwxLWwpLG5ldyAkZShjLDEtdSksbmV3ICRlKHAsMS1tKSxuZXcgJGUoeSwxLXYpXTpbbmV3ICRlKHMsMS1sKSxuZXcgJGUoZCwxLXUpLG5ldyAkZShmLDEtbSksbmV3ICRlKE0sMS12KV19fSxBbT1jbGFzcyBleHRlbmRzIFdpe2NvbnN0cnVjdG9yKHQ9bmV3IHFkKFtuZXcgJGUoMCwuNSksbmV3ICRlKC0uNSwtLjUpLG5ldyAkZSguNSwtLjUpXSksZT0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czplfTtsZXQgaT1bXSxyPVtdLG89W10sYT1bXSxzPTAsbD0wO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSljKHQpO2Vsc2UgZm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspYyh0W2RdKSx0aGlzLmFkZEdyb3VwKHMsbCxkKSxzKz1sLGw9MDtmdW5jdGlvbiBjKGQpe2xldCB1PXIubGVuZ3RoLzMscD1kLmV4dHJhY3RQb2ludHMoZSksZj1wLnNoYXBlLG09cC5ob2xlczshMT09PUdjLmlzQ2xvY2tXaXNlKGYpJiYoZj1mLnJldmVyc2UoKSk7Zm9yKGxldCBNPTAsdj1tLmxlbmd0aDtNPHY7TSsrKXtsZXQgeD1tW01dOyEwPT09R2MuaXNDbG9ja1dpc2UoeCkmJihtW01dPXgucmV2ZXJzZSgpKX1sZXQgeT1HYy50cmlhbmd1bGF0ZVNoYXBlKGYsbSk7Zm9yKGxldCBNPTAsdj1tLmxlbmd0aDtNPHY7TSsrKWY9Zi5jb25jYXQobVtNXSk7Zm9yKGxldCBNPTAsdj1mLmxlbmd0aDtNPHY7TSsrKXtsZXQgeD1mW01dO3IucHVzaCh4LngseC55LDApLG8ucHVzaCgwLDAsMSksYS5wdXNoKHgueCx4LnkpfWZvcihsZXQgTT0wLHY9eS5sZW5ndGg7TTx2O00rKyl7bGV0IHg9eVtNXTtpLnB1c2goeFswXSt1LHhbMV0rdSx4WzJdK3UpLGwrPTN9fXRoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQnIociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEJyKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEJyKGEsMikpfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXQuc2hhcGVzLnB1c2gobltlXS51dWlkKTtlbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH0odGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxvPXQuc2hhcGVzLmxlbmd0aDtyPG87cisrKWkucHVzaChlW3Quc2hhcGVzW3JdXSk7cmV0dXJuIG5ldyBBbShpLHQuY3VydmVTZWdtZW50cyl9fTsoY2xhc3MgZXh0ZW5kcyBSb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319KS5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMDt2YXIgakk9Y2xhc3MgZXh0ZW5kcyBSb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLnJvdWdobmVzcz0xLHRoaXMubWV0YWxuZXNzPTAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgYW4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPXlfLHRoaXMubm9ybWFsU2NhbGU9bmV3ICRlKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MsdGhpcy5tZXRhbG5lc3M9dC5tZXRhbG5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5yb3VnaG5lc3NNYXA9dC5yb3VnaG5lc3NNYXAsdGhpcy5tZXRhbG5lc3NNYXA9dC5tZXRhbG5lc3NNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07akkucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBqSXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3ICRlKDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBYYSgyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5pb3I9KDErLjQqZSkvKDEtLjQqZSl9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBhbigwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgYW4oMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBhbigxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBSb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLnNwZWN1bGFyPW5ldyBhbigxMTE4NDgxKSx0aGlzLnNoaW5pbmVzcz0zMCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBhbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9eV8sdGhpcy5ub3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUpJLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgUm97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5ncmFkaWVudE1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBhbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9eV8sdGhpcy5ub3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFJve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9eV8sdGhpcy5ub3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX0ucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgUm97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBhbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9SkksdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFJve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9eV8sdGhpcy5ub3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXRjYXA9dC5tYXRjYXAsdGhpcy5tYXA9dC5tYXAsdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBXZHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fS5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIElyPXthcnJheVNsaWNlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gSXIuaXNUeXBlZEFycmF5KG4pP25ldyBuLmNvbnN0cnVjdG9yKG4uc3ViYXJyYXkodCx2b2lkIDAhPT1lP2U6bi5sZW5ndGgpKTpuLnNsaWNlKHQsZSl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIW58fCFlJiZuLmNvbnN0cnVjdG9yPT09dD9uOiJudW1iZXIiPT10eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD9uZXcgdChuKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihuKXtsZXQgZT1uLmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyIT09ZTsrK3IpaVtyXT1yO3JldHVybiBpLnNvcnQoZnVuY3Rpb24ocixvKXtyZXR1cm4gbltyXS1uW29dfSksaX0sc29ydGVkQXJyYXk6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4ubGVuZ3RoLHI9bmV3IG4uY29uc3RydWN0b3IoaSk7Zm9yKGxldCBvPTAsYT0wO2EhPT1pOysrbyl7bGV0IHM9ZVtvXSp0O2ZvcihsZXQgbD0wO2whPT10OysrbClyW2ErK109bltzK2xdfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xLG89blswXTtmb3IoO3ZvaWQgMCE9PW8mJnZvaWQgMD09PW9baV07KW89bltyKytdO2lmKHZvaWQgMD09PW8pcmV0dXJuO2xldCBhPW9baV07aWYodm9pZCAwIT09YSlpZihBcnJheS5pc0FycmF5KGEpKWRve2E9b1tpXSx2b2lkIDAhPT1hJiYodC5wdXNoKG8udGltZSksZS5wdXNoLmFwcGx5KGUsYSkpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgaWYodm9pZCAwIT09YS50b0FycmF5KWRve2E9b1tpXSx2b2lkIDAhPT1hJiYodC5wdXNoKG8udGltZSksYS50b0FycmF5KGUsZS5sZW5ndGgpKSxvPW5bcisrXX13aGlsZSh2b2lkIDAhPT1vKTtlbHNlIGRve2E9b1tpXSx2b2lkIDAhPT1hJiYodC5wdXNoKG8udGltZSksZS5wdXNoKGEpKSxvPW5bcisrXX13aGlsZSh2b2lkIDAhPT1vKX0sc3ViY2xpcDpmdW5jdGlvbihuLHQsZSxpLHI9MzApe2xldCBvPW4uY2xvbmUoKTtvLm5hbWU9dDtsZXQgYT1bXTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpe2xldCBjPW8udHJhY2tzW2xdLGQ9Yy5nZXRWYWx1ZVNpemUoKSx1PVtdLHA9W107Zm9yKGxldCBmPTA7ZjxjLnRpbWVzLmxlbmd0aDsrK2Ype2xldCBtPWMudGltZXNbZl0qcjtpZighKG08ZXx8bT49aSkpe3UucHVzaChjLnRpbWVzW2ZdKTtmb3IobGV0IHk9MDt5PGQ7Kyt5KXAucHVzaChjLnZhbHVlc1tmKmQreV0pfX0wIT09dS5sZW5ndGgmJihjLnRpbWVzPUlyLmNvbnZlcnRBcnJheSh1LGMudGltZXMuY29uc3RydWN0b3IpLGMudmFsdWVzPUlyLmNvbnZlcnRBcnJheShwLGMudmFsdWVzLmNvbnN0cnVjdG9yKSxhLnB1c2goYykpfW8udHJhY2tzPWE7bGV0IHM9MS8wO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClzPm8udHJhY2tzW2xdLnRpbWVzWzBdJiYocz1vLnRyYWNrc1tsXS50aW1lc1swXSk7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKW8udHJhY2tzW2xdLnNoaWZ0KC0xKnMpO3JldHVybiBvLnJlc2V0RHVyYXRpb24oKSxvfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKG4sdD0wLGU9bixpPTMwKXtpPD0wJiYoaT0zMCk7bGV0IHI9ZS50cmFja3MubGVuZ3RoLG89dC9pO2ZvcihsZXQgYT0wO2E8cjsrK2Epe2xldCBzPWUudHJhY2tzW2FdLGw9cy5WYWx1ZVR5cGVOYW1lO2lmKCJib29sIj09PWx8fCJzdHJpbmciPT09bCljb250aW51ZTtsZXQgYz1uLnRyYWNrcy5maW5kKGZ1bmN0aW9uKHYpe3JldHVybiB2Lm5hbWU9PT1zLm5hbWUmJnYuVmFsdWVUeXBlTmFtZT09PWx9KTtpZih2b2lkIDA9PT1jKWNvbnRpbnVlO2xldCBkPTAsdT1zLmdldFZhbHVlU2l6ZSgpO3MuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihkPXUvMyk7bGV0IHA9MCxmPWMuZ2V0VmFsdWVTaXplKCk7Yy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHA9Zi8zKTtsZXQgeSxtPXMudGltZXMubGVuZ3RoLTE7aWYobzw9cy50aW1lc1swXSl5PUlyLmFycmF5U2xpY2Uocy52YWx1ZXMsZCx1LWQpO2Vsc2UgaWYobz49cy50aW1lc1ttXSl7bGV0IHY9bSp1K2Q7eT1Jci5hcnJheVNsaWNlKHMudmFsdWVzLHYsdit1LWQpfWVsc2V7bGV0IHY9cy5jcmVhdGVJbnRlcnBvbGFudCgpLHg9ZCxSPXUtZDt2LmV2YWx1YXRlKG8pLHk9SXIuYXJyYXlTbGljZSh2LnJlc3VsdEJ1ZmZlcix4LFIpfSJxdWF0ZXJuaW9uIj09PWwmJihuZXcgYWEpLmZyb21BcnJheSh5KS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KHkpO2xldCBNPWMudGltZXMubGVuZ3RoO2ZvcihsZXQgdj0wO3Y8TTsrK3Ype2xldCB4PXYqZitwO2lmKCJxdWF0ZXJuaW9uIj09PWwpYWEubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMseCx5LDAsYy52YWx1ZXMseCk7ZWxzZXtsZXQgUj1mLTIqcDtmb3IobGV0IEE9MDtBPFI7KytBKWMudmFsdWVzW3grQV0tPXlbQV19fX1yZXR1cm4gbi5ibGVuZE1vZGU9MjUwMSxufX0sV2M9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PXI/cjpuZXcgZS5jb25zdHJ1Y3RvcihpKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPWksdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxpPXRoaXMuX2NhY2hlZEluZGV4LHI9ZVtpXSxvPWVbaS0xXTtlOnt0OntsZXQgYTtuOntpOmlmKCEodDxyKSl7Zm9yKGxldCBzPWkrMjs7KXtpZih2b2lkIDA9PT1yKXtpZih0PG8pYnJlYWsgaTtyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSx0LG8pfWlmKGk9PT1zKWJyZWFrO2lmKG89cixyPWVbKytpXSx0PHIpYnJlYWsgdH1hPWUubGVuZ3RoO2JyZWFrIG59aWYodD49bylicmVhayBlO3tsZXQgcz1lWzFdO3Q8cyYmKGk9MixvPXMpO2ZvcihsZXQgbD1pLTI7Oyl7aWYodm9pZCAwPT09bylyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYoaT09PWwpYnJlYWs7aWYocj1vLG89ZVstLWktMV0sdD49bylicmVhayB0fWE9aSxpPTB9fWZvcig7aTxhOyl7bGV0IHM9aSthPj4+MTt0PGVbc10/YT1zOmk9cysxfWlmKHI9ZVtpXSxvPWVbaS0xXSx2b2lkIDA9PT1vKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZih2b2lkIDA9PT1yKXJldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmludGVydmFsQ2hhbmdlZF8oaSxvLHIpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhpLG8sdCxyKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IGU9dGhpcy5yZXN1bHRCdWZmZXIsaT10aGlzLnNhbXBsZVZhbHVlcyxyPXRoaXMudmFsdWVTaXplLG89dCpyO2ZvcihsZXQgYT0wO2EhPT1yOysrYSllW2FdPWlbbythXTtyZXR1cm4gZX1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O1djLnByb3RvdHlwZS5iZWZvcmVTdGFydF89V2MucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sV2MucHJvdG90eXBlLmFmdGVyRW5kXz1XYy5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgaVY9Y2xhc3MgZXh0ZW5kcyBXY3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6SjAsZW5kaW5nRW5kOkowfX1pbnRlcnZhbENoYW5nZWRfKHQsZSxpKXtsZXQgcj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixhPXQrMSxzPXJbb10sbD1yW2FdO2lmKHZvaWQgMD09PXMpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgJDA6bz10LHM9MiplLWk7YnJlYWs7Y2FzZSAyNDAyOm89ci5sZW5ndGgtMixzPWUrcltvXS1yW28rMV07YnJlYWs7ZGVmYXVsdDpvPXQscz1pfWlmKHZvaWQgMD09PWwpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlICQwOmE9dCxsPTIqaS1lO2JyZWFrO2Nhc2UgMjQwMjphPTEsbD1pK3JbMV0tclswXTticmVhaztkZWZhdWx0OmE9dC0xLGw9ZX1sZXQgYz0uNSooaS1lKSxkPXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oZS1zKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtaSksdGhpcy5fb2Zmc2V0UHJldj1vKmQsdGhpcy5fb2Zmc2V0TmV4dD1hKmR9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyxkPXRoaXMuX29mZnNldFByZXYsdT10aGlzLl9vZmZzZXROZXh0LHA9dGhpcy5fd2VpZ2h0UHJldixmPXRoaXMuX3dlaWdodE5leHQsbT0oaS1lKS8oci1lKSx5PW0qbSxNPXkqbSx2PS1wKk0rMipwKnktcCptLHg9KDErcCkqTSsoLTEuNS0yKnApKnkrKC0uNStwKSptKzEsUj0oLTEtZikqTSsoMS41K2YpKnkrLjUqbSxBPWYqTS1mKnk7Zm9yKGxldCBIPTA7SCE9PXM7KytIKW9bSF09diphW2QrSF0reCphW2MrSF0rUiphW2wrSF0rQSphW3UrSF07cmV0dXJuIG99fSxHST1jbGFzcyBleHRlbmRzIFdje2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD10KnMsYz1sLXMsZD0oaS1lKS8oci1lKSx1PTEtZDtmb3IobGV0IHA9MDtwIT09czsrK3Apb1twXT1hW2MrcF0qdSthW2wrcF0qZDtyZXR1cm4gb319LHJWPWNsYXNzIGV4dGVuZHMgV2N7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LGVsPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHZvaWQgMD09PWV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9SXIuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9SXIuY29udmVydEFycmF5KGksdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihyfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCBpLGU9dC5jb25zdHJ1Y3RvcjtpZihlLnRvSlNPTiE9PXRoaXMudG9KU09OKWk9ZS50b0pTT04odCk7ZWxzZXtpPXtuYW1lOnQubmFtZSx0aW1lczpJci5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOklyLmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCByPXQuZ2V0SW50ZXJwb2xhdGlvbigpO3IhPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoaS5pbnRlcnBvbGF0aW9uPXIpfXJldHVybiBpLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLGl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyByVih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgR0kodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IGlWKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIDIzMDA6ZT10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgMjMwMTplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO2JyZWFrO2Nhc2UgMjMwMjplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RofWlmKHZvaWQgMD09PWUpe2xldCBpPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHZvaWQgMD09PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2lmKHQ9PT10aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKXRocm93IG5ldyBFcnJvcihpKTt0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLGkpLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9ZSx0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiAyMzAwO2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZigwIT09dCl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKDEhPT10KXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LGUpe2xldCBpPXRoaXMudGltZXMscj1pLmxlbmd0aCxvPTAsYT1yLTE7Zm9yKDtvIT09ciYmaVtvXTx0OykrK287Zm9yKDstMSE9PWEmJmlbYV0+ZTspLS1hO2lmKCsrYSwwIT09b3x8YSE9PXIpe28+PWEmJihhPU1hdGgubWF4KGEsMSksbz1hLTEpO2xldCBzPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1Jci5hcnJheVNsaWNlKGksbyxhKSx0aGlzLnZhbHVlcz1Jci5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qcyxhKnMpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAsZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLHQ9ITEpO2xldCBpPXRoaXMudGltZXMscj10aGlzLnZhbHVlcyxvPWkubGVuZ3RoOzA9PT1vJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVHJhY2sgaXMgZW1wdHkuIix0aGlzKSx0PSExKTtsZXQgYT1udWxsO2ZvcihsZXQgcz0wO3MhPT1vO3MrKyl7bGV0IGw9aVtzXTtpZigibnVtYmVyIj09dHlwZW9mIGwmJmlzTmFOKGwpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUaW1lIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMscyxsKSx0PSExO2JyZWFrfWlmKG51bGwhPT1hJiZhPmwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IE91dCBvZiBvcmRlciBrZXlzLiIsdGhpcyxzLGwsYSksdD0hMTticmVha31hPWx9aWYodm9pZCAwIT09ciYmSXIuaXNUeXBlZEFycmF5KHIpKWZvcihsZXQgcz0wLGw9ci5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1yW3NdO2lmKGlzTmFOKGMpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHMsYyksdD0hMTticmVha319cmV0dXJuIHR9b3B0aW1pemUoKXtsZXQgdD1Jci5hcnJheVNsaWNlKHRoaXMudGltZXMpLGU9SXIuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyksaT10aGlzLmdldFZhbHVlU2l6ZSgpLHI9MjMwMj09PXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpLG89dC5sZW5ndGgtMSxhPTE7Zm9yKGxldCBzPTE7czxvOysrcyl7bGV0IGw9ITEsYz10W3NdO2lmKGMhPT10W3MrMV0mJigxIT09c3x8YyE9PXRbMF0pKWlmKHIpbD0hMDtlbHNle2xldCB1PXMqaSxwPXUtaSxmPXUraTtmb3IobGV0IG09MDttIT09aTsrK20pe2xldCB5PWVbdSttXTtpZih5IT09ZVtwK21dfHx5IT09ZVtmK21dKXtsPSEwO2JyZWFrfX19aWYobCl7aWYocyE9PWEpe3RbYV09dFtzXTtsZXQgdT1zKmkscD1hKmk7Zm9yKGxldCBmPTA7ZiE9PWk7KytmKWVbcCtmXT1lW3UrZl19KythfX1pZihvPjApe3RbYV09dFtvXTtmb3IobGV0IHM9byppLGw9YSppLGM9MDtjIT09aTsrK2MpZVtsK2NdPWVbcytjXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1Jci5hcnJheVNsaWNlKHQsMCxhKSx0aGlzLnZhbHVlcz1Jci5hcnJheVNsaWNlKGUsMCxhKmkpKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPWUpLHRoaXN9Y2xvbmUoKXtsZXQgdD1Jci5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1Jci5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLHI9bmV3KDAsdGhpcy5jb25zdHJ1Y3RvcikodGhpcy5uYW1lLHQsZSk7cmV0dXJuIHIuY3JlYXRlSW50ZXJwb2xhbnQ9dGhpcy5jcmVhdGVJbnRlcnBvbGFudCxyfX07ZWwucHJvdG90eXBlLlRpbWVCdWZmZXJUeXBlPUZsb2F0MzJBcnJheSxlbC5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUZsb2F0MzJBcnJheSxlbC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMTt2YXIgSXA9Y2xhc3MgZXh0ZW5kcyBlbHt9O0lwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIixJcC5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5LElwLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAwLElwLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwLElwLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBXST1jbGFzcyBleHRlbmRzIGVse307V0kucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgaF89Y2xhc3MgZXh0ZW5kcyBlbHt9O2hfLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBvVj1jbGFzcyBleHRlbmRzIFdje2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD0oaS1lKS8oci1lKSxjPXQqcztmb3IobGV0IGQ9YytzO2MhPT1kO2MrPTQpYWEuc2xlcnBGbGF0KG8sMCxhLGMtcyxhLGMsbCk7cmV0dXJuIG99fSxSbT1jbGFzcyBleHRlbmRzIGVse0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IG9WKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1JtLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIixSbS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMSxSbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgQXA9Y2xhc3MgZXh0ZW5kcyBlbHt9O0FwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJzdHJpbmciLEFwLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksQXAucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPTIzMDAsQXAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDAsQXAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIGdfPWNsYXNzIGV4dGVuZHMgZWx7fTtnXy5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xLGkscj0yNTAwKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1pLHRoaXMuZHVyYXRpb249ZSx0aGlzLmJsZW5kTW9kZT1yLHRoaXMudXVpZD1RbCgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj0xLyh0LmZwc3x8MSk7Zm9yKGxldCBhPTAscz1pLmxlbmd0aDthIT09czsrK2EpZS5wdXNoKHMyZShpW2FdKS5zY2FsZShyKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7byE9PWE7KytvKWUucHVzaChlbC50b0pTT04oaVtvXSkpO3JldHVybiByfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsaSxyKXtsZXQgbz1lLmxlbmd0aCxhPVtdO2ZvcihsZXQgcz0wO3M8bztzKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChzK28tMSklbyxzLChzKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IGQ9SXIuZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPUlyLnNvcnRlZEFycmF5KGwsMSxkKSxjPUlyLnNvcnRlZEFycmF5KGMsMSxkKSwhciYmMD09PWxbMF0mJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxhLnB1c2gobmV3IGhfKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVtzXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvaSkpfXJldHVybiBuZXcgdGhpcyh0LC0xLGEpfXN0YXRpYyBmaW5kQnlOYW1lKHQsZSl7bGV0IGk9dDtBcnJheS5pc0FycmF5KHQpfHwoaT10Lmdlb21ldHJ5JiZ0Lmdlb21ldHJ5LmFuaW1hdGlvbnN8fHQuYW5pbWF0aW9ucyk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaWYoaVtyXS5uYW1lPT09ZSlyZXR1cm4gaVtyXTtyZXR1cm4gbnVsbH1zdGF0aWMgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXModCxlLGkpe2xldCByPXt9LG89L14oW1x3LV0qPykoW1xkXSspJC87Zm9yKGxldCBzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXtsZXQgYz10W3NdLGQ9Yy5uYW1lLm1hdGNoKG8pO2lmKGQmJmQubGVuZ3RoPjEpe2xldCB1PWRbMV0scD1yW3VdO3B8fChyW3VdPXA9W10pLHAucHVzaChjKX19bGV0IGE9W107Zm9yKGxldCBzIGluIHIpYS5wdXNoKHRoaXMuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UocyxyW3NdLGUsaSkpO3JldHVybiBhfXN0YXRpYyBwYXJzZUFuaW1hdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7bGV0IGk9ZnVuY3Rpb24odSxwLGYsbSx5KXtpZigwIT09Zi5sZW5ndGgpe2xldCBNPVtdLHY9W107SXIuZmxhdHRlbkpTT04oZixNLHYsbSksMCE9PU0ubGVuZ3RoJiZ5LnB1c2gobmV3IHUocCxNLHYpKX19LHI9W10sbz10Lm5hbWV8fCJkZWZhdWx0IixhPXQuZnBzfHwzMCxzPXQuYmxlbmRNb2RlLGw9dC5sZW5ndGh8fC0xLGM9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgcD1jW3VdLmtleXM7aWYocCYmMCE9PXAubGVuZ3RoKWlmKHBbMF0ubW9ycGhUYXJnZXRzKXtsZXQgbSxmPXt9O2ZvcihtPTA7bTxwLmxlbmd0aDttKyspaWYocFttXS5tb3JwaFRhcmdldHMpZm9yKGxldCB5PTA7eTxwW21dLm1vcnBoVGFyZ2V0cy5sZW5ndGg7eSsrKWZbcFttXS5tb3JwaFRhcmdldHNbeV1dPS0xO2ZvcihsZXQgeSBpbiBmKXtsZXQgTT1bXSx2PVtdO2ZvcihsZXQgeD0wO3ghPT1wW21dLm1vcnBoVGFyZ2V0cy5sZW5ndGg7Kyt4KXtsZXQgUj1wW21dO00ucHVzaChSLnRpbWUpLHYucHVzaChSLm1vcnBoVGFyZ2V0PT09eT8xOjApfXIucHVzaChuZXcgaF8oIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK3krIl0iLE0sdikpfWw9Zi5sZW5ndGgqKGF8fDEpfWVsc2V7bGV0IGY9Ii5ib25lc1siK2VbdV0ubmFtZSsiXSI7aShnXyxmKyIucG9zaXRpb24iLHAsInBvcyIsciksaShSbSxmKyIucXVhdGVybmlvbiIscCwicm90IixyKSxpKGdfLGYrIi5zY2FsZSIscCwic2NsIixyKX19cmV0dXJuIDA9PT1yLmxlbmd0aD9udWxsOm5ldyB0aGlzKG8sbCxyLHMpfXJlc2V0RHVyYXRpb24oKXtsZXQgZT0wO2ZvcihsZXQgaT0wLHI9dGhpcy50cmFja3MubGVuZ3RoO2khPT1yOysraSl7bGV0IG89dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIHMyZShuKXtpZih2b2lkIDA9PT1uLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpO2xldCB0PWZ1bmN0aW9uKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIGhfO2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gZ187Y2FzZSJjb2xvciI6cmV0dXJuIFdJO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIFJtO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4gSXA7Y2FzZSJzdHJpbmciOnJldHVybiBBcH10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfShuLnR5cGUpO2lmKHZvaWQgMD09PW4udGltZXMpe2xldCBlPVtdLGk9W107SXIuZmxhdHRlbkpTT04obi5rZXlzLGUsaSwidmFsdWUiKSxuLnRpbWVzPWUsbi52YWx1ZXM9aX1yZXR1cm4gdm9pZCAwIT09dC5wYXJzZT90LnBhcnNlKG4pOm5ldyB0KG4ubmFtZSxuLnRpbWVzLG4udmFsdWVzLG4uaW50ZXJwb2xhdGlvbil9dmFyIF9fPXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihuLHQpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1tuXT10KX0sZ2V0OmZ1bmN0aW9uKG4pe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW25dfSxyZW1vdmU6ZnVuY3Rpb24obil7ZGVsZXRlIHRoaXMuZmlsZXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LGwyZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCBsLHI9dGhpcyxvPSExLGE9MCxzPTAsYz1bXTt0aGlzLm9uU3RhcnQ9dm9pZCAwLHRoaXMub25Mb2FkPXQsdGhpcy5vblByb2dyZXNzPWUsdGhpcy5vbkVycm9yPWksdGhpcy5pdGVtU3RhcnQ9ZnVuY3Rpb24oZCl7cysrLCExPT09byYmdm9pZCAwIT09ci5vblN0YXJ0JiZyLm9uU3RhcnQoZCxhLHMpLG89ITB9LHRoaXMuaXRlbUVuZD1mdW5jdGlvbihkKXthKyssdm9pZCAwIT09ci5vblByb2dyZXNzJiZyLm9uUHJvZ3Jlc3MoZCxhLHMpLGE9PT1zJiYobz0hMSx2b2lkIDAhPT1yLm9uTG9hZCYmci5vbkxvYWQoKSl9LHRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKGQpe3ZvaWQgMCE9PXIub25FcnJvciYmci5vbkVycm9yKGQpfSx0aGlzLnJlc29sdmVVUkw9ZnVuY3Rpb24oZCl7cmV0dXJuIGw/bChkKTpkfSx0aGlzLnNldFVSTE1vZGlmaWVyPWZ1bmN0aW9uKGQpe3JldHVybiBsPWQsdGhpc30sdGhpcy5hZGRIYW5kbGVyPWZ1bmN0aW9uKGQsdSl7cmV0dXJuIGMucHVzaChkLHUpLHRoaXN9LHRoaXMucmVtb3ZlSGFuZGxlcj1mdW5jdGlvbihkKXtsZXQgdT1jLmluZGV4T2YoZCk7cmV0dXJuLTEhPT11JiZjLnNwbGljZSh1LDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbihkKXtmb3IobGV0IHU9MCxwPWMubGVuZ3RoO3U8cDt1Kz0yKXtsZXQgZj1jW3VdLG09Y1t1KzFdO2lmKGYuZ2xvYmFsJiYoZi5sYXN0SW5kZXg9MCksZi50ZXN0KGQpKXJldHVybiBtfXJldHVybiBudWxsfX19LHFjPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj12b2lkIDAhPT10P3Q6bDJlLHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7aS5sb2FkKHQscixlLG8pfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LHpkPXt9LHNWPWNsYXNzIGV4dGVuZHMgcWN7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz1fXy5nZXQodCk7aWYodm9pZCAwIT09bylyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShvKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztpZih2b2lkIDAhPT16ZFt0XSlyZXR1cm4gdm9pZCB6ZFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7emRbdF09W10semRbdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO2xldCBhPW5ldyBSZXF1ZXN0KHQse2hlYWRlcnM6bmV3IEhlYWRlcnModGhpcy5yZXF1ZXN0SGVhZGVyKSxjcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscz8iaW5jbHVkZSI6InNhbWUtb3JpZ2luIn0pLHM9dGhpcy5taW1lVHlwZSxsPXRoaXMucmVzcG9uc2VUeXBlO2ZldGNoKGEpLnRoZW4oYz0+e2lmKDIwMD09PWMuc3RhdHVzfHwwPT09Yy5zdGF0dXMpe2lmKDA9PT1jLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLHR5cGVvZiBSZWFkYWJsZVN0cmVhbT4idSJ8fHZvaWQgMD09PWMuYm9keS5nZXRSZWFkZXIpcmV0dXJuIGM7bGV0IGQ9emRbdF0sdT1jLmJvZHkuZ2V0UmVhZGVyKCkscD1jLmhlYWRlcnMuZ2V0KCJDb250ZW50LUxlbmd0aCIpLGY9cD9wYXJzZUludChwKTowLG09MCE9PWYseT0wLE09bmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydCh2KXshZnVuY3Rpb24geCgpe3UucmVhZCgpLnRoZW4oKHtkb25lOlIsdmFsdWU6QX0pPT57aWYoUil2LmNsb3NlKCk7ZWxzZXt5Kz1BLmJ5dGVMZW5ndGg7bGV0IEg9bmV3IFByb2dyZXNzRXZlbnQoInByb2dyZXNzIix7bGVuZ3RoQ29tcHV0YWJsZTptLGxvYWRlZDp5LHRvdGFsOmZ9KTtmb3IobGV0IHRlPTAsSz1kLmxlbmd0aDt0ZTxLO3RlKyspe2xldCBDZT1kW3RlXTtDZS5vblByb2dyZXNzJiZDZS5vblByb2dyZXNzKEgpfXYuZW5xdWV1ZShBKSx4KCl9fSl9KCl9fSk7cmV0dXJuIG5ldyBSZXNwb25zZShNKX10aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4oZD0+KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhkLHMpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHZvaWQgMD09PXMpcmV0dXJuIGMudGV4dCgpO3tsZXQgdT0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMocykscD11JiZ1WzFdP3VbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAsZj1uZXcgVGV4dERlY29kZXIocCk7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKG09PmYuZGVjb2RlKG0pKX19fSkudGhlbihjPT57X18uYWRkKHQsYyk7bGV0IGQ9emRbdF07ZGVsZXRlIHpkW3RdO2ZvcihsZXQgdT0wLHA9ZC5sZW5ndGg7dTxwO3UrKyl7bGV0IGY9ZFt1XTtmLm9uTG9hZCYmZi5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCBkPXpkW3RdO2lmKHZvaWQgMD09PWQpdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSB6ZFt0XTtmb3IobGV0IHU9MCxwPWQubGVuZ3RoO3U8cDt1Kyspe2xldCBmPWRbdV07Zi5vbkVycm9yJiZmLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sWUk9Y2xhc3MgZXh0ZW5kcyBxY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxhPV9fLmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKGEpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxhO2xldCBzPUR4KCJpbWciKTtmdW5jdGlvbiBsKCl7ZCgpLF9fLmFkZCh0LHRoaXMpLGUmJmUodGhpcyksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gYyh1KXtkKCksciYmcih1KSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGQoKXtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpfXJldHVybiBzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYocy5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHMuc3JjPXQsc319LGxWPWNsYXNzIGV4dGVuZHMgcWN7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgbz1uZXcgbF8sYT1uZXcgWUkodGhpcy5tYW5hZ2VyKTthLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLGEuc2V0UGF0aCh0aGlzLnBhdGgpO2xldCBzPTA7ZnVuY3Rpb24gbChjKXthLmxvYWQodFtjXSxmdW5jdGlvbihkKXtvLmltYWdlc1tjXT1kLHMrKyw2PT09cyYmKG8ubmVlZHNVcGRhdGU9ITAsZSYmZShvKSl9LHZvaWQgMCxyKX1mb3IobGV0IGM9MDtjPHQubGVuZ3RoOysrYylsKGMpO3JldHVybiBvfX0sY1Y9Y2xhc3MgZXh0ZW5kcyBxY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPW5ldyB1byxhPW5ldyBZSSh0aGlzLm1hbmFnZXIpO3JldHVybiBhLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe28uaW1hZ2U9cyxvLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUobyl9LGksciksb319LHRsPWNsYXNzIGV4dGVuZHMgeml7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgYW4odCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx2b2lkIDAhPT10aGlzLmFuZ2xlJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdm9pZCAwIT09dGhpcy5kZWNheSYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHZvaWQgMCE9PXRoaXMucGVudW1icmEmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx2b2lkIDAhPT10aGlzLnNoYWRvdyYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O3RsLnByb3RvdHlwZS5pc0xpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgdGx7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsaSksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weSh6aS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgYW4oZSl9Y29weSh0KXtyZXR1cm4gdGwucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX0ucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBudGU9bmV3IE1uLGl0ZT1uZXcgJCxydGU9bmV3ICQsWXg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3ICRlKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1uLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IGNfLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgJGUoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgS2koMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeDtpdGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShpdGUpLHJ0ZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLGUubG9va0F0KHJ0ZSksZS51cGRhdGVNYXRyaXhXb3JsZCgpLG50ZS5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChudGUpLGkuc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLGkubXVsdGlwbHkoZS5wcm9qZWN0aW9uTWF0cml4KSxpLm11bHRpcGx5KGUubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIDAhPT10aGlzLmJpYXMmJih0LmJpYXM9dGhpcy5iaWFzKSwwIT09dGhpcy5ub3JtYWxCaWFzJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksMSE9PXRoaXMucmFkaXVzJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCg1MTIhPT10aGlzLm1hcFNpemUueHx8NTEyIT09dGhpcy5tYXBTaXplLnkpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LFhJPWNsYXNzIGV4dGVuZHMgWXh7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgb2EoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT0yKkVCKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LG89dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxvIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPW8sZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtYSS5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITAsY2xhc3MgZXh0ZW5kcyB0bHtjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9TWF0aC5QSS8zLG89MCxhPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weSh6aS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IHppLHRoaXMuZGlzdGFuY2U9aSx0aGlzLmFuZ2xlPXIsdGhpcy5wZW51bWJyYT1vLHRoaXMuZGVjYXk9YSx0aGlzLnNoYWRvdz1uZXcgWEl9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0ucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciBvdGU9bmV3IE1uLHl4PW5ldyAkLHlCPW5ldyAkLFFJPWNsYXNzIGV4dGVuZHMgWXh7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgb2EoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3ICRlKDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IEtpKDIsMSwxLDEpLG5ldyBLaSgwLDEsMSwxKSxuZXcgS2koMywxLDEsMSksbmV3IEtpKDEsMSwxLDEpLG5ldyBLaSgzLDAsMSwxKSxuZXcgS2koMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgJCgxLDAsMCksbmV3ICQoLTEsMCwwKSxuZXcgJCgwLDAsMSksbmV3ICQoMCwwLC0xKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3ICQoMCwxLDApLG5ldyAkKDAsMSwwKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwxLDApLG5ldyAkKDAsMCwxKSxuZXcgJCgwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LGU9MCl7bGV0IGk9dGhpcy5jYW1lcmEscj10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fGkuZmFyO28hPT1pLmZhciYmKGkuZmFyPW8saS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHl4LnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxpLnBvc2l0aW9uLmNvcHkoeXgpLHlCLmNvcHkoaS5wb3NpdGlvbikseUIuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2VdKSxpLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tlXSksaS5sb29rQXQoeUIpLGkudXBkYXRlTWF0cml4V29ybGQoKSxyLm1ha2VUcmFuc2xhdGlvbigteXgueCwteXgueSwteXgueiksb3RlLm11bHRpcGx5TWF0cmljZXMoaS5wcm9qZWN0aW9uTWF0cml4LGkubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KG90ZSl9fTtRSS5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwLGNsYXNzIGV4dGVuZHMgdGx7Y29uc3RydWN0b3IodCxlLGk9MCxyPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJQb2ludExpZ2h0Iix0aGlzLmRpc3RhbmNlPWksdGhpcy5kZWNheT1yLHRoaXMuc2hhZG93PW5ldyBRSX1nZXQgcG93ZXIoKXtyZXR1cm4gNCp0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319LnByb3RvdHlwZS5pc1BvaW50TGlnaHQ9ITA7dmFyIFpJPWNsYXNzIGV4dGVuZHMgWXh7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVG0oLTUsNSw1LC01LC41LDUwMCkpfX07WkkucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIHRse2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiLHRoaXMucG9zaXRpb24uY29weSh6aS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IHppLHRoaXMuc2hhZG93PW5ldyBaSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgdGx7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMCxjbGFzcyBleHRlbmRzIHRse2NvbnN0cnVjdG9yKHQsZSxpPTEwLHI9MTApe3N1cGVyKHQsZSksdGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0Iix0aGlzLndpZHRoPWksdGhpcy5oZWlnaHQ9cn1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqdGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19LnByb3RvdHlwZS5pc1JlY3RBcmVhTGlnaHQ9ITA7dmFyIEtJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyAkKX1zZXQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5jb3B5KHRbZV0pO3JldHVybiB0aGlzfXplcm8oKXtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzW3RdLnNldCgwLDAsMCk7cmV0dXJuIHRoaXN9Z2V0QXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10LnosYT10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KGFbMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKGFbMV0sLjQ4ODYwMypyKSxlLmFkZFNjYWxlZFZlY3RvcihhWzJdLC40ODg2MDMqbyksZS5hZGRTY2FsZWRWZWN0b3IoYVszXSwuNDg4NjAzKmkpLGUuYWRkU2NhbGVkVmVjdG9yKGFbNF0saSpyKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihhWzVdLHIqbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3IoYVs2XSwuMzE1MzkyKigzKm8qby0xKSksZS5hZGRTY2FsZWRWZWN0b3IoYVs3XSxpKm8qMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKGFbOF0sLjU0NjI3NCooaSppLXIqcikpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihhWzFdLDEuMDIzMzI4KnIpLGUuYWRkU2NhbGVkVmVjdG9yKGFbMl0sMS4wMjMzMjgqbyksZS5hZGRTY2FsZWRWZWN0b3IoYVszXSwxLjAyMzMyOCppKSxlLmFkZFNjYWxlZFZlY3RvcihhWzRdLC44NTgwODYqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihhWzVdLC44NTgwODYqcipvKSxlLmFkZFNjYWxlZFZlY3RvcihhWzZdLC43NDMxMjUqbypvLS4yNDc3MDgpLGUuYWRkU2NhbGVkVmVjdG9yKGFbN10sLjg1ODA4NippKm8pLGUuYWRkU2NhbGVkVmVjdG9yKGFbOF0sLjQyOTA0MyooaSppLXIqcikpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0ubGVycCh0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQsZT0wKXtsZXQgaT10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlbcl0uZnJvbUFycmF5KHQsZSszKnIpO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS50b0FycmF5KHQsZSszKnIpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56O2VbMF09LjI4MjA5NSxlWzFdPS40ODg2MDMqcixlWzJdPS40ODg2MDMqbyxlWzNdPS40ODg2MDMqaSxlWzRdPTEuMDkyNTQ4KmkqcixlWzVdPTEuMDkyNTQ4KnIqbyxlWzZdPS4zMTUzOTIqKDMqbypvLTEpLGVbN109MS4wOTI1NDgqaSpvLGVbOF09LjU0NjI3NCooaSppLXIqcil9fTtLSS5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzPSEwO3ZhciBYeD1jbGFzcyBleHRlbmRzIHRse2NvbnN0cnVjdG9yKHQ9bmV3IEtJLGU9MSl7c3VwZXIodm9pZCAwLGUpLHRoaXMuc2g9dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2guY29weSh0LnNoKSx0aGlzfWZyb21KU09OKHQpe3JldHVybiB0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzLnNoLmZyb21BcnJheSh0LnNoKSx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LnNoPXRoaXMuc2gudG9BcnJheSgpLGV9fTtYeC5wcm90b3R5cGUuaXNMaWdodFByb2JlPSEwO3ZhciBnVj1jbGFzc3tzdGF0aWMgZGVjb2RlVGV4dCh0KXtpZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXJldHVybihuZXcgVGV4dERlY29kZXIpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZT8iLi8iOnQuc3Vic3RyKDAsZSsxKX1zdGF0aWMgcmVzb2x2ZVVSTCh0LGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8IiI9PT10PyIiOigvXmh0dHBzPzpcL1wvL2kudGVzdChlKSYmL15cLy8udGVzdCh0KSYmKGU9ZS5yZXBsYWNlKC8oXmh0dHBzPzpcL1wvW15cL10rKS4qL2ksIiQxIikpLC9eKGh0dHBzPzopP1wvXC8vaS50ZXN0KHQpfHwvXmRhdGE6LiosLiokL2kudGVzdCh0KXx8L15ibG9iOi4qJC9pLnRlc3QodCk/dDplK3QpfX07KGNsYXNzIGV4dGVuZHMgV2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlQ291bnQ9dC5pbnN0YW5jZUNvdW50LHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX0pLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLGNsYXNzIGV4dGVuZHMgcWN7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwPiJ1IiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLHR5cGVvZiBmZXRjaD4idSImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSx0aGlzLm9wdGlvbnM9e3ByZW11bHRpcGx5QWxwaGE6Im5vbmUifX1zZXRPcHRpb25zKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9dCx0aGlzfWxvYWQodCxlLGkscil7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxhPV9fLmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKGEpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxhO2xldCBzPXt9O3MuY3JlZGVudGlhbHM9ImFub255bW91cyI9PT10aGlzLmNyb3NzT3JpZ2luPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLHMuaGVhZGVycz10aGlzLnJlcXVlc3RIZWFkZXIsZmV0Y2godCxzKS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBsLmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGwsT2JqZWN0LmFzc2lnbihvLm9wdGlvbnMse2NvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pKX0pLnRoZW4oZnVuY3Rpb24obCl7X18uYWRkKHQsbCksZSYmZShsKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLmNhdGNoKGZ1bmN0aW9uKGwpe3ImJnIobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLG8ubWFuYWdlci5pdGVtU3RhcnQodCl9fS5wcm90b3R5cGUuaXNJbWFnZUJpdG1hcExvYWRlcj0hMDt2YXIgYkksYlY9Y2xhc3MgZXh0ZW5kcyBxY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPXRoaXMsYT1uZXcgc1YodGhpcy5tYW5hZ2VyKTthLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxhLnNldFBhdGgodGhpcy5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e2xldCBsPXMuc2xpY2UoMCk7KHZvaWQgMD09PWJJJiYoYkk9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxiSSkuZGVjb2RlQXVkaW9EYXRhKGwsZnVuY3Rpb24oZCl7ZShkKX0pfWNhdGNoKGwpe3I/cihsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxpLHIpfX07KGNsYXNzIGV4dGVuZHMgWHh7Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodm9pZCAwLGkpO2xldCByPShuZXcgYW4pLnNldCh0KSxvPShuZXcgYW4pLnNldChlKSxhPW5ldyAkKHIucixyLmcsci5iKSxzPW5ldyAkKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShhKS5hZGQocykubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShhKS5zdWIocykubXVsdGlwbHlTY2FsYXIoYyl9fSkucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITAsY2xhc3MgZXh0ZW5kcyBYeHtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIodm9pZCAwLGUpO2xldCBpPShuZXcgYW4pLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoaS5yLGkuZyxpLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciB3Vj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHIsbyxhO3N3aXRjaCh0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pLGUpe2Nhc2UicXVhdGVybmlvbiI6cj10aGlzLl9zbGVycCxvPXRoaXMuX3NsZXJwQWRkaXRpdmUsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDYqaSksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6cj10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZWxlY3QsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KDUqaSk7YnJlYWs7ZGVmYXVsdDpyPXRoaXMuX2xlcnAsbz10aGlzLl9sZXJwQWRkaXRpdmUsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDUqaSl9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPXIsdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9byx0aGlzLl9zZXRJZGVudGl0eT1hLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfWFjY3VtdWxhdGUodCxlKXtsZXQgaT10aGlzLmJ1ZmZlcixyPXRoaXMudmFsdWVTaXplLG89dCpyK3IsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PWEpe2ZvcihsZXQgcz0wO3MhPT1yOysrcylpW28rc109aVtzXTthPWV9ZWxzZSBhKz1lLHRoaXMuX21peEJ1ZmZlclJlZ2lvbihpLG8sMCxlL2Escik7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PWF9YWNjdW11bGF0ZUFkZGl0aXZlKHQpe2xldCBlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX2FkZEluZGV4OzA9PT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSYmdGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShlLHIsMCx0LGkpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlKz10fWFwcGx5KHQpe2xldCBlPXRoaXMudmFsdWVTaXplLGk9dGhpcy5idWZmZXIscj10KmUrZSxvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodCxhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLHM9dGhpcy5iaW5kaW5nO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsbzwxJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24oaSxyLGUqdGhpcy5fb3JpZ0luZGV4LDEtbyxlKSxhPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe3Muc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5iaW5kaW5nLmdldFZhbHVlKGUscik7Zm9yKGxldCBvPWksYT1yO28hPT1hOysrbyllW29dPWVbcitvJWldO3RoaXMuX3NldElkZW50aXR5KCksdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MH1yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpe3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlciwzKnRoaXMudmFsdWVTaXplKX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixvKXtpZihyPj0uNSlmb3IobGV0IGE9MDthIT09bzsrK2EpdFtlK2FdPXRbaSthXX1fc2xlcnAodCxlLGkscil7YWEuc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIsbyl7bGV0IGE9dGhpcy5fd29ya0luZGV4Km87YWEubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxhLHQsZSx0LGkpLGFhLnNsZXJwRmxhdCh0LGUsdCxlLHQsYSxyKX1fbGVycCh0LGUsaSxyLG8pe2xldCBhPTEtcjtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBsPWUrczt0W2xdPXRbbF0qYSt0W2krc10qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLG8pe2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IHM9ZSthO3Rbc109dFtzXSt0W2krYV0qcn19fSxWVj0iXFxbXFxdXFwuOlxcLyIsZDJlPW5ldyBSZWdFeHAoIlsiK1ZWKyJdIiwiZyIpLEhWPSJbXiIrVlYrIl0iLHUyZT0iW14iK1ZWLnJlcGxhY2UoIlxcLiIsIiIpKyJdIixwMmU9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixIViksZjJlPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLHUyZSksbTJlPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEhWKSxoMmU9L1wuKFdDKykoPzpcWyguKylcXSk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEhWKSxnMmU9bmV3IFJlZ0V4cCgiXiIrcDJlK2YyZSttMmUraDJlKyIkIiksXzJlPVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdLFNWPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcj1pfHxici5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhlLHIpfWdldFZhbHVlKHQsZSl7dGhpcy5iaW5kKCk7bGV0IHI9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1yJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG89aS5sZW5ndGg7ciE9PW87KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxicj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLnBhdGg9aSx0aGlzLnBhcnNlZFBhdGg9cnx8bi5wYXJzZVRyYWNrTmFtZShpKSx0aGlzLm5vZGU9bi5maW5kTm9kZShlLHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fGUsdGhpcy5yb290Tm9kZT1lLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZShlLGkscil7cmV0dXJuIGUmJmUuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgbi5Db21wb3NpdGUoZSxpLHIpOm5ldyBuKGUsaSxyKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShkMmUsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZShlKXtsZXQgaT1nMmUuZXhlYyhlKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitlKTtsZXQgcj17bm9kZU5hbWU6aVsyXSxvYmplY3ROYW1lOmlbM10sb2JqZWN0SW5kZXg6aVs0XSxwcm9wZXJ0eU5hbWU6aVs1XSxwcm9wZXJ0eUluZGV4OmlbNl19LG89ci5ub2RlTmFtZSYmci5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PW8mJi0xIT09byl7bGV0IGE9ci5ub2RlTmFtZS5zdWJzdHJpbmcobysxKTstMSE9PV8yZS5pbmRleE9mKGEpJiYoci5ub2RlTmFtZT1yLm5vZGVOYW1lLnN1YnN0cmluZygwLG8pLHIub2JqZWN0TmFtZT1hKX1pZihudWxsPT09ci5wcm9wZXJ0eU5hbWV8fDA9PT1yLnByb3BlcnR5TmFtZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK2UpO3JldHVybiByfXN0YXRpYyBmaW5kTm9kZShlLGkpe2lmKCFpfHwiIj09PWl8fCIuIj09PWl8fC0xPT09aXx8aT09PWUubmFtZXx8aT09PWUudXVpZClyZXR1cm4gZTtpZihlLnNrZWxldG9uKXtsZXQgcj1lLnNrZWxldG9uLmdldEJvbmVCeU5hbWUoaSk7aWYodm9pZCAwIT09cilyZXR1cm4gcn1pZihlLmNoaWxkcmVuKXtsZXQgcj1mdW5jdGlvbihhKXtmb3IobGV0IHM9MDtzPGEubGVuZ3RoO3MrKyl7bGV0IGw9YVtzXTtpZihsLm5hbWU9PT1pfHxsLnV1aWQ9PT1pKXJldHVybiBsO2xldCBjPXIobC5jaGlsZHJlbik7aWYoYylyZXR1cm4gY31yZXR1cm4gbnVsbH0sbz1yKGUuY2hpbGRyZW4pO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KGUsaSl7ZVtpXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7byE9PWE7KytvKWVbaSsrXT1yW29dfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXtlW2ldPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkoZSxpKX1fc2V0VmFsdWVfZGlyZWN0KGUsaSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbaV19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7byE9PWE7KytvKXJbb109ZVtpKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO28hPT1hOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO28hPT1hOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsaSksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKGUsaSl9X3NldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKGUsaSl9YmluZCgpe2xldCBlPXRoaXMubm9kZSxpPXRoaXMucGFyc2VkUGF0aCxyPWkub2JqZWN0TmFtZSxvPWkucHJvcGVydHlOYW1lLGE9aS5wcm9wZXJ0eUluZGV4O2lmKGV8fChlPW4uZmluZE5vZGUodGhpcy5yb290Tm9kZSxpLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9ZSksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCFlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO2lmKHIpe2xldCBkPWkub2JqZWN0SW5kZXg7c3dpdGNoKHIpe2Nhc2UibWF0ZXJpYWxzIjppZighZS5tYXRlcmlhbClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO2lmKCFlLm1hdGVyaWFsLm1hdGVyaWFscylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7ZT1lLm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighZS5za2VsZXRvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO2U9ZS5za2VsZXRvbi5ib25lcztmb3IobGV0IHU9MDt1PGUubGVuZ3RoO3UrKylpZihlW3VdLm5hbWU9PT1kKXtkPXU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1lW3JdKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtlPWVbcl19aWYodm9pZCAwIT09ZCl7aWYodm9pZCAwPT09ZVtkXSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLGUpO2U9ZVtkXX19bGV0IHM9ZVtvXTtpZih2b2lkIDA9PT1zKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIraS5ub2RlTmFtZSsiLiIrbysiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIixlKTtsZXQgbD10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD1lLHZvaWQgMCE9PWUubmVlZHNVcGRhdGU/bD10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dm9pZCAwIT09ZS5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlJiYobD10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGM9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYodm9pZCAwIT09YSl7aWYoIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyI9PT1vKXtpZighZS5nZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTt2b2lkIDAhPT1lLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXSYmKGE9ZS5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV0pfWM9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PXMsdGhpcy5wcm9wZXJ0eUluZGV4PWF9ZWxzZSB2b2lkIDAhPT1zLmZyb21BcnJheSYmdm9pZCAwIT09cy50b0FycmF5PyhjPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PXMpOkFycmF5LmlzQXJyYXkocyk/KGM9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9cyk6dGhpcy5wcm9wZXJ0eU5hbWU9bzt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtjXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbY11bbF19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19cmV0dXJuIG4uQ29tcG9zaXRlPVNWLG59KSgpO2JyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfSxici5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfSxici5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bYnIucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsYnIucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxici5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxici5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldLGJyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW2JyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LGJyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLGJyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtici5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LGJyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsYnIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbYnIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsYnIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsYnIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW2JyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LGJyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLGJyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXSxjbGFzcyBleHRlbmRzIFVke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LGUpe2xldCBpPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxyPXQuX2NsaXAudHJhY2tzLG89ci5sZW5ndGgsYT10Ll9wcm9wZXJ0eUJpbmRpbmdzLHM9dC5faW50ZXJwb2xhbnRzLGw9aS51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGQ9Y1tsXTt2b2lkIDA9PT1kJiYoZD17fSxjW2xdPWQpO2ZvcihsZXQgdT0wO3UhPT1vOysrdSl7bGV0IHA9clt1XSxmPXAubmFtZSxtPWRbZl07aWYodm9pZCAwIT09bSkrK20ucmVmZXJlbmNlQ291bnQsYVt1XT1tO2Vsc2V7aWYobT1hW3VdLHZvaWQgMCE9PW0pe251bGw9PT1tLl9jYWNoZUluZGV4JiYoKyttLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhtLGwsZikpO2NvbnRpbnVlfW09bmV3IHdWKGJyLmNyZWF0ZShpLGYsZSYmZS5fcHJvcGVydHlCaW5kaW5nc1t1XS5iaW5kaW5nLnBhcnNlZFBhdGgpLHAuVmFsdWVUeXBlTmFtZSxwLmdldFZhbHVlU2l6ZSgpKSwrK20ucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKG0sbCxmKSxhW3VdPW19c1t1XS5yZXN1bHRCdWZmZXI9bS5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKG51bGw9PT10Ll9jYWNoZUluZGV4KXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQsbyYmby5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz1lW2ldOzA9PW8udXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKG8pLG8uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnVzZUNvdW50JiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCBlPXQuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1lJiZlPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW2VdO2lmKHZvaWQgMD09PWEpYT17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW2VdPWE7ZWxzZXtsZXQgcz1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX10Ll9jYWNoZUluZGV4PXIubGVuZ3RoLHIucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtpXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9ZVtlLmxlbmd0aC0xXSxyPXQuX2NhY2hlSW5kZXg7aS5fY2FjaGVJbmRleD1yLGVbcl09aSxlLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQsYT10aGlzLl9hY3Rpb25zQnlDbGlwLHM9YVtvXSxsPXMua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSxkPXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD1kLGxbZF09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkZWxldGUgcy5hY3Rpb25CeVJvb3RbKHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZF0sMD09PWwubGVuZ3RoJiZkZWxldGUgYVtvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcobyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbz10aGlzLl9iaW5kaW5ncyxhPXJbZV07dm9pZCAwPT09YSYmKGE9e30scltlXT1hKSxhW2ldPXQsdC5fY2FjaGVJbmRleD1vLmxlbmd0aCxvLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxvPWkucGF0aCxhPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxzPWFbcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIHNbb10sMD09PU9iamVjdC5rZXlzKHMpLmxlbmd0aCYmZGVsZXRlIGFbcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiB2b2lkIDA9PT1pJiYoaT1uZXcgR0kobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMsbz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LG8uX19jYWNoZUluZGV4PWksZVtpXT1vfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qsbz1yLnV1aWQsYT0ic3RyaW5nIj09dHlwZW9mIHQ/cUkuZmluZEJ5TmFtZShyLHQpOnQscz1udWxsIT09YT9hLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbc10sYz1udWxsO2lmKHZvaWQgMD09PWkmJihpPW51bGwhPT1hP2EuYmxlbmRNb2RlOjI1MDApLHZvaWQgMCE9PWwpe2xldCB1PWwuYWN0aW9uQnlSb290W29dO2lmKHZvaWQgMCE9PXUmJnUuYmxlbmRNb2RlPT09aSlyZXR1cm4gdTtjPWwua25vd25BY3Rpb25zWzBdLG51bGw9PT1hJiYoYT1jLl9jbGlwKX1pZihudWxsPT09YSlyZXR1cm4gbnVsbDtsZXQgZD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBvPWUudHJhY2tzLGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD17ZW5kaW5nU3RhcnQ6SjAsZW5kaW5nRW5kOkowfTtmb3IobGV0IGM9MDtjIT09YTsrK2Mpe2xldCBkPW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7c1tjXT1kLGQuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPXMsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkoYSksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPTIyMDEsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJjAhPT10aGlzLnRpbWVTY2FsZSYmbnVsbD09PXRoaXMuX3N0YXJ0VGltZSYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxlKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1lLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxlLGkpe2lmKHQuZmFkZU91dChlKSx0aGlzLmZhZGVJbihlKSxpKXtsZXQgcj10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixzPXIvbzt0LndhcnAoMSxvL3IsZSksdGhpcy53YXJwKHMsMSxlKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LGUsaSl7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsaSl9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LGUsaSl7bGV0IHI9dGhpcy5fbWl4ZXIsbz1yLnRpbWUsYT10aGlzLnRpbWVTY2FsZSxzPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGw9PT1zJiYocz1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9cyk7bGV0IGw9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1zLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytpLGNbMF09dC9hLGNbMV09ZS9hLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxlLGkscil7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZCB0aGlzLl91cGRhdGVXZWlnaHQodCk7bGV0IG89dGhpcy5fc3RhcnRUaW1lO2lmKG51bGwhPT1vKXtsZXQgbD0odC1vKSppO2lmKGw8MHx8MD09PWkpcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLGU9aSpsfWUqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgYT10aGlzLl91cGRhdGVUaW1lKGUpLHM9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKHM+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztpZigyNTAxPT09dGhpcy5ibGVuZE1vZGUpZm9yKGxldCBkPTAsdT1sLmxlbmd0aDtkIT09dTsrK2QpbFtkXS5ldmFsdWF0ZShhKSxjW2RdLmFjY3VtdWxhdGVBZGRpdGl2ZShzKTtlbHNlIGZvcihsZXQgZD0wLHU9bC5sZW5ndGg7ZCE9PXU7KytkKWxbZF0uZXZhbHVhdGUoYSksY1tkXS5hY2N1bXVsYXRlKHIscyl9fV91cGRhdGVXZWlnaHQodCl7bGV0IGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7bGV0IGk9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWkpe2xldCByPWkuZXZhbHVhdGUodClbMF07ZSo9cix0PmkucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksMD09PXImJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lLGV9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgZT0wO2lmKCF0aGlzLnBhdXNlZCl7ZT10aGlzLnRpbWVTY2FsZTtsZXQgaT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsIT09aSYmKGUqPWkuZXZhbHVhdGUodClbMF0sdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09ZT90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lLGV9X3VwZGF0ZVRpbWUodCl7bGV0IGU9dGhpcy5fY2xpcC5kdXJhdGlvbixpPXRoaXMubG9vcCxyPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LGE9MjIwMj09PWk7aWYoMD09PXQpcmV0dXJuLTE9PT1vP3I6YSYmMT09KDEmbyk/ZS1yOnI7aWYoMjIwMD09PWkpey0xPT09byYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTtlOntpZihyPj1lKXI9ZTtlbHNle2lmKCEocjwwKSl7dGhpcy50aW1lPXI7YnJlYWsgZX1yPTB9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKC0xPT09byYmKHQ+PTA/KG89MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLGEpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLGEpKSxyPj1lfHxyPDApe2xldCBzPU1hdGguZmxvb3Ioci9lKTtyLT1lKnMsbys9TWF0aC5hYnMocyk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1vO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKDE9PT1sKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLGEpfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxhKTt0aGlzLl9sb29wQ291bnQ9byx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6c30pfX1lbHNlIHRoaXMudGltZT1yO2lmKGEmJjE9PSgxJm8pKXJldHVybiBlLXJ9cmV0dXJuIHJ9X3NldEVuZGluZ3ModCxlLGkpe2xldCByPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7aT8oci5lbmRpbmdTdGFydD0kMCxyLmVuZGluZ0VuZD0kMCk6KHIuZW5kaW5nU3RhcnQ9dD90aGlzLnplcm9TbG9wZUF0U3RhcnQ/JDA6SjA6MjQwMixyLmVuZGluZ0VuZD1lP3RoaXMuemVyb1Nsb3BlQXRFbmQ/JDA6SjA6MjQwMil9X3NjaGVkdWxlRmFkaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixvPXIudGltZSxhPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1hJiYoYT1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7bGV0IHM9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1hLnNhbXBsZVZhbHVlcztyZXR1cm4gc1swXT1vLGxbMF09ZSxzWzFdPW8rdCxsWzFdPWksdGhpc319KHRoaXMsYSxlLGkpO3JldHVybiB0aGlzLl9iaW5kQWN0aW9uKGQsYyksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24oZCxzLG8pLGR9ZXhpc3RpbmdBY3Rpb24odCxlKXtsZXQgaT1lfHx0aGlzLl9yb290LHI9aS51dWlkLG89InN0cmluZyI9PXR5cGVvZiB0P3FJLmZpbmRCeU5hbWUoaSx0KTp0LHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvP28udXVpZDp0XTtyZXR1cm4gdm9pZCAwIT09cyYmcy5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnM7Zm9yKGxldCBpPXRoaXMuX25BY3RpdmVBY3Rpb25zLTE7aT49MDstLWkpdFtpXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10aGlzLl9uQWN0aXZlQWN0aW9ucyxyPXRoaXMudGltZSs9dCo9dGhpcy50aW1lU2NhbGUsbz1NYXRoLnNpZ24odCksYT10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQsbyxhKTtsZXQgcz10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2Mpc1tjXS5hcHBseShhKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAsbz1yW2ldO2lmKHZvaWQgMCE9PW8pe2xldCBhPW8ua25vd25BY3Rpb25zO2ZvcihsZXQgcz0wLGw9YS5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hW3NdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IGQ9Yy5fY2FjaGVJbmRleCx1PWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx1Ll9jYWNoZUluZGV4PWQsZVtkXT11LGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IGEgaW4gaSl7bGV0IGw9aVthXS5hY3Rpb25CeVJvb3RbZV07dm9pZCAwIT09bCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtlXTtpZih2b2lkIDAhPT1vKWZvcihsZXQgYSBpbiBvKXtsZXQgcz1vW2FdO3MucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcocyl9fXVuY2FjaGVBY3Rpb24odCxlKXtsZXQgaT10aGlzLmV4aXN0aW5nQWN0aW9uKHQsZSk7bnVsbCE9PWkmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGkpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGkpKX19LnByb3RvdHlwZS5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcj1uZXcgRmxvYXQzMkFycmF5KDEpO3ZhciBReD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXsic3RyaW5nIj09dHlwZW9mIHQmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksdD1hcmd1bWVudHNbMV0pLHRoaXMudmFsdWU9dH1jbG9uZSgpe3JldHVybiBuZXcgUXgodm9pZCAwPT09dGhpcy52YWx1ZS5jbG9uZT90aGlzLnZhbHVlOnRoaXMudmFsdWUuY2xvbmUoKSl9fTsoY2xhc3MgZXh0ZW5kcyBEbXtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCBlPXN1cGVyLmNsb25lKHQpO3JldHVybiBlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgYXRlPW5ldyAkZSxrbT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkZSgxLzAsMS8wKSxlPW5ldyAkZSgtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9YXRlLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBhdGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O2ttLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIF9wPW5ldyAkLHhJPW5ldyBNbixiQj1uZXcgTW47ZnVuY3Rpb24gUnRlKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsUnRlKG4uY2hpbGRyZW5bZV0pKTtyZXR1cm4gdH12YXIgeTJlPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gelYobix0LGUpe2lmKDE9PT1lKXJldHVybiBuZXcgYW4odCk7bGV0IGk9SmYodCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBkMyBmYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjb2xvcjogJHt0fWApO3JldHVybiBuZXcgYW4oTk4oaSxuKSgxLWUpKX1uZXcgSW50MzJBcnJheSh5MmUuYnVmZmVyKSxaYS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFphLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59LGp4LnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX0sY2xhc3MgZXh0ZW5kcyBWeHtjb25zdHJ1Y3Rvcih0PTEwLGU9MTAsaT00NDczOTI0LHI9ODk0Nzg0OCl7aT1uZXcgYW4oaSkscj1uZXcgYW4ocik7bGV0IG89ZS8yLGE9dC9lLHM9dC8yLGw9W10sYz1bXTtmb3IobGV0IHA9MCxmPTAsbT0tcztwPD1lO3ArKyxtKz1hKXtsLnB1c2goLXMsMCxtLHMsMCxtKSxsLnB1c2gobSwwLC1zLG0sMCxzKTtsZXQgeT1wPT09bz9pOnI7eS50b0FycmF5KGMsZiksZis9Myx5LnRvQXJyYXkoYyxmKSxmKz0zLHkudG9BcnJheShjLGYpLGYrPTMseS50b0FycmF5KGMsZiksZis9M31sZXQgZD1uZXcgV2k7ZC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQnIobCwzKSksZC5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgQnIoYywzKSksc3VwZXIoZCxuZXcgV2Qoe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iR3JpZEhlbHBlciJ9fS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfSxjbGFzcyBleHRlbmRzIFZ4e2NvbnN0cnVjdG9yKHQpe2xldCBlPVJ0ZSh0KSxpPW5ldyBXaSxyPVtdLG89W10sYT1uZXcgYW4oMCwwLDEpLHM9bmV3IGFuKDAsMSwwKTtmb3IobGV0IGM9MDtjPGUubGVuZ3RoO2MrKyl7bGV0IGQ9ZVtjXTtkLnBhcmVudCYmZC5wYXJlbnQuaXNCb25lJiYoci5wdXNoKDAsMCwwKSxyLnB1c2goMCwwLDApLG8ucHVzaChhLnIsYS5nLGEuYiksby5wdXNoKHMucixzLmcscy5iKSl9aS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgQnIociwzKSksaS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgQnIobywzKSksc3VwZXIoaSxuZXcgV2Qoe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSkpLHRoaXMudHlwZT0iU2tlbGV0b25IZWxwZXIiLHRoaXMuaXNTa2VsZXRvbkhlbHBlcj0hMCx0aGlzLnJvb3Q9dCx0aGlzLmJvbmVzPWUsdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITF9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IGU9dGhpcy5ib25lcyxpPXRoaXMuZ2VvbWV0cnkscj1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtiQi5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBvPTAsYT0wO288ZS5sZW5ndGg7bysrKXtsZXQgcz1lW29dO3MucGFyZW50JiZzLnBhcmVudC5pc0JvbmUmJih4SS5tdWx0aXBseU1hdHJpY2VzKGJCLHMubWF0cml4V29ybGQpLF9wLnNldEZyb21NYXRyaXhQb3NpdGlvbih4SSksci5zZXRYWVooYSxfcC54LF9wLnksX3AueikseEkubXVsdGlwbHlNYXRyaWNlcyhiQixzLnBhcmVudC5tYXRyaXhXb3JsZCksX3Auc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHhJKSxyLnNldFhZWihhKzEsX3AueCxfcC55LF9wLnopLGErPTIpfWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfSxxYy5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLGdWLmV4dHJhY3RVcmxCYXNlKG4pfSxxYy5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX0sa20ucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LGttLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0sa20ucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LGttLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX0sX3MucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LF9zLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0sX3MucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LF9zLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfSxfcy5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9LHdwLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSxjXy5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX0sdm8ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sdm8ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LHZvLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHZvLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LHZvLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx2by5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KG4pLmludmVydCgpfSxNbi5wcm90b3R5cGUuZXh0cmFjdFBvc2l0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKSx0aGlzLmNvcHlQb3NpdGlvbihuKX0sTW4ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sTW4ucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgJCkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDMpfSxNbi5wcm90b3R5cGUuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuIiksdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihuKX0sTW4ucHJvdG90eXBlLm11bHRpcGx5VG9BcnJheT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxNbi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3I0PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sTW4ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLnJvdGF0ZUF4aXM9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sTW4ucHJvdG90eXBlLmNyb3NzVmVjdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxNbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxNbi5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5yb3RhdGVCeUF4aXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sTW4ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5tYWtlRnJ1c3R1bT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKSx0aGlzLm1ha2VQZXJzcGVjdGl2ZShuLHQsaSxlLHIsbyl9LE1uLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LFhsLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLiIpLHRoaXMuaW50ZXJzZWN0c0xpbmUobil9LGFhLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIiksbi5hcHBseVF1YXRlcm5pb24odGhpcyl9LGFhLnByb3RvdHlwZS5pbnZlcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLmludmVyc2UoKSBoYXMgYmVlbiByZW5hbWVkIHRvIGludmVydCgpLiIpLHRoaXMuaW52ZXJ0KCl9LFNwLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LFNwLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZShuKX0sU3AucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShuKX0sanIucHJvdG90eXBlLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmFyZWEoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRBcmVhKCkuIiksdGhpcy5nZXRBcmVhKCl9LGpyLnByb3RvdHlwZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHRoaXMuZ2V0QmFyeWNvb3JkKG4sdCl9LGpyLnByb3RvdHlwZS5taWRwb2ludD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KG4pfSxqci5wcm90b3R5cGVub3JtYWw9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbChuKX0sanIucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLiIpLHRoaXMuZ2V0UGxhbmUobil9LGpyLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksanIuZ2V0QmFyeWNvb3JkKG4sdCxlLGkscil9LGpyLm5vcm1hbD1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLGpyLmdldE5vcm1hbChuLHQsZSxpKX0scWQucHJvdG90eXBlLmV4dHJhY3RBbGxQb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4iKSx0aGlzLmV4dHJhY3RQb2ludHMobil9LHFkLnByb3RvdHlwZS5leHRydWRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBEcCh0aGlzLG4pfSxxZC5wcm90b3R5cGUubWFrZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBBbSh0aGlzLG4pfSwkZS5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sJGUucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSwkZS5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9LCQucHJvdG90eXBlLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuIil9LCQucHJvdG90eXBlLnNldEV1bGVyRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LCQucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24obil9LCQucHJvdG90eXBlLmdldFNjYWxlRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUobil9LCQucHJvdG90eXBlLmdldENvbHVtbkZyb21NYXRyaXg9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCxuKX0sJC5wcm90b3R5cGUuYXBwbHlQcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LCQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LCQucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSwkLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sS2kucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LEtpLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0semkucHJvdG90eXBlLmdldENoaWxkQnlOYW1lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKSx0aGlzLmdldE9iamVjdEJ5TmFtZShuKX0semkucHJvdG90eXBlLnJlbmRlckRlcHRoPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LHppLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXModCxuKX0semkucHJvdG90eXBlLmdldFdvcmxkUm90YXRpb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLiIpfSx6aS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh6aS5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXI9bn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pLGNvLnByb3RvdHlwZS5zZXREcmF3TW9kZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5zZXREcmF3TW9kZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvLnByb3RvdHlwZSx7ZHJhd01vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4iKSwwfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSksTkkucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxvYS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx2b2lkIDAhPT10JiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGwucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXIucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09RUl9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShFSSl9fX0pLEFyLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09bj9FSTpUeCksdGhpc30sQXIucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sQXIucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sV2kucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX0sV2kucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksdCYmdC5pc0J1ZmZlckF0dHJpYnV0ZXx8dCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT1uPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBBcihhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpfSxXaS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe3ZvaWQgMCE9PWUmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfSxXaS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfSxXaS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxXaS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9LFdpLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdpLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSksRG0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PW4/RUk6VHgpLHRoaXN9LERtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sRHAucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LERwLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxEcC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHVfLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUXgucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUm8ucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBhbn19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PW59fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPW59fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR2QucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ufX19KSxxaS5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KG4pLHRoaXMuY2xlYXIodCxlLGkpfSxxaS5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKG4pfSxxaS5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfSxxaS5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX0scWkucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxxaS5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9LHFpLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9LHFpLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LHFpLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX0scWkucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LHFpLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0scWkucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX0scWkucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfSxxaS5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LHFpLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KG4pfSxxaS5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scWkucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHFpLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHFpLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxxaS5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHFpLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHFpLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHFpLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxxaS5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHFpLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFpLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1ufX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1ufX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ITA9PT1uP0RyOk1wfX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3RlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhRYS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSksY2xhc3MgZXh0ZW5kcyB6aXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLCEwPT09dGhpcy5sb29wJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfXN0b3AoKXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLl9wcm9ncmVzcz0wLHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSwhMD09PXRoaXMuX2Nvbm5lY3RlZD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPXQsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbD8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5sb29wPXQsITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0ucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4obmV3IGJWKS5sb2FkKG4sZnVuY3Rpb24oaSl7dC5zZXRCdWZmZXIoaSl9KSx0aGlzfSxSeC5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfSxSeC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX0samQuY3Jvc3NPcmlnaW49dm9pZCAwLGpkLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IGNWO3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb30samQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgbFY7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfSxqZC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LGpkLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246T1Z9fSkpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPU9WKTt2YXIgWmw9KCgpPT4oZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0oWmx8fChabD17fSkpLFpsKSkoKTtmdW5jdGlvbiBQdGUobix0KXtsZXQgZT10Lmxlbmd0aC8yLGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghaXx8aS5jb3VudCE9PTMqZSkmJihpPW5ldyBBcihuZXcgRmxvYXQzMkFycmF5KDMqZSksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixpKSk7bGV0IHI9aS5hcnJheTtmb3IobGV0IG89MDtvPGU7bysrKXJbMypvXT10WzIqb10sclszKm8rMV09dFsyKm8rMV07aS5uZWVkc1VwZGF0ZT0hMCxuLnNldERyYXdSYW5nZSgwLDMqZSksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBPdGUobix0LGUpe2xldCBpPU1hdGgubWF4KHQubGVuZ3RoLzItMSwwKSxyPTIqaSozLG89MypyLGE9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghYXx8YS5jb3VudCE9PXIpJiYoYT1uZXcgQXIobmV3IEZsb2F0MzJBcnJheShvKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLGEpKTtsZXQgcz1hLmFycmF5O2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldFtjLGQsdSxwXT1bdFsyKmxdLHRbMipsKzFdLHRbMipsKzJdLHRbMipsKzNdXSxmPW5ldyAkZShjLGQpLG09bmV3ICRlKHUscCkseT1uZXcgJGUodS1jLHAtZCksTT1uZXcgJGUoLXkueSx5LngpLnNldExlbmd0aChlLzIpLHY9Zi5jbG9uZSgpLmFkZChNKSx4PWYuY2xvbmUoKS5zdWIoTSksUj1tLmNsb25lKCkuYWRkKE0pLEE9bS5jbG9uZSgpLnN1YihNKSxIPVt2Lngsdi55LDAseC54LHgueSwwLFIueCxSLnksMCxSLngsUi55LDAseC54LHgueSwwLEEueCxBLnksMF07cy5zZXQoSCxsKkgubGVuZ3RoKX1hLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsbyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBpQShuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOm8sb3BhY2l0eTphfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgcz10Lm1hdGVyaWFsO2lmKHMudmlzaWJsZSE9PXImJihzLnZpc2libGU9cixzLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD16VihuLG8sYT8/MSksYz1lKHQuZ2VvbWV0cnkpO3JldHVybiB0Lmdlb21ldHJ5IT09YyYmKHQuZ2VvbWV0cnk9Yykscy5jb2xvci5lcXVhbHMobCl8fChzLmNvbG9yLnNldChsKSxzLm5lZWRzVXBkYXRlPSEwKSwhMH12YXIgb0E9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGUuZ2V0KHQpPz9udWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LHRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbCx0aGlzLmxheW91dD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmdldE1ldGFkYXRhTWFwSW1wbD10LmdldE1ldGFkYXRhTWFwLHRoaXMuY29vcmRpbmF0b3I9dC5jb29yZGluYXRvcix0aGlzLnJlbmRlcmVyPXQucmVuZGVyZXIsdGhpcy5wYWludEJydXNoPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVuZGVyQ2FjaGU9dCx0aGlzLnJlbmRlcmVyPWV9c2V0TGluZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmlhbmdsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0Q2lyY2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJhcGV6b2lkKHQsZSxpLHIpe2xldCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkscik7byYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LG8pfX0odGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpeyh0aGlzLmxheW91dC54IT09dC54fHx0aGlzLmxheW91dC53aWR0aCE9PXQud2lkdGh8fHRoaXMubGF5b3V0LnkhPT10Lnl8fHRoaXMubGF5b3V0LmhlaWdodCE9PXQuaGVpZ2h0KSYmKHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLHRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheSgyKmkucG9pbnRzLmxlbmd0aCl9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W28sYV09dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqcl09byx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVsyKnIrMV09YX19dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19LHZfPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OVU1CRVI9MF09Ik5VTUJFUiIsbltuLk5BTj0xXT0iTkFOIn0odl98fCh2Xz17fSkpLHZfKSkoKSxhQT1jbGFzcyBleHRlbmRzIG9Be3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6dl8uTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOnZfLk5BTixwb2x5bGluZTplLm1hcCgocixvKT0+aXNOYU4ocik/byUyPT0wP2kueDppLnk6cil9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2xldCBlPVtdLGk9MCxyPSExLG89dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxhPXt4Om9bMF0seTpvWzFdfSxzPW51bGw7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0yKXtsZXQgYz10W2xdLGQ9dFtsKzFdLHU9aXNOYU4oYyl8fGlzTmFOKGQpO3UhPT1yJiZpIT09bCYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksbCksbnVsbD09PXM/e3g6Yyx5OmR9OnMpKSxpPWwpLHV8fChzPXt4OmMseTpkfSkscj11fXJldHVybiBpIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSx0Lmxlbmd0aCkscz8/YSkpLGV9cmVkcmF3KCl7Zm9yKGxldCB0IG9mIHRoaXMuc2VyaWVzKXtsZXQgaT10aGlzLmdldE1ldGFkYXRhTWFwKClbdC5pZF07aWYoIWkpY29udGludWU7aWYodC5wb2x5bGluZS5sZW5ndGglMiE9MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7dC5wb2x5bGluZS5sZW5ndGh9YCk7bGV0IHI9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZSh0LnBvbHlsaW5lKTtmb3IobGV0W28se3R5cGU6YSxwb2x5bGluZTpzfV1vZiByLmVudHJpZXMoKSlpZihhPT09dl8uTlVNQkVSKTI9PT1zLmxlbmd0aD90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIix0LmlkLG9dKSx7eDpzWzBdLHk6c1sxXX0se2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHQuaWQsb10pLHMse2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEsd2lkdGg6Mn0pO2Vsc2UgaWYoIWkuYXV4KWZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCs9Mil0aGlzLnBhaW50QnJ1c2guc2V0VHJpYW5nbGUoSlNPTi5zdHJpbmdpZnkoWyJOYU4iLHQuaWQsc1tsXSxzW2wrMV1dKSx7eDpzW2xdLHk6c1tsKzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSxzaXplOjEyfSl9fX0sc0E9Y2xhc3MgZXh0ZW5kcyBSMHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYW1lcmE9bmV3IFRtKDAsMWUzLDFlMywwLDAsMTAwKX1pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMX1zZXREb21Db250YWluZXJSZWN0KHQpe3N1cGVyLnNldERvbUNvbnRhaW5lclJlY3QodCksdGhpcy5jYW1lcmEubGVmdD10LngsdGhpcy5jYW1lcmEucmlnaHQ9dC54K3Qud2lkdGgsdGhpcy5jYW1lcmEudG9wPXQueSt0LmhlaWdodCx0aGlzLmNhbWVyYS5ib3R0b209dC55LHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRDYW1lcmEoKXtyZXR1cm4gdGhpcy5jYW1lcmF9fSxsQT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIFppLlNWRzp0aGlzLmNvb3JkaW5hdG9yPW5ldyBSMCx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN2Zz10fWZsdXNoKCl7fW9uUmVzaXplKHQpe31kZXN0cm95T2JqZWN0KHQpe3RoaXMuc3ZnLnJlbW92ZUNoaWxkKHQuZG9tKX1zZXRVc2VEYXJrTW9kZSh0KXt9Y3JlYXRlUGF0aERTdHJpbmcodCl7aWYoIXQubGVuZ3RoKXJldHVybiIiO2xldCBlPW5ldyBBcnJheSh0Lmxlbmd0aC8yKTtlWzBdPWBNJHt0WzBdfSwke3RbMV19YDtmb3IobGV0IGk9MTtpPHQubGVuZ3RoLzI7aSsrKWVbaV09YEwke3RbMippXX0sJHt0WzIqaSsxXX1gO3JldHVybiBlLmpvaW4oIiIpfWNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0LGUsaSl7bGV0IHI9VUQodD8uZG9tLCgpPT57bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtvLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBhPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJkIixhKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChvKSxvfSxvPT57aWYoIXQ/LmRhdGF8fCFHbF9hcmVQb2x5bGluZXNFcXVhbChlLHQ/LmRhdGEpKXtsZXQgYT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO28uc2V0QXR0cmlidXRlKCJkIixhKX1yZXR1cm4gb30saSk7cmV0dXJuIG51bGw9PT1yP251bGw6KHIuc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKGkud2lkdGgpLHtkb206cixkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyLGNvbG9yOm99PWksYT1yKk1hdGguc3FydCgzKS8yLHM9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkrYS8zLGUueCtyLzIsZS55K2EvMyxlLngsZS55LTIqYS8zXSksbD1VRCh0Py5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBkPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcocyk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIixkKyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCBkPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcocyk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIixkKyJaIiksY30saSk7cmV0dXJuIG51bGw9PT1sP251bGw6KGwuc3R5bGUuZmlsbD1vLHtkb206bCxkYXRhOnN9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOm99PWksYT1VRCh0Py5kb20sKCk9PntsZXQgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7cmV0dXJuIHMuc3R5bGUuZmlsbD1yLHMuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLHMuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLHMuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcobykpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKHMpLHN9LHM9PihzLnN0eWxlLmZpbGw9cixzLnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSxzLnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSxzLnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKG8pKSxzKSxpKTtyZXR1cm4gbnVsbD09PWE/bnVsbDp7ZG9tOmEsZGF0YTplfX1jcmVhdGVPclVwZGF0ZVRyYXBlem9pZE9iamVjdCh0LGUsaSxyKXtpZihlLnkhPT1pLnkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklucHV0IGVycm9yOiBzdGFydC55ICE9IGVuZC55LiIpO2xldHthbHRpdHVkZTpvLGNvbG9yOmF9PXIscz0yL01hdGguc3FydCgzKSpvLGw9bmV3IEZsb2F0MzJBcnJheShbZS54LXMvMixlLnkrby8yLGUueCxlLnktby8yLGkueCxpLnktby8yLGkueCtzLzIsaS55K28vMl0pLGM9VUQodD8uZG9tLCgpPT57bGV0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtkLmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLGQuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IHU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gZC5zZXRBdHRyaWJ1dGUoImQiLHUrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChkKSxkfSxkPT57bGV0IHU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gZC5zZXRBdHRyaWJ1dGUoImQiLHUrIloiKSxkfSxyKTtyZXR1cm4gbnVsbD09PWM/bnVsbDooYy5zdHlsZS5maWxsPWEse2RvbTpjLGRhdGE6bH0pfWRpc3Bvc2UoKXt9fSh0LmNvbnRhaW5lcik7YnJlYWs7Y2FzZSBaaS5XRUJHTDp7bGV0IGU9bmV3IHNBO3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT1uZXcgdV8sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLEdsX2lzV2ViR2wyT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkmJnQgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMmJih0LnN0eWxlPXQuc3R5bGV8fHt9KSxyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHIpLHRoaXMucmVuZGVyZXI9bmV3IHFpKHtjYW52YXM6dCxhbnRpYWxpYXM6ITAsYWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oaSl9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7bGV0IGU9dC5vYmozZDtpZih0aGlzLnNjZW5lLnJlbW92ZShlKSxlIGluc3RhbmNlb2YgY28pe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2xldCBpPUFycmF5LmlzQXJyYXkoZS5tYXRlcmlhbCk/ZS5tYXRlcmlhbDpbZS5tYXRlcmlhbF07Zm9yKGxldCByIG9mIGkpci5kaXNwb3NlKCl9fXNldFVzZURhcmtNb2RlKHQpe3RoaXMuYmFja2dyb3VuZENvbG9yPXQ/IiMzMDMwMzAiOiIjZmZmIn1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe2lmKCF0JiYhaS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOnIsd2lkdGg6b309aTtpZighdCl7bGV0IGQ9elYodGhpcy5iYWNrZ3JvdW5kQ29sb3IsaS5jb2xvcixpLm9wYWNpdHk/PzEpLHU9bmV3IFdpLHA9bmV3IFdkKHtjb2xvcjpkfSksZj1uZXcgY28odSxwKTtyZXR1cm4gcC52aXNpYmxlPXIsT3RlKHUsZSxvKSx0aGlzLnNjZW5lLmFkZChmKSx7dHlwZTpabC5MSU5FLGRhdGE6ZSxvYmozZDpmLHdpZHRoOm99fWxldHtkYXRhOmEsb2JqM2Q6cyx3aWR0aDpsfT10O3JldHVybiBpQSh0aGlzLmJhY2tncm91bmRDb2xvcixzLGQ9PigobyE9PWx8fCFhfHwhR2xfYXJlUG9seWxpbmVzRXF1YWwoYSxlKSkmJk90ZShkLGUsbyksZCksaSk/e3R5cGU6WmwuTElORSxkYXRhOmUsb2JqM2Q6cyx3aWR0aDpvfTp0fWNyZWF0ZU1lc2godCxlKXtpZighZS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOmksY29sb3I6cixvcGFjaXR5Om99PWUsYT16Vih0aGlzLmJhY2tncm91bmRDb2xvcixyLG8/PzEpLHM9bmV3IFNtKHtjb2xvcjphLHZpc2libGU6aX0pO3JldHVybiBuZXcgY28odCxzKX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyfT1pLG89cipNYXRoLnNxcnQoMykvMixhPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55LW8vMyxlLngrci8yLGUueS1vLzMsZS54LGUueSsyKm8vM10pO2lmKCF0KXtsZXQgbD1uZXcgV2k7UHRlKGwsYSk7bGV0IGM9dGhpcy5jcmVhdGVNZXNoKGwsaSk7cmV0dXJuIG51bGw9PT1jP251bGw6KHRoaXMuc2NlbmUuYWRkKGMpLHt0eXBlOlpsLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpjfSl9cmV0dXJuIGlBKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsbD0+KFB0ZShsLGEpLGwpLGkpP3t0eXBlOlpsLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWksbz1uZXcgcF8oaS5yYWRpdXMpO2lmKCF0KXtsZXQgcz10aGlzLmNyZWF0ZU1lc2gobyxpKTtyZXR1cm4gbnVsbD09PXM/bnVsbDoocy5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChzKSx7dHlwZTpabC5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnN9KX1yZXR1cm4gaUEodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+byxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpabC5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOm99PXIsYT0yL01hdGguc3FydCgzKSpvLHM9bmV3IHFkKFtuZXcgJGUoZS54LWEvMixlLnktby8yKSxuZXcgJGUoZS54LGUueStvLzIpLG5ldyAkZShpLngsaS55K28vMiksbmV3ICRlKGkueCthLzIsaS55LW8vMildKTtzLmF1dG9DbG9zZT0hMDtsZXQgbD1uZXcgQW0ocyk7aWYoIXQpe2xldCBkPXRoaXMuY3JlYXRlTWVzaChsLHIpO3JldHVybiBudWxsPT09ZD9udWxsOih0aGlzLnNjZW5lLmFkZChkKSx7dHlwZTpabC5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDpkfSl9cmV0dXJuIGlBKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsKCk9Pmwscik/e3R5cGU6WmwuVFJBUEVaT0lELGRhdGE6W2UsaV0sb2JqM2Q6dC5vYmozZH06dH1mbHVzaCgpe3RoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsdGhpcy5jb29yZGluYXRvci5nZXRDYW1lcmEoKSl9ZGlzcG9zZSgpe3RoaXMucmVuZGVyZXIuZGlzcG9zZSgpfX0odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgYUEoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoamwodCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShqbCh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KHt4OjAseTowLC4uLnR9KSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKHt4OjAseTowLC4uLnR9KSx0aGlzLnNlcmllc0xpbmVWaWV3LnNldExheW91dFJlY3Qoey4uLnQseDowLHk6MH0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2kscl0pPT57bGV0IG89dGhpcy5tZXRhZGF0YU1hcFtpXTsoIW98fHIuY29sb3IhPT1vLmNvbG9yfHxyLnZpc2libGUhPT1vLnZpc2libGV8fHIub3BhY2l0eSE9PW8ub3BhY2l0eSkmJihlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW2ldPXJ9KSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLChuPT57c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKX1yZXBhaW50KCl7dGhpcy5zZXJpZXNMaW5lVmlldy5yZW5kZXIoKSx0aGlzLnJlbmRlcmVyLmZsdXNoKCksdGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCl9fSx5cz0oKCk9PihmdW5jdGlvbihuKXtuW24uU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsbltuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsbltuLlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLG5bbi5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIixuW24uSU5JVD00XT0iSU5JVCIsbltuLkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsbltuLkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCIsbltuLkRJU1BPU0VEPTddPSJESVNQT1NFRCJ9KHlzfHwoeXM9e30pKSx5cykpKCkseF89KCgpPT4oZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KHhffHwoeF89e30pKSx4XykpKCk7ZnVuY3Rpb24gTHRlKG4pe2lmKG4uaW5jbHVkZXMoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiV29ya2VyIGZhY3Rvcnkgb25seSBhbGxvd3MgZmlsZSBuYW1lIGFuZCBubyByZXNvdXJjZSBwYXRoLiIpO3JldHVybiBuZXcgV29ya2VyKG4pfXZhciBQbT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUhPT1aaS5XRUJHTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IHVzZSBub24gV0VCR0wgcmVuZGVyZXIgZm9yIHRoZSBvZmZzY3JlZW4gbGluZSBjaGFydC4gUmVjZWl2ZWQgJHtaaVt0LnR5cGVdfSBgKTtsZXQgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9bz0+e3RoaXMub25NZXNzYWdlRnJvbVdvcmtlcihvLmRhdGEpfSx0aGlzLnR4TWVzc2FnZVBvcnQ9ZS5wb3J0MTtsZXQgaT10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9UG0ud29ya2VyUG9vbC5nZXROZXh0KCk7bGV0IHI9e3R5cGU6eXMuSU5JVCxjYW52YXM6aSxkZXZpY2VQaXhlbFJhdGlvOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGRpbTp0LmRvbURpbWVuc2lvbixyZW5kZXJlclR5cGU6dC50eXBlLHVzZURhcmtNb2RlOnQudXNlRGFya01vZGV9O3RoaXMud29ya2VySW5zdGFuY2UucG9zdE1lc3NhZ2UocixbaSxlLnBvcnQyXSl9ZGlzcG9zZSgpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6eXMuRElTUE9TRUR9KSx0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6eXMuU0NBTEVfVVBEQVRFRCxheGlzOiJ4IixzY2FsZVR5cGU6dH0pfXNldFlTY2FsZVR5cGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTp5cy5TQ0FMRV9VUERBVEVELGF4aXM6InkiLHNjYWxlVHlwZTp0fSl9cmVzaXplKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6eXMuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOnlzLlNFUklFU19NRVRBREFUQV9DSEFOR0VELG1ldGFkYXRhOnR9KX1zZXRWaWV3Qm94KHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6eXMuVklFV19CT1hfVVBEQVRFRCxleHRlbnQ6dH0pfXNldERhdGEodCl7bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bi5yZWR1Y2UoKG8sYSk9Pm8rYS5wb2ludHMubGVuZ3RoLDApLGU9MCxpPW5ldyBGbG9hdDY0QXJyYXkoMip0KSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtyLnB1c2goe2lkOm8uaWQsbGVuZ3RoOm8ucG9pbnRzLmxlbmd0aH0pO2ZvcihsZXQgYT0wO2E8by5wb2ludHMubGVuZ3RoO2ErKylpW2UrK109by5wb2ludHNbYV0ueCxpW2UrK109by5wb2ludHNbYV0ueX1yZXR1cm57aWRzQW5kTGVuZ3RoczpyLGZsYXR0ZW5lZFNlcmllczppLmJ1ZmZlcn19KHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6eXMuU0VSSUVTX0RBVEFfVVBEQVRFRCxjb21wYWN0RGF0YVNlcmllczplfSxbZS5mbGF0dGVuZWRTZXJpZXNdKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOnlzLkRBUktfTU9ERV9VUERBVEVELHVzZURhcmtNb2RlOnR9KX1zZW5kTWVzc2FnZSh0LGUpe2U/dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQsZSk6dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQpfW9uTWVzc2FnZUZyb21Xb3JrZXIodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSB4Xy5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpO2JyZWFrO2Nhc2UgeF8uT05fQ09OVEVYVF9MT1NUOnRoaXMuY2FsbGJhY2tzLm9uQ29udGV4dExvc3QoKX19fTtmdW5jdGlvbiBZYyhuLHQpe3JldHVybiJ4Ij09PXQ/WzAsbi53aWR0aF06W24uaGVpZ2h0LDBdfWZ1bmN0aW9uICR4KG4sdCl7bGV0IGU9TWF0aC5mbG9vcihuLzUwKTtyZXR1cm4gTWF0aC5taW4oZSx0KX1mdW5jdGlvbiBkQShuLHQsZSxpKXtyZXR1cm57bWFqb3I6W10sbWlub3I6bi50aWNrcyhpLGUpLm1hcChvPT4oe3ZhbHVlOm8sdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobyl9KSl9fVBtLndvcmtlclBvb2w9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZT0xMCxpPUx0ZSl7dGhpcy53b3JrZXJSZXNvdXJjZVBhdGg9dCx0aGlzLm1heFBvb2xTaXplPWUsdGhpcy53b3JrZXJGYWN0b3J5PWksdGhpcy53b3JrZXJzPVtdfWdldE5leHQoKXtsZXQgdDtpZih0aGlzLndvcmtlcnMuZXZlcnkoKHthY3RpdmVDb3VudDppfSk9Pmk+MCkmJnRoaXMud29ya2Vycy5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7bGV0IGk9dGhpcy53b3JrZXJGYWN0b3J5KHRoaXMud29ya2VyUmVzb3VyY2VQYXRoKTt0PXthY3RpdmVDb3VudDowLHBvc3RNZXNzYWdlOihyLG8pPT57aS5wb3N0TWVzc2FnZShyLG8pfSxmcmVlOigpPT57dC5hY3RpdmVDb3VudD1NYXRoLm1heCh0LmFjdGl2ZUNvdW50LTEsMCl9fSx0aGlzLndvcmtlcnMucHVzaCh0KX1lbHNle2xldCBpPXRoaXMud29ya2Vycy5tYXAoKHthY3RpdmVDb3VudDpvfSk9Pm8pLHI9aS5pbmRleE9mKE1hdGgubWluKC4uLmkpKTt0PXRoaXMud29ya2Vyc1tyXX1yZXR1cm4gdC5hY3RpdmVDb3VudCsrLHR9fSgiY2hhcnRfd29ya2VyLmpzP19maWxlX2hhc2g9MmMxZTcxYzUiKTt2YXIgalY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTtmdW5jdGlvbiBIdGUobil7Zm9yKGxldCB0IG9mIG4paWYoU3RyaW5nKHQpLmluY2x1ZGVzKCJlIikpcmV0dXJuITA7cmV0dXJuITF9dmFyIGVDPXtnZXRTdGFuZGFyZFRpY2tzOmRBLGdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZTpmdW5jdGlvbihuLHQsZSxpKXtsZXRbcixvXT1pLGE9bi50aWNrcyhpLDIpO2lmKG8tcj49ODY0ZTV8fGEubGVuZ3RoPjIpcmV0dXJuIGRBKG4sdCxlLGkpO2xldCBzPW4udGlja3MoaSxlKTtyZXR1cm57bWFqb3I6YS5tYXAobD0+KHtzdGFydDpsLHRpY2tGb3JtYXR0ZWRTdHJpbmc6dC5mb3JtYXRTaG9ydChsKX0pKSxtaW5vcjpzLm1hcChsPT4oe3ZhbHVlOmwsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobCl9KSl9fSxnZXRUaWNrc0ZvckxpbmVhclNjYWxlOmZ1bmN0aW9uKG4sdCxlLGkpe2xldFtyLG9dPWksYT1NYXRoLmFicyhvLXIpO2lmKGE+LjAwMSlyZXR1cm4gZEEobix0LGUsaSk7bGV0IHM9bi50aWNrcyhbcixvXSxlKSxsPW4udGlja3MoW3Isb10sMik7aWYoSHRlKHMpfHxIdGUobCkpcmV0dXJuIGRBKG4sdCxlLGkpO2xldCBjPVtdLGQ9ZnVuY3Rpb24obil7bGV0IHQ9bi50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUtIiwyKTtyZXR1cm4gMj09PXQubGVuZ3RoP051bWJlcih0WzFdKS0xOjB9KGEpO2E8MSYmbC5ldmVyeShmPT57bGV0IG09TWF0aC5hYnMoZik7cmV0dXJuIG0+PTAmJm08MX0pJiYoZCs9MSk7bGV0IHU9bmV3IE1hcDtmb3IobGV0IGYgb2YgbCl7bGV0W20seT0iIl09U3RyaW5nKGYpLnNwbGl0KCIuIiwyKSxNPU51bWJlcihtKyIuIit5LnNsaWNlKDAsZCkpO3Uuc2V0KE0se3N0YXJ0Ok0sdGlja0Zvcm1hdHRlZFN0cmluZzowPT09TT8iXHUyMDE0Ijp0LmZvcm1hdFJlYWRhYmxlKE0pfSl9bGV0IHA9MTAqTWF0aC5wb3coMTAsLWQpO2ZvcihsZXQgZiBvZiBzKWZvcihsZXQgbSBvZlsuLi51LmtleXMoKV0ucmV2ZXJzZSgpKXtsZXQgeT1mLW07aWYoeT49MCYmeTxwKXtpZigwPT09bSljLnB1c2goe3ZhbHVlOmYsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2soZil9KTtlbHNle2xldCBNPVN0cmluZyhmKS5zbGljZShTdHJpbmcobSkubGVuZ3RoKTtjLnB1c2goe3ZhbHVlOmYsdGlja0Zvcm1hdHRlZFN0cmluZzpgXHUyMDI2JHtNfHwiMCJ9YH0pfWJyZWFrfX1yZXR1cm57bWFqb3I6QXJyYXkuZnJvbSh1LnZhbHVlcygpKSxtaW5vcjpjfX0sZmlsdGVyVGlja3NCeVZpc2liaWxpdHk6ZnVuY3Rpb24obix0LGUsaSxyPTUpe2lmKCFuLmxlbmd0aHx8IWpWKXJldHVybiBuO2xldCBvPSJ4Ij09PWU/MTotMSxhPW51bGw7cmV0dXJuIG4uZmlsdGVyKHM9PntsZXQgbD10KHMpO2pWLmZvbnQ9aTtsZXQgYz1qVi5tZWFzdXJlVGV4dChzLnRpY2tGb3JtYXR0ZWRTdHJpbmcpLGQ9IngiPT09ZT9jLndpZHRoOmMuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQtYy5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQ7cmV0dXJuIG51bGw9PT1hPyEobCtvKmQ8MHx8KGE9bCtvKmQsMCkpOiEobyooYStvKnItbCk+MHx8KGE9bCtvKmQsMCkpfSl9fTtmdW5jdGlvbiBTMmUobix0KXtpZigxJm4mJihUbigpLGgoMCwiZyIsMTcpKDEsInRleHQiKSxUKDIpLGcoKSxoKDMsInRpdGxlIiksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTtiKDEpLE10KCJmb250IixpLmF4aXNGb250KSxQZSgieCIsaS50ZXh0WFBvc2l0aW9uKGUudmFsdWUpKSgieSIsaS50ZXh0WVBvc2l0aW9uKGUudmFsdWUpKSxiKDEpLHplKCIgIixlLnRpY2tGb3JtYXR0ZWRTdHJpbmcsIiAiKSxiKDIpLHV0KGkuZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnZhbHVlKSl9fWZ1bmN0aW9uIEUyZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMjApKDEsInNwYW4iKSxUKDIpLGcoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXQubGFzdCxvPXcoMik7TXQoImxlZnQiLG8uZ2V0TWFqb3JYUG9zaXRpb24oZSksInB4IikoIndpZHRoIixvLmdldE1ham9yV2lkdGhTdHJpbmcoZSxyLG8ubWFqb3JUaWNrc1tpKzFdKSkoImJvdHRvbSIsby5nZXRNYWpvcllQb3NpdGlvbihlKSwicHgiKSgiaGVpZ2h0IixvLmdldE1ham9ySGVpZ2h0U3RyaW5nKGUscixvLm1ham9yVGlja3NbaSsxXSkpKCJmb250IixvLmF4aXNGb250KSxRZSgibWFqb3ItbGFiZWwiLCEwKSgibGFzdCIsciksXygidGl0bGUiLG8uZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnN0YXJ0KSksYigyKSx1dChlLnRpY2tGb3JtYXR0ZWRTdHJpbmcpfX1mdW5jdGlvbiBUMmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTgpLFMoMSxFMmUsMywxNiwic3BhbiIsMTkpLGcoKSksMiZuKXtsZXQgZT13KCk7YigxKSxfKCJuZ0Zvck9mIixlLm1ham9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGUudHJhY2tCeU1ham9yVGljayl9fXZhciB6dGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlPW5ldyBMLHRoaXMuZWRpdE1lbnVPcGVuZWQ9ITEsdGhpcy5tYWpvclRpY2tzPVtdLHRoaXMubWlub3JUaWNrcz1bXX1uZ09uQ2hhbmdlcygpe2xldCBlPW51bGwscj0keCgieCI9PT10aGlzLmF4aXM/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5kb21EaW0uaGVpZ2h0LHRoaXMuZ3JpZENvdW50KTtlPXRoaXMuc2NhbGUgaW5zdGFuY2VvZiBzeD9lQy5nZXRUaWNrc0ZvckxpbmVhclNjYWxlKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxyLHRoaXMuYXhpc0V4dGVudCk6dGhpcy5zY2FsZSBpbnN0YW5jZW9mIGx4P2VDLmdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZSh0aGlzLnNjYWxlLHRoaXMuZ2V0Rm9ybWF0dGVyKCkscix0aGlzLmF4aXNFeHRlbnQpOmVDLmdldFN0YW5kYXJkVGlja3ModGhpcy5zY2FsZSx0aGlzLmdldEZvcm1hdHRlcigpLHIsdGhpcy5heGlzRXh0ZW50KSx0aGlzLm1ham9yVGlja3M9ZS5tYWpvcix0aGlzLm1pbm9yVGlja3M9ZUMuZmlsdGVyVGlja3NCeVZpc2liaWxpdHkoZS5taW5vcixvPT50aGlzLmdldERvbVBvcyhvLnZhbHVlKSx0aGlzLmF4aXMsIjExcHggUm9ib3RvLCBzYW5zLXNlcmlmIil9Z2V0Rm9ybWF0dGVyKCl7cmV0dXJuIHRoaXMuY3VzdG9tRm9ybWF0dGVyPz90aGlzLnNjYWxlLmRlZmF1bHRGb3JtYXR0ZXJ9dHJhY2tCeU1pbm9yVGljayhlKXtyZXR1cm4gZS52YWx1ZX10cmFja0J5TWFqb3JUaWNrKGUpe3JldHVybiBlLnN0YXJ0fWdldERvbVBvcyhlKXtyZXR1cm4gdGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMuYXhpc0V4dGVudCxZYyh0aGlzLmRvbURpbSx0aGlzLmF4aXMpLGUpfXRleHRYUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzP1N0cmluZyh0aGlzLmdldERvbVBvcyhlKSk6IjEwMCUifXRleHRZUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzPyIiOlN0cmluZyh0aGlzLmdldERvbVBvcyhlKSl9Z2V0TWFqb3JYUG9zaXRpb24oZSl7cmV0dXJuInkiPT09dGhpcy5heGlzPzA6TWF0aC5taW4odGhpcy5kb21EaW0ud2lkdGgsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9yV2lkdGhTdHJpbmcoZSxpLHIpe3JldHVybiJ5Ij09PXRoaXMuYXhpcz8iIjooaXx8IXI/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5nZXRNYWpvclhQb3NpdGlvbihyKSktdGhpcy5nZXRNYWpvclhQb3NpdGlvbihlKSsicHgifWdldE1ham9yWVBvc2l0aW9uKGUpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8wOnRoaXMuZG9tRGltLmhlaWdodC1NYXRoLm1pbih0aGlzLmRvbURpbS5oZWlnaHQsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9ySGVpZ2h0U3RyaW5nKGUsaSxyKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6KGl8fCFyP3RoaXMuZG9tRGltLmhlaWdodDp0aGlzLmdldE1ham9yWVBvc2l0aW9uKHIpKS10aGlzLmdldE1ham9yWVBvc2l0aW9uKGUpKyJweCJ9a2V5ZG93blByZXZlbnRDbG9zZShlKXsiRXNjYXBlIiE9PWUua2V5JiZlLnN0b3BQcm9wYWdhdGlvbigpfWV4dGVudENoYW5nZWQoZSxpKXtsZXQgcj1OdW1iZXIoZSksbz1OdW1iZXIoaSk7aWYobzxyKXtsZXQgYT1yO3I9byxvPWF9IU51bWJlci5pc0Zpbml0ZShyKXx8IU51bWJlci5pc0Zpbml0ZShvKXx8dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdChbcixvXSl9b25BeGlzVXBkYXRlTWVudU9wZW4oZSxpLHIpe2UudmFsdWU9U3RyaW5nKHJbMF0pLGkudmFsdWU9U3RyaW5nKHJbMV0pLGUuZm9jdXMoKX1zZXRFZGl0TWVudU9wZW5lZChlKXt0aGlzLmVkaXRNZW51T3BlbmVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtYXhpcyJdXSxpbnB1dHM6e2F4aXNFeHRlbnQ6ImF4aXNFeHRlbnQiLGF4aXM6ImF4aXMiLHNjYWxlOiJzY2FsZSIsZ3JpZENvdW50OiJncmlkQ291bnQiLGRvbURpbToiZG9tRGltIixjdXN0b21Gb3JtYXR0ZXI6ImN1c3RvbUZvcm1hdHRlciJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIn0sZmVhdHVyZXM6W0d0XSxkZWNsczoyNix2YXJzOjEzLGNvbnN0czpbWzEsImxpbmUiXSxbMSwibWlub3IiXSxbMSwidGlja3MiXSxbImNsYXNzIiwibWlub3ItdGljay1sYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNsaWNrIHRvIG1hbnVhbGx5IHNldCBtaW4gJiBtYXggdmFsdWVzIiwzLCJtYXRNZW51VHJpZ2dlckZvciIsIm1lbnVPcGVuZWQiLCJtZW51Q2xvc2VkIl0sWyJtYXRNZW51VHJpZ2dlciIsIm1hdE1lbnVUcmlnZ2VyIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWyJjbGFzcyIsIm1ham9yIHRpY2tzIiw0LCJuZ0lmIl0sWyJ4UG9zaXRpb24iLCJiZWZvcmUiLDMsInlQb3NpdGlvbiJdLFsibWFudWFsQ29udHJvbCIsIm1hdE1lbnUiXSxbMSwiZXh0ZW50LWVkaXQtaW5wdXQiLDMsImNsaWNrIiwia2V5ZG93biJdLFsidHlwZSIsIm51bWJlciIsMywidmFsdWUiXSxbIm1pbklucHV0IiwiIl0sWyJtYXhJbnB1dCIsIiJdLFsxLCJleHRlbnQtZWRpdC1jb250cm9sIiwzLCJrZXlkb3duIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsMSwiZXh0ZW50LWVkaXQtY2hhbmdlIiwzLCJjbGljayJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwxLCJleHRlbnQtZWRpdC1jYW5jZWwiLDMsImNsaWNrIl0sWzEsIm1pbm9yLXRpY2stbGFiZWwiXSxbMSwibWFqb3IiLCJ0aWNrcyJdLFszLCJtYWpvci1sYWJlbCIsImxhc3QiLCJsZWZ0Iiwid2lkdGgiLCJib3R0b20iLCJoZWlnaHQiLCJmb250IiwidGl0bGUiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFszLCJ0aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSl7bGV0IHI9Z2UoKTtoKDAsImRpdiIpLFAoMSwiZGl2IiwwKSxoKDIsImRpdiIsMSksVG4oKSxoKDMsInN2ZyIsMiksUyg0LFMyZSw1LDYsImciLDMpLGcoKSxPbygpLGgoNSwiYnV0dG9uIiw0LDUpLEQoIm1lbnVPcGVuZWQiLGZ1bmN0aW9uKCl7WChyKTtsZXQgYT10dCgxNSkscz10dCgyMCk7cmV0dXJuIGkub25BeGlzVXBkYXRlTWVudU9wZW4oYSxzLGkuYXhpc0V4dGVudCksUShpLnNldEVkaXRNZW51T3BlbmVkKCEwKSl9KSgibWVudUNsb3NlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5zZXRFZGl0TWVudU9wZW5lZCghMSl9KSxQKDcsIm1hdC1pY29uIiw2KSxnKCkoKSxTKDgsVDJlLDIsMiwiZGl2Iiw3KSxnKCksaCg5LCJtYXQtbWVudSIsOCw5KSgxMSwiZGl2IiwxMCksRCgiY2xpY2siLGZ1bmN0aW9uKGEpe3JldHVybiBhLnN0b3BQcm9wYWdhdGlvbigpfSkoImtleWRvd24iLGZ1bmN0aW9uKGEpe3JldHVybiBpLmtleWRvd25QcmV2ZW50Q2xvc2UoYSl9KSxoKDEyLCJsYWJlbCIpLFQoMTMsIm1pbiIpLGcoKSxQKDE0LCJpbnB1dCIsMTEsMTIpLGcoKSxoKDE2LCJkaXYiLDEwKSxEKCJjbGljayIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3RvcFByb3BhZ2F0aW9uKCl9KSgia2V5ZG93biIsZnVuY3Rpb24oYSl7cmV0dXJuIGkua2V5ZG93blByZXZlbnRDbG9zZShhKX0pLGgoMTcsImxhYmVsIiksVCgxOCwibWF4IiksZygpLFAoMTksImlucHV0IiwxMSwxMyksZygpLGgoMjEsImRpdiIsMTQpLEQoImtleWRvd24iLGZ1bmN0aW9uKGEpe3JldHVybiBpLmtleWRvd25QcmV2ZW50Q2xvc2UoYSl9KSxoKDIyLCJidXR0b24iLDE1KSxEKCJjbGljayIsZnVuY3Rpb24oKXtYKHIpO2xldCBhPXR0KDE1KSxzPXR0KDIwKSxsPXR0KDYpO3JldHVybiBpLmV4dGVudENoYW5nZWQoYS52YWx1ZSxzLnZhbHVlKSxRKGwuY2xvc2VNZW51KCkpfSksVCgyMywiIENoYW5nZSAiKSxnKCksaCgyNCwiYnV0dG9uIiwxNiksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgociksUSh0dCg2KS5jbG9zZU1lbnUoKSl9KSxUKDI1LCIgQ2FuY2VsICIpLGcoKSgpKCl9aWYoMiZlKXtsZXQgcj10dCgxMCk7a2EoaS5heGlzKyItYXhpcyBheGlzIiksYig0KSxfKCJuZ0Zvck9mIixpLm1pbm9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeU1pbm9yVGljayksYigxKSxRZSgiZXh0ZW50LWVkaXQtYnV0dG9uIiwhMCkoImV4dGVudC1lZGl0LW1lbnUtb3BlbmVkIixpLmVkaXRNZW51T3BlbmVkKSxfKCJtYXRNZW51VHJpZ2dlckZvciIsciksYigzKSxfKCJuZ0lmIixpLm1ham9yVGlja3MubGVuZ3RoKSxiKDEpLF8oInlQb3NpdGlvbiIsInkiPT09aS5heGlzPyJhYm92ZSI6ImJlbG93IiksYig1KSxfKCJ2YWx1ZSIsaS5heGlzRXh0ZW50WzBdKSxiKDUpLF8oInZhbHVlIixpLmF4aXNFeHRlbnRbMV0pfX0sZGVwZW5kZW5jaWVzOltkbixGZSxGbixEbixrYyxQY10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO2ZvbnQtc2l6ZToxMXB4O3VzZXItc2VsZWN0Om5vbmV9LmF4aXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0sIC5taW5vcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDA7b3ZlcmZsb3c6aGlkZGVufS5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7ZmxleDowIDAgMXB4O2p1c3RpZnktY29udGVudDpzdHJldGNofS50aWNrc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTozcHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTp0ZXh0LWJlZm9yZS1lZGdlO3RleHQtYW5jaG9yOm1pZGRsZX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6NXB4fS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6Y2VudHJhbDt0ZXh0LWFuY2hvcjplbmR9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlO2ZvbnQtc2l6ZTowO2hlaWdodDoyNHB4O2xpbmUtaGVpZ2h0OjI0cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O3RvcDo1cHg7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MjRweH0uZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDo1cHg7ZGlzcGxheTpncmlkO2ZvbnQtc2l6ZToxMnB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczozMHB4IG1pbm1heChhdXRvLCAxMDBweCk7aGVpZ2h0OjMwcHg7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtaW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItcmFkaXVzOjRweDtib3JkZXItc3R5bGU6c29saWQ7Y29sb3I6aW5oZXJpdH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjEuNDttYXJnaW4tbGVmdDo1cHg7cGFkZGluZzowIDEwcHh9LmF4aXNbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4dGVudC1lZGl0LW1lbnUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OnZpc2libGV9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Y29udGFpbjpzdHJpY3R9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3doaXRlLXNwYWNlOm5vd3JhcH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzllOWU5ZTtwYWRkaW5nOjAgNXB4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsLmxhc3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzllOWU5ZTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjVweCAwO3dpZHRoOjEwMCV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB0QyhuLHQpe2xldCBlPU1hdGgubWluKE5jKG4ubWFwKCh7eDpvfSk9Pm8pLHQpLG4ubGVuZ3RoLTEpLGk9TWF0aC5tYXgoMCxlLTEpO3JldHVybiBNYXRoLmFicyhuW2ldLngtdCktTWF0aC5hYnMobltlXS54LXQpPD0wP2k6ZX1mdW5jdGlvbiBVdGUobix0LGUsaSxyLG8pe2xldCBhO3N3aXRjaChuLmRlbHRhTW9kZSl7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTDphPTE7YnJlYWs7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FOmE9ODticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0U6YT0yMDticmVhaztkZWZhdWx0OmE9MSxjb25zb2xlLndhcm4oYFVua25vd24gV2hlZWxFdmVudCBkZWx0YU1vZGU6ICR7bi5kZWx0YU1vZGV9LmApfWxldCBzPW4uZGVsdGFZKmEsbD1zPDA/TWF0aC5tYXgocyppLC0uOTUpOnMqaSx7d2lkdGg6YyxoZWlnaHQ6ZH09ZSx1PVtyLnJldmVyc2UodC54LFswLGNdLC1uLm9mZnNldFgqbCksci5yZXZlcnNlKHQueCxbMCxjXSxjKyhjLW4ub2Zmc2V0WCkqbCldLHA9W28ucmV2ZXJzZSh0LnksW2QsMF0sLW4ub2Zmc2V0WSpsKSxvLnJldmVyc2UodC55LFtkLDBdLGQrKGQtbi5vZmZzZXRZKSpsKV07cmV0dXJue3g6dVsxXTx1WzBdP1t1WzFdLHVbMF1dOnUseTpwWzFdPHBbMF0/W3BbMV0scFswXV06cH19dmFyIEEyZT1bImRvdHMiXTtmdW5jdGlvbiBSMmUobix0KXtpZigxJm4mJihUbigpLFAoMCwiY2lyY2xlIiwxMSkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoMik7UGUoImN4IixpLmdldERvbVgoZS5kYXRhUG9pbnQueCkpKCJjeSIsaS5nZXREb21ZKGUuZGF0YVBvaW50LnkpKSgiZmlsbCIsZS5tZXRhZGF0YS5jb2xvcil9fWZ1bmN0aW9uIGsyZShuLHQpe2lmKDEmbiYmKFRuKCksVHQoMCksUygxLFIyZSwxLDMsImNpcmNsZSIsMTApLER0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO2IoMSksXygibmdJZiIsaS5zaG91bGRSZW5kZXJUb29sdGlwUG9pbnQoZS5kYXRhUG9pbnQpKX19ZnVuY3Rpb24gUDJlKG4sdCl7aWYoMSZuJiYoVG4oKSxUdCgwKSxTKDEsazJlLDIsMSwibmctY29udGFpbmVyIiw5KSxEdCgpKSwyJm4pe2xldCBlPXcoKTtiKDEpLF8oIm5nRm9yT2YiLGUuY3Vyc29yZWREYXRhKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlTZXJpZXNOYW1lKX19ZnVuY3Rpb24gTzJlKG4sdCl7aWYoMSZuJiYoVG4oKSxQKDAsInJlY3QiLDEyKSksMiZuKXtsZXQgZT13KCk7UGUoIngiLGUuem9vbUJveEluVWlDb29yZGluYXRlLngpKCJ3aWR0aCIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUud2lkdGgpKCJ5IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS55KSgiaGVpZ2h0IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS5oZWlnaHQpfX12YXIgRjJlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm57ZGF0YTpuLGN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ6dCxjdXJzb3JMb2NhdGlvbjplfX07ZnVuY3Rpb24gTDJlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDE0KSxUaSgxLDE1KSxnKCkpLDImbil7bGV0IGU9dygyKSxpPXR0KDExKTtiKDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUudG9vbHRpcFRlbXBsYXRlP2UudG9vbHRpcFRlbXBsYXRlOmkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsVHkoMixGMmUsZS5jdXJzb3JlZERhdGEsZS5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkLGUuY3Vyc29yTG9jYXRpb24pKX19ZnVuY3Rpb24gTjJlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO1MoMCxMMmUsMiw2LCJuZy10ZW1wbGF0ZSIsMTMpLEQoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKSl9KX1pZigyJm4pe2xldCBlPXcoKTtfKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixlLnRvb2x0aXBPcmlnaW5FbCkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixlLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQmJmUuc3RhdGUuZ2V0VmFsdWUoKT09PWUuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsZS50b29sdGlwUG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixlLnNjcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsITEpKCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwhMCkoImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwhMCl9fWZ1bmN0aW9uIEIyZShuLHQpe2lmKDEmbiYmKFR0KDApLGgoMSwidHIiLDE3KSgyLCJ0ZCIsMTgpLFAoMywic3BhbiIpLGcoKSxoKDQsInRkIiwxOSksVCg1KSxnKCksaCg2LCJ0ZCIpLFQoNyksZygpLGgoOCwidGQiKSxUKDkpLGcoKSgpLER0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigzKSxNdCgiYmFja2dyb3VuZC1jb2xvciIsZS5tZXRhZGF0YS5jb2xvciksYigyKSx1dChlLm1ldGFkYXRhLmRpc3BsYXlOYW1lKSxiKDIpLHV0KGUuZGF0YVBvaW50LnkpLGIoMiksdXQoZS5kYXRhUG9pbnQueCl9fWZ1bmN0aW9uIFYyZShuLHQpe2lmKDEmbiYmKGgoMCwidGFibGUiKSgxLCJ0aGVhZCIpKDIsInRyIiksUCgzLCJ0aCIsMTYpLGgoNCwidGgiKSxUKDUsIk5hbWUiKSxnKCksaCg2LCJ0aCIpLFQoNywiWSIpLGcoKSxoKDgsInRoIiksVCg5LCJYIiksZygpKCkoKSxoKDEwLCJ0Ym9keSIpLFMoMTEsQjJlLDEwLDUsIm5nLWNvbnRhaW5lciIsOSksZygpKCkpLDImbil7bGV0IGU9dC5kYXRhLGk9dygpO2IoMTEpLF8oIm5nRm9yT2YiLGUpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeVNlcmllc05hbWUpfX1mdW5jdGlvbiB6MmUobil7cmV0dXJuIG4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9dmFyIGp0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuc2Nyb2xsU3RyYXRlZ3k9aSx0aGlzLm9uVmlld0V4dGVudENoYW5nZT1uZXcgTCx0aGlzLm9uVmlld0V4dGVudFJlc2V0PW5ldyBMLHRoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlPW5ldyBMLHRoaXMuSW50ZXJhY3Rpb25TdGF0ZT1Ucix0aGlzLnN0YXRlPW5ldyBSaShUci5OT05FKSx0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPSExLHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OjAsd2lkdGg6MCxoZWlnaHQ6MCx5OjB9LHRoaXMudG9vbHRpcFBvc2l0aW9ucz1be29mZnNldFk6NSxvcmlnaW5YOiJzdGFydCIsb3ZlcmxheVg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTo1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WToidG9wIn0se29mZnNldFk6LTE1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRZOi0xNSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRYOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRYOi01LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJ0b3AifV0sdGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkPW51bGwsdGhpcy5jdXJzb3JMb2NhdGlvbj1udWxsLHRoaXMuY3Vyc29yZWREYXRhPVtdLHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSx0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBBZSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGF0ZS5zdWJzY3JpYmUoZT0+e3RoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlLmVtaXQoZSl9KSksdGhpcy5uZ1Vuc3Vic2NyaWJlLnBpcGUoVSgoKT0+e3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9KSksYWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsImRibGNsaWNrIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblZpZXdFeHRlbnRSZXNldC5lbWl0KCksdGhpcy5zdGF0ZS5uZXh0KFRyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxhaSh3aW5kb3csImtleWRvd24iLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuc2hvdWxkUGFuKGUpO2khPT10aGlzLnNwZWNpYWxLZXlQcmVzc2VkJiYodGhpcy5zcGVjaWFsS2V5UHJlc3NlZD1pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksYWkod2luZG93LCJrZXl1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5zaG91bGRQYW4oZSk7aSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxhaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLnN0YXRlLmdldFZhbHVlKCkscj10aGlzLnNob3VsZFBhbihlKT9Uci5QQU5OSU5HOlRyLkRSQUdfWk9PTUlORztpPT09VHIuTk9ORSYmcj09PVRyLkRSQUdfWk9PTUlORyYmKHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDplLm9mZnNldFgsd2lkdGg6MCx5OmUub2Zmc2V0WSxoZWlnaHQ6MH0pLGkhPT1yJiYodGhpcy5zdGF0ZS5uZXh0KHIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksYWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPShlLmJ1dHRvbnMmcHMuTEVGVCk9PT1wcy5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtsZXQgcj10aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZTtpZighaSYmdGhpcy5zdGF0ZS5nZXRWYWx1ZSgpPT09VHIuRFJBR19aT09NSU5HJiZyLndpZHRoPjAmJnIuaGVpZ2h0PjApe2xldCBvPXRoaXMuZ2V0RGF0YVgoci54KSxhPXRoaXMuZ2V0RGF0YVgoci54K3Iud2lkdGgpLHM9dGhpcy5nZXREYXRhWShyLnkrci5oZWlnaHQpLGw9dGhpcy5nZXREYXRhWShyLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W28sYV0seTpbcyxsXX19KX10aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1Uci5OT05FJiYodGhpcy5zdGF0ZS5uZXh0KFRyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksYWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNDdXJzb3JJbnNpZGU9ITAsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxhaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuc3RhdGUubmV4dChUci5OT05FKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSksYWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57c3dpdGNoKHRoaXMuc3RhdGUuZ2V0VmFsdWUoKSl7Y2FzZSBUci5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlLm5leHQoVHIuTk9ORSksdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBUci5OT05FOnRoaXMudXBkYXRlVG9vbHRpcChlKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2UgVHIuUEFOTklORzp7bGV0IGk9LWUubW92ZW1lbnRYLHI9LWUubW92ZW1lbnRZLHt3aWR0aDpvLGhlaWdodDphfT10aGlzLmRvbURpbSxzPXRoaXMuZ2V0RGF0YVgoaSksbD10aGlzLmdldERhdGFYKG8raSksYz10aGlzLmdldERhdGFZKGErciksZD10aGlzLmdldERhdGFZKHIpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W3MsbF0seTpbYyxkXX19KTticmVha31jYXNlIFRyLkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7bGV0IGk9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueCxlLm9mZnNldFhdLHI9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueSxlLm9mZnNldFldO3RoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4Ok1hdGgubWluKC4uLmkpLHdpZHRoOk1hdGgubWF4KC4uLmkpLU1hdGgubWluKC4uLmkpLHk6TWF0aC5taW4oLi4uciksaGVpZ2h0Ok1hdGgubWF4KC4uLnIpLU1hdGgubWluKC4uLnIpfX10aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfX0pLGFpKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkseWkoZT0+e2xldCBpPSFlLmN0cmxLZXkmJiFlLnNoaWZ0S2V5JiZlLmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksaT8oZS5wcmV2ZW50RGVmYXVsdCgpLHF0KGUpKTpKYSgzZTMpLnBpcGUoVnQoKCk9Pnt0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLFUoKCk9Pm51bGwpKX0pLFZlKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6VXRlKGUsdGhpcy52aWV3RXh0ZW50LHRoaXMuZG9tRGltLC4wMSx0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSl9KSx0aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1Uci5TQ1JPTExfWk9PTUlORyYmKHRoaXMuc3RhdGUubmV4dChUci5TQ1JPTExfWk9PTUlORyksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvdWxkUGFuKGUpe2xldCBpPWUuc2hpZnRLZXl8fGUuYWx0S2V5O2lmKGUgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KXJldHVybiBpO2xldCByPShlLmJ1dHRvbnMmcHMuTEVGVCk9PT1wcy5MRUZULG89KGUuYnV0dG9ucyZwcy5NSURETEUpPT09cHMuTUlERExFO3JldHVybiEoIXImJiFvKSYmKG8mJiFyfHxpKX10cmFja0J5U2VyaWVzTmFtZShlLGkpe3JldHVybiBpLmlkfWdldERvbVgoZSl7cmV0dXJuIHRoaXMueFNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LngsWWModGhpcy5kb21EaW0sIngiKSxlKX1nZXREYXRhWChlKXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCxZYyh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksWWModGhpcy5kb21EaW0sInkiKSxlKX1nZXREYXRhWShlKXtyZXR1cm4gdGhpcy55U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueSxZYyh0aGlzLmRvbURpbSwieSIpLGUpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludChlKXtyZXR1cm4gbnVsbCE9PWUmJiFpc05hTihlLngpJiYhaXNOYU4oZS55KX11cGRhdGVUb29sdGlwKGUpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKGUub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKGUub2Zmc2V0WSl9LHRoaXMuY3Vyc29yTG9jYXRpb249e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl9b25Ub29sdGlwRGlzcGxheURldGFjaGVkKCl7dGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExfXVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl7bGV0IGU9dGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLmN1cnNvcmVkRGF0YT1bXSx2b2lkKHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSk7dGhpcy5jdXJzb3JlZERhdGE9dGhpcy5pc0N1cnNvckluc2lkZT90aGlzLnNlcmllc0RhdGEubWFwKGk9Pih7c2VyaWVzRGF0dW06aSxtZXRhZGF0YTp0aGlzLnNlcmllc01ldGFkYXRhTWFwW2kuaWRdfSkpLmZpbHRlcigoe21ldGFkYXRhOml9KT0+aSYmaS52aXNpYmxlJiYhQm9vbGVhbihpLmF1eCkpLm1hcCgoe3Nlcmllc0RhdHVtOmksbWV0YWRhdGE6cn0pPT57bGV0IG89dEMoaS5wb2ludHMsZS54KSxhPWkucG9pbnRzW29dO3JldHVybntpZDppLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8sZGF0YVBvaW50OmEsZG9tUG9pbnQ6e3g6dGhpcy5nZXREb21YKGEueCkseTp0aGlzLmdldERvbVkoYS55KX0sbWV0YWRhdGE6cn19KS5maWx0ZXIoaT0+aSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhGdCksQyhQZikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihZZShBMmUsNyxiZSksWWUoenUsNSkpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkuZG90c0NvbnRhaW5lcj1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS5vdmVybGF5PXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJlFlKCJzaG93LXpvb20taW5zdHJ1Y3Rpb24iLGkuc2hvd1pvb21JbnN0cnVjdGlvbil9LGlucHV0czp7c2VyaWVzRGF0YToic2VyaWVzRGF0YSIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseVNjYWxlOiJ5U2NhbGUiLGRvbURpbToiZG9tRGltIix0b29sdGlwT3JpZ2luRWw6InRvb2x0aXBPcmlnaW5FbCIsdG9vbHRpcFRlbXBsYXRlOiJ0b29sdGlwVGVtcGxhdGUiLGRpc2FibGVUb29sdGlwOiJkaXNhYmxlVG9vbHRpcCJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIixvblZpZXdFeHRlbnRSZXNldDoib25WaWV3RXh0ZW50UmVzZXQiLG9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZToib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIn0sZmVhdHVyZXM6W1J0KFt7cHJvdmlkZTpQZix1c2VGYWN0b3J5OnoyZSxkZXBzOltPaV19XSksR3RdLGRlY2xzOjEyLHZhcnM6OSxjb25zdHM6W1sxLCJkb3RzIl0sWyJkb3RzIiwiIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiem9vbS1ib3giLDQsIm5nSWYiXSxbMSwiem9vbS1pbnN0cnVjdGlvbiJdLFsxLCJpbnN0cnVjdGlvbi1jb250ZW50Il0sWyJjZGtPdmVybGF5T3JpZ2luIiwiIiwxLCJ0b29sdGlwLW9yaWdpbiJdLFsidG9vbHRpcE9yaWdpbiIsImNka092ZXJsYXlPcmlnaW4iXSxbImRlZmF1bHRUb29sdGlwIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiciIsIjQiLDQsIm5nSWYiXSxbInIiLCI0Il0sWzEsInpvb20tYm94Il0sWyJjZGtDb25uZWN0ZWRPdmVybGF5IiwiIiwzLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IiwiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImRldGFjaCJdLFsxLCJ0b29sdGlwLWNvbnRhaW5lciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2lyY2xlLWhlYWRlciJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMSwibmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFRuKCksaCgwLCJzdmciLDAsMSksUygyLFAyZSwyLDIsIm5nLWNvbnRhaW5lciIsMiksUygzLE8yZSwxLDQsInJlY3QiLDMpLGcoKSxPbygpLGgoNCwiZGl2Iiw0KSg1LCJzcGFuIiw1KSxUKDYsIkFsdCArIFNjcm9sbCB0byBab29tIiksZygpKCksUCg3LCJkaXYiLDYsNyksUyg5LE4yZSwxLDcsbnVsbCwyKSxTKDEwLFYyZSwxMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw4LFp0KSksMiZlJiYoUWUoInBhbm5hYmxlIixpLnNwZWNpYWxLZXlQcmVzc2VkKSgiZHJhZ2dhYmxlIixpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuTk9ORXx8aS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORykoInBhbm5pbmciLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5QQU5OSU5HKSxiKDIpLF8oIm5nSWYiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSxiKDEpLF8oIm5nSWYiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5EUkFHX1pPT01JTkcpLGIoNiksXygibmdJZiIsIWkuZGlzYWJsZVRvb2x0aXApKX0sZGVwZW5kZW5jaWVzOltkbixGZSxNbyx6dSxIdV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7dXNlci1zZWxlY3Q6bm9uZX0uZG90c1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uZG90cy5kcmFnZ2FibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpjcm9zc2hhaXJ9LmRvdHMucGFubmFibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFifS5kb3RzLnBhbm5pbmdbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFiYmluZ30udG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVdID4gc3Bhbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC42KTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDt3aWR0aDoxMHB4fS50b29sdGlwLW9yaWdpbltfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9LnRvb2x0aXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjg1KTtib3JkZXItcmFkaXVzOjRweDtjb2xvcjojZmZmO2NvbnRhaW46cGFpbnQgc3R5bGUgbGF5b3V0O2ZvbnQtc2l6ZTouOWVtO292ZXJmbG93OmF1dG87cGFkZGluZzo1cHg7cG9pbnRlci1ldmVudHM6bm9uZTt3aWR0aDoxMDAlfXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDVweDt0ZXh0LWFsaWduOmxlZnR9dGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nLWJvdHRvbTo1cHh9Lnpvb20tYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsLW9wYWNpdHk6LjAzO2ZpbGw6IzAwMDtzdHJva2U6I2NjY30uem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xlZnQ6MDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDoxMHB4O3RyYW5zaXRpb246b3BhY2l0eSAuNXM7ei1pbmRleDoxfS5pbnN0cnVjdGlvbi1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjYpO2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7cGFkZGluZzo1cHggMTBweDt1c2VyLXNlbGVjdDpub25lfS5zaG93LXpvb20taW5zdHJ1Y3Rpb25bX25naG9zdC0lQ09NUCVdICAgLnpvb20taW5zdHJ1Y3Rpb25bX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGoyZShuLHQpe2lmKDEmbiYmKFRuKCksUCgwLCJsaW5lIiwyKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTtRZSgiemVybyIsMD09PWUpLFBlKCJ4MSIsaS5nZXREb21YKGUpKSgieDIiLGkuZ2V0RG9tWChlKSkoInkyIixpLmRvbURpbS5oZWlnaHQpfX1mdW5jdGlvbiBHMmUobix0KXtpZigxJm4mJihUbigpLFAoMCwibGluZSIsMykpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCk7UWUoInplcm8iLDA9PT1lKSxQZSgieTEiLGkuZ2V0RG9tWShlKSkoIngyIixpLmRvbURpbS53aWR0aCkoInkyIixpLmdldERvbVkoZSkpfX12YXIgR3RlPSgoKT0+e2NsYXNzIG57Z2V0RG9tWChlKXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCxZYyh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksWWModGhpcy5kb21EaW0sInkiKSxlKX1nZXRYVGlja3MoKXtyZXR1cm4gdGhpcy54U2NhbGUudGlja3ModGhpcy52aWV3RXh0ZW50LngsJHgodGhpcy5kb21EaW0ud2lkdGgsdGhpcy54R3JpZENvdW50KSl9Z2V0WVRpY2tzKCl7cmV0dXJuIHRoaXMueVNjYWxlLnRpY2tzKHRoaXMudmlld0V4dGVudC55LCR4KHRoaXMuZG9tRGltLmhlaWdodCx0aGlzLnlHcmlkQ291bnQpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibGluZS1jaGFydC1ncmlkLXZpZXciXV0saW5wdXRzOnt2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseEdyaWRDb3VudDoieEdyaWRDb3VudCIseVNjYWxlOiJ5U2NhbGUiLHlHcmlkQ291bnQ6InlHcmlkQ291bnQiLGRvbURpbToiZG9tRGltIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInkxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ4MSIsIjAiLDMsInplcm8iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsieTEiLCIwIl0sWyJ4MSIsIjAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihUbigpLGgoMCwic3ZnIiksUygxLGoyZSwxLDUsImxpbmUiLDApLFMoMixHMmUsMSw1LCJsaW5lIiwxKSxnKCkpLDImZSYmKGIoMSksXygibmdGb3JPZiIsaS5nZXRYVGlja3MoKSksYigxKSxfKCJuZ0Zvck9mIixpLmdldFlUaWNrcygpKSl9LGRlcGVuZGVuY2llczpbZG5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICBzdmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBzdHJva2U6ICNjY2M7XG4gICAgICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICAgICAgfVxuXG4gICAgICAuemVyb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBzdHJva2U6ICNhYWE7XG4gICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxxMmU9WyJzZXJpZXNWaWV3Il0sWTJlPVsieEF4aXMiXSxYMmU9WyJ5QXhpcyJdLFEyZT1bImNoYXJ0RWwiXTtmdW5jdGlvbiBaMmUobix0KXtpZigxJm4mJlAoMCwibGluZS1jaGFydC1ncmlkLXZpZXciLDE2KSwyJm4pe2xldCBlPXcoKTtfKCJ2aWV3RXh0ZW50IixlLnZpZXdCb3gpKCJ4U2NhbGUiLGUueFNjYWxlKSgieVNjYWxlIixlLnlTY2FsZSkoInhHcmlkQ291bnQiLGUuWF9HUklEX0NPVU5UKSgieUdyaWRDb3VudCIsZS5ZX0dSSURfQ09VTlQpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy5tYWluKX19ZnVuY3Rpb24gSzJlKG4sdCl7MSZuJiYoVG4oKSxQKDAsInN2ZyIsbnVsbCwxNykpfWZ1bmN0aW9uIEoyZShuLHQpezEmbiYmUCgwLCJjYW52YXMiLG51bGwsMTcpfWZ1bmN0aW9uICQyZShuLHQpe2lmKDEmbiYmKFR0KDApLFMoMSxLMmUsMiwwLCJzdmciLDUpLFMoMixKMmUsMiwwLCJjYW52YXMiLDUpLER0KCkpLDImbil7bGV0IGU9dygpO2IoMSksXygibmdJZiIsZS5nZXRSZW5kZXJlclR5cGUoKT09PWUuUmVuZGVyZXJUeXBlLlNWRyksYigxKSxfKCJuZ0lmIixlLmdldFJlbmRlcmVyVHlwZSgpPT09ZS5SZW5kZXJlclR5cGUuV0VCR0wpfX1mdW5jdGlvbiBlTGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXciLDE4KSxEKCJvblZpZXdFeHRlbnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uVmlld0JveENoYW5nZWQocikpfSkoIm9uVmlld0V4dGVudFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLnZpZXdCb3hSZXNldCgpKX0pKCJvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZShyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCksaT10dCgxKTtfKCJzZXJpZXNEYXRhIixlLnNlcmllc0RhdGEpKCJzZXJpZXNNZXRhZGF0YU1hcCIsZS5zZXJpZXNNZXRhZGF0YU1hcCkoInZpZXdFeHRlbnQiLGUudmlld0JveCkoInhTY2FsZSIsZS54U2NhbGUpKCJ5U2NhbGUiLGUueVNjYWxlKSgidG9vbHRpcE9yaWdpbkVsIixpKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMubWFpbikoInRvb2x0aXBUZW1wbGF0ZSIsZS50b29sdGlwVGVtcGxhdGUpKCJkaXNhYmxlVG9vbHRpcCIsZS5kaXNhYmxlVG9vbHRpcCl9fXZhciB0TGU9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aX19O2Z1bmN0aW9uIG5MZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxOSksVGkoMSwyMCksZygpKSwyJm4pe2xldCBlPXcoKTtiKDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUuY3VzdG9tVmlzVGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsTFAoMix0TGUsZS54U2NhbGUsZS55U2NhbGUsZS5kb21EaW1lbnNpb25zLm1haW4sZS52aWV3Qm94KSl9fWZ1bmN0aW9uIGlMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImxpbmUtY2hhcnQtYXhpcyIsMjEpLEQoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKHIsInkiKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygiYXhpc0V4dGVudCIsZS52aWV3Qm94LnkpKCJjdXN0b21Gb3JtYXR0ZXIiLGUuY3VzdG9tWUZvcm1hdHRlcikoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLnlBeGlzKSgiZ3JpZENvdW50IixlLllfR1JJRF9DT1VOVCkoInNjYWxlIixlLnlTY2FsZSl9fWZ1bmN0aW9uIHJMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImxpbmUtY2hhcnQtYXhpcyIsMjIpLEQoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKHIsIngiKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygiYXhpc0V4dGVudCIsZS52aWV3Qm94LngpKCJjdXN0b21Gb3JtYXR0ZXIiLGUuY3VzdG9tWEZvcm1hdHRlcikoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLnhBeGlzKSgiZ3JpZENvdW50IixlLlhfR1JJRF9DT1VOVCkoInNjYWxlIixlLnhTY2FsZSl9fWZ1bmN0aW9uIG9MZShuLHQpezEmbiYmKGgoMCwiZGl2IiwyMyksUCgxLCJzcGFuIiwyNCksZygpKX12YXIgYUxlPWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aSxpbnRlcmFjdGlvblN0YXRlOnJ9fTtmdW5jdGlvbiBzTGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMjUsMjYpLFRpKDIsMjApLGcoKSksMiZuKXtsZXQgZT13KCk7YigyKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLE5QKDIsYUxlLGUueFNjYWxlLGUueVNjYWxlLGUuZG9tRGltZW5zaW9ucy5tYWluLGUudmlld0JveCxlLmludGVyYWN0aW9uU3RhdGUpKX19dmFyIGxMZT1mdW5jdGlvbihuLHQpe3JldHVybntjb250YWluZXI6ITAsImRhcmstbW9kZSI6biwibGluZS1vbmx5LW1vZGUiOnQsImxpbmUtY2hhcnQiOiEwfX0sR1Y9e3g6WzAsMV0seTpbMCwxXX0sQ189KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5SZW5kZXJlclR5cGU9WmksdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZT1aaS5XRUJHTCx0aGlzLnhTY2FsZVR5cGU9aXIuTElORUFSLHRoaXMueVNjYWxlVHlwZT1pci5MSU5FQVIsdGhpcy51c2VyVmlld0JveD1udWxsLHRoaXMubGluZU9ubHk9ITEsdGhpcy5kaXNhYmxlVG9vbHRpcD0hMSx0aGlzLnZpZXdCb3hDaGFuZ2VkPW5ldyBMLHRoaXMub25WaWV3Qm94T3ZlcnJpZGRlbj1uZXcgRnAoMSksdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5ZX0dSSURfQ09VTlQ9Nix0aGlzLlhfR1JJRF9DT1VOVD0xMCx0aGlzLnhTY2FsZT1qbCh0aGlzLnhTY2FsZVR5cGUpLHRoaXMueVNjYWxlPWpsKHRoaXMueFNjYWxlVHlwZSksdGhpcy52aWV3Qm94PUdWLHRoaXMuZG9tRGltZW5zaW9ucz17bWFpbjp7d2lkdGg6MCxoZWlnaHQ6MH0seEF4aXM6e3dpZHRoOjAsaGVpZ2h0OjB9LHlBeGlzOnt3aWR0aDowLGhlaWdodDowfX0sdGhpcy5zaG93Q2hhcnRSZW5kZXJlckVsZW1lbnQ9ITAsdGhpcy5pbnRlcmFjdGlvblN0YXRlPVRyLk5PTkUsdGhpcy5saW5lQ2hhcnQ9bnVsbCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMSx0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ITEsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy51c2VyVmlld0JveFVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuc2NhbGVVcGRhdGVkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMX1uZ09uSW5pdCgpe3RoaXMub25WaWV3Qm94T3ZlcnJpZGRlbi5uZXh0KHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbil9bmdPbkNoYW5nZXMoZSl7ZS54U2NhbGVUeXBlJiYodGhpcy54U2NhbGU9amwodGhpcy54U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksZS55U2NhbGVUeXBlJiYodGhpcy55U2NhbGU9amwodGhpcy55U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksZS5zZXJpZXNEYXRhJiYodGhpcy5pc0RhdGFVcGRhdGVkPSEwKSxlLmZpeGVkVmlld0JveCYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwKSxlLnNlcmllc01ldGFkYXRhTWFwJiYodGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCksZS51c2VEYXJrTW9kZSYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwKSxlLnVzZXJWaWV3Qm94JiYodGhpcy51c2VyVmlld0JveFVwZGF0ZWQ9ITApLHRoaXMudXNlclZpZXdCb3hVcGRhdGVkP3RoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighIXRoaXMudXNlclZpZXdCb3gpOnRoaXMuc2NhbGVVcGRhdGVkJiZ0aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oITEpLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD10aGlzLmlzVmlld0JveENoYW5nZWR8fHRoaXMudXNlclZpZXdCb3hVcGRhdGVkfHx0aGlzLnNjYWxlVXBkYXRlZHx8IXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy5zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveChlKSx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKX1yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpeyF0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3R8fHRoaXMuZGlzYWJsZVVwZGF0ZXx8KHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSExLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy5zY2FsZVVwZGF0ZWQ9ITAsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITAsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITAsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITAsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMSl9b25WaWV3UmVzaXplKCl7IXRoaXMubGluZUNoYXJ0fHwodGhpcy5yZWFkQW5kVXBkYXRlRG9tRGltZW5zaW9ucygpLHRoaXMubGluZUNoYXJ0LnJlc2l6ZSh0aGlzLmRvbURpbWVuc2lvbnMubWFpbiksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfXNob3VsZFVwZGF0ZURlZmF1bHRWaWV3Qm94KGUpe2lmKGUueFNjYWxlVHlwZXx8ZS55U2NhbGVUeXBlfHxlLmlnbm9yZVlPdXRsaWVyc3x8ZS5zZXJpZXNEYXRhKXJldHVybiEwO2xldCByPWUuc2VyaWVzTWV0YWRhdGFNYXA7aWYocil7bGV0IG89ci5wcmV2aW91c1ZhbHVlO2lmKE9iamVjdC5rZXlzKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApLmxlbmd0aCE9PU9iamVjdC5rZXlzKG8/P3t9KS5sZW5ndGgpcmV0dXJuITA7Zm9yKGxldFthLHNdb2YgT2JqZWN0LmVudHJpZXModGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpe2xldCBsPW8mJm9bYV07aWYoIWx8fHMudmlzaWJsZSE9PWwudmlzaWJsZSlyZXR1cm4hMH19cmV0dXJuITF9b25Db250ZXh0TG9zdCgpe3RoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMCx0aGlzLmxpbmVDaGFydCYmKHRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKSx0aGlzLmxpbmVDaGFydD1udWxsKX10cmlnZ2VyQ29udGV4dExvc3RGb3JUZXN0KCl7dGhpcy5vbkNvbnRleHRMb3N0KCl9Z2V0TGluZUNoYXJ0Rm9yVGVzdCgpe3JldHVybiB0aGlzLmxpbmVDaGFydH1pbml0aWFsaXplQ2hhcnQoKXt0aGlzLmxpbmVDaGFydCYmdGhpcy5saW5lQ2hhcnQuZGlzcG9zZSgpO2xldCBlPXRoaXMuZ2V0UmVuZGVyZXJUeXBlKCksaT17b25EcmF3RW5kOigpPT57fSxvbkNvbnRleHRMb3N0OnRoaXMub25Db250ZXh0TG9zdC5iaW5kKHRoaXMpfSxyPW51bGw7c3dpdGNoKHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSxlKXtjYXNlIFppLlNWRzpyPXt0eXBlOlppLlNWRyxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsY2FsbGJhY2tzOmksZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2Nhc2UgWmkuV0VCR0w6cj17dHlwZTpaaS5XRUJHTCxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsZGV2aWNlUGl4ZWxSYXRpbzp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxjYWxsYmFja3M6aSxkb21EaW1lbnNpb246dGhpcy5kb21EaW1lbnNpb25zLm1haW4sdXNlRGFya01vZGU6dGhpcy51c2VEYXJrTW9kZX07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYDxsaW5lLWNoYXJ0PiBkb2VzIG5vdCB5ZXQgc3VwcG9ydCByZW5kZXJlclR5cGU6ICR7ZX1gKX1sZXQgYT1lIT09WmkuU1ZHJiZHbF9pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpP1BtOmxBO3RoaXMubGluZUNoYXJ0PW5ldyBhKHIpfW5nT25EZXN0cm95KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKX1nZXRSZW5kZXJlclR5cGUoKXtyZXR1cm4gZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgWmkuU1ZHOnJldHVybiBaaS5TVkc7Y2FzZSBaaS5XRUJHTDpyZXR1cm4gR2xfaXNXZWJHbDJTdXBwb3J0ZWQoKT9aaS5XRUJHTDpaaS5TVkc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVuZGVyZXJUeXBlOiAke259YCl9fSh0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZSl9cmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKXt0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOnRoaXMuc2VyaWVzVmlldy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHhBeGlzOnt3aWR0aDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueEF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHlBeGlzOnt3aWR0aDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueUF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9fX11cGRhdGVMaW5lQ2hhcnQoKXtpZih0aGlzLnJlY292ZXJSZW5kZXJlcklmTmVlZGVkKCksdGhpcy5saW5lQ2hhcnQmJiF0aGlzLmRpc2FibGVVcGRhdGUpe2lmKHRoaXMuc2NhbGVVcGRhdGVkJiYodGhpcy5zY2FsZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0WFNjYWxlVHlwZSh0aGlzLnhTY2FsZVR5cGUpLHRoaXMubGluZUNoYXJ0LnNldFlTY2FsZVR5cGUodGhpcy55U2NhbGVUeXBlKSksdGhpcy5pc01ldGFkYXRhVXBkYXRlZCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0TWV0YWRhdGEodGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpLHRoaXMuaXNEYXRhVXBkYXRlZCYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXREYXRhKHRoaXMuc2VyaWVzRGF0YSkpLHRoaXMudXNlRGFya01vZGVVcGRhdGVkJiYodGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0VXNlRGFya01vZGUodGhpcy51c2VEYXJrTW9kZSkpLHRoaXMudXNlclZpZXdCb3hVcGRhdGVkJiYodGhpcy51c2VyVmlld0JveFVwZGF0ZWQ9ITEpLHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy51c2VyVmlld0JveCl0aGlzLnZpZXdCb3g9dGhpcy51c2VyVmlld0JveDtlbHNlIGlmKCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuZml4ZWRWaWV3Qm94KXRoaXMudmlld0JveD10aGlzLmZpeGVkVmlld0JveDtlbHNlIGlmKCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuaXNWaWV3Qm94Q2hhbmdlZCl7bGV0IGk9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1udWxsLGE9bnVsbCxzPVtdO2ZvcihsZXR7aWQ6dSxwb2ludHM6cH1vZiBuKXtsZXQgZj10W3VdO2lmKGYmJiFmLmF1eCYmZi52aXNpYmxlKWZvcihsZXQgbT0wO208cC5sZW5ndGg7bSsrKXtsZXR7eDp5LHk6TX09cFttXTtpKHkpJiYobz1udWxsPT09b3x8eTxvP3k6byxhPW51bGw9PT1hfHx5PmE/eTphKSxyKE0pJiZzLnB1c2goTSl9fXMuc29ydChLcyk7bGV0IGM9c1swXSxkPXNbcy5sZW5ndGgtMV07cmV0dXJuIGUmJnMubGVuZ3RoPjImJihjPXNbTWF0aC5jZWlsKC4wNSoocy5sZW5ndGgtMSkpXSxkPXNbTWF0aC5mbG9vciguOTUqKHMubGVuZ3RoLTEpKV0pLHt4Om51bGwhPT1vJiZudWxsIT09YT9bbyxhXTp2b2lkIDAseTp2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kP1tjLGRdOnZvaWQgMH19KHRoaXMuc2VyaWVzRGF0YSx0aGlzLnNlcmllc01ldGFkYXRhTWFwLHRoaXMuaWdub3JlWU91dGxpZXJzLHRoaXMueFNjYWxlLmlzU2FmZU51bWJlcix0aGlzLnlTY2FsZS5pc1NhZmVOdW1iZXIpO3RoaXMudmlld0JveD17eDp0aGlzLnhTY2FsZS5uaWNlRG9tYWluKGkueD8/R1YueCkseTp0aGlzLnlTY2FsZS5uaWNlRG9tYWluKGkueT8/R1YueSl9fSh0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZHx8dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkKSYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXRWaWV3Qm94KHRoaXMudmlld0JveCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfX1vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OmV9KXt0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQoZSl9dmlld0JveFJlc2V0KCl7dGhpcy52aWV3Qm94Q2hhbmdlZC5lbWl0KG51bGwpfXNldElzVmlld0JveE92ZXJyaWRkZW4oZSl7bGV0IGk9dGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuO3RoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbj1lLGkhPT1lJiZ0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dChlKX1vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UoZSl7dGhpcy5pbnRlcmFjdGlvblN0YXRlPWV9Z2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpe3JldHVybiB0aGlzLm9uVmlld0JveE92ZXJyaWRkZW59b25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKGUsaSl7bGV0IHI9ey4uLnRoaXMudmlld0JveCxbaV06ZX07dGhpcy5vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OnJ9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhGdCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoWWUocTJlLDcsYmUpLFllKFkyZSw3LGJlKSxZZShYMmUsNyxiZSksWWUoUTJlLDUsYmUpKSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLnNlcmllc1ZpZXc9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkueEF4aXM9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkueUF4aXM9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuY2hhcnRFbD1yLmZpcnN0KX19LGlucHV0czp7Y3VzdG9tVmlzVGVtcGxhdGU6ImN1c3RvbVZpc1RlbXBsYXRlIixjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZToiY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSIscHJlZmVycmVkUmVuZGVyZXJUeXBlOiJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLHNlcmllc0RhdGE6InNlcmllc0RhdGEiLGZpeGVkVmlld0JveDoiZml4ZWRWaWV3Qm94IixzZXJpZXNNZXRhZGF0YU1hcDoic2VyaWVzTWV0YWRhdGFNYXAiLHhTY2FsZVR5cGU6InhTY2FsZVR5cGUiLHlTY2FsZVR5cGU6InlTY2FsZVR5cGUiLGN1c3RvbVhGb3JtYXR0ZXI6ImN1c3RvbVhGb3JtYXR0ZXIiLGN1c3RvbVlGb3JtYXR0ZXI6ImN1c3RvbVlGb3JtYXR0ZXIiLHRvb2x0aXBUZW1wbGF0ZToidG9vbHRpcFRlbXBsYXRlIix1c2VyVmlld0JveDoidXNlclZpZXdCb3giLGxpbmVPbmx5OiJsaW5lT25seSIsZGlzYWJsZVRvb2x0aXA6ImRpc2FibGVUb29sdGlwIixkaXNhYmxlVXBkYXRlOiJkaXNhYmxlVXBkYXRlIixpZ25vcmVZT3V0bGllcnM6Imlnbm9yZVlPdXRsaWVycyJ9LG91dHB1dHM6e3ZpZXdCb3hDaGFuZ2VkOiJ2aWV3Qm94Q2hhbmdlZCJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6MTYsdmFyczoxMyxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwiY2RrT3ZlcmxheU9yaWdpbiIsIiIsMywibmdDbGFzcyIsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbIm92ZXJsYXlUYXJnZXQiLCJjZGtPdmVybGF5T3JpZ2luIl0sWzEsInNlcmllcy12aWV3Il0sWyJzZXJpZXNWaWV3IiwiIl0sWzMsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4R3JpZENvdW50IiwieUdyaWRDb3VudCIsImRvbURpbSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJkaXNhYmxlVG9vbHRpcCIsIm9uVmlld0V4dGVudENoYW5nZSIsIm9uVmlld0V4dGVudFJlc2V0Iiwib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImN1c3RvbS12aXMiLDQsIm5nSWYiXSxbMSwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFsiYXhpcyIsInkiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsxLCJ4LWF4aXMiXSxbInhBeGlzIiwiIl0sWyJheGlzIiwieCIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRvdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjdXN0b20tdmlzIGN1c3RvbS1jaGFydC1vdmVybGF5LXZpcyIsNCwibmdJZiJdLFszLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwieEdyaWRDb3VudCIsInlHcmlkQ291bnQiLCJkb21EaW0iXSxbImNoYXJ0RWwiLCIiXSxbMywic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInRvb2x0aXBPcmlnaW5FbCIsImRvbURpbSIsInRvb2x0aXBUZW1wbGF0ZSIsImRpc2FibGVUb29sdGlwIiwib25WaWV3RXh0ZW50Q2hhbmdlIiwib25WaWV3RXh0ZW50UmVzZXQiLCJvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UiXSxbMSwiY3VzdG9tLXZpcyJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbImF4aXMiLCJ5IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiXSxbImF4aXMiLCJ4IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiXSxbMSwiZG90Il0sWzEsInJlY3QiXSxbMSwiY3VzdG9tLXZpcyIsImN1c3RvbS1jaGFydC1vdmVybGF5LXZpcyJdLFsiY3VzdG9tQ2hhcnRPdmVybGF5IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDAsMSksRCgib25SZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25WaWV3UmVzaXplKCl9KSxoKDIsImRpdiIsMiwzKSxTKDQsWjJlLDEsNiwibGluZS1jaGFydC1ncmlkLXZpZXciLDQpLFMoNSwkMmUsMywyLCJuZy1jb250YWluZXIiLDUpLFMoNixlTGUsMSw5LCJsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXciLDYpLFMoNyxuTGUsMiw3LCJkaXYiLDcpLGcoKSxoKDgsImRpdiIsOCw5KSxTKDEwLGlMZSwxLDUsImxpbmUtY2hhcnQtYXhpcyIsMTApLGcoKSxoKDExLCJkaXYiLDExLDEyKSxTKDEzLHJMZSwxLDUsImxpbmUtY2hhcnQtYXhpcyIsMTMpLGcoKSxTKDE0LG9MZSwyLDAsImRpdiIsMTQpLFMoMTUsc0xlLDMsOCwiZGl2IiwxNSksZygpKSwyJmUmJihfKCJuZ0NsYXNzIixQcigxMCxsTGUsaS51c2VEYXJrTW9kZSxpLmxpbmVPbmx5KSkoInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwwKSxiKDQpLF8oIm5nSWYiLCFpLmxpbmVPbmx5KSxiKDEpLF8oIm5nSWYiLGkuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50KSxiKDEpLF8oIm5nSWYiLCFpLmxpbmVPbmx5KSxiKDEpLF8oIm5nSWYiLGkuY3VzdG9tVmlzVGVtcGxhdGUpLGIoMyksXygibmdJZiIsIWkubGluZU9ubHkpLGIoMyksXygibmdJZiIsIWkubGluZU9ubHkpLGIoMSksXygibmdJZiIsIWkubGluZU9ubHkpLGIoMSksXygibmdJZiIsaS5jdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSkpfSxkZXBlbmRlbmNpZXM6W2JuLEZlLE1vLEh1LHp0ZSxqdGUsR3RlLHFmXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59W19uZ2hvc3QtJUNPTVAlXSAgICAgLmxpbmUtY2hhcnQ6aGFzKC5ob3Jpem9udGFsLXByb3NwZWN0aXZlLWFyZWE6aG92ZXIpIC54LWF4aXMgLmV4dGVudC1lZGl0LWJ1dHRvbnt2aXNpYmlsaXR5OnZpc2libGV9W19uZ2hvc3QtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfS5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6aW5oZXJpdDtkaXNwbGF5OmdyaWQ7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7Z3JpZC10ZW1wbGF0ZS1hcmVhczoieWF4aXMgc2VyaWVzIiAiZG90IHhheGlzIiAiLiBjdXN0b21DaGFydE92ZXJsYXkiO2dyaWQtdGVtcGxhdGUtY29sdW1uczo1MHB4IDFmcjtncmlkLWF1dG8tcm93czoxZnIgMzBweCAwcHh9LmNvbnRhaW5lci5kYXJrLW1vZGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmNvbnRhaW5lci5saW5lLW9ubHktbW9kZVtfbmdjb250ZW50LSVDT01QJV17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjAgMWZyO2dyaWQtYXV0by1yb3dzOjFmciAwfS5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNlcmllcztwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNhbnZhc1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBzdmdbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1ncmlkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAuY3VzdG9tLXZpc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7bGVmdDowO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlOy13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWF4aXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp4YXhpcztwb3NpdGlvbjpyZWxhdGl2ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eWF4aXN9LmRvdFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtkaXNwbGF5OmZsZXg7Z3JpZC1hcmVhOmRvdDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmRvdFtfbmdjb250ZW50LSVDT01QJV0gICAucmVjdFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjFweDt3aWR0aDoxcHg7YmFja2dyb3VuZC1jb2xvcjojYWFhfS5jdXN0b20tY2hhcnQtb3ZlcmxheS12aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpjdXN0b21DaGFydE92ZXJsYXk7Z3JpZC1yb3ctZW5kOjI7Z3JpZC1yb3ctc3RhcnQ6MX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGNMZShuLHQpezEmbiYmVGkoMCl9dmFyIHF0ZT1mdW5jdGlvbihuKXtyZXR1cm57JGltcGxpY2l0Om59fTtmdW5jdGlvbiBkTGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNCksUygxLGNMZSwxLDAsIm5nLWNvbnRhaW5lciIsNSksVCgyKSxnKCkpLDImbil7bGV0IGU9dygpLGk9dHQoNik7YigxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFNuKDMscXRlLGUuZGF0dW0pKSxiKDEpLHplKCIgIixlLmdldEZvcm1hdHRlZERhdGFGb3JDb2x1bW4oKSwiICIpfX1mdW5jdGlvbiB1TGUobix0KXsxJm4mJlRpKDApfWZ1bmN0aW9uIHBMZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw0KSxTKDEsdUxlLDEsMCwibmctY29udGFpbmVyIiw1KSxUKDIpLGcoKSksMiZuKXtsZXQgZT13KCksaT10dCg2KTtiKDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsU24oMyxxdGUsZS5kYXR1bSkpLGIoMSksemUoIiAiLGUuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbigpLCIgIil9fWZ1bmN0aW9uIGZMZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw2KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7YigxKSx6ZSgiICIsZS5nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKCksIiAiKX19ZnVuY3Rpb24gbUxlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw5KX1mdW5jdGlvbiBoTGUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDEwKX1mdW5jdGlvbiBnTGUobix0KXtpZigxJm4mJihTKDAsbUxlLDEsMCwibWF0LWljb24iLDcpLFMoMSxoTGUsMSwwLCJtYXQtaWNvbiIsOCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7XygibmdJZiIsZT49MCksYigxKSxfKCJuZ0lmIixlPDApfX12YXIgX0xlPVsiKiJdLE1fPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRleHRNZW51T3BlbmVkPW5ldyBMLHRoaXMuQ29sdW1uSGVhZGVyVHlwZT12dH1nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKCl7aWYodm9pZCAwPT09dGhpcy5kYXR1bSlyZXR1cm4iIjtzd2l0Y2godGhpcy5oZWFkZXIudHlwZSl7Y2FzZSB2dC5SVU46cmV0dXJuIHRoaXMuZGF0dW07Y2FzZSB2dC5WQUxVRTpjYXNlIHZ0LlNURVA6Y2FzZSB2dC5TTU9PVEhFRDpjYXNlIHZ0LlNUQVJUX1NURVA6Y2FzZSB2dC5FTkRfU1RFUDpjYXNlIHZ0LlNUQVJUX1ZBTFVFOmNhc2UgdnQuRU5EX1ZBTFVFOmNhc2UgdnQuTUlOX1ZBTFVFOmNhc2UgdnQuTUFYX1ZBTFVFOmNhc2UgdnQuU1RFUF9BVF9NQVg6Y2FzZSB2dC5TVEVQX0FUX01JTjpjYXNlIHZ0Lk1FQU46Y2FzZSB2dC5IUEFSQU06cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmRhdHVtP0kwLmZvcm1hdFNob3J0KHRoaXMuZGF0dW0pOnRoaXMuZGF0dW07Y2FzZSB2dC5USU1FOnJldHVybiBuZXcgRGF0ZSh0aGlzLmRhdHVtKS50b0lTT1N0cmluZygpO2Nhc2UgdnQuUkVMQVRJVkVfVElNRTpyZXR1cm4gQTAuZm9ybWF0UmVhZGFibGUodGhpcy5kYXR1bSk7Y2FzZSB2dC5WQUxVRV9DSEFOR0U6cmV0dXJuIEkwLmZvcm1hdFNob3J0KE1hdGguYWJzKHRoaXMuZGF0dW0pKTtjYXNlIHZ0LlBFUkNFTlRBR0VfQ0hBTkdFOnJldHVybiBNYXRoLnJvdW5kKDEwMCp0aGlzLmRhdHVtKS50b1N0cmluZygpKyIlIjtjYXNlIHZ0LlJBV19DSEFOR0U6cmV0dXJuIGNwLmZvcm1hdFNob3J0KE1hdGguYWJzKHRoaXMuZGF0dW0pKTtkZWZhdWx0OnJldHVybiIifX1vbkNvbnRleHRNZW51T3BlbmVkKGUpe3RoaXMuY29udGV4dE1lbnVPcGVuZWQuZW1pdChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1jb250ZW50LWNlbGwiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZEKCJjb250ZXh0bWVudSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Db250ZXh0TWVudU9wZW5lZChvKX0pfSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIixkYXR1bToiZGF0dW0ifSxvdXRwdXRzOntjb250ZXh0TWVudU9wZW5lZDoiY29udGV4dE1lbnVPcGVuZWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6X0xlLGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsImNlbGwiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjZWxsIGV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsiYXJyb3ciLCIiXSxbMSwiY2VsbCJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2VsbCIsImV4dHJhLXJpZ2h0LXBhZGRpbmciXSxbInN2Z0ljb24iLCJhcnJvd191cHdhcmRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X2Rvd253YXJkXzI0cHgiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd191cHdhcmRfMjRweCJdLFsic3ZnSWNvbiIsImFycm93X2Rvd253YXJkXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnbigpLFR0KDAsMCksUygxLGRMZSwzLDUsImRpdiIsMSksUygyLHBMZSwzLDUsImRpdiIsMSksUygzLGZMZSwyLDEsImRpdiIsMiksWHQoNCksRHQoKSxTKDUsZ0xlLDIsMiwibmctdGVtcGxhdGUiLG51bGwsMyxadCkpLDImZSYmKF8oIm5nU3dpdGNoIixpLmhlYWRlci50eXBlKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlZBTFVFX0NIQU5HRSksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuQ29sdW1uSGVhZGVyVHlwZS5QRVJDRU5UQUdFX0NIQU5HRSkpfSxkZXBlbmRlbmNpZXM6W0ZlLE1vLCRpLHNyLGZ1LERuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtY2VsbDtwYWRkaW5nOjRweH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0gICAgIHBhdGh7ZmlsbDp1bnNldH0uZXh0cmEtcmlnaHQtcGFkZGluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxcHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx5TGU9WyIqIl0sdUE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1jb250ZW50LXJvdyJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eUxlLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZ24oKSxYdCgwKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBiTGUobix0KXtpZigxJm4mJlAoMCwibWF0LWljb24iLDcpLDImbil7bGV0IGU9dygyKTtfKCJuZ0NsYXNzIixlLmhlYWRlci5uYW1lPT09ZS5zb3J0aW5nSW5mby5uYW1lPyJzaG93Ijoic2hvdy1vbi1ob3ZlciIpfX1mdW5jdGlvbiB2TGUobix0KXtpZigxJm4mJlAoMCwibWF0LWljb24iLDgpLDImbil7bGV0IGU9dygyKTtfKCJuZ0NsYXNzIixlLmhlYWRlci5uYW1lPT09ZS5zb3J0aW5nSW5mby5uYW1lPyJzaG93Ijoic2hvdy1vbi1ob3ZlciIpfX1mdW5jdGlvbiB4TGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNCksUygxLGJMZSwxLDEsIm1hdC1pY29uIiw1KSxTKDIsdkxlLDEsMSwibWF0LWljb24iLDYpLGcoKSksMiZuKXtsZXQgZT13KCk7YigxKSxfKCJuZ0lmIixlLnNvcnRpbmdJbmZvLm9yZGVyPT09ZS5Tb3J0aW5nT3JkZXIuQVNDRU5ESU5HfHxlLmhlYWRlci5uYW1lIT09ZS5zb3J0aW5nSW5mby5uYW1lKSxiKDEpLF8oIm5nSWYiLGUuc29ydGluZ0luZm8ub3JkZXI9PT1lLlNvcnRpbmdPcmRlci5ERVNDRU5ESU5HJiZlLmhlYWRlci5uYW1lPT09ZS5zb3J0aW5nSW5mby5uYW1lKX19ZnVuY3Rpb24gQ0xlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw5KSgxLCJtYXQtaWNvbiIsMTApLEQoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkNvbnRleHRNZW51T3BlbmVkKHIpKX0pLGcoKSgpfX12YXIgTUxlPVsiKiJdLHdfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmhwYXJhbXNFbmFibGVkPSExLHRoaXMuZGlzYWJsZUNvbnRleHRNZW51PSExLHRoaXMuZHJhZ1N0YXJ0PW5ldyBMLHRoaXMuZHJhZ0VuZD1uZXcgTCx0aGlzLmRyYWdFbnRlcj1uZXcgTCx0aGlzLmhlYWRlckNsaWNrZWQ9bmV3IEwsdGhpcy5jb250ZXh0TWVudU9wZW5lZD1uZXcgTCx0aGlzLmhpZ2hsaWdodFN0eWxlJD1uZXcgUmkoe30pLHRoaXMuU29ydGluZ09yZGVyPXNvfW9uQ29udGV4dE1lbnVPcGVuZWQoZSl7dGhpcy5kaXNhYmxlQ29udGV4dE1lbnV8fHRoaXMuY29udGV4dE1lbnVPcGVuZWQuZW1pdChlKX1oZWFkZXJDbGlja2VkSGFuZGxlcigpe3RoaXMuaGVhZGVyLnNvcnRhYmxlJiZ0aGlzLmhlYWRlckNsaWNrZWQuZW1pdCh0aGlzLmhlYWRlci5uYW1lKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1oZWFkZXItY2VsbCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoImNvbnRleHRtZW51IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNvbnRleHRNZW51T3BlbmVkKG8pfSl9LGlucHV0czp7aGVhZGVyOiJoZWFkZXIiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsaHBhcmFtc0VuYWJsZWQ6ImhwYXJhbXNFbmFibGVkIixkaXNhYmxlQ29udGV4dE1lbnU6ImRpc2FibGVDb250ZXh0TWVudSJ9LG91dHB1dHM6e2RyYWdTdGFydDoiZHJhZ1N0YXJ0IixkcmFnRW5kOiJkcmFnRW5kIixkcmFnRW50ZXI6ImRyYWdFbnRlciIsaGVhZGVyQ2xpY2tlZDoiaGVhZGVyQ2xpY2tlZCIsY29udGV4dE1lbnVPcGVuZWQ6ImNvbnRleHRNZW51T3BlbmVkIn0sbmdDb250ZW50U2VsZWN0b3JzOk1MZSxkZWNsczo2LHZhcnM6Nyxjb25zdHM6W1sxLCJjZWxsIiwzLCJkcmFnZ2FibGUiLCJuZ0NsYXNzIiwiZHJhZ3N0YXJ0IiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImNsaWNrIl0sWzMsImhlYWRlciJdLFsiY2xhc3MiLCJzb3J0aW5nLWljb24tY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRleHQtbWVudS1jb250YWluZXIgc2hvdy1vbi1ob3ZlciIsNCwibmdJZiJdLFsxLCJzb3J0aW5nLWljb24tY29udGFpbmVyIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIl0sWzEsImNvbnRleHQtbWVudS1jb250YWluZXIiLCJzaG93LW9uLWhvdmVyIl0sWyJzdmdJY29uIiwibW9yZV92ZXJ0XzI0cHgiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZ24oKSxoKDAsImRpdiIsMCksRCgiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLmRyYWdTdGFydC5lbWl0KGkuaGVhZGVyKX0pKCJkcmFnZW5kIixmdW5jdGlvbigpe3JldHVybiBpLmRyYWdFbmQuZW1pdCgpfSkoImRyYWdlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5kcmFnRW50ZXIuZW1pdChpLmhlYWRlcil9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGVhZGVyQ2xpY2tlZEhhbmRsZXIoKX0pLEcoMSwiYXN5bmMiKSxYdCgyKSxQKDMsInRiLWRhdGEtdGFibGUtaGVhZGVyIiwxKSxTKDQseExlLDMsMiwiZGl2IiwyKSxTKDUsQ0xlLDIsMCwiZGl2IiwzKSxnKCkpLDImZSYmKF8oImRyYWdnYWJsZSIsaS5oZWFkZXIubW92YWJsZSkoIm5nQ2xhc3MiLFcoMSw1LGkuaGlnaGxpZ2h0U3R5bGUkKSksYigzKSxfKCJoZWFkZXIiLGkuaGVhZGVyKSxiKDEpLF8oIm5nSWYiLGkuaGVhZGVyLnNvcnRhYmxlKSxiKDEpLF8oIm5nSWYiLChpLmhlYWRlci5yZW1vdmFibGV8fGkuaGVhZGVyLnNvcnRhYmxlKSYmIWkuZGlzYWJsZUNvbnRleHRNZW51KSl9LGRlcGVuZGVuY2llczpbYm4sRmUsRG4scVQsbHRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6MnB4O3ZlcnRpY2FsLWFsaWduOmJvdHRvbX1bX25naG9zdC0lQ09NUCVdOmhvdmVyICAgLnNob3ctb24taG92ZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjN9W19uZ2hvc3QtJUNPTVAlXSAgIC5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntvcGFjaXR5OjF9LnNvcnRpbmctaWNvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY29udGV4dC1tZW51LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTJweDtoZWlnaHQ6MTJweDtib3JkZXItcmFkaXVzOjVweH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICAuc29ydGluZy1pY29uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAgIHBhdGh7ZmlsbDp1bnNldH0uc2hvd1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmhpZ2hsaWdodFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfS5oaWdobGlnaHQtYm9yZGVyLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICNmZjk4MDB9LmhpZ2hsaWdodC1ib3JkZXItbGVmdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNmZjk4MDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx3TGU9WyJjb250ZW50Il07ZnVuY3Rpb24gU0xlKG4sdCl7MSZuJiYoVHQoMCksWHQoMSksRHQoKSl9dmFyIEVMZT1bIioiXSxadGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnZpZXdSZWY9ZSx0aGlzLm9uT3Blbj1uZXcgTCx0aGlzLm9uQ2xvc2U9bmV3IEwsdGhpcy52aXNpYmxlJD1uZXcgUmkoITEpLHRoaXMuY2FuQ2xvc2U9ITAsdGhpcy5jbGlja0xpc3RlbmVyPXRoaXMubWF5YmVDbG9zZS5iaW5kKHRoaXMpfW5nT25Jbml0KCl7dGhpcy52aXNpYmxlJC5zdWJzY3JpYmUoZT0+e3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmNhbkNsb3NlPSEwLGU/KHRoaXMuZW5zdXJlQ29udGVudElzV2l0aGluV2luZG93KCksdGhpcy5vbk9wZW4uZW1pdCgpKTp0aGlzLm9uQ2xvc2UuZW1pdCgpfSl9KX1vcGVuQXRQb3NpdGlvbihlKXtsZXQgaT10aGlzLnZpZXdSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LHI9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7MCE9PXImJihpLnN0eWxlLnRvcD0tMSpyK2kub2Zmc2V0VG9wKyJweCIpLHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQ9ZS54KyJweCIsdGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wPWUueSsicHgiLHRoaXMuY2FuQ2xvc2U9ITEsdGhpcy52aXNpYmxlJC5uZXh0KCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbGlja0xpc3RlbmVyKX1lbnN1cmVDb250ZW50SXNXaXRoaW5XaW5kb3coKXtpZighdGhpcy5jb250ZW50KXJldHVybjtsZXQgZT10aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLmxlZnQ8MCYmKHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQ9MCksZS5sZWZ0K2Uud2lkdGg+d2luZG93LmlubmVyV2lkdGgmJih0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0PXdpbmRvdy5pbm5lcldpZHRoLWUud2lkdGgrInB4IiksZS50b3A8MCYmKHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcD0wKSxlLnRvcCtlLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQmJih0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5zdHlsZS50b3A9d2luZG93LmlubmVySGVpZ2h0LWUuaGVpZ2h0KyJweCIpfW1heWJlQ2xvc2UoKXshdGhpcy5jYW5DbG9zZXx8dGhpcy5jbG9zZSgpfWNsb3NlKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xpY2tMaXN0ZW5lciksdGhpcy52aXNpYmxlJC5uZXh0KCExKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhabikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImN1c3RvbS1tb2RhbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlllKHdMZSw1KSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLmNvbnRlbnQ9ci5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5tYXliZUNsb3NlKG8pfSwwLHVjKX0sb3V0cHV0czp7b25PcGVuOiJvbk9wZW4iLG9uQ2xvc2U6Im9uQ2xvc2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6RUxlLGRlY2xzOjQsdmFyczozLGNvbnN0czpbWzEsImNvbnRlbnQiLDMsImNsaWNrIl0sWyJjb250ZW50IiwiIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnbigpLGgoMCwiZGl2IiwwLDEpLEQoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gby5zdG9wUHJvcGFnYXRpb24oKX0pLFMoMixTTGUsMiwwLCJuZy1jb250YWluZXIiLDIpLEcoMywiYXN5bmMiKSxnKCkpLDImZSYmKGIoMiksXygibmdJZiIsVygzLDEsaS52aXNpYmxlJCkpKX0sZGVwZW5kZW5jaWVzOltGZSxsdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgei1pbmRleDogOTAwMTtcbiAgICAgIH1cblxuICAgICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfSJdfSksbn0pKCksRExlPVsic2VhcmNoIl0sSUxlPVsiY29sdW1uTGlzdCJdLEFMZT1mdW5jdGlvbihuKXtyZXR1cm57c2VsZWN0ZWQ6bn19O2Z1bmN0aW9uIFJMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsOCksRCgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygpLnNlbGVjdENvbHVtbihvKSl9KSxHKDEsImFzeW5jIiksVCgyKSxnKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj13KCk7XygibmdDbGFzcyIsU24oNCxBTGUsaT09PVcoMSwyLHIuc2VsZWN0ZWRJbmRleCQpKSksYigyKSx6ZSgiICIsZS5kaXNwbGF5TmFtZSwiICIpfX12YXIgcEE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZUNvbHVtbnM9W10sdGhpcy5jb2x1bW5TZWxlY3RlZD1uZXcgTCx0aGlzLnNlYXJjaElucHV0PSIiLHRoaXMuc2VsZWN0ZWRJbmRleCQ9bmV3IFJpKDApLHRoaXMuaXNBY3RpdmU9ITF9bmdPbkluaXQoKXt0aGlzLnNlbGVjdGVkSW5kZXgkLnN1YnNjcmliZSgoKT0+e2lmKCF0aGlzLmNvbHVtbkxpc3QpcmV0dXJuO2xldCBlPXRoaXMuY29sdW1uTGlzdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbi5zZWxlY3RlZCIpO2lmKCFlKXJldHVybjtsZXQgaT10aGlzLmNvbHVtbkxpc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQscj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxvPXRoaXMuY29sdW1uTGlzdC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDt0aGlzLnNlbGVjdGVkSW5kZXgkLmdldFZhbHVlKCkqcjxvJiYodGhpcy5jb2x1bW5MaXN0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKSpyKSwodGhpcy5zZWxlY3RlZEluZGV4JC5nZXRWYWx1ZSgpKzEpKnI+bytpJiYodGhpcy5jb2x1bW5MaXN0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPSh0aGlzLnNlbGVjdGVkSW5kZXgkLmdldFZhbHVlKCkrMSkqci1pKX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc2VhcmNoSW5wdXQ9IiIsdGhpcy5zZWFyY2hGaWVsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5zZWxlY3RlZEluZGV4JC5uZXh0KDApfWZvY3VzKCl7dGhpcy5zZWFyY2hGaWVsZD8ubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldEZpbHRlcmVkQ29sdW1ucygpe3JldHVybiB0aGlzLnNlbGVjdGFibGVDb2x1bW5zLmZpbHRlcihlPT5lLm5hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCh0aGlzLnNlYXJjaElucHV0LnRvTG93ZXJDYXNlKCkpfHxlLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2godGhpcy5zZWFyY2hJbnB1dC50b0xvd2VyQ2FzZSgpKSl9c2VhcmNoSW5wdXRDaGFuZ2VkKCl7dGhpcy5zZWxlY3RlZEluZGV4JC5uZXh0KE1hdGgubWluKHRoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKSx0aGlzLnNlbGVjdGFibGVDb2x1bW5zLmxlbmd0aC0xKSl9c2VsZWN0Q29sdW1uKGUpe3RoaXMuc2VsZWN0ZWRJbmRleCQubmV4dCgwKSx0aGlzLmNvbHVtblNlbGVjdGVkLmVtaXQoZSl9YWN0aXZhdGUoKXt0aGlzLmlzQWN0aXZlPSEwfWRlYWN0aXZhdGUoKXt0aGlzLmlzQWN0aXZlPSExfW9uVXBBcnJvdygpeyF0aGlzLmlzQWN0aXZlfHx0aGlzLnNlbGVjdGVkSW5kZXgkLm5leHQoTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4JC5nZXRWYWx1ZSgpLTEsMCkpfW9uRG93bkFycm93KCl7IXRoaXMuaXNBY3RpdmV8fHRoaXMuc2VsZWN0ZWRJbmRleCQubmV4dChNYXRoLm1pbih0aGlzLnNlbGVjdGVkSW5kZXgkLmdldFZhbHVlKCkrMSx0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmxlbmd0aC0xKSl9b25FbnRlclByZXNzZWQoKXshdGhpcy5pc0FjdGl2ZXx8dGhpcy5zZWxlY3RDb2x1bW4odGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKVt0aGlzLnNlbGVjdGVkSW5kZXgkLmdldFZhbHVlKCldKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1jb2x1bW4tc2VsZWN0b3ItY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFllKERMZSw1KSxZZShJTGUsNSkpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkuc2VhcmNoRmllbGQ9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuY29sdW1uTGlzdD1yLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgia2V5ZG93bi5hcnJvd3VwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblVwQXJyb3cobyl9LDAsdWMpKCJrZXlkb3duLmFycm93ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Eb3duQXJyb3cobyl9LCExLHVjKSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25FbnRlclByZXNzZWQobyl9LCExLHVjKX0saW5wdXRzOntzZWxlY3RhYmxlQ29sdW1uczoic2VsZWN0YWJsZUNvbHVtbnMifSxvdXRwdXRzOntjb2x1bW5TZWxlY3RlZDoiY29sdW1uU2VsZWN0ZWQifSxkZWNsczo4LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50cyJdLFsxLCJzZWFyY2gtYXJlYSJdLFsibWF0UHJlZml4IiwiIiwic3ZnSWNvbiIsInNlYXJjaF8yNHB4IiwxLCJzZWFyY2gtaWNvbiJdLFsibWF0SW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbInNlYXJjaCIsIiJdLFsxLCJjb2x1bW4tbGlzdCJdLFsiY29sdW1uTGlzdCIsIiJdLFsibWF0LWJ1dHRvbiIsIiIsImNsYXNzIiwiY29sdW1uLWJ1dHRvbiIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm1hdC1idXR0b24iLCIiLDEsImNvbHVtbi1idXR0b24iLDMsIm5nQ2xhc3MiLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJtYXQtZm9ybS1maWVsZCIsMSksUCgyLCJtYXQtaWNvbiIsMiksaCgzLCJpbnB1dCIsMyw0KSxEKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWFyY2hJbnB1dD1vfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2VhcmNoSW5wdXRDaGFuZ2VkKCl9KSxnKCkoKSxoKDUsImRpdiIsNSw2KSxTKDcsUkxlLDMsNiwiYnV0dG9uIiw3KSxnKCkoKSksMiZlJiYoYigzKSxfKCJuZ01vZGVsIixpLnNlYXJjaElucHV0KSxiKDQpLF8oIm5nRm9yT2YiLGkuZ2V0RmlsdGVyZWRDb2x1bW5zKCkpKX0sZGVwZW5kZW5jaWVzOltibixkbixEbixZcyxTOSxxdSxGbixJZyxwRSxpTCxsdF0sc3R5bGVzOlsiLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZzo4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZDtib3gtc2hhZG93OjBweCA0cHggNHB4IHJnYmEoMCwwLDAsLjI1KTtib3JkZXItY29sb3I6I2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWFyY2gtYXJlYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTo0cHh9LmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWFyY2gtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbi5zZWFyY2gtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjFlbX0uY29udGVudHNbX25nY29udGVudC0lQ09NUCVdICAgLnNlYXJjaC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uLnNlYXJjaC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgc3Zne3BhZGRpbmctdG9wOjZweH0uY29udGVudHNbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7bWF4LWhlaWdodDoyMDBweDtvdmVyZmxvdy15OnNjcm9sbH0uY29udGVudHNbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdDt3aWR0aDoxMDAlfS5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbi5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbi5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbi5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUExlPVsiY29sdW1uU2VsZWN0b3JNb2RhbCJdLE9MZT1bImNvbnRleHRNZW51Il07ZnVuY3Rpb24gRkxlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDExKSxUKDEsIiBObyBBY3Rpb25zIEF2YWlsYWJsZSAiKSxnKCkpfWZ1bmN0aW9uIExMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsMTIpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmNvbnRleHRNZW51UmVtb3ZlQ29sdW1uKCkpfSksUCgxLCJtYXQtaWNvbiIsMTMpLFQoMiwiUmVtb3ZlICIpLGcoKX19ZnVuY3Rpb24gTkxlKG4sdCl7MSZuJiYoVHQoMCksUCgxLCJtYXQtaWNvbiIsMTcpLFQoMiwiU29ydCBEZXNjZW5kaW5nICIpLER0KCkpfWZ1bmN0aW9uIEJMZShuLHQpezEmbiYmKFAoMCwibWF0LWljb24iLDE4KSxUKDEsIlNvcnQgQXNjZW5kaW5nICIpKX1mdW5jdGlvbiBWTGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDE0KSxEKCJjbGljayIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKTtyZXR1cm4gUShyLnNvcnRCeUhlYWRlcihudWxsPT1yLmNvbnRleHRNZW51SGVhZGVyP251bGw6ci5jb250ZXh0TWVudUhlYWRlci5uYW1lKSl9KSxTKDEsTkxlLDMsMCwibmctY29udGFpbmVyIiwxNSksUygyLEJMZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDE2LFp0KSxnKCl9aWYoMiZuKXtsZXQgZT10dCgzKSxpPXcoKTtiKDEpLF8oIm5nSWYiLGkuc29ydGluZ0luZm8ub3JkZXI9PT1pLlNvcnRpbmdPcmRlci5BU0NFTkRJTkcmJmkuc29ydGluZ0luZm8ubmFtZT09PShudWxsPT1pLmNvbnRleHRNZW51SGVhZGVyP251bGw6aS5jb250ZXh0TWVudUhlYWRlci5uYW1lKSkoIm5nSWZFbHNlIixlKX19ZnVuY3Rpb24gSExlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwxMiksRCgiY2xpY2siLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpO3JldHVybiBRKG8ub3BlbkNvbHVtblNlbGVjdG9yKHIse2luc2VydFRvOm8uU2lkZS5MRUZULGlzU3ViTWVudTohMH0pKX0pLFAoMSwibWF0LWljb24iLDE5KSxUKDIsIkluc2VydCBDb2x1bW4gTGVmdCAiKSxnKCl9fWZ1bmN0aW9uIHpMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsMTIpLEQoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKTtyZXR1cm4gUShvLm9wZW5Db2x1bW5TZWxlY3RvcihyLHtpbnNlcnRUbzpvLlNpZGUuUklHSFQsaXNTdWJNZW51OiEwfSkpfSksUCgxLCJtYXQtaWNvbiIsMTkpLFQoMiwiSW5zZXJ0IENvbHVtbiBSaWdodCAiKSxnKCl9fWZ1bmN0aW9uIFVMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImN1c3RvbS1tb2RhbCIsMjAsMjEpLEQoIm9uT3BlbiIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5mb2N1c0NvbHVtblNlbGVjdG9yKCkpfSksaCgyLCJ0Yi1kYXRhLXRhYmxlLWNvbHVtbi1zZWxlY3Rvci1jb21wb25lbnQiLDIyKSxEKCJjb2x1bW5TZWxlY3RlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25Db2x1bW5BZGRlZChyKSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtiKDIpLF8oInNlbGVjdGFibGVDb2x1bW5zIixlLnNlbGVjdGFibGVDb2x1bW5zKX19ZnVuY3Rpb24gakxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyMykoMSwiYnV0dG9uIiwyNCksRCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9wZW5Db2x1bW5TZWxlY3RvcihyKSl9KSxQKDIsIm1hdC1pY29uIiwxOSksZygpKCl9fXZhciBHTGU9W1tbIiIsImhlYWRlciIsIiJdXSxbWyIiLCJjb250ZW50IiwiIl1dXSxXTGU9WyJbaGVhZGVyXSIsIltjb250ZW50XSJdLEtsPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5SSUdIVD0wXT0iUklHSFQiLG5bbi5MRUZUPTFdPSJMRUZUIn0oS2x8fChLbD17fSkpLEtsKSkoKSxXVj1mdW5jdGlvbihuKXtuLnByZXZlbnREZWZhdWx0KCl9LGZBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmhlYWRlckNlbGxTdWJzY3JpcHRpb25zPVtdLHRoaXMuY29udGVudENlbGxTdWJzY3JpcHRpb25zPVtdLHRoaXMuY29udGV4dE1lbnVIZWFkZXI9dm9pZCAwLHRoaXMuaW5zZXJ0Q29sdW1uVG89dm9pZCAwLHRoaXMuc29ydERhdGFCeT1uZXcgTCx0aGlzLm9yZGVyQ29sdW1ucz1uZXcgTCx0aGlzLnJlbW92ZUNvbHVtbj1uZXcgTCx0aGlzLmFkZENvbHVtbj1uZXcgTCx0aGlzLkNvbHVtbkhlYWRlcnM9dnQsdGhpcy5Tb3J0aW5nT3JkZXI9c28sdGhpcy5TaWRlPUtsLHRoaXMuaGlnaGxpZ2h0U2lkZT1LbC5SSUdIVH1uZ09uRGVzdHJveSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixXViksdGhpcy5oZWFkZXJDZWxsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PntlLnVuc3Vic2NyaWJlKCl9KX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN5bmNIZWFkZXJzKCksdGhpcy5oZWFkZXJDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnN5bmNIZWFkZXJzLmJpbmQodGhpcykpLHRoaXMuc3luY0NvbnRlbnQoKSx0aGlzLmNvbnRlbnRDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnN5bmNDb250ZW50LmJpbmQodGhpcykpfXN5bmNIZWFkZXJzKCl7dGhpcy5oZWFkZXJDZWxsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PntlLnVuc3Vic2NyaWJlKCl9KSx0aGlzLmhlYWRlckNlbGxTdWJzY3JpcHRpb25zPVtdLHRoaXMuaGVhZGVyQ2VsbHMuZm9yRWFjaChlPT57dGhpcy5oZWFkZXJDZWxsU3Vic2NyaXB0aW9ucy5wdXNoKGUuZHJhZ1N0YXJ0LnN1YnNjcmliZSh0aGlzLmRyYWdTdGFydC5iaW5kKHRoaXMpKSxlLmRyYWdFbnRlci5zdWJzY3JpYmUodGhpcy5kcmFnRW50ZXIuYmluZCh0aGlzKSksZS5kcmFnRW5kLnN1YnNjcmliZSh0aGlzLmRyYWdFbmQuYmluZCh0aGlzKSksZS5oZWFkZXJDbGlja2VkLnN1YnNjcmliZSh0aGlzLnNvcnRCeUhlYWRlci5iaW5kKHRoaXMpKSxlLmNvbnRleHRNZW51T3BlbmVkLnN1YnNjcmliZSh0aGlzLm9wZW5Db250ZXh0TWVudS5iaW5kKHRoaXMsZS5oZWFkZXIpKSl9KX1zeW5jQ29udGVudCgpe3RoaXMuY29udGVudENlbGxTdWJzY3JpcHRpb25zLmZvckVhY2goZT0+e2UudW5zdWJzY3JpYmUoKX0pLHRoaXMuY29udGVudENlbGxTdWJzY3JpcHRpb25zPXRoaXMuY29udGVudENlbGxzLm1hcChlPT5bZS5jb250ZXh0TWVudU9wZW5lZC5zdWJzY3JpYmUodGhpcy5vcGVuQ29udGV4dE1lbnUuYmluZCh0aGlzLGUuaGVhZGVyKSldKS5mbGF0KCl9c29ydEJ5SGVhZGVyKGUpe3RoaXMuc29ydERhdGFCeS5lbWl0KHRoaXMuc29ydGluZ0luZm8ubmFtZSE9PWV8fHRoaXMuc29ydGluZ0luZm8ub3JkZXIhPT1zby5BU0NFTkRJTkc/e25hbWU6ZSxvcmRlcjpzby5BU0NFTkRJTkd9OntuYW1lOmUsb3JkZXI6c28uREVTQ0VORElOR30pfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyTmFtZT1lLm5hbWUsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLFdWKX1kcmFnRW5kKCl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJOYW1lfHwhdGhpcy5oaWdobGlnaHRlZENvbHVtbk5hbWV8fCh0aGlzLm9yZGVyQ29sdW1ucy5lbWl0KHRoaXMubW92ZUhlYWRlcih0aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoTmFtZSh0aGlzLmRyYWdnaW5nSGVhZGVyTmFtZSksdGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aE5hbWUodGhpcy5oaWdobGlnaHRlZENvbHVtbk5hbWUpKSksdGhpcy5kcmFnZ2luZ0hlYWRlck5hbWU9dm9pZCAwLHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5OYW1lPXZvaWQgMCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsV1YpLHRoaXMuaGVhZGVyQ2VsbHMuZm9yRWFjaChlPT57ZS5oaWdobGlnaHRTdHlsZSQubmV4dCh7fSl9KSl9ZHJhZ0VudGVyKGUpeyF0aGlzLmRyYWdnaW5nSGVhZGVyTmFtZXx8KHRoaXMuaGlnaGxpZ2h0U2lkZT10aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoTmFtZShlLm5hbWUpPHRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhOYW1lKHRoaXMuZHJhZ2dpbmdIZWFkZXJOYW1lKT9LbC5MRUZUOktsLlJJR0hULHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5OYW1lPWUubmFtZSx0aGlzLmhlYWRlckNlbGxzLmZvckVhY2goaT0+e2kuaGlnaGxpZ2h0U3R5bGUkLm5leHQodGhpcy5nZXRIZWFkZXJIaWdobGlnaHRTdHlsZShpLmhlYWRlci5uYW1lKSl9KSl9bW92ZUhlYWRlcihlLGkpe2xldCByPVsuLi50aGlzLmhlYWRlcnNdO3JldHVybiByLnNwbGljZShlLDEpLHIuc3BsaWNlKGksMCx0aGlzLmhlYWRlcnNbZV0pLHJ9Z2V0SGVhZGVySGlnaGxpZ2h0U3R5bGUoZSl7cmV0dXJuIGUhPT10aGlzLmhpZ2hsaWdodGVkQ29sdW1uTmFtZT97fTp7aGlnaGxpZ2h0OiEwLCJoaWdobGlnaHQtYm9yZGVyLXJpZ2h0Ijp0aGlzLmhpZ2hsaWdodFNpZGU9PT1LbC5SSUdIVCwiaGlnaGxpZ2h0LWJvcmRlci1sZWZ0Ijp0aGlzLmhpZ2hsaWdodFNpZGU9PT1LbC5MRUZUfX1nZXRJbmRleE9mSGVhZGVyV2l0aE5hbWUoZSl7cmV0dXJuIHRoaXMuaGVhZGVycy5maW5kSW5kZXgoaT0+ZT09PWkubmFtZSl9Zm9jdXNDb2x1bW5TZWxlY3Rvcigpe3RoaXMuY29sdW1uU2VsZWN0b3IuZm9jdXMoKX1vcGVuQ29udGV4dE1lbnUoZSxpKXtpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSx0aGlzLmNvbHVtblNlbGVjdG9yTW9kYWwuY2xvc2UoKSx0aGlzLmNvbnRleHRNZW51SGVhZGVyPWUsdGhpcy5jb250ZXh0TWVudS5vcGVuQXRQb3NpdGlvbih7eDppLmNsaWVudFgseTppLmNsaWVudFl9KX1vbkNvbnRleHRNZW51Q2xvc2VkKCl7dGhpcy5jb250ZXh0TWVudUhlYWRlcj12b2lkIDB9b3BlbkNvbHVtblNlbGVjdG9yKGUsaSl7aT8uaXNTdWJNZW51JiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuaW5zZXJ0Q29sdW1uVG89aT8uaW5zZXJ0VG87bGV0IHI9ZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5jb2x1bW5TZWxlY3Rvck1vZGFsLm9wZW5BdFBvc2l0aW9uKHt4OnIueCtyLndpZHRoLHk6ci55K3IuaGVpZ2h0fSksdGhpcy5jb2x1bW5TZWxlY3Rvci5hY3RpdmF0ZSgpfW9uQ29sdW1uU2VsZWN0b3JDbG9zZWQoKXt0aGlzLmluc2VydENvbHVtblRvPXZvaWQgMCx0aGlzLmNvbHVtblNlbGVjdG9yLmRlYWN0aXZhdGUoKX1jYW5Db250ZXh0TWVudVJlbW92ZUNvbHVtbigpe3JldHVybiB0aGlzLmNvbnRleHRNZW51SGVhZGVyPy5yZW1vdmFibGV9Y2FuQ29udGV4dE1lbnVJbnNlcnQoKXtyZXR1cm4gdGhpcy5zZWxlY3RhYmxlQ29sdW1ucyYmdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5sZW5ndGgmJnRoaXMuY29udGV4dE1lbnVIZWFkZXI/Lm1vdmFibGV9Y29udGV4dE1lbnVSZW1vdmVDb2x1bW4oKXt2b2lkIDAhPT10aGlzLmNvbnRleHRNZW51SGVhZGVyJiYodGhpcy5yZW1vdmVDb2x1bW4uZW1pdCh0aGlzLmNvbnRleHRNZW51SGVhZGVyKSx0aGlzLmNvbnRleHRNZW51LmNsb3NlKCkpfWdldEluc2VydEluZGV4KCl7aWYodm9pZCAwPT09dGhpcy5jb250ZXh0TWVudUhlYWRlcnx8dm9pZCAwPT09dGhpcy5pbnNlcnRDb2x1bW5UbylyZXR1cm47bGV0IGU9dGhpcy5oZWFkZXJzLmluZGV4T2YodGhpcy5jb250ZXh0TWVudUhlYWRlcik7cmV0dXJuIHRoaXMuaW5zZXJ0Q29sdW1uVG89PT1LbC5MRUZUP2U6dGhpcy5pbnNlcnRDb2x1bW5Ubz09PUtsLlJJR0hUP01hdGgubWluKGUrMSx0aGlzLmhlYWRlcnMubGVuZ3RoKTplfW9uQ29sdW1uQWRkZWQoZSl7dGhpcy5hZGRDb2x1bW4uZW1pdCh7aGVhZGVyOmUsaW5kZXg6dGhpcy5nZXRJbnNlcnRJbmRleCgpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKGNpKHIsd18sNCksY2kocixNXyw1KSksMiZlKXtsZXQgbzt3ZShvPVNlKCkpJiYoaS5oZWFkZXJDZWxscz1vKSx3ZShvPVNlKCkpJiYoaS5jb250ZW50Q2VsbHM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihZZShQTGUsNSksWWUocEEsNSksWWUoT0xlLDUpKSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLmNvbHVtblNlbGVjdG9yTW9kYWw9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuY29sdW1uU2VsZWN0b3I9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuY29udGV4dE1lbnU9ci5maXJzdCl9fSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzZWxlY3RhYmxlQ29sdW1uczoic2VsZWN0YWJsZUNvbHVtbnMifSxvdXRwdXRzOntzb3J0RGF0YUJ5OiJzb3J0RGF0YUJ5IixvcmRlckNvbHVtbnM6Im9yZGVyQ29sdW1ucyIscmVtb3ZlQ29sdW1uOiJyZW1vdmVDb2x1bW4iLGFkZENvbHVtbjoiYWRkQ29sdW1uIn0sbmdDb250ZW50U2VsZWN0b3JzOldMZSxkZWNsczoxNCx2YXJzOjcsY29uc3RzOltbMywib25DbG9zZSJdLFsiY29udGV4dE1lbnUiLCIiXSxbMSwiY29udGV4dC1tZW51Il0sWyJjbGFzcyIsIm5vLWFjdGlvbnMtbWVzc2FnZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250ZXh0LW1lbnUtYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udGV4dC1tZW51LWJ1dHRvbiBzb3J0LWJ1dHRvbiIsIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiY2xhc3MiLCJjb250ZXh0LW1lbnUtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsib25DbG9zZSIsIm9uQ29sdW1uU2VsZWN0b3JDbG9zZWQoKSIsMywib25PcGVuIiw0LCJuZ0lmIl0sWzEsImRhdGEtdGFibGUiXSxbMSwiaGVhZGVyIl0sWyJjbGFzcyIsImFkZC1idXR0b24tY2VsbCIsNCwibmdJZiJdLFsxLCJuby1hY3Rpb25zLW1lc3NhZ2UiXSxbIm1hdC1idXR0b24iLCIiLDEsImNvbnRleHQtbWVudS1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdLFsibWF0LWJ1dHRvbiIsIiIsMSwiY29udGV4dC1tZW51LWJ1dHRvbiIsInNvcnQtYnV0dG9uIiwzLCJjbGljayJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImRlc2NlbmRpbmciLCIiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4Il0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiXSxbInN2Z0ljb24iLCJhZGRfMjRweCJdLFsib25DbG9zZSIsIm9uQ29sdW1uU2VsZWN0b3JDbG9zZWQoKSIsMywib25PcGVuIl0sWyJjb2x1bW5TZWxlY3Rvck1vZGFsIiwiIl0sWzMsInNlbGVjdGFibGVDb2x1bW5zIiwiY29sdW1uU2VsZWN0ZWQiXSxbMSwiYWRkLWJ1dHRvbi1jZWxsIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkFkZCBDb2x1bW4iLDEsImFkZC1jb2x1bW4tYnRuIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGduKEdMZSksaCgwLCJjdXN0b20tbW9kYWwiLDAsMSksRCgib25DbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNvbnRleHRNZW51Q2xvc2VkKCl9KSxoKDIsImRpdiIsMiksUygzLEZMZSwyLDAsImRpdiIsMyksUyg0LExMZSwzLDAsImJ1dHRvbiIsNCksUyg1LFZMZSw0LDIsImJ1dHRvbiIsNSksUyg2LEhMZSwzLDAsImJ1dHRvbiIsNiksUyg3LHpMZSwzLDAsImJ1dHRvbiIsNiksZygpKCksUyg4LFVMZSwzLDEsImN1c3RvbS1tb2RhbCIsNyksaCg5LCJkaXYiLDgpKDEwLCJkaXYiLDkpLFh0KDExKSxTKDEyLGpMZSwzLDAsImRpdiIsMTApLGcoKSxYdCgxMywxKSxnKCkpLDImZSYmKGIoMyksXygibmdJZiIsIShudWxsIT1pLmNvbnRleHRNZW51SGVhZGVyJiZpLmNvbnRleHRNZW51SGVhZGVyLnJlbW92YWJsZXx8bnVsbCE9aS5jb250ZXh0TWVudUhlYWRlciYmaS5jb250ZXh0TWVudUhlYWRlci5zb3J0YWJsZXx8aS5jYW5Db250ZXh0TWVudUluc2VydCgpKSksYigxKSxfKCJuZ0lmIixudWxsPT1pLmNvbnRleHRNZW51SGVhZGVyP251bGw6aS5jb250ZXh0TWVudUhlYWRlci5yZW1vdmFibGUpLGIoMSksXygibmdJZiIsbnVsbD09aS5jb250ZXh0TWVudUhlYWRlcj9udWxsOmkuY29udGV4dE1lbnVIZWFkZXIuc29ydGFibGUpLGIoMSksXygibmdJZiIsaS5jYW5Db250ZXh0TWVudUluc2VydCgpKSxiKDEpLF8oIm5nSWYiLGkuY2FuQ29udGV4dE1lbnVJbnNlcnQoKSksYigxKSxfKCJuZ0lmIixpLnNlbGVjdGFibGVDb2x1bW5zJiZpLnNlbGVjdGFibGVDb2x1bW5zLmxlbmd0aCksYig0KSxfKCJuZ0lmIixpLnNlbGVjdGFibGVDb2x1bW5zJiZpLnNlbGVjdGFibGVDb2x1bW5zLmxlbmd0aCkpfSxkZXBlbmRlbmNpZXM6W0ZlLERuLEZuLFp0ZSxwQV0sc3R5bGVzOlsiLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJX0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlLXJvdzt6LWluZGV4OjF9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnN0aWNreTt0ZXh0LWFsaWduOmxlZnQ7dG9wOjA7Zm9udC13ZWlnaHQ6Ym9sZDt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uYWRkLWJ1dHRvbi1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlLWNlbGw7d2lkdGg6NDBweH0uY29udGV4dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkO2JveC1zaGFkb3c6MHB4IDRweCA0cHggcmdiYSgwLDAsMCwuMjUpO2JvcmRlci1jb2xvcjojZWJlYmViO2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udGV4dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRleHQtbWVudVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTU7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfS5jb250ZXh0LW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRleHQtbWVudS1idXR0b25bX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdDt3aWR0aDoxMDAlfS5jb250ZXh0LW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWFjdGlvbnMtbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzo4cHg7dGV4dC13cmFwOm5vd3JhcH0uY29udGV4dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zb3J0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAgIHBhdGh7ZmlsbDp1bnNldH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHFMZShuLHQpe2lmKDEmbiYmUCgwLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsIiw1KSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KCk7XygiaGVhZGVyIixlKSgic29ydGluZ0luZm8iLGkuc29ydGluZ0luZm8pKCJocGFyYW1zRW5hYmxlZCIsaS5ocGFyYW1zRW5hYmxlZCl9fWZ1bmN0aW9uIFlMZShuLHQpe2lmKDEmbiYmKFR0KDApLFMoMSxxTGUsMSwzLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsIiw0KSxEdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO2IoMSksXygibmdJZiIsZS5lbmFibGVkJiYoZS50eXBlIT09aS5Db2x1bW5IZWFkZXJUeXBlLlNNT09USEVEfHxpLnNtb290aGluZ0VuYWJsZWQpKX19ZnVuY3Rpb24gWExlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDkpLFAoMSwic3BhbiIpLGcoKSksMiZuKXtsZXQgZT13KDMpLiRpbXBsaWNpdDtiKDEpLE10KCJiYWNrZ3JvdW5kLWNvbG9yIixlLmNvbG9yKX19ZnVuY3Rpb24gUUxlKG4sdCl7aWYoMSZuJiYoaCgwLCJ0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbCIsNyksUygxLFhMZSwyLDIsImRpdiIsOCksZygpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KCkuJGltcGxpY2l0LHI9dygpO18oImhlYWRlciIsZSkoImRhdHVtIixpW2UubmFtZV0pLGIoMSksXygibmdJZiIsZS50eXBlPT09ci5Db2x1bW5IZWFkZXJUeXBlLkNPTE9SKX19ZnVuY3Rpb24gWkxlKG4sdCl7aWYoMSZuJiYoVHQoMCksUygxLFFMZSwyLDMsInRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsIiw2KSxEdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygyKTtiKDEpLF8oIm5nSWYiLGUuZW5hYmxlZCYmKGUudHlwZSE9PWkuQ29sdW1uSGVhZGVyVHlwZS5TTU9PVEhFRHx8aS5zbW9vdGhpbmdFbmFibGVkKSl9fWZ1bmN0aW9uIEtMZShuLHQpe2lmKDEmbiYmKFR0KDApLGgoMSwidGItZGF0YS10YWJsZS1jb250ZW50LXJvdyIpLFMoMixaTGUsMiwxLCJuZy1jb250YWluZXIiLDIpLGcoKSxEdCgpKSwyJm4pe2xldCBlPXcoKTtiKDIpLF8oIm5nRm9yT2YiLGUuZ2V0SGVhZGVycygpKX19dmFyICR0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5zb3J0RGF0YUJ5PW5ldyBMLHRoaXMuZWRpdENvbHVtbkhlYWRlcnM9bmV3IEwsdGhpcy5yZW1vdmVDb2x1bW49bmV3IEwsdGhpcy5Db2x1bW5IZWFkZXJUeXBlPXZ0fWdldEhlYWRlcnMoKXtyZXR1cm5be25hbWU6ImNvbG9yIixkaXNwbGF5TmFtZToiIix0eXBlOnZ0LkNPTE9SLGVuYWJsZWQ6ITB9XS5jb25jYXQodGhpcy5jb2x1bW5IZWFkZXJzKX1nZXRNaW5Qb2ludEluUmFuZ2UoZSxpLHIpe2xldCBvPWVbaV0ueSxhPWVbaV07Zm9yKGxldCBzPWk7czw9cjtzKyspbz5lW3NdLnkmJihvPWVbc10ueSxhPWVbc10pO3JldHVybiBhfWdldE1heFBvaW50SW5SYW5nZShlLGkscil7bGV0IG89ZVtpXS55LGE9ZVtpXTtmb3IobGV0IHM9aTtzPD1yO3MrKylvPGVbc10ueSYmKG89ZVtzXS55LGE9ZVtzXSk7cmV0dXJuIGF9Z2V0TWVhbihlLGkscil7bGV0IG89MDtmb3IobGV0IGE9aTthPD1yO2ErKylvKz1lW2FdLnZhbHVlO3JldHVybiBvLyhyLWkrMSl9Z2V0VGltZVNlbGVjdGlvblRhYmxlRGF0YSgpe2lmKCF0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pcmV0dXJuW107bGV0IGU9dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXAsaT10aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kPy5zdGVwLHI9dGhpcy5kYXRhU2VyaWVzLmZpbHRlcihhPT5xUyhhLHRoaXMuY2hhcnRNZXRhZGF0YU1hcCkpLm1hcChhPT57bGV0IHM9dGhpcy5jaGFydE1ldGFkYXRhTWFwW2EuaWRdLGw9dEMoYS5wb2ludHMsZSksYz1hLnBvaW50c1tsXSxkPW51bGwsdT1udWxsO251bGwhPWkmJih1PXRDKGEucG9pbnRzLGkpLGQ9YS5wb2ludHNbdV0pO2xldCBwPXtpZDphLmlkLGNvbG9yOnMuY29sb3J9O2ZvcihsZXQgZiBvZiB0aGlzLmNvbHVtbkhlYWRlcnMpc3dpdGNoKGYudHlwZSl7Y2FzZSB2dC5SVU46bGV0IG09IiI7cy5hbGlhcyYmKG09YCR7cy5hbGlhcy5hbGlhc051bWJlcn0gJHtzLmFsaWFzLmFsaWFzVGV4dH0vYCkscFtmLm5hbWVdPWAke219JHtzLmRpc3BsYXlOYW1lfWA7Y29udGludWU7Y2FzZSB2dC5TVEVQOnBbZi5uYW1lXT1jLnN0ZXA7Y29udGludWU7Y2FzZSB2dC5WQUxVRTpwW2YubmFtZV09Yy52YWx1ZTtjb250aW51ZTtjYXNlIHZ0LlJFTEFUSVZFX1RJTUU6cFtmLm5hbWVdPWMucmVsYXRpdmVUaW1lSW5Ncztjb250aW51ZTtjYXNlIHZ0LlNNT09USEVEOnBbZi5uYW1lXT1jLnk7Y29udGludWU7Y2FzZSB2dC5WQUxVRV9DSEFOR0U6aWYoIWQpY29udGludWU7cFtmLm5hbWVdPWQueS1jLnk7Y29udGludWU7Y2FzZSB2dC5TVEFSVF9TVEVQOnBbZi5uYW1lXT1jLnN0ZXA7Y29udGludWU7Y2FzZSB2dC5FTkRfU1RFUDppZighZCljb250aW51ZTtwW2YubmFtZV09ZC5zdGVwO2NvbnRpbnVlO2Nhc2UgdnQuU1RBUlRfVkFMVUU6cFtmLm5hbWVdPWMueTtjb250aW51ZTtjYXNlIHZ0LkVORF9WQUxVRTppZighZCljb250aW51ZTtwW2YubmFtZV09ZC55O2NvbnRpbnVlO2Nhc2UgdnQuTUlOX1ZBTFVFOmlmKCF1KWNvbnRpbnVlO3BbZi5uYW1lXT10aGlzLmdldE1pblBvaW50SW5SYW5nZShhLnBvaW50cyxsLHUpLnk7Y29udGludWU7Y2FzZSB2dC5NQVhfVkFMVUU6aWYoIXUpY29udGludWU7cFtmLm5hbWVdPXRoaXMuZ2V0TWF4UG9pbnRJblJhbmdlKGEucG9pbnRzLGwsdSkueTtjb250aW51ZTtjYXNlIHZ0LlBFUkNFTlRBR0VfQ0hBTkdFOmlmKCFkKWNvbnRpbnVlO3BbZi5uYW1lXT0oZC55LWMueSkvYy55O2NvbnRpbnVlO2Nhc2UgdnQuU1RFUF9BVF9NQVg6aWYoIXUpY29udGludWU7cFtmLm5hbWVdPXRoaXMuZ2V0TWF4UG9pbnRJblJhbmdlKGEucG9pbnRzLGwsdSkuc3RlcDtjb250aW51ZTtjYXNlIHZ0LlNURVBfQVRfTUlOOmlmKCF1KWNvbnRpbnVlO3BbZi5uYW1lXT10aGlzLmdldE1pblBvaW50SW5SYW5nZShhLnBvaW50cyxsLHUpLnN0ZXA7Y29udGludWU7Y2FzZSB2dC5NRUFOOmlmKCF1KWNvbnRpbnVlO3BbZi5uYW1lXT10aGlzLmdldE1lYW4oYS5wb2ludHMsbCx1KTtjb250aW51ZTtjYXNlIHZ0LlJBV19DSEFOR0U6aWYoIWQpY29udGludWU7cFtmLm5hbWVdPWQudmFsdWUtYy52YWx1ZTtjb250aW51ZTtkZWZhdWx0OmNvbnRpbnVlfXJldHVybiBwfSksbz10aGlzLmNvbHVtbkhlYWRlcnMuZmluZChhPT5hLm5hbWU9PT10aGlzLnNvcnRpbmdJbmZvLm5hbWUpO3JldHVybiB2b2lkIDAhPT1vJiZyLnNvcnQoKGEscyk9PntpZighbylyZXR1cm4gMDtsZXQgbD10aGlzLmdldFNvcnRhYmxlVmFsdWUoYSxvKSxjPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShzLG8pO3JldHVybiBsPGM/dGhpcy5zb3J0aW5nSW5mby5vcmRlcj09PXNvLkFTQ0VORElORz8tMToxOmw+Yz90aGlzLnNvcnRpbmdJbmZvLm9yZGVyPT09c28uQVNDRU5ESU5HPzE6LTE6MH0pLHJ9Z2V0U29ydGFibGVWYWx1ZShlLGkpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG58fE51bWJlci5pc05hTihuKXx8Ik5hTiI9PT1ufHxudWxsPT1uPy0xLzA6bn0oaS50eXBlPT09dnQuUlVOP3RoaXMuY2hhcnRNZXRhZGF0YU1hcFtlLmlkXS5kaXNwbGF5TmFtZTplW2kubmFtZV0pfW9yZGVyQ29sdW1ucyhlKXt0aGlzLmVkaXRDb2x1bW5IZWFkZXJzLmVtaXQoe2hlYWRlcnM6ZSxkYXRhVGFibGVNb2RlOnRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/bG8uUkFOR0U6bG8uU0lOR0xFfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWRhdGEtdGFibGUiXV0saW5wdXRzOntjaGFydE1ldGFkYXRhTWFwOiJjaGFydE1ldGFkYXRhTWFwIixkYXRhU2VyaWVzOiJkYXRhU2VyaWVzIixzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uOiJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixjb2x1bW5IZWFkZXJzOiJjb2x1bW5IZWFkZXJzIixzb3J0aW5nSW5mbzoic29ydGluZ0luZm8iLGNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkOiJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsc21vb3RoaW5nRW5hYmxlZDoic21vb3RoaW5nRW5hYmxlZCIsaHBhcmFtc0VuYWJsZWQ6ImhwYXJhbXNFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsZWRpdENvbHVtbkhlYWRlcnM6ImVkaXRDb2x1bW5IZWFkZXJzIixyZW1vdmVDb2x1bW46InJlbW92ZUNvbHVtbiJ9LGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWzMsImhlYWRlcnMiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic29ydERhdGFCeSIsIm9yZGVyQ29sdW1ucyIsInJlbW92ZUNvbHVtbiJdLFsiaGVhZGVyIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY29udGVudCIsIiJdLFsiZGlzYWJsZUNvbnRleHRNZW51IiwidHJ1ZSIsMywiaGVhZGVyIiwic29ydGluZ0luZm8iLCJocGFyYW1zRW5hYmxlZCIsNCwibmdJZiJdLFsiZGlzYWJsZUNvbnRleHRNZW51IiwidHJ1ZSIsMywiaGVhZGVyIiwic29ydGluZ0luZm8iLCJocGFyYW1zRW5hYmxlZCJdLFszLCJoZWFkZXIiLCJkYXR1bSIsNCwibmdJZiJdLFszLCJoZWFkZXIiLCJkYXR1bSJdLFsiY2xhc3MiLCJyb3ctY2lyY2xlIiw0LCJuZ0lmIl0sWzEsInJvdy1jaXJjbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInRiLWRhdGEtdGFibGUiLDApLEQoInNvcnREYXRhQnkiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNvcnREYXRhQnkuZW1pdChvKX0pKCJvcmRlckNvbHVtbnMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9yZGVyQ29sdW1ucyhvKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbW92ZUNvbHVtbi5lbWl0KG8pfSksVHQoMSwxKSxTKDIsWUxlLDIsMSwibmctY29udGFpbmVyIiwyKSxEdCgpLFR0KDMsMyksUyg0LEtMZSwzLDEsIm5nLWNvbnRhaW5lciIsMiksRHQoKSxnKCkpLDImZSYmKF8oImhlYWRlcnMiLGkuY29sdW1uSGVhZGVycykoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpLGIoMiksXygibmdGb3JPZiIsaS5nZXRIZWFkZXJzKCkpLGIoMiksXygibmdGb3JPZiIsaS5nZXRUaW1lU2VsZWN0aW9uVGFibGVEYXRhKCkpKX0sZGVwZW5kZW5jaWVzOltkbixGZSxNXyx1QSxmQSx3X10sc3R5bGVzOlsiLnJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVdID4gc3Bhbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC40KTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDt3aWR0aDoxMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO3ZhciAkTGU9WyJzdGVwU3BhbiJdO2Z1bmN0aW9uIGVOZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsNCksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuZm9iUmVtb3ZlZC5lbWl0KCkpfSksUCgxLCJtYXQtaWNvbiIsNSksZygpfX1mdW5jdGlvbiB0TmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDQpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLFAoMSwibWF0LWljb24iLDYpLGcoKX19dmFyIG5OZT1mdW5jdGlvbihuLHQpe3JldHVybntmb2I6ITAsdW5yZW1vdmFibGU6bixwcm9zcGVjdGl2ZTp0fX0sZW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsbG93UmVtb3ZhbD0hMCx0aGlzLmlzUHJvc3BlY3RpdmU9ITEsdGhpcy5zdGVwQ2hhbmdlZD1uZXcgTCx0aGlzLmZvYlJlbW92ZWQ9bmV3IEx9bmdPbkNoYW5nZXMoZSl7ZS5zdGVwJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5zdGVwU3Bhbi5uYXRpdmVFbGVtZW50JiZ0aGlzLnN0ZXBTcGFuLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXZhbGlkYXRlU3RlcChlKXtsZXQgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUud2hpY2gpOygiICI9PT1lLmtleXx8aXNOYU4oTnVtYmVyKGkpKSkmJmUucHJldmVudERlZmF1bHQoKX1zdGVwVHlwZWQoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBpPWUudGFyZ2V0LmlubmVyVGV4dDt0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoIiIhPT1pP051bWJlcihpKTpudWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC1mb2IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZZZSgkTGUsNyxiZSksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS5zdGVwU3Bhbj1yLmZpcnN0KX19LGlucHV0czp7c3RlcDoic3RlcCIsYWxsb3dSZW1vdmFsOiJhbGxvd1JlbW92YWwiLGlzUHJvc3BlY3RpdmU6ImlzUHJvc3BlY3RpdmUifSxvdXRwdXRzOntzdGVwQ2hhbmdlZDoic3RlcENoYW5nZWQiLGZvYlJlbW92ZWQ6ImZvYlJlbW92ZWQifSxmZWF0dXJlczpbR3RdLGRlY2xzOjUsdmFyczo3LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbImNvbnRlbnRlZGl0YWJsZSIsIiIsInJvbGUiLCJ0ZXh0Ym94IiwiYXJpYS1sYWJlbCIsIkVkaXQgc3RlcCIsMywiaW5uZXJIVE1MIiwiYmx1ciIsImtleXByZXNzIiwia2V5ZG93bi5lbnRlciIsImtleWRvd24uc2hpZnQuZW50ZXIiXSxbInN0ZXBTcGFuIiwiIl0sWyJhcmlhLWxhYmVsIiwiRGVzZWxlY3QgZm9iIiwzLCJjbGljayIsNCwibmdJZiJdLFsiYXJpYS1sYWJlbCIsIkRlc2VsZWN0IGZvYiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjbG9zZV8yNHB4Il0sWyJzdmdJY29uIiwia2VlcF8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApKDEsInNwYW4iLDEsMiksRCgiYmx1ciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleXByZXNzIixmdW5jdGlvbihvKXtyZXR1cm4gaS52YWxpZGF0ZVN0ZXAobyl9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleWRvd24uc2hpZnQuZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBvLnByZXZlbnREZWZhdWx0KCl9KSxnKCksUygzLGVOZSwyLDAsImJ1dHRvbiIsMyksUyg0LHROZSwyLDAsImJ1dHRvbiIsMyksZygpKSwyJmUmJihfKCJuZ0NsYXNzIixQcig0LG5OZSwhaS5hbGxvd1JlbW92YWwsaS5pc1Byb3NwZWN0aXZlKSksYigxKSxfKCJpbm5lckhUTUwiLGkuc3RlcCxiUCksYigyKSxfKCJuZ0lmIixpLmFsbG93UmVtb3ZhbCksYigxKSxfKCJuZ0lmIixpLmlzUHJvc3BlY3RpdmUpKX0sZGVwZW5kZW5jaWVzOltibixGZSxEbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjI1cHg7cGFkZGluZzoycHggMnB4IDJweCA0cHg7Zm9udC1zaXplOjExcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6bWluLWNvbnRlbnR9LmZvYltfbmdjb250ZW50LSVDT01QJV0gPiAucHJvc3BlY3RpdmVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctdG9wOjFweH0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6Z3JhYn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlci5wcm9zcGVjdGl2ZXtjdXJzb3I6cG9pbnRlcn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS5mb2IudW5yZW1vdmFibGVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDRweH0uZm9iLnByb3NwZWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggZGFzaGVkICM5ZTllOWU7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTdweH1zcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtmb250LXNpemU6MTFweDt3aWR0aDoxMXB4O2hlaWdodDoxMXB4O2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjb2xvcjppbmhlcml0fWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjExMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOWU5ZTllO2NvbG9yOiNlZWU7Y3Vyc29yOnBvaW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2UwZTBlMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHJOZT1bInN0YXJ0Rm9iV3JhcHBlciJdLG9OZT1bImVuZEZvYldyYXBwZXIiXSxhTmU9WyJwcm9zcGVjdGl2ZUZvYldyYXBwZXIiXTtmdW5jdGlvbiBzTmUobix0KXsxJm4mJlAoMCwiZGl2Iiw2KX1mdW5jdGlvbiBsTmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMiwzKSxTKDIsc05lLDEsMCwiZGl2Iiw0KSxQKDMsImNhcmQtZm9iIiw1KSxnKCkpLDImbil7bGV0IGU9dygpO010KCJ0cmFuc2Zvcm0iLGUuZ2V0Q3NzVHJhbnNsYXRlUHhGb3JQcm9zcGVjdGl2ZUZvYigpKSxiKDIpLF8oIm5nSWYiLGUuc2hvd0V4dGVuZGVkTGluZSksYigxKSxfKCJuZ0NsYXNzIixlLmlzVmVydGljYWwoKT8idmVydGljYWwtZm9iIjoiaG9yaXpvbnRhbC1mb2IiKSgiYWxsb3dSZW1vdmFsIiwhMSkoImlzUHJvc3BlY3RpdmUiLCEwKSgic3RlcCIsZS5wcm9zcGVjdGl2ZVN0ZXApfX1mdW5jdGlvbiBjTmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDEwKSxEKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygyKTtyZXR1cm4gUShvLnN0YXJ0RHJhZyhvLkZvYi5TVEFSVCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkVYVEVOREVEX0xJTkUscikpfSksZygpfX1mdW5jdGlvbiBkTmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDIsNyksUygyLGNOZSwxLDAsImRpdiIsOCksaCgzLCJjYXJkLWZvYiIsOSksRCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKTtyZXR1cm4gUShvLnN0YXJ0RHJhZyhvLkZvYi5TVEFSVCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkZPQixyKSl9KSgic3RlcENoYW5nZWQiLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpO3JldHVybiBRKG8uc3RlcFR5cGVkKG8uRm9iLlNUQVJULHIpKX0pKCJmb2JSZW1vdmVkIixmdW5jdGlvbigpe1goZSk7bGV0IHI9dygpO3JldHVybiBRKHIub25Gb2JSZW1vdmVkKHIuRm9iLlNUQVJUKSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtNdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yU3RhcnRGb2IoKSksYigyKSxfKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLGIoMSksXygiYWxsb3dSZW1vdmFsIiwhIWUuYWxsb3dGb2JSZW1vdmFsfHxlLnRpbWVTZWxlY3Rpb24uZW5kKSgibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoInN0ZXAiLGUudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX19ZnVuY3Rpb24gdU5lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwxMCksRCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMik7cmV0dXJuIFEoby5zdGFydERyYWcoby5Gb2IuRU5ELG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRVhURU5ERURfTElORSxyKSl9KSxnKCl9fWZ1bmN0aW9uIHBOZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMiwxMSksUygyLHVOZSwxLDAsImRpdiIsOCksaCgzLCJjYXJkLWZvYiIsMTIpLEQoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5zdGFydERyYWcoby5Gb2IuRU5ELG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRk9CLHIpKX0pKCJzdGVwQ2hhbmdlZCIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5zdGVwVHlwZWQoby5Gb2IuRU5ELHIpKX0pKCJmb2JSZW1vdmVkIixmdW5jdGlvbigpe1goZSk7bGV0IHI9dygpO3JldHVybiBRKHIub25Gb2JSZW1vdmVkKHIuRm9iLkVORCkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7TXQoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeEZvckVuZEZvYigpKSxiKDIpLF8oIm5nSWYiLGUuc2hvd0V4dGVuZGVkTGluZSksYigxKSxfKCJuZ0NsYXNzIixlLmlzVmVydGljYWwoKT8idmVydGljYWwtZm9iIjoiaG9yaXpvbnRhbC1mb2IiKSgic3RlcCIsZS50aW1lU2VsZWN0aW9uLmVuZC5zdGVwKX19dmFyIFJyPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OT05FPTBdPSJOT05FIixuW24uU1RBUlQ9MV09IlNUQVJUIixuW24uRU5EPTJdPSJFTkQifShScnx8KFJyPXt9KSksUnIpKSgpLGZOZT17c3RhcnQ6UnIuU1RBUlQsZW5kOlJyLkVORH0sbUE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnJvb3Q9ZSx0aGlzLnNob3dFeHRlbmRlZExpbmU9ITEsdGhpcy5wcm9zcGVjdGl2ZVN0ZXA9bnVsbCx0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbj1udWxsLHRoaXMuYWxsb3dGb2JSZW1vdmFsPSEwLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgTCx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEwsdGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQ9bmV3IEwsdGhpcy5oYXNGb2JNb3ZlZD0hMSx0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj1Sci5OT05FLHRoaXMuYWZmb3JkYW5jZT1qYS5OT05FLHRoaXMubW91c2VMaXN0ZW5lcj10aGlzLm1vdXNlTW92ZS5iaW5kKHRoaXMpLHRoaXMuc3RvcExpc3RlbmVyPXRoaXMuc3RvcERyYWcuYmluZCh0aGlzKSx0aGlzLkZvYj1Scix0aGlzLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlPWphfWdldENzc1RyYW5zbGF0ZVB4Rm9yU3RhcnRGb2IoKXtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09Z2EuVkVSVElDQUw/YHRyYW5zbGF0ZSgwcHgsICR7dGhpcy5zdGFydFN0ZXBBeGlzUG9zaXRpb259cHgpYDpgdHJhbnNsYXRlKCR7dGhpcy5zdGFydFN0ZXBBeGlzUG9zaXRpb259cHgsIDBweClgfWdldENzc1RyYW5zbGF0ZVB4Rm9yRW5kRm9iKCl7cmV0dXJuIG51bGw9PT10aGlzLmVuZFN0ZXBBeGlzUG9zaXRpb24/IiI6dGhpcy5heGlzRGlyZWN0aW9uPT09Z2EuVkVSVElDQUw/YHRyYW5zbGF0ZSgwcHgsICR7dGhpcy5lbmRTdGVwQXhpc1Bvc2l0aW9ufXB4KWA6YHRyYW5zbGF0ZSgke3RoaXMuZW5kU3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JQcm9zcGVjdGl2ZUZvYigpe3JldHVybiBudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXA/IiI6dGhpcy5heGlzRGlyZWN0aW9uPT09Z2EuVkVSVElDQUw/YHRyYW5zbGF0ZSgwcHgsICR7dGhpcy5wcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb259cHgpYDpgdHJhbnNsYXRlKCR7dGhpcy5wcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb259cHgsIDBweClgfXN0b3BFdmVudFByb3BhZ2F0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfXN0YXJ0RHJhZyhlLGkscil7aSE9PWphLkZPQiYmdGhpcy5zdG9wRXZlbnRQcm9wYWdhdGlvbihyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubW91c2VMaXN0ZW5lciksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5zdG9wTGlzdGVuZXIpLHRoaXMuY3VycmVudERyYWdnaW5nRm9iPWUsdGhpcy5hZmZvcmRhbmNlPWl9c3RvcERyYWcoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubW91c2VMaXN0ZW5lciksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5zdG9wTGlzdGVuZXIpLHRoaXMuY3VycmVudERyYWdnaW5nRm9iPVJyLk5PTkUsdGhpcy5oYXNGb2JNb3ZlZCYmdGhpcy50aW1lU2VsZWN0aW9uJiZ0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7dGltZVNlbGVjdGlvbjp0aGlzLnRpbWVTZWxlY3Rpb24sYWZmb3JkYW5jZTp0aGlzLmFmZm9yZGFuY2V9KSx0aGlzLmFmZm9yZGFuY2U9amEuTk9ORSx0aGlzLmhhc0ZvYk1vdmVkPSExfWlzVmVydGljYWwoKXtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09Z2EuVkVSVElDQUx9c2hvdWxkU3dhcEZvYnMoZSl7cmV0dXJuISghdGhpcy50aW1lU2VsZWN0aW9ufHwhdGhpcy50aW1lU2VsZWN0aW9uLmVuZCkmJih0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj09PVJyLkVORD9lPHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwOnRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09UnIuU1RBUlQmJmU+dGhpcy50aW1lU2VsZWN0aW9uLmVuZC5zdGVwKX1nZXROZXdUaW1lU2VsZWN0aW9uKGUsaSl7bGV0IHI9ey4uLml9O2lmKCF0aGlzLnRpbWVTZWxlY3Rpb24pcmV0dXJuIHI7aWYoIXRoaXMudGltZVNlbGVjdGlvbi5lbmQpcmV0dXJuIHIuc3RhcnQ9e3N0ZXA6ZX0scjtpZih0aGlzLnNob3VsZFN3YXBGb2JzKGUpKXtsZXRbbyxhXT10aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj09PVJyLkVORD9bImVuZCIsInN0YXJ0Il06WyJzdGFydCIsImVuZCJdO3JldHVybiB0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj1mTmVbYV0scltvXT10aGlzLnRpbWVTZWxlY3Rpb25bYV0sclthXT17c3RlcDplfSxyfXJldHVybiB0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj09PVJyLkVORD8oci5lbmQ9e3N0ZXA6ZX0scik6KHIuc3RhcnQ9e3N0ZXA6ZX0scil9Z2V0TmV3U3RlcEZyb21Nb3VzZUV2ZW50KGUpe2xldCBpPW51bGwscj10aGlzLmdldE1vdXNlUG9zaXRpb25Gcm9tRXZlbnQoZSksbz10aGlzLmF4aXNEaXJlY3Rpb249PT1nYS5WRVJUSUNBTD9lLm1vdmVtZW50WTplLm1vdmVtZW50WDtyZXR1cm4gdGhpcy5pc01vdmluZ0hpZ2hlcihyLG8pP2k9dGhpcy5jYXJkRm9iSGVscGVyLmdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKHIpOnRoaXMuaXNNb3ZpbmdMb3dlcihyLG8pJiYoaT10aGlzLmNhcmRGb2JIZWxwZXIuZ2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihyKSksbnVsbD09PWk/bnVsbDppfW1vdXNlTW92ZShlKXtpZih0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj09PVJyLk5PTkUpcmV0dXJuO2xldCBpPXRoaXMuZ2V0TmV3U3RlcEZyb21Nb3VzZUV2ZW50KGUpO2lmKG51bGw9PT1pfHwhdGhpcy50aW1lU2VsZWN0aW9uKXJldHVybjtsZXQgcj10aGlzLmdldE5ld1RpbWVTZWxlY3Rpb24oaSx0aGlzLnRpbWVTZWxlY3Rpb24pO3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOnJ9KSx0aGlzLmhhc0ZvYk1vdmVkPSEwfW1vdXNlT3ZlclByb3NwZWN0aXZlRm9iQXJlYShlKXtpZihudWxsIT10aGlzLnRpbWVTZWxlY3Rpb24/LmVuZClyZXR1cm47bGV0IGk9dGhpcy5nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSk7bnVsbCE9PWkmJnRoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkLmVtaXQoaSl9aXNNb3ZpbmdMb3dlcihlLGkpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09UnIuTk9ORSYmbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwKXJldHVybiEwO2xldCByPXRoaXMuZ2V0Q3VycmVudEZvYlN0ZXAoKTtyZXR1cm4gdm9pZCAwIT09ciYmZTx0aGlzLmdldERyYWdnaW5nRm9iQ2VudGVyKCkmJmk8MCYmcj50aGlzLmxvd2VzdFN0ZXB9aXNNb3ZpbmdIaWdoZXIoZSxpKXtpZih0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj09PVJyLk5PTkUmJm51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcClyZXR1cm4hMDtsZXQgcj10aGlzLmdldEN1cnJlbnRGb2JTdGVwKCk7cmV0dXJuIHZvaWQgMCE9PXImJmU+dGhpcy5nZXREcmFnZ2luZ0ZvYkNlbnRlcigpJiZpPjAmJnI8dGhpcy5oaWdoZXN0U3RlcH1nZXREcmFnZ2luZ0ZvYkNlbnRlcigpe2xldCBlPXRoaXMuZ2V0Q3VycmVudEZvYigpPy5uYXRpdmVFbGVtZW50O2lmKCFlKXJldHVybiAwO2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLHI9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1nYS5WRVJUSUNBTD9pLXRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDpyLXRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9Z2V0Q3VycmVudEZvYigpe3N3aXRjaCh0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYil7Y2FzZSBSci5TVEFSVDpyZXR1cm4gdGhpcy5zdGFydEZvYldyYXBwZXI7Y2FzZSBSci5FTkQ6cmV0dXJuIHRoaXMuZW5kRm9iV3JhcHBlcjtjYXNlIFJyLk5PTkU6cmV0dXJuIHRoaXMucHJvc3BlY3RpdmVGb2JXcmFwcGVyfX1nZXRDdXJyZW50Rm9iU3RlcCgpe3N3aXRjaCh0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYil7Y2FzZSBSci5TVEFSVDpyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uPy5zdGFydC5zdGVwO2Nhc2UgUnIuRU5EOnJldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/LmVuZD8uc3RlcDtjYXNlIFJyLk5PTkU6cmV0dXJuIHRoaXMucHJvc3BlY3RpdmVTdGVwPz92b2lkIDB9fWdldE1vdXNlUG9zaXRpb25Gcm9tRXZlbnQoZSl7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PWdhLlZFUlRJQ0FMP2UuY2xpZW50WS10aGlzLnJvb3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A6ZS5jbGllbnRYLXRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9c3RlcFR5cGVkKGUsaSl7aWYobnVsbD09PWkpcmV0dXJuIHZvaWQobnVsbCE9PXRoaXMudGltZVNlbGVjdGlvbi5lbmQmJnRoaXMub25Gb2JSZW1vdmVkKGUpKTtsZXQgcj17Li4udGhpcy50aW1lU2VsZWN0aW9ufTtlPT09UnIuU1RBUlQ/ci5zdGFydD17c3RlcDppfTplPT09UnIuRU5EJiYoci5lbmQ9e3N0ZXA6aX0pLG51bGwhPT1yLmVuZCYmci5zdGFydC5zdGVwPnIuZW5kLnN0ZXAmJihyPXtzdGFydDpyLmVuZCxlbmQ6ci5zdGFydH0pLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOnIsYWZmb3JkYW5jZTpqYS5GT0JfVEVYVH0pfXByb3NwZWN0aXZlRm9iQ2xpY2tlZChlKXtlLnN0b3BQcm9wYWdhdGlvbigpO2xldCBpPXRoaXMuZ2V0UHJvc3BlY3RpdmVUaW1lU2VsZWN0aW9uKCk7IWl8fCh0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7YWZmb3JkYW5jZTpqYS5GT0JfQURERUQsdGltZVNlbGVjdGlvbjppfSksdGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQuZW1pdChudWxsKSl9Z2V0UHJvc3BlY3RpdmVUaW1lU2VsZWN0aW9uKCl7aWYodGhpcy5wcm9zcGVjdGl2ZVN0ZXApcmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj97c3RhcnQ6e3N0ZXA6TWF0aC5taW4odGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXAsdGhpcy5wcm9zcGVjdGl2ZVN0ZXApfSxlbmQ6e3N0ZXA6TWF0aC5tYXgodGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXAsdGhpcy5wcm9zcGVjdGl2ZVN0ZXApfX06e3N0YXJ0OntzdGVwOnRoaXMucHJvc3BlY3RpdmVTdGVwfSxlbmQ6bnVsbH19b25Gb2JSZW1vdmVkKGUpe2UhPT1Sci5FTkQ/bnVsbD09PXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/dGhpcy5vblRpbWVTZWxlY3Rpb25Ub2dnbGVkLmVtaXQoKTp0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7YWZmb3JkYW5jZTpqYS5GT0JfUkVNT1ZFRCx0aW1lU2VsZWN0aW9uOntzdGFydDp0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLGVuZDpudWxsfX0pOnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOmphLkZPQl9SRU1PVkVELHRpbWVTZWxlY3Rpb246ey4uLnRoaXMudGltZVNlbGVjdGlvbixlbmQ6bnVsbH19KX1vblByb3NwZWN0aXZlQXJlYU1vdXNlTGVhdmUoKXt0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KG51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC1mb2ItY29udHJvbGxlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihZZShyTmUsNSksWWUob05lLDUpLFllKGFOZSw1KSksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS5zdGFydEZvYldyYXBwZXI9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuZW5kRm9iV3JhcHBlcj1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS5wcm9zcGVjdGl2ZUZvYldyYXBwZXI9ci5maXJzdCl9fSxpbnB1dHM6e2F4aXNEaXJlY3Rpb246ImF4aXNEaXJlY3Rpb24iLHRpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24iLGNhcmRGb2JIZWxwZXI6ImNhcmRGb2JIZWxwZXIiLHN0YXJ0U3RlcEF4aXNQb3NpdGlvbjoic3RhcnRTdGVwQXhpc1Bvc2l0aW9uIixlbmRTdGVwQXhpc1Bvc2l0aW9uOiJlbmRTdGVwQXhpc1Bvc2l0aW9uIixoaWdoZXN0U3RlcDoiaGlnaGVzdFN0ZXAiLGxvd2VzdFN0ZXA6Imxvd2VzdFN0ZXAiLHNob3dFeHRlbmRlZExpbmU6InNob3dFeHRlbmRlZExpbmUiLHByb3NwZWN0aXZlU3RlcDoicHJvc3BlY3RpdmVTdGVwIixwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb246InByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbiIsYWxsb3dGb2JSZW1vdmFsOiJhbGxvd0ZvYlJlbW92YWwifSxvdXRwdXRzOntvblRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvblRpbWVTZWxlY3Rpb25Ub2dnbGVkOiJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixvblByb3NwZWN0aXZlU3RlcENoYW5nZWQ6Im9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZCJ9LGRlY2xzOjYsdmFyczo0LGNvbnN0czpbWyJjbGFzcyIsInRpbWUtZm9iLXdyYXBwZXIiLDMsInRyYW5zZm9ybSIsNCwibmdJZiJdLFsxLCJwcm9zcGVjdGl2ZS1mb2ItYXJlYSIsMywibmdDbGFzcyIsIm1vdXNlbW92ZSIsImNsaWNrIiwibW91c2VsZWF2ZSJdLFsxLCJ0aW1lLWZvYi13cmFwcGVyIl0sWyJwcm9zcGVjdGl2ZUZvYldyYXBwZXIiLCIiXSxbImNsYXNzIiwiZXh0ZW5kZWQtbGluZSIsNCwibmdJZiJdLFszLCJuZ0NsYXNzIiwiYWxsb3dSZW1vdmFsIiwiaXNQcm9zcGVjdGl2ZSIsInN0ZXAiXSxbMSwiZXh0ZW5kZWQtbGluZSJdLFsic3RhcnRGb2JXcmFwcGVyIiwiIl0sWyJjbGFzcyIsImV4dGVuZGVkLWxpbmUiLDMsIm1vdXNlZG93biIsNCwibmdJZiJdLFsxLCJzdGFydEZvYiIsMywiYWxsb3dSZW1vdmFsIiwibmdDbGFzcyIsInN0ZXAiLCJtb3VzZWRvd24iLCJzdGVwQ2hhbmdlZCIsImZvYlJlbW92ZWQiXSxbMSwiZXh0ZW5kZWQtbGluZSIsMywibW91c2Vkb3duIl0sWyJlbmRGb2JXcmFwcGVyIiwiIl0sWzEsImVuZEZvYiIsMywibmdDbGFzcyIsInN0ZXAiLCJtb3VzZWRvd24iLCJzdGVwQ2hhbmdlZCIsImZvYlJlbW92ZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIpLFR0KDEpLFMoMixsTmUsNCw3LCJkaXYiLDApLGgoMywiZGl2IiwxKSxEKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm1vdXNlT3ZlclByb3NwZWN0aXZlRm9iQXJlYShvKX0pKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkucHJvc3BlY3RpdmVGb2JDbGlja2VkKG8pfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Qcm9zcGVjdGl2ZUFyZWFNb3VzZUxlYXZlKCl9KSxnKCksRHQoKSxTKDQsZE5lLDQsNiwiZGl2IiwwKSxTKDUscE5lLDQsNSwiZGl2IiwwKSxnKCkpLDImZSYmKGIoMiksXygibmdJZiIsbnVsbCE9PWkucHJvc3BlY3RpdmVTdGVwKSxiKDEpLF8oIm5nQ2xhc3MiLGkuaXNWZXJ0aWNhbCgpPyJ2ZXJ0aWNhbC1wcm9zcGVjdGl2ZS1hcmVhIjoiaG9yaXpvbnRhbC1wcm9zcGVjdGl2ZS1hcmVhIiksYigxKSxfKCJuZ0lmIixpLnRpbWVTZWxlY3Rpb24pLGIoMSksXygibmdJZiIsaS50aW1lU2VsZWN0aW9uJiZpLnRpbWVTZWxlY3Rpb24uZW5kKSl9LGRlcGVuZGVuY2llczpbYm4sRmUsZW5lXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOmFsbH0udGltZS1mb2Itd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MH0udmVydGljYWwtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uaG9yaXpvbnRhbC1mb2JbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfS5leHRlbmRlZC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci13aWR0aDowIDFweDtoZWlnaHQ6Y2FsYygxMDAlIC0gMzBweCl9LmV4dGVuZGVkLWxpbmVbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCAxOHB4LCAjY2NjIDE5cHgsICNjY2MgMjFweCwgdHJhbnNwYXJlbnQgMjJweCk7Ym9yZGVyOjA7Y3Vyc29yOmV3LXJlc2l6ZTttYXJnaW4tbGVmdDotMjBweDtwYWRkaW5nOjAgMjBweH0uaG9yaXpvbnRhbC1wcm9zcGVjdGl2ZS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MDtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MzBweDt3aWR0aDpjYWxjKDEwMCUgLSA3NHB4KX0ucHJvc3BlY3RpdmUtYXJlYVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHFWPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmRpc2FibGVJbnRlcmFjdGlvbj0hMSx0aGlzLmFsbG93Rm9iUmVtb3ZhbD0hMCx0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEwsdGhpcy5vblRpbWVTZWxlY3Rpb25Ub2dnbGVkPW5ldyBMLHRoaXMuYXhpc0RpcmVjdGlvbj1nYS5IT1JJWk9OVEFMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9LHRoaXMucHJvc3BlY3RpdmVTdGVwPW51bGx9Z2V0QXhpc1Bvc2l0aW9uRnJvbVN0YXJ0U3RlcCgpe3JldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/dGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sdGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXApOiIifWdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCl7cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj8uZW5kP3RoaXMuc2NhbGUuZm9yd2FyZCh0aGlzLm1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kLFswLHRoaXMuYXhpc1NpemVdLHRoaXMudGltZVNlbGVjdGlvbj8uZW5kLnN0ZXA/P3RoaXMubWluTWF4U3RlcC5tYXhTdGVwKTpudWxsfWdldEF4aXNQb3NpdGlvbkZyb21Qcm9zcGVjdGl2ZVN0ZXAoKXtyZXR1cm4gbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwP251bGw6dGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sdGhpcy5wcm9zcGVjdGl2ZVN0ZXApfW9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZChlKXt0aGlzLnByb3NwZWN0aXZlU3RlcD1lfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMubWluTWF4U3RlcC5tYXhTdGVwfWdldExvd2VzdFN0ZXAoKXtyZXR1cm4gdGhpcy5taW5NYXhTdGVwLm1pblN0ZXB9Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb24oZSl7cmV0dXJuIHRoaXMuZ2V0U3RlcEF0TW91c2VQb3N0aW9uKGUpfWdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb24oZSl7cmV0dXJuIHRoaXMuZ2V0U3RlcEF0TW91c2VQb3N0aW9uKGUpfWdldFN0ZXBBdE1vdXNlUG9zdGlvbihlKXtsZXQgaT1NYXRoLnJvdW5kKHRoaXMuc2NhbGUucmV2ZXJzZSh0aGlzLm1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kLFswLHRoaXMuYXhpc1NpemVdLGUpKTtyZXR1cm4gaT50aGlzLmdldEhpZ2hlc3RTdGVwKCk/dGhpcy5nZXRIaWdoZXN0U3RlcCgpOmk8dGhpcy5nZXRMb3dlc3RTdGVwKCk/dGhpcy5nZXRMb3dlc3RTdGVwKCk6aX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2NhbGFyLWNhcmQtZm9iLWNvbnRyb2xsZXIiXV0saW5wdXRzOnt0aW1lU2VsZWN0aW9uOiJ0aW1lU2VsZWN0aW9uIixzY2FsZToic2NhbGUiLG1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kOiJtaW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCIsbWluTWF4U3RlcDoibWluTWF4U3RlcCIsYXhpc1NpemU6ImF4aXNTaXplIixkaXNhYmxlSW50ZXJhY3Rpb246ImRpc2FibGVJbnRlcmFjdGlvbiIsYWxsb3dGb2JSZW1vdmFsOiJhbGxvd0ZvYlJlbW92YWwifSxvdXRwdXRzOntvblRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvblRpbWVTZWxlY3Rpb25Ub2dnbGVkOiJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIn0sZGVjbHM6MSx2YXJzOjEzLGNvbnN0czpbWzMsImF4aXNEaXJlY3Rpb24iLCJ0aW1lU2VsZWN0aW9uIiwic3RhcnRTdGVwQXhpc1Bvc2l0aW9uIiwiZW5kU3RlcEF4aXNQb3NpdGlvbiIsInByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbiIsImhpZ2hlc3RTdGVwIiwibG93ZXN0U3RlcCIsInByb3NwZWN0aXZlU3RlcCIsImNhcmRGb2JIZWxwZXIiLCJzaG93RXh0ZW5kZWRMaW5lIiwiYWxsb3dGb2JSZW1vdmFsIiwib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLEQoIm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkKG8pfSkoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRpbWVTZWxlY3Rpb25Ub2dnbGVkLmVtaXQobyl9KSxnKCkpLDImZSYmKE10KCJwb2ludGVyLWV2ZW50cyIsaS5kaXNhYmxlSW50ZXJhY3Rpb24/Im5vbmUiOiJhbGwiKSxfKCJheGlzRGlyZWN0aW9uIixpLmF4aXNEaXJlY3Rpb24pKCJ0aW1lU2VsZWN0aW9uIixpLnRpbWVTZWxlY3Rpb24pKCJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLGkuZ2V0QXhpc1Bvc2l0aW9uRnJvbVN0YXJ0U3RlcCgpKSgiZW5kU3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpKSgicHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21Qcm9zcGVjdGl2ZVN0ZXAoKSkoImhpZ2hlc3RTdGVwIixpLmdldEhpZ2hlc3RTdGVwKCkpKCJsb3dlc3RTdGVwIixpLmdldExvd2VzdFN0ZXAoKSkoInByb3NwZWN0aXZlU3RlcCIsaS5wcm9zcGVjdGl2ZVN0ZXApKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpKCJzaG93RXh0ZW5kZWRMaW5lIiwhMCkoImFsbG93Rm9iUmVtb3ZhbCIsaS5hbGxvd0ZvYlJlbW92YWwpKX0sZGVwZW5kZW5jaWVzOlttQV0sc3R5bGVzOlsic2NhbGFyLWNhcmQtZm9iLWNvbnRyb2xsZXIgLnRpbWUtZm9iLXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxtTmU9WyJkYXRhVGFibGVDb250YWluZXIiXTtmdW5jdGlvbiBoTmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDI3KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vcGVuVGFibGVFZGl0TWVudSgpKX0pLFAoMSwibWF0LWljb24iLDI4KSxoKDIsInNwYW4iKSxUKDMsIkVkaXQgVGFibGUgQ29sdW1ucyIpLGcoKSgpfX1mdW5jdGlvbiBnTmUobix0KXsxJm4mJlAoMCwibWF0LXNwaW5uZXIiLDI5KX1mdW5jdGlvbiBfTmUobix0KXsxJm4mJihoKDAsInRoIiksVCgxLCJTbW9vdGhlZCIpLGcoKSl9ZnVuY3Rpb24geU5lKG4sdCl7aWYoMSZuJiYoVHQoMCksUCgxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwzNSksVCgyLCIvIiksRHQoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0O2IoMSksXygiYWxpYXMiLGUubWV0YWRhdGEuYWxpYXMpfX1mdW5jdGlvbiBiTmUobix0KXtpZigxJm4mJihoKDAsInRkIiksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoMik7YigxKSx6ZSgiICIsaS52YWx1ZUZvcm1hdHRlci5mb3JtYXRTaG9ydChlLmRhdGFQb2ludC55KSwiICIpfX1mdW5jdGlvbiB2TmUobix0KXtpZigxJm4mJihUdCgwKSxoKDEsInRyIiwzMykoMiwidGQiLDM0KSxQKDMsInNwYW4iKSxnKCksaCg0LCJ0ZCIsMiksUyg1LHlOZSwzLDEsIm5nLWNvbnRhaW5lciIsMjQpLFQoNiksZygpLFMoNyxiTmUsMiwxLCJ0ZCIsMjQpLGgoOCwidGQiKSxUKDkpLGcoKSxoKDEwLCJ0ZCIpLFQoMTEpLGcoKSxoKDEyLCJ0ZCIpLFQoMTMpLEcoMTQsImRhdGUiKSxnKCksaCgxNSwidGQiKSxUKDE2KSxnKCkoKSxEdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygyKTtiKDEpLFFlKCJjbG9zZXN0IixlLm1ldGFkYXRhLmNsb3Nlc3QpLGIoMiksTXQoImJhY2tncm91bmQtY29sb3IiLGUubWV0YWRhdGEuY29sb3IpLGIoMiksXygibmdJZiIsZS5tZXRhZGF0YS5hbGlhcyksYigxKSx6ZSgiIixlLm1ldGFkYXRhLmRpc3BsYXlOYW1lLCIgIiksYigxKSxfKCJuZ0lmIixpLnNtb290aGluZ0VuYWJsZWQpLGIoMiksdXQoaS52YWx1ZUZvcm1hdHRlci5mb3JtYXRTaG9ydChlLmRhdGFQb2ludC52YWx1ZSkpLGIoMiksdXQoaS5zdGVwRm9ybWF0dGVyLmZvcm1hdFNob3J0KGUuZGF0YVBvaW50LnN0ZXApKSxiKDIpLHV0KEpwKDE0LDExLGUuZGF0YVBvaW50LndhbGxUaW1lLCJzaG9ydCIpKSxiKDMpLHplKCIgIixpLnJlbGF0aXZlWEZvcm1hdHRlci5mb3JtYXRSZWFkYWJsZShlLmRhdGFQb2ludC5yZWxhdGl2ZVRpbWVJbk1zKSwiICIpfX1mdW5jdGlvbiB4TmUobix0KXtpZigxJm4mJihoKDAsInRhYmxlIiwzMCkoMSwidGhlYWQiKSgyLCJ0ciIpLFAoMywidGgiLDMxKSxoKDQsInRoIiksVCg1LCJSdW4iKSxnKCksUyg2LF9OZSwyLDAsInRoIiwyNCksaCg3LCJ0aCIpLFQoOCwiVmFsdWUiKSxnKCksaCg5LCJ0aCIpLFQoMTAsIlN0ZXAiKSxnKCksaCgxMSwidGgiKSxUKDEyLCJUaW1lIiksZygpLGgoMTMsInRoIiksVCgxNCwiUmVsYXRpdmUiKSxnKCkoKSgpLGgoMTUsInRib2R5IiksUygxNix2TmUsMTcsMTQsIm5nLWNvbnRhaW5lciIsMzIpLGcoKSgpKSwyJm4pe2xldCBlPXQuZGF0YSxpPXQuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZCxyPXQuY3Vyc29yTG9jYXRpb24sbz13KCk7Yig2KSxfKCJuZ0lmIixvLnNtb290aGluZ0VuYWJsZWQpLGIoMTApLF8oIm5nRm9yT2YiLG8uZ2V0Q3Vyc29yQXdhcmVUb29sdGlwRGF0YShlLGkscikpKCJuZ0ZvclRyYWNrQnkiLG8udHJhY2tCeVRvb2x0aXBEYXR1bSl9fWZ1bmN0aW9uIENOZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsNDEpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS50b2dnbGVUYWJsZUV4cGFuZGVkKCkpfSksUCgxLCJtYXQtaWNvbiIsOSksZygpfWlmKDImbil7bGV0IGU9dygyKTtfKCJ0aXRsZSIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJFeHBhbmQgVGFibGUiOiJDb2xsYXBzZSBUYWJsZSIpLGIoMSksXygic3ZnSWNvbiIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJleHBhbmRfbW9yZV8yNHB4IjoiZXhwYW5kX2xlc3NfMjRweCIpfX12YXIgTU5lPWZ1bmN0aW9uKG4pe3JldHVybnsiZGF0YS10YWJsZS1jb250YWluZXIiOiEwLGV4cGFuZGVkOm59fTtmdW5jdGlvbiB3TmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7VHQoMCksaCgxLCJkaXYiLDM2LDM3KSgzLCJzY2FsYXItY2FyZC1kYXRhLXRhYmxlIiwzOCksRCgic29ydERhdGFCeSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuc29ydERhdGFCeShyKSl9KSgiZWRpdENvbHVtbkhlYWRlcnMiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmVkaXRDb2x1bW5IZWFkZXJzLmVtaXQocikpfSkoInJlbW92ZUNvbHVtbiIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkucmVtb3ZlQ29sdW1uLmVtaXQocikpfSksZygpKCksaCg0LCJkaXYiLDM5KSxTKDUsQ05lLDIsMiwiYnV0dG9uIiw0MCksZygpLER0KCl9aWYoMiZuKXtsZXQgZT13KCk7YigxKSxfKCJuZ0NsYXNzIixTbigxMCxNTmUsZS5jYXJkU3RhdGUudGFibGVFeHBhbmRlZCkpLGIoMiksXygiY2hhcnRNZXRhZGF0YU1hcCIsZS5jaGFydE1ldGFkYXRhTWFwKSgiZGF0YVNlcmllcyIsZS5kYXRhU2VyaWVzKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsZS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKSgiY29sdW1uSGVhZGVycyIsZS5jb2x1bW5IZWFkZXJzKSgic29ydGluZ0luZm8iLGUuc29ydGluZ0luZm8pKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsZS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoInNtb290aGluZ0VuYWJsZWQiLGUuc21vb3RoaW5nRW5hYmxlZCkoImhwYXJhbXNFbmFibGVkIixlLmhwYXJhbXNFbmFibGVkKSxiKDIpLF8oIm5nSWYiLGUuY2FuRXhwYW5kVGFibGUoKSl9fXZhciBTTmU9ZnVuY3Rpb24obil7cmV0dXJuWzAsbl19LEVOZT1mdW5jdGlvbigpe3JldHVybnsib3V0LW9mLXNlbGVjdGVkLXRpbWUiOiEwLGVuZDohMCxyYW5nZTohMH19O2Z1bmN0aW9uIFROZShuLHQpe2lmKDEmbiYmUCgwLCJkaXYiLDM2KSwyJm4pe2xldCBlPXcoMiksaT1lLnZpZXdFeHRlbnQscj1lLmRvbURpbWVuc2lvbixvPWUueFNjYWxlLGE9dygpO010KCJsZWZ0IixvLmZvcndhcmQoaS54LFNuKDMsU05lLHIud2lkdGgpLG51bGw9PWEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/bnVsbDphLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApKyJweCIpLF8oIm5nQ2xhc3MiLHV1KDUsRU5lKSl9fXZhciBETmU9ZnVuY3Rpb24obil7cmV0dXJuW24sMF19LElOZT1mdW5jdGlvbihuKXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxzdGFydDohMCxyYW5nZTpufX07ZnVuY3Rpb24gQU5lKG4sdCl7aWYoMSZuJiYoVHQoMCksUCgxLCJkaXYiLDM2KSxTKDIsVE5lLDEsNiwiZGl2Iiw0MiksRHQoKSksMiZuKXtsZXQgZT13KCksaT1lLnZpZXdFeHRlbnQscj1lLmRvbURpbWVuc2lvbixvPWUueFNjYWxlLGE9dygpO2IoMSksTXQoInJpZ2h0IixvLmZvcndhcmQoaS54LFNuKDQsRE5lLHIud2lkdGgpLGEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKSsicHgiKSxfKCJuZ0NsYXNzIixTbig2LElOZSwhKG51bGw9PWEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmR8fCFhLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApKSksYigxKSxfKCJuZ0lmIixudWxsPT1hLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kP251bGw6YS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKX19ZnVuY3Rpb24gUk5lKG4sdCl7MSZuJiZTKDAsQU5lLDMsOCwibmctY29udGFpbmVyIiwyNCksMiZuJiZfKCJuZ0lmIix3KCkuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbil9ZnVuY3Rpb24ga05lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO1R0KDApLGgoMSwic2NhbGFyLWNhcmQtZm9iLWNvbnRyb2xsZXIiLDQzKSxEKCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS5vbkZvYlJlbW92ZWQoKSl9KSxnKCksRHQoKX1pZigyJm4pe2xldCBlPXcoKSxpPWUuaW50ZXJhY3Rpb25TdGF0ZSxyPWUueFNjYWxlLG89ZS52aWV3RXh0ZW50LGE9ZS5kb21EaW1lbnNpb24scz13KCk7YigxKSxfKCJkaXNhYmxlSW50ZXJhY3Rpb24iLCJOT05FIiE9PWkpKCJ0aW1lU2VsZWN0aW9uIixzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pKCJzY2FsZSIscikoIm1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kIixvLngpKCJtaW5NYXhTdGVwIixzLm1pbk1heFN0ZXApKCJheGlzU2l6ZSIsYS53aWR0aCl9fWZ1bmN0aW9uIFBOZShuLHQpezEmbiYmUygwLGtOZSwyLDYsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmXygibmdJZiIsdygpLnNob3dGb2JDb250cm9sbGVyKCkpfXZhciBpbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5kaWFsb2c9aSx0aGlzLkRhdGFMb2FkU3RhdGU9RGUsdGhpcy5SZW5kZXJlclR5cGU9WmksdGhpcy5TY2FsZVR5cGU9aXIsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBMLHRoaXMub25QaW5DbGlja2VkPW5ldyBMLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgTCx0aGlzLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZD1uZXcgTCx0aGlzLm9uRGF0YVRhYmxlU29ydGluZz1uZXcgTCx0aGlzLmVkaXRDb2x1bW5IZWFkZXJzPW5ldyBMLHRoaXMub3BlblRhYmxlRWRpdE1lbnVUb01vZGU9bmV3IEwsdGhpcy5yZW1vdmVDb2x1bW49bmV3IEwsdGhpcy5vbkxpbmVDaGFydFpvb209bmV3IEwsdGhpcy5vbkNhcmRTdGF0ZUNoYW5nZWQ9bmV3IEwsdGhpcy5zb3J0aW5nSW5mbz17bmFtZToicnVuIixvcmRlcjpzby5BU0NFTkRJTkd9LHRoaXMueVNjYWxlVHlwZT1pci5MSU5FQVIsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMucmVsYXRpdmVYRm9ybWF0dGVyPUEwLHRoaXMudmFsdWVGb3JtYXR0ZXI9Y3AsdGhpcy5zdGVwRm9ybWF0dGVyPUkwfXRvZ2dsZVlTY2FsZVR5cGUoKXt0aGlzLnlTY2FsZVR5cGU9dGhpcy55U2NhbGVUeXBlPT09aXIuTElORUFSP2lyLkxPRzEwOmlyLkxJTkVBUn1zb3J0RGF0YUJ5KGUpe3RoaXMuc29ydGluZ0luZm89ZSx0aGlzLm9uRGF0YVRhYmxlU29ydGluZy5lbWl0KGUpfXJlc2V0RG9tYWluKCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LnZpZXdCb3hSZXNldCgpfXRyYWNrQnlUb29sdGlwRGF0dW0oZSxpKXtyZXR1cm4gaS5pZH1nZXRDdXN0b21YRm9ybWF0dGVyKCl7c3dpdGNoKHRoaXMueEF4aXNUeXBlKXtjYXNlIFBpLlJFTEFUSVZFOnJldHVybiBBMDtjYXNlIFBpLlNURVA6cmV0dXJuIGszO2RlZmF1bHQ6cmV0dXJufX1nZXRDdXJzb3JBd2FyZVRvb2x0aXBEYXRhKGUsaSxyKXtsZXQgbz1lLm1hcChsPT4oey4uLmwsbWV0YWRhdGE6ey4uLmwubWV0YWRhdGEsY2xvc2VzdDohMSxkaXN0VG9DdXJzb3JQaXhlbHM6TWF0aC5oeXBvdChsLmRvbVBvaW50Lngtci54LGwuZG9tUG9pbnQueS1yLnkpLGRpc3RUb0N1cnNvclg6bC5kYXRhUG9pbnQueC1pLngsZGlzdFRvQ3Vyc29yWTpsLmRhdGFQb2ludC55LWkueX19KSksYT0xLzAscz0wO2ZvcihsZXQgbD0wO2w8by5sZW5ndGg7bCsrKWE+b1tsXS5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMmJihhPW9bbF0ubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzLHM9bCk7c3dpdGNoKG8ubGVuZ3RoJiYob1tzXS5tZXRhZGF0YS5jbG9zZXN0PSEwKSx0aGlzLnRvb2x0aXBTb3J0KXtjYXNlIGFvLkFTQ0VORElORzpyZXR1cm4gby5zb3J0KChsLGMpPT5sLmRhdGFQb2ludC55LWMuZGF0YVBvaW50LnkpO2Nhc2UgYW8uREVTQ0VORElORzpyZXR1cm4gby5zb3J0KChsLGMpPT5jLmRhdGFQb2ludC55LWwuZGF0YVBvaW50LnkpO2Nhc2UgYW8uTkVBUkVTVDpyZXR1cm4gby5zb3J0KChsLGMpPT5sLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscy1jLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscyk7Y2FzZSBhby5ORUFSRVNUX1k6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5tZXRhZGF0YS5kaXN0VG9DdXJzb3JZLWMubWV0YWRhdGEuZGlzdFRvQ3Vyc29yWSk7Y2FzZSBhby5ERUZBVUxUOmNhc2UgYW8uQUxQSEFCRVRJQ0FMOnJldHVybiBvLnNvcnQoKGwsYyk9PmwubWV0YWRhdGEuZGlzcGxheU5hbWU8Yy5tZXRhZGF0YS5kaXNwbGF5TmFtZT8tMTpsLm1ldGFkYXRhLmRpc3BsYXlOYW1lPmMubWV0YWRhdGEuZGlzcGxheU5hbWU/MTowKX19b3BlbkRhdGFEb3dubG9hZERpYWxvZygpe3RoaXMuZGlhbG9nLm9wZW4odGhpcy5EYXRhRG93bmxvYWRDb21wb25lbnQse2RhdGE6e2NhcmRJZDp0aGlzLmNhcmRJZH19KX1vbkZvYlJlbW92ZWQoKXt0aGlzLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZC5lbWl0KEdhLkZPQl9ERVNFTEVDVCl9c2hvd0RhdGFUYWJsZSgpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PVBpLlNURVAmJnRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbn1zaG93Rm9iQ29udHJvbGxlcigpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PVBpLlNURVAmJnRoaXMubWluTWF4U3RlcH1jYW5FeHBhbmRUYWJsZSgpe3JldHVybiB0aGlzLmRhdGFTZXJpZXMuZmlsdGVyKGk9PnFTKGksdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubGVuZ3RoPjN9c2hvdWxkRXhwYW5kVGFibGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLmRhdGFUYWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHR8fCF0aGlzLmNhcmRTdGF0ZT8udGFibGVFeHBhbmRlZCl9dG9nZ2xlVGFibGVFeHBhbmRlZCgpe3RoaXMub25DYXJkU3RhdGVDaGFuZ2VkLmVtaXQoey4uLnRoaXMuY2FyZFN0YXRlLHRhYmxlRXhwYW5kZWQ6dGhpcy5zaG91bGRFeHBhbmRUYWJsZSgpfSksdGhpcy5kYXRhVGFibGVDb250YWluZXImJih0aGlzLmRhdGFUYWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodD0iIil9b3BlblRhYmxlRWRpdE1lbnUoKXt0aGlzLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlLmVtaXQodGhpcy5yYW5nZUVuYWJsZWQ/bG8uUkFOR0U6bG8uU0lOR0xFKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhiZSksQyhMbCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihZZShDXyw1KSxZZShtTmUsNSkpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkubGluZUNoYXJ0PXIuZmlyc3QpLHdlKHI9U2UoKSkmJihpLmRhdGFUYWJsZUNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGNoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGNhcmRTdGF0ZToiY2FyZFN0YXRlIixEYXRhRG93bmxvYWRDb21wb25lbnQ6IkRhdGFEb3dubG9hZENvbXBvbmVudCIsZGF0YVNlcmllczoiZGF0YVNlcmllcyIsaWdub3JlT3V0bGllcnM6Imlnbm9yZU91dGxpZXJzIixpc0NhcmRWaXNpYmxlOiJpc0NhcmRWaXNpYmxlIixpc1Bpbm5lZDoiaXNQaW5uZWQiLGxvYWRTdGF0ZToibG9hZFN0YXRlIixzaG93RnVsbFdpZHRoOiJzaG93RnVsbFdpZHRoIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIix0YWc6InRhZyIsdGl0bGU6InRpdGxlIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLHhBeGlzVHlwZToieEF4aXNUeXBlIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLGZvcmNlU3ZnOiJmb3JjZVN2ZyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uOiJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixtaW5NYXhTdGVwOiJtaW5NYXhTdGVwIix1c2VyVmlld0JveDoidXNlclZpZXdCb3giLGNvbHVtbkhlYWRlcnM6ImNvbHVtbkhlYWRlcnMiLHJhbmdlRW5hYmxlZDoicmFuZ2VFbmFibGVkIixocGFyYW1zRW5hYmxlZDoiaHBhcmFtc0VuYWJsZWQifSxvdXRwdXRzOntvbkZ1bGxTaXplVG9nZ2xlOiJvbkZ1bGxTaXplVG9nZ2xlIixvblBpbkNsaWNrZWQ6Im9uUGluQ2xpY2tlZCIsb25UaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25TdGVwU2VsZWN0b3JUb2dnbGVkOiJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLG9uRGF0YVRhYmxlU29ydGluZzoib25EYXRhVGFibGVTb3J0aW5nIixlZGl0Q29sdW1uSGVhZGVyczoiZWRpdENvbHVtbkhlYWRlcnMiLG9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlOiJvcGVuVGFibGVFZGl0TWVudVRvTW9kZSIscmVtb3ZlQ29sdW1uOiJyZW1vdmVDb2x1bW4iLG9uTGluZUNoYXJ0Wm9vbToib25MaW5lQ2hhcnRab29tIixvbkNhcmRTdGF0ZUNoYW5nZWQ6Im9uQ2FyZFN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjM4LHZhcnM6MjksY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxpLHIsbyxhO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCByZXNldHMgbGluZSBjaGFydCBkb21haW4gdG8gdGhlIGRhdGHikJ9lNjhhNTUyOTQxYWI0MjdhOTllNzQzN2UwODQ0M2YzMGFjNzFjY2Q24pCfMzgzMDY0NjUyMTA1ODI2ODU1ODpGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGFgLGU9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxpPSRsb2NhbGl6ZWA6QSBidXR0b24gb24gbGluZSBjaGFydCB0aGF0IHRvZ2dsZXMgZnVsbCBzaXplIG1vZGUu4pCfZmM4Zjc2N2QwYjlmOTMwMTg3YTFiYWUzNDQ3N2FkMjg3MzZlY2UzM+KQnzkxNTcyMTU2MzYzODkyNjU5NzpUb2dnbGUgZnVsbCBzaXplIG1vZGVgLHI9JGxvY2FsaXplYDpBbiBvdmVyZmxvdyBtZW51IGJ1dHRvbiB0aGF0IG9wZW5zIG1vcmUgbGluZSBjaGFydCBvcHRpb25z4pCfYjI2MGZhYjk0NmEzMDc3Y2UyMGZkMjhlMzM2OTc5ZjU4NjcyMGU4ZOKQnzg3ODA1Mzc0MDIxMDMzNjQzNTpNb3JlIGxpbmUgY2hhcnQgb3B0aW9uc2Asbz0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgdG9nZ2xlcyBsb2cgc2NhbGUgb24geS1heGlzIG9uIGEgbGluZSBjaGFydOKQn2ZlOTFmOTZhYjliM2JhY2E1YTQ4OTEzZjJiMGZhZTg0NDgzZDkzZTPikJ8zMzc0NjQ1NjIwNjM4ODgzOTI2OlRvZ2dsZSBZLWF4aXMgbG9nIHNjYWxlIG9uIGxpbmUgY2hhcnRgLGE9JGxvY2FsaXplYDpFeHBhbmQgVGFibGXikJ85ZTU5ZmY1MGJmY2I0NzkyNzJlMmIxMDNlMWU5YjExNTE4ZTJlNGNl4pCfNjM3NDg4MDM0MTM5MzAyMDYxMDpFeHBhbmQgVGFibGVgLFtbMSwiYWx3YXlzLXZpc2libGUiXSxbMSwiaGVhZGluZyJdLFsxLCJuYW1lIl0sWzEsInRhZyIsMywidGl0bGUiLCJ2YWx1ZSJdLFszLCJpc0NsaXBwZWQiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiZGlzYWJsZWQiLCJ0aXRsZSIsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3Nfb3ZlcnNjYW5fMjRweCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwxLCJwaW4tYnV0dG9uIiwzLCJjbGljayJdLFszLCJzdmdJY29uIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixpLCJ0aXRsZSIsIlRvZ2dsZSBmdWxsIHNpemUgbW9kZSIsMywiY2xpY2siXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHIsInRpdGxlIiwiTW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnMiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIl0sWyJzdmdJY29uIiwibW9yZV92ZXJ0XzI0cHgiXSxbIm1lbnUiLCJtYXRNZW51Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsbywzLCJjbGljayJdLFsic3ZnSWNvbiIsImxpbmVfd2VpZ2h0XzI0cHgiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIiwiT3BlbiBkaWFsb2cgdG8gZG93bmxvYWQgZGF0YSIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJnZXRfYXBwXzI0cHgiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIiwiT3BlbiBtZW51IHRvIGVkaXQgZGF0YSB0YWJsZSBjb2x1bW5zIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJjaGFydC1jb250YWluZXIiXSxbImNoYXJ0Q29udGFpbmVyIiwiIl0sWyJkaWFtZXRlciIsIjE4Iiw0LCJuZ0lmIl0sWzMsImRpc2FibGVVcGRhdGUiLCJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLCJzZXJpZXNEYXRhIiwic2VyaWVzTWV0YWRhdGFNYXAiLCJ4U2NhbGVUeXBlIiwieVNjYWxlVHlwZSIsImN1c3RvbVhGb3JtYXR0ZXIiLCJpZ25vcmVZT3V0bGllcnMiLCJ0b29sdGlwVGVtcGxhdGUiLCJ1c2VEYXJrTW9kZSIsInVzZXJWaWV3Qm94IiwiY3VzdG9tVmlzVGVtcGxhdGUiLCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsIm9uVmlld0JveE92ZXJyaWRkZW4iLCJ2aWV3Qm94Q2hhbmdlZCJdLFsidG9vbHRpcCIsIiJdLFs0LCJuZ0lmIl0sWyJsaW5lQ2hhcnRDdXN0b21WaXMiLCIiXSxbImxpbmVDaGFydEN1c3RvbVhBeGlzVmlzIiwiIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSB0byBlZGl0IGRhdGEgdGFibGUgY29sdW1ucyIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJlZGl0XzI0cHgiXSxbImRpYW1ldGVyIiwiMTgiXSxbMSwidG9vbHRpcCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMywiYWxpYXMiXSxbMywibmdDbGFzcyJdLFsiZGF0YVRhYmxlQ29udGFpbmVyIiwiIl0sWzMsImNoYXJ0TWV0YWRhdGFNYXAiLCJkYXRhU2VyaWVzIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImNvbHVtbkhlYWRlcnMiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsImhwYXJhbXNFbmFibGVkIiwic29ydERhdGFCeSIsImVkaXRDb2x1bW5IZWFkZXJzIiwicmVtb3ZlQ29sdW1uIl0sWzEsImJvdHRvbS1hcmVhIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJjbGFzcyIsImV4cGFuZC1idXR0b24iLCJhcmlhLWxhYmVsIixhLDMsInRpdGxlIiwiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGEsMSwiZXhwYW5kLWJ1dHRvbiIsMywidGl0bGUiLCJjbGljayJdLFszLCJuZ0NsYXNzIiwibGVmdCIsNCwibmdJZiJdLFszLCJkaXNhYmxlSW50ZXJhY3Rpb24iLCJ0aW1lU2VsZWN0aW9uIiwic2NhbGUiLCJtaW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCIsIm1pbk1heFN0ZXAiLCJheGlzU2l6ZSIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsInNwYW4iLDIpLFAoMywidGItdHJ1bmNhdGVkLXBhdGgiLDMpKDQsInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyIsNCksZygpLGgoNSwic3BhbiIsNSkoNiwiYnV0dG9uIiw2KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5yZXNldERvbWFpbigpfSksRyg3LCJhc3luYyIpLEcoOCwiYXN5bmMiKSxQKDksIm1hdC1pY29uIiw3KSxnKCksaCgxMCwiYnV0dG9uIiw4KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxQKDExLCJtYXQtaWNvbiIsOSksZygpLGgoMTIsImJ1dHRvbiIsMTApLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uRnVsbFNpemVUb2dnbGUuZW1pdCgpfSksUCgxMywibWF0LWljb24iLDkpLGcoKSxoKDE0LCJidXR0b24iLDExKSxQKDE1LCJtYXQtaWNvbiIsMTIpLGcoKSxoKDE2LCJtYXQtbWVudSIsbnVsbCwxMykoMTgsImJ1dHRvbiIsMTQpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZVlTY2FsZVR5cGUoKX0pLFAoMTksIm1hdC1pY29uIiwxNSksaCgyMCwic3BhbiIpLFQoMjEsIlRvZ2dsZSBZLWF4aXMgbG9nIHNjYWxlIiksZygpKCksaCgyMiwiYnV0dG9uIiwxNiksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub3BlbkRhdGFEb3dubG9hZERpYWxvZygpfSksUCgyMywibWF0LWljb24iLDE3KSxoKDI0LCJzcGFuIiksVCgyNSwiRG93bmxvYWQgZGF0YSIpLGcoKSgpLFMoMjYsaE5lLDQsMCwiYnV0dG9uIiwxOCksZygpKCkoKSxoKDI3LCJkaXYiLDE5LDIwKSxTKDI5LGdOZSwxLDAsIm1hdC1zcGlubmVyIiwyMSksaCgzMCwibGluZS1jaGFydCIsMjIpLEQoIm9uVmlld0JveE92ZXJyaWRkZW4iLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlzVmlld0JveE92ZXJyaWRkZW49b30pKCJ2aWV3Qm94Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25MaW5lQ2hhcnRab29tLmVtaXQobyl9KSxnKCksUygzMSx4TmUsMTcsMywibmctdGVtcGxhdGUiLG51bGwsMjMsWnQpLGcoKSgpLFMoMzMsd05lLDYsMTIsIm5nLWNvbnRhaW5lciIsMjQpLFMoMzQsUk5lLDEsMSwibmctdGVtcGxhdGUiLG51bGwsMjUsWnQpLFMoMzYsUE5lLDEsMSwibmctdGVtcGxhdGUiLG51bGwsMjYsWnQpKSwyJmUpe2xldCByPXR0KDE3KSxvPXR0KDMyKSxhPXR0KDM1KSxzPXR0KDM3KTtiKDMpLEppKCJ0aXRsZSIsaS50YWcpLEppKCJ2YWx1ZSIsaS50aXRsZSksYigxKSxfKCJpc0NsaXBwZWQiLGkubGlua2VkVGltZVNlbGVjdGlvbiYmaS5saW5rZWRUaW1lU2VsZWN0aW9uLmNsaXBwZWQpLGIoMiksXygiZGlzYWJsZWQiLCFpLmxpbmVDaGFydHx8IVcoNywyNSxpLmxpbmVDaGFydC5nZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCkpKSgidGl0bGUiLGkubGluZUNoYXJ0JiZXKDgsMjcsaS5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKT8iTGluZSBjaGFydCBpcyBhbHJlYWR5IGZpdHRlZCB0byBkYXRhLiBXaGVuIGRhdGEgdXBkYXRlcywgdGhlIGxpbmUgY2hhcnQgd2lsbCBhdXRvIGZpdCB0byBpdHMgZG9tYWluLiI6IkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YSIpLGIoNCksUGUoInRpdGxlIixpLmlzUGlubmVkPyJVbnBpbiBjYXJkIjoiUGluIGNhcmQiKSxiKDEpLF8oInN2Z0ljb24iLGkuaXNQaW5uZWQ/ImtlZXBfMjRweCI6ImtlZXBfb3V0bGluZV8yNHB4IiksYigyKSxfKCJzdmdJY29uIixpLnNob3dGdWxsV2lkdGg/ImZ1bGxzY3JlZW5fZXhpdF8yNHB4IjoiZnVsbHNjcmVlbl8yNHB4IiksYigxKSxfKCJtYXRNZW51VHJpZ2dlckZvciIsciksYigxMiksXygibmdJZiIsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCksYigzKSxfKCJuZ0lmIixpLmxvYWRTdGF0ZT09PWkuRGF0YUxvYWRTdGF0ZS5MT0FESU5HKSxiKDEpLF8oImRpc2FibGVVcGRhdGUiLCFpLmlzQ2FyZFZpc2libGUpKCJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLGkuZm9yY2VTdmc/aS5SZW5kZXJlclR5cGUuU1ZHOmkuUmVuZGVyZXJUeXBlLldFQkdMKSgic2VyaWVzRGF0YSIsaS5kYXRhU2VyaWVzKSgic2VyaWVzTWV0YWRhdGFNYXAiLGkuY2hhcnRNZXRhZGF0YU1hcCkoInhTY2FsZVR5cGUiLGkueFNjYWxlVHlwZSkoInlTY2FsZVR5cGUiLGkueVNjYWxlVHlwZSkoImN1c3RvbVhGb3JtYXR0ZXIiLGkuZ2V0Q3VzdG9tWEZvcm1hdHRlcigpKSgiaWdub3JlWU91dGxpZXJzIixpLmlnbm9yZU91dGxpZXJzKSgidG9vbHRpcFRlbXBsYXRlIixvKSgidXNlRGFya01vZGUiLGkudXNlRGFya01vZGUpKCJ1c2VyVmlld0JveCIsaS51c2VyVmlld0JveCkoImN1c3RvbVZpc1RlbXBsYXRlIixhKSgiY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUiLHMpLGIoMyksXygibmdJZiIsaS5zaG93RGF0YVRhYmxlKCkpfX0sZGVwZW5kZW5jaWVzOltibixkbixGZSx0cCxDXyxGbixEbixrYyxZdSxQYyx6ciwkdGUscVYsczAsbDAsbHQsSWhdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH1bX25naG9zdC0lQ09NUCVdOmhhcyguZXhwYW5kLWJ1dHRvbil7cGFkZGluZzo0cHggMTZweCAwfS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWJhc2lzOjI5OHB4fS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDpoYXMoLmV4cGFuZC1idXR0b24pKXtmbGV4LWdyb3c6MX0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTRweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAubmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtnYXA6NXB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIGF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgdmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEuMmVtO2xpbmUtaGVpZ2h0OjB9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5waW4tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MThweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47cmVzaXplOnZlcnRpY2FsfS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgbWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjExcHg7dG9wOjExcHh9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXNwYWNpbmc6NHB4O2ZvbnQtc2l6ZToxM3B4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xvc2VzdFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojZmZmO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm91dC1vZi1zZWxlY3RlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZX0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodC13aWR0aDoycHg7bWFyZ2luLWxlZnQ6LTFweH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnQucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuZW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdC13aWR0aDoycHg7bWFyZ2luLXJpZ2h0Oi0xcHg7cmlnaHQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5kYXRhLXRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMHB4O21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDo1MGVtO292ZXJmbG93OmF1dG87cmVzaXplOnZlcnRpY2FsfS5kYXRhLXRhYmxlLWNvbnRhaW5lci5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmF1dG99LmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0uYm90dG9tLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBGTmUobix0KXtyZXR1cm4gbi5sZW5ndGg9PT10Lmxlbmd0aCYmbi5ldmVyeSgoZSxpKT0+e2xldCByPXRbaV0sbz1lLnBvaW50cyxhPXIucG9pbnRzO3JldHVybiBlLnJ1bklkPT09ci5ydW5JZCYmby5sZW5ndGg9PT1hLmxlbmd0aCYmby5ldmVyeSgocyxsKT0+e2xldCBjPWFbbF07cmV0dXJuIHMueD09PWMueCYmcy55PT09Yy55fSl9KX12YXIgcm5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50PSRRLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBMLHRoaXMuaXNWaXNpYmxlPSExLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KEVsKSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdCh3ZiksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoTWYpLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChEbCksdGhpcy5mb3JjZVN2ZyQ9dGhpcy5zdG9yZS5zZWxlY3QoRUYpLHRoaXMuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGZTKSx0aGlzLnhTY2FsZVR5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KERsKS5waXBlKFUoaT0+e3N3aXRjaChpKXtjYXNlIFBpLlNURVA6Y2FzZSBQaS5SRUxBVElWRTpyZXR1cm4gaXIuTElORUFSO2Nhc2UgUGkuV0FMTF9USU1FOnJldHVybiBpci5USU1FO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHhBeGlzVHlwZSBmb3IgbGluZSBjaGFydC4gJHtpfWApfX0pKSx0aGlzLnNjYWxhclNtb290aGluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoZ2QpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoZ2QpLnBpcGUoVShpPT5pPjApKSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KGpzKS5waXBlKFUoaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgQWV9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzVmlzaWJsZT1lfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PXFuLlNDQUxBUlN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goS2coe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFVzLHRoaXMuY2FyZElkKS5waXBlKFZlKGw9PiEhbCYmdGhpcy5pc1NjYWxhckNhcmRNZXRhZGF0YShsKSksVShsPT5sKSk7ZnVuY3Rpb24gYShsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsbF0pfWxldCBzPXRoaXMuc3RvcmUuc2VsZWN0KEV1LHRoaXMuY2FyZElkKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksVmUobD0+Qm9vbGVhbihsKSksVShsPT5sKSxFYSgxKSkucGlwZShWaSh0aGlzLnN0b3JlLnNlbGVjdChEbCkpLFUoKFtsLGNdKT0+T2JqZWN0LmtleXMobCkubWFwKHA9Pih7cnVuSWQ6cCxwb2ludHM6dGhpcy5zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGxbcF0sYyl9KSkpLHVpKEZOZSkpLnBpcGUoVmkodGhpcy5zdG9yZS5zZWxlY3QobDEpKSxvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFUoKFtsLGNdKT0+Yz9mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2Ygbil7bGV0IGk9W10scj1OdW1iZXIuaXNGaW5pdGUoZS5wb2ludHNbMF0/LngpP2UucG9pbnRzWzBdLng6LTEvMCxvPVtdO2ZvcihsZXQgYSBvZiBlLnBvaW50cylOdW1iZXIuaXNGaW5pdGUoYS54KT8oYS54PHImJihpLnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtlLnJ1bklkLGkubGVuZ3RoXSkscnVuSWQ6ZS5ydW5JZCxwb2ludHM6b30pLG89W10pLG8ucHVzaChhKSxyPWEueCk6by5wdXNoKGEpO2kucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW2UucnVuSWQsaS5sZW5ndGhdKSxydW5JZDplLnJ1bklkLHBvaW50czpvfSk7Zm9yKGxldCBhPTA7YTxpLmxlbmd0aDthKyspdC5wdXNoKHsuLi5pW2FdLHBhcnRpdGlvbkluZGV4OmEscGFydGl0aW9uU2l6ZTppLmxlbmd0aH0pfXJldHVybiB0fShsKTpsLm1hcChkPT4oey4uLmQsc2VyaWVzSWQ6ZC5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSksVShsPT5sLm1hcChjPT57bGV0IGQ9Yy5wb2ludHNbMF0/LndhbGxUaW1lO3JldHVybnsuLi5jLHBvaW50czpjLnBvaW50cy5tYXAodT0+KHsuLi51LHJlbGF0aXZlVGltZUluTXM6dS53YWxsVGltZS1kfSkpfX0pKSxWaSh0aGlzLnN0b3JlLnNlbGVjdChEbCkpLFUoKFtsLGNdKT0+bC5tYXAoZD0+KHsuLi5kLHBvaW50czpkLnBvaW50cy5tYXAodT0+e2xldCBwO3N3aXRjaChjKXtjYXNlIFBpLlJFTEFUSVZFOnA9dS5yZWxhdGl2ZVRpbWVJbk1zO2JyZWFrO2Nhc2UgUGkuV0FMTF9USU1FOnA9dS53YWxsVGltZTticmVhaztkZWZhdWx0OnA9dS5zdGVwfXJldHVybnsuLi51LHg6cH19KX0pKSksRWEoMSkpO3RoaXMudXNlclZpZXdCb3gkPXRoaXMuc3RvcmUuc2VsZWN0KCRGLHRoaXMuY2FyZElkKSx0aGlzLm1pbk1heFN0ZXBzJD11bihbdGhpcy5zdG9yZS5zZWxlY3QoWlcsdGhpcy5jYXJkSWQpLHRoaXMuc3RvcmUuc2VsZWN0KEtXLHRoaXMuY2FyZElkKV0pLnBpcGUoVSgoW2wsY10pPT57aWYobCYmYylyZXR1cm57bWluU3RlcDpNYXRoLm1heChsPy5taW5TdGVwLGM/Lm1pblN0ZXApLG1heFN0ZXA6TWF0aC5taW4obD8ubWF4U3RlcCxjPy5tYXhTdGVwKX19KSksdGhpcy5kYXRhU2VyaWVzJD1zLnBpcGUoVmkodGhpcy5zdG9yZS5zZWxlY3QoZ2QpKSx5aSgoW2wsY10pPT57bGV0IGQ9bC5tYXAoKHtzZXJpZXNJZDp1LHBvaW50czpwfSk9Pih7aWQ6dSxwb2ludHM6cH0pKTtyZXR1cm4gYzw9MD9xdChkKTpubyhhc3luYyBmdW5jdGlvbihuLHQpe051bWJlci5pc0Zpbml0ZSh0KXx8KHQ9MCksdD1NYXRoLm1heCgwLE1hdGgubWluKHQsMSkpO2xldCBlPVtdO2ZvcihsZXQgaSBvZiBuKXtsZXQgcj1pLnBvaW50c1swXT8ueTtpZihpLnBvaW50cy5ldmVyeShjPT5jLnk9PXIpKXtlLnB1c2goaSk7Y29udGludWV9bGV0IGE9aS5wb2ludHMubGVuZ3RoPjA/MDpOYU4scz0wLGw9aS5wb2ludHMubWFwKGM9PntsZXQgZD1jLnk7aWYoTnVtYmVyLmlzRmluaXRlKGQpKXthPWEqdCsoMS10KSpkLHMrKztsZXQgdT0xPT09dD8xOjEtTWF0aC5wb3codCxzKTtyZXR1cm57eDpjLngseTphL3V9fXJldHVybnt4OmMueCx5OmR9fSk7ZS5wdXNoKHtpZDppLmlkLHBvaW50czpsfSl9cmV0dXJuIGV9KGQsYykpLnBpcGUoVSh1PT57bGV0IHA9ZC5tYXAoKGYsbSk9Pih7aWQ6YShmLmlkKSxwb2ludHM6dVttXS5wb2ludHMubWFwKCh7eTp5fSxNKT0+KHsuLi5mLnBvaW50c1tNXSx5Onl9KSl9KSk7cmV0dXJuWy4uLmQsLi4ucF19KSl9KSxObihbXSkpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQ9dW4oW3RoaXMubWluTWF4U3RlcHMkLHRoaXMuc3RvcmUuc2VsZWN0KER1KSx0aGlzLnN0b3JlLnNlbGVjdChBdSksdGhpcy5zdG9yZS5zZWxlY3QoRGwpXSkucGlwZShVKChbbCxjLGQsdV0pPT5sJiZjJiZ1PT09UGkuU1RFUCYmZD8kaChkLGwubWluU3RlcCxsLm1heFN0ZXApOm51bGwpKSx0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KEpXLHRoaXMuY2FyZElkKSx0aGlzLmNvbHVtbkhlYWRlcnMkPXRoaXMuc3RvcmUuc2VsZWN0KGcxKHRoaXMuY2FyZElkKSksdGhpcy5jaGFydE1ldGFkYXRhTWFwJD1zLnBpcGUoeWkobD0+dW4obC5tYXAoYz0+dGhpcy5nZXRSdW5EaXNwbGF5TmFtZUFuZEFsaWFzKGMucnVuSWQpLnBpcGUoVShkPT4oey4uLmMsLi4uZH0pKSkpKSksVmkodGhpcy5zdG9yZS5zZWxlY3QoUnUpLHRoaXMuc3RvcmUuc2VsZWN0KGhmKSx0aGlzLnN0b3JlLnNlbGVjdChqUSksdGhpcy5zdG9yZS5zZWxlY3Qoa3UpLHRoaXMuc3RvcmUuc2VsZWN0KGdkKSksQ3IoMCksVSgoW2wsYyxkLHUscCxmXSk9PntsZXQgbT17fSx5PWY+MDtmb3IobGV0IE0gb2YgbCl7bGV0e3Nlcmllc0lkOnYscnVuSWQ6eCxkaXNwbGF5TmFtZTpSLGFsaWFzOkEscGFydGl0aW9uSW5kZXg6SCxwYXJ0aXRpb25TaXplOnRlfT1NO21bdl09e3R5cGU6cjAuT1JJR0lOQUwsaWQ6dixhbGlhczpBLGRpc3BsYXlOYW1lOnRlPjE/YCR7Un06ICR7SH1gOlIsdmlzaWJsZTpCb29sZWFuKGMmJmMuZ2V0KHgpJiYoIWR8fHUuaGFzKHgpKSksY29sb3I6cFt4XT8/IiNmZmYiLGF1eDohMSxvcGFjaXR5OjF9fWlmKCF5KXJldHVybiBtO2ZvcihsZXRbTSx2XW9mIE9iamVjdC5lbnRyaWVzKG0pKXtsZXQgeD1hKE0pO21beF09ey4uLnYsaWQ6eCx0eXBlOnIwLkRFUklWRUQsYXV4OiExLG9yaWdpbmFsU2VyaWVzSWQ6TX0sdi5hdXg9ITAsdi5vcGFjaXR5PS4yNX1yZXR1cm4gbX0pLE5uKHt9KSksdGhpcy5sb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KGhkLHRoaXMuY2FyZElkKSx0aGlzLnRhZyQ9aS5waXBlKFUobD0+bC50YWcpKSx0aGlzLmNhcmRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoanMpLnBpcGUoVShsPT5sW3RoaXMuY2FyZElkXXx8e30pKSx0aGlzLnRpdGxlJD10aGlzLnRhZyQucGlwZShVKGw9PmEwKGwsdGhpcy5ncm91cE5hbWUpKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoVHUsdGhpcy5jYXJkSWQpLHRoaXMucmFuZ2VFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChoMSx0aGlzLmNhcmRJZCksdGhpcy5ocGFyYW1zRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoaGYpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1nZXRSdW5EaXNwbGF5TmFtZUFuZEFsaWFzKGUpe3JldHVybiB1bihbdGhpcy5zdG9yZS5zZWxlY3QoYjEse3J1bklkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChCcyksdGhpcy5zdG9yZS5zZWxlY3QodjEse3J1bklkOmV9KV0pLnBpcGUoVSgoW2kscixvXSk9PntsZXQgYT1udWxsIT09aT9yW2ldPz9udWxsOm51bGw7cmV0dXJue2Rpc3BsYXlOYW1lOm98fGE/bz8ubmFtZT8/Ii4uLiI6ZSxhbGlhczphfX0pKX1zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGUsaSl7bGV0IHI9aT09PVBpLlNURVA7cmV0dXJuIGUubWFwKG89PntsZXQgYT0xZTMqby53YWxsVGltZTtyZXR1cm57Li4ubyx4OnI/by5zdGVwOmEseTpvLnZhbHVlLHdhbGxUaW1lOmEscmVsYXRpdmVUaW1lSW5NczowfX0pfW9uRGF0YVRhYmxlU29ydGluZyhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxRKGUpKX1vbkNhcmRTdGF0ZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh5VCh7Y2FyZElkOnRoaXMuY2FyZElkLHNldHRpbmdzOmV9KSl9b25UaW1lU2VsZWN0aW9uQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFlmKHsuLi5lLGNhcmRJZDp0aGlzLmNhcmRJZH0pKX1vblN0ZXBTZWxlY3RvclRvZ2dsZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChEZCh7YWZmb3JkYW5jZTplLGNhcmRJZDp0aGlzLmNhcmRJZH0pKX1vbkxpbmVDaGFydFpvb20oZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChNdih7dXNlclZpZXdCb3g6ZSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSl9ZWRpdENvbHVtbkhlYWRlcnMoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChlMChlKSl9b3BlblRhYmxlRWRpdE1lbnVUb01vZGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChwVCh7bW9kZTplfSkpfW9uUmVtb3ZlQ29sdW1uKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2godDAoe2hlYWRlcjplLGNhcmRJZDp0aGlzLmNhcmRJZH0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkIl1dLGlucHV0czp7RGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGNhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSJ9LG91dHB1dHM6e3BpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MjQsdmFyczo3Mixjb25zdHM6W1sib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsMywiY2FyZElkIiwiY2hhcnRNZXRhZGF0YU1hcCIsIkRhdGFEb3dubG9hZENvbXBvbmVudCIsImRhdGFTZXJpZXMiLCJpZ25vcmVPdXRsaWVycyIsImlzQ2FyZFZpc2libGUiLCJpc1Bpbm5lZCIsImxvYWRTdGF0ZSIsInNob3dGdWxsV2lkdGgiLCJzbW9vdGhpbmdFbmFibGVkIiwidGFnIiwidGl0bGUiLCJjYXJkU3RhdGUiLCJ0b29sdGlwU29ydCIsInhBeGlzVHlwZSIsInhTY2FsZVR5cGUiLCJ1c2VEYXJrTW9kZSIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIiwiZm9yY2VTdmciLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsIm1pbk1heFN0ZXAiLCJ1c2VyVmlld0JveCIsImNvbHVtbkhlYWRlcnMiLCJyYW5nZUVuYWJsZWQiLCJocGFyYW1zRW5hYmxlZCIsIm9uRnVsbFNpemVUb2dnbGUiLCJvblBpbkNsaWNrZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25TdGVwU2VsZWN0b3JUb2dnbGVkIiwib25EYXRhVGFibGVTb3J0aW5nIiwib25MaW5lQ2hhcnRab29tIiwiZWRpdENvbHVtbkhlYWRlcnMiLCJvbkNhcmRTdGF0ZUNoYW5nZWQiLCJvcGVuVGFibGVFZGl0TWVudVRvTW9kZSIsInJlbW92ZUNvbHVtbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwic2NhbGFyLWNhcmQtY29tcG9uZW50IiwwKSxEKCJvbkZ1bGxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uRnVsbFNpemVUb2dnbGUoKX0pKCJvblBpbkNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnBpblN0YXRlQ2hhbmdlZC5lbWl0KG8pfSkoIm9uVmlzaWJpbGl0eUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WaXNpYmlsaXR5Q2hhbmdlKG8pfSkoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQobyl9KSgib25TdGVwU2VsZWN0b3JUb2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN0ZXBTZWxlY3RvclRvZ2dsZWQobyl9KSgib25EYXRhVGFibGVTb3J0aW5nIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkRhdGFUYWJsZVNvcnRpbmcobyl9KSgib25MaW5lQ2hhcnRab29tIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkxpbmVDaGFydFpvb20obyl9KSgiZWRpdENvbHVtbkhlYWRlcnMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmVkaXRDb2x1bW5IZWFkZXJzKG8pfSkoIm9uQ2FyZFN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DYXJkU3RhdGVDaGFuZ2VkKG8pfSkoIm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vcGVuVGFibGVFZGl0TWVudVRvTW9kZShvKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVtb3ZlQ29sdW1uKG8pfSksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSxHKDMsImFzeW5jIiksRyg0LCJhc3luYyIpLEcoNSwiYXN5bmMiKSxHKDYsImFzeW5jIiksRyg3LCJhc3luYyIpLEcoOCwiYXN5bmMiKSxHKDksImFzeW5jIiksRygxMCwiYXN5bmMiKSxHKDExLCJhc3luYyIpLEcoMTIsImFzeW5jIiksRygxMywiYXN5bmMiKSxHKDE0LCJhc3luYyIpLEcoMTUsImFzeW5jIiksRygxNiwiYXN5bmMiKSxHKDE3LCJhc3luYyIpLEcoMTgsImFzeW5jIiksRygxOSwiYXN5bmMiKSxHKDIwLCJhc3luYyIpLEcoMjEsImFzeW5jIiksRygyMiwiYXN5bmMiKSxHKDIzLCJhc3luYyIpLGcoKSksMiZlJiZfKCJjYXJkSWQiLGkuY2FyZElkKSgiY2hhcnRNZXRhZGF0YU1hcCIsVygxLDI2LGkuY2hhcnRNZXRhZGF0YU1hcCQpKSgiRGF0YURvd25sb2FkQ29tcG9uZW50IixpLkRhdGFEb3dubG9hZENvbXBvbmVudCkoImRhdGFTZXJpZXMiLFcoMiwyOCxpLmRhdGFTZXJpZXMkKSkoImlnbm9yZU91dGxpZXJzIixXKDMsMzAsaS5pZ25vcmVPdXRsaWVycyQpKSgiaXNDYXJkVmlzaWJsZSIsaS5pc1Zpc2libGUpKCJpc1Bpbm5lZCIsVyg0LDMyLGkuaXNQaW5uZWQkKSkoImxvYWRTdGF0ZSIsVyg1LDM0LGkubG9hZFN0YXRlJCkpKCJzaG93RnVsbFdpZHRoIixXKDYsMzYsaS5zaG93RnVsbFdpZHRoJCkpKCJzbW9vdGhpbmdFbmFibGVkIixXKDcsMzgsaS5zbW9vdGhpbmdFbmFibGVkJCkpKCJ0YWciLFcoOCw0MCxpLnRhZyQpKSgidGl0bGUiLFcoOSw0MixpLnRpdGxlJCkpKCJjYXJkU3RhdGUiLFcoMTAsNDQsaS5jYXJkU3RhdGUkKSkoInRvb2x0aXBTb3J0IixXKDExLDQ2LGkudG9vbHRpcFNvcnQkKSkoInhBeGlzVHlwZSIsVygxMiw0OCxpLnhBeGlzVHlwZSQpKSgieFNjYWxlVHlwZSIsVygxMyw1MCxpLnhTY2FsZVR5cGUkKSkoInVzZURhcmtNb2RlIixXKDE0LDUyLGkudXNlRGFya01vZGUkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFcoMTUsNTQsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpKCJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixXKDE2LDU2LGkuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQpKSgiZm9yY2VTdmciLFcoMTcsNTgsaS5mb3JjZVN2ZyQpKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLFcoMTgsNjAsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgibWluTWF4U3RlcCIsVygxOSw2MixpLm1pbk1heFN0ZXBzJCkpKCJ1c2VyVmlld0JveCIsVygyMCw2NCxpLnVzZXJWaWV3Qm94JCkpKCJjb2x1bW5IZWFkZXJzIixXKDIxLDY2LGkuY29sdW1uSGVhZGVycyQpKSgicmFuZ2VFbmFibGVkIixXKDIyLDY4LGkucmFuZ2VFbmFibGVkJCkpKCJocGFyYW1zRW5hYmxlZCIsVygyMyw3MCxpLmhwYXJhbXNFbmFibGVkJCkpfSxkZXBlbmRlbmNpZXM6W28wLGluZSxsdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBCTmUobix0LGUpe2xldCBpPVtdLHtsZWZ0OnIscmlnaHQ6b309dCxhPShvLXIpL2Uscz0wLGw9MDtmb3IobGV0IGM9MDtjPGU7YysrKXtsZXQgZD1yK2MqYSx1PWQrYSxwPWM9PT1lLTEsZj1sO2ZvcihsPTA7czxuLmxlbmd0aDspe2xldCBtPW5bc10seT1WTmUobSxkLHUsIXApO2lmKGYrPXkuY3VycixsKz15Lm5leHQsbS54K20uZHg+dSlicmVhaztzKyt9aS5wdXNoKHt4OmQsZHg6YSx5OmZ9KX1yZXR1cm4gaX1mdW5jdGlvbiBWTmUobix0LGUsaSl7bGV0IHI9bi54LG89bi54K24uZHg7aWYocj5lfHxvPHQpcmV0dXJue2N1cnI6MCxuZXh0OjB9O2lmKDA9PT1uLmR4KXJldHVybiBpJiZvPj1lP3tjdXJyOjAsbmV4dDpuLnl9OntjdXJyOm4ueSxuZXh0OjB9O2xldCBhPU1hdGgubWluKG8sZSktTWF0aC5tYXgocix0KTtyZXR1cm57Y3VycjpuLnkqYS9uLmR4LG5leHQ6MH19dmFyIEhOZT0xZTQsek5lPS4wMDEsVU5lPUpyKCIuMn5zIiksak5lPUpyKCIuNH5yIiksR05lPUpyKCIuMn5lIik7ZnVuY3Rpb24gYW5lKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49SE5lP1VOZShuKTp0PHpOZT9HTmUobik6ak5lKG4pfXZhciBXTmU9WyJtYWluIl0scU5lPVsieEF4aXMiXSxZTmU9WyJ5QXhpcyJdLFhOZT1bImNvbnRlbnQiXSxRTmU9WyJoaXN0b2dyYW1zIl07ZnVuY3Rpb24gWk5lKG4sdCl7aWYoMSZuJiYoVG4oKSxoKDAsImciKSgxLCJ0ZXh0IiksVCgyKSxnKCkoKSksMiZuKXtsZXQgZT13KCk7TXQoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeChlLnRvb2x0aXBEYXRhLnhBeGlzLnBvc2l0aW9uLDkpKSxiKDIpLHV0KGUudG9vbHRpcERhdGEueEF4aXMubGFiZWwpfX1mdW5jdGlvbiBLTmUobix0KXtpZigxJm4mJihUbigpLGgoMCwiZyIpKDEsInRleHQiKSxUKDIpLGcoKSgpKSwyJm4pe2xldCBlPXcoKTtNdCgidHJhbnNmb3JtIixlLmdldEdyb3VwVHJhbnNmb3JtKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksYigxKSxQZSgieSIsZS50b29sdGlwRGF0YS55QXhpcy5wb3NpdGlvbiksYigxKSx6ZSgiICIsZS50b29sdGlwRGF0YS55QXhpcy5sYWJlbCwiICIpfX1mdW5jdGlvbiBKTmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7VG4oKSxPbygpLFR0KDApLGgoMSwiaGlzdG9ncmFtLWNhcmQtZm9iLWNvbnRyb2xsZXIiLDE2KSxEKCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQocikpfSkoIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksZygpLER0KCl9aWYoMiZuKXtsZXQgZT13KCk7YigxKSxfKCJ0aW1lU2VsZWN0aW9uIixlLnRpbWVTZWxlY3Rpb24pKCJzdGVwcyIsZS5nZXRTdGVwcygpKSgidGVtcG9yYWxTY2FsZSIsZS5zY2FsZXMudGVtcG9yYWxTY2FsZSl9fWZ1bmN0aW9uICROZShuLHQpe2lmKDEmbiYmKFRuKCksaCgwLCJnIiksUCgxLCJsaW5lIiwxNyksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O010KCJ0cmFuc2Zvcm0iLHcoKS5nZXRDc3NUcmFuc2xhdGVQeCgwLGUpKX19ZnVuY3Rpb24gZTNlKG4sdCl7MSZuJiYoVG4oKSxQKDAsImxpbmUiLDIxKSl9ZnVuY3Rpb24gdDNlKG4sdCl7aWYoMSZuJiYoVG4oKSxQKDAsImNpcmNsZSIsMjIpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KCk7TXQoInRyYW5zZm9ybSIsaS5nZXRDc3NUcmFuc2xhdGVQeChpLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChpLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShlLGkudG9vbHRpcERhdGEueFBvc2l0aW9uSW5CaW5Db29yZCkpLngsaS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoaS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoZSxpLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS55KSl9fWZ1bmN0aW9uIG4zZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtUbigpLGgoMCwiZyIsMTgpLEQoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKHIpe2xldCBhPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoKS51cGRhdGVDb2xvck9uSG92ZXIocixhLCEwKSl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24ocil7bGV0IGE9WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygpLnVwZGF0ZUNvbG9yT25Ib3ZlcihyLGEsITEpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1YKGUpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KCkub25MaW5rZWRUaW1lUmFuZ2VDaGFuZ2VkKG8pKX0pLFMoMSxlM2UsMSwwLCJsaW5lIiwxOSksUCgyLCJwYXRoIiksUygzLHQzZSwxLDIsImNpcmNsZSIsMjApLGcoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO010KCJ0cmFuc2Zvcm0iLGkuZ2V0R3JvdXBUcmFuc2Zvcm0oZSkpKCJjb2xvciIsaS5nZXRIaXN0b2dyYW1GaWxsKGUpKSxRZSgiaGlzdG9ncmFtIiwhMCkoIm5vLWNvbG9yIiwhaS5pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSkpLGIoMSksXygibmdJZiIsaS5tb2RlPT09aS5IaXN0b2dyYW1Nb2RlLk9GRlNFVCksYigxKSxQZSgiZCIsaS5nZXRIaXN0b2dyYW1QYXRoKGUpKSxiKDEpLF8oIm5nSWYiLGkudG9vbHRpcERhdGEpfX1mdW5jdGlvbiBpM2Uobix0KXtpZigxJm4mJihUbigpLFAoMCwiY2lyY2xlIiwyMikpLDImbil7bGV0IGU9dygyKTtQZSgiY3giLGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUudG9vbHRpcERhdGEuY2xvc2VzdEJpbikueCkoImN5IixlLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLnkpfX1mdW5jdGlvbiByM2Uobix0KXtpZigxJm4mJihUbigpLGgoMCwiZyIsNCkoMSwiZyIpLFAoMiwicGF0aCIpLFMoMyxpM2UsMSwyLCJjaXJjbGUiLDIzKSxnKCksaCg0LCJnIiwyNCkoNSwidGV4dCIsMjUpLFQoNiksZygpKCkoKSksMiZuKXtsZXQgZT13KCk7YigxKSxNdCgidHJhbnNmb3JtIixlLmdldEdyb3VwVHJhbnNmb3JtKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksYigxKSxQZSgiZCIsZS5nZXRIaXN0b2dyYW1QYXRoKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksYigxKSxfKCJuZ0lmIixlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLGIoMSksTXQoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeChlLnRvb2x0aXBEYXRhLnZhbHVlLnBvc2l0aW9uLngsZS50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi55KSksYigyKSx1dChlLnRvb2x0aXBEYXRhLnZhbHVlLmxhYmVsKX19dmFyIGhBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMubW9kZT1Tci5PRkZTRVQsdGhpcy50aW1lUHJvcGVydHk9b28uU1RFUCx0aGlzLnRpbWVTZWxlY3Rpb249bnVsbCx0aGlzLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEwsdGhpcy5vbkxpbmtlZFRpbWVUb2dnbGVkPW5ldyBMLHRoaXMuSGlzdG9ncmFtTW9kZT1Tcix0aGlzLlRpbWVQcm9wZXJ0eT1vbyx0aGlzLnRvb2x0aXBEYXRhPW51bGwsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBBZSx0aGlzLmxheW91dD17aGlzdG9ncmFtSGVpZ2h0OjAsY29udGVudENsaWVudFJlY3Q6e2hlaWdodDowLHdpZHRoOjB9fSx0aGlzLnNjYWxlcz1udWxsLHRoaXMuZm9ybWF0dGVycz17YmluTnVtYmVyOmFuZSxjb3VudDpKcigiLjNuIiksd2FsbFRpbWU6TTAoIiVtLyVkICVYIiksc3RlcDpKcigiLjBmIikscmVsYXRpdmU6aT0+SnIoIi4xciIpKGkvMzZlNSkrImgifSx0aGlzLmRvbVZpc2libGU9ITF9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe2FpKHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+dGhpcy5vbk1vdXNlTW92ZShlKSl9Z2V0Q3NzVHJhbnNsYXRlUHgoZSxpKXtyZXR1cm5gdHJhbnNsYXRlKCR7ZX1weCwgJHtpfXB4KWB9Z2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGUsaSl7aWYoIWUuYmlucy5sZW5ndGgpcmV0dXJue3g6MCxkeDowLHk6MH07bGV0IHI9ZS5iaW5zWzBdLG89ZS5iaW5zLnNsaWNlKC0xKVswXTtyZXR1cm4gaTxyLng/cjppPj1vLngrby5keD9vOmUuYmlucy5maW5kKHM9PnMueDw9aSYmaTxzLngrcy5keCl9Z2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUpe3JldHVybiB0aGlzLnNjYWxlcz97eDp0aGlzLnNjYWxlcy5iaW5TY2FsZShuQyhlKSkseTp0aGlzLnNjYWxlcy5jb3VudFNjYWxlKGUueSl9Ont4OjAseTowfX1nZXRIaXN0b2dyYW1QYXRoKGUpe2lmKCF0aGlzLnNjYWxlc3x8IWUuYmlucy5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9dGhpcy5zY2FsZXMuYmluU2NhbGUscj10aGlzLnNjYWxlcy5jb3VudFNjYWxlLG89ZS5iaW5zWzBdLGE9ZS5iaW5zLnNsaWNlKC0xKVswXSxzPVtgTSR7aShuQyhvKSl9LCR7cigwKX1gXTtmb3IobGV0IGwgb2YgZS5iaW5zKXMucHVzaChgTCR7aShuQyhsKSl9LCR7cihsLnkpfWApO3JldHVybiBzLnB1c2goYEwke2kobkMoYSkpfSwke3IoMCl9YCkscy5qb2luKCIiKX10cmFja0J5V2FsbFRpbWUoZSl7cmV0dXJuIGUud2FsbFRpbWV9Z2V0R3JvdXBUcmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMuc2NhbGVzJiZ0aGlzLm1vZGUhPT1Tci5PVkVSTEFZP3RoaXMuZ2V0Q3NzVHJhbnNsYXRlUHgoMCx0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlKHRoaXMuZ2V0VGltZVZhbHVlKGUpKSk6IiJ9Z2V0U3RlcHMoKXtyZXR1cm4gdGhpcy5kYXRhLm1hcChlPT5lLnN0ZXApfWlzVGltZVNlbGVjdGlvbkVuYWJsZWQoZSl7cmV0dXJuIEJvb2xlYW4odGhpcy5tb2RlPT09U3IuT0ZGU0VUJiZ0aGlzLnRpbWVQcm9wZXJ0eT09PW9vLlNURVAmJnRoaXMuc2NhbGVzJiZlKX1pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSl7cmV0dXJuIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pfHwobnVsbD09PXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA9PT1lLnN0ZXA6dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA8PWUuc3RlcCYmdGhpcy50aW1lU2VsZWN0aW9uLmVuZC5zdGVwPj1lLnN0ZXApfWdldEhpc3RvZ3JhbUZpbGwoZSl7cmV0dXJuIHRoaXMuc2NhbGVzP3RoaXMuc2NhbGVzLmQzQ29sb3JTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZShlKSk6IiJ9dXBkYXRlQ29sb3JPbkhvdmVyKGUsaSxyKXshdGhpcy5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKHRoaXMudGltZVNlbGVjdGlvbil8fHRoaXMuaXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGkpfHwocj9lLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJuby1jb2xvciIpOmUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoIm5vLWNvbG9yIikpfWdldEdyaWRUaWNrWUxvY3MoKXtpZighdGhpcy5zY2FsZXN8fHRoaXMubW9kZT09PVNyLk9GRlNFVClyZXR1cm5bXTtsZXQgZT10aGlzLnNjYWxlcy5jb3VudFNjYWxlO3JldHVybiBlLnRpY2tzKCkubWFwKGk9PmUoaSkpfW9uUmVzaXplKCl7dGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuZG9tVmlzaWJsZT1lLGUmJih0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpKX1vbkxpbmtlZFRpbWVSYW5nZUNoYW5nZWQoZSl7aWYoIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pKXJldHVybjtsZXQgaT10aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxyPXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAsbz1lLnN0ZXA8aT9lLnN0ZXA6aSxhPXI7YT12b2lkIDA9PT1hP2Uuc3RlcD5pP2Uuc3RlcDppOmUuc3RlcD5hP2Uuc3RlcDphLChvIT09aXx8YSE9PXIpJiZvIT09YSYmdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246e3N0YXJ0OntzdGVwOm99LGVuZDp7c3RlcDphfX0sYWZmb3JkYW5jZTpqYS5ISVNUT0dSQU1fQ0xJQ0tfVE9fUkFOR0V9KX1nZXRUaW1lVmFsdWUoZSl7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIG9vLldBTExfVElNRTpyZXR1cm4gZS53YWxsVGltZTtjYXNlIG9vLlNURVA6cmV0dXJuIGUuc3RlcDtjYXNlIG9vLlJFTEFUSVZFOnJldHVybiBlLndhbGxUaW1lLXRoaXMuZGF0YVswXS53YWxsVGltZX19dXBkYXRlQ2xpZW50UmVjdHMoKXt0aGlzLmNvbnRlbnQmJih0aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdD10aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ9dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QuaGVpZ2h0LzIuNSl9dXBkYXRlQ2hhcnRJZlZpc2libGUoKXshdGhpcy5kb21WaXNpYmxlfHwodGhpcy5zY2FsZXM9dGhpcy5jb21wdXRlU2NhbGVzKHRoaXMuZGF0YSksdGhpcy5yZW5kZXJYQXhpcygpLHRoaXMucmVuZGVyWUF4aXMoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSl9Y29tcHV0ZVNjYWxlcyhlKXtsZXR7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qse21pbjpvLG1heDphfT1zbmUoZSx2PT5mdW5jdGlvbihuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpKT0+TWF0aC5taW4oZSxpLngpLDEvMCl9KHYuYmlucyksdj0+WVYodi5iaW5zLCh7eDp4LGR4OlJ9KT0+eCtSKSkscz1ZVihlLHY9PllWKHYuYmlucywoe3k6eH0pPT54KSksbD1VbCgpLmRvbWFpbihbbyxhXSkubmljZSgpLGM9dGhpcy5tb2RlIT09U3IuT1ZFUkxBWSYmdGhpcy50aW1lUHJvcGVydHk9PW9vLldBTExfVElNRT9mbSgpOlVsKCksZD1lLm1hcCh2PT50aGlzLmdldFRpbWVWYWx1ZSh2KSkse21pbjp1LG1heDpwfT1zbmUoZCx2PT52KSxmPVt1LHBdO2MuZG9tYWluKGYpO2xldCBtPVVsKCk7bS5kb21haW4oWzAsc10pO2xldCB5PSRmKHRoaXMuY29sb3J8fCIjMDAwIiksTT1VbCgpO3JldHVybiBNLmRvbWFpbihmKSxsLnJhbmdlKFswLGldKSxNLnJhbmdlKFt5LmJyaWdodGVyKCkseS5kYXJrZXIoKV0pLE0uaW50ZXJwb2xhdGUoQk4pLHRoaXMubW9kZT09PVNyLk9WRVJMQVk/KGMucmFuZ2UoW3Iscl0pLG0ucmFuZ2UoW3IsMF0pKTooYy5yYW5nZShbci0odGhpcy5tb2RlPT09U3IuT0ZGU0VUP3ItdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0OjApLHJdKSxtLnJhbmdlKFswLC10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHRdKSkse2JpblNjYWxlOmwsZDNDb2xvclNjYWxlOk0sY291bnRTY2FsZTptLHRlbXBvcmFsU2NhbGU6Y319cmVuZGVyWEF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldHt3aWR0aDplfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxpPWZ1bmN0aW9uKG4pe3JldHVybiBzWihmTixuKX0odGhpcy5zY2FsZXMuYmluU2NhbGUpLnRpY2tzKE1hdGgubWF4KDIsZS8yMCkpO2kudGlja0Zvcm1hdCh0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKSxpKHNEKHRoaXMueEF4aXMubmF0aXZlRWxlbWVudCkpfWdldFlBeGlzRm9ybWF0dGVyKCl7aWYodGhpcy5tb2RlPT09U3IuT1ZFUkxBWSlyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLmNvdW50O3N3aXRjaCh0aGlzLnRpbWVQcm9wZXJ0eSl7Y2FzZSBvby5XQUxMX1RJTUU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy53YWxsVGltZTtjYXNlIG9vLlNURVA6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5zdGVwO2Nhc2Ugb28uUkVMQVRJVkU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5yZWxhdGl2ZTtkZWZhdWx0OnRocm93IFJhbmdlRXJyb3IoYFkgYXhpcyBmb3JtYXR0ZXIgZm9yICR7dGhpcy50aW1lUHJvcGVydHl9IG11c3QgYmUgaW1wbGVtZW50ZWRgKX19Z2V0TWF4VGlja3MoZSl7bGV0e2hlaWdodDppfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxyPWkvMTU7aWYodGhpcy50aW1lUHJvcGVydHk9PT1vby5TVEVQKXtsZXRbbyxhXT1lLmRvbWFpbigpLHM9TWF0aC5tYXgoYS1vKzEsMSk7cmV0dXJuIE1hdGgubWluKHMscil9cmV0dXJuIHJ9cmVuZGVyWUF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldCBlPXRoaXMubW9kZT09PVNyLk9WRVJMQVk/dGhpcy5zY2FsZXMuY291bnRTY2FsZTp0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlLGk9dGhpcy5nZXRNYXhUaWNrcyhlKSxyPWZ1bmN0aW9uKG4pe3JldHVybiBzWih0RCxuKX0oZSkudGlja3MoTWF0aC5tYXgoMixpKSk7ci50aWNrRm9ybWF0KHRoaXMuZ2V0WUF4aXNGb3JtYXR0ZXIoKSkscihzRCh0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQpKX1maW5kQ2xvc2VzdERhdHVtSW5kZXgoZSl7bGV0IGk9ZS50YXJnZXQscj1pO2Zvcig7aSYmaSE9PXRoaXMuaGlzdG9ncmFtcy5uYXRpdmVFbGVtZW50OylyPWksaT1pLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGk/QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpOi0xfW9uTW91c2VNb3ZlRm9yVGVzdE9ubHkoZSl7cmV0dXJuIHRoaXMub25Nb3VzZU1vdmUoZSl9b25Nb3VzZU1vdmUoZSl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXQgaT1lLm9mZnNldFgscj1lLm9mZnNldFksbz10aGlzLmZpbmRDbG9zZXN0RGF0dW1JbmRleChlKTtpZihvPDApcmV0dXJuO2xldCBhPXRoaXMuc2NhbGVzLmJpblNjYWxlLmludmVydChpKSxzPXRoaXMuZGF0YVtvXSxsPXRoaXMuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKHMsYSk7dGhpcy50b29sdGlwRGF0YT17dmFsdWU6e3Bvc2l0aW9uOnt4OmkseTpyfSxsYWJlbDp0aGlzLm1vZGU9PT1Tci5PRkZTRVQ/dGhpcy5mb3JtYXR0ZXJzLmNvdW50KGwueSk6YFN0ZXA6ICR7dGhpcy5mb3JtYXR0ZXJzLnN0ZXAocy5zdGVwKX1gfSx4QXhpczp7cG9zaXRpb246dGhpcy5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQobCkueCxsYWJlbDp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKG5DKGwpKX0seUF4aXM6e3Bvc2l0aW9uOnRoaXMuc2NhbGVzLmNvdW50U2NhbGUodGhpcy5tb2RlPT09U3IuT0ZGU0VUPzA6bC55KSxsYWJlbDp0aGlzLm1vZGU9PT1Tci5PRkZTRVQ/dGhpcy5nZXRZQXhpc0Zvcm1hdHRlcigpKHRoaXMuZ2V0VGltZVZhbHVlKHMpKTp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKGwueSl9LHhQb3NpdGlvbkluQmluQ29vcmQ6YSxjbG9zZXN0RGF0dW06cyxjbG9zZXN0QmluOmx9LHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEZ0KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItaGlzdG9ncmFtIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFllKFdOZSw1KSxZZShxTmUsNSksWWUoWU5lLDUpLFllKFhOZSw1KSxZZShRTmUsNSkpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkubWFpbj1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS54QXhpcz1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS55QXhpcz1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS5jb250ZW50PXIuZmlyc3QpLHdlKHI9U2UoKSkmJihpLmhpc3RvZ3JhbXM9ci5maXJzdCl9fSxpbnB1dHM6e21vZGU6Im1vZGUiLHRpbWVQcm9wZXJ0eToidGltZVByb3BlcnR5Iixjb2xvcjoiY29sb3IiLGRhdGE6ImRhdGEiLHRpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24ifSxvdXRwdXRzOntvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZmVhdHVyZXM6W0d0XSxkZWNsczoyMix2YXJzOjE1LGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJvblJlc2l6ZSIsIm9uVmlzaWJpbGl0eUNoYW5nZSJdLFsibWFpbiIsIiJdLFsxLCJheGlzIiwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsxLCJ0b29sdGlwIl0sWzMsInRyYW5zZm9ybSIsNCwibmdJZiJdLFsxLCJheGlzIiwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQiXSxbImNvbnRlbnQiLCIiXSxbMSwiZ3JpZCJdLFszLCJ0cmFuc2Zvcm0iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiaGlzdG9ncmFtcyIsIiJdLFszLCJ0cmFuc2Zvcm0iLCJoaXN0b2dyYW0iLCJuby1jb2xvciIsImNvbG9yIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJjbGFzcyIsInRvb2x0aXAiLDQsIm5nSWYiXSxbMSwiaGlzdG9ncmFtLWNhcmQtZm9iIiwzLCJ0aW1lU2VsZWN0aW9uIiwic3RlcHMiLCJ0ZW1wb3JhbFNjYWxlIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXSxbIngyIiwiMTAwJSIsMSwidGljayJdLFszLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsImNsaWNrIl0sWyJjbGFzcyIsImJhc2VsaW5lIiwieDIiLCIxMDAlIiw0LCJuZ0lmIl0sWyJyIiwiMiIsMywidHJhbnNmb3JtIiw0LCJuZ0lmIl0sWyJ4MiIsIjEwMCUiLDEsImJhc2VsaW5lIl0sWyJyIiwiMiJdLFsiciIsIjIiLDQsIm5nSWYiXSxbMSwidmFsdWUtbGFiZWwiXSxbIngiLCIzIiwieSIsIi0zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDAsMSksRCgib25SZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemUoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLFRuKCksaCgyLCJzdmciLDIpLFAoMywiZyIsbnVsbCwzKSxoKDUsImciLDQpLFMoNixaTmUsMywzLCJnIiw1KSxnKCkoKSxPbygpLGgoNywiZGl2Iiw2KSxUbigpLGgoOCwic3ZnIiksUCg5LCJnIixudWxsLDcpLGgoMTEsImciLDQpLFMoMTIsS05lLDMsNCwiZyIsNSksZygpKCksUygxMyxKTmUsMiwzLCJuZy1jb250YWluZXIiLDgpLGcoKSxoKDE0LCJzdmciLDksMTApKDE2LCJnIiwxMSksUygxNywkTmUsMiwyLCJnIiwxMiksZygpLGgoMTgsImciLG51bGwsMTMpLFMoMjAsbjNlLDQsMTEsImciLDE0KSxnKCksUygyMSxyM2UsNyw3LCJnIiwxNSksZygpKCkpLDImZSYmKGthKCJtYWluICIraS5tb2RlKyIgIitpLnRpbWVQcm9wZXJ0eSksYig2KSxfKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSxiKDUpLE10KCJ0cmFuc2Zvcm0iLGkuZ2V0Q3NzVHJhbnNsYXRlUHgoOSwwKSksYigxKSxfKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSxiKDEpLF8oIm5nSWYiLGkuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZChpLnRpbWVTZWxlY3Rpb24pKSxiKDQpLF8oIm5nRm9yT2YiLGkuZ2V0R3JpZFRpY2tZTG9jcygpKSxiKDEpLFFlKCJoaXN0b2dyYW1zIiwhMCkoImxpbmtlZC10aW1lLXNpbmdsZS1zdGVwIixpLnRpbWVTZWxlY3Rpb24mJiFpLnRpbWVTZWxlY3Rpb24uZW5kKSxiKDIpLF8oIm5nRm9yT2YiLGkuZGF0YSkoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5V2FsbFRpbWUpLGIoMSksXygibmdJZiIsaS50b29sdGlwRGF0YSkpfSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX1bX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjEwcHh9Lm1haW5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJjb250ZW50IHktYXhpcyIgIngtYXhpcyAuIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDUwcHg7Z3JpZC10ZW1wbGF0ZS1yb3dzOjFmciAzMHB4fS5tYWluLndhbGxfdGltZVtfbmdjb250ZW50LSVDT01QJV17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciA3NXB4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEwcHh9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcn0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6aWRlb2dyYXBoaWM7dGV4dC1hbmNob3I6c3RhcnR9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgIHtjb2xvcjojNjE2MTYxO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmRvbWFpbiwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayB0ZXh0e2Rpc3BsYXk6bm9uZX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrOm50aC1jaGlsZCgybisxKSB0ZXh0e2Rpc3BsYXk6aW5pdGlhbH1zdmdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6dmlzaWJsZVBhaW50ZWR9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfXN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBnW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOngtYXhpc30ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpoYW5naW5nO3RleHQtYW5jaG9yOm1pZGRsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eS1heGlzO292ZXJmbG93OmNsaXAgdmlzaWJsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTptaWRkbGU7dGV4dC1hbmNob3I6c3RhcnR9Lmhpc3RvZ3JhbS1jYXJkLWZvYltfbmdjb250ZW50LSVDT01QJV17bGVmdDo5cHg7cG9zaXRpb246YWJzb2x1dGV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiNkZGR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5lLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiM1NTV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpjb250ZW50O292ZXJmbG93OnZpc2libGU7ei1pbmRleDoxfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1kYXNoYXJyYXk6Mn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2Utb3BhY2l0eTouNjtzdHJva2Utd2lkdGg6MXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZmlsdGVyOmRyb3Atc2hhZG93KDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjYpKTtzdHJva2U6I2ZmZjt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eTouMTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZTpjdXJyZW50Q29sb3I7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eToxO3N0cm9rZTpjdXJyZW50Q29sb3I7ZmlsbDpyZ2JhKDAsMCwwLDApfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyMjEsMjIxLDIyMSwuNCkgIWltcG9ydGFudH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLW9wYWNpdHk6LjJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDUxLDUxLDUxLC40KSAhaW1wb3J0YW50fS5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzU1NX0ub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzAwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtcy5saW5rZWQtdGltZS1zaW5nbGUtc3RlcFtfbmdjb250ZW50LSVDT01QJV0gICBbX25nY29udGVudC0lQ09NUCVdOm5vdCgubm8tY29sb3IpICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7ZGlzcGxheTpub25lfS5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTowO3N0cm9rZTpjdXJyZW50Q29sb3J9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFlWKG4sdCl7cmV0dXJuIG4ucmVkdWNlKChlLGkpPT5NYXRoLm1heChlLHQoaSkpLC0xLzApfWZ1bmN0aW9uIHNuZShuLHQsZSl7ZXx8KGU9dCk7bGV0IGk9MS8wLHI9LTEvMDtmb3IobGV0IG8gb2YgbilpPU1hdGgubWluKGksdChvKSkscj1NYXRoLm1heChyLGUobykpO3JldHVybnttaW46aSxtYXg6cn19ZnVuY3Rpb24gbkMobil7cmV0dXJuIG4ueCsuNSpuLmR4fWZ1bmN0aW9uIHMzZShuLHQpezEmbiYmKGgoMCwic3BhbiIsMTQpLFAoMSwibWF0LXNwaW5uZXIiLDE1KSxnKCkpfWZ1bmN0aW9uIGwzZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInRiLWhpc3RvZ3JhbSIsMTYpLEQoIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChyKSl9KSgib25MaW5rZWRUaW1lVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkxpbmtlZFRpbWVUb2dnbGVkLmVtaXQoKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygiZGF0YSIsZS5kYXRhKSgibW9kZSIsZS5tb2RlKSgidGltZVByb3BlcnR5IixlLnRpbWVQcm9wZXJ0eShlLnhBeGlzVHlwZSkpKCJjb2xvciIsZS5ydW5Db2xvclNjYWxlKGUucnVuSWQpKSgidGltZVNlbGVjdGlvbiIsZS5jb252ZXJ0VG9UaW1lU2VsZWN0aW9uKGUubGlua2VkVGltZVNlbGVjdGlvbikpfX1mdW5jdGlvbiBjM2Uobix0KXsxJm4mJihoKDAsImRpdiIsMTgpLFQoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLGcoKSl9ZnVuY3Rpb24gZDNlKG4sdCl7aWYoMSZuJiZTKDAsYzNlLDIsMCwiZGl2IiwxNyksMiZuKXtsZXQgZT13KCk7XygibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIHUzZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSxsbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT1EZSx0aGlzLm9uRnVsbFNpemVUb2dnbGU9bmV3IEwsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEwsdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBMLHRoaXMub25MaW5rZWRUaW1lVG9nZ2xlZD1uZXcgTH10aW1lUHJvcGVydHkoZSl7c3dpdGNoKGUpe2Nhc2UgUGkuU1RFUDpyZXR1cm4gb28uU1RFUDtjYXNlIFBpLldBTExfVElNRTpyZXR1cm4gb28uV0FMTF9USU1FO2Nhc2UgUGkuUkVMQVRJVkU6cmV0dXJuIG9vLlJFTEFUSVZFO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHhBeGlzVHlwZSBmb3IgaGlzdG9ncmFtIHRpbWUgcHJvcGVydHkuIil9fWNvbnZlcnRUb1RpbWVTZWxlY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lP251bGw6e3N0YXJ0OntzdGVwOmUuc3RhcnRTdGVwfSxlbmQ6ZS5lbmRTdGVwP3tzdGVwOmUuZW5kU3RlcH06bnVsbH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudCJdXSxpbnB1dHM6e2xvYWRTdGF0ZToibG9hZFN0YXRlIix0aXRsZToidGl0bGUiLHRhZzoidGFnIixydW5JZDoicnVuSWQiLGRhdGE6ImRhdGEiLG1vZGU6Im1vZGUiLHhBeGlzVHlwZToieEF4aXNUeXBlIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIixzaG93RnVsbFdpZHRoOiJzaG93RnVsbFdpZHRoIixpc1Bpbm5lZDoiaXNQaW5uZWQiLGxpbmtlZFRpbWVTZWxlY3Rpb246ImxpbmtlZFRpbWVTZWxlY3Rpb24iLGlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZDoiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIn0sb3V0cHV0czp7b25GdWxsU2l6ZVRvZ2dsZToib25GdWxsU2l6ZVRvZ2dsZSIsb25QaW5DbGlja2VkOiJvblBpbkNsaWNrZWQiLG9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uTGlua2VkVGltZVRvZ2dsZWQ6Im9uTGlua2VkVGltZVRvZ2dsZWQifSxkZWNsczoxNix2YXJzOjE0LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gb24gYSBoaXN0b2dyYW0gY2FyZCB0aGF0IHRvZ2dsZXMgZnVsbCBzaXplIG1vZGUu4pCfZmM4Zjc2N2QwYjlmOTMwMTg3YTFiYWUzNDQ3N2FkMjg3MzZlY2UzM+KQnzkxNTcyMTU2MzYzODkyNjU5NzpUb2dnbGUgZnVsbCBzaXplIG1vZGVgLFtbMSwiaGVhZGluZyJdLFsxLCJ0YWciXSxbMywidGl0bGUiLCJ2YWx1ZSJdLFszLCJpc0NsaXBwZWQiLCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwicGluLWJ1dHRvbiIsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJUb2dnbGUgZnVsbCBzaXplIG1vZGUiLDMsImNsaWNrIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMywiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvciIsInRpbWVTZWxlY3Rpb24iLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0RhdGEiLCIiXSxbMSwic3Bpbm5lciJdLFsiZGlhbWV0ZXIiLCIxOCJdLFszLCJkYXRhIiwibW9kZSIsInRpbWVQcm9wZXJ0eSIsImNvbG9yIiwidGltZVNlbGVjdGlvbiIsIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvbkxpbmtlZFRpbWVUb2dnbGVkIl0sWyJjbGFzcyIsImVtcHR5LW1lc3NhZ2UiLDQsIm5nSWYiXSxbMSwiZW1wdHktbWVzc2FnZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxQKDIsInRiLXRydW5jYXRlZC1wYXRoIiwyKSgzLCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDMpLGcoKSxoKDQsImRpdiIsNCksUCg1LCJzcGFuIiw1KSg2LCJjYXJkLXJ1bi1uYW1lIiw2KSxnKCksaCg3LCJzcGFuIiw3KSg4LCJidXR0b24iLDgpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGluQ2xpY2tlZC5lbWl0KCFpLmlzUGlubmVkKX0pLFAoOSwibWF0LWljb24iLDkpLGcoKSxoKDEwLCJidXR0b24iLDEwKSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pLFAoMTEsIm1hdC1pY29uIiw5KSxnKCkoKSxTKDEyLHMzZSwyLDAsInNwYW4iLDExKSxnKCksUygxMyxsM2UsMSw1LCJ0Yi1oaXN0b2dyYW0iLDEyKSxTKDE0LGQzZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDEzLFp0KSksMiZlKXtsZXQgcj10dCgxNSk7YigyKSxfKCJ0aXRsZSIsaS50YWcpKCJ2YWx1ZSIsaS50aXRsZSksYigxKSxfKCJpc0NsaXBwZWQiLGkubGlua2VkVGltZVNlbGVjdGlvbiYmaS5saW5rZWRUaW1lU2VsZWN0aW9uLmNsaXBwZWQpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSxiKDIpLF8oIm5nU3R5bGUiLFNuKDEyLHUzZSxpLnJ1bkNvbG9yU2NhbGUoaS5ydW5JZCkpKSxiKDEpLF8oInJ1bklkIixpLnJ1bklkKSxiKDIpLFBlKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIiksYigxKSxfKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLGIoMiksXygic3ZnSWNvbiIsaS5zaG93RnVsbFdpZHRoPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLGIoMSksXygibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORyksYigxKSxfKCJuZ0lmIixpLmRhdGEmJmkuZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W0ZlLG11LGhBLEZuLERuLHpyLEtULHMwLGwwXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczozMThweDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRhZyBjb250cm9scyIgInJ1biBzcGlubmVyIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHh9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtnYXA6NXB4O2dyaWQtYXJlYTp0YWc7b3ZlcmZsb3c6aGlkZGVufS50YWdbX25nY29udGVudC0lQ09NUCVdICAgdmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MH0ucGluLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE4cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnJ1bjtkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtc2l6ZToxM3B4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7Z3JpZC1hcmVhOmNvbnRyb2xzO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Z3JpZC1hcmVhOnNwaW5uZXI7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17dG9wOjA7cmlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZX10Yi1oaXN0b2dyYW1bX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGNuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgTCx0aGlzLm1vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KHMxKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoRGwpLHRoaXMuc2hvd0Z1bGxXaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoanMpLnBpcGUoVShpPT5pW3RoaXMuY2FyZElkXT8uZnVsbFdpZHRoKSl9aXNIaXN0b2dyYW1DYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09cW4uSElTVE9HUkFNU31vbkZ1bGxTaXplVG9nZ2xlKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChLZyh7Y2FyZElkOnRoaXMuY2FyZElkfSkpfW5nT25Jbml0KCl7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoVXMsdGhpcy5jYXJkSWQpLnBpcGUoVmUobz0+ISFvJiZ0aGlzLmlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKG8pKSxVKG89Pm8pKSxyPXVuKFtpLHRoaXMuc3RvcmUuc2VsZWN0KEV1LHRoaXMuY2FyZElkKV0pO3RoaXMuZGF0YSQ9ci5waXBlKFUoKFtvLGFdKT0+e2xldCBzPW8ucnVuSWQ7cmV0dXJuIGEmJmEuaGFzT3duUHJvcGVydHkocyk/ZnVuY3Rpb24obix0PTMwKXtpZighbi5sZW5ndGh8fHQ8MSlyZXR1cm5bXTtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1udWxsLGU9bnVsbDtmb3IobGV0e2JpbnM6aX1vZiBuKXtpZighaS5sZW5ndGgpY29udGludWU7bGV0IHI9aVtpLmxlbmd0aC0xXSxvPWlbMF0ueCxhPXIueCtyLmR4OyhudWxsPT09dHx8bzx0KSYmKHQ9byksKG51bGw9PT1lfHxhPmUpJiYoZT1hKX1yZXR1cm4gbnVsbD09PXR8fG51bGw9PT1lP251bGw6e2xlZnQ6dCxyaWdodDplfX0obik7cmV0dXJuIGUmJmUubGVmdD09PWUucmlnaHQmJihlLnJpZ2h0PTEuMSplLnJpZ2h0KzEsZS5sZWZ0PWUubGVmdC8xLjEtMSksbi5tYXAoaT0+KHtzdGVwOmkuc3RlcCx3YWxsVGltZTppLndhbGxUaW1lLGJpbnM6ZT9CTmUoaS5iaW5zLGUsdCk6W119KSl9KGFbc10ubWFwKGQ9PntsZXR7d2FsbFRpbWU6dSxzdGVwOnB9PWQ7cmV0dXJue3dhbGxUaW1lOnUsc3RlcDpwLGJpbnM6ZC5iaW5zLm1hcChtPT4oe3g6bS5taW4sZHg6bS5tYXgtbS5taW4seTptLmNvdW50fSkpfX0pKTpbXX0pKSx0aGlzLnN0ZXBzJD10aGlzLmRhdGEkLnBpcGUoVShvPT5vLm1hcChhPT5hLnN0ZXApKSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD11bihbdGhpcy5zdG9yZS5zZWxlY3QoQXUpLHRoaXMuc3RlcHMkLHRoaXMuc3RvcmUuc2VsZWN0KEl1KV0pLnBpcGUoVSgoW28sYSxzXSk9PntpZighbylyZXR1cm4gbnVsbDtsZXQgbD0xLzAsYz0tMS8wO2ZvcihsZXQgcCBvZiBhKWw9TWF0aC5taW4ocCxsKSxjPU1hdGgubWF4KHAsYyk7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7aWYobnVsbCE9PW4uZW5kU3RlcClyZXR1cm4gbjtsZXQgZT1mdW5jdGlvbihuLHQpe2xldCBlPTEvMCxpPW51bGw7Zm9yKGxldCByIG9mIHQpe2xldCBvPU1hdGguYWJzKG4tcik7bzxlJiYoZT1vLGk9cil9cmV0dXJuIGl9KG4uc3RhcnRTdGVwLHQpO3JldHVybiBudWxsIT09ZT97Li4ubixzdGFydFN0ZXA6ZX06bn0oJGgoT0YobyxzKSxsLGMpLGEpfSkpLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJD11bihbdGhpcy5zdG9yZS5zZWxlY3QoQXUpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiRdKS5waXBlKFUoKFtvLGFdKT0+byYmYSYmIWEuY2xpcHBlZCYmbnVsbD09PW8uZW5kJiZvLnN0YXJ0LnN0ZXAhPT1hLnN0YXJ0U3RlcCkpLHRoaXMubG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChoZCx0aGlzLmNhcmRJZCksdGhpcy50YWckPWkucGlwZShVKG89Pm8udGFnKSksdGhpcy50aXRsZSQ9dGhpcy50YWckLnBpcGUoVShvPT5hMChvLHRoaXMuZ3JvdXBOYW1lKSkpLHRoaXMucnVuSWQkPWkucGlwZShVKG89Pm8ucnVuSWQpKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdChUdSx0aGlzLmNhcmRJZCl9b25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFlmKGUpKX1vbkxpbmtlZFRpbWVUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChEZCh7YWZmb3JkYW5jZTpHYS5GT0JfREVTRUxFQ1R9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZCJdXSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e3BpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MTIsdmFyczozNCxjb25zdHM6W1szLCJsb2FkU3RhdGUiLCJ0aXRsZSIsInRhZyIsInJ1bklkIiwiZGF0YSIsIm1vZGUiLCJ4QXhpc1R5cGUiLCJydW5Db2xvclNjYWxlIiwic2hvd0Z1bGxXaWR0aCIsImlzUGlubmVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwibGlua2VkVGltZVNlbGVjdGlvbiIsIm9uRnVsbFNpemVUb2dnbGUiLCJvblBpbkNsaWNrZWQiLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50IiwwKSxEKCJvbkZ1bGxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uRnVsbFNpemVUb2dnbGUoKX0pKCJvblBpbkNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnBpblN0YXRlQ2hhbmdlZC5lbWl0KG8pfSkoIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQobyl9KSgib25MaW5rZWRUaW1lVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVUb2dnbGVkKCl9KSxHKDEsImFzeW5jIiksRygyLCJhc3luYyIpLEcoMywiYXN5bmMiKSxHKDQsImFzeW5jIiksRyg1LCJhc3luYyIpLEcoNiwiYXN5bmMiKSxHKDcsImFzeW5jIiksRyg4LCJhc3luYyIpLEcoOSwiYXN5bmMiKSxHKDEwLCJhc3luYyIpLEcoMTEsImFzeW5jIiksZygpKSwyJmUmJl8oImxvYWRTdGF0ZSIsVygxLDEyLGkubG9hZFN0YXRlJCkpKCJ0aXRsZSIsVygyLDE0LGkudGl0bGUkKSkoInRhZyIsVygzLDE2LGkudGFnJCkpKCJydW5JZCIsVyg0LDE4LGkucnVuSWQkKSkoImRhdGEiLFcoNSwyMCxpLmRhdGEkKSkoIm1vZGUiLFcoNiwyMixpLm1vZGUkKSkoInhBeGlzVHlwZSIsVyg3LDI0LGkueEF4aXNUeXBlJCkpKCJydW5Db2xvclNjYWxlIixpLnJ1bkNvbG9yU2NhbGUpKCJzaG93RnVsbFdpZHRoIixXKDgsMjYsaS5zaG93RnVsbFdpZHRoJCkpKCJpc1Bpbm5lZCIsVyg5LDI4LGkuaXNQaW5uZWQkKSkoImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsVygxMCwzMCxpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxMSwzMixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSl9LGRlcGVuZGVuY2llczpbbG5lLGx0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gbTNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiaW1hZ2UtY2FyZCIsNiksRCgiZnVsbFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uRnVsbFdpZHRoQ2hhbmdlZChyKSl9KSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiBoM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzY2FsYXItY2FyZCIsNyksRCgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpfX1mdW5jdGlvbiBnM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJoaXN0b2dyYW0tY2FyZCIsOCksRCgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiBfM2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMik7YigxKSx6ZSgiUGxhY2Vob2xkZXIgZXJyb3IgZm9yOiAiLGUuY2FyZElkLCIiKX19ZnVuY3Rpb24geTNlKG4sdCl7aWYoMSZuJiYoVHQoMCwxKSxTKDEsbTNlLDEsMywiaW1hZ2UtY2FyZCIsMiksUygyLGgzZSwxLDIsInNjYWxhci1jYXJkIiwzKSxTKDMsZzNlLDEsMywiaGlzdG9ncmFtLWNhcmQiLDQpLFMoNCxfM2UsMiwxLCJkaXYiLDUpLER0KCkpLDImbil7bGV0IGU9dygpO18oIm5nU3dpdGNoIixlLnBsdWdpblR5cGUpLGIoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSU1BR0VTKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLlNDQUxBUlMpLGIoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9fXZhciBkbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1xbix0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEwsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgTCx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgTH1vbkZ1bGxXaWR0aENoYW5nZWQoZSl7dGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQoZSl9b25GdWxsSGVpZ2h0Q2hhbmdlZChlKXt0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQoZSl9b25QaW5TdGF0ZUNoYW5nZWQoKXt0aGlzLnBpblN0YXRlQ2hhbmdlZC5lbWl0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0V2ZXJWaXNpYmxlOiJpc0V2ZXJWaXNpYmxlIixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHBsdWdpblR5cGU6InBsdWdpblR5cGUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBpblN0YXRlQ2hhbmdlZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZTKDAseTNlLDUsNCwibmctY29udGFpbmVyIiwwKSwyJmUmJl8oIm5nSWYiLGkuaXNFdmVyVmlzaWJsZSl9LGRlcGVuZGVuY2llczpbRmUsJGksc3IsZnUsWlEscm5lLGNuZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuaXNFdmVyVmlzaWJsZT0hMSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEwsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgTCx0aGlzLnJ1bkNvbG9yU2NhbGUkPXRoaXMuc3RvcmUuc2VsZWN0KGt1KS5waXBlKGV1KDM1MCx2b2lkIDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KSxVKGk9PnI9PmkuaGFzT3duUHJvcGVydHkocik/aVtyXToiI2ZmZiIpKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuaXNFdmVyVmlzaWJsZT10aGlzLmlzRXZlclZpc2libGV8fGV9b25GdWxsV2lkdGhDaGFuZ2VkKGUpe3RoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSl7dGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KGUpfW9uUGluU3RhdGVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5zZWxlY3QoVHUsdGhpcy5jYXJkSWQpLnBpcGUoenQoMSksWXQodGhpcy5zdG9yZS5zZWxlY3QocVcpKSkuc3Vic2NyaWJlKChbZSxpXSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKCRnKHtjYXJkSWQ6dGhpcy5jYXJkSWQsY2FuQ3JlYXRlTmV3UGluczppLHdhc1Bpbm5lZDplfSkpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXZpZXciXV0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHBsdWdpblR5cGU6InBsdWdpblR5cGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQifSxkZWNsczoyLHZhcnM6Nyxjb25zdHM6W1sib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsImludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luIiwiMjAwcHggMjAwcHggMjAwcHggMjAwcHgiLDMsImlzRXZlclZpc2libGUiLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwbHVnaW5UeXBlIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsIm9uVmlzaWJpbGl0eUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiY2FyZC12aWV3LWNvbXBvbmVudCIsMCksRCgiZnVsbFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GdWxsV2lkdGhDaGFuZ2VkKG8pfSkoImZ1bGxIZWlnaHRDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkZ1bGxIZWlnaHRDaGFuZ2VkKG8pfSkoInBpblN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpblN0YXRlQ2hhbmdlZCgpfSkoIm9uVmlzaWJpbGl0eUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WaXNpYmlsaXR5Q2hhbmdlKG8pfSksRygxLCJhc3luYyIpLGcoKSksMiZlJiZfKCJpc0V2ZXJWaXNpYmxlIixpLmlzRXZlclZpc2libGUpKCJjYXJkSWQiLGkuY2FyZElkKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSkoInBsdWdpblR5cGUiLGkucGx1Z2luVHlwZSkoInJ1bkNvbG9yU2NhbGUiLFcoMSw1LGkucnVuQ29sb3JTY2FsZSQpKX0sZGVwZW5kZW5jaWVzOltvMCxkbmUsbHRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBDM2Uobix0KXsxJm4mJlRpKDApfXZhciBNM2U9ZnVuY3Rpb24obix0KXtyZXR1cm57ImZ1bGwtd2lkdGgiOm4sImZ1bGwtaGVpZ2h0Ijp0fX07ZnVuY3Rpb24gdzNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw1KSgxLCJjYXJkLXZpZXciLDYpLEQoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKHIpe2xldCBhPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoMikub25GdWxsV2lkdGhDaGFuZ2VkKGEuY2FyZElkLHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7bGV0IGE9WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5vbkZ1bGxIZWlnaHRDaGFuZ2VkKGEuY2FyZElkLHIpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO18oIm5nQ2xhc3MiLFByKDYsTTNlLGkuY2FyZHNBdEZ1bGxXaWR0aC5oYXMoZS5jYXJkSWQpfHwobnVsbD09aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdP251bGw6aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdLmZ1bGxXaWR0aCksaS5jYXJkc0F0RnVsbEhlaWdodC5oYXMoZS5jYXJkSWQpfHwobnVsbD09aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdP251bGw6aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdLnRhYmxlRXhwYW5kZWQpKSksYigxKSxfKCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSkoInBsdWdpblR5cGUiLGUucGx1Z2luKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikoImNhcmRMYXp5TG9hZGVyIixlLmNhcmRJZCl9fWZ1bmN0aW9uIFMzZShuLHQpezEmbiYmVGkoMCl9dmFyIEUzZT1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITF9fSxUM2U9ZnVuY3Rpb24oKXtyZXR1cm57aXNCb3R0b21Db250cm9sOiEwfX07ZnVuY3Rpb24gRDNlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiKSxTKDEsQzNlLDEsMCwibmctY29udGFpbmVyIiwyKSxoKDIsImRpdiIsMyksUygzLHczZSwyLDksImRpdiIsNCksZygpLFMoNCxTM2UsMSwwLCJuZy1jb250YWluZXIiLDIpLGcoKSksMiZuKXtsZXQgZT13KCksaT10dCgyKTtiKDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsdXUoOCxFM2UpKSxiKDEpLE10KCJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLGUuZ3JpZFRlbXBsYXRlQ29sdW1uKSxiKDEpLF8oIm5nRm9yT2YiLGUuY2FyZElkc1dpdGhNZXRhZGF0YSkoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5Q2FyZHMpLGIoMSksXygibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix1dSg5LFQzZSkpfX1mdW5jdGlvbiBJM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDEyKSxEKCJjbGljayIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KDMpO3JldHVybiBRKG8uaGFuZGxlUGFnZUNoYW5nZShvLnBhZ2VJbmRleC0xLHIudGFyZ2V0KSl9KSxUKDEsIiBQcmV2aW91cyAiKSxnKCl9MiZuJiZfKCJkaXNhYmxlZCIsMD09PXcoMykucGFnZUluZGV4KX1mdW5jdGlvbiBBM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzcGFuIiwxNSkoMSwiaW5wdXQiLDE2KSxEKCJpbnB1dCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodyg0KS5vblBhZ2luYXRpb25JbnB1dENoYW5nZShyKSl9KSxnKCksVCgyKSxnKCl9aWYoMiZuKXtsZXQgZT13KDQpO2IoMSksXygidmFsdWUiLGUucGFnZUluZGV4KzEpKCJtYXgiLGUubnVtUGFnZXMpLGIoMSksemUoIiBvZiAiLGUubnVtUGFnZXMsIiIpfX1mdW5jdGlvbiBSM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzcGFuIiksUygxLEEzZSwzLDMsInNwYW4iLDEzKSxoKDIsImJ1dHRvbiIsMTQpLEQoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMyk7cmV0dXJuIFEoby5oYW5kbGVQYWdlQ2hhbmdlKG8ucGFnZUluZGV4KzEsci50YXJnZXQpKX0pLFQoMywiIE5leHQgIiksZygpKCl9aWYoMiZuKXtsZXQgZT13KDIpLmlzQm90dG9tQ29udHJvbCxpPXcoKTtiKDEpLF8oIm5nSWYiLGkuc2hvd1BhZ2luYXRpb25JbnB1dChlKSksYigxKSxfKCJkaXNhYmxlZCIsaS5wYWdlSW5kZXgrMT49aS5udW1QYWdlcyl9fWZ1bmN0aW9uIGszZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw4KSgxLCJzcGFuIiw5KSxTKDIsSTNlLDIsMSwiYnV0dG9uIiwxMCksZygpLGgoMywic3BhbiIsMTEpLFMoNCxSM2UsNCwyLCJzcGFuIiwwKSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO2IoMiksXygibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSxiKDIpLF8oIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25Db250cm9scyl9fWZ1bmN0aW9uIFAzZShuLHQpezEmbiYmUygwLGszZSw1LDIsImRpdiIsNyksMiZuJiZfKCJuZ0lmIix3KCkuc2hvd1BhZ2luYXRpb25Db250cm9scyl9dmFyIHBuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2RrU2Nyb2xsYWJsZT1lLHRoaXMuUGx1Z2luVHlwZT1xbix0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj0iIix0aGlzLmNhcmRzQXRGdWxsV2lkdGg9bmV3IFNldCx0aGlzLmNhcmRzQXRGdWxsSGVpZ2h0PW5ldyBTZXQsdGhpcy5wYWdlSW5kZXhDaGFuZ2VkPW5ldyBMfW5nT25Jbml0KCl7dGhpcy5pc0NhcmRXaWR0aFZhbGlkKHRoaXMuY2FyZE1pbldpZHRoKSYmKHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPWByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoJHt0aGlzLmNhcmRNaW5XaWR0aH1weCwgMWZyKSlgKX1uZ09uQ2hhbmdlcyhlKXtpZihlLmNhcmRNaW5XaWR0aCl7bGV0IGk9ZS5jYXJkTWluV2lkdGguY3VycmVudFZhbHVlO3RoaXMuaXNDYXJkV2lkdGhWYWxpZChpKT8odGhpcy5jYXJkTWluV2lkdGg9aSx0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj1gcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KCR7dGhpcy5jYXJkTWluV2lkdGh9cHgsIDFmcikpYCk6dGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49IiJ9fWlzQ2FyZFdpZHRoVmFsaWQoZSl7cmV0dXJuIGUmJmU+PTMzNSYmZTw9NzM1fXNob3dQYWdpbmF0aW9uSW5wdXQoZSl7cmV0dXJuIGV9aGFuZGxlUGFnZUNoYW5nZShlLGkpe2xldCByPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNjcm9sbFRvS2VlcFRhcmdldFBvc2l0aW9uKGkscil9LDApLHRoaXMucGFnZUluZGV4Q2hhbmdlZC5lbWl0KGUpfXNjcm9sbFRvS2VlcFRhcmdldFBvc2l0aW9uKGUsaSl7bGV0IHI9dGhpcy5jZGtTY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtyJiZyLnNjcm9sbFRvKDAsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtaStyLnNjcm9sbFRvcCl9dHJhY2tCeUNhcmRzKGUsaSl7cmV0dXJuIGkuY2FyZElkfW9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKGUpe2xldCBpPWUudGFyZ2V0O2lmKCJpbnB1dCI9PT1lLnR5cGUmJiIiPT09aS52YWx1ZSlyZXR1cm47bGV0IHI9TnVtYmVyKGkudmFsdWUpLTEsbz1NYXRoLm1pbihNYXRoLm1heCgwLHIpLHRoaXMubnVtUGFnZXMtMSk7aS52YWx1ZSE9PVN0cmluZyhvKzEpJiYoaS52YWx1ZT1TdHJpbmcobysxKSksdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKG8saSl9b25GdWxsV2lkdGhDaGFuZ2VkKGUsaSl7aT90aGlzLmNhcmRzQXRGdWxsV2lkdGguYWRkKGUpOnRoaXMuY2FyZHNBdEZ1bGxXaWR0aC5kZWxldGUoZSl9b25GdWxsSGVpZ2h0Q2hhbmdlZChlLGkpe2k/dGhpcy5jYXJkc0F0RnVsbEhlaWdodC5hZGQoZSk6dGhpcy5jYXJkc0F0RnVsbEhlaWdodC5kZWxldGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQnUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudCJdXSxpbnB1dHM6e2lzR3JvdXBFeHBhbmRlZDoiaXNHcm91cEV4cGFuZGVkIixwYWdlSW5kZXg6InBhZ2VJbmRleCIsbnVtUGFnZXM6Im51bVBhZ2VzIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixjYXJkTWluV2lkdGg6ImNhcmRNaW5XaWR0aCIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLHNob3dQYWdpbmF0aW9uQ29udHJvbHM6InNob3dQYWdpbmF0aW9uQ29udHJvbHMiLGNhcmRTdGF0ZU1hcDoiY2FyZFN0YXRlTWFwIn0sb3V0cHV0czp7cGFnZUluZGV4Q2hhbmdlZDoicGFnZUluZGV4Q2hhbmdlZCJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6Myx2YXJzOjEsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgc2V0cyBhIGdyb3VwIHRvIHRoZSBwcmV2aW91cyBwYWdlLuKQnzU3NWU3ODJmZDI3ZjJlZTcwYTAzNGE3NzVlZmU5YWQxNjI0NzIyNTDikJ8zNjI5OTYwNTQ0ODc1MzYwMDQ2OlByZXZpb3VzIHBhZ2VgLGU9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgbmV4dCBwYWdlLuKQn2NlM2NlZmIxY2QwMDk5YWE1MDAzZGRhMTZlYzllYjIxZmQ4YmE3ODnikJ8zMzM3MzAxNjk0MjEwMjg3NTk1Ok5leHQgcGFnZWAsW1s0LCJuZ0lmIl0sWyJncm91cENvbnRyb2xzIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjYXJkLWdyaWQiXSxbImNsYXNzIiwiY2FyZC1zcGFjZSIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsImNhcmQtc3BhY2UiLDMsIm5nQ2xhc3MiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsImNhcmRPYnNlcnZlciIsImNhcmRMYXp5TG9hZGVyIiwiZnVsbFdpZHRoQ2hhbmdlZCIsImZ1bGxIZWlnaHRDaGFuZ2VkIl0sWyJjbGFzcyIsImdyb3VwLWNvbnRyb2xzIiw0LCJuZ0lmIl0sWzEsImdyb3VwLWNvbnRyb2xzIl0sWzEsInByZXYtY29udGFpbmVyIl0sWyJjbGFzcyIsInByZXYgcGFnaW5hdGlvbi1idXR0b24iLCJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImlucHV0LWFuZC1uZXh0LWNvbnRhaW5lciJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwicHJldiIsInBhZ2luYXRpb24tYnV0dG9uIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJjbGFzcyIsInBhZ2luYXRpb24taW5wdXQiLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsIm5leHQiLCJwYWdpbmF0aW9uLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJwYWdpbmF0aW9uLWlucHV0Il0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsMywidmFsdWUiLCJtYXgiLCJpbnB1dCIsImNoYW5nZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsRDNlLDUsMTAsImRpdiIsMCksUygxLFAzZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDEsWnQpKSwyJmUmJl8oIm5nSWYiLGkuaXNHcm91cEV4cGFuZGVkKX0sZGVwZW5kZW5jaWVzOltDUSx1bmUsYm4sZG4sRmUsTW8sRm5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29udGFpbjpjb250ZW50fS5jYXJkLWdyaWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDMzNXB4LCAxZnIpKTtnYXA6MTZweDtwYWRkaW5nOjE2cHh9LmNhcmQtc3BhY2UuZnVsbC13aWR0aFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1jb2x1bW4tc3RhcnQ6MTtncmlkLWNvbHVtbi1lbmQ6LTF9LmNhcmQtc3BhY2UuZnVsbC1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6NDgwcHh9LmNhcmQtc3BhY2UuZnVsbC1oZWlnaHRbX25nY29udGVudC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX1jYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGFpbjpsYXlvdXQgcGFpbnQ7ZGlzcGxheTpibG9jazttaW4taGVpZ2h0OjMyMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6Y2VudGVyO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1vZi10eXBle3BhZGRpbmctdG9wOjE2cHh9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LW9mLXR5cGV7cGFkZGluZy1ib3R0b206MTZweH0ucHJldi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktc2VsZjpmbGV4LXN0YXJ0fS5pbnB1dC1hbmQtbmV4dC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktc2VsZjpmbGV4LWVuZH0ucGFnaW5hdGlvbi1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjE2cHh9LnBhZ2luYXRpb24taW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdH0ucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNzU3NTc1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWQsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6IzYxNjE2MX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFNfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZ3JvdXBOYW1lPW51bGwsdGhpcy5ncm91cE5hbWUkPW5ldyBSaShudWxsKSx0aGlzLnBhZ2VJbmRleCQ9bmV3IFJpKDApLHRoaXMuaXRlbXMkPW5ldyBSaShbXSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBBZSx0aGlzLmNhcmRTdGF0ZU1hcCQ9dGhpcy5zdG9yZS5zZWxlY3QoanMpLHRoaXMubnVtUGFnZXMkPXVuKFt0aGlzLml0ZW1zJCx0aGlzLnN0b3JlLnNlbGVjdChCYS5nZXRQYWdlU2l6ZSldKS5waXBlKFUoKFtpLHJdKT0+TWF0aC5jZWlsKGkubGVuZ3RoL3IpKSksdGhpcy5pc0dyb3VwRXhwYW5kZWQkPXRoaXMuZ3JvdXBOYW1lJC5waXBlKHlpKGk9Pm51bGwhPT1pP3RoaXMuc3RvcmUuc2VsZWN0KHAxLGkpOnF0KCEwKSkpLHRoaXMuc2hvd1BhZ2luYXRpb25Db250cm9scyQ9dGhpcy5udW1QYWdlcyQucGlwZShVKGk9Pmk+MSkpLHRoaXMubm9ybWFsaXplZFBhZ2VJbmRleCQ9dW4oW3RoaXMucGFnZUluZGV4JCx0aGlzLm51bVBhZ2VzJF0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxWdCgoW2kscl0pPT57MCE9PXImJihpPj1yP3RoaXMucGFnZUluZGV4JC5uZXh0KHItMSk6aTwwJiZ0aGlzLnBhZ2VJbmRleCQubmV4dCgwKSl9KSxVKChbaSxyXSk9Pk1hdGgubWluKE1hdGgubWF4KGksMCksci0xKSksRWEoMSkpLHRoaXMucGFnZWRJdGVtcyQ9dW4oW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KEJhLmdldFBhZ2VTaXplKSx0aGlzLm5vcm1hbGl6ZWRQYWdlSW5kZXgkLHRoaXMuaXNHcm91cEV4cGFuZGVkJF0pLnBpcGUoVSgoW2kscixvLGFdKT0+aS5zbGljZShyKm8scipvKyhhP3I6MCkpKSksdGhpcy5jYXJkTWluV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KHJnKX1uZ09uQ2hhbmdlcyhlKXtlLmNhcmRJZHNXaXRoTWV0YWRhdGEmJnRoaXMuaXRlbXMkLm5leHQodGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhKSxlLmdyb3VwTmFtZSYmdGhpcy5ncm91cE5hbWUkLm5leHQodGhpcy5ncm91cE5hbWUpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1vblBhZ2VJbmRleENoYW5nZWQoZSl7dGhpcy5wYWdlSW5kZXgkLm5leHQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZCJdXSxpbnB1dHM6e2dyb3VwTmFtZToiZ3JvdXBOYW1lIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6OCx2YXJzOjIyLGNvbnN0czpbWzMsImlzR3JvdXBFeHBhbmRlZCIsInBhZ2VJbmRleCIsIm51bVBhZ2VzIiwic2hvd1BhZ2luYXRpb25Db250cm9scyIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkTWluV2lkdGgiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkU3RhdGVNYXAiLCJwYWdlSW5kZXhDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiLDApLEQoInBhZ2VJbmRleENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGFnZUluZGV4Q2hhbmdlZChvKX0pLEcoMSwiYXN5bmMiKSxHKDIsImFzeW5jIiksRygzLCJhc3luYyIpLEcoNCwiYXN5bmMiKSxHKDUsImFzeW5jIiksRyg2LCJhc3luYyIpLEcoNywiYXN5bmMiKSxnKCkpLDImZSYmXygiaXNHcm91cEV4cGFuZGVkIixXKDEsOCxpLmlzR3JvdXBFeHBhbmRlZCQpKSgicGFnZUluZGV4IixXKDIsMTAsaS5ub3JtYWxpemVkUGFnZUluZGV4JCkpKCJudW1QYWdlcyIsVygzLDEyLGkubnVtUGFnZXMkKSkoInNob3dQYWdpbmF0aW9uQ29udHJvbHMiLFcoNCwxNCxpLnNob3dQYWdpbmF0aW9uQ29udHJvbHMkKSkoImNhcmRJZHNXaXRoTWV0YWRhdGEiLFcoNSwxNixpLnBhZ2VkSXRlbXMkKSkoImNhcmRNaW5XaWR0aCIsVyg2LDE4LGkuY2FyZE1pbldpZHRoJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSgiY2FyZFN0YXRlTWFwIixXKDcsMjAsaS5jYXJkU3RhdGVNYXAkKSl9LGRlcGVuZGVuY2llczpbcG5lLGx0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBOM2Uobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDcpLFQoMSksRygyLCJudW1iZXIiKSxnKCkpLDImbil7bGV0IGU9dygpO2IoMSksemUoIiIsVygyLDEsZS5udW1iZXJPZkNhcmRzKSwiIGNhcmRzIil9fWZ1bmN0aW9uIEIzZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsOCl9ZnVuY3Rpb24gVjNlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw5KX12YXIgZm5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmdyb3VwRXhwYW5zaW9uVG9nZ2xlZD1uZXcgTH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXItY29tcG9uZW50Il1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLG51bWJlck9mQ2FyZHM6Im51bWJlck9mQ2FyZHMiLGlzR3JvdXBFeHBhbmRlZDoiaXNHcm91cEV4cGFuZGVkIn0sb3V0cHV0czp7Z3JvdXBFeHBhbnNpb25Ub2dnbGVkOiJncm91cEV4cGFuc2lvblRvZ2dsZWQifSxkZWNsczo5LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgYWxsb3dzIHVzZXIgdG8gZXhwYW5kIGEgdGFnIGdyb3VwLuKQn2ZmYWExMTQ3MWI4NzhhNmRmZmUyZTY4YzZmMzcwNjRhOWUwNzQ4NTPikJ81Mzg2MDU0MzI1Mjc0Nzc5MjU4OkV4cGFuZCBncm91cGAsW1siYXJpYS1sYWJlbCIsdCwxLCJncm91cC10b29sYmFyIiwzLCJjbGljayJdLFsxLCJncm91cC10aXRsZS13cmFwcGVyIl0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIiwzLCJ0aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzEsImV4cGFuZC1ncm91cC1pY29uIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJleHBhbmRNb3JlIiwiIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Il0sWyJzdmdJY29uIiwiZXhwYW5kX21vcmVfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImJ1dHRvbiIsMCksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkLmVtaXQoKX0pLGgoMSwic3BhbiIsMSkoMiwic3BhbiIsMiksVCgzKSxnKCksUyg0LE4zZSwzLDMsInNwYW4iLDMpLGcoKSxoKDUsInNwYW4iLDQpLFMoNixCM2UsMSwwLCJtYXQtaWNvbiIsNSksUyg3LFYzZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDYsWnQpLGcoKSgpKSwyJmUpe2xldCByPXR0KDgpO2IoMiksSmkoInRpdGxlIixpLmdyb3VwTmFtZSksYigxKSx1dChpLmdyb3VwTmFtZSksYigxKSxfKCJuZ0lmIixpLm51bWJlck9mQ2FyZHM+MSksYigyKSxfKCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbRmUsRG4sUHNdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9W19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2NvbG9yOiMyMTIxMjE7dG9wOi0xcHg7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7Zm9udDppbmhlcml0fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5jYXJkLWdyb3VwOmZpcnN0LW9mLXR5cGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MH1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM2MTYxNjF9Lmdyb3VwLXRpdGxlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO3RleHQtYWxpZ246bGVmdH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksbW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZ3JvdXBOYW1lPW51bGwsdGhpcy5pc0dyb3VwRXhwYW5kZWQkPXF0KCExKX1uZ09uSW5pdCgpe3RoaXMuaXNHcm91cEV4cGFuZGVkJD1udWxsIT09dGhpcy5ncm91cE5hbWU/dGhpcy5zdG9yZS5zZWxlY3QocDEsdGhpcy5ncm91cE5hbWUpOnF0KCExKX1vbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpe2lmKG51bGw9PT10aGlzLmdyb3VwTmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiBleHBhbnNpb24gY2Fubm90IGJlIHRvZ2dsZWQgd2hlbiBncm91cE5hbWUgaXMgbnVsbCIpO3RoaXMuc3RvcmUuZGlzcGF0Y2goTlQoe3RhZ0dyb3VwOnRoaXMuZ3JvdXBOYW1lfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXIiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsbnVtYmVyT2ZDYXJkczoibnVtYmVyT2ZDYXJkcyJ9LGRlY2xzOjIsdmFyczo1LGNvbnN0czpbWzMsIm51bWJlck9mQ2FyZHMiLCJpc0dyb3VwRXhwYW5kZWQiLCJncm91cE5hbWUiLCJncm91cEV4cGFuc2lvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1ldHJpY3MtY2FyZC1ncm91cC10b29sYmFyLWNvbXBvbmVudCIsMCksRCgiZ3JvdXBFeHBhbnNpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl9KSxHKDEsImFzeW5jIiksZygpKSwyJmUmJl8oIm51bWJlck9mQ2FyZHMiLGkubnVtYmVyT2ZDYXJkcykoImlzR3JvdXBFeHBhbmRlZCIsVygxLDMsaS5pc0dyb3VwRXhwYW5kZWQkKSkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpfSxkZXBlbmRlbmNpZXM6W2ZuZSxsdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gVTNlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDEpLFAoMSwibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXIiLDIpKDIsIm1ldHJpY3MtY2FyZC1ncmlkIiwzKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCk7YigxKSxfKCJudW1iZXJPZkNhcmRzIixlLml0ZW1zLmxlbmd0aCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpLGIoMSksXygiY2FyZElkc1dpdGhNZXRhZGF0YSIsZS5pdGVtcykoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKX19dmFyIGhuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5QbHVnaW5UeXBlPXFufXRyYWNrQnlHcm91cChlLGkpe3JldHVybiBpLmdyb3VwTmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQiXV0saW5wdXRzOntjYXJkR3JvdXBzOiJjYXJkR3JvdXBzIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjEsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsImNhcmQtZ3JvdXAiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLWdyb3VwIl0sWzMsIm51bWJlck9mQ2FyZHMiLCJncm91cE5hbWUiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsImdyb3VwTmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUygwLFUzZSwzLDUsImRpdiIsMCksMiZlJiZfKCJuZ0Zvck9mIixpLmNhcmRHcm91cHMpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeUdyb3VwKX0sZGVwZW5kZW5jaWVzOltkbixTXyxtbmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxnbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jYXJkR3JvdXBzJD10aGlzLnN0b3JlLnNlbGVjdChRZikucGlwZShWaSh0aGlzLnN0b3JlLnNlbGVjdCh3YykpLFUoKFtpLHJdKT0+ci5zaXplP2kuZmlsdGVyKG89PnIuaGFzKG8ucGx1Z2luKSk6aSksVShpPT5VVChpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwcyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbMywiY2FyZEdyb3VwcyIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwibWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQiLDApLEcoMSwiYXN5bmMiKSksMiZlJiZfKCJjYXJkR3JvdXBzIixXKDEsMixpLmNhcmRHcm91cHMkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W2huZSxsdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gVzNlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO2IoMSksemUoIiBhbmQgIixlLmdldFBsdWdpblR5cGVGaWx0ZXJTdHJpbmcoZS5wbHVnaW5UeXBlcyksIiB2aXN1YWxpemF0aW9uIGZpbHRlciIpfX12YXIgX25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9cW4sdGhpcy5saXN0Rm9ybWF0dGVyPW5ldyBJbnRsLkxpc3RGb3JtYXQodm9pZCAwLHtzdHlsZToibG9uZyIsdHlwZToiZGlzanVuY3Rpb24ifSl9Z2V0UGx1Z2luVHlwZUZpbHRlclN0cmluZyhlKXtsZXQgaT1bLi4uZV0ubWFwKHI9Pntzd2l0Y2gocil7Y2FzZSBxbi5TQ0FMQVJTOnJldHVybiJzY2FsYXIiO2Nhc2UgcW4uSU1BR0VTOnJldHVybiJpbWFnZSI7Y2FzZSBxbi5ISVNUT0dSQU1TOnJldHVybiJoaXN0b2dyYW0iO2RlZmF1bHQ6dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBsZWFzZSBpbXBsZW1lbnQgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgcGx1Z2luIHR5cGU6ICR7cn1gKX19KTtyZXR1cm4gdGhpcy5saXN0Rm9ybWF0dGVyLmZvcm1hdChpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1lbXB0eS10YWctbWF0Y2gtY29tcG9uZW50Il1dLGlucHV0czp7cGx1Z2luVHlwZXM6InBsdWdpblR5cGVzIix0YWdGaWx0ZXJSZWdleDoidGFnRmlsdGVyUmVnZXgiLHRhZ0NvdW50czoidGFnQ291bnRzIn0sZGVjbHM6Nix2YXJzOjUsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFQoMCwiTm8gbWF0Y2hlcyBmb3IgdGFnIGZpbHRlciAiKSxoKDEsImNvZGUiKSxUKDIpLGcoKSxTKDMsVzNlLDIsMSwic3BhbiIsMCksVCg0KSxHKDUsIm51bWJlciIpKSwyJmUmJihiKDIpLHplKCIvIixpLnRhZ0ZpbHRlclJlZ2V4LCIvIiksYigxKSxfKCJuZ0lmIixpLnBsdWdpblR5cGVzLnNpemUpLGIoMSksemUoIiBvdXQgb2YgIixXKDUsMyxpLnRhZ0NvdW50cyksIiB0YWdzLiIpKX0sZGVwZW5kZW5jaWVzOltGZSxQc10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucGx1Z2luVHlwZXMkPXRoaXMuc3RvcmUuc2VsZWN0KHdjKSx0aGlzLnRhZ0ZpbHRlclJlZ2V4JD10aGlzLnN0b3JlLnNlbGVjdChJbCksdGhpcy50YWdDb3VudHMkPXRoaXMuc3RvcmUuc2VsZWN0KFFmKS5waXBlKFUoaT0+bmV3IFNldChpLm1hcCgoe3RhZzpyfSk9PnIpKS5zaXplKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJwbHVnaW5UeXBlcyIsInRhZ0ZpbHRlclJlZ2V4IiwidGFnQ291bnRzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaC1jb21wb25lbnQiLDApLEcoMSwiYXN5bmMiKSxHKDIsImFzeW5jIiksRygzLCJhc3luYyIpKSwyJmUmJl8oInBsdWdpblR5cGVzIixXKDEsMyxpLnBsdWdpblR5cGVzJCkpKCJ0YWdGaWx0ZXJSZWdleCIsVygyLDUsaS50YWdGaWx0ZXJSZWdleCQpKSgidGFnQ291bnRzIixXKDMsNyxpLnRhZ0NvdW50cyQpKX0sZGVwZW5kZW5jaWVzOltfbmUsbHRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFgzZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsNiksVCgxKSxHKDIsIm51bWJlciIpLGcoKSksMiZuKXtsZXQgZT13KCk7YigxKSx6ZSgiIixXKDIsMSxlLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoKSwiIGNhcmRzIil9fWZ1bmN0aW9uIFEzZShuLHQpezEmbiYmUCgwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCIsNyl9dmFyIGJuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7aXNFbXB0eU1hdGNoOiJpc0VtcHR5TWF0Y2giLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIn0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwiZ3JvdXAtdG9vbGJhciJdLFsxLCJncm91cC10ZXh0Il0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbImNsYXNzIiwid2FybiIsNCwibmdJZiJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbMSwid2FybiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJzcGFuIiwxKSgyLCJzcGFuIiwyKSxUKDMsIlRhZ3MgbWF0Y2hpbmcgZmlsdGVyIiksZygpLFMoNCxYM2UsMywzLCJzcGFuIiwzKSxnKCkoKSxTKDUsUTNlLDEsMCwibWV0cmljcy1lbXB0eS10YWctbWF0Y2giLDQpLFAoNiwibWV0cmljcy1jYXJkLWdyaWQiLDUpKSwyJmUmJihiKDQpLF8oIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGg+MSksYigxKSxfKCJuZ0lmIixpLmlzRW1wdHlNYXRjaCksYigxKSxfKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSl9LGRlcGVuZGVuY2llczpbRmUsU18seW5lLFBzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1tZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweDtmb250LXN0eWxlOml0YWxpYztwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHZuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkPXRoaXMuc3RvcmUuc2VsZWN0KFFmKS5waXBlKFZpKHRoaXMuc3RvcmUuc2VsZWN0KHdjKSksVSgoW2kscl0pPT5yLnNpemU/aS5maWx0ZXIobz0+ci5oYXMoby5wbHVnaW4pKTppKSxWaSh0aGlzLnN0b3JlLnNlbGVjdChJbCkpLENyKDIwMCksVSgoW2kscl0pPT57dHJ5e3JldHVybntjYXJkTGlzdDppLHJlZ2V4Om5ldyBSZWdFeHAociwiaSIpfX1jYXRjaHtyZXR1cm57Y2FyZExpc3Q6aSxyZWdleDpudWxsfX19KSxWZSgoe3JlZ2V4Oml9KT0+bnVsbCE9PWkpLFUoKHtjYXJkTGlzdDppLHJlZ2V4OnJ9KT0+aS5maWx0ZXIoKHt0YWc6b30pPT5yLnRlc3QobykpKSx1aSgoaSxyKT0+aS5sZW5ndGg9PT1yLmxlbmd0aCYmaS5ldmVyeSgobyxhKT0+by5jYXJkSWQ9PT1yW2FdLmNhcmRJZCkpLFNhKCksTm4oW10pKSx0aGlzLmlzRW1wdHlNYXRjaCQ9dGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJC5waXBlKFZpKHRoaXMuc3RvcmUuc2VsZWN0KFFmKSksVSgoW2kscl0pPT5Cb29sZWFuKHIubGVuZ3RoKSYmMD09PWkubGVuZ3RoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWZpbHRlcmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzMsImlzRW1wdHlNYXRjaCIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiLDApLEcoMSwiYXN5bmMiKSxHKDIsImFzeW5jIikpLDImZSYmXygiaXNFbXB0eU1hdGNoIixXKDEsMyxpLmlzRW1wdHlNYXRjaCQpKSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsVygyLDUsaS5jYXJkSWRzV2l0aE1ldGFkYXRhJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKX0sZGVwZW5kZW5jaWVzOltibmUsbHRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLCQzZT1bInBhbmVsIl0sZUJlPShqaSgicGFuZWxBbmltYXRpb24iLFtKbigidm9pZCwgaGlkZGVuIixCdCh7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGVZKDAuOCkifSkpLFduKCI6ZW50ZXIsIGhpZGRlbiA9PiB2aXNpYmxlIixbR3koW0tuKCIwLjAzcyBsaW5lYXIiLEJ0KHtvcGFjaXR5OjF9KSksS24oIjAuMTJzIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixCdCh7dHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpXSldKSxXbigiOmxlYXZlLCB2aXNpYmxlID0+IGhpZGRlbiIsW0tuKCIwLjA3NXMgbGluZWFyIixCdCh7b3BhY2l0eTowfSkpXSldKSwwKSx0QmU9UW8oY2xhc3N7fSkseG5lPW5ldyBpZSgibWF0LWF1dG9jb21wbGV0ZS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2F1dG9BY3RpdmVGaXJzdE9wdGlvbjohMSxhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiExLGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I6ITF9fX0pLENuZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdEJle2dldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVuJiZ0aGlzLnNob3dQYW5lbH1fc2V0Q29sb3IoZSl7dGhpcy5fY29sb3I9ZSx0aGlzLl9zZXRUaGVtZUNsYXNzZXModGhpcy5fY2xhc3NMaXN0KX1nZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbn1zZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKGUpe3RoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj1VdChlKX1nZXQgYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbigpe3JldHVybiB0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9ufXNldCBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uKGUpe3RoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb249VXQoZSl9c2V0IGNsYXNzTGlzdChlKXt0aGlzLl9jbGFzc0xpc3Q9ZSYmZS5sZW5ndGg/ZnVuY3Rpb24obix0PS9ccysvKXtsZXQgZT1bXTtpZihudWxsIT1uKXtsZXQgaT1BcnJheS5pc0FycmF5KG4pP246YCR7bn1gLnNwbGl0KHQpO2ZvcihsZXQgciBvZiBpKXtsZXQgbz1gJHtyfWAudHJpbSgpO28mJmUucHVzaChvKX19cmV0dXJuIGV9KGUpLnJlZHVjZSgoaSxyKT0+KGlbcl09ITAsaSkse30pOnt9LHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fc2V0VGhlbWVDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZT0iIn1jb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RlZmF1bHRzPXIsdGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcz15bi5FTVBUWSx0aGlzLnNob3dQYW5lbD0hMSx0aGlzLl9pc09wZW49ITEsdGhpcy5kaXNwbGF5V2l0aD1udWxsLHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj0hIXRoaXMuX2RlZmF1bHRzLmF1dG9BY3RpdmVGaXJzdE9wdGlvbix0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9uPSEhdGhpcy5fZGVmYXVsdHMuYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbix0aGlzLm9wdGlvblNlbGVjdGVkPW5ldyBMLHRoaXMub3BlbmVkPW5ldyBMLHRoaXMuY2xvc2VkPW5ldyBMLHRoaXMub3B0aW9uQWN0aXZhdGVkPW5ldyBMLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLmlkPSJtYXQtYXV0b2NvbXBsZXRlLSIrZUJlKyssdGhpcy5pbmVydEdyb3Vwcz1vPy5TQUZBUkl8fCExfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IGhnKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPXRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5pc09wZW4mJnRoaXMub3B0aW9uQWN0aXZhdGVkLmVtaXQoe3NvdXJjZTp0aGlzLG9wdGlvbjp0aGlzLm9wdGlvbnMudG9BcnJheSgpW2VdfHxudWxsfSl9KSx0aGlzLl9zZXRWaXNpYmlsaXR5KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpfV9zZXRTY3JvbGxUb3AoZSl7dGhpcy5wYW5lbCYmKHRoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9ZSl9X2dldFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLnBhbmVsP3RoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A6MH1fc2V0VmlzaWJpbGl0eSgpe3RoaXMuc2hvd1BhbmVsPSEhdGhpcy5vcHRpb25zLmxlbmd0aCx0aGlzLl9zZXRWaXNpYmlsaXR5Q2xhc3Nlcyh0aGlzLl9jbGFzc0xpc3QpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9lbWl0U2VsZWN0RXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLm9wdGlvbj1lfX0odGhpcyxlKTt0aGlzLm9wdGlvblNlbGVjdGVkLmVtaXQoaSl9X2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoZSl7cmV0dXJuIHRoaXMuYXJpYUxhYmVsP251bGw6dGhpcy5hcmlhTGFiZWxsZWRieT8oZT9lKyIgIjoiIikrdGhpcy5hcmlhTGFiZWxsZWRieTplfV9zZXRWaXNpYmlsaXR5Q2xhc3NlcyhlKXtlW3RoaXMuX3Zpc2libGVDbGFzc109dGhpcy5zaG93UGFuZWwsZVt0aGlzLl9oaWRkZW5DbGFzc109IXRoaXMuc2hvd1BhbmVsfV9zZXRUaGVtZUNsYXNzZXMoZSl7ZVsibWF0LXByaW1hcnkiXT0icHJpbWFyeSI9PT10aGlzLl9jb2xvcixlWyJtYXQtd2FybiJdPSJ3YXJuIj09PXRoaXMuX2NvbG9yLGVbIm1hdC1hY2NlbnQiXT0iYWNjZW50Ij09PXRoaXMuX2NvbG9yfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEZ0KSxDKGJlKSxDKHhuZSksQygkbikpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFllKFNpLDcpLFllKCQzZSw1KSksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS50ZW1wbGF0ZT1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS5wYW5lbD1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLGF1dG9BY3RpdmVGaXJzdE9wdGlvbjoiYXV0b0FjdGl2ZUZpcnN0T3B0aW9uIixhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiJhdXRvU2VsZWN0QWN0aXZlT3B0aW9uIixwYW5lbFdpZHRoOiJwYW5lbFdpZHRoIixjbGFzc0xpc3Q6WyJjbGFzcyIsImNsYXNzTGlzdCJdfSxvdXRwdXRzOntvcHRpb25TZWxlY3RlZDoib3B0aW9uU2VsZWN0ZWQiLG9wZW5lZDoib3BlbmVkIixjbG9zZWQ6ImNsb3NlZCIsb3B0aW9uQWN0aXZhdGVkOiJvcHRpb25BY3RpdmF0ZWQifSxmZWF0dXJlczpbTGVdfSksbn0pKCksaUJlPXtwcm92aWRlOkhyLHVzZUV4aXN0aW5nOlZuKCgpPT5vQmUpLG11bHRpOiEwfSxNbmU9bmV3IGllKCJtYXQtYXV0b2NvbXBsZXRlLXNjcm9sbC1zdHJhdGVneSIpLHduZT17cHJvdmlkZTpNbmUsZGVwczpbT2ldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxaVj0oKCk9PntjbGFzcyBue2dldCBhdXRvY29tcGxldGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1zZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQoZSl7dGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWQ9VXQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjLGQsdSxwKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fb3ZlcmxheT1pLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9cix0aGlzLl96b25lPW8sdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9YSx0aGlzLl9kaXI9bCx0aGlzLl9mb3JtRmllbGQ9Yyx0aGlzLl9kb2N1bWVudD1kLHRoaXMuX3ZpZXdwb3J0UnVsZXI9dSx0aGlzLl9kZWZhdWx0cz1wLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZD0hMSx0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZD0hMSx0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWw9ITEsdGhpcy5fdmlld3BvcnRTdWJzY3JpcHRpb249eW4uRU1QVFksdGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPSEwLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW09bmV3IEFlLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyPSgpPT57dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPXRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR8fHRoaXMucGFuZWxPcGVufSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLnBvc2l0aW9uPSJhdXRvIix0aGlzLmF1dG9jb21wbGV0ZUF0dHJpYnV0ZT0ib2ZmIix0aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITEsdGhpcy5vcHRpb25TZWxlY3Rpb25zPUthKCgpPT57bGV0IGY9dGhpcy5hdXRvY29tcGxldGU/dGhpcy5hdXRvY29tcGxldGUub3B0aW9uczpudWxsO3JldHVybiBmP2YuY2hhbmdlcy5waXBlKE5uKGYpLHlpKCgpPT5jbiguLi5mLm1hcChtPT5tLm9uU2VsZWN0aW9uQ2hhbmdlKSkpKTp0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoenQoMSkseWkoKCk9PnRoaXMub3B0aW9uU2VsZWN0aW9ucykpfSksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9c31uZ0FmdGVyVmlld0luaXQoKXtsZXQgZT10aGlzLl9nZXRXaW5kb3coKTt0eXBlb2YgZTwidSImJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmUuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXIpKX1uZ09uQ2hhbmdlcyhlKXtlLnBvc2l0aW9uJiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiYodGhpcy5fc2V0U3RyYXRlZ3lQb3NpdGlvbnModGhpcy5fcG9zaXRpb25TdHJhdGVneSksdGhpcy5wYW5lbE9wZW4mJnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9nZXRXaW5kb3coKTt0eXBlb2YgZTwidSImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXIpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSEwLHRoaXMuX2Rlc3Ryb3lQYW5lbCgpLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW0uY29tcGxldGUoKX1nZXQgcGFuZWxPcGVuKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlBdHRhY2hlZCYmdGhpcy5hdXRvY29tcGxldGUuc2hvd1BhbmVsfW9wZW5QYW5lbCgpe3RoaXMuX2F0dGFjaE92ZXJsYXkoKSx0aGlzLl9mbG9hdExhYmVsKCl9Y2xvc2VQYW5lbCgpe3RoaXMuX3Jlc2V0TGFiZWwoKSx0aGlzLl9vdmVybGF5QXR0YWNoZWQmJih0aGlzLnBhbmVsT3BlbiYmdGhpcy5fem9uZS5ydW4oKCk9Pnt0aGlzLmF1dG9jb21wbGV0ZS5jbG9zZWQuZW1pdCgpfSksdGhpcy5hdXRvY29tcGxldGUuX2lzT3Blbj10aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITEsdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsLHRoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSYmKHRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSksdGhpcy5fY29tcG9uZW50RGVzdHJveWVkfHx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fb3ZlcmxheUF0dGFjaGVkJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9Z2V0IHBhbmVsQ2xvc2luZ0FjdGlvbnMoKXtyZXR1cm4gY24odGhpcy5vcHRpb25TZWxlY3Rpb25zLHRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLnRhYk91dC5waXBlKFZlKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLHRoaXMuX2dldE91dHNpZGVDbGlja1N0cmVhbSgpLHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpLnBpcGUoVmUoKCk9PnRoaXMuX292ZXJsYXlBdHRhY2hlZCkpOnF0KCkpLnBpcGUoVShlPT5lIGluc3RhbmNlb2YgYmc/ZTpudWxsKSl9Z2V0IGFjdGl2ZU9wdGlvbigpe3JldHVybiB0aGlzLmF1dG9jb21wbGV0ZSYmdGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXI/dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbTpudWxsfV9nZXRPdXRzaWRlQ2xpY2tTdHJlYW0oKXtyZXR1cm4gY24oYWkodGhpcy5fZG9jdW1lbnQsImNsaWNrIiksYWkodGhpcy5fZG9jdW1lbnQsImF1eGNsaWNrIiksYWkodGhpcy5fZG9jdW1lbnQsInRvdWNoZW5kIikpLnBpcGUoVmUoZT0+e2xldCBpPWRzKGUpLHI9dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGwsbz10aGlzLmNvbm5lY3RlZFRvP3RoaXMuY29ubmVjdGVkVG8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGw7cmV0dXJuIHRoaXMuX292ZXJsYXlBdHRhY2hlZCYmaSE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCYmKCFyfHwhci5jb250YWlucyhpKSkmJighb3x8IW8uY29udGFpbnMoaSkpJiYhIXRoaXMuX292ZXJsYXlSZWYmJiF0aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGkpfSkpfXdyaXRlVmFsdWUoZSl7UHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCk9PnRoaXMuX2Fzc2lnbk9wdGlvblZhbHVlKGUpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX29uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5fb25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQ9ZX1faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGUscj15cihlKTtpZigyNz09PWkmJiFyJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5hY3RpdmVPcHRpb24mJjEzPT09aSYmdGhpcy5wYW5lbE9wZW4mJiFyKXRoaXMuYWN0aXZlT3B0aW9uLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHRoaXMuX3Jlc2V0QWN0aXZlSXRlbSgpLGUucHJldmVudERlZmF1bHQoKTtlbHNlIGlmKHRoaXMuYXV0b2NvbXBsZXRlKXtsZXQgbz10aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLGE9Mzg9PT1pfHw0MD09PWk7OT09PWl8fGEmJiFyJiZ0aGlzLnBhbmVsT3Blbj90aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5vbktleWRvd24oZSk6YSYmdGhpcy5fY2FuT3BlbigpJiZ0aGlzLm9wZW5QYW5lbCgpLChhfHx0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtIT09bykmJih0aGlzLl9zY3JvbGxUb09wdGlvbih0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXh8fDApLHRoaXMuYXV0b2NvbXBsZXRlLmF1dG9TZWxlY3RBY3RpdmVPcHRpb24mJnRoaXMuYWN0aXZlT3B0aW9uJiYodGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbnx8KHRoaXMuX3ZhbHVlQmVmb3JlQXV0b1NlbGVjdGlvbj10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUpLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249dGhpcy5hY3RpdmVPcHRpb24sdGhpcy5fYXNzaWduT3B0aW9uVmFsdWUodGhpcy5hY3RpdmVPcHRpb24udmFsdWUpKSl9fV9oYW5kbGVJbnB1dChlKXtsZXQgaT1lLnRhcmdldCxyPWkudmFsdWU7Im51bWJlciI9PT1pLnR5cGUmJihyPSIiPT1yP251bGw6cGFyc2VGbG9hdChyKSksdGhpcy5fcHJldmlvdXNWYWx1ZSE9PXImJih0aGlzLl9wcmV2aW91c1ZhbHVlPXIsdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsLHRoaXMuX29uQ2hhbmdlKHIpLHRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWUudGFyZ2V0JiZ0aGlzLm9wZW5QYW5lbCgpKX1faGFuZGxlRm9jdXMoKXt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM/dGhpcy5fY2FuT3BlbigpJiYodGhpcy5fcHJldmlvdXNWYWx1ZT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5fYXR0YWNoT3ZlcmxheSgpLHRoaXMuX2Zsb2F0TGFiZWwoITApKTp0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITB9X2hhbmRsZUNsaWNrKCl7dGhpcy5fY2FuT3BlbigpJiYhdGhpcy5wYW5lbE9wZW4mJnRoaXMub3BlblBhbmVsKCl9X2Zsb2F0TGFiZWwoZT0hMSl7dGhpcy5fZm9ybUZpZWxkJiYiYXV0byI9PT10aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbCYmKGU/dGhpcy5fZm9ybUZpZWxkLl9hbmltYXRlQW5kTG9ja0xhYmVsKCk6dGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWw9ImFsd2F5cyIsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSEwKX1fcmVzZXRMYWJlbCgpe3RoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbCYmKHRoaXMuX2Zvcm1GaWVsZCYmKHRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsPSJhdXRvIiksdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSExKX1fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpe3JldHVybiBjbih0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoenQoMSkpLHRoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuY2hhbmdlcy5waXBlKFZ0KCgpPT50aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKSkseHMoMCkpKS5waXBlKHlpKCgpPT4odGhpcy5fem9uZS5ydW4oKCk9PntsZXQgcj10aGlzLnBhbmVsT3Blbjt0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLnBhbmVsT3BlbiYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHIhPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuP3RoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCk6dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKSl9KSx0aGlzLnBhbmVsQ2xvc2luZ0FjdGlvbnMpKSx6dCgxKSkuc3Vic2NyaWJlKHI9PnRoaXMuX3NldFZhbHVlQW5kQ2xvc2UocikpfV9kZXN0cm95UGFuZWwoKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5jbG9zZVBhbmVsKCksdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKX1fYXNzaWduT3B0aW9uVmFsdWUoZSl7bGV0IGk9dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoP3RoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKGUpOmU7dGhpcy5fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZShpPz8iIil9X3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUoZSl7dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZT1lOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT1lLHRoaXMuX3ByZXZpb3VzVmFsdWU9ZX1fc2V0VmFsdWVBbmRDbG9zZShlKXtsZXQgaT1lP2Uuc291cmNlOnRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb247aSYmKHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbihpKSx0aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShpLnZhbHVlKSx0aGlzLl9vbkNoYW5nZShpLnZhbHVlKSx0aGlzLmF1dG9jb21wbGV0ZS5fZW1pdFNlbGVjdEV2ZW50KGkpLHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKSx0aGlzLmNsb3NlUGFuZWwoKX1fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKGUpe3RoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuZm9yRWFjaChpPT57aSE9PWUmJmkuc2VsZWN0ZWQmJmkuZGVzZWxlY3QoKX0pfV9hdHRhY2hPdmVybGF5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZjtlPyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLGUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSkpOih0aGlzLl9wb3J0YWw9bmV3IEpvKHRoaXMuYXV0b2NvbXBsZXRlLnRlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYse2lkOnRoaXMuX2Zvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpfSksZT10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpLHRoaXMuX292ZXJsYXlSZWY9ZSx0aGlzLl9oYW5kbGVPdmVybGF5RXZlbnRzKGUpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJmUmJmUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSl9KSksZSYmIWUuaGFzQXR0YWNoZWQoKSYmKGUuYXR0YWNoKHRoaXMuX3BvcnRhbCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpKTtsZXQgaT10aGlzLnBhbmVsT3Blbjt0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSEwLHRoaXMuYXV0b2NvbXBsZXRlLl9zZXRDb2xvcih0aGlzLl9mb3JtRmllbGQ/LmNvbG9yKSx0aGlzLnBhbmVsT3BlbiYmaSE9PXRoaXMucGFuZWxPcGVuJiZ0aGlzLmF1dG9jb21wbGV0ZS5vcGVuZWQuZW1pdCgpfV9nZXRPdmVybGF5Q29uZmlnKCl7cmV0dXJuIG5ldyBXcyh7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9nZXRPdmVybGF5UG9zaXRpb24oKSxzY3JvbGxTdHJhdGVneTp0aGlzLl9zY3JvbGxTdHJhdGVneSgpLHdpZHRoOnRoaXMuX2dldFBhbmVsV2lkdGgoKSxkaXJlY3Rpb246dGhpcy5fZGlyPz92b2lkIDAscGFuZWxDbGFzczp0aGlzLl9kZWZhdWx0cz8ub3ZlcmxheVBhbmVsQ2xhc3N9KX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0Q29ubmVjdGVkRWxlbWVudCgpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSk7cmV0dXJuIHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKGUpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ZSxlfV9zZXRTdHJhdGVneVBvc2l0aW9ucyhlKXtsZXQgYSxpPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToidG9wIn1dLHI9dGhpcy5fYWJvdmVDbGFzcyxvPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOnJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSIscGFuZWxDbGFzczpyfV07YT0iYWJvdmUiPT09dGhpcy5wb3NpdGlvbj9vOiJiZWxvdyI9PT10aGlzLnBvc2l0aW9uP2k6Wy4uLmksLi4ub10sZS53aXRoUG9zaXRpb25zKGEpfV9nZXRDb25uZWN0ZWRFbGVtZW50KCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmOnRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOnRoaXMuX2VsZW1lbnR9X2dldFBhbmVsV2lkdGgoKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUucGFuZWxXaWR0aHx8dGhpcy5fZ2V0SG9zdFdpZHRoKCl9X2dldEhvc3RXaWR0aCgpe3JldHVybiB0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1fcmVzZXRBY3RpdmVJdGVtKCl7bGV0IGU9dGhpcy5hdXRvY29tcGxldGU7ZS5hdXRvQWN0aXZlRmlyc3RPcHRpb24/ZS5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTplLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfV9jYW5PcGVuKCl7bGV0IGU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiFlLnJlYWRPbmx5JiYhZS5kaXNhYmxlZCYmIXRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQ/LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbFRvT3B0aW9uKGUpe2xldCBpPXRoaXMuYXV0b2NvbXBsZXRlLHI9QWYoZSxpLm9wdGlvbnMsaS5vcHRpb25Hcm91cHMpO2lmKDA9PT1lJiYxPT09cilpLl9zZXRTY3JvbGxUb3AoMCk7ZWxzZSBpZihpLnBhbmVsKXtsZXQgbz1pLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKG8pe2xldCBhPW8uX2dldEhvc3RFbGVtZW50KCkscz12ZyhhLm9mZnNldFRvcCxhLm9mZnNldEhlaWdodCxpLl9nZXRTY3JvbGxUb3AoKSxpLnBhbmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtpLl9zZXRTY3JvbGxUb3Aocyl9fX1faGFuZGxlT3ZlcmxheUV2ZW50cyhlKXtlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+eygyNz09PWkua2V5Q29kZSYmIXlyKGkpfHwzOD09PWkua2V5Q29kZSYmeXIoaSwiYWx0S2V5IikpJiYodGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbiYmKHRoaXMuX3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUodGhpcy5fdmFsdWVCZWZvcmVBdXRvU2VsZWN0aW9uPz8iIiksdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSl9KSxlLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoT2kpLEMoWm4pLEMoYXQpLEMoRnQpLEMoTW5lKSxDKEhpLDgpLEMoQmwsOSksQyhrdCw4KSxDKEtvKSxDKHhuZSw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4saW5wdXRzOnthdXRvY29tcGxldGU6WyJtYXRBdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUiXSxwb3NpdGlvbjpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIiwicG9zaXRpb24iXSxjb25uZWN0ZWRUbzpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVBdHRyaWJ1dGUiXSxhdXRvY29tcGxldGVEaXNhYmxlZDpbIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwiYXV0b2NvbXBsZXRlRGlzYWJsZWQiXX0sZmVhdHVyZXM6W0d0XX0pLG59KSgpLG9CZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWlZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Fib3ZlQ2xhc3M9Im1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVsLWFib3ZlIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1DbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdLFsidGV4dGFyZWEiLCJtYXRBdXRvY29tcGxldGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLWF1dG9jb21wbGV0ZS10cmlnZ2VyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoImZvY3VzaW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZUZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Ub3VjaGVkKCl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVJbnB1dChvKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2soKX0pLDImZSYmUGUoImF1dG9jb21wbGV0ZSIsaS5hdXRvY29tcGxldGVBdHRyaWJ1dGUpKCJyb2xlIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6ImNvbWJvYm94IikoImFyaWEtYXV0b2NvbXBsZXRlIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6Imxpc3QiKSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixpLnBhbmVsT3BlbiYmaS5hY3RpdmVPcHRpb24/aS5hY3RpdmVPcHRpb24uaWQ6bnVsbCkoImFyaWEtZXhwYW5kZWQiLGkuYXV0b2NvbXBsZXRlRGlzYWJsZWQ/bnVsbDppLnBhbmVsT3Blbi50b1N0cmluZygpKSgiYXJpYS1vd25zIixpLmF1dG9jb21wbGV0ZURpc2FibGVkfHwhaS5wYW5lbE9wZW58fG51bGw9PWkuYXV0b2NvbXBsZXRlP251bGw6aS5hdXRvY29tcGxldGUuaWQpKCJhcmlhLWhhc3BvcHVwIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6Imxpc3Rib3giKX0sZXhwb3J0QXM6WyJtYXRBdXRvY29tcGxldGVUcmlnZ2VyIl0sZmVhdHVyZXM6W1J0KFtpQmVdKSxMZV19KSxufSkoKTtmdW5jdGlvbiBhQmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMCwxKSxYdCgyKSxnKCkpLDImbil7bGV0IGU9dC5pZCxpPXcoKTtfKCJpZCIsaS5pZCkoIm5nQ2xhc3MiLGkuX2NsYXNzTGlzdCksUGUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KGUpKX19dmFyIHNCZT1bIioiXSxTbmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIENuZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdmlzaWJsZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXZpc2libGUiLHRoaXMuX2hpZGRlbkNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLWhpZGRlbiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9Q24obikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYXV0b2NvbXBsZXRlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihjaShyLENkLDUpLGNpKHIsSGEsNSkpLDImZSl7bGV0IG87d2Uobz1TZSgpKSYmKGkub3B0aW9uR3JvdXBzPW8pLHdlKG89U2UoKSkmJihpLm9wdGlvbnM9byl9fSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUiXSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZSJdLGZlYXR1cmVzOltSdChbe3Byb3ZpZGU6eGQsdXNlRXhpc3Rpbmc6bn1dKSxMZV0sbmdDb250ZW50U2VsZWN0b3JzOnNCZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sicm9sZSIsImxpc3Rib3giLDEsIm1hdC1hdXRvY29tcGxldGUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnbigpLFMoMCxhQmUsMyw0LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltibl0sc3R5bGVzOlsiLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Zpc2liaWxpdHk6aGlkZGVuO21heC13aWR0aDpub25lO21heC1oZWlnaHQ6MjU2cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS12aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse21hcmdpbi10b3A6LTFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse291dGxpbmU6c29saWQgMXB4fW1hdC1hdXRvY29tcGxldGV7ZGlzcGxheTpub25lfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGxCZT17cHJvdmlkZTpIcix1c2VFeGlzdGluZzpWbigoKT0+aUMpLG11bHRpOiEwfSxpQz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWlZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Fib3ZlQ2xhc3M9Im1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PUNuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwibWF0QXV0b2NvbXBsZXRlIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZEKCJmb2N1c2luIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVGb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uVG91Y2hlZCgpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZUNsaWNrKCl9KSwyJmUmJlBlKCJhdXRvY29tcGxldGUiLGkuYXV0b2NvbXBsZXRlQXR0cmlidXRlKSgicm9sZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJjb21ib2JveCIpKCJhcmlhLWF1dG9jb21wbGV0ZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0IikoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsaS5wYW5lbE9wZW4mJmkuYWN0aXZlT3B0aW9uP2kuYWN0aXZlT3B0aW9uLmlkOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6aS5wYW5lbE9wZW4udG9TdHJpbmcoKSkoImFyaWEtb3ducyIsaS5hdXRvY29tcGxldGVEaXNhYmxlZHx8IWkucGFuZWxPcGVufHxudWxsPT1pLmF1dG9jb21wbGV0ZT9udWxsOmkuYXV0b2NvbXBsZXRlLmlkKSgiYXJpYS1oYXNwb3B1cCIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0Ym94Iil9LGV4cG9ydEFzOlsibWF0QXV0b2NvbXBsZXRlVHJpZ2dlciJdLGZlYXR1cmVzOltSdChbbEJlXSksTGVdfSksbn0pKCksZ0E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe3Byb3ZpZGVyczpbd25lXSxpbXBvcnRzOltMcixTZyxRdCxUZSxSYyxTZyxRdF19KSxufSkoKSxFXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZT0iIix0aGlzLnBsYWNlaG9sZGVyPSIifW9uSW5wdXRLZXlVcChlKXsiRW50ZXIiPT09ZS5rZXkmJnRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5jbG9zZVBhbmVsKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWZpbHRlci1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlllKGlDLDUpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkuYXV0b2NvbXBsZXRlVHJpZ2dlcj1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixtYXRBdXRvY29tcGxldGU6Im1hdEF1dG9jb21wbGV0ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbInN2Z0ljb24iLCJzZWFyY2hfMjRweCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsInBsYWNlaG9sZGVyIiwibWF0QXV0b2NvbXBsZXRlIiwibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJ2YWx1ZSIsImtleXVwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJtYXQtaWNvbiIsMCksaCgxLCJpbnB1dCIsMSksRCgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXRLZXlVcChvKX0pLGcoKSksMiZlJiYoYigxKSxfKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikoIm1hdEF1dG9jb21wbGV0ZSIsaS5tYXRBdXRvY29tcGxldGUpKCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsIWkubWF0QXV0b2NvbXBsZXRlKSgidmFsdWUiLGkudmFsdWUpKX0sZGVwZW5kZW5jaWVzOltpQyxEbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSJdfSksbn0pKCk7ZnVuY3Rpb24gY0JlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw3KX1mdW5jdGlvbiBkQmUobix0KXtpZigxJm4mJihoKDAsIm1hdC1vcHRpb24iLDgpLFQoMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O18oInZhbHVlIixlKSxQZSgidGl0bGUiLGUpLGIoMSksdXQoZSl9fWZ1bmN0aW9uIHVCZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw5KSgxLCJlbSIpLFQoMiksRygzLCJudW1iZXIiKSxnKCkoKSksMiZuKXtsZXQgZT13KCk7YigyKSx6ZSgiYW5kICIsVygzLDEsZS5jb21wbGV0aW9ucy5sZW5ndGgtMjUpLCIgbW9yZSB0YWdzIG1hdGNoZWQiKX19dmFyIFRuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEx9b25Db21wbGV0aW9uQWNjZXB0ZWQoZSl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKGV5ZSwiXFwkJiIpfShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJlFlKCJ2YWxpZCIsaS5pc1JlZ2V4RmlsdGVyVmFsaWQpfSxpbnB1dHM6e3JlZ2V4RmlsdGVyVmFsdWU6InJlZ2V4RmlsdGVyVmFsdWUiLGlzUmVnZXhGaWx0ZXJWYWxpZDoiaXNSZWdleEZpbHRlclZhbGlkIixjb21wbGV0aW9uczoiY29tcGxldGlvbnMifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGRlY2xzOjcsdmFyczo1LGNvbnN0czpbWzEsInRhZy1maWx0ZXIiXSxbInBsYWNlaG9sZGVyIiwiRmlsdGVyIHRhZ3MgKHJlZ2V4KSIsMywidmFsdWUiLCJtYXRBdXRvY29tcGxldGUiLCJpbnB1dCJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJjbGFzcyIsImVycm9yLWljb24iLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbMSwidGFnLW9wdGlvbnMiLDMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWyJjbGFzcyIsIm9wdGlvbiIsMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJhbmQtbW9yZSIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXSxbMSwib3B0aW9uIiwzLCJ2YWx1ZSJdLFsxLCJhbmQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLEQoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChvLnRhcmdldC52YWx1ZSl9KSxnKCksUygyLGNCZSwxLDAsIm1hdC1pY29uIiwyKSxnKCksaCgzLCJtYXQtYXV0b2NvbXBsZXRlIiwzLDQpLEQoIm9wdGlvblNlbGVjdGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNvbXBsZXRpb25BY2NlcHRlZChvLm9wdGlvbi52YWx1ZSl9KSxTKDUsZEJlLDIsMywibWF0LW9wdGlvbiIsNSksUyg2LHVCZSw0LDMsImRpdiIsNiksZygpKSwyJmUpe2xldCByPXR0KDQpO2IoMSksXygidmFsdWUiLGkucmVnZXhGaWx0ZXJWYWx1ZSkoIm1hdEF1dG9jb21wbGV0ZSIsciksYigxKSxfKCJuZ0lmIiwhaS5pc1JlZ2V4RmlsdGVyVmFsaWQpLGIoMyksXygibmdGb3JPZiIsbnVsbD09aS5jb21wbGV0aW9ucz9udWxsOmkuY29tcGxldGlvbnMuc2xpY2UoMCwyNSkpLGIoMSksXygibmdJZiIsKG51bGw9PWkuY29tcGxldGlvbnM/bnVsbDppLmNvbXBsZXRpb25zLmxlbmd0aCk+MjUpfX0sZGVwZW5kZW5jaWVzOltkbixGZSxFXyxTbmUsSGEsRG4sUHNdLHN0eWxlczpbIi50YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9dGItZmlsdGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX1bX25naG9zdC0lQ09NUCVde2NvbG9yOiMyMTIxMjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKXtjb2xvcjojYzYyODI4fVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCkgICAuZXJyb3ItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2M2MjgyODtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfSAgLnRhZy1vcHRpb25zIC5vcHRpb24sICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1saW5lLWNsYW1wOjM7ZGlzcGxheTotd2Via2l0LWJveDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzo4cHggMTZweH0gIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmUsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLERuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnRhZ0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSWwpLHRoaXMuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJD10aGlzLnRhZ0ZpbHRlciQucGlwZShVKGk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoaSksITB9Y2F0Y2h7cmV0dXJuITF9fSkpLHRoaXMuY29tcGxldGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KGExKS5waXBlKFZpKHRoaXMuc3RvcmUuc2VsZWN0KHdjKSksVSgoW2kscl0pPT5pLmZpbHRlcigoe3BsdWdpbjpvfSk9PiFyLnNpemV8fHIuaGFzKG8pKS5tYXAoKHt0YWc6b30pPT5vKSksVShpPT5bLi4ubmV3IFNldChpKV0pLFUoaT0+aS5zb3J0KFN2KSksVmkodGhpcy5zdG9yZS5zZWxlY3QoSWwpKSxVKChbaSxyXSk9Pnt0cnl7cmV0dXJuW2ksbmV3IFJlZ0V4cChyLCJpIildfWNhdGNoe3JldHVybltpLG51bGxdfX0pLFZlKChbLGldKT0+bnVsbCE9PWkpLFUoKFtpLHJdKT0+aS5maWx0ZXIobz0+ci50ZXN0KG8pKSkpfW9uVGFnRmlsdGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goTFQoe3RhZ0ZpbHRlcjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy10YWctZmlsdGVyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlZ2V4RmlsdGVyVmFsdWUiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJjb21wbGV0aW9ucyIsIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudCIsMCksRCgib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRhZ0ZpbHRlckNoYW5nZShvKX0pLEcoMSwiYXN5bmMiKSxHKDIsImFzeW5jIiksRygzLCJhc3luYyIpLGcoKSksMiZlJiZfKCJyZWdleEZpbHRlclZhbHVlIixXKDEsMyxpLnRhZ0ZpbHRlciQpKSgiaXNSZWdleEZpbHRlclZhbGlkIixXKDIsNSxpLmlzVGFnRmlsdGVyUmVnZXhWYWxpZCQpKSgiY29tcGxldGlvbnMiLFcoMyw3LGkuY29tcGxldGlvbnMkKSl9LGRlcGVuZGVuY2llczpbVG5lLGx0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBtQmUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDgpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTtiKDEpLHplKCIiLGUuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgsIiBjYXJkcyIpfX1mdW5jdGlvbiBoQmUobix0KXsxJm4mJihoKDAsInNwYW4iLDkpLFQoMSwiTmV3IGNhcmQgcGlubmVkIiksZygpKSwyJm4mJlBlKCJkYXRhLWlkIix0LiRpbXBsaWNpdCl9ZnVuY3Rpb24gZ0JlKG4sdCl7aWYoMSZuJiZQKDAsIm1ldHJpY3MtY2FyZC1ncmlkIiwxMCksMiZuKXtsZXQgZT13KCk7XygiY2FyZElkc1dpdGhNZXRhZGF0YSIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgiY2FyZE9ic2VydmVyIixlLmNhcmRPYnNlcnZlcil9fWZ1bmN0aW9uIF9CZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxMSksVCgxLCJQaW4gY2FyZHMgZm9yIGEgcXVpY2sgdmlldyBhbmQgY29tcGFyaXNvbiIpLGcoKSl9dmFyIEluZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixuZXdDYXJkUGlubmVkSWRzOiJuZXdDYXJkUGlubmVkSWRzIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsImdyb3VwLXRvb2xiYXIiXSxbInN2Z0ljb24iLCJrZWVwXzI0cHgiXSxbMSwiZ3JvdXAtdGV4dCJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5ldy1jYXJkLXBpbm5lZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZW1wdHlQaW5uZWRWaWV3IiwiIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbMSwibmV3LWNhcmQtcGlubmVkIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZW1wdHktbWVzc2FnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSxQKDEsIm1hdC1pY29uIiwxKSxoKDIsInNwYW4iLDIpKDMsInNwYW4iLDMpLFQoNCwiUGlubmVkIiksZygpLFMoNSxtQmUsMiwxLCJzcGFuIiw0KSxTKDYsaEJlLDIsMSwic3BhbiIsNSksZygpKCksUyg3LGdCZSwxLDIsIm1ldHJpY3MtY2FyZC1ncmlkIiw2KSxTKDgsX0JlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNyxadCkpLDImZSl7bGV0IHI9dHQoOSk7Yig1KSxfKCJuZ0lmIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoPjEpLGIoMSksXygibmdGb3JPZiIsaS5uZXdDYXJkUGlubmVkSWRzKSxiKDEpLF8oIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W2RuLEZlLERuLFNfXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Z2FwOjZweH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzoxNnB4O3RleHQtYWxpZ246Y2VudGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5uZXctY2FyZC1waW5uZWRbX25nY29udGVudC0lQ09NUCVde2FuaW1hdGlvbjpfbmdjb250ZW50LSVDT01QJV9waW5uZWQtdmlldy1mYWRlLW91dCAzcyBsaW5lYXI7YmFja2dyb3VuZDojZjQ0MzM2O2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEzcHg7b3BhY2l0eTowO3BhZGRpbmc6M3B4IDVweH1Aa2V5ZnJhbWVzIF9uZ2NvbnRlbnQtJUNPTVAlX3Bpbm5lZC12aWV3LWZhZGUtb3V0e2Zyb217b3BhY2l0eToxfTY2JXtvcGFjaXR5Oi45OX10b3tvcGFjaXR5OjB9fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoU2IpLnBpcGUoTm4oW10pKSx0aGlzLm5ld0NhcmRQaW5uZWRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KFNiKS5waXBlKCRhKDEpLFUoaT0+aS5tYXAocj0+ci5jYXJkSWQpKSxZbSgpLFUoKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQoaSksYT1uZXcgU2V0KHIpO2ZvcihsZXQgcyBvZiBhKWlmKCFvLmhhcyhzKSlyZXR1cm4gRGF0ZS5ub3coKTtyZXR1cm4gbnVsbH0pLE5uKG51bGwpLFltKCksVSgoW2kscl0pPT5udWxsPT09aSYmbnVsbD09PXI/bnVsbDpudWxsPT09cj9baV06W3JdKSxWZShpPT5udWxsIT09aSksVShpPT5baVswXV0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtcGlubmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJuZXdDYXJkUGlubmVkSWRzIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCIsMCksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSksMiZlJiZfKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixXKDEsMyxpLmNhcmRJZHNXaXRoTWV0YWRhdGEkKSkoIm5ld0NhcmRQaW5uZWRJZHMiLFcoMiw1LGkubmV3Q2FyZFBpbm5lZElkcyQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbSW5lLGx0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB2QmUobix0KXsxJm4mJlAoMCwibWV0cmljcy1maWx0ZXJlZC12aWV3IiwxMyksMiZuJiZfKCJjYXJkT2JzZXJ2ZXIiLHcoKS5jYXJkT2JzZXJ2ZXIpfWZ1bmN0aW9uIHhCZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxNyksUCgxLCJtYXQtc3Bpbm5lciIsMTgpLGcoKSl9dmFyIENCZT1mdW5jdGlvbihuKXtyZXR1cm57InNsaWRlLW91dC1tZW51LWV4cGFuZGVkIjpufX07ZnVuY3Rpb24gTUJlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDE5KSxQKDEsIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3IiKSxnKCkpLDImbil7bGV0IGU9dygpO18oIm5nQ2xhc3MiLFNuKDEsQ0JlLGUuc2xpZGVPdXRNZW51T3BlbikpfX1mdW5jdGlvbiB3QmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDIwKSgxLCJkaXYiLDIxKSgyLCJoMiIsMjIpLFQoMywiU2V0dGluZ3MiKSxnKCksaCg0LCJidXR0b24iLDIzKSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkLmVtaXQoKSl9KSxQKDUsIm1hdC1pY29uIiwyNCksZygpKCksUCg2LCJtZXRyaWNzLWRhc2hib2FyZC1yaWdodC1wYW5lIiksZygpfX12YXIgU0JlPWZ1bmN0aW9uKG4pe3JldHVybntjaGVja2VkOm4sInNldHRpbmdzLWJ1dHRvbiI6ITB9fSxFQmU9bmV3IGllKCJDdXN0b21pemFibGUgU2hhcmUgQnV0dG9uIiksUm5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmhvc3Q9ZSx0aGlzLmN1c3RvbVNoYXJlQnV0dG9uPWksdGhpcy5vblNldHRpbmdzQnV0dG9uQ2xpY2tlZD1uZXcgTCx0aGlzLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQ9bmV3IEwsdGhpcy5vblBsdWdpblR5cGVUb2dnbGVkPW5ldyBMLHRoaXMub25QbHVnaW5UeXBlQWxsVG9nZ2xlZD1uZXcgTCx0aGlzLlBsdWdpblR5cGU9cW4sdGhpcy5jYXJkT2JzZXJ2ZXI9bmV3IEV2KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCI2MDBweCAwcHggNjAwcHggMHB4Iil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoYmUpLEMoRUJlLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntzaG93RmlsdGVyZWRWaWV3OiJzaG93RmlsdGVyZWRWaWV3Iixpc1NpZGVwYW5lT3BlbjoiaXNTaWRlcGFuZU9wZW4iLGZpbHRlcmVkUGx1Z2luVHlwZXM6ImZpbHRlcmVkUGx1Z2luVHlwZXMiLGluaXRpYWxUYWdzTG9hZGluZzoiaW5pdGlhbFRhZ3NMb2FkaW5nIixzbGlkZU91dE1lbnVPcGVuOiJzbGlkZU91dE1lbnVPcGVuIn0sb3V0cHV0czp7b25TZXR0aW5nc0J1dHRvbkNsaWNrZWQ6Im9uU2V0dGluZ3NCdXR0b25DbGlja2VkIixvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkOiJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIixvblBsdWdpblR5cGVUb2dnbGVkOiJvblBsdWdpblR5cGVUb2dnbGVkIixvblBsdWdpblR5cGVBbGxUb2dnbGVkOiJvblBsdWdpblR5cGVBbGxUb2dnbGVkIn0sZGVjbHM6MjQsdmFyczoyMyxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgb24gYSB0b29sYmFyIGJ1dHRvbiB0byB0b2dnbGUgdGhlIHNldHRpbmdzIHNpZGUgcGFuZS7ikJ9kMzUxNmRiNmJiZTY4NjBhNTViZWFiNjZlNDk2OWRhYzYyNWI4ZDcy4pCfNzY1OTI4NTQ0NTU4MDgzODkyNTpUb2dnbGUgc2V0dGluZ3Mgc2lkZSBwYW5lYCxlPSRsb2NhbGl6ZWA6TGFiZWwgb24gYSBidXR0b24gdG8gY2xvc2UgdGhlIHNldHRpbmdzIHNpZGUgcGFuZS7ikJ8wNDUyMWRjMGI2YTY1Y2Y1YzM4Mjk0NGM5YThiNGI4NDRhM2U5NTk44pCfODE1Njc2Njk5Nzc0NzE2NTg3MTpDbG9zZSBzaWRlIHBhbmVgLFtbMSwidG9vbGJhciJdLFsibXVsdGlwbGUiLCIiLCJhcHBlYXJhbmNlIiwic3RhbmRhcmQiLDEsImZpbHRlci12aWV3Il0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsImFsbCIsMSwiZmlsdGVyLXZpZXctYnV0dG9uIiwzLCJjbGljayJdLFsibWF0LWJ1dHRvbiIsIiIsInJvbGUiLCJjaGVja2JveCIsImRhdGEtdmFsdWUiLCJzY2FsYXJzIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsImltYWdlIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsImhpc3RvZ3JhbSIsMSwiZmlsdGVyLXZpZXctYnV0dG9uIiwzLCJjbGljayJdLFszLCJjdXN0b21pemFibGVDb21wb25lbnQiXSxbMSwicmlnaHQtaXRlbXMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywibmdDbGFzcyIsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3NfMjRweCJdLFsxLCJzcGxpdC1jb250ZW50Il0sWyJjZGtTY3JvbGxhYmxlIiwiIl0sWzMsImNhcmRPYnNlcnZlciIsNCwibmdJZiJdLFszLCJjYXJkT2JzZXJ2ZXIiXSxbImNsYXNzIiwibG9hZGluZy1jb250YWluZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2xpZGUtb3V0LW1lbnUiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwic2lkZWJhciIsNCwibmdJZiJdLFsxLCJsb2FkaW5nLWNvbnRhaW5lciJdLFsiZGlhbWV0ZXIiLCIzNiJdLFsxLCJzbGlkZS1vdXQtbWVudSIsMywibmdDbGFzcyJdLFsxLCJzaWRlYmFyIl0sWzEsImhlYWRlciJdLFsxLCJ0aXRsZSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNsb3NlXzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApLFAoMSwibWV0cmljcy10YWctZmlsdGVyIiksaCgyLCJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCIsMSkoMywiYnV0dG9uIiwyKSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVBbGxUb2dnbGVkLmVtaXQoKX0pLFQoNCwiIEFsbCAiKSxnKCksaCg1LCJidXR0b24iLDMpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChpLlBsdWdpblR5cGUuU0NBTEFSUyl9KSxUKDYsIiBTY2FsYXJzICIpLGcoKSxoKDcsImJ1dHRvbiIsNCksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlVG9nZ2xlZC5lbWl0KGkuUGx1Z2luVHlwZS5JTUFHRVMpfSksVCg4LCIgSW1hZ2UgIiksZygpLGgoOSwiYnV0dG9uIiw1KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVUb2dnbGVkLmVtaXQoaS5QbHVnaW5UeXBlLkhJU1RPR1JBTVMpfSksVCgxMCwiIEhpc3RvZ3JhbSAiKSxnKCkoKSxQKDExLCJ0Yi1jdXN0b21pemF0aW9uIiw2KSxoKDEyLCJkaXYiLDcpKDEzLCJidXR0b24iLDgpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkLmVtaXQoKX0pLFAoMTQsIm1hdC1pY29uIiw5KSxUKDE1LCIgU2V0dGluZ3MgIiksZygpKCkoKSxoKDE2LCJkaXYiLDEwKSgxNywiZGl2IiwxMSksUygxOCx2QmUsMSwxLCJtZXRyaWNzLWZpbHRlcmVkLXZpZXciLDEyKSxQKDE5LCJtZXRyaWNzLXBpbm5lZC12aWV3IiwxMyksUygyMCx4QmUsMiwwLCJkaXYiLDE0KSxQKDIxLCJtZXRyaWNzLWNhcmQtZ3JvdXBzIiwxMyksZygpLFMoMjIsTUJlLDIsMywiZGl2IiwxNSksUygyMyx3QmUsNywwLCJkaXYiLDE2KSxnKCkpLDImZSYmKGIoMyksUGUoImFyaWEtY2hlY2tlZCIsMD09PWkuZmlsdGVyZWRQbHVnaW5UeXBlcy5zaXplKSxiKDIpLFBlKCJhcmlhLWNoZWNrZWQiLGkuZmlsdGVyZWRQbHVnaW5UeXBlcy5oYXMoaS5QbHVnaW5UeXBlLlNDQUxBUlMpKSxiKDIpLFBlKCJhcmlhLWNoZWNrZWQiLGkuZmlsdGVyZWRQbHVnaW5UeXBlcy5oYXMoaS5QbHVnaW5UeXBlLklNQUdFUykpLGIoMiksUGUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuSElTVE9HUkFNUykpLGIoMiksXygiY3VzdG9taXphYmxlQ29tcG9uZW50IixpLmN1c3RvbVNoYXJlQnV0dG9uKSxiKDIpLF8oIm5nQ2xhc3MiLFNuKDIxLFNCZSxpLmlzU2lkZXBhbmVPcGVuKSksUGUoImFyaWEtcHJlc3NlZCIsaS5pc1NpZGVwYW5lT3BlbiksYig0KSxRZSgibWFpbiIsITApKCJmaWx0ZXItdmlldyIsaS5zaG93RmlsdGVyZWRWaWV3KSxiKDEpLF8oIm5nSWYiLGkuc2hvd0ZpbHRlcmVkVmlldyksYigxKSxNdCgiZGlzcGxheSIsaS5zaG93RmlsdGVyZWRWaWV3PyJub25lIjoiIiksXygiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlciksYigxKSxfKCJuZ0lmIixpLmluaXRpYWxUYWdzTG9hZGluZyksYigxKSxNdCgiZGlzcGxheSIsaS5zaG93RmlsdGVyZWRWaWV3PyJub25lIjoiIiksXygiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlciksYigxKSxfKCJuZ0lmIixpLmlzU2lkZXBhbmVPcGVuKSxiKDEpLF8oIm5nSWYiLGkuaXNTaWRlcGFuZU9wZW4pKX0sZGVwZW5kZW5jaWVzOltibixGZSxNUSxCdSxGbixKTCxEbix6cixQUSxOUSxnbmUsdm5lLERuZSxBbmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJX0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtmbGV4Om5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtdGFnLWZpbHRlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgMTAwcHh9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tbGVmdDoxNnB4O3BhZGRpbmctbGVmdDoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yaWdodC1pdGVtc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yaWdodC1pdGVtc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjRweDtmbGV4Om5vbmU7bWFyZ2luLXJpZ2h0OjVweH0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjA7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2hlaWdodDoyNXB4O2xpbmUtaGVpZ2h0OjI1cHg7bWluLXdpZHRoOnVuc2V0O3BhZGRpbmc6MCAxMnB4fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdICsgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSArIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdICsgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW2FyaWEtY2hlY2tlZD10cnVlXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bYXJpYS1jaGVja2VkPXRydWVdW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblthcmlhLWNoZWNrZWQ9dHJ1ZV1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX0uc3BsaXQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O292ZXJmbG93LXk6YXV0bztmbGV4OjF9Lm1haW5bX25nY29udGVudC0lQ09NUCVdLCAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7YmFja2dyb3VuZC1jb2xvcjojZmZmO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Lm1haW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y1ZjZmNztmbGV4OjEgMTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzNhM2EzYX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLWZpbHRlcmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1waW5uZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0ubWFpbi5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5tYWluLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Y29udGFpbjpjb250ZW50O292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLHNjcm9sbC1wb3NpdGlvbn0ubG9hZGluZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MjBweCAwfS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjtmbGV4OjAgMCAyNTBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47aGVpZ2h0OjQycHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAudGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpub3JtYWw7bWFyZ2luOjB9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZGlzcGxheTppbmxpbmUtZmxleH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbi5jaGVja2VkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Ym9yZGVyLWNvbG9yOiNlMGUwZTB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbi5jaGVja2VkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjF9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgICAubWF0LWJ1dHRvbi13cmFwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6NHB4fS5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2hlaWdodDpjYWxjKDEwMCUgLSA0OXB4KTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo1MHB4O3RvcDo0OXB4O3RyYW5zaXRpb246YWxsIC43NXMgZWFzZTt2aXNpYmlsaXR5OmhpZGRlbjt3aWR0aDoyMDBweDtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfS5zbGlkZS1vdXQtbWVudS1leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV17cmlnaHQ6MjUwcHg7dmlzaWJpbGl0eTp2aXNpYmxlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksa25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuaXNTaWRlcGFuZU9wZW4kPXRoaXMuc3RvcmUuc2VsZWN0KGYxKSx0aGlzLmluaXRpYWxUYWdzTG9hZGluZyQ9dGhpcy5zdG9yZS5zZWxlY3Qod2IpLnBpcGUoVV8oaT0+bnVsbD09PWkubGFzdExvYWRlZFRpbWVJbk1zLCEwKSxVKGk9Pmkuc3RhdGU9PT1EZS5MT0FESU5HJiZudWxsPT09aS5sYXN0TG9hZGVkVGltZUluTXMpKSx0aGlzLnNob3dGaWx0ZXJlZFZpZXckPXRoaXMuc3RvcmUuc2VsZWN0KElsKS5waXBlKFUoaT0+aS5sZW5ndGg+MCkpLHRoaXMuZmlsdGVyZWRQbHVnaW5UeXBlcyQ9dGhpcy5zdG9yZS5zZWxlY3Qod2MpLHRoaXMuaXNTbGlkZW91dE1lbnVPcGVuJD10aGlzLnN0b3JlLnNlbGVjdChtMSl9b25TZXR0aW5nc0J1dHRvbkNsaWNrZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGRUKCkpfW9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGNUKCkpfW9uUGx1Z2luVmlzaWJpbGl0eVRvZ2dsZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChCVCh7cGx1Z2luOmV9KSl9b25TaG93QWxsUGx1Z2lucygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goVlQoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLW1haW4tdmlldyJdXSxkZWNsczo2LHZhcnM6MTUsY29uc3RzOltbMywic2hvd0ZpbHRlcmVkVmlldyIsImlzU2lkZXBhbmVPcGVuIiwiaW5pdGlhbFRhZ3NMb2FkaW5nIiwiZmlsdGVyZWRQbHVnaW5UeXBlcyIsInNsaWRlT3V0TWVudU9wZW4iLCJvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCIsIm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiLCJvblBsdWdpblR5cGVUb2dnbGVkIiwib25QbHVnaW5UeXBlQWxsVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWV0cmljcy1tYWluLXZpZXctY29tcG9uZW50IiwwKSxEKCJvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNldHRpbmdzQnV0dG9uQ2xpY2tlZCgpfSkoIm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpfSkoIm9uUGx1Z2luVHlwZVRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGx1Z2luVmlzaWJpbGl0eVRvZ2dsZWQobyl9KSgib25QbHVnaW5UeXBlQWxsVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNob3dBbGxQbHVnaW5zKCl9KSxHKDEsImFzeW5jIiksRygyLCJhc3luYyIpLEcoMywiYXN5bmMiKSxHKDQsImFzeW5jIiksRyg1LCJhc3luYyIpLGcoKSksMiZlJiZfKCJzaG93RmlsdGVyZWRWaWV3IixXKDEsNSxpLnNob3dGaWx0ZXJlZFZpZXckKSkoImlzU2lkZXBhbmVPcGVuIixXKDIsNyxpLmlzU2lkZXBhbmVPcGVuJCkpKCJpbml0aWFsVGFnc0xvYWRpbmciLFcoMyw5LGkuaW5pdGlhbFRhZ3NMb2FkaW5nJCkpKCJmaWx0ZXJlZFBsdWdpblR5cGVzIixXKDQsMTEsaS5maWx0ZXJlZFBsdWdpblR5cGVzJCkpKCJzbGlkZU91dE1lbnVPcGVuIixXKDUsMTMsaS5pc1NsaWRlb3V0TWVudU9wZW4kKSl9LGRlcGVuZGVuY2llczpbUm5lLGx0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx4YT0oKCk9PihmdW5jdGlvbihuKXtuLkNIRUNLQk9YPSJjaGVja2JveCIsbi5SVU5fTkFNRT0icnVuX25hbWUiLG4uRVhQRVJJTUVOVF9OQU1FPSJleHBlcmltZW50X25hbWUiLG4uUlVOX0NPTE9SPSJydW5fY29sb3IifSh4YXx8KHhhPXt9KSkseGEpKSgpLElCZT1bImRpYWxvZ1BvcHVwIl0sQUJlPVsiaHVlU2xpZGVyIl0sUkJlPVsiYWxwaGFTbGlkZXIiXTtmdW5jdGlvbiBrQmUobix0KXtpZigxJm4mJlAoMCwiZGl2IiksMiZuKXtsZXQgZT13KCk7RGgoImFycm93IGFycm93LSIsZS5jcFVzZVBvc2l0aW9uLCIiKSxNdCgidG9wIixlLmFycm93VG9wLCJweCIpfX1mdW5jdGlvbiBQQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDI4KSxEKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25Db2xvckNoYW5nZShyKSl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uRHJhZ1N0YXJ0KCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uRHJhZ0VuZCgic2F0dXJhdGlvbi1saWdodG5lc3MiKSl9KSxQKDEsImRpdiIsMTQpLGcoKX1pZigyJm4pe2xldCBlPXcoKTtNdCgiYmFja2dyb3VuZC1jb2xvciIsZS5odWVTbGlkZXJDb2xvciksXygicmdYIiwxKSgicmdZIiwxKSxiKDEpLE10KCJ0b3AiLG51bGw9PWUuc2xpZGVyP251bGw6ZS5zbGlkZXIudiwicHgiKSgibGVmdCIsbnVsbD09ZS5zbGlkZXI/bnVsbDplLnNsaWRlci5zLCJweCIpfX1mdW5jdGlvbiBPQmUobix0KXsxJm4mJihUbigpLGgoMCwic3ZnIiwyOSksUCgxLCJwYXRoIiwzMCkoMiwicGF0aCIsMzEpLGcoKSl9ZnVuY3Rpb24gRkJlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwzMiksRCgiY2xpY2siLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpO3JldHVybiBRKG8ub25BZGRQcmVzZXRDb2xvcihyLG8uc2VsZWN0ZWRDb2xvcikpfSksVCgxKSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7a2EoZS5jcEFkZENvbG9yQnV0dG9uQ2xhc3MpLF8oImRpc2FibGVkIixlLmNwUHJlc2V0Q29sb3JzJiZlLmNwUHJlc2V0Q29sb3JzLmxlbmd0aD49ZS5jcE1heFByZXNldENvbG9yc0xlbmd0aCksYigxKSx6ZSgiICIsZS5jcEFkZENvbG9yQnV0dG9uVGV4dCwiICIpfX1mdW5jdGlvbiBMQmUobix0KXsxJm4mJlAoMCwiZGl2IiwzMyl9ZnVuY3Rpb24gTkJlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiaW5wdXQiLDM5KSxEKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BbHBoYUlucHV0KHIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQuYSl9fWZ1bmN0aW9uIEJCZShuLHQpezEmbiYmKGgoMCwiZGl2IiksVCgxLCJBIiksZygpKX1mdW5jdGlvbiBWQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDM0KSgxLCJkaXYiLDM1KSgyLCJpbnB1dCIsMzYpLEQoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25DeWFuSW5wdXQocikpfSksZygpLGgoMywiaW5wdXQiLDM2KSxEKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uTWFnZW50YUlucHV0KHIpKX0pLGcoKSxoKDQsImlucHV0IiwzNiksRCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblllbGxvd0lucHV0KHIpKX0pLGcoKSxoKDUsImlucHV0IiwzNiksRCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkJsYWNrSW5wdXQocikpfSksZygpLFMoNixOQmUsMSwyLCJpbnB1dCIsMzcpLGcoKSxoKDcsImRpdiIsMzUpKDgsImRpdiIpLFQoOSwiQyIpLGcoKSxoKDEwLCJkaXYiKSxUKDExLCJNIiksZygpLGgoMTIsImRpdiIpLFQoMTMsIlkiKSxnKCksaCgxNCwiZGl2IiksVCgxNSwiSyIpLGcoKSxTKDE2LEJCZSwyLDAsImRpdiIsMzgpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO010KCJkaXNwbGF5IiwzIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLGIoMiksXygicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5jKSxiKDEpLF8oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQubSksYigxKSxfKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0LnkpLGIoMSksXygicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5rKSxiKDEpLF8oIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSxiKDEwKSxfKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIEhCZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImlucHV0IiwzOSksRCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQWxwaGFJbnB1dChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO18oInJnIiwxKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmEpfX1mdW5jdGlvbiB6QmUobix0KXsxJm4mJihoKDAsImRpdiIpLFQoMSwiQSIpLGcoKSl9ZnVuY3Rpb24gVUJlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw0MCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQxKSxEKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uSHVlSW5wdXQocikpfSksZygpLGgoMywiaW5wdXQiLDM2KSxEKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uU2F0dXJhdGlvbklucHV0KHIpKX0pLGcoKSxoKDQsImlucHV0IiwzNiksRCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkxpZ2h0bmVzc0lucHV0KHIpKX0pLGcoKSxTKDUsSEJlLDEsMiwiaW5wdXQiLDM3KSxnKCksaCg2LCJkaXYiLDM1KSg3LCJkaXYiKSxUKDgsIkgiKSxnKCksaCg5LCJkaXYiKSxUKDEwLCJTIiksZygpLGgoMTEsImRpdiIpLFQoMTIsIkwiKSxnKCksUygxMyx6QmUsMiwwLCJkaXYiLDM4KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtNdCgiZGlzcGxheSIsMiE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSxiKDIpLF8oInJnIiwzNjApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQuaCksYigxKSxfKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LnMpLGIoMSksXygicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5sKSxiKDEpLF8oIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSxiKDgpLF8oIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gakJlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiaW5wdXQiLDM5KSxEKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BbHBoYUlucHV0KHIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQuYSl9fWZ1bmN0aW9uIEdCZShuLHQpezEmbiYmKGgoMCwiZGl2IiksVCgxLCJBIiksZygpKX1mdW5jdGlvbiBXQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDQyKSgxLCJkaXYiLDM1KSgyLCJpbnB1dCIsNDMpLEQoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SZWRJbnB1dChyKSl9KSxnKCksaCgzLCJpbnB1dCIsNDMpLEQoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25HcmVlbklucHV0KHIpKX0pLGcoKSxoKDQsImlucHV0Iiw0MyksRCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkJsdWVJbnB1dChyKSl9KSxnKCksUyg1LGpCZSwxLDIsImlucHV0IiwzNyksZygpLGgoNiwiZGl2IiwzNSkoNywiZGl2IiksVCg4LCJSIiksZygpLGgoOSwiZGl2IiksVCgxMCwiRyIpLGcoKSxoKDExLCJkaXYiKSxUKDEyLCJCIiksZygpLFMoMTMsR0JlLDIsMCwiZGl2IiwzOCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7TXQoImRpc3BsYXkiLDEhPT1lLmZvcm1hdD8ibm9uZSI6ImJsb2NrIiksYigyKSxfKCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LnIpLGIoMSksXygicmciLDI1NSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5nKSxiKDEpLF8oInJnIiwyNTUpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQuYiksYigxKSxfKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCksYig4KSxfKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIHFCZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImlucHV0IiwzOSksRCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQWxwaGFJbnB1dChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO18oInJnIiwxKSgidmFsdWUiLGUuaGV4QWxwaGEpfX1mdW5jdGlvbiBZQmUobix0KXsxJm4mJihoKDAsImRpdiIpLFQoMSwiQSIpLGcoKSl9ZnVuY3Rpb24gWEJlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw0NCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQ1KSxEKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uSGV4SW5wdXQobnVsbCkpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25IZXhJbnB1dChyKSl9KSxnKCksUygzLHFCZSwxLDIsImlucHV0IiwzNyksZygpLGgoNCwiZGl2IiwzNSkoNSwiZGl2IiksVCg2LCJIZXgiKSxnKCksUyg3LFlCZSwyLDAsImRpdiIsMzgpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO010KCJkaXNwbGF5IiwwIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLFFlKCJoZXgtYWxwaGEiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCksYigyKSxfKCJ2YWx1ZSIsZS5oZXhUZXh0KSxiKDEpLF8oIm5nSWYiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCksYig0KSxfKCJuZ0lmIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBRQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJpbnB1dCIsMzkpLEQoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFscGhhSW5wdXQocikpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtfKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gWkJlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw0NikoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDM2KSxEKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uVmFsdWVJbnB1dChyKSl9KSxnKCksUygzLFFCZSwxLDIsImlucHV0IiwzNyksZygpLGgoNCwiZGl2IiwzNSkoNSwiZGl2IiksVCg2LCJWIiksZygpLGgoNywiZGl2IiksVCg4LCJBIiksZygpKCkoKX1pZigyJm4pe2xldCBlPXcoKTtiKDIpLF8oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQubCksYigxKSxfKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIEtCZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNDcpKDEsInNwYW4iLDQ4KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkZvcm1hdFRvZ2dsZSgtMSkpfSksZygpLGgoMiwic3BhbiIsNDgpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uRm9ybWF0VG9nZ2xlKDEpKX0pLGcoKSgpfX1mdW5jdGlvbiBKQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzcGFuIiw1NSksRCgiY2xpY2siLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KDMpLm9uUmVtb3ZlUHJlc2V0Q29sb3IocixvKSl9KSxnKCl9MiZuJiZrYSh3KDQpLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcyl9ZnVuY3Rpb24gJEJlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw1MyksRCgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygzKS5zZXRDb2xvckZyb21TdHJpbmcobykpfSksUygxLEpCZSwxLDMsInNwYW4iLDU0KSxnKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMyk7TXQoImJhY2tncm91bmQtY29sb3IiLGUpLGIoMSksXygibmdJZiIsaS5jcEFkZENvbG9yQnV0dG9uKX19ZnVuY3Rpb24gZVZlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiKSxTKDEsJEJlLDIsMywiZGl2Iiw1MiksZygpKSwyJm4pe2xldCBlPXcoMik7a2EoZS5jcFByZXNldENvbG9yc0NsYXNzKSxiKDEpLF8oIm5nRm9yT2YiLGUuY3BQcmVzZXRDb2xvcnMpfX1mdW5jdGlvbiB0VmUobix0KXtpZigxJm4mJihoKDAsImRpdiIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMik7a2EoZS5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzKSxiKDEpLHV0KGUuY3BQcmVzZXRFbXB0eU1lc3NhZ2UpfX1mdW5jdGlvbiBuVmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNDkpLFAoMSwiaHIiKSxoKDIsImRpdiIsNTApLFQoMyksZygpLFMoNCxlVmUsMiw0LCJkaXYiLDUxKSxTKDUsdFZlLDIsNCwiZGl2Iiw1MSksZygpKSwyJm4pe2xldCBlPXcoKTtiKDMpLHV0KGUuY3BQcmVzZXRMYWJlbCksYigxKSxfKCJuZ0lmIixudWxsPT1lLmNwUHJlc2V0Q29sb3JzP251bGw6ZS5jcFByZXNldENvbG9ycy5sZW5ndGgpLGIoMSksXygibmdJZiIsIShudWxsIT1lLmNwUHJlc2V0Q29sb3JzJiZlLmNwUHJlc2V0Q29sb3JzLmxlbmd0aCkmJmUuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uIGlWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsNTgpLEQoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25DYW5jZWxDb2xvcihyKSl9KSxUKDEpLGcoKX1pZigyJm4pe2xldCBlPXcoMik7a2EoZS5jcENhbmNlbEJ1dHRvbkNsYXNzKSxiKDEpLHV0KGUuY3BDYW5jZWxCdXR0b25UZXh0KX19ZnVuY3Rpb24gclZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiw1OCksRCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFjY2VwdENvbG9yKHIpKX0pLFQoMSksZygpfWlmKDImbil7bGV0IGU9dygyKTtrYShlLmNwT0tCdXR0b25DbGFzcyksYigxKSx1dChlLmNwT0tCdXR0b25UZXh0KX19ZnVuY3Rpb24gb1ZlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDU2KSxTKDEsaVZlLDIsNCwiYnV0dG9uIiw1NyksUygyLHJWZSwyLDQsImJ1dHRvbiIsNTcpLGcoKSksMiZuKXtsZXQgZT13KCk7YigxKSxfKCJuZ0lmIixlLmNwQ2FuY2VsQnV0dG9uKSxiKDEpLF8oIm5nSWYiLGUuY3BPS0J1dHRvbil9fWZ1bmN0aW9uIGFWZShuLHQpezEmbiYmVGkoMCl9ZnVuY3Rpb24gc1ZlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDU5KSxTKDEsYVZlLDEsMCwibmctY29udGFpbmVyIiw2MCksZygpKSwyJm4pe2xldCBlPXcoKTtiKDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUuY3BFeHRyYVRlbXBsYXRlKX19dmFyIHpvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5IRVg9MF09IkhFWCIsbltuLlJHQkE9MV09IlJHQkEiLG5bbi5IU0xBPTJdPSJIU0xBIixuW24uQ01ZSz0zXT0iQ01ZSyJ9KHpvfHwoem89e30pKSx6bykpKCksSmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPWksdGhpcy5hPXJ9fSxUXz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLnY9aSx0aGlzLmE9cn19LFlkPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMubD1pLHRoaXMuYT1yfX0sT209Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvPTEpe3RoaXMuYz10LHRoaXMubT1lLHRoaXMueT1pLHRoaXMuaz1yLHRoaXMuYT1vfX0sZFZlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm5ld1ZhbHVlPW5ldyBMfWlucHV0Q2hhbmdlKGUpe2xldCBpPWUudGFyZ2V0LnZhbHVlO2lmKHZvaWQgMD09PXRoaXMucmcpdGhpcy5uZXdWYWx1ZS5lbWl0KGkpO2Vsc2V7bGV0IHI9cGFyc2VGbG9hdChpKTt0aGlzLm5ld1ZhbHVlLmVtaXQoe3Y6cixyZzp0aGlzLnJnfSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwidGV4dCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5pbnB1dENoYW5nZShvKX0pfSxpbnB1dHM6e3JnOiJyZyIsdGV4dDoidGV4dCJ9LG91dHB1dHM6e25ld1ZhbHVlOiJuZXdWYWx1ZSJ9fSksbn0pKCksdVZlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5lbFJlZj1lLHRoaXMuZHJhZ0VuZD1uZXcgTCx0aGlzLmRyYWdTdGFydD1uZXcgTCx0aGlzLm5ld1ZhbHVlPW5ldyBMLHRoaXMubGlzdGVuZXJNb3ZlPWk9PnRoaXMubW92ZShpKSx0aGlzLmxpc3RlbmVyU3RvcD0oKT0+dGhpcy5zdG9wKCl9bW91c2VEb3duKGUpe3RoaXMuc3RhcnQoZSl9dG91Y2hTdGFydChlKXt0aGlzLnN0YXJ0KGUpfW1vdmUoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0Q3Vyc29yKGUpfXN0YXJ0KGUpe3RoaXMuc2V0Q3Vyc29yKGUpLGUuc3RvcFByb3BhZ2F0aW9uKCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksdGhpcy5kcmFnU3RhcnQuZW1pdCgpfXN0b3AoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSx0aGlzLmRyYWdFbmQuZW1pdCgpfWdldFgoZSl7bGV0IGk9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybih2b2lkIDAhPT1lLnBhZ2VYP2UucGFnZVg6ZS50b3VjaGVzWzBdLnBhZ2VYKS1pLmxlZnQtd2luZG93LnBhZ2VYT2Zmc2V0fWdldFkoZSl7bGV0IGk9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybih2b2lkIDAhPT1lLnBhZ2VZP2UucGFnZVk6ZS50b3VjaGVzWzBdLnBhZ2VZKS1pLnRvcC13aW5kb3cucGFnZVlPZmZzZXR9c2V0Q3Vyc29yKGUpe2xldCBpPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCxyPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQsbz1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuZ2V0WChlKSxpKSksYT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuZ2V0WShlKSxyKSk7dm9pZCAwIT09dGhpcy5yZ1gmJnZvaWQgMCE9PXRoaXMucmdZP3RoaXMubmV3VmFsdWUuZW1pdCh7czpvL2ksdjoxLWEvcixyZ1g6dGhpcy5yZ1gscmdZOnRoaXMucmdZfSk6dm9pZCAwPT09dGhpcy5yZ1gmJnZvaWQgMCE9PXRoaXMucmdZP3RoaXMubmV3VmFsdWUuZW1pdCh7djphL3IscmdZOnRoaXMucmdZfSk6dm9pZCAwIT09dGhpcy5yZ1gmJnZvaWQgMD09PXRoaXMucmdZJiZ0aGlzLm5ld1ZhbHVlLmVtaXQoe3Y6by9pLHJnWDp0aGlzLnJnWH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJlKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsInNsaWRlciIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkubW91c2VEb3duKG8pfSkoInRvdWNoc3RhcnQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnRvdWNoU3RhcnQobyl9KX0saW5wdXRzOntyZ1g6InJnWCIscmdZOiJyZ1kiLHNsaWRlcjoic2xpZGVyIn0sb3V0cHV0czp7ZHJhZ0VuZDoiZHJhZ0VuZCIsZHJhZ1N0YXJ0OiJkcmFnU3RhcnQiLG5ld1ZhbHVlOiJuZXdWYWx1ZSJ9fSksbn0pKCksX0E9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy52PWksdGhpcy5hPXJ9fSx5QT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLnY9aSx0aGlzLmE9cn19LEpWPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFjdGl2ZT1udWxsfXNldEFjdGl2ZShlKXt0aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUhPT1lJiYiaW5saW5lIiE9PXRoaXMuYWN0aXZlLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5hY3RpdmUuY2xvc2VEaWFsb2coKSx0aGlzLmFjdGl2ZT1lfWhzdmEyaHNsYShlKXtsZXQgaT1lLmgscj1lLnMsbz1lLnYsYT1lLmE7aWYoMD09PW8pcmV0dXJuIG5ldyBZZChpLDAsMCxhKTtpZigwPT09ciYmMT09PW8pcmV0dXJuIG5ldyBZZChpLDEsMSxhKTt7bGV0IHM9byooMi1yKS8yO3JldHVybiBuZXcgWWQoaSxvKnIvKDEtTWF0aC5hYnMoMipzLTEpKSxzLGEpfX1oc2xhMmhzdmEoZSl7bGV0IGk9TWF0aC5taW4oZS5oLDEpLHI9TWF0aC5taW4oZS5zLDEpLG89TWF0aC5taW4oZS5sLDEpLGE9TWF0aC5taW4oZS5hLDEpO2lmKDA9PT1vKXJldHVybiBuZXcgVF8oaSwwLDAsYSk7e2xldCBzPW8rciooMS1NYXRoLmFicygyKm8tMSkpLzI7cmV0dXJuIG5ldyBUXyhpLDIqKHMtbykvcyxzLGEpfX1oc3ZhVG9SZ2JhKGUpe2xldCBpLHIsbyxhPWUuaCxzPWUucyxsPWUudixjPWUuYSxkPU1hdGguZmxvb3IoNiphKSx1PTYqYS1kLHA9bCooMS1zKSxmPWwqKDEtdSpzKSxtPWwqKDEtKDEtdSkqcyk7c3dpdGNoKGQlNil7Y2FzZSAwOmk9bCxyPW0sbz1wO2JyZWFrO2Nhc2UgMTppPWYscj1sLG89cDticmVhaztjYXNlIDI6aT1wLHI9bCxvPW07YnJlYWs7Y2FzZSAzOmk9cCxyPWYsbz1sO2JyZWFrO2Nhc2UgNDppPW0scj1wLG89bDticmVhaztjYXNlIDU6aT1sLHI9cCxvPWY7YnJlYWs7ZGVmYXVsdDppPTAscj0wLG89MH1yZXR1cm4gbmV3IEpsKGkscixvLGMpfWNteWtUb1JnYihlKXtyZXR1cm4gbmV3IEpsKCgxLWUuYykqKDEtZS5rKSwoMS1lLm0pKigxLWUuayksKDEtZS55KSooMS1lLmspLGUuYSl9cmdiYVRvQ215ayhlKXtsZXQgaT0xLU1hdGgubWF4KGUucixlLmcsZS5iKTtyZXR1cm4gMT09PWk/bmV3IE9tKDAsMCwwLDEsZS5hKTpuZXcgT20oKDEtZS5yLWkpLygxLWkpLCgxLWUuZy1pKS8oMS1pKSwoMS1lLmItaSkvKDEtaSksaSxlLmEpfXJnYmFUb0hzdmEoZSl7bGV0IGkscixvPU1hdGgubWluKGUuciwxKSxhPU1hdGgubWluKGUuZywxKSxzPU1hdGgubWluKGUuYiwxKSxsPU1hdGgubWluKGUuYSwxKSxjPU1hdGgubWF4KG8sYSxzKSxkPU1hdGgubWluKG8sYSxzKSx1PWMscD1jLWQ7aWYocj0wPT09Yz8wOnAvYyxjPT09ZClpPTA7ZWxzZXtzd2l0Y2goYyl7Y2FzZSBvOmk9KGEtcykvcCsoYTxzPzY6MCk7YnJlYWs7Y2FzZSBhOmk9KHMtbykvcCsyO2JyZWFrO2Nhc2UgczppPShvLWEpL3ArNDticmVhaztkZWZhdWx0Omk9MH1pLz02fXJldHVybiBuZXcgVF8oaSxyLHUsbCl9cmdiYVRvSGV4KGUsaSl7bGV0IHI9IiMiKygxNjc3NzIxNnxlLnI8PDE2fGUuZzw8OHxlLmIpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7cmV0dXJuIGkmJihyKz0oMjU2fE1hdGgucm91bmQoMjU1KmUuYSkpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpLHJ9bm9ybWFsaXplQ01ZSyhlKXtyZXR1cm4gbmV3IE9tKGUuYy8xMDAsZS5tLzEwMCxlLnkvMTAwLGUuay8xMDAsZS5hKX1kZW5vcm1hbGl6ZUNNWUsoZSl7cmV0dXJuIG5ldyBPbShNYXRoLmZsb29yKDEwMCplLmMpLE1hdGguZmxvb3IoMTAwKmUubSksTWF0aC5mbG9vcigxMDAqZS55KSxNYXRoLmZsb29yKDEwMCplLmspLGUuYSl9ZGVub3JtYWxpemVSR0JBKGUpe3JldHVybiBuZXcgSmwoTWF0aC5yb3VuZCgyNTUqZS5yKSxNYXRoLnJvdW5kKDI1NSplLmcpLE1hdGgucm91bmQoMjU1KmUuYiksZS5hKX1zdHJpbmdUb0hzdmEoZT0iIixpPSExKXtsZXQgcj1udWxsO2U9KGV8fCIiKS50b0xvd2VyQ2FzZSgpO2xldCBvPVt7cmU6LyhyZ2IpYT9cKFxzKihcZHsxLDN9KVxzKixccyooXGR7MSwzfSlccyolPyxccyooXGR7MSwzfSlccyolPyg/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEpsKHBhcnNlSW50KGFbMl0sMTApLzI1NSxwYXJzZUludChhWzNdLDEwKS8yNTUscGFyc2VJbnQoYVs0XSwxMCkvMjU1LGlzTmFOKHBhcnNlRmxvYXQoYVs1XSkpPzE6cGFyc2VGbG9hdChhWzVdKSl9fSx7cmU6Lyhoc2wpYT9cKFxzKihcZHsxLDN9KVxzKixccyooXGR7MSwzfSklXHMqLFxzKihcZHsxLDN9KSVccyooPzosXHMqKFxkKyg/OlwuXGQrKT8pXHMqKT9cKS8scGFyc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBZZChwYXJzZUludChhWzJdLDEwKS8zNjAscGFyc2VJbnQoYVszXSwxMCkvMTAwLHBhcnNlSW50KGFbNF0sMTApLzEwMCxpc05hTihwYXJzZUZsb2F0KGFbNV0pKT8xOnBhcnNlRmxvYXQoYVs1XSkpfX1dO28ucHVzaChpP3tyZTovIyhbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSk/JC8scGFyc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBKbChwYXJzZUludChhWzFdLDE2KS8yNTUscGFyc2VJbnQoYVsyXSwxNikvMjU1LHBhcnNlSW50KGFbM10sMTYpLzI1NSxwYXJzZUludChhWzRdfHwiRkYiLDE2KS8yNTUpfX06e3JlOi8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pJC8scGFyc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBKbChwYXJzZUludChhWzFdLDE2KS8yNTUscGFyc2VJbnQoYVsyXSwxNikvMjU1LHBhcnNlSW50KGFbM10sMTYpLzI1NSwxKX19KSxvLnB1c2goe3JlOi8jKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkoW2EtZkEtRjAtOV0pJC8scGFyc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBKbChwYXJzZUludChhWzFdK2FbMV0sMTYpLzI1NSxwYXJzZUludChhWzJdK2FbMl0sMTYpLzI1NSxwYXJzZUludChhWzNdK2FbM10sMTYpLzI1NSwxKX19KTtmb3IobGV0IGEgaW4gbylpZihvLmhhc093blByb3BlcnR5KGEpKXtsZXQgcz1vW2FdLGw9cy5yZS5leGVjKGUpLGM9bCYmcy5wYXJzZShsKTtpZihjKXJldHVybiBjIGluc3RhbmNlb2YgSmw/cj10aGlzLnJnYmFUb0hzdmEoYyk6YyBpbnN0YW5jZW9mIFlkJiYocj10aGlzLmhzbGEyaHN2YShjKSkscn1yZXR1cm4gcn1vdXRwdXRGb3JtYXQoZSxpLHIpe3N3aXRjaCgiYXV0byI9PT1pJiYoaT1lLmE8MT8icmdiYSI6ImhleCIpLGkpe2Nhc2UiaHNsYSI6bGV0IG89dGhpcy5oc3ZhMmhzbGEoZSksYT1uZXcgWWQoTWF0aC5yb3VuZCgzNjAqby5oKSxNYXRoLnJvdW5kKDEwMCpvLnMpLE1hdGgucm91bmQoMTAwKm8ubCksTWF0aC5yb3VuZCgxMDAqby5hKS8xMDApO3JldHVybiBlLmE8MXx8ImFsd2F5cyI9PT1yPyJoc2xhKCIrYS5oKyIsIithLnMrIiUsIithLmwrIiUsIithLmErIikiOiJoc2woIithLmgrIiwiK2EucysiJSwiK2EubCsiJSkiO2Nhc2UicmdiYSI6bGV0IHM9dGhpcy5kZW5vcm1hbGl6ZVJHQkEodGhpcy5oc3ZhVG9SZ2JhKGUpKTtyZXR1cm4gZS5hPDF8fCJhbHdheXMiPT09cj8icmdiYSgiK3MucisiLCIrcy5nKyIsIitzLmIrIiwiK01hdGgucm91bmQoMTAwKnMuYSkvMTAwKyIpIjoicmdiKCIrcy5yKyIsIitzLmcrIiwiK3MuYisiKSI7ZGVmYXVsdDpsZXQgbD0iYWx3YXlzIj09PXJ8fCJmb3JjZWQiPT09cjtyZXR1cm4gdGhpcy5yZ2JhVG9IZXgodGhpcy5kZW5vcm1hbGl6ZVJHQkEodGhpcy5oc3ZhVG9SZ2JhKGUpKSxsKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFBuZT10eXBlb2Ygd2luZG93PCJ1IiYmIm9udG91Y2hzdGFydCJpbiB3aW5kb3cscFZlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe3RoaXMubmdab25lPWUsdGhpcy5lbFJlZj1pLHRoaXMuY2RSZWY9cix0aGlzLmRvY3VtZW50PW8sdGhpcy5wbGF0Zm9ybUlkPWEsdGhpcy5zZXJ2aWNlPXMsdGhpcy5pc0lFMTA9ITEsdGhpcy5kaWFsb2dBcnJvd1NpemU9MTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0xNSx0aGlzLmRpYWxvZ0lucHV0RmllbGRzPVt6by5IRVgsem8uUkdCQSx6by5IU0xBLHpvLkNNWUtdLHRoaXMudXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5leWVEcm9wcGVyU3VwcG9ydGVkPWJ3KHRoaXMucGxhdGZvcm1JZCkmJiJFeWVEcm9wcGVyImluIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXd9aGFuZGxlRXNjKGUpe3RoaXMuc2hvdyYmInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLm9uQ2FuY2VsQ29sb3IoZSl9aGFuZGxlRW50ZXIoZSl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25BY2NlcHRDb2xvcihlKX1uZ09uSW5pdCgpe3RoaXMuc2xpZGVyPW5ldyBfQSgwLDAsMCwwKSx0aGlzLnNsaWRlckRpbU1heD1uZXcgeUEodGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMuZm9ybWF0PXRoaXMuY3BDbXlrRW5hYmxlZD96by5DTVlLOiJyZ2JhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/em8uUkdCQToiaHNsYSI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0P3pvLkhTTEE6em8uSEVYLHRoaXMubGlzdGVuZXJNb3VzZURvd249cj0+e3RoaXMub25Nb3VzZURvd24ocil9LHRoaXMubGlzdGVuZXJSZXNpemU9KCk9Pnt0aGlzLm9uUmVzaXplKCl9LHRoaXMub3BlbkRpYWxvZyh0aGlzLmluaXRpYWxDb2xvciwhMSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNsb3NlRGlhbG9nKCl9bmdBZnRlclZpZXdJbml0KCl7MjMwPT09dGhpcy5jcFdpZHRoJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5fHwodGhpcy5zbGlkZXJEaW1NYXg9bmV3IHlBKHRoaXMuaHVlU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCx0aGlzLmNwV2lkdGgsMTMwLHRoaXMuYWxwaGFTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwKSx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExKSx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSl9b3BlbkRpYWxvZyhlLGk9ITApe3RoaXMuc2VydmljZS5zZXRBY3RpdmUodGhpcyksdGhpcy53aWR0aHx8KHRoaXMuY3BXaWR0aD10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCksdGhpcy5oZWlnaHR8fCh0aGlzLmhlaWdodD0zMjApLHRoaXMuc2V0SW5pdGlhbENvbG9yKGUpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKGUsaSksdGhpcy5vcGVuQ29sb3JQaWNrZXIoKX1jbG9zZURpYWxvZygpe3RoaXMuY2xvc2VDb2xvclBpY2tlcigpfXNldHVwRGlhbG9nKGUsaSxyLG8sYSxzLGwsYyxkLHUscCxmLG0seSxNLHYseCxSLEEsSCx0ZSxLLENlLFplLEllLEkscmUsY2UsZmUsX2UsbmUsZGUsdWUsR2UsTWUsTmUsY3Qsd3Qpe3RoaXMuc2V0SW5pdGlhbENvbG9yKHIpLHRoaXMuc2V0Q29sb3JNb2RlKGMpLHRoaXMuaXNJRTEwPTEwPT09ZnVuY3Rpb24oKXtsZXQgbj0iIjt0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmKG49bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTtsZXQgdD1uLmluZGV4T2YoIm1zaWUgIik7cmV0dXJuIHQ+MCYmcGFyc2VJbnQobi5zdWJzdHJpbmcodCs1LG4uaW5kZXhPZigiLiIsdCkpLDEwKX0oKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlPWUsdGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmPWksdGhpcy5jcERpc2FibGVJbnB1dD1mLHRoaXMuY3BDbXlrRW5hYmxlZD1kLHRoaXMuY3BBbHBoYUNoYW5uZWw9dSx0aGlzLmNwT3V0cHV0Rm9ybWF0PXAsdGhpcy5jcERpYWxvZ0Rpc3BsYXk9cyx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPW0sdGhpcy5jcFNhdmVDbGlja091dHNpZGU9eSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGU9TSx0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyPXYsdGhpcy53aWR0aD10aGlzLmNwV2lkdGg9cGFyc2VJbnQobywxMCksdGhpcy5oZWlnaHQ9dGhpcy5jcEhlaWdodD1wYXJzZUludChhLDEwKSx0aGlzLmNwUG9zaXRpb249eCx0aGlzLmNwUG9zaXRpb25PZmZzZXQ9cGFyc2VJbnQoUiwxMCksdGhpcy5jcE9LQnV0dG9uPUksdGhpcy5jcE9LQnV0dG9uVGV4dD1jZSx0aGlzLmNwT0tCdXR0b25DbGFzcz1yZSx0aGlzLmNwQ2FuY2VsQnV0dG9uPWZlLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PW5lLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz1fZSx0aGlzLmNwRXllRHJvcHBlcj1OZSx0aGlzLmZhbGxiYWNrQ29sb3I9bHx8IiNmZmYiLHRoaXMuc2V0UHJlc2V0Q29uZmlnKEgsdGUpLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcz1LLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Q2UsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZT1aZSx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M9SWUsdGhpcy5jcEFkZENvbG9yQnV0dG9uPWRlLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQ9R2UsdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3M9dWUsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M9TWUsdGhpcy5jcFRyaWdnZXJFbGVtZW50PWN0LHRoaXMuY3BFeHRyYVRlbXBsYXRlPXd0LEF8fCh0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTApLCJpbmxpbmUiPT09cyYmKHRoaXMuZGlhbG9nQXJyb3dTaXplPTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaGV4Ij09PXAmJiJhbHdheXMiIT09dSYmImZvcmNlZCIhPT11JiYodGhpcy5jcEFscGhhQ2hhbm5lbD0iZGlzYWJsZWQiKX1zZXRDb2xvck1vZGUoZSl7c3dpdGNoKGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpKXtjYXNlIjEiOmNhc2UiQyI6Y2FzZSJDT0xPUiI6ZGVmYXVsdDp0aGlzLmNwQ29sb3JNb2RlPTE7YnJlYWs7Y2FzZSIyIjpjYXNlIkciOmNhc2UiR1JBWVNDQUxFIjp0aGlzLmNwQ29sb3JNb2RlPTI7YnJlYWs7Y2FzZSIzIjpjYXNlIlAiOmNhc2UiUFJFU0VUUyI6dGhpcy5jcENvbG9yTW9kZT0zfX1zZXRJbml0aWFsQ29sb3IoZSl7dGhpcy5pbml0aWFsQ29sb3I9ZX1zZXRQcmVzZXRDb25maWcoZSxpKXt0aGlzLmNwUHJlc2V0TGFiZWw9ZSx0aGlzLmNwUHJlc2V0Q29sb3JzPWl9c2V0Q29sb3JGcm9tU3RyaW5nKGUsaT0hMCxyPSEwKXtsZXQgbzsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbD8obz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITApLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpKSk6bz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKHRoaXMuZmFsbGJhY2tDb2xvciwhMSkpLG8mJih0aGlzLmhzdmE9byx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsImhleCI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiYiZGlzYWJsZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKHRoaXMuaHN2YS5hPTEpLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoaSxyKSl9b25SZXNpemUoKXsiZml4ZWQiPT09dGhpcy5wb3NpdGlvbj90aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCk6ImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25EcmFnRW5kKGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ0VuZCh7c2xpZGVyOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uRHJhZ1N0YXJ0KGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ1N0YXJ0KHtzbGlkZXI6ZSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25Nb3VzZURvd24oZSl7dGhpcy5zaG93JiYhdGhpcy5pc0lFMTAmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmZS50YXJnZXQhPT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCYmIXRoaXMuaXNEZXNjZW5kYW50KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJiF0aGlzLmlzRGVzY2VuZGFudCh0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJjA9PT10aGlzLmNwSWdub3JlZEVsZW1lbnRzLmZpbHRlcihpPT5pPT09ZS50YXJnZXQpLmxlbmd0aCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jcFNhdmVDbGlja091dHNpZGU/dGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpOih0aGlzLmhzdmE9bnVsbCx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMSksdGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNhbmNlbGVkKCkpLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9KX1vbkFjY2VwdENvbG9yKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vdXRwdXRDb2xvciYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpLCJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25DYW5jZWxDb2xvcihlKXt0aGlzLmhzdmE9bnVsbCxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCEwKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJih0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yLCEwKSx0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKSl9b25FeWVEcm9wcGVyKCl7dGhpcy5leWVEcm9wcGVyU3VwcG9ydGVkJiYobmV3IHdpbmRvdy5FeWVEcm9wcGVyKS5vcGVuKCkudGhlbihpPT57dGhpcy5zZXRDb2xvckZyb21TdHJpbmcoaS5zUkdCSGV4LCEwKX0pfW9uRm9ybWF0VG9nZ2xlKGUpe2xldCBpPXRoaXMuZGlhbG9nSW5wdXRGaWVsZHMubGVuZ3RoLSh0aGlzLmNwQ215a0VuYWJsZWQ/MDoxKSxyPSgodGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5pbmRleE9mKHRoaXMuZm9ybWF0KStlKSVpK2kpJWk7dGhpcy5mb3JtYXQ9dGhpcy5kaWFsb2dJbnB1dEZpZWxkc1tyXX1vbkNvbG9yQ2hhbmdlKGUpe3RoaXMuaHN2YS5zPWUucy9lLnJnWCx0aGlzLmhzdmEudj1lLnYvZS5yZ1ksdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJsaWdodG5lc3MiLHZhbHVlOnRoaXMuaHN2YS52LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoic2F0dXJhdGlvbiIsdmFsdWU6dGhpcy5oc3ZhLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS5oPWUudi9lLnJnWCx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJodWUiLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS52PWUudi9lLnJnWCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InZhbHVlIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUNoYW5nZShlKXt0aGlzLmhzdmEuYT1lLnYvZS5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJhbHBoYSIsdmFsdWU6dGhpcy5oc3ZhLmEsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSGV4SW5wdXQoZSl7aWYobnVsbD09PWUpdGhpcy51cGRhdGVDb2xvclBpY2tlcigpO2Vsc2V7ZSYmIiMiIT09ZVswXSYmKGU9IiMiK2UpO2xldCBpPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fSkkL2dpOyJhbHdheXMiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKGk9L14jKFthLWYwLTldezN9fFthLWYwLTldezZ9fFthLWYwLTldezh9KSQvZ2kpO2xldCByPWkudGVzdChlKTtyJiYoZS5sZW5ndGg8NSYmKGU9IiMiK2Uuc3Vic3RyaW5nKDEpLnNwbGl0KCIiKS5tYXAobz0+bytvKS5qb2luKCIiKSksImZvcmNlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsJiYoZSs9TWF0aC5yb3VuZCgyNTUqdGhpcy5oc3ZhLmEpLnRvU3RyaW5nKDE2KSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSwhMCwhMSkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaGV4Iix2YWxpZDpyLHZhbHVlOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfX1vblJlZElucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkscj0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7ciYmKGkucj1lLnYvZS5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLnJnYmFUb0hzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJyZWQiLHZhbGlkOnIsdmFsdWU6aS5yLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsdWVJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmI9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmx1ZSIsdmFsaWQ6cix2YWx1ZTppLmIsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uR3JlZW5JbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmc9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiZ3JlZW4iLHZhbGlkOnIsdmFsdWU6aS5nLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmg9ZS52L2UucmcsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJodWUiLHZhbGlkOmksdmFsdWU6dGhpcy5oc3ZhLmgsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uVmFsdWVJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS52PWUudi9lLnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ2YWx1ZSIsdmFsaWQ6aSx2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmE9ZS52L2UucmcsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImFscGhhIix2YWxpZDppLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkxpZ2h0bmVzc0lucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5sPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibGlnaHRuZXNzIix2YWxpZDpyLHZhbHVlOmkubCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25TYXR1cmF0aW9uSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLnM9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5oc2xhMmhzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJzYXR1cmF0aW9uIix2YWxpZDpyLHZhbHVlOmkucyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25DeWFuSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLmM9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImN5YW4iLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5jLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbk1hZ2VudGFJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsubT1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibWFnZW50YSIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLm0sY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uWWVsbG93SW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLnk9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6InllbGxvdyIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLnksY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQmxhY2tJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsuaz1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmxhY2siLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5rLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkFkZFByZXNldENvbG9yKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcihyPT5yPT09aSkubGVuZ3RofHwodGhpcy5jcFByZXNldENvbG9ycz10aGlzLmNwUHJlc2V0Q29sb3JzLmNvbmNhdChpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycykpfW9uUmVtb3ZlUHJlc2V0Q29sb3IoZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIocj0+ciE9PWkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UucHJlc2V0Q29sb3JzQ2hhbmdlZCh0aGlzLmNwUHJlc2V0Q29sb3JzKX1vcGVuQ29sb3JQaWNrZXIoKXt0aGlzLnNob3d8fCh0aGlzLnNob3c9ITAsdGhpcy5oaWRkZW49ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuaGlkZGVuPSExLHRoaXMuc2V0RGlhbG9nUG9zaXRpb24oKSx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKX0sMCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITApLHRoaXMuaXNJRTEwfHx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e1BuZT9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKTpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMubGlzdGVuZXJNb3VzZURvd24pfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5saXN0ZW5lclJlc2l6ZSkpfWNsb3NlQ29sb3JQaWNrZXIoKXt0aGlzLnNob3cmJih0aGlzLnNob3c9ITEsdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITEpLHRoaXMuaXNJRTEwfHwoUG5lP2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMubGlzdGVuZXJNb3VzZURvd24pOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5saXN0ZW5lck1vdXNlRG93bikpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpLHRoaXMuY2RSZWYuZGVzdHJveWVkfHx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlQ29sb3JQaWNrZXIoZT0hMCxpPSEwLHI9ITEpe2lmKHRoaXMuc2xpZGVyRGltTWF4KXsyPT09dGhpcy5jcENvbG9yTW9kZSYmKHRoaXMuaHN2YS5zPTApO2xldCBvLGEscyxsPXRoaXMub3V0cHV0Q29sb3I7aWYoYT10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSksdGhpcy5jcENteWtFbmFibGVkPyhyPyhzPXRoaXMuc2VydmljZS5jbXlrVG9SZ2IodGhpcy5zZXJ2aWNlLm5vcm1hbGl6ZUNNWUsodGhpcy5jbXlrKSksdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKHMpKToocz10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHRoaXMuY215az10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVDTVlLKHRoaXMuc2VydmljZS5yZ2JhVG9DbXlrKHMpKSkscz10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHMpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCk6cz10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpLG89dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYShuZXcgVF8odGhpcy5zbGlkZXJIfHx0aGlzLmhzdmEuaCwxLDEsMSkpKSxpJiYodGhpcy5oc2xhVGV4dD1uZXcgWWQoTWF0aC5yb3VuZCgzNjAqYS5oKSxNYXRoLnJvdW5kKDEwMCphLnMpLE1hdGgucm91bmQoMTAwKmEubCksTWF0aC5yb3VuZCgxMDAqYS5hKS8xMDApLHRoaXMucmdiYVRleHQ9bmV3IEpsKHMucixzLmcscy5iLE1hdGgucm91bmQoMTAwKnMuYSkvMTAwKSx0aGlzLmNwQ215a0VuYWJsZWQmJih0aGlzLmNteWtUZXh0PW5ldyBPbSh0aGlzLmNteWsuYyx0aGlzLmNteWsubSx0aGlzLmNteWsueSx0aGlzLmNteWsuayxNYXRoLnJvdW5kKDEwMCp0aGlzLmNteWsuYSkvMTAwKSksdGhpcy5oZXhUZXh0PXRoaXMuc2VydmljZS5yZ2JhVG9IZXgocywiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuaGV4QWxwaGE9dGhpcy5yZ2JhVGV4dC5hKSwiYXV0byI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiZ0aGlzLmZvcm1hdCE9PXpvLlJHQkEmJnRoaXMuZm9ybWF0IT09em8uQ01ZSyYmdGhpcy5mb3JtYXQhPT16by5IU0xBJiZ0aGlzLmhzdmEuYTwxJiYodGhpcy5mb3JtYXQ9dGhpcy5oc3ZhLmE8MT96by5SR0JBOnpvLkhFWCksdGhpcy5odWVTbGlkZXJDb2xvcj0icmdiKCIrby5yKyIsIitvLmcrIiwiK28uYisiKSIsdGhpcy5hbHBoYVNsaWRlckNvbG9yPSJyZ2IoIitzLnIrIiwiK3MuZysiLCIrcy5iKyIpIix0aGlzLm91dHB1dENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcEFscGhhQ2hhbm5lbCksdGhpcy5zZWxlY3RlZENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLCJyZ2JhIixudWxsKSx0aGlzLmZvcm1hdCE9PXpvLkNNWUspdGhpcy5jbXlrQ29sb3I9IiI7ZWxzZSBpZigiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJlbmFibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCl7bGV0IGM9TWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMDt0aGlzLmNteWtDb2xvcj1gY215a2EoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30sJHtjfSlgfWVsc2UgdGhpcy5jbXlrQ29sb3I9YGNteWsoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30pYDt0aGlzLnNsaWRlcj1uZXcgX0EoKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgpKnRoaXMuc2xpZGVyRGltTWF4LmgtOCx0aGlzLmhzdmEucyp0aGlzLnNsaWRlckRpbU1heC5zLTgsKDEtdGhpcy5oc3ZhLnYpKnRoaXMuc2xpZGVyRGltTWF4LnYtOCx0aGlzLmhzdmEuYSp0aGlzLnNsaWRlckRpbU1heC5hLTgpLGUmJmwhPT10aGlzLm91dHB1dENvbG9yJiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKSl9fXNldERpYWxvZ1Bvc2l0aW9uKCl7aWYoImlubGluZSI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSl0aGlzLnBvc2l0aW9uPSJyZWxhdGl2ZSI7ZWxzZXtsZXQgcixlPSJzdGF0aWMiLGk9IiIsbz1udWxsLGE9bnVsbCxzPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsbD10aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7Zm9yKDtudWxsIT09cyYmIkhUTUwiIT09cy50YWdOYW1lOyl7aWYocj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzKSxlPXIuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKSxpPXIuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksInN0YXRpYyIhPT1lJiZudWxsPT09byYmKG89cyksaSYmIm5vbmUiIT09aSYmbnVsbD09PWEmJihhPXMpLCJmaXhlZCI9PT1lKXtvPWE7YnJlYWt9cz1zLnBhcmVudE5vZGV9bGV0IGM9dGhpcy5jcmVhdGVEaWFsb2dCb3godGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImZpeGVkIiE9PWUpO2lmKHRoaXMudXNlUm9vdFZpZXdDb250YWluZXJ8fCJmaXhlZCI9PT1lJiYoIW98fG8gaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnQpKXRoaXMudG9wPWMudG9wLHRoaXMubGVmdD1jLmxlZnQ7ZWxzZXtudWxsPT09byYmKG89cyk7bGV0IHU9dGhpcy5jcmVhdGVEaWFsb2dCb3gobywiZml4ZWQiIT09ZSk7dGhpcy50b3A9Yy50b3AtdS50b3AsdGhpcy5sZWZ0PWMubGVmdC11LmxlZnR9ImZpeGVkIj09PWUmJih0aGlzLnBvc2l0aW9uPSJmaXhlZCIpO2xldCBkPXRoaXMuY3BQb3NpdGlvbjsiYXV0byI9PT10aGlzLmNwUG9zaXRpb24mJihkPWZ1bmN0aW9uKG4sdCl7bGV0IGU9InJpZ2h0IixpPSJib3R0b20iLHtoZWlnaHQ6cix3aWR0aDpvfT1uLHt0b3A6YSxsZWZ0OnN9PXQsbD1hK3QuaGVpZ2h0LGM9cyt0LndpZHRoLGQ9YS1yPDAsdT1sK3I+KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkscD1zLW88MCxmPWMrbz4od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCk7cmV0dXJuIHUmJihpPSJ0b3AiKSxkJiYoaT0iYm90dG9tIikscCYmKGU9InJpZ2h0IiksZiYmKGU9ImxlZnQiKSxkJiZ1JiZwJiZmP1sibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0ucmVkdWNlKChNLHYpPT5uW01dPm5bdl0/TTp2KTpwJiZmP2Q/ImJvdHRvbSI6dXx8YT5sPyJ0b3AiOiJib3R0b20iOmQmJnU/cD8icmlnaHQiOmZ8fHM+Yz8ibGVmdCI6InJpZ2h0IjpgJHtpfS0ke2V9YH0odGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jcFRyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSwidG9wIj09PWQ/KHRoaXMuYXJyb3dUb3A9bC0xLHRoaXMudG9wLT1sK3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJib3R0b20iPT09ZD8odGhpcy50b3ArPWMuaGVpZ2h0K3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtbGVmdCI9PT1kfHwibGVmdC10b3AiPT09ZD8odGhpcy50b3AtPWwtYy5oZWlnaHQrYy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtcmlnaHQiPT09ZHx8InJpZ2h0LXRvcCI9PT1kPyh0aGlzLnRvcC09bC1jLmhlaWdodCtjLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLHRoaXMubGVmdCs9Yy53aWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJsZWZ0Ij09PWR8fCJib3R0b20tbGVmdCI9PT1kfHwibGVmdC1ib3R0b20iPT09ZD8odGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yKToodGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQrPWMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMiksdGhpcy5jcFVzZVBvc2l0aW9uPWR9fWlzRGVzY2VuZGFudChlLGkpe2xldCByPWkucGFyZW50Tm9kZTtmb3IoO251bGwhPT1yOyl7aWYocj09PWUpcmV0dXJuITA7cj1yLnBhcmVudE5vZGV9cmV0dXJuITF9Y3JlYXRlRGlhbG9nQm94KGUsaSl7bGV0e3RvcDpyLGxlZnQ6b309ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnIrKGk/d2luZG93LnBhZ2VZT2Zmc2V0OjApLGxlZnQ6bysoaT93aW5kb3cucGFnZVhPZmZzZXQ6MCksd2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHR9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGF0KSxDKGJlKSxDKEZ0KSxDKGt0KSxDKGhjKSxDKEpWKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY29sb3ItcGlja2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKFllKElCZSw3KSxZZShBQmUsNyksWWUoUkJlLDcpKSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLmRpYWxvZ0VsZW1lbnQ9ci5maXJzdCksd2Uocj1TZSgpKSYmKGkuaHVlU2xpZGVyPXIuZmlyc3QpLHdlKHI9U2UoKSkmJihpLmFscGhhU2xpZGVyPXIuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZEKCJrZXl1cC5lc2MiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUVzYyhvKX0sMCx1YykoImtleXVwLmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVFbnRlcihvKX0sITEsdWMpfSxkZWNsczozMCx2YXJzOjUxLGNvbnN0czpbWzEsImNvbG9yLXBpY2tlciIsMywiY2xpY2siXSxbImRpYWxvZ1BvcHVwIiwiIl0sWzMsImNsYXNzIiwidG9wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJiYWNrZ3JvdW5kLWNvbG9yIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIiw0LCJuZ0lmIl0sWzEsImh1ZS1hbHBoYSIsImJveCJdLFsxLCJsZWZ0Il0sWzEsInNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmQiXSxbMSwic2VsZWN0ZWQtY29sb3IiLDMsImNsaWNrIl0sWyJjbGFzcyIsImV5ZWRyb3BwZXItaWNvbiIsInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicmlnaHQiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNnB4OyIsNCwibmdJZiJdLFsxLCJodWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiaHVlU2xpZGVyIiwiIl0sWzEsImN1cnNvciJdLFsxLCJ2YWx1ZSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ2YWx1ZVNsaWRlciIsIiJdLFsxLCJhbHBoYSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJhbHBoYVNsaWRlciIsIiJdLFsiY2xhc3MiLCJjbXlrLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaHNsYS10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJnYmEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoZXgtdGV4dCIsMywiaGV4LWFscGhhIiwiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2YWx1ZS10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInR5cGUtcG9saWN5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ1dHRvbi1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4dHJhLXRlbXBsYXRlIiw0LCJuZ0lmIl0sWzEsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiwxLCJleWVkcm9wcGVyLWljb24iXSxbImQiLCJNMCAwaDI0djI0SDBWMHoiLCJmaWxsIiwibm9uZSJdLFsiZCIsIk0xNy42NiA1LjQxbC45Mi45Mi0yLjY5IDIuNjktLjkyLS45MiAyLjY5LTIuNjlNMTcuNjcgM2MtLjI2IDAtLjUxLjEtLjcxLjI5bC0zLjEyIDMuMTItMS45My0xLjkxLTEuNDEgMS40MSAxLjQyIDEuNDJMMyAxNi4yNVYyMWg0Ljc1bDguOTItOC45MiAxLjQyIDEuNDIgMS40MS0xLjQxLTEuOTItMS45MiAzLjEyLTMuMTJjLjQtLjQuNC0xLjAzLjAxLTEuNDJsLTIuMzQtMi4zNGMtLjItLjE5LS40NS0uMjktLjctLjI5ek02LjkyIDE5TDUgMTcuMDhsOC4wNi04LjA2IDEuOTIgMS45Mkw2LjkyIDE5eiJdLFsidHlwZSIsImJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsyLCJoZWlnaHQiLCIxNnB4Il0sWzEsImNteWstdGV4dCJdLFsxLCJib3giXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjEwMCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJoc2xhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjM2MCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInJnYmEtdGV4dCJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSoiLCJtaW4iLCIwIiwibWF4IiwiMjU1IiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaGV4LXRleHQiXSxbMywidGV4dCIsInZhbHVlIiwiYmx1ciIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwidmFsdWUtdGV4dCJdLFsxLCJ0eXBlLXBvbGljeSJdLFsxLCJ0eXBlLXBvbGljeS1hcnJvdyIsMywiY2xpY2siXSxbMSwicHJlc2V0LWFyZWEiXSxbMSwicHJlc2V0LWxhYmVsIl0sWzMsImNsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1jb2xvciIsMywiYmFja2dyb3VuZENvbG9yIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJwcmVzZXQtY29sb3IiLDMsImNsaWNrIl0sWzMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwiYnV0dG9uLWFyZWEiXSxbInR5cGUiLCJidXR0b24iLDMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDMsImNsaWNrIl0sWzEsImV4dHJhLXRlbXBsYXRlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCwxKSxEKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIG8uc3RvcFByb3BhZ2F0aW9uKCl9KSxTKDIsa0JlLDEsNSwiZGl2IiwyKSxTKDMsUEJlLDIsOCwiZGl2IiwzKSxoKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxQKDYsImRpdiIsNiksaCg3LCJkaXYiLDcpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyJiZpLm9uRXllRHJvcHBlcigpfSksUyg4LE9CZSwzLDAsInN2ZyIsOCksZygpLFMoOSxGQmUsMiw1LCJidXR0b24iLDkpLGcoKSxoKDEwLCJkaXYiLDEwKSxTKDExLExCZSwxLDAsImRpdiIsMTEpLGgoMTIsImRpdiIsMTIsMTMpLEQoIm5ld1ZhbHVlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkh1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoImh1ZSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJodWUiKX0pLFAoMTQsImRpdiIsMTQpLGcoKSxoKDE1LCJkaXYiLDE1LDE2KSxEKCJuZXdWYWx1ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WYWx1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoInZhbHVlIil9KSgiZHJhZ0VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkRyYWdFbmQoInZhbHVlIil9KSxQKDE3LCJkaXYiLDE0KSxnKCksaCgxOCwiZGl2IiwxNywxOCksRCgibmV3VmFsdWUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQWxwaGFDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJhbHBoYSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJhbHBoYSIpfSksUCgyMCwiZGl2IiwxNCksZygpKCkoKSxTKDIxLFZCZSwxNywxMiwiZGl2IiwxOSksUygyMixVQmUsMTQsMTAsImRpdiIsMjApLFMoMjMsV0JlLDE0LDEwLCJkaXYiLDIxKSxTKDI0LFhCZSw4LDcsImRpdiIsMjIpLFMoMjUsWkJlLDksMywiZGl2IiwyMyksUygyNixLQmUsMywwLCJkaXYiLDI0KSxTKDI3LG5WZSw2LDMsImRpdiIsMjUpLFMoMjgsb1ZlLDMsMiwiZGl2IiwyNiksUygyOSxzVmUsMiwxLCJkaXYiLDI3KSxnKCkpLDImZSYmKE10KCJkaXNwbGF5IixpLnNob3c/ImJsb2NrIjoibm9uZSIpKCJ2aXNpYmlsaXR5IixpLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIpKCJ0b3AiLGkudG9wLCJweCIpKCJsZWZ0IixpLmxlZnQsInB4IikoInBvc2l0aW9uIixpLnBvc2l0aW9uKSgiaGVpZ2h0IixpLmNwSGVpZ2h0LCJweCIpKCJ3aWR0aCIsaS5jcFdpZHRoLCJweCIpLFFlKCJvcGVuIixpLnNob3cpLGIoMiksXygibmdJZiIsInBvcHVwIj09PWkuY3BEaWFsb2dEaXNwbGF5KSxiKDEpLF8oIm5nSWYiLDE9PT0oaS5jcENvbG9yTW9kZXx8MSkpLGIoNCksTXQoImJhY2tncm91bmQtY29sb3IiLGkuc2VsZWN0ZWRDb2xvcikoImN1cnNvciIsaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlcj8icG9pbnRlciI6bnVsbCksYigxKSxfKCJuZ0lmIixpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyKSxiKDEpLF8oIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbiksYigyKSxfKCJuZ0lmIiwiZGlzYWJsZWQiPT09aS5jcEFscGhhQ2hhbm5lbCksYigxKSxNdCgiZGlzcGxheSIsMT09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksXygicmdYIiwxKSxiKDIpLE10KCJsZWZ0IixudWxsPT1pLnNsaWRlcj9udWxsOmkuc2xpZGVyLmgsInB4IiksYigxKSxNdCgiZGlzcGxheSIsMj09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksXygicmdYIiwxKSxiKDIpLE10KCJyaWdodCIsbnVsbD09aS5zbGlkZXI/bnVsbDppLnNsaWRlci52LCJweCIpLGIoMSksTXQoImRpc3BsYXkiLCJkaXNhYmxlZCI9PT1pLmNwQWxwaGFDaGFubmVsPyJub25lIjoiYmxvY2siKSgiYmFja2dyb3VuZC1jb2xvciIsaS5hbHBoYVNsaWRlckNvbG9yKSxfKCJyZ1giLDEpLGIoMiksTXQoImxlZnQiLG51bGw9PWkuc2xpZGVyP251bGw6aS5zbGlkZXIuYSwicHgiKSxiKDEpLF8oIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSxiKDEpLF8oIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSxiKDEpLF8oIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSxiKDEpLF8oIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSxiKDEpLF8oIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYyPT09KGkuY3BDb2xvck1vZGV8fDEpKSxiKDEpLF8oIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSxiKDEpLF8oIm5nSWYiLChudWxsPT1pLmNwUHJlc2V0Q29sb3JzP251bGw6aS5jcFByZXNldENvbG9ycy5sZW5ndGgpfHxpLmNwQWRkQ29sb3JCdXR0b24pLGIoMSksXygibmdJZiIsaS5jcE9LQnV0dG9ufHxpLmNwQ2FuY2VsQnV0dG9uKSxiKDEpLF8oIm5nSWYiLGkuY3BFeHRyYVRlbXBsYXRlKSl9LGRlcGVuZGVuY2llczpbZG4sRmUsTW8sZFZlLHVWZV0sc3R5bGVzOlsnLmNvbG9yLXBpY2tlcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7d2lkdGg6MjMwcHg7aGVpZ2h0OmF1dG87Ym9yZGVyOiM3Nzcgc29saWQgMXB4O2N1cnNvcjpkZWZhdWx0Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uY29sb3ItcGlja2VyICp7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO2ZvbnQtc2l6ZToxMXB4fS5jb2xvci1waWNrZXIgaW5wdXR7d2lkdGg6MDtoZWlnaHQ6MjZweDttaW4td2lkdGg6MDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojMDAwfS5jb2xvci1waWNrZXIgaW5wdXQ6aW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otdWktaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otc3VibWl0LWludmFsaWR7Ym94LXNoYWRvdzpub25lfS5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmNvbG9yLXBpY2tlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbnttYXJnaW46MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY29sb3ItcGlja2VyIC5hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTk5OTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1zdHlsZTpzb2xpZH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3B7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjojNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbXt0b3A6LTIwcHg7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtdG9we3JpZ2h0Oi0yMXB4O2JvdHRvbTo4cHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC10b3B7Ym90dG9tOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtYm90dG9tLC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbS1sZWZ0e3RvcDo4cHg7cmlnaHQ6LTIxcHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LWJvdHRvbSwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tcmlnaHR7dG9wOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5jdXJzb3J7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6IzIyMiBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOmRlZmF1bHR9LmNvbG9yLXBpY2tlciAuYm94e2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjRweCA4cHh9LmNvbG9yLXBpY2tlciAubGVmdHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE2cHggOHB4fS5jb2xvci1waWNrZXIgLnJpZ2h0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxMnB4IDhweH0uY29sb3ItcGlja2VyIC5idXR0b24tYXJlYXtwYWRkaW5nOjAgMTZweCAxNnB4O3RleHQtYWxpZ246cmlnaHR9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWEgYnV0dG9ue21hcmdpbi1sZWZ0OjhweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYXtwYWRkaW5nOjRweCAxNXB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtbGFiZWx7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7cGFkZGluZzo0cHg7Zm9udC1zaXplOjExcHg7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOiM1NTV9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1jb2xvcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O21hcmdpbjo0cHggNnB4IDhweDtib3JkZXI6I2E5YTlhOSBzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czoyNSU7Y3Vyc29yOnBvaW50ZXJ9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1lbXB0eS1tZXNzYWdle21pbi1oZWlnaHQ6MThweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjhweDtmb250LXN0eWxlOml0YWxpYzt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dHt3aWR0aDoxMDAlO3BhZGRpbmc6NHB4IDhweDtmb250LXNpemU6MTFweH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBkaXZ7ZmxvYXQ6bGVmdDtmbGV4OjEgMSBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTU7Y2xlYXI6bGVmdH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94IGlucHV0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxcHg7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmhleC1hbHBoYSAuYm94IGRpdjpmaXJzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBpbnB1dDpmaXJzdC1jaGlsZHtmbGV4LWdyb3c6MzttYXJnaW4tcmlnaHQ6OHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHR7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCA4cHg7Zm9udC1zaXplOjExcHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3h7cGFkZGluZzowIDI0cHggOHB4IDhweH0uY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3h7cGFkZGluZzowIDhweCA4cHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdntmbGV4OjEgMSBhdXRvO21hcmdpbi1yaWdodDo4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzU1NX0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGlucHV0e2Zsb2F0OmxlZnQ7ZmxleDoxO3BhZGRpbmc6MXB4O21hcmdpbjowIDhweCAwIDA7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmh1ZS1hbHBoYXthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHh9LmNvbG9yLXBpY2tlciAuaHVle2RpcmVjdGlvbjpsdHI7d2lkdGg6MTAwJTtoZWlnaHQ6MTZweDttYXJnaW4tYm90dG9tOjE2cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a1VGV2JDQ0FBQUFGeEpSRUZVYU43dDBrRUtnMEFRQU1FMng4My9uMnF1NXFDZ0QxaURoQ29ZZHBuYlFDOWJiWTFxVk8vanZjNmszYWQ5MXM3LzdGMS9jc2dQcnVqdVExN0JEWVNGc0JBV3dnSmhJU3lFQmNKQ1dBZ0xoSVd3RUJZSWkyZjdBci8xVENnRkgyWDlBQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC52YWx1ZXtkaXJlY3Rpb246cnRsO3dpZHRoOjEwMCU7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQ1RrbEVRVlI0MnUzU1lVY3JBQmhBNFUyU2ttUkpNbVdTSmtsS0ppV1pacEtVSkpza0tVbWFURkltS1pPVXpNeVNwR1JtbGlSTkppbEpTcEtTSkV0bVNwSXBtV21TZE83MzYvNkQreDdPUDNnVUNvV0N2MWNxbFNRbEpaR2NuRXhLU2dxcHFhbWtwYVdSbnA1T1JrWUdtWm1acUZRcXNyS3l5TTdPSmljbmg5emNYTlJxTlhsNWVlVG41NlBSYUNnb0tLQ3dzSkNpb2lLMFdpM0Z4Y1dVbEpSUVdscEtXVmtaNWVYbFZGUlVVRmxaaVU2bm82cXFpdXJxYW1wcWFxaXRyYVd1cmc2OVhrOTlmVDBHZ3dHajBVaERRd09OalkwME5UWFIzTnhNUzBzTHJhMnR0TFcxMGQ3ZWpzbGt3bXcyMDlIUlFXZG5KMTFkWFhSM2Q5UFQwME52Ynk5OWZYMzA5L2N6TUREQTRPQWdGb3VGb2FFaHJGWXJ3OFBEakl5TU1EbzZ5dGpZR0RhYmpmSHhjU1ltSnBpY25HUnFhZ3E3M2M3MDlEUXpNelBNenM0eU56ZkgvUHc4RG9jRHA5T0p5K1hDN1hhenNMREE0dUlpUzB0TExDOHZzN0t5d3VycUttdHJhM2c4SHJ4ZUx6NmZENy9mei9yNk9oc2JHMnh1YnJLMXRjWDI5amFCUUlDZG5SMkN3U0M3dTd2czdlMnh2Ny9Qd2NFQmg0ZUhIQjBkY1h4OHpNbkpDYWVucDV5ZG5YRitmczdGeFFXWGw1ZGNYVjF4ZlgzTnpjME50N2UzM04zZEVRcUZ1TCsvNStIaGdYQTRUQ1FTNGZIeGthZW5KNTZmbjNsNWVlSDE5WlZvTk1yYjJ4dnY3Kzk4Zkh3UWk4V0l4K044Zm42U1NDVDQrdnJpKy91Ym41OGZmbjkvK1ZjS2dTV3dCSmJBRWxnQ1MyQUpMSUVsc0FTV3dCSllBa3RnQ1N5QkpiQUVsc0FTV0FKTFlBa3NnU1d3QkpiQUVsZ0NTMkFKTElFbHNQNC9XSDhBbUo1WjZqSFM0aDhBQUFBQVNVVk9SSzVDWUlJPSl9LmNvbG9yLXBpY2tlciAuYWxwaGF7ZGlyZWN0aW9uOmx0cjt3aWR0aDoxMDAlO2hlaWdodDoxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd1lRbFpNYTNnQUFBV1ZKUkVGVWFON3RtRUdPNmpBUVJDc09BckhnQnB5QUpZR2pjR29jeEFtNEEySUhwbW9XRTBlQkgrZXptRmxOdlUwNnNoSjNXNlZFZWxXTVVRQUlJRjlmNnFacGltc0ExTFl0UzJ1RjUxL3UyN1lWQUZaVlJVa0VvR0hkUFYvc0ljYklFSUlrVWRJLzlYYTduZXl2NjErU1dGVVZBVkNTY3QwMFRXbjJmdjZ1MytFY2ZkM3RYenkvMCtuRVV1K1NQam8va3F6cm1pUXBTY042djk4WGV3ZkE4L2xNa2lMSjJXeEdTVW9wY1Q2Zk02VTBOWDkvZnJmYmpldjFXdGZybFpmTGhZZkRRUUhHL0FJT2xuR3dqSU5sSEN4akhDempZSm0vVEpXZEN3cXVKWHNlRkZ6R3dETk5laUtNT0pUTzh4UWREUWFlQjI5K0s5ZWZlTGFCbzlKN3ZkdnRKajFSakZGamZpdjdxdjk1dGp4LzdsZVNRZ2g5M2UxZmZNZUlwNk8rWVFqaG8vTjc5MXQxWFZPU1NJN04vL0srNC9Hb3hXTEJ4K1BCNS9PcDVYTEorLzNPbEpKV3F4VTNtODNvdnY1aUdmOEtqWU5sSEN4akhDempZQmtIeTVnZjVndXN2UVU3VTM3alRBQUFBQUJKUlU1RXJrSmdnZz09KX0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjE4cHg7cmlnaHQ6MTJweDt3aWR0aDoxNnB4O2hlaWdodDoyNHB4O2JhY2tncm91bmQtc2l6ZTo4cHggMTZweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQWdDQVlBQUFBZmZDanhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUNld0FBQW5zQjAxQ08zQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJQVNVUkJWRWlKN1pZOWF4UlJGSWFmc3hNU3RyTFFKcEFncEJGaGkrQzl3MVlTbzAwSTZSWi9nOXZacEJmL1FPcjRHeVJna1NLTlNyQWFkc1pxUUd3Q2t1QVd5UlpKc3lTd3ZoWjdOL3ZoenJnYkxIM0xkODU5N2pseno1MHpKb2t5eFhIOERxRFZhcjBxaTZ2OEJiSXRxU0dwRWNmeGRsbXNGV1hrdlg4QWZBVldnM1VLUEVuVDlHS3VqTXpzQUZnWnNWYUNOMVZUUWQ3N1hVbnJnRTFrdis2OTM1MjY4V1JwenJuSFp2WVJXQzdZdkMzcFJaWmwzd296cXRWcWl5SDlJZ2pBc3BrZDFHcTF4VUpRdFZyZEI5WktJQU90aGRnL1FjNjVMVWs3d05JTW9DVkpPODY1cllGaGtxalg2L2Q3dlY0R1BKd0JNcW9mVVJTNUpFazZGWUJlci9lZVliL01vOVd3Rm5QT3ZRYmVBdmZ1QUFLNEJONHNBSnRBRy9nSklFbG1OdWlKeWJhM0VHTm1aaVBlWnVFVm1WZWxsL1kvNk4rQ3pEbjNBWGhFT09vN0h2LzNCZUF6OEl6UWtNUG5KYnVQeDF3Qyt5WUo3LzBuWUlQNVMvMEZIS2RwK3J3Q0VFWFJTL3JmNUhsMUd0YjJNMGlTcENPcENaelBBVG1YMUV5U3BITUxBc2l5N01qTURvSHJHU0RYWm5hWVpkblJ3Qmg3SjkxdXR3bWN6QUE2Q2JHM0dnUGxlWDRqcVVIL2ExQ2t0cVJHbnVjM2hTQ0FNQjMyZ0tzcGtDdGdiM0tDUU1ta2plUDRXTkpUaHJOTlp2YWwxV3B0VElzdjdKdFE0dG1JZFJhOHFTb0VwV2w2WVdaTm9BTjB6S3haTlBlaHBMU0JadjJ0K1EwQ0o5bExuQVJRTEFBQUFBQkpSVTVFcmtKZ2dnPT0pO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcn0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeSAudHlwZS1wb2xpY3ktYXJyb3d7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3J7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7bGVmdDo4cHg7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3ItYmFja2dyb3VuZHt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFoMGxFUVZSWVIrMlcwUWxBTVFnRDYwemRmd09kcWE4VG1JL3dRTXI1SzBJNWJaTEl6TE9hMm50MzdWVlZiZCtkRHg1b2JnQ0MzS0JMd0oyZmY0UG5WaWRrZit1Y0lodzgwSFFhQ0xvM0RNSDNDUkszaUZzbUFXVmw2aFBORHd0OEV2TkU1cStZdUVYY01na29uVk02U2R5Q29FdkFuWjh2MUhqeDgxN01pbG14U1VCNXJkTEpEeWNaZ1VBWlVjaC9BQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC5zYXR1cmF0aW9uLWxpZ2h0bmVzc3tkaXJlY3Rpb246bHRyO3dpZHRoOjEwMCU7aGVpZ2h0OjEzMHB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU9ZQUFBQ0NDQVlBQUFCU0Q3VDNBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a3NQV1I2bGdBQUlBQkpSRUZVZU5ydG5WdVQ0N2dSckFITitQLy9Pci82MVk1d09OWjdtWjF1M1hBZUxNakpaR1pWZ2RLc2ZjNXhSM1MwUklJVVcrQ0h6Q3BjMk1jWW83WEd2M2V4N1VpWmQ1N3JqeXp6dit2KzMzWC9SLyszci9mN3ZSMzg2WStUdktOY2Yvd2RoVExQY3Y5cVUyd1pkNzR1dGgwdDE4MjFqa0laTFBjc0kvNm5XYTRYdnV0cXVVMFo4NW1ueDgwUy9aemdwbkxuT3RITnQ3L29meDFUS1hjU056Ti83cWJNUTNqdTdyTlFtTVlZZC80czJqOWFhK1ArZ0dhTWNacmIxTS90ZHJ2ZjcvZDJ2OTlQOS90OTNPLzNjYnZkeHUxMkc5ZnJkVnd1bDNFK244Yy8vL25QKzIrLy9YYjY2YWVmeGwvLyt0Zng1ei8vMllLNUFsMnJndmY0VXNicGRHckI1MmJBdkFyWHB1emptaXFBVlNHejVlRG1HWVh6aGJBWm1Dcm5temRkcFVVKzhZMWRBT1llWEN0RFV3VndWN1lDR0g2dUFteU1jWjlsNXZrVWFCUEdNVVo3L0o1dy83OTIvZnZ2OVhxOTMyNjNkci9mVHhQRUNlTUU4bks1ak0vUHovSFRUei9kdjMzN2R2cmxsMS9HUC83eGovRzN2LzF0L09VdmZ3a1Zzd29uZ2pkT3A5UHpIM1UzRDN6bVdHblpWWG40akNxczd3QzJCS1A0Lzh0QXprWnNvV3g2WHJxZUhaeW12cDRBQkNCSmhUUXdLZkRUOGd6clpDSXFpNUFoaUFDakJmRUIyclA4L1g2M01NN2Y2L1Y2djkvdjdYYTdiWUM4M1c3amNybHNWSElxNWZmdjMwKy8vZmJiK09XWFg4WlBQLzAwL3Y3M3Y0K2ZmLzc1SlN2YmV1K2JMMldNTWFGYkFscEJOTTg1UVgrY3Q2cW9TcWtQQXd1UWxCVktxR05GU1VPQUEzQm11N2dDNWhOT2QxNW5Td3ZBT1VXN0M0Z2lVQ1Y4U2duNUw5aE5GSXFUc3AwR3hJMHlzaW95akFqa1kvdEdKVkVweitmeitPV1hYKzdmdjM4Ly9mNzc3K1BidDIvajExOS9IVC8vL1BQNDlkZGZ4OGZIUndybVRqVjc3OUVYdTJweDJ4aGp3dGRKWlFjQVdRSVBMUElTc01KYVN3aUQ4Z3pJS3J3U3lBVEU1ajVuQWJSNWMxZEJVd0Jsc0VXVzBoNkxxaVlzcUZQQVF4Q3lSWjN3T1NBUnhtbFhNWDVrNjRwUWZ2djI3Zjc1K2RrK1BqNU9IeDhmNC92MzcrUGJ0Mi9qdDk5K0c5KytmUnNmSHgvamNybVVGTE8zMWdZRFdibHhSSXMvVHFmVDdvdXN4SnNBeFhBMkdjN1RBOVhkZ2Zkb0hiRnNqNzZYMisxV0FyZ0kxYWdlR3dBM3F1cHFvSHNtY2JJNkZ1OTNxdWdnRmE5ZDdMZUR0Z0tmQUZIQkorTkVCeUlrY0o1S2VydmRUbWhoR2NnSkpTWjV2bi8vZmorZnorMThQcDgrUHovSDUrZm5tR0QrL3Z2djQvdjM3K1BqNDJOOGZuNk8yKzFXczdKampQNndyYU1JNUU0Ulo4eDJ2VjVUU3drcXVvdFY3L2Q3VHo2SEZXc0QvcU5jZHcwQ1EzcS8zMjFjNjg2VHdEVklkYnV5NzN6TmxkaFNIYjhJMmtsWnpubStJbkJTNFU2bjAzMDJhQkZzTGhIREFLSlZKVmdsZkk5amh2dTUzVzUzc0xBTllOeEFpREE2TUNlVUh4OGY5K3YxMmk2WFM3dGNMcWNaVzU3UDV5ZVk4L2Z6ODNPY3orZm5zU21ZVXlrbldFRzg1V0JzdDlzdHpTTHlNZGZyOVFpMDhpWTE1VVowTGxER0xoUjNvNXpLMmo3T1BVVEQwRStuVTN0azdYYi8xNk5GYmhsb0FNdVkxempMVU9PM0JLZUlEZStaOHMzL0o0Z0ZvNFRNNWpQbXVSZzI4Zm9VS0tWU3dvMTZUZ0E1bnB5d2NXTEhnWWwvUHo4LzczLzYwNS9hYjcvOTFtNjNXN3RjTGllMHNaajRtYW81Z1R5Zno4OEUwZjErajhFY1l6d1RQRUcyY3FqeWZITkYwTThmdXFFaWFPVm5SelpaUU5oNWZ3UXlIZy9IREdmSm84OVExemIvcXV1NVhDNjc3M0kyWEtmVHFkL3Y5K2Qzd3VxV3ZhL1lUZFVkRVYzZmhJdi9WaXlwczZZRTN4M3I0M0s1YkpRUzY2emF4VkdGc3ZkKy8vajRhRisvZm0zZnYzOXZ0OXV0ZmYzNnRmMysrKy90ZHJ1ZHZuMzdadU5MQmFhQ01nVXpDK3JaUmlGb3d4VXVKSThZTXFjQ3A5T3BxNXZhZ2FZVTZsR0pBMVhRcWVqY2h3NkNqMEd3NW5ZQnJHdzAxQTJPMjA2bjA0QkdvdU5OeVRmcC9Gd0VsaFVleTZuWHJJS3c3UVFXZGR4dU4ybGRMNWZMODM5Z1NQRjhhaHUvSnZCTzQ4Q1BTdXFNZjhWcDkvUDUzTDU4K2RMdTkzczduOC90ZnI4LzM5L3Y5L2I1K1RraFBKM1A1Nm1RNDM2L2orL2Z2Ky9pU2diemVyMCtBWngvNSs4OGJ2Nk9NZGE2UzV6NmtkMjFmWUM5ZHh2N2NJSkoyZDlBT1MzMGZQTXp5SGlUTThCNERGNlhVbFlIcDRLUVczVysxdDc3TU5CMXZHSHhXcTdYYTd2Zjc4K3k1L041QStIMWV0Mjl4dVA1ZGJZdHlhUnU0QWtzYlBxNjkzNmZqUnpYUnhCYlByL2IrYjE4K2ZLbGpUSGFCQkJmbjgvbjAvMStIMSsrZkJubjh6bTBzQjhmSDV1NGNyNUd1QmhNVmswRUVuOVJzY3RnVmhNK2l4bEp0TUEyM1I4QjZ5eXNBc3RCT2dGWElLS0NNSWdUb01xTkV1MmZZTUg3enRjNzMyZFFLa0NqMXl0QVp0WTBLeDhwSXI4R0dKK0FUM1YrMkhpcmhsKytmQm1YeTJXejczdytiMTdQOHArZm44L3RVd0dWbGVWa1R5VWI2OERrZmF5V1k0enhOUmloVTRFcExKUFpWcksrdTdKNC9tZ2ZLcWVMVzlYMlJFV2xJdEwxZGl5bmJERGIzK2pYZ1lqUXFuMHJyeFdjK05rSUxQN0Y3eEliTXZ4N3ZWNTN4NDB4bmxiV0pGMTJaU2FnL04wcFc2dCtaem1PTXpIamFqS3dEZm9uZDc4ellUZGZxMTh1cDk3enIycTh2M0lpb0JwclJ0QmwwRVo5b2c1V0JSR09kT0hqSWpYRjdVb3RGYmdPV25YeklKeXpZdmpHNUlZZ3NtTU94SGt6OE9zTVNyVk5XZXE1VDhEYU9jYkV2MU9kNXJiczlhTzdZdk1ldDYzRWtGKytmTUV4cStNUmw0L0w1YkxaTi8rZXorZm5aNkthenVNcVhTUVZPNXNwSlhmbEhBSXplcy94SnNlY2tSSmlETW9nOWQ2VmZScnFYTXI2S3BWVjI3alJ3SmFjR292T0FNMXpNZFFNbndLMUF1Yks2M2tkQ0NodkkxQzdnMHo5bmYvRCtYemUyVmo4SDdHeDRQOWR1UWxzWUNycXlOOFhxRzNIbS8xME9qM2p3L24rY3Jsc3R1TStqUG1teFQyZFR1UHo4M1B6dDJwbjFYc0VIWC9iblBhVnFWbWgweHdPdDBvNlhMTEFIZVBVVTIwM3dIZmNyc3BDd21WM1RyeUI1czBNc2VlZzk3eC9Cd3pDakJsYkIrcFJBUGxhMEJWUXVUNlY2UUhkQmxqM2QwS0cxNDdiK0RxeFFlVXltRE80M1c0ZFFhcitUSWp3bUFkMHo4L2g2NXZmMC95THYzUGI1WExwcnUveWREbzlzN0VUMEkrUGo2ZEtLOVZVRUllS1dRV1BBT3JKOExLZDR2RSt0OTFZM2U3VUZsV2F0ZzJWd0puYitIUG10dm0vc2ZLNTkvT2FXRjN4L2VQMVVQSHZBNUREWURwWVhmYjBkcnYxVjJEa0JreHR3L3RFV1ZWbFhXZEM5cEZZczUvamZoOWRTLzE2dlc3czZsVEcrVGZxc3hTSkh4a1hYcS9YZHIxZXU0THNmRDZQM3ZzVDNONzdEa0wrelBtNWpTZEtMNHpSM0F4UWQ2ckhrTGtZbFNvd3NycTd6bnp1NndTd2RzTUpPWG1BNWZCY2p4dGdNR0JZSGxyNXpva2h0c01DVGdYTFFPVzRYQzZkRXlFTXByTDhtQVF6WFJnZHVpeDJ5WnpvcnhrWXNEbjNoQjFWZU1MR3NYc1Z0Z2wycFc4UzNzdmswdnc3UjRoTmFIdnY0Y0FDbDVIRnp3SUgwS2M2enU0WGpEUFIvanBBVnhXek8xWGsyRERiM3ZUY3hlR1UxaVdaSGttSURXemlXS3ZpckNKNERyYXZzNklKL0dHNmNUcVdkWER5K2ZBclFEVlZrTHFrVmpBb1pJSVRkbW1JcVh3cWE5NU4zK01HWW9aUWRSVk5PNTNZMXhSa2hPMTZ2WTdldTUwN0NhOWxKbmJHcHhPZW1RaFN3L0FRc21tcDV6VTlCaVU4RzZ3dlg3Nk02L1U2UGo0K2RvMEJ6NENwZ2lrblRVZURxd2xLQm1nM3U0T1ZqcloxQStyQWNnYWVqV3E2ZUpDdkNZRkRPTlN3T2dIWDRFUVJ3OGx4YnpET2RFSzZnWjNIazFiKzhnMm8xSkZ0S1h5di9mRWRUWHVXaldYZEFaaUJwNkFEZURyQ0ZpaW03QjZaRm5lZUk3R3ZtL1BNa1VEWDY3Vzd4SThiMEQ3L3Y4ZEE5cWZONW9hQ2Y3NFdaakgwbWYxY21mWTFZMEpVRm1WclRXdTh1emtOY0x0RWo3dTVGWEJUa2ZDNkdPQTVxOFlNeE84S1Z2RjZzQVZHZGNyVWJzS09EY1FLa0xNT01kbWx4dW02NDJZclBtMjZBbGhaVzFZQjFSK3JyR3N3RThUYVlBV2VVTXhkZitXandTdloyRWYzeXRPeWZuNStQcFZQQWFxT240M010TkJxdm1qanhiak00bFpqWlk0Z3FOTUk1a3RhVy9zWUtOd1MrOWxGUXpHaWhtTUNLUGE3K1owVjZFYjBHUm1vYnRwWDhKbGpXdTVGTUxONWphNmhHOWt3UWdacWY1KzFOSDVVeHprRlJlQ2RXaEo4WGRsR1VreE83SFJsWVJtNG1WTzQzVzd0ZXIxMlRQSkV3L3JtRU4zTDVTS0hJV1pnOW16K3BVb0tPWXE1YkpUSmRYMmdtZTFVY3hNWlFGYUVRSWxIY3QzMk0rWTFCekdrR3V6Zml5QU45eit1Z3BsWjFzeW1DckRDWVlrR3hEVHBJOVJ6Qnkwckh5ZURVQzFuV2FlVWFEOW40eGtOeVlNQkRadHpaM0IrK2ZKbFkyMVhGRE9jQVJKbGFiT3lpUzN1Q3BMSTlqclpqQ0RrYVZ2Y0NDandvZ25LU2hXZHpYWldsWk12VlRnRDhMcHFsQ0xycWdiY0IrcVl3cmdLWXBUMGNjQ3FiS3lDVmFsa0VhYm4vRnlub2dDclBLZnFmNTF4SjdzR0IyWlhjWm14b1NPenRqeDMwMERaaTdhMC8yQUlSMFVsQmFnOVN1RHc2S2NBemxhQjd2SFp2V3BqSzkwZHlycTZiS3lEVVpRYlIwQjA1YmlMUWtISWNTVW1nSUsrU3d1cWdIQ25vaW8yUlFVMXlqK0JuQnk5cHBoVktMR3lDN1p6RksxcHhXSytFOEloVkNXTE4vdUx0blVVNGF5b1lMb2FBTno4RmR0YVN2WTRwVjBCRVcybHM2MWN6cWxsQktwVHlLZ01BaHJaMWNkYzFSUk90UG12V05rZGNLWjdaS3hhV2ppUExKTXBwN09aS3hBK3JxRy9vSkxqeGYwcG5KbHFMb0RabzNneVUwbUtHeXMydGFLZWNqL2QxQytySlNwbEJxbFR5QXFnUitEOEtqS2xtUkwyZ3RVY0FkQ3RzTCtpakNOVDFvcXFxa0gyT0hFYkc1c0RGblVnNUFhK3lMb3UyVlUxcHRqMVMyWlFxdjFPUlpOOUlXelJmZ2FSQnhLb0JFOFVXeXFsSkZ0ckljMEF4TmpTamVkOTlDVFkvWERmU3pDejVNMElab1ZFc1duUEZOVHNsOG9vVkMxVHpiR2dxRlpORFNnVndLSysxc0dETUtxeFpDV0dWTUR5c2lFcjFqVlNRSlVZd2o1aUhPbFRoZEh0NDRTUWc5Q04rbmw4RDkwTk1JZ0FkZ3I0NkpxUmlSOUk4dlJkRnZicjE3bS95eFVNS2pOTE1pVlVBRHd1MkNXR2hoaStGNTVUV005TTljb2d6bXMxZG5NNHVPRi9MQUVZV2RjcW5NN3lGbXlxM0lmd21PUk9kN1kxaUZXdE9qb1k4VG80MW1UVjVJeXNnRkZ1UnpzYldGR2JOSUlKQ0R2MWRPbzRsWkc3aldCd1JGdFZUS3VXeWVDQnlKS09hbjhvWjNlcDlYZGRObDB0RHVheXdMejljWFBZZURBQTBTcGtCTzlzYlZjVE9WV2xkUHY0dXl6RWt6eEh0anZvbkhvU2tGRVdOb28xZDhEaGNRcHV0ZDJwcE5vbjRCem9BaUoxaEJGUWcwZFZ0ZGJHSEhEUVd1c2htTkVRdWtMTTJRTzFHMlk4YmdUWHFGaGNCSmo3RWpQZ2NQdHM4VVM4cVBwUEIvZFh6bk9oNVo0Mzh0ekg1ZWM2UWdyT0tyUlJmS215c0JtVURCK1BoWWFiTWxWUEVSK0dDU0lUVHpyN2FtMnRBckgzYmdjRXpQSm0rY3I1ako0Tm5ITkZEVnJGWGNJNUxlOWs1Sm53K2JlZGJWK0ZmUnpaSUhhT09hT3NMWTAvN1VHczU4RGpyR3dLTUlNRklHek9FVzEvakdzZEF0Q042aEVBSTRoQmU5WVhlUlJPQlNWUEFWUEFxdklNNWJ4NWhWS1dBTVA2ekJSeTNpZXNjcmlkVmRGQmluQnhYRG5HMkdSWTJYYkN2cDFsaHZHdE85Qnh1NWg5MDhYUXU0MmxuU0FyTUZkaXpNaW04dXdSQ3hQR25uT1M4bHdwbmJPaURxVEFqc3JSTi9QY29BU2NDYmFBQ3FWTTQweWxuampUQnMrYndXbEFHMjMvVUtiZGtpd0tXSVFQR3pXYWN6cG9TbHhQRWo4MjJjTldrcFM3Rnl6c0RycXBmZ3BHM2phaHcydmdiYVNRQXh1TFdaWXQ3Snp5TmU4Sm9acE5BY3ZERk9kdzB3cVlUOUFLMXJaei9EZGJTbExQcDByeUl4Z1FKbEs5QVpsRXE3SU9YcG9oZzlQSWhyQ25nODhKc094aVY0WldBWWZnNHNpa3gvOGt5Mlo5bDg2MnVxd3Jmc2NJSDgrdWdUbVZHeWlkZGVWWVVnRU1uNEdaemcxNEV3SXNoOXN4MmNLS2lXWFJldU9FNWd6R09RZ2RsUktWVmRsZXZxYjI3OVhxMFFuc3RzMlZEYUJPMGNvZXpzcnVXdEhBcHU2c0tHNElCaE4wYUdVMmtMck1LR1JUTjNIbWJDRHdLVjE0enZrTUVERzRRZlpWc3BWbGFOVTJtaGM1VEVaM04xaC96cVRoZXVMcFcwNVpXVEdWamIzZGJuTm14S1pCbk44SnFpZGFWTEtBT3lBUk5MUytNQjU0WjIrVmFxb01MS3JvVkJsbmdlZm5UUEFjb0hOV0NTdmxmQThDSTBIRW1CTkJuQmxYeU1yelU3QTdXVm05NFBQcVEyZ21xS3grV0RHc252aWxtY1NPQkpxT0sxbll5QUl6dUF5ZXNxM1VkU0szS2ZXY1lLRDk1SG1mWU9VM3FzZXIyQ3RZRVVBK0ZwZnFkTnZnUEJaVUJoRHJHT05SVmxRc2g4ckxjYVVDeWtIRzBPT1V3VGxMQnJzaDVzb0VNR2V6aTFFNEhSVnQxaWNwNXdaRUZYZGliQ2tHOFk4dlg3NXNiTzRFMGlvbTl6K2hqU2lPZnkzRGhwWEl0cFZoRStVR1Fkdm9XanRDaG1yR0hmNFlBektnQk5uR3R1SnhGQ2VHZGhVQWZRTExLOGtCWUFQNmd2RkpaYWpNRzNYa3ljeThLdUMwcTRFeXltd3R3ZHhkdjJNMG1JQnRLMExLbmY2NDBqMDBBdXE0Z1VrZFdHbGhzMjJxSmM2ZFpDc0wxOW94bmxUSkc0U1lWUklHcEQ4VFBGQnVNNk9FbGJTMXBsZGlkNG1HQXlONlpJdXBiQzViWEpOOWZkcGJUaFN4TFVhSThJRzFYSVlCeFczVGpzNktRb3NLY3hmeGNRbWRud1JHTTEwR25GY0N5MlhZdW5MTXlBa2RnazRtZVBpY3pzTHlndGhjQnV0NmdvT3FTN1lWRlhBRExqYW9zQjZzNm9mY1pXQVpTSVJZcVNVa2l6WXd0dFlhYjN2VU9ROXcySFJ4SUlnOFd3UlZlRTY4eGk0VXRMM3pScGh4cGx6d3VacmNxWUNxMUkzalBJNWRuSkl5Z0VvaE1iUHFWSlN6cnd6eEJKVHM1ek4rUmVVU2d4aWtQUVZGM0pWQmVOUXhiSEVOckVNTnZFZEZaVlY5bEg5K09SR0VzTlpRcHlUTmM0QzNBRzdYRjRuZ3pxK0RyTzJ6YnVhYU9YZ2RhRmNka0VvdG9TRkJWWDJxSjBDOE9XWmVHNEtHbHBnaEEwWGZUT1BDcVYycXF3UTI2UVdmRjJQTUxoSTJ3MWxWQWEyYVBzWWQwemEyNU1RUndnY1pONnVRRENpK1p4aUQ0WEVNMmtaeE9UNDFGblpuYVJsY3Bab3V6bFJxcWRiUVZXb3BRb1NCNThSVjUwbEJOckhpL0F3WFM1THJ3RFZscFkzRmMzQnlpWUdjNTJUcmlzdDZrT1hkd0luQVF0SnBwNVFjaHlhcXVZT1Y3U3UrZnhWTWFWM2RjMFJFMlM2bVVZMGdMdDJwTWNZcXJLSVE5dzJsMWdwUVVNdFFZY21tYnQ1RFROeGRoblVDalFxdGJLOVNVU3p2ckMwbW1oaEUxZTJGUzIrb3h5cHkvWkFTdXRrbXRqeDN2Y0JDMjRQWDY1bmJxa0JDUmhmalM5a0lZUG5lZThjTWFnVk9oSS8zVDFmQW1kdEFXWnNDc3dUSkNrUVZOYTBxV0tTS1BPcEhBVWhEOURyYlZjeW9Za3dxaHZoMTd2WUFheVhMUXlLR1lkeGxVREZwNDk0ckJYUmpZZ08xN0REWWV0TklVai9lenA2UzBsbmxwRXdzV21KTWtPd3NLWGVaS0VBaklIbjBFUUpJU2FSQmNPNlVNSU56N3AvYkVqam53NGZ0K3htRHZrc3hYNEcycklyaXM3cWFlS3dBRk1QMk9pN240Y3JpdVp3dHBTVXdwZkx4U25PUlNySXF1c2M1WkZhWHlzcVJXamlaMkR5QVdFSUwzNXRWU29RRWxGQUNqT2VHR1NFN0FIRVFnZG8vTFN2Q09nR0J2a3hzbURidmxTM0ZwNXZoYUIyVEFHcVJLcktLTXJoTFZwYUd6RVZqWjBPUXhEaGFDVEErUXlSUjFkMTVhUXpySm50TDNSaWJzaXBqRzZqbGdMNHlxYlMwc05ZZzFlODR2aGJCVnJFbEs2NENVY1dZWERmS3hocEl1eGlWSlpVeHNiTXkvdVJCS1ROUlE0a1EzTGRSWUxTMHJKalJQbFRQcVk2Z2RKc0VEYythUVhBbitIZ3NOVUNiUnVGME9qMHp3bkE3YldEa2JoTzVFbnMwMHFlUWhTMWxhQk1sNU0vY0FheHNMRjhyS3lxbCtUZjdFTExFR3UvaXhpaW1kQ3ZvMFRqZnBqS3dhZ2dlbjRlaDV2N0xva0xLYkx1eXZIaGNaRzhkaEdyRUR4N0hnOTNacHBKRjdxQnFPM2lWdmVYRURRTkluemVvZThZcTZlUGFaQloySnZpTTNXMlVBR290ZWtSQ0FHcTRFa0YxWDNET25SMTF5UnNCTDF0UmEwUFZjWmlORlhaMmMzNEZza3ZvbUluUVE2bHpwSm9aYkp4azQzTndLSkZCcXVKU3NyQnlIeWR4S09uVHhRQVNCbVMzaitKTW5zSFNsYTNFYzZLOVZXb0pWbjl6Zmp3T003aHFZQUFxSlF3RTJhM25BNDhKMlFHZWdSa3BaTml2U1kreXMzRWtLZDRvSkl3c3ZJSGwzY1dnTHQ1azROSDZPbXRMV2RwdXJPa3dFTXVwWWM3ZU10RFJoT2NJMnVpNUpoVkl6WHpMeXRvL0dBUHVab3lvOHdrb2R1VmdKZ2xDdDdPaEdiZ0lENE1xNHNpKzYzelVTMUZ1RkZYRmxxeWFqMmVtSGxMTWNCcVl1MEZNdVIyOEJiQjdsT3hSTVNpQ1FYRmhDS3V3a2haK3BZRGlHU2dic0tLVjhNaVNSc3VIU0lXTTlya2xSaUlsWlp1cVhqc1FLOG9vWUpNZ3EzSktXVmtoSGJoc1Z4RlV6dGhPV1BrWWlqY2J4NTRJS3NTZFQrdUxyM2NyR0t5b1lnRmlHUjlpQms0a2Zsb1VYK0pJbFFSUXFhYm1wZ25ocXRwUXBiNlJWUTFXSDVEbnJTNGhFb0dacWFlclEyZGhGYno4WGVQeFNobURibzcwZUlTam9vck8ydks4U0pYSTRTVW1FVTR6V0tEelVEdFdUWXc3eFhsYlNURWo0RlJnN3pLbktvR1JBTHYwR3M5VGdjMUJwQ3l3R1pSUUF0cVZ6MnhyQmNBTXpFcGZad0ZTYTJHNVcwUUJGalNNYXBXQUVGYTNIY0dON0N4RHpFQ3lJa0o5N3F3cnFXTlRXVm84NzZQUHNqUGtqMnd2Z3JvTTVsTFpLTUVUS1ZxbC9Ddm5XVkZpRmEvU3pKVVF3a29ac3I2N1k2dmxTUlYzLzJ0bU5UT1kzdm5heFl3TXVvUEtxZHpSMXc3SXFIeW1sUHhhQVRoZlU3S28yWlhZajRBWUpITCtrTmRLd1JRWUVTVFJhNWZzVVovclZDMVRNVHlXVnlZb3FOdHV6YUhzTXl2MnR2b2FyeGRmcXdZZ1UxYXhGby9jbnFsMUZHc3FLK3VBUk9WOEJYNEdVOFdjWlRBVGkycTdRY3lpME8wVitHaFdCTU5SVWtuOEgxU3NXVkU1QnkzR2kwRUNxVWVKb0JmQXREYTRhbWtkWEczN0FHUDVHZ2ViODRwN1VhenBvS1J6ZEZ6ZVE4SGtvSEd4cHJLeS9IcG01dDEycDQ3SjZ4VFlERXo3dUlORVhTdXhZWHZGc2tZQWMreVN4SDlzZjVmdEt6VTZJYndWQmNVR2c1ZTVGTUNFWFNFclpSMHdHYXlWMTl3b005Z3VQalRxSmRWVHFSNHVFNG5KbkxsZFdWa0VDQ1pMZDJWTEYreHRhbWV4N0lwaXJpU0RVcHZycG45bHJ3R01DSHlwcE1IK3BzNkxJTHN1RkdVajFYRU9YaXFicVNIUFVLbkNscFdWNjhrcXRVUlZORFk0VE5hb2N5a29ZZVRVNW5nR0VRYS9TMURubkU0QWVYTWNLakhQQW1GVmpDQkVOYWV5TFZOSGZyM3B4OHhVc3RKOTRoSXBmSDRIS0UvZURhQXJLNmxTeVZWRmJkdDFneFRJVmszcHBwVmxGWGk0cEVoVkJUT2JxdW9oVTg1TUxYbjFpYWh2VWtISmpTQ01jMDF0TEZ2ZVZWQngwRG9kTTZqZnRDdTdET3RJell4cmMwcXAxSkdQMmF5WUZ6MkdiNkh2TXJPOGNuR3RWNkdqbTN1SW1TZkQyR3BXSzZ1b3diWkdNeEZLUUNvMXBPTXRjTVhGcFJzdCtoWEdvQW9tRjNzU1RCR2dUZ2xiQktXd3NRM3RacWFZU3AwWjFDaW1SRFdGY0NKVVBZSjAwQkk1RmtLWU5vaWZ1UXhtTjg4U1dWWFdMTWFVcXFxZ0MwQm1RSlI2c2szdTlOQ2Y2allMWHhBZnFzWUVnVkxBaFJZMkF0Z3RmbFpORm1GeWh4ZHJMa0FkV2xrNEQ4OE0yaXhIeWVwSWRoTUhyRy9pUjFaR3RxME1HcGJEYlJQWU9YZVNZMU02Tnk0WnN0dkdTa3RLK1hiRlBBVGoyRDM3MXNhUEVzQU1YaFhyc1owa20vWFN0a2hoTXlCZnNhNnVYRlplMlZDZStZTXIxK0dLZ3dyUXlOWXExVlJyQitFaXpBb3c2TnNkTktjeVZFa1llTTczeXM2cTRrQUhwNkJpRmtsVGtJclZDNW9ZVjd1endPR0N6NFVKMFN0cTJsV01KeTR3dGIrUmV0TDZ0WkZpY25KbUJ3NVVqQ3ZYWE1aVkpYMk1Ra2JmK1hONUVXZDc4Vno4L0pFc01aVEJpS056c20xaW5MUlVRNzRINE5pZGFxSTY4ajVzQUZneGNSdmVDN2llTEpYZlFZeGpaWjJDc2lXRmV3WlhKbUJJbFoxdGR0clg0aFN1YXRlS3NvL1JaT3RPS1cybm1xMW9UemVLNmRSV0FXdTJOUlZiNGhxMFNYbTFHdnR1Z0hyYnI1SVhxbVNrdGc1Q3VERTJNU2xQd3NZNWtORTJXcDNBcWlaYldWTEF4aUJGKzJpQlpidU5qNk1CNnJzTUxDN0Z5YXNhWUR5bzdLa29QeUV0dzNwRU1YZlB2eEFKaTJqQVFRZ2pyejByTElaU1dabElvTmh3ZDV4SzRBUjltWU5qV0FhTHJudUltSmVCVk45ekJPUk9iVnZicittVFRmRlNFSkxTUm5IbzdoRUpvSWk4TUZxanhtdmdtRjVVUlp6NHpMRmdaWjhDdHUyWDdnZ1ZjY0ttOWdWeElzT0hxeFhnTk1LbkZXWlluZjFkQm5PaGF5WHExN1F3RmxXVzA5ZU5LeVZKRm1YcWFPTkdBNWFDZWdNYkozVVVrR1kxaWMzbktXZ2pxOHFmVllHUUcxZ1J0NnJzNjJhNkhpcXFVT3FkZXNLNU5tWDRuR29mSm9pRTFkMGRGOWxWVmt2VDEva0VFYWFDb1lPd0ZwY1Zjb0xNKzc2NjlQeEM5cldxa3RIMHNXVVlsZDBWQ3B1Qlovc3RWUmNHZ3k5V1gyK1UxUXRoaTlTekFxU3h6WnN5K09pRnpCWW55U0dWNkdrdTQ0ckQ4QkNPWkJWM0J2RDUrQUtSSE53TUVzQjZFekhuSnBrVEFlaVVsRUdrY0VDZUI2R0RaVHA1WUVKVGx2ZHJrbnhZalRsbE1rZk50WHdEak03dVZqSzVKWFVVbjQzcnJxcEsyanl0YXhIVzBNNUc4REM4cnRITVlzN0tTZ2R1VlFNR1RZRnFGdlZTNnJrRDNzREo0NmFmZFlGd29xMTFBT0tDQkxodndvVWdjOElHQU55Y1I2a25acmRKUGRzdXhueWpmZDNGb3ZUbFJNZEVkdE9sNUNNVjVFSHNYUUJpczdUT3d2SURaYUdqMlZucGJoN2NwSzYzVndZRU1Md3Fianp5bDY5OXNhd0ZGa0YxeXFqVVUzMUhmQzZzVzFaRlZGdVhWWFZnejlrZUVhdzB5czFsV2ZtK2F6UUFRU1dBK2hLWVZmc1pqUG5jQWNVQjlvSWF5eS9VWlhSTmNrREdqaTc3R3NXYnZCbzZ0UHJXUHFPeVZrQlVxK0lOZXFwek5kWXMvdTBpZmg1cW1wcUlXKzMzSlZTVWN3WTcwS0w0VTlsWWRVNmxqdFNsczdsbWZpOWczWXplUWZWa2FHRmFWM09EQ25hRDJOOHdzRURGa2xFM1J6TTNaZ2hkWWtXSHNzenE3MEZJZWNuS2tWa3Q4ZXpNelJxOWJrR3VLb2pSTEJWU29kM1kxeVBxS2dZVzdKUlFUUFZ5eTV4SVlMak9neGdUNTJSS0pVWTFkT3JJaVJkNGZ1dFF4L0E1QWNTbUVqejB2Rldya0x6dmJXQXU5SE9XYkdneEZrMVZOVHBuQktrNlRnd2lzSS9IY3hZWFAxdUFXTzcyVUxGbEJUcSthU3UyVlRVczZocnhNMkNGK2hFb3IxVklBOVptRlVhYWIxbFNTZ1pzVnM0c3h6SGxWTG9KSHI5SDREaE9OVGtJMVhDMC93aVkyTm9XQUc1UmxuSEZucTZvTGNjcFFkZE11Si9PMTdKVkE1T0hMaTBCcUN6dHE3WTErK3VjQ2Q5OHFMSThNSUhCVi9jS2p4UVRtZTNoRkJTM015Q3FuRHN1eW0ybzgwSGp2RkZUdHJVUm1OYUdKc21WYWhJbWpUc1VYS3RRWlRBVnM3TXZ2OC8rZnpVclpBWGNMSjZNNGtvZTZYUDBiNlNtV1dORHp5VXBROGJsK0x0V3g0dHVxWjM2Y1JZVjN5dVZ4UE53dklpcWlRQ1NtdTdzcmdUelI2bmt5aHBDYXJYd0Z5MXZHZDVpUDJjWTA2bEZyNU5qaGhnMVk2K05CMjhmdGJLODNzOHJmN2tMSmJLd0RGUGJMZzI1YTBBZFpKRWlxcjVwaGl4S01EbFJVdGNzc3ExaHJpTHFHb0gremVOZ1ZtOU9lbWpzRVRWOEpkRjBOSG5rSUZ4V1kxT0I0WXJwN3J0V0o3TmdBQUFQWGtsRVFWUTNvTnM1bnBseVZmOHUyRm9MdTFKckh2ZWFaV1FqcUFrc2h0RmEyZ3pzU0czWnBrYnZnM0hhZkY5c2xQUGxsZGpGbEs4MEd5c204TXI0TVBobmVOV0VOUEdqQUlwbWlsVFBBVGRUUlRYbENCWUhZQVF1UHdBMzZ4SXBXdEdONHEzWTJNaGlHc1VwdVNTbmxFSlJEOFBvckM3Q0ZZVncrRjUxcVRoZ2FieHNUeFd6Q0dZMFpTc2IzbGZxQXkwT1BOak55OHhpUVFLc0hZRlEySEJaVnZWYkJ1cTNtMW9XS2FqcWFvbnNNNnVaVXI2Q2pYV05aMGw1RTNoM2pVUm1hNmtQM01KSWl5MUxtK2thaFFxNDFOMmlaamE1c2p0bExZTlpIWnJINnFVR200dk1iRHA2UncyQ0ZtdnV5RmtyQmNDeU10RnFCYUVDbXNIb0s5QloyTEEvbEpjUnFTYURxbmFXYnJaZEdhejNETGdJdkJsbjR3b0d6dGJ5Skdxc2x3eGtoaEhyVGpUWUZYQ3RPb0tTOHVMZG9mVmRBYk95bEdVNm5sWXBYV1p0czRuWEJxNld4Sml0TU5va0hVSm5ibkpwbFFtK2FHcFkyYTVHTVYyUUQxaFJ1YkJQRktkdW1mNU9Ia0xIejBGOWx1RTVrakJqUmEwbkZFNUNVR3FIdzMyTW1qWjZ4a2dJTlZuU25aMVZaU3RLMnFLbFJhTGxRZ0s3dVRxN0pGWEp3TSszU09FS3loWk5JK3RKMEk1cU1ZeTlrMnFKRDdkVldkcUtYYTBDS05SMENjamcrQjJJWXUyZmNCWkpaa01GZ00xMXIwWDkyd2lsZ2hGR2d6Vm5leGxxQjd4TDltUzI5U2lZVVZZMm5YT1pqTkJSc3lEc1FQUldXNWhyWjRYY2RDNEhWV1JiamdKcjRzRm9mSzVTempRN3JoSTFVZWJkUGRFYmo2c3FJdlRaUVo1dmEwOHJBQnNBVzBVeGVXeXRBazdBMktKOVpweHpDaW9CMjRYRnRZQWVYWXhyNmFuU3FoTGdwcEVxV2JHd0x1blRnclYrSWpXbEwyOWxqYUFsNEVRTUdzRXJwNGFwZVppcXV3UlhMWEFxT0NlcnUzMm1teWRjNm9XVFNXcEZBR2R6ZVRCOFJUSFZNRXRsTTkwQ2JiUUNZaFBqcTNlZ1lyMUZHZFlJUWppdURHWjV6Wi9Bem9iS0dPeUx4dGk2YzRSd3R2MmFueVdsTElDbmxMaHhKUlh0NkE1ZWJEQldGTk9OYnhXWjJkMDJtbnU0UzlZRUNwZXBwVjF6U1dSQld4SFl6Vkl2MUNYU291d3FxWDNqQkJCRFpkWVFicFRRVzRaUWxTOHI1a0g0c3VTUm1nMisrM0pOMTB4MVBhQW1Fa210WWxFZGVHcEpFTTZrT3VDcUNSMjJvU3VqajVJVjJIZFQwemo1cHJMS1RqWEZBUGpkUWx5cTd4SUJ4QVFQNXlNY3pHNFZ4QUt3MG42aWxaMlFCY2UycEx1bGt1eHhxbm9JekZmZ3F5cWppbDlTMVZOd0JyRm1leWVvcHM4eU9qWlV5YlpkZlM4Q3VhVElKdW16czV0T0RhTnRMcEZEUS9QY0pHd2VMaG1lTDFuQjBLcWlVRFNjc2lVVkQ4OURpM0h0ckt0U1VMdzNSTGl5Z1pEKzdzRjhKVE9iZ1lzckd2RE5VRlJHbDFpeTBMbDFZa1VjMmFKWU1vZzkyMEk4cVc2WURDZzFNcWswSkhKRktYa2JnYlJyZUkrcXBZTk9aSHJWY0RVYmE3cGpzcGhTSk50SzZ1cGdSTkFWb09TMG11Z0JlTjRiSVpnSGh1UFovczFFTmFYNktzVnIrWU5yaDFOYjdpcFIwUEU1emJOUmVnQ2JySFJVdzZZZjA3ZExCSmwxZjhLQjlhczJWMW5OcUFzbDYyTEJCaGVod2FsZXJrSG1CMUpGSUVaS1NFdXNkbDVKUWoxbkpsSFhTQ0YzNDJnSjlDWUdyWGVsa25KSVhxVlA4c0QrcXRwbENSM1hIMnFmS3EweWdNcCtLblZrS3hObFo4bTJZa0lsVk1pQ25YVXdsN3F6bkJLU3ZRejNtM1B0Nm9RYlhPNWI1Rml4Q2gvZkh4VVFXL0FFY0s2ekNOcUtRbkw5c3l3cW1LdXd2cVNZelQvYVBWTk5wVnlodlJXMjFhcWNpQ3NqZFd2QndJTFV2aDVWeUN6YldvQzFwSmpKNjgwQ1dzbCt1ZEtCNlQ1UndHMW1sb2hubHBiZzQ3aXo1VTloYTBGR3RtUkxGWUJ0Tzk5eTk3QXAweitaRFRBb2c2a1NMWnNNSGcvSUZra2dwNkNwdlUyVTBjWVZTZG5ta2p3QmRPbVhieFRXTld6dUliaXBNaW9WeEVja1pFb2FoU09peTJNM0swamNDMUxoVkR3YXFHMFp2a2NXcUNuckc0R0l4eWtycWxiV2R3NkxReUJhWlI4SG1MUkloUVdzSHN3RDQyWlhWTE5rZjlsK0ZsVzBIVlEybHdGc0MvWjFGZHpsUVIwS2FQZm8rRmRmdSsvZHdWUklDdTFDR1I3QUVJaUFoYytBWlVGMGtPQmFQeG1VcWc0aTY0dlFuVTRuRkRZSjlOeisxZlZYdmVIOXFtcitrUElMeDhvS2NSVi9CRmJ4YkUwSk1UMGtTRDR3NkwvbE5ZOG9jc3FhZ1ZkVTNBM01qeGh4Y0d1cXpzUEg0aXJwYW93MXE2T3lyVmp2cDlOcGM1OUU5MUxsZGJvWVZ6SldkaW1XZkFXMlNORUtjRGFYMkZtQkxMQS91S3hsbWhoNjEzSXMxVVJRQXBiS2Z0dHd4TDAycTZPbng1cFF4U2JQb2pBZyt2NWhBbk42TEhWUkRYSXN2S3RSamlTMHFKVXlaVEFYVmJBSzgyRWxGSldhUWRWb3FVQzFVbnQ3QlZhVFF1ZE02U3VxZXhqUUpONCswaWNheHYvdXRiS3Y4M0VUYlQ4SDhnamNPS3hPSm1iVWE2T09WWGh0M2RGWTZySHY5WG9OekZMY2VFQTFvOCtwS20wTEFIUEhaMnJZS2pGcTBoZlpGaXhzcUhKZ0QzZUQ1bitVMGtiMW1GalhrbjJsdk1TU09zTkUvQ2RJQUtGMFN5dHE2dXJPSFVONWd3ZzRHWm9zZ2JtZ2dNNXVjcmEycXJTMklnMWNiaUJCY3hZemd6VUROTEN2TDhHYlpYTnA2T1J5M0xtUytLazgzelJJQUs2QTFpb0thMkk5TmFwSXVpVUZkZkM5NzY2UEZaVXRxVXI2S2JXayt6WlUxYS9acklYRXp0cmpUT2Z6N2h3S3ppQ2VYSWFyYUh0YlpJTXorMnBHZ2F6Q213NHFXQUZ2RWRob2RZcDBYcTBwVjdHMVlXWVdiTzRxaEdxNDIrWjhCWXRyTFd2bHVOUHBaQWVhRkZTMXZ1YlBnYmd4c3FjcG5BYXN6Qm92S2FGb0RROEJHdGpmVU9sNE5BRzJubVFWMDRmZUpndW12WDJmc3JRRVdaZ2hMMEpuVmRZa24zRE9aSWVSTjg2UnFQV0Ntc3ZHVnFFTVJud3hRQXh3UzhFTVlvM0l6bVkyK0JDY0xwNE1LaXV5dWhJbWFtbGJaRmNOb05sN3RwK1JIZDE4WmpRSVJLeVhkRlJoTjk4L2h5S3F3WFdObzdPMXdpYVhvSE4xMDhSRVpaV0VxNmdybklmanplZzhqZFJmMVhFTDRra1hhNWJCakt4b0thbGpCamVIbFZ4UTRHYXljcFc0bERPQUt0blR4SEF0T2Z6T3Rad0hBTTdzcVZYa1Y2eXU2a2FwMW5Ia1hLcVdGLzRYSHFqZW5OS3FCanBSM2wxY2gzRWpnMStFc2dkUWhzZEcwQjRGTTlzV0FWV3B1QXlpd1RQbGVaeHQ5VnlaVlMycVhmUmVXcVRBaWxwcjlBcG9XVGp4eW1pdDdOd1Y0SlRyaVp5T0E5QjBrN0hGZlVMb3VybUtZSFZuUlF2cUdMNUhNSGRxRmNSMnFXcG1jSzZlVHd4MmRpcFdydmlEaWxyK2ZLV3EzT1dSV2RIS3dBNGV1OHdqY2hiZVJ6RmlscWpqWk4zdWZDcGZrSjAvc2NWcG5ZazZMMFBJNzdseGRXQ1o4N1dpV203Qi9BR3F1UVNudWpHS3NCOENKbWlKcThxMXBLSVZXeXFPaVRLNjZyMThCTjhyNzQvQUU3MWZkQzN5UFMyTXhkT3BuRTF0bFZ4RDlKbVZPb2dnTityNFBqQVhWRlBhM0VnNWpWSkdGVlVHTm9sSDIwR1ZyVUI3Qk95U1dxNldxWVFkV1I5MnBjRk1ZTXdja2JTZ0NLQ3FENjdEaWlXdTFnOE1RQzlCeWZjRnFXMUwrakw3MTRxTkN1em5vU3h0MGRhMmd0V04xRzhGMEJLME5OMG51aW1lbFVGOWRJZEFmak80NFVUM0NqUUxvVWVMSEpGVE8zZ21wUnVJSU92d0JRQ2JxTmVvM3F0WjlpRjZ4VksxM0dSbG80enFpbXErQ0dkVGlSMXVSWThvcWdFMDJoWkJhNzlrWlhQTXF1eFJIS2xhMnNhWldONG1ScVpVajB2TENLaGtqS25xT1FITnVTWlZKb0t2QXFTMXdwRXF1dldEQzFCMnlwd3JDUHNSTUVQVlRPRE1MSk1EdjZxZUtYd2kySllWNVNxNHFLeXZnR3NIQ0xpdWoyalI1OVY4Z01xU0oyRkpaUlhFSFZSSGozc0ZQcmN0Nk9wcWxXMUdwYXRRZHQwR3Z3Zk02bjYzSW5zR1ZGaEpHYUJxZ3FxSVY2SXNYbGxaZ3lTUHE0UjNibnQzd2k1Y3YrY04yeXFRTFcxVDk1S1lWc1dXdEtrNGNCOVc1M1dRUWZsUVlSNldsNEhhSlpqdlZFMEQ1eXZxK1JLZ1pDczVxZEJFUDVzRDk0Y0F2UUxsU2dOYVNNQXRIeDg4QnVOUTQxemRGc1gzMHpLYmNzME1MRC9paGtwUXpsMHdpVHFLTFRmYkttQ215WUlDbkswSWJhaWVDNENHOWlTeUxRN2NJTUdRd2F1NlRLb3E2MEFwbDNXTjQwTFpwY2ExQ0tLSzlWUXl5SUVuOHcwRjhGNkNMMmg4bzNpeEd3QzdzN0VXekNPcW1jQXBZeFlENGpzQXpWUzBzbDJ0OThwQTd2cktvcGhDVlNvbmJZcGdINm12U24yNHBUQlY0c2R0VjNCdE1xNWs4MnkrSUFEdlVKMHVBbGtDVlR4SWFQbStVTnUvcWtWNEYxVHpIWENHclhJQXFJdEJLeXBxSzk5VnRBT1ZzNjRPNE9iWDdwSExWQ3BZSGNSbXd2TFI3VHZZQUtCQk41OExHVnpEdUZ6K2hRYldnbmNReUNaQWsrVmJzUFNvdWY5MzI2MWlaZ21mQ3B3UmJBdnFtU3FyaVUyUHdoamFvT3lZcXRJZWdWWFZpVHNteXRhNmJHeVNwWTNneVJycEl5QWVhV0REeHRwc1h3S3lhbE1ES05QN1lCWE1xRXNrVXNpMnVDOEZOQVB4QUtUVmZUMW82VnpNMEUwakYrMXJXY1V1SHZkeWc3dmdvRnBsWDhIcHZIcE1DT01SVVBIelprSW5zcWxGS05YL0VJTzUyRTBTeFN6T3dvYjJWbVJMVzVEMVhJVTByYmdNMUF6V2d5QzdmZThHN3hVQUsvdGFFQmF0N2x1cXR5UDdFbXNhSlFPajVGK21yblpmQ3VZQ2ZCVUFXd1NoeWQ2cE1ZL3ZBSEcxVXFPWXBiSS9neTVUMENNS20rVU8zZ0Z1Qzg1ZGdmRFZlZ3VQRGZJVHJJQkxzTHJjZ2RoM0NGZ0ZaamFLSjRJdjNGOEFORXF2dXhSMXRWS09nTG9DYTFqeGJvQkFrajZ2N2ovaWNGYkE3ZjRyZlJuUURMUlZpRzEzaTB2cUJRcllWcUJiQURaVDBacGlIb1N6dlFwb3BLSUZTM3NFMUhmQldsSFhkMEg3TG5BcnF2b3VnTXRsakhCZ1puaDNFb3ovQktqTE1MNFoyQXEwK2hFSnI5amFWVUJidk56Q0lVaXJvQzdBV21tRnc0bzVBSzNNdEI1VnlwWk1TRmdzMDVKeUdWd2x3QnFzRUdBQWEyWlUxQ2pVZXhYR3NFNHJLcmlpbEJ2RnpPS0tvM0F1QXJvRTZRRlFVM3U4WXBOWHdTNWsrMVRadDVVcndvdU40S2lVRXcrazNaV0RwMVJYSE5ScVhiMjFUczM5OTQ1eVpTZzNWblpGTlE5Q0YzWGVaeXI1RGdCWEtpd0NNYTJNeGVURFlYZ1AxRnNmOVFOS1pjMGs4MVJKazNyNkVRM3JDbUJWeUxMNzVFaloxcElWREhvRnRpT0FIb0IwQmRUVnlscUJzS0tLUytBZUJYSlZMWStDWEFTdUd2Ty9BdXE3R3VFakRmR0tnMW9LYTF6L2RtbWk5STlTVUdOaGwwQXRmdWxIQWF3b1lyblNrbU5YQVZ1R0VockVWWHZVRitBNUN0MlBxTk9qRGV0eW5hNENtZVVvbG1lWExONEFxN0M1U2oxMFE3eWpnbCt0NkNOeFNSSG1JNVgrQ3B3cmVZQjNRZmRxbmE0cTIxS2RCdWM0R29ac240OVpPT2lWaW53SHFLOVd6anZnZXdlRWgyQVU1K3Z0eFo5Q2Q5V3FraDQ5VjE4RTVvajZ2VnluMFJTdEF5R0lPNWVkWFJLZDVCMFZHVlhxMnlyM3hZcCs1VXQrQzRRSjRQMU4zMzlwUU1qUmVqajR2Yi9EY3I2clFjM08vMHJqbXRacGVZQ0JpQ0hmQ2VtUmJOaGJLL3BOVVBjM3dmS3k1ZjJEN09sTDMvdVBodmUvb1U0VDBGOGYrVk5NMnZ5b2l2MGpLK0tIUWZkSHErMGJuY3o0b3o3My8rWTZMYkt3MW8vNUI3ZU9mMVJsLzBkdTlCOXRuLzlidnJmL2ordjBoNnR0bjJ0cC9yLzQ4MTl5NC96djUzOTF1dnp6ZndEaWZ6NnBoVDFNUGdBQUFBQkpSVTVFcmtKZ2dnPT0pfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3N7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTppbmxpbmU7cGFkZGluZzowO21hcmdpbjozcHggLTNweDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojOTk5fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzc3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTVweDtyaWdodDotNXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzoxcHggMXB4IDVweCAjMzMzfS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3M6YmVmb3Jle2NvbnRlbnQ6IngiO3Bvc2l0aW9uOnJlbGF0aXZlO2JvdHRvbTozLjVweDtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTBweH0uY29sb3ItcGlja2VyIC5leWVkcm9wcGVyLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7ZmlsbDojZmZmO21peC1ibGVuZC1tb2RlOmV4Y2x1c2lvbn1cbiddLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGJBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMpe3RoaXMuaW5qZWN0b3I9ZSx0aGlzLmNmcj1pLHRoaXMuYXBwUmVmPXIsdGhpcy52Y1JlZj1vLHRoaXMuZWxSZWY9YSx0aGlzLl9zZXJ2aWNlPXMsdGhpcy5kaWFsb2dDcmVhdGVkPSExLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BXaWR0aD0iMjMwcHgiLHRoaXMuY3BIZWlnaHQ9ImF1dG8iLHRoaXMuY3BUb2dnbGU9ITEsdGhpcy5jcERpc2FibGVkPSExLHRoaXMuY3BJZ25vcmVkRWxlbWVudHM9W10sdGhpcy5jcEZhbGxiYWNrQ29sb3I9IiIsdGhpcy5jcENvbG9yTW9kZT0iY29sb3IiLHRoaXMuY3BDbXlrRW5hYmxlZD0hMSx0aGlzLmNwT3V0cHV0Rm9ybWF0PSJhdXRvIix0aGlzLmNwQWxwaGFDaGFubmVsPSJlbmFibGVkIix0aGlzLmNwRGlzYWJsZUlucHV0PSExLHRoaXMuY3BEaWFsb2dEaXNwbGF5PSJwb3B1cCIsdGhpcy5jcFNhdmVDbGlja091dHNpZGU9ITAsdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lcj0hMSx0aGlzLmNwUG9zaXRpb249ImF1dG8iLHRoaXMuY3BQb3NpdGlvbk9mZnNldD0iMCUiLHRoaXMuY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdz0hMSx0aGlzLmNwT0tCdXR0b249ITEsdGhpcy5jcE9LQnV0dG9uVGV4dD0iT0siLHRoaXMuY3BPS0J1dHRvbkNsYXNzPSJjcC1vay1idXR0b24tY2xhc3MiLHRoaXMuY3BDYW5jZWxCdXR0b249ITEsdGhpcy5jcENhbmNlbEJ1dHRvblRleHQ9IkNhbmNlbCIsdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzPSJjcC1jYW5jZWwtYnV0dG9uLWNsYXNzIix0aGlzLmNwRXllRHJvcHBlcj0hMSx0aGlzLmNwUHJlc2V0TGFiZWw9IlByZXNldCBjb2xvcnMiLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcz0iY3AtcHJlc2V0LWNvbG9ycy1jbGFzcyIsdGhpcy5jcE1heFByZXNldENvbG9yc0xlbmd0aD02LHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2U9Ik5vIGNvbG9ycyBhZGRlZCIsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzPSJwcmVzZXQtZW1wdHktbWVzc2FnZSIsdGhpcy5jcEFkZENvbG9yQnV0dG9uPSExLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQ9IkFkZCBjb2xvciIsdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3M9ImNwLWFkZC1jb2xvci1idXR0b24tY2xhc3MiLHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzPSJjcC1yZW1vdmUtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwSW5wdXRDaGFuZ2U9bmV3IEwoITApLHRoaXMuY3BUb2dnbGVDaGFuZ2U9bmV3IEwoITApLHRoaXMuY3BTbGlkZXJDaGFuZ2U9bmV3IEwoITApLHRoaXMuY3BTbGlkZXJEcmFnRW5kPW5ldyBMKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ1N0YXJ0PW5ldyBMKCEwKSx0aGlzLmNvbG9yUGlja2VyT3Blbj1uZXcgTCghMCksdGhpcy5jb2xvclBpY2tlckNsb3NlPW5ldyBMKCEwKSx0aGlzLmNvbG9yUGlja2VyQ2FuY2VsPW5ldyBMKCEwKSx0aGlzLmNvbG9yUGlja2VyU2VsZWN0PW5ldyBMKCEwKSx0aGlzLmNvbG9yUGlja2VyQ2hhbmdlPW5ldyBMKCExKSx0aGlzLmNwQ215a0NvbG9yQ2hhbmdlPW5ldyBMKCEwKSx0aGlzLmNwUHJlc2V0Q29sb3JzQ2hhbmdlPW5ldyBMKCEwKX1oYW5kbGVDbGljaygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUZvY3VzKCl7dGhpcy5pbnB1dEZvY3VzKCl9aGFuZGxlSW5wdXQoZSl7dGhpcy5pbnB1dENoYW5nZShlKX1uZ09uRGVzdHJveSgpe251bGwhPXRoaXMuY21wUmVmJiYodGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZiYmdGhpcy5hcHBSZWYuZGV0YWNoVmlldyh0aGlzLmNtcFJlZi5ob3N0VmlldyksdGhpcy5jbXBSZWYuZGVzdHJveSgpLHRoaXMuY21wUmVmPW51bGwsdGhpcy5kaWFsb2c9bnVsbCl9bmdPbkNoYW5nZXMoZSl7ZS5jcFRvZ2dsZSYmIXRoaXMuY3BEaXNhYmxlZCYmKGUuY3BUb2dnbGUuY3VycmVudFZhbHVlP3RoaXMub3BlbkRpYWxvZygpOmUuY3BUb2dnbGUuY3VycmVudFZhbHVlfHx0aGlzLmNsb3NlRGlhbG9nKCkpLGUuY29sb3JQaWNrZXImJih0aGlzLmRpYWxvZyYmIXRoaXMuaWdub3JlQ2hhbmdlcyYmKCJpbmxpbmUiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuZGlhbG9nLnNldEluaXRpYWxDb2xvcihlLmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSksdGhpcy5kaWFsb2cuc2V0Q29sb3JGcm9tU3RyaW5nKGUuY29sb3JQaWNrZXIuY3VycmVudFZhbHVlLCExKSx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXImJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY21wUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSksdGhpcy5pZ25vcmVDaGFuZ2VzPSExKSwoZS5jcFByZXNldExhYmVsfHxlLmNwUHJlc2V0Q29sb3JzKSYmdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLnNldFByZXNldENvbmZpZyh0aGlzLmNwUHJlc2V0TGFiZWwsdGhpcy5jcFByZXNldENvbG9ycyl9b3BlbkRpYWxvZygpe2lmKHRoaXMuZGlhbG9nQ3JlYXRlZCl0aGlzLmRpYWxvZyYmdGhpcy5kaWFsb2cub3BlbkRpYWxvZyh0aGlzLmNvbG9yUGlja2VyKTtlbHNle2xldCBlPXRoaXMudmNSZWY7aWYodGhpcy5kaWFsb2dDcmVhdGVkPSEwLHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWY9ITEsdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5KXtsZXQgbz10aGlzLmluamVjdG9yLmdldCh0aGlzLmFwcFJlZi5jb21wb25lbnRUeXBlc1swXSxiaS5OVUxMKTtvIT09YmkuTlVMTD9lPW8udmNSZWZ8fG8udmlld0NvbnRhaW5lclJlZnx8dGhpcy52Y1JlZjp0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSEwfWxldCBpPXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHBWZSk7aWYodGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZil0aGlzLmNtcFJlZj1pLmNyZWF0ZSh0aGlzLmluamVjdG9yKSx0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHRoaXMuY21wUmVmLmhvc3RWaWV3KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY21wUmVmLmhvc3RWaWV3LnJvb3ROb2Rlc1swXSk7ZWxzZXtsZXQgcj1iaS5jcmVhdGUoe3Byb3ZpZGVyczpbXSxwYXJlbnQ6ZS5pbmplY3Rvcn0pO3RoaXMuY21wUmVmPWUuY3JlYXRlQ29tcG9uZW50KGksMCxyLFtdKX10aGlzLmNtcFJlZi5pbnN0YW5jZS5zZXR1cERpYWxvZyh0aGlzLHRoaXMuZWxSZWYsdGhpcy5jb2xvclBpY2tlcix0aGlzLmNwV2lkdGgsdGhpcy5jcEhlaWdodCx0aGlzLmNwRGlhbG9nRGlzcGxheSx0aGlzLmNwRmFsbGJhY2tDb2xvcix0aGlzLmNwQ29sb3JNb2RlLHRoaXMuY3BDbXlrRW5hYmxlZCx0aGlzLmNwQWxwaGFDaGFubmVsLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcERpc2FibGVJbnB1dCx0aGlzLmNwSWdub3JlZEVsZW1lbnRzLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXIsdGhpcy5jcFBvc2l0aW9uLHRoaXMuY3BQb3NpdGlvbk9mZnNldCx0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3csdGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMsdGhpcy5jcFByZXNldENvbG9yc0NsYXNzLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZSx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MsdGhpcy5jcE9LQnV0dG9uLHRoaXMuY3BPS0J1dHRvbkNsYXNzLHRoaXMuY3BPS0J1dHRvblRleHQsdGhpcy5jcENhbmNlbEJ1dHRvbix0aGlzLmNwQ2FuY2VsQnV0dG9uQ2xhc3MsdGhpcy5jcENhbmNlbEJ1dHRvblRleHQsdGhpcy5jcEFkZENvbG9yQnV0dG9uLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3MsdGhpcy5jcEV5ZURyb3BwZXIsdGhpcy5lbFJlZix0aGlzLmNwRXh0cmFUZW1wbGF0ZSksdGhpcy5kaWFsb2c9dGhpcy5jbXBSZWYuaW5zdGFuY2UsdGhpcy52Y1JlZiE9PWUmJnRoaXMuY21wUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX19Y2xvc2VEaWFsb2coKXt0aGlzLmRpYWxvZyYmInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5jbG9zZURpYWxvZygpfWNteWtDaGFuZ2VkKGUpe3RoaXMuY3BDbXlrQ29sb3JDaGFuZ2UuZW1pdChlKX1zdGF0ZUNoYW5nZWQoZSl7dGhpcy5jcFRvZ2dsZUNoYW5nZS5lbWl0KGUpLGU/dGhpcy5jb2xvclBpY2tlck9wZW4uZW1pdCh0aGlzLmNvbG9yUGlja2VyKTp0aGlzLmNvbG9yUGlja2VyQ2xvc2UuZW1pdCh0aGlzLmNvbG9yUGlja2VyKX1jb2xvckNoYW5nZWQoZSxpPSEwKXt0aGlzLmlnbm9yZUNoYW5nZXM9aSx0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQoZSl9Y29sb3JTZWxlY3RlZChlKXt0aGlzLmNvbG9yUGlja2VyU2VsZWN0LmVtaXQoZSl9Y29sb3JDYW5jZWxlZCgpe3RoaXMuY29sb3JQaWNrZXJDYW5jZWwuZW1pdCgpfWlucHV0Rm9jdXMoKXtsZXQgZT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsaT10aGlzLmNwSWdub3JlZEVsZW1lbnRzLmZpbHRlcihyPT5yPT09ZSk7IXRoaXMuY3BEaXNhYmxlZCYmIWkubGVuZ3RoJiYodHlwZW9mIGRvY3VtZW50PCJ1IiYmZT09PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/dGhpcy5vcGVuRGlhbG9nKCk6dGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLnNob3c/dGhpcy5jbG9zZURpYWxvZygpOnRoaXMub3BlbkRpYWxvZygpKX1pbnB1dENoYW5nZShlKXt0aGlzLmRpYWxvZz90aGlzLmRpYWxvZy5zZXRDb2xvckZyb21TdHJpbmcoZS50YXJnZXQudmFsdWUsITApOih0aGlzLmNvbG9yUGlja2VyPWUudGFyZ2V0LnZhbHVlLHRoaXMuY29sb3JQaWNrZXJDaGFuZ2UuZW1pdCh0aGlzLmNvbG9yUGlja2VyKSl9aW5wdXRDaGFuZ2VkKGUpe3RoaXMuY3BJbnB1dENoYW5nZS5lbWl0KGUpfXNsaWRlckNoYW5nZWQoZSl7dGhpcy5jcFNsaWRlckNoYW5nZS5lbWl0KGUpfXNsaWRlckRyYWdFbmQoZSl7dGhpcy5jcFNsaWRlckRyYWdFbmQuZW1pdChlKX1zbGlkZXJEcmFnU3RhcnQoZSl7dGhpcy5jcFNsaWRlckRyYWdTdGFydC5lbWl0KGUpfXByZXNldENvbG9yc0NoYW5nZWQoZSl7dGhpcy5jcFByZXNldENvbG9yc0NoYW5nZS5lbWl0KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGJpKSxDKFFyKSxDKGdjKSxDKFpuKSxDKGJlKSxDKEpWKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNvbG9yUGlja2VyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlQ2xpY2soKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gaS5oYW5kbGVGb2N1cygpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVJbnB1dChvKX0pfSxpbnB1dHM6e2NvbG9yUGlja2VyOiJjb2xvclBpY2tlciIsY3BXaWR0aDoiY3BXaWR0aCIsY3BIZWlnaHQ6ImNwSGVpZ2h0IixjcFRvZ2dsZToiY3BUb2dnbGUiLGNwRGlzYWJsZWQ6ImNwRGlzYWJsZWQiLGNwSWdub3JlZEVsZW1lbnRzOiJjcElnbm9yZWRFbGVtZW50cyIsY3BGYWxsYmFja0NvbG9yOiJjcEZhbGxiYWNrQ29sb3IiLGNwQ29sb3JNb2RlOiJjcENvbG9yTW9kZSIsY3BDbXlrRW5hYmxlZDoiY3BDbXlrRW5hYmxlZCIsY3BPdXRwdXRGb3JtYXQ6ImNwT3V0cHV0Rm9ybWF0IixjcEFscGhhQ2hhbm5lbDoiY3BBbHBoYUNoYW5uZWwiLGNwRGlzYWJsZUlucHV0OiJjcERpc2FibGVJbnB1dCIsY3BEaWFsb2dEaXNwbGF5OiJjcERpYWxvZ0Rpc3BsYXkiLGNwU2F2ZUNsaWNrT3V0c2lkZToiY3BTYXZlQ2xpY2tPdXRzaWRlIixjcENsb3NlQ2xpY2tPdXRzaWRlOiJjcENsb3NlQ2xpY2tPdXRzaWRlIixjcFVzZVJvb3RWaWV3Q29udGFpbmVyOiJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIixjcFBvc2l0aW9uOiJjcFBvc2l0aW9uIixjcFBvc2l0aW9uT2Zmc2V0OiJjcFBvc2l0aW9uT2Zmc2V0IixjcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93OiJjcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93IixjcE9LQnV0dG9uOiJjcE9LQnV0dG9uIixjcE9LQnV0dG9uVGV4dDoiY3BPS0J1dHRvblRleHQiLGNwT0tCdXR0b25DbGFzczoiY3BPS0J1dHRvbkNsYXNzIixjcENhbmNlbEJ1dHRvbjoiY3BDYW5jZWxCdXR0b24iLGNwQ2FuY2VsQnV0dG9uVGV4dDoiY3BDYW5jZWxCdXR0b25UZXh0IixjcENhbmNlbEJ1dHRvbkNsYXNzOiJjcENhbmNlbEJ1dHRvbkNsYXNzIixjcEV5ZURyb3BwZXI6ImNwRXllRHJvcHBlciIsY3BQcmVzZXRMYWJlbDoiY3BQcmVzZXRMYWJlbCIsY3BQcmVzZXRDb2xvcnM6ImNwUHJlc2V0Q29sb3JzIixjcFByZXNldENvbG9yc0NsYXNzOiJjcFByZXNldENvbG9yc0NsYXNzIixjcE1heFByZXNldENvbG9yc0xlbmd0aDoiY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgiLGNwUHJlc2V0RW1wdHlNZXNzYWdlOiJjcFByZXNldEVtcHR5TWVzc2FnZSIsY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzczoiY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcyIsY3BBZGRDb2xvckJ1dHRvbjoiY3BBZGRDb2xvckJ1dHRvbiIsY3BBZGRDb2xvckJ1dHRvblRleHQ6ImNwQWRkQ29sb3JCdXR0b25UZXh0IixjcEFkZENvbG9yQnV0dG9uQ2xhc3M6ImNwQWRkQ29sb3JCdXR0b25DbGFzcyIsY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzOiJjcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3MiLGNwRXh0cmFUZW1wbGF0ZToiY3BFeHRyYVRlbXBsYXRlIn0sb3V0cHV0czp7Y3BJbnB1dENoYW5nZToiY3BJbnB1dENoYW5nZSIsY3BUb2dnbGVDaGFuZ2U6ImNwVG9nZ2xlQ2hhbmdlIixjcFNsaWRlckNoYW5nZToiY3BTbGlkZXJDaGFuZ2UiLGNwU2xpZGVyRHJhZ0VuZDoiY3BTbGlkZXJEcmFnRW5kIixjcFNsaWRlckRyYWdTdGFydDoiY3BTbGlkZXJEcmFnU3RhcnQiLGNvbG9yUGlja2VyT3BlbjoiY29sb3JQaWNrZXJPcGVuIixjb2xvclBpY2tlckNsb3NlOiJjb2xvclBpY2tlckNsb3NlIixjb2xvclBpY2tlckNhbmNlbDoiY29sb3JQaWNrZXJDYW5jZWwiLGNvbG9yUGlja2VyU2VsZWN0OiJjb2xvclBpY2tlclNlbGVjdCIsY29sb3JQaWNrZXJDaGFuZ2U6ImNvbG9yUGlja2VyQ2hhbmdlIixjcENteWtDb2xvckNoYW5nZToiY3BDbXlrQ29sb3JDaGFuZ2UiLGNwUHJlc2V0Q29sb3JzQ2hhbmdlOiJjcFByZXNldENvbG9yc0NoYW5nZSJ9LGV4cG9ydEFzOlsibmd4Q29sb3JQaWNrZXIiXSxmZWF0dXJlczpbR3RdfSksbn0pKCksT25lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtwcm92aWRlcnM6W0pWXSxpbXBvcnRzOltUZV19KSxufSkoKSxtVmU9WyJyZWdleFN0cmluZ0lucHV0Il07ZnVuY3Rpb24gaFZlKG4sdCl7aWYoMSZuJiYoVHQoMCksaCgxLCJsaSIsMjIpLFQoMiksZygpLER0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigxKSxfKCJ0aXRsZSIsZS5uYW1lKSxiKDEpLHV0KGUubmFtZSl9fWZ1bmN0aW9uIGdWZShuLHQpe2lmKDEmbiYmKGgoMCwibGkiLDIzKSgxLCJlbSIpLFQoMiksRygzLCJudW1iZXIiKSxnKCkoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0O2IoMiksemUoImFuZCAiLFcoMywxLGUucnVucy5sZW5ndGgtNSksIiBtb3JlIil9fWZ1bmN0aW9uIF9WZShuLHQpezEmbiYmKGgoMCwibGkiLDI0KSgxLCJlbSIpLFQoMiwiTm8gcnVucyBhcmUgaW4gdGhlIGdyb3VwIiksZygpKCkpfXZhciB5VmU9ZnVuY3Rpb24obil7cmV0dXJue2JvcmRlckNvbG9yOm59fSxiVmU9ZnVuY3Rpb24obil7cmV0dXJue2JhY2tncm91bmRDb2xvcjpufX07ZnVuY3Rpb24gdlZlKG4sdCl7aWYoMSZuJiYoaCgwLCJ1bCIsMTYpKDEsImxpIikoMiwibGFiZWwiKSxQKDMsInNwYW4iLDE3KSxoKDQsImNvZGUiLDE4KSxUKDUpLGcoKSgpLGgoNiwidWwiKSxTKDcsaFZlLDMsMiwibmctY29udGFpbmVyIiwxOSksRyg4LCJzbGljZSIpLFMoOSxnVmUsNCwzLCJsaSIsMjApLFMoMTAsX1ZlLDMsMCwibGkiLDIxKSxnKCkoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O18oIm5nU3R5bGUiLFNuKDExLHlWZSxlLmNvbG9yKSksYigzKSxfKCJuZ1N0eWxlIixTbigxMyxiVmUsZS5jb2xvcikpLGIoMSksXygidGl0bGUiLGUuZ3JvdXBJZCksYigxKSx1dChlLmdyb3VwSWQpLGIoMiksXygibmdGb3JPZiIsQlAoOCw3LGUucnVucywwLDUpKSxiKDIpLF8oIm5nSWYiLGUucnVucy5sZW5ndGg+NSksYigxKSxfKCJuZ0lmIiwwPT09ZS5ydW5zLmxlbmd0aCl9fWZ1bmN0aW9uIHhWZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxNCksUygxLHZWZSwxMSwxNSwidWwiLDE1KSxnKCkpLDImbil7bGV0IGU9dygyKTtiKDEpLF8oIm5nRm9yT2YiLGUuY29sb3JSdW5QYWlyTGlzdCl9fWZ1bmN0aW9uIENWZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwyNSksVCgxLCIgVGhlcmUgYXJlIG5vIHJ1bnMgbWF0Y2hpbmcgdGhlIHJlZ2V4LCAiKSxoKDIsImNvZGUiKSxUKDMpLGcoKSxUKDQsIi4gUGxlYXNlIGNoZWNrIGlmIHlvdXIgcmVnZXggc3RyaW5nIGlzIGNvcnJlY3QuICIpLGcoKSksMiZuKXtsZXQgZT13KDIpO2IoMyksemUoIi8iLGUucmVnZXhTdHJpbmcsIi8iKX19ZnVuY3Rpb24gTVZlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDEwKSgxLCJoNCIpLFQoMiwiQ29sb3IgZ3JvdXAgcHJldmlldyIpLGcoKSxoKDMsImRpdiIsMTEpLFMoNCx4VmUsMiwxLCJkaXYiLDEyKSxTKDUsQ1ZlLDUsMSwibmctdGVtcGxhdGUiLG51bGwsMTMsWnQpLGcoKSgpKSwyJm4pe2xldCBlPXR0KDYpLGk9dygpO2IoNCksXygibmdJZiIsaS5jb2xvclJ1blBhaXJMaXN0Lmxlbmd0aCkoIm5nSWZFbHNlIixlKX19dmFyIExuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5kaWFsb2dSZWY9ZSx0aGlzLmhvc3RFbFJlZj1pLHRoaXMub25TYXZlPW5ldyBMLHRoaXMucmVnZXhJbnB1dE9uQ2hhbmdlPW5ldyBMLHRoaXMudGltZU91dElkPTB9cmVzZXRGb2N1cygpe3RoaXMuaG9zdEVsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fHRoaXMucmVnZXhTdHJpbmdJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9b25FbnRlcihlKXt0aGlzLm9uU2F2ZUNsaWNrKGUpLHRoaXMuZGlhbG9nUmVmLmNsb3NlKCl9b25TYXZlQ2xpY2soZSl7dGhpcy5vblNhdmUuZW1pdChlKX1maWxsRXhhbXBsZShlKXt0aGlzLnJlZ2V4U3RyaW5nPWUsdGhpcy5yZWdleElucHV0Q2hhbmdlKGUpfXJlZ2V4SW5wdXRDaGFuZ2UoZSl7dGhpcy5yZWdleElucHV0T25DaGFuZ2UuZW1pdChlKX1oYW5kbGVGb2N1c091dCgpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVPdXRJZCksdGhpcy50aW1lT3V0SWQ9c2V0VGltZW91dCh0aGlzLnJlc2V0Rm9jdXMuYmluZCh0aGlzKSwwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhTZCksQyhiZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJlllKG1WZSw3KSwyJmUpe2xldCByO3dlKHI9U2UoKSkmJihpLnJlZ2V4U3RyaW5nSW5wdXQ9ci5maXJzdCl9fSxpbnB1dHM6e3JlZ2V4U3RyaW5nOiJyZWdleFN0cmluZyIsY29sb3JSdW5QYWlyTGlzdDoiY29sb3JSdW5QYWlyTGlzdCJ9LG91dHB1dHM6e29uU2F2ZToib25TYXZlIixyZWdleElucHV0T25DaGFuZ2U6InJlZ2V4SW5wdXRPbkNoYW5nZSJ9LGRlY2xzOjMwLHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkNvbG9yIFJ1bnMgYnkgUmVnZXggUXVlcnnikJ8xNWVkOWY2ZmQyZDQ5MDZhNDgwM2ZjMTI1NWRlM2M1ZGIyYzU2NTMw4pCfOTA4ODk4NTExMzk2MDMxMjgwODpDb2xvciBSdW5zIGJ5IFJlZ2V4IFF1ZXJ5YCxbWzEsInJlZ2V4LWVkaXQtZGlhbG9nIiwzLCJmb2N1c291dCJdLFsibWF0LWRpYWxvZy10aXRsZSIsIiJdLFsibWF0SW5wdXQiLCIiLCJhcmlhLWxhYmVsIix0LCJjZGtGb2N1c0luaXRpYWwiLCIiLDMsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImlucHV0Il0sWyJyZWdleFN0cmluZ0lucHV0IiwiIl0sWzEsImV4YW1wbGUtZGV0YWlscyJdLFszLCJjbGljayJdLFsiY2xhc3MiLCJncm91cC1jb250YWluZXIiLDQsIm5nSWYiXSxbIm1hdC1kaWFsb2ctYWN0aW9ucyIsIiIsImFsaWduIiwiZW5kIl0sWyJtYXQtYnV0dG9uIiwiIiwibWF0LWRpYWxvZy1jbG9zZSIsIiJdLFsibWF0LXJhaXNlZC1idXR0b24iLCIiLCJjb2xvciIsInByaW1hcnkiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIiwzLCJjbGljayJdLFsxLCJncm91cC1jb250YWluZXIiXSxbMSwiZ3JvdXBpbmctcHJldmlldyJdLFsiY2xhc3MiLCJtYXRjaC1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZW1wdHkiLCIiXSxbMSwibWF0Y2gtY29udGFpbmVyIl0sWyJjbGFzcyIsImdyb3VwIiwzLCJuZ1N0eWxlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZ3JvdXAiLDMsIm5nU3R5bGUiXSxbMSwiY29sb3Itc3dhdGNoIiwzLCJuZ1N0eWxlIl0sWzEsImdyb3VwLWlkIiwzLCJ0aXRsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwibW9yZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby1tYXRjaCIsNCwibmdJZiJdLFszLCJ0aXRsZSJdLFsxLCJtb3JlIl0sWzEsIm5vLW1hdGNoIl0sWzEsIndhcm5pbmciXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlKXtsZXQgcj1nZSgpO2goMCwiZGl2IiwwKSxEKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5oYW5kbGVGb2N1c091dCgpfSksaCgxLCJoMSIsMSksVCgyLCJDb2xvciBydW5zIGJ5IHJlZ2V4IiksZygpLGgoMywibWF0LWRpYWxvZy1jb250ZW50IikoNCwicCIpLFQoNSwiRW50ZXIgYSByZWdleCB3aXRoIGNhcHR1cmluZyBncm91cHMgdG8gbWF0Y2ggYWdhaW5zdCBydW4gbmFtZXM6IiksZygpLGgoNiwibWF0LWZvcm0tZmllbGQiKSg3LCJpbnB1dCIsMiwzKSxEKCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihhKXtyZXR1cm4gaS5vbkVudGVyKGEudGFyZ2V0LnZhbHVlKX0pKCJpbnB1dCIsZnVuY3Rpb24oYSl7cmV0dXJuIGkucmVnZXhJbnB1dENoYW5nZShhLnRhcmdldC52YWx1ZSl9KSxnKCkoKSgpLGgoOSwiZGl2Iiw0KSgxMCwicCIpLFQoMTEsJyBFYWNoIG1hdGNoaW5nIHJ1biB3aWxsIGJlIGFzc2lnbmVkIGEgY29sb3IgYmFzZWQgb24gdGhlICJrZXkiIGZvcm1lZCBieSBpdHMgbWF0Y2hlcyB0byB0aGUgY2FwdHVyaW5nIGdyb3Vwcy4gJyksUCgxMiwiYnIiKSxoKDEzLCJidXR0b24iLDUpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmZpbGxFeGFtcGxlKCIodHJhaW58ZXZhbCkiKX0pLFQoMTQsIiBUcnkgIiksaCgxNSwiY29kZSIpLFQoMTYsIih0cmFpbnxldmFsKSIpLGcoKSgpLFQoMTcsIiB0byBhc3NpZ24gYWxsIHJ1bnMgY29udGFpbmluZyAiKSxoKDE4LCJjb2RlIiksVCgxOSwidHJhaW4iKSxnKCksVCgyMCwiIHRvIG9uZSBjb2xvciBhbmQgYWxsIHJ1bnMgY29udGFpbmluZyAiKSxoKDIxLCJjb2RlIiksVCgyMiwiZXZhbCIpLGcoKSxUKDIzLCIgdG8gYW5vdGhlciBjb2xvci4gIiksZygpKCksUygyNCxNVmUsNywyLCJkaXYiLDYpLGgoMjUsImRpdiIsNykoMjYsImJ1dHRvbiIsOCksVCgyNywiQ2FuY2VsIiksZygpLGgoMjgsImJ1dHRvbiIsOSksRCgiY2xpY2siLGZ1bmN0aW9uKCl7WChyKTtsZXQgYT10dCg4KTtyZXR1cm4gUShpLm9uU2F2ZUNsaWNrKGEudmFsdWUpKX0pLFQoMjksIiBTYXZlICIpLGcoKSgpKCl9MiZlJiYoYig3KSxKaSgidmFsdWUiLGkucmVnZXhTdHJpbmcpLGIoMTcpLF8oIm5nSWYiLGkucmVnZXhTdHJpbmcpKX0sZGVwZW5kZW5jaWVzOltkbixGZSxtdSxZcyxGbixKMSx2OSwkMSxlRSxxdSxfRyxQc10sc3R5bGVzOlsiLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjojMTk3NmQyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM0MmE1ZjV9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6IzdiMWZhMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTBweCAwfS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MTBweH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO21heC1oZWlnaHQ6NTB2aDtvdmVyZmxvdy15OmF1dG87cGFkZGluZzoyMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0ubWF0Y2gtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6Z3JpZDtmbGV4LXdyYXA6d3JhcDtnYXA6MTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsIG1pbm1heCg1MCUsIDFmcikpfS5jb2xvci1zd2F0Y2hbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6MCAwIDJweCAjMDAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNXB4O3dpZHRoOjE1cHh9dWxbX25nY29udGVudC0lQ09NUCVde2xpc3Qtc3R5bGUtdHlwZTpub25lO3BhZGRpbmc6MH1tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjNweDttYXJnaW46MDtwYWRkaW5nOjEwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1heC1jb250ZW50IGF1dG87cGFkZGluZzo1cHggMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ncm91cC1pZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45NWVtO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgdWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV0gICBsaVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubW9yZVtfbmdjb250ZW50LSVDT01QJV0sIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxObmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5zdG9yZT1lLHRoaXMuZGlhbG9nUmVmPWksdGhpcy50ZW50YXRpdmVSZWdleFN0cmluZyQ9bmV3IEFlLHRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJD1LYSgoKT0+Y24odGhpcy5zdG9yZS5zZWxlY3QoeDEpLnBpcGUoenQoMSkpLHRoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckKSkucGlwZShObigiIikpLHRoaXMuY29sb3JSdW5QYWlyTGlzdCQ9S2EoKCk9PnRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJC5waXBlKENyKDUwMCksVmUobz0+e3RyeXtsZXQgYT1uZXcgUmVnRXhwKG8pO3JldHVybiBCb29sZWFuKGEpfWNhdGNoe3JldHVybiExfX0pLFZpKHRoaXMuYWxsUnVucyQsdGhpcy5ydW5JZFRvRWlkJCx0aGlzLnN0b3JlLnNlbGVjdChCYS5nZXRDb2xvclBhbGV0dGUpLHRoaXMuc3RvcmUuc2VsZWN0KEVsKSksVSgoW28sYSxzLGwsY10pPT57bGV0IHU9QWIoe2tleTpRaS5SRUdFWCxyZWdleFN0cmluZzpvfSxhLHMpLHA9bmV3IE1hcCxmPVtdO2ZvcihsZXRbbSx5XW9mIE9iamVjdC5lbnRyaWVzKHUubWF0Y2hlcykpe2xldCBNPXAuZ2V0KG0pO2lmKCFNKXtsZXQgdj1sLmNvbG9yc1twLnNpemUlbC5jb2xvcnMubGVuZ3RoXTtNPWM/di5kYXJrSGV4OnYubGlnaHRIZXgscC5zZXQobSxNKX1mLnB1c2goe2dyb3VwSWQ6bSxjb2xvcjpNLHJ1bnM6eX0pfXJldHVybiBmfSkpKS5waXBlKE5uKFtdKSksdGhpcy5leHBlcmltZW50SWRzPXIuZXhwZXJpbWVudElkcyx0aGlzLnJ1bklkVG9FaWQkPXVuKHRoaXMuZXhwZXJpbWVudElkcy5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3Qocjcse2V4cGVyaW1lbnRJZDpvfSkucGlwZShVKGE9Pih7ZXhwZXJpbWVudElkOm8scnVuSWRzOmF9KSkpKSkucGlwZShVKG89PntsZXQgYT17fTtmb3IobGV0e3J1bklkczpzLGV4cGVyaW1lbnRJZDpsfW9mIG8pZm9yKGxldCBjIG9mIHMpYVtjXT1sO3JldHVybiBhfSkpLHRoaXMuYWxsUnVucyQ9dW4odGhpcy5leHBlcmltZW50SWRzLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdChFYyx7ZXhwZXJpbWVudElkOm99KSkpLnBpcGUoVShvPT5vLmZsYXQoKSkpfW9uUmVnZXhJbnB1dE9uQ2hhbmdlKGUpe3RoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckLm5leHQoZSl9b25TYXZlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSmgoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6e2tleTpRaS5SRUdFWCxyZWdleFN0cmluZzplfX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSksQyhTZCksQyhLYikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwiY29sb3JSdW5QYWlyTGlzdCIsIm9uU2F2ZSIsInJlZ2V4SW5wdXRPbkNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50IiwwKSxEKCJvblNhdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2F2ZShvKX0pKCJyZWdleElucHV0T25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhJbnB1dE9uQ2hhbmdlKG8pfSksRygxLCJhc3luYyIpLEcoMiwiYXN5bmMiKSxnKCkpLDImZSYmXygicmVnZXhTdHJpbmciLFcoMSwyLGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJjb2xvclJ1blBhaXJMaXN0IixXKDIsNCxpLmNvbG9yUnVuUGFpckxpc3QkKSl9LGRlcGVuZGVuY2llczpbTG5lLGx0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdLCByZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBFVmUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDE0KX1mdW5jdGlvbiBUVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDEzKSxEKCJjbGljayIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKTtyZXR1cm4gUShyLm9uR3JvdXBCeUNoYW5nZS5lbWl0KHtrZXk6ci5Hcm91cEJ5S2V5LkVYUEVSSU1FTlR9KSl9KSxoKDEsInNwYW4iKSxTKDIsRVZlLDEsMCwibWF0LWljb24iLDcpLGcoKSxoKDMsImxhYmVsIiksVCg0LCJFeHBlcmltZW50IiksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7UGUoImFyaWEtY2hlY2tlZCIsZS5zZWxlY3RlZEdyb3VwQnkua2V5PT09ZS5Hcm91cEJ5S2V5LkVYUEVSSU1FTlQpLGIoMiksXygibmdJZiIsZS5zZWxlY3RlZEdyb3VwQnkua2V5PT09ZS5Hcm91cEJ5S2V5LkVYUEVSSU1FTlQpfX1mdW5jdGlvbiBEVmUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDE0KX1mdW5jdGlvbiBJVmUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDE0KX1mdW5jdGlvbiBBVmUobix0KXtpZigxJm4mJihoKDAsImxhYmVsIiksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO2IoMSksdXQoZS5yZWdleFN0cmluZyl9fWZ1bmN0aW9uIFJWZShuLHQpezEmbiYmKGgoMCwibGFiZWwiLDE1KSxUKDEsIihub25lIHNldCkiKSxnKCkpfXZhciBCbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpYWxvZz1lLHRoaXMuR3JvdXBCeUtleT1RaSx0aGlzLm9uR3JvdXBCeUNoYW5nZT1uZXcgTH1vblJlZ2V4U3RyaW5nRWRpdCgpe3RoaXMuZGlhbG9nLm9wZW4oTm5lLHttYXhIZWlnaHQ6Ijk1dmgiLG1heFdpZHRoOiI4MHZ3IixkYXRhOntleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc319KX1vbkdyb3VwQnlSZWdleENsaWNrKCl7dGhpcy5yZWdleFN0cmluZz90aGlzLm9uR3JvdXBCeUNoYW5nZS5lbWl0KHtrZXk6UWkuUkVHRVgscmVnZXhTdHJpbmc6dGhpcy5yZWdleFN0cmluZ30pOnRoaXMub25SZWdleFN0cmluZ0VkaXQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhMbCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50Il1dLGlucHV0czp7c2hvd0V4cGVyaW1lbnRzR3JvdXBCeToic2hvd0V4cGVyaW1lbnRzR3JvdXBCeSIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIscmVnZXhTdHJpbmc6InJlZ2V4U3RyaW5nIixzZWxlY3RlZEdyb3VwQnk6InNlbGVjdGVkR3JvdXBCeSJ9LG91dHB1dHM6e29uR3JvdXBCeUNoYW5nZToib25Hcm91cEJ5Q2hhbmdlIn0sZGVjbHM6MjIsdmFyczo4LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNvbG9yIHJ1bnMgYnkuLi4iLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIl0sWyJzdmdJY29uIiwicGFsZXR0ZV8yNHB4Il0sWzEsInJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSJdLFsiZ3JvdXBCeU1lbnUiLCJtYXRNZW51Il0sWzEsImxhYmVsIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJydW4iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZG9uZV8yNHB4Iiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwicmVnZXgiLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtIiwiZGF0YS12YWx1ZSIsInJlZ2V4LWVkaXQiLDEsImRpc3BsYXktcmVnZXgtc3RyaW5nIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImVkaXRfMjRweCJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vbmUtc2V0LXN0cmluZyIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsImV4cGVyaW1lbnQiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZG9uZV8yNHB4Il0sWzEsIm5vbmUtc2V0LXN0cmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiYnV0dG9uIiwwKSxQKDEsIm1hdC1pY29uIiwxKSxnKCksaCgyLCJtYXQtbWVudSIsMiwzKSg0LCJkaXYiLDQpLFQoNSwiQ29sb3IgcnVucyBieSIpLGcoKSxTKDYsVFZlLDUsMiwiYnV0dG9uIiw1KSxoKDcsImJ1dHRvbiIsNiksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTppLkdyb3VwQnlLZXkuUlVOfSl9KSxoKDgsInNwYW4iKSxTKDksRFZlLDEsMCwibWF0LWljb24iLDcpLGcoKSxoKDEwLCJsYWJlbCIpLFQoMTEsIlJ1biIpLGcoKSgpLGgoMTIsImJ1dHRvbiIsOCksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEJ5UmVnZXhDbGljaygpfSksaCgxMywic3BhbiIpLFMoMTQsSVZlLDEsMCwibWF0LWljb24iLDcpLGcoKSxoKDE1LCJsYWJlbCIpLFQoMTYsIlJlZ2V4IiksZygpKCksaCgxNywiYnV0dG9uIiw5KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlZ2V4U3RyaW5nRWRpdCgpfSksaCgxOCwic3BhbiIpLFAoMTksIm1hdC1pY29uIiwxMCksZygpLFMoMjAsQVZlLDIsMSwibGFiZWwiLDExKSxTKDIxLFJWZSwyLDAsImxhYmVsIiwxMiksZygpKCkpLDImZSYmKF8oIm1hdE1lbnVUcmlnZ2VyRm9yIix0dCgzKSksYig2KSxfKCJuZ0lmIixpLnNob3dFeHBlcmltZW50c0dyb3VwQnkpLGIoMSksUGUoImFyaWEtY2hlY2tlZCIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJVTiksYigyKSxfKCJuZ0lmIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUlVOKSxiKDMpLFBlKCJhcmlhLWNoZWNrZWQiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SRUdFWCksYigyKSxfKCJuZ0lmIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUkVHRVgpLGIoNiksXygibmdJZiIsaS5yZWdleFN0cmluZyksYigxKSxfKCJuZ0lmIiwhaS5yZWdleFN0cmluZykpfSxkZXBlbmRlbmNpZXM6W0ZlLEZuLERuLGtjLFl1LFBjXSxzdHlsZXM6WyIucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5e2ZvbnQtc2l6ZToxNnB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAubGFiZWx7Y29sb3I6IzYxNjE2MTtmb250LXNpemU6LjllbTttYXJnaW46MTBweCAwO3BhZGRpbmc6MCAxNnB4O3BvaW50ZXItZXZlbnRzOm5vbmV9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IGJ1dHRvbntkaXNwbGF5OmdyaWQ7Z2FwOjJweCAxMHB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczoyMHB4IGF1dG99ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IG1hdC1pY29ue2hlaWdodDoyMHB4O3dpZHRoOjIwcHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZ3twYWRkaW5nLWxlZnQ6NDBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5nIC5ub25lLXNldC1zdHJpbmd7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAgIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5nIC5ub25lLXNldC1zdHJpbmcsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHZBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoeTYpLnBpcGUoVShpPT5pLmhhcyhrbi5DT01QQVJFX0VYUEVSSU1FTlQpKSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KGE3KSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoeDEpfW9uR3JvdXBCeUNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEpoKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoa2UpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIl1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyJ9LGRlY2xzOjQsdmFyczoxMCxjb25zdHM6W1szLCJyZWdleFN0cmluZyIsInNlbGVjdGVkR3JvdXBCeSIsInNob3dFeHBlcmltZW50c0dyb3VwQnkiLCJleHBlcmltZW50SWRzIiwib25Hcm91cEJ5Q2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uLWNvbXBvbmVudCIsMCksRCgib25Hcm91cEJ5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2Uobyl9KSxHKDEsImFzeW5jIiksRygyLCJhc3luYyIpLEcoMywiYXN5bmMiKSxnKCkpLDImZSYmXygicmVnZXhTdHJpbmciLFcoMSw0LGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJzZWxlY3RlZEdyb3VwQnkiLFcoMiw2LGkuc2VsZWN0ZWRHcm91cEJ5JCkpKCJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixXKDMsOCxpLnNob3dFeHBlcmltZW50c0dyb3VwQnkkKSkoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcyl9LGRlcGVuZGVuY2llczpbQm5lLGx0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBQVmUobix0KXsxJm4mJihoKDAsImRpdiIsNyksUCgxLCJtYXQtc3Bpbm5lciIsOCksZygpKX1mdW5jdGlvbiBPVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiKSgxLCJtYXQtY2hlY2tib3giLDE4KSxEKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDQpLmhhbmRsZVNlbGVjdEFsbChyKSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoNCk7YigxKSxfKCJjaGVja2VkIixlLmFsbFJvd3NTZWxlY3RlZCgpKSgiaW5kZXRlcm1pbmF0ZSIsIWUuYWxsUm93c1NlbGVjdGVkKCkmJmUuc29tZVJvd3NTZWxlY3RlZCgpKX19ZnVuY3Rpb24gRlZlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwxOSksUCgxLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIiwyMCksZygpKSwyJm4pe2xldCBlPXcoNCk7YigxKSxfKCJleHBlcmltZW50SWRzIixlLmV4cGVyaW1lbnRJZHMpfX1mdW5jdGlvbiBMVmUobix0KXtpZigxJm4mJihoKDAsInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDE0KSxUdCgxLDE1KSxTKDIsT1ZlLDIsMiwiZGl2IiwxNiksUygzLEZWZSwyLDEsInNwYW4iLDE3KSxEdCgpLGcoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygyKTtfKCJoZWFkZXIiLGUpKCJzb3J0aW5nSW5mbyIsaS5zb3J0aW5nSW5mbykoImhwYXJhbXNFbmFibGVkIiwhMCksYigxKSxfKCJuZ1N3aXRjaCIsZS5uYW1lKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsInNlbGVjdGVkIiksYigxKSxfKCJuZ1N3aXRjaENhc2UiLCJjb2xvciIpfX1mdW5jdGlvbiBOVmUobix0KXtpZigxJm4mJihUdCgwKSxTKDEsTFZlLDQsNiwidGItZGF0YS10YWJsZS1oZWFkZXItY2VsbCIsMTMpLER0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigxKSxfKCJuZ0lmIixlLmVuYWJsZWQpfX1mdW5jdGlvbiBCVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzcGFuIiwyNCkoMSwiYnV0dG9uIiwyNSksRCgiY29sb3JQaWNrZXJDaGFuZ2UiLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygzKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5vblJ1bkNvbG9yQ2hhbmdlLmVtaXQoe3J1bklkOm8uaWQsbmV3Q29sb3I6cn0pKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygzKS4kaW1wbGljaXQ7YigxKSxNdCgiYmFja2dyb3VuZCIsZS5jb2xvciksXygiY29sb3JQaWNrZXIiLGUuY29sb3IpKCJjcERpYWxvZ0Rpc3BsYXkiLCJwb3B1cCIpKCJjcFBvc2l0aW9uT2Zmc2V0IiwtMjApKCJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIiwhMCkoImNwT3V0cHV0Rm9ybWF0IiwiaGV4Iil9fWZ1bmN0aW9uIFZWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIpKDEsIm1hdC1jaGVja2JveCIsMjYpLEQoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMykuJGltcGxpY2l0O3JldHVybiBRKHcoMikuc2VsZWN0aW9uQ2xpY2socixvLmlkKSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoMykuJGltcGxpY2l0O2IoMSksXygiY2hlY2tlZCIsZS5zZWxlY3RlZCl9fWZ1bmN0aW9uIEhWZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIpLFAoMSwidGItZXhwZXJpbWVudC1hbGlhcyIsMjcpLGcoKSksMiZuKXtsZXQgZT13KDMpLiRpbXBsaWNpdDtiKDEpLF8oImFsaWFzIixlLmV4cGVyaW1lbnRBbGlhcyl9fWZ1bmN0aW9uIHpWZShuLHQpe2lmKDEmbiYmKGgoMCwidGItZGF0YS10YWJsZS1jb250ZW50LWNlbGwiLDIyKSxUdCgxLDE1KSxTKDIsQlZlLDIsNywic3BhbiIsMjMpLFMoMyxWVmUsMiwxLCJkaXYiLDE2KSxTKDQsSFZlLDIsMSwic3BhbiIsMTYpLER0KCksZygpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KCkuJGltcGxpY2l0O18oImhlYWRlciIsZSkoImRhdHVtIixpW2UubmFtZV0pLGIoMSksXygibmdTd2l0Y2giLGUubmFtZSksYigxKSxfKCJuZ1N3aXRjaENhc2UiLCJjb2xvciIpLGIoMSksXygibmdTd2l0Y2hDYXNlIiwic2VsZWN0ZWQiKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsImV4cGVyaW1lbnRBbGlhcyIpfX1mdW5jdGlvbiBVVmUobix0KXtpZigxJm4mJihUdCgwKSxTKDEselZlLDUsNiwidGItZGF0YS10YWJsZS1jb250ZW50LWNlbGwiLDIxKSxEdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoMSksXygibmdJZiIsZS5lbmFibGVkKX19ZnVuY3Rpb24galZlKG4sdCl7aWYoMSZuJiYoVHQoMCksaCgxLCJ0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtcm93IiksUygyLFVWZSwyLDEsIm5nLWNvbnRhaW5lciIsMTEpLGcoKSxEdCgpKSwyJm4pe2xldCBlPXcoMik7YigyKSxfKCJuZ0Zvck9mIixlLmdldEhlYWRlcnMoKSl9fWZ1bmN0aW9uIEdWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInRiLWRhdGEtdGFibGUiLDkpLEQoInNvcnREYXRhQnkiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnNvcnREYXRhQnkuZW1pdChyKSl9KSgib3JkZXJDb2x1bW5zIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vcmRlckNvbHVtbnMuZW1pdChyKSl9KSgiYWRkQ29sdW1uIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5hZGRDb2x1bW4uZW1pdChyKSl9KSgicmVtb3ZlQ29sdW1uIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5yZW1vdmVDb2x1bW4uZW1pdChyKSl9KSxUdCgxLDEwKSxTKDIsTlZlLDIsMSwibmctY29udGFpbmVyIiwxMSksRHQoKSxUdCgzLDEyKSxTKDQsalZlLDMsMSwibmctY29udGFpbmVyIiwxMSksRHQoKSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygiaGVhZGVycyIsZS5oZWFkZXJzKSgic29ydGluZ0luZm8iLGUuc29ydGluZ0luZm8pKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsITApKCJzZWxlY3RhYmxlQ29sdW1ucyIsZS5zZWxlY3RhYmxlQ29sdW1ucyksYigyKSxfKCJuZ0Zvck9mIixlLmdldEhlYWRlcnMoKSksYigyKSxfKCJuZ0Zvck9mIixlLmRhdGEpfX12YXIgV1ZlPWZ1bmN0aW9uKG4pe3JldHVybnsiZnVsbC1zY3JlZW4iOm59fSxIbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuQ29sdW1uSGVhZGVyVHlwZT12dCx0aGlzLnNvcnREYXRhQnk9bmV3IEwsdGhpcy5vcmRlckNvbHVtbnM9bmV3IEwsdGhpcy5vblNlbGVjdGlvblRvZ2dsZT1uZXcgTCx0aGlzLm9uQWxsU2VsZWN0aW9uVG9nZ2xlPW5ldyBMLHRoaXMub25SZWdleEZpbHRlckNoYW5nZT1uZXcgTCx0aGlzLnRvZ2dsZUZ1bGxTY3JlZW49bmV3IEwsdGhpcy5vblJ1bkNvbG9yQ2hhbmdlPW5ldyBMLHRoaXMuYWRkQ29sdW1uPW5ldyBMLHRoaXMucmVtb3ZlQ29sdW1uPW5ldyBMLHRoaXMub25TZWxlY3Rpb25EYmxDbGljaz1uZXcgTCx0aGlzLmJlZm9yZUNvbHVtbnM9W3tuYW1lOiJzZWxlY3RlZCIsZGlzcGxheU5hbWU6IiIsdHlwZTp2dC5DVVNUT00sZW5hYmxlZDohMH1dLHRoaXMuYWZ0ZXJDb2x1bW5zPVt7bmFtZToiY29sb3IiLGRpc3BsYXlOYW1lOiIiLHR5cGU6dnQuQ09MT1IsZW5hYmxlZDohMH1dfWdldEhlYWRlcnMoKXtyZXR1cm5bXS5jb25jYXQodGhpcy5iZWZvcmVDb2x1bW5zLHRoaXMuaGVhZGVycyx0aGlzLmFmdGVyQ29sdW1ucyl9c2VsZWN0aW9uQ2xpY2soZSxpKXtlLnByZXZlbnREZWZhdWx0KCksMT09PWUuZGV0YWlsJiZ0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQoaSksMj09PWUuZGV0YWlsJiZ0aGlzLm9uU2VsZWN0aW9uRGJsQ2xpY2suZW1pdChpKX1hbGxSb3dzU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5kYXRhLmV2ZXJ5KGU9PmUuc2VsZWN0ZWQpfXNvbWVSb3dzU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5kYXRhLnNvbWUoZT0+ZS5zZWxlY3RlZCl9aGFuZGxlU2VsZWN0QWxsKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLm9uQWxsU2VsZWN0aW9uVG9nZ2xlLmVtaXQodGhpcy5kYXRhLm1hcChpPT5pLmlkKSl9b25GaWx0ZXJLZXlVcChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtZGF0YS10YWJsZSJdXSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLGRhdGE6ImRhdGEiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIscmVnZXhGaWx0ZXI6InJlZ2V4RmlsdGVyIixpc0Z1bGxTY3JlZW46ImlzRnVsbFNjcmVlbiIsc2VsZWN0YWJsZUNvbHVtbnM6InNlbGVjdGFibGVDb2x1bW5zIixsb2FkaW5nOiJsb2FkaW5nIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMiLG9uU2VsZWN0aW9uVG9nZ2xlOiJvblNlbGVjdGlvblRvZ2dsZSIsb25BbGxTZWxlY3Rpb25Ub2dnbGU6Im9uQWxsU2VsZWN0aW9uVG9nZ2xlIixvblJlZ2V4RmlsdGVyQ2hhbmdlOiJvblJlZ2V4RmlsdGVyQ2hhbmdlIix0b2dnbGVGdWxsU2NyZWVuOiJ0b2dnbGVGdWxsU2NyZWVuIixvblJ1bkNvbG9yQ2hhbmdlOiJvblJ1bkNvbG9yQ2hhbmdlIixhZGRDb2x1bW46ImFkZENvbHVtbiIscmVtb3ZlQ29sdW1uOiJyZW1vdmVDb2x1bW4iLG9uU2VsZWN0aW9uRGJsQ2xpY2s6Im9uU2VsZWN0aW9uRGJsQ2xpY2sifSxkZWNsczo3LHZhcnM6OCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsInZhbHVlIiwia2V5dXAiXSxbImNsYXNzIiwibG9hZGluZyIsNCwibmdJZiJdLFszLCJoZWFkZXJzIiwic29ydGluZ0luZm8iLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsInNlbGVjdGFibGVDb2x1bW5zIiwic29ydERhdGFCeSIsIm9yZGVyQ29sdW1ucyIsImFkZENvbHVtbiIsInJlbW92ZUNvbHVtbiIsNCwibmdJZiJdLFsxLCJmdWxsLXNjcmVlbi10b2dnbGUiLDMsIm5nQ2xhc3MiXSxbIm1hdC1idXR0b24iLCIiLDEsImZ1bGwtc2NyZWVuLWJ0biIsMywibmdDbGFzcyIsImNsaWNrIl0sWzEsImV4cGFuZC1jb2xsYXBzZS1pY29uIiwzLCJzdmdJY29uIl0sWzEsImxvYWRpbmciXSxbIm1vZGUiLCJpbmRldGVybWluYXRlIiwiZGlhbWV0ZXIiLCIyOCJdLFszLCJoZWFkZXJzIiwic29ydGluZ0luZm8iLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsInNlbGVjdGFibGVDb2x1bW5zIiwic29ydERhdGFCeSIsIm9yZGVyQ29sdW1ucyIsImFkZENvbHVtbiIsInJlbW92ZUNvbHVtbiJdLFsiaGVhZGVyIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY29udGVudCIsIiJdLFszLCJoZWFkZXIiLCJzb3J0aW5nSW5mbyIsImhwYXJhbXNFbmFibGVkIiw0LCJuZ0lmIl0sWzMsImhlYWRlciIsInNvcnRpbmdJbmZvIiwiaHBhcmFtc0VuYWJsZWQiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImdyb3VwLW1lbnUtY29udGFpbmVyIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJjbGljayJdLFsxLCJncm91cC1tZW51LWNvbnRhaW5lciJdLFszLCJleHBlcmltZW50SWRzIl0sWzMsImhlYWRlciIsImRhdHVtIiw0LCJuZ0lmIl0sWzMsImhlYWRlciIsImRhdHVtIl0sWyJjbGFzcyIsImNvbG9yLWNvbnRhaW5lciIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsImNvbG9yLWNvbnRhaW5lciJdLFsxLCJydW4tY29sb3Itc3dhdGNoIiwzLCJjb2xvclBpY2tlciIsImNwRGlhbG9nRGlzcGxheSIsImNwUG9zaXRpb25PZmZzZXQiLCJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIiwiY3BPdXRwdXRGb3JtYXQiLCJjb2xvclBpY2tlckNoYW5nZSJdLFszLCJjaGVja2VkIiwiY2xpY2siXSxbMywiYWxpYXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwidGItZmlsdGVyLWlucHV0IiwxKSxEKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GaWx0ZXJLZXlVcChvKX0pLGcoKSgpLFMoMixQVmUsMiwwLCJkaXYiLDIpLFMoMyxHVmUsNSw2LCJ0Yi1kYXRhLXRhYmxlIiwzKSxoKDQsImRpdiIsNCkoNSwiYnV0dG9uIiw1KSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVGdWxsU2NyZWVuLmVtaXQoKX0pLFAoNiwibWF0LWljb24iLDYpLGcoKSgpKSwyJmUmJihiKDEpLEppKCJ2YWx1ZSIsaS5yZWdleEZpbHRlciksYigxKSxfKCJuZ0lmIixpLmxvYWRpbmcpLGIoMSksXygibmdJZiIsIWkubG9hZGluZyksYigxKSxfKCJuZ0NsYXNzIixTbig2LFdWZSxpLmlzRnVsbFNjcmVlbikpLGIoMSksXygibmdDbGFzcyIsaS5pc0Z1bGxTY3JlZW4/ImNvbGxhcHNlIjoiZXhwYW5kIiksYigxKSxfKCJzdmdJY29uIixpLmlzRnVsbFNjcmVlbj8iYXJyb3dfYmFja18yNHB4IjoiYXJyb3dfZm9yd2FyZF8yNHB4IikpfSxkZXBlbmRlbmNpZXM6W2JBLGJuLGRuLEZlLCRpLHNyLE1fLHVBLGZBLHdfLHRwLEVfLEZuLEhsLERuLHpyLHZBXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXXtvdmVyZmxvdy15OnNjcm9sbDt3aWR0aDoxMDAlfS5jb2xvci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9LnJ1bi1jb2xvci1zd2F0Y2hbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtvdXRsaW5lOm5vbmV9Lmdyb3VwLW1lbnUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoxMDAlfXRiLWRhdGEtdGFibGUtY29udGVudC1yb3dbX25nY29udGVudC0lQ09NUCVdLCB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NDRweH10Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgdGItZGF0YS10YWJsZS1jb250ZW50LWNlbGxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGItZGF0YS10YWJsZS1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9dGItZGF0YS10YWJsZS1jb250ZW50LWNlbGxbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxkLCB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MTZweH10Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZCwgdGItZGF0YS10YWJsZS1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGItZGF0YS10YWJsZS1jb250ZW50LWNlbGxbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGQsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke2JvcmRlci1yaWdodDoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke2JvcmRlci1yaWdodDoxcHggc29saWQgIzU1NX10Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LW9mLXR5cGV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgdGItZGF0YS10YWJsZS1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1vZi10eXBle2JvcmRlci1yaWdodDoxcHggc29saWQgIzU1NX0uZnVsbC1zY3JlZW4tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjEwMCU7bGVmdDpjYWxjKDEwMCUgKyAycHgpO3RvcDowO3otaW5kZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdOmhvdmVye29wYWNpdHk6Ljh9LmZ1bGwtc2NyZWVuLXRvZ2dsZS5mdWxsLXNjcmVlbltfbmdjb250ZW50LSVDT01QJV17bGVmdDp1bnNldDtyaWdodDowfS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmZ1bGwtc2NyZWVuLWJ0bltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpncmF5O3BhZGRpbmc6MDttaW4td2lkdGg6MTZweDt3aWR0aDoxNnB4fS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmZ1bGwtc2NyZWVuLWJ0bi5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MCAxNnB4IDE2cHggMH0uZnVsbC1zY3JlZW4tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mdWxsLXNjcmVlbi1idG4uY29sbGFwc2VbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MTZweCAwIDAgMTZweH0uZnVsbC1zY3JlZW4tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mdWxsLXNjcmVlbi1idG5bX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZC1jb2xsYXBzZS1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweDt3aWR0aDoxNnB4fS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICB0Yi1maWx0ZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7anVzdGlmeS1jb250ZW50OmNlbnRlcn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksJFY9bmV3IGllKCJtYXQtdG9vbHRpcC1zY3JvbGwtc3RyYXRlZ3kiKSxqbmU9e3Byb3ZpZGU6JFYsZGVwczpbT2ldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHtzY3JvbGxUaHJvdHRsZToyMH0pfX0sR25lPW5ldyBpZSgibWF0LXRvb2x0aXAtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntzaG93RGVsYXk6MCxoaWRlRGVsYXk6MCx0b3VjaGVuZEhpZGVEZWxheToxNTAwfX19KSx6bmU9InRvb2x0aXAtcGFuZWwiLFVuZT1Zbyh7cGFzc2l2ZTohMH0pLFduZT0oKCk9PntjbGFzcyBue2dldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oZSl7ZSE9PXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249ZSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fdXBkYXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVJlZiksdGhpcy5fdG9vbHRpcEluc3RhbmNlPy5zaG93KDApLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSkpfWdldCBwb3NpdGlvbkF0T3JpZ2luKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQXRPcmlnaW59c2V0IHBvc2l0aW9uQXRPcmlnaW4oZSl7dGhpcy5fcG9zaXRpb25BdE9yaWdpbj1VdChlKSx0aGlzLl9kZXRhY2goKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1VdChlKSx0aGlzLl9kaXNhYmxlZD90aGlzLmhpZGUoMCk6dGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpfWdldCBzaG93RGVsYXkoKXtyZXR1cm4gdGhpcy5fc2hvd0RlbGF5fXNldCBzaG93RGVsYXkoZSl7dGhpcy5fc2hvd0RlbGF5PURpKGUpfWdldCBoaWRlRGVsYXkoKXtyZXR1cm4gdGhpcy5faGlkZURlbGF5fXNldCBoaWRlRGVsYXkoZSl7dGhpcy5faGlkZURlbGF5PURpKGUpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbW91c2VMZWF2ZUhpZGVEZWxheT10aGlzLl9oaWRlRGVsYXkpfWdldCBtZXNzYWdlKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2V9c2V0IG1lc3NhZ2UoZSl7dGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdGhpcy5fbWVzc2FnZSwidG9vbHRpcCIpLHRoaXMuX21lc3NhZ2U9bnVsbCE9ZT9TdHJpbmcoZSkudHJpbSgpOiIiLCF0aGlzLl9tZXNzYWdlJiZ0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCk/dGhpcy5oaWRlKDApOih0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fYXJpYURlc2NyaWJlci5kZXNjcmliZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdGhpcy5tZXNzYWdlLCJ0b29sdGlwIil9KX0pKX1nZXQgdG9vbHRpcENsYXNzKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXBDbGFzc31zZXQgdG9vbHRpcENsYXNzKGUpe3RoaXMuX3Rvb2x0aXBDbGFzcz1lLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fc2V0VG9vbHRpcENsYXNzKHRoaXMuX3Rvb2x0aXBDbGFzcyl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1yLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9wbGF0Zm9ybT1zLHRoaXMuX2FyaWFEZXNjcmliZXI9bCx0aGlzLl9mb2N1c01vbml0b3I9Yyx0aGlzLl9kaXI9dSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1wLHRoaXMuX3Bvc2l0aW9uPSJiZWxvdyIsdGhpcy5fcG9zaXRpb25BdE9yaWdpbj0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl92aWV3SW5pdGlhbGl6ZWQ9ITEsdGhpcy5fcG9pbnRlckV4aXRFdmVudHNJbml0aWFsaXplZD0hMSx0aGlzLl92aWV3cG9ydE1hcmdpbj04LHRoaXMuX2Nzc0NsYXNzUHJlZml4PSJtYXQiLHRoaXMuX3Nob3dEZWxheT10aGlzLl9kZWZhdWx0T3B0aW9ucy5zaG93RGVsYXksdGhpcy5faGlkZURlbGF5PXRoaXMuX2RlZmF1bHRPcHRpb25zLmhpZGVEZWxheSx0aGlzLnRvdWNoR2VzdHVyZXM9ImF1dG8iLHRoaXMuX21lc3NhZ2U9IiIsdGhpcy5fcGFzc2l2ZUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9bmV3IEFlLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWQsdGhpcy5fZG9jdW1lbnQ9ZixwJiYocC5wb3NpdGlvbiYmKHRoaXMucG9zaXRpb249cC5wb3NpdGlvbikscC5wb3NpdGlvbkF0T3JpZ2luJiYodGhpcy5wb3NpdGlvbkF0T3JpZ2luPXAucG9zaXRpb25BdE9yaWdpbikscC50b3VjaEdlc3R1cmVzJiYodGhpcy50b3VjaEdlc3R1cmVzPXAudG91Y2hHZXN0dXJlcykpLHUuY2hhbmdlLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fdXBkYXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVJlZil9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl92aWV3SW5pdGlhbGl6ZWQ9ITAsdGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpLHRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGU9PntlPyJrZXlib2FyZCI9PT1lJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLnNob3coKSk6dGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKX0pfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2NsZWFyVGltZW91dCh0aGlzLl90b3VjaHN0YXJ0VGltZW91dCksdGhpcy5fb3ZlcmxheVJlZiYmKHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1udWxsKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmZvckVhY2goKFtpLHJdKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLHIsVW5lKX0pLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMubGVuZ3RoPTAsdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9hcmlhRGVzY3JpYmVyLnJlbW92ZURlc2NyaXB0aW9uKGUsdGhpcy5tZXNzYWdlLCJ0b29sdGlwIiksdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKGUpfXNob3coZT10aGlzLnNob3dEZWxheSxpKXtpZih0aGlzLmRpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHx0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5fdG9vbHRpcEluc3RhbmNlPy5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKTtsZXQgcj10aGlzLl9jcmVhdGVPdmVybGF5KGkpO3RoaXMuX2RldGFjaCgpLHRoaXMuX3BvcnRhbD10aGlzLl9wb3J0YWx8fG5ldyBQbCh0aGlzLl90b29sdGlwQ29tcG9uZW50LHRoaXMuX3ZpZXdDb250YWluZXJSZWYpO2xldCBvPXRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1yLmF0dGFjaCh0aGlzLl9wb3J0YWwpLmluc3RhbmNlO28uX3RyaWdnZXJFbGVtZW50PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxvLl9tb3VzZUxlYXZlSGlkZURlbGF5PXRoaXMuX2hpZGVEZWxheSxvLmFmdGVySGlkZGVuKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2RldGFjaCgpKSx0aGlzLl9zZXRUb29sdGlwQ2xhc3ModGhpcy5fdG9vbHRpcENsYXNzKSx0aGlzLl91cGRhdGVUb29sdGlwTWVzc2FnZSgpLG8uc2hvdyhlKX1oaWRlKGU9dGhpcy5oaWRlRGVsYXkpe2xldCBpPXRoaXMuX3Rvb2x0aXBJbnN0YW5jZTtpJiYoaS5pc1Zpc2libGUoKT9pLmhpZGUoZSk6KGkuX2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCksdGhpcy5fZGV0YWNoKCkpKX10b2dnbGUoZSl7dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpP3RoaXMuaGlkZSgpOnRoaXMuc2hvdyh2b2lkIDAsZSl9X2lzVG9vbHRpcFZpc2libGUoKXtyZXR1cm4hIXRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fdG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpfV9jcmVhdGVPdmVybGF5KGUpe2lmKHRoaXMuX292ZXJsYXlSZWYpe2xldCBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneTtpZigoIXRoaXMucG9zaXRpb25BdE9yaWdpbnx8IWUpJiZvLl9vcmlnaW4gaW5zdGFuY2VvZiBiZSlyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZjt0aGlzLl9kZXRhY2goKX1sZXQgaT10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0aGlzLl9lbGVtZW50UmVmKSxyPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMucG9zaXRpb25BdE9yaWdpbiYmZXx8dGhpcy5fZWxlbWVudFJlZikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKGAuJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcGApLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhWaWV3cG9ydE1hcmdpbih0aGlzLl92aWV3cG9ydE1hcmdpbikud2l0aFNjcm9sbGFibGVDb250YWluZXJzKGkpO3JldHVybiByLnBvc2l0aW9uQ2hhbmdlcy5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShvPT57dGhpcy5fdXBkYXRlQ3VycmVudFBvc2l0aW9uQ2xhc3Moby5jb25uZWN0aW9uUGFpciksdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZvLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcy5pc092ZXJsYXlDbGlwcGVkJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCkmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuaGlkZSgwKSl9KSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHtkaXJlY3Rpb246dGhpcy5fZGlyLHBvc2l0aW9uU3RyYXRlZ3k6cixwYW5lbENsYXNzOmAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke3puZX1gLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCl9KSx0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2RldGFjaCgpKSx0aGlzLl9vdmVybGF5UmVmLm91dHNpZGVQb2ludGVyRXZlbnRzKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpKSx0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShvPT57dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpJiYyNz09PW8ua2V5Q29kZSYmIXlyKG8pJiYoby5wcmV2ZW50RGVmYXVsdCgpLG8uc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKSl9KSx0aGlzLl9kZWZhdWx0T3B0aW9ucz8uZGlzYWJsZVRvb2x0aXBJbnRlcmFjdGl2aXR5JiZ0aGlzLl9vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoYCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LXRvb2x0aXAtcGFuZWwtbm9uLWludGVyYWN0aXZlYCksdGhpcy5fb3ZlcmxheVJlZn1fZGV0YWNoKCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1udWxsfV91cGRhdGVQb3NpdGlvbihlKXtsZXQgaT1lLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kscj10aGlzLl9nZXRPcmlnaW4oKSxvPXRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpO2kud2l0aFBvc2l0aW9ucyhbdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLm1haW4sLi4uby5tYWlufSksdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLmZhbGxiYWNrLC4uLm8uZmFsbGJhY2t9KV0pfV9hZGRPZmZzZXQoZSl7cmV0dXJuIGV9X2dldE9yaWdpbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aXx8ImJlbG93Ij09aT9yPXtvcmlnaW5YOiJjZW50ZXIiLG9yaWdpblk6ImFib3ZlIj09aT8idG9wIjoiYm90dG9tIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e29yaWdpblg6ImVuZCIsb3JpZ2luWToiY2VudGVyIn0pO2xldHt4Om8seTphfT10aGlzLl9pbnZlcnRQb3NpdGlvbihyLm9yaWdpblgsci5vcmlnaW5ZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvcmlnaW5YOm8sb3JpZ2luWTphfX19X2dldE92ZXJsYXlQb3NpdGlvbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToiYm90dG9tIn06ImJlbG93Ij09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToidG9wIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e292ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImNlbnRlciJ9KTtsZXR7eDpvLHk6YX09dGhpcy5faW52ZXJ0UG9zaXRpb24oci5vdmVybGF5WCxyLm92ZXJsYXlZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvdmVybGF5WDpvLG92ZXJsYXlZOmF9fX1fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UubWVzc2FnZT10aGlzLm1lc3NhZ2UsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSx0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHp0KDEpLG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpfV9zZXRUb29sdGlwQ2xhc3MoZSl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLnRvb2x0aXBDbGFzcz1lLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbWFya0ZvckNoZWNrKCkpfV9pbnZlcnRQb3NpdGlvbihlLGkpe3JldHVybiJhYm92ZSI9PT10aGlzLnBvc2l0aW9ufHwiYmVsb3ciPT09dGhpcy5wb3NpdGlvbj8idG9wIj09PWk/aT0iYm90dG9tIjoiYm90dG9tIj09PWkmJihpPSJ0b3AiKToiZW5kIj09PWU/ZT0ic3RhcnQiOiJzdGFydCI9PT1lJiYoZT0iZW5kIikse3g6ZSx5Oml9fV91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhlKXtsZXQgYSx7b3ZlcmxheVk6aSxvcmlnaW5YOnIsb3JpZ2luWTpvfT1lO2lmKGE9ImNlbnRlciI9PT1pP3RoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/ImVuZCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJzdGFydCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJib3R0b20iPT09aSYmInRvcCI9PT1vPyJhYm92ZSI6ImJlbG93IixhIT09dGhpcy5fY3VycmVudFBvc2l0aW9uKXtsZXQgcz10aGlzLl9vdmVybGF5UmVmO2lmKHMpe2xldCBsPWAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke3puZX0tYDtzLnJlbW92ZVBhbmVsQ2xhc3MobCt0aGlzLl9jdXJyZW50UG9zaXRpb24pLHMuYWRkUGFuZWxDbGFzcyhsK2EpfXRoaXMuX2N1cnJlbnRQb3NpdGlvbj1hfX1fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpe3RoaXMuX2Rpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHwhdGhpcy5fdmlld0luaXRpYWxpemVkfHx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aHx8KHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpP3RoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaChbIm1vdXNlZW50ZXIiLGU9PntsZXQgaTt0aGlzLl9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKSx2b2lkIDAhPT1lLngmJnZvaWQgMCE9PWUueSYmKGk9ZSksdGhpcy5zaG93KHZvaWQgMCxpKX1dKToib2ZmIiE9PXRoaXMudG91Y2hHZXN0dXJlcyYmKHRoaXMuX2Rpc2FibGVOYXRpdmVHZXN0dXJlc0lmTmVjZXNzYXJ5KCksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFsidG91Y2hzdGFydCIsZT0+e2xldCBpPWUudGFyZ2V0VG91Y2hlcz8uWzBdLHI9aT97eDppLmNsaWVudFgseTppLmNsaWVudFl9OnZvaWQgMDt0aGlzLl9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKSxjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpLHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuc2hvdyh2b2lkIDAsciksNTAwKX1dKSksdGhpcy5fYWRkTGlzdGVuZXJzKHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMpKX1fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCl7aWYodGhpcy5fcG9pbnRlckV4aXRFdmVudHNJbml0aWFsaXplZClyZXR1cm47dGhpcy5fcG9pbnRlckV4aXRFdmVudHNJbml0aWFsaXplZD0hMDtsZXQgZT1bXTtpZih0aGlzLl9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKSllLnB1c2goWyJtb3VzZWxlYXZlIixpPT57bGV0IHI9aS5yZWxhdGVkVGFyZ2V0Oyghcnx8IXRoaXMuX292ZXJsYXlSZWY/Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKHIpKSYmdGhpcy5oaWRlKCl9XSxbIndoZWVsIixpPT50aGlzLl93aGVlbExpc3RlbmVyKGkpXSk7ZWxzZSBpZigib2ZmIiE9PXRoaXMudG91Y2hHZXN0dXJlcyl7dGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKTtsZXQgaT0oKT0+e2NsZWFyVGltZW91dCh0aGlzLl90b3VjaHN0YXJ0VGltZW91dCksdGhpcy5oaWRlKHRoaXMuX2RlZmF1bHRPcHRpb25zLnRvdWNoZW5kSGlkZURlbGF5KX07ZS5wdXNoKFsidG91Y2hlbmQiLGldLFsidG91Y2hjYW5jZWwiLGldKX10aGlzLl9hZGRMaXN0ZW5lcnMoZSksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKC4uLmUpfV9hZGRMaXN0ZW5lcnMoZSl7ZS5mb3JFYWNoKChbaSxyXSk9Pnt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihpLHIsVW5lKX0pfV9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKXtyZXR1cm4hdGhpcy5fcGxhdGZvcm0uSU9TJiYhdGhpcy5fcGxhdGZvcm0uQU5EUk9JRH1fd2hlZWxMaXN0ZW5lcihlKXtpZih0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpe2xldCBpPXRoaXMuX2RvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLGUuY2xpZW50WSkscj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aSE9PXImJiFyLmNvbnRhaW5zKGkpJiZ0aGlzLmhpZGUoKX19X2Rpc2FibGVOYXRpdmVHZXN0dXJlc0lmTmVjZXNzYXJ5KCl7bGV0IGU9dGhpcy50b3VjaEdlc3R1cmVzO2lmKCJvZmYiIT09ZSl7bGV0IGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHI9aS5zdHlsZTsoIm9uIj09PWV8fCJJTlBVVCIhPT1pLm5vZGVOYW1lJiYiVEVYVEFSRUEiIT09aS5ub2RlTmFtZSkmJihyLnVzZXJTZWxlY3Q9ci5tc1VzZXJTZWxlY3Q9ci53ZWJraXRVc2VyU2VsZWN0PXIuTW96VXNlclNlbGVjdD0ibm9uZSIpLCgib24iPT09ZXx8IWkuZHJhZ2dhYmxlKSYmKHIud2Via2l0VXNlckRyYWc9Im5vbmUiKSxyLnRvdWNoQWN0aW9uPSJub25lIixyLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yPSJ0cmFuc3BhcmVudCJ9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7X2woKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixpbnB1dHM6e3Bvc2l0aW9uOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwicG9zaXRpb24iXSxwb3NpdGlvbkF0T3JpZ2luOlsibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJwb3NpdGlvbkF0T3JpZ2luIl0sZGlzYWJsZWQ6WyJtYXRUb29sdGlwRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHNob3dEZWxheTpbIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJzaG93RGVsYXkiXSxoaWRlRGVsYXk6WyJtYXRUb29sdGlwSGlkZURlbGF5IiwiaGlkZURlbGF5Il0sdG91Y2hHZXN0dXJlczpbIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwidG91Y2hHZXN0dXJlcyJdLG1lc3NhZ2U6WyJtYXRUb29sdGlwIiwibWVzc2FnZSJdLHRvb2x0aXBDbGFzczpbIm1hdFRvb2x0aXBDbGFzcyIsInRvb2x0aXBDbGFzcyJdfX0pLG59KSgpLHFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITEsdGhpcy5faXNWaXNpYmxlPSExLHRoaXMuX29uSGlkZT1uZXcgQWUsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSJOb29wQW5pbWF0aW9ucyI9PT1pfXNob3coZSl7Y2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX3Nob3dUaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX3RvZ2dsZVZpc2liaWxpdHkoITApLHRoaXMuX3Nob3dUaW1lb3V0SWQ9dm9pZCAwfSxlKX1oaWRlKGUpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSx0aGlzLl9oaWRlVGltZW91dElkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVWaXNpYmlsaXR5KCExKSx0aGlzLl9oaWRlVGltZW91dElkPXZvaWQgMH0sZSl9YWZ0ZXJIaWRkZW4oKXtyZXR1cm4gdGhpcy5fb25IaWRlfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl9pc1Zpc2libGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX29uSGlkZS5jb21wbGV0ZSgpLHRoaXMuX3RyaWdnZXJFbGVtZW50PW51bGx9X2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbiYmdGhpcy5oaWRlKDApfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1faGFuZGxlTW91c2VMZWF2ZSh7cmVsYXRlZFRhcmdldDplfSl7KCFlfHwhdGhpcy5fdHJpZ2dlckVsZW1lbnQuY29udGFpbnMoZSkpJiYodGhpcy5pc1Zpc2libGUoKT90aGlzLmhpZGUodGhpcy5fbW91c2VMZWF2ZUhpZGVEZWxheSk6dGhpcy5fZmluYWxpemVBbmltYXRpb24oITEpKX1fb25TaG93KCl7fV9oYW5kbGVBbmltYXRpb25FbmQoe2FuaW1hdGlvbk5hbWU6ZX0peyhlPT09dGhpcy5fc2hvd0FuaW1hdGlvbnx8ZT09PXRoaXMuX2hpZGVBbmltYXRpb24pJiZ0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlPT09dGhpcy5fc2hvd0FuaW1hdGlvbil9X2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9zaG93VGltZW91dElkPXRoaXMuX2hpZGVUaW1lb3V0SWQ9dm9pZCAwfV9maW5hbGl6ZUFuaW1hdGlvbihlKXtlP3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMDp0aGlzLmlzVmlzaWJsZSgpfHx0aGlzLl9vbkhpZGUubmV4dCgpfV90b2dnbGVWaXNpYmlsaXR5KGUpe2xldCBpPXRoaXMuX3Rvb2x0aXAubmF0aXZlRWxlbWVudCxyPXRoaXMuX3Nob3dBbmltYXRpb24sbz10aGlzLl9oaWRlQW5pbWF0aW9uO2lmKGkuY2xhc3NMaXN0LnJlbW92ZShlP286ciksaS5jbGFzc0xpc3QuYWRkKGU/cjpvKSx0aGlzLl9pc1Zpc2libGU9ZSxlJiYhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSl7bGV0IGE9Z2V0Q29tcHV0ZWRTdHlsZShpKTsoIjBzIj09PWEuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLWR1cmF0aW9uIil8fCJub25lIj09PWEuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLW5hbWUiKSkmJih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ITApfWUmJnRoaXMuX29uU2hvdygpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmKGkuY2xhc3NMaXN0LmFkZCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiKSx0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoRnQpLEMoZGksOCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpufSksbn0pKCksS1ZlPShqaSgic3RhdGUiLFtKbigiaW5pdGlhbCwgdm9pZCwgaGlkZGVuIixCdCh7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMC44KSJ9KSksSm4oInZpc2libGUiLEJ0KHt0cmFuc2Zvcm06InNjYWxlKDEpIn0pKSxXbigiKiA9PiB2aXNpYmxlIixLbigiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksV24oIiogPT4gaGlkZGVuIixLbigiNzVtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKSIpKV0pLFsidG9vbHRpcCJdKSxZbmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFduZXtjb25zdHJ1Y3RvcihlLGkscixvLGEscyxsLGMsZCx1LHAsZil7c3VwZXIoZSxpLHIsbyxhLHMsbCxjLGQsdSxwLGYpLHRoaXMuX3Rvb2x0aXBDb21wb25lbnQ9SlZlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE9pKSxDKGJlKSxDKFJmKSxDKFpuKSxDKGF0KSxDKCRuKSxDKEgxKSxDKGxyKSxDKCRWKSxDKEhpLDgpLEMoR25lLDgpLEMoa3QpKX0sbi5cdTAyNzVkaXI9eGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0VG9vbHRpcCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC10b29sdGlwLXRyaWdnZXIiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXSxmZWF0dXJlczpbTGVdfSksbn0pKCksSlZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBxbmV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsciksdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPWksdGhpcy5faXNIYW5kc2V0PXRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKCIobWF4LXdpZHRoOiA1OTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWF4LXdpZHRoOiA5NTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIpLHRoaXMuX3Nob3dBbmltYXRpb249Im1hdC10b29sdGlwLXNob3ciLHRoaXMuX2hpZGVBbmltYXRpb249Im1hdC10b29sdGlwLWhpZGUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEZ0KSxDKE91KSxDKGRpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbHRpcC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZZZShLVmUsNyksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS5fdG9vbHRpcD1yLmZpcnN0KX19LGhvc3RBdHRyczpbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZEKCJtb3VzZWxlYXZlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlTW91c2VMZWF2ZShvKX0pLDImZSYmTXQoInpvb20iLGkuaXNWaXNpYmxlKCk/MTpudWxsKX0sZmVhdHVyZXM6W0xlXSxkZWNsczo0LHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtdG9vbHRpcCIsMywibmdDbGFzcyIsImFuaW1hdGlvbmVuZCJdLFsidG9vbHRpcCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwLDEpLEQoImFuaW1hdGlvbmVuZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUFuaW1hdGlvbkVuZChvKX0pLEcoMiwiYXN5bmMiKSxUKDMpLGcoKSksMiZlKXtsZXQgcjtRZSgibWF0LXRvb2x0aXAtaGFuZHNldCIsbnVsbD09KHI9VygyLDQsaS5faXNIYW5kc2V0KSk/bnVsbDpyLm1hdGNoZXMpLF8oIm5nQ2xhc3MiLGkudG9vbHRpcENsYXNzKSxiKDMpLHV0KGkubWVzc2FnZSl9fSxkZXBlbmRlbmNpZXM6W2JuLGx0XSxzdHlsZXM6WyIubWF0LXRvb2x0aXB7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjRweDttYXJnaW46MTRweDttYXgtd2lkdGg6MjUwcHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0cmFuc2Zvcm06c2NhbGUoMCl9Lm1hdC10b29sdGlwLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle2FuaW1hdGlvbjpub25lO3RyYW5zZm9ybTpzY2FsZSgxKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbHRpcHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2x0aXAtaGFuZHNldHttYXJnaW46MjRweDtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHh9Lm1hdC10b29sdGlwLXBhbmVsLW5vbi1pbnRlcmFjdGl2ZXtwb2ludGVyLWV2ZW50czpub25lfUBrZXlmcmFtZXMgbWF0LXRvb2x0aXAtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDApfTUwJXtvcGFjaXR5Oi41O3RyYW5zZm9ybTpzY2FsZSgwLjk5KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgbWF0LXRvb2x0aXAtaGlkZXswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm1hdC10b29sdGlwLXNob3d7YW5pbWF0aW9uOm1hdC10b29sdGlwLXNob3cgMjAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgZm9yd2FyZHN9Lm1hdC10b29sdGlwLWhpZGV7YW5pbWF0aW9uOm1hdC10b29sdGlwLWhpZGUgMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgZm9yd2FyZHN9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtwcm92aWRlcnM6W2puZV0saW1wb3J0czpbRGYsVGUsTHIsUXQsUXQsUmNdfSksbn0pKCksWGQ9KGppKCJzdGF0ZSIsW0puKCJpbml0aWFsLCB2b2lkLCBoaWRkZW4iLEJ0KHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwKSJ9KSksSm4oInZpc2libGUiLEJ0KHt0cmFuc2Zvcm06InNjYWxlKDEpIn0pKSxXbigiKiA9PiB2aXNpYmxlIixLbigiMjAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLHJmKFtCdCh7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMCkiLG9mZnNldDowfSksQnQoe29wYWNpdHk6LjUsdHJhbnNmb3JtOiJzY2FsZSgwLjk5KSIsb2Zmc2V0Oi41fSksQnQoe29wYWNpdHk6MSx0cmFuc2Zvcm06InNjYWxlKDEpIixvZmZzZXQ6MX0pXSkpKSxXbigiKiA9PiBoaWRkZW4iLEtuKCIxMDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsQnQoe29wYWNpdHk6MH0pKSldKSwoKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5jaGFuZ2VzPW5ldyBBZSx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJJdGVtcyBwZXIgcGFnZToiLHRoaXMubmV4dFBhZ2VMYWJlbD0iTmV4dCBwYWdlIix0aGlzLnByZXZpb3VzUGFnZUxhYmVsPSJQcmV2aW91cyBwYWdlIix0aGlzLmZpcnN0UGFnZUxhYmVsPSJGaXJzdCBwYWdlIix0aGlzLmxhc3RQYWdlTGFiZWw9Ikxhc3QgcGFnZSIsdGhpcy5nZXRSYW5nZUxhYmVsPShlLGkscik9PntpZigwPT1yfHwwPT1pKXJldHVybmAwIG9mICR7cn1gO2xldCBvPWUqaTtyZXR1cm5gJHtvKzF9IFx1MjAxMyAke288KHI9TWF0aC5tYXgociwwKSk/TWF0aC5taW4obytpLHIpOm8raX0gb2YgJHtyfWB9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSksZTQ9e3Byb3ZpZGU6WGQsZGVwczpbW25ldyBBYSxuZXcgaWQsWGRdXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybiBufHxuZXcgWGR9fSx0NGU9KG5ldyBpZSgiTUFUX1BBR0lOQVRPUl9ERUZBVUxUX09QVElPTlMiKSxLcihqYihjbGFzc3t9KSkpLHQ0PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB0NGV7Z2V0IHBhZ2VJbmRleCgpe3JldHVybiB0aGlzLl9wYWdlSW5kZXh9c2V0IHBhZ2VJbmRleChlKXt0aGlzLl9wYWdlSW5kZXg9TWF0aC5tYXgoRGkoZSksMCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sZW5ndGh9c2V0IGxlbmd0aChlKXt0aGlzLl9sZW5ndGg9RGkoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplfXNldCBwYWdlU2l6ZShlKXt0aGlzLl9wYWdlU2l6ZT1NYXRoLm1heChEaShlKSwwKSx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKX1nZXQgcGFnZVNpemVPcHRpb25zKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9uc31zZXQgcGFnZVNpemVPcHRpb25zKGUpe3RoaXMuX3BhZ2VTaXplT3B0aW9ucz0oZXx8W10pLm1hcChpPT5EaShpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZShlKXt0aGlzLl9oaWRlUGFnZVNpemU9VXQoZSl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyhlKXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1VdChlKX1jb25zdHJ1Y3RvcihlLGkscil7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYWdlSW5kZXg9MCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9W10sdGhpcy5faGlkZVBhZ2VTaXplPSExLHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zPSExLHRoaXMuc2VsZWN0Q29uZmlnPXt9LHRoaXMucGFnZT1uZXcgTCx0aGlzLl9pbnRsQ2hhbmdlcz1lLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSkscil7bGV0e3BhZ2VTaXplOm8scGFnZVNpemVPcHRpb25zOmEsaGlkZVBhZ2VTaXplOnMsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6bH09cjtudWxsIT1vJiYodGhpcy5fcGFnZVNpemU9byksbnVsbCE9YSYmKHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1hKSxudWxsIT1zJiYodGhpcy5faGlkZVBhZ2VTaXplPXMpLG51bGwhPWwmJih0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1sKX19bmdPbkluaXQoKXt0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKSx0aGlzLl9tYXJrSW5pdGlhbGl6ZWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2ludGxDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9bmV4dFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD10aGlzLnBhZ2VJbmRleCsxLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9cHJldmlvdXNQYWdlKCl7aWYoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpcmV0dXJuO2xldCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMucGFnZUluZGV4LTEsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1maXJzdFBhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9MCx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWxhc3RQYWdlKCl7aWYoIXRoaXMuaGFzTmV4dFBhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9dGhpcy5nZXROdW1iZXJPZlBhZ2VzKCktMSx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWhhc1ByZXZpb3VzUGFnZSgpe3JldHVybiB0aGlzLnBhZ2VJbmRleD49MSYmMCE9dGhpcy5wYWdlU2l6ZX1oYXNOZXh0UGFnZSgpe2xldCBlPXRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpLTE7cmV0dXJuIHRoaXMucGFnZUluZGV4PGUmJjAhPXRoaXMucGFnZVNpemV9Z2V0TnVtYmVyT2ZQYWdlcygpe3JldHVybiB0aGlzLnBhZ2VTaXplP01hdGguY2VpbCh0aGlzLmxlbmd0aC90aGlzLnBhZ2VTaXplKTowfV9jaGFuZ2VQYWdlU2l6ZShlKXtsZXQgcj10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD1NYXRoLmZsb29yKHRoaXMucGFnZUluZGV4KnRoaXMucGFnZVNpemUvZSl8fDAsdGhpcy5wYWdlU2l6ZT1lLHRoaXMuX2VtaXRQYWdlRXZlbnQocil9X25leHRCdXR0b25zRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMuaGFzTmV4dFBhZ2UoKX1fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMuaGFzUHJldmlvdXNQYWdlKCl9X3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpeyF0aGlzLl9pbml0aWFsaXplZHx8KHRoaXMucGFnZVNpemV8fCh0aGlzLl9wYWdlU2l6ZT0wIT10aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGg/dGhpcy5wYWdlU2l6ZU9wdGlvbnNbMF06NTApLHRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucz10aGlzLnBhZ2VTaXplT3B0aW9ucy5zbGljZSgpLC0xPT09dGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLmluZGV4T2YodGhpcy5wYWdlU2l6ZSkmJnRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5wdXNoKHRoaXMucGFnZVNpemUpLHRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5zb3J0KChlLGkpPT5lLWkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZW1pdFBhZ2VFdmVudChlKXt0aGlzLnBhZ2UuZW1pdCh7cHJldmlvdXNQYWdlSW5kZXg6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxsZW5ndGg6dGhpcy5sZW5ndGh9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe19sKCl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4saW5wdXRzOntjb2xvcjoiY29sb3IiLHBhZ2VJbmRleDoicGFnZUluZGV4IixsZW5ndGg6Imxlbmd0aCIscGFnZVNpemU6InBhZ2VTaXplIixwYWdlU2l6ZU9wdGlvbnM6InBhZ2VTaXplT3B0aW9ucyIsaGlkZVBhZ2VTaXplOiJoaWRlUGFnZVNpemUiLHNob3dGaXJzdExhc3RCdXR0b25zOiJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsc2VsZWN0Q29uZmlnOiJzZWxlY3RDb25maWcifSxvdXRwdXRzOntwYWdlOiJwYWdlIn0sZmVhdHVyZXM6W0xlXX0pLG59KSgpO2Z1bmN0aW9uIGk0ZShuLHQpe2lmKDEmbiYmKGgoMCwibWF0LW9wdGlvbiIsMTkpLFQoMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O18oInZhbHVlIixlKSxiKDEpLHplKCIgIixlLCIgIil9fWZ1bmN0aW9uIHI0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1mb3JtLWZpZWxkIiwxNikoMSwibWF0LXNlbGVjdCIsMTcpLEQoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLl9jaGFuZ2VQYWdlU2l6ZShyLnZhbHVlKSl9KSxTKDIsaTRlLDIsMiwibWF0LW9wdGlvbiIsMTgpLGcoKSgpfWlmKDImbil7bGV0IGU9dygyKTtfKCJhcHBlYXJhbmNlIixlLl9mb3JtRmllbGRBcHBlYXJhbmNlKSgiY29sb3IiLGUuY29sb3IpLGIoMSksXygidmFsdWUiLGUucGFnZVNpemUpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCkoInBhbmVsQ2xhc3MiLGUuc2VsZWN0Q29uZmlnLnBhbmVsQ2xhc3N8fCIiKSgiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsZS5zZWxlY3RDb25maWcuZGlzYWJsZU9wdGlvbkNlbnRlcmluZykoImFyaWEtbGFiZWwiLGUuX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwpLGIoMSksXygibmdGb3JPZiIsZS5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zKX19ZnVuY3Rpb24gbzRlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDIwKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpO2IoMSksdXQoZS5wYWdlU2l6ZSl9fWZ1bmN0aW9uIGE0ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxMikoMSwiZGl2IiwxMyksVCgyKSxnKCksUygzLHI0ZSwzLDgsIm1hdC1mb3JtLWZpZWxkIiwxNCksUyg0LG80ZSwyLDEsImRpdiIsMTUpLGcoKSksMiZuKXtsZXQgZT13KCk7YigyKSx6ZSgiICIsZS5faW50bC5pdGVtc1BlclBhZ2VMYWJlbCwiICIpLGIoMSksXygibmdJZiIsZS5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLmxlbmd0aD4xKSxiKDEpLF8oIm5nSWYiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg8PTEpfX1mdW5jdGlvbiBzNGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDIxKSxEKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5maXJzdFBhZ2UoKSl9KSxUbigpLGgoMSwic3ZnIiw3KSxQKDIsInBhdGgiLDIyKSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtfKCJtYXRUb29sdGlwIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixlLl9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSgibWF0VG9vbHRpcFBvc2l0aW9uIiwiYWJvdmUiKSgiZGlzYWJsZWQiLGUuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpLFBlKCJhcmlhLWxhYmVsIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKX19ZnVuY3Rpb24gbDRlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO1RuKCksT28oKSxoKDAsImJ1dHRvbiIsMjMpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmxhc3RQYWdlKCkpfSksVG4oKSxoKDEsInN2ZyIsNyksUCgyLCJwYXRoIiwyNCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7XygibWF0VG9vbHRpcCIsZS5faW50bC5sYXN0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixlLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsZS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSxQZSgiYXJpYS1sYWJlbCIsZS5faW50bC5sYXN0UGFnZUxhYmVsKX19dmFyIGM0ZT1uZXcgaWUoIk1BVF9MRUdBQ1lfUEFHSU5BVE9SX0RFRkFVTFRfT1BUSU9OUyIpLHhBPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB0NHtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpLHImJm51bGwhPXIuZm9ybUZpZWxkQXBwZWFyYW5jZSYmKHRoaXMuX2Zvcm1GaWVsZEFwcGVhcmFuY2U9ci5mb3JtRmllbGRBcHBlYXJhbmNlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhYZCksQyhGdCksQyhjNGUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wYWdpbmF0b3IiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyb3VwIiwxLCJtYXQtcGFnaW5hdG9yIl0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFBhZ2luYXRvciJdLGZlYXR1cmVzOltMZV0sZGVjbHM6MTQsdmFyczoxNCxjb25zdHM6W1sxLCJtYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbMSwibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtcGFnaW5hdG9yLWljb24iXSxbImQiLCJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIiwicGFuZWxDbGFzcyIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJhcmlhLWxhYmVsIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwibWF0LXBhZ2luYXRvci1wYWdlLXNpemUtdmFsdWUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1maXJzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApKDEsImRpdiIsMSksUygyLGE0ZSw1LDMsImRpdiIsMiksaCgzLCJkaXYiLDMpKDQsImRpdiIsNCksVCg1KSxnKCksUyg2LHM0ZSwzLDUsImJ1dHRvbiIsNSksaCg3LCJidXR0b24iLDYpLEQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnByZXZpb3VzUGFnZSgpfSksVG4oKSxoKDgsInN2ZyIsNyksUCg5LCJwYXRoIiw4KSxnKCkoKSxPbygpLGgoMTAsImJ1dHRvbiIsOSksRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dFBhZ2UoKX0pLFRuKCksaCgxMSwic3ZnIiw3KSxQKDEyLCJwYXRoIiwxMCksZygpKCksUygxMyxsNGUsMyw1LCJidXR0b24iLDExKSxnKCkoKSgpKSwyJmUmJihiKDIpLF8oIm5nSWYiLCFpLmhpZGVQYWdlU2l6ZSksYigzKSx6ZSgiICIsaS5faW50bC5nZXRSYW5nZUxhYmVsKGkucGFnZUluZGV4LGkucGFnZVNpemUsaS5sZW5ndGgpLCIgIiksYigxKSxfKCJuZ0lmIixpLnNob3dGaXJzdExhc3RCdXR0b25zKSxiKDEpLF8oIm1hdFRvb2x0aXAiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGkuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksUGUoImFyaWEtbGFiZWwiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLGIoMyksXygibWF0VG9vbHRpcCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixpLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSxQZSgiYXJpYS1sYWJlbCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSxiKDMpLF8oIm5nSWYiLGkuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMpKX0sZGVwZW5kZW5jaWVzOltkbixGZSxGbixZcyxHdSxIYSxZbmVdLHN0eWxlczpbIi5tYXQtcGFnaW5hdG9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleH0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzowIDhweDtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlO3dpZHRoOjEwMCV9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXple2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbHttYXJnaW46MCA0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdHttYXJnaW46NnB4IDRweCAwIDRweDt3aWR0aDo1NnB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5le3dpZHRoOjY0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGx7d2lkdGg6NjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbHttYXJnaW46MCAzMnB4IDAgMjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1hY3Rpb25ze2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1wYWdpbmF0b3ItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyOHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcGFnaW5hdG9yLWljb257ZmlsbDpDYW52YXNUZXh0fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFpuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7cHJvdmlkZXJzOltlNF0saW1wb3J0czpbVGUsZmksWHMsWG5lLFF0XX0pLG59KSgpLHU0ZT1bIm1hdC1zb3J0LWhlYWRlciIsIiJdO2Z1bmN0aW9uIHA0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMyksRCgiQGFycm93UG9zaXRpb24uc3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfSkoIkBhcnJvd1Bvc2l0aW9uLmRvbmUiLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEpfSksUCgxLCJkaXYiLDQpLGgoMiwiZGl2Iiw1KSxQKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJkaXYiLDgpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO18oIkBhcnJvd09wYWNpdHkiLGUuX2dldEFycm93Vmlld1N0YXRlKCkpKCJAYXJyb3dQb3NpdGlvbiIsZS5fZ2V0QXJyb3dWaWV3U3RhdGUoKSkoIkBhbGxvd0NoaWxkcmVuIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLGIoMiksXygiQGluZGljYXRvciIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKSxiKDEpLF8oIkBsZWZ0UG9pbnRlciIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKSxiKDEpLF8oIkByaWdodFBvaW50ZXIiLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSl9fXZhciBmNGU9WyIqIl0sS25lPW5ldyBpZSgiTUFUX1NPUlRfREVGQVVMVF9PUFRJT05TIiksbTRlPWpiKEtyKGNsYXNze30pKSxyQz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbTRle2dldCBkaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9ufXNldCBkaXJlY3Rpb24oZSl7dGhpcy5fZGlyZWN0aW9uPWV9Z2V0IGRpc2FibGVDbGVhcigpe3JldHVybiB0aGlzLl9kaXNhYmxlQ2xlYXJ9c2V0IGRpc2FibGVDbGVhcihlKXt0aGlzLl9kaXNhYmxlQ2xlYXI9VXQoZSl9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1lLHRoaXMuc29ydGFibGVzPW5ldyBNYXAsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBBZSx0aGlzLnN0YXJ0PSJhc2MiLHRoaXMuX2RpcmVjdGlvbj0iIix0aGlzLnNvcnRDaGFuZ2U9bmV3IEx9cmVnaXN0ZXIoZSl7dGhpcy5zb3J0YWJsZXMuc2V0KGUuaWQsZSl9ZGVyZWdpc3RlcihlKXt0aGlzLnNvcnRhYmxlcy5kZWxldGUoZS5pZCl9c29ydChlKXt0aGlzLmFjdGl2ZSE9ZS5pZD8odGhpcy5hY3RpdmU9ZS5pZCx0aGlzLmRpcmVjdGlvbj1lLnN0YXJ0P2Uuc3RhcnQ6dGhpcy5zdGFydCk6dGhpcy5kaXJlY3Rpb249dGhpcy5nZXROZXh0U29ydERpcmVjdGlvbihlKSx0aGlzLnNvcnRDaGFuZ2UuZW1pdCh7YWN0aXZlOnRoaXMuYWN0aXZlLGRpcmVjdGlvbjp0aGlzLmRpcmVjdGlvbn0pfWdldE5leHRTb3J0RGlyZWN0aW9uKGUpe2lmKCFlKXJldHVybiIiO2xldCByPWZ1bmN0aW9uKG4sdCl7bGV0IGU9WyJhc2MiLCJkZXNjIl07cmV0dXJuImRlc2MiPT1uJiZlLnJldmVyc2UoKSx0fHxlLnB1c2goIiIpLGV9KGUuc3RhcnR8fHRoaXMuc3RhcnQsZT8uZGlzYWJsZUNsZWFyPz90aGlzLmRpc2FibGVDbGVhcj8/ISF0aGlzLl9kZWZhdWx0T3B0aW9ucz8uZGlzYWJsZUNsZWFyKSxvPXIuaW5kZXhPZih0aGlzLmRpcmVjdGlvbikrMTtyZXR1cm4gbz49ci5sZW5ndGgmJihvPTApLHJbb119bmdPbkluaXQoKXt0aGlzLl9tYXJrSW5pdGlhbGl6ZWQoKX1uZ09uQ2hhbmdlcygpe3RoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhLbmUsOCkpfSxuLlx1MDI3NWRpcj14ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRTb3J0IiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXNvcnQiXSxpbnB1dHM6e2Rpc2FibGVkOlsibWF0U29ydERpc2FibGVkIiwiZGlzYWJsZWQiXSxhY3RpdmU6WyJtYXRTb3J0QWN0aXZlIiwiYWN0aXZlIl0sc3RhcnQ6WyJtYXRTb3J0U3RhcnQiLCJzdGFydCJdLGRpcmVjdGlvbjpbIm1hdFNvcnREaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxkaXNhYmxlQ2xlYXI6WyJtYXRTb3J0RGlzYWJsZUNsZWFyIiwiZGlzYWJsZUNsZWFyIl19LG91dHB1dHM6e3NvcnRDaGFuZ2U6Im1hdFNvcnRDaGFuZ2UifSxleHBvcnRBczpbIm1hdFNvcnQiXSxmZWF0dXJlczpbTGUsR3RdfSksbn0pKCksUnA9RTIuRU5URVJJTkcrIiAiK1MyLlNUQU5EQVJEX0NVUlZFLERfPXtpbmRpY2F0b3I6amkoImluZGljYXRvciIsW0puKCJhY3RpdmUtYXNjLCBhc2MiLEJ0KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMHB4KSJ9KSksSm4oImFjdGl2ZS1kZXNjLCBkZXNjIixCdCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDEwcHgpIn0pKSxXbigiYWN0aXZlLWFzYyA8PT4gYWN0aXZlLWRlc2MiLEtuKFJwKSldKSxsZWZ0UG9pbnRlcjpqaSgibGVmdFBvaW50ZXIiLFtKbigiYWN0aXZlLWFzYywgYXNjIixCdCh7dHJhbnNmb3JtOiJyb3RhdGUoLTQ1ZGVnKSJ9KSksSm4oImFjdGl2ZS1kZXNjLCBkZXNjIixCdCh7dHJhbnNmb3JtOiJyb3RhdGUoNDVkZWcpIn0pKSxXbigiYWN0aXZlLWFzYyA8PT4gYWN0aXZlLWRlc2MiLEtuKFJwKSldKSxyaWdodFBvaW50ZXI6amkoInJpZ2h0UG9pbnRlciIsW0puKCJhY3RpdmUtYXNjLCBhc2MiLEJ0KHt0cmFuc2Zvcm06InJvdGF0ZSg0NWRlZykifSkpLEpuKCJhY3RpdmUtZGVzYywgZGVzYyIsQnQoe3RyYW5zZm9ybToicm90YXRlKC00NWRlZykifSkpLFduKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsS24oUnApKV0pLGFycm93T3BhY2l0eTpqaSgiYXJyb3dPcGFjaXR5IixbSm4oImRlc2MtdG8tYWN0aXZlLCBhc2MtdG8tYWN0aXZlLCBhY3RpdmUiLEJ0KHtvcGFjaXR5OjF9KSksSm4oImRlc2MtdG8taGludCwgYXNjLXRvLWhpbnQsIGhpbnQiLEJ0KHtvcGFjaXR5Oi41NH0pKSxKbigiaGludC10by1kZXNjLCBhY3RpdmUtdG8tZGVzYywgZGVzYywgaGludC10by1hc2MsIGFjdGl2ZS10by1hc2MsIGFzYywgdm9pZCIsQnQoe29wYWNpdHk6MH0pKSxXbigiKiA9PiBhc2MsICogPT4gZGVzYywgKiA9PiBhY3RpdmUsICogPT4gaGludCwgKiA9PiB2b2lkIixLbigiMG1zIikpLFduKCIqIDw9PiAqIixLbihScCkpXSksYXJyb3dQb3NpdGlvbjpqaSgiYXJyb3dQb3NpdGlvbiIsW1duKCIqID0+IGRlc2MtdG8taGludCwgKiA9PiBkZXNjLXRvLWFjdGl2ZSIsS24oUnAscmYoW0J0KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSksQnQoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KV0pKSksV24oIiogPT4gaGludC10by1kZXNjLCAqID0+IGFjdGl2ZS10by1kZXNjIixLbihScCxyZihbQnQoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSxCdCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSldKSkpLFduKCIqID0+IGFzYy10by1oaW50LCAqID0+IGFzYy10by1hY3RpdmUiLEtuKFJwLHJmKFtCdCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSksQnQoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KV0pKSksV24oIiogPT4gaGludC10by1hc2MsICogPT4gYWN0aXZlLXRvLWFzYyIsS24oUnAscmYoW0J0KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSksQnQoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KV0pKSksSm4oImRlc2MtdG8taGludCwgYXNjLXRvLWhpbnQsIGhpbnQsIGRlc2MtdG8tYWN0aXZlLCBhc2MtdG8tYWN0aXZlLCBhY3RpdmUiLEJ0KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSkpLEpuKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjIixCdCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pKSxKbigiaGludC10by1hc2MsIGFjdGl2ZS10by1hc2MsIGFzYyIsQnQoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgyNSUpIn0pKV0pLGFsbG93Q2hpbGRyZW46amkoImFsbG93Q2hpbGRyZW4iLFtXbigiKiA8PT4gKiIsW2RkKCJAKiIsY2QoKSx7b3B0aW9uYWw6ITB9KV0pXSl9LENBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNoYW5nZXM9bmV3IEFlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxfNGU9e3Byb3ZpZGU6Q0EsZGVwczpbW25ldyBBYSxuZXcgaWQsQ0FdXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybiBufHxuZXcgQ0F9fSx5NGU9S3IoY2xhc3N7fSksSm5lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5NGV7Z2V0IHNvcnRBY3Rpb25EZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLl9zb3J0QWN0aW9uRGVzY3JpcHRpb259c2V0IHNvcnRBY3Rpb25EZXNjcmlwdGlvbihlKXt0aGlzLl91cGRhdGVTb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl9Z2V0IGRpc2FibGVDbGVhcigpe3JldHVybiB0aGlzLl9kaXNhYmxlQ2xlYXJ9c2V0IGRpc2FibGVDbGVhcihlKXt0aGlzLl9kaXNhYmxlQ2xlYXI9VXQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxhLHMsbCxjKXtzdXBlcigpLHRoaXMuX2ludGw9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3NvcnQ9cix0aGlzLl9jb2x1bW5EZWY9byx0aGlzLl9mb2N1c01vbml0b3I9YSx0aGlzLl9lbGVtZW50UmVmPXMsdGhpcy5fYXJpYURlc2NyaWJlcj1sLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExLHRoaXMuX3ZpZXdTdGF0ZT17fSx0aGlzLl9hcnJvd0RpcmVjdGlvbj0iIix0aGlzLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSExLHRoaXMuYXJyb3dQb3NpdGlvbj0iYWZ0ZXIiLHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbj0iU29ydCIsYz8uYXJyb3dQb3NpdGlvbiYmKHRoaXMuYXJyb3dQb3NpdGlvbj1jPy5hcnJvd1Bvc2l0aW9uKSx0aGlzLl9oYW5kbGVTdGF0ZUNoYW5nZXMoKX1uZ09uSW5pdCgpeyF0aGlzLmlkJiZ0aGlzLl9jb2x1bW5EZWYmJih0aGlzLmlkPXRoaXMuX2NvbHVtbkRlZi5uYW1lKSx0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpLHRoaXMuX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZSh7dG9TdGF0ZTp0aGlzLl9pc1NvcnRlZCgpPyJhY3RpdmUiOnRoaXMuX2Fycm93RGlyZWN0aW9ufSksdGhpcy5fc29ydC5yZWdpc3Rlcih0aGlzKSx0aGlzLl9zb3J0QnV0dG9uPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lciIpLHRoaXMuX3VwZGF0ZVNvcnRBY3Rpb25EZXNjcmlwdGlvbih0aGlzLl9zb3J0QWN0aW9uRGVzY3JpcHRpb24pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57bGV0IGk9ISFlO2khPT10aGlzLl9zaG93SW5kaWNhdG9ySGludCYmKHRoaXMuX3NldEluZGljYXRvckhpbnRWaXNpYmxlKGkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX3NvcnQuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9yZXJlbmRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZShlKXt0aGlzLl9pc0Rpc2FibGVkKCkmJmV8fCh0aGlzLl9zaG93SW5kaWNhdG9ySGludD1lLHRoaXMuX2lzU29ydGVkKCl8fCh0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpLHRoaXMuX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZSh0aGlzLl9zaG93SW5kaWNhdG9ySGludD97ZnJvbVN0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9uLHRvU3RhdGU6ImhpbnQifTp7ZnJvbVN0YXRlOiJoaW50Iix0b1N0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9ufSkpKX1fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKGUpe3RoaXMuX3ZpZXdTdGF0ZT1lfHx7fSx0aGlzLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uJiYodGhpcy5fdmlld1N0YXRlPXt0b1N0YXRlOmUudG9TdGF0ZX0pfV90b2dnbGVPbkludGVyYWN0aW9uKCl7dGhpcy5fc29ydC5zb3J0KHRoaXMpLCgiaGludCI9PT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZXx8ImFjdGl2ZSI9PT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZSkmJih0aGlzLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSEwKX1faGFuZGxlQ2xpY2soKXt0aGlzLl9pc0Rpc2FibGVkKCl8fHRoaXMuX3NvcnQuc29ydCh0aGlzKX1faGFuZGxlS2V5ZG93bihlKXshdGhpcy5faXNEaXNhYmxlZCgpJiYoMzI9PT1lLmtleUNvZGV8fDEzPT09ZS5rZXlDb2RlKSYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGVPbkludGVyYWN0aW9uKCkpfV9pc1NvcnRlZCgpe3JldHVybiB0aGlzLl9zb3J0LmFjdGl2ZT09dGhpcy5pZCYmKCJhc2MiPT09dGhpcy5fc29ydC5kaXJlY3Rpb258fCJkZXNjIj09PXRoaXMuX3NvcnQuZGlyZWN0aW9uKX1fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpe3JldHVybmAke3RoaXMuX2lzU29ydGVkKCk/ImFjdGl2ZS0iOiIifSR7dGhpcy5fYXJyb3dEaXJlY3Rpb259YH1fZ2V0QXJyb3dWaWV3U3RhdGUoKXtsZXQgZT10aGlzLl92aWV3U3RhdGUuZnJvbVN0YXRlO3JldHVybihlP2Ake2V9LXRvLWA6IiIpK3RoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfV91cGRhdGVBcnJvd0RpcmVjdGlvbigpe3RoaXMuX2Fycm93RGlyZWN0aW9uPXRoaXMuX2lzU29ydGVkKCk/dGhpcy5fc29ydC5kaXJlY3Rpb246dGhpcy5zdGFydHx8dGhpcy5fc29ydC5zdGFydH1faXNEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9zb3J0LmRpc2FibGVkfHx0aGlzLmRpc2FibGVkfV9nZXRBcmlhU29ydEF0dHJpYnV0ZSgpe3JldHVybiB0aGlzLl9pc1NvcnRlZCgpPyJhc2MiPT10aGlzLl9zb3J0LmRpcmVjdGlvbj8iYXNjZW5kaW5nIjoiZGVzY2VuZGluZyI6Im5vbmUifV9yZW5kZXJBcnJvdygpe3JldHVybiF0aGlzLl9pc0Rpc2FibGVkKCl8fHRoaXMuX2lzU29ydGVkKCl9X3VwZGF0ZVNvcnRBY3Rpb25EZXNjcmlwdGlvbihlKXt0aGlzLl9zb3J0QnV0dG9uJiYodGhpcy5fYXJpYURlc2NyaWJlcj8ucmVtb3ZlRGVzY3JpcHRpb24odGhpcy5fc29ydEJ1dHRvbix0aGlzLl9zb3J0QWN0aW9uRGVzY3JpcHRpb24pLHRoaXMuX2FyaWFEZXNjcmliZXI/LmRlc2NyaWJlKHRoaXMuX3NvcnRCdXR0b24sZSkpLHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbj1lfV9oYW5kbGVTdGF0ZUNoYW5nZXMoKXt0aGlzLl9yZXJlbmRlclN1YnNjcmlwdGlvbj1jbih0aGlzLl9zb3J0LnNvcnRDaGFuZ2UsdGhpcy5fc29ydC5fc3RhdGVDaGFuZ2VzLHRoaXMuX2ludGwuY2hhbmdlcykuc3Vic2NyaWJlKCgpPT57dGhpcy5faXNTb3J0ZWQoKSYmKHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksKCJoaW50Ij09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfHwiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlKSYmKHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApLHRoaXMuX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZSh7ZnJvbVN0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9uLHRvU3RhdGU6ImFjdGl2ZSJ9KSx0aGlzLl9zaG93SW5kaWNhdG9ySGludD0hMSksIXRoaXMuX2lzU29ydGVkKCkmJnRoaXMuX3ZpZXdTdGF0ZSYmImFjdGl2ZSI9PT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZSYmKHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEsdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6ImFjdGl2ZSIsdG9TdGF0ZTp0aGlzLl9hcnJvd0RpcmVjdGlvbn0pKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKENBKSxDKEZ0KSxDKHJDLDgpLEMoIk1BVF9TT1JUX0hFQURFUl9DT0xVTU5fREVGIiw4KSxDKGxyKSxDKGJlKSxDKEgxLDgpLEMoS25lLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtc29ydC1oZWFkZXIiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc29ydC1oZWFkZXIiXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmRCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZUNsaWNrKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoITApfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3NldEluZGljYXRvckhpbnRWaXNpYmxlKCExKX0pLDImZSYmKFBlKCJhcmlhLXNvcnQiLGkuX2dldEFyaWFTb3J0QXR0cmlidXRlKCkpLFFlKCJtYXQtc29ydC1oZWFkZXItZGlzYWJsZWQiLGkuX2lzRGlzYWJsZWQoKSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsaWQ6WyJtYXQtc29ydC1oZWFkZXIiLCJpZCJdLGFycm93UG9zaXRpb246ImFycm93UG9zaXRpb24iLHN0YXJ0OiJzdGFydCIsc29ydEFjdGlvbkRlc2NyaXB0aW9uOiJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLGRpc2FibGVDbGVhcjoiZGlzYWJsZUNsZWFyIn0sZXhwb3J0QXM6WyJtYXRTb3J0SGVhZGVyIl0sZmVhdHVyZXM6W0xlXSxhdHRyczp1NGUsbmdDb250ZW50U2VsZWN0b3JzOmY0ZSxkZWNsczo0LHZhcnM6Nyxjb25zdHM6W1sxLCJtYXQtc29ydC1oZWFkZXItY29udGFpbmVyIiwibWF0LWZvY3VzLWluZGljYXRvciJdLFsxLCJtYXQtc29ydC1oZWFkZXItY29udGVudCJdLFsiY2xhc3MiLCJtYXQtc29ydC1oZWFkZXItYXJyb3ciLDQsIm5nSWYiXSxbMSwibWF0LXNvcnQtaGVhZGVyLWFycm93Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1zdGVtIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1pbmRpY2F0b3IiXSxbMSwibWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodCJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnbigpLGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFh0KDIpLGcoKSxTKDMscDRlLDYsNiwiZGl2IiwyKSxnKCkpLDImZSYmKFFlKCJtYXQtc29ydC1oZWFkZXItc29ydGVkIixpLl9pc1NvcnRlZCgpKSgibWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSIsImJlZm9yZSI9PT1pLmFycm93UG9zaXRpb24pLFBlKCJ0YWJpbmRleCIsaS5faXNEaXNhYmxlZCgpP251bGw6MCkoInJvbGUiLGkuX2lzRGlzYWJsZWQoKT9udWxsOiJidXR0b24iKSxiKDMpLF8oIm5nSWYiLGkuX3JlbmRlckFycm93KCkpKX0sZGVwZW5kZW5jaWVzOltGZV0sc3R5bGVzOlsiLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2N1cnNvcjpwb2ludGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtsZXR0ZXItc3BhY2luZzpub3JtYWw7b3V0bGluZTowfVttYXQtc29ydC1oZWFkZXJdLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc29ydC1oZWFkZXItY29udGFpbmVyLFttYXQtc29ydC1oZWFkZXJdLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXJ7Ym9yZGVyLWJvdHRvbTpzb2xpZCAxcHggY3VycmVudENvbG9yfS5tYXQtc29ydC1oZWFkZXItZGlzYWJsZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXJ7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zb3J0LWhlYWRlci1jb250YWluZXI6OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgMnB4KSAqIC0xKX0ubWF0LXNvcnQtaGVhZGVyLWNvbnRlbnR7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2hlaWdodDoxMnB4O3dpZHRoOjEycHg7bWluLXdpZHRoOjEycHg7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O29wYWNpdHk6MH0ubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDAgMCA2cHh9Lm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyxbZGlyPXJ0bF0gLm1hdC1zb3J0LWhlYWRlci1hcnJvd3ttYXJnaW46MCA2cHggMCAwfS5tYXQtc29ydC1oZWFkZXItc3RlbXtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MTBweDt3aWR0aDoycHg7bWFyZ2luOmF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItc3RlbXt3aWR0aDowO2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLWluZGljYXRvcnt3aWR0aDoxMDAlO2hlaWdodDoycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXttYXJnaW46YXV0bztoZWlnaHQ6MnB4O3dpZHRoOjJweDtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGV7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweDtib3JkZXItbGVmdDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3dpZHRoOjZweDtoZWlnaHQ6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDpzb2xpZCA2cHg7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjpyaWdodDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e3RyYW5zZm9ybS1vcmlnaW46bGVmdDtyaWdodDowfSJdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W0RfLmluZGljYXRvcixEXy5sZWZ0UG9pbnRlcixEXy5yaWdodFBvaW50ZXIsRF8uYXJyb3dPcGFjaXR5LERfLmFycm93UG9zaXRpb24sRF8uYWxsb3dDaGlsZHJlbl19LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksJG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtwcm92aWRlcnM6W180ZV0saW1wb3J0czpbVGUsUXRdfSksbn0pKCk7ZnVuY3Rpb24gbzQobil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntnZXQgc3RpY2t5KCl7cmV0dXJuIHRoaXMuX3N0aWNreX1zZXQgc3RpY2t5KHQpe2xldCBlPXRoaXMuX3N0aWNreTt0aGlzLl9zdGlja3k9VXQodCksdGhpcy5faGFzU3RpY2t5Q2hhbmdlZD1lIT09dGhpcy5fc3RpY2t5fWhhc1N0aWNreUNoYW5nZWQoKXtsZXQgdD10aGlzLl9oYXNTdGlja3lDaGFuZ2VkO3JldHVybiB0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExLHR9cmVzZXRTdGlja3lDaGFuZ2VkKCl7dGhpcy5faGFzU3RpY2t5Q2hhbmdlZD0hMX1jb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9zdGlja3k9ITEsdGhpcy5faGFzU3RpY2t5Q2hhbmdlZD0hMX19fXZhciBhND1uZXcgaWUoIkNES19UQUJMRSIpLGVpZT0obmV3IGllKCJ0ZXh0LWNvbHVtbi1vcHRpb25zIiksbzQoY2xhc3N7fSksbmV3IGllKCJfQ09BTEVTQ0VEX1NUWUxFX1NDSEVEVUxFUiIpLCgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnRlbXBsYXRlPWUsdGhpcy5fZGlmZmVycz1pfW5nT25DaGFuZ2VzKGUpe2lmKCF0aGlzLl9jb2x1bW5zRGlmZmVyKXtsZXQgaT1lLmNvbHVtbnMmJmUuY29sdW1ucy5jdXJyZW50VmFsdWV8fFtdO3RoaXMuX2NvbHVtbnNEaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGkpLmNyZWF0ZSgpLHRoaXMuX2NvbHVtbnNEaWZmZXIuZGlmZihpKX19Z2V0Q29sdW1uc0RpZmYoKXtyZXR1cm4gdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKHRoaXMuY29sdW1ucyl9ZXh0cmFjdENlbGxUZW1wbGF0ZShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHRpZT9lLmhlYWRlckNlbGwudGVtcGxhdGU6dGhpcyBpbnN0YW5jZW9mIG5pZT9lLmZvb3RlckNlbGwudGVtcGxhdGU6ZS5jZWxsLnRlbXBsYXRlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFNpKSxDKHZsKSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sZmVhdHVyZXM6W0d0XX0pLG59KSgpKSx4NGU9bzQoY2xhc3MgZXh0ZW5kcyBlaWV7fSksdGllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB4NGV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fdGFibGU9cn1uZ09uQ2hhbmdlcyhlKXtzdXBlci5uZ09uQ2hhbmdlcyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhTaSksQyh2bCksQyhhNCw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka0hlYWRlclJvd0RlZiIsIiJdXSxpbnB1dHM6e2NvbHVtbnM6WyJjZGtIZWFkZXJSb3dEZWYiLCJjb2x1bW5zIl0sc3RpY2t5OlsiY2RrSGVhZGVyUm93RGVmU3RpY2t5Iiwic3RpY2t5Il19LGZlYXR1cmVzOltMZSxHdF19KSxufSkoKSxDNGU9bzQoY2xhc3MgZXh0ZW5kcyBlaWV7fSksbmllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBDNGV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fdGFibGU9cn1uZ09uQ2hhbmdlcyhlKXtzdXBlci5uZ09uQ2hhbmdlcyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhTaSksQyh2bCksQyhhNCw4KSl9LG4uXHUwMjc1ZGlyPXhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka0Zvb3RlclJvd0RlZiIsIiJdXSxpbnB1dHM6e2NvbHVtbnM6WyJjZGtGb290ZXJSb3dEZWYiLCJjb2x1bW5zIl0sc3RpY2t5OlsiY2RrRm9vdGVyUm93RGVmU3RpY2t5Iiwic3RpY2t5Il19LGZlYXR1cmVzOltMZSxHdF19KSxufSkoKSxpaWU9KG5ldyBpZSgiQ0RLX1NQTCIpLCgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltNZF19KSxufSkoKSksTUE9Y2xhc3MgZXh0ZW5kcyBXYntnZXQgZGF0YSgpe3JldHVybiB0aGlzLl9kYXRhLnZhbHVlfXNldCBkYXRhKHQpe3Q9QXJyYXkuaXNBcnJheSh0KT90OltdLHRoaXMuX2RhdGEubmV4dCh0KSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl9maWx0ZXJEYXRhKHQpfWdldCBmaWx0ZXIoKXtyZXR1cm4gdGhpcy5fZmlsdGVyLnZhbHVlfXNldCBmaWx0ZXIodCl7dGhpcy5fZmlsdGVyLm5leHQodCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fZmlsdGVyRGF0YSh0aGlzLmRhdGEpfWdldCBzb3J0KCl7cmV0dXJuIHRoaXMuX3NvcnR9c2V0IHNvcnQodCl7dGhpcy5fc29ydD10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWdldCBwYWdpbmF0b3IoKXtyZXR1cm4gdGhpcy5fcGFnaW5hdG9yfXNldCBwYWdpbmF0b3IodCl7dGhpcy5fcGFnaW5hdG9yPXQsdGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl9Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLl9yZW5kZXJEYXRhPW5ldyBSaShbXSksdGhpcy5fZmlsdGVyPW5ldyBSaSgiIiksdGhpcy5faW50ZXJuYWxQYWdlQ2hhbmdlcz1uZXcgQWUsdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1udWxsLHRoaXMuc29ydGluZ0RhdGFBY2Nlc3Nvcj0oZSxpKT0+e2xldCByPWVbaV07aWYobDIocikpe2xldCBvPU51bWJlcihyKTtyZXR1cm4gbzw5MDA3MTk5MjU0NzQwOTkxP286cn1yZXR1cm4gcn0sdGhpcy5zb3J0RGF0YT0oZSxpKT0+e2xldCByPWkuYWN0aXZlLG89aS5kaXJlY3Rpb247cmV0dXJuIHImJiIiIT1vP2Uuc29ydCgoYSxzKT0+e2xldCBsPXRoaXMuc29ydGluZ0RhdGFBY2Nlc3NvcihhLHIpLGM9dGhpcy5zb3J0aW5nRGF0YUFjY2Vzc29yKHMsciksZD10eXBlb2YgbCx1PXR5cGVvZiBjO2QhPT11JiYoIm51bWJlciI9PT1kJiYobCs9IiIpLCJudW1iZXIiPT09dSYmKGMrPSIiKSk7bGV0IHA9MDtyZXR1cm4gbnVsbCE9bCYmbnVsbCE9Yz9sPmM/cD0xOmw8YyYmKHA9LTEpOm51bGwhPWw/cD0xOm51bGwhPWMmJihwPS0xKSxwKigiYXNjIj09bz8xOi0xKX0pOmV9LHRoaXMuZmlsdGVyUHJlZGljYXRlPShlLGkpPT57bGV0IHI9T2JqZWN0LmtleXMoZSkucmVkdWNlKChhLHMpPT5hK2Vbc10rIlx1MjVlYyIsIiIpLnRvTG93ZXJDYXNlKCksbz1pLnRyaW0oKS50b0xvd2VyQ2FzZSgpO3JldHVybi0xIT1yLmluZGV4T2Yobyl9LHRoaXMuX2RhdGE9bmV3IFJpKHQpLHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfV91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKXtsZXQgdD10aGlzLl9zb3J0P2NuKHRoaXMuX3NvcnQuc29ydENoYW5nZSx0aGlzLl9zb3J0LmluaXRpYWxpemVkKTpxdChudWxsKSxlPXRoaXMuX3BhZ2luYXRvcj9jbih0aGlzLl9wYWdpbmF0b3IucGFnZSx0aGlzLl9pbnRlcm5hbFBhZ2VDaGFuZ2VzLHRoaXMuX3BhZ2luYXRvci5pbml0aWFsaXplZCk6cXQobnVsbCkscj11bihbdGhpcy5fZGF0YSx0aGlzLl9maWx0ZXJdKS5waXBlKFUoKFtzXSk9PnRoaXMuX2ZpbHRlckRhdGEocykpKSxvPXVuKFtyLHRdKS5waXBlKFUoKFtzXSk9PnRoaXMuX29yZGVyRGF0YShzKSkpLGE9dW4oW28sZV0pLnBpcGUoVSgoW3NdKT0+dGhpcy5fcGFnZURhdGEocykpKTt0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249YS5zdWJzY3JpYmUocz0+dGhpcy5fcmVuZGVyRGF0YS5uZXh0KHMpKX1fZmlsdGVyRGF0YSh0KXtyZXR1cm4gdGhpcy5maWx0ZXJlZERhdGE9bnVsbD09dGhpcy5maWx0ZXJ8fCIiPT09dGhpcy5maWx0ZXI/dDp0LmZpbHRlcihlPT50aGlzLmZpbHRlclByZWRpY2F0ZShlLHRoaXMuZmlsdGVyKSksdGhpcy5wYWdpbmF0b3ImJnRoaXMuX3VwZGF0ZVBhZ2luYXRvcih0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGgpLHRoaXMuZmlsdGVyZWREYXRhfV9vcmRlckRhdGEodCl7cmV0dXJuIHRoaXMuc29ydD90aGlzLnNvcnREYXRhKHQuc2xpY2UoKSx0aGlzLnNvcnQpOnR9X3BhZ2VEYXRhKHQpe2lmKCF0aGlzLnBhZ2luYXRvcilyZXR1cm4gdDtsZXQgZT10aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgqdGhpcy5wYWdpbmF0b3IucGFnZVNpemU7cmV0dXJuIHQuc2xpY2UoZSxlK3RoaXMucGFnaW5hdG9yLnBhZ2VTaXplKX1fdXBkYXRlUGFnaW5hdG9yKHQpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntsZXQgZT10aGlzLnBhZ2luYXRvcjtpZihlJiYoZS5sZW5ndGg9dCxlLnBhZ2VJbmRleD4wKSl7bGV0IGk9TWF0aC5jZWlsKGUubGVuZ3RoL2UucGFnZVNpemUpLTF8fDAscj1NYXRoLm1pbihlLnBhZ2VJbmRleCxpKTtyIT09ZS5wYWdlSW5kZXgmJihlLnBhZ2VJbmRleD1yLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXMubmV4dCgpKX19KX1jb25uZWN0KCl7cmV0dXJuIHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb258fHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpLHRoaXMuX3JlbmRlckRhdGF9ZGlzY29ubmVjdCgpe3RoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1udWxsfX0scmllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltpaWUsUXQsUXRdfSksbn0pKCksd0E9Y2xhc3MgZXh0ZW5kcyBNQXt9LFM0ZT1bImNvbnRhaW5lciJdO2Z1bmN0aW9uIEU0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1zbGlkZXIiLDQpLEQoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5oYW5kbGVTaW5nbGVTbGlkZXJDaGFuZ2Uoci52YWx1ZSkpfSksZygpfWlmKDImbil7bGV0IGU9dygpO18oImRpc2FibGVkIiwhZS5lbmFibGVkKSgibWluIixlLm1pbikoIm1heCIsZS5tYXgpKCJzdGVwIiwxKSgidmFsdWUiLGUubG93ZXJWYWx1ZSl9fWZ1bmN0aW9uIFQ0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNwYW4iLDUsNiksUCgyLCJzcGFuIiw3KSgzLCJzcGFuIiw4KSxoKDQsInNwYW4iLDkpLEQoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5oYW5kbGVNb3VzZURvd24ocixvLlBvc2l0aW9uLkxFRlQpKX0pLGcoKSxoKDUsInNwYW4iLDkpLEQoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5oYW5kbGVNb3VzZURvd24ocixvLlBvc2l0aW9uLlJJR0hUKSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtiKDMpLE10KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS5sb3dlclZhbHVlKSkoIndpZHRoIixlLmdldFRyYWNrV2lkdGgoKSksYigxKSxNdCgibGVmdCIsZS5nZXRUaHVtYlBvc2l0aW9uKGUubG93ZXJWYWx1ZSkpLFFlKCJhY3RpdmUiLGUuaXNUaHVtYkFjdGl2ZShlLlBvc2l0aW9uLkxFRlQpKSxiKDEpLE10KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS51cHBlclZhbHVlKSksUWUoImFjdGl2ZSIsZS5pc1RodW1iQWN0aXZlKGUuUG9zaXRpb24uUklHSFQpKX19dmFyIG5sPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OT05FPTBdPSJOT05FIixuW24uTEVGVD0xXT0iTEVGVCIsbltuLlJJR0hUPTJdPSJSSUdIVCJ9KG5sfHwobmw9e30pKSxubCkpKCksb2llPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMudGlja0NvdW50PTIwLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnJldHVybkludGVnZXJzPSExLHRoaXMucmFuZ2VWYWx1ZXNDaGFuZ2VkPW5ldyBMLHRoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkPW5ldyBMLHRoaXMuUG9zaXRpb249bmwsdGhpcy5hY3RpdmVUaHVtYj1ubC5OT05FLHRoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iPTAsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBBZX1nZXRUaHVtYlBvc2l0aW9uKGUpe2xldCBpPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKGUpLHI9dGhpcy5tYXgtdGhpcy5taW47cmV0dXJuIHI8PTA/IjUwJSI6KGktdGhpcy5taW4pL3IqMTAwKyIlIn1nZXRUcmFja1dpZHRoKCl7aWYobnVsbD09PXRoaXMudXBwZXJWYWx1ZSlyZXR1cm4iMCUiO2xldCBlPXRoaXMubWF4LXRoaXMubWluO3JldHVybiBlPD0wPyIwJSI6KHRoaXMuZ2V0Q2xpcHBlZFZhbHVlKHRoaXMudXBwZXJWYWx1ZSktdGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5sb3dlclZhbHVlKSkvZSoxMDArIiUifWdldENsaXBwZWRWYWx1ZShlKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZSx0aGlzLm1pbiksdGhpcy5tYXgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uSW5pdCgpe2FpKGRvY3VtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaGFuZGxlTW91c2VNb3ZlKGUpfSksYWkoZG9jdW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaGFuZGxlTW91c2VPdXQoZSl9KX1oYW5kbGVNb3VzZURvd24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZVRodW1iPWksdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI9Ni1lLm9mZnNldFh9Y2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudChlKXtsZXQgcyx7bGVmdDppLHJpZ2h0OnJ9PXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1lLmNsaWVudFgtaSt0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYjtpZihudWxsIT09dGhpcy50aWNrQ291bnQmJnRoaXMudGlja0NvdW50PjApe2xldCBjPShyLWkpL3RoaXMudGlja0NvdW50O3M9TWF0aC5yb3VuZChhL2MpKmMvKHItaSl9ZWxzZSBzPWEvKHItaSk7bGV0IGw9dGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5taW4rKHRoaXMubWF4LXRoaXMubWluKSpzKTtyZXR1cm4gdGhpcy5yZXR1cm5JbnRlZ2Vycz9NYXRoLnJvdW5kKGwpOk51bWJlcihsLnRvRml4ZWQoMTApKX1oYW5kbGVNb3VzZU1vdmUoZSl7aWYodGhpcy5hY3RpdmVUaHVtYj09PW5sLk5PTkV8fG51bGw9PT10aGlzLnVwcGVyVmFsdWUpcmV0dXJuO2xldCBpPXRoaXMuY2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudChlKSxyPVt0aGlzLmxvd2VyVmFsdWUsdGhpcy51cHBlclZhbHVlXTt0aGlzLmFjdGl2ZVRodW1iPT09bmwuTEVGVD8oaT50aGlzLnVwcGVyVmFsdWUmJih0aGlzLmFjdGl2ZVRodW1iPW5sLlJJR0hUKSxyPVtpLHRoaXMudXBwZXJWYWx1ZV0pOihpPHRoaXMubG93ZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9bmwuTEVGVCkscj1bdGhpcy5sb3dlclZhbHVlLGldKSx0aGlzLm1heWJlTm90aWZ5TmV4dFJhbmdlVmFsdWVzKHIsIlNMSURFUiIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9bWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoZSxpKXtsZXRbcixvXT1lLnNvcnQoKGEscyk9PmEtcyk7KHRoaXMubG93ZXJWYWx1ZSE9PXJ8fHRoaXMudXBwZXJWYWx1ZSE9PW8pJiZ0aGlzLnJhbmdlVmFsdWVzQ2hhbmdlZC5lbWl0KHtsb3dlclZhbHVlOnIsdXBwZXJWYWx1ZTpvLHNvdXJjZTppfSl9aGFuZGxlTW91c2VPdXQoZSl7dGhpcy5hY3RpdmVUaHVtYiE9PW5sLk5PTkUmJih0aGlzLmFjdGl2ZVRodW1iPW5sLk5PTkUsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9aGFuZGxlU2luZ2xlU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOmUsc291cmNlOiJTTElERVIifSl9aGFuZGxlSW5wdXRDaGFuZ2UoZSxpKXtsZXQgcj1lLnRhcmdldCxvPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKE51bWJlcihyLnZhbHVlKSk7aXNOYU4obyl8fChpPT09bmwuTEVGVD9udWxsPT09dGhpcy51cHBlclZhbHVlP3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOm8sc291cmNlOiJURVhUIn0pOnRoaXMubWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoW28sdGhpcy51cHBlclZhbHVlXSwiVEVYVCIpOiIiPT09ci52YWx1ZT90aGlzLnNpbmdsZVZhbHVlQ2hhbmdlZC5lbWl0KHt2YWx1ZTp0aGlzLmxvd2VyVmFsdWUsc291cmNlOiJURVhUX0RFTEVURUQifSk6dGhpcy5tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhbdGhpcy5sb3dlclZhbHVlLG9dLCJURVhUIikpfWlzVGh1bWJBY3RpdmUoZSl7cmV0dXJuIHRoaXMuYWN0aXZlVGh1bWI9PT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEZ0KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItcmFuZ2UtaW5wdXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZZZShTNGUsNSxiZSksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS5jb250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e21pbjoibWluIixtYXg6Im1heCIsbG93ZXJWYWx1ZToibG93ZXJWYWx1ZSIsdXBwZXJWYWx1ZToidXBwZXJWYWx1ZSIsdGlja0NvdW50OiJ0aWNrQ291bnQiLGVuYWJsZWQ6ImVuYWJsZWQiLHJldHVybkludGVnZXJzOiJyZXR1cm5JbnRlZ2VycyJ9LG91dHB1dHM6e3JhbmdlVmFsdWVzQ2hhbmdlZDoicmFuZ2VWYWx1ZXNDaGFuZ2VkIixzaW5nbGVWYWx1ZUNoYW5nZWQ6InNpbmdsZVZhbHVlQ2hhbmdlZCJ9LGRlY2xzOjUsdmFyczo2LGNvbnN0czpbWyJ0eXBlIiwibnVtYmVyIiwxLCJsb3dlci1pbnB1dCIsMywiZGlzYWJsZWQiLCJ2YWx1ZSIsImNoYW5nZSJdLFsidHlwZSIsIm51bWJlciIsMSwidXBwZXItaW5wdXQiLDMsImRpc2FibGVkIiwidmFsdWUiLCJjaGFuZ2UiXSxbImNsYXNzIiwic2luZ2xlLXNsaWRlciIsImNvbG9yIiwicHJpbWFyeSIsMywiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidmFsdWUiLCJpbnB1dCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJyYW5nZSIsIiJdLFsiY29sb3IiLCJwcmltYXJ5IiwxLCJzaW5nbGUtc2xpZGVyIiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImNvbnRhaW5lciJdLFsiY29udGFpbmVyIiwiIl0sWzEsInNsaWRlci10cmFjayJdLFsxLCJzbGlkZXItdHJhY2stZmlsbCJdLFsxLCJ0aHVtYiIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoaCgwLCJpbnB1dCIsMCksRCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVJbnB1dENoYW5nZShvLGkuUG9zaXRpb24uTEVGVCl9KSxnKCksaCgxLCJpbnB1dCIsMSksRCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVJbnB1dENoYW5nZShvLGkuUG9zaXRpb24uUklHSFQpfSksZygpLFMoMixFNGUsMSw1LCJtYXQtc2xpZGVyIiwyKSxTKDMsVDRlLDYsMTIsIm5nLXRlbXBsYXRlIixudWxsLDMsWnQpKSwyJmUpe2xldCByPXR0KDQpO18oImRpc2FibGVkIiwhaS5lbmFibGVkKSgidmFsdWUiLGkubG93ZXJWYWx1ZSksYigxKSxfKCJkaXNhYmxlZCIsIWkuZW5hYmxlZCkoInZhbHVlIixudWxsIT09aS51cHBlclZhbHVlP2kudXBwZXJWYWx1ZToiIiksYigxKSxfKCJuZ0lmIixudWxsPT09aS51cHBlclZhbHVlKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltGZSxUZF0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZ3JpZDtncmlkLWdhcDoxMHB4O2dyaWQtdGVtcGxhdGUtYXJlYXM6Imxvd2VyLWlucHV0IHVwcGVyLWlucHV0IiAic2xpZGVyIHNsaWRlciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Zm9udC1zaXplOjA7bWluLXdpZHRoOjEwMHB4O3BhZGRpbmc6NnB4fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfS5sb3dlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmxvd2VyLWlucHV0fS51cHBlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnVwcGVyLWlucHV0O2p1c3RpZnktc2VsZjpmbGV4LWVuZH0uc2luZ2xlLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcjtwYWRkaW5nOjBweH0uc2luZ2xlLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtc2xpZGVyLXdyYXBwZXJ7dG9wOjVweDtsZWZ0OjBweDtyaWdodDowcHh9ICAuc2luZ2xlLXNsaWRlci5tYXQtc2xpZGVyLWhvcml6b250YWx7aGVpZ2h0OjEycHh9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcjthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjYpO2hlaWdodDoycHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoycHh9LnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2FkaG93OjAgMCAwIDFweCByZ2JhKDAsMCwwLC4yNik7Ym9yZGVyLXJhZGl1czoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMnB4O21hcmdpbi1sZWZ0Oi02cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2U7d2lkdGg6MTJweDt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2FkaG93OjAgMCAwIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4zKX0udGh1bWJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpncmFifS50aHVtYltfbmdjb250ZW50LSVDT01QJV06YWN0aXZle2N1cnNvcjpncmFiYmluZ30udGh1bWIuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06c2NhbGUoMS4yKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1N2MwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEE0ZT1bImZpbHRlciJdO2Z1bmN0aW9uIFI0ZShuLHQpezEmbiYmVGkoMCl9ZnVuY3Rpb24gazRlKG4sdCl7MSZuJiZUaSgwKX12YXIgUDRlPWZ1bmN0aW9uKG4pe3JldHVybntpdGVtOm59fTtmdW5jdGlvbiBPNGUobix0KXtpZigxJm4mJihUdCgwKSxTKDEsazRlLDEsMCwibmctY29udGFpbmVyIiwxMiksRHQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt3KCk7bGV0IGk9dHQoMTQpO2IoMSksXygibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixTbigyLFA0ZSxlKSl9fWZ1bmN0aW9uIEY0ZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxMyksUCgxLCJtYXQtc3Bpbm5lciIsMTQpLGcoKSl9ZnVuY3Rpb24gTDRlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDE1KSxUKDEsIk5vIFJ1bnMiKSxnKCkpfWZ1bmN0aW9uIE40ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxNSkoMSwic3BhbiIpLFQoMiwnTm8gcnVucyBtYXRjaCAiJyksaCgzLCJjb2RlIiksVCg0KSxnKCksVCg1LCciJyksZygpKCkpLDImbil7bGV0IGU9dygpO2IoNCksdXQoZS5yZWdleEZpbHRlcil9fXZhciBCNGU9ZnVuY3Rpb24oKXtyZXR1cm5bNSwxMCwyMF19O2Z1bmN0aW9uIFY0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1wYWdpbmF0b3IiLDE2KSxEKCJwYWdlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblBhZ2luYXRpb25DaGFuZ2UuZW1pdChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygicGFnZVNpemVPcHRpb25zIix1dSg0LEI0ZSkpKCJwYWdlSW5kZXgiLGUucGFnaW5hdGlvbk9wdGlvbi5wYWdlSW5kZXgpKCJwYWdlU2l6ZSIsZS5wYWdpbmF0aW9uT3B0aW9uLnBhZ2VTaXplKSgibGVuZ3RoIixlLmZpbHRlcmVkSXRlbXNMZW5ndGgpfX1mdW5jdGlvbiBINGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJtYXQtY2hlY2tib3giLDI2KSxEKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KDMpLmhhbmRsZVBhZ2VUb2dnbGUoKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KDMpO18oImNoZWNrZWQiLGUuYWxsUGFnZUl0ZW1zU2VsZWN0ZWQoKSkoImluZGV0ZXJtaW5hdGUiLCFlLmFsbFBhZ2VJdGVtc1NlbGVjdGVkKCkmJmUuc29tZVBhZ2VJdGVtc1NlbGVjdGVkKCkpfX12YXIgYWllPWZ1bmN0aW9uKG4pe3JldHVybnt0eXBlOm59fTtmdW5jdGlvbiB6NGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDI3KSxUKDEsIkV4cGVyaW1lbnQiKSxnKCkpLDImbil7bGV0IGU9dygzKTtfKCJtYXQtc29ydC1oZWFkZXIiLFNuKDEsYWllLGUuU29ydFR5cGUuRVhQRVJJTUVOVF9OQU1FKSl9fWZ1bmN0aW9uIFU0ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMjcpLFQoMSwiUnVuIiksZygpKSwyJm4pe2xldCBlPXcoMyk7XygibWF0LXNvcnQtaGVhZGVyIixTbigxLGFpZSxlLlNvcnRUeXBlLlJVTl9OQU1FKSl9fWZ1bmN0aW9uIGo0ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIpLFAoMSwicnVucy1ncm91cC1tZW51LWJ1dHRvbiIsMjgpLGcoKSksMiZuKXtsZXQgZT13KDMpO2IoMSksXygiZXhwZXJpbWVudElkcyIsZS5leHBlcmltZW50SWRzKX19dmFyIHNpZT1mdW5jdGlvbihuKXtyZXR1cm5bImNvbHVtbiIsbl19O2Z1bmN0aW9uIEc0ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMjEpLFR0KDEsMjIpLFMoMixINGUsMSwyLCJtYXQtY2hlY2tib3giLDIzKSxTKDMsejRlLDIsMywic3BhbiIsMjQpLFMoNCxVNGUsMiwzLCJzcGFuIiwyNCksUyg1LGo0ZSwyLDEsInNwYW4iLDI1KSxEdCgpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMik7XygibmdDbGFzcyIsU24oNixzaWUsInRiLWNvbHVtbi0iK2UpKSxiKDEpLF8oIm5nU3dpdGNoIixlKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uQ0hFQ0tCT1gpLGIoMSksXygibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLGIoMSksXygibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9DT0xPUil9fWZ1bmN0aW9uIFc0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtUdCgwKSxoKDEsImRpdiIsMzcpLEQoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGgoMiwidGItcmFuZ2UtaW5wdXQiLDM4KSxEKCJyYW5nZVZhbHVlc0NoYW5nZWQiLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygyKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQobyxyKSl9KSxnKCkoKSxEdCgpfWlmKDImbil7bGV0IGU9dygyKS4kaW1wbGljaXQ7YigyKSxfKCJtaW4iLGUuZmlsdGVyLm1pblZhbHVlKSgibWF4IixlLmZpbHRlci5tYXhWYWx1ZSkoImxvd2VyVmFsdWUiLGUuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUpKCJ1cHBlclZhbHVlIixlLmZpbHRlci5maWx0ZXJVcHBlclZhbHVlKX19ZnVuY3Rpb24gcTRlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw0MCksRCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksaCgxLCJtYXQtY2hlY2tib3giLDM2KSxEKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bGV0IG89WChlKS4kaW1wbGljaXQsYT13KDMpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KDIpLmhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChhLG8pKX0pLGgoMiwic3BhbiIpLFQoMyksZygpKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygzKS4kaW1wbGljaXQ7YigxKSxfKCJjaGVja2VkIixpLmZpbHRlci5maWx0ZXJWYWx1ZXMuaW5jbHVkZXMoZSkpLGIoMiksdXQoZSl9fWZ1bmN0aW9uIFk0ZShuLHQpe2lmKDEmbiYmKFR0KDApLFMoMSxxNGUsNCwyLCJkaXYiLDM5KSxEdCgpKSwyJm4pe2xldCBlPXcoMikuJGltcGxpY2l0O2IoMSksXygibmdGb3JPZiIsZS5maWx0ZXIucG9zc2libGVWYWx1ZXMpfX1mdW5jdGlvbiBYNGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7VHQoMCksaCgxLCJidXR0b24iLDMyKSxEKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxQKDIsIm1hdC1pY29uIiwzMyksZygpLGgoMywibWF0LW1lbnUiLG51bGwsMzQpKDUsImRpdiIsMzUpLEQoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGgoNiwibWF0LWNoZWNrYm94IiwzNiksRCgiY2hhbmdlIixmdW5jdGlvbigpe1goZSk7bGV0IHI9dygpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KDIpLmhhbmRsZUhwYXJhbUluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKHIpKX0pLGgoNywic3BhbiIpLFQoOCwiKHNob3cgZW1wdHkgdmFsdWUpIiksZygpKCkoKSxTKDksVzRlLDMsNCwibmctY29udGFpbmVyIiwzMSksUygxMCxZNGUsMiwxLCJuZy1jb250YWluZXIiLDMxKSxnKCksRHQoKX1pZigyJm4pe2xldCBlPXR0KDQpLGk9dygpLiRpbXBsaWNpdCxyPXcoMik7YigxKSxfKCJtYXRNZW51VHJpZ2dlckZvciIsZSksUGUoImFyaWEtbGFiZWwiLCJGaWx0ZXIgaHBhcmFtICIrKGkuZGlzcGxheU5hbWV8fGkubmFtZSkpLGIoNSksXygiY2hlY2tlZCIsaS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCksYigzKSxfKCJuZ0lmIixpLmZpbHRlci50eXBlPT09ci5Eb21haW5UeXBlLklOVEVSVkFMKSxiKDEpLF8oIm5nSWYiLGkuZmlsdGVyLnR5cGU9PT1yLkRvbWFpblR5cGUuRElTQ1JFVEUpfX12YXIgUTRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3R5cGU6bixuYW1lOnR9fTtmdW5jdGlvbiBaNGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDI5KSgxLCJzcGFuIiwzMCksVCgyKSxnKCksUygzLFg0ZSwxMSw1LCJuZy1jb250YWluZXIiLDMxKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO18oIm1hdC1zb3J0LWhlYWRlciIsUHIoMyxRNGUsaS5Tb3J0VHlwZS5IUEFSQU0sZS5uYW1lKSksYigyKSx1dChlLmRpc3BsYXlOYW1lfHxlLm5hbWUpLGIoMSksXygibmdJZiIsZS5maWx0ZXIpfX1mdW5jdGlvbiBLNGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7VHQoMCksaCgxLCJidXR0b24iLDMyKSxEKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxQKDIsIm1hdC1pY29uIiwzMyksZygpLGgoMywibWF0LW1lbnUiLG51bGwsMzQpKDUsImRpdiIsMzUpLEQoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGgoNiwibWF0LWNoZWNrYm94IiwzNiksRCgiY2hhbmdlIixmdW5jdGlvbigpe1goZSk7bGV0IHI9dygpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KDIpLmhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKHIpKX0pLGgoNywic3BhbiIpLFQoOCwiKHNob3cgZW1wdHkgdmFsdWUpIiksZygpKCkoKSxoKDksImRpdiIsMzcpLEQoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGgoMTAsInRiLXJhbmdlLWlucHV0IiwzOCksRCgicmFuZ2VWYWx1ZXNDaGFuZ2VkIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKG8scikpfSksZygpKCkoKSxEdCgpfWlmKDImbil7bGV0IGU9dHQoNCksaT13KCkuJGltcGxpY2l0O2IoMSksXygibWF0TWVudVRyaWdnZXJGb3IiLGUpLFBlKCJhcmlhLWxhYmVsIiwiRmlsdGVyIG1ldHJpYyAiKyhpLmRpc3BsYXlOYW1lfHxpLnRhZykpLGIoNSksXygiY2hlY2tlZCIsaS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCksYig0KSxfKCJtaW4iLGkuZmlsdGVyLm1pblZhbHVlKSgibWF4IixpLmZpbHRlci5tYXhWYWx1ZSkoImxvd2VyVmFsdWUiLGkuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUpKCJ1cHBlclZhbHVlIixpLmZpbHRlci5maWx0ZXJVcHBlclZhbHVlKX19dmFyIEo0ZT1mdW5jdGlvbihuLHQpe3JldHVybnt0eXBlOm4sdGFnOnR9fTtmdW5jdGlvbiAkNGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDI5KSgxLCJzcGFuIiwzMCksVCgyKSxnKCksUygzLEs0ZSwxMSw3LCJuZy1jb250YWluZXIiLDMxKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO18oIm1hdC1zb3J0LWhlYWRlciIsUHIoMyxKNGUsaS5Tb3J0VHlwZS5NRVRSSUMsZS50YWcpKSxiKDIpLHV0KGUuZGlzcGxheU5hbWV8fGUudGFnKSxiKDEpLF8oIm5nSWYiLGUuZmlsdGVyKX19ZnVuY3Rpb24gZUhlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwxNykoMSwiZGl2IiwxOCksRCgibWF0U29ydENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuaGFuZGxlU29ydENoYW5nZShyKSl9KSxTKDIsRzRlLDYsOCwic3BhbiIsMTkpLFMoMyxaNGUsNCw2LCJzcGFuIiwyMCksUyg0LCQ0ZSw0LDYsInNwYW4iLDIwKSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtiKDEpLF8oIm1hdFNvcnRBY3RpdmUiLGUuc29ydE9wdGlvbi5jb2x1bW4pLGIoMSksXygibmdGb3JPZiIsZS5jb2x1bW5zKSxiKDEpLF8oIm5nRm9yT2YiLGUuaHBhcmFtQ29sdW1ucykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5SHBhcmFtQ29sdW1uKSxiKDEpLF8oIm5nRm9yT2YiLGUubWV0cmljQ29sdW1ucykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5TWV0cmljQ29sdW1uKX19ZnVuY3Rpb24gdEhlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwic3BhbiIpKDEsIm1hdC1jaGVja2JveCIsNDcpLEQoImNoYW5nZSIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoMikuaXRlbTtyZXR1cm4gUSh3KCkub25TZWxlY3Rpb25Ub2dnbGUuZW1pdChyKSl9KSgiZGJsY2xpY2siLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KDIpLml0ZW07cmV0dXJuIFEodygpLm9uU2VsZWN0aW9uRGJsQ2xpY2suZW1pdChyLnJ1bi5pZCkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT13KDIpLml0ZW07YigxKSxfKCJjaGVja2VkIixlLnNlbGVjdGVkKX19ZnVuY3Rpb24gbkhlKG4sdCl7aWYoMSZuJiZQKDAsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDQ4KSwyJm4pe2xldCBlPXcoMikuaXRlbTtfKCJhbGlhcyIsZS5leHBlcmltZW50QWxpYXMpKCJ0aXRsZSIsZS5leHBlcmltZW50TmFtZSl9fWZ1bmN0aW9uIGlIZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMzApLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMikuaXRlbTtiKDEpLHV0KGUucnVuLm5hbWUpfX12YXIgckhlPWZ1bmN0aW9uKG4pe3JldHVybnsicnVuLWNvbG9yLXN3YXRjaCI6ITAsIm5vLWNvbG9yIjpufX07ZnVuY3Rpb24gb0hlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwic3BhbiIpKDEsImJ1dHRvbiIsNDkpLEQoImNvbG9yUGlja2VyQ2hhbmdlIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMikuaXRlbTtyZXR1cm4gUSh3KCkub25SdW5Db2xvckNoYW5nZS5lbWl0KHtydW5JZDpvLnJ1bi5pZCxuZXdDb2xvcjpyfSkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT13KDIpLml0ZW07YigxKSxNdCgiYmFja2dyb3VuZCIsZS5ydW5Db2xvciksXygibmdDbGFzcyIsU24oOCxySGUsIWUucnVuQ29sb3IpKSgiY29sb3JQaWNrZXIiLGUucnVuQ29sb3IpKCJjcERpYWxvZ0Rpc3BsYXkiLCJwb3B1cCIpKCJjcFBvc2l0aW9uT2Zmc2V0IiwtMjApKCJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIiwhMCkoImNwT3V0cHV0Rm9ybWF0IiwiaGV4Iil9fWZ1bmN0aW9uIGFIZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsNDQpLFR0KDEsMjIpLFMoMix0SGUsMiwxLCJzcGFuIiwyNSksUygzLG5IZSwxLDIsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDQ1KSxTKDQsaUhlLDIsMSwic3BhbiIsNDYpLFMoNSxvSGUsMiwxMCwic3BhbiIsMjUpLER0KCksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygyKTtfKCJuZ0NsYXNzIixTbig2LHNpZSwidGItY29sdW1uLSIrZSkpLGIoMSksXygibmdTd2l0Y2giLGUpLGIoMSksXygibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5DSEVDS0JPWCksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLkVYUEVSSU1FTlRfTkFNRSksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9OQU1FKSxiKDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uUlVOX0NPTE9SKX19ZnVuY3Rpb24gc0hlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiw1MCksVCgxKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCkuaXRlbTtiKDEpLHV0KGkuaHBhcmFtcy5nZXQoZS5uYW1lKSl9fWZ1bmN0aW9uIGxIZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsNTApLFQoMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpLml0ZW07YigxKSx1dChpLm1ldHJpY3MuZ2V0KGUudGFnKSl9fWZ1bmN0aW9uIGNIZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw0MSksUygxLGFIZSw2LDgsInNwYW4iLDQyKSxTKDIsc0hlLDIsMSwic3BhbiIsNDMpLFMoMyxsSGUsMiwxLCJzcGFuIiw0MyksZygpKSwyJm4pe2xldCBlPXQuaXRlbSxpPXcoKTtQZSgiZGF0YS1pZCIsZS5ydW4uaWQpLGIoMSksXygibmdGb3JPZiIsaS5jb2x1bW5zKSxiKDEpLF8oIm5nRm9yT2YiLGkuaHBhcmFtQ29sdW1ucyksYigxKSxfKCJuZ0Zvck9mIixpLm1ldHJpY0NvbHVtbnMpfX12YXIgZEhlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBYZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pdGVtc1BlclBhZ2VMYWJlbD0iU2hvdyBydW5zOiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9Q24obikpKShpfHxuKX19KCksbi5cdTAyNzVwcm92PXBlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxsaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZGF0YVNvdXJjZT1uZXcgd0EsdGhpcy5Eb21haW5UeXBlPVVuLHRoaXMuUnVuc1RhYmxlQ29sdW1uPXhhLHRoaXMuU29ydFR5cGU9U2MsdGhpcy5vblJlZ2V4RmlsdGVyQ2hhbmdlPW5ldyBMLHRoaXMub25TZWxlY3Rpb25Ub2dnbGU9bmV3IEwsdGhpcy5vblNlbGVjdGlvbkRibENsaWNrPW5ldyBMLHRoaXMub25QYWdlU2VsZWN0aW9uVG9nZ2xlPW5ldyBMLHRoaXMub25QYWdpbmF0aW9uQ2hhbmdlPW5ldyBMLHRoaXMub25Tb3J0Q2hhbmdlPW5ldyBMLHRoaXMub25SdW5Db2xvckNoYW5nZT1uZXcgTCx0aGlzLm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkPW5ldyBMLHRoaXMub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQ9bmV3IEwsdGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQ9bmV3IEx9bmdPbkNoYW5nZXMoKXt0aGlzLmRhdGFTb3VyY2UuZGF0YT10aGlzLnBhZ2VJdGVtc31nZXRIcGFyYW1Db2x1bW5JZChlKXtyZXR1cm5gaDoke2UubmFtZX1gfWdldE1ldHJpY0NvbHVtbklkKGUpe3JldHVybmBtOiR7ZS50YWd9YH1nZXRDb2x1bW5JZHMoKXtyZXR1cm5bLi4udGhpcy5jb2x1bW5zLC4uLnRoaXMuaHBhcmFtQ29sdW1ucy5tYXAodGhpcy5nZXRIcGFyYW1Db2x1bW5JZCksLi4udGhpcy5tZXRyaWNDb2x1bW5zLm1hcCh0aGlzLmdldE1ldHJpY0NvbHVtbklkKV19YWxsUGFnZUl0ZW1zU2VsZWN0ZWQoKXtyZXR1cm4gQm9vbGVhbih0aGlzLnBhZ2VJdGVtcy5sZW5ndGgpJiZ0aGlzLnBhZ2VJdGVtcy5ldmVyeShlPT5lLnNlbGVjdGVkKX1zb21lUGFnZUl0ZW1zU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5wYWdlSXRlbXMuc29tZShlPT5lLnNlbGVjdGVkKX1oYW5kbGVQYWdlVG9nZ2xlKCl7dGhpcy5vblBhZ2VTZWxlY3Rpb25Ub2dnbGUuZW1pdCh7aXRlbXM6dGhpcy5wYWdlSXRlbXN9KX1oYW5kbGVTb3J0Q2hhbmdlKGUpe2xldCBpO3N3aXRjaChlLmRpcmVjdGlvbil7Y2FzZSJhc2MiOmk9R3MuQVNDO2JyZWFrO2Nhc2UiZGVzYyI6aT1Hcy5ERVNDO2JyZWFrO2RlZmF1bHQ6aT1Hcy5VTlNFVH10aGlzLm9uU29ydENoYW5nZS5lbWl0KHtrZXk6ZS5hY3RpdmUsZGlyZWN0aW9uOml9KX1vbkZpbHRlcktleVVwKGUpe3RoaXMub25SZWdleEZpbHRlckNoYW5nZS5lbWl0KGUudGFyZ2V0LnZhbHVlKX10YWJsZVRyYWNrQnkoZSxpKXtyZXR1cm4gaS5ydW4uaWR9aGFuZGxlSHBhcmFtSW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQoZSl7bGV0e25hbWU6aSxmaWx0ZXI6cn09ZTtpZighcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7ci50eXBlPT09VW4uRElTQ1JFVEU/dGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZC5lbWl0KHtocGFyYW1OYW1lOmksaW5jbHVkZVVuZGVmaW5lZDohci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlclZhbHVlczpyLmZpbHRlclZhbHVlc30pOnRoaXMub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTppLGluY2x1ZGVVbmRlZmluZWQ6IXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOnIuZmlsdGVyTG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOnIuZmlsdGVyVXBwZXJWYWx1ZX0pfWhhbmRsZUhwYXJhbUludGVydmFsQ2hhbmdlZChlLGkpe2xldHtuYW1lOnIsZmlsdGVyOm99PWU7aWYoIW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3RoaXMub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTpyLGluY2x1ZGVVbmRlZmluZWQ6by5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6aS5sb3dlclZhbHVlLGZpbHRlclVwcGVyVmFsdWU6aS51cHBlclZhbHVlfSl9aGFuZGxlSHBhcmFtRGlzY3JldGVDaGFuZ2VkKGUsaSl7bGV0e25hbWU6cixmaWx0ZXI6b309ZTtpZighbyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7aWYoby50eXBlIT09VW4uRElTQ1JFVEUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogZXhwZWN0ZWQgZGlzY3JldGUgZG9tYWluIGZvciAke3J9YCk7bGV0IGE9bmV3IFNldChbLi4uby5maWx0ZXJWYWx1ZXNdKTthLmhhcyhpKT9hLmRlbGV0ZShpKTphLmFkZChpKSx0aGlzLm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkLmVtaXQoe2hwYXJhbU5hbWU6cixpbmNsdWRlVW5kZWZpbmVkOm8uaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJWYWx1ZXM6Wy4uLmFdfSl9aGFuZGxlTWV0cmljSW5jbHVkZVVuZGVmaW5lZENoYW5nZWQoZSl7aWYoIWUuZmlsdGVyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOmUudGFnLGluY2x1ZGVVbmRlZmluZWQ6IWUuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTplLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlLGZpbHRlclVwcGVyVmFsdWU6ZS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZX0pfWhhbmRsZU1ldHJpY0ZpbHRlckNoYW5nZWQoZSxpKXtpZighZS5maWx0ZXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3RoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6ZS50YWcsaW5jbHVkZVVuZGVmaW5lZDplLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6aS5sb3dlclZhbHVlLGZpbHRlclVwcGVyVmFsdWU6aS51cHBlclZhbHVlfSl9dHJhY2tCeUhwYXJhbUNvbHVtbihlKXtyZXR1cm4gZS5uYW1lfXRyYWNrQnlNZXRyaWNDb2x1bW4oZSl7cmV0dXJuIGUudGFnfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXRhYmxlLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihZZShBNGUsNyxiZSksWWUoeEEsNyksWWUockMsNykpLDImZSl7bGV0IHI7d2Uocj1TZSgpKSYmKGkuZmlsdGVyPXIuZmlyc3QpLHdlKHI9U2UoKSkmJihpLnBhZ2luYXRvcj1yLmZpcnN0KSx3ZShyPVNlKCkpJiYoaS5zb3J0PXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJlFlKCJmbGV4LWxheW91dCIsaS51c2VGbGV4aWJsZUxheW91dCl9LGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0V4cGVyaW1lbnROYW1lOiJzaG93RXhwZXJpbWVudE5hbWUiLGNvbHVtbnM6ImNvbHVtbnMiLGhwYXJhbUNvbHVtbnM6ImhwYXJhbUNvbHVtbnMiLG1ldHJpY0NvbHVtbnM6Im1ldHJpY0NvbHVtbnMiLGFsbEl0ZW1zTGVuZ3RoOiJhbGxJdGVtc0xlbmd0aCIsZmlsdGVyZWRJdGVtc0xlbmd0aDoiZmlsdGVyZWRJdGVtc0xlbmd0aCIsdXNlRmxleGlibGVMYXlvdXQ6InVzZUZsZXhpYmxlTGF5b3V0Iix1c2VQYWdpbmF0aW9uOiJ1c2VQYWdpbmF0aW9uIixwYWdlSXRlbXM6InBhZ2VJdGVtcyIsbG9hZGluZzoibG9hZGluZyIsbnVtU2VsZWN0ZWRJdGVtczoibnVtU2VsZWN0ZWRJdGVtcyIsc29ydE9wdGlvbjoic29ydE9wdGlvbiIscGFnaW5hdGlvbk9wdGlvbjoicGFnaW5hdGlvbk9wdGlvbiIscmVnZXhGaWx0ZXI6InJlZ2V4RmlsdGVyIn0sb3V0cHV0czp7b25SZWdleEZpbHRlckNoYW5nZToib25SZWdleEZpbHRlckNoYW5nZSIsb25TZWxlY3Rpb25Ub2dnbGU6Im9uU2VsZWN0aW9uVG9nZ2xlIixvblNlbGVjdGlvbkRibENsaWNrOiJvblNlbGVjdGlvbkRibENsaWNrIixvblBhZ2VTZWxlY3Rpb25Ub2dnbGU6Im9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsb25QYWdpbmF0aW9uQ2hhbmdlOiJvblBhZ2luYXRpb25DaGFuZ2UiLG9uU29ydENoYW5nZToib25Tb3J0Q2hhbmdlIixvblJ1bkNvbG9yQ2hhbmdlOiJvblJ1bkNvbG9yQ2hhbmdlIixvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZDoib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLG9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkOiJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsb25NZXRyaWNGaWx0ZXJDaGFuZ2VkOiJvbk1ldHJpY0ZpbHRlckNoYW5nZWQifSxmZWF0dXJlczpbUnQoW3twcm92aWRlOlhkLHVzZUNsYXNzOmRIZX1dKSxHdF0sZGVjbHM6MTUsdmFyczo4LGNvbnN0czpbWzEsImZpbHRlci1yb3ciXSxbInBsYWNlaG9sZGVyIiwiRmlsdGVyIHJ1bnMgKHJlZ2V4KSIsMSwicnVuLWZpbHRlciIsMywidmFsdWUiLCJrZXl1cCJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbInJvbGUiLCJ0YWJsZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93Z3JvdXAiLDEsInJvd3MiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJjbGFzcyIsImxvYWRpbmciLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tcnVucyIsNCwibmdJZiJdLFsic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiLCIiLDMsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VJbmRleCIsInBhZ2VTaXplIiwibGVuZ3RoIiwicGFnZSIsNCwibmdJZiJdLFsiaGVhZGVyIiwiIl0sWyJyb3ciLCIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImxvYWRpbmciXSxbIm1vZGUiLCJpbmRldGVybWluYXRlIiwiZGlhbWV0ZXIiLCIyOCJdLFsxLCJuby1ydW5zIl0sWyJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsIiIsMywicGFnZVNpemVPcHRpb25zIiwicGFnZUluZGV4IiwicGFnZVNpemUiLCJsZW5ndGgiLCJwYWdlIl0sWyJyb2xlIiwicm93Z3JvdXAiLDEsImhlYWRlciJdLFsibWF0U29ydCIsIiIsInJvbGUiLCJyb3ciLDMsIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0Q2hhbmdlIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImNvbHVtbiIsMywibWF0LXNvcnQtaGVhZGVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbMywibmdTd2l0Y2giXSxbMywiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJjaGFuZ2UiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJtYXQtc29ydC1oZWFkZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMywiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJjaGFuZ2UiXSxbMywibWF0LXNvcnQtaGVhZGVyIl0sWzMsImV4cGVyaW1lbnRJZHMiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImNvbHVtbiIsMywibWF0LXNvcnQtaGVhZGVyIl0sWzEsIm5hbWUiXSxbNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwzLCJtYXRNZW51VHJpZ2dlckZvciIsImNsaWNrIl0sWyJzdmdJY29uIiwiZmlsdGVyX2FsdF8yNHB4Il0sWyJmaWx0ZXJNZW51IiwibWF0TWVudSJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbWNoZWNrYm94IiwiZGlzYWJsZVJpcHBsZSIsIiIsMSwiZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93IiwzLCJjbGljayJdLFszLCJjaGVja2VkIiwiY2hhbmdlIl0sWyJkaXNhYmxlUmlwcGxlIiwiIiwibWF0LW1lbnUtaXRlbSIsIiIsMSwicmFuZ2UtaW5wdXQtY29udGFpbmVyIiwzLCJjbGljayJdLFszLCJtaW4iLCJtYXgiLCJsb3dlclZhbHVlIiwidXBwZXJWYWx1ZSIsInJhbmdlVmFsdWVzQ2hhbmdlZCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImNsYXNzIiwiZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93Iiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLDMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsMSwiZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93IiwzLCJjbGljayJdLFsicm9sZSIsInJvdyJdLFsicm9sZSIsImNlbGwiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNlbGwiLCJjbGFzcyIsImNvbHVtbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY2VsbCIsMywibmdDbGFzcyJdLFszLCJhbGlhcyIsInRpdGxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibmFtZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJ0aXRsZSIsIkNsaWNrIHRvIHRvZ2dsZSBydW4gc2VsZWN0aW9uIG9yIGRvdWJsZSBjbGljayB0byBzZWxlY3Qgb25seSB0aGlzIHJ1bi4iLDMsImNoZWNrZWQiLCJjaGFuZ2UiLCJkYmxjbGljayJdLFszLCJhbGlhcyIsInRpdGxlIl0sWzMsIm5nQ2xhc3MiLCJjb2xvclBpY2tlciIsImNwRGlhbG9nRGlzcGxheSIsImNwUG9zaXRpb25PZmZzZXQiLCJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIiwiY3BPdXRwdXRGb3JtYXQiLCJjb2xvclBpY2tlckNoYW5nZSJdLFsicm9sZSIsImNlbGwiLDEsImNvbHVtbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLEQoImtleXVwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkZpbHRlcktleVVwKG8pfSksZygpKCksaCgyLCJkaXYiLDIpKDMsImRpdiIsMyksUyg0LFI0ZSwxLDAsIm5nLWNvbnRhaW5lciIsNCksaCg1LCJkaXYiLDUpLFMoNixPNGUsMiw0LCJuZy1jb250YWluZXIiLDYpLGcoKSgpLFMoNyxGNGUsMiwwLCJkaXYiLDcpLFMoOCxMNGUsMiwwLCJkaXYiLDgpLFMoOSxONGUsNiwxLCJkaXYiLDgpLGcoKSxTKDEwLFY0ZSwxLDUsIm1hdC1wYWdpbmF0b3IiLDkpLFMoMTEsZUhlLDUsNiwibmctdGVtcGxhdGUiLG51bGwsMTAsWnQpLFMoMTMsY0hlLDQsNCwibmctdGVtcGxhdGUiLG51bGwsMTEsWnQpKSwyJmUpe2xldCByPXR0KDEyKTtiKDEpLEppKCJ2YWx1ZSIsaS5yZWdleEZpbHRlciksYigzKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixyKSxiKDIpLF8oIm5nRm9yT2YiLGkucGFnZUl0ZW1zKSgibmdGb3JUcmFja0J5IixpLnRhYmxlVHJhY2tCeSksYigxKSxfKCJuZ0lmIixpLmxvYWRpbmcpLGIoMSksXygibmdJZiIsIWkubG9hZGluZyYmMD09PWkuYWxsSXRlbXNMZW5ndGgpLGIoMSksXygibmdJZiIsIWkubG9hZGluZyYmaS5hbGxJdGVtc0xlbmd0aD4wJiYwPT09aS5maWx0ZXJlZEl0ZW1zTGVuZ3RoKSxiKDEpLF8oIm5nSWYiLGkudXNlUGFnaW5hdGlvbil9fSxkZXBlbmRlbmNpZXM6W2JBLGJuLGRuLEZlLE1vLCRpLHNyLHRwLEVfLEZuLEhsLERuLGtjLFl1LFBjLHhBLHpyLHJDLEpuZSxvaWUsdkFdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXNpemU6MTNweDtvdmVyZmxvdzpoaWRkZW59LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmxheW91dCBwYWludDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259LmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmctYm90dG9tOjEycHh9Ym9keS5kYXJrLW1vZGUgICAuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6dGFibGUtcm93O2hlaWdodDo0M3B4fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MjRweH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MjRweH1bcm9sZT1yb3dncm91cF1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtcm93LWdyb3VwfVtyb2xlPXJvd2dyb3VwXS5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtaGVhZGVyLWdyb3VwfS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnNlbGVjdC1hbGxbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEycHg7cGFkZGluZy10b3A6MTJweH0uc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpsZWZ0fS5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo1MDA7cGFkZGluZzowIDRweH0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4IDAgMjFweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9LnRiLWNvbHVtbi1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0sIC50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4fS50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ucnVuLWNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O291dGxpbmU6bm9uZX0ucnVuLWNvbG9yLXN3YXRjaC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNjNmNhZDE7Ym9yZGVyLXdpZHRoOjJweH0ucmFuZ2UtaW5wdXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6YXV0b31bX25naG9zdC0lQ09NUCVdICAgICBtYXQtcGFnaW5hdG9yIG1hdC1mb3JtLWZpZWxke21hcmdpbjowfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWx7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcn0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OjB9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbCAubWF0LWNoZWNrYm94LWxhYmVse292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBwSGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJydW5zLXRhYmxlLWNvbXBvbmVudCIsMiksRCgib25TZWxlY3Rpb25Ub2dnbGUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uUnVuSXRlbVNlbGVjdGlvblRvZ2dsZShyKSl9KSgib25TZWxlY3Rpb25EYmxDbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5TZWxlY3Rpb25EYmxDbGljayhyKSl9KSgib25QYWdlU2VsZWN0aW9uVG9nZ2xlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblBhZ2VTZWxlY3Rpb25Ub2dnbGUocikpfSkoIm9uUGFnaW5hdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25QYWdpbmF0aW9uQ2hhbmdlKHIpKX0pKCJvblJlZ2V4RmlsdGVyQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblJlZ2V4RmlsdGVyQ2hhbmdlKHIpKX0pKCJvblNvcnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uU29ydENoYW5nZShyKSl9KSgib25SdW5Db2xvckNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5Db2xvckNoYW5nZShyKSl9KSgib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkKHIpKX0pKCJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQocikpfSkoIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25NZXRyaWNGaWx0ZXJDaGFuZ2VkKHIpKX0pLEcoMSwiYXN5bmMiKSxHKDIsImFzeW5jIiksRygzLCJhc3luYyIpLEcoNCwiYXN5bmMiKSxHKDUsImFzeW5jIiksRyg2LCJhc3luYyIpLEcoNywiYXN5bmMiKSxHKDgsImFzeW5jIiksRyg5LCJhc3luYyIpLEcoMTAsImFzeW5jIiksZygpfWlmKDImbil7bGV0IGU9dygpO18oImV4cGVyaW1lbnRJZHMiLGUuZXhwZXJpbWVudElkcykoInVzZUZsZXhpYmxlTGF5b3V0IixlLnVzZUZsZXhpYmxlTGF5b3V0KSgibnVtU2VsZWN0ZWRJdGVtcyIsVygxLDE1LGUubnVtU2VsZWN0ZWRJdGVtcyQpKSgiY29sdW1ucyIsZS5jb2x1bW5zKSgiaHBhcmFtQ29sdW1ucyIsVygyLDE3LGUuaHBhcmFtQ29sdW1ucyQpKSgibWV0cmljQ29sdW1ucyIsVygzLDE5LGUubWV0cmljQ29sdW1ucyQpKSgic2hvd0V4cGVyaW1lbnROYW1lIixlLmlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCkpKCJwYWdlSXRlbXMiLFcoNCwyMSxlLnBhZ2VJdGVtcyQpKSgiZmlsdGVyZWRJdGVtc0xlbmd0aCIsVyg1LDIzLGUuZmlsdGVyZWRJdGVtc0xlbmd0aCQpKSgiYWxsSXRlbXNMZW5ndGgiLFcoNiwyNSxlLmFsbEl0ZW1zTGVuZ3RoJCkpKCJsb2FkaW5nIixXKDcsMjcsZS5sb2FkaW5nJCkpKCJwYWdpbmF0aW9uT3B0aW9uIixXKDgsMjksZS5wYWdpbmF0aW9uT3B0aW9uJCkpKCJyZWdleEZpbHRlciIsVyg5LDMxLGUucmVnZXhGaWx0ZXIkKSkoInNvcnRPcHRpb24iLFcoMTAsMzMsZS5zb3J0T3B0aW9uJCkpKCJ1c2VQYWdpbmF0aW9uIixlLnVzZVBhZ2luYXRpb24pfX1mdW5jdGlvbiBmSGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJydW5zLWRhdGEtdGFibGUiLDMpLEQoInNvcnREYXRhQnkiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnNvcnREYXRhQnkocikpfSkoIm9yZGVyQ29sdW1ucyIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub3JkZXJDb2x1bW5zKHIpKX0pKCJvblNlbGVjdGlvblRvZ2dsZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5TZWxlY3Rpb25Ub2dnbGUocikpfSkoIm9uQWxsU2VsZWN0aW9uVG9nZ2xlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFsbFNlbGVjdGlvblRvZ2dsZShyKSl9KSgib25SdW5Db2xvckNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5Db2xvckNoYW5nZShyKSl9KSgib25SZWdleEZpbHRlckNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SZWdleEZpbHRlckNoYW5nZShyKSl9KSgib25TZWxlY3Rpb25EYmxDbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5TZWxlY3Rpb25EYmxDbGljayhyKSl9KSgidG9nZ2xlRnVsbFNjcmVlbiIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS50b2dnbGVGdWxsU2NyZWVuKCkpfSkoImFkZENvbHVtbiIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuYWRkQ29sdW1uKHIpKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnJlbW92ZUNvbHVtbihyKSl9KSxHKDEsImFzeW5jIiksRygyLCJhc3luYyIpLEcoMywiYXN5bmMiKSxHKDQsImFzeW5jIiksRyg1LCJhc3luYyIpLEcoNiwiYXN5bmMiKSxHKDcsImFzeW5jIiksZygpfWlmKDImbil7bGV0IGU9dygpO18oImhlYWRlcnMiLFcoMSw4LGUucnVuc0NvbHVtbnMkKSkoImRhdGEiLFcoMiwxMCxlLnNvcnRlZFJ1bnNUYWJsZURhdGEkKSkoInNlbGVjdGFibGVDb2x1bW5zIixXKDMsMTIsZS5zZWxlY3RhYmxlQ29sdW1ucyQpKSgic29ydGluZ0luZm8iLFcoNCwxNCxlLnNvcnRpbmdJbmZvJCkpKCJleHBlcmltZW50SWRzIixlLmV4cGVyaW1lbnRJZHMpKCJyZWdleEZpbHRlciIsVyg1LDE2LGUucmVnZXhGaWx0ZXIkKSkoImlzRnVsbFNjcmVlbiIsVyg2LDE4LGUucnVuc1RhYmxlRnVsbFNjcmVlbiQpKSgibG9hZGluZyIsVyg3LDIwLGUubG9hZGluZyQpKX19dmFyIG1IZT1xKFJiLG49Pm4uc3RhdGU9PT1EZS5MT0FESU5HKTtmdW5jdGlvbiBjaWUobix0KXtzd2l0Y2godC50eXBlKXtjYXNlIFNjLkVYUEVSSU1FTlRfTkFNRTpyZXR1cm5bbi5leHBlcmltZW50QWxpYXMsbi5ydW4ubmFtZSxuLnJ1bi5pZF07Y2FzZSBTYy5SVU5fTkFNRTpyZXR1cm5bbi5ydW4ubmFtZSxuLmV4cGVyaW1lbnRBbGlhcyxuLnJ1bi5pZF07Y2FzZSBTYy5IUEFSQU06cmV0dXJuW24uaHBhcmFtcy5nZXQodC5uYW1lKSxuLnJ1bi5uYW1lLG4uZXhwZXJpbWVudEFsaWFzLG4ucnVuLmlkXTtjYXNlIFNjLk1FVFJJQzpyZXR1cm5bbi5tZXRyaWNzLmdldCh0LnRhZyksbi5ydW4ubmFtZSxuLmV4cGVyaW1lbnRBbGlhcyxuLnJ1bi5pZF07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWQ6ICR7dH1gKX19ZnVuY3Rpb24gZGllKG4sdCl7cmV0dXJuIHZvaWQgMD09PXQ/bi5pbmNsdWRlVW5kZWZpbmVkOm4udHlwZT09PVVuLkRJU0NSRVRFP24uZmlsdGVyVmFsdWVzLmluY2x1ZGVzKHQpOm4udHlwZT09PVVuLklOVEVSVkFMJiZuLmZpbHRlckxvd2VyVmFsdWU8PXQmJnQ8PW4uZmlsdGVyVXBwZXJWYWx1ZX12YXIgdWllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc29ydGVkUnVuc1RhYmxlRGF0YSQ9cXQoW10pLHRoaXMubG9hZGluZyQ9bnVsbCx0aGlzLnNvcnRpbmdJbmZvJD10aGlzLnN0b3JlLnNlbGVjdCh1NyksdGhpcy5ocGFyYW1Db2x1bW5zJD1xdChbXSksdGhpcy5tZXRyaWNDb2x1bW5zJD1xdChbXSksdGhpcy51c2VGbGV4aWJsZUxheW91dD0hMSx0aGlzLnVzZVBhZ2luYXRpb249ITEsdGhpcy5jb2x1bW5zPVt4YS5SVU5fTkFNRV0sdGhpcy5zaG93SHBhcmFtc0FuZE1ldHJpY3M9ITEsdGhpcy5mb3JjZUxlZ2FjeVRhYmxlPSExLHRoaXMuc29ydE9wdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QobjIpLHRoaXMucGFnaW5hdGlvbk9wdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QodDIpLHRoaXMucmVnZXhGaWx0ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KF9kKSx0aGlzLmhwYXJhbXNFbmFibGVkPW5ldyBSaSghMSksdGhpcy5ydW5zQ29sdW1ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoZDcpLHRoaXMucnVuc1RhYmxlRnVsbFNjcmVlbiQ9dGhpcy5zdG9yZS5zZWxlY3QoWmgpLHRoaXMuc2VsZWN0YWJsZUNvbHVtbnMkPXRoaXMuc3RvcmUuc2VsZWN0KHJOKS5waXBlKFZpKHRoaXMucnVuc0NvbHVtbnMkKSxVKChbaSxyXSk9PntsZXQgbz1uZXcgU2V0KHIubWFwKCh7bmFtZTphfSk9PmEpKTtyZXR1cm4gaS5maWx0ZXIoYT0+IW8uaGFzKGEubmFtZSkpfSkpLHRoaXMuYWxsUnVuc1RhYmxlRGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoaU4pLnBpcGUoVShpPT5pLm1hcChyPT4oey4uLk9iamVjdC5mcm9tRW50cmllcyhyLmhwYXJhbXMuZW50cmllcygpKSxpZDpyLnJ1bi5pZCxydW46ci5ydW4ubmFtZSxleHBlcmltZW50QWxpYXM6ci5leHBlcmltZW50QWxpYXMsc2VsZWN0ZWQ6ci5zZWxlY3RlZCxjb2xvcjpyLnJ1bkNvbG9yfSkpKSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBBZX1pc0V4cGVyaW1lbnROYW1lVmlzaWJsZSgpe3JldHVybiB0aGlzLmNvbHVtbnMuc29tZShlPT5lPT09eGEuRVhQRVJJTUVOVF9OQU1FKX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuc2VsZWN0KGhmKS5zdWJzY3JpYmUoYT0+e3RoaXMuaHBhcmFtc0VuYWJsZWQubmV4dChhKX0pO2xldCBlPXRoaXMuZXhwZXJpbWVudElkcy5tYXAoYT0+dGhpcy5nZXRSdW5UYWJsZUl0ZW1zRm9yRXhwZXJpbWVudChhKSk7dGhpcy5zb3J0ZWRSdW5zVGFibGVEYXRhJD11bihbdGhpcy5hbGxSdW5zVGFibGVEYXRhJCx0aGlzLnNvcnRpbmdJbmZvJF0pLnBpcGUoVSgoW2Esc10pPT5mdW5jdGlvbihuLHQpe2xldCBlPVsuLi5uXTtyZXR1cm4gZS5zb3J0KChpLHIpPT57bGV0IG89aVt0Lm5hbWVdLGE9clt0Lm5hbWVdO3JldHVybiJleHBlcmltZW50QWxpYXMiPT09dC5uYW1lJiYobz1vLmFsaWFzTnVtYmVyLGE9YS5hbGlhc051bWJlciksbz09PWE/MDp2b2lkIDA9PT1vfHx2b2lkIDA9PT1hP3ZvaWQgMD09PWE/LTE6MTpvPGE9PSh0Lm9yZGVyPT09c28uQVNDRU5ESU5HKT8tMToxfSksZX0oYSxzKSkpO2xldCBpPXVuKGUpLnBpcGUoVShhPT5bXS5jb25jYXQoLi4uYSkpKTt0aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQ9aS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksRWEoMSkpLHRoaXMuYWxsSXRlbXNMZW5ndGgkPXRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJC5waXBlKFUoYT0+YS5sZW5ndGgpKTtsZXQgcj10aGlzLmdldEZpbHRlcmVkSXRlbXMkKHRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJCkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEVhKDEpKTt0aGlzLmZpbHRlcmVkSXRlbXNMZW5ndGgkPXIucGlwZShVKGE9PmEubGVuZ3RoKSksdGhpcy5wYWdlSXRlbXMkPXRoaXMuc29ydGVkQW5kU2xpY2VkSXRlbXMkKHIpLHRoaXMubnVtU2VsZWN0ZWRJdGVtcyQ9dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkLnBpcGUoVShhPT5hLnJlZHVjZSgocyxsKT0+cytOdW1iZXIobC5zZWxlY3RlZCksMCkpKTtsZXQgbz10aGlzLmV4cGVyaW1lbnRJZHMubWFwKGE9PnRoaXMuc3RvcmUuc2VsZWN0KG1IZSx7ZXhwZXJpbWVudElkOmF9KSk7aWYodGhpcy5sb2FkaW5nJD11bihvKS5waXBlKFUoYT0+YS5zb21lKHM9PnMpKSksdGhpcy5zaG93SHBhcmFtc0FuZE1ldHJpY3Mpe2xldCBhPXRoaXMuc3RvcmUuc2VsZWN0KGVwLmdldEV4cGVyaW1lbnRzSHBhcmFtc0FuZE1ldHJpY3NTcGVjcyx7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHN9KTt0aGlzLmhwYXJhbUNvbHVtbnMkPXVuKFt0aGlzLnN0b3JlLnNlbGVjdChlcC5nZXRIcGFyYW1GaWx0ZXJNYXAsdGhpcy5leHBlcmltZW50SWRzKSxhXSkucGlwZShVKChbcyx7aHBhcmFtczpsfV0pPT5sLm1hcCgoe25hbWU6YyxkaXNwbGF5TmFtZTpkfSk9PntsZXQgcD1zLmdldChjKTtpZighcCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGZpbHRlciBmb3IgJHtjfSBtdXN0IGV4aXN0IHdoZW4gdGhlIGhwYXJhbSBleGlzdHNgKTtyZXR1cm57ZGlzcGxheU5hbWU6ZCxuYW1lOmMsZmlsdGVyOnB9fSkpKSx0aGlzLm1ldHJpY0NvbHVtbnMkPXVuKFt0aGlzLnN0b3JlLnNlbGVjdChlcC5nZXRNZXRyaWNGaWx0ZXJNYXAsdGhpcy5leHBlcmltZW50SWRzKSxhXSkucGlwZShVKChbcyx7bWV0cmljczpsfV0pPT5sLm1hcCgoe3RhZzpjLGRpc3BsYXlOYW1lOmR9KT0+e2xldCB1PXMuZ2V0KGMpO2lmKCF1KXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGEgZmlsdGVyIGZvciAke2N9IG11c3QgZXhpc3Qgd2hlbiB0aGUgbWV0cmljIGV4aXN0c2ApO3JldHVybntkaXNwbGF5TmFtZTpkLHRhZzpjLGZpbHRlcjp1fX0pKSl9dGhpcy5jb2x1bW5zLmluY2x1ZGVzKHhhLkNIRUNLQk9YKSYmdGhpcy5zdG9yZS5zZWxlY3QoZmEpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSx1aSgocyxsKT0+TG8ocyxsKSkseWkoKCk9PmkucGlwZShWZShzPT5zLmxlbmd0aD41MDApLHp0KDEpKSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gobGcoe2xvY2FsaXplZE1lc3NhZ2U6IlRoZSBudW1iZXIgb2YgcnVucyBleGNlZWRzIDUwMC4gTmV3IHJ1bnMgYXJlIHVuc2VsZWN0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIn0pKX0pLHRoaXMuc3RvcmUuZGlzcGF0Y2goUFMoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfSkpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1nZXRGaWx0ZXJlZEl0ZW1zJChlKXtyZXR1cm4gdW4oW2UsdGhpcy5zdG9yZS5zZWxlY3QoX2QpXSkucGlwZShVKChbaSxyXSk9PntpZighcilyZXR1cm4gaTtsZXQgbz10aGlzLmNvbHVtbnMuaW5jbHVkZXMoeGEuRVhQRVJJTUVOVF9OQU1FKTtyZXR1cm4gaS5maWx0ZXIoYT0+b2coe3J1bk5hbWU6YS5ydW4ubmFtZSxleHBlcmltZW50QWxpYXM6YS5leHBlcmltZW50QWxpYXN9LHIsbykpfSkseWkoaT0+dGhpcy5zaG93SHBhcmFtc0FuZE1ldHJpY3M/dW4odGhpcy5zdG9yZS5zZWxlY3QoZXAuZ2V0SHBhcmFtRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksdGhpcy5zdG9yZS5zZWxlY3QoZXAuZ2V0TWV0cmljRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcykpLnBpcGUoVSgoW3Isb10pPT5pLmZpbHRlcigoe2hwYXJhbXM6YSxtZXRyaWNzOnN9KT0+Wy4uLnIuZW50cmllcygpXS5ldmVyeSgoW2MsZF0pPT5kaWUoZCxhLmdldChjKSkpJiZbLi4uby5lbnRyaWVzKCldLmV2ZXJ5KChbYyxkXSk9PmRpZShkLHMuZ2V0KGMpKSkpKSk6cXQoaSkpKX1zb3J0ZWRBbmRTbGljZWRJdGVtcyQoZSl7bGV0IGk9dW4oW2UsdGhpcy5zdG9yZS5zZWxlY3QobjIpXSkucGlwZShVKChbbyxhXSk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9dC5rZXksaT1bLi4ubl07cmV0dXJuIG51bGw9PT1lfHx0LmRpcmVjdGlvbj09PUdzLlVOU0VUfHxpLnNvcnQoKHIsbyk9PntsZXQgYT1jaWUocixlKSxzPWNpZShvLGUpO2lmKGEubGVuZ3RoIT09cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGEgZ2l2ZW4gc29ydCBzaG91bGQgcmVzdWx0IGluIHNhbWUgbnVtYmVyIG9mIGl0ZW1zOiAke3R9YCk7Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKyspe2xldCBjPWFbbF0sZD1zW2xdO2lmKGMhPT1kKXtpZih2b2lkIDA9PT1jfHx2b2lkIDA9PT1kKXJldHVybiB2b2lkIDA9PT1kPy0xOjE7aWYodHlwZW9mIGMhPXR5cGVvZiBkKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbXBhcmUgdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlczogJHt0eXBlb2YgY30gdnMuICR7dHlwZW9mIGR9YCk7cmV0dXJuIGM8ZD09KHQuZGlyZWN0aW9uPT09R3MuQVNDKT8tMToxfX1yZXR1cm4gMH0pLGl9KG8sYSkpKTtyZXR1cm4gdW4oW2ksdGhpcy5zdG9yZS5zZWxlY3QodDIpXSkucGlwZShVKChbbyxhXSk9PntpZighdGhpcy51c2VQYWdpbmF0aW9uKXJldHVybiBvLnNsaWNlKCk7bGV0e3BhZ2VTaXplOnMscGFnZUluZGV4Omx9PWE7cmV0dXJuIG8uc2xpY2UobCpzLChsKzEpKnMpfSksTm4oW10pKX1zb3J0RGF0YUJ5KGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goTlMoe3NvcnRpbmdJbmZvOmV9KSl9Z2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQoZSl7cmV0dXJuIHVuKFt0aGlzLnN0b3JlLnNlbGVjdChFYyx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChHUyx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChSdSksdGhpcy5zdG9yZS5zZWxlY3Qoa3UpLHRoaXMuc3RvcmUuc2VsZWN0KEJzKV0pLnBpcGUoVSgoW2kscixvLGEsc10pPT5pLm1hcChsPT57bGV0IGM9bmV3IE1hcDsobC5ocGFyYW1zfHxbXSkuZm9yRWFjaCh1PT57Yy5zZXQodS5uYW1lLHUudmFsdWUpfSk7bGV0IGQ9bmV3IE1hcDtyZXR1cm4obC5tZXRyaWNzfHxbXSkuZm9yRWFjaCh1PT57ZC5zZXQodS50YWcsdS52YWx1ZSl9KSx7cnVuOmwsZXhwZXJpbWVudE5hbWU6cj8ubmFtZXx8IiIsZXhwZXJpbWVudEFsaWFzOnNbZV0sc2VsZWN0ZWQ6Qm9vbGVhbihvJiZvLmdldChsLmlkKSkscnVuQ29sb3I6YVtsLmlkXSxocGFyYW1zOmMsbWV0cmljczpkfX0pKSl9b25SdW5JdGVtU2VsZWN0aW9uVG9nZ2xlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX2Ioe3J1bklkOmUucnVuLmlkfSkpfW9uUnVuU2VsZWN0aW9uVG9nZ2xlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX2Ioe3J1bklkOmV9KSl9b25SdW5TZWxlY3Rpb25EYmxDbGljayhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKElTKHtydW5JZDplfSkpfW9uQWxsU2VsZWN0aW9uVG9nZ2xlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goeWIoe3J1bklkczplfSkpfW9uUGFnZVNlbGVjdGlvblRvZ2dsZShlKXtsZXR7aXRlbXM6aX09ZSxyPWkubWFwKCh7cnVuOm99KT0+by5pZCk7dGhpcy5zdG9yZS5kaXNwYXRjaCh5Yih7cnVuSWRzOnJ9KSl9b25QYWdpbmF0aW9uQ2hhbmdlKGUpe2lmKCF0aGlzLnVzZVBhZ2luYXRpb24pdGhyb3cgbmV3IEVycm9yKCJQYWdpbmF0aW9uIGV2ZW50cyBjYW5ub3QgYmUgZGlzcGF0Y2hlZCB3aGVuIHBhZ2luYXRpb24gaXMgZGlzYWJsZWQiKTtsZXR7cGFnZUluZGV4OmkscGFnZVNpemU6cn09ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKEFTKHtwYWdlSW5kZXg6aSxwYWdlU2l6ZTpyfSkpfW9uU29ydENoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFJTKGUpKX1vblJlZ2V4RmlsdGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYmIoe3JlZ2V4U3RyaW5nOmV9KSl9b25SdW5Db2xvckNoYW5nZSh7cnVuSWQ6ZSxuZXdDb2xvcjppfSl7dGhpcy5zdG9yZS5kaXNwYXRjaChrUyh7cnVuSWQ6ZSxuZXdDb2xvcjppfSkpfW9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKGUpe2xldHtocGFyYW1OYW1lOmksZmlsdGVyVmFsdWVzOnIsaW5jbHVkZVVuZGVmaW5lZDpvfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2goYmYuaHBhcmFtc0Rpc2NyZXRlSHBhcmFtRmlsdGVyQ2hhbmdlZCh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsaHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b30pKX1vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZChlKXtsZXR7bmFtZTppLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm8saW5jbHVkZVVuZGVmaW5lZDphfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2goYmYuaHBhcmFtc0ludGVydmFsSHBhcmFtRmlsdGVyQ2hhbmdlZCh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsaHBhcmFtTmFtZTppLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm8saW5jbHVkZVVuZGVmaW5lZDphfSkpfW9uTWV0cmljRmlsdGVyQ2hhbmdlZChlKXtsZXR7bmFtZTppLGluY2x1ZGVVbmRlZmluZWQ6cixmaWx0ZXJMb3dlclZhbHVlOm8sZmlsdGVyVXBwZXJWYWx1ZTphfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2goYmYuaHBhcmFtc01ldHJpY0ZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLG1ldHJpY1RhZzppLGluY2x1ZGVVbmRlZmluZWQ6cixmaWx0ZXJMb3dlclZhbHVlOm8sZmlsdGVyVXBwZXJWYWx1ZTphfSkpfXRvZ2dsZUZ1bGxTY3JlZW4oKXt0aGlzLnN0b3JlLmRpc3BhdGNoKENTKCkpfWFkZENvbHVtbih7aGVhZGVyOmUsaW5kZXg6aX0pe2UuZW5hYmxlZD0hMCx0aGlzLnN0b3JlLmRpc3BhdGNoKE9TKHtoZWFkZXI6ZSxpbmRleDppfSkpfXJlbW92ZUNvbHVtbihlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEZTKHtoZWFkZXI6ZX0pKX1vcmRlckNvbHVtbnMoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChMUyh7bmV3SGVhZGVyT3JkZXI6ZX0pKX11c2VEYXRhVGFibGUoKXtyZXR1cm4gdGhpcy5ocGFyYW1zRW5hYmxlZC52YWx1ZSYmIXRoaXMuZm9yY2VMZWdhY3lUYWJsZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtdGFibGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJlFlKCJmbGV4LWxheW91dCIsaS51c2VGbGV4aWJsZUxheW91dCl9LGlucHV0czp7dXNlRmxleGlibGVMYXlvdXQ6InVzZUZsZXhpYmxlTGF5b3V0Iix1c2VQYWdpbmF0aW9uOiJ1c2VQYWdpbmF0aW9uIixjb2x1bW5zOiJjb2x1bW5zIixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixzaG93SHBhcmFtc0FuZE1ldHJpY3M6InNob3dIcGFyYW1zQW5kTWV0cmljcyIsZm9yY2VMZWdhY3lUYWJsZToiZm9yY2VMZWdhY3lUYWJsZSJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWzMsImV4cGVyaW1lbnRJZHMiLCJ1c2VGbGV4aWJsZUxheW91dCIsIm51bVNlbGVjdGVkSXRlbXMiLCJjb2x1bW5zIiwiaHBhcmFtQ29sdW1ucyIsIm1ldHJpY0NvbHVtbnMiLCJzaG93RXhwZXJpbWVudE5hbWUiLCJwYWdlSXRlbXMiLCJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIiwiYWxsSXRlbXNMZW5ndGgiLCJsb2FkaW5nIiwicGFnaW5hdGlvbk9wdGlvbiIsInJlZ2V4RmlsdGVyIiwic29ydE9wdGlvbiIsInVzZVBhZ2luYXRpb24iLCJvblNlbGVjdGlvblRvZ2dsZSIsIm9uU2VsZWN0aW9uRGJsQ2xpY2siLCJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLCJvblBhZ2luYXRpb25DaGFuZ2UiLCJvblJlZ2V4RmlsdGVyQ2hhbmdlIiwib25Tb3J0Q2hhbmdlIiwib25SdW5Db2xvckNoYW5nZSIsIm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIiwib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLCJvbk1ldHJpY0ZpbHRlckNoYW5nZWQiLDQsIm5nSWYiXSxbMywiaGVhZGVycyIsImRhdGEiLCJzZWxlY3RhYmxlQ29sdW1ucyIsInNvcnRpbmdJbmZvIiwiZXhwZXJpbWVudElkcyIsInJlZ2V4RmlsdGVyIiwiaXNGdWxsU2NyZWVuIiwibG9hZGluZyIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiLCJvblNlbGVjdGlvblRvZ2dsZSIsIm9uQWxsU2VsZWN0aW9uVG9nZ2xlIiwib25SdW5Db2xvckNoYW5nZSIsIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLCJvblNlbGVjdGlvbkRibENsaWNrIiwidG9nZ2xlRnVsbFNjcmVlbiIsImFkZENvbHVtbiIsInJlbW92ZUNvbHVtbiIsNCwibmdJZiJdLFszLCJleHBlcmltZW50SWRzIiwidXNlRmxleGlibGVMYXlvdXQiLCJudW1TZWxlY3RlZEl0ZW1zIiwiY29sdW1ucyIsImhwYXJhbUNvbHVtbnMiLCJtZXRyaWNDb2x1bW5zIiwic2hvd0V4cGVyaW1lbnROYW1lIiwicGFnZUl0ZW1zIiwiZmlsdGVyZWRJdGVtc0xlbmd0aCIsImFsbEl0ZW1zTGVuZ3RoIiwibG9hZGluZyIsInBhZ2luYXRpb25PcHRpb24iLCJyZWdleEZpbHRlciIsInNvcnRPcHRpb24iLCJ1c2VQYWdpbmF0aW9uIiwib25TZWxlY3Rpb25Ub2dnbGUiLCJvblNlbGVjdGlvbkRibENsaWNrIiwib25QYWdlU2VsZWN0aW9uVG9nZ2xlIiwib25QYWdpbmF0aW9uQ2hhbmdlIiwib25SZWdleEZpbHRlckNoYW5nZSIsIm9uU29ydENoYW5nZSIsIm9uUnVuQ29sb3JDaGFuZ2UiLCJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsIm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIiwib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIl0sWzMsImhlYWRlcnMiLCJkYXRhIiwic2VsZWN0YWJsZUNvbHVtbnMiLCJzb3J0aW5nSW5mbyIsImV4cGVyaW1lbnRJZHMiLCJyZWdleEZpbHRlciIsImlzRnVsbFNjcmVlbiIsImxvYWRpbmciLCJzb3J0RGF0YUJ5Iiwib3JkZXJDb2x1bW5zIiwib25TZWxlY3Rpb25Ub2dnbGUiLCJvbkFsbFNlbGVjdGlvblRvZ2dsZSIsIm9uUnVuQ29sb3JDaGFuZ2UiLCJvblJlZ2V4RmlsdGVyQ2hhbmdlIiwib25TZWxlY3Rpb25EYmxDbGljayIsInRvZ2dsZUZ1bGxTY3JlZW4iLCJhZGRDb2x1bW4iLCJyZW1vdmVDb2x1bW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAscEhlLDExLDM1LCJydW5zLXRhYmxlLWNvbXBvbmVudCIsMCksUygxLGZIZSw4LDIyLCJydW5zLWRhdGEtdGFibGUiLDEpKSwyJmUmJihfKCJuZ0lmIiwhaS51c2VEYXRhVGFibGUoKSksYigxKSxfKCJuZ0lmIixpLnVzZURhdGFUYWJsZSgpKSl9LGRlcGVuZGVuY2llczpbRmUsSG5lLGxpZSxsdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cblxuICAgICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIC5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICAgPiBydW5zLXRhYmxlLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgICA+IHRiLWRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHBpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dIcGFyYW1zQW5kTWV0cmljczoic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixjb2x1bW5zOiJjb2x1bW5zIn0sZGVjbHM6MSx2YXJzOjQsY29uc3RzOltbMywidXNlRmxleGlibGVMYXlvdXQiLCJjb2x1bW5zIiwiZXhwZXJpbWVudElkcyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUCgwLCJydW5zLXRhYmxlIiwwKSwyJmUmJl8oInVzZUZsZXhpYmxlTGF5b3V0IiwhMCkoImNvbHVtbnMiLGkuY29sdW1ucykoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcykoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W3VpZV0sc3R5bGVzOlsicnVucy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5leHBlcmltZW50SWRzJD10aGlzLnN0b3JlLnNlbGVjdChybykucGlwZShVKGk9Pmk/P1tdKSksdGhpcy5jb2x1bW5zJD10aGlzLnN0b3JlLnNlbGVjdChybykucGlwZShVKGk9Plt4YS5DSEVDS0JPWCx4YS5SVU5fTkFNRSxpJiZpLmxlbmd0aD4xP3hhLkVYUEVSSU1FTlRfTkFNRTpudWxsLHhhLlJVTl9DT0xPUl0uZmlsdGVyKHI9Pm51bGwhPT1yKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1zZWxlY3RvciJdXSxpbnB1dHM6e3Nob3dIcGFyYW1zQW5kTWV0cmljczoic2hvd0hwYXJhbXNBbmRNZXRyaWNzIn0sZGVjbHM6Myx2YXJzOjcsY29uc3RzOltbMywiZXhwZXJpbWVudElkcyIsImNvbHVtbnMiLCJzaG93SHBhcmFtc0FuZE1ldHJpY3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInJ1bnMtc2VsZWN0b3ItY29tcG9uZW50IiwwKSxHKDEsImFzeW5jIiksRygyLCJhc3luYyIpKSwyJmUmJl8oImV4cGVyaW1lbnRJZHMiLFcoMSwzLGkuZXhwZXJpbWVudElkcyQpKSgiY29sdW1ucyIsVygyLDUsaS5jb2x1bW5zJCkpKCJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGkuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKX0sZGVwZW5kZW5jaWVzOltwaWUsbHRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHZIZShuLHQpezEmbiYmUCgwLCJtZXRyaWNzLW1haW4tdmlldyIsMil9dmFyIG1pZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcyQ9dGhpcy5zdG9yZS5zZWxlY3QoaGYpLHRoaXMucnVuc1RhYmxlRnVsbFNjcmVlbiQ9dGhpcy5zdG9yZS5zZWxlY3QoWmgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGtlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQiXV0sZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbInNpZGViYXIiLCIiLDMsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdLFsibWFpbiIsIiIsNCwibmdJZiJdLFsibWFpbiIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwidGItZGFzaGJvYXJkLWxheW91dCIpLFAoMSwicnVucy1zZWxlY3RvciIsMCksRygyLCJhc3luYyIpLFMoMyx2SGUsMSwwLCJtZXRyaWNzLW1haW4tdmlldyIsMSksRyg0LCJhc3luYyIpLGcoKSksMiZlJiYoYigxKSxfKCJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLFcoMiwyLGkuc2hvd0hwYXJhbXNBbmRNZXRyaWNzJCkpLGIoMiksXygibmdJZiIsIVcoNCw0LGkucnVuc1RhYmxlRnVsbFNjcmVlbiQpKSl9LGRlcGVuZGVuY2llczpbRmUseFEsa25lLGZpZSxsdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpzdHJldGNoO292ZXJmbG93OmhpZGRlbn0ubm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI0NSwxNTcsLjg1KTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZlYjNiO2NvbG9yOiMyMTIxMjE7ZGlzcGxheTpibG9jaztmbGV4OjAgMH10Yi1kYXNoYm9hcmQtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMTtvdmVyZmxvdzpoaWRkZW59bmF2W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6bm9uZTt3aWR0aDozNDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBuYXZbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBuYXZbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtib3JkZXItcmlnaHQtY29sb3I6IzU1NX1tZXRyaWNzLW1haW4tdmlld1tfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxzND0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsbWksZmldfSksbn0pKCksU0E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlXX0pLG59KSgpLEVBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxtaV19KSxufSkoKSxoaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlLG1pLFFzLGZpLGtnXX0pLG59KSgpLGdpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGVdfSksbn0pKCksVEE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlLG1pLGZpLEVBLGdpZSxoaWVdfSksbn0pKCksX2llPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHt9KSxufSkoKSxJXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsX2llXX0pLG59KSgpLERBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxnQSxtaV19KSxufSkoKSxJQT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsS3VdfSksbn0pKCkseWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltPbmUsVGUsVEEsSV8sREEsVmYsZmksV3Usd2csUXMsbWksWHUsWm5lLExjLCRuZSxyaWUsSUEsUTFdfSksbn0pKCksYmllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSx5aWVdfSksbn0pKCksQV89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe30pLG59KSgpLEFBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxtaV19KSxufSkoKSx2aWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgTCx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEwsdGhpcy5heGlzRGlyZWN0aW9uPWdhLlZFUlRJQ0FMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9fWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50ZW1wb3JhbFNjYWxlKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD9udWxsOnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGgtMV19Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLnN0ZXBzWzBdfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe2xldCBpPTA7Zm9yKDtlPnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnN0ZXBzW2ldKSYmaTx0aGlzLnN0ZXBzLmxlbmd0aC0xOylpKys7cmV0dXJuIHRoaXMuc3RlcHNbaV19Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtsZXQgaT10aGlzLnN0ZXBzLmxlbmd0aC0xO2Zvcig7ZTx0aGlzLnRlbXBvcmFsU2NhbGUodGhpcy5zdGVwc1tpXSkmJmk+MDspaS0tO3JldHVybiB0aGlzLnN0ZXBzW2ldfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3N0ZXBzOiJzdGVwcyIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsdGVtcG9yYWxTY2FsZToidGVtcG9yYWxTY2FsZSJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6Nyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJjYXJkRm9iSGVscGVyIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLEQoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksZygpKSwyJmUmJl8oImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpfSxkZXBlbmRlbmNpZXM6W21BXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx4aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W0FBLFRlLEp1LEFfXX0pLG59KSgpO2h5KGhBLFtkbixGZSxxZixvMCx2aWVdLFtdKTt2YXIgUl89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlXX0pLG59KSgpLFJBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxJX119KSxufSkoKSxrXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsbWldfSksbn0pKCksQ2llPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSx4aWUsZmksbWksTGMsUkEsUl8sa19dfSksbn0pKCksa0E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe30pLG59KSgpLE1pZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsa0EsZmksbWksTGMsS3UsUkEsUl8sa19dfSksbn0pKCksd2llPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxMcixmaSxtaSxRcyxYdV19KSxufSkoKSxQQT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsTHIsd2llLEp1XX0pLG59KSgpLFNpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsa0Esa2csZmksd2csUXMsWHMsSlNdfSksbn0pKCksRWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxUQV19KSxufSkoKSxUaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W0FBLFRlLFBBXX0pLG59KSgpLERpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7aW1wb3J0czpbVGUsU2llLElfLEFfLFBBLGZpLG1pLFh1LExjLEp1LEVpZSxUaWUsUl8sa19dfSksbn0pKCksSWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxNaWUsRGllLENpZSxBX119KSxufSkoKSxBaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W1RlLFhzXX0pLG59KSgpLE9BPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxBaWUsZmksR1QsV3UsbWksWHMsS3UsbmcsSUFdfSksbn0pKCksUmllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxFQSxXdSx3RSxtaSxmaV19KSxufSkoKSxraWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W0lpZSxUZSxTQSxEQSxnQSxmaSxHVCxtaSxRcyxMYyxPQSxSaWUsTWRdfSksbn0pKCksUGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxTQSxzNCxraWUsbWksT0EsYmllXX0pLG59KSgpLE1IZT0iTWF4IHBpbiBsaW1pdCBleGNlZWRlZC4gUmVtb3ZlIGV4aXN0aW5nIHBpbnMgYmVmb3JlIGFkZGluZyBtb3JlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQyNDIiO2Z1bmN0aW9uIHdIZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjokZyxhbGVydEZyb21BY3Rpb246bj0+e2xldHt3YXNQaW5uZWQ6dCxjYW5DcmVhdGVOZXdQaW5zOmV9PW47cmV0dXJuIHR8fGU/bnVsbDp7bG9jYWxpemVkTWVzc2FnZTpNSGV9fX1dfWZ1bmN0aW9uIFNIZSgpe3JldHVybiBxKGdkLG49Pih7c2NhbGFyU21vb3RoaW5nOm59KSl9ZnVuY3Rpb24gRUhlKCl7cmV0dXJuIHEod2Ysbj0+KHtpZ25vcmVPdXRsaWVyczpufSkpfWZ1bmN0aW9uIFRIZSgpe3JldHVybiBxKE1mLG49Pih7dG9vbHRpcFNvcnQ6U3RyaW5nKG4pfSkpfWZ1bmN0aW9uIERIZSgpe3JldHVybiBxKGYxLG49Pih7dGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZDpufSkpfWZ1bmN0aW9uIElIZSgpe3JldHVybiBxKHJnLG49Pih7dGltZVNlcmllc0NhcmRNaW5XaWR0aDpufSkpfWZ1bmN0aW9uIEFIZSgpe3JldHVybiBxKEViLG49Pih7c3RlcFNlbGVjdG9yRW5hYmxlZDpufSkpfWZ1bmN0aW9uIFJIZSgpe3JldHVybiBxKEl1LG49Pih7cmFuZ2VTZWxlY3Rpb25FbmFibGVkOm59KSl9ZnVuY3Rpb24ga0hlKCl7cmV0dXJuIHEoRHUsbj0+KHtsaW5rZWRUaW1lRW5hYmxlZDpufSkpfWZ1bmN0aW9uIFBIZSgpe3JldHVybiBxKFRiLG49Pih7c2luZ2xlU2VsZWN0aW9uSGVhZGVyczpufSkpfWZ1bmN0aW9uIE9IZSgpe3JldHVybiBxKERiLG49Pih7cmFuZ2VTZWxlY3Rpb25IZWFkZXJzOm59KSl9dmFyIE9pZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7cHJvdmlkZXJzOlt7cHJvdmlkZTpRTCx1c2VGYWN0b3J5OnlRLGRlcHM6W1pMXX0se3Byb3ZpZGU6WkwsdXNlVmFsdWU6ZTF9XSxpbXBvcnRzOltUZSxVaCx6cyxPYy5mb3JQbHVnaW4oeGIsbWllKSxKUyxQaWUsd3IuZm9yRmVhdHVyZSgkUyxoUSxRTCksd28uZm9yRmVhdHVyZShbX1FdKSxDYy5yZWdpc3RlckFsZXJ0QWN0aW9ucyh3SGUpLGVyLmRlZmluZUdsb2JhbFNldHRpbmcoU0hlKSxlci5kZWZpbmVHbG9iYWxTZXR0aW5nKEVIZSksZXIuZGVmaW5lR2xvYmFsU2V0dGluZyhUSGUpLGVyLmRlZmluZUdsb2JhbFNldHRpbmcoREhlKSxlci5kZWZpbmVHbG9iYWxTZXR0aW5nKElIZSksZXIuZGVmaW5lR2xvYmFsU2V0dGluZyhBSGUpLGVyLmRlZmluZUdsb2JhbFNldHRpbmcoUkhlKSxlci5kZWZpbmVHbG9iYWxTZXR0aW5nKGtIZSksZXIuZGVmaW5lR2xvYmFsU2V0dGluZyhQSGUpLGVyLmRlZmluZUdsb2JhbFNldHRpbmcoT0hlKV19KSxufSkoKSxGaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W3NRLE9pZV19KSxufSkoKSxRZD0oKCk9PihmdW5jdGlvbihuKXtuLkNVU1RPTV9FTEVNRU5UPSJDVVNUT01fRUxFTUVOVCIsbi5JRlJBTUU9IklGUkFNRSIsbi5OR19DT01QT05FTlQ9Ik5HX0NPTVBPTkVOVCIsbi5OT05FPSJOT05FIn0oUWR8fChRZD17fSkpLFFkKSkoKSxGSGU9WyJwbHVnaW5Db250YWluZXIiXSxMSGU9WyJuZ1BsdWdpbkNvbnRhaW5lciJdO2Z1bmN0aW9uIE5IZShuLHQpezEmbiYmVGkoMCl9ZnVuY3Rpb24gQkhlKG4sdCl7aWYoMSZuJiYoVHQoMCksUygxLE5IZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksRHQoKSksMiZuKXtsZXQgZT13KDIpLGk9dHQoNik7YigxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU/ZS5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOmkpfX1mdW5jdGlvbiBWSGUobix0KXsxJm4mJlRpKDApfWZ1bmN0aW9uIEhIZShuLHQpe2lmKDEmbiYmKFR0KDApLFMoMSxWSGUsMSwwLCJuZy1jb250YWluZXIiLDkpLER0KCkpLDImbil7bGV0IGU9dygyKSxpPXR0KDYpO2IoMSksXygibmdUZW1wbGF0ZU91dGxldCIsZS5lbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU/ZS5lbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6aSl9fWZ1bmN0aW9uIHpIZShuLHQpezEmbiYmVGkoMCl9ZnVuY3Rpb24gVUhlKG4sdCl7aWYoMSZuJiYoVHQoMCksUygxLHpIZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksRHQoKSksMiZuKXtsZXQgZT13KDIpLGk9dHQoNik7YigxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZTppKX19ZnVuY3Rpb24gakhlKG4sdCl7aWYoMSZuJiYoVHQoMCksaCgxLCJoMyIsMTApLFQoMiwiIFRoZXJlXHUyMDE5cyBubyBkYXNoYm9hcmQgYnkgdGhlIG5hbWUgb2YgXHUyMDFjIiksaCgzLCJjb2RlIiksVCg0KSxnKCksVCg1LCJcdTIwMWQuICIpLGcoKSxoKDYsInAiKSxUKDcsIllvdSBjYW4gc2VsZWN0IGEgZGFzaGJvYXJkIGZyb20gdGhlIGxpc3QgYWJvdmUuIiksZygpLGgoOCwicCIpLFRpKDksMTEpLGcoKSxEdCgpKSwyJm4pe2xldCBlPXcoMiksaT10dCg4KTtiKDQpLHV0KGUuYWN0aXZlUGx1Z2luSWQpLGIoNSksXygibmdUZW1wbGF0ZU91dGxldCIsaSl9fWZ1bmN0aW9uIEdIZShuLHQpe2lmKDEmbiYmKFR0KDApLGgoMSwiaDMiLDEyKSxUKDIsIiBObyBkYXNoYm9hcmRzIGFyZSBhY3RpdmUgZm9yIHRoZSBjdXJyZW50IGRhdGEgc2V0LiAiKSxnKCksaCgzLCJwIiksVCg0LCJQcm9iYWJsZSBjYXVzZXM6IiksZygpLGgoNSwidWwiKSg2LCJsaSIpLFQoNywiWW91IGhhdmVuXHUyMDE5dCB3cml0dGVuIGFueSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuIiksZygpLGgoOCwibGkiKSxUKDksIlRlbnNvckJvYXJkIGNhblx1MjAxOXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLiIpLGcoKSgpLFQoMTAsIiBJZiB5b3VcdTIwMTlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUgIiksaCgxMSwiYSIsMTMpLFQoMTIsIlJFQURNRSIpLGcoKSxUKDEzLCIgYW5kIHBlcmhhcHMgdGhlICIpLGgoMTQsImEiLDE0KSxUKDE1LCJUZW5zb3JCb2FyZCB0dXRvcmlhbCIpLGcoKSxUKDE2LCIuICIpLGgoMTcsInAiKSxUKDE4LCIgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUgIiksaCgxOSwiYSIsMTUpLFQoMjAsInRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXMiKSxnKCksVCgyMSwiIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLiAiKSxnKCksaCgyMiwicCIpLFRpKDIzLDExKSxnKCksRHQoKSksMiZuKXt3KDIpO2xldCBlPXR0KDgpO2IoMjMpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiBXSGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNikoMSwiZGl2Iiw3KSxTKDIsQkhlLDIsMSwibmctY29udGFpbmVyIiw4KSxTKDMsSEhlLDIsMSwibmctY29udGFpbmVyIiw4KSxTKDQsVUhlLDIsMSwibmctY29udGFpbmVyIiw4KSxTKDUsakhlLDEwLDIsIm5nLWNvbnRhaW5lciIsOCksUyg2LEdIZSwyNCwxLCJuZy1jb250YWluZXIiLDgpLGcoKSgpKSwyJm4pe2xldCBlPXcoKTtfKCJuZ1N3aXRjaCIsZS5wbHVnaW5Mb2FkU3RhdGUpLGIoMiksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQpLGIoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV04pLGIoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5VTktOT1dOX1BMVUdJTl9JRCksYigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLk5PX0VOQUJMRURfUExVR0lOUyl9fWZ1bmN0aW9uIHFIZShuLHQpe2lmKDEmbiYmKGgoMCwiaDMiLDE2KSxUKDEsIkRhdGEgY291bGQgbm90IGJlIGxvYWRlZC4iKSxnKCksaCgyLCJwIiksVCgzLCJUaGUgVGVuc29yQm9hcmQgc2VydmVyIG1heSBiZSBkb3duIG9yIGluYWNjZXNzaWJsZS4iKSxnKCksaCg0LCJwIiksVGkoNSwxMSksZygpKSwyJm4pe3coKTtsZXQgZT10dCg4KTtiKDUpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiBZSGUobix0KXtpZigxJm4mJihoKDAsInAiLDE5KSgxLCJpIiksVCgyLCJMb2cgZGlyZWN0b3J5OiAiKSxoKDMsInNwYW4iKSxUKDQpLGcoKSgpKCkpLDImbil7bGV0IGU9dygyKTtiKDQpLHV0KGUuZGF0YUxvY2F0aW9uKX19ZnVuY3Rpb24gWEhlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwxNyksVCgxKSxHKDIsImRhdGUiKSxnKCksUygzLFlIZSw1LDEsInAiLDE4KSksMiZuKXtsZXQgZT13KCk7YigxKSx6ZSgiTGFzdCByZWxvYWQ6ICIsSnAoMiwyLGUubGFzdFVwZGF0ZWQsIm1lZGl1bSIpLCIiKSxiKDIpLF8oIm5nSWYiLGUuZGF0YUxvY2F0aW9uKX19dmFyIFFIZT1mdW5jdGlvbihuKXtyZXR1cm57cGx1Z2luczohMCwiaXMtZmlyc3QtcGFydHktcGx1Z2luIjpufX0saWw9KCgpPT4oZnVuY3Rpb24obil7bltuLkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EPTBdPSJFTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCIsbltuLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQ9MV09IkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQiLG5bbi5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV049Ml09IkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTiIsbltuLk5PX0VOQUJMRURfUExVR0lOUz0zXT0iTk9fRU5BQkxFRF9QTFVHSU5TIixuW24uVU5LTk9XTl9QTFVHSU5fSUQ9NF09IlVOS05PV05fUExVR0lOX0lEIixuW24uTE9BREVEPTVdPSJMT0FERUQiLG5bbi5MT0FESU5HPTZdPSJMT0FESU5HIn0oaWx8fChpbD17fSkpLGlsKSkoKSxMaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLnBsdWdpblJlZ2lzdHJ5PWksdGhpcy5wbHVnaW5BcGlIb3N0PXIsdGhpcy5QbHVnaW5Mb2FkU3RhdGU9aWwsdGhpcy5Mb2FkaW5nTWVjaGFuaXNtVHlwZT1RZCx0aGlzLnBsdWdpbkluc3RhbmNlcz1uZXcgTWFwfW5nT25DaGFuZ2VzKGUpe2lmKCF0aGlzLmlzRmVhdHVyZUZsYWdzTG9hZGVkfHwhdGhpcy5hY3RpdmVLbm93blBsdWdpbnx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PURlLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1EZS5MT0FESU5HKXJldHVybjtsZXQgaT1Cb29sZWFuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4mJiF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXModGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCkpO2lmKGUuYWN0aXZlS25vd25QbHVnaW58fGUuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fGUuc2V0dGluZ3NMb2FkU3RhdGUpe2xldCByPWUuYWN0aXZlS25vd25QbHVnaW4/LnByZXZpb3VzVmFsdWU7aWYociYmci5pZCE9PXRoaXMuYWN0aXZlS25vd25QbHVnaW4uaWQmJnRoaXMuaGlkZVBsdWdpbihyKSxpKXtsZXQgbz10aGlzLmNyZWF0ZVBsdWdpbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luKTtvJiZ0aGlzLnBsdWdpbkluc3RhbmNlcy5zZXQodGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCxvKX1lbHNlIHRoaXMuc2hvd1BsdWdpbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luKX0oaXx8ZS5sYXN0VXBkYXRlZCkmJnRoaXMucmVsb2FkKHRoaXMuYWN0aXZlS25vd25QbHVnaW4saSl9aGlkZVBsdWdpbihlKXtpZighdGhpcy5wbHVnaW5JbnN0YW5jZXMuaGFzKGUuaWQpKXJldHVybjtsZXQgaT10aGlzLnBsdWdpbkluc3RhbmNlcy5nZXQoZS5pZCk7T2JqZWN0LmFzc2lnbihpLnN0eWxlLHttYXhIZWlnaHQ6MCxvdmVyZmxvdzoiaGlkZGVuIix2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSJ9KX1zaG93UGx1Z2luKGUpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXMoZS5pZCkpcmV0dXJuO2xldCBpPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtPYmplY3QuYXNzaWduKGkuc3R5bGUse21heEhlaWdodDpudWxsLG92ZXJmbG93Om51bGwsdmlzaWJpbGl0eTpudWxsLHBvc2l0aW9uOm51bGx9KX1jcmVhdGVQbHVnaW4oZSl7bGV0IGk9bnVsbDtzd2l0Y2goZS5sb2FkaW5nX21lY2hhbmlzbS50eXBlKXtjYXNlIFFkLkNVU1RPTV9FTEVNRU5UOmk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlLmxvYWRpbmdfbWVjaGFuaXNtLmVsZW1lbnRfbmFtZSksaS5yZWxvYWRPblJlYWR5PSExLGkuZmVhdHVyZUZsYWdzPXRoaXMuZmVhdHVyZUZsYWdzLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGkpO2JyZWFrO2Nhc2UgUWQuSUZSQU1FOmlmKCF0aGlzLnBsdWdpbkFwaUhvc3QpdGhyb3cgRXJyb3IoYElGUkFNRS1iYXNlZCBwbHVnaW5zIG5vdCBzdXBwb3J0ZWQ6ICR7ZS5pZH1gKTtpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLGkuc2V0QXR0cmlidXRlKCJzcmMiLGBkYXRhL3BsdWdpbl9lbnRyeS5odG1sP25hbWU9JHtlLmlkfWApLHRoaXMucGx1Z2luQXBpSG9zdC5yZWdpc3RlclBsdWdpbklmcmFtZShpLGUuaWQpLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGkpO2JyZWFrO2Nhc2UgUWQuTkdfQ09NUE9ORU5UOmxldCByPXRoaXMucGx1Z2luUmVnaXN0cnkuZ2V0Q29tcG9uZW50KGUuaWQpO2lmKHIpe2xldCBvPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHIpO2k9dGhpcy5uZ1BsdWdpbkNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQobykubG9jYXRpb24ubmF0aXZlRWxlbWVudH1lbHNlIGNvbnNvbGUuZXJyb3IoYE5vIHJlZ2lzdGVyZWQgQW5ndWxhciBjb21wb25lbnQgZm9yIHBsdWdpbjogJHtlLmlkfWApO2JyZWFrO2Nhc2UgUWQuTk9ORTpicmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgcGx1Z2luIil9cmV0dXJuIGl9cmVsb2FkKGUsaSl7aWYoIWkmJmUuZGlzYWJsZV9yZWxvYWQpcmV0dXJuO2xldCByPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtyJiZyLnJlbG9hZCYmci5yZWxvYWQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhRciksQyhPYyksQyhSMSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2lucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoWWUoRkhlLDcsYmUpLFllKExIZSw3LFpuKSksMiZlKXtsZXQgcjt3ZShyPVNlKCkpJiYoaS5wbHVnaW5zQ29udGFpbmVyPXIuZmlyc3QpLHdlKHI9U2UoKSkmJihpLm5nUGx1Z2luQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnthY3RpdmVQbHVnaW5JZDoiYWN0aXZlUGx1Z2luSWQiLGFjdGl2ZUtub3duUGx1Z2luOiJhY3RpdmVLbm93blBsdWdpbiIscGx1Z2luTG9hZFN0YXRlOiJwbHVnaW5Mb2FkU3RhdGUiLGRhdGFMb2NhdGlvbjoiZGF0YUxvY2F0aW9uIixpc0ZlYXR1cmVGbGFnc0xvYWRlZDoiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLHNldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSIsZmVhdHVyZUZsYWdzOiJmZWF0dXJlRmxhZ3MiLGxhc3RVcGRhdGVkOiJsYXN0VXBkYXRlZCIsZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIn0sZmVhdHVyZXM6W0d0XSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1szLCJuZ0NsYXNzIl0sWyJwbHVnaW5Db250YWluZXIiLCIiXSxbIm5nUGx1Z2luQ29udGFpbmVyIiwiIl0sWyJjbGFzcyIsIndhcm5pbmciLDMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJlbnZpcm9ubWVudEZhaWx1cmVEZWZhdWx0VGVtcGxhdGUiLCIiXSxbImRhdGVBbmREYXRhTG9jYXRpb24iLCIiXSxbMSwid2FybmluZyIsMywibmdTd2l0Y2giXSxbMSwid2FybmluZy1tZXNzYWdlIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsInVua25vd24tcGx1Z2luIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwibm8tYWN0aXZlLXBsdWdpbiJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiXSxbImhyZWYiLCJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIl0sWzEsImVudmlyb25tZW50LW5vdC1sb2FkZWQiXSxbMSwibGFzdC1yZWxvYWQtdGltZSJdLFsiY2xhc3MiLCJkYXRhLWxvY2F0aW9uIiw0LCJuZ0lmIl0sWzEsImRhdGEtbG9jYXRpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCwxKSxUaSgyLG51bGwsMiksZygpLFMoNCxXSGUsNyw2LCJkaXYiLDMpLFMoNSxxSGUsNiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LFp0KSxTKDcsWEhlLDQsNSwibmctdGVtcGxhdGUiLG51bGwsNSxadCkpLDImZSYmKF8oIm5nQ2xhc3MiLFNuKDIsUUhlLChudWxsPT1pLmFjdGl2ZUtub3duUGx1Z2luP251bGw6aS5hY3RpdmVLbm93blBsdWdpbi5sb2FkaW5nX21lY2hhbmlzbS50eXBlKSE9PWkuTG9hZGluZ01lY2hhbmlzbVR5cGUuSUZSQU1FKSksYig0KSxfKCJuZ0lmIixpLnBsdWdpbkxvYWRTdGF0ZSE9PWkuUGx1Z2luTG9hZFN0YXRlLkxPQURFRCYmaS5wbHVnaW5Mb2FkU3RhdGUhPT1pLlBsdWdpbkxvYWRTdGF0ZS5MT0FESU5HKSl9LGRlcGVuZGVuY2llczpbYm4sRmUsTW8sJGksc3IsSWhdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjE7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucGx1Z2lucy5pcy1maXJzdC1wYXJ0eS1wbHVnaW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0ud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZmZmO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMwMzAzMH0ud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO21hcmdpbjo4MHB4IGF1dG8gMDttYXgtd2lkdGg6NTQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Lmxhc3QtcmVsb2FkLXRpbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc3R5bGU6aXRhbGljfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaWZyYW1le2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFpIZT1xKFFoLHFvLChuLHQpPT50JiZuW3RdP09iamVjdC5hc3NpZ24oe2lkOnR9LG5bdF0pOm51bGwpLEZBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlS25vd25QbHVnaW4kPXRoaXMuc3RvcmUuc2VsZWN0KFpIZSksdGhpcy5hY3RpdmVQbHVnaW5JZCQ9dGhpcy5zdG9yZS5zZWxlY3QocW8pLHRoaXMucGx1Z2luTG9hZFN0YXRlJD11bih0aGlzLmFjdGl2ZUtub3duUGx1Z2luJCx0aGlzLmFjdGl2ZVBsdWdpbklkJCx0aGlzLnN0b3JlLnNlbGVjdChTUykpLnBpcGUoVSgoW2kscixvXSk9Pm51bGwhPT1vLmZhaWx1cmVDb2RlP28uZmFpbHVyZUNvZGU9PT1Wcy5OT1RfRk9VTkQ/aWwuRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ6by5mYWlsdXJlQ29kZT09PVZzLlBFUk1JU1NJT05fREVOSUVEP2lsLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQ6aWwuRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOOm51bGwhPT1pP2lsLkxPQURFRDpudWxsPT09by5sYXN0TG9hZGVkVGltZUluTXMmJm8uc3RhdGU9PT1EZS5MT0FESU5HP2lsLkxPQURJTkc6cj9pbC5VTktOT1dOX1BMVUdJTl9JRDppbC5OT19FTkFCTEVEX1BMVUdJTlMpKSx0aGlzLmxhc3RMb2FkZWRUaW1lSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoWGgpLHRoaXMuZGF0YUxvY2F0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChFUykucGlwZShVKGk9PmkuZGF0YV9sb2NhdGlvbikpLHRoaXMuaXNGZWF0dXJlRmxhZ3NMb2FkZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEN1KSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoRmEpLHRoaXMuc2V0dGluZ3NMb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KEJhLmdldFNldHRpbmdzTG9hZFN0YXRlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInBsdWdpbnMiXV0saW5wdXRzOntlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxkZWNsczo5LHZhcnM6MjcsY29uc3RzOltbMywiYWN0aXZlS25vd25QbHVnaW4iLCJhY3RpdmVQbHVnaW5JZCIsImRhdGFMb2NhdGlvbiIsImxhc3RVcGRhdGVkIiwicGx1Z2luTG9hZFN0YXRlIiwiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLCJzZXR0aW5nc0xvYWRTdGF0ZSIsImZlYXR1cmVGbGFncyIsImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInBsdWdpbnMtY29tcG9uZW50IiwwKSxHKDEsImFzeW5jIiksRygyLCJhc3luYyIpLEcoMywiYXN5bmMiKSxHKDQsImFzeW5jIiksRyg1LCJhc3luYyIpLEcoNiwiYXN5bmMiKSxHKDcsImFzeW5jIiksRyg4LCJhc3luYyIpKSwyJmUmJl8oImFjdGl2ZUtub3duUGx1Z2luIixXKDEsMTEsaS5hY3RpdmVLbm93blBsdWdpbiQpKSgiYWN0aXZlUGx1Z2luSWQiLFcoMiwxMyxpLmFjdGl2ZVBsdWdpbklkJCkpKCJkYXRhTG9jYXRpb24iLFcoMywxNSxpLmRhdGFMb2NhdGlvbiQpKSgibGFzdFVwZGF0ZWQiLFcoNCwxNyxpLmxhc3RMb2FkZWRUaW1lSW5NcyQpKSgicGx1Z2luTG9hZFN0YXRlIixXKDUsMTksaS5wbHVnaW5Mb2FkU3RhdGUkKSkoImlzRmVhdHVyZUZsYWdzTG9hZGVkIixXKDYsMjEsaS5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQpKSgic2V0dGluZ3NMb2FkU3RhdGUiLFcoNywyMyxpLnNldHRpbmdzTG9hZFN0YXRlJCkpKCJmZWF0dXJlRmxhZ3MiLFcoOCwyNSxpLmZlYXR1cmVGbGFncyQpKSgiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsaS5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSkoImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSIsaS5lbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUpfSxzdHlsZXM6WyJwbHVnaW5zLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0geyBoZWlnaHQ6IDEwMCU7IH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLExBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOlt6cyxUZSxPY119KSxufSkoKTtoeShGQSxbTGllXSxbbHRdKTt2YXIgTmllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kb2N1bWVudD1pLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlPXRoaXMub25WaXNpYmlsaXR5Q2hhbmdlSW1wbC5iaW5kKHRoaXMpLHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5waXBlKHBuKEJhLmdldFJlbG9hZEVuYWJsZWQpKSx0aGlzLnJlbG9hZFBlcmlvZEluTXMkPXRoaXMuc3RvcmUucGlwZShwbihCYS5nZXRSZWxvYWRQZXJpb2RJbk1zKSksdGhpcy5yZWxvYWRUaW1lcklkPW51bGwsdGhpcy5taXNzZWRBdXRvUmVsb2FkPSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgQWV9bmdPbkluaXQoKXt0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSx1bih0aGlzLnJlbG9hZEVuYWJsZWQkLnBpcGUodWkoKSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJC5waXBlKHVpKCkpKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5jYW5jZWxMb2FkKCksZSYmdGhpcy5sb2FkKGkpfSl9b25WaXNpYmlsaXR5Q2hhbmdlSW1wbCgpeyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZ0aGlzLm1pc3NlZEF1dG9SZWxvYWQmJih0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5zdG9yZS5kaXNwYXRjaChzcygpKSl9bG9hZChlKXt0aGlzLnJlbG9hZFRpbWVySWQ9c2V0VGltZW91dCgoKT0+eyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlP3RoaXMuc3RvcmUuZGlzcGF0Y2goc3MoKSk6dGhpcy5taXNzZWRBdXRvUmVsb2FkPSEwLHRoaXMubG9hZChlKX0sZSl9Y2FuY2VsTG9hZCgpe251bGwhPT10aGlzLnJlbG9hZFRpbWVySWQmJmNsZWFyVGltZW91dCh0aGlzLnJlbG9hZFRpbWVySWQpLHRoaXMucmVsb2FkVGltZXJJZD1udWxsfW5nT25EZXN0cm95KCl7dGhpcy5jYW5jZWxMb2FkKCksdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZSksdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhrZSksQyhrdCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlbG9hZGVyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGVuc29yYm9hcmQtd3JhcHBlci1jb21wb25lbnQiXV0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbMSwicGx1Z2lucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUCgwLCJwbHVnaW5zIiwwKSgxLCJyZWxvYWRlciIpfSxkZXBlbmRlbmNpZXM6W0ZBLE5pZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZmxleDogMSAxO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVmllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9cGUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGw0PSJzbW9vdGhpbmciLGM0PSJydW5Db2xvckdyb3VwIixkND0idGFnRmlsdGVyIix1ND0icnVuRmlsdGVyIixwND0icmVnZXg6IixOQT1jbGFzcyBleHRlbmRzIFZpZXtnZXRNZXRyaWNzUGlubmVkQ2FyZHModCl7cmV0dXJuIHVuKFt0LnNlbGVjdChTYiksdC5zZWxlY3QoV1cpXSkucGlwZShVKChbZSxpXSk9PntpZighZS5sZW5ndGgmJiFpLmxlbmd0aClyZXR1cm5bXTtsZXQgbz1bLi4uZS5tYXAoKHtwbHVnaW46YSx0YWc6cyxzYW1wbGU6bCxydW5JZDpjfSk9PntsZXQgZD17cGx1Z2luOmEsdGFnOnN9O3JldHVybiBjcyhhKSYmKGQucnVuSWQ9YyksbHMoYSkmJihkLnNhbXBsZT1sKSxkfSksLi4uaV07cmV0dXJuW3trZXk6InBpbm5lZENhcmRzIix2YWx1ZTpKU09OLnN0cmluZ2lmeShvKX1dfSkpfXNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0KXtyZXR1cm4gdW4oW3RoaXMuZ2V0TWV0cmljc1Bpbm5lZENhcmRzKHQpLHQuc2VsZWN0KElsKS5waXBlKFUoZT0+ZT9be2tleTpkNCx2YWx1ZTplfV06W10pKSx1bihbdC5zZWxlY3QoZmIpLHQuc2VsZWN0KG1mKV0pLnBpcGUoVSgoW2UsaV0pPT5mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QuZW50cmllcyhuKS5tYXAoKFtlLGldKT0+e2lmKHZvaWQgMD09PWkpcmV0dXJue307bGV0IHI9dFtlXTtyZXR1cm4gciYmci5xdWVyeVBhcmFtT3ZlcnJpZGU/e2tleTpyLnF1ZXJ5UGFyYW1PdmVycmlkZSx2YWx1ZTppPy50b1N0cmluZygpfTp7fX0pLmZpbHRlcigoe2tleTplLHZhbHVlOml9KT0+ZSYmdm9pZCAwIT09aSl9KGUsaSkpKSx0LnNlbGVjdChZVykucGlwZShVKGU9Pk51bWJlci5pc0Zpbml0ZShlLnNjYWxhclNtb290aGluZyk/W3trZXk6bDQsdmFsdWU6U3RyaW5nKGUuc2NhbGFyU21vb3RoaW5nKX1dOltdKSksdC5zZWxlY3QoZTIpLnBpcGUoVShlPT57aWYoIWUpcmV0dXJuW107bGV0IGk7c3dpdGNoKGUua2V5KXtjYXNlIFFpLkVYUEVSSU1FTlQ6aT0iZXhwZXJpbWVudCI7YnJlYWs7Y2FzZSBRaS5SVU46aT0icnVuIjticmVhaztjYXNlIFFpLlJFR0VYOmk9YCR7cDR9JHtlLnJlZ2V4U3RyaW5nfWA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcigiU2VyaWFsaXphdGlvbiBub3QgaW1wbGVtZW50ZWQiKX1yZXR1cm5be2tleTpjNCx2YWx1ZTppfV19KSksdC5zZWxlY3QoX2QpLnBpcGUoVShlPT5lP1t7a2V5OnU0LHZhbHVlOmV9XTpbXSkpXSkucGlwZShVKGU9PmUuZmxhdCgpKSl9ZGVzZXJpYWxpemVRdWVyeVBhcmFtcyh0KXtsZXQgZT1udWxsLGk9bnVsbCxyPW51bGwsbz1udWxsLGE9bnVsbDtmb3IobGV0e2tleTpzLHZhbHVlOmx9b2YgdClzd2l0Y2gocyl7Y2FzZSJwaW5uZWRDYXJkcyI6ZT0kSGUobCk7YnJlYWs7Y2FzZSBsNDppPU51bWJlcihsKTticmVhaztjYXNlIGM0OnN3aXRjaChsKXtjYXNlImV4cGVyaW1lbnQiOm89e2tleTpRaS5FWFBFUklNRU5UfTticmVhaztjYXNlInJ1biI6bz17a2V5OlFpLlJVTn19aWYobC5zdGFydHNXaXRoKHA0KSl7bGV0IGM9bC5zbGljZShwNC5sZW5ndGgpO289e2tleTpRaS5SRUdFWCxyZWdleFN0cmluZzpjfX1icmVhaztjYXNlIGQ0OnI9bDticmVhaztjYXNlIHU0OmE9bH1yZXR1cm57bWV0cmljczp7cGlubmVkQ2FyZHM6ZXx8W10sc21vb3RoaW5nOmksdGFnRmlsdGVyOnJ9LHJ1bnM6e2dyb3VwQnk6byxyZWdleEZpbHRlcjphfX19fTtmdW5jdGlvbiAkSGUobil7bGV0IHQ7dHJ5e3Q9SlNPTi5wYXJzZShuKX1jYXRjaHtyZXR1cm4gbnVsbH1pZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbnVsbDtsZXQgZT1bXTtmb3IobGV0IGkgb2YgdCl7bGV0IG89InN0cmluZyI9PXR5cGVvZiBpLnJ1bklkLGE9Im51bWJlciI9PXR5cGVvZiBpLnNhbXBsZTtpZighKCJzdHJpbmciPT10eXBlb2YgaS5wbHVnaW4mJiJzdHJpbmciPT10eXBlb2YgaS50YWcmJihvfHx0eXBlb2YgaS5ydW5JZD4idSIpJiYoYXx8dHlwZW9mIGkuc2FtcGxlPiJ1IikmJnZXKGkucGx1Z2luKSYmaS50YWcpKWNvbnRpbnVlO2lmKGNzKGkucGx1Z2luKSl7aWYoIWkucnVuSWQpY29udGludWV9ZWxzZSBpZihpLnJ1bklkKWNvbnRpbnVlO2lmKGEmJighbHMoaS5wbHVnaW4pfHwhTnVtYmVyLmlzSW50ZWdlcihpLnNhbXBsZSl8fGkuc2FtcGxlPDApKWNvbnRpbnVlO2xldCBkPXtwbHVnaW46aS5wbHVnaW4sdGFnOmkudGFnfTtvJiYoZC5ydW5JZD1pLnJ1bklkKSxhJiYoZC5zYW1wbGU9aS5zYW1wbGUpLGUucHVzaChkKX1yZXR1cm4gZX1mdW5jdGlvbiB6aWUoKXtyZXR1cm5be3JvdXRlS2luZDprbi5FWFBFUklNRU5ULHBhdGg6Ii8iLG5nQ29tcG9uZW50OkJpZSxkZWZhdWx0Um91dGU6ITAsZGVlcExpbmtQcm92aWRlcjpuZXcgTkF9XX1mdW5jdGlvbiBVaWUoKXtyZXR1cm4gbj0+KHQsZSk9Pm4odCxlKX1OQT1vSChbZVUoKV0sTkEpO3ZhciBqaWU9bmV3IGllKCJSb290IHJlZHVjZXJzIHRva2VuIix7ZmFjdG9yeTooKT0+KHt9KX0pLEdpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7cHJvdmlkZXJzOlt7cHJvdmlkZTpQaCx1c2VGYWN0b3J5OlVpZSxtdWx0aTohMH1dLGltcG9ydHM6W3dyLmZvclJvb3QoamllLHtydW50aW1lQ2hlY2tzOntzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExfX0pLHdvLmZvclJvb3QoW10pXX0pLG59KSgpLFdpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Vih7dHlwZTpufSksbi5cdTAyNzVpbmo9Qih7fSksbn0pKCkscWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1WKHt0eXBlOm59KSxuLlx1MDI3NWluaj1CKHtpbXBvcnRzOltUZSxMQSxXaWVdfSksbn0pKCksZjQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPVYoe3R5cGU6bixib290c3RyYXA6W2tZXX0pLG4uXHUwMjc1aW5qPUIoe2ltcG9ydHM6W25nLFVZLEV3LGc4LFVoLFBZLHdsLnJlZ2lzdGVyUm91dGVzKHppZSksUTEsWDEsT1kscWllLHpzLEhZLExZLEdZLHpTLFdZLE5ZLHZGLFIxLExBLEUxLFNFLEdpZSxGaWVdfSksbn0pKCk7ImxvYWRpbmciIT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9mTygpLmJvb3RzdHJhcE1vZHVsZShmNCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCgpPT57Zk8oKS5ib290c3RyYXBNb2R1bGUoZjQpfSl9KSgpOwovKiogdmltOiBldDp0cz00OnN3PTQ6c3RzPTQKICogQGxpY2Vuc2UgUmVxdWlyZUpTIDIuMy42IENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSwgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvYmxvYi9tYXN0ZXIvTElDRU5TRQogKi8KLy9Ob3QgdXNpbmcgc3RyaWN0OiB1bmV2ZW4gc3RyaWN0IHN1cHBvcnQgaW4gYnJvd3NlcnMsICMzOTIsIGFuZCBjYXVzZXMKLy9wcm9ibGVtcyB3aXRoIHJlcXVpcmVqcy5leGVjKCkvdHJhbnNwaWxlciBwbHVnaW5zIHRoYXQgbWF5IG5vdCBiZSBzdHJpY3QuCi8qanNsaW50IHJlZ2V4cDogdHJ1ZSwgbm9tZW46IHRydWUsIHNsb3BweTogdHJ1ZSAqLwovKmdsb2JhbCB3aW5kb3csIG5hdmlnYXRvciwgZG9jdW1lbnQsIGltcG9ydFNjcmlwdHMsIHNldFRpbWVvdXQsIG9wZXJhICovCgp2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CihmdW5jdGlvbiAoZ2xvYmFsLCBzZXRUaW1lb3V0KSB7CiAgICB2YXIgcmVxLCBzLCBoZWFkLCBiYXNlRWxlbWVudCwgZGF0YU1haW4sIHNyYywKICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCwgY3VycmVudGx5QWRkaW5nU2NyaXB0LCBtYWluU2NyaXB0LCBzdWJQYXRoLAogICAgICAgIHZlcnNpb24gPSAnMi4zLjYnLAogICAgICAgIGNvbW1lbnRSZWdFeHAgPSAvXC9cKltcc1xTXSo/XCpcL3woW146Iic9XXxeKVwvXC8uKiQvbWcsCiAgICAgICAgY2pzUmVxdWlyZVJlZ0V4cCA9IC9bXi5dXHMqcmVxdWlyZVxzKlwoXHMqWyInXShbXiciXHNdKylbIiddXHMqXCkvZywKICAgICAgICBqc1N1ZmZpeFJlZ0V4cCA9IC9cLmpzJC8sCiAgICAgICAgY3VyckRpclJlZ0V4cCA9IC9eXC5cLy8sCiAgICAgICAgb3AgPSBPYmplY3QucHJvdG90eXBlLAogICAgICAgIG9zdHJpbmcgPSBvcC50b1N0cmluZywKICAgICAgICBoYXNPd24gPSBvcC5oYXNPd25Qcm9wZXJ0eSwKICAgICAgICBpc0Jyb3dzZXIgPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQpLAogICAgICAgIGlzV2ViV29ya2VyID0gIWlzQnJvd3NlciAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgLy9QUzMgaW5kaWNhdGVzIGxvYWRlZCBhbmQgY29tcGxldGUsIGJ1dCBuZWVkIHRvIHdhaXQgZm9yIGNvbXBsZXRlCiAgICAgICAgLy9zcGVjaWZpY2FsbHkuIFNlcXVlbmNlIGlzICdsb2FkaW5nJywgJ2xvYWRlZCcsIGV4ZWN1dGlvbiwKICAgICAgICAvLyB0aGVuICdjb21wbGV0ZScuIFRoZSBVQSBjaGVjayBpcyB1bmZvcnR1bmF0ZSwgYnV0IG5vdCBzdXJlIGhvdwogICAgICAgIC8vdG8gZmVhdHVyZSB0ZXN0IHcvbyBjYXVzaW5nIHBlcmYgaXNzdWVzLgogICAgICAgIHJlYWR5UmVnRXhwID0gaXNCcm93c2VyICYmIG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ1BMQVlTVEFUSU9OIDMnID8KICAgICAgICAgICAgICAgICAgICAgIC9eY29tcGxldGUkLyA6IC9eKGNvbXBsZXRlfGxvYWRlZCkkLywKICAgICAgICBkZWZDb250ZXh0TmFtZSA9ICdfJywKICAgICAgICAvL09oIHRoZSB0cmFnZWR5LCBkZXRlY3Rpbmcgb3BlcmEuIFNlZSB0aGUgdXNhZ2Ugb2YgaXNPcGVyYSBmb3IgcmVhc29uLgogICAgICAgIGlzT3BlcmEgPSB0eXBlb2Ygb3BlcmEgIT09ICd1bmRlZmluZWQnICYmIG9wZXJhLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE9wZXJhXScsCiAgICAgICAgY29udGV4dHMgPSB7fSwKICAgICAgICBjZmcgPSB7fSwKICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdLAogICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7CgogICAgLy9Db3VsZCBtYXRjaCBzb21ldGhpbmcgbGlrZSAnKS8vY29tbWVudCcsIGRvIG5vdCBsb3NlIHRoZSBwcmVmaXggdG8gY29tbWVudC4KICAgIGZ1bmN0aW9uIGNvbW1lbnRSZXBsYWNlKG1hdGNoLCBzaW5nbGVQcmVmaXgpIHsKICAgICAgICByZXR1cm4gc2luZ2xlUHJlZml4IHx8ICcnOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaXQpIHsKICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0FycmF5KGl0KSB7CiAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEFycmF5XSc7CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5LiBJZiB0aGUgZnVuYyByZXR1cm5zCiAgICAgKiBhIHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoKGFyeSwgZnVuYykgewogICAgICAgIGlmIChhcnkpIHsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkgYmFja3dhcmRzLiBJZiB0aGUgZnVuYwogICAgICogcmV0dXJucyBhIHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoUmV2ZXJzZShhcnksIGZ1bmMpIHsKICAgICAgICBpZiAoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpOwogICAgICAgICAgICBmb3IgKGkgPSBhcnkubGVuZ3RoIC0gMTsgaSA+IC0xOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBoYXNQcm9wKG9iaiwgcHJvcCkgewogICAgICAgIHJldHVybiBoYXNPd24uY2FsbChvYmosIHByb3ApOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE93bihvYmosIHByb3ApIHsKICAgICAgICByZXR1cm4gaGFzUHJvcChvYmosIHByb3ApICYmIG9ialtwcm9wXTsKICAgIH0KCiAgICAvKioKICAgICAqIEN5Y2xlcyBvdmVyIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0IGFuZCBjYWxscyBhIGZ1bmN0aW9uIGZvciBlYWNoCiAgICAgKiBwcm9wZXJ0eSB2YWx1ZS4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB0cnV0aHkgdmFsdWUsIHRoZW4gdGhlCiAgICAgKiBpdGVyYXRpb24gaXMgc3RvcHBlZC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaFByb3Aob2JqLCBmdW5jKSB7CiAgICAgICAgdmFyIHByb3A7CiAgICAgICAgZm9yIChwcm9wIGluIG9iaikgewogICAgICAgICAgICBpZiAoaGFzUHJvcChvYmosIHByb3ApKSB7CiAgICAgICAgICAgICAgICBpZiAoZnVuYyhvYmpbcHJvcF0sIHByb3ApKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTaW1wbGUgZnVuY3Rpb24gdG8gbWl4IGluIHByb3BlcnRpZXMgZnJvbSBzb3VyY2UgaW50byB0YXJnZXQsCiAgICAgKiBidXQgb25seSBpZiB0YXJnZXQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgcHJvcGVydHkgb2YgdGhlIHNhbWUgbmFtZS4KICAgICAqLwogICAgZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBzb3VyY2UsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pIHsKICAgICAgICBpZiAoc291cmNlKSB7CiAgICAgICAgICAgIGVhY2hQcm9wKHNvdXJjZSwgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2UgfHwgIWhhc1Byb3AodGFyZ2V0LCBwcm9wKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChkZWVwU3RyaW5nTWl4aW4gJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAhaXNBcnJheSh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhcmdldFtwcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4odGFyZ2V0W3Byb3BdLCB2YWx1ZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KCiAgICAvL1NpbWlsYXIgdG8gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIGJ1dCB0aGUgJ3RoaXMnIG9iamVjdCBpcyBzcGVjaWZpZWQKICAgIC8vZmlyc3QsIHNpbmNlIGl0IGlzIGVhc2llciB0byByZWFkL2ZpZ3VyZSBvdXQgd2hhdCAndGhpcycgd2lsbCBiZS4KICAgIGZ1bmN0aW9uIGJpbmQob2JqLCBmbikgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShvYmosIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBzY3JpcHRzKCkgewogICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVmYXVsdE9uRXJyb3IoZXJyKSB7CiAgICAgICAgdGhyb3cgZXJyOwogICAgfQoKICAgIC8vQWxsb3cgZ2V0dGluZyBhIGdsb2JhbCB0aGF0IGlzIGV4cHJlc3NlZCBpbgogICAgLy9kb3Qgbm90YXRpb24sIGxpa2UgJ2EuYi5jJy4KICAgIGZ1bmN0aW9uIGdldEdsb2JhbCh2YWx1ZSkgewogICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0KICAgICAgICB2YXIgZyA9IGdsb2JhbDsKICAgICAgICBlYWNoKHZhbHVlLnNwbGl0KCcuJyksIGZ1bmN0aW9uIChwYXJ0KSB7CiAgICAgICAgICAgIGcgPSBnW3BhcnRdOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBnOwogICAgfQoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhbiBlcnJvciB3aXRoIGEgcG9pbnRlciB0byBhbiBVUkwgd2l0aCBtb3JlIGluZm9ybWF0aW9uLgogICAgICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBlcnJvciBJRCB0aGF0IG1hcHMgdG8gYW4gSUQgb24gYSB3ZWIgcGFnZS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIGh1bWFuIHJlYWRhYmxlIGVycm9yLgogICAgICogQHBhcmFtIHtFcnJvcn0gW2Vycl0gdGhlIG9yaWdpbmFsIGVycm9yLCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgKgogICAgICogQHJldHVybnMge0Vycm9yfQogICAgICovCiAgICBmdW5jdGlvbiBtYWtlRXJyb3IoaWQsIG1zZywgZXJyLCByZXF1aXJlTW9kdWxlcykgewogICAgICAgIHZhciBlID0gbmV3IEVycm9yKG1zZyArICdcbmh0dHBzOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sIycgKyBpZCk7CiAgICAgICAgZS5yZXF1aXJlVHlwZSA9IGlkOwogICAgICAgIGUucmVxdWlyZU1vZHVsZXMgPSByZXF1aXJlTW9kdWxlczsKICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgIGUub3JpZ2luYWxFcnJvciA9IGVycjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGU7CiAgICB9CgogICAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgLy9JZiBhIGRlZmluZSBpcyBhbHJlYWR5IGluIHBsYXkgdmlhIGFub3RoZXIgQU1EIGxvYWRlciwKICAgICAgICAvL2RvIG5vdCBvdmVyd3JpdGUuCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICh0eXBlb2YgcmVxdWlyZWpzICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlcXVpcmVqcykpIHsKICAgICAgICAgICAgLy9EbyBub3Qgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIHJlcXVpcmVqcyBpbnN0YW5jZS4KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjZmcgPSByZXF1aXJlanM7CiAgICAgICAgcmVxdWlyZWpzID0gdW5kZWZpbmVkOwogICAgfQoKICAgIC8vQWxsb3cgZm9yIGEgcmVxdWlyZSBjb25maWcgb2JqZWN0CiAgICBpZiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnICYmICFpc0Z1bmN0aW9uKHJlcXVpcmUpKSB7CiAgICAgICAgLy9hc3N1bWUgaXQgaXMgYSBjb25maWcgb2JqZWN0LgogICAgICAgIGNmZyA9IHJlcXVpcmU7CiAgICAgICAgcmVxdWlyZSA9IHVuZGVmaW5lZDsKICAgIH0KCiAgICBmdW5jdGlvbiBuZXdDb250ZXh0KGNvbnRleHROYW1lKSB7CiAgICAgICAgdmFyIGluQ2hlY2tMb2FkZWQsIE1vZHVsZSwgY29udGV4dCwgaGFuZGxlcnMsCiAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkLAogICAgICAgICAgICBjb25maWcgPSB7CiAgICAgICAgICAgICAgICAvL0RlZmF1bHRzLiBEbyBub3Qgc2V0IGEgZGVmYXVsdCBmb3IgbWFwCiAgICAgICAgICAgICAgICAvL2NvbmZpZyB0byBzcGVlZCB1cCBub3JtYWxpemUoKSwgd2hpY2gKICAgICAgICAgICAgICAgIC8vd2lsbCBydW4gZmFzdGVyIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCiAgICAgICAgICAgICAgICB3YWl0U2Vjb25kczogNywKICAgICAgICAgICAgICAgIGJhc2VVcmw6ICcuLycsCiAgICAgICAgICAgICAgICBwYXRoczoge30sCiAgICAgICAgICAgICAgICBidW5kbGVzOiB7fSwKICAgICAgICAgICAgICAgIHBrZ3M6IHt9LAogICAgICAgICAgICAgICAgc2hpbToge30sCiAgICAgICAgICAgICAgICBjb25maWc6IHt9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2lzdHJ5ID0ge30sCiAgICAgICAgICAgIC8vcmVnaXN0cnkgb2YganVzdCBlbmFibGVkIG1vZHVsZXMsIHRvIHNwZWVkCiAgICAgICAgICAgIC8vY3ljbGUgYnJlYWtpbmcgY29kZSB3aGVuIGxvdHMgb2YgbW9kdWxlcwogICAgICAgICAgICAvL2FyZSByZWdpc3RlcmVkLCBidXQgbm90IGFjdGl2YXRlZC4KICAgICAgICAgICAgZW5hYmxlZFJlZ2lzdHJ5ID0ge30sCiAgICAgICAgICAgIHVuZGVmRXZlbnRzID0ge30sCiAgICAgICAgICAgIGRlZlF1ZXVlID0gW10sCiAgICAgICAgICAgIGRlZmluZWQgPSB7fSwKICAgICAgICAgICAgdXJsRmV0Y2hlZCA9IHt9LAogICAgICAgICAgICBidW5kbGVzTWFwID0ge30sCiAgICAgICAgICAgIHJlcXVpcmVDb3VudGVyID0gMSwKICAgICAgICAgICAgdW5ub3JtYWxpemVkQ291bnRlciA9IDE7CgogICAgICAgIC8qKgogICAgICAgICAqIFRyaW1zIHRoZSAuIGFuZCAuLiBmcm9tIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCiAgICAgICAgICogSXQgd2lsbCBrZWVwIGEgbGVhZGluZyBwYXRoIHNlZ21lbnQgaWYgYSAuLiB3aWxsIGJlY29tZQogICAgICAgICAqIHRoZSBmaXJzdCBwYXRoIHNlZ21lbnQsIHRvIGhlbHAgd2l0aCBtb2R1bGUgbmFtZSBsb29rdXBzLAogICAgICAgICAqIHdoaWNoIGFjdCBsaWtlIHBhdGhzLCBidXQgY2FuIGJlIHJlbWFwcGVkLiBCdXQgdGhlIGVuZCByZXN1bHQsCiAgICAgICAgICogYWxsIHBhdGhzIHRoYXQgdXNlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGxvb2sgbm9ybWFsaXplZC4KICAgICAgICAgKiBOT1RFOiB0aGlzIG1ldGhvZCBNT0RJRklFUyB0aGUgaW5wdXQgYXJyYXkuCiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJ5IHRoZSBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHRyaW1Eb3RzKGFyeSkgewogICAgICAgICAgICB2YXIgaSwgcGFydDsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGFydCA9IGFyeVtpXTsKICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHsKICAgICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgIGkgLT0gMTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgIC8vIElmIGF0IHRoZSBzdGFydCwgb3IgcHJldmlvdXMgdmFsdWUgaXMgc3RpbGwgLi4sCiAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGVtIHNvIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoIGl0IG1heQogICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIHdvcmsgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoLCBldmVuIHRob3VnaAogICAgICAgICAgICAgICAgICAgIC8vIGFzIGFuIElEIGl0IGlzIGxlc3MgdGhhbiBpZGVhbC4gSW4gbGFyZ2VyIHBvaW50CiAgICAgICAgICAgICAgICAgICAgLy8gcmVsZWFzZXMsIG1heSBiZSBiZXR0ZXIgdG8ganVzdCBraWNrIG91dCBhbiBlcnJvci4KICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCAoaSA9PT0gMSAmJiBhcnlbMl0gPT09ICcuLicpIHx8IGFyeVtpIC0gMV0gPT09ICcuLicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGkgLSAxLCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaSAtPSAyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogR2l2ZW4gYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSwgbGlrZSAuL3NvbWV0aGluZywgbm9ybWFsaXplIGl0IHRvCiAgICAgICAgICogYSByZWFsIG5hbWUgdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEgcGF0aC4KICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgcmVsYXRpdmUgbmFtZQogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlTmFtZSBhIHJlYWwgbmFtZSB0aGF0IHRoZSBuYW1lIGFyZyBpcyByZWxhdGl2ZQogICAgICAgICAqIHRvLgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gYXBwbHlNYXAgYXBwbHkgdGhlIG1hcCBjb25maWcgdG8gdGhlIHZhbHVlLiBTaG91bGQKICAgICAgICAgKiBvbmx5IGJlIGRvbmUgaWYgdGhpcyBub3JtYWxpemF0aW9uIGlzIGZvciBhIGRlcGVuZGVuY3kgSUQuCiAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1lCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIGJhc2VOYW1lLCBhcHBseU1hcCkgewogICAgICAgICAgICB2YXIgcGtnTWFpbiwgbWFwVmFsdWUsIG5hbWVQYXJ0cywgaSwgaiwgbmFtZVNlZ21lbnQsIGxhc3RJbmRleCwKICAgICAgICAgICAgICAgIGZvdW5kTWFwLCBmb3VuZEksIGZvdW5kU3Rhck1hcCwgc3RhckksIG5vcm1hbGl6ZWRCYXNlUGFydHMsCiAgICAgICAgICAgICAgICBiYXNlUGFydHMgPSAoYmFzZU5hbWUgJiYgYmFzZU5hbWUuc3BsaXQoJy8nKSksCiAgICAgICAgICAgICAgICBtYXAgPSBjb25maWcubWFwLAogICAgICAgICAgICAgICAgc3Rhck1hcCA9IG1hcCAmJiBtYXBbJyonXTsKCiAgICAgICAgICAgIC8vQWRqdXN0IGFueSByZWxhdGl2ZSBwYXRocy4KICAgICAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBuYW1lLmxlbmd0aCAtIDE7CgogICAgICAgICAgICAgICAgLy8gSWYgd2FudGluZyBub2RlIElEIGNvbXBhdGliaWxpdHksIHN0cmlwIC5qcyBmcm9tIGVuZAogICAgICAgICAgICAgICAgLy8gb2YgSURzLiBIYXZlIHRvIGRvIHRoaXMgaGVyZSwgYW5kIG5vdCBpbiBuYW1lVG9VcmwKICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugbm9kZSBhbGxvd3MgZWl0aGVyIC5qcyBvciBub24gLmpzIHRvIG1hcAogICAgICAgICAgICAgICAgLy8gdG8gc2FtZSBmaWxlLgogICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5ub2RlSWRDb21wYXQgJiYganNTdWZmaXhSZWdFeHAudGVzdChuYW1lW2xhc3RJbmRleF0pKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZVtsYXN0SW5kZXhdID0gbmFtZVtsYXN0SW5kZXhdLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTdGFydHMgd2l0aCBhICcuJyBzbyBuZWVkIHRoZSBiYXNlTmFtZQogICAgICAgICAgICAgICAgaWYgKG5hbWVbMF0uY2hhckF0KDApID09PSAnLicgJiYgYmFzZVBhcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgLy9Db252ZXJ0IGJhc2VOYW1lIHRvIGFycmF5LCBhbmQgbG9wIG9mZiB0aGUgbGFzdCBwYXJ0LAogICAgICAgICAgICAgICAgICAgIC8vc28gdGhhdCAuIG1hdGNoZXMgdGhhdCAnZGlyZWN0b3J5JyBhbmQgbm90IG5hbWUgb2YgdGhlIGJhc2VOYW1lJ3MKICAgICAgICAgICAgICAgICAgICAvL21vZHVsZS4gRm9yIGluc3RhbmNlLCBiYXNlTmFtZSBvZiAnb25lL3R3by90aHJlZScsIG1hcHMgdG8KICAgICAgICAgICAgICAgICAgICAvLydvbmUvdHdvL3RocmVlLmpzJywgYnV0IHdlIHdhbnQgdGhlIGRpcmVjdG9yeSwgJ29uZS90d28nIGZvcgogICAgICAgICAgICAgICAgICAgIC8vdGhpcyBub3JtYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRCYXNlUGFydHMgPSBiYXNlUGFydHMuc2xpY2UoMCwgYmFzZVBhcnRzLmxlbmd0aCAtIDEpOwogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVkQmFzZVBhcnRzLmNvbmNhdChuYW1lKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0cmltRG90cyhuYW1lKTsKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLmpvaW4oJy8nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9BcHBseSBtYXAgY29uZmlnIGlmIGF2YWlsYWJsZS4KICAgICAgICAgICAgaWYgKGFwcGx5TWFwICYmIG1hcCAmJiAoYmFzZVBhcnRzIHx8IHN0YXJNYXApKSB7CiAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7CgogICAgICAgICAgICAgICAgb3V0ZXJMb29wOiBmb3IgKGkgPSBuYW1lUGFydHMubGVuZ3RoOyBpID4gMDsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZVNlZ21lbnQgPSBuYW1lUGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZVBhcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgbG9uZ2VzdCBiYXNlTmFtZSBzZWdtZW50IG1hdGNoIGluIHRoZSBjb25maWcuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU28sIGRvIGpvaW5zIG9uIHRoZSBiaWdnZXN0IHRvIHNtYWxsZXN0IGxlbmd0aHMgb2YgYmFzZVBhcnRzLgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBiYXNlUGFydHMubGVuZ3RoOyBqID4gMDsgaiAtPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93bihtYXAsIGJhc2VQYXJ0cy5zbGljZSgwLCBqKS5qb2luKCcvJykpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmFzZU5hbWUgc2VnbWVudCBoYXMgY29uZmlnLCBmaW5kIGlmIGl0IGhhcyBvbmUgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcFZhbHVlLCBuYW1lU2VnbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWF0Y2gsIHVwZGF0ZSBuYW1lIHRvIHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gbWFwVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyTG9vcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgZm9yIGEgc3RhciBtYXAgbWF0Y2gsIGJ1dCBqdXN0IGhvbGQgb24gdG8gaXQsCiAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhIHNob3J0ZXIgc2VnbWVudCBtYXRjaCBsYXRlciBpbiBhIG1hdGNoaW5nCiAgICAgICAgICAgICAgICAgICAgLy9jb25maWcsIHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFwLgogICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTdGFyTWFwICYmIHN0YXJNYXAgJiYgZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFN0YXJNYXAgPSBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICBzdGFySSA9IGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghZm91bmRNYXAgJiYgZm91bmRTdGFyTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBmb3VuZFN0YXJNYXA7CiAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gc3Rhckk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGZvdW5kTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZVBhcnRzLnNwbGljZSgwLCBmb3VuZEksIGZvdW5kTWFwKTsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZVBhcnRzLmpvaW4oJy8nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gSWYgdGhlIG5hbWUgcG9pbnRzIHRvIGEgcGFja2FnZSdzIG5hbWUsIHVzZQogICAgICAgICAgICAvLyB0aGUgcGFja2FnZSBtYWluIGluc3RlYWQuCiAgICAgICAgICAgIHBrZ01haW4gPSBnZXRPd24oY29uZmlnLnBrZ3MsIG5hbWUpOwoKICAgICAgICAgICAgcmV0dXJuIHBrZ01haW4gPyBwa2dNYWluIDogbmFtZTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJlbW92ZVNjcmlwdChuYW1lKSB7CiAgICAgICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICAgICAgICAgIGVhY2goc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0Tm9kZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykgPT09IG5hbWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JykgPT09IGNvbnRleHQuY29udGV4dE5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdE5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaGFzUGF0aEZhbGxiYWNrKGlkKSB7CiAgICAgICAgICAgIHZhciBwYXRoQ29uZmlnID0gZ2V0T3duKGNvbmZpZy5wYXRocywgaWQpOwogICAgICAgICAgICBpZiAocGF0aENvbmZpZyAmJiBpc0FycmF5KHBhdGhDb25maWcpICYmIHBhdGhDb25maWcubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgLy9Qb3Agb2ZmIHRoZSBmaXJzdCBhcnJheSB2YWx1ZSwgc2luY2UgaXQgZmFpbGVkLCBhbmQKICAgICAgICAgICAgICAgIC8vcmV0cnkKICAgICAgICAgICAgICAgIHBhdGhDb25maWcuc2hpZnQoKTsKICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZS51bmRlZihpZCk7CgogICAgICAgICAgICAgICAgLy9DdXN0b20gcmVxdWlyZSB0aGF0IGRvZXMgbm90IGRvIG1hcCB0cmFuc2xhdGlvbiwgc2luY2UKICAgICAgICAgICAgICAgIC8vSUQgaXMgImFic29sdXRlIiwgYWxyZWFkeSBtYXBwZWQvcmVzb2x2ZWQuCiAgICAgICAgICAgICAgICBjb250ZXh0Lm1ha2VSZXF1aXJlKG51bGwsIHsKICAgICAgICAgICAgICAgICAgICBza2lwTWFwOiB0cnVlCiAgICAgICAgICAgICAgICB9KShbaWRdKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9UdXJucyBhIHBsdWdpbiFyZXNvdXJjZSB0byBbcGx1Z2luLCByZXNvdXJjZV0KICAgICAgICAvL3dpdGggdGhlIHBsdWdpbiBiZWluZyB1bmRlZmluZWQgaWYgdGhlIG5hbWUKICAgICAgICAvL2RpZCBub3QgaGF2ZSBhIHBsdWdpbiBwcmVmaXguCiAgICAgICAgZnVuY3Rpb24gc3BsaXRQcmVmaXgobmFtZSkgewogICAgICAgICAgICB2YXIgcHJlZml4LAogICAgICAgICAgICAgICAgaW5kZXggPSBuYW1lID8gbmFtZS5pbmRleE9mKCchJykgOiAtMTsKICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEsIG5hbWUubGVuZ3RoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gW3ByZWZpeCwgbmFtZV07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbW9kdWxlIG1hcHBpbmcgdGhhdCBpbmNsdWRlcyBwbHVnaW4gcHJlZml4LCBtb2R1bGUKICAgICAgICAgKiBuYW1lLCBhbmQgcGF0aC4gSWYgcGFyZW50TW9kdWxlTWFwIGlzIHByb3ZpZGVkIGl0IHdpbGwKICAgICAgICAgKiBhbHNvIG5vcm1hbGl6ZSB0aGUgbmFtZSB2aWEgcmVxdWlyZS5ub3JtYWxpemUoKQogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG1vZHVsZSBuYW1lCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IFtwYXJlbnRNb2R1bGVNYXBdIHBhcmVudCBtb2R1bGUgbWFwCiAgICAgICAgICogZm9yIHRoZSBtb2R1bGUgbmFtZSwgdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIG5hbWVzLgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNOb3JtYWxpemVkOiBpcyB0aGUgSUQgYWxyZWFkeSBub3JtYWxpemVkLgogICAgICAgICAqIFRoaXMgaXMgdHJ1ZSBpZiB0aGlzIGNhbGwgaXMgZG9uZSBmb3IgYSBkZWZpbmUoKSBtb2R1bGUgSUQuCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcDogYXBwbHkgdGhlIG1hcCBjb25maWcgdG8gdGhlIElELgogICAgICAgICAqIFNob3VsZCBvbmx5IGJlIHRydWUgaWYgdGhpcyBtYXAgaXMgZm9yIGEgZGVwZW5kZW5jeS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gbWFrZU1vZHVsZU1hcChuYW1lLCBwYXJlbnRNb2R1bGVNYXAsIGlzTm9ybWFsaXplZCwgYXBwbHlNYXApIHsKICAgICAgICAgICAgdmFyIHVybCwgcGx1Z2luTW9kdWxlLCBzdWZmaXgsIG5hbWVQYXJ0cywKICAgICAgICAgICAgICAgIHByZWZpeCA9IG51bGwsCiAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gcGFyZW50TW9kdWxlTWFwID8gcGFyZW50TW9kdWxlTWFwLm5hbWUgOiBudWxsLAogICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lID0gbmFtZSwKICAgICAgICAgICAgICAgIGlzRGVmaW5lID0gdHJ1ZSwKICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gJyc7CgogICAgICAgICAgICAvL0lmIG5vIG5hbWUsIHRoZW4gaXQgbWVhbnMgaXQgaXMgYSByZXF1aXJlIGNhbGwsIGdlbmVyYXRlIGFuCiAgICAgICAgICAgIC8vaW50ZXJuYWwgbmFtZS4KICAgICAgICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgICAgICAgICBpc0RlZmluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgbmFtZSA9ICdfQHInICsgKHJlcXVpcmVDb3VudGVyICs9IDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChuYW1lKTsKICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOwogICAgICAgICAgICBuYW1lID0gbmFtZVBhcnRzWzFdOwoKICAgICAgICAgICAgaWYgKHByZWZpeCkgewogICAgICAgICAgICAgICAgcHJlZml4ID0gbm9ybWFsaXplKHByZWZpeCwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwogICAgICAgICAgICAgICAgcGx1Z2luTW9kdWxlID0gZ2V0T3duKGRlZmluZWQsIHByZWZpeCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vQWNjb3VudCBmb3IgcmVsYXRpdmUgcGF0aHMgaWYgdGhlcmUgaXMgYSBiYXNlIG5hbWUuCiAgICAgICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICAgICAgICBpZiAocHJlZml4KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwbHVnaW5Nb2R1bGUgJiYgcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvL1BsdWdpbiBpcyBsb2FkZWQsIHVzZSBpdHMgbm9ybWFsaXplIG1ldGhvZC4KICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmVzdGVkIHBsdWdpbiByZWZlcmVuY2VzLCB0aGVuIGRvIG5vdCB0cnkgdG8KICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplLCBhcyBpdCB3aWxsIG5vdCBub3JtYWxpemUgY29ycmVjdGx5LiBUaGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBsYWNlcyBhIHJlc3RyaWN0aW9uIG9uIHJlc291cmNlSWRzLCBhbmQgdGhlIGxvbmdlcgogICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXJtIHNvbHV0aW9uIGlzIG5vdCB0byBub3JtYWxpemUgdW50aWwgcGx1Z2lucyBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZGVkIGFuZCBhbGwgbm9ybWFsaXphdGlvbnMgdG8gYWxsb3cgZm9yIGFzeW5jCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWRpbmcgb2YgYSBsb2FkZXIgcGx1Z2luLiBCdXQgZm9yIG5vdywgZml4ZXMgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbW1vbiB1c2VzLiBEZXRhaWxzIGluICMxMTMxCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZS5pbmRleE9mKCchJykgPT09IC0xID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9BIHJlZ3VsYXIgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKCiAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemVkIG5hbWUgbWF5IGJlIGEgcGx1Z2luIElEIGR1ZSB0byBtYXAgY29uZmlnCiAgICAgICAgICAgICAgICAgICAgLy9hcHBsaWNhdGlvbiBpbiBub3JtYWxpemUuIFRoZSBtYXAgY29uZmlnIHZhbHVlcyBtdXN0CiAgICAgICAgICAgICAgICAgICAgLy9hbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIHNvIGRvIG5vdCBuZWVkIHRvIHJlZG8gdGhhdCBwYXJ0LgogICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5vcm1hbGl6ZWROYW1lKTsKICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lUGFydHNbMV07CiAgICAgICAgICAgICAgICAgICAgaXNOb3JtYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgdXJsID0gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplZE5hbWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0lmIHRoZSBpZCBpcyBhIHBsdWdpbiBpZCB0aGF0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGlmIGl0IG5lZWRzCiAgICAgICAgICAgIC8vbm9ybWFsaXphdGlvbiwgc3RhbXAgaXQgd2l0aCBhIHVuaXF1ZSBJRCBzbyB0d28gbWF0Y2hpbmcgcmVsYXRpdmUKICAgICAgICAgICAgLy9pZHMgdGhhdCBtYXkgY29uZmxpY3QgY2FuIGJlIHNlcGFyYXRlLgogICAgICAgICAgICBzdWZmaXggPSBwcmVmaXggJiYgIXBsdWdpbk1vZHVsZSAmJiAhaXNOb3JtYWxpemVkID8KICAgICAgICAgICAgICAgICAgICAgJ191bm5vcm1hbGl6ZWQnICsgKHVubm9ybWFsaXplZENvdW50ZXIgKz0gMSkgOgogICAgICAgICAgICAgICAgICAgICAnJzsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeCwKICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLAogICAgICAgICAgICAgICAgcGFyZW50TWFwOiBwYXJlbnRNb2R1bGVNYXAsCiAgICAgICAgICAgICAgICB1bm5vcm1hbGl6ZWQ6ICEhc3VmZml4LAogICAgICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IG9yaWdpbmFsTmFtZSwKICAgICAgICAgICAgICAgIGlzRGVmaW5lOiBpc0RlZmluZSwKICAgICAgICAgICAgICAgIGlkOiAocHJlZml4ID8KICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgJyEnICsgbm9ybWFsaXplZE5hbWUgOgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSkgKyBzdWZmaXgKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGdldE1vZHVsZShkZXBNYXApIHsKICAgICAgICAgICAgdmFyIGlkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICBpZiAoIW1vZCkgewogICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdID0gbmV3IGNvbnRleHQuTW9kdWxlKGRlcE1hcCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBtb2Q7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBvbihkZXBNYXAsIG5hbWUsIGZuKSB7CiAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgaWYgKGhhc1Byb3AoZGVmaW5lZCwgaWQpICYmCiAgICAgICAgICAgICAgICAgICAgKCFtb2QgfHwgbW9kLmRlZmluZUVtaXRDb21wbGV0ZSkpIHsKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICBmbihkZWZpbmVkW2lkXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBtb2QgPSBnZXRNb2R1bGUoZGVwTWFwKTsKICAgICAgICAgICAgICAgIGlmIChtb2QuZXJyb3IgJiYgbmFtZSA9PT0gJ2Vycm9yJykgewogICAgICAgICAgICAgICAgICAgIGZuKG1vZC5lcnJvcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIG1vZC5vbihuYW1lLCBmbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZXJyLCBlcnJiYWNrKSB7CiAgICAgICAgICAgIHZhciBpZHMgPSBlcnIucmVxdWlyZU1vZHVsZXMsCiAgICAgICAgICAgICAgICBub3RpZmllZCA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKICAgICAgICAgICAgICAgIGVycmJhY2soZXJyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVhY2goaWRzLCBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL1NldCBlcnJvciBvbiBtb2R1bGUsIHNvIGl0IHNraXBzIHRpbWVvdXQgY2hlY2tzLgogICAgICAgICAgICAgICAgICAgICAgICBtb2QuZXJyb3IgPSBlcnI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKCFub3RpZmllZCkgewogICAgICAgICAgICAgICAgICAgIHJlcS5vbkVycm9yKGVycik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEludGVybmFsIG1ldGhvZCB0byB0cmFuc2ZlciBnbG9iYWxRdWV1ZSBpdGVtcyB0byB0aGlzIGNvbnRleHQncwogICAgICAgICAqIGRlZlF1ZXVlLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHRha2VHbG9iYWxRdWV1ZSgpIHsKICAgICAgICAgICAgLy9QdXNoIGFsbCB0aGUgZ2xvYmFsRGVmUXVldWUgaXRlbXMgaW50byB0aGUgY29udGV4dCdzIGRlZlF1ZXVlCiAgICAgICAgICAgIGlmIChnbG9iYWxEZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGVhY2goZ2xvYmFsRGVmUXVldWUsIGZ1bmN0aW9uKHF1ZXVlSXRlbSkgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IHF1ZXVlSXRlbVswXTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW2lkXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRlZlF1ZXVlLnB1c2gocXVldWVJdGVtKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaGFuZGxlcnMgPSB7CiAgICAgICAgICAgICdyZXF1aXJlJzogZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgaWYgKG1vZC5yZXF1aXJlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5yZXF1aXJlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZShtb2QubWFwKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdleHBvcnRzJzogZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgbW9kLnVzaW5nRXhwb3J0cyA9IHRydWU7CiAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGRlZmluZWRbbW9kLm1hcC5pZF0gPSBtb2QuZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QuZXhwb3J0cyA9IGRlZmluZWRbbW9kLm1hcC5pZF0gPSB7fSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAnbW9kdWxlJzogZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgaWYgKG1vZC5tb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLm1vZHVsZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QubW9kdWxlID0gewogICAgICAgICAgICAgICAgICAgICAgICBpZDogbW9kLm1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiBtb2QubWFwLnVybCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0T3duKGNvbmZpZy5jb25maWcsIG1vZC5tYXAuaWQpIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzOiBtb2QuZXhwb3J0cyB8fCAobW9kLmV4cG9ydHMgPSB7fSkKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIGNsZWFuUmVnaXN0cnkoaWQpIHsKICAgICAgICAgICAgLy9DbGVhbiB1cCBtYWNoaW5lcnkgdXNlZCBmb3Igd2FpdGluZyBtb2R1bGVzLgogICAgICAgICAgICBkZWxldGUgcmVnaXN0cnlbaWRdOwogICAgICAgICAgICBkZWxldGUgZW5hYmxlZFJlZ2lzdHJ5W2lkXTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGJyZWFrQ3ljbGUobW9kLCB0cmFjZWQsIHByb2Nlc3NlZCkgewogICAgICAgICAgICB2YXIgaWQgPSBtb2QubWFwLmlkOwoKICAgICAgICAgICAgaWYgKG1vZC5lcnJvcikgewogICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgbW9kLmVycm9yKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRyYWNlZFtpZF0gPSB0cnVlOwogICAgICAgICAgICAgICAgZWFjaChtb2QuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCwgaSkgewogICAgICAgICAgICAgICAgICAgIHZhciBkZXBJZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBJZCk7CgogICAgICAgICAgICAgICAgICAgIC8vT25seSBmb3JjZSB0aGluZ3MgdGhhdCBoYXZlIG5vdCBjb21wbGV0ZWQKICAgICAgICAgICAgICAgICAgICAvL2JlaW5nIGRlZmluZWQsIHNvIHN0aWxsIGluIHRoZSByZWdpc3RyeSwKICAgICAgICAgICAgICAgICAgICAvL2FuZCBvbmx5IGlmIGl0IGhhcyBub3QgYmVlbiBtYXRjaGVkIHVwCiAgICAgICAgICAgICAgICAgICAgLy9pbiB0aGUgbW9kdWxlIGFscmVhZHkuCiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcCAmJiAhbW9kLmRlcE1hdGNoZWRbaV0gJiYgIXByb2Nlc3NlZFtkZXBJZF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldE93bih0cmFjZWQsIGRlcElkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmRlZmluZURlcChpLCBkZWZpbmVkW2RlcElkXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuY2hlY2soKTsgLy9wYXNzIGZhbHNlPwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShkZXAsIHRyYWNlZCwgcHJvY2Vzc2VkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcHJvY2Vzc2VkW2lkXSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKCkgewogICAgICAgICAgICB2YXIgZXJyLCB1c2luZ1BhdGhGYWxsYmFjaywKICAgICAgICAgICAgICAgIHdhaXRJbnRlcnZhbCA9IGNvbmZpZy53YWl0U2Vjb25kcyAqIDEwMDAsCiAgICAgICAgICAgICAgICAvL0l0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgdGhlIHdhaXQgaW50ZXJ2YWwgYnkgdXNpbmcgd2FpdFNlY29uZHMgb2YgMC4KICAgICAgICAgICAgICAgIGV4cGlyZWQgPSB3YWl0SW50ZXJ2YWwgJiYgKGNvbnRleHQuc3RhcnRUaW1lICsgd2FpdEludGVydmFsKSA8IG5ldyBEYXRlKCkuZ2V0VGltZSgpLAogICAgICAgICAgICAgICAgbm9Mb2FkcyA9IFtdLAogICAgICAgICAgICAgICAgcmVxQ2FsbHMgPSBbXSwKICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IGZhbHNlLAogICAgICAgICAgICAgICAgbmVlZEN5Y2xlQ2hlY2sgPSB0cnVlOwoKICAgICAgICAgICAgLy9EbyBub3QgYm90aGVyIGlmIHRoaXMgY2FsbCB3YXMgYSByZXN1bHQgb2YgYSBjeWNsZSBicmVhay4KICAgICAgICAgICAgaWYgKGluQ2hlY2tMb2FkZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9IHRydWU7CgogICAgICAgICAgICAvL0ZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIGFsbCB0aGUgbW9kdWxlcy4KICAgICAgICAgICAgZWFjaFByb3AoZW5hYmxlZFJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICB2YXIgbWFwID0gbW9kLm1hcCwKICAgICAgICAgICAgICAgICAgICBtb2RJZCA9IG1hcC5pZDsKCiAgICAgICAgICAgICAgICAvL1NraXAgdGhpbmdzIHRoYXQgYXJlIG5vdCBlbmFibGVkIG9yIGluIGVycm9yIHN0YXRlLgogICAgICAgICAgICAgICAgaWYgKCFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIW1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgIHJlcUNhbGxzLnB1c2gobW9kKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIW1vZC5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1vZHVsZSBzaG91bGQgYmUgZXhlY3V0ZWQsIGFuZCBpdCBoYXMgbm90CiAgICAgICAgICAgICAgICAgICAgLy9iZWVuIGluaXRlZCBhbmQgdGltZSBpcyB1cCwgcmVtZW1iZXIgaXQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVkICYmIGV4cGlyZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2RJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nUGF0aEZhbGxiYWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0xvYWRzLnB1c2gobW9kSWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KG1vZElkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1vZC5pbml0ZWQgJiYgbW9kLmZldGNoZWQgJiYgbWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFwLnByZWZpeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ObyByZWFzb24gdG8ga2VlcCBsb29raW5nIGZvciB1bmZpbmlzaGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvYWRpbmcuIElmIHRoZSBvbmx5IHN0aWxsTG9hZGluZyBpcyBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3BsdWdpbiByZXNvdXJjZSB0aG91Z2gsIGtlZXAgZ29pbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2JlY2F1c2UgaXQgbWF5IGJlIHRoYXQgYSBwbHVnaW4gcmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaXMgd2FpdGluZyBvbiBhIG5vbi1wbHVnaW4gY3ljbGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5lZWRDeWNsZUNoZWNrID0gZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGlmIChleHBpcmVkICYmIG5vTG9hZHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAvL0lmIHdhaXQgdGltZSBleHBpcmVkLCB0aHJvdyBlcnJvciBvZiB1bmxvYWRlZCBtb2R1bGVzLgogICAgICAgICAgICAgICAgZXJyID0gbWFrZUVycm9yKCd0aW1lb3V0JywgJ0xvYWQgdGltZW91dCBmb3IgbW9kdWxlczogJyArIG5vTG9hZHMsIG51bGwsIG5vTG9hZHMpOwogICAgICAgICAgICAgICAgZXJyLmNvbnRleHROYW1lID0gY29udGV4dC5jb250ZXh0TmFtZTsKICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKGVycik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vTm90IGV4cGlyZWQsIGNoZWNrIGZvciBhIGN5Y2xlLgogICAgICAgICAgICBpZiAobmVlZEN5Y2xlQ2hlY2spIHsKICAgICAgICAgICAgICAgIGVhY2gocmVxQ2FsbHMsIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKG1vZCwge30sIHt9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0lmIHN0aWxsIHdhaXRpbmcgb24gbG9hZHMsIGFuZCB0aGUgd2FpdGluZyBsb2FkIGlzIHNvbWV0aGluZwogICAgICAgICAgICAvL290aGVyIHRoYW4gYSBwbHVnaW4gcmVzb3VyY2UsIG9yIHRoZXJlIGFyZSBzdGlsbCBvdXRzdGFuZGluZwogICAgICAgICAgICAvL3NjcmlwdHMsIHRoZW4ganVzdCB0cnkgYmFjayBsYXRlci4KICAgICAgICAgICAgaWYgKCghZXhwaXJlZCB8fCB1c2luZ1BhdGhGYWxsYmFjaykgJiYgc3RpbGxMb2FkaW5nKSB7CiAgICAgICAgICAgICAgICAvL1NvbWV0aGluZyBpcyBzdGlsbCB3YWl0aW5nIHRvIGxvYWQuIFdhaXQgZm9yIGl0LCBidXQgb25seQogICAgICAgICAgICAgICAgLy9pZiBhIHRpbWVvdXQgaXMgbm90IGFscmVhZHkgaW4gZWZmZWN0LgogICAgICAgICAgICAgICAgaWYgKChpc0Jyb3dzZXIgfHwgaXNXZWJXb3JrZXIpICYmICFjaGVja0xvYWRlZFRpbWVvdXRJZCkgewogICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgICAgICAgICB9LCA1MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGluQ2hlY2tMb2FkZWQgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIE1vZHVsZSA9IGZ1bmN0aW9uIChtYXApIHsKICAgICAgICAgICAgdGhpcy5ldmVudHMgPSBnZXRPd24odW5kZWZFdmVudHMsIG1hcC5pZCkgfHwge307CiAgICAgICAgICAgIHRoaXMubWFwID0gbWFwOwogICAgICAgICAgICB0aGlzLnNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1hcC5pZCk7CiAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0cyA9IFtdOwogICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXTsKICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkID0gW107CiAgICAgICAgICAgIHRoaXMucGx1Z2luTWFwcyA9IHt9OwogICAgICAgICAgICB0aGlzLmRlcENvdW50ID0gMDsKCiAgICAgICAgICAgIC8qIHRoaXMuZXhwb3J0cyB0aGlzLmZhY3RvcnkKICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW10sCiAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCwgdGhpcy5mZXRjaGVkCiAgICAgICAgICAgICovCiAgICAgICAgfTsKCiAgICAgICAgTW9kdWxlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKGRlcE1hcHMsIGZhY3RvcnksIGVycmJhY2ssIG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIC8vRG8gbm90IGRvIG1vcmUgaW5pdHMgaWYgYWxyZWFkeSBkb25lLiBDYW4gaGFwcGVuIGlmIHRoZXJlCiAgICAgICAgICAgICAgICAvL2FyZSBtdWx0aXBsZSBkZWZpbmUgY2FsbHMgZm9yIHRoZSBzYW1lIG1vZHVsZS4gVGhhdCBpcyBub3QKICAgICAgICAgICAgICAgIC8vYSBub3JtYWwsIGNvbW1vbiBjYXNlLCBidXQgaXQgaXMgYWxzbyBub3QgdW5leHBlY3RlZC4KICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRlZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5OwoKICAgICAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZWdpc3RlciBmb3IgZXJyb3JzIG9uIHRoaXMgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgIHRoaXMub24oJ2Vycm9yJywgZXJyYmFjayk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiBubyBlcnJiYWNrIGFscmVhZHksIGJ1dCB0aGVyZSBhcmUgZXJyb3IgbGlzdGVuZXJzCiAgICAgICAgICAgICAgICAgICAgLy9vbiB0aGlzIG1vZHVsZSwgc2V0IHVwIGFuIGVycmJhY2sgdG8gcGFzcyB0byB0aGUgZGVwcy4KICAgICAgICAgICAgICAgICAgICBlcnJiYWNrID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vRG8gYSBjb3B5IG9mIHRoZSBkZXBlbmRlbmN5IGFycmF5LCBzbyB0aGF0CiAgICAgICAgICAgICAgICAvL3NvdXJjZSBpbnB1dHMgYXJlIG5vdCBtb2RpZmllZC4gRm9yIGV4YW1wbGUKICAgICAgICAgICAgICAgIC8vInNoaW0iIGRlcHMgYXJlIHBhc3NlZCBpbiBoZXJlIGRpcmVjdGx5LCBhbmQKICAgICAgICAgICAgICAgIC8vZG9pbmcgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIG9mIHRoZSBkZXBNYXBzIGFycmF5CiAgICAgICAgICAgICAgICAvL3dvdWxkIGFmZmVjdCB0aGF0IGNvbmZpZy4KICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IGRlcE1hcHMgJiYgZGVwTWFwcy5zbGljZSgwKTsKCiAgICAgICAgICAgICAgICB0aGlzLmVycmJhY2sgPSBlcnJiYWNrOwoKICAgICAgICAgICAgICAgIC8vSW5kaWNhdGUgdGhpcyBtb2R1bGUgaGFzIGJlIGluaXRpYWxpemVkCiAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgdGhpcy5pZ25vcmUgPSBvcHRpb25zLmlnbm9yZTsKCiAgICAgICAgICAgICAgICAvL0NvdWxkIGhhdmUgb3B0aW9uIHRvIGluaXQgdGhpcyBtb2R1bGUgaW4gZW5hYmxlZCBtb2RlLAogICAgICAgICAgICAgICAgLy9vciBjb3VsZCBoYXZlIGJlZW4gcHJldmlvdXNseSBtYXJrZWQgYXMgZW5hYmxlZC4gSG93ZXZlciwKICAgICAgICAgICAgICAgIC8vdGhlIGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHVudGlsIGluaXQgaXMgY2FsbGVkLiBTbwogICAgICAgICAgICAgICAgLy9pZiBlbmFibGVkIHByZXZpb3VzbHksIG5vdyB0cmlnZ2VyIGRlcGVuZGVuY2llcyBhcyBlbmFibGVkLgogICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCB8fCB0aGlzLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAvL0VuYWJsZSB0aGlzIG1vZHVsZSBhbmQgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICAgICAgICAgIC8vV2lsbCBjYWxsIHRoaXMuY2hlY2soKQogICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGRlZmluZURlcDogZnVuY3Rpb24gKGksIGRlcEV4cG9ydHMpIHsKICAgICAgICAgICAgICAgIC8vQmVjYXVzZSBvZiBjeWNsZXMsIGRlZmluZWQgY2FsbGJhY2sgZm9yIGEgZ2l2ZW4KICAgICAgICAgICAgICAgIC8vZXhwb3J0IGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGVwTWF0Y2hlZFtpXSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZFtpXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCAtPSAxOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0c1tpXSA9IGRlcEV4cG9ydHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBmZXRjaDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuZmV0Y2hlZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgY29udGV4dC5zdGFydFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOwoKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLm1hcDsKCiAgICAgICAgICAgICAgICAvL0lmIHRoZSBtYW5hZ2VyIGlzIGZvciBhIHBsdWdpbiBtYW5hZ2VkIHJlc291cmNlLAogICAgICAgICAgICAgICAgLy9hc2sgdGhlIHBsdWdpbiB0byBsb2FkIGl0IG5vdy4KICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoaW0pIHsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ha2VSZXF1aXJlKHRoaXMubWFwLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUKICAgICAgICAgICAgICAgICAgICB9KSh0aGlzLnNoaW0uZGVwcyB8fCBbXSwgYmluZCh0aGlzLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXAucHJlZml4ID8gdGhpcy5jYWxsUGx1Z2luKCkgOiB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vUmVndWxhciBkZXBlbmRlbmN5LgogICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXAucHJlZml4ID8gdGhpcy5jYWxsUGx1Z2luKCkgOiB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLm1hcC51cmw7CgogICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICBpZiAoIXVybEZldGNoZWRbdXJsXSkgewogICAgICAgICAgICAgICAgICAgIHVybEZldGNoZWRbdXJsXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2FkKHRoaXMubWFwLmlkLCB1cmwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENoZWNrcyBpZiB0aGUgbW9kdWxlIGlzIHJlYWR5IHRvIGRlZmluZSBpdHNlbGYsIGFuZCBpZiBzbywKICAgICAgICAgICAgICogZGVmaW5lIGl0LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2hlY2s6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8IHRoaXMuZW5hYmxpbmcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGVyciwgY2pzTW9kdWxlLAogICAgICAgICAgICAgICAgICAgIGlkID0gdGhpcy5tYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgZGVwRXhwb3J0cyA9IHRoaXMuZGVwRXhwb3J0cywKICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gdGhpcy5leHBvcnRzLAogICAgICAgICAgICAgICAgICAgIGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7CgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRlZCkgewogICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZmV0Y2ggaWYgbm90IGFscmVhZHkgaW4gdGhlIGRlZlF1ZXVlLgogICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChjb250ZXh0LmRlZlF1ZXVlTWFwLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzLmVycm9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGVmaW5pbmcpIHsKICAgICAgICAgICAgICAgICAgICAvL1RoZSBmYWN0b3J5IGNvdWxkIHRyaWdnZXIgYW5vdGhlciByZXF1aXJlIGNhbGwKICAgICAgICAgICAgICAgICAgICAvL3RoYXQgd291bGQgcmVzdWx0IGluIGNoZWNraW5nIHRoaXMgbW9kdWxlIHRvCiAgICAgICAgICAgICAgICAgICAgLy9kZWZpbmUgaXRzZWxmIGFnYWluLiBJZiBhbHJlYWR5IGluIHRoZSBwcm9jZXNzCiAgICAgICAgICAgICAgICAgICAgLy9vZiBkb2luZyB0aGF0LCBza2lwIHRoaXMgd29yay4KICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVwQ291bnQgPCAxICYmICF0aGlzLmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZmFjdG9yeSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlcmUgaXMgYW4gZXJyb3IgbGlzdGVuZXIsIGZhdm9yIHBhc3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhhdCBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yLiBIb3dldmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmx5IGRvIGl0IGZvciBkZWZpbmUoKSdkICBtb2R1bGVzLiByZXF1aXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VycmJhY2tzIHNob3VsZCBub3QgYmUgY2FsbGVkIGZvciBmYWlsdXJlcyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGVpciBjYWxsYmFja3MgKCM2OTkpLiBIb3dldmVyIGlmIGEgZ2xvYmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29uRXJyb3IgaXMgc2V0LCB1c2UgdGhhdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5ldmVudHMuZXJyb3IgJiYgdGhpcy5tYXAuaXNEZWZpbmUpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IgIT09IGRlZmF1bHRPbkVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhdm9yIHJldHVybiB2YWx1ZSBvdmVyIGV4cG9ydHMuIElmIG5vZGUvY2pzIGluIHBsYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHdpbGwgbm90IGhhdmUgYSByZXR1cm4gdmFsdWUgYW55d2F5LiBGYXZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kdWxlLmV4cG9ydHMgYXNzaWdubWVudCBvdmVyIGV4cG9ydHMgb2JqZWN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVmaW5lICYmIGV4cG9ydHMgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZSA9IHRoaXMubW9kdWxlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjanNNb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNqc01vZHVsZS5leHBvcnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51c2luZ0V4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9leHBvcnRzIGFscmVhZHkgc2V0IHRoZSBkZWZpbmVkIHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gdGhpcy5leHBvcnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNYXAgPSB0aGlzLm1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSB0aGlzLm1hcC5pc0RlZmluZSA/IFt0aGlzLm1hcC5pZF0gOiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlVHlwZSA9IHRoaXMubWFwLmlzRGVmaW5lID8gJ2RlZmluZScgOiAncmVxdWlyZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoKHRoaXMuZXJyb3IgPSBlcnIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBsaXRlcmFsIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gZmFjdG9yeTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBvcnRzID0gZXhwb3J0czsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiAhdGhpcy5pZ25vcmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWRbaWRdID0gZXhwb3J0czsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLm9uUmVzb3VyY2VMb2FkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc0xvYWRNYXBzID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh0aGlzLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzTG9hZE1hcHMucHVzaChkZXBNYXAubm9ybWFsaXplZE1hcCB8fCBkZXBNYXApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5vblJlc291cmNlTG9hZChjb250ZXh0LCB0aGlzLm1hcCwgcmVzTG9hZE1hcHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHVwCiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vRmluaXNoZWQgdGhlIGRlZmluZSBzdGFnZS4gQWxsb3cgY2FsbGluZyBjaGVjayBhZ2FpbgogICAgICAgICAgICAgICAgICAgIC8vdG8gYWxsb3cgZGVmaW5lIG5vdGlmaWNhdGlvbnMgYmVsb3cgaW4gdGhlIGNhc2Ugb2YgYQogICAgICAgICAgICAgICAgICAgIC8vY3ljbGUuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZpbmVkICYmICF0aGlzLmRlZmluZUVtaXR0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVFbWl0dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWZpbmVkJywgdGhpcy5leHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVFbWl0Q29tcGxldGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBjYWxsUGx1Z2luOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXAsCiAgICAgICAgICAgICAgICAgICAgaWQgPSBtYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgLy9NYXAgYWxyZWFkeSBub3JtYWxpemVkIHRoZSBwcmVmaXguCiAgICAgICAgICAgICAgICAgICAgcGx1Z2luTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4KTsKCiAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAogICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCiAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChwbHVnaW5NYXApOwoKICAgICAgICAgICAgICAgIG9uKHBsdWdpbk1hcCwgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW4pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZCwgbm9ybWFsaXplZE1hcCwgbm9ybWFsaXplZE1vZCwKICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgdGhpcy5tYXAuaWQpLAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5tYXAubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHRoaXMubWFwLnBhcmVudE1hcCA/IHRoaXMubWFwLnBhcmVudE1hcC5uYW1lIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZShtYXAucGFyZW50TWFwLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL0lmIGN1cnJlbnQgbWFwIGlzIG5vdCBub3JtYWxpemVkLCB3YWl0IGZvciB0aGF0CiAgICAgICAgICAgICAgICAgICAgLy9ub3JtYWxpemVkIG5hbWUgdG8gbG9hZCBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcuCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLnVubm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgSUQgaWYgdGhlIHBsdWdpbiBhbGxvd3MgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4ubm9ybWFsaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGx1Z2luLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmVmaXggYW5kIG5hbWUgc2hvdWxkIGFscmVhZHkgYmUgbm9ybWFsaXplZCwgbm8gbmVlZAogICAgICAgICAgICAgICAgICAgICAgICAvL2ZvciBhcHBseWluZyBtYXAgY29uZmlnIGFnYWluIGVpdGhlci4KICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCArICchJyArIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnBhcmVudE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG9uKG5vcm1hbGl6ZWRNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAubm9ybWFsaXplZE1hcCA9IG5vcm1hbGl6ZWRNYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSwgbnVsbCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmU6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2QgPSBnZXRPd24ocmVnaXN0cnksIG5vcm1hbGl6ZWRNYXAuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZE1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gobm9ybWFsaXplZE1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZC5vbignZXJyb3InLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZC5lbmFibGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9JZiBhIHBhdGhzIGNvbmZpZywgdGhlbiBqdXN0IGxvYWQgdGhhdCBmaWxlIGluc3RlYWQgdG8KICAgICAgICAgICAgICAgICAgICAvL3Jlc29sdmUgdGhlIHBsdWdpbiwgYXMgaXQgaXMgYnVpbHQgaW50byB0aGF0IHBhdGhzIGxheWVyLgogICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGVJZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC51cmwgPSBjb250ZXh0Lm5hbWVUb1VybChidW5kbGVJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBsb2FkID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSwgbnVsbCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgbG9hZC5lcnJvciA9IGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTW9kdWxlcyA9IFtpZF07CgogICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSB0ZW1wIHVubm9ybWFsaXplZCBtb2R1bGVzIGZvciB0aGlzIG1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IHdpbGwgbmV2ZXIgYmUgcmVzb2x2ZWQgb3RoZXJ3aXNlIG5vdy4KICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlkLmluZGV4T2YoaWQgKyAnX3Vubm9ybWFsaXplZCcpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShtb2QubWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vQWxsb3cgcGx1Z2lucyB0byBsb2FkIG90aGVyIGNvZGUgd2l0aG91dCBoYXZpbmcgdG8ga25vdyB0aGUKICAgICAgICAgICAgICAgICAgICAvL2NvbnRleHQgb3IgaG93IHRvICdjb21wbGV0ZScgdGhlIGxvYWQuCiAgICAgICAgICAgICAgICAgICAgbG9hZC5mcm9tVGV4dCA9IGJpbmQodGhpcywgZnVuY3Rpb24gKHRleHQsIHRleHRBbHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLypqc2xpbnQgZXZpbDogdHJ1ZSAqLwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IG1hcC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTWFwID0gbWFrZU1vZHVsZU1hcChtb2R1bGVOYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ludGVyYWN0aXZlID0gdXNlSW50ZXJhY3RpdmU7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0FzIG9mIDIuMS4wLCBzdXBwb3J0IGp1c3QgcGFzc2luZyB0aGUgdGV4dCwgdG8gcmVpbmZvcmNlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZnJvbVRleHQgb25seSBiZWluZyBjYWxsZWQgb25jZSBwZXIgcmVzb3VyY2UuIFN0aWxsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc3VwcG9ydCBvbGQgc3R5bGUgb2YgcGFzc2luZyBtb2R1bGVOYW1lIGJ1dCBkaXNjYXJkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhhdCBtb2R1bGVOYW1lIGluIGZhdm9yIG9mIHRoZSBpbnRlcm5hbCByZWYuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0QWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dEFsdDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9UdXJuIG9mZiBpbnRlcmFjdGl2ZSBzY3JpcHQgbWF0Y2hpbmcgZm9yIElFIGZvciBhbnkgZGVmaW5lCiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FsbHMgaW4gdGhlIHRleHQsIHRoZW4gdHVybiBpdCBiYWNrIG9uIGF0IHRoZSBlbmQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9QcmltZSB0aGUgc3lzdGVtIGJ5IGNyZWF0aW5nIGEgbW9kdWxlIGluc3RhbmNlIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAvL2l0LgogICAgICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUobW9kdWxlTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vVHJhbnNmZXIgYW55IGNvbmZpZyB0byB0aGlzIG90aGVyIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Byb3AoY29uZmlnLmNvbmZpZywgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY29uZmlnW21vZHVsZU5hbWVdID0gY29uZmlnLmNvbmZpZ1tpZF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEuZXhlYyh0ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdmcm9tdGV4dGV2YWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbVRleHQgZXZhbCBmb3IgJyArIGlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZhaWxlZDogJyArIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhlIHBsdWdpbgogICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKG1vZHVsZU1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N1cHBvcnQgYW5vbnltb3VzIG1vZHVsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9CaW5kIHRoZSB2YWx1ZSBvZiB0aGF0IG1vZHVsZSB0byB0aGUgdmFsdWUgZm9yIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXNvdXJjZSBJRC4KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlKFttb2R1bGVOYW1lXSwgbG9hZCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vVXNlIHBhcmVudE5hbWUgaGVyZSBzaW5jZSB0aGUgcGx1Z2luJ3MgbmFtZSBpcyBub3QgcmVsaWFibGUsCiAgICAgICAgICAgICAgICAgICAgLy9jb3VsZCBiZSBzb21lIHdlaXJkIHN0cmluZyB3aXRoIG5vIHBhdGggdGhhdCBhY3R1YWxseSB3YW50cyB0bwogICAgICAgICAgICAgICAgICAgIC8vcmVmZXJlbmNlIHRoZSBwYXJlbnROYW1lJ3MgcGF0aC4KICAgICAgICAgICAgICAgICAgICBwbHVnaW4ubG9hZChtYXAubmFtZSwgbG9jYWxSZXF1aXJlLCBsb2FkLCBjb25maWcpOwogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHNbcGx1Z2luTWFwLmlkXSA9IHBsdWdpbk1hcDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgZW5hYmxlZFJlZ2lzdHJ5W3RoaXMubWFwLmlkXSA9IHRoaXM7CiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIC8vU2V0IGZsYWcgbWVudGlvbmluZyB0aGF0IHRoZSBtb2R1bGUgaXMgZW5hYmxpbmcsCiAgICAgICAgICAgICAgICAvL3NvIHRoYXQgaW1tZWRpYXRlIGNhbGxzIHRvIHRoZSBkZWZpbmVkIGNhbGxiYWNrcwogICAgICAgICAgICAgICAgLy9mb3IgZGVwZW5kZW5jaWVzIGRvIG5vdCB0cmlnZ2VyIGluYWR2ZXJ0ZW50IGxvYWQKICAgICAgICAgICAgICAgIC8vd2l0aCB0aGUgZGVwQ291bnQgc3RpbGwgYmVpbmcgemVyby4KICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxpbmcgPSB0cnVlOwoKICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggZGVwZW5kZW5jeQogICAgICAgICAgICAgICAgZWFjaCh0aGlzLmRlcE1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcE1hcCwgaSkgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbW9kLCBoYW5kbGVyOwoKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlcE1hcCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9EZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIGRlcE1hcAogICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCB3aXJlZCB1cCB0byB0aGlzIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICAgICAgZGVwTWFwID0gbWFrZU1vZHVsZU1hcChkZXBNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWFwLmlzRGVmaW5lID8gdGhpcy5tYXAgOiB0aGlzLm1hcC5wYXJlbnRNYXApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLnNraXBNYXApOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHNbaV0gPSBkZXBNYXA7CgogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gZ2V0T3duKGhhbmRsZXJzLCBkZXBNYXAuaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0c1tpXSA9IGhhbmRsZXIodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgKz0gMTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51bmRlZmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVEZXAoaSwgZGVwRXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCB0aGlzLmVycmJhY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gZGlyZWN0IGVycmJhY2sgb24gdGhpcyBtb2R1bGUsIGJ1dCBzb21ldGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2UgaXMgbGlzdGVuaW5nIGZvciBlcnJvcnMsIHNvIGJlIHN1cmUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSB0aGUgZXJyb3IgY29ycmVjdGx5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZXJyb3InLCBiaW5kKHRoaXMsIGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZCA9IGRlcE1hcC5pZDsKICAgICAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF07CgogICAgICAgICAgICAgICAgICAgIC8vU2tpcCBzcGVjaWFsIG1vZHVsZXMgbGlrZSAncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScKICAgICAgICAgICAgICAgICAgICAvL0Fsc28sIGRvbid0IGNhbGwgZW5hYmxlIGlmIGl0IGlzIGFscmVhZHkgZW5hYmxlZCwKICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGFudCBpbiBjaXJjdWxhciBkZXBlbmRlbmN5IGNhc2VzLgogICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChoYW5kbGVycywgaWQpICYmIG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUoZGVwTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBwbHVnaW4gdGhhdCBpcyB1c2VkIGluCiAgICAgICAgICAgICAgICAvL2EgZGVwZW5kZW5jeQogICAgICAgICAgICAgICAgZWFjaFByb3AodGhpcy5wbHVnaW5NYXBzLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW5NYXApIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBwbHVnaW5NYXAuaWQpOwogICAgICAgICAgICAgICAgICAgIGlmIChtb2QgJiYgIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxpbmcgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBvbjogZnVuY3Rpb24gKG5hbWUsIGNiKSB7CiAgICAgICAgICAgICAgICB2YXIgY2JzID0gdGhpcy5ldmVudHNbbmFtZV07CiAgICAgICAgICAgICAgICBpZiAoIWNicykgewogICAgICAgICAgICAgICAgICAgIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdID0gW107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYnMucHVzaChjYik7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBlbWl0OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7CiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZXZlbnRzW25hbWVdLCBmdW5jdGlvbiAoY2IpIHsKICAgICAgICAgICAgICAgICAgICBjYihldnQpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2Vycm9yJykgewogICAgICAgICAgICAgICAgICAgIC8vTm93IHRoYXQgdGhlIGVycm9yIGhhbmRsZXIgd2FzIHRyaWdnZXJlZCwgcmVtb3ZlCiAgICAgICAgICAgICAgICAgICAgLy90aGUgbGlzdGVuZXJzLCBzaW5jZSB0aGlzIGJyb2tlbiBNb2R1bGUgaW5zdGFuY2UKICAgICAgICAgICAgICAgICAgICAvL2NhbiBzdGF5IGFyb3VuZCBmb3IgYSB3aGlsZSBpbiB0aGUgcmVnaXN0cnkuCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRzW25hbWVdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gY2FsbEdldE1vZHVsZShhcmdzKSB7CiAgICAgICAgICAgIC8vU2tpcCBtb2R1bGVzIGFscmVhZHkgZGVmaW5lZC4KICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGFyZ3NbMF0pKSB7CiAgICAgICAgICAgICAgICBnZXRNb2R1bGUobWFrZU1vZHVsZU1hcChhcmdzWzBdLCBudWxsLCB0cnVlKSkuaW5pdChhcmdzWzFdLCBhcmdzWzJdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIobm9kZSwgZnVuYywgbmFtZSwgaWVOYW1lKSB7CiAgICAgICAgICAgIC8vRmF2b3IgZGV0YWNoRXZlbnQgYmVjYXVzZSBvZiBJRTkKICAgICAgICAgICAgLy9pc3N1ZSwgc2VlIGF0dGFjaEV2ZW50L2FkZEV2ZW50TGlzdGVuZXIgY29tbWVudCBlbHNld2hlcmUKICAgICAgICAgICAgLy9pbiB0aGlzIGZpbGUuCiAgICAgICAgICAgIGlmIChub2RlLmRldGFjaEV2ZW50ICYmICFpc09wZXJhKSB7CiAgICAgICAgICAgICAgICAvL1Byb2JhYmx5IElFLiBJZiBub3QgaXQgd2lsbCB0aHJvdyBhbiBlcnJvciwgd2hpY2ggd2lsbCBiZQogICAgICAgICAgICAgICAgLy91c2VmdWwgdG8ga25vdy4KICAgICAgICAgICAgICAgIGlmIChpZU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICBub2RlLmRldGFjaEV2ZW50KGllTmFtZSwgZnVuYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgZnVuYywgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHaXZlbiBhbiBldmVudCBmcm9tIGEgc2NyaXB0IG5vZGUsIGdldCB0aGUgcmVxdWlyZWpzIGluZm8gZnJvbSBpdCwKICAgICAgICAgKiBhbmQgdGhlbiByZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlIG5vZGUuCiAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0CiAgICAgICAgICogQHJldHVybnMge09iamVjdH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRTY3JpcHREYXRhKGV2dCkgewogICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90CiAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAogICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNlLgogICAgICAgICAgICB2YXIgbm9kZSA9IGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50OwoKICAgICAgICAgICAgLy9SZW1vdmUgdGhlIGxpc3RlbmVycyBvbmNlIGhlcmUuCiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRMb2FkLCAnbG9hZCcsICdvbnJlYWR5c3RhdGVjaGFuZ2UnKTsKICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdEVycm9yLCAnZXJyb3InKTsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBub2RlOiBub2RlLAogICAgICAgICAgICAgICAgaWQ6IG5vZGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpbnRha2VEZWZpbmVzKCkgewogICAgICAgICAgICB2YXIgYXJnczsKCiAgICAgICAgICAgIC8vQW55IGRlZmluZWQgbW9kdWxlcyBpbiB0aGUgZ2xvYmFsIHF1ZXVlLCBpbnRha2UgdGhlbSBub3cuCiAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgLy9NYWtlIHN1cmUgYW55IHJlbWFpbmluZyBkZWZRdWV1ZSBpdGVtcyBnZXQgcHJvcGVybHkgcHJvY2Vzc2VkLgogICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsKICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdtaXNtYXRjaCcsICdNaXNtYXRjaGVkIGFub255bW91cyBkZWZpbmUoKSBtb2R1bGU6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9hcmdzIGFyZSBpZCwgZGVwcywgZmFjdG9yeS4gU2hvdWxkIGJlIG5vcm1hbGl6ZWQgYnkgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9kZWZpbmUoKSBmdW5jdGlvbi4KICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsKICAgICAgICB9CgogICAgICAgIGNvbnRleHQgPSB7CiAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLAogICAgICAgICAgICBjb250ZXh0TmFtZTogY29udGV4dE5hbWUsCiAgICAgICAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeSwKICAgICAgICAgICAgZGVmaW5lZDogZGVmaW5lZCwKICAgICAgICAgICAgdXJsRmV0Y2hlZDogdXJsRmV0Y2hlZCwKICAgICAgICAgICAgZGVmUXVldWU6IGRlZlF1ZXVlLAogICAgICAgICAgICBkZWZRdWV1ZU1hcDoge30sCiAgICAgICAgICAgIE1vZHVsZTogTW9kdWxlLAogICAgICAgICAgICBtYWtlTW9kdWxlTWFwOiBtYWtlTW9kdWxlTWFwLAogICAgICAgICAgICBuZXh0VGljazogcmVxLm5leHRUaWNrLAogICAgICAgICAgICBvbkVycm9yOiBvbkVycm9yLAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIFNldCBhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250ZXh0LgogICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIGNvbmZpZyBvYmplY3QgdG8gaW50ZWdyYXRlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY29uZmlndXJlOiBmdW5jdGlvbiAoY2ZnKSB7CiAgICAgICAgICAgICAgICAvL01ha2Ugc3VyZSB0aGUgYmFzZVVybCBlbmRzIGluIGEgc2xhc2guCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmJhc2VVcmwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY2ZnLmJhc2VVcmwuY2hhckF0KGNmZy5iYXNlVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLmJhc2VVcmwgKz0gJy8nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IG9sZCBzdHlsZSB1cmxBcmdzIHN0cmluZyB0byBhIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjZmcudXJsQXJncyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdXJsQXJncyA9IGNmZy51cmxBcmdzOwogICAgICAgICAgICAgICAgICAgIGNmZy51cmxBcmdzID0gZnVuY3Rpb24oaWQsIHVybCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHVybEFyZ3M7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1NhdmUgb2ZmIHRoZSBwYXRocyBzaW5jZSB0aGV5IHJlcXVpcmUgc3BlY2lhbCBwcm9jZXNzaW5nLAogICAgICAgICAgICAgICAgLy90aGV5IGFyZSBhZGRpdGl2ZS4KICAgICAgICAgICAgICAgIHZhciBzaGltID0gY29uZmlnLnNoaW0sCiAgICAgICAgICAgICAgICAgICAgb2JqcyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXM6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbWFwOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgICAgIGlmIChvYmpzW3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlnW3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtaXhpbihjb25maWdbcHJvcF0sIHZhbHVlLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbcHJvcF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL1JldmVyc2UgbWFwIHRoZSBidW5kbGVzCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmJ1bmRsZXMpIHsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuYnVuZGxlcywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godmFsdWUsIGZ1bmN0aW9uICh2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gcHJvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXNNYXBbdl0gPSBwcm9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL01lcmdlIHNoaW0KICAgICAgICAgICAgICAgIGlmIChjZmcuc2hpbSkgewogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5zaGltLCBmdW5jdGlvbiAodmFsdWUsIGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzOiB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlLmV4cG9ydHMgfHwgdmFsdWUuaW5pdCkgJiYgIXZhbHVlLmV4cG9ydHNGbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwb3J0c0ZuID0gY29udGV4dC5tYWtlU2hpbUV4cG9ydHModmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW1baWRdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNoaW0gPSBzaGltOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vQWRqdXN0IHBhY2thZ2VzIGlmIG5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgIGlmIChjZmcucGFja2FnZXMpIHsKICAgICAgICAgICAgICAgICAgICBlYWNoKGNmZy5wYWNrYWdlcywgZnVuY3Rpb24gKHBrZ09iaikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24sIG5hbWU7CgogICAgICAgICAgICAgICAgICAgICAgICBwa2dPYmogPSB0eXBlb2YgcGtnT2JqID09PSAnc3RyaW5nJyA/IHtuYW1lOiBwa2dPYmp9IDogcGtnT2JqOwoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBrZ09iai5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBrZ09iai5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucGF0aHNbbmFtZV0gPSBwa2dPYmoubG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2F2ZSBwb2ludGVyIHRvIG1haW4gbW9kdWxlIElEIGZvciBwa2cgbmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgbGVhZGluZyBkb3QgaW4gbWFpbiwgc28gbWFpbiBwYXRocyBhcmUgbm9ybWFsaXplZCwKICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgcmVtb3ZlIGFueSB0cmFpbGluZyAuanMsIHNpbmNlIGRpZmZlcmVudCBwYWNrYWdlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZW52cyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9uczogc29tZSB1c2UgYSBtb2R1bGUgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zb21lIHVzZSBhIGZpbGUgbmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBrZ3NbbmFtZV0gPSBwa2dPYmoubmFtZSArICcvJyArIChwa2dPYmoubWFpbiB8fCAnbWFpbicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjdXJyRGlyUmVnRXhwLCAnJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBhcmUgYW55ICJ3YWl0aW5nIHRvIGV4ZWN1dGUiIG1vZHVsZXMgaW4gdGhlIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgLy91cGRhdGUgdGhlIG1hcHMgZm9yIHRoZW0sIHNpbmNlIHRoZWlyIGluZm8sIGxpa2UgVVJMcyB0byBsb2FkLAogICAgICAgICAgICAgICAgLy9tYXkgaGF2ZSBjaGFuZ2VkLgogICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QsIGlkKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiBtb2R1bGUgYWxyZWFkeSBoYXMgaW5pdCBjYWxsZWQsIHNpbmNlIGl0IGlzIHRvbwogICAgICAgICAgICAgICAgICAgIC8vbGF0ZSB0byBtb2RpZnkgdGhlbSwgYW5kIGlnbm9yZSB1bm5vcm1hbGl6ZWQgb25lcwogICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSBhcmUgdHJhbnNpZW50LgogICAgICAgICAgICAgICAgICAgIGlmICghbW9kLmluaXRlZCAmJiAhbW9kLm1hcC51bm5vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbW9kLm1hcCA9IG1ha2VNb2R1bGVNYXAoaWQsIG51bGwsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vSWYgYSBkZXBzIGFycmF5IG9yIGEgY29uZmlnIGNhbGxiYWNrIGlzIHNwZWNpZmllZCwgdGhlbiBjYWxsCiAgICAgICAgICAgICAgICAvL3JlcXVpcmUgd2l0aCB0aG9zZSBhcmdzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHJlcXVpcmUgaXMgZGVmaW5lZCBhcyBhCiAgICAgICAgICAgICAgICAvL2NvbmZpZyBvYmplY3QgYmVmb3JlIHJlcXVpcmUuanMgaXMgbG9hZGVkLgogICAgICAgICAgICAgICAgaWYgKGNmZy5kZXBzIHx8IGNmZy5jYWxsYmFjaykgewogICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZShjZmcuZGVwcyB8fCBbXSwgY2ZnLmNhbGxiYWNrKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG1ha2VTaGltRXhwb3J0czogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV0OwogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbml0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHZhbHVlLmluaXQuYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0IHx8ICh2YWx1ZS5leHBvcnRzICYmIGdldEdsb2JhbCh2YWx1ZS5leHBvcnRzKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZm47CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBtYWtlUmVxdWlyZTogZnVuY3Rpb24gKHJlbE1hcCwgb3B0aW9ucykgewogICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9jYWxSZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCBtYXAsIHJlcXVpcmVNb2Q7CgogICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJsZUJ1aWxkQ2FsbGJhY2sgJiYgY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suX19yZXF1aXJlSnNCdWlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlcHMgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JbnZhbGlkIGNhbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcigncmVxdWlyZWFyZ3MnLCAnSW52YWxpZCByZXF1aXJlIGNhbGwnKSwgZXJyYmFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgcmVxdWlyZXxleHBvcnRzfG1vZHVsZSBhcmUgcmVxdWVzdGVkLCBnZXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFsdWUgZm9yIHRoZW0gZnJvbSB0aGUgc3BlY2lhbCBoYW5kbGVycy4gQ2F2ZWF0OgogICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgb25seSB3b3JrcyB3aGlsZSBtb2R1bGUgaXMgYmVpbmcgZGVmaW5lZC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbE1hcCAmJiBoYXNQcm9wKGhhbmRsZXJzLCBkZXBzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJzW2RlcHNdKHJlZ2lzdHJ5W3JlbE1hcC5pZF0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N5bmNocm9ub3VzIGFjY2VzcyB0byBvbmUgbW9kdWxlLiBJZiByZXF1aXJlLmdldCBpcwogICAgICAgICAgICAgICAgICAgICAgICAvL2F2YWlsYWJsZSAoYXMgaW4gdGhlIE5vZGUgYWRhcHRlciksIHByZWZlciB0aGF0LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmdldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcS5nZXQoY29udGV4dCwgZGVwcywgcmVsTWFwLCBsb2NhbFJlcXVpcmUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29udGFpbnMgLiBvciAuLgogICAgICAgICAgICAgICAgICAgICAgICBtYXAgPSBtYWtlTW9kdWxlTWFwKGRlcHMsIHJlbE1hcCwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbm90bG9hZGVkJywgJ01vZHVsZSBuYW1lICInICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0IGZvciBjb250ZXh0OiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHROYW1lICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxNYXAgPyAnJyA6ICcuIFVzZSByZXF1aXJlKFtdKScpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZWRbaWRdOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9HcmFiIGRlZmluZXMgd2FpdGluZyBpbiB0aGUgZ2xvYmFsIHF1ZXVlLgogICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKCiAgICAgICAgICAgICAgICAgICAgLy9NYXJrIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFzIG5lZWRpbmcgdG8gYmUgbG9hZGVkLgogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL1NvbWUgZGVmaW5lcyBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVxdWlyZSBjYWxsLCBjb2xsZWN0IHRoZW0uCiAgICAgICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2QgPSBnZXRNb2R1bGUobWFrZU1vZHVsZU1hcChudWxsLCByZWxNYXApKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3RvcmUgaWYgbWFwIGNvbmZpZyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGlzIHJlcXVpcmUKICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxsIGZvciBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2Quc2tpcE1hcCA9IG9wdGlvbnMuc2tpcE1hcDsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2QuaW5pdChkZXBzLCBjYWxsYmFjaywgZXJyYmFjaywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbWl4aW4obG9jYWxSZXF1aXJlLCB7CiAgICAgICAgICAgICAgICAgICAgaXNCcm93c2VyOiBpc0Jyb3dzZXIsCgogICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgKyAuZXh0ZW5zaW9uIGludG8gYW4gVVJMIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICogKlJlcXVpcmVzKiB0aGUgdXNlIG9mIGEgbW9kdWxlIG5hbWUuIEl0IGRvZXMgbm90IHN1cHBvcnQgdXNpbmcKICAgICAgICAgICAgICAgICAgICAgKiBwbGFpbiBVUkxzIGxpa2UgbmFtZVRvVXJsLgogICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIHRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZVBsdXNFeHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbW9kdWxlTmFtZVBsdXNFeHQubGFzdEluZGV4T2YoJy4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zcGxpdCgnLycpWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWxhdGl2ZSA9IHNlZ21lbnQgPT09ICcuJyB8fCBzZWdtZW50ID09PSAnLi4nOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9IYXZlIGEgZmlsZSBleHRlbnNpb24gYWxpYXMsIGFuZCBpdCBpcyBub3QgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZG90cyBmcm9tIGEgcmVsYXRpdmUgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSAmJiAoIWlzUmVsYXRpdmUgfHwgaW5kZXggPiAxKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3Vic3RyaW5nKGluZGV4LCBtb2R1bGVOYW1lUGx1c0V4dC5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZVBsdXNFeHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoMCwgaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplKG1vZHVsZU5hbWVQbHVzRXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxNYXAgJiYgcmVsTWFwLmlkLCB0cnVlKSwgZXh0LCAgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgZGVmaW5lZDogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFsc2UsIHRydWUpLmlkKTsKICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQ6IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFsc2UsIHRydWUpLmlkOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChkZWZpbmVkLCBpZCkgfHwgaGFzUHJvcChyZWdpc3RyeSwgaWQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vT25seSBhbGxvdyB1bmRlZiBvbiB0b3AgbGV2ZWwgcmVxdWlyZSBjYWxscwogICAgICAgICAgICAgICAgaWYgKCFyZWxNYXApIHsKICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUudW5kZWYgPSBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9CaW5kIGFueSB3YWl0aW5nIGRlZmluZSgpIGNhbGxzIHRvIHRoaXMgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgLy9maXggZm9yICM0MDgKICAgICAgICAgICAgICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCB0cnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbW9kLnVuZGVmZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQoaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRlZmluZWRbaWRdOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdXJsRmV0Y2hlZFttYXAudXJsXTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVuZGVmRXZlbnRzW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gcXVldWVkIGRlZmluZXMgdG9vLiBHbyBiYWNrd2FyZHMKICAgICAgICAgICAgICAgICAgICAgICAgLy9pbiBhcnJheSBzbyB0aGF0IHRoZSBzcGxpY2VzIGRvIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAvL21lc3MgdXAgdGhlIGl0ZXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFJldmVyc2UoZGVmUXVldWUsIGZ1bmN0aW9uKGFyZ3MsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZlF1ZXVlLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LmRlZlF1ZXVlTWFwW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSG9sZCBvbiB0byBsaXN0ZW5lcnMgaW4gY2FzZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlIHdpbGwgYmUgYXR0ZW1wdGVkIHRvIGJlIHJlbG9hZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3VzaW5nIGEgZGlmZmVyZW50IGNvbmZpZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXZlbnRzLmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZkV2ZW50c1tpZF0gPSBtb2QuZXZlbnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENhbGxlZCB0byBlbmFibGUgYSBtb2R1bGUgaWYgaXQgaXMgc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5CiAgICAgICAgICAgICAqIGF3YWl0aW5nIGVuYWJsZW1lbnQuIEEgc2Vjb25kIGFyZywgcGFyZW50LCB0aGUgcGFyZW50IG1vZHVsZSwKICAgICAgICAgICAgICogaXMgcGFzc2VkIGluIGZvciBjb250ZXh0LCB3aGVuIHRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkKICAgICAgICAgICAgICogdGhlIG9wdGltaXplci4gTm90IHNob3duIGhlcmUgdG8ga2VlcCBjb2RlIGNvbXBhY3QuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uIChkZXBNYXApIHsKICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGRlcE1hcC5pZCk7CiAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKGRlcE1hcCkuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHVzZWQgYnkgZW52aXJvbm1lbnQgYWRhcHRlcnMgdG8gY29tcGxldGUgYSBsb2FkIGV2ZW50LgogICAgICAgICAgICAgKiBBIGxvYWQgZXZlbnQgY291bGQgYmUgYSBzY3JpcHQgbG9hZCBvciBqdXN0IGEgbG9hZCBwYXNzIGZyb20gYSBzeW5jaHJvbm91cwogICAgICAgICAgICAgKiBsb2FkIGNhbGwuCiAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gcG90ZW50aWFsbHkgY29tcGxldGUuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjb21wbGV0ZUxvYWQ6IGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7CiAgICAgICAgICAgICAgICB2YXIgZm91bmQsIGFyZ3MsIG1vZCwKICAgICAgICAgICAgICAgICAgICBzaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtb2R1bGVOYW1lKSB8fCB7fSwKICAgICAgICAgICAgICAgICAgICBzaEV4cG9ydHMgPSBzaGltLmV4cG9ydHM7CgogICAgICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBtb2R1bGVOYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFscmVhZHkgZm91bmQgYW4gYW5vbnltb3VzIG1vZHVsZSBhbmQgYm91bmQgaXQKICAgICAgICAgICAgICAgICAgICAgICAgLy90byB0aGlzIG5hbWUsIHRoZW4gdGhpcyBpcyBzb21lIG90aGVyIGFub24gbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vd2FpdGluZyBmb3IgaXRzIGNvbXBsZXRlTG9hZCB0byBmaXJlLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbMF0gPT09IG1vZHVsZU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Gb3VuZCBtYXRjaGluZyBkZWZpbmUgY2FsbCBmb3IgdGhpcyBzY3JpcHQhCiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwID0ge307CgogICAgICAgICAgICAgICAgLy9EbyB0aGlzIGFmdGVyIHRoZSBjeWNsZSBvZiBjYWxsR2V0TW9kdWxlIGluIGNhc2UgdGhlIHJlc3VsdAogICAgICAgICAgICAgICAgLy9vZiB0aG9zZSBjYWxscy9pbml0IGNhbGxzIGNoYW5nZXMgdGhlIHJlZ2lzdHJ5LgogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kICYmICFoYXNQcm9wKGRlZmluZWQsIG1vZHVsZU5hbWUpICYmIG1vZCAmJiAhbW9kLmluaXRlZCkgewogICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuZW5mb3JjZURlZmluZSAmJiAoIXNoRXhwb3J0cyB8fCAhZ2V0R2xvYmFsKHNoRXhwb3J0cykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kdWxlTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbm9kZWZpbmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm8gZGVmaW5lIGNhbGwgZm9yICcgKyBtb2R1bGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vQSBzY3JpcHQgdGhhdCBkb2VzIG5vdCBjYWxsIGRlZmluZSgpLCBzbyBqdXN0IHNpbXVsYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlIGNhbGwgZm9yIGl0LgogICAgICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKFttb2R1bGVOYW1lLCAoc2hpbS5kZXBzIHx8IFtdKSwgc2hpbS5leHBvcnRzRm5dKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lIHRvIGEgZmlsZSBwYXRoLiBTdXBwb3J0cyBjYXNlcyB3aGVyZQogICAgICAgICAgICAgKiBtb2R1bGVOYW1lIG1heSBhY3R1YWxseSBiZSBqdXN0IGFuIFVSTC4KICAgICAgICAgICAgICogTm90ZSB0aGF0IGl0ICoqZG9lcyBub3QqKiBjYWxsIG5vcm1hbGl6ZSBvbiB0aGUgbW9kdWxlTmFtZSwKICAgICAgICAgICAgICogaXQgaXMgYXNzdW1lZCB0byBoYXZlIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLiBUaGlzIGlzIGFuCiAgICAgICAgICAgICAqIGludGVybmFsIEFQSSwgbm90IGEgcHVibGljIG9uZS4gVXNlIHRvVXJsIGZvciB0aGUgcHVibGljIEFQSS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG5hbWVUb1VybDogZnVuY3Rpb24gKG1vZHVsZU5hbWUsIGV4dCwgc2tpcEV4dCkgewogICAgICAgICAgICAgICAgdmFyIHBhdGhzLCBzeW1zLCBpLCBwYXJlbnRNb2R1bGUsIHVybCwKICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoLCBidW5kbGVJZCwKICAgICAgICAgICAgICAgICAgICBwa2dNYWluID0gZ2V0T3duKGNvbmZpZy5wa2dzLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAocGtnTWFpbikgewogICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgPSBwa2dNYWluOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGJ1bmRsZUlkID0gZ2V0T3duKGJ1bmRsZXNNYXAsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChidW5kbGVJZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChidW5kbGVJZCwgZXh0LCBza2lwRXh0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0lmIGEgY29sb24gaXMgaW4gdGhlIFVSTCwgaXQgaW5kaWNhdGVzIGEgcHJvdG9jb2wgaXMgdXNlZCBhbmQgaXQgaXMganVzdAogICAgICAgICAgICAgICAgLy9hbiBVUkwgdG8gYSBmaWxlLCBvciBpZiBpdCBzdGFydHMgd2l0aCBhIHNsYXNoLCBjb250YWlucyBhIHF1ZXJ5IGFyZyAoaS5lLiA/KQogICAgICAgICAgICAgICAgLy9vciBlbmRzIHdpdGggLmpzLCB0aGVuIGFzc3VtZSB0aGUgdXNlciBtZWFudCB0byB1c2UgYW4gdXJsIGFuZCBub3QgYSBtb2R1bGUgaWQuCiAgICAgICAgICAgICAgICAvL1RoZSBzbGFzaCBpcyBpbXBvcnRhbnQgZm9yIHByb3RvY29sLWxlc3MgVVJMcyBhcyB3ZWxsIGFzIGZ1bGwgcGF0aHMuCiAgICAgICAgICAgICAgICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobW9kdWxlTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBwbGFpbiBwYXRoLCBub3QgbW9kdWxlIG5hbWUgbG9va3VwLCBzbyBqdXN0IHJldHVybiBpdC4KICAgICAgICAgICAgICAgICAgICAvL0FkZCBleHRlbnNpb24gaWYgaXQgaXMgaW5jbHVkZWQuIFRoaXMgaXMgYSBiaXQgd29ua3ksIG9ubHkgbm9uLS5qcyB0aGluZ3MgcGFzcwogICAgICAgICAgICAgICAgICAgIC8vYW4gZXh0ZW5zaW9uLCB0aGlzIG1ldGhvZCBwcm9iYWJseSBuZWVkcyB0byBiZSByZXdvcmtlZC4KICAgICAgICAgICAgICAgICAgICB1cmwgPSBtb2R1bGVOYW1lICsgKGV4dCB8fCAnJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vQSBtb2R1bGUgdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBwYXRoLgogICAgICAgICAgICAgICAgICAgIHBhdGhzID0gY29uZmlnLnBhdGhzOwoKICAgICAgICAgICAgICAgICAgICBzeW1zID0gbW9kdWxlTmFtZS5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgICAgIC8vRm9yIGVhY2ggbW9kdWxlIG5hbWUgc2VnbWVudCwgc2VlIGlmIHRoZXJlIGlzIGEgcGF0aAogICAgICAgICAgICAgICAgICAgIC8vcmVnaXN0ZXJlZCBmb3IgaXQuIFN0YXJ0IHdpdGggbW9zdCBzcGVjaWZpYyBuYW1lCiAgICAgICAgICAgICAgICAgICAgLy9hbmQgd29yayB1cCBmcm9tIGl0LgogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHN5bXMubGVuZ3RoOyBpID4gMDsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZHVsZSA9IHN5bXMuc2xpY2UoMCwgaSkuam9pbignLycpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCA9IGdldE93bihwYXRocywgcGFyZW50TW9kdWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFBhdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYW4gYXJyYXksIGl0IG1lYW5zIHRoZXJlIGFyZSBhIGZldyBjaG9pY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9DaG9vc2UgdGhlIG9uZSB0aGF0IGlzIGRlc2lyZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHBhcmVudFBhdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCA9IHBhcmVudFBhdGhbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zLnNwbGljZSgwLCBpLCBwYXJlbnRQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0pvaW4gdGhlIHBhdGggcGFydHMgdG9nZXRoZXIsIHRoZW4gZmlndXJlIG91dCBpZiBiYXNlVXJsIGlzIG5lZWRlZC4KICAgICAgICAgICAgICAgICAgICB1cmwgPSBzeW1zLmpvaW4oJy8nKTsKICAgICAgICAgICAgICAgICAgICB1cmwgKz0gKGV4dCB8fCAoL15kYXRhXDp8XmJsb2JcOnxcPy8udGVzdCh1cmwpIHx8IHNraXBFeHQgPyAnJyA6ICcuanMnKSk7CiAgICAgICAgICAgICAgICAgICAgdXJsID0gKHVybC5jaGFyQXQoMCkgPT09ICcvJyB8fCB1cmwubWF0Y2goL15bXHdcK1wuXC1dKzovKSA/ICcnIDogY29uZmlnLmJhc2VVcmwpICsgdXJsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsQXJncyAmJiAhL15ibG9iXDovLnRlc3QodXJsKSA/CiAgICAgICAgICAgICAgICAgICAgICAgdXJsICsgY29uZmlnLnVybEFyZ3MobW9kdWxlTmFtZSwgdXJsKSA6IHVybDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8vRGVsZWdhdGVzIHRvIHJlcS5sb2FkLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8KICAgICAgICAgICAgLy9hbGxvdyBvdmVycmlkaW5nIGluIHRoZSBvcHRpbWl6ZXIuCiAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChpZCwgdXJsKSB7CiAgICAgICAgICAgICAgICByZXEubG9hZChjb250ZXh0LCBpZCwgdXJsKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBFeGVjdXRlcyBhIG1vZHVsZSBjYWxsYmFjayBmdW5jdGlvbi4gQnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uCiAgICAgICAgICAgICAqIHNvbGVseSB0byBhbGxvdyB0aGUgYnVpbGQgc3lzdGVtIHRvIHNlcXVlbmNlIHRoZSBmaWxlcyBpbiB0aGUgYnVpbHQKICAgICAgICAgICAgICogbGF5ZXIgaW4gdGhlIHJpZ2h0IHNlcXVlbmNlLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcHJpdmF0ZQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZXhlY0NiOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGFyZ3MsIGV4cG9ydHMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseShleHBvcnRzLCBhcmdzKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBjYWxsYmFjayBmb3Igc2NyaXB0IGxvYWRzLCB1c2VkIHRvIGNoZWNrIHN0YXR1cyBvZiBsb2FkaW5nLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQgdGhlIGV2ZW50IGZyb20gdGhlIGJyb3dzZXIgZm9yIHRoZSBzY3JpcHQKICAgICAgICAgICAgICogdGhhdCB3YXMgbG9hZGVkLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb25TY3JpcHRMb2FkOiBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90CiAgICAgICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKICAgICAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCiAgICAgICAgICAgICAgICBpZiAoZXZ0LnR5cGUgPT09ICdsb2FkJyB8fAogICAgICAgICAgICAgICAgICAgICAgICAocmVhZHlSZWdFeHAudGVzdCgoZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQpLnJlYWR5U3RhdGUpKSkgewogICAgICAgICAgICAgICAgICAgIC8vUmVzZXQgaW50ZXJhY3RpdmUgc2NyaXB0IHNvIGEgc2NyaXB0IG5vZGUgaXMgbm90IGhlbGQgb250byBmb3IKICAgICAgICAgICAgICAgICAgICAvL3RvIGxvbmcuCiAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVTY3JpcHQgPSBudWxsOwoKICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb3V0IHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgYW5kIHRoZSBjb250ZXh0LgogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwogICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKGRhdGEuaWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENhbGxiYWNrIGZvciBzY3JpcHQgZXJyb3JzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb25TY3JpcHRFcnJvcjogZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CiAgICAgICAgICAgICAgICBpZiAoIWhhc1BhdGhGYWxsYmFjayhkYXRhLmlkKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRzID0gW107CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKCdfQHInKSAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWx1ZS5kZXBNYXBzLCBmdW5jdGlvbihkZXBNYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwTWFwLmlkID09PSBkYXRhLmlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudHMucHVzaChrZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignc2NyaXB0ZXJyb3InLCAnU2NyaXB0IGVycm9yIGZvciAiJyArIGRhdGEuaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyZW50cy5sZW5ndGggPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiwgbmVlZGVkIGJ5OiAnICsgcGFyZW50cy5qb2luKCcsICcpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyInKSwgZXZ0LCBbZGF0YS5pZF0pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGNvbnRleHQucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUoKTsKICAgICAgICByZXR1cm4gY29udGV4dDsKICAgIH0KCiAgICAvKioKICAgICAqIE1haW4gZW50cnkgcG9pbnQuCiAgICAgKgogICAgICogSWYgdGhlIG9ubHkgYXJndW1lbnQgdG8gcmVxdWlyZSBpcyBhIHN0cmluZywgdGhlbiB0aGUgbW9kdWxlIHRoYXQKICAgICAqIGlzIHJlcHJlc2VudGVkIGJ5IHRoYXQgc3RyaW5nIGlzIGZldGNoZWQgZm9yIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0LgogICAgICoKICAgICAqIElmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhlbiBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gYXJyYXkKICAgICAqIG9mIGRlcGVuZGVuY3kgc3RyaW5nIG5hbWVzIHRvIGZldGNoLiBBbiBvcHRpb25hbCBmdW5jdGlvbiBjYWxsYmFjayBjYW4KICAgICAqIGJlIHNwZWNpZmllZCB0byBleGVjdXRlIHdoZW4gYWxsIG9mIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlLgogICAgICoKICAgICAqIE1ha2UgYSBsb2NhbCByZXEgdmFyaWFibGUgdG8gaGVscCBDYWphIGNvbXBsaWFuY2UgKGl0IGFzc3VtZXMgdGhpbmdzCiAgICAgKiBvbiBhIHJlcXVpcmUgdGhhdCBhcmUgbm90IHN0YW5kYXJkaXplZCksIGFuZCB0byBnaXZlIGEgc2hvcnQKICAgICAqIG5hbWUgZm9yIG1pbmlmaWNhdGlvbi9sb2NhbCBzY29wZSB1c2UuCiAgICAgKi8KICAgIHJlcSA9IHJlcXVpcmVqcyA9IGZ1bmN0aW9uIChkZXBzLCBjYWxsYmFjaywgZXJyYmFjaywgb3B0aW9uYWwpIHsKCiAgICAgICAgLy9GaW5kIHRoZSByaWdodCBjb250ZXh0LCB1c2UgZGVmYXVsdAogICAgICAgIHZhciBjb250ZXh0LCBjb25maWcsCiAgICAgICAgICAgIGNvbnRleHROYW1lID0gZGVmQ29udGV4dE5hbWU7CgogICAgICAgIC8vIERldGVybWluZSBpZiBoYXZlIGNvbmZpZyBvYmplY3QgaW4gdGhlIGNhbGwuCiAgICAgICAgaWYgKCFpc0FycmF5KGRlcHMpICYmIHR5cGVvZiBkZXBzICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICAvLyBkZXBzIGlzIGEgY29uZmlnIG9iamVjdAogICAgICAgICAgICBjb25maWcgPSBkZXBzOwogICAgICAgICAgICBpZiAoaXNBcnJheShjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgIC8vIEFkanVzdCBhcmdzIGlmIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIGRlcHMgPSBjYWxsYmFjazsKICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZXJyYmFjazsKICAgICAgICAgICAgICAgIGVycmJhY2sgPSBvcHRpb25hbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRlcHMgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuY29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0TmFtZSA9IGNvbmZpZy5jb250ZXh0OwogICAgICAgIH0KCiAgICAgICAgY29udGV4dCA9IGdldE93bihjb250ZXh0cywgY29udGV4dE5hbWUpOwogICAgICAgIGlmICghY29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dHNbY29udGV4dE5hbWVdID0gcmVxLnMubmV3Q29udGV4dChjb250ZXh0TmFtZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnKSB7CiAgICAgICAgICAgIGNvbnRleHQuY29uZmlndXJlKGNvbmZpZyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gY29udGV4dC5yZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBTdXBwb3J0IHJlcXVpcmUuY29uZmlnKCkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29vcGVyYXRlIHdpdGggb3RoZXIKICAgICAqIEFNRCBsb2FkZXJzIG9uIGdsb2JhbGx5IGFncmVlZCBuYW1lcy4KICAgICAqLwogICAgcmVxLmNvbmZpZyA9IGZ1bmN0aW9uIChjb25maWcpIHsKICAgICAgICByZXR1cm4gcmVxKGNvbmZpZyk7CiAgICB9OwoKICAgIC8qKgogICAgICogRXhlY3V0ZSBzb21ldGhpbmcgYWZ0ZXIgdGhlIGN1cnJlbnQgdGljawogICAgICogb2YgdGhlIGV2ZW50IGxvb3AuIE92ZXJyaWRlIGZvciBvdGhlciBlbnZzCiAgICAgKiB0aGF0IGhhdmUgYSBiZXR0ZXIgc29sdXRpb24gdGhhbiBzZXRUaW1lb3V0LgogICAgICogQHBhcmFtICB7RnVuY3Rpb259IGZuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgbGF0ZXIuCiAgICAgKi8KICAgIHJlcS5uZXh0VGljayA9IHR5cGVvZiBzZXRUaW1lb3V0ICE9PSAndW5kZWZpbmVkJyA/IGZ1bmN0aW9uIChmbikgewogICAgICAgIHNldFRpbWVvdXQoZm4sIDQpOwogICAgfSA6IGZ1bmN0aW9uIChmbikgeyBmbigpOyB9OwoKICAgIC8qKgogICAgICogRXhwb3J0IHJlcXVpcmUgYXMgYSBnbG9iYWwsIGJ1dCBvbmx5IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCiAgICAgKi8KICAgIGlmICghcmVxdWlyZSkgewogICAgICAgIHJlcXVpcmUgPSByZXE7CiAgICB9CgogICAgcmVxLnZlcnNpb24gPSB2ZXJzaW9uOwoKICAgIC8vVXNlZCB0byBmaWx0ZXIgb3V0IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBhbHJlYWR5IHBhdGhzLgogICAgcmVxLmpzRXh0UmVnRXhwID0gL15cL3w6fFw/fFwuanMkLzsKICAgIHJlcS5pc0Jyb3dzZXIgPSBpc0Jyb3dzZXI7CiAgICBzID0gcmVxLnMgPSB7CiAgICAgICAgY29udGV4dHM6IGNvbnRleHRzLAogICAgICAgIG5ld0NvbnRleHQ6IG5ld0NvbnRleHQKICAgIH07CgogICAgLy9DcmVhdGUgZGVmYXVsdCBjb250ZXh0LgogICAgcmVxKHt9KTsKCiAgICAvL0V4cG9ydHMgc29tZSBjb250ZXh0LXNlbnNpdGl2ZSBtZXRob2RzIG9uIGdsb2JhbCByZXF1aXJlLgogICAgZWFjaChbCiAgICAgICAgJ3RvVXJsJywKICAgICAgICAndW5kZWYnLAogICAgICAgICdkZWZpbmVkJywKICAgICAgICAnc3BlY2lmaWVkJwogICAgXSwgZnVuY3Rpb24gKHByb3ApIHsKICAgICAgICAvL1JlZmVyZW5jZSBmcm9tIGNvbnRleHRzIGluc3RlYWQgb2YgZWFybHkgYmluZGluZyB0byBkZWZhdWx0IGNvbnRleHQsCiAgICAgICAgLy9zbyB0aGF0IGR1cmluZyBidWlsZHMsIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgY29udGV4dAogICAgICAgIC8vd2l0aCBpdHMgY29uZmlnIGdldHMgdXNlZC4KICAgICAgICByZXFbcHJvcF0gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBjdHggPSBjb250ZXh0c1tkZWZDb250ZXh0TmFtZV07CiAgICAgICAgICAgIHJldHVybiBjdHgucmVxdWlyZVtwcm9wXS5hcHBseShjdHgsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgIH0pOwoKICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICBoZWFkID0gcy5oZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTsKICAgICAgICAvL0lmIEJBU0UgdGFnIGlzIGluIHBsYXksIHVzaW5nIGFwcGVuZENoaWxkIGlzIGEgcHJvYmxlbSBmb3IgSUU2LgogICAgICAgIC8vV2hlbiB0aGF0IGJyb3dzZXIgZGllcywgdGhpcyBjYW4gYmUgcmVtb3ZlZC4gRGV0YWlscyBpbiB0aGlzIGpRdWVyeSBidWc6CiAgICAgICAgLy9odHRwOi8vZGV2LmpxdWVyeS5jb20vdGlja2V0LzI3MDkKICAgICAgICBiYXNlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdiYXNlJylbMF07CiAgICAgICAgaWYgKGJhc2VFbGVtZW50KSB7CiAgICAgICAgICAgIGhlYWQgPSBzLmhlYWQgPSBiYXNlRWxlbWVudC5wYXJlbnROb2RlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEFueSBlcnJvcnMgdGhhdCByZXF1aXJlIGV4cGxpY2l0bHkgZ2VuZXJhdGVzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMKICAgICAqIGZ1bmN0aW9uLiBJbnRlcmNlcHQvb3ZlcnJpZGUgaXQgaWYgeW91IHdhbnQgY3VzdG9tIGVycm9yIGhhbmRsaW5nLgogICAgICogQHBhcmFtIHtFcnJvcn0gZXJyIHRoZSBlcnJvciBvYmplY3QuCiAgICAgKi8KICAgIHJlcS5vbkVycm9yID0gZGVmYXVsdE9uRXJyb3I7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIHRoZSBub2RlIGZvciB0aGUgbG9hZCBjb21tYW5kLiBPbmx5IHVzZWQgaW4gYnJvd3NlciBlbnZzLgogICAgICovCiAgICByZXEuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChjb25maWcsIG1vZHVsZU5hbWUsIHVybCkgewogICAgICAgIHZhciBub2RlID0gY29uZmlnLnhodG1sID8KICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdodG1sOnNjcmlwdCcpIDoKICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIG5vZGUudHlwZSA9IGNvbmZpZy5zY3JpcHRUeXBlIHx8ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIG5vZGUuY2hhcnNldCA9ICd1dGYtOCc7CiAgICAgICAgbm9kZS5hc3luYyA9IHRydWU7CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICB9OwoKICAgIC8qKgogICAgICogRG9lcyB0aGUgcmVxdWVzdCB0byBsb2FkIGEgbW9kdWxlIGZvciB0aGUgYnJvd3NlciBjYXNlLgogICAgICogTWFrZSB0aGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYWxsb3cgb3RoZXIgZW52aXJvbm1lbnRzCiAgICAgKiB0byBvdmVycmlkZSBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCB0aGUgcmVxdWlyZSBjb250ZXh0IHRvIGZpbmQgc3RhdGUuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLgogICAgICogQHBhcmFtIHtPYmplY3R9IHVybCB0aGUgVVJMIHRvIHRoZSBtb2R1bGUuCiAgICAgKi8KICAgIHJlcS5sb2FkID0gZnVuY3Rpb24gKGNvbnRleHQsIG1vZHVsZU5hbWUsIHVybCkgewogICAgICAgIHZhciBjb25maWcgPSAoY29udGV4dCAmJiBjb250ZXh0LmNvbmZpZykgfHwge30sCiAgICAgICAgICAgIG5vZGU7CiAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICAvL0luIHRoZSBicm93c2VyIHNvIHVzZSBhIHNjcmlwdCB0YWcKICAgICAgICAgICAgbm9kZSA9IHJlcS5jcmVhdGVOb2RlKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKCiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JywgY29udGV4dC5jb250ZXh0TmFtZSk7CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgIC8vU2V0IHVwIGxvYWQgbGlzdGVuZXIuIFRlc3QgYXR0YWNoRXZlbnQgZmlyc3QgYmVjYXVzZSBJRTkgaGFzCiAgICAgICAgICAgIC8vYSBzdWJ0bGUgaXNzdWUgaW4gaXRzIGFkZEV2ZW50TGlzdGVuZXIgYW5kIHNjcmlwdCBvbmxvYWQgZmlyaW5ncwogICAgICAgICAgICAvL3RoYXQgZG8gbm90IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBhbGwgb3RoZXIgYnJvd3NlcnMgd2l0aAogICAgICAgICAgICAvL2FkZEV2ZW50TGlzdGVuZXIgc3VwcG9ydCwgd2hpY2ggZmlyZSB0aGUgb25sb2FkIGV2ZW50IGZvciBhCiAgICAgICAgICAgIC8vc2NyaXB0IHJpZ2h0IGFmdGVyIHRoZSBzY3JpcHQgZXhlY3V0aW9uLiBTZWU6CiAgICAgICAgICAgIC8vaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy82NDgwNTcvc2NyaXB0LW9ubG9hZC1ldmVudC1pcy1ub3QtZmlyZWQtaW1tZWRpYXRlbHktYWZ0ZXItc2NyaXB0LWV4ZWN1dGlvbgogICAgICAgICAgICAvL1VORk9SVFVOQVRFTFkgT3BlcmEgaW1wbGVtZW50cyBhdHRhY2hFdmVudCBidXQgZG9lcyBub3QgZm9sbG93IHRoZSBzY3JpcHQKICAgICAgICAgICAgLy9zY3JpcHQgZXhlY3V0aW9uIG1vZGUuCiAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaEV2ZW50ICYmCiAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBpZiBub2RlLmF0dGFjaEV2ZW50IGlzIGFydGlmaWNpYWxseSBhZGRlZCBieSBjdXN0b20gc2NyaXB0IG9yCiAgICAgICAgICAgICAgICAgICAgLy9uYXRpdmVseSBzdXBwb3J0ZWQgYnkgYnJvd3NlcgogICAgICAgICAgICAgICAgICAgIC8vcmVhZCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMTg3CiAgICAgICAgICAgICAgICAgICAgLy9pZiB3ZSBjYW4gTk9UIGZpbmQgW25hdGl2ZSBjb2RlXSB0aGVuIGl0IG11c3QgTk9UIG5hdGl2ZWx5IHN1cHBvcnRlZC4KICAgICAgICAgICAgICAgICAgICAvL2luIElFOCwgbm9kZS5hdHRhY2hFdmVudCBkb2VzIG5vdCBoYXZlIHRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAvL05vdGUgdGhlIHRlc3QgZm9yICJbbmF0aXZlIGNvZGUiIHdpdGggbm8gY2xvc2luZyBicmFjZSwgc2VlOgogICAgICAgICAgICAgICAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvaXNzdWVzLzI3MwogICAgICAgICAgICAgICAgICAgICEobm9kZS5hdHRhY2hFdmVudC50b1N0cmluZyAmJiBub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nKCkuaW5kZXhPZignW25hdGl2ZSBjb2RlJykgPCAwKSAmJgogICAgICAgICAgICAgICAgICAgICFpc09wZXJhKSB7CiAgICAgICAgICAgICAgICAvL1Byb2JhYmx5IElFLiBJRSAoYXQgbGVhc3QgNi04KSBkbyBub3QgZmlyZQogICAgICAgICAgICAgICAgLy9zY3JpcHQgb25sb2FkIHJpZ2h0IGFmdGVyIGV4ZWN1dGluZyB0aGUgc2NyaXB0LCBzbwogICAgICAgICAgICAgICAgLy93ZSBjYW5ub3QgdGllIHRoZSBhbm9ueW1vdXMgZGVmaW5lIGNhbGwgdG8gYSBuYW1lLgogICAgICAgICAgICAgICAgLy9Ib3dldmVyLCBJRSByZXBvcnRzIHRoZSBzY3JpcHQgYXMgYmVpbmcgaW4gJ2ludGVyYWN0aXZlJwogICAgICAgICAgICAgICAgLy9yZWFkeVN0YXRlIGF0IHRoZSB0aW1lIG9mIHRoZSBkZWZpbmUgY2FsbC4KICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBub2RlLmF0dGFjaEV2ZW50KCdvbnJlYWR5c3RhdGVjaGFuZ2UnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCk7CiAgICAgICAgICAgICAgICAvL0l0IHdvdWxkIGJlIGdyZWF0IHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIGhlcmUgdG8gY2F0Y2gKICAgICAgICAgICAgICAgIC8vNDA0cyBpbiBJRTkrLiBIb3dldmVyLCBvbnJlYWR5c3RhdGVjaGFuZ2Ugd2lsbCBmaXJlIGJlZm9yZQogICAgICAgICAgICAgICAgLy90aGUgZXJyb3IgaGFuZGxlciwgc28gdGhhdCBkb2VzIG5vdCBoZWxwLiBJZiBhZGRFdmVudExpc3RlbmVyCiAgICAgICAgICAgICAgICAvL2lzIHVzZWQsIHRoZW4gSUUgd2lsbCBmaXJlIGVycm9yIGJlZm9yZSBsb2FkLCBidXQgd2UgY2Fubm90CiAgICAgICAgICAgICAgICAvL3VzZSB0aGF0IHBhdGh3YXkgZ2l2ZW4gdGhlIGNvbm5lY3QubWljcm9zb2Z0LmNvbSBpc3N1ZQogICAgICAgICAgICAgICAgLy9tZW50aW9uZWQgYWJvdmUgYWJvdXQgbm90IGRvaW5nIHRoZSAnc2NyaXB0IGV4ZWN1dGUsCiAgICAgICAgICAgICAgICAvL3RoZW4gZmlyZSB0aGUgc2NyaXB0IGxvYWQgZXZlbnQgbGlzdGVuZXIgYmVmb3JlIGV4ZWN1dGUKICAgICAgICAgICAgICAgIC8vbmV4dCBzY3JpcHQnIHRoYXQgb3RoZXIgYnJvd3NlcnMgZG8uCiAgICAgICAgICAgICAgICAvL0Jlc3QgaG9wZTogSUUxMCBmaXhlcyB0aGUgaXNzdWVzLAogICAgICAgICAgICAgICAgLy9hbmQgdGhlbiBkZXN0cm95cyBhbGwgaW5zdGFsbHMgb2YgSUUgNi05LgogICAgICAgICAgICAgICAgLy9ub2RlLmF0dGFjaEV2ZW50KCdvbmVycm9yJywgY29udGV4dC5vblNjcmlwdEVycm9yKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNvbnRleHQub25TY3JpcHRMb2FkLCBmYWxzZSk7CiAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgY29udGV4dC5vblNjcmlwdEVycm9yLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbm9kZS5zcmMgPSB1cmw7CgogICAgICAgICAgICAvL0NhbGxpbmcgb25Ob2RlQ3JlYXRlZCBhZnRlciBhbGwgcHJvcGVydGllcyBvbiB0aGUgbm9kZSBoYXZlIGJlZW4KICAgICAgICAgICAgLy9zZXQsIGJ1dCBiZWZvcmUgaXQgaXMgcGxhY2VkIGluIHRoZSBET00uCiAgICAgICAgICAgIGlmIChjb25maWcub25Ob2RlQ3JlYXRlZCkgewogICAgICAgICAgICAgICAgY29uZmlnLm9uTm9kZUNyZWF0ZWQobm9kZSwgY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0ZvciBzb21lIGNhY2hlIGNhc2VzIGluIElFIDYtOCwgdGhlIHNjcmlwdCBleGVjdXRlcyBiZWZvcmUgdGhlIGVuZAogICAgICAgICAgICAvL29mIHRoZSBhcHBlbmRDaGlsZCBleGVjdXRpb24sIHNvIHRvIHRpZSBhbiBhbm9ueW1vdXMgZGVmaW5lCiAgICAgICAgICAgIC8vY2FsbCB0byB0aGUgbW9kdWxlIG5hbWUgKHdoaWNoIGlzIHN0b3JlZCBvbiB0aGUgbm9kZSksIGhvbGQgb24KICAgICAgICAgICAgLy90byBhIHJlZmVyZW5jZSB0byB0aGlzIG5vZGUsIGJ1dCBjbGVhciBhZnRlciB0aGUgRE9NIGluc2VydGlvbi4KICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbm9kZTsKICAgICAgICAgICAgaWYgKGJhc2VFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZShub2RlLCBiYXNlRWxlbWVudCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9IG51bGw7CgogICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICB9IGVsc2UgaWYgKGlzV2ViV29ya2VyKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAvL0luIGEgd2ViIHdvcmtlciwgdXNlIGltcG9ydFNjcmlwdHMuIFRoaXMgaXMgbm90IGEgdmVyeQogICAgICAgICAgICAgICAgLy9lZmZpY2llbnQgdXNlIG9mIGltcG9ydFNjcmlwdHMsIGltcG9ydFNjcmlwdHMgd2lsbCBibG9jayB1bnRpbAogICAgICAgICAgICAgICAgLy9pdHMgc2NyaXB0IGlzIGRvd25sb2FkZWQgYW5kIGV2YWx1YXRlZC4gSG93ZXZlciwgaWYgd2ViIHdvcmtlcnMKICAgICAgICAgICAgICAgIC8vYXJlIGluIHBsYXksIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGEgYnVpbGQgaGFzIGJlZW4gZG9uZSBzbwogICAgICAgICAgICAgICAgLy90aGF0IG9ubHkgb25lIHNjcmlwdCBuZWVkcyB0byBiZSBsb2FkZWQgYW55d2F5LiBUaGlzIG1heSBuZWVkCiAgICAgICAgICAgICAgICAvL3RvIGJlIHJlZXZhbHVhdGVkIGlmIG90aGVyIHVzZSBjYXNlcyBiZWNvbWUgY29tbW9uLgoKICAgICAgICAgICAgICAgIC8vIFBvc3QgYSB0YXNrIHRvIHRoZSBldmVudCBsb29wIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIFdlYktpdAogICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIHdvcmtlciBnZXRzIGdhcmJhZ2UtY29sbGVjdGVkIGFmdGVyIGNhbGxpbmcKICAgICAgICAgICAgICAgIC8vIGltcG9ydFNjcmlwdHMoKTogaHR0cHM6Ly93ZWJraXQub3JnL2IvMTUzMzE3CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge30sIDApOwogICAgICAgICAgICAgICAgaW1wb3J0U2NyaXB0cyh1cmwpOwoKICAgICAgICAgICAgICAgIC8vQWNjb3VudCBmb3IgYW5vbnltb3VzIG1vZHVsZXMKICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKG1vZHVsZU5hbWUpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IobWFrZUVycm9yKCdpbXBvcnRzY3JpcHRzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0U2NyaXB0cyBmYWlsZWQgZm9yICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lICsgJyBhdCAnICsgdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKICAgIGZ1bmN0aW9uIGdldEludGVyYWN0aXZlU2NyaXB0KCkgewogICAgICAgIGlmIChpbnRlcmFjdGl2ZVNjcmlwdCAmJiBpbnRlcmFjdGl2ZVNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CiAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKICAgICAgICB9CgogICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewogICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoaW50ZXJhY3RpdmVTY3JpcHQgPSBzY3JpcHQpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OwogICAgfQoKICAgIC8vTG9vayBmb3IgYSBkYXRhLW1haW4gc2NyaXB0IGF0dHJpYnV0ZSwgd2hpY2ggY291bGQgYWxzbyBhZGp1c3QgdGhlIGJhc2VVcmwuCiAgICBpZiAoaXNCcm93c2VyICYmICFjZmcuc2tpcERhdGFNYWluKSB7CiAgICAgICAgLy9GaWd1cmUgb3V0IGJhc2VVcmwuIEdldCBpdCBmcm9tIHRoZSBzY3JpcHQgdGFnIHdpdGggcmVxdWlyZS5qcyBpbiBpdC4KICAgICAgICBlYWNoUmV2ZXJzZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKICAgICAgICAgICAgLy9TZXQgdGhlICdoZWFkJyB3aGVyZSB3ZSBjYW4gYXBwZW5kIGNoaWxkcmVuIGJ5CiAgICAgICAgICAgIC8vdXNpbmcgdGhlIHNjcmlwdCdzIHBhcmVudC4KICAgICAgICAgICAgaWYgKCFoZWFkKSB7CiAgICAgICAgICAgICAgICBoZWFkID0gc2NyaXB0LnBhcmVudE5vZGU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vTG9vayBmb3IgYSBkYXRhLW1haW4gYXR0cmlidXRlIHRvIHNldCBtYWluIHNjcmlwdCBmb3IgdGhlIHBhZ2UKICAgICAgICAgICAgLy90byBsb2FkLiBJZiBpdCBpcyB0aGVyZSwgdGhlIHBhdGggdG8gZGF0YSBtYWluIGJlY29tZXMgdGhlCiAgICAgICAgICAgIC8vYmFzZVVybCwgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0LgogICAgICAgICAgICBkYXRhTWFpbiA9IHNjcmlwdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFpbicpOwogICAgICAgICAgICBpZiAoZGF0YU1haW4pIHsKICAgICAgICAgICAgICAgIC8vUHJlc2VydmUgZGF0YU1haW4gaW4gY2FzZSBpdCBpcyBhIHBhdGggKGkuZS4gY29udGFpbnMgJz8nKQogICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwoKICAgICAgICAgICAgICAgIC8vU2V0IGZpbmFsIGJhc2VVcmwgaWYgdGhlcmUgaXMgbm90IGFscmVhZHkgYW4gZXhwbGljaXQgb25lLAogICAgICAgICAgICAgICAgLy9idXQgb25seSBkbyBzbyBpZiB0aGUgZGF0YS1tYWluIHZhbHVlIGlzIG5vdCBhIGxvYWRlciBwbHVnaW4KICAgICAgICAgICAgICAgIC8vbW9kdWxlIElELgogICAgICAgICAgICAgICAgaWYgKCFjZmcuYmFzZVVybCAmJiBtYWluU2NyaXB0LmluZGV4T2YoJyEnKSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb2ZmIHRoZSBkaXJlY3Rvcnkgb2YgZGF0YS1tYWluIGZvciB1c2UgYXMgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9iYXNlVXJsLgogICAgICAgICAgICAgICAgICAgIHNyYyA9IG1haW5TY3JpcHQuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gc3JjLnBvcCgpOwogICAgICAgICAgICAgICAgICAgIHN1YlBhdGggPSBzcmMubGVuZ3RoID8gc3JjLmpvaW4oJy8nKSAgKyAnLycgOiAnLi8nOwoKICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCA9IHN1YlBhdGg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9TdHJpcCBvZmYgYW55IHRyYWlsaW5nIC5qcyBzaW5jZSBtYWluU2NyaXB0IGlzIG5vdwogICAgICAgICAgICAgICAgLy9saWtlIGEgbW9kdWxlIG5hbWUuCiAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gbWFpblNjcmlwdC5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CgogICAgICAgICAgICAgICAgLy9JZiBtYWluU2NyaXB0IGlzIHN0aWxsIGEgcGF0aCwgZmFsbCBiYWNrIHRvIGRhdGFNYWluCiAgICAgICAgICAgICAgICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobWFpblNjcmlwdCkpIHsKICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9QdXQgdGhlIGRhdGEtbWFpbiBzY3JpcHQgaW4gdGhlIGZpbGVzIHRvIGxvYWQuCiAgICAgICAgICAgICAgICBjZmcuZGVwcyA9IGNmZy5kZXBzID8gY2ZnLmRlcHMuY29uY2F0KG1haW5TY3JpcHQpIDogW21haW5TY3JpcHRdOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGRlZmluaXRpb25zIG9mIG1vZHVsZXMuIERpZmZlcnMgZnJvbQogICAgICogcmVxdWlyZSgpIGluIHRoYXQgYSBzdHJpbmcgZm9yIHRoZSBtb2R1bGUgc2hvdWxkIGJlIHRoZSBmaXJzdCBhcmd1bWVudCwKICAgICAqIGFuZCB0aGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZCBzaG91bGQKICAgICAqIHJldHVybiBhIHZhbHVlIHRvIGRlZmluZSB0aGUgbW9kdWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGFyZ3VtZW50J3MKICAgICAqIG5hbWUuCiAgICAgKi8KICAgIGRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBkZXBzLCBjYWxsYmFjaykgewogICAgICAgIHZhciBub2RlLCBjb250ZXh0OwoKICAgICAgICAvL0FsbG93IGZvciBhbm9ueW1vdXMgbW9kdWxlcwogICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgLy9BZGp1c3QgYXJncyBhcHByb3ByaWF0ZWx5CiAgICAgICAgICAgIGNhbGxiYWNrID0gZGVwczsKICAgICAgICAgICAgZGVwcyA9IG5hbWU7CiAgICAgICAgICAgIG5hbWUgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy9UaGlzIG1vZHVsZSBtYXkgbm90IGhhdmUgZGVwZW5kZW5jaWVzCiAgICAgICAgaWYgKCFpc0FycmF5KGRlcHMpKSB7CiAgICAgICAgICAgIGNhbGxiYWNrID0gZGVwczsKICAgICAgICAgICAgZGVwcyA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvL0lmIG5vIG5hbWUsIGFuZCBjYWxsYmFjayBpcyBhIGZ1bmN0aW9uLCB0aGVuIGZpZ3VyZSBvdXQgaWYgaXQgYQogICAgICAgIC8vQ29tbW9uSlMgdGhpbmcgd2l0aCBkZXBlbmRlbmNpZXMuCiAgICAgICAgaWYgKCFkZXBzICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgIGRlcHMgPSBbXTsKICAgICAgICAgICAgLy9SZW1vdmUgY29tbWVudHMgZnJvbSB0aGUgY2FsbGJhY2sgc3RyaW5nLAogICAgICAgICAgICAvL2xvb2sgZm9yIHJlcXVpcmUgY2FsbHMsIGFuZCBwdWxsIHRoZW0gaW50byB0aGUgZGVwZW5kZW5jaWVzLAogICAgICAgICAgICAvL2J1dCBvbmx5IGlmIHRoZXJlIGFyZSBmdW5jdGlvbiBhcmdzLgogICAgICAgICAgICBpZiAoY2FsbGJhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY29tbWVudFJlZ0V4cCwgY29tbWVudFJlcGxhY2UpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY2pzUmVxdWlyZVJlZ0V4cCwgZnVuY3Rpb24gKG1hdGNoLCBkZXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9NYXkgYmUgYSBDb21tb25KUyB0aGluZyBldmVuIHdpdGhvdXQgcmVxdWlyZSBjYWxscywgYnV0IHN0aWxsCiAgICAgICAgICAgICAgICAvL2NvdWxkIHVzZSBleHBvcnRzLCBhbmQgbW9kdWxlLiBBdm9pZCBkb2luZyBleHBvcnRzIGFuZCBtb2R1bGUKICAgICAgICAgICAgICAgIC8vd29yayB0aG91Z2ggaWYgaXQganVzdCBuZWVkcyByZXF1aXJlLgogICAgICAgICAgICAgICAgLy9SRVFVSVJFUyB0aGUgZnVuY3Rpb24gdG8gZXhwZWN0IHRoZSBDb21tb25KUyB2YXJpYWJsZXMgaW4gdGhlCiAgICAgICAgICAgICAgICAvL29yZGVyIGxpc3RlZCBiZWxvdy4KICAgICAgICAgICAgICAgIGRlcHMgPSAoY2FsbGJhY2subGVuZ3RoID09PSAxID8gWydyZXF1aXJlJ10gOiBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnXSkuY29uY2F0KGRlcHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL0lmIGluIElFIDYtOCBhbmQgaGl0IGFuIGFub255bW91cyBkZWZpbmUoKSBjYWxsLCBkbyB0aGUgaW50ZXJhY3RpdmUKICAgICAgICAvL3dvcmsuCiAgICAgICAgaWYgKHVzZUludGVyYWN0aXZlKSB7CiAgICAgICAgICAgIG5vZGUgPSBjdXJyZW50bHlBZGRpbmdTY3JpcHQgfHwgZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKTsKICAgICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgICAgIGlmICghbmFtZSkgewogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dHNbbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vQWx3YXlzIHNhdmUgb2ZmIGV2YWx1YXRpbmcgdGhlIGRlZiBjYWxsIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGhhbmRsZXIuCiAgICAgICAgLy9UaGlzIGFsbG93cyBtdWx0aXBsZSBtb2R1bGVzIHRvIGJlIGluIGEgZmlsZSB3aXRob3V0IHByZW1hdHVyZWx5CiAgICAgICAgLy90cmFjaW5nIGRlcGVuZGVuY2llcywgYW5kIGFsbG93cyBmb3IgYW5vbnltb3VzIG1vZHVsZSBzdXBwb3J0LAogICAgICAgIC8vd2hlcmUgdGhlIG1vZHVsZSBuYW1lIGlzIG5vdCBrbm93biB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBldmVudAogICAgICAgIC8vb2NjdXJzLiBJZiBubyBjb250ZXh0LCB1c2UgdGhlIGdsb2JhbCBxdWV1ZSwgYW5kIGdldCBpdCBwcm9jZXNzZWQKICAgICAgICAvL2luIHRoZSBvbnNjcmlwdCBsb2FkIGNhbGxiYWNrLgogICAgICAgIGlmIChjb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWUucHVzaChbbmFtZSwgZGVwcywgY2FsbGJhY2tdKTsKICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcFtuYW1lXSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2xvYmFsRGVmUXVldWUucHVzaChbbmFtZSwgZGVwcywgY2FsbGJhY2tdKTsKICAgICAgICB9CiAgICB9OwoKICAgIGRlZmluZS5hbWQgPSB7CiAgICAgICAgalF1ZXJ5OiB0cnVlCiAgICB9OwoKICAgIC8qKgogICAgICogRXhlY3V0ZXMgdGhlIHRleHQuIE5vcm1hbGx5IGp1c3QgdXNlcyBldmFsLCBidXQgY2FuIGJlIG1vZGlmaWVkCiAgICAgKiB0byB1c2UgYSBiZXR0ZXIsIGVudmlyb25tZW50LXNwZWNpZmljIGNhbGwuIE9ubHkgdXNlZCBmb3IgdHJhbnNwaWxpbmcKICAgICAqIGxvYWRlciBwbHVnaW5zLCBub3QgZm9yIHBsYWluIEpTIG1vZHVsZXMuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCB0aGUgdGV4dCB0byBleGVjdXRlL2V2YWx1YXRlLgogICAgICovCiAgICByZXEuZXhlYyA9IGZ1bmN0aW9uICh0ZXh0KSB7CiAgICAgICAgLypqc2xpbnQgZXZpbDogdHJ1ZSAqLwogICAgICAgIHJldHVybiBldmFsKHRleHQpOwogICAgfTsKCiAgICAvL1NldCB1cCB3aXRoIGNvbmZpZyBpbmZvLgogICAgcmVxKGNmZyk7Cn0odGhpcywgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IHNldFRpbWVvdXQpKSk7Cgo=", + "ok": true, + "headers": [ + [ + "content-type", + "text/javascript; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/icon_bundle.svg": { + "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYWRkXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImFycm93X2JhY2tfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImFycm93X2Rvd253YXJkXzI0cHgiPjxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik0yMCAxMmwtMS40MS0xLjQxTDEzIDE2LjE3VjRoLTJ2MTIuMTdsLTUuNTgtNS41OUw0IDEybDggOCA4LTh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYXJyb3dfZm9yd2FyZF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDRsLTEuNDEgMS40MUwxNi4xNyAxMUg0djJoMTIuMTdsLTUuNTggNS41OUwxMiAyMGw4LTh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfdXB3YXJkXzI0cHgiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYnJpZ2h0bmVzc182XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4VjZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYnVnX3JlcG9ydF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjYW5jZWxfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoYW5nZV9oaXN0b3J5XzI0cHgiPjxwYXRoIGQ9Ik0xMiA3Ljc3TDE4LjM5IDE4SDUuNjFMMTIgNy43N00xMiA0TDIgMjBoMjBMMTIgNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjaGV2cm9uX2xlZnRfMjRweCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hldnJvbl9yaWdodF8yNHB4Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2xlYXJfMjRweCI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJjbG9zZV8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjb250ZW50X2NvcHlfMjRweCI+PHBhdGggZD0iTTE2IDFINGMtMS4xIDAtMiAuOS0yIDJ2MTRoMlYzaDEyVjF6bTMgNEg4Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDExYzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTZIOFY3aDExdjE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJkYXJrX21vZGVfMjRweCI+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PHBhdGggZD0iTTEyLDNjLTQuOTcsMC05LDQuMDMtOSw5czQuMDMsOSw5LDlzOS00LjAzLDktOWMwLTAuNDYtMC4wNC0wLjkyLTAuMS0xLjM2Yy0wLjk4LDEuMzctMi41OCwyLjI2LTQuNCwyLjI2IGMtMi45OCwwLTUuNC0yLjQyLTUuNC01LjRjMC0xLjgxLDAuODktMy40MiwyLjI2LTQuNEMxMi45MiwzLjA0LDEyLjQ2LDMsMTIsM0wxMiwzeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImRvbmVfMjRweCI+PHBhdGggZD0iTTkgMTYuMkw0LjggMTJsLTEuNCAxLjRMOSAxOSAyMSA3bC0xLjQtMS40TDkgMTYuMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJkcmFnX2luZGljYXRvcl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTEgMThjMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yIC45LTIgMi0yIDIgLjkgMiAyem0tMi04Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMC02Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNiA0YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJlZGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImVycm9yXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImV4cGFuZF9sZXNzXzI0cHgiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJleHBhbmRfbW9yZV8yNHB4Ij48cGF0aCBkPSJNMTYuNTkgOC41OUwxMiAxMy4xNyA3LjQxIDguNTkgNiAxMGw2IDYgNi02eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmaWx0ZXJfYWx0XzI0cHgiPjxnPjxwYXRoIGQ9Ik0wLDBoMjQgTTI0LDI0SDAiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNC4yNSw1LjYxQzYuMjcsOC4yLDEwLDEzLDEwLDEzdjZjMCwwLjU1LDAuNDUsMSwxLDFoMmMwLjU1LDAsMS0wLjQ1LDEtMXYtNmMwLDAsMy43Mi00LjgsNS43NC03LjM5IEMyMC4yNSw0Ljk1LDE5Ljc4LDQsMTguOTUsNEg1LjA0QzQuMjEsNCwzLjc0LDQuOTUsNC4yNSw1LjYxeiIvPjxwYXRoIGQ9Ik0wLDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJmbGFnXzI0cHgiPjxwYXRoIGQ9Ik0xNC40IDZMMTQgNEg1djE3aDJ2LTdoNS42bC40IDJoN1Y2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZ1bGxzY3JlZW5fMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDE0SDV2NWg1di0ySDd2LTN6bS0yLTRoMlY3aDNWNUg1djV6bTEyIDdoLTN2Mmg1di01aC0ydjN6TTE0IDV2MmgzdjNoMlY1aC01eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZ1bGxzY3JlZW5fZXhpdF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTUgMTZoM3YzaDJ2LTVINXYyem0zLThINXYyaDVWNUg4djN6bTYgMTFoMnYtM2gzdi0yaC01djV6bTItMTFWNWgtMnY1aDVWOGgtM3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJnZXRfYXBwXzI0cHgiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZ3JvdXBfd29ya18yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNOCAxNy41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXpNOS41IDhjMC0xLjM4IDEuMTItMi41IDIuNS0yLjVzMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41UzkuNSA5LjM4IDkuNSA4em02LjUgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJoZWxwX291dGxpbmVfMjRweCI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iaW1hZ2Vfc2VhcmNoXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTggMTN2N0g0VjZoNS4wMmMuMDUtLjcxLjIyLTEuMzguNDgtMkg0Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi01bC0yLTJ6bS0xLjUgNWgtMTFsMi43NS0zLjUzIDEuOTYgMi4zNiAyLjc1LTMuNTR6bTIuOC05LjExYy40NC0uNy43LTEuNTEuNy0yLjM5QzIwIDQuMDEgMTcuOTkgMiAxNS41IDJTMTEgNC4wMSAxMSA2LjVzMi4wMSA0LjUgNC40OSA0LjVjLjg4IDAgMS43LS4yNiAyLjM5LS43TDIxIDEzLjQyIDIyLjQyIDEyIDE5LjMgOC44OXpNMTUuNSA5QzE0LjEyIDkgMTMgNy44OCAxMyA2LjVTMTQuMTIgNCAxNS41IDQgMTggNS4xMiAxOCA2LjUgMTYuODggOSAxNS41IDl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iaW5mb19vdXRsaW5lXzI0cHgiPjxwYXRoIGQ9Ik0xMSAxN2gydi02aC0ydjZ6bTEtMTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4ek0xMSA5aDJWN2gtMnYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJrZWVwXzI0cHgiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48cGF0aCBkPSJNMTYsOVY0bDEsMGMwLjU1LDAsMS0wLjQ1LDEtMXYwYzAtMC41NS0wLjQ1LTEtMS0xSDdDNi40NSwyLDYsMi40NSw2LDN2MCBjMCwwLjU1LDAuNDUsMSwxLDFsMSwwdjVjMCwxLjY2LTEuMzQsMy0zLDNoMHYyaDUuOTd2N2wxLDFsMS0xdi03SDE5di0yaDBDMTcuMzQsMTIsMTYsMTAuNjYsMTYsOXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ia2VlcF9vdXRsaW5lXzI0cHgiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48cGF0aCBkPSJNMTQsNHY1YzAsMS4xMiwwLjM3LDIuMTYsMSwzSDljMC42NS0wLjg2LDEtMS45LDEtM1Y0SDE0IE0xNywySDdDNi40NSwyLDYsMi40NSw2LDNjMCwwLjU1LDAuNDUsMSwxLDFjMCwwLDAsMCwwLDBsMSwwdjUgYzAsMS42Ni0xLjM0LDMtMywzdjJoNS45N3Y3bDEsMWwxLTF2LTdIMTl2LTJjMCwwLDAsMCwwLDBjLTEuNjYsMC0zLTEuMzQtMy0zVjRsMSwwYzAsMCwwLDAsMCwwYzAuNTUsMCwxLTAuNDUsMS0xIEMxOCwyLjQ1LDE3LjU1LDIsMTcsMkwxNywyeiIvPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibGlnaHRfbW9kZV8yNHB4Ij48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48cGF0aCBkPSJNMTIsN2MtMi43NiwwLTUsMi4yNC01LDVzMi4yNCw1LDUsNXM1LTIuMjQsNS01UzE0Ljc2LDcsMTIsN0wxMiw3eiBNMiwxM2wyLDBjMC41NSwwLDEtMC40NSwxLTFzLTAuNDUtMS0xLTFsLTIsMCBjLTAuNTUsMC0xLDAuNDUtMSwxUzEuNDUsMTMsMiwxM3ogTTIwLDEzbDIsMGMwLjU1LDAsMS0wLjQ1LDEtMXMtMC40NS0xLTEtMWwtMiwwYy0wLjU1LDAtMSwwLjQ1LTEsMVMxOS40NSwxMywyMCwxM3ogTTExLDJ2MiBjMCwwLjU1LDAuNDUsMSwxLDFzMS0wLjQ1LDEtMVYyYzAtMC41NS0wLjQ1LTEtMS0xUzExLDEuNDUsMTEsMnogTTExLDIwdjJjMCwwLjU1LDAuNDUsMSwxLDFzMS0wLjQ1LDEtMXYtMmMwLTAuNTUtMC40NS0xLTEtMSBDMTEuNDUsMTksMTEsMTkuNDUsMTEsMjB6IE01Ljk5LDQuNThjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwYy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MWwxLjA2LDEuMDYgYzAuMzksMC4zOSwxLjAzLDAuMzksMS40MSwwczAuMzktMS4wMywwLTEuNDFMNS45OSw0LjU4eiBNMTguMzYsMTYuOTVjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwYy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MSBsMS4wNiwxLjA2YzAuMzksMC4zOSwxLjAzLDAuMzksMS40MSwwYzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxTDE4LjM2LDE2Ljk1eiBNMTkuNDIsNS45OWMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MSBjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwbC0xLjA2LDEuMDZjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxczEuMDMsMC4zOSwxLjQxLDBMMTkuNDIsNS45OXogTTcuMDUsMTguMzYgYzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxYy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGwtMS4wNiwxLjA2Yy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MXMxLjAzLDAuMzksMS40MSwwTDcuMDUsMTguMzZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImxpbmVfd2VpZ2h0XzI0cHgiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIgeD0iMCIvPjwvZz48Zz48Zz48Zz48cGF0aCBkPSJNMywxN2gxOHYtMkgzVjE3eiBNMywyMGgxOHYtMUgzVjIweiBNMywxM2gxOHYtM0gzVjEzeiBNMyw0djRoMThWNEgzeiIvPjwvZz48L2c+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Im1vcmVfdmVydF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDhjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Im5vdGlmaWNhdGlvbnNfbm9uZV8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDIyYzEuMSAwIDItLjkgMi0yaC00YzAgMS4xLjkgMiAyIDJ6bTYtNnYtNWMwLTMuMDctMS42My01LjY0LTQuNS02LjMyVjRjMC0uODMtLjY3LTEuNS0xLjUtMS41cy0xLjUuNjctMS41IDEuNXYuNjhDNy42NCA1LjM2IDYgNy45MiA2IDExdjVsLTIgMnYxaDE2di0xbC0yLTJ6bS0yIDFIOHYtNmMwLTIuNDggMS41MS00LjUgNC00LjVzNCAyLjAyIDQgNC41djZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0icGFsZXR0ZV8yNHB4Ij48cGF0aCBkPSJNMTIgM2MtNC45NyAwLTkgNC4wMy05IDlzNC4wMyA5IDkgOWMuODMgMCAxLjUtLjY3IDEuNS0xLjUgMC0uMzktLjE1LS43NC0uMzktMS4wMS0uMjMtLjI2LS4zOC0uNjEtLjM4LS45OSAwLS44My42Ny0xLjUgMS41LTEuNUgxNmMyLjc2IDAgNS0yLjI0IDUtNSAwLTQuNDItNC4wMy04LTktOHptLTUuNSA5Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTNS42NyA5IDYuNSA5IDggOS42NyA4IDEwLjUgNy4zMyAxMiA2LjUgMTJ6bTMtNEM4LjY3IDggOCA3LjMzIDggNi41UzguNjcgNSA5LjUgNXMxLjUuNjcgMS41IDEuNVMxMC4zMyA4IDkuNSA4em01IDBjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxMy42NyA1IDE0LjUgNXMxLjUuNjcgMS41IDEuNVMxNS4zMyA4IDE0LjUgOHptMyA0Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTYuNjcgOSAxNy41IDlzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InJlZnJlc2hfMjRweCI+PHBhdGggZD0iTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InNlYXJjaF8yNHB4Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJzZXR0aW5nc18yNHB4Ij48cGF0aCBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVDMTQuNDYgMi4xOCAxNC4yNSAyIDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE0IDEyYzAtMS4xLS45LTItMi0ycy0yIC45LTIgMiAuOSAyIDIgMiAyLS45IDItMnptLTItOWMtNC45NyAwLTkgNC4wMy05IDlIMGw0IDQgNC00SDVjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjUxIDAtMi45MS0uNDktNC4wNi0xLjNsLTEuNDIgMS40NEM4LjA0IDIwLjMgOS45NCAyMSAxMiAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJzZXR0aW5nc19vdmVyc2Nhbl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyLjAxIDUuNUwxMCA4aDRsLTEuOTktMi41ek0xOCAxMHY0bDIuNS0xLjk5TDE4IDEwek02IDEwbC0yLjUgMi4wMUw2IDE0di00em04IDZoLTRsMi4wMSAyLjVMMTQgMTZ6bTctMTNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OWgxOHYxNC4wMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJ2aXNpYmlsaXR5X29mZl8yNHB4Ij48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0id2FybmluZ18yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiLz48L3N2Zz48L2RlZnM+PC9zdmc+Cg==", + "ok": true, + "headers": [ + [ + "content-type", + "image/svg+xml; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugins_listing": { + "data": "eyJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJUaW1lIFNlcmllcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogdHJ1ZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImdyYXBocyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtZ3JhcGgtZGFzaGJvYXJkIn19LCAiZGlzdHJpYnV0aW9ucyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImRpc3RyaWJ1dGlvbnMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQifX0sICJoaXN0b2dyYW1zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiaGlzdG9ncmFtcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaGlzdG9ncmFtLWRhc2hib2FyZCJ9fSwgInRleHQiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJ0ZXh0IiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi10ZXh0LWRhc2hib2FyZCJ9fSwgInByX2N1cnZlcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlBSIEN1cnZlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHItY3VydmUtZGFzaGJvYXJkIn19LCAicHJvZmlsZV9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlByb2ZpbGUiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIn19LCAiaHBhcmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhwYXJhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhwYXJhbXMtZGFzaGJvYXJkIn19LCAibWVzaCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIm1lc2giLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogIm1lc2gtZGFzaGJvYXJkIn19LCAid2l0X3JlZGlyZWN0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiV2hhdC1JZiBUb29sIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi13aXQtcmVkaXJlY3QtZGFzaGJvYXJkIn19LCAicHJvamVjdG9yIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJwcm9qZWN0b3IiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi9wcm9qZWN0b3IvaW5kZXguanMifX19", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": { + "data": "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", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/environment": { + "data": "eyJ2ZXJzaW9uIjogIjIuMTQuMSIsICJkYXRhX2xvY2F0aW9uIjogImxvZ3MvZml0IiwgIndpbmRvd190aXRsZSI6ICIiLCAiZXhwZXJpbWVudF9uYW1lIjogIiIsICJleHBlcmltZW50X2Rlc2NyaXB0aW9uIjogIiIsICJjcmVhdGlvbl90aW1lIjogMC4wLCAiZGVidWciOiB7ImRhdGFfcHJvdmlkZXIiOiAiR3JwY0RhdGFQcm92aWRlcihhZGRyPSdsb2NhbGhvc3Q6NDYyMTcnKSIsICJmbGFncyI6IHsibG9nZGlyIjogImxvZ3MvZml0IiwgImxvZ2Rpcl9zcGVjIjogIiIsICJob3N0IjogbnVsbCwgImJpbmRfYWxsIjogZmFsc2UsICJwb3J0IjogbnVsbCwgInJldXNlX3BvcnQiOiBmYWxzZSwgImxvYWRfZmFzdCI6ICJhdXRvIiwgImV4dHJhX2RhdGFfc2VydmVyX2ZsYWdzIjogIiIsICJncnBjX2NyZWRzX3R5cGUiOiAibG9jYWwiLCAiZ3JwY19kYXRhX3Byb3ZpZGVyIjogIiIsICJwdXJnZV9vcnBoYW5lZF9kYXRhIjogdHJ1ZSwgImRiIjogIiIsICJkYl9pbXBvcnQiOiBmYWxzZSwgImluc3BlY3QiOiBmYWxzZSwgInZlcnNpb25fdGIiOiBmYWxzZSwgInRhZyI6ICIiLCAiZXZlbnRfZmlsZSI6ICIiLCAicGF0aF9wcmVmaXgiOiAiIiwgIndpbmRvd190aXRsZSI6ICIiLCAibWF4X3JlbG9hZF90aHJlYWRzIjogMSwgInJlbG9hZF9pbnRlcnZhbCI6IDUuMCwgInJlbG9hZF90YXNrIjogImF1dG8iLCAicmVsb2FkX211bHRpZmlsZSI6IG51bGwsICJyZWxvYWRfbXVsdGlmaWxlX2luYWN0aXZlX3NlY3MiOiA4NjQwMCwgImdlbmVyaWNfZGF0YSI6ICJhdXRvIiwgInNhbXBsZXNfcGVyX3BsdWdpbiI6IHt9LCAiZGV0ZWN0X2ZpbGVfcmVwbGFjZW1lbnQiOiBudWxsLCAiX190ZW5zb3Jib2FyZF9zdWJjb21tYW5kIjogInNlcnZlIn19fQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/experiment?request=%7B%22experimentName%22:%22defaultExperimentId%22%7D": { + "data": "ewogICJuYW1lIjogIiIsCiAgImRlc2NyaXB0aW9uIjogIiIsCiAgInVzZXIiOiAiIiwKICAidGltZUNyZWF0ZWRTZWNzIjogMC4wLAogICJocGFyYW1JbmZvcyI6IFtdLAogICJtZXRyaWNJbmZvcyI6IFtdCn0=", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/runs": { + "data": "WyJyZXNuZXQ1MFYyLzIwMjMxMjA5LTE0MjE1Mi90cmFpbiIsICJyZXNuZXQ1MFYyLzIwMjMxMjA5LTE0MjE1Mi92YWxpZGF0aW9uIiwgImVmZmljaWVudG5ldEIwLzIwMjMxMjA5LTE0MjMxMy90cmFpbiIsICJlZmZpY2llbnRuZXRCMC8yMDIzMTIwOS0xNDIzMTMvdmFsaWRhdGlvbiJd", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": { + "data": "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", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/runs": { + "data": "WyJyZXNuZXQ1MFYyLzIwMjMxMjA5LTE0MjE1Mi90cmFpbiIsICJyZXNuZXQ1MFYyLzIwMjMxMjA5LTE0MjE1Mi92YWxpZGF0aW9uIiwgImVmZmljaWVudG5ldEIwLzIwMjMxMjA5LTE0MjMxMy90cmFpbiIsICJlZmZpY2llbnRuZXRCMC8yMDIzMTIwOS0xNDIzMTMvdmFsaWRhdGlvbiJd", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/session_groups?request=%7B%22experimentName%22:%22defaultExperimentId%22,%22allowedStatuses%22:%5B%22STATUS_FAILURE%22,%22STATUS_RUNNING%22,%22STATUS_SUCCESS%22,%22STATUS_UNKNOWN%22%5D,%22colParams%22:%5B%5D,%22startIndex%22:0,%22sliceSize%22:1000000%7D": { + "data": "ewogICJzZXNzaW9uR3JvdXBzIjogW10sCiAgInRvdGFsU2l6ZSI6IDAKfQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/tags": { + "data": "eyJzY2FsYXJzIjogeyJydW5UYWdJbmZvIjogeyJyZXNuZXQ1MFYyLzIwMjMxMjA5LTE0MjE1Mi92YWxpZGF0aW9uIjogWyJlcG9jaF9hY2N1cmFjeSIsICJlcG9jaF9sb3NzIiwgImV2YWx1YXRpb25fYWNjdXJhY3lfdnNfaXRlcmF0aW9ucyIsICJldmFsdWF0aW9uX2xvc3NfdnNfaXRlcmF0aW9ucyJdLCAiZWZmaWNpZW50bmV0QjAvMjAyMzEyMDktMTQyMzEzL3ZhbGlkYXRpb24iOiBbImVwb2NoX2FjY3VyYWN5IiwgImVwb2NoX2xvc3MiLCAiZXZhbHVhdGlvbl9hY2N1cmFjeV92c19pdGVyYXRpb25zIiwgImV2YWx1YXRpb25fbG9zc192c19pdGVyYXRpb25zIl0sICJlZmZpY2llbnRuZXRCMC8yMDIzMTIwOS0xNDIzMTMvdHJhaW4iOiBbImVwb2NoX2FjY3VyYWN5IiwgImVwb2NoX2xvc3MiXSwgInJlc25ldDUwVjIvMjAyMzEyMDktMTQyMTUyL3RyYWluIjogWyJlcG9jaF9hY2N1cmFjeSIsICJlcG9jaF9sb3NzIl19LCAidGFnRGVzY3JpcHRpb25zIjoge319LCAiaGlzdG9ncmFtcyI6IHsicnVuVGFnSW5mbyI6IHt9LCAidGFnRGVzY3JpcHRpb25zIjoge319LCAiaW1hZ2VzIjogeyJ0YWdEZXNjcmlwdGlvbnMiOiB7fSwgInRhZ1J1blNhbXBsZWRJbmZvIjoge319fQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2": { + "data": "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", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22epoch_accuracy%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImVwb2NoX2FjY3VyYWN5IiwgInJ1blRvU2VyaWVzIjogeyJyZXNuZXQ1MFYyLzIwMjMxMjA5LTE0MjE1Mi92YWxpZGF0aW9uIjogW3sid2FsbFRpbWUiOiAxNzAyMTMxNzM4LjE3NjE1LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNjM1MjAwMDIzNjUxMTIzfSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE3NDguMTg1NjAxLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNzM2MDAwMDAxNDMwNTExNX0sIHsid2FsbFRpbWUiOiAxNzAyMTMxNzU5LjEzNzU1OCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjc2Mzk5OTk5ODU2OTQ4ODV9LCB7IndhbGxUaW1lIjogMTcwMjEzMTc2OS45OTg0ODUsICJzdGVwIjogMywgInZhbHVlIjogMC43NjQ0MDAwMDUzNDA1NzYyfSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE3ODIuMjg1NSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjc4MjgwMDAxODc4NzM4NH1dLCAiZWZmaWNpZW50bmV0QjAvMjAyMzEyMDktMTQyMzEzL3ZhbGlkYXRpb24iOiBbeyJ3YWxsVGltZSI6IDE3MDIxMzE4MTQuMjU5Nzc0LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNzAzMTk5OTgyNjQzMTI3NH0sIHsid2FsbFRpbWUiOiAxNzAyMTMxODI3LjczMDgxMywgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjgwMjc5OTk5OTcxMzg5Nzd9LCB7IndhbGxUaW1lIjogMTcwMjEzMTg0MC43MTg0NjksICJzdGVwIjogMiwgInZhbHVlIjogMC44Mzc5OTk5OTk1MjMxNjI4fSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE4NjAuNjc1ODgyLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuODQ4ODAwMDAzNTI4NTk1fSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE4NzMuMTYwODIzLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuODU2NDAwMDEyOTY5OTcwN31dLCAiZWZmaWNpZW50bmV0QjAvMjAyMzEyMDktMTQyMzEzL3RyYWluIjogW3sid2FsbFRpbWUiOiAxNzAyMTMxODE0LjI1ODM4OSwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjM5NTk5OTk5Nzg1NDIzMjh9LCB7IndhbGxUaW1lIjogMTcwMjEzMTgyNy43MjgxMzIsICJzdGVwIjogMSwgInZhbHVlIjogMC43ODI2NjY2ODMxOTcwMjE1fSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE4NDAuNzE2ODY4LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuODM0NjY2NjY5MzY4NzQzOX0sIHsid2FsbFRpbWUiOiAxNzAyMTMxODYwLjY3NDQyLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuODYxMzMzMzEwNjA0MDk1NX0sIHsid2FsbFRpbWUiOiAxNzAyMTMxODczLjE1OTA2OSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjg4MjY2NjY0NzQzNDIzNDZ9XSwgInJlc25ldDUwVjIvMjAyMzEyMDktMTQyMTUyL3RyYWluIjogW3sid2FsbFRpbWUiOiAxNzAyMTMxNzM4LjE3NDcxLCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuMzc4NjY2NjY5MTMwMzI1M30sIHsid2FsbFRpbWUiOiAxNzAyMTMxNzQ4LjE4Mzg4OCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjc0MTMzMzMwNTgzNTcyMzl9LCB7IndhbGxUaW1lIjogMTcwMjEzMTc1OS4xMzYyMDQsICJzdGVwIjogMiwgInZhbHVlIjogMC44MzczMzMzMjE1NzEzNTAxfSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE3NjkuOTk2OTU5LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuODc1OTk5OTg3MTI1Mzk2N30sIHsid2FsbFRpbWUiOiAxNzAyMTMxNzgyLjI4NDExNiwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjkxNDY2NjY1MjY3OTQ0MzR9XX19XQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22epoch_loss%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImVwb2NoX2xvc3MiLCAicnVuVG9TZXJpZXMiOiB7InJlc25ldDUwVjIvMjAyMzEyMDktMTQyMTUyL3ZhbGlkYXRpb24iOiBbeyJ3YWxsVGltZSI6IDE3MDIxMzE3MzguMTc1NDg5LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDEuMTQ3MTgzODk1MTExMDg0fSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE3NDguMTg0ODQzLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuODQwNjIzNTU3NTY3NTk2NH0sIHsid2FsbFRpbWUiOiAxNzAyMTMxNzU5LjEzNjk0NiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjc0ODY4MDE3NDM1MDczODV9LCB7IndhbGxUaW1lIjogMTcwMjEzMTc2OS45OTc4MDQsICJzdGVwIjogMywgInZhbHVlIjogMC43MDkwODI2MDM0NTQ1ODk4fSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE3ODIuMjg0ODk5LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjc0OTM1MjIxNjcyMDU4MX1dLCAiZWZmaWNpZW50bmV0QjAvMjAyMzEyMDktMTQyMzEzL3ZhbGlkYXRpb24iOiBbeyJ3YWxsVGltZSI6IDE3MDIxMzE4MTQuMjU5MTM3LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDEuMzQ4NTM0NzAzMjU0Njk5N30sIHsid2FsbFRpbWUiOiAxNzAyMTMxODI3LjcyOTM1LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuODkxMTMwOTgzODI5NDk4M30sIHsid2FsbFRpbWUiOiAxNzAyMTMxODQwLjcxNzgwNiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjcxMTA1ODkxNDY2MTQwNzV9LCB7IndhbGxUaW1lIjogMTcwMjEzMTg2MC42NzUyNDUsICJzdGVwIjogMywgInZhbHVlIjogMC42MjE1MjYwMDI4ODM5MTExfSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE4NzMuMTYwMTMyLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTY1NDc2MjM4NzI3NTY5Nn1dLCAiZWZmaWNpZW50bmV0QjAvMjAyMzEyMDktMTQyMzEzL3RyYWluIjogW3sid2FsbFRpbWUiOiAxNzAyMTMxODE0LjI1NzMyOSwgInN0ZXAiOiAwLCAidmFsdWUiOiAxLjg5NTQzMDY4NDA4OTY2MDZ9LCB7IndhbGxUaW1lIjogMTcwMjEzMTgyNy43MjU5MzYsICJzdGVwIjogMSwgInZhbHVlIjogMS4wODcxMjM3NTE2NDAzMTk4fSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE4NDAuNzE1ODM5LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNzY4NzgxODQwODAxMjM5fSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE4NjAuNjczMzU4LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjE3MDMzNDIxOTkzMjU1Nn0sIHsid2FsbFRpbWUiOiAxNzAyMTMxODczLjE1NzM5OSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjUxOTUzNTg5OTE2MjI5MjV9XSwgInJlc25ldDUwVjIvMjAyMzEyMDktMTQyMTUyL3RyYWluIjogW3sid2FsbFRpbWUiOiAxNzAyMTMxNzM4LjE3MzgwOCwgInN0ZXAiOiAwLCAidmFsdWUiOiAxLjg3MDg5MjA0Nzg4MjA4fSwgeyJ3YWxsVGltZSI6IDE3MDIxMzE3NDguMTgyNjIxLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuODg0MjM4NjYwMzM1NTQwOH0sIHsid2FsbFRpbWUiOiAxNzAyMTMxNzU5LjEzNTIzOCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjU5OTEzOTM5MjM3NTk0Nn0sIHsid2FsbFRpbWUiOiAxNzAyMTMxNzY5Ljk5NTkyLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDYzMTgyMDYxOTEwNjI5M30sIHsid2FsbFRpbWUiOiAxNzAyMTMxNzgyLjI4MzExNCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjM3Njg2NzU5MjMzNDc0NzN9XX19XQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": { + "data": "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", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/chart_worker.js?_file_hash=2c1e71c5": { + "data": "KCgpPT57dmFyIEgwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWMD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgRzA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGFmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIFcwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscTA9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgY2Y9TWF0aC5wb3csbGY9KG4sdCxlKT0+dCBpbiBuP0gwKG4sdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pOm5bdF09ZSxObz0obix0KT0+e2Zvcih2YXIgZSBpbiB0fHwodD17fSkpVzAuY2FsbCh0LGUpJiZsZihuLGUsdFtlXSk7aWYoYWYpZm9yKHZhciBlIG9mIGFmKHQpKXEwLmNhbGwodCxlKSYmbGYobixlLHRbZV0pO3JldHVybiBufSx1Zj0obix0KT0+VjAobixHMCh0KSk7dmFyIGhmPShuLHQsZSk9Pm5ldyBQcm9taXNlKChpLHIpPT57dmFyIHM9bD0+e3RyeXthKGUubmV4dChsKSl9Y2F0Y2goYyl7cihjKX19LG89bD0+e3RyeXthKGUudGhyb3cobCkpfWNhdGNoKGMpe3IoYyl9fSxhPWw9PmwuZG9uZT9pKGwudmFsdWUpOlByb21pc2UucmVzb2x2ZShsLnZhbHVlKS50aGVuKHMsbyk7YSgoZT1lLmFwcGx5KG4sdCkpLm5leHQoKSl9KTt2YXIgb247KGZ1bmN0aW9uKG4pe25bbi5MSU5FQVI9MF09IkxJTkVBUiIsbltuLkxPRzEwPTFdPSJMT0cxMCIsbltuLlRJTUU9Ml09IlRJTUUifSkob258fChvbj17fSkpO2Z1bmN0aW9uIGFuKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIGlzKG4pe3JldHVybiBuLmxlbmd0aD09PTEmJihuPVgwKG4pKSx7bGVmdDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPDA/aT1zKzE6cj1zfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPjA/cj1zOmk9cysxfXJldHVybiBpfX19ZnVuY3Rpb24gWDAobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFuKG4odCksZSl9fXZhciBmZj1pcyhhbiksZGY9ZmYucmlnaHQsWTA9ZmYubGVmdCxCbj1kZjt2YXIgcGY9QXJyYXkucHJvdG90eXBlLEowPXBmLnNsaWNlLCQwPXBmLm1hcDt2YXIga2w9TWF0aC5zcXJ0KDUwKSxIbD1NYXRoLnNxcnQoMTApLFZsPU1hdGguc3FydCgyKTtmdW5jdGlvbiBycyhuLHQsZSl7dmFyIGkscj0tMSxzLG8sYTtpZih0PSt0LG49K24sZT0rZSxuPT09dCYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYocz1uLG49dCx0PXMpLChhPUppKG4sdCxlKSk9PT0wfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKHQtbisxKSk7KytyPHM7KW9bcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKG4tdCsxKSk7KytyPHM7KW9bcl09KG4tcikvYTtyZXR1cm4gaSYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBKaShuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxzPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KHM+PWtsPzEwOnM+PUhsPzU6cz49Vmw/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhzPj1rbD8xMDpzPj1IbD81OnM+PVZsPzI6MSl9ZnVuY3Rpb24gX24obix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSkscz1pL3I7cmV0dXJuIHM+PWtsP3IqPTEwOnM+PUhsP3IqPTU6cz49VmwmJihyKj0yKSx0PG4/LXI6cn12YXIgZXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBueD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB5Zigpe2Zvcih2YXIgbj0wLHQ9YXJndW1lbnRzLmxlbmd0aCxlPXt9LGk7bjx0Oysrbil7aWYoIShpPWFyZ3VtZW50c1tuXSsiIil8fGkgaW4gZXx8L1tccy5dLy50ZXN0KGkpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2kpO2VbaV09W119cmV0dXJuIG5ldyB6byhlKX1mdW5jdGlvbiB6byhuKXt0aGlzLl89bn1mdW5jdGlvbiBpeChuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfXpvLnByb3RvdHlwZT15Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnpvLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5fLGk9aXgobisiIixlKSxyLHM9LTEsbz1pLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytzPG87KWlmKChyPShuPWlbc10pLnR5cGUpJiYocj1yeChlW3JdLG4ubmFtZSkpKXJldHVybiByO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK3M8bzspaWYocj0obj1pW3NdKS50eXBlKWVbcl09eGYoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihyIGluIGUpZVtyXT14ZihlW3JdLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBuPXt9LHQ9dGhpcy5fO2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXS5zbGljZSgpO3JldHVybiBuZXcgem8obil9LGNhbGw6ZnVuY3Rpb24obix0KXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBlPW5ldyBBcnJheShyKSxpPTAscixzO2k8cjsrK2kpZVtpXT1hcmd1bWVudHNbaSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2ZvcihzPXRoaXMuX1tuXSxpPTAscj1zLmxlbmd0aDtpPHI7KytpKXNbaV0udmFsdWUuYXBwbHkodCxlKX0sYXBwbHk6ZnVuY3Rpb24obix0LGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKHZhciBpPXRoaXMuX1tuXSxyPTAscz1pLmxlbmd0aDtyPHM7KytyKWlbcl0udmFsdWUuYXBwbHkodCxlKX19O2Z1bmN0aW9uIHJ4KG4sdCl7Zm9yKHZhciBlPTAsaT1uLmxlbmd0aCxyO2U8aTsrK2UpaWYoKHI9bltlXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24geGYobix0LGUpe2Zvcih2YXIgaT0wLHI9bi5sZW5ndGg7aTxyOysraSlpZihuW2ldLm5hbWU9PT10KXtuW2ldPW54LG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBlIT1udWxsJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn12YXIgV2w9eWY7dmFyIFVvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixxbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6VW8seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiB3bihuKXt2YXIgdD1uKz0iIixlPXQuaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYodD1uLnNsaWNlKDAsZSkpIT09InhtbG5zIiYmKG49bi5zbGljZShlKzEpKSxxbC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6cWxbdF0sbG9jYWw6bn06bn1mdW5jdGlvbiBzeChuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PVVvJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Vbz90LmNyZWF0ZUVsZW1lbnQobik6dC5jcmVhdGVFbGVtZW50TlMoZSxuKX19ZnVuY3Rpb24gb3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQm8obil7dmFyIHQ9d24obik7cmV0dXJuKHQubG9jYWw/b3g6c3gpKHQpfWZ1bmN0aW9uIGF4KCl7fWZ1bmN0aW9uIGRpKG4pe3JldHVybiBuPT1udWxsP2F4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihuKX19ZnVuY3Rpb24gdmYobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPWRpKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBzPXRbcl0sbz1zLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KG8pLGwsYyx1PTA7dTxvOysrdSkobD1zW3VdKSYmKGM9bi5jYWxsKGwsbC5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxhW3VdPWMpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBseCgpe3JldHVybltdfWZ1bmN0aW9uIG9zKG4pe3JldHVybiBuPT1udWxsP2x4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChuKX19ZnVuY3Rpb24gX2Yobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgbz10W3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBjZShpLHIpfWZ1bmN0aW9uIGFzKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIHdmKG4pe3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1hcyhuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgcz10W3JdLG89cy5sZW5ndGgsYT1pW3JdPVtdLGwsYz0wO2M8bzsrK2MpKGw9c1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxzKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPbyhuKXtyZXR1cm4gbmV3IEFycmF5KG4ubGVuZ3RoKX1mdW5jdGlvbiBNZigpe3JldHVybiBuZXcgY2UodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoT28pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGxzKG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWxzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bHMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07ZnVuY3Rpb24gYmYobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fXZhciBTZj0iJCI7ZnVuY3Rpb24gY3gobix0LGUsaSxyLHMpe2Zvcih2YXIgbz0wLGEsbD10Lmxlbmd0aCxjPXMubGVuZ3RoO288YzsrK28pKGE9dFtvXSk/KGEuX19kYXRhX189c1tvXSxpW29dPWEpOmVbb109bmV3IGxzKG4sc1tvXSk7Zm9yKDtvPGw7KytvKShhPXRbb10pJiYocltvXT1hKX1mdW5jdGlvbiB1eChuLHQsZSxpLHIscyxvKXt2YXIgYSxsLGM9e30sdT10Lmxlbmd0aCxoPXMubGVuZ3RoLGY9bmV3IEFycmF5KHUpLGQ7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYoZlthXT1kPVNmK28uY2FsbChsLGwuX19kYXRhX18sYSx0KSxkIGluIGM/clthXT1sOmNbZF09bCk7Zm9yKGE9MDthPGg7KythKWQ9U2Yrby5jYWxsKG4sc1thXSxhLHMpLChsPWNbZF0pPyhpW2FdPWwsbC5fX2RhdGFfXz1zW2FdLGNbZF09bnVsbCk6ZVthXT1uZXcgbHMobixzW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbZlthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBFZihuLHQpe2lmKCFuKXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oTCl7ZFsrK2NdPUx9KSxkO3ZhciBlPXQ/dXg6Y3gsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1iZihuKSk7Zm9yKHZhciBzPXIubGVuZ3RoLG89bmV3IEFycmF5KHMpLGE9bmV3IEFycmF5KHMpLGw9bmV3IEFycmF5KHMpLGM9MDtjPHM7KytjKXt2YXIgdT1pW2NdLGg9cltjXSxmPWgubGVuZ3RoLGQ9bi5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLGkpLGc9ZC5sZW5ndGgseD1hW2NdPW5ldyBBcnJheShnKSx2PW9bY109bmV3IEFycmF5KGcpLG09bFtjXT1uZXcgQXJyYXkoZik7ZSh1LGgseCx2LG0sZCx0KTtmb3IodmFyIHA9MCxiPTAsXyxTO3A8ZzsrK3ApaWYoXz14W3BdKXtmb3IocD49YiYmKGI9cCsxKTshKFM9dltiXSkmJisrYjxnOyk7Xy5fbmV4dD1TfHxudWxsfX1yZXR1cm4gbz1uZXcgY2UobyxpKSxvLl9lbnRlcj1hLG8uX2V4aXQ9bCxvfWZ1bmN0aW9uIFRmKCl7cmV0dXJuIG5ldyBjZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE9vKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBBZihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxzPXRoaXMuZXhpdCgpO3JldHVybiBpPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oaSk6aS5hcHBlbmQobisiIiksdCE9bnVsbCYmKHI9dChyKSksZT09bnVsbD9zLnJlbW92ZSgpOmUocyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn1mdW5jdGlvbiBDZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgY2Uobyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBSZigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0tMSxlPW4ubGVuZ3RoOysrdDxlOylmb3IodmFyIGk9blt0XSxyPWkubGVuZ3RoLTEscz1pW3JdLG87LS1yPj0wOykobz1pW3JdKSYmKHMmJm8uY29tcGFyZURvY3VtZW50UG9zaXRpb24ocyleNCYmcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHMpLHM9byk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gTGYobil7bnx8KG49aHgpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9uKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKXtmb3IodmFyIG89ZVtzXSxhPW8ubGVuZ3RoLGw9cltzXT1uZXcgQXJyYXkoYSksYyx1PTA7dTxhOysrdSkoYz1vW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgY2Uocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGh4KG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIFBmKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIERmKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59ZnVuY3Rpb24gSWYoKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLHM9aS5sZW5ndGg7cjxzOysrcil7dmFyIG89aVtyXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIE5mKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn1mdW5jdGlvbiBGZigpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6ZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciByPXRbZV0scz0wLG89ci5sZW5ndGgsYTtzPG87KytzKShhPXJbc10pJiZuLmNhbGwoYSxhLl9fZGF0YV9fLHMscik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGR4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gcHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBteChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBneChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX19ZnVuY3Rpb24geHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gVWYobix0KXt2YXIgZT13bihuKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTppLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2UubG9jYWw/ZHg6Zng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZS5sb2NhbD94eDpneDplLmxvY2FsP214OnB4KShlLHQpKX1mdW5jdGlvbiBrbyhuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9ZnVuY3Rpb24geXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gdngobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBfeChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aT09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpLGUpfX1mdW5jdGlvbiBCZihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/eXg6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/X3g6dngpKG4sdCxlPT1udWxsPyIiOmUpKTpPbih0aGlzLm5vZGUoKSxuKX1mdW5jdGlvbiBPbihuLHQpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fGtvKG4pLmdldENvbXB1dGVkU3R5bGUobixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHd4KG4pe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW25dfX1mdW5jdGlvbiBNeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gYngobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX19ZnVuY3Rpb24gT2Yobix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD93eDp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ieDpNeCkobix0KSk6dGhpcy5ub2RlKClbbl19ZnVuY3Rpb24ga2Yobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFhsKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IEhmKG4pfWZ1bmN0aW9uIEhmKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1rZihuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfUhmLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dDwwJiYodGhpcy5fbmFtZXMucHVzaChuKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihuKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2Yobik+PTB9fTtmdW5jdGlvbiBWZihuLHQpe2Zvcih2YXIgZT1YbChuKSxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWUuYWRkKHRbaV0pfWZ1bmN0aW9uIEdmKG4sdCl7Zm9yKHZhciBlPVhsKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gU3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7VmYodGhpcyxuKX19ZnVuY3Rpb24gRXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7R2YodGhpcyxuKX19ZnVuY3Rpb24gVHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VmY6R2YpKHRoaXMsbil9fWZ1bmN0aW9uIFdmKG4sdCl7dmFyIGU9a2YobisiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9WGwodGhpcy5ub2RlKCkpLHI9LTEscz1lLmxlbmd0aDsrK3I8czspaWYoIWkuY29udGFpbnMoZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/VHg6dD9TeDpFeCkoZSx0KSl9ZnVuY3Rpb24gQXgoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEN4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gUngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHFmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChuPT1udWxsP0F4Oih0eXBlb2Ygbj09ImZ1bmN0aW9uIj9SeDpDeCkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIEx4KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gRHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBYZihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobj09bnVsbD9MeDoodHlwZW9mIG49PSJmdW5jdGlvbiI/RHg6UHgpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9ZnVuY3Rpb24gSXgoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWWYoKXtyZXR1cm4gdGhpcy5lYWNoKEl4KX1mdW5jdGlvbiBOeCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFpmKCl7cmV0dXJuIHRoaXMuZWFjaChOeCl9ZnVuY3Rpb24gSmYobil7dmFyIHQ9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBGeCgpe3JldHVybiBudWxsfWZ1bmN0aW9uICRmKG4sdCl7dmFyIGU9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKSxpPXQ9PW51bGw/Rng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpkaSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gengoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBLZigpe3JldHVybiB0aGlzLmVhY2goengpfWZ1bmN0aW9uIFV4KCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBCeCgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gUWYobil7cmV0dXJuIHRoaXMuc2VsZWN0KG4/Qng6VXgpfWZ1bmN0aW9uIGpmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZWQ9e30sWWw9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYodGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4gdGR8fChlZD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHRkO2Z1bmN0aW9uIE94KG4sdCxlKXtyZXR1cm4gbj1uZChuLHQsZSksZnVuY3Rpb24oaSl7dmFyIHI9aS5yZWxhdGVkVGFyZ2V0Oyghcnx8ciE9PXRoaXMmJiEoci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJm4uY2FsbCh0aGlzLGkpfX1mdW5jdGlvbiBuZChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPVlsO1lsPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e1lsPXJ9fX1mdW5jdGlvbiBreChuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLGk9dC5pbmRleE9mKCIuIik7cmV0dXJuIGk+PTAmJihlPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSkse3R5cGU6dCxuYW1lOmV9fSl9ZnVuY3Rpb24gSHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciBlPTAsaT0tMSxyPXQubGVuZ3RoLHM7ZTxyOysrZSlzPXRbZV0sKCFuLnR5cGV8fHMudHlwZT09PW4udHlwZSkmJnMubmFtZT09PW4ubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKTp0WysraV09czsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gVngobix0LGUpe3ZhciBpPWVkLmhhc093blByb3BlcnR5KG4udHlwZSk/T3g6bmQ7cmV0dXJuIGZ1bmN0aW9uKHIscyxvKXt2YXIgYT10aGlzLl9fb24sbCxjPWkodCxzLG8pO2lmKGEpe2Zvcih2YXIgdT0wLGg9YS5sZW5ndGg7dTxoOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIobi50eXBlLGMsZSksbD17dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6ZX0sYT9hLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gaWQobix0LGUpe3ZhciBpPWt4KG4rIiIpLHIscz1pLmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKXtmb3IodmFyIGw9MCxjPWEubGVuZ3RoLHU7bDxjOysrbClmb3Iocj0wLHU9YVtsXTtyPHM7KytyKWlmKChvPWlbcl0pLnR5cGU9PT11LnR5cGUmJm8ubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKGE9dD9WeDpIeCxlPT1udWxsJiYoZT0hMSkscj0wO3I8czsrK3IpdGhpcy5lYWNoKGEoaVtyXSx0LGUpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiByZChuLHQsZSl7dmFyIGk9a28obikscj1pLkN1c3RvbUV2ZW50O3R5cGVvZiByPT0iZnVuY3Rpb24iP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gR3gobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcmQodGhpcyxuLHQpfX1mdW5jdGlvbiBXeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiByZCh0aGlzLG4sdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBzZChuLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1d4Okd4KShuLHQpKX12YXIgcXg9W251bGxdO2Z1bmN0aW9uIGNlKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG9kKCl7cmV0dXJuIG5ldyBjZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHF4KX1jZS5wcm90b3R5cGU9b2QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjZSxzZWxlY3Q6dmYsc2VsZWN0QWxsOl9mLGZpbHRlcjp3ZixkYXRhOkVmLGVudGVyOk1mLGV4aXQ6VGYsam9pbjpBZixtZXJnZTpDZixvcmRlcjpSZixzb3J0OkxmLGNhbGw6UGYsbm9kZXM6RGYsbm9kZTpJZixzaXplOk5mLGVtcHR5OkZmLGVhY2g6emYsYXR0cjpVZixzdHlsZTpCZixwcm9wZXJ0eTpPZixjbGFzc2VkOldmLHRleHQ6cWYsaHRtbDpYZixyYWlzZTpZZixsb3dlcjpaZixhcHBlbmQ6SmYsaW5zZXJ0OiRmLHJlbW92ZTpLZixjbG9uZTpRZixkYXR1bTpqZixvbjppZCxkaXNwYXRjaDpzZH07dmFyIE1uPW9kO2Z1bmN0aW9uIEhvKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiBabChuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBocygpe312YXIgY3M9LjcsR289MS9jcywkaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsdXM9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsY249IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFh4PS9eIyhbMC05YS1mXXszLDh9KSQvLFl4PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1skaSwkaSwkaV0rIlxcKSQiKSxaeD1uZXcgUmVnRXhwKCJecmdiXFwoIitbY24sY24sY25dKyJcXCkkIiksSng9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skaSwkaSwkaSx1c10rIlxcKSQiKSwkeD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2NuLGNuLGNuLHVzXSsiXFwpJCIpLEt4PW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t1cyxjbixjbl0rIlxcKSQiKSxReD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3VzLGNuLGNuLHVzXSsiXFwpJCIpLGFkPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0hvKGhzLEplLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmxkLGZvcm1hdEhleDpsZCxmb3JtYXRIc2w6angsZm9ybWF0UmdiOmNkLHRvU3RyaW5nOmNkfSk7ZnVuY3Rpb24gbGQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBqeCgpe3JldHVybiBwZCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBjZCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEplKG4pe3ZhciB0LGU7cmV0dXJuIG49KG4rIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVh4LmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksZT09PTY/dWQodCk6ZT09PTM/bmV3IFVlKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTplPT09OD9Wbyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTplPT09ND9Wbyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVl4LmV4ZWMobikpP25ldyBVZSh0WzFdLHRbMl0sdFszXSwxKToodD1aeC5leGVjKG4pKT9uZXcgVWUodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SnguZXhlYyhuKSk/Vm8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9JHguZXhlYyhuKSk/Vm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9S3guZXhlYyhuKSk/ZGQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1ReC5leGVjKG4pKT9kZCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFkLmhhc093blByb3BlcnR5KG4pP3VkKGFkW25dKTpuPT09InRyYW5zcGFyZW50Ij9uZXcgVWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB1ZChuKXtyZXR1cm4gbmV3IFVlKG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NSwxKX1mdW5jdGlvbiBWbyhuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IFVlKG4sdCxlLGkpfWZ1bmN0aW9uIHR5KG4pe3JldHVybiBuIGluc3RhbmNlb2YgaHN8fChuPUplKG4pKSxuPyhuPW4ucmdiKCksbmV3IFVlKG4ucixuLmcsbi5iLG4ub3BhY2l0eSkpOm5ldyBVZX1mdW5jdGlvbiBLaShuLHQsZSxpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dHkobik6bmV3IFVlKG4sdCxlLGk9PW51bGw/MTppKX1mdW5jdGlvbiBVZShuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9SG8oVWUsS2ksWmwoaHMse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW49PW51bGw/R286TWF0aC5wb3coR28sbiksbmV3IFVlKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBVZSh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmhkLGZvcm1hdEhleDpoZCxmb3JtYXRSZ2I6ZmQsdG9TdHJpbmc6ZmR9KSk7ZnVuY3Rpb24gaGQoKXtyZXR1cm4iIyIrSmwodGhpcy5yKStKbCh0aGlzLmcpK0psKHRoaXMuYil9ZnVuY3Rpb24gZmQoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhuPT09MT8iKSI6IiwgIituKyIpIil9ZnVuY3Rpb24gSmwobil7cmV0dXJuIG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpLChuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gZGQobix0LGUsaSl7cmV0dXJuIGk8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyBsbihuLHQsZSxpKX1mdW5jdGlvbiBwZChuKXtpZihuIGluc3RhbmNlb2YgbG4pcmV0dXJuIG5ldyBsbihuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBoc3x8KG49SmUobikpLCFuKXJldHVybiBuZXcgbG47aWYobiBpbnN0YW5jZW9mIGxuKXJldHVybiBuO249bi5yZ2IoKTt2YXIgdD1uLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSkscz1NYXRoLm1heCh0LGUsaSksbz1OYU4sYT1zLXIsbD0ocytyKS8yO3JldHVybiBhPyh0PT09cz9vPShlLWkpL2ErKGU8aSkqNjplPT09cz9vPShpLXQpL2ErMjpvPSh0LWUpL2ErNCxhLz1sPC41P3MrcjoyLXMtcixvKj02MCk6YT1sPjAmJmw8MT8wOm8sbmV3IGxuKG8sYSxsLG4ub3BhY2l0eSl9ZnVuY3Rpb24gcGkobix0LGUsaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BkKG4pOm5ldyBsbihuLHQsZSxpPT1udWxsPzE6aSl9ZnVuY3Rpb24gbG4obix0LGUsaSl7dGhpcy5oPStuLHRoaXMucz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfUhvKGxuLHBpLFpsKGhzLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP0dvOk1hdGgucG93KEdvLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IFVlKCRsKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLCRsKG4scixpKSwkbChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisobj09PTE/IikiOiIsICIrbisiKSIpfX0pKTtmdW5jdGlvbiAkbChuLHQsZSl7cmV0dXJuKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpKjI1NX1mdW5jdGlvbiBLbChuLHQsZSxpLHIpe3ZhciBzPW4qbixvPXMqbjtyZXR1cm4oKDEtMypuKzMqcy1vKSp0Kyg0LTYqcyszKm8pKmUrKDErMypuKzMqcy0zKm8pKmkrbypyKS82fWZ1bmN0aW9uIG1kKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0scz1uW2krMV0sbz1pPjA/bltpLTFdOjIqci1zLGE9aTx0LTE/bltpKzJdOjIqcy1yO3JldHVybiBLbCgoZS1pL3QpKnQsbyxyLHMsYSl9fWZ1bmN0aW9uIGdkKG4pe3ZhciB0PW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqdCkscj1uWyhpK3QtMSkldF0scz1uW2kldF0sbz1uWyhpKzEpJXRdLGE9blsoaSsyKSV0XTtyZXR1cm4gS2woKGUtaS90KSp0LHIscyxvLGEpfX1mdW5jdGlvbiBRaShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24geGQobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4rZSp0fX1mdW5jdGlvbiBleShuLHQsZSl7cmV0dXJuIG49TWF0aC5wb3cobixlKSx0PU1hdGgucG93KHQsZSktbixlPTEvZSxmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3cobitpKnQsZSl9fWZ1bmN0aW9uIHlkKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpRaShpc05hTihuKT90Om4pfWZ1bmN0aW9uIHZkKG4pe3JldHVybihuPStuKT09MT9ibjpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZXkodCxlLG4pOlFpKGlzTmFOKHQpP2U6dCl9fWZ1bmN0aW9uIGJuKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZSk6UWkoaXNOYU4obik/dDpuKX12YXIgbWk9ZnVuY3Rpb24gbih0KXt2YXIgZT12ZCh0KTtmdW5jdGlvbiBpKHIscyl7dmFyIG89ZSgocj1LaShyKSkuciwocz1LaShzKSkuciksYT1lKHIuZyxzLmcpLGw9ZShyLmIscy5iKSxjPWJuKHIub3BhY2l0eSxzLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gci5yPW8odSksci5nPWEodSksci5iPWwodSksci5vcGFjaXR5PWModSkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiBfZChuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbyxhO2ZvcihvPTA7bzxlOysrbylhPUtpKHRbb10pLGlbb109YS5yfHwwLHJbb109YS5nfHwwLHNbb109YS5ifHwwO3JldHVybiBpPW4oaSkscj1uKHIpLHM9bihzKSxhLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gYS5yPWkobCksYS5nPXIobCksYS5iPXMobCksYSsiIn19fXZhciBueT1fZChtZCksaXk9X2QoZ2QpO2Z1bmN0aW9uIHdkKG4sdCl7dHx8KHQ9W10pO3ZhciBlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCkscjtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1zKSt0W3JdKnM7cmV0dXJuIGl9fWZ1bmN0aW9uIE1kKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBiZChuLHQpe3ZhciBlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShlKSxvO2ZvcihvPTA7bzxpOysrbylyW29dPWdpKG5bb10sdFtvXSk7Zm9yKDtvPGU7KytvKXNbb109dFtvXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG89MDtvPGk7KytvKXNbb109cltvXShhKTtyZXR1cm4gc319ZnVuY3Rpb24gU2Qobix0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBlLnNldFRpbWUobiooMS1pKSt0KmkpLGV9fWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIEVkKG4sdCl7dmFyIGU9e30saT17fSxyOyhuPT09bnVsbHx8dHlwZW9mIG4hPSJvYmplY3QiKSYmKG49e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihyIGluIHQpciBpbiBuP2Vbcl09Z2kobltyXSx0W3JdKTppW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihyIGluIGUpaVtyXT1lW3JdKHMpO3JldHVybiBpfX12YXIgamw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFFsPW5ldyBSZWdFeHAoamwuc291cmNlLCJnIik7ZnVuY3Rpb24gcnkobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHN5KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19ZnVuY3Rpb24gZnMobix0KXt2YXIgZT1qbC5sYXN0SW5kZXg9UWwubGFzdEluZGV4PTAsaSxyLHMsbz0tMSxhPVtdLGw9W107Zm9yKG49bisiIix0PXQrIiI7KGk9amwuZXhlYyhuKSkmJihyPVFsLmV4ZWModCkpOykocz1yLmluZGV4KT5lJiYocz10LnNsaWNlKGUscyksYVtvXT9hW29dKz1zOmFbKytvXT1zKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbb10/YVtvXSs9cjphWysrb109cjooYVsrK29dPW51bGwsbC5wdXNoKHtpOm8seDp5ZShpLHIpfSkpLGU9UWwubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYocz10LnNsaWNlKGUpLGFbb10/YVtvXSs9czphWysrb109cyksYS5sZW5ndGg8Mj9sWzBdP3N5KGxbMF0ueCk6cnkodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KWFbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gZ2kobix0KXt2YXIgZT10eXBlb2YgdCxpO3JldHVybiB0PT1udWxsfHxlPT09ImJvb2xlYW4iP1FpKHQpOihlPT09Im51bWJlciI/eWU6ZT09PSJzdHJpbmciPyhpPUplKHQpKT8odD1pLG1pKTpmczp0IGluc3RhbmNlb2YgSmU/bWk6dCBpbnN0YW5jZW9mIERhdGU/U2Q6TWQodCk/d2Q6QXJyYXkuaXNBcnJheSh0KT9iZDp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/RWQ6eWUpKG4sdCl9ZnVuY3Rpb24gdGMobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4qKDEtZSkrdCplKX19dmFyIFRkPTE4MC9NYXRoLlBJLFdvPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGVjKG4sdCxlLGkscixzKXt2YXIgbyxhLGw7cmV0dXJuKG89TWF0aC5zcXJ0KG4qbit0KnQpKSYmKG4vPW8sdC89byksKGw9biplK3QqaSkmJihlLT1uKmwsaS09dCpsKSwoYT1NYXRoLnNxcnQoZSplK2kqaSkpJiYoZS89YSxpLz1hLGwvPWEpLG4qaTx0KmUmJihuPS1uLHQ9LXQsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6cyxyb3RhdGU6TWF0aC5hdGFuMih0LG4pKlRkLHNrZXdYOk1hdGguYXRhbihsKSpUZCxzY2FsZVg6byxzY2FsZVk6YX19dmFyIGRzLG5jLEFkLHFvO2Z1bmN0aW9uIENkKG4pe3JldHVybiBuPT09Im5vbmUiP1dvOihkc3x8KGRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLG5jPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZD1kb2N1bWVudC5kZWZhdWx0VmlldyksZHMuc3R5bGUudHJhbnNmb3JtPW4sbj1BZC5nZXRDb21wdXRlZFN0eWxlKG5jLmFwcGVuZENoaWxkKGRzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxuYy5yZW1vdmVDaGlsZChkcyksbj1uLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksZWMoK25bMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX1mdW5jdGlvbiBSZChuKXtyZXR1cm4gbj09bnVsbD9XbzoocW98fChxbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxxby5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbiksKG49cW8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KG49bi5tYXRyaXgsZWMobi5hLG4uYixuLmMsbi5kLG4uZSxuLmYpKTpXbyl9ZnVuY3Rpb24gTGQobix0LGUsaSl7ZnVuY3Rpb24gcihjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gcyhjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLGUpO2cucHVzaCh7aTp4LTQseDp5ZShjLGgpfSx7aTp4LTIseDp5ZSh1LGYpfSl9ZWxzZShofHxmKSYmZC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZitlKX1mdW5jdGlvbiBvKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKHIoaCkrInJvdGF0ZSgiLG51bGwsaSktMix4OnllKGMsdSl9KSk6dSYmaC5wdXNoKHIoaCkrInJvdGF0ZSgiK3UraSl9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKHIoaCkrInNrZXdYKCIsbnVsbCxpKS0yLHg6eWUoYyx1KX0pOnUmJmgucHVzaChyKGgpKyJza2V3WCgiK3UraSl9ZnVuY3Rpb24gbChjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2gocihkKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zy5wdXNoKHtpOngtNCx4OnllKGMsaCl9LHtpOngtMix4OnllKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJmQucHVzaChyKGQpKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPW4oYyksdT1uKHUpLHMoYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksbyhjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLGEoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKGQpe2Zvcih2YXIgZz0tMSx4PWYubGVuZ3RoLHY7KytnPHg7KWhbKHY9ZltnXSkuaV09di54KGQpO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGljPUxkKENkLCJweCwgIiwicHgpIiwiZGVnKSIpLHJjPUxkKFJkLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gUGQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD1waSh0KSkuaCwoZT1waShlKSkuaCkscj1ibih0LnMsZS5zKSxzPWJuKHQubCxlLmwpLG89Ym4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0Lmg9aShhKSx0LnM9cihhKSx0Lmw9cyhhKSx0Lm9wYWNpdHk9byhhKSx0KyIifX19dmFyIHNjPVBkKHlkKSxveT1QZChibik7dmFyIGppPTAsbXM9MCxwcz0wLElkPTFlMyxYbyxncyxZbz0wLHhpPTAsWm89MCx4cz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxOZD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTtmdW5jdGlvbiB0cigpe3JldHVybiB4aXx8KE5kKGF5KSx4aT14cy5ub3coKStabyl9ZnVuY3Rpb24gYXkoKXt4aT0wfWZ1bmN0aW9uIHlzKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH15cy5wcm90b3R5cGU9Sm8ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5cyxyZXN0YXJ0OmZ1bmN0aW9uKG4sdCxlKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KGU9PW51bGw/dHIoKTorZSkrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmdzIT09dGhpcyYmKGdzP2dzLl9uZXh0PXRoaXM6WG89dGhpcyxncz10aGlzKSx0aGlzLl9jYWxsPW4sdGhpcy5fdGltZT1lLG9jKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLG9jKCkpfX07ZnVuY3Rpb24gSm8obix0LGUpe3ZhciBpPW5ldyB5cztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIEZkKCl7dHIoKSwrK2ppO2Zvcih2YXIgbj1Ybyx0O247KSh0PXhpLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1qaX1mdW5jdGlvbiBEZCgpe3hpPShZbz14cy5ub3coKSkrWm8samk9bXM9MDt0cnl7RmQoKX1maW5hbGx5e2ppPTAsY3koKSx4aT0wfX1mdW5jdGlvbiBseSgpe3ZhciBuPXhzLm5vdygpLHQ9bi1Zbzt0PklkJiYoWm8tPXQsWW89bil9ZnVuY3Rpb24gY3koKXtmb3IodmFyIG4sdD1YbyxlLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpYbz1lKTtncz1uLG9jKGkpfWZ1bmN0aW9uIG9jKG4pe2lmKCFqaSl7bXMmJihtcz1jbGVhclRpbWVvdXQobXMpKTt2YXIgdD1uLXhpO3Q+MjQ/KG48MS8wJiYobXM9c2V0VGltZW91dChEZCxuLXhzLm5vdygpLVpvKSkscHMmJihwcz1jbGVhckludGVydmFsKHBzKSkpOihwc3x8KFlvPXhzLm5vdygpLHBzPXNldEludGVydmFsKGx5LElkKSksamk9MSxOZChEZCkpfX1mdW5jdGlvbiAkbyhuLHQsZSl7dmFyIGk9bmV3IHlzO3JldHVybiB0PXQ9PW51bGw/MDordCxpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0LGUpLGl9dmFyIHV5PVdsKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGh5PVtdLFVkPTAsYWM9MSxRbz0yLEtvPTMsemQ9NCxqbz01LHZzPTY7ZnVuY3Rpb24ga24obix0LGUsaSxyLHMpe3ZhciBvPW4uX190cmFuc2l0aW9uO2lmKCFvKW4uX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZSBpbiBvKXJldHVybjtmeShuLGUse25hbWU6dCxpbmRleDppLGdyb3VwOnIsb246dXksdHdlZW46aHksdGltZTpzLnRpbWUsZGVsYXk6cy5kZWxheSxkdXJhdGlvbjpzLmR1cmF0aW9uLGVhc2U6cy5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VWR9KX1mdW5jdGlvbiBfcyhuLHQpe3ZhciBlPXVlKG4sdCk7aWYoZS5zdGF0ZT5VZCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEFlKG4sdCl7dmFyIGU9dWUobix0KTtpZihlLnN0YXRlPktvKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIHVlKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gZnkobix0LGUpe3ZhciBpPW4uX190cmFuc2l0aW9uLHI7aVt0XT1lLGUudGltZXI9Sm8ocywwLGUudGltZSk7ZnVuY3Rpb24gcyhjKXtlLnN0YXRlPWFjLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZvKGMtZS5kZWxheSl9ZnVuY3Rpb24gbyhjKXt2YXIgdSxoLGYsZDtpZihlLnN0YXRlIT09YWMpcmV0dXJuIGwoKTtmb3IodSBpbiBpKWlmKGQ9aVt1XSxkLm5hbWU9PT1lLm5hbWUpe2lmKGQuc3RhdGU9PT1LbylyZXR1cm4gJG8obyk7ZC5zdGF0ZT09PXpkPyhkLnN0YXRlPXZzLGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8dCYmKGQuc3RhdGU9dnMsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZigkbyhmdW5jdGlvbigpe2Uuc3RhdGU9PT1LbyYmKGUuc3RhdGU9emQsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoYykpfSksZS5zdGF0ZT1RbyxlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09UW8pe2ZvcihlLnN0YXRlPUtvLHI9bmV3IEFycmF5KGY9ZS50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKGQ9ZS50d2Vlblt1XS52YWx1ZS5jYWxsKG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytoXT1kKTtyLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIGEoYyl7Zm9yKHZhciB1PWM8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLGMvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChsKSxlLnN0YXRlPWpvLDEpLGg9LTEsZj1yLmxlbmd0aDsrK2g8ZjspcltoXS5jYWxsKG4sdSk7ZS5zdGF0ZT09PWpvJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe2Uuc3RhdGU9dnMsZS50aW1lci5zdG9wKCksZGVsZXRlIGlbdF07Zm9yKHZhciBjIGluIGkpcmV0dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gd3Mobix0KXt2YXIgZT1uLl9fdHJhbnNpdGlvbixpLHIscz0hMCxvO2lmKCEhZSl7dD10PT1udWxsP251bGw6dCsiIjtmb3IobyBpbiBlKXtpZigoaT1lW29dKS5uYW1lIT09dCl7cz0hMTtjb250aW51ZX1yPWkuc3RhdGU+UW8mJmkuc3RhdGU8am8saS5zdGF0ZT12cyxpLnRpbWVyLnN0b3AoKSxpLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18saS5pbmRleCxpLmdyb3VwKSxkZWxldGUgZVtvXX1zJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIEJkKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3cyh0aGlzLG4pfSl9ZnVuY3Rpb24gZHkobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsbikscz1yLnR3ZWVuO2lmKHMhPT1lKXtpPWU9cztmb3IodmFyIG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoaVtvXS5uYW1lPT09dCl7aT1pLnNsaWNlKCksaS5zcGxpY2UobywxKTticmVha319ci50d2Vlbj1pfX1mdW5jdGlvbiBweShuLHQsZSl7dmFyIGkscjtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9QWUodGhpcyxuKSxvPXMudHdlZW47aWYobyE9PWkpe3I9KGk9bykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfXMudHdlZW49cn19ZnVuY3Rpb24gT2Qobix0KXt2YXIgZT10aGlzLl9pZDtpZihuKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT11ZSh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAscz1pLmxlbmd0aCxvO3I8czsrK3IpaWYoKG89aVtyXSkubmFtZT09PW4pcmV0dXJuIG8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9keTpweSkoZSxuLHQpKX1mdW5jdGlvbiBlcihuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gdWUocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24gdGEobix0KXt2YXIgZTtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3llOnQgaW5zdGFuY2VvZiBKZT9taTooZT1KZSh0KSk/KHQ9ZSxtaSk6ZnMpKG4sdCl9ZnVuY3Rpb24gbXkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGd5KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24geHkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBvPT09cj9udWxsOm89PT1pP3M6cz10KGk9byxlKX19ZnVuY3Rpb24geXkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09aT9zOnM9dChpPW8sZSl9fWZ1bmN0aW9uIHZ5KG4sdCxlKXt2YXIgaSxyLHM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8sYT1lKHRoaXMpLGw7cmV0dXJuIGE9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToobz10aGlzLmdldEF0dHJpYnV0ZShuKSxsPWErIiIsbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpKX19ZnVuY3Rpb24gX3kobix0LGUpe3ZhciBpLHIscztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxhPWUodGhpcyksbDtyZXR1cm4gYT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKToobz10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCksbD1hKyIiLG89PT1sP251bGw6bz09PWkmJmw9PT1yP3M6KHI9bCxzPXQoaT1vLGEpKSl9fWZ1bmN0aW9uIGtkKG4sdCl7dmFyIGU9d24obiksaT1lPT09InRyYW5zZm9ybSI/cmM6dGE7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKG4sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KGUubG9jYWw/X3k6dnkpKGUsaSxlcih0aGlzLCJhdHRyLiIrbix0KSk6dD09bnVsbD8oZS5sb2NhbD9neTpteSkoZSk6KGUubG9jYWw/eXk6eHkpKGUsaSx0KSl9ZnVuY3Rpb24gd3kobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUobix0LmNhbGwodGhpcyxlKSl9fWZ1bmN0aW9uIE15KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gYnkobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZNeShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gU3kobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZ3eShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gSGQobix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBpPXduKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/Ynk6U3kpKGksdCkpfWZ1bmN0aW9uIEV5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7X3ModGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFR5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtfcyh0aGlzLG4pLmRlbGF5PXR9fWZ1bmN0aW9uIFZkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/RXk6VHkpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIEF5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7QWUodGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEN5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtBZSh0aGlzLG4pLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIEdkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/QXk6Q3kpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufWZ1bmN0aW9uIFJ5KG4sdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0FlKHRoaXMsbikuZWFzZT10fX1mdW5jdGlvbiBXZChuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goUnkodCxuKSk6dWUodGhpcy5ub2RlKCksdCkuZWFzZX1mdW5jdGlvbiBxZChuKXt0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmKG49YXMobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIHM9dFtyXSxvPXMubGVuZ3RoLGE9aVtyXT1bXSxsLGM9MDtjPG87KytjKShsPXNbY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMscykmJmEucHVzaChsKTtyZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYZChuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgd2Uobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIEx5KG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fHQ9PT0ic3RhcnQifSl9ZnVuY3Rpb24gUHkobix0LGUpe3ZhciBpLHIscz1MeSh0KT9fczpBZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1zKHRoaXMsbiksYT1vLm9uO2EhPT1pJiYocj0oaT1hKS5jb3B5KCkpLm9uKHQsZSksby5vbj1yfX1mdW5jdGlvbiBZZChuLHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dWUodGhpcy5ub2RlKCksZSkub24ub24obik6dGhpcy5lYWNoKFB5KGUsbix0KSl9ZnVuY3Rpb24gRHkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFpkKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLER5KHRoaXMuX2lkKSl9ZnVuY3Rpb24gSmQobil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1kaShuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKWZvcih2YXIgYT1pW29dLGw9YS5sZW5ndGgsYz1zW29dPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9YVtmXSkmJihoPW4uY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLGtuKGNbZl0sdCxlLGYsYyx1ZSh1LGUpKSk7cmV0dXJuIG5ldyB3ZShzLHRoaXMuX3BhcmVudHMsdCxlKX1mdW5jdGlvbiAkZChuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz1bXSxvPVtdLGE9MDthPHI7KythKWZvcih2YXIgbD1pW2FdLGM9bC5sZW5ndGgsdSxoPTA7aDxjOysraClpZih1PWxbaF0pe2Zvcih2YXIgZj1uLmNhbGwodSx1Ll9fZGF0YV9fLGgsbCksZCxnPXVlKHUsZSkseD0wLHY9Zi5sZW5ndGg7eDx2OysreCkoZD1mW3hdKSYma24oZCx0LGUseCxmLGcpO3MucHVzaChmKSxvLnB1c2godSl9cmV0dXJuIG5ldyB3ZShzLG8sdCxlKX12YXIgSXk9TW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEtkKCl7cmV0dXJuIG5ldyBJeSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTnkobix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9T24odGhpcyxuKSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLE9uKHRoaXMsbikpO3JldHVybiBzPT09bz9udWxsOnM9PT1lJiZvPT09aT9yOnI9dChlPXMsaT1vKX19ZnVuY3Rpb24gUWQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gRnkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbik7cmV0dXJuIG89PT1yP251bGw6bz09PWk/czpzPXQoaT1vLGUpfX1mdW5jdGlvbiB6eShuLHQsZSl7dmFyIGkscixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbiksYT1lKHRoaXMpLGw9YSsiIjtyZXR1cm4gYT09bnVsbCYmKGw9YT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxPbih0aGlzLG4pKSksbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpfX1mdW5jdGlvbiBVeShuLHQpe3ZhciBlLGkscixzPSJzdHlsZS4iK3Qsbz0iZW5kLiIrcyxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUFlKHRoaXMsbiksYz1sLm9uLHU9bC52YWx1ZVtzXT09bnVsbD9hfHwoYT1RZCh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PXUpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKG8scj11KSxsLm9uPWl9fWZ1bmN0aW9uIGpkKG4sdCxlKXt2YXIgaT0obis9IiIpPT0idHJhbnNmb3JtIj9pYzp0YTtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4obixOeShuLGkpKS5vbigiZW5kLnN0eWxlLiIrbixRZChuKSk6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKG4senkobixpLGVyKHRoaXMsInN0eWxlLiIrbix0KSkpLmVhY2goVXkodGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLEZ5KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX1mdW5jdGlvbiBCeShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19ZnVuY3Rpb24gT3kobix0LGUpe3ZhciBpLHI7ZnVuY3Rpb24gcygpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJkJ5KG4sbyxlKSksaX1yZXR1cm4gcy5fdmFsdWU9dCxzfWZ1bmN0aW9uIHRwKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLE95KG4sdCxlPT1udWxsPyIiOmUpKX1mdW5jdGlvbiBreShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIEh5KG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGVwKG4pe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2Ygbj09ImZ1bmN0aW9uIj9IeShlcih0aGlzLCJ0ZXh0IixuKSk6a3kobj09bnVsbD8iIjpuKyIiKSl9ZnVuY3Rpb24gVnkobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIEd5KG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJlZ5KHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9ZnVuY3Rpb24gbnAobil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobj09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LEd5KG4pKX1mdW5jdGlvbiBpcCgpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1lYSgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz0wO3M8cjsrK3MpZm9yKHZhciBvPWlbc10sYT1vLmxlbmd0aCxsLGM9MDtjPGE7KytjKWlmKGw9b1tjXSl7dmFyIHU9dWUobCx0KTtrbihsLG4sZSxjLG8se3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyxuLGUpfWZ1bmN0aW9uIHJwKCl7dmFyIG4sdCxlPXRoaXMsaT1lLl9pZCxyPWUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLG8pe3ZhciBhPXt2YWx1ZTpvfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0tcj09PTAmJnMoKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPUFlKHRoaXMsaSksdT1jLm9uO3UhPT1uJiYodD0obj11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKGEpLHQuXy5pbnRlcnJ1cHQucHVzaChhKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFd5PTA7ZnVuY3Rpb24gd2Uobix0LGUsaSl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1pfWZ1bmN0aW9uIGxjKG4pe3JldHVybiBNbigpLnRyYW5zaXRpb24obil9ZnVuY3Rpb24gZWEoKXtyZXR1cm4rK1d5fXZhciBucj1Nbi5wcm90b3R5cGU7d2UucHJvdG90eXBlPWxjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d2Usc2VsZWN0OkpkLHNlbGVjdEFsbDokZCxmaWx0ZXI6cWQsbWVyZ2U6WGQsc2VsZWN0aW9uOktkLHRyYW5zaXRpb246aXAsY2FsbDpuci5jYWxsLG5vZGVzOm5yLm5vZGVzLG5vZGU6bnIubm9kZSxzaXplOm5yLnNpemUsZW1wdHk6bnIuZW1wdHksZWFjaDpuci5lYWNoLG9uOllkLGF0dHI6a2QsYXR0clR3ZWVuOkhkLHN0eWxlOmpkLHN0eWxlVHdlZW46dHAsdGV4dDplcCx0ZXh0VHdlZW46bnAscmVtb3ZlOlpkLHR3ZWVuOk9kLGRlbGF5OlZkLGR1cmF0aW9uOkdkLGVhc2U6V2QsZW5kOnJwfTtmdW5jdGlvbiBuYShuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn12YXIgY2M9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOm5hfTtmdW5jdGlvbiBxeShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBjYy50aW1lPXRyKCksY2M7cmV0dXJuIGV9ZnVuY3Rpb24gc3Aobil7dmFyIHQsZTtuIGluc3RhbmNlb2Ygd2U/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1lYSgpLChlPWNjKS50aW1lPXRyKCksbj1uPT1udWxsP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9MDtzPHI7KytzKWZvcih2YXIgbz1pW3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYma24obCxuLHQsYyxvLGV8fHF5KGwsdCkpO3JldHVybiBuZXcgd2UoaSx0aGlzLl9wYXJlbnRzLG4sdCl9TW4ucHJvdG90eXBlLmludGVycnVwdD1CZDtNbi5wcm90b3R5cGUudHJhbnNpdGlvbj1zcDtmdW5jdGlvbiBvcChuKXtyZXR1cm5bK25bMF0sK25bMV1dfWZ1bmN0aW9uIFh5KG4pe3JldHVybltvcChuWzBdKSxvcChuWzFdKV19dmFyIEdQPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAodWMpLGlucHV0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PW51bGw/bnVsbDpbWytuWzBdLHRbMF1bMV1dLFsrblsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbiYmW25bMF1bMF0sblsxXVswXV19fSxXUD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuLHQpe3JldHVybiBuPT1udWxsP251bGw6W1t0WzBdWzBdLCtuWzBdXSxbdFsxXVswXSwrblsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG4mJltuWzBdWzFdLG5bMV1bMV1dfX0scVA9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbD9udWxsOlh5KG4pfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG59fTtmdW5jdGlvbiB1YyhuKXtyZXR1cm57dHlwZTpufX12YXIgYXA9TWF0aC5QSSxZeT1hcC8yLFp5PWFwKjI7dmFyIEp5PUFycmF5LnByb3RvdHlwZS5zbGljZTt2YXIgQmU9IiQiO2Z1bmN0aW9uIGlhKCl7fWlhLnByb3RvdHlwZT1scC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlhLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gQmUrbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbQmUrbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW0JlK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PUJlK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUJlJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1CZSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbHAobix0KXt2YXIgZT1uZXcgaWE7aWYobiBpbnN0YW5jZW9mIGlhKW4uZWFjaChmdW5jdGlvbihhLGwpe2Uuc2V0KGwsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBpPS0xLHI9bi5sZW5ndGgscztpZih0PT1udWxsKWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KHM9bltpXSxpLG4pLHMpfWVsc2UgaWYobilmb3IodmFyIG8gaW4gbillLnNldChvLG5bb10pO3JldHVybiBlfXZhciB5aT1scDtmdW5jdGlvbiByYSgpe312YXIgdmk9eWkucHJvdG90eXBlO3JhLnByb3RvdHlwZT0keS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJhLGhhczp2aS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiBuKz0iIix0aGlzW0JlK25dPW4sdGhpc30scmVtb3ZlOnZpLnJlbW92ZSxjbGVhcjp2aS5jbGVhcix2YWx1ZXM6dmkua2V5cyxzaXplOnZpLnNpemUsZW1wdHk6dmkuZW1wdHksZWFjaDp2aS5lYWNofTtmdW5jdGlvbiAkeShuLHQpe3ZhciBlPW5ldyByYTtpZihuIGluc3RhbmNlb2YgcmEpbi5lYWNoKGZ1bmN0aW9uKHMpe2UuYWRkKHMpfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9dmFyIEt5PUFycmF5LnByb3RvdHlwZSxjcD1LeS5zbGljZTt2YXIgVEk9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIGhwKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBfaShuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiB1bihuKXtyZXR1cm4gbj1faShNYXRoLmFicyhuKSksbj9uWzFdOk5hTn1mdW5jdGlvbiBmcChuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxzPVtdLG89MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxzLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW289KG8rMSklbi5sZW5ndGhdO3JldHVybiBzLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiBkcChuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19dmFyIHR2PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEhuKG4pe2lmKCEodD10di5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgc2Eoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9SG4ucHJvdG90eXBlPXNhLnByb3RvdHlwZTtmdW5jdGlvbiBzYShuKXt0aGlzLmZpbGw9bi5maWxsPT09dm9pZCAwPyIgIjpuLmZpbGwrIiIsdGhpcy5hbGlnbj1uLmFsaWduPT09dm9pZCAwPyI+IjpuLmFsaWduKyIiLHRoaXMuc2lnbj1uLnNpZ249PT12b2lkIDA/Ii0iOm4uc2lnbisiIix0aGlzLnN5bWJvbD1uLnN5bWJvbD09PXZvaWQgMD8iIjpuLnN5bWJvbCsiIix0aGlzLnplcm89ISFuLnplcm8sdGhpcy53aWR0aD1uLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorbi53aWR0aCx0aGlzLmNvbW1hPSEhbi5jb21tYSx0aGlzLnByZWNpc2lvbj1uLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K24ucHJlY2lzaW9uLHRoaXMudHJpbT0hIW4udHJpbSx0aGlzLnR5cGU9bi50eXBlPT09dm9pZCAwPyIiOm4udHlwZSsiIn1zYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBwcChuKXt0OmZvcih2YXIgdD1uLmxlbmd0aCxlPTEsaT0tMSxyO2U8dDsrK2Upc3dpdGNoKG5bZV0pe2Nhc2UiLiI6aT1yPWU7YnJlYWs7Y2FzZSIwIjppPT09MCYmKGk9ZSkscj1lO2JyZWFrO2RlZmF1bHQ6aWYoIStuW2VdKWJyZWFrIHQ7aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP24uc2xpY2UoMCxpKStuLnNsaWNlKHIrMSk6bn12YXIgaGM7ZnVuY3Rpb24gbXAobix0KXt2YXIgZT1faShuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdLHM9ci0oaGM9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSozKSsxLG89aS5sZW5ndGg7cmV0dXJuIHM9PT1vP2k6cz5vP2krbmV3IEFycmF5KHMtbysxKS5qb2luKCIwIik6cz4wP2kuc2xpY2UoMCxzKSsiLiIraS5zbGljZShzKToiMC4iK25ldyBBcnJheSgxLXMpLmpvaW4oIjAiKStfaShuLE1hdGgubWF4KDAsdCtzLTEpKVswXX1mdW5jdGlvbiBmYyhuLHQpe3ZhciBlPV9pKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIGRjPXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4obioxMDApLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6aHAsZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gZmMobioxMDAsdCl9LHI6ZmMsczptcCxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIHBjKG4pe3JldHVybiBufXZhciBncD1BcnJheS5wcm90b3R5cGUubWFwLHhwPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHlwKG4pe3ZhciB0PW4uZ3JvdXBpbmc9PT12b2lkIDB8fG4udGhvdXNhbmRzPT09dm9pZCAwP3BjOmZwKGdwLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVswXSsiIixpPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVsxXSsiIixyPW4uZGVjaW1hbD09PXZvaWQgMD8iLiI6bi5kZWNpbWFsKyIiLHM9bi5udW1lcmFscz09PXZvaWQgMD9wYzpkcChncC5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSksbz1uLnBlcmNlbnQ9PT12b2lkIDA/IiUiOm4ucGVyY2VudCsiIixhPW4ubWludXM9PT12b2lkIDA/Ii0iOm4ubWludXMrIiIsbD1uLm5hbj09PXZvaWQgMD8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGgpe2g9SG4oaCk7dmFyIGY9aC5maWxsLGQ9aC5hbGlnbixnPWguc2lnbix4PWguc3ltYm9sLHY9aC56ZXJvLG09aC53aWR0aCxwPWguY29tbWEsYj1oLnByZWNpc2lvbixfPWgudHJpbSxTPWgudHlwZTtTPT09Im4iPyhwPSEwLFM9ImciKTpkY1tTXXx8KGI9PT12b2lkIDAmJihiPTEyKSxfPSEwLFM9ImciKSwodnx8Zj09PSIwIiYmZD09PSI9IikmJih2PSEwLGY9IjAiLGQ9Ij0iKTt2YXIgTD14PT09IiQiP2U6eD09PSIjIiYmL1tib3hYXS8udGVzdChTKT8iMCIrUy50b0xvd2VyQ2FzZSgpOiIiLEE9eD09PSIkIj9pOi9bJXBdLy50ZXN0KFMpP286IiIsSD1kY1tTXSx0dD0vW2RlZmdwcnMlXS8udGVzdChTKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KFMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIFgoeSl7dmFyIFI9TCxEPUEsRix6LE47aWYoUz09PSJjIilEPUgoeSkrRCx5PSIiO2Vsc2V7eT0reTt2YXIgVj15PDB8fDEveTwwO2lmKHk9aXNOYU4oeSk/bDpIKE1hdGguYWJzKHkpLGIpLF8mJih5PXBwKHkpKSxWJiYreT09MCYmZyE9PSIrIiYmKFY9ITEpLFI9KFY/Zz09PSIoIj9nOmE6Zz09PSItInx8Zz09PSIoIj8iIjpnKStSLEQ9KFM9PT0icyI/eHBbOCtoYy8zXToiIikrRCsoViYmZz09PSIoIj8iKSI6IiIpLHR0KXtmb3IoRj0tMSx6PXkubGVuZ3RoOysrRjx6OylpZihOPXkuY2hhckNvZGVBdChGKSw0OD5OfHxOPjU3KXtEPShOPT09NDY/cit5LnNsaWNlKEYrMSk6eS5zbGljZShGKSkrRCx5PXkuc2xpY2UoMCxGKTticmVha319fXAmJiF2JiYoeT10KHksMS8wKSk7dmFyIFE9Ui5sZW5ndGgreS5sZW5ndGgrRC5sZW5ndGgsYXQ9UTxtP25ldyBBcnJheShtLVErMSkuam9pbihmKToiIjtzd2l0Y2gocCYmdiYmKHk9dChhdCt5LGF0Lmxlbmd0aD9tLUQubGVuZ3RoOjEvMCksYXQ9IiIpLGQpe2Nhc2UiPCI6eT1SK3krRCthdDticmVhaztjYXNlIj0iOnk9UithdCt5K0Q7YnJlYWs7Y2FzZSJeIjp5PWF0LnNsaWNlKDAsUT1hdC5sZW5ndGg+PjEpK1IreStEK2F0LnNsaWNlKFEpO2JyZWFrO2RlZmF1bHQ6eT1hdCtSK3krRDticmVha31yZXR1cm4gcyh5KX1yZXR1cm4gWC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBoKyIifSxYfWZ1bmN0aW9uIHUoaCxmKXt2YXIgZD1jKChoPUhuKGgpLGgudHlwZT0iZiIsaCkpLGc9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHVuKGYpLzMpKSkqMyx4PU1hdGgucG93KDEwLC1nKSx2PXhwWzgrZy8zXTtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIGQoeCptKSt2fX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OnV9fXZhciBvYSxPZSxhYTttYyh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSk7ZnVuY3Rpb24gbWMobil7cmV0dXJuIG9hPXlwKG4pLE9lPW9hLmZvcm1hdCxhYT1vYS5mb3JtYXRQcmVmaXgsb2F9ZnVuY3Rpb24gZ2Mobil7cmV0dXJuIE1hdGgubWF4KDAsLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geGMobix0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodW4odCkvMykpKSozLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geWMobix0KXtyZXR1cm4gbj1NYXRoLmFicyhuKSx0PU1hdGguYWJzKHQpLW4sTWF0aC5tYXgoMCx1bih0KS11bihuKSkrMX1mdW5jdGlvbiBXZSgpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciBldj1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXtyZXR1cm4gaT1pPT1udWxsPzA6K2kscj1yPT1udWxsPzE6K3IsYXJndW1lbnRzLmxlbmd0aD09PTE/KHI9aSxpPTApOnItPWksZnVuY3Rpb24oKXtyZXR1cm4gdCgpKnIraX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciB2Yz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXt2YXIgcyxvO3JldHVybiBpPWk9PW51bGw/MDoraSxyPXI9PW51bGw/MTorcixmdW5jdGlvbigpe3ZhciBhO2lmKHMhPW51bGwpYT1zLHM9bnVsbDtlbHNlIGRvIHM9dCgpKjItMSxhPXQoKSoyLTEsbz1zKnMrYSphO3doaWxlKCFvfHxvPjEpO3JldHVybiBpK3IqYSpNYXRoLnNxcnQoLTIqTWF0aC5sb2cobykvbyl9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTt2YXIgbnY9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKCl7dmFyIGk9dmMuc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoaSgpKX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciBfYz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAscz0wO3M8aTsrK3Mpcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIGl2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXt2YXIgcj1fYy5zb3VyY2UodCkoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIHJ2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS10KCkpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTtmdW5jdGlvbiBQZShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKTticmVha31yZXR1cm4gdGhpc312YXIgdnA9QXJyYXkucHJvdG90eXBlLGJzPXZwLm1hcCx3aT12cC5zbGljZTtmdW5jdGlvbiBfcChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gd2Mobil7cmV0dXJuK259dmFyIHdwPVswLDFdO2Z1bmN0aW9uIERlKG4pe3JldHVybiBufWZ1bmN0aW9uIE1jKG4sdCl7cmV0dXJuKHQtPW49K24pP2Z1bmN0aW9uKGUpe3JldHVybihlLW4pL3R9Ol9wKGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24gTXAobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV0saTtyZXR1cm4gdD5lJiYoaT10LHQ9ZSxlPWkpLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUscikpfX1mdW5jdGlvbiBvdihuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0scz10WzBdLG89dFsxXTtyZXR1cm4gcjxpPyhpPU1jKHIsaSkscz1lKG8scykpOihpPU1jKGkscikscz1lKHMsbykpLGZ1bmN0aW9uKGEpe3JldHVybiBzKGkoYSkpfX1mdW5jdGlvbiBhdihuLHQsZSl7dmFyIGk9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTEscj1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSksbz0tMTtmb3IobltpXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPGk7KXJbb109TWMobltvXSxuW28rMV0pLHNbb109ZSh0W29dLHRbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsPUJuKG4sYSwxLGkpLTE7cmV0dXJuIHNbbF0ocltsXShhKSl9fWZ1bmN0aW9uIFZuKG4sdCl7cmV0dXJuIHQuZG9tYWluKG4uZG9tYWluKCkpLnJhbmdlKG4ucmFuZ2UoKSkuaW50ZXJwb2xhdGUobi5pbnRlcnBvbGF0ZSgpKS5jbGFtcChuLmNsYW1wKCkpLnVua25vd24obi51bmtub3duKCkpfWZ1bmN0aW9uIFNzKCl7dmFyIG49d3AsdD13cCxlPWdpLGkscixzLG89RGUsYSxsLGM7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP2F2Om92LGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/czoobHx8KGw9YShuLm1hcChpKSx0LGUpKSkoaShvKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBvKHIoKGN8fChjPWEodCxuLm1hcChpKSx5ZSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1icy5jYWxsKGYsd2MpLG89PT1EZXx8KG89TXAobikpLHUoKSk6bi5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXdpLmNhbGwoZiksdSgpKTp0LnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbihmKXtyZXR1cm4gdD13aS5jYWxsKGYpLGU9dGMsdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWY/TXAobik6RGUsaCk6byE9PURlfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWYsdSgpKTplfSxoLnVua25vd249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZixoKTpzfSxmdW5jdGlvbihmLGQpe3JldHVybiBpPWYscj1kLHUoKX19ZnVuY3Rpb24gRXMobix0KXtyZXR1cm4gU3MoKShuLHQpfWZ1bmN0aW9uIGJjKG4sdCxlLGkpe3ZhciByPV9uKG4sdCxlKSxzO3N3aXRjaChpPUhuKGk9PW51bGw/IixmIjppKSxpLnR5cGUpe2Nhc2UicyI6e3ZhciBvPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gaS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXhjKHIsbykpJiYoaS5wcmVjaXNpb249cyksYWEoaSxvKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7aS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXljKHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e2kucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4ocz1nYyhyKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gT2UoaSl9ZnVuY3Rpb24gTWkobil7dmFyIHQ9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24oZSl7dmFyIGk9dCgpO3JldHVybiBycyhpWzBdLGlbaS5sZW5ndGgtMV0sZT09bnVsbD8xMDplKX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsaSl7dmFyIHI9dCgpO3JldHVybiBiYyhyWzBdLHJbci5sZW5ndGgtMV0sZT09bnVsbD8xMDplLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7ZT09bnVsbCYmKGU9MTApO3ZhciBpPXQoKSxyPTAscz1pLmxlbmd0aC0xLG89aVtyXSxhPWlbc10sbDtyZXR1cm4gYTxvJiYobD1vLG89YSxhPWwsbD1yLHI9cyxzPWwpLGw9SmkobyxhLGUpLGw+MD8obz1NYXRoLmZsb29yKG8vbCkqbCxhPU1hdGguY2VpbChhL2wpKmwsbD1KaShvLGEsZSkpOmw8MCYmKG89TWF0aC5jZWlsKG8qbCkvbCxhPU1hdGguZmxvb3IoYSpsKS9sLGw9SmkobyxhLGUpKSxsPjA/KGlbcl09TWF0aC5mbG9vcihvL2wpKmwsaVtzXT1NYXRoLmNlaWwoYS9sKSpsLHQoaSkpOmw8MCYmKGlbcl09TWF0aC5jZWlsKG8qbCkvbCxpW3NdPU1hdGguZmxvb3IoYSpsKS9sLHQoaSkpLG59LG59ZnVuY3Rpb24gaXIoKXt2YXIgbj1FcyhEZSxEZSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLGlyKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksTWkobil9ZnVuY3Rpb24gbGEobix0KXtuPW4uc2xpY2UoKTt2YXIgZT0wLGk9bi5sZW5ndGgtMSxyPW5bZV0scz1uW2ldLG87cmV0dXJuIHM8ciYmKG89ZSxlPWksaT1vLG89cixyPXMscz1vKSxuW2VdPXQuZmxvb3IociksbltpXT10LmNlaWwocyksbn1mdW5jdGlvbiBicChuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gU3Aobil7cmV0dXJuIE1hdGguZXhwKG4pfWZ1bmN0aW9uIGx2KG4pe3JldHVybi1NYXRoLmxvZygtbil9ZnVuY3Rpb24gY3Yobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiB1dihuKXtyZXR1cm4gaXNGaW5pdGUobik/KygiMWUiK24pOm48MD8wOm59ZnVuY3Rpb24gaHYobil7cmV0dXJuIG49PT0xMD91djpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX1mdW5jdGlvbiBmdihuKXtyZXR1cm4gbj09PU1hdGguRT9NYXRoLmxvZzpuPT09MTAmJk1hdGgubG9nMTB8fG49PT0yJiZNYXRoLmxvZzJ8fChuPU1hdGgubG9nKG4pLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9ufSl9ZnVuY3Rpb24gRXAobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1uKC10KX19ZnVuY3Rpb24gU2Mobil7dmFyIHQ9bihicCxTcCksZT10LmRvbWFpbixpPTEwLHIscztmdW5jdGlvbiBvKCl7cmV0dXJuIHI9ZnYoaSkscz1odihpKSxlKClbMF08MD8ocj1FcChyKSxzPUVwKHMpLG4obHYsY3YpKTpuKGJwLFNwKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2EsbygpKTppfSx0LmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShhKSxvKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbihhKXt2YXIgbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXSxoOyhoPXU8YykmJihmPWMsYz11LHU9Zik7dmFyIGY9cihjKSxkPXIodSksZyx4LHYsbT1hPT1udWxsPzEwOithLHA9W107aWYoIShpJTEpJiZkLWY8bSl7aWYoZj1NYXRoLnJvdW5kKGYpLTEsZD1NYXRoLnJvdW5kKGQpKzEsYz4wKXtmb3IoO2Y8ZDsrK2YpZm9yKHg9MSxnPXMoZik7eDxpOysreClpZih2PWcqeCwhKHY8Yykpe2lmKHY+dSlicmVhaztwLnB1c2godil9fWVsc2UgZm9yKDtmPGQ7KytmKWZvcih4PWktMSxnPXMoZik7eD49MTstLXgpaWYodj1nKngsISh2PGMpKXtpZih2PnUpYnJlYWs7cC5wdXNoKHYpfX1lbHNlIHA9cnMoZixkLE1hdGgubWluKGQtZixtKSkubWFwKHMpO3JldHVybiBoP3AucmV2ZXJzZSgpOnB9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihhLGwpe2lmKGw9PW51bGwmJihsPWk9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBsIT0iZnVuY3Rpb24iJiYobD1PZShsKSksYT09PTEvMClyZXR1cm4gbDthPT1udWxsJiYoYT0xMCk7dmFyIGM9TWF0aC5tYXgoMSxpKmEvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBoPXUvcyhNYXRoLnJvdW5kKHIodSkpKTtyZXR1cm4gaCppPGktLjUmJihoKj1pKSxoPD1jP2wodSk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShsYShlKCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguZmxvb3IocihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguY2VpbChyKGEpKSl9fSkpfSx0fWZ1bmN0aW9uIFRzKCl7dmFyIG49U2MoU3MoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLFRzKCkpLmJhc2Uobi5iYXNlKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksbn12YXIgRWM9bmV3IERhdGUsVGM9bmV3IERhdGU7ZnVuY3Rpb24gWXQobix0LGUsaSl7ZnVuY3Rpb24gcihzKXtyZXR1cm4gbihzPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtzKSksc31yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihzKXtyZXR1cm4gbihzPW5ldyBEYXRlKCtzKSksc30sci5jZWlsPWZ1bmN0aW9uKHMpe3JldHVybiBuKHM9bmV3IERhdGUocy0xKSksdChzLDEpLG4ocyksc30sci5yb3VuZD1mdW5jdGlvbihzKXt2YXIgbz1yKHMpLGE9ci5jZWlsKHMpO3JldHVybiBzLW88YS1zP286YX0sci5vZmZzZXQ9ZnVuY3Rpb24ocyxvKXtyZXR1cm4gdChzPW5ldyBEYXRlKCtzKSxvPT1udWxsPzE6TWF0aC5mbG9vcihvKSksc30sci5yYW5nZT1mdW5jdGlvbihzLG8sYSl7dmFyIGw9W10sYztpZihzPXIuY2VpbChzKSxhPWE9PW51bGw/MTpNYXRoLmZsb29yKGEpLCEoczxvKXx8IShhPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtzKSksdChzLGEpLG4ocyk7d2hpbGUoYzxzJiZzPG8pO3JldHVybiBsfSxyLmZpbHRlcj1mdW5jdGlvbihzKXtyZXR1cm4gWXQoZnVuY3Rpb24obyl7aWYobz49bylmb3IoO24obyksIXMobyk7KW8uc2V0VGltZShvLTEpfSxmdW5jdGlvbihvLGEpe2lmKG8+PW8paWYoYTwwKWZvcig7KythPD0wOylmb3IoO3QobywtMSksIXMobyk7KTtlbHNlIGZvcig7LS1hPj0wOylmb3IoO3QobywxKSwhcyhvKTspO30pfSxlJiYoci5jb3VudD1mdW5jdGlvbihzLG8pe3JldHVybiBFYy5zZXRUaW1lKCtzKSxUYy5zZXRUaW1lKCtvKSxuKEVjKSxuKFRjKSxNYXRoLmZsb29yKGUoRWMsVGMpKX0sci5ldmVyeT1mdW5jdGlvbihzKXtyZXR1cm4gcz1NYXRoLmZsb29yKHMpLCFpc0Zpbml0ZShzKXx8IShzPjApP251bGw6cz4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24obyl7cmV0dXJuIGkobyklcz09PTB9OmZ1bmN0aW9uKG8pe3JldHVybiByLmNvdW50KDAsbyklcz09PTB9KTpyfSkscn12YXIgY2E9WXQoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LW59KTtjYS5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLCFpc0Zpbml0ZShuKXx8IShuPjApP251bGw6bj4xP1l0KGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbikqbil9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2Uqbil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbn0pOmNhfTt2YXIgdWE9Y2EsVHA9Y2EucmFuZ2U7dmFyIGJpPTFlMyxTbj02ZTQsQWM9MzZlNSxoYT04NjRlNSxmYT02MDQ4ZTU7dmFyIEFwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KmJpKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9iaX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDU2Vjb25kcygpfSksZGE9QXAsQ3A9QXAucmFuZ2U7dmFyIFJwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlNuKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9Tbn0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksQ2M9UnAsZHY9UnAucmFuZ2U7dmFyIExwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmktbi5nZXRNaW51dGVzKCkqU24pfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KkFjKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9BY30sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLFJjPUxwLHB2PUxwLnJhbmdlO3ZhciBQcD1ZdChmdW5jdGlvbihuKXtuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktbi5nZXRUaW1lem9uZU9mZnNldCgpKSpTbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSkscnI9UHAsbXY9UHAucmFuZ2U7ZnVuY3Rpb24gU2kobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LW4pJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqU24pL2ZhfSl9dmFyIEVpPVNpKDApLHNyPVNpKDEpLERwPVNpKDIpLElwPVNpKDMpLEduPVNpKDQpLE5wPVNpKDUpLEZwPVNpKDYpLHpwPUVpLnJhbmdlLGd2PXNyLnJhbmdlLHh2PURwLnJhbmdlLHl2PUlwLnJhbmdlLHZ2PUduLnJhbmdlLF92PU5wLnJhbmdlLHd2PUZwLnJhbmdlO3ZhciBVcD1ZdChmdW5jdGlvbihuKXtuLnNldERhdGUoMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSsodC5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSxMYz1VcCxNdj1VcC5yYW5nZTt2YXIgUGM9WXQoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtQYy5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4haXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKXx8IShuPjApP251bGw6WXQoZnVuY3Rpb24odCl7dC5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0RnVsbFllYXIoKS9uKSpuKSx0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKm4pfSl9O3ZhciBFbj1QYyxidj1QYy5yYW5nZTt2YXIgQnA9WXQoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSkscGE9QnAsU3Y9QnAucmFuZ2U7ZnVuY3Rpb24gVGkobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LW4pJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvZmF9KX12YXIgQXM9VGkoMCksb3I9VGkoMSksT3A9VGkoMiksa3A9VGkoMyksV249VGkoNCksSHA9VGkoNSksVnA9VGkoNiksR3A9QXMucmFuZ2UsRXY9b3IucmFuZ2UsVHY9T3AucmFuZ2UsQXY9a3AucmFuZ2UsQ3Y9V24ucmFuZ2UsUnY9SHAucmFuZ2UsTHY9VnAucmFuZ2U7dmFyIERjPVl0KGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSk7RGMuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIWlzRmluaXRlKG49TWF0aC5mbG9vcihuKSl8fCEobj4wKT9udWxsOll0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvbikqbiksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSpuKX0pfTt2YXIgQWk9RGMsUHY9RGMucmFuZ2U7ZnVuY3Rpb24gSWMobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpfWZ1bmN0aW9uIE5jKG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpfWZ1bmN0aW9uIENzKG4sdCxlKXtyZXR1cm57eTpuLG06dCxkOmUsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBGYyhuKXt2YXIgdD1uLmRhdGVUaW1lLGU9bi5kYXRlLGk9bi50aW1lLHI9bi5wZXJpb2RzLHM9bi5kYXlzLG89bi5zaG9ydERheXMsYT1uLm1vbnRocyxsPW4uc2hvcnRNb250aHMsYz1ScyhyKSx1PUxzKHIpLGg9UnMocyksZj1McyhzKSxkPVJzKG8pLGc9THMobykseD1ScyhhKSx2PUxzKGEpLG09UnMobCkscD1McyhsKSxiPXthOlYsQTpRLGI6YXQsQjpHLGM6bnVsbCxkOkpwLGU6SnAsZjp0XyxnOnVfLEc6Zl8sSDpLdixJOlF2LGo6anYsTDp0bSxtOmVfLE06bl8scDokLHE6bHQsUTpRcCxzOmpwLFM6aV8sdTpyXyxVOnNfLFY6b18sdzphXyxXOmxfLHg6bnVsbCxYOm51bGwseTpjXyxZOmhfLFo6ZF8sIiUiOktwfSxfPXthOmR0LEE6eHQsYjprLEI6RnQsYzpudWxsLGQ6JHAsZTokcCxmOnhfLGc6QV8sRzpSXyxIOnBfLEk6bV8sajpnXyxMOm5tLG06eV8sTTp2XyxwOm10LHE6U3QsUTpRcCxzOmpwLFM6X18sdTp3XyxVOk1fLFY6Yl8sdzpTXyxXOkVfLHg6bnVsbCxYOm51bGwseTpUXyxZOkNfLFo6TF8sIiUiOktwfSxTPXthOlgsQTp5LGI6UixCOkQsYzpGLGQ6WXAsZTpZcCxmOll2LGc6WHAsRzpxcCxIOlpwLEk6WnAsajpHdixMOlh2LG06VnYsTTpXdixwOnR0LHE6SHYsUTpKdixzOiR2LFM6cXYsdTp6dixVOlV2LFY6QnYsdzpGdixXOk92LHg6eixYOk4seTpYcCxZOnFwLFo6a3YsIiUiOlp2fTtiLng9TChlLGIpLGIuWD1MKGksYiksYi5jPUwodCxiKSxfLng9TChlLF8pLF8uWD1MKGksXyksXy5jPUwodCxfKTtmdW5jdGlvbiBMKEIsc3Qpe3JldHVybiBmdW5jdGlvbihudCl7dmFyIEM9W10saj0tMSxKPTAsaXQ9Qi5sZW5ndGgsZXQsdnQsYnQ7Zm9yKG50IGluc3RhbmNlb2YgRGF0ZXx8KG50PW5ldyBEYXRlKCtudCkpOysrajxpdDspQi5jaGFyQ29kZUF0KGopPT09MzcmJihDLnB1c2goQi5zbGljZShKLGopKSwodnQ9V3BbZXQ9Qi5jaGFyQXQoKytqKV0pIT1udWxsP2V0PUIuY2hhckF0KCsraik6dnQ9ZXQ9PT0iZSI/IiAiOiIwIiwoYnQ9c3RbZXRdKSYmKGV0PWJ0KG50LHZ0KSksQy5wdXNoKGV0KSxKPWorMSk7cmV0dXJuIEMucHVzaChCLnNsaWNlKEosaikpLEMuam9pbigiIil9fWZ1bmN0aW9uIEEoQixzdCl7cmV0dXJuIGZ1bmN0aW9uKG50KXt2YXIgQz1DcygxOTAwLHZvaWQgMCwxKSxqPUgoQyxCLG50Kz0iIiwwKSxKLGl0O2lmKGohPW50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBDKXJldHVybiBuZXcgRGF0ZShDLlEpO2lmKCJzImluIEMpcmV0dXJuIG5ldyBEYXRlKEMucyoxZTMrKCJMImluIEM/Qy5MOjApKTtpZihzdCYmISgiWiJpbiBDKSYmKEMuWj0wKSwicCJpbiBDJiYoQy5IPUMuSCUxMitDLnAqMTIpLEMubT09PXZvaWQgMCYmKEMubT0icSJpbiBDP0MucTowKSwiViJpbiBDKXtpZihDLlY8MXx8Qy5WPjUzKXJldHVybiBudWxsOyJ3ImluIEN8fChDLnc9MSksIloiaW4gQz8oSj1OYyhDcyhDLnksMCwxKSksaXQ9Si5nZXRVVENEYXkoKSxKPWl0PjR8fGl0PT09MD9vci5jZWlsKEopOm9yKEopLEo9cGEub2Zmc2V0KEosKEMuVi0xKSo3KSxDLnk9Si5nZXRVVENGdWxsWWVhcigpLEMubT1KLmdldFVUQ01vbnRoKCksQy5kPUouZ2V0VVRDRGF0ZSgpKyhDLncrNiklNyk6KEo9SWMoQ3MoQy55LDAsMSkpLGl0PUouZ2V0RGF5KCksSj1pdD40fHxpdD09PTA/c3IuY2VpbChKKTpzcihKKSxKPXJyLm9mZnNldChKLChDLlYtMSkqNyksQy55PUouZ2V0RnVsbFllYXIoKSxDLm09Si5nZXRNb250aCgpLEMuZD1KLmdldERhdGUoKSsoQy53KzYpJTcpfWVsc2UoIlciaW4gQ3x8IlUiaW4gQykmJigidyJpbiBDfHwoQy53PSJ1ImluIEM/Qy51JTc6IlciaW4gQz8xOjApLGl0PSJaImluIEM/TmMoQ3MoQy55LDAsMSkpLmdldFVUQ0RheSgpOkljKENzKEMueSwwLDEpKS5nZXREYXkoKSxDLm09MCxDLmQ9IlciaW4gQz8oQy53KzYpJTcrQy5XKjctKGl0KzUpJTc6Qy53K0MuVSo3LShpdCs2KSU3KTtyZXR1cm4iWiJpbiBDPyhDLkgrPUMuWi8xMDB8MCxDLk0rPUMuWiUxMDAsTmMoQykpOkljKEMpfX1mdW5jdGlvbiBIKEIsc3QsbnQsQyl7Zm9yKHZhciBqPTAsSj1zdC5sZW5ndGgsaXQ9bnQubGVuZ3RoLGV0LHZ0O2o8Sjspe2lmKEM+PWl0KXJldHVybi0xO2lmKGV0PXN0LmNoYXJDb2RlQXQoaisrKSxldD09PTM3KXtpZihldD1zdC5jaGFyQXQoaisrKSx2dD1TW2V0IGluIFdwP3N0LmNoYXJBdChqKyspOmV0XSwhdnR8fChDPXZ0KEIsbnQsQykpPDApcmV0dXJuLTF9ZWxzZSBpZihldCE9bnQuY2hhckNvZGVBdChDKyspKXJldHVybi0xfXJldHVybiBDfWZ1bmN0aW9uIHR0KEIsc3QsbnQpe3ZhciBDPWMuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnA9dVtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYKEIsc3QsbnQpe3ZhciBDPWQuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9Z1tDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KEIsc3QsbnQpe3ZhciBDPWguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9ZltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKEIsc3QsbnQpe3ZhciBDPW0uZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09cFtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKEIsc3QsbnQpe3ZhciBDPXguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09dltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKEIsc3QsbnQpe3JldHVybiBIKEIsdCxzdCxudCl9ZnVuY3Rpb24geihCLHN0LG50KXtyZXR1cm4gSChCLGUsc3QsbnQpfWZ1bmN0aW9uIE4oQixzdCxudCl7cmV0dXJuIEgoQixpLHN0LG50KX1mdW5jdGlvbiBWKEIpe3JldHVybiBvW0IuZ2V0RGF5KCldfWZ1bmN0aW9uIFEoQil7cmV0dXJuIHNbQi5nZXREYXkoKV19ZnVuY3Rpb24gYXQoQil7cmV0dXJuIGxbQi5nZXRNb250aCgpXX1mdW5jdGlvbiBHKEIpe3JldHVybiBhW0IuZ2V0TW9udGgoKV19ZnVuY3Rpb24gJChCKXtyZXR1cm4gclsrKEIuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBsdChCKXtyZXR1cm4gMSt+fihCLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gZHQoQil7cmV0dXJuIG9bQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24geHQoQil7cmV0dXJuIHNbQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24gayhCKXtyZXR1cm4gbFtCLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEZ0KEIpe3JldHVybiBhW0IuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbXQoQil7cmV0dXJuIHJbKyhCLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gU3QoQil7cmV0dXJuIDErfn4oQi5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsYik7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSxwYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMSk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsXyk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNQYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMCk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fX19dmFyIFdwPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHBlPS9eXHMqXGQrLyxEdj0vXiUvLEl2PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBCdChuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLHM9ci5sZW5ndGg7cmV0dXJuIGkrKHM8ZT9uZXcgQXJyYXkoZS1zKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBOdihuKXtyZXR1cm4gbi5yZXBsYWNlKEl2LCJcXCQmIil9ZnVuY3Rpb24gUnMobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKE52KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gTHMobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gRnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24genYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVXYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlY9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT3Yobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcXAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrdihuLHQsZSl7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLlo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEh2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPWlbMF0qMy0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5tPWlbMF0tMSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZcChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBacChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uSD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uTT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4uTD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadihuLHQsZSl7dmFyIGk9RHYuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/ZStpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBKdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gaT8obi5RPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnAobix0KXtyZXR1cm4gQnQobi5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBLdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBRdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24ganYobix0KXtyZXR1cm4gQnQoMStyci5jb3VudChFbihuKSxuKSx0LDMpfWZ1bmN0aW9uIHRtKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiB0XyhuLHQpe3JldHVybiB0bShuLHQpKyIwMDAifWZ1bmN0aW9uIGVfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gbl8obix0KXtyZXR1cm4gQnQobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBpXyhuLHQpe3JldHVybiBCdChuLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHJfKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBzXyhuLHQpe3JldHVybiBCdChFaS5jb3VudChFbihuKS0xLG4pLHQsMil9ZnVuY3Rpb24gZW0obil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/R24obik6R24uY2VpbChuKX1mdW5jdGlvbiBvXyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KEduLmNvdW50KEVuKG4pLG4pKyhFbihuKS5nZXREYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gYV8obil7cmV0dXJuIG4uZ2V0RGF5KCl9ZnVuY3Rpb24gbF8obix0KXtyZXR1cm4gQnQoc3IuY291bnQoRW4obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGNfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB1XyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBoXyhuLHQpe3JldHVybiBCdChuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gZl8obix0KXt2YXIgZT1uLmdldERheSgpO3JldHVybiBuPWU+PTR8fGU9PT0wP0duKG4pOkduLmNlaWwobiksQnQobi5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGRfKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnQodC82MHwwLCIwIiwyKStCdCh0JTYwLCIwIiwyKX1mdW5jdGlvbiAkcChuLHQpe3JldHVybiBCdChuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHBfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIG1fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBnXyhuLHQpe3JldHVybiBCdCgxK3BhLmNvdW50KEFpKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbm0obix0KXtyZXR1cm4gQnQobi5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHhfKG4sdCl7cmV0dXJuIG5tKG4sdCkrIjAwMCJ9ZnVuY3Rpb24geV8obix0KXtyZXR1cm4gQnQobi5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiB2XyhuLHQpe3JldHVybiBCdChuLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIF9fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gd18obil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1fKG4sdCl7cmV0dXJuIEJ0KEFzLmNvdW50KEFpKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBpbShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHx0PT09MD9XbihuKTpXbi5jZWlsKG4pfWZ1bmN0aW9uIGJfKG4sdCl7cmV0dXJuIG49aW0obiksQnQoV24uY291bnQoQWkobiksbikrKEFpKG4pLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBTXyhuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBFXyhuLHQpe3JldHVybiBCdChvci5jb3VudChBaShuKS0xLG4pLHQsMil9ZnVuY3Rpb24gVF8obix0KXtyZXR1cm4gQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEFfKG4sdCl7cmV0dXJuIG49aW0obiksQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIENfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBSXyhuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIG49ZT49NHx8ZT09PTA/V24obik6V24uY2VpbChuKSxCdChuLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gTF8oKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEtwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFFwKG4pe3JldHVybitufWZ1bmN0aW9uIGpwKG4pe3JldHVybiBNYXRoLmZsb29yKCtuLzFlMyl9dmFyIGFyLG1hLHJtLHNtLG9tO3pjKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gemMobil7cmV0dXJuIGFyPUZjKG4pLG1hPWFyLmZvcm1hdCxybT1hci5wYXJzZSxzbT1hci51dGNGb3JtYXQsb209YXIudXRjUGFyc2UsYXJ9dmFyIFBzPTFlMyxEcz1Qcyo2MCxJcz1Ecyo2MCxOcz1JcyoyNCxQXz1Ocyo3LGFtPU5zKjMwLFVjPU5zKjM2NTtmdW5jdGlvbiBEXyhuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24gSV8obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlPytuOituZXcgRGF0ZSgrbil9ZnVuY3Rpb24gQmMobix0LGUsaSxyLHMsbyxhLGwpe3ZhciBjPUVzKERlLERlKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxkPWwoIjolUyIpLGc9bCgiJUk6JU0iKSx4PWwoIiVJICVwIiksdj1sKCIlYSAlZCIpLG09bCgiJWIgJWQiKSxwPWwoIiVCIiksYj1sKCIlWSIpLF89W1tvLDEsUHNdLFtvLDUsNSpQc10sW28sMTUsMTUqUHNdLFtvLDMwLDMwKlBzXSxbcywxLERzXSxbcyw1LDUqRHNdLFtzLDE1LDE1KkRzXSxbcywzMCwzMCpEc10sW3IsMSxJc10sW3IsMywzKklzXSxbciw2LDYqSXNdLFtyLDEyLDEyKklzXSxbaSwxLE5zXSxbaSwyLDIqTnNdLFtlLDEsUF9dLFt0LDEsYW1dLFt0LDMsMyphbV0sW24sMSxVY11dO2Z1bmN0aW9uIFMoQSl7cmV0dXJuKG8oQSk8QT9mOnMoQSk8QT9kOnIoQSk8QT9nOmkoQSk8QT94OnQoQSk8QT9lKEEpPEE/djptOm4oQSk8QT9wOmIpKEEpfWZ1bmN0aW9uIEwoQSxILHR0LFgpe2lmKEE9PW51bGwmJihBPTEwKSx0eXBlb2YgQT09Im51bWJlciIpe3ZhciB5PU1hdGguYWJzKHR0LUgpL0EsUj1pcyhmdW5jdGlvbihEKXtyZXR1cm4gRFsyXX0pLnJpZ2h0KF8seSk7Uj09PV8ubGVuZ3RoPyhYPV9uKEgvVWMsdHQvVWMsQSksQT1uKTpSPyhSPV9beS9fW1ItMV1bMl08X1tSXVsyXS95P1ItMTpSXSxYPVJbMV0sQT1SWzBdKTooWD1NYXRoLm1heChfbihILHR0LEEpLDEpLEE9YSl9cmV0dXJuIFg9PW51bGw/QTpBLmV2ZXJ5KFgpfXJldHVybiBjLmludmVydD1mdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUodShBKSl9LGMuZG9tYWluPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goYnMuY2FsbChBLElfKSk6aCgpLm1hcChEXyl9LGMudGlja3M9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpLFg9dHRbMF0seT10dFt0dC5sZW5ndGgtMV0sUj15PFgsRDtyZXR1cm4gUiYmKEQ9WCxYPXkseT1EKSxEPUwoQSxYLHksSCksRD1EP0QucmFuZ2UoWCx5KzEpOltdLFI/RC5yZXZlcnNlKCk6RH0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKEEsSCl7cmV0dXJuIEg9PW51bGw/UzpsKEgpfSxjLm5pY2U9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpO3JldHVybihBPUwoQSx0dFswXSx0dFt0dC5sZW5ndGgtMV0sSCkpP2gobGEodHQsQSkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBWbihjLEJjKG4sdCxlLGkscixzLG8sYSxsKSl9LGN9ZnVuY3Rpb24gRnMoKXtyZXR1cm4gUGUuYXBwbHkoQmMoRW4sTGMsRWkscnIsUmMsQ2MsZGEsdWEsbWEpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE9jKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gbHIobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1PYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9jLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y20odGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspaT1lLlUsZT09PWkuTD8ocj1pLlIsciYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoenModGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxpLkM9ITAsVXModGhpcyxpKSkpOihyPWkuTCxyJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLkwmJihVcyh0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLGkuQz0hMCx6cyh0aGlzLGkpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0PW4uVSxlLGk9bi5MLHI9bi5SLHMsbztpZihpP3I/cz1jbShyKTpzPWk6cz1yLHQ/dC5MPT09bj90Lkw9czp0LlI9czp0aGlzLl89cyxpJiZyPyhvPXMuQyxzLkM9bi5DLHMuTD1pLGkuVT1zLHMhPT1yPyh0PXMuVSxzLlU9bi5VLG49cy5SLHQuTD1uLHMuUj1yLHIuVT1zKToocy5VPXQsdD1zLG49cy5SKSk6KG89bi5DLG49cyksbiYmKG4uVT10KSwhbyl7aWYobiYmbi5DKXtuLkM9ITE7cmV0dXJufWRve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoZT10LlIsZS5DJiYoZS5DPSExLHQuQz0hMCx6cyh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCxVcyh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSx6cyh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9dC5MLGUuQyYmKGUuQz0hMSx0LkM9ITAsVXModGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsenModGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsVXModGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O2Z1bmN0aW9uIHpzKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiBVcyhuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY20obil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufXZhciBrYz1PYztmdW5jdGlvbiBjcihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxzPW1lLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJkJzKHIsbix0LGUpLGkmJkJzKHIsdCxuLGkpLENlW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLENlW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLHJ9ZnVuY3Rpb24gdXIobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIEJzKG4sdCxlLGkpeyFuWzBdJiYhblsxXT8oblswXT1pLG4ubGVmdD10LG4ucmlnaHQ9ZSk6bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pfWZ1bmN0aW9uIHpfKG4sdCxlLGkscil7dmFyIHM9blswXSxvPW5bMV0sYT1zWzBdLGw9c1sxXSxjPW9bMF0sdT1vWzFdLGg9MCxmPTEsZD1jLWEsZz11LWwseDtpZih4PXQtYSwhKCFkJiZ4PjApKXtpZih4Lz1kLGQ8MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWVsc2UgaWYoZD4wKXtpZih4PmYpcmV0dXJuO3g+aCYmKGg9eCl9aWYoeD1pLWEsISghZCYmeDwwKSl7aWYoeC89ZCxkPDApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1lbHNlIGlmKGQ+MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWlmKHg9ZS1sLCEoIWcmJng+MCkpe2lmKHgvPWcsZzwwKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9ZWxzZSBpZihnPjApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1pZih4PXItbCwhKCFnJiZ4PDApKXtpZih4Lz1nLGc8MCl7aWYoeD5mKXJldHVybjt4PmgmJihoPXgpfWVsc2UgaWYoZz4wKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihuWzBdPVthK2gqZCxsK2gqZ10pLGY8MSYmKG5bMV09W2ErZipkLGwrZipnXSkpLCEwfX19fX1mdW5jdGlvbiBVXyhuLHQsZSxpLHIpe3ZhciBzPW5bMV07aWYocylyZXR1cm4hMDt2YXIgbz1uWzBdLGE9bi5sZWZ0LGw9bi5yaWdodCxjPWFbMF0sdT1hWzFdLGg9bFswXSxmPWxbMV0sZD0oYytoKS8yLGc9KHUrZikvMix4LHY7aWYoZj09PXUpe2lmKGQ8dHx8ZD49aSlyZXR1cm47aWYoYz5oKXtpZighbylvPVtkLGVdO2Vsc2UgaWYob1sxXT49cilyZXR1cm47cz1bZCxyXX1lbHNle2lmKCFvKW89W2Qscl07ZWxzZSBpZihvWzFdPGUpcmV0dXJuO3M9W2QsZV19fWVsc2UgaWYoeD0oYy1oKS8oZi11KSx2PWcteCpkLHg8LTF8fHg+MSlpZihjPmgpe2lmKCFvKW89WyhlLXYpL3gsZV07ZWxzZSBpZihvWzFdPj1yKXJldHVybjtzPVsoci12KS94LHJdfWVsc2V7aWYoIW8pbz1bKHItdikveCxyXTtlbHNlIGlmKG9bMV08ZSlyZXR1cm47cz1bKGUtdikveCxlXX1lbHNlIGlmKHU8Zil7aWYoIW8pbz1bdCx4KnQrdl07ZWxzZSBpZihvWzBdPj1pKXJldHVybjtzPVtpLHgqaSt2XX1lbHNle2lmKCFvKW89W2kseCppK3ZdO2Vsc2UgaWYob1swXTx0KXJldHVybjtzPVt0LHgqdCt2XX1yZXR1cm4gblswXT1vLG5bMV09cywhMH1mdW5jdGlvbiB1bShuLHQsZSxpKXtmb3IodmFyIHI9bWUubGVuZ3RoLHM7ci0tOykoIVVfKHM9bWVbcl0sbix0LGUsaSl8fCF6XyhzLG4sdCxlLGkpfHwhKE1hdGguYWJzKHNbMF1bMF0tc1sxXVswXSk+WHR8fE1hdGguYWJzKHNbMF1bMV0tc1sxXVsxXSk+WHQpKSYmZGVsZXRlIG1lW3JdfWZ1bmN0aW9uIGhtKG4pe3JldHVybiBDZVtuLmluZGV4XT17c2l0ZTpuLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gQl8obix0KXt2YXIgZT1uLnNpdGUsaT10LmxlZnQscj10LnJpZ2h0O3JldHVybiBlPT09ciYmKHI9aSxpPWUpLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKTooZT09PWk/KGk9dFsxXSxyPXRbMF0pOihpPXRbMF0scj10WzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBIYyhuLHQpe3JldHVybiB0WysodC5sZWZ0IT09bi5zaXRlKV19ZnVuY3Rpb24gT18obix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfWZ1bmN0aW9uIGZtKCl7Zm9yKHZhciBuPTAsdD1DZS5sZW5ndGgsZSxpLHIscztuPHQ7KytuKWlmKChlPUNlW25dKSYmKHM9KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBvPW5ldyBBcnJheShzKSxhPW5ldyBBcnJheShzKTtmb3Iocj0wO3I8czsrK3Ipb1tyXT1yLGFbcl09Ql8oZSxtZVtpW3JdXSk7Zm9yKG8uc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBhW2NdLWFbbF19KSxyPTA7cjxzOysrcilhW3JdPWlbb1tyXV07Zm9yKHI9MDtyPHM7KytyKWlbcl09YVtyXX19ZnVuY3Rpb24gZG0obix0LGUsaSl7dmFyIHI9Q2UubGVuZ3RoLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2LG09ITA7Zm9yKHM9MDtzPHI7KytzKWlmKG89Q2Vbc10pe2ZvcihhPW8uc2l0ZSxjPW8uaGFsZmVkZ2VzLGw9Yy5sZW5ndGg7bC0tOyltZVtjW2xdXXx8Yy5zcGxpY2UobCwxKTtmb3IobD0wLHU9Yy5sZW5ndGg7bDx1OylnPU9fKG8sbWVbY1tsXV0pLHg9Z1swXSx2PWdbMV0saD1IYyhvLG1lW2NbKytsJXVdXSksZj1oWzBdLGQ9aFsxXSwoTWF0aC5hYnMoeC1mKT5YdHx8TWF0aC5hYnModi1kKT5YdCkmJihjLnNwbGljZShsLDAsbWUucHVzaCh1cihhLGcsTWF0aC5hYnMoeC1uKTxYdCYmaS12Plh0P1tuLE1hdGguYWJzKGYtbik8WHQ/ZDppXTpNYXRoLmFicyh2LWkpPFh0JiZlLXg+WHQ/W01hdGguYWJzKGQtaSk8WHQ/ZjplLGldOk1hdGguYWJzKHgtZSk8WHQmJnYtdD5YdD9bZSxNYXRoLmFicyhmLWUpPFh0P2Q6dF06TWF0aC5hYnModi10KTxYdCYmeC1uPlh0P1tNYXRoLmFicyhkLXQpPFh0P2Y6bix0XTpudWxsKSktMSksKyt1KTt1JiYobT0hMSl9aWYobSl7dmFyIHAsYixfLFM9MS8wO2ZvcihzPTAsbT1udWxsO3M8cjsrK3MpKG89Q2Vbc10pJiYoYT1vLnNpdGUscD1hWzBdLW4sYj1hWzFdLXQsXz1wKnArYipiLF88UyYmKFM9XyxtPW8pKTtpZihtKXt2YXIgTD1bbix0XSxBPVtuLGldLEg9W2UsaV0sdHQ9W2UsdF07bS5oYWxmZWRnZXMucHVzaChtZS5wdXNoKHVyKGE9bS5zaXRlLEwsQSkpLTEsbWUucHVzaCh1cihhLEEsSCkpLTEsbWUucHVzaCh1cihhLEgsdHQpKS0xLG1lLnB1c2godXIoYSx0dCxMKSktMSl9fWZvcihzPTA7czxyOysrcykobz1DZVtzXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBDZVtzXSl9dmFyIHBtPVtdLGdhO2Z1bmN0aW9uIGtfKCl7bHIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIENpKG4pe3ZhciB0PW4uUCxlPW4uTjtpZighKCF0fHwhZSkpe3ZhciBpPXQuc2l0ZSxyPW4uc2l0ZSxzPWUuc2l0ZTtpZihpIT09cyl7dmFyIG89clswXSxhPXJbMV0sbD1pWzBdLW8sYz1pWzFdLWEsdT1zWzBdLW8saD1zWzFdLWEsZj0yKihsKmgtYyp1KTtpZighKGY+PS1tbSkpe3ZhciBkPWwqbCtjKmMsZz11KnUraCpoLHg9KGgqZC1jKmcpL2Ysdj0obCpnLXUqZCkvZixtPXBtLnBvcCgpfHxuZXcga187bS5hcmM9bixtLnNpdGU9cixtLng9eCtvLG0ueT0obS5jeT12K2EpK01hdGguc3FydCh4Kngrdip2KSxuLmNpcmNsZT1tO2Zvcih2YXIgcD1udWxsLGI9aHIuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3A9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7cD1iO2JyZWFrfWhyLmluc2VydChwLG0pLHB8fChnYT1tKX19fX1mdW5jdGlvbiBSaShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoZ2E9dC5OKSxoci5yZW1vdmUodCkscG0ucHVzaCh0KSxscih0KSxuLmNpcmNsZT1udWxsKX12YXIgeG09W107ZnVuY3Rpb24gSF8oKXtscih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gZ20obil7dmFyIHQ9eG0ucG9wKCl8fG5ldyBIXztyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBWYyhuKXtSaShuKSxMaS5yZW1vdmUobikseG0ucHVzaChuKSxscihuKX1mdW5jdGlvbiB5bShuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxpPXQuY3kscj1bZSxpXSxzPW4uUCxvPW4uTixhPVtuXTtWYyhuKTtmb3IodmFyIGw9cztsLmNpcmNsZSYmTWF0aC5hYnMoZS1sLmNpcmNsZS54KTxYdCYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8WHQ7KXM9bC5QLGEudW5zaGlmdChsKSxWYyhsKSxsPXM7YS51bnNoaWZ0KGwpLFJpKGwpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPFh0JiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTxYdDspbz1jLk4sYS5wdXNoKGMpLFZjKGMpLGM9bzthLnB1c2goYyksUmkoYyk7dmFyIHU9YS5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1hW2hdLGw9YVtoLTFdLEJzKGMuZWRnZSxsLnNpdGUsYy5zaXRlLHIpO2w9YVswXSxjPWFbdS0xXSxjLmVkZ2U9Y3IobC5zaXRlLGMuc2l0ZSxudWxsLHIpLENpKGwpLENpKGMpfWZ1bmN0aW9uIHZtKG4pe2Zvcih2YXIgdD1uWzBdLGU9blsxXSxpLHIscyxvLGE9TGkuXzthOylpZihzPV9tKGEsZSktdCxzPlh0KWE9YS5MO2Vsc2UgaWYobz10LVZfKGEsZSksbz5YdCl7aWYoIWEuUil7aT1hO2JyZWFrfWE9YS5SfWVsc2V7cz4tWHQ/KGk9YS5QLHI9YSk6bz4tWHQ/KGk9YSxyPWEuTik6aT1yPWE7YnJlYWt9aG0obik7dmFyIGw9Z20obik7aWYoTGkuaW5zZXJ0KGksbCksISghaSYmIXIpKXtpZihpPT09cil7UmkoaSkscj1nbShpLnNpdGUpLExpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSksQ2koaSksQ2kocik7cmV0dXJufWlmKCFyKXtsLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSk7cmV0dXJufVJpKGkpLFJpKHIpO3ZhciBjPWkuc2l0ZSx1PWNbMF0saD1jWzFdLGY9blswXS11LGQ9blsxXS1oLGc9ci5zaXRlLHg9Z1swXS11LHY9Z1sxXS1oLG09MiooZip2LWQqeCkscD1mKmYrZCpkLGI9eCp4K3YqdixfPVsodipwLWQqYikvbSt1LChmKmIteCpwKS9tK2hdO0JzKHIuZWRnZSxjLGcsXyksbC5lZGdlPWNyKGMsbixudWxsLF8pLHIuZWRnZT1jcihuLGcsbnVsbCxfKSxDaShpKSxDaShyKX19ZnVuY3Rpb24gX20obix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxzPXItdDtpZighcylyZXR1cm4gaTt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIgYT1lWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksaD0xL3MtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMityLXMvMikpKS9oK2k6KGkrYSkvMn1mdW5jdGlvbiBWXyhuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBfbShlLHQpO3ZhciBpPW4uc2l0ZTtyZXR1cm4gaVsxXT09PXQ/aVswXToxLzB9dmFyIFh0PTFlLTYsbW09MWUtMTIsTGksQ2UsaHIsbWU7ZnVuY3Rpb24gR18obix0LGUpe3JldHVybihuWzBdLWVbMF0pKih0WzFdLW5bMV0pLShuWzBdLXRbMF0pKihlWzFdLW5bMV0pfWZ1bmN0aW9uIFdfKG4sdCl7cmV0dXJuIHRbMV0tblsxXXx8dFswXS1uWzBdfWZ1bmN0aW9uIHhhKG4sdCl7dmFyIGU9bi5zb3J0KFdfKS5wb3AoKSxpLHIscztmb3IobWU9W10sQ2U9bmV3IEFycmF5KG4ubGVuZ3RoKSxMaT1uZXcga2MsaHI9bmV3IGtjOzspaWYocz1nYSxlJiYoIXN8fGVbMV08cy55fHxlWzFdPT09cy55JiZlWzBdPHMueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih2bShlKSxpPWVbMF0scj1lWzFdKSxlPW4ucG9wKCk7ZWxzZSBpZihzKXltKHMuYXJjKTtlbHNlIGJyZWFrO2lmKGZtKCksdCl7dmFyIG89K3RbMF1bMF0sYT0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dW0obyxhLGwsYyksZG0obyxhLGwsYyl9dGhpcy5lZGdlcz1tZSx0aGlzLmNlbGxzPUNlLExpPWhyPW1lPUNlPW51bGx9eGEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4YSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gSGModCxuW2ldKX0pO3JldHVybiBlLmRhdGE9dC5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKCEhKGE9KHM9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpZm9yKHZhciByPWUuc2l0ZSxzLG89LTEsYSxsLGM9dFtzW2EtMV1dLHU9Yy5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdDsrK288YTspbD11LGM9dFtzW29dXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQsbCYmdSYmaTxsLmluZGV4JiZpPHUuaW5kZXgmJkdfKHIsbCx1KTwwJiZuLnB1c2goW3IuZGF0YSxsLmRhdGEsdS5kYXRhXSl9KSxufSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5yaWdodH0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm57c291cmNlOm4ubGVmdC5kYXRhLHRhcmdldDpuLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24obix0LGUpe2Zvcih2YXIgaT10aGlzLHIscz1pLl9mb3VuZHx8MCxvPWkuY2VsbHMubGVuZ3RoLGE7IShhPWkuY2VsbHNbc10pOylpZigrK3M+PW8pcmV0dXJuIG51bGw7dmFyIGw9bi1hLnNpdGVbMF0sYz10LWEuc2l0ZVsxXSx1PWwqbCtjKmM7ZG8gYT1pLmNlbGxzW3I9c10scz1udWxsLGEuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIGY9aS5lZGdlc1toXSxkPWYubGVmdDtpZighKChkPT09YS5zaXRlfHwhZCkmJiEoZD1mLnJpZ2h0KSkpe3ZhciBnPW4tZFswXSx4PXQtZFsxXSx2PWcqZyt4Kng7djx1JiYodT12LHM9ZC5pbmRleCl9fSk7d2hpbGUocyE9PW51bGwpO3JldHVybiBpLl9mb3VuZD1yLGU9PW51bGx8fHU8PWUqZT9hLnNpdGU6bnVsbH19O2Z1bmN0aW9uIFBpKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1QaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBpLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09MT90aGlzOm5ldyBQaSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PT0wJnQ9PT0wP3RoaXM6bmV3IFBpKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIEdjPW5ldyBQaSgxLDAsMCk7V2MucHJvdG90eXBlPVBpLnByb3RvdHlwZTtmdW5jdGlvbiBXYyhuKXtmb3IoOyFuLl9fem9vbTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIEdjO3JldHVybiBuLl9fem9vbX12YXIgYm09MWU0LFNtPS4wMDEsRW09T2UoIi4yfmUiKSxxXz1PZSgiLjR+ciIpLHdtPU9lKCIsfiIpO2Z1bmN0aW9uIE1tKG4pe2lmKG49PT0wKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49Ym18fHQ8U20/RW0obik6cV8obil9dmFyIFhjPXtmb3JtYXRUaWNrOk1tLGZvcm1hdFNob3J0Ok1tLGZvcm1hdFJlYWRhYmxlKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1ibXx8dDxTbT9FbShuKTp3bShuKX0sZm9ybWF0TG9uZzp3bX0sc2s9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjR9KTt2YXIgb2s9T2UoIjAuM35zIiksYWs9T2UoIiwuM35mIik7dmFyIFhfPTFlMyxZXz02MCpYXyxaXz02MCpZXyxKXz0yNCpaXyxsaz0zNjUqSl8sY2s9T2UoIi40fiIpO3ZhciAkXz1GcygpLnRpY2tGb3JtYXQoKSxxYyxUbT17Zm9ybWF0VGljayhuKXtyZXR1cm4gJF8obmV3IERhdGUobikpfSxmb3JtYXRTaG9ydChuKXtyZXR1cm4gbmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcocWMse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0sZm9ybWF0UmVhZGFibGUobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSl9LGZvcm1hdExvbmcobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTtmdW5jdGlvbiBmcihuKXtzd2l0Y2gobil7Y2FzZSBvbi5MSU5FQVI6cmV0dXJuIG5ldyBZYztjYXNlIG9uLkxPRzEwOnJldHVybiBuZXcgWmM7Y2FzZSBvbi5USU1FOnJldHVybiBuZXcgSmM7ZGVmYXVsdDpsZXQgdD1uO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgS189LjA1LFljPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPVhjfXRyYW5zZm9ybSh0LGUsaSl7bGV0W3Isc109dCxvPXMtcixbYSxsXT1lLGM9bC1hO3JldHVybiBvPT09MD9hOmMvbyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiBlPT09MD9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1pcigpLHM9KGktZStOdW1iZXIuRVBTSUxPTikqS18sW28sYV09ci5kb21haW4oW2UtcyxpK3NdKS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW28sYV19dGlja3ModCxlKXtyZXR1cm4gaXIoKS5kb21haW4odCkudGlja3MoZSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxaYz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1YY310cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLGkpe2lmKGk8PTApcmV0dXJuIGVbMF07bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vO3JldHVybiBpPXRoaXMudHJhbnNmb3JtKGkpLGgvKHUrTnVtYmVyLkVQU0lMT04pKihpLWwpK299cmV2ZXJzZSh0LGUsaSl7bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKGktbykrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoZT5pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCByPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSkscz1NYXRoLm1heChpLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBpPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLHIqLjUpLHMqMl19dGlja3ModCxlKXtsZXQgaT10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxyPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLHM9VHMoKS5kb21haW4oW2kscl0pLnRpY2tzKGUpO3JldHVybiBzLmxlbmd0aD9zOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LEpjPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1GcygpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1UbX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX07ZnVuY3Rpb24gUV8obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fXZhciAkYz0hMTtpZihzZWxmLmhhc093blByb3BlcnR5KCJXZWJHTDJSZW5kZXJpbmdDb250ZXh0IikmJnNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50Iikpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciIsKCk9PnskYz0hMX0pO2xldCB0PW4uZ2V0Q29udGV4dCgid2ViZ2wyIik7JGM9Qm9vbGVhbih0KX1mdW5jdGlvbiBqXygpe3JldHVybiAkY31mdW5jdGlvbiB0dygpe2lmKCFzZWxmLmhhc093blByb3BlcnR5KCJPZmZzY3JlZW5DYW52YXMiKSlyZXR1cm4hMTtsZXQgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIik7cmV0dXJuIEJvb2xlYW4obil9ZnVuY3Rpb24gZXcobix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG53KG4sdCl7cmV0dXJuIG4ueFswXT09PXQueFswXSYmbi54WzFdPT09dC54WzFdJiZuLnlbMF09PT10LnlbMF0mJm4ueVsxXT09PXQueVsxXX12YXIgRGk9e2NvbnZlcnRSZWN0VG9FeHRlbnQ6UV8saXNXZWJHbDJTdXBwb3J0ZWQ6al8saXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dHcsYXJlUG9seWxpbmVzRXF1YWw6ZXcsYXJlRXh0ZW50c0VxdWFsOm53fTt2YXIgZHI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1mcihvbi5MSU5FQVIpLHRoaXMueVNjYWxlPWZyKG9uLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtsZXQgaT10LHI9RGkuY29udmVydFJlY3RUb0V4dGVudCh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoci54LFtpLngsaS54K2kud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoci55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W2kueStpLmhlaWdodCxpLnldOltpLnksaS55K2kuaGVpZ2h0XSxlWzFdKV19fTt2YXIgVG47KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KShUbnx8KFRuPXt9KSk7ZnVuY3Rpb24geWEobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpzLG9wYWNpdHk6b309aSxhPW47cmV0dXJuIWEmJiFzP251bGw6KGE9YSE9bnVsbD9hOnQoKSxhPWUoYSksYS5zdHlsZS5kaXNwbGF5PXM/IiI6Im5vbmUiLGEuc3R5bGUuc3Ryb2tlPXIsYS5zdHlsZS5vcGFjaXR5PVN0cmluZyhvIT1udWxsP286MSksYSl9dmFyIE9zPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3ZnPXR9Zmx1c2goKXt9b25SZXNpemUodCl7fWRlc3Ryb3lPYmplY3QodCl7dGhpcy5zdmcucmVtb3ZlQ2hpbGQodC5kb20pfXNldFVzZURhcmtNb2RlKHQpe31jcmVhdGVQYXRoRFN0cmluZyh0KXtpZighdC5sZW5ndGgpcmV0dXJuIiI7bGV0IGU9bmV3IEFycmF5KHQubGVuZ3RoLzIpO2VbMF09YE0ke3RbMF19LCR7dFsxXX1gO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGgvMjtpKyspZVtpXT1gTCR7dFtpKjJdfSwke3RbaSoyKzFdfWA7cmV0dXJuIGUuam9pbigiIil9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXtsZXQgcj15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7cy5zdHlsZS5maWxsPSJub25lIjtsZXQgbz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO3JldHVybiBzLnNldEF0dHJpYnV0ZSgiZCIsbyksdGhpcy5zdmcuYXBwZW5kQ2hpbGQocyksc30scz0+e2lmKCEodCE9bnVsbCYmdC5kYXRhKXx8IURpLmFyZVBvbHlsaW5lc0VxdWFsKGUsdD09bnVsbD92b2lkIDA6dC5kYXRhKSl7bGV0IG89dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtzLnNldEF0dHJpYnV0ZSgiZCIsbyl9cmV0dXJuIHN9LGkpO3JldHVybiByPT09bnVsbD9udWxsOihyLnN0eWxlLnN0cm9rZVdpZHRoPVN0cmluZyhpLndpZHRoKSx7ZG9tOnIsZGF0YTplfSl9Y3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0LGUsaSl7bGV0e3NpemU6cixjb2xvcjpzfT1pLG89cipNYXRoLnNxcnQoMykvMixhPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55K28vMyxlLngrci8yLGUueStvLzMsZS54LGUueS1vKjIvM10pLGw9eWEodD09bnVsbD92b2lkIDA6dC5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIGw9PT1udWxsP251bGw6KGwuc3R5bGUuZmlsbD1zLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOnN9PWksbz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtyZXR1cm4gYS5zdHlsZS5maWxsPXIsYS5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksYS5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksYS5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhzKSksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYSksYX0sYT0+KGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcocykpLGEpLGkpO3JldHVybiBvPT09bnVsbD9udWxsOntkb206byxkYXRhOmV9fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnMsY29sb3I6b309cixhPTIvTWF0aC5zcXJ0KDMpKnMsbD1uZXcgRmxvYXQzMkFycmF5KFtlLngtYS8yLGUueStzLzIsZS54LGUueS1zLzIsaS54LGkueS1zLzIsaS54K2EvMixpLnkrcy8yXSksYz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dS5jbGFzc0xpc3QuYWRkKCJ0cmFwZXpvaWQiKSx1LnN0eWxlLmZpbGw9Im5vbmUiO2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQodSksdX0sdT0+e2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdX0scik7cmV0dXJuIGM9PT1udWxsP251bGw6KGMuc3R5bGUuZmlsbD1vLHtkb206YyxkYXRhOmx9KX1kaXNwb3NlKCl7fX07dmFyICRoPSIxMzciO3ZhciBpdz0wLEFtPTEscnc9Mjt2YXIgbDA9MSxzdz0yLEpzPTMsZW89MCxoZT0xLEhyPTIsYzA9MTt2YXIgam49MCxLcz0xLENtPTIsUm09MyxMbT00LG93PTUsSXI9MTAwLGF3PTEwMSxsdz0xMDIsUG09MTAzLERtPTEwNCxjdz0yMDAsdXc9MjAxLGh3PTIwMixmdz0yMDMsdTA9MjA0LGgwPTIwNSxkdz0yMDYscHc9MjA3LG13PTIwOCxndz0yMDkseHc9MjEwLHl3PTAsdnc9MSxfdz0yLHp1PTMsd3c9NCxNdz01LGJ3PTYsU3c9NyxDbD0wLEV3PTEsVHc9Mix0aT0wLEF3PTEsQ3c9MixSdz0zLEx3PTQsUHc9NSxmMD0zMDAsQW89MzAxLENvPTMwMixVdT0zMDMsQnU9MzA0LFJsPTMwNixLaD0zMDcsT3U9MWUzLFZlPTEwMDEsa3U9MTAwMixmZT0xMDAzLEltPTEwMDQ7dmFyIE5tPTEwMDU7dmFyIGJlPTEwMDYsRHc9MTAwNzt2YXIgTGw9MTAwODt2YXIgZWk9MTAwOSxJdz0xMDEwLE53PTEwMTEsbm89MTAxMixGdz0xMDEzLFFhPTEwMTQsVWk9MTAxNSxVcj0xMDE2LHp3PTEwMTcsVXc9MTAxOCxCcj0xMDIwLEJ3PTEwMjEsUmU9MTAyMyxPdz0xMDI0LGt3PTEwMjUsT2k9MTAyNixWcj0xMDI3LEh3PTEwMjgsVnc9MTAyOSxHdz0xMDMwLFd3PTEwMzEscXc9MTAzMyxLYz0zMzc3NixRYz0zMzc3NyxqYz0zMzc3OCx0dT0zMzc3OSxGbT0zNTg0MCx6bT0zNTg0MSxVbT0zNTg0MixCbT0zNTg0MyxYdz0zNjE5NixPbT0zNzQ5MixrbT0zNzQ5NixIbT0zNzgwOCxWbT0zNzgwOSxHbT0zNzgxMCxXbT0zNzgxMSxxbT0zNzgxMixYbT0zNzgxMyxZbT0zNzgxNCxabT0zNzgxNSxKbT0zNzgxNiwkbT0zNzgxNyxLbT0zNzgxOCxRbT0zNzgxOSxqbT0zNzgyMCx0Zz0zNzgyMSxlZz0zNjQ5MixZdz0yMjAwLFp3PTIyMDEsSnc9MjIwMixqYT0yMzAwLHRsPTIzMDEsZXU9MjMwMixOcj0yNDAwLEZyPTI0MDEsZWw9MjQwMixRaD0yNTAwLGQwPTI1MDEsJHc9MDt2YXIgcmk9M2UzLCR0PTMwMDEsS3c9MzIwMCxRdz0zMjAxLHRzPTAsanc9MTt2YXIgbnU9NzY4MDt2YXIgdE09NTE5LGlvPTM1MDQ0LG5sPTM1MDQ4O3ZhciBuZz0iMzAwIGVzIixIdT0xMDM1LEluPWNsYXNze2FkZEV2ZW50TGlzdGVuZXIodCxlKXt0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDAmJih0aGlzLl9saXN0ZW5lcnM9e30pO2xldCBpPXRoaXMuX2xpc3RlbmVycztpW3RdPT09dm9pZCAwJiYoaVt0XT1bXSksaVt0XS5pbmRleE9mKGUpPT09LTEmJmlbdF0ucHVzaChlKX1oYXNFdmVudExpc3RlbmVyKHQsZSl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybiExO2xldCBpPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gaVt0XSE9PXZvaWQgMCYmaVt0XS5pbmRleE9mKGUpIT09LTF9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHIhPT12b2lkIDApe2xldCBzPXIuaW5kZXhPZihlKTtzIT09LTEmJnIuc3BsaWNlKHMsMSl9fWRpc3BhdGNoRXZlbnQodCl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZihpIT09dm9pZCAwKXt0LnRhcmdldD10aGlzO2xldCByPWkuc2xpY2UoMCk7Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXJbc10uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX0sdmU9W107Zm9yKGxldCBuPTA7bjwyNTY7bisrKXZlW25dPShuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNik7dmFyIGl1PU1hdGguUEkvMTgwLFZ1PTE4MC9NYXRoLlBJO2Z1bmN0aW9uIHRuKCl7bGV0IG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxlPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLGk9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKHZlW24mMjU1XSt2ZVtuPj44JjI1NV0rdmVbbj4+MTYmMjU1XSt2ZVtuPj4yNCYyNTVdKyItIit2ZVt0JjI1NV0rdmVbdD4+OCYyNTVdKyItIit2ZVt0Pj4xNiYxNXw2NF0rdmVbdD4+MjQmMjU1XSsiLSIrdmVbZSY2M3wxMjhdK3ZlW2U+PjgmMjU1XSsiLSIrdmVbZT4+MTYmMjU1XSt2ZVtlPj4yNCYyNTVdK3ZlW2kmMjU1XSt2ZVtpPj44JjI1NV0rdmVbaT4+MTYmMjU1XSt2ZVtpPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEllKG4sdCxlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX1mdW5jdGlvbiBlTShuLHQpe3JldHVybihuJXQrdCkldH1mdW5jdGlvbiBydShuLHQsZSl7cmV0dXJuKDEtZSkqbitlKnR9ZnVuY3Rpb24gaWcobil7cmV0dXJuKG4mbi0xKT09PTAmJm4hPT0wfWZ1bmN0aW9uIG5NKG4pe3JldHVybiBNYXRoLnBvdygyLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjIpKX12YXIgSz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLng9dCx0aGlzLnk9ZX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LGUpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbM10qaStyWzZdLHRoaXMueT1yWzFdKmUrcls0XSppK3JbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgZT10aGlzLngtdC54LGk9dGhpcy55LXQueTtyZXR1cm4gZSplK2kqaX1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSkscz10aGlzLngtdC54LG89dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PXMqaS1vKnIrdC54LHRoaXMueT1zKnIrbyppK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fTtLLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGRlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixzLG8sYSxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPXIsdVsyXT1hLHVbM109ZSx1WzRdPXMsdVs1XT1sLHVbNl09aSx1WzddPW8sdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxzPXRoaXMuZWxlbWVudHMsbz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLHU9aVs0XSxoPWlbN10sZj1pWzJdLGQ9aVs1XSxnPWlbOF0seD1yWzBdLHY9clszXSxtPXJbNl0scD1yWzFdLGI9cls0XSxfPXJbN10sUz1yWzJdLEw9cls1XSxBPXJbOF07cmV0dXJuIHNbMF09byp4K2EqcCtsKlMsc1szXT1vKnYrYSpiK2wqTCxzWzZdPW8qbSthKl8rbCpBLHNbMV09Yyp4K3UqcCtoKlMsc1s0XT1jKnYrdSpiK2gqTCxzWzddPWMqbSt1Kl8raCpBLHNbMl09Zip4K2QqcCtnKlMsc1s1XT1mKnYrZCpiK2cqTCxzWzhdPWYqbStkKl8rZypBLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzNdKj10LGVbNl0qPXQsZVsxXSo9dCxlWzRdKj10LGVbN10qPXQsZVsyXSo9dCxlWzVdKj10LGVbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIGUqbyp1LWUqYSpjLWkqcyp1K2kqYSpsK3IqcypjLXIqbypsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11Km8tYSpjLGY9YSpsLXUqcyxkPWMqcy1vKmwsZz1lKmgraSpmK3IqZDtpZihnPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCB4PTEvZztyZXR1cm4gdFswXT1oKngsdFsxXT0ocipjLXUqaSkqeCx0WzJdPShhKmktcipvKSp4LHRbM109Zip4LHRbNF09KHUqZS1yKmwpKngsdFs1XT0ocipzLWEqZSkqeCx0WzZdPWQqeCx0WzddPShpKmwtYyplKSp4LHRbOF09KG8qZS1pKnMpKngsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9ZVsxXSxlWzFdPWVbM10sZVszXT10LHQ9ZVsyXSxlWzJdPWVbNl0sZVs2XT10LHQ9ZVs1XSxlWzVdPWVbN10sZVs3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzNdLHRbMl09ZVs2XSx0WzNdPWVbMV0sdFs0XT1lWzRdLHRbNV09ZVs3XSx0WzZdPWVbMl0sdFs3XT1lWzVdLHRbOF09ZVs4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQsZSxpLHIscyxvLGEpe2xldCBsPU1hdGguY29zKHMpLGM9TWF0aC5zaW4ocyk7cmV0dXJuIHRoaXMuc2V0KGkqbCxpKmMsLWkqKGwqbytjKmEpK28rdCwtcipjLHIqbCwtciooLWMqbytsKmEpK2ErZSwwLDAsMSksdGhpc31zY2FsZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0qPXQsaVszXSo9dCxpWzZdKj10LGlbMV0qPWUsaVs0XSo9ZSxpWzddKj1lLHRoaXN9cm90YXRlKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCkscj10aGlzLmVsZW1lbnRzLHM9clswXSxvPXJbM10sYT1yWzZdLGw9clsxXSxjPXJbNF0sdT1yWzddO3JldHVybiByWzBdPWUqcytpKmwsclszXT1lKm8raSpjLHJbNl09ZSphK2kqdSxyWzFdPS1pKnMrZSpsLHJbNF09LWkqbytlKmMscls3XT0taSphK2UqdSx0aGlzfXRyYW5zbGF0ZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0rPXQqaVsyXSxpWzNdKz10KmlbNV0saVs2XSs9dCppWzhdLGlbMV0rPWUqaVsyXSxpWzRdKz1lKmlbNV0saVs3XSs9ZSppWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZGUucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBwMChuKXtmb3IobGV0IHQ9bi5sZW5ndGgtMTt0Pj0wOy0tdClpZihuW3RdPjY1NTM1KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHJvKG4pe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG4pfXZhciBtMD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSwkZT17aDowLHM6MCxsOjB9LHZhPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gc3Uobix0LGUpe3JldHVybiBlPDAmJihlKz0xKSxlPjEmJihlLT0xKSxlPDEvNj9uKyh0LW4pKjYqZTplPDEvMj90OmU8Mi8zP24rKHQtbikqNiooMi8zLWUpOm59ZnVuY3Rpb24gT3Iobil7cmV0dXJuIG48LjA0MDQ1P24qLjA3NzM5OTM4MDg6TWF0aC5wb3cobiouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIG91KG4pe3JldHVybiBuPC4wMDMxMzA4P24qMTIuOTI6MS4wNTUqTWF0aC5wb3cobiwuNDE2NjYpLS4wNTV9dmFyIGZ0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtyZXR1cm4gZT09PXZvaWQgMCYmaT09PXZvaWQgMD90aGlzLnNldCh0KTp0aGlzLnNldFJHQih0LGUsaSl9c2V0KHQpe3JldHVybiB0JiZ0LmlzQ29sb3I/dGhpcy5jb3B5KHQpOnR5cGVvZiB0PT0ibnVtYmVyIj90aGlzLnNldEhleCh0KTp0eXBlb2YgdD09InN0cmluZyImJnRoaXMuc2V0U3R5bGUodCksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMucj10LHRoaXMuZz10LHRoaXMuYj10LHRoaXN9c2V0SGV4KHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksdGhpcy5yPSh0Pj4xNiYyNTUpLzI1NSx0aGlzLmc9KHQ+PjgmMjU1KS8yNTUsdGhpcy5iPSh0JjI1NSkvMjU1LHRoaXN9c2V0UkdCKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPWksdGhpc31zZXRIU0wodCxlLGkpe2lmKHQ9ZU0odCwxKSxlPUllKGUsMCwxKSxpPUllKGksMCwxKSxlPT09MCl0aGlzLnI9dGhpcy5nPXRoaXMuYj1pO2Vsc2V7bGV0IHI9aTw9LjU/aSooMStlKTppK2UtaSplLHM9MippLXI7dGhpcy5yPXN1KHMscix0KzEvMyksdGhpcy5nPXN1KHMscix0KSx0aGlzLmI9c3UocyxyLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiBlKHIpe3IhPT12b2lkIDAmJnBhcnNlRmxvYXQocik8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgaTtpZihpPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgcixzPWlbMV0sbz1pWzJdO3N3aXRjaChzKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihyPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQoclsxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KHJbMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChyWzNdLDEwKSkvMjU1LGUocls0XSksdGhpcztpZihyPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoclsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KHJbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChyWzNdLDEwKSkvMTAwLGUocls0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihyPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKG8pKXtsZXQgYT1wYXJzZUZsb2F0KHJbMV0pLzM2MCxsPXBhcnNlSW50KHJbMl0sMTApLzEwMCxjPXBhcnNlSW50KHJbM10sMTApLzEwMDtyZXR1cm4gZShyWzRdKSx0aGlzLnNldEhTTChhLGwsYyl9YnJlYWt9fWVsc2UgaWYoaT0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWModCkpe2xldCByPWlbMV0scz1yLmxlbmd0aDtpZihzPT09MylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDEpK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZihzPT09NilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDQpK3IuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtsZXQgZT1tMFt0LnRvTG93ZXJDYXNlKCldO3JldHVybiBlIT09dm9pZCAwP3RoaXMuc2V0SGV4KGUpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1Pcih0LnIpLHRoaXMuZz1Pcih0LmcpLHRoaXMuYj1Pcih0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPW91KHQuciksdGhpcy5nPW91KHQuZyksdGhpcy5iPW91KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IGU9dGhpcy5yLGk9dGhpcy5nLHI9dGhpcy5iLHM9TWF0aC5tYXgoZSxpLHIpLG89TWF0aC5taW4oZSxpLHIpLGEsbCxjPShvK3MpLzI7aWYobz09PXMpYT0wLGw9MDtlbHNle2xldCB1PXMtbztzd2l0Y2gobD1jPD0uNT91LyhzK28pOnUvKDItcy1vKSxzKXtjYXNlIGU6YT0oaS1yKS91KyhpPHI/NjowKTticmVhaztjYXNlIGk6YT0oci1lKS91KzI7YnJlYWs7Y2FzZSByOmE9KGUtaSkvdSs0O2JyZWFrfWEvPTZ9cmV0dXJuIHQuaD1hLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQsZSxpKXtyZXR1cm4gdGhpcy5nZXRIU0woJGUpLCRlLmgrPXQsJGUucys9ZSwkZS5sKz1pLHRoaXMuc2V0SFNMKCRlLmgsJGUucywkZS5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxlKXtyZXR1cm4gdGhpcy5yPXQucitlLnIsdGhpcy5nPXQuZytlLmcsdGhpcy5iPXQuYitlLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxlKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqZSx0aGlzLmcrPSh0LmctdGhpcy5nKSplLHRoaXMuYis9KHQuYi10aGlzLmIpKmUsdGhpc31sZXJwQ29sb3JzKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQucisoZS5yLXQucikqaSx0aGlzLmc9dC5nKyhlLmctdC5nKSppLHRoaXMuYj10LmIrKGUuYi10LmIpKmksdGhpc31sZXJwSFNMKHQsZSl7dGhpcy5nZXRIU0woJGUpLHQuZ2V0SFNMKHZhKTtsZXQgaT1ydSgkZS5oLHZhLmgsZSkscj1ydSgkZS5zLHZhLnMsZSkscz1ydSgkZS5sLHZhLmwsZSk7cmV0dXJuIHRoaXMuc2V0SFNMKGkscixzKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLnI9dFtlXSx0aGlzLmc9dFtlKzFdLHRoaXMuYj10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLnIsdFtlKzFdPXRoaXMuZyx0W2UrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLnI9dC5nZXRYKGUpLHRoaXMuZz10LmdldFkoZSksdGhpcy5iPXQuZ2V0WihlKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07ZnQuTkFNRVM9bTA7ZnQucHJvdG90eXBlLmlzQ29sb3I9ITA7ZnQucHJvdG90eXBlLnI9MTtmdC5wcm90b3R5cGUuZz0xO2Z0LnByb3RvdHlwZS5iPTE7dmFyIHByLE5uPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PT0idW5kZWZpbmVkIilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ByPT09dm9pZCAwJiYocHI9cm8oImNhbnZhcyIpKSxwci53aWR0aD10LndpZHRoLHByLmhlaWdodD10LmhlaWdodDtsZXQgaT1wci5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9cHJ9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1ybygiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCkscz1yLmRhdGE7Zm9yKGxldCBvPTA7bzxzLmxlbmd0aDtvKyspc1tvXT1PcihzW29dLzI1NSkqMjU1O3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1lbHNlIGlmKHQuZGF0YSl7bGV0IGU9dC5kYXRhLnNsaWNlKDApO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/ZVtpXT1NYXRoLmZsb29yKE9yKGVbaV0vMjU1KSoyNTUpOmVbaV09T3IoZVtpXSk7cmV0dXJue2RhdGE6ZSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LGlNPTAsYWU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0PWFlLkRFRkFVTFRfSU1BR0UsZT1hZS5ERUZBVUxUX01BUFBJTkcsaT1WZSxyPVZlLHM9YmUsbz1MbCxhPVJlLGw9ZWksYz0xLHU9cmkpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1lLHRoaXMud3JhcFM9aSx0aGlzLndyYXBUPXIsdGhpcy5tYWdGaWx0ZXI9cyx0aGlzLm1pbkZpbHRlcj1vLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PWEsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBLKDAsMCksdGhpcy5yZXBlYXQ9bmV3IEsoMSwxKSx0aGlzLmNlbnRlcj1uZXcgSygwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGRlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgZT10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIWUmJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgcj10aGlzLmltYWdlO2lmKHIudXVpZD09PXZvaWQgMCYmKHIudXVpZD10bigpKSwhZSYmdC5pbWFnZXNbci51dWlkXT09PXZvaWQgMCl7bGV0IHM7aWYoQXJyYXkuaXNBcnJheShyKSl7cz1bXTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspcltvXS5pc0RhdGFUZXh0dXJlP3MucHVzaChhdShyW29dLmltYWdlKSk6cy5wdXNoKGF1KHJbb10pKX1lbHNlIHM9YXUocik7dC5pbWFnZXNbci51dWlkXT17dXVpZDpyLnV1aWQsdXJsOnN9fWkuaW1hZ2U9ci51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PWYwKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgT3U6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBWZTp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2Uga3U6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBPdTp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIFZlOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBrdTpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTthZS5ERUZBVUxUX0lNQUdFPXZvaWQgMDthZS5ERUZBVUxUX01BUFBJTkc9ZjA7YWUucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBhdShuKXtyZXR1cm4gdHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmbiBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXA/Tm4uZ2V0RGF0YVVSTChuKTpuLmRhdGE/e2RhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobi5kYXRhKSx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCx0eXBlOm4uZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfXZhciBXdD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXQudyE9PXZvaWQgMD90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10aGlzLncsbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qaStvWzhdKnIrb1sxMl0qcyx0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIrb1sxM10qcyx0aGlzLno9b1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKnMsdGhpcy53PW9bM10qZStvWzddKmkrb1sxMV0qcitvWzE1XSpzLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLHMsbD10LmVsZW1lbnRzLGM9bFswXSx1PWxbNF0saD1sWzhdLGY9bFsxXSxkPWxbNV0sZz1sWzldLHg9bFsyXSx2PWxbNl0sbT1sWzEwXTtpZihNYXRoLmFicyh1LWYpPC4wMSYmTWF0aC5hYnMoaC14KTwuMDEmJk1hdGguYWJzKGctdik8LjAxKXtpZihNYXRoLmFicyh1K2YpPC4xJiZNYXRoLmFicyhoK3gpPC4xJiZNYXRoLmFicyhnK3YpPC4xJiZNYXRoLmFicyhjK2QrbS0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IGI9KGMrMSkvMixfPShkKzEpLzIsUz0obSsxKS8yLEw9KHUrZikvNCxBPShoK3gpLzQsSD0oZyt2KS80O3JldHVybiBiPl8mJmI+Uz9iPC4wMT8oaT0wLHI9LjcwNzEwNjc4MSxzPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChiKSxyPUwvaSxzPUEvaSk6Xz5TP188LjAxPyhpPS43MDcxMDY3ODEscj0wLHM9LjcwNzEwNjc4MSk6KHI9TWF0aC5zcXJ0KF8pLGk9TC9yLHM9SC9yKTpTPC4wMT8oaT0uNzA3MTA2NzgxLHI9LjcwNzEwNjc4MSxzPTApOihzPU1hdGguc3FydChTKSxpPUEvcyxyPUgvcyksdGhpcy5zZXQoaSxyLHMsZSksdGhpc31sZXQgcD1NYXRoLnNxcnQoKHYtZykqKHYtZykrKGgteCkqKGgteCkrKGYtdSkqKGYtdSkpO3JldHVybiBNYXRoLmFicyhwKTwuMDAxJiYocD0xKSx0aGlzLng9KHYtZykvcCx0aGlzLnk9KGgteCkvcCx0aGlzLno9KGYtdSkvcCx0aGlzLnc9TWF0aC5hY29zKChjK2QrbS0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTtXdC5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciBOZT1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IFd0KDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgV3QoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBhZSh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9aS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/aS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0PWkuaW50ZXJuYWxGb3JtYXQhPT12b2lkIDA/aS5pbnRlcm5hbEZvcm1hdDpudWxsLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9aS5taW5GaWx0ZXIhPT12b2lkIDA/aS5taW5GaWx0ZXI6YmUsdGhpcy5kZXB0aEJ1ZmZlcj1pLmRlcHRoQnVmZmVyIT09dm9pZCAwP2kuZGVwdGhCdWZmZXI6ITAsdGhpcy5zdGVuY2lsQnVmZmVyPWkuc3RlbmNpbEJ1ZmZlciE9PXZvaWQgMD9pLnN0ZW5jaWxCdWZmZXI6ITEsdGhpcy5kZXB0aFRleHR1cmU9aS5kZXB0aFRleHR1cmUhPT12b2lkIDA/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5jb3B5KHQudmlld3BvcnQpLHRoaXMudGV4dHVyZT10LnRleHR1cmUuY2xvbmUoKSx0aGlzLnRleHR1cmUuaW1hZ2U9T2JqZWN0LmFzc2lnbih7fSx0LnRleHR1cmUuaW1hZ2UpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O05lLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0PSEwO3ZhciBHdT1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpO2xldCByPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCBzPTA7czxpO3MrKyl0aGlzLnRleHR1cmVbc109ci5jbG9uZSgpfXNldFNpemUodCxlLGk9MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aTtmb3IobGV0IHI9MCxzPXRoaXMudGV4dHVyZS5sZW5ndGg7cjxzO3IrKyl0aGlzLnRleHR1cmVbcl0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmRlcHRoPWk7dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxpPXQudGV4dHVyZS5sZW5ndGg7ZTxpO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fTtHdS5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDt2YXIgc289Y2xhc3MgZXh0ZW5kcyBOZXtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIodCxlLGkpLHRoaXMuc2FtcGxlcz00LHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHk9aS5pZ25vcmVEZXB0aCE9PXZvaWQgMD9pLmlnbm9yZURlcHRoOiEwLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPWkudXNlUmVuZGVyVG9UZXh0dXJlIT09dm9pZCAwP2kudXNlUmVuZGVyVG9UZXh0dXJlOiExLHRoaXMudXNlUmVuZGVyYnVmZmVyPXRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPT09ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07c28ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgRWU9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixzLG8sYSl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLHU9aVtyKzJdLGg9aVtyKzNdLGY9c1tvKzBdLGQ9c1tvKzFdLGc9c1tvKzJdLHg9c1tvKzNdO2lmKGE9PT0wKXt0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aDtyZXR1cm59aWYoYT09PTEpe3RbZSswXT1mLHRbZSsxXT1kLHRbZSsyXT1nLHRbZSszXT14O3JldHVybn1pZihoIT09eHx8bCE9PWZ8fGMhPT1kfHx1IT09Zyl7bGV0IHY9MS1hLG09bCpmK2MqZCt1KmcraCp4LHA9bT49MD8xOi0xLGI9MS1tKm07aWYoYj5OdW1iZXIuRVBTSUxPTil7bGV0IFM9TWF0aC5zcXJ0KGIpLEw9TWF0aC5hdGFuMihTLG0qcCk7dj1NYXRoLnNpbih2KkwpL1MsYT1NYXRoLnNpbihhKkwpL1N9bGV0IF89YSpwO2lmKGw9bCp2K2YqXyxjPWMqditkKl8sdT11KnYrZypfLGg9aCp2K3gqXyx2PT09MS1hKXtsZXQgUz0xL01hdGguc3FydChsKmwrYypjK3UqdStoKmgpO2wqPVMsYyo9Uyx1Kj1TLGgqPVN9fXRbZV09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aH1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscixzLG8pe2xldCBhPWlbcl0sbD1pW3IrMV0sYz1pW3IrMl0sdT1pW3IrM10saD1zW29dLGY9c1tvKzFdLGQ9c1tvKzJdLGc9c1tvKzNdO3JldHVybiB0W2VdPWEqZyt1KmgrbCpkLWMqZix0W2UrMV09bCpnK3UqZitjKmgtYSpkLHRbZSsyXT1jKmcrdSpkK2EqZi1sKmgsdFtlKzNdPXUqZy1hKmgtbCpmLWMqZCx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighKHQmJnQuaXNFdWxlcikpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxzPXQuX3osbz10Ll9vcmRlcixhPU1hdGguY29zLGw9TWF0aC5zaW4sYz1hKGkvMiksdT1hKHIvMiksaD1hKHMvMiksZj1sKGkvMiksZD1sKHIvMiksZz1sKHMvMik7c3dpdGNoKG8pe2Nhc2UiWFlaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitvKX1yZXR1cm4gZSE9PSExJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tQXhpc0FuZ2xlKHQsZSl7bGV0IGk9ZS8yLHI9TWF0aC5zaW4oaSk7cmV0dXJuIHRoaXMuX3g9dC54KnIsdGhpcy5feT10Lnkqcix0aGlzLl96PXQueipyLHRoaXMuX3c9TWF0aC5jb3MoaSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlPXQuZWxlbWVudHMsaT1lWzBdLHI9ZVs0XSxzPWVbOF0sbz1lWzFdLGE9ZVs1XSxsPWVbOV0sYz1lWzJdLHU9ZVs2XSxoPWVbMTBdLGY9aSthK2g7aWYoZj4wKXtsZXQgZD0uNS9NYXRoLnNxcnQoZisxKTt0aGlzLl93PS4yNS9kLHRoaXMuX3g9KHUtbCkqZCx0aGlzLl95PShzLWMpKmQsdGhpcy5fej0oby1yKSpkfWVsc2UgaWYoaT5hJiZpPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDEraS1hLWgpO3RoaXMuX3c9KHUtbCkvZCx0aGlzLl94PS4yNSpkLHRoaXMuX3k9KHIrbykvZCx0aGlzLl96PShzK2MpL2R9ZWxzZSBpZihhPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDErYS1pLWgpO3RoaXMuX3c9KHMtYykvZCx0aGlzLl94PShyK28pL2QsdGhpcy5feT0uMjUqZCx0aGlzLl96PShsK3UpL2R9ZWxzZXtsZXQgZD0yKk1hdGguc3FydCgxK2gtaS1hKTt0aGlzLl93PShvLXIpL2QsdGhpcy5feD0ocytjKS9kLHRoaXMuX3k9KGwrdSkvZCx0aGlzLl96PS4yNSpkfXJldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tVW5pdFZlY3RvcnModCxlKXtsZXQgaT10LmRvdChlKSsxO3JldHVybiBpPE51bWJlci5FUFNJTE9OPyhpPTAsTWF0aC5hYnModC54KT5NYXRoLmFicyh0LnopPyh0aGlzLl94PS10LnksdGhpcy5feT10LngsdGhpcy5fej0wLHRoaXMuX3c9aSk6KHRoaXMuX3g9MCx0aGlzLl95PS10LnosdGhpcy5fej10LnksdGhpcy5fdz1pKSk6KHRoaXMuX3g9dC55KmUuei10LnoqZS55LHRoaXMuX3k9dC56KmUueC10LngqZS56LHRoaXMuX3o9dC54KmUueS10LnkqZS54LHRoaXMuX3c9aSksdGhpcy5ub3JtYWxpemUoKX1hbmdsZVRvKHQpe3JldHVybiAyKk1hdGguYWNvcyhNYXRoLmFicyhJZSh0aGlzLmRvdCh0KSwtMSwxKSkpfXJvdGF0ZVRvd2FyZHModCxlKXtsZXQgaT10aGlzLmFuZ2xlVG8odCk7aWYoaT09PTApcmV0dXJuIHRoaXM7bGV0IHI9TWF0aC5taW4oMSxlL2kpO3JldHVybiB0aGlzLnNsZXJwKHQsciksdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgwLDAsMCwxKX1pbnZlcnQoKXtyZXR1cm4gdGhpcy5jb25qdWdhdGUoKX1jb25qdWdhdGUoKXtyZXR1cm4gdGhpcy5feCo9LTEsdGhpcy5feSo9LTEsdGhpcy5feio9LTEsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLl94KnQuX3grdGhpcy5feSp0Ll95K3RoaXMuX3oqdC5feit0aGlzLl93KnQuX3d9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93KX1ub3JtYWxpemUoKXtsZXQgdD10aGlzLmxlbmd0aCgpO3JldHVybiB0PT09MD8odGhpcy5feD0wLHRoaXMuX3k9MCx0aGlzLl96PTAsdGhpcy5fdz0xKToodD0xL3QsdGhpcy5feD10aGlzLl94KnQsdGhpcy5feT10aGlzLl95KnQsdGhpcy5fej10aGlzLl96KnQsdGhpcy5fdz10aGlzLl93KnQpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlRdWF0ZXJuaW9ucyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsZSkpOnRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCx0aGlzKX1tdWx0aXBseVF1YXRlcm5pb25zKHQsZSl7bGV0IGk9dC5feCxyPXQuX3kscz10Ll96LG89dC5fdyxhPWUuX3gsbD1lLl95LGM9ZS5feix1PWUuX3c7cmV0dXJuIHRoaXMuX3g9aSp1K28qYStyKmMtcypsLHRoaXMuX3k9cip1K28qbCtzKmEtaSpjLHRoaXMuX3o9cyp1K28qYytpKmwtciphLHRoaXMuX3c9byp1LWkqYS1yKmwtcypjLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwKHQsZSl7aWYoZT09PTApcmV0dXJuIHRoaXM7aWYoZT09PTEpcmV0dXJuIHRoaXMuY29weSh0KTtsZXQgaT10aGlzLl94LHI9dGhpcy5feSxzPXRoaXMuX3osbz10aGlzLl93LGE9byp0Ll93K2kqdC5feCtyKnQuX3krcyp0Ll96O2lmKGE8MD8odGhpcy5fdz0tdC5fdyx0aGlzLl94PS10Ll94LHRoaXMuX3k9LXQuX3ksdGhpcy5fej0tdC5feixhPS1hKTp0aGlzLmNvcHkodCksYT49MSlyZXR1cm4gdGhpcy5fdz1vLHRoaXMuX3g9aSx0aGlzLl95PXIsdGhpcy5fej1zLHRoaXM7bGV0IGw9MS1hKmE7aWYobDw9TnVtYmVyLkVQU0lMT04pe2xldCBkPTEtZTtyZXR1cm4gdGhpcy5fdz1kKm8rZSp0aGlzLl93LHRoaXMuX3g9ZCppK2UqdGhpcy5feCx0aGlzLl95PWQqcitlKnRoaXMuX3ksdGhpcy5fej1kKnMrZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bGV0IGM9TWF0aC5zcXJ0KGwpLHU9TWF0aC5hdGFuMihjLGEpLGg9TWF0aC5zaW4oKDEtZSkqdSkvYyxmPU1hdGguc2luKGUqdSkvYztyZXR1cm4gdGhpcy5fdz1vKmgrdGhpcy5fdypmLHRoaXMuX3g9aSpoK3RoaXMuX3gqZix0aGlzLl95PXIqaCt0aGlzLl95KmYsdGhpcy5fej1zKmgrdGhpcy5feipmLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwUXVhdGVybmlvbnModCxlLGkpe3JldHVybiB0aGlzLmNvcHkodCkuc2xlcnAoZSxpKX1yYW5kb20oKXtsZXQgdD1NYXRoLnJhbmRvbSgpLGU9TWF0aC5zcXJ0KDEtdCksaT1NYXRoLnNxcnQodCkscj0yKk1hdGguUEkqTWF0aC5yYW5kb20oKSxzPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpO3JldHVybiB0aGlzLnNldChlKk1hdGguY29zKHIpLGkqTWF0aC5zaW4ocyksaSpNYXRoLmNvcyhzKSxlKk1hdGguc2luKHIpKX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX3c9PT10aGlzLl93fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMuX3g9dFtlXSx0aGlzLl95PXRbZSsxXSx0aGlzLl96PXRbZSsyXSx0aGlzLl93PXRbZSszXSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl93LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLl94PXQuZ2V0WChlKSx0aGlzLl95PXQuZ2V0WShlKSx0aGlzLl96PXQuZ2V0WihlKSx0aGlzLl93PXQuZ2V0VyhlKSx0aGlzfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTtFZS5wcm90b3R5cGUuaXNRdWF0ZXJuaW9uPSEwO3ZhciBUPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aX1zZXQodCxlLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyh0LGUpKToodGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcyl9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIiksdGhpcy5hcHBseVF1YXRlcm5pb24ocmcuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihyZy5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbM10qaStzWzZdKnIsdGhpcy55PXNbMV0qZStzWzRdKmkrc1s3XSpyLHRoaXMuej1zWzJdKmUrc1s1XSppK3NbOF0qcix0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LHM9dC5lbGVtZW50cyxvPTEvKHNbM10qZStzWzddKmkrc1sxMV0qcitzWzE1XSk7cmV0dXJuIHRoaXMueD0oc1swXSplK3NbNF0qaStzWzhdKnIrc1sxMl0pKm8sdGhpcy55PShzWzFdKmUrc1s1XSppK3NbOV0qcitzWzEzXSkqbyx0aGlzLno9KHNbMl0qZStzWzZdKmkrc1sxMF0qcitzWzE0XSkqbyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10Lngsbz10LnksYT10LnosbD10LncsYz1sKmUrbypyLWEqaSx1PWwqaSthKmUtcypyLGg9bCpyK3MqaS1vKmUsZj0tcyplLW8qaS1hKnI7cmV0dXJuIHRoaXMueD1jKmwrZiotcyt1Ki1hLWgqLW8sdGhpcy55PXUqbCtmKi1vK2gqLXMtYyotYSx0aGlzLno9aCpsK2YqLWErYyotby11Ki1zLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbNF0qaStzWzhdKnIsdGhpcy55PXNbMV0qZStzWzVdKmkrc1s5XSpyLHRoaXMuej1zWzJdKmUrc1s2XSppK3NbMTBdKnIsdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPWUueCxhPWUueSxsPWUuejtyZXR1cm4gdGhpcy54PXIqbC1zKmEsdGhpcy55PXMqby1pKmwsdGhpcy56PWkqYS1yKm8sdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IGU9dC5sZW5ndGhTcSgpO2lmKGU9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IGk9dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKGkpfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBsdS5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihsdSl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIobHUuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoZT09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoSWUoaSwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHI9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStyKnJ9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2xldCByPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1yKk1hdGguc2luKGkpLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1yKk1hdGguY29zKGkpLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PWksdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxyPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cix0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxlKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsZSozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiBpIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLGU9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsaT1NYXRoLnNxcnQoMS1jZih0LDIpKTtyZXR1cm4gdGhpcy54PWkqTWF0aC5jb3MoZSksdGhpcy55PWkqTWF0aC5zaW4oZSksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O1QucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgbHU9bmV3IFQscmc9bmV3IEVlLEdlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQoMS8wLDEvMCwxLzApLGU9bmV3IFQoLTEvMCwtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10Lmxlbmd0aDtsPGM7bCs9Myl7bGV0IHU9dFtsXSxoPXRbbCsxXSxmPXRbbCsyXTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10LmNvdW50O2w8YztsKyspe2xldCB1PXQuZ2V0WChsKSxoPXQuZ2V0WShsKSxmPXQuZ2V0WihsKTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtsZXQgaT1JaS5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIoaSksdGhpcy5tYXguY29weSh0KS5hZGQoaSksdGhpc31zZXRGcm9tT2JqZWN0KHQsZT0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LGUpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYoaSE9PXZvaWQgMClpZihlJiZpLmF0dHJpYnV0ZXMhPW51bGwmJmkuYXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMCl7bGV0IHM9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgbz0wLGE9cy5jb3VudDtvPGE7bysrKUlpLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxvKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KElpKX1lbHNlIGkuYm91bmRpbmdCb3g9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLGN1LmNvcHkoaS5ib3VuZGluZ0JveCksY3UuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oY3UpO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltzXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLElpKSxJaS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoa3MpLF9hLnN1YlZlY3RvcnModGhpcy5tYXgsa3MpLG1yLnN1YlZlY3RvcnModC5hLGtzKSxnci5zdWJWZWN0b3JzKHQuYixrcykseHIuc3ViVmVjdG9ycyh0LmMsa3MpLHFuLnN1YlZlY3RvcnMoZ3IsbXIpLFhuLnN1YlZlY3RvcnMoeHIsZ3IpLE5pLnN1YlZlY3RvcnMobXIseHIpO2xldCBlPVswLC1xbi56LHFuLnksMCwtWG4ueixYbi55LDAsLU5pLnosTmkueSxxbi56LDAsLXFuLngsWG4ueiwwLC1Ybi54LE5pLnosMCwtTmkueCwtcW4ueSxxbi54LDAsLVhuLnksWG4ueCwwLC1OaS55LE5pLngsMF07cmV0dXJuIXV1KGUsbXIsZ3IseHIsX2EpfHwoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCF1dShlLG1yLGdyLHhyLF9hKSk/ITE6KHdhLmNyb3NzVmVjdG9ycyhxbixYbiksZT1bd2EueCx3YS55LHdhLnpdLHV1KGUsbXIsZ3IseHIsX2EpKX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBJaS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz10aGlzLmdldFNpemUoSWkpLmxlbmd0aCgpKi41LHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzOihBblswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBblsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoQW4pLHRoaXMpfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0dlLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIEFuPVtuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVF0sSWk9bmV3IFQsY3U9bmV3IEdlLG1yPW5ldyBULGdyPW5ldyBULHhyPW5ldyBULHFuPW5ldyBULFhuPW5ldyBULE5pPW5ldyBULGtzPW5ldyBULF9hPW5ldyBULHdhPW5ldyBULEZpPW5ldyBUO2Z1bmN0aW9uIHV1KG4sdCxlLGkscil7Zm9yKGxldCBzPTAsbz1uLmxlbmd0aC0zO3M8PW87cys9Myl7RmkuZnJvbUFycmF5KG4scyk7bGV0IGE9ci54Kk1hdGguYWJzKEZpLngpK3IueSpNYXRoLmFicyhGaS55KStyLnoqTWF0aC5hYnMoRmkueiksbD10LmRvdChGaSksYz1lLmRvdChGaSksdT1pLmRvdChGaSk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KGwsYyx1KSxNYXRoLm1pbihsLGMsdSkpPmEpcmV0dXJuITF9cmV0dXJuITB9dmFyIHJNPW5ldyBHZSxzZz1uZXcgVCxNYT1uZXcgVCxodT1uZXcgVCxzaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9LTEpe3RoaXMuY2VudGVyPXQsdGhpcy5yYWRpdXM9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0KSx0aGlzLnJhZGl1cz1lLHRoaXN9c2V0RnJvbVBvaW50cyh0LGUpe2xldCBpPXRoaXMuY2VudGVyO2UhPT12b2lkIDA/aS5jb3B5KGUpOnJNLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBzPTAsbz10Lmxlbmd0aDtzPG87cysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbc10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7aHUuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1odS5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPShpLXRoaXMucmFkaXVzKSouNTt0aGlzLmNlbnRlci5hZGQoaHUubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik9PT0hMD9NYS5zZXQoMCwwLDEpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKTpNYS5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KHNnLmNvcHkodC5jZW50ZXIpLmFkZChNYSkpLHRoaXMuZXhwYW5kQnlQb2ludChzZy5jb3B5KHQuY2VudGVyKS5zdWIoTWEpKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxDbj1uZXcgVCxmdT1uZXcgVCxiYT1uZXcgVCxZbj1uZXcgVCxkdT1uZXcgVCxTYT1uZXcgVCxwdT1uZXcgVCxvaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsQ24pKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtlLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbik7bGV0IGk9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBpPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7bGV0IGU9Q24uc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KENuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGUpLmFkZCh0aGlzLm9yaWdpbiksQ24uZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLGkscil7ZnUuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLGJhLmNvcHkoZSkuc3ViKHQpLm5vcm1hbGl6ZSgpLFluLmNvcHkodGhpcy5vcmlnaW4pLnN1YihmdSk7bGV0IHM9dC5kaXN0YW5jZVRvKGUpKi41LG89LXRoaXMuZGlyZWN0aW9uLmRvdChiYSksYT1Zbi5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LVluLmRvdChiYSksYz1Zbi5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1vKm8pLGgsZixkLGc7aWYodT4wKWlmKGg9bypsLWEsZj1vKmEtbCxnPXMqdSxoPj0wKWlmKGY+PS1nKWlmKGY8PWcpe2xldCB4PTEvdTtoKj14LGYqPXgsZD1oKihoK28qZisyKmEpK2YqKG8qaCtmKzIqbCkrY31lbHNlIGY9cyxoPU1hdGgubWF4KDAsLShvKmYrYSkpLGQ9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LXMsaD1NYXRoLm1heCgwLC0obypmK2EpKSxkPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZz8oaD1NYXRoLm1heCgwLC0oLW8qcythKSksZj1oPjA/LXM6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk6Zjw9Zz8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShvKnMrYSkpLGY9aD4wP3M6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPW8+MD8tczpzLGg9TWF0aC5tYXgoMCwtKG8qZithKSksZD0taCpoK2YqKGYrMipsKStjO3JldHVybiBpJiZpLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksciYmci5jb3B5KGJhKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoZnUpLGR9aW50ZXJzZWN0U3BoZXJlKHQsZSl7Q24uc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLm9yaWdpbik7bGV0IGk9Q24uZG90KHRoaXMuZGlyZWN0aW9uKSxyPUNuLmRvdChDbiktaSppLHM9dC5yYWRpdXMqdC5yYWRpdXM7aWYocj5zKXJldHVybiBudWxsO2xldCBvPU1hdGguc3FydChzLXIpLGE9aS1vLGw9aStvO3JldHVybiBhPDAmJmw8MD9udWxsOmE8MD90aGlzLmF0KGwsZSk6dGhpcy5hdChhLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7bGV0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZihlPT09MClyZXR1cm4gdC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPT09MD8wOm51bGw7bGV0IGk9LSh0aGlzLm9yaWdpbi5kb3QodC5ub3JtYWwpK3QuY29uc3RhbnQpL2U7cmV0dXJuIGk+PTA/aTpudWxsfWludGVyc2VjdFBsYW5lKHQsZSl7bGV0IGk9dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIGk9PT1udWxsP251bGw6dGhpcy5hdChpLGUpfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIGU9PT0wfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgaSxyLHMsbyxhLGwsYz0xL3RoaXMuZGlyZWN0aW9uLngsdT0xL3RoaXMuZGlyZWN0aW9uLnksaD0xL3RoaXMuZGlyZWN0aW9uLnosZj10aGlzLm9yaWdpbjtyZXR1cm4gYz49MD8oaT0odC5taW4ueC1mLngpKmMscj0odC5tYXgueC1mLngpKmMpOihpPSh0Lm1heC54LWYueCkqYyxyPSh0Lm1pbi54LWYueCkqYyksdT49MD8ocz0odC5taW4ueS1mLnkpKnUsbz0odC5tYXgueS1mLnkpKnUpOihzPSh0Lm1heC55LWYueSkqdSxvPSh0Lm1pbi55LWYueSkqdSksaT5vfHxzPnJ8fCgocz5pfHxpIT09aSkmJihpPXMpLChvPHJ8fHIhPT1yKSYmKHI9byksaD49MD8oYT0odC5taW4uei1mLnopKmgsbD0odC5tYXguei1mLnopKmgpOihhPSh0Lm1heC56LWYueikqaCxsPSh0Lm1pbi56LWYueikqaCksaT5sfHxhPnIpfHwoKGE+aXx8aSE9PWkpJiYoaT1hKSwobDxyfHxyIT09cikmJihyPWwpLHI8MCk/bnVsbDp0aGlzLmF0KGk+PTA/aTpyLGUpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHRoaXMuaW50ZXJzZWN0Qm94KHQsQ24pIT09bnVsbH1pbnRlcnNlY3RUcmlhbmdsZSh0LGUsaSxyLHMpe2R1LnN1YlZlY3RvcnMoZSx0KSxTYS5zdWJWZWN0b3JzKGksdCkscHUuY3Jvc3NWZWN0b3JzKGR1LFNhKTtsZXQgbz10aGlzLmRpcmVjdGlvbi5kb3QocHUpLGE7aWYobz4wKXtpZihyKXJldHVybiBudWxsO2E9MX1lbHNlIGlmKG88MClhPS0xLG89LW87ZWxzZSByZXR1cm4gbnVsbDtZbi5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPWEqdGhpcy5kaXJlY3Rpb24uZG90KFNhLmNyb3NzVmVjdG9ycyhZbixTYSkpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1hKnRoaXMuZGlyZWN0aW9uLmRvdChkdS5jcm9zcyhZbikpO2lmKGM8MHx8bCtjPm8pcmV0dXJuIG51bGw7bGV0IHU9LWEqWW4uZG90KHB1KTtyZXR1cm4gdTwwP251bGw6dGhpcy5hdCh1L28scyl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LHd0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2KXtsZXQgbT10aGlzLmVsZW1lbnRzO3JldHVybiBtWzBdPXQsbVs0XT1lLG1bOF09aSxtWzEyXT1yLG1bMV09cyxtWzVdPW8sbVs5XT1hLG1bMTNdPWwsbVsyXT1jLG1bNl09dSxtWzEwXT1oLG1bMTRdPWYsbVszXT1kLG1bN109ZyxtWzExXT14LG1bMTVdPXYsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB3dCgpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX1jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSxlWzldPWlbOV0sZVsxMF09aVsxMF0sZVsxMV09aVsxMV0sZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sZVsxNV09aVsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzNdLGVbNl0sMCxlWzFdLGVbNF0sZVs3XSwwLGVbMl0sZVs1XSxlWzhdLDAsMCwwLDAsMSksdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywyKSx0aGlzfW1ha2VCYXNpcyh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQueCxlLngsaS54LDAsdC55LGUueSxpLnksMCx0LnosZS56LGkueiwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdFJvdGF0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzLHI9MS95ci5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCkscz0xL3lyLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxvPTEveXIuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPWlbMF0qcixlWzFdPWlbMV0qcixlWzJdPWlbMl0qcixlWzNdPTAsZVs0XT1pWzRdKnMsZVs1XT1pWzVdKnMsZVs2XT1pWzZdKnMsZVs3XT0wLGVbOF09aVs4XSpvLGVbOV09aVs5XSpvLGVbMTBdPWlbMTBdKm8sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LHM9dC56LG89TWF0aC5jb3MoaSksYT1NYXRoLnNpbihpKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4ociksdT1NYXRoLmNvcyhzKSxoPU1hdGguc2luKHMpO2lmKHQub3JkZXI9PT0iWFlaIil7bGV0IGY9byp1LGQ9bypoLGc9YSp1LHg9YSpoO2VbMF09bCp1LGVbNF09LWwqaCxlWzhdPWMsZVsxXT1kK2cqYyxlWzVdPWYteCpjLGVbOV09LWEqbCxlWzJdPXgtZipjLGVbNl09ZytkKmMsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJZWFoiKXtsZXQgZj1sKnUsZD1sKmgsZz1jKnUseD1jKmg7ZVswXT1mK3gqYSxlWzRdPWcqYS1kLGVbOF09bypjLGVbMV09bypoLGVbNV09byp1LGVbOV09LWEsZVsyXT1kKmEtZyxlWzZdPXgrZiphLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWlhZIil7bGV0IGY9bCp1LGQ9bCpoLGc9Yyp1LHg9YypoO2VbMF09Zi14KmEsZVs0XT0tbypoLGVbOF09ZytkKmEsZVsxXT1kK2cqYSxlWzVdPW8qdSxlWzldPXgtZiphLGVbMl09LW8qYyxlWzZdPWEsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJaWVgiKXtsZXQgZj1vKnUsZD1vKmgsZz1hKnUseD1hKmg7ZVswXT1sKnUsZVs0XT1nKmMtZCxlWzhdPWYqYyt4LGVbMV09bCpoLGVbNV09eCpjK2YsZVs5XT1kKmMtZyxlWzJdPS1jLGVbNl09YSpsLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWVpYIil7bGV0IGY9bypsLGQ9bypjLGc9YSpsLHg9YSpjO2VbMF09bCp1LGVbNF09eC1mKmgsZVs4XT1nKmgrZCxlWzFdPWgsZVs1XT1vKnUsZVs5XT0tYSp1LGVbMl09LWMqdSxlWzZdPWQqaCtnLGVbMTBdPWYteCpofWVsc2UgaWYodC5vcmRlcj09PSJYWlkiKXtsZXQgZj1vKmwsZD1vKmMsZz1hKmwseD1hKmM7ZVswXT1sKnUsZVs0XT0taCxlWzhdPWMqdSxlWzFdPWYqaCt4LGVbNV09byp1LGVbOV09ZCpoLWcsZVsyXT1nKmgtZCxlWzZdPWEqdSxlWzEwXT14KmgrZn1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKHNNLHQsb00pfWxvb2tBdCh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4ga2Uuc3ViVmVjdG9ycyh0LGUpLGtlLmxlbmd0aFNxKCk9PT0wJiYoa2Uuej0xKSxrZS5ub3JtYWxpemUoKSxabi5jcm9zc1ZlY3RvcnMoaSxrZSksWm4ubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhpLnopPT09MT9rZS54Kz0xZS00OmtlLnorPTFlLTQsa2Uubm9ybWFsaXplKCksWm4uY3Jvc3NWZWN0b3JzKGksa2UpKSxabi5ub3JtYWxpemUoKSxFYS5jcm9zc1ZlY3RvcnMoa2UsWm4pLHJbMF09Wm4ueCxyWzRdPUVhLngscls4XT1rZS54LHJbMV09Wm4ueSxyWzVdPUVhLnkscls5XT1rZS55LHJbMl09Wm4ueixyWzZdPUVhLnosclsxMF09a2Uueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7bGV0IGk9dC5lbGVtZW50cyxyPWUuZWxlbWVudHMscz10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbNF0sbD1pWzhdLGM9aVsxMl0sdT1pWzFdLGg9aVs1XSxmPWlbOV0sZD1pWzEzXSxnPWlbMl0seD1pWzZdLHY9aVsxMF0sbT1pWzE0XSxwPWlbM10sYj1pWzddLF89aVsxMV0sUz1pWzE1XSxMPXJbMF0sQT1yWzRdLEg9cls4XSx0dD1yWzEyXSxYPXJbMV0seT1yWzVdLFI9cls5XSxEPXJbMTNdLEY9clsyXSx6PXJbNl0sTj1yWzEwXSxWPXJbMTRdLFE9clszXSxhdD1yWzddLEc9clsxMV0sJD1yWzE1XTtyZXR1cm4gc1swXT1vKkwrYSpYK2wqRitjKlEsc1s0XT1vKkErYSp5K2wqeitjKmF0LHNbOF09bypIK2EqUitsKk4rYypHLHNbMTJdPW8qdHQrYSpEK2wqVitjKiQsc1sxXT11KkwraCpYK2YqRitkKlEsc1s1XT11KkEraCp5K2YqeitkKmF0LHNbOV09dSpIK2gqUitmKk4rZCpHLHNbMTNdPXUqdHQraCpEK2YqVitkKiQsc1syXT1nKkwreCpYK3YqRittKlEsc1s2XT1nKkEreCp5K3YqeittKmF0LHNbMTBdPWcqSCt4KlIrdipOK20qRyxzWzE0XT1nKnR0K3gqRCt2KlYrbSokLHNbM109cCpMK2IqWCtfKkYrUypRLHNbN109cCpBK2IqeStfKnorUyphdCxzWzExXT1wKkgrYipSK18qTitTKkcsc1sxNV09cCp0dCtiKkQrXypWK1MqJCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVs0XSo9dCxlWzhdKj10LGVbMTJdKj10LGVbMV0qPXQsZVs1XSo9dCxlWzldKj10LGVbMTNdKj10LGVbMl0qPXQsZVs2XSo9dCxlWzEwXSo9dCxlWzE0XSo9dCxlWzNdKj10LGVbN10qPXQsZVsxMV0qPXQsZVsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFs0XSxyPXRbOF0scz10WzEyXSxvPXRbMV0sYT10WzVdLGw9dFs5XSxjPXRbMTNdLHU9dFsyXSxoPXRbNl0sZj10WzEwXSxkPXRbMTRdLGc9dFszXSx4PXRbN10sdj10WzExXSxtPXRbMTVdO3JldHVybiBnKigrcypsKmgtcipjKmgtcyphKmYraSpjKmYrciphKmQtaSpsKmQpK3gqKCtlKmwqZC1lKmMqZitzKm8qZi1yKm8qZCtyKmMqdS1zKmwqdSkrdiooK2UqYypoLWUqYSpkLXMqbypoK2kqbypkK3MqYSp1LWkqYyp1KSttKigtciphKnUtZSpsKmgrZSphKmYrcipvKmgtaSpvKmYraSpsKnUpfXRyYW5zcG9zZSgpe2xldCB0PXRoaXMuZWxlbWVudHMsZTtyZXR1cm4gZT10WzFdLHRbMV09dFs0XSx0WzRdPWUsZT10WzJdLHRbMl09dFs4XSx0WzhdPWUsZT10WzZdLHRbNl09dFs5XSx0WzldPWUsZT10WzNdLHRbM109dFsxMl0sdFsxMl09ZSxlPXRbN10sdFs3XT10WzEzXSx0WzEzXT1lLGU9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09ZSx0aGlzfXNldFBvc2l0aW9uKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0LmlzVmVjdG9yMz8oclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnopOihyWzEyXT10LHJbMTNdPWUsclsxNF09aSksdGhpc31pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLHM9dFszXSxvPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dFs5XSxmPXRbMTBdLGQ9dFsxMV0sZz10WzEyXSx4PXRbMTNdLHY9dFsxNF0sbT10WzE1XSxwPWgqdipjLXgqZipjK3gqbCpkLWEqdipkLWgqbCptK2EqZiptLGI9ZypmKmMtdSp2KmMtZypsKmQrbyp2KmQrdSpsKm0tbypmKm0sXz11KngqYy1nKmgqYytnKmEqZC1vKngqZC11KmEqbStvKmgqbSxTPWcqaCpsLXUqeCpsLWcqYSpmK28qeCpmK3UqYSp2LW8qaCp2LEw9ZSpwK2kqYityKl8rcypTO2lmKEw9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgQT0xL0w7cmV0dXJuIHRbMF09cCpBLHRbMV09KHgqZipzLWgqdipzLXgqcipkK2kqdipkK2gqciptLWkqZiptKSpBLHRbMl09KGEqdipzLXgqbCpzK3gqcipjLWkqdipjLWEqciptK2kqbCptKSpBLHRbM109KGgqbCpzLWEqZipzLWgqcipjK2kqZipjK2EqcipkLWkqbCpkKSpBLHRbNF09YipBLHRbNV09KHUqdipzLWcqZipzK2cqcipkLWUqdipkLXUqciptK2UqZiptKSpBLHRbNl09KGcqbCpzLW8qdipzLWcqcipjK2UqdipjK28qciptLWUqbCptKSpBLHRbN109KG8qZipzLXUqbCpzK3UqcipjLWUqZipjLW8qcipkK2UqbCpkKSpBLHRbOF09XypBLHRbOV09KGcqaCpzLXUqeCpzLWcqaSpkK2UqeCpkK3UqaSptLWUqaCptKSpBLHRbMTBdPShvKngqcy1nKmEqcytnKmkqYy1lKngqYy1vKmkqbStlKmEqbSkqQSx0WzExXT0odSphKnMtbypoKnMtdSppKmMrZSpoKmMrbyppKmQtZSphKmQpKkEsdFsxMl09UypBLHRbMTNdPSh1Kngqci1nKmgqcitnKmkqZi1lKngqZi11KmkqditlKmgqdikqQSx0WzE0XT0oZyphKnItbyp4KnItZyppKmwrZSp4KmwrbyppKnYtZSphKnYpKkEsdFsxNV09KG8qaCpyLXUqYSpyK3UqaSpsLWUqaCpsLW8qaSpmK2UqYSpmKSpBLHRoaXN9c2NhbGUodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQueCxyPXQueSxzPXQuejtyZXR1cm4gZVswXSo9aSxlWzRdKj1yLGVbOF0qPXMsZVsxXSo9aSxlWzVdKj1yLGVbOV0qPXMsZVsyXSo9aSxlWzZdKj1yLGVbMTBdKj1zLGVbM10qPWksZVs3XSo9cixlWzExXSo9cyx0aGlzfWdldE1heFNjYWxlT25BeGlzKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLGk9dFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0scj10WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgoZSxpLHIpKX1tYWtlVHJhbnNsYXRpb24odCxlLGkpe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLGUsMCwwLDEsaSwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLGUsLWksMCwwLGksZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLDAsaSwwLDAsMSwwLDAsLWksMCxlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25aKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsLWksMCwwLGksZSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxlKXtsZXQgaT1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpLHM9MS1pLG89dC54LGE9dC55LGw9dC56LGM9cypvLHU9cyphO3JldHVybiB0aGlzLnNldChjKm8raSxjKmEtcipsLGMqbCtyKmEsMCxjKmErcipsLHUqYStpLHUqbC1yKm8sMCxjKmwtciphLHUqbCtyKm8scypsKmwraSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLGUsMCwwLDAsMCxpLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxlLGkscixzLG8pe3JldHVybiB0aGlzLnNldCgxLGkscywwLHQsMSxvLDAsZSxyLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz1lLl94LG89ZS5feSxhPWUuX3osbD1lLl93LGM9cytzLHU9bytvLGg9YSthLGY9cypjLGQ9cyp1LGc9cypoLHg9byp1LHY9bypoLG09YSpoLHA9bCpjLGI9bCp1LF89bCpoLFM9aS54LEw9aS55LEE9aS56O3JldHVybiByWzBdPSgxLSh4K20pKSpTLHJbMV09KGQrXykqUyxyWzJdPShnLWIpKlMsclszXT0wLHJbNF09KGQtXykqTCxyWzVdPSgxLShmK20pKSpMLHJbNl09KHYrcCkqTCxyWzddPTAscls4XT0oZytiKSpBLHJbOV09KHYtcCkqQSxyWzEwXT0oMS0oZit4KSkqQSxyWzExXT0wLHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56LHJbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz15ci5zZXQoclswXSxyWzFdLHJbMl0pLmxlbmd0aCgpLG89eXIuc2V0KHJbNF0scls1XSxyWzZdKS5sZW5ndGgoKSxhPXlyLnNldChyWzhdLHJbOV0sclsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYocz0tcyksdC54PXJbMTJdLHQueT1yWzEzXSx0Lno9clsxNF0sS2UuY29weSh0aGlzKTtsZXQgYz0xL3MsdT0xL28saD0xL2E7cmV0dXJuIEtlLmVsZW1lbnRzWzBdKj1jLEtlLmVsZW1lbnRzWzFdKj1jLEtlLmVsZW1lbnRzWzJdKj1jLEtlLmVsZW1lbnRzWzRdKj11LEtlLmVsZW1lbnRzWzVdKj11LEtlLmVsZW1lbnRzWzZdKj11LEtlLmVsZW1lbnRzWzhdKj1oLEtlLmVsZW1lbnRzWzldKj1oLEtlLmVsZW1lbnRzWzEwXSo9aCxlLnNldEZyb21Sb3RhdGlvbk1hdHJpeChLZSksaS54PXMsaS55PW8saS56PWEsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLGkscixzLG8pe289PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBhPXRoaXMuZWxlbWVudHMsbD0yKnMvKGUtdCksYz0yKnMvKGktciksdT0oZSt0KS8oZS10KSxoPShpK3IpLyhpLXIpLGY9LShvK3MpLyhvLXMpLGQ9LTIqbypzLyhvLXMpO3JldHVybiBhWzBdPWwsYVs0XT0wLGFbOF09dSxhWzEyXT0wLGFbMV09MCxhWzVdPWMsYVs5XT1oLGFbMTNdPTAsYVsyXT0wLGFbNl09MCxhWzEwXT1mLGFbMTRdPWQsYVszXT0wLGFbN109MCxhWzExXT0tMSxhWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5lbGVtZW50cyxsPTEvKGUtdCksYz0xLyhpLXIpLHU9MS8oby1zKSxoPShlK3QpKmwsZj0oaStyKSpjLGQ9KG8rcykqdTtyZXR1cm4gYVswXT0yKmwsYVs0XT0wLGFbOF09MCxhWzEyXT0taCxhWzFdPTAsYVs1XT0yKmMsYVs5XT0wLGFbMTNdPS1mLGFbMl09MCxhWzZdPTAsYVsxMF09LTIqdSxhWzE0XT0tZCxhWzNdPTAsYVs3XT0wLGFbMTFdPTAsYVsxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDE2O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8MTY7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0W2UrOV09aVs5XSx0W2UrMTBdPWlbMTBdLHRbZSsxMV09aVsxMV0sdFtlKzEyXT1pWzEyXSx0W2UrMTNdPWlbMTNdLHRbZSsxNF09aVsxNF0sdFtlKzE1XT1pWzE1XSx0fX07d3QucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgeXI9bmV3IFQsS2U9bmV3IHd0LHNNPW5ldyBUKDAsMCwwKSxvTT1uZXcgVCgxLDEsMSksWm49bmV3IFQsRWE9bmV3IFQsa2U9bmV3IFQsb2c9bmV3IHd0LGFnPW5ldyBFZSxhaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPWFpLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cn1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZT10aGlzLl9vcmRlcixpPSEwKXtsZXQgcj10LmVsZW1lbnRzLHM9clswXSxvPXJbNF0sYT1yWzhdLGw9clsxXSxjPXJbNV0sdT1yWzldLGg9clsyXSxmPXJbNl0sZD1yWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKEllKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsZCksdGhpcy5fej1NYXRoLmF0YW4yKC1vLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLUllKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoYSxkKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxzKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihJZShmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLGQpLHRoaXMuX3o9TWF0aC5hdGFuMigtbyxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxzKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1JZShoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYsZCksdGhpcy5fej1NYXRoLmF0YW4yKGwscykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1vLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oSWUobCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgscykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGEsZCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtSWUobywtMSwxKSksTWF0aC5hYnMobyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihhLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKC11LGQpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSxpPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4gb2cubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgob2csZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBhZy5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhZyx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx0WzNdIT09dm9pZCAwJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyBUKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07YWkucHJvdG90eXBlLmlzRXVsZXI9ITA7YWkuRGVmYXVsdE9yZGVyPSJYWVoiO2FpLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIGlsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4odGhpcy5tYXNrJnQubWFzaykhPT0wfWlzRW5hYmxlZCh0KXtyZXR1cm4odGhpcy5tYXNrJigxPDx0fDApKSE9PTB9fSxhTT0wLGxnPW5ldyBULHZyPW5ldyBFZSxSbj1uZXcgd3QsVGE9bmV3IFQsSHM9bmV3IFQsbE09bmV3IFQsY009bmV3IEVlLGNnPW5ldyBUKDEsMCwwKSx1Zz1uZXcgVCgwLDEsMCksaGc9bmV3IFQoMCwwLDEpLHVNPXt0eXBlOiJhZGRlZCJ9LGZnPXt0eXBlOiJyZW1vdmVkIn0sa3Q9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6YU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1rdC5EZWZhdWx0VXAuY2xvbmUoKTtsZXQgdD1uZXcgVCxlPW5ldyBhaSxpPW5ldyBFZSxyPW5ldyBUKDEsMSwxKTtmdW5jdGlvbiBzKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9ZnVuY3Rpb24gbygpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfWUuX29uQ2hhbmdlKHMpLGkuX29uQ2hhbmdlKG8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZX0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnJ9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IHd0fSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBkZX19KSx0aGlzLm1hdHJpeD1uZXcgd3QsdGhpcy5tYXRyaXhXb3JsZD1uZXcgd3QsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPWt0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgaWwsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVJlbmRlcigpe31vbkFmdGVyUmVuZGVyKCl7fWFwcGx5TWF0cml4NCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXgucHJlbXVsdGlwbHkodCksdGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKHQsZSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxlKX1zZXRSb3RhdGlvbkZyb21FdWxlcih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHQsITApfXNldFJvdGF0aW9uRnJvbU1hdHJpeCh0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfXNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9cm90YXRlT25BeGlzKHQsZSl7cmV0dXJuIHZyLnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkodnIpLHRoaXN9cm90YXRlT25Xb3JsZEF4aXModCxlKXtyZXR1cm4gdnIuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh2ciksdGhpc31yb3RhdGVYKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhjZyx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh1Zyx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhoZyx0KX10cmFuc2xhdGVPbkF4aXModCxlKXtyZXR1cm4gbGcuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZChsZy5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhjZyx0KX10cmFuc2xhdGVZKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1Zyx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhoZyx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoUm4uY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9UYS5jb3B5KHQpOlRhLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksSHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9Sbi5sb29rQXQoSHMsVGEsdGhpcy51cCk6Um4ubG9va0F0KFRhLEhzLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoUm4pLHImJihSbi5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCksdnIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJuKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodnIuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KHQucGFyZW50IT09bnVsbCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudCh1TSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2ldKTtyZXR1cm4gdGhpc31sZXQgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuIGUhPT0tMSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoZmcpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IGU9dGhpcy5jaGlsZHJlblt0XTtlLnBhcmVudD1udWxsLGUuZGlzcGF0Y2hFdmVudChmZyl9cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPTAsdGhpc31hdHRhY2godCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdC5wYXJlbnQhPT1udWxsJiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQoUm4pLHRoaXMuYWRkKHQpLHQudXBkYXRlV29ybGRNYXRyaXgoITEsITApLHRoaXN9Z2V0T2JqZWN0QnlJZCh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsdCl9Z2V0T2JqZWN0QnlOYW1lKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoIm5hbWUiLHQpfWdldE9iamVjdEJ5UHJvcGVydHkodCxlKXtpZih0aGlzW3RdPT09ZSlyZXR1cm4gdGhpcztmb3IobGV0IGk9MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k8cjtpKyspe2xldCBvPXRoaXMuY2hpbGRyZW5baV0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG99fWdldFdvcmxkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfWdldFdvcmxkUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoSHMsdCxsTSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShIcyxjTSx0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KGVbOF0sZVs5XSxlWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCBlPXRoaXMucGFyZW50O2UhPT1udWxsJiYodChlKSxlLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7bGV0IGk9dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZpIT09bnVsbCYmaS51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksZT09PSEwKXtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgcz0wLG89ci5sZW5ndGg7czxvO3MrKylyW3NdLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCBlPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixpPXt9O2UmJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxpLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCByPXt9O3IudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKHIubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoci5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKHIucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihyLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoci5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBzKGEsbCl7cmV0dXJuIGFbbC51dWlkXT09PXZvaWQgMCYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9yLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihyLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihyLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtyLmdlb21ldHJ5PXModC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBhPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihhIT09dm9pZCAwJiZhLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9YS5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107cyh0LnNoYXBlcyxoKX1lbHNlIHModC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKHIuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxyLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYocyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxyLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IGE9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKWEucHVzaChzKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtyLm1hdGVyaWFsPWF9ZWxzZSByLm1hdGVyaWFsPXModC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7ci5jaGlsZHJlbj1bXTtmb3IobGV0IGE9MDthPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ErKylyLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlblthXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe3IuYW5pbWF0aW9ucz1bXTtmb3IobGV0IGE9MDthPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7YSsrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbYV07ci5hbmltYXRpb25zLnB1c2gocyh0LmFuaW1hdGlvbnMsbCkpfX1pZihlKXtsZXQgYT1vKHQuZ2VvbWV0cmllcyksbD1vKHQubWF0ZXJpYWxzKSxjPW8odC50ZXh0dXJlcyksdT1vKHQuaW1hZ2VzKSxoPW8odC5zaGFwZXMpLGY9byh0LnNrZWxldG9ucyksZD1vKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihpLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9ZiksZC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1kKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIG8oYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LGU9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxlPT09ITApZm9yKGxldCBpPTA7aTx0LmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCByPXQuY2hpbGRyZW5baV07dGhpcy5hZGQoci5jbG9uZSgpKX1yZXR1cm4gdGhpc319O2t0LkRlZmF1bHRVcD1uZXcgVCgwLDEsMCk7a3QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7a3QucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIFFlPW5ldyBULExuPW5ldyBULG11PW5ldyBULFBuPW5ldyBULF9yPW5ldyBULHdyPW5ldyBULGRnPW5ldyBULGd1PW5ldyBULHh1PW5ldyBULHl1PW5ldyBULHJlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCxpPW5ldyBUKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9aX1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxpLHIpe3Iuc3ViVmVjdG9ycyhpLGUpLFFlLnN1YlZlY3RvcnModCxlKSxyLmNyb3NzKFFlKTtsZXQgcz1yLmxlbmd0aFNxKCk7cmV0dXJuIHM+MD9yLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KHMpKTpyLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsaSxyLHMpe1FlLnN1YlZlY3RvcnMocixlKSxMbi5zdWJWZWN0b3JzKGksZSksbXUuc3ViVmVjdG9ycyh0LGUpO2xldCBvPVFlLmRvdChRZSksYT1RZS5kb3QoTG4pLGw9UWUuZG90KG11KSxjPUxuLmRvdChMbiksdT1Mbi5kb3QobXUpLGg9bypjLWEqYTtpZihoPT09MClyZXR1cm4gcy5zZXQoLTIsLTEsLTEpO2xldCBmPTEvaCxkPShjKmwtYSp1KSpmLGc9KG8qdS1hKmwpKmY7cmV0dXJuIHMuc2V0KDEtZC1nLGcsZCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLGkscil7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsUG4pLFBuLng+PTAmJlBuLnk+PTAmJlBuLngrUG4ueTw9MX1zdGF0aWMgZ2V0VVYodCxlLGkscixzLG8sYSxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixQbiksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihzLFBuLngpLGwuYWRkU2NhbGVkVmVjdG9yKG8sUG4ueSksbC5hZGRTY2FsZWRWZWN0b3IoYSxQbi56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxpLHIpe3JldHVybiBRZS5zdWJWZWN0b3JzKGksZSksTG4uc3ViVmVjdG9ycyh0LGUpLFFlLmNyb3NzKExuKS5kb3Qocik8MH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShpKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W2ldKSx0aGlzLmMuY29weSh0W3JdKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsaSksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gUWUuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxMbi5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLFFlLmNyb3NzKExuKS5sZW5ndGgoKSouNX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiByZS5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxlKXtyZXR1cm4gcmUuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLGkscixzKXtyZXR1cm4gcmUuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlLGkscixzKX1jb250YWluc1BvaW50KHQpe3JldHVybiByZS5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIHJlLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2xldCBpPXRoaXMuYSxyPXRoaXMuYixzPXRoaXMuYyxvLGE7X3Iuc3ViVmVjdG9ycyhyLGkpLHdyLnN1YlZlY3RvcnMocyxpKSxndS5zdWJWZWN0b3JzKHQsaSk7bGV0IGw9X3IuZG90KGd1KSxjPXdyLmRvdChndSk7aWYobDw9MCYmYzw9MClyZXR1cm4gZS5jb3B5KGkpO3h1LnN1YlZlY3RvcnModCxyKTtsZXQgdT1fci5kb3QoeHUpLGg9d3IuZG90KHh1KTtpZih1Pj0wJiZoPD11KXJldHVybiBlLmNvcHkocik7bGV0IGY9bCpoLXUqYztpZihmPD0wJiZsPj0wJiZ1PD0wKXJldHVybiBvPWwvKGwtdSksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihfcixvKTt5dS5zdWJWZWN0b3JzKHQscyk7bGV0IGQ9X3IuZG90KHl1KSxnPXdyLmRvdCh5dSk7aWYoZz49MCYmZDw9ZylyZXR1cm4gZS5jb3B5KHMpO2xldCB4PWQqYy1sKmc7aWYoeDw9MCYmYz49MCYmZzw9MClyZXR1cm4gYT1jLyhjLWcpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3Iod3IsYSk7bGV0IHY9dSpnLWQqaDtpZih2PD0wJiZoLXU+PTAmJmQtZz49MClyZXR1cm4gZGcuc3ViVmVjdG9ycyhzLHIpLGE9KGgtdSkvKGgtdSsoZC1nKSksZS5jb3B5KHIpLmFkZFNjYWxlZFZlY3RvcihkZyxhKTtsZXQgbT0xLyh2K3grZik7cmV0dXJuIG89eCptLGE9ZiptLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoX3IsbykuYWRkU2NhbGVkVmVjdG9yKHdyLGEpfWVxdWFscyh0KXtyZXR1cm4gdC5hLmVxdWFscyh0aGlzLmEpJiZ0LmIuZXF1YWxzKHRoaXMuYikmJnQuYy5lcXVhbHModGhpcy5jKX19LGhNPTAseGU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aE0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPUtzLHRoaXMuc2lkZT1lbyx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9dTAsdGhpcy5ibGVuZERzdD1oMCx0aGlzLmJsZW5kRXF1YXRpb249SXIsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz16dSx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPXRNLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW51LHRoaXMuc3RlbmNpbFpGYWlsPW51LHRoaXMuc3RlbmNpbFpQYXNzPW51LHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCBlIGluIHQpe2xldCBpPXRbZV07aWYoaT09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKGU9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9aT09PWMwO2NvbnRpbnVlfWxldCByPXRoaXNbZV07aWYocj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIik7Y29udGludWV9ciYmci5pc0NvbG9yP3Iuc2V0KGkpOnImJnIuaXNWZWN0b3IzJiZpJiZpLmlzVmVjdG9yMz9yLmNvcHkoaSk6dGhpc1tlXT1pfX10b0pTT04odCl7bGV0IGU9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciO2UmJih0PXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIixnZW5lcmF0b3I6Ik1hdGVyaWFsLnRvSlNPTiJ9fTtpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJihpLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLmlzQ29sb3ImJihpLmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCkpLHRoaXMucm91Z2huZXNzIT09dm9pZCAwJiYoaS5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3MpLHRoaXMubWV0YWxuZXNzIT09dm9pZCAwJiYoaS5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpLHRoaXMuc2hlZW4hPT12b2lkIDAmJihpLnNoZWVuPXRoaXMuc2hlZW4pLHRoaXMuc2hlZW5Db2xvciYmdGhpcy5zaGVlbkNvbG9yLmlzQ29sb3ImJihpLnNoZWVuQ29sb3I9dGhpcy5zaGVlbkNvbG9yLmdldEhleCgpKSx0aGlzLnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10aGlzLnNoZWVuUm91Z2huZXNzKSx0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihpLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJnRoaXMuZW1pc3NpdmVJbnRlbnNpdHkhPT0xJiYoaS5lbWlzc2l2ZUludGVuc2l0eT10aGlzLmVtaXNzaXZlSW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyJiZ0aGlzLnNwZWN1bGFyLmlzQ29sb3ImJihpLnNwZWN1bGFyPXRoaXMuc3BlY3VsYXIuZ2V0SGV4KCkpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHkhPT12b2lkIDAmJihpLnNwZWN1bGFySW50ZW5zaXR5PXRoaXMuc3BlY3VsYXJJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXJDb2xvciYmdGhpcy5zcGVjdWxhckNvbG9yLmlzQ29sb3ImJihpLnNwZWN1bGFyQ29sb3I9dGhpcy5zcGVjdWxhckNvbG9yLmdldEhleCgpKSx0aGlzLnNoaW5pbmVzcyE9PXZvaWQgMCYmKGkuc2hpbmluZXNzPXRoaXMuc2hpbmluZXNzKSx0aGlzLmNsZWFyY29hdCE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0PXRoaXMuY2xlYXJjb2F0KSx0aGlzLmNsZWFyY29hdFJvdWdobmVzcyE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzKSx0aGlzLmNsZWFyY29hdE1hcCYmdGhpcy5jbGVhcmNvYXRNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXRNYXA9dGhpcy5jbGVhcmNvYXRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZ0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD10aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAmJnRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Tm9ybWFsTWFwPXRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihpLm1hcD10aGlzLm1hcC50b0pTT04odCkudXVpZCksdGhpcy5tYXRjYXAmJnRoaXMubWF0Y2FwLmlzVGV4dHVyZSYmKGkubWF0Y2FwPXRoaXMubWF0Y2FwLnRvSlNPTih0KS51dWlkKSx0aGlzLmFscGhhTWFwJiZ0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSYmKGkuYWxwaGFNYXA9dGhpcy5hbHBoYU1hcC50b0pTT04odCkudXVpZCksdGhpcy5saWdodE1hcCYmdGhpcy5saWdodE1hcC5pc1RleHR1cmUmJihpLmxpZ2h0TWFwPXRoaXMubGlnaHRNYXAudG9KU09OKHQpLnV1aWQsaS5saWdodE1hcEludGVuc2l0eT10aGlzLmxpZ2h0TWFwSW50ZW5zaXR5KSx0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKGkuYW9NYXA9dGhpcy5hb01hcC50b0pTT04odCkudXVpZCxpLmFvTWFwSW50ZW5zaXR5PXRoaXMuYW9NYXBJbnRlbnNpdHkpLHRoaXMuYnVtcE1hcCYmdGhpcy5idW1wTWFwLmlzVGV4dHVyZSYmKGkuYnVtcE1hcD10aGlzLmJ1bXBNYXAudG9KU09OKHQpLnV1aWQsaS5idW1wU2NhbGU9dGhpcy5idW1wU2NhbGUpLHRoaXMubm9ybWFsTWFwJiZ0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUmJihpLm5vcm1hbE1hcD10aGlzLm5vcm1hbE1hcC50b0pTT04odCkudXVpZCxpLm5vcm1hbE1hcFR5cGU9dGhpcy5ub3JtYWxNYXBUeXBlLGkubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihpLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04odCkudXVpZCxpLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsaS5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50QmlhcyksdGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYoaS5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyTWFwJiZ0aGlzLnNwZWN1bGFyTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJNYXA9dGhpcy5zcGVjdWxhck1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCYmdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFySW50ZW5zaXR5TWFwPXRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJDb2xvck1hcCYmdGhpcy5zcGVjdWxhckNvbG9yTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJDb2xvck1hcD10aGlzLnNwZWN1bGFyQ29sb3JNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihpLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04odCkudXVpZCx0aGlzLmNvbWJpbmUhPT12b2lkIDAmJihpLmNvbWJpbmU9dGhpcy5jb21iaW5lKSksdGhpcy5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSksdGhpcy5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSksdGhpcy5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10aGlzLnJlZnJhY3Rpb25SYXRpbyksdGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihpLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dGhpcy50cmFuc21pc3Npb24pLHRoaXMudHJhbnNtaXNzaW9uTWFwJiZ0aGlzLnRyYW5zbWlzc2lvbk1hcC5pc1RleHR1cmUmJihpLnRyYW5zbWlzc2lvbk1hcD10aGlzLnRyYW5zbWlzc2lvbk1hcC50b0pTT04odCkudXVpZCksdGhpcy50aGlja25lc3MhPT12b2lkIDAmJihpLnRoaWNrbmVzcz10aGlzLnRoaWNrbmVzcyksdGhpcy50aGlja25lc3NNYXAmJnRoaXMudGhpY2tuZXNzTWFwLmlzVGV4dHVyZSYmKGkudGhpY2tuZXNzTWFwPXRoaXMudGhpY2tuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uRGlzdGFuY2U9dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlKSx0aGlzLmF0dGVudWF0aW9uQ29sb3IhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uQ29sb3I9dGhpcy5hdHRlbnVhdGlvbkNvbG9yLmdldEhleCgpKSx0aGlzLnNpemUhPT12b2lkIDAmJihpLnNpemU9dGhpcy5zaXplKSx0aGlzLnNoYWRvd1NpZGUhPT1udWxsJiYoaS5zaGFkb3dTaWRlPXRoaXMuc2hhZG93U2lkZSksdGhpcy5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10aGlzLnNpemVBdHRlbnVhdGlvbiksdGhpcy5ibGVuZGluZyE9PUtzJiYoaS5ibGVuZGluZz10aGlzLmJsZW5kaW5nKSx0aGlzLnNpZGUhPT1lbyYmKGkuc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYoaS5vcGFjaXR5PXRoaXMub3BhY2l0eSksdGhpcy50cmFuc3BhcmVudD09PSEwJiYoaS50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxpLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxpLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxpLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLGkuY29sb3JXcml0ZT10aGlzLmNvbG9yV3JpdGUsaS5hbHBoYVdyaXRlPXRoaXMuYWxwaGFXcml0ZSxpLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxpLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLGkuc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxpLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLGkuc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLGkuc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxpLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxpLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiZ0aGlzLnJvdGF0aW9uIT09MCYmKGkucm90YXRpb249dGhpcy5yb3RhdGlvbiksdGhpcy5wb2x5Z29uT2Zmc2V0PT09ITAmJihpLnBvbHlnb25PZmZzZXQ9ITApLHRoaXMucG9seWdvbk9mZnNldEZhY3RvciE9PTAmJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSx0aGlzLnBvbHlnb25PZmZzZXRVbml0cyE9PTAmJihpLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJnRoaXMubGluZXdpZHRoIT09MSYmKGkubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx0aGlzLmRhc2hTaXplIT09dm9pZCAwJiYoaS5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx0aGlzLmdhcFNpemUhPT12b2lkIDAmJihpLmdhcFNpemU9dGhpcy5nYXBTaXplKSx0aGlzLnNjYWxlIT09dm9pZCAwJiYoaS5zY2FsZT10aGlzLnNjYWxlKSx0aGlzLmRpdGhlcmluZz09PSEwJiYoaS5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihpLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksdGhpcy5hbHBoYVRvQ292ZXJhZ2U9PT0hMCYmKGkuYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT09PSEwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLHRoaXMud2lyZWZyYW1lPT09ITAmJihpLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSx0aGlzLndpcmVmcmFtZUxpbmVjYXAhPT0icm91bmQiJiYoaS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksdGhpcy53aXJlZnJhbWVMaW5lam9pbiE9PSJyb3VuZCImJihpLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLHRoaXMuZmxhdFNoYWRpbmc9PT0hMCYmKGkuZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMudG9uZU1hcHBlZD09PSExJiYoaS50b25lTWFwcGVkPSExKSxKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpO2Z1bmN0aW9uIHIocyl7bGV0IG89W107Zm9yKGxldCBhIGluIHMpe2xldCBsPXNbYV07ZGVsZXRlIGwubWV0YWRhdGEsby5wdXNoKGwpfXJldHVybiBvfWlmKGUpe2xldCBzPXIodC50ZXh0dXJlcyksbz1yKHQuaW1hZ2VzKTtzLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1zKSxvLmxlbmd0aD4wJiYoaS5pbWFnZXM9byl9cmV0dXJuIGl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmZvZz10LmZvZyx0aGlzLmJsZW5kaW5nPXQuYmxlbmRpbmcsdGhpcy5zaWRlPXQuc2lkZSx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7bGV0IGU9dC5jbGlwcGluZ1BsYW5lcyxpPW51bGw7aWYoZSE9PW51bGwpe2xldCByPWUubGVuZ3RoO2k9bmV3IEFycmF5KHIpO2ZvcihsZXQgcz0wO3MhPT1yOysrcylpW3NdPWVbc10uY2xvbmUoKX1yZXR1cm4gdGhpcy5jbGlwcGluZ1BsYW5lcz1pLHRoaXMuY2xpcEludGVyc2VjdGlvbj10LmNsaXBJbnRlcnNlY3Rpb24sdGhpcy5jbGlwU2hhZG93cz10LmNsaXBTaGFkb3dzLHRoaXMuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUsdGhpcy5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSx0aGlzLmFscGhhV3JpdGU9dC5hbHBoYVdyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLmFscGhhVG9Db3ZlcmFnZT10LmFscGhhVG9Db3ZlcmFnZSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt4ZS5wcm90b3R5cGUuaXNNYXRlcmlhbD0hMDt2YXIga2k9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUNsLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O2tpLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO3ZhciBKdD1uZXcgVCxBYT1uZXcgSyxRdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9lOjAsdGhpcy5ub3JtYWxpemVkPWk9PT0hMCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MH1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LGUsaSl7dCo9dGhpcy5pdGVtU2l6ZSxpKj1lLml0ZW1TaXplO2ZvcihsZXQgcj0wLHM9dGhpcy5pdGVtU2l6ZTtyPHM7cisrKXRoaXMuYXJyYXlbdCtyXT1lLmFycmF5W2krcl07cmV0dXJuIHRoaXN9Y29weUFycmF5KHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfWNvcHlDb2xvcnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IGZ0KSxlW2krK109by5yLGVbaSsrXT1vLmcsZVtpKytdPW8uYn1yZXR1cm4gdGhpc31jb3B5VmVjdG9yMnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IEspLGVbaSsrXT1vLngsZVtpKytdPW8ueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IFQpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgV3QpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56LGVbaSsrXT1vLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUFhLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxBYS5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLEFhLngsQWEueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksSnQuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsSnQueCxKdC55LEp0LnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC54PXRoaXMuZ2V0WChlKSxKdC55PXRoaXMuZ2V0WShlKSxKdC56PXRoaXMuZ2V0WihlKSxKdC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspSnQueD10aGlzLmdldFgoZSksSnQueT10aGlzLmdldFkoZSksSnQuej10aGlzLmdldFooZSksSnQuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUp0Lng9dGhpcy5nZXRYKGUpLEp0Lnk9dGhpcy5nZXRZKGUpLEp0Lno9dGhpcy5nZXRaKGUpLEp0LnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLEp0LngsSnQueSxKdC56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIscyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPXMsdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1pbyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O1F0LnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgcmw9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsaSl9fTt2YXIgc2w9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQzMkFycmF5KHQpLGUsaSl9fSxXdT1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19O1d1LnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGVlPWNsYXNzIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19O3ZhciBmTT0wLHFlPW5ldyB3dCx2dT1uZXcga3QsTXI9bmV3IFQsSGU9bmV3IEdlLFZzPW5ldyBHZSxnZT1uZXcgVCxIdD1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpmTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KHAwKHQpP3NsOnJsKSh0LDEpOnRoaXMuaW5kZXg9dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdIT09dm9pZCAwfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO2UhPT12b2lkIDAmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKGkhPT12b2lkIDApe2xldCBzPW5ldyBkZSgpLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KHMpLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHIhPT12b2lkIDAmJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSx0aGlzLmJvdW5kaW5nQm94IT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nU3BoZXJlIT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31yb3RhdGVZKHQpe3JldHVybiBxZS5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KHFlKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIHFlLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4gcWUubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIHFlLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9bG9va0F0KHQpe3JldHVybiB2dS5sb29rQXQodCksdnUudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQodnUubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKE1yKS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShNci54LE1yLnksTXIueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dFtpXTtlLnB1c2gocy54LHMueSxzLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe3RoaXMuYm91bmRpbmdCb3g9PT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1uZXcgR2UpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdCb3guc2V0KG5ldyBUKC0xLzAsLTEvMCwtMS8wKSxuZXcgVCgxLzAsMS8wLDEvMCkpO3JldHVybn1pZih0IT09dm9pZCAwKXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspe2xldCBzPWVbaV07SGUuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShzKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLEhlLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSxnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LEhlLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5tYXgpKX19ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe3RoaXMuYm91bmRpbmdTcGhlcmU9PT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgc2kpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KG5ldyBULDEvMCk7cmV0dXJufWlmKHQpe2xldCBpPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKEhlLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHM9MCxvPWUubGVuZ3RoO3M8bztzKyspe2xldCBhPWVbc107VnMuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShhKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKEhlLm1pbixWcy5taW4pLEhlLmV4cGFuZEJ5UG9pbnQoZ2UpLGdlLmFkZFZlY3RvcnMoSGUubWF4LFZzLm1heCksSGUuZXhwYW5kQnlQb2ludChnZSkpOihIZS5leHBhbmRCeVBvaW50KFZzLm1pbiksSGUuZXhwYW5kQnlQb2ludChWcy5tYXgpKX1IZS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IHM9MCxvPXQuY291bnQ7czxvO3MrKylnZS5mcm9tQnVmZmVyQXR0cmlidXRlKHQscykscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKTtpZihlKWZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVtzXSxsPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBjPTAsdT1hLmNvdW50O2M8dTtjKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLGwmJihNci5mcm9tQnVmZmVyQXR0cmlidXRlKHQsYyksZ2UuYWRkKE1yKSkscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQociksaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19Y29tcHV0ZVRhbmdlbnRzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZih0PT09bnVsbHx8ZS5wb3NpdGlvbj09PXZvaWQgMHx8ZS5ub3JtYWw9PT12b2lkIDB8fGUudXY9PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO3JldHVybn1sZXQgaT10LmFycmF5LHI9ZS5wb3NpdGlvbi5hcnJheSxzPWUubm9ybWFsLmFycmF5LG89ZS51di5hcnJheSxhPXIubGVuZ3RoLzM7ZS50YW5nZW50PT09dm9pZCAwJiZ0aGlzLnNldEF0dHJpYnV0ZSgidGFuZ2VudCIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoNCphKSw0KSk7bGV0IGw9ZS50YW5nZW50LmFycmF5LGM9W10sdT1bXTtmb3IobGV0IFg9MDtYPGE7WCsrKWNbWF09bmV3IFQsdVtYXT1uZXcgVDtsZXQgaD1uZXcgVCxmPW5ldyBULGQ9bmV3IFQsZz1uZXcgSyx4PW5ldyBLLHY9bmV3IEssbT1uZXcgVCxwPW5ldyBUO2Z1bmN0aW9uIGIoWCx5LFIpe2guZnJvbUFycmF5KHIsWCozKSxmLmZyb21BcnJheShyLHkqMyksZC5mcm9tQXJyYXkocixSKjMpLGcuZnJvbUFycmF5KG8sWCoyKSx4LmZyb21BcnJheShvLHkqMiksdi5mcm9tQXJyYXkobyxSKjIpLGYuc3ViKGgpLGQuc3ViKGgpLHguc3ViKGcpLHYuc3ViKGcpO2xldCBEPTEvKHgueCp2Lnktdi54KngueSk7IWlzRmluaXRlKEQpfHwobS5jb3B5KGYpLm11bHRpcGx5U2NhbGFyKHYueSkuYWRkU2NhbGVkVmVjdG9yKGQsLXgueSkubXVsdGlwbHlTY2FsYXIoRCkscC5jb3B5KGQpLm11bHRpcGx5U2NhbGFyKHgueCkuYWRkU2NhbGVkVmVjdG9yKGYsLXYueCkubXVsdGlwbHlTY2FsYXIoRCksY1tYXS5hZGQobSksY1t5XS5hZGQobSksY1tSXS5hZGQobSksdVtYXS5hZGQocCksdVt5XS5hZGQocCksdVtSXS5hZGQocCkpfWxldCBfPXRoaXMuZ3JvdXBzO18ubGVuZ3RoPT09MCYmKF89W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKWIoaVt6KzBdLGlbeisxXSxpW3orMl0pfWxldCBTPW5ldyBULEw9bmV3IFQsQT1uZXcgVCxIPW5ldyBUO2Z1bmN0aW9uIHR0KFgpe0EuZnJvbUFycmF5KHMsWCozKSxILmNvcHkoQSk7bGV0IHk9Y1tYXTtTLmNvcHkoeSksUy5zdWIoQS5tdWx0aXBseVNjYWxhcihBLmRvdCh5KSkpLm5vcm1hbGl6ZSgpLEwuY3Jvc3NWZWN0b3JzKEgseSk7bGV0IEQ9TC5kb3QodVtYXSk8MD8tMToxO2xbWCo0XT1TLngsbFtYKjQrMV09Uy55LGxbWCo0KzJdPVMueixsW1gqNCszXT1EfWZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKXR0KGlbeiswXSksdHQoaVt6KzFdKSx0dChpW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihlIT09dm9pZCAwKXtsZXQgaT10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYoaT09PXZvaWQgMClpPW5ldyBRdChuZXcgRmxvYXQzMkFycmF5KGUuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsaSk7ZWxzZSBmb3IobGV0IGY9MCxkPWkuY291bnQ7ZjxkO2YrKylpLnNldFhZWihmLDAsMCwwKTtsZXQgcj1uZXcgVCxzPW5ldyBULG89bmV3IFQsYT1uZXcgVCxsPW5ldyBULGM9bmV3IFQsdT1uZXcgVCxoPW5ldyBUO2lmKHQpZm9yKGxldCBmPTAsZD10LmNvdW50O2Y8ZDtmKz0zKXtsZXQgZz10LmdldFgoZiswKSx4PXQuZ2V0WChmKzEpLHY9dC5nZXRYKGYrMik7ci5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZykscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUseCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdiksdS5zdWJWZWN0b3JzKG8scyksaC5zdWJWZWN0b3JzKHIscyksdS5jcm9zcyhoKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxnKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx4KSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx2KSxhLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxpLnNldFhZWihnLGEueCxhLnksYS56KSxpLnNldFhZWih4LGwueCxsLnksbC56KSxpLnNldFhZWih2LGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLGQ9ZS5jb3VudDtmPGQ7Zis9MylyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxmKzApLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYrMSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZisyKSx1LnN1YlZlY3RvcnMobyxzKSxoLnN1YlZlY3RvcnMocixzKSx1LmNyb3NzKGgpLGkuc2V0WFlaKGYrMCx1LngsdS55LHUueiksaS5zZXRYWVooZisxLHUueCx1LnksdS56KSxpLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLGkubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQsZSl7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59ZT09PXZvaWQgMCYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCByIGluIGkpe2lmKHQuYXR0cmlidXRlc1tyXT09PXZvaWQgMCljb250aW51ZTtsZXQgbz1pW3JdLmFycmF5LGE9dC5hdHRyaWJ1dGVzW3JdLGw9YS5hcnJheSxjPWEuaXRlbVNpemUqZSx1PU1hdGgubWluKGwubGVuZ3RoLG8ubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylvW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLGdlLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKGUsZ2UueCxnZS55LGdlLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQoYSxsKXtsZXQgYz1hLmFycmF5LHU9YS5pdGVtU2l6ZSxoPWEubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLGQ9MCxnPTA7Zm9yKGxldCB4PTAsdj1sLmxlbmd0aDt4PHY7eCsrKXthLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/ZD1sW3hdKmEuZGF0YS5zdHJpZGUrYS5vZmZzZXQ6ZD1sW3hdKnU7Zm9yKGxldCBtPTA7bTx1O20rKylmW2crK109Y1tkKytdfXJldHVybiBuZXcgUXQoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IGU9bmV3IEh0LGk9dGhpcy5pbmRleC5hcnJheSxyPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGEgaW4gcil7bGV0IGw9clthXSxjPXQobCxpKTtlLnNldEF0dHJpYnV0ZShhLGMpfWxldCBzPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiBzKXtsZXQgbD1bXSxjPXNbYV07Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLGQ9dChmLGkpO2wucHVzaChkKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPW8ubGVuZ3RoO2E8bDthKyspe2xldCBjPW9bYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O2UhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl7bGV0IGM9aVtsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCByPXt9LHM9ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IGQ9Y1toXTt1LnB1c2goZC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKHJbbF09dSxzPSEwKX1zJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgbz10aGlzLmdyb3VwcztvLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG8pKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gYSE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IGU9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgaT10LmluZGV4O2khPT1udWxsJiZ0aGlzLnNldEluZGV4KGkuY2xvbmUoZSkpO2xldCByPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gcil7bGV0IHU9cltjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUoZSkpfWxldCBzPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBzKXtsZXQgdT1bXSxoPXNbY107Zm9yKGxldCBmPTAsZD1oLmxlbmd0aDtmPGQ7ZisrKXUucHVzaChoW2ZdLmNsb25lKGUpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PW8ubGVuZ3RoO2M8dTtjKyspe2xldCBoPW9bY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgYT10LmJvdW5kaW5nQm94O2EhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1hLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtIdC5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgcGc9bmV3IHd0LGJyPW5ldyBvaSxfdT1uZXcgc2ksSm49bmV3IFQsJG49bmV3IFQsS249bmV3IFQsd3U9bmV3IFQsTXU9bmV3IFQsYnU9bmV3IFQsQ2E9bmV3IFQsUmE9bmV3IFQsTGE9bmV3IFQsUGE9bmV3IEssRGE9bmV3IEssSWE9bmV3IEssU3U9bmV3IFQsTmE9bmV3IFQsb2U9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0PW5ldyBIdCxlPW5ldyBraSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYociE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXtsZXQgYT1yW3NdLm5hbWV8fFN0cmluZyhzKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPXN9fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0cztlIT09dm9pZCAwJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRlcmlhbCxzPXRoaXMubWF0cml4V29ybGQ7aWYocj09PXZvaWQgMHx8KGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLF91LmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksX3UuYXBwbHlNYXRyaXg0KHMpLHQucmF5LmludGVyc2VjdHNTcGhlcmUoX3UpPT09ITEpfHwocGcuY29weShzKS5pbnZlcnQoKSxici5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQocGcpLGkuYm91bmRpbmdCb3ghPT1udWxsJiZici5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpPT09ITEpKXJldHVybjtsZXQgbztpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsaD1pLmF0dHJpYnV0ZXMudXYsZj1pLmF0dHJpYnV0ZXMudXYyLGQ9aS5ncm91cHMsZz1pLmRyYXdSYW5nZTtpZihhIT09bnVsbClpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgeD0wLHY9ZC5sZW5ndGg7eDx2O3grKyl7bGV0IG09ZFt4XSxwPXJbbS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KG0uc3RhcnQsZy5zdGFydCksXz1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKG0uc3RhcnQrbS5jb3VudCxnLnN0YXJ0K2cuY291bnQpKTtmb3IobGV0IFM9YixMPV87UzxMO1MrPTMpe2xldCBBPWEuZ2V0WChTKSxIPWEuZ2V0WChTKzEpLHR0PWEuZ2V0WChTKzIpO289RmEodGhpcyxwLHQsYnIsbCxjLHUsaCxmLEEsSCx0dCksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IoUy8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1tLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX19ZWxzZXtsZXQgeD1NYXRoLm1heCgwLGcuc3RhcnQpLHY9TWF0aC5taW4oYS5jb3VudCxnLnN0YXJ0K2cuY291bnQpO2ZvcihsZXQgbT14LHA9djttPHA7bSs9Myl7bGV0IGI9YS5nZXRYKG0pLF89YS5nZXRYKG0rMSksUz1hLmdldFgobSsyKTtvPUZhKHRoaXMscix0LGJyLGwsYyx1LGgsZixiLF8sUyksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IobS8zKSxlLnB1c2gobykpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IHg9MCx2PWQubGVuZ3RoO3g8djt4Kyspe2xldCBtPWRbeF0scD1yW20ubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heChtLnN0YXJ0LGcuc3RhcnQpLF89TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbihtLnN0YXJ0K20uY291bnQsZy5zdGFydCtnLmNvdW50KSk7Zm9yKGxldCBTPWIsTD1fO1M8TDtTKz0zKXtsZXQgQT1TLEg9UysxLHR0PVMrMjtvPUZhKHRoaXMscCx0LGJyLGwsYyx1LGgsZixBLEgsdHQpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKFMvMyksby5mYWNlLm1hdGVyaWFsSW5kZXg9bS5tYXRlcmlhbEluZGV4LGUucHVzaChvKSl9fWVsc2V7bGV0IHg9TWF0aC5tYXgoMCxnLnN0YXJ0KSx2PU1hdGgubWluKGwuY291bnQsZy5zdGFydCtnLmNvdW50KTtmb3IobGV0IG09eCxwPXY7bTxwO20rPTMpe2xldCBiPW0sXz1tKzEsUz1tKzI7bz1GYSh0aGlzLHIsdCxicixsLGMsdSxoLGYsYixfLFMpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG0vMyksZS5wdXNoKG8pKX19fWVsc2UgaS5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX07b2UucHJvdG90eXBlLmlzTWVzaD0hMDtmdW5jdGlvbiBkTShuLHQsZSxpLHIscyxvLGEpe2xldCBsO2lmKHQuc2lkZT09PWhlP2w9aS5pbnRlcnNlY3RUcmlhbmdsZShvLHMsciwhMCxhKTpsPWkuaW50ZXJzZWN0VHJpYW5nbGUocixzLG8sdC5zaWRlIT09SHIsYSksbD09PW51bGwpcmV0dXJuIG51bGw7TmEuY29weShhKSxOYS5hcHBseU1hdHJpeDQobi5tYXRyaXhXb3JsZCk7bGV0IGM9ZS5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTmEpO3JldHVybiBjPGUubmVhcnx8Yz5lLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50Ok5hLmNsb25lKCksb2JqZWN0Om59fWZ1bmN0aW9uIEZhKG4sdCxlLGkscixzLG8sYSxsLGMsdSxoKXtKbi5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksJG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLEtuLmZyb21CdWZmZXJBdHRyaWJ1dGUocixoKTtsZXQgZj1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihzJiZmKXtDYS5zZXQoMCwwLDApLFJhLnNldCgwLDAsMCksTGEuc2V0KDAsMCwwKTtmb3IobGV0IGc9MCx4PXMubGVuZ3RoO2c8eDtnKyspe2xldCB2PWZbZ10sbT1zW2ddO3YhPT0wJiYod3UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLGMpLE11LmZyb21CdWZmZXJBdHRyaWJ1dGUobSx1KSxidS5mcm9tQnVmZmVyQXR0cmlidXRlKG0saCksbz8oQ2EuYWRkU2NhbGVkVmVjdG9yKHd1LHYpLFJhLmFkZFNjYWxlZFZlY3RvcihNdSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUsdikpOihDYS5hZGRTY2FsZWRWZWN0b3Iod3Uuc3ViKEpuKSx2KSxSYS5hZGRTY2FsZWRWZWN0b3IoTXUuc3ViKCRuKSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUuc3ViKEtuKSx2KSkpfUpuLmFkZChDYSksJG4uYWRkKFJhKSxLbi5hZGQoTGEpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLEpuKSxuLmJvbmVUcmFuc2Zvcm0odSwkbiksbi5ib25lVHJhbnNmb3JtKGgsS24pKTtsZXQgZD1kTShuLHQsZSxpLEpuLCRuLEtuLFN1KTtpZihkKXthJiYoUGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLERhLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxJYS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsaCksZC51dj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpLGwmJihQYS5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksRGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLElhLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxkLnV2Mj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpO2xldCBnPXthOmMsYjp1LGM6aCxub3JtYWw6bmV3IFQsbWF0ZXJpYWxJbmRleDowfTtyZS5nZXROb3JtYWwoSm4sJG4sS24sZy5ub3JtYWwpLGQuZmFjZT1nfXJldHVybiBkfXZhciBIaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxzPTEsbz0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpzLGRlcHRoU2VnbWVudHM6b307bGV0IGE9dGhpcztyPU1hdGguZmxvb3Iocikscz1NYXRoLmZsb29yKHMpLG89TWF0aC5mbG9vcihvKTtsZXQgbD1bXSxjPVtdLHU9W10saD1bXSxmPTAsZD0wO2coInoiLCJ5IiwieCIsLTEsLTEsaSxlLHQsbyxzLDApLGcoInoiLCJ5IiwieCIsMSwtMSxpLGUsLXQsbyxzLDEpLGcoIngiLCJ6IiwieSIsMSwxLHQsaSxlLHIsbywyKSxnKCJ4IiwieiIsInkiLDEsLTEsdCxpLC1lLHIsbywzKSxnKCJ4IiwieSIsInoiLDEsLTEsdCxlLGkscixzLDQpLGcoIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1pLHIscyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBlZSh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShoLDIpKTtmdW5jdGlvbiBnKHgsdixtLHAsYixfLFMsTCxBLEgsdHQpe2xldCBYPV8vQSx5PVMvSCxSPV8vMixEPVMvMixGPUwvMix6PUErMSxOPUgrMSxWPTAsUT0wLGF0PW5ldyBUO2ZvcihsZXQgRz0wO0c8TjtHKyspe2xldCAkPUcqeS1EO2ZvcihsZXQgbHQ9MDtsdDx6O2x0Kyspe2xldCBkdD1sdCpYLVI7YXRbeF09ZHQqcCxhdFt2XT0kKmIsYXRbbV09RixjLnB1c2goYXQueCxhdC55LGF0LnopLGF0W3hdPTAsYXRbdl09MCxhdFttXT1MPjA/MTotMSx1LnB1c2goYXQueCxhdC55LGF0LnopLGgucHVzaChsdC9BKSxoLnB1c2goMS1HL0gpLFYrPTF9fWZvcihsZXQgRz0wO0c8SDtHKyspZm9yKGxldCAkPTA7JDxBOyQrKyl7bGV0IGx0PWYrJCt6KkcsZHQ9ZiskK3oqKEcrMSkseHQ9ZisoJCsxKSt6KihHKzEpLGs9ZisoJCsxKSt6Kkc7bC5wdXNoKGx0LGR0LGspLGwucHVzaChkdCx4dCxrKSxRKz02fWEuYWRkR3JvdXAoZCxRLHR0KSxkKz1RLGYrPVZ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEhpKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gR3Iobil7bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe3RbZV09e307Zm9yKGxldCBpIGluIG5bZV0pe2xldCByPW5bZV1baV07ciYmKHIuaXNDb2xvcnx8ci5pc01hdHJpeDN8fHIuaXNNYXRyaXg0fHxyLmlzVmVjdG9yMnx8ci5pc1ZlY3RvcjN8fHIuaXNWZWN0b3I0fHxyLmlzVGV4dHVyZXx8ci5pc1F1YXRlcm5pb24pP3RbZV1baV09ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/dFtlXVtpXT1yLnNsaWNlKCk6dFtlXVtpXT1yfX1yZXR1cm4gdH1mdW5jdGlvbiBNZShuKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9R3IobltlXSk7Zm9yKGxldCByIGluIGkpdFtyXT1pW3JdfXJldHVybiB0fXZhciBwTT17Y2xvbmU6R3IsbWVyZ2U6TWV9LG1NPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLGdNPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsRm49Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPW1NLHRoaXMuZnJhZ21lbnRTaGFkZXI9Z00sdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdCE9PXZvaWQgMCYmKHQuYXR0cmlidXRlcyE9PXZvaWQgMCYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9R3IodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2ZvcihsZXQgciBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgbz10aGlzLnVuaWZvcm1zW3JdLnZhbHVlO28mJm8uaXNUZXh0dXJlP2UudW5pZm9ybXNbcl09e3R5cGU6InQiLHZhbHVlOm8udG9KU09OKHQpLnV1aWR9Om8mJm8uaXNDb2xvcj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJjIix2YWx1ZTpvLmdldEhleCgpfTpvJiZvLmlzVmVjdG9yMj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJ2MiIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3IzP2UudW5pZm9ybXNbcl09e3R5cGU6InYzIix2YWx1ZTpvLnRvQXJyYXkoKX06byYmby5pc1ZlY3RvcjQ/ZS51bmlmb3Jtc1tyXT17dHlwZToidjQiLHZhbHVlOm8udG9BcnJheSgpfTpvJiZvLmlzTWF0cml4Mz9lLnVuaWZvcm1zW3JdPXt0eXBlOiJtMyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXg0P2UudW5pZm9ybXNbcl09e3R5cGU6Im00Iix2YWx1ZTpvLnRvQXJyYXkoKX06ZS51bmlmb3Jtc1tyXT17dmFsdWU6b319T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgaT17fTtmb3IobGV0IHIgaW4gdGhpcy5leHRlbnNpb25zKXRoaXMuZXh0ZW5zaW9uc1tyXT09PSEwJiYoaVtyXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPWkpLGV9fTtGbi5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgb289Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyB3dCx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IHd0LHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IHd0fWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O29vLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgU2U9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PTUwLGU9MSxpPS4xLHI9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPWksdGhpcy5mYXI9cix0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj1WdSoyKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKGl1Ki41KnRoaXMuZm92KTtyZXR1cm4gLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gVnUqMipNYXRoLmF0YW4oTWF0aC50YW4oaXUqLjUqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy5hc3BlY3Q9dC9lLHRoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPWksdGhpcy52aWV3Lm9mZnNldFk9cix0aGlzLnZpZXcud2lkdGg9cyx0aGlzLnZpZXcuaGVpZ2h0PW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLGU9dCpNYXRoLnRhbihpdSouNSp0aGlzLmZvdikvdGhpcy56b29tLGk9MiplLHI9dGhpcy5hc3BlY3QqaSxzPS0uNSpyLG89dGhpcy52aWV3O2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1vLmZ1bGxXaWR0aCxjPW8uZnVsbEhlaWdodDtzKz1vLm9mZnNldFgqci9sLGUtPW8ub2Zmc2V0WSppL2Mscio9by53aWR0aC9sLGkqPW8uaGVpZ2h0L2N9bGV0IGE9dGhpcy5maWxtT2Zmc2V0O2EhPT0wJiYocys9dCphL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUocyxzK3IsZSxlLWksdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuZm92PXRoaXMuZm92LGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixlLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLGUub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCx0aGlzLnZpZXchPT1udWxsJiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGUub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxlLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxlfX07U2UucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIFNyPTkwLEVyPTEsYW89Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLGkuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7cmV0dXJufXRoaXMucmVuZGVyVGFyZ2V0PWk7bGV0IHI9bmV3IFNlKFNyLEVyLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwtMSwwKSxyLmxvb2tBdChuZXcgVCgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBzPW5ldyBTZShTcixFcix0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsLTEsMCkscy5sb29rQXQobmV3IFQoLTEsMCwwKSksdGhpcy5hZGQocyk7bGV0IG89bmV3IFNlKFNyLEVyLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwwLDEpLG8ubG9va0F0KG5ldyBUKDAsMSwwKSksdGhpcy5hZGQobyk7bGV0IGE9bmV3IFNlKFNyLEVyLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLC0xKSxhLmxvb2tBdChuZXcgVCgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgU2UoU3IsRXIsdCxlKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBUKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFNlKFNyLEVyLHQsZSk7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgVCgwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxlKXt0aGlzLnBhcmVudD09PW51bGwmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgaT10aGlzLnJlbmRlclRhcmdldCxbcixzLG8sYSxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsaD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgZj1pLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2kudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQoaSwwKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMSksdC5yZW5kZXIoZSxzKSx0LnNldFJlbmRlclRhcmdldChpLDIpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQoaSwzKSx0LnJlbmRlcihlLGEpLHQuc2V0UmVuZGVyVGFyZ2V0KGksNCksdC5yZW5kZXIoZSxsKSxpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWYsdC5zZXRSZW5kZXJUYXJnZXQoaSw1KSx0LnJlbmRlcihlLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGgpLHQueHIuZW5hYmxlZD11LGkudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sV3I9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyxhLGwsYyx1KXt0PXQhPT12b2lkIDA/dDpbXSxlPWUhPT12b2lkIDA/ZTpBbyxzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O1dyLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBvbD1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxlPWkpLHN1cGVyKHQsdCxlKSxlPWV8fHt9LHRoaXMudGV4dHVyZT1uZXcgV3Iodm9pZCAwLGUubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/ZS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlciE9PXZvaWQgMD9lLm1pbkZpbHRlcjpiZX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGUpe3RoaXMudGV4dHVyZS50eXBlPWUudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PVJlLHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2xldCBpPXt1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmAKCgkJCQl2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwoKCQkJCXZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CgoJCQkJCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwoKCQkJCX0KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgoJCQkJCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkJCQkJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoKCQkJCX0KCQkJYCxmcmFnbWVudFNoYWRlcjpgCgoJCQkJdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0OwoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJI2luY2x1ZGUgPGNvbW1vbj4KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCgkJCQkJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoKCQkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCgkJCQl9CgkJCWB9LHI9bmV3IEhpKDUsNSw1KSxzPW5ldyBGbih7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6R3IoaS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmkudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmkuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxibGVuZGluZzpqbn0pO3MudW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7bGV0IG89bmV3IG9lKHIscyksYT1lLm1pbkZpbHRlcjtyZXR1cm4gZS5taW5GaWx0ZXI9PT1MbCYmKGUubWluRmlsdGVyPWJlKSxuZXcgYW8oMSwxMCx0aGlzKS51cGRhdGUodCxvKSxlLm1pbkZpbHRlcj1hLG8uZ2VvbWV0cnkuZGlzcG9zZSgpLG8ubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IHM9dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IG89MDtvPDY7bysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsbyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQocyl9fTtvbC5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIEV1PW5ldyBULHhNPW5ldyBULHlNPW5ldyBkZSxqZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBUKDEsMCwwKSxlPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9ZSx0aGlzfXNldENvbXBvbmVudHModCxlLGkscil7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LGUsaSksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1lLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxlLGkpe2xldCByPUV1LnN1YlZlY3RvcnMoaSxlKS5jcm9zcyh4TS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoRXUpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKHI9PT0wKXJldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT09PTA/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IHM9LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gczwwfHxzPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIocykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8eU0uZ2V0Tm9ybWFsTWF0cml4KHQpLHI9dGhpcy5jb3BsYW5hclBvaW50KEV1KS5hcHBseU1hdHJpeDQodCkscz10aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoaSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuY29uc3RhbnQ9LXIuZG90KHMpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNvbnN0YW50LT10LmRvdCh0aGlzLm5vcm1hbCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJnQuY29uc3RhbnQ9PT10aGlzLmNvbnN0YW50fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2plLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciBUcj1uZXcgc2ksemE9bmV3IFQscXI9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgamUsZT1uZXcgamUsaT1uZXcgamUscj1uZXcgamUscz1uZXcgamUsbz1uZXcgamUpe3RoaXMucGxhbmVzPVt0LGUsaSxyLHMsb119c2V0KHQsZSxpLHIscyxvKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShzKSxhWzVdLmNvcHkobyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLHM9aVsxXSxvPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGg9aVs3XSxmPWlbOF0sZD1pWzldLGc9aVsxMF0seD1pWzExXSx2PWlbMTJdLG09aVsxM10scD1pWzE0XSxiPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGgtbCx4LWYsYi12KS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGgrbCx4K2YsYit2KS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStzLGgrYyx4K2QsYittKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1zLGgtYyx4LWQsYi1tKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1vLGgtdSx4LWcsYi1wKS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStvLGgrdSx4K2csYitwKS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gZS5ib3VuZGluZ1NwaGVyZT09PW51bGwmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksVHIuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFRyKX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBUci5jZW50ZXIuc2V0KDAsMCwwKSxUci5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsVHIuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShUcil9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgcz0wO3M8NjtzKyspaWYoZVtzXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoemEueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LHphLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSx6YS56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoemEpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07ZnVuY3Rpb24gZzAoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKHMsbyl7ZShzLG8pLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7dCE9PSEwJiZlIT09bnVsbCYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24ocyl7ZT1zfSxzZXRDb250ZXh0OmZ1bmN0aW9uKHMpe249c319fWZ1bmN0aW9uIHZNKG4sdCl7bGV0IGU9dC5pc1dlYkdMMixpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxkPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsZCksbi5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZz01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2c9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9nPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmc9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9nPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2c9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9nPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9nPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZz01MTIxKSx7YnVmZmVyOmQsdHlwZTpnLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBzKGMsdSxoKXtsZXQgZj11LmFycmF5LGQ9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoaCxjKSxkLmNvdW50PT09LTE/bi5idWZmZXJTdWJEYXRhKGgsMCxmKTooZT9uLmJ1ZmZlclN1YkRhdGEoaCxkLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYsZC5vZmZzZXQsZC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGgsZC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KGQub2Zmc2V0LGQub2Zmc2V0K2QuY291bnQpKSxkLmNvdW50PS0xKX1mdW5jdGlvbiBvKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9ZnVuY3Rpb24gYShjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9aS5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1pLmdldChjKTtoPT09dm9pZCAwP2kuc2V0KGMscihjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYocyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6byxyZW1vdmU6YSx1cGRhdGU6bH19dmFyIGxvPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLHdpZHRoU2VnbWVudHM6aSxoZWlnaHRTZWdtZW50czpyfTtsZXQgcz10LzIsbz1lLzIsYT1NYXRoLmZsb29yKGkpLGw9TWF0aC5mbG9vcihyKSxjPWErMSx1PWwrMSxoPXQvYSxmPWUvbCxkPVtdLGc9W10seD1bXSx2PVtdO2ZvcihsZXQgbT0wO208dTttKyspe2xldCBwPW0qZi1vO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBfPWIqaC1zO2cucHVzaChfLC1wLDApLHgucHVzaCgwLDAsMSksdi5wdXNoKGIvYSksdi5wdXNoKDEtbS9sKX19Zm9yKGxldCBtPTA7bTxsO20rKylmb3IobGV0IHA9MDtwPGE7cCsrKXtsZXQgYj1wK2MqbSxfPXArYyoobSsxKSxTPXArMStjKihtKzEpLEw9cCsxK2MqbTtkLnB1c2goYixfLEwpLGQucHVzaChfLFMsTCl9dGhpcy5zZXRJbmRleChkKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShnLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoeCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUodiwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgbG8odC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSxfTT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZzsKI2VuZGlmYCx3TT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsTU09YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCxiTT1gI2lmZGVmIFVTRV9BTFBIQVRFU1QKCXVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0OwojZW5kaWZgLFNNPWAjaWZkZWYgVVNFX0FPTUFQCglmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjsKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKQoJCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsRU09YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxUTT0idmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7IixBTT1gdmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTsKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApOwojZW5kaWZgLENNPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxSTT1gI2lmZGVmIFVTRV9CVU1QTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBidW1wTWFwOwoJdW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7Cgl2ZWMyIGRIZHh5X2Z3ZCgpIHsKCQl2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7CgkJdmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApOwoJCWZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDsKCQlmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDsKCQlmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDsKCQlyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTsKCX0KCXZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZOID0gc3VyZl9ub3JtOwoJCXZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTsKCQl2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7CgkJZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247CgkJdmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApOwoJfQojZW5kaWZgLExNPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZlYzQgcGxhbmU7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdOwoJCWlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTCgkJYm9vbCBjbGlwcGVkID0gdHJ1ZTsKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkgewoJCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJCWNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCQlpZiAoIGNsaXBwZWQgKSBkaXNjYXJkOwoJI2VuZGlmCiNlbmRpZmAsUE09YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxETT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjsKI2VuZGlmYCxJTT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmYCxOTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsRk09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkKCXZhcnlpbmcgdmVjMyB2Q29sb3I7CiNlbmRpZmAsek09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxVTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsQk09YCNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMKI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODYKI2RlZmluZSBQSV9IQUxGIDEuNTcwNzk2MzI2Nzk0ODk2NgojZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3CiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNQojZGVmaW5lIEVQU0lMT04gMWUtNgojaWZuZGVmIHNhdHVyYXRlCiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKQojZW5kaWYKI2RlZmluZSB3aGl0ZUNvbXBsZW1lbnQoIGEgKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKQpmbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9CmZsb2F0IHBvdzMoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4KngqeDsgfQpmbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9CmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfQpmbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfQpoaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkgewoJY29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzOwoJaGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7CglyZXR1cm4gZnJhY3QoIHNpbiggc24gKSAqIGMgKTsKfQojaWZkZWYgSElHSF9QUkVDSVNJT04KCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9CiNlbHNlCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7CgkJZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTsKCQlyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7Cgl9CiNlbmRpZgpzdHJ1Y3QgSW5jaWRlbnRMaWdodCB7Cgl2ZWMzIGNvbG9yOwoJdmVjMyBkaXJlY3Rpb247Cglib29sIHZpc2libGU7Cn07CnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7Cgl2ZWMzIGRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGRpcmVjdFNwZWN1bGFyOwoJdmVjMyBpbmRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGluZGlyZWN0U3BlY3VsYXI7Cn07CnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHsKCXZlYzMgcG9zaXRpb247Cgl2ZWMzIG5vcm1hbDsKCXZlYzMgdmlld0RpcjsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCXZlYzMgY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKfTsKdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwp9CnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBkaXIsIDAuMCApICogbWF0cml4ICkueHl6ICk7Cn0KbWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7CgltYXQzIHRtcDsKCXRtcFsgMCBdID0gdmVjMyggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApOwoJdG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7Cgl0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTsKCXJldHVybiB0bXA7Cn0KZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsKCXZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTsKCXJldHVybiBkb3QoIHdlaWdodHMsIGNvbG9yLnJnYiApOwp9CmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkgewoJcmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wOwp9CnZlYzIgZXF1aXJlY3RVdiggaW4gdmVjMyBkaXIgKSB7CglmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTsKCWZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTsKCXJldHVybiB2ZWMyKCB1LCB2ICk7Cn1gLE9NPWAjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVgoJI2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wCgkjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjAKCSNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wCgkjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wCglmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHsKCQl2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7CgkJZmxvYXQgZmFjZSA9IC0gMS4wOwoJCWlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0gZWxzZSB7CgkJCWlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApCgkJCQlmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7CgkJCWVsc2UKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDsKCQl9CgkJcmV0dXJuIGZhY2U7Cgl9Cgl2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHsKCQl2ZWMyIHV2OwoJCWlmICggZmFjZSA9PSAwLjAgKSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfQoJCXJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7Cgl9Cgl2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkgewoJCWZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7CgkJbWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApOwoJCWZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7CgkJZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTsKCQl2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41OwoJCWlmICggZmFjZSA+IDIuMCApIHsKCQkJdXYueSArPSBmYWNlU2l6ZTsKCQkJZmFjZSAtPSAzLjA7CgkJfQoJCXV2LnggKz0gZmFjZSAqIGZhY2VTaXplOwoJCWlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkgewoJCQl1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTsKCQl9CgkJdXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7CgkJdXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTsKCQl1diAqPSB0ZXhlbFNpemU7CgkJcmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjsKCX0KCSNkZWZpbmUgcjAgMS4wCgkjZGVmaW5lIHYwIDAuMzM5CgkjZGVmaW5lIG0wIC0gMi4wCgkjZGVmaW5lIHIxIDAuOAoJI2RlZmluZSB2MSAwLjI3NgoJI2RlZmluZSBtMSAtIDEuMAoJI2RlZmluZSByNCAwLjQKCSNkZWZpbmUgdjQgMC4wNDYKCSNkZWZpbmUgbTQgMi4wCgkjZGVmaW5lIHI1IDAuMzA1CgkjZGVmaW5lIHY1IDAuMDE2CgkjZGVmaW5lIG01IDMuMAoJI2RlZmluZSByNiAwLjIxCgkjZGVmaW5lIHY2IDAuMDAzOAoJI2RlZmluZSBtNiA0LjAKCWZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7CgkJZmxvYXQgbWlwID0gMC4wOwoJCWlmICggcm91Z2huZXNzID49IHIxICkgewoJCQltaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkgewoJCQltaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkgewoJCQltaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkgewoJCQltaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7CgkJfSBlbHNlIHsKCQkJbWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7CQl9CgkJcmV0dXJuIG1pcDsKCX0KCXZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7CgkJZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTsKCQlmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7CgkJdmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApOwoJCWlmICggbWlwRiA9PSAwLjAgKSB7CgkJCXJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApOwoJCX0gZWxzZSB7CgkJCXZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTsKCQkJcmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7CgkJfQoJfQojZW5kaWZgLGtNPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxITT1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7CiNlbmRpZmAsVk09YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApOwojZW5kaWZgLEdNPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxXTT1gI2lmZGVmIFVTRV9FTUlTU0lWRU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7CiNlbmRpZmAscU09ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsWE09YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLFlNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZlYzMgY2FtZXJhVG9GcmFnOwoJCWlmICggaXNPcnRob2dyYXBoaWMgKSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCQkjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTgoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZWxzZQoJCXZlYzMgcmVmbGVjdFZlYyA9IHZSZWZsZWN0OwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIDAuMCApOwoJI2Vsc2UKCQl2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYICkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKQoJCW91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTsKCSNlbmRpZgojZW5kaWZgLFpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7Cgl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoJI2Vsc2UKCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkjZW5kaWYKCQojZW5kaWZgLEpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLCRNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQkKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbmRpZgojZW5kaWZgLEtNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7CgkjZWxzZQoJCXZlYzMgY2FtZXJhVG9WZXJ0ZXg7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUU09YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxqTT1gI2lmZGVmIFVTRV9GT0cKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwojZW5kaWZgLHRiPWAjaWZkZWYgVVNFX0ZPRwoJI2lmZGVmIEZPR19FWFAyCgkJZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogdkZvZ0RlcHRoICogdkZvZ0RlcHRoICk7CgkjZWxzZQoJCWZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7CgkjZW5kaWYKCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTsKI2VuZGlmYCxlYj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxuYj1gI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7CiNlbmRpZgp2ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7CglmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApOwoJdmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTsKCSNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCQlyZXR1cm4gdmVjMyggdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yICk7CgkjZWxzZQoJCXJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7CgkjZW5kaWYKfWAsaWI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTsKCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCWxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTsKI2VuZGlmYCxyYj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHNiPWB2ZWMzIGRpZmZ1c2UgPSB2ZWMzKCAxLjAgKTsKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTsKR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7CmJhY2tHZW9tZXRyeS5wb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uOwpiYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDsKYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyOwp2TGlnaHRGcm9udCA9IHZlYzMoIDAuMCApOwp2SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7Cgl2SW5kaXJlY3RCYWNrID0gdmVjMyggMC4wICk7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwpmbG9hdCBkb3ROTDsKdmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CnZJbmRpcmVjdEZyb250ICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJdkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwojZW5kaWYKI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJdkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWZgLG9iPWB1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdzsKdW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yOwp1bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdOwp2ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkgewoJZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKCXZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApOwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApOwoJcmV0dXJuIHJlc3VsdDsKfQp2ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7Cgl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTsKCXJldHVybiBpcnJhZGlhbmNlOwp9CnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7CgkjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKQoJCWZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTsKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkgewoJCQlkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTsKCQl9CgkJcmV0dXJuIGRpc3RhbmNlRmFsbG9mZjsKCSNlbHNlCgkJaWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkgewoJCQlyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApOwoJCX0KCQlyZXR1cm4gMS4wOwoJI2VuZGlmCn0KZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7CglyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7Cn0KI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJc3RydWN0IERpcmVjdGlvbmFsTGlnaHQgewoJCXZlYzMgZGlyZWN0aW9uOwoJCXZlYzMgY29sb3I7Cgl9OwoJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdOwoJdm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQlsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7CgkJbGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247CgkJbGlnaHQudmlzaWJsZSA9IHRydWU7Cgl9CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCXN0cnVjdCBQb2ludExpZ2h0IHsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgY29sb3I7CgkJZmxvYXQgZGlzdGFuY2U7CgkJZmxvYXQgZGVjYXk7Cgl9OwoJdW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07Cgl2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJbGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yOwoJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTsKCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJfQojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCXN0cnVjdCBTcG90TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCQlmbG9hdCBjb25lQ29zOwoJCWZsb2F0IHBlbnVtYnJhQ29zOwoJfTsKCXVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdOwoJdm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQl2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApOwoJCWlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkgewoJCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJCWxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uOwoJCQlsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApOwoJCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJCX0gZWxzZSB7CgkJCWxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7CgkJCWxpZ2h0LnZpc2libGUgPSBmYWxzZTsKCQl9Cgl9CiNlbmRpZgojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCglzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7CgkJdmVjMyBjb2xvcjsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodDsKCX07Cgl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTsJdW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7Cgl1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07CiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJc3RydWN0IEhlbWlzcGhlcmVMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBza3lDb2xvcjsKCQl2ZWMzIGdyb3VuZENvbG9yOwoJfTsKCXVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdOwoJdmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQlmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTsKCQl2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApOwoJCXJldHVybiBpcnJhZGlhbmNlOwoJfQojZW5kaWZgLGFiPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLGxiPWBUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7Cm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7YCxjYj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBUb29uTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cn07CnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9Ub29uCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbgojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCx1Yj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLGhiPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKCXZlYzMgc3BlY3VsYXJDb2xvcjsKCWZsb2F0IHNwZWN1bGFyU2hpbmluZXNzOwoJZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDsKfTsKdm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9CbGlublBob25nCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZwojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCxmYj1gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7CnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTsKZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTsKI2lmZGVmIElPUgoJI2lmZGVmIFNQRUNVTEFSCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTsKCQl2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yOwoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQkJc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTsKCQkjZW5kaWYKCQkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQkJc3BlY3VsYXJDb2xvckZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFyQ29sb3JNYXAsIHZVdiApLnJnYjsKCQkjZW5kaWYKCQltYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7CgkjZWxzZQoJCWZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wOwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApOwoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwoJI2VuZGlmCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggaW9yIC0gMS4wICkgLyAoIGlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwojZWxzZQoJbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTsKCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCW1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCQltYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTsKCSNlbmRpZgoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApOwltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgltYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCW1hdGVyaWFsLnNoZWVuQ29sb3IgKj0gdGV4dHVyZTJEKCBzaGVlbkNvbG9yTWFwLCB2VXYgKS5yZ2I7CgkjZW5kaWYKCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTsKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQltYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIHNoZWVuUm91Z2huZXNzTWFwLCB2VXYgKS5hOwoJI2VuZGlmCiNlbmRpZmAsZGI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxwYj1gCkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uOwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCWdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVBvaW50TGlnaHQgcG9pbnRMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKQoJCXBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVNwb3RMaWdodCBzcG90TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdOwoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTICkKCQlzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCURpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKQoJCWRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhICkKCVJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkgewoJCXJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdOwoJCVJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKQoJdmVjMyBpYmxJcnJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJaXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CgkjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwICkKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCQlpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJfQoJCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXZlYzMgcmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmYCxtYj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCQkjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMKCQkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJCSNlbmRpZgoJCWlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwoJI2VuZGlmCgkjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgojZW5kaWZgLGdiPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAseGI9YCNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUICkKCWdsX0ZyYWdEZXB0aEVYVCA9IHZJc1BlcnNwZWN0aXZlID09IDAuMCA/IGdsX0ZyYWdDb29yZC56IDogbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTsKI2VuZGlmYCx5Yj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKI2VuZGlmYCx2Yj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsX2I9YCNpZmRlZiBVU0VfTE9HREVQVEhCVUYKCSNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUCgkJdkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7CgkJdklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7CgkjZWxzZQoJCWlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkgewoJCQlnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7CgkJCWdsX1Bvc2l0aW9uLnogKj0gZ2xfUG9zaXRpb24udzsKCQl9CgkjZW5kaWYKI2VuZGlmYCx3Yj1gI2lmZGVmIFVTRV9NQVAKCXZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTsKCSNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRQoJCXNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApOwoJI2VuZGlmCglkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjsKI2VuZGlmYCxNYj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCxiYj1gI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKQoJdmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdXYgKS5nOwojZW5kaWZgLFNiPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsRWI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxUYj1gI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDsKI2VuZGlmYCxBYj1gI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMKCW9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJfQoJI2Vsc2UKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkjZW5kaWYKI2VuZGlmYCxDYj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUmI9YCNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTCgl0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDEgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZWxzZQoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDIgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZW5kaWYKCQl9CgkjZWxzZQoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdOwoJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTsKCQkjZW5kaWYKCSNlbmRpZgojZW5kaWZgLExiPWBmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDsKI2lmZGVmIEZMQVRfU0hBREVECgl2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTsKCXZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7CiNlbHNlCgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTsKCQl2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCQliaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCSNlbmRpZgoJCSNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKQoJCQltYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZgp2ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO2AsUGI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsRGI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsSWI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsTmI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLEZiPWAjaWZkZWYgVVNFX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlOwojZW5kaWYKI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUAoJdW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsKI2VuZGlmCiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApCgl2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4sIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTsKCQl2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApOwoJCXZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7CgkJdmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTsKCQl2ZWMzIE4gPSBzdXJmX25vcm07CgkJdmVjMyBxMXBlcnAgPSBjcm9zcyggcTEsIE4gKTsKCQl2ZWMzIHEwcGVycCA9IGNyb3NzKCBOLCBxMCApOwoJCXZlYzMgVCA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7CgkJdmVjMyBCID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTsKCQlmbG9hdCBkZXQgPSBtYXgoIGRvdCggVCwgVCApLCBkb3QoIEIsIEIgKSApOwoJCWZsb2F0IHNjYWxlID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApOwoJCXJldHVybiBub3JtYWxpemUoIFQgKiAoIG1hcE4ueCAqIHNjYWxlICkgKyBCICogKCBtYXBOLnkgKiBzY2FsZSApICsgTiAqIG1hcE4ueiApOwoJfQojZW5kaWZgLHpiPWAjaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDsKI2VuZGlmYCxVYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxCYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Um91Z2huZXNzTWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgY2xlYXJjb2F0Tm9ybWFsU2NhbGU7CiNlbmRpZmAsT2I9YCNpZmRlZiBPUEFRVUUKZGlmZnVzZUNvbG9yLmEgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgpkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTsKI2VuZGlmCmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7YCxrYj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxIYj1gI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEEKCWdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7CiNlbmRpZmAsVmI9YHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uOwojZW5kaWYKbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247CmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247YCxHYj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFdiPWAjaWZkZWYgRElUSEVSSU5HCgl2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHsKCQlmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7CgkJdmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTsKCQlkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApOwoJCXJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7Cgl9CiNlbmRpZmAscWI9YGZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzczsKI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7Cglyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZzsKI2VuZGlmYCxYYj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCxZYj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCWZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7CgkJcmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7Cgl9Cgl2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHsKCQlyZXR1cm4gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7Cgl9CglmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXsKCQlmbG9hdCBvY2NsdXNpb24gPSAxLjA7CgkJdmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTsKCQlmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApOwoJCWlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7CgkJCWZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDsKCQkJZmxvYXQgdmFyaWFuY2UgPSBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTsKCQkJZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTsJCQlzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTsJCQlvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTsKCQl9CgkJcmV0dXJuIG9jY2x1c2lvbjsKCX0KCWZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7CgkJZmxvYXQgc2hhZG93ID0gMS4wOwoJCXNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53OwoJCXNoYWRvd0Nvb3JkLnogKz0gc2hhZG93QmlhczsKCQlidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7CgkJYm9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApOwoJCWJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTsKCQlib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApOwoJCWlmICggZnJ1c3R1bVRlc3QgKSB7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDIgPSBkeDAgLyAyLjA7CgkJCWZsb2F0IGR5MiA9IGR5MCAvIDIuMDsKCQkJZmxvYXQgZHgzID0gZHgxIC8gMi4wOwoJCQlmbG9hdCBkeTMgPSBkeTEgLyAyLjA7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApCgkJCSkgKiAoIDEuMCAvIDE3LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeCA9IHRleGVsU2l6ZS54OwoJCQlmbG9hdCBkeSA9IHRleGVsU2l6ZS55OwoJCQl2ZWMyIHV2ID0gc2hhZG93Q29vcmQueHk7CgkJCXZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTsKCQkJdXYgLT0gZiAqIHRleGVsU2l6ZTsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCBkeSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIGYueSApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXNoYWRvdyA9IFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbHNlCgkJCXNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZW5kaWYKCQl9CgkJcmV0dXJuIHNoYWRvdzsKCX0KCXZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHsKCQl2ZWMzIGFic1YgPSBhYnMoIHYgKTsKCQlmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTsKCQlhYnNWICo9IHNjYWxlVG9DdWJlOwoJCXYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTsKCQl2ZWMyIHBsYW5hciA9IHYueHk7CgkJZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTsKCQlmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7CgkJaWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkgewoJCQlpZiAoIHYueiA+IDAuMCApCgkJCQlwbGFuYXIueCA9IDQuMCAtIHYueDsKCQl9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWCA9IHNpZ24oIHYueCApOwoJCQlwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7CgkJfSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTsKCQkJcGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDsKCQkJcGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDsKCQl9CgkJcmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApOwoJfQoJZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7CgkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTsKCQl2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejsKCQlmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApOwkJZHAgKz0gc2hhZG93QmlhczsKCQl2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApOwoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTsKCQkJcmV0dXJuICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7CgkJI2VuZGlmCgl9CiNlbmRpZmAsWmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCiNlbmRpZmAsSmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCwkYj1gZmxvYXQgZ2V0U2hhZG93TWFzaygpIHsKCWZsb2F0IHNoYWRvdyA9IDEuMDsKCSNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNlbmRpZgoJcmV0dXJuIHNoYWRvdzsKfWAsS2I9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApOwoJbWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7CgltYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTsKCW1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApOwojZW5kaWZgLFFiPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxqYj1gI2lmZGVmIFVTRV9TS0lOTklORwoJdmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCXZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApOwoJc2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7Cglza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTsKCXNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56OwoJc2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7Cgl0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6OwojZW5kaWZgLHQxPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgltYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7Cglza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDsKCW9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6OwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJb2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNlbmRpZgojZW5kaWZgLGUxPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLG4xPWAjaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDsKI2VuZGlmYCxpMT1gI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApCglnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxyMT1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHMxPWAjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJZmxvYXQgdHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7CglmbG9hdCB0cmFuc21pc3Npb25GYWN0b3IgPSB0cmFuc21pc3Npb247CglmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7CgkjZW5kaWYKCXZlYzMgcG9zID0gdldvcmxkUG9zaXRpb247Cgl2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7Cgl2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzQgdHJhbnNtaXNzaW9uID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbigKCQluLCB2LCByb3VnaG5lc3NGYWN0b3IsIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsCgkJcG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgaW9yLCB0aGlja25lc3NGYWN0b3IsCgkJYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJdG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApOwoJdHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIHRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgdHJhbnNtaXNzaW9uRmFjdG9yICk7CiNlbmRpZmAsbzE9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjsKCXVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzOwoJdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJdW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7CgkjZW5kaWYKCXVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTsKCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7Cgl1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCXZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7CgkJdmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7CgkJdmVjMyBtb2RlbFNjYWxlOwoJCW1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDIgXS54eXogKSApOwoJCXJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7Cgl9CglmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTsKCX0KCXZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7CgkJZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApOwoJCSNpZmRlZiBURVhUVVJFX0xPRF9FWFQKCQkJcmV0dXJuIHRleHR1cmUyRExvZEVYVCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTsKCQkjZW5kaWYKCX0KCXZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQlpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkgewoJCQlyZXR1cm4gcmFkaWFuY2U7CgkJfSBlbHNlIHsKCQkJdmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTsKCQkJdmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApOwkJCXJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7CgkJfQoJfQoJdmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwKCQljb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiB2ZWMzIHBvc2l0aW9uLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4LAoJCWNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywKCQljb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7CgkJdmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApOwoJCXZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5OwoJCXZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTsKCQl2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudzsKCQlyZWZyYWN0aW9uQ29vcmRzICs9IDEuMDsKCQlyZWZyYWN0aW9uQ29vcmRzIC89IDIuMDsKCQl2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7CgkJdmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJCXZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApOwoJCXJldHVybiB2ZWM0KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7Cgl9CiNlbmRpZmAsYTE9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCxsMT1gI2lmZGVmIFVTRV9VVgoJI2lmZGVmIFVWU19WRVJURVhfT05MWQoJCXZlYzIgdlV2OwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJI2VuZGlmCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZmAsYzE9YCNpZmRlZiBVU0VfVVYKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CiNlbmRpZmAsdTE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAsaDE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJYXR0cmlidXRlIHZlYzIgdXYyOwoJdmFyeWluZyB2ZWMyIHZVdjI7Cgl1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtOwojZW5kaWZgLGYxPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7CiNlbmRpZmAsZDE9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAscDE9YHZhcnlpbmcgdmVjMiB2VXY7CnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKdm9pZCBtYWluKCkgewoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7Cn1gLG0xPWB1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7CnZhcnlpbmcgdmVjMiB2VXY7CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLGcxPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCx4MT1gI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7Cgl2ZWMzIHZSZWZsZWN0ID0gdldvcmxkRGlyZWN0aW9uOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCWdsX0ZyYWdDb2xvciA9IGVudkNvbG9yOwoJZ2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLHkxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7Cn1gLHYxPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCxfMT1gI2RlZmluZSBESVNUQU5DRQp2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7Cn1gLHcxPWAjZGVmaW5lIERJU1RBTkNFCnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjsKdW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7CnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7CnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluICgpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7CglkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7CglkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApOwp9YCxNMT1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLGIxPWB1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCXZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAsUzE9YHVuaWZvcm0gZmxvYXQgc2NhbGU7CmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJdkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlOwoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEUxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxUMT1gI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HICkKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsQTE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJI2lmZGVmIFVTRV9MSUdIVE1BUAoJCXZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiOwoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQzE9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxSMT1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gKCBnbF9Gcm9udEZhY2luZyApID8gdkluZGlyZWN0RnJvbnQgOiB2SW5kaXJlY3RCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdkluZGlyZWN0RnJvbnQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTsKCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsTDE9YCNkZWZpbmUgTUFUQ0FQCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKfWAsUDE9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxEMT1gI2RlZmluZSBOT1JNQUwKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWYKfWAsSTE9YCNkZWZpbmUgTk9STUFMCnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7Cn1gLE4xPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEYxPWAjZGVmaW5lIFBIT05HCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gdmVjMyBzcGVjdWxhcjsKdW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsejE9YCNkZWZpbmUgU1RBTkRBUkQKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4PgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLFUxPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQjE9YCNkZWZpbmUgVE9PTgp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsTzE9YCNkZWZpbmUgVE9PTgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxrMT1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEgxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+Cn1gLFYxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEcxPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsVzE9YHVuaWZvcm0gZmxvYXQgcm90YXRpb247CnVuaWZvcm0gdmVjMiBjZW50ZXI7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7Cgl2ZWMyIHNjYWxlOwoJc2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7CglzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTsKCSNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTgoJCWJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTsKCQlpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejsKCSNlbmRpZgoJdmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTsKCXZlYzIgcm90YXRlZFBvc2l0aW9uOwoJcm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJcm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJbXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHExPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsUHQ9e2FscGhhbWFwX2ZyYWdtZW50Ol9NLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6d00sYWxwaGF0ZXN0X2ZyYWdtZW50Ok1NLGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50OmJNLGFvbWFwX2ZyYWdtZW50OlNNLGFvbWFwX3BhcnNfZnJhZ21lbnQ6RU0sYmVnaW5fdmVydGV4OlRNLGJlZ2lubm9ybWFsX3ZlcnRleDpBTSxic2RmczpDTSxidW1wbWFwX3BhcnNfZnJhZ21lbnQ6Uk0sY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OkxNLGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OlBNLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDpETSxjbGlwcGluZ19wbGFuZXNfdmVydGV4OklNLGNvbG9yX2ZyYWdtZW50Ok5NLGNvbG9yX3BhcnNfZnJhZ21lbnQ6Rk0sY29sb3JfcGFyc192ZXJ0ZXg6ek0sY29sb3JfdmVydGV4OlVNLGNvbW1vbjpCTSxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6T00sZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6a00sZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OkhNLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6Vk0sZW1pc3NpdmVtYXBfZnJhZ21lbnQ6R00sZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDpXTSxlbmNvZGluZ3NfZnJhZ21lbnQ6cU0sZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6WE0sZW52bWFwX2ZyYWdtZW50OllNLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpaTSxlbnZtYXBfcGFyc19mcmFnbWVudDpKTSxlbnZtYXBfcGFyc192ZXJ0ZXg6JE0sZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6YWIsZW52bWFwX3ZlcnRleDpLTSxmb2dfdmVydGV4OlFNLGZvZ19wYXJzX3ZlcnRleDpqTSxmb2dfZnJhZ21lbnQ6dGIsZm9nX3BhcnNfZnJhZ21lbnQ6ZWIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDpuYixsaWdodG1hcF9mcmFnbWVudDppYixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OnJiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpzYixsaWdodHNfcGFyc19iZWdpbjpvYixsaWdodHNfdG9vbl9mcmFnbWVudDpsYixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmNiLGxpZ2h0c19waG9uZ19mcmFnbWVudDp1YixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDpoYixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6ZmIsbGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6ZGIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOnBiLGxpZ2h0c19mcmFnbWVudF9tYXBzOm1iLGxpZ2h0c19mcmFnbWVudF9lbmQ6Z2IsbG9nZGVwdGhidWZfZnJhZ21lbnQ6eGIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDp5Yixsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDp2Yixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6X2IsbWFwX2ZyYWdtZW50OndiLG1hcF9wYXJzX2ZyYWdtZW50Ok1iLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDpiYixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpTYixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6RWIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6VGIsbW9ycGhub3JtYWxfdmVydGV4OkFiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OkNiLG1vcnBodGFyZ2V0X3ZlcnRleDpSYixub3JtYWxfZnJhZ21lbnRfYmVnaW46TGIsbm9ybWFsX2ZyYWdtZW50X21hcHM6UGIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6RGIsbm9ybWFsX3BhcnNfdmVydGV4OkliLG5vcm1hbF92ZXJ0ZXg6TmIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6RmIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjp6YixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6VWIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6QmIsb3V0cHV0X2ZyYWdtZW50Ok9iLHBhY2tpbmc6a2IscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDpIYixwcm9qZWN0X3ZlcnRleDpWYixkaXRoZXJpbmdfZnJhZ21lbnQ6R2IsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6V2Iscm91Z2huZXNzbWFwX2ZyYWdtZW50OnFiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OlhiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OlliLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpaYixzaGFkb3dtYXBfdmVydGV4OkpiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDokYixza2luYmFzZV92ZXJ0ZXg6S2Isc2tpbm5pbmdfcGFyc192ZXJ0ZXg6UWIsc2tpbm5pbmdfdmVydGV4OmpiLHNraW5ub3JtYWxfdmVydGV4OnQxLHNwZWN1bGFybWFwX2ZyYWdtZW50OmUxLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6bjEsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6aTEsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDpyMSx0cmFuc21pc3Npb25fZnJhZ21lbnQ6czEsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bzEsdXZfcGFyc19mcmFnbWVudDphMSx1dl9wYXJzX3ZlcnRleDpsMSx1dl92ZXJ0ZXg6YzEsdXYyX3BhcnNfZnJhZ21lbnQ6dTEsdXYyX3BhcnNfdmVydGV4OmgxLHV2Ml92ZXJ0ZXg6ZjEsd29ybGRwb3NfdmVydGV4OmQxLGJhY2tncm91bmRfdmVydDpwMSxiYWNrZ3JvdW5kX2ZyYWc6bTEsY3ViZV92ZXJ0OmcxLGN1YmVfZnJhZzp4MSxkZXB0aF92ZXJ0OnkxLGRlcHRoX2ZyYWc6djEsZGlzdGFuY2VSR0JBX3ZlcnQ6XzEsZGlzdGFuY2VSR0JBX2ZyYWc6dzEsZXF1aXJlY3RfdmVydDpNMSxlcXVpcmVjdF9mcmFnOmIxLGxpbmVkYXNoZWRfdmVydDpTMSxsaW5lZGFzaGVkX2ZyYWc6RTEsbWVzaGJhc2ljX3ZlcnQ6VDEsbWVzaGJhc2ljX2ZyYWc6QTEsbWVzaGxhbWJlcnRfdmVydDpDMSxtZXNobGFtYmVydF9mcmFnOlIxLG1lc2htYXRjYXBfdmVydDpMMSxtZXNobWF0Y2FwX2ZyYWc6UDEsbWVzaG5vcm1hbF92ZXJ0OkQxLG1lc2hub3JtYWxfZnJhZzpJMSxtZXNocGhvbmdfdmVydDpOMSxtZXNocGhvbmdfZnJhZzpGMSxtZXNocGh5c2ljYWxfdmVydDp6MSxtZXNocGh5c2ljYWxfZnJhZzpVMSxtZXNodG9vbl92ZXJ0OkIxLG1lc2h0b29uX2ZyYWc6TzEscG9pbnRzX3ZlcnQ6azEscG9pbnRzX2ZyYWc6SDEsc2hhZG93X3ZlcnQ6VjEsc2hhZG93X2ZyYWc6RzEsc3ByaXRlX3ZlcnQ6VzEsc3ByaXRlX2ZyYWc6cTF9LG90PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgZGV9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9fSxzcGVjdWxhcm1hcDp7c3BlY3VsYXJNYXA6e3ZhbHVlOm51bGx9fSxlbnZtYXA6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9LHJlZmxlY3Rpdml0eTp7dmFsdWU6MX0saW9yOnt2YWx1ZToxLjV9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fX0sYW9tYXA6e2FvTWFwOnt2YWx1ZTpudWxsfSxhb01hcEludGVuc2l0eTp7dmFsdWU6MX19LGxpZ2h0bWFwOntsaWdodE1hcDp7dmFsdWU6bnVsbH0sbGlnaHRNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxlbWlzc2l2ZW1hcDp7ZW1pc3NpdmVNYXA6e3ZhbHVlOm51bGx9fSxidW1wbWFwOntidW1wTWFwOnt2YWx1ZTpudWxsfSxidW1wU2NhbGU6e3ZhbHVlOjF9fSxub3JtYWxtYXA6e25vcm1hbE1hcDp7dmFsdWU6bnVsbH0sbm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBLKC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX19fSxmbj17YmFzaWM6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmZvZ10pLHZlcnRleFNoYWRlcjpQdC5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5zcGVjdWxhcm1hcCxvdC5lbnZtYXAsb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuZm9nLG90LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBmdCgwKX19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmVtaXNzaXZlbWFwLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IGZ0KDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmVudm1hcCxvdC5hb21hcCxvdC5saWdodG1hcCxvdC5lbWlzc2l2ZW1hcCxvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3Qucm91Z2huZXNzbWFwLG90Lm1ldGFsbmVzc21hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuYnVtcG1hcCxvdC5ub3JtYWxtYXAsb3QuZGlzcGxhY2VtZW50bWFwLG90LmdyYWRpZW50bWFwLG90LmZvZyxvdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgZnQoMCl9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0Lm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3QuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOk1lKFtvdC5wb2ludHMsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOlB0LmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpQdC5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOk1lKFtvdC5zcHJpdGUsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOlB0LmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOk1lKFtvdC5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpQdC5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgVH0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6TWUoW290LmxpZ2h0cyxvdC5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgZnQoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5zaGFkb3dfZnJhZ319O2ZuLnBoeXNpY2FsPXt1bmlmb3JtczpNZShbZm4uc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOjB9LHNoZWVuQ29sb3I6e3ZhbHVlOm5ldyBmdCgwKX0sc2hlZW5Db2xvck1hcDp7dmFsdWU6bnVsbH0sc2hlZW5Sb3VnaG5lc3M6e3ZhbHVlOjF9LHNoZWVuUm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb246e3ZhbHVlOjB9LHRyYW5zbWlzc2lvbk1hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uU2FtcGxlclNpemU6e3ZhbHVlOm5ldyBLfSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBmdCgxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfZnJhZ307ZnVuY3Rpb24gWDEobix0LGUsaSxyLHMpe2xldCBvPW5ldyBmdCgwKSxhPXI9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIGQoeCx2KXtsZXQgbT0hMSxwPXYuaXNTY2VuZT09PSEwP3YuYmFja2dyb3VuZDpudWxsO3AmJnAuaXNUZXh0dXJlJiYocD10LmdldChwKSk7bGV0IGI9bi54cixfPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7XyYmXy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJihwPW51bGwpLHA9PT1udWxsP2cobyxhKTpwJiZwLmlzQ29sb3ImJihnKHAsMSksbT0hMCksKG4uYXV0b0NsZWFyfHxtKSYmbi5jbGVhcihuLmF1dG9DbGVhckNvbG9yLG4uYXV0b0NsZWFyRGVwdGgsbi5hdXRvQ2xlYXJTdGVuY2lsKSxwJiYocC5pc0N1YmVUZXh0dXJlfHxwLm1hcHBpbmc9PT1SbCk/KGM9PT12b2lkIDAmJihjPW5ldyBvZShuZXcgSGkoMSwxLDEpLG5ldyBGbih7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6R3IoZm4uY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmZuLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmZuLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oUyxMLEEpe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKEEubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLGkudXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT1wLGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT1wLmlzQ3ViZVRleHR1cmUmJnAuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXB8fGghPT1wLnZlcnNpb258fGYhPT1uLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT1wLGg9cC52ZXJzaW9uLGY9bi50b25lTWFwcGluZykseC51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6cCYmcC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgb2UobmV3IGxvKDIsMiksbmV3IEZuKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOkdyKGZuLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpmbi5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpmbi5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6ZW8sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGkudXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT1wLHAubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZwLnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weShwLm1hdHJpeCksKHUhPT1wfHxoIT09cC52ZXJzaW9ufHxmIT09bi50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9cCxoPXAudmVyc2lvbixmPW4udG9uZU1hcHBpbmcpLHgudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGcoeCx2KXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoeC5yLHguZyx4LmIsdixzKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBvfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKHgsdj0xKXtvLnNldCh4KSxhPXYsZyhvLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oeCl7YT14LGcobyxhKX0scmVuZGVyOmR9fWZ1bmN0aW9uIFkxKG4sdCxlLGkpe2xldCByPW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSxzPWkuaXNXZWJHTDI/bnVsbDp0LmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxvPWkuaXNXZWJHTDJ8fHMhPT1udWxsLGE9e30sbD14KG51bGwpLGM9bDtmdW5jdGlvbiB1KEQsRix6LE4sVil7bGV0IFE9ITE7aWYobyl7bGV0IGF0PWcoTix6LEYpO2MhPT1hdCYmKGM9YXQsZihjLm9iamVjdCkpLFE9dihOLFYpLFEmJm0oTixWKX1lbHNle2xldCBhdD1GLndpcmVmcmFtZT09PSEwOyhjLmdlb21ldHJ5IT09Ti5pZHx8Yy5wcm9ncmFtIT09ei5pZHx8Yy53aXJlZnJhbWUhPT1hdCkmJihjLmdlb21ldHJ5PU4uaWQsYy5wcm9ncmFtPXouaWQsYy53aXJlZnJhbWU9YXQsUT0hMCl9RC5pc0luc3RhbmNlZE1lc2g9PT0hMCYmKFE9ITApLFYhPT1udWxsJiZlLnVwZGF0ZShWLDM0OTYzKSxRJiYoQShELEYseixOKSxWIT09bnVsbCYmbi5iaW5kQnVmZmVyKDM0OTYzLGUuZ2V0KFYpLmJ1ZmZlcikpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6cy5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpfWZ1bmN0aW9uIGYoRCl7cmV0dXJuIGkuaXNXZWJHTDI/bi5iaW5kVmVydGV4QXJyYXkoRCk6cy5iaW5kVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZChEKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmRlbGV0ZVZlcnRleEFycmF5KEQpOnMuZGVsZXRlVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZyhELEYseil7bGV0IE49ei53aXJlZnJhbWU9PT0hMCxWPWFbRC5pZF07Vj09PXZvaWQgMCYmKFY9e30sYVtELmlkXT1WKTtsZXQgUT1WW0YuaWRdO1E9PT12b2lkIDAmJihRPXt9LFZbRi5pZF09USk7bGV0IGF0PVFbTl07cmV0dXJuIGF0PT09dm9pZCAwJiYoYXQ9eChoKCkpLFFbTl09YXQpLGF0fWZ1bmN0aW9uIHgoRCl7bGV0IEY9W10sej1bXSxOPVtdO2ZvcihsZXQgVj0wO1Y8cjtWKyspRltWXT0wLHpbVl09MCxOW1ZdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOkYsZW5hYmxlZEF0dHJpYnV0ZXM6eixhdHRyaWJ1dGVEaXZpc29yczpOLG9iamVjdDpELGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24gdihELEYpe2xldCB6PWMuYXR0cmlidXRlcyxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD16W1FdLEc9TltRXTtpZihhdD09PXZvaWQgMHx8YXQuYXR0cmlidXRlIT09R3x8YXQuZGF0YSE9PUcuZGF0YSlyZXR1cm4hMDtWKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PVZ8fGMuaW5kZXghPT1GfWZ1bmN0aW9uIG0oRCxGKXtsZXQgej17fSxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD1OW1FdLEc9e307Ry5hdHRyaWJ1dGU9YXQsYXQuZGF0YSYmKEcuZGF0YT1hdC5kYXRhKSx6W1FdPUcsVisrfWMuYXR0cmlidXRlcz16LGMuYXR0cmlidXRlc051bT1WLGMuaW5kZXg9Rn1mdW5jdGlvbiBwKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKylEW0ZdPTB9ZnVuY3Rpb24gYihEKXtfKEQsMCl9ZnVuY3Rpb24gXyhELEYpe2xldCB6PWMubmV3QXR0cmlidXRlcyxOPWMuZW5hYmxlZEF0dHJpYnV0ZXMsVj1jLmF0dHJpYnV0ZURpdmlzb3JzO3pbRF09MSxOW0RdPT09MCYmKG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoRCksTltEXT0xKSxWW0RdIT09RiYmKChpLmlzV2ViR0wyP246dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKEQsRiksVltEXT1GKX1mdW5jdGlvbiBTKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzLEY9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IHo9MCxOPUYubGVuZ3RoO3o8Tjt6KyspRlt6XSE9PURbel0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh6KSxGW3pdPTApfWZ1bmN0aW9uIEwoRCxGLHosTixWLFEpe2kuaXNXZWJHTDI9PT0hMCYmKHo9PT01MTI0fHx6PT09NTEyNSk/bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihELEYseixWLFEpOm4udmVydGV4QXR0cmliUG9pbnRlcihELEYseixOLFYsUSl9ZnVuY3Rpb24gQShELEYseixOKXtpZihpLmlzV2ViR0wyPT09ITEmJihELmlzSW5zdGFuY2VkTWVzaHx8Ti5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmdC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKT09PW51bGwpcmV0dXJuO3AoKTtsZXQgVj1OLmF0dHJpYnV0ZXMsUT16LmdldEF0dHJpYnV0ZXMoKSxhdD1GLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGxldCBHIGluIFEpe2xldCAkPVFbR107aWYoJC5sb2NhdGlvbj49MCl7bGV0IGx0PVZbR107aWYobHQ9PT12b2lkIDAmJihHPT09Imluc3RhbmNlTWF0cml4IiYmRC5pbnN0YW5jZU1hdHJpeCYmKGx0PUQuaW5zdGFuY2VNYXRyaXgpLEc9PT0iaW5zdGFuY2VDb2xvciImJkQuaW5zdGFuY2VDb2xvciYmKGx0PUQuaW5zdGFuY2VDb2xvcikpLGx0IT09dm9pZCAwKXtsZXQgZHQ9bHQubm9ybWFsaXplZCx4dD1sdC5pdGVtU2l6ZSxrPWUuZ2V0KGx0KTtpZihrPT09dm9pZCAwKWNvbnRpbnVlO2xldCBGdD1rLmJ1ZmZlcixtdD1rLnR5cGUsU3Q9ay5ieXRlc1BlckVsZW1lbnQ7aWYobHQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IEI9bHQuZGF0YSxzdD1CLnN0cmlkZSxudD1sdC5vZmZzZXQ7aWYoQiYmQi5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IEM9MDtDPCQubG9jYXRpb25TaXplO0MrKylfKCQubG9jYXRpb24rQyxCLm1lc2hQZXJBdHRyaWJ1dGUpO0QuaXNJbnN0YW5jZWRNZXNoIT09ITAmJk4uX21heEluc3RhbmNlQ291bnQ9PT12b2lkIDAmJihOLl9tYXhJbnN0YW5jZUNvdW50PUIubWVzaFBlckF0dHJpYnV0ZSpCLmNvdW50KX1lbHNlIGZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKWIoJC5sb2NhdGlvbitDKTtuLmJpbmRCdWZmZXIoMzQ5NjIsRnQpO2ZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKUwoJC5sb2NhdGlvbitDLHh0LyQubG9jYXRpb25TaXplLG10LGR0LHN0KlN0LChudCt4dC8kLmxvY2F0aW9uU2l6ZSpDKSpTdCl9ZWxzZXtpZihsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSl7Zm9yKGxldCBCPTA7QjwkLmxvY2F0aW9uU2l6ZTtCKyspXygkLmxvY2F0aW9uK0IsbHQubWVzaFBlckF0dHJpYnV0ZSk7RC5pc0luc3RhbmNlZE1lc2ghPT0hMCYmTi5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKE4uX21heEluc3RhbmNlQ291bnQ9bHQubWVzaFBlckF0dHJpYnV0ZSpsdC5jb3VudCl9ZWxzZSBmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKyliKCQubG9jYXRpb24rQik7bi5iaW5kQnVmZmVyKDM0OTYyLEZ0KTtmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKylMKCQubG9jYXRpb24rQix4dC8kLmxvY2F0aW9uU2l6ZSxtdCxkdCx4dCpTdCx4dC8kLmxvY2F0aW9uU2l6ZSpCKlN0KX19ZWxzZSBpZihhdCE9PXZvaWQgMCl7bGV0IGR0PWF0W0ddO2lmKGR0IT09dm9pZCAwKXN3aXRjaChkdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdigkLmxvY2F0aW9uLGR0KTticmVhaztjYXNlIDM6bi52ZXJ0ZXhBdHRyaWIzZnYoJC5sb2NhdGlvbixkdCk7YnJlYWs7Y2FzZSA0Om4udmVydGV4QXR0cmliNGZ2KCQubG9jYXRpb24sZHQpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoJC5sb2NhdGlvbixkdCl9fX19UygpfWZ1bmN0aW9uIEgoKXt5KCk7Zm9yKGxldCBEIGluIGEpe2xldCBGPWFbRF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRF19fWZ1bmN0aW9uIHR0KEQpe2lmKGFbRC5pZF09PT12b2lkIDApcmV0dXJuO2xldCBGPWFbRC5pZF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRC5pZF19ZnVuY3Rpb24gWChEKXtmb3IobGV0IEYgaW4gYSl7bGV0IHo9YVtGXTtpZih6W0QuaWRdPT09dm9pZCAwKWNvbnRpbnVlO2xldCBOPXpbRC5pZF07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIHpbRC5pZF19fWZ1bmN0aW9uIHkoKXtSKCksYyE9PWwmJihjPWwsZihjLm9iamVjdCkpfWZ1bmN0aW9uIFIoKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOnUscmVzZXQ6eSxyZXNldERlZmF1bHRTdGF0ZTpSLGRpc3Bvc2U6SCxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTp0dCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOlgsaW5pdEF0dHJpYnV0ZXM6cCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpTfX1mdW5jdGlvbiBaMShuLHQsZSxpKXtsZXQgcj1pLmlzV2ViR0wyLHM7ZnVuY3Rpb24gbyhjKXtzPWN9ZnVuY3Rpb24gYShjLHUpe24uZHJhd0FycmF5cyhzLGMsdSksZS51cGRhdGUodSxzLDEpfWZ1bmN0aW9uIGwoYyx1LGgpe2lmKGg9PT0wKXJldHVybjtsZXQgZixkO2lmKHIpZj1uLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYoZj10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsZj09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1mW2RdKHMsYyx1LGgpLGUudXBkYXRlKHUscyxoKX10aGlzLnNldE1vZGU9byx0aGlzLnJlbmRlcj1hLHRoaXMucmVuZGVySW5zdGFuY2VzPWx9ZnVuY3Rpb24gSjEobix0LGUpe2xldCBpO2Z1bmN0aW9uIHIoKXtpZihpIT09dm9pZCAwKXJldHVybiBpO2lmKHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgQT10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aT1uLmdldFBhcmFtZXRlcihBLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBpPTA7cmV0dXJuIGl9ZnVuY3Rpb24gcyhBKXtpZihBPT09ImhpZ2hwIil7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtBPSJtZWRpdW1wIn1yZXR1cm4gQT09PSJtZWRpdW1wIiYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgbz10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQsYT1lLnByZWNpc2lvbiE9PXZvaWQgMD9lLnByZWNpc2lvbjoiaGlnaHAiLGw9cyhhKTtsIT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLGEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLGE9bCk7bGV0IGM9b3x8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHU9ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPT09ITAsaD1uLmdldFBhcmFtZXRlcigzNDkzMCksZj1uLmdldFBhcmFtZXRlcigzNTY2MCksZD1uLmdldFBhcmFtZXRlcigzMzc5KSxnPW4uZ2V0UGFyYW1ldGVyKDM0MDc2KSx4PW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSx2PW4uZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtPW4uZ2V0UGFyYW1ldGVyKDM2MzQ4KSxwPW4uZ2V0UGFyYW1ldGVyKDM2MzQ5KSxiPWY+MCxfPW98fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpLFM9YiYmXyxMPW8/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjA7cmV0dXJue2lzV2ViR0wyOm8sZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OnIsZ2V0TWF4UHJlY2lzaW9uOnMscHJlY2lzaW9uOmEsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjp1LG1heFRleHR1cmVzOmgsbWF4VmVydGV4VGV4dHVyZXM6ZixtYXhUZXh0dXJlU2l6ZTpkLG1heEN1YmVtYXBTaXplOmcsbWF4QXR0cmlidXRlczp4LG1heFZlcnRleFVuaWZvcm1zOnYsbWF4VmFyeWluZ3M6bSxtYXhGcmFnbWVudFVuaWZvcm1zOnAsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6XyxmbG9hdFZlcnRleFRleHR1cmVzOlMsbWF4U2FtcGxlczpMfX1mdW5jdGlvbiAkMShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxzPSExLG89bmV3IGplLGE9bmV3IGRlLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLGQpe2xldCBnPWgubGVuZ3RoIT09MHx8Znx8aSE9PTB8fHI7cmV0dXJuIHI9ZixlPXUoaCxkLDApLGk9aC5sZW5ndGgsZ30sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtzPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe3M9ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixkKXtsZXQgZz1oLmNsaXBwaW5nUGxhbmVzLHg9aC5jbGlwSW50ZXJzZWN0aW9uLHY9aC5jbGlwU2hhZG93cyxtPW4uZ2V0KGgpO2lmKCFyfHxnPT09bnVsbHx8Zy5sZW5ndGg9PT0wfHxzJiYhdilzP3UobnVsbCk6YygpO2Vsc2V7bGV0IHA9cz8wOmksYj1wKjQsXz1tLmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1fLF89dShnLGYsYixkKTtmb3IobGV0IFM9MDtTIT09YjsrK1MpX1tTXT1lW1NdO20uY2xpcHBpbmdTdGF0ZT1fLHRoaXMubnVtSW50ZXJzZWN0aW9uPXg/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9cH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLGQsZyl7bGV0IHg9aCE9PW51bGw/aC5sZW5ndGg6MCx2PW51bGw7aWYoeCE9PTApe2lmKHY9bC52YWx1ZSxnIT09ITB8fHY9PT1udWxsKXtsZXQgbT1kK3gqNCxwPWYubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KHApLCh2PT09bnVsbHx8di5sZW5ndGg8bSkmJih2PW5ldyBGbG9hdDMyQXJyYXkobSkpO2ZvcihsZXQgYj0wLF89ZDtiIT09eDsrK2IsXys9NClvLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHAsYSksby5ub3JtYWwudG9BcnJheSh2LF8pLHZbXyszXT1vLmNvbnN0YW50fWwudmFsdWU9dixsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz14LHQubnVtSW50ZXJzZWN0aW9uPTAsdn19ZnVuY3Rpb24gSzEobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShvLGEpe3JldHVybiBhPT09VXU/by5tYXBwaW5nPUFvOmE9PT1CdSYmKG8ubWFwcGluZz1Dbyksb31mdW5jdGlvbiBpKG8pe2lmKG8mJm8uaXNUZXh0dXJlJiZvLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExKXtsZXQgYT1vLm1hcHBpbmc7aWYoYT09PVV1fHxhPT09QnUpaWYodC5oYXMobykpe2xldCBsPXQuZ2V0KG8pLnRleHR1cmU7cmV0dXJuIGUobCxvLm1hcHBpbmcpfWVsc2V7bGV0IGw9by5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgb2wobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixvKSx0LnNldChvLGMpLG8uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUsby5tYXBwaW5nKX1lbHNlIHJldHVybiBudWxsfX1yZXR1cm4gb31mdW5jdGlvbiByKG8pe2xldCBhPW8udGFyZ2V0O2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscik7bGV0IGw9dC5nZXQoYSk7bCE9PXZvaWQgMCYmKHQuZGVsZXRlKGEpLGwuZGlzcG9zZSgpKX1mdW5jdGlvbiBzKCl7dD1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OmksZGlzcG9zZTpzfX12YXIgVmk9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxzPS4xLG89MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1zLHRoaXMuZmFyPW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1zLHRoaXMudmlldy5oZWlnaHQ9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIscz1pLXQsbz1pK3QsYT1yK2UsbD1yLWU7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtzKz1jKnRoaXMudmlldy5vZmZzZXRYLG89cytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMocyxvLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsdGhpcy52aWV3IT09bnVsbCYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07VmkucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciBYcj1jbGFzcyBleHRlbmRzIEZue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07WHIucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIGtyPTQsbmk9OCxobj1NYXRoLnBvdygyLG5pKSx4MD1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0seTA9bmkta3IrMSt4MC5sZW5ndGgsQXI9MjAsVHU9bmV3IFZpLHtfbG9kUGxhbmVzOkdzLF9zaXplTG9kczptZyxfc2lnbWFzOlVhfT1RMSgpLGdnPW5ldyBmdCxBdT1udWxsLHppPSgxK01hdGguc3FydCg1KSkvMixDcj0xL3ppLHhnPVtuZXcgVCgxLDEsMSksbmV3IFQoLTEsMSwxKSxuZXcgVCgxLDEsLTEpLG5ldyBUKC0xLDEsLTEpLG5ldyBUKDAsemksQ3IpLG5ldyBUKDAsemksLUNyKSxuZXcgVChDciwwLHppKSxuZXcgVCgtQ3IsMCx6aSksbmV3IFQoemksQ3IsMCksbmV3IFQoLXppLENyLDApXSxhbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPWoxKEFyKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxlPTAsaT0uMSxyPTEwMCl7QXU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IHM9dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxpLHIscyksZT4wJiZ0aGlzLl9ibHVyKHMsMCwwLGUpLHRoaXMuX2FwcGx5UE1SRU0ocyksdGhpcy5fY2xlYW51cChzKSxzfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWZyb21DdWJlbWFwKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1fZygpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe3RoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQhPT1udWxsJiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fY3ViZW1hcFNoYWRlciE9PW51bGwmJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyIT09bnVsbCYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8R3MubGVuZ3RoO3QrKylHc1t0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KEF1KSx0LnNjaXNzb3JUZXN0PSExLEJhKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LGUpe0F1PXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBpPWV8fHRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsaSksdGhpcy5fYXBwbHlQTVJFTShpKSx0aGlzLl9jbGVhbnVwKGkpLGl9X2FsbG9jYXRlVGFyZ2V0cyh0KXtsZXQgZT17bWFnRmlsdGVyOmJlLG1pbkZpbHRlcjpiZSxnZW5lcmF0ZU1pcG1hcHM6ITEsdHlwZTpVcixmb3JtYXQ6UmUsZW5jb2Rpbmc6cmksZGVwdGhCdWZmZXI6ITF9LGk9eWcoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9PT1udWxsJiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9eWcoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgb2UoR3NbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLFR1KX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgYT1uZXcgU2UoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLHU9dGhpcy5fcmVuZGVyZXIsaD11LmF1dG9DbGVhcixmPXUudG9uZU1hcHBpbmc7dS5nZXRDbGVhckNvbG9yKGdnKSx1LnRvbmVNYXBwaW5nPXRpLHUuYXV0b0NsZWFyPSExO2xldCBkPW5ldyBraSh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpoZSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGc9bmV3IG9lKG5ldyBIaSxkKSx4PSExLHY9dC5iYWNrZ3JvdW5kO3Y/di5pc0NvbG9yJiYoZC5jb2xvci5jb3B5KHYpLHQuYmFja2dyb3VuZD1udWxsLHg9ITApOihkLmNvbG9yLmNvcHkoZ2cpLHg9ITApO2ZvcihsZXQgbT0wO208NjttKyspe2xldCBwPW0lMztwPT09MD8oYS51cC5zZXQoMCxsW21dLDApLGEubG9va0F0KGNbbV0sMCwwKSk6cD09PTE/KGEudXAuc2V0KDAsMCxsW21dKSxhLmxvb2tBdCgwLGNbbV0sMCkpOihhLnVwLnNldCgwLGxbbV0sMCksYS5sb29rQXQoMCwwLGNbbV0pKSxCYShyLHAqaG4sbT4yP2huOjAsaG4saG4pLHUuc2V0UmVuZGVyVGFyZ2V0KHIpLHgmJnUucmVuZGVyKGcsYSksdS5yZW5kZXIodCxhKX1nLmdlb21ldHJ5LmRpc3Bvc2UoKSxnLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9dn1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7bGV0IGk9dGhpcy5fcmVuZGVyZXIscj10Lm1hcHBpbmc9PT1Bb3x8dC5tYXBwaW5nPT09Q287cj8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPV9nKCkpLHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEpOnRoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCkpO2xldCBzPXI/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixvPW5ldyBvZShHc1swXSxzKSxhPXMudW5pZm9ybXM7YS5lbnZNYXAudmFsdWU9dCxyfHxhLnRleGVsU2l6ZS52YWx1ZS5zZXQoMS90LmltYWdlLndpZHRoLDEvdC5pbWFnZS5oZWlnaHQpLEJhKGUsMCwwLDMqaG4sMipobiksaS5zZXRSZW5kZXJUYXJnZXQoZSksaS5yZW5kZXIobyxUdSl9X2FwcGx5UE1SRU0odCl7bGV0IGU9dGhpcy5fcmVuZGVyZXIsaT1lLmF1dG9DbGVhcjtlLmF1dG9DbGVhcj0hMTtmb3IobGV0IHI9MTtyPHkwO3IrKyl7bGV0IHM9TWF0aC5zcXJ0KFVhW3JdKlVhW3JdLVVhW3ItMV0qVWFbci0xXSksbz14Z1soci0xKSV4Zy5sZW5ndGhdO3RoaXMuX2JsdXIodCxyLTEscixzLG8pfWUuYXV0b0NsZWFyPWl9X2JsdXIodCxlLGkscixzKXtsZXQgbz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LG8sZSxpLHIsImxhdGl0dWRpbmFsIixzKSx0aGlzLl9oYWxmQmx1cihvLHQsaSxpLHIsImxvbmdpdHVkaW5hbCIscyl9X2hhbGZCbHVyKHQsZSxpLHIscyxvLGEpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO28hPT0ibGF0aXR1ZGluYWwiJiZvIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IG9lKEdzW3JdLGMpLGY9Yy51bmlmb3JtcyxkPW1nW2ldLTEsZz1pc0Zpbml0ZShzKT9NYXRoLlBJLygyKmQpOjIqTWF0aC5QSS8oMipBci0xKSx4PXMvZyx2PWlzRmluaXRlKHMpPzErTWF0aC5mbG9vcih1KngpOkFyO3Y+QXImJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke3N9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7dn0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAke0FyfWApO2xldCBtPVtdLHA9MDtmb3IobGV0IEw9MDtMPEFyOysrTCl7bGV0IEE9TC94LEg9TWF0aC5leHAoLUEqQS8yKTttLnB1c2goSCksTD09PTA/cCs9SDpMPHYmJihwKz0yKkgpfWZvcihsZXQgTD0wO0w8bS5sZW5ndGg7TCsrKW1bTF09bVtMXS9wO2YuZW52TWFwLnZhbHVlPXQudGV4dHVyZSxmLnNhbXBsZXMudmFsdWU9dixmLndlaWdodHMudmFsdWU9bSxmLmxhdGl0dWRpbmFsLnZhbHVlPW89PT0ibGF0aXR1ZGluYWwiLGEmJihmLnBvbGVBeGlzLnZhbHVlPWEpLGYuZFRoZXRhLnZhbHVlPWcsZi5taXBJbnQudmFsdWU9bmktaTtsZXQgYj1tZ1tyXSxfPTMqTWF0aC5tYXgoMCxobi0yKmIpLFM9KHI9PT0wPzA6MipobikrMipiKihyPm5pLWtyP3Itbmkra3I6MCk7QmEoZSxfLFMsMypiLDIqYiksbC5zZXRSZW5kZXJUYXJnZXQoZSksbC5yZW5kZXIoaCxUdSl9fTtmdW5jdGlvbiBRMSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPW5pO2ZvcihsZXQgcj0wO3I8eTA7cisrKXtsZXQgcz1NYXRoLnBvdygyLGkpO3QucHVzaChzKTtsZXQgbz0xL3M7cj5uaS1rcj9vPXgwW3Itbmkra3ItMV06cj09PTAmJihvPTApLGUucHVzaChvKTtsZXQgYT0xLyhzLTEpLGw9LWEvMixjPTErYS8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LGQ9MyxnPTIseD0xLHY9bmV3IEZsb2F0MzJBcnJheShkKmYqaCksbT1uZXcgRmxvYXQzMkFycmF5KGcqZipoKSxwPW5ldyBGbG9hdDMyQXJyYXkoeCpmKmgpO2ZvcihsZXQgXz0wO188aDtfKyspe2xldCBTPV8lMyoyLzMtMSxMPV8+Mj8wOi0xLEE9W1MsTCwwLFMrMi8zLEwsMCxTKzIvMyxMKzEsMCxTLEwsMCxTKzIvMyxMKzEsMCxTLEwrMSwwXTt2LnNldChBLGQqZipfKSxtLnNldCh1LGcqZipfKTtsZXQgSD1bXyxfLF8sXyxfLF9dO3Auc2V0KEgseCpmKl8pfWxldCBiPW5ldyBIdDtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBRdCh2LGQpKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBRdChtLGcpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgUXQocCx4KSksbi5wdXNoKGIpLGk+a3ImJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24geWcobil7bGV0IHQ9bmV3IE5lKDMqaG4sMypobixuKTtyZXR1cm4gdC50ZXh0dXJlLm1hcHBpbmc9UmwsdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIEJhKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBqMShuKXtsZXQgdD1uZXcgRmxvYXQzMkFycmF5KG4pLGU9bmV3IFQoMCwxLDApO3JldHVybiBuZXcgWHIoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bn0sdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sc2FtcGxlczp7dmFsdWU6MX0sd2VpZ2h0czp7dmFsdWU6dH0sbGF0aXR1ZGluYWw6e3ZhbHVlOiExfSxkVGhldGE6e3ZhbHVlOjB9LG1pcEludDp7dmFsdWU6MH0scG9sZUF4aXM6e3ZhbHVlOmV9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gaW50IHNhbXBsZXM7CgkJCXVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdOwoJCQl1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7CgkJCXVuaWZvcm0gZmxvYXQgZFRoZXRhOwoJCQl1bmlmb3JtIGZsb2F0IG1pcEludDsKCQkJdW5pZm9ybSB2ZWMzIHBvbGVBeGlzOwoKCQkJI2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWCgkJCSNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CgoJCQl2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHsKCgkJCQlmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTsKCQkJCS8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvbgoJCQkJdmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGEKCQkJCQkrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhICkKCQkJCQkrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTsKCgkJCQlyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTsKCgkJCX0KCgkJCXZvaWQgbWFpbigpIHsKCgkJCQl2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJaWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7CgoJCQkJCWF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTsKCgkJCQl9CgoJCQkJYXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApOwoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApOwoKCQkJCWZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHsKCgkJCQkJaWYgKCBpID49IHNhbXBsZXMgKSB7CgoJCQkJCQlicmVhazsKCgkJCQkJfQoKCQkJCQlmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApOwoJCQkJCWdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApOwoKCQkJCX0KCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gdmcoKXtsZXQgbj1uZXcgSygxLDEpO3JldHVybiBuZXcgWHIoe25hbWU6IkVxdWlyZWN0YW5ndWxhclRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSx0ZXhlbFNpemU6e3ZhbHVlOm59fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7CgoJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoKCQkJCXZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7CgkJCQl2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJdmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7CgkJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQkJdmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54ICs9IHRleGVsU2l6ZS54OwoJCQkJdmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di55ICs9IHRleGVsU2l6ZS55OwoJCQkJdmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54IC09IHRleGVsU2l6ZS54OwoJCQkJdmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgoJCQkJdmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTsKCQkJCXZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6am4sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBfZygpe3JldHVybiBuZXcgWHIoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwOwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDsKCgkJCXZvaWQgbWFpbigpIHsKCgkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogdk91dHB1dERpcmVjdGlvbi54LCB2T3V0cHV0RGlyZWN0aW9uLnl6ICkgKTsKCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gamgoKXtyZXR1cm5gCgoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDsKCgkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCS8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb24KCQl2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHsKCgkJCXV2ID0gMi4wICogdXYgLSAxLjA7CgoJCQl2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTsKCgkJCWlmICggZmFjZSA9PSAwLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgoJCQkJZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OwoJCQkJZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7CgoJCQkJZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6CgoJCQl9CgoJCQlyZXR1cm4gZGlyZWN0aW9uOwoKCQl9CgoJCXZvaWQgbWFpbigpIHsKCgkJCXZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7CgoJCX0KCWB9ZnVuY3Rpb24gdFMobil7bGV0IHQ9bmV3IFdlYWtNYXAsZT1udWxsO2Z1bmN0aW9uIGkoYSl7aWYoYSYmYS5pc1RleHR1cmUpe2xldCBsPWEubWFwcGluZyxjPWw9PT1VdXx8bD09PUJ1LHU9bD09PUFvfHxsPT09Q287aWYoY3x8dSlpZihhLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmYS5uZWVkc1BNUkVNVXBkYXRlPT09ITApe2EubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChhKTtyZXR1cm4gZT09PW51bGwmJihlPW5ldyBhbChuKSksaD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhLGgpOmUuZnJvbUN1YmVtYXAoYSxoKSx0LnNldChhLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKGEpKXJldHVybiB0LmdldChhKS50ZXh0dXJlO3tsZXQgaD1hLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJnIoaCkpe2U9PT1udWxsJiYoZT1uZXcgYWwobikpO2xldCBmPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEpOmUuZnJvbUN1YmVtYXAoYSk7cmV0dXJuIHQuc2V0KGEsZiksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBhfWZ1bmN0aW9uIHIoYSl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylhW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIHMoYSl7bGV0IGw9YS50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIG8oKXt0PW5ldyBXZWFrTWFwLGUhPT1udWxsJiYoZS5kaXNwb3NlKCksZT1udWxsKX1yZXR1cm57Z2V0OmksZGlzcG9zZTpvfX1mdW5jdGlvbiBlUyhuKXtsZXQgdD17fTtmdW5jdGlvbiBlKGkpe2lmKHRbaV0hPT12b2lkIDApcmV0dXJuIHRbaV07bGV0IHI7c3dpdGNoKGkpe2Nhc2UiV0VCR0xfZGVwdGhfdGV4dHVyZSI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiOnI9bi5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTticmVhaztkZWZhdWx0OnI9bi5nZXRFeHRlbnNpb24oaSl9cmV0dXJuIHRbaV09cixyfXJldHVybntoYXM6ZnVuY3Rpb24oaSl7cmV0dXJuIGUoaSkhPT1udWxsfSxpbml0OmZ1bmN0aW9uKGkpe2kuaXNXZWJHTDI/ZSgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOihlKCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksZSgiT0VTX3RleHR1cmVfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSxlKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSxlKCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksZSgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxlKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpLGUoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLGUoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpLGUoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSxnZXQ6ZnVuY3Rpb24oaSl7bGV0IHI9ZShpKTtyZXR1cm4gcj09PW51bGwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitpKyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIikscn19fWZ1bmN0aW9uIG5TKG4sdCxlLGkpe2xldCByPXt9LHM9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbyhoKXtsZXQgZj1oLnRhcmdldDtmLmluZGV4IT09bnVsbCYmdC5yZW1vdmUoZi5pbmRleCk7Zm9yKGxldCBnIGluIGYuYXR0cmlidXRlcyl0LnJlbW92ZShmLmF0dHJpYnV0ZXNbZ10pO2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksZGVsZXRlIHJbZi5pZF07bGV0IGQ9cy5nZXQoZik7ZCYmKHQucmVtb3ZlKGQpLHMuZGVsZXRlKGYpKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KGYpLGYuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT09PSEwJiZkZWxldGUgZi5fbWF4SW5zdGFuY2VDb3VudCxlLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gYShoLGYpe3JldHVybiByW2YuaWRdPT09ITB8fChmLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHJbZi5pZF09ITAsZS5tZW1vcnkuZ2VvbWV0cmllcysrKSxmfWZ1bmN0aW9uIGwoaCl7bGV0IGY9aC5hdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBmKXQudXBkYXRlKGZbZ10sMzQ5NjIpO2xldCBkPWgubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBkKXtsZXQgeD1kW2ddO2ZvcihsZXQgdj0wLG09eC5sZW5ndGg7djxtO3YrKyl0LnVwZGF0ZSh4W3ZdLDM0OTYyKX19ZnVuY3Rpb24gYyhoKXtsZXQgZj1bXSxkPWguaW5kZXgsZz1oLmF0dHJpYnV0ZXMucG9zaXRpb24seD0wO2lmKGQhPT1udWxsKXtsZXQgcD1kLmFycmF5O3g9ZC52ZXJzaW9uO2ZvcihsZXQgYj0wLF89cC5sZW5ndGg7YjxfO2IrPTMpe2xldCBTPXBbYiswXSxMPXBbYisxXSxBPXBbYisyXTtmLnB1c2goUyxMLEwsQSxBLFMpfX1lbHNle2xldCBwPWcuYXJyYXk7eD1nLnZlcnNpb247Zm9yKGxldCBiPTAsXz1wLmxlbmd0aC8zLTE7YjxfO2IrPTMpe2xldCBTPWIrMCxMPWIrMSxBPWIrMjtmLnB1c2goUyxMLEwsQSxBLFMpfX1sZXQgdj1uZXcocDAoZik/c2w6cmwpKGYsMSk7di52ZXJzaW9uPXg7bGV0IG09cy5nZXQoaCk7bSYmdC5yZW1vdmUobSkscy5zZXQoaCx2KX1mdW5jdGlvbiB1KGgpe2xldCBmPXMuZ2V0KGgpO2lmKGYpe2xldCBkPWguaW5kZXg7ZCE9PW51bGwmJmYudmVyc2lvbjxkLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBzLmdldChoKX1yZXR1cm57Z2V0OmEsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIGlTKG4sdCxlLGkpe2xldCByPWkuaXNXZWJHTDIscztmdW5jdGlvbiBvKGYpe3M9Zn1sZXQgYSxsO2Z1bmN0aW9uIGMoZil7YT1mLnR5cGUsbD1mLmJ5dGVzUGVyRWxlbWVudH1mdW5jdGlvbiB1KGYsZCl7bi5kcmF3RWxlbWVudHMocyxkLGEsZipsKSxlLnVwZGF0ZShkLHMsMSl9ZnVuY3Rpb24gaChmLGQsZyl7aWYoZz09PTApcmV0dXJuO2xldCB4LHY7aWYocil4PW4sdj0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKHg9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSx2PSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIseD09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59eFt2XShzLGQsYSxmKmwsZyksZS51cGRhdGUoZCxzLGcpfXRoaXMuc2V0TW9kZT1vLHRoaXMuc2V0SW5kZXg9Yyx0aGlzLnJlbmRlcj11LHRoaXMucmVuZGVySW5zdGFuY2VzPWh9ZnVuY3Rpb24gclMobil7bGV0IHQ9e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxlPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07ZnVuY3Rpb24gaShzLG8sYSl7c3dpdGNoKGUuY2FsbHMrKyxvKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWEqKHMvMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWEqKHMvMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWEqKHMtMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWEqczticmVhaztjYXNlIDA6ZS5wb2ludHMrPWEqczticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixvKTticmVha319ZnVuY3Rpb24gcigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH1yZXR1cm57bWVtb3J5OnQscmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6cix1cGRhdGU6aX19dmFyIGNvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2NvLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtmdW5jdGlvbiBzUyhuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rpb24gb1Mobix0KXtyZXR1cm4gTWF0aC5hYnModFsxXSktTWF0aC5hYnMoblsxXSl9ZnVuY3Rpb24gd2cobix0KXtsZXQgZT0xLGk9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O2kgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZT0xMjc6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZT0zMjc2NzppIGluc3RhbmNlb2YgSW50MzJBcnJheT9lPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsaSksbi5kaXZpZGVTY2FsYXIoZSl9ZnVuY3Rpb24gYVMobix0LGUpe2xldCBpPXt9LHI9bmV3IEZsb2F0MzJBcnJheSg4KSxzPW5ldyBXZWFrTWFwLG89bmV3IFQsYT1bXTtmb3IobGV0IGM9MDtjPDg7YysrKWFbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgZD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBnPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCx4PXMuZ2V0KHUpO2lmKHg9PT12b2lkIDB8fHguY291bnQhPT1nKXtsZXQgUj1mdW5jdGlvbigpe1guZGlzcG9zZSgpLHMuZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsUil9O3ghPT12b2lkIDAmJngudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHA9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sXz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLFM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LEw9cD09PSEwPzI6MSxBPVMqTCxIPTE7QT50Lm1heFRleHR1cmVTaXplJiYoSD1NYXRoLmNlaWwoQS90Lm1heFRleHR1cmVTaXplKSxBPXQubWF4VGV4dHVyZVNpemUpO2xldCB0dD1uZXcgRmxvYXQzMkFycmF5KEEqSCo0KmcpLFg9bmV3IGNvKHR0LEEsSCxnKTtYLmZvcm1hdD1SZSxYLnR5cGU9VWksWC5uZWVkc1VwZGF0ZT0hMDtsZXQgeT1MKjQ7Zm9yKGxldCBEPTA7RDxnO0QrKyl7bGV0IEY9YltEXSx6PV9bRF0sTj1BKkgqNCpEO2ZvcihsZXQgVj0wO1Y8Ri5jb3VudDtWKyspe28uZnJvbUJ1ZmZlckF0dHJpYnV0ZShGLFYpLEYubm9ybWFsaXplZD09PSEwJiZ3ZyhvLEYpO2xldCBRPVYqeTt0dFtOK1ErMF09by54LHR0W04rUSsxXT1vLnksdHRbTitRKzJdPW8ueix0dFtOK1ErM109MCxwPT09ITAmJihvLmZyb21CdWZmZXJBdHRyaWJ1dGUoeixWKSx6Lm5vcm1hbGl6ZWQ9PT0hMCYmd2cobyx6KSx0dFtOK1ErNF09by54LHR0W04rUSs1XT1vLnksdHRbTitRKzZdPW8ueix0dFtOK1ErN109MCl9fXg9e2NvdW50OmcsdGV4dHVyZTpYLHNpemU6bmV3IEsoQSxIKX0scy5zZXQodSx4KSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFIpfWxldCB2PTA7Zm9yKGxldCBwPTA7cDxkLmxlbmd0aDtwKyspdis9ZFtwXTtsZXQgbT11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS12O2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLG0pLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGQpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlIix4LnRleHR1cmUsZSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIix4LnNpemUpfWVsc2V7bGV0IGc9ZD09PXZvaWQgMD8wOmQubGVuZ3RoLHg9aVt1LmlkXTtpZih4PT09dm9pZCAwfHx4Lmxlbmd0aCE9PWcpe3g9W107Zm9yKGxldCBfPTA7XzxnO18rKyl4W19dPVtfLDBdO2lbdS5pZF09eH1mb3IobGV0IF89MDtfPGc7XysrKXtsZXQgUz14W19dO1NbMF09XyxTWzFdPWRbX119eC5zb3J0KG9TKTtmb3IobGV0IF89MDtfPDg7XysrKV88ZyYmeFtfXVsxXT8oYVtfXVswXT14W19dWzBdLGFbX11bMV09eFtfXVsxXSk6KGFbX11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYVtfXVsxXT0wKTthLnNvcnQoc1MpO2xldCB2PXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG09dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHA9MDtmb3IobGV0IF89MDtfPDg7XysrKXtsZXQgUz1hW19dLEw9U1swXSxBPVNbMV07TCE9PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSJiZBPyh2JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pIT09dltMXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitfLHZbTF0pLG0mJnUuZ2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrXykhPT1tW0xdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18sbVtMXSkscltfXT1BLHArPUEpOih2JiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrXyksbSYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitfKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18pLHJbX109MCl9bGV0IGI9dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtcDtmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixiKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixyKX19cmV0dXJue3VwZGF0ZTpsfX1mdW5jdGlvbiBsUyhuLHQsZSxpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBzKGwpe2xldCBjPWkucmVuZGVyLmZyYW1lLHU9bC5nZW9tZXRyeSxoPXQuZ2V0KGwsdSk7cmV0dXJuIHIuZ2V0KGgpIT09YyYmKHQudXBkYXRlKGgpLHIuc2V0KGgsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYobC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKT09PSExJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLGwuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGh9ZnVuY3Rpb24gbygpe3I9bmV3IFdlYWtNYXB9ZnVuY3Rpb24gYShsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLGMuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpzLGRpc3Bvc2U6b319dmFyIGxsPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2xsLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIHYwPW5ldyBhZSxfMD1uZXcgY28sdzA9bmV3IGxsLE0wPW5ldyBXcixNZz1bXSxiZz1bXSxTZz1uZXcgRmxvYXQzMkFycmF5KDE2KSxFZz1uZXcgRmxvYXQzMkFycmF5KDkpLFRnPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gZXMobix0LGUpe2xldCBpPW5bMF07aWYoaTw9MHx8aT4wKXJldHVybiBuO2xldCByPXQqZSxzPU1nW3JdO2lmKHM9PT12b2lkIDAmJihzPW5ldyBGbG9hdDMyQXJyYXkociksTWdbcl09cyksdCE9PTApe2kudG9BcnJheShzLDApO2ZvcihsZXQgbz0xLGE9MDtvIT09dDsrK28pYSs9ZSxuW29dLnRvQXJyYXkocyxhKX1yZXR1cm4gc31mdW5jdGlvbiBMZShuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFRlKG4sdCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW5bZV09dFtlXX1mdW5jdGlvbiBQbChuLHQpe2xldCBlPWJnW3RdO2U9PT12b2lkIDAmJihlPW5ldyBJbnQzMkFycmF5KHQpLGJnW3RdPWUpO2ZvcihsZXQgaT0wO2khPT10OysraSllW2ldPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiBlfWZ1bmN0aW9uIGNTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFmKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHVTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKGVbMF0hPT10Lnh8fGVbMV0hPT10LnkpJiYobi51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLGVbMF09dC54LGVbMV09dC55KTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTJmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gaFMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQueikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoZVswXSE9PXQucnx8ZVsxXSE9PXQuZ3x8ZVsyXSE9PXQuYikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLGVbMF09dC5yLGVbMV09dC5nLGVbMl09dC5iKTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTNmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gZlMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQuenx8ZVszXSE9PXQudykmJihuLnVuaWZvcm00Zih0aGlzLmFkZHIsdC54LHQueSx0LnosdC53KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlWzNdPXQudyk7ZWxzZXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLHQpLFRlKGUsdCl9fWZ1bmN0aW9uIGRTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47VGcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsVGcpLFRlKGUsaSl9fWZ1bmN0aW9uIHBTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47RWcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRWcpLFRlKGUsaSl9fWZ1bmN0aW9uIG1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47U2cuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsU2cpLFRlKGUsaSl9fWZ1bmN0aW9uIGdTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHhTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiB5UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTNpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gdlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIF9TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiB3UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIE1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gYlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiBTUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZTJEKHR8fHYwLHIpfWZ1bmN0aW9uIEVTKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUzRCh0fHx3MCxyKX1mdW5jdGlvbiBUUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZUN1YmUodHx8TTAscil9ZnVuY3Rpb24gQVMobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTJEQXJyYXkodHx8XzAscil9ZnVuY3Rpb24gQ1Mobil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gY1M7Y2FzZSAzNTY2NDpyZXR1cm4gdVM7Y2FzZSAzNTY2NTpyZXR1cm4gaFM7Y2FzZSAzNTY2NjpyZXR1cm4gZlM7Y2FzZSAzNTY3NDpyZXR1cm4gZFM7Y2FzZSAzNTY3NTpyZXR1cm4gcFM7Y2FzZSAzNTY3NjpyZXR1cm4gbVM7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGdTO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4geFM7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB5UztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIHZTO2Nhc2UgNTEyNTpyZXR1cm4gX1M7Y2FzZSAzNjI5NDpyZXR1cm4gd1M7Y2FzZSAzNjI5NTpyZXR1cm4gTVM7Y2FzZSAzNjI5NjpyZXR1cm4gYlM7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBTUztjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gRVM7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gVFM7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gQVN9fWZ1bmN0aW9uIFJTKG4sdCl7bi51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBMUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDIpO24udW5pZm9ybTJmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gUFMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSwzKTtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIERTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsNCk7bi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBJUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDQpO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gTlMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSw5KTtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIEZTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsMTYpO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gelMobix0KXtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFVTKG4sdCl7bi51bmlmb3JtMml2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCUyhuLHQpe24udW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gT1Mobix0KXtuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGtTKG4sdCl7bi51bmlmb3JtMXVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gSFMobix0KXtuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWUyhuLHQpe24udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEdTKG4sdCl7bi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gV1Mobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNhZmVTZXRUZXh0dXJlMkQodFtzXXx8djAscltzXSl9ZnVuY3Rpb24gcVMobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNldFRleHR1cmUzRCh0W3NdfHx3MCxyW3NdKX1mdW5jdGlvbiBYUyhuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1QbChlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBzPTA7cyE9PWk7KytzKWUuc2FmZVNldFRleHR1cmVDdWJlKHRbc118fE0wLHJbc10pfWZ1bmN0aW9uIFlTKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVBsKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IHM9MDtzIT09aTsrK3MpZS5zZXRUZXh0dXJlMkRBcnJheSh0W3NdfHxfMCxyW3NdKX1mdW5jdGlvbiBaUyhuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBSUztjYXNlIDM1NjY0OnJldHVybiBMUztjYXNlIDM1NjY1OnJldHVybiBQUztjYXNlIDM1NjY2OnJldHVybiBEUztjYXNlIDM1Njc0OnJldHVybiBJUztjYXNlIDM1Njc1OnJldHVybiBOUztjYXNlIDM1Njc2OnJldHVybiBGUztjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gelM7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBVUztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIEJTO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gT1M7Y2FzZSA1MTI1OnJldHVybiBrUztjYXNlIDM2Mjk0OnJldHVybiBIUztjYXNlIDM2Mjk1OnJldHVybiBWUztjYXNlIDM2Mjk2OnJldHVybiBHUztjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFdTO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBxUztjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBYUztjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBZU319ZnVuY3Rpb24gSlMobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9Q1ModC50eXBlKX1mdW5jdGlvbiBiMChuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPVpTKHQudHlwZSl9YjAucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuY2FjaGU7biBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmdC5sZW5ndGghPT1uLmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpLFRlKHQsbil9O2Z1bmN0aW9uIFMwKG4pe3RoaXMuaWQ9bix0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1TMC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKXtsZXQgbz1pW3JdO28uc2V0VmFsdWUobix0W28uaWRdLGUpfX07dmFyIEN1PS8oXHcrKShcXSk/KFxbfFwuKT8vZztmdW5jdGlvbiBBZyhuLHQpe24uc2VxLnB1c2godCksbi5tYXBbdC5pZF09dH1mdW5jdGlvbiAkUyhuLHQsZSl7bGV0IGk9bi5uYW1lLHI9aS5sZW5ndGg7Zm9yKEN1Lmxhc3RJbmRleD0wOzspe2xldCBzPUN1LmV4ZWMoaSksbz1DdS5sYXN0SW5kZXgsYT1zWzFdLGw9c1syXT09PSJdIixjPXNbM107aWYobCYmKGE9YXwwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZvKzI9PT1yKXtBZyhlLGM9PT12b2lkIDA/bmV3IEpTKGEsbix0KTpuZXcgYjAoYSxuLHQpKTticmVha31lbHNle2xldCBoPWUubWFwW2FdO2g9PT12b2lkIDAmJihoPW5ldyBTMChhKSxBZyhlLGgpKSxlPWh9fX1mdW5jdGlvbiBpaShuLHQpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2xldCBlPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzE4KTtmb3IobGV0IGk9MDtpPGU7KytpKXtsZXQgcj1uLmdldEFjdGl2ZVVuaWZvcm0odCxpKSxzPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHQsci5uYW1lKTskUyhyLHMsdGhpcyl9fWlpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTtyIT09dm9pZCAwJiZyLnNldFZhbHVlKG4sZSxpKX07aWkucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO2khPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUobixlLGkpfTtpaS51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAscz10Lmxlbmd0aDtyIT09czsrK3Ipe2xldCBvPXRbcl0sYT1lW28uaWRdO2EubmVlZHNVcGRhdGUhPT0hMSYmby5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fTtpaS5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9bltpXTtzLmlkIGluIHQmJmUucHVzaChzKX1yZXR1cm4gZX07ZnVuY3Rpb24gQ2cobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfXZhciBLUz0wO2Z1bmN0aW9uIFFTKG4pe2xldCB0PW4uc3BsaXQoYApgKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPWUrMSsiOiAiK3RbZV07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGpTKG4pe3N3aXRjaChuKXtjYXNlIHJpOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSAkdDpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6IixuKSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX1mdW5jdGlvbiBSZyhuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiZyPT09IiI/IiI6ZS50b1VwcGVyQ2FzZSgpK2AKCmArcitgCgpgK1FTKG4uZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiB0RShuLHQpe2xldCBlPWpTKHQpO3JldHVybiJ2ZWM0ICIrbisiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK2VbMF0rZVsxXSsiOyB9In1mdW5jdGlvbiBlRShuLHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIEF3OmU9IkxpbmVhciI7YnJlYWs7Y2FzZSBDdzplPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSBSdzplPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgTHc6ZT0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSBQdzplPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCksZT0iTGluZWFyIn1yZXR1cm4idmVjMyAiK24rIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIG5FKG4pe3JldHVybltuLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxuLmVudk1hcEN1YmVVVnx8bi5idW1wTWFwfHxuLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8bi5jbGVhcmNvYXROb3JtYWxNYXB8fG4uZmxhdFNoYWRpbmd8fG4uc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKG4uZXh0ZW5zaW9uRnJhZ0RlcHRofHxuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixuLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwfHxuLnRyYW5zbWlzc2lvbikmJm4ucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoJHMpLmpvaW4oYApgKX1mdW5jdGlvbiBpRShuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTtpIT09ITEmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiByRShuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBzPW4uZ2V0QWN0aXZlQXR0cmliKHQsciksbz1zLm5hbWUsYT0xO3MudHlwZT09PTM1Njc0JiYoYT0yKSxzLnR5cGU9PT0zNTY3NSYmKGE9Mykscy50eXBlPT09MzU2NzYmJihhPTQpLGVbb109e3R5cGU6cy50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxvKSxsb2NhdGlvblNpemU6YX19cmV0dXJuIGV9ZnVuY3Rpb24gJHMobil7cmV0dXJuIG4hPT0iIn1mdW5jdGlvbiBMZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBQZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzLXQubnVtQ2xpcEludGVyc2VjdGlvbil9dmFyIHNFPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gcXUobil7cmV0dXJuIG4ucmVwbGFjZShzRSxvRSl9ZnVuY3Rpb24gb0Uobix0KXtsZXQgZT1QdFt0XTtpZihlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gcXUoZSl9dmFyIGFFPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csbEU9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBEZyhuKXtyZXR1cm4gbi5yZXBsYWNlKGxFLEUwKS5yZXBsYWNlKGFFLGNFKX1mdW5jdGlvbiBjRShuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksRTAobix0LGUsaSl9ZnVuY3Rpb24gRTAobix0LGUsaSl7bGV0IHI9IiI7Zm9yKGxldCBzPXBhcnNlSW50KHQpO3M8cGFyc2VJbnQoZSk7cysrKXIrPWkucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK3MrIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLHMpO3JldHVybiByfWZ1bmN0aW9uIElnKG4pe2xldCB0PSJwcmVjaXNpb24gIituLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtuLnByZWNpc2lvbisiIGludDsiO3JldHVybiBuLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDpuLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6bi5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gdUUobil7bGV0IHQ9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gbi5zaGFkb3dNYXBUeXBlPT09bDA/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjpuLnNoYWRvd01hcFR5cGU9PT1zdz90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6bi5zaGFkb3dNYXBUeXBlPT09SnMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIGhFKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIEFvOmNhc2UgQ286dD0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSBSbDpjYXNlIEtoOnQ9IkVOVk1BUF9UWVBFX0NVQkVfVVYiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGZFKG4pe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIENvOmNhc2UgS2g6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZEUobil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIENsOnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBFdzp0PSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIFR3OnQ9IkVOVk1BUF9CTEVORElOR19BREQiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIHBFKG4sdCxlLGkpe2xldCByPW4uZ2V0Q29udGV4dCgpLHM9ZS5kZWZpbmVzLG89ZS52ZXJ0ZXhTaGFkZXIsYT1lLmZyYWdtZW50U2hhZGVyLGw9dUUoZSksYz1oRShlKSx1PWZFKGUpLGg9ZEUoZSksZj1lLmlzV2ViR0wyPyIiOm5FKGUpLGQ9aUUocyksZz1yLmNyZWF0ZVByb2dyYW0oKSx4LHYsbT1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rYApgOiIiO2UuaXNSYXdTaGFkZXJNYXRlcmlhbD8oeD1bZF0uZmlsdGVyKCRzKS5qb2luKGAKYCkseC5sZW5ndGg+MCYmKHgrPWAKYCksdj1bZixkXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2Lmxlbmd0aD4wJiYodis9YApgKSk6KHg9W0lnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiZlLmZsYXRTaGFkaW5nPT09ITE/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIglhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCIJYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiCWF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiCWF0dHJpYnV0ZSB2ZWM0IGNvbG9yOyIsIiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIiwiCWF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZiAoIGRlZmluZWQoIFVTRV9NT1JQSFRBUkdFVFMgKSAmJiAhIGRlZmluZWQoIE1PUlBIVEFSR0VUU19URVhUVVJFICkgKSIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiCSNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDI7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiCSNlbHNlIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDY7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiCSNlbmRpZiIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfU0tJTk5JTkciLCIJYXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIglhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsYApgXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2PVtmLElnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitoOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsZS50b25lTWFwcGluZyE9PXRpPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsZS50b25lTWFwcGluZyE9PXRpP1B0LnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsZS50b25lTWFwcGluZyE9PXRpP2VFKCJ0b25lTWFwcGluZyIsZS50b25lTWFwcGluZyk6IiIsZS5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixlLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixQdC5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCx0RSgibGluZWFyVG9PdXRwdXRUZXhlbCIsZS5vdXRwdXRFbmNvZGluZyksZS5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2UuZGVwdGhQYWNraW5nOiIiLGAKYF0uZmlsdGVyKCRzKS5qb2luKGAKYCkpLG89cXUobyksbz1MZyhvLGUpLG89UGcobyxlKSxhPXF1KGEpLGE9TGcoYSxlKSxhPVBnKGEsZSksbz1EZyhvKSxhPURnKGEpLGUuaXNXZWJHTDImJmUuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYobT1gI3ZlcnNpb24gMzAwIGVzCmAseD1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK3gsdj1bIiNkZWZpbmUgdmFyeWluZyBpbiIsZS5nbHNsVmVyc2lvbj09PW5nPyIiOiJsYXlvdXQobG9jYXRpb24gPSAwKSBvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7IixlLmdsc2xWZXJzaW9uPT09bmc/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oYApgKStgCmArdik7bGV0IHA9bSt4K28sYj1tK3YrYSxfPUNnKHIsMzU2MzMscCksUz1DZyhyLDM1NjMyLGIpO2lmKHIuYXR0YWNoU2hhZGVyKGcsXyksci5hdHRhY2hTaGFkZXIoZyxTKSxlLmluZGV4MEF0dHJpYnV0ZU5hbWUhPT12b2lkIDA/ci5iaW5kQXR0cmliTG9jYXRpb24oZywwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ZS5tb3JwaFRhcmdldHM9PT0hMCYmci5iaW5kQXR0cmliTG9jYXRpb24oZywwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZyksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IEg9ci5nZXRQcm9ncmFtSW5mb0xvZyhnKS50cmltKCksdHQ9ci5nZXRTaGFkZXJJbmZvTG9nKF8pLnRyaW0oKSxYPXIuZ2V0U2hhZGVySW5mb0xvZyhTKS50cmltKCkseT0hMCxSPSEwO2lmKHIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE0KT09PSExKXt5PSExO2xldCBEPVJnKHIsXywidmVydGV4IiksRj1SZyhyLFMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIityLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK3IuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE1KStgCgpQcm9ncmFtIEluZm8gTG9nOiBgK0grYApgK0QrYApgK0YpfWVsc2UgSCE9PSIiP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsSCk6KHR0PT09IiJ8fFg9PT0iIikmJihSPSExKTtSJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6eSxwcm9ncmFtTG9nOkgsdmVydGV4U2hhZGVyOntsb2c6dHQscHJlZml4Onh9LGZyYWdtZW50U2hhZGVyOntsb2c6WCxwcmVmaXg6dn19KX1yLmRlbGV0ZVNoYWRlcihfKSxyLmRlbGV0ZVNoYWRlcihTKTtsZXQgTDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIEw9PT12b2lkIDAmJihMPW5ldyBpaShyLGcpKSxMfTtsZXQgQTtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEE9PT12b2lkIDAmJihBPXJFKHIsZykpLEF9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0oZyksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPUtTKyssdGhpcy5jYWNoZUtleT10LHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPWcsdGhpcy52ZXJ0ZXhTaGFkZXI9Xyx0aGlzLmZyYWdtZW50U2hhZGVyPVMsdGhpc312YXIgbUU9MCxYdT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hhZGVyQ2FjaGU9bmV3IE1hcCx0aGlzLm1hdGVyaWFsQ2FjaGU9bmV3IE1hcH11cGRhdGUodCl7bGV0IGU9dC52ZXJ0ZXhTaGFkZXIsaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoZSkscz10aGlzLl9nZXRTaGFkZXJTdGFnZShpKSxvPXRoaXMuX2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCk7cmV0dXJuIG8uaGFzKHIpPT09ITEmJihvLmFkZChyKSxyLnVzZWRUaW1lcysrKSxvLmhhcyhzKT09PSExJiYoby5hZGQocykscy51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLGkudXNlZFRpbWVzPT09MCYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiBlLmhhcyh0KT09PSExJiZlLnNldCh0LG5ldyBTZXQpLGUuZ2V0KHQpfV9nZXRTaGFkZXJTdGFnZSh0KXtsZXQgZT10aGlzLnNoYWRlckNhY2hlO2lmKGUuaGFzKHQpPT09ITEpe2xldCBpPW5ldyBZdTtlLnNldCh0LGkpfXJldHVybiBlLmdldCh0KX19LFl1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1tRSsrLHRoaXMudXNlZFRpbWVzPTB9fTtmdW5jdGlvbiBnRShuLHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgaWwsbD1uZXcgWHUsYz1bXSx1PXIuaXNXZWJHTDIsaD1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1yLmZsb2F0VmVydGV4VGV4dHVyZXMsZD1yLm1heFZlcnRleFVuaWZvcm1zLGc9ci52ZXJ0ZXhUZXh0dXJlcyx4PXIucHJlY2lzaW9uLHY9e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiBtKHkpe2xldCBEPXkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigoZC0yMCkvNCksTj1NYXRoLm1pbih6LEQubGVuZ3RoKTtyZXR1cm4gTjxELmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitELmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK04rIi4iKSwwKTpOfX1mdW5jdGlvbiBwKHksUixELEYseil7bGV0IE49Ri5mb2csVj15LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFE9KHkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lOnQpLmdldCh5LmVudk1hcHx8ViksYXQ9dlt5LnR5cGVdLEc9ei5pc1NraW5uZWRNZXNoP20oeik6MDt5LnByZWNpc2lvbiE9PW51bGwmJih4PXIuZ2V0TWF4UHJlY2lzaW9uKHkucHJlY2lzaW9uKSx4IT09eS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6Iix5LnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLHgsImluc3RlYWQuIikpO2xldCAkLGx0LGR0LHh0O2lmKGF0KXtsZXQgQj1mblthdF07JD1CLnZlcnRleFNoYWRlcixsdD1CLmZyYWdtZW50U2hhZGVyfWVsc2UgJD15LnZlcnRleFNoYWRlcixsdD15LmZyYWdtZW50U2hhZGVyLGwudXBkYXRlKHkpLGR0PWwuZ2V0VmVydGV4U2hhZGVySUQoeSkseHQ9bC5nZXRGcmFnbWVudFNoYWRlcklEKHkpO2xldCBrPW4uZ2V0UmVuZGVyVGFyZ2V0KCksRnQ9eS5hbHBoYVRlc3Q+MCxtdD15LmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOmF0LHNoYWRlck5hbWU6eS50eXBlLHZlcnRleFNoYWRlcjokLGZyYWdtZW50U2hhZGVyOmx0LGRlZmluZXM6eS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmR0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6eHQsaXNSYXdTaGFkZXJNYXRlcmlhbDp5LmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjp5Lmdsc2xWZXJzaW9uLHByZWNpc2lvbjp4LGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmcsb3V0cHV0RW5jb2Rpbmc6az09PW51bGw/bi5vdXRwdXRFbmNvZGluZzprLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9rLnRleHR1cmUuZW5jb2Rpbmc6cmksbWFwOiEheS5tYXAsbWF0Y2FwOiEheS5tYXRjYXAsZW52TWFwOiEhUSxlbnZNYXBNb2RlOlEmJlEubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFRJiYoUS5tYXBwaW5nPT09Umx8fFEubWFwcGluZz09PUtoKSxsaWdodE1hcDohIXkubGlnaHRNYXAsYW9NYXA6ISF5LmFvTWFwLGVtaXNzaXZlTWFwOiEheS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEheS5idW1wTWFwLG5vcm1hbE1hcDohIXkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOnkubm9ybWFsTWFwVHlwZT09PWp3LHRhbmdlbnRTcGFjZU5vcm1hbE1hcDp5Lm5vcm1hbE1hcFR5cGU9PT10cyxkZWNvZGVWaWRlb1RleHR1cmU6ISF5Lm1hcCYmeS5tYXAuaXNWaWRlb1RleHR1cmU9PT0hMCYmeS5tYXAuZW5jb2Rpbmc9PT0kdCxjbGVhcmNvYXQ6bXQsY2xlYXJjb2F0TWFwOm10JiYhIXkuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDptdCYmISF5LmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6bXQmJiEheS5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEheS5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEheS5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEheS5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISF5LnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEheS5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEheS5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEheS5hbHBoYU1hcCxhbHBoYVRlc3Q6RnQsYWxwaGFXcml0ZTp5LmFscGhhV3JpdGV8fHkudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISF5LmdyYWRpZW50TWFwLHNoZWVuOnkuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEheS5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEheS5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246eS50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISF5LnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISF5LnRoaWNrbmVzc01hcCxjb21iaW5lOnkuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIXkubm9ybWFsTWFwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQsdmVydGV4Q29sb3JzOnkudmVydGV4Q29sb3JzLHZlcnRleEFscGhhczp5LnZlcnRleENvbG9ycz09PSEwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiZ6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemU9PT00LHZlcnRleFV2czohIXkubWFwfHwhIXkuYnVtcE1hcHx8ISF5Lm5vcm1hbE1hcHx8ISF5LnNwZWN1bGFyTWFwfHwhIXkuYWxwaGFNYXB8fCEheS5lbWlzc2l2ZU1hcHx8ISF5LnJvdWdobmVzc01hcHx8ISF5Lm1ldGFsbmVzc01hcHx8ISF5LmNsZWFyY29hdE1hcHx8ISF5LmNsZWFyY29hdFJvdWdobmVzc01hcHx8ISF5LmNsZWFyY29hdE5vcm1hbE1hcHx8ISF5LmRpc3BsYWNlbWVudE1hcHx8ISF5LnRyYW5zbWlzc2lvbk1hcHx8ISF5LnRoaWNrbmVzc01hcHx8ISF5LnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIXkuc3BlY3VsYXJDb2xvck1hcHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCx1dnNWZXJ0ZXhPbmx5OiEoISF5Lm1hcHx8ISF5LmJ1bXBNYXB8fCEheS5ub3JtYWxNYXB8fCEheS5zcGVjdWxhck1hcHx8ISF5LmFscGhhTWFwfHwhIXkuZW1pc3NpdmVNYXB8fCEheS5yb3VnaG5lc3NNYXB8fCEheS5tZXRhbG5lc3NNYXB8fCEheS5jbGVhcmNvYXROb3JtYWxNYXB8fHkudHJhbnNtaXNzaW9uPjB8fCEheS50cmFuc21pc3Npb25NYXB8fCEheS50aGlja25lc3NNYXB8fCEheS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISF5LnNwZWN1bGFyQ29sb3JNYXB8fHkuc2hlZW4+MHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCkmJiEheS5kaXNwbGFjZW1lbnRNYXAsZm9nOiEhTix1c2VGb2c6eS5mb2csZm9nRXhwMjpOJiZOLmlzRm9nRXhwMixmbGF0U2hhZGluZzohIXkuZmxhdFNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOnkuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6aCxza2lubmluZzp6LmlzU2tpbm5lZE1lc2g9PT0hMCYmRz4wLG1heEJvbmVzOkcsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpSLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpSLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOlIuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6Ui5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpSLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpSLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpSLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOlIuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6by5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjpvLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6eS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpuLnNoYWRvd01hcC5lbmFibGVkJiZELmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6bi5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzp5LnRvbmVNYXBwZWQ/bi50b25lTWFwcGluZzp0aSxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czpuLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTp5LnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDp5LnNpZGU9PT1IcixmbGlwU2lkZWQ6eS5zaWRlPT09aGUsZGVwdGhQYWNraW5nOnkuZGVwdGhQYWNraW5nIT09dm9pZCAwP3kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6eS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOnkuZXh0ZW5zaW9ucyYmeS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6eS5leHRlbnNpb25zJiZ5LmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTp5LmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKHkpe2xldCBSPVtdO2lmKHkuc2hhZGVySUQ/Ui5wdXNoKHkuc2hhZGVySUQpOihSLnB1c2goeS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksUi5wdXNoKHkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLHkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IEQgaW4geS5kZWZpbmVzKVIucHVzaChEKSxSLnB1c2goeS5kZWZpbmVzW0RdKTtyZXR1cm4geS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihfKFIseSksUyhSLHkpLFIucHVzaChuLm91dHB1dEVuY29kaW5nKSksUi5wdXNoKHkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxSLmpvaW4oKX1mdW5jdGlvbiBfKHksUil7eS5wdXNoKFIucHJlY2lzaW9uKSx5LnB1c2goUi5vdXRwdXRFbmNvZGluZykseS5wdXNoKFIuZW52TWFwTW9kZSkseS5wdXNoKFIuY29tYmluZSkseS5wdXNoKFIudmVydGV4VXZzKSx5LnB1c2goUi5mb2dFeHAyKSx5LnB1c2goUi5zaXplQXR0ZW51YXRpb24pLHkucHVzaChSLm1heEJvbmVzKSx5LnB1c2goUi5tb3JwaFRhcmdldHNDb3VudCkseS5wdXNoKFIubnVtRGlyTGlnaHRzKSx5LnB1c2goUi5udW1Qb2ludExpZ2h0cykseS5wdXNoKFIubnVtU3BvdExpZ2h0cykseS5wdXNoKFIubnVtSGVtaUxpZ2h0cykseS5wdXNoKFIubnVtUmVjdEFyZWFMaWdodHMpLHkucHVzaChSLm51bURpckxpZ2h0U2hhZG93cykseS5wdXNoKFIubnVtUG9pbnRMaWdodFNoYWRvd3MpLHkucHVzaChSLm51bVNwb3RMaWdodFNoYWRvd3MpLHkucHVzaChSLnNoYWRvd01hcFR5cGUpLHkucHVzaChSLnRvbmVNYXBwaW5nKSx5LnB1c2goUi5udW1DbGlwcGluZ1BsYW5lcykseS5wdXNoKFIubnVtQ2xpcEludGVyc2VjdGlvbikseS5wdXNoKFIuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gUyh5LFIpe2EuZGlzYWJsZUFsbCgpLFIuaXNXZWJHTDImJmEuZW5hYmxlKDApLFIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmYS5lbmFibGUoMSksUi5pbnN0YW5jaW5nJiZhLmVuYWJsZSgyKSxSLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksUi5tYXAmJmEuZW5hYmxlKDQpLFIubWF0Y2FwJiZhLmVuYWJsZSg1KSxSLmVudk1hcCYmYS5lbmFibGUoNiksUi5lbnZNYXBDdWJlVVYmJmEuZW5hYmxlKDcpLFIubGlnaHRNYXAmJmEuZW5hYmxlKDgpLFIuYW9NYXAmJmEuZW5hYmxlKDkpLFIuZW1pc3NpdmVNYXAmJmEuZW5hYmxlKDEwKSxSLmJ1bXBNYXAmJmEuZW5hYmxlKDExKSxSLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLFIub2JqZWN0U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDEzKSxSLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmYS5lbmFibGUoMTQpLFIuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksUi5jbGVhcmNvYXRNYXAmJmEuZW5hYmxlKDE2KSxSLmNsZWFyY29hdFJvdWdobmVzc01hcCYmYS5lbmFibGUoMTcpLFIuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksUi5kaXNwbGFjZW1lbnRNYXAmJmEuZW5hYmxlKDE5KSxSLnNwZWN1bGFyTWFwJiZhLmVuYWJsZSgyMCksUi5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxSLm1ldGFsbmVzc01hcCYmYS5lbmFibGUoMjIpLFIuZ3JhZGllbnRNYXAmJmEuZW5hYmxlKDIzKSxSLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksUi5hbHBoYVRlc3QmJmEuZW5hYmxlKDI1KSxSLnZlcnRleENvbG9ycyYmYS5lbmFibGUoMjYpLFIudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksUi52ZXJ0ZXhVdnMmJmEuZW5hYmxlKDI4KSxSLnZlcnRleFRhbmdlbnRzJiZhLmVuYWJsZSgyOSksUi51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksUi5mb2cmJmEuZW5hYmxlKDMxKSx5LnB1c2goYS5tYXNrKSxhLmRpc2FibGVBbGwoKSxSLnVzZUZvZyYmYS5lbmFibGUoMCksUi5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksUi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmVuYWJsZSgyKSxSLnNraW5uaW5nJiZhLmVuYWJsZSgzKSxSLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLFIubW9ycGhUYXJnZXRzJiZhLmVuYWJsZSg1KSxSLm1vcnBoTm9ybWFscyYmYS5lbmFibGUoNiksUi5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLFIuc2hhZG93TWFwRW5hYmxlZCYmYS5lbmFibGUoOCksUi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmYS5lbmFibGUoOSksUi5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLFIuZmxpcFNpZGVkJiZhLmVuYWJsZSgxMSksUi5kZXB0aFBhY2tpbmcmJmEuZW5hYmxlKDEyKSxSLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLFIuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJmEuZW5hYmxlKDE0KSxSLnNwZWN1bGFyQ29sb3JNYXAmJmEuZW5hYmxlKDE1KSxSLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLFIudHJhbnNtaXNzaW9uTWFwJiZhLmVuYWJsZSgxNyksUi50aGlja25lc3NNYXAmJmEuZW5hYmxlKDE4KSxSLnNoZWVuJiZhLmVuYWJsZSgxOSksUi5zaGVlbkNvbG9yTWFwJiZhLmVuYWJsZSgyMCksUi5zaGVlblJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLFIuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMikseS5wdXNoKGEubWFzayl9ZnVuY3Rpb24gTCh5KXtsZXQgUj12W3kudHlwZV0sRDtpZihSKXtsZXQgRj1mbltSXTtEPXBNLmNsb25lKEYudW5pZm9ybXMpfWVsc2UgRD15LnVuaWZvcm1zO3JldHVybiBEfWZ1bmN0aW9uIEEoeSxSKXtsZXQgRDtmb3IobGV0IEY9MCx6PWMubGVuZ3RoO0Y8ejtGKyspe2xldCBOPWNbRl07aWYoTi5jYWNoZUtleT09PVIpe0Q9TiwrK0QudXNlZFRpbWVzO2JyZWFrfX1yZXR1cm4gRD09PXZvaWQgMCYmKEQ9bmV3IHBFKG4sUix5LHMpLGMucHVzaChEKSksRH1mdW5jdGlvbiBIKHkpe2lmKC0teS51c2VkVGltZXM9PT0wKXtsZXQgUj1jLmluZGV4T2YoeSk7Y1tSXT1jW2MubGVuZ3RoLTFdLGMucG9wKCkseS5kZXN0cm95KCl9fWZ1bmN0aW9uIHR0KHkpe2wucmVtb3ZlKHkpfWZ1bmN0aW9uIFgoKXtsLmRpc3Bvc2UoKX1yZXR1cm57Z2V0UGFyYW1ldGVyczpwLGdldFByb2dyYW1DYWNoZUtleTpiLGdldFVuaWZvcm1zOkwsYWNxdWlyZVByb2dyYW06QSxyZWxlYXNlUHJvZ3JhbTpILHJlbGVhc2VTaGFkZXJDYWNoZTp0dCxwcm9ncmFtczpjLGRpc3Bvc2U6WH19ZnVuY3Rpb24geEUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KHMpe2xldCBvPW4uZ2V0KHMpO3JldHVybiBvPT09dm9pZCAwJiYobz17fSxuLnNldChzLG8pKSxvfWZ1bmN0aW9uIGUocyl7bi5kZWxldGUocyl9ZnVuY3Rpb24gaShzLG8sYSl7bi5nZXQocylbb109YX1mdW5jdGlvbiByKCl7bj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQscmVtb3ZlOmUsdXBkYXRlOmksZGlzcG9zZTpyfX1mdW5jdGlvbiB5RShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/bi5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOm4ueiE9PXQuej9uLnotdC56Om4uaWQtdC5pZH1mdW5jdGlvbiBOZyhuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi56IT09dC56P3Quei1uLno6bi5pZC10LmlkfWZ1bmN0aW9uIEZnKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIHMoKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9ZnVuY3Rpb24gbyhoLGYsZCxnLHgsdil7bGV0IG09blt0XTtyZXR1cm4gbT09PXZvaWQgMD8obT17aWQ6aC5pZCxvYmplY3Q6aCxnZW9tZXRyeTpmLG1hdGVyaWFsOmQsZ3JvdXBPcmRlcjpnLHJlbmRlck9yZGVyOmgucmVuZGVyT3JkZXIsejp4LGdyb3VwOnZ9LG5bdF09bSk6KG0uaWQ9aC5pZCxtLm9iamVjdD1oLG0uZ2VvbWV0cnk9ZixtLm1hdGVyaWFsPWQsbS5ncm91cE9yZGVyPWcsbS5yZW5kZXJPcmRlcj1oLnJlbmRlck9yZGVyLG0uej14LG0uZ3JvdXA9diksdCsrLG19ZnVuY3Rpb24gYShoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnB1c2gobSk6ZC50cmFuc3BhcmVudD09PSEwP3IucHVzaChtKTplLnB1c2gobSl9ZnVuY3Rpb24gbChoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnVuc2hpZnQobSk6ZC50cmFuc3BhcmVudD09PSEwP3IudW5zaGlmdChtKTplLnVuc2hpZnQobSl9ZnVuY3Rpb24gYyhoLGYpe2UubGVuZ3RoPjEmJmUuc29ydChofHx5RSksaS5sZW5ndGg+MSYmaS5zb3J0KGZ8fE5nKSxyLmxlbmd0aD4xJiZyLnNvcnQoZnx8TmcpfWZ1bmN0aW9uIHUoKXtmb3IobGV0IGg9dCxmPW4ubGVuZ3RoO2g8ZjtoKyspe2xldCBkPW5baF07aWYoZC5pZD09PW51bGwpYnJlYWs7ZC5pZD1udWxsLGQub2JqZWN0PW51bGwsZC5nZW9tZXRyeT1udWxsLGQubWF0ZXJpYWw9bnVsbCxkLmdyb3VwPW51bGx9fXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6cyxwdXNoOmEsdW5zaGlmdDpsLGZpbmlzaDp1LHNvcnQ6Y319ZnVuY3Rpb24gdkUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KGkscil7bGV0IHM7cmV0dXJuIG4uaGFzKGkpPT09ITE/KHM9bmV3IEZnLG4uc2V0KGksW3NdKSk6cj49bi5nZXQoaSkubGVuZ3RoPyhzPW5ldyBGZyxuLmdldChpKS5wdXNoKHMpKTpzPW4uZ2V0KGkpW3JdLHN9ZnVuY3Rpb24gZSgpe249bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LGRpc3Bvc2U6ZX19ZnVuY3Rpb24gX0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3IFQsY29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsZGlyZWN0aW9uOm5ldyBULGNvbG9yOm5ldyBmdCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsY29sb3I6bmV3IGZ0LGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgVCxza3lDb2xvcjpuZXcgZnQsZ3JvdW5kQ29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBmdCxwb3NpdGlvbjpuZXcgVCxoYWxmV2lkdGg6bmV3IFQsaGFsZkhlaWdodDpuZXcgVH07YnJlYWt9cmV0dXJuIG5bdC5pZF09ZSxlfX19ZnVuY3Rpb24gd0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBLLHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gblt0LmlkXT1lLGV9fX12YXIgTUU9MDtmdW5jdGlvbiBiRShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gU0Uobix0KXtsZXQgZT1uZXcgX0UsaT13RSgpLHI9e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB1PTA7dTw5O3UrKylyLnByb2JlLnB1c2gobmV3IFQpO2xldCBzPW5ldyBULG89bmV3IHd0LGE9bmV3IHd0O2Z1bmN0aW9uIGwodSxoKXtsZXQgZj0wLGQ9MCxnPTA7Zm9yKGxldCB0dD0wO3R0PDk7dHQrKylyLnByb2JlW3R0XS5zZXQoMCwwLDApO2xldCB4PTAsdj0wLG09MCxwPTAsYj0wLF89MCxTPTAsTD0wO3Uuc29ydChiRSk7bGV0IEE9aCE9PSEwP01hdGguUEk6MTtmb3IobGV0IHR0PTAsWD11Lmxlbmd0aDt0dDxYO3R0Kyspe2xldCB5PXVbdHRdLFI9eS5jb2xvcixEPXkuaW50ZW5zaXR5LEY9eS5kaXN0YW5jZSx6PXkuc2hhZG93JiZ5LnNoYWRvdy5tYXA/eS5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZih5LmlzQW1iaWVudExpZ2h0KWYrPVIucipEKkEsZCs9Ui5nKkQqQSxnKz1SLmIqRCpBO2Vsc2UgaWYoeS5pc0xpZ2h0UHJvYmUpZm9yKGxldCBOPTA7Tjw5O04rKylyLnByb2JlW05dLmFkZFNjYWxlZFZlY3Rvcih5LnNoLmNvZWZmaWNpZW50c1tOXSxEKTtlbHNlIGlmKHkuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLmNvbG9yLmNvcHkoeS5jb2xvcikubXVsdGlwbHlTY2FsYXIoeS5pbnRlbnNpdHkqQSkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLHIuZGlyZWN0aW9uYWxTaGFkb3dbeF09USxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW3hdPXosci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeFt4XT15LnNoYWRvdy5tYXRyaXgsXysrfXIuZGlyZWN0aW9uYWxbeF09Tix4Kyt9ZWxzZSBpZih5LmlzU3BvdExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbih5Lm1hdHJpeFdvcmxkKSxOLmNvbG9yLmNvcHkoUikubXVsdGlwbHlTY2FsYXIoRCpBKSxOLmRpc3RhbmNlPUYsTi5jb25lQ29zPU1hdGguY29zKHkuYW5nbGUpLE4ucGVudW1icmFDb3M9TWF0aC5jb3MoeS5hbmdsZSooMS15LnBlbnVtYnJhKSksTi5kZWNheT15LmRlY2F5LHkuY2FzdFNoYWRvdyl7bGV0IFY9eS5zaGFkb3csUT1pLmdldCh5KTtRLnNoYWRvd0JpYXM9Vi5iaWFzLFEuc2hhZG93Tm9ybWFsQmlhcz1WLm5vcm1hbEJpYXMsUS5zaGFkb3dSYWRpdXM9Vi5yYWRpdXMsUS5zaGFkb3dNYXBTaXplPVYubWFwU2l6ZSxyLnNwb3RTaGFkb3dbbV09USxyLnNwb3RTaGFkb3dNYXBbbV09eixyLnNwb3RTaGFkb3dNYXRyaXhbbV09eS5zaGFkb3cubWF0cml4LEwrK31yLnNwb3RbbV09TixtKyt9ZWxzZSBpZih5LmlzUmVjdEFyZWFMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5jb2xvci5jb3B5KFIpLm11bHRpcGx5U2NhbGFyKEQpLE4uaGFsZldpZHRoLnNldCh5LndpZHRoKi41LDAsMCksTi5oYWxmSGVpZ2h0LnNldCgwLHkuaGVpZ2h0Ki41LDApLHIucmVjdEFyZWFbcF09TixwKyt9ZWxzZSBpZih5LmlzUG9pbnRMaWdodCl7bGV0IE49ZS5nZXQoeSk7aWYoTi5jb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKHkuaW50ZW5zaXR5KkEpLE4uZGlzdGFuY2U9eS5kaXN0YW5jZSxOLmRlY2F5PXkuZGVjYXkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLFEuc2hhZG93Q2FtZXJhTmVhcj1WLmNhbWVyYS5uZWFyLFEuc2hhZG93Q2FtZXJhRmFyPVYuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W3ZdPVEsci5wb2ludFNoYWRvd01hcFt2XT16LHIucG9pbnRTaGFkb3dNYXRyaXhbdl09eS5zaGFkb3cubWF0cml4LFMrK31yLnBvaW50W3ZdPU4sdisrfWVsc2UgaWYoeS5pc0hlbWlzcGhlcmVMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5za3lDb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksTi5ncm91bmRDb2xvci5jb3B5KHkuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksci5oZW1pW2JdPU4sYisrfX1wPjAmJih0LmlzV2ViR0wyfHxuLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMD8oci5yZWN0QXJlYUxUQzE9b3QuTFRDX0ZMT0FUXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0ZMT0FUXzIpOm4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITA/KHIucmVjdEFyZWFMVEMxPW90LkxUQ19IQUxGXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLHIuYW1iaWVudFswXT1mLHIuYW1iaWVudFsxXT1kLHIuYW1iaWVudFsyXT1nO2xldCBIPXIuaGFzaDsoSC5kaXJlY3Rpb25hbExlbmd0aCE9PXh8fEgucG9pbnRMZW5ndGghPT12fHxILnNwb3RMZW5ndGghPT1tfHxILnJlY3RBcmVhTGVuZ3RoIT09cHx8SC5oZW1pTGVuZ3RoIT09Ynx8SC5udW1EaXJlY3Rpb25hbFNoYWRvd3MhPT1ffHxILm51bVBvaW50U2hhZG93cyE9PVN8fEgubnVtU3BvdFNoYWRvd3MhPT1MKSYmKHIuZGlyZWN0aW9uYWwubGVuZ3RoPXgsci5zcG90Lmxlbmd0aD1tLHIucmVjdEFyZWEubGVuZ3RoPXAsci5wb2ludC5sZW5ndGg9dixyLmhlbWkubGVuZ3RoPWIsci5kaXJlY3Rpb25hbFNoYWRvdy5sZW5ndGg9XyxyLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aD1fLHIucG9pbnRTaGFkb3cubGVuZ3RoPVMsci5wb2ludFNoYWRvd01hcC5sZW5ndGg9UyxyLnNwb3RTaGFkb3cubGVuZ3RoPUwsci5zcG90U2hhZG93TWFwLmxlbmd0aD1MLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPV8sci5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9UyxyLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPUwsSC5kaXJlY3Rpb25hbExlbmd0aD14LEgucG9pbnRMZW5ndGg9dixILnNwb3RMZW5ndGg9bSxILnJlY3RBcmVhTGVuZ3RoPXAsSC5oZW1pTGVuZ3RoPWIsSC5udW1EaXJlY3Rpb25hbFNoYWRvd3M9XyxILm51bVBvaW50U2hhZG93cz1TLEgubnVtU3BvdFNoYWRvd3M9TCxyLnZlcnNpb249TUUrKyl9ZnVuY3Rpb24gYyh1LGgpe2xldCBmPTAsZD0wLGc9MCx4PTAsdj0wLG09aC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCBwPTAsYj11Lmxlbmd0aDtwPGI7cCsrKXtsZXQgXz11W3BdO2lmKF8uaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgUz1yLmRpcmVjdGlvbmFsW2ZdO1MuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxzLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLnRhcmdldC5tYXRyaXhXb3JsZCksUy5kaXJlY3Rpb24uc3ViKHMpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxmKyt9ZWxzZSBpZihfLmlzU3BvdExpZ2h0KXtsZXQgUz1yLnNwb3RbZ107Uy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCksUy5wb3NpdGlvbi5hcHBseU1hdHJpeDQobSksUy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8udGFyZ2V0Lm1hdHJpeFdvcmxkKSxTLmRpcmVjdGlvbi5zdWIocyksUy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKG0pLGcrK31lbHNlIGlmKF8uaXNSZWN0QXJlYUxpZ2h0KXtsZXQgUz1yLnJlY3RBcmVhW3hdO1MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMucG9zaXRpb24uYXBwbHlNYXRyaXg0KG0pLGEuaWRlbnRpdHkoKSxvLmNvcHkoXy5tYXRyaXhXb3JsZCksby5wcmVtdWx0aXBseShtKSxhLmV4dHJhY3RSb3RhdGlvbihvKSxTLmhhbGZXaWR0aC5zZXQoXy53aWR0aCouNSwwLDApLFMuaGFsZkhlaWdodC5zZXQoMCxfLmhlaWdodCouNSwwKSxTLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoYSksUy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChhKSx4Kyt9ZWxzZSBpZihfLmlzUG9pbnRMaWdodCl7bGV0IFM9ci5wb2ludFtkXTtTLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxTLnBvc2l0aW9uLmFwcGx5TWF0cml4NChtKSxkKyt9ZWxzZSBpZihfLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgUz1yLmhlbWlbdl07Uy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxTLmRpcmVjdGlvbi5ub3JtYWxpemUoKSx2Kyt9fX1yZXR1cm57c2V0dXA6bCxzZXR1cFZpZXc6YyxzdGF0ZTpyfX1mdW5jdGlvbiB6ZyhuLHQpe2xldCBlPW5ldyBTRShuLHQpLGk9W10scj1bXTtmdW5jdGlvbiBzKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfWZ1bmN0aW9uIG8oaCl7aS5wdXNoKGgpfWZ1bmN0aW9uIGEoaCl7ci5wdXNoKGgpfWZ1bmN0aW9uIGwoaCl7ZS5zZXR1cChpLGgpfWZ1bmN0aW9uIGMoaCl7ZS5zZXR1cFZpZXcoaSxoKX1yZXR1cm57aW5pdDpzLHN0YXRlOntsaWdodHNBcnJheTppLHNoYWRvd3NBcnJheTpyLGxpZ2h0czplfSxzZXR1cExpZ2h0czpsLHNldHVwTGlnaHRzVmlldzpjLHB1c2hMaWdodDpvLHB1c2hTaGFkb3c6YX19ZnVuY3Rpb24gRUUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBpKHMsbz0wKXtsZXQgYTtyZXR1cm4gZS5oYXMocyk9PT0hMT8oYT1uZXcgemcobix0KSxlLnNldChzLFthXSkpOm8+PWUuZ2V0KHMpLmxlbmd0aD8oYT1uZXcgemcobix0KSxlLmdldChzKS5wdXNoKGEpKTphPWUuZ2V0KHMpW29dLGF9ZnVuY3Rpb24gcigpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDppLGRpc3Bvc2U6cn19dmFyIGNsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIix0aGlzLmRlcHRoUGFja2luZz1Ldyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtjbC5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgdWw9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IFQsdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTt1bC5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgVEU9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxBRT1gdW5pZm9ybSBzYW1wbGVyMkQgc2hhZG93X3Bhc3M7CnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKI2luY2x1ZGUgPHBhY2tpbmc+CnZvaWQgbWFpbigpIHsKCWNvbnN0IGZsb2F0IHNhbXBsZXMgPSBmbG9hdCggVlNNX1NBTVBMRVMgKTsKCWZsb2F0IG1lYW4gPSAwLjA7CglmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7CglmbG9hdCB1dlN0cmlkZSA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogMi4wIC8gKCBzYW1wbGVzIC0gMS4wICk7CglmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDsKCWZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkgewoJCWZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTsKCQkjaWZkZWYgSE9SSVpPTlRBTF9QQVNTCgkJCXZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkaXN0cmlidXRpb24ueDsKCQkJc3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54OwoJCSNlbHNlCgkJCWZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkZXB0aDsKCQkJc3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7CgkJI2VuZGlmCgl9CgltZWFuID0gbWVhbiAvIHNhbXBsZXM7CglzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzOwoJZmxvYXQgc3RkX2RldiA9IHNxcnQoIHNxdWFyZWRfbWVhbiAtIG1lYW4gKiBtZWFuICk7CglnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApOwp9YDtmdW5jdGlvbiBUMChuLHQsZSl7bGV0IGk9bmV3IHFyLHI9bmV3IEsscz1uZXcgSyxvPW5ldyBXdCxhPW5ldyBjbCh7ZGVwdGhQYWNraW5nOlF3fSksbD1uZXcgdWwsYz17fSx1PWUubWF4VGV4dHVyZVNpemUsaD17MDpoZSwxOmVvLDI6SHJ9LGY9bmV3IEZuKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBLfSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6VEUsZnJhZ21lbnRTaGFkZXI6QUV9KSxkPWYuY2xvbmUoKTtkLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGc9bmV3IEh0O2cuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgeD1uZXcgb2UoZyxmKSx2PXRoaXM7dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT1sMCx0aGlzLnJlbmRlcj1mdW5jdGlvbihfLFMsTCl7aWYodi5lbmFibGVkPT09ITF8fHYuYXV0b1VwZGF0ZT09PSExJiZ2Lm5lZWRzVXBkYXRlPT09ITF8fF8ubGVuZ3RoPT09MClyZXR1cm47bGV0IEE9bi5nZXRSZW5kZXJUYXJnZXQoKSxIPW4uZ2V0QWN0aXZlQ3ViZUZhY2UoKSx0dD1uLmdldEFjdGl2ZU1pcG1hcExldmVsKCksWD1uLnN0YXRlO1guc2V0QmxlbmRpbmcoam4pLFguYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxYLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksWC5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCB5PTAsUj1fLmxlbmd0aDt5PFI7eSsrKXtsZXQgRD1fW3ldLEY9RC5zaGFkb3c7aWYoRj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLEQsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoRi5hdXRvVXBkYXRlPT09ITEmJkYubmVlZHNVcGRhdGU9PT0hMSljb250aW51ZTtyLmNvcHkoRi5tYXBTaXplKTtsZXQgej1GLmdldEZyYW1lRXh0ZW50cygpO2lmKHIubXVsdGlwbHkoeikscy5jb3B5KEYubWFwU2l6ZSksKHIueD51fHxyLnk+dSkmJihyLng+dSYmKHMueD1NYXRoLmZsb29yKHUvei54KSxyLng9cy54KnoueCxGLm1hcFNpemUueD1zLngpLHIueT51JiYocy55PU1hdGguZmxvb3IodS96LnkpLHIueT1zLnkqei55LEYubWFwU2l6ZS55PXMueSkpLEYubWFwPT09bnVsbCYmIUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1Kcyl7bGV0IFY9e21pbkZpbHRlcjpiZSxtYWdGaWx0ZXI6YmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLm1hcFBhc3M9bmV3IE5lKHIueCxyLnksViksRi5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWlmKEYubWFwPT09bnVsbCl7bGV0IFY9e21pbkZpbHRlcjpmZSxtYWdGaWx0ZXI6ZmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9bi5zZXRSZW5kZXJUYXJnZXQoRi5tYXApLG4uY2xlYXIoKTtsZXQgTj1GLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IFY9MDtWPE47VisrKXtsZXQgUT1GLmdldFZpZXdwb3J0KFYpO28uc2V0KHMueCpRLngscy55KlEueSxzLngqUS56LHMueSpRLncpLFgudmlld3BvcnQobyksRi51cGRhdGVNYXRyaWNlcyhELFYpLGk9Ri5nZXRGcnVzdHVtKCksYihTLEwsRi5jYW1lcmEsRCx0aGlzLnR5cGUpfSFGLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09SnMmJm0oRixMKSxGLm5lZWRzVXBkYXRlPSExfXYubmVlZHNVcGRhdGU9ITEsbi5zZXRSZW5kZXJUYXJnZXQoQSxILHR0KX07ZnVuY3Rpb24gbShfLFMpe2xldCBMPXQudXBkYXRlKHgpO2YuZGVmaW5lcy5WU01fU0FNUExFUyE9PV8uYmx1clNhbXBsZXMmJihmLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxkLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxmLm5lZWRzVXBkYXRlPSEwLGQubmVlZHNVcGRhdGU9ITApLGYudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Xy5tYXAudGV4dHVyZSxmLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Xy5tYXBTaXplLGYudW5pZm9ybXMucmFkaXVzLnZhbHVlPV8ucmFkaXVzLG4uc2V0UmVuZGVyVGFyZ2V0KF8ubWFwUGFzcyksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KFMsbnVsbCxMLGYseCxudWxsKSxkLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPV8ubWFwUGFzcy50ZXh0dXJlLGQudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1fLm1hcFNpemUsZC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Xy5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoXy5tYXApLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChTLG51bGwsTCxkLHgsbnVsbCl9ZnVuY3Rpb24gcChfLFMsTCxBLEgsdHQsWCl7bGV0IHk9bnVsbCxSPUEuaXNQb2ludExpZ2h0PT09ITA/Xy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOl8uY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihSIT09dm9pZCAwP3k9Ujp5PUEuaXNQb2ludExpZ2h0PT09ITA/bDphLG4ubG9jYWxDbGlwcGluZ0VuYWJsZWQmJkwuY2xpcFNoYWRvd3M9PT0hMCYmTC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxMLmRpc3BsYWNlbWVudE1hcCYmTC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fEwuYWxwaGFNYXAmJkwuYWxwaGFUZXN0PjApe2xldCBEPXkudXVpZCxGPUwudXVpZCx6PWNbRF07ej09PXZvaWQgMCYmKHo9e30sY1tEXT16KTtsZXQgTj16W0ZdO049PT12b2lkIDAmJihOPXkuY2xvbmUoKSx6W0ZdPU4pLHk9Tn1yZXR1cm4geS52aXNpYmxlPUwudmlzaWJsZSx5LndpcmVmcmFtZT1MLndpcmVmcmFtZSxYPT09SnM/eS5zaWRlPUwuc2hhZG93U2lkZSE9PW51bGw/TC5zaGFkb3dTaWRlOkwuc2lkZTp5LnNpZGU9TC5zaGFkb3dTaWRlIT09bnVsbD9MLnNoYWRvd1NpZGU6aFtMLnNpZGVdLHkuYWxwaGFNYXA9TC5hbHBoYU1hcCx5LmFscGhhVGVzdD1MLmFscGhhVGVzdCx5LmNsaXBTaGFkb3dzPUwuY2xpcFNoYWRvd3MseS5jbGlwcGluZ1BsYW5lcz1MLmNsaXBwaW5nUGxhbmVzLHkuY2xpcEludGVyc2VjdGlvbj1MLmNsaXBJbnRlcnNlY3Rpb24seS5kaXNwbGFjZW1lbnRNYXA9TC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZT1MLmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcz1MLmRpc3BsYWNlbWVudEJpYXMseS53aXJlZnJhbWVMaW5ld2lkdGg9TC53aXJlZnJhbWVMaW5ld2lkdGgseS5saW5ld2lkdGg9TC5saW5ld2lkdGgsQS5pc1BvaW50TGlnaHQ9PT0hMCYmeS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJih5LnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSx5Lm5lYXJEaXN0YW5jZT1ILHkuZmFyRGlzdGFuY2U9dHQpLHl9ZnVuY3Rpb24gYihfLFMsTCxBLEgpe2lmKF8udmlzaWJsZT09PSExKXJldHVybjtpZihfLmxheWVycy50ZXN0KFMubGF5ZXJzKSYmKF8uaXNNZXNofHxfLmlzTGluZXx8Xy5pc1BvaW50cykmJihfLmNhc3RTaGFkb3d8fF8ucmVjZWl2ZVNoYWRvdyYmSD09PUpzKSYmKCFfLmZydXN0dW1DdWxsZWR8fGkuaW50ZXJzZWN0c09iamVjdChfKSkpe18ubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoTC5tYXRyaXhXb3JsZEludmVyc2UsXy5tYXRyaXhXb3JsZCk7bGV0IHk9dC51cGRhdGUoXyksUj1fLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoUikpe2xldCBEPXkuZ3JvdXBzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKyl7bGV0IE49RFtGXSxWPVJbTi5tYXRlcmlhbEluZGV4XTtpZihWJiZWLnZpc2libGUpe2xldCBRPXAoXyx5LFYsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksUSxfLE4pfX19ZWxzZSBpZihSLnZpc2libGUpe2xldCBEPXAoXyx5LFIsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksRCxfLG51bGwpfX1sZXQgWD1fLmNoaWxkcmVuO2ZvcihsZXQgeT0wLFI9WC5sZW5ndGg7eTxSO3krKyliKFhbeV0sUyxMLEEsSCl9fWZ1bmN0aW9uIENFKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyO2Z1bmN0aW9uIHIoKXtsZXQgUD0hMSxwdD1uZXcgV3QsaHQ9bnVsbCxFdD1uZXcgV3QoMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24oWSl7aHQhPT1ZJiYhUCYmKG4uY29sb3JNYXNrKFksWSxZLFkpLGh0PVkpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWSl7UD1ZfSxzZXRDbGVhcjpmdW5jdGlvbihZLE10LER0LGp0LHplKXt6ZT09PSEwJiYoWSo9anQsTXQqPWp0LER0Kj1qdCkscHQuc2V0KFksTXQsRHQsanQpLEV0LmVxdWFscyhwdCk9PT0hMSYmKG4uY2xlYXJDb2xvcihZLE10LER0LGp0KSxFdC5jb3B5KHB0KSl9LHJlc2V0OmZ1bmN0aW9uKCl7UD0hMSxodD1udWxsLEV0LnNldCgtMSwwLDAsMCl9fX1mdW5jdGlvbiBzKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oWSl7WT9rKDI5MjkpOkZ0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFkpe3B0IT09WSYmIVAmJihuLmRlcHRoTWFzayhZKSxwdD1ZKX0sc2V0RnVuYzpmdW5jdGlvbihZKXtpZihodCE9PVkpe2lmKFkpc3dpdGNoKFkpe2Nhc2UgeXc6bi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIHZ3Om4uZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSBfdzpuLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgenU6bi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIHd3Om4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSBNdzpuLmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgYnc6bi5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIFN3Om4uZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpuLmRlcHRoRnVuYyg1MTUpfWVsc2Ugbi5kZXB0aEZ1bmMoNTE1KTtodD1ZfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFkpe1A9WX0sc2V0Q2xlYXI6ZnVuY3Rpb24oWSl7RXQhPT1ZJiYobi5jbGVhckRlcHRoKFkpLEV0PVkpfSxyZXNldDpmdW5jdGlvbigpe1A9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGx9fX1mdW5jdGlvbiBvKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGwsWT1udWxsLE10PW51bGwsRHQ9bnVsbCxqdD1udWxsLHplPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24obmUpe1B8fChuZT9rKDI5NjApOkZ0KDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihuZSl7cHQhPT1uZSYmIVAmJihuLnN0ZW5jaWxNYXNrKG5lKSxwdD1uZSl9LHNldEZ1bmM6ZnVuY3Rpb24obmUsZW4seW4peyhodCE9PW5lfHxFdCE9PWVufHxZIT09eW4pJiYobi5zdGVuY2lsRnVuYyhuZSxlbix5biksaHQ9bmUsRXQ9ZW4sWT15bil9LHNldE9wOmZ1bmN0aW9uKG5lLGVuLHluKXsoTXQhPT1uZXx8RHQhPT1lbnx8anQhPT15bikmJihuLnN0ZW5jaWxPcChuZSxlbix5biksTXQ9bmUsRHQ9ZW4sanQ9eW4pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24obmUpe1A9bmV9LHNldENsZWFyOmZ1bmN0aW9uKG5lKXt6ZSE9PW5lJiYobi5jbGVhclN0ZW5jaWwobmUpLHplPW5lKX0scmVzZXQ6ZnVuY3Rpb24oKXtQPSExLHB0PW51bGwsaHQ9bnVsbCxFdD1udWxsLFk9bnVsbCxNdD1udWxsLER0PW51bGwsanQ9bnVsbCx6ZT1udWxsfX19bGV0IGE9bmV3IHIsbD1uZXcgcyxjPW5ldyBvLHU9e30saD17fSxmPW5ldyBXZWFrTWFwLGQ9W10sZz1udWxsLHg9ITEsdj1udWxsLG09bnVsbCxwPW51bGwsYj1udWxsLF89bnVsbCxTPW51bGwsTD1udWxsLEE9ITEsSD1udWxsLHR0PW51bGwsWD1udWxsLHk9bnVsbCxSPW51bGwsRD1uLmdldFBhcmFtZXRlcigzNTY2MSksRj0hMSx6PTAsTj1uLmdldFBhcmFtZXRlcig3OTM4KTtOLmluZGV4T2YoIldlYkdMIikhPT0tMT8oej1wYXJzZUZsb2F0KC9eV2ViR0wgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0xKTpOLmluZGV4T2YoIk9wZW5HTCBFUyIpIT09LTEmJih6PXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0yKTtsZXQgVj1udWxsLFE9e30sYXQ9bi5nZXRQYXJhbWV0ZXIoMzA4OCksRz1uLmdldFBhcmFtZXRlcigyOTc4KSwkPW5ldyBXdCgpLmZyb21BcnJheShhdCksbHQ9bmV3IFd0KCkuZnJvbUFycmF5KEcpO2Z1bmN0aW9uIGR0KFAscHQsaHQpe2xldCBFdD1uZXcgVWludDhBcnJheSg0KSxZPW4uY3JlYXRlVGV4dHVyZSgpO24uYmluZFRleHR1cmUoUCxZKSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MSw5NzI4KSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MCw5NzI4KTtmb3IobGV0IE10PTA7TXQ8aHQ7TXQrKyluLnRleEltYWdlMkQocHQrTXQsMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxFdCk7cmV0dXJuIFl9bGV0IHh0PXt9O3h0WzM1NTNdPWR0KDM1NTMsMzU1MywxKSx4dFszNDA2N109ZHQoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksaygyOTI5KSxsLnNldEZ1bmMoenUpLEooITEpLGl0KEFtKSxrKDI4ODQpLEMoam4pO2Z1bmN0aW9uIGsoUCl7dVtQXSE9PSEwJiYobi5lbmFibGUoUCksdVtQXT0hMCl9ZnVuY3Rpb24gRnQoUCl7dVtQXSE9PSExJiYobi5kaXNhYmxlKFApLHVbUF09ITEpfWZ1bmN0aW9uIG10KFAscHQpe3JldHVybiBoW1BdIT09cHQ/KG4uYmluZEZyYW1lYnVmZmVyKFAscHQpLGhbUF09cHQsaSYmKFA9PT0zNjAwOSYmKGhbMzYxNjBdPXB0KSxQPT09MzYxNjAmJihoWzM2MDA5XT1wdCkpLCEwKTohMX1mdW5jdGlvbiBTdChQLHB0KXtsZXQgaHQ9ZCxFdD0hMTtpZihQKWlmKGh0PWYuZ2V0KHB0KSxodD09PXZvaWQgMCYmKGh0PVtdLGYuc2V0KHB0LGh0KSksUC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgWT1QLnRleHR1cmU7aWYoaHQubGVuZ3RoIT09WS5sZW5ndGh8fGh0WzBdIT09MzYwNjQpe2ZvcihsZXQgTXQ9MCxEdD1ZLmxlbmd0aDtNdDxEdDtNdCsrKWh0W010XT0zNjA2NCtNdDtodC5sZW5ndGg9WS5sZW5ndGgsRXQ9ITB9fWVsc2UgaHRbMF0hPT0zNjA2NCYmKGh0WzBdPTM2MDY0LEV0PSEwKTtlbHNlIGh0WzBdIT09MTAyOSYmKGh0WzBdPTEwMjksRXQ9ITApO0V0JiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKGh0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChodCkpfWZ1bmN0aW9uIEIoUCl7cmV0dXJuIGchPT1QPyhuLnVzZVByb2dyYW0oUCksZz1QLCEwKTohMX1sZXQgc3Q9e1tJcl06MzI3NzQsW2F3XTozMjc3OCxbbHddOjMyNzc5fTtpZihpKXN0W1BtXT0zMjc3NSxzdFtEbV09MzI3NzY7ZWxzZXtsZXQgUD10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO1AhPT1udWxsJiYoc3RbUG1dPVAuTUlOX0VYVCxzdFtEbV09UC5NQVhfRVhUKX1sZXQgbnQ9e1tjd106MCxbdXddOjEsW2h3XTo3NjgsW3UwXTo3NzAsW3h3XTo3NzYsW213XTo3NzQsW2R3XTo3NzIsW2Z3XTo3NjksW2gwXTo3NzEsW2d3XTo3NzUsW3B3XTo3NzN9O2Z1bmN0aW9uIEMoUCxwdCxodCxFdCxZLE10LER0LGp0KXtpZihQPT09am4pe3g9PT0hMCYmKEZ0KDMwNDIpLHg9ITEpO3JldHVybn1pZih4PT09ITEmJihrKDMwNDIpLHg9ITApLFAhPT1vdyl7aWYoUCE9PXZ8fGp0IT09QSl7aWYoKG0hPT1Jcnx8XyE9PUlyKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksbT1JcixfPUlyKSxqdClzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIENtOm4uYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBSbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSBMbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsUCk7YnJlYWt9ZWxzZSBzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgQ206bi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgUm06bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgTG06bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixQKTticmVha31wPW51bGwsYj1udWxsLFM9bnVsbCxMPW51bGwsdj1QLEE9anR9cmV0dXJufVk9WXx8cHQsTXQ9TXR8fGh0LER0PUR0fHxFdCwocHQhPT1tfHxZIT09XykmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShzdFtwdF0sc3RbWV0pLG09cHQsXz1ZKSwoaHQhPT1wfHxFdCE9PWJ8fE10IT09U3x8RHQhPT1MKSYmKG4uYmxlbmRGdW5jU2VwYXJhdGUobnRbaHRdLG50W0V0XSxudFtNdF0sbnRbRHRdKSxwPWh0LGI9RXQsUz1NdCxMPUR0KSx2PVAsQT1udWxsfWZ1bmN0aW9uIGooUCxwdCl7UC5zaWRlPT09SHI/RnQoMjg4NCk6aygyODg0KTtsZXQgaHQ9UC5zaWRlPT09aGU7cHQmJihodD0haHQpLEooaHQpLFAuYmxlbmRpbmc9PT1LcyYmUC50cmFuc3BhcmVudD09PSExP0Moam4pOkMoUC5ibGVuZGluZyxQLmJsZW5kRXF1YXRpb24sUC5ibGVuZFNyYyxQLmJsZW5kRHN0LFAuYmxlbmRFcXVhdGlvbkFscGhhLFAuYmxlbmRTcmNBbHBoYSxQLmJsZW5kRHN0QWxwaGEsUC5wcmVtdWx0aXBsaWVkQWxwaGEpLGwuc2V0RnVuYyhQLmRlcHRoRnVuYyksbC5zZXRUZXN0KFAuZGVwdGhUZXN0KSxsLnNldE1hc2soUC5kZXB0aFdyaXRlKSxhLnNldE1hc2soUC5jb2xvcldyaXRlKTtsZXQgRXQ9UC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KEV0KSxFdCYmKGMuc2V0TWFzayhQLnN0ZW5jaWxXcml0ZU1hc2spLGMuc2V0RnVuYyhQLnN0ZW5jaWxGdW5jLFAuc3RlbmNpbFJlZixQLnN0ZW5jaWxGdW5jTWFzayksYy5zZXRPcChQLnN0ZW5jaWxGYWlsLFAuc3RlbmNpbFpGYWlsLFAuc3RlbmNpbFpQYXNzKSksdnQoUC5wb2x5Z29uT2Zmc2V0LFAucG9seWdvbk9mZnNldEZhY3RvcixQLnBvbHlnb25PZmZzZXRVbml0cyksUC5hbHBoYVRvQ292ZXJhZ2U9PT0hMD9rKDMyOTI2KTpGdCgzMjkyNil9ZnVuY3Rpb24gSihQKXtIIT09UCYmKFA/bi5mcm9udEZhY2UoMjMwNCk6bi5mcm9udEZhY2UoMjMwNSksSD1QKX1mdW5jdGlvbiBpdChQKXtQIT09aXc/KGsoMjg4NCksUCE9PXR0JiYoUD09PUFtP24uY3VsbEZhY2UoMTAyOSk6UD09PXJ3P24uY3VsbEZhY2UoMTAyOCk6bi5jdWxsRmFjZSgxMDMyKSkpOkZ0KDI4ODQpLHR0PVB9ZnVuY3Rpb24gZXQoUCl7UCE9PVgmJihGJiZuLmxpbmVXaWR0aChQKSxYPVApfWZ1bmN0aW9uIHZ0KFAscHQsaHQpe1A/KGsoMzI4MjMpLCh5IT09cHR8fFIhPT1odCkmJihuLnBvbHlnb25PZmZzZXQocHQsaHQpLHk9cHQsUj1odCkpOkZ0KDMyODIzKX1mdW5jdGlvbiBidChQKXtQP2soMzA4OSk6RnQoMzA4OSl9ZnVuY3Rpb24gSXQoUCl7UD09PXZvaWQgMCYmKFA9MzM5ODQrRC0xKSxWIT09UCYmKG4uYWN0aXZlVGV4dHVyZShQKSxWPVApfWZ1bmN0aW9uIFp0KFAscHQpe1Y9PT1udWxsJiZJdCgpO2xldCBodD1RW1ZdO2h0PT09dm9pZCAwJiYoaHQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxRW1ZdPWh0KSwoaHQudHlwZSE9PVB8fGh0LnRleHR1cmUhPT1wdCkmJihuLmJpbmRUZXh0dXJlKFAscHR8fHh0W1BdKSxodC50eXBlPVAsaHQudGV4dHVyZT1wdCl9ZnVuY3Rpb24gcXQoKXtsZXQgUD1RW1ZdO1AhPT12b2lkIDAmJlAudHlwZSE9PXZvaWQgMCYmKG4uYmluZFRleHR1cmUoUC50eXBlLG51bGwpLFAudHlwZT12b2lkIDAsUC50ZXh0dXJlPXZvaWQgMCl9ZnVuY3Rpb24gRSgpe3RyeXtuLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHcoKXt0cnl7bi50ZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHEoKXt0cnl7bi50ZXhTdWJJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHJ0KCl7dHJ5e24uY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gZ3QoKXt0cnl7bi50ZXhTdG9yYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gVygpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiBfdCgpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24geXQoKXt0cnl7bi50ZXhJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHV0KFApeyQuZXF1YWxzKFApPT09ITEmJihuLnNjaXNzb3IoUC54LFAueSxQLnosUC53KSwkLmNvcHkoUCkpfWZ1bmN0aW9uIGN0KFApe2x0LmVxdWFscyhQKT09PSExJiYobi52aWV3cG9ydChQLngsUC55LFAueixQLncpLGx0LmNvcHkoUCkpfWZ1bmN0aW9uIEF0KCl7bi5kaXNhYmxlKDMwNDIpLG4uZGlzYWJsZSgyODg0KSxuLmRpc2FibGUoMjkyOSksbi5kaXNhYmxlKDMyODIzKSxuLmRpc2FibGUoMzA4OSksbi5kaXNhYmxlKDI5NjApLG4uZGlzYWJsZSgzMjkyNiksbi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxuLmJsZW5kRnVuYygxLDApLG4uYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksbi5jb2xvck1hc2soITAsITAsITAsITApLG4uY2xlYXJDb2xvcigwLDAsMCwwKSxuLmRlcHRoTWFzayghMCksbi5kZXB0aEZ1bmMoNTEzKSxuLmNsZWFyRGVwdGgoMSksbi5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxuLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLG4uc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxuLmNsZWFyU3RlbmNpbCgwKSxuLmN1bGxGYWNlKDEwMjkpLG4uZnJvbnRGYWNlKDIzMDUpLG4ucG9seWdvbk9mZnNldCgwLDApLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCksbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksaT09PSEwJiYobi5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksbi5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLG4udXNlUHJvZ3JhbShudWxsKSxuLmxpbmVXaWR0aCgxKSxuLnNjaXNzb3IoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbi52aWV3cG9ydCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSx1PXt9LFY9bnVsbCxRPXt9LGg9e30sZj1uZXcgV2Vha01hcCxkPVtdLGc9bnVsbCx4PSExLHY9bnVsbCxtPW51bGwscD1udWxsLGI9bnVsbCxfPW51bGwsUz1udWxsLEw9bnVsbCxBPSExLEg9bnVsbCx0dD1udWxsLFg9bnVsbCx5PW51bGwsUj1udWxsLCQuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGx0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6YSxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmssZGlzYWJsZTpGdCxiaW5kRnJhbWVidWZmZXI6bXQsZHJhd0J1ZmZlcnM6U3QsdXNlUHJvZ3JhbTpCLHNldEJsZW5kaW5nOkMsc2V0TWF0ZXJpYWw6aixzZXRGbGlwU2lkZWQ6SixzZXRDdWxsRmFjZTppdCxzZXRMaW5lV2lkdGg6ZXQsc2V0UG9seWdvbk9mZnNldDp2dCxzZXRTY2lzc29yVGVzdDpidCxhY3RpdmVUZXh0dXJlOkl0LGJpbmRUZXh0dXJlOlp0LHVuYmluZFRleHR1cmU6cXQsY29tcHJlc3NlZFRleEltYWdlMkQ6RSx0ZXhJbWFnZTJEOl90LHRleEltYWdlM0Q6eXQsdGV4U3RvcmFnZTJEOmd0LHRleFN0b3JhZ2UzRDpXLHRleFN1YkltYWdlMkQ6dyx0ZXhTdWJJbWFnZTNEOnEsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6cnQsc2Npc3Nvcjp1dCx2aWV3cG9ydDpjdCxyZXNldDpBdH19ZnVuY3Rpb24gUkUobix0LGUsaSxyLHMsbyl7bGV0IGE9ci5pc1dlYkdMMixsPXIubWF4VGV4dHVyZXMsYz1yLm1heEN1YmVtYXBTaXplLHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXIubWF4U2FtcGxlcyxkPXQuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKT90LmdldCgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik6dm9pZCAwLGc9bmV3IFdlYWtNYXAseCx2PSExO3RyeXt2PXR5cGVvZiBPZmZzY3JlZW5DYW52YXMhPSJ1bmRlZmluZWQiJiZuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSE9PW51bGx9Y2F0Y2goRSl7fWZ1bmN0aW9uIG0oRSx3KXtyZXR1cm4gdj9uZXcgT2Zmc2NyZWVuQ2FudmFzKEUsdyk6cm8oImNhbnZhcyIpfWZ1bmN0aW9uIHAoRSx3LHEscnQpe2xldCBndD0xO2lmKChFLndpZHRoPnJ0fHxFLmhlaWdodD5ydCkmJihndD1ydC9NYXRoLm1heChFLndpZHRoLEUuaGVpZ2h0KSksZ3Q8MXx8dz09PSEwKWlmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJkUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgVz13P25NOk1hdGguZmxvb3IsX3Q9VyhndCpFLndpZHRoKSx5dD1XKGd0KkUuaGVpZ2h0KTt4PT09dm9pZCAwJiYoeD1tKF90LHl0KSk7bGV0IHV0PXE/bShfdCx5dCk6eDtyZXR1cm4gdXQud2lkdGg9X3QsdXQuaGVpZ2h0PXl0LHV0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKEUsMCwwLF90LHl0KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK0Uud2lkdGgrIngiK0UuaGVpZ2h0KyIpIHRvICgiK190KyJ4Iit5dCsiKS4iKSx1dH1lbHNlIHJldHVybiJkYXRhImluIEUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIitFLndpZHRoKyJ4IitFLmhlaWdodCsiKS4iKSxFO3JldHVybiBFfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIGlnKEUud2lkdGgpJiZpZyhFLmhlaWdodCl9ZnVuY3Rpb24gXyhFKXtyZXR1cm4gYT8hMTpFLndyYXBTIT09VmV8fEUud3JhcFQhPT1WZXx8RS5taW5GaWx0ZXIhPT1mZSYmRS5taW5GaWx0ZXIhPT1iZX1mdW5jdGlvbiBTKEUsdyl7cmV0dXJuIEUuZ2VuZXJhdGVNaXBtYXBzJiZ3JiZFLm1pbkZpbHRlciE9PWZlJiZFLm1pbkZpbHRlciE9PWJlfWZ1bmN0aW9uIEwoRSl7bi5nZW5lcmF0ZU1pcG1hcChFKX1mdW5jdGlvbiBBKEUsdyxxLHJ0LGd0PSExKXtpZihhPT09ITEpcmV0dXJuIHc7aWYoRSE9PW51bGwpe2lmKG5bRV0hPT12b2lkIDApcmV0dXJuIG5bRV07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK0UrIiciKX1sZXQgVz13O3JldHVybiB3PT09NjQwMyYmKHE9PT01MTI2JiYoVz0zMzMyNikscT09PTUxMzEmJihXPTMzMzI1KSxxPT09NTEyMSYmKFc9MzMzMjEpKSx3PT09MzMzMTkmJihxPT09NTEyNiYmKFc9MzMzMjgpLHE9PT01MTMxJiYoVz0zMzMyNykscT09PTUxMjEmJihXPTMzMzIzKSksdz09PTY0MDgmJihxPT09NTEyNiYmKFc9MzQ4MzYpLHE9PT01MTMxJiYoVz0zNDg0MikscT09PTUxMjEmJihXPXJ0PT09JHQmJmd0PT09ITE/MzU5MDc6MzI4NTYpLHE9PT0zMjgxOSYmKFc9MzI4NTQpLHE9PT0zMjgyMCYmKFc9MzI4NTUpKSwoVz09PTMzMzI1fHxXPT09MzMzMjZ8fFc9PT0zMzMyN3x8Vz09PTMzMzI4fHxXPT09MzQ4NDJ8fFc9PT0zNDgzNikmJnQuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiksV31mdW5jdGlvbiBIKEUsdyxxKXtyZXR1cm4gUyhFLHEpPT09ITB8fEUuaXNGcmFtZWJ1ZmZlclRleHR1cmUmJkUubWluRmlsdGVyIT09ZmUmJkUubWluRmlsdGVyIT09YmU/TWF0aC5sb2cyKE1hdGgubWF4KHcud2lkdGgsdy5oZWlnaHQpKSsxOkUubWlwbWFwcyE9PXZvaWQgMCYmRS5taXBtYXBzLmxlbmd0aD4wP0UubWlwbWFwcy5sZW5ndGg6RS5pc0NvbXByZXNzZWRUZXh0dXJlJiZBcnJheS5pc0FycmF5KEUuaW1hZ2UpP3cubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiB0dChFKXtyZXR1cm4gRT09PWZlfHxFPT09SW18fEU9PT1ObT85NzI4Ojk3Mjl9ZnVuY3Rpb24gWChFKXtsZXQgdz1FLnRhcmdldDt3LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFgpLFIodyksdy5pc1ZpZGVvVGV4dHVyZSYmZy5kZWxldGUodyksby5tZW1vcnkudGV4dHVyZXMtLX1mdW5jdGlvbiB5KEUpe2xldCB3PUUudGFyZ2V0O3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseSksRCh3KX1mdW5jdGlvbiBSKEUpe2xldCB3PWkuZ2V0KEUpO3cuX193ZWJnbEluaXQhPT12b2lkIDAmJihuLmRlbGV0ZVRleHR1cmUody5fX3dlYmdsVGV4dHVyZSksaS5yZW1vdmUoRSkpfWZ1bmN0aW9uIEQoRSl7bGV0IHc9RS50ZXh0dXJlLHE9aS5nZXQoRSkscnQ9aS5nZXQodyk7aWYoISFFKXtpZihydC5fX3dlYmdsVGV4dHVyZSE9PXZvaWQgMCYmKG4uZGVsZXRlVGV4dHVyZShydC5fX3dlYmdsVGV4dHVyZSksby5tZW1vcnkudGV4dHVyZXMtLSksRS5kZXB0aFRleHR1cmUmJkUuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZ3Q9MDtndDw2O2d0Kyspbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcltndF0pLHEuX193ZWJnbERlcHRoYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihxLl9fd2ViZ2xEZXB0aGJ1ZmZlcltndF0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcikscS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbERlcHRoYnVmZmVyKSxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcikscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIocS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGd0PTAsVz13Lmxlbmd0aDtndDxXO2d0Kyspe2xldCBfdD1pLmdldCh3W2d0XSk7X3QuX193ZWJnbFRleHR1cmUmJihuLmRlbGV0ZVRleHR1cmUoX3QuX193ZWJnbFRleHR1cmUpLG8ubWVtb3J5LnRleHR1cmVzLS0pLGkucmVtb3ZlKHdbZ3RdKX1pLnJlbW92ZSh3KSxpLnJlbW92ZShFKX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIE4oKXtsZXQgRT1GO3JldHVybiBFPj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIitFKyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSxFfWZ1bmN0aW9uIFYoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLmlzVmlkZW9UZXh0dXJlJiZldChFKSxFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2xldCBydD1FLmltYWdlO2lmKHJ0PT09dm9pZCAwKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkIik7ZWxzZSBpZihydC5jb21wbGV0ZT09PSExKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgaW5jb21wbGV0ZSIpO2Vsc2V7ayhxLEUsdyk7cmV0dXJufX1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTUzLHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIFEoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2socSxFLHcpO3JldHVybn1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTg2NixxLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBhdChFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7ayhxLEUsdyk7cmV0dXJufWUuYWN0aXZlVGV4dHVyZSgzMzk4NCt3KSxlLmJpbmRUZXh0dXJlKDMyODc5LHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIEcoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe0Z0KHEsRSx3KTtyZXR1cm59ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K3cpLGUuYmluZFRleHR1cmUoMzQwNjcscS5fX3dlYmdsVGV4dHVyZSl9bGV0ICQ9e1tPdV06MTA0OTcsW1ZlXTozMzA3MSxba3VdOjMzNjQ4fSxsdD17W2ZlXTo5NzI4LFtJbV06OTk4NCxbTm1dOjk5ODYsW2JlXTo5NzI5LFtEd106OTk4NSxbTGxdOjk5ODd9O2Z1bmN0aW9uIGR0KEUsdyxxKXtpZihxPyhuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwkW3cud3JhcFNdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MywkW3cud3JhcFRdKSwoRT09PTMyODc5fHxFPT09MzU4NjYpJiZuLnRleFBhcmFtZXRlcmkoRSwzMjg4MiwkW3cud3JhcFJdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MCxsdFt3Lm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShFLDEwMjQxLGx0W3cubWluRmlsdGVyXSkpOihuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwzMzA3MSksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDMsMzMwNzEpLChFPT09MzI4Nzl8fEU9PT0zNTg2NikmJm4udGV4UGFyYW1ldGVyaShFLDMyODgyLDMzMDcxKSwody53cmFwUyE9PVZlfHx3LndyYXBUIT09VmUpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDAsdHQody5tYWdGaWx0ZXIpKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MSx0dCh3Lm1pbkZpbHRlcikpLHcubWluRmlsdGVyIT09ZmUmJncubWluRmlsdGVyIT09YmUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKSx0LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik9PT0hMCl7bGV0IHJ0PXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZih3LnR5cGU9PT1VaSYmdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITF8fGE9PT0hMSYmdy50eXBlPT09VXImJnQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITEpcmV0dXJuOyh3LmFuaXNvdHJvcHk+MXx8aS5nZXQodykuX19jdXJyZW50QW5pc290cm9weSkmJihuLnRleFBhcmFtZXRlcmYoRSxydC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbih3LmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldCh3KS5fX2N1cnJlbnRBbmlzb3Ryb3B5PXcuYW5pc290cm9weSl9fWZ1bmN0aW9uIHh0KEUsdyl7RS5fX3dlYmdsSW5pdD09PXZvaWQgMCYmKEUuX193ZWJnbEluaXQ9ITAsdy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixYKSxFLl9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpLG8ubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGsoRSx3LHEpe2xldCBydD0zNTUzO3cuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJihydD0zNTg2Niksdy5pc0RhdGFUZXh0dXJlM0QmJihydD0zMjg3OSkseHQoRSx3KSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrcSksZS5iaW5kVGV4dHVyZShydCxFLl9fd2ViZ2xUZXh0dXJlKSxuLnBpeGVsU3RvcmVpKDM3NDQwLHcuZmxpcFkpLG4ucGl4ZWxTdG9yZWkoMzc0NDEsdy5wcmVtdWx0aXBseUFscGhhKSxuLnBpeGVsU3RvcmVpKDMzMTcsdy51bnBhY2tBbGlnbm1lbnQpLG4ucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGd0PV8odykmJmIody5pbWFnZSk9PT0hMSxXPXAody5pbWFnZSxndCwhMSx1KTtXPXZ0KHcsVyk7bGV0IF90PWIoVyl8fGEseXQ9cy5jb252ZXJ0KHcuZm9ybWF0LHcuZW5jb2RpbmcpLHV0PXMuY29udmVydCh3LnR5cGUpLGN0PUEody5pbnRlcm5hbEZvcm1hdCx5dCx1dCx3LmVuY29kaW5nLHcuaXNWaWRlb1RleHR1cmUpO2R0KHJ0LHcsX3QpO2xldCBBdCxQPXcubWlwbWFwcyxwdD1hJiZ3LmlzVmlkZW9UZXh0dXJlIT09ITAsaHQ9RS5fX3ZlcnNpb249PT12b2lkIDAsRXQ9SCh3LFcsX3QpO2lmKHcuaXNEZXB0aFRleHR1cmUpY3Q9NjQwMixhP3cudHlwZT09PVVpP2N0PTM2MDEyOncudHlwZT09PVFhP2N0PTMzMTkwOncudHlwZT09PUJyP2N0PTM1MDU2OmN0PTMzMTg5OncudHlwZT09PVVpJiZjb25zb2xlLmVycm9yKCJXZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCBkZXB0aCB0ZXh0dXJlIHJlcXVpcmVzIFdlYkdMMi4iKSx3LmZvcm1hdD09PU9pJiZjdD09PTY0MDImJncudHlwZSE9PW5vJiZ3LnR5cGUhPT1RYSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLHcudHlwZT1ubyx1dD1zLmNvbnZlcnQody50eXBlKSksdy5mb3JtYXQ9PT1WciYmY3Q9PT02NDAyJiYoY3Q9MzQwNDEsdy50eXBlIT09QnImJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksdy50eXBlPUJyLHV0PXMuY29udmVydCh3LnR5cGUpKSkscHQmJmh0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxjdCxXLndpZHRoLFcuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxudWxsKTtlbHNlIGlmKHcuaXNEYXRhVGV4dHVyZSlpZihQLmxlbmd0aD4wJiZfdCl7cHQmJmh0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFBbMF0ud2lkdGgsUFswXS5oZWlnaHQpO2ZvcihsZXQgWT0wLE10PVAubGVuZ3RoO1k8TXQ7WSsrKUF0PVBbWV0scHQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LHV0LEF0LmRhdGEpOmUudGV4SW1hZ2UyRCgzNTUzLFksY3QsQXQud2lkdGgsQXQuaGVpZ2h0LDAseXQsdXQsQXQuZGF0YSk7dy5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBwdD8oaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsVy53aWR0aCxXLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsVy53aWR0aCxXLmhlaWdodCx5dCx1dCxXLmRhdGEpKTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxXLmRhdGEpO2Vsc2UgaWYody5pc0NvbXByZXNzZWRUZXh0dXJlKXtwdCYmaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsUFswXS53aWR0aCxQWzBdLmhlaWdodCk7Zm9yKGxldCBZPTAsTXQ9UC5sZW5ndGg7WTxNdDtZKyspQXQ9UFtZXSx3LmZvcm1hdCE9PVJlP3l0IT09bnVsbD9wdD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsWSwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LEF0LmRhdGEpOmUuY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLEF0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLEF0LndpZHRoLEF0LmhlaWdodCx5dCx1dCxBdC5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLHl0LHV0LEF0LmRhdGEpfWVsc2UgaWYody5pc0RhdGFUZXh0dXJlMkRBcnJheSlwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDM1ODY2LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDM1ODY2LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzNTg2NiwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRGF0YVRleHR1cmUzRClwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDMyODc5LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzMjg3OSwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRnJhbWVidWZmZXJUZXh0dXJlKXB0JiZodD9lLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFcud2lkdGgsVy5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsY3QsVy53aWR0aCxXLmhlaWdodCwwLHl0LHV0LG51bGwpO2Vsc2UgaWYoUC5sZW5ndGg+MCYmX3Qpe3B0JiZodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxQWzBdLndpZHRoLFBbMF0uaGVpZ2h0KTtmb3IobGV0IFk9MCxNdD1QLmxlbmd0aDtZPE10O1krKylBdD1QW1ldLHB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLHl0LHV0LEF0KTplLnRleEltYWdlMkQoMzU1MyxZLGN0LHl0LHV0LEF0KTt3LmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHB0PyhodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxXLndpZHRoLFcuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCx5dCx1dCxXKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxjdCx5dCx1dCxXKTtTKHcsX3QpJiZMKHJ0KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBGdChFLHcscSl7aWYody5pbWFnZS5sZW5ndGghPT02KXJldHVybjt4dChFLHcpLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtxKSxlLmJpbmRUZXh0dXJlKDM0MDY3LEUuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsdy5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSx3LnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyx3LnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgcnQ9dyYmKHcuaXNDb21wcmVzc2VkVGV4dHVyZXx8dy5pbWFnZVswXS5pc0NvbXByZXNzZWRUZXh0dXJlKSxndD13LmltYWdlWzBdJiZ3LmltYWdlWzBdLmlzRGF0YVRleHR1cmUsVz1bXTtmb3IobGV0IFk9MDtZPDY7WSsrKSFydCYmIWd0P1dbWV09cCh3LmltYWdlW1ldLCExLCEwLGMpOldbWV09Z3Q/dy5pbWFnZVtZXS5pbWFnZTp3LmltYWdlW1ldLFdbWV09dnQodyxXW1ldKTtsZXQgX3Q9V1swXSx5dD1iKF90KXx8YSx1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9YSYmdy5pc1ZpZGVvVGV4dHVyZSE9PSEwLHB0PUUuX192ZXJzaW9uPT09dm9pZCAwLGh0PUgodyxfdCx5dCk7ZHQoMzQwNjcsdyx5dCk7bGV0IEV0O2lmKHJ0KXtQJiZwdCYmZS50ZXhTdG9yYWdlMkQoMzQwNjcsaHQsQXQsX3Qud2lkdGgsX3QuaGVpZ2h0KTtmb3IobGV0IFk9MDtZPDY7WSsrKXtFdD1XW1ldLm1pcG1hcHM7Zm9yKGxldCBNdD0wO010PEV0Lmxlbmd0aDtNdCsrKXtsZXQgRHQ9RXRbTXRdO3cuZm9ybWF0IT09UmU/dXQhPT1udWxsP1A/ZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsRHQuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStZLE10LEF0LER0LndpZHRoLER0LmhlaWdodCwwLER0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnNldFRleHR1cmVDdWJlKCkiKTpQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsY3QsRHQuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQsQXQsRHQud2lkdGgsRHQuaGVpZ2h0LDAsdXQsY3QsRHQuZGF0YSl9fX1lbHNle0V0PXcubWlwbWFwcyxQJiZwdCYmKEV0Lmxlbmd0aD4wJiZodCsrLGUudGV4U3RvcmFnZTJEKDM0MDY3LGh0LEF0LFdbMF0ud2lkdGgsV1swXS5oZWlnaHQpKTtmb3IobGV0IFk9MDtZPDY7WSsrKWlmKGd0KXtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLDAsMCwwLFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsdXQsY3QsV1tZXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSwwLEF0LFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsMCx1dCxjdCxXW1ldLmRhdGEpO2ZvcihsZXQgTXQ9MDtNdDxFdC5sZW5ndGg7TXQrKyl7bGV0IGp0PUV0W010XS5pbWFnZVtZXS5pbWFnZTtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10KzEsMCwwLGp0LndpZHRoLGp0LmhlaWdodCx1dCxjdCxqdC5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSxNdCsxLEF0LGp0LndpZHRoLGp0LmhlaWdodCwwLHV0LGN0LGp0LmRhdGEpfX1lbHNle1A/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksMCwwLDAsdXQsY3QsV1tZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksMCxBdCx1dCxjdCxXW1ldKTtmb3IobGV0IE10PTA7TXQ8RXQubGVuZ3RoO010Kyspe2xldCBEdD1FdFtNdF07UD9lLnRleFN1YkltYWdlMkQoMzQwNjkrWSxNdCsxLDAsMCx1dCxjdCxEdC5pbWFnZVtZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQrMSxBdCx1dCxjdCxEdC5pbWFnZVtZXSl9fX1TKHcseXQpJiZMKDM0MDY3KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBtdChFLHcscSxydCxndCl7bGV0IFc9cy5jb252ZXJ0KHEuZm9ybWF0LHEuZW5jb2RpbmcpLF90PXMuY29udmVydChxLnR5cGUpLHl0PUEocS5pbnRlcm5hbEZvcm1hdCxXLF90LHEuZW5jb2RpbmcpO2kuZ2V0KHcpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGd0PT09MzI4Nzl8fGd0PT09MzU4NjY/ZS50ZXhJbWFnZTNEKGd0LDAseXQsdy53aWR0aCx3LmhlaWdodCx3LmRlcHRoLDAsVyxfdCxudWxsKTplLnRleEltYWdlMkQoZ3QsMCx5dCx3LndpZHRoLHcuaGVpZ2h0LDAsVyxfdCxudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRSksdy51c2VSZW5kZXJUb1RleHR1cmU/ZC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLHJ0LGd0LGkuZ2V0KHEpLl9fd2ViZ2xUZXh0dXJlLDAsaXQodykpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAscnQsZ3QsaS5nZXQocSkuX193ZWJnbFRleHR1cmUsMCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gU3QoRSx3LHEpe2lmKG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxFKSx3LmRlcHRoQnVmZmVyJiYhdy5zdGVuY2lsQnVmZmVyKXtsZXQgcnQ9MzMxODk7aWYocXx8dy51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBndD13LmRlcHRoVGV4dHVyZTtndCYmZ3QuaXNEZXB0aFRleHR1cmUmJihndC50eXBlPT09VWk/cnQ9MzYwMTI6Z3QudHlwZT09PVFhJiYocnQ9MzMxOTApKTtsZXQgVz1pdCh3KTt3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxXLHJ0LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLFcscnQsdy53aWR0aCx3LmhlaWdodCl9ZWxzZSBuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEscnQsdy53aWR0aCx3LmhlaWdodCk7bi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxFKX1lbHNlIGlmKHcuZGVwdGhCdWZmZXImJncuc3RlbmNpbEJ1ZmZlcil7bGV0IHJ0PWl0KHcpO3EmJncudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOncudXNlUmVuZGVyVG9UZXh0dXJlP2QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSx3LndpZHRoLHcuaGVpZ2h0KSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLEUpfWVsc2V7bGV0IHJ0PXcuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwP3cudGV4dHVyZVswXTp3LnRleHR1cmUsZ3Q9cy5jb252ZXJ0KHJ0LmZvcm1hdCxydC5lbmNvZGluZyksVz1zLmNvbnZlcnQocnQudHlwZSksX3Q9QShydC5pbnRlcm5hbEZvcm1hdCxndCxXLHJ0LmVuY29kaW5nKSx5dD1pdCh3KTtxJiZ3LnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTp3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsX3Qsdy53aWR0aCx3LmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIEIoRSx3KXtpZih3JiZ3LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXRocm93IG5ldyBFcnJvcigiRGVwdGggVGV4dHVyZSB3aXRoIGN1YmUgcmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEUpLCEody5kZXB0aFRleHR1cmUmJncuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIWkuZ2V0KHcuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8dy5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT13LndpZHRofHx3LmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT13LmhlaWdodCkmJih3LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD13LndpZHRoLHcuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD13LmhlaWdodCx3LmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksVih3LmRlcHRoVGV4dHVyZSwwKTtsZXQgcnQ9aS5nZXQody5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGd0PWl0KHcpO2lmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PU9pKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzNjA5NiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MyxydCwwKTtlbHNlIGlmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PVZyKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MyxydCwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iil9ZnVuY3Rpb24gc3QoRSl7bGV0IHc9aS5nZXQoRSkscT1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYoRS5kZXB0aFRleHR1cmUmJiF3Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIpe2lmKHEpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpO0Iody5fX3dlYmdsRnJhbWVidWZmZXIsRSl9ZWxzZSBpZihxKXt3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IHJ0PTA7cnQ8NjtydCsrKWUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHcuX193ZWJnbEZyYW1lYnVmZmVyW3J0XSksdy5fX3dlYmdsRGVwdGhidWZmZXJbcnRdPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXJbcnRdLEUsITEpfWVsc2UgZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdy5fX3dlYmdsRnJhbWVidWZmZXIpLHcuX193ZWJnbERlcHRoYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXIsRSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gbnQoRSx3LHEpe2xldCBydD1pLmdldChFKTt3IT09dm9pZCAwJiZtdChydC5fX3dlYmdsRnJhbWVidWZmZXIsRSxFLnRleHR1cmUsMzYwNjQsMzU1MykscSE9PXZvaWQgMCYmc3QoRSl9ZnVuY3Rpb24gQyhFKXtsZXQgdz1FLnRleHR1cmUscT1pLmdldChFKSxydD1pLmdldCh3KTtFLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHkpLEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyE9PSEwJiYocnQuX193ZWJnbFRleHR1cmU9PT12b2lkIDAmJihydC5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSkscnQuX192ZXJzaW9uPXcudmVyc2lvbixvLm1lbW9yeS50ZXh0dXJlcysrKTtsZXQgZ3Q9RS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwLFc9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITAsX3Q9dy5pc0RhdGFUZXh0dXJlM0R8fHcuaXNEYXRhVGV4dHVyZTJEQXJyYXkseXQ9YihFKXx8YTtpZihndCl7cS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCB1dD0wO3V0PDY7dXQrKylxLl9fd2ViZ2xGcmFtZWJ1ZmZlclt1dF09bi5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYocS5fX3dlYmdsRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLFcpaWYoci5kcmF3QnVmZmVycyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPWkuZ2V0KHV0W2N0XSk7UC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKFAuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCksby5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihFLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCkscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCB1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9aXQoRSk7bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsUCxBdCxFLndpZHRoLEUuaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksbi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLEUuZGVwdGhCdWZmZXImJihxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLFN0KHEuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLEUsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKGd0KXtlLmJpbmRUZXh0dXJlKDM0MDY3LHJ0Ll9fd2ViZ2xUZXh0dXJlKSxkdCgzNDA2Nyx3LHl0KTtmb3IobGV0IHV0PTA7dXQ8Njt1dCsrKW10KHEuX193ZWJnbEZyYW1lYnVmZmVyW3V0XSxFLHcsMzYwNjQsMzQwNjkrdXQpO1Modyx5dCkmJkwoMzQwNjcpLGUudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPXV0W2N0XSxwdD1pLmdldChQKTtlLmJpbmRUZXh0dXJlKDM1NTMscHQuX193ZWJnbFRleHR1cmUpLGR0KDM1NTMsUCx5dCksbXQocS5fX3dlYmdsRnJhbWVidWZmZXIsRSxQLDM2MDY0K2N0LDM1NTMpLFMoUCx5dCkmJkwoMzU1Myl9ZS51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgdXQ9MzU1MztfdCYmKGE/dXQ9dy5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLGUuYmluZFRleHR1cmUodXQscnQuX193ZWJnbFRleHR1cmUpLGR0KHV0LHcseXQpLG10KHEuX193ZWJnbEZyYW1lYnVmZmVyLEUsdywzNjA2NCx1dCksUyh3LHl0KSYmTCh1dCksZS51bmJpbmRUZXh0dXJlKCl9RS5kZXB0aEJ1ZmZlciYmc3QoRSl9ZnVuY3Rpb24gaihFKXtsZXQgdz1iKEUpfHxhLHE9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/RS50ZXh0dXJlOltFLnRleHR1cmVdO2ZvcihsZXQgcnQ9MCxndD1xLmxlbmd0aDtydDxndDtydCsrKXtsZXQgVz1xW3J0XTtpZihTKFcsdykpe2xldCBfdD1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PzM0MDY3OjM1NTMseXQ9aS5nZXQoVykuX193ZWJnbFRleHR1cmU7ZS5iaW5kVGV4dHVyZShfdCx5dCksTChfdCksZS51bmJpbmRUZXh0dXJlKCl9fX1mdW5jdGlvbiBKKEUpe2lmKEUudXNlUmVuZGVyYnVmZmVyKWlmKGEpe2xldCB3PUUud2lkdGgscT1FLmhlaWdodCxydD0xNjM4NCxndD1bMzYwNjRdLFc9RS5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O0UuZGVwdGhCdWZmZXImJmd0LnB1c2goVyksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weXx8KEUuZGVwdGhCdWZmZXImJihydHw9MjU2KSxFLnN0ZW5jaWxCdWZmZXImJihydHw9MTAyNCkpO2xldCBfdD1pLmdldChFKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LF90Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSYmKG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LFtXXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1ddKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLHcscSwwLDAsdyxxLHJ0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGd0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gaXQoRSl7cmV0dXJuIGEmJihFLnVzZVJlbmRlcmJ1ZmZlcnx8RS51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsRS5zYW1wbGVzKTowfWZ1bmN0aW9uIGV0KEUpe2xldCB3PW8ucmVuZGVyLmZyYW1lO2cuZ2V0KEUpIT09dyYmKGcuc2V0KEUsdyksRS51cGRhdGUoKSl9ZnVuY3Rpb24gdnQoRSx3KXtsZXQgcT1FLmVuY29kaW5nLHJ0PUUuZm9ybWF0LGd0PUUudHlwZTtyZXR1cm4gRS5pc0NvbXByZXNzZWRUZXh0dXJlPT09ITB8fEUuaXNWaWRlb1RleHR1cmU9PT0hMHx8RS5mb3JtYXQ9PT1IdXx8cSE9PXJpJiYocT09PSR0P2E9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiZydD09PVJlPyhFLmZvcm1hdD1IdSxFLm1pbkZpbHRlcj1iZSxFLmdlbmVyYXRlTWlwbWFwcz0hMSk6dz1Obi5zUkdCVG9MaW5lYXIodyk6KHJ0IT09UmV8fGd0IT09ZWkpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixxKSksd31sZXQgYnQ9ITEsSXQ9ITE7ZnVuY3Rpb24gWnQoRSx3KXtFJiZFLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihidD09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQ6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksYnQ9ITApLEU9RS50ZXh0dXJlKSxWKEUsdyl9ZnVuY3Rpb24gcXQoRSx3KXtFJiZFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoSXQ9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxJdD0hMCksRT1FLnRleHR1cmUpLEcoRSx3KX10aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9Tix0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPXosdGhpcy5zZXRUZXh0dXJlMkQ9Vix0aGlzLnNldFRleHR1cmUyREFycmF5PVEsdGhpcy5zZXRUZXh0dXJlM0Q9YXQsdGhpcy5zZXRUZXh0dXJlQ3ViZT1HLHRoaXMucmViaW5kVGV4dHVyZXM9bnQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1DLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWosdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1KLHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1zdCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPW10LHRoaXMuc2FmZVNldFRleHR1cmUyRD1adCx0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1xdH1mdW5jdGlvbiBMRShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtmdW5jdGlvbiByKHMsbz1udWxsKXtsZXQgYTtpZihzPT09ZWkpcmV0dXJuIDUxMjE7aWYocz09PXp3KXJldHVybiAzMjgxOTtpZihzPT09VXcpcmV0dXJuIDMyODIwO2lmKHM9PT1JdylyZXR1cm4gNTEyMDtpZihzPT09TncpcmV0dXJuIDUxMjI7aWYocz09PW5vKXJldHVybiA1MTIzO2lmKHM9PT1GdylyZXR1cm4gNTEyNDtpZihzPT09UWEpcmV0dXJuIDUxMjU7aWYocz09PVVpKXJldHVybiA1MTI2O2lmKHM9PT1VcilyZXR1cm4gaT81MTMxOihhPXQuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksYSE9PW51bGw/YS5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZihzPT09QncpcmV0dXJuIDY0MDY7aWYocz09PVJlKXJldHVybiA2NDA4O2lmKHM9PT1PdylyZXR1cm4gNjQwOTtpZihzPT09a3cpcmV0dXJuIDY0MTA7aWYocz09PU9pKXJldHVybiA2NDAyO2lmKHM9PT1WcilyZXR1cm4gMzQwNDE7aWYocz09PUh3KXJldHVybiA2NDAzO2lmKHM9PT1IdSlyZXR1cm4gYT10LmdldCgiRVhUX3NSR0IiKSxhIT09bnVsbD9hLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYocz09PVZ3KXJldHVybiAzNjI0NDtpZihzPT09R3cpcmV0dXJuIDMzMzE5O2lmKHM9PT1XdylyZXR1cm4gMzMzMjA7aWYocz09PXF3KXJldHVybiAzNjI0OTtpZihzPT09S2N8fHM9PT1RY3x8cz09PWpjfHxzPT09dHUpaWYobz09PSR0KWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2IiKSxhIT09bnVsbCl7aWYocz09PUtjKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUO2lmKHM9PT1RYylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVDtpZihzPT09amMpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ7aWYocz09PXR1KXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7ZWxzZSBpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLGEhPT1udWxsKXtpZihzPT09S2MpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZihzPT09UWMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYocz09PWpjKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKHM9PT10dSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2lmKHM9PT1GbXx8cz09PXptfHxzPT09VW18fHM9PT1CbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxhIT09bnVsbCl7aWYocz09PUZtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYocz09PXptKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYocz09PVVtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKHM9PT1CbSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKHM9PT1YdylyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxhIT09bnVsbD9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZihzPT09T218fHM9PT1rbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksYSE9PW51bGwpe2lmKHM9PT1PbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYocz09PWttKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09SG18fHM9PT1WbXx8cz09PUdtfHxzPT09V218fHM9PT1xbXx8cz09PVhtfHxzPT09WW18fHM9PT1abXx8cz09PUptfHxzPT09JG18fHM9PT1LbXx8cz09PVFtfHxzPT09am18fHM9PT10ZylpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YyIpLGEhPT1udWxsKXtpZihzPT09SG0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7aWYocz09PVZtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKHM9PT1HbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjtpZihzPT09V20pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7aWYocz09PXFtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKHM9PT1YbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjtpZihzPT09WW0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7aWYocz09PVptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKHM9PT1KbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSO2lmKHM9PT0kbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO2lmKHM9PT1LbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKHM9PT1RbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI7aWYocz09PWptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtpZihzPT09dGcpcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYocz09PWVnKWlmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxhIT09bnVsbCl7aWYocz09PWVnKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6YS5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09QnIpcmV0dXJuIGk/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxhIT09bnVsbD9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpfXJldHVybntjb252ZXJ0OnJ9fXZhciBobD1jbGFzcyBleHRlbmRzIFNle2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtobC5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgQmk9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtCaS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgUEU9e3R5cGU6Im1vdmUifSxRcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgQmksdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBCaSx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgVCksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IEJpLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBUKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxlLGkpe2xldCByPW51bGwscz1udWxsLG89bnVsbCxhPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJmUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihhIT09bnVsbCYmKHI9ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsaSksciE9PW51bGwmJihhLm1hdHJpeC5mcm9tQXJyYXkoci50cmFuc2Zvcm0ubWF0cml4KSxhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnJvdGF0aW9uLGEuc2NhbGUpLHIubGluZWFyVmVsb2NpdHk/KGEuaGFzTGluZWFyVmVsb2NpdHk9ITAsYS5saW5lYXJWZWxvY2l0eS5jb3B5KHIubGluZWFyVmVsb2NpdHkpKTphLmhhc0xpbmVhclZlbG9jaXR5PSExLHIuYW5ndWxhclZlbG9jaXR5PyhhLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxhLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHIuYW5ndWxhclZlbG9jaXR5KSk6YS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KFBFKSkpLGMmJnQuaGFuZCl7bz0hMDtmb3IobGV0IHggb2YgdC5oYW5kLnZhbHVlcygpKXtsZXQgdj1lLmdldEpvaW50UG9zZSh4LGkpO2lmKGMuam9pbnRzW3guam9pbnROYW1lXT09PXZvaWQgMCl7bGV0IHA9bmV3IEJpO3AubWF0cml4QXV0b1VwZGF0ZT0hMSxwLnZpc2libGU9ITEsYy5qb2ludHNbeC5qb2ludE5hbWVdPXAsYy5hZGQocCl9bGV0IG09Yy5qb2ludHNbeC5qb2ludE5hbWVdO3YhPT1udWxsJiYobS5tYXRyaXguZnJvbUFycmF5KHYudHJhbnNmb3JtLm1hdHJpeCksbS5tYXRyaXguZGVjb21wb3NlKG0ucG9zaXRpb24sbS5yb3RhdGlvbixtLnNjYWxlKSxtLmpvaW50UmFkaXVzPXYucmFkaXVzKSxtLnZpc2libGU9diE9PW51bGx9bGV0IHU9Yy5qb2ludHNbImluZGV4LWZpbmdlci10aXAiXSxoPWMuam9pbnRzWyJ0aHVtYi10aXAiXSxmPXUucG9zaXRpb24uZGlzdGFuY2VUbyhoLnBvc2l0aW9uKSxkPS4wMixnPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPmQrZz8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJmY8PWQtZyYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbCE9PW51bGwmJnQuZ3JpcFNwYWNlJiYocz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSkscyE9PW51bGwmJihsLm1hdHJpeC5mcm9tQXJyYXkocy50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLHMubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KHMubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLHMuYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHMuYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gYSE9PW51bGwmJihhLnZpc2libGU9ciE9PW51bGwpLGwhPT1udWxsJiYobC52aXNpYmxlPXMhPT1udWxsKSxjIT09bnVsbCYmKGMudmlzaWJsZT1vIT09bnVsbCksdGhpc319LHVvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMsdSl7aWYodT11IT09dm9pZCAwP3U6T2ksdSE9PU9pJiZ1IT09VnIpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO2k9PT12b2lkIDAmJnU9PT1PaSYmKGk9bm8pLGk9PT12b2lkIDAmJnU9PT1WciYmKGk9QnIpLHN1cGVyKG51bGwscixzLG8sYSxsLHUsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj1hIT09dm9pZCAwP2E6ZmUsdGhpcy5taW5GaWx0ZXI9bCE9PXZvaWQgMD9sOmZlLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTt1by5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIFp1PWNsYXNzIGV4dGVuZHMgSW57Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLHM9MSxvPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxoPW51bGwsZj1udWxsLGQ9ITEsZz1udWxsLHg9ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLHY9bnVsbCxtPW51bGwscD1bXSxiPW5ldyBNYXAsXz1uZXcgU2U7Xy5sYXllcnMuZW5hYmxlKDEpLF8udmlld3BvcnQ9bmV3IFd0O2xldCBTPW5ldyBTZTtTLmxheWVycy5lbmFibGUoMiksUy52aWV3cG9ydD1uZXcgV3Q7bGV0IEw9W18sU10sQT1uZXcgaGw7QS5sYXllcnMuZW5hYmxlKDEpLEEubGF5ZXJzLmVuYWJsZSgyKTtsZXQgSD1udWxsLHR0PW51bGw7dGhpcy5jYW1lcmFBdXRvVXBkYXRlPSEwLHRoaXMuZW5hYmxlZD0hMSx0aGlzLmlzUHJlc2VudGluZz0hMSx0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24oRyl7bGV0ICQ9cFtHXTtyZXR1cm4gJD09PXZvaWQgMCYmKCQ9bmV3IFFzLHBbR109JCksJC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKEcpe2xldCAkPXBbR107cmV0dXJuICQ9PT12b2lkIDAmJigkPW5ldyBRcyxwW0ddPSQpLCQuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbihHKXtsZXQgJD1wW0ddO3JldHVybiAkPT09dm9pZCAwJiYoJD1uZXcgUXMscFtHXT0kKSwkLmdldEhhbmRTcGFjZSgpfTtmdW5jdGlvbiBYKEcpe2xldCAkPWIuZ2V0KEcuaW5wdXRTb3VyY2UpOyQmJiQuZGlzcGF0Y2hFdmVudCh7dHlwZTpHLnR5cGUsZGF0YTpHLmlucHV0U291cmNlfSl9ZnVuY3Rpb24geSgpe2IuZm9yRWFjaChmdW5jdGlvbihHLCQpe0cuZGlzY29ubmVjdCgkKX0pLGIuY2xlYXIoKSxIPW51bGwsdHQ9bnVsbCx0LnNldFJlbmRlclRhcmdldCh2KSxmPW51bGwsaD1udWxsLHU9bnVsbCxyPW51bGwsbT1udWxsLGF0LnN0b3AoKSxpLmlzUHJlc2VudGluZz0hMSxpLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKEcpe3M9RyxpLmlzUHJlc2VudGluZz09PSEwJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSBmcmFtZWJ1ZmZlciBzY2FsZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLnNldFJlZmVyZW5jZVNwYWNlVHlwZT1mdW5jdGlvbihHKXthPUcsaS5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBvfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGd9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiByfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oRyl7cmV0dXJuIGhmKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtpZihyPUcsciE9PW51bGwpe2lmKHY9dC5nZXRSZW5kZXJUYXJnZXQoKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJlbmQiLHkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIixSKSx4LnhyQ29tcGF0aWJsZSE9PSEwJiYoeWllbGQgZS5tYWtlWFJDb21wYXRpYmxlKCkpLHIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwfHx0LmNhcGFiaWxpdGllcy5pc1dlYkdMMj09PSExKXtsZXQgJD17YW50aWFsaWFzOnIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP3guYW50aWFsaWFzOiEwLGFscGhhOnguYWxwaGEsZGVwdGg6eC5kZXB0aCxzdGVuY2lsOnguc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOnN9O2Y9bmV3IFhSV2ViR0xMYXllcihyLGUsJCksci51cGRhdGVSZW5kZXJTdGF0ZSh7YmFzZUxheWVyOmZ9KSxtPW5ldyBOZShmLmZyYW1lYnVmZmVyV2lkdGgsZi5mcmFtZWJ1ZmZlckhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pfWVsc2V7ZD14LmFudGlhbGlhcztsZXQgJD1udWxsLGx0PW51bGwsZHQ9bnVsbDt4LmRlcHRoJiYoZHQ9eC5zdGVuY2lsPzM1MDU2OjMzMTkwLCQ9eC5zdGVuY2lsP1ZyOk9pLGx0PXguc3RlbmNpbD9Ccjpubyk7bGV0IHh0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09JHQ/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6ZHQsc2NhbGVGYWN0b3I6c307dT1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKHh0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSksZD9tPW5ldyBzbyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpSZSx0eXBlOmVpLGRlcHRoVGV4dHVyZTpuZXcgdW8oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LGx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCQpLHN0ZW5jaWxCdWZmZXI6eC5zdGVuY2lsLGlnbm9yZURlcHRoOmguaWdub3JlRGVwdGhWYWx1ZXMsdXNlUmVuZGVyVG9UZXh0dXJlOmwsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pOm09bmV3IE5lKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZGVwdGhUZXh0dXJlOm5ldyB1byhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQsbHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsJCksc3RlbmNpbEJ1ZmZlcjp4LnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9bS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLG89eWllbGQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksYXQuc2V0Q29udGV4dChyKSxhdC5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX0pfTtmdW5jdGlvbiBSKEcpe2xldCAkPXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgbHQ9MDtsdDxwLmxlbmd0aDtsdCsrKWIuc2V0KCRbbHRdLHBbbHRdKTtmb3IobGV0IGx0PTA7bHQ8Ry5yZW1vdmVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5yZW1vdmVkW2x0XSx4dD1iLmdldChkdCk7eHQmJih4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6ZHR9KSxiLmRlbGV0ZShkdCkpfWZvcihsZXQgbHQ9MDtsdDxHLmFkZGVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5hZGRlZFtsdF0seHQ9Yi5nZXQoZHQpO3h0JiZ4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6ZHR9KX19bGV0IEQ9bmV3IFQsRj1uZXcgVDtmdW5jdGlvbiB6KEcsJCxsdCl7RC5zZXRGcm9tTWF0cml4UG9zaXRpb24oJC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24obHQubWF0cml4V29ybGQpO2xldCBkdD1ELmRpc3RhbmNlVG8oRikseHQ9JC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLGs9bHQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxGdD14dFsxNF0vKHh0WzEwXS0xKSxtdD14dFsxNF0vKHh0WzEwXSsxKSxTdD0oeHRbOV0rMSkveHRbNV0sQj0oeHRbOV0tMSkveHRbNV0sc3Q9KHh0WzhdLTEpL3h0WzBdLG50PShrWzhdKzEpL2tbMF0sQz1GdCpzdCxqPUZ0Km50LEo9ZHQvKC1zdCtudCksaXQ9Siotc3Q7JC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoRy5wb3NpdGlvbixHLnF1YXRlcm5pb24sRy5zY2FsZSksRy50cmFuc2xhdGVYKGl0KSxHLnRyYW5zbGF0ZVooSiksRy5tYXRyaXhXb3JsZC5jb21wb3NlKEcucG9zaXRpb24sRy5xdWF0ZXJuaW9uLEcuc2NhbGUpLEcubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoRy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGV0PUZ0K0osdnQ9bXQrSixidD1DLWl0LEl0PWorKGR0LWl0KSxadD1TdCptdC92dCpldCxxdD1CKm10L3Z0KmV0O0cucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoYnQsSXQsWnQscXQsZXQsdnQpfWZ1bmN0aW9uIE4oRywkKXskPT09bnVsbD9HLm1hdHJpeFdvcmxkLmNvcHkoRy5tYXRyaXgpOkcubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcygkLm1hdHJpeFdvcmxkLEcubWF0cml4KSxHLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KEcubWF0cml4V29ybGQpLmludmVydCgpfXRoaXMudXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKEcpe2lmKHI9PT1udWxsKXJldHVybjtBLm5lYXI9Uy5uZWFyPV8ubmVhcj1HLm5lYXIsQS5mYXI9Uy5mYXI9Xy5mYXI9Ry5mYXIsKEghPT1BLm5lYXJ8fHR0IT09QS5mYXIpJiYoci51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOkEubmVhcixkZXB0aEZhcjpBLmZhcn0pLEg9QS5uZWFyLHR0PUEuZmFyKTtsZXQgJD1HLnBhcmVudCxsdD1BLmNhbWVyYXM7TihBLCQpO2ZvcihsZXQgeHQ9MDt4dDxsdC5sZW5ndGg7eHQrKylOKGx0W3h0XSwkKTtBLm1hdHJpeFdvcmxkLmRlY29tcG9zZShBLnBvc2l0aW9uLEEucXVhdGVybmlvbixBLnNjYWxlKSxHLnBvc2l0aW9uLmNvcHkoQS5wb3NpdGlvbiksRy5xdWF0ZXJuaW9uLmNvcHkoQS5xdWF0ZXJuaW9uKSxHLnNjYWxlLmNvcHkoQS5zY2FsZSksRy5tYXRyaXguY29weShBLm1hdHJpeCksRy5tYXRyaXhXb3JsZC5jb3B5KEEubWF0cml4V29ybGQpO2xldCBkdD1HLmNoaWxkcmVuO2ZvcihsZXQgeHQ9MCxrPWR0Lmxlbmd0aDt4dDxrO3h0KyspZHRbeHRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtsdC5sZW5ndGg9PT0yP3ooQSxfLFMpOkEucHJvamVjdGlvbk1hdHJpeC5jb3B5KF8ucHJvamVjdGlvbk1hdHJpeCl9LHRoaXMuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIEF9LHRoaXMuZ2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKCl7aWYoaCE9PW51bGwpcmV0dXJuIGguZml4ZWRGb3ZlYXRpb247aWYoZiE9PW51bGwpcmV0dXJuIGYuZml4ZWRGb3ZlYXRpb259LHRoaXMuc2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKEcpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1HKSxmIT09bnVsbCYmZi5maXhlZEZvdmVhdGlvbiE9PXZvaWQgMCYmKGYuZml4ZWRGb3ZlYXRpb249Ryl9O2xldCBWPW51bGw7ZnVuY3Rpb24gUShHLCQpe2lmKGM9JC5nZXRWaWV3ZXJQb3NlKG8pLGc9JCxjIT09bnVsbCl7bGV0IGR0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKG0sZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQobSkpO2xldCB4dD0hMTtkdC5sZW5ndGghPT1BLmNhbWVyYXMubGVuZ3RoJiYoQS5jYW1lcmFzLmxlbmd0aD0wLHh0PSEwKTtmb3IobGV0IGs9MDtrPGR0Lmxlbmd0aDtrKyspe2xldCBGdD1kdFtrXSxtdD1udWxsO2lmKGYhPT1udWxsKW10PWYuZ2V0Vmlld3BvcnQoRnQpO2Vsc2V7bGV0IEI9dS5nZXRWaWV3U3ViSW1hZ2UoaCxGdCk7bXQ9Qi52aWV3cG9ydCxrPT09MCYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMobSxCLmNvbG9yVGV4dHVyZSxoLmlnbm9yZURlcHRoVmFsdWVzP3ZvaWQgMDpCLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KG0pKX1sZXQgU3Q9TFtrXTtTdC5tYXRyaXguZnJvbUFycmF5KEZ0LnRyYW5zZm9ybS5tYXRyaXgpLFN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEZ0LnByb2plY3Rpb25NYXRyaXgpLFN0LnZpZXdwb3J0LnNldChtdC54LG10LnksbXQud2lkdGgsbXQuaGVpZ2h0KSxrPT09MCYmQS5tYXRyaXguY29weShTdC5tYXRyaXgpLHh0PT09ITAmJkEuY2FtZXJhcy5wdXNoKFN0KX19bGV0IGx0PXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgZHQ9MDtkdDxwLmxlbmd0aDtkdCsrKXtsZXQgeHQ9cFtkdF0saz1sdFtkdF07eHQudXBkYXRlKGssJCxvKX1WJiZWKEcsJCksZz1udWxsfWxldCBhdD1uZXcgZzA7YXQuc2V0QW5pbWF0aW9uTG9vcChRKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oRyl7Vj1HfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gREUobil7ZnVuY3Rpb24gdChtLHApe20uZm9nQ29sb3IudmFsdWUuY29weShwLmNvbG9yKSxwLmlzRm9nPyhtLmZvZ05lYXIudmFsdWU9cC5uZWFyLG0uZm9nRmFyLnZhbHVlPXAuZmFyKTpwLmlzRm9nRXhwMiYmKG0uZm9nRGVuc2l0eS52YWx1ZT1wLmRlbnNpdHkpfWZ1bmN0aW9uIGUobSxwLGIsXyxTKXtwLmlzTWVzaEJhc2ljTWF0ZXJpYWw/aShtLHApOnAuaXNNZXNoTGFtYmVydE1hdGVyaWFsPyhpKG0scCksbChtLHApKTpwLmlzTWVzaFRvb25NYXRlcmlhbD8oaShtLHApLHUobSxwKSk6cC5pc01lc2hQaG9uZ01hdGVyaWFsPyhpKG0scCksYyhtLHApKTpwLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkobSxwKSxwLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZihtLHAsUyk6aChtLHApKTpwLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKG0scCksZChtLHApKTpwLmlzTWVzaERlcHRoTWF0ZXJpYWw/KGkobSxwKSxnKG0scCkpOnAuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oaShtLHApLHgobSxwKSk6cC5pc01lc2hOb3JtYWxNYXRlcmlhbD8oaShtLHApLHYobSxwKSk6cC5pc0xpbmVCYXNpY01hdGVyaWFsPyhyKG0scCkscC5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmcyhtLHApKTpwLmlzUG9pbnRzTWF0ZXJpYWw/byhtLHAsYixfKTpwLmlzU3ByaXRlTWF0ZXJpYWw/YShtLHApOnAuaXNTaGFkb3dNYXRlcmlhbD8obS5jb2xvci52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHkpOnAuaXNTaGFkZXJNYXRlcmlhbCYmKHAudW5pZm9ybXNOZWVkVXBkYXRlPSExKX1mdW5jdGlvbiBpKG0scCl7bS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eSxwLmNvbG9yJiZtLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxwLmVtaXNzaXZlJiZtLmVtaXNzaXZlLnZhbHVlLmNvcHkocC5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIocC5lbWlzc2l2ZUludGVuc2l0eSkscC5tYXAmJihtLm1hcC52YWx1ZT1wLm1hcCkscC5hbHBoYU1hcCYmKG0uYWxwaGFNYXAudmFsdWU9cC5hbHBoYU1hcCkscC5zcGVjdWxhck1hcCYmKG0uc3BlY3VsYXJNYXAudmFsdWU9cC5zcGVjdWxhck1hcCkscC5hbHBoYVRlc3Q+MCYmKG0uYWxwaGFUZXN0LnZhbHVlPXAuYWxwaGFUZXN0KTtsZXQgYj1uLmdldChwKS5lbnZNYXA7YiYmKG0uZW52TWFwLnZhbHVlPWIsbS5mbGlwRW52TWFwLnZhbHVlPWIuaXNDdWJlVGV4dHVyZSYmYi5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxLG0ucmVmbGVjdGl2aXR5LnZhbHVlPXAucmVmbGVjdGl2aXR5LG0uaW9yLnZhbHVlPXAuaW9yLG0ucmVmcmFjdGlvblJhdGlvLnZhbHVlPXAucmVmcmFjdGlvblJhdGlvKSxwLmxpZ2h0TWFwJiYobS5saWdodE1hcC52YWx1ZT1wLmxpZ2h0TWFwLG0ubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9cC5saWdodE1hcEludGVuc2l0eSkscC5hb01hcCYmKG0uYW9NYXAudmFsdWU9cC5hb01hcCxtLmFvTWFwSW50ZW5zaXR5LnZhbHVlPXAuYW9NYXBJbnRlbnNpdHkpO2xldCBfO3AubWFwP189cC5tYXA6cC5zcGVjdWxhck1hcD9fPXAuc3BlY3VsYXJNYXA6cC5kaXNwbGFjZW1lbnRNYXA/Xz1wLmRpc3BsYWNlbWVudE1hcDpwLm5vcm1hbE1hcD9fPXAubm9ybWFsTWFwOnAuYnVtcE1hcD9fPXAuYnVtcE1hcDpwLnJvdWdobmVzc01hcD9fPXAucm91Z2huZXNzTWFwOnAubWV0YWxuZXNzTWFwP189cC5tZXRhbG5lc3NNYXA6cC5hbHBoYU1hcD9fPXAuYWxwaGFNYXA6cC5lbWlzc2l2ZU1hcD9fPXAuZW1pc3NpdmVNYXA6cC5jbGVhcmNvYXRNYXA/Xz1wLmNsZWFyY29hdE1hcDpwLmNsZWFyY29hdE5vcm1hbE1hcD9fPXAuY2xlYXJjb2F0Tm9ybWFsTWFwOnAuY2xlYXJjb2F0Um91Z2huZXNzTWFwP189cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA6cC5zcGVjdWxhckludGVuc2l0eU1hcD9fPXAuc3BlY3VsYXJJbnRlbnNpdHlNYXA6cC5zcGVjdWxhckNvbG9yTWFwP189cC5zcGVjdWxhckNvbG9yTWFwOnAudHJhbnNtaXNzaW9uTWFwP189cC50cmFuc21pc3Npb25NYXA6cC50aGlja25lc3NNYXA/Xz1wLnRoaWNrbmVzc01hcDpwLnNoZWVuQ29sb3JNYXA/Xz1wLnNoZWVuQ29sb3JNYXA6cC5zaGVlblJvdWdobmVzc01hcCYmKF89cC5zaGVlblJvdWdobmVzc01hcCksXyE9PXZvaWQgMCYmKF8uaXNXZWJHTFJlbmRlclRhcmdldCYmKF89Xy50ZXh0dXJlKSxfLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmXy51cGRhdGVNYXRyaXgoKSxtLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoXy5tYXRyaXgpKTtsZXQgUztwLmFvTWFwP1M9cC5hb01hcDpwLmxpZ2h0TWFwJiYoUz1wLmxpZ2h0TWFwKSxTIT09dm9pZCAwJiYoUy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoUz1TLnRleHR1cmUpLFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoUy5tYXRyaXgpKX1mdW5jdGlvbiByKG0scCl7bS5kaWZmdXNlLnZhbHVlLmNvcHkocC5jb2xvciksbS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eX1mdW5jdGlvbiBzKG0scCl7bS5kYXNoU2l6ZS52YWx1ZT1wLmRhc2hTaXplLG0udG90YWxTaXplLnZhbHVlPXAuZGFzaFNpemUrcC5nYXBTaXplLG0uc2NhbGUudmFsdWU9cC5zY2FsZX1mdW5jdGlvbiBvKG0scCxiLF8pe20uZGlmZnVzZS52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHksbS5zaXplLnZhbHVlPXAuc2l6ZSpiLG0uc2NhbGUudmFsdWU9XyouNSxwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBTO3AubWFwP1M9cC5tYXA6cC5hbHBoYU1hcCYmKFM9cC5hbHBoYU1hcCksUyE9PXZvaWQgMCYmKFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpfWZ1bmN0aW9uIGEobSxwKXttLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxtLm9wYWNpdHkudmFsdWU9cC5vcGFjaXR5LG0ucm90YXRpb24udmFsdWU9cC5yb3RhdGlvbixwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBiO3AubWFwP2I9cC5tYXA6cC5hbHBoYU1hcCYmKGI9cC5hbHBoYU1hcCksYiE9PXZvaWQgMCYmKGIubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZiLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShiLm1hdHJpeCkpfWZ1bmN0aW9uIGwobSxwKXtwLmVtaXNzaXZlTWFwJiYobS5lbWlzc2l2ZU1hcC52YWx1ZT1wLmVtaXNzaXZlTWFwKX1mdW5jdGlvbiBjKG0scCl7bS5zcGVjdWxhci52YWx1ZS5jb3B5KHAuc3BlY3VsYXIpLG0uc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KHAuc2hpbmluZXNzLDFlLTQpLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gdShtLHApe3AuZ3JhZGllbnRNYXAmJihtLmdyYWRpZW50TWFwLnZhbHVlPXAuZ3JhZGllbnRNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gaChtLHApe20ucm91Z2huZXNzLnZhbHVlPXAucm91Z2huZXNzLG0ubWV0YWxuZXNzLnZhbHVlPXAubWV0YWxuZXNzLHAucm91Z2huZXNzTWFwJiYobS5yb3VnaG5lc3NNYXAudmFsdWU9cC5yb3VnaG5lc3NNYXApLHAubWV0YWxuZXNzTWFwJiYobS5tZXRhbG5lc3NNYXAudmFsdWU9cC5tZXRhbG5lc3NNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyksbi5nZXQocCkuZW52TWFwJiYobS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9cC5lbnZNYXBJbnRlbnNpdHkpfWZ1bmN0aW9uIGYobSxwLGIpe2gobSxwKSxtLmlvci52YWx1ZT1wLmlvcixwLnNoZWVuPjAmJihtLnNoZWVuQ29sb3IudmFsdWUuY29weShwLnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHAuc2hlZW4pLG0uc2hlZW5Sb3VnaG5lc3MudmFsdWU9cC5zaGVlblJvdWdobmVzcyxwLnNoZWVuQ29sb3JNYXAmJihtLnNoZWVuQ29sb3JNYXAudmFsdWU9cC5zaGVlbkNvbG9yTWFwKSxwLnNoZWVuUm91Z2huZXNzTWFwJiYobS5zaGVlblJvdWdobmVzc01hcC52YWx1ZT1wLnNoZWVuUm91Z2huZXNzTWFwKSkscC5jbGVhcmNvYXQ+MCYmKG0uY2xlYXJjb2F0LnZhbHVlPXAuY2xlYXJjb2F0LG0uY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXAuY2xlYXJjb2F0Um91Z2huZXNzLHAuY2xlYXJjb2F0TWFwJiYobS5jbGVhcmNvYXRNYXAudmFsdWU9cC5jbGVhcmNvYXRNYXApLHAuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYobS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHAuY2xlYXJjb2F0Tm9ybWFsTWFwJiYobS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLG0uY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXAuY2xlYXJjb2F0Tm9ybWFsTWFwLHAuc2lkZT09PWhlJiZtLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSkscC50cmFuc21pc3Npb24+MCYmKG0udHJhbnNtaXNzaW9uLnZhbHVlPXAudHJhbnNtaXNzaW9uLG0udHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZT1iLnRleHR1cmUsbS50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS52YWx1ZS5zZXQoYi53aWR0aCxiLmhlaWdodCkscC50cmFuc21pc3Npb25NYXAmJihtLnRyYW5zbWlzc2lvbk1hcC52YWx1ZT1wLnRyYW5zbWlzc2lvbk1hcCksbS50aGlja25lc3MudmFsdWU9cC50aGlja25lc3MscC50aGlja25lc3NNYXAmJihtLnRoaWNrbmVzc01hcC52YWx1ZT1wLnRoaWNrbmVzc01hcCksbS5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlPXAuYXR0ZW51YXRpb25EaXN0YW5jZSxtLmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weShwLmF0dGVudWF0aW9uQ29sb3IpKSxtLnNwZWN1bGFySW50ZW5zaXR5LnZhbHVlPXAuc3BlY3VsYXJJbnRlbnNpdHksbS5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkocC5zcGVjdWxhckNvbG9yKSxwLnNwZWN1bGFySW50ZW5zaXR5TWFwJiYobS5zcGVjdWxhckludGVuc2l0eU1hcC52YWx1ZT1wLnNwZWN1bGFySW50ZW5zaXR5TWFwKSxwLnNwZWN1bGFyQ29sb3JNYXAmJihtLnNwZWN1bGFyQ29sb3JNYXAudmFsdWU9cC5zcGVjdWxhckNvbG9yTWFwKX1mdW5jdGlvbiBkKG0scCl7cC5tYXRjYXAmJihtLm1hdGNhcC52YWx1ZT1wLm1hdGNhcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBnKG0scCl7cC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24geChtLHApe3AuZGlzcGxhY2VtZW50TWFwJiYobS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9cC5kaXNwbGFjZW1lbnRNYXAsbS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1wLmRpc3BsYWNlbWVudFNjYWxlLG0uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1wLmRpc3BsYWNlbWVudEJpYXMpLG0ucmVmZXJlbmNlUG9zaXRpb24udmFsdWUuY29weShwLnJlZmVyZW5jZVBvc2l0aW9uKSxtLm5lYXJEaXN0YW5jZS52YWx1ZT1wLm5lYXJEaXN0YW5jZSxtLmZhckRpc3RhbmNlLnZhbHVlPXAuZmFyRGlzdGFuY2V9ZnVuY3Rpb24gdihtLHApe3AuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3Jtczp0LHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOmV9fWZ1bmN0aW9uIElFKCl7bGV0IG49cm8oImNhbnZhcyIpO3JldHVybiBuLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixufWZ1bmN0aW9uIFZ0KG49e30pe2xldCB0PW4uY2FudmFzIT09dm9pZCAwP24uY2FudmFzOklFKCksZT1uLmNvbnRleHQhPT12b2lkIDA/bi5jb250ZXh0Om51bGwsaT1uLmFscGhhIT09dm9pZCAwP24uYWxwaGE6ITEscj1uLmRlcHRoIT09dm9pZCAwP24uZGVwdGg6ITAscz1uLnN0ZW5jaWwhPT12b2lkIDA/bi5zdGVuY2lsOiEwLG89bi5hbnRpYWxpYXMhPT12b2lkIDA/bi5hbnRpYWxpYXM6ITEsYT1uLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9uLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPW4ucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP24ucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9bi5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP24uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLGQ9W10sZz1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPXJpLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz10aSx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgeD10aGlzLHY9ITEsbT0wLHA9MCxiPW51bGwsXz0tMSxTPW51bGwsTD1uZXcgV3QsQT1uZXcgV3QsSD1udWxsLHR0PXQud2lkdGgsWD10LmhlaWdodCx5PTEsUj1udWxsLEQ9bnVsbCxGPW5ldyBXdCgwLDAsdHQsWCksej1uZXcgV3QoMCwwLHR0LFgpLE49ITEsVj1uZXcgcXIsUT0hMSxhdD0hMSxHPW51bGwsJD1uZXcgd3QsbHQ9bmV3IFQsZHQ9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiB4dCgpe3JldHVybiBiPT09bnVsbD95OjF9bGV0IGs9ZTtmdW5jdGlvbiBGdChNLEkpe2ZvcihsZXQgTz0wO088TS5sZW5ndGg7TysrKXtsZXQgVT1NW09dLFo9dC5nZXRDb250ZXh0KFUsSSk7aWYoWiE9PW51bGwpcmV0dXJuIFp9cmV0dXJuIG51bGx9dHJ5e2xldCBNPXthbHBoYTohMCxkZXB0aDpyLHN0ZW5jaWw6cyxhbnRpYWxpYXM6byxwcmVtdWx0aXBsaWVkQWxwaGE6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7JGh9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixBdCwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsUCwhMSksaz09PW51bGwpe2xldCBJPVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZih4LmlzV2ViR0wxUmVuZGVyZXI9PT0hMCYmSS5zaGlmdCgpLGs9RnQoSSxNKSxrPT09bnVsbCl0aHJvdyBGdChJKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfWsuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PT09dm9pZCAwJiYoay5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKE0pe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrTS5tZXNzYWdlKSxNfWxldCBtdCxTdCxCLHN0LG50LEMsaixKLGl0LGV0LHZ0LGJ0LEl0LFp0LHF0LEUsdyxxLHJ0LGd0LFcsX3QseXQ7ZnVuY3Rpb24gdXQoKXttdD1uZXcgZVMoayksU3Q9bmV3IEoxKGssbXQsbiksbXQuaW5pdChTdCksX3Q9bmV3IExFKGssbXQsU3QpLEI9bmV3IENFKGssbXQsU3QpLHN0PW5ldyByUyhrKSxudD1uZXcgeEUsQz1uZXcgUkUoayxtdCxCLG50LFN0LF90LHN0KSxqPW5ldyBLMSh4KSxKPW5ldyB0Uyh4KSxpdD1uZXcgdk0oayxTdCkseXQ9bmV3IFkxKGssbXQsaXQsU3QpLGV0PW5ldyBuUyhrLGl0LHN0LHl0KSx2dD1uZXcgbFMoayxldCxpdCxzdCkscnQ9bmV3IGFTKGssU3QsQyksRT1uZXcgJDEobnQpLGJ0PW5ldyBnRSh4LGosSixtdCxTdCx5dCxFKSxJdD1uZXcgREUobnQpLFp0PW5ldyB2RSxxdD1uZXcgRUUobXQsU3QpLHE9bmV3IFgxKHgsaixCLHZ0LGksYSksdz1uZXcgVDAoeCx2dCxTdCksZ3Q9bmV3IFoxKGssbXQsc3QsU3QpLFc9bmV3IGlTKGssbXQsc3QsU3QpLHN0LnByb2dyYW1zPWJ0LnByb2dyYW1zLHguY2FwYWJpbGl0aWVzPVN0LHguZXh0ZW5zaW9ucz1tdCx4LnByb3BlcnRpZXM9bnQseC5yZW5kZXJMaXN0cz1adCx4LnNoYWRvd01hcD13LHguc3RhdGU9Qix4LmluZm89c3R9dXQoKTtsZXQgY3Q9bmV3IFp1KHgsayk7dGhpcy54cj1jdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBrLmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBNPW10LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7TSYmTS5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgTT1tdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO00mJk0ucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIHl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihNKXtNIT09dm9pZCAwJiYoeT1NLHRoaXMuc2V0U2l6ZSh0dCxYLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihNKXtyZXR1cm4gTS5zZXQodHQsWCl9LHRoaXMuc2V0U2l6ZT1mdW5jdGlvbihNLEksTyl7aWYoY3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn10dD1NLFg9SSx0LndpZHRoPU1hdGguZmxvb3IoTSp5KSx0LmhlaWdodD1NYXRoLmZsb29yKEkqeSksTyE9PSExJiYodC5zdHlsZS53aWR0aD1NKyJweCIsdC5zdHlsZS5oZWlnaHQ9SSsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKE0pe3JldHVybiBNLnNldCh0dCp5LFgqeSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihNLEksTyl7dHQ9TSxYPUkseT1PLHQud2lkdGg9TWF0aC5mbG9vcihNKk8pLHQuaGVpZ2h0PU1hdGguZmxvb3IoSSpPKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihNKXtyZXR1cm4gTS5jb3B5KEwpfSx0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoRil9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oTSxJLE8sVSl7TS5pc1ZlY3RvcjQ/Ri5zZXQoTS54LE0ueSxNLnosTS53KTpGLnNldChNLEksTyxVKSxCLnZpZXdwb3J0KEwuY29weShGKS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoeil9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihNLEksTyxVKXtNLmlzVmVjdG9yND96LnNldChNLngsTS55LE0ueixNLncpOnouc2V0KE0sSSxPLFUpLEIuc2Npc3NvcihBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gTn0sdGhpcy5zZXRTY2lzc29yVGVzdD1mdW5jdGlvbihNKXtCLnNldFNjaXNzb3JUZXN0KE49TSl9LHRoaXMuc2V0T3BhcXVlU29ydD1mdW5jdGlvbihNKXtSPU19LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKE0pe0Q9TX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkocS5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtxLnNldENsZWFyQ29sb3IuYXBwbHkocSxhcmd1bWVudHMpfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gcS5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3Euc2V0Q2xlYXJBbHBoYS5hcHBseShxLGFyZ3VtZW50cyl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oTSxJLE8pe2xldCBVPTA7KE09PT12b2lkIDB8fE0pJiYoVXw9MTYzODQpLChJPT09dm9pZCAwfHxJKSYmKFV8PTI1NiksKE89PT12b2lkIDB8fE8pJiYoVXw9MTAyNCksay5jbGVhcihVKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEF0LCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixQLCExKSxadC5kaXNwb3NlKCkscXQuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxqLmRpc3Bvc2UoKSxKLmRpc3Bvc2UoKSx2dC5kaXNwb3NlKCkseXQuZGlzcG9zZSgpLGJ0LmRpc3Bvc2UoKSxjdC5kaXNwb3NlKCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0IixEdCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIsanQpLEcmJihHLmRpc3Bvc2UoKSxHPW51bGwpLHplLnN0b3AoKX07ZnVuY3Rpb24gQXQoTSl7TS5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksdj0hMH1mdW5jdGlvbiBQKCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksdj0hMTtsZXQgTT1zdC5hdXRvUmVzZXQsST13LmVuYWJsZWQsTz13LmF1dG9VcGRhdGUsVT13Lm5lZWRzVXBkYXRlLFo9dy50eXBlO3V0KCksc3QuYXV0b1Jlc2V0PU0sdy5lbmFibGVkPUksdy5hdXRvVXBkYXRlPU8sdy5uZWVkc1VwZGF0ZT1VLHcudHlwZT1afWZ1bmN0aW9uIHB0KE0pe2xldCBJPU0udGFyZ2V0O0kucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLGh0KEkpfWZ1bmN0aW9uIGh0KE0pe0V0KE0pLG50LnJlbW92ZShNKX1mdW5jdGlvbiBFdChNKXtsZXQgST1udC5nZXQoTSkucHJvZ3JhbXM7SSE9PXZvaWQgMCYmKEkuZm9yRWFjaChmdW5jdGlvbihPKXtidC5yZWxlYXNlUHJvZ3JhbShPKX0pLE0uaXNTaGFkZXJNYXRlcmlhbCYmYnQucmVsZWFzZVNoYWRlckNhY2hlKE0pKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihNLEksTyxVLFosVHQpe0k9PT1udWxsJiYoST1kdCk7bGV0IEN0PVouaXNNZXNoJiZaLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxMdD1CMChNLEksTyxVLFopO0Iuc2V0TWF0ZXJpYWwoVSxDdCk7bGV0IFJ0PU8uaW5kZXgsR3Q9Ty5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKFJ0PT09bnVsbCl7aWYoR3Q9PT12b2lkIDB8fEd0LmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihSdC5jb3VudD09PTApcmV0dXJuO2xldCB6dD0xO1Uud2lyZWZyYW1lPT09ITAmJihSdD1ldC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoTyksenQ9MikseXQuc2V0dXAoWixVLEx0LE8sUnQpO2xldCBVdCxpZT1ndDtSdCE9PW51bGwmJihVdD1pdC5nZXQoUnQpLGllPVcsaWUuc2V0SW5kZXgoVXQpKTtsZXQgZmk9UnQhPT1udWxsP1J0LmNvdW50Okd0LmNvdW50LFppPU8uZHJhd1JhbmdlLnN0YXJ0Knp0LE90PU8uZHJhd1JhbmdlLmNvdW50Knp0LG5uPVR0IT09bnVsbD9UdC5zdGFydCp6dDowLGxlPVR0IT09bnVsbD9UdC5jb3VudCp6dDoxLzAscm49TWF0aC5tYXgoWmksbm4pLElvPU1hdGgubWluKGZpLFppK090LG5uK2xlKS0xLHNuPU1hdGgubWF4KDAsSW8tcm4rMSk7aWYoc24hPT0wKXtpZihaLmlzTWVzaClVLndpcmVmcmFtZT09PSEwPyhCLnNldExpbmVXaWR0aChVLndpcmVmcmFtZUxpbmV3aWR0aCp4dCgpKSxpZS5zZXRNb2RlKDEpKTppZS5zZXRNb2RlKDQpO2Vsc2UgaWYoWi5pc0xpbmUpe2xldCB2bj1VLmxpbmV3aWR0aDt2bj09PXZvaWQgMCYmKHZuPTEpLEIuc2V0TGluZVdpZHRoKHZuKnh0KCkpLFouaXNMaW5lU2VnbWVudHM/aWUuc2V0TW9kZSgxKTpaLmlzTGluZUxvb3A/aWUuc2V0TW9kZSgyKTppZS5zZXRNb2RlKDMpfWVsc2UgWi5pc1BvaW50cz9pZS5zZXRNb2RlKDApOlouaXNTcHJpdGUmJmllLnNldE1vZGUoNCk7aWYoWi5pc0luc3RhbmNlZE1lc2gpaWUucmVuZGVySW5zdGFuY2VzKHJuLHNuLFouY291bnQpO2Vsc2UgaWYoTy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgdm49TWF0aC5taW4oTy5pbnN0YW5jZUNvdW50LE8uX21heEluc3RhbmNlQ291bnQpO2llLnJlbmRlckluc3RhbmNlcyhybixzbix2bil9ZWxzZSBpZS5yZW5kZXIocm4sc24pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKE0sSSl7Zj1xdC5nZXQoTSksZi5pbml0KCksZy5wdXNoKGYpLE0udHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKE8pe08uaXNMaWdodCYmTy5sYXllcnMudGVzdChJLmxheWVycykmJihmLnB1c2hMaWdodChPKSxPLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhPKSl9KSxmLnNldHVwTGlnaHRzKHgucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLE0udHJhdmVyc2UoZnVuY3Rpb24oTyl7bGV0IFU9Ty5tYXRlcmlhbDtpZihVKWlmKEFycmF5LmlzQXJyYXkoVSkpZm9yKGxldCBaPTA7WjxVLmxlbmd0aDtaKyspe2xldCBUdD1VW1pdO09sKFR0LE0sTyl9ZWxzZSBPbChVLE0sTyl9KSxnLnBvcCgpLGY9bnVsbH07bGV0IFk9bnVsbDtmdW5jdGlvbiBNdChNKXtZJiZZKE0pfWZ1bmN0aW9uIER0KCl7emUuc3RvcCgpfWZ1bmN0aW9uIGp0KCl7emUuc3RhcnQoKX1sZXQgemU9bmV3IGcwO3plLnNldEFuaW1hdGlvbkxvb3AoTXQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ6ZS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKE0pe1k9TSxjdC5zZXRBbmltYXRpb25Mb29wKE0pLE09PT1udWxsP3plLnN0b3AoKTp6ZS5zdGFydCgpfSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLER0KSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixqdCksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oTSxJKXtpZihJIT09dm9pZCAwJiZJLmlzQ2FtZXJhIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4iKTtyZXR1cm59aWYodj09PSEwKXJldHVybjtNLmF1dG9VcGRhdGU9PT0hMCYmTS51cGRhdGVNYXRyaXhXb3JsZCgpLEkucGFyZW50PT09bnVsbCYmSS51cGRhdGVNYXRyaXhXb3JsZCgpLGN0LmVuYWJsZWQ9PT0hMCYmY3QuaXNQcmVzZW50aW5nPT09ITAmJihjdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJmN0LnVwZGF0ZUNhbWVyYShJKSxJPWN0LmdldENhbWVyYSgpKSxNLmlzU2NlbmU9PT0hMCYmTS5vbkJlZm9yZVJlbmRlcih4LE0sSSxiKSxmPXF0LmdldChNLGcubGVuZ3RoKSxmLmluaXQoKSxnLnB1c2goZiksJC5tdWx0aXBseU1hdHJpY2VzKEkucHJvamVjdGlvbk1hdHJpeCxJLm1hdHJpeFdvcmxkSW52ZXJzZSksVi5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgkKSxhdD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLFE9RS5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsYXQsSSksaD1adC5nZXQoTSxkLmxlbmd0aCksaC5pbml0KCksZC5wdXNoKGgpLG5lKE0sSSwwLHguc29ydE9iamVjdHMpLGguZmluaXNoKCkseC5zb3J0T2JqZWN0cz09PSEwJiZoLnNvcnQoUixEKSxRPT09ITAmJkUuYmVnaW5TaGFkb3dzKCk7bGV0IE89Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYody5yZW5kZXIoTyxNLEkpLFE9PT0hMCYmRS5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxxLnJlbmRlcihoLE0pLGYuc2V0dXBMaWdodHMoeC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyksSS5pc0FycmF5Q2FtZXJhKXtsZXQgVT1JLmNhbWVyYXM7Zm9yKGxldCBaPTAsVHQ9VS5sZW5ndGg7WjxUdDtaKyspe2xldCBDdD1VW1pdO2VuKGgsTSxDdCxDdC52aWV3cG9ydCl9fWVsc2UgZW4oaCxNLEkpO2IhPT1udWxsJiYoQy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChiKSxDLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChiKSksTS5pc1NjZW5lPT09ITAmJk0ub25BZnRlclJlbmRlcih4LE0sSSksQi5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLEIuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxCLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksQi5zZXRQb2x5Z29uT2Zmc2V0KCExKSx5dC5yZXNldERlZmF1bHRTdGF0ZSgpLF89LTEsUz1udWxsLGcucG9wKCksZy5sZW5ndGg+MD9mPWdbZy5sZW5ndGgtMV06Zj1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9oPWRbZC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBuZShNLEksTyxVKXtpZihNLnZpc2libGU9PT0hMSlyZXR1cm47aWYoTS5sYXllcnMudGVzdChJLmxheWVycykpe2lmKE0uaXNHcm91cClPPU0ucmVuZGVyT3JkZXI7ZWxzZSBpZihNLmlzTE9EKU0uYXV0b1VwZGF0ZT09PSEwJiZNLnVwZGF0ZShJKTtlbHNlIGlmKE0uaXNMaWdodClmLnB1c2hMaWdodChNKSxNLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhNKTtlbHNlIGlmKE0uaXNTcHJpdGUpe2lmKCFNLmZydXN0dW1DdWxsZWR8fFYuaW50ZXJzZWN0c1Nwcml0ZShNKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7THQudmlzaWJsZSYmaC5wdXNoKE0sQ3QsTHQsTyxsdC56LG51bGwpfX1lbHNlIGlmKChNLmlzTWVzaHx8TS5pc0xpbmV8fE0uaXNQb2ludHMpJiYoTS5pc1NraW5uZWRNZXNoJiZNLnNrZWxldG9uLmZyYW1lIT09c3QucmVuZGVyLmZyYW1lJiYoTS5za2VsZXRvbi51cGRhdGUoKSxNLnNrZWxldG9uLmZyYW1lPXN0LnJlbmRlci5mcmFtZSksIU0uZnJ1c3R1bUN1bGxlZHx8Vi5pbnRlcnNlY3RzT2JqZWN0KE0pKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMdCkpe2xldCBSdD1DdC5ncm91cHM7Zm9yKGxldCBHdD0wLHp0PVJ0Lmxlbmd0aDtHdDx6dDtHdCsrKXtsZXQgVXQ9UnRbR3RdLGllPUx0W1V0Lm1hdGVyaWFsSW5kZXhdO2llJiZpZS52aXNpYmxlJiZoLnB1c2goTSxDdCxpZSxPLGx0LnosVXQpfX1lbHNlIEx0LnZpc2libGUmJmgucHVzaChNLEN0LEx0LE8sbHQueixudWxsKX19bGV0IFR0PU0uY2hpbGRyZW47Zm9yKGxldCBDdD0wLEx0PVR0Lmxlbmd0aDtDdDxMdDtDdCsrKW5lKFR0W0N0XSxJLE8sVSl9ZnVuY3Rpb24gZW4oTSxJLE8sVSl7bGV0IFo9TS5vcGFxdWUsVHQ9TS50cmFuc21pc3NpdmUsQ3Q9TS50cmFuc3BhcmVudDtmLnNldHVwTGlnaHRzVmlldyhPKSxUdC5sZW5ndGg+MCYmeW4oWixJLE8pLFUmJkIudmlld3BvcnQoTC5jb3B5KFUpKSxaLmxlbmd0aD4wJiZEbyhaLEksTyksVHQubGVuZ3RoPjAmJkRvKFR0LEksTyksQ3QubGVuZ3RoPjAmJkRvKEN0LEksTyl9ZnVuY3Rpb24geW4oTSxJLE8pe2lmKEc9PT1udWxsKXtsZXQgQ3Q9bz09PSEwJiZTdC5pc1dlYkdMMj09PSEwP3NvOk5lO0c9bmV3IEN0KDEwMjQsMTAyNCx7Z2VuZXJhdGVNaXBtYXBzOiEwLHR5cGU6X3QuY29udmVydChVcikhPT1udWxsP1VyOmVpLG1pbkZpbHRlcjpMbCxtYWdGaWx0ZXI6ZmUsd3JhcFM6VmUsd3JhcFQ6VmUsdXNlUmVuZGVyVG9UZXh0dXJlOm10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KX1sZXQgVT14LmdldFJlbmRlclRhcmdldCgpO3guc2V0UmVuZGVyVGFyZ2V0KEcpLHguY2xlYXIoKTtsZXQgWj14LnRvbmVNYXBwaW5nO3gudG9uZU1hcHBpbmc9dGksRG8oTSxJLE8pLHgudG9uZU1hcHBpbmc9WixDLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KEcpLEMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEcpLHguc2V0UmVuZGVyVGFyZ2V0KFUpfWZ1bmN0aW9uIERvKE0sSSxPKXtsZXQgVT1JLmlzU2NlbmU9PT0hMD9JLm92ZXJyaWRlTWF0ZXJpYWw6bnVsbDtmb3IobGV0IFo9MCxUdD1NLmxlbmd0aDtaPFR0O1orKyl7bGV0IEN0PU1bWl0sTHQ9Q3Qub2JqZWN0LFJ0PUN0Lmdlb21ldHJ5LEd0PVU9PT1udWxsP0N0Lm1hdGVyaWFsOlUsenQ9Q3QuZ3JvdXA7THQubGF5ZXJzLnRlc3QoTy5sYXllcnMpJiZVMChMdCxJLE8sUnQsR3QsenQpfX1mdW5jdGlvbiBVMChNLEksTyxVLFosVHQpe00ub25CZWZvcmVSZW5kZXIoeCxJLE8sVSxaLFR0KSxNLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKE8ubWF0cml4V29ybGRJbnZlcnNlLE0ubWF0cml4V29ybGQpLE0ubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChNLm1vZGVsVmlld01hdHJpeCksWi5vbkJlZm9yZVJlbmRlcih4LEksTyxVLE0sVHQpLFoudHJhbnNwYXJlbnQ9PT0hMCYmWi5zaWRlPT09SHI/KFouc2lkZT1oZSxaLm5lZWRzVXBkYXRlPSEwLHgucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksWi5zaWRlPWVvLFoubmVlZHNVcGRhdGU9ITAseC5yZW5kZXJCdWZmZXJEaXJlY3QoTyxJLFUsWixNLFR0KSxaLnNpZGU9SHIpOngucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksTS5vbkFmdGVyUmVuZGVyKHgsSSxPLFUsWixUdCl9ZnVuY3Rpb24gT2woTSxJLE8pe0kuaXNTY2VuZSE9PSEwJiYoST1kdCk7bGV0IFU9bnQuZ2V0KE0pLFo9Zi5zdGF0ZS5saWdodHMsVHQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXksQ3Q9Wi5zdGF0ZS52ZXJzaW9uLEx0PWJ0LmdldFBhcmFtZXRlcnMoTSxaLnN0YXRlLFR0LEksTyksUnQ9YnQuZ2V0UHJvZ3JhbUNhY2hlS2V5KEx0KSxHdD1VLnByb2dyYW1zO1UuZW52aXJvbm1lbnQ9TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0kuZW52aXJvbm1lbnQ6bnVsbCxVLmZvZz1JLmZvZyxVLmVudk1hcD0oTS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0o6aikuZ2V0KE0uZW52TWFwfHxVLmVudmlyb25tZW50KSxHdD09PXZvaWQgMCYmKE0uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLEd0PW5ldyBNYXAsVS5wcm9ncmFtcz1HdCk7bGV0IHp0PUd0LmdldChSdCk7aWYoenQhPT12b2lkIDApe2lmKFUuY3VycmVudFByb2dyYW09PT16dCYmVS5saWdodHNTdGF0ZVZlcnNpb249PT1DdClyZXR1cm4gb2YoTSxMdCksenR9ZWxzZSBMdC51bmlmb3Jtcz1idC5nZXRVbmlmb3JtcyhNKSxNLm9uQnVpbGQoTyxMdCx4KSxNLm9uQmVmb3JlQ29tcGlsZShMdCx4KSx6dD1idC5hY3F1aXJlUHJvZ3JhbShMdCxSdCksR3Quc2V0KFJ0LHp0KSxVLnVuaWZvcm1zPUx0LnVuaWZvcm1zO2xldCBVdD1VLnVuaWZvcm1zOyghTS5pc1NoYWRlck1hdGVyaWFsJiYhTS5pc1Jhd1NoYWRlck1hdGVyaWFsfHxNLmNsaXBwaW5nPT09ITApJiYoVXQuY2xpcHBpbmdQbGFuZXM9RS51bmlmb3JtKSxvZihNLEx0KSxVLm5lZWRzTGlnaHRzPWswKE0pLFUubGlnaHRzU3RhdGVWZXJzaW9uPUN0LFUubmVlZHNMaWdodHMmJihVdC5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1aLnN0YXRlLmFtYmllbnQsVXQubGlnaHRQcm9iZS52YWx1ZT1aLnN0YXRlLnByb2JlLFV0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWwsVXQuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdyxVdC5zcG90TGlnaHRzLnZhbHVlPVouc3RhdGUuc3BvdCxVdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPVouc3RhdGUuc3BvdFNoYWRvdyxVdC5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1aLnN0YXRlLnJlY3RBcmVhLFV0Lmx0Y18xLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMxLFV0Lmx0Y18yLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMyLFV0LnBvaW50TGlnaHRzLnZhbHVlPVouc3RhdGUucG9pbnQsVXQucG9pbnRMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvdyxVdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPVouc3RhdGUuaGVtaSxVdC5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLFV0LmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsVXQuc3BvdFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXAsVXQuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsVXQucG9pbnRTaGFkb3dNYXAudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvd01hcCxVdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgaWU9enQuZ2V0VW5pZm9ybXMoKSxmaT1paS5zZXFXaXRoVmFsdWUoaWUuc2VxLFV0KTtyZXR1cm4gVS5jdXJyZW50UHJvZ3JhbT16dCxVLnVuaWZvcm1zTGlzdD1maSx6dH1mdW5jdGlvbiBvZihNLEkpe2xldCBPPW50LmdldChNKTtPLm91dHB1dEVuY29kaW5nPUkub3V0cHV0RW5jb2RpbmcsTy5pbnN0YW5jaW5nPUkuaW5zdGFuY2luZyxPLnNraW5uaW5nPUkuc2tpbm5pbmcsTy5tb3JwaFRhcmdldHM9SS5tb3JwaFRhcmdldHMsTy5tb3JwaE5vcm1hbHM9SS5tb3JwaE5vcm1hbHMsTy5tb3JwaFRhcmdldHNDb3VudD1JLm1vcnBoVGFyZ2V0c0NvdW50LE8ubnVtQ2xpcHBpbmdQbGFuZXM9SS5udW1DbGlwcGluZ1BsYW5lcyxPLm51bUludGVyc2VjdGlvbj1JLm51bUNsaXBJbnRlcnNlY3Rpb24sTy52ZXJ0ZXhBbHBoYXM9SS52ZXJ0ZXhBbHBoYXMsTy52ZXJ0ZXhUYW5nZW50cz1JLnZlcnRleFRhbmdlbnRzLE8udG9uZU1hcHBpbmc9SS50b25lTWFwcGluZ31mdW5jdGlvbiBCMChNLEksTyxVLFope0kuaXNTY2VuZSE9PSEwJiYoST1kdCksQy5yZXNldFRleHR1cmVVbml0cygpO2xldCBUdD1JLmZvZyxDdD1VLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SS5lbnZpcm9ubWVudDpudWxsLEx0PWI9PT1udWxsP3gub3V0cHV0RW5jb2Rpbmc6Yi5pc1hSUmVuZGVyVGFyZ2V0PT09ITA/Yi50ZXh0dXJlLmVuY29kaW5nOnJpLFJ0PShVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SjpqKS5nZXQoVS5lbnZNYXB8fEN0KSxHdD1VLnZlcnRleENvbG9ycz09PSEwJiYhIU8uYXR0cmlidXRlcy5jb2xvciYmTy5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx6dD0hIVUubm9ybWFsTWFwJiYhIU8uYXR0cmlidXRlcy50YW5nZW50LFV0PSEhTy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24saWU9ISFPLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsZmk9Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsWmk9VS50b25lTWFwcGVkP3gudG9uZU1hcHBpbmc6dGksT3Q9bnQuZ2V0KFUpLG5uPWYuc3RhdGUubGlnaHRzO2lmKFE9PT0hMCYmKGF0PT09ITB8fE0hPT1TKSl7bGV0IFplPU09PT1TJiZVLmlkPT09XztFLnNldFN0YXRlKFUsTSxaZSl9bGV0IGxlPSExO1UudmVyc2lvbj09PU90Ll9fdmVyc2lvbj8oT3QubmVlZHNMaWdodHMmJk90LmxpZ2h0c1N0YXRlVmVyc2lvbiE9PW5uLnN0YXRlLnZlcnNpb258fE90Lm91dHB1dEVuY29kaW5nIT09THR8fFouaXNJbnN0YW5jZWRNZXNoJiZPdC5pbnN0YW5jaW5nPT09ITF8fCFaLmlzSW5zdGFuY2VkTWVzaCYmT3QuaW5zdGFuY2luZz09PSEwfHxaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITF8fCFaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITB8fE90LmVudk1hcCE9PVJ0fHxVLmZvZyYmT3QuZm9nIT09VHR8fE90Lm51bUNsaXBwaW5nUGxhbmVzIT09dm9pZCAwJiYoT3QubnVtQ2xpcHBpbmdQbGFuZXMhPT1FLm51bVBsYW5lc3x8T3QubnVtSW50ZXJzZWN0aW9uIT09RS5udW1JbnRlcnNlY3Rpb24pfHxPdC52ZXJ0ZXhBbHBoYXMhPT1HdHx8T3QudmVydGV4VGFuZ2VudHMhPT16dHx8T3QubW9ycGhUYXJnZXRzIT09VXR8fE90Lm1vcnBoTm9ybWFscyE9PWllfHxPdC50b25lTWFwcGluZyE9PVppfHxTdC5pc1dlYkdMMj09PSEwJiZPdC5tb3JwaFRhcmdldHNDb3VudCE9PWZpKSYmKGxlPSEwKToobGU9ITAsT3QuX192ZXJzaW9uPVUudmVyc2lvbik7bGV0IHJuPU90LmN1cnJlbnRQcm9ncmFtO2xlPT09ITAmJihybj1PbChVLEksWikpO2xldCBJbz0hMSxzbj0hMSx2bj0hMSxfZT1ybi5nZXRVbmlmb3JtcygpLG5zPU90LnVuaWZvcm1zO2lmKEIudXNlUHJvZ3JhbShybi5wcm9ncmFtKSYmKElvPSEwLHNuPSEwLHZuPSEwKSxVLmlkIT09XyYmKF89VS5pZCxzbj0hMCksSW98fFMhPT1NKXtpZihfZS5zZXRWYWx1ZShrLCJwcm9qZWN0aW9uTWF0cml4IixNLnByb2plY3Rpb25NYXRyaXgpLFN0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJl9lLnNldFZhbHVlKGssImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKE0uZmFyKzEpL01hdGguTE4yKSksUyE9PU0mJihTPU0sc249ITAsdm49ITApLFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc01lc2hQaG9uZ01hdGVyaWFsfHxVLmlzTWVzaFRvb25NYXRlcmlhbHx8VS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxVLmVudk1hcCl7bGV0IFplPV9lLm1hcC5jYW1lcmFQb3NpdGlvbjtaZSE9PXZvaWQgMCYmWmUuc2V0VmFsdWUoayxsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oTS5tYXRyaXhXb3JsZCkpfShVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbCkmJl9lLnNldFZhbHVlKGssImlzT3J0aG9ncmFwaGljIixNLmlzT3J0aG9ncmFwaGljQ2FtZXJhPT09ITApLChVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc1NoYWRvd01hdGVyaWFsfHxaLmlzU2tpbm5lZE1lc2gpJiZfZS5zZXRWYWx1ZShrLCJ2aWV3TWF0cml4IixNLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoWi5pc1NraW5uZWRNZXNoKXtfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXgiKSxfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IFplPVouc2tlbGV0b247WmUmJihTdC5mbG9hdFZlcnRleFRleHR1cmVzPyhaZS5ib25lVGV4dHVyZT09PW51bGwmJlplLmNvbXB1dGVCb25lVGV4dHVyZSgpLF9lLnNldFZhbHVlKGssImJvbmVUZXh0dXJlIixaZS5ib25lVGV4dHVyZSxDKSxfZS5zZXRWYWx1ZShrLCJib25lVGV4dHVyZVNpemUiLFplLmJvbmVUZXh0dXJlU2l6ZSkpOl9lLnNldE9wdGlvbmFsKGssWmUsImJvbmVNYXRyaWNlcyIpKX1yZXR1cm4hIU8mJihPLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8Ty5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwKSYmcnQudXBkYXRlKFosTyxVLHJuKSwoc258fE90LnJlY2VpdmVTaGFkb3chPT1aLnJlY2VpdmVTaGFkb3cpJiYoT3QucmVjZWl2ZVNoYWRvdz1aLnJlY2VpdmVTaGFkb3csX2Uuc2V0VmFsdWUoaywicmVjZWl2ZVNoYWRvdyIsWi5yZWNlaXZlU2hhZG93KSksc24mJihfZS5zZXRWYWx1ZShrLCJ0b25lTWFwcGluZ0V4cG9zdXJlIix4LnRvbmVNYXBwaW5nRXhwb3N1cmUpLE90Lm5lZWRzTGlnaHRzJiZPMChucyx2biksVHQmJlUuZm9nJiZJdC5yZWZyZXNoRm9nVW5pZm9ybXMobnMsVHQpLEl0LnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKG5zLFUseSxYLEcpLGlpLnVwbG9hZChrLE90LnVuaWZvcm1zTGlzdCxucyxDKSksVS5pc1NoYWRlck1hdGVyaWFsJiZVLnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoaWkudXBsb2FkKGssT3QudW5pZm9ybXNMaXN0LG5zLEMpLFUudW5pZm9ybXNOZWVkVXBkYXRlPSExKSxVLmlzU3ByaXRlTWF0ZXJpYWwmJl9lLnNldFZhbHVlKGssImNlbnRlciIsWi5jZW50ZXIpLF9lLnNldFZhbHVlKGssIm1vZGVsVmlld01hdHJpeCIsWi5tb2RlbFZpZXdNYXRyaXgpLF9lLnNldFZhbHVlKGssIm5vcm1hbE1hdHJpeCIsWi5ub3JtYWxNYXRyaXgpLF9lLnNldFZhbHVlKGssIm1vZGVsTWF0cml4IixaLm1hdHJpeFdvcmxkKSxybn1mdW5jdGlvbiBPMChNLEkpe00uYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9SSxNLmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9SSxNLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPUksTS5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1JLE0ucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9SSxNLnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1JLE0uaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1JfWZ1bmN0aW9uIGswKE0pe3JldHVybiBNLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8TS5pc01lc2hUb29uTWF0ZXJpYWx8fE0uaXNNZXNoUGhvbmdNYXRlcmlhbHx8TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxNLmlzU2hhZG93TWF0ZXJpYWx8fE0uaXNTaGFkZXJNYXRlcmlhbCYmTS5saWdodHM9PT0hMH10aGlzLmdldEFjdGl2ZUN1YmVGYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG19LHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gcH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcz1mdW5jdGlvbihNLEksTyl7bnQuZ2V0KE0udGV4dHVyZSkuX193ZWJnbFRleHR1cmU9SSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPU87bGV0IFU9bnQuZ2V0KE0pO1UuX19oYXNFeHRlcm5hbFRleHR1cmVzPSEwLFUuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYoVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPU89PT12b2lkIDAsVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyfHxNLnVzZVJlbmRlclRvVGV4dHVyZSYmKGNvbnNvbGUud2FybigicmVuZGVyLXRvLXRleHR1cmUgZXh0ZW5zaW9uIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGFuIGV4dGVybmFsIHRleHR1cmUgd2FzIHByb3ZpZGVkIiksTS51c2VSZW5kZXJUb1RleHR1cmU9ITEsTS51c2VSZW5kZXJidWZmZXI9ITApKX0sdGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbihNLEkpe2xldCBPPW50LmdldChNKTtPLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1JLE8uX191c2VEZWZhdWx0RnJhbWVidWZmZXI9ST09PXZvaWQgMH0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oTSxJPTAsTz0wKXtiPU0sbT1JLHA9TztsZXQgVT0hMDtpZihNKXtsZXQgUnQ9bnQuZ2V0KE0pO1J0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyIT09dm9pZCAwPyhCLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxVPSExKTpSdC5fX3dlYmdsRnJhbWVidWZmZXI9PT12b2lkIDA/Qy5zZXR1cFJlbmRlclRhcmdldChNKTpSdC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJkMucmViaW5kVGV4dHVyZXMoTSxudC5nZXQoTS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlKX1sZXQgWj1udWxsLFR0PSExLEN0PSExO2lmKE0pe2xldCBSdD1NLnRleHR1cmU7KFJ0LmlzRGF0YVRleHR1cmUzRHx8UnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoQ3Q9ITApO2xldCBHdD1udC5nZXQoTSkuX193ZWJnbEZyYW1lYnVmZmVyO00uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KFo9R3RbSV0sVHQ9ITApOk0udXNlUmVuZGVyYnVmZmVyP1o9bnQuZ2V0KE0pLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpaPUd0LEwuY29weShNLnZpZXdwb3J0KSxBLmNvcHkoTS5zY2lzc29yKSxIPU0uc2Npc3NvclRlc3R9ZWxzZSBMLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxIPU47aWYoQi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsWikmJlN0LmRyYXdCdWZmZXJzJiZVJiZCLmRyYXdCdWZmZXJzKE0sWiksQi52aWV3cG9ydChMKSxCLnNjaXNzb3IoQSksQi5zZXRTY2lzc29yVGVzdChIKSxUdCl7bGV0IFJ0PW50LmdldChNLnRleHR1cmUpO2suZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrSSxSdC5fX3dlYmdsVGV4dHVyZSxPKX1lbHNlIGlmKEN0KXtsZXQgUnQ9bnQuZ2V0KE0udGV4dHVyZSksR3Q9SXx8MDtrLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LFJ0Ll9fd2ViZ2xUZXh0dXJlLE98fDAsR3QpfV89LTF9LHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihNLEksTyxVLFosVHQsQ3Qpe2lmKCEoTSYmTS5pc1dlYkdMUmVuZGVyVGFyZ2V0KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO3JldHVybn1sZXQgTHQ9bnQuZ2V0KE0pLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihNLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZDdCE9PXZvaWQgMCYmKEx0PUx0W0N0XSksTHQpe0IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEx0KTt0cnl7bGV0IFJ0PU0udGV4dHVyZSxHdD1SdC5mb3JtYXQsenQ9UnQudHlwZTtpZihHdCE9PVJlJiZfdC5jb252ZXJ0KEd0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBVdD16dD09PVVyJiYobXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8U3QuaXNXZWJHTDImJm10LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZih6dCE9PWVpJiZfdC5jb252ZXJ0KHp0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM4KSYmISh6dD09PVVpJiYoU3QuaXNXZWJHTDJ8fG10LmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKXx8bXQuaGFzKCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSkpJiYhVXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKTtyZXR1cm59ay5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT09PTM2MDUzP0k+PTAmJkk8PU0ud2lkdGgtVSYmTz49MCYmTzw9TS5oZWlnaHQtWiYmay5yZWFkUGl4ZWxzKEksTyxVLFosX3QuY29udmVydChHdCksX3QuY29udmVydCh6dCksVHQpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2xldCBSdD1iIT09bnVsbD9udC5nZXQoYikuX193ZWJnbEZyYW1lYnVmZmVyOm51bGw7Qi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsUnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPPTApe2lmKEkuaXNGcmFtZWJ1ZmZlclRleHR1cmUhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlKCkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIEZyYW1lYnVmZmVyVGV4dHVyZS4iKTtyZXR1cm59bGV0IFU9TWF0aC5wb3coMiwtTyksWj1NYXRoLmZsb29yKEkuaW1hZ2Uud2lkdGgqVSksVHQ9TWF0aC5mbG9vcihJLmltYWdlLmhlaWdodCpVKTtDLnNldFRleHR1cmUyRChJLDApLGsuY29weVRleFN1YkltYWdlMkQoMzU1MyxPLDAsMCxNLngsTS55LFosVHQpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPLFU9MCl7bGV0IFo9SS5pbWFnZS53aWR0aCxUdD1JLmltYWdlLmhlaWdodCxDdD1fdC5jb252ZXJ0KE8uZm9ybWF0KSxMdD1fdC5jb252ZXJ0KE8udHlwZSk7Qy5zZXRUZXh0dXJlMkQoTywwKSxrLnBpeGVsU3RvcmVpKDM3NDQwLE8uZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsTy5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsTy51bnBhY2tBbGlnbm1lbnQpLEkuaXNEYXRhVGV4dHVyZT9rLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksWixUdCxDdCxMdCxJLmltYWdlLmRhdGEpOkkuaXNDb21wcmVzc2VkVGV4dHVyZT9rLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsVSxNLngsTS55LEkubWlwbWFwc1swXS53aWR0aCxJLm1pcG1hcHNbMF0uaGVpZ2h0LEN0LEkubWlwbWFwc1swXS5kYXRhKTprLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksQ3QsTHQsSS5pbWFnZSksVT09PTAmJk8uZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKDM1NTMpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oTSxJLE8sVSxaPTApe2lmKHguaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBUdD1NLm1heC54LU0ubWluLngrMSxDdD1NLm1heC55LU0ubWluLnkrMSxMdD1NLm1heC56LU0ubWluLnorMSxSdD1fdC5jb252ZXJ0KFUuZm9ybWF0KSxHdD1fdC5jb252ZXJ0KFUudHlwZSksenQ7aWYoVS5pc0RhdGFUZXh0dXJlM0QpQy5zZXRUZXh0dXJlM0QoVSwwKSx6dD0zMjg3OTtlbHNlIGlmKFUuaXNEYXRhVGV4dHVyZTJEQXJyYXkpQy5zZXRUZXh0dXJlMkRBcnJheShVLDApLHp0PTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1rLnBpeGVsU3RvcmVpKDM3NDQwLFUuZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsVS5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsVS51bnBhY2tBbGlnbm1lbnQpO2xldCBVdD1rLmdldFBhcmFtZXRlcigzMzE0KSxpZT1rLmdldFBhcmFtZXRlcigzMjg3OCksZmk9ay5nZXRQYXJhbWV0ZXIoMzMxNiksWmk9ay5nZXRQYXJhbWV0ZXIoMzMxNSksT3Q9ay5nZXRQYXJhbWV0ZXIoMzI4NzcpLG5uPU8uaXNDb21wcmVzc2VkVGV4dHVyZT9PLm1pcG1hcHNbMF06Ty5pbWFnZTtrLnBpeGVsU3RvcmVpKDMzMTQsbm4ud2lkdGgpLGsucGl4ZWxTdG9yZWkoMzI4Nzgsbm4uaGVpZ2h0KSxrLnBpeGVsU3RvcmVpKDMzMTYsTS5taW4ueCksay5waXhlbFN0b3JlaSgzMzE1LE0ubWluLnkpLGsucGl4ZWxTdG9yZWkoMzI4NzcsTS5taW4ueiksTy5pc0RhdGFUZXh0dXJlfHxPLmlzRGF0YVRleHR1cmUzRD9rLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubi5kYXRhKTpPLmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksay5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCh6dCxaLEkueCxJLnksSS56LFR0LEN0LEx0LFJ0LG5uLmRhdGEpKTprLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubiksay5waXhlbFN0b3JlaSgzMzE0LFV0KSxrLnBpeGVsU3RvcmVpKDMyODc4LGllKSxrLnBpeGVsU3RvcmVpKDMzMTYsZmkpLGsucGl4ZWxTdG9yZWkoMzMxNSxaaSksay5waXhlbFN0b3JlaSgzMjg3NyxPdCksWj09PTAmJlUuZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKHp0KSxCLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihNKXtDLnNldFRleHR1cmUyRChNLDApLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXttPTAscD0wLGI9bnVsbCxCLnJlc2V0KCkseXQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfVZ0LnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIEp1PWNsYXNzIGV4dGVuZHMgVnR7fTtKdS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgaG89Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IGhvKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtoby5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBmbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGZ0KHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IGZvKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtmby5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIFlyPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07WXIucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIEdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9dG4oKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLHM9dGhpcy5zdHJpZGU7cjxzO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07R2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIHNlPW5ldyBULFdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9cj09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspc2UueD10aGlzLmdldFgoZSksc2UueT10aGlzLmdldFkoZSksc2Uuej10aGlzLmdldFooZSksc2UuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKXNlLng9dGhpcy5nZXRYKGUpLHNlLnk9dGhpcy5nZXRZKGUpLHNlLno9dGhpcy5nZXRaKGUpLHNlLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylzZS54PXRoaXMuZ2V0WChlKSxzZS55PXRoaXMuZ2V0WShlKSxzZS56PXRoaXMuZ2V0WihlKSxzZS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxzZS54LHNlLnksc2Uueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLHMpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1zLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJuIG5ldyBRdChuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IFdpKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6ZSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07V2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGZsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07ZmwucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIFJyLFdzPW5ldyBULExyPW5ldyBULFByPW5ldyBULERyPW5ldyBLLHFzPW5ldyBLLEEwPW5ldyB3dCxPYT1uZXcgVCxYcz1uZXcgVCxrYT1uZXcgVCxVZz1uZXcgSyxSdT1uZXcgSyxCZz1uZXcgSywkdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLFJyPT09dm9pZCAwKXtScj1uZXcgSHQ7bGV0IGU9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksaT1uZXcgR2koZSw1KTtSci5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxSci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgV2koaSwzLDAsITEpKSxSci5zZXRBdHRyaWJ1dGUoInV2IixuZXcgV2koaSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PVJyLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBmbCx0aGlzLmNlbnRlcj1uZXcgSyguNSwuNSl9cmF5Y2FzdCh0LGUpe3QuY2FtZXJhPT09bnVsbCYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLExyLnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxBMC5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxQci5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJnRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uPT09ITEmJkxyLm11bHRpcGx5U2NhbGFyKC1Qci56KTtsZXQgaT10aGlzLm1hdGVyaWFsLnJvdGF0aW9uLHIscztpIT09MCYmKHM9TWF0aC5jb3MoaSkscj1NYXRoLnNpbihpKSk7bGV0IG89dGhpcy5jZW50ZXI7SGEoT2Euc2V0KC0uNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKFhzLnNldCguNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKGthLnNldCguNSwuNSwwKSxQcixvLExyLHIscyksVWcuc2V0KDAsMCksUnUuc2V0KDEsMCksQmcuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoT2EsWHMsa2EsITEsV3MpO2lmKGE9PT1udWxsJiYoSGEoWHMuc2V0KC0uNSwuNSwwKSxQcixvLExyLHIscyksUnUuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShPYSxrYSxYcywhMSxXcyksYT09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhXcyk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpXcy5jbG9uZSgpLHV2OnJlLmdldFVWKFdzLE9hLFhzLGthLFVnLFJ1LEJnLG5ldyBLKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQuY2VudGVyIT09dm9pZCAwJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319OyR1LnByb3RvdHlwZS5pc1Nwcml0ZT0hMDtmdW5jdGlvbiBIYShuLHQsZSxpLHIscyl7RHIuc3ViVmVjdG9ycyhuLGUpLmFkZFNjYWxhciguNSkubXVsdGlwbHkoaSksciE9PXZvaWQgMD8ocXMueD1zKkRyLngtcipEci55LHFzLnk9cipEci54K3MqRHIueSk6cXMuY29weShEciksbi5jb3B5KHQpLG4ueCs9cXMueCxuLnkrPXFzLnksbi5hcHBseU1hdHJpeDQoQTApfXZhciBPZz1uZXcgVCxrZz1uZXcgV3QsSGc9bmV3IFd0LE5FPW5ldyBULFZnPW5ldyB3dCxkbD1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNraW5uZWRNZXNoIix0aGlzLmJpbmRNb2RlPSJhdHRhY2hlZCIsdGhpcy5iaW5kTWF0cml4PW5ldyB3dCx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyB3dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQsZSl7dGhpcy5za2VsZXRvbj10LGU9PT12b2lkIDAmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksZT10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShlKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoZSkuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7bGV0IHQ9bmV3IFd0LGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBpPTAscj1lLmNvdW50O2k8cjtpKyspe3QueD1lLmdldFgoaSksdC55PWUuZ2V0WShpKSx0Lno9ZS5nZXRaKGkpLHQudz1lLmdldFcoaSk7bGV0IHM9MS90Lm1hbmhhdHRhbkxlbmd0aCgpO3MhPT0xLzA/dC5tdWx0aXBseVNjYWxhcihzKTp0LnNldCgxLDAsMCwwKSxlLnNldFhZWlcoaSx0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmJpbmRNb2RlPT09ImF0dGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6dGhpcy5iaW5kTW9kZT09PSJkZXRhY2hlZCI/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxlKXtsZXQgaT10aGlzLnNrZWxldG9uLHI9dGhpcy5nZW9tZXRyeTtrZy5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luSW5kZXgsdCksSGcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxPZy5jb3B5KGUpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLGUuc2V0KDAsMCwwKTtmb3IobGV0IHM9MDtzPDQ7cysrKXtsZXQgbz1IZy5nZXRDb21wb25lbnQocyk7aWYobyE9PTApe2xldCBhPWtnLmdldENvbXBvbmVudChzKTtWZy5tdWx0aXBseU1hdHJpY2VzKGkuYm9uZXNbYV0ubWF0cml4V29ybGQsaS5ib25lSW52ZXJzZXNbYV0pLGUuYWRkU2NhbGVkVmVjdG9yKE5FLmNvcHkoT2cpLmFwcGx5TWF0cml4NChWZyksbyl9fXJldHVybiBlLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19O2RsLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwO3ZhciBLdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX07S3UucHJvdG90eXBlLmlzQm9uZT0hMDt2YXIgUXU9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyLHMsbyxhLGwsYz1mZSx1PWZlLGgsZil7c3VwZXIobnVsbCxvLGEsbCxjLHUscixzLGgsZiksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9dSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtRdS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgcG89Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSxyPTEpe3R5cGVvZiBpPT0ibnVtYmVyIiYmKHI9aSxpPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LGUsaSksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXJ9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cG8ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBHZz1uZXcgd3QsV2c9bmV3IHd0LFZhPVtdLFlzPW5ldyBvZSxqdT1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IHBvKG5ldyBGbG9hdDMyQXJyYXkoaSoxNiksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9aSx0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksdC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfWdldE1hdHJpeEF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX1yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5tYXRyaXhXb3JsZCxyPXRoaXMuY291bnQ7aWYoWXMuZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSxZcy5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLFlzLm1hdGVyaWFsIT09dm9pZCAwKWZvcihsZXQgcz0wO3M8cjtzKyspe3RoaXMuZ2V0TWF0cml4QXQocyxHZyksV2cubXVsdGlwbHlNYXRyaWNlcyhpLEdnKSxZcy5tYXRyaXhXb3JsZD1XZyxZcy5yYXljYXN0KHQsVmEpO2ZvcihsZXQgbz0wLGE9VmEubGVuZ3RoO288YTtvKyspe2xldCBsPVZhW29dO2wuaW5zdGFuY2VJZD1zLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfVZhLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcG8obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2p1LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIHpuPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O3puLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBxZz1uZXcgVCxYZz1uZXcgVCxZZz1uZXcgd3QsTHU9bmV3IG9pLEdhPW5ldyBzaSxtbz1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHpuKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVswXTtmb3IobGV0IHI9MSxzPWUuY291bnQ7cjxzO3IrKylxZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsci0xKSxYZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9cWcuZGlzdGFuY2VUbyhYZyk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGVlKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsbz1pLmRyYXdSYW5nZTtpZihpLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxHYS5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLEdhLmFwcGx5TWF0cml4NChyKSxHYS5yYWRpdXMrPXMsdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShHYSk9PT0hMSlyZXR1cm47WWcuY29weShyKS5pbnZlcnQoKSxMdS5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWWcpO2xldCBhPXMvKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmEsYz1uZXcgVCx1PW5ldyBULGg9bmV3IFQsZj1uZXcgVCxkPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGc9aS5pbmRleCx2PWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihnIT09bnVsbCl7bGV0IG09TWF0aC5tYXgoMCxvLnN0YXJ0KSxwPU1hdGgubWluKGcuY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGI9bSxfPXAtMTtiPF87Yis9ZCl7bGV0IFM9Zy5nZXRYKGIpLEw9Zy5nZXRYKGIrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKHYsUyksdS5mcm9tQnVmZmVyQXR0cmlidXRlKHYsTCksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBIPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0g8dC5uZWFyfHxIPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkgscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCBtPU1hdGgubWF4KDAsby5zdGFydCkscD1NYXRoLm1pbih2LmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBiPW0sXz1wLTE7YjxfO2IrPWQpe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIrMSksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBMPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0w8dC5uZWFyfHxMPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkwscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX19ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX07bW8ucHJvdG90eXBlLmlzTGluZT0hMDt2YXIgWmc9bmV3IFQsSmc9bmV3IFQsZ289Y2xhc3MgZXh0ZW5kcyBtb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVtdO2ZvcihsZXQgcj0wLHM9ZS5jb3VudDtyPHM7cis9MilaZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksSmcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT1yPT09MD8wOmlbci0xXSxpW3IrMV09aVtyXStaZy5kaXN0YW5jZVRvKEpnKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgZWUoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fTtnby5wcm90b3R5cGUuaXNMaW5lU2VnbWVudHM9ITA7dmFyIHRoPWNsYXNzIGV4dGVuZHMgbW97Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZUxvb3AifX07dGgucHJvdG90eXBlLmlzTGluZUxvb3A9ITA7dmFyIHBsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O3BsLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO3ZhciAkZz1uZXcgd3QsZWg9bmV3IG9pLFdhPW5ldyBzaSxxYT1uZXcgVCxuaD1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHBsKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxvPWkuZHJhd1JhbmdlO2lmKGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFdhLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksV2EuYXBwbHlNYXRyaXg0KHIpLFdhLnJhZGl1cys9cyx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKFdhKT09PSExKXJldHVybjskZy5jb3B5KHIpLmludmVydCgpLGVoLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NCgkZyk7bGV0IGE9cy8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPWEqYTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPWkuaW5kZXgsaD1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihjLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspe2xldCB2PWMuZ2V0WChnKTtxYS5mcm9tQnVmZmVyQXR0cmlidXRlKGgsdiksS2cocWEsdixsLHIsdCxlLHRoaXMpfX1lbHNle2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihoLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspcWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShoLGcpLEtnKHFhLGcsbCxyLHQsZSx0aGlzKX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtuaC5wcm90b3R5cGUuaXNQb2ludHM9ITA7ZnVuY3Rpb24gS2cobix0LGUsaSxyLHMsbyl7bGV0IGE9ZWguZGlzdGFuY2VTcVRvUG9pbnQobik7aWYoYTxlKXtsZXQgbD1uZXcgVDtlaC5jbG9zZXN0UG9pbnRUb1BvaW50KG4sbCksbC5hcHBseU1hdHJpeDQoaSk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxyLm5lYXJ8fGM+ci5mYXIpcmV0dXJuO3MucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChhKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDpvfSl9fXZhciBpaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjKXtzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyksdGhpcy5taW5GaWx0ZXI9byE9PXZvaWQgMD9vOmJlLHRoaXMubWFnRmlsdGVyPXMhPT12b2lkIDA/czpiZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzO2Z1bmN0aW9uIGgoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX0icmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soaCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtsZXQgdD10aGlzLmltYWdlOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQ9PT0hMSYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fTtpaC5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITA7dmFyIHJoPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHt3aWR0aDp0LGhlaWdodDplfSksdGhpcy5mb3JtYXQ9aSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07cmgucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlPSEwO3ZhciBzaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjLHUsaCxmKXtzdXBlcihudWxsLG8sYSxsLGMsdSxyLHMsaCxmKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07c2gucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7dmFyIG9oPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMpe3N1cGVyKHQsZSxpLHIscyxvLGEsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07b2gucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgWnI9Y2xhc3MgZXh0ZW5kcyBIdHtjb25zdHJ1Y3Rvcih0PTEsZT04LGk9MCxyPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDppLHRoZXRhTGVuZ3RoOnJ9LGU9TWF0aC5tYXgoMyxlKTtsZXQgcz1bXSxvPVtdLGE9W10sbD1bXSxjPW5ldyBULHU9bmV3IEs7by5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PWU7aCsrLGYrPTMpe2xldCBkPWkraC9lKnI7Yy54PXQqTWF0aC5jb3MoZCksYy55PXQqTWF0aC5zaW4oZCksby5wdXNoKGMueCxjLnksYy56KSxhLnB1c2goMCwwLDEpLHUueD0ob1tmXS90KzEpLzIsdS55PShvW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1lO2grKylzLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWnIodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fTt2YXIgU2s9bmV3IFQsRWs9bmV3IFQsVGs9bmV3IFQsQWs9bmV3IHJlO3ZhciBGZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChpLGUpfWdldFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiBlfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50QXQoaS90KSk7cmV0dXJuIGV9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgZT1bXSxpLHI9dGhpcy5nZXRQb2ludCgwKSxzPTA7ZS5wdXNoKDApO2ZvcihsZXQgbz0xO288PXQ7bysrKWk9dGhpcy5nZXRQb2ludChvL3QpLHMrPWkuZGlzdGFuY2VUbyhyKSxlLnB1c2gocykscj1pO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1lLGV9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxlKXtsZXQgaT10aGlzLmdldExlbmd0aHMoKSxyPTAscz1pLmxlbmd0aCxvO2U/bz1lOm89dCppW3MtMV07bGV0IGE9MCxsPXMtMSxjO2Zvcig7YTw9bDspaWYocj1NYXRoLmZsb29yKGErKGwtYSkvMiksYz1pW3JdLW8sYzwwKWE9cisxO2Vsc2UgaWYoYz4wKWw9ci0xO2Vsc2V7bD1yO2JyZWFrfWlmKHI9bCxpW3JdPT09bylyZXR1cm4gci8ocy0xKTtsZXQgdT1pW3JdLGY9aVtyKzFdLXUsZD0oby11KS9mO3JldHVybihyK2QpLyhzLTEpfWdldFRhbmdlbnQodCxlKXtsZXQgcj10LTFlLTQscz10KzFlLTQ7cjwwJiYocj0wKSxzPjEmJihzPTEpO2xldCBvPXRoaXMuZ2V0UG9pbnQociksYT10aGlzLmdldFBvaW50KHMpLGw9ZXx8KG8uaXNWZWN0b3IyP25ldyBLOm5ldyBUKTtyZXR1cm4gbC5jb3B5KGEpLnN1YihvKS5ub3JtYWxpemUoKSxsfWdldFRhbmdlbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChpLGUpfWNvbXB1dGVGcmVuZXRGcmFtZXModCxlKXtsZXQgaT1uZXcgVCxyPVtdLHM9W10sbz1bXSxhPW5ldyBULGw9bmV3IHd0O2ZvcihsZXQgZD0wO2Q8PXQ7ZCsrKXtsZXQgZz1kL3Q7cltkXT10aGlzLmdldFRhbmdlbnRBdChnLG5ldyBUKX1zWzBdPW5ldyBULG9bMF09bmV3IFQ7bGV0IGM9TnVtYmVyLk1BWF9WQUxVRSx1PU1hdGguYWJzKHJbMF0ueCksaD1NYXRoLmFicyhyWzBdLnkpLGY9TWF0aC5hYnMoclswXS56KTt1PD1jJiYoYz11LGkuc2V0KDEsMCwwKSksaDw9YyYmKGM9aCxpLnNldCgwLDEsMCkpLGY8PWMmJmkuc2V0KDAsMCwxKSxhLmNyb3NzVmVjdG9ycyhyWzBdLGkpLm5vcm1hbGl6ZSgpLHNbMF0uY3Jvc3NWZWN0b3JzKHJbMF0sYSksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxzWzBdKTtmb3IobGV0IGQ9MTtkPD10O2QrKyl7aWYoc1tkXT1zW2QtMV0uY2xvbmUoKSxvW2RdPW9bZC0xXS5jbG9uZSgpLGEuY3Jvc3NWZWN0b3JzKHJbZC0xXSxyW2RdKSxhLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXthLm5vcm1hbGl6ZSgpO2xldCBnPU1hdGguYWNvcyhJZShyW2QtMV0uZG90KHJbZF0pLC0xLDEpKTtzW2RdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoYSxnKSl9b1tkXS5jcm9zc1ZlY3RvcnMocltkXSxzW2RdKX1pZihlPT09ITApe2xldCBkPU1hdGguYWNvcyhJZShzWzBdLmRvdChzW3RdKSwtMSwxKSk7ZC89dCxyWzBdLmRvdChhLmNyb3NzVmVjdG9ycyhzWzBdLHNbdF0pKT4wJiYoZD0tZCk7Zm9yKGxldCBnPTE7Zzw9dDtnKyspc1tnXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHJbZ10sZCpnKSksb1tnXS5jcm9zc1ZlY3RvcnMocltnXSxzW2ddKX1yZXR1cm57dGFuZ2VudHM6cixub3JtYWxzOnMsYmlub3JtYWxzOm99fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O3JldHVybiB0LmFyY0xlbmd0aERpdmlzaW9ucz10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyx0LnR5cGU9dGhpcy50eXBlLHR9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSxKcj1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0xLHI9MSxzPTAsbz1NYXRoLlBJKjIsYT0hMSxsPTApe3N1cGVyKCksdGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiLHRoaXMuYVg9dCx0aGlzLmFZPWUsdGhpcy54UmFkaXVzPWksdGhpcy55UmFkaXVzPXIsdGhpcy5hU3RhcnRBbmdsZT1zLHRoaXMuYUVuZEFuZ2xlPW8sdGhpcy5hQ2xvY2t3aXNlPWEsdGhpcy5hUm90YXRpb249bH1nZXRQb2ludCh0LGUpe2xldCBpPWV8fG5ldyBLLHI9TWF0aC5QSSoyLHM9dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxvPU1hdGguYWJzKHMpPE51bWJlci5FUFNJTE9OO2Zvcig7czwwOylzKz1yO2Zvcig7cz5yOylzLT1yO3M8TnVtYmVyLkVQU0lMT04mJihvP3M9MDpzPXIpLHRoaXMuYUNsb2Nrd2lzZT09PSEwJiYhbyYmKHM9PT1yP3M9LXI6cz1zLXIpO2xldCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpzLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZih0aGlzLmFSb3RhdGlvbiE9PTApe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxoPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxmPWwtdGhpcy5hWCxkPWMtdGhpcy5hWTtsPWYqdS1kKmgrdGhpcy5hWCxjPWYqaCtkKnUrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtKci5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIG1sPWNsYXNzIGV4dGVuZHMgSnJ7Y29uc3RydWN0b3IodCxlLGkscixzLG8pe3N1cGVyKHQsZSxpLGkscixzLG8pLHRoaXMudHlwZT0iQXJjQ3VydmUifX07bWwucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7ZnVuY3Rpb24gdGYoKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIocyxvLGEsbCl7bj1zLHQ9YSxlPS0zKnMrMypvLTIqYS1sLGk9MipzLTIqbythK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyl7cihvLGEsYyooYS1zKSxjKihsLW8pKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyx1LGgpe2xldCBmPShvLXMpL2MtKGEtcykvKGMrdSkrKGEtbykvdSxkPShhLW8pL3UtKGwtbykvKHUraCkrKGwtYSkvaDtmKj11LGQqPXUscihvLGEsZixkKX0sY2FsYzpmdW5jdGlvbihzKXtsZXQgbz1zKnMsYT1vKnM7cmV0dXJuIG4rdCpzK2UqbytpKmF9fX12YXIgWGE9bmV3IFQsUHU9bmV3IHRmLER1PW5ldyB0ZixJdT1uZXcgdGYsZ2w9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PVtdLGU9ITEsaT0iY2VudHJpcGV0YWwiLHI9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPWUsdGhpcy5jdXJ2ZVR5cGU9aSx0aGlzLnRlbnNpb249cn1nZXRQb2ludCh0LGU9bmV3IFQpe2xldCBpPWUscj10aGlzLnBvaW50cyxzPXIubGVuZ3RoLG89KHMtKHRoaXMuY2xvc2VkPzA6MSkpKnQsYT1NYXRoLmZsb29yKG8pLGw9by1hO3RoaXMuY2xvc2VkP2ErPWE+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGEpL3MpKzEpKnM6bD09PTAmJmE9PT1zLTEmJihhPXMtMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fGE+MD9jPXJbKGEtMSklc106KFhhLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1YYSk7bGV0IGg9clthJXNdLGY9clsoYSsxKSVzXTtpZih0aGlzLmNsb3NlZHx8YSsyPHM/dT1yWyhhKzIpJXNdOihYYS5zdWJWZWN0b3JzKHJbcy0xXSxyW3MtMl0pLmFkZChyW3MtMV0pLHU9WGEpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBkPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxnPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCksZCkseD1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLGQpLHY9TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxkKTt4PDFlLTQmJih4PTEpLGc8MWUtNCYmKGc9eCksdjwxZS00JiYodj14KSxQdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LGgueCxmLngsdS54LGcseCx2KSxEdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGgueSxmLnksdS55LGcseCx2KSxJdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGcseCx2KX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoUHUuaW5pdENhdG11bGxSb20oYy54LGgueCxmLngsdS54LHRoaXMudGVuc2lvbiksRHUuaW5pdENhdG11bGxSb20oYy55LGgueSxmLnksdS55LHRoaXMudGVuc2lvbiksSXUuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBpLnNldChQdS5jYWxjKGwpLER1LmNhbGMobCksSXUuY2FsYyhsKSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChyLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBUKCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07Z2wucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiBRZyhuLHQsZSxpLHIpe2xldCBzPShpLXQpKi41LG89KHItZSkqLjUsYT1uKm4sbD1uKmE7cmV0dXJuKDIqZS0yKmkrcytvKSpsKygtMyplKzMqaS0yKnMtbykqYStzKm4rZX1mdW5jdGlvbiBGRShuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9ZnVuY3Rpb24gekUobix0KXtyZXR1cm4gMiooMS1uKSpuKnR9ZnVuY3Rpb24gVUUobix0KXtyZXR1cm4gbipuKnR9ZnVuY3Rpb24ganMobix0LGUsaSl7cmV0dXJuIEZFKG4sdCkrekUobixlKStVRShuLGkpfWZ1bmN0aW9uIEJFKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqZSp0fWZ1bmN0aW9uIE9FKG4sdCl7bGV0IGU9MS1uO3JldHVybiAzKmUqZSpuKnR9ZnVuY3Rpb24ga0Uobix0KXtyZXR1cm4gMyooMS1uKSpuKm4qdH1mdW5jdGlvbiBIRShuLHQpe3JldHVybiBuKm4qbip0fWZ1bmN0aW9uIHRvKG4sdCxlLGkscil7cmV0dXJuIEJFKG4sdCkrT0UobixlKStrRShuLGkpK0hFKG4scil9dmFyIHhvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEsscj1uZXcgSyl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IEspe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldCh0byh0LHIueCxzLngsby54LGEueCksdG8odCxyLnkscy55LG8ueSxhLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O3hvLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIHhsPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgVCxlPW5ldyBULGk9bmV3IFQscj1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aSx0aGlzLnYzPXJ9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gaS5zZXQodG8odCxyLngscy54LG8ueCxhLngpLHRvKHQsci55LHMueSxvLnksYS55KSx0byh0LHIueixzLnosby56LGEueikpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07eGwucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7dmFyICRyPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWdldFRhbmdlbnQodCxlKXtsZXQgaT1lfHxuZXcgSztyZXR1cm4gaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319OyRyLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYWg9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgVCl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHlvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEspe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5by5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDt2YXIgeWw9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQsaT1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSxqcyh0LHIueixzLnosby56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5bC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTM9ITA7dmFyIHZvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwbGluZUN1cnZlIix0aGlzLnBvaW50cz10fWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLHM9KHIubGVuZ3RoLTEpKnQsbz1NYXRoLmZsb29yKHMpLGE9cy1vLGw9cltvPT09MD9vOm8tMV0sYz1yW29dLHU9cltvPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTpvKzFdLGg9cltvPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTpvKzJdO3JldHVybiBpLnNldChRZyhhLGwueCxjLngsdS54LGgueCksUWcoYSxsLnksYy55LHUueSxoLnkpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChuZXcgSygpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTt2by5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgQzA9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bWwsQ2F0bXVsbFJvbUN1cnZlMzpnbCxDdWJpY0JlemllckN1cnZlOnhvLEN1YmljQmV6aWVyQ3VydmUzOnhsLEVsbGlwc2VDdXJ2ZTpKcixMaW5lQ3VydmU6JHIsTGluZUN1cnZlMzphaCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp5byxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6eWwsU3BsaW5lQ3VydmU6dm99KSxsaD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3ICRyKGUsdCkpfWdldFBvaW50KHQsZSl7bGV0IGk9dCp0aGlzLmdldExlbmd0aCgpLHI9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxzPTA7Zm9yKDtzPHIubGVuZ3RoOyl7aWYocltzXT49aSl7bGV0IG89cltzXS1pLGE9dGhpcy5jdXJ2ZXNbc10sbD1hLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLW8vbDtyZXR1cm4gYS5nZXRQb2ludEF0KGMsZSl9cysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLGU9MDtmb3IobGV0IGk9MCxyPXRoaXMuY3VydmVzLmxlbmd0aDtpPHI7aSsrKWUrPXRoaXMuY3VydmVzW2ldLmdldExlbmd0aCgpLHQucHVzaChlKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKSxlfWdldFBvaW50cyh0PTEyKXtsZXQgZT1bXSxpO2ZvcihsZXQgcj0wLHM9dGhpcy5jdXJ2ZXM7cjxzLmxlbmd0aDtyKyspe2xldCBvPXNbcl0sYT1vJiZvLmlzRWxsaXBzZUN1cnZlP3QqMjpvJiYoby5pc0xpbmVDdXJ2ZXx8by5pc0xpbmVDdXJ2ZTMpPzE6byYmby5pc1NwbGluZUN1cnZlP3Qqby5wb2ludHMubGVuZ3RoOnQsbD1vLmdldFBvaW50cyhhKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpJiZpLmVxdWFscyh1KXx8KGUucHVzaCh1KSxpPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goci5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLmN1cnZlc1tlXTt0LmN1cnZlcy5wdXNoKHIudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2gobmV3IEMwW3IudHlwZV0oKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxfbz1jbGFzcyBleHRlbmRzIGxoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgSyx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IGU9MSxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5saW5lVG8odFtlXS54LHRbZV0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9bGluZVRvKHQsZSl7bGV0IGk9bmV3ICRyKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEsodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBzPW5ldyB5byh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBLKHQsZSksbmV3IEsoaSxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gocyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KGksciksdGhpc31iZXppZXJDdXJ2ZVRvKHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgeG8odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSyh0LGUpLG5ldyBLKGksciksbmV3IEsocyxvKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goYSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHMsbyksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCBlPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksaT1uZXcgdm8oZSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5jdXJyZW50UG9pbnQueCxsPXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzYXJjKHQrYSxlK2wsaSxyLHMsbyksdGhpc31hYnNhcmModCxlLGkscixzLG8pe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxlLGksaSxyLHMsbyksdGhpc31lbGxpcHNlKHQsZSxpLHIscyxvLGEsbCl7bGV0IGM9dGhpcy5jdXJyZW50UG9pbnQueCx1PXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K2MsZSt1LGkscixzLG8sYSxsKSx0aGlzfWFic2VsbGlwc2UodCxlLGkscixzLG8sYSxsKXtsZXQgYz1uZXcgSnIodCxlLGkscixzLG8sYSxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IGg9Yy5nZXRQb2ludCgwKTtoLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGgueCxoLnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IHU9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weSh1KSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LFVuPWNsYXNzIGV4dGVuZHMgX297Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPXRuKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPXRoaXMuaG9sZXMubGVuZ3RoO2k8cjtpKyspZVtpXT10aGlzLmhvbGVzW2ldLmdldFBvaW50cyh0KTtyZXR1cm4gZX1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuaG9sZXNbZV07dGhpcy5ob2xlcy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5ob2xlc1tlXTt0LmhvbGVzLnB1c2goci50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2gobmV3IF9vKCkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sVkU9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKG4sdCxlPTIpe2xldCBpPXQmJnQubGVuZ3RoLHI9aT90WzBdKmU6bi5sZW5ndGgscz1SMChuLDAscixlLCEwKSxvPVtdO2lmKCFzfHxzLm5leHQ9PT1zLnByZXYpcmV0dXJuIG87bGV0IGEsbCxjLHUsaCxmLGQ7aWYoaSYmKHM9WUUobix0LHMsZSkpLG4ubGVuZ3RoPjgwKmUpe2E9Yz1uWzBdLGw9dT1uWzFdO2ZvcihsZXQgZz1lO2c8cjtnKz1lKWg9bltnXSxmPW5bZysxXSxoPGEmJihhPWgpLGY8bCYmKGw9ZiksaD5jJiYoYz1oKSxmPnUmJih1PWYpO2Q9TWF0aC5tYXgoYy1hLHUtbCksZD1kIT09MD8xL2Q6MH1yZXR1cm4gd28ocyxvLGUsYSxsLGQpLG99fTtmdW5jdGlvbiBSMChuLHQsZSxpLHIpe2xldCBzLG87aWYocj09PXJUKG4sdCxlLGkpPjApZm9yKHM9dDtzPGU7cys9aSlvPWpnKHMsbltzXSxuW3MrMV0sbyk7ZWxzZSBmb3Iocz1lLWk7cz49dDtzLT1pKW89amcocyxuW3NdLG5bcysxXSxvKTtyZXR1cm4gbyYmRGwobyxvLm5leHQpJiYoYm8obyksbz1vLm5leHQpLG99ZnVuY3Rpb24gbGkobix0KXtpZighbilyZXR1cm4gbjt0fHwodD1uKTtsZXQgZT1uLGk7ZG8gaWYoaT0hMSwhZS5zdGVpbmVyJiYoRGwoZSxlLm5leHQpfHx0ZShlLnByZXYsZSxlLm5leHQpPT09MCkpe2lmKGJvKGUpLGU9dD1lLnByZXYsZT09PWUubmV4dClicmVhaztpPSEwfWVsc2UgZT1lLm5leHQ7d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIHdvKG4sdCxlLGkscixzLG8pe2lmKCFuKXJldHVybjshbyYmcyYmUUUobixpLHIscyk7bGV0IGE9bixsLGM7Zm9yKDtuLnByZXYhPT1uLm5leHQ7KXtpZihsPW4ucHJldixjPW4ubmV4dCxzP1dFKG4saSxyLHMpOkdFKG4pKXt0LnB1c2gobC5pL2UpLHQucHVzaChuLmkvZSksdC5wdXNoKGMuaS9lKSxibyhuKSxuPWMubmV4dCxhPWMubmV4dDtjb250aW51ZX1pZihuPWMsbj09PWEpe28/bz09PTE/KG49cUUobGkobiksdCxlKSx3byhuLHQsZSxpLHIscywyKSk6bz09PTImJlhFKG4sdCxlLGkscixzKTp3byhsaShuKSx0LGUsaSxyLHMsMSk7YnJlYWt9fX1mdW5jdGlvbiBHRShuKXtsZXQgdD1uLnByZXYsZT1uLGk9bi5uZXh0O2lmKHRlKHQsZSxpKT49MClyZXR1cm4hMTtsZXQgcj1uLm5leHQubmV4dDtmb3IoO3IhPT1uLnByZXY7KXtpZih6cih0LngsdC55LGUueCxlLnksaS54LGkueSxyLngsci55KSYmdGUoci5wcmV2LHIsci5uZXh0KT49MClyZXR1cm4hMTtyPXIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBXRShuLHQsZSxpKXtsZXQgcj1uLnByZXYscz1uLG89bi5uZXh0O2lmKHRlKHIscyxvKT49MClyZXR1cm4hMTtsZXQgYT1yLng8cy54P3IueDxvLng/ci54Om8ueDpzLng8by54P3MueDpvLngsbD1yLnk8cy55P3IueTxvLnk/ci55Om8ueTpzLnk8by55P3MueTpvLnksYz1yLng+cy54P3IueD5vLng/ci54Om8ueDpzLng+by54P3MueDpvLngsdT1yLnk+cy55P3IueT5vLnk/ci55Om8ueTpzLnk+by55P3MueTpvLnksaD1jaChhLGwsdCxlLGkpLGY9Y2goYyx1LHQsZSxpKSxkPW4ucHJldlosZz1uLm5leHRaO2Zvcig7ZCYmZC56Pj1oJiZnJiZnLno8PWY7KXtpZihkIT09bi5wcmV2JiZkIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxkLngsZC55KSYmdGUoZC5wcmV2LGQsZC5uZXh0KT49MHx8KGQ9ZC5wcmV2WixnIT09bi5wcmV2JiZnIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxnLngsZy55KSYmdGUoZy5wcmV2LGcsZy5uZXh0KT49MCkpcmV0dXJuITE7Zz1nLm5leHRafWZvcig7ZCYmZC56Pj1oOyl7aWYoZCE9PW4ucHJldiYmZCE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZC54LGQueSkmJnRlKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLnByZXZafWZvcig7ZyYmZy56PD1mOyl7aWYoZyE9PW4ucHJldiYmZyE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZy54LGcueSkmJnRlKGcucHJldixnLGcubmV4dCk+PTApcmV0dXJuITE7Zz1nLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHFFKG4sdCxlKXtsZXQgaT1uO2Rve2xldCByPWkucHJldixzPWkubmV4dC5uZXh0OyFEbChyLHMpJiZMMChyLGksaS5uZXh0LHMpJiZNbyhyLHMpJiZNbyhzLHIpJiYodC5wdXNoKHIuaS9lKSx0LnB1c2goaS5pL2UpLHQucHVzaChzLmkvZSksYm8oaSksYm8oaS5uZXh0KSxpPW49cyksaT1pLm5leHR9d2hpbGUoaSE9PW4pO3JldHVybiBsaShpKX1mdW5jdGlvbiBYRShuLHQsZSxpLHIscyl7bGV0IG89bjtkb3tsZXQgYT1vLm5leHQubmV4dDtmb3IoO2EhPT1vLnByZXY7KXtpZihvLmkhPT1hLmkmJmVUKG8sYSkpe2xldCBsPVAwKG8sYSk7bz1saShvLG8ubmV4dCksbD1saShsLGwubmV4dCksd28obyx0LGUsaSxyLHMpLHdvKGwsdCxlLGkscixzKTtyZXR1cm59YT1hLm5leHR9bz1vLm5leHR9d2hpbGUobyE9PW4pfWZ1bmN0aW9uIFlFKG4sdCxlLGkpe2xldCByPVtdLHMsbyxhLGwsYztmb3Iocz0wLG89dC5sZW5ndGg7czxvO3MrKylhPXRbc10qaSxsPXM8by0xP3RbcysxXSppOm4ubGVuZ3RoLGM9UjAobixhLGwsaSwhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKHRUKGMpKTtmb3Ioci5zb3J0KFpFKSxzPTA7czxyLmxlbmd0aDtzKyspSkUocltzXSxlKSxlPWxpKGUsZS5uZXh0KTtyZXR1cm4gZX1mdW5jdGlvbiBaRShuLHQpe3JldHVybiBuLngtdC54fWZ1bmN0aW9uIEpFKG4sdCl7aWYodD0kRShuLHQpLHQpe2xldCBlPVAwKHQsbik7bGkodCx0Lm5leHQpLGxpKGUsZS5uZXh0KX19ZnVuY3Rpb24gJEUobix0KXtsZXQgZT10LGk9bi54LHI9bi55LHM9LTEvMCxvO2Rve2lmKHI8PWUueSYmcj49ZS5uZXh0LnkmJmUubmV4dC55IT09ZS55KXtsZXQgZj1lLngrKHItZS55KSooZS5uZXh0LngtZS54KS8oZS5uZXh0LnktZS55KTtpZihmPD1pJiZmPnMpe2lmKHM9ZixmPT09aSl7aWYocj09PWUueSlyZXR1cm4gZTtpZihyPT09ZS5uZXh0LnkpcmV0dXJuIGUubmV4dH1vPWUueDxlLm5leHQueD9lOmUubmV4dH19ZT1lLm5leHR9d2hpbGUoZSE9PXQpO2lmKCFvKXJldHVybiBudWxsO2lmKGk9PT1zKXJldHVybiBvO2xldCBhPW8sbD1vLngsYz1vLnksdT0xLzAsaDtlPW87ZG8gaT49ZS54JiZlLng+PWwmJmkhPT1lLngmJnpyKHI8Yz9pOnMscixsLGMscjxjP3M6aSxyLGUueCxlLnkpJiYoaD1NYXRoLmFicyhyLWUueSkvKGktZS54KSxNbyhlLG4pJiYoaDx1fHxoPT09dSYmKGUueD5vLnh8fGUueD09PW8ueCYmS0UobyxlKSkpJiYobz1lLHU9aCkpLGU9ZS5uZXh0O3doaWxlKGUhPT1hKTtyZXR1cm4gb31mdW5jdGlvbiBLRShuLHQpe3JldHVybiB0ZShuLnByZXYsbix0LnByZXYpPDAmJnRlKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiBRRShuLHQsZSxpKXtsZXQgcj1uO2RvIHIuej09PW51bGwmJihyLno9Y2goci54LHIueSx0LGUsaSkpLHIucHJldlo9ci5wcmV2LHIubmV4dFo9ci5uZXh0LHI9ci5uZXh0O3doaWxlKHIhPT1uKTtyLnByZXZaLm5leHRaPW51bGwsci5wcmV2Wj1udWxsLGpFKHIpfWZ1bmN0aW9uIGpFKG4pe2xldCB0LGUsaSxyLHMsbyxhLGwsYz0xO2Rve2ZvcihlPW4sbj1udWxsLHM9bnVsbCxvPTA7ZTspe2ZvcihvKyssaT1lLGE9MCx0PTA7dDxjJiYoYSsrLGk9aS5uZXh0WiwhIWkpO3QrKyk7Zm9yKGw9YzthPjB8fGw+MCYmaTspYSE9PTAmJihsPT09MHx8IWl8fGUuejw9aS56KT8ocj1lLGU9ZS5uZXh0WixhLS0pOihyPWksaT1pLm5leHRaLGwtLSkscz9zLm5leHRaPXI6bj1yLHIucHJldlo9cyxzPXI7ZT1pfXMubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSk7cmV0dXJuIG59ZnVuY3Rpb24gY2gobix0LGUsaSxyKXtyZXR1cm4gbj0zMjc2Nyoobi1lKSpyLHQ9MzI3NjcqKHQtaSkqcixuPShufG48PDgpJjE2NzExOTM1LG49KG58bjw8NCkmMjUyNjQ1MTM1LG49KG58bjw8MikmODU4OTkzNDU5LG49KG58bjw8MSkmMTQzMTY1NTc2NSx0PSh0fHQ8PDgpJjE2NzExOTM1LHQ9KHR8dDw8NCkmMjUyNjQ1MTM1LHQ9KHR8dDw8MikmODU4OTkzNDU5LHQ9KHR8dDw8MSkmMTQzMTY1NTc2NSxufHQ8PDF9ZnVuY3Rpb24gdFQobil7bGV0IHQ9bixlPW47ZG8odC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHQ7d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIHpyKG4sdCxlLGkscixzLG8sYSl7cmV0dXJuKHItbykqKHQtYSktKG4tbykqKHMtYSk+PTAmJihuLW8pKihpLWEpLShlLW8pKih0LWEpPj0wJiYoZS1vKSoocy1hKS0oci1vKSooaS1hKT49MH1mdW5jdGlvbiBlVChuLHQpe3JldHVybiBuLm5leHQuaSE9PXQuaSYmbi5wcmV2LmkhPT10LmkmJiFuVChuLHQpJiYoTW8obix0KSYmTW8odCxuKSYmaVQobix0KSYmKHRlKG4ucHJldixuLHQucHJldil8fHRlKG4sdC5wcmV2LHQpKXx8RGwobix0KSYmdGUobi5wcmV2LG4sbi5uZXh0KT4wJiZ0ZSh0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIHRlKG4sdCxlKXtyZXR1cm4odC55LW4ueSkqKGUueC10LngpLSh0Lngtbi54KSooZS55LXQueSl9ZnVuY3Rpb24gRGwobix0KXtyZXR1cm4gbi54PT09dC54JiZuLnk9PT10Lnl9ZnVuY3Rpb24gTDAobix0LGUsaSl7bGV0IHI9WmEodGUobix0LGUpKSxzPVphKHRlKG4sdCxpKSksbz1aYSh0ZShlLGksbikpLGE9WmEodGUoZSxpLHQpKTtyZXR1cm4hIShyIT09cyYmbyE9PWF8fHI9PT0wJiZZYShuLGUsdCl8fHM9PT0wJiZZYShuLGksdCl8fG89PT0wJiZZYShlLG4saSl8fGE9PT0wJiZZYShlLHQsaSkpfWZ1bmN0aW9uIFlhKG4sdCxlKXtyZXR1cm4gdC54PD1NYXRoLm1heChuLngsZS54KSYmdC54Pj1NYXRoLm1pbihuLngsZS54KSYmdC55PD1NYXRoLm1heChuLnksZS55KSYmdC55Pj1NYXRoLm1pbihuLnksZS55KX1mdW5jdGlvbiBaYShuKXtyZXR1cm4gbj4wPzE6bjwwPy0xOjB9ZnVuY3Rpb24gblQobix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJkwwKGUsZS5uZXh0LG4sdCkpcmV0dXJuITA7ZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiExfWZ1bmN0aW9uIE1vKG4sdCl7cmV0dXJuIHRlKG4ucHJldixuLG4ubmV4dCk8MD90ZShuLHQsbi5uZXh0KT49MCYmdGUobixuLnByZXYsdCk+PTA6dGUobix0LG4ucHJldik8MHx8dGUobixuLm5leHQsdCk8MH1mdW5jdGlvbiBpVChuLHQpe2xldCBlPW4saT0hMSxyPShuLngrdC54KS8yLHM9KG4ueSt0LnkpLzI7ZG8gZS55PnMhPWUubmV4dC55PnMmJmUubmV4dC55IT09ZS55JiZyPChlLm5leHQueC1lLngpKihzLWUueSkvKGUubmV4dC55LWUueSkrZS54JiYoaT0haSksZT1lLm5leHQ7d2hpbGUoZSE9PW4pO3JldHVybiBpfWZ1bmN0aW9uIFAwKG4sdCl7bGV0IGU9bmV3IHVoKG4uaSxuLngsbi55KSxpPW5ldyB1aCh0LmksdC54LHQueSkscj1uLm5leHQscz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLHMubmV4dD1pLGkucHJldj1zLGl9ZnVuY3Rpb24gamcobix0LGUsaSl7bGV0IHI9bmV3IHVoKG4sdCxlKTtyZXR1cm4gaT8oci5uZXh0PWkubmV4dCxyLnByZXY9aSxpLm5leHQucHJldj1yLGkubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gYm8obil7bi5uZXh0LnByZXY9bi5wcmV2LG4ucHJldi5uZXh0PW4ubmV4dCxuLnByZXZaJiYobi5wcmV2Wi5uZXh0Wj1uLm5leHRaKSxuLm5leHRaJiYobi5uZXh0Wi5wcmV2Wj1uLnByZXZaKX1mdW5jdGlvbiB1aChuLHQsZSl7dGhpcy5pPW4sdGhpcy54PXQsdGhpcy55PWUsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gclQobix0LGUsaSl7bGV0IHI9MDtmb3IobGV0IHM9dCxvPWUtaTtzPGU7cys9aSlyKz0obltvXS1uW3NdKSoobltzKzFdK25bbysxXSksbz1zO3JldHVybiByfXZhciBkbj1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxzPTA7czxlO3I9cysrKWkrPXRbcl0ueCp0W3NdLnktdFtzXS54KnRbcl0ueTtyZXR1cm4gaSouNX1zdGF0aWMgaXNDbG9ja1dpc2UodCl7cmV0dXJuIGRuLmFyZWEodCk8MH1zdGF0aWMgdHJpYW5ndWxhdGVTaGFwZSh0LGUpe2xldCBpPVtdLHI9W10scz1bXTt0MCh0KSxlMChpLHQpO2xldCBvPXQubGVuZ3RoO2UuZm9yRWFjaCh0MCk7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspci5wdXNoKG8pLG8rPWVbbF0ubGVuZ3RoLGUwKGksZVtsXSk7bGV0IGE9VkUudHJpYW5ndWxhdGUoaSxyKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTMpcy5wdXNoKGEuc2xpY2UobCxsKzMpKTtyZXR1cm4gc319O2Z1bmN0aW9uIHQwKG4pe2xldCB0PW4ubGVuZ3RoO3Q+MiYmblt0LTFdLmVxdWFscyhuWzBdKSYmbi5wb3AoKX1mdW5jdGlvbiBlMChuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW4ucHVzaCh0W2VdLngpLG4ucHVzaCh0W2VdLnkpfXZhciBjaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9bmV3IFVuKFtuZXcgSyguNSwuNSksbmV3IEsoLS41LC41KSxuZXcgSygtLjUsLS41KSxuZXcgSyguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10scz1bXTtmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspe2xldCBjPXRbYV07byhjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShzLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gbyhhKXtsZXQgbD1bXSxjPWUuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9lLmN1cnZlU2VnbWVudHM6MTIsdT1lLnN0ZXBzIT09dm9pZCAwP2Uuc3RlcHM6MSxoPWUuZGVwdGghPT12b2lkIDA/ZS5kZXB0aDoxLGY9ZS5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ZS5iZXZlbEVuYWJsZWQ6ITAsZD1lLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP2UuYmV2ZWxUaGlja25lc3M6LjIsZz1lLmJldmVsU2l6ZSE9PXZvaWQgMD9lLmJldmVsU2l6ZTpkLS4xLHg9ZS5iZXZlbE9mZnNldCE9PXZvaWQgMD9lLmJldmVsT2Zmc2V0OjAsdj1lLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ZS5iZXZlbFNlZ21lbnRzOjMsbT1lLmV4dHJ1ZGVQYXRoLHA9ZS5VVkdlbmVyYXRvciE9PXZvaWQgMD9lLlVWR2VuZXJhdG9yOnNUO2UuYW1vdW50IT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGg9ZS5hbW91bnQpO2xldCBiLF89ITEsUyxMLEEsSDttJiYoYj1tLmdldFNwYWNlZFBvaW50cyh1KSxfPSEwLGY9ITEsUz1tLmNvbXB1dGVGcmVuZXRGcmFtZXModSwhMSksTD1uZXcgVCxBPW5ldyBULEg9bmV3IFQpLGZ8fCh2PTAsZD0wLGc9MCx4PTApO2xldCB0dD1hLmV4dHJhY3RQb2ludHMoYyksWD10dC5zaGFwZSx5PXR0LmhvbGVzO2lmKCFkbi5pc0Nsb2NrV2lzZShYKSl7WD1YLnJldmVyc2UoKTtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107ZG4uaXNDbG9ja1dpc2UoSikmJih5W0NdPUoucmV2ZXJzZSgpKX19bGV0IEQ9ZG4udHJpYW5ndWxhdGVTaGFwZShYLHkpLEY9WDtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107WD1YLmNvbmNhdChKKX1mdW5jdGlvbiB6KEMsaixKKXtyZXR1cm4ganx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxqLmNsb25lKCkubXVsdGlwbHlTY2FsYXIoSikuYWRkKEMpfWxldCBOPVgubGVuZ3RoLFY9RC5sZW5ndGg7ZnVuY3Rpb24gUShDLGosSil7bGV0IGl0LGV0LHZ0LGJ0PUMueC1qLngsSXQ9Qy55LWoueSxadD1KLngtQy54LHF0PUoueS1DLnksRT1idCpidCtJdCpJdCx3PWJ0KnF0LUl0Klp0O2lmKE1hdGguYWJzKHcpPk51bWJlci5FUFNJTE9OKXtsZXQgcT1NYXRoLnNxcnQoRSkscnQ9TWF0aC5zcXJ0KFp0Klp0K3F0KnF0KSxndD1qLngtSXQvcSxXPWoueStidC9xLF90PUoueC1xdC9ydCx5dD1KLnkrWnQvcnQsdXQ9KChfdC1ndCkqcXQtKHl0LVcpKlp0KS8oYnQqcXQtSXQqWnQpO2l0PWd0K2J0KnV0LUMueCxldD1XK0l0KnV0LUMueTtsZXQgY3Q9aXQqaXQrZXQqZXQ7aWYoY3Q8PTIpcmV0dXJuIG5ldyBLKGl0LGV0KTt2dD1NYXRoLnNxcnQoY3QvMil9ZWxzZXtsZXQgcT0hMTtidD5OdW1iZXIuRVBTSUxPTj9adD5OdW1iZXIuRVBTSUxPTiYmKHE9ITApOmJ0PC1OdW1iZXIuRVBTSUxPTj9adDwtTnVtYmVyLkVQU0lMT04mJihxPSEwKTpNYXRoLnNpZ24oSXQpPT09TWF0aC5zaWduKHF0KSYmKHE9ITApLHE/KGl0PS1JdCxldD1idCx2dD1NYXRoLnNxcnQoRSkpOihpdD1idCxldD1JdCx2dD1NYXRoLnNxcnQoRS8yKSl9cmV0dXJuIG5ldyBLKGl0L3Z0LGV0L3Z0KX1sZXQgYXQ9W107Zm9yKGxldCBDPTAsaj1GLmxlbmd0aCxKPWotMSxpdD1DKzE7QzxqO0MrKyxKKyssaXQrKylKPT09aiYmKEo9MCksaXQ9PT1qJiYoaXQ9MCksYXRbQ109UShGW0NdLEZbSl0sRltpdF0pO2xldCBHPVtdLCQsbHQ9YXQuY29uY2F0KCk7Zm9yKGxldCBDPTAsaj15Lmxlbmd0aDtDPGo7QysrKXtsZXQgSj15W0NdOyQ9W107Zm9yKGxldCBpdD0wLGV0PUoubGVuZ3RoLHZ0PWV0LTEsYnQ9aXQrMTtpdDxldDtpdCsrLHZ0KyssYnQrKyl2dD09PWV0JiYodnQ9MCksYnQ9PT1ldCYmKGJ0PTApLCRbaXRdPVEoSltpdF0sSlt2dF0sSltidF0pO0cucHVzaCgkKSxsdD1sdC5jb25jYXQoJCl9Zm9yKGxldCBDPTA7Qzx2O0MrKyl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksLUopfWZvcihsZXQgZXQ9MCx2dD15Lmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eVtldF07JD1HW2V0XTtmb3IobGV0IEl0PTAsWnQ9YnQubGVuZ3RoO0l0PFp0O0l0Kyspe2xldCBxdD16KGJ0W0l0XSwkW0l0XSxpdCk7bXQocXQueCxxdC55LC1KKX19fWxldCBkdD1nK3g7Zm9yKGxldCBDPTA7QzxOO0MrKyl7bGV0IGo9Zj96KFhbQ10sbHRbQ10sZHQpOlhbQ107Xz8oQS5jb3B5KFMubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoai54KSxMLmNvcHkoUy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGoueSksSC5jb3B5KGJbMF0pLmFkZChBKS5hZGQoTCksbXQoSC54LEgueSxILnopKTptdChqLngsai55LDApfWZvcihsZXQgQz0xO0M8PXU7QysrKWZvcihsZXQgaj0wO2o8TjtqKyspe2xldCBKPWY/eihYW2pdLGx0W2pdLGR0KTpYW2pdO18/KEEuY29weShTLm5vcm1hbHNbQ10pLm11bHRpcGx5U2NhbGFyKEoueCksTC5jb3B5KFMuYmlub3JtYWxzW0NdKS5tdWx0aXBseVNjYWxhcihKLnkpLEguY29weShiW0NdKS5hZGQoQSkuYWRkKEwpLG10KEgueCxILnksSC56KSk6bXQoSi54LEoueSxoL3UqQyl9Zm9yKGxldCBDPXYtMTtDPj0wO0MtLSl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksaCtKKX1mb3IobGV0IGV0PTAsdnQ9eS5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXlbZXRdOyQ9R1tldF07Zm9yKGxldCBJdD0wLFp0PWJ0Lmxlbmd0aDtJdDxadDtJdCsrKXtsZXQgcXQ9eihidFtJdF0sJFtJdF0saXQpO18/bXQocXQueCxxdC55K2JbdS0xXS55LGJbdS0xXS54K0opOm10KHF0LngscXQueSxoK0opfX19eHQoKSxrKCk7ZnVuY3Rpb24geHQoKXtsZXQgQz1yLmxlbmd0aC8zO2lmKGYpe2xldCBqPTAsSj1OKmo7Zm9yKGxldCBpdD0wO2l0PFY7aXQrKyl7bGV0IGV0PURbaXRdO1N0KGV0WzJdK0osZXRbMV0rSixldFswXStKKX1qPXUrdioyLEo9TipqO2ZvcihsZXQgaXQ9MDtpdDxWO2l0Kyspe2xldCBldD1EW2l0XTtTdChldFswXStKLGV0WzFdK0osZXRbMl0rSil9fWVsc2V7Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzJdLEpbMV0sSlswXSl9Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzBdK04qdSxKWzFdK04qdSxKWzJdK04qdSl9fWkuYWRkR3JvdXAoQyxyLmxlbmd0aC8zLUMsMCl9ZnVuY3Rpb24gaygpe2xldCBDPXIubGVuZ3RoLzMsaj0wO0Z0KEYsaiksais9Ri5sZW5ndGg7Zm9yKGxldCBKPTAsaXQ9eS5sZW5ndGg7SjxpdDtKKyspe2xldCBldD15W0pdO0Z0KGV0LGopLGorPWV0Lmxlbmd0aH1pLmFkZEdyb3VwKEMsci5sZW5ndGgvMy1DLDEpfWZ1bmN0aW9uIEZ0KEMsail7bGV0IEo9Qy5sZW5ndGg7Zm9yKDstLUo+PTA7KXtsZXQgaXQ9SixldD1KLTE7ZXQ8MCYmKGV0PUMubGVuZ3RoLTEpO2ZvcihsZXQgdnQ9MCxidD11K3YqMjt2dDxidDt2dCsrKXtsZXQgSXQ9Tip2dCxadD1OKih2dCsxKSxxdD1qK2l0K0l0LEU9aitldCtJdCx3PWorZXQrWnQscT1qK2l0K1p0O0IocXQsRSx3LHEpfX19ZnVuY3Rpb24gbXQoQyxqLEope2wucHVzaChDKSxsLnB1c2goaiksbC5wdXNoKEopfWZ1bmN0aW9uIFN0KEMsaixKKXtzdChDKSxzdChqKSxzdChKKTtsZXQgaXQ9ci5sZW5ndGgvMyxldD1wLmdlbmVyYXRlVG9wVVYoaSxyLGl0LTMsaXQtMixpdC0xKTtudChldFswXSksbnQoZXRbMV0pLG50KGV0WzJdKX1mdW5jdGlvbiBCKEMsaixKLGl0KXtzdChDKSxzdChqKSxzdChpdCksc3Qoaiksc3QoSiksc3QoaXQpO2xldCBldD1yLmxlbmd0aC8zLHZ0PXAuZ2VuZXJhdGVTaWRlV2FsbFVWKGkscixldC02LGV0LTMsZXQtMixldC0xKTtudCh2dFswXSksbnQodnRbMV0pLG50KHZ0WzNdKSxudCh2dFsxXSksbnQodnRbMl0pLG50KHZ0WzNdKX1mdW5jdGlvbiBzdChDKXtyLnB1c2gobFtDKjMrMF0pLHIucHVzaChsW0MqMysxXSksci5wdXNoKGxbQyozKzJdKX1mdW5jdGlvbiBudChDKXtzLnB1c2goQy54KSxzLnB1c2goQy55KX19fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyxpPXRoaXMucGFyYW1ldGVycy5vcHRpb25zO3JldHVybiBvVChlLGksdCl9c3RhdGljIGZyb21KU09OKHQsZSl7bGV0IGk9W107Zm9yKGxldCBzPTAsbz10LnNoYXBlcy5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVt0LnNoYXBlc1tzXV07aS5wdXNoKGEpfWxldCByPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gciE9PXZvaWQgMCYmKHQub3B0aW9ucy5leHRydWRlUGF0aD1uZXcgQzBbci50eXBlXSgpLmZyb21KU09OKHIpKSxuZXcgY2koaSx0Lm9wdGlvbnMpfX0sc1Q9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgcz10W2UqM10sbz10W2UqMysxXSxhPXRbaSozXSxsPXRbaSozKzFdLGM9dFtyKjNdLHU9dFtyKjMrMV07cmV0dXJuW25ldyBLKHMsbyksbmV3IEsoYSxsKSxuZXcgSyhjLHUpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKG4sdCxlLGkscixzKXtsZXQgbz10W2UqM10sYT10W2UqMysxXSxsPXRbZSozKzJdLGM9dFtpKjNdLHU9dFtpKjMrMV0saD10W2kqMysyXSxmPXRbciozXSxkPXRbciozKzFdLGc9dFtyKjMrMl0seD10W3MqM10sdj10W3MqMysxXSxtPXRbcyozKzJdO3JldHVybiBNYXRoLmFicyhhLXUpPE1hdGguYWJzKG8tYyk/W25ldyBLKG8sMS1sKSxuZXcgSyhjLDEtaCksbmV3IEsoZiwxLWcpLG5ldyBLKHgsMS1tKV06W25ldyBLKGEsMS1sKSxuZXcgSyh1LDEtaCksbmV3IEsoZCwxLWcpLG5ldyBLKHYsMS1tKV19fTtmdW5jdGlvbiBvVChuLHQsZSl7aWYoZS5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspe2xldCBzPW5baV07ZS5zaGFwZXMucHVzaChzLnV1aWQpfWVsc2UgZS5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB0LmV4dHJ1ZGVQYXRoIT09dm9pZCAwJiYoZS5vcHRpb25zLmV4dHJ1ZGVQYXRoPXQuZXh0cnVkZVBhdGgudG9KU09OKCkpLGV9dmFyIHFpPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD1uZXcgVW4oW25ldyBLKDAsLjUpLG5ldyBLKC0uNSwtLjUpLG5ldyBLKC41LC0uNSldKSxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2xldCBpPVtdLHI9W10scz1bXSxvPVtdLGE9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAoYSxsLHUpLGErPWwsbD0wO3RoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZWUociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGVlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVlKG8sMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9ci5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhlKSxkPWYuc2hhcGUsZz1mLmhvbGVzO2RuLmlzQ2xvY2tXaXNlKGQpPT09ITEmJihkPWQucmV2ZXJzZSgpKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZG4uaXNDbG9ja1dpc2UocCk9PT0hMCYmKGdbdl09cC5yZXZlcnNlKCkpfWxldCB4PWRuLnRyaWFuZ3VsYXRlU2hhcGUoZCxnKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZD1kLmNvbmNhdChwKX1mb3IobGV0IHY9MCxtPWQubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWRbdl07ci5wdXNoKHAueCxwLnksMCkscy5wdXNoKDAsMCwxKSxvLnB1c2gocC54LHAueSl9Zm9yKGxldCB2PTAsbT14Lmxlbmd0aDt2PG07disrKXtsZXQgcD14W3ZdLGI9cFswXStoLF89cFsxXStoLFM9cFsyXStoO2kucHVzaChiLF8sUyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gYVQoZSx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxzPXQuc2hhcGVzLmxlbmd0aDtyPHM7cisrKXtsZXQgbz1lW3Quc2hhcGVzW3JdXTtpLnB1c2gobyl9cmV0dXJuIG5ldyBxaShpLHQuY3VydmVTZWdtZW50cyl9fTtmdW5jdGlvbiBhVChuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj1uW2VdO3Quc2hhcGVzLnB1c2goci51dWlkKX1lbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH12YXIgaGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O2hoLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciB2bD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBmdCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMucm91Z2huZXNzTWFwPW51bGwsdGhpcy5tZXRhbG5lc3NNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmVudk1hcEludGVuc2l0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzLHRoaXMubWV0YWxuZXNzPXQubWV0YWxuZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMucm91Z2huZXNzTWFwPXQucm91Z2huZXNzTWFwLHRoaXMubWV0YWxuZXNzTWFwPXQubWV0YWxuZXNzTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3ZsLnByb3RvdHlwZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPSEwO3ZhciBmaD1jbGFzcyBleHRlbmRzIHZse2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5pb3I9MS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyZWZsZWN0aXZpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSWUoMi41Kih0aGlzLmlvci0xKS8odGhpcy5pb3IrMSksMCwxKX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuaW9yPSgxKy40KmUpLygxLS40KmUpfX0pLHRoaXMuc2hlZW5Db2xvcj1uZXcgZnQoMCksdGhpcy5zaGVlbkNvbG9yTWFwPW51bGwsdGhpcy5zaGVlblJvdWdobmVzcz0xLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9bnVsbCx0aGlzLnRyYW5zbWlzc2lvbk1hcD1udWxsLHRoaXMudGhpY2tuZXNzPTAsdGhpcy50aGlja25lc3NNYXA9bnVsbCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9MCx0aGlzLmF0dGVudWF0aW9uQ29sb3I9bmV3IGZ0KDEsMSwxKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD1udWxsLHRoaXMuc3BlY3VsYXJDb2xvcj1uZXcgZnQoMSwxLDEpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD1udWxsLHRoaXMuX3NoZWVuPTAsdGhpcy5fY2xlYXJjb2F0PTAsdGhpcy5fdHJhbnNtaXNzaW9uPTAsdGhpcy5zZXRWYWx1ZXModCl9Z2V0IHNoZWVuKCl7cmV0dXJuIHRoaXMuX3NoZWVufXNldCBzaGVlbih0KXt0aGlzLl9zaGVlbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3NoZWVuPXR9Z2V0IGNsZWFyY29hdCgpe3JldHVybiB0aGlzLl9jbGVhcmNvYXR9c2V0IGNsZWFyY29hdCh0KXt0aGlzLl9jbGVhcmNvYXQ+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9jbGVhcmNvYXQ9dH1nZXQgdHJhbnNtaXNzaW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zbWlzc2lvbn1zZXQgdHJhbnNtaXNzaW9uKHQpe3RoaXMuX3RyYW5zbWlzc2lvbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3RyYW5zbWlzc2lvbj10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQsdGhpcy5jbGVhcmNvYXRNYXA9dC5jbGVhcmNvYXRNYXAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9dC5jbGVhcmNvYXROb3JtYWxNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHRoaXMuaW9yPXQuaW9yLHRoaXMuc2hlZW49dC5zaGVlbix0aGlzLnNoZWVuQ29sb3IuY29weSh0LnNoZWVuQ29sb3IpLHRoaXMuc2hlZW5Db2xvck1hcD10LnNoZWVuQ29sb3JNYXAsdGhpcy5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9dC5zaGVlblJvdWdobmVzc01hcCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzLnRoaWNrbmVzcz10LnRoaWNrbmVzcyx0aGlzLnRoaWNrbmVzc01hcD10LnRoaWNrbmVzc01hcCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlLHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KHQuYXR0ZW51YXRpb25Db2xvciksdGhpcy5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dC5zcGVjdWxhckludGVuc2l0eU1hcCx0aGlzLnNwZWN1bGFyQ29sb3IuY29weSh0LnNwZWN1bGFyQ29sb3IpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD10LnNwZWN1bGFyQ29sb3JNYXAsdGhpc319O2ZoLnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwO3ZhciBkaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGZ0KDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtkaC5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgcGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuZ3JhZGllbnRNYXA9dC5ncmFkaWVudE1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3BoLnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWw9ITA7dmFyIG1oPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O21oLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDt2YXIgZ2g9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtnaC5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwO3ZhciB4aD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3hoLnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgeWg9Y2xhc3MgZXh0ZW5kcyB6bntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt5aC5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIEt0PXthcnJheVNsaWNlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gS3QuaXNUeXBlZEFycmF5KG4pP25ldyBuLmNvbnN0cnVjdG9yKG4uc3ViYXJyYXkodCxlIT09dm9pZCAwP2U6bi5sZW5ndGgpKTpuLnNsaWNlKHQsZSl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIW58fCFlJiZuLmNvbnN0cnVjdG9yPT09dD9uOnR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UPT0ibnVtYmVyIj9uZXcgdChuKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihuKXtmdW5jdGlvbiB0KHIscyl7cmV0dXJuIG5bcl0tbltzXX1sZXQgZT1uLmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyIT09ZTsrK3IpaVtyXT1yO3JldHVybiBpLnNvcnQodCksaX0sc29ydGVkQXJyYXk6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4ubGVuZ3RoLHI9bmV3IG4uY29uc3RydWN0b3IoaSk7Zm9yKGxldCBzPTAsbz0wO28hPT1pOysrcyl7bGV0IGE9ZVtzXSp0O2ZvcihsZXQgbD0wO2whPT10OysrbClyW28rK109blthK2xdfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xLHM9blswXTtmb3IoO3MhPT12b2lkIDAmJnNbaV09PT12b2lkIDA7KXM9bltyKytdO2lmKHM9PT12b2lkIDApcmV0dXJuO2xldCBvPXNbaV07aWYobyE9PXZvaWQgMClpZihBcnJheS5pc0FycmF5KG8pKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoLmFwcGx5KGUsbykpLHM9bltyKytdO3doaWxlKHMhPT12b2lkIDApO2Vsc2UgaWYoby50b0FycmF5IT09dm9pZCAwKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksby50b0FycmF5KGUsZS5sZW5ndGgpKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKTtlbHNlIGRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoKG8pKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKX0sc3ViY2xpcDpmdW5jdGlvbihuLHQsZSxpLHI9MzApe2xldCBzPW4uY2xvbmUoKTtzLm5hbWU9dDtsZXQgbz1bXTtmb3IobGV0IGw9MDtsPHMudHJhY2tzLmxlbmd0aDsrK2wpe2xldCBjPXMudHJhY2tzW2xdLHU9Yy5nZXRWYWx1ZVNpemUoKSxoPVtdLGY9W107Zm9yKGxldCBkPTA7ZDxjLnRpbWVzLmxlbmd0aDsrK2Qpe2xldCBnPWMudGltZXNbZF0qcjtpZighKGc8ZXx8Zz49aSkpe2gucHVzaChjLnRpbWVzW2RdKTtmb3IobGV0IHg9MDt4PHU7Kyt4KWYucHVzaChjLnZhbHVlc1tkKnUreF0pfX1oLmxlbmd0aCE9PTAmJihjLnRpbWVzPUt0LmNvbnZlcnRBcnJheShoLGMudGltZXMuY29uc3RydWN0b3IpLGMudmFsdWVzPUt0LmNvbnZlcnRBcnJheShmLGMudmFsdWVzLmNvbnN0cnVjdG9yKSxvLnB1c2goYykpfXMudHJhY2tzPW87bGV0IGE9MS8wO2ZvcihsZXQgbD0wO2w8cy50cmFja3MubGVuZ3RoOysrbClhPnMudHJhY2tzW2xdLnRpbWVzWzBdJiYoYT1zLnRyYWNrc1tsXS50aW1lc1swXSk7Zm9yKGxldCBsPTA7bDxzLnRyYWNrcy5sZW5ndGg7KytsKXMudHJhY2tzW2xdLnNoaWZ0KC0xKmEpO3JldHVybiBzLnJlc2V0RHVyYXRpb24oKSxzfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKG4sdD0wLGU9bixpPTMwKXtpPD0wJiYoaT0zMCk7bGV0IHI9ZS50cmFja3MubGVuZ3RoLHM9dC9pO2ZvcihsZXQgbz0wO288cjsrK28pe2xldCBhPWUudHJhY2tzW29dLGw9YS5WYWx1ZVR5cGVOYW1lO2lmKGw9PT0iYm9vbCJ8fGw9PT0ic3RyaW5nIiljb250aW51ZTtsZXQgYz1uLnRyYWNrcy5maW5kKGZ1bmN0aW9uKG0pe3JldHVybiBtLm5hbWU9PT1hLm5hbWUmJm0uVmFsdWVUeXBlTmFtZT09PWx9KTtpZihjPT09dm9pZCAwKWNvbnRpbnVlO2xldCB1PTAsaD1hLmdldFZhbHVlU2l6ZSgpO2EuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJih1PWgvMyk7bGV0IGY9MCxkPWMuZ2V0VmFsdWVTaXplKCk7Yy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGY9ZC8zKTtsZXQgZz1hLnRpbWVzLmxlbmd0aC0xLHg7aWYoczw9YS50aW1lc1swXSl7bGV0IG09dSxwPWgtdTt4PUt0LmFycmF5U2xpY2UoYS52YWx1ZXMsbSxwKX1lbHNlIGlmKHM+PWEudGltZXNbZ10pe2xldCBtPWcqaCt1LHA9bStoLXU7eD1LdC5hcnJheVNsaWNlKGEudmFsdWVzLG0scCl9ZWxzZXtsZXQgbT1hLmNyZWF0ZUludGVycG9sYW50KCkscD11LGI9aC11O20uZXZhbHVhdGUocykseD1LdC5hcnJheVNsaWNlKG0ucmVzdWx0QnVmZmVyLHAsYil9bD09PSJxdWF0ZXJuaW9uIiYmbmV3IEVlKCkuZnJvbUFycmF5KHgpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoeCk7bGV0IHY9Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCBtPTA7bTx2OysrbSl7bGV0IHA9bSpkK2Y7aWYobD09PSJxdWF0ZXJuaW9uIilFZS5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyxwLHgsMCxjLnZhbHVlcyxwKTtlbHNle2xldCBiPWQtZioyO2ZvcihsZXQgXz0wO188YjsrK18pYy52YWx1ZXNbcCtfXS09eFtfXX19fXJldHVybiBuLmJsZW5kTW9kZT1kMCxufX0scG49Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXIhPT12b2lkIDA/cjpuZXcgZS5jb25zdHJ1Y3RvcihpKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPWksdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxpPXRoaXMuX2NhY2hlZEluZGV4LHI9ZVtpXSxzPWVbaS0xXTt0OntlOntsZXQgbztuOntpOmlmKCEodDxyKSl7Zm9yKGxldCBhPWkrMjs7KXtpZihyPT09dm9pZCAwKXtpZih0PHMpYnJlYWsgaTtyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSx0LHMpfWlmKGk9PT1hKWJyZWFrO2lmKHM9cixyPWVbKytpXSx0PHIpYnJlYWsgZX1vPWUubGVuZ3RoO2JyZWFrIG59aWYoISh0Pj1zKSl7bGV0IGE9ZVsxXTt0PGEmJihpPTIscz1hKTtmb3IobGV0IGw9aS0yOzspe2lmKHM9PT12b2lkIDApcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKGk9PT1sKWJyZWFrO2lmKHI9cyxzPWVbLS1pLTFdLHQ+PXMpYnJlYWsgZX1vPWksaT0wO2JyZWFrIG59YnJlYWsgdH1mb3IoO2k8bzspe2xldCBhPWkrbz4+PjE7dDxlW2FdP289YTppPWErMX1pZihyPWVbaV0scz1lW2ktMV0scz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYocj09PXZvaWQgMClyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSxzLHQpfXRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5pbnRlcnZhbENoYW5nZWRfKGkscyxyKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8oaSxzLHQscil9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2xldCBlPXRoaXMucmVzdWx0QnVmZmVyLGk9dGhpcy5zYW1wbGVWYWx1ZXMscj10aGlzLnZhbHVlU2l6ZSxzPXQqcjtmb3IobGV0IG89MDtvIT09cjsrK28pZVtvXT1pW3Mrb107cmV0dXJuIGV9aW50ZXJwb2xhdGVfKCl7dGhyb3cgbmV3IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpfWludGVydmFsQ2hhbmdlZF8oKXt9fTtwbi5wcm90b3R5cGUuYmVmb3JlU3RhcnRfPXBuLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3BuLnByb3RvdHlwZS5hZnRlckVuZF89cG4ucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87dmFyIHZoPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGksciksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0Ok5yLGVuZGluZ0VuZDpOcn19aW50ZXJ2YWxDaGFuZ2VkXyh0LGUsaSl7bGV0IHI9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMscz10LTIsbz10KzEsYT1yW3NdLGw9cltvXTtpZihhPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIEZyOnM9dCxhPTIqZS1pO2JyZWFrO2Nhc2UgZWw6cz1yLmxlbmd0aC0yLGE9ZStyW3NdLXJbcysxXTticmVhaztkZWZhdWx0OnM9dCxhPWl9aWYobD09PXZvaWQgMClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgRnI6bz10LGw9MippLWU7YnJlYWs7Y2FzZSBlbDpvPTEsbD1pK3JbMV0tclswXTticmVhaztkZWZhdWx0Om89dC0xLGw9ZX1sZXQgYz0oaS1lKSouNSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oZS1hKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtaSksdGhpcy5fb2Zmc2V0UHJldj1zKnUsdGhpcy5fb2Zmc2V0TmV4dD1vKnV9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBzPXRoaXMucmVzdWx0QnVmZmVyLG89dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PXRoaXMuX29mZnNldFByZXYsaD10aGlzLl9vZmZzZXROZXh0LGY9dGhpcy5fd2VpZ2h0UHJldixkPXRoaXMuX3dlaWdodE5leHQsZz0oaS1lKS8oci1lKSx4PWcqZyx2PXgqZyxtPS1mKnYrMipmKngtZipnLHA9KDErZikqdisoLTEuNS0yKmYpKngrKC0uNStmKSpnKzEsYj0oLTEtZCkqdisoMS41K2QpKngrLjUqZyxfPWQqdi1kKng7Zm9yKGxldCBTPTA7UyE9PWE7KytTKXNbU109bSpvW3UrU10rcCpvW2MrU10rYipvW2wrU10rXypvW2grU107cmV0dXJuIHN9fSxfbD1jbGFzcyBleHRlbmRzIHBue2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgcz10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD10KmEsYz1sLWEsdT0oaS1lKS8oci1lKSxoPTEtdTtmb3IobGV0IGY9MDtmIT09YTsrK2Ypc1tmXT1vW2MrZl0qaCtvW2wrZl0qdTtyZXR1cm4gc319LF9oPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LFhlPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKGU9PT12b2lkIDB8fGUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9S3QuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9S3QuY29udmVydEFycmF5KGksdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihyfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCBlPXQuY29uc3RydWN0b3IsaTtpZihlLnRvSlNPTiE9PXRoaXMudG9KU09OKWk9ZS50b0pTT04odCk7ZWxzZXtpPXtuYW1lOnQubmFtZSx0aW1lczpLdC5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOkt0LmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCByPXQuZ2V0SW50ZXJwb2xhdGlvbigpO3IhPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoaS5pbnRlcnBvbGF0aW9uPXIpfXJldHVybiBpLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLGl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBfaCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgX2wodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IHZoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIGphOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIHRsOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSBldTplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoO2JyZWFrfWlmKGU9PT12b2lkIDApe2xldCBpPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9PT12b2lkIDApaWYodCE9PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGkpO3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixpKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gamE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gdGw7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gZXV9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYodCE9PTApe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSs9dH1yZXR1cm4gdGhpc31zY2FsZSh0KXtpZih0IT09MSl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKj10fXJldHVybiB0aGlzfXRyaW0odCxlKXtsZXQgaT10aGlzLnRpbWVzLHI9aS5sZW5ndGgscz0wLG89ci0xO2Zvcig7cyE9PXImJmlbc108dDspKytzO2Zvcig7byE9PS0xJiZpW29dPmU7KS0tbztpZigrK28scyE9PTB8fG8hPT1yKXtzPj1vJiYobz1NYXRoLm1heChvLDEpLHM9by0xKTtsZXQgYT10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9S3QuYXJyYXlTbGljZShpLHMsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxzKmEsbyphKX1yZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwLGU9dGhpcy5nZXRWYWx1ZVNpemUoKTtlLU1hdGguZmxvb3IoZSkhPT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLHM9aS5sZW5ndGg7cz09PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBvPW51bGw7Zm9yKGxldCBhPTA7YSE9PXM7YSsrKXtsZXQgbD1pW2FdO2lmKHR5cGVvZiBsPT0ibnVtYmVyIiYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobyE9PW51bGwmJm8+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxvKSx0PSExO2JyZWFrfW89bH1pZihyIT09dm9pZCAwJiZLdC5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PUt0LmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1LdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj10aGlzLmdldEludGVycG9sYXRpb24oKT09PWV1LHM9dC5sZW5ndGgtMSxvPTE7Zm9yKGxldCBhPTE7YTxzOysrYSl7bGV0IGw9ITEsYz10W2FdLHU9dFthKzFdO2lmKGMhPT11JiYoYSE9PTF8fGMhPT10WzBdKSlpZihyKWw9ITA7ZWxzZXtsZXQgaD1hKmksZj1oLWksZD1oK2k7Zm9yKGxldCBnPTA7ZyE9PWk7KytnKXtsZXQgeD1lW2grZ107aWYoeCE9PWVbZitnXXx8eCE9PWVbZCtnXSl7bD0hMDticmVha319fWlmKGwpe2lmKGEhPT1vKXt0W29dPXRbYV07bGV0IGg9YSppLGY9byppO2ZvcihsZXQgZD0wO2QhPT1pOysrZCllW2YrZF09ZVtoK2RdfSsrb319aWYocz4wKXt0W29dPXRbc107Zm9yKGxldCBhPXMqaSxsPW8qaSxjPTA7YyE9PWk7KytjKWVbbCtjXT1lW2ErY107KytvfXJldHVybiBvIT09dC5sZW5ndGg/KHRoaXMudGltZXM9S3QuYXJyYXlTbGljZSh0LDAsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZShlLDAsbyppKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1lKSx0aGlzfWNsb25lKCl7bGV0IHQ9S3QuYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLGU9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxpPXRoaXMuY29uc3RydWN0b3Iscj1uZXcgaSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtYZS5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj10bDt2YXIgdWk9Y2xhc3MgZXh0ZW5kcyBYZXt9O3VpLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIjt1aS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3VpLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1qYTt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgd2w9Y2xhc3MgZXh0ZW5kcyBYZXt9O3dsLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJjb2xvciI7dmFyIEtyPWNsYXNzIGV4dGVuZHMgWGV7fTtLci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ibnVtYmVyIjt2YXIgd2g9Y2xhc3MgZXh0ZW5kcyBwbntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IHM9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9KGktZSkvKHItZSksYz10KmE7Zm9yKGxldCB1PWMrYTtjIT09dTtjKz00KUVlLnNsZXJwRmxhdChzLDAsbyxjLWEsbyxjLGwpO3JldHVybiBzfX0sWGk9Y2xhc3MgZXh0ZW5kcyBYZXtJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyB3aCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fTtYaS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiI7WGkucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPXRsO1hpLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBoaT1jbGFzcyBleHRlbmRzIFhle307aGkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyI7aGkucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheTtoaS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249amE7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDA7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIFFyPWNsYXNzIGV4dGVuZHMgWGV7fTtRci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgTWw9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xLGkscj1RaCl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9aSx0aGlzLmR1cmF0aW9uPWUsdGhpcy5ibGVuZE1vZGU9cix0aGlzLnV1aWQ9dG4oKSx0aGlzLmR1cmF0aW9uPDAmJnRoaXMucmVzZXREdXJhdGlvbigpfXN0YXRpYyBwYXJzZSh0KXtsZXQgZT1bXSxpPXQudHJhY2tzLHI9MS8odC5mcHN8fDEpO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7byE9PWE7KytvKWUucHVzaChjVChpW29dKS5zY2FsZShyKSk7bGV0IHM9bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIHMudXVpZD10LnV1aWQsc31zdGF0aWMgdG9KU09OKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgcz0wLG89aS5sZW5ndGg7cyE9PW87KytzKWUucHVzaChYZS50b0pTT04oaVtzXSkpO3JldHVybiByfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsaSxyKXtsZXQgcz1lLmxlbmd0aCxvPVtdO2ZvcihsZXQgYT0wO2E8czthKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChhK3MtMSklcyxhLChhKzEpJXMpLGMucHVzaCgwLDEsMCk7bGV0IHU9S3QuZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPUt0LnNvcnRlZEFycmF5KGwsMSx1KSxjPUt0LnNvcnRlZEFycmF5KGMsMSx1KSwhciYmbFswXT09PTAmJihsLnB1c2gocyksYy5wdXNoKGNbMF0pKSxvLnB1c2gobmV3IEtyKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVthXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvaSkpfXJldHVybiBuZXcgdGhpcyh0LC0xLG8pfXN0YXRpYyBmaW5kQnlOYW1lKHQsZSl7bGV0IGk9dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IHI9dDtpPXIuZ2VvbWV0cnkmJnIuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8ci5hbmltYXRpb25zfWZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlmKGlbcl0ubmFtZT09PWUpcmV0dXJuIGlbcl07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQsZSxpKXtsZXQgcj17fSxzPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9dFthXSx1PWMubmFtZS5tYXRjaChzKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9cltoXTtmfHwocltoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBvPVtdO2ZvcihsZXQgYSBpbiByKW8ucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKGEsclthXSxlLGkpKTtyZXR1cm4gb31zdGF0aWMgcGFyc2VBbmltYXRpb24odCxlKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBpPWZ1bmN0aW9uKGgsZixkLGcseCl7aWYoZC5sZW5ndGghPT0wKXtsZXQgdj1bXSxtPVtdO0t0LmZsYXR0ZW5KU09OKGQsdixtLGcpLHYubGVuZ3RoIT09MCYmeC5wdXNoKG5ldyBoKGYsdixtKSl9fSxyPVtdLHM9dC5uYW1lfHwiZGVmYXVsdCIsbz10LmZwc3x8MzAsYT10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBkPXt9LGc7Zm9yKGc9MDtnPGYubGVuZ3RoO2crKylpZihmW2ddLm1vcnBoVGFyZ2V0cylmb3IobGV0IHg9MDt4PGZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDt4KyspZFtmW2ddLm1vcnBoVGFyZ2V0c1t4XV09LTE7Zm9yKGxldCB4IGluIGQpe2xldCB2PVtdLG09W107Zm9yKGxldCBwPTA7cCE9PWZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3Ape2xldCBiPWZbZ107di5wdXNoKGIudGltZSksbS5wdXNoKGIubW9ycGhUYXJnZXQ9PT14PzE6MCl9ci5wdXNoKG5ldyBLcigiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIreCsiXSIsdixtKSl9bD1kLmxlbmd0aCoob3x8MSl9ZWxzZXtsZXQgZD0iLmJvbmVzWyIrZVtoXS5uYW1lKyJdIjtpKFFyLGQrIi5wb3NpdGlvbiIsZiwicG9zIixyKSxpKFhpLGQrIi5xdWF0ZXJuaW9uIixmLCJyb3QiLHIpLGkoUXIsZCsiLnNjYWxlIixmLCJzY2wiLHIpfX1yZXR1cm4gci5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMocyxsLHIsYSl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLGU9MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLHMudGltZXNbcy50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGxUKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIEtyO2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gUXI7Y2FzZSJjb2xvciI6cmV0dXJuIHdsO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIFhpO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdWk7Y2FzZSJzdHJpbmciOnJldHVybiBoaX10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfWZ1bmN0aW9uIGNUKG4pe2lmKG4udHlwZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9bFQobi50eXBlKTtpZihuLnRpbWVzPT09dm9pZCAwKXtsZXQgZT1bXSxpPVtdO0t0LmZsYXR0ZW5KU09OKG4ua2V5cyxlLGksInZhbHVlIiksbi50aW1lcz1lLG4udmFsdWVzPWl9cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShuKTpuZXcgdChuLm5hbWUsbi50aW1lcyxuLnZhbHVlcyxuLmludGVycG9sYXRpb24pfXZhciBqcj17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24obix0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbbl09dCl9LGdldDpmdW5jdGlvbihuKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tuXX0scmVtb3ZlOmZ1bmN0aW9uKG4pe2RlbGV0ZSB0aGlzLmZpbGVzW25dfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxNaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI9dGhpcyxzPSExLG89MCxhPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9aSx0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXthKysscz09PSExJiZyLm9uU3RhcnQhPT12b2lkIDAmJnIub25TdGFydCh1LG8sYSkscz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe28rKyxyLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJnIub25Qcm9ncmVzcyh1LG8sYSksbz09PWEmJihzPSExLHIub25Mb2FkIT09dm9pZCAwJiZyLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7ci5vbkVycm9yIT09dm9pZCAwJiZyLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgZD1jW2hdLGc9Y1toKzFdO2lmKGQuZ2xvYmFsJiYoZC5sYXN0SW5kZXg9MCksZC50ZXN0KHUpKXJldHVybiBnfXJldHVybiBudWxsfX19LHVUPW5ldyBNaCxtbj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm1hbmFnZXI9dCE9PXZvaWQgMD90OnVULHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIscyl7aS5sb2FkKHQscixlLHMpfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LERuPXt9LGJoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz1qci5nZXQodCk7aWYocyE9PXZvaWQgMClyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShzKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCkscztpZihEblt0XSE9PXZvaWQgMCl7RG5bdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO3JldHVybn1Eblt0XT1bXSxEblt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7bGV0IG89bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSksYT10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2gobykudGhlbihjPT57aWYoYy5zdGF0dXM9PT0yMDB8fGMuc3RhdHVzPT09MCl7aWYoYy5zdGF0dXM9PT0wJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0idW5kZWZpbmVkInx8Yy5ib2R5LmdldFJlYWRlcj09PXZvaWQgMClyZXR1cm4gYztsZXQgdT1Eblt0XSxoPWMuYm9keS5nZXRSZWFkZXIoKSxmPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiksZD1mP3BhcnNlSW50KGYpOjAsZz1kIT09MCx4PTAsdj1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KG0pe3AoKTtmdW5jdGlvbiBwKCl7aC5yZWFkKCkudGhlbigoe2RvbmU6Yix2YWx1ZTpffSk9PntpZihiKW0uY2xvc2UoKTtlbHNle3grPV8uYnl0ZUxlbmd0aDtsZXQgUz1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOmcsbG9hZGVkOngsdG90YWw6ZH0pO2ZvcihsZXQgTD0wLEE9dS5sZW5ndGg7TDxBO0wrKyl7bGV0IEg9dVtMXTtILm9uUHJvZ3Jlc3MmJkgub25Qcm9ncmVzcyhTKX1tLmVucXVldWUoXykscCgpfX0pfX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKHYpfWVsc2UgdGhyb3cgRXJyb3IoYGZldGNoIGZvciAiJHtjLnVybH0iIHJlc3BvbmRlZCB3aXRoICR7Yy5zdGF0dXN9OiAke2Muc3RhdHVzVGV4dH1gKX0pLnRoZW4oYz0+e3N3aXRjaChsKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYy5hcnJheUJ1ZmZlcigpO2Nhc2UiYmxvYiI6cmV0dXJuIGMuYmxvYigpO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBjLnRleHQoKS50aGVuKHU9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodSxhKSk7Y2FzZSJqc29uIjpyZXR1cm4gYy5qc29uKCk7ZGVmYXVsdDppZihhPT09dm9pZCAwKXJldHVybiBjLnRleHQoKTt7bGV0IGg9L2NoYXJzZXQ9Ij8oW147IlxzXSopIj8vaS5leGVjKGEpLGY9aCYmaFsxXT9oWzFdLnRvTG93ZXJDYXNlKCk6dm9pZCAwLGQ9bmV3IFRleHREZWNvZGVyKGYpO3JldHVybiBjLmFycmF5QnVmZmVyKCkudGhlbihnPT5kLmRlY29kZShnKSl9fX0pLnRoZW4oYz0+e2pyLmFkZCh0LGMpO2xldCB1PURuW3RdO2RlbGV0ZSBEblt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBkPXVbaF07ZC5vbkxvYWQmJmQub25Mb2FkKGMpfX0pLmNhdGNoKGM9PntsZXQgdT1Eblt0XTtpZih1PT09dm9pZCAwKXRocm93IHRoaXMubWFuYWdlci5pdGVtRXJyb3IodCksYztkZWxldGUgRG5bdF07Zm9yKGxldCBoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXtsZXQgZD11W2hdO2Qub25FcnJvciYmZC5vbkVycm9yKGMpfXRoaXMubWFuYWdlci5pdGVtRXJyb3IodCl9KS5maW5hbGx5KCgpPT57dGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9KSx0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfXNldFJlc3BvbnNlVHlwZSh0KXtyZXR1cm4gdGhpcy5yZXNwb25zZVR5cGU9dCx0aGlzfXNldE1pbWVUeXBlKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319O3ZhciBibD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7dGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9cm8oImltZyIpO2Z1bmN0aW9uIGwoKXt1KCksanIuYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxzLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKGgpe3UoKSxyJiZyKGgpLHMubWFuYWdlci5pdGVtRXJyb3IodCkscy5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gdSgpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksdC5zdWJzdHIoMCw1KSE9PSJkYXRhOiImJnRoaXMuY3Jvc3NPcmlnaW4hPT12b2lkIDAmJihhLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLHMubWFuYWdlci5pdGVtU3RhcnQodCksYS5zcmM9dCxhfX0sU2g9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBXcixvPW5ldyBibCh0aGlzLm1hbmFnZXIpO28uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksby5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IGE9MDtmdW5jdGlvbiBsKGMpe28ubG9hZCh0W2NdLGZ1bmN0aW9uKHUpe3MuaW1hZ2VzW2NdPXUsYSsrLGE9PT02JiYocy5uZWVkc1VwZGF0ZT0hMCxlJiZlKHMpKX0sdm9pZCAwLHIpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIHN9fTt2YXIgRWg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBhZSxvPW5ldyBibCh0aGlzLm1hbmFnZXIpO3JldHVybiBvLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLG8uc2V0UGF0aCh0aGlzLnBhdGgpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3MuaW1hZ2U9YSxzLm5lZWRzVXBkYXRlPSEwLGUhPT12b2lkIDAmJmUocyl9LGksciksc319LFllPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdGhpcy5ncm91bmRDb2xvciE9PXZvaWQgMCYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHRoaXMuZGlzdGFuY2UhPT12b2lkIDAmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx0aGlzLmFuZ2xlIT09dm9pZCAwJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdGhpcy5kZWNheSE9PXZvaWQgMCYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHRoaXMucGVudW1icmEhPT12b2lkIDAmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx0aGlzLnNoYWRvdyE9PXZvaWQgMCYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O1llLnByb3RvdHlwZS5pc0xpZ2h0PSEwO3ZhciBUaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGkpLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMuZ3JvdW5kQ29sb3I9bmV3IGZ0KGUpfWNvcHkodCl7cmV0dXJuIFllLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319O1RoLnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodD0hMDt2YXIgbjA9bmV3IHd0LGkwPW5ldyBULHIwPW5ldyBULFNvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLmJsdXJTYW1wbGVzPTgsdGhpcy5tYXBTaXplPW5ldyBLKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IHd0LHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IHFyLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSygxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBXdCgwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4O2kwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxlLnBvc2l0aW9uLmNvcHkoaTApLHIwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQocjApLGUudXBkYXRlTWF0cml4V29ybGQoKSxuMC5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuMCksaS5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksaS5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLGkubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfWdldFZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19Z2V0RnJhbWVFeHRlbnRzKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c31kaXNwb3NlKCl7dGhpcy5tYXAmJnRoaXMubWFwLmRpc3Bvc2UoKSx0aGlzLm1hcFBhc3MmJnRoaXMubWFwUGFzcy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gdGhpcy5jYW1lcmE9dC5jYW1lcmEuY2xvbmUoKSx0aGlzLmJpYXM9dC5iaWFzLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMubWFwU2l6ZS5jb3B5KHQubWFwU2l6ZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIHRoaXMuYmlhcyE9PTAmJih0LmJpYXM9dGhpcy5iaWFzKSx0aGlzLm5vcm1hbEJpYXMhPT0wJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksdGhpcy5yYWRpdXMhPT0xJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCh0aGlzLm1hcFNpemUueCE9PTUxMnx8dGhpcy5tYXBTaXplLnkhPT01MTIpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LFNsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT1WdSoyKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LHM9dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxzIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPXMsZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtTbC5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITA7dmFyIEFoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlLGk9MCxyPU1hdGguUEkvMyxzPTAsbz0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU3BvdExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBrdCx0aGlzLmRpc3RhbmNlPWksdGhpcy5hbmdsZT1yLHRoaXMucGVudW1icmE9cyx0aGlzLmRlY2F5PW8sdGhpcy5zaGFkb3c9bmV3IFNsfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10L01hdGguUEl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmFuZ2xlPXQuYW5nbGUsdGhpcy5wZW51bWJyYT10LnBlbnVtYnJhLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0FoLnByb3RvdHlwZS5pc1Nwb3RMaWdodD0hMDt2YXIgczA9bmV3IHd0LFpzPW5ldyBULE51PW5ldyBULEVsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEsoNCwyKSx0aGlzLl92aWV3cG9ydENvdW50PTYsdGhpcy5fdmlld3BvcnRzPVtuZXcgV3QoMiwxLDEsMSksbmV3IFd0KDAsMSwxLDEpLG5ldyBXdCgzLDEsMSwxKSxuZXcgV3QoMSwxLDEsMSksbmV3IFd0KDMsMCwxLDEpLG5ldyBXdCgxLDAsMSwxKV0sdGhpcy5fY3ViZURpcmVjdGlvbnM9W25ldyBUKDEsMCwwKSxuZXcgVCgtMSwwLDApLG5ldyBUKDAsMCwxKSxuZXcgVCgwLDAsLTEpLG5ldyBUKDAsMSwwKSxuZXcgVCgwLC0xLDApXSx0aGlzLl9jdWJlVXBzPVtuZXcgVCgwLDEsMCksbmV3IFQoMCwxLDApLG5ldyBUKDAsMSwwKSxuZXcgVCgwLDEsMCksbmV3IFQoMCwwLDEpLG5ldyBUKDAsMCwtMSldfXVwZGF0ZU1hdHJpY2VzKHQsZT0wKXtsZXQgaT10aGlzLmNhbWVyYSxyPXRoaXMubWF0cml4LHM9dC5kaXN0YW5jZXx8aS5mYXI7cyE9PWkuZmFyJiYoaS5mYXI9cyxpLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksWnMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGkucG9zaXRpb24uY29weShacyksTnUuY29weShpLnBvc2l0aW9uKSxOdS5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbZV0pLGkudXAuY29weSh0aGlzLl9jdWJlVXBzW2VdKSxpLmxvb2tBdChOdSksaS51cGRhdGVNYXRyaXhXb3JsZCgpLHIubWFrZVRyYW5zbGF0aW9uKC1acy54LC1acy55LC1acy56KSxzMC5tdWx0aXBseU1hdHJpY2VzKGkucHJvamVjdGlvbk1hdHJpeCxpLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzMCl9fTtFbC5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBDaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpPTAscj0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1pLHRoaXMuZGVjYXk9cix0aGlzLnNoYWRvdz1uZXcgRWx9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtDaC5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBUbD1jbGFzcyBleHRlbmRzIFNve2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFZpKC01LDUsNSwtNSwuNSw1MDApKX19O1RsLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIFJoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KGt0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcga3QsdGhpcy5zaGFkb3c9bmV3IFRsfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O1JoLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIExoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0xoLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgUGg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUsaT0xMCxyPTEwKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1pLHRoaXMuaGVpZ2h0PXJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsZS5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9fTtQaC5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBBbD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgVCl9c2V0KHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weSh0W2VdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQsZSl7bGV0IGk9dC54LHI9dC55LHM9dC56LG89dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShvWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxlLmFkZFNjYWxlZFZlY3RvcihvWzFdLC40ODg2MDMqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwuNDg4NjAzKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bM10sLjQ4ODYwMyppKSxlLmFkZFNjYWxlZFZlY3RvcihvWzRdLDEuMDkyNTQ4KihpKnIpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDEuMDkyNTQ4KihyKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzZdLC4zMTUzOTIqKDMqcypzLTEpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzddLDEuMDkyNTQ4KihpKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC41NDYyNzQqKGkqaS1yKnIpKSxlfWdldElycmFkaWFuY2VBdCh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiBlLmNvcHkob1swXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksZS5hZGRTY2FsZWRWZWN0b3Iob1sxXSwyKi41MTE2NjQqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwyKi41MTE2NjQqcyksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwyKi41MTE2NjQqaSksZS5hZGRTY2FsZWRWZWN0b3Iob1s0XSwyKi40MjkwNDMqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDIqLjQyOTA0MypyKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjc0MzEyNSpzKnMtLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Iob1s3XSwyKi40MjkwNDMqaSpzKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC40MjkwNDMqKGkqaS1yKnIpKSxlfWFkZCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmFkZCh0LmNvZWZmaWNpZW50c1tlXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmxlcnAodC5jb2VmZmljaWVudHNbaV0sZSk7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW2VdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tlXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS5mcm9tQXJyYXkodCxlK3IqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLnRvQXJyYXkodCxlK3IqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxlKXtsZXQgaT10Lngscj10Lnkscz10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypyLGVbMl09LjQ4ODYwMypzLGVbM109LjQ4ODYwMyppLGVbNF09MS4wOTI1NDgqaSpyLGVbNV09MS4wOTI1NDgqcipzLGVbNl09LjMxNTM5MiooMypzKnMtMSksZVs3XT0xLjA5MjU0OCppKnMsZVs4XT0uNTQ2Mjc0KihpKmktcipyKX19O0FsLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIEVvPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodD1uZXcgQWwsZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19O0VvLnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIERoPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoKGkpe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBlPT09LTE/Ii4vIjp0LnN1YnN0cigwLGUrMSl9c3RhdGljIHJlc29sdmVVUkwodCxlKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KGUpJiYvXlwvLy50ZXN0KHQpJiYoZT1lLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OmUrdCl9fSxJaD1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtJaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgTmg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9e307YS5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKHMub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXtqci5hZGQodCxsKSxlJiZlKGwpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7ciYmcihsKSxzLm1hbmFnZXIuaXRlbUVycm9yKHQpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkscy5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05oLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBKYSxoVD17Z2V0Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiBKYT09PXZvaWQgMCYmKEphPW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSksSmF9LHNldENvbnRleHQ6ZnVuY3Rpb24obil7SmE9bn19LEZoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgcz10aGlzLG89bmV3IGJoKHRoaXMubWFuYWdlcik7by5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksby5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3RyeXtsZXQgbD1hLnNsaWNlKDApO2hULmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtlKHUpfSl9Y2F0Y2gobCl7cj9yKGwpOmNvbnNvbGUuZXJyb3IobCkscy5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LGkscil9fSx6aD1jbGFzcyBleHRlbmRzIEVve2NvbnN0cnVjdG9yKHQsZSxpPTEpe3N1cGVyKHZvaWQgMCxpKTtsZXQgcj1uZXcgZnQoKS5zZXQodCkscz1uZXcgZnQoKS5zZXQoZSksbz1uZXcgVChyLnIsci5nLHIuYiksYT1uZXcgVChzLnIscy5nLHMuYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkobykuYWRkKGEpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkobykuc3ViKGEpLm11bHRpcGx5U2NhbGFyKGMpfX07emgucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITA7dmFyIFVoPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKHZvaWQgMCxlKTtsZXQgaT1uZXcgZnQoKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KGkucixpLmcsaS5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fTtVaC5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgQmg9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKHRoaXMuaXNQbGF5aW5nPT09ITApe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtyZXR1cm59aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2xldCBlPXRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtyZXR1cm4gZS5idWZmZXI9dGhpcy5idWZmZXIsZS5sb29wPXRoaXMubG9vcCxlLmxvb3BTdGFydD10aGlzLmxvb3BTdGFydCxlLmxvb3BFbmQ9dGhpcy5sb29wRW5kLGUub25lbmRlZD10aGlzLm9uRW5kZWQuYmluZCh0aGlzKSxlLnN0YXJ0KHRoaXMuX3N0YXJ0ZWRBdCx0aGlzLl9wcm9ncmVzcyt0aGlzLm9mZnNldCx0aGlzLmR1cmF0aW9uKSx0aGlzLmlzUGxheWluZz0hMCx0aGlzLnNvdXJjZT1lLHRoaXMuc2V0RGV0dW5lKHRoaXMuZGV0dW5lKSx0aGlzLnNldFBsYXliYWNrUmF0ZSh0aGlzLnBsYXliYWNrUmF0ZSksdGhpcy5jb25uZWN0KCl9cGF1c2UoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLHRoaXMubG9vcD09PSEwJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpc31zdG9wKCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSx0aGlzLl9jb25uZWN0ZWQ9PT0hMD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHRoaXMuc291cmNlLmRldHVuZSE9PXZvaWQgMClyZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmdGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSh0aGlzLmRldHVuZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfWdldERldHVuZSgpe3JldHVybiB0aGlzLmRldHVuZX1nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLnNldEZpbHRlcnModD9bdF06W10pfXNldFBsYXliYWNrUmF0ZSh0KXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCx0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITE/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksITEpOnRoaXMubG9vcH1zZXRMb29wKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmxvb3A9dCx0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXN9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX07dmFyIE9oPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1lLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLGU9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdCs9ZVtpXTtyZXR1cm4gdC9lLmxlbmd0aH19LGtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pO2xldCByLHMsbztzd2l0Y2goZSl7Y2FzZSJxdWF0ZXJuaW9uIjpyPXRoaXMuX3NsZXJwLHM9dGhpcy5fc2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjpyPXRoaXMuX3NlbGVjdCxzPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkoaSo1KTticmVhaztkZWZhdWx0OnI9dGhpcy5fbGVycCxzPXRoaXMuX2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo1KX10aGlzLl9taXhCdWZmZXJSZWdpb249cix0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1zLHRoaXMuX3NldElkZW50aXR5PW8sdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LGUpe2xldCBpPXRoaXMuYnVmZmVyLHI9dGhpcy52YWx1ZVNpemUscz10KnIrcixvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihvPT09MCl7Zm9yKGxldCBhPTA7YSE9PXI7KythKWlbcythXT1pW2FdO289ZX1lbHNle28rPWU7bGV0IGE9ZS9vO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihpLHMsMCxhLHIpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1vfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxyLDAsdCxpKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgZT10aGlzLnZhbHVlU2l6ZSxpPXRoaXMuYnVmZmVyLHI9dCplK2Uscz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsbz10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxhPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHM8MSl7bGV0IGw9ZSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKGkscixsLDEtcyxlKX1vPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe2Euc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcsZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShlLHIpO2ZvcihsZXQgcz1pLG89cjtzIT09bzsrK3MpZVtzXT1lW3IrcyVpXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixzKXtpZihyPj0uNSlmb3IobGV0IG89MDtvIT09czsrK28pdFtlK29dPXRbaStvXX1fc2xlcnAodCxlLGkscil7RWUuc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIscyl7bGV0IG89dGhpcy5fd29ya0luZGV4KnM7RWUubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxvLHQsZSx0LGkpLEVlLnNsZXJwRmxhdCh0LGUsdCxlLHQsbyxyKX1fbGVycCh0LGUsaSxyLHMpe2xldCBvPTEtcjtmb3IobGV0IGE9MDthIT09czsrK2Epe2xldCBsPWUrYTt0W2xdPXRbbF0qbyt0W2krYV0qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLHMpe2ZvcihsZXQgbz0wO28hPT1zOysrbyl7bGV0IGE9ZStvO3RbYV09dFthXSt0W2krb10qcn19fSxlZj0iXFxbXFxdXFwuOlxcLyIsZlQ9bmV3IFJlZ0V4cCgiWyIrZWYrIl0iLCJnIiksbmY9IlteIitlZisiXSIsZFQ9IlteIitlZi5yZXBsYWNlKCJcXC4iLCIiKSsiXSIscFQ9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixuZiksbVQ9LyhXQ09EKyk/Ly5zb3VyY2UucmVwbGFjZSgiV0NPRCIsZFQpLGdUPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLG5mKSx4VD0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsbmYpLHlUPW5ldyBSZWdFeHAoIl4iK3BUK21UK2dUK3hUKyIkIiksdlQ9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0sSGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCByPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpO3RoaXMuX3RhcmdldEdyb3VwPXQsdGhpcy5fYmluZGluZ3M9dC5zdWJzY3JpYmVfKGUscil9Z2V0VmFsdWUodCxlKXt0aGlzLmJpbmQoKTtsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scj10aGlzLl9iaW5kaW5nc1tpXTtyIT09dm9pZCAwJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxOdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wYXRoPWUsdGhpcy5wYXJzZWRQYXRoPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpLHRoaXMubm9kZT1OdC5maW5kTm9kZSh0LHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fHQsdGhpcy5yb290Tm9kZT10LHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIHQmJnQuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgTnQuQ29tcG9zaXRlKHQsZSxpKTpuZXcgTnQodCxlLGkpfXN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKGZULCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUodCl7bGV0IGU9eVQuZXhlYyh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgaT17bm9kZU5hbWU6ZVsyXSxvYmplY3ROYW1lOmVbM10sb2JqZWN0SW5kZXg6ZVs0XSxwcm9wZXJ0eU5hbWU6ZVs1XSxwcm9wZXJ0eUluZGV4OmVbNl19LHI9aS5ub2RlTmFtZSYmaS5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHIhPT12b2lkIDAmJnIhPT0tMSl7bGV0IHM9aS5ub2RlTmFtZS5zdWJzdHJpbmcocisxKTt2VC5pbmRleE9mKHMpIT09LTEmJihpLm5vZGVOYW1lPWkubm9kZU5hbWUuc3Vic3RyaW5nKDAsciksaS5vYmplY3ROYW1lPXMpfWlmKGkucHJvcGVydHlOYW1lPT09bnVsbHx8aS5wcm9wZXJ0eU5hbWUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrdCk7cmV0dXJuIGl9c3RhdGljIGZpbmROb2RlKHQsZSl7aWYoIWV8fGU9PT0iInx8ZT09PSIuInx8ZT09PS0xfHxlPT09dC5uYW1lfHxlPT09dC51dWlkKXJldHVybiB0O2lmKHQuc2tlbGV0b24pe2xldCBpPXQuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShlKTtpZihpIT09dm9pZCAwKXJldHVybiBpfWlmKHQuY2hpbGRyZW4pe2xldCBpPWZ1bmN0aW9uKHMpe2ZvcihsZXQgbz0wO288cy5sZW5ndGg7bysrKXtsZXQgYT1zW29dO2lmKGEubmFtZT09PWV8fGEudXVpZD09PWUpcmV0dXJuIGE7bGV0IGw9aShhLmNoaWxkcmVuKTtpZihsKXJldHVybiBsfXJldHVybiBudWxsfSxyPWkodC5jaGlsZHJlbik7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fZ2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X3NldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9nZXRWYWx1ZV9kaXJlY3QodCxlKXt0W2VdPXRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXX1fZ2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpdFtlKytdPWlbcl19X2dldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RbZV09dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF19X2dldFZhbHVlX3RvQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheSh0LGUpfV9zZXRWYWx1ZV9kaXJlY3QodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXX1fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXT10W2UrK119X3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV19X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSl9X3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSksdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fZ2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuZ2V0VmFsdWUodCxlKX1fc2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5ub2RlLGU9dGhpcy5wYXJzZWRQYXRoLGk9ZS5vYmplY3ROYW1lLHI9ZS5wcm9wZXJ0eU5hbWUscz1lLnByb3BlcnR5SW5kZXg7aWYodHx8KHQ9TnQuZmluZE5vZGUodGhpcy5yb290Tm9kZSxlLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9dCksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgbm9kZSBmb3IgdHJhY2s6ICIrdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKTtyZXR1cm59aWYoaSl7bGV0IGM9ZS5vYmplY3RJbmRleDtzd2l0Y2goaSl7Y2FzZSJtYXRlcmlhbHMiOmlmKCF0Lm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO3JldHVybn1pZighdC5tYXRlcmlhbC5tYXRlcmlhbHMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTtyZXR1cm59dD10Lm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighdC5za2VsZXRvbil7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uIix0aGlzKTtyZXR1cm59dD10LnNrZWxldG9uLmJvbmVzO2ZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKWlmKHRbdV0ubmFtZT09PWMpe2M9dTticmVha31icmVhaztkZWZhdWx0OmlmKHRbaV09PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtyZXR1cm59dD10W2ldfWlmKGMhPT12b2lkIDApe2lmKHRbY109PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4iLHRoaXMsdCk7cmV0dXJufXQ9dFtjXX19bGV0IG89dFtyXTtpZihvPT09dm9pZCAwKXtsZXQgYz1lLm5vZGVOYW1lO2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrYysiLiIrcisiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIix0KTtyZXR1cm59bGV0IGE9dGhpcy5WZXJzaW9uaW5nLk5vbmU7dGhpcy50YXJnZXRPYmplY3Q9dCx0Lm5lZWRzVXBkYXRlIT09dm9pZCAwP2E9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlOnQubWF0cml4V29ybGROZWVkc1VwZGF0ZSE9PXZvaWQgMCYmKGE9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUpO2xldCBsPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHMhPT12b2lkIDApe2lmKHI9PT0ibW9ycGhUYXJnZXRJbmZsdWVuY2VzIil7aWYoIXQuZ2VvbWV0cnkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7cmV0dXJufWlmKHQuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7aWYoIXQuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTtyZXR1cm59dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10hPT12b2lkIDAmJihzPXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdKX1lbHNle2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIix0aGlzKTtyZXR1cm59fWw9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8sdGhpcy5wcm9wZXJ0eUluZGV4PXN9ZWxzZSBvLmZyb21BcnJheSE9PXZvaWQgMCYmby50b0FycmF5IT09dm9pZCAwPyhsPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8pOkFycmF5LmlzQXJyYXkobyk/KGw9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9byk6dGhpcy5wcm9wZXJ0eU5hbWU9cjt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtsXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbbF1bYV19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19O050LkNvbXBvc2l0ZT1IaDtOdC5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M307TnQucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn07TnQucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W050LnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LE50LnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksTnQucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsTnQucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XTtOdC5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW050LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV07dmFyIFZoPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy51dWlkPXRuKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7bGV0IHQ9e307dGhpcy5faW5kaWNlc0J5VVVJRD10O2ZvcihsZXQgaT0wLHI9YXJndW1lbnRzLmxlbmd0aDtpIT09cjsrK2kpdFthcmd1bWVudHNbaV0udXVpZF09aTt0aGlzLl9wYXRocz1bXSx0aGlzLl9wYXJzZWRQYXRocz1bXSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307bGV0IGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fWFkZCgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fcGF0aHMscj10aGlzLl9wYXJzZWRQYXRocyxzPXRoaXMuX2JpbmRpbmdzLG89cy5sZW5ndGgsYSxsPXQubGVuZ3RoLGM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCB1PTAsaD1hcmd1bWVudHMubGVuZ3RoO3UhPT1oOysrdSl7bGV0IGY9YXJndW1lbnRzW3VdLGQ9Zi51dWlkLGc9ZVtkXTtpZihnPT09dm9pZCAwKXtnPWwrKyxlW2RdPWcsdC5wdXNoKGYpO2ZvcihsZXQgeD0wLHY9bzt4IT09djsrK3gpc1t4XS5wdXNoKG5ldyBOdChmLGlbeF0sclt4XSkpfWVsc2UgaWYoZzxjKXthPXRbZ107bGV0IHg9LS1jLHY9dFt4XTtlW3YudXVpZF09Zyx0W2ddPXYsZVtkXT14LHRbeF09Zjtmb3IobGV0IG09MCxwPW87bSE9PXA7KyttKXtsZXQgYj1zW21dLF89Ylt4XSxTPWJbZ107YltnXT1fLFM9PT12b2lkIDAmJihTPW5ldyBOdChmLGlbbV0sclttXSkpLGJbeF09U319ZWxzZSB0W2ddIT09YSYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1jfXJlbW92ZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgbz0wLGE9YXJndW1lbnRzLmxlbmd0aDtvIT09YTsrK28pe2xldCBsPWFyZ3VtZW50c1tvXSxjPWwudXVpZCx1PWVbY107aWYodSE9PXZvaWQgMCYmdT49cyl7bGV0IGg9cysrLGY9dFtoXTtlW2YudXVpZF09dSx0W3VdPWYsZVtjXT1oLHRbaF09bDtmb3IobGV0IGQ9MCxnPXI7ZCE9PWc7KytkKXtsZXQgeD1pW2RdLHY9eFtoXSxtPXhbdV07eFt1XT12LHhbaF09bX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9dW5jYWNoZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfLG89dC5sZW5ndGg7Zm9yKGxldCBhPTAsbD1hcmd1bWVudHMubGVuZ3RoO2EhPT1sOysrYSl7bGV0IGM9YXJndW1lbnRzW2FdLHU9Yy51dWlkLGg9ZVt1XTtpZihoIT09dm9pZCAwKWlmKGRlbGV0ZSBlW3VdLGg8cyl7bGV0IGY9LS1zLGQ9dFtmXSxnPS0tbyx4PXRbZ107ZVtkLnV1aWRdPWgsdFtoXT1kLGVbeC51dWlkXT1mLHRbZl09eCx0LnBvcCgpO2ZvcihsZXQgdj0wLG09cjt2IT09bTsrK3Ype2xldCBwPWlbdl0sYj1wW2ZdLF89cFtnXTtwW2hdPWIscFtmXT1fLHAucG9wKCl9fWVsc2V7bGV0IGY9LS1vLGQ9dFtmXTtmPjAmJihlW2QudXVpZF09aCksdFtoXT1kLHQucG9wKCk7Zm9yKGxldCBnPTAseD1yO2chPT14OysrZyl7bGV0IHY9aVtnXTt2W2hdPXZbZl0sdi5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9c3Vic2NyaWJlXyh0LGUpe2xldCBpPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxyPWlbdF0scz10aGlzLl9iaW5kaW5ncztpZihyIT09dm9pZCAwKXJldHVybiBzW3JdO2xldCBvPXRoaXMuX3BhdGhzLGE9dGhpcy5fcGFyc2VkUGF0aHMsbD10aGlzLl9vYmplY3RzLGM9bC5sZW5ndGgsdT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPW5ldyBBcnJheShjKTtyPXMubGVuZ3RoLGlbdF09cixvLnB1c2godCksYS5wdXNoKGUpLHMucHVzaChoKTtmb3IobGV0IGY9dSxkPWwubGVuZ3RoO2YhPT1kOysrZil7bGV0IGc9bFtmXTtoW2ZdPW5ldyBOdChnLHQsZSl9cmV0dXJuIGh9dW5zdWJzY3JpYmVfKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxpPWVbdF07aWYoaSE9PXZvaWQgMCl7bGV0IHI9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxvPXRoaXMuX2JpbmRpbmdzLGE9by5sZW5ndGgtMSxsPW9bYV0sYz10W2FdO2VbY109aSxvW2ldPWwsby5wb3AoKSxzW2ldPXNbYV0scy5wb3AoKSxyW2ldPXJbYV0sci5wb3AoKX19fTtWaC5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cD0hMDt2YXIgR2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBzPWUudHJhY2tzLG89cy5sZW5ndGgsYT1uZXcgQXJyYXkobyksbD17ZW5kaW5nU3RhcnQ6TnIsZW5kaW5nRW5kOk5yfTtmb3IobGV0IGM9MDtjIT09bzsrK2Mpe2xldCB1PXNbY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7YVtjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPWEsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkobyksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPVp3LHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiZ0aGlzLnRpbWVTY2FsZSE9PTAmJnRoaXMuX3N0YXJ0VGltZT09PW51bGwmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxpKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksaSl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixzPXQuX2NsaXAuZHVyYXRpb24sbz1zL3IsYT1yL3M7dC53YXJwKDEsbyxlKSx0aGlzLndhcnAoYSwxLGUpfXJldHVybiB0aGlzfWNyb3NzRmFkZVRvKHQsZSxpKXtyZXR1cm4gdC5jcm9zc0ZhZGVGcm9tKHRoaXMsZSxpKX1zdG9wRmFkaW5nKCl7bGV0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixzPXIudGltZSxvPXRoaXMudGltZVNjYWxlLGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7YT09PW51bGwmJihhPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1hKTtsZXQgbD1hLnBhcmFtZXRlclBvc2l0aW9ucyxjPWEuc2FtcGxlVmFsdWVzO3JldHVybiBsWzBdPXMsbFsxXT1zK2ksY1swXT10L28sY1sxXT1lL28sdGhpc31zdG9wV2FycGluZygpe2xldCB0PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfWdldE1peGVyKCl7cmV0dXJuIHRoaXMuX21peGVyfWdldENsaXAoKXtyZXR1cm4gdGhpcy5fY2xpcH1nZXRSb290KCl7cmV0dXJuIHRoaXMuX2xvY2FsUm9vdHx8dGhpcy5fbWl4ZXIuX3Jvb3R9X3VwZGF0ZSh0LGUsaSxyKXtpZighdGhpcy5lbmFibGVkKXt0aGlzLl91cGRhdGVXZWlnaHQodCk7cmV0dXJufWxldCBzPXRoaXMuX3N0YXJ0VGltZTtpZihzIT09bnVsbCl7bGV0IGw9KHQtcykqaTtpZihsPDB8fGk9PT0wKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPWkqbH1lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7bGV0IG89dGhpcy5fdXBkYXRlVGltZShlKSxhPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihhPjApe2xldCBsPXRoaXMuX2ludGVycG9sYW50cyxjPXRoaXMuX3Byb3BlcnR5QmluZGluZ3M7c3dpdGNoKHRoaXMuYmxlbmRNb2RlKXtjYXNlIGQwOmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUoYSk7YnJlYWs7Y2FzZSBRaDpkZWZhdWx0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlKHIsYSl9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCBlPTA7aWYodGhpcy5lbmFibGVkKXtlPXRoaXMud2VpZ2h0O2xldCBpPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKGkhPT1udWxsKXtsZXQgcj1pLmV2YWx1YXRlKHQpWzBdO2UqPXIsdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLHI9PT0wJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9ZSxlfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7bGV0IGk9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aSE9PW51bGwmJihlKj1pLmV2YWx1YXRlKHQpWzBdLHQ+aS5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksZT09PTA/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSkpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZSxlfV91cGRhdGVUaW1lKHQpe2xldCBlPXRoaXMuX2NsaXAuZHVyYXRpb24saT10aGlzLmxvb3Ascj10aGlzLnRpbWUrdCxzPXRoaXMuX2xvb3BDb3VudCxvPWk9PT1KdztpZih0PT09MClyZXR1cm4gcz09PS0xP3I6byYmKHMmMSk9PT0xP2UtcjpyO2lmKGk9PT1Zdyl7cz09PS0xJiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpO3Q6e2lmKHI+PWUpcj1lO2Vsc2UgaWYocjwwKXI9MDtlbHNle3RoaXMudGltZT1yO2JyZWFrIHR9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKHM9PT0tMSYmKHQ+PTA/KHM9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLHRoaXMucmVwZXRpdGlvbnM9PT0wLG8pKTp0aGlzLl9zZXRFbmRpbmdzKHRoaXMucmVwZXRpdGlvbnM9PT0wLCEwLG8pKSxyPj1lfHxyPDApe2xldCBhPU1hdGguZmxvb3Ioci9lKTtyLT1lKmEscys9TWF0aC5hYnMoYSk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1zO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKGw9PT0xKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLG8pfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxvKTt0aGlzLl9sb29wQ291bnQ9cyx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6YX0pfX1lbHNlIHRoaXMudGltZT1yO2lmKG8mJihzJjEpPT09MSlyZXR1cm4gZS1yfXJldHVybiByfV9zZXRFbmRpbmdzKHQsZSxpKXtsZXQgcj10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2k/KHIuZW5kaW5nU3RhcnQ9RnIsci5lbmRpbmdFbmQ9RnIpOih0P3IuZW5kaW5nU3RhcnQ9dGhpcy56ZXJvU2xvcGVBdFN0YXJ0P0ZyOk5yOnIuZW5kaW5nU3RhcnQ9ZWwsZT9yLmVuZGluZ0VuZD10aGlzLnplcm9TbG9wZUF0RW5kP0ZyOk5yOnIuZW5kaW5nRW5kPWVsKX1fc2NoZWR1bGVGYWRpbmcodCxlLGkpe2xldCByPXRoaXMuX21peGVyLHM9ci50aW1lLG89dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bz09PW51bGwmJihvPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1vKTtsZXQgYT1vLnBhcmFtZXRlclBvc2l0aW9ucyxsPW8uc2FtcGxlVmFsdWVzO3JldHVybiBhWzBdPXMsbFswXT1lLGFbMV09cyt0LGxbMV09aSx0aGlzfX0sV2g9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3Jvb3Q9dCx0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpLHRoaXMuX2FjY3VJbmRleD0wLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTF9X2JpbmRBY3Rpb24odCxlKXtsZXQgaT10Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qscj10Ll9jbGlwLnRyYWNrcyxzPXIubGVuZ3RoLG89dC5fcHJvcGVydHlCaW5kaW5ncyxhPXQuX2ludGVycG9sYW50cyxsPWkudXVpZCxjPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSx1PWNbbF07dT09PXZvaWQgMCYmKHU9e30sY1tsXT11KTtmb3IobGV0IGg9MDtoIT09czsrK2gpe2xldCBmPXJbaF0sZD1mLm5hbWUsZz11W2RdO2lmKGchPT12b2lkIDApKytnLnJlZmVyZW5jZUNvdW50LG9baF09ZztlbHNle2lmKGc9b1toXSxnIT09dm9pZCAwKXtnLl9jYWNoZUluZGV4PT09bnVsbCYmKCsrZy5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZyxsLGQpKTtjb250aW51ZX1sZXQgeD1lJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW2hdLmJpbmRpbmcucGFyc2VkUGF0aDtnPW5ldyBraChOdC5jcmVhdGUoaSxkLHgpLGYuVmFsdWVUeXBlTmFtZSxmLmdldFZhbHVlU2l6ZSgpKSwrK2cucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGcsbCxkKSxvW2hdPWd9YVtoXS5yZXN1bHRCdWZmZXI9Zy5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKHQuX2NhY2hlSW5kZXg9PT1udWxsKXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQscyYmcy5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldO3MudXNlQ291bnQrKz09PTAmJih0aGlzLl9sZW5kQmluZGluZyhzKSxzLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fV9kZWFjdGl2YXRlQWN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldOy0tcy51c2VDb3VudD09PTAmJihzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKHMpKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19X2luaXRNZW1vcnlNYW5hZ2VyKCl7dGhpcy5fYWN0aW9ucz1bXSx0aGlzLl9uQWN0aXZlQWN0aW9ucz0wLHRoaXMuX2FjdGlvbnNCeUNsaXA9e30sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTAsdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9LHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W10sdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDtsZXQgdD10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9iaW5kaW5ncy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQmluZGluZ3N9fSxjb250cm9sSW50ZXJwb2xhbnRzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fY29udHJvbEludGVycG9sYW50cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQ29udHJvbEludGVycG9sYW50c319fX1faXNBY3RpdmVBY3Rpb24odCl7bGV0IGU9dC5fY2FjaGVJbmRleDtyZXR1cm4gZSE9PW51bGwmJmU8dGhpcy5fbkFjdGl2ZUFjdGlvbnN9X2FkZEluYWN0aXZlQWN0aW9uKHQsZSxpKXtsZXQgcj10aGlzLl9hY3Rpb25zLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPXNbZV07aWYobz09PXZvaWQgMClvPXtrbm93bkFjdGlvbnM6W3RdLGFjdGlvbkJ5Um9vdDp7fX0sdC5fYnlDbGlwQ2FjaGVJbmRleD0wLHNbZV09bztlbHNle2xldCBhPW8ua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9YS5sZW5ndGgsYS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9ci5sZW5ndGgsci5wdXNoKHQpLG8uYWN0aW9uQnlSb290W2ldPXR9X3JlbW92ZUluYWN0aXZlQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT1lW2UubGVuZ3RoLTFdLHI9dC5fY2FjaGVJbmRleDtpLl9jYWNoZUluZGV4PXIsZVtyXT1pLGUucG9wKCksdC5fY2FjaGVJbmRleD1udWxsO2xldCBzPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3NdLGw9YS5rbm93bkFjdGlvbnMsYz1sW2wubGVuZ3RoLTFdLHU9dC5fYnlDbGlwQ2FjaGVJbmRleDtjLl9ieUNsaXBDYWNoZUluZGV4PXUsbFt1XT1jLGwucG9wKCksdC5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2xldCBoPWEuYWN0aW9uQnlSb290LGY9KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZDtkZWxldGUgaFtmXSxsLmxlbmd0aD09PTAmJmRlbGV0ZSBvW3NdLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl9X3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl7bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9ZVtpXTstLXMucmVmZXJlbmNlQ291bnQ9PT0wJiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcocyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMscz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQscy5fY2FjaGVJbmRleD1pLGVbaV09c31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz10aGlzLl9iaW5kaW5ncyxvPXJbZV07bz09PXZvaWQgMCYmKG89e30scltlXT1vKSxvW2ldPXQsdC5fY2FjaGVJbmRleD1zLmxlbmd0aCxzLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxzPWkucGF0aCxvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxhPW9bcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIGFbc10sT2JqZWN0LmtleXMoYSkubGVuZ3RoPT09MCYmZGVsZXRlIG9bcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLHM9ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LHMuX2NhY2hlSW5kZXg9aSxlW2ldPXN9X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiBpPT09dm9pZCAwJiYoaT1uZXcgX2wobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMscz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LHMuX19jYWNoZUluZGV4PWksZVtpXT1zfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qscz1yLnV1aWQsbz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShyLHQpOnQsYT1vIT09bnVsbD9vLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV0sYz1udWxsO2lmKGk9PT12b2lkIDAmJihvIT09bnVsbD9pPW8uYmxlbmRNb2RlOmk9UWgpLGwhPT12b2lkIDApe2xldCBoPWwuYWN0aW9uQnlSb290W3NdO2lmKGghPT12b2lkIDAmJmguYmxlbmRNb2RlPT09aSlyZXR1cm4gaDtjPWwua25vd25BY3Rpb25zWzBdLG89PT1udWxsJiYobz1jLl9jbGlwKX1pZihvPT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdT1uZXcgR2godGhpcyxvLGUsaSk7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24odSxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih1LGEscyksdX1leGlzdGluZ0FjdGlvbih0LGUpe2xldCBpPWV8fHRoaXMuX3Jvb3Qscj1pLnV1aWQscz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShpLHQpOnQsbz1zP3MudXVpZDp0LGE9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvXTtyZXR1cm4gYSE9PXZvaWQgMCYmYS5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnMsZT10aGlzLl9uQWN0aXZlQWN0aW9ucztmb3IobGV0IGk9ZS0xO2k+PTA7LS1pKXRbaV0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXt0Kj10aGlzLnRpbWVTY2FsZTtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMscj10aGlzLnRpbWUrPXQscz1NYXRoLnNpZ24odCksbz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQscyxvKTtsZXQgYT10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2MpYVtjXS5hcHBseShvKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAscz1yW2ldO2lmKHMhPT12b2lkIDApe2xldCBvPXMua25vd25BY3Rpb25zO2ZvcihsZXQgYT0wLGw9by5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1vW2FdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxoPWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxoLl9jYWNoZUluZGV4PXUsZVt1XT1oLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IG8gaW4gaSl7bGV0IGE9aVtvXS5hY3Rpb25CeVJvb3QsbD1hW2VdO2whPT12b2lkIDAmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1yW2VdO2lmKHMhPT12b2lkIDApZm9yKGxldCBvIGluIHMpe2xldCBhPXNbb107YS5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhhKX19dW5jYWNoZUFjdGlvbih0LGUpe2xldCBpPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtpIT09bnVsbCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaSksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaSkpfX07V2gucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIFRvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBUbyh0aGlzLnZhbHVlLmNsb25lPT09dm9pZCAwP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19LHFoPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodCxlKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9aX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgZT1zdXBlci5jbG9uZSh0KTtyZXR1cm4gZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fTtxaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgWGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixzKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1lLHRoaXMuaXRlbVNpemU9aSx0aGlzLmVsZW1lbnRTaXplPXIsdGhpcy5jb3VudD1zLHRoaXMudmVyc2lvbj0wfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfXNldFR5cGUodCxlKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1lLHRoaXN9c2V0SXRlbVNpemUodCl7cmV0dXJuIHRoaXMuaXRlbVNpemU9dCx0aGlzfXNldENvdW50KHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319O1hoLnByb3RvdHlwZS5pc0dMQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBvMD1uZXcgSyxZaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBLKDEvMCwxLzApLGU9bmV3IEsoLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPW8wLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gbzAuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O1lpLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIGEwPW5ldyBULCRhPW5ldyBULFloPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0KSx0aGlzLmVuZC5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQuc3RhcnQpLHRoaXMuZW5kLmNvcHkodC5lbmQpLHRoaXN9Z2V0Q2VudGVyKHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5zdGFydCx0aGlzLmVuZCkubXVsdGlwbHlTY2FsYXIoLjUpfWRlbHRhKHQpe3JldHVybiB0LnN1YlZlY3RvcnModGhpcy5lbmQsdGhpcy5zdGFydCl9ZGlzdGFuY2VTcSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX1kaXN0YW5jZSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfWF0KHQsZSl7cmV0dXJuIHRoaXMuZGVsdGEoZSkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMuc3RhcnQpfWNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIodCxlKXthMC5zdWJWZWN0b3JzKHQsdGhpcy5zdGFydCksJGEuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtsZXQgaT0kYS5kb3QoJGEpLHM9JGEuZG90KGEwKS9pO3JldHVybiBlJiYocz1JZShzLDAsMSkpLHN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUsaSl7bGV0IHI9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQsZSk7cmV0dXJuIHRoaXMuZGVsdGEoaSkubXVsdGlwbHlTY2FsYXIocikuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTt2YXIgUW49bmV3IFQsS2E9bmV3IHd0LEZ1PW5ldyB3dCxaaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQpe2xldCBlPUQwKHQpLGk9bmV3IEh0LHI9W10scz1bXSxvPW5ldyBmdCgwLDAsMSksYT1uZXcgZnQoMCwxLDApO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtsZXQgdT1lW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihyLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMCkscy5wdXNoKG8ucixvLmcsby5iKSxzLnB1c2goYS5yLGEuZyxhLmIpKX1pLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShzLDMpKTtsZXQgbD1uZXcgem4oe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIoaSxsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1lLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCBlPXRoaXMuYm9uZXMsaT10aGlzLmdlb21ldHJ5LHI9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7RnUuY29weSh0aGlzLnJvb3QubWF0cml4V29ybGQpLmludmVydCgpO2ZvcihsZXQgcz0wLG89MDtzPGUubGVuZ3RoO3MrKyl7bGV0IGE9ZVtzXTthLnBhcmVudCYmYS5wYXJlbnQuaXNCb25lJiYoS2EubXVsdGlwbHlNYXRyaWNlcyhGdSxhLm1hdHJpeFdvcmxkKSxRbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oS2EpLHIuc2V0WFlaKG8sUW4ueCxRbi55LFFuLnopLEthLm11bHRpcGx5TWF0cmljZXMoRnUsYS5wYXJlbnQubWF0cml4V29ybGQpLFFuLnNldEZyb21NYXRyaXhQb3NpdGlvbihLYSksci5zZXRYWVoobysxLFFuLngsUW4ueSxRbi56KSxvKz0yKX1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIEQwKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsRDAobi5jaGlsZHJlbltlXSkpO3JldHVybiB0fXZhciBKaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxpPTQ0NzM5MjQscj04OTQ3ODQ4KXtpPW5ldyBmdChpKSxyPW5ldyBmdChyKTtsZXQgcz1lLzIsbz10L2UsYT10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLGQ9MCxnPS1hO2Y8PWU7ZisrLGcrPW8pe2wucHVzaCgtYSwwLGcsYSwwLGcpLGwucHVzaChnLDAsLWEsZywwLGEpO2xldCB4PWY9PT1zP2k6cjt4LnRvQXJyYXkoYyxkKSxkKz0zLHgudG9BcnJheShjLGQpLGQrPTMseC50b0FycmF5KGMsZCksZCs9Myx4LnRvQXJyYXkoYyxkKSxkKz0zfWxldCB1PW5ldyBIdDt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShjLDMpKTtsZXQgaD1uZXcgem4oe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX07dmFyIF9UPW5ldyBGbG9hdDMyQXJyYXkoMSksQ2s9bmV3IEludDMyQXJyYXkoX1QuYnVmZmVyKTtGZS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59O19vLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX07SmgucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX07WmgucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfTttbi5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLERoLmV4dHJhY3RVcmxCYXNlKG4pfTttbi5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX07WWkucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O1lpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07WWkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O1lpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX07R2UucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O0dlLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07R2UucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O0dlLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtHZS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9O3NpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtxci5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX07WWgucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpLHRoaXMuZ2V0Q2VudGVyKG4pfTtkZS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTtkZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07ZGUucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2RlLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9O3d0LnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKG4pfTt3dC5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTt3dC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbmV3IFQoKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9O3d0LnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKG4pfTt3dC5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4udHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfTt3dC5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKG4sdCxlLGkscixzKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKG4sdCxpLGUscixzKX07d3QucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShuKS5pbnZlcnQoKX07amUucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShuKX07RWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxuLmFwcGx5UXVhdGVybmlvbih0aGlzKX07RWUucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKG4pfTtvaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtyZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX07cmUucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQobix0KX07cmUucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQobil9O3JlLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKG4pfTtyZS5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShuKX07cmUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxyZS5nZXRCYXJ5Y29vcmQobix0LGUsaSxyKX07cmUubm9ybWFsPWZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIikscmUuZ2V0Tm9ybWFsKG4sdCxlLGkpfTtVbi5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhuKX07VW4ucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGNpKHRoaXMsbil9O1VuLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IHFpKHRoaXMsbil9O0sucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9O0sucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfTtLLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihuKX07VC5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShuKX07VC5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LG4pfTtULnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX07VC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07VC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9O1QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtXdC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07V3QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtrdC5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKG4pfTtrdC5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX07a3QucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LG4pfTtrdC5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9O2t0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGt0LnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1ufX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSk7b2UucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2UucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLCR3fSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7ZGwucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtTZS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWWUucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUXQucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09bmx9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShubCl9fX0pO1F0LnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKG49PT0hMD9ubDppbyksdGhpc307UXQucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUXQucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07SHQucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX07SHQucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBRdChhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOm49PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpfTtIdC5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe2UhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfTtIdC5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtIdC5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtIdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9O0h0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEh0LnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7R2kucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShuPT09ITA/bmw6aW8pLHRoaXN9O0dpLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07Y2kucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2NpLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtjaS5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1lyLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VG8ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeGUucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBmdH19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PWMwfX0sc3RlbmNpbE1hc2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFzaz1ufX0sdmVydGV4VGFuZ2VudHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZuLnByb3RvdHlwZSx7ZGVyaXZhdGl2ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM9bn19fSk7VnQucHJvdG90eXBlLmNsZWFyVGFyZ2V0PWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKSx0aGlzLnNldFJlbmRlclRhcmdldChuKSx0aGlzLmNsZWFyKHQsZSxpKX07VnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYW5pbWF0ZSgpIGlzIG5vdyAuc2V0QW5pbWF0aW9uTG9vcCgpLiIpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcChuKX07VnQucHJvdG90eXBlLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0Q3VycmVudFJlbmRlclRhcmdldCgpIGlzIG5vdyAuZ2V0UmVuZGVyVGFyZ2V0KCkuIiksdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX07VnQucHJvdG90eXBlLmdldE1heEFuaXNvdHJvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0TWF4QW5pc290cm9weSgpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKS4iKSx0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9O1Z0LnByb3RvdHlwZS5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0UHJlY2lzaW9uKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMucHJlY2lzaW9uLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbn07VnQucHJvdG90eXBlLnJlc2V0R0xTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5yZXNldEdMU3RhdGUoKSBpcyBub3cgLnN0YXRlLnJlc2V0KCkuIiksdGhpcy5zdGF0ZS5yZXNldCgpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0JsZW5kTWluTWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMoKSBpcyBub3cgLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcy4iKSx0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc307VnQucHJvdG90eXBlLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfTtWdC5wcm90b3R5cGUuZW5hYmxlU2Npc3NvclRlc3Q9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZW5hYmxlU2Npc3NvclRlc3QoKSBpcyBub3cgLnNldFNjaXNzb3JUZXN0KCkuIiksdGhpcy5zZXRTY2lzc29yVGVzdChuKX07VnQucHJvdG90eXBlLmluaXRNYXRlcmlhbD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5hZGRQcmVQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWRkUG9zdFBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFBvc3RQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUudXBkYXRlU2hhZG93TWFwPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldEZhY2VDdWxsaW5nPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWxsb2NUZXh0dXJlVW5pdD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFsbG9jVGV4dHVyZVVuaXQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZTJEPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZUN1YmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuZ2V0QWN0aXZlTWlwTWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuIiksdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhWdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9bn19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9bn19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPW49PT0hMD8kdDpyaX19LHRvbmVNYXBwaW5nV2hpdGVQb2ludDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpLDF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sZ2FtbWFGYWN0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpLDJ9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQwLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhOZS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSk7QmgucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4gbmV3IEZoKCkubG9hZChuLGZ1bmN0aW9uKGkpe3Quc2V0QnVmZmVyKGkpfSksdGhpc307T2gucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpLHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpfTthby5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfTthby5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX07Tm4uY3Jvc3NPcmlnaW49dm9pZCAwO05uLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IEVoO3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IHM9ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihzLm1hcHBpbmc9dCksc307Tm4ubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgU2g7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgcz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKHMubWFwcGluZz10KSxzfTtObi5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O05uLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTt0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246JGh9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSRoKTtmdW5jdGlvbiByZihuLHQsZSl7aWYoZT09PTEpcmV0dXJuIG5ldyBmdCh0KTtsZXQgaT1waSh0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke3R9YCk7cmV0dXJuIG5ldyBmdChzYyhpLG4pKDEtZSkpfXZhciBnbjsoZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0pKGdufHwoZ249e30pKTtmdW5jdGlvbiBOMChuLHQpe2xldCBlPXQubGVuZ3RoLzIsaT1uLmF0dHJpYnV0ZXMucG9zaXRpb247KCFpfHxpLmNvdW50IT09ZSozKSYmKGk9bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoZSozKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLGkpKTtsZXQgcj1pLmFycmF5O2ZvcihsZXQgcz0wO3M8ZTtzKyspcltzKjNdPXRbcyoyXSxyW3MqMysxXT10W3MqMisxXTtpLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsZSozKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIEYwKG4sdCxlKXtsZXQgaT1NYXRoLm1heCh0Lmxlbmd0aC8yLTEsMCkscj1pKjIqMyxzPXIqMyxvPW4uYXR0cmlidXRlcy5wb3NpdGlvbjsoIW98fG8uY291bnQhPT1yKSYmKG89bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkocyksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixvKSk7bGV0IGE9by5hcnJheTtmb3IobGV0IGw9MDtsPGk7bCsrKXtsZXRbYyx1LGgsZl09W3RbMipsXSx0WzIqbCsxXSx0WzIqbCsyXSx0WzIqbCszXV0sZD1uZXcgSyhjLHUpLGc9bmV3IEsoaCxmKSx4PW5ldyBLKGgtYyxmLXUpLHY9bmV3IEsoLXgueSx4LngpLnNldExlbmd0aChlLzIpLG09ZC5jbG9uZSgpLmFkZCh2KSxwPWQuY2xvbmUoKS5zdWIodiksYj1nLmNsb25lKCkuYWRkKHYpLF89Zy5jbG9uZSgpLnN1Yih2KSxTPVttLngsbS55LDAscC54LHAueSwwLGIueCxiLnksMCxiLngsYi55LDAscC54LHAueSwwLF8ueCxfLnksMF07YS5zZXQoUyxsKlMubGVuZ3RoKX1vLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAscyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBJbChuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOnMsb3BhY2l0eTpvfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1yZihuLHMsbyE9bnVsbD9vOjEpLGM9ZSh0Lmdlb21ldHJ5KTtyZXR1cm4gdC5nZW9tZXRyeSE9PWMmJih0Lmdlb21ldHJ5PWMpLGEuY29sb3IuZXF1YWxzKGwpfHwoYS5jb2xvci5zZXQobCksYS5uZWVkc1VwZGF0ZT0hMCksITB9dmFyIHdUPXtjcmVhdGVTY2VuZTooKT0+bmV3IFlyfSxSbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT13VC5jcmVhdGVTY2VuZSgpLHRoaXMuYmFja2dyb3VuZENvbG9yPSIjZmZmIixEaS5pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpJiZ0IGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzJiYodC5zdHlsZT10LnN0eWxlfHx7fSksciYmdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixyKSx0aGlzLnJlbmRlcmVyPW5ldyBWdCh7Y2FudmFzOnQsYW50aWFsaWFzOiEwLGFscGhhOiEwfSksdGhpcy5yZW5kZXJlci5zZXRQaXhlbFJhdGlvKGkpfW9uUmVzaXplKHQpe3RoaXMucmVuZGVyZXIuc2V0U2l6ZSh0LndpZHRoLHQuaGVpZ2h0KX1kZXN0cm95T2JqZWN0KHQpe2xldCBlPXQub2JqM2Q7aWYodGhpcy5zY2VuZS5yZW1vdmUoZSksZSBpbnN0YW5jZW9mIG9lKXtlLmdlb21ldHJ5LmRpc3Bvc2UoKTtsZXQgaT1BcnJheS5pc0FycmF5KGUubWF0ZXJpYWwpP2UubWF0ZXJpYWw6W2UubWF0ZXJpYWxdO2ZvcihsZXQgciBvZiBpKXIuZGlzcG9zZSgpfX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLmJhY2tncm91bmRDb2xvcj10PyIjMzAzMDMwIjoiI2ZmZiJ9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXt2YXIgdTtpZighdCYmIWkudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTpyLHdpZHRoOnN9PWk7aWYoIXQpe2xldCBoPXJmKHRoaXMuYmFja2dyb3VuZENvbG9yLGkuY29sb3IsKHU9aS5vcGFjaXR5KSE9bnVsbD91OjEpLGY9bmV3IEh0LGQ9bmV3IHpuKHtjb2xvcjpofSksZz1uZXcgb2UoZixkKTtyZXR1cm4gZC52aXNpYmxlPXIsRjAoZixlLHMpLHRoaXMuc2NlbmUuYWRkKGcpLHt0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmcsd2lkdGg6c319bGV0e2RhdGE6byxvYmozZDphLHdpZHRoOmx9PXQ7cmV0dXJuIElsKHRoaXMuYmFja2dyb3VuZENvbG9yLGEsaD0+KChzIT09bHx8IW98fCFEaS5hcmVQb2x5bGluZXNFcXVhbChvLGUpKSYmRjAoaCxlLHMpLGgpLGkpP3t0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmEsd2lkdGg6c306dH1jcmVhdGVNZXNoKHQsZSl7aWYoIWUudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTppLGNvbG9yOnIsb3BhY2l0eTpzfT1lLG89cmYodGhpcy5iYWNrZ3JvdW5kQ29sb3IscixzIT1udWxsP3M6MSksYT1uZXcga2koe2NvbG9yOm8sdmlzaWJsZTppfSk7cmV0dXJuIG5ldyBvZSh0LGEpfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLGkpe2xldHtzaXplOnJ9PWkscz1yKk1hdGguc3FydCgzKS8yLG89bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnktcy8zLGUueCtyLzIsZS55LXMvMyxlLngsZS55K3MqMi8zXSk7aWYoIXQpe2xldCBsPW5ldyBIdDtOMChsLG8pO2xldCBjPXRoaXMuY3JlYXRlTWVzaChsLGkpO3JldHVybiBjPT09bnVsbD9udWxsOih0aGlzLnNjZW5lLmFkZChjKSx7dHlwZTpnbi5UUklBTkdMRSxkYXRhOmUsb2JqM2Q6Y30pfXJldHVybiBJbCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLGw9PihOMChsLG8pLGwpLGkpP3t0eXBlOmduLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWkscz1uZXcgWnIoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gocyxpKTtyZXR1cm4gYT09PW51bGw/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+cyxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnN9PXIsbz0yL01hdGguc3FydCgzKSpzLGE9bmV3IFVuKFtuZXcgSyhlLngtby8yLGUueS1zLzIpLG5ldyBLKGUueCxlLnkrcy8yKSxuZXcgSyhpLngsaS55K3MvMiksbmV3IEsoaS54K28vMixpLnktcy8yKV0pO2EuYXV0b0Nsb3NlPSEwO2xldCBsPW5ldyBxaShhKTtpZighdCl7bGV0IHU9dGhpcy5jcmVhdGVNZXNoKGwscik7cmV0dXJuIHU9PT1udWxsP251bGw6KHRoaXMuc2NlbmUuYWRkKHUpLHt0eXBlOmduLlRSQVBFWk9JRCxkYXRhOltlLGldLG9iajNkOnV9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+bCxyKT97dHlwZTpnbi5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp0Lm9iajNkfTp0fWZsdXNoKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNvb3JkaW5hdG9yLmdldENhbWVyYSgpKX1kaXNwb3NlKCl7dGhpcy5yZW5kZXJlci5kaXNwb3NlKCl9fTt2YXIgTmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJlbmRlckNhY2hlPXQsdGhpcy5yZW5kZXJlcj1lfXNldExpbmUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJpYW5nbGUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldENpcmNsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldFRyYXBlem9pZCh0LGUsaSxyKXtsZXQgcz10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpLHIpO3MmJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxzKX19O3ZhciBzZj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7bGV0IGU9dGhpcy5wcmV2RnJhbWVDYWNoZS5nZXQodCk7cmV0dXJuIGUhPW51bGw/ZTpudWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LEZsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucmF3U2VyaWVzRGF0YT1bXSx0aGlzLnNlcmllcz1bXSx0aGlzLnBhaW50RGlydHk9ITAsdGhpcy5yZW5kZXJDYWNoZT1uZXcgc2YsdGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj1udWxsLHRoaXMubGF5b3V0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsPXQuZ2V0TWV0YWRhdGFNYXAsdGhpcy5jb29yZGluYXRvcj10LmNvb3JkaW5hdG9yLHRoaXMucmVuZGVyZXI9dC5yZW5kZXJlcix0aGlzLnBhaW50QnJ1c2g9bmV3IE5sKHRoaXMucmVuZGVyQ2FjaGUsdGhpcy5yZW5kZXJlcil9c2V0TGF5b3V0UmVjdCh0KXsodGhpcy5sYXlvdXQueCE9PXQueHx8dGhpcy5sYXlvdXQud2lkdGghPT10LndpZHRofHx0aGlzLmxheW91dC55IT09dC55fHx0aGlzLmxheW91dC5oZWlnaHQhPT10LmhlaWdodCkmJih0aGlzLnBhaW50RGlydHk9ITApLHRoaXMubGF5b3V0PXR9Z2V0TGF5b3V0UmVjdCgpe3JldHVybiB0aGlzLmxheW91dH1nZXRNZXRhZGF0YU1hcCgpe3JldHVybiB0aGlzLmdldE1ldGFkYXRhTWFwSW1wbCgpfW1hcmtBc1BhaW50RGlydHkoKXt0aGlzLnBhaW50RGlydHk9ITB9cmVuZGVyKCl7aWYodGhpcy50cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKSwhIXRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheShpLnBvaW50cy5sZW5ndGgqMil9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W3Msb109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lW3IqMl09cyx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVtyKjIrMV09b319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19O3ZhciBMbzsoZnVuY3Rpb24obil7bltuLk5VTUJFUj0wXT0iTlVNQkVSIixuW24uTkFOPTFdPSJOQU4ifSkoTG98fChMbz17fSkpO3ZhciB6bD1jbGFzcyBleHRlbmRzIEZse3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6TG8uTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOkxvLk5BTixwb2x5bGluZTplLm1hcCgocixzKT0+aXNOYU4ocik/cyUyPT09MD9pLng6aS55OnIpfX1wYXJ0aXRpb25Qb2x5bGluZSh0KXtsZXQgZT1bXSxpPTAscj0hMSxzPXRoaXMuY29vcmRpbmF0b3IudHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0aGlzLmdldExheW91dFJlY3QoKSxbMCwwXSksbz17eDpzWzBdLHk6c1sxXX0sYT1udWxsO2ZvcihsZXQgbD0wO2w8dC5sZW5ndGg7bCs9Mil7bGV0IGM9dFtsXSx1PXRbbCsxXSxoPWlzTmFOKGMpfHxpc05hTih1KTtoIT09ciYmaSE9PWwmJihlLnB1c2godGhpcy5yZWNvcmRQYXJ0aXRpb24oIXIsdC5zbGljZShpLGwpLGE9PT1udWxsP3t4OmMseTp1fTphKSksaT1sKSxofHwoYT17eDpjLHk6dX0pLHI9aH1yZXR1cm4gaSE9PXQubGVuZ3RoLTEmJmUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksdC5sZW5ndGgpLGEhPW51bGw/YTpvKSksZX1yZWRyYXcoKXt2YXIgdCxlLGk7Zm9yKGxldCByIG9mIHRoaXMuc2VyaWVzKXtsZXQgbz10aGlzLmdldE1ldGFkYXRhTWFwKClbci5pZF07aWYoIW8pY29udGludWU7aWYoci5wb2x5bGluZS5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGF2ZSBvZGQgbGVuZ3RoLWVkIHBvbHlsaW5lOiAke3IucG9seWxpbmUubGVuZ3RofWApO2xldCBhPXRoaXMucGFydGl0aW9uUG9seWxpbmUoci5wb2x5bGluZSk7Zm9yKGxldFtsLHt0eXBlOmMscG9seWxpbmU6dX1db2YgYS5lbnRyaWVzKCkpaWYoYz09PUxvLk5VTUJFUil1Lmxlbmd0aD09PTI/dGhpcy5wYWludEJydXNoLnNldENpcmNsZShKU09OLnN0cmluZ2lmeShbImNpcmNsZSIsci5pZCxsXSkse3g6dVswXSx5OnVbMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KHQ9by5vcGFjaXR5KSE9bnVsbD90OjEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHIuaWQsbF0pLHUse2NvbG9yOm8uY29sb3IsdmlzaWJsZTpvLnZpc2libGUsb3BhY2l0eTooZT1vLm9wYWNpdHkpIT1udWxsP2U6MSx3aWR0aDoyfSk7ZWxzZSBpZighby5hdXgpZm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKz0yKXRoaXMucGFpbnRCcnVzaC5zZXRUcmlhbmdsZShKU09OLnN0cmluZ2lmeShbIk5hTiIsci5pZCx1W2hdLHVbaCsxXV0pLHt4OnVbaF0seTp1W2grMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KGk9by5vcGFjaXR5KSE9bnVsbD9pOjEsc2l6ZToxMn0pfX19O3ZhciBVbD1jbGFzcyBleHRlbmRzIGRye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNhbWVyYT1uZXcgVmkoMCwxZTMsMWUzLDAsMCwxMDApfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiExfXNldERvbUNvbnRhaW5lclJlY3QodCl7c3VwZXIuc2V0RG9tQ29udGFpbmVyUmVjdCh0KSx0aGlzLmNhbWVyYS5sZWZ0PXQueCx0aGlzLmNhbWVyYS5yaWdodD10LngrdC53aWR0aCx0aGlzLmNhbWVyYS50b3A9dC55K3QuaGVpZ2h0LHRoaXMuY2FtZXJhLmJvdHRvbT10LnksdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldENhbWVyYSgpe3JldHVybiB0aGlzLmNhbWVyYX19O3ZhciBNVD17cmVxdWVzdEFuaW1hdGlvbkZyYW1lOm49PnNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSxCbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIFRuLlNWRzp7dGhpcy5jb29yZGluYXRvcj1uZXcgZHIsdGhpcy5yZW5kZXJlcj1uZXcgT3ModC5jb250YWluZXIpO2JyZWFrfWNhc2UgVG4uV0VCR0w6e2xldCBlPW5ldyBVbDt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5yZW5kZXJlcj1uZXcgUm8odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgemwoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoZnIodCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShmcih0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KE5vKHt4OjAseTowfSx0KSksdGhpcy5yZW5kZXJlci5vblJlc2l6ZShObyh7eDowLHk6MH0sdCkpLHRoaXMuc2VyaWVzTGluZVZpZXcuc2V0TGF5b3V0UmVjdCh1ZihObyh7fSx0KSx7eDowLHk6MH0pKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldE1ldGFkYXRhKHQpe2xldCBlPSExO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtpLHJdKT0+e2xldCBzPXRoaXMubWV0YWRhdGFNYXBbaV07KCFzfHxyLmNvbG9yIT09cy5jb2xvcnx8ci52aXNpYmxlIT09cy52aXNpYmxlfHxyLm9wYWNpdHkhPT1zLm9wYWNpdHkpJiYoZT0hMCksdGhpcy5tZXRhZGF0YU1hcFtpXT1yfSksZSYmdGhpcy5zZXJpZXNMaW5lVmlldy5tYXJrQXNQYWludERpcnR5KCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRWaWV3Qm94KHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0Vmlld0JveFJlY3Qoe3g6dC54WzBdLHdpZHRoOnQueFsxXS10LnhbMF0seTp0LnlbMF0saGVpZ2h0OnQueVsxXS10LnlbMF19KSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldERhdGEodCl7dGhpcy5zZXJpZXNMaW5lVmlldy5zZXREYXRhKHQpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0VXNlRGFya01vZGUodCl7dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0KSx0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNjaGVkdWxlUmVwYWludCgpe3RoaXMuc2hvdWxkUmVwYWludHx8KHRoaXMuc2hvdWxkUmVwYWludD0hMCxNVC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnJlcGFpbnQoKSx0aGlzLnNob3VsZFJlcGFpbnQ9ITF9KSl9cmVwYWludCgpe3RoaXMuc2VyaWVzTGluZVZpZXcucmVuZGVyKCksdGhpcy5yZW5kZXJlci5mbHVzaCgpLHRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpfX07ZnVuY3Rpb24gejAobil7bGV0e2ZsYXR0ZW5lZFNlcmllczp0LGlkc0FuZExlbmd0aHM6ZX09bixpPW5ldyBGbG9hdDY0QXJyYXkodCkscj1bXTtpZihpLmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoImBmbGF0dGVuZWRTZXJpZXNgIG11c3QgaGF2ZSBldmVuIG51bWJlciBvZiBlbGVtZW50cyIpO2xldCBzPTA7Zm9yKGxldHtpZDpvLGxlbmd0aDphfW9mIGUpe2xldCBsPVtdO2ZvcihsZXQgYz0wO2M8YTtjKyspbC5wdXNoKHt4OmlbcysrXSx5OmlbcysrXX0pO3IucHVzaCh7aWQ6byxwb2ludHM6bH0pfXJldHVybiByfXZhciB4bjsoZnVuY3Rpb24obil7bltuLlNFUklFU19EQVRBX1VQREFURUQ9MF09IlNFUklFU19EQVRBX1VQREFURUQiLG5bbi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRD0xXT0iU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQiLG5bbi5TQ0FMRV9VUERBVEVEPTJdPSJTQ0FMRV9VUERBVEVEIixuW24uVklFV19CT1hfVVBEQVRFRD0zXT0iVklFV19CT1hfVVBEQVRFRCIsbltuLklOSVQ9NF09IklOSVQiLG5bbi5ET01fUkVTSVpFRD01XT0iRE9NX1JFU0laRUQiLG5bbi5EQVJLX01PREVfVVBEQVRFRD02XT0iREFSS19NT0RFX1VQREFURUQiLG5bbi5ESVNQT1NFRD03XT0iRElTUE9TRUQifSkoeG58fCh4bj17fSkpO3ZhciBQbzsoZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KShQb3x8KFBvPXt9KSk7c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57YlQobi5wb3J0c1swXSxuLmRhdGEpfSk7ZnVuY3Rpb24gYlQobix0KXtsZXR7Y2FudmFzOmUsZGV2aWNlUGl4ZWxSYXRpbzppLGRpbTpyLHJlbmRlcmVyVHlwZTpzLHVzZURhcmtNb2RlOm99PXQsYT17b25EcmF3RW5kOigpPT57bi5wb3N0TWVzc2FnZSh7dHlwZTpQby5PTl9SRURSQVdfRU5EfSl9LG9uQ29udGV4dExvc3Q6KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOlBvLk9OX0NPTlRFWFRfTE9TVH0pfX0sbDtzd2l0Y2gocyl7Y2FzZSBUbi5XRUJHTDpsPXt0eXBlOlRuLldFQkdMLGRvbURpbWVuc2lvbjpyLGNhbGxiYWNrczphLGNvbnRhaW5lcjplLGRldmljZVBpeGVsUmF0aW86aSx1c2VEYXJrTW9kZTpvfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGNhbm5vdCBoYXZlIE9mZnNjcmVlbiBjaGFydCBmb3IgcmVuZGVyZXIgdHlwZTogJHtzfWApfWxldCBjPW5ldyBCbChsKTtuLm9ubWVzc2FnZT1mdW5jdGlvbih1KXtsZXQgaD11LmRhdGE7c3dpdGNoKGgudHlwZSl7Y2FzZSB4bi5TRVJJRVNfREFUQV9VUERBVEVEOntsZXQgZj16MChoLmNvbXBhY3REYXRhU2VyaWVzKTtjLnNldERhdGEoZik7YnJlYWt9Y2FzZSB4bi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRDp7Yy5zZXRNZXRhZGF0YShoLm1ldGFkYXRhKTticmVha31jYXNlIHhuLlZJRVdfQk9YX1VQREFURUQ6e2Muc2V0Vmlld0JveChoLmV4dGVudCk7YnJlYWt9Y2FzZSB4bi5ET01fUkVTSVpFRDp7Yy5yZXNpemUoaC5kaW0pO2JyZWFrfWNhc2UgeG4uREFSS19NT0RFX1VQREFURUQ6e2Muc2V0VXNlRGFya01vZGUoaC51c2VEYXJrTW9kZSk7YnJlYWt9Y2FzZSB4bi5TQ0FMRV9VUERBVEVEOntzd2l0Y2goaC5heGlzKXtjYXNlIngiOmMuc2V0WFNjYWxlVHlwZShoLnNjYWxlVHlwZSk7YnJlYWs7Y2FzZSJ5IjpjLnNldFlTY2FsZVR5cGUoaC5zY2FsZVR5cGUpO2JyZWFrO2RlZmF1bHQ6bGV0IGY9aC5heGlzO3Rocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIGF4aXM6ICR7Zn1gKX1icmVha31jYXNlIHhuLkRJU1BPU0VEOntjLmRpc3Bvc2UoKTticmVha319fX19KSgpOwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTAtMjAyMiBUaHJlZS5qcyBBdXRob3JzCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICovCi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoYXJ0X3dvcmtlci5qcy5tYXAK", + "ok": true, + "headers": [ + [ + "content-type", + "text/javascript; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + } + }, + "base_uri": "https://localhost:8080/", + "height": 821 + }, + "id": "34DeQPLe8-kd", + "outputId": "59a070f3-0f5e-4018-8251-3fb1fd12f6a9" + }, + "execution_count": 23, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\n", + " (async () => {\n", + " const url = new URL(await google.colab.kernel.proxyPort(6006, {'cache': true}));\n", + " url.searchParams.set('tensorboardColab', 'true');\n", + " const iframe = document.createElement('iframe');\n", + " iframe.src = url;\n", + " iframe.setAttribute('width', '100%');\n", + " iframe.setAttribute('height', '800');\n", + " iframe.setAttribute('frameborder', 0);\n", + " document.body.appendChild(iframe);\n", + " })();\n", + " " + ] + }, + "metadata": {} + } + ] + }, { "cell_type": "code", "metadata": { @@ -1111,12 +1366,12 @@ }, "source": [ "# Upload TensorBoard dev records\n", - "!tensorboard dev upload --logdir ./tensorflow_hub/ \\\n", - " --name \"EfficientNetB0 vs. ResNet50V2\" \\\n", - " --description \"Comparing two different TF Hub feature extraction models architectures using 10% of training images\" \\\n", - " --one_shot" + "#!tensorboard dev upload --logdir ./tensorflow_hub/ \\\n", + "# --name \"EfficientNetB0 vs. ResNet50V2\" \\\n", + "# --description \"Comparing two different TF Hub feature extraction models architectures using 10% of training images\" \\\n", + "# --one_shot" ], - "execution_count": 17, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -1196,7 +1451,7 @@ "# Check out experiments\n", "# !tensorboard dev list # uncomment to see" ], - "execution_count": 21, + "execution_count": null, "outputs": [] }, { @@ -1226,7 +1481,7 @@ "# Delete an experiment\n", "!tensorboard dev delete --experiment_id n6kd8XZ3Rdy1jSgSLH5WjA" ], - "execution_count": 19, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -1248,7 +1503,7 @@ "# Check to see if experiments still exist\n", "# !tensorboard dev list # uncomment to see" ], - "execution_count": 22, + "execution_count": null, "outputs": [] }, { diff --git a/05_transfer_learning_in_tensorflow_part_2_fine_tuning.ipynb b/05_transfer_learning_in_tensorflow_part_2_fine_tuning.ipynb index defdb61..69330db 100644 --- a/05_transfer_learning_in_tensorflow_part_2_fine_tuning.ipynb +++ b/05_transfer_learning_in_tensorflow_part_2_fine_tuning.ipynb @@ -3,8 +3,7 @@ { "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "id": "view-in-github" }, "source": [ "\"Open" @@ -83,14 +82,14 @@ "base_uri": "https://localhost:8080/" }, "id": "XOwYRBo8nuLY", - "outputId": "879c4a23-d7b0-45fb-adda-694a502daac7" + "outputId": "4aca8304-ade4-42f4-f105-c98f276cbcbc" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Notebook last run (end-to-end): 2023-08-18 01:39:51.865865\n" + "Notebook last run (end-to-end): 2024-01-14 13:37:32.057265\n" ] } ], @@ -114,6 +113,31 @@ "id": "hC5o11td8Y8I" } }, + { + "cell_type": "code", + "source": [ + "# Settings Tensoboard\n", + "\n", + "%load_ext tensorboard" + ], + "metadata": { + "id": "P0dg9jngLSm6" + }, + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Clear any logs from previous runs\n", + "!rm -rf ./logs/" + ], + "metadata": { + "id": "CYLrH_m0LY4Q" + }, + "execution_count": 3, + "outputs": [] + }, { "cell_type": "code", "source": [ @@ -126,54 +150,54 @@ "base_uri": "https://localhost:8080/" }, "id": "u9BN6XgdP4N1", - "outputId": "0f7376ad-0204-4c34-a54e-480f116ab1b4" + "outputId": "701413cd-9018-4b7b-ada3-4c6fc6f03c40" }, - "execution_count": 2, + "execution_count": 4, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "TensorFlow version: 2.12.0\n" + "TensorFlow version: 2.15.0\n" ] } ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Nq4kxIpQMpZT", - "outputId": "d24fa621-b874-4eba-c782-2df33f3aa386" + "outputId": "59711ab6-03d1-4303-dde8-f8a699f9edcd" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Fri Aug 18 01:39:54 2023 \n", - "+-----------------------------------------------------------------------------+\n", - "| NVIDIA-SMI 525.105.17 Driver Version: 525.105.17 CUDA Version: 12.0 |\n", - "|-------------------------------+----------------------+----------------------+\n", - "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n", - "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n", - "| | | MIG M. |\n", - "|===============================+======================+======================|\n", - "| 0 Tesla V100-SXM2... Off | 00000000:00:04.0 Off | 0 |\n", - "| N/A 36C P0 24W / 300W | 0MiB / 16384MiB | 0% Default |\n", - "| | | N/A |\n", - "+-------------------------------+----------------------+----------------------+\n", - " \n", - "+-----------------------------------------------------------------------------+\n", - "| Processes: |\n", - "| GPU GI CI PID Type Process name GPU Memory |\n", - "| ID ID Usage |\n", - "|=============================================================================|\n", - "| No running processes found |\n", - "+-----------------------------------------------------------------------------+\n" + "Sun Jan 14 13:37:37 2024 \n", + "+---------------------------------------------------------------------------------------+\n", + "| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 |\n", + "|-----------------------------------------+----------------------+----------------------+\n", + "| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n", + "| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n", + "| | | MIG M. |\n", + "|=========================================+======================+======================|\n", + "| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n", + "| N/A 59C P8 10W / 70W | 0MiB / 15360MiB | 0% Default |\n", + "| | | N/A |\n", + "+-----------------------------------------+----------------------+----------------------+\n", + " \n", + "+---------------------------------------------------------------------------------------+\n", + "| Processes: |\n", + "| GPU GI CI PID Type Process name GPU Memory |\n", + "| ID ID Usage |\n", + "|=======================================================================================|\n", + "| No running processes found |\n", + "+---------------------------------------------------------------------------------------+\n" ] } ], @@ -215,29 +239,52 @@ }, { "cell_type": "code", - "execution_count": 4, + "source": [ + "# New TensorBoard Function\n", + "\n", + "# Create tensorboard callback (functionized because need to create a new one for each model)\n", + "import datetime\n", + "import os\n", + "def create_tensorboard_callback(experiment_name):\n", + " logfit_dir = \"logs/fit/\"\n", + " path_experiment = os.path.join(logfit_dir, experiment_name, datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\"))\n", + " tensorboard_callback = tf.keras.callbacks.TensorBoard(\n", + " log_dir=path_experiment\n", + " )\n", + " print(f\"Saving TensorBoard log files to: {logfit_dir}\")\n", + " return tensorboard_callback" + ], + "metadata": { + "id": "4ZnpQSNSLi-h" + }, + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "wEuiAtXkhsJM", - "outputId": "00958471-9575-490f-9cdf-7aea1e4499a3" + "outputId": "eff5c688-8713-45d5-ceae-e8896c8162f5" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "--2023-08-18 01:39:54-- https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/helper_functions.py\n", + "--2024-01-14 13:37:37-- https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/helper_functions.py\n", "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n", "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 10246 (10K) [text/plain]\n", "Saving to: ‘helper_functions.py’\n", "\n", - "\rhelper_functions.py 0%[ ] 0 --.-KB/s \rhelper_functions.py 100%[===================>] 10.01K --.-KB/s in 0s \n", + "helper_functions.py 100%[===================>] 10.01K --.-KB/s in 0s \n", "\n", - "2023-08-18 01:39:54 (41.3 MB/s) - ‘helper_functions.py’ saved [10246/10246]\n", + "2024-01-14 13:37:37 (74.6 MB/s) - ‘helper_functions.py’ saved [10246/10246]\n", "\n" ] } @@ -247,7 +294,7 @@ "!wget https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/helper_functions.py\n", "\n", "# Import helper functions we're going to use\n", - "from helper_functions import create_tensorboard_callback, plot_loss_curves, unzip_data, walk_through_dir" + "from helper_functions import plot_loss_curves, unzip_data, walk_through_dir" ] }, { @@ -284,29 +331,29 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "P7m6pjH0JTyJ", - "outputId": "72b8f094-3a4d-4468-b88d-76d99e7ae1d0" + "outputId": "62ad25c5-013f-4409-9d45-dfbf8f21b9db" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "--2023-08-18 01:39:55-- https://storage.googleapis.com/ztm_tf_course/food_vision/10_food_classes_10_percent.zip\n", - "Resolving storage.googleapis.com (storage.googleapis.com)... 173.194.203.128, 74.125.199.128, 74.125.195.128, ...\n", - "Connecting to storage.googleapis.com (storage.googleapis.com)|173.194.203.128|:443... connected.\n", + "--2024-01-14 13:37:39-- https://storage.googleapis.com/ztm_tf_course/food_vision/10_food_classes_10_percent.zip\n", + "Resolving storage.googleapis.com (storage.googleapis.com)... 74.125.24.207, 142.251.10.207, 142.251.12.207, ...\n", + "Connecting to storage.googleapis.com (storage.googleapis.com)|74.125.24.207|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 168546183 (161M) [application/zip]\n", "Saving to: ‘10_food_classes_10_percent.zip’\n", "\n", - "10_food_classes_10_ 100%[===================>] 160.74M 242MB/s in 0.7s \n", + "10_food_classes_10_ 100%[===================>] 160.74M 22.5MB/s in 8.3s \n", "\n", - "2023-08-18 01:39:56 (242 MB/s) - ‘10_food_classes_10_percent.zip’ saved [168546183/168546183]\n", + "2024-01-14 13:37:47 (19.3 MB/s) - ‘10_food_classes_10_percent.zip’ saved [168546183/168546183]\n", "\n" ] } @@ -332,13 +379,13 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "8IHQ3i9s2lRm", - "outputId": "087ddaef-4dc9-4b5a-f91d-c68b62e6ce96" + "outputId": "ecc37b51-1a8f-4de9-a27a-9c03d565885b" }, "outputs": [ { @@ -347,27 +394,27 @@ "text": [ "There are 2 directories and 0 images in '10_food_classes_10_percent'.\n", "There are 10 directories and 0 images in '10_food_classes_10_percent/train'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/ramen'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/chicken_wings'.\n", "There are 0 directories and 75 images in '10_food_classes_10_percent/train/chicken_curry'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/fried_rice'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/sushi'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/hamburger'.\n", "There are 0 directories and 75 images in '10_food_classes_10_percent/train/pizza'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/ramen'.\n", "There are 0 directories and 75 images in '10_food_classes_10_percent/train/ice_cream'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/grilled_salmon'.\n", "There are 0 directories and 75 images in '10_food_classes_10_percent/train/steak'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/chicken_wings'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/hamburger'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/sushi'.\n", - "There are 0 directories and 75 images in '10_food_classes_10_percent/train/fried_rice'.\n", + "There are 0 directories and 75 images in '10_food_classes_10_percent/train/grilled_salmon'.\n", "There are 10 directories and 0 images in '10_food_classes_10_percent/test'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/ramen'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/chicken_wings'.\n", "There are 0 directories and 250 images in '10_food_classes_10_percent/test/chicken_curry'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/fried_rice'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/sushi'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/hamburger'.\n", "There are 0 directories and 250 images in '10_food_classes_10_percent/test/pizza'.\n", + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/ramen'.\n", "There are 0 directories and 250 images in '10_food_classes_10_percent/test/ice_cream'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/grilled_salmon'.\n", "There are 0 directories and 250 images in '10_food_classes_10_percent/test/steak'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/chicken_wings'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/hamburger'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/sushi'.\n", - "There are 0 directories and 250 images in '10_food_classes_10_percent/test/fried_rice'.\n" + "There are 0 directories and 250 images in '10_food_classes_10_percent/test/grilled_salmon'.\n" ] } ], @@ -389,7 +436,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 10, "metadata": { "id": "tELTNwq6L43a" }, @@ -450,13 +497,13 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "QcBs8C5wJ0et", - "outputId": "35d11fff-8c73-4f12-a13d-0a7803972e9e" + "outputId": "8936bbe5-1532-474c-cbc7-57097d195101" }, "outputs": [ { @@ -501,24 +548,24 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "a30VfDiv3ZGc", - "outputId": "00de5349-a99a-4588-aea8-069e85a1a3a9" + "outputId": "62691305-5a58-4dd1-9866-30f1dbb61832" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "<_BatchDataset element_spec=(TensorSpec(shape=(None, 224, 224, 3), dtype=tf.float32, name=None), TensorSpec(shape=(None, 10), dtype=tf.float32, name=None))>" + "<_PrefetchDataset element_spec=(TensorSpec(shape=(None, 224, 224, 3), dtype=tf.float32, name=None), TensorSpec(shape=(None, 10), dtype=tf.float32, name=None))>" ] }, "metadata": {}, - "execution_count": 9 + "execution_count": 12 } ], "source": [ @@ -547,13 +594,13 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9mRe2rnv7YdW", - "outputId": "44780671-7a8f-4cc3-d728-6c46b9e1d087" + "outputId": "fee19872-c22b-4d08-d8a5-68bc0f5df968" }, "outputs": [ { @@ -573,7 +620,7 @@ ] }, "metadata": {}, - "execution_count": 10 + "execution_count": 13 } ], "source": [ @@ -592,13 +639,13 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "cZ25UPow7q5K", - "outputId": "210f4a33-9a25-42f7-9094-c83c97b42e75" + "outputId": "b4b295a6-6451-4079-e6b3-c7898b0883c0" }, "outputs": [ { @@ -606,345 +653,345 @@ "name": "stdout", "text": [ "tf.Tensor(\n", - "[[[[1.18658157e+02 1.34658173e+02 1.34658173e+02]\n", - " [1.18117348e+02 1.34117340e+02 1.34117340e+02]\n", - " [1.19637756e+02 1.35637756e+02 1.35637756e+02]\n", + "[[[[4.03979607e+01 3.83979607e+01 2.63979588e+01]\n", + " [3.82091827e+01 3.52091827e+01 2.63520412e+01]\n", + " [1.34438801e+01 1.20153084e+01 6.58673620e+00]\n", " ...\n", - " [5.63165398e+01 9.91634979e+01 9.18114929e+01]\n", - " [6.20816345e+01 1.09224518e+02 1.03224518e+02]\n", - " [6.39487991e+01 1.12260063e+02 1.08489639e+02]]\n", + " [4.07655144e+00 9.29084587e+00 1.16479626e+01]\n", + " [5.33162165e+00 1.13316212e+01 1.13316212e+01]\n", + " [9.43889081e-01 4.48470879e+00 5.48470879e+00]]\n", "\n", - " [[1.06357147e+02 1.22357147e+02 1.21357147e+02]\n", - " [1.09709190e+02 1.25709190e+02 1.24709190e+02]\n", - " [1.12872452e+02 1.28872452e+02 1.27872452e+02]\n", + " [[3.23316345e+01 2.99999981e+01 1.89948978e+01]\n", + " [3.34132652e+01 3.04132652e+01 2.34132652e+01]\n", + " [1.73418388e+01 1.59132671e+01 1.16122475e+01]\n", " ...\n", - " [6.32701912e+01 1.05913071e+02 9.67702332e+01]\n", - " [6.22856750e+01 1.07270393e+02 1.02076508e+02]\n", - " [5.61224899e+01 1.01571533e+02 9.63112946e+01]]\n", + " [2.99999046e+00 7.21428490e+00 1.02142849e+01]\n", + " [2.14795732e+00 7.14795732e+00 1.01479568e+01]\n", + " [2.55104303e-02 3.73980474e+00 6.73980474e+00]]\n", "\n", - " [[9.16428604e+01 1.06071434e+02 1.05857147e+02]\n", - " [9.68418427e+01 1.11270416e+02 1.11056129e+02]\n", - " [1.00045921e+02 1.14474495e+02 1.14260208e+02]\n", + " [[2.23520412e+01 1.93520412e+01 1.27806129e+01]\n", + " [3.54744911e+01 3.24030609e+01 2.75459175e+01]\n", + " [2.35510235e+01 2.19081650e+01 1.96938801e+01]\n", " ...\n", - " [8.43824387e+01 1.24550812e+02 1.16336548e+02]\n", - " [7.37497177e+01 1.15162979e+02 1.08994621e+02]\n", - " [2.96886349e+01 7.09029236e+01 6.69029236e+01]]\n", + " [4.50507975e+00 5.93366861e+00 1.01479626e+01]\n", + " [2.03060484e+00 6.48981571e+00 1.11581774e+01]\n", + " [2.42856693e+00 7.21428108e+00 1.38571386e+01]]\n", "\n", " ...\n", "\n", - " [[7.94541016e+01 8.68878021e+01 8.90306473e+01]\n", - " [8.81582336e+01 9.64031525e+01 9.78163910e+01]\n", - " [9.55510254e+01 1.03428596e+02 1.04954079e+02]\n", + " [[3.63571854e+01 2.31429234e+01 1.49286585e+01]\n", + " [4.67960548e+01 3.33675270e+01 2.71532631e+01]\n", + " [4.16276855e+01 2.79184933e+01 2.37246704e+01]\n", " ...\n", - " [1.24428589e+02 1.21428589e+02 1.16000000e+02]\n", - " [1.22801048e+02 1.19586754e+02 1.12158165e+02]\n", - " [1.22933716e+02 1.19719421e+02 1.11862244e+02]]\n", + " [0.00000000e+00 4.00000000e+00 5.00000000e+00]\n", + " [0.00000000e+00 4.00000000e+00 5.00000000e+00]\n", + " [0.00000000e+00 3.78573608e+00 4.78573608e+00]]\n", "\n", - " [[9.76941833e+01 1.07643173e+02 1.08668678e+02]\n", - " [1.03255264e+02 1.13250168e+02 1.12250168e+02]\n", - " [9.99133377e+01 1.10097023e+02 1.08500069e+02]\n", + " [[3.39235458e+01 2.29235477e+01 1.89235477e+01]\n", + " [4.26275215e+01 3.16275234e+01 2.76377296e+01]\n", + " [3.58826218e+01 2.48264866e+01 2.25407963e+01]\n", " ...\n", - " [1.30443985e+02 1.27443985e+02 1.18586807e+02]\n", - " [1.29714355e+02 1.25714355e+02 1.14790840e+02]\n", - " [1.32857300e+02 1.27000122e+02 1.15071533e+02]]\n", + " [0.00000000e+00 3.19898486e+00 4.19898510e+00]\n", + " [0.00000000e+00 3.99489832e+00 4.99489832e+00]\n", + " [1.00000000e+00 5.00000000e+00 6.00000000e+00]]\n", "\n", - " [[9.17858047e+01 1.03785805e+02 1.01785805e+02]\n", - " [8.95970154e+01 1.01597015e+02 9.95970154e+01]\n", - " [8.95051575e+01 1.01505157e+02 9.75051575e+01]\n", + " [[4.15204048e+01 3.25204048e+01 2.75204029e+01]\n", + " [3.45559959e+01 2.45559959e+01 2.25559959e+01]\n", + " [3.27857513e+01 2.27857494e+01 2.15714645e+01]\n", " ...\n", - " [1.35357208e+02 1.33505112e+02 1.22775513e+02]\n", - " [1.34025513e+02 1.30025513e+02 1.18357147e+02]\n", - " [1.33086792e+02 1.29857208e+02 1.15545952e+02]]]\n", + " [0.00000000e+00 2.92345881e+00 3.92345881e+00]\n", + " [0.00000000e+00 2.97449350e+00 3.97449350e+00]\n", + " [0.00000000e+00 4.00000000e+00 5.00000000e+00]]]\n", "\n", "\n", - " [[[1.00561228e+01 1.34846935e+01 1.30714283e+01]\n", - " [1.87397976e+01 1.10255098e+01 8.76530552e+00]\n", - " [2.44948978e+01 1.09336739e+01 4.22448969e+00]\n", + " [[[3.35714293e+00 3.35714293e+00 3.35714293e+00]\n", + " [3.35714293e+00 3.35714293e+00 3.35714293e+00]\n", + " [3.35714293e+00 3.35714293e+00 3.35714293e+00]\n", " ...\n", - " [1.84438972e+01 1.08571215e+01 8.43875980e+00]\n", - " [1.86428566e+01 1.16428576e+01 5.64285707e+00]\n", - " [1.95867577e+01 1.18724718e+01 4.22961426e+00]]\n", + " [4.06427917e+01 1.42852783e+00 3.92347717e+00]\n", + " [3.24999733e+01 6.42857194e-01 1.57141554e+00]\n", + " [2.96428566e+01 6.42857194e-01 2.64285707e+00]]\n", "\n", - " [[1.50255108e+01 1.14030609e+01 1.49285717e+01]\n", - " [1.97806129e+01 9.20408058e+00 1.28622456e+01]\n", - " [1.88571415e+01 7.15816259e+00 6.84183645e+00]\n", + " [[3.92857170e+00 3.92857170e+00 3.92857170e+00]\n", + " [3.92857170e+00 3.92857170e+00 3.92857170e+00]\n", + " [3.92857170e+00 3.92857170e+00 3.92857170e+00]\n", " ...\n", - " [1.63265114e+01 1.22703876e+01 9.66830635e+00]\n", - " [1.59438534e+01 1.30000134e+01 7.72956896e+00]\n", - " [1.64080982e+01 1.43316650e+01 6.19381332e+00]]\n", + " [3.86427917e+01 2.00000000e+00 3.78573608e+00]\n", + " [3.47193642e+01 2.86224651e+00 5.79080486e+00]\n", + " [3.19285717e+01 2.92857170e+00 4.92857170e+00]]\n", "\n", - " [[1.38571434e+01 7.85714293e+00 9.42857170e+00]\n", - " [1.84438782e+01 1.00867357e+01 1.43010216e+01]\n", - " [1.81887741e+01 1.03367348e+01 1.41887751e+01]\n", + " [[6.00000000e+00 6.00000000e+00 6.00000000e+00]\n", + " [6.00000000e+00 6.00000000e+00 6.00000000e+00]\n", + " [6.00000000e+00 6.00000000e+00 6.00000000e+00]\n", " ...\n", - " [1.38112078e+01 1.21683502e+01 8.71933651e+00]\n", - " [1.24285717e+01 1.30000000e+01 7.42857170e+00]\n", - " [1.30765381e+01 1.40765381e+01 8.29082394e+00]]\n", + " [3.90000000e+01 4.66329956e+00 5.49494934e+00]\n", + " [3.51989784e+01 5.19897699e+00 7.19897699e+00]\n", + " [3.39234619e+01 3.92346191e+00 5.92346191e+00]]\n", "\n", " ...\n", "\n", - " [[1.65714722e+01 1.17857361e+01 8.50511646e+00]\n", - " [1.60561237e+01 1.00561237e+01 1.15153484e+01]\n", - " [1.53060913e+01 9.21426392e+00 1.06938648e+01]\n", + " [[1.10566269e+02 1.59785629e+02 1.87571304e+02]\n", + " [1.09642815e+02 1.59658096e+02 1.87158051e+02]\n", + " [1.11811188e+02 1.61428513e+02 1.89071320e+02]\n", " ...\n", - " [1.58775539e+01 1.18316450e+01 8.78573608e+00]\n", - " [1.82703991e+01 1.32703981e+01 1.02703981e+01]\n", - " [1.81377335e+01 1.31377335e+01 9.35199738e+00]]\n", + " [0.00000000e+00 3.00000000e+00 1.49493527e+00]\n", + " [0.00000000e+00 3.01530743e+00 1.01530743e+00]\n", + " [0.00000000e+00 4.00000000e+00 2.00000000e+00]]\n", "\n", - " [[1.50000000e+01 1.00000000e+01 6.64285707e+00]\n", - " [1.59948969e+01 9.99489689e+00 1.19847174e+01]\n", - " [1.60714417e+01 1.00000000e+01 1.42143250e+01]\n", + " [[1.11000000e+02 1.54785675e+02 1.81857117e+02]\n", + " [1.05285713e+02 1.50994873e+02 1.77005051e+02]\n", + " [1.10857147e+02 1.56316315e+02 1.80984680e+02]\n", " ...\n", - " [1.70561352e+01 1.30561342e+01 1.04846621e+01]\n", - " [1.68622208e+01 1.28622208e+01 9.86222076e+00]\n", - " [1.79540749e+01 1.29540758e+01 8.95407581e+00]]\n", + " [1.98956549e-01 2.12751484e+00 0.00000000e+00]\n", + " [0.00000000e+00 1.93366230e+00 9.33662236e-01]\n", + " [0.00000000e+00 2.42861938e+00 1.42861938e+00]]\n", "\n", - " [[1.63571777e+01 1.13571777e+01 8.00003529e+00]\n", - " [1.60000000e+01 1.00000000e+01 1.37142868e+01]\n", - " [1.56428223e+01 8.64282227e+00 1.59234619e+01]\n", + " [[1.06316200e+02 1.46316193e+02 1.72316193e+02]\n", + " [1.07423492e+02 1.48617310e+02 1.73066315e+02]\n", + " [1.11198959e+02 1.52637680e+02 1.76918320e+02]\n", " ...\n", - " [1.78521194e+01 1.44949112e+01 1.32806473e+01]\n", - " [1.59285583e+01 1.19285583e+01 8.92855835e+00]\n", - " [1.73571777e+01 1.23571777e+01 8.35717773e+00]]]\n", + " [2.86241913e+00 3.07668304e+00 1.27565038e+00]\n", + " [3.57177734e-01 2.35717773e+00 1.35717773e+00]\n", + " [6.42822266e-01 1.64282227e+00 3.64282227e+00]]]\n", "\n", "\n", - " [[[9.96428604e+01 4.36428566e+01 2.66428566e+01]\n", - " [1.00974487e+02 4.49744911e+01 2.79744892e+01]\n", - " [1.00928566e+02 4.55714302e+01 2.83571434e+01]\n", + " [[[0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", + " [9.28571701e-01 9.28571701e-01 0.00000000e+00]\n", + " [0.00000000e+00 2.00000000e+00 0.00000000e+00]\n", " ...\n", - " [1.59892273e+02 1.26616730e+02 9.66270294e+01]\n", - " [9.49591599e+01 5.68213806e+01 3.52959061e+01]\n", - " [8.11578674e+01 3.91578674e+01 2.31578693e+01]]\n", + " [2.33164978e+00 6.61736393e+00 5.56102216e-01]\n", + " [6.86227226e+00 1.21479864e+01 2.60205960e+00]\n", + " [1.15000353e+01 1.70153637e+01 4.77042055e+00]]\n", "\n", - " [[9.77397995e+01 4.17397957e+01 2.47397957e+01]\n", - " [9.90051041e+01 4.30051041e+01 2.60051022e+01]\n", - " [1.00770409e+02 4.54132690e+01 2.81989803e+01]\n", + " [[0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", + " [9.28571701e-01 9.28571701e-01 0.00000000e+00]\n", + " [0.00000000e+00 2.00000000e+00 0.00000000e+00]\n", " ...\n", - " [6.65968018e+01 3.01681900e+01 2.42336082e+00]\n", - " [6.98725586e+01 2.89388580e+01 9.08175468e+00]\n", - " [8.22501984e+01 3.64389687e+01 2.14440765e+01]]\n", + " [2.83317585e+01 3.12603302e+01 1.37603302e+01]\n", + " [4.12653542e+01 4.41939240e+01 2.68418865e+01]\n", + " [4.54744873e+01 4.83775444e+01 3.11683693e+01]]\n", "\n", - " [[1.03571426e+02 4.71428566e+01 3.23571434e+01]\n", - " [1.00071426e+02 4.40714264e+01 2.90714283e+01]\n", - " [9.82602081e+01 4.22602043e+01 2.72602043e+01]\n", + " [[0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", + " [9.28571701e-01 9.28571701e-01 0.00000000e+00]\n", + " [0.00000000e+00 2.00000000e+00 0.00000000e+00]\n", " ...\n", - " [8.19692001e+01 4.12548027e+01 1.43263178e+01]\n", - " [8.23265686e+01 3.61989899e+01 1.27245321e+01]\n", - " [8.15460205e+01 3.23317337e+01 1.40460205e+01]]\n", + " [5.45765457e+01 5.73622589e+01 3.06684151e+01]\n", + " [5.38877335e+01 5.58877335e+01 3.24438820e+01]\n", + " [5.05764694e+01 5.24999313e+01 3.17295456e+01]]\n", "\n", " ...\n", "\n", - " [[7.69943161e+01 4.02750015e+01 7.95883179e+00]\n", - " [1.49617050e+02 1.07101807e+02 6.84590378e+01]\n", - " [1.72382751e+02 1.23142990e+02 7.40257111e+01]\n", + " [[1.93520546e+01 8.70917225e+00 0.00000000e+00]\n", + " [1.94847107e+01 8.84182739e+00 0.00000000e+00]\n", + " [1.94285812e+01 8.99999142e+00 0.00000000e+00]\n", " ...\n", - " [1.24050819e+02 1.10096733e+02 6.00713196e+01]\n", - " [1.25897758e+02 1.11469231e+02 6.21835861e+01]\n", - " [1.36408173e+02 1.21979645e+02 7.45511169e+01]]\n", + " [5.45714111e+01 3.49540253e+01 2.14263916e-01]\n", + " [5.56428223e+01 3.28571472e+01 0.00000000e+00]\n", + " [5.00050087e+01 3.23519859e+01 0.00000000e+00]]\n", "\n", - " [[5.31785240e+01 2.17499924e+01 2.08678961e+00]\n", - " [8.83721466e+01 5.16629753e+01 2.31681156e+01]\n", - " [1.69887405e+02 1.21387421e+02 8.01731873e+01]\n", + " [[2.09744968e+01 7.97449589e+00 0.00000000e+00]\n", + " [2.10663280e+01 8.06632710e+00 0.00000000e+00]\n", + " [2.11428757e+01 9.14287472e+00 0.00000000e+00]\n", " ...\n", - " [1.03188866e+02 9.80715027e+01 4.75154610e+01]\n", - " [1.07494804e+02 9.97652588e+01 5.28469086e+01]\n", - " [1.18214325e+02 1.07500092e+02 6.25715332e+01]]\n", + " [5.20714111e+01 3.15560493e+01 2.14263916e-01]\n", + " [5.47907753e+01 3.19387627e+01 8.62248957e-01]\n", + " [4.86937141e+01 3.06887264e+01 0.00000000e+00]]\n", "\n", - " [[4.53569336e+01 1.83263817e+01 7.04070187e+00]\n", - " [5.42549515e+01 2.05866871e+01 1.83662802e-01]\n", - " [1.09019783e+02 6.42289886e+01 2.82239151e+01]\n", + " [[2.30561142e+01 1.00561152e+01 1.41325808e+00]\n", + " [2.33112164e+01 1.03112164e+01 1.31121600e+00]\n", + " [2.28571396e+01 1.08571386e+01 0.00000000e+00]\n", " ...\n", - " [9.87245026e+01 9.85969162e+01 4.91582108e+01]\n", - " [8.90457077e+01 8.59538651e+01 4.18059921e+01]\n", - " [9.70410385e+01 9.20410385e+01 5.07553978e+01]]]\n", + " [4.99286194e+01 3.05714111e+01 4.64285278e+00]\n", + " [5.13316307e+01 3.10000000e+01 5.28570557e+00]\n", + " [4.60560303e+01 2.95407753e+01 2.69891500e+00]]]\n", "\n", "\n", " ...\n", "\n", "\n", - " [[[2.54000000e+02 2.54000000e+02 2.54000000e+02]\n", - " [2.54000000e+02 2.54000000e+02 2.54000000e+02]\n", - " [2.54000000e+02 2.54000000e+02 2.54000000e+02]\n", + " [[[2.26984695e+02 2.44397949e+02 1.98158173e+02]\n", + " [2.25857132e+02 2.43857132e+02 1.94000000e+02]\n", + " [2.29857132e+02 2.49933670e+02 1.96704086e+02]\n", " ...\n", - " [1.03785736e+02 1.04785736e+02 9.07857361e+01]\n", - " [1.04071442e+02 1.05071442e+02 9.10714417e+01]\n", - " [1.05000000e+02 1.06000000e+02 9.20000000e+01]]\n", + " [1.83494812e+02 2.35066284e+02 1.99280548e+02]\n", + " [1.82188797e+02 2.36188797e+02 2.00188797e+02]\n", + " [1.80928467e+02 2.36101974e+02 1.99515228e+02]]\n", "\n", - " [[2.54000000e+02 2.54000000e+02 2.54000000e+02]\n", - " [2.54000000e+02 2.54000000e+02 2.54000000e+02]\n", - " [2.54000000e+02 2.54000000e+02 2.54000000e+02]\n", + " [[2.28903061e+02 2.48903061e+02 1.96096939e+02]\n", + " [2.26285706e+02 2.46285706e+02 1.93295914e+02]\n", + " [2.30586731e+02 2.51229584e+02 1.99872452e+02]\n", " ...\n", - " [1.04729614e+02 1.05729614e+02 9.17296143e+01]\n", - " [1.04933678e+02 1.05933678e+02 9.19336777e+01]\n", - " [1.05000000e+02 1.06000000e+02 9.20000000e+01]]\n", + " [1.86387695e+02 2.36499939e+02 2.01015289e+02]\n", + " [1.85846954e+02 2.37857162e+02 2.01857162e+02]\n", + " [1.86025452e+02 2.38831635e+02 2.02831635e+02]]\n", "\n", - " [[2.54000000e+02 2.54000000e+02 2.54000000e+02]\n", - " [2.54000000e+02 2.54000000e+02 2.54000000e+02]\n", - " [2.54000000e+02 2.54000000e+02 2.54000000e+02]\n", + " [[2.23714294e+02 2.48928574e+02 1.90285721e+02]\n", + " [2.23000000e+02 2.46484680e+02 1.90142853e+02]\n", + " [2.27260193e+02 2.49596939e+02 2.00903061e+02]\n", " ...\n", - " [1.05382637e+02 1.06382637e+02 9.23826370e+01]\n", - " [1.05000000e+02 1.06000000e+02 9.20000000e+01]\n", - " [1.05000000e+02 1.06000000e+02 9.20000000e+01]]\n", + " [1.89336716e+02 2.38188812e+02 2.02806183e+02]\n", + " [1.89943863e+02 2.39301010e+02 2.04086731e+02]\n", + " [1.88147934e+02 2.37505081e+02 2.02719360e+02]]\n", "\n", " ...\n", "\n", - " [[1.51000366e+02 1.23148277e+02 8.75717087e+01]\n", - " [1.81531052e+02 1.54173843e+02 1.14031006e+02]\n", - " [2.01418442e+02 1.77464355e+02 1.29372528e+02]\n", + " [[2.42000061e+02 2.52428589e+02 4.22244301e+01]\n", + " [2.43484741e+02 2.52857162e+02 4.04285278e+01]\n", + " [2.45571472e+02 2.51974548e+02 3.61224136e+01]\n", " ...\n", - " [1.56698837e+02 1.34270309e+02 9.72243958e+01]\n", - " [1.67561020e+02 1.44703964e+02 1.07703964e+02]\n", - " [1.80540848e+02 1.55683792e+02 1.19469528e+02]]\n", + " [2.39785736e+02 2.42000000e+02 9.33149242e+00]\n", + " [2.39000000e+02 2.46872482e+02 5.04076576e+00]\n", + " [2.39137741e+02 2.48494919e+02 1.04847336e+01]]\n", "\n", - " [[1.66280731e+02 1.41760361e+02 1.06020538e+02]\n", - " [1.74851913e+02 1.51122360e+02 1.13341789e+02]\n", - " [1.67749680e+02 1.45892563e+02 1.07321213e+02]\n", + " [[2.44382660e+02 2.51428589e+02 3.36224327e+01]\n", + " [2.40005066e+02 2.47938751e+02 2.70050488e+01]\n", + " [2.45499939e+02 2.51285645e+02 2.87295036e+01]\n", " ...\n", - " [1.67688797e+02 1.49688797e+02 1.11688797e+02]\n", - " [1.50270462e+02 1.32270462e+02 9.61377792e+01]\n", - " [1.44224365e+02 1.26224358e+02 9.02243576e+01]]\n", + " [2.41714294e+02 2.42285767e+02 2.85693359e+00]\n", + " [2.41209229e+02 2.45852020e+02 6.63377419e-02]\n", + " [2.42071442e+02 2.45760162e+02 9.92864990e+00]]\n", "\n", - " [[1.86229233e+02 1.67770065e+02 1.31999649e+02]\n", - " [1.52626785e+02 1.34698318e+02 1.02295227e+02]\n", - " [1.28321167e+02 1.11397705e+02 8.26171722e+01]\n", + " [[2.44459152e+02 2.52459152e+02 2.99183178e+01]\n", + " [2.41520538e+02 2.49852203e+02 2.42807083e+01]\n", + " [2.41566452e+02 2.49061386e+02 1.95766068e+01]\n", " ...\n", - " [1.54229584e+02 1.36306122e+02 9.60765305e+01]\n", - " [1.69928619e+02 1.51928619e+02 1.12020470e+02]\n", - " [1.49765457e+02 1.34765457e+02 9.57654572e+01]]]\n", + " [2.42347031e+02 2.42653183e+02 3.15275550e+00]\n", + " [2.45071533e+02 2.43331665e+02 0.00000000e+00]\n", + " [2.45071533e+02 2.40642822e+02 6.14306641e+00]]]\n", "\n", "\n", - " [[[1.60000000e+01 9.00000000e+00 0.00000000e+00]\n", - " [1.80373096e+01 8.03730869e+00 0.00000000e+00]\n", - " [2.04422836e+01 8.15210438e+00 1.52678585e+00]\n", + " [[[1.26428576e+01 4.64285707e+00 1.64285719e+00]\n", + " [1.29744902e+01 4.97448969e+00 1.97448993e+00]\n", + " [1.48571434e+01 6.85714293e+00 3.85714293e+00]\n", " ...\n", - " [1.41512177e+02 8.60389099e+01 5.67488060e+01]\n", - " [1.31497604e+02 7.44976120e+01 4.74976120e+01]\n", - " [9.87061234e+01 4.07061234e+01 1.82527027e+01]]\n", + " [2.54403122e+02 2.47842194e+02 2.41413666e+02]\n", + " [2.51811249e+02 2.54668365e+02 2.45525482e+02]\n", + " [2.45683319e+02 2.47968964e+02 2.30611786e+02]]\n", "\n", - " [[1.72560596e+01 9.60108471e+00 1.92857170e+00]\n", - " [1.90000000e+01 8.00000000e+00 2.00000000e+00]\n", - " [2.05267868e+01 7.23660707e+00 3.52678585e+00]\n", + " [[1.40000000e+01 7.00000000e+00 1.00000000e+00]\n", + " [1.40000000e+01 7.00000000e+00 1.00000000e+00]\n", + " [1.42857141e+01 7.28571415e+00 1.28571415e+00]\n", " ...\n", - " [1.37288544e+02 7.97384033e+01 5.13768768e+01]\n", - " [1.32715057e+02 7.09780884e+01 4.58486443e+01]\n", - " [1.25001762e+02 6.13413200e+01 3.88709908e+01]]\n", + " [2.55000000e+02 2.53637894e+02 2.47796143e+02]\n", + " [2.51147980e+02 2.55000000e+02 2.48586685e+02]\n", + " [2.42167984e+02 2.42453629e+02 2.26933090e+02]]\n", "\n", - " [[1.80000000e+01 8.78571415e+00 4.42857170e+00]\n", - " [2.12598858e+01 7.25988531e+00 4.25988531e+00]\n", - " [2.27633934e+01 7.23660707e+00 6.52678585e+00]\n", + " [[1.74285717e+01 8.42857170e+00 3.42857170e+00]\n", + " [1.55000000e+01 6.50000000e+00 1.50000000e+00]\n", + " [1.52142859e+01 6.21428585e+00 1.21428585e+00]\n", " ...\n", - " [1.35598724e+02 7.42236252e+01 4.85731277e+01]\n", - " [1.30317886e+02 6.42071915e+01 3.97330399e+01]\n", - " [1.44314301e+02 7.44399185e+01 5.00696678e+01]]\n", + " [2.51596878e+02 2.54234772e+02 2.48500168e+02]\n", + " [2.49943909e+02 2.55000000e+02 2.49515259e+02]\n", + " [2.46663010e+02 2.44076218e+02 2.31234299e+02]]\n", "\n", " ...\n", "\n", - " [[5.50862360e+00 4.50862360e+00 5.08623779e-01]\n", - " [4.74013519e+00 3.74013519e+00 0.00000000e+00]\n", - " [4.00000000e+00 3.00000000e+00 0.00000000e+00]\n", + " [[1.67443893e+02 4.88724251e+01 7.21940184e+00]\n", + " [1.69280670e+02 5.32092361e+01 6.42352057e+00]\n", + " [1.74969254e+02 5.93978310e+01 7.75497341e+00]\n", " ...\n", - " [2.16505070e+01 1.66505070e+01 1.26505070e+01]\n", - " [2.12142639e+01 1.62142639e+01 1.22142639e+01]\n", - " [2.12142639e+01 1.62142639e+01 1.22142639e+01]]\n", + " [2.50168350e+02 1.41168350e+02 5.81683540e+01]\n", + " [2.47872421e+02 1.38872421e+02 5.38724251e+01]\n", + " [2.44719345e+02 1.35719345e+02 5.07193527e+01]]\n", "\n", - " [[5.60107565e+00 4.60107565e+00 6.01075709e-01]\n", - " [5.00000000e+00 4.00000000e+00 0.00000000e+00]\n", - " [5.00000000e+00 4.00000000e+00 0.00000000e+00]\n", + " [[1.73382751e+02 5.90052605e+01 5.57659721e+00]\n", + " [2.03882706e+02 9.28878403e+01 3.64540672e+01]\n", + " [1.64061234e+02 5.55459785e+01 0.00000000e+00]\n", " ...\n", - " [2.64329834e+01 2.14329834e+01 1.74329834e+01]\n", - " [2.13169250e+01 1.63169250e+01 1.23169250e+01]\n", - " [1.90251942e+01 1.40251951e+01 1.00251951e+01]]\n", + " [2.48071442e+02 1.39071442e+02 5.60714417e+01]\n", + " [2.48005096e+02 1.39005096e+02 5.40051041e+01]\n", + " [2.46811218e+02 1.37811218e+02 5.28112221e+01]]\n", "\n", - " [[3.76879120e+00 2.76879120e+00 0.00000000e+00]\n", - " [5.02072906e+00 4.02072906e+00 2.07291134e-02]\n", - " [5.84790373e+00 4.84790373e+00 8.47903728e-01]\n", + " [[2.00730042e+02 9.63984756e+01 2.46585007e+01]\n", + " [1.90377228e+02 8.82853928e+01 1.52597713e+01]\n", + " [2.13363831e+02 1.13869080e+02 4.12261124e+01]\n", " ...\n", - " [2.81019630e+01 2.31019630e+01 1.91019630e+01]\n", - " [2.44732056e+01 1.94732056e+01 1.54732056e+01]\n", - " [2.17098389e+01 1.67098389e+01 1.27098389e+01]]]\n", + " [2.49505081e+02 1.40505081e+02 5.75050888e+01]\n", + " [2.48617310e+02 1.39617310e+02 5.46173058e+01]\n", + " [2.47285645e+02 1.38285645e+02 5.32856445e+01]]]\n", "\n", "\n", - " [[[1.38484695e+02 1.24229591e+02 1.24357140e+02]\n", - " [1.37551025e+02 1.25474495e+02 1.27500008e+02]\n", - " [1.41642853e+02 1.30642853e+02 1.37071426e+02]\n", + " [[[1.21903061e+02 1.13903061e+02 9.49030609e+01]\n", + " [1.25306122e+02 1.17306122e+02 9.83061218e+01]\n", + " [1.13071426e+02 1.07061226e+02 8.85663223e+01]\n", " ...\n", - " [1.36806229e+02 7.66633682e+01 7.10919342e+01]\n", - " [1.23571205e+02 7.72651825e+01 6.48824997e+01]\n", - " [8.62853622e+01 5.75712547e+01 3.92854691e+01]]\n", + " [2.44000000e+02 1.28010239e+02 1.07505119e+02]\n", + " [2.42739822e+02 1.33214355e+02 1.12500053e+02]\n", + " [2.49352142e+02 1.43581757e+02 1.21581749e+02]]\n", "\n", - " [[1.33163269e+02 1.16306122e+02 1.16331627e+02]\n", - " [1.33005096e+02 1.17852043e+02 1.20714287e+02]\n", - " [1.35816330e+02 1.23244896e+02 1.30459183e+02]\n", + " [[1.34668365e+02 1.23668365e+02 1.05668365e+02]\n", + " [1.17265305e+02 1.09265305e+02 9.02653046e+01]\n", + " [1.20423462e+02 1.11994896e+02 9.47091827e+01]\n", " ...\n", - " [9.15152588e+01 5.30867348e+01 5.65152817e+01]\n", - " [7.96835403e+01 5.30356674e+01 5.03111496e+01]\n", - " [5.42649994e+01 4.33110542e+01 3.53110161e+01]]\n", + " [2.46270370e+02 1.36913239e+02 1.15556145e+02]\n", + " [2.44147949e+02 1.39280640e+02 1.17214294e+02]\n", + " [2.40428497e+02 1.40617310e+02 1.17688736e+02]]\n", "\n", - " [[1.42214294e+02 1.21928574e+02 1.23071426e+02]\n", - " [1.40397949e+02 1.24183670e+02 1.27112244e+02]\n", - " [1.40928558e+02 1.28188782e+02 1.35739792e+02]\n", + " [[9.90867310e+01 8.80867310e+01 7.00867310e+01]\n", + " [9.75663223e+01 8.65663223e+01 6.85663223e+01]\n", + " [1.01403061e+02 9.00459137e+01 7.38316269e+01]\n", " ...\n", - " [5.83366356e+01 4.21683273e+01 5.07397346e+01]\n", - " [5.45663376e+01 4.67398643e+01 5.04082108e+01]\n", - " [5.12038918e+01 5.11376419e+01 5.01376076e+01]]\n", + " [2.43642838e+02 1.38642838e+02 1.17474487e+02]\n", + " [2.38199005e+02 1.38071472e+02 1.15699020e+02]\n", + " [2.46622635e+02 1.50622635e+02 1.27051201e+02]]\n", "\n", " ...\n", "\n", - " [[7.41377640e+01 3.99948845e+01 2.08571262e+01]\n", - " [6.82295914e+01 3.51989784e+01 1.61989784e+01]\n", - " [6.40000000e+01 3.34285736e+01 1.58571434e+01]\n", + " [[4.40509872e+01 2.30509853e+01 1.80509853e+01]\n", + " [4.47040977e+01 2.37040977e+01 1.87040977e+01]\n", + " [4.45969009e+01 2.35969009e+01 1.85969009e+01]\n", " ...\n", - " [1.67765320e+02 1.39551056e+02 1.03193848e+02]\n", - " [1.69755112e+02 1.43755112e+02 1.06755119e+02]\n", - " [1.64994873e+02 1.39209167e+02 1.01566284e+02]]\n", + " [2.15785736e+02 2.25785736e+02 2.26785736e+02]\n", + " [2.14142822e+02 2.24142822e+02 2.25142822e+02]\n", + " [2.14571442e+02 2.24571442e+02 2.25571442e+02]]\n", "\n", - " [[7.61020660e+01 3.91938820e+01 2.01479759e+01]\n", - " [7.46531754e+01 3.96531448e+01 2.07194729e+01]\n", - " [6.97041855e+01 3.91327591e+01 2.15613327e+01]\n", + " [[4.53775406e+01 2.13775425e+01 1.73775425e+01]\n", + " [4.85816078e+01 2.45816097e+01 2.05816097e+01]\n", + " [4.61989784e+01 2.21989784e+01 1.81989784e+01]\n", " ...\n", - " [1.71642914e+02 1.43428650e+02 1.07071442e+02]\n", - " [1.69999908e+02 1.43999908e+02 1.06999908e+02]\n", - " [1.64494888e+02 1.39494888e+02 9.94948883e+01]]\n", + " [2.15913254e+02 2.25913254e+02 2.26913254e+02]\n", + " [2.13857117e+02 2.23857117e+02 2.24857117e+02]\n", + " [2.14285736e+02 2.24285736e+02 2.25285736e+02]]\n", "\n", - " [[7.87857056e+01 4.10153008e+01 2.20153008e+01]\n", - " [7.00408401e+01 3.48979874e+01 1.59694157e+01]\n", - " [7.56938705e+01 4.48469353e+01 2.68469372e+01]\n", + " [[4.67449417e+01 2.27449436e+01 1.87449436e+01]\n", + " [4.51938820e+01 2.11938820e+01 1.71938820e+01]\n", + " [4.77143555e+01 2.37143555e+01 1.97143555e+01]\n", " ...\n", - " [1.64714294e+02 1.36500031e+02 1.00142822e+02]\n", - " [1.55663269e+02 1.30663269e+02 9.06632614e+01]\n", - " [1.59474701e+02 1.34474701e+02 9.44746933e+01]]]], shape=(32, 224, 224, 3), dtype=float32) tf.Tensor(\n", - "[[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n", - " [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]\n", + " [2.15142914e+02 2.25142914e+02 2.26142914e+02]\n", + " [2.14311249e+02 2.24311249e+02 2.25311249e+02]\n", + " [2.15071533e+02 2.25071533e+02 2.26071533e+02]]]], shape=(32, 224, 224, 3), dtype=float32) tf.Tensor(\n", + "[[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n", + " [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]\n", + " [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", + " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]\n", + " [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]\n", - " [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]\n", " [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]\n", - " [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]\n", - " [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n", + " [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]\n", + " [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]\n", " [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]\n", " [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n", - " [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]\n", - " [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]\n", - " [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n", - " [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]\n", - " [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n", - " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n", - " [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n", " [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n", - " [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n", - " [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]\n", - " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n", - " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n", " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n", - " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n", - " [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n", - " [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n", + " [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n", + " [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n", + " [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n", + " [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n", - " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]], shape=(32, 10), dtype=float32)\n" + " [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n", + " [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]\n", + " [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]], shape=(32, 10), dtype=float32)\n" ] } ], @@ -996,13 +1043,13 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ayNga8DsJLPa", - "outputId": "955e6fca-2837-4207-9bca-cbb7517fa01e" + "outputId": "931ae9a1-80d0-4878-f899-590ba269a624" }, "outputs": [ { @@ -1010,20 +1057,20 @@ "name": "stdout", "text": [ "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/efficientnet_v2/efficientnetv2-b0_notop.h5\n", - "24274472/24274472 [==============================] - 0s 0us/step\n", + "24274472/24274472 [==============================] - 2s 0us/step\n", "Shape after base_model: (None, 7, 7, 1280)\n", "After GlobalAveragePooling2D(): (None, 1280)\n", - "Saving TensorBoard log files to: transfer_learning/10_percent_feature_extract/20230818-014007\n", + "Saving TensorBoard log files to: logs/fit/\n", "Epoch 1/5\n", - "24/24 [==============================] - 20s 156ms/step - loss: 1.8704 - accuracy: 0.4387 - val_loss: 1.2824 - val_accuracy: 0.7418\n", + "24/24 [==============================] - 21s 371ms/step - loss: 1.9282 - accuracy: 0.4120 - val_loss: 1.3456 - val_accuracy: 0.7220\n", "Epoch 2/5\n", - "24/24 [==============================] - 2s 85ms/step - loss: 1.1395 - accuracy: 0.7533 - val_loss: 0.8783 - val_accuracy: 0.8010\n", + "24/24 [==============================] - 4s 130ms/step - loss: 1.1641 - accuracy: 0.7427 - val_loss: 0.8849 - val_accuracy: 0.8240\n", "Epoch 3/5\n", - "24/24 [==============================] - 2s 67ms/step - loss: 0.8327 - accuracy: 0.8147 - val_loss: 0.7168 - val_accuracy: 0.8322\n", + "24/24 [==============================] - 5s 195ms/step - loss: 0.8507 - accuracy: 0.8200 - val_loss: 0.7335 - val_accuracy: 0.8355\n", "Epoch 4/5\n", - "24/24 [==============================] - 2s 85ms/step - loss: 0.6915 - accuracy: 0.8453 - val_loss: 0.6149 - val_accuracy: 0.8520\n", + "24/24 [==============================] - 5s 174ms/step - loss: 0.6879 - accuracy: 0.8440 - val_loss: 0.6350 - val_accuracy: 0.8388\n", "Epoch 5/5\n", - "24/24 [==============================] - 2s 86ms/step - loss: 0.5813 - accuracy: 0.8720 - val_loss: 0.5555 - val_accuracy: 0.8569\n" + "24/24 [==============================] - 4s 131ms/step - loss: 0.5955 - accuracy: 0.8667 - val_loss: 0.5508 - val_accuracy: 0.8684\n" ] } ], @@ -1071,7 +1118,7 @@ " # Go through less of the validation data so epochs are faster (we want faster experiments!)\n", " validation_steps=int(0.25 * len(test_data_10_percent)),\n", " # Track our model's training logs for visualization later\n", - " callbacks=[create_tensorboard_callback(\"transfer_learning\", \"10_percent_feature_extract\")])" + " callbacks=[create_tensorboard_callback(\"10_percent_feature_extract\")])" ] }, { @@ -1099,13 +1146,13 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "lUuQOyKv4_27", - "outputId": "7e8f891e-68ba-4a95-e809-f0e1dba4cec2" + "outputId": "59d6b4a5-6122-4b41-a568-9ea8b3a92d78" }, "outputs": [ { @@ -1404,13 +1451,13 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "0gKubJmUu91N", - "outputId": "c95e6e11-671e-4d43-a83d-10cafb8874a5" + "outputId": "38afc5bf-7cfa-4fcb-c3fc-58a1d180321b" }, "outputs": [ { @@ -1419,774 +1466,771 @@ "text": [ "Model: \"efficientnetv2-b0\"\n", "__________________________________________________________________________________________________\n", - " Layer (type) Output Shape Param # Connected to \n", + " Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", - " input_1 (InputLayer) [(None, None, None, 0 [] \n", - " 3)] \n", + " input_1 (InputLayer) [(None, None, None, 3)] 0 [] \n", " \n", - " rescaling (Rescaling) (None, None, None, 0 ['input_1[0][0]'] \n", - " 3) \n", + " rescaling (Rescaling) (None, None, None, 3) 0 ['input_1[0][0]'] \n", " \n", - " normalization (Normalization) (None, None, None, 0 ['rescaling[0][0]'] \n", - " 3) \n", + " normalization (Normalizati (None, None, None, 3) 0 ['rescaling[0][0]'] \n", + " on) \n", " \n", - " stem_conv (Conv2D) (None, None, None, 864 ['normalization[0][0]'] \n", - " 32) \n", + " stem_conv (Conv2D) (None, None, None, 32) 864 ['normalization[0][0]'] \n", " \n", - " stem_bn (BatchNormalization) (None, None, None, 128 ['stem_conv[0][0]'] \n", - " 32) \n", + " stem_bn (BatchNormalizatio (None, None, None, 32) 128 ['stem_conv[0][0]'] \n", + " n) \n", " \n", - " stem_activation (Activation) (None, None, None, 0 ['stem_bn[0][0]'] \n", - " 32) \n", + " stem_activation (Activatio (None, None, None, 32) 0 ['stem_bn[0][0]'] \n", + " n) \n", " \n", - " block1a_project_conv (Conv2D) (None, None, None, 4608 ['stem_activation[0][0]'] \n", - " 16) \n", + " block1a_project_conv (Conv (None, None, None, 16) 4608 ['stem_activation[0][0]'] \n", + " 2D) \n", " \n", - " block1a_project_bn (BatchNorma (None, None, None, 64 ['block1a_project_conv[0][0]'] \n", - " lization) 16) \n", + " block1a_project_bn (BatchN (None, None, None, 16) 64 ['block1a_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block1a_project_activation (Ac (None, None, None, 0 ['block1a_project_bn[0][0]'] \n", - " tivation) 16) \n", + " block1a_project_activation (None, None, None, 16) 0 ['block1a_project_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block2a_expand_conv (Conv2D) (None, None, None, 9216 ['block1a_project_activation[0][0\n", - " 64) ]'] \n", + " block2a_expand_conv (Conv2 (None, None, None, 64) 9216 ['block1a_project_activation[0\n", + " D) ][0]'] \n", " \n", - " block2a_expand_bn (BatchNormal (None, None, None, 256 ['block2a_expand_conv[0][0]'] \n", - " ization) 64) \n", + " block2a_expand_bn (BatchNo (None, None, None, 64) 256 ['block2a_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block2a_expand_activation (Act (None, None, None, 0 ['block2a_expand_bn[0][0]'] \n", - " ivation) 64) \n", + " block2a_expand_activation (None, None, None, 64) 0 ['block2a_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block2a_project_conv (Conv2D) (None, None, None, 2048 ['block2a_expand_activation[0][0]\n", - " 32) '] \n", + " block2a_project_conv (Conv (None, None, None, 32) 2048 ['block2a_expand_activation[0]\n", + " 2D) [0]'] \n", " \n", - " block2a_project_bn (BatchNorma (None, None, None, 128 ['block2a_project_conv[0][0]'] \n", - " lization) 32) \n", + " block2a_project_bn (BatchN (None, None, None, 32) 128 ['block2a_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block2b_expand_conv (Conv2D) (None, None, None, 36864 ['block2a_project_bn[0][0]'] \n", - " 128) \n", + " block2b_expand_conv (Conv2 (None, None, None, 128) 36864 ['block2a_project_bn[0][0]'] \n", + " D) \n", " \n", - " block2b_expand_bn (BatchNormal (None, None, None, 512 ['block2b_expand_conv[0][0]'] \n", - " ization) 128) \n", + " block2b_expand_bn (BatchNo (None, None, None, 128) 512 ['block2b_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block2b_expand_activation (Act (None, None, None, 0 ['block2b_expand_bn[0][0]'] \n", - " ivation) 128) \n", + " block2b_expand_activation (None, None, None, 128) 0 ['block2b_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block2b_project_conv (Conv2D) (None, None, None, 4096 ['block2b_expand_activation[0][0]\n", - " 32) '] \n", + " block2b_project_conv (Conv (None, None, None, 32) 4096 ['block2b_expand_activation[0]\n", + " 2D) [0]'] \n", " \n", - " block2b_project_bn (BatchNorma (None, None, None, 128 ['block2b_project_conv[0][0]'] \n", - " lization) 32) \n", + " block2b_project_bn (BatchN (None, None, None, 32) 128 ['block2b_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block2b_drop (Dropout) (None, None, None, 0 ['block2b_project_bn[0][0]'] \n", - " 32) \n", + " block2b_drop (Dropout) (None, None, None, 32) 0 ['block2b_project_bn[0][0]'] \n", " \n", - " block2b_add (Add) (None, None, None, 0 ['block2b_drop[0][0]', \n", - " 32) 'block2a_project_bn[0][0]'] \n", + " block2b_add (Add) (None, None, None, 32) 0 ['block2b_drop[0][0]', \n", + " 'block2a_project_bn[0][0]'] \n", " \n", - " block3a_expand_conv (Conv2D) (None, None, None, 36864 ['block2b_add[0][0]'] \n", - " 128) \n", + " block3a_expand_conv (Conv2 (None, None, None, 128) 36864 ['block2b_add[0][0]'] \n", + " D) \n", " \n", - " block3a_expand_bn (BatchNormal (None, None, None, 512 ['block3a_expand_conv[0][0]'] \n", - " ization) 128) \n", + " block3a_expand_bn (BatchNo (None, None, None, 128) 512 ['block3a_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block3a_expand_activation (Act (None, None, None, 0 ['block3a_expand_bn[0][0]'] \n", - " ivation) 128) \n", + " block3a_expand_activation (None, None, None, 128) 0 ['block3a_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block3a_project_conv (Conv2D) (None, None, None, 6144 ['block3a_expand_activation[0][0]\n", - " 48) '] \n", + " block3a_project_conv (Conv (None, None, None, 48) 6144 ['block3a_expand_activation[0]\n", + " 2D) [0]'] \n", " \n", - " block3a_project_bn (BatchNorma (None, None, None, 192 ['block3a_project_conv[0][0]'] \n", - " lization) 48) \n", + " block3a_project_bn (BatchN (None, None, None, 48) 192 ['block3a_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block3b_expand_conv (Conv2D) (None, None, None, 82944 ['block3a_project_bn[0][0]'] \n", - " 192) \n", + " block3b_expand_conv (Conv2 (None, None, None, 192) 82944 ['block3a_project_bn[0][0]'] \n", + " D) \n", " \n", - " block3b_expand_bn (BatchNormal (None, None, None, 768 ['block3b_expand_conv[0][0]'] \n", - " ization) 192) \n", + " block3b_expand_bn (BatchNo (None, None, None, 192) 768 ['block3b_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block3b_expand_activation (Act (None, None, None, 0 ['block3b_expand_bn[0][0]'] \n", - " ivation) 192) \n", + " block3b_expand_activation (None, None, None, 192) 0 ['block3b_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block3b_project_conv (Conv2D) (None, None, None, 9216 ['block3b_expand_activation[0][0]\n", - " 48) '] \n", + " block3b_project_conv (Conv (None, None, None, 48) 9216 ['block3b_expand_activation[0]\n", + " 2D) [0]'] \n", " \n", - " block3b_project_bn (BatchNorma (None, None, None, 192 ['block3b_project_conv[0][0]'] \n", - " lization) 48) \n", + " block3b_project_bn (BatchN (None, None, None, 48) 192 ['block3b_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block3b_drop (Dropout) (None, None, None, 0 ['block3b_project_bn[0][0]'] \n", - " 48) \n", + " block3b_drop (Dropout) (None, None, None, 48) 0 ['block3b_project_bn[0][0]'] \n", " \n", - " block3b_add (Add) (None, None, None, 0 ['block3b_drop[0][0]', \n", - " 48) 'block3a_project_bn[0][0]'] \n", + " block3b_add (Add) (None, None, None, 48) 0 ['block3b_drop[0][0]', \n", + " 'block3a_project_bn[0][0]'] \n", " \n", - " block4a_expand_conv (Conv2D) (None, None, None, 9216 ['block3b_add[0][0]'] \n", - " 192) \n", + " block4a_expand_conv (Conv2 (None, None, None, 192) 9216 ['block3b_add[0][0]'] \n", + " D) \n", " \n", - " block4a_expand_bn (BatchNormal (None, None, None, 768 ['block4a_expand_conv[0][0]'] \n", - " ization) 192) \n", + " block4a_expand_bn (BatchNo (None, None, None, 192) 768 ['block4a_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block4a_expand_activation (Act (None, None, None, 0 ['block4a_expand_bn[0][0]'] \n", - " ivation) 192) \n", + " block4a_expand_activation (None, None, None, 192) 0 ['block4a_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block4a_dwconv2 (DepthwiseConv (None, None, None, 1728 ['block4a_expand_activation[0][0]\n", - " 2D) 192) '] \n", + " block4a_dwconv2 (Depthwise (None, None, None, 192) 1728 ['block4a_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block4a_bn (BatchNormalization (None, None, None, 768 ['block4a_dwconv2[0][0]'] \n", - " ) 192) \n", + " block4a_bn (BatchNormaliza (None, None, None, 192) 768 ['block4a_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block4a_activation (Activation (None, None, None, 0 ['block4a_bn[0][0]'] \n", - " ) 192) \n", + " block4a_activation (Activa (None, None, None, 192) 0 ['block4a_bn[0][0]'] \n", + " tion) \n", " \n", - " block4a_se_squeeze (GlobalAver (None, 192) 0 ['block4a_activation[0][0]'] \n", - " agePooling2D) \n", + " block4a_se_squeeze (Global (None, 192) 0 ['block4a_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block4a_se_reshape (Reshape) (None, 1, 1, 192) 0 ['block4a_se_squeeze[0][0]'] \n", + " block4a_se_reshape (Reshap (None, 1, 1, 192) 0 ['block4a_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block4a_se_reduce (Conv2D) (None, 1, 1, 12) 2316 ['block4a_se_reshape[0][0]'] \n", + " block4a_se_reduce (Conv2D) (None, 1, 1, 12) 2316 ['block4a_se_reshape[0][0]'] \n", " \n", - " block4a_se_expand (Conv2D) (None, 1, 1, 192) 2496 ['block4a_se_reduce[0][0]'] \n", + " block4a_se_expand (Conv2D) (None, 1, 1, 192) 2496 ['block4a_se_reduce[0][0]'] \n", " \n", - " block4a_se_excite (Multiply) (None, None, None, 0 ['block4a_activation[0][0]', \n", - " 192) 'block4a_se_expand[0][0]'] \n", + " block4a_se_excite (Multipl (None, None, None, 192) 0 ['block4a_activation[0][0]', \n", + " y) 'block4a_se_expand[0][0]'] \n", " \n", - " block4a_project_conv (Conv2D) (None, None, None, 18432 ['block4a_se_excite[0][0]'] \n", - " 96) \n", + " block4a_project_conv (Conv (None, None, None, 96) 18432 ['block4a_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block4a_project_bn (BatchNorma (None, None, None, 384 ['block4a_project_conv[0][0]'] \n", - " lization) 96) \n", + " block4a_project_bn (BatchN (None, None, None, 96) 384 ['block4a_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block4b_expand_conv (Conv2D) (None, None, None, 36864 ['block4a_project_bn[0][0]'] \n", - " 384) \n", + " block4b_expand_conv (Conv2 (None, None, None, 384) 36864 ['block4a_project_bn[0][0]'] \n", + " D) \n", " \n", - " block4b_expand_bn (BatchNormal (None, None, None, 1536 ['block4b_expand_conv[0][0]'] \n", - " ization) 384) \n", + " block4b_expand_bn (BatchNo (None, None, None, 384) 1536 ['block4b_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block4b_expand_activation (Act (None, None, None, 0 ['block4b_expand_bn[0][0]'] \n", - " ivation) 384) \n", + " block4b_expand_activation (None, None, None, 384) 0 ['block4b_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block4b_dwconv2 (DepthwiseConv (None, None, None, 3456 ['block4b_expand_activation[0][0]\n", - " 2D) 384) '] \n", + " block4b_dwconv2 (Depthwise (None, None, None, 384) 3456 ['block4b_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block4b_bn (BatchNormalization (None, None, None, 1536 ['block4b_dwconv2[0][0]'] \n", - " ) 384) \n", + " block4b_bn (BatchNormaliza (None, None, None, 384) 1536 ['block4b_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block4b_activation (Activation (None, None, None, 0 ['block4b_bn[0][0]'] \n", - " ) 384) \n", + " block4b_activation (Activa (None, None, None, 384) 0 ['block4b_bn[0][0]'] \n", + " tion) \n", " \n", - " block4b_se_squeeze (GlobalAver (None, 384) 0 ['block4b_activation[0][0]'] \n", - " agePooling2D) \n", + " block4b_se_squeeze (Global (None, 384) 0 ['block4b_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block4b_se_reshape (Reshape) (None, 1, 1, 384) 0 ['block4b_se_squeeze[0][0]'] \n", + " block4b_se_reshape (Reshap (None, 1, 1, 384) 0 ['block4b_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block4b_se_reduce (Conv2D) (None, 1, 1, 24) 9240 ['block4b_se_reshape[0][0]'] \n", + " block4b_se_reduce (Conv2D) (None, 1, 1, 24) 9240 ['block4b_se_reshape[0][0]'] \n", " \n", - " block4b_se_expand (Conv2D) (None, 1, 1, 384) 9600 ['block4b_se_reduce[0][0]'] \n", + " block4b_se_expand (Conv2D) (None, 1, 1, 384) 9600 ['block4b_se_reduce[0][0]'] \n", " \n", - " block4b_se_excite (Multiply) (None, None, None, 0 ['block4b_activation[0][0]', \n", - " 384) 'block4b_se_expand[0][0]'] \n", + " block4b_se_excite (Multipl (None, None, None, 384) 0 ['block4b_activation[0][0]', \n", + " y) 'block4b_se_expand[0][0]'] \n", " \n", - " block4b_project_conv (Conv2D) (None, None, None, 36864 ['block4b_se_excite[0][0]'] \n", - " 96) \n", + " block4b_project_conv (Conv (None, None, None, 96) 36864 ['block4b_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block4b_project_bn (BatchNorma (None, None, None, 384 ['block4b_project_conv[0][0]'] \n", - " lization) 96) \n", + " block4b_project_bn (BatchN (None, None, None, 96) 384 ['block4b_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block4b_drop (Dropout) (None, None, None, 0 ['block4b_project_bn[0][0]'] \n", - " 96) \n", + " block4b_drop (Dropout) (None, None, None, 96) 0 ['block4b_project_bn[0][0]'] \n", " \n", - " block4b_add (Add) (None, None, None, 0 ['block4b_drop[0][0]', \n", - " 96) 'block4a_project_bn[0][0]'] \n", + " block4b_add (Add) (None, None, None, 96) 0 ['block4b_drop[0][0]', \n", + " 'block4a_project_bn[0][0]'] \n", " \n", - " block4c_expand_conv (Conv2D) (None, None, None, 36864 ['block4b_add[0][0]'] \n", - " 384) \n", + " block4c_expand_conv (Conv2 (None, None, None, 384) 36864 ['block4b_add[0][0]'] \n", + " D) \n", " \n", - " block4c_expand_bn (BatchNormal (None, None, None, 1536 ['block4c_expand_conv[0][0]'] \n", - " ization) 384) \n", + " block4c_expand_bn (BatchNo (None, None, None, 384) 1536 ['block4c_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block4c_expand_activation (Act (None, None, None, 0 ['block4c_expand_bn[0][0]'] \n", - " ivation) 384) \n", + " block4c_expand_activation (None, None, None, 384) 0 ['block4c_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block4c_dwconv2 (DepthwiseConv (None, None, None, 3456 ['block4c_expand_activation[0][0]\n", - " 2D) 384) '] \n", + " block4c_dwconv2 (Depthwise (None, None, None, 384) 3456 ['block4c_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block4c_bn (BatchNormalization (None, None, None, 1536 ['block4c_dwconv2[0][0]'] \n", - " ) 384) \n", + " block4c_bn (BatchNormaliza (None, None, None, 384) 1536 ['block4c_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block4c_activation (Activation (None, None, None, 0 ['block4c_bn[0][0]'] \n", - " ) 384) \n", + " block4c_activation (Activa (None, None, None, 384) 0 ['block4c_bn[0][0]'] \n", + " tion) \n", " \n", - " block4c_se_squeeze (GlobalAver (None, 384) 0 ['block4c_activation[0][0]'] \n", - " agePooling2D) \n", + " block4c_se_squeeze (Global (None, 384) 0 ['block4c_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block4c_se_reshape (Reshape) (None, 1, 1, 384) 0 ['block4c_se_squeeze[0][0]'] \n", + " block4c_se_reshape (Reshap (None, 1, 1, 384) 0 ['block4c_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block4c_se_reduce (Conv2D) (None, 1, 1, 24) 9240 ['block4c_se_reshape[0][0]'] \n", + " block4c_se_reduce (Conv2D) (None, 1, 1, 24) 9240 ['block4c_se_reshape[0][0]'] \n", " \n", - " block4c_se_expand (Conv2D) (None, 1, 1, 384) 9600 ['block4c_se_reduce[0][0]'] \n", + " block4c_se_expand (Conv2D) (None, 1, 1, 384) 9600 ['block4c_se_reduce[0][0]'] \n", " \n", - " block4c_se_excite (Multiply) (None, None, None, 0 ['block4c_activation[0][0]', \n", - " 384) 'block4c_se_expand[0][0]'] \n", + " block4c_se_excite (Multipl (None, None, None, 384) 0 ['block4c_activation[0][0]', \n", + " y) 'block4c_se_expand[0][0]'] \n", " \n", - " block4c_project_conv (Conv2D) (None, None, None, 36864 ['block4c_se_excite[0][0]'] \n", - " 96) \n", + " block4c_project_conv (Conv (None, None, None, 96) 36864 ['block4c_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block4c_project_bn (BatchNorma (None, None, None, 384 ['block4c_project_conv[0][0]'] \n", - " lization) 96) \n", + " block4c_project_bn (BatchN (None, None, None, 96) 384 ['block4c_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block4c_drop (Dropout) (None, None, None, 0 ['block4c_project_bn[0][0]'] \n", - " 96) \n", + " block4c_drop (Dropout) (None, None, None, 96) 0 ['block4c_project_bn[0][0]'] \n", " \n", - " block4c_add (Add) (None, None, None, 0 ['block4c_drop[0][0]', \n", - " 96) 'block4b_add[0][0]'] \n", + " block4c_add (Add) (None, None, None, 96) 0 ['block4c_drop[0][0]', \n", + " 'block4b_add[0][0]'] \n", " \n", - " block5a_expand_conv (Conv2D) (None, None, None, 55296 ['block4c_add[0][0]'] \n", - " 576) \n", + " block5a_expand_conv (Conv2 (None, None, None, 576) 55296 ['block4c_add[0][0]'] \n", + " D) \n", " \n", - " block5a_expand_bn (BatchNormal (None, None, None, 2304 ['block5a_expand_conv[0][0]'] \n", - " ization) 576) \n", + " block5a_expand_bn (BatchNo (None, None, None, 576) 2304 ['block5a_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block5a_expand_activation (Act (None, None, None, 0 ['block5a_expand_bn[0][0]'] \n", - " ivation) 576) \n", + " block5a_expand_activation (None, None, None, 576) 0 ['block5a_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block5a_dwconv2 (DepthwiseConv (None, None, None, 5184 ['block5a_expand_activation[0][0]\n", - " 2D) 576) '] \n", + " block5a_dwconv2 (Depthwise (None, None, None, 576) 5184 ['block5a_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block5a_bn (BatchNormalization (None, None, None, 2304 ['block5a_dwconv2[0][0]'] \n", - " ) 576) \n", + " block5a_bn (BatchNormaliza (None, None, None, 576) 2304 ['block5a_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block5a_activation (Activation (None, None, None, 0 ['block5a_bn[0][0]'] \n", - " ) 576) \n", + " block5a_activation (Activa (None, None, None, 576) 0 ['block5a_bn[0][0]'] \n", + " tion) \n", " \n", - " block5a_se_squeeze (GlobalAver (None, 576) 0 ['block5a_activation[0][0]'] \n", - " agePooling2D) \n", + " block5a_se_squeeze (Global (None, 576) 0 ['block5a_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block5a_se_reshape (Reshape) (None, 1, 1, 576) 0 ['block5a_se_squeeze[0][0]'] \n", + " block5a_se_reshape (Reshap (None, 1, 1, 576) 0 ['block5a_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block5a_se_reduce (Conv2D) (None, 1, 1, 24) 13848 ['block5a_se_reshape[0][0]'] \n", + " block5a_se_reduce (Conv2D) (None, 1, 1, 24) 13848 ['block5a_se_reshape[0][0]'] \n", " \n", - " block5a_se_expand (Conv2D) (None, 1, 1, 576) 14400 ['block5a_se_reduce[0][0]'] \n", + " block5a_se_expand (Conv2D) (None, 1, 1, 576) 14400 ['block5a_se_reduce[0][0]'] \n", " \n", - " block5a_se_excite (Multiply) (None, None, None, 0 ['block5a_activation[0][0]', \n", - " 576) 'block5a_se_expand[0][0]'] \n", + " block5a_se_excite (Multipl (None, None, None, 576) 0 ['block5a_activation[0][0]', \n", + " y) 'block5a_se_expand[0][0]'] \n", " \n", - " block5a_project_conv (Conv2D) (None, None, None, 64512 ['block5a_se_excite[0][0]'] \n", - " 112) \n", + " block5a_project_conv (Conv (None, None, None, 112) 64512 ['block5a_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block5a_project_bn (BatchNorma (None, None, None, 448 ['block5a_project_conv[0][0]'] \n", - " lization) 112) \n", + " block5a_project_bn (BatchN (None, None, None, 112) 448 ['block5a_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block5b_expand_conv (Conv2D) (None, None, None, 75264 ['block5a_project_bn[0][0]'] \n", - " 672) \n", + " block5b_expand_conv (Conv2 (None, None, None, 672) 75264 ['block5a_project_bn[0][0]'] \n", + " D) \n", " \n", - " block5b_expand_bn (BatchNormal (None, None, None, 2688 ['block5b_expand_conv[0][0]'] \n", - " ization) 672) \n", + " block5b_expand_bn (BatchNo (None, None, None, 672) 2688 ['block5b_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block5b_expand_activation (Act (None, None, None, 0 ['block5b_expand_bn[0][0]'] \n", - " ivation) 672) \n", + " block5b_expand_activation (None, None, None, 672) 0 ['block5b_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block5b_dwconv2 (DepthwiseConv (None, None, None, 6048 ['block5b_expand_activation[0][0]\n", - " 2D) 672) '] \n", + " block5b_dwconv2 (Depthwise (None, None, None, 672) 6048 ['block5b_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block5b_bn (BatchNormalization (None, None, None, 2688 ['block5b_dwconv2[0][0]'] \n", - " ) 672) \n", + " block5b_bn (BatchNormaliza (None, None, None, 672) 2688 ['block5b_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block5b_activation (Activation (None, None, None, 0 ['block5b_bn[0][0]'] \n", - " ) 672) \n", + " block5b_activation (Activa (None, None, None, 672) 0 ['block5b_bn[0][0]'] \n", + " tion) \n", " \n", - " block5b_se_squeeze (GlobalAver (None, 672) 0 ['block5b_activation[0][0]'] \n", - " agePooling2D) \n", + " block5b_se_squeeze (Global (None, 672) 0 ['block5b_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block5b_se_reshape (Reshape) (None, 1, 1, 672) 0 ['block5b_se_squeeze[0][0]'] \n", + " block5b_se_reshape (Reshap (None, 1, 1, 672) 0 ['block5b_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block5b_se_reduce (Conv2D) (None, 1, 1, 28) 18844 ['block5b_se_reshape[0][0]'] \n", + " block5b_se_reduce (Conv2D) (None, 1, 1, 28) 18844 ['block5b_se_reshape[0][0]'] \n", " \n", - " block5b_se_expand (Conv2D) (None, 1, 1, 672) 19488 ['block5b_se_reduce[0][0]'] \n", + " block5b_se_expand (Conv2D) (None, 1, 1, 672) 19488 ['block5b_se_reduce[0][0]'] \n", " \n", - " block5b_se_excite (Multiply) (None, None, None, 0 ['block5b_activation[0][0]', \n", - " 672) 'block5b_se_expand[0][0]'] \n", + " block5b_se_excite (Multipl (None, None, None, 672) 0 ['block5b_activation[0][0]', \n", + " y) 'block5b_se_expand[0][0]'] \n", " \n", - " block5b_project_conv (Conv2D) (None, None, None, 75264 ['block5b_se_excite[0][0]'] \n", - " 112) \n", + " block5b_project_conv (Conv (None, None, None, 112) 75264 ['block5b_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block5b_project_bn (BatchNorma (None, None, None, 448 ['block5b_project_conv[0][0]'] \n", - " lization) 112) \n", + " block5b_project_bn (BatchN (None, None, None, 112) 448 ['block5b_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block5b_drop (Dropout) (None, None, None, 0 ['block5b_project_bn[0][0]'] \n", - " 112) \n", + " block5b_drop (Dropout) (None, None, None, 112) 0 ['block5b_project_bn[0][0]'] \n", " \n", - " block5b_add (Add) (None, None, None, 0 ['block5b_drop[0][0]', \n", - " 112) 'block5a_project_bn[0][0]'] \n", + " block5b_add (Add) (None, None, None, 112) 0 ['block5b_drop[0][0]', \n", + " 'block5a_project_bn[0][0]'] \n", " \n", - " block5c_expand_conv (Conv2D) (None, None, None, 75264 ['block5b_add[0][0]'] \n", - " 672) \n", + " block5c_expand_conv (Conv2 (None, None, None, 672) 75264 ['block5b_add[0][0]'] \n", + " D) \n", " \n", - " block5c_expand_bn (BatchNormal (None, None, None, 2688 ['block5c_expand_conv[0][0]'] \n", - " ization) 672) \n", + " block5c_expand_bn (BatchNo (None, None, None, 672) 2688 ['block5c_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block5c_expand_activation (Act (None, None, None, 0 ['block5c_expand_bn[0][0]'] \n", - " ivation) 672) \n", + " block5c_expand_activation (None, None, None, 672) 0 ['block5c_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block5c_dwconv2 (DepthwiseConv (None, None, None, 6048 ['block5c_expand_activation[0][0]\n", - " 2D) 672) '] \n", + " block5c_dwconv2 (Depthwise (None, None, None, 672) 6048 ['block5c_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block5c_bn (BatchNormalization (None, None, None, 2688 ['block5c_dwconv2[0][0]'] \n", - " ) 672) \n", + " block5c_bn (BatchNormaliza (None, None, None, 672) 2688 ['block5c_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block5c_activation (Activation (None, None, None, 0 ['block5c_bn[0][0]'] \n", - " ) 672) \n", + " block5c_activation (Activa (None, None, None, 672) 0 ['block5c_bn[0][0]'] \n", + " tion) \n", " \n", - " block5c_se_squeeze (GlobalAver (None, 672) 0 ['block5c_activation[0][0]'] \n", - " agePooling2D) \n", + " block5c_se_squeeze (Global (None, 672) 0 ['block5c_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block5c_se_reshape (Reshape) (None, 1, 1, 672) 0 ['block5c_se_squeeze[0][0]'] \n", + " block5c_se_reshape (Reshap (None, 1, 1, 672) 0 ['block5c_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block5c_se_reduce (Conv2D) (None, 1, 1, 28) 18844 ['block5c_se_reshape[0][0]'] \n", + " block5c_se_reduce (Conv2D) (None, 1, 1, 28) 18844 ['block5c_se_reshape[0][0]'] \n", " \n", - " block5c_se_expand (Conv2D) (None, 1, 1, 672) 19488 ['block5c_se_reduce[0][0]'] \n", + " block5c_se_expand (Conv2D) (None, 1, 1, 672) 19488 ['block5c_se_reduce[0][0]'] \n", " \n", - " block5c_se_excite (Multiply) (None, None, None, 0 ['block5c_activation[0][0]', \n", - " 672) 'block5c_se_expand[0][0]'] \n", + " block5c_se_excite (Multipl (None, None, None, 672) 0 ['block5c_activation[0][0]', \n", + " y) 'block5c_se_expand[0][0]'] \n", " \n", - " block5c_project_conv (Conv2D) (None, None, None, 75264 ['block5c_se_excite[0][0]'] \n", - " 112) \n", + " block5c_project_conv (Conv (None, None, None, 112) 75264 ['block5c_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block5c_project_bn (BatchNorma (None, None, None, 448 ['block5c_project_conv[0][0]'] \n", - " lization) 112) \n", + " block5c_project_bn (BatchN (None, None, None, 112) 448 ['block5c_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block5c_drop (Dropout) (None, None, None, 0 ['block5c_project_bn[0][0]'] \n", - " 112) \n", + " block5c_drop (Dropout) (None, None, None, 112) 0 ['block5c_project_bn[0][0]'] \n", " \n", - " block5c_add (Add) (None, None, None, 0 ['block5c_drop[0][0]', \n", - " 112) 'block5b_add[0][0]'] \n", + " block5c_add (Add) (None, None, None, 112) 0 ['block5c_drop[0][0]', \n", + " 'block5b_add[0][0]'] \n", " \n", - " block5d_expand_conv (Conv2D) (None, None, None, 75264 ['block5c_add[0][0]'] \n", - " 672) \n", + " block5d_expand_conv (Conv2 (None, None, None, 672) 75264 ['block5c_add[0][0]'] \n", + " D) \n", " \n", - " block5d_expand_bn (BatchNormal (None, None, None, 2688 ['block5d_expand_conv[0][0]'] \n", - " ization) 672) \n", + " block5d_expand_bn (BatchNo (None, None, None, 672) 2688 ['block5d_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block5d_expand_activation (Act (None, None, None, 0 ['block5d_expand_bn[0][0]'] \n", - " ivation) 672) \n", + " block5d_expand_activation (None, None, None, 672) 0 ['block5d_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block5d_dwconv2 (DepthwiseConv (None, None, None, 6048 ['block5d_expand_activation[0][0]\n", - " 2D) 672) '] \n", + " block5d_dwconv2 (Depthwise (None, None, None, 672) 6048 ['block5d_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block5d_bn (BatchNormalization (None, None, None, 2688 ['block5d_dwconv2[0][0]'] \n", - " ) 672) \n", + " block5d_bn (BatchNormaliza (None, None, None, 672) 2688 ['block5d_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block5d_activation (Activation (None, None, None, 0 ['block5d_bn[0][0]'] \n", - " ) 672) \n", + " block5d_activation (Activa (None, None, None, 672) 0 ['block5d_bn[0][0]'] \n", + " tion) \n", " \n", - " block5d_se_squeeze (GlobalAver (None, 672) 0 ['block5d_activation[0][0]'] \n", - " agePooling2D) \n", + " block5d_se_squeeze (Global (None, 672) 0 ['block5d_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block5d_se_reshape (Reshape) (None, 1, 1, 672) 0 ['block5d_se_squeeze[0][0]'] \n", + " block5d_se_reshape (Reshap (None, 1, 1, 672) 0 ['block5d_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block5d_se_reduce (Conv2D) (None, 1, 1, 28) 18844 ['block5d_se_reshape[0][0]'] \n", + " block5d_se_reduce (Conv2D) (None, 1, 1, 28) 18844 ['block5d_se_reshape[0][0]'] \n", " \n", - " block5d_se_expand (Conv2D) (None, 1, 1, 672) 19488 ['block5d_se_reduce[0][0]'] \n", + " block5d_se_expand (Conv2D) (None, 1, 1, 672) 19488 ['block5d_se_reduce[0][0]'] \n", " \n", - " block5d_se_excite (Multiply) (None, None, None, 0 ['block5d_activation[0][0]', \n", - " 672) 'block5d_se_expand[0][0]'] \n", + " block5d_se_excite (Multipl (None, None, None, 672) 0 ['block5d_activation[0][0]', \n", + " y) 'block5d_se_expand[0][0]'] \n", " \n", - " block5d_project_conv (Conv2D) (None, None, None, 75264 ['block5d_se_excite[0][0]'] \n", - " 112) \n", + " block5d_project_conv (Conv (None, None, None, 112) 75264 ['block5d_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block5d_project_bn (BatchNorma (None, None, None, 448 ['block5d_project_conv[0][0]'] \n", - " lization) 112) \n", + " block5d_project_bn (BatchN (None, None, None, 112) 448 ['block5d_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block5d_drop (Dropout) (None, None, None, 0 ['block5d_project_bn[0][0]'] \n", - " 112) \n", + " block5d_drop (Dropout) (None, None, None, 112) 0 ['block5d_project_bn[0][0]'] \n", " \n", - " block5d_add (Add) (None, None, None, 0 ['block5d_drop[0][0]', \n", - " 112) 'block5c_add[0][0]'] \n", + " block5d_add (Add) (None, None, None, 112) 0 ['block5d_drop[0][0]', \n", + " 'block5c_add[0][0]'] \n", " \n", - " block5e_expand_conv (Conv2D) (None, None, None, 75264 ['block5d_add[0][0]'] \n", - " 672) \n", + " block5e_expand_conv (Conv2 (None, None, None, 672) 75264 ['block5d_add[0][0]'] \n", + " D) \n", " \n", - " block5e_expand_bn (BatchNormal (None, None, None, 2688 ['block5e_expand_conv[0][0]'] \n", - " ization) 672) \n", + " block5e_expand_bn (BatchNo (None, None, None, 672) 2688 ['block5e_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block5e_expand_activation (Act (None, None, None, 0 ['block5e_expand_bn[0][0]'] \n", - " ivation) 672) \n", + " block5e_expand_activation (None, None, None, 672) 0 ['block5e_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block5e_dwconv2 (DepthwiseConv (None, None, None, 6048 ['block5e_expand_activation[0][0]\n", - " 2D) 672) '] \n", + " block5e_dwconv2 (Depthwise (None, None, None, 672) 6048 ['block5e_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block5e_bn (BatchNormalization (None, None, None, 2688 ['block5e_dwconv2[0][0]'] \n", - " ) 672) \n", + " block5e_bn (BatchNormaliza (None, None, None, 672) 2688 ['block5e_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block5e_activation (Activation (None, None, None, 0 ['block5e_bn[0][0]'] \n", - " ) 672) \n", + " block5e_activation (Activa (None, None, None, 672) 0 ['block5e_bn[0][0]'] \n", + " tion) \n", " \n", - " block5e_se_squeeze (GlobalAver (None, 672) 0 ['block5e_activation[0][0]'] \n", - " agePooling2D) \n", + " block5e_se_squeeze (Global (None, 672) 0 ['block5e_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block5e_se_reshape (Reshape) (None, 1, 1, 672) 0 ['block5e_se_squeeze[0][0]'] \n", + " block5e_se_reshape (Reshap (None, 1, 1, 672) 0 ['block5e_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block5e_se_reduce (Conv2D) (None, 1, 1, 28) 18844 ['block5e_se_reshape[0][0]'] \n", + " block5e_se_reduce (Conv2D) (None, 1, 1, 28) 18844 ['block5e_se_reshape[0][0]'] \n", " \n", - " block5e_se_expand (Conv2D) (None, 1, 1, 672) 19488 ['block5e_se_reduce[0][0]'] \n", + " block5e_se_expand (Conv2D) (None, 1, 1, 672) 19488 ['block5e_se_reduce[0][0]'] \n", " \n", - " block5e_se_excite (Multiply) (None, None, None, 0 ['block5e_activation[0][0]', \n", - " 672) 'block5e_se_expand[0][0]'] \n", + " block5e_se_excite (Multipl (None, None, None, 672) 0 ['block5e_activation[0][0]', \n", + " y) 'block5e_se_expand[0][0]'] \n", " \n", - " block5e_project_conv (Conv2D) (None, None, None, 75264 ['block5e_se_excite[0][0]'] \n", - " 112) \n", + " block5e_project_conv (Conv (None, None, None, 112) 75264 ['block5e_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block5e_project_bn (BatchNorma (None, None, None, 448 ['block5e_project_conv[0][0]'] \n", - " lization) 112) \n", + " block5e_project_bn (BatchN (None, None, None, 112) 448 ['block5e_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block5e_drop (Dropout) (None, None, None, 0 ['block5e_project_bn[0][0]'] \n", - " 112) \n", + " block5e_drop (Dropout) (None, None, None, 112) 0 ['block5e_project_bn[0][0]'] \n", " \n", - " block5e_add (Add) (None, None, None, 0 ['block5e_drop[0][0]', \n", - " 112) 'block5d_add[0][0]'] \n", + " block5e_add (Add) (None, None, None, 112) 0 ['block5e_drop[0][0]', \n", + " 'block5d_add[0][0]'] \n", " \n", - " block6a_expand_conv (Conv2D) (None, None, None, 75264 ['block5e_add[0][0]'] \n", - " 672) \n", + " block6a_expand_conv (Conv2 (None, None, None, 672) 75264 ['block5e_add[0][0]'] \n", + " D) \n", " \n", - " block6a_expand_bn (BatchNormal (None, None, None, 2688 ['block6a_expand_conv[0][0]'] \n", - " ization) 672) \n", + " block6a_expand_bn (BatchNo (None, None, None, 672) 2688 ['block6a_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block6a_expand_activation (Act (None, None, None, 0 ['block6a_expand_bn[0][0]'] \n", - " ivation) 672) \n", + " block6a_expand_activation (None, None, None, 672) 0 ['block6a_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block6a_dwconv2 (DepthwiseConv (None, None, None, 6048 ['block6a_expand_activation[0][0]\n", - " 2D) 672) '] \n", + " block6a_dwconv2 (Depthwise (None, None, None, 672) 6048 ['block6a_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block6a_bn (BatchNormalization (None, None, None, 2688 ['block6a_dwconv2[0][0]'] \n", - " ) 672) \n", + " block6a_bn (BatchNormaliza (None, None, None, 672) 2688 ['block6a_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block6a_activation (Activation (None, None, None, 0 ['block6a_bn[0][0]'] \n", - " ) 672) \n", + " block6a_activation (Activa (None, None, None, 672) 0 ['block6a_bn[0][0]'] \n", + " tion) \n", " \n", - " block6a_se_squeeze (GlobalAver (None, 672) 0 ['block6a_activation[0][0]'] \n", - " agePooling2D) \n", + " block6a_se_squeeze (Global (None, 672) 0 ['block6a_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block6a_se_reshape (Reshape) (None, 1, 1, 672) 0 ['block6a_se_squeeze[0][0]'] \n", + " block6a_se_reshape (Reshap (None, 1, 1, 672) 0 ['block6a_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block6a_se_reduce (Conv2D) (None, 1, 1, 28) 18844 ['block6a_se_reshape[0][0]'] \n", + " block6a_se_reduce (Conv2D) (None, 1, 1, 28) 18844 ['block6a_se_reshape[0][0]'] \n", " \n", - " block6a_se_expand (Conv2D) (None, 1, 1, 672) 19488 ['block6a_se_reduce[0][0]'] \n", + " block6a_se_expand (Conv2D) (None, 1, 1, 672) 19488 ['block6a_se_reduce[0][0]'] \n", " \n", - " block6a_se_excite (Multiply) (None, None, None, 0 ['block6a_activation[0][0]', \n", - " 672) 'block6a_se_expand[0][0]'] \n", + " block6a_se_excite (Multipl (None, None, None, 672) 0 ['block6a_activation[0][0]', \n", + " y) 'block6a_se_expand[0][0]'] \n", " \n", - " block6a_project_conv (Conv2D) (None, None, None, 129024 ['block6a_se_excite[0][0]'] \n", - " 192) \n", + " block6a_project_conv (Conv (None, None, None, 192) 129024 ['block6a_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block6a_project_bn (BatchNorma (None, None, None, 768 ['block6a_project_conv[0][0]'] \n", - " lization) 192) \n", + " block6a_project_bn (BatchN (None, None, None, 192) 768 ['block6a_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block6b_expand_conv (Conv2D) (None, None, None, 221184 ['block6a_project_bn[0][0]'] \n", - " 1152) \n", + " block6b_expand_conv (Conv2 (None, None, None, 1152) 221184 ['block6a_project_bn[0][0]'] \n", + " D) \n", " \n", - " block6b_expand_bn (BatchNormal (None, None, None, 4608 ['block6b_expand_conv[0][0]'] \n", - " ization) 1152) \n", + " block6b_expand_bn (BatchNo (None, None, None, 1152) 4608 ['block6b_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block6b_expand_activation (Act (None, None, None, 0 ['block6b_expand_bn[0][0]'] \n", - " ivation) 1152) \n", + " block6b_expand_activation (None, None, None, 1152) 0 ['block6b_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block6b_dwconv2 (DepthwiseConv (None, None, None, 10368 ['block6b_expand_activation[0][0]\n", - " 2D) 1152) '] \n", + " block6b_dwconv2 (Depthwise (None, None, None, 1152) 10368 ['block6b_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block6b_bn (BatchNormalization (None, None, None, 4608 ['block6b_dwconv2[0][0]'] \n", - " ) 1152) \n", + " block6b_bn (BatchNormaliza (None, None, None, 1152) 4608 ['block6b_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block6b_activation (Activation (None, None, None, 0 ['block6b_bn[0][0]'] \n", - " ) 1152) \n", + " block6b_activation (Activa (None, None, None, 1152) 0 ['block6b_bn[0][0]'] \n", + " tion) \n", " \n", - " block6b_se_squeeze (GlobalAver (None, 1152) 0 ['block6b_activation[0][0]'] \n", - " agePooling2D) \n", + " block6b_se_squeeze (Global (None, 1152) 0 ['block6b_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block6b_se_reshape (Reshape) (None, 1, 1, 1152) 0 ['block6b_se_squeeze[0][0]'] \n", + " block6b_se_reshape (Reshap (None, 1, 1, 1152) 0 ['block6b_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block6b_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6b_se_reshape[0][0]'] \n", + " block6b_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6b_se_reshape[0][0]'] \n", " \n", - " block6b_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6b_se_reduce[0][0]'] \n", + " block6b_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6b_se_reduce[0][0]'] \n", " \n", - " block6b_se_excite (Multiply) (None, None, None, 0 ['block6b_activation[0][0]', \n", - " 1152) 'block6b_se_expand[0][0]'] \n", + " block6b_se_excite (Multipl (None, None, None, 1152) 0 ['block6b_activation[0][0]', \n", + " y) 'block6b_se_expand[0][0]'] \n", " \n", - " block6b_project_conv (Conv2D) (None, None, None, 221184 ['block6b_se_excite[0][0]'] \n", - " 192) \n", + " block6b_project_conv (Conv (None, None, None, 192) 221184 ['block6b_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block6b_project_bn (BatchNorma (None, None, None, 768 ['block6b_project_conv[0][0]'] \n", - " lization) 192) \n", + " block6b_project_bn (BatchN (None, None, None, 192) 768 ['block6b_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block6b_drop (Dropout) (None, None, None, 0 ['block6b_project_bn[0][0]'] \n", - " 192) \n", + " block6b_drop (Dropout) (None, None, None, 192) 0 ['block6b_project_bn[0][0]'] \n", " \n", - " block6b_add (Add) (None, None, None, 0 ['block6b_drop[0][0]', \n", - " 192) 'block6a_project_bn[0][0]'] \n", + " block6b_add (Add) (None, None, None, 192) 0 ['block6b_drop[0][0]', \n", + " 'block6a_project_bn[0][0]'] \n", " \n", - " block6c_expand_conv (Conv2D) (None, None, None, 221184 ['block6b_add[0][0]'] \n", - " 1152) \n", + " block6c_expand_conv (Conv2 (None, None, None, 1152) 221184 ['block6b_add[0][0]'] \n", + " D) \n", " \n", - " block6c_expand_bn (BatchNormal (None, None, None, 4608 ['block6c_expand_conv[0][0]'] \n", - " ization) 1152) \n", + " block6c_expand_bn (BatchNo (None, None, None, 1152) 4608 ['block6c_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block6c_expand_activation (Act (None, None, None, 0 ['block6c_expand_bn[0][0]'] \n", - " ivation) 1152) \n", + " block6c_expand_activation (None, None, None, 1152) 0 ['block6c_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block6c_dwconv2 (DepthwiseConv (None, None, None, 10368 ['block6c_expand_activation[0][0]\n", - " 2D) 1152) '] \n", + " block6c_dwconv2 (Depthwise (None, None, None, 1152) 10368 ['block6c_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block6c_bn (BatchNormalization (None, None, None, 4608 ['block6c_dwconv2[0][0]'] \n", - " ) 1152) \n", + " block6c_bn (BatchNormaliza (None, None, None, 1152) 4608 ['block6c_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block6c_activation (Activation (None, None, None, 0 ['block6c_bn[0][0]'] \n", - " ) 1152) \n", + " block6c_activation (Activa (None, None, None, 1152) 0 ['block6c_bn[0][0]'] \n", + " tion) \n", " \n", - " block6c_se_squeeze (GlobalAver (None, 1152) 0 ['block6c_activation[0][0]'] \n", - " agePooling2D) \n", + " block6c_se_squeeze (Global (None, 1152) 0 ['block6c_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block6c_se_reshape (Reshape) (None, 1, 1, 1152) 0 ['block6c_se_squeeze[0][0]'] \n", + " block6c_se_reshape (Reshap (None, 1, 1, 1152) 0 ['block6c_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block6c_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6c_se_reshape[0][0]'] \n", + " block6c_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6c_se_reshape[0][0]'] \n", " \n", - " block6c_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6c_se_reduce[0][0]'] \n", + " block6c_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6c_se_reduce[0][0]'] \n", " \n", - " block6c_se_excite (Multiply) (None, None, None, 0 ['block6c_activation[0][0]', \n", - " 1152) 'block6c_se_expand[0][0]'] \n", + " block6c_se_excite (Multipl (None, None, None, 1152) 0 ['block6c_activation[0][0]', \n", + " y) 'block6c_se_expand[0][0]'] \n", " \n", - " block6c_project_conv (Conv2D) (None, None, None, 221184 ['block6c_se_excite[0][0]'] \n", - " 192) \n", + " block6c_project_conv (Conv (None, None, None, 192) 221184 ['block6c_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block6c_project_bn (BatchNorma (None, None, None, 768 ['block6c_project_conv[0][0]'] \n", - " lization) 192) \n", + " block6c_project_bn (BatchN (None, None, None, 192) 768 ['block6c_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block6c_drop (Dropout) (None, None, None, 0 ['block6c_project_bn[0][0]'] \n", - " 192) \n", + " block6c_drop (Dropout) (None, None, None, 192) 0 ['block6c_project_bn[0][0]'] \n", " \n", - " block6c_add (Add) (None, None, None, 0 ['block6c_drop[0][0]', \n", - " 192) 'block6b_add[0][0]'] \n", + " block6c_add (Add) (None, None, None, 192) 0 ['block6c_drop[0][0]', \n", + " 'block6b_add[0][0]'] \n", " \n", - " block6d_expand_conv (Conv2D) (None, None, None, 221184 ['block6c_add[0][0]'] \n", - " 1152) \n", + " block6d_expand_conv (Conv2 (None, None, None, 1152) 221184 ['block6c_add[0][0]'] \n", + " D) \n", " \n", - " block6d_expand_bn (BatchNormal (None, None, None, 4608 ['block6d_expand_conv[0][0]'] \n", - " ization) 1152) \n", + " block6d_expand_bn (BatchNo (None, None, None, 1152) 4608 ['block6d_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block6d_expand_activation (Act (None, None, None, 0 ['block6d_expand_bn[0][0]'] \n", - " ivation) 1152) \n", + " block6d_expand_activation (None, None, None, 1152) 0 ['block6d_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block6d_dwconv2 (DepthwiseConv (None, None, None, 10368 ['block6d_expand_activation[0][0]\n", - " 2D) 1152) '] \n", + " block6d_dwconv2 (Depthwise (None, None, None, 1152) 10368 ['block6d_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block6d_bn (BatchNormalization (None, None, None, 4608 ['block6d_dwconv2[0][0]'] \n", - " ) 1152) \n", + " block6d_bn (BatchNormaliza (None, None, None, 1152) 4608 ['block6d_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block6d_activation (Activation (None, None, None, 0 ['block6d_bn[0][0]'] \n", - " ) 1152) \n", + " block6d_activation (Activa (None, None, None, 1152) 0 ['block6d_bn[0][0]'] \n", + " tion) \n", " \n", - " block6d_se_squeeze (GlobalAver (None, 1152) 0 ['block6d_activation[0][0]'] \n", - " agePooling2D) \n", + " block6d_se_squeeze (Global (None, 1152) 0 ['block6d_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block6d_se_reshape (Reshape) (None, 1, 1, 1152) 0 ['block6d_se_squeeze[0][0]'] \n", + " block6d_se_reshape (Reshap (None, 1, 1, 1152) 0 ['block6d_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block6d_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6d_se_reshape[0][0]'] \n", + " block6d_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6d_se_reshape[0][0]'] \n", " \n", - " block6d_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6d_se_reduce[0][0]'] \n", + " block6d_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6d_se_reduce[0][0]'] \n", " \n", - " block6d_se_excite (Multiply) (None, None, None, 0 ['block6d_activation[0][0]', \n", - " 1152) 'block6d_se_expand[0][0]'] \n", + " block6d_se_excite (Multipl (None, None, None, 1152) 0 ['block6d_activation[0][0]', \n", + " y) 'block6d_se_expand[0][0]'] \n", " \n", - " block6d_project_conv (Conv2D) (None, None, None, 221184 ['block6d_se_excite[0][0]'] \n", - " 192) \n", + " block6d_project_conv (Conv (None, None, None, 192) 221184 ['block6d_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block6d_project_bn (BatchNorma (None, None, None, 768 ['block6d_project_conv[0][0]'] \n", - " lization) 192) \n", + " block6d_project_bn (BatchN (None, None, None, 192) 768 ['block6d_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block6d_drop (Dropout) (None, None, None, 0 ['block6d_project_bn[0][0]'] \n", - " 192) \n", + " block6d_drop (Dropout) (None, None, None, 192) 0 ['block6d_project_bn[0][0]'] \n", " \n", - " block6d_add (Add) (None, None, None, 0 ['block6d_drop[0][0]', \n", - " 192) 'block6c_add[0][0]'] \n", + " block6d_add (Add) (None, None, None, 192) 0 ['block6d_drop[0][0]', \n", + " 'block6c_add[0][0]'] \n", " \n", - " block6e_expand_conv (Conv2D) (None, None, None, 221184 ['block6d_add[0][0]'] \n", - " 1152) \n", + " block6e_expand_conv (Conv2 (None, None, None, 1152) 221184 ['block6d_add[0][0]'] \n", + " D) \n", " \n", - " block6e_expand_bn (BatchNormal (None, None, None, 4608 ['block6e_expand_conv[0][0]'] \n", - " ization) 1152) \n", + " block6e_expand_bn (BatchNo (None, None, None, 1152) 4608 ['block6e_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block6e_expand_activation (Act (None, None, None, 0 ['block6e_expand_bn[0][0]'] \n", - " ivation) 1152) \n", + " block6e_expand_activation (None, None, None, 1152) 0 ['block6e_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block6e_dwconv2 (DepthwiseConv (None, None, None, 10368 ['block6e_expand_activation[0][0]\n", - " 2D) 1152) '] \n", + " block6e_dwconv2 (Depthwise (None, None, None, 1152) 10368 ['block6e_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block6e_bn (BatchNormalization (None, None, None, 4608 ['block6e_dwconv2[0][0]'] \n", - " ) 1152) \n", + " block6e_bn (BatchNormaliza (None, None, None, 1152) 4608 ['block6e_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block6e_activation (Activation (None, None, None, 0 ['block6e_bn[0][0]'] \n", - " ) 1152) \n", + " block6e_activation (Activa (None, None, None, 1152) 0 ['block6e_bn[0][0]'] \n", + " tion) \n", " \n", - " block6e_se_squeeze (GlobalAver (None, 1152) 0 ['block6e_activation[0][0]'] \n", - " agePooling2D) \n", + " block6e_se_squeeze (Global (None, 1152) 0 ['block6e_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block6e_se_reshape (Reshape) (None, 1, 1, 1152) 0 ['block6e_se_squeeze[0][0]'] \n", + " block6e_se_reshape (Reshap (None, 1, 1, 1152) 0 ['block6e_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block6e_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6e_se_reshape[0][0]'] \n", + " block6e_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6e_se_reshape[0][0]'] \n", " \n", - " block6e_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6e_se_reduce[0][0]'] \n", + " block6e_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6e_se_reduce[0][0]'] \n", " \n", - " block6e_se_excite (Multiply) (None, None, None, 0 ['block6e_activation[0][0]', \n", - " 1152) 'block6e_se_expand[0][0]'] \n", + " block6e_se_excite (Multipl (None, None, None, 1152) 0 ['block6e_activation[0][0]', \n", + " y) 'block6e_se_expand[0][0]'] \n", " \n", - " block6e_project_conv (Conv2D) (None, None, None, 221184 ['block6e_se_excite[0][0]'] \n", - " 192) \n", + " block6e_project_conv (Conv (None, None, None, 192) 221184 ['block6e_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block6e_project_bn (BatchNorma (None, None, None, 768 ['block6e_project_conv[0][0]'] \n", - " lization) 192) \n", + " block6e_project_bn (BatchN (None, None, None, 192) 768 ['block6e_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block6e_drop (Dropout) (None, None, None, 0 ['block6e_project_bn[0][0]'] \n", - " 192) \n", + " block6e_drop (Dropout) (None, None, None, 192) 0 ['block6e_project_bn[0][0]'] \n", " \n", - " block6e_add (Add) (None, None, None, 0 ['block6e_drop[0][0]', \n", - " 192) 'block6d_add[0][0]'] \n", + " block6e_add (Add) (None, None, None, 192) 0 ['block6e_drop[0][0]', \n", + " 'block6d_add[0][0]'] \n", " \n", - " block6f_expand_conv (Conv2D) (None, None, None, 221184 ['block6e_add[0][0]'] \n", - " 1152) \n", + " block6f_expand_conv (Conv2 (None, None, None, 1152) 221184 ['block6e_add[0][0]'] \n", + " D) \n", " \n", - " block6f_expand_bn (BatchNormal (None, None, None, 4608 ['block6f_expand_conv[0][0]'] \n", - " ization) 1152) \n", + " block6f_expand_bn (BatchNo (None, None, None, 1152) 4608 ['block6f_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block6f_expand_activation (Act (None, None, None, 0 ['block6f_expand_bn[0][0]'] \n", - " ivation) 1152) \n", + " block6f_expand_activation (None, None, None, 1152) 0 ['block6f_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block6f_dwconv2 (DepthwiseConv (None, None, None, 10368 ['block6f_expand_activation[0][0]\n", - " 2D) 1152) '] \n", + " block6f_dwconv2 (Depthwise (None, None, None, 1152) 10368 ['block6f_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block6f_bn (BatchNormalization (None, None, None, 4608 ['block6f_dwconv2[0][0]'] \n", - " ) 1152) \n", + " block6f_bn (BatchNormaliza (None, None, None, 1152) 4608 ['block6f_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block6f_activation (Activation (None, None, None, 0 ['block6f_bn[0][0]'] \n", - " ) 1152) \n", + " block6f_activation (Activa (None, None, None, 1152) 0 ['block6f_bn[0][0]'] \n", + " tion) \n", " \n", - " block6f_se_squeeze (GlobalAver (None, 1152) 0 ['block6f_activation[0][0]'] \n", - " agePooling2D) \n", + " block6f_se_squeeze (Global (None, 1152) 0 ['block6f_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block6f_se_reshape (Reshape) (None, 1, 1, 1152) 0 ['block6f_se_squeeze[0][0]'] \n", + " block6f_se_reshape (Reshap (None, 1, 1, 1152) 0 ['block6f_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block6f_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6f_se_reshape[0][0]'] \n", + " block6f_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6f_se_reshape[0][0]'] \n", " \n", - " block6f_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6f_se_reduce[0][0]'] \n", + " block6f_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6f_se_reduce[0][0]'] \n", " \n", - " block6f_se_excite (Multiply) (None, None, None, 0 ['block6f_activation[0][0]', \n", - " 1152) 'block6f_se_expand[0][0]'] \n", + " block6f_se_excite (Multipl (None, None, None, 1152) 0 ['block6f_activation[0][0]', \n", + " y) 'block6f_se_expand[0][0]'] \n", " \n", - " block6f_project_conv (Conv2D) (None, None, None, 221184 ['block6f_se_excite[0][0]'] \n", - " 192) \n", + " block6f_project_conv (Conv (None, None, None, 192) 221184 ['block6f_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block6f_project_bn (BatchNorma (None, None, None, 768 ['block6f_project_conv[0][0]'] \n", - " lization) 192) \n", + " block6f_project_bn (BatchN (None, None, None, 192) 768 ['block6f_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block6f_drop (Dropout) (None, None, None, 0 ['block6f_project_bn[0][0]'] \n", - " 192) \n", + " block6f_drop (Dropout) (None, None, None, 192) 0 ['block6f_project_bn[0][0]'] \n", " \n", - " block6f_add (Add) (None, None, None, 0 ['block6f_drop[0][0]', \n", - " 192) 'block6e_add[0][0]'] \n", + " block6f_add (Add) (None, None, None, 192) 0 ['block6f_drop[0][0]', \n", + " 'block6e_add[0][0]'] \n", " \n", - " block6g_expand_conv (Conv2D) (None, None, None, 221184 ['block6f_add[0][0]'] \n", - " 1152) \n", + " block6g_expand_conv (Conv2 (None, None, None, 1152) 221184 ['block6f_add[0][0]'] \n", + " D) \n", " \n", - " block6g_expand_bn (BatchNormal (None, None, None, 4608 ['block6g_expand_conv[0][0]'] \n", - " ization) 1152) \n", + " block6g_expand_bn (BatchNo (None, None, None, 1152) 4608 ['block6g_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block6g_expand_activation (Act (None, None, None, 0 ['block6g_expand_bn[0][0]'] \n", - " ivation) 1152) \n", + " block6g_expand_activation (None, None, None, 1152) 0 ['block6g_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block6g_dwconv2 (DepthwiseConv (None, None, None, 10368 ['block6g_expand_activation[0][0]\n", - " 2D) 1152) '] \n", + " block6g_dwconv2 (Depthwise (None, None, None, 1152) 10368 ['block6g_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block6g_bn (BatchNormalization (None, None, None, 4608 ['block6g_dwconv2[0][0]'] \n", - " ) 1152) \n", + " block6g_bn (BatchNormaliza (None, None, None, 1152) 4608 ['block6g_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block6g_activation (Activation (None, None, None, 0 ['block6g_bn[0][0]'] \n", - " ) 1152) \n", + " block6g_activation (Activa (None, None, None, 1152) 0 ['block6g_bn[0][0]'] \n", + " tion) \n", " \n", - " block6g_se_squeeze (GlobalAver (None, 1152) 0 ['block6g_activation[0][0]'] \n", - " agePooling2D) \n", + " block6g_se_squeeze (Global (None, 1152) 0 ['block6g_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block6g_se_reshape (Reshape) (None, 1, 1, 1152) 0 ['block6g_se_squeeze[0][0]'] \n", + " block6g_se_reshape (Reshap (None, 1, 1, 1152) 0 ['block6g_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block6g_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6g_se_reshape[0][0]'] \n", + " block6g_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6g_se_reshape[0][0]'] \n", " \n", - " block6g_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6g_se_reduce[0][0]'] \n", + " block6g_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6g_se_reduce[0][0]'] \n", " \n", - " block6g_se_excite (Multiply) (None, None, None, 0 ['block6g_activation[0][0]', \n", - " 1152) 'block6g_se_expand[0][0]'] \n", + " block6g_se_excite (Multipl (None, None, None, 1152) 0 ['block6g_activation[0][0]', \n", + " y) 'block6g_se_expand[0][0]'] \n", " \n", - " block6g_project_conv (Conv2D) (None, None, None, 221184 ['block6g_se_excite[0][0]'] \n", - " 192) \n", + " block6g_project_conv (Conv (None, None, None, 192) 221184 ['block6g_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block6g_project_bn (BatchNorma (None, None, None, 768 ['block6g_project_conv[0][0]'] \n", - " lization) 192) \n", + " block6g_project_bn (BatchN (None, None, None, 192) 768 ['block6g_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block6g_drop (Dropout) (None, None, None, 0 ['block6g_project_bn[0][0]'] \n", - " 192) \n", + " block6g_drop (Dropout) (None, None, None, 192) 0 ['block6g_project_bn[0][0]'] \n", " \n", - " block6g_add (Add) (None, None, None, 0 ['block6g_drop[0][0]', \n", - " 192) 'block6f_add[0][0]'] \n", + " block6g_add (Add) (None, None, None, 192) 0 ['block6g_drop[0][0]', \n", + " 'block6f_add[0][0]'] \n", " \n", - " block6h_expand_conv (Conv2D) (None, None, None, 221184 ['block6g_add[0][0]'] \n", - " 1152) \n", + " block6h_expand_conv (Conv2 (None, None, None, 1152) 221184 ['block6g_add[0][0]'] \n", + " D) \n", " \n", - " block6h_expand_bn (BatchNormal (None, None, None, 4608 ['block6h_expand_conv[0][0]'] \n", - " ization) 1152) \n", + " block6h_expand_bn (BatchNo (None, None, None, 1152) 4608 ['block6h_expand_conv[0][0]'] \n", + " rmalization) \n", " \n", - " block6h_expand_activation (Act (None, None, None, 0 ['block6h_expand_bn[0][0]'] \n", - " ivation) 1152) \n", + " block6h_expand_activation (None, None, None, 1152) 0 ['block6h_expand_bn[0][0]'] \n", + " (Activation) \n", " \n", - " block6h_dwconv2 (DepthwiseConv (None, None, None, 10368 ['block6h_expand_activation[0][0]\n", - " 2D) 1152) '] \n", + " block6h_dwconv2 (Depthwise (None, None, None, 1152) 10368 ['block6h_expand_activation[0]\n", + " Conv2D) [0]'] \n", " \n", - " block6h_bn (BatchNormalization (None, None, None, 4608 ['block6h_dwconv2[0][0]'] \n", - " ) 1152) \n", + " block6h_bn (BatchNormaliza (None, None, None, 1152) 4608 ['block6h_dwconv2[0][0]'] \n", + " tion) \n", " \n", - " block6h_activation (Activation (None, None, None, 0 ['block6h_bn[0][0]'] \n", - " ) 1152) \n", + " block6h_activation (Activa (None, None, None, 1152) 0 ['block6h_bn[0][0]'] \n", + " tion) \n", " \n", - " block6h_se_squeeze (GlobalAver (None, 1152) 0 ['block6h_activation[0][0]'] \n", - " agePooling2D) \n", + " block6h_se_squeeze (Global (None, 1152) 0 ['block6h_activation[0][0]'] \n", + " AveragePooling2D) \n", " \n", - " block6h_se_reshape (Reshape) (None, 1, 1, 1152) 0 ['block6h_se_squeeze[0][0]'] \n", + " block6h_se_reshape (Reshap (None, 1, 1, 1152) 0 ['block6h_se_squeeze[0][0]'] \n", + " e) \n", " \n", - " block6h_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6h_se_reshape[0][0]'] \n", + " block6h_se_reduce (Conv2D) (None, 1, 1, 48) 55344 ['block6h_se_reshape[0][0]'] \n", " \n", - " block6h_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6h_se_reduce[0][0]'] \n", + " block6h_se_expand (Conv2D) (None, 1, 1, 1152) 56448 ['block6h_se_reduce[0][0]'] \n", " \n", - " block6h_se_excite (Multiply) (None, None, None, 0 ['block6h_activation[0][0]', \n", - " 1152) 'block6h_se_expand[0][0]'] \n", + " block6h_se_excite (Multipl (None, None, None, 1152) 0 ['block6h_activation[0][0]', \n", + " y) 'block6h_se_expand[0][0]'] \n", " \n", - " block6h_project_conv (Conv2D) (None, None, None, 221184 ['block6h_se_excite[0][0]'] \n", - " 192) \n", + " block6h_project_conv (Conv (None, None, None, 192) 221184 ['block6h_se_excite[0][0]'] \n", + " 2D) \n", " \n", - " block6h_project_bn (BatchNorma (None, None, None, 768 ['block6h_project_conv[0][0]'] \n", - " lization) 192) \n", + " block6h_project_bn (BatchN (None, None, None, 192) 768 ['block6h_project_conv[0][0]']\n", + " ormalization) \n", " \n", - " block6h_drop (Dropout) (None, None, None, 0 ['block6h_project_bn[0][0]'] \n", - " 192) \n", + " block6h_drop (Dropout) (None, None, None, 192) 0 ['block6h_project_bn[0][0]'] \n", " \n", - " block6h_add (Add) (None, None, None, 0 ['block6h_drop[0][0]', \n", - " 192) 'block6g_add[0][0]'] \n", + " block6h_add (Add) (None, None, None, 192) 0 ['block6h_drop[0][0]', \n", + " 'block6g_add[0][0]'] \n", " \n", - " top_conv (Conv2D) (None, None, None, 245760 ['block6h_add[0][0]'] \n", - " 1280) \n", + " top_conv (Conv2D) (None, None, None, 1280) 245760 ['block6h_add[0][0]'] \n", " \n", - " top_bn (BatchNormalization) (None, None, None, 5120 ['top_conv[0][0]'] \n", - " 1280) \n", + " top_bn (BatchNormalization (None, None, None, 1280) 5120 ['top_conv[0][0]'] \n", + " ) \n", " \n", - " top_activation (Activation) (None, None, None, 0 ['top_bn[0][0]'] \n", - " 1280) \n", + " top_activation (Activation (None, None, None, 1280) 0 ['top_bn[0][0]'] \n", + " ) \n", " \n", "==================================================================================================\n", - "Total params: 5,919,312\n", - "Trainable params: 0\n", - "Non-trainable params: 5,919,312\n", + "Total params: 5919312 (22.58 MB)\n", + "Trainable params: 0 (0.00 Byte)\n", + "Non-trainable params: 5919312 (22.58 MB)\n", "__________________________________________________________________________________________________\n" ] } @@ -2208,13 +2252,13 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "KGY1BjnzJDEx", - "outputId": "e03aee53-fd29-46bf-875b-024fb143c08a" + "outputId": "fe23c59b-d754-4f2e-d007-079d935f05e3" }, "outputs": [ { @@ -2227,18 +2271,19 @@ "=================================================================\n", " input_layer (InputLayer) [(None, 224, 224, 3)] 0 \n", " \n", - " efficientnetv2-b0 (Function (None, None, None, 1280) 5919312 \n", - " al) \n", + " efficientnetv2-b0 (Functio (None, None, None, 1280 5919312 \n", + " nal) ) \n", " \n", - " global_average_pooling_laye (None, 1280) 0 \n", - " r (GlobalAveragePooling2D) \n", + " global_average_pooling_lay (None, 1280) 0 \n", + " er (GlobalAveragePooling2D \n", + " ) \n", " \n", " output_layer (Dense) (None, 10) 12810 \n", " \n", "=================================================================\n", - "Total params: 5,932,122\n", - "Trainable params: 12,810\n", - "Non-trainable params: 5,919,312\n", + "Total params: 5932122 (22.63 MB)\n", + "Trainable params: 12810 (50.04 KB)\n", + "Non-trainable params: 5919312 (22.58 MB)\n", "_________________________________________________________________\n" ] } @@ -2266,14 +2311,14 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 927 }, "id": "tWYqK_86xSUJ", - "outputId": "ac2fe1d8-5c23-4a5d-fc43-9b94ac20bb15" + "outputId": "cdbbe5d3-c5e5-4357-d77b-5b0e5cff62e4" }, "outputs": [ { @@ -2282,7 +2327,7 @@ "text/plain": [ "
" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABfqUlEQVR4nO3dd1yVdf/H8dc57I0oAiruhaiIM7WhWeGItGWld2rbUtO7qXd3mo2fdbds2C5taKaWo9xZapmZCxX3BhXcTJV1rt8fR1EUFBC4OPB+Ph7Xo841OJ+rI5531/d7fS6LYRgGIiIiIiaxml2AiIiIVG4KIyIiImIqhRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMiIiJiKoUREbkqkyZNwmKxsGbNGrNLEREHpTAiIiIiplIYEREREVMpjIhIqVu/fj09evTA19cXb29vunXrxt9//51nn6ysLMaOHUujRo1wd3enatWqXHvttSxevDh3n8TERB544AFq1aqFm5sbISEh9O7dm3379pXxGYlISXI2uwARqdg2b97Mddddh6+vL8899xwuLi58+umndOnShWXLltGhQwcAXnrpJcaNG8fDDz9M+/btSUlJYc2aNaxbt46bb74ZgDvvvJPNmzczbNgw6taty5EjR1i8eDFxcXHUrVvXxLMUkathMQzDMLsIEXFckyZN4oEHHmD16tW0bdv2ku2333478+bNY+vWrdSvXx+AhIQEmjRpQmRkJMuWLQOgVatW1KpVi19++SXf90lKSqJKlSq8+eabPPPMM6V3QiJS5jRMIyKlJicnh0WLFtGnT5/cIAIQEhJCv379+PPPP0lJSQHA39+fzZs3s3Pnznx/loeHB66urixdupSTJ0+WSf0iUjYURkSk1Bw9epRTp07RpEmTS7aFhYVhs9mIj48H4OWXXyYpKYnGjRvTokULnn32WTZu3Ji7v5ubG2+88Qbz588nKCiI66+/nv/9738kJiaW2fmISOlQGBGRcuH6669n9+7dfPXVVzRv3pwvvviC1q1b88UXX+TuM2LECHbs2MG4ceNwd3fnxRdfJCwsjPXr15tYuYhcLYURESk1gYGBeHp6sn379ku2bdu2DavVSmhoaO66gIAAHnjgAb7//nvi4+Np2bIlL730Up7jGjRowNNP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fWPixIllXndhFfX83njjDaNBgwaGu7u7ERAQYHTp0sX47bffzCm+EPI7NyDPZ+LIv4fFOT9H+x188MEHjTp16hiurq5GYGCg0a1bt9wvasNw7M/PMIp+fo72+eXn4jBSHj5Di2EYRulddxERERG5vAo7Z0REREQcg8KIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMi4hAsFguzZs0yuwwRKQUKIyJyRYMGDcJisVyydO/e3ezSRKQCqLBP7RWRktW9e3cmTpyYZ52bm5tJ1YhIRaIrIyJSKG5ubgQHB+dZqlSpAtiHUD7++GN69OiBh4cH9evXZ8aMGXmO37RpEzfeeCMeHh5UrVqVRx99lLS0tDz7fPXVV4SHh+Pm5kZISAhDhw7Ns/3YsWPcfvvteHp60qhRI+bMmZO77eTJk/Tv35/AwEA8PDxo1KjRJeFJRMonhRERKREvvvgid955Jxs2bKB///7ce++9bN26FYD09HSioqKoUqUKq1evZvr06fz66695wsbHH3/MkCFDePTRR9m0aRNz5syhYcOGed5j7Nix9O3bl40bN9KzZ0/69+/PiRMnct9/y5YtzJ8/n61bt/Lxxx9TrVq1svsPICLFV6qP4RORCmHgwIGGk5OT4eXllWd57bXXDMOwP7128ODBeY7p0KGD8fjjjxuGYRifffaZUaVKFSMtLS13+9y5cw2r1WokJiYahmEYNWrUMF544YUCawCM//73v7mv09LSDMCYP3++YRiGER0dbTzwwAMlc8IiUqY0Z0RECqVr1658/PHHedYFBATk/nvHjh3zbOvYsSMxMTEAbN26lYiICLy8vHK3d+7cGZvNxvbt27FYLBw6dIhu3bpdtoaWLVvm/ruXlxe+vr4cOXIEgMcff5w777yTdevWccstt9CnTx86depUrHMVkbKlMCIiheLl5XXJsElJ8fDwKNR+Li4ueV5bLBZsNhsAPXr0YP/+/cybN4/FixfTrVs3hgwZwltvvVXi9YpIydKcEREpEX///fclr8PCwgAICwtjw4YNpKen525fsWIFVquVJk2a4OPjQ926dVmyZMlV1RAYGMjAgQP57rvvGD9+PJ999tlV/TwRKRu6MiIihZKRkUFiYmKedc7OzrmTRKdPn07btm259tprmTx5Mv/88w9ffvklAP3792fMmDEMHDiQl156iaNHjzJs2DDuv/9+goKCAHjppZcYPHgw1atXp0ePHqSmprJixQqGDRtWqPpGjx5NmzZtCA8PJyMjg19++SU3DIlI+aYwIiKFsmDBAkJCQvKsa9KkCdu2bQPsd7pMnTqVJ554gpCQEL7//nuaNWsGgKenJwsXLmT48OG0a9cOT09P7rzzTt55553cnzVw4EDOnDnDu+++yzPPPEO1atW46667Cl2fq6sro0aNYt++fXh4eHDdddcxderUEjhzESltFsMwDLOLEBHHZrFYmDlzJn369DG7FBFxQJozIiIiIqZSGBERERFTac6IiFw1jfaKyNXQlRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMiIiJiKoURERERMdX/A3Gtfx4AB4pOAAAAAElFTkSuQmCC\n" + "image/png": "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J5588kkAWrRoQaVKlejSpQsvvvgiwcHBFx3j4eGBh4dHaZdWoupX9+H+LvV4f/kenv9hG10aVsPbXWvKiYiIXE2p94xkZGRgtRZ+GxcX+4yTYk7kcXgjb2pAqL8Xh0+f5b2fdptdjohIiSipNTikfCqJ/z6K/U/3tLQ0du8u+EO7b98+4uLiCAgIoFatWowbN47Dhw/zxRdfAPYlee+//34++OADevXqRVJSEmPGjKF9+/aEhJh0s6VS4u3uyvjoCB78ch2f/LKX29vUpH51H7PLEhG5Ju7u7litVhITE6levTru7u4aDyf5DMMgOzubY8eOYbVacXd3v+afVex1RpYvX0737t0v2j506FCmTZvGsGHD2L9/P8uXL8/f9+677/Lhhx+yb98+/P39uemmm3jllVcIDQ0t0ns68jojf2UYBvdOW8PPO47RuUE1vvy/9vryiojTys7OJikpiYwM3fZCLu38gqaXCiNF/ftd7DBiBmcKIwAHTqTT862VZOfaeG9QK25tUb56gESkYjEMg9zcXPLydJdyKczFxQVXV9fL/qO71BY9k6urXbUSD91Yn7eX7eKFedvo1jgQHw/9qkXEOVksFtzc3DSVVUqNbpRXSh7qVp9aAd4cSc3i7R93ml2OiIiIw1IYKSWebi5M6m9fne+zVfvZkXzG5IpEREQck8JIKereJJBbIoLIsxk8F7ul3E1lFhERKQkKI6VsfHQEnm5W/tx3kjlxh80uR0RExOEojJSymlW8GXVTQwBemh9PytkckysSERFxLAojZeC+LnWpV60Sx9OyeGupBrOKiIhcSGGkDHi4uvB8TDMAvli9ny2HU0yuSERExHEojJSRzg2r0a9FMDYDnovdgs2mwawiIiKgMFKmnusXQSV3FzYcPM2sdYfMLkdERMQhKIyUoRp+noy5uREALy+K53RGtskViYiImE9hpIwN61SHRkE+nEzP5tXFO8wuR0RExHQKI2XMzcWaP5j16z8PsjHhtLkFiYiImExhxAQ31KvKba1CMQx4ds4W8jSYVUREKjCFEZOM69uEyh6ubD6cwtd/HjS7HBEREdMojJgksLInj99iH8z62uIdnEjLMrkiERERcyiMmOifN9QmItiXlLM5vLww3uxyRERETKEwYiJXFysvDLAPZv1u3SHW7j9pckUiIiJlT2HEZG1qV2Fg25qAfTBr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\n" }, "metadata": {} }, @@ -2292,7 +2337,7 @@ "text/plain": [ "
" ], - "image/png": "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\n" + "image/png": "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\n" }, "metadata": {} } @@ -2319,13 +2364,13 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "xYNLE0VU_c50", - "outputId": "8cdd64dc-b6ca-48d4-e6cd-e2208959e34f" + "outputId": "ad95afd8-1045-4afd-e515-31d786643379" }, "outputs": [ { @@ -2343,14 +2388,14 @@ " [ 0.9058464 0.29855987 -0.22561555]\n", " [-0.7616443 -1.8917141 -0.93847126]]\n", "\n", - " [[ 0.77852213 -0.47338897 0.97772694]\n", - " [ 0.24694404 0.20573747 -0.5256233 ]\n", - " [ 0.32410017 0.02545409 -0.10638497]\n", - " [-0.6369475 1.1603122 0.2507359 ]]\n", + " [[ 0.77852213 -0.47338894 0.97772694]\n", + " [ 0.24694404 0.20573746 -0.52562326]\n", + " [ 0.32410017 0.02545409 -0.10638496]\n", + " [-0.63694745 1.1603122 0.2507359 ]]\n", "\n", " [[-0.41728503 0.4012578 -1.4145443 ]\n", " [-0.5931857 -1.6617213 0.33567193]\n", - " [ 0.10815629 0.23479682 -0.56668764]\n", + " [ 0.10815628 0.23479679 -0.56668764]\n", " [-0.35819843 0.88698614 0.52744764]]]]\n", "\n", "2D global average pooled random tensor:\n", @@ -2392,13 +2437,13 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "jBzN5HfAAUHx", - "outputId": "ecc7f3bb-aabb-469a-efd5-f479fd9f121a" + "outputId": "1025fed9-a293-4b1a-dad7-6c7a81d9e476" }, "outputs": [ { @@ -2409,7 +2454,7 @@ ] }, "metadata": {}, - "execution_count": 18 + "execution_count": 21 } ], "source": [ @@ -2461,29 +2506,29 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "2P1rLJmaCXZN", - "outputId": "430fe00f-00e9-437f-aee2-65f00ca679a1" + "outputId": "8be6346f-0e66-4c0f-d2d8-f9204a3242ce" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "--2023-08-18 01:40:38-- https://storage.googleapis.com/ztm_tf_course/food_vision/10_food_classes_1_percent.zip\n", - "Resolving storage.googleapis.com (storage.googleapis.com)... 74.125.20.128, 108.177.98.128, 74.125.197.128, ...\n", - "Connecting to storage.googleapis.com (storage.googleapis.com)|74.125.20.128|:443... connected.\n", + "--2024-01-14 13:38:58-- https://storage.googleapis.com/ztm_tf_course/food_vision/10_food_classes_1_percent.zip\n", + "Resolving storage.googleapis.com (storage.googleapis.com)... 172.217.194.207, 142.250.4.207, 172.253.118.207, ...\n", + "Connecting to storage.googleapis.com (storage.googleapis.com)|172.217.194.207|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 133612354 (127M) [application/zip]\n", "Saving to: ‘10_food_classes_1_percent.zip’\n", "\n", - "10_food_classes_1_p 100%[===================>] 127.42M 222MB/s in 0.6s \n", + "10_food_classes_1_p 100%[===================>] 127.42M 21.6MB/s in 7.0s \n", "\n", - "2023-08-18 01:40:39 (222 MB/s) - ‘10_food_classes_1_percent.zip’ saved [133612354/133612354]\n", + "2024-01-14 13:39:06 (18.1 MB/s) - ‘10_food_classes_1_percent.zip’ saved [133612354/133612354]\n", "\n" ] } @@ -2509,13 +2554,13 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sqoi0htuo6Sb", - "outputId": "6923f63d-b9ad-47da-f59c-abc12b75befa" + "outputId": "ac7f7e64-76d7-419b-d78f-9cf569ed1e46" }, "outputs": [ { @@ -2524,27 +2569,27 @@ "text": [ "There are 2 directories and 0 images in '10_food_classes_1_percent'.\n", "There are 10 directories and 0 images in '10_food_classes_1_percent/train'.\n", - "There are 0 directories and 7 images in '10_food_classes_1_percent/train/ramen'.\n", + "There are 0 directories and 7 images in '10_food_classes_1_percent/train/chicken_wings'.\n", "There are 0 directories and 7 images in '10_food_classes_1_percent/train/chicken_curry'.\n", + "There are 0 directories and 7 images in '10_food_classes_1_percent/train/fried_rice'.\n", + "There are 0 directories and 7 images in '10_food_classes_1_percent/train/sushi'.\n", + "There are 0 directories and 7 images in '10_food_classes_1_percent/train/hamburger'.\n", "There are 0 directories and 7 images in '10_food_classes_1_percent/train/pizza'.\n", + "There are 0 directories and 7 images in '10_food_classes_1_percent/train/ramen'.\n", "There are 0 directories and 7 images in '10_food_classes_1_percent/train/ice_cream'.\n", - "There are 0 directories and 7 images in '10_food_classes_1_percent/train/grilled_salmon'.\n", "There are 0 directories and 7 images in '10_food_classes_1_percent/train/steak'.\n", - "There are 0 directories and 7 images in '10_food_classes_1_percent/train/chicken_wings'.\n", - "There are 0 directories and 7 images in '10_food_classes_1_percent/train/hamburger'.\n", - "There are 0 directories and 7 images in '10_food_classes_1_percent/train/sushi'.\n", - "There are 0 directories and 7 images in '10_food_classes_1_percent/train/fried_rice'.\n", + "There are 0 directories and 7 images in '10_food_classes_1_percent/train/grilled_salmon'.\n", "There are 10 directories and 0 images in '10_food_classes_1_percent/test'.\n", - "There are 0 directories and 250 images in '10_food_classes_1_percent/test/ramen'.\n", + "There are 0 directories and 250 images in '10_food_classes_1_percent/test/chicken_wings'.\n", "There are 0 directories and 250 images in '10_food_classes_1_percent/test/chicken_curry'.\n", + "There are 0 directories and 250 images in '10_food_classes_1_percent/test/fried_rice'.\n", + "There are 0 directories and 250 images in '10_food_classes_1_percent/test/sushi'.\n", + "There are 0 directories and 250 images in '10_food_classes_1_percent/test/hamburger'.\n", "There are 0 directories and 250 images in '10_food_classes_1_percent/test/pizza'.\n", + "There are 0 directories and 250 images in '10_food_classes_1_percent/test/ramen'.\n", "There are 0 directories and 250 images in '10_food_classes_1_percent/test/ice_cream'.\n", - "There are 0 directories and 250 images in '10_food_classes_1_percent/test/grilled_salmon'.\n", "There are 0 directories and 250 images in '10_food_classes_1_percent/test/steak'.\n", - "There are 0 directories and 250 images in '10_food_classes_1_percent/test/chicken_wings'.\n", - "There are 0 directories and 250 images in '10_food_classes_1_percent/test/hamburger'.\n", - "There are 0 directories and 250 images in '10_food_classes_1_percent/test/sushi'.\n", - "There are 0 directories and 250 images in '10_food_classes_1_percent/test/fried_rice'.\n" + "There are 0 directories and 250 images in '10_food_classes_1_percent/test/grilled_salmon'.\n" ] } ], @@ -2568,13 +2613,13 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Llh9sHmdtgf6", - "outputId": "b6594c4f-b770-41e9-98e9-77cab9336c23" + "outputId": "f340e3f9-cb62-4c9a-8ae9-d01318aa5a90" }, "outputs": [ { @@ -2648,7 +2693,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 25, "metadata": { "id": "bjHAalnakGEu" }, @@ -2694,14 +2739,14 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 839 }, "id": "VBWXrlJXwKkE", - "outputId": "d5ca5ba1-95db-4aa7-ff84-2e0c00e8f611" + "outputId": "591ae2fb-dd3f-45a3-a1b6-8f16068baede" }, "outputs": [ { @@ -2710,7 +2755,7 @@ "text/plain": [ "
" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbEAAAGbCAYAAABK567hAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9d5QlV3Xv/zmpqm7o7onKQgkhMrbBBANPJMMiG9ukBxgBBvlhkm1sY342+YGNH0Ys3gMExiLapIcDxgbDskgiGgQCCaE4I2k0uafTvbeqTti/P051T7dmFJEQevR3rZ65t27dqroVzj577+/+biUiwjrWsY51rGMdd0Do2/sA1rGOdaxjHeu4pVg3YutYxzrWsY47LNaN2DrWsY51rOMOi3Ujto51rGMd67jDYt2IrWMd61jHOu6wWDdi61jHOtaxjjss1o3YOtaxjnWs4w6LdSO2jnWsYx3ruMNi3YitYx3rWMc67rC4XY3Y6173OpRSt+i7H/jAB1BKsW3btlv3oFZh27ZtKKX4wAc+cJvt49bEiSeeyBlnnHF7H8YKzjjjDE488cTb+zBuc3z4wx/mrne9K845NmzYcHsfzk+Nn+a5vKPius/Ol770JZRSfOlLX1pZdlvcz7f3M6uU4nWve93ttv9bA7fIiF144YU8+9nP5thjj6UsS4455hie9axnceGFF97ax7eOdfxc4+KLL+aMM87glFNO4X3vex/vfe97b+9DWsc6fqFgb+4XPv3pT/PMZz6TTZs28YIXvICTTjqJbdu28f73v59PfepTfOxjH+MpT3nKTdrWn//5n/OqV73qZh80wHOe8xye8YxnUJblLfr+Om57vO997yOldHsfxm2KL33pS6SUeMc73sGd73zn2/tw1nEL8ZOf/ASt17Mrd0TcLCN2+eWX85znPIeTTz6Zr3zlK2zdunXls5e//OU89KEP5TnPeQ4XXHABJ5988vVuZzQaMRgMsNZi7c22owAYYzDG3KLv/iyw/Bt/keGcu70P4TbHnj17AG40jCgi1HVNr9f7GRzVOm4KVl+T9cnwHRc3a+rx13/914zHY9773veuMWAAW7Zs4eyzz2Y0GvHWt751ZflyfP2iiy7iv//3/87GjRt5yEMesuaz1ZhMJrzsZS9jy5YtTE1N8aQnPYkdO3YcErs9XE7sxBNP5AlPeAJf+9rXuP/9709VVZx88sl86EMfWrOP2dlZXvnKV3Kve92L4XDI9PQ0j33sY/nBD35wc07HIcfy5S9/mRe/+MUcccQRHHfccQBs376dF7/4xZx22mn0ej02b97MU5/61ENyecvbOO+88/jDP/xDtm7dymAw4ClPeQp79+5ds66I8KY3vYnjjjuOfr/Pwx/+8OsN5V5xxRU89alPZdOmTfT7fR74wAfy2c9+ds06y/H/T3ziE7z+9a/n2GOPZWpqit/+7d9mfn6epml4xStewRFHHMFwOOR5z3seTdPc6Hm5bg5hOcf4v/7X/+L//J//w8knn0y/3+fRj340V199NSLCG9/4Ro477jh6vR5PfvKTmZ2dXbPNf/7nf+bxj388xxxzDGVZcsopp/DGN76RGOMh+1/eR6/X4/73vz9f/epXedjDHsbDHvawNes1TcNrX/ta7nznO1OWJccffzx/8id/cqO/8cQTT+S1r30tAFu3bl1zjy7fi5///Oe53/3uR6/X4+yzz77drwnAt771LR73uMexceNGBoMB9773vXnHO95xg98555xzeMQjHsERRxxBWZbc/e53593vfvch6/3Xf/0Xj3nMY9iyZQu9Xo+TTjqJ5z//+WvW+djHPsZ973tfpqammJ6e5l73utch+7/88su5/PLLb9LvueCCCzj99NPp9Xocd9xxvOlNb+Kcc8653vHhcNfkluamUkqcddZZ3OMe96CqKo488kjOPPNMDhw4sGa9m/PM3hi+8IUv8JCHPIQNGzYwHA457bTTePWrX73yedu2vOY1r+G+970vMzMzDAYDHvrQh3Luuefe6LaXx+RLLrmEZz/72czMzLB161b+4i/+AhHh6quv5slPfjLT09McddRRvO1tbztkG3v27OEFL3gBRx55JFVVcZ/73IcPfvCDa9ZZPRa8973v5ZRTTqEsS371V3+V73znOzfrfNwsN+gzn/kMJ554Ig996EMP+/l/+2//jRNPPPGQBxLgqU99KqeeeipvfvObuaHuL2eccQaf+MQneM5znsMDH/hAvvzlL/P4xz/+Jh/jZZddxm//9m/zghe8gOc+97n83d/9HWeccQb3ve99ucc97gHkQeSf/umfeOpTn8pJJ53E7t27Ofvsszn99NO56KKLOOaYY27y/lbjxS9+MVu3buU1r3kNo9EIgO985zt8/etf5xnPeAbHHXcc27Zt493vfjcPe9jDuOiii+j3+2u28dKXvpSNGzfy2te+lm3btnHWWWfxkpe8hI9//OMr67zmNa/hTW96E4973ON43OMex/e+9z0e/ehH07btmm3t3r2bX/u1X2M8HvOyl72MzZs388EPfpAnPelJfOpTnzok7PuWt7yFXq/Hq171Ki677DLe+c534pxDa82BAwd43etexze/+U0+8IEPcNJJJ/Ga17zmFp2nj370o7Rty0tf+lJmZ2d561vfytOe9jQe8YhH8KUvfYk//dM/Xdn/K1/5Sv7u7/5u5bsf+MAHGA6H/OEf/iHD4ZD//M//5DWveQ0LCwv89V//9cp67373u3nJS17CQx/6UP7gD/6Abdu28Ru/8Rts3LhxZYIBeRB60pOexNe+9jVe9KIXcbe73Y0f/vCHvP3tb+eSSy7hn/7pn673d5x11ll86EMf4h//8R9597vfzXA45N73vvfK5z/5yU945jOfyZlnnskLX/hCTjvttNv9mnzhC1/gCU94AkcffTQvf/nLOeqoo/jxj3/Mv/7rv/Lyl7/8er/37ne/m3vc4x486UlPwlrLZz7zGV784heTUuL3f//3gTx4PfrRj2br1q286lWvYsOGDWzbto1Pf/rTa/b/zGc+k0c+8pH81V/9FQA//vGPOe+889bs/5GPfCTAjRK3duzYwcMf/nCUUvzZn/0Zg8GAv/3bv71ez+pw1+SnwZlnnskHPvABnve85/Gyl72MK6+8kv/9v/83559/Puedd95KNOKmPrM3hgsvvJAnPOEJ3Pve9+YNb3gDZVly2WWXcd55562ss7CwwN/+7d/yzGc+kxe+8IUsLi7y/ve/n8c85jF8+9vf5pd+6ZdudD9Pf/rTudvd7sZf/uVf8tnPfpY3velNbNq0ibPPPptHPOIR/NVf/RUf/ehHeeUrX8mv/uqv8t/+238DshPysIc9jMsuu4yXvOQlnHTSSXzyk5/kjDPOYG5u7pB77O///u9ZXFzkzDPPRCnFW9/6Vn7zN3+TK6644qZHcuQmYm5uTgB58pOffIPrPelJTxJAFhYWRETkta99rQDyzGc+85B1lz9bxne/+10B5BWveMWa9c444wwB5LWvfe3KsnPOOUcAufLKK1eWnXDCCQLIV77ylZVle/bskbIs5Y/+6I9WltV1LTHGNfu48sorpSxLecMb3rBmGSDn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BW7NcSilxBFHHMFHP/rRw35+XfLbrYFer8dXvvIVzj33XD772c/yuc99jo9//OM84hGP4D/+4z8wxvCRj3yEM844g9/4jd/gj//4jzniiCMwxvCWt7zlJpNlDnd/3Rb33K2xzZtF7HjCE57A+973Pr72ta+tCYcs46tf/Srbtm3jzDPPvDmbXcEJJ5xASokrr7xyzazlsssuu0Xbuz586lOf4uEPfzjvf//71yyfm5s7ZKZxa+zruc997hoWT13XzM3N3aLtnXDCCUCeBa4uY9i7d+8hs5cTTjiBn/zkJ4dsYznstrytOwq+9KUvsX//fj796U+vJJIBrrzyyjXrLf+uyy67jIc//OEry0MIbNu2bQ354pRTTuEHP/gBj3zkI38mKhW35zU55ZRTAPjRj37Eox71qJv8vc985jM0TcO//Mu/rJk5X1+o9YEPfCAPfOAD+Z//83/y93//9zzrWc/iYx/72EqIqigKnvjEJ/LEJz6RlBIvfvGLOfvss/mLv/iLm11rd8IJJxx2fLi1x4zD4ZRTTuGLX/wiD37wg2/QON6cZ/amQGvNIx/5SB75yEfyN3/zN7z5zW/m//v//j/OPfdcHvWoR/GpT32Kk08+mU9/+tNr7ullJu1tiRNOOIELLriAlNIab+y2vL9vFsX+j//4j+n1epx55pns379/zWezs7P83u/9Hv1+nz/+4z++RQezHKt+17vetWb5O9/5zlu0veuDMeYQS//JT35yTe7lttzXO9/5zsNSwm8KHvWoR+Gc453vfOea7Z511lmHrPu4xz2Ob3/723zjG99YWTYajXjve9/LiSeeyN3vfvdbdAy3F5Znbat/d9u2h9wv97vf/di8eTPve9/71uSIPvrRjx4yaDztaU9jx44dvO997ztkf5PJZIVlemvh9rwmv/Irv8JJJ53EWWeddcgk6oZmvoc77/Pz85xzzjlr1jtw4MAh21nOVS2HFK87bmitVyYVq8OON5Vi/5jHPIZvfOMbfP/7319ZNjs7e73e0a2Jpz3tacQYeeMb33jIZyGElXN8c57ZG8N1S07g0HN8uOv1rW99a809d1vhcY97HLt27VrDpg4h8M53vpPhcMjpp59+q+/zZnlip556Kh/84Ad51rOexb3uda9DFDv27dvHP/zDP6zM+G4u7nvf+/Jbv/VbnHXWWezfv3+FYn/JJZcAN558vql4whOewBve8Aae97zn8Wu/9mv88Ic/5KMf/egNFmj/NPv68Ic/zMzMDHe/+935xje+wRe/+EU2b958i7a3detWXvnKV/KWt7yFJzzhCTzucY/j/PPP59///d8P8SJf9apX8Q//8A889rGP5WUvexmbNm3igx/8IFdeeSX/9//+3zucQsGv/dqvsXHjRp773Ofyspe9DKUUH/7whw8ZOIui4HWvex0vfelLecQjHsHTnvY0tm3bxgc+8AFOOeWUNffRc57zHD7xiU/we7/3e5x77rk8+MEPJsbIxRdfzCc+8YmVmqJbC7fnNdFa8+53v5snPvGJ/NIv/RLPe97zOProo7n44ou58MIL+fznP3/Y7z360Y9e8Z7OPPNMlpaWeN/73scRRxzBzp07V9b74Ac/yLve9S6e8pSncMopp7C4uMj73vc+pqenedzjHgdkwsDs7CyPeMQjOO6449i+fTvvfOc7+aVf+qWVvAncdIr9n/zJn/CRj3yEX//1X+elL33pCsX+Tne6E7Ozs7epd3366adz5pln8pa3vIXvf//7PPrRj8Y5x6WXXsonP/lJ3vGOd/Dbv/3bN+uZvTG84Q1v4Ctf+QqPf/zjOeGEE9izZw/vete7OO6441aiY094whP49Kc/zVOe8hQe//jHc+WVV/Ke97yHu9/97iwtLd0Wp2IFL3rRizj77LM544wz+O53v8uJJ57Ipz71Kc477zzOOuusGyUG3hLcbLmMpz71qdz1rnflLW95y4rh2rx5Mw9/+MN59atffYuSxqvxoQ99iKOOOop/+Id/4B//8R951KMexcc//nFOO+00qqr6qba9jFe/+tWMRiP+/u//no9//OP8yq/8Cp/97GdvsQTWDeEd73gHxhg++tGPUtc1D37wg/niF7/4UzGk3vSmN1FVFe95z3s499xzecADHsB//Md/HFJPd+SRR/L1r3+dP/3TP+Wd73wndV1z73vfm8985jM3q/bu5wWbN2/mX//1X/mjP/oj/vzP/5yNGzfy7Gc/m0c+8pGHnM+XvOQliAhve9vbeOUrX8l97nMf/uVf/oWXvexla+4jrTX/9E//xNvf/vaVmq9+v8/JJ5/My1/+8hWCx62F2/uaPOYxj+Hcc8/l9a9/PW9729tIKXHKKafwwhe+8Hq/c9ppp/GpT32KP//zP+eVr3wlRx11FP/jf/wPtm7duoYlefrpp/Ptb3+bj33sY+zevZuZmRnuf//789GPfnSFUPHsZz+b9773vbzrXe9ibm6Oo446iqc//em87nWvu0UG/Pjjj+fcc8/lZS97GW9+85vZunUrv//7v89gMDjkWt8WeM973sN973tfzj77bF796levkIee/exn8+AHP3hlvZv6zN4YnvSkJ7Ft2zb+7u/+jn379rFlyxZOP/10Xv/616+Qfs444wx27drF2Wefzec//3nufve785GPfIRPfvKTawSNbwv0ej2+9KUv8apXvYoPfvCDLCwscNppp3HOOefcZkLHSn4WjIGfEt///vf55V/+ZT7ykY9cL3V2Heu4MaSU2Lp1K7/5m7952PDhOv7fwSte8QrOPvtslpaWfq7l6dbx0+PnLp40mUwOWXbWWWehtV6TzF/HOm4IdV0fEmb80Ic+xOzs7CGyU+u4Y+O6Y8b+/fv58Ic/zEMe8pB1A/YLgFumvnsb4q1vfSvf/e53efjDH461doWG+6IXveinojuv4xcL3/zmN/mDP/gDnvrUp7J582a+973v8f73v5973vOePPWpT729D28dtyIe9KAH8bCHPYy73e1u7N69m/e///0sLCzwF3/xF7f3od0s7Nq16wY/7/V6a0QC1tHhJmt7/IzwH//xH/LgBz9YNm7cKM45OeWUU+R1r3vdGvmgdazjxnDllVfKE5/4RDnyyCPFOSdHHnmkPO95z5Pdu3ff3oe2jlsZf/Znfyannnqq9Ho96ff78pCHPES+8IUv3N6HdbMB3ODfzZGn+kXCHSInto51rGMd/6/ji1/84g1+fswxx9zhymJ+Flg3YutYxzrWsY47LH7uiB3rWMc61rGOddxU/NwRO9ZxR8BymP66S4UkESWWXGMamFvcxQ8v+hb/+h//yP6lWURrWjH4FtrWM+wNGc2PCGPP3N55wsQz1ZtBYuL44+7E85//An71AQ/AOodSDtRy0fvqY7ju8QisBBg0iOneqryaBpSQYos2IOJJBJbGi1x19Ta2bb+C7Vdcyr7dO9g4Nc2v3vcB3Ps+D2A4sxWkRKWO8aZAjCKq/CcoFGAFdAIlIApEC0olVPIgiaQMHocH2nqJdv82xjsvZv9l36PdfTHTeoKSRNM0FIWjcBYRQVIEEbTWaK1ABKfBGFAkUgigItYalNI4V1CUFbboEUOknjQo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\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAGbCAYAAAClJcXfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9d5xlR3nnj7+fqjrn3tvdkzRBGYWRkAAlBEKksVAwApHMglgwYAE2xqsl2cYLX7+8gBPY2Bgwu8aY9ZIWB5YFDDYYjA22iCYHiaQwQkhC0mg0sbvvPafq+f1RVeeee/t2T09LWObn++g16u4T69Sp84TPk0RVlSlNaUpTmtKUfsLI3NsDmNKUpjSlKU1pLTQVYFOa0pSmNKWfSJoKsClNaUpTmtJPJE0F2JSmNKUpTeknkqYCbEpTmtKUpvQTSVMBNqUpTWlKU/qJpKkAm9KUpjSlKf1E0lSATWlKU5rSlH4iaSrApjSlKU1pSj+RdK8KsFe/+tWIyJrOfcc73oGIsHPnznt2UC3auXMnIsI73vGOH9s97kk68cQTec5znnNvD6Oh5zznOZx44on39jB+7PTud7+b008/naIo2Lhx4709nLtNd+e7/PdIn/rUpxAR3ve+9x3y2LWuWRHhhS984RpG9++TRIRXv/rV9/YwDklrEmBXX301z3rWszj22GPpdDocc8wxPPOZz+Tqq6++p8c3pSn9u6bvfOc7POc5z2H79u287W1v48/+7M/u7SFNaUr/Ycgd7gnvf//7ecYznsERRxzBz//8z3PSSSexc+dO/vzP/5z3ve99/NVf/RVPfvKTV3Wt3/iN3+AVr3jFYQ8a4NnPfjZPf/rT6XQ6azp/Sj9+etvb3kYI4d4exo+VPvWpTxFC4E1vehOnnHLKvT2cKd1N+o+wZldDCwsLOHfY4uHfnA5rhNdddx3PfvazOfnkk/mXf/kXtm7d2ux7yUtewo4dO3j2s5/NN77xDU4++eRlr3Pw4EFmZ2dxzq15kqy1WGvXdO6/BeVn/I9MRVHc20P4sdPtt98OcEjoUFVZXFyk1+v9G4xqSmul/whrdjXU7Xbv7SGsig4LQvyDP/gD5ufn+bM/+7MR4QWwZcsW3vrWt3Lw4EFe97rXNdsznn7NNdfwsz/7s2zatIlHPvKRI/vatLCwwItf/GK2bNnCunXreOITn8jNN9+8BJOd5AM78cQTefzjH8+nP/1pHvKQh9Dtdjn55JN517veNXKP3bt387KXvYwzzzyTubk51q9fz2Mf+1i+/vWvH850LBnLP//zP3PllVeybds2jjvuOABuvPFGrrzySk477TR6vR6bN2/m8ssvX+K7y9f4zGc+w6/8yq+wdetWZmdnefKTn8wdd9wxcqyq8ju/8zscd9xxzMzMcOGFFy4L315//fVcfvnlHHHEEczMzPDQhz6Uv/u7vxs5JvsI3vve9/Kbv/mbHHvssaxbt46nPvWp7N27l36/z0tf+lK2bdvG3Nwcz33uc+n3+4ecl3F/QvYp/uEf/iH/83/+T04++WRmZmZ49KMfzU033YSq8tu//dscd9xx9Ho9nvSkJ7F79+6Ra/7N3/wNj3vc4zjmmGPodDps376d3/7t38Z7v+T++R69Xo+HPOQhXHXVVTzqUY/iUY961Mhx/X6fV73qVZxyyil0Oh2OP/54/tt/+2+HfMYTTzyRV73qVQBs3bp1ZI3mtfixj32MBz/4wfR6Pd761rfe6+8E4Atf+AKXXXYZmzZtYnZ2lrPOOos3velNK57z9re/nYsuuoht27bR6XS4//3vz1ve8pYlx33pS1/i0ksvZcuWLfR6PU466SSe97znjRzzV3/1VzzoQQ9i3bp1rF+/njPPPHPJ/a+77jquu+66VT3Pnj17+OVf/mVOPPFEOp0Oxx13HD/3cz/Hrl27Ro4LIfC7v/u7HHfccXS7XS6++GKuvfbakWMm+cCyhX3mmWfS7XbZunUrj3nMY/jSl7604rh+53d+B2MMb37zm5ttH/3oR9mxYwezs7OsW7eOxz3ucUu+3ec85znMzc1x88038zM/8zPMzc2xdetWXvayl01c58vRH//xH2OtZc+ePc2217/+9YgIv/Irv9Js896zbt06Xv7ylzfbxvlt5tXXXnstz3nOc9i4cSMbNmzguc99LvPz8yP3XS0P379/Py996Uub97Zt2zZ++qd/mq985SurfsbDMn8+/OEPc+KJJ7Jjx46J+3/qp36KE088ccnHCHD55Zdz6qmn8prXvIaVOrg85znP4b3vfS/PfvazeehDH8o///M/87jHPW7VY7z22mt56lOfys///M9zxRVX8L//9//mOc95Dg960IN4wAMeAEQG8sEPfpDLL7+ck046idtuu423vvWtXHDBBVxzzTUcc8wxq75fm6688kq2bt3KK1/5Sg4ePAjAF7/4RT772c/y9Kc/neOOO46dO3fylre8hUc96lFcc801zMzMjFzjRS96EZs2beJVr3oVO3fu5I1vfCMvfOEL+eu//uvmmFe+8pX8zu/8DpdddhmXXXYZX/nKV3j0ox/NYDAYudZtt93Gwx/+cObn53nxi1/M5s2beec738kTn/hE3ve+9y2Bel/72tfS6/V4xStewbXXXsub3/xmiqLAGMNdd93Fq1/9aj7/+c/zjne8g5NOOolXvvKVa5qn97znPQwGA170ohexe/duXve61/G0pz2Niy66iE996lO8/OUvb+7/spe9jP/9v/93c+473vEO5ubm+JVf+RXm5ub4p3/6J175yleyb98+/uAP/qA57i1veQsvfOEL2bFjB7/8y7/Mzp07+Zmf+Rk2bdrUKBcQmdMTn/hEPv3pT/OLv/iL3O9+9+Ob3/wmb3jDG/je977HBz/4wWWf441vfCPvete7+MAHPsBb3vIW5ubmOOuss5r93/3ud3nGM57BC17wAp7//Odz2mmn3evv5B/+4R94/OMfz9FHH81LXvISjjrqKL797W/zt3/7t7zkJS9Z9ry3vOUtPOABD+CJT3wizjk+/OEPc+WVVxJC4L/+1/8KRGv00Y9+NFu3buUVr3gFGzduZOfOnbz//e8fuf8znvEMLr74Yn7/938fgG9/+9t85jOfGbn/xRdfDHDIIK0DBw6wY8cOvv3tb/O85z2Pc889l127dvGhD32IH/7wh2zZsqU59vd+7/cwxvCyl72MvXv38rrXvY5nPvOZfOELX1jxHj//8z/PO97xDh772MfyC7/wC9R1zVVXXcXnP/95HvzgB0885zd+4zd4zWtew1vf+lae//znAzHY54orruDSSy/l93//95mfn+ctb3kLj3zkI/nqV786Iji991x66aWcf/75/OEf/iGf+MQneP3rX8/27dv5L//lv6w43kw7duwghMCnP/1pHv/4xwNw1VVXYYzhqquuao776le/yoEDB/ipn/qpQ17zaU97GieddBKvfe1r+cpXvsL/+l//i23btjXvElbPw3/pl36J973vfbzwhS/k/ve/P3feeSef/vSn+fa3v8255567qmdEV0l79uxRQJ/0pCeteNwTn/hEBXTfvn2qqvqqV71KAX3GM56x5Ni8L9OX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3+qdrETXXXcdF198Maeffjp/9Ed/xPHHH09ZlnzkIx/hDW94QzPvOVn485//PB/+8If52Mc+xvOe9zxe//rX8/nPf565uTm2bdvG1772NT72sY/x0Y9+lI9+9KO8/e1v5+d+7ud45zvfeY+PvU0/7jl7xCMewde+9jX+x//4HzztaU8bEXp5jt797ndz1FFHLTl3PBr7noqwfuQjH0lVVXzuc5/jqquuagTVjh07uOqqq/jOd77DHXfcsWoBdk/O4dOe9jR27NjBBz7wAT7+8Y/zB3/wB/z+7/8+73//+3nsYx+7qmscVhDH4x//eN72trfx6U9/egQCyXTVVVexc+dOXvCCFxzOZRs64YQTCCFwww03jFgY45FCd5fe9773ceGFF/Lnf/7nI9v37Nkz4vS9p+51xRVX8PrXv77Ztri4OBIZdDh0wgknAFGja6cq3HHHHUu0sxNOOIHvfve7S66RobZ8rZ8U+tSnPsWdd97J+9///hGH8w033DByXH6ua6+9lgsvvLDZXtc1O3fuHAm02L59O1//+te5+OKL/02qT9yb72T79u0AfOtb3+KSSy5Z9Xkf/vCH6ff7fOhDHxrRwJeDVx/60Ify0Ic+lN/93d/lL/7iL3jmM5/JX/3VX/ELv/ALAJRlyROe8ASe8IQnEELgyiuv5K1vfSv//b//98POpdu+fTvf+ta3Duucw73+xz72MXbv3n1IK+yUU07hda97HY961KN4zGMewz/+4z82SFSe+23bth3W3N9deshDHkJZllx11VVcddVV/Nqv/RoQA+7e9ra38Y//+I/N3/cEHS4PP/roo7nyyiu58soruf322zn33HP53d/93VULsMMKo/+1X/s1er0eL3jBC7jzzjtH9u3evZtf+qVfYmZmppmkw6XsL/iTP/mTke3tMNR7gqy1SzSG//t//++Ir+XHea83v/nNhxUO26ZLLrmEoih485vfPHLdN77xjUuOveyyy/jXf/3XBuuGmJ/2Z3/2Z5x44onc//73X9MY7i3K2l/7uQeDwZL18uAHP5jNmzfztre9bcQn9J73vGeJkH/a057GzTffzNve9rYl91tYWGiiSe8pujffybnnnstJJ53EG9/4xiUK1Eoa9KR537t3L29/+9tHjrvrrruWXOecc84BaGDEcb5hjGkUijbUuNow+qc85Sl8/etf5wMf+MCSffeEZfWUpzwFVeU3f/M3V3X9s846i4985CN8+9vf5glPeAILCwtA5G3r16/nNa95zUT/4HiqzD1F3W6X8847j7/8y7/kBz/4wYgFtrCwwB//8R+zfft2jj766Hvkfqvl4d77JXD3tm3bOOaYY1adDgKHaYGdeuqpvPOd7+SZz3wmZ5555pJKHLt27eIv//IvG23jcOlBD3oQT3nKU3jjG9/InXfe2YRgfu973wMO7WheLT3+8Y/nt37rt3juc5/Lwx/+cL75zW/ynve8Z8Xk67tzr3e/+91s2LCB+9///nzuc5/jE5/4BJs3b17T9XI+yGtf+1oe//jHc9lll/HVr36Vj370o0usx1e84hX85V/+JY997GN58YtfzBFHHME73/lObrjhBv7f//t/TSDLTwo9/OEPZ9OmTVxxxRW8+MUvRkR497vfvYSRlGXJq1/9al70ohdx0UUX8bSnPY2dO3fyjne8g+3bt4+so2c/+9m8973v5Zd+6Zf45Cc/ySMe8Qi893znO9/hve99b5PHdU/RvflOjDG85S1v4QlPeALnnHMOz33uczn66KP5zne+w9VXX83HPvaxiec9+tGPbqymF7zgBRw4cIC3ve1tbNu2jVtvvbU57p3vfCd/8id/wpOf/GS2b9/O/v37edvb3sb69eu57LLLAPiFX/gFdu/ezUUXXcRxxx3HjTfeyJvf/GbOOeecxg8Iqw+j/7Vf+zXe9773cfnll/O85z2PBz3oQezevZsPfehD/Omf/ilnn3323ZqzCy+8kGc/+9n88R//Md///vd5zGMeQwiBq666igsvvHBi/cOHPvSh/M3f/A2XXXYZT33qU/ngBz/I+vXrectb3sKzn/1szj33XJ7+9KezdetWfvCDH/B3f/d3POIRj+B//I//cbfGuhzt2LGD3/u932PDhg2ceeaZQBQWp512Gt/97nfv0fqpq+Xh+/fv57jjjuOpT30qZ599NnNzc3ziE5/gi1/84ghadSg67DIYl19+Oaeffjqvfe1rG6G1efNmLrzwQn791399TQ7iNr3rXe/iqKOO4i//8i/5wAc+wCWXXMJf//Vfc9ppp91j2eG//uu/zsGDB/mLv/gL/vqv/5pzzz2Xv/u7v1tzWauV6E1vehPWWt7znvewuLjIIx7xCD7xiU8siU47HPqd3/kdut0uf/qnf8onP/lJzj//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\n" }, "metadata": {} }, @@ -2720,7 +2765,7 @@ "text/plain": [ "
" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAAGbCAYAAACbAKqRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9d7RlR33n+6mw0wk3dd8O6pZaWaIlBIx4gAkSyYAJBg/B4RkkzGDP4DzP4DBjDMbjhAfbI/I8m8EYL94yYJuFA2ATHMA22CAkUEbdarU63nTSTlX1e3/UuRdddQNSgy2D73etK/XZp87etXftql/90venRETYwha2sIUtbGELDxj6we7AFrawhS1sYQvfrNgSolvYwha2sIUtnCG2hOgWtrCFLWxhC2eILSG6hS1sYQtb2MIZYkuIbmELW9jCFrZwhtgSolvYwha2sIUtnCG2hOgWtrCFLWxhC2eILSG6hS1sYQtb2MIZYkuIbmELW9jCFrZwhtgSov+G8X/+z/9BKcWBAwce7K58TRw4cAClFP/n//yfB7srGzj33HO59tprH+xu/IvCOcerXvUqzj77bLTWPO95z3uwu/R144lPfCJPfOITH+xu/KvhdHPnNa95DUqpTe2+0e/zgz1nP/7xj6OU4uMf//iDcv1vFM5YiL75zW9GKcWjH/3ob2R/vukwmUx4zWte803/ImzhmxO/+7u/y+tf/3pe8IIX8M53vpOf/MmffLC7tIUt/LuCPdMfvvvd7+bcc8/lH//xH7n99tu58MILv5H9+qbBZDLhta99LcC/q93zNwNuueUWtP7WNrZ89KMfZc+ePfzmb/7mg92VLZwh9u3bR1mWJEnyYHdlC2eAM1ph7rzzTj75yU/yhje8gcXFRd797nd/o/u1ha8T4/H4we7Cg44sy77lF6bjx48zNzf3Nds552ia5l++Q1u431gfE6UUeZ5jjHmwu7SFM8AZCdF3v/vdzM/P86xnPYsXvOAFpxWiX8ne/ZXs8H/4h3/I/v37yfOcyy+/nD/6oz/i2muv5dxzzz3lt7/xG7/Bm970Js4//3w6nQ5Pe9rTOHToECLC6173Ovbu3UtRFDz3uc9leXn5lL79+Z//OU94whPodrv0+32e9axn8YUvfGFTm2uvvZZer8fhw4d53vOeR6/XY3FxkZ/6qZ/Ce7/Rn8XFRQBe+9rXopRCKcVrXvOajfPcfPPNvOAFL2BhYYE8z3nkIx/JBz7wgVP69IUvfIEnP/nJFEXB3r17+aVf+iVCCF9tGE7p6x133MEzn/lM+v0+//f//X8D8Dd/8ze88IUv5JxzziHLMs4++2x+8id/krIsH/D9rmN1dZVrr72W2dlZ5ubmuOaaa1hdXT1t3z760Y9uPOu5uTme+9znctNNN21qs+7/ufXWW/n+7/9+ZmdnWVxc5Od//ucREQ4dOsRzn/tcZmZm2LVrF//zf/7P+/Vc7utDWvcx/+3f/i0/9mM/xuLiInNzc/zQD/0QTdOwurrKS17yEubn55mfn+dVr3oV9y1y9Bu/8Rs89rGPZdu2bRRFwZVXXsl73/veU65dliU/9mM/xvbt2+n3+3znd34nhw8fPuX9ADh8+DA/8AM/wM6dO8myjMsuu4zf/d3f/ar3tj4XPvaxj/GFL3xh4937+Mc/vmme/NZv/RYXXHABWZbxxS9+8UEfE4Df//3f51GPehSdTof5+XmuuuoqPvzhD3/F9k3T8OpXv5orr7yS2dlZut0uT3jCE/jYxz52Stv3vOc9XHnllfT7fWZmZnjoQx/Kb//2b29837Ytr33ta7nooovI85xt27bx+Mc/no985COb2tx8880cOXLkft3PA1277jsmX49vcnV1lZ/4iZ/g7LPPJssyLrzwQn7t137tlLXjgczZr4XrrruOyy67bGP8HvnIR/IHf/AHG98fPHiQV7ziFVxyySUURcG2bdt44QtfeL9iO574xCdy+eWX8/nPf56rr76aTqfDhRdeuDHHPvGJT/DoRz+aoii45JJL+Mu//MtTzvHZz36W7/iO72BmZoZer8dTnvIU/v7v/35Tm/W14O/+7u/4r//1v7K4uEi32+W7vuu7OHHixAN7IHIGuPTSS+VlL3uZiIj89V//tQDyj//4j5vafOxjHxNAPvaxj206fueddwog73jHOzaOffCDHxSllFxxxRXyhje8QX7+539e5ufn5fLLL5d9+/ad8tuHP/zhsn//fnnDG94g//2//3dJ01Qe85jHyM/93M/JYx/7WPlf/+t/yY/92I+JUkpe+tKXbrr+7/3e74lSSp7xjGfIddddJ7/2a78m5557rszNzcmdd9650e6aa66RPM/lsssukx/4gR+Qt7zlLfL85z9fAHnzm98sIiKj0Uje8pa3CCDf9V3fJe9617vkXe96l1x//fUiInLjjTfK7Oys7N+/X37t135N3vjGN8pVV10lSil5//vfv3GtI0eOyOLioszPz8trXvMaef3rXy8XXXSRXHHFFQJs6tfpcM0110iWZXLBBRfINddcI29961vl937v90RE5Ed/9Eflmc98pvzyL/+yvO1tb5OXvexlYoyRF7zgBaec42vdr4hICEGuuuoq0VrLK17xCrnuuuvkyU9+8kZf7z2uH/nIR8RaKxdffLH8+q//urz2ta+V7du3y/z8/KZ7+oVf+IWNcf3e7/1eefOb3yzPetazBJA3vOENcskll8h/+S//Rd785jfL4x73OAHkE5/4xFd9JiIi+/btk2uuuWbj8zve8Y6N6zzjGc+QN73pTfLiF79YAHnVq14lj3/84+X7vu/75M1vfrM8+9nPFkDe+c53bjrn3r175RWveIW88Y1vlDe84Q3yqEc9SgD54Ac/uKndi170IgHkxS9+sbzpTW+SF73oRfKwhz1MAPmFX/iFjXZHjx6VvXv3ytlnny2/+Iu/KG95y1vkO7/zOwWQ3/zN3/yK9zYajeRd73qXXHrppbJ3796Nd+/o0aMb82T//v1y/vnny6/+6q/Kb/7mb8rBgwcf9DF5zWteI4A89rGPlde//vXy27/92/J93/d98tM//dMbba6++mq5+uqrNz6fOHFCdu/eLf/1v/5Xectb3iK//uu/LpdccokkSSKf/exnN9p9+MMfFkCe8pSnyJve9CZ505veJD/yIz8iL3zhCzfa/NzP/ZwopeTlL3+5/O///b/lf/7P/ynf+73fK7/6q7+60Wb9+d373flKeKBr1+nG5HRr4vrzvzfu+z6Px2O54oorZNu2bfJzP/dz8ta3vlVe8pKXiFJKfvzHf3yj3QOZs18Lb3/72wWQF7zgBfK2t71Nfvu3f1te9rKXyY/92I9ttPnDP/xDedjDHiavfvWr5e1vf7v83M/9nMzPz8u+fftkPB5vtDudjLj66qvlrLPOkrPPPlte+cpXynXXXSf79+8XY4y85z3vkV27dslrXvMa+a3f+i3Zs2ePzM7OymAw2Pj9jTfeKN1uV3bv3i2ve93r5Fd/9VflvPPOkyzL5O///u832q2vBY94xCPkyU9+slx33XXy//w//48YY+RFL3rR/X4eIiIPWIh+5jOfEUA+8pGPiEgcoL17924atK/0gEROL0Qf+tCHyt69e2U4HG4c+/jHPy7AaV/ExcVFWV1d3Tj+sz/7swLIwx72MGnbduP4937v90qaplJVlYiIDIdDmZubk5e//OWb+nT06FGZnZ3ddPyaa64RQH7xF39xU9tHPOIRcuWVV258PnHixCkL4zqe8pSnyEMf+tCN668/r8c+9rFy0UUXbRz7iZ/4CQHkH/7hHzaOHT9+XGZnZ++3EAXkZ37mZ075bjKZnHLsV37lV0QpJQcPHnzA9/vHf/zHAsiv//qvbxxzzskTnvCEU8b14Q9/uOzYsUOWlpY2jl1//fWitZaXvOQlG8fWF4wf/MEf3HTOvXv3ilJq0wK3srIiRVHcrwXuKwnRpz/96RJC2Dj+bd/2baKUkv/8n//zKde/92IucurzbJpGLr/8cnnyk5+8ceyf/umfBJCf+Imf2NT22muvPeVdednLXia7d++WkydPbmr7Pd/zPTI7O3va8bs3rr76arnssss2HVufJzMzM3L8+PFN3z2YY3LbbbeJ1lq+67u+S7z3m76793jcV4g656Su603tV1ZWZOfOnfIDP/ADG8d+/Md/XGZmZsQ59xX78LCHPUye9axnfdV+PhAh+kDXrtONyZkK0de97nXS7Xbl1ltv3dTuZ37mZ8QYI3fddZeIPLA5+7Xw3Oc+95T37b443Tv7qU99SoCNzb3IVxaigPzBH/zBxrGbb75ZANFabxKEH/rQh07p//Oe9zxJ01TuuOOOjWP33HOP9Pt9ueqqqzaOra8FT33qUze9ez/5kz8pxphN8uVr4QGbc9/97nezc+dOnvSkJwGglOK7v/u7ec973nOK2e/+4J577uGGG27gJS95Cb1eb+P41VdfzUMf+tDT/uaFL3whs7OzG5/XI4S///u/H2vtpuNN03D48GEAPvKRj7C6usr3fu/3cvLkyY0/YwyPfvSjT2se+s//+T9v+vyEJzyBL33pS1/zvpaXl/noRz/Ki170IobD4ca1lpaWePrTn85tt9220a8/+7M/4zGPeQyPetSjNn6/uLi4YZK9v/gv/+W/nHKsKIqNf4/HY06ePMljH/tYRITPfvazp7T/Wvf7Z3/2Z1hrN13LGMOP/uiPbvrdkSNH+NznPse1117LwsLCxvErrriCb//2b+fP/uzPTrn2f/pP/2nTOR/5yEciIrzsZS/bOD43N8cll1xyv8bgK+FlL3vZpvSBRz/60adcZ/36973OvZ/nysoKa2trPOEJT+Cf//mfN47/xV/8BQCveMUrNv32vs9IRHjf+97Hc57zHERk0zv59Kc/nbW1tU3nfaB4/vOfv+FugAd/TP74j/+YEAKvfvWrTwn4um86x71hjCFNUwBCCCwvL+Oc45GPfOSm5zM3N8d4PN5kmr0v5ubm+MIXvsBtt932Fduce+65iMjXNK+eydp13zH5evCHf/iHPOEJT2B+fn7Tu/PUpz4V7z1//dd/Ddz/OXt/MDc3x913382nP/3pr9jm3nOkbVuWlpa48MILmZubu1/vc6/X43u+53s2Pl9yySXMzc3xkIc8ZFM2yPq/19877z0f/vCHed7znsf555+/0W737t183/d9H3/7t3/LYDDYdK0f/MEf3PTuPeEJT8B7z8GDB79mP9fxgISo9573vOc9POlJT+LOO+/k9ttv5/bbb+fRj340x44d46/+6q8eyOkANjp7uujerxTxe84552z6vC5Qzz777NMeX1lZAdiYOE9+8pNZXFzc9PfhD3+Y48ePb/p9nuenvPDz8/Mb5/tquP322xERfv7nf/6Ua/3CL/wCwMb1Dh48yEUXXXTKOS655JKveZ11WGvZu3fvKcfvuuuujUVz3c959dVXA7C2trap7f2534MHD7J79+5Ni8bp+ro+rqe7h4c85CGcPHnylOCn041rnuds3779lOP3Zwy+Eh7I+3Pf63zwgx/kMY95DHmes7CwwOLiIm95y1s2PcuDBw+itea8887b9Nv7vs8nTpxgdXWVt7/97ae8Iy996UsBTnknHwjue/0He0zuuOMOtNbs37//ft/DOt75zndyxRVXbPgxFxcX+dM//dNNz/0Vr3gFF198Md/xHd/B3r17+YEf+IGNDc06fvEXf5HV1VUuvvhiHvrQh/LKV76Sz3/+8w+4P3Bma9d9x+TrwW233cZf/MVfnPLuPPWpTwU2ry/3Z87eH/z0T/80vV6PRz3qUVx00UX88A//MH/3d3+3qU1Zlrz61a/e8NNu376dxcVFVldXT1lzToe9e/eesqmanZ39muv7iRMnmEwmX/H9DiFw6NChTcfv+37Pz89vOuf9wQNKcfnoRz/KkSNHeM973sN73vOeU75/97vfzdOe9jTgK+8sz0RbvS++UhTbVzou0+CQdWf7u971Lnbt2nVKu3trsV/tfPcH69f6qZ/6KZ7+9Kefts03Mi0oy7JTdvfee77927+d5eVlfvqnf5pLL72UbrfL4cOHufbaa08JPniwowNPd/2vNabfqOt8peP3vs7f/M3f8J3f+Z1cddVVvPnNb2b37t0kScI73vGOTYEV9xfrz//7v//7ueaaa07b5oorrnjA513HvTWCM8W/1ph8Nfz+7/8+1157Lc973vN45StfyY4dOzDG8Cu/8ivccccdG+127NjB5z73OT70oQ/x53/+5/z5n/8573jHO3jJS17CO9/5TgCuuuoq7rjjDv7kT/6ED3/4w/y//+//y2/+5m/y1re+dZPW/S+Fb8SYrCOEwLd/+7fzqle96rTfX3zxxd+wa63jIQ95CLfccgsf/OAH+Yu/+Ave97738eY3v5lXv/rVG6l+P/qjP8o73vEOfuInfoJv+7ZvY3Z2FqUU3/M933O/giXPdH0/E3wjzvmAhOi73/1uduzYwZve9KZTvnv/+9/PH/3RH/HWt76Voig2JPp9I8Duqybv27cPiJrbfXG6Y18PLrjgAiBOtvXd2teLr7RZWDcnJEnyNa+1b9++05qXbrnllq+rbzfccAO33nor73znO3nJS16ycfyrmbu+Fvbt28df/dVfMRqNNu1s79vX9XE93T3cfPPNbN++nW63e8b9eDDwvve9jzzP+dCHPkSWZRvH3/GOd2xqt2/fPkII3HnnnZssDPd9nxcXF+n3+3jvv2Hv41fDgz0mF1xwASEEvvjFL/Lwhz/8fv/uve99L+effz7vf//7N823dYvOvZGmKc95znN4znOeQwiBV7ziFbztbW/j53/+5zc2rQsLC7z0pS/lpS99KaPRiKuuuorXvOY1D1iI/muuXafDBRdcwGg0ul/ry/2Zs/cX3W6X7/7u7+a7v/u7aZqG//gf/yP/43/8D372Z3+WPM9573vfyzXXXLMpYruqqjOOBr6/WFxcpNPpfMX3W2t9ijb7jcD9NueWZcn73/9+nv3sZ/OCF7zglL8f+ZEfYTgcbqRv7Nu3D2PMhl1+HW9+85s3fT7rrLO4/PLL+b3f+z1Go9HG8U984hPccMMNX8+9nYKnP/3pzMzM8Mu//Mu0bXvK9w84tBnodDrAqZuFHTt28MQnPpG3ve1tpw2Vv/e1nvnMZ/L3f//3/OM//uOm77/e/Nv1Xda9d1Uisink/4Himc98Js453vKWt2wc895z3XXXbWq3e/duHv7wh/POd75z07O58cYb+fCHP8wzn/nMM+7DgwVjDEqpTdaUAwcO8Md//Meb2q1bHu77rt/3GRljeP7zn8/73vc+brzxxlOudybv41fDgz0mz3ve89Ba84u/+IunaCRfbed/uvf4H/7hH/jUpz61qd3S0tKmz1rrDU2+ruvTtun1elx44YUb38P9T3H511y7TocXvehFfOpTn+JDH/rQKd+trq7inAPu/5y9P7jv80vTlP379yMiG2uqMeaU8bzuuuu+IVbIrwZjDE972tP4kz/5k03pNMeOHeMP/uAPePzjH8/MzMw3/Lr3WxP9wAc+wHA45Du/8ztP+/1jHvOYDeKF7/7u72Z2dpYXvvCFXHfddSiluOCCC/jgBz94Wh/PL//yL/Pc5z6Xxz3ucbz0pS9lZWWFN77xjVx++eWbXs6vFzMzM7zlLW/hxS9+Mf/hP/wHvud7vofFxUXuuusu/vRP/5THPe5xvPGNb3xA5yyKgv379/P//X//HxdffDELCwtcfvnlXH755bzpTW/i8Y9/PA996EN5+ctfzvnnn8+xY8f41Kc+xd133831118PwKte9Sre9a538YxnPIMf//Efp9vt8va3v519+/adsb8G4NJLL+WCCy7gp37qpzh8+DAzMzO8733v+7r8ic95znN43OMex8/8zM9w4MAB9u/fz/vf//7T+jpe//rX8x3f8R1827d9Gy972csoy5LrrruO2dnZU3IlvxnwrGc9ize84Q084xnP4Pu+7/s4fvw4b3rTm7jwwgs3jdOVV17J85//fH7rt36LpaUlHvOYx/CJT3yCW2+9FdhsvfjVX/1VPvaxj/HoRz+al7/85ezfv5/l5WX++Z//mb/8y788bZ7z14MHc0wuvPBC/tt/+2+87nWv4wlPeAL/8T/+R7Is49Of/jRnnXUWv/Irv3La3z372c/m/e9/P9/1Xd/Fs571LO68807e+ta3sn///k3rw3/6T/+J5eVlnvzkJ7N3714OHjzIddddx8Mf/nAe8pCHALB//36e+MQncuWVV7KwsMBnPvMZ3vve9/IjP/IjG+c5fPgwD3nIQ7jmmmu+ZnDRv9badTq88pWv5AMf+ADPfvazufbaa7nyyisZj8fccMMNvPe97+XAgQNs3779Ac3Zr4WnPe1p7Nq1i8c97nHs3LmTm266iTe+8Y0861nPot/vA3G83vWudzE7O8v+/fv51Kc+xV/+5V+ybdu2b/QjOAW/9Eu/xEc+8hEe//jH84pXvAJrLW9729uo65pf//Vf/5e56P0N433Oc54jeZ5vyvO5L6699lpJkmQjXP/EiRPy/Oc/XzqdjszPz8sP/dAPyY033njasOr3vOc9cumll0qWZXL55ZfLBz7wAXn+858vl1566Uab9VDw17/+9Zt+ux4q/Yd/+Iebjq+HMX/6058+pf3Tn/50mZ2dlTzP5YILLpBrr71WPvOZz2y0ueaaa6Tb7Z5yj6cLPf/kJz8pV155paRpekoKwx133CEveclLZNeuXZIkiezZs0ee/exny3vf+95N5/j85z8vV199teR5Lnv27JHXve518ju/8zv3O8XldH0VEfniF78oT33qU6XX68n27dvl5S9/uVx//fWnjMEDud+lpSV58YtfLDMzMzI7OysvfvGL5bOf/expx/Uv//Iv5XGPe5wURSEzMzPynOc8R774xS+e9honTpy4X/d1urSO0+Erpbjc9314INf/nd/5HbnoooskyzK59NJL5R3veMdpn9F4PJYf/uEfloWFBen1evK85z1PbrnlFgE2pYeIiBw7dkx++Id/WM4++2xJkkR27dolT3nKU+Ttb3/717zHr5bict95so4Hc0xERH73d39XHvGIR0iWZTI/Py9XX331Rsrc+rnuneISQpBf/uVfln379kmWZfKIRzxCPvjBD8o111yzKY3kve99rzztaU+THTt2SJqmcs4558gP/dAPyZEjRzba/NIv/ZI86lGPkrm5OSmKQi699FL5H//jf0jTNKc8v/uT4iLy9a1d9/7ugaa4iMS0vZ/92Z+VCy+8UNI0le3bt8tjH/tY+Y3f+I1N9/RA5uxXw9ve9ja56qqrZNu2bRu56a985StlbW1to83Kyoq89KUvle3bt0uv15OnP/3pcvPNN5/S/6+U4nK692jfvn2nTU0C5Id/+Ic3Hfvnf/5nefrTny69Xk86nY486UlPkk9+8pOb2nw12XDfPn0tqGlH/k3i4Q9/OIuLi1+XD28LW/i3gs997nM84hGP4Pd///cfcPrSFr65sLV2/fvBvwl27rZtN+z36/j4xz/O9ddfv0XqvoVvStyXVhHgt37rt9Bac9VVVz0I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\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdAAAAGbCAYAAAB0wsGvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9ebgtV1nn/3nXqtp7n3PunNyMN2QiAyFhigICSQAVbGYM0GIDCSDSTdMiraKtjYKgKLSAQkJwogHpph8BbR+ckAYUHxuHVlCkUUCIGoEEQpI7nLN31Vrv7493rVVVe+9z7k3AX7Td733OPWfXrlpzre87L1FVZUUrWtGKVrSiFd0pcnd3A1a0ohWtaEUr+udIKwBd0YpWtKIVregu0ApAV7SiFa1oRSu6C7QC0BWtaEUrWtGK7gKtAHRFK1rRila0ortAKwBd0YpWtKIVregu0ApAV7SiFa1oRSu6C7QC0BWtaEUrWtGK7gKtAHRFK1rRila0ortAKwD9J0z/9b/+V0SEz33uc3d3U45Ln/vc5xAR/ut//a93d1MKnXPOOVx77bV3dzP+UaltW17ykpdw1lln4ZzjSU960t3dpK+aHv7wh/Pwhz/87m7G14xe9rKXISJ86UtfOu69d2XNfuhDH0JEeNe73nUXW/hPi3J/PvShD93dTTku3WUAvf766xERHvSgB30t2/PPjo4dO8bLXvayfxaTvaL/9+gXf/EXec1rXsNTnvIU3vrWt/LiF7/47m7Silb0L4aqu/rgO97xDs455xz+6I/+iE9/+tPc8573/Fq2658NHTt2jJe//OUA/09xzf8v0F/91V/h3P/bSpYPfOADnHnmmbzuda+7u5uyoq8B/UtYs8ejK6+8ks3NTUaj0d3dlOPSXZqpz372s/zBH/wBr33tazl48CDveMc7vtbtWtFXSUePHr27m3C303g8pq7ru7sZ/6h08803s2/fvuPe17Yts9nsH79BK/qq6F/Cmj0eOeeYTCb/LBiJu9TCd7zjHezfv5/HPvaxPOUpT1kKoNvpsbezlf3yL/8yl1xyCZPJhEsvvZRf+ZVf4dprr+Wcc85ZePa//Jf/wnXXXcd5553H+vo6j3rUo/i7v/s7VJVXvOIVHDp0iLW1NZ74xCdy6623LrTtN3/zN7niiivY2Nhg9+7dPPaxj+Uv//IvB/dce+217Nq1i5tuuoknPelJ7Nq1i4MHD/K93/u9hBBKew4ePAjAy1/+ckQEEeFlL3tZKeeTn/wkT3nKUzhw4ACTyYSv+7qv49d+7dcW2vSXf/mXPPKRj2RtbY1Dhw7xyle+khjjTtOw0NbPfOYzPOYxj2H37t38m3/zbwD48Ic/zFOf+lTucY97MB6POeuss3jxi1/M5ubmne5vpttuu41rr72WvXv3sm/fPq655hpuu+22pW37wAc+UMZ63759PPGJT+T//t//O7gn24j++q//mmc84xns3buXgwcP8tKXvhRV5e/+7u944hOfyJ49ezjttNP4qZ/6qRMal3l7UrYp//7v/z7f9V3fxcGDB9m3bx/Pf/7zmc1m3HbbbTzrWc9i//797N+/n5e85CXMH1b0X/7Lf+EhD3kIJ510Emtra1x++eVLbU+bm5t813d9FyeffDK7d+/mCU94AjfddNPC+gC46aabeM5znsOpp57KeDzm3ve+N7/4i7+4Y9/yu/DBD36Qv/zLvyxr70Mf+tDgPXn961/P+eefz3g85hOf+MTdPicAv/RLv8QDH/hA1tfX2b9/P1deeSXve9/7tr1/Npvxwz/8w1x++eXs3buXjY0NrrjiCj74wQ8u3PvOd76Tyy+/nN27d7Nnzx4uu+wyfvqnf7p83zQNL3/5y7nggguYTCacdNJJPOxhD+N3fud3Bvd88pOf5POf//wJ9eeTn/wkT3va0zh48CBra2tcdNFF/NAP/dDCffm92bdvH3v37uXZz342x44dG9yzzAZ622238eIXv5hzzjmH8XjMoUOHeNaznrWjTXU6nfK4xz2OvXv38gd/8AcAxBh5/etfz73vfW8mkwmnnnoqz3/+8/nKV76y0IbHPe5x/P7v/z4PfOADmUwmnHfeebztbW87ofHI9K3f+q084AEPGFx7/OMfj4gM9sA//MM/RET4zd/8TWA5djz84Q/n0ksv5ROf+ASPeMQjWF9f58wzz+TVr371Qr033ngjT3jCE9jY2OCUU07hxS9+Mb/927+9UOanPvUprr76ak477TQmkwmHDh3i277t27j99ttPvJN6F+jiiy/W5z73uaqq+nu/93sK6B/90R8N7vngBz+ogH7wgx8cXP/sZz+rgL7lLW8p19773veqiOh97nMffe1rX6svfelLdf/+/XrppZfq2WefvfDs/e53P73kkkv0ta99rf7n//yfdTQa6YMf/GD9wR/8QX3IQx6iP/MzP6Pf9V3fpSKiz372swf1v+1tb1MR0W/5lm/RN7zhDfqTP/mTes455+i+ffv0s5/9bLnvmmuu0clkove+9731Oc95jr7pTW/Sq6++WgG9/vrrVVX1yJEj+qY3vUkBffKTn6xvf/vb9e1vf7t+7GMfU1XVj3/847p371695JJL9Cd/8if1jW98o1555ZUqIvqe97yn1PX5z39eDx48qPv379eXvexl+prXvEYvuOACvc997qPAoF3L6JprrtHxeKznn3++XnPNNXrDDTfo2972NlVV/Q//4T/oYx7zGP3xH/9xffOb36zPfe5z1XuvT3nKUxbKOF5/VVVjjHrllVeqc05f8IIX6Bve8AZ95CMfWdran9ff+Z3f0aqq9MILL9RXv/rV+vKXv1xPPvlk3b9//6BPP/IjP1Lm9elPf7pef/31+tjHPlYBfe1rX6sXXXSR/rt/9+/0+uuv14c+9KEK6O/+7u/uOCaqqmeffbZec8015fNb3vKWUs+3fMu36HXXXafPfOYzFdCXvOQl+rCHPUy//du/Xa+//np93OMep4C+9a1vHZR56NAhfcELXqBvfOMb9bWvfa0+8IEPVEDf+973Du572tOepoA+85nP1Ouuu06f9rSn6X3ve18F9Ed+5EfKfV/4whf00KFDetZZZ+mP/uiP6pve9CZ9whOeoIC+7nWv27ZvR44c0be//e168cUX66FDh8ra+8IXvlDek0suuUTPO+88/Ymf+Al93etepzfeeOPdPicve9nLFNCHPOQh+prXvEZ/+qd/Wr/9279dv//7v7/cc9VVV+lVV11VPt9yyy16+umn63/8j/9R3/SmN+mrX/1qveiii7Sua/2zP/uzct/73vc+BfQbv/Eb9brrrtPrrrtOX/jCF+pTn/rUcs8P/uAPqojo8573PP25n/s5/amf+il9+tOfrj/xEz9R7snj118729HHPvYx3bNnj5500kn6n/7Tf9I3v/nN+pKXvEQvu+yyhbG8//3vr9/6rd+q119/vX7Hd3xHWXd9ml+zhw8f1ksvvVS99/q85z1P3/SmN+krXvEK/fqv//rS97zX/vIv/7Kqqh47dky/+Zu/Wffv3z/Yl7/jO75Dq6rS5z3veXrDDTfo93//9+vGxoZ+/dd/vc5ms0EbLrroIj31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/Xf3nHzmM5/BOccll1xywn3I9Na3vpX73Oc+xW558OBBfv3Xf30w7i94wQu48MIL+Vf/6l9x6NAhnvOc5xRmJtOP/uiPctttt3HhhRdy2WWX8X3f9338+Z//+Z1uD1A27ksvvfSE7p8fy/379wPsOG6f+cxnTrj87/7u7+aP//iPef/738+9733vwXef+tSnuP322znllFMW1tqRI0cW1tl8W3N778x7573nG77hG/jwhz8MGIBeccUVPOxhDyOEwEc+8hE+8YlPcOutt54QgB46dGiBaVi2P51//vkL982/e+eeey7/8T/+R37+53+ek08+mUc/+tFcd911d87+yZ0MY/nABz7A5z//ed75znfyzne+c+H7d7zjHTzqUY8Ctuco74qUOk/e+zt1XZMjSHbKefvb385pp522cF9fet2pvBOhXNf3fu/38uhHP3rpPV/L0J/xeLzA1YcQ+OZv/mZuvfVWvv/7v5+LL76YjY0NbrrpJq699toFJ6Wvpr9fC1pW//Hm9GtVz3bX+/V8+MMf5glPeAJXXnkl119/Paeffjp1XfOWt7yF//bf/tudbkce/2c84xlcc801S++5z33uc6fLzdSXlu8q/f81JzvRL/3SL3HttdfypCc9ie/7vu/jlFNOwXvPq171Kj7zmc+U+0455RQ++tGP8tu//dv85m/+Jr/5m7/JW97yFp71rGfx1re+FbAQic985jP8z//5P3nf+97Hz//8z/O6172OG264YSBt/2PQP/a4PfGJT+Sd73wnP/ETP8Hb3va2wX4QY+SUU07ZNmJinnH+WrX1YQ97GD/2Yz/G1tYWH/7wh/mhH/oh9u3bx6WXXsqHP/xhTj31VIATAtCv9fj91E/9FNdee21ZC9/1Xd/Fq171Kj7ykY8sFUaW0Z0C0He84x2ccsopXHfddQvfvec97+FXfuVXuOGGG1hbWyvc1bx3ZuaCM5199tmASWzztOzaV0Pnn38+YC/aN33TN31NytyOUTjvvPMAqOv6uHWdffbZS1VKf/VXf/VVte0v/uIv+Ou//mve+ta38qxnPatc30nFdTw6++yz+V//639x5MiRgRQ639Y8r8v68MlPfpKTTz6ZjY2Nu9yOu4Pe/e53M5lM+O3f/m3G43G5/pa3vGVw39lnn02Mkc9+9rMDzcL8ej548CC7d+8mhPA1W4870d09J+effz4xRj7xiU8M1IvHo3e9612cd955vOc97xm8b1mT06fRaMTjH/94Hv/4xxNj5AUveAFvfvObeelLX1oY1gMHDvDsZz+bZz/72Rw5coQrr7ySl73sZXcaQPM7/vGPf/xOPXdn6Pzzzz/h8p/0pCfxqEc9imuvvZbdu3fzpje9aVDO+9//fh760Id+TRirE6UrrriC2WzGf//v/52bbrqpAOWVV15ZAPTCCy8sQPrV0tlnn80nPvEJVHWwVrbDkssuu4zLLruM//yf/zN/8Ad/wEMf+lBuuOEGXvnKV55QfSeswt3c3OQ973kPj3vc43jKU56y8PPCF76Qw4cPF/fks88+G+990X9nuv766wefzzjjDC699FLe9ra3ceTIkXL9d3/3d/mLv/iLE23eCdGjH/1o9uzZw4//+I/TNM3C97fccsudLnN9fR1YZBROOeUUHv7wh/PmN795qTt8v67HPOYxfOQjH+GP/uiPBt9/tfG1mWPrc2iqOnDrv7P0mMc8hrZtBy9nCIE3vOENg/tOP/107ne/+/HWt751MDYf//jHed/73sdjHvOYu9yGu4u894jIQIvyuc99jl/91V8d3Jc1DvNrfX6MvPdcffXVvPvd7166Sd6V9bgT3d1z8qQnPQnnHD/6oz+6oP3YSYpYto7/8A//kP/9v//34L4vf/nLg8/OuSLBT6fTpffs2rWLe97znuV7OPEwloMHD3LllVfyi7/4i/zt3/7tCffnztDVV1/Nxz72MX7lV35l4btldTzrWc/iZ37mZ7jhhhv4/u///nL9aU97GiEEXvGKVyw807bttmFoXy096EEPoq5rfvInf5IDBw4U1fIVV1zBRz7yEX73d3/3hKTPE6VHP/rR3HTTTYMwma2tLX7u535ucN8dd9xB27aDa5dddhnOucFaOB6dsAT6a7/2axw+fHhgnO3Tgx/84JJU4V//63/N3r17eepTn8ob3vAGRITzzz+f9773vUttOj/+4z/OE5/4RB760Ify7Gc/m6985Su88Y1v5NJLLx2A6ldLe/bs4U1vehPPfOYzecADHsC3fdu3cfDgQf72b/+WX//1X+ehD30ob3zjG+9UmWtra1xyySX8j//xP7jwwgs5cOAAl156KZdeeinXXXcdD3vYw7jssst43vOex3nnnccXv/hF/vf//t/8/d//PR/72McAeMlLXsLb3/52vuVbvoUXvehFbGxs8LM/+7OcffbZd9k+A3DxxRdz/vnn873f+73cdNNN7Nmzh3e/+91flf3w8Y9/PA996EP5gR/4AT73uc9xySWX8J73vGep7eA1r3kN/+pf/Su+4Ru+gec+97lsbm7yhje8gb179y7EQv5zoMc+9rG89rWv5Vu+5Vv49m//dm6++Wauu+467nnPew7m6fLLL+fqq6/m9a9/PV/+8pd58IMfzO/+7u/y13/918BQa/ETP/ETfPCDH+RBD3oQz3ve87jkkku49dZb+dM//VPe//73L41j/mro7pyTe97znvzQD/0Qr3jFK7jiiiv41m/9VsbjMX/8x3/MGWecwate9aqlzz3ucY/jPe95D09+8pN57GMfy2c/+1luuOEGLrnkksH+8B3f8R3ceuutPPKRj+TQoUPceOONvOENb+B+97sf97rXvQBzjnn4wx/O5ZdfzoEDB/iTP/kT3vWud/HCF76wlHPTTTdxr3vdi2uuuea4jkQ/8zM/w8Me9jAe8IAH8J3f+Z2ce+65fO5zn+PXf/3X+ehHP/pVj9n3fd/38a53vYunPvWpPOc5z+Hyyy/n1ltv5dd+7de44YYbuO9977vwzAtf+ELuuOMOfuiHfoi9e/fygz/4g1x11VU8//nP51WvehUf/ehHedSjHkVd13zqU5/il3/5l/npn/5pnvKUp3zV7Z2n9fV1Lr/8cj7ykY+UGFAwCfTo0aMcPXr0awqgz3/+83njG9/I05/+dF70ohdx+umn8453vIPJZAJ0794HPvABXvjCF/LUpz6VCy+8kLZtefvb316Y2hOmE3XXffzjH6+TyUSPHj267T3XXnut1nVdXPJvueUWvfrqq3V9fV3379+vz3/+8/XjH//4QriDquo73/lOvfjii3U8Huull16qv/Zrv6ZXX321XnzxxeWe7F7+mte8ZvDsfBxUphy28Md//McL9z/60Y/WvXv36mQy0fPPP1+vvfZa/ZM/+ZNyzzXXXKMbGxsLfcwu6X36gz/4A7388st1NBothCl85jOf0Wc961l62mmnaV3XeuaZZ+rjHvc4fde73jUo48///M/1qquu0slkomeeeaa+4hWv0F/4hV844TCWZW1VVf3EJz6h3/RN36S7du3Sk08+WZ/3vOfpxz72sYU5uDP9/fKXv6zPfOYzdc+ePbp371595jOfWdzC5+f1/e9/vz70oQ/VtbU13bNnjz7+8Y/XT3ziE0vruOWWW06oX8tCN5bRdmEs8+vhztT/C7/wC3rBBRfoeDzWiy++WN/ylrcsHaOjR4/qv//3/14PHDigu3bt0ic96Un6V3/1VwoMQkBUVb/4xS/qv//3/17POussretaTzvtNP3Gb/xG/dmf/dnj9nGnMJb59yTT3Tknqqq/+Iu/qPe///11PB7r/v379aqrriphcbmsfhhLjFF//Md/XM8++2wdj8d6//vfX9/73vfqNddcMwhze9e73qWPetSj9JRTTtHRaKT3uMc99PnPf75+/vOfL/e88pWv1Ac+8IG6b98+XVtb04svvlh/7Md+bBAHeWfCWFQt3vvJT36y7tu3TyeTiV500UX60pe+tHy/3Vjm9dh/v+fXrKq9by984Qv1zDPP1NFopIcOHdJrrrmm7LPb7X8veclLFNA3vvGN5drP/uzP6uWXX65ra2u6e/duveyyy/QlL3mJ/sM//MOgDctCfebn5UTp+77v+xTQn/zJnxxcv+c976mAfuYznxlc3y6MZdn6ml8Dqqp/8zd/o4997GN1bW1NDx48qN/zPd+j7373uxXQj3zkI+We5zznOXr++efrZDLRAwcO6CMe8Qh9//vff6f6Jqr/SJb/rwHd73734+DBg1+VzW5FK/qnQh/96Ee5//3vzy/90i/d6RClFa1oRXedXv/61/PiF7+Yv//7v+fMM8/8mpX7TyLZYNM0C/roD33oQ3zsYx9bJWhf0T9Lmk+VCPYSO+e48sor74YWrWhF/zJo/t3b2trizW9+MxdccMHXFDzhqziN5WtJN910E9/0Td/EM57xDM444ww++clPcsMNN3DaaactBB+vaEX/HOjVr341/+f//B8e8YhHUFVVCav4zu/8zoV40xWt6J8bfeELX9jx+7W1tUGym/8/6Vu/9Vu5xz3uwf3udz9uv/12fumXfolPfvKT/ziHntwphe8/Et122236tKc9rej49+/fr095ylP005/+9N3dtBWt6C7R+973Pn3oQx+q+/fv17qu9fzzz9eXvexlg1STK1rRP1cCdvw5UfvxPwa97nWv03vf+966sbGhk8lEH/CAB+g73/nOf5S6/knbQFe0ohWtaEX/9Oj973//jt+fccYZdynj1D83WgHoila0ohWtaEV3gf5JOBGtaEUr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\n" }, "metadata": {} } @@ -2772,30 +2817,30 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "xbj-Z7Bhut-Y", - "outputId": "9bd48730-b793-4520-d471-0c77970757cb" + "outputId": "eb42691f-4daf-4596-a342-b956b7de4605" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Saving TensorBoard log files to: transfer_learning/1_percent_data_aug/20230818-014045\n", + "Saving TensorBoard log files to: logs/fit/\n", "Epoch 1/5\n", - "3/3 [==============================] - 12s 2s/step - loss: 2.3484 - accuracy: 0.1000 - val_loss: 2.1935 - val_accuracy: 0.1908\n", + "3/3 [==============================] - 16s 3s/step - loss: 2.4473 - accuracy: 0.1143 - val_loss: 2.2775 - val_accuracy: 0.1908\n", "Epoch 2/5\n", - "3/3 [==============================] - 2s 965ms/step - loss: 2.1591 - accuracy: 0.2000 - val_loss: 2.1027 - val_accuracy: 0.2418\n", + "3/3 [==============================] - 7s 2s/step - loss: 2.2039 - accuracy: 0.2143 - val_loss: 2.1542 - val_accuracy: 0.2599\n", "Epoch 3/5\n", - "3/3 [==============================] - 2s 894ms/step - loss: 1.9803 - accuracy: 0.3571 - val_loss: 2.0100 - val_accuracy: 0.3076\n", + "3/3 [==============================] - 5s 2s/step - loss: 2.0207 - accuracy: 0.3143 - val_loss: 2.0173 - val_accuracy: 0.3355\n", "Epoch 4/5\n", - "3/3 [==============================] - 2s 916ms/step - loss: 1.8378 - accuracy: 0.5000 - val_loss: 1.9392 - val_accuracy: 0.3372\n", + "3/3 [==============================] - 4s 2s/step - loss: 1.8357 - accuracy: 0.5571 - val_loss: 1.9524 - val_accuracy: 0.3668\n", "Epoch 5/5\n", - "3/3 [==============================] - 2s 866ms/step - loss: 1.7660 - accuracy: 0.5429 - val_loss: 1.8595 - val_accuracy: 0.3931\n" + "3/3 [==============================] - 6s 2s/step - loss: 1.6586 - accuracy: 0.5714 - val_loss: 1.8443 - val_accuracy: 0.4145\n" ] } ], @@ -2835,7 +2880,7 @@ " validation_data=test_data,\n", " validation_steps=int(0.25* len(test_data)), # validate for less steps\n", " # Track model training logs\n", - " callbacks=[create_tensorboard_callback(\"transfer_learning\", \"1_percent_data_aug\")])" + " callbacks=[create_tensorboard_callback(\"1_percent_data_aug\")])" ] }, { @@ -2855,13 +2900,13 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 28, "metadata": { "id": "lloN15WdPkgb", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "7e247748-78dc-42e4-9651-c3a1888c6729" + "outputId": "93af74b8-c35a-4fad-81b7-4382e9c4a0ce" }, "outputs": [ { @@ -2874,21 +2919,22 @@ "=================================================================\n", " input_layer (InputLayer) [(None, 224, 224, 3)] 0 \n", " \n", - " data_augmentation (Sequenti (None, None, None, 3) 0 \n", - " al) \n", + " data_augmentation (Sequent (None, None, None, 3) 0 \n", + " ial) \n", " \n", - " efficientnetv2-b0 (Function (None, None, None, 1280) 5919312 \n", - " al) \n", + " efficientnetv2-b0 (Functio (None, None, None, 1280 5919312 \n", + " nal) ) \n", " \n", - " global_average_pooling_laye (None, 1280) 0 \n", - " r (GlobalAveragePooling2D) \n", + " global_average_pooling_lay (None, 1280) 0 \n", + " er (GlobalAveragePooling2D \n", + " ) \n", " \n", " output_layer (Dense) (None, 10) 12810 \n", " \n", "=================================================================\n", - "Total params: 5,932,122\n", - "Trainable params: 12,810\n", - "Non-trainable params: 5,919,312\n", + "Total params: 5932122 (22.63 MB)\n", + "Trainable params: 12810 (50.04 KB)\n", + "Non-trainable params: 5919312 (22.58 MB)\n", "_________________________________________________________________\n" ] } @@ -2913,31 +2959,31 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 29, "metadata": { "id": "RgWXERdy8nXP", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "5c70086b-57a1-44b6-b148-ee1c194bf17b" + "outputId": "bfee25fa-5021-4a73-abd5-9cbc0ba96f26" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "79/79 [==============================] - 3s 36ms/step - loss: 1.8197 - accuracy: 0.4188\n" + "79/79 [==============================] - 7s 82ms/step - loss: 1.8314 - accuracy: 0.4288\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ - "[1.819704294204712, 0.4187999963760376]" + "[1.8314383029937744, 0.42879998683929443]" ] }, "metadata": {}, - "execution_count": 26 + "execution_count": 29 } ], "source": [ @@ -2959,14 +3005,14 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 30, "metadata": { "id": "ShCcuguspbyz", "colab": { "base_uri": "https://localhost:8080/", "height": 927 }, - "outputId": "45595fa8-0332-40b8-e7d4-8057c859077f" + "outputId": "19974b30-64f5-43b5-b9cc-91abba36ed8b" }, "outputs": [ { @@ -2975,7 +3021,7 @@ "text/plain": [ "
" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABm+klEQVR4nO3dd3wUdf7H8ddueocAIZAEQgkQWoDQQQVRKYogKAhItwOK7ZTfnSeedyKevWMBREQUKSIiiiggvSSB0It0CJ2E9GR3fn+MhkMpSUgy2eT9fDz28TDfmdn5DJN135n5fr9jMwzDQERERMQidqsLEBERkfJNYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmFERERELKUwIiLXZOrUqdhsNjZs2GB1KSLiohRGRERExFIKIyIiImIphRERKXbx8fF0796dwMBA/P396dKlC2vWrLlonZycHJ5//nmioqLw9vamUqVKdOzYkcWLF+etk5SUxPDhwwkPD8fLy4tq1arRq1cv9u/fX8JHJCJFyd3qAkSkbNu6dSvXXXcdgYGB/O1vf8PDw4NJkybRqVMnli1bRps2bQAYP348EyZM4N5776V169akpKSwYcMG4uLiuPnmmwHo27cvW7duZcyYMURGRnLixAkWL17MwYMHiYyMtPAoReRa2AzDMKwuQkRc19SpUxk+fDjr16+nZcuWf1l+xx13sHDhQrZv307t2rUBOHbsGPXr16d58+YsW7YMgGbNmhEeHs6CBQsuuZ9z585RsWJF/vvf//Lkk08W3wGJSInTbRoRKTYOh4Mff/yR3r175wURgGrVqjFw4EBWrFhBSkoKABUqVGDr1q3s3r37ku/l4+ODp6cnS5cu5ezZsyVSv4iUDIURESk2J0+eJD09nfr16/9lWXR0NE6nk0OHDgHwr3/9i3PnzlGvXj2aNGnCU089xebNm/PW9/LyYuLEiXz//fdUrVqV66+/npdffpmkpKQSOx4RKR4KIyJSKlx//fXs3buXyZMn07hxYz7++GNatGjBxx9/nLfO2LFj2bVrFxMmTMDb25tnn32W6Oho4uPjLaxcRK6VwoiIFJsqVarg6+vLzp07/7Jsx44d2O12IiIi8tqCg4MZPnw4X3zxBYcOHaJp06aMHz/+ou3q1KnDE088wY8//siWLVvIzs7m1VdfLe5DEZFipDAiIsXGzc2NW265hW+++eai4bfHjx9nxowZdOzYkcDAQABOnz590bb+/v7UrVuXrKwsANLT08nMzLxonTp16hAQEJC3joi4Jg3tFZEiMXnyZBYtWvSX9vHjx7N48WI6duzIww8/jLu7O5MmTSIrK4uXX345b72GDRvSqVMnYmNjCQ4OZsOGDXz99deMHj0agF27dtGlSxf69etHw4YNcXd3Z+7cuRw/fpy77767xI5TRIqehvaKyDX5Y2jv5Rw6dIiTJ08ybtw4Vq5cidPppE2bNvznP/+hXbt2eev95z//Yf78+ezatYusrCxq1qzJ4MGDeeqpp/Dw8OD06dM899xzLFmyhEOHDuHu7k6DBg144oknuOuuu0riUEWkmCiMiIiIiKXUZ0REREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYimXmPTM6XRy9OhRAgICsNlsVpcjIiIi+WAYBufPn6d69erY7Ze//uESYeTo0aMXPb9CREREXMehQ4cIDw+/7HKXCCMBAQGAeTB/PMdCRERESreUlBQiIiLyvscvxyXCyB+3ZgIDAxVGREREXMzVulioA6uIiIhYSmFERERELKUwIiIiIpZyiT4jIiJiLYfDQU5OjtVlSCnj4eGBm5vbNb+PwoiIiFyWYRgkJSVx7tw5q0uRUqpChQqEhoZe0zxgCiMiInJZfwSRkJAQfH19NfGk5DEMg/T0dE6cOAFAtWrVCv1eCiMiInJJDocjL4hUqlTJ6nKkFPLx8QHgxIkThISEFPqWjTqwiojIJf3RR8TX19fiSqQ0++P341r6FCmMiIjIFenWjFxJUfx+KIyIiIiIpRRGREREriAyMpI33ngj3+svXboUm81WoiOQOnXqxNixY0tsf0VNHVhFRKTM6dSpE82aNStQiLic9evX4+fnl+/127dvz7FjxwgKCrrmfZcX5frKSK7Dyc87jltdhoiIlDDDMMjNzc3XulWqVClQJ15PT89rnnejvCm3YcTpNHhi1iZGTN3ApGV7rS5HRESKyLBhw1i2bBlvvvkmNpsNm83G1KlTsdlsfP/998TGxuLl5cWKFSvYu3cvvXr1omrVqvj7+9OqVSt++umni97vz7dpbDYbH3/8MXfccQe+vr5ERUUxf/78vOV/vk0zdepUKlSowA8//EB0dDT+/v5069aNY8eO5W2Tm5vLI488QoUKFahUqRJPP/00Q4cOpXfv3oX6Nzh79ixDhgyhYsWK+Pr60r17d3bv3p23/MCBA/Ts2ZOKFSvi5+dHo0aNWLhwYd62gwYNokqVKvj4+BAVFcWUKVMKVUd+ldswYrNBjWAz6U74fgdvLdl9lS1ERMQwDNKzcy15GYaRrxrffPNN2rVrx3333cexY8c4duwYERERADzzzDO89NJLbN++naZNm5KamkqPHj1YsmQJ8fHxdOvWjZ49e3Lw4MEr7uP555+nX79+bN68mR49ejBo0CDOnDlz2fXT09N55ZVX+Oyzz1i+fDkHDx7kySefzFs+ceJEPv/8c6ZMmcLKlStJSUlh3rx5+TreSxk2bBgbNmxg/vz5rF69GsMw6NGjR97w21GjRpGVlcXy5ctJTExk4sSJ+Pv7A/Dss8+ybds2vv/+e7Zv3877779P5cqVC11LfpTbPiM2m40nbqmPp5udVxfv4rXFu8jKdfDkLfV1aU1E5DIychw0/OcPlux727+64ut59a+toKAgPD098fX1JTQ0FIAdO3YA8K9//Yubb745b93g4GBiYmLyfn7hhReYO3cu8+fPZ/To0Zfdx7BhwxgwYAAAL774Im+99Rbr1q2jW7dul1w/JyeHDz74gDp16gAwevRo/vWvf+Utf/vttxk3bhx33HEHAO+8807elYqC2r17N/Pnz2flypW0b98egM8//5yIiAjmzZvHXXfdxcGDB+nbty9NmjQBoHbt2nnbHzx4kObNm9OyZUvAvDJU3MrtlZE/jOkSxd97RAPw7i97+c932/OdvkVExLX88QX7h9TUVJ588kmio6OpUKEC/v7+bN++/apXRpo2bZr3335+fgQGBuZNi34pvr6+eUEEzKnT/1g/OTmZ48eP07p167zlbm5uxMbGFujY/rB9+3bc3d1p06ZNXlulSpWoX78+27dvB+CRRx7h3//+Nx06dOC5555j8+bNees+9NBDzJw5k2bNmvG3v/2NVatWFaqOgii3V0b+133X18bLw84/v9nKxyv2kZXr5PnbG2G36wqJiMj/8vFwY9u/ulq272v151ExTz75JIsXL+aVV16hbt26+Pj4cOedd5KdnX3F9/Hw8LjoZ5vNhtPpLND6Vv7he++999K1a1e+++47fvzxRyZM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M4cXX3yRPXv2kJOTQ1RUFE888QSDBw++5uJLM19Pdz4Z2ooHp29k6c6TjPh0PZPuiaVzgxCrSxMRKTwPX/MKhVX7zqeePXtiGAbfffcdrVq14tdff+X1118H4Mknn2Tx4sW88sor1K1bFx8fH+68806ys0vmeWNTpkzhkUceYdGiRXz55Zf84x//YPHixbRt25bx48czcOBAvvvuO77//nuee+45Zs6cyR133FEitVmlQFdGli1bxqhRo1izZg2LFy8mJyeHW265hbS0tMtuExwczN///ndWr17N5s2bGT58OMOHD+eHH3645uJLO28PNyYNjuXmhlXJznVy/2cbWLQlyeqyREQKz2Yzb5VY8fq9X0V+eHt706dPHz7//HO++OIL6tevT4sWLQBYuXIlw4YN44477qBJkyaEhoayf//+IvnniY6OZtOmTRd9L65cuRK73X7RH+7Nmzdn3LhxrFq1isaNGzNjxoy8ZfXq1eOxxx7jxx9/pE+fPkyZMqVIaivNChRGFi1axLBhw2jUqBExMTFMnTqVgwcPsnHjxstu06lTJ+644w6io6OpU6cOjz76KE2bNmXFihXXXLwr8HJ3471BLbi1STVyHAajZsTx7SaL/qoQESlHBg0axHfffcfkyZMZNGhQXntUVBRz5swhISGBTZs2MXDgwL+MvLmWfXp7ezN06FC2bNnCL7/8wpgxYxg8eDBVq1Zl3759jBs3jtWrV3PgwAF+/PFHdu/eTXR0NBkZGYwePZqlS5dy4MABVq5cyfr16y/qU1JWXVMH1uTkZMC8+pEfhmHw888/s3PnTiZOnHjZ9bKysvLu8wGkpLj2nB0ebnbevLsZXu525sQf4dGZ8WTnOukbG251aSIiZdaNN95IcHAwO3fuZODAgXntr732GiNGjKB9+/ZUrlyZp59+usi+Z3x9ffnhhx949NFHadWqFb6+vvTt25fXXnstb/mOHTv49NNPOX36NNWqVWPUqFE88MAD5Obmcvr0aYYMGcLx48epXLkyffr04fnnny+S2kozm2Hkc6zUnzidTm6//XbOnTt31ascycnJhIWFkZWVhZubG++99x4jRoy47Prjx4+/5D9+cnIygYGBhSm3VHA4Df4+N5GZ6w9hs8GLdzRhQOsaVpclInJJmZmZ7Nu3j1q1auHt7W11OVJKXen3JCUlhaCgoKt+fxf6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eoanp6fRqFEj47vvvivhiguuIMc4duzYvHWrVq1q9OjRw4iLi7Og6vz5Yyjrn19/HNPQoUONG2644S/bNGvWzPD09DRq165tTJkypcTrzq+CHt/EiRONOnXqGN7e3kZwcLDRqVMn4+eff7am+Hy41LEBF50TV/4cFub4XO0zOGLECKNmzZqGp6enUaVKFaNLly55X9SG4drnzzAKfnyudv4u5c9hpDScQ5thGEbxXXcRERERubIy22dEREREXIPCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIuISbDYb8+bNs7oMESkGCiMiclXDhg3DZrP95dWtWzerSxORMqDMPrVXRIpWt27dmDJlykVtXl5eFlUjImWJroyISL54eXkRGhp60atixYqAeQvl/fffp3v37vj4+FC7dm2+/vrri7ZPTEzkxhtvxMfHh0qVKnH//feTmpp60TqTJ0+mUaNGeHl5Ua1aNUaPHn3R8lOnTnHHHXfg6+tLVFQU8+fPz1t29uxZBg0aRJUqVfDx8SEqKuov4UlESieFEREpEs8++yx9+/Zl06ZNDBo0iLvvvpvt27cDkJaWRteuXalYsSLr169n1qxZ/PTTTxeFjffff59Ro0Zx//33k5iYyPz586lbt+5F+3j++efp168fmzdvpkePHgwaNIgzZ87k7X/btm18//33bN++nffff5/KlSuX3D+AiBResT6GT0TKhKFDhxpubm6Gn5/fRa///Oc/hmGYT6998MEHL9qmTZs2xkMPPWQYhmF8+OGHRsWKFY3U1NS85d99951ht9uNpKQkwzAMo3r16sbf//73y9YAGP/4xz/yfk5NTTUA4/vvvzcMwzB69uxpDB8+vGgOWERKlPqMiEi+dO7cmffff/+ituDg4Lz/bteu3UXL2rVrR0JCAgDbt28nJiYGPz+/vOUdOnTA6XSyc+dObDYbR48epUuXLlesoWnTpnn/7efnR2BgICdOnADgoYceom/fvsTFxXHLLbfQu3dv2rdvX6hjFZGSpTAiIvni5+f3l9smRcXHxydf63l4eFz0s81mw+l0AtC9e3cOHDjAwoULWbx4MV26dGHUqFG88sorRV6viBQt9RkRkSKxZs2av/wcHR0NQHR0NJs2bSItLS1v+cqVK7Hb7dSvX5+AgAAiIyNZsmTJNdVQpUoVhg4dyvTp03njjTf48MMPr+n9RKRk6MqIiORLVlYWSUlJF7W5u7vndRKdNWsWLVu2pGPHjnz++eesW7eOTz75BIBBgwbx3HPPMXToUMaPH8/JkycZM2YMgwcPpmrVqgCMHz+eBx98kJCQELp378758+dZuXIlY8aMyVd9//znP4mNjaVRo0ZkZWWxYMGCvDAkIqWbwoiI5MuiRYuoVq3aRW3169dnx44dgDnSZebMmTz88MNUq1aNL774goYNGwLg6+vLDz/8wKOPPkqrVq3w9fWlb9++vPbaa3nvNXToUDIzM3n99dd58sknqVy5MnfeeWe+6/P09GTcuHHs378fHx8frrvuOmbOnFkERy4ixc1mGIZhdREi4tpsNhtz586ld+/eVpciIi5IfUZERETEUgojIiIiYin1GRGRa6a7vSJyLXRlRERERCylMCIiIiKWUhgRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQs9f8As1fcepOBDwAAAABJRU5ErkJggg==\n" + "image/png": "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\n" }, "metadata": {} }, @@ -2985,7 +3031,7 @@ "text/plain": [ "
" ], - "image/png": "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IoJrrrmmRDXk5eXx3nvvFTmu6667rkifjz76iICAAH755RduvfVWli5dypo1a9i+fTtNmjQBoGHDhgX9R44cSadOnTh69Cg1a9YkKSmJ77///opGkUSk4svIyee3XSkFK58mpmUX2d441JduTR1zP2LqBeHuqhMBFVnlCyNOZNCgQdx333289957eHh4MHv2bO666y6sVisZGRk8//zzLFq0iKNHj5Kfn8/p06c5cODAZT3X0qVLmTBhAjt27CAtLY38/Hyys7PJysrC29ubuLg4+vfvf959t2/fTk5OTkFoulzu7u5ERUUVaTt27Bj/+te/WLFiBUlJSdhsNrKysgqOMy4ujjp16hQEkb/r0KEDLVq04NNPP2Xs2LHMmjWLevXqce21115RrSJSsRiGwe6kDMfoR3wyaxNOkGcrHP3wcnPh6kbV6RIZStcmIYQHeZtYrZRU5Qsjbt6OEQqznrsEevXqhWEYLFq0iPbt2/O///2PN998E4Ann3ySJUuWMHHiRBo1aoSXlxf9+vUjNze3xGUlJCRw66238tBDD/Hyyy8TFBTEb7/9xr333ktubi7e3t54eXldcP+LbQMKJqH+9e61eXl55/Tz8vI6Z1XCoUOHcvz4cd566y3q1auHh4cHHTt2LDjOSz03OEZH3n33XcaOHcv06dMZPny4Vj8UqQSycvNZtef4mYXHkjl86nSR7Q2CfQoWHuvQIAhPN910zllVvjBisRT7VInZPD09ueOOO5g9eza7d+8mMjKStm3bAo7JpMOGDaNPnz4AZGRkFEwGLal169Zht9t54403CoLD/Pnzi/SJiopi2bJlvPDCC+fs37hxY7y8vFi2bBkjR448Z3tISAgAR48eJTAwEHCMaBTHypUree+99+jZsycABw8eJCUlpUhdhw4dYufOnRccHbnnnnt4+umnefvtt9m2bVvBqSQRcT77UjJZvsNx5cvqfSfIzS+c5O/uaqVjw+p0jXTc96VBsHP8rZdLq3xhxMkMGjSIW2+9la1bt3LPPfcUtDdu3JivvvqKXr16YbFYePbZZ8+58qa4GjVqRF5eHu+88w69evVi5cqVfPDBB0X6jBs3jlatWvHwww/z4IMP4u7uzvLly+nfvz/BwcGMGTOGp59+Gnd3d66++mqSk5PZunUr9957L40aNSI8PJznn3+el19+mZ07d/LGG28U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kWLx8PCgRo0aRb4CAwMBxymU999/n5tvvhkvLy8aNmzIl19+WWT/zZs3c9111+Hl5UX16tW5//77ycjIKNJn2rRptGjRAg8PD2rWrMmoUaOKbE9JSaFPnz54e3vTuHFjFi5cWLDt5MmTDBo0iJCQELy8vGjcuPE54UlEKiaFEREpFc8++yx9+/Zl48aNDBo0iLvuuovt27cDkJmZSY8ePQgMDGTt2rV88cUXLF26tEjYeP/993nkkUe4//772bx5MwsXLqRRo0ZFnuOFF17gzjvvZNOmTfTs2ZNBgwZx4sSJgufftm0bP/zwA9u3b+f9998nODi4/H4AInL5yvQ2fCJSKQwdOtRwcXExfHx8iny9/PLLhmE47l774IMPFtknNjbWeOihhwzDMIyPPvrICAwMNDIyMgq2L1q0yLBarUZiYqJhGIZRq1Yt45lnnrlgDYDxr3/9q+D7jIwMAzB++OEHwzAMo1evXsbw4cNL54BFpFxpzoiIFEu3bt14//33i7QFBQUV/Ltjx45FtnXs2JG4uDgAtm/fTnR0ND4+PgXbr776aux2O/Hx8VgsFo4cOcL1119/0RqioqIK/u3j44Ofnx9JSUkAPPTQQ/Tt25f169dz44030rt3bzp16nRZxyoi5UthRESKxcfH55zTJqXFy8urWP3c3NyKfG+xWLDb7QDcfPPN7N+/n++//54lS5Zw/fXX88gjjzBx4sRSr1dESpfmjIhIqfjjjz/O+b5Zs2YANGvWjI0bN5KZmVmwfeXKlVitViIjI6lWrRr169dn2bJlV1RDSEgIQ4cOZdasWUyePJmPPvroih5PRMqHRkZEpFhycnJITEws0ubq6lowSfSLL74gJiaGa665htmzZ7NmzRo++eQTAAYNGsRzzz3H0KFDef7550lOTubRRx9l8ODBhIWFAfD888/z4IMPEhoays0330x6ejorV67k0UcfLVZ948ePp127drRo0YKcnBy+++67gjAkIhWbwoiIFMvixYupWbNmkbbIyEh27NgBOK50mTt3Lg8//DA1a9bk888/p3nz5gB4e3vz448/8thjj9G+fXu8vb3p27cvkyZNKnisoUOHkp2dzZtvvsmTTz5JcHAw/fr1K3Z97u7ujBs3joSEBLy8vOjcuTNz584thSMXkbJmMQzDMLsIEXFuFouFr7/+mt69e5tdiog4Ic0ZEREREVMpjIiIiIipNGdERK6YzvaKyJXQyIiIiIiYSmFERERETKUwIiIiIqZSGBERERFTKYyIiIiIqRRGRERExFQKIyIiImIqhRERERExlcKIiIiImOr/AQIhAWalp+VhAAAAAElFTkSuQmCC\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABoBUlEQVR4nO3deVzVVf7H8de9wGUHURQVcUcUBfe11ErL0hzXaRlLs6mmxZbxZ6lZpjXmMmY6aTk17dnY5D5upZampuloKO5LKm6guLDKdu/398dVkNxAgS8X3s/Hg0dwvufe+/lyBd6d7/meYzEMw0BERETEJFazCxAREZHyTWFERERETKUwIiIiIqZSGBERERFTKYyIiIiIqRRGRERExFQKIyIiImIqhRERERExlcKIiIiImEphREREREylMCJSjr3//vtYLBbatm1rdikiUo5ZtDeNSPl12223ceLECQ4fPsz+/fupX7++2SWJSDmkkRGRcurQoUP8/PPPTJkyhcqVKzNr1iyzS7qqtLQ0s0sQkWKmMCJSTs2aNYugoCB69OhB//79rxpGzp8/z1//+ldq166Np6cnNWrUYODAgSQmJub2ycjIYMyYMTRo0AAvLy+qVatG3759OXjwIACrV6/GYrGwevXqfM99+PBhLBYLn332WW7bY489hp+fHwcPHqR79+74+/szYMAAANauXcsf//hHatasiaenJ2FhYfz1r3/lwoULV9S9Z88eHnjgASpXroy3tzcRERGMGjUKgB9//BGLxcL8+fOveNzXX3+NxWJhw4YNhf5+isjNcze7ABExx6xZs+jbty82m42HH36YDz74gM2bN9O6dWsAUlNT6dixI7t37+bxxx+nRYsWJCYmsmjRIo4dO0ZwcDB2u53777+fVatW8dBDD/Hiiy+SkpLCihUr2LFjB/Xq1St0XTk5OXTr1o3bb7+dyZMn4+PjA8C3335Leno6zzzzDJUqVWLTpk289957HDt2jG+//Tb38du3b6djx454eHjw1FNPUbt2bQ4ePMh///tfxo0bxx133EFYWBizZs2iT58+V3xP6tWrR/v27W/hOysihWaISLnzv//9zwCMFStWGIZhGA6Hw6hRo4bx4osv5vYZPXq0ARjz5s274vEOh8MwDMP45JNPDMCYMmXKNfv8+OOPBmD8+OOP+Y4fOnTIAIxPP/00t23Q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ROTGHA6Dc+lZuSEi8eJ/fx8uTqdkci69cGHB091KlQBPKvt5EuznSWX/yz4ufn2p3cvD3MUXy1wYcXWtWrXK93VqaipjxoxhyZIlnDx5kpycHC5cuEBcXNx1nyc6Ojr3c19fXwICAnKXIL8aHx+f3CACzmXKL/VPSkoiISEhd6QAwM3NjZYtWxZ4P6D9+/czevRofvnlFxITE3MfFxcXR5MmTYiJiaF58+bXHLmJiYnhySefLNBrXc/vv792u523336b//znPxw/fpysrCwyMzNz5+Ds3r2bzMxMunTpctXn8/Ly4tFHH+WTTz7hgQceYOvWrezYsSPfZTERKV8MwyAlM4fEqwSKS18npuaNatgdRoGf291qoZKfLV+guPR58O/a/DzdXeZ/ispcGPH2cGPXm91Me+1b9fu7YoYNG8aKFSuYPHky9evXx9vbm/79+99wh2IPD498X1sslusGh6v1N4yC/4DcSM+ePalVqxYfffQR1atXx+Fw0KRJk9zzuLRE+rXc6PjV6r3aBNXff3///ve/M23aNKZOnUpUVBS+vr689NJLBa4LnJdqmjVrxrFjx/j000+56667qFWr1g0fJyKuJSPbftVwkTuacVl7Zk7hNm6t6GvLHy78PQnODR1euW0VvD2wWl0jYBRGmQsjFoulQJdKzGaz2XKXsr+e9evX89hjj+VeHklNTeXw4cPFXF1+gYGBhISEsHnzZjp16gQ4RxS2bt1Ks2bNbvj4M2fOsHfvXj766CM6duwIwLp16/L1iY6O5l//+hdnz5696uhIdHQ0q1atYvDgwVd9jcqVK+ebcLt//37S09NvWNv69evp1asXjzzyCOCcrLpv3z4iIyMBCA8Px9vbm1WrVvHEE09c9TmioqJo1aoVH330EV9//TXTp0+/4euKSOmQY3dwJu3KOReXf5548fOUjELOw/B0d4aK310a+X3oqOhrw8OtfN9PUvr/apdRtWvX5pdffuHw4cP4+fldc9QiPDycefPm0bNnTywWC6+//nqBL40Upeeff57x48dTv359GjZsyHvvvce5c+cKNAQYFBREpUqV+PDDD6lWrRpxcXGMGDEiX5+HH36Yt99+m969ezN+/HiqVavGr7/+SvXq1Wnfvj1vvPEGXbp0oV69ejz00EPk5OSwdOlShg8fDjjvapk+fTrt27fHbrczfPjwK0Z7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MWrUqGvWABivvfZa7tepqakGYCxbtswwDMPo2bOnMXjw4KI5YREpUZozIiIFcuedd/LBBx/ka6tYsWLu5+3bt893rH379sTExACwe/dumjZtiq+vb+7x2267DYfDwd69e7FYLJw4cYIuXbpct4bo6Ojcz319fQkICODUqVMAPPPMM/Tr14+tW7dyzz330Lt3bzp06HBT5yoiJUthREQKxNfX94rLJkXF29u7QP08PDzyfW2xWHA4HADcd999HDlyhKVLl7JixQq6dOnCc889x+TJk4u8XhEpWpozIiJFYuPGjVd83ahRIwAaNWrEtm3bSEtLyz2+fv16rFYrERER+Pv7U7t2bVatWnVLNVSuXJlBgwbx1VdfMXXqVD788MNbej4RKRkaGRGRAsnMzCQ+Pj5fm7u7e+4k0W+//ZZWrVpx++23M2vWLDZt2sTHH38MwIABA3jjjTcYNGgQY8aM4fTp0zz//PM8+uijhISEADBmzBiefvppqlSpwn333UdKSgrr16/n+eefL1B9o0ePpmXLljRu3JjMzEwWL16cG4ZEpHRTGBGRAlm+fDnVqlXL1xYREcGePXsA550us2fP5tlnn6VatWr8+9//JjIyEgAfHx++++47XnzxRVq3bo2Pjw/9+vVjypQpuc81aNAgMjIyePfddxk2bBjBwcH079+/wPXZbDZGjhzJ4cOH8fb2pmPHjsyePbsIzlxEipvFMAzD7CJExLVZLBbmz59P7969zS5FRFyQ5oyIiIiIqRRGRERExFSaMyIit0xXe0XkVmhkREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMiIiJiKoURERERMZXCiIiIiJhKYURERERM9f+JtIAzX9V3FgAAAABJRU5ErkJggg==\n" }, "metadata": {} } @@ -3033,7 +3079,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 31, "metadata": { "id": "nv75Z8BkuTmy" }, @@ -3058,13 +3104,13 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 32, "metadata": { "id": "0eZ4SzbiC9zX", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "2c3575e4-64c1-4ab8-be12-2cd032cac8f1" + "outputId": "d5e06c80-025b-48ab-ff94-d7e0a9dc6290" }, "outputs": [ { @@ -3105,7 +3151,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 33, "metadata": { "id": "RuuP1FWADHfc" }, @@ -3214,7 +3260,7 @@ "metadata": { "id": "9oz0X3CzTC9e" }, - "execution_count": 31, + "execution_count": 34, "outputs": [] }, { @@ -3242,7 +3288,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 35, "metadata": { "id": "11M6B736noly" }, @@ -3278,40 +3324,40 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 36, "metadata": { "id": "ZOgMGhi0nx0u", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "300bed32-1f24-4d78-c855-2b6bed8118af" + "outputId": "fff36d1b-a7bb-4019-ce6f-7ef9a895ece1" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Saving TensorBoard log files to: transfer_learning/10_percent_data_aug/20230818-014119\n", + "Saving TensorBoard log files to: logs/fit/\n", "Epoch 1/5\n", - "24/24 [==============================] - ETA: 0s - loss: 2.0057 - accuracy: 0.3360\n", - "Epoch 1: val_loss improved from inf to 1.50455, saving model to ten_percent_model_checkpoints_weights/checkpoint.ckpt\n", - "24/24 [==============================] - 18s 411ms/step - loss: 2.0057 - accuracy: 0.3360 - val_loss: 1.5045 - val_accuracy: 0.6332\n", + "24/24 [==============================] - ETA: 0s - loss: 1.9936 - accuracy: 0.3413\n", + "Epoch 1: val_loss improved from inf to 1.44268, saving model to ten_percent_model_checkpoints_weights/checkpoint.ckpt\n", + "24/24 [==============================] - 40s 1s/step - loss: 1.9936 - accuracy: 0.3413 - val_loss: 1.4427 - val_accuracy: 0.6727\n", "Epoch 2/5\n", - "24/24 [==============================] - ETA: 0s - loss: 1.3970 - accuracy: 0.6413\n", - "Epoch 2: val_loss improved from 1.50455 to 1.04085, saving model to ten_percent_model_checkpoints_weights/checkpoint.ckpt\n", - "24/24 [==============================] - 7s 291ms/step - loss: 1.3970 - accuracy: 0.6413 - val_loss: 1.0408 - val_accuracy: 0.7615\n", + "24/24 [==============================] - ETA: 0s - loss: 1.3843 - accuracy: 0.6453\n", + "Epoch 2: val_loss improved from 1.44268 to 1.01977, saving model to ten_percent_model_checkpoints_weights/checkpoint.ckpt\n", + "24/24 [==============================] - 26s 1s/step - loss: 1.3843 - accuracy: 0.6453 - val_loss: 1.0198 - val_accuracy: 0.7895\n", "Epoch 3/5\n", - "24/24 [==============================] - ETA: 0s - loss: 1.1097 - accuracy: 0.7253\n", - "Epoch 3: val_loss improved from 1.04085 to 0.86102, saving model to ten_percent_model_checkpoints_weights/checkpoint.ckpt\n", - "24/24 [==============================] - 7s 285ms/step - loss: 1.1097 - accuracy: 0.7253 - val_loss: 0.8610 - val_accuracy: 0.7895\n", + "24/24 [==============================] - ETA: 0s - loss: 1.0953 - accuracy: 0.7493\n", + "Epoch 3: val_loss improved from 1.01977 to 0.80980, saving model to ten_percent_model_checkpoints_weights/checkpoint.ckpt\n", + "24/24 [==============================] - 22s 880ms/step - loss: 1.0953 - accuracy: 0.7493 - val_loss: 0.8098 - val_accuracy: 0.8289\n", "Epoch 4/5\n", - "24/24 [==============================] - ETA: 0s - loss: 0.9359 - accuracy: 0.7707\n", - "Epoch 4: val_loss improved from 0.86102 to 0.72648, saving model to ten_percent_model_checkpoints_weights/checkpoint.ckpt\n", - "24/24 [==============================] - 6s 247ms/step - loss: 0.9359 - accuracy: 0.7707 - val_loss: 0.7265 - val_accuracy: 0.8306\n", + "24/24 [==============================] - ETA: 0s - loss: 0.9363 - accuracy: 0.7707\n", + "Epoch 4: val_loss improved from 0.80980 to 0.69079, saving model to ten_percent_model_checkpoints_weights/checkpoint.ckpt\n", + "24/24 [==============================] - 21s 863ms/step - loss: 0.9363 - accuracy: 0.7707 - val_loss: 0.6908 - val_accuracy: 0.8355\n", "Epoch 5/5\n", - "24/24 [==============================] - ETA: 0s - loss: 0.8332 - accuracy: 0.7840\n", - "Epoch 5: val_loss improved from 0.72648 to 0.68383, saving model to ten_percent_model_checkpoints_weights/checkpoint.ckpt\n", - "24/24 [==============================] - 6s 249ms/step - loss: 0.8332 - accuracy: 0.7840 - val_loss: 0.6838 - val_accuracy: 0.8240\n" + "24/24 [==============================] - ETA: 0s - loss: 0.8279 - accuracy: 0.7960\n", + "Epoch 5: val_loss improved from 0.69079 to 0.62048, saving model to ten_percent_model_checkpoints_weights/checkpoint.ckpt\n", + "24/24 [==============================] - 21s 904ms/step - loss: 0.8279 - accuracy: 0.7960 - val_loss: 0.6205 - val_accuracy: 0.8520\n" ] } ], @@ -3322,7 +3368,7 @@ " epochs=initial_epochs,\n", " validation_data=test_data,\n", " validation_steps=int(0.25 * len(test_data)), # do less steps per validation (quicker)\n", - " callbacks=[create_tensorboard_callback(\"transfer_learning\", \"10_percent_data_aug\"),\n", + " callbacks=[create_tensorboard_callback(\"10_percent_data_aug\"),\n", " checkpoint_callback])" ] }, @@ -3339,31 +3385,31 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 37, "metadata": { "id": "3KBwXaDwvlEX", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "0abf7631-8004-4185-e0a6-525d67e24c44" + "outputId": "5901ce35-2200-4356-c17e-91fa2b08cd65" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "79/79 [==============================] - 3s 34ms/step - loss: 0.6795 - accuracy: 0.8216\n" + "79/79 [==============================] - 6s 67ms/step - loss: 0.6417 - accuracy: 0.8416\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ - "[0.6794611215591431, 0.8216000199317932]" + "[0.6416528224945068, 0.8416000008583069]" ] }, "metadata": {}, - "execution_count": 34 + "execution_count": 37 } ], "source": [ @@ -3374,14 +3420,14 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 38, "metadata": { "id": "W-TeYMc_Hh0p", "colab": { "base_uri": "https://localhost:8080/", "height": 927 }, - "outputId": "7d221547-8851-4fa7-d43b-d6fac0250fa2" + "outputId": "43e0ae84-ae23-4145-b244-d6b330faf57d" }, "outputs": [ { @@ -3390,7 +3436,7 @@ "text/plain": [ "
" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABkaElEQVR4nO3dd3hUZfrG8e9MeiehBEJCh9AhVCmiCErRCFgAYSmWdXEpIqIrv7W7LlbEtuoWYZUqCMhKE1FAEIVAQu8lCSX0dEib8/vjQDDSEkhyMpP7c13n2uHMmcxzdohz877veY7NMAwDEREREYvYrS5AREREyjeFEREREbGUwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIKIyIiImIphRERERGxlMKIiNyUqVOnYrPZiImJsboUEXFSCiMiIiJiKYURERERsZTCiIiUuNjYWHr16kVgYCD+/v5069aNX375pcAxOTk5vPLKK9SvXx9vb28qVqxI586dWb58ef4xSUlJPPzww4SHh+Pl5UW1atXo06cPhw4dKuUzEpHi5G51ASLi2rZv386tt95KYGAgzz77LB4eHnz22WfcfvvtrFq1ivbt2wPw8ssvM3HiRB577DHatWtHamoqMTExbNq0iTvvvBOA+++/n+3btzN69Ghq1arFiRMnWL58OQkJCdSqVcvCsxSRm2EzDMOwuggRcV5Tp07l4YcfZsOGDbRp0+ay5/v168fixYvZuXMnderUAeDYsWNERkYSFRXFqlWrAGjZsiXh4eF8++23V3yf5ORkgoODefvttxk/fnzJnZCIlDpN04hIicnLy+O7776jb9+++UEEoFq1agwaNIg1a9aQmpoKQIUKFdi+fTt79+694s/y8fHB09OTlStXcvbs2VKpX0RKh8KIiJSYkydPkpmZSWRk5GXPNWrUCIfDQWJiIgCvvvoqycnJNGjQgGbNmvHMM8+wZcuW/OO9vLx48803WbJkCaGhoXTp0oW33nqLpKSkUjsfESkZCiMiUiZ06dKF/fv38/nnn9O0aVP+/e9/06pVK/7973/nHzN27Fj27NnDxIkT8fb25oUXXqBRo0bExsZaWLmI3CyFEREpMZUrV8bX15fdu3df9tyuXbuw2+1ERETk7wsJCeHhhx9m5syZJCYm0rx5c15++eUCr6tbty5PP/003333Hdu2bSM7O5t33323pE9FREqQwoiIlBg3NzfuuusuvvnmmwKX3x4/fpwZM2bQuXNnAgMDATh9+nSB1/r7+1OvXj2ysrIAyMzM5Pz58wWOqVu3LgEBAfnHiIhz0qW9IlIsPv/8c5YuXXrZ/pdffpnly5fTuXNn/vznP+Pu7s5nn31GVlYWb731Vv5xjRs35vbbb6d169aEhIQQExPD3LlzGTVqFAB79uyhW7du9O/fn8aNG+Pu7s78+fM5fvw4AwcOLLXzFJHip0t7ReSmXLy092oSExM5efIkEyZMYO3atTgcDtq3b8/rr79Ohw4d8o97/fXXWbhwIXv27CErK4uaNWsyZMgQnnnmGTw8PDh9+jQvvfQSK1asIDExEXd3dxo2bMjTTz/Ngw8+WBqnKiIlRGFERERELKU1IyIiImIphRERERGxlMKIiIiIWEphRERERCylMCIiIiKWUhgRERERSzlF0zOHw8HRo0cJCAjAZrNZXY6IiIgUgmEYpKWlERYWht1+9fEPpwgjR48eLXD/ChEREXEeiYmJhIeHX/V5pwgjAQEBgHkyF+9jISIiImVbamoqERER+d/jV+MUYeTi1ExgYKDCiIiIiJO53hILLWAVERERSymMiIiIiKUURkRERMRSTrFmRERErJWXl0dOTo7VZUgZ4+HhgZub203/HIURERG5KsMwSEpKIjk52epSpIyqUKECVatWvak+YAojIiJyVReDSJUqVfD19VXjSclnGAaZmZmcOHECgGrVqt3wz1IYERGRK8rLy8sPIhUrVrS6HCmDfHx8ADhx4gRVqlS54SkbLWAVEZErurhGxNfX1+JKpCy7+PfjZtYUKYyIiMg1aWpGrqU4/n4ojIiIiIilFEZERESuoVatWkyePLnQx69cuRKbzVaqVyDdfvvtjB07ttTer7gVKYxMnDiRtm3bEhAQQJUqVejbty+7d+++7uvmzJlDw4YN8fb2plmzZixevPiGCxYREbme4vxy3rBhA48//nihj+/YsSPHjh0jKCioWN6/PChSGFm1ahUjR47kl19+Yfny5eTk5HDXXXeRkZFx1df8/PPPPPTQQzz66KPExsbSt29f+vbty7Zt2266+JvlcBis2HkcwzCsLkVEREqRYRjk5uYW6tjKlSsXaRGvp6fnTffdKG+KFEaWLl3K8OHDadKkCS1atGDq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\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABkiUlEQVR4nO3dd3gVddrG8e856Z2EEhIIhE5oIVQBBRWUolEQRQVpVhQQRN2F14KuBd1VxILoWsBVioKCSJOigCBITQi9QyQJnTQgITnz/jEQCDWBJJOT3J/rmmvJlJxn9iSeO7955jc2wzAMRERERCxit7oAERERKd0URkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojInJDJkyYgM1mY82aNVaXIiJOSmFERERELKUwIiIiIpZSGBGRQrd+/Xo6d+6Mv78/vr6+tG/fnpUrV+ba58yZM7z++uvUqlULT09PypYty80338yCBQty9klKSqJ///5UrlwZDw8PQkJCuPfee9m7d28Rn5GIFCRXqwsQkZJt06ZN3HLLLfj7+/OPf/wDNzc3Pv/8c2699VaWLFlCy5YtAXjttdcYNWoUjz/+OC1atCAlJYU1a9awbt067rjjDgC6d+/Opk2bGDx4MOHh4Rw6dIgFCxawf/9+wsPDLTxLEbkRNsMwDKuLEBHnNWHCBPr378/q1atp1qzZJdu7devGnDlz2LJlC9WrVwcgMTGROnXqEBUVxZIlSwBo3LgxlStXZtasWZd9nRMnThAYGMh//vMfXnjhhcI7IREpcrpMIyKFJjs7m/nz59O1a9ecIAIQEhJCz549WbZsGSkpKQCUKVOGTZs2sWPHjst+Ly8vL9zd3Vm8eDHHjx8vkvpFpGgojIhIoTl8+DAnT56kTp06l2yLiIjA4XAQHx8PwL/+9S9OnDhB7dq1adiwIS+++CIbNmzI2d/Dw4N3332XuXPnEhwcTNu2bfn3v/9NUlJSkZ2PiBQOhRERKRbatm3Lrl27+Prrr2nQoAFffvklTZo04csvv8zZZ+jQoWzfvp1Ro0bh6enJK6+8QkREBOvXr7ewchG5UQojIlJoypcvj7e3N9u2bbtk29atW7Hb7YSFheWsCwoKon///kyePJn4+HgaNWrEa6+9luu4GjVq8PzzzzN//nw2btxIZmYm77//fmGfiogUIoURESk0Li4u3Hnnnfz888+5br89ePAgkyZN4uabb8bf3x+Ao0eP5jrW19eXmjVrkpGRAcDJkyc5ffp0rn1q1KiBn59fzj4i4px0a6+IFIivv/6aefPmXbL+tddeY8GCBdx8880888wzuLq68vnnn5ORkcG///3vnP3q1avHrbfeStOmTQkKCmLNmjVMmzaNQYMGAbB9+3bat29Pjx49qFevHq6urkyfPp2DBw/y0EMPFdl5ikjB0629InJDzt3aeyXx8fEcPnyYESNGsHz5chwOBy1btuStt96iVatWOfu99dZbzJw5k+3bt5ORkUHVqlXp3bs3L774Im5ubhw9epSRI0eyaNEi4uPjcXV1pW7dujz//PM88MADRXGqIlJIFEZERETEUuoZEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYyikmPXM4HCQkJODn54fNZrO6HBEREckDwzBITU0lNDQUu/3K4x9OEUYSEhJyPb9CREREnEd8fDyVK1e+4nanCCN+fn6AeTLnnmMhIiIixVtKSgphYWE5n+NX4hRh5NylGX9/f4URERERJ3OtFgs1sIqIiIilFEZERETEUgojIiIiYimn6BkRERFrZWdnc+bMGavLkGLGzc0NFxeXG/4+CiMiInJFhmGQlJTEiRMnrC5FiqkyZcpQsWLFG5oHTGFERESu6FwQqVChAt7e3pp4UnIYhsHJkyc5dOgQACEhIdf9vRRGRETksrKzs3OCSNmyZa0uR4ohLy8vAA4dOkSFChWu+5KNGlhFROSyzvWIeHt7W1yJFGfnfj5upKcoX2Fk1KhRNG/eHD8/PypUqEDXrl3Ztm3bNY+bOnUqdevWxdPTk4YNGzJnzpzrLlhERIqWLs3I1RTEz0e+wsiSJUsYOHAgK1euZMGCBZw5c4Y777yT9PT0Kx7z559/8vDDD/PYY4+xfv16unbtSteuXdm4ceMNFy8iIiLOL19hZN68efTr14/69esTGRnJhAkT2L9/P2vXrr3iMR9++CGdOnXixRdfJCIigjfeeIMmTZrwySef3HDxIiIihS08PJwxY8bkef/Fixdjs9mK9A6kW2+9laFDhxbZ6xW0G2pgTU5OBiAoKOiK+6xYsYJhw4blWtexY0dmzJhxxWMyMjLIyMjI+TolJeVGyhQRkVLm1ltvpXHjxvkKEVeyevVqfHx88rx/69atSUxMJCAg4IZfu7S47gZWh8PB0KFDadOmDQ0aNLjifklJSQQHB+daFxwcTFJS0hWPGTVqFAEBATlLWFjY9ZZ5VQ6HwaItBwvle4uISPFlGAZZWVl52rd8+fL5auJ1d3e/4Xk3SpvrDiMDBw5k48aNTJkypSDrAWDEiBEkJyfnLPHx8QX+Gg6HwZPfruWxb9bww5qC//4iImKNfv36sWTJEj788ENsNhs2m40JEyZgs9mYO3cuTZs2xcPDg2XLlrFr1y7uvfdegoOD8fX1pXnz5ixcuDDX97v4Mo3NZuPLL7+kW7dueHt7U6tWLWbOnJmz/eLLNBMmTKBMmTL8+uuvRERE4OvrS6dOnUhMTMw5Jisri2effZYyZcpQtmxZ/vnPf9K3b1+6du16Xf8fHD9+nD59+hAYGIi3tzedO3dmx44dOdv37dtHdHQ0gYGB+Pj4UL9+/ZybS44fP06vXr0oX748Xl5e1KpVi/Hjx19XHXl1XWFk0KBBzJo1i99//53KlStfdd+KFSty8GDu0YeDBw9SsWLFKx7j4eGBv79/rqWg2e02GoeZQ2iv/ryRbUmpBf4aIiIljWEYnMzMsmQxDCNPNX744Ye0atWKJ554gsTERBITE3NG2IcPH84777zDli1baNSoEWlpaXTp0oVFixaxfv16OnXqRHR0NPv377/qa7z++uv06NGDDRs20KVLF3r16sWxY8euuP/Jkyd57733+Pbbb1m6dCn79+/nhRdeyNn+7rvvMnHiRMaPH8/y5ctJSUm5ajvDtfTr1481a9Ywc+ZMVqxYgWEYdOnSJef224EDB5KRkcHSpUuJi4vj3XffxdfXF4BXXnmFzZs3M3fuXLZs2cK4ceMoV67cddeSF/nqGTEMg8GDBzN9+nQWL15MtWrVrnlMq1atWLRoUa7GmgULFtCqVat8F1vQnrm1Jqv2Hmfp9sM8PXEtvwy6GR8PzQMnInIlp85kU+/VXy157c3/6oi3+7X/Gx0QEIC7uzve3t45f/hu3boVgH/961/ccccdOfsGBQURGRmZ8/Ubb7zB9OnTmTlzJoMGDbria/Tr14+HH34YgLfffpuPPvqIVatW0alTp8vuf+bMGT777DNq1KgBmH/U/+tf/8rZ/vHHHzNixAi6desGwCeffHLd02Ds2LGDmTNnsnz5clq3bg3AxIkTCQsLY8aMGTzwwAPs37+f7t2707BhQwCqV6+ec/z+/fuJioqiWbNmgDkyVNjyNTIycOBAvvvuOyZNmoSfnx9JSUkkJSVx6tSpnH369OnDiBEjcr4eMmQI8+bN4/3332fr1q289tprrFmz5qpvclGx222MebAxFf092X04nf+bHpfn5C0iIs7n3AfsOWlpabzwwgtERERQpkwZfH192bJlyzVHRho1apTzbx8fH/z9/XOmRb8cb2/vnCAC5tTp5/ZPTk7m4MGDtGjRIme7i4sLTZs2zde5nbNlyxZcXV1p2bJlzrqyZctSp04dtmzZAsCzzz7Lm2++SZs2bRg5ciQbNmzI2ffpp59mypQpNG7cmH/84x/8+eef11VHfuRrGGDcuHGA2aV8ofHjx9OvXz/ATFR2+/mM07p1ayZNmsTLL7/M//3f/1GrVi1mzJhx1abXohTk484nPaN48L8r+TkmgZbVytKzZRWryxIRKZa83FzY/K+Olr32jbr4rpgXXniBBQsW8N5771GzZk28vLy4//77yczMvOr3cXNzy/W1zWbD4XDka38r//h9/PHH6dixI7Nnz2b+/PmMGjWK999/n8GDB9O5c2f27dvHnDlzWLBgAe3bt2fgwIG89957hVZPvi/TXMvixYsvWffAAw/wwAMP5OelilSz8CD+2akOb8/Zymu/bKJR5QAaVNItWSIiF7PZbHm6VGI1d3d3srOzr7nf8uXL6devX87lkbS0NPbu3VvI1eUWEBBAcHAwq1evpm3btoD5XKB169bRuHHjfH+/iIgIsrKy+Ouvv3Iu0xw9epRt27ZRr169nP3CwsIYMGAAAwYMYMSIEXzxxRcMHjwYMO8g6tu3L3379uWWW27hxRdfLNQwomfTnPXELdXpEFGBzCwHgyatI+X09c+xLyIi1goPD+evv/5i7969HDly5IqjFrVq1eKnn34iJiaG2NhYevbsedURjsIyePBgRo0axc8//8y2bdsYMmQIx48fv67bg2vVqsW9997LE088wbJly4iNjeWRRx6hUqVK3HvvvQAMHTqUX3/9lT179rBu3Tp+//13IiIiAHj11Vf5+eef2blzJ5s2bWLWrFk52wqLwshZNpuN9x6IpFIZL/YePcnwHzeof0RExEm98MILuLi4UK9ePcqXL3/FHpDRo0cTGBhI69atiY6OpmPHjjRp0qSIq4V//vOfPPzww/Tp04dWrVrh6+tLx44d8fT0vK7vN378eJo2bcrdd99Nq1atMAyDOXPm5Fwuys7OZuDAgURERNCpUydq167Np59+CpijSiNGjKBRo0a0bdsWFxeXQpnG40I2wwk+cVNSUggICCA5OblQbvO9UEz8CR747E/OZBu8fk99+rYOL9TXExEprk6fPs2ePXuoVq3adX8oyvVxOBxERETQo0cP3njjDavLuaqr/Zzk9fNbIyMXaRxWhv/rYg5HvTl7M7HxJ6wtSERESrx9+/bxxRdfsH37duLi4nj66afZs2cPPXv2tLq0IqEwchn9WofTuUFFzmQbDJy0juST6h8REZHCY7fbmTBhAs2bN6dNmzbExcWxcOFCIiIi2L9/P76+vldcrnUbsjMo/i3RFrDZbLx7fyM2JaSw/9hJnp8ayxd9muo5AyIiUijCwsJYvnz5ZbeFhoYSExNzxWNDQ0MLqaqiozByBf6ebnzaqwn3ffonC7cc5Ms/9vBE2+rXPlBERKQAubq6UrNmTavLKFS6THMVDSoF8Gq0eU/2u/O2snbflZ87ICIiItdHYeQaerWsQnRkKFkOg0GT1nMs/eqz8omIiEj+KIxcg81mY9R9DalezofE5NMM+yEGh6PY3w0tIiLiNBRG8sDXw5VPH2mCh6udxdsOM27JLqtLEhERKTEURvKobkV/3rjXfLjf+/O3sXL3UYsrEhERKRkURvLhgWaV6d6kMg4Dnp28nsOpGVaXJCIihSA8PJwxY8bkaV+bzcaMGTMKtZ6STmEkH2w2G290rU+tCr4cSs3gue9jyFb/iIiIyA1RGMknb3dXxj3SBC83F5btPMLHv+2wuiQRERGnpjByHWpW8OPt+8z+kQ8X7WD5ziMWVyQiIuf897//JTQ0FIfDkWv9vffey6OPPsquXbu49957CQ4OxtfXl+bNm7Nw4cICe/24uDhuv/12vLy8KFu2LE8++SRpaWk52xcvXkyLFi3w8fGhTJkytGnThn379gEQGxvLbbfdhp+fH/7+/jRt2pQ1a9YUWG3FlcLIdeoWVZmHW4RhGDBkynoOpZy2uiQRkcJnGJCZbs2Sx4fMP/DAAxw9epTff/89Z92xY8eYN28evXr1Ii0tjS5durBo0SLWr19Pp06diI6OLpBnvKSnp9OxY0cCAwNZvXo1U6dOZeHChQwaNAiArKwsunbtSrt27diwYQMrVqzgySefzHncSK9evahcuTKrV69m7dq1DB8+HDc3txuuq7jTdPA3YGR0fWLik9mSmMLgyeuZ+HhLXF2U70SkBDtzEt626Fko/5cA7j7X3C0wMJDOnTszadIk2rdvD8C0adMoV64ct912G3a7ncjIyJz933jjDaZPn87MmTNzQsP1mjRpEqdPn+Z///sfPj5mrZ988gnR0dG8++67uLm5kZyczN13302NGjUAiIiIyDl+//79vPjii9StWxeAWrVq3VA9zkKfnDfA082FsT2j8PVw5a89x/hg4XarSxIREcwRhh9//JGMDPOux4kTJ/LQQw9ht9tJS0vjhRdeICIigjJlyuDr68uWLVsKZGRky5YtREZG5gQRgDZt2uBwONi2bRtBQUH069ePjh07Eh0dzYcffkhiYmLOvsOGDePxxx+nQ4cOvPPOO+zaVTrmtdLIyA2qXt6Xd7o3ZNCk9Yz9fRfNwoO4rU4Fq8sSESkcbt7mCIVVr51H0dHRGIbB7Nmzad68OX/88QcffPABAC+88AILFizgvffeo2bNmnh5eXH//feTmVk0j/sYP348zz77LPPmzeP777/n5ZdfZsGCBdx000289tpr9OzZk9mzZzN37lxGjhzJlClT6NatW5HUZhWNjBSAuxuF0qdVVQCGfR9DwolTFlckIlJIbDbzUokVy9m+irzw9PTkvvvuY+LEiUyePJk6derQpEkTAJYvX06/fv3o1q0bDRs2pGLFiuzdu7dA/u+JiIggNjaW9PT0nHXLly/HbrdTp06dnHVRUVGMGDGCP//8kwYNGjBp0qScbbVr1+a5555j/vz53HfffYwfP75AaivOFEYKyEt3RdCwUgDHT55h0KR1nMl2XPsgEREpNL169WL27Nl8/fXX9OrVK2d9rVq1+Omnn4iJiSE2NpaePXtecufNjbymp6cnffv2ZePGjfz+++8MHjyY3r17ExwczJ49exgxYgQrVqxg3759zJ8/nx07dhAREcGpU6cYNGgQixcvZt++fSxfvpzVq1fn6ikpqRRGCoiHqwtjezbBz9OVdftP8J9ft1ldkohIqXb77bcTFBTEtm3b6NmzZ8760aNHExgYSOvWrYmOjqZjx445oyY3ytvbm19//ZVjx47RvHlz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kZSUZBiGYYSGhhovvfTSFWsAjJdffjnn67S0NAMw5s6daxiGYURHRxv9+/cvmBMWkSKlnhERyZPbbruNcePG5VoXFBSU8+9WrVrl2taqVStiYmIA2LJlC5GRkfj4+ORsb9OmDQ6Hg23btmGz2UhISKB9+/ZXraFRo0Y5//bx8cHf359Dhw4B8PTTT9O9e3fWrVvHnXfeSdeuXWnduvV1nauIFC2FERHJEx8fn0sumxQULy+vPO3n5uaW62ubzYbD4QCgc+fO7Nu3jzlz5rBgwQLat2/PwIEDee+99wq8XhEpWOoZEZECsXLlyku+joiIACAiIoLY2FjS09Nzti9fvhy73U6dOnXw8/MjPDycRYsW3VAN5cuXp2/fvnz33XeMGTOG//73vzf0/USkaGhkRETyJCMjg6SkpFzrXF1dc5pEp06dSrNmzbj55puZOHEiq1at4quvvgKgV69ejBw5kr59+/Laa69x+PBhBg8eTO/evQkODgbgtddeY8CAAVSoUIHOnTuTmprK8uXLGTx4cJ7qe/XVV2natCn169cnIyODWbNm5YQhESneFEZEJE/mzZtHSEhIrnV16tRh69atgHmny5QpU3jmmWcICQlh8uTJ1KtXDwBvb29+/fVXhgwZQvPmzfH29qZ79+6MHj0653v17duX06dP88EHH/DCCy9Qrlw57r///jzX5+7uzogRI9i7dy9eXl7ccsstTJkypQDOXEQKm80wDMPqIkTEudlsNqZPn07Xrl2tLkVEnJB6RkRERMRSCiMiIiJiKfWMiMgN09VeEbkRGhkRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUv9P8r7ZKBzSMsbAAAAAElFTkSuQmCC\n" }, "metadata": {} }, @@ -3400,7 +3446,7 @@ "text/plain": [ "
" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABh/UlEQVR4nO3dd3xUVf7/8dekzKSHQAoBQgIpFBFQmvQuiLJily9KsysuyKrArmL7KVYEEcWGWHCxK7soChFEisKCKEgvIbSQhJJK2sz9/TEQCEkgCUluJnk/H495hDtz7sznZhjmzTnnnmsxDMNARERExCRuZhcgIiIidZvCiIiIiJhKYURERERMpTAiIiIiplIYEREREVMpjIiIiIipFEZERETEVAojIiIiYiqFERERETGVwoiIiIiYSmFEpA574403sFgsdOnSxexSRKQOs+jaNCJ1V/fu3Tl06BAJCQns3LmTmJgYs0sSkTpIPSMiddTevXtZvXo106dPJyQkhPnz55tdUomysrLMLkFEqpjCiEgdNX/+fIKCgrj66qu58cYbSwwjJ06c4KGHHiIqKgqbzUaTJk0YOXIkqamphW1ycnJ48skniYuLw8vLi/DwcK6//np2794NwPLly7FYLCxfvrzIcyckJGCxWJg3b17hfaNHj8bPz4/du3czZMgQ/P39GTFiBAC//PILN910E02bNsVmsxEREcFDDz3EyZMni9W9bds2br75ZkJCQvD29qZFixb861//AmDZsmVYLBa+/vrrYvt98sknWCwW1qxZU+7fp4hUnIfZBYiIOebPn8/111+P1Wpl+PDhvPnmm6xbt45OnToBkJmZSc+ePdm6dStjx47l8ssvJzU1lYULF3LgwAGCg4Ox2+1cc801xMfHc+uttzJ+/HgyMjJYsmQJmzdvJjo6utx1FRQUMGjQIHr06MHLL7+Mj48PAJ9//jnZ2dncd999NGjQgLVr1zJr1iwOHDjA559/Xrj/n3/+Sc+ePfH09OTuu+8mKiqK3bt385///Idnn32WPn36EBERwfz587nuuuuK/U6io6Pp2rXrRfxmRaTcDBGpc/73v/8ZgLFkyRLDMAzD4XAYTZo0McaPH1/YZurUqQZgfPXVV8X2dzgchmEYxty5cw3AmD59eqltli1bZgDGsmXLijy+d+9eAzDef//9wvtGjRplAMbkyZOL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VyQiIlI3KIycMv+3fSQeyybU38YdPZuZXY6IiEidoTACpOfkM+unXQBMGBCHj9XD5IpERETqDoUR4K2fd3MsK4/oEF9u7qhl30VERKpTnQ8jSWk5vLdyLwCPDm6Jh3ud/5WIiIhUqzr/zTtj6Q5y8h10iAziytZhZpcjIiJS59TpMLLzSAaf/W8/AP8c0lLLvouIiJigToeRFxZvx2HAoEvC6BBZ3+xyRERE6qQ6G0ZyC+wAuLtZeHRwS5OrERERqbvq7DmsNg933h3VkX1Hs4hsoGXfRUREzFJne0ZOUxARERExV50PIyIiImIuhRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMiIiJiKoURERERMZXCiIiIiJhKYURERERMpTAiIiIipvIwu4CyMAwDgPT0dJMrERERkbI6/b19+nu8NC4RRjIyMgCIiIgwuRIREREpr4yMDAIDA0t93GJcKK7UAA6Hg0OHDuHv74/FYqm0501PTyciIoL9+/cTEBBQac9bk9T2Y9Txub7afow6PtdX24+xKo/PMAwyMjJo1KgRbm6lzwxxiZ4RNzc3mjRpUmXPHxAQUCv/gp2tth+jjs/11fZj1PG5vtp+jFV1fOfrETlNE1hFRETEVAojIiIiYqo6HUZsNhtPPPEENpvN7FKqTG0/Rh2f66vtx6jjc321/RhrwvG5xARWERERqb3qdM+IiIiImE9hREREREylMCIiIiKmUhgRERERU9X6MDJ79myioqLw8vKiS5curF279rztP//8c1q2bImXlxeXXnop3333XTVVWnHlOcZ58+ZhsViK3Ly8vKqx2vJZsWIFQ4cOpVGjRlgsFr755psL7rN8+XIuv/xybDYbMTExzJs3r8rrrKjyHt/y5cuLvX8Wi4WkpKTqKbicpk2bRqdOnfD39yc0NJRhw4axffv2C+7nKp/Dihyfq30G33zzTdq2bVu4IFbXrl35/vvvz7uPq7x/UP7jc7X371zPP/88FouFCRMmnLdddb+HtTqMfPrpp0ycOJEnnniCDRs20K5dOwYNGkRycnKJ7VevXs3w4cO54447+P333xk2bBjDhg1j8+bN1Vx52ZX3GMG5yt7hw4cLb/v27avGissnKyuLdu3aMXv27DK137t3L1dffTV9+/Zl48aNTJgwgTvv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rsjjqampXHfddfj4+BAbG8vChQsLHzt+/DgjRowgJCQEb29vYmNji4UnEamZFEZEpFI8/vjj3HDDDfzxxx+MGDGCW2+9la1btwKQlZXFoEGDCAoKYt26dXz++ecsXbq0SNh48803eeCBB7j77rvZtGkTCxcuJCYmpshrPPXUU9x88838+eefDBkyhBEjRnDs2LHC19+yZQvff/89W7du5c033yQ4OLj6fgEiUnFVehk+EakVRo0aZbi7uxu+vr5Fbs8++6xhGM6r1957771F9unSpYtx3333GYZhGG+//bYRFBRkZGZmFj6+aNEiw83NzUhKSjIMwzAaNWpk/Otf/yq1BsB47LHHCrczMzMNwPj+++8NwzCMoUOHGmPGjKmcAxaRaqU5IyJSJn379uXNN98scl/9+vUL/9y1a9cij3Xt2pWNGzcCsHXrVtq1a4evr2/h4927d8fhcLB9+3YsFguHDh2if//+562hbdu2hX/29fUlICCA5ORkAO677z5uuOEGNmzYwJVXXsmwYcPo1q1bhY5VRKqXwoiIlImvr2+xYZPK4u3tXaZ2np6eRbYtFgsOhwOAq666in379vHdd9+xZMkS+vfvzwMPPMDLL79c6fWKSOXSnBERqRS//vprse1WrVoB0KpVK/744w+ysrIKH1+1ahVubm60aNECf39/oqKiiI+Pv6gaQkJCGDVqFB9//DEzZszg7bffvqjnE5HqoZ4RESmT3NxckpKSitzn4eFROEn0888/p2PHjvTo0YP58+ezdu1a3nvvPQBGjBjBE088wahRo3jyySdJSUnhwQcf5PbbbycsLAyAJ598knvvvZfQ0FCuuuoqMjIyWLVqFQ8++GCZ6ps6dSodOnTgkksuITc3l//+97+FYUhEajaFEREpk8WLFxMeHl7kvhYtWrBt2zbAeabLggULuP/++wkPD+ff//43rVu3BsDHx4cffviB8ePH06lTJ3x8fLjhhhuYPn164XONGjWKnJwcXn31VR5++GGCg4O58cYby1yf1WplypQpJCQk4O3tTc+ePVmwYEElHLmIVDWLYRiG2UWIiGuzWCx8/fXXDBs2zOxSRMQFac6IiIiImEphREREREylOSMictE02isiF0M9IyIiImIqhRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMiIiJiqv8PX9t6AYj2iwMAAAAASUVORK5CYII=\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABe+0lEQVR4nO3dd3hUVf7H8fekTXqBFAIEQid0qYKFqvQFKyIroGsHRVlUWEFUVLAsooKirqirKP7sKE2IoguiIEUpoZfQkhBKep25vz8GBkISSELCzSSf1/PMQ+7MuTPfm8k4H88591yLYRgGIiIiIiZxM7sAERERqd4URkRERMRUCiMiIiJiKoURERERMZXCiIiIiJhKYURERERMpTAiIiIiplIYEREREVMpjIiIiIipFEZERETEVAojItXYm2++icVioUuXLmaXIiLVmEXXphGpvq666iqOHDnC/v372bVrF40bNza7JBGphtQzIlJN7du3j19//ZWZM2cSFhbG/PnzzS6pSBkZGWaXICIVTGFEpJqaP38+ISEhDBw4kJtvvrnIMHLq1CkeffRRoqOjsVqt1K1bl5EjR5KcnOxsk52dzdNPP03Tpk3x9vYmMjKSG2+8kT179gCwcuVKLBYLK1euLPDc+/fvx2Kx8MEHHzjvGz16NP7+/uzZs4cBAwYQEBDAiBEjAPjf//7HLbfcQr169bBarURFRfHoo4+SlZVVqO7t27dz6623EhYWho+PD82aNePJJ58E4KeffsJisfD1118X2u+TTz7BYrGwZs2aUv8+RaTsPMwuQETMMX/+fG688Ua8vLwYPnw4b731FuvWraNTp04ApKenc8011xAXF8ddd91F+/btSU5OZuHChRw6dIjQ0FBsNhuDBg0iNjaW2267jXHjxpGWlsby5cvZsmULjRo1KnVd+fn59O3bl6uvvppXXnkFX19fAD7//HMyMzN54IEHqFmzJmvXruWNN97g0KFDfP755879//rrL6655ho8PT259957iY6OZs+ePXz33Xc8//zz9OjRg6ioKObPn88NN9xQ6HfSqFEjunbtegm/WREpNUNEqp0//vjDAIzly5cbhmEYdrvdqFu3rjFu3Dhnm6eeesoAjK+++qrQ/na73TAMw5g3b54BGDNnziy2zU8//WQAxk8//VTg8X379hmA8f777zvvGzVqlAEYEydO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xd+qfCYiUlojRozgyy+/JCcnB4D58+dz22234ebmRnp6OhMmTCAmJobg4GD8/f2Ji4src8/IihUr6N27N3Xq1CEgIIA77riD48ePk5mZCZztGSlKXFwcOTk5xT5eUl5eXrRp06bAfYmJidxzzz00adKEoKAgAgMDSU9Pdx7npk2bqFu3rjOInK9z5860bNmSDz/8EICPP/6Y+vXrc+21115Sra6g2n/zvha7i9TsfJrXCuCWjlFmlyMicpanr6OHwqzXLoXBgwdjGAaLFi2iU6dO/O9//+PVV18FYMKECSxfvpxXXnmFxo0b4+Pjw80330xubm6py9q/fz+DBg3igQce4Pnnn6dGjRqsWrWKf/zjH+Tm5uLr64uPT/FD7Rd6DBxDQECBK9fm5eUV+Tznn3E5atQojh8/zmuvvUb9+vWxWq107drVeZwXe21w9I7MmTOHiRMn8v7773PnnXdWizM7q3XPyJ5j6Xz82wEAJg9sgbtb1X/DRcSFWCyOoRIzbqX8AvT29ubGG29k/vz5fPrppzRr1oz27dsDjsmko0eP5oYbbqB169bUqlXLORm0tNavX4/dbuff//43V155JU2bNuXIkYKBrU2bNsTGxha5f5MmTfDx8Sn28bCwMACOHj3qvG/Tpk0lqm316tU8/PDDDBgwgJYtW2K1WklOTi5Q16FDh9i5c2exz/H3v/+dAwcO8Prrr7Nt2zbnUFJVV63DyPTFceTbDXo3D+fqJqFmlyMi4tJGjBjBokWLmDdvHiNGjHDe36RJE7766is2bdrEn3/+ye23317mU2EbN25MXl4eb7zxBnv37uWjjz5i7ty5BdpMmjSJdevW8eCDD/LXX3+xfft23nrrLZKTk/H29uaJJ57g8ccf57///S979uzht99+47333nM+f1RUFE8//TS7du1i0aJF/Pvf/y5RbU2aNOGjjz4iLi6O33//nREjRhToDenevTvXXnstN910E8uXL2ffvn0sWbKEpUuXOtuEhIRw44038thjj3H99ddTt27dMv2eXE21DSPZeTbcLBY83CxMGhBjdjkiIi6vV69e1KhRgx07dnD77bc77585cyYhISF069aNwYMH07dvX2evSWm1bduWmTNn8uKLL9KqVSvmz5/P9OnTC7Rp2rQpP/zwA3/++SedO3ema9eufPvtt3h4OGYmTJkyhX/+85889dRTxMTEMGzYMJKSkgDw9PTk008/Zfv27bRp04YXX3yR5557rkS1vffee5w8eZL27dtzxx138PDDDxMeHl6gzZdffkmnTp0YPnw4LVq04PHHH3ee5XPGmSGnu+66q0y/I1dkMYxSnL9lktTUVIKCgkhJSSEwMLBcn/vA8Qzq1yzZjHERkYqUnZ3Nvn37aNCgAd7e3maXIyb56KOPePTRRzly5AheXl5ml3NRF/q7Len3d7WfwKogIiIilUFmZiZHjx5lxowZ3HfffS4RRMpLtR2mERGRymf+/Pn4+/sXeTuzVkhV9dJLL9G8eXNq1arFpEmTzC7nsqr2wzQiIpWFhmkci5IlJiYW+Zinpyf169e/zBXJxWiYRkREqpSAgIAqv/S5FKZhGhERETGVwoiISCXjAqPnIk7l8feqMCIiUkl4enoCOK+xIuIKzvy9nvn7LQvNGRERqSTc3d0JDg52LsDl6+tbLa5LIq7JMAwyMzNJSkoiODgYd3f3Mj+XwoiISCVSq1YtAGcgEansgoODnX+3ZaUwIiJSiVgsFiIjIwkPDy/yarEilYmnp+cl9YicoTAiIlIJubu7l8t/5EVcgSawioiIiKkURkRERMRUCiMiIiJiKpeYM3JmQZXU1FSTKxEREZGSOvO9fbGF0VwijKSlpQEQFRVlciUiIiJSWmlpaQQFBRX7uEtctddut3PkyBECAgLKdQGg1NRUoqKiOHjwYJW9GnBVP0Ydn+ur6seo43N9Vf0YK/L4DMMgLS2N2rVr4+ZW/MwQl+gZcXNzo27duhX2/IGBgVXyD+xcVf0YdXyur6ofo47P9VX1Y6yo47tQj8gZmsAqIiIiplIYEREREVNV6zBitVqZOnUqVqvV7FIqTFU/Rh2f66vqx6jjc31V/Rgrw/G5xARWERERqbqqdc+IiIiImE9hREREREylMCIiIiKmUhgRERERU1X5MDJnzhyio6Px9vamS5curF279oLtP//8c5o3b463tzetW7dm8eLFl6nSsivNMX7wwQdYLJYCN29v78tYben88ssvDB48mNq1a2OxWPjmm28uus/KlStp3749VquVxo0b88EHH1R4nWVV2uNbuXJloffPYrGQkJBweQoupenTp9OpUycCAgIIDw9n6NCh7Nix46L7ucrnsCzH52qfwbfeeos2bdo4F8Tq2rUrS5YsueA+rvL+QemPz9Xev/PNmDEDi8XCI488csF2l/s9rNJh5LPPPmP8+PFMnTqVDRs20LZtW/r27UtSUlKR7X/99VeGDx/OP/7xDzZu3MjQoUMZOnQoW7ZsucyVl1xpjxEcq+wdPXrUeTtw4MBlrLh0MjIyaNu2LXPmzClR+3379jFw4EB69uzJpk2beOSRR7j77rtZtmxZBVdaNqU9vjN27NhR4D0MDw+voAovzc8//8yYMWP47bffWL58OXl5eVx//fVkZGQUu48rfQ7LcnzgWp/BunXrMmPGDNavX88ff/xBr169GDJkCFu3bi2yvSu9f1D64wPXev/OtW7dOt5++23atGlzwXamvIdGFda5c2djzJgxzm2bzWbUrl3bmD59epHtb731VmPgwIEF7uvSpYtx3333VWidl6K0x/j+++8bQUFBl6m68gUYX3/99QXbPP7440bLli0L3Dds2DCjb9++FVhZ+SjJ8f30008GYJw8efKy1FTekpKSDMD4+eefi23jip/DM0pyfK78GTwjJCTE+M9//lPkY678/p1xoeNz1fcvLS3NaNKkibF8+XKje/fuxrhx44pta8Z7WGV7RnJzc1m/fj19+vRx3ufm5kafPn1Ys2ZNkfusWbOmQHuAvn37FtvebGU5RoD09HTq169PVFTURf8PwNW42ntYVu3atSMyMpLrrruO1atXm11OiaWkpABQo0aNYtu48ntYkuMD1/0M2mw2FixYQEZGBl27di2yjSu/fyU5PnDN92/MmDEMHDiw0HtTFDPewyobRpKTk7HZbERERBS4PyIiotjx9YSEhFK1N1tZjrFZs2bMmzePb7/9lo8//hi73U63bt04dOjQ5Si5whX3HqamppKVlWVSVeUnMjKSuXPn8uWXX/Lll18SFRVFjx492LBhg9mlXZTdbueRRx7hqquuolWrVsW2c7XP4RklPT5X/Axu3rwZf39/rFYr999/P19//TUtWrQosq0rvn+lOT5XfP8WLFjAhg0bmD59eonam/EeusRVe6X8dO3atUDi79atGzExMbz99ttMmzbNxMqkJJo1a0azZs2c2926dWPPnj28+uqrfPTRRyZWdnFjxoxhy5YtrFq1yuxSKkRJj88VP4PNmjVj06ZNpKSk8MUXXzBq1Ch+/vnnYr+wXU1pjs/V3r+DBw8ybtw4li9fXqkn2lbZMBIaGoq7uzuJ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\n" }, "metadata": {} } @@ -3425,20 +3471,20 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 39, "metadata": { "id": "Yo5uxm9Du_kO", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "36cf3923-57ec-4ecd-9ce5-a0dc8286b501" + "outputId": "bde85613-af57-4728-dfc7-ee9075530232" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "79/79 [==============================] - 3s 38ms/step - loss: 0.6795 - accuracy: 0.8216\n" + "79/79 [==============================] - 5s 59ms/step - loss: 0.6417 - accuracy: 0.8416\n" ] } ], @@ -3459,24 +3505,24 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 40, "metadata": { "id": "8oF-zsM_wMVQ", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "efd0b7ea-5d36-4d6e-885b-ce9f5f539993" + "outputId": "6817ec91-6a59-4010-8704-64c39e529a5d" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "True" + "False" ] }, "metadata": {}, - "execution_count": 37 + "execution_count": 40 } ], "source": [ @@ -3497,13 +3543,13 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 41, "metadata": { "id": "0u4N8g9mgBI0", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "c74f29fa-3124-47ac-95b6-292729bf1f53" + "outputId": "fdedf7de-60ae-4917-e781-94a0b160122d" }, "outputs": [ { @@ -3514,7 +3560,7 @@ ] }, "metadata": {}, - "execution_count": 38 + "execution_count": 41 } ], "source": [ @@ -3525,20 +3571,20 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 42, "metadata": { "id": "6srnISjohK8N", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "96c2e390-a8bf-4775-d387-ed8227d89a28" + "outputId": "ef412730-a43c-4cf2-ab04-0e81d8c61900" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "[0. 0.]\n" + "[5.96046448e-08 0.00000000e+00]\n" ] } ], @@ -3573,28 +3619,28 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 43, "metadata": { "id": "EfsHnkOIrx9K", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "93d940b1-edd4-45d2-cd41-2ad8a8fcad97" + "outputId": "816fdd60-3501-49c3-fa76-c90e3474d0c6" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "[,\n", - " ,\n", - " ,\n", - " ,\n", - " ]" + "[,\n", + " ,\n", + " ,\n", + " ,\n", + " ]" ] }, "metadata": {}, - "execution_count": 40 + "execution_count": 43 } ], "source": [ @@ -3613,24 +3659,24 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 44, "metadata": { "id": "QpzkIVuqtbXC", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "49a6015b-2e9f-45b0-f20f-08cebd4b947f" + "outputId": "c7a2d524-8a53-4a32-b31e-82a288f543f9" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Layer number: 0 | Layer name: input_layer | Layer type: | Trainable? True\n", - "Layer number: 1 | Layer name: data_augmentation | Layer type: | Trainable? True\n", - "Layer number: 2 | Layer name: efficientnetv2-b0 | Layer type: | Trainable? False\n", - "Layer number: 3 | Layer name: global_average_pooling_layer | Layer type: | Trainable? True\n", - "Layer number: 4 | Layer name: output_layer | Layer type: | Trainable? True\n" + "Layer number: 0 | Layer name: input_layer | Layer type: | Trainable? True\n", + "Layer number: 1 | Layer name: data_augmentation | Layer type: | Trainable? True\n", + "Layer number: 2 | Layer name: efficientnetv2-b0 | Layer type: | Trainable? False\n", + "Layer number: 3 | Layer name: global_average_pooling_layer | Layer type: | Trainable? True\n", + "Layer number: 4 | Layer name: output_layer | Layer type: | Trainable? True\n" ] } ], @@ -3654,13 +3700,13 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 45, "metadata": { "id": "w55Z7qFYsUfy", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "31079e50-0c46-4be0-8208-2749a672b7a3" + "outputId": "f48d3fce-ad2e-4d0c-93e9-0d54bb1d96a8" }, "outputs": [ { @@ -3673,21 +3719,22 @@ "=================================================================\n", " input_layer (InputLayer) [(None, 224, 224, 3)] 0 \n", " \n", - " data_augmentation (Sequenti (None, None, None, 3) 0 \n", - " al) \n", + " data_augmentation (Sequent (None, None, None, 3) 0 \n", + " ial) \n", " \n", - " efficientnetv2-b0 (Function (None, None, None, 1280) 5919312 \n", - " al) \n", + " efficientnetv2-b0 (Functio (None, None, None, 1280 5919312 \n", + " nal) ) \n", " \n", - " global_average_pooling_laye (None, 1280) 0 \n", - " r (GlobalAveragePooling2D) \n", + " global_average_pooling_lay (None, 1280) 0 \n", + " er (GlobalAveragePooling2D \n", + " ) \n", " \n", " output_layer (Dense) (None, 10) 12810 \n", " \n", "=================================================================\n", - "Total params: 5,932,122\n", - "Trainable params: 12,810\n", - "Non-trainable params: 5,919,312\n", + "Total params: 5932122 (22.63 MB)\n", + "Trainable params: 12810 (50.04 KB)\n", + "Non-trainable params: 5919312 (22.58 MB)\n", "_________________________________________________________________\n" ] } @@ -3720,9 +3767,9 @@ "height": 35 }, "id": "dHBMG7TMAvzi", - "outputId": "fe4bc3ee-12c5-44d9-cd0a-a9dc0e73330b" + "outputId": "5892eff3-4eb6-4163-903e-9c244a35930c" }, - "execution_count": 43, + "execution_count": 46, "outputs": [ { "output_type": "execute_result", @@ -3735,19 +3782,19 @@ } }, "metadata": {}, - "execution_count": 43 + "execution_count": 46 } ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 47, "metadata": { "id": "dgSn6yzywHd7", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "9a6a20b2-3692-4da2-823f-9bb4e159a8a3" + "outputId": "19196210-dcf1-4ac9-ebdb-ec3f7c76eba4" }, "outputs": [ { @@ -3776,13 +3823,13 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 48, "metadata": { "id": "WGSvBXM7jKIm", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "d62e72f5-0789-4d5a-98c4-b6ec30039bb3" + "outputId": "8e9b23ec-4c5e-47e6-a94a-73258f0b617e" }, "outputs": [ { @@ -4097,7 +4144,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 49, "metadata": { "id": "0RN8aH82i__f" }, @@ -4127,13 +4174,13 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 50, "metadata": { "id": "pyKYo9yB7Xjq", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "2d441f7a-6c3c-4543-c6e9-eaf0fa9feab9" + "outputId": "b68dc0bb-0804-429c-9234-cf543b9893b3" }, "outputs": [ { @@ -4442,13 +4489,13 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 51, "metadata": { "id": "tbgcdnJIjicF", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "1bef0664-4c52-4c89-870e-6f9df39a051c" + "outputId": "423ad68e-d05a-4f9f-8eb2-33b54b680814" }, "outputs": [ { @@ -4480,32 +4527,32 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 52, "metadata": { "id": "uH6XM4ENjfRn", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "c92bd601-a47d-4b77-8604-9888474b2956" + "outputId": "5b7c8328-4018-4251-a7cc-9f923aa35573" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Saving TensorBoard log files to: transfer_learning/10_percent_fine_tune_last_10/20230818-014212\n", + "Saving TensorBoard log files to: logs/fit/\n", "Epoch 5/10\n", - "24/24 [==============================] - 19s 333ms/step - loss: 0.7145 - accuracy: 0.8080 - val_loss: 0.5455 - val_accuracy: 0.8355\n", + "24/24 [==============================] - 34s 988ms/step - loss: 0.7075 - accuracy: 0.8067 - val_loss: 0.4608 - val_accuracy: 0.8668\n", "Epoch 6/10\n", - "24/24 [==============================] - 6s 228ms/step - loss: 0.6243 - accuracy: 0.8133 - val_loss: 0.5008 - val_accuracy: 0.8372\n", + "24/24 [==============================] - 20s 839ms/step - loss: 0.6132 - accuracy: 0.8173 - val_loss: 0.4148 - val_accuracy: 0.8750\n", "Epoch 7/10\n", - "24/24 [==============================] - 5s 199ms/step - loss: 0.5388 - accuracy: 0.8333 - val_loss: 0.4581 - val_accuracy: 0.8520\n", + "24/24 [==============================] - 15s 598ms/step - loss: 0.5547 - accuracy: 0.8240 - val_loss: 0.4178 - val_accuracy: 0.8651\n", "Epoch 8/10\n", - "24/24 [==============================] - 5s 215ms/step - loss: 0.5132 - accuracy: 0.8427 - val_loss: 0.4846 - val_accuracy: 0.8487\n", + "24/24 [==============================] - 16s 681ms/step - loss: 0.5028 - accuracy: 0.8413 - val_loss: 0.3980 - val_accuracy: 0.8799\n", "Epoch 9/10\n", - "24/24 [==============================] - 5s 191ms/step - loss: 0.4753 - accuracy: 0.8467 - val_loss: 0.4536 - val_accuracy: 0.8569\n", + "24/24 [==============================] - 15s 641ms/step - loss: 0.4755 - accuracy: 0.8573 - val_loss: 0.4142 - val_accuracy: 0.8766\n", "Epoch 10/10\n", - "24/24 [==============================] - 6s 225ms/step - loss: 0.4245 - accuracy: 0.8653 - val_loss: 0.4656 - val_accuracy: 0.8470\n" + "24/24 [==============================] - 16s 667ms/step - loss: 0.4454 - accuracy: 0.8520 - val_loss: 0.3903 - val_accuracy: 0.8766\n" ] } ], @@ -4519,7 +4566,7 @@ " validation_data=test_data,\n", " initial_epoch=history_10_percent_data_aug.epoch[-1], # start from previous last epoch\n", " validation_steps=int(0.25 * len(test_data)),\n", - " callbacks=[create_tensorboard_callback(\"transfer_learning\", \"10_percent_fine_tune_last_10\")]) # name experiment appropriately" + " callbacks=[create_tensorboard_callback(\"10_percent_fine_tune_last_10\")]) # name experiment appropriately" ] }, { @@ -4535,20 +4582,20 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 53, "metadata": { "id": "zbFET5Pj8U3F", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "f75265d6-fd8d-4fa5-9a6b-3aeeda2fd1e5" + "outputId": "cf48cfb5-dab5-4693-ed03-ac518582e4d6" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "79/79 [==============================] - 3s 31ms/step - loss: 0.4526 - accuracy: 0.8504\n" + "79/79 [==============================] - 5s 59ms/step - loss: 0.4296 - accuracy: 0.8620\n" ] } ], @@ -4570,7 +4617,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 54, "metadata": { "id": "8du2ihQNkm4W" }, @@ -4631,14 +4678,14 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 55, "metadata": { "id": "BJANCd2e5Olt", "colab": { "base_uri": "https://localhost:8080/", - "height": 791 + "height": 790 }, - "outputId": "93444c8e-193d-4a70-d4ac-0c8d729faf16" + "outputId": "f0348338-68de-4599-c760-023f2176c2e7" }, "outputs": [ { @@ -4647,7 +4694,7 @@ "text": [ "5\n", "11\n", - "[0.335999995470047, 0.6413333415985107, 0.7253333330154419, 0.7706666588783264, 0.7839999794960022, 0.8080000281333923, 0.8133333325386047, 0.8333333134651184, 0.8426666855812073, 0.846666693687439, 0.8653333187103271]\n" + "[0.3413333296775818, 0.6453333497047424, 0.7493333220481873, 0.7706666588783264, 0.7960000038146973, 0.8066666722297668, 0.8173333406448364, 0.8240000009536743, 0.8413333296775818, 0.8573333621025085, 0.8519999980926514]\n" ] }, { @@ -4656,7 +4703,7 @@ "text/plain": [ "
" ], - "image/png": "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bX9f6gT4ERTgR1htf+rW8SfY3xezpfpOcqCAKiIiUhZKEmKl4plMjq4WVp/zT0JxtrwcxwNf6SccQbW4EGpxu2BXCRPgdnrxL2Z7dl4+R5KyiDtV0H3A0YUgg7iTGaRm50E6juUInPUGN4uZerUcD28V7gN75gEuH3fXEv8RVUYKqCIiIiKFubiBT4hjKSdWFwsRtb2IqO11zja73U5yZu7p4JpZJMTGncrgSFImOfk29h1PP+8EBwGersU+uFW/liehfu6VfugsBVQRERGRSsRkMuHv6Ya/pxvt6vmfsz0v38bR5CxnYI07lcHBxExniD2VnnN6qtlkthxKPud4i9lEmL+7M7De2iWcTvUDKuCTlZwCqoiIiEgV4mIxO1tGexSzPS07zxlei4TY00E2J8/GwVOZHDyVyUpO0qtJHahf4R/jghRQRURERKoRb6sLLUN9aRl67pPyNpudY6nZRUJr27qVbyY1BVQRERGRGsJsNhHi506InzvdImoZXc55Ve4esiIiIiJS4yigioiIiEilooAqIiIiIpWKAqqIiIiIVCoKqCIiIiJSqSigioiIiEilooAqIiIiIpWKAqqIiIiIVCoKqCIiIiJSqSigioiIiEiloqlORaTK8XDxYO0da52vRUSkelFAFZEqx2Qy4enqaXQZIiJSTnSLX0REREQqFQVUEREREalUFFBFREREpFJRQBURERGRSkUBVUREREQqFQVUEREREalUFFBFREREpFJRQBURERGRSkUBVUREREQqlWoxk5TdbgcgJSXF4EpEREREpDhnctqZ3HYh1SKgpqamAhAeHm5wJSIiIiJyIampqfj5+V1wH5O9JDG2krPZbBw5cgQfHx9MJlOFXDMlJYXw8HAOHjyIr69vhVxTyo6+f1WfvodVn76HVZ++h1VbRX//7HY7qamphIWFYTZfuJdptWhBNZvN1KtXz5Br+/r66i9lFabvX9Wn72HVp+9h1afvYdVWkd+/i7WcnqGHpERERESkUlFAFREREZFKRQH1ElmtVqZMmYLVajW6FLkE+v5VffoeVn36HlZ9+h5WbZX5+1ctHpISERERkepDLagiIiIiUqkooIqIiIhIpaKAKiIiIiKVigKqiIiIiFQqCqiX4J133qFhw4a4u7sTGRnJunXrjC5JSmjatGl07doVHx8fgoKCGDp0KDt37jS6LLlE//nPfzCZTIwbN87oUqQUDh8+zF133UVgYCAeHh60bduWDRs2GF2WlFB+fj6TJk0iIiICDw8PGjduzPPPP1+i+dXFGH/88QdDhgwhLCwMk8nEggULimy32+1MnjyZ0NBQPDw86NevH7t37zam2NMUUEtp7ty5jB8/nilTprBp0ybat2/PgAEDOHbsmNGlSQksX76cMWPGsGbNGhYtWkRubi7/+Mc/SE9PN7o0KaX169fz/vvv065dO6NLkVJITEykZ8+euLq68ssvv7Bt2zZef/11AgICjC5NSujll1/mvffeY+bMmWzfvp2XX36ZV155hbffftvo0uQ80tPTad++Pe+8806x21955RVmzJjBrFmzWLt2LV5eXgwYMICsrKwKrrSAhpkqpcjISLp27crMmTMBsNlshIeH8/DDD/PUU08ZXJ2U1vHjxwkKCmL58uVcddVVRpcjJZSWlkanTp149913eeGFF+jQoQPTp083uiwpgaeeeoqVK1eyYsUKo0uRS3TdddcRHBzMxx9/7Fx388034+HhwRdffGFgZVISJpOJ+fPnM3ToUMDRehoWFsbjjz/OhAkTAEhOTiY4OJioqChuu+02Q+pUC2op5OTksHHjRvr16+dcZzab6devH6tXrzawMrlUycnJANSqVcvgSqQ0xowZw+DBg4v8XZSq4fvvv6dLly7ceuutBAUF0bFjRz788EOjy5JS6NGjB0uWLGHXrl0AbNmyhT///JNBgwYZXJlcitjYWOLj44v8e+rn50dkZKSh2cbFsCtXQSdOnCA/P5/g4OAi64ODg9mxY4dBVcmlstlsjBs3jp49e9KmTRujy5ESmjNnDps2bWL9+vVGlyKXYN++fbz33nuMHz+ep59+mvXr1/PII4/g5ubGyJEjjS5PSuCpp54iJSWFFi1aYLFYyM/P58UXX+TOO+80ujS5BPHx8QDFZpsz24yggCo11pgxY9i6dSt//vmn0aVICR08eJBHH32URYsW4e7ubnQ5cglsNhtdunThpZdeAqBjx45s3bqVWbNmKaBWEfPmzeN///sfs2fPpnXr1kRHRzNu3DjCwsL0PZQyo1v8pVC7dm0sFgsJCQlF1ickJBASEmJQVXIpxo4dy48//sjSpUupV6+e0eVICW3cuJFjx47RqVMnXFxccHFxYfny5cyYMQMXFxfy8/ONLlEuIjQ0lFatWhVZ17JlS+Li4gyqSErrX//6F0899RS33XYbbdu25e677+axxx5j2rRpRpcml+BMfqls2UYBtRTc3Nzo3LkzS5Ysca6z2WwsWbKE7t27G1iZlJTdbmfs2LHMnz+f33//nYiICKNLklK45ppriImJITo62rl06dKFO++8k+joaCwWi9ElykX07NnznKHddu3aRYMGDQyqSEorIyMDs7lofLBYLNhsNoMqkssRERFBSEhIkWyTkpLC2rVrDc02usVfSuPHj2fkyJF06dKFbt26MX36dNLT07nnnnuMLk1KYMyYMcyePZvvvvsOHx8fZ/8aPz8/PDw8DK5OLsbHx+ec/sJeXl4EBgaqH3EV8dhjj9GjRw9eeuklhg0bxrp16/jggw/44IMPjC5NSmjIkCG8+OKL1K9fn9atW7N582beeOMN7r33XqNLk/NIS0tjz549zvexsbFER0dTq1Yt6tevz7hx43jhhRdo2rQpERERTJo0ibCwMOeT/oawS6m9/fbb9vr169vd3Nzs3bp1s69Zs8bokqSEgGKXTz/91OjS5BL17t3b/uijjxpdhpTCDz/8YG/Tpo3darXaW7RoYf/ggw+MLklKISUlxf7oo4/a69evb3d3d7c3atTI/swzz9izs7ONLk3OY+nSpcX+3zdy5Ei73W6322w2+6RJk+zBwcF2q9Vqv+aaa+w7d+40tGaNgyoiIiIilYr6oIqIiIhIpaKAKiIiIiKVigKqiIiIiFQqCqgiIiIiUqkooIqIiIhIpaKAKiIiIiKVigKqiIiIiFQqCqgiIiIiUqkooIqIVCPLli3DZDKRlJRkdCkiIpdMAVVEREREKhUFVBERERGpVBRQRUTKkM1mY9q0aURERODh4UH79u35+uuvgYLb7z/99BPt2rXD3d2dK664gq1btxY5xzfffEPr1q2xWq00bNiQ119/vcj27OxsnnzyScLDw7FarTRp0oSPP/64yD4bN26kS5cueHp60qNHD3bu3Fm+H1xEpAwpoIqIlKFp06bx+eefM2vWLP7++28ee+wx7rrrLpYvX+7c51//+hevv/4669evp06dOgwZMoTc3FzAESyHDRvGbbfdRkxMDM8++yyTJk0iKirKefyIESP48ssvmTFjBtu3b+f999/H29u7SB3PPPMMr7/+Ohs2bMDFxYV77723Qj6/iEhZMNntdrvRRYiIVAfZ2dnUqlWLxYsX0717d+f60aNHk5GRwQMPPEDfvn2ZM2cOw4cPB+DUqVPUq1ePqKgohg0bxp133snx48f57bffnMc/8cQT/PTTT/z999/s2rWL5s2bs2jRIvr163dODcuWLaNv374sXryYa665BoCff/6ZwYMHk5mZibu7ezn/KYiIXD61oIqIlJE9e/aQkZFB//798fb2di6ff/45e/fude5XOLzWqlWL5s2bs337dgC2b99Oz549i5y3Z8+e7N69m/z8fKKjo7FYLPTu3fuCtbRr1875OjQ0FIBjx45d9mcUEakILkYXICJSXaSlpQHw008/Ubdu3SLbrFZrkZB6qTw8PEq0n6urq/O1yWQCHP1jRUSqArWgioiUkVatWmG1WomLi6NJkyZFlvDwcOd+a9ascb5OTExk165dtGzZEoCWLVuycuXKIudduXIlzZo1w2Kx0LZtW2w2W5E+rSIi1Y1aUEVEyoiPjw8TJkzgsccew2az0atXL5KTk1m5ciW+vr40aNAAgOeee47AwECCg4N55plnqF27NkOHDgXg8ccfp2vXrjz//PMMHz6c1atXM3PmTN59910AGjZsyMiRI7n33nuZMWMG7du358CBAxw7doxhw4YZ9dFFRMqUAqqISBl6/vnnqVOnDtOmTWPfvn34+/vTqVMnnn76aect9v/85z88+uij7N69mw4dOvDDDz/g5uYGQKdOnZg3bx6TJ0/m+eefJzQ0lOeee45Ro0Y5r/Hee+/x9NNP83//93+cPHmS+vXr8/TTTxvxcUVEyoWe4hcRqSBnnrBPTEzE39/f6HJERCot9UEVERERkUpFAVVEREREKhXd4hcRERGRSkUtqCIiIiJSqSigioiIiEilooAqIiIiIpWKAqqIiIiIVCoKqCIiIiJSqSigioiIiEilooAqIiIiIpWKAqqIiIiIVCr/D35wOR8bJCvLAAAAAElFTkSuQmCC\n" + "image/png": "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J4rPPTw8MGbMGKxfvx7/93//B3Nzc6hUKpiamr7ylH5YWBjS0tLw22+/iWNgFy5ciMDAQHz33XfiUERbW1ssXLgQUqkU1apVQ4cOHbB///5XBtTly5ejXbt24njXgIAArFixAlOmTAEA/PTTT7C2tsb69ethZmYGAHjnnXfE7WfMmIHRo0djxIgR4roGDRrk+/m9bNq0aWjTpo24bGdnB29vb3F5+vTp2LJlC7Zt24ahQ4fi+vXr+P333xEeHi7eZCn7HT2Dg4MREhKCkydPomHDhsjIyEBYWFiOXtXixoBazFYeuQMAaFvLGa425oYthoiIjJeZUteTaahjF1C1atXg7++P5cuXo3nz5rh58yYOHTqEadOmAdDdqnzmzJn4/fffER0dDbVajfT0dCiVBTvGlStX4O7uLoZTALnO+rNhwwbMnz8ft27dQlJSEjIzM2FlZVXg95F1LG9vb70LtBo3bgytVotr166JAbVmzZqQSl+cAXVxccHFixfz3K9Go8GqVavw448/iuv69OmDMWPGICQkBCYmJjh37hyaNGkihtPsHj58iPv376NVq1aFej+58fX11VtOSkrClClTsGPHDjx48ACZmZlITU1FVFQUAN3peqlUimbNmuW6P1dXV3To0AHLly9Hw4YNsX37dqSnp6Nbt26vXeurlN0rlQzgabIaW8/pppbq7+9h2GKIiMi4SSS60+yGeBTy4t1PPvkEf/zxBxITE7FixQp4enqKgWb27Nn48ccfMXbsWBw4cADnzp1DQEAA1Gp1sX1Ux44dQ+/evdG+fXv89ddfOHv2LCZMmFCsx8ju5RApkUjEOdpzs2fPHkRHR6N79+4wNTWFqakpevTogcjISHHaTXPzvDutXvUaAPHCciHb2OG8xsS+PDvCmDFjsGXLFsycOROHDh3CuXPnULt2bfGzy+/YADBw4ECsX78eqampWLFiBbp3717gf4AUFQNqMVp3MgrpmVrUdrOGT8U3M6UFERFRSfv4449hYmKCsLAw/PbbbxgwYIA4HvXIkSPo1KkT+vTpA29vb1SuXBnXr18v8L6rV6+Ou3fv4sGDB+K648eP67U5evQoKlasiAkTJsDX1xdeXl6IjIzUayOTyaDRaPI91vnz55GcnCyuO3LkCExMTFC1atUC1/yyZcuWoUePHnpzup87dw49evQQL5aqU6cODh06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aQnsL7/8crF+o//973+tj+vVq8fo0aOZOXMmTz31FF5eXvj6+uLq6kp4ePgFX2vGjBnk5uby+eef4+NjCelTp06lX79+vPrqq4SFhQEQFBTE1KlTMRqNNG3alL59+7JgwYIyBdQFCxawadMmEhMTiYqKAuDzzz+nRYsWrFmzho4dO5KUlMR//vMfmjZtCkCjRo2s1yclJTFgwABatWoFQP369e2uoaIpoFag8Tc3Z+muo2w6lM6ny/bxYPeq9wdARESqETdvS2umI17XDk2bNqVLly588skn9OjRg927d7N06VJeeOEFAIqKinj55ZeZPXs2hw4dIj8/n7y8vFL3Md22bRtRUVHWcArQuXPnYufNmjWLKVOmsGfPHrKysigsLLR7yfRt27YRExNjDacAXbt2xWQysWPHDmtAbdGiBUaj0XpOREQEmzZtsuu1zn3NqKgoazgFaN68OYGBgWzbto2OHTsyatQohg8fzhdffEFcXBx33HEHDRpYpsP897//zSOPPMKff/5JXFwcAwYMKFO/34qkJr0KFOrnyX/7NgfgzXk7SDqe4+CKRESkWjMYLB+1V/Z2+mN6ezzwwAN89913ZGZm8umnn9KgQQOuueYaAF5//XXefvttnn76aRYuXEhCQgK9evUiPz+/3L5VK1asYPDgwdx444388ssv/PPPPzz33HPl+hrnOvPx+hkGgwGTyVQhrwWWGQi2bNlC3759+euvv2jevDk//PADAMOHD2fv3r3ce++9bNq0iQ4dOvDOO+9UWC1loYBawe7oUJsuDWqQW2Di2R82aRlUERERYODAgbi4uDBjxgw+//xz7r//fmt/1GXLlnHLLbdwzz33EBMTQ/369dm5c2ep792sWTMOHDhAcnKydd/KlSttzlm+fDl169blueeeo0OHDjRq1Ij9+/fbnOPu7k5R0cVn42nWrBkbNmwgOzvbum/ZsmW4uLjQpEmTUtdsjzPv78CBA9Z9W7duJS0tjebNm1v3NW7cmJEjR/Lnn39y22238emnn1qPRUVF8a9//Yvvv/+eJ598kg8//LBCai0rBdQKZjAYePnWVni4uvD37mN8u674tBoiIiJXGl9fXwYNGsSYMWNITk5m2LBh1mONGjVi3rx5LF++nG3btvHwww/bjFC/lLi4OBo3bszQoUPZsGEDS5cu5bnnnrM5p1GjRiQlJTFz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mwQFBTm6NCmlV199lffee4+pU6eybds2Xn31VV577TXeeecdR5cmF5CdnU1MTAzTpk0r8fhrr73GlClTmD59OqtWrcLHx4devXqRm5tbyZWepWmm7BQbG0vHjh2ZOnUqACaTiaioKB577DGeeeYZB1cn9jp69CihoaEsXryY7t27O7ocKaWsrCzatWvHu+++y4svvkibNm2YPHmyo8uSUnjmmWdYtmwZS5cudXQpUkY33XQTYWFhfPzxx9Z9AwYMwMvLiy+//NKBlUlpGAwGfvjhB/r37w9YWk8jIyN58sknGT16NADp6emEhYURHx/PnXfe6ZA61YJqh/z8fNatW0dcXJx1n4uLC3FxcaxYscKBlUlZpaenAxAcHOzgSsQeI0aMoG/fvjZ/F8U5/PTTT3To0IE77riD0NBQ2rZty4cffujossQOXbp0YcGCBezcuROADRs28Pfff9OnTx8HVyZlkZiYSEpKis2/pwEBAcTGxjo027g67JWd0LFjxygqKiIsLMxmf1hYGNu3b3dQVVJWJpOJJ554gq5du9KyZUtHlyOlNHPmTNavX8+aNWscXYqUwd69e3nvvfcYNWoUzz77LGvWrOHf//437u7uDB061NHlSSk888wzZGRk0LRpU4xGI0VFRbz00ksMHjzY0aVJGaSkpACUmG3OHHMEBVS5Yo0YMYLNmzfz999/O7oUKaUDBw7w+OOPM2/ePDw9PR1djpSByWSiQ4cOvPzyywC0bduWzZs3M336dAVUJzF79my++uorZsyYQYsWLUhISOCJJ54gMjJSP0MpN/qI3w41a9bEaDSSmppqsz81NZXw8HAHVSVl8eijj/LLL7+wcOFCateu7ehypJTWrVvHkSNHaNeuHa6urri6urJ48WKmTJmCq6srRUVFji5RLiEiIoLmzZvb7GvWrBlJSUkOqkjs9Z///IdnnnmGO++8k1atWnHvvfcycuRIJk2a5OjSpAzO5Jeqlm0UUO3g7u5O+/btWbBggXWfyWRiwYIFdO7c2YGVSWmZzWYeffRRfvjhB/766y+io6MdXZLY4brrrmPTpk0kJCRYtw4dOjB48GASEhIwGo2OLlEuoWvXrsWmdtu5cyd169Z1UEVir5ycHFxcbOOD0WjEZDI5qCK5HNHR0YSHh9tkm4yMDFatWuXQbKOP+O00atQohg4dSocOHejUqROTJ08mOzub++67z9GlSSmMGDGCGTNm8OOPP+Ln52ftXxMQEICXl5eDq5NL8fPzK9Zf2MfHhxo1aqgfsZMYOXIkXbp04eWXX2bgwIGsXr2aDz74gA8++MDRpUkp9evXj5deeok6derQokUL/vnnH9566y3uv/9+R5cmF5CVlcXu3butzxMTE0lISCA4OJg6derwxBNP8OKLL9KoUSOio6MZO3YskZGR1pH+DmEWu73zzjvmOnXqmN3d3c2dOnUyr1y50tElSSkBJW6ffvqpo0uTMrrmmmvMjz/+uKPLEDv8/PPP5pYtW5o9PDzMTZs2NX/wwQeOLknskJGRYX788cfNderUMXt6eprr169vfu6558x5eXmOLk0uYOHChSX+3zd06FCz2Ww2m0wm89ixY81hYWFmDw8P83XXXWfesWOHQ2vWPKgiIiIiUqWoD6qIiIiIVCkKqCIiIiJSpSigioiIiEiVooAqIiIiIlWKAqqIiIiIVCkKqCIiIiJSpSigioiIiEiVooAqIiIiIlWKAqqISDWyaNEiDAYDaWlpji5FRKTMFFBFREREpEpRQBURERGRKkUBVUSkHJlMJiZNmkR0dDReXl7ExMTw7bffAmc/fv/1119p3bo1np6eXHXVVWzevNnmHt999x0tWrTAw8ODevXq8eabb9ocz8vL4+mnnyYqKgoPDw8aNmzIxx9/bHPOunXr6NChA97e3nTp0oUdO3ZU7BsXESlHCqgiIuVo0qRJfP7550yfPp0tW7YwcuRI7rnnHhYvXmw95z//+Q9vvvkma9asISQkhH79+lFQUABYguXAgQO588472bRpE88//zxjx44lPj7eev2QIUP4+uuvmTJlCtu2beP999/H19fXpo7nnnuON998k7Vr1+Lq6sr9999fKe9fRKQ8GMxms9nRRYiIVAd5eXkEBwczf/58OnfubN0/fPhwcnJyeOihh+jZsyczZ85k0KBBAJw4cYLatWsTHx/PwIEDGTx4MEePHuXPP/+0Xv/UU0/x66+/smXLFnbu3EmTJk2YN28ecXFxxWpYtGgRPXv2ZP78+Vx33XUA/Pbbb/Tt25dTp07h6elZwd8FEZHLpxZUEZFysnv3bnJycrj++uvx9fW1bp9//jl79uyxnndueA0ODqZJkyZs27YNgG3bttG1a1eb+3bt2pVdu3ZRVFREQkICRqORa6655qK1tG7d2vo4IiICgCNHjlz2exQRqQyuji5ARKS6yMrKAuDXX3+lVq1aNsc8PDxsQmpZeXl5leo8Nzc362ODwQBY+seKiDgDtaCKiJST5s2b4+HhQVJSEg0bNrTZoqKirOetXLnS+vjkyZPs3LmTZs2aAdCsWTOWLVtmc99ly5bRuHFjjEYjrVq1wmQy2fRpFRGpbtSCKiJSTvz8/Bg9ejQjR47EZDJx9dVXk56ezrJly/D396du3boAvPDCC9SoUYOwsDCee+45atasSf/+/QF48skn6dixIxMnTmTQoEGsWLGCqVOn8u677wJQr149hg4dyv3338+UKVOIiYlh//79HDlyhIEDBzrqrYuIlCsFVBGRcjRx4kRCQkKYNGkSe/fuJTAwkHbt2vHss89aP2J/5ZVXePzxx9m1axdt2rTh559/xt3dHYB27doxe/Zsxo0bx8SJE4mIiOCFF15g2LBh1td47733ePbZZ/m///s/jh8/Tp06dXj22Wcd8XZFRCqERvGLiFSSMyPsT548SWBgoKPLERGpstQHVURERESqFAVUEREREalS9BG/iIiIiFQpakEVERERkSpFAVVEREREqhQFVBERERGpUhRQRURERKRKUUAVERERkSpFAVVEREREqhQFVBERERGpUhRQRURERKRK+X/kl7mO8oGbrgAAAABJRU5ErkJggg==\n" }, "metadata": {} } @@ -4692,29 +4739,29 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 56, "metadata": { "id": "WJp-39zmLgFO", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "2cec771a-277f-4e06-adf4-2203fa744086" + "outputId": "d1c8579c-5c15-4b28-b89b-c3abd6b2c4a9" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "--2023-08-18 01:43:01-- https://storage.googleapis.com/ztm_tf_course/food_vision/10_food_classes_all_data.zip\n", - "Resolving storage.googleapis.com (storage.googleapis.com)... 173.194.202.128, 173.194.203.128, 74.125.199.128, ...\n", - "Connecting to storage.googleapis.com (storage.googleapis.com)|173.194.202.128|:443... connected.\n", + "--2024-01-14 13:45:18-- https://storage.googleapis.com/ztm_tf_course/food_vision/10_food_classes_all_data.zip\n", + "Resolving storage.googleapis.com (storage.googleapis.com)... 142.250.4.207, 172.253.118.207, 74.125.200.207, ...\n", + "Connecting to storage.googleapis.com (storage.googleapis.com)|142.250.4.207|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 519183241 (495M) [application/zip]\n", "Saving to: ‘10_food_classes_all_data.zip’\n", "\n", - "10_food_classes_all 100%[===================>] 495.13M 148MB/s in 3.5s \n", + "10_food_classes_all 100%[===================>] 495.13M 23.3MB/s in 22s \n", "\n", - "2023-08-18 01:43:04 (143 MB/s) - ‘10_food_classes_all_data.zip’ saved [519183241/519183241]\n", + "2024-01-14 13:45:41 (22.3 MB/s) - ‘10_food_classes_all_data.zip’ saved [519183241/519183241]\n", "\n" ] } @@ -4731,13 +4778,13 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 57, "metadata": { "id": "XUhaT5repEp0", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "bdfedbcb-5b9c-4815-8bc5-9e9b312c3993" + "outputId": "3186014a-e90d-45a1-e307-4c9a9babf337" }, "outputs": [ { @@ -4746,27 +4793,27 @@ "text": [ "There are 2 directories and 0 images in '10_food_classes_all_data'.\n", "There are 10 directories and 0 images in '10_food_classes_all_data/train'.\n", - "There are 0 directories and 750 images in '10_food_classes_all_data/train/ramen'.\n", + "There are 0 directories and 750 images in '10_food_classes_all_data/train/chicken_wings'.\n", "There are 0 directories and 750 images in '10_food_classes_all_data/train/chicken_curry'.\n", + "There are 0 directories and 750 images in '10_food_classes_all_data/train/fried_rice'.\n", + "There are 0 directories and 750 images in '10_food_classes_all_data/train/sushi'.\n", + "There are 0 directories and 750 images in '10_food_classes_all_data/train/hamburger'.\n", "There are 0 directories and 750 images in '10_food_classes_all_data/train/pizza'.\n", + "There are 0 directories and 750 images in '10_food_classes_all_data/train/ramen'.\n", "There are 0 directories and 750 images in '10_food_classes_all_data/train/ice_cream'.\n", - "There are 0 directories and 750 images in '10_food_classes_all_data/train/grilled_salmon'.\n", "There are 0 directories and 750 images in '10_food_classes_all_data/train/steak'.\n", - "There are 0 directories and 750 images in '10_food_classes_all_data/train/chicken_wings'.\n", - "There are 0 directories and 750 images in '10_food_classes_all_data/train/hamburger'.\n", - "There are 0 directories and 750 images in '10_food_classes_all_data/train/sushi'.\n", - "There are 0 directories and 750 images in '10_food_classes_all_data/train/fried_rice'.\n", + "There are 0 directories and 750 images in '10_food_classes_all_data/train/grilled_salmon'.\n", "There are 10 directories and 0 images in '10_food_classes_all_data/test'.\n", - "There are 0 directories and 250 images in '10_food_classes_all_data/test/ramen'.\n", + "There are 0 directories and 250 images in '10_food_classes_all_data/test/chicken_wings'.\n", "There are 0 directories and 250 images in '10_food_classes_all_data/test/chicken_curry'.\n", + "There are 0 directories and 250 images in '10_food_classes_all_data/test/fried_rice'.\n", + "There are 0 directories and 250 images in '10_food_classes_all_data/test/sushi'.\n", + "There are 0 directories and 250 images in '10_food_classes_all_data/test/hamburger'.\n", "There are 0 directories and 250 images in '10_food_classes_all_data/test/pizza'.\n", + "There are 0 directories and 250 images in '10_food_classes_all_data/test/ramen'.\n", "There are 0 directories and 250 images in '10_food_classes_all_data/test/ice_cream'.\n", - "There are 0 directories and 250 images in '10_food_classes_all_data/test/grilled_salmon'.\n", "There are 0 directories and 250 images in '10_food_classes_all_data/test/steak'.\n", - "There are 0 directories and 250 images in '10_food_classes_all_data/test/chicken_wings'.\n", - "There are 0 directories and 250 images in '10_food_classes_all_data/test/hamburger'.\n", - "There are 0 directories and 250 images in '10_food_classes_all_data/test/sushi'.\n", - "There are 0 directories and 250 images in '10_food_classes_all_data/test/fried_rice'.\n" + "There are 0 directories and 250 images in '10_food_classes_all_data/test/grilled_salmon'.\n" ] } ], @@ -4786,13 +4833,13 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 58, "metadata": { "id": "s-bF8cAKLzVt", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "b10d37f6-10d6-4c79-e461-88f625c28248" + "outputId": "f2d60b66-51a8-4898-8353-ed7d7f332f6f" }, "outputs": [ { @@ -4835,31 +4882,31 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 59, "metadata": { "id": "pjrkv4n-428G", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "6f50621a-b084-4525-f612-9a9f0462fb36" + "outputId": "9d27391f-826f-419a-a7e2-7245efa6e38b" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "79/79 [==============================] - 3s 39ms/step - loss: 0.4526 - accuracy: 0.8504\n" + "79/79 [==============================] - 5s 61ms/step - loss: 0.4296 - accuracy: 0.8620\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ - "[0.452595591545105, 0.8503999710083008]" + "[0.42959845066070557, 0.8619999885559082]" ] }, "metadata": {}, - "execution_count": 56 + "execution_count": 59 } ], "source": [ @@ -4878,24 +4925,24 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 60, "metadata": { "id": "1D0wLFb01kaJ", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "d319b180-11e8-4ea6-eb39-9274d2c1162b" + "outputId": "a02d76fe-0f95-490e-bfc2-3e1505790ba4" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "[0.4525955617427826, 0.8503999710083008]" + "[0.42959845066070557, 0.8619999885559082]" ] }, "metadata": {}, - "execution_count": 57 + "execution_count": 60 } ], "source": [ @@ -4930,7 +4977,7 @@ "metadata": { "id": "biBCH4TrEHgO" }, - "execution_count": 58, + "execution_count": 61, "outputs": [] }, { @@ -4953,19 +5000,19 @@ "base_uri": "https://localhost:8080/" }, "id": "L-6k_UsJSz-Z", - "outputId": "276de1dc-c340-41c9-dbb4-2553130ba98e" + "outputId": "c019c9da-bb82-4e39-edd9-2f00890648c2" }, - "execution_count": 59, + "execution_count": 62, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "" + "" ] }, "metadata": {}, - "execution_count": 59 + "execution_count": 62 } ] }, @@ -4980,13 +5027,13 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 63, "metadata": { "id": "L8dRowENskBy", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "c040615e-94ed-4f19-e1a5-07ff6a81fb9a" + "outputId": "da790b16-485d-434d-c8b0-be3b84ee2347" }, "outputs": [ { @@ -4999,21 +5046,22 @@ "=================================================================\n", " input_layer (InputLayer) [(None, 224, 224, 3)] 0 \n", " \n", - " data_augmentation (Sequenti (None, None, None, 3) 0 \n", - " al) \n", + " data_augmentation (Sequent (None, None, None, 3) 0 \n", + " ial) \n", " \n", - " efficientnetv2-b0 (Function (None, None, None, 1280) 5919312 \n", - " al) \n", + " efficientnetv2-b0 (Functio (None, None, None, 1280 5919312 \n", + " nal) ) \n", " \n", - " global_average_pooling_laye (None, 1280) 0 \n", - " r (GlobalAveragePooling2D) \n", + " global_average_pooling_lay (None, 1280) 0 \n", + " er (GlobalAveragePooling2D \n", + " ) \n", " \n", " output_layer (Dense) (None, 10) 12810 \n", " \n", "=================================================================\n", - "Total params: 5,932,122\n", - "Trainable params: 12,810\n", - "Non-trainable params: 5,919,312\n", + "Total params: 5932122 (22.63 MB)\n", + "Trainable params: 12810 (50.04 KB)\n", + "Non-trainable params: 5919312 (22.58 MB)\n", "_________________________________________________________________\n" ] } @@ -5032,9 +5080,9 @@ "base_uri": "https://localhost:8080/" }, "id": "lMbRVUbqYv3M", - "outputId": "564b16fb-c4a2-4c3b-e32e-e7fee6a1c215" + "outputId": "972d7301-04b4-4bec-f6fb-db5c30c904ae" }, - "execution_count": 61, + "execution_count": 64, "outputs": [ { "output_type": "stream", @@ -5058,31 +5106,31 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 65, "metadata": { "id": "wET1oWQC0yc2", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "8c85f720-9d70-4597-e252-0891fff035cd" + "outputId": "5f7ebf80-9936-4da4-ccc1-6fa79e7e7984" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "79/79 [==============================] - 6s 33ms/step - loss: 0.6795 - accuracy: 0.8216\n" + "79/79 [==============================] - 9s 76ms/step - loss: 0.6417 - accuracy: 0.8416\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ - "[0.6794609427452087, 0.8216000199317932]" + "[0.6416527628898621, 0.8416000008583069]" ] }, "metadata": {}, - "execution_count": 62 + "execution_count": 65 } ], "source": [ @@ -5109,13 +5157,13 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 66, "metadata": { "id": "k5MWo0Mu6WYl", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "48f8f12b-2bf6-49b6-a568-b3d7297613bf" + "outputId": "2b968742-f714-41ff-9e13-aec0df98a933" }, "outputs": [ { @@ -5161,7 +5209,7 @@ "metadata": { "id": "srxeJzSpYx38" }, - "execution_count": 64, + "execution_count": 67, "outputs": [] }, { @@ -5177,13 +5225,13 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 68, "metadata": { "id": "ojbNIiUV8oc2", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "229fe047-36cc-4c19-a219-a05226017282" + "outputId": "bb0b197e-ce98-420d-ec6a-b2f15f7eb6b4" }, "outputs": [ { @@ -5499,7 +5547,7 @@ "metadata": { "id": "KQSBQkrMFtql" }, - "execution_count": 66, + "execution_count": 69, "outputs": [] }, { @@ -5513,32 +5561,32 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 70, "metadata": { "id": "SpZS_khtJaYx", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "bb0b54f1-8cda-4b5e-963c-10753c014058" + "outputId": "be544717-d8d2-4a6b-c1c5-388a5ab8e63e" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Saving TensorBoard log files to: transfer_learning/full_10_classes_fine_tune_last_10/20230818-014323\n", + "Saving TensorBoard log files to: logs/fit/\n", "Epoch 5/10\n", - "235/235 [==============================] - 43s 144ms/step - loss: 0.7247 - accuracy: 0.7724 - val_loss: 0.3794 - val_accuracy: 0.8832\n", + "235/235 [==============================] - 131s 519ms/step - loss: 0.7082 - accuracy: 0.7764 - val_loss: 0.3545 - val_accuracy: 0.8766\n", "Epoch 6/10\n", - "235/235 [==============================] - 29s 122ms/step - loss: 0.5906 - accuracy: 0.8093 - val_loss: 0.3624 - val_accuracy: 0.8783\n", + "235/235 [==============================] - 99s 422ms/step - loss: 0.5950 - accuracy: 0.8057 - val_loss: 0.2932 - val_accuracy: 0.8980\n", "Epoch 7/10\n", - "235/235 [==============================] - 26s 108ms/step - loss: 0.5465 - accuracy: 0.8220 - val_loss: 0.3211 - val_accuracy: 0.9046\n", + "235/235 [==============================] - 89s 377ms/step - loss: 0.5392 - accuracy: 0.8280 - val_loss: 0.2815 - val_accuracy: 0.9079\n", "Epoch 8/10\n", - "235/235 [==============================] - 24s 102ms/step - loss: 0.5178 - accuracy: 0.8332 - val_loss: 0.3015 - val_accuracy: 0.9095\n", + "235/235 [==============================] - 76s 318ms/step - loss: 0.4961 - accuracy: 0.8388 - val_loss: 0.2630 - val_accuracy: 0.9112\n", "Epoch 9/10\n", - "235/235 [==============================] - 21s 89ms/step - loss: 0.4782 - accuracy: 0.8425 - val_loss: 0.2541 - val_accuracy: 0.9227\n", + "235/235 [==============================] - 67s 282ms/step - loss: 0.4667 - accuracy: 0.8493 - val_loss: 0.2726 - val_accuracy: 0.9046\n", "Epoch 10/10\n", - "235/235 [==============================] - 19s 81ms/step - loss: 0.4562 - accuracy: 0.8501 - val_loss: 0.2632 - val_accuracy: 0.9227\n" + "235/235 [==============================] - 63s 266ms/step - loss: 0.4442 - accuracy: 0.8551 - val_loss: 0.2686 - val_accuracy: 0.9013\n" ] } ], @@ -5551,7 +5599,7 @@ " initial_epoch=history_10_percent_data_aug.epoch[-1],\n", " validation_data=test_data,\n", " validation_steps=int(0.25 * len(test_data)),\n", - " callbacks=[create_tensorboard_callback(\"transfer_learning\", \"full_10_classes_fine_tune_last_10\")])" + " callbacks=[create_tensorboard_callback(\"full_10_classes_fine_tune_last_10\")])" ] }, { @@ -5567,31 +5615,31 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 71, "metadata": { "id": "zHEcLE3tRTlB", "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "7f9a7b9e-9688-461d-f310-7d9c1119a019" + "outputId": "6adf5d6d-85fa-4ceb-e0ae-0f04e063a67f" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "79/79 [==============================] - 3s 35ms/step - loss: 0.2658 - accuracy: 0.9156\n" + "79/79 [==============================] - 5s 60ms/step - loss: 0.2641 - accuracy: 0.9156\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ - "[0.2658187747001648, 0.9156000018119812]" + "[0.26409539580345154, 0.9156000018119812]" ] }, "metadata": {}, - "execution_count": 68 + "execution_count": 71 } ], "source": [ @@ -5609,19 +5657,19 @@ "base_uri": "https://localhost:8080/" }, "id": "vSqte3X-aFAI", - "outputId": "e8bb98e0-62e5-46eb-f2a4-7bb25a1d65f7" + "outputId": "545a2dfd-2bf0-4785-8414-6b89950503c1" }, - "execution_count": 69, + "execution_count": 72, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "[0.4525955617427826, 0.8503999710083008]" + "[0.42959845066070557, 0.8619999885559082]" ] }, "metadata": {}, - "execution_count": 69 + "execution_count": 72 } ] }, @@ -5636,14 +5684,14 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 73, "metadata": { "id": "QwxgAW_l5Meg", "colab": { "base_uri": "https://localhost:8080/", - "height": 791 + "height": 790 }, - "outputId": "e4b9c8a4-4aff-4712-8b24-34a6b62ccd03" + "outputId": "395f17e1-d6c3-4b44-a983-c1566c7847b2" }, "outputs": [ { @@ -5652,7 +5700,7 @@ "text": [ "5\n", "11\n", - "[0.335999995470047, 0.6413333415985107, 0.7253333330154419, 0.7706666588783264, 0.7839999794960022, 0.7724000215530396, 0.809333324432373, 0.8220000267028809, 0.8331999778747559, 0.8425333499908447, 0.8501333594322205]\n" + "[0.3413333296775818, 0.6453333497047424, 0.7493333220481873, 0.7706666588783264, 0.7960000038146973, 0.7764000296592712, 0.805733323097229, 0.828000009059906, 0.8388000130653381, 0.8493333458900452, 0.8550666570663452]\n" ] }, { @@ -5661,7 +5709,7 @@ "text/plain": [ "
" ], - "image/png": "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8w5u3bpVbEva8ePHsX37dnz88ccwNTXF0qVL0b9/f9y5cwfW1tYAgPPnz6NXr15wdHTE3LlzoVKpMG/ePNja2pbodW/btg0ZGRkYO3YsrK2tcebMGSxbtgz37t3Dtm3btOqqVCr4+PjAy8sLixcvxqFDh/DNN9/A1dUVY8eOBaBJ9N5++20cP34cH330EZo2bYodO3bA39+/RPEMHToUc+fORWhoKNq2bat1719++QWdOnVCvXr1EB8fj59//hmDBw/GmDFjkJqailWrVsHHxwdnzpwp9Fi9OIGBgZg/fz769OmDPn364Ny5c3jjjTegVCq16t26dQs7d+7EgAED0KBBA8TFxWHlypXo0qULLl++DCcnJzRt2hTz5s1DYGAgPvjgA3Tq1AkA4O3tXeS9BUHAW2+9hcOHD+P9999H69atceDAAXz++ee4f/8+vv32W636JflelFVmZia6du2KGzduYPz48WjQoAG2bduGgIAAJCUlYcKECQCAsLAwDB48GK+//jq+/vprAMCVK1dw4sQJsc6cOXMQFBSE0aNHo3379khJScE///yDc+fOoWfPni8VJ1GtIxBRjTZu3Djh2X/qXbp0EQAIISEhhepnZGQUKvvwww8FIyMjISsrSyzz9/cX6tevL+5HR0cLAARra2shMTFRLP/9998FAMLu3bvFstmzZxeKCYAgk8mEGzduiGUXLlwQAAjLli0Ty3x9fQUjIyPh/v37Ytn169cFfX39QtcsSlGvLygoSJBIJEJMTIzW6wMgzJs3T6tumzZtBA8PD3F/586dAgBh4cKFYllubq7QqVMnAYCwZs2aYmNq166dULduXUGlUoll+/fvFwAIK1euFK+ZnZ2tdd6TJ08Ee3t7YdSoUVrlAITZs2eL+2vWrBEACNHR0YIgCMKjR48EmUwm9O3bV1Cr1WK9L774QgAg+Pv7i2VZWVlacQmC5rOWy+Va701ERMRzX++z35X892z+/Pla9d59911BIpFofQdK+r0oSv53ctGiRc+tExwcLAAQNm7cKJYplUqhQ4cOgomJiZCSkiIIgiBMmDBBMDMzE3Jzc597rVatWgl9+/Z9YUxEVDJ8xE9US8nlcowcObJQuaGhofh7amoq4uPj0alTJ2RkZODq1avFXnfgwIGwtLQU9/Nb027dulXsuT169ICrq6u437JlS5iZmYnnqlQq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559/7urS5Cp16dLF+vTTT7u6DHHCTz/9ZG3WrJnVbDZbGzVqZP3oo49cXZI4ITU11fr0009ba9asafX09LTWqVPH+uKLL1pzcnJcXZpcwpIlS4r8b9/gwYOtVqvVarFYrGPGjLGGhoZazWaz9eabb7bu2rXLpTVrHVQRERERKVc0BlVEREREyhUFVBEREREpVxRQRURERKRcUUAVERERkXJFAVVEREREyhUFVBEREREpVxRQRURERKRcUUAVERERkXJFAVVEpBJZunQpBoOB5ORkV5ciInLVFFBFREREpFxRQBURERGRckUBVUSkBFksFiZMmEBUVBReXl5ER0fzzTffAOe+fp8/fz4tWrTA09OTG264ga1btzrc49tvv6Vp06aYzWZq167N22+/7fB6Tk4Ozz33HJGRkZjNZurVq8enn37q0GbDhg20bdsWb29vOnbsyK5du0r3g4uIlCAFVBGREjRhwgRmzpzJtGnT2LZtGyNGjOCBBx5g2bJl9jb//ve/efvtt1m3bh3VqlWjd+/e5OXlAbZg2b9/f+699162bNnCSy+9xJgxY5g+fbr9+kGDBvHVV1/x3nvvsWPHDj788EN8fX0d6njxxRd5++23Wb9+PW5ubjz88MNl8vlFREqCwWq1Wl1dhIhIZZCTk0NQUBC//fYbHTp0sJ8fOnQomZmZPPbYY3Tr1o3Zs2czYMAAAE6fPk2NGjWYPn06/fv3Z+DAgZw4cYJFixbZr3/22WeZP38+27ZtY/fu3TRs2JDFixfTvXv3i2pYunQp3bp147fffuPmm28G4JdffqFXr15kZWXh6elZyn8KIiLXTj2oIiIlZO/evWRmZnLLLbfg6+trP2bOnMm+ffvs7c4Pr0FBQTRs2JAdO3YAsGPHDjp16uRw306dOrFnzx4KCgqIj4/HZDLRpUuXy9bSokUL++Pw8HAAjh8/fs2fUUSkLLi5ugARkcoiPT0dgPnz51O9enWH18xms0NIvVpeXl7Faufu7m5/bDAYANv4WBGRikA9qCIiJaRJkyaYzWYOHTpEvXr1HI7IyEh7u9WrV9sfnzlzht27d9O4cWMAGjduzMqVKx3uu3LlSho0aIDJZKJ58+ZYLBaHMa0iIpWNelBFREqIn58fo0aNYsSIEVgsFm688UZSUlJYuXIl/v7+1KpVC4BXXnmF4OBgQkNDefHFF6latSp9+vQB4JlnnqFdu3aMHz+eAQMGsGrVKiZPnswHH3wAQO3atRk8eDAPP/ww7733HtHR0Rw8eJDjx4/Tv39/V310EZESpYAqIlKCxo8fT7Vq1ZgwYQL79++nSpUqtG7dmhdeeMH+Fft//vMfnn76afbs2UPLli356aef8PDwAKB169bMnTuXsWPHMn78eMLDw3nllVcYMmSI/T2mTp3KCy+8wP/93/9x6tQpatasyQsvvOCKjysiUio0i19EpIycnWF/5swZqlSp4upyRETKLY1BFREREZFyRQFVRERERMoVfcUvIiIiIuWKelBFREREpFxRQBURERGRckUBVURERETKFQVUERERESlXFFBFREREpFxRQBURERGRckUBVURERETKFQVUERERESlX/j/2Fo4usQDS7AAAAABJRU5ErkJggg==\n" + "image/png": "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FiQmJpZ73GQyYTKZKqNMpzO6GHhlaAz9py9n475jvL18L/f3iXZ2WSIiUgOcKD5B7PzYKv/cdf9ch5fbhd3x8/HxwcfHh0WLFnH55ZeX+/f5hg0bCAkJ4YMPPqB///4YjUYAcnJyuO6663juuecwmUzMmzePQYMGsXPnTho1amQ7/+WXX2by5Mk89dRTAIwZM4Zu3brZekbPl0MuVF5eHi+//DIfffQRLi4u3H777UyYMIFPPvkEgE8++YTJkyczc+ZMOnbsyO+//84999yDt7c3I0eOrJAaTvfbb78RHh7Ob7/9RmJiIsOGDaNDhw7cc889Zz1nypQpvPjii7z00ku88cYbDB8+nH379hEYGEhSUhI333wzDz30EKNHj+b3339nwoQJlVJ7WVXWg7ps2TISExO5++67z9s2JyeHPXv2EB4eXgWVVT+RgV48Nch6a+HVX3by16GaP8ZWREQErA9Fz50713ZXtWfPnjzxxBP88ccftjYnb0MHBAQQFhZmex8TE8N9993HZZddRvPmzZk6dSrR0dFn9PhdddVVPPzww0RHRxMdHW07/2TPaGBg4Dlr7NGjhy1I+/j48Pvvv5fbrqioiDlz5tClSxc6derEAw88QHx8vO34U089xSuvvMLgwYOJiopi8ODBjBs3jrfeesvx37gLVK9ePWbOnEmrVq24/vrrGThwoF1N5Rk1ahS33XYbzZo14/nnnycnJ4f169cD8NZbb9GyZUteeuklWrZsya233sqoUaMqrf6THO5BzcnJsevZTEpKIiEhgcDAQBo1asTEiRM5ePAg8+bNszvvvffeIzY2lssuu+yMa06YMIFBgwbRuHFjDh06xFNPPYXRaOS22267iK9UO9zSpSE//5XKku2pjF+YwDcP9MTkanR2WSIiUo15unqy7p/rnPK5jhgyZAgDBw5kxYoVrF27lh9//JEXX3yRd99995zhJycnh6effprvv/+ew4cPU1xczIkTJ854sLpLly4X8zVsFixYQOvWrW3vIyMjWbNmzRntvLy8iI4+dZczPDyctLQ0wDot5549e7j77rvtei+Li4sr9UGrtm3b2nqcT9a0devWc57Tvn1722tvb2/8/Pxs32Pnzp107drVrn23bt0qsOLyORxQN27cSN++fW3vx48fD8DIkSOZO3cuhw8fPuMPSlZWFl9++SWvv/56udc8cOAAt912GxkZGdSvX58rrriCtWvX1piBvJXBYDDw3yHt6PfaMXakHOfVn3cx8brW5z9RRETqLIPBcMG32p3Nw8ODa665hmuuuYZJkyYxevRonnrqqXMG1AkTJvDLL7/w8ssv06xZMzw9Pbn55pvPeBDK29v7kmqLjIykWbNm523n5uZm995gMNjG4+bk5ADwzjvvEBtrP+yibIC8UC4uLmeM9S07tvRcNZnN5nNe+2LOqWwOB9Q+ffqcczD03Llzz9jn7+9PXl7eWc/57LPPHC2jTgj2MTFtcDvu/WgTb6/Yy1WtQohtGuTsskRERCpcmzZt7KaVcnNzo6SkxK7NqlWrGDVqlG0u9pycHP7+++/zXvvkmNPTr1eZQkNDiYiIYO/evQwfPvySr1e/fn1SUlKwWCwYDAaA806bVRFatmzJDz/8YLdvw4YNlf65VT4Pqjjm2rZh3NK5IRYLPPz5Fo7nn/mvJRERkZoiIyODq666io8//pg//viDpKQkPv/8c1588UVuuOEGW7smTZoQHx9PSkoKx44dA6B58+Z89dVXJCQksGXLFv75z39eUE9fSEgInp6eLF68mNTUVLKysirt+5U1ZcoUpk2bxowZM9i1axdbt27lgw8+4NVXX3X4Wn369CE9PZ0XX3yRPXv2MGvWLH788cdKqNrefffdx44dO3jsscfYtWsXCxcutHVGngzKlUEBtQaYPKgNDet5cuDYCaZ+95ezyxEREbloPj4+xMbG8tprr3HllVdy2WWXMWnSJO655x5mzpxpa/fKK6/wyy+/EBkZSceOHQF49dVXqVevHj169GDQoEH069ePTp06nfczXV1dmTFjBm+99RYRERF2QbgyjR49mnfffZcPPviAdu3a0bt3b+bOnWub9soRrVu35s0332TWrFnExMSwfv36KnmaPioqii+++IKvvvqK9u3bM3v2bJ588kmASp1RyWCpBWtqZmdn4+/vT1ZWFn5+fs4up1KsTzrKsLfXYLHA23d05tq2lTtZsEh1lleUZ5tKx5HpbURqk/z8fJKSkoiKisLDw8PZ5Ugd8txzzzFnzpyzzkN/tj+bjuQ19aDWEN2iArm3V1MAJn61lSM5BU6uSEREROqCN998kw0bNrB3714++ugjXnrppUqbx/UkBdQaZPy1LWgV5ktGbiGPf7nVoZU7RERERC7G7t27ueGG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\n" }, "metadata": {} } @@ -5705,7 +5753,253 @@ }, { "cell_type": "code", - "execution_count": 71, + "source": [ + "%tensorboard --logdir logs/fit" + ], + "metadata": { + "colab": { + "resources": { + "https://localhost:6006/?tensorboardColab=true": { + "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlM2QoMCwgMCwgMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2xlZnQ6MH1bZGlyPXJ0bF0gLmNkay12aXN1YWxseS1oaWRkZW57bGVmdDphdXRvO3JpZ2h0OjB9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcHt0cmFuc2l0aW9uOnZpc2liaWxpdHkgMW1zIGxpbmVhcixvcGFjaXR5IDFtcyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eToxfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MDt2aXNpYmlsaXR5OnZpc2libGV9LmNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9ue3RyYW5zaXRpb246bm9uZX0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1cywgNHB4KX0ubWF0LWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6dmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItc3R5bGUsIHNvbGlkKSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXMsIDRweCl9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOmZvY3VzOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZley0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgxLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MzJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDozMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSBoM3tmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjhweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWg0LC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgaDR7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktc3Ryb25nLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MjRweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHkgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb24sLm1hdC10eXBvZ3JhcGh5IC5tYXQtc21hbGwsLm1hdC10eXBvZ3JhcGh5IC5tYXQtY2FwdGlvbntmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250LXNpemU6MTEycHg7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjExMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udC1zaXplOjU2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250LXNpemU6NDVweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDhweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250LXNpemU6MzRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyLC5tYXQtZ3JpZC10aWxlLWZvb3Rlcntmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LXN0ZXBwZXItdmVydGljYWwsLm1hdC1zdGVwcGVyLWhvcml6b250YWx7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcntmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9ye2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDozMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10cmVle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoyNHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWRjLWJ1dHRvbnstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxpbmUtaGVpZ2h0LCAxNHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC13ZWlnaHQsIDUwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxldHRlci1zcGFjaW5nLCBub3JtYWwpO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tdGV4dC1kZWNvcmF0aW9uLCBub25lKTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LWNoZWNrYm94e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVse2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1ncm91cHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWxpc3QtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtYmFkZ2UtY29udGVudHtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLTUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtNSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMiwubWF0LWhlYWRsaW5lLTYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtNiwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi4wMTI1ZW07bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJ0aXRsZS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgzLC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YnRpdGxlLTEsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyOHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDA5Mzc1ZW07bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjRweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAzMTI1ZW07bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IGg1e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSAubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSBoNntmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZywubWF0LXN1YnRpdGxlLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS1zdHJvbmcsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3VidGl0bGUtMntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MjJweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAwNzE0Mjg1NzFlbX0ubWF0LWJvZHksLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDE3ODU3MTQyOWVtfS5tYXQtYm9keSBwLC5tYXQtYm9keS0yIHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMiBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsLC5tYXQtY2FwdGlvbiwubWF0LXR5cG9ncmFwaHkgLm1hdC1zbWFsbCwubWF0LXR5cG9ncmFwaHkgLm1hdC1jYXB0aW9ue2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDMzMzMzMzMzM2VtfS5tYXQtaGVhZGxpbmUtMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oZWFkbGluZS0xe2ZvbnQtc2l6ZTo5NnB4O2ZvbnQtd2VpZ2h0OjMwMDtsaW5lLWhlaWdodDo5NnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMTU2MjVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1oZWFkbGluZS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLTJ7Zm9udC1zaXplOjYwcHg7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjYwcHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0uMDA4MzMzMzMzM2VtO21hcmdpbjowIDAgNjRweH0ubWF0LWhlYWRsaW5lLTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtM3tmb250LXNpemU6NDhweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NTBweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWhlYWRsaW5lLTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtNHtmb250LXNpemU6MzRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDBweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAwNzM1Mjk0MTJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDE3ODU3MTQyOWVtfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDE3ODU3MTQyOWVtfS5tYXQtZ3JpZC10aWxlLWhlYWRlciwubWF0LWdyaWQtdGlsZS1mb290ZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTZweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtdG9vbGJhciwubWF0LXRvb2xiYXIgaDEsLm1hdC10b29sYmFyIGgyLC5tYXQtdG9vbGJhciBoMywubWF0LXRvb2xiYXIgaDQsLm1hdC10b29sYmFyIGg1LC5tYXQtdG9vbGJhciBoNntmb250LXNpemU6MjBweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MzJweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAxMjVlbTttYXJnaW46MH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1tZGMtb3B0aW9uey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pfS5tYXQtbWRjLWNhcmQtdGl0bGV7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktaGVhZGxpbmU2LWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWhlYWRsaW5lNi1mb250LXNpemUsIDIwcHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWhlYWRsaW5lNi1saW5lLWhlaWdodCwgMzJweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktaGVhZGxpbmU2LWZvbnQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWhlYWRsaW5lNi1sZXR0ZXItc3BhY2luZywgMC4wMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1oZWFkbGluZTYtdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1oZWFkbGluZTYtdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tYXQtbWRjLWNhcmQtc3VidGl0bGV7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi1saW5lLWhlaWdodCwgMjJweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWZvbnQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi1sZXR0ZXItc3BhY2luZywgMC4wMDcxNDI4NTcxZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tYXQtbWRjLXRvb2x0aXB7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtc2l6ZToxMnB4Oy0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXdlaWdodDo0MDA7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMzMzMzMzMzMzZW19Lm1kYy10ZXh0LWZpZWxkX19pbnB1dHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtc2l6ZSwgMTZweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy10ZXh0LWZpZWxkX19hZmZpeHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtc2l6ZSwgMTZweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSAubWRjLXRleHQtZmllbGRfX2lucHV0e2xpbmUtaGVpZ2h0OjEuNXJlbX0ubWRjLWZsb2F0aW5nLWxhYmVsey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1zaXplLCAxNnB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWxldHRlci1zcGFjaW5nLCAwLjAwOTM3NWVtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLXRleHQtZGVjb3JhdGlvbiwgaW5oZXJpdCk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyLC5tYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduOjpiZWZvcmV7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSwgMTJweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nLCAwLjAzMzMzMzMzMzNlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWNhcHRpb24tdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1mb3JtLWZpZWxkLC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVsey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5MS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7Zm9udC1zaXplOmNhbGMoMTZweCAqIHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkpfS5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7Zm9udC1zaXplOjE2cHh9Lm1hdC1tZGMtc2VsZWN0LXBhbmVsey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1zaXplLCAxNnB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtbGluZS1oZWlnaHQsIDI4cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtbGV0dGVyLXNwYWNpbmcsIDAuMDA5Mzc1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtdGV4dC10cmFuc2Zvcm0sIG5vbmUpO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1tZGMtc2VsZWN0ey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5MS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWx7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LXNpemUsIDE2cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1saW5lLWhlaWdodCwgMjhweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSk7bGluZS1oZWlnaHQ6MjRweH0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyey0tbWRjLWRpYWxvZy1zdWJoZWFkLWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLWRpYWxvZy1zdWJoZWFkLWxpbmUtaGVpZ2h0OjMycHg7LS1tZGMtZGlhbG9nLXN1YmhlYWQtc2l6ZToyMHB4Oy0tbWRjLWRpYWxvZy1zdWJoZWFkLXdlaWdodDo1MDA7LS1tZGMtZGlhbG9nLXN1YmhlYWQtdHJhY2tpbmc6MC4wMTI1ZW07LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0OjI0cHg7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1zaXplOjE2cHg7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC13ZWlnaHQ6NDAwOy0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMzEyNWVtfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItbGV0dGVyLXNwYWNpbmcsIDAuMDE3ODU3MTQyOWVtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy1mb3JtLWZpZWxkey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItbGluZS1oZWlnaHQsIDIwcHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxldHRlci1zcGFjaW5nLCAwLjAxNzg1NzE0MjllbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtZGVjb3JhdGlvbiwgaW5oZXJpdCk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tZGMtZm9ybS1maWVsZHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxpbmUtaGVpZ2h0LCAyMHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1sZXR0ZXItc3BhY2luZywgMC4wMTc4NTcxNDI5ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1zbGlkZXJ7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtc2l6ZToxNHB4Oy0tbWRjLXNsaWRlci1sYWJlbC1sYWJlbC10ZXh0LWxpbmUtaGVpZ2h0OjIycHg7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wMDcxNDI4NTcxZW07LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtd2VpZ2h0OjUwMH0ubWF0LW1kYy1tZW51LWNvbnRlbnR7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LXNpemUsIDE2cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1saW5lLWhlaWdodCwgMjhweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSk7bGluZS1oZWlnaHQ6MjRweH0ubWF0LW1kYy1tZW51LWNvbnRlbnQsLm1hdC1tZGMtbWVudS1jb250ZW50IC5tYXQtbWRjLW1lbnUtaXRlbSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0ey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5MS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1saXN0LWxpc3QtaXRlbS1sYWJlbC10ZXh0LWxpbmUtaGVpZ2h0OjI0cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1zaXplOjE2cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC10cmFja2luZzowLjAzMTI1ZW07LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC13ZWlnaHQ6NDAwOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtbGluZS1oZWlnaHQ6MjBweDstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtc2l6ZToxNHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC10cmFja2luZzowLjAxNzg1NzE0MjllbTstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtd2VpZ2h0OjQwMDstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0OjIwcHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LXNpemU6MTJweDstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMzMzMzMzMzMzZW07LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LXdlaWdodDo0MDB9Lm1kYy1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI4cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi4wMDkzNzVlbX0ubWF0LW1kYy1wYWdpbmF0b3J7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSwgMTJweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nLCAwLjAzMzMzMzMzMzNlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWNhcHRpb24tdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtc2VsZWN0LXZhbHVle2ZvbnQtc2l6ZToxMnB4fS5tZGMtdGFiey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGluZS1oZWlnaHQsIDM2cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LXdlaWdodCwgNTAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGV0dGVyLXNwYWNpbmcsIDAuMDg5Mjg1NzE0M2VtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtZGVjb3JhdGlvbiwgbm9uZSk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtdHJhbnNmb3JtLCBub25lKX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpey5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tkaXNwbGF5Om5vbmV9fS5tZGMtZm9ybS1maWVsZHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxpbmUtaGVpZ2h0LCAyMHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1sZXR0ZXItc3BhY2luZywgMC4wMTc4NTcxNDI5ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWRjLWJ1dHRvbnstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxpbmUtaGVpZ2h0LCAzNnB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC13ZWlnaHQsIDUwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxldHRlci1zcGFjaW5nLCAwLjA4OTI4NTcxNDNlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi10ZXh0LWRlY29yYXRpb24sIG5vbmUpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy1mYWItLWV4dGVuZGVkey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGluZS1oZWlnaHQsIDM2cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LXdlaWdodCwgNTAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGV0dGVyLXNwYWNpbmcsIDAuMDg5Mjg1NzE0M2VtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtZGVjb3JhdGlvbiwgbm9uZSk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyey0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtbGluZS1oZWlnaHQ6MjBweDstLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtc2l6ZToxNHB4Oy0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC13ZWlnaHQ6NDAwfS5tZGMtZGF0YS10YWJsZV9fY29udGVudHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxpbmUtaGVpZ2h0LCAyMHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1sZXR0ZXItc3BhY2luZywgMC4wMTc4NTcxNDI5ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWRjLWRhdGEtdGFibGVfX2NlbGx7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItbGV0dGVyLXNwYWNpbmcsIDAuMDE3ODU3MTQyOWVtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWxpbmUtaGVpZ2h0LCAyMnB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItZm9udC13ZWlnaHQsIDUwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWxldHRlci1zcGFjaW5nLCAwLjAwNzE0Mjg1NzFlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtbWRjLW9wdGlvbntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLW9wdGlvbjpob3Zlcjpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSwubWF0LW1kYy1vcHRpb246Zm9jdXM6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCksLm1hdC1tZGMtb3B0aW9uLm1hdC1tZGMtb3B0aW9uLWFjdGl2ZSwubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wcmltYXJ5IC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZDpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWF0LWFjY2VudCAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCkgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LXdhcm4gLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1vcHRncm91cC1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6I2IwYjBiMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y1N2MwMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojYjBiMGIwfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXozLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16NCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo1LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejYsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejcsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejgsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejh7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejksLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDlweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEwLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejExLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEyLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEzLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE0LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE1LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTVweCAyMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE2LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTgsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMThweCAyOHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE5LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIxLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMXB4IDMzcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjIsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejI0LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfS5tYXQtbWRjLWNhcmR7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWVsZXZhdGVkLWNhcmQtY29udGFpbmVyLWNvbG9yOiNmZmZ9Lm1hdC1tZGMtY2FyZC1vdXRsaW5lZHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1vdXRsaW5lZC1jYXJkLW91dGxpbmUtY29sb3I6I2UwZTBlMH0ubWF0LW1kYy1jYXJkLXN1YnRpdGxle2NvbG9yOiM2MTYxNjF9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyey0tbWRjLWxpbmVhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItZG90c3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyBlbmFibGUtYmFja2dyb3VuZD0nbmV3IDAgMCA1IDInIHhtbDpzcGFjZT0ncHJlc2VydmUnIHZpZXdCb3g9JzAgMCA1IDInIHByZXNlcnZlQXNwZWN0UmF0aW89J25vbmUgc2xpY2UnJTNFJTNDY2lyY2xlIGN4PScxJyBjeT0nMScgcj0nMScgZmlsbD0ncmdiYSgyNDUsIDEyNCwgMCwgMC4yNSknLyUzRSUzQy9zdmclM0UiKX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIgLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwgMTI0LCAwLCAwLjI1KX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudHstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItZG90c3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyBlbmFibGUtYmFja2dyb3VuZD0nbmV3IDAgMCA1IDInIHhtbDpzcGFjZT0ncHJlc2VydmUnIHZpZXdCb3g9JzAgMCA1IDInIHByZXNlcnZlQXNwZWN0UmF0aW89J25vbmUgc2xpY2UnJTNFJTNDY2lyY2xlIGN4PScxJyBjeT0nMScgcj0nMScgZmlsbD0ncmdiYSgyNTUsIDE1MiwgMCwgMC4yNSknLyUzRSUzQy9zdmclM0UiKX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAxNTIsIDAsIDAuMjUpfS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybnstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybiAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjQ0LCA2NywgNTQsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC4yNSl9Lm1hdC1tZGMtdG9vbHRpcHstLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1jb2xvcjojNjE2MTYxOy0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LWNvbG9yOndoaXRlfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyl9QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX19QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX19Lm1kYy10ZXh0LWZpZWxkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXIsLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSwubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtcmlwcGxlLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpob3ZlciAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtc3VyZmFjZS0taG92ZXIgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5OnZhcigtLW1kYy1yaXBwbGUtaG92ZXItb3BhY2l0eSwgMC4wNCl9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmUsLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3Jle29wYWNpdHk6dmFyKC0tbWRjLXJpcHBsZS1mb2N1cy1vcGFjaXR5LCAwLjEyKX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZXNtb2tlfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNDIpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXJpcHBsZS1jb2xvciwgdHJhbnNwYXJlbnQpfS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI0NSwgMTI0LCAwLCAwLjg3KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOmhvdmVyIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0LS12YWxpZGF0aW9uLW1zZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX19Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXIsLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2ljb24tLWxlYWRpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjMpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMyl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA2KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMDYpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5ne2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXh7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpHcmF5VGV4dH19Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZC5tZGMtdGV4dC1maWVsZC0tZmlsbGVke2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LW1kYy1mb3JtLWZpZWxkLWVycm9ye2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQ6aG92ZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjQ1LDEyNCwwLC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMTUyLDAsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNDQsNjcsNTQsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICNmZjk4MDApfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnJnYmEoMjU1LCAxNTIsIDAsIDAuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOmhvdmVyIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0LS12YWxpZGF0aW9uLW1zZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICNmZjk4MDApfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm46bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI0NCwgNjcsIDU0LCAwLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHQtLXZhbGlkYXRpb24tbXNne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9W2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e21pbi1oZWlnaHQ6NTZweH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4IC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse3RvcDoyOHB4fS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zley0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybTogdHJhbnNsYXRlWSggLTM0Ljc1cHgpIHNjYWxlKHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkpO3RyYW5zZm9ybTp2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtKX0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcjpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDoyNHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Lm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NCkpfS5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1pY29uLW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tZGMtbGlzdC1kaXZpZGVyOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOndoaXRlfS5tZGMtbGlzdC1kaXZpZGVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1kYy1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWRjLXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LW1kYy1zZWxlY3QtZGlzYWJsZWQgLm1hdC1tZGMtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjQ1LDEyNCwwLC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwxNTIsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjQ0LDY3LDU0LC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZCAubWF0LW1kYy1zZWxlY3QubWF0LW1kYy1zZWxlY3QtaW52YWxpZCAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNDQsNjcsNTQsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkIC5tYXQtbWRjLXNlbGVjdC5tYXQtbWRjLXNlbGVjdC1kaXNhYmxlZCAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tZGMtbWVudS1zdXJmYWNle2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpO2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTQpKX0ubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eTowLjM4fS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctbWV0YSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtZGVwcmVjYXRlZC1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX0ubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcnstLW1kYy1kaWFsb2ctY29udGFpbmVyLWNvbG9yOndoaXRlOy0tbWRjLWRpYWxvZy13aXRoLWRpdmlkZXItZGl2aWRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWRpYWxvZy1zdWJoZWFkLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZTBlMGUwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNlMGUwZTA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6IzIxMjEyMX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5Lm1hdC1tZGMtY2hpcC1zZWxlY3RlZCwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5Lm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtYWNjZW50Lm1hdC1tZGMtY2hpcC1zZWxlY3RlZCwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC1hY2NlbnQubWF0LW1kYy1jaGlwLWhpZ2hsaWdodGVkey0tbWRjLWNoaXAtZWxldmF0ZWQtY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hpcC1lbGV2YXRlZC1kaXNhYmxlZC1jb250YWluZXItY29sb3I6I2ZmOTgwMDstLW1kYy1jaGlwLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24tZGlzYWJsZWQtaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24tc2VsZWN0ZWQtaWNvbi1jb2xvcjp3aGl0ZX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC13YXJuLm1hdC1tZGMtY2hpcC1zZWxlY3RlZCwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC13YXJuLm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Lm1hdC1tZGMtY2hpcC1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6IzAwMH0ubWF0LW1kYy1jaGlwe2hlaWdodDozMnB4fS5tYXQtbWRjLXNsaWRlLXRvZ2dsZXstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXVuc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXVuc2VsZWN0ZWQtdHJhY2stY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2UwZTBlMDstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtdHJhY2stY29sb3I6I2UwZTBlMDstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojMjEyMTIxOy0tbWRjLXN3aXRjaC1oYW5kbGUtc3VyZmFjZS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM2MTYxNjE7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiNmZmZ9Lm1hdC1tZGMtc2xpZGUtdG9nZ2xlIC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZSAubWRjLXN3aXRjaC0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1zbGlkZS10b2dnbGUubWF0LXByaW1hcnl7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLWhhbmRsZS1jb2xvcjojZTY1MTAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC10cmFjay1jb2xvcjojZmZiNzRkfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtYWNjZW50ey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6I2ZmYjc0ZH0ubWF0LW1kYy1zbGlkZS10b2dnbGUubWF0LXdhcm57LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLWhhbmRsZS1jb2xvcjojYjcxYzFjOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6I2I3MWMxYzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2I3MWMxYzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtdHJhY2stY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZTU3MzczOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC10cmFjay1jb2xvcjojZTU3MzczfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZXstLW1kYy1zd2l0Y2gtc3RhdGUtbGF5ZXItc2l6ZTo0OHB4fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbiAubWRjLWZvcm0tZmllbGR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNTdjMDB9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmZjk4MDB9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXdhcm57LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNDQzMzZ9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW97cGFkZGluZzpjYWxjKCg0MHB4IC0gMjBweCkgLyAyKX0ubWF0LW1kYy1yYWRpby1idXR0b24gLm1kYy1yYWRpbyAubWRjLXJhZGlvX19iYWNrZ3JvdW5kOjpiZWZvcmV7dG9wOmNhbGMoLTEgKiAoNDBweCAtIDIwcHgpIC8gMik7bGVmdDpjYWxjKC0xICogKDQwcHggLSAyMHB4KSAvIDIpO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHh9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW8gLm1kYy1yYWRpb19fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO3JpZ2h0OmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO2xlZnQ6Y2FsYygoNDBweCAtIDQwcHgpIC8gMik7d2lkdGg6NDBweDtoZWlnaHQ6NDBweH0ubWF0LW1kYy1zbGlkZXJ7LS1tZGMtc2xpZGVyLWxhYmVsLWNvbnRhaW5lci1jb2xvcjpibGFjazstLW1kYy1zbGlkZXItbGFiZWwtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1zbGlkZXItZGlzYWJsZWQtaGFuZGxlLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS10cmFjay1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci1kaXNhYmxlZC1pbmFjdGl2ZS10cmFjay1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiMwMDA7LS1tYXQtbWRjLXNsaWRlci12YWx1ZS1pbmRpY2F0b3Itb3BhY2l0eTogMC42fS5tYXQtbWRjLXNsaWRlci5tYXQtcHJpbWFyeXstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2Y1N2MwMDstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2Y1N2MwMDstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMil9Lm1hdC1tZGMtc2xpZGVyLm1hdC1hY2NlbnR7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmZjk4MDA7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpfS5tYXQtbWRjLXNsaWRlci5tYXQtd2FybnstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2Y0NDMzNjstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMil9Lm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NCkpfS5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1pY29uLW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tZGMtbGlzdC1kaXZpZGVyOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOndoaXRlfS5tZGMtbGlzdC1kaXZpZGVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1kYy1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24sLm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtZGlzYWJsZWQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvciwubWF0LW1kYy1tZW51LXN1Ym1lbnUtaWNvbntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksLm1hdC1tZGMtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWRjLW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZGMtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC1jb2xvcjojNjE2MTYxOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWxlYWRpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRyYWlsaW5nLXN1cHBvcnRpbmctdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRyYWlsaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS1zZWxlY3RlZC10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpibGFjazstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC1sZWFkaW5nLWljb24tY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjpibGFjazstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItbGVhZGluZy1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItdHJhaWxpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLWxhYmVsLXRleHQtY29sb3I6IzIxMjEyMTstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMDQ7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZm9jdXMtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyfS5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjU3YzAwfS5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19zdGFydCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbCwubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fZW5kIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2ZmOTgwMDstLW1hdC1tZGMtcmFkaW8tcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1yYWRpby1jaGVja2VkLXJpcHBsZS1jb2xvcjogI2ZmOTgwMH0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19zdGFydCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbCwubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19lbmQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2ZmZjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1hdC1tZGMtcmFkaW8tcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1yYWRpby1jaGVja2VkLXJpcHBsZS1jb2xvcjogI2Y0NDMzNn0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fc3RhcnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWwsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX2VuZCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCwubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eToxfS5tYXQtbWRjLWxpc3QtYmFzZXstLW1kYy1saXN0LWxpc3QtaXRlbS1vbmUtbGluZS1jb250YWluZXItaGVpZ2h0OjQ4cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHdvLWxpbmUtY29udGFpbmVyLWhlaWdodDo2NHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRocmVlLWxpbmUtY29udGFpbmVyLWhlaWdodDo4OHB4fS5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctYXZhdGFyLm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmUsLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1jaGVja2JveC5tZGMtbGlzdC1pdGVtLS13aXRoLW9uZS1saW5lLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtbGlzdC1pdGVtLS13aXRoLW9uZS1saW5le2hlaWdodDo1NnB4fS5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctYXZhdGFyLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHdvLWxpbmVzLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctY2hlY2tib3gubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXMsLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHdvLWxpbmVze2hlaWdodDo3MnB4fS5tYXQtbWRjLXBhZ2luYXRvcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWRjLXBhZ2luYXRvci1pY29ue2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1tZGMtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZGMtcGFnaW5hdG9yLWZpcnN0LC5tYXQtbWRjLXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWRlY3JlbWVudCwubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWZpcnN0LC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItbGFzdHtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItaWNvbntmaWxsOnJnYmEoMCwwLDAsLjEyKX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHttaW4taGVpZ2h0OjQwcHh9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWZsZXggLm1hdC1tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjIwcHh9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zley0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybTogdHJhbnNsYXRlWSggLTI2Ljc1cHgpIHNjYWxlKHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkpO3RyYW5zZm9ybTp2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtKX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcjpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpIC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH0ubWF0LW1kYy10YWIsLm1hdC1tZGMtdGFiLWxpbmt7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLXRhYiAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbGluayAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1hdC1tZGMtdGFiLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWIubWF0LW1kYy10YWItZGlzYWJsZWQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbGluay5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLWxpbmsubWF0LW1kYy10YWItZGlzYWJsZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZjU3YzAwfS5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2Y1N2MwMCl9Lm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZmY5ODAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGFiLWluZGljYXRvci1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yLCAjZmY5ODAwKX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbmsgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVse2NvbG9yOiNmNDQzMzZ9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGFiLWluZGljYXRvci1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yLCAjZjQ0MzM2KX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnl7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICMwMDB9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnR7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICMwMDB9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4sLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybnstLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtYmFja2dyb3VuZC1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtZm9yZWdyb3VuZC1jb2xvcjogI2ZmZn0ubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tYXQtbWRjLXRhYi1oZWFkZXIgLm1kYy10YWJ7aGVpZ2h0OjQ4cHh9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1mb3JtLWZpZWxke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1hdC1tZGMtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1tZGMtY2hlY2tib3gubWF0LXByaW1hcnl7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCl9Lm1hdC1tZGMtY2hlY2tib3gubWF0LXByaW1hcnkgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1hdC1tZGMtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMSl9Lm1hdC1tZGMtY2hlY2tib3gubWF0LXByaW1hcnkgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LW1kYy1jaGVja2JveC5tYXQtYWNjZW50ey0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1hY2NlbnQgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1hdC1tZGMtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMSl9Lm1hdC1tZGMtY2hlY2tib3gubWF0LWFjY2VudCAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC13YXJuey0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmZmOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC13YXJuIC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjEpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC13YXJuIC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1tZGMtY2hlY2tib3gtZGlzYWJsZWQgbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94e3BhZGRpbmc6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXJpcHBsZS1zaXplLCA0MHB4KSAtIDE4cHgpIC8gMik7bWFyZ2luOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkgLSA0MHB4KSAvIDIpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHt0b3A6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXJpcHBsZS1zaXplLCA0MHB4KSAtIDE4cHgpIC8gMik7bGVmdDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtcmlwcGxlLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9se3RvcDpjYWxjKCg0MHB4IC0gdmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSkgLyAyKTtyaWdodDpjYWxjKCg0MHB4IC0gdmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSkgLyAyKTtsZWZ0OmNhbGMoKDQwcHggLSB2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpKSAvIDIpO3dpZHRoOnZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCk7aGVpZ2h0OnZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCl9Lm1hdC1tZGMtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtYnV0dG9uLm1hdC13YXJuey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy10ZXh0LWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmZmOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfS5tYXQtbWRjLXJhaXNlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItZWxldmF0aW9uOjB9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1vdXRsaW5lZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1kYy1idXR0b24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpfS5tYXQtbWRjLWJ1dHRvbi5tYXQtd2FybiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LW1kYy1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXtoZWlnaHQ6MzZweH0ubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDR9Lm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWljb24tYnV0dG9uLWRpc2FibGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1hdC1tZGMtZmFiLC5tYXQtbWRjLW1pbmktZmFiey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1mYWI6aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtbWluaS1mYWI6aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDR9Lm1hdC1tZGMtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtZmFiOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1taW5pLWZhYjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWRjLW1pbmktZmFiLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1mYWIubWF0LWFjY2VudCwubWF0LW1kYy1taW5pLWZhYi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1mYWIubWF0LXdhcm4sLm1hdC1tZGMtbWluaS1mYWIubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpfS5tYXQtbWRjLWZhYi5tYXQtdW50aGVtZWQsLm1hdC1tZGMtbWluaS1mYWIubWF0LXVudGhlbWVkey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1mYWItaWNvbi1jb2xvcjojMDAwOy0tbWF0LW1kYy1mYWItY29sb3I6ICMwMDB9Lm1hdC1tZGMtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWRjLW1pbmktZmFiLm1hdC1wcmltYXJ5ey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6I2Y1N2MwMDstLW1kYy1mYWItaWNvbi1jb2xvcjojMDAwOy0tbWF0LW1kYy1mYWItY29sb3I6ICMwMDB9Lm1hdC1tZGMtZmFiLm1hdC1hY2NlbnQsLm1hdC1tZGMtbWluaS1mYWIubWF0LWFjY2VudHstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfS5tYXQtbWRjLWZhYi5tYXQtd2FybiwubWF0LW1kYy1taW5pLWZhYi5tYXQtd2FybnstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmFiLWljb24tY29sb3I6I2ZmZjstLW1hdC1tZGMtZmFiLWNvbG9yOiAjZmZmfS5tYXQtbWRjLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtbWRjLW1pbmktZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZhYi1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtbWRjLWZhYi1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyey0tbWF0LW1kYy1zbmFjay1iYXItYnV0dG9uLWNvbG9yOiAjZmY5ODAwOy0tbWRjLXNuYWNrYmFyLWNvbnRhaW5lci1jb2xvcjojMzMzMzMzOy0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODcpfS5tZGMtZGF0YS10YWJsZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjZmZmKTtib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX3Jvd3tiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9Lm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjZmZmKX0ubWRjLWRhdGEtdGFibGVfX3Jvdy0tc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwgMTI0LCAwLCAwLjA0KX0ubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1zZWxlY3QtLW91dGxpbmVkOm5vdCgubWRjLXNlbGVjdC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLXNlbGVjdC0tb3V0bGluZWQ6bm90KC5tZGMtc2VsZWN0LS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLXNlbGVjdC0tb3V0bGluZWQ6bm90KC5tZGMtc2VsZWN0LS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tZGMtZGF0YS10YWJsZV9fY2VsbCwubWRjLWRhdGEtdGFibGVfX2hlYWRlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb257Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tZGMtZGF0YS10YWJsZV9fcm93Om5vdCgubWRjLWRhdGEtdGFibGVfX3Jvdy0tc2VsZWN0ZWQpOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KX0ubWRjLWRhdGEtdGFibGVfX2hlYWRlci1jZWxse2NvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyl9Lm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXRvdGFsLC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLWxhYmVsLC5tZGMtZGF0YS10YWJsZV9fY2VsbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tYXQtbWRjLXRhYmxle2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1kYy10YWJsZSAubWRjLWRhdGEtdGFibGVfX3Jvd3toZWlnaHQ6NTJweH0ubWF0LW1kYy10YWJsZSAubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb257bWluLWhlaWdodDo1MnB4fS5tYXQtbWRjLXRhYmxlIC5tZGMtZGF0YS10YWJsZV9faGVhZGVyLXJvd3toZWlnaHQ6NTZweH0ubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyey0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnR7LS1tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm57LS1tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjQ0MzM2fS5tYXQtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1iYWRnZS5tYXQtYmFkZ2V7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y1N2MwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojYmRiZGJkO2NvbG9yOiM3NTc1NzV9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggI2UwZTBlMH1bZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtsaW5lLWhlaWdodDo0OHB4fS5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciwubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50LC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6IzIxMjEyMTtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXByZXZpZXd7Y29sb3I6cmdiYSgwLDAsMCwuMjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ1LDEyNCwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXsubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXsubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojZjU3YzAwfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1pbm5lcltkaXNhYmxlZF17Y29sb3I6Izc1NzU3NX0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjhweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX3JpcHBsZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi10b3A6MHB4O21hcmdpbi1ib3R0b206MHB4O21hcmdpbi1yaWdodDowcHg7bWFyZ2luLWxlZnQ6MHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDBweDtsZWZ0OjUwJTt3aWR0aDo0MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXR7ZGlzcGxheTpub25lfS5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6I2ZmZn19Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntoZWlnaHQ6NDhweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo2NHB4fS5tYXQtaWNvbi5tYXQtcHJpbWFyeXtjb2xvcjojZjU3YzAwfS5tYXQtaWNvbi5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1pY29uLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kcmF3ZXItc2lkZXtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOiM2MTYxNjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6IzIxMjEyMX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcntoZWlnaHQ6NzJweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlciwubWF0LXZlcnRpY2FsLXN0ZXBwZXItaGVhZGVye3BhZGRpbmc6MjRweCAyNHB4fS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7dG9wOi0xNnB4O2JvdHRvbTotMTZweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZXt0b3A6MzZweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7dG9wOjM2cHh9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojNjE2MTYxfS5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNmNTdjMDA7Y29sb3I6IzIxMjEyMX0ubWF0LXRvb2xiYXIubWF0LXByaW1hcnl7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyLm1hdC1hY2NlbnR7YmFja2dyb3VuZDojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyLm1hdC13YXJue2JhY2tncm91bmQ6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lLC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC12YWx1ZSwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjppbmhlcml0fS5tYXQtdG9vbGJhciAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NjRweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo2NHB4fUBtZWRpYShtYXgtd2lkdGg6IDU5OXB4KXsubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjU2cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NTZweH19Lm1hdC10cmVle2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Y29sb3I6IzIxMjEyMX0ubWF0LXRyZWUtbm9kZXttaW4taGVpZ2h0OjQ4cHh9Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZjU3YzAwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6IzAwMH0ubWF0LXN0cm9rZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2NvbG9yOiMyMTIxMjE7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1mYWIubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiwubWF0LWZhYi5tYXQtd2FybiwubWF0LW1pbmktZmFiLm1hdC13YXJue2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiwubWF0LWZhYi5tYXQtd2FybiwubWF0LW1pbmktZmFiLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWZsYXQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC13YXJuey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy10ZXh0LWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmZmOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItZWxldmF0aW9uOjB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjU3YzAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1vdXRsaW5lZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24sLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtd2FybiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDR9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmNTdjMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWljb24tYnV0dG9uLWRpc2FibGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXtoZWlnaHQ6MzZweH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1hdC1vcHRpb257Y29sb3I6IzIxMjEyMX0ubWF0LW9wdGlvbjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpO2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNTdjMDB9Lm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2Y0NDMzNn0ubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtjb2xvcjojNjE2MTYxfS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZjU3YzAwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZjU3YzAwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2ZmOTgwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2ZmOTgwMH0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNiMGIwYjB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2IwYjBiMH0ubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejN7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo0e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDVweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Nntib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16N3tib3gtc2hhZG93OjBweCA0cHggNXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggN3B4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTZweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTB7Ym94LXNoYWRvdzowcHggNnB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTN7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MHB4IDhweCA5cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMjhweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTZ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowcHggOXB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzRweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTl7Ym94LXNoYWRvdzowcHggOXB4IDEycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMntib3gtc2hhZG93OjBweCAxMHB4IDE0cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlcntkaXNwbGF5Om5vbmV9Lm1hdC1jYXJke2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLm1hdC1jYXJkLWZsYXQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOiM2MTYxNjF9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZGRlYmZ9Lm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZkZGViZn0ubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmZTViZn0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmU1YmZ9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmY2QwY2R9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZjZDBjZH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSwubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZjU3YzAwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSwubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNmZjk4MDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSwubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtcHJlZml4LC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtc3VmZml4e2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoOTcsOTcsOTcsLjYpfS5tYXQtaGludHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1oaW50e2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjQyKSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiMyMTIxMjF9Lm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM3NTc1NzV9Lm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXNlbGVjdC1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1zZWxlY3QtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojZmZmfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiNmZmYgIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6I2ZmZn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiMyMTIxMjF9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVke29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOjphZnRlcntiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmOTgwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4yKX0ubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMil9Lm1hdC1zbGlkZXI6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3ZlciAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6IzIxMjEyMX0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWVudS1zdWJtZW51LWljb24sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLC5tYXQtbWVudS1zdWJtZW51LWljb257Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiM3NTc1NzV9Lm1hdC1saXN0LW9wdGlvbjpob3ZlciwubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cywubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOiM2MTYxNjF9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH0ubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMil9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLW5hdi1iYXIsLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Y29sb3I6IzIxMjEyMX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjojNzU3NTc1fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiMyMTIxMjF9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6Izc1NzU3NX0ubWF0LXRhYi1ncm91cFtjbGFzcyo9bWF0LWJhY2tncm91bmQtXT4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhcltjbGFzcyo9bWF0LWJhY2tncm91bmQtXXtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLXRvcDpub25lfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTY3LDM4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE2NywzOCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Lm1hdC1zbmFjay1iYXItY29udGFpbmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2JhY2tncm91bmQ6IzMyMzIzMjtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6I2ZmOTgwMH0ubWF0LXRhYmxle2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCxtYXQtaGVhZGVyLXJvdyxtYXQtcm93LG1hdC1mb290ZXItcm93LFttYXQtaGVhZGVyLXJvd10sW21hdC1yb3ddLFttYXQtZm9vdGVyLXJvd10sLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fW1hdC1yb3csbWF0LWhlYWRlci1yb3csbWF0LWZvb3Rlci1yb3csdGgubWF0LWhlYWRlci1jZWxsLHRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhlYWRlci1jZWxse2NvbG9yOiM2MTYxNjF9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6IzIxMjEyMX0ubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNTdjMDB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93Om5vbmV9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6IzIxMjEyMTtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICNlMGUwZTB9W2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiM2MTYxNjF9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH0ubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNzU3NTc1fS5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMCwwLDAsLjI0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzo4cHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjBweDttYXJnaW4tYm90dG9tOjBweDttYXJnaW4tcmlnaHQ6MHB4O21hcmdpbi1sZWZ0OjBweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQwcHg7bGVmdDo1MCU7d2lkdGg6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0e2Rpc3BsYXk6bm9uZX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZ9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NjRweH0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWRdKSwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9ZmFsc2Vde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6ZGVmYXVsdH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjojNjE2MTYxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiMyMTIxMjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCwubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fS5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW1kYy1vcHRpb257Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1vcHRpb246aG92ZXI6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCksLm1hdC1tZGMtb3B0aW9uOmZvY3VzOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpLC5tYXQtbWRjLW9wdGlvbi5tYXQtbWRjLW9wdGlvbi1hY3RpdmUsLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtcHJpbWFyeSAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCkgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1hdC1hY2NlbnQgLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2ZmOTgwMCl9Lm1hdC13YXJuIC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZDpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2NvbG9yOiM2MTYxNjF9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2NvbG9yOiNiMGIwYjB9Lm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmNTdjMDB9Lm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2IwYjBiMH0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1lbGV2YXRpb24tejAsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejB7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejQsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16NSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo2LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA3cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo4LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo5LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo5e2JveC1zaGFkb3c6MHB4IDVweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTB7Ym94LXNoYWRvdzowcHggNnB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTF7Ym94LXNoYWRvdzowcHggNnB4IDdweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDExcHggMTVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMiwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTJ7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTN7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTR7Ym94LXNoYWRvdzowcHggN3B4IDlweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE0cHggMjFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTV7Ym94LXNoYWRvdzowcHggOHB4IDlweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNiwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTZ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTcsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejE3e2JveC1zaGFkb3c6MHB4IDhweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTdweCAyNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxOHtib3gtc2hhZG93OjBweCA5cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTl7Ym94LXNoYWRvdzowcHggOXB4IDEycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjAsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIwe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIwcHggMzFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjF7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIyLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyMntib3gtc2hhZG93OjBweCAxMHB4IDE0cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjMsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIze2JveC1zaGFkb3c6MHB4IDExcHggMTRweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIzcHggMzZweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjR7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1jYXJke2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1lbGV2YXRlZC1jYXJkLWNvbnRhaW5lci1jb2xvcjojZmZmfS5tYXQtbWRjLWNhcmQtb3V0bGluZWR7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtb3V0bGluZWQtY2FyZC1vdXRsaW5lLWNvbG9yOiNlMGUwZTB9Lm1hdC1tZGMtY2FyZC1zdWJ0aXRsZXtjb2xvcjojNjE2MTYxfS5tYXQtbWRjLXByb2dyZXNzLWJhcnstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLXByb2dyZXNzLWJhciAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjQ1LCAxMjQsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsIDEyNCwgMCwgMC4yNSl9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnR7LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2ZmOTgwMH0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjU1LCAxNTIsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMTUyLCAwLCAwLjI1KX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm57LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1kb3Rze2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeD0nMHB4JyB5PScwcHgnIGVuYWJsZS1iYWNrZ3JvdW5kPSduZXcgMCAwIDUgMicgeG1sOnNwYWNlPSdwcmVzZXJ2ZScgdmlld0JveD0nMCAwIDUgMicgcHJlc2VydmVBc3BlY3RSYXRpbz0nbm9uZSBzbGljZSclM0UlM0NjaXJjbGUgY3g9JzEnIGN5PScxJyByPScxJyBmaWxsPSdyZ2JhKDI0NCwgNjcsIDU0LCAwLjI1KScvJTNFJTNDL3N2ZyUzRSIpfS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybiAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuMjUpfS5tYXQtbWRjLXRvb2x0aXB7LS1tZGMtcGxhaW4tdG9vbHRpcC1jb250YWluZXItY29sb3I6IzYxNjE2MTstLW1kYy1wbGFpbi10b29sdGlwLXN1cHBvcnRpbmctdGV4dC1jb2xvcjp3aGl0ZX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9fUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9fS5tZGMtdGV4dC1maWVsZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLWxlYWRpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmUsLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXJpcHBsZS1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6aG92ZXIgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSwubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtcmlwcGxlLXN1cmZhY2UtLWhvdmVyIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTp2YXIoLS1tZGMtcmlwcGxlLWhvdmVyLW9wYWNpdHksIDAuMDQpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5OnZhcigtLW1kYy1yaXBwbGUtZm9jdXMtb3BhY2l0eSwgMC4xMil9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6d2hpdGVzbW9rZX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjQyKX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1yaXBwbGUtY29sb3IsIHRyYW5zcGFyZW50KX0ubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyNDUsIDEyNCwgMCwgMC44Nyl9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX19QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5ne2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zKX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjMpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNil9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA2KX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlciwubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6R3JheVRleHR9fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQubWRjLXRleHQtZmllbGQtLWZpbGxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkOmhvdmVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDI0NSwxMjQsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDE1MiwwLC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjQ0LDY3LDU0LC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2ZmOTgwMCl9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwgMTUyLCAwLCAwLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOmhvdmVyIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0LS12YWxpZGF0aW9uLW1zZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2JhKDAsMCwwLDApfVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9Lm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHttaW4taGVpZ2h0OjU2cHh9Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZmxleCAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHt0b3A6MjhweH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXstLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoIC0zNC43NXB4KSBzY2FsZSh2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtZmxvYXRpbmctbGFiZWwtc2NhbGUsIDAuNzUpKTt0cmFuc2Zvcm06dmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybSl9Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6MjRweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbDpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tZGMtbWVudS1zdXJmYWNle2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpO2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTQpKX0ubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eTowLjM4fS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctbWV0YSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtZGVwcmVjYXRlZC1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX0ubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5tYXQtbWRjLXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI0NSwxMjQsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNTUsMTUyLDAsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQgLm1hdC1tZGMtc2VsZWN0Lm1hdC1tZGMtc2VsZWN0LWludmFsaWQgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjQ0LDY3LDU0LC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZCAubWF0LW1kYy1zZWxlY3QubWF0LW1kYy1zZWxlY3QtZGlzYWJsZWQgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWRjLW1lbnUtc3VyZmFjZXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjZmZmKTtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tZGMtbGlzdC1pdGVtX19zZWNvbmRhcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1zZWNvbmRhcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjU0KSl9Lm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWljb24tb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19jb250ZW50LC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fZW5ke29wYWNpdHk6MC4zOH0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zZWNvbmRhcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLW1ldGEgLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLWRlcHJlY2F0ZWQtbGlzdC1ncm91cF9fc3ViaGVhZGVye2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWRpdmlkZXI6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6d2hpdGV9Lm1kYy1saXN0LWRpdmlkZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXJ7LS1tZGMtZGlhbG9nLWNvbnRhaW5lci1jb2xvcjp3aGl0ZTstLW1kYy1kaWFsb2ctd2l0aC1kaXZpZGVyLWRpdmlkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1kaWFsb2ctc3ViaGVhZC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2UwZTBlMDstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZTBlMGUwOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLXRyYWlsaW5nLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOiMyMTIxMjF9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2Y1N2MwMDstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWF0LWFjY2VudC5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtYWNjZW50Lm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfS5tYXQtbWRjLWNoaXAtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1tZGMtY2hpcHtoZWlnaHQ6MzJweH0ubWF0LW1kYy1zbGlkZS10b2dnbGV7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC1zZWxlY3RlZC10cmFjay1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZTBlMGUwOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZTBlMGUwOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtaGFuZGxlLXN1cmZhY2UtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojNjE2MTYxOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZmY7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiNmZmY7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZSAubWRjLWZvcm0tZmllbGR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1zbGlkZS10b2dnbGUgLm1kYy1zd2l0Y2gtLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5ey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6I2ZmYjc0ZH0ubWF0LW1kYy1zbGlkZS10b2dnbGUubWF0LWFjY2VudHstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLWhhbmRsZS1jb2xvcjojZTY1MTAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojZTY1MTAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiNmZmI3NGR9Lm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hdC13YXJuey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6I2U1MzkzNTstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2U1MzkzNTstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6I2I3MWMxYzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNiNzFjMWM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiNiNzFjMWM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6I2U1NzM3M30ubWF0LW1kYy1zbGlkZS10b2dnbGV7LS1tZGMtc3dpdGNoLXN0YXRlLWxheWVyLXNpemU6NDhweH0ubWF0LW1kYy1yYWRpby1idXR0b24gLm1kYy1mb3JtLWZpZWxke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjU3YzAwfS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwfS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC13YXJuey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjQ0MzM2fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbiAubWRjLXJhZGlve3BhZGRpbmc6Y2FsYygoNDBweCAtIDIwcHgpIC8gMil9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW8gLm1kYy1yYWRpb19fYmFja2dyb3VuZDo6YmVmb3Jle3RvcDpjYWxjKC0xICogKDQwcHggLSAyMHB4KSAvIDIpO2xlZnQ6Y2FsYygtMSAqICg0MHB4IC0gMjBweCkgLyAyKTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbiAubWRjLXJhZGlvIC5tZGMtcmFkaW9fX25hdGl2ZS1jb250cm9se3RvcDpjYWxjKCg0MHB4IC0gNDBweCkgLyAyKTtyaWdodDpjYWxjKCg0MHB4IC0gNDBweCkgLyAyKTtsZWZ0OmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHh9Lm1hdC1tZGMtc2xpZGVyey0tbWRjLXNsaWRlci1sYWJlbC1jb250YWluZXItY29sb3I6YmxhY2s7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtc2xpZGVyLWRpc2FibGVkLWhhbmRsZS1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci1kaXNhYmxlZC1hY3RpdmUtdHJhY2stY29sb3I6IzAwMDstLW1kYy1zbGlkZXItZGlzYWJsZWQtaW5hY3RpdmUtdHJhY2stY29sb3I6IzAwMDstLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWF0LW1kYy1zbGlkZXItdmFsdWUtaW5kaWNhdG9yLW9wYWNpdHk6IDAuNn0ubWF0LW1kYy1zbGlkZXIubWF0LXByaW1hcnl7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2Y1N2MwMDstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpfS5tYXQtbWRjLXNsaWRlci5tYXQtYWNjZW50ey0tbWRjLXNsaWRlci1oYW5kbGUtY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItZm9jdXMtaGFuZGxlLWNvbG9yOiNmZjk4MDA7LS1tZGMtc2xpZGVyLWhvdmVyLWhhbmRsZS1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci1hY3RpdmUtdHJhY2stY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItaW5hY3RpdmUtdHJhY2stY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWFjdGl2ZS1jb250YWluZXItY29sb3I6IzAwMDstLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWluYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWF0LW1kYy1zbGlkZXItcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1zbGlkZXItaG92ZXItcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjA1KTstLW1hdC1tZGMtc2xpZGVyLWZvY3VzLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDE1MiwgMCwgMC4yKX0ubWF0LW1kYy1zbGlkZXIubWF0LXdhcm57LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2Y0NDMzNjstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojZmZmOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpfS5tZGMtbWVudS1zdXJmYWNle2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpO2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTQpKX0ubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eTowLjM4fS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctbWV0YSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtZGVwcmVjYXRlZC1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX0ubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1kYy1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWRjLW1lbnUtc3VibWVudS1pY29uLC5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWRpc2FibGVkLW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tYXQtbWRjLW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb257Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWRjLW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1kYy1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWRjLW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1tZGMtbGlzdC1iYXNley0tbWRjLWxpc3QtbGlzdC1pdGVtLWxhYmVsLXRleHQtY29sb3I6IzIxMjEyMTstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtY29sb3I6IzYxNjE2MTstLW1kYy1saXN0LWxpc3QtaXRlbS1sZWFkaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtbGlzdC1saXN0LWl0ZW0tc2VsZWN0ZWQtdHJhaWxpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtbGVhZGluZy1pY29uLWNvbG9yOmJsYWNrOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLWxlYWRpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLXRyYWlsaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowLjA0Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMn0ubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y1N2MwMDstLW1hdC1tZGMtcmFkaW8tcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1yYWRpby1jaGVja2VkLXJpcHBsZS1jb2xvcjogI2Y1N2MwMH0ubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWwsLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX2VuZCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmZjk4MDB9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fc3RhcnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWwsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fZW5kIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiNmZmY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCl9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNDQzMzZ9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVsLC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19lbmQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQsLm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjojZjU3YzAwfS5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjojZjU3YzAwfS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fZW5ke29wYWNpdHk6MX0ubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tb25lLWxpbmUtY29udGFpbmVyLWhlaWdodDo0OHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXR3by1saW5lLWNvbnRhaW5lci1oZWlnaHQ6NjRweDstLW1kYy1saXN0LWxpc3QtaXRlbS10aHJlZS1saW5lLWNvbnRhaW5lci1oZWlnaHQ6ODhweH0ubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWF2YXRhci5tZGMtbGlzdC1pdGVtLS13aXRoLW9uZS1saW5lLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctY2hlY2tib3gubWRjLWxpc3QtaXRlbS0td2l0aC1vbmUtbGluZSwubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24ubWRjLWxpc3QtaXRlbS0td2l0aC1vbmUtbGluZXtoZWlnaHQ6NTZweH0ubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWF2YXRhci5tZGMtbGlzdC1pdGVtLS13aXRoLXR3by1saW5lcywubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWNoZWNrYm94Lm1kYy1saXN0LWl0ZW0tLXdpdGgtdHdvLWxpbmVzLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtbGlzdC1pdGVtLS13aXRoLXR3by1saW5lc3toZWlnaHQ6NzJweH0ubWF0LW1kYy1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW1kYy1wYWdpbmF0b3ItaWNvbntmaWxsOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1kYy1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtbWRjLXBhZ2luYXRvci1pbmNyZW1lbnR7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpO2JvcmRlci1yaWdodDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLXBhZ2luYXRvci1maXJzdCwubWF0LW1kYy1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1pbmNyZW1lbnQsLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1maXJzdCwubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWljb257ZmlsbDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7bWluLWhlaWdodDo0MHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4IC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse3RvcDoyMHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXstLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoIC0yNi43NXB4KSBzY2FsZSh2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtZmxvYXRpbmctbGFiZWwtc2NhbGUsIDAuNzUpKTt0cmFuc2Zvcm06dmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybSl9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1kYy1wYWdpbmF0b3IgLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbDpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKSAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1tZGMtcGFnaW5hdG9yLWNvbnRhaW5lcnttaW4taGVpZ2h0OjU2cHh9Lm1hdC1tZGMtdGFiLC5tYXQtbWRjLXRhYi1saW5re2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy10YWIgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWxpbmsgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tYXQtbWRjLXRhYi5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWxpbmsubWF0LW1kYy10YWItZGlzYWJsZWQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1saW5rLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2Y1N2MwMH0ubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10YWItaW5kaWNhdG9yLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3IsICNmNTdjMDApfS5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2ZmOTgwMH0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2ZmOTgwMCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbmsgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZjQ0MzM2fS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2Y0NDMzNil9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjU3YzAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm57LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICNmZmZ9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWF0LW1kYy10YWItaGVhZGVyIC5tZGMtdGFie2hlaWdodDo0OHB4fS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojMDAwfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1wcmltYXJ5ey0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1wcmltYXJ5IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjEpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1wcmltYXJ5IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1tZGMtY2hlY2tib3gubWF0LWFjY2VudHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1jaGVja2JveC5tYXQtYWNjZW50IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjEpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1hY2NlbnQgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LW1kYy1jaGVja2JveC5tYXQtd2FybnstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2ZmZjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1jaGVja2JveC5tYXQtd2FybiAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWF0LW1kYy1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4xKX0ubWF0LW1kYy1jaGVja2JveC5tYXQtd2FybiAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtbWRjLWNoZWNrYm94LWRpc2FibGVkIGxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveHtwYWRkaW5nOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1yaXBwbGUtc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpO21hcmdpbjpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpIC0gNDBweCkgLyAyKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7dG9wOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1yaXBwbGUtc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXJpcHBsZS1zaXplLCA0MHB4KSAtIDE4cHgpIC8gMil9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbHt0b3A6Y2FsYygoNDBweCAtIHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkpIC8gMik7cmlnaHQ6Y2FsYygoNDBweCAtIHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkpIC8gMik7bGVmdDpjYWxjKCg0MHB4IC0gdmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSkgLyAyKTt3aWR0aDp2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpO2hlaWdodDp2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpfS5tYXQtbWRjLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLWJ1dHRvbi5tYXQtd2FybnstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1tZGMtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtdGV4dC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmOTgwMDstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtZmlsbGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWVsZXZhdGlvbjowfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbnstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1kaXNhYmxlZC1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtYnV0dG9uLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnksLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMSl9Lm1hdC1tZGMtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2ZmOTgwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDE1MiwgMCwgMC4xKX0ubWF0LW1kYy1idXR0b24ubWF0LXdhcm4sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLXJhaXNlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtd2FybnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Lm1hdC1tZGMtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7aGVpZ2h0OjM2cHh9Lm1hdC1tZGMtaWNvbi1idXR0b257LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfS5tYXQtbWRjLWljb24tYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtaWNvbi1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC13YXJuey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MTJweH0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0OHB4O21heC13aWR0aDo0OHB4fS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHg7bWFyZ2luLXJpZ2h0OjRweDttYXJnaW4tbGVmdDo0cHh9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tYXQtbWRjLWZhYiwubWF0LW1kYy1taW5pLWZhYnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW1pbmktZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWZhYjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtbWluaS1mYWI6YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSwubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtZmFiLm1hdC1hY2NlbnQsLm1hdC1tZGMtbWluaS1mYWIubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtZmFiLm1hdC13YXJuLC5tYXQtbWRjLW1pbmktZmFiLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LW1kYy1mYWIubWF0LXVudGhlbWVkLC5tYXQtbWRjLW1pbmktZmFiLm1hdC11bnRoZW1lZHstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfS5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSwubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfS5tYXQtbWRjLWZhYi5tYXQtYWNjZW50LC5tYXQtbWRjLW1pbmktZmFiLm1hdC1hY2NlbnR7LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWZhYi1pY29uLWNvbG9yOiMwMDA7LS1tYXQtbWRjLWZhYi1jb2xvcjogIzAwMH0ubWF0LW1kYy1mYWIubWF0LXdhcm4sLm1hdC1tZGMtbWluaS1mYWIubWF0LXdhcm57LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZhYi1pY29uLWNvbG9yOiNmZmY7LS1tYXQtbWRjLWZhYi1jb2xvcjogI2ZmZn0ubWF0LW1kYy1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LW1kYy1taW5pLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1mYWItaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LW1kYy1mYWItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lcnstLW1hdC1tZGMtc25hY2stYmFyLWJ1dHRvbi1jb2xvcjogI2ZmOTgwMDstLW1kYy1zbmFja2Jhci1jb250YWluZXItY29sb3I6IzMzMzMzMzstLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KX0ubWRjLWRhdGEtdGFibGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7Ym9yZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1kYy1kYXRhLXRhYmxlX19yb3d7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5tZGMtZGF0YS10YWJsZV9faGVhZGVyLWNlbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZil9Lm1kYy1kYXRhLXRhYmxlX19yb3ctLXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsIDEyNCwgMCwgMC4wNCl9Lm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2Utc2VsZWN0LS1vdXRsaW5lZDpub3QoLm1kYy1zZWxlY3QtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1zZWxlY3QtLW91dGxpbmVkOm5vdCgubWRjLXNlbGVjdC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1zZWxlY3QtLW91dGxpbmVkOm5vdCgubWRjLXNlbGVjdC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX2NlbGwsLm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9ue2JvcmRlci10b3AtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX3Jvdzpub3QoLm1kYy1kYXRhLXRhYmxlX19yb3ctLXNlbGVjdGVkKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNCl9Lm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi10b3RhbCwubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1sYWJlbCwubWRjLWRhdGEtdGFibGVfX2NlbGx7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWF0LW1kYy10YWJsZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZGMtdGFibGUgLm1kYy1kYXRhLXRhYmxlX19yb3d7aGVpZ2h0OjUycHh9Lm1hdC1tZGMtdGFibGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9ue21pbi1oZWlnaHQ6NTJweH0ubWF0LW1kYy10YWJsZSAubWRjLWRhdGEtdGFibGVfX2hlYWRlci1yb3d7aGVpZ2h0OjU2cHh9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lcnstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50ey0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2ZmOTgwMH0ubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuey0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNn0ubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNTdjMDB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93Om5vbmV9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6IzIxMjEyMTtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICNlMGUwZTB9W2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiM2MTYxNjF9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH0ubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNzU3NTc1fS5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMCwwLDAsLjI0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzo4cHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjBweDttYXJnaW4tYm90dG9tOjBweDttYXJnaW4tcmlnaHQ6MHB4O21hcmdpbi1sZWZ0OjBweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQwcHg7bGVmdDo1MCU7d2lkdGg6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0e2Rpc3BsYXk6bm9uZX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZ9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NjRweH0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWRdKSwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9ZmFsc2Vde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6ZGVmYXVsdH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjojNjE2MTYxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiMyMTIxMjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCwubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fS5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fWJvZHl7b3ZlcmZsb3c6aGlkZGVufS5jZGstb3ZlcmxheS1jb250YWluZXJ7Y29udGFpbjpzdHJpY3R9YTpub3QoLm1kYy1idXR0b24sLm1kYy1pY29uLWJ1dHRvbil7Y29sb3I6IzE5NzZkMn1hOm5vdCgubWRjLWJ1dHRvbiwubWRjLWljb24tYnV0dG9uKTp2aXNpdGVke2NvbG9yOiM3YjFmYTJ9Ym9keSBhLGJvZHkgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgYSxib2R5LmRhcmstbW9kZSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXstLXRiLWljb24tc2l6ZTogMjRweDstLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1sZXR0ZXItc3BhY2luZzogbm9ybWFsfWJvZHkgYVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24sYm9keSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24sYm9keS5kYXJrLW1vZGUgYVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24sYm9keS5kYXJrLW1vZGUgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2VbbWF0LWljb24tYnV0dG9uXS5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn1ib2R5IGFbbWF0LWljb24tYnV0dG9uXS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQsYm9keSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCxib2R5LmRhcmstbW9kZSBhW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0LGJvZHkuZGFyay1tb2RlIGJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0e2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Ym9keSBhIG1hdC1pY29uLm1hdC1pY29uLGJvZHkgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgbWF0LWljb24ubWF0LWljb24sYm9keS5kYXJrLW1vZGUgYSBtYXQtaWNvbi5tYXQtaWNvbixib2R5LmRhcmstbW9kZSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSBtYXQtaWNvbi5tYXQtaWNvbntmbGV4LXNocmluazowfWJvZHkgYSBtYXQtaWNvbi5tYXQtaWNvbixib2R5IGEgc3ZnLGJvZHkgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgbWF0LWljb24ubWF0LWljb24sYm9keSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSBzdmcsYm9keS5kYXJrLW1vZGUgYSBtYXQtaWNvbi5tYXQtaWNvbixib2R5LmRhcmstbW9kZSBhIHN2Zyxib2R5LmRhcmstbW9kZSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSBtYXQtaWNvbi5tYXQtaWNvbixib2R5LmRhcmstbW9kZSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSBzdmd7d2lkdGg6dmFyKC0tdGItaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0tdGItaWNvbi1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS10Yi1pY29uLXNpemUpfWJvZHkuZGFyay1tb2Rle2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSBhOm5vdCgubWRjLWJ1dHRvbiwubWRjLWljb24tYnV0dG9uKXtjb2xvcjojNDJhNWY1fWJvZHkuZGFyay1tb2RlIGE6bm90KC5tZGMtYnV0dG9uLC5tZGMtaWNvbi1idXR0b24pOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH1ib2R5LmRhcmstbW9kZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3B0aW9ue2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgd2hpdGUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW9wdGlvbjpob3Zlcjpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vcHRpb246Zm9jdXM6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3B0aW9uLm1hdC1tZGMtb3B0aW9uLWFjdGl2ZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZDpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCkgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vcHRncm91cC1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWFwcC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlLm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXozLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo1LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejYsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejcsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejgsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejh7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDlweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEwLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEyLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEzLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE1LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTVweCAyMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE2LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTgsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMThweCAyOHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIxLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMXB4IDMzcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjIsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejI0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNhcmR7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWVsZXZhdGVkLWNhcmQtY29udGFpbmVyLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2FyZC1vdXRsaW5lZHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1vdXRsaW5lZC1jYXJkLW91dGxpbmUtY29sb3I6IzU5NTk1OX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLWJhcnstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLWJhciAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjM5LCAxMDgsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3MtYmFyIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksIDEwOCwgMCwgMC4yNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnR7LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjM5LCAxMDgsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwgMTA4LCAwLCAwLjI1KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm57LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1kb3Rze2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeD0nMHB4JyB5PScwcHgnIGVuYWJsZS1iYWNrZ3JvdW5kPSduZXcgMCAwIDUgMicgeG1sOnNwYWNlPSdwcmVzZXJ2ZScgdmlld0JveD0nMCAwIDUgMicgcHJlc2VydmVBc3BlY3RSYXRpbz0nbm9uZSBzbGljZSclM0UlM0NjaXJjbGUgY3g9JzEnIGN5PScxJyByPScxJyBmaWxsPSdyZ2JhKDI0NCwgNjcsIDU0LCAwLjI1KScvJTNFJTNDL3N2ZyUzRSIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybiAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuMjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRvb2x0aXB7LS1tZGMtcGxhaW4tdG9vbHRpcC1jb250YWluZXItY29sb3I6IzYxNjE2MTstLW1kYy1wbGFpbi10b29sdGlwLXN1cHBvcnRpbmctdGV4dC1jb2xvcjp3aGl0ZX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODcpfUBtZWRpYSBhbGx7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNil9fUBtZWRpYSBhbGx7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNil9fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLWxlYWRpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXJpcHBsZS1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KSl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6aG92ZXIgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtcmlwcGxlLXN1cmZhY2UtLWhvdmVyIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTp2YXIoLS1tZGMtcmlwcGxlLWhvdmVyLW9wYWNpdHksIDAuMDgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5OnZhcigtLW1kYy1yaXBwbGUtZm9jdXMtb3BhY2l0eSwgMC4yNCl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6IzRhNGE0YX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQyKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNlZjZjMDApfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1yaXBwbGUtY29sb3IsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyMzksIDEwOCwgMCwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KX1AbWVkaWEgYWxse2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KX19QG1lZGlhIGFsbHtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCl9fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5ne2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjMpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcixib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6R3JheVRleHR9fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQubWRjLXRleHQtZmllbGQtLWZpbGxlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0NjQ2NDZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkOmhvdmVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wOH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSBzZWxlY3QubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2w6bm90KC5tYXQtbWRjLW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuODcpfWJvZHkuZGFyay1tb2RlIHNlbGVjdC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbDpub3QoLm1hdC1tZGMtbmF0aXZlLXNlbGVjdC1pbmxpbmUpIG9wdGlvbjpkaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjU0KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyMzksMTA4LDAsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDIzOSwxMDgsMCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50Om5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICNlZjZjMDApfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyMzksIDEwOCwgMCwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHQtLXZhbGlkYXRpb24tbXNne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2Fybjpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtib3JkZXItbGVmdDoxcHggc29saWQgcmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWZsZXggLm1hdC1tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjI4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7LS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCAtMzQuNzVweCkgc2NhbGUodmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXNjYWxlLCAwLjc1KSk7dHJhbnNmb3JtOnZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm0pfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjI0cHg7cGFkZGluZy1ib3R0b206OHB4fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWw6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLXRleHRhcmVhKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH1ib2R5LmRhcmstbW9kZSAubWRjLW1lbnUtc3VyZmFjZXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjNDI0MjQyKTtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19jb250ZW50LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fZW5ke29wYWNpdHk6MC4zOH1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zZWNvbmRhcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLW1ldGEgLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLWRlcHJlY2F0ZWQtbGlzdC1ncm91cF9fc3ViaGVhZGVye2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgd2hpdGUpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1kaXZpZGVyOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOndoaXRlfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1kaXZpZGVye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNlbGVjdC1kaXNhYmxlZCAubWF0LW1kYy1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMzgpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyMzksMTA4LDAsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjM5LDEwOCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNDQsNjcsNTQsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkIC5tYXQtbWRjLXNlbGVjdC5tYXQtbWRjLXNlbGVjdC1pbnZhbGlkIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQgLm1hdC1tZGMtc2VsZWN0Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgIzQyNDI0Mik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCB3aGl0ZSl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWljb24tb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyey0tbWRjLWRpYWxvZy1jb250YWluZXItY29sb3I6IzQyNDI0MjstLW1kYy1kaWFsb2ctd2l0aC1kaXZpZGVyLWRpdmlkZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1kaWFsb2ctc3ViaGVhZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODcpOy0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6IzU5NTk1OTstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojNTk1OTU5Oy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjojZmFmYWZhOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjojZmFmYWZhOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6I2ZhZmFmYTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOiNmYWZhZmE7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjojZmFmYWZhOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLXRyYWlsaW5nLWljb24tY29sb3I6I2ZhZmFmYTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOiNmYWZhZmF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2VmNmMwMDstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWF0LWFjY2VudC5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtYWNjZW50Lm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoaXAtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hpcHtoZWlnaHQ6MzJweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1zbGlkZS10b2dnbGV7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojMDAwOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojMDAwOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC1zZWxlY3RlZC10cmFjay1jb2xvcjojZjVmNWY1Oy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiNmNWY1ZjU7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2Y1ZjVmNTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmNWY1ZjU7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2Y1ZjVmNTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojNjE2MTYxOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiM2MTYxNjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojNjE2MTYxOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiM2MTYxNjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNmYWZhZmE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNmYWZhZmE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2ZhZmFmYTstLW1kYy1zd2l0Y2gtaGFuZGxlLXN1cmZhY2UtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojOWU5ZTllOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMjEyMTIxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZSAubWRjLWZvcm0tZmllbGR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCB3aGl0ZSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlIC5tZGMtc3dpdGNoLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeXstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNmZmNjODA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLWhhbmRsZS1jb2xvcjojZmZjYzgwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojZmZjYzgwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiNmYjhjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hdC1hY2NlbnR7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLWhhbmRsZS1jb2xvcjojZmZjYzgwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6I2ZmY2M4MDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2ZmY2M4MDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtdHJhY2stY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC10cmFjay1jb2xvcjojZmI4YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtd2FybnstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNlZjlhOWE7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLWhhbmRsZS1jb2xvcjojZWY5YTlhOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojZWY5YTlhOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiNlNTM5MzV9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGUtdG9nZ2xley0tbWRjLXN3aXRjaC1zdGF0ZS1sYXllci1zaXplOjQ4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXdhcm57LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW97cGFkZGluZzpjYWxjKCg0MHB4IC0gMjBweCkgLyAyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWRpby1idXR0b24gLm1kYy1yYWRpbyAubWRjLXJhZGlvX19iYWNrZ3JvdW5kOjpiZWZvcmV7dG9wOmNhbGMoLTEgKiAoNDBweCAtIDIwcHgpIC8gMik7bGVmdDpjYWxjKC0xICogKDQwcHggLSAyMHB4KSAvIDIpO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW8gLm1kYy1yYWRpb19fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO3JpZ2h0OmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO2xlZnQ6Y2FsYygoNDBweCAtIDQwcHgpIC8gMik7d2lkdGg6NDBweDtoZWlnaHQ6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1zbGlkZXJ7LS1tZGMtc2xpZGVyLWxhYmVsLWNvbnRhaW5lci1jb2xvcjp3aGl0ZTstLW1kYy1zbGlkZXItbGFiZWwtbGFiZWwtdGV4dC1jb2xvcjpibGFjazstLW1kYy1zbGlkZXItZGlzYWJsZWQtaGFuZGxlLWNvbG9yOiNmZmY7LS1tZGMtc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS10cmFjay1jb2xvcjojZmZmOy0tbWRjLXNsaWRlci1kaXNhYmxlZC1pbmFjdGl2ZS10cmFjay1jb2xvcjojZmZmOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tYXQtbWRjLXNsaWRlci12YWx1ZS1pbmRpY2F0b3Itb3BhY2l0eTogMC45fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlci5tYXQtcHJpbWFyeXstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2VmNmMwMDstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2VmNmMwMDstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGVyLm1hdC1hY2NlbnR7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2VmNmMwMDstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlci5tYXQtd2FybnstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2Y0NDMzNjstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMil9Ym9keS5kYXJrLW1vZGUgLm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgIzQyNDI0Mik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCB3aGl0ZSl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWljb24tb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1tZW51LWl0ZW1bZGlzYWJsZWRdLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtZGlzYWJsZWQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtc3VibWVudS1pY29ue2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgd2hpdGUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA4KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWxlYWRpbmctaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1zZWxlY3RlZC10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLWxlYWRpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItbGVhZGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4wODstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjp3aGl0ZTstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19lbmQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX2VuZCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmZmOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19zdGFydCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fZW5kIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19jb250ZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1iYXNley0tbWRjLWxpc3QtbGlzdC1pdGVtLW9uZS1saW5lLWNvbnRhaW5lci1oZWlnaHQ6NDhweDstLW1kYy1saXN0LWxpc3QtaXRlbS10d28tbGluZS1jb250YWluZXItaGVpZ2h0OjY0cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdGhyZWUtbGluZS1jb250YWluZXItaGVpZ2h0Ojg4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1hdmF0YXIubWRjLWxpc3QtaXRlbS0td2l0aC1vbmUtbGluZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWNoZWNrYm94Lm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uLm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmV7aGVpZ2h0OjU2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1hdmF0YXIubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXMsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1jaGVja2JveC5tZGMtbGlzdC1pdGVtLS13aXRoLXR3by1saW5lcyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24ubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXN7aGVpZ2h0OjcycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9ye2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yLWljb257ZmlsbDpyZ2JhKDI1NSwyNTUsMjU1LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yLWRlY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjU0KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItaW5jcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1pY29ue2ZpbGw6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e21pbi1oZWlnaHQ6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZmxleCAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHt0b3A6MjBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7LS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCAtMjYuNzVweCkgc2NhbGUodmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXNjYWxlLCAwLjc1KSk7dHJhbnNmb3JtOnZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm0pfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yIC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWw6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLXRleHRhcmVhKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcjpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCkgLm1hdC1tZGMtZmxvYXRpbmctbGFiZWx7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYixib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGlua3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiIC5tZGMtdGFiX190ZXh0LWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1saW5rIC5tZGMtdGFiX190ZXh0LWxhYmVse2NvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWIubWF0LW1kYy10YWItZGlzYWJsZWQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1saW5rLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGluay5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10YWItaW5kaWNhdG9yLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3IsICNlZjZjMDApfWJvZHkuZGFyay1tb2RlIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbmsgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm57LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItaGVhZGVyIC5tZGMtdGFie2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtcHJpbWFyeXstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtcHJpbWFyeSAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWF0LW1kYy1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtcHJpbWFyeSAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94Lm1hdC1hY2NlbnR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LWFjY2VudCAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWF0LW1kYy1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtYWNjZW50IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LXdhcm57LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiNmZmY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LXdhcm4gLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1hdC1tZGMtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LXdhcm4gLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC1kaXNhYmxlZCBsYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3h7cGFkZGluZzpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtcmlwcGxlLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKTttYXJnaW46Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSAtIDQwcHgpIC8gMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtcmlwcGxlLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKTtsZWZ0OmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1yaXBwbGUtc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKDQwcHggLSB2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpKSAvIDIpO3JpZ2h0OmNhbGMoKDQwcHggLSB2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpKSAvIDIpO2xlZnQ6Y2FsYygoNDBweCAtIHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkpIC8gMik7d2lkdGg6dmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KTtoZWlnaHQ6dmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LXdhcm57LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLXRleHQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojNDI0MjQyOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1lbGV2YXRpb246MH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b257LS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDIzOSwgMTA4LCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXtoZWlnaHQ6MzZweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtaWNvbi1idXR0b24tZGlzYWJsZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MTJweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0OHB4O21heC13aWR0aDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHg7bWFyZ2luLXJpZ2h0OjRweDttYXJnaW4tbGVmdDo0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYixib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWluaS1mYWI6YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZmFiLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWluaS1mYWIubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mYWIubWF0LXVudGhlbWVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLm1hdC11bnRoZW1lZHstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtZmFiLWljb24tY29sb3I6I2ZmZjstLW1hdC1tZGMtZmFiLWNvbG9yOiAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLm1hdC1hY2NlbnR7LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWZhYi1pY29uLWNvbG9yOiMwMDA7LS1tYXQtbWRjLWZhYi1jb2xvcjogIzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mYWIubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWluaS1mYWIubWF0LXdhcm57LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZhYi1pY29uLWNvbG9yOiNmZmY7LS1tYXQtbWRjLWZhYi1jb2xvcjogI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1mYWItaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tYXQtbWRjLWZhYi1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXJ7LS1tYXQtbWRjLXNuYWNrLWJhci1idXR0b24tY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtc25hY2tiYXItY29udGFpbmVyLWNvbG9yOiNkOWQ5ZDk7LS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LWNvbG9yOnJnYmEoNjYsIDY2LCA2NiwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICM0MjQyNDIpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcm93e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWRjLWRhdGEtdGFibGVfX2hlYWRlci1jZWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICM0MjQyNDIpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcm93LS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LCAxMDgsIDAsIDAuMDQpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLXNlbGVjdC0tb3V0bGluZWQ6bm90KC5tZGMtc2VsZWN0LS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2Utc2VsZWN0LS1vdXRsaW5lZDpub3QoLm1kYy1zZWxlY3QtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2Utc2VsZWN0LS1vdXRsaW5lZDpub3QoLm1kYy1zZWxlY3QtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19jZWxsLGJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9faGVhZGVyLWNlbGx7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbntib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19yb3c6bm90KC5tZGMtZGF0YS10YWJsZV9fcm93LS1zZWxlY3RlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9faGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KX1ib2R5LmRhcmstbW9kZSAubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tdG90YWwsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2UtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19jZWxse2NvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFibGV7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYmxlIC5tZGMtZGF0YS10YWJsZV9fcm93e2hlaWdodDo1MnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYmxlIC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbnttaW4taGVpZ2h0OjUycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFibGUgLm1kYy1kYXRhLXRhYmxlX19oZWFkZXItcm93e2hlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXJ7LS1tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudHstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybnstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7YmFja2dyb3VuZC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDowcHg7bWFyZ2luLWJvdHRvbTowcHg7bWFyZ2luLXJpZ2h0OjBweDttYXJnaW4tbGVmdDowcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX190b3VjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0MHB4O2xlZnQ6NTAlO3dpZHRoOjQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtkaXNwbGF5Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTg5LDE4OSwxODksLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6I2M2YzZjNn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWZhYixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFie2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXdhcm57LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLXRleHQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojNDI0MjQyOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1lbGV2YXRpb246MH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b257LS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDIzOSwgMTA4LCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtaWNvbi1idXR0b24tZGlzYWJsZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7aGVpZ2h0OjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MTJweH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0OHB4O21heC13aWR0aDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHg7bWFyZ2luLXJpZ2h0OjRweDttYXJnaW4tbGVmdDo0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1hcHAtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejB7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA3cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo5e2JveC1zaGFkb3c6MHB4IDVweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MHB4IDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA0cHggMjBweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTJ7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MHB4IDdweCA5cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjZweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTV7Ym94LXNoYWRvdzowcHggOHB4IDlweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjBweCA4cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxOHtib3gtc2hhZG93OjBweCA5cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggMzhweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjF7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjBweCAxMXB4IDE0cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjR7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmR7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYxMzUzMn1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6bm90KC5tYXQtbmF0aXZlLXNlbGVjdC1pbmxpbmUpIG9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Om5vdCgubWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb246ZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1oaW50e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA1KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMzAzMDMwICFpbXBvcnRhbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVke29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOjphZnRlcntiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVte2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZW51LXN1Ym1lbnUtaWNvbixib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvcixib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtc3VibWVudS1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMik7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1vcHRpb246Zm9jdXMsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcntiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3IsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCAjZmZmO2JvcmRlci1yaWdodDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1maXJzdCxib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZhZmFmYTtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxle2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRoZWFkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGJvZHksYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Zm9vdCxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtcm93LGJvZHkuZGFyay1tb2RlIG1hdC1mb290ZXItcm93LGJvZHkuZGFyay1tb2RlIFttYXQtaGVhZGVyLXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1yb3ddLGJvZHkuZGFyay1tb2RlIFttYXQtZm9vdGVyLXJvd10sYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fWJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWhlYWRlci1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgdGgubWF0LWhlYWRlci1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2VsbCxib2R5LmRhcmstbW9kZSAubWF0LWZvb3Rlci1jZWxse2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7YmFja2dyb3VuZC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDowcHg7bWFyZ2luLWJvdHRvbTowcHg7bWFyZ2luLXJpZ2h0OjBweDttYXJnaW4tbGVmdDowcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX190b3VjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0MHB4O2xlZnQ6NTAlO3dpZHRoOjQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtkaXNwbGF5Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTg5LDE4OSwxODksLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6I2M2YzZjNn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fQo8L3N0eWxlPgoKPHN0eWxlPgogIGh0bWwsCiAgYm9keSB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZm9udC1mYW1pbHk6IFJvYm90bywgc2Fucy1zZXJpZjsKICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpOwoKICAgIC8qIExlZ2FjeSBtZWNoYW5pc20gdG8gYXZvaWQgaXNzdWVzIHdpdGggc3VicGl4ZWwgYW50aS1hbGlhc2luZyBvbiBtYWNPUy4KICAgICAqCiAgICAgKiBJbiB0aGUgcGFzdCBbMV0sIG1hY09TIHN1YnBpeGVsIEFBIGNhdXNlZCBleGNlc3NpdmUgYm9sZGluZyBmb3IgbGlnaHQtb24tZGFyayB0ZXh0OyB0aGlzIHJ1bGUKICAgICAqIGF2b2lkcyB0aGF0IGJ5IHJlcXVlc3Rpbmcgbm9uLXN1YnBpeGVsIEFBIGFsd2F5cywgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHdoaWNoIGlzCiAgICAgKiB0byB1c2Ugc3VicGl4ZWwgQUEgd2hlbiBhdmFpbGFibGUuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgImZpeGVkIiBieSByZW1vdmluZyBzdWJwaXhlbCBBQSBpbgogICAgICogbWFjT1MgMTQgKE1vamF2ZSksIGJ1dCBmb3IgbGVnYWN5IHJlYXNvbnMgdGhleSBwcmVzZXJ2ZWQgdGhlIGJvbGRpbmcgZWZmZWN0IGFzIGFuIG9wdGlvbi4KICAgICAqIENocm9tZSB0aGVuIGluIHR1cm4gdXBkYXRlZCBpdHMgZm9udCByZW5kZXJpbmcgdG8gYXBwbHkgdGhhdCBib2xkaW5nIGVmZmVjdCBbMl0sIHdoaWNoIG1lYW5zCiAgICAgKiB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBgLXdlYmtpdC1mb250LXNtb290aGluZ2AgZG9jcyBbM10gc3VnZ2VzdCB0aGF0IHNldHRpbmcgYGFudGlhbGlhc2VkYAogICAgICogd291bGQgaGF2ZSBubyBlZmZlY3QgZm9yIHJlY2VudCB2ZXJzaW9ucyBvZiBtYWNPUywgaXQgc3RpbGwgaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBib2xkaW5nLgogICAgICoKICAgICAqIFsxXTogaHR0cDovL3d3dy5saWdodGVycmEuY29tL2FydGljbGVzL21hY29zeHRleHRhYWJ1Zy8KICAgICAqIFsyXTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODU4ODYxCiAgICAgKiBbM106IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250LXNtb290aAogICAgICoKICAgICAqLwoKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIH0KICBub3NjcmlwdCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgbWF4LXdpZHRoOiA2MDBweDsKICAgIHBhZGRpbmc6IDEwcHg7CiAgfQo8L3N0eWxlPgoKPC9oZWFkPjxib2R5Pjxub3NjcmlwdD4KICAgIDxoMT5UZW5zb3JCb2FyZCByZXF1aXJlcyBKYXZhU2NyaXB0PC9oMT4KICAgIDxwPlBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCBhbmQgcmVsb2FkIHRoaXMgcGFnZS48L3A+CiAgPC9ub3NjcmlwdD48dGItd2ViYXBwPjwvdGItd2ViYXBwPjxzY3JpcHQgc3JjPSJpbmRleC5qcz9fZmlsZV9oYXNoPTYyNTM4ZjYxIj48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==", + "ok": true, + "headers": [ + [ + "content-type", + "text/html; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": { + "data": "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", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/index.js?_file_hash=62538f61": { + "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7KCgpPT57dmFyIHZ2ZT1PYmplY3QuY3JlYXRlO3ZhciBCTT1PYmplY3QuZGVmaW5lUHJvcGVydHkseHZlPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGJ2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHd2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxTdmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaGR0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsTXZlPU9iamVjdC5nZXRQcm90b3R5cGVPZixwZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFdmU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgVEk9TWF0aC5wb3csZmR0PShlLHQscik9PnQgaW4gZT9CTShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTplW3RdPXIsS2w9KGUsdCk9Pntmb3IodmFyIHIgaW4gdHx8KHQ9e30pKXBkdC5jYWxsKHQscikmJmZkdChlLHIsdFtyXSk7aWYoaGR0KWZvcih2YXIgciBvZiBoZHQodCkpRXZlLmNhbGwodCxyKSYmZmR0KGUscix0W3JdKTtyZXR1cm4gZX0sTXg9KGUsdCk9Pnh2ZShlLHd2ZSh0KSk7dmFyIEV4PShlPT50eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0eXBlb2YgUHJveHkhPSJ1bmRlZmluZWQiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTT0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBIPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyksS3M9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClCTShlLHIse2dldDp0W3JdLGVudW1lcmFibGU6ITB9KX0sZGR0PShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIFN2ZSh0KSkhcGR0LmNhbGwoZSxpKSYmaSE9PXImJkJNKGUsaSx7Z2V0OigpPT50W2ldLGVudW1lcmFibGU6IShuPWJ2ZSh0LGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBFZT0oZSx0LHIpPT4ocj1lIT1udWxsP3Z2ZShNdmUoZSkpOnt9LGRkdCh0fHwhZXx8IWUuX19lc01vZHVsZT9CTShyLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSksVXQ9ZT0+ZGR0KEJNKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTt2YXIgUmk9KGUsdCxyKT0+bmV3IFByb21pc2UoKG4saSk9Pnt2YXIgbz1sPT57dHJ5e3Moci5uZXh0KGwpKX1jYXRjaChjKXtpKGMpfX0sYT1sPT57dHJ5e3Moci50aHJvdyhsKSl9Y2F0Y2goYyl7aShjKX19LHM9bD0+bC5kb25lP24obC52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGwudmFsdWUpLnRoZW4obyxhKTtzKChyPXIuYXBwbHkoZSx0KSkubmV4dCgpKX0pO3ZhciBIZHQ9SCgocF9yLFBJKT0+e3ZhciBtZHQsZ2R0LF9kdCx5ZHQsdmR0LHhkdCxiZHQsd2R0LFNkdCxNZHQsRWR0LFRkdCxDZHQsQ0ksaEcsQWR0LFBkdCxJZHQsVHgsTGR0LGtkdCxSZHQsTmR0LERkdCxPZHQsemR0LEZkdCxCZHQsQUk7KGZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiP2dsb2JhbDp0eXBlb2Ygc2VsZj09Im9iamVjdCI/c2VsZjp0eXBlb2YgdGhpcz09Im9iamVjdCI/dGhpczp7fTt0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZSgidHNsaWIiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKG4pe2Uocih0LHIobikpKX0pOnR5cGVvZiBQST09Im9iamVjdCImJnR5cGVvZiBQSS5leHBvcnRzPT0ib2JqZWN0Ij9lKHIodCxyKFBJLmV4cG9ydHMpKSk6ZShyKHQpKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG4hPT10JiYodHlwZW9mIE9iamVjdC5jcmVhdGU9PSJmdW5jdGlvbiI/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pOm4uX19lc01vZHVsZT0hMCksZnVuY3Rpb24obyxhKXtyZXR1cm4gbltvXT1pP2kobyxhKTphfX19KShmdW5jdGlvbihlKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24obixpKXtuLl9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24obixpKXtmb3IodmFyIG8gaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmKG5bb109aVtvXSl9O21kdD1mdW5jdGlvbihuLGkpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iJiZpIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGkpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO3QobixpKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufW4ucHJvdG90eXBlPWk9PT1udWxsP09iamVjdC5jcmVhdGUoaSk6KG8ucHJvdG90eXBlPWkucHJvdG90eXBlLG5ldyBvKX0sZ2R0PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSxvPTEsYT1hcmd1bWVudHMubGVuZ3RoO288YTtvKyspe2k9YXJndW1lbnRzW29dO2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiYobltzXT1pW3NdKX1yZXR1cm4gbn0sX2R0PWZ1bmN0aW9uKG4saSl7dmFyIG89e307Zm9yKHZhciBhIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sYSkmJmkuaW5kZXhPZihhKTwwJiYob1thXT1uW2FdKTtpZihuIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIHM9MCxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobik7czxhLmxlbmd0aDtzKyspaS5pbmRleE9mKGFbc10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChuLGFbc10pJiYob1thW3NdXT1uW2Fbc11dKTtyZXR1cm4gb30seWR0PWZ1bmN0aW9uKG4saSxvLGEpe3ZhciBzPWFyZ3VtZW50cy5sZW5ndGgsbD1zPDM/aTphPT09bnVsbD9hPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTphLGM7aWYodHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZ0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZT09ImZ1bmN0aW9uIilsPVJlZmxlY3QuZGVjb3JhdGUobixpLG8sYSk7ZWxzZSBmb3IodmFyIHU9bi5sZW5ndGgtMTt1Pj0wO3UtLSkoYz1uW3VdKSYmKGw9KHM8Mz9jKGwpOnM+Mz9jKGksbyxsKTpjKGksbykpfHxsKTtyZXR1cm4gcz4zJiZsJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxvLGwpLGx9LHZkdD1mdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihvLGEpe2kobyxhLG4pfX0seGR0PWZ1bmN0aW9uKG4saSxvLGEscyxsKXtmdW5jdGlvbiBjKFMpe2lmKFMhPT12b2lkIDAmJnR5cGVvZiBTIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIFN9Zm9yKHZhciB1PWEua2luZCxoPXU9PT0iZ2V0dGVyIj8iZ2V0Ijp1PT09InNldHRlciI/InNldCI6InZhbHVlIixmPSFpJiZuP2Euc3RhdGljP246bi5wcm90b3R5cGU6bnVsbCxwPWl8fChmP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZixhLm5hbWUpOnt9KSxkLGc9ITEsXz1vLmxlbmd0aC0xO18+PTA7Xy0tKXt2YXIgeT17fTtmb3IodmFyIHggaW4gYSl5W3hdPXg9PT0iYWNjZXNzIj97fTphW3hdO2Zvcih2YXIgeCBpbiBhLmFjY2Vzcyl5LmFjY2Vzc1t4XT1hLmFjY2Vzc1t4XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKFMpe2lmKGcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7bC5wdXNoKGMoU3x8bnVsbCkpfTt2YXIgYj0oMCxvW19dKSh1PT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtoXSx5KTtpZih1PT09ImFjY2Vzc29yIil7aWYoYj09PXZvaWQgMCljb250aW51ZTtpZihiPT09bnVsbHx8dHlwZW9mIGIhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPWMoYi5nZXQpKSYmKHAuZ2V0PWQpLChkPWMoYi5zZXQpKSYmKHAuc2V0PWQpLChkPWMoYi5pbml0KSkmJnMucHVzaChkKX1lbHNlKGQ9YyhiKSkmJih1PT09ImZpZWxkIj9zLnB1c2goZCk6cFtoXT1kKX1mJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZixhLm5hbWUscCksZz0hMH0sYmR0PWZ1bmN0aW9uKG4saSxvKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aD4yLHM9MDtzPGkubGVuZ3RoO3MrKylvPWE/aVtzXS5jYWxsKG4sbyk6aVtzXS5jYWxsKG4pO3JldHVybiBhP286dm9pZCAwfSx3ZHQ9ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT0ic3ltYm9sIj9uOiIiLmNvbmNhdChuKX0sU2R0PWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gdHlwZW9mIGk9PSJzeW1ib2wiJiYoaT1pLmRlc2NyaXB0aW9uPyJbIi5jb25jYXQoaS5kZXNjcmlwdGlvbiwiXSIpOiIiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwibmFtZSIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpvPyIiLmNvbmNhdChvLCIgIixpKTppfSl9LE1kdD1mdW5jdGlvbihuLGkpe2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QubWV0YWRhdGE9PSJmdW5jdGlvbiIpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobixpKX0sRWR0PWZ1bmN0aW9uKG4saSxvLGEpe2Z1bmN0aW9uIHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBvP2w6bmV3IG8oZnVuY3Rpb24oYyl7YyhsKX0pfXJldHVybiBuZXcob3x8KG89UHJvbWlzZSkpKGZ1bmN0aW9uKGwsYyl7ZnVuY3Rpb24gdShwKXt0cnl7ZihhLm5leHQocCkpfWNhdGNoKGQpe2MoZCl9fWZ1bmN0aW9uIGgocCl7dHJ5e2YoYS50aHJvdyhwKSl9Y2F0Y2goZCl7YyhkKX19ZnVuY3Rpb24gZihwKXtwLmRvbmU/bChwLnZhbHVlKTpzKHAudmFsdWUpLnRoZW4odSxoKX1mKChhPWEuYXBwbHkobixpfHxbXSkpLm5leHQoKSl9KX0sVGR0PWZ1bmN0aW9uKG4saSl7dmFyIG89e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKGxbMF0mMSl0aHJvdyBsWzFdO3JldHVybiBsWzFdfSx0cnlzOltdLG9wczpbXX0sYSxzLGwsYztyZXR1cm4gYz17bmV4dDp1KDApLHRocm93OnUoMSkscmV0dXJuOnUoMil9LHR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJihjW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGM7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIGgoW2YscF0pfX1mdW5jdGlvbiBoKGYpe2lmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YyYmKGM9MCxmWzBdJiYobz0wKSksbzspdHJ5e2lmKGE9MSxzJiYobD1mWzBdJjI/cy5yZXR1cm46ZlswXT9zLnRocm93fHwoKGw9cy5yZXR1cm4pJiZsLmNhbGwocyksMCk6cy5uZXh0KSYmIShsPWwuY2FsbChzLGZbMV0pKS5kb25lKXJldHVybiBsO3N3aXRjaChzPTAsbCYmKGY9W2ZbMF0mMixsLnZhbHVlXSksZlswXSl7Y2FzZSAwOmNhc2UgMTpsPWY7YnJlYWs7Y2FzZSA0OnJldHVybiBvLmxhYmVsKysse3ZhbHVlOmZbMV0sZG9uZTohMX07Y2FzZSA1Om8ubGFiZWwrKyxzPWZbMV0sZj1bMF07Y29udGludWU7Y2FzZSA3OmY9by5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobD1vLnRyeXMsIShsPWwubGVuZ3RoPjAmJmxbbC5sZW5ndGgtMV0pJiYoZlswXT09PTZ8fGZbMF09PT0yKSl7bz0wO2NvbnRpbnVlfWlmKGZbMF09PT0zJiYoIWx8fGZbMV0+bFswXSYmZlsxXTxsWzNdKSl7by5sYWJlbD1mWzFdO2JyZWFrfWlmKGZbMF09PT02JiZvLmxhYmVsPGxbMV0pe28ubGFiZWw9bFsxXSxsPWY7YnJlYWt9aWYobCYmby5sYWJlbDxsWzJdKXtvLmxhYmVsPWxbMl0sby5vcHMucHVzaChmKTticmVha31sWzJdJiZvLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWV9Zj1pLmNhbGwobixvKX1jYXRjaChwKXtmPVs2LHBdLHM9MH1maW5hbGx5e2E9bD0wfWlmKGZbMF0mNSl0aHJvdyBmWzFdO3JldHVybnt2YWx1ZTpmWzBdP2ZbMV06dm9pZCAwLGRvbmU6ITB9fX0sQ2R0PWZ1bmN0aW9uKG4saSl7Zm9yKHZhciBvIGluIG4pbyE9PSJkZWZhdWx0IiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiZBSShpLG4sbyl9LEFJPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obixpLG8sYSl7YT09PXZvaWQgMCYmKGE9byk7dmFyIHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLG8pOyghc3x8KCJnZXQiaW4gcz8haS5fX2VzTW9kdWxlOnMud3JpdGFibGV8fHMuY29uZmlndXJhYmxlKSkmJihzPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpW29dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGEscyl9OmZ1bmN0aW9uKG4saSxvLGEpe2E9PT12b2lkIDAmJihhPW8pLG5bYV09aVtvXX0sQ0k9ZnVuY3Rpb24obil7dmFyIGk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLml0ZXJhdG9yLG89aSYmbltpXSxhPTA7aWYobylyZXR1cm4gby5jYWxsKG4pO2lmKG4mJnR5cGVvZiBuLmxlbmd0aD09Im51bWJlciIpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbiYmYT49bi5sZW5ndGgmJihuPXZvaWQgMCkse3ZhbHVlOm4mJm5bYSsrXSxkb25lOiFufX19O3Rocm93IG5ldyBUeXBlRXJyb3IoaT8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9LGhHPWZ1bmN0aW9uKG4saSl7dmFyIG89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmbltTeW1ib2wuaXRlcmF0b3JdO2lmKCFvKXJldHVybiBuO3ZhciBhPW8uY2FsbChuKSxzLGw9W10sYzt0cnl7Zm9yKDsoaT09PXZvaWQgMHx8aS0tID4wKSYmIShzPWEubmV4dCgpKS5kb25lOylsLnB1c2gocy52YWx1ZSl9Y2F0Y2godSl7Yz17ZXJyb3I6dX19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG89YS5yZXR1cm4pJiZvLmNhbGwoYSl9ZmluYWxseXtpZihjKXRocm93IGMuZXJyb3J9fXJldHVybiBsfSxBZHQ9ZnVuY3Rpb24oKXtmb3IodmFyIG49W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbj1uLmNvbmNhdChoRyhhcmd1bWVudHNbaV0pKTtyZXR1cm4gbn0sUGR0PWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsaT0wLG89YXJndW1lbnRzLmxlbmd0aDtpPG87aSsrKW4rPWFyZ3VtZW50c1tpXS5sZW5ndGg7Zm9yKHZhciBhPUFycmF5KG4pLHM9MCxpPTA7aTxvO2krKylmb3IodmFyIGw9YXJndW1lbnRzW2ldLGM9MCx1PWwubGVuZ3RoO2M8dTtjKysscysrKWFbc109bFtjXTtyZXR1cm4gYX0sSWR0PWZ1bmN0aW9uKG4saSxvKXtpZihvfHxhcmd1bWVudHMubGVuZ3RoPT09Milmb3IodmFyIGE9MCxzPWkubGVuZ3RoLGw7YTxzO2ErKykobHx8IShhIGluIGkpKSYmKGx8fChsPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGksMCxhKSksbFthXT1pW2FdKTtyZXR1cm4gbi5jb25jYXQobHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpfSxUeD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFR4Pyh0aGlzLnY9bix0aGlzKTpuZXcgVHgobil9LExkdD1mdW5jdGlvbihuLGksbyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhPW8uYXBwbHkobixpfHxbXSkscyxsPVtdO3JldHVybiBzPXt9LGMoIm5leHQiKSxjKCJ0aHJvdyIpLGMoInJldHVybiIpLHNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHM7ZnVuY3Rpb24gYyhnKXthW2ddJiYoc1tnXT1mdW5jdGlvbihfKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeSx4KXtsLnB1c2goW2csXyx5LHhdKT4xfHx1KGcsXyl9KX0pfWZ1bmN0aW9uIHUoZyxfKXt0cnl7aChhW2ddKF8pKX1jYXRjaCh5KXtkKGxbMF1bM10seSl9fWZ1bmN0aW9uIGgoZyl7Zy52YWx1ZSBpbnN0YW5jZW9mIFR4P1Byb21pc2UucmVzb2x2ZShnLnZhbHVlLnYpLnRoZW4oZixwKTpkKGxbMF1bMl0sZyl9ZnVuY3Rpb24gZihnKXt1KCJuZXh0IixnKX1mdW5jdGlvbiBwKGcpe3UoInRocm93IixnKX1mdW5jdGlvbiBkKGcsXyl7ZyhfKSxsLnNoaWZ0KCksbC5sZW5ndGgmJnUobFswXVswXSxsWzBdWzFdKX19LGtkdD1mdW5jdGlvbihuKXt2YXIgaSxvO3JldHVybiBpPXt9LGEoIm5leHQiKSxhKCJ0aHJvdyIsZnVuY3Rpb24ocyl7dGhyb3cgc30pLGEoInJldHVybiIpLGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxpO2Z1bmN0aW9uIGEocyxsKXtpW3NdPW5bc10/ZnVuY3Rpb24oYyl7cmV0dXJuKG89IW8pP3t2YWx1ZTpUeChuW3NdKGMpKSxkb25lOiExfTpsP2woYyk6Y306bH19LFJkdD1mdW5jdGlvbihuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGk9bltTeW1ib2wuYXN5bmNJdGVyYXRvcl0sbztyZXR1cm4gaT9pLmNhbGwobik6KG49dHlwZW9mIENJPT0iZnVuY3Rpb24iP0NJKG4pOm5bU3ltYm9sLml0ZXJhdG9yXSgpLG89e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gYShsKXtvW2xdPW5bbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1LGgpe2M9bltsXShjKSxzKHUsaCxjLmRvbmUsYy52YWx1ZSl9KX19ZnVuY3Rpb24gcyhsLGMsdSxoKXtQcm9taXNlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbihmKXtsKHt2YWx1ZTpmLGRvbmU6dX0pfSxjKX19LE5kdD1mdW5jdGlvbihuLGkpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInJhdyIse3ZhbHVlOml9KTpuLnJhdz1pLG59O3ZhciByPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obixpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6aX0pfTpmdW5jdGlvbihuLGkpe24uZGVmYXVsdD1pfTtEZHQ9ZnVuY3Rpb24obil7aWYobiYmbi5fX2VzTW9kdWxlKXJldHVybiBuO3ZhciBpPXt9O2lmKG4hPW51bGwpZm9yKHZhciBvIGluIG4pbyE9PSJkZWZhdWx0IiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sbykmJkFJKGksbixvKTtyZXR1cm4gcihpLG4pLGl9LE9kdD1mdW5jdGlvbihuKXtyZXR1cm4gbiYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn19LHpkdD1mdW5jdGlvbihuLGksbyxhKXtpZihvPT09ImEiJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZih0eXBlb2YgaT09ImZ1bmN0aW9uIj9uIT09aXx8IWE6IWkuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBvPT09Im0iP2E6bz09PSJhIj9hLmNhbGwobik6YT9hLnZhbHVlOmkuZ2V0KG4pfSxGZHQ9ZnVuY3Rpb24obixpLG8sYSxzKXtpZihhPT09Im0iKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpO2lmKGE9PT0iYSImJiFzKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iP24hPT1pfHwhczohaS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTtyZXR1cm4gYT09PSJhIj9zLmNhbGwobixvKTpzP3MudmFsdWU9bzppLnNldChuLG8pLG99LEJkdD1mdW5jdGlvbihuLGkpe2lmKGk9PT1udWxsfHx0eXBlb2YgaSE9Im9iamVjdCImJnR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0Iik7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP2k9PT1uOm4uaGFzKGkpfSxlKCJfX2V4dGVuZHMiLG1kdCksZSgiX19hc3NpZ24iLGdkdCksZSgiX19yZXN0IixfZHQpLGUoIl9fZGVjb3JhdGUiLHlkdCksZSgiX19wYXJhbSIsdmR0KSxlKCJfX2VzRGVjb3JhdGUiLHhkdCksZSgiX19ydW5Jbml0aWFsaXplcnMiLGJkdCksZSgiX19wcm9wS2V5Iix3ZHQpLGUoIl9fc2V0RnVuY3Rpb25OYW1lIixTZHQpLGUoIl9fbWV0YWRhdGEiLE1kdCksZSgiX19hd2FpdGVyIixFZHQpLGUoIl9fZ2VuZXJhdG9yIixUZHQpLGUoIl9fZXhwb3J0U3RhciIsQ2R0KSxlKCJfX2NyZWF0ZUJpbmRpbmciLEFJKSxlKCJfX3ZhbHVlcyIsQ0kpLGUoIl9fcmVhZCIsaEcpLGUoIl9fc3ByZWFkIixBZHQpLGUoIl9fc3ByZWFkQXJyYXlzIixQZHQpLGUoIl9fc3ByZWFkQXJyYXkiLElkdCksZSgiX19hd2FpdCIsVHgpLGUoIl9fYXN5bmNHZW5lcmF0b3IiLExkdCksZSgiX19hc3luY0RlbGVnYXRvciIsa2R0KSxlKCJfX2FzeW5jVmFsdWVzIixSZHQpLGUoIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixOZHQpLGUoIl9faW1wb3J0U3RhciIsRGR0KSxlKCJfX2ltcG9ydERlZmF1bHQiLE9kdCksZSgiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsemR0KSxlKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixGZHQpLGUoIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsQmR0KX0pfSk7dmFyIE9lPUgoKFJ4LCRNKT0+eyhmdW5jdGlvbigpe3ZhciBlLHQ9IjQuMTcuMjEiLHI9MjAwLG49IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIsaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbz0iSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiLGE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHM9NTAwLGw9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGM9MSx1PTIsaD00LGY9MSxwPTIsZD0xLGc9MixfPTQseT04LHg9MTYsYj0zMixTPTY0LEM9MTI4LFA9MjU2LGs9NTEyLE89MzAsRD0iLi4uIixCPTgwMCxJPTE2LEw9MSxSPTIsRj0zLHo9MS8wLFU9OTAwNzE5OTI1NDc0MDk5MSxXPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixaPTAvMCxydD00Mjk0OTY3Mjk1LG90PXJ0LTEsc3Q9cnQ+Pj4xLFN0PVtbImFyeSIsQ10sWyJiaW5kIixkXSxbImJpbmRLZXkiLGddLFsiY3VycnkiLHldLFsiY3VycnlSaWdodCIseF0sWyJmbGlwIixrXSxbInBhcnRpYWwiLGJdLFsicGFydGlhbFJpZ2h0IixTXSxbInJlYXJnIixQXV0sYnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTXQ9IltvYmplY3QgQXJyYXldIixsdD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsS3Q9IltvYmplY3QgQm9vbGVhbl0iLF90PSJbb2JqZWN0IERhdGVdIixjdD0iW29iamVjdCBET01FeGNlcHRpb25dIixYPSJbb2JqZWN0IEVycm9yXSIsZXQ9IltvYmplY3QgRnVuY3Rpb25dIixkdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHE9IltvYmplY3QgTWFwXSIscHQ9IltvYmplY3QgTnVtYmVyXSIsaHQ9IltvYmplY3QgTnVsbF0iLHd0PSJbb2JqZWN0IE9iamVjdF0iLGt0PSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBQcm94eV0iLGVlPSJbb2JqZWN0IFJlZ0V4cF0iLExlPSJbb2JqZWN0IFNldF0iLGFyPSJbb2JqZWN0IFN0cmluZ10iLGZyPSJbb2JqZWN0IFN5bWJvbF0iLHR0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLCQ9IltvYmplY3QgV2Vha01hcF0iLEl0PSJbb2JqZWN0IFdlYWtTZXRdIiwkdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGhlPSJbb2JqZWN0IERhdGFWaWV3XSIsVHQ9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbnQ9IltvYmplY3QgSW50OEFycmF5XSIsQ3Q9IltvYmplY3QgSW50MTZBcnJheV0iLFd0PSJbb2JqZWN0IEludDMyQXJyYXldIixmZT0iW29iamVjdCBVaW50OEFycmF5XSIsYXQ9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixzZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFF0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ2U9L1xiX19wIFwrPSAnJzsvZyxQdD0vXGIoX19wIFwrPSkgJycgXCsvZyxOdD0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLHplPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx5bj0vWyY8PiInXS9nLFdpPVJlZ0V4cCh6ZS5zb3VyY2UpLEFyPVJlZ0V4cCh5bi5zb3VyY2UpLFBhPS88JS0oW1xzXFNdKz8pJT4vZyxobz0vPCUoW1xzXFNdKz8pJT4vZyxJYT0vPCU9KFtcc1xTXSs/KSU+L2csbHg9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sY209L15cdyokLyxKMD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjbj0vW1xcXiQuKis/KClbXF17fXxdL2csY3g9UmVnRXhwKGNuLnNvdXJjZSkscnA9L15ccysvLEs9L1xzLyxndD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLEV0PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLHh0PS8sPyAmIC8sRnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxWZT0vWygpPSx7fVxbXF1cL1xzXS8sVWU9L1xcKFxcKT8vZyx0cj0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csS2U9L1x3KiQvLFhyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLF9yPS9eMGJbMDFdKyQvaSxQcj0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxqbj0vXjBvWzAtN10rJC9pLG5wPS9eKD86MHxbMS05XVxkKikkLyx1bT0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXI9LygkXikvLEZsPS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZyxYbj0iXFx1ZDgwMC1cXHVkZmZmIixCbD0iXFx1MDMwMC1cXHUwMzZmIix1eD0iXFx1ZmUyMC1cXHVmZTJmIixIbD0iXFx1MjBkMC1cXHUyMGZmIixWbD1CbCt1eCtIbCxZaT0iXFx1MjcwMC1cXHUyN2JmIixobT0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIscXM9IlxceGFjXFx4YjFcXHhkN1xceGY3IixncGU9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixfcGU9IlxcdTIwMDAtXFx1MjA2ZiIseXBlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLHFodD0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIsR2h0PSJcXHVmZTBlXFx1ZmUwZiIsV2h0PXFzK2dwZStfcGUreXBlLGVxPSJbJ1x1MjAxOV0iLHZwZT0iWyIrWG4rIl0iLFlodD0iWyIrV2h0KyJdIixINj0iWyIrVmwrIl0iLGpodD0iXFxkKyIseHBlPSJbIitZaSsiXSIsWGh0PSJbIitobSsiXSIsJGh0PSJbXiIrWG4rV2h0K2podCtZaStobStxaHQrIl0iLHJxPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGJwZT0iKD86IitINisifCIrcnErIikiLEtodD0iW14iK1huKyJdIixucT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsaXE9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGh4PSJbIitxaHQrIl0iLFpodD0iXFx1MjAwZCIsSmh0PSIoPzoiK1hodCsifCIrJGh0KyIpIix3cGU9Iig/OiIraHgrInwiKyRodCsiKSIsUWh0PSIoPzoiK2VxKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iix0ZnQ9Iig/OiIrZXErIig/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLGVmdD1icGUrIj8iLHJmdD0iWyIrR2h0KyJdPyIsU3BlPSIoPzoiK1podCsiKD86IitbS2h0LG5xLGlxXS5qb2luKCJ8IikrIikiK3JmdCtlZnQrIikqIixNcGU9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIsRXBlPSJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLG5mdD1yZnQrZWZ0K1NwZSxUcGU9Iig/OiIrW3hwZSxucSxpcV0uam9pbigifCIpKyIpIituZnQsQ3BlPSIoPzoiK1tLaHQrSDYrIj8iLEg2LG5xLGlxLHZwZV0uam9pbigifCIpKyIpIixBcGU9UmVnRXhwKGVxLCJnIiksUHBlPVJlZ0V4cChINiwiZyIpLG9xPVJlZ0V4cChycSsiKD89IitycSsiKXwiK0NwZStuZnQsImciKSxJcGU9UmVnRXhwKFtoeCsiPyIrWGh0KyIrIitRaHQrIig/PSIrW1lodCxoeCwiJCJdLmpvaW4oInwiKSsiKSIsd3BlKyIrIit0ZnQrIig/PSIrW1lodCxoeCtKaHQsIiQiXS5qb2luKCJ8IikrIikiLGh4KyI/IitKaHQrIisiK1FodCxoeCsiKyIrdGZ0LEVwZSxNcGUsamh0LFRwZV0uam9pbigifCIpLCJnIiksTHBlPVJlZ0V4cCgiWyIrWmh0K1huK1ZsK0dodCsiXSIpLGtwZT0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxScGU9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxOcGU9LTEsa249e307a25bVHRdPWtuW2JlXT1rbltudF09a25bQ3RdPWtuW1d0XT1rbltmZV09a25bYXRdPWtuW3NlXT1rbltRdF09ITAsa25bYnRdPWtuW010XT1rblskdF09a25bS3RdPWtuW2hlXT1rbltfdF09a25bWF09a25bZXRdPWtuW3FdPWtuW3B0XT1rblt3dF09a25bZWVdPWtuW0xlXT1rblthcl09a25bJF09ITE7dmFyIFRuPXt9O1RuW2J0XT1UbltNdF09VG5bJHRdPVRuW2hlXT1UbltLdF09VG5bX3RdPVRuW1R0XT1UbltiZV09VG5bbnRdPVRuW0N0XT1UbltXdF09VG5bcV09VG5bcHRdPVRuW3d0XT1UbltlZV09VG5bTGVdPVRuW2FyXT1Ubltmcl09VG5bZmVdPVRuW2F0XT1UbltzZV09VG5bUXRdPSEwLFRuW1hdPVRuW2V0XT1UblskXT0hMTt2YXIgRHBlPXtcdTAwQzA6IkEiLFx1MDBDMToiQSIsXHUwMEMyOiJBIixcdTAwQzM6IkEiLFx1MDBDNDoiQSIsXHUwMEM1OiJBIixcdTAwRTA6ImEiLFx1MDBFMToiYSIsXHUwMEUyOiJhIixcdTAwRTM6ImEiLFx1MDBFNDoiYSIsXHUwMEU1OiJhIixcdTAwQzc6IkMiLFx1MDBFNzoiYyIsXHUwMEQwOiJEIixcdTAwRjA6ImQiLFx1MDBDODoiRSIsXHUwMEM5OiJFIixcdTAwQ0E6IkUiLFx1MDBDQjoiRSIsXHUwMEU4OiJlIixcdTAwRTk6ImUiLFx1MDBFQToiZSIsXHUwMEVCOiJlIixcdTAwQ0M6IkkiLFx1MDBDRDoiSSIsXHUwMENFOiJJIixcdTAwQ0Y6IkkiLFx1MDBFQzoiaSIsXHUwMEVEOiJpIixcdTAwRUU6ImkiLFx1MDBFRjoiaSIsXHUwMEQxOiJOIixcdTAwRjE6Im4iLFx1MDBEMjoiTyIsXHUwMEQzOiJPIixcdTAwRDQ6Ik8iLFx1MDBENToiTyIsXHUwMEQ2OiJPIixcdTAwRDg6Ik8iLFx1MDBGMjoibyIsXHUwMEYzOiJvIixcdTAwRjQ6Im8iLFx1MDBGNToibyIsXHUwMEY2OiJvIixcdTAwRjg6Im8iLFx1MDBEOToiVSIsXHUwMERBOiJVIixcdTAwREI6IlUiLFx1MDBEQzoiVSIsXHUwMEY5OiJ1IixcdTAwRkE6InUiLFx1MDBGQjoidSIsXHUwMEZDOiJ1IixcdTAwREQ6IlkiLFx1MDBGRDoieSIsXHUwMEZGOiJ5IixcdTAwQzY6IkFlIixcdTAwRTY6ImFlIixcdTAwREU6IlRoIixcdTAwRkU6InRoIixcdTAwREY6InNzIixcdTAxMDA6IkEiLFx1MDEwMjoiQSIsXHUwMTA0OiJBIixcdTAxMDE6ImEiLFx1MDEwMzoiYSIsXHUwMTA1OiJhIixcdTAxMDY6IkMiLFx1MDEwODoiQyIsXHUwMTBBOiJDIixcdTAxMEM6IkMiLFx1MDEwNzoiYyIsXHUwMTA5OiJjIixcdTAxMEI6ImMiLFx1MDEwRDoiYyIsXHUwMTBFOiJEIixcdTAxMTA6IkQiLFx1MDEwRjoiZCIsXHUwMTExOiJkIixcdTAxMTI6IkUiLFx1MDExNDoiRSIsXHUwMTE2OiJFIixcdTAxMTg6IkUiLFx1MDExQToiRSIsXHUwMTEzOiJlIixcdTAxMTU6ImUiLFx1MDExNzoiZSIsXHUwMTE5OiJlIixcdTAxMUI6ImUiLFx1MDExQzoiRyIsXHUwMTFFOiJHIixcdTAxMjA6IkciLFx1MDEyMjoiRyIsXHUwMTFEOiJnIixcdTAxMUY6ImciLFx1MDEyMToiZyIsXHUwMTIzOiJnIixcdTAxMjQ6IkgiLFx1MDEyNjoiSCIsXHUwMTI1OiJoIixcdTAxMjc6ImgiLFx1MDEyODoiSSIsXHUwMTJBOiJJIixcdTAxMkM6IkkiLFx1MDEyRToiSSIsXHUwMTMwOiJJIixcdTAxMjk6ImkiLFx1MDEyQjoiaSIsXHUwMTJEOiJpIixcdTAxMkY6ImkiLFx1MDEzMToiaSIsXHUwMTM0OiJKIixcdTAxMzU6ImoiLFx1MDEzNjoiSyIsXHUwMTM3OiJrIixcdTAxMzg6ImsiLFx1MDEzOToiTCIsXHUwMTNCOiJMIixcdTAxM0Q6IkwiLFx1MDEzRjoiTCIsXHUwMTQxOiJMIixcdTAxM0E6ImwiLFx1MDEzQzoibCIsXHUwMTNFOiJsIixcdTAxNDA6ImwiLFx1MDE0MjoibCIsXHUwMTQzOiJOIixcdTAxNDU6Ik4iLFx1MDE0NzoiTiIsXHUwMTRBOiJOIixcdTAxNDQ6Im4iLFx1MDE0NjoibiIsXHUwMTQ4OiJuIixcdTAxNEI6Im4iLFx1MDE0QzoiTyIsXHUwMTRFOiJPIixcdTAxNTA6Ik8iLFx1MDE0RDoibyIsXHUwMTRGOiJvIixcdTAxNTE6Im8iLFx1MDE1NDoiUiIsXHUwMTU2OiJSIixcdTAxNTg6IlIiLFx1MDE1NToiciIsXHUwMTU3OiJyIixcdTAxNTk6InIiLFx1MDE1QToiUyIsXHUwMTVDOiJTIixcdTAxNUU6IlMiLFx1MDE2MDoiUyIsXHUwMTVCOiJzIixcdTAxNUQ6InMiLFx1MDE1RjoicyIsXHUwMTYxOiJzIixcdTAxNjI6IlQiLFx1MDE2NDoiVCIsXHUwMTY2OiJUIixcdTAxNjM6InQiLFx1MDE2NToidCIsXHUwMTY3OiJ0IixcdTAxNjg6IlUiLFx1MDE2QToiVSIsXHUwMTZDOiJVIixcdTAxNkU6IlUiLFx1MDE3MDoiVSIsXHUwMTcyOiJVIixcdTAxNjk6InUiLFx1MDE2QjoidSIsXHUwMTZEOiJ1IixcdTAxNkY6InUiLFx1MDE3MToidSIsXHUwMTczOiJ1IixcdTAxNzQ6IlciLFx1MDE3NToidyIsXHUwMTc2OiJZIixcdTAxNzc6InkiLFx1MDE3ODoiWSIsXHUwMTc5OiJaIixcdTAxN0I6IloiLFx1MDE3RDoiWiIsXHUwMTdBOiJ6IixcdTAxN0M6InoiLFx1MDE3RToieiIsXHUwMTMyOiJJSiIsXHUwMTMzOiJpaiIsXHUwMTUyOiJPZSIsXHUwMTUzOiJvZSIsXHUwMTQ5OiInbiIsXHUwMTdGOiJzIn0sT3BlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSx6cGU9eyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9LEZwZT17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxCcGU9cGFyc2VGbG9hdCxIcGU9cGFyc2VJbnQsaWZ0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxWcGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmbz1pZnR8fFZwZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhcT10eXBlb2YgUng9PSJvYmplY3QiJiZSeCYmIVJ4Lm5vZGVUeXBlJiZSeCxRMD1hcSYmdHlwZW9mICRNPT0ib2JqZWN0IiYmJE0mJiEkTS5ub2RlVHlwZSYmJE0sb2Z0PVEwJiZRMC5leHBvcnRzPT09YXEsc3E9b2Z0JiZpZnQucHJvY2VzcyxVbD1mdW5jdGlvbigpe3RyeXt2YXIgdXQ9UTAmJlEwLnJlcXVpcmUmJlEwLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdXR8fHNxJiZzcS5iaW5kaW5nJiZzcS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goQXQpe319KCksYWZ0PVVsJiZVbC5pc0FycmF5QnVmZmVyLHNmdD1VbCYmVWwuaXNEYXRlLGxmdD1VbCYmVWwuaXNNYXAsY2Z0PVVsJiZVbC5pc1JlZ0V4cCx1ZnQ9VWwmJlVsLmlzU2V0LGhmdD1VbCYmVWwuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEdzKHV0LEF0LHZ0KXtzd2l0Y2godnQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHV0LmNhbGwoQXQpO2Nhc2UgMTpyZXR1cm4gdXQuY2FsbChBdCx2dFswXSk7Y2FzZSAyOnJldHVybiB1dC5jYWxsKEF0LHZ0WzBdLHZ0WzFdKTtjYXNlIDM6cmV0dXJuIHV0LmNhbGwoQXQsdnRbMF0sdnRbMV0sdnRbMl0pfXJldHVybiB1dC5hcHBseShBdCx2dCl9ZnVuY3Rpb24gVXBlKHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrV2U8JHI7KXt2YXIgamk9dXRbV2VdO0F0KGdlLGppLHZ0KGppKSx1dCl9cmV0dXJuIGdlfWZ1bmN0aW9uIHFsKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrdnQ8Z2UmJkF0KHV0W3Z0XSx2dCx1dCkhPT0hMTspO3JldHVybiB1dH1mdW5jdGlvbiBxcGUodXQsQXQpe2Zvcih2YXIgdnQ9dXQ9PW51bGw/MDp1dC5sZW5ndGg7dnQtLSYmQXQodXRbdnRdLHZ0LHV0KSE9PSExOyk7cmV0dXJuIHV0fWZ1bmN0aW9uIGZmdCh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZighQXQodXRbdnRdLHZ0LHV0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmbSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdO0F0KGppLHZ0LHV0KSYmKCRyW1dlKytdPWppKX1yZXR1cm4gJHJ9ZnVuY3Rpb24gVjYodXQsQXQpe3ZhciB2dD11dD09bnVsbD8wOnV0Lmxlbmd0aDtyZXR1cm4hIXZ0JiZmeCh1dCxBdCwwKT4tMX1mdW5jdGlvbiBscSh1dCxBdCx2dCl7Zm9yKHZhciBnZT0tMSxXZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK2dlPFdlOylpZih2dChBdCx1dFtnZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRuKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoLFdlPUFycmF5KGdlKTsrK3Z0PGdlOylXZVt2dF09QXQodXRbdnRdLHZ0LHV0KTtyZXR1cm4gV2V9ZnVuY3Rpb24gcG0odXQsQXQpe2Zvcih2YXIgdnQ9LTEsZ2U9QXQubGVuZ3RoLFdlPXV0Lmxlbmd0aDsrK3Z0PGdlOyl1dFtXZSt2dF09QXRbdnRdO3JldHVybiB1dH1mdW5jdGlvbiBjcSh1dCxBdCx2dCxnZSl7dmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoO2ZvcihnZSYmJHImJih2dD11dFsrK1dlXSk7KytXZTwkcjspdnQ9QXQodnQsdXRbV2VdLFdlLHV0KTtyZXR1cm4gdnR9ZnVuY3Rpb24gR3BlKHV0LEF0LHZ0LGdlKXt2YXIgV2U9dXQ9PW51bGw/MDp1dC5sZW5ndGg7Zm9yKGdlJiZXZSYmKHZ0PXV0Wy0tV2VdKTtXZS0tOyl2dD1BdCh2dCx1dFtXZV0sV2UsdXQpO3JldHVybiB2dH1mdW5jdGlvbiB1cSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZihBdCh1dFt2dF0sdnQsdXQpKXJldHVybiEwO3JldHVybiExfXZhciBXcGU9aHEoImxlbmd0aCIpO2Z1bmN0aW9uIFlwZSh1dCl7cmV0dXJuIHV0LnNwbGl0KCIiKX1mdW5jdGlvbiBqcGUodXQpe3JldHVybiB1dC5tYXRjaChGdCl8fFtdfWZ1bmN0aW9uIHBmdCh1dCxBdCx2dCl7dmFyIGdlO3JldHVybiB2dCh1dCxmdW5jdGlvbihXZSwkcixqaSl7aWYoQXQoV2UsJHIsamkpKXJldHVybiBnZT0kciwhMX0pLGdlfWZ1bmN0aW9uIFU2KHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPXV0Lmxlbmd0aCwkcj12dCsoZ2U/MTotMSk7Z2U/JHItLTorKyRyPFdlOylpZihBdCh1dFskcl0sJHIsdXQpKXJldHVybiAkcjtyZXR1cm4tMX1mdW5jdGlvbiBmeCh1dCxBdCx2dCl7cmV0dXJuIEF0PT09QXQ/b2RlKHV0LEF0LHZ0KTpVNih1dCxkZnQsdnQpfWZ1bmN0aW9uIFhwZSh1dCxBdCx2dCxnZSl7Zm9yKHZhciBXZT12dC0xLCRyPXV0Lmxlbmd0aDsrK1dlPCRyOylpZihnZSh1dFtXZV0sQXQpKXJldHVybiBXZTtyZXR1cm4tMX1mdW5jdGlvbiBkZnQodXQpe3JldHVybiB1dCE9PXV0fWZ1bmN0aW9uIG1mdCh1dCxBdCl7dmFyIHZ0PXV0PT1udWxsPzA6dXQubGVuZ3RoO3JldHVybiB2dD9wcSh1dCxBdCkvdnQ6Wn1mdW5jdGlvbiBocSh1dCl7cmV0dXJuIGZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQ9PW51bGw/ZTpBdFt1dF19fWZ1bmN0aW9uIGZxKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dD09bnVsbD9lOnV0W0F0XX19ZnVuY3Rpb24gZ2Z0KHV0LEF0LHZ0LGdlLFdlKXtyZXR1cm4gV2UodXQsZnVuY3Rpb24oJHIsamksdm4pe3Z0PWdlPyhnZT0hMSwkcik6QXQodnQsJHIsamksdm4pfSksdnR9ZnVuY3Rpb24gJHBlKHV0LEF0KXt2YXIgdnQ9dXQubGVuZ3RoO2Zvcih1dC5zb3J0KEF0KTt2dC0tOyl1dFt2dF09dXRbdnRdLnZhbHVlO3JldHVybiB1dH1mdW5jdGlvbiBwcSh1dCxBdCl7Zm9yKHZhciB2dCxnZT0tMSxXZT11dC5sZW5ndGg7KytnZTxXZTspe3ZhciAkcj1BdCh1dFtnZV0pOyRyIT09ZSYmKHZ0PXZ0PT09ZT8kcjp2dCskcil9cmV0dXJuIHZ0fWZ1bmN0aW9uIGRxKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPUFycmF5KHV0KTsrK3Z0PHV0OylnZVt2dF09QXQodnQpO3JldHVybiBnZX1mdW5jdGlvbiBLcGUodXQsQXQpe3JldHVybiAkbihBdCxmdW5jdGlvbih2dCl7cmV0dXJuW3Z0LHV0W3Z0XV19KX1mdW5jdGlvbiBfZnQodXQpe3JldHVybiB1dCYmdXQuc2xpY2UoMCxiZnQodXQpKzEpLnJlcGxhY2UocnAsIiIpfWZ1bmN0aW9uIFdzKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dChBdCl9fWZ1bmN0aW9uIG1xKHV0LEF0KXtyZXR1cm4gJG4oQXQsZnVuY3Rpb24odnQpe3JldHVybiB1dFt2dF19KX1mdW5jdGlvbiBNTSh1dCxBdCl7cmV0dXJuIHV0LmhhcyhBdCl9ZnVuY3Rpb24geWZ0KHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aDsrK3Z0PGdlJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gdmZ0KHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aDt2dC0tJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gWnBlKHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxnZT0wO3Z0LS07KXV0W3Z0XT09PUF0JiYrK2dlO3JldHVybiBnZX12YXIgSnBlPWZxKERwZSksUXBlPWZxKE9wZSk7ZnVuY3Rpb24gdGRlKHV0KXtyZXR1cm4iXFwiK0ZwZVt1dF19ZnVuY3Rpb24gZWRlKHV0LEF0KXtyZXR1cm4gdXQ9PW51bGw/ZTp1dFtBdF19ZnVuY3Rpb24gcHgodXQpe3JldHVybiBMcGUudGVzdCh1dCl9ZnVuY3Rpb24gcmRlKHV0KXtyZXR1cm4ga3BlLnRlc3QodXQpfWZ1bmN0aW9uIG5kZSh1dCl7Zm9yKHZhciBBdCx2dD1bXTshKEF0PXV0Lm5leHQoKSkuZG9uZTspdnQucHVzaChBdC52YWx1ZSk7cmV0dXJuIHZ0fWZ1bmN0aW9uIGdxKHV0KXt2YXIgQXQ9LTEsdnQ9QXJyYXkodXQuc2l6ZSk7cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oZ2UsV2Upe3Z0WysrQXRdPVtXZSxnZV19KSx2dH1mdW5jdGlvbiB4ZnQodXQsQXQpe3JldHVybiBmdW5jdGlvbih2dCl7cmV0dXJuIHV0KEF0KHZ0KSl9fWZ1bmN0aW9uIGRtKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdOyhqaT09PUF0fHxqaT09PWwpJiYodXRbdnRdPWwsJHJbV2UrK109dnQpfXJldHVybiAkcn1mdW5jdGlvbiBxNih1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1nZX0pLHZ0fWZ1bmN0aW9uIGlkZSh1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1bZ2UsZ2VdfSksdnR9ZnVuY3Rpb24gb2RlKHV0LEF0LHZ0KXtmb3IodmFyIGdlPXZ0LTEsV2U9dXQubGVuZ3RoOysrZ2U8V2U7KWlmKHV0W2dlXT09PUF0KXJldHVybiBnZTtyZXR1cm4tMX1mdW5jdGlvbiBhZGUodXQsQXQsdnQpe2Zvcih2YXIgZ2U9dnQrMTtnZS0tOylpZih1dFtnZV09PT1BdClyZXR1cm4gZ2U7cmV0dXJuIGdlfWZ1bmN0aW9uIGR4KHV0KXtyZXR1cm4gcHgodXQpP2xkZSh1dCk6V3BlKHV0KX1mdW5jdGlvbiB0dSh1dCl7cmV0dXJuIHB4KHV0KT9jZGUodXQpOllwZSh1dCl9ZnVuY3Rpb24gYmZ0KHV0KXtmb3IodmFyIEF0PXV0Lmxlbmd0aDtBdC0tJiZLLnRlc3QodXQuY2hhckF0KEF0KSk7KTtyZXR1cm4gQXR9dmFyIHNkZT1mcSh6cGUpO2Z1bmN0aW9uIGxkZSh1dCl7Zm9yKHZhciBBdD1vcS5sYXN0SW5kZXg9MDtvcS50ZXN0KHV0KTspKytBdDtyZXR1cm4gQXR9ZnVuY3Rpb24gY2RlKHV0KXtyZXR1cm4gdXQubWF0Y2gob3EpfHxbXX1mdW5jdGlvbiB1ZGUodXQpe3JldHVybiB1dC5tYXRjaChJcGUpfHxbXX12YXIgaGRlPWZ1bmN0aW9uIHV0KEF0KXtBdD1BdD09bnVsbD9mbzptbS5kZWZhdWx0cyhmby5PYmplY3QoKSxBdCxtbS5waWNrKGZvLFJwZSkpO3ZhciB2dD1BdC5BcnJheSxnZT1BdC5EYXRlLFdlPUF0LkVycm9yLCRyPUF0LkZ1bmN0aW9uLGppPUF0Lk1hdGgsdm49QXQuT2JqZWN0LF9xPUF0LlJlZ0V4cCxmZGU9QXQuU3RyaW5nLEdsPUF0LlR5cGVFcnJvcixHNj12dC5wcm90b3R5cGUscGRlPSRyLnByb3RvdHlwZSxteD12bi5wcm90b3R5cGUsVzY9QXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFk2PXBkZS50b1N0cmluZyx1bj1teC5oYXNPd25Qcm9wZXJ0eSxkZGU9MCx3ZnQ9ZnVuY3Rpb24oKXt2YXIgbT0vW14uXSskLy5leGVjKFc2JiZXNi5rZXlzJiZXNi5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG0/IlN5bWJvbChzcmMpXzEuIittOiIifSgpLGo2PW14LnRvU3RyaW5nLG1kZT1ZNi5jYWxsKHZuKSxnZGU9Zm8uXyxfZGU9X3EoIl4iK1k2LmNhbGwodW4pLnJlcGxhY2UoY24sIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksWDY9b2Z0P0F0LkJ1ZmZlcjplLGdtPUF0LlN5bWJvbCwkNj1BdC5VaW50OEFycmF5LFNmdD1YNj9YNi5hbGxvY1Vuc2FmZTplLEs2PXhmdCh2bi5nZXRQcm90b3R5cGVPZix2biksTWZ0PXZuLmNyZWF0ZSxFZnQ9bXgucHJvcGVydHlJc0VudW1lcmFibGUsWjY9RzYuc3BsaWNlLFRmdD1nbT9nbS5pc0NvbmNhdFNwcmVhZGFibGU6ZSxFTT1nbT9nbS5pdGVyYXRvcjplLHRfPWdtP2dtLnRvU3RyaW5nVGFnOmUsSjY9ZnVuY3Rpb24oKXt0cnl7dmFyIG09b18odm4sImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG0oe30sIiIse30pLG19Y2F0Y2godil7fX0oKSx5ZGU9QXQuY2xlYXJUaW1lb3V0IT09Zm8uY2xlYXJUaW1lb3V0JiZBdC5jbGVhclRpbWVvdXQsdmRlPWdlJiZnZS5ub3chPT1mby5EYXRlLm5vdyYmZ2Uubm93LHhkZT1BdC5zZXRUaW1lb3V0IT09Zm8uc2V0VGltZW91dCYmQXQuc2V0VGltZW91dCxRNj1qaS5jZWlsLHRJPWppLmZsb29yLHlxPXZuLmdldE93blByb3BlcnR5U3ltYm9scyxiZGU9WDY/WDYuaXNCdWZmZXI6ZSxDZnQ9QXQuaXNGaW5pdGUsd2RlPUc2LmpvaW4sU2RlPXhmdCh2bi5rZXlzLHZuKSxYaT1qaS5tYXgscmE9amkubWluLE1kZT1nZS5ub3csRWRlPUF0LnBhcnNlSW50LEFmdD1qaS5yYW5kb20sVGRlPUc2LnJldmVyc2UsdnE9b18oQXQsIkRhdGFWaWV3IiksVE09b18oQXQsIk1hcCIpLHhxPW9fKEF0LCJQcm9taXNlIiksZ3g9b18oQXQsIlNldCIpLENNPW9fKEF0LCJXZWFrTWFwIiksQU09b18odm4sImNyZWF0ZSIpLGVJPUNNJiZuZXcgQ00sX3g9e30sQ2RlPWFfKHZxKSxBZGU9YV8oVE0pLFBkZT1hXyh4cSksSWRlPWFfKGd4KSxMZGU9YV8oQ00pLHJJPWdtP2dtLnByb3RvdHlwZTplLFBNPXJJP3JJLnZhbHVlT2Y6ZSxQZnQ9ckk/ckkudG9TdHJpbmc6ZTtmdW5jdGlvbiBHKG0pe2lmKHNpKG0pJiYhJGUobSkmJiEobSBpbnN0YW5jZW9mIGdyKSl7aWYobSBpbnN0YW5jZW9mIFdsKXJldHVybiBtO2lmKHVuLmNhbGwobSwiX193cmFwcGVkX18iKSlyZXR1cm4gSXB0KG0pfXJldHVybiBuZXcgV2wobSl9dmFyIHl4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4gZnVuY3Rpb24odil7aWYoIWVpKHYpKXJldHVybnt9O2lmKE1mdClyZXR1cm4gTWZ0KHYpO20ucHJvdG90eXBlPXY7dmFyIFQ9bmV3IG07cmV0dXJuIG0ucHJvdG90eXBlPWUsVH19KCk7ZnVuY3Rpb24gbkkoKXt9ZnVuY3Rpb24gV2wobSx2KXt0aGlzLl9fd3JhcHBlZF9fPW0sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXYsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189ZX1HLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYSxldmFsdWF0ZTpobyxpbnRlcnBvbGF0ZTpJYSx2YXJpYWJsZToiIixpbXBvcnRzOntfOkd9fSxHLnByb3RvdHlwZT1uSS5wcm90b3R5cGUsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxXbC5wcm90b3R5cGU9eXgobkkucHJvdG90eXBlKSxXbC5wcm90b3R5cGUuY29uc3RydWN0b3I9V2w7ZnVuY3Rpb24gZ3IobSl7dGhpcy5fX3dyYXBwZWRfXz1tLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1ydCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBrZGUoKXt2YXIgbT1uZXcgZ3IodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIG0uX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyksbS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxtLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxtLl9faXRlcmF0ZWVzX189cHModGhpcy5fX2l0ZXJhdGVlc19fKSxtLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLG0uX192aWV3c19fPXBzKHRoaXMuX192aWV3c19fKSxtfWZ1bmN0aW9uIFJkZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbT1uZXcgZ3IodGhpcyk7bS5fX2Rpcl9fPS0xLG0uX19maWx0ZXJlZF9fPSEwfWVsc2UgbT10aGlzLmNsb25lKCksbS5fX2Rpcl9fKj0tMTtyZXR1cm4gbX1mdW5jdGlvbiBOZGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdj10aGlzLl9fZGlyX18sVD0kZShtKSxOPXY8MCxWPVQ/bS5sZW5ndGg6MCxZPVltZSgwLFYsdGhpcy5fX3ZpZXdzX18pLEo9WS5zdGFydCxpdD1ZLmVuZCxmdD1pdC1KLER0PU4/aXQ6Si0xLE90PXRoaXMuX19pdGVyYXRlZXNfXyxWdD1PdC5sZW5ndGgsb2U9MCxUZT1yYShmdCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFUfHwhTiYmVj09ZnQmJlRlPT1mdClyZXR1cm4gUWZ0KG0sdGhpcy5fX2FjdGlvbnNfXyk7dmFyIE5lPVtdO3Q6Zm9yKDtmdC0tJiZvZTxUZTspe0R0Kz12O2Zvcih2YXIgZXI9LTEsRGU9bVtEdF07KytlcjxWdDspe3ZhciBwcj1PdFtlcl0seXI9cHIuaXRlcmF0ZWUsWHM9cHIudHlwZSxSYT15cihEZSk7aWYoWHM9PVIpRGU9UmE7ZWxzZSBpZighUmEpe2lmKFhzPT1MKWNvbnRpbnVlIHQ7YnJlYWsgdH19TmVbb2UrK109RGV9cmV0dXJuIE5lfWdyLnByb3RvdHlwZT15eChuSS5wcm90b3R5cGUpLGdyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ncjtmdW5jdGlvbiBlXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBEZGUoKXt0aGlzLl9fZGF0YV9fPUFNP0FNKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIE9kZShtKXt2YXIgdj10aGlzLmhhcyhtKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bbV07cmV0dXJuIHRoaXMuc2l6ZS09dj8xOjAsdn1mdW5jdGlvbiB6ZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXztpZihBTSl7dmFyIFQ9dlttXTtyZXR1cm4gVD09PWE/ZTpUfXJldHVybiB1bi5jYWxsKHYsbSk/dlttXTplfWZ1bmN0aW9uIEZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fO3JldHVybiBBTT92W21dIT09ZTp1bi5jYWxsKHYsbSl9ZnVuY3Rpb24gQmRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhtKT8wOjEsVFttXT1BTSYmdj09PWU/YTp2LHRoaXN9ZV8ucHJvdG90eXBlLmNsZWFyPURkZSxlXy5wcm90b3R5cGUuZGVsZXRlPU9kZSxlXy5wcm90b3R5cGUuZ2V0PXpkZSxlXy5wcm90b3R5cGUuaGFzPUZkZSxlXy5wcm90b3R5cGUuc2V0PUJkZTtmdW5jdGlvbiBpcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBIZGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIFZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtpZihUPDApcmV0dXJuITE7dmFyIE49di5sZW5ndGgtMTtyZXR1cm4gVD09Tj92LnBvcCgpOlo2LmNhbGwodixULDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIFVkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtyZXR1cm4gVDwwP2U6dltUXVsxXX1mdW5jdGlvbiBxZGUobSl7cmV0dXJuIGlJKHRoaXMuX19kYXRhX18sbSk+LTF9ZnVuY3Rpb24gR2RlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXyxOPWlJKFQsbSk7cmV0dXJuIE48MD8oKyt0aGlzLnNpemUsVC5wdXNoKFttLHZdKSk6VFtOXVsxXT12LHRoaXN9aXAucHJvdG90eXBlLmNsZWFyPUhkZSxpcC5wcm90b3R5cGUuZGVsZXRlPVZkZSxpcC5wcm90b3R5cGUuZ2V0PVVkZSxpcC5wcm90b3R5cGUuaGFzPXFkZSxpcC5wcm90b3R5cGUuc2V0PUdkZTtmdW5jdGlvbiBvcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBXZGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlXyxtYXA6bmV3KFRNfHxpcCksc3RyaW5nOm5ldyBlX319ZnVuY3Rpb24gWWRlKG0pe3ZhciB2PWdJKHRoaXMsbSkuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemUtPXY/MTowLHZ9ZnVuY3Rpb24gamRlKG0pe3JldHVybiBnSSh0aGlzLG0pLmdldChtKX1mdW5jdGlvbiBYZGUobSl7cmV0dXJuIGdJKHRoaXMsbSkuaGFzKG0pfWZ1bmN0aW9uICRkZShtLHYpe3ZhciBUPWdJKHRoaXMsbSksTj1ULnNpemU7cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplKz1ULnNpemU9PU4/MDoxLHRoaXN9b3AucHJvdG90eXBlLmNsZWFyPVdkZSxvcC5wcm90b3R5cGUuZGVsZXRlPVlkZSxvcC5wcm90b3R5cGUuZ2V0PWpkZSxvcC5wcm90b3R5cGUuaGFzPVhkZSxvcC5wcm90b3R5cGUuc2V0PSRkZTtmdW5jdGlvbiByXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgb3A7Kyt2PFQ7KXRoaXMuYWRkKG1bdl0pfWZ1bmN0aW9uIEtkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobSxhKSx0aGlzfWZ1bmN0aW9uIFpkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobSl9cl8ucHJvdG90eXBlLmFkZD1yXy5wcm90b3R5cGUucHVzaD1LZGUscl8ucHJvdG90eXBlLmhhcz1aZGU7ZnVuY3Rpb24gZXUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXz1uZXcgaXAobSk7dGhpcy5zaXplPXYuc2l6ZX1mdW5jdGlvbiBKZGUoKXt0aGlzLl9fZGF0YV9fPW5ldyBpcCx0aGlzLnNpemU9MH1mdW5jdGlvbiBRZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXyxUPXYuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemU9di5zaXplLFR9ZnVuY3Rpb24gdG1lKG0pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChtKX1mdW5jdGlvbiBlbWUobSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG0pfWZ1bmN0aW9uIHJtZShtLHYpe3ZhciBUPXRoaXMuX19kYXRhX187aWYoVCBpbnN0YW5jZW9mIGlwKXt2YXIgTj1ULl9fZGF0YV9fO2lmKCFUTXx8Ti5sZW5ndGg8ci0xKXJldHVybiBOLnB1c2goW20sdl0pLHRoaXMuc2l6ZT0rK1Quc2l6ZSx0aGlzO1Q9dGhpcy5fX2RhdGFfXz1uZXcgb3AoTil9cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplPVQuc2l6ZSx0aGlzfWV1LnByb3RvdHlwZS5jbGVhcj1KZGUsZXUucHJvdG90eXBlLmRlbGV0ZT1RZGUsZXUucHJvdG90eXBlLmdldD10bWUsZXUucHJvdG90eXBlLmhhcz1lbWUsZXUucHJvdG90eXBlLnNldD1ybWU7ZnVuY3Rpb24gSWZ0KG0sdil7dmFyIFQ9JGUobSksTj0hVCYmc18obSksVj0hVCYmIU4mJmJtKG0pLFk9IVQmJiFOJiYhViYmd3gobSksSj1UfHxOfHxWfHxZLGl0PUo/ZHEobS5sZW5ndGgsZmRlKTpbXSxmdD1pdC5sZW5ndGg7Zm9yKHZhciBEdCBpbiBtKSh2fHx1bi5jYWxsKG0sRHQpKSYmIShKJiYoRHQ9PSJsZW5ndGgifHxWJiYoRHQ9PSJvZmZzZXQifHxEdD09InBhcmVudCIpfHxZJiYoRHQ9PSJidWZmZXIifHxEdD09ImJ5dGVMZW5ndGgifHxEdD09ImJ5dGVPZmZzZXQiKXx8Y3AoRHQsZnQpKSkmJml0LnB1c2goRHQpO3JldHVybiBpdH1mdW5jdGlvbiBMZnQobSl7dmFyIHY9bS5sZW5ndGg7cmV0dXJuIHY/bVtMcSgwLHYtMSldOmV9ZnVuY3Rpb24gbm1lKG0sdil7cmV0dXJuIF9JKHBzKG0pLG5fKHYsMCxtLmxlbmd0aCkpfWZ1bmN0aW9uIGltZShtKXtyZXR1cm4gX0kocHMobSkpfWZ1bmN0aW9uIGJxKG0sdixUKXsoVCE9PWUmJiFydShtW3ZdLFQpfHxUPT09ZSYmISh2IGluIG0pKSYmYXAobSx2LFQpfWZ1bmN0aW9uIElNKG0sdixUKXt2YXIgTj1tW3ZdOyghKHVuLmNhbGwobSx2KSYmcnUoTixUKSl8fFQ9PT1lJiYhKHYgaW4gbSkpJiZhcChtLHYsVCl9ZnVuY3Rpb24gaUkobSx2KXtmb3IodmFyIFQ9bS5sZW5ndGg7VC0tOylpZihydShtW1RdWzBdLHYpKXJldHVybiBUO3JldHVybi0xfWZ1bmN0aW9uIG9tZShtLHYsVCxOKXtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7dihOLFYsVChWKSxKKX0pLE59ZnVuY3Rpb24ga2Z0KG0sdil7cmV0dXJuIG0mJmdoKHYscG8odiksbSl9ZnVuY3Rpb24gYW1lKG0sdil7cmV0dXJuIG0mJmdoKHYsbXModiksbSl9ZnVuY3Rpb24gYXAobSx2LFQpe3Y9PSJfX3Byb3RvX18iJiZKNj9KNihtLHYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlQsd3JpdGFibGU6ITB9KTptW3ZdPVR9ZnVuY3Rpb24gd3EobSx2KXtmb3IodmFyIFQ9LTEsTj12Lmxlbmd0aCxWPXZ0KE4pLFk9bT09bnVsbDsrK1Q8TjspVltUXT1ZP2U6ckcobSx2W1RdKTtyZXR1cm4gVn1mdW5jdGlvbiBuXyhtLHYsVCl7cmV0dXJuIG09PT1tJiYoVCE9PWUmJihtPW08PVQ/bTpUKSx2IT09ZSYmKG09bT49dj9tOnYpKSxtfWZ1bmN0aW9uIFlsKG0sdixULE4sVixZKXt2YXIgSixpdD12JmMsZnQ9diZ1LER0PXYmaDtpZihUJiYoSj1WP1QobSxOLFYsWSk6VChtKSksSiE9PWUpcmV0dXJuIEo7aWYoIWVpKG0pKXJldHVybiBtO3ZhciBPdD0kZShtKTtpZihPdCl7aWYoSj1YbWUobSksIWl0KXJldHVybiBwcyhtLEopfWVsc2V7dmFyIFZ0PW5hKG0pLG9lPVZ0PT1ldHx8VnQ9PWR0O2lmKGJtKG0pKXJldHVybiBycHQobSxpdCk7aWYoVnQ9PXd0fHxWdD09YnR8fG9lJiYhVil7aWYoSj1mdHx8b2U/e306YnB0KG0pLCFpdClyZXR1cm4gZnQ/em1lKG0sYW1lKEosbSkpOk9tZShtLGtmdChKLG0pKX1lbHNle2lmKCFUbltWdF0pcmV0dXJuIFY/bTp7fTtKPSRtZShtLFZ0LGl0KX19WXx8KFk9bmV3IGV1KTt2YXIgVGU9WS5nZXQobSk7aWYoVGUpcmV0dXJuIFRlO1kuc2V0KG0sSiksS3B0KG0pP20uZm9yRWFjaChmdW5jdGlvbihEZSl7Si5hZGQoWWwoRGUsdixULERlLG0sWSkpfSk6WHB0KG0pJiZtLmZvckVhY2goZnVuY3Rpb24oRGUscHIpe0ouc2V0KHByLFlsKERlLHYsVCxwcixtLFkpKX0pO3ZhciBOZT1EdD9mdD9VcTpWcTpmdD9tczpwbyxlcj1PdD9lOk5lKG0pO3JldHVybiBxbChlcnx8bSxmdW5jdGlvbihEZSxwcil7ZXImJihwcj1EZSxEZT1tW3ByXSksSU0oSixwcixZbChEZSx2LFQscHIsbSxZKSl9KSxKfWZ1bmN0aW9uIHNtZShtKXt2YXIgdj1wbyhtKTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFJmdChULG0sdil9fWZ1bmN0aW9uIFJmdChtLHYsVCl7dmFyIE49VC5sZW5ndGg7aWYobT09bnVsbClyZXR1cm4hTjtmb3IobT12bihtKTtOLS07KXt2YXIgVj1UW05dLFk9dltWXSxKPW1bVl07aWYoSj09PWUmJiEoViBpbiBtKXx8IVkoSikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTmZ0KG0sdixUKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHpNKGZ1bmN0aW9uKCl7bS5hcHBseShlLFQpfSx2KX1mdW5jdGlvbiBMTShtLHYsVCxOKXt2YXIgVj0tMSxZPVY2LEo9ITAsaXQ9bS5sZW5ndGgsZnQ9W10sRHQ9di5sZW5ndGg7aWYoIWl0KXJldHVybiBmdDtUJiYodj0kbih2LFdzKFQpKSksTj8oWT1scSxKPSExKTp2Lmxlbmd0aD49ciYmKFk9TU0sSj0hMSx2PW5ldyByXyh2KSk7dDpmb3IoOysrVjxpdDspe3ZhciBPdD1tW1ZdLFZ0PVQ9PW51bGw/T3Q6VChPdCk7aWYoT3Q9Tnx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1EdDtvZS0tOylpZih2W29lXT09PVZ0KWNvbnRpbnVlIHQ7ZnQucHVzaChPdCl9ZWxzZSBZKHYsVnQsTil8fGZ0LnB1c2goT3QpfXJldHVybiBmdH12YXIgX209c3B0KG1oKSxEZnQ9c3B0KE1xLCEwKTtmdW5jdGlvbiBsbWUobSx2KXt2YXIgVD0hMDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9ISF2KE4sVixZKSxUfSksVH1mdW5jdGlvbiBvSShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5sZW5ndGg7KytOPFY7KXt2YXIgWT1tW05dLEo9dihZKTtpZihKIT1udWxsJiYoaXQ9PT1lP0o9PT1KJiYhanMoSik6VChKLGl0KSkpdmFyIGl0PUosZnQ9WX1yZXR1cm4gZnR9ZnVuY3Rpb24gY21lKG0sdixULE4pe3ZhciBWPW0ubGVuZ3RoO2ZvcihUPVFlKFQpLFQ8MCYmKFQ9LVQ+Vj8wOlYrVCksTj1OPT09ZXx8Tj5WP1Y6UWUoTiksTjwwJiYoTis9ViksTj1UPk4/MDpKcHQoTik7VDxOOyltW1QrK109djtyZXR1cm4gbX1mdW5jdGlvbiBPZnQobSx2KXt2YXIgVD1bXTtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7dihOLFYsWSkmJlQucHVzaChOKX0pLFR9ZnVuY3Rpb24gUm8obSx2LFQsTixWKXt2YXIgWT0tMSxKPW0ubGVuZ3RoO2ZvcihUfHwoVD1abWUpLFZ8fChWPVtdKTsrK1k8Sjspe3ZhciBpdD1tW1ldO3Y+MCYmVChpdCk/dj4xP1JvKGl0LHYtMSxULE4sVik6cG0oVixpdCk6Tnx8KFZbVi5sZW5ndGhdPWl0KX1yZXR1cm4gVn12YXIgU3E9bHB0KCksemZ0PWxwdCghMCk7ZnVuY3Rpb24gbWgobSx2KXtyZXR1cm4gbSYmU3EobSx2LHBvKX1mdW5jdGlvbiBNcShtLHYpe3JldHVybiBtJiZ6ZnQobSx2LHBvKX1mdW5jdGlvbiBhSShtLHYpe3JldHVybiBmbSh2LGZ1bmN0aW9uKFQpe3JldHVybiB1cChtW1RdKX0pfWZ1bmN0aW9uIGlfKG0sdil7dj12bSh2LG0pO2Zvcih2YXIgVD0wLE49di5sZW5ndGg7bSE9bnVsbCYmVDxOOyltPW1bX2godltUKytdKV07cmV0dXJuIFQmJlQ9PU4/bTplfWZ1bmN0aW9uIEZmdChtLHYsVCl7dmFyIE49dihtKTtyZXR1cm4gJGUobSk/TjpwbShOLFQobSkpfWZ1bmN0aW9uIExhKG0pe3JldHVybiBtPT1udWxsP209PT1lP3R0Omh0OnRfJiZ0XyBpbiB2bihtKT9XbWUobSk6aWdlKG0pfWZ1bmN0aW9uIEVxKG0sdil7cmV0dXJuIG0+dn1mdW5jdGlvbiB1bWUobSx2KXtyZXR1cm4gbSE9bnVsbCYmdW4uY2FsbChtLHYpfWZ1bmN0aW9uIGhtZShtLHYpe3JldHVybiBtIT1udWxsJiZ2IGluIHZuKG0pfWZ1bmN0aW9uIGZtZShtLHYsVCl7cmV0dXJuIG0+PXJhKHYsVCkmJm08WGkodixUKX1mdW5jdGlvbiBUcShtLHYsVCl7Zm9yKHZhciBOPVQ/bHE6VjYsVj1tWzBdLmxlbmd0aCxZPW0ubGVuZ3RoLEo9WSxpdD12dChZKSxmdD0xLzAsRHQ9W107Si0tOyl7dmFyIE90PW1bSl07SiYmdiYmKE90PSRuKE90LFdzKHYpKSksZnQ9cmEoT3QubGVuZ3RoLGZ0KSxpdFtKXT0hVCYmKHZ8fFY+PTEyMCYmT3QubGVuZ3RoPj0xMjApP25ldyByXyhKJiZPdCk6ZX1PdD1tWzBdO3ZhciBWdD0tMSxvZT1pdFswXTt0OmZvcig7KytWdDxWJiZEdC5sZW5ndGg8ZnQ7KXt2YXIgVGU9T3RbVnRdLE5lPXY/dihUZSk6VGU7aWYoVGU9VHx8VGUhPT0wP1RlOjAsIShvZT9NTShvZSxOZSk6TihEdCxOZSxUKSkpe2ZvcihKPVk7LS1KOyl7dmFyIGVyPWl0W0pdO2lmKCEoZXI/TU0oZXIsTmUpOk4obVtKXSxOZSxUKSkpY29udGludWUgdH1vZSYmb2UucHVzaChOZSksRHQucHVzaChUZSl9fXJldHVybiBEdH1mdW5jdGlvbiBwbWUobSx2LFQsTil7cmV0dXJuIG1oKG0sZnVuY3Rpb24oVixZLEope3YoTixUKFYpLFksSil9KSxOfWZ1bmN0aW9uIGtNKG0sdixUKXt2PXZtKHYsbSksbT1FcHQobSx2KTt2YXIgTj1tPT1udWxsP206bVtfaChYbCh2KSldO3JldHVybiBOPT1udWxsP2U6R3MoTixtLFQpfWZ1bmN0aW9uIEJmdChtKXtyZXR1cm4gc2kobSkmJkxhKG0pPT1idH1mdW5jdGlvbiBkbWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09JHR9ZnVuY3Rpb24gbW1lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PV90fWZ1bmN0aW9uIFJNKG0sdixULE4sVil7cmV0dXJuIG09PT12PyEwOm09PW51bGx8fHY9PW51bGx8fCFzaShtKSYmIXNpKHYpP20hPT1tJiZ2IT09djpnbWUobSx2LFQsTixSTSxWKX1mdW5jdGlvbiBnbWUobSx2LFQsTixWLFkpe3ZhciBKPSRlKG0pLGl0PSRlKHYpLGZ0PUo/TXQ6bmEobSksRHQ9aXQ/TXQ6bmEodik7ZnQ9ZnQ9PWJ0P3d0OmZ0LER0PUR0PT1idD93dDpEdDt2YXIgT3Q9ZnQ9PXd0LFZ0PUR0PT13dCxvZT1mdD09RHQ7aWYob2UmJmJtKG0pKXtpZighYm0odikpcmV0dXJuITE7Sj0hMCxPdD0hMX1pZihvZSYmIU90KXJldHVybiBZfHwoWT1uZXcgZXUpLEp8fHd4KG0pP3lwdChtLHYsVCxOLFYsWSk6cW1lKG0sdixmdCxULE4sVixZKTtpZighKFQmZikpe3ZhciBUZT1PdCYmdW4uY2FsbChtLCJfX3dyYXBwZWRfXyIpLE5lPVZ0JiZ1bi5jYWxsKHYsIl9fd3JhcHBlZF9fIik7aWYoVGV8fE5lKXt2YXIgZXI9VGU/bS52YWx1ZSgpOm0sRGU9TmU/di52YWx1ZSgpOnY7cmV0dXJuIFl8fChZPW5ldyBldSksVihlcixEZSxULE4sWSl9fXJldHVybiBvZT8oWXx8KFk9bmV3IGV1KSxHbWUobSx2LFQsTixWLFkpKTohMX1mdW5jdGlvbiBfbWUobSl7cmV0dXJuIHNpKG0pJiZuYShtKT09cX1mdW5jdGlvbiBDcShtLHYsVCxOKXt2YXIgVj1ULmxlbmd0aCxZPVYsSj0hTjtpZihtPT1udWxsKXJldHVybiFZO2ZvcihtPXZuKG0pO1YtLTspe3ZhciBpdD1UW1ZdO2lmKEomJml0WzJdP2l0WzFdIT09bVtpdFswXV06IShpdFswXWluIG0pKXJldHVybiExfWZvcig7KytWPFk7KXtpdD1UW1ZdO3ZhciBmdD1pdFswXSxEdD1tW2Z0XSxPdD1pdFsxXTtpZihKJiZpdFsyXSl7aWYoRHQ9PT1lJiYhKGZ0IGluIG0pKXJldHVybiExfWVsc2V7dmFyIFZ0PW5ldyBldTtpZihOKXZhciBvZT1OKER0LE90LGZ0LG0sdixWdCk7aWYoIShvZT09PWU/Uk0oT3QsRHQsZnxwLE4sVnQpOm9lKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSGZ0KG0pe2lmKCFlaShtKXx8UW1lKG0pKXJldHVybiExO3ZhciB2PXVwKG0pP19kZTpQcjtyZXR1cm4gdi50ZXN0KGFfKG0pKX1mdW5jdGlvbiB5bWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09ZWV9ZnVuY3Rpb24gdm1lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PUxlfWZ1bmN0aW9uIHhtZShtKXtyZXR1cm4gc2kobSkmJlNJKG0ubGVuZ3RoKSYmISFrbltMYShtKV19ZnVuY3Rpb24gVmZ0KG0pe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9tOm09PW51bGw/Z3M6dHlwZW9mIG09PSJvYmplY3QiPyRlKG0pP0dmdChtWzBdLG1bMV0pOnFmdChtKTpjZHQobSl9ZnVuY3Rpb24gQXEobSl7aWYoIU9NKG0pKXJldHVybiBTZGUobSk7dmFyIHY9W107Zm9yKHZhciBUIGluIHZuKG0pKXVuLmNhbGwobSxUKSYmVCE9ImNvbnN0cnVjdG9yIiYmdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIGJtZShtKXtpZighZWkobSkpcmV0dXJuIG5nZShtKTt2YXIgdj1PTShtKSxUPVtdO2Zvcih2YXIgTiBpbiBtKU49PSJjb25zdHJ1Y3RvciImJih2fHwhdW4uY2FsbChtLE4pKXx8VC5wdXNoKE4pO3JldHVybiBUfWZ1bmN0aW9uIFBxKG0sdil7cmV0dXJuIG08dn1mdW5jdGlvbiBVZnQobSx2KXt2YXIgVD0tMSxOPWRzKG0pP3Z0KG0ubGVuZ3RoKTpbXTtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7TlsrK1RdPXYoVixZLEopfSksTn1mdW5jdGlvbiBxZnQobSl7dmFyIHY9R3EobSk7cmV0dXJuIHYubGVuZ3RoPT0xJiZ2WzBdWzJdP1NwdCh2WzBdWzBdLHZbMF1bMV0pOmZ1bmN0aW9uKFQpe3JldHVybiBUPT09bXx8Q3EoVCxtLHYpfX1mdW5jdGlvbiBHZnQobSx2KXtyZXR1cm4gWXEobSkmJndwdCh2KT9TcHQoX2gobSksdik6ZnVuY3Rpb24oVCl7dmFyIE49ckcoVCxtKTtyZXR1cm4gTj09PWUmJk49PT12P25HKFQsbSk6Uk0odixOLGZ8cCl9fWZ1bmN0aW9uIHNJKG0sdixULE4sVil7bSE9PXYmJlNxKHYsZnVuY3Rpb24oWSxKKXtpZihWfHwoVj1uZXcgZXUpLGVpKFkpKXdtZShtLHYsSixULHNJLE4sVik7ZWxzZXt2YXIgaXQ9Tj9OKFhxKG0sSiksWSxKKyIiLG0sdixWKTplO2l0PT09ZSYmKGl0PVkpLGJxKG0sSixpdCl9fSxtcyl9ZnVuY3Rpb24gd21lKG0sdixULE4sVixZLEope3ZhciBpdD1YcShtLFQpLGZ0PVhxKHYsVCksRHQ9Si5nZXQoZnQpO2lmKER0KXticShtLFQsRHQpO3JldHVybn12YXIgT3Q9WT9ZKGl0LGZ0LFQrIiIsbSx2LEopOmUsVnQ9T3Q9PT1lO2lmKFZ0KXt2YXIgb2U9JGUoZnQpLFRlPSFvZSYmYm0oZnQpLE5lPSFvZSYmIVRlJiZ3eChmdCk7T3Q9ZnQsb2V8fFRlfHxOZT8kZShpdCk/T3Q9aXQ6eGkoaXQpP090PXBzKGl0KTpUZT8oVnQ9ITEsT3Q9cnB0KGZ0LCEwKSk6TmU/KFZ0PSExLE90PW5wdChmdCwhMCkpOk90PVtdOkZNKGZ0KXx8c18oZnQpPyhPdD1pdCxzXyhpdCk/T3Q9UXB0KGl0KTooIWVpKGl0KXx8dXAoaXQpKSYmKE90PWJwdChmdCkpKTpWdD0hMX1WdCYmKEouc2V0KGZ0LE90KSxWKE90LGZ0LE4sWSxKKSxKLmRlbGV0ZShmdCkpLGJxKG0sVCxPdCl9ZnVuY3Rpb24gV2Z0KG0sdil7dmFyIFQ9bS5sZW5ndGg7aWYoISFUKXJldHVybiB2Kz12PDA/VDowLGNwKHYsVCk/bVt2XTplfWZ1bmN0aW9uIFlmdChtLHYsVCl7di5sZW5ndGg/dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiAkZShZKT9mdW5jdGlvbihKKXtyZXR1cm4gaV8oSixZLmxlbmd0aD09PTE/WVswXTpZKX06WX0pOnY9W2dzXTt2YXIgTj0tMTt2PSRuKHYsV3Moa2UoKSkpO3ZhciBWPVVmdChtLGZ1bmN0aW9uKFksSixpdCl7dmFyIGZ0PSRuKHYsZnVuY3Rpb24oRHQpe3JldHVybiBEdChZKX0pO3JldHVybntjcml0ZXJpYTpmdCxpbmRleDorK04sdmFsdWU6WX19KTtyZXR1cm4gJHBlKFYsZnVuY3Rpb24oWSxKKXtyZXR1cm4gRG1lKFksSixUKX0pfWZ1bmN0aW9uIFNtZShtLHYpe3JldHVybiBqZnQobSx2LGZ1bmN0aW9uKFQsTil7cmV0dXJuIG5HKG0sTil9KX1mdW5jdGlvbiBqZnQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9e307KytOPFY7KXt2YXIgSj12W05dLGl0PWlfKG0sSik7VChpdCxKKSYmTk0oWSx2bShKLG0pLGl0KX1yZXR1cm4gWX1mdW5jdGlvbiBNbWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBpXyh2LG0pfX1mdW5jdGlvbiBJcShtLHYsVCxOKXt2YXIgVj1OP1hwZTpmeCxZPS0xLEo9di5sZW5ndGgsaXQ9bTtmb3IobT09PXYmJih2PXBzKHYpKSxUJiYoaXQ9JG4obSxXcyhUKSkpOysrWTxKOylmb3IodmFyIGZ0PTAsRHQ9dltZXSxPdD1UP1QoRHQpOkR0OyhmdD1WKGl0LE90LGZ0LE4pKT4tMTspaXQhPT1tJiZaNi5jYWxsKGl0LGZ0LDEpLFo2LmNhbGwobSxmdCwxKTtyZXR1cm4gbX1mdW5jdGlvbiBYZnQobSx2KXtmb3IodmFyIFQ9bT92Lmxlbmd0aDowLE49VC0xO1QtLTspe3ZhciBWPXZbVF07aWYoVD09Tnx8ViE9PVkpe3ZhciBZPVY7Y3AoVik/WjYuY2FsbChtLFYsMSk6TnEobSxWKX19cmV0dXJuIG19ZnVuY3Rpb24gTHEobSx2KXtyZXR1cm4gbSt0SShBZnQoKSoodi1tKzEpKX1mdW5jdGlvbiBFbWUobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9WGkoUTYoKHYtbSkvKFR8fDEpKSwwKSxKPXZ0KFkpO1ktLTspSltOP1k6KytWXT1tLG0rPVQ7cmV0dXJuIEp9ZnVuY3Rpb24ga3EobSx2KXt2YXIgVD0iIjtpZighbXx8djwxfHx2PlUpcmV0dXJuIFQ7ZG8gdiUyJiYoVCs9bSksdj10SSh2LzIpLHYmJihtKz1tKTt3aGlsZSh2KTtyZXR1cm4gVH1mdW5jdGlvbiBucihtLHYpe3JldHVybiAkcShNcHQobSx2LGdzKSxtKyIiKX1mdW5jdGlvbiBUbWUobSl7cmV0dXJuIExmdChTeChtKSl9ZnVuY3Rpb24gQ21lKG0sdil7dmFyIFQ9U3gobSk7cmV0dXJuIF9JKFQsbl8odiwwLFQubGVuZ3RoKSl9ZnVuY3Rpb24gTk0obSx2LFQsTil7aWYoIWVpKG0pKXJldHVybiBtO3Y9dm0odixtKTtmb3IodmFyIFY9LTEsWT12Lmxlbmd0aCxKPVktMSxpdD1tO2l0IT1udWxsJiYrK1Y8WTspe3ZhciBmdD1faCh2W1ZdKSxEdD1UO2lmKGZ0PT09Il9fcHJvdG9fXyJ8fGZ0PT09ImNvbnN0cnVjdG9yInx8ZnQ9PT0icHJvdG90eXBlIilyZXR1cm4gbTtpZihWIT1KKXt2YXIgT3Q9aXRbZnRdO0R0PU4/TihPdCxmdCxpdCk6ZSxEdD09PWUmJihEdD1laShPdCk/T3Q6Y3AodltWKzFdKT9bXTp7fSl9SU0oaXQsZnQsRHQpLGl0PWl0W2Z0XX1yZXR1cm4gbX12YXIgJGZ0PWVJP2Z1bmN0aW9uKG0sdil7cmV0dXJuIGVJLnNldChtLHYpLG19OmdzLEFtZT1KNj9mdW5jdGlvbihtLHYpe3JldHVybiBKNihtLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOm9HKHYpLHdyaXRhYmxlOiEwfSl9OmdzO2Z1bmN0aW9uIFBtZShtKXtyZXR1cm4gX0koU3gobSkpfWZ1bmN0aW9uIGpsKG0sdixUKXt2YXIgTj0tMSxWPW0ubGVuZ3RoO3Y8MCYmKHY9LXY+Vj8wOlYrdiksVD1UPlY/VjpULFQ8MCYmKFQrPVYpLFY9dj5UPzA6VC12Pj4+MCx2Pj4+PTA7Zm9yKHZhciBZPXZ0KFYpOysrTjxWOylZW05dPW1bTit2XTtyZXR1cm4gWX1mdW5jdGlvbiBJbWUobSx2KXt2YXIgVDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9dihOLFYsWSksIVR9KSwhIVR9ZnVuY3Rpb24gbEkobSx2LFQpe3ZhciBOPTAsVj1tPT1udWxsP046bS5sZW5ndGg7aWYodHlwZW9mIHY9PSJudW1iZXIiJiZ2PT09diYmVjw9c3Qpe2Zvcig7TjxWOyl7dmFyIFk9TitWPj4+MSxKPW1bWV07SiE9PW51bGwmJiFqcyhKKSYmKFQ/Sjw9djpKPHYpP049WSsxOlY9WX1yZXR1cm4gVn1yZXR1cm4gUnEobSx2LGdzLFQpfWZ1bmN0aW9uIFJxKG0sdixULE4pe3ZhciBWPTAsWT1tPT1udWxsPzA6bS5sZW5ndGg7aWYoWT09PTApcmV0dXJuIDA7dj1UKHYpO2Zvcih2YXIgSj12IT09dixpdD12PT09bnVsbCxmdD1qcyh2KSxEdD12PT09ZTtWPFk7KXt2YXIgT3Q9dEkoKFYrWSkvMiksVnQ9VChtW090XSksb2U9VnQhPT1lLFRlPVZ0PT09bnVsbCxOZT1WdD09PVZ0LGVyPWpzKFZ0KTtpZihKKXZhciBEZT1OfHxOZTtlbHNlIER0P0RlPU5lJiYoTnx8b2UpOml0P0RlPU5lJiZvZSYmKE58fCFUZSk6ZnQ/RGU9TmUmJm9lJiYhVGUmJihOfHwhZXIpOlRlfHxlcj9EZT0hMTpEZT1OP1Z0PD12OlZ0PHY7RGU/Vj1PdCsxOlk9T3R9cmV0dXJuIHJhKFksb3QpfWZ1bmN0aW9uIEtmdChtLHYpe2Zvcih2YXIgVD0tMSxOPW0ubGVuZ3RoLFY9MCxZPVtdOysrVDxOOyl7dmFyIEo9bVtUXSxpdD12P3YoSik6SjtpZighVHx8IXJ1KGl0LGZ0KSl7dmFyIGZ0PWl0O1lbVisrXT1KPT09MD8wOkp9fXJldHVybiBZfWZ1bmN0aW9uIFpmdChtKXtyZXR1cm4gdHlwZW9mIG09PSJudW1iZXIiP206anMobSk/WjorbX1mdW5jdGlvbiBZcyhtKXtpZih0eXBlb2YgbT09InN0cmluZyIpcmV0dXJuIG07aWYoJGUobSkpcmV0dXJuICRuKG0sWXMpKyIiO2lmKGpzKG0pKXJldHVybiBQZnQ/UGZ0LmNhbGwobSk6IiI7dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiB5bShtLHYsVCl7dmFyIE49LTEsVj1WNixZPW0ubGVuZ3RoLEo9ITAsaXQ9W10sZnQ9aXQ7aWYoVClKPSExLFY9bHE7ZWxzZSBpZihZPj1yKXt2YXIgRHQ9dj9udWxsOlZtZShtKTtpZihEdClyZXR1cm4gcTYoRHQpO0o9ITEsVj1NTSxmdD1uZXcgcl99ZWxzZSBmdD12P1tdOml0O3Q6Zm9yKDsrK048WTspe3ZhciBPdD1tW05dLFZ0PXY/dihPdCk6T3Q7aWYoT3Q9VHx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1mdC5sZW5ndGg7b2UtLTspaWYoZnRbb2VdPT09VnQpY29udGludWUgdDt2JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KX1lbHNlIFYoZnQsVnQsVCl8fChmdCE9PWl0JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KSl9cmV0dXJuIGl0fWZ1bmN0aW9uIE5xKG0sdil7cmV0dXJuIHY9dm0odixtKSxtPUVwdChtLHYpLG09PW51bGx8fGRlbGV0ZSBtW19oKFhsKHYpKV19ZnVuY3Rpb24gSmZ0KG0sdixULE4pe3JldHVybiBOTShtLHYsVChpXyhtLHYpKSxOKX1mdW5jdGlvbiBjSShtLHYsVCxOKXtmb3IodmFyIFY9bS5sZW5ndGgsWT1OP1Y6LTE7KE4/WS0tOisrWTxWKSYmdihtW1ldLFksbSk7KTtyZXR1cm4gVD9qbChtLE4/MDpZLE4/WSsxOlYpOmpsKG0sTj9ZKzE6MCxOP1Y6WSl9ZnVuY3Rpb24gUWZ0KG0sdil7dmFyIFQ9bTtyZXR1cm4gVCBpbnN0YW5jZW9mIGdyJiYoVD1ULnZhbHVlKCkpLGNxKHYsZnVuY3Rpb24oTixWKXtyZXR1cm4gVi5mdW5jLmFwcGx5KFYudGhpc0FyZyxwbShbTl0sVi5hcmdzKSl9LFQpfWZ1bmN0aW9uIERxKG0sdixUKXt2YXIgTj1tLmxlbmd0aDtpZihOPDIpcmV0dXJuIE4/eW0obVswXSk6W107Zm9yKHZhciBWPS0xLFk9dnQoTik7KytWPE47KWZvcih2YXIgSj1tW1ZdLGl0PS0xOysraXQ8TjspaXQhPVYmJihZW1ZdPUxNKFlbVl18fEosbVtpdF0sdixUKSk7cmV0dXJuIHltKFJvKFksMSksdixUKX1mdW5jdGlvbiB0cHQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPW0ubGVuZ3RoLFk9di5sZW5ndGgsSj17fTsrK048Vjspe3ZhciBpdD1OPFk/dltOXTplO1QoSixtW05dLGl0KX1yZXR1cm4gSn1mdW5jdGlvbiBPcShtKXtyZXR1cm4geGkobSk/bTpbXX1mdW5jdGlvbiB6cShtKXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bTpnc31mdW5jdGlvbiB2bShtLHYpe3JldHVybiAkZShtKT9tOllxKG0sdik/W21dOlBwdChvbihtKSl9dmFyIExtZT1ucjtmdW5jdGlvbiB4bShtLHYsVCl7dmFyIE49bS5sZW5ndGg7cmV0dXJuIFQ9VD09PWU/TjpULCF2JiZUPj1OP206amwobSx2LFQpfXZhciBlcHQ9eWRlfHxmdW5jdGlvbihtKXtyZXR1cm4gZm8uY2xlYXJUaW1lb3V0KG0pfTtmdW5jdGlvbiBycHQobSx2KXtpZih2KXJldHVybiBtLnNsaWNlKCk7dmFyIFQ9bS5sZW5ndGgsTj1TZnQ/U2Z0KFQpOm5ldyBtLmNvbnN0cnVjdG9yKFQpO3JldHVybiBtLmNvcHkoTiksTn1mdW5jdGlvbiBGcShtKXt2YXIgdj1uZXcgbS5jb25zdHJ1Y3RvcihtLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgJDYodikuc2V0KG5ldyAkNihtKSksdn1mdW5jdGlvbiBrbWUobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBSbWUobSl7dmFyIHY9bmV3IG0uY29uc3RydWN0b3IobS5zb3VyY2UsS2UuZXhlYyhtKSk7cmV0dXJuIHYubGFzdEluZGV4PW0ubGFzdEluZGV4LHZ9ZnVuY3Rpb24gTm1lKG0pe3JldHVybiBQTT92bihQTS5jYWxsKG0pKTp7fX1mdW5jdGlvbiBucHQobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5sZW5ndGgpfWZ1bmN0aW9uIGlwdChtLHYpe2lmKG0hPT12KXt2YXIgVD1tIT09ZSxOPW09PT1udWxsLFY9bT09PW0sWT1qcyhtKSxKPXYhPT1lLGl0PXY9PT1udWxsLGZ0PXY9PT12LER0PWpzKHYpO2lmKCFpdCYmIUR0JiYhWSYmbT52fHxZJiZKJiZmdCYmIWl0JiYhRHR8fE4mJkomJmZ0fHwhVCYmZnR8fCFWKXJldHVybiAxO2lmKCFOJiYhWSYmIUR0JiZtPHZ8fER0JiZUJiZWJiYhTiYmIVl8fGl0JiZUJiZWfHwhSiYmVnx8IWZ0KXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIERtZShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5jcml0ZXJpYSxZPXYuY3JpdGVyaWEsSj1WLmxlbmd0aCxpdD1ULmxlbmd0aDsrK048Sjspe3ZhciBmdD1pcHQoVltOXSxZW05dKTtpZihmdCl7aWYoTj49aXQpcmV0dXJuIGZ0O3ZhciBEdD1UW05dO3JldHVybiBmdCooRHQ9PSJkZXNjIj8tMToxKX19cmV0dXJuIG0uaW5kZXgtdi5pbmRleH1mdW5jdGlvbiBvcHQobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9bS5sZW5ndGgsSj1ULmxlbmd0aCxpdD0tMSxmdD12Lmxlbmd0aCxEdD1YaShZLUosMCksT3Q9dnQoZnQrRHQpLFZ0PSFOOysraXQ8ZnQ7KU90W2l0XT12W2l0XTtmb3IoOysrVjxKOykoVnR8fFY8WSkmJihPdFtUW1ZdXT1tW1ZdKTtmb3IoO0R0LS07KU90W2l0KytdPW1bVisrXTtyZXR1cm4gT3R9ZnVuY3Rpb24gYXB0KG0sdixULE4pe2Zvcih2YXIgVj0tMSxZPW0ubGVuZ3RoLEo9LTEsaXQ9VC5sZW5ndGgsZnQ9LTEsRHQ9di5sZW5ndGgsT3Q9WGkoWS1pdCwwKSxWdD12dChPdCtEdCksb2U9IU47KytWPE90OylWdFtWXT1tW1ZdO2Zvcih2YXIgVGU9VjsrK2Z0PER0OylWdFtUZStmdF09dltmdF07Zm9yKDsrK0o8aXQ7KShvZXx8VjxZKSYmKFZ0W1RlK1RbSl1dPW1bVisrXSk7cmV0dXJuIFZ0fWZ1bmN0aW9uIHBzKG0sdil7dmFyIFQ9LTEsTj1tLmxlbmd0aDtmb3Iodnx8KHY9dnQoTikpOysrVDxOOyl2W1RdPW1bVF07cmV0dXJuIHZ9ZnVuY3Rpb24gZ2gobSx2LFQsTil7dmFyIFY9IVQ7VHx8KFQ9e30pO2Zvcih2YXIgWT0tMSxKPXYubGVuZ3RoOysrWTxKOyl7dmFyIGl0PXZbWV0sZnQ9Tj9OKFRbaXRdLG1baXRdLGl0LFQsbSk6ZTtmdD09PWUmJihmdD1tW2l0XSksVj9hcChULGl0LGZ0KTpJTShULGl0LGZ0KX1yZXR1cm4gVH1mdW5jdGlvbiBPbWUobSx2KXtyZXR1cm4gZ2gobSxXcShtKSx2KX1mdW5jdGlvbiB6bWUobSx2KXtyZXR1cm4gZ2gobSx2cHQobSksdil9ZnVuY3Rpb24gdUkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVj0kZShUKT9VcGU6b21lLFk9dj92KCk6e307cmV0dXJuIFYoVCxtLGtlKE4sMiksWSl9fWZ1bmN0aW9uIHZ4KG0pe3JldHVybiBucihmdW5jdGlvbih2LFQpe3ZhciBOPS0xLFY9VC5sZW5ndGgsWT1WPjE/VFtWLTFdOmUsSj1WPjI/VFsyXTplO2ZvcihZPW0ubGVuZ3RoPjMmJnR5cGVvZiBZPT0iZnVuY3Rpb24iPyhWLS0sWSk6ZSxKJiZrYShUWzBdLFRbMV0sSikmJihZPVY8Mz9lOlksVj0xKSx2PXZuKHYpOysrTjxWOyl7dmFyIGl0PVRbTl07aXQmJm0odixpdCxOLFkpfXJldHVybiB2fSl9ZnVuY3Rpb24gc3B0KG0sdil7cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD09bnVsbClyZXR1cm4gVDtpZighZHMoVCkpcmV0dXJuIG0oVCxOKTtmb3IodmFyIFY9VC5sZW5ndGgsWT12P1Y6LTEsSj12bihUKTsodj9ZLS06KytZPFYpJiZOKEpbWV0sWSxKKSE9PSExOyk7cmV0dXJuIFR9fWZ1bmN0aW9uIGxwdChtKXtyZXR1cm4gZnVuY3Rpb24odixULE4pe2Zvcih2YXIgVj0tMSxZPXZuKHYpLEo9Tih2KSxpdD1KLmxlbmd0aDtpdC0tOyl7dmFyIGZ0PUpbbT9pdDorK1ZdO2lmKFQoWVtmdF0sZnQsWSk9PT0hMSlicmVha31yZXR1cm4gdn19ZnVuY3Rpb24gRm1lKG0sdixUKXt2YXIgTj12JmQsVj1ETShtKTtmdW5jdGlvbiBZKCl7dmFyIEo9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgWT9WOm07cmV0dXJuIEouYXBwbHkoTj9UOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gWX1mdW5jdGlvbiBjcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3Y9b24odik7dmFyIFQ9cHgodik/dHUodik6ZSxOPVQ/VFswXTp2LmNoYXJBdCgwKSxWPVQ/eG0oVCwxKS5qb2luKCIiKTp2LnNsaWNlKDEpO3JldHVybiBOW21dKCkrVn19ZnVuY3Rpb24geHgobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBjcShzZHQoYWR0KHYpLnJlcGxhY2UoQXBlLCIiKSksbSwiIil9fWZ1bmN0aW9uIERNKG0pe3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWFyZ3VtZW50cztzd2l0Y2godi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG07Y2FzZSAxOnJldHVybiBuZXcgbSh2WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSx2WzJdLHZbM10sdls0XSk7Y2FzZSA2OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSk7Y2FzZSA3OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSx2WzZdKX12YXIgVD15eChtLnByb3RvdHlwZSksTj1tLmFwcGx5KFQsdik7cmV0dXJuIGVpKE4pP046VH19ZnVuY3Rpb24gQm1lKG0sdixUKXt2YXIgTj1ETShtKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsSj12dChZKSxpdD1ZLGZ0PWJ4KFYpO2l0LS07KUpbaXRdPWFyZ3VtZW50c1tpdF07dmFyIER0PVk8MyYmSlswXSE9PWZ0JiZKW1ktMV0hPT1mdD9bXTpkbShKLGZ0KTtpZihZLT1EdC5sZW5ndGgsWTxUKXJldHVybiBkcHQobSx2LGhJLFYucGxhY2Vob2xkZXIsZSxKLER0LGUsZSxULVkpO3ZhciBPdD10aGlzJiZ0aGlzIT09Zm8mJnRoaXMgaW5zdGFuY2VvZiBWP046bTtyZXR1cm4gR3MoT3QsdGhpcyxKKX1yZXR1cm4gVn1mdW5jdGlvbiB1cHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYsVCxOKXt2YXIgVj12bih2KTtpZighZHModikpe3ZhciBZPWtlKFQsMyk7dj1wbyh2KSxUPWZ1bmN0aW9uKGl0KXtyZXR1cm4gWShWW2l0XSxpdCxWKX19dmFyIEo9bSh2LFQsTik7cmV0dXJuIEo+LTE/VltZP3ZbSl06Sl06ZX19ZnVuY3Rpb24gaHB0KG0pe3JldHVybiBscChmdW5jdGlvbih2KXt2YXIgVD12Lmxlbmd0aCxOPVQsVj1XbC5wcm90b3R5cGUudGhydTtmb3IobSYmdi5yZXZlcnNlKCk7Ti0tOyl7dmFyIFk9dltOXTtpZih0eXBlb2YgWSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7aWYoViYmIUomJm1JKFkpPT0id3JhcHBlciIpdmFyIEo9bmV3IFdsKFtdLCEwKX1mb3IoTj1KP046VDsrK048VDspe1k9dltOXTt2YXIgaXQ9bUkoWSksZnQ9aXQ9PSJ3cmFwcGVyIj9xcShZKTplO2Z0JiZqcShmdFswXSkmJmZ0WzFdPT0oQ3x5fGJ8UCkmJiFmdFs0XS5sZW5ndGgmJmZ0WzldPT0xP0o9SlttSShmdFswXSldLmFwcGx5KEosZnRbM10pOko9WS5sZW5ndGg9PTEmJmpxKFkpP0pbaXRdKCk6Si50aHJ1KFkpfXJldHVybiBmdW5jdGlvbigpe3ZhciBEdD1hcmd1bWVudHMsT3Q9RHRbMF07aWYoSiYmRHQubGVuZ3RoPT0xJiYkZShPdCkpcmV0dXJuIEoucGxhbnQoT3QpLnZhbHVlKCk7Zm9yKHZhciBWdD0wLG9lPVQ/dltWdF0uYXBwbHkodGhpcyxEdCk6T3Q7KytWdDxUOylvZT12W1Z0XS5jYWxsKHRoaXMsb2UpO3JldHVybiBvZX19KX1mdW5jdGlvbiBoSShtLHYsVCxOLFYsWSxKLGl0LGZ0LER0KXt2YXIgT3Q9diZDLFZ0PXYmZCxvZT12JmcsVGU9diYoeXx4KSxOZT12JmssZXI9b2U/ZTpETShtKTtmdW5jdGlvbiBEZSgpe2Zvcih2YXIgcHI9YXJndW1lbnRzLmxlbmd0aCx5cj12dChwciksWHM9cHI7WHMtLTspeXJbWHNdPWFyZ3VtZW50c1tYc107aWYoVGUpdmFyIFJhPWJ4KERlKSwkcz1acGUoeXIsUmEpO2lmKE4mJih5cj1vcHQoeXIsTixWLFRlKSksWSYmKHlyPWFwdCh5cixZLEosVGUpKSxwci09JHMsVGUmJnByPER0KXt2YXIgYmk9ZG0oeXIsUmEpO3JldHVybiBkcHQobSx2LGhJLERlLnBsYWNlaG9sZGVyLFQseXIsYmksaXQsZnQsRHQtcHIpfXZhciBudT1WdD9UOnRoaXMsZnA9b2U/bnVbbV06bTtyZXR1cm4gcHI9eXIubGVuZ3RoLGl0P3lyPW9nZSh5cixpdCk6TmUmJnByPjEmJnlyLnJldmVyc2UoKSxPdCYmZnQ8cHImJih5ci5sZW5ndGg9ZnQpLHRoaXMmJnRoaXMhPT1mbyYmdGhpcyBpbnN0YW5jZW9mIERlJiYoZnA9ZXJ8fERNKGZwKSksZnAuYXBwbHkobnUseXIpfXJldHVybiBEZX1mdW5jdGlvbiBmcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXtyZXR1cm4gcG1lKFQsbSx2KE4pLHt9KX19ZnVuY3Rpb24gZkkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVjtpZihUPT09ZSYmTj09PWUpcmV0dXJuIHY7aWYoVCE9PWUmJihWPVQpLE4hPT1lKXtpZihWPT09ZSlyZXR1cm4gTjt0eXBlb2YgVD09InN0cmluZyJ8fHR5cGVvZiBOPT0ic3RyaW5nIj8oVD1ZcyhUKSxOPVlzKE4pKTooVD1aZnQoVCksTj1aZnQoTikpLFY9bShULE4pfXJldHVybiBWfX1mdW5jdGlvbiBCcShtKXtyZXR1cm4gbHAoZnVuY3Rpb24odil7cmV0dXJuIHY9JG4odixXcyhrZSgpKSksbnIoZnVuY3Rpb24oVCl7dmFyIE49dGhpcztyZXR1cm4gbSh2LGZ1bmN0aW9uKFYpe3JldHVybiBHcyhWLE4sVCl9KX0pfSl9ZnVuY3Rpb24gcEkobSx2KXt2PXY9PT1lPyIgIjpZcyh2KTt2YXIgVD12Lmxlbmd0aDtpZihUPDIpcmV0dXJuIFQ/a3EodixtKTp2O3ZhciBOPWtxKHYsUTYobS9keCh2KSkpO3JldHVybiBweCh2KT94bSh0dShOKSwwLG0pLmpvaW4oIiIpOk4uc2xpY2UoMCxtKX1mdW5jdGlvbiBIbWUobSx2LFQsTil7dmFyIFY9diZkLFk9RE0obSk7ZnVuY3Rpb24gSigpe2Zvcih2YXIgaXQ9LTEsZnQ9YXJndW1lbnRzLmxlbmd0aCxEdD0tMSxPdD1OLmxlbmd0aCxWdD12dChPdCtmdCksb2U9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgSj9ZOm07KytEdDxPdDspVnRbRHRdPU5bRHRdO2Zvcig7ZnQtLTspVnRbRHQrK109YXJndW1lbnRzWysraXRdO3JldHVybiBHcyhvZSxWP1Q6dGhpcyxWdCl9cmV0dXJuIEp9ZnVuY3Rpb24gcHB0KG0pe3JldHVybiBmdW5jdGlvbih2LFQsTil7cmV0dXJuIE4mJnR5cGVvZiBOIT0ibnVtYmVyIiYma2EodixULE4pJiYoVD1OPWUpLHY9aHAodiksVD09PWU/KFQ9dix2PTApOlQ9aHAoVCksTj1OPT09ZT92PFQ/MTotMTpocChOKSxFbWUodixULE4sbSl9fWZ1bmN0aW9uIGRJKG0pe3JldHVybiBmdW5jdGlvbih2LFQpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyImJnR5cGVvZiBUPT0ic3RyaW5nInx8KHY9JGwodiksVD0kbChUKSksbSh2LFQpfX1mdW5jdGlvbiBkcHQobSx2LFQsTixWLFksSixpdCxmdCxEdCl7dmFyIE90PXYmeSxWdD1PdD9KOmUsb2U9T3Q/ZTpKLFRlPU90P1k6ZSxOZT1PdD9lOlk7dnw9T3Q/YjpTLHYmPX4oT3Q/UzpiKSx2Jl98fCh2Jj1+KGR8ZykpO3ZhciBlcj1bbSx2LFYsVGUsVnQsTmUsb2UsaXQsZnQsRHRdLERlPVQuYXBwbHkoZSxlcik7cmV0dXJuIGpxKG0pJiZUcHQoRGUsZXIpLERlLnBsYWNlaG9sZGVyPU4sQ3B0KERlLG0sdil9ZnVuY3Rpb24gSHEobSl7dmFyIHY9amlbbV07cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD0kbChUKSxOPU49PW51bGw/MDpyYShRZShOKSwyOTIpLE4mJkNmdChUKSl7dmFyIFY9KG9uKFQpKyJlIikuc3BsaXQoImUiKSxZPXYoVlswXSsiZSIrKCtWWzFdK04pKTtyZXR1cm4gVj0ob24oWSkrImUiKS5zcGxpdCgiZSIpLCsoVlswXSsiZSIrKCtWWzFdLU4pKX1yZXR1cm4gdihUKX19dmFyIFZtZT1neCYmMS9xNihuZXcgZ3goWywtMF0pKVsxXT09ej9mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGd4KG0pfTpsRztmdW5jdGlvbiBtcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciBUPW5hKHYpO3JldHVybiBUPT1xP2dxKHYpOlQ9PUxlP2lkZSh2KTpLcGUodixtKHYpKX19ZnVuY3Rpb24gc3AobSx2LFQsTixWLFksSixpdCl7dmFyIGZ0PXYmZztpZighZnQmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2YXIgRHQ9Tj9OLmxlbmd0aDowO2lmKER0fHwodiY9fihifFMpLE49Vj1lKSxKPUo9PT1lP0o6WGkoUWUoSiksMCksaXQ9aXQ9PT1lP2l0OlFlKGl0KSxEdC09Vj9WLmxlbmd0aDowLHYmUyl7dmFyIE90PU4sVnQ9VjtOPVY9ZX12YXIgb2U9ZnQ/ZTpxcShtKSxUZT1bbSx2LFQsTixWLE90LFZ0LFksSixpdF07aWYob2UmJnJnZShUZSxvZSksbT1UZVswXSx2PVRlWzFdLFQ9VGVbMl0sTj1UZVszXSxWPVRlWzRdLGl0PVRlWzldPVRlWzldPT09ZT9mdD8wOm0ubGVuZ3RoOlhpKFRlWzldLUR0LDApLCFpdCYmdiYoeXx4KSYmKHYmPX4oeXx4KSksIXZ8fHY9PWQpdmFyIE5lPUZtZShtLHYsVCk7ZWxzZSB2PT15fHx2PT14P05lPUJtZShtLHYsaXQpOih2PT1ifHx2PT0oZHxiKSkmJiFWLmxlbmd0aD9OZT1IbWUobSx2LFQsTik6TmU9aEkuYXBwbHkoZSxUZSk7dmFyIGVyPW9lPyRmdDpUcHQ7cmV0dXJuIENwdChlcihOZSxUZSksbSx2KX1mdW5jdGlvbiBncHQobSx2LFQsTil7cmV0dXJuIG09PT1lfHxydShtLG14W1RdKSYmIXVuLmNhbGwoTixUKT92Om19ZnVuY3Rpb24gX3B0KG0sdixULE4sVixZKXtyZXR1cm4gZWkobSkmJmVpKHYpJiYoWS5zZXQodixtKSxzSShtLHYsZSxfcHQsWSksWS5kZWxldGUodikpLG19ZnVuY3Rpb24gVW1lKG0pe3JldHVybiBGTShtKT9lOm19ZnVuY3Rpb24geXB0KG0sdixULE4sVixZKXt2YXIgSj1UJmYsaXQ9bS5sZW5ndGgsZnQ9di5sZW5ndGg7aWYoaXQhPWZ0JiYhKEomJmZ0Pml0KSlyZXR1cm4hMTt2YXIgRHQ9WS5nZXQobSksT3Q9WS5nZXQodik7aWYoRHQmJk90KXJldHVybiBEdD09diYmT3Q9PW07dmFyIFZ0PS0xLG9lPSEwLFRlPVQmcD9uZXcgcl86ZTtmb3IoWS5zZXQobSx2KSxZLnNldCh2LG0pOysrVnQ8aXQ7KXt2YXIgTmU9bVtWdF0sZXI9dltWdF07aWYoTil2YXIgRGU9Sj9OKGVyLE5lLFZ0LHYsbSxZKTpOKE5lLGVyLFZ0LG0sdixZKTtpZihEZSE9PWUpe2lmKERlKWNvbnRpbnVlO29lPSExO2JyZWFrfWlmKFRlKXtpZighdXEodixmdW5jdGlvbihwcix5cil7aWYoIU1NKFRlLHlyKSYmKE5lPT09cHJ8fFYoTmUscHIsVCxOLFkpKSlyZXR1cm4gVGUucHVzaCh5cil9KSl7b2U9ITE7YnJlYWt9fWVsc2UgaWYoIShOZT09PWVyfHxWKE5lLGVyLFQsTixZKSkpe29lPSExO2JyZWFrfX1yZXR1cm4gWS5kZWxldGUobSksWS5kZWxldGUodiksb2V9ZnVuY3Rpb24gcW1lKG0sdixULE4sVixZLEope3N3aXRjaChUKXtjYXNlIGhlOmlmKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHxtLmJ5dGVPZmZzZXQhPXYuYnl0ZU9mZnNldClyZXR1cm4hMTttPW0uYnVmZmVyLHY9di5idWZmZXI7Y2FzZSAkdDpyZXR1cm4hKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHwhWShuZXcgJDYobSksbmV3ICQ2KHYpKSk7Y2FzZSBLdDpjYXNlIF90OmNhc2UgcHQ6cmV0dXJuIHJ1KCttLCt2KTtjYXNlIFg6cmV0dXJuIG0ubmFtZT09di5uYW1lJiZtLm1lc3NhZ2U9PXYubWVzc2FnZTtjYXNlIGVlOmNhc2UgYXI6cmV0dXJuIG09PXYrIiI7Y2FzZSBxOnZhciBpdD1ncTtjYXNlIExlOnZhciBmdD1OJmY7aWYoaXR8fChpdD1xNiksbS5zaXplIT12LnNpemUmJiFmdClyZXR1cm4hMTt2YXIgRHQ9Si5nZXQobSk7aWYoRHQpcmV0dXJuIER0PT12O058PXAsSi5zZXQobSx2KTt2YXIgT3Q9eXB0KGl0KG0pLGl0KHYpLE4sVixZLEopO3JldHVybiBKLmRlbGV0ZShtKSxPdDtjYXNlIGZyOmlmKFBNKXJldHVybiBQTS5jYWxsKG0pPT1QTS5jYWxsKHYpfXJldHVybiExfWZ1bmN0aW9uIEdtZShtLHYsVCxOLFYsWSl7dmFyIEo9VCZmLGl0PVZxKG0pLGZ0PWl0Lmxlbmd0aCxEdD1WcSh2KSxPdD1EdC5sZW5ndGg7aWYoZnQhPU90JiYhSilyZXR1cm4hMTtmb3IodmFyIFZ0PWZ0O1Z0LS07KXt2YXIgb2U9aXRbVnRdO2lmKCEoSj9vZSBpbiB2OnVuLmNhbGwodixvZSkpKXJldHVybiExfXZhciBUZT1ZLmdldChtKSxOZT1ZLmdldCh2KTtpZihUZSYmTmUpcmV0dXJuIFRlPT12JiZOZT09bTt2YXIgZXI9ITA7WS5zZXQobSx2KSxZLnNldCh2LG0pO2Zvcih2YXIgRGU9SjsrK1Z0PGZ0Oyl7b2U9aXRbVnRdO3ZhciBwcj1tW29lXSx5cj12W29lXTtpZihOKXZhciBYcz1KP04oeXIscHIsb2UsdixtLFkpOk4ocHIseXIsb2UsbSx2LFkpO2lmKCEoWHM9PT1lP3ByPT09eXJ8fFYocHIseXIsVCxOLFkpOlhzKSl7ZXI9ITE7YnJlYWt9RGV8fChEZT1vZT09ImNvbnN0cnVjdG9yIil9aWYoZXImJiFEZSl7dmFyIFJhPW0uY29uc3RydWN0b3IsJHM9di5jb25zdHJ1Y3RvcjtSYSE9JHMmJiJjb25zdHJ1Y3RvciJpbiBtJiYiY29uc3RydWN0b3IiaW4gdiYmISh0eXBlb2YgUmE9PSJmdW5jdGlvbiImJlJhIGluc3RhbmNlb2YgUmEmJnR5cGVvZiAkcz09ImZ1bmN0aW9uIiYmJHMgaW5zdGFuY2VvZiAkcykmJihlcj0hMSl9cmV0dXJuIFkuZGVsZXRlKG0pLFkuZGVsZXRlKHYpLGVyfWZ1bmN0aW9uIGxwKG0pe3JldHVybiAkcShNcHQobSxlLFJwdCksbSsiIil9ZnVuY3Rpb24gVnEobSl7cmV0dXJuIEZmdChtLHBvLFdxKX1mdW5jdGlvbiBVcShtKXtyZXR1cm4gRmZ0KG0sbXMsdnB0KX12YXIgcXE9ZUk/ZnVuY3Rpb24obSl7cmV0dXJuIGVJLmdldChtKX06bEc7ZnVuY3Rpb24gbUkobSl7Zm9yKHZhciB2PW0ubmFtZSsiIixUPV94W3ZdLE49dW4uY2FsbChfeCx2KT9ULmxlbmd0aDowO04tLTspe3ZhciBWPVRbTl0sWT1WLmZ1bmM7aWYoWT09bnVsbHx8WT09bSlyZXR1cm4gVi5uYW1lfXJldHVybiB2fWZ1bmN0aW9uIGJ4KG0pe3ZhciB2PXVuLmNhbGwoRywicGxhY2Vob2xkZXIiKT9HOm07cmV0dXJuIHYucGxhY2Vob2xkZXJ9ZnVuY3Rpb24ga2UoKXt2YXIgbT1HLml0ZXJhdGVlfHxhRztyZXR1cm4gbT1tPT09YUc/VmZ0Om0sYXJndW1lbnRzLmxlbmd0aD9tKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm19ZnVuY3Rpb24gZ0kobSx2KXt2YXIgVD1tLl9fZGF0YV9fO3JldHVybiBKbWUodik/VFt0eXBlb2Ygdj09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpULm1hcH1mdW5jdGlvbiBHcShtKXtmb3IodmFyIHY9cG8obSksVD12Lmxlbmd0aDtULS07KXt2YXIgTj12W1RdLFY9bVtOXTt2W1RdPVtOLFYsd3B0KFYpXX1yZXR1cm4gdn1mdW5jdGlvbiBvXyhtLHYpe3ZhciBUPWVkZShtLHYpO3JldHVybiBIZnQoVCk/VDplfWZ1bmN0aW9uIFdtZShtKXt2YXIgdj11bi5jYWxsKG0sdF8pLFQ9bVt0X107dHJ5e21bdF9dPWU7dmFyIE49ITB9Y2F0Y2goWSl7fXZhciBWPWo2LmNhbGwobSk7cmV0dXJuIE4mJih2P21bdF9dPVQ6ZGVsZXRlIG1bdF9dKSxWfXZhciBXcT15cT9mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9bXToobT12bihtKSxmbSh5cShtKSxmdW5jdGlvbih2KXtyZXR1cm4gRWZ0LmNhbGwobSx2KX0pKX06Y0csdnB0PXlxP2Z1bmN0aW9uKG0pe2Zvcih2YXIgdj1bXTttOylwbSh2LFdxKG0pKSxtPUs2KG0pO3JldHVybiB2fTpjRyxuYT1MYTsodnEmJm5hKG5ldyB2cShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aGV8fFRNJiZuYShuZXcgVE0pIT1xfHx4cSYmbmEoeHEucmVzb2x2ZSgpKSE9a3R8fGd4JiZuYShuZXcgZ3gpIT1MZXx8Q00mJm5hKG5ldyBDTSkhPSQpJiYobmE9ZnVuY3Rpb24obSl7dmFyIHY9TGEobSksVD12PT13dD9tLmNvbnN0cnVjdG9yOmUsTj1UP2FfKFQpOiIiO2lmKE4pc3dpdGNoKE4pe2Nhc2UgQ2RlOnJldHVybiBoZTtjYXNlIEFkZTpyZXR1cm4gcTtjYXNlIFBkZTpyZXR1cm4ga3Q7Y2FzZSBJZGU6cmV0dXJuIExlO2Nhc2UgTGRlOnJldHVybiAkfXJldHVybiB2fSk7ZnVuY3Rpb24gWW1lKG0sdixUKXtmb3IodmFyIE49LTEsVj1ULmxlbmd0aDsrK048Vjspe3ZhciBZPVRbTl0sSj1ZLnNpemU7c3dpdGNoKFkudHlwZSl7Y2FzZSJkcm9wIjptKz1KO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0Ijp2LT1KO2JyZWFrO2Nhc2UidGFrZSI6dj1yYSh2LG0rSik7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOm09WGkobSx2LUopO2JyZWFrfX1yZXR1cm57c3RhcnQ6bSxlbmQ6dn19ZnVuY3Rpb24gam1lKG0pe3ZhciB2PW0ubWF0Y2goRXQpO3JldHVybiB2P3ZbMV0uc3BsaXQoeHQpOltdfWZ1bmN0aW9uIHhwdChtLHYsVCl7dj12bSh2LG0pO2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9ITE7KytOPFY7KXt2YXIgSj1faCh2W05dKTtpZighKFk9bSE9bnVsbCYmVChtLEopKSlicmVhazttPW1bSl19cmV0dXJuIFl8fCsrTiE9Vj9ZOihWPW09PW51bGw/MDptLmxlbmd0aCwhIVYmJlNJKFYpJiZjcChKLFYpJiYoJGUobSl8fHNfKG0pKSl9ZnVuY3Rpb24gWG1lKG0pe3ZhciB2PW0ubGVuZ3RoLFQ9bmV3IG0uY29uc3RydWN0b3Iodik7cmV0dXJuIHYmJnR5cGVvZiBtWzBdPT0ic3RyaW5nIiYmdW4uY2FsbChtLCJpbmRleCIpJiYoVC5pbmRleD1tLmluZGV4LFQuaW5wdXQ9bS5pbnB1dCksVH1mdW5jdGlvbiBicHQobSl7cmV0dXJuIHR5cGVvZiBtLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhT00obSk/eXgoSzYobSkpOnt9fWZ1bmN0aW9uICRtZShtLHYsVCl7dmFyIE49bS5jb25zdHJ1Y3Rvcjtzd2l0Y2godil7Y2FzZSAkdDpyZXR1cm4gRnEobSk7Y2FzZSBLdDpjYXNlIF90OnJldHVybiBuZXcgTigrbSk7Y2FzZSBoZTpyZXR1cm4ga21lKG0sVCk7Y2FzZSBUdDpjYXNlIGJlOmNhc2UgbnQ6Y2FzZSBDdDpjYXNlIFd0OmNhc2UgZmU6Y2FzZSBhdDpjYXNlIHNlOmNhc2UgUXQ6cmV0dXJuIG5wdChtLFQpO2Nhc2UgcTpyZXR1cm4gbmV3IE47Y2FzZSBwdDpjYXNlIGFyOnJldHVybiBuZXcgTihtKTtjYXNlIGVlOnJldHVybiBSbWUobSk7Y2FzZSBMZTpyZXR1cm4gbmV3IE47Y2FzZSBmcjpyZXR1cm4gTm1lKG0pfX1mdW5jdGlvbiBLbWUobSx2KXt2YXIgVD12Lmxlbmd0aDtpZighVClyZXR1cm4gbTt2YXIgTj1ULTE7cmV0dXJuIHZbTl09KFQ+MT8iJiAiOiIiKSt2W05dLHY9di5qb2luKFQ+Mj8iLCAiOiIgIiksbS5yZXBsYWNlKGd0LGB7Ci8qIFt3cmFwcGVkIHdpdGggYCt2K2BdICovCmApfWZ1bmN0aW9uIFptZShtKXtyZXR1cm4gJGUobSl8fHNfKG0pfHwhIShUZnQmJm0mJm1bVGZ0XSl9ZnVuY3Rpb24gY3AobSx2KXt2YXIgVD10eXBlb2YgbTtyZXR1cm4gdj12PT1udWxsP1U6diwhIXYmJihUPT0ibnVtYmVyInx8VCE9InN5bWJvbCImJm5wLnRlc3QobSkpJiZtPi0xJiZtJTE9PTAmJm08dn1mdW5jdGlvbiBrYShtLHYsVCl7aWYoIWVpKFQpKXJldHVybiExO3ZhciBOPXR5cGVvZiB2O3JldHVybihOPT0ibnVtYmVyIj9kcyhUKSYmY3AodixULmxlbmd0aCk6Tj09InN0cmluZyImJnYgaW4gVCk/cnUoVFt2XSxtKTohMX1mdW5jdGlvbiBZcShtLHYpe2lmKCRlKG0pKXJldHVybiExO3ZhciBUPXR5cGVvZiBtO3JldHVybiBUPT0ibnVtYmVyInx8VD09InN5bWJvbCJ8fFQ9PSJib29sZWFuInx8bT09bnVsbHx8anMobSk/ITA6Y20udGVzdChtKXx8IWx4LnRlc3QobSl8fHYhPW51bGwmJm0gaW4gdm4odil9ZnVuY3Rpb24gSm1lKG0pe3ZhciB2PXR5cGVvZiBtO3JldHVybiB2PT0ic3RyaW5nInx8dj09Im51bWJlciJ8fHY9PSJzeW1ib2wifHx2PT0iYm9vbGVhbiI/bSE9PSJfX3Byb3RvX18iOm09PT1udWxsfWZ1bmN0aW9uIGpxKG0pe3ZhciB2PW1JKG0pLFQ9R1t2XTtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uInx8ISh2IGluIGdyLnByb3RvdHlwZSkpcmV0dXJuITE7aWYobT09PVQpcmV0dXJuITA7dmFyIE49cXEoVCk7cmV0dXJuISFOJiZtPT09TlswXX1mdW5jdGlvbiBRbWUobSl7cmV0dXJuISF3ZnQmJndmdCBpbiBtfXZhciB0Z2U9VzY/dXA6dUc7ZnVuY3Rpb24gT00obSl7dmFyIHY9bSYmbS5jb25zdHJ1Y3RvcixUPXR5cGVvZiB2PT0iZnVuY3Rpb24iJiZ2LnByb3RvdHlwZXx8bXg7cmV0dXJuIG09PT1UfWZ1bmN0aW9uIHdwdChtKXtyZXR1cm4gbT09PW0mJiFlaShtKX1mdW5jdGlvbiBTcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQ9PW51bGw/ITE6VFttXT09PXYmJih2IT09ZXx8bSBpbiB2bihUKSl9fWZ1bmN0aW9uIGVnZShtKXt2YXIgdj1iSShtLGZ1bmN0aW9uKE4pe3JldHVybiBULnNpemU9PT1zJiZULmNsZWFyKCksTn0pLFQ9di5jYWNoZTtyZXR1cm4gdn1mdW5jdGlvbiByZ2UobSx2KXt2YXIgVD1tWzFdLE49dlsxXSxWPVR8TixZPVY8KGR8Z3xDKSxKPU49PUMmJlQ9PXl8fE49PUMmJlQ9PVAmJm1bN10ubGVuZ3RoPD12WzhdfHxOPT0oQ3xQKSYmdls3XS5sZW5ndGg8PXZbOF0mJlQ9PXk7aWYoIShZfHxKKSlyZXR1cm4gbTtOJmQmJihtWzJdPXZbMl0sVnw9VCZkPzA6Xyk7dmFyIGl0PXZbM107aWYoaXQpe3ZhciBmdD1tWzNdO21bM109ZnQ/b3B0KGZ0LGl0LHZbNF0pOml0LG1bNF09ZnQ/ZG0obVszXSxsKTp2WzRdfXJldHVybiBpdD12WzVdLGl0JiYoZnQ9bVs1XSxtWzVdPWZ0P2FwdChmdCxpdCx2WzZdKTppdCxtWzZdPWZ0P2RtKG1bNV0sbCk6dls2XSksaXQ9dls3XSxpdCYmKG1bN109aXQpLE4mQyYmKG1bOF09bVs4XT09bnVsbD92WzhdOnJhKG1bOF0sdls4XSkpLG1bOV09PW51bGwmJihtWzldPXZbOV0pLG1bMF09dlswXSxtWzFdPVYsbX1mdW5jdGlvbiBuZ2UobSl7dmFyIHY9W107aWYobSE9bnVsbClmb3IodmFyIFQgaW4gdm4obSkpdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIGlnZShtKXtyZXR1cm4gajYuY2FsbChtKX1mdW5jdGlvbiBNcHQobSx2LFQpe3JldHVybiB2PVhpKHY9PT1lP20ubGVuZ3RoLTE6diwwKSxmdW5jdGlvbigpe2Zvcih2YXIgTj1hcmd1bWVudHMsVj0tMSxZPVhpKE4ubGVuZ3RoLXYsMCksSj12dChZKTsrK1Y8WTspSltWXT1OW3YrVl07Vj0tMTtmb3IodmFyIGl0PXZ0KHYrMSk7KytWPHY7KWl0W1ZdPU5bVl07cmV0dXJuIGl0W3ZdPVQoSiksR3MobSx0aGlzLGl0KX19ZnVuY3Rpb24gRXB0KG0sdil7cmV0dXJuIHYubGVuZ3RoPDI/bTppXyhtLGpsKHYsMCwtMSkpfWZ1bmN0aW9uIG9nZShtLHYpe2Zvcih2YXIgVD1tLmxlbmd0aCxOPXJhKHYubGVuZ3RoLFQpLFY9cHMobSk7Ti0tOyl7dmFyIFk9dltOXTttW05dPWNwKFksVCk/VltZXTplfXJldHVybiBtfWZ1bmN0aW9uIFhxKG0sdil7aWYoISh2PT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIG1bdl09PSJmdW5jdGlvbiIpJiZ2IT0iX19wcm90b19fIilyZXR1cm4gbVt2XX12YXIgVHB0PUFwdCgkZnQpLHpNPXhkZXx8ZnVuY3Rpb24obSx2KXtyZXR1cm4gZm8uc2V0VGltZW91dChtLHYpfSwkcT1BcHQoQW1lKTtmdW5jdGlvbiBDcHQobSx2LFQpe3ZhciBOPXYrIiI7cmV0dXJuICRxKG0sS21lKE4sYWdlKGptZShOKSxUKSkpfWZ1bmN0aW9uIEFwdChtKXt2YXIgdj0wLFQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTj1NZGUoKSxWPUktKE4tVCk7aWYoVD1OLFY+MCl7aWYoKyt2Pj1CKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB2PTA7cmV0dXJuIG0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBfSShtLHYpe3ZhciBUPS0xLE49bS5sZW5ndGgsVj1OLTE7Zm9yKHY9dj09PWU/Tjp2OysrVDx2Oyl7dmFyIFk9THEoVCxWKSxKPW1bWV07bVtZXT1tW1RdLG1bVF09Sn1yZXR1cm4gbS5sZW5ndGg9dixtfXZhciBQcHQ9ZWdlKGZ1bmN0aW9uKG0pe3ZhciB2PVtdO3JldHVybiBtLmNoYXJDb2RlQXQoMCk9PT00NiYmdi5wdXNoKCIiKSxtLnJlcGxhY2UoSjAsZnVuY3Rpb24oVCxOLFYsWSl7di5wdXNoKFY/WS5yZXBsYWNlKFVlLCIkMSIpOk58fFQpfSksdn0pO2Z1bmN0aW9uIF9oKG0pe2lmKHR5cGVvZiBtPT0ic3RyaW5nInx8anMobSkpcmV0dXJuIG07dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiBhXyhtKXtpZihtIT1udWxsKXt0cnl7cmV0dXJuIFk2LmNhbGwobSl9Y2F0Y2godil7fXRyeXtyZXR1cm4gbSsiIn1jYXRjaCh2KXt9fXJldHVybiIifWZ1bmN0aW9uIGFnZShtLHYpe3JldHVybiBxbChTdCxmdW5jdGlvbihUKXt2YXIgTj0iXy4iK1RbMF07diZUWzFdJiYhVjYobSxOKSYmbS5wdXNoKE4pfSksbS5zb3J0KCl9ZnVuY3Rpb24gSXB0KG0pe2lmKG0gaW5zdGFuY2VvZiBncilyZXR1cm4gbS5jbG9uZSgpO3ZhciB2PW5ldyBXbChtLl9fd3JhcHBlZF9fLG0uX19jaGFpbl9fKTtyZXR1cm4gdi5fX2FjdGlvbnNfXz1wcyhtLl9fYWN0aW9uc19fKSx2Ll9faW5kZXhfXz1tLl9faW5kZXhfXyx2Ll9fdmFsdWVzX189bS5fX3ZhbHVlc19fLHZ9ZnVuY3Rpb24gc2dlKG0sdixUKXsoVD9rYShtLHYsVCk6dj09PWUpP3Y9MTp2PVhpKFFlKHYpLDApO3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTnx8djwxKXJldHVybltdO2Zvcih2YXIgVj0wLFk9MCxKPXZ0KFE2KE4vdikpO1Y8TjspSltZKytdPWpsKG0sVixWKz12KTtyZXR1cm4gSn1mdW5jdGlvbiBsZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49MCxWPVtdOysrdjxUOyl7dmFyIFk9bVt2XTtZJiYoVltOKytdPVkpfXJldHVybiBWfWZ1bmN0aW9uIGNnZSgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW0pcmV0dXJuW107Zm9yKHZhciB2PXZ0KG0tMSksVD1hcmd1bWVudHNbMF0sTj1tO04tLTspdltOLTFdPWFyZ3VtZW50c1tOXTtyZXR1cm4gcG0oJGUoVCk/cHMoVCk6W1RdLFJvKHYsMSkpfXZhciB1Z2U9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4geGkobSk/TE0obSxSbyh2LDEseGksITApKTpbXX0pLGhnZT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPVhsKHYpO3JldHVybiB4aShUKSYmKFQ9ZSkseGkobSk/TE0obSxSbyh2LDEseGksITApLGtlKFQsMikpOltdfSksZmdlPW5yKGZ1bmN0aW9uKG0sdil7dmFyIFQ9WGwodik7cmV0dXJuIHhpKFQpJiYoVD1lKSx4aShtKT9MTShtLFJvKHYsMSx4aSwhMCksZSxUKTpbXX0pO2Z1bmN0aW9uIHBnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBkZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gTj8odj1UfHx2PT09ZT8xOlFlKHYpLHY9Ti12LGpsKG0sMCx2PDA/MDp2KSk6W119ZnVuY3Rpb24gbWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCwhMCk6W119ZnVuY3Rpb24gZ2dlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCk6W119ZnVuY3Rpb24gX2dlKG0sdixULE4pe3ZhciBWPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gVj8oVCYmdHlwZW9mIFQhPSJudW1iZXIiJiZrYShtLHYsVCkmJihUPTAsTj1WKSxjbWUobSx2LFQsTikpOltdfWZ1bmN0aW9uIExwdChtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO2lmKCFOKXJldHVybi0xO3ZhciBWPVQ9PW51bGw/MDpRZShUKTtyZXR1cm4gVjwwJiYoVj1YaShOK1YsMCkpLFU2KG0sa2UodiwzKSxWKX1mdW5jdGlvbiBrcHQobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1OLTE7cmV0dXJuIFQhPT1lJiYoVj1RZShUKSxWPVQ8MD9YaShOK1YsMCk6cmEoVixOLTEpKSxVNihtLGtlKHYsMyksViwhMCl9ZnVuY3Rpb24gUnB0KG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9SbyhtLDEpOltdfWZ1bmN0aW9uIHlnZShtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/Um8obSx6KTpbXX1mdW5jdGlvbiB2Z2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIFQ/KHY9dj09PWU/MTpRZSh2KSxSbyhtLHYpKTpbXX1mdW5jdGlvbiB4Z2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49e307Kyt2PFQ7KXt2YXIgVj1tW3ZdO05bVlswXV09VlsxXX1yZXR1cm4gTn1mdW5jdGlvbiBOcHQobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP21bMF06ZX1mdW5jdGlvbiBiZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1UPT1udWxsPzA6UWUoVCk7cmV0dXJuIFY8MCYmKFY9WGkoTitWLDApKSxmeChtLHYsVil9ZnVuY3Rpb24gd2dlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDAsLTEpOltdfXZhciBTZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9JG4obSxPcSk7cmV0dXJuIHYubGVuZ3RoJiZ2WzBdPT09bVswXT9UcSh2KTpbXX0pLE1nZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKSxUPSRuKG0sT3EpO3JldHVybiB2PT09WGwoVCk/dj1lOlQucG9wKCksVC5sZW5ndGgmJlRbMF09PT1tWzBdP1RxKFQsa2UodiwyKSk6W119KSxFZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSksVD0kbihtLE9xKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsdiYmVC5wb3AoKSxULmxlbmd0aCYmVFswXT09PW1bMF0/VHEoVCxlLHYpOltdfSk7ZnVuY3Rpb24gVGdlKG0sdil7cmV0dXJuIG09PW51bGw/IiI6d2RlLmNhbGwobSx2KX1mdW5jdGlvbiBYbChtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/bVt2LTFdOmV9ZnVuY3Rpb24gQ2dlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7aWYoIU4pcmV0dXJuLTE7dmFyIFY9TjtyZXR1cm4gVCE9PWUmJihWPVFlKFQpLFY9VjwwP1hpKE4rViwwKTpyYShWLE4tMSkpLHY9PT12P2FkZShtLHYsVik6VTYobSxkZnQsViwhMCl9ZnVuY3Rpb24gQWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP1dmdChtLFFlKHYpKTplfXZhciBQZ2U9bnIoRHB0KTtmdW5jdGlvbiBEcHQobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdik6bX1mdW5jdGlvbiBJZ2UobSx2LFQpe3JldHVybiBtJiZtLmxlbmd0aCYmdiYmdi5sZW5ndGg/SXEobSx2LGtlKFQsMikpOm19ZnVuY3Rpb24gTGdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdixlLFQpOm19dmFyIGtnZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aCxOPXdxKG0sdik7cmV0dXJuIFhmdChtLCRuKHYsZnVuY3Rpb24oVil7cmV0dXJuIGNwKFYsVCk/K1Y6Vn0pLnNvcnQoaXB0KSksTn0pO2Z1bmN0aW9uIFJnZShtLHYpe3ZhciBUPVtdO2lmKCEobSYmbS5sZW5ndGgpKXJldHVybiBUO3ZhciBOPS0xLFY9W10sWT1tLmxlbmd0aDtmb3Iodj1rZSh2LDMpOysrTjxZOyl7dmFyIEo9bVtOXTt2KEosTixtKSYmKFQucHVzaChKKSxWLnB1c2goTikpfXJldHVybiBYZnQobSxWKSxUfWZ1bmN0aW9uIEtxKG0pe3JldHVybiBtPT1udWxsP206VGRlLmNhbGwobSl9ZnVuY3Rpb24gTmdlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIE4/KFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpPyh2PTAsVD1OKToodj12PT1udWxsPzA6UWUodiksVD1UPT09ZT9OOlFlKFQpKSxqbChtLHYsVCkpOltdfWZ1bmN0aW9uIERnZShtLHYpe3JldHVybiBsSShtLHYpfWZ1bmN0aW9uIE9nZShtLHYsVCl7cmV0dXJuIFJxKG0sdixrZShULDIpKX1mdW5jdGlvbiB6Z2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7aWYoVCl7dmFyIE49bEkobSx2KTtpZihOPFQmJnJ1KG1bTl0sdikpcmV0dXJuIE59cmV0dXJuLTF9ZnVuY3Rpb24gRmdlKG0sdil7cmV0dXJuIGxJKG0sdiwhMCl9ZnVuY3Rpb24gQmdlKG0sdixUKXtyZXR1cm4gUnEobSx2LGtlKFQsMiksITApfWZ1bmN0aW9uIEhnZShtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aDtpZihUKXt2YXIgTj1sSShtLHYsITApLTE7aWYocnUobVtOXSx2KSlyZXR1cm4gTn1yZXR1cm4tMX1mdW5jdGlvbiBWZ2UobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP0tmdChtKTpbXX1mdW5jdGlvbiBVZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/S2Z0KG0sa2UodiwyKSk6W119ZnVuY3Rpb24gcWdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDEsdik6W119ZnVuY3Rpb24gR2dlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGg/KHY9VHx8dj09PWU/MTpRZSh2KSxqbChtLDAsdjwwPzA6dikpOltdfWZ1bmN0aW9uIFdnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksdj1OLXYsamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBZZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpLCExLCEwKTpbXX1mdW5jdGlvbiBqZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpKTpbXX12YXIgWGdlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiB5bShSbyhtLDEseGksITApKX0pLCRnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4geGkodikmJih2PWUpLHltKFJvKG0sMSx4aSwhMCksa2UodiwyKSl9KSxLZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLHltKFJvKG0sMSx4aSwhMCksZSx2KX0pO2Z1bmN0aW9uIFpnZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/eW0obSk6W119ZnVuY3Rpb24gSmdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP3ltKG0sa2UodiwyKSk6W119ZnVuY3Rpb24gUWdlKG0sdil7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLG0mJm0ubGVuZ3RoP3ltKG0sZSx2KTpbXX1mdW5jdGlvbiBacShtKXtpZighKG0mJm0ubGVuZ3RoKSlyZXR1cm5bXTt2YXIgdj0wO3JldHVybiBtPWZtKG0sZnVuY3Rpb24oVCl7aWYoeGkoVCkpcmV0dXJuIHY9WGkoVC5sZW5ndGgsdiksITB9KSxkcSh2LGZ1bmN0aW9uKFQpe3JldHVybiAkbihtLGhxKFQpKX0pfWZ1bmN0aW9uIE9wdChtLHYpe2lmKCEobSYmbS5sZW5ndGgpKXJldHVybltdO3ZhciBUPVpxKG0pO3JldHVybiB2PT1udWxsP1Q6JG4oVCxmdW5jdGlvbihOKXtyZXR1cm4gR3ModixlLE4pfSl9dmFyIHQwZT1ucihmdW5jdGlvbihtLHYpe3JldHVybiB4aShtKT9MTShtLHYpOltdfSksZTBlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiBEcShmbShtLHhpKSl9KSxyMGU9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHhpKHYpJiYodj1lKSxEcShmbShtLHhpKSxrZSh2LDIpKX0pLG4wZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsRHEoZm0obSx4aSksZSx2KX0pLGkwZT1ucihacSk7ZnVuY3Rpb24gbzBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxJTSl9ZnVuY3Rpb24gYTBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxOTSl9dmFyIHMwZT1ucihmdW5jdGlvbihtKXt2YXIgdj1tLmxlbmd0aCxUPXY+MT9tW3YtMV06ZTtyZXR1cm4gVD10eXBlb2YgVD09ImZ1bmN0aW9uIj8obS5wb3AoKSxUKTplLE9wdChtLFQpfSk7ZnVuY3Rpb24genB0KG0pe3ZhciB2PUcobSk7cmV0dXJuIHYuX19jaGFpbl9fPSEwLHZ9ZnVuY3Rpb24gbDBlKG0sdil7cmV0dXJuIHYobSksbX1mdW5jdGlvbiB5SShtLHYpe3JldHVybiB2KG0pfXZhciBjMGU9bHAoZnVuY3Rpb24obSl7dmFyIHY9bS5sZW5ndGgsVD12P21bMF06MCxOPXRoaXMuX193cmFwcGVkX18sVj1mdW5jdGlvbihZKXtyZXR1cm4gd3EoWSxtKX07cmV0dXJuIHY+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEoTiBpbnN0YW5jZW9mIGdyKXx8IWNwKFQpP3RoaXMudGhydShWKTooTj1OLnNsaWNlKFQsK1QrKHY/MTowKSksTi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOnlJLGFyZ3M6W1ZdLHRoaXNBcmc6ZX0pLG5ldyBXbChOLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKFkpe3JldHVybiB2JiYhWS5sZW5ndGgmJlkucHVzaChlKSxZfSkpfSk7ZnVuY3Rpb24gdTBlKCl7cmV0dXJuIHpwdCh0aGlzKX1mdW5jdGlvbiBoMGUoKXtyZXR1cm4gbmV3IFdsKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9ZnVuY3Rpb24gZjBlKCl7dGhpcy5fX3ZhbHVlc19fPT09ZSYmKHRoaXMuX192YWx1ZXNfXz1acHQodGhpcy52YWx1ZSgpKSk7dmFyIG09dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdj1tP2U6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybntkb25lOm0sdmFsdWU6dn19ZnVuY3Rpb24gcDBlKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZDBlKG0pe2Zvcih2YXIgdixUPXRoaXM7VCBpbnN0YW5jZW9mIG5JOyl7dmFyIE49SXB0KFQpO04uX19pbmRleF9fPTAsTi5fX3ZhbHVlc19fPWUsdj9WLl9fd3JhcHBlZF9fPU46dj1OO3ZhciBWPU47VD1ULl9fd3JhcHBlZF9ffXJldHVybiBWLl9fd3JhcHBlZF9fPW0sdn1mdW5jdGlvbiBtMGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fO2lmKG0gaW5zdGFuY2VvZiBncil7dmFyIHY9bTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih2PW5ldyBncih0aGlzKSksdj12LnJldmVyc2UoKSx2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6eUksYXJnczpbS3FdLHRoaXNBcmc6ZX0pLG5ldyBXbCh2LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEtxKX1mdW5jdGlvbiBnMGUoKXtyZXR1cm4gUWZ0KHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9dmFyIF8wZT11SShmdW5jdGlvbihtLHYsVCl7dW4uY2FsbChtLFQpPysrbVtUXTphcChtLFQsMSl9KTtmdW5jdGlvbiB5MGUobSx2LFQpe3ZhciBOPSRlKG0pP2ZmdDpsbWU7cmV0dXJuIFQmJmthKG0sdixUKSYmKHY9ZSksTihtLGtlKHYsMykpfWZ1bmN0aW9uIHYwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciB4MGU9dXB0KExwdCksYjBlPXVwdChrcHQpO2Z1bmN0aW9uIHcwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLDEpfWZ1bmN0aW9uIFMwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLHopfWZ1bmN0aW9uIE0wZShtLHYsVCl7cmV0dXJuIFQ9VD09PWU/MTpRZShUKSxSbyh2SShtLHYpLFQpfWZ1bmN0aW9uIEZwdChtLHYpe3ZhciBUPSRlKG0pP3FsOl9tO3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gQnB0KG0sdil7dmFyIFQ9JGUobSk/cXBlOkRmdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBFMGU9dUkoZnVuY3Rpb24obSx2LFQpe3VuLmNhbGwobSxUKT9tW1RdLnB1c2godik6YXAobSxULFt2XSl9KTtmdW5jdGlvbiBUMGUobSx2LFQsTil7bT1kcyhtKT9tOlN4KG0pLFQ9VCYmIU4/UWUoVCk6MDt2YXIgVj1tLmxlbmd0aDtyZXR1cm4gVDwwJiYoVD1YaShWK1QsMCkpLE1JKG0pP1Q8PVYmJm0uaW5kZXhPZih2LFQpPi0xOiEhViYmZngobSx2LFQpPi0xfXZhciBDMGU9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPS0xLFY9dHlwZW9mIHY9PSJmdW5jdGlvbiIsWT1kcyhtKT92dChtLmxlbmd0aCk6W107cmV0dXJuIF9tKG0sZnVuY3Rpb24oSil7WVsrK05dPVY/R3ModixKLFQpOmtNKEosdixUKX0pLFl9KSxBMGU9dUkoZnVuY3Rpb24obSx2LFQpe2FwKG0sVCx2KX0pO2Z1bmN0aW9uIHZJKG0sdil7dmFyIFQ9JGUobSk/JG46VWZ0O3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gUDBlKG0sdixULE4pe3JldHVybiBtPT1udWxsP1tdOigkZSh2KXx8KHY9dj09bnVsbD9bXTpbdl0pLFQ9Tj9lOlQsJGUoVCl8fChUPVQ9PW51bGw/W106W1RdKSxZZnQobSx2LFQpKX12YXIgSTBlPXVJKGZ1bmN0aW9uKG0sdixUKXttW1Q/MDoxXS5wdXNoKHYpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiBMMGUobSx2LFQpe3ZhciBOPSRlKG0pP2NxOmdmdCxWPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gTihtLGtlKHYsNCksVCxWLF9tKX1mdW5jdGlvbiBrMGUobSx2LFQpe3ZhciBOPSRlKG0pP0dwZTpnZnQsVj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIE4obSxrZSh2LDQpLFQsVixEZnQpfWZ1bmN0aW9uIFIwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLHdJKGtlKHYsMykpKX1mdW5jdGlvbiBOMGUobSl7dmFyIHY9JGUobSk/TGZ0OlRtZTtyZXR1cm4gdihtKX1mdW5jdGlvbiBEMGUobSx2LFQpeyhUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodik7dmFyIE49JGUobSk/bm1lOkNtZTtyZXR1cm4gTihtLHYpfWZ1bmN0aW9uIE8wZShtKXt2YXIgdj0kZShtKT9pbWU6UG1lO3JldHVybiB2KG0pfWZ1bmN0aW9uIHowZShtKXtpZihtPT1udWxsKXJldHVybiAwO2lmKGRzKG0pKXJldHVybiBNSShtKT9keChtKTptLmxlbmd0aDt2YXIgdj1uYShtKTtyZXR1cm4gdj09cXx8dj09TGU/bS5zaXplOkFxKG0pLmxlbmd0aH1mdW5jdGlvbiBGMGUobSx2LFQpe3ZhciBOPSRlKG0pP3VxOkltZTtyZXR1cm4gVCYma2EobSx2LFQpJiYodj1lKSxOKG0sa2UodiwzKSl9dmFyIEIwZT1ucihmdW5jdGlvbihtLHYpe2lmKG09PW51bGwpcmV0dXJuW107dmFyIFQ9di5sZW5ndGg7cmV0dXJuIFQ+MSYma2EobSx2WzBdLHZbMV0pP3Y9W106VD4yJiZrYSh2WzBdLHZbMV0sdlsyXSkmJih2PVt2WzBdXSksWWZ0KG0sUm8odiwxKSxbXSl9KSx4ST12ZGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZvLkRhdGUubm93KCl9O2Z1bmN0aW9uIEgwZShtLHYpe2lmKHR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gbT1RZShtKSxmdW5jdGlvbigpe2lmKC0tbTwxKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHB0KG0sdixUKXtyZXR1cm4gdj1UP2U6dix2PW0mJnY9PW51bGw/bS5sZW5ndGg6dixzcChtLEMsZSxlLGUsZSx2KX1mdW5jdGlvbiBWcHQobSx2KXt2YXIgVDtpZih0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIG09UWUobSksZnVuY3Rpb24oKXtyZXR1cm4tLW0+MCYmKFQ9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG08PTEmJih2PWUpLFR9fXZhciBKcT1ucihmdW5jdGlvbihtLHYsVCl7dmFyIE49ZDtpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChKcSkpO058PWJ9cmV0dXJuIHNwKG0sTix2LFQsVil9KSxVcHQ9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPWR8ZztpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChVcHQpKTtOfD1ifXJldHVybiBzcCh2LE4sbSxULFYpfSk7ZnVuY3Rpb24gcXB0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seSxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9cXB0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gR3B0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seCxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9R3B0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gV3B0KG0sdixUKXt2YXIgTixWLFksSixpdCxmdCxEdD0wLE90PSExLFZ0PSExLG9lPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2PSRsKHYpfHwwLGVpKFQpJiYoT3Q9ISFULmxlYWRpbmcsVnQ9Im1heFdhaXQiaW4gVCxZPVZ0P1hpKCRsKFQubWF4V2FpdCl8fDAsdik6WSxvZT0idHJhaWxpbmciaW4gVD8hIVQudHJhaWxpbmc6b2UpO2Z1bmN0aW9uIFRlKGJpKXt2YXIgbnU9TixmcD1WO3JldHVybiBOPVY9ZSxEdD1iaSxKPW0uYXBwbHkoZnAsbnUpLEp9ZnVuY3Rpb24gTmUoYmkpe3JldHVybiBEdD1iaSxpdD16TShwcix2KSxPdD9UZShiaSk6Sn1mdW5jdGlvbiBlcihiaSl7dmFyIG51PWJpLWZ0LGZwPWJpLUR0LHVkdD12LW51O3JldHVybiBWdD9yYSh1ZHQsWS1mcCk6dWR0fWZ1bmN0aW9uIERlKGJpKXt2YXIgbnU9YmktZnQsZnA9YmktRHQ7cmV0dXJuIGZ0PT09ZXx8bnU+PXZ8fG51PDB8fFZ0JiZmcD49WX1mdW5jdGlvbiBwcigpe3ZhciBiaT14SSgpO2lmKERlKGJpKSlyZXR1cm4geXIoYmkpO2l0PXpNKHByLGVyKGJpKSl9ZnVuY3Rpb24geXIoYmkpe3JldHVybiBpdD1lLG9lJiZOP1RlKGJpKTooTj1WPWUsSil9ZnVuY3Rpb24gWHMoKXtpdCE9PWUmJmVwdChpdCksRHQ9MCxOPWZ0PVY9aXQ9ZX1mdW5jdGlvbiBSYSgpe3JldHVybiBpdD09PWU/Sjp5cih4SSgpKX1mdW5jdGlvbiAkcygpe3ZhciBiaT14SSgpLG51PURlKGJpKTtpZihOPWFyZ3VtZW50cyxWPXRoaXMsZnQ9YmksbnUpe2lmKGl0PT09ZSlyZXR1cm4gTmUoZnQpO2lmKFZ0KXJldHVybiBlcHQoaXQpLGl0PXpNKHByLHYpLFRlKGZ0KX1yZXR1cm4gaXQ9PT1lJiYoaXQ9ek0ocHIsdikpLEp9cmV0dXJuICRzLmNhbmNlbD1Ycywkcy5mbHVzaD1SYSwkc312YXIgVjBlPW5yKGZ1bmN0aW9uKG0sdil7cmV0dXJuIE5mdChtLDEsdil9KSxVMGU9bnIoZnVuY3Rpb24obSx2LFQpe3JldHVybiBOZnQobSwkbCh2KXx8MCxUKX0pO2Z1bmN0aW9uIHEwZShtKXtyZXR1cm4gc3AobSxrKX1mdW5jdGlvbiBiSShtLHYpe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24ifHx2IT1udWxsJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7dmFyIFQ9ZnVuY3Rpb24oKXt2YXIgTj1hcmd1bWVudHMsVj12P3YuYXBwbHkodGhpcyxOKTpOWzBdLFk9VC5jYWNoZTtpZihZLmhhcyhWKSlyZXR1cm4gWS5nZXQoVik7dmFyIEo9bS5hcHBseSh0aGlzLE4pO3JldHVybiBULmNhY2hlPVkuc2V0KFYsSil8fFksSn07cmV0dXJuIFQuY2FjaGU9bmV3KGJJLkNhY2hlfHxvcCksVH1iSS5DYWNoZT1vcDtmdW5jdGlvbiB3SShtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9YXJndW1lbnRzO3N3aXRjaCh2Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFtLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFtLmNhbGwodGhpcyx2WzBdKTtjYXNlIDI6cmV0dXJuIW0uY2FsbCh0aGlzLHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiFtLmNhbGwodGhpcyx2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIW0uYXBwbHkodGhpcyx2KX19ZnVuY3Rpb24gRzBlKG0pe3JldHVybiBWcHQoMixtKX12YXIgVzBlPUxtZShmdW5jdGlvbihtLHYpe3Y9di5sZW5ndGg9PTEmJiRlKHZbMF0pPyRuKHZbMF0sV3Moa2UoKSkpOiRuKFJvKHYsMSksV3Moa2UoKSkpO3ZhciBUPXYubGVuZ3RoO3JldHVybiBucihmdW5jdGlvbihOKXtmb3IodmFyIFY9LTEsWT1yYShOLmxlbmd0aCxUKTsrK1Y8WTspTltWXT12W1ZdLmNhbGwodGhpcyxOW1ZdKTtyZXR1cm4gR3MobSx0aGlzLE4pfSl9KSxRcT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoUXEpKTtyZXR1cm4gc3AobSxiLGUsdixUKX0pLFlwdD1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoWXB0KSk7cmV0dXJuIHNwKG0sUyxlLHYsVCl9KSxZMGU9bHAoZnVuY3Rpb24obSx2KXtyZXR1cm4gc3AobSxQLGUsZSxlLHYpfSk7ZnVuY3Rpb24gajBlKG0sdil7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEdsKGkpO3JldHVybiB2PXY9PT1lP3Y6UWUodiksbnIobSx2KX1mdW5jdGlvbiBYMGUobSx2KXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHY9dj09bnVsbD8wOlhpKFFlKHYpLDApLG5yKGZ1bmN0aW9uKFQpe3ZhciBOPVRbdl0sVj14bShULDAsdik7cmV0dXJuIE4mJnBtKFYsTiksR3MobSx0aGlzLFYpfSl9ZnVuY3Rpb24gJDBlKG0sdixUKXt2YXIgTj0hMCxWPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gZWkoVCkmJihOPSJsZWFkaW5nImluIFQ/ISFULmxlYWRpbmc6TixWPSJ0cmFpbGluZyJpbiBUPyEhVC50cmFpbGluZzpWKSxXcHQobSx2LHtsZWFkaW5nOk4sbWF4V2FpdDp2LHRyYWlsaW5nOlZ9KX1mdW5jdGlvbiBLMGUobSl7cmV0dXJuIEhwdChtLDEpfWZ1bmN0aW9uIFowZShtLHYpe3JldHVybiBRcSh6cSh2KSxtKX1mdW5jdGlvbiBKMGUoKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgbT1hcmd1bWVudHNbMF07cmV0dXJuICRlKG0pP206W21dfWZ1bmN0aW9uIFEwZShtKXtyZXR1cm4gWWwobSxoKX1mdW5jdGlvbiB0X2UobSx2KXtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsWWwobSxoLHYpfWZ1bmN0aW9uIGVfZShtKXtyZXR1cm4gWWwobSxjfGgpfWZ1bmN0aW9uIHJfZShtLHYpe3JldHVybiB2PXR5cGVvZiB2PT0iZnVuY3Rpb24iP3Y6ZSxZbChtLGN8aCx2KX1mdW5jdGlvbiBuX2UobSx2KXtyZXR1cm4gdj09bnVsbHx8UmZ0KG0sdixwbyh2KSl9ZnVuY3Rpb24gcnUobSx2KXtyZXR1cm4gbT09PXZ8fG0hPT1tJiZ2IT09dn12YXIgaV9lPWRJKEVxKSxvX2U9ZEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbT49dn0pLHNfPUJmdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0JmdDpmdW5jdGlvbihtKXtyZXR1cm4gc2kobSkmJnVuLmNhbGwobSwiY2FsbGVlIikmJiFFZnQuY2FsbChtLCJjYWxsZWUiKX0sJGU9dnQuaXNBcnJheSxhX2U9YWZ0P1dzKGFmdCk6ZG1lO2Z1bmN0aW9uIGRzKG0pe3JldHVybiBtIT1udWxsJiZTSShtLmxlbmd0aCkmJiF1cChtKX1mdW5jdGlvbiB4aShtKXtyZXR1cm4gc2kobSkmJmRzKG0pfWZ1bmN0aW9uIHNfZShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF8fHNpKG0pJiZMYShtKT09S3R9dmFyIGJtPWJkZXx8dUcsbF9lPXNmdD9XcyhzZnQpOm1tZTtmdW5jdGlvbiBjX2UobSl7cmV0dXJuIHNpKG0pJiZtLm5vZGVUeXBlPT09MSYmIUZNKG0pfWZ1bmN0aW9uIHVfZShtKXtpZihtPT1udWxsKXJldHVybiEwO2lmKGRzKG0pJiYoJGUobSl8fHR5cGVvZiBtPT0ic3RyaW5nInx8dHlwZW9mIG0uc3BsaWNlPT0iZnVuY3Rpb24ifHxibShtKXx8d3gobSl8fHNfKG0pKSlyZXR1cm4hbS5sZW5ndGg7dmFyIHY9bmEobSk7aWYodj09cXx8dj09TGUpcmV0dXJuIW0uc2l6ZTtpZihPTShtKSlyZXR1cm4hQXEobSkubGVuZ3RoO2Zvcih2YXIgVCBpbiBtKWlmKHVuLmNhbGwobSxUKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBoX2UobSx2KXtyZXR1cm4gUk0obSx2KX1mdW5jdGlvbiBmX2UobSx2LFQpe1Q9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDplO3ZhciBOPVQ/VChtLHYpOmU7cmV0dXJuIE49PT1lP1JNKG0sdixlLFQpOiEhTn1mdW5jdGlvbiB0RyhtKXtpZighc2kobSkpcmV0dXJuITE7dmFyIHY9TGEobSk7cmV0dXJuIHY9PVh8fHY9PWN0fHx0eXBlb2YgbS5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG0ubmFtZT09InN0cmluZyImJiFGTShtKX1mdW5jdGlvbiBwX2UobSl7cmV0dXJuIHR5cGVvZiBtPT0ibnVtYmVyIiYmQ2Z0KG0pfWZ1bmN0aW9uIHVwKG0pe2lmKCFlaShtKSlyZXR1cm4hMTt2YXIgdj1MYShtKTtyZXR1cm4gdj09ZXR8fHY9PWR0fHx2PT1sdHx8dj09aWV9ZnVuY3Rpb24ganB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm09PVFlKG0pfWZ1bmN0aW9uIFNJKG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm0+LTEmJm0lMT09MCYmbTw9VX1mdW5jdGlvbiBlaShtKXt2YXIgdj10eXBlb2YgbTtyZXR1cm4gbSE9bnVsbCYmKHY9PSJvYmplY3QifHx2PT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBzaShtKXtyZXR1cm4gbSE9bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifXZhciBYcHQ9bGZ0P1dzKGxmdCk6X21lO2Z1bmN0aW9uIGRfZShtLHYpe3JldHVybiBtPT09dnx8Q3EobSx2LEdxKHYpKX1mdW5jdGlvbiBtX2UobSx2LFQpe3JldHVybiBUPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6ZSxDcShtLHYsR3EodiksVCl9ZnVuY3Rpb24gZ19lKG0pe3JldHVybiAkcHQobSkmJm0hPSttfWZ1bmN0aW9uIF9fZShtKXtpZih0Z2UobSkpdGhyb3cgbmV3IFdlKG4pO3JldHVybiBIZnQobSl9ZnVuY3Rpb24geV9lKG0pe3JldHVybiBtPT09bnVsbH1mdW5jdGlvbiB2X2UobSl7cmV0dXJuIG09PW51bGx9ZnVuY3Rpb24gJHB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciJ8fHNpKG0pJiZMYShtKT09cHR9ZnVuY3Rpb24gRk0obSl7aWYoIXNpKG0pfHxMYShtKSE9d3QpcmV0dXJuITE7dmFyIHY9SzYobSk7aWYodj09PW51bGwpcmV0dXJuITA7dmFyIFQ9dW4uY2FsbCh2LCJjb25zdHJ1Y3RvciIpJiZ2LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgVD09ImZ1bmN0aW9uIiYmVCBpbnN0YW5jZW9mIFQmJlk2LmNhbGwoVCk9PW1kZX12YXIgZUc9Y2Z0P1dzKGNmdCk6eW1lO2Z1bmN0aW9uIHhfZShtKXtyZXR1cm4ganB0KG0pJiZtPj0tVSYmbTw9VX12YXIgS3B0PXVmdD9Xcyh1ZnQpOnZtZTtmdW5jdGlvbiBNSShtKXtyZXR1cm4gdHlwZW9mIG09PSJzdHJpbmcifHwhJGUobSkmJnNpKG0pJiZMYShtKT09YXJ9ZnVuY3Rpb24ganMobSl7cmV0dXJuIHR5cGVvZiBtPT0ic3ltYm9sInx8c2kobSkmJkxhKG0pPT1mcn12YXIgd3g9aGZ0P1dzKGhmdCk6eG1lO2Z1bmN0aW9uIGJfZShtKXtyZXR1cm4gbT09PWV9ZnVuY3Rpb24gd19lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PSR9ZnVuY3Rpb24gU19lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PUl0fXZhciBNX2U9ZEkoUHEpLEVfZT1kSShmdW5jdGlvbihtLHYpe3JldHVybiBtPD12fSk7ZnVuY3Rpb24gWnB0KG0pe2lmKCFtKXJldHVybltdO2lmKGRzKG0pKXJldHVybiBNSShtKT90dShtKTpwcyhtKTtpZihFTSYmbVtFTV0pcmV0dXJuIG5kZShtW0VNXSgpKTt2YXIgdj1uYShtKSxUPXY9PXE/Z3E6dj09TGU/cTY6U3g7cmV0dXJuIFQobSl9ZnVuY3Rpb24gaHAobSl7aWYoIW0pcmV0dXJuIG09PT0wP206MDtpZihtPSRsKG0pLG09PT16fHxtPT09LXope3ZhciB2PW08MD8tMToxO3JldHVybiB2Kld9cmV0dXJuIG09PT1tP206MH1mdW5jdGlvbiBRZShtKXt2YXIgdj1ocChtKSxUPXYlMTtyZXR1cm4gdj09PXY/VD92LVQ6djowfWZ1bmN0aW9uIEpwdChtKXtyZXR1cm4gbT9uXyhRZShtKSwwLHJ0KTowfWZ1bmN0aW9uICRsKG0pe2lmKHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gbTtpZihqcyhtKSlyZXR1cm4gWjtpZihlaShtKSl7dmFyIHY9dHlwZW9mIG0udmFsdWVPZj09ImZ1bmN0aW9uIj9tLnZhbHVlT2YoKTptO209ZWkodik/disiIjp2fWlmKHR5cGVvZiBtIT0ic3RyaW5nIilyZXR1cm4gbT09PTA/bTorbTttPV9mdChtKTt2YXIgVD1fci50ZXN0KG0pO3JldHVybiBUfHxqbi50ZXN0KG0pP0hwZShtLnNsaWNlKDIpLFQ/Mjo4KTpYci50ZXN0KG0pP1o6K219ZnVuY3Rpb24gUXB0KG0pe3JldHVybiBnaChtLG1zKG0pKX1mdW5jdGlvbiBUX2UobSl7cmV0dXJuIG0/bl8oUWUobSksLVUsVSk6bT09PTA/bTowfWZ1bmN0aW9uIG9uKG0pe3JldHVybiBtPT1udWxsPyIiOllzKG0pfXZhciBDX2U9dngoZnVuY3Rpb24obSx2KXtpZihPTSh2KXx8ZHModikpe2doKHYscG8odiksbSk7cmV0dXJufWZvcih2YXIgVCBpbiB2KXVuLmNhbGwodixUKSYmSU0obSxULHZbVF0pfSksdGR0PXZ4KGZ1bmN0aW9uKG0sdil7Z2godixtcyh2KSxtKX0pLEVJPXZ4KGZ1bmN0aW9uKG0sdixULE4pe2doKHYsbXModiksbSxOKX0pLEFfZT12eChmdW5jdGlvbihtLHYsVCxOKXtnaCh2LHBvKHYpLG0sTil9KSxQX2U9bHAod3EpO2Z1bmN0aW9uIElfZShtLHYpe3ZhciBUPXl4KG0pO3JldHVybiB2PT1udWxsP1Q6a2Z0KFQsdil9dmFyIExfZT1ucihmdW5jdGlvbihtLHYpe209dm4obSk7dmFyIFQ9LTEsTj12Lmxlbmd0aCxWPU4+Mj92WzJdOmU7Zm9yKFYmJmthKHZbMF0sdlsxXSxWKSYmKE49MSk7KytUPE47KWZvcih2YXIgWT12W1RdLEo9bXMoWSksaXQ9LTEsZnQ9Si5sZW5ndGg7KytpdDxmdDspe3ZhciBEdD1KW2l0XSxPdD1tW0R0XTsoT3Q9PT1lfHxydShPdCxteFtEdF0pJiYhdW4uY2FsbChtLER0KSkmJihtW0R0XT1ZW0R0XSl9cmV0dXJuIG19KSxrX2U9bnIoZnVuY3Rpb24obSl7cmV0dXJuIG0ucHVzaChlLF9wdCksR3MoZWR0LGUsbSl9KTtmdW5jdGlvbiBSX2UobSx2KXtyZXR1cm4gcGZ0KG0sa2UodiwzKSxtaCl9ZnVuY3Rpb24gTl9lKG0sdil7cmV0dXJuIHBmdChtLGtlKHYsMyksTXEpfWZ1bmN0aW9uIERfZShtLHYpe3JldHVybiBtPT1udWxsP206U3EobSxrZSh2LDMpLG1zKX1mdW5jdGlvbiBPX2UobSx2KXtyZXR1cm4gbT09bnVsbD9tOnpmdChtLGtlKHYsMyksbXMpfWZ1bmN0aW9uIHpfZShtLHYpe3JldHVybiBtJiZtaChtLGtlKHYsMykpfWZ1bmN0aW9uIEZfZShtLHYpe3JldHVybiBtJiZNcShtLGtlKHYsMykpfWZ1bmN0aW9uIEJfZShtKXtyZXR1cm4gbT09bnVsbD9bXTphSShtLHBvKG0pKX1mdW5jdGlvbiBIX2UobSl7cmV0dXJuIG09PW51bGw/W106YUkobSxtcyhtKSl9ZnVuY3Rpb24gckcobSx2LFQpe3ZhciBOPW09PW51bGw/ZTppXyhtLHYpO3JldHVybiBOPT09ZT9UOk59ZnVuY3Rpb24gVl9lKG0sdil7cmV0dXJuIG0hPW51bGwmJnhwdChtLHYsdW1lKX1mdW5jdGlvbiBuRyhtLHYpe3JldHVybiBtIT1udWxsJiZ4cHQobSx2LGhtZSl9dmFyIFVfZT1mcHQoZnVuY3Rpb24obSx2LFQpe3YhPW51bGwmJnR5cGVvZiB2LnRvU3RyaW5nIT0iZnVuY3Rpb24iJiYodj1qNi5jYWxsKHYpKSxtW3ZdPVR9LG9HKGdzKSkscV9lPWZwdChmdW5jdGlvbihtLHYsVCl7diE9bnVsbCYmdHlwZW9mIHYudG9TdHJpbmchPSJmdW5jdGlvbiImJih2PWo2LmNhbGwodikpLHVuLmNhbGwobSx2KT9tW3ZdLnB1c2goVCk6bVt2XT1bVF19LGtlKSxHX2U9bnIoa00pO2Z1bmN0aW9uIHBvKG0pe3JldHVybiBkcyhtKT9JZnQobSk6QXEobSl9ZnVuY3Rpb24gbXMobSl7cmV0dXJuIGRzKG0pP0lmdChtLCEwKTpibWUobSl9ZnVuY3Rpb24gV19lKG0sdil7dmFyIFQ9e307cmV0dXJuIHY9a2UodiwzKSxtaChtLGZ1bmN0aW9uKE4sVixZKXthcChULHYoTixWLFkpLE4pfSksVH1mdW5jdGlvbiBZX2UobSx2KXt2YXIgVD17fTtyZXR1cm4gdj1rZSh2LDMpLG1oKG0sZnVuY3Rpb24oTixWLFkpe2FwKFQsVix2KE4sVixZKSl9KSxUfXZhciBqX2U9dngoZnVuY3Rpb24obSx2LFQpe3NJKG0sdixUKX0pLGVkdD12eChmdW5jdGlvbihtLHYsVCxOKXtzSShtLHYsVCxOKX0pLFhfZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPXt9O2lmKG09PW51bGwpcmV0dXJuIFQ7dmFyIE49ITE7dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiBZPXZtKFksbSksTnx8KE49WS5sZW5ndGg+MSksWX0pLGdoKG0sVXEobSksVCksTiYmKFQ9WWwoVCxjfHV8aCxVbWUpKTtmb3IodmFyIFY9di5sZW5ndGg7Vi0tOylOcShULHZbVl0pO3JldHVybiBUfSk7ZnVuY3Rpb24gJF9lKG0sdil7cmV0dXJuIHJkdChtLHdJKGtlKHYpKSl9dmFyIEtfZT1scChmdW5jdGlvbihtLHYpe3JldHVybiBtPT1udWxsP3t9OlNtZShtLHYpfSk7ZnVuY3Rpb24gcmR0KG0sdil7aWYobT09bnVsbClyZXR1cm57fTt2YXIgVD0kbihVcShtKSxmdW5jdGlvbihOKXtyZXR1cm5bTl19KTtyZXR1cm4gdj1rZSh2KSxqZnQobSxULGZ1bmN0aW9uKE4sVil7cmV0dXJuIHYoTixWWzBdKX0pfWZ1bmN0aW9uIFpfZShtLHYsVCl7dj12bSh2LG0pO3ZhciBOPS0xLFY9di5sZW5ndGg7Zm9yKFZ8fChWPTEsbT1lKTsrK048Vjspe3ZhciBZPW09PW51bGw/ZTptW19oKHZbTl0pXTtZPT09ZSYmKE49VixZPVQpLG09dXAoWSk/WS5jYWxsKG0pOll9cmV0dXJuIG19ZnVuY3Rpb24gSl9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOk5NKG0sdixUKX1mdW5jdGlvbiBRX2UobSx2LFQsTil7cmV0dXJuIE49dHlwZW9mIE49PSJmdW5jdGlvbiI/TjplLG09PW51bGw/bTpOTShtLHYsVCxOKX12YXIgbmR0PW1wdChwbyksaWR0PW1wdChtcyk7ZnVuY3Rpb24gdHllKG0sdixUKXt2YXIgTj0kZShtKSxWPU58fGJtKG0pfHx3eChtKTtpZih2PWtlKHYsNCksVD09bnVsbCl7dmFyIFk9bSYmbS5jb25zdHJ1Y3RvcjtWP1Q9Tj9uZXcgWTpbXTplaShtKT9UPXVwKFkpP3l4KEs2KG0pKTp7fTpUPXt9fXJldHVybihWP3FsOm1oKShtLGZ1bmN0aW9uKEosaXQsZnQpe3JldHVybiB2KFQsSixpdCxmdCl9KSxUfWZ1bmN0aW9uIGV5ZShtLHYpe3JldHVybiBtPT1udWxsPyEwOk5xKG0sdil9ZnVuY3Rpb24gcnllKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOkpmdChtLHYsenEoVCkpfWZ1bmN0aW9uIG55ZShtLHYsVCxOKXtyZXR1cm4gTj10eXBlb2YgTj09ImZ1bmN0aW9uIj9OOmUsbT09bnVsbD9tOkpmdChtLHYsenEoVCksTil9ZnVuY3Rpb24gU3gobSl7cmV0dXJuIG09PW51bGw/W106bXEobSxwbyhtKSl9ZnVuY3Rpb24gaXllKG0pe3JldHVybiBtPT1udWxsP1tdOm1xKG0sbXMobSkpfWZ1bmN0aW9uIG95ZShtLHYsVCl7cmV0dXJuIFQ9PT1lJiYoVD12LHY9ZSksVCE9PWUmJihUPSRsKFQpLFQ9VD09PVQ/VDowKSx2IT09ZSYmKHY9JGwodiksdj12PT09dj92OjApLG5fKCRsKG0pLHYsVCl9ZnVuY3Rpb24gYXllKG0sdixUKXtyZXR1cm4gdj1ocCh2KSxUPT09ZT8oVD12LHY9MCk6VD1ocChUKSxtPSRsKG0pLGZtZShtLHYsVCl9ZnVuY3Rpb24gc3llKG0sdixUKXtpZihUJiZ0eXBlb2YgVCE9ImJvb2xlYW4iJiZrYShtLHYsVCkmJih2PVQ9ZSksVD09PWUmJih0eXBlb2Ygdj09ImJvb2xlYW4iPyhUPXYsdj1lKTp0eXBlb2YgbT09ImJvb2xlYW4iJiYoVD1tLG09ZSkpLG09PT1lJiZ2PT09ZT8obT0wLHY9MSk6KG09aHAobSksdj09PWU/KHY9bSxtPTApOnY9aHAodikpLG0+dil7dmFyIE49bTttPXYsdj1OfWlmKFR8fG0lMXx8diUxKXt2YXIgVj1BZnQoKTtyZXR1cm4gcmEobStWKih2LW0rQnBlKCIxZS0iKygoVisiIikubGVuZ3RoLTEpKSksdil9cmV0dXJuIExxKG0sdil9dmFyIGx5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIHY9di50b0xvd2VyQ2FzZSgpLG0rKFQ/b2R0KHYpOnYpfSk7ZnVuY3Rpb24gb2R0KG0pe3JldHVybiBpRyhvbihtKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhZHQobSl7cmV0dXJuIG09b24obSksbSYmbS5yZXBsYWNlKHVtLEpwZSkucmVwbGFjZShQcGUsIiIpfWZ1bmN0aW9uIGN5ZShtLHYsVCl7bT1vbihtKSx2PVlzKHYpO3ZhciBOPW0ubGVuZ3RoO1Q9VD09PWU/TjpuXyhRZShUKSwwLE4pO3ZhciBWPVQ7cmV0dXJuIFQtPXYubGVuZ3RoLFQ+PTAmJm0uc2xpY2UoVCxWKT09dn1mdW5jdGlvbiB1eWUobSl7cmV0dXJuIG09b24obSksbSYmQXIudGVzdChtKT9tLnJlcGxhY2UoeW4sUXBlKTptfWZ1bmN0aW9uIGh5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZjeC50ZXN0KG0pP20ucmVwbGFjZShjbiwiXFwkJiIpOm19dmFyIGZ5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/Ii0iOiIiKSt2LnRvTG93ZXJDYXNlKCl9KSxweWU9eHgoZnVuY3Rpb24obSx2LFQpe3JldHVybiBtKyhUPyIgIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksZHllPWNwdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiBteWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7aWYoIXZ8fE4+PXYpcmV0dXJuIG07dmFyIFY9KHYtTikvMjtyZXR1cm4gcEkodEkoViksVCkrbStwSShRNihWKSxUKX1mdW5jdGlvbiBneWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7cmV0dXJuIHYmJk48dj9tK3BJKHYtTixUKTptfWZ1bmN0aW9uIF95ZShtLHYsVCl7bT1vbihtKSx2PVFlKHYpO3ZhciBOPXY/ZHgobSk6MDtyZXR1cm4gdiYmTjx2P3BJKHYtTixUKSttOm19ZnVuY3Rpb24geXllKG0sdixUKXtyZXR1cm4gVHx8dj09bnVsbD92PTA6diYmKHY9K3YpLEVkZShvbihtKS5yZXBsYWNlKHJwLCIiKSx2fHwwKX1mdW5jdGlvbiB2eWUobSx2LFQpe3JldHVybihUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodiksa3Eob24obSksdil9ZnVuY3Rpb24geHllKCl7dmFyIG09YXJndW1lbnRzLHY9b24obVswXSk7cmV0dXJuIG0ubGVuZ3RoPDM/djp2LnJlcGxhY2UobVsxXSxtWzJdKX12YXIgYnllPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHd5ZShtLHYsVCl7cmV0dXJuIFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpJiYodj1UPWUpLFQ9VD09PWU/cnQ6VD4+PjAsVD8obT1vbihtKSxtJiYodHlwZW9mIHY9PSJzdHJpbmcifHx2IT1udWxsJiYhZUcodikpJiYodj1Zcyh2KSwhdiYmcHgobSkpP3htKHR1KG0pLDAsVCk6bS5zcGxpdCh2LFQpKTpbXX12YXIgU3llPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iICI6IiIpK2lHKHYpfSk7ZnVuY3Rpb24gTXllKG0sdixUKXtyZXR1cm4gbT1vbihtKSxUPVQ9PW51bGw/MDpuXyhRZShUKSwwLG0ubGVuZ3RoKSx2PVlzKHYpLG0uc2xpY2UoVCxUK3YubGVuZ3RoKT09dn1mdW5jdGlvbiBFeWUobSx2LFQpe3ZhciBOPUcudGVtcGxhdGVTZXR0aW5ncztUJiZrYShtLHYsVCkmJih2PWUpLG09b24obSksdj1FSSh7fSx2LE4sZ3B0KTt2YXIgVj1FSSh7fSx2LmltcG9ydHMsTi5pbXBvcnRzLGdwdCksWT1wbyhWKSxKPW1xKFYsWSksaXQsZnQsRHQ9MCxPdD12LmludGVycG9sYXRlfHxtcixWdD0iX19wICs9ICciLG9lPV9xKCh2LmVzY2FwZXx8bXIpLnNvdXJjZSsifCIrT3Quc291cmNlKyJ8IisoT3Q9PT1JYT90cjptcikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8bXIpLnNvdXJjZSsifCQiLCJnIiksVGU9Ii8vIyBzb3VyY2VVUkw9IisodW4uY2FsbCh2LCJzb3VyY2VVUkwiKT8odi5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK05wZSsiXSIpK2AKYDttLnJlcGxhY2Uob2UsZnVuY3Rpb24oRGUscHIseXIsWHMsUmEsJHMpe3JldHVybiB5cnx8KHlyPVhzKSxWdCs9bS5zbGljZShEdCwkcykucmVwbGFjZShGbCx0ZGUpLHByJiYoaXQ9ITAsVnQrPWAnICsKX19lKGArcHIrYCkgKwonYCksUmEmJihmdD0hMCxWdCs9YCc7CmArUmErYDsKX19wICs9ICdgKSx5ciYmKFZ0Kz1gJyArCigoX190ID0gKGAreXIrYCkpID09IG51bGwgPyAnJyA6IF9fdCkgKwonYCksRHQ9JHMrRGUubGVuZ3RoLERlfSksVnQrPWAnOwpgO3ZhciBOZT11bi5jYWxsKHYsInZhcmlhYmxlIikmJnYudmFyaWFibGU7aWYoIU5lKVZ0PWB3aXRoIChvYmopIHsKYCtWdCtgCn0KYDtlbHNlIGlmKFZlLnRlc3QoTmUpKXRocm93IG5ldyBXZShvKTtWdD0oZnQ/VnQucmVwbGFjZShDZSwiIik6VnQpLnJlcGxhY2UoUHQsIiQxIikucmVwbGFjZShOdCwiJDE7IiksVnQ9ImZ1bmN0aW9uKCIrKE5lfHwib2JqIikrYCkgewpgKyhOZT8iIjpgb2JqIHx8IChvYmogPSB7fSk7CmApKyJ2YXIgX190LCBfX3AgPSAnJyIrKGl0PyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGZ0P2AsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luOwpmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH0KYDpgOwpgKStWdCtgcmV0dXJuIF9fcAp9YDt2YXIgZXI9bGR0KGZ1bmN0aW9uKCl7cmV0dXJuICRyKFksVGUrInJldHVybiAiK1Z0KS5hcHBseShlLEopfSk7aWYoZXIuc291cmNlPVZ0LHRHKGVyKSl0aHJvdyBlcjtyZXR1cm4gZXJ9ZnVuY3Rpb24gVHllKG0pe3JldHVybiBvbihtKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEN5ZShtKXtyZXR1cm4gb24obSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBBeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gX2Z0KG0pO2lmKCFtfHwhKHY9WXModikpKXJldHVybiBtO3ZhciBOPXR1KG0pLFY9dHUodiksWT15ZnQoTixWKSxKPXZmdChOLFYpKzE7cmV0dXJuIHhtKE4sWSxKKS5qb2luKCIiKX1mdW5jdGlvbiBQeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gbS5zbGljZSgwLGJmdChtKSsxKTtpZighbXx8ISh2PVlzKHYpKSlyZXR1cm4gbTt2YXIgTj10dShtKSxWPXZmdChOLHR1KHYpKSsxO3JldHVybiB4bShOLDAsVikuam9pbigiIil9ZnVuY3Rpb24gSXllKG0sdixUKXtpZihtPW9uKG0pLG0mJihUfHx2PT09ZSkpcmV0dXJuIG0ucmVwbGFjZShycCwiIik7aWYoIW18fCEodj1Zcyh2KSkpcmV0dXJuIG07dmFyIE49dHUobSksVj15ZnQoTix0dSh2KSk7cmV0dXJuIHhtKE4sVikuam9pbigiIil9ZnVuY3Rpb24gTHllKG0sdil7dmFyIFQ9TyxOPUQ7aWYoZWkodikpe3ZhciBWPSJzZXBhcmF0b3IiaW4gdj92LnNlcGFyYXRvcjpWO1Q9Imxlbmd0aCJpbiB2P1FlKHYubGVuZ3RoKTpULE49Im9taXNzaW9uImluIHY/WXModi5vbWlzc2lvbik6Tn1tPW9uKG0pO3ZhciBZPW0ubGVuZ3RoO2lmKHB4KG0pKXt2YXIgSj10dShtKTtZPUoubGVuZ3RofWlmKFQ+PVkpcmV0dXJuIG07dmFyIGl0PVQtZHgoTik7aWYoaXQ8MSlyZXR1cm4gTjt2YXIgZnQ9Sj94bShKLDAsaXQpLmpvaW4oIiIpOm0uc2xpY2UoMCxpdCk7aWYoVj09PWUpcmV0dXJuIGZ0K047aWYoSiYmKGl0Kz1mdC5sZW5ndGgtaXQpLGVHKFYpKXtpZihtLnNsaWNlKGl0KS5zZWFyY2goVikpe3ZhciBEdCxPdD1mdDtmb3IoVi5nbG9iYWx8fChWPV9xKFYuc291cmNlLG9uKEtlLmV4ZWMoVikpKyJnIikpLFYubGFzdEluZGV4PTA7RHQ9Vi5leGVjKE90KTspdmFyIFZ0PUR0LmluZGV4O2Z0PWZ0LnNsaWNlKDAsVnQ9PT1lP2l0OlZ0KX19ZWxzZSBpZihtLmluZGV4T2YoWXMoViksaXQpIT1pdCl7dmFyIG9lPWZ0Lmxhc3RJbmRleE9mKFYpO29lPi0xJiYoZnQ9ZnQuc2xpY2UoMCxvZSkpfXJldHVybiBmdCtOfWZ1bmN0aW9uIGt5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZXaS50ZXN0KG0pP20ucmVwbGFjZSh6ZSxzZGUpOm19dmFyIFJ5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/IiAiOiIiKSt2LnRvVXBwZXJDYXNlKCl9KSxpRz1jcHQoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gc2R0KG0sdixUKXtyZXR1cm4gbT1vbihtKSx2PVQ/ZTp2LHY9PT1lP3JkZShtKT91ZGUobSk6anBlKG0pOm0ubWF0Y2godil8fFtdfXZhciBsZHQ9bnIoZnVuY3Rpb24obSx2KXt0cnl7cmV0dXJuIEdzKG0sZSx2KX1jYXRjaChUKXtyZXR1cm4gdEcoVCk/VDpuZXcgV2UoVCl9fSksTnllPWxwKGZ1bmN0aW9uKG0sdil7cmV0dXJuIHFsKHYsZnVuY3Rpb24oVCl7VD1faChUKSxhcChtLFQsSnEobVtUXSxtKSl9KSxtfSk7ZnVuY3Rpb24gRHllKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aCxUPWtlKCk7cmV0dXJuIG09dj8kbihtLGZ1bmN0aW9uKE4pe2lmKHR5cGVvZiBOWzFdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm5bVChOWzBdKSxOWzFdXX0pOltdLG5yKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0tMTsrK1Y8djspe3ZhciBZPW1bVl07aWYoR3MoWVswXSx0aGlzLE4pKXJldHVybiBHcyhZWzFdLHRoaXMsTil9fSl9ZnVuY3Rpb24gT3llKG0pe3JldHVybiBzbWUoWWwobSxjKSl9ZnVuY3Rpb24gb0cobSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG19fWZ1bmN0aW9uIHp5ZShtLHYpe3JldHVybiBtPT1udWxsfHxtIT09bT92Om19dmFyIEZ5ZT1ocHQoKSxCeWU9aHB0KCEwKTtmdW5jdGlvbiBncyhtKXtyZXR1cm4gbX1mdW5jdGlvbiBhRyhtKXtyZXR1cm4gVmZ0KHR5cGVvZiBtPT0iZnVuY3Rpb24iP206WWwobSxjKSl9ZnVuY3Rpb24gSHllKG0pe3JldHVybiBxZnQoWWwobSxjKSl9ZnVuY3Rpb24gVnllKG0sdil7cmV0dXJuIEdmdChtLFlsKHYsYykpfXZhciBVeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKFQsbSx2KX19KSxxeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKG0sVCx2KX19KTtmdW5jdGlvbiBzRyhtLHYsVCl7dmFyIE49cG8odiksVj1hSSh2LE4pO1Q9PW51bGwmJiEoZWkodikmJihWLmxlbmd0aHx8IU4ubGVuZ3RoKSkmJihUPXYsdj1tLG09dGhpcyxWPWFJKHYscG8odikpKTt2YXIgWT0hKGVpKFQpJiYiY2hhaW4iaW4gVCl8fCEhVC5jaGFpbixKPXVwKG0pO3JldHVybiBxbChWLGZ1bmN0aW9uKGl0KXt2YXIgZnQ9dltpdF07bVtpdF09ZnQsSiYmKG0ucHJvdG90eXBlW2l0XT1mdW5jdGlvbigpe3ZhciBEdD10aGlzLl9fY2hhaW5fXztpZihZfHxEdCl7dmFyIE90PW0odGhpcy5fX3dyYXBwZWRfXyksVnQ9T3QuX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIFZ0LnB1c2goe2Z1bmM6ZnQsYXJnczphcmd1bWVudHMsdGhpc0FyZzptfSksT3QuX19jaGFpbl9fPUR0LE90fXJldHVybiBmdC5hcHBseShtLHBtKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxtfWZ1bmN0aW9uIEd5ZSgpe3JldHVybiBmby5fPT09dGhpcyYmKGZvLl89Z2RlKSx0aGlzfWZ1bmN0aW9uIGxHKCl7fWZ1bmN0aW9uIFd5ZShtKXtyZXR1cm4gbT1RZShtKSxucihmdW5jdGlvbih2KXtyZXR1cm4gV2Z0KHYsbSl9KX12YXIgWXllPUJxKCRuKSxqeWU9QnEoZmZ0KSxYeWU9QnEodXEpO2Z1bmN0aW9uIGNkdChtKXtyZXR1cm4gWXEobSk/aHEoX2gobSkpOk1tZShtKX1mdW5jdGlvbiAkeWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBtPT1udWxsP2U6aV8obSx2KX19dmFyIEt5ZT1wcHQoKSxaeWU9cHB0KCEwKTtmdW5jdGlvbiBjRygpe3JldHVybltdfWZ1bmN0aW9uIHVHKCl7cmV0dXJuITF9ZnVuY3Rpb24gSnllKCl7cmV0dXJue319ZnVuY3Rpb24gUXllKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gdHZlKCl7cmV0dXJuITB9ZnVuY3Rpb24gZXZlKG0sdil7aWYobT1RZShtKSxtPDF8fG0+VSlyZXR1cm5bXTt2YXIgVD1ydCxOPXJhKG0scnQpO3Y9a2UodiksbS09cnQ7Zm9yKHZhciBWPWRxKE4sdik7KytUPG07KXYoVCk7cmV0dXJuIFZ9ZnVuY3Rpb24gcnZlKG0pe3JldHVybiAkZShtKT8kbihtLF9oKTpqcyhtKT9bbV06cHMoUHB0KG9uKG0pKSl9ZnVuY3Rpb24gbnZlKG0pe3ZhciB2PSsrZGRlO3JldHVybiBvbihtKSt2fXZhciBpdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSt2fSwwKSxvdmU9SHEoImNlaWwiKSxhdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbS92fSwxKSxzdmU9SHEoImZsb29yIik7ZnVuY3Rpb24gbHZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGdzLEVxKTplfWZ1bmN0aW9uIGN2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGtlKHYsMiksRXEpOmV9ZnVuY3Rpb24gdXZlKG0pe3JldHVybiBtZnQobSxncyl9ZnVuY3Rpb24gaHZlKG0sdil7cmV0dXJuIG1mdChtLGtlKHYsMikpfWZ1bmN0aW9uIGZ2ZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxncyxQcSk6ZX1mdW5jdGlvbiBwdmUobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxrZSh2LDIpLFBxKTplfXZhciBkdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSp2fSwxKSxtdmU9SHEoInJvdW5kIiksZ3ZlPWZJKGZ1bmN0aW9uKG0sdil7cmV0dXJuIG0tdn0sMCk7ZnVuY3Rpb24gX3ZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGdzKTowfWZ1bmN0aW9uIHl2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGtlKHYsMikpOjB9cmV0dXJuIEcuYWZ0ZXI9SDBlLEcuYXJ5PUhwdCxHLmFzc2lnbj1DX2UsRy5hc3NpZ25Jbj10ZHQsRy5hc3NpZ25JbldpdGg9RUksRy5hc3NpZ25XaXRoPUFfZSxHLmF0PVBfZSxHLmJlZm9yZT1WcHQsRy5iaW5kPUpxLEcuYmluZEFsbD1OeWUsRy5iaW5kS2V5PVVwdCxHLmNhc3RBcnJheT1KMGUsRy5jaGFpbj16cHQsRy5jaHVuaz1zZ2UsRy5jb21wYWN0PWxnZSxHLmNvbmNhdD1jZ2UsRy5jb25kPUR5ZSxHLmNvbmZvcm1zPU95ZSxHLmNvbnN0YW50PW9HLEcuY291bnRCeT1fMGUsRy5jcmVhdGU9SV9lLEcuY3Vycnk9cXB0LEcuY3VycnlSaWdodD1HcHQsRy5kZWJvdW5jZT1XcHQsRy5kZWZhdWx0cz1MX2UsRy5kZWZhdWx0c0RlZXA9a19lLEcuZGVmZXI9VjBlLEcuZGVsYXk9VTBlLEcuZGlmZmVyZW5jZT11Z2UsRy5kaWZmZXJlbmNlQnk9aGdlLEcuZGlmZmVyZW5jZVdpdGg9ZmdlLEcuZHJvcD1wZ2UsRy5kcm9wUmlnaHQ9ZGdlLEcuZHJvcFJpZ2h0V2hpbGU9bWdlLEcuZHJvcFdoaWxlPWdnZSxHLmZpbGw9X2dlLEcuZmlsdGVyPXYwZSxHLmZsYXRNYXA9dzBlLEcuZmxhdE1hcERlZXA9UzBlLEcuZmxhdE1hcERlcHRoPU0wZSxHLmZsYXR0ZW49UnB0LEcuZmxhdHRlbkRlZXA9eWdlLEcuZmxhdHRlbkRlcHRoPXZnZSxHLmZsaXA9cTBlLEcuZmxvdz1GeWUsRy5mbG93UmlnaHQ9QnllLEcuZnJvbVBhaXJzPXhnZSxHLmZ1bmN0aW9ucz1CX2UsRy5mdW5jdGlvbnNJbj1IX2UsRy5ncm91cEJ5PUUwZSxHLmluaXRpYWw9d2dlLEcuaW50ZXJzZWN0aW9uPVNnZSxHLmludGVyc2VjdGlvbkJ5PU1nZSxHLmludGVyc2VjdGlvbldpdGg9RWdlLEcuaW52ZXJ0PVVfZSxHLmludmVydEJ5PXFfZSxHLmludm9rZU1hcD1DMGUsRy5pdGVyYXRlZT1hRyxHLmtleUJ5PUEwZSxHLmtleXM9cG8sRy5rZXlzSW49bXMsRy5tYXA9dkksRy5tYXBLZXlzPVdfZSxHLm1hcFZhbHVlcz1ZX2UsRy5tYXRjaGVzPUh5ZSxHLm1hdGNoZXNQcm9wZXJ0eT1WeWUsRy5tZW1vaXplPWJJLEcubWVyZ2U9al9lLEcubWVyZ2VXaXRoPWVkdCxHLm1ldGhvZD1VeWUsRy5tZXRob2RPZj1xeWUsRy5taXhpbj1zRyxHLm5lZ2F0ZT13SSxHLm50aEFyZz1XeWUsRy5vbWl0PVhfZSxHLm9taXRCeT0kX2UsRy5vbmNlPUcwZSxHLm9yZGVyQnk9UDBlLEcub3Zlcj1ZeWUsRy5vdmVyQXJncz1XMGUsRy5vdmVyRXZlcnk9anllLEcub3ZlclNvbWU9WHllLEcucGFydGlhbD1RcSxHLnBhcnRpYWxSaWdodD1ZcHQsRy5wYXJ0aXRpb249STBlLEcucGljaz1LX2UsRy5waWNrQnk9cmR0LEcucHJvcGVydHk9Y2R0LEcucHJvcGVydHlPZj0keWUsRy5wdWxsPVBnZSxHLnB1bGxBbGw9RHB0LEcucHVsbEFsbEJ5PUlnZSxHLnB1bGxBbGxXaXRoPUxnZSxHLnB1bGxBdD1rZ2UsRy5yYW5nZT1LeWUsRy5yYW5nZVJpZ2h0PVp5ZSxHLnJlYXJnPVkwZSxHLnJlamVjdD1SMGUsRy5yZW1vdmU9UmdlLEcucmVzdD1qMGUsRy5yZXZlcnNlPUtxLEcuc2FtcGxlU2l6ZT1EMGUsRy5zZXQ9Sl9lLEcuc2V0V2l0aD1RX2UsRy5zaHVmZmxlPU8wZSxHLnNsaWNlPU5nZSxHLnNvcnRCeT1CMGUsRy5zb3J0ZWRVbmlxPVZnZSxHLnNvcnRlZFVuaXFCeT1VZ2UsRy5zcGxpdD13eWUsRy5zcHJlYWQ9WDBlLEcudGFpbD1xZ2UsRy50YWtlPUdnZSxHLnRha2VSaWdodD1XZ2UsRy50YWtlUmlnaHRXaGlsZT1ZZ2UsRy50YWtlV2hpbGU9amdlLEcudGFwPWwwZSxHLnRocm90dGxlPSQwZSxHLnRocnU9eUksRy50b0FycmF5PVpwdCxHLnRvUGFpcnM9bmR0LEcudG9QYWlyc0luPWlkdCxHLnRvUGF0aD1ydmUsRy50b1BsYWluT2JqZWN0PVFwdCxHLnRyYW5zZm9ybT10eWUsRy51bmFyeT1LMGUsRy51bmlvbj1YZ2UsRy51bmlvbkJ5PSRnZSxHLnVuaW9uV2l0aD1LZ2UsRy51bmlxPVpnZSxHLnVuaXFCeT1KZ2UsRy51bmlxV2l0aD1RZ2UsRy51bnNldD1leWUsRy51bnppcD1acSxHLnVuemlwV2l0aD1PcHQsRy51cGRhdGU9cnllLEcudXBkYXRlV2l0aD1ueWUsRy52YWx1ZXM9U3gsRy52YWx1ZXNJbj1peWUsRy53aXRob3V0PXQwZSxHLndvcmRzPXNkdCxHLndyYXA9WjBlLEcueG9yPWUwZSxHLnhvckJ5PXIwZSxHLnhvcldpdGg9bjBlLEcuemlwPWkwZSxHLnppcE9iamVjdD1vMGUsRy56aXBPYmplY3REZWVwPWEwZSxHLnppcFdpdGg9czBlLEcuZW50cmllcz1uZHQsRy5lbnRyaWVzSW49aWR0LEcuZXh0ZW5kPXRkdCxHLmV4dGVuZFdpdGg9RUksc0coRyxHKSxHLmFkZD1pdmUsRy5hdHRlbXB0PWxkdCxHLmNhbWVsQ2FzZT1seWUsRy5jYXBpdGFsaXplPW9kdCxHLmNlaWw9b3ZlLEcuY2xhbXA9b3llLEcuY2xvbmU9UTBlLEcuY2xvbmVEZWVwPWVfZSxHLmNsb25lRGVlcFdpdGg9cl9lLEcuY2xvbmVXaXRoPXRfZSxHLmNvbmZvcm1zVG89bl9lLEcuZGVidXJyPWFkdCxHLmRlZmF1bHRUbz16eWUsRy5kaXZpZGU9YXZlLEcuZW5kc1dpdGg9Y3llLEcuZXE9cnUsRy5lc2NhcGU9dXllLEcuZXNjYXBlUmVnRXhwPWh5ZSxHLmV2ZXJ5PXkwZSxHLmZpbmQ9eDBlLEcuZmluZEluZGV4PUxwdCxHLmZpbmRLZXk9Ul9lLEcuZmluZExhc3Q9YjBlLEcuZmluZExhc3RJbmRleD1rcHQsRy5maW5kTGFzdEtleT1OX2UsRy5mbG9vcj1zdmUsRy5mb3JFYWNoPUZwdCxHLmZvckVhY2hSaWdodD1CcHQsRy5mb3JJbj1EX2UsRy5mb3JJblJpZ2h0PU9fZSxHLmZvck93bj16X2UsRy5mb3JPd25SaWdodD1GX2UsRy5nZXQ9ckcsRy5ndD1pX2UsRy5ndGU9b19lLEcuaGFzPVZfZSxHLmhhc0luPW5HLEcuaGVhZD1OcHQsRy5pZGVudGl0eT1ncyxHLmluY2x1ZGVzPVQwZSxHLmluZGV4T2Y9YmdlLEcuaW5SYW5nZT1heWUsRy5pbnZva2U9R19lLEcuaXNBcmd1bWVudHM9c18sRy5pc0FycmF5PSRlLEcuaXNBcnJheUJ1ZmZlcj1hX2UsRy5pc0FycmF5TGlrZT1kcyxHLmlzQXJyYXlMaWtlT2JqZWN0PXhpLEcuaXNCb29sZWFuPXNfZSxHLmlzQnVmZmVyPWJtLEcuaXNEYXRlPWxfZSxHLmlzRWxlbWVudD1jX2UsRy5pc0VtcHR5PXVfZSxHLmlzRXF1YWw9aF9lLEcuaXNFcXVhbFdpdGg9Zl9lLEcuaXNFcnJvcj10RyxHLmlzRmluaXRlPXBfZSxHLmlzRnVuY3Rpb249dXAsRy5pc0ludGVnZXI9anB0LEcuaXNMZW5ndGg9U0ksRy5pc01hcD1YcHQsRy5pc01hdGNoPWRfZSxHLmlzTWF0Y2hXaXRoPW1fZSxHLmlzTmFOPWdfZSxHLmlzTmF0aXZlPV9fZSxHLmlzTmlsPXZfZSxHLmlzTnVsbD15X2UsRy5pc051bWJlcj0kcHQsRy5pc09iamVjdD1laSxHLmlzT2JqZWN0TGlrZT1zaSxHLmlzUGxhaW5PYmplY3Q9Rk0sRy5pc1JlZ0V4cD1lRyxHLmlzU2FmZUludGVnZXI9eF9lLEcuaXNTZXQ9S3B0LEcuaXNTdHJpbmc9TUksRy5pc1N5bWJvbD1qcyxHLmlzVHlwZWRBcnJheT13eCxHLmlzVW5kZWZpbmVkPWJfZSxHLmlzV2Vha01hcD13X2UsRy5pc1dlYWtTZXQ9U19lLEcuam9pbj1UZ2UsRy5rZWJhYkNhc2U9ZnllLEcubGFzdD1YbCxHLmxhc3RJbmRleE9mPUNnZSxHLmxvd2VyQ2FzZT1weWUsRy5sb3dlckZpcnN0PWR5ZSxHLmx0PU1fZSxHLmx0ZT1FX2UsRy5tYXg9bHZlLEcubWF4Qnk9Y3ZlLEcubWVhbj11dmUsRy5tZWFuQnk9aHZlLEcubWluPWZ2ZSxHLm1pbkJ5PXB2ZSxHLnN0dWJBcnJheT1jRyxHLnN0dWJGYWxzZT11RyxHLnN0dWJPYmplY3Q9SnllLEcuc3R1YlN0cmluZz1ReWUsRy5zdHViVHJ1ZT10dmUsRy5tdWx0aXBseT1kdmUsRy5udGg9QWdlLEcubm9Db25mbGljdD1HeWUsRy5ub29wPWxHLEcubm93PXhJLEcucGFkPW15ZSxHLnBhZEVuZD1neWUsRy5wYWRTdGFydD1feWUsRy5wYXJzZUludD15eWUsRy5yYW5kb209c3llLEcucmVkdWNlPUwwZSxHLnJlZHVjZVJpZ2h0PWswZSxHLnJlcGVhdD12eWUsRy5yZXBsYWNlPXh5ZSxHLnJlc3VsdD1aX2UsRy5yb3VuZD1tdmUsRy5ydW5JbkNvbnRleHQ9dXQsRy5zYW1wbGU9TjBlLEcuc2l6ZT16MGUsRy5zbmFrZUNhc2U9YnllLEcuc29tZT1GMGUsRy5zb3J0ZWRJbmRleD1EZ2UsRy5zb3J0ZWRJbmRleEJ5PU9nZSxHLnNvcnRlZEluZGV4T2Y9emdlLEcuc29ydGVkTGFzdEluZGV4PUZnZSxHLnNvcnRlZExhc3RJbmRleEJ5PUJnZSxHLnNvcnRlZExhc3RJbmRleE9mPUhnZSxHLnN0YXJ0Q2FzZT1TeWUsRy5zdGFydHNXaXRoPU15ZSxHLnN1YnRyYWN0PWd2ZSxHLnN1bT1fdmUsRy5zdW1CeT15dmUsRy50ZW1wbGF0ZT1FeWUsRy50aW1lcz1ldmUsRy50b0Zpbml0ZT1ocCxHLnRvSW50ZWdlcj1RZSxHLnRvTGVuZ3RoPUpwdCxHLnRvTG93ZXI9VHllLEcudG9OdW1iZXI9JGwsRy50b1NhZmVJbnRlZ2VyPVRfZSxHLnRvU3RyaW5nPW9uLEcudG9VcHBlcj1DeWUsRy50cmltPUF5ZSxHLnRyaW1FbmQ9UHllLEcudHJpbVN0YXJ0PUl5ZSxHLnRydW5jYXRlPUx5ZSxHLnVuZXNjYXBlPWt5ZSxHLnVuaXF1ZUlkPW52ZSxHLnVwcGVyQ2FzZT1SeWUsRy51cHBlckZpcnN0PWlHLEcuZWFjaD1GcHQsRy5lYWNoUmlnaHQ9QnB0LEcuZmlyc3Q9TnB0LHNHKEcsZnVuY3Rpb24oKXt2YXIgbT17fTtyZXR1cm4gbWgoRyxmdW5jdGlvbih2LFQpe3VuLmNhbGwoRy5wcm90b3R5cGUsVCl8fChtW1RdPXYpfSksbX0oKSx7Y2hhaW46ITF9KSxHLlZFUlNJT049dCxxbChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG0pe0dbbV0ucGxhY2Vob2xkZXI9R30pLHFsKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihtLHYpe2dyLnByb3RvdHlwZVttXT1mdW5jdGlvbihUKXtUPVQ9PT1lPzE6WGkoUWUoVCksMCk7dmFyIE49dGhpcy5fX2ZpbHRlcmVkX18mJiF2P25ldyBncih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIE4uX19maWx0ZXJlZF9fP04uX190YWtlQ291bnRfXz1yYShULE4uX190YWtlQ291bnRfXyk6Ti5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpyYShULHJ0KSx0eXBlOm0rKE4uX19kaXJfXzwwPyJSaWdodCI6IiIpfSksTn0sZ3IucHJvdG90eXBlW20rIlJpZ2h0Il09ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21dKFQpLnJldmVyc2UoKX19KSxxbChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG0sdil7dmFyIFQ9disxLE49VD09THx8VD09Rjtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oVil7dmFyIFk9dGhpcy5jbG9uZSgpO3JldHVybiBZLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6a2UoViwzKSx0eXBlOlR9KSxZLl9fZmlsdGVyZWRfXz1ZLl9fZmlsdGVyZWRfX3x8TixZfX0pLHFsKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJ0YWtlIisodj8iUmlnaHQiOiIiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tUXSgxKS52YWx1ZSgpWzBdfX0pLHFsKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJkcm9wIisodj8iIjoiUmlnaHQiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IGdyKHRoaXMpOnRoaXNbVF0oMSl9fSksZ3IucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoZ3MpfSxnci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIobSkuaGVhZCgpfSxnci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQobSl9LGdyLnByb3RvdHlwZS5pbnZva2VNYXA9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bmV3IGdyKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBrTShULG0sdil9KX0pLGdyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZmlsdGVyKHdJKGtlKG0pKSl9LGdyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihtLHYpe209UWUobSk7dmFyIFQ9dGhpcztyZXR1cm4gVC5fX2ZpbHRlcmVkX18mJihtPjB8fHY8MCk/bmV3IGdyKFQpOihtPDA/VD1ULnRha2VSaWdodCgtbSk6bSYmKFQ9VC5kcm9wKG0pKSx2IT09ZSYmKHY9UWUodiksVD12PDA/VC5kcm9wUmlnaHQoLXYpOlQudGFrZSh2LW0pKSxUKX0sZ3IucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobSkucmV2ZXJzZSgpfSxnci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocnQpfSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh2KSxOPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodiksVj1HW04/InRha2UiKyh2PT0ibGFzdCI/IlJpZ2h0IjoiIik6dl0sWT1OfHwvXmZpbmQvLnRlc3Qodik7IVZ8fChHLnByb3RvdHlwZVt2XT1mdW5jdGlvbigpe3ZhciBKPXRoaXMuX193cmFwcGVkX18saXQ9Tj9bMV06YXJndW1lbnRzLGZ0PUogaW5zdGFuY2VvZiBncixEdD1pdFswXSxPdD1mdHx8JGUoSiksVnQ9ZnVuY3Rpb24ocHIpe3ZhciB5cj1WLmFwcGx5KEcscG0oW3ByXSxpdCkpO3JldHVybiBOJiZvZT95clswXTp5cn07T3QmJlQmJnR5cGVvZiBEdD09ImZ1bmN0aW9uIiYmRHQubGVuZ3RoIT0xJiYoZnQ9T3Q9ITEpO3ZhciBvZT10aGlzLl9fY2hhaW5fXyxUZT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLE5lPVkmJiFvZSxlcj1mdCYmIVRlO2lmKCFZJiZPdCl7Sj1lcj9KOm5ldyBncih0aGlzKTt2YXIgRGU9bS5hcHBseShKLGl0KTtyZXR1cm4gRGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzp5SSxhcmdzOltWdF0sdGhpc0FyZzplfSksbmV3IFdsKERlLG9lKX1yZXR1cm4gTmUmJmVyP20uYXBwbHkodGhpcyxpdCk6KERlPXRoaXMudGhydShWdCksTmU/Tj9EZS52YWx1ZSgpWzBdOkRlLnZhbHVlKCk6RGUpfSl9KSxxbChbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24obSl7dmFyIHY9RzZbbV0sVD0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobSk/InRhcCI6InRocnUiLE49L14oPzpwb3B8c2hpZnQpJC8udGVzdChtKTtHLnByb3RvdHlwZVttXT1mdW5jdGlvbigpe3ZhciBWPWFyZ3VtZW50cztpZihOJiYhdGhpcy5fX2NoYWluX18pe3ZhciBZPXRoaXMudmFsdWUoKTtyZXR1cm4gdi5hcHBseSgkZShZKT9ZOltdLFYpfXJldHVybiB0aGlzW1RdKGZ1bmN0aW9uKEope3JldHVybiB2LmFwcGx5KCRlKEopP0o6W10sVil9KX19KSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD1HW3ZdO2lmKFQpe3ZhciBOPVQubmFtZSsiIjt1bi5jYWxsKF94LE4pfHwoX3hbTl09W10pLF94W05dLnB1c2goe25hbWU6dixmdW5jOlR9KX19KSxfeFtoSShlLGcpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzplfV0sZ3IucHJvdG90eXBlLmNsb25lPWtkZSxnci5wcm90b3R5cGUucmV2ZXJzZT1SZGUsZ3IucHJvdG90eXBlLnZhbHVlPU5kZSxHLnByb3RvdHlwZS5hdD1jMGUsRy5wcm90b3R5cGUuY2hhaW49dTBlLEcucHJvdG90eXBlLmNvbW1pdD1oMGUsRy5wcm90b3R5cGUubmV4dD1mMGUsRy5wcm90b3R5cGUucGxhbnQ9ZDBlLEcucHJvdG90eXBlLnJldmVyc2U9bTBlLEcucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS52YWx1ZU9mPUcucHJvdG90eXBlLnZhbHVlPWcwZSxHLnByb3RvdHlwZS5maXJzdD1HLnByb3RvdHlwZS5oZWFkLEVNJiYoRy5wcm90b3R5cGVbRU1dPXAwZSksR30sbW09aGRlKCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPyhmby5fPW1tLGRlZmluZShmdW5jdGlvbigpe3JldHVybiBtbX0pKTpRMD8oKFEwLmV4cG9ydHM9bW0pLl89bW0sYXEuXz1tbSk6Zm8uXz1tbX0pLmNhbGwoUngpfSk7ZnVuY3Rpb24gX190KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEo5KHIpfWZ1bmN0aW9uIEo5KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGcyZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIF8yZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGdfdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09bTJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgbTJlLHZzLHlfdD1NKCgpPT57bTJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0o5LnByb3RvdHlwZT1fX3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKOSxvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWcyZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPV8yZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Z190KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Z190KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBKOShlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dnM9X190fSk7dmFyIGttPU0oKCk9Pnt5X3QoKX0pO2Z1bmN0aW9uIF9ZKGUpe3JldHVybitlfXZhciBDdnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlZKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gdlkoZSl7cmV0dXJuIGUqKDItZSl9ZnVuY3Rpb24gSUwoZSl7cmV0dXJuKChlKj0yKTw9MT9lKmU6LS1lKigyLWUpKzEpLzJ9dmFyIEF2dD1NKCgpPT57fSk7ZnVuY3Rpb24geFkoZSl7cmV0dXJuIGUqZSplfWZ1bmN0aW9uIGJZKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgUHZ0PU0oKCk9Pnt9KTt2YXIgd1ksU1ksTVksTEwsSXZ0PU0oKCk9Pnt3WT0zLFNZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0od1kpLE1ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiAxLU1hdGgucG93KDEtbix0KX1yZXR1cm4gci5leHBvbmVudD1lLHJ9KHdZKSxMTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfSh3WSl9KTtmdW5jdGlvbiBFWShlKXtyZXR1cm4rZT09MT8xOjEtTWF0aC5jb3MoZSprdnQpfWZ1bmN0aW9uIFRZKGUpe3JldHVybiBNYXRoLnNpbihlKmt2dCl9ZnVuY3Rpb24ga0woZSl7cmV0dXJuKDEtTWF0aC5jb3MoTHZ0KmUpKS8yfXZhciBMdnQsa3Z0LFJ2dD1NKCgpPT57THZ0PU1hdGguUEksa3Z0PUx2dC8yfSk7ZnVuY3Rpb24gRGgoZSl7cmV0dXJuKE1hdGgucG93KDIsLTEwKmUpLS4wMDA5NzY1NjI1KSoxLjAwMDk3NzUxNzEwNjU0OTR9dmFyIENZPU0oKCk9Pnt9KTtmdW5jdGlvbiBBWShlKXtyZXR1cm4gRGgoMS0rZSl9ZnVuY3Rpb24gUFkoZSl7cmV0dXJuIDEtRGgoZSl9ZnVuY3Rpb24gUkwoZSl7cmV0dXJuKChlKj0yKTw9MT9EaCgxLWUpOjItRGgoZS0xKSkvMn12YXIgTnZ0PU0oKCk9PntDWSgpfSk7ZnVuY3Rpb24gSVkoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBMWShlKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZSplKX1mdW5jdGlvbiBOTChlKXtyZXR1cm4oKGUqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtZSplKTpNYXRoLnNxcnQoMS0oZS09MikqZSkrMSkvMn12YXIgRHZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSWShlKXtyZXR1cm4gMS1QXygxLWUpfWZ1bmN0aW9uIFBfKGUpe3JldHVybihlPStlKTxrWT9ETCplKmU6ZTx1U2U/REwqKGUtPWNTZSkqZStoU2U6ZTxwU2U/REwqKGUtPWZTZSkqZStkU2U6REwqKGUtPW1TZSkqZStnU2V9ZnVuY3Rpb24gTlkoZSl7cmV0dXJuKChlKj0yKTw9MT8xLVBfKDEtZSk6UF8oZS0xKSsxKS8yfXZhciBrWSxjU2UsdVNlLGhTZSxmU2UscFNlLGRTZSxtU2UsZ1NlLERMLE92dD1NKCgpPT57a1k9LjM2MzYzNjM2MzYzNjM2MzY1LGNTZT02LzExLHVTZT04LzExLGhTZT0zLzQsZlNlPTkvMTEscFNlPTEwLzExLGRTZT0xNS8xNixtU2U9MjEvMjIsZ1NlPTYzLzY0LERMPTEva1kva1l9KTt2YXIgRFksT1kselksT0wsenZ0PU0oKCk9PntEWT0xLjcwMTU4LE9ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybihuPStuKSpuKih0KihuLTEpK24pfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSx6WT1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4tLW4qbiooKG4rMSkqdCtuKSsxfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSxPTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPDE/bipuKigodCsxKSpuLXQpOihuLT0yKSpuKigodCsxKSpuK3QpKzIpLzJ9cmV0dXJuIHIub3ZlcnNob290PWUscn0oRFkpfSk7dmFyIFNiLEZZLEJZLEhZLHpMLFZZLEZ2dD1NKCgpPT57Q1koKTtTYj0yKk1hdGguUEksRlk9MSxCWT0uMyxIWT1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gdCpEaCgtIC0tbykqTWF0aC5zaW4oKG4tbykvcil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8scipTYil9LGkucGVyaW9kPWZ1bmN0aW9uKG8pe3JldHVybiBlKHQsbyl9LGl9KEZZLEJZKSx6TD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gMS10KkRoKG89K28pKk1hdGguc2luKChvK24pL3IpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihvKXtyZXR1cm4gZShvLHIqU2IpfSxpLnBlcmlvZD1mdW5jdGlvbihvKXtyZXR1cm4gZSh0LG8pfSxpfShGWSxCWSksVlk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooci89U2IpO2Z1bmN0aW9uIGkobyl7cmV0dXJuKChvPW8qMi0xKTwwP3QqRGgoLW8pKk1hdGguc2luKChuLW8pL3IpOjItdCpEaChvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKlNiKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlksQlkpfSk7dmFyIEJ2dD17fTtLcyhCdnQse2Vhc2VCYWNrOigpPT5PTCxlYXNlQmFja0luOigpPT5PWSxlYXNlQmFja0luT3V0OigpPT5PTCxlYXNlQmFja091dDooKT0+elksZWFzZUJvdW5jZTooKT0+UF8sZWFzZUJvdW5jZUluOigpPT5SWSxlYXNlQm91bmNlSW5PdXQ6KCk9Pk5ZLGVhc2VCb3VuY2VPdXQ6KCk9PlBfLGVhc2VDaXJjbGU6KCk9Pk5MLGVhc2VDaXJjbGVJbjooKT0+SVksZWFzZUNpcmNsZUluT3V0OigpPT5OTCxlYXNlQ2lyY2xlT3V0OigpPT5MWSxlYXNlQ3ViaWM6KCk9PnhzLGVhc2VDdWJpY0luOigpPT54WSxlYXNlQ3ViaWNJbk91dDooKT0+eHMsZWFzZUN1YmljT3V0OigpPT5iWSxlYXNlRWxhc3RpYzooKT0+ekwsZWFzZUVsYXN0aWNJbjooKT0+SFksZWFzZUVsYXN0aWNJbk91dDooKT0+VlksZWFzZUVsYXN0aWNPdXQ6KCk9PnpMLGVhc2VFeHA6KCk9PlJMLGVhc2VFeHBJbjooKT0+QVksZWFzZUV4cEluT3V0OigpPT5STCxlYXNlRXhwT3V0OigpPT5QWSxlYXNlTGluZWFyOigpPT5fWSxlYXNlUG9seTooKT0+TEwsZWFzZVBvbHlJbjooKT0+U1ksZWFzZVBvbHlJbk91dDooKT0+TEwsZWFzZVBvbHlPdXQ6KCk9Pk1ZLGVhc2VRdWFkOigpPT5JTCxlYXNlUXVhZEluOigpPT55WSxlYXNlUXVhZEluT3V0OigpPT5JTCxlYXNlUXVhZE91dDooKT0+dlksZWFzZVNpbjooKT0+a0wsZWFzZVNpbkluOigpPT5FWSxlYXNlU2luSW5PdXQ6KCk9PmtMLGVhc2VTaW5PdXQ6KCk9PlRZfSk7dmFyIElfPU0oKCk9PntDdnQoKTtBdnQoKTtQdnQoKTtJdnQoKTtSdnQoKTtOdnQoKTtEdnQoKTtPdnQoKTt6dnQoKTtGdnQoKX0pO2Z1bmN0aW9uIFlMKCl7fWZ1bmN0aW9uIFF2dChlLHQpe3ZhciByPW5ldyBZTDtpZihlIGluc3RhbmNlb2YgWUwpZS5lYWNoKGZ1bmN0aW9uKHMsbCl7ci5zZXQobCxzKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG49LTEsaT1lLmxlbmd0aCxvO2lmKHQ9PW51bGwpZm9yKDsrK248aTspci5zZXQobixlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuc2V0KHQobz1lW25dLG4sZSksbyl9ZWxzZSBpZihlKWZvcih2YXIgYSBpbiBlKXIuc2V0KGEsZVthXSk7cmV0dXJuIHJ9dmFyIGVsLEppLGpMPU0oKCk9PntlbD0iJCI7WUwucHJvdG90eXBlPVF2dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllMLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZWwrZSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZWwrZV19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzW2VsK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWVsK2U7cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWVsJiZkZWxldGUgdGhpc1tlXX0sa2V5czpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUucHVzaCh0aGlzW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIGV9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1lbClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUodGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07Smk9UXZ0fSk7ZnVuY3Rpb24gcjF0KCl7dmFyIGU9W10sdD1bXSxyLG4saTtmdW5jdGlvbiBvKHMsbCxjLHUpe2lmKGw+PWUubGVuZ3RoKXJldHVybiByIT1udWxsJiZzLnNvcnQociksbiE9bnVsbD9uKHMpOnM7Zm9yKHZhciBoPS0xLGY9cy5sZW5ndGgscD1lW2wrK10sZCxnLF89SmkoKSx5LHg9YygpOysraDxmOykoeT1fLmdldChkPXAoZz1zW2hdKSsiIikpP3kucHVzaChnKTpfLnNldChkLFtnXSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihiLFMpe3UoeCxTLG8oYixsLGMsdSkpfSkseH1mdW5jdGlvbiBhKHMsbCl7aWYoKytsPmUubGVuZ3RoKXJldHVybiBzO3ZhciBjLHU9dFtsLTFdO3JldHVybiBuIT1udWxsJiZsPj1lLmxlbmd0aD9jPXMuZW50cmllcygpOihjPVtdLHMuZWFjaChmdW5jdGlvbihoLGYpe2MucHVzaCh7a2V5OmYsdmFsdWVzOmEoaCxsKX0pfSkpLHUhPW51bGw/Yy5zb3J0KGZ1bmN0aW9uKGgsZil7cmV0dXJuIHUoaC5rZXksZi5rZXkpfSk6Y31yZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxOU2UsRFNlKX0sbWFwOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCx0MXQsZTF0KX0sZW50cmllczpmdW5jdGlvbihzKXtyZXR1cm4gYShvKHMsMCx0MXQsZTF0KSwwKX0sa2V5OmZ1bmN0aW9uKHMpe3JldHVybiBlLnB1c2gocyksaX0sc29ydEtleXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRbZS5sZW5ndGgtMV09cyxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHMpe3JldHVybiByPXMsaX0scm9sbHVwOmZ1bmN0aW9uKHMpe3JldHVybiBuPXMsaX19fWZ1bmN0aW9uIE5TZSgpe3JldHVybnt9fWZ1bmN0aW9uIERTZShlLHQscil7ZVt0XT1yfWZ1bmN0aW9uIHQxdCgpe3JldHVybiBKaSgpfWZ1bmN0aW9uIGUxdChlLHQscil7ZS5zZXQodCxyKX12YXIgbjF0PU0oKCk9PntqTCgpfSk7ZnVuY3Rpb24gWEwoKXt9ZnVuY3Rpb24gaTF0KGUsdCl7dmFyIHI9bmV3IFhMO2lmKGUgaW5zdGFuY2VvZiBYTCllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIga18sbzF0LGExdD1NKCgpPT57akwoKTtrXz1KaS5wcm90b3R5cGU7WEwucHJvdG90eXBlPWkxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhMLGhhczprXy5oYXMsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiBlKz0iIix0aGlzW2VsK2VdPWUsdGhpc30scmVtb3ZlOmtfLnJlbW92ZSxjbGVhcjprXy5jbGVhcix2YWx1ZXM6a18ua2V5cyxzaXplOmtfLnNpemUsZW1wdHk6a18uZW1wdHksZWFjaDprXy5lYWNofTtvMXQ9aTF0fSk7ZnVuY3Rpb24gJEwoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBzMXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGwxdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIGMxdD1NKCgpPT57fSk7ZnVuY3Rpb24gdTF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBoMXQ9TSgoKT0+e30pO3ZhciBUYj1NKCgpPT57bjF0KCk7YTF0KCk7akwoKTtzMXQoKTtjMXQoKTtoMXQoKX0pO2Z1bmN0aW9uIHYxdChlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIityKyddIHx8ICIiJ30pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEdTZShlLHQpe3ZhciByPXYxdChlKTtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gdChyKG4pLGksZSl9fWZ1bmN0aW9uIHkxdChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIGkgaW4gbilpIGluIHR8fHIucHVzaCh0W2ldPWkpfSkscn1mdW5jdGlvbiB3cyhlLHQpe3ZhciByPWUrIiIsbj1yLmxlbmd0aDtyZXR1cm4gbjx0P25ldyBBcnJheSh0LW4rMSkuam9pbigwKStyOnJ9ZnVuY3Rpb24gV1NlKGUpe3JldHVybiBlPDA/Ii0iK3dzKC1lLDYpOmU+OTk5OT8iKyIrd3MoZSw2KTp3cyhlLDQpfWZ1bmN0aW9uIFlTZShlKXt2YXIgdD1lLmdldFVUQ0hvdXJzKCkscj1lLmdldFVUQ01pbnV0ZXMoKSxuPWUuZ2V0VVRDU2Vjb25kcygpLGk9ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4oZSk/IkludmFsaWQgRGF0ZSI6V1NlKGUuZ2V0VVRDRnVsbFllYXIoKSw0KSsiLSIrd3MoZS5nZXRVVENNb250aCgpKzEsMikrIi0iK3dzKGUuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyIuIit3cyhpLDMpKyJaIjpuPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyJaIjpyfHx0PyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyJaIjoiIil9ZnVuY3Rpb24gV20oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgnWyInK2UrYApccl1gKSxyPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuKGgsZil7dmFyIHAsZCxnPWkoaCxmdW5jdGlvbihfLHkpe2lmKHApcmV0dXJuIHAoXyx5LTEpO2Q9XyxwPWY/R1NlKF8sZik6djF0KF8pfSk7cmV0dXJuIGcuY29sdW1ucz1kfHxbXSxnfWZ1bmN0aW9uIGkoaCxmKXt2YXIgcD1bXSxkPWgubGVuZ3RoLGc9MCxfPTAseSx4PWQ8PTAsYj0hMTtoLmNoYXJDb2RlQXQoZC0xKT09PVVFJiYtLWQsaC5jaGFyQ29kZUF0KGQtMSk9PT1uaiYmLS1kO2Z1bmN0aW9uIFMoKXtpZih4KXJldHVybiBlajtpZihiKXJldHVybiBiPSExLF8xdDt2YXIgUCxrPWcsTztpZihoLmNoYXJDb2RlQXQoayk9PT1yail7Zm9yKDtnKys8ZCYmaC5jaGFyQ29kZUF0KGcpIT09cmp8fGguY2hhckNvZGVBdCgrK2cpPT09cmo7KTtyZXR1cm4oUD1nKT49ZD94PSEwOihPPWguY2hhckNvZGVBdChnKyspKT09PVVFP2I9ITA6Tz09PW5qJiYoYj0hMCxoLmNoYXJDb2RlQXQoZyk9PT1VRSYmKytnKSxoLnNsaWNlKGsrMSxQLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2c8ZDspe2lmKChPPWguY2hhckNvZGVBdChQPWcrKykpPT09VUUpYj0hMDtlbHNlIGlmKE89PT1uailiPSEwLGguY2hhckNvZGVBdChnKT09PVVFJiYrK2c7ZWxzZSBpZihPIT09ciljb250aW51ZTtyZXR1cm4gaC5zbGljZShrLFApfXJldHVybiB4PSEwLGguc2xpY2UoayxkKX1mb3IoOyh5PVMoKSkhPT1lajspe2Zvcih2YXIgQz1bXTt5IT09XzF0JiZ5IT09ZWo7KUMucHVzaCh5KSx5PVMoKTtmJiYoQz1mKEMsXysrKSk9PW51bGx8fHAucHVzaChDKX1yZXR1cm4gcH1mdW5jdGlvbiBvKGgsZil7cmV0dXJuIGgubWFwKGZ1bmN0aW9uKHApe3JldHVybiBmLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gdShwW2RdKX0pLmpvaW4oZSl9KX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXkxdChoKSksW2YubWFwKHUpLmpvaW4oZSldLmNvbmNhdChvKGgsZikpLmpvaW4oYApgKX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXkxdChoKSksbyhoLGYpLmpvaW4oYApgKX1mdW5jdGlvbiBsKGgpe3JldHVybiBoLm1hcChjKS5qb2luKGAKYCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5tYXAodSkuam9pbihlKX1mdW5jdGlvbiB1KGgpe3JldHVybiBoPT1udWxsPyIiOmggaW5zdGFuY2VvZiBEYXRlP1lTZShoKTp0LnRlc3QoaCs9IiIpPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aH1yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6YSxmb3JtYXRCb2R5OnMsZm9ybWF0Um93czpsLGZvcm1hdFJvdzpjLGZvcm1hdFZhbHVlOnV9fXZhciBfMXQsZWoscmosVUUsbmosdGs9TSgoKT0+e18xdD17fSxlaj17fSxyaj0zNCxVRT0xMCxuaj0xM30pO3ZhciBSXyxDYix4MXQsYjF0LHcxdCxTMXQsTTF0LEUxdCxUMXQ9TSgoKT0+e3RrKCk7Ul89V20oIiwiKSxDYj1SXy5wYXJzZSx4MXQ9Ul8ucGFyc2VSb3dzLGIxdD1SXy5mb3JtYXQsdzF0PVJfLmZvcm1hdEJvZHksUzF0PVJfLmZvcm1hdFJvd3MsTTF0PVJfLmZvcm1hdFJvdyxFMXQ9Ul8uZm9ybWF0VmFsdWV9KTt2YXIgTl8sQWIsQzF0LEExdCxQMXQsSTF0LEwxdCxrMXQsUjF0PU0oKCk9Pnt0aygpO05fPVdtKCIJIiksQWI9Tl8ucGFyc2UsQzF0PU5fLnBhcnNlUm93cyxBMXQ9Tl8uZm9ybWF0LFAxdD1OXy5mb3JtYXRCb2R5LEkxdD1OXy5mb3JtYXRSb3dzLEwxdD1OXy5mb3JtYXRSb3csazF0PU5fLmZvcm1hdFZhbHVlfSk7ZnVuY3Rpb24gaWooZSl7Zm9yKHZhciB0IGluIGUpe3ZhciByPWVbdF0udHJpbSgpLG4saTtpZighcilyPW51bGw7ZWxzZSBpZihyPT09InRydWUiKXI9ITA7ZWxzZSBpZihyPT09ImZhbHNlIilyPSExO2Vsc2UgaWYocj09PSJOYU4iKXI9TmFOO2Vsc2UgaWYoIWlzTmFOKG49K3IpKXI9bjtlbHNlIGlmKGk9ci5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKWpTZSYmISFpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpO2Vsc2UgY29udGludWU7ZVt0XT1yfXJldHVybiBlfXZhciBqU2UsTjF0PU0oKCk9PntqU2U9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCl9KTt2YXIgcUU9TSgoKT0+e3RrKCk7VDF0KCk7UjF0KCk7TjF0KCl9KTt2YXIgcGU9e307S3MocGUse19fYXNzaWduOigpPT55NWUsX19hc3luY0RlbGVnYXRvcjooKT0+QTVlLF9fYXN5bmNHZW5lcmF0b3I6KCk9PkM1ZSxfX2FzeW5jVmFsdWVzOigpPT5QNWUsX19hd2FpdDooKT0+VTUsX19hd2FpdGVyOigpPT5TNWUsX19kZWNvcmF0ZTooKT0+eDVlLF9fZXhwb3J0U3RhcjooKT0+RTVlLF9fZXh0ZW5kczooKT0+XzVlLF9fZ2VuZXJhdG9yOigpPT5NNWUsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9Pkk1ZSxfX21ldGFkYXRhOigpPT53NWUsX19wYXJhbTooKT0+YjVlLF9fcmVhZDooKT0+bk10LF9fcmVzdDooKT0+djVlLF9fc3ByZWFkOigpPT5UNWUsX192YWx1ZXM6KCk9PnkkfSk7ZnVuY3Rpb24gXzVlKGUsdCl7ZzVlKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9ZnVuY3Rpb24gdjVlKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQuaW5kZXhPZihuKTwwJiYocltuXT1lW25dKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIGk9MCxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxuLmxlbmd0aDtpKyspdC5pbmRleE9mKG5baV0pPDAmJihyW25baV1dPWVbbltpXV0pO3JldHVybiByfWZ1bmN0aW9uIHg1ZShlLHQscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89aTwzP3Q6bj09PW51bGw/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bixhO2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGU9PSJmdW5jdGlvbiIpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGE9ZVtzXSkmJihvPShpPDM/YShvKTppPjM/YSh0LHIsbyk6YSh0LHIpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixvKSxvfWZ1bmN0aW9uIGI1ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3QocixuLGUpfX1mdW5jdGlvbiB3NWUoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24gUzVlKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShjKXt0cnl7bChuLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIHMoYyl7dHJ5e2wobi50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/aShjLnZhbHVlKTpuZXcgcihmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihhLHMpfWwoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIE01ZShlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihvWzBdJjEpdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LG4saSxvLGE7cmV0dXJuIGE9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsKFtjLHVdKX19ZnVuY3Rpb24gbChjKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsaSYmKG89aVtjWzBdJjI/InJldHVybiI6Y1swXT8idGhyb3ciOiJuZXh0Il0pJiYhKG89by5jYWxsKGksY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKGk9MCxvJiYoYz1bMCxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiByLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OnIubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9ci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1yLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7ci5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZyLmxhYmVsPG9bMV0pe3IubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmci5sYWJlbDxvWzJdKXtyLmxhYmVsPW9bMl0sci5vcHMucHVzaChjKTticmVha31vWzJdJiZyLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxyKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e249bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiBFNWUoZSx0KXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX1mdW5jdGlvbiB5JChlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl0scj0wO3JldHVybiB0P3QuY2FsbChlKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX19ZnVuY3Rpb24gbk10KGUsdCl7dmFyIHI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFyKXJldHVybiBlO3ZhciBuPXIuY2FsbChlKSxpLG89W10sYTt0cnl7Zm9yKDsodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPW4ubmV4dCgpKS5kb25lOylvLnB1c2goaS52YWx1ZSl9Y2F0Y2gocyl7YT17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHI9bi5yZXR1cm4pJiZyLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBvfWZ1bmN0aW9uIFQ1ZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KG5NdChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBVNShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFU1Pyh0aGlzLnY9ZSx0aGlzKTpuZXcgVTUoZSl9ZnVuY3Rpb24gQzVlKGUsdCxyKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG49ci5hcHBseShlLHR8fFtdKSxpLG89W107cmV0dXJuIGk9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKGYpe25bZl0mJihpW2ZdPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGcpe28ucHVzaChbZixwLGQsZ10pPjF8fHMoZixwKX0pfSl9ZnVuY3Rpb24gcyhmLHApe3RyeXtsKG5bZl0ocCkpfWNhdGNoKGQpe2gob1swXVszXSxkKX19ZnVuY3Rpb24gbChmKXtmLnZhbHVlIGluc3RhbmNlb2YgVTU/UHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihjLHUpOmgob1swXVsyXSxmKX1mdW5jdGlvbiBjKGYpe3MoIm5leHQiLGYpfWZ1bmN0aW9uIHUoZil7cygidGhyb3ciLGYpfWZ1bmN0aW9uIGgoZixwKXtmKHApLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBBNWUoZSl7dmFyIHQscjtyZXR1cm4gdD17fSxuKCJuZXh0IiksbigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxuKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiBuKGksbyl7ZVtpXSYmKHRbaV09ZnVuY3Rpb24oYSl7cmV0dXJuKHI9IXIpP3t2YWx1ZTpVNShlW2ldKGEpKSxkb25lOmk9PT0icmV0dXJuIn06bz9vKGEpOmF9KX19ZnVuY3Rpb24gUDVlKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6dHlwZW9mIHkkPT0iZnVuY3Rpb24iP3kkKGUpOmVbU3ltYm9sLml0ZXJhdG9yXSgpfWZ1bmN0aW9uIEk1ZShlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGc1ZSx5NWUsZGU9TSgoKT0+e2c1ZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07eTVlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYodFtvXT1yW29dKX1yZXR1cm4gdH19KTt2YXIgaU10LG9NdD1NKCgpPT57aU10PSI0LjEzLjAifSk7ZnVuY3Rpb24gX2MoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHB5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1MNWUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBMNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9jKGUodCkscil9fXZhciB2JD1NKCgpPT57cHkoKX0pO3ZhciBhTXQseCQsc010LHNSLGIkPU0oKCk9PntweSgpO3YkKCk7YU10PWFSKF9jKSx4JD1hTXQucmlnaHQsc010PWFNdC5sZWZ0LHNSPXgkfSk7ZnVuY3Rpb24gbE10KGUsdCl7dD09bnVsbCYmKHQ9dyQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24gdyQoZSx0KXtyZXR1cm5bZSx0XX12YXIgUyQ9TSgoKT0+e30pO2Z1bmN0aW9uIGNNdChlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPXckKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfXZhciB1TXQ9TSgoKT0+e1MkKCl9KTtmdW5jdGlvbiBoTXQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGZNdD1NKCgpPT57fSk7ZnVuY3Rpb24gYWwoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgbDI9TSgoKT0+e30pO2Z1bmN0aW9uIGxSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPWFsKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1hbCh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfXZhciBNJD1NKCgpPT57bDIoKX0pO2Z1bmN0aW9uIGNSKGUsdCl7dmFyIHI9bFIoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfXZhciBFJD1NKCgpPT57TSQoKX0pO2Z1bmN0aW9uIHVSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIFQkPU0oKCk9Pnt9KTt2YXIgcE10LGRNdCxtTXQsQyQ9TSgoKT0+e3BNdD1BcnJheS5wcm90b3R5cGUsZE10PXBNdC5zbGljZSxtTXQ9cE10Lm1hcH0pO2Z1bmN0aW9uIHE1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZ010PU0oKCk9Pnt9KTtmdW5jdGlvbiBfTXQoZSl7cmV0dXJuIGV9dmFyIHlNdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFIoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIEEkPU0oKCk9Pnt9KTtmdW5jdGlvbiB2TXQoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1rJChlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gayQoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1QJD8xMDpvPj1JJD81Om8+PUwkPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49UCQ/MTA6bz49SSQ/NTpvPj1MJD8yOjEpfWZ1bmN0aW9uIGZSKGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1QJD9pKj0xMDpvPj1JJD9pKj01Om8+PUwkJiYoaSo9MiksdDxlPy1pOml9dmFyIFAkLEkkLEwkLFIkPU0oKCk9PntQJD1NYXRoLnNxcnQoNTApLEkkPU1hdGguc3FydCgxMCksTCQ9TWF0aC5zcXJ0KDIpfSk7ZnVuY3Rpb24gcFIoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIpKzF9dmFyIE4kPU0oKCk9Pnt9KTtmdW5jdGlvbiB4TXQoKXt2YXIgZT1fTXQsdD11UixyPXBSO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWZSKHUsaCxmKSxmPWhSKE1hdGguY2VpbCh1L2YpKmYsTWF0aC5mbG9vcihoL2YpKmYsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkPW5ldyBBcnJheShwKzEpLGc7Zm9yKG89MDtvPD1wOysrbylnPWRbb109W10sZy54MD1vPjA/ZltvLTFdOnUsZy54MT1vPHA/ZltvXTpoO2ZvcihvPTA7bzxhOysrbylzPWxbb10sdTw9cyYmczw9aCYmZFtzUihmLHMsMCxwKV0ucHVzaChpW29dKTtyZXR1cm4gZH1yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnE1KGkpLG4pOmV9LG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cTUoW2lbMF0saVsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkFycmF5LmlzQXJyYXkoaSk/cTUoZE10LmNhbGwoaSkpOnE1KGkpLG4pOnJ9LG59dmFyIGJNdD1NKCgpPT57QyQoKTtiJCgpO2dNdCgpO1QkKCk7eU10KCk7QSQoKTtSJCgpO04kKCl9KTtmdW5jdGlvbiBkeShlLHQscil7aWYocj09bnVsbCYmKHI9YWwpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX12YXIgZFI9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiB3TXQoZSx0LHIpe3JldHVybiBlPW1NdC5jYWxsKGUsYWwpLnNvcnQoX2MpLE1hdGguY2VpbCgoci10KS8oMiooZHkoZSwuNzUpLWR5KGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgU010PU0oKCk9PntDJCgpO3B5KCk7bDIoKTtkUigpfSk7ZnVuY3Rpb24gTU10KGUsdCxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLXQpLygzLjUqY1IoZSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgRU10PU0oKCk9PntFJCgpfSk7ZnVuY3Rpb24gVE10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfXZhciBDTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFNdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1hbChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPWFsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufXZhciBQTXQ9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBJTXQoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz1bXTtpZih0PT1udWxsKWZvcig7KytuPHI7KWlzTmFOKGk9YWwoZVtuXSkpfHxvLnB1c2goaSk7ZWxzZSBmb3IoOysrbjxyOylpc05hTihpPWFsKHQoZVtuXSxuLGUpKSl8fG8ucHVzaChpKTtyZXR1cm4gZHkoby5zb3J0KF9jKSwuNSl9dmFyIExNdD1NKCgpPT57cHkoKTtsMigpO2RSKCl9KTtmdW5jdGlvbiBrTXQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHIsbj0tMSxpPTAsbyxhOysrbjx0OylpKz1lW25dLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoaSk7LS10Pj0wOylmb3IoYT1lW3RdLHI9YS5sZW5ndGg7LS1yPj0wOylvWy0taV09YVtyXTtyZXR1cm4gb312YXIgUk10PU0oKCk9Pnt9KTtmdW5jdGlvbiBtUihlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvO2lmKHQ9PW51bGwpe2Zvcig7KytuPHI7KWlmKChpPWVbbl0pIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiZvPmkmJihvPWkpfWVsc2UgZm9yKDsrK248cjspaWYoKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmbz5pJiYobz1pKTtyZXR1cm4gb312YXIgRCQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5NdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn12YXIgRE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBPTXQoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9X2MpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX12YXIgek10PU0oKCk9PntweSgpfSk7ZnVuY3Rpb24gRk10KGUsdCxyKXtmb3IodmFyIG49KHI9PW51bGw/ZS5sZW5ndGg6ciktKHQ9dD09bnVsbD8wOit0KSxpLG87bjspbz1NYXRoLnJhbmRvbSgpKm4tLXwwLGk9ZVtuK3RdLGVbbit0XT1lW28rdF0sZVtvK3RdPWk7cmV0dXJuIGV9dmFyIEJNdD1NKCgpPT57fSk7ZnVuY3Rpb24gSE10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89MDtpZih0PT1udWxsKWZvcig7KytuPHI7KShpPStlW25dKSYmKG8rPWkpO2Vsc2UgZm9yKDsrK248cjspKGk9K3QoZVtuXSxuLGUpKSYmKG8rPWkpO3JldHVybiBvfXZhciBWTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdSKGUpe2lmKCEobz1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciB0PS0xLHI9bVIoZSxrNWUpLG49bmV3IEFycmF5KHIpOysrdDxyOylmb3IodmFyIGk9LTEsbyxhPW5bdF09bmV3IEFycmF5KG8pOysraTxvOylhW2ldPWVbaV1bdF07cmV0dXJuIG59ZnVuY3Rpb24gazVlKGUpe3JldHVybiBlLmxlbmd0aH12YXIgTyQ9TSgoKT0+e0QkKCl9KTtmdW5jdGlvbiBVTXQoKXtyZXR1cm4gZ1IoYXJndW1lbnRzKX12YXIgcU10PU0oKCk9PntPJCgpfSk7dmFyIEdNdD1NKCgpPT57YiQoKTtweSgpO3YkKCk7dU10KCk7Zk10KCk7RSQoKTtUJCgpO2JNdCgpO1NNdCgpO0VNdCgpO04kKCk7Q010KCk7UE10KCk7TE10KCk7Uk10KCk7RCQoKTtTJCgpO0RNdCgpO2RSKCk7QSQoKTt6TXQoKTtCTXQoKTtWTXQoKTtSJCgpO08kKCk7TSQoKTtxTXQoKX0pO3ZhciBfUixXTXQ9TSgoKT0+e19SPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFlNdChlKXtyZXR1cm4gZX12YXIgak10PU0oKCk9Pnt9KTtmdW5jdGlvbiBSNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhlKy41KSsiLDApIn1mdW5jdGlvbiBONWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBENWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybitlKHQpfX1mdW5jdGlvbiBPNWUoZSl7dmFyIHQ9TWF0aC5tYXgoMCxlLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIGUucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24ocil7cmV0dXJuK2UocikrdH19ZnVuY3Rpb24gejVlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHhSKGUsdCl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxvPTYsYT02LHM9MyxsPWU9PT15Unx8ZT09PUc1Py0xOjEsYz1lPT09RzV8fGU9PT12Uj8ieCI6InkiLHU9ZT09PXlSfHxlPT09eiQ/UjVlOk41ZTtmdW5jdGlvbiBoKGYpe3ZhciBwPW49PW51bGw/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQscik6dC5kb21haW4oKTpuLGQ9aT09bnVsbD90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQscik6WU10OmksZz1NYXRoLm1heChvLDApK3MsXz10LnJhbmdlKCkseT0rX1swXSsuNSx4PStfW18ubGVuZ3RoLTFdKy41LGI9KHQuYmFuZHdpZHRoP081ZTpENWUpKHQuY29weSgpKSxTPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixDPVMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFA9Uy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLHQpLm9yZGVyKCksaz1QLmV4aXQoKSxPPVAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxEPVAuc2VsZWN0KCJsaW5lIiksQj1QLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLGwqZykuYXR0cigiZHkiLGU9PT15Uj8iMGVtIjplPT09eiQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09UyYmKEM9Qy50cmFuc2l0aW9uKGYpLFA9UC50cmFuc2l0aW9uKGYpLEQ9RC50cmFuc2l0aW9uKGYpLEI9Qi50cmFuc2l0aW9uKGYpLGs9ay50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLFhNdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gaXNGaW5pdGUoST1iKEkpKT91KEkpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE8uYXR0cigib3BhY2l0eSIsWE10KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3ZhciBMPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoTCYmaXNGaW5pdGUoTD1MKEkpKT9MOmIoSSkpfSkpLGsucmVtb3ZlKCksQy5hdHRyKCJkIixlPT09RzV8fGU9PXZSPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYSksUC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiB1KGIoSSkpfSksRC5hdHRyKGMrIjIiLGwqbyksQi5hdHRyKGMsbCpnKS50ZXh0KGQpLFMuZmlsdGVyKHo1ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZT09PXZSPyJzdGFydCI6ZT09PUc1PyJlbmQiOiJtaWRkbGUiKSxTLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZixoKTp0fSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9X1IuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mPT1udWxsP1tdOl9SLmNhbGwoZiksaCk6ci5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOl9SLmNhbGwoZiksaCk6biYmbi5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZixoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K2YsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStmLGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZixoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStmLGgpOnN9LGh9ZnVuY3Rpb24gJE10KGUpe3JldHVybiB4Uih5UixlKX1mdW5jdGlvbiBLTXQoZSl7cmV0dXJuIHhSKHZSLGUpfWZ1bmN0aW9uIFpNdChlKXtyZXR1cm4geFIoeiQsZSl9ZnVuY3Rpb24gSk10KGUpe3JldHVybiB4UihHNSxlKX12YXIgeVIsdlIseiQsRzUsWE10LFFNdD1NKCgpPT57V010KCk7ak10KCk7eVI9MSx2Uj0yLHokPTMsRzU9NCxYTXQ9MWUtNn0pO3ZhciB0RXQ9TSgoKT0+e1FNdCgpfSk7ZnVuY3Rpb24gckV0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGJSKHIpfWZ1bmN0aW9uIGJSKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEI1ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIEg1ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGVFdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09RjVlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgRjVlLFc1LG5FdD1NKCgpPT57RjVlPXt2YWx1ZTpmdW5jdGlvbigpe319O2JSLnByb3RvdHlwZT1yRXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiUixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUI1ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPUg1ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09ZUV0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09ZUV0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBiUihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07VzU9ckV0fSk7dmFyIEYkPU0oKCk9PntuRXQoKX0pO3ZhciB3UixCJCxIJD1NKCgpPT57d1I9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEIkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3Uix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gVnAoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksQiQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkIkW3RdLGxvY2FsOmV9OmV9dmFyIFNSPU0oKCk9PntIJCgpfSk7ZnVuY3Rpb24gVjVlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09d1ImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXdSP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBVNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTVIoZSl7dmFyIHQ9VnAoZSk7cmV0dXJuKHQubG9jYWw/VTVlOlY1ZSkodCl9dmFyIFYkPU0oKCk9PntTUigpO0gkKCl9KTtmdW5jdGlvbiBxNWUoKXt9ZnVuY3Rpb24gbXkoZSl7cmV0dXJuIGU9PW51bGw/cTVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIEVSPU0oKCk9Pnt9KTtmdW5jdGlvbiBpRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgZmkobix0aGlzLl9wYXJlbnRzKX12YXIgb0V0PU0oKCk9Pnt3dSgpO0VSKCl9KTtmdW5jdGlvbiBHNWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBZNShlKXtyZXR1cm4gZT09bnVsbD9HNWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVSQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFFdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IGZpKG4saSl9dmFyIHNFdD1NKCgpPT57d3UoKTtVJCgpfSk7ZnVuY3Rpb24gajUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIHEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBsRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWo1KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBmaShuLHRoaXMuX3BhcmVudHMpfXZhciBjRXQ9TSgoKT0+e3d1KCk7cSQoKX0pO2Z1bmN0aW9uIFRSKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBHJD1NKCgpPT57fSk7ZnVuY3Rpb24gdUV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChUUiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gWDUoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFckPU0oKCk9PntHJCgpO3d1KCk7WDUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYNSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIGhFdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGZFdD1NKCgpPT57fSk7ZnVuY3Rpb24gVzVlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBYNShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gWTVlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9cEV0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9cEV0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IFg1KGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gZEV0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9ZNWU6VzVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9aEV0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBmaShhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIHBFdCxtRXQ9TSgoKT0+e3d1KCk7VyQoKTtmRXQoKTtwRXQ9IiQifSk7ZnVuY3Rpb24gZ0V0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFRSKSx0aGlzLl9wYXJlbnRzKX12YXIgX0V0PU0oKCk9PntHJCgpO3d1KCl9KTtmdW5jdGlvbiB5RXQoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIHZFdD1NKCgpPT57fSk7ZnVuY3Rpb24geEV0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBmaShhLHRoaXMuX3BhcmVudHMpfXZhciBiRXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB3RXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBTRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1FdChlKXtlfHwoZT1qNWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgZmkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGo1ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgRUV0PU0oKCk9Pnt3dSgpfSk7ZnVuY3Rpb24gVEV0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBDRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFFdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBQRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIElFdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIExFdD1NKCgpPT57fSk7ZnVuY3Rpb24ga0V0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgUkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBORXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIERFdD1NKCgpPT57fSk7ZnVuY3Rpb24gT0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgekV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uICQ1ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIEs1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIFo1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBKNWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFE1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBGRXQoZSx0KXt2YXIgcj1WcChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/JDVlOlg1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP1E1ZTpKNWU6ci5sb2NhbD9aNWU6SzVlKShyLHQpKX12YXIgQkV0PU0oKCk9PntTUigpfSk7ZnVuY3Rpb24gQ1IoZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBZJD1NKCgpPT57fSk7ZnVuY3Rpb24gdFRlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGVUZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIHJUZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBIRXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3RUZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yVGU6ZVRlKShlLHQscj09bnVsbD8iIjpyKSk6YWcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gYWcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxDUihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgaiQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBuVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIGlUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gb1RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIFZFdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP25UZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9vVGU6aVRlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgVUV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxRXQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFgkKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IEdFdChlKX1mdW5jdGlvbiBHRXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPXFFdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFdFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIFlFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGFUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtXRXQodGhpcyxlKX19ZnVuY3Rpb24gc1RlKGUpe3JldHVybiBmdW5jdGlvbigpe1lFdCh0aGlzLGUpfX1mdW5jdGlvbiBsVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/V0V0OllFdCkodGhpcyxlKX19ZnVuY3Rpb24gakV0KGUsdCl7dmFyIHI9cUV0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVgkKHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2xUZTp0P2FUZTpzVGUpKHIsdCkpfXZhciBYRXQ9TSgoKT0+e0dFdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBjVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHVUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIGhUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gJEV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP2NUZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/aFRlOnVUZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBLRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHBUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiBkVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBaRXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/ZlRlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9kVGU6cFRlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBKRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1UZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBRRXQoKXtyZXR1cm4gdGhpcy5lYWNoKG1UZSl9dmFyIHQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gZ1RlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gZTV0KCl7cmV0dXJuIHRoaXMuZWFjaChnVGUpfXZhciByNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG41dChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciBpNXQ9TSgoKT0+e1YkKCl9KTtmdW5jdGlvbiBfVGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBvNXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpLG49dD09bnVsbD9fVGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpteSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIGE1dD1NKCgpPT57ViQoKTtFUigpfSk7ZnVuY3Rpb24geVRlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gczV0KCl7cmV0dXJuIHRoaXMuZWFjaCh5VGUpfXZhciBsNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZUZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24geFRlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBjNXQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/eFRlOnZUZSl9dmFyIHU1dD1NKCgpPT57fSk7ZnVuY3Rpb24gaDV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZjV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBiVGUoZSx0LHIpe3JldHVybiBlPW01dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBtNXQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT13cjt3cj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXt3cj1pfX19ZnVuY3Rpb24gd1RlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBTVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gTVRlKGUsdCxyKXt2YXIgbj1kNXQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9iVGU6bTV0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGc1dChlLHQscil7dmFyIG49d1RlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9NVGU6U1RlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uICQkKGUsdCxyLG4pe3ZhciBpPXdyO2Uuc291cmNlRXZlbnQ9d3Isd3I9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3dyPWl9fXZhciBkNXQsd3IscDV0LEFSPU0oKCk9PntkNXQ9e30sd3I9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYocDV0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIHA1dHx8KGQ1dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBfNXQoZSx0LHIpe3ZhciBuPUNSKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEVUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBfNXQodGhpcyxlLHQpfX1mdW5jdGlvbiBUVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gXzV0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIHk1dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1RUZTpFVGUpKGUsdCkpfXZhciB2NXQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBmaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiB4NXQoKXtyZXR1cm4gbmV3IGZpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sSyQpfXZhciBLJCxVcCx3dT1NKCgpPT57b0V0KCk7c0V0KCk7Y0V0KCk7bUV0KCk7VyQoKTtfRXQoKTt2RXQoKTtiRXQoKTtTRXQoKTtFRXQoKTtDRXQoKTtQRXQoKTtMRXQoKTtSRXQoKTtERXQoKTt6RXQoKTtCRXQoKTtqJCgpO1VFdCgpO1hFdCgpO0tFdCgpO0pFdCgpO3Q1dCgpO3I1dCgpO2k1dCgpO2E1dCgpO2w1dCgpO3U1dCgpO2Y1dCgpO0FSKCk7djV0KCk7SyQ9W251bGxdO2ZpLnByb3RvdHlwZT14NXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmaSxzZWxlY3Q6aUV0LHNlbGVjdEFsbDphRXQsZmlsdGVyOmxFdCxkYXRhOmRFdCxlbnRlcjp1RXQsZXhpdDpnRXQsam9pbjp5RXQsbWVyZ2U6eEV0LG9yZGVyOndFdCxzb3J0Ok1FdCxjYWxsOlRFdCxub2RlczpBRXQsbm9kZTpJRXQsc2l6ZTprRXQsZW1wdHk6TkV0LGVhY2g6T0V0LGF0dHI6RkV0LHN0eWxlOkhFdCxwcm9wZXJ0eTpWRXQsY2xhc3NlZDpqRXQsdGV4dDokRXQsaHRtbDpaRXQscmFpc2U6UUV0LGxvd2VyOmU1dCxhcHBlbmQ6bjV0LGluc2VydDpvNXQscmVtb3ZlOnM1dCxjbG9uZTpjNXQsZGF0dW06aDV0LG9uOmc1dCxkaXNwYXRjaDp5NXR9O1VwPXg1dH0pO2Z1bmN0aW9uIHFwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IGZpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZmkoW1tlXV0sSyQpfXZhciBiNXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB3NXQoKXtmb3IodmFyIGU9d3IsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgUzV0PU0oKCk9PntBUigpfSk7ZnVuY3Rpb24gTTV0KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIEU1dD1NKCgpPT57fSk7ZnVuY3Rpb24gUFIoZSl7dmFyIHQ9dzV0KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLE01dChlLHQpfXZhciBUNXQ9TSgoKT0+e1M1dCgpO0U1dCgpfSk7dmFyIEVzPU0oKCk9PntxJCgpO1Q1dCgpO1NSKCk7YjV0KCk7d3UoKTtFUigpO1UkKCk7aiQoKTtBUigpfSk7ZnVuY3Rpb24gSVIoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBDNXQ9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBaJChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXFwKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsSVIsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsSVIsITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIEokKGUsdCl7dmFyIHI9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1xcChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihuLm9uKCJjbGljay5kcmFnIixJUiwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe24ub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gcj9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooci5zdHlsZS5Nb3pVc2VyU2VsZWN0PXIuX19ub3NlbGVjdCxkZWxldGUgci5fX25vc2VsZWN0KX12YXIgQTV0PU0oKCk9PntFcygpO0M1dCgpfSk7dmFyIFA1dD1NKCgpPT57QTV0KCl9KTtmdW5jdGlvbiBMUihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gUSQoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIEk1dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gazV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gTlRlKCl7cmV0dXJuIEY1dCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBSNXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBTdShlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1DVGUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9ONXQodCk6cj09PTM/bmV3IHNsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9rUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9rUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PUFUZS5leGVjKGUpKT9uZXcgc2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9UFRlLmV4ZWMoZSkpP25ldyBzbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1JVGUuZXhlYyhlKSk/a1IodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9TFRlLmV4ZWMoZSkpP2tSKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PWtUZS5leGVjKGUpKT96NXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1SVGUuZXhlYyhlKSk/ejV0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6TDV0Lmhhc093blByb3BlcnR5KGUpP041dChMNXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBzbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIE41dChlKXtyZXR1cm4gbmV3IHNsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBrUihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHNsKGUsdCxyLG4pfWZ1bmN0aW9uIERUZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFo1fHwoZT1TdShlKSksZT8oZT1lLnJnYigpLG5ldyBzbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgc2x9ZnVuY3Rpb24gdTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0RUZShlKTpuZXcgc2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHNsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBENXQoKXtyZXR1cm4iIyIrdEsodGhpcy5yKSt0Syh0aGlzLmcpK3RLKHRoaXMuYil9ZnVuY3Rpb24gTzV0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHRLKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHo1dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEtoKGUsdCxyLG4pfWZ1bmN0aW9uIEY1dChlKXtpZihlIGluc3RhbmNlb2YgS2gpcmV0dXJuIG5ldyBLaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBaNXx8KGU9U3UoZSkpLCFlKXJldHVybiBuZXcgS2g7aWYoZSBpbnN0YW5jZW9mIEtoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEtoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gQjV0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9GNXQoZSk6bmV3IEtoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBLaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZUsoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyICQ1LFJSLGMyLEs1LFpoLENUZSxBVGUsUFRlLElUZSxMVGUsa1RlLFJUZSxMNXQsSDV0PU0oKCk9PntJNXQoKTskNT0uNyxSUj0xLyQ1LGMyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixLNT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixaaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsQ1RlPS9eIyhbMC05YS1mXXszLDh9KSQvLEFUZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbYzIsYzIsYzJdKyJcXCkkIiksUFRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1taaCxaaCxaaF0rIlxcKSQiKSxJVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tjMixjMixjMixLNV0rIlxcKSQiKSxMVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1taaCxaaCxaaCxLNV0rIlxcKSQiKSxrVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0s1LFpoLFpoXSsiXFwpJCIpLFJUZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0s1LFpoLFpoLEs1XSsiXFwpJCIpLEw1dD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtMUihaNSxTdSx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDprNXQsZm9ybWF0SGV4Oms1dCxmb3JtYXRIc2w6TlRlLGZvcm1hdFJnYjpSNXQsdG9TdHJpbmc6UjV0fSk7TFIoc2wsdTIsUSQoWjUse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/UlI6TWF0aC5wb3coUlIsZSksbmV3IHNsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsPyQ1Ok1hdGgucG93KCQ1LGUpLG5ldyBzbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkQ1dCxmb3JtYXRIZXg6RDV0LGZvcm1hdFJnYjpPNXQsdG9TdHJpbmc6TzV0fSkpO0xSKEtoLEI1dCxRJChaNSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9SUjpNYXRoLnBvdyhSUixlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD8kNTpNYXRoLnBvdygkNSxlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBzbChlSyhlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxlSyhlLGksbiksZUsoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgTlI9TSgoKT0+e0g1dCgpfSk7ZnVuY3Rpb24gcksoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiBWNXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIHJLKChyLW4vdCkqdCxhLGksbyxzKX19dmFyIG5LPU0oKCk9Pnt9KTtmdW5jdGlvbiBVNXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBySygoci1uL3QpKnQsaSxvLGEscyl9fXZhciBxNXQ9TSgoKT0+e25LKCl9KTtmdW5jdGlvbiBKNShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGlLPU0oKCk9Pnt9KTtmdW5jdGlvbiBPVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiB6VGUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBHNXQoZSl7cmV0dXJuKGU9K2UpPT0xP0RSOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD96VGUodCxyLGUpOko1KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIERSKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP09UZShlLHIpOko1KGlzTmFOKGUpP3Q6ZSl9dmFyIFc1dD1NKCgpPT57aUsoKX0pO2Z1bmN0aW9uIFk1dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPXUyKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBneSxGVGUsQlRlLG9LPU0oKCk9PntOUigpO25LKCk7cTV0KCk7VzV0KCk7Z3k9ZnVuY3Rpb24gZSh0KXt2YXIgcj1HNXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9dTIoaSkpLnIsKG89dTIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1EUihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7RlRlPVk1dChWNXQpLEJUZT1ZNXQoVTV0KX0pO2Z1bmN0aW9uIGo1dChlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiBYNXQoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciAkNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEs1dChlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPV95KGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIFo1dD1NKCgpPT57T1IoKX0pO2Z1bmN0aW9uIEo1dChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19dmFyIFE1dD1NKCgpPT57fSk7ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIFE1PU0oKCk9Pnt9KTtmdW5jdGlvbiB0VHQoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1feShlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBlVHQ9TSgoKT0+e09SKCl9KTtmdW5jdGlvbiBIVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFZUZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHRUKGUsdCl7dmFyIHI9c0subGFzdEluZGV4PWFLLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPXNLLmV4ZWMoZSkpJiYoaT1hSy5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6VWEobixpKX0pKSxyPWFLLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9WVGUobFswXS54KTpIVGUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIHNLLGFLLGxLPU0oKCk9PntRNSgpO3NLPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxhSz1uZXcgUmVnRXhwKHNLLnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gX3koZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP0o1KHQpOihyPT09Im51bWJlciI/VWE6cj09PSJzdHJpbmciPyhuPVN1KHQpKT8odD1uLGd5KTp0VDp0IGluc3RhbmNlb2YgU3U/Z3k6dCBpbnN0YW5jZW9mIERhdGU/SjV0Olg1dCh0KT9qNXQ6QXJyYXkuaXNBcnJheSh0KT9LNXQ6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3RUdDpVYSkoZSx0KX12YXIgT1I9TSgoKT0+e05SKCk7b0soKTtaNXQoKTtRNXQoKTtRNSgpO2VUdCgpO2xLKCk7aUsoKTskNXQoKX0pO2Z1bmN0aW9uIGNLKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnJUdCxza2V3WDpNYXRoLmF0YW4obCkqclR0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgclR0LHpSLG5UdD1NKCgpPT57clR0PTE4MC9NYXRoLlBJLHpSPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gb1R0KGUpe3JldHVybiBlPT09Im5vbmUiP3pSOihlVHx8KGVUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHVLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpVHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGVULnN0eWxlLnRyYW5zZm9ybT1lLGU9aVR0LmdldENvbXB1dGVkU3R5bGUodUsuYXBwZW5kQ2hpbGQoZVQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHVLLnJlbW92ZUNoaWxkKGVUKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxjSygrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIGFUdChlKXtyZXR1cm4gZT09bnVsbD96UjooRlJ8fChGUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxGUi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9RlIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsY0soZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTp6Uil9dmFyIGVULHVLLGlUdCxGUixzVHQ9TSgoKT0+e25UdCgpfSk7ZnVuY3Rpb24gbFR0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6VWEoYyxoKX0se2k6Zy0yLHg6VWEodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpVYShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlVhKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpVYShjLGgpfSx7aTpnLTIseDpVYSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBoSyxmSyxjVHQ9TSgoKT0+e1E1KCk7c1R0KCk7aEs9bFR0KG9UdCwicHgsICIsInB4KSIsImRlZykiKSxmSz1sVHQoYVR0LCIsICIsIikiLCIpIil9KTt2YXIgclQ9TSgoKT0+e09SKCk7UTUoKTtsSygpO2NUdCgpO29LKCl9KTtmdW5jdGlvbiBmMigpe3JldHVybiB5eXx8KGZUdChVVGUpLHl5PWFULm5vdygpK1ZSKX1mdW5jdGlvbiBVVGUoKXt5eT0wfWZ1bmN0aW9uIHNUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBVUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gcFR0KCl7ZjIoKSwrK2gyO2Zvcih2YXIgZT1CUix0O2U7KSh0PXl5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1oMn1mdW5jdGlvbiB1VHQoKXt5eT0oSFI9YVQubm93KCkpK1ZSLGgyPWlUPTA7dHJ5e3BUdCgpfWZpbmFsbHl7aDI9MCxHVGUoKSx5eT0wfX1mdW5jdGlvbiBxVGUoKXt2YXIgZT1hVC5ub3coKSx0PWUtSFI7dD5oVHQmJihWUi09dCxIUj1lKX1mdW5jdGlvbiBHVGUoKXtmb3IodmFyIGUsdD1CUixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpCUj1yKTtvVD1lLHBLKG4pfWZ1bmN0aW9uIHBLKGUpe2lmKCFoMil7aVQmJihpVD1jbGVhclRpbWVvdXQoaVQpKTt2YXIgdD1lLXl5O3Q+MjQ/KGU8MS8wJiYoaVQ9c2V0VGltZW91dCh1VHQsZS1hVC5ub3coKS1WUikpLG5UJiYoblQ9Y2xlYXJJbnRlcnZhbChuVCkpKTooblR8fChIUj1hVC5ub3coKSxuVD1zZXRJbnRlcnZhbChxVGUsaFR0KSksaDI9MSxmVHQodVR0KSl9fXZhciBoMixpVCxuVCxoVHQsQlIsb1QsSFIseXksVlIsYVQsZlR0LGRLPU0oKCk9PntoMj0wLGlUPTAsblQ9MCxoVHQ9MWUzLEhSPTAseXk9MCxWUj0wLGFUPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGZUdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtzVC5wcm90b3R5cGU9VVIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzVCxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/ZjIoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJm9UIT09dGhpcyYmKG9UP29ULl9uZXh0PXRoaXM6QlI9dGhpcyxvVD10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLHBLKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHBLKCkpfX19KTtmdW5jdGlvbiBxUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIGRUdD1NKCgpPT57ZEsoKX0pO3ZhciBtSz1NKCgpPT57ZEsoKTtkVHQoKX0pO2Z1bmN0aW9uIHNnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47alRlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpXVGUsdHdlZW46WVRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmdUdH0pfWZ1bmN0aW9uIGNUKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPmdUdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIHFhKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPkdSKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFFpKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24galRlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVVSKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1nSyxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PWdLKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09R1IpcmV0dXJuIHFSKGEpO3Auc3RhdGU9PT1tVHQ/KHAuc3RhdGU9bFQscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1sVCxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHFSKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PUdSJiYoci5zdGF0ZT1tVHQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1XUixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09V1Ipe2ZvcihyLnN0YXRlPUdSLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVlSLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVlSJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9bFQsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFdUZSxZVGUsZ1R0LGdLLFdSLEdSLG1UdCxZUixsVCxUcz1NKCgpPT57RiQoKTttSygpO1dUZT1XNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxZVGU9W10sZ1R0PTAsZ0s9MSxXUj0yLEdSPTMsbVR0PTQsWVI9NSxsVD02fSk7ZnVuY3Rpb24gcDIoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+V1ImJm4uc3RhdGU8WVIsbi5zdGF0ZT1sVCxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBfSz1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIF9UdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cDIodGhpcyxlKX0pfXZhciB5VHQ9TSgoKT0+e19LKCl9KTtmdW5jdGlvbiBYVGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXFhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiAkVGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIHZUdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVFpKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP1hUZTokVGUpKHIsZSx0KSl9ZnVuY3Rpb24gZDIoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1xYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFFpKGksbikudmFsdWVbdF19fXZhciB1VD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGpSKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9VYTp0IGluc3RhbmNlb2YgU3U/Z3k6KHI9U3UodCkpPyh0PXIsZ3kpOnRUKShlLHQpfXZhciB5Sz1NKCgpPT57TlIoKTtyVCgpfSk7ZnVuY3Rpb24gS1RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBaVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBKVGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gUVRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiB0Q2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBlQ2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIHhUdChlLHQpe3ZhciByPVZwKGUpLG49cj09PSJ0cmFuc2Zvcm0iP2ZLOmpSO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP2VDZTp0Q2UpKHIsbixkMih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9aVGU6S1RlKShyKTooci5sb2NhbD9RVGU6SlRlKShyLG4sdCkpfXZhciBiVHQ9TSgoKT0+e3JUKCk7RXMoKTt1VCgpO3lLKCl9KTtmdW5jdGlvbiByQ2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIG5DZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIGlDZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJm5DZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gb0NlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmckNlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB3VHQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPVZwKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/aUNlOm9DZSkobix0KSl9dmFyIFNUdD1NKCgpPT57RXMoKX0pO2Z1bmN0aW9uIGFDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBzQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gTVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/YUNlOnNDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIEVUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGxDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBjQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gVFR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/bENlOmNDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIENUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIHVDZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtxYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gQVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh1Q2UodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZWFzZX12YXIgUFR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gSVR0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1qNShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgdWEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBMVHQ9TSgoKT0+e0VzKCk7R3AoKX0pO2Z1bmN0aW9uIGtUdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgdWEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBSVHQ9TSgoKT0+e0dwKCl9KTtmdW5jdGlvbiBoQ2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBmQ2UoZSx0LHIpe3ZhciBuLGksbz1oQ2UodCk/Y1Q6cWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gTlR0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goZkNlKHIsZSx0KSl9dmFyIERUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIHBDZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gT1R0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLHBDZSh0aGlzLl9pZCkpfXZhciB6VHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEZUdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsc2coY1tmXSx0LHIsZixjLFFpKHUscikpKTtyZXR1cm4gbmV3IHVhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBCVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gSFR0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9UWkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZzZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IHVhKG8sYSx0LHIpfXZhciBWVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gVVR0KCl7cmV0dXJuIG5ldyBkQ2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBkQ2UscVR0PU0oKCk9PntFcygpO2RDZT1VcC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBtQ2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLGFnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gR1R0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGdDZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIF9DZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxhZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiB5Q2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1xYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9R1R0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gV1R0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9oSzpqUjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxtQ2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsR1R0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxfQ2UoZSxuLGQyKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goeUNlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxnQ2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBZVHQ9TSgoKT0+e3JUKCk7RXMoKTtUcygpO3VUKCk7eUsoKX0pO2Z1bmN0aW9uIHZDZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24geENlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZ2Q2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24galR0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLHhDZShlLHQscj09bnVsbD8iIjpyKSl9dmFyIFhUdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gd0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uICRUdChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/d0NlKGQyKHRoaXMsInRleHQiLGUpKTpiQ2UoZT09bnVsbD8iIjplKyIiKSl9dmFyIEtUdD1NKCgpPT57dVQoKX0pO2Z1bmN0aW9uIFNDZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1lLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24gTUNlKGUpe3ZhciB0LHI7ZnVuY3Rpb24gbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKHQ9KHI9aSkmJlNDZShpKSksdH1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIFpUdChlKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQsTUNlKGUpKX12YXIgSlR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBRVHQoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9WFIoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PVFpKGwsdCk7c2cobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyB1YShuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgdEN0PU0oKCk9PntHcCgpO1RzKCl9KTtmdW5jdGlvbiBlQ3QoKXt2YXIgZSx0LHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7LS1pPT09MCYmbygpfX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9cWEodGhpcyxuKSx1PWMub247dSE9PWUmJih0PShlPXUpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gocyksdC5fLmludGVycnVwdC5wdXNoKHMpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX12YXIgckN0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gdWEoZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIHZLKGUpe3JldHVybiBVcCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gWFIoKXtyZXR1cm4rK0VDZX12YXIgRUNlLG0yLEdwPU0oKCk9PntFcygpO2JUdCgpO1NUdCgpO0VUdCgpO0NUdCgpO1BUdCgpO0xUdCgpO1JUdCgpO0RUdCgpO3pUdCgpO0JUdCgpO1ZUdCgpO3FUdCgpO1lUdCgpO1hUdCgpO0tUdCgpO0pUdCgpO3RDdCgpO3VUKCk7ckN0KCk7RUNlPTA7bTI9VXAucHJvdG90eXBlO3VhLnByb3RvdHlwZT12Sy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVhLHNlbGVjdDpGVHQsc2VsZWN0QWxsOkhUdCxmaWx0ZXI6SVR0LG1lcmdlOmtUdCxzZWxlY3Rpb246VVR0LHRyYW5zaXRpb246UVR0LGNhbGw6bTIuY2FsbCxub2RlczptMi5ub2Rlcyxub2RlOm0yLm5vZGUsc2l6ZTptMi5zaXplLGVtcHR5Om0yLmVtcHR5LGVhY2g6bTIuZWFjaCxvbjpOVHQsYXR0cjp4VHQsYXR0clR3ZWVuOndUdCxzdHlsZTpXVHQsc3R5bGVUd2VlbjpqVHQsdGV4dDokVHQsdGV4dFR3ZWVuOlpUdCxyZW1vdmU6T1R0LHR3ZWVuOnZUdCxkZWxheTpNVHQsZHVyYXRpb246VFR0LGVhc2U6QVR0LGVuZDplQ3R9fSk7ZnVuY3Rpb24gVENlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIHhLLnRpbWU9ZjIoKSx4SztyZXR1cm4gcn1mdW5jdGlvbiBuQ3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgdWE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1YUigpLChyPXhLKS50aW1lPWYyKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmc2cobCxlLHQsYyxhLHJ8fFRDZShsLHQpKTtyZXR1cm4gbmV3IHVhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciB4SyxpQ3Q9TSgoKT0+e0dwKCk7VHMoKTtJXygpO21LKCk7eEs9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBvQ3Q9TSgoKT0+e0VzKCk7eVR0KCk7aUN0KCk7VXAucHJvdG90eXBlLmludGVycnVwdD1fVHQ7VXAucHJvdG90eXBlLnRyYW5zaXRpb249bkN0fSk7dmFyIGFDdD1NKCgpPT57R3AoKTtUcygpfSk7dmFyIHNDdD1NKCgpPT57b0N0KCk7R3AoKTthQ3QoKTtfSygpfSk7ZnVuY3Rpb24gYksoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBsQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGNDdChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfXZhciB1Q3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdLKCl7d3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaFQoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBoQ3Q9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBmVChlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBJQ2UoKXtyZXR1cm4hd3IuYnV0dG9ufWZ1bmN0aW9uIExDZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBNSyhlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIEVLKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gbUN0KGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gZ0N0KCl7cmV0dXJuIFRLKCRSKX1mdW5jdGlvbiBfQ3QoKXtyZXR1cm4gVEsoS1IpfWZ1bmN0aW9uIHlDdCgpe3JldHVybiBUSyhDQ2UpfWZ1bmN0aW9uIFRLKGUpe3ZhciB0PUxDZSxyPUlDZSxuPVc1KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxpPTYsbztmdW5jdGlvbiBhKGYpe3ZhciBwPWYucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtmVCgib3ZlcmxheSIpXSk7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KS5tZXJnZShwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9TUsodGhpcykuZXh0ZW50O3FwKHRoaXMpLmF0dHIoIngiLGdbMF1bMF0pLmF0dHIoInkiLGdbMF1bMV0pLmF0dHIoIndpZHRoIixnWzFdWzBdLWdbMF1bMF0pLmF0dHIoImhlaWdodCIsZ1sxXVsxXS1nWzBdWzFdKX0pLGYuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbZlQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsV3Auc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGQ9Zi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlfSk7ZC5leGl0KCkucmVtb3ZlKCksZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihnKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitnLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGcpe3JldHVybiBXcFtnLnR5cGVdfSksZi5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9YS5tb3ZlPWZ1bmN0aW9uKGYscCl7Zi5zZWxlY3Rpb24/Zi5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxnPWQuX19icnVzaCxfPWwoZCxhcmd1bWVudHMpLHk9Zy5zZWxlY3Rpb24seD1lLmlucHV0KHR5cGVvZiBwPT0iZnVuY3Rpb24iP3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOnAsZy5leHRlbnQpLGI9X3koeSx4KTtmdW5jdGlvbiBTKEMpe2cuc2VsZWN0aW9uPUM9PT0xJiZFSyh4KT9udWxsOmIoQykscy5jYWxsKGQpLF8uYnJ1c2goKX1yZXR1cm4geSYmeD9TOlMoMSl9KTpmLmVhY2goZnVuY3Rpb24oKXt2YXIgZD10aGlzLGc9YXJndW1lbnRzLF89ZC5fX2JydXNoLHk9ZS5pbnB1dCh0eXBlb2YgcD09ImZ1bmN0aW9uIj9wLmFwcGx5KGQsZyk6cCxfLmV4dGVudCkseD1sKGQsZykuYmVmb3Jlc3RhcnQoKTtwMihkKSxfLnNlbGVjdGlvbj15PT1udWxsfHxFSyh5KT9udWxsOnkscy5jYWxsKGQpLHguc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9O2Z1bmN0aW9uIHMoKXt2YXIgZj1xcCh0aGlzKSxwPU1LKHRoaXMpLnNlbGVjdGlvbjtwPyhmLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixwWzBdWzBdKS5hdHRyKCJ5IixwWzBdWzFdKS5hdHRyKCJ3aWR0aCIscFsxXVswXS1wWzBdWzBdKS5hdHRyKCJoZWlnaHQiLHBbMV1bMV0tcFswXVsxXSksZi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoLTFdPT09ImUiP3BbMV1bMF0taS8yOnBbMF1bMF0taS8yfSkuYXR0cigieSIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVswXT09PSJzIj9wWzFdWzFdLWkvMjpwWzBdWzFdLWkvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbihkKXtyZXR1cm4gZC50eXBlPT09Im4ifHxkLnR5cGU9PT0icyI/cFsxXVswXS1wWzBdWzBdK2k6aX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZT09PSJlInx8ZC50eXBlPT09InciP3BbMV1bMV0tcFswXVsxXStpOml9KSk6Zi5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwoZixwKXtyZXR1cm4gZi5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKGYscCl9ZnVuY3Rpb24gYyhmLHApe3RoaXMudGhhdD1mLHRoaXMuYXJncz1wLHRoaXMuc3RhdGU9Zi5fX2JydXNoLHRoaXMuYWN0aXZlPTB9Yy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmKXskJChuZXcgY0N0KGEsZixlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG4uYXBwbHksbixbZix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiB1KCl7aWYod3IudG91Y2hlcyl7aWYod3IuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHdyLnRvdWNoZXMubGVuZ3RoKXJldHVybiBoVCgpfWVsc2UgaWYobylyZXR1cm47aWYoIXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgZj10aGlzLHA9d3IudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsZD0od3IubWV0YUtleT9wPSJvdmVybGF5IjpwKT09PSJzZWxlY3Rpb24iP2ZDdDp3ci5hbHRLZXk/XzI6ZzIsZz1lPT09S1I/bnVsbDpBQ2VbcF0sXz1lPT09JFI/bnVsbDpQQ2VbcF0seT1NSyhmKSx4PXkuZXh0ZW50LGI9eS5zZWxlY3Rpb24sUz14WzBdWzBdLEMsUCxrPXhbMF1bMV0sTyxELEI9eFsxXVswXSxJLEwsUj14WzFdWzFdLEYseixVLFcsWixydD1nJiZfJiZ3ci5zaGlmdEtleSxvdCxzdCxTdD1QUihmKSxidD1TdCxNdD1sKGYsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO3A9PT0ib3ZlcmxheSI/eS5zZWxlY3Rpb249Yj1bW0M9ZT09PUtSP1M6U3RbMF0sTz1lPT09JFI/azpTdFsxXV0sW0k9ZT09PUtSP0I6QyxGPWU9PT0kUj9SOk9dXTooQz1iWzBdWzBdLE89YlswXVsxXSxJPWJbMV1bMF0sRj1iWzFdWzFdKSxQPUMsRD1PLEw9SSx6PUY7dmFyIGx0PXFwKGYpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEt0PWx0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFdwW3BdKTtpZih3ci50b3VjaGVzKWx0Lm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGN0LCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGV0LCEwKTtlbHNle3ZhciBfdD1xcCh3ci52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZHQsITApLm9uKCJrZXl1cC5icnVzaCIscSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsY3QsITApLm9uKCJtb3VzZXVwLmJydXNoIixldCwhMCk7WiQod3Iudmlldyl9d0soKSxwMihmKSxzLmNhbGwoZiksTXQuc3RhcnQoKTtmdW5jdGlvbiBjdCgpe3ZhciBwdD1QUihmKTtydCYmIW90JiYhc3QmJihNYXRoLmFicyhwdFswXS1idFswXSk+TWF0aC5hYnMocHRbMV0tYnRbMV0pP3N0PSEwOm90PSEwKSxidD1wdCxaPSEwLGhUKCksWCgpfWZ1bmN0aW9uIFgoKXt2YXIgcHQ7c3dpdGNoKFU9YnRbMF0tU3RbMF0sVz1idFsxXS1TdFsxXSxkKXtjYXNlIFNLOmNhc2UgZkN0OntnJiYoVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1JLFUpKSxQPUMrVSxMPUkrVSksXyYmKFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItRixXKSksRD1PK1csej1GK1cpO2JyZWFrfWNhc2UgZzI6e2c8MD8oVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1DLFUpKSxQPUMrVSxMPUkpOmc+MCYmKFU9TWF0aC5tYXgoUy1JLE1hdGgubWluKEItSSxVKSksUD1DLEw9SStVKSxfPDA/KFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItTyxXKSksRD1PK1csej1GKTpfPjAmJihXPU1hdGgubWF4KGstRixNYXRoLm1pbihSLUYsVykpLEQ9Tyx6PUYrVyk7YnJlYWt9Y2FzZSBfMjp7ZyYmKFA9TWF0aC5tYXgoUyxNYXRoLm1pbihCLEMtVSpnKSksTD1NYXRoLm1heChTLE1hdGgubWluKEIsSStVKmcpKSksXyYmKEQ9TWF0aC5tYXgoayxNYXRoLm1pbihSLE8tVypfKSksej1NYXRoLm1heChrLE1hdGgubWluKFIsRitXKl8pKSk7YnJlYWt9fUw8UCYmKGcqPS0xLHB0PUMsQz1JLEk9cHQscHQ9UCxQPUwsTD1wdCxwIGluIHBDdCYmS3QuYXR0cigiY3Vyc29yIixXcFtwPXBDdFtwXV0pKSx6PEQmJihfKj0tMSxwdD1PLE89RixGPXB0LHB0PUQsRD16LHo9cHQscCBpbiBkQ3QmJkt0LmF0dHIoImN1cnNvciIsV3BbcD1kQ3RbcF1dKSkseS5zZWxlY3Rpb24mJihiPXkuc2VsZWN0aW9uKSxvdCYmKFA9YlswXVswXSxMPWJbMV1bMF0pLHN0JiYoRD1iWzBdWzFdLHo9YlsxXVsxXSksKGJbMF1bMF0hPT1QfHxiWzBdWzFdIT09RHx8YlsxXVswXSE9PUx8fGJbMV1bMV0hPT16KSYmKHkuc2VsZWN0aW9uPVtbUCxEXSxbTCx6XV0scy5jYWxsKGYpLE10LmJydXNoKCkpfWZ1bmN0aW9uIGV0KCl7aWYod0soKSx3ci50b3VjaGVzKXtpZih3ci50b3VjaGVzLmxlbmd0aClyZXR1cm47byYmY2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbH0sNTAwKSxsdC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIEokKHdyLnZpZXcsWiksX3Qub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2x0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksS3QuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KSx5LnNlbGVjdGlvbiYmKGI9eS5zZWxlY3Rpb24pLEVLKGIpJiYoeS5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZikpLE10LmVuZCgpfWZ1bmN0aW9uIGR0KCl7c3dpdGNoKHdyLmtleUNvZGUpe2Nhc2UgMTY6e3J0PWcmJl87YnJlYWt9Y2FzZSAxODp7ZD09PWcyJiYoZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMixYKCkpO2JyZWFrfWNhc2UgMzI6eyhkPT09ZzJ8fGQ9PT1fMikmJihnPDA/ST1MLVU6Zz4wJiYoQz1QLVUpLF88MD9GPXotVzpfPjAmJihPPUQtVyksZD1TSyxLdC5hdHRyKCJjdXJzb3IiLFdwLnNlbGVjdGlvbiksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfWZ1bmN0aW9uIHEoKXtzd2l0Y2god3Iua2V5Q29kZSl7Y2FzZSAxNjp7cnQmJihvdD1zdD1ydD0hMSxYKCkpO2JyZWFrfWNhc2UgMTg6e2Q9PT1fMiYmKGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMixYKCkpO2JyZWFrfWNhc2UgMzI6e2Q9PT1TSyYmKHdyLmFsdEtleT8oZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMik6KGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMiksS3QuYXR0cigiY3Vyc29yIixXcFtwXSksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfX1mdW5jdGlvbiBoKCl7dmFyIGY9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBmLmV4dGVudD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmLmRpbT1lLGZ9cmV0dXJuIGEuZXh0ZW50PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoW1srZlswXVswXSwrZlswXVsxXV0sWytmWzFdWzBdLCtmWzFdWzFdXV0pLGEpOnR9LGEuZmlsdGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoISFmKSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2YsYSk6aX0sYS5vbj1mdW5jdGlvbigpe3ZhciBmPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBmPT09bj9hOmZ9LGF9dmFyIGZDdCxTSyxnMixfMiwkUixLUixDQ2UsV3AscEN0LGRDdCxBQ2UsUENlLHZDdD1NKCgpPT57RiQoKTtQNXQoKTtyVCgpO0VzKCk7c0N0KCk7bEN0KCk7dUN0KCk7aEN0KCk7ZkN0PXtuYW1lOiJkcmFnIn0sU0s9e25hbWU6InNwYWNlIn0sZzI9e25hbWU6ImhhbmRsZSJ9LF8yPXtuYW1lOiJjZW50ZXIifSwkUj17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKGZUKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlJiZbW2VbMF0sdFswXVsxXV0sW2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sS1I9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChmVCksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LENDZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoZlQpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxXcD17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0scEN0PXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxkQ3Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LEFDZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxQQ2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX19KTt2YXIgeEN0PU0oKCk9Pnt2Q3QoKX0pO2Z1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciB2eT1NKCgpPT57fSk7ZnVuY3Rpb24gQ0soZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9a0NlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24ga0NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBsZyhlKHQpLHIpfX12YXIgQUs9TSgoKT0+e3Z5KCl9KTt2YXIgYkN0LFJDZSxOQ2UsUEs9TSgoKT0+e3Z5KCk7QUsoKTtiQ3Q9Q0sobGcpLFJDZT1iQ3QucmlnaHQsTkNlPWJDdC5sZWZ0fSk7dmFyIElLPU0oKCk9Pnt9KTt2YXIgd0N0PU0oKCk9PntJSygpfSk7dmFyIFNDdD1NKCgpPT57fSk7dmFyIHkyPU0oKCk9Pnt9KTt2YXIgTEs9TSgoKT0+e3kyKCl9KTt2YXIga0s9TSgoKT0+e0xLKCl9KTt2YXIgUks9TSgoKT0+e30pO3ZhciBNQ3QsT0NlLHpDZSxOSz1NKCgpPT57TUN0PUFycmF5LnByb3RvdHlwZSxPQ2U9TUN0LnNsaWNlLHpDZT1NQ3QubWFwfSk7dmFyIEVDdD1NKCgpPT57fSk7dmFyIFRDdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFQoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIERLPU0oKCk9Pnt9KTt2YXIgU2xuLE1sbixFbG4sT0s9TSgoKT0+e1Nsbj1NYXRoLnNxcnQoNTApLE1sbj1NYXRoLnNxcnQoMTApLEVsbj1NYXRoLnNxcnQoMil9KTt2YXIgeks9TSgoKT0+e30pO3ZhciBDQ3Q9TSgoKT0+e05LKCk7UEsoKTtFQ3QoKTtSSygpO1RDdCgpO0RLKCk7T0soKTt6SygpfSk7dmFyIEpSPU0oKCk9Pnt5MigpfSk7dmFyIFBDdD1NKCgpPT57TksoKTt2eSgpO3kyKCk7SlIoKX0pO3ZhciBJQ3Q9TSgoKT0+e2tLKCl9KTt2YXIgTEN0PU0oKCk9Pnt9KTt2YXIga0N0PU0oKCk9Pnt5MigpfSk7dmFyIFJDdD1NKCgpPT57dnkoKTt5MigpO0pSKCl9KTt2YXIgTkN0PU0oKCk9Pnt9KTt2YXIgRks9TSgoKT0+e30pO3ZhciBEQ3Q9TSgoKT0+e30pO3ZhciBPQ3Q9TSgoKT0+e3Z5KCl9KTt2YXIgekN0PU0oKCk9Pnt9KTt2YXIgRkN0PU0oKCk9Pnt9KTt2YXIgQks9TSgoKT0+e0ZLKCl9KTt2YXIgQkN0PU0oKCk9PntCSygpfSk7dmFyIEhDdD1NKCgpPT57UEsoKTt2eSgpO0FLKCk7d0N0KCk7U0N0KCk7a0soKTtSSygpO0NDdCgpO1BDdCgpO0lDdCgpO3pLKCk7TEN0KCk7a0N0KCk7UkN0KCk7TkN0KCk7RksoKTtJSygpO0RDdCgpO0pSKCk7REsoKTtPQ3QoKTt6Q3QoKTtGQ3QoKTtPSygpO0JLKCk7TEsoKTtCQ3QoKX0pO3ZhciBISyxWSyxWQ3QsZFQsVUsscUssR0s9TSgoKT0+e0hLPU1hdGguY29zLFZLPU1hdGguc2luLFZDdD1NYXRoLlBJLGRUPVZDdC8yLFVLPVZDdCoyLHFLPU1hdGgubWF4fSk7ZnVuY3Rpb24gV0NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gVUN0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1wVChhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChwVChhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9cUsoMCxVSy1lKmEpL3AsXz1wP2U6VUsvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cUsoMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPVdDZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgcUN0PU0oKCk9PntIQ3QoKTtHSygpfSk7dmFyIEdDdCxXQ3Q9TSgoKT0+e0dDdD1BcnJheS5wcm90b3R5cGUuc2xpY2V9KTtmdW5jdGlvbiBRUihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFlDdD1NKCgpPT57fSk7ZnVuY3Rpb24gaksoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBqQ3QoKXtyZXR1cm4gbmV3IGpLfXZhciBXSyxZSyx4eSxZQ2UsWEssWEN0PU0oKCk9PntXSz1NYXRoLlBJLFlLPTIqV0sseHk9MWUtNixZQ2U9WUsteHk7aksucHJvdG90eXBlPWpDdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpLLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD54eSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnh5KXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFdLLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnh5JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnh5fHxNYXRoLmFicyh0aGlzLl95MS1jKT54eSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJVlLK1lLKSxoPllDZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD54eSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49V0spKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtYSz1qQ3R9KTt2YXIgJEN0PU0oKCk9PntYQ3QoKX0pO2Z1bmN0aW9uIGpDZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gWENlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiAkQ2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIEtDZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIFpDZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBLQ3QoKXt2YXIgZT1qQ2UsdD1YQ2Uscj0kQ2Usbj1LQ2UsaT1aQ2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUdDdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLWRULHA9aS5hcHBseSh0aGlzLGwpLWRULGQ9aCpISyhmKSxnPWgqVksoZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLWRULHg9aS5hcHBseSh0aGlzLGwpLWRUO2lmKG98fChvPXM9WEsoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKkhLKHkpLF8qVksoeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpRUigrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9dmFyIFpDdD1NKCgpPT57V0N0KCk7WUN0KCk7R0soKTskQ3QoKX0pO3ZhciBKQ3Q9TSgoKT0+e3FDdCgpO1pDdCgpfSk7ZnVuY3Rpb24gdE4oKXt9ZnVuY3Rpb24gUUN0KGUsdCl7dmFyIHI9bmV3IHROO2lmKGUgaW5zdGFuY2VvZiB0TillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgbGwsYnksZU49TSgoKT0+e2xsPSIkIjt0Ti5wcm90b3R5cGU9UUN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dE4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBsbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tsbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbbGwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bGwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09bGwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWxsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtieT1RQ3R9KTtmdW5jdGlvbiByQXQoKXt2YXIgZT1bXSx0PVtdLHIsbixpO2Z1bmN0aW9uIG8ocyxsLGMsdSl7aWYobD49ZS5sZW5ndGgpcmV0dXJuIHIhPW51bGwmJnMuc29ydChyKSxuIT1udWxsP24ocyk6cztmb3IodmFyIGg9LTEsZj1zLmxlbmd0aCxwPWVbbCsrXSxkLGcsXz1ieSgpLHkseD1jKCk7KytoPGY7KSh5PV8uZ2V0KGQ9cChnPXNbaF0pKyIiKSk/eS5wdXNoKGcpOl8uc2V0KGQsW2ddKTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGIsUyl7dSh4LFMsbyhiLGwsYyx1KSl9KSx4fWZ1bmN0aW9uIGEocyxsKXtpZigrK2w+ZS5sZW5ndGgpcmV0dXJuIHM7dmFyIGMsdT10W2wtMV07cmV0dXJuIG4hPW51bGwmJmw+PWUubGVuZ3RoP2M9cy5lbnRyaWVzKCk6KGM9W10scy5lYWNoKGZ1bmN0aW9uKGgsZil7Yy5wdXNoKHtrZXk6Zix2YWx1ZXM6YShoLGwpfSl9KSksdSE9bnVsbD9jLnNvcnQoZnVuY3Rpb24oaCxmKXtyZXR1cm4gdShoLmtleSxmLmtleSl9KTpjfXJldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLEpDZSxRQ2UpfSxtYXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLHRBdCxlQXQpfSxlbnRyaWVzOmZ1bmN0aW9uKHMpe3JldHVybiBhKG8ocywwLHRBdCxlQXQpLDApfSxrZXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGUucHVzaChzKSxpfSxzb3J0S2V5czpmdW5jdGlvbihzKXtyZXR1cm4gdFtlLmxlbmd0aC0xXT1zLGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHI9cyxpfSxyb2xsdXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG49cyxpfX19ZnVuY3Rpb24gSkNlKCl7cmV0dXJue319ZnVuY3Rpb24gUUNlKGUsdCxyKXtlW3RdPXJ9ZnVuY3Rpb24gdEF0KCl7cmV0dXJuIGJ5KCl9ZnVuY3Rpb24gZUF0KGUsdCxyKXtlLnNldCh0LHIpfXZhciBuQXQ9TSgoKT0+e2VOKCl9KTtmdW5jdGlvbiByTigpe31mdW5jdGlvbiBpQXQoZSx0KXt2YXIgcj1uZXcgck47aWYoZSBpbnN0YW5jZW9mIHJOKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciB3eSxvQXQsYUF0PU0oKCk9PntlTigpO3d5PWJ5LnByb3RvdHlwZTtyTi5wcm90b3R5cGU9aUF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ck4saGFzOnd5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbbGwrZV09ZSx0aGlzfSxyZW1vdmU6d3kucmVtb3ZlLGNsZWFyOnd5LmNsZWFyLHZhbHVlczp3eS5rZXlzLHNpemU6d3kuc2l6ZSxlbXB0eTp3eS5lbXB0eSxlYWNoOnd5LmVhY2h9O29BdD1pQXR9KTtmdW5jdGlvbiBzQXQoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBsQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGNBdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIHVBdD1NKCgpPT57fSk7ZnVuY3Rpb24gaEF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBmQXQ9TSgoKT0+e30pO3ZhciBwQXQ9TSgoKT0+e25BdCgpO2FBdCgpO2VOKCk7bEF0KCk7dUF0KCk7ZkF0KCl9KTtmdW5jdGlvbiBZcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gY2coZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG5OPU0oKCk9Pnt9KTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB4MihlKXt2YXIgdDtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9dEFlLmV4ZWMoZSkpPyh0PXBhcnNlSW50KHRbMV0sMTYpLG5ldyB0byh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSkpOih0PWVBZS5leGVjKGUpKT9tQXQocGFyc2VJbnQodFsxXSwxNikpOih0PXJBZS5leGVjKGUpKT9uZXcgdG8odFsxXSx0WzJdLHRbM10sMSk6KHQ9bkFlLmV4ZWMoZSkpP25ldyB0byh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1pQWUuZXhlYyhlKSk/Z0F0KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PW9BZS5leGVjKGUpKT9nQXQodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9YUFlLmV4ZWMoZSkpP19BdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXNBZS5leGVjKGUpKT9fQXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpkQXQuaGFzT3duUHJvcGVydHkoZSk/bUF0KGRBdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IHRvKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gbUF0KGUpe3JldHVybiBuZXcgdG8oZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIGdBdChlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHRvKGUsdCxyLG4pfWZ1bmN0aW9uIGdUKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGZ8fChlPXgyKGUpKSxlPyhlPWUucmdiKCksbmV3IHRvKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB0b31mdW5jdGlvbiBLSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z1QoZSk6bmV3IHRvKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiB0byhlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gX0F0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgSmgoZSx0LHIsbil9ZnVuY3Rpb24gbEFlKGUpe2lmKGUgaW5zdGFuY2VvZiBKaClyZXR1cm4gbmV3IEpoKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIHRmfHwoZT14MihlKSksIWUpcmV0dXJuIG5ldyBKaDtpZihlIGluc3RhbmNlb2YgSmgpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSmgoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bEFlKGUpOm5ldyBKaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gSmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRLKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciB1ZyxTeSx2MixtVCxRaCx0QWUsZUFlLHJBZSxuQWUsaUFlLG9BZSxhQWUsc0FlLGRBdCxpTj1NKCgpPT57bk4oKTt1Zz0uNyxTeT0xL3VnLHYyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixtVD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixRaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsdEFlPS9eIyhbMC05YS1mXXszfSkkLyxlQWU9L14jKFswLTlhLWZdezZ9KSQvLHJBZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbdjIsdjIsdjJdKyJcXCkkIiksbkFlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tRaCxRaCxRaF0rIlxcKSQiKSxpQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2Mix2Mix2MixtVF0rIlxcKSQiKSxvQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tRaCxRaCxRaCxtVF0rIlxcKSQiKSxhQWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW21ULFFoLFFoXSsiXFwpJCIpLHNBZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW21ULFFoLFFoLG1UXSsiXFwpJCIpLGRBdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtZcCh0Zix4Mix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pO1lwKHRvLEtLLGNnKHRmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1N5Ok1hdGgucG93KFN5LGUpLG5ldyB0byh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91ZzpNYXRoLnBvdyh1ZyxlKSxuZXcgdG8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7WXAoSmgsWkssY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgdG8oJEsoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksJEsoZSxpLG4pLCRLKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpfSk7dmFyIG9OLGFOLEpLPU0oKCk9PntvTj1NYXRoLlBJLzE4MCxhTj0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIG5aKGUpe2lmKGUgaW5zdGFuY2VvZiBqcClyZXR1cm4gbmV3IGpwKGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhnKXt2YXIgdD1lLmgqb047cmV0dXJuIG5ldyBqcChlLmwsTWF0aC5jb3ModCkqZS5jLE1hdGguc2luKHQpKmUuYyxlLm9wYWNpdHkpfWUgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciByPXJaKGUuciksbj1yWihlLmcpLGk9clooZS5iKSxvPVFLKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkveUF0KSxhPVFLKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS92QXQpLHM9UUsoKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL3hBdCk7cmV0dXJuIG5ldyBqcCgxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLXMpLGUub3BhY2l0eSl9ZnVuY3Rpb24gbE4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP25aKGUpOm5ldyBqcChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24ganAoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFFLKGUpe3JldHVybiBlPmNBZT9NYXRoLnBvdyhlLDEvMyk6ZS93QXQrYkF0fWZ1bmN0aW9uIHRaKGUpe3JldHVybiBlPmIyP2UqZSplOndBdCooZS1iQXQpfWZ1bmN0aW9uIGVaKGUpe3JldHVybiAyNTUqKGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gclooZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gdUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBoZylyZXR1cm4gbmV3IGhnKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7ZSBpbnN0YW5jZW9mIGpwfHwoZT1uWihlKSk7dmFyIHQ9TWF0aC5hdGFuMihlLmIsZS5hKSphTjtyZXR1cm4gbmV3IGhnKHQ8MD90KzM2MDp0LE1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpLGUubCxlLm9wYWNpdHkpfWZ1bmN0aW9uIGlaKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT91QWUoZSk6bmV3IGhnKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoZyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHNOLHlBdCx2QXQseEF0LGJBdCxiMix3QXQsY0FlLFNBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7c049MTgseUF0PS45NTA0Nyx2QXQ9MSx4QXQ9MS4wODg4MyxiQXQ9NC8yOSxiMj02LzI5LHdBdD0zKmIyKmIyLGNBZT1iMipiMipiMjtZcChqcCxsTixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqcCh0aGlzLmwrc04qKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpwKHRoaXMubC1zTiooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIGU9dkF0KnRaKGUpLHQ9eUF0KnRaKHQpLHI9eEF0KnRaKHIpLG5ldyB0byhlWigzLjI0MDQ1NDIqdC0xLjUzNzEzODUqZS0uNDk4NTMxNCpyKSxlWigtLjk2OTI2Nip0KzEuODc2MDEwOCplKy4wNDE1NTYqciksZVooLjA1NTY0MzQqdC0uMjA0MDI1OSplKzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKTtZcChoZyxpWixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZyh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTiooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhnKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNOKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG5aKHRoaXMpLnJnYigpfX0pKX0pO2Z1bmN0aW9uIGhBZShlKXtpZihlIGluc3RhbmNlb2YgTXkpcmV0dXJuIG5ldyBNeShlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPShUQXQqbitNQXQqdC1FQXQqcikvKFRBdCtNQXQtRUF0KSxvPW4taSxhPShfVCooci1pKS1hWipvKS9jTixzPU1hdGguc3FydChhKmErbypvKS8oX1QqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSphTi0xMjA6TmFOO3JldHVybiBuZXcgTXkobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdU4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2hBZShlKTpuZXcgTXkoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIE15KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgQ0F0LG9aLGFaLGNOLF9ULE1BdCxFQXQsVEF0LEFBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7Q0F0PS0uMTQ4NjEsb1o9MS43ODI3NyxhWj0tLjI5MjI3LGNOPS0uOTA2NDksX1Q9MS45NzI5NCxNQXQ9X1QqY04sRUF0PV9UKm9aLFRBdD1vWiphWi1jTipDQXQ7WXAoTXksdU4sY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpvTix0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgdG8oMjU1Kih0K3IqKENBdCpuK29aKmkpKSwyNTUqKHQrciooYVoqbitjTippKSksMjU1Kih0K3IqKF9UKm4pKSx0aGlzLm9wYWNpdHkpfX0pKX0pO3ZhciBQQXQ9TSgoKT0+e2lOKCk7U0F0KCk7QUF0KCl9KTtmdW5jdGlvbiBMQXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGhOKHIpfWZ1bmN0aW9uIGhOKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIHBBZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGRBZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIElBdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09ZkFlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgZkFlLGtBdCxSQXQ9TSgoKT0+e2ZBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtoTi5wcm90b3R5cGU9TEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aE4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1wQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1kQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUlBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUlBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgaE4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O2tBdD1MQXR9KTt2YXIgTkF0PU0oKCk9PntSQXQoKX0pO2Z1bmN0aW9uIE9BdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBmTihyKX1mdW5jdGlvbiBmTihlKXt0aGlzLl89ZX1mdW5jdGlvbiBnQWUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBfQWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBEQXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPW1BZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIG1BZSxzWix6QXQ9TSgoKT0+e21BZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmTi5wcm90b3R5cGU9T0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zk4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1nQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1fQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPURBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPURBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgZk4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O3NaPU9BdH0pO3ZhciBGQXQ9TSgoKT0+e3pBdCgpfSk7dmFyIHBOLGxaLGNaPU0oKCk9PntwTj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbFo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnBOLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBkTihlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxsWi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6bFpbdF0sbG9jYWw6ZX06ZX12YXIgdVo9TSgoKT0+e2NaKCl9KTtmdW5jdGlvbiB5QWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1wTiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cE4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHZBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBtTihlKXt2YXIgdD1kTihlKTtyZXR1cm4odC5sb2NhbD92QWU6eUFlKSh0KX12YXIgaFo9TSgoKT0+e3VaKCk7Y1ooKX0pO2Z1bmN0aW9uIHhBZSgpe31mdW5jdGlvbiBnTihlKXtyZXR1cm4gZT09bnVsbD94QWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgZlo9TSgoKT0+e30pO2Z1bmN0aW9uIEJBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Z04oZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBIQXQ9TSgoKT0+e2VmKCk7ZlooKX0pO2Z1bmN0aW9uIGJBZSgpe3JldHVybltdfWZ1bmN0aW9uIFZBdChlKXtyZXR1cm4gZT09bnVsbD9iQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVUF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxQXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVZBdChlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgcGkobixpKX12YXIgR0F0PU0oKCk9PntlZigpO1VBdCgpfSk7ZnVuY3Rpb24gV0F0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBZQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGpBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9V0F0KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBYQXQ9TSgoKT0+e2VmKCk7WUF0KCl9KTtmdW5jdGlvbiBfTihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgcFo9TSgoKT0+e30pO2Z1bmN0aW9uICRBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoX04pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHlUKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBkWj1NKCgpPT57cFooKTtlZigpO3lULnByb3RvdHlwZT17Y29uc3RydWN0b3I6eVQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBLQXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBaQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHdBZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgeVQoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIFNBZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPUpBdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPUpBdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB5VChlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFFBdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/U0FlOndBZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUtBdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgcGkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBKQXQsdDR0PU0oKCk9PntlZigpO2RaKCk7WkF0KCk7SkF0PSIkIn0pO2Z1bmN0aW9uIGU0dCgpe3JldHVybiBuZXcgcGkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChfTiksdGhpcy5fcGFyZW50cyl9dmFyIHI0dD1NKCgpPT57cFooKTtlZigpfSk7ZnVuY3Rpb24gbjR0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBpNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIG80dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgcGkoYSx0aGlzLl9wYXJlbnRzKX12YXIgYTR0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gczR0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgbDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjNHQoZSl7ZXx8KGU9TUFlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IHBpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBNQWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHU0dD1NKCgpPT57ZWYoKX0pO2Z1bmN0aW9uIGg0dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgZjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwNHQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgZDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBtNHQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBnNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIF80dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIHk0dD1NKCgpPT57fSk7ZnVuY3Rpb24gdjR0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciB4NHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGI0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHc0dD1NKCgpPT57fSk7ZnVuY3Rpb24gRUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBUQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBDQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBBQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gUEFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBJQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gUzR0KGUsdCl7dmFyIHI9ZE4oZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP1RBZTpFQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9JQWU6UEFlOnIubG9jYWw/QUFlOkNBZSkocix0KSl9dmFyIE00dD1NKCgpPT57dVooKX0pO2Z1bmN0aW9uIHlOKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgbVo9TSgoKT0+e30pO2Z1bmN0aW9uIExBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBrQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBSQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gRTR0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9MQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UkFlOmtBZSkoZSx0LHI9PW51bGw/IiI6cikpOk5BZSh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBOQWUoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHx5TihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgVDR0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gREFlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBPQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIHpBZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBDNHQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9EQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ekFlOk9BZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIEE0dD1NKCgpPT57fSk7ZnVuY3Rpb24gUDR0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBnWihlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBJNHQoZSl9ZnVuY3Rpb24gSTR0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1QNHQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBMNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBrNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBGQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7TDR0KHRoaXMsZSl9fWZ1bmN0aW9uIEJBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtrNHQodGhpcyxlKX19ZnVuY3Rpb24gSEFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP0w0dDprNHQpKHRoaXMsZSl9fWZ1bmN0aW9uIFI0dChlLHQpe3ZhciByPVA0dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1nWih0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9IQWU6dD9GQWU6QkFlKShyLHQpKX12YXIgTjR0PU0oKCk9PntJNHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gVkFlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBVQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBxQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEQ0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9WQWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP3FBZTpVQWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgTzR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHQWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBXQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gWUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gejR0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0dBZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/WUFlOldBZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqQWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gQjR0KCl7cmV0dXJuIHRoaXMuZWFjaChqQWUpfXZhciBINHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhBZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFY0dCgpe3JldHVybiB0aGlzLmVhY2goWEFlKX12YXIgVTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxNHQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgRzR0PU0oKCk9PntoWigpfSk7ZnVuY3Rpb24gJEFlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVzR0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKSxuPXQ9PW51bGw/JEFlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6Z04odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBZNHQ9TSgoKT0+e2haKCk7ZlooKX0pO2Z1bmN0aW9uIEtBZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGo0dCgpe3JldHVybiB0aGlzLmVhY2goS0FlKX12YXIgWDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBaQWUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEpBZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gJDR0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP0pBZTpaQWUpfXZhciBLNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFo0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIEo0dD1NKCgpPT57fSk7ZnVuY3Rpb24gUUFlKGUsdCxyKXtyZXR1cm4gZT1lUHQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gZVB0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9c247c249bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7c249aX19fWZ1bmN0aW9uIHQ0ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gZTRlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIHI0ZShlLHQscil7dmFyIG49dFB0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UUFlOmVQdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiByUHQoZSx0LHIpe3ZhciBuPXQ0ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/cjRlOmU0ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiB2TihlLHQscixuKXt2YXIgaT1zbjtlLnNvdXJjZUV2ZW50PXNuLHNuPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtzbj1pfX12YXIgdFB0LHNuLFE0dCx4Tj1NKCgpPT57dFB0PXt9LHNuPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFE0dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBRNHR8fCh0UHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gblB0KGUsdCxyKXt2YXIgbj15TihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBuNGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gblB0KHRoaXMsZSx0KX19ZnVuY3Rpb24gaTRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5QdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBpUHQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9pNGU6bjRlKShlLHQpKX12YXIgb1B0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gcGkoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gbzRlKCl7cmV0dXJuIG5ldyBwaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLF9aKX12YXIgX1osZWY9TSgoKT0+e0hBdCgpO0dBdCgpO1hBdCgpO3Q0dCgpO2RaKCk7cjR0KCk7aTR0KCk7YTR0KCk7bDR0KCk7dTR0KCk7ZjR0KCk7ZDR0KCk7ZzR0KCk7eTR0KCk7eDR0KCk7dzR0KCk7TTR0KCk7VDR0KCk7QTR0KCk7TjR0KCk7TzR0KCk7RjR0KCk7SDR0KCk7VTR0KCk7RzR0KCk7WTR0KCk7WDR0KCk7SzR0KCk7SjR0KCk7eE4oKTtvUHQoKTtfWj1bbnVsbF07cGkucHJvdG90eXBlPW80ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBpLHNlbGVjdDpCQXQsc2VsZWN0QWxsOnFBdCxmaWx0ZXI6akF0LGRhdGE6UUF0LGVudGVyOiRBdCxleGl0OmU0dCxqb2luOm40dCxtZXJnZTpvNHQsb3JkZXI6czR0LHNvcnQ6YzR0LGNhbGw6aDR0LG5vZGVzOnA0dCxub2RlOm00dCxzaXplOl80dCxlbXB0eTp2NHQsZWFjaDpiNHQsYXR0cjpTNHQsc3R5bGU6RTR0LHByb3BlcnR5OkM0dCxjbGFzc2VkOlI0dCx0ZXh0OkQ0dCxodG1sOno0dCxyYWlzZTpCNHQsbG93ZXI6VjR0LGFwcGVuZDpxNHQsaW5zZXJ0Olc0dCxyZW1vdmU6ajR0LGNsb25lOiQ0dCxkYXR1bTpaNHQsb246clB0LGRpc3BhdGNoOmlQdH19KTtmdW5jdGlvbiBFeShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBwaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHBpKFtbZV1dLF9aKX12YXIgYVB0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gYk4oKXtmb3IodmFyIGU9c24sdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgeVo9TSgoKT0+e3hOKCl9KTtmdW5jdGlvbiB3TihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciB2Wj1NKCgpPT57fSk7ZnVuY3Rpb24geFooZSl7dmFyIHQ9Yk4oKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksd04oZSx0KX12YXIgc1B0PU0oKCk9Pnt5WigpO3ZaKCl9KTtmdW5jdGlvbiBiWihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9Yk4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3TihlLG8pO3JldHVybiBudWxsfXZhciBsUHQ9TSgoKT0+e3laKCk7dlooKX0pO3ZhciBTTj1NKCgpPT57c1B0KCk7YVB0KCk7bFB0KCk7eE4oKX0pO2Z1bmN0aW9uIE1OKCl7c24uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZmcoKXtzbi5wcmV2ZW50RGVmYXVsdCgpLHNuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB3Wj1NKCgpPT57U04oKX0pO2Z1bmN0aW9uIEVOKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9RXkoZSkub24oImRyYWdzdGFydC5kcmFnIixmZywhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixmZywhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gVE4oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUV5KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLGZnLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBTWj1NKCgpPT57U04oKTt3WigpfSk7ZnVuY3Rpb24gdlQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBjUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhUKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfXZhciB1UHQ9TSgoKT0+e3hULnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9fSk7ZnVuY3Rpb24gYTRlKCl7cmV0dXJuIXNuLmJ1dHRvbn1mdW5jdGlvbiBzNGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIGw0ZShlKXtyZXR1cm4gZT09bnVsbD97eDpzbi54LHk6c24ueX06ZX1mdW5jdGlvbiBjNGUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gaFB0KCl7dmFyIGU9YTRlLHQ9czRlLHI9bDRlLG49YzRlLGk9e30sbz1zWigic3RhcnQiLCJkcmFnIiwiZW5kIiksYT0wLHMsbCxjLHUsaD0wO2Z1bmN0aW9uIGYoUyl7Uy5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihuKS5vbigidG91Y2hzdGFydC5kcmFnIixfKS5vbigidG91Y2htb3ZlLmRyYWciLHkpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoISh1fHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKXt2YXIgUz1iKCJtb3VzZSIsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykseFosdGhpcyxhcmd1bWVudHMpOyFTfHwoRXkoc24udmlldykub24oIm1vdXNlbW92ZS5kcmFnIixkLCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxFTihzbi52aWV3KSxNTigpLGM9ITEscz1zbi5jbGllbnRYLGw9c24uY2xpZW50WSxTKCJzdGFydCIpKX19ZnVuY3Rpb24gZCgpe2lmKGZnKCksIWMpe3ZhciBTPXNuLmNsaWVudFgtcyxDPXNuLmNsaWVudFktbDtjPVMqUytDKkM+aH1pLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gZygpe0V5KHNuLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLFROKHNuLnZpZXcsYyksZmcoKSxpLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBfKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFM9c24uY2hhbmdlZFRvdWNoZXMsQz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQPVMubGVuZ3RoLGssTztmb3Ioaz0wO2s8UDsrK2spKE89YihTW2tdLmlkZW50aWZpZXIsQyxiWix0aGlzLGFyZ3VtZW50cykpJiYoTU4oKSxPKCJzdGFydCIpKX19ZnVuY3Rpb24geSgpe3ZhciBTPXNuLmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2ZvcihQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoZmcoKSxrKCJkcmFnIikpfWZ1bmN0aW9uIHgoKXt2YXIgUz1zbi5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IodSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sNTAwKSxQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoTU4oKSxrKCJlbmQiKSl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe3ZhciBEPVAoQyxTKSxCLEksTCxSPW8uY29weSgpO2lmKCEhdk4obmV3IHhUKGYsImJlZm9yZXN0YXJ0IixCLFMsYSxEWzBdLERbMV0sMCwwLFIpLGZ1bmN0aW9uKCl7cmV0dXJuKHNuLnN1YmplY3Q9Qj1yLmFwcGx5KGssTykpPT1udWxsPyExOihJPUIueC1EWzBdfHwwLEw9Qi55LURbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIEYoeil7dmFyIFU9RCxXO3N3aXRjaCh6KXtjYXNlInN0YXJ0IjppW1NdPUYsVz1hKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBpW1NdLC0tYTtjYXNlImRyYWciOkQ9UChDLFMpLFc9YTticmVha312TihuZXcgeFQoZix6LEIsUyxXLERbMF0rSSxEWzFdK0wsRFswXS1VWzBdLERbMV0tVVsxXSxSKSxSLmFwcGx5LFIsW3osayxPXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6ZX0sZi5jb250YWluZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTp0fSxmLnN1YmplY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTpyfSxmLnRvdWNoYWJsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6bn0sZi5vbj1mdW5jdGlvbigpe3ZhciBTPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBTPT09bz9mOlN9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0oUz0rUykqUyxmKTpNYXRoLnNxcnQoaCl9LGZ9dmFyIGZQdD1NKCgpPT57RkF0KCk7U04oKTtTWigpO3daKCk7Y1B0KCk7dVB0KCl9KTt2YXIgcFB0PU0oKCk9PntmUHQoKTtTWigpfSk7ZnVuY3Rpb24gbVB0KGUpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrZS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK3IrIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gdTRlKGUsdCl7dmFyIHI9bVB0KGUpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0KHIobiksaSxlKX19ZnVuY3Rpb24gaDRlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSBpbiBuKWkgaW4gdHx8ci5wdXNoKHRbaV09aSl9KSxyfWZ1bmN0aW9uIHcyKGUpe3ZhciB0PW5ldyBSZWdFeHAoJ1siJytlK2AKXHJdYCkscj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbihjLHUpe3ZhciBoLGYscD1pKGMsZnVuY3Rpb24oZCxnKXtpZihoKXJldHVybiBoKGQsZy0xKTtmPWQsaD11P3U0ZShkLHUpOm1QdChkKX0pO3JldHVybiBwLmNvbHVtbnM9Znx8W10scH1mdW5jdGlvbiBpKGMsdSl7dmFyIGg9W10sZj1jLmxlbmd0aCxwPTAsZD0wLGcsXz1mPD0wLHk9ITE7Yy5jaGFyQ29kZUF0KGYtMSk9PT1iVCYmLS1mLGMuY2hhckNvZGVBdChmLTEpPT09VFomJi0tZjtmdW5jdGlvbiB4KCl7aWYoXylyZXR1cm4gTVo7aWYoeSlyZXR1cm4geT0hMSxkUHQ7dmFyIFMsQz1wLFA7aWYoYy5jaGFyQ29kZUF0KEMpPT09RVope2Zvcig7cCsrPGYmJmMuY2hhckNvZGVBdChwKSE9PUVafHxjLmNoYXJDb2RlQXQoKytwKT09PUVaOyk7cmV0dXJuKFM9cCk+PWY/Xz0hMDooUD1jLmNoYXJDb2RlQXQocCsrKSk9PT1iVD95PSEwOlA9PT1UWiYmKHk9ITAsYy5jaGFyQ29kZUF0KHApPT09YlQmJisrcCksYy5zbGljZShDKzEsUy0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtwPGY7KXtpZigoUD1jLmNoYXJDb2RlQXQoUz1wKyspKT09PWJUKXk9ITA7ZWxzZSBpZihQPT09VFopeT0hMCxjLmNoYXJDb2RlQXQocCk9PT1iVCYmKytwO2Vsc2UgaWYoUCE9PXIpY29udGludWU7cmV0dXJuIGMuc2xpY2UoQyxTKX1yZXR1cm4gXz0hMCxjLnNsaWNlKEMsZil9Zm9yKDsoZz14KCkpIT09TVo7KXtmb3IodmFyIGI9W107ZyE9PWRQdCYmZyE9PU1aOyliLnB1c2goZyksZz14KCk7dSYmKGI9dShiLGQrKykpPT1udWxsfHxoLnB1c2goYil9cmV0dXJuIGh9ZnVuY3Rpb24gbyhjLHUpe3JldHVybiB1PT1udWxsJiYodT1oNGUoYykpLFt1Lm1hcChsKS5qb2luKGUpXS5jb25jYXQoYy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBsKGhbZl0pfSkuam9pbihlKX0pKS5qb2luKGAKYCl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5tYXAocykuam9pbihgCmApfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGMubWFwKGwpLmpvaW4oZSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09bnVsbD8iIjp0LnRlc3QoYys9IiIpPyciJytjLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Y31yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6byxmb3JtYXRSb3dzOmF9fXZhciBkUHQsTVosRVosYlQsVFosQ049TSgoKT0+e2RQdD17fSxNWj17fSxFWj0zNCxiVD0xMCxUWj0xM30pO3ZhciBBTixnUHQsX1B0LHlQdCx2UHQseFB0PU0oKCk9PntDTigpO0FOPXcyKCIsIiksZ1B0PUFOLnBhcnNlLF9QdD1BTi5wYXJzZVJvd3MseVB0PUFOLmZvcm1hdCx2UHQ9QU4uZm9ybWF0Um93c30pO3ZhciBQTixiUHQsd1B0LFNQdCxNUHQsRVB0PU0oKCk9PntDTigpO1BOPXcyKCIJIiksYlB0PVBOLnBhcnNlLHdQdD1QTi5wYXJzZVJvd3MsU1B0PVBOLmZvcm1hdCxNUHQ9UE4uZm9ybWF0Um93c30pO3ZhciBUUHQ9TSgoKT0+e0NOKCk7eFB0KCk7RVB0KCl9KTtmdW5jdGlvbiBDUHQoZSl7cmV0dXJuK2V9dmFyIEFQdD1NKCgpPT57fSk7ZnVuY3Rpb24gUFB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gSVB0KGUpe3JldHVybiBlKigyLWUpfWZ1bmN0aW9uIENaKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXZhciBMUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGtQdChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gUlB0KGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBBWihlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgTlB0PU0oKCk9Pnt9KTt2YXIgUFosRFB0LE9QdCxJWix6UHQ9TSgoKT0+e1BaPTMsRFB0PWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopLE9QdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gMS1NYXRoLnBvdygxLW4sdCl9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShQWiksSVo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdyhuLHQpOjItTWF0aC5wb3coMi1uLHQpKS8yfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopfSk7ZnVuY3Rpb24gSFB0KGUpe3JldHVybiAxLU1hdGguY29zKGUqQlB0KX1mdW5jdGlvbiBWUHQoZSl7cmV0dXJuIE1hdGguc2luKGUqQlB0KX1mdW5jdGlvbiBMWihlKXtyZXR1cm4oMS1NYXRoLmNvcyhGUHQqZSkpLzJ9dmFyIEZQdCxCUHQsVVB0PU0oKCk9PntGUHQ9TWF0aC5QSSxCUHQ9RlB0LzJ9KTtmdW5jdGlvbiBxUHQoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqZS0xMCl9ZnVuY3Rpb24gR1B0KGUpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmUpfWZ1bmN0aW9uIGtaKGUpe3JldHVybigoZSo9Mik8PTE/TWF0aC5wb3coMiwxMCplLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZSkpLzJ9dmFyIFdQdD1NKCgpPT57fSk7ZnVuY3Rpb24gWVB0KGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24galB0KGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIFJaKGUpe3JldHVybigoZSo9Mik8PTE/MS1NYXRoLnNxcnQoMS1lKmUpOk1hdGguc3FydCgxLShlLT0yKSplKSsxKS8yfXZhciBYUHQ9TSgoKT0+e30pO2Z1bmN0aW9uICRQdChlKXtyZXR1cm4gMS1TMigxLWUpfWZ1bmN0aW9uIFMyKGUpe3JldHVybihlPStlKTxOWj9JTiplKmU6ZTxwNGU/SU4qKGUtPWY0ZSkqZStkNGU6ZTxnNGU/SU4qKGUtPW00ZSkqZStfNGU6SU4qKGUtPXk0ZSkqZSt2NGV9ZnVuY3Rpb24gS1B0KGUpe3JldHVybigoZSo9Mik8PTE/MS1TMigxLWUpOlMyKGUtMSkrMSkvMn12YXIgTlosZjRlLHA0ZSxkNGUsbTRlLGc0ZSxfNGUseTRlLHY0ZSxJTixaUHQ9TSgoKT0+e05aPS4zNjM2MzYzNjM2MzYzNjM2NSxmNGU9Ni8xMSxwNGU9OC8xMSxkNGU9My80LG00ZT05LzExLGc0ZT0xMC8xMSxfNGU9MTUvMTYseTRlPTIxLzIyLHY0ZT02My82NCxJTj0xL05aL05afSk7dmFyIERaLEpQdCxRUHQsT1osdDZ0PU0oKCk9PntEWj0xLjcwMTU4LEpQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKSxRUHQ9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gci5vdmVyc2hvb3Q9ZSxyfShEWiksT1o9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTwxP24qbiooKHQrMSkqbi10KToobi09MikqbiooKHQrMSkqbit0KSsyKS8yfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKX0pO3ZhciBNMix6WixGWixlNnQsQloscjZ0LG42dD1NKCgpPT57TTI9MipNYXRoLlBJLHpaPTEsRlo9LjMsZTZ0PWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiB0Kk1hdGgucG93KDIsMTAqLS1vKSpNYXRoLnNpbigobi1vKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEJaPWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG89K28pKSpNYXRoLnNpbigobytuKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLHI2dD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1NMik7ZnVuY3Rpb24gaShvKXtyZXR1cm4oKG89byoyLTEpPDA/dCpNYXRoLnBvdygyLDEwKm8pKk1hdGguc2luKChuLW8pL3IpOjItdCpNYXRoLnBvdygyLC0xMCpvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopfSk7dmFyIGk2dD1NKCgpPT57QVB0KCk7TFB0KCk7TlB0KCk7elB0KCk7VVB0KCk7V1B0KCk7WFB0KCk7WlB0KCk7dDZ0KCk7bjZ0KCl9KTtmdW5jdGlvbiBvNnQoZSx0KXt2YXIgcjtlPT1udWxsJiYoZT0wKSx0PT1udWxsJiYodD0wKTtmdW5jdGlvbiBuKCl7dmFyIGksbz1yLmxlbmd0aCxhLHM9MCxsPTA7Zm9yKGk9MDtpPG87KytpKWE9cltpXSxzKz1hLngsbCs9YS55O2ZvcihzPXMvby1lLGw9bC9vLXQsaT0wO2k8bzsrK2kpYT1yW2ldLGEueC09cyxhLnktPWx9cmV0dXJuIG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihpKXtyPWl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0raSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2ksbik6dH0sbn12YXIgYTZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6bihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFR5PU0oKCk9Pnt9KTtmdW5jdGlvbiBNdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fXZhciBMTj1NKCgpPT57fSk7ZnVuY3Rpb24gczZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gbDZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gbDZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIGM2dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilsNnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIHU2dD1NKCgpPT57fSk7ZnVuY3Rpb24gaDZ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBmNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHA2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBkNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG02dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgZzZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIga049TSgoKT0+e30pO2Z1bmN0aW9uIF82dChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBTbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IFNvKHBbM10sXyx5LGwsYyksbmV3IFNvKHBbMl0sYSx5LF8sYyksbmV3IFNvKHBbMV0sXyxzLGwseSksbmV3IFNvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHk2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIHY2dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiB4NnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBiNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHc2dCgpe3JldHVybiB0aGlzLl9yb290fXZhciBTNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE02dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIEU2dD1NKCgpPT57fSk7ZnVuY3Rpb24gVDZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBTbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgU28oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgU28oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgU28oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgU28oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIEM2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIEE2dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgU28odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgU28obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgU28obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgU28obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgU28obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgUDZ0PU0oKCk9PntrTigpfSk7ZnVuY3Rpb24gSTZ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIEw2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIGs2dD1NKCgpPT57fSk7ZnVuY3Rpb24gUjZ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIE42dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIEQ2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQ3koZSx0LHIpe3ZhciBuPW5ldyBIWih0PT1udWxsP0k2dDp0LHI9PW51bGw/UjZ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIEhaKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gTzZ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgR2EsejZ0PU0oKCk9Pnt1NnQoKTtmNnQoKTtkNnQoKTtnNnQoKTt5NnQoKTtiNnQoKTtTNnQoKTtFNnQoKTtDNnQoKTtQNnQoKTtrNnQoKTtENnQoKTtHYT1DeS5wcm90b3R5cGU9SFoucHJvdG90eXBlO0dhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgSFoodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1PNnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1PNnQobikpO3JldHVybiBlfTtHYS5hZGQ9czZ0O0dhLmFkZEFsbD1jNnQ7R2EuY292ZXI9aDZ0O0dhLmRhdGE9cDZ0O0dhLmV4dGVudD1tNnQ7R2EuZmluZD1fNnQ7R2EucmVtb3ZlPXY2dDtHYS5yZW1vdmVBbGw9eDZ0O0dhLnJvb3Q9dzZ0O0dhLnNpemU9TTZ0O0dhLnZpc2l0PVQ2dDtHYS52aXNpdEFmdGVyPUE2dDtHYS54PUw2dDtHYS55PU42dH0pO3ZhciBWWj1NKCgpPT57ejZ0KCl9KTtmdW5jdGlvbiB4NGUoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIGI0ZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gRjZ0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9em4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUN5KHQseDRlLGI0ZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9TXUoKSxMKz1CKkIpLEk9PT0wJiYoST1NdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6em4oK2wpLHMoKSxvKTplfSxvfXZhciBCNnQ9TSgoKT0+e1R5KCk7TE4oKTtWWigpfSk7ZnVuY3Rpb24gUk4oKXt9ZnVuY3Rpb24gSDZ0KGUsdCl7dmFyIHI9bmV3IFJOO2lmKGUgaW5zdGFuY2VvZiBSTillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgY2wscGcsTk49TSgoKT0+e2NsPSIkIjtSTi5wcm90b3R5cGU9SDZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uk4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBjbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tjbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbY2wrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2wrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Y2wmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWNsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtwZz1INnR9KTt2YXIgVjZ0PU0oKCk9PntOTigpfSk7ZnVuY3Rpb24gRE4oKXt9ZnVuY3Rpb24gdzRlKGUsdCl7dmFyIHI9bmV3IEROO2lmKGUgaW5zdGFuY2VvZiBETillLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgQXksVTZ0PU0oKCk9PntOTigpO0F5PXBnLnByb3RvdHlwZTtETi5wcm90b3R5cGU9dzRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RE4saGFzOkF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbY2wrZV09ZSx0aGlzfSxyZW1vdmU6QXkucmVtb3ZlLGNsZWFyOkF5LmNsZWFyLHZhbHVlczpBeS5rZXlzLHNpemU6QXkuc2l6ZSxlbXB0eTpBeS5lbXB0eSxlYWNoOkF5LmVhY2h9fSk7dmFyIHE2dD1NKCgpPT57fSk7dmFyIEc2dD1NKCgpPT57fSk7dmFyIFc2dD1NKCgpPT57fSk7dmFyIFVaPU0oKCk9PntWNnQoKTtVNnQoKTtOTigpO3E2dCgpO0c2dCgpO1c2dCgpfSk7ZnVuY3Rpb24gUzRlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIFk2dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBqNnQoZSl7dmFyIHQ9UzRlLHI9dSxuLGk9em4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxNdSgpLGs9Qy55K0MudnktUy55LVMudnl8fE11KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1wZyhhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPVk2dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PVk2dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLGQoKSxoKTppfSxofXZhciBYNnQ9TSgoKT0+e1R5KCk7TE4oKTtVWigpfSk7ZnVuY3Rpb24gSzZ0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IE9OKHIpfWZ1bmN0aW9uIE9OKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEU0ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIFQ0ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uICQ2dChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09TTRlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgTTRlLHFaLFo2dD1NKCgpPT57TTRlPXt2YWx1ZTpmdW5jdGlvbigpe319O09OLnByb3RvdHlwZT1LNnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPTixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUU0ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPVQ0ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09JDZ0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09JDZ0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBPTihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07cVo9SzZ0fSk7dmFyIEo2dD1NKCgpPT57WjZ0KCl9KTtmdW5jdGlvbiBZWigpe3JldHVybiBQeXx8KGVJdChDNGUpLFB5PUVULm5vdygpK0JOKX1mdW5jdGlvbiBDNGUoKXtQeT0wfWZ1bmN0aW9uIEdaKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBITihlLHQscil7dmFyIG49bmV3IEdaO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gckl0KCl7WVooKSwrK0UyO2Zvcih2YXIgZT16Tix0O2U7KSh0PVB5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1FMn1mdW5jdGlvbiBRNnQoKXtQeT0oRk49RVQubm93KCkpK0JOLEUyPVNUPTA7dHJ5e3JJdCgpfWZpbmFsbHl7RTI9MCxQNGUoKSxQeT0wfX1mdW5jdGlvbiBBNGUoKXt2YXIgZT1FVC5ub3coKSx0PWUtRk47dD50SXQmJihCTi09dCxGTj1lKX1mdW5jdGlvbiBQNGUoKXtmb3IodmFyIGUsdD16TixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp6Tj1yKTtNVD1lLFdaKG4pfWZ1bmN0aW9uIFdaKGUpe2lmKCFFMil7U1QmJihTVD1jbGVhclRpbWVvdXQoU1QpKTt2YXIgdD1lLVB5O3Q+MjQ/KGU8MS8wJiYoU1Q9c2V0VGltZW91dChRNnQsZS1FVC5ub3coKS1CTikpLHdUJiYod1Q9Y2xlYXJJbnRlcnZhbCh3VCkpKTood1R8fChGTj1FVC5ub3coKSx3VD1zZXRJbnRlcnZhbChBNGUsdEl0KSksRTI9MSxlSXQoUTZ0KSl9fXZhciBFMixTVCx3VCx0SXQsek4sTVQsRk4sUHksQk4sRVQsZUl0LG5JdD1NKCgpPT57RTI9MCxTVD0wLHdUPTAsdEl0PTFlMyxGTj0wLFB5PTAsQk49MCxFVD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxlSXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07R1oucHJvdG90eXBlPUhOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6R1oscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1laKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZNVCE9PXRoaXMmJihNVD9NVC5fbmV4dD10aGlzOnpOPXRoaXMsTVQ9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixXWigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxXWigpKX19fSk7dmFyIGlJdD1NKCgpPT57bkl0KCl9KTtmdW5jdGlvbiBvSXQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBhSXQoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBzSXQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1wZygpLGw9SE4odSksYz1xWigidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKCl7dmFyIGQsZz1lLmxlbmd0aCxfO2ZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbih5KXt5KHIpfSksZD0wO2Q8ZzsrK2QpXz1lW2RdLF8uZng9PW51bGw/Xy54Kz1fLnZ4Kj1hOihfLng9Xy5meCxfLnZ4PTApLF8uZnk9PW51bGw/Xy55Kz1fLnZ5Kj1hOihfLnk9Xy5meSxfLnZ5PTApfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxpc05hTihfLngpfHxpc05hTihfLnkpKXt2YXIgeT1JNGUqTWF0aC5zcXJ0KGQpLHg9ZCpMNGU7Xy54PXkqTWF0aC5jb3MoeCksXy55PXkqTWF0aC5zaW4oeCl9KGlzTmFOKF8udngpfHxpc05hTihfLnZ5KSkmJihfLnZ4PV8udnk9MCl9fWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQuaW5pdGlhbGl6ZSYmZC5pbml0aWFsaXplKGUpLGR9cmV0dXJuIGYoKSx0PXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksdH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSx0fSxub2RlczpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kLGYoKSxzLmVhY2gocCksdCk6ZX0sYWxwaGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2QsdCk6cn0sYWxwaGFNaW46ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2QsdCk6bn0sYWxwaGFEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZCx0KToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2QsdCk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLWQsdCk6MS1hfSxmb3JjZTpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGc9PW51bGw/cy5yZW1vdmUoZCk6cy5zZXQoZCxwKGcpKSx0KTpzLmdldChkKX0sZmluZDpmdW5jdGlvbihkLGcsXyl7dmFyIHk9MCx4PWUubGVuZ3RoLGIsUyxDLFAsaztmb3IoXz09bnVsbD9fPTEvMDpfKj1fLHk9MDt5PHg7Kyt5KVA9ZVt5XSxiPWQtUC54LFM9Zy1QLnksQz1iKmIrUypTLEM8XyYmKGs9UCxfPUMpO3JldHVybiBrfSxvbjpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24oZCxnKSx0KTpjLm9uKGQpfX19dmFyIEk0ZSxMNGUsalo9TSgoKT0+e0o2dCgpO1VaKCk7aUl0KCk7STRlPTEwLEw0ZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSl9KTtmdW5jdGlvbiBsSXQoKXt2YXIgZSx0LHIsbj16bigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUN5KGUsb0l0LGFJdCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOnpuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH12YXIgY0l0PU0oKCk9PntUeSgpO0xOKCk7VlooKTtqWigpfSk7ZnVuY3Rpb24gdUl0KGUsdCxyKXt2YXIgbixpPXpuKC4xKSxvLGE7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKCtlKSksdD09bnVsbCYmKHQ9MCkscj09bnVsbCYmKHI9MCk7ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9MCxoPW4ubGVuZ3RoO3U8aDsrK3Upe3ZhciBmPW5bdV0scD1mLngtdHx8MWUtNixkPWYueS1yfHwxZS02LGc9TWF0aC5zcXJ0KHAqcCtkKmQpLF89KGFbdV0tZykqb1t1XSpjL2c7Zi52eCs9cCpfLGYudnkrPWQqX319ZnVuY3Rpb24gbCgpe2lmKCEhbil7dmFyIGMsdT1uLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkodSksYT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpYVtjXT0rZShuW2NdLGMsbiksb1tjXT1pc05hTihhW2NdKT8wOitpKG5bY10sYyxuKX19cmV0dXJuIHMuaW5pdGlhbGl6ZT1mdW5jdGlvbihjKXtuPWMsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6em4oK2MpLGwoKSxzKTppfSxzLnJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnpuKCtjKSxsKCkscyk6ZX0scy54PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStjLHMpOnR9LHMueT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYyxzKTpyfSxzfXZhciBoSXQ9TSgoKT0+e1R5KCl9KTtmdW5jdGlvbiBmSXQoZSl7dmFyIHQ9em4oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT16bihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6em4oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOmV9LG99dmFyIHBJdD1NKCgpPT57VHkoKX0pO2Z1bmN0aW9uIGRJdChlKXt2YXIgdD16biguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnpuKCtzKSxhKCksbyk6ZX0sb312YXIgbUl0PU0oKCk9PntUeSgpfSk7dmFyIGdJdD1NKCgpPT57YTZ0KCk7QjZ0KCk7WDZ0KCk7Y0l0KCk7aEl0KCk7alooKTtwSXQoKTttSXQoKX0pO2Z1bmN0aW9uIEl5KGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfXZhciBWTj1NKCgpPT57fSk7ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGU9SXkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59dmFyIFRUPU0oKCk9PntWTigpfSk7ZnVuY3Rpb24gX0l0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fXZhciB5SXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZJdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIHhJdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkl0KGUsdCl7ZT1lLnRvUHJlY2lzaW9uKHQpO3Q6Zm9yKHZhciByPWUubGVuZ3RoLG49MSxpPS0xLG87bjxyOysrbilzd2l0Y2goZVtuXSl7Y2FzZSIuIjppPW89bjticmVhaztjYXNlIjAiOmk9PT0wJiYoaT1uKSxvPW47YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP2Uuc2xpY2UoMCxpKStlLnNsaWNlKG8rMSk6ZX12YXIgd0l0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTSXQoZSx0KXt2YXIgcj1JeShlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oWFo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLGE9bi5sZW5ndGg7cmV0dXJuIG89PT1hP246bz5hP24rbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP24uc2xpY2UoMCxvKSsiLiIrbi5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStJeShlLE1hdGgubWF4KDAsdCtvLTEpKVswXX12YXIgWFosJFo9TSgoKT0+e1ZOKCl9KTtmdW5jdGlvbiBLWihlLHQpe3ZhciByPUl5KGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIE1JdD1NKCgpPT57Vk4oKX0pO3ZhciBVTixaWj1NKCgpPT57d0l0KCk7JFooKTtNSXQoKTtVTj17IiI6Ykl0LCIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtaKGUqMTAwLHQpfSxyOktaLHM6U0l0LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpfX19KTtmdW5jdGlvbiBMeShlKXtyZXR1cm4gbmV3IEpaKGUpfWZ1bmN0aW9uIEpaKGUpe2lmKCEodD1rNGUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdCxyPXRbMV18fCIgIixuPXRbMl18fCI+IixpPXRbM118fCItIixvPXRbNF18fCIiLGE9ISF0WzVdLHM9dFs2XSYmK3RbNl0sbD0hIXRbN10sYz10WzhdJiYrdFs4XS5zbGljZSgxKSx1PXRbOV18fCIiO3U9PT0ibiI/KGw9ITAsdT0iZyIpOlVOW3VdfHwodT0iIiksKGF8fHI9PT0iMCImJm49PT0iPSIpJiYoYT0hMCxyPSIwIixuPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1uLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD1zLHRoaXMuY29tbWE9bCx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT11fXZhciBrNGUsUVo9TSgoKT0+e1paKCk7azRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO0x5LnByb3RvdHlwZT1KWi5wcm90b3R5cGU7SloucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PW51bGw/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09bnVsbD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIHRKKGUpe3JldHVybiBlfXZhciBFSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFOKGUpe3ZhciB0PWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP19JdChlLmdyb3VwaW5nLGUudGhvdXNhbmRzKTp0SixyPWUuY3VycmVuY3ksbj1lLmRlY2ltYWwsaT1lLm51bWVyYWxzP3ZJdChlLm51bWVyYWxzKTp0SixvPWUucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGEobCl7bD1MeShsKTt2YXIgYz1sLmZpbGwsdT1sLmFsaWduLGg9bC5zaWduLGY9bC5zeW1ib2wscD1sLnplcm8sZD1sLndpZHRoLGc9bC5jb21tYSxfPWwucHJlY2lzaW9uLHk9bC50eXBlLHg9Zj09PSIkIj9yWzBdOmY9PT0iIyImJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPWY9PT0iJCI/clsxXTovWyVwXS8udGVzdCh5KT9vOiIiLFM9VU5beV0sQz0heXx8L1tkZWZncHJzJV0vLnRlc3QoeSk7Xz1fPT1udWxsP3k/NjoxMjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsXykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsXykpO2Z1bmN0aW9uIFAoayl7dmFyIE89eCxEPWIsQixJLEw7aWYoeT09PSJjIilEPVMoaykrRCxrPSIiO2Vsc2V7az0razt2YXIgUj1rPDA7aWYoaz1TKE1hdGguYWJzKGspLF8pLFImJitrPT0wJiYoUj0hMSksTz0oUj9oPT09IigiP2g6Ii0iOmg9PT0iLSJ8fGg9PT0iKCI/IiI6aCkrTyxEPSh5PT09InMiP1RJdFs4K1haLzNdOiIiKStEKyhSJiZoPT09IigiPyIpIjoiIiksQyl7Zm9yKEI9LTEsST1rLmxlbmd0aDsrK0I8STspaWYoTD1rLmNoYXJDb2RlQXQoQiksNDg+THx8TD41Nyl7RD0oTD09PTQ2P24ray5zbGljZShCKzEpOmsuc2xpY2UoQikpK0Qsaz1rLnNsaWNlKDAsQik7YnJlYWt9fX1nJiYhcCYmKGs9dChrLDEvMCkpO3ZhciBGPU8ubGVuZ3RoK2subGVuZ3RoK0QubGVuZ3RoLHo9RjxkP25ldyBBcnJheShkLUYrMSkuam9pbihjKToiIjtzd2l0Y2goZyYmcCYmKGs9dCh6K2ssei5sZW5ndGg/ZC1ELmxlbmd0aDoxLzApLHo9IiIpLHUpe2Nhc2UiPCI6az1PK2srRCt6O2JyZWFrO2Nhc2UiPSI6az1PK3oraytEO2JyZWFrO2Nhc2UiXiI6az16LnNsaWNlKDAsRj16Lmxlbmd0aD4+MSkrTytrK0Qrei5zbGljZShGKTticmVhaztkZWZhdWx0Oms9eitPK2srRDticmVha31yZXR1cm4gaShrKX1yZXR1cm4gUC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBsKyIifSxQfWZ1bmN0aW9uIHMobCxjKXt2YXIgdT1hKChsPUx5KGwpLGwudHlwZT0iZiIsbCkpLGg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJmKGMpLzMpKSkqMyxmPU1hdGgucG93KDEwLC1oKSxwPVRJdFs4K2gvM107cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiB1KGYqZCkrcH19cmV0dXJue2Zvcm1hdDphLGZvcm1hdFByZWZpeDpzfX12YXIgVEl0LGVKPU0oKCk9PntUVCgpO3lJdCgpO3hJdCgpO1FaKCk7WlooKTskWigpO0VJdCgpO1RJdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIFdOKGUpe3JldHVybiBHTj1xTihlKSxySj1HTi5mb3JtYXQsbko9R04uZm9ybWF0UHJlZml4LEdOfXZhciBHTixySixuSixDSXQ9TSgoKT0+e2VKKCk7V04oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSl9KTtmdW5jdGlvbiBBSXQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXJmKE1hdGguYWJzKGUpKSl9dmFyIFBJdD1NKCgpPT57VFQoKX0pO2Z1bmN0aW9uIElJdChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyZih0KS8zKSkpKjMtcmYoTWF0aC5hYnMoZSkpKX12YXIgTEl0PU0oKCk9PntUVCgpfSk7ZnVuY3Rpb24ga0l0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAscmYodCktcmYoZSkpKzF9dmFyIFJJdD1NKCgpPT57VFQoKX0pO3ZhciBOSXQ9TSgoKT0+e0NJdCgpO2VKKCk7UVooKTtQSXQoKTtMSXQoKTtSSXQoKX0pO2Z1bmN0aW9uIENzKCl7cmV0dXJuIG5ldyBqTn1mdW5jdGlvbiBqTigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiBESXQoZSx0LHIpe3ZhciBuPWUucz10K3IsaT1uLXQsbz1uLWk7ZS50PXQtbysoci1pKX12YXIgWU4sa3k9TSgoKT0+e2pOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ak4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXtESXQoWU4sZSx0aGlzLnQpLERJdCh0aGlzLFlOLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1ZTi50OnRoaXMucz1ZTi50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O1lOPW5ldyBqTn0pO2Z1bmN0aW9uIEtOKGUpe3JldHVybiBlPjE/MDplPC0xP3JyOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBabihlKXtyZXR1cm4gZT4xP0ZuOmU8LTE/LUZuOk1hdGguYXNpbihlKX1mdW5jdGlvbiBvSihlKXtyZXR1cm4oZT1KdChlLzIpKSplfXZhciBjZSxpSixycixGbixUMixCaSxVcix3ZSxZZSx5YyxTbixhZSxDVCxYTixSeSwkTixKdCxkZyxScixDMixscj1NKCgpPT57Y2U9MWUtNixpSj0xZS0xMixycj1NYXRoLlBJLEZuPXJyLzIsVDI9cnIvNCxCaT1ycioyLFVyPTE4MC9ycix3ZT1yci8xODAsWWU9TWF0aC5hYnMseWM9TWF0aC5hdGFuLFNuPU1hdGguYXRhbjIsYWU9TWF0aC5jb3MsQ1Q9TWF0aC5jZWlsLFhOPU1hdGguZXhwLFJ5PU1hdGgubG9nLCROPU1hdGgucG93LEp0PU1hdGguc2luLGRnPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSxScj1NYXRoLnNxcnQsQzI9TWF0aC50YW59KTtmdW5jdGlvbiBxcigpe312YXIgWHA9TSgoKT0+e30pO2Z1bmN0aW9uIFpOKGUsdCl7ZSYmekl0Lmhhc093blByb3BlcnR5KGUudHlwZSkmJnpJdFtlLnR5cGVdKGUsdCl9ZnVuY3Rpb24gYUooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gRkl0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspYUooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1vKGUsdCl7ZSYmT0l0Lmhhc093blByb3BlcnR5KGUudHlwZSk/T0l0W2UudHlwZV0oZSx0KTpaTihlLHQpfXZhciBPSXQsekl0LG1nPU0oKCk9PntPSXQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtaTihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspWk4ocltuXS5nZW9tZXRyeSx0KX19LHpJdD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2FKKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylhSihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtGSXQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylGSXQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KVpOKHJbbl0sdCl9fX0pO2Z1bmN0aW9uIFI0ZSgpe0V1LnBvaW50PUQ0ZX1mdW5jdGlvbiBONGUoKXtWSXQoQkl0LEhJdCl9ZnVuY3Rpb24gRDRlKGUsdCl7RXUucG9pbnQ9Vkl0LEJJdD1lLEhJdD10LGUqPXdlLHQqPXdlLHNKPWUsbEo9YWUodD10LzIrVDIpLGNKPUp0KHQpfWZ1bmN0aW9uIFZJdChlLHQpe2UqPXdlLHQqPXdlLHQ9dC8yK1QyO3ZhciByPWUtc0osbj1yPj0wPzE6LTEsaT1uKnIsbz1hZSh0KSxhPUp0KHQpLHM9Y0oqYSxsPWxKKm8rcyphZShpKSxjPXMqbipKdChpKTtBVC5hZGQoU24oYyxsKSksc0o9ZSxsSj1vLGNKPWF9ZnVuY3Rpb24gVUl0KGUpe3JldHVybiBKTi5yZXNldCgpLE1vKGUsRXUpLEpOKjJ9dmFyIEFULEpOLEJJdCxISXQsc0osbEosY0osRXUsdUo9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO21nKCk7QVQ9Q3MoKSxKTj1DcygpLEV1PXtwb2ludDpxcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtBVC5yZXNldCgpLEV1LmxpbmVTdGFydD1SNGUsRXUubGluZUVuZD1ONGV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rQVQ7Sk4uYWRkKGU8MD9CaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PXFyfSxzcGhlcmU6ZnVuY3Rpb24oKXtKTi5hZGQoQmkpfX19KTtmdW5jdGlvbiBOeShlKXtyZXR1cm5bU24oZVsxXSxlWzBdKSxabihlWzJdKV19ZnVuY3Rpb24gdmMoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1hZShyKTtyZXR1cm5bbiphZSh0KSxuKkp0KHQpLEp0KHIpXX1mdW5jdGlvbiBQVChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiAkcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gUU4oZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBJVChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gRHkoZSl7dmFyIHQ9UnIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBBMj1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGhKKGUsdCl7Z2cucHVzaChacD1bZGk9ZSxFaT1lXSksdDxobCYmKGhsPXQpLHQ+eGMmJih4Yz10KX1mdW5jdGlvbiBYSXQoZSx0KXt2YXIgcj12YyhbZSp3ZSx0KndlXSk7aWYoUDIpe3ZhciBuPSRwKFAyLHIpLGk9W25bMV0sLW5bMF0sMF0sbz0kcChpLG4pO0R5KG8pLG89Tnkobyk7dmFyIGE9ZS1PeSxzPWE+MD8xOi0xLGw9b1swXSpVcipzLGMsdT1ZZShhKT4xODA7dV4ocypPeTxsJiZsPHMqZSk/KGM9b1sxXSpVcixjPnhjJiYoeGM9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKk95PGwmJmw8cyplKT8oYz0tb1sxXSpVcixjPGhsJiYoaGw9YykpOih0PGhsJiYoaGw9dCksdD54YyYmKHhjPXQpKSksdT9lPE95P3VsKGRpLGUpPnVsKGRpLEVpKSYmKEVpPWUpOnVsKGUsRWkpPnVsKGRpLEVpKSYmKGRpPWUpOkVpPj1kaT8oZTxkaSYmKGRpPWUpLGU+RWkmJihFaT1lKSk6ZT5PeT91bChkaSxlKT51bChkaSxFaSkmJihFaT1lKTp1bChlLEVpKT51bChkaSxFaSkmJihkaT1lKX1lbHNlIGdnLnB1c2goWnA9W2RpPWUsRWk9ZV0pO3Q8aGwmJihobD10KSx0PnhjJiYoeGM9dCksUDI9cixPeT1lfWZ1bmN0aW9uIHFJdCgpe0twLnBvaW50PVhJdH1mdW5jdGlvbiBHSXQoKXtacFswXT1kaSxacFsxXT1FaSxLcC5wb2ludD1oSixQMj1udWxsfWZ1bmN0aW9uICRJdChlLHQpe2lmKFAyKXt2YXIgcj1lLU95O0xULmFkZChZZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIFlJdD1lLGpJdD10O0V1LnBvaW50KGUsdCksWEl0KGUsdCl9ZnVuY3Rpb24gTzRlKCl7RXUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gejRlKCl7JEl0KFlJdCxqSXQpLEV1LmxpbmVFbmQoKSxZZShMVCk+Y2UmJihkaT0tKEVpPTE4MCkpLFpwWzBdPWRpLFpwWzFdPUVpLFAyPW51bGx9ZnVuY3Rpb24gdWwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIEY0ZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gV0l0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBLSXQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoeGM9RWk9LShkaT1obD0xLzApLGdnPVtdLE1vKGUsS3ApLHI9Z2cubGVuZ3RoKXtmb3IoZ2cuc29ydChGNGUpLHQ9MSxuPWdnWzBdLG89W25dO3Q8cjsrK3QpaT1nZ1t0XSxXSXQobixpWzBdKXx8V0l0KG4saVsxXSk/KHVsKG5bMF0saVsxXSk+dWwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksdWwoaVswXSxuWzFdKT51bChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXVsKG5bMV0saVswXSkpPmEmJihhPXMsZGk9aVswXSxFaT1uWzFdKX1yZXR1cm4gZ2c9WnA9bnVsbCxkaT09PTEvMHx8aGw9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZGksaGxdLFtFaSx4Y11dfXZhciBkaSxobCxFaSx4YyxPeSxZSXQsakl0LFAyLExULGdnLFpwLEtwLFpJdD1NKCgpPT57a3koKTt1SigpO0EyKCk7bHIoKTttZygpO0xUPUNzKCksS3A9e3BvaW50OmhKLGxpbmVTdGFydDpxSXQsbGluZUVuZDpHSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3AucG9pbnQ9JEl0LEtwLmxpbmVTdGFydD1PNGUsS3AubGluZUVuZD16NGUsTFQucmVzZXQoKSxFdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0V1LnBvbHlnb25FbmQoKSxLcC5wb2ludD1oSixLcC5saW5lU3RhcnQ9cUl0LEtwLmxpbmVFbmQ9R0l0LEFUPDA/KGRpPS0oRWk9MTgwKSxobD0tKHhjPTkwKSk6TFQ+Y2U/eGM9OTA6TFQ8LWNlJiYoaGw9LTkwKSxacFswXT1kaSxacFsxXT1FaX19fSk7ZnVuY3Rpb24gbUooZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtSVChyKmFlKGUpLHIqSnQoZSksSnQodCkpfWZ1bmN0aW9uIFJUKGUsdCxyKXsrK2tULGVEKz0oZS1lRCkva1QsckQrPSh0LXJEKS9rVCxuRCs9KHItbkQpL2tUfWZ1bmN0aW9uIEpJdCgpe1R1LnBvaW50PUI0ZX1mdW5jdGlvbiBCNGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksVHUucG9pbnQ9SDRlLFJUKFdhLFlhLGphKX1mdW5jdGlvbiBINGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KSxuPXIqYWUoZSksaT1yKkp0KGUpLG89SnQodCksYT1TbihScigoYT1ZYSpvLWphKmkpKmErKGE9amEqbi1XYSpvKSphKyhhPVdhKmktWWEqbikqYSksV2EqbitZYSppK2phKm8pO3REKz1hLGlEKz1hKihXYSsoV2E9bikpLG9EKz1hKihZYSsoWWE9aSkpLGFEKz1hKihqYSsoamE9bykpLFJUKFdhLFlhLGphKX1mdW5jdGlvbiBRSXQoKXtUdS5wb2ludD1tSn1mdW5jdGlvbiBWNGUoKXtUdS5wb2ludD1xNGV9ZnVuY3Rpb24gVTRlKCl7cjl0KHQ5dCxlOXQpLFR1LnBvaW50PW1KfWZ1bmN0aW9uIHE0ZShlLHQpe3Q5dD1lLGU5dD10LGUqPXdlLHQqPXdlLFR1LnBvaW50PXI5dDt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksUlQoV2EsWWEsamEpfWZ1bmN0aW9uIHI5dChlLHQpe2UqPXdlLHQqPXdlO3ZhciByPWFlKHQpLG49ciphZShlKSxpPXIqSnQoZSksbz1KdCh0KSxhPVlhKm8tamEqaSxzPWphKm4tV2EqbyxsPVdhKmktWWEqbixjPVJyKGEqYStzKnMrbCpsKSx1PVpuKGMpLGg9YyYmLXUvYztmSis9aCphLHBKKz1oKnMsZEorPWgqbCx0RCs9dSxpRCs9dSooV2ErKFdhPW4pKSxvRCs9dSooWWErKFlhPWkpKSxhRCs9dSooamErKGphPW8pKSxSVChXYSxZYSxqYSl9ZnVuY3Rpb24gbjl0KGUpe2tUPXREPWVEPXJEPW5EPWlEPW9EPWFEPWZKPXBKPWRKPTAsTW8oZSxUdSk7dmFyIHQ9Zkoscj1wSixuPWRKLGk9dCp0K3IqcituKm47cmV0dXJuIGk8aUomJih0PWlELHI9b0Qsbj1hRCx0RDxjZSYmKHQ9ZUQscj1yRCxuPW5EKSxpPXQqdCtyKnIrbipuLGk8aUopP1tOYU4sTmFOXTpbU24ocix0KSpVcixabihuL1JyKGkpKSpVcl19dmFyIGtULHRELGVELHJELG5ELGlELG9ELGFELGZKLHBKLGRKLHQ5dCxlOXQsV2EsWWEsamEsVHUsaTl0PU0oKCk9PntscigpO1hwKCk7bWcoKTtUdT17c3BoZXJlOnFyLHBvaW50Om1KLGxpbmVTdGFydDpKSXQsbGluZUVuZDpRSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7VHUubGluZVN0YXJ0PVY0ZSxUdS5saW5lRW5kPVU0ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1R1LmxpbmVTdGFydD1KSXQsVHUubGluZUVuZD1RSXR9fX0pO2Z1bmN0aW9uIHp5KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgbzl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzRChlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9dmFyIGdKPU0oKCk9Pnt9KTtmdW5jdGlvbiBfSihlLHQpe3JldHVybltlPnJyP2UtQmk6ZTwtcnI/ZStCaTplLHRdfWZ1bmN0aW9uIE5UKGUsdCxyKXtyZXR1cm4oZSU9QmkpP3R8fHI/c0Qoczl0KGUpLGw5dCh0LHIpKTpzOXQoZSk6dHx8cj9sOXQodCxyKTpfSn1mdW5jdGlvbiBhOXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+cnI/dC1CaTp0PC1ycj90K0JpOnQscl19fWZ1bmN0aW9uIHM5dChlKXt2YXIgdD1hOXQoZSk7cmV0dXJuIHQuaW52ZXJ0PWE5dCgtZSksdH1mdW5jdGlvbiBsOXQoZSx0KXt2YXIgcj1hZShlKSxuPUp0KGUpLGk9YWUodCksbz1KdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZipyK3UqbjtyZXR1cm5bU24oaCppLXAqbyx1KnItZipuKSxabihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZippLWgqbztyZXR1cm5bU24oaCppK2Yqbyx1KnIrcCpuKSxabihwKnItdSpuKV19LGF9ZnVuY3Rpb24gbEQoZSl7ZT1OVChlWzBdKndlLGVbMV0qd2UsZS5sZW5ndGg+Mj9lWzJdKndlOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKndlLHJbMV0qd2UpLHJbMF0qPVVyLHJbMV0qPVVyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qd2UsclsxXSp3ZSksclswXSo9VXIsclsxXSo9VXIscn0sdH12YXIgRFQ9TSgoKT0+e2dKKCk7bHIoKTtfSi5pbnZlcnQ9X0p9KTtmdW5jdGlvbiB5SihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1hZSh0KSxzPUp0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKkJpLG89dC1sLzIpOihpPWM5dChhLGkpLG89Yzl0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qQmkpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1OeShbYSwtcyphZSh1KSwtcypKdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gYzl0KGUsdCl7dD12Yyh0KSx0WzBdLT1lLER5KHQpO3ZhciByPUtOKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrQmktY2UpJUJpfWZ1bmN0aW9uIHU5dCgpe3ZhciBlPXp5KFswLDBdKSx0PXp5KDkwKSxyPXp5KDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj1VcixsWzFdKj1Vcn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSp3ZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKndlO3JldHVybiBuPVtdLGk9TlQoLWxbMF0qd2UsLWxbMV0qd2UsMCkuaW52ZXJ0LHlKKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDp6eShbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTpyfSxzfXZhciB2Sj1NKCgpPT57QTIoKTtvOXQoKTtscigpO0RUKCl9KTtmdW5jdGlvbiBjRCgpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKFtyLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOnFyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fXZhciB4Sj1NKCgpPT57WHAoKX0pO2Z1bmN0aW9uIEkyKGUsdCl7cmV0dXJuIFllKGVbMF0tdFswXSk8Y2UmJlllKGVbMV0tdFsxXSk8Y2V9dmFyIGJKPU0oKCk9PntscigpfSk7ZnVuY3Rpb24gdUQoZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBoRChlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKEkyKF8seSkpe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufW8ucHVzaCh4PW5ldyB1RChfLGQsbnVsbCwhMCkpLGEucHVzaCh4Lm89bmV3IHVEKF8sbnVsbCx4LCExKSksby5wdXNoKHg9bmV3IHVEKHksZCxudWxsLCExKSksYS5wdXNoKHgubz1uZXcgdUQoeSxudWxsLHgsITApKX19KSwhIW8ubGVuZ3RoKXtmb3IoYS5zb3J0KHQpLGg5dChvKSxoOXQoYSkscz0wLGw9YS5sZW5ndGg7czxsOysrcylhW3NdLmU9cj0hcjtmb3IodmFyIGM9b1swXSx1LGg7Oyl7Zm9yKHZhciBmPWMscD0hMDtmLnY7KWlmKChmPWYubik9PT1jKXJldHVybjt1PWYueixpLmxpbmVTdGFydCgpO2Rve2lmKGYudj1mLm8udj0hMCxmLmUpe2lmKHApZm9yKHM9MCxsPXUubGVuZ3RoO3M8bDsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYubi54LDEsaSk7Zj1mLm59ZWxzZXtpZihwKWZvcih1PWYucC56LHM9dS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5wLngsLTEsaSk7Zj1mLnB9Zj1mLm8sdT1mLnoscD0hcH13aGlsZSghZi52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIGg5dChlKXtpZighISh0PWUubGVuZ3RoKSl7Zm9yKHZhciB0LHI9MCxuPWVbMF0saTsrK3I8dDspbi5uPWk9ZVtyXSxpLnA9bixuPWk7bi5uPWk9ZVswXSxpLnA9bn19dmFyIHdKPU0oKCk9PntiSigpfSk7ZnVuY3Rpb24gZkQoZSx0KXt2YXIgcj10WzBdLG49dFsxXSxpPVtKdChyKSwtYWUociksMF0sbz0wLGE9MDtTSi5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcylpZighISh1PShjPWVbc10pLmxlbmd0aCkpZm9yKHZhciBjLHUsaD1jW3UtMV0sZj1oWzBdLHA9aFsxXS8yK1QyLGQ9SnQocCksZz1hZShwKSxfPTA7Xzx1OysrXyxmPXgsZD1TLGc9QyxoPXkpe3ZhciB5PWNbX10seD15WzBdLGI9eVsxXS8yK1QyLFM9SnQoYiksQz1hZShiKSxQPXgtZixrPVA+PTA/MTotMSxPPWsqUCxEPU8+cnIsQj1kKlM7aWYoU0ouYWRkKFNuKEIqaypKdChPKSxnKkMrQiphZShPKSkpLG8rPUQ/UCtrKkJpOlAsRF5mPj1yXng+PXIpe3ZhciBJPSRwKHZjKGgpLHZjKHkpKTtEeShJKTt2YXIgTD0kcChpLEkpO0R5KEwpO3ZhciBSPShEXlA+PTA/LTE6MSkqWm4oTFsyXSk7KG4+Unx8bj09PVImJihJWzBdfHxJWzFdKSkmJihhKz1EXlA+PTA/MTotMSl9fXJldHVybihvPC1jZXx8bzxjZSYmU0o8LWNlKV5hJjF9dmFyIFNKLE1KPU0oKCk9PntreSgpO0EyKCk7bHIoKTtTSj1DcygpfSk7ZnVuY3Rpb24gX2coZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEZ5PU0oKCk9Pnt9KTtmdW5jdGlvbiBFSihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1HNGUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBHNGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9nKGUodCkscil9fXZhciBUSj1NKCgpPT57RnkoKX0pO3ZhciBmOXQsVzRlLFk0ZSxDSj1NKCgpPT57RnkoKTtUSigpO2Y5dD1FSihfZyksVzRlPWY5dC5yaWdodCxZNGU9Zjl0LmxlZnR9KTt2YXIgQUo9TSgoKT0+e30pO3ZhciBwOXQ9TSgoKT0+e0FKKCl9KTt2YXIgZDl0PU0oKCk9Pnt9KTt2YXIgTDI9TSgoKT0+e30pO3ZhciBQSj1NKCgpPT57TDIoKX0pO3ZhciBJSj1NKCgpPT57UEooKX0pO3ZhciBMSj1NKCgpPT57fSk7dmFyIG05dCxYNGUsJDRlLGtKPU0oKCk9PnttOXQ9QXJyYXkucHJvdG90eXBlLFg0ZT1tOXQuc2xpY2UsJDRlPW05dC5tYXB9KTt2YXIgZzl0PU0oKCk9Pnt9KTt2YXIgXzl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKcChlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgUko9TSgoKT0+e30pO3ZhciBrMG4sUjBuLE4wbixOSj1NKCgpPT57azBuPU1hdGguc3FydCg1MCksUjBuPU1hdGguc3FydCgxMCksTjBuPU1hdGguc3FydCgyKX0pO3ZhciBESj1NKCgpPT57fSk7dmFyIHk5dD1NKCgpPT57a0ooKTtDSigpO2c5dCgpO0xKKCk7Xzl0KCk7UkooKTtOSigpO0RKKCl9KTt2YXIgZEQ9TSgoKT0+e0wyKCl9KTt2YXIgeDl0PU0oKCk9PntrSigpO0Z5KCk7TDIoKTtkRCgpfSk7dmFyIGI5dD1NKCgpPT57SUooKX0pO3ZhciB3OXQ9TSgoKT0+e30pO3ZhciBTOXQ9TSgoKT0+e0wyKCl9KTt2YXIgTTl0PU0oKCk9PntGeSgpO0wyKCk7ZEQoKX0pO2Z1bmN0aW9uIE9UKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99dmFyIEU5dD1NKCgpPT57fSk7dmFyIE9KPU0oKCk9Pnt9KTt2YXIgVDl0PU0oKCk9Pnt9KTt2YXIgQzl0PU0oKCk9PntGeSgpfSk7dmFyIEE5dD1NKCgpPT57fSk7dmFyIFA5dD1NKCgpPT57fSk7dmFyIHpKPU0oKCk9PntPSigpfSk7dmFyIEk5dD1NKCgpPT57ekooKX0pO3ZhciBtRD1NKCgpPT57Q0ooKTtGeSgpO1RKKCk7cDl0KCk7ZDl0KCk7SUooKTtMSigpO3k5dCgpO3g5dCgpO2I5dCgpO0RKKCk7dzl0KCk7Uzl0KCk7TTl0KCk7RTl0KCk7T0ooKTtBSigpO1Q5dCgpO2REKCk7UkooKTtDOXQoKTtBOXQoKTtQOXQoKTtOSigpO3pKKCk7UEooKTtJOXQoKX0pO2Z1bmN0aW9uIGdEKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10KGkpLGE9Y0QoKSxzPXQoYSksbD0hMSxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6Xyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXksZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9Yix1PVtdLGM9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9Xyx1PU9UKHUpO3ZhciBTPWZEKGMsbik7dS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGhEKHUsaVBlLFMscixpKSk6UyYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLHU9Yz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoUyxDKXtlKFMsQykmJmkucG9pbnQoUyxDKX1mdW5jdGlvbiBkKFMsQyl7by5wb2ludChTLEMpfWZ1bmN0aW9uIGcoKXtmLnBvaW50PWQsby5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKCl7Zi5wb2ludD1wLG8ubGluZUVuZCgpfWZ1bmN0aW9uIHkoUyxDKXtoLnB1c2goW1MsQ10pLHMucG9pbnQoUyxDKX1mdW5jdGlvbiB4KCl7cy5saW5lU3RhcnQoKSxoPVtdfWZ1bmN0aW9uIGIoKXt5KGhbMF1bMF0saFswXVsxXSkscy5saW5lRW5kKCk7dmFyIFM9cy5jbGVhbigpLEM9YS5yZXN1bHQoKSxQLGs9Qy5sZW5ndGgsTyxELEI7aWYoaC5wb3AoKSxjLnB1c2goaCksaD1udWxsLCEhayl7aWYoUyYxKXtpZihEPUNbMF0sKE89RC5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksUD0wO1A8TzsrK1ApaS5wb2ludCgoQj1EW1BdKVswXSxCWzFdKTtpLmxpbmVFbmQoKX1yZXR1cm59az4xJiZTJjImJkMucHVzaChDLnBvcCgpLmNvbmNhdChDLnNoaWZ0KCkpKSx1LnB1c2goQy5maWx0ZXIoblBlKSl9fXJldHVybiBmfX1mdW5jdGlvbiBuUGUoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gaVBlKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUZuLWNlOkZuLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1Gbi1jZTpGbi10WzFdKX12YXIgRko9TSgoKT0+e3hKKCk7d0ooKTtscigpO01KKCk7bUQoKX0pO2Z1bmN0aW9uIG9QZShlKXt2YXIgdD1OYU4scj1OYU4sbj1OYU4saTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxpPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP3JyOi1ycixsPVllKG8tdCk7WWUobC1ycik8Y2U/KGUucG9pbnQodCxyPShyK2EpLzI+MD9GbjotRm4pLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxlLnBvaW50KG8sciksaT0wKTpuIT09cyYmbD49cnImJihZZSh0LW4pPGNlJiYodC09bipjZSksWWUoby1zKTxjZSYmKG8tPXMqY2UpLHI9YVBlKHQscixvLGEpLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxpPTApLGUucG9pbnQodD1vLHI9YSksbj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksdD1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1pfX19ZnVuY3Rpb24gYVBlKGUsdCxyLG4pe3ZhciBpLG8sYT1KdChlLXIpO3JldHVybiBZZShhKT5jZT95YygoSnQodCkqKG89YWUobikpKkp0KHIpLUp0KG4pKihpPWFlKHQpKSpKdChlKSkvKGkqbyphKSk6KHQrbikvMn1mdW5jdGlvbiBzUGUoZSx0LHIsbil7dmFyIGk7aWYoZT09bnVsbClpPXIqRm4sbi5wb2ludCgtcnIsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQocnIsaSksbi5wb2ludChyciwwKSxuLnBvaW50KHJyLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLXJyLC1pKSxuLnBvaW50KC1yciwwKSxuLnBvaW50KC1ycixpKTtlbHNlIGlmKFllKGVbMF0tdFswXSk+Y2Upe3ZhciBvPWVbMF08dFswXT9ycjotcnI7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KHRbMF0sdFsxXSl9dmFyIHpULEJKPU0oKCk9PntGSigpO2xyKCk7elQ9Z0QoZnVuY3Rpb24oKXtyZXR1cm4hMH0sb1BlLHNQZSxbLXJyLC1Gbl0pfSk7ZnVuY3Rpb24gX0QoZSl7dmFyIHQ9YWUoZSkscj02KndlLG49dD4wLGk9WWUodCk+Y2U7ZnVuY3Rpb24gbyh1LGgsZixwKXt5SihwLGUscixmLHUsaCl9ZnVuY3Rpb24gYSh1LGgpe3JldHVybiBhZSh1KSphZShoKT50fWZ1bmN0aW9uIHModSl7dmFyIGgsZixwLGQsZztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZD1wPSExLGc9MX0scG9pbnQ6ZnVuY3Rpb24oXyx5KXt2YXIgeD1bXyx5XSxiLFM9YShfLHkpLEM9bj9TPzA6YyhfLHkpOlM/YyhfKyhfPDA/cnI6LXJyKSx5KTowO2lmKCFoJiYoZD1wPVMpJiZ1LmxpbmVTdGFydCgpLFMhPT1wJiYoYj1sKGgseCksKCFifHxJMihoLGIpfHxJMih4LGIpKSYmKHhbMF0rPWNlLHhbMV0rPWNlLFM9YSh4WzBdLHhbMV0pKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0pLHUubGluZUVuZCgpKSxoPWI7ZWxzZSBpZihpJiZoJiZuXlMpe3ZhciBQOyEoQyZmKSYmKFA9bCh4LGgsITApKSYmKGc9MCxuPyh1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdKSx1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCkpOih1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSkpKX1TJiYoIWh8fCFJMihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPXZjKHUpLGQ9dmMoaCksZz1bMSwwLDBdLF89JHAocCxkKSx5PVBUKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD0kcChnLF8pLGs9SVQoZyxTKSxPPUlUKF8sQyk7UU4oayxPKTt2YXIgRD1QLEI9UFQoayxEKSxJPVBUKEQsRCksTD1CKkItSSooUFQoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPVJyKEwpLEY9SVQoRCwoLUItUikvSSk7aWYoUU4oRixrKSxGPU55KEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1ZZShvdC1ycik8Y2UsU3Q9c3R8fG90PGNlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoWWUoRlswXS16KTxjZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+cnJeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9SVQoRCwoLUIrUikvSSk7cmV0dXJuIFFOKGJ0LGspLFtGLE55KGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOnJyLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIGdEKGEscyxvLG4/WzAsLWVdOlstcnIsZS1ycl0pfXZhciBISj1NKCgpPT57QTIoKTt2SigpO2xyKCk7YkooKTtGSigpfSk7ZnVuY3Rpb24gTDl0KGUsdCxyLG4saSxvKXt2YXIgYT1lWzBdLHM9ZVsxXSxsPXRbMF0sYz10WzFdLHU9MCxoPTEsZj1sLWEscD1jLXMsZDtpZihkPXItYSwhKCFmJiZkPjApKXtpZihkLz1mLGY8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYoZj4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1pLWEsISghZiYmZDwwKSl7aWYoZC89ZixmPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKGY+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWlmKGQ9bi1zLCEoIXAmJmQ+MCkpe2lmKGQvPXAscDwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihwPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPW8tcywhKCFwJiZkPDApKXtpZihkLz1wLHA8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYocD4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9cmV0dXJuIHU+MCYmKGVbMF09YSt1KmYsZVsxXT1zK3UqcCksaDwxJiYodFswXT1hK2gqZix0WzFdPXMraCpwKSwhMH19fX19dmFyIGs5dD1NKCgpPT57fSk7ZnVuY3Rpb24gUXAoZSx0LHIsbil7ZnVuY3Rpb24gaShjLHUpe3JldHVybiBlPD1jJiZjPD1yJiZ0PD11JiZ1PD1ufWZ1bmN0aW9uIG8oYyx1LGgsZil7dmFyIHA9MCxkPTA7aWYoYz09bnVsbHx8KHA9YShjLGgpKSE9PShkPWEodSxoKSl8fGwoYyx1KTwwXmg+MClkbyBmLnBvaW50KHA9PT0wfHxwPT09Mz9lOnIscD4xP246dCk7d2hpbGUoKHA9KHAraCs0KSU0KSE9PWQpO2Vsc2UgZi5wb2ludCh1WzBdLHVbMV0pfWZ1bmN0aW9uIGEoYyx1KXtyZXR1cm4gWWUoY1swXS1lKTxjZT91PjA/MDozOlllKGNbMF0tcik8Y2U/dT4wPzI6MTpZZShjWzFdLXQpPGNlP3U+MD8xOjA6dT4wPzM6Mn1mdW5jdGlvbiBzKGMsdSl7cmV0dXJuIGwoYy54LHUueCl9ZnVuY3Rpb24gbChjLHUpe3ZhciBoPWEoYywxKSxmPWEodSwxKTtyZXR1cm4gaCE9PWY/aC1mOmg9PT0wP3VbMV0tY1sxXTpoPT09MT9jWzBdLXVbMF06aD09PTI/Y1sxXS11WzFdOnVbMF0tY1swXX1yZXR1cm4gZnVuY3Rpb24oYyl7dmFyIHU9YyxoPWNEKCksZixwLGQsZyxfLHkseCxiLFMsQyxQLGs9e3BvaW50Ok8sbGluZVN0YXJ0OkwsbGluZUVuZDpSLHBvbHlnb25TdGFydDpCLHBvbHlnb25FbmQ6SX07ZnVuY3Rpb24gTyh6LFUpe2koeixVKSYmdS5wb2ludCh6LFUpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHo9MCxVPTAsVz1wLmxlbmd0aDtVPFc7KytVKWZvcih2YXIgWj1wW1VdLHJ0PTEsb3Q9Wi5sZW5ndGgsc3Q9WlswXSxTdCxidCxNdD1zdFswXSxsdD1zdFsxXTtydDxvdDsrK3J0KVN0PU10LGJ0PWx0LHN0PVpbcnRdLE10PXN0WzBdLGx0PXN0WzFdLGJ0PD1uP2x0Pm4mJihNdC1TdCkqKG4tYnQpPihsdC1idCkqKGUtU3QpJiYrK3o6bHQ8PW4mJihNdC1TdCkqKG4tYnQpPChsdC1idCkqKGUtU3QpJiYtLXo7cmV0dXJuIHp9ZnVuY3Rpb24gQigpe3U9aCxmPVtdLHA9W10sUD0hMH1mdW5jdGlvbiBJKCl7dmFyIHo9RCgpLFU9UCYmeixXPShmPU9UKGYpKS5sZW5ndGg7KFV8fFcpJiYoYy5wb2x5Z29uU3RhcnQoKSxVJiYoYy5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpKSxXJiZoRChmLHMseixvLGMpLGMucG9seWdvbkVuZCgpKSx1PWMsZj1wPWQ9bnVsbH1mdW5jdGlvbiBMKCl7ay5wb2ludD1GLHAmJnAucHVzaChkPVtdKSxDPSEwLFM9ITEseD1iPU5hTn1mdW5jdGlvbiBSKCl7ZiYmKEYoZyxfKSx5JiZTJiZoLnJlam9pbigpLGYucHVzaChoLnJlc3VsdCgpKSksay5wb2ludD1PLFMmJnUubGluZUVuZCgpfWZ1bmN0aW9uIEYoeixVKXt2YXIgVz1pKHosVSk7aWYocCYmZC5wdXNoKFt6LFVdKSxDKWc9eixfPVUseT1XLEM9ITEsVyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpKTtlbHNlIGlmKFcmJlMpdS5wb2ludCh6LFUpO2Vsc2V7dmFyIFo9W3g9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQseCkpLGI9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQsYikpXSxydD1bej1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCx6KSksVT1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCxVKSldO0w5dChaLHJ0LGUsdCxyLG4pPyhTfHwodS5saW5lU3RhcnQoKSx1LnBvaW50KFpbMF0sWlsxXSkpLHUucG9pbnQocnRbMF0scnRbMV0pLFd8fHUubGluZUVuZCgpLFA9ITEpOlcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSxQPSExKX14PXosYj1VLFM9V31yZXR1cm4ga319dmFyIEZULHlELEJUPU0oKCk9PntscigpO3hKKCk7azl0KCk7d0ooKTttRCgpO0ZUPTFlOSx5RD0tRlR9KTtmdW5jdGlvbiBSOXQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9UXAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgTjl0PU0oKCk9PntCVCgpfSk7ZnVuY3Rpb24gbFBlKCl7azIucG9pbnQ9dVBlLGsyLmxpbmVFbmQ9Y1BlfWZ1bmN0aW9uIGNQZSgpe2syLnBvaW50PWsyLmxpbmVFbmQ9cXJ9ZnVuY3Rpb24gdVBlKGUsdCl7ZSo9d2UsdCo9d2UsVUo9ZSx2RD1KdCh0KSx4RD1hZSh0KSxrMi5wb2ludD1oUGV9ZnVuY3Rpb24gaFBlKGUsdCl7ZSo9d2UsdCo9d2U7dmFyIHI9SnQodCksbj1hZSh0KSxpPVllKGUtVUopLG89YWUoaSksYT1KdChpKSxzPW4qYSxsPXhEKnItdkQqbipvLGM9dkQqcit4RCpuKm87VkouYWRkKFNuKFJyKHMqcytsKmwpLGMpKSxVSj1lLHZEPXIseEQ9bn1mdW5jdGlvbiBiRChlKXtyZXR1cm4gVkoucmVzZXQoKSxNbyhlLGsyKSwrVkp9dmFyIFZKLFVKLHZELHhELGsyLHFKPU0oKCk9PntreSgpO2xyKCk7WHAoKTttZygpO1ZKPUNzKCksazI9e3NwaGVyZTpxcixwb2ludDpxcixsaW5lU3RhcnQ6bFBlLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OnFyLHBvbHlnb25FbmQ6cXJ9fSk7ZnVuY3Rpb24gQnkoZSx0KXtyZXR1cm4gR0pbMF09ZSxHSlsxXT10LGJEKGZQZSl9dmFyIEdKLGZQZSxXSj1NKCgpPT57cUooKTtHSj1bbnVsbCxudWxsXSxmUGU9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOkdKfX0pO2Z1bmN0aW9uIHdEKGUsdCl7cmV0dXJuIGUmJk85dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP085dFtlLnR5cGVdKGUsdCk6ITF9ZnVuY3Rpb24gejl0KGUsdCl7cmV0dXJuIEJ5KGUsdCk9PT0wfWZ1bmN0aW9uIEY5dChlLHQpe3ZhciByPUJ5KGVbMF0sZVsxXSksbj1CeShlWzBdLHQpLGk9QnkodCxlWzFdKTtyZXR1cm4gbitpPD1yK2NlfWZ1bmN0aW9uIEI5dChlLHQpe3JldHVybiEhZkQoZS5tYXAocFBlKSxIOXQodCkpfWZ1bmN0aW9uIHBQZShlKXtyZXR1cm4gZT1lLm1hcChIOXQpLGUucG9wKCksZX1mdW5jdGlvbiBIOXQoZSl7cmV0dXJuW2VbMF0qd2UsZVsxXSp3ZV19ZnVuY3Rpb24gVjl0KGUsdCl7cmV0dXJuKGUmJkQ5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0Q5dFtlLnR5cGVdOndEKShlLHQpfXZhciBEOXQsTzl0LFU5dD1NKCgpPT57TUooKTtXSigpO2xyKCk7RDl0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdEKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih3RChyW25dLmdlb21ldHJ5LHQpKXJldHVybiEwO3JldHVybiExfX0sTzl0PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gejl0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKHo5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEY5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEY5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEI5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEI5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYod0QocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19fSk7ZnVuY3Rpb24gcTl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gRzl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gU0QoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIEpwKENUKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSnAoQ1Qocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSnAoQ1QodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJXUpPmNlfSkubWFwKGYpKS5jb25jYXQoSnAoQ1Qoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJWgpPmNlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPXE5dChvLGksOTApLHA9Rzl0KHQsZSxfKSxkPXE5dChzLGEsOTApLGc9Rzl0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArY2VdLFsxODAsOTAtY2VdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1jZV0sWzE4MCw4MCtjZV1dKX1mdW5jdGlvbiBXOXQoKXtyZXR1cm4gU0QoKSgpfXZhciBZOXQ9TSgoKT0+e21EKCk7bHIoKX0pO2Z1bmN0aW9uIGo5dChlLHQpe3ZhciByPWVbMF0qd2Usbj1lWzFdKndlLGk9dFswXSp3ZSxvPXRbMV0qd2UsYT1hZShuKSxzPUp0KG4pLGw9YWUobyksYz1KdChvKSx1PWEqYWUociksaD1hKkp0KHIpLGY9bCphZShpKSxwPWwqSnQoaSksZD0yKlpuKFJyKG9KKG8tbikrYSpsKm9KKGktcikpKSxnPUp0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1KdCh5Kj1kKS9nLGI9SnQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltTbihDLFMpKlVyLFNuKFAsUnIoUypTK0MqQykpKlVyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipVcixuKlVyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffXZhciBYOXQ9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBuZihlKXtyZXR1cm4gZX12YXIgTUQ9TSgoKT0+e30pO2Z1bmN0aW9uIGRQZSgpe3lnLnBvaW50PW1QZX1mdW5jdGlvbiBtUGUoZSx0KXt5Zy5wb2ludD1aOXQsJDl0PVhKPWUsSzl0PSRKPXR9ZnVuY3Rpb24gWjl0KGUsdCl7akouYWRkKCRKKmUtWEoqdCksWEo9ZSwkSj10fWZ1bmN0aW9uIGdQZSgpe1o5dCgkOXQsSzl0KX12YXIgWUosakosJDl0LEs5dCxYSiwkSix5ZyxLSixKOXQ9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO1lKPUNzKCksako9Q3MoKSx5Zz17cG9pbnQ6cXIsbGluZVN0YXJ0OnFyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eWcubGluZVN0YXJ0PWRQZSx5Zy5saW5lRW5kPWdQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3lnLmxpbmVTdGFydD15Zy5saW5lRW5kPXlnLnBvaW50PXFyLFlKLmFkZChZZShqSikpLGpKLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVlKLzI7cmV0dXJuIFlKLnJlc2V0KCksZX19O0tKPXlnfSk7ZnVuY3Rpb24geVBlKGUsdCl7ZTxSMiYmKFIyPWUpLGU+SFQmJihIVD1lKSx0PEVEJiYoRUQ9dCksdD5URCYmKFREPXQpfXZhciBSMixFRCxIVCxURCxfUGUsTjIsWko9TSgoKT0+e1hwKCk7UjI9MS8wLEVEPVIyLEhUPS1SMixURD1IVCxfUGU9e3BvaW50OnlQZSxsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6cXIscG9seWdvbkVuZDpxcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW1IyLEVEXSxbSFQsVERdXTtyZXR1cm4gSFQ9VEQ9LShFRD1SMj0xLzApLGV9fTtOMj1fUGV9KTtmdW5jdGlvbiBIeShlLHQpe0pKKz1lLFFKKz10LCsrVlR9ZnVuY3Rpb24gUTl0KCl7Q3UucG9pbnQ9dlBlfWZ1bmN0aW9uIHZQZShlLHQpe0N1LnBvaW50PXhQZSxIeShvZj1lLGFmPXQpfWZ1bmN0aW9uIHhQZShlLHQpe3ZhciByPWUtb2Ysbj10LWFmLGk9UnIocipyK24qbik7Q0QrPWkqKG9mK2UpLzIsQUQrPWkqKGFmK3QpLzIsRDIrPWksSHkob2Y9ZSxhZj10KX1mdW5jdGlvbiB0THQoKXtDdS5wb2ludD1IeX1mdW5jdGlvbiBiUGUoKXtDdS5wb2ludD1TUGV9ZnVuY3Rpb24gd1BlKCl7bkx0KGVMdCxyTHQpfWZ1bmN0aW9uIFNQZShlLHQpe0N1LnBvaW50PW5MdCxIeShlTHQ9b2Y9ZSxyTHQ9YWY9dCl9ZnVuY3Rpb24gbkx0KGUsdCl7dmFyIHI9ZS1vZixuPXQtYWYsaT1ScihyKnIrbipuKTtDRCs9aSoob2YrZSkvMixBRCs9aSooYWYrdCkvMixEMis9aSxpPWFmKmUtb2YqdCx0USs9aSoob2YrZSksZVErPWkqKGFmK3QpLFVUKz1pKjMsSHkob2Y9ZSxhZj10KX12YXIgSkosUUosVlQsQ0QsQUQsRDIsdFEsZVEsVVQsZUx0LHJMdCxvZixhZixDdSxyUSxpTHQ9TSgoKT0+e2xyKCk7Sko9MCxRSj0wLFZUPTAsQ0Q9MCxBRD0wLEQyPTAsdFE9MCxlUT0wLFVUPTAsQ3U9e3BvaW50Okh5LGxpbmVTdGFydDpROXQsbGluZUVuZDp0THQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q3UubGluZVN0YXJ0PWJQZSxDdS5saW5lRW5kPXdQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0N1LnBvaW50PUh5LEN1LmxpbmVTdGFydD1ROXQsQ3UubGluZUVuZD10THR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVVUP1t0US9VVCxlUS9VVF06RDI/W0NEL0QyLEFEL0QyXTpWVD9bSkovVlQsUUovVlRdOltOYU4sTmFOXTtyZXR1cm4gSko9UUo9VlQ9Q0Q9QUQ9RDI9dFE9ZVE9VVQ9MCxlfX07clE9Q3V9KTtmdW5jdGlvbiBQRChlKXt0aGlzLl9jb250ZXh0PWV9dmFyIG9MdD1NKCgpPT57bHIoKTtYcCgpO1BELnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxCaSk7YnJlYWt9fX0scmVzdWx0OnFyfX0pO2Z1bmN0aW9uIE1QZShlLHQpe0lELnBvaW50PWxMdCxhTHQ9cVQ9ZSxzTHQ9R1Q9dH1mdW5jdGlvbiBsTHQoZSx0KXtxVC09ZSxHVC09dCxpUS5hZGQoUnIocVQqcVQrR1QqR1QpKSxxVD1lLEdUPXR9dmFyIGlRLG5RLGFMdCxzTHQscVQsR1QsSUQsb1EsY0x0PU0oKCk9PntreSgpO2xyKCk7WHAoKTtpUT1DcygpLElEPXtwb2ludDpxcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtJRC5wb2ludD1NUGV9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuUSYmbEx0KGFMdCxzTHQpLElELnBvaW50PXFyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuUT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe25RPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStpUTtyZXR1cm4gaVEucmVzZXQoKSxlfX07b1E9SUR9KTtmdW5jdGlvbiBMRCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB1THQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dmFyIGhMdD1NKCgpPT57TEQucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOnVMdCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPXVMdCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19fSk7ZnVuY3Rpb24gZkx0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxNbyhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihLSikpLEtKLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihvUSkpLG9RLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gTW8oYSxuKE4yKSksTjIucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihyUSkpLHJRLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLG5mKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgTEQpOm5ldyBQRCh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfXZhciBwTHQ9TSgoKT0+e01EKCk7bWcoKTtKOXQoKTtaSigpO2lMdCgpO29MdCgpO2NMdCgpO2hMdCgpfSk7ZnVuY3Rpb24gZEx0KGUpe3JldHVybntzdHJlYW06dmcoZSl9fWZ1bmN0aW9uIHZnKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgYVE7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIGFRKCl7fXZhciBXVD1NKCgpPT57YVEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphUSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fX0pO2Z1bmN0aW9uIHNRKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksTW8ocixlLnN0cmVhbShOMikpLHQoTjIucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFZ5KGUsdCxyKXtyZXR1cm4gc1EoZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gTzIoZSx0LHIpe3JldHVybiBWeShlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiB6MihlLHQscil7cmV0dXJuIHNRKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gRjIoZSx0LHIpe3JldHVybiBzUShlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBrRD1NKCgpPT57bWcoKTtaSigpfSk7ZnVuY3Rpb24gbFEoZSx0KXtyZXR1cm4rdD9DUGUoZSx0KTpUUGUoZSl9ZnVuY3Rpb24gVFBlKGUpe3JldHVybiB2Zyh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt0PWUodCxyKSx0aGlzLnN0cmVhbS5wb2ludCh0WzBdLHRbMV0pfX0pfWZ1bmN0aW9uIENQZShlLHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfKXt2YXIgeT1jLW4seD11LWksYj15KnkreCp4O2lmKGI+NCp0JiZnLS0pe3ZhciBTPWErZixDPXMrcCxQPWwrZCxrPVJyKFMqUytDKkMrUCpQKSxPPVpuKFAvPWspLEQ9WWUoWWUoUCktMSk8Y2V8fFllKG8taCk8Y2U/KG8raCkvMjpTbihDLFMpLEI9ZShELE8pLEk9QlswXSxMPUJbMV0sUj1JLW4sRj1MLWksej14KlIteSpGOyh6KnovYj50fHxZZSgoeSpSK3gqRikvYi0uNSk+LjN8fGEqZitzKnArbCpkPEVQZSkmJihyKG4saSxvLGEscyxsLEksTCxELFMvPWssQy89ayxQLGcsXyksXy5wb2ludChJLEwpLHIoSSxMLEQsUyxDLFAsYyx1LGgsZixwLGQsZyxfKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgaSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXz17cG9pbnQ6eSxsaW5lU3RhcnQ6eCxsaW5lRW5kOlMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSxfLmxpbmVTdGFydD1DfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksXy5saW5lU3RhcnQ9eH19O2Z1bmN0aW9uIHkoTyxEKXtPPWUoTyxEKSxuLnBvaW50KE9bMF0sT1sxXSl9ZnVuY3Rpb24geCgpe2g9TmFOLF8ucG9pbnQ9YixuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoTyxEKXt2YXIgQj12YyhbTyxEXSksST1lKE8sRCk7cihoLGYsdSxwLGQsZyxoPUlbMF0sZj1JWzFdLHU9TyxwPUJbMF0sZD1CWzFdLGc9QlsyXSxtTHQsbiksbi5wb2ludChoLGYpfWZ1bmN0aW9uIFMoKXtfLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gQygpe3goKSxfLnBvaW50PVAsXy5saW5lRW5kPWt9ZnVuY3Rpb24gUChPLEQpe2IoaT1PLEQpLG89aCxhPWYscz1wLGw9ZCxjPWcsXy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtyKGgsZix1LHAsZCxnLG8sYSxpLHMsbCxjLG1MdCxuKSxfLmxpbmVFbmQ9UyxTKCl9cmV0dXJuIF99fXZhciBtTHQsRVBlLGdMdD1NKCgpPT57QTIoKTtscigpO1dUKCk7bUx0PTE2LEVQZT1hZSgzMCp3ZSl9KTtmdW5jdGlvbiBQUGUoZSl7cmV0dXJuIHZnKHtwb2ludDpmdW5jdGlvbih0LHIpe3ZhciBuPWUodCxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gWVQoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9ZnVuY3Rpb24gWVQoZSl7dmFyIHQscj0xNTAsbj00ODAsaT0yNTAsbyxhLHM9MCxsPTAsYz0wLHU9MCxoPTAsZixwLGQ9bnVsbCxnPXpULF89bnVsbCx5LHgsYixTPW5mLEM9LjUsUD1sUShJLEMpLGssTztmdW5jdGlvbiBEKEYpe3JldHVybiBGPXAoRlswXSp3ZSxGWzFdKndlKSxbRlswXSpyK28sYS1GWzFdKnJdfWZ1bmN0aW9uIEIoRil7cmV0dXJuIEY9cC5pbnZlcnQoKEZbMF0tbykvciwoYS1GWzFdKS9yKSxGJiZbRlswXSpVcixGWzFdKlVyXX1mdW5jdGlvbiBJKEYseil7cmV0dXJuIEY9dChGLHopLFtGWzBdKnIrbyxhLUZbMV0qcl19RC5zdHJlYW09ZnVuY3Rpb24oRil7cmV0dXJuIGsmJk89PT1GP2s6az1BUGUoUFBlKGYpKGcoUChTKE89RikpKSkpfSxELnByZWNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9RixkPXZvaWQgMCxSKCkpOmd9LEQucG9zdGNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9RixfPXk9eD1iPW51bGwsUigpKTpTfSxELmNsaXBBbmdsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rRj9fRChkPUYqd2UpOihkPW51bGwselQpLFIoKSk6ZCpVcn0sRC5jbGlwRXh0ZW50PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPUY9PW51bGw/KF89eT14PWI9bnVsbCxuZik6UXAoXz0rRlswXVswXSx5PStGWzBdWzFdLHg9K0ZbMV1bMF0sYj0rRlsxXVsxXSksUigpKTpfPT1udWxsP251bGw6W1tfLHldLFt4LGJdXX0sRC5zY2FsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rRixMKCkpOnJ9LEQudHJhbnNsYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStGWzBdLGk9K0ZbMV0sTCgpKTpbbixpXX0sRC5jZW50ZXI9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RlswXSUzNjAqd2UsbD1GWzFdJTM2MCp3ZSxMKCkpOltzKlVyLGwqVXJdfSxELnJvdGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1GWzBdJTM2MCp3ZSx1PUZbMV0lMzYwKndlLGg9Ri5sZW5ndGg+Mj9GWzJdJTM2MCp3ZTowLEwoKSk6W2MqVXIsdSpVcixoKlVyXX0sRC5wcmVjaXNpb249ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9bFEoSSxDPUYqRiksUigpKTpScihDKX0sRC5maXRFeHRlbnQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gVnkoRCxGLHopfSxELmZpdFNpemU9ZnVuY3Rpb24oRix6KXtyZXR1cm4gTzIoRCxGLHopfSxELmZpdFdpZHRoPWZ1bmN0aW9uKEYseil7cmV0dXJuIHoyKEQsRix6KX0sRC5maXRIZWlnaHQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gRjIoRCxGLHopfTtmdW5jdGlvbiBMKCl7cD1zRChmPU5UKGMsdSxoKSx0KTt2YXIgRj10KHMsbCk7cmV0dXJuIG89bi1GWzBdKnIsYT1pK0ZbMV0qcixSKCl9ZnVuY3Rpb24gUigpe3JldHVybiBrPU89bnVsbCxEfXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQuaW52ZXJ0PXQuaW52ZXJ0JiZCLEwoKX19dmFyIEFQZSxBdT1NKCgpPT57QkooKTtISigpO0JUKCk7Z0ooKTtNRCgpO2xyKCk7RFQoKTtXVCgpO2tEKCk7Z0x0KCk7QVBlPXZnKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqd2UsdCp3ZSl9fSl9KTtmdW5jdGlvbiBCMihlKXt2YXIgdD0wLHI9cnIvMyxuPVlUKGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp3ZSxyPW9bMV0qd2UpOlt0KlVyLHIqVXJdfSxpfXZhciBSRD1NKCgpPT57bHIoKTtBdSgpfSk7ZnVuY3Rpb24gX0x0KGUpe3ZhciB0PWFlKGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LEp0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3QsWm4oaSp0KV19LHJ9dmFyIHlMdD1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGNRKGUsdCl7dmFyIHI9SnQoZSksbj0ocitKdCh0KSkvMjtpZihZZShuKTxjZSlyZXR1cm4gX0x0KGUpO3ZhciBpPTErciooMipuLXIpLG89UnIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9UnIoaS0yKm4qSnQobCkpL247cmV0dXJuW2MqSnQocyo9biksby1jKmFlKHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWw7cmV0dXJuW1NuKHMsWWUoYykpL24qZGcoYyksWm4oKGktKHMqcytjKmMpKm4qbikvKDIqbikpXX0sYX1mdW5jdGlvbiBVeSgpe3JldHVybiBCMihjUSkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX12YXIgTkQ9TSgoKT0+e2xyKCk7UkQoKTt5THQoKX0pO2Z1bmN0aW9uIEREKCl7cmV0dXJuIFV5KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9dmFyIHVRPU0oKCk9PntORCgpfSk7ZnVuY3Rpb24gSVBlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiB2THQoKXt2YXIgZSx0LHI9REQoKSxuLGk9VXkoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1VeSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1JUGUoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2NlLGcrLjEyKnArY2VdLFtkLS4yMTQqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArY2UsZysuMTY2KnArY2VdLFtkLS4xMTUqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBWeSh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBPMih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gejIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBGMih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX12YXIgeEx0PU0oKCk9PntscigpO3VRKCk7TkQoKTtrRCgpfSk7ZnVuY3Rpb24gT0QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49YWUodCksaT1hZShyKSxvPWUobippKTtyZXR1cm5bbyppKkp0KHQpLG8qSnQocildfX1mdW5jdGlvbiBzZihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1Scih0KnQrcipyKSxpPWUobiksbz1KdChpKSxhPWFlKGkpO3JldHVybltTbih0Km8sbiphKSxabihuJiZyKm8vbildfX12YXIgSDI9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBiTHQoKXtyZXR1cm4gZW8oekQpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE4MC0uMDAxKX12YXIgekQsd0x0PU0oKCk9PntscigpO0gyKCk7QXUoKTt6RD1PRChmdW5jdGlvbihlKXtyZXR1cm4gUnIoMi8oMStlKSl9KTt6RC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqWm4oZS8yKX0pfSk7ZnVuY3Rpb24gU0x0KCl7cmV0dXJuIGVvKEZEKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBGRCxNTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO0ZEPU9EKGZ1bmN0aW9uKGUpe3JldHVybihlPUtOKGUpKSYmZS9KdChlKX0pO0ZELmludmVydD1zZihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSk7ZnVuY3Rpb24gcXkoZSx0KXtyZXR1cm5bZSxSeShDMigoRm4rdCkvMikpXX1mdW5jdGlvbiBFTHQoKXtyZXR1cm4gaFEocXkpLnNjYWxlKDk2MS9CaSl9ZnVuY3Rpb24gaFEoZSl7dmFyIHQ9ZW8oZSkscj10LmNlbnRlcixuPXQuc2NhbGUsaT10LnRyYW5zbGF0ZSxvPXQuY2xpcEV4dGVudCxhPW51bGwscyxsLGM7dC5zY2FsZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obihoKSx1KCkpOm4oKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkoaCksdSgpKTppKCl9LHQuY2VudGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKGgpLHUoKSk6cigpfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9PW51bGw/YT1zPWw9Yz1udWxsOihhPStoWzBdWzBdLHM9K2hbMF1bMV0sbD0raFsxXVswXSxjPStoWzFdWzFdKSx1KCkpOmE9PW51bGw/bnVsbDpbW2Esc10sW2wsY11dfTtmdW5jdGlvbiB1KCl7dmFyIGg9cnIqbigpLGY9dChsRCh0LnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbyhhPT1udWxsP1tbZlswXS1oLGZbMV0taF0sW2ZbMF0raCxmWzFdK2hdXTplPT09cXk/W1tNYXRoLm1heChmWzBdLWgsYSksc10sW01hdGgubWluKGZbMF0raCxsKSxjXV06W1thLE1hdGgubWF4KGZbMV0taCxzKV0sW2wsTWF0aC5taW4oZlsxXStoLGMpXV0pfXJldHVybiB1KCl9dmFyIEJEPU0oKCk9PntscigpO0RUKCk7QXUoKTtxeS5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKnljKFhOKHQpKS1Gbl19fSk7ZnVuY3Rpb24gSEQoZSl7cmV0dXJuIEMyKChGbitlKS8yKX1mdW5jdGlvbiBmUShlLHQpe3ZhciByPWFlKGUpLG49ZT09PXQ/SnQoZSk6Unkoci9hZSh0KSkvUnkoSEQodCkvSEQoZSkpLGk9ciokTihIRChlKSxuKS9uO2lmKCFuKXJldHVybiBxeTtmdW5jdGlvbiBvKGEscyl7aT4wP3M8LUZuK2NlJiYocz0tRm4rY2UpOnM+Rm4tY2UmJihzPUZuLWNlKTt2YXIgbD1pLyROKEhEKHMpLG4pO3JldHVybltsKkp0KG4qYSksaS1sKmFlKG4qYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWRnKG4pKlJyKGEqYStsKmwpO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLDIqeWMoJE4oaS9jLDEvbikpLUZuXX0sb31mdW5jdGlvbiBUTHQoKXtyZXR1cm4gQjIoZlEpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9dmFyIENMdD1NKCgpPT57bHIoKTtSRCgpO0JEKCl9KTtmdW5jdGlvbiBHeShlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIEFMdCgpe3JldHVybiBlbyhHeSkuc2NhbGUoMTUyLjYzKX12YXIgcFE9TSgoKT0+e0F1KCk7R3kuaW52ZXJ0PUd5fSk7ZnVuY3Rpb24gZFEoZSx0KXt2YXIgcj1hZShlKSxuPWU9PT10P0p0KGUpOihyLWFlKHQpKS8odC1lKSxpPXIvbitlO2lmKFllKG4pPGNlKXJldHVybiBHeTtmdW5jdGlvbiBvKGEscyl7dmFyIGw9aS1zLGM9biphO3JldHVybltsKkp0KGMpLGktbCphZShjKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLGktZGcobikqUnIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIFBMdCgpe3JldHVybiBCMihkUSkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgSUx0PU0oKCk9PntscigpO1JEKCk7cFEoKX0pO2Z1bmN0aW9uIFZEKGUsdCl7dmFyIHI9YWUodCksbj1hZShlKSpyO3JldHVybltyKkp0KGUpL24sSnQodCkvbl19ZnVuY3Rpb24gTEx0KCl7cmV0dXJuIGVvKFZEKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfXZhciBrTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO1ZELmludmVydD1zZih5Yyl9KTtmdW5jdGlvbiBVRChlLHQscixuKXtyZXR1cm4gZT09PTEmJnQ9PT0xJiZyPT09MCYmbj09PTA/bmY6dmcoe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSplK3Isbyp0K24pfX0pfWZ1bmN0aW9uIFJMdCgpe3ZhciBlPTEsdD0wLHI9MCxuPTEsaT0xLG89bmYsYT1udWxsLHMsbCxjLHU9bmYsaCxmLHA7ZnVuY3Rpb24gZCgpe3JldHVybiBoPWY9bnVsbCxwfXJldHVybiBwPXtzdHJlYW06ZnVuY3Rpb24oZyl7cmV0dXJuIGgmJmY9PT1nP2g6aD1vKHUoZj1nKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWcsYT1zPWw9Yz1udWxsLGQoKSk6dX0sY2xpcEV4dGVudDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1nPT1udWxsPyhhPXM9bD1jPW51bGwsbmYpOlFwKGE9K2dbMF1bMF0scz0rZ1swXVsxXSxsPStnWzFdWzBdLGM9K2dbMV1bMV0pLGQoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19LHNjYWxlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKChlPStnKSpuLGUqaSx0LHIpLGQoKSk6ZX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKmksdD0rZ1swXSxyPStnWzFdKSxkKCkpOlt0LHJdfSxyZWZsZWN0WDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1VRChlKihuPWc/LTE6MSksZSppLHQsciksZCgpKTpuPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKihpPWc/LTE6MSksdCxyKSxkKCkpOmk8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIFZ5KHAsZyxfKX0sZml0U2l6ZTpmdW5jdGlvbihnLF8pe3JldHVybiBPMihwLGcsXyl9LGZpdFdpZHRoOmZ1bmN0aW9uKGcsXyl7cmV0dXJuIHoyKHAsZyxfKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIEYyKHAsZyxfKX19fXZhciBOTHQ9TSgoKT0+e0JUKCk7TUQoKTtXVCgpO2tEKCl9KTtmdW5jdGlvbiBxRChlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBETHQoKXtyZXR1cm4gZW8ocUQpLnNjYWxlKDE3NS4yOTUpfXZhciBPTHQ9TSgoKT0+e0F1KCk7bHIoKTtxRC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWWUoaSk+Y2UmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX19KTtmdW5jdGlvbiBHRChlLHQpe3JldHVyblthZSh0KSpKdChlKSxKdCh0KV19ZnVuY3Rpb24gekx0KCl7cmV0dXJuIGVvKEdEKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2NlKX12YXIgRkx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtHRC5pbnZlcnQ9c2YoWm4pfSk7ZnVuY3Rpb24gV0QoZSx0KXt2YXIgcj1hZSh0KSxuPTErYWUoZSkqcjtyZXR1cm5bcipKdChlKS9uLEp0KHQpL25dfWZ1bmN0aW9uIEJMdCgpe3JldHVybiBlbyhXRCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX12YXIgSEx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtXRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqeWMoZSl9KX0pO2Z1bmN0aW9uIFlEKGUsdCl7cmV0dXJuW1J5KEMyKChGbit0KS8yKSksLWVdfWZ1bmN0aW9uIFZMdCgpe3ZhciBlPWhRKFlEKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9dmFyIFVMdD1NKCgpPT57bHIoKTtCRCgpO1lELmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKnljKFhOKGUpKS1Gbl19fSk7dmFyIHFMdD1NKCgpPT57dUooKTtaSXQoKTtpOXQoKTt2SigpO0JKKCk7SEooKTtOOXQoKTtCVCgpO1U5dCgpO1dKKCk7WTl0KCk7WDl0KCk7cUooKTtwTHQoKTt1USgpO3hMdCgpO3dMdCgpO01MdCgpO0NMdCgpO05EKCk7SUx0KCk7cFEoKTtrTHQoKTtOTHQoKTtBdSgpO0JEKCk7T0x0KCk7Rkx0KCk7SEx0KCk7VUx0KCk7RFQoKTttZygpO1dUKCl9KTtmdW5jdGlvbiBMUGUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24ga1BlKGUpe3JldHVybiBlLnJlZHVjZShSUGUsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gUlBlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIE5QZShlKXtyZXR1cm4gMStlLnJlZHVjZShEUGUsMCl9ZnVuY3Rpb24gRFBlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBPUGUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIHpQZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gR0x0KCl7dmFyIGU9TFBlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1rUGUocCksZi55PU5QZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1PUGUobyksYz16UGUobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9dmFyIFdMdD1NKCgpPT57fSk7ZnVuY3Rpb24gRlBlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFlMdCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihGUGUpfXZhciBqTHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhMdChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc312YXIgJEx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc312YXIgWkx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9dmFyIFFMdD1NKCgpPT57fSk7ZnVuY3Rpb24gdGt0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9dmFyIGVrdD1NKCgpPT57fSk7ZnVuY3Rpb24gcmt0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9dmFyIG5rdD1NKCgpPT57fSk7ZnVuY3Rpb24gaWt0KGUpe2Zvcih2YXIgdD10aGlzLHI9QlBlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gQlBlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX12YXIgb2t0PU0oKCk9Pnt9KTtmdW5jdGlvbiBha3QoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9dmFyIHNrdD1NKCgpPT57fSk7ZnVuY3Rpb24gbGt0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfXZhciBja3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHVrdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX12YXIgaGt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBma3QoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9dmFyIHBrdD1NKCgpPT57fSk7ZnVuY3Rpb24galQoZSx0KXt2YXIgcj1uZXcgeGcoZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD1WUGUpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyB4ZyhzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKG1RKX1mdW5jdGlvbiBIUGUoKXtyZXR1cm4galQodGhpcykuZWFjaEJlZm9yZShVUGUpfWZ1bmN0aW9uIFZQZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBVUGUoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIG1RKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24geGcoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dmFyIGpEPU0oKCk9PntqTHQoKTskTHQoKTtaTHQoKTtRTHQoKTtla3QoKTtua3QoKTtva3QoKTtza3QoKTtja3QoKTtoa3QoKTtwa3QoKTt4Zy5wcm90b3R5cGU9alQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4Zyxjb3VudDpZTHQsZWFjaDpYTHQsZWFjaEFmdGVyOkpMdCxlYWNoQmVmb3JlOktMdCxzdW06dGt0LHNvcnQ6cmt0LHBhdGg6aWt0LGFuY2VzdG9yczpha3QsZGVzY2VuZGFudHM6bGt0LGxlYXZlczp1a3QsbGlua3M6Zmt0LGNvcHk6SFBlfX0pO2Z1bmN0aW9uIG1rdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX12YXIgZGt0LGdrdD1NKCgpPT57ZGt0PUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uICREKGUpe2Zvcih2YXIgdD0wLHI9KGU9bWt0KGRrdC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJl9rdChvLGkpPysrdDoobz1HUGUobj1xUGUobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBxUGUoZSx0KXt2YXIgcixuO2lmKGdRKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoWEQodCxlW3JdKSYmZ1EoWFQoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKFhEKFhUKGVbcl0sZVtuXSksdCkmJlhEKFhUKGVbcl0sdCksZVtuXSkmJlhEKFhUKGVbbl0sdCksZVtyXSkmJmdRKHlrdChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gWEQoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gX2t0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZ1EoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighX2t0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gR1BlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBXUGUoZVswXSk7Y2FzZSAyOnJldHVybiBYVChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4geWt0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gV1BlKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gWFQoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHlrdChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fXZhciBfUT1NKCgpPT57Z2t0KCl9KTtmdW5jdGlvbiB2a3QoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPXQucityLnIsYT1lLnIrci5yLHM9dC54LW4sbD10LnktaSxjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO3IueD1uK3UqcytoKmwsci55PWkrdSpsLWgqc31lbHNlIHIueD1uK2Esci55PWl9ZnVuY3Rpb24geGt0KGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksaT1lLnIrdC5yO3JldHVybiBpKmktMWUtNj5yKnIrbipufWZ1bmN0aW9uIGJrdChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBLRChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24geVEoZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7dmt0KHIsdCxuPWVbMl0pLHQ9bmV3IEtEKHQpLHI9bmV3IEtEKHIpLG49bmV3IEtEKG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXt2a3QodC5fLHIuXyxuPWVbc10pLG49bmV3IEtEKG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYoeGt0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoeGt0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPWJrdCh0KTsobj1uLm5leHQpIT09cjspKGE9Ymt0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj0kRCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiB3a3QoZSl7cmV0dXJuIHlRKGUpLGV9dmFyIHZRPU0oKCk9PntfUSgpfSk7ZnVuY3Rpb24gU2t0KGUpe3JldHVybiBlPT1udWxsP251bGw6VjIoZSl9ZnVuY3Rpb24gVjIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfXZhciBaRD1NKCgpPT57fSk7ZnVuY3Rpb24gdGQoKXtyZXR1cm4gMH1mdW5jdGlvbiBiZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHhRPU0oKCk9Pnt9KTtmdW5jdGlvbiBZUGUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBUa3QoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj10ZDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoTWt0KGUpKS5lYWNoQWZ0ZXIoYlEobiwuNSkpLmVhY2hCZWZvcmUoRWt0KDEpKTpvLmVhY2hCZWZvcmUoTWt0KFlQZSkpLmVhY2hBZnRlcihiUSh0ZCwxKSkuZWFjaEFmdGVyKGJRKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKEVrdChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Ta3QobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOmJnKCtvKSxpKTpufSxpfWZ1bmN0aW9uIE1rdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIGJRKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9eVEobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBFa3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19dmFyIENrdD1NKCgpPT57dlEoKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBKRChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9dmFyIHdRPU0oKCk9Pnt9KTtmdW5jdGlvbiBsZihlLHQscixuLGkpe2Zvcih2YXIgbz1lLmNoaWxkcmVuLGEscz0tMSxsPW8ubGVuZ3RoLGM9ZS52YWx1ZSYmKG4tdCkvZS52YWx1ZTsrK3M8bDspYT1vW3NdLGEueTA9cixhLnkxPWksYS54MD10LGEueDE9dCs9YS52YWx1ZSpjfXZhciBVMj1NKCgpPT57fSk7ZnVuY3Rpb24gQWt0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKEpEKSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmbGYobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIFBrdD1NKCgpPT57d1EoKTtVMigpfSk7ZnVuY3Rpb24gWFBlKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uICRQZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBra3QoKXt2YXIgZT1YUGUsdD0kUGU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IHhnKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9SWt0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP0xrdDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtJa3QraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1Ma3QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1qUGUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKG1RKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1WMihuKSxyKTp0fSxyfXZhciBJa3QsalBlLExrdCxSa3Q9TSgoKT0+e1pEKCk7akQoKTtJa3Q9IiQiLGpQZT17ZGVwdGg6LTF9LExrdD17fX0pO2Z1bmN0aW9uIEtQZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBTUShlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIE1RKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24gWlBlKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIEpQZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiBRUGUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gUUQoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1mdW5jdGlvbiB0NmUoZSl7Zm9yKHZhciB0PW5ldyBRRChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBRRChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgUUQobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gTmt0KCl7dmFyIGU9S1BlLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9dDZlKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe0pQZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD1NUShkKSxmPVNRKGYpLGQmJmY7KWc9U1EoZykscD1NUShwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoWlBlKFFQZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhTVEocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVNRKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfXZhciBEa3Q9TSgoKT0+e2pEKCk7UUQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGcucHJvdG90eXBlKX0pO2Z1bmN0aW9uIHdnKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyICRUPU0oKCk9Pnt9KTtmdW5jdGlvbiBUUShlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/bGYobCxyLG4saSxnP24rPWQqXy9nOm8pOndnKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgRVEsdE8sZU89TSgoKT0+e1UyKCk7JFQoKTtFUT0oMStNYXRoLnNxcnQoNSkpLzI7dE89ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7VFEodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KEVRKX0pO2Z1bmN0aW9uIE9rdCgpe3ZhciBlPXRPLHQ9ITEscj0xLG49MSxpPVswXSxvPXRkLGE9dGQscz10ZCxsPXRkLGM9dGQ7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKEpEKSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpiZygrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpjfSx1fXZhciB6a3Q9TSgoKT0+e3dRKCk7ZU8oKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBGa3QoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX12YXIgQmt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIa3QoZSx0LHIsbixpKXsoZS5kZXB0aCYxP3dnOmxmKShlLHQscixuLGkpfXZhciBWa3Q9TSgoKT0+e1UyKCk7JFQoKX0pO3ZhciBVa3QscWt0PU0oKCk9PntVMigpOyRUKCk7ZU8oKTtVa3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP2xmKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTp3ZyhjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9VFEodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShFUSl9KTt2YXIgR2t0PU0oKCk9PntXTHQoKTtqRCgpO0NrdCgpO3ZRKCk7X1EoKTtQa3QoKTtSa3QoKTtEa3QoKTt6a3QoKTtCa3QoKTtVMigpOyRUKCk7Vmt0KCk7ZU8oKTtxa3QoKX0pO2Z1bmN0aW9uIGVkKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBTZyhlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgck89TSgoKT0+e30pO2Z1bmN0aW9uIGhmKCl7fWZ1bmN0aW9uIFlrdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGw2ZSgpe3JldHVybiBKa3QodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gamt0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gRWcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9ZTZlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/WGt0KHQpOnI9PT0zP25ldyBybyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/bk8odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/bk8odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1yNmUuZXhlYyhlKSk/bmV3IHJvKHRbMV0sdFsyXSx0WzNdLDEpOih0PW42ZS5leGVjKGUpKT9uZXcgcm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9aTZlLmV4ZWMoZSkpP25PKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PW82ZS5leGVjKGUpKT9uTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1hNmUuZXhlYyhlKSk/Wmt0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9czZlLmV4ZWMoZSkpP1prdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOldrdC5oYXNPd25Qcm9wZXJ0eShlKT9Ya3QoV2t0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgcm8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBYa3QoZSl7cmV0dXJuIG5ldyBybyhlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gbk8oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBybyhlLHQscixuKX1mdW5jdGlvbiBaVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksZT8oZT1lLnJnYigpLG5ldyBybyhlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgcm99ZnVuY3Rpb24gRzIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1pUKGUpOm5ldyBybyhlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcm8oZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRrdCgpe3JldHVybiIjIitDUSh0aGlzLnIpK0NRKHRoaXMuZykrQ1EodGhpcy5iKX1mdW5jdGlvbiBLa3QoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gQ1EoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gWmt0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgY2YoZSx0LHIsbil9ZnVuY3Rpb24gSmt0KGUpe2lmKGUgaW5zdGFuY2VvZiBjZilyZXR1cm4gbmV3IGNmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksIWUpcmV0dXJuIG5ldyBjZjtpZihlIGluc3RhbmNlb2YgY2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgY2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Smt0KGUpOm5ldyBjZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gY2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEFRKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBNZyxXeSxxMixLVCx1ZixlNmUscjZlLG42ZSxpNmUsbzZlLGE2ZSxzNmUsV2t0LGlPPU0oKCk9PntyTygpO01nPS43LFd5PTEvTWcscTI9IlxccyooWystXT9cXGQrKVxccyoiLEtUPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHVmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixlNmU9L14jKFswLTlhLWZdezMsOH0pJC8scjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1txMixxMixxMl0rIlxcKSQiKSxuNmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3VmLHVmLHVmXSsiXFwpJCIpLGk2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3EyLHEyLHEyLEtUXSsiXFwpJCIpLG82ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3VmLHVmLHVmLEtUXSsiXFwpJCIpLGE2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbS1QsdWYsdWZdKyJcXCkkIiksczZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbS1QsdWYsdWYsS1RdKyJcXCkkIiksV2t0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2VkKGhmLEVnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OllrdCxmb3JtYXRIZXg6WWt0LGZvcm1hdEhzbDpsNmUsZm9ybWF0UmdiOmprdCx0b1N0cmluZzpqa3R9KTtlZChybyxHMixTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9XeTpNYXRoLnBvdyhXeSxlKSxuZXcgcm8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IHJvKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6JGt0LGZvcm1hdEhleDoka3QsZm9ybWF0UmdiOktrdCx0b1N0cmluZzpLa3R9KSk7ZWQoY2YsSlQsU2coaGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/V3k6TWF0aC5wb3coV3ksZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgcm8oQVEoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksQVEoZSxpLG4pLEFRKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIG9PLGFPLFBRPU0oKCk9PntvTz1NYXRoLlBJLzE4MCxhTz0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIGk4dChlKXtpZihlIGluc3RhbmNlb2YgZmYpcmV0dXJuIG5ldyBmZihlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiByZClyZXR1cm4gbzh0KGUpO2UgaW5zdGFuY2VvZiByb3x8KGU9WlQoZSkpO3ZhciB0PVJRKGUucikscj1SUShlLmcpLG49UlEoZS5iKSxpPUlRKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvdDh0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1JUSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL1FrdCksYT1JUSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL2U4dCkpLG5ldyBmZigxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gWTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2k4dChlKTpuZXcgZmYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGZmKGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBJUShlKXtyZXR1cm4gZT5jNmU/TWF0aC5wb3coZSwxLzMpOmUvbjh0K3I4dH1mdW5jdGlvbiBMUShlKXtyZXR1cm4gZT5XMj9lKmUqZTpuOHQqKGUtcjh0KX1mdW5jdGlvbiBrUShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFJRKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHU2ZShlKXtpZihlIGluc3RhbmNlb2YgcmQpcmV0dXJuIG5ldyByZChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBmZnx8KGU9aTh0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgcmQoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqYU87cmV0dXJuIG5ldyByZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBRVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dTZlKGUpOm5ldyByZChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcmQoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG84dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgZmYoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCpvTztyZXR1cm4gbmV3IGZmKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9dmFyIHNPLFFrdCx0OHQsZTh0LHI4dCxXMixuOHQsYzZlLGE4dD1NKCgpPT57ck8oKTtpTygpO1BRKCk7c089MTgsUWt0PS45NjQyMix0OHQ9MSxlOHQ9LjgyNTIxLHI4dD00LzI5LFcyPTYvMjksbjh0PTMqVzIqVzIsYzZlPVcyKlcyKlcyO2VkKGZmLFkyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZmKHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZmYodGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD1Ra3QqTFEodCksZT10OHQqTFEoZSkscj1lOHQqTFEociksbmV3IHJvKGtRKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLGtRKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksa1EoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtlZChyZCxRVCxTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByZCh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJkKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG84dCh0aGlzKS5yZ2IoKX19KSl9KTtmdW5jdGlvbiBoNmUoZSl7aWYoZSBpbnN0YW5jZW9mIFl5KXJldHVybiBuZXcgWXkoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2Ygcm98fChlPVpUKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oYzh0Km4rczh0KnQtbDh0KnIpLyhjOHQrczh0LWw4dCksbz1uLWksYT0odEMqKHItaSktRFEqbykvbE8scz1NYXRoLnNxcnQoYSphK28qbykvKHRDKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqYU8tMTIwOk5hTjtyZXR1cm4gbmV3IFl5KGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGoyKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9oNmUoZSk6bmV3IFl5KGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBZeShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHU4dCxOUSxEUSxsTyx0QyxzOHQsbDh0LGM4dCxoOHQ9TSgoKT0+e3JPKCk7aU8oKTtQUSgpO3U4dD0tLjE0ODYxLE5RPTEuNzgyNzcsRFE9LS4yOTIyNyxsTz0tLjkwNjQ5LHRDPTEuOTcyOTQsczh0PXRDKmxPLGw4dD10QypOUSxjOHQ9TlEqRFEtbE8qdTh0O2VkKFl5LGoyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1d5Ok1hdGgucG93KFd5LGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP01nOk1hdGgucG93KE1nLGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqb08sdD0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLG49TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IHJvKDI1NSoodCtyKih1OHQqbitOUSppKSksMjU1Kih0K3IqKERRKm4rbE8qaSkpLDI1NSoodCtyKih0QypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgank9TSgoKT0+e2lPKCk7YTh0KCk7aDh0KCl9KTtmdW5jdGlvbiBPUShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGNPKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBPUSgoci1uL3QpKnQsYSxpLG8scyl9fXZhciB1Tz1NKCgpPT57fSk7ZnVuY3Rpb24gaE8oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBPUSgoci1uL3QpKnQsaSxvLGEscyl9fXZhciB6UT1NKCgpPT57dU8oKX0pO2Z1bmN0aW9uIFgyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRlE9TSgoKT0+e30pO2Z1bmN0aW9uIGY4dChlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGY2ZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uICQyKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2Y4dChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6WDIoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBwOHQoZSl7cmV0dXJuKGU9K2UpPT0xP0puOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9mNmUodCxyLGUpOlgyKGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIEpuKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2Y4dChlLHIpOlgyKGlzTmFOKGUpP3Q6ZSl9dmFyIEsyPU0oKCk9PntGUSgpfSk7ZnVuY3Rpb24gZDh0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9RzIodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIGVDLG04dCxnOHQsQlE9TSgoKT0+e2p5KCk7dU8oKTt6USgpO0syKCk7ZUM9ZnVuY3Rpb24gZSh0KXt2YXIgcj1wOHQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9RzIoaSkpLnIsKG89RzIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7bTh0PWQ4dChjTyksZzh0PWQ4dChoTyl9KTtmdW5jdGlvbiBmTyhlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPVoyKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIEhRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gZE8oZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSt0Km4pLHJ9fXZhciBWUT1NKCgpPT57fSk7ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBlK3Qqcn19dmFyIHJDPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTyhlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPVoyKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIFVRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gcDZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBkNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBnTyhlLHQpe3ZhciByPUdRLmxhc3RJbmRleD1xUS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1HUS5leGVjKGUpKSYmKGk9cVEuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkFzKG4saSl9KSkscj1xUS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/ZDZlKGxbMF0ueCk6cDZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBHUSxxUSxXUT1NKCgpPT57ckMoKTtHUT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscVE9bmV3IFJlZ0V4cChHUS5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIFoyKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9YMih0KToocj09PSJudW1iZXIiP0FzOnI9PT0ic3RyaW5nIj8obj1FZyh0KSk/KHQ9bixlQyk6Z086dCBpbnN0YW5jZW9mIEVnP2VDOnQgaW5zdGFuY2VvZiBEYXRlP2RPOkFycmF5LmlzQXJyYXkodCk/Zk86dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP21POkFzKShlLHQpfXZhciBwTz1NKCgpPT57ankoKTtCUSgpO0hRKCk7VlEoKTtyQygpO1VRKCk7V1EoKTtGUSgpfSk7ZnVuY3Rpb24gXzh0KGUsdCl7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlK3Qqcil9fXZhciB5OHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlRKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnY4dCxza2V3WDpNYXRoLmF0YW4obCkqdjh0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgdjh0LF9PLHg4dD1NKCgpPT57djh0PTE4MC9NYXRoLlBJLF9PPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gdzh0KGUpe3JldHVybiBlPT09Im5vbmUiP19POihuQ3x8KG5DPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGpRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxiOHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLG5DLnN0eWxlLnRyYW5zZm9ybT1lLGU9Yjh0LmdldENvbXB1dGVkU3R5bGUoalEuYXBwZW5kQ2hpbGQobkMpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGpRLnJlbW92ZUNoaWxkKG5DKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxZUSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIFM4dChlKXtyZXR1cm4gZT09bnVsbD9fTzooeU98fCh5Tz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx5Ty5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9eU8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsWVEoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpfTyl9dmFyIG5DLGpRLGI4dCx5TyxNOHQ9TSgoKT0+e3g4dCgpfSk7ZnVuY3Rpb24gRTh0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6QXMoYyxoKX0se2k6Zy0yLHg6QXModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpBcyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkFzKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpBcyhjLGgpfSx7aTpnLTIseDpBcyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBUOHQsQzh0LEE4dD1NKCgpPT57ckMoKTtNOHQoKTtUOHQ9RTh0KHc4dCwicHgsICIsInB4KSIsImRlZykiKSxDOHQ9RTh0KFM4dCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gSTh0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIGc2ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBfNmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIEw4dChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8bTZlKWY9TWF0aC5sb2cocy9pKS9pQyxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKGlDKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK1A4dCp1KS8oMippKlhRKnApLGc9KHMqcy1pKmktUDh0KnUpLygyKnMqWFEqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL2lDLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9STh0KF8pLEM9aS8oWFEqcCkqKFMqXzZlKGlDKmIrXyktZzZlKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0k4dChpQypiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgaUMsWFEsUDh0LG02ZSxrOHQ9TSgoKT0+e2lDPU1hdGguU1FSVDIsWFE9MixQOHQ9NCxtNmU9MWUtMTJ9KTtmdW5jdGlvbiBSOHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1KVCh0KSkuaCwocj1KVChyKSkuaCksaT1Kbih0LnMsci5zKSxvPUpuKHQubCxyLmwpLGE9Sm4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LnM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIE44dCxEOHQsTzh0PU0oKCk9PntqeSgpO0syKCk7Tjh0PVI4dCgkMiksRDh0PVI4dChKbil9KTtmdW5jdGlvbiAkUShlLHQpe3ZhciByPUpuKChlPVkyKGUpKS5sLCh0PVkyKHQpKS5sKSxuPUpuKGUuYSx0LmEpLGk9Sm4oZS5iLHQuYiksbz1KbihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fXZhciB6OHQ9TSgoKT0+e2p5KCk7SzIoKX0pO2Z1bmN0aW9uIEY4dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVFUKHQpKS5oLChyPVFUKHIpKS5oKSxpPUpuKHQuYyxyLmMpLG89Sm4odC5sLHIubCksYT1Kbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgQjh0LEg4dCxWOHQ9TSgoKT0+e2p5KCk7SzIoKTtCOHQ9Rjh0KCQyKSxIOHQ9Rjh0KEpuKX0pO2Z1bmN0aW9uIFU4dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWoyKGkpKS5oLChvPWoyKG8pKS5oKSxzPUpuKGkucyxvLnMpLGw9Sm4oaS5sLG8ubCksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIHE4dCxHOHQsVzh0PU0oKCk9PntqeSgpO0syKCk7cTh0PVU4dCgkMiksRzh0PVU4dChKbil9KTtmdW5jdGlvbiBZOHQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn12YXIgajh0PU0oKCk9Pnt9KTt2YXIgWDh0PU0oKCk9PntwTygpO0hRKCk7dU8oKTt6USgpO1ZRKCk7ckMoKTtVUSgpO3k4dCgpO1dRKCk7QTh0KCk7azh0KCk7QlEoKTtPOHQoKTt6OHQoKTtWOHQoKTtXOHQoKTtqOHQoKX0pO2Z1bmN0aW9uIEpRKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gJDh0KCl7cmV0dXJuIG5ldyBKUX12YXIgS1EsWlEsWHkseTZlLEs4dCxaOHQ9TSgoKT0+e0tRPU1hdGguUEksWlE9MipLUSxYeT0xZS02LHk2ZT1aUS1YeTtKUS5wcm90b3R5cGU9JDh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SlEsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPlh5KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+WHkpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigoS1EtTWF0aC5hY29zKChkK2gtZykvKDIqXyp5KSkpLzIpLGI9eC95LFM9eC9fO01hdGguYWJzKGItMSk+WHkmJih0aGlzLl8rPSJMIisoZStiKmMpKyIsIisodCtiKnUpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsodSpmPmMqcCkrIiwiKyh0aGlzLl94MT1lK1MqcykrIiwiKyh0aGlzLl95MT10K1MqbCl9fSxhcmM6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2U9K2UsdD0rdCxyPStyO3ZhciBhPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGw9ZSthLGM9dCtzLHU9MV5vLGg9bz9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WHl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlh5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLHImJihoPDAmJihoPWglWlErWlEpLGg+eTZlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPlh5JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj1LUSkrIiwiK3UrIiwiKyh0aGlzLl94MT1lK3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9dCtyKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O0s4dD0kOHR9KTt2YXIgSjh0PU0oKCk9PntaOHQoKX0pO2Z1bmN0aW9uIFE4dChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuLGk9ZVtyLTFdLG89MDsrK3Q8cjspbj1pLGk9ZVt0XSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9dmFyIHRSdD1NKCgpPT57fSk7ZnVuY3Rpb24gZVJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG49MCxpPTAsbyxhPWVbci0xXSxzLGw9MDsrK3Q8cjspbz1hLGE9ZVt0XSxsKz1zPW9bMF0qYVsxXS1hWzBdKm9bMV0sbis9KG9bMF0rYVswXSkqcyxpKz0ob1sxXSthWzFdKSpzO3JldHVybiBsKj0zLFtuL2wsaS9sXX12YXIgclJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBuUnQoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pLSh0WzFdLWVbMV0pKihyWzBdLWVbMF0pfXZhciBpUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHY2ZShlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1mdW5jdGlvbiBvUnQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGk9MjtpPHQ7KytpKXtmb3IoO24+MSYmblJ0KGVbcltuLTJdXSxlW3Jbbi0xXV0sZVtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGFSdChlKXtpZigocj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxyLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpO2Zvcih0PTA7dDxyOysrdCluW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iobi5zb3J0KHY2ZSksdD0wO3Q8cjsrK3QpaVt0XT1bblt0XVswXSwtblt0XVsxXV07dmFyIG89b1J0KG4pLGE9b1J0KGkpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2Zvcih0PW8ubGVuZ3RoLTE7dD49MDstLXQpYy5wdXNoKGVbbltvW3RdXVsyXV0pO2Zvcih0PStzO3Q8YS5sZW5ndGgtbDsrK3QpYy5wdXNoKGVbblthW3RdXVsyXV0pO3JldHVybiBjfXZhciBzUnQ9TSgoKT0+e2lSdCgpfSk7ZnVuY3Rpb24gbFJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX12YXIgY1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiB1UnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9dmFyIGhSdD1NKCgpPT57fSk7dmFyIGZSdD1NKCgpPT57dFJ0KCk7clJ0KCk7c1J0KCk7Y1J0KCk7aFJ0KCl9KTtmdW5jdGlvbiBwUnQoZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLHI9K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiBkUnQodGhpcy5jb3Zlcih0LHIpLHQscixlKX1mdW5jdGlvbiBkUnQoZSx0LHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKHIpKXJldHVybiBlO3ZhciBpLG89ZS5fcm9vdCxhPXtkYXRhOm59LHM9ZS5feDAsbD1lLl95MCxjPWUuX3gxLHU9ZS5feTEsaCxmLHAsZCxnLF8seSx4O2lmKCFvKXJldHVybiBlLl9yb290PWEsZTtmb3IoO28ubGVuZ3RoOylpZigoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9ZixpPW8sIShvPW9beT1fPDwxfGddKSlyZXR1cm4gaVt5XT1hLGU7aWYocD0rZS5feC5jYWxsKG51bGwsby5kYXRhKSxkPStlLl95LmNhbGwobnVsbCxvLmRhdGEpLHQ9PT1wJiZyPT09ZClyZXR1cm4gYS5uZXh0PW8saT9pW3ldPWE6ZS5fcm9vdD1hLGU7ZG8gaT1pP2lbeV09bmV3IEFycmF5KDQpOmUuX3Jvb3Q9bmV3IEFycmF5KDQpLChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mO3doaWxlKCh5PV88PDF8Zyk9PT0oeD0oZD49Zik8PDF8cD49aCkpO3JldHVybiBpW3hdPW8saVt5XT1hLGV9ZnVuY3Rpb24gbVJ0KGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpLG8sYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iocj0wO3I8bjsrK3IpaXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsdD1lW3JdKSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKXx8KGFbcl09aSxzW3JdPW8saTxsJiYobD1pKSxpPnUmJih1PWkpLG88YyYmKGM9byksbz5oJiYoaD1vKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilkUnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGdSdD1NKCgpPT57fSk7ZnVuY3Rpb24gX1J0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZSBpZihyPmV8fGU+aXx8bj50fHx0Pm8pe3ZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3N3aXRjaChjPSh0PChuK28pLzIpPDwxfGU8KHIraSkvMil7Y2FzZSAwOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIsaT1yK2Esbz1uK2EsZT5pfHx0Pm8pO2JyZWFrfWNhc2UgMTp7ZG8gbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bDt3aGlsZShhKj0yLHI9aS1hLG89bithLHI+ZXx8dD5vKTticmVha31jYXNlIDI6e2RvIGw9bmV3IEFycmF5KDQpLGxbY109cyxzPWw7d2hpbGUoYSo9MixpPXIrYSxuPW8tYSxlPml8fG4+dCk7YnJlYWt9Y2FzZSAzOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIscj1pLWEsbj1vLWEscj5lfHxuPnQpO2JyZWFrfX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciB5UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZSdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciB4UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGJSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgd1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgdk89TSgoKT0+e30pO2Z1bmN0aW9uIFNSdChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBFbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IEVvKHBbM10sXyx5LGwsYyksbmV3IEVvKHBbMl0sYSx5LF8sYyksbmV3IEVvKHBbMV0sXyxzLGwseSksbmV3IEVvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIE1SdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIEVSdChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBUUnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBDUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFSdCgpe3JldHVybiB0aGlzLl9yb290fXZhciBQUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIElSdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIExSdD1NKCgpPT57fSk7ZnVuY3Rpb24ga1J0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBFbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgRW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgRW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgRW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgRW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFJSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIE5SdChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgRW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgRW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgRW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgRW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgRW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgRFJ0PU0oKCk9Pnt2TygpfSk7ZnVuY3Rpb24gT1J0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIHpSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIEZSdD1NKCgpPT57fSk7ZnVuY3Rpb24gQlJ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEhSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIFZSdD1NKCgpPT57fSk7ZnVuY3Rpb24geE8oZSx0LHIpe3ZhciBuPW5ldyBRUSh0PT1udWxsP09SdDp0LHI9PW51bGw/QlJ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIFFRKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gVVJ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgWGEscVJ0PU0oKCk9PntnUnQoKTt5UnQoKTt4UnQoKTt3UnQoKTtNUnQoKTtDUnQoKTtQUnQoKTtMUnQoKTtSUnQoKTtEUnQoKTtGUnQoKTtWUnQoKTtYYT14Ty5wcm90b3R5cGU9UVEucHJvdG90eXBlO1hhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgUVEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1VUnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1VUnQobikpO3JldHVybiBlfTtYYS5hZGQ9cFJ0O1hhLmFkZEFsbD1tUnQ7WGEuY292ZXI9X1J0O1hhLmRhdGE9dlJ0O1hhLmV4dGVudD1iUnQ7WGEuZmluZD1TUnQ7WGEucmVtb3ZlPUVSdDtYYS5yZW1vdmVBbGw9VFJ0O1hhLnJvb3Q9QVJ0O1hhLnNpemU9SVJ0O1hhLnZpc2l0PWtSdDtYYS52aXNpdEFmdGVyPU5SdDtYYS54PXpSdDtYYS55PUhSdH0pO3ZhciBHUnQ9TSgoKT0+e3FSdCgpfSk7dmFyIFdSdCxZUnQ9TSgoKT0+e1dSdD1bXS5zbGljZX0pO2Z1bmN0aW9uIHR0dChlKXt0aGlzLl9zaXplPWUsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBqUnQoZSl7aWYoIWUuX3N0YXJ0KXRyeXtiNmUoZSl9Y2F0Y2godCl7aWYoZS5fdGFza3NbZS5fZW5kZWQrZS5fYWN0aXZlLTFdKWV0dChlLHQpO2Vsc2UgaWYoIWUuX2RhdGEpdGhyb3cgdH19ZnVuY3Rpb24gYjZlKGUpe2Zvcig7ZS5fc3RhcnQ9ZS5fd2FpdGluZyYmZS5fYWN0aXZlPGUuX3NpemU7KXt2YXIgdD1lLl9lbmRlZCtlLl9hY3RpdmUscj1lLl90YXNrc1t0XSxuPXIubGVuZ3RoLTEsaT1yW25dO3Jbbl09dzZlKGUsdCksLS1lLl93YWl0aW5nLCsrZS5fYWN0aXZlLHI9aS5hcHBseShudWxsLHIpLGUuX3Rhc2tzW3RdJiYoZS5fdGFza3NbdF09cnx8eDZlKX19ZnVuY3Rpb24gdzZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7IWUuX3Rhc2tzW3RdfHwoLS1lLl9hY3RpdmUsKytlLl9lbmRlZCxlLl90YXNrc1t0XT1udWxsLGUuX2Vycm9yPT1udWxsJiYociE9bnVsbD9ldHQoZSxyKTooZS5fZGF0YVt0XT1uLGUuX3dhaXRpbmc/alJ0KGUpOmJPKGUpKSkpfX1mdW5jdGlvbiBldHQoZSx0KXt2YXIgcj1lLl90YXNrcy5sZW5ndGgsbjtmb3IoZS5fZXJyb3I9dCxlLl9kYXRhPXZvaWQgMCxlLl93YWl0aW5nPU5hTjstLXI+PTA7KWlmKChuPWUuX3Rhc2tzW3JdKSYmKGUuX3Rhc2tzW3JdPW51bGwsbi5hYm9ydCkpdHJ5e24uYWJvcnQoKX1jYXRjaChpKXt9ZS5fYWN0aXZlPU5hTixiTyhlKX1mdW5jdGlvbiBiTyhlKXtpZighZS5fYWN0aXZlJiZlLl9jYWxsKXt2YXIgdD1lLl9kYXRhO2UuX2RhdGE9dm9pZCAwLGUuX2NhbGwoZS5fZXJyb3IsdCl9fWZ1bmN0aW9uIHdPKGUpe2lmKGU9PW51bGwpZT0xLzA7ZWxzZSBpZighKChlPStlKT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbmN1cnJlbmN5Iik7cmV0dXJuIG5ldyB0dHQoZSl9dmFyIHg2ZSxYUnQ9TSgoKT0+e1lSdCgpO3g2ZT17fTt0dHQucHJvdG90eXBlPXdPLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHR0LGRlZmVyOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJkZWZlciBhZnRlciBhd2FpdCIpO2lmKHRoaXMuX2Vycm9yIT1udWxsKXJldHVybiB0aGlzO3ZhciB0PVdSdC5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdC5wdXNoKGUpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKHQpLGpSdCh0aGlzKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvcj09bnVsbCYmZXR0KHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgYXdhaXQiKTtyZXR1cm4gdGhpcy5fY2FsbD1mdW5jdGlvbih0LHIpe2UuYXBwbHkobnVsbCxbdF0uY29uY2F0KHIpKX0sYk8odGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZSxiTyh0aGlzKSx0aGlzfX19KTt2YXIgJFJ0PU0oKCk9PntYUnQoKX0pO2Z1bmN0aW9uIGJjKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyICR5PU0oKCk9Pnt9KTt2YXIgS1J0LFpSdD1NKCgpPT57JHkoKTtLUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGFyZ3VtZW50cy5sZW5ndGg9PT0xPyhpPW4sbj0wKTppLT1uLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSppK259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBTTyxydHQ9TSgoKT0+eyR5KCk7U089ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7dmFyIG8sYTtyZXR1cm4gbj1uPT1udWxsPzA6K24saT1pPT1udWxsPzE6K2ksZnVuY3Rpb24oKXt2YXIgcztpZihvIT1udWxsKXM9byxvPW51bGw7ZWxzZSBkbyBvPXQoKSoyLTEscz10KCkqMi0xLGE9bypvK3Mqczt3aGlsZSghYXx8YT4xKTtyZXR1cm4gbitpKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgSlJ0LFFSdD1NKCgpPT57JHkoKTtydHQoKTtKUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49U08uc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIE1PLG50dD1NKCgpPT57JHkoKTtNTz1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgdE50LGVOdD1NKCgpPT57JHkoKTtudHQoKTt0TnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3ZhciBpPU1PLnNvdXJjZSh0KShuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSgpL259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciByTnQsbk50PU0oKCk9PnskeSgpO3JOdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgaU50PU0oKCk9PntaUnQoKTtydHQoKTtRUnQoKTtlTnQoKTtudHQoKTtuTnQoKX0pO2Z1bmN0aW9uIEoyKGUsdCl7dmFyIHIsbj12cygiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksaSxvPUppKCksYT1uZXcgWE1MSHR0cFJlcXVlc3Qscz1udWxsLGw9bnVsbCxjLHUsaD0wO3R5cGVvZiBYRG9tYWluUmVxdWVzdCE9InVuZGVmaW5lZCImJiEoIndpdGhDcmVkZW50aWFscyJpbiBhKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpJiYoYT1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYT9hLm9ubG9hZD1hLm9uZXJyb3I9YS5vbnRpbWVvdXQ9ZjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihwKXthLnJlYWR5U3RhdGU+MyYmZihwKX07ZnVuY3Rpb24gZihwKXt2YXIgZD1hLnN0YXR1cyxnO2lmKCFkJiZNNmUoYSl8fGQ+PTIwMCYmZDwzMDB8fGQ9PT0zMDQpe2lmKGMpdHJ5e2c9Yy5jYWxsKHIsYSl9Y2F0Y2goXyl7bi5jYWxsKCJlcnJvciIscixfKTtyZXR1cm59ZWxzZSBnPWE7bi5jYWxsKCJsb2FkIixyLGcpfWVsc2Ugbi5jYWxsKCJlcnJvciIscixwKX1pZihhLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24ocCl7bi5jYWxsKCJwcm9ncmVzcyIscixwKX0scj17aGVhZGVyOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHA9KHArIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP28uZ2V0KHApOihkPT1udWxsP28ucmVtb3ZlKHApOm8uc2V0KHAsZCsiIikscil9LG1pbWVUeXBlOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXA9PW51bGw/bnVsbDpwKyIiLHIpOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1wLHIpOnV9LHRpbWVvdXQ6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3Ascik6aH0sdXNlcjpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3M6KHM9cD09bnVsbD9udWxsOnArIiIscil9LHBhc3N3b3JkOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/bDoobD1wPT1udWxsP251bGw6cCsiIixyKX0scmVzcG9uc2U6ZnVuY3Rpb24ocCl7cmV0dXJuIGM9cCxyfSxnZXQ6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJHRVQiLHAsZCl9LHBvc3Q6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJQT1NUIixwLGQpfSxzZW5kOmZ1bmN0aW9uKHAsZCxnKXtyZXR1cm4gYS5vcGVuKHAsZSwhMCxzLGwpLGkhPW51bGwmJiFvLmhhcygiYWNjZXB0IikmJm8uc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxhLnNldFJlcXVlc3RIZWFkZXImJm8uZWFjaChmdW5jdGlvbihfLHkpe2Euc2V0UmVxdWVzdEhlYWRlcih5LF8pfSksaSE9bnVsbCYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUoaSksdSE9bnVsbCYmKGEucmVzcG9uc2VUeXBlPXUpLGg+MCYmKGEudGltZW91dD1oKSxnPT1udWxsJiZ0eXBlb2YgZD09ImZ1bmN0aW9uIiYmKGc9ZCxkPW51bGwpLGchPW51bGwmJmcubGVuZ3RoPT09MSYmKGc9UzZlKGcpKSxnIT1udWxsJiZyLm9uKCJlcnJvciIsZykub24oImxvYWQiLGZ1bmN0aW9uKF8pe2cobnVsbCxfKX0pLG4uY2FsbCgiYmVmb3Jlc2VuZCIscixhKSxhLnNlbmQoZD09bnVsbD9udWxsOmQpLHJ9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYWJvcnQoKSxyfSxvbjpmdW5jdGlvbigpe3ZhciBwPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBwPT09bj9yOnB9fSx0IT1udWxsKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7cmV0dXJuIHIuZ2V0KHQpfXJldHVybiByfWZ1bmN0aW9uIFM2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQ9PW51bGw/cjpudWxsKX19ZnVuY3Rpb24gTTZlKGUpe3ZhciB0PWUucmVzcG9uc2VUeXBlO3JldHVybiB0JiZ0IT09InRleHQiP2UucmVzcG9uc2U6ZS5yZXNwb25zZVRleHR9dmFyIEVPPU0oKCk9PntUYigpO2ttKCl9KTtmdW5jdGlvbiBUZyhlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPUoyKHIpLm1pbWVUeXBlKGUpLnJlc3BvbnNlKHQpO2lmKG4hPW51bGwpe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtyZXR1cm4gaS5nZXQobil9cmV0dXJuIGl9fXZhciBvQz1NKCgpPT57RU8oKX0pO3ZhciBvTnQsYU50PU0oKCk9PntvQygpO29OdD1UZygidGV4dC9odG1sIixmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZS5yZXNwb25zZVRleHQpfSl9KTt2YXIgc050LGxOdD1NKCgpPT57b0MoKTtzTnQ9VGcoImFwcGxpY2F0aW9uL2pzb24iLGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVzcG9uc2VUZXh0KX0pfSk7dmFyIGNOdCx1TnQ9TSgoKT0+e29DKCk7Y050PVRnKCJ0ZXh0L3BsYWluIixmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNwb25zZVRleHR9KX0pO3ZhciBoTnQsZk50PU0oKCk9PntvQygpO2hOdD1UZygiYXBwbGljYXRpb24veG1sIixmdW5jdGlvbihlKXt2YXIgdD1lLnJlc3BvbnNlWE1MO2lmKCF0KXRocm93IG5ldyBFcnJvcigicGFyc2UgZXJyb3IiKTtyZXR1cm4gdH0pfSk7ZnVuY3Rpb24gVE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9bixuPW51bGwpO3ZhciBvPUoyKHIpLm1pbWVUeXBlKGUpO3JldHVybiBvLnJvdz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKEU2ZSh0LG49YSkpOm59LG8ucm93KG4pLGk/by5nZXQoaSk6b319ZnVuY3Rpb24gRTZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlKHIucmVzcG9uc2VUZXh0LHQpfX12YXIgaXR0PU0oKCk9PntFTygpfSk7dmFyIHBOdCxkTnQ9TSgoKT0+e3FFKCk7aXR0KCk7cE50PVRPKCJ0ZXh0L2NzdiIsQ2IpfSk7dmFyIG1OdCxnTnQ9TSgoKT0+e3FFKCk7aXR0KCk7bU50PVRPKCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIixBYil9KTt2YXIgX050PU0oKCk9PntFTygpO2FOdCgpO2xOdCgpO3VOdCgpO2ZOdCgpO2ROdCgpO2dOdCgpfSk7ZnVuY3Rpb24gcGYoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEt5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhQyhlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1UNmUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBUNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHBmKGUodCkscil9fXZhciBvdHQ9TSgoKT0+e0t5KCl9KTt2YXIgeU50LHZOdCxDNmUsZGYsYXR0PU0oKCk9PntLeSgpO290dCgpO3lOdD1hQyhwZiksdk50PXlOdC5yaWdodCxDNmU9eU50LmxlZnQsZGY9dk50fSk7dmFyIHN0dD1NKCgpPT57fSk7dmFyIHhOdD1NKCgpPT57c3R0KCl9KTt2YXIgYk50PU0oKCk9Pnt9KTtmdW5jdGlvbiBRMihlKXtyZXR1cm4gZT09PW51bGw/TmFOOitlfXZhciB0dz1NKCgpPT57fSk7dmFyIGx0dD1NKCgpPT57dHcoKX0pO3ZhciBjdHQ9TSgoKT0+e2x0dCgpfSk7dmFyIHV0dD1NKCgpPT57fSk7dmFyIHdOdCxQNmUsSTZlLGh0dD1NKCgpPT57d050PUFycmF5LnByb3RvdHlwZSxQNmU9d050LnNsaWNlLEk2ZT13TnQubWFwfSk7dmFyIFNOdD1NKCgpPT57fSk7dmFyIE1OdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ08oZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIGZ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gc0MoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1ldyhlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gZXcoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1wdHQ/MTA6bz49ZHR0PzU6bz49bXR0PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49cHR0PzEwOm8+PWR0dD81Om8+PW10dD8yOjEpfWZ1bmN0aW9uIFp5KGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1wdHQ/aSo9MTA6bz49ZHR0P2kqPTU6bz49bXR0JiYoaSo9MiksdDxlPy1pOml9dmFyIHB0dCxkdHQsbXR0LGd0dD1NKCgpPT57cHR0PU1hdGguc3FydCg1MCksZHR0PU1hdGguc3FydCgxMCksbXR0PU1hdGguc3FydCgyKX0pO3ZhciBfdHQ9TSgoKT0+e30pO3ZhciBFTnQ9TSgoKT0+e2h0dCgpO2F0dCgpO1NOdCgpO3V0dCgpO01OdCgpO2Z0dCgpO2d0dCgpO190dCgpfSk7ZnVuY3Rpb24gbEMoZSx0LHIpe2lmKHI9PW51bGwmJihyPVEyKSwhIShuPWUubGVuZ3RoKSl7aWYoKHQ9K3QpPD0wfHxuPDIpcmV0dXJuK3IoZVswXSwwLGUpO2lmKHQ+PTEpcmV0dXJuK3IoZVtuLTFdLG4tMSxlKTt2YXIgbixpPShuLTEpKnQsbz1NYXRoLmZsb29yKGkpLGE9K3IoZVtvXSxvLGUpLHM9K3IoZVtvKzFdLG8rMSxlKTtyZXR1cm4gYSsocy1hKSooaS1vKX19dmFyIEFPPU0oKCk9Pnt0dygpfSk7dmFyIFROdD1NKCgpPT57aHR0KCk7S3koKTt0dygpO0FPKCl9KTt2YXIgQ050PU0oKCk9PntjdHQoKX0pO3ZhciBBTnQ9TSgoKT0+e30pO3ZhciBQTnQ9TSgoKT0+e3R3KCl9KTt2YXIgSU50PU0oKCk9PntLeSgpO3R3KCk7QU8oKX0pO3ZhciBMTnQ9TSgoKT0+e30pO3ZhciB5dHQ9TSgoKT0+e30pO3ZhciBrTnQ9TSgoKT0+e30pO3ZhciBSTnQ9TSgoKT0+e0t5KCl9KTt2YXIgTk50PU0oKCk9Pnt9KTt2YXIgRE50PU0oKCk9Pnt9KTt2YXIgdnR0PU0oKCk9Pnt5dHQoKX0pO3ZhciBPTnQ9TSgoKT0+e3Z0dCgpfSk7dmFyIG1mPU0oKCk9PnthdHQoKTtLeSgpO290dCgpO3hOdCgpO2JOdCgpO2N0dCgpO3V0dCgpO0VOdCgpO1ROdCgpO0NOdCgpO190dCgpO0FOdCgpO1BOdCgpO0lOdCgpO0xOdCgpO3l0dCgpO3N0dCgpO2tOdCgpO0FPKCk7ZnR0KCk7Uk50KCk7Tk50KCk7RE50KCk7Z3R0KCk7dnR0KCk7bHR0KCk7T050KCl9KTtmdW5jdGlvbiBQTygpe31mdW5jdGlvbiB6TnQoZSx0KXt2YXIgcj1uZXcgUE87aWYoZSBpbnN0YW5jZW9mIFBPKWUuZWFjaChmdW5jdGlvbihzLGwpe3Iuc2V0KGwscyl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuPS0xLGk9ZS5sZW5ndGgsbztpZih0PT1udWxsKWZvcig7KytuPGk7KXIuc2V0KG4sZVtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLnNldCh0KG89ZVtuXSxuLGUpLG8pfWVsc2UgaWYoZSlmb3IodmFyIGEgaW4gZSlyLnNldChhLGVbYV0pO3JldHVybiByfXZhciBmbCxKeSxJTz1NKCgpPT57Zmw9IiQiO1BPLnByb3RvdHlwZT16TnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQTyxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGZsK2UgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2ZsK2VdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpc1tmbCtlXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD1mbCtlO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1mbCYmZGVsZXRlIHRoaXNbZV19LGtleXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gZX0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2godGhpc1t0XSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBlfSxzaXplOmZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJisrZTtyZXR1cm4gZX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcylpZihlWzBdPT09ZmwpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O0p5PXpOdH0pO3ZhciBGTnQ9TSgoKT0+e0lPKCl9KTtmdW5jdGlvbiBMTygpe31mdW5jdGlvbiBPNmUoZSx0KXt2YXIgcj1uZXcgTE87aWYoZSBpbnN0YW5jZW9mIExPKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciBReSxCTnQ9TSgoKT0+e0lPKCk7UXk9SnkucHJvdG90eXBlO0xPLnByb3RvdHlwZT1PNmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMTyxoYXM6UXkuaGFzLGFkZDpmdW5jdGlvbihlKXtyZXR1cm4gZSs9IiIsdGhpc1tmbCtlXT1lLHRoaXN9LHJlbW92ZTpReS5yZW1vdmUsY2xlYXI6UXkuY2xlYXIsdmFsdWVzOlF5LmtleXMsc2l6ZTpReS5zaXplLGVtcHR5OlF5LmVtcHR5LGVhY2g6UXkuZWFjaH19KTt2YXIgSE50PU0oKCk9Pnt9KTt2YXIgVk50PU0oKCk9Pnt9KTt2YXIgVU50PU0oKCk9Pnt9KTt2YXIgcU50PU0oKCk9PntGTnQoKTtCTnQoKTtJTygpO0hOdCgpO1ZOdCgpO1VOdCgpfSk7dmFyIEdOdCxydyxwbCxDZz1NKCgpPT57R050PUFycmF5LnByb3RvdHlwZSxydz1HTnQubWFwLHBsPUdOdC5zbGljZX0pO2Z1bmN0aW9uIG53KGUpe3ZhciB0PUp5KCkscj1bXSxuPWtPO2U9ZT09bnVsbD9bXTpwbC5jYWxsKGUpO2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPXQuZ2V0KGEpO2lmKCFzKXtpZihuIT09a08pcmV0dXJuIG47dC5zZXQoYSxzPXIucHVzaChvKSl9cmV0dXJuIGVbKHMtMSklZS5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W10sdD1KeSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspdC5oYXMoYz0obD1vW2FdKSsiIil8fHQuc2V0KGMsci5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wbC5jYWxsKG8pLGkpOmUuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG53KCkuZG9tYWluKHIpLnJhbmdlKGUpLnVua25vd24obil9LGl9dmFyIGtPLHh0dD1NKCgpPT57cU50KCk7Q2coKTtrTz17bmFtZToiaW1wbGljaXQifX0pO2Z1bmN0aW9uIGNDKCl7dmFyIGU9bncoKS51bmtub3duKHZvaWQgMCksdD1lLmRvbWFpbixyPWUucmFuZ2Usbj1bMCwxXSxpLG8sYT0hMSxzPTAsbD0wLGM9LjU7ZGVsZXRlIGUudW5rbm93bjtmdW5jdGlvbiB1KCl7dmFyIGg9dCgpLmxlbmd0aCxmPW5bMV08blswXSxwPW5bZi0wXSxkPW5bMS1mXTtpPShkLXApL01hdGgubWF4KDEsaC1zK2wqMiksYSYmKGk9TWF0aC5mbG9vcihpKSkscCs9KGQtcC1pKihoLXMpKSpjLG89aSooMS1zKSxhJiYocD1NYXRoLnJvdW5kKHApLG89TWF0aC5yb3VuZChvKSk7dmFyIGc9Q08oaCkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBwK2kqX30pO3JldHVybiByKGY/Zy5yZXZlcnNlKCk6Zyl9cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0KGgpLHUoKSk6dCgpfSxlLnJhbmdlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVsraFswXSwraFsxXV0sdSgpKTpuLnNsaWNlKCl9LGUucmFuZ2VSb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gbj1bK2hbMF0sK2hbMV1dLGE9ITAsdSgpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZS5yb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIWgsdSgpKTphfSxlLnBhZGRpbmc9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bD1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGgpKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpsfSxlLmFsaWduPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY0MoKS5kb21haW4odCgpKS5yYW5nZShuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx1KCl9ZnVuY3Rpb24gV050KGUpe3ZhciB0PWUuY29weTtyZXR1cm4gZS5wYWRkaW5nPWUucGFkZGluZ091dGVyLGRlbGV0ZSBlLnBhZGRpbmdJbm5lcixkZWxldGUgZS5wYWRkaW5nT3V0ZXIsZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFdOdCh0KCkpfSxlfWZ1bmN0aW9uIFlOdCgpe3JldHVybiBXTnQoY0MoKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBqTnQ9TSgoKT0+e21mKCk7eHR0KCl9KTtmdW5jdGlvbiBpdyhlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdUMoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGJ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gZXYoKXt9ZnVuY3Rpb24gJE50KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gRzZlKCl7cmV0dXJuIGVEdCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBLTnQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBQZyhlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD16NmUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9aTnQodCk6cj09PTM/bmV3IGhhKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9STyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9STyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PUY2ZS5leGVjKGUpKT9uZXcgaGEodFsxXSx0WzJdLHRbM10sMSk6KHQ9QjZlLmV4ZWMoZSkpP25ldyBoYSh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1INmUuZXhlYyhlKSk/Uk8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9VjZlLmV4ZWMoZSkpP1JPKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PVU2ZS5leGVjKGUpKT90RHQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1xNmUuZXhlYyhlKSk/dER0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6WE50Lmhhc093blByb3BlcnR5KGUpP1pOdChYTnRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBoYShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFpOdChlKXtyZXR1cm4gbmV3IGhhKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBSTyhlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGhhKGUsdCxyLG4pfWZ1bmN0aW9uIE10dChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGV2fHwoZT1QZyhlKSksZT8oZT1lLnJnYigpLG5ldyBoYShlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgaGF9ZnVuY3Rpb24gYXcoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP010dChlKTpuZXcgaGEoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGhhKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBKTnQoKXtyZXR1cm4iIyIrd3R0KHRoaXMucikrd3R0KHRoaXMuZykrd3R0KHRoaXMuYil9ZnVuY3Rpb24gUU50KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHd0dChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB0RHQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBnZihlLHQscixuKX1mdW5jdGlvbiBlRHQoZSl7aWYoZSBpbnN0YW5jZW9mIGdmKXJldHVybiBuZXcgZ2YoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgZXZ8fChlPVBnKGUpKSwhZSlyZXR1cm4gbmV3IGdmO2lmKGUgaW5zdGFuY2VvZiBnZilyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBnZihhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIHJEdChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/ZUR0KGUpOm5ldyBnZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFN0dChlLHQscil7cmV0dXJuKGU8NjA/dCsoci10KSplLzYwOmU8MTgwP3I6ZTwyNDA/dCsoci10KSooMjQwLWUpLzYwOnQpKjI1NX12YXIgQWcsdHYsb3csaEMsX2YsejZlLEY2ZSxCNmUsSDZlLFY2ZSxVNmUscTZlLFhOdCxFdHQ9TSgoKT0+e2J0dCgpO0FnPS43LHR2PTEvQWcsb3c9IlxccyooWystXT9cXGQrKVxccyoiLGhDPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLF9mPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIix6NmU9L14jKFswLTlhLWZdezMsOH0pJC8sRjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvdyxvdyxvd10rIlxcKSQiKSxCNmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW19mLF9mLF9mXSsiXFwpJCIpLEg2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW293LG93LG93LGhDXSsiXFwpJCIpLFY2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW19mLF9mLF9mLGhDXSsiXFwpJCIpLFU2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbaEMsX2YsX2ZdKyJcXCkkIikscTZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbaEMsX2YsX2YsaENdKyJcXCkkIiksWE50PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2l3KGV2LFBnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OiROdCxmb3JtYXRIZXg6JE50LGZvcm1hdEhzbDpHNmUsZm9ybWF0UmdiOktOdCx0b1N0cmluZzpLTnR9KTtpdyhoYSxhdyx1Qyhldix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90djpNYXRoLnBvdyh0dixlKSxuZXcgaGEodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/QWc6TWF0aC5wb3coQWcsZSksbmV3IGhhKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6Sk50LGZvcm1hdEhleDpKTnQsZm9ybWF0UmdiOlFOdCx0b1N0cmluZzpRTnR9KSk7aXcoZ2YsckR0LHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IGhhKFN0dChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxTdHQoZSxpLG4pLFN0dChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciBuRHQsaUR0LG9EdD1NKCgpPT57bkR0PU1hdGguUEkvMTgwLGlEdD0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIFc2ZShlKXtpZihlIGluc3RhbmNlb2YgcnYpcmV0dXJuIG5ldyBydihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiBoYXx8KGU9TXR0KGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0obER0Km4rYUR0KnQtc0R0KnIpLyhsRHQrYUR0LXNEdCksbz1uLWksYT0oZkMqKHItaSktQ3R0Km8pL05PLHM9TWF0aC5zcXJ0KGEqYStvKm8pLyhmQyppKigxLWkpKSxsPXM/TWF0aC5hdGFuMihhLG8pKmlEdC0xMjA6TmFOO3JldHVybiBuZXcgcnYobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gJGEoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1c2ZShlKTpuZXcgcnYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHJ2KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgY0R0LFR0dCxDdHQsTk8sZkMsYUR0LHNEdCxsRHQsdUR0PU0oKCk9PntidHQoKTtFdHQoKTtvRHQoKTtjRHQ9LS4xNDg2MSxUdHQ9MS43ODI3NyxDdHQ9LS4yOTIyNyxOTz0tLjkwNjQ5LGZDPTEuOTcyOTQsYUR0PWZDKk5PLHNEdD1mQypUdHQsbER0PVR0dCpDdHQtTk8qY0R0O2l3KHJ2LCRhLHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqbkR0LHQ9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqdCooMS10KSxuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSk7cmV0dXJuIG5ldyBoYSgyNTUqKHQrciooY0R0Km4rVHR0KmkpKSwyNTUqKHQrciooQ3R0Km4rTk8qaSkpLDI1NSoodCtyKihmQypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgc3c9TSgoKT0+e0V0dCgpO3VEdCgpfSk7ZnVuY3Rpb24gQXR0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gaER0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBBdHQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgUHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBmRHQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBBdHQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgcER0PU0oKCk9PntQdHQoKX0pO2Z1bmN0aW9uIGx3KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgSXR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBkRHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBZNmUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBtRHQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/ZER0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpsdyhpc05hTihlKT90OmUpfWZ1bmN0aW9uIGdEdChlKXtyZXR1cm4oZT0rZSk9PTE/bmQ6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P1k2ZSh0LHIsZSk6bHcoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gbmQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/ZER0KGUscik6bHcoaXNOYU4oZSk/dDplKX12YXIgTHR0PU0oKCk9PntJdHQoKX0pO2Z1bmN0aW9uIF9EdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPWF3KHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBrdHQsXzVuLHk1bix5RHQ9TSgoKT0+e3N3KCk7UHR0KCk7cER0KCk7THR0KCk7a3R0PWZ1bmN0aW9uIGUodCl7dmFyIHI9Z0R0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPWF3KGkpKS5yLChvPWF3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9bmQoaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO181bj1fRHQoaER0KSx5NW49X0R0KGZEdCl9KTtmdW5jdGlvbiB2RHQoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24geER0KGUpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJiEoZSBpbnN0YW5jZW9mIERhdGFWaWV3KX12YXIgYkR0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3RHQoZSx0KXt2YXIgcj10P3QubGVuZ3RoOjAsbj1lP01hdGgubWluKHIsZS5sZW5ndGgpOjAsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkociksYTtmb3IoYT0wO2E8bjsrK2EpaVthXT1udihlW2FdLHRbYV0pO2Zvcig7YTxyOysrYSlvW2FdPXRbYV07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihhPTA7YTxuOysrYSlvW2FdPWlbYV0ocyk7cmV0dXJuIG99fXZhciBTRHQ9TSgoKT0+e0RPKCl9KTtmdW5jdGlvbiBNRHQoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fXZhciBFRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlmKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fXZhciBPTz1NKCgpPT57fSk7ZnVuY3Rpb24gVER0KGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bnYoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgQ0R0PU0oKCk9PntETygpfSk7ZnVuY3Rpb24gajZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBYNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBBRHQoZSx0KXt2YXIgcj1OdHQubGFzdEluZGV4PVJ0dC5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1OdHQuZXhlYyhlKSkmJihpPVJ0dC5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6eWYobixpKX0pKSxyPVJ0dC5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/WDZlKGxbMF0ueCk6ajZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBOdHQsUnR0LFBEdD1NKCgpPT57T08oKTtOdHQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFJ0dD1uZXcgUmVnRXhwKE50dC5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIG52KGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9sdyh0KToocj09PSJudW1iZXIiP3lmOnI9PT0ic3RyaW5nIj8obj1QZyh0KSk/KHQ9bixrdHQpOkFEdDp0IGluc3RhbmNlb2YgUGc/a3R0OnQgaW5zdGFuY2VvZiBEYXRlP01EdDp4RHQodCk/dkR0OkFycmF5LmlzQXJyYXkodCk/d0R0OnR5cGVvZiB0LnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiB0LnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTih0KT9URHQ6eWYpKGUsdCl9dmFyIERPPU0oKCk9PntzdygpO3lEdCgpO1NEdCgpO0VEdCgpO09PKCk7Q0R0KCk7UER0KCk7SXR0KCk7YkR0KCl9KTtmdW5jdGlvbiBEdHQoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKGUqKDEtcikrdCpyKX19dmFyIElEdD1NKCgpPT57fSk7ZnVuY3Rpb24gTER0KGUpe3JldHVybiBmdW5jdGlvbiB0KHIpe3I9K3I7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPWUoKGk9JGEoaSkpLmgsKG89JGEobykpLmgpLHM9bmQoaS5zLG8ucyksbD1uZChpLmwsby5sKSxjPW5kKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5oPWEodSksaS5zPXModSksaS5sPWwoTWF0aC5wb3codSxyKSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9dCxufSgxKX12YXIgJDZlLGN3LGtEdD1NKCgpPT57c3coKTtMdHQoKTskNmU9TER0KG1EdCksY3c9TER0KG5kKX0pO3ZhciB1dz1NKCgpPT57RE8oKTtPTygpO0lEdCgpO2tEdCgpfSk7ZnVuY3Rpb24gaHcoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB6Tz1NKCgpPT57fSk7ZnVuY3Rpb24gRk8oZSl7cmV0dXJuK2V9dmFyIE90dD1NKCgpPT57fSk7ZnVuY3Rpb24gcEMoZSx0KXtyZXR1cm4odC09ZT0rZSk/ZnVuY3Rpb24ocil7cmV0dXJuKHItZSkvdH06aHcodCl9ZnVuY3Rpb24gSzZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodD0rdCxyPStyKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGk8PXQ/MDppPj1yPzE6bihpKX19fWZ1bmN0aW9uIFo2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQ9K3Qscj0rcik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpPD0wP3Q6aT49MT9yOm4oaSl9fX1mdW5jdGlvbiBKNmUoZSx0LHIsbil7dmFyIGk9ZVswXSxvPWVbMV0sYT10WzBdLHM9dFsxXTtyZXR1cm4gbzxpPyhpPXIobyxpKSxhPW4ocyxhKSk6KGk9cihpLG8pLGE9bihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShpKGwpKX19ZnVuY3Rpb24gUTZlKGUsdCxyLG4pe3ZhciBpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKGVbaV08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPXIoZVtzXSxlW3MrMV0pLGFbc109bih0W3NdLHRbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjPWRmKGUsbCwxLGkpLTE7cmV0dXJuIGFbY10ob1tjXShsKSl9fWZ1bmN0aW9uIElnKGUsdCl7cmV0dXJuIHQuZG9tYWluKGUuZG9tYWluKCkpLnJhbmdlKGUucmFuZ2UoKSkuaW50ZXJwb2xhdGUoZS5pbnRlcnBvbGF0ZSgpKS5jbGFtcChlLmNsYW1wKCkpfWZ1bmN0aW9uIGlkKGUsdCl7dmFyIHI9UkR0LG49UkR0LGk9bnYsbz0hMSxhLHMsbDtmdW5jdGlvbiBjKCl7cmV0dXJuIGE9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpPjI/UTZlOko2ZSxzPWw9bnVsbCx1fWZ1bmN0aW9uIHUoaCl7cmV0dXJuKHN8fChzPWEocixuLG8/SzZlKGUpOmUsaSkpKSgraCl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKGgpe3JldHVybihsfHwobD1hKG4scixwQyxvP1o2ZSh0KTp0KSkpKCtoKX0sdS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cncuY2FsbChoLEZPKSxjKCkpOnIuc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1wbC5jYWxsKGgpLGMoKSk6bi5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49cGwuY2FsbChoKSxpPUR0dCxjKCl9LHUuY2xhbXA9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISFoLGMoKSk6b30sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1oLGMoKSk6aX0sYygpfXZhciBSRHQsZEM9TSgoKT0+e21mKCk7dXcoKTtDZygpO3pPKCk7T3R0KCk7UkR0PVswLDFdfSk7ZnVuY3Rpb24gTkR0KGUpe3JldHVybiBNYXRoLmFicyhlPU1hdGgucm91bmQoZSkpPj0xZTIxP2UudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTplLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBpdihlLHQpe2lmKChyPShlPXQ/ZS50b0V4cG9uZW50aWFsKHQtMSk6ZS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPWUuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrZS5zbGljZShyKzEpXX12YXIgbUM9TSgoKT0+e30pO2Z1bmN0aW9uIHZmKGUpe3JldHVybiBlPWl2KE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfXZhciBnQz1NKCgpPT57bUMoKX0pO2Z1bmN0aW9uIEREdChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX12YXIgT0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6RHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBGRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIExnKGUpe2lmKCEodD10SWUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdDtyZXR1cm4gbmV3IEJPKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIEJPKGUpe3RoaXMuZmlsbD1lLmZpbGw9PT12b2lkIDA/IiAiOmUuZmlsbCsiIix0aGlzLmFsaWduPWUuYWxpZ249PT12b2lkIDA/Ij4iOmUuYWxpZ24rIiIsdGhpcy5zaWduPWUuc2lnbj09PXZvaWQgMD8iLSI6ZS5zaWduKyIiLHRoaXMuc3ltYm9sPWUuc3ltYm9sPT09dm9pZCAwPyIiOmUuc3ltYm9sKyIiLHRoaXMuemVybz0hIWUuemVybyx0aGlzLndpZHRoPWUud2lkdGg9PT12b2lkIDA/dm9pZCAwOitlLndpZHRoLHRoaXMuY29tbWE9ISFlLmNvbW1hLHRoaXMucHJlY2lzaW9uPWUucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDorZS5wcmVjaXNpb24sdGhpcy50cmltPSEhZS50cmltLHRoaXMudHlwZT1lLnR5cGU9PT12b2lkIDA/IiI6ZS50eXBlKyIifXZhciB0SWUsenR0PU0oKCk9Pnt0SWU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7TGcucHJvdG90eXBlPUJPLnByb3RvdHlwZTtCTy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIEJEdChlKXt0OmZvcih2YXIgdD1lLmxlbmd0aCxyPTEsbj0tMSxpO3I8dDsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoIStlW3JdKWJyZWFrIHQ7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP2Uuc2xpY2UoMCxuKStlLnNsaWNlKGkrMSk6ZX12YXIgSER0PU0oKCk9Pnt9KTtmdW5jdGlvbiBWRHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oRnR0PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxhPW4ubGVuZ3RoO3JldHVybiBvPT09YT9uOm8+YT9uK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9uLnNsaWNlKDAsbykrIi4iK24uc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikraXYoZSxNYXRoLm1heCgwLHQrby0xKSlbMF19dmFyIEZ0dCxCdHQ9TSgoKT0+e21DKCl9KTtmdW5jdGlvbiBIdHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBVRHQ9TSgoKT0+e21DKCl9KTt2YXIgVnR0LHFEdD1NKCgpPT57bUMoKTtCdHQoKTtVRHQoKTtWdHQ9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpORHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSHR0KGUqMTAwLHQpfSxyOkh0dCxzOlZEdCxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19fSk7ZnVuY3Rpb24gVXR0KGUpe3JldHVybiBlfXZhciBHRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGpEdChlKXt2YXIgdD1lLmdyb3VwaW5nPT09dm9pZCAwfHxlLnRob3VzYW5kcz09PXZvaWQgMD9VdHQ6RER0KFdEdC5jYWxsKGUuZ3JvdXBpbmcsTnVtYmVyKSxlLnRob3VzYW5kcysiIikscj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMF0rIiIsbj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMV0rIiIsaT1lLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmUuZGVjaW1hbCsiIixvPWUubnVtZXJhbHM9PT12b2lkIDA/VXR0OnpEdChXRHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxnKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6VnR0W0NdfHwoYj09PXZvaWQgMCYmKGI9MTIpLFM9ITAsQz0iZyIpLChffHxmPT09IjAiJiZwPT09Ij0iKSYmKF89ITAsZj0iMCIscD0iPSIpO3ZhciBQPWc9PT0iJCI/cjpnPT09IiMiJiYvW2JveFhdLy50ZXN0KEMpPyIwIitDLnRvTG93ZXJDYXNlKCk6IiIsaz1nPT09IiQiP246L1slcF0vLnRlc3QoQyk/YToiIixPPVZ0dFtDXSxEPS9bZGVmZ3BycyVdLy50ZXN0KEMpO2I9Yj09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoQyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxiKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxiKSk7ZnVuY3Rpb24gQihJKXt2YXIgTD1QLFI9ayxGLHosVTtpZihDPT09ImMiKVI9TyhJKStSLEk9IiI7ZWxzZXtJPStJO3ZhciBXPUk8MHx8MS9JPDA7aWYoST1pc05hTihJKT9sOk8oTWF0aC5hYnMoSSksYiksUyYmKEk9QkR0KEkpKSxXJiYrST09MCYmZCE9PSIrIiYmKFc9ITEpLEw9KFc/ZD09PSIoIj9kOnM6ZD09PSItInx8ZD09PSIoIj8iIjpkKStMLFI9KEM9PT0icyI/WUR0WzgrRnR0LzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1MZyhoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih2ZihmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1ZRHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIFdEdCxZRHQsWER0PU0oKCk9PntnQygpO09EdCgpO0ZEdCgpO3p0dCgpO0hEdCgpO3FEdCgpO0J0dCgpO0dEdCgpO1dEdD1BcnJheS5wcm90b3R5cGUubWFwLFlEdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIHF0dChlKXtyZXR1cm4gSE89akR0KGUpLGZ3PUhPLmZvcm1hdCxWTz1ITy5mb3JtYXRQcmVmaXgsSE99dmFyIEhPLGZ3LFZPLCREdD1NKCgpPT57WER0KCk7cXR0KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KX0pO2Z1bmN0aW9uIEd0dChlKXtyZXR1cm4gTWF0aC5tYXgoMCwtdmYoTWF0aC5hYnMoZSkpKX12YXIgS0R0PU0oKCk9PntnQygpfSk7ZnVuY3Rpb24gV3R0KGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHZmKHQpLzMpKSkqMy12ZihNYXRoLmFicyhlKSkpfXZhciBaRHQ9TSgoKT0+e2dDKCl9KTtmdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZT1NYXRoLmFicyhlKSx0PU1hdGguYWJzKHQpLWUsTWF0aC5tYXgoMCx2Zih0KS12ZihlKSkrMX12YXIgSkR0PU0oKCk9PntnQygpfSk7dmFyIGp0dD1NKCgpPT57JER0KCk7enR0KCk7S0R0KCk7WkR0KCk7SkR0KCl9KTtmdW5jdGlvbiBRRHQoZSx0LHIpe3ZhciBuPWVbMF0saT1lW2UubGVuZ3RoLTFdLG89WnkobixpLHQ9PW51bGw/MTA6dCksYTtzd2l0Y2gocj1MZyhyPT1udWxsPyIsZiI6ciksci50eXBlKXtjYXNlInMiOnt2YXIgcz1NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhpKSk7cmV0dXJuIHIucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1XdHQobyxzKSkmJihyLnByZWNpc2lvbj1hKSxWTyhyLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntyLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9WXR0KG8sTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMoaSkpKSkmJihyLnByZWNpc2lvbj1hLShyLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3IucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1HdHQobykpJiYoci5wcmVjaXNpb249YS0oci50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIGZ3KHIpfXZhciB0T3Q9TSgoKT0+e21mKCk7anR0KCl9KTtmdW5jdGlvbiBvZChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIHNDKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gUUR0KHQoKSxyLG4pfSxlLm5pY2U9ZnVuY3Rpb24ocil7cj09bnVsbCYmKHI9MTApO3ZhciBuPXQoKSxpPTAsbz1uLmxlbmd0aC0xLGE9bltpXSxzPW5bb10sbDtyZXR1cm4gczxhJiYobD1hLGE9cyxzPWwsbD1pLGk9byxvPWwpLGw9ZXcoYSxzLHIpLGw+MD8oYT1NYXRoLmZsb29yKGEvbCkqbCxzPU1hdGguY2VpbChzL2wpKmwsbD1ldyhhLHMscikpOmw8MCYmKGE9TWF0aC5jZWlsKGEqbCkvbCxzPU1hdGguZmxvb3IocypsKS9sLGw9ZXcoYSxzLHIpKSxsPjA/KG5baV09TWF0aC5mbG9vcihhL2wpKmwsbltvXT1NYXRoLmNlaWwocy9sKSpsLHQobikpOmw8MCYmKG5baV09TWF0aC5jZWlsKGEqbCkvbCxuW29dPU1hdGguZmxvb3IocypsKS9sLHQobikpLGV9LGV9ZnVuY3Rpb24gVU8oKXt2YXIgZT1pZChwQyx5Zik7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhlLFVPKCkpfSxvZChlKX12YXIgcHc9TSgoKT0+e21mKCk7dXcoKTtkQygpO3RPdCgpfSk7ZnVuY3Rpb24gcU8oKXt2YXIgZT1bMCwxXTtmdW5jdGlvbiB0KHIpe3JldHVybityfXJldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cncuY2FsbChyLEZPKSx0KTplLnNsaWNlKCl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBxTygpLmRvbWFpbihlKX0sb2QodCl9dmFyIGVPdD1NKCgpPT57Q2coKTtwdygpO090dCgpfSk7ZnVuY3Rpb24gR08oZSx0KXtlPWUuc2xpY2UoKTt2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbcl0sbz1lW25dLGE7cmV0dXJuIG88aSYmKGE9cixyPW4sbj1hLGE9aSxpPW8sbz1hKSxlW3JdPXQuZmxvb3IoaSksZVtuXT10LmNlaWwobyksZX12YXIgWHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBlSWUoZSx0KXtyZXR1cm4odD1NYXRoLmxvZyh0L2UpKT9mdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5sb2coci9lKS90fTpodyh0KX1mdW5jdGlvbiBySWUoZSx0KXtyZXR1cm4gZTwwP2Z1bmN0aW9uKHIpe3JldHVybi1NYXRoLnBvdygtdCxyKSpNYXRoLnBvdygtZSwxLXIpfTpmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCxyKSpNYXRoLnBvdyhlLDEtcil9fWZ1bmN0aW9uIG5JZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gck90KGUpe3JldHVybiBlPT09MTA/bkllOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIG5PdChlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gaU90KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIFdPKCl7dmFyIGU9aWQoZUllLHJJZSkuZG9tYWluKFsxLDEwXSksdD1lLmRvbWFpbixyPTEwLG49bk90KDEwKSxpPXJPdCgxMCk7ZnVuY3Rpb24gbygpe3JldHVybiBuPW5PdChyKSxpPXJPdChyKSx0KClbMF08MCYmKG49aU90KG4pLGk9aU90KGkpKSxlfXJldHVybiBlLmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2EsbygpKTpyfSxlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChhKSxvKCkpOnQoKX0sZS50aWNrcz1mdW5jdGlvbihhKXt2YXIgcz10KCksbD1zWzBdLGM9c1tzLmxlbmd0aC0xXSx1Oyh1PWM8bCkmJihoPWwsbD1jLGM9aCk7dmFyIGg9bihsKSxmPW4oYykscCxkLGcsXz1hPT1udWxsPzEwOithLHk9W107aWYoIShyJTEpJiZmLWg8Xyl7aWYoaD1NYXRoLnJvdW5kKGgpLTEsZj1NYXRoLnJvdW5kKGYpKzEsbD4wKXtmb3IoO2g8ZjsrK2gpZm9yKGQ9MSxwPWkoaCk7ZDxyOysrZClpZihnPXAqZCwhKGc8bCkpe2lmKGc+YylicmVhazt5LnB1c2goZyl9fWVsc2UgZm9yKDtoPGY7KytoKWZvcihkPXItMSxwPWkoaCk7ZD49MTstLWQpaWYoZz1wKmQsIShnPGwpKXtpZihnPmMpYnJlYWs7eS5wdXNoKGcpfX1lbHNlIHk9c0MoaCxmLE1hdGgubWluKGYtaCxfKSkubWFwKGkpO3JldHVybiB1P3kucmV2ZXJzZSgpOnl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihhLHMpe2lmKHM9PW51bGwmJihzPXI9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBzIT0iZnVuY3Rpb24iJiYocz1mdyhzKSksYT09PTEvMClyZXR1cm4gczthPT1udWxsJiYoYT0xMCk7dmFyIGw9TWF0aC5tYXgoMSxyKmEvZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciB1PWMvaShNYXRoLnJvdW5kKG4oYykpKTtyZXR1cm4gdSpyPHItLjUmJih1Kj1yKSx1PD1sP3MoYyk6IiJ9fSxlLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdChHTyh0KCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguZmxvb3IobihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguY2VpbChuKGEpKSl9fSkpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoZSxXTygpLmJhc2UocikpfSxlfXZhciBvT3Q9TSgoKT0+e21mKCk7anR0KCk7ek8oKTtYdHQoKTtkQygpfSk7ZnVuY3Rpb24gZHcoZSx0KXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfWZ1bmN0aW9uIF9DKCl7dmFyIGU9MSx0PWlkKG4saSkscj10LmRvbWFpbjtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuKGE9ZHcoYSxlKS0obz1kdyhvLGUpKSk/ZnVuY3Rpb24ocyl7cmV0dXJuKGR3KHMsZSktbykvYX06aHcoYSl9ZnVuY3Rpb24gaShvLGEpe3JldHVybiBhPWR3KGEsZSktKG89ZHcobyxlKSksZnVuY3Rpb24ocyl7cmV0dXJuIGR3KG8rYSpzLDEvZSl9fXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStvLHIocigpKSk6ZX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHQsX0MoKS5leHBvbmVudChlKSl9LG9kKHQpfWZ1bmN0aW9uIGFPdCgpe3JldHVybiBfQygpLmV4cG9uZW50KC41KX12YXIgc090PU0oKCk9Pnt6TygpO3B3KCk7ZEMoKX0pO2Z1bmN0aW9uIFlPKCl7dmFyIGU9W10sdD1bXSxyPVtdO2Z1bmN0aW9uIG4oKXt2YXIgbz0wLGE9TWF0aC5tYXgoMSx0Lmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KGEtMSk7KytvPGE7KXJbby0xXT1sQyhlLG8vYSk7cmV0dXJuIGl9ZnVuY3Rpb24gaShvKXtpZighaXNOYU4obz0rbykpcmV0dXJuIHRbZGYocixvKV19cmV0dXJuIGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG8pe3ZhciBhPXQuaW5kZXhPZihvKTtyZXR1cm4gYTwwP1tOYU4sTmFOXTpbYT4wP3JbYS0xXTplWzBdLGE8ci5sZW5ndGg/clthXTplW2UubGVuZ3RoLTFdXX0saS5kb21haW49ZnVuY3Rpb24obyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgYT0wLHM9by5sZW5ndGgsbDthPHM7KythKWw9b1thXSxsIT1udWxsJiYhaXNOYU4obD0rbCkmJmUucHVzaChsKTtyZXR1cm4gZS5zb3J0KHBmKSxuKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChvKSxuKCkpOnQuc2xpY2UoKX0saS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWU8oKS5kb21haW4oZSkucmFuZ2UodCl9LGl9dmFyIGxPdD1NKCgpPT57bWYoKTtDZygpfSk7ZnVuY3Rpb24gak8oKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV07ZnVuY3Rpb24gbyhzKXtpZihzPD1zKXJldHVybiBpW2RmKG4scywwLHIpXX1mdW5jdGlvbiBhKCl7dmFyIHM9LTE7Zm9yKG49bmV3IEFycmF5KHIpOysrczxyOyluW3NdPSgocysxKSp0LShzLXIpKmUpLyhyKzEpO3JldHVybiBvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rc1swXSx0PStzWzFdLGEoKSk6W2UsdF19LG8ucmFuZ2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGk9cGwuY2FsbChzKSkubGVuZ3RoLTEsYSgpKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHMpe3ZhciBsPWkuaW5kZXhPZihzKTtyZXR1cm4gbDwwP1tOYU4sTmFOXTpsPDE/W2UsblswXV06bD49cj9bbltyLTFdLHRdOltuW2wtMV0sbltsXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBqTygpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSl9LG9kKG8pfXZhciBjT3Q9TSgoKT0+e21mKCk7Q2coKTtwdygpfSk7ZnVuY3Rpb24gWE8oKXt2YXIgZT1bLjVdLHQ9WzAsMV0scj0xO2Z1bmN0aW9uIG4oaSl7aWYoaTw9aSlyZXR1cm4gdFtkZihlLGksMCxyKV19cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXBsLmNhbGwoaSkscj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxuKTplLnNsaWNlKCl9LG4ucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChpKSxyPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLG4pOnQuc2xpY2UoKX0sbi5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oaSl7dmFyIG89dC5pbmRleE9mKGkpO3JldHVybltlW28tMV0sZVtvXV19LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBYTygpLmRvbWFpbihlKS5yYW5nZSh0KX0sbn12YXIgdU90PU0oKCk9PnttZigpO0NnKCl9KTtmdW5jdGlvbiBOcihlLHQscixuKXtmdW5jdGlvbiBpKG8pe3JldHVybiBlKG89YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoK28pKSxvfSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBOcihmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuICR0dC5zZXRUaW1lKCtvKSxLdHQuc2V0VGltZSgrYSksZSgkdHQpLGUoS3R0KSxNYXRoLmZsb29yKHIoJHR0LEt0dCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciAkdHQsS3R0LEthPU0oKCk9PnskdHQ9bmV3IERhdGUsS3R0PW5ldyBEYXRlfSk7dmFyICRPLG13LGhPdCxmT3Q9TSgoKT0+e0thKCk7JE89TnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTskTy5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP05yKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOiRPfTttdz0kTyxoT3Q9JE8ucmFuZ2V9KTt2YXIgb3Ysd2MsZ3csS08sWk8seGY9TSgoKT0+e292PTFlMyx3Yz02ZTQsZ3c9MzZlNSxLTz04NjRlNSxaTz02MDQ4ZTV9KTt2YXIgcE90LF93LGRPdCxtT3Q9TSgoKT0+e0thKCk7eGYoKTtwT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqb3YpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL292fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxfdz1wT3QsZE90PXBPdC5yYW5nZX0pO3ZhciBnT3QsWnR0LGlJZSxfT3Q9TSgoKT0+e0thKCk7eGYoKTtnT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpvdil9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxadHQ9Z090LGlJZT1nT3QucmFuZ2V9KTt2YXIgeU90LEp0dCxvSWUsdk90PU0oKCk9PntLYSgpO3hmKCk7eU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqb3YtZS5nZXRNaW51dGVzKCkqd2MpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Kmd3KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9nd30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLEp0dD15T3Qsb0llPXlPdC5yYW5nZX0pO3ZhciB4T3QseXcsYUllLGJPdD1NKCgpPT57S2EoKTt4ZigpO3hPdD1OcihmdW5jdGlvbihlKXtlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvS099LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGUoKS0xfSkseXc9eE90LGFJZT14T3QucmFuZ2V9KTtmdW5jdGlvbiBhdihlKXtyZXR1cm4gTnIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctZSklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldERhdGUodC5nZXREYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10LShyLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvWk99KX12YXIgc3Ysdncsd090LFNPdCxrZyxNT3QsRU90LFRPdCxzSWUsbEllLGNJZSx1SWUsaEllLGZJZSxDT3Q9TSgoKT0+e0thKCk7eGYoKTtzdj1hdigwKSx2dz1hdigxKSx3T3Q9YXYoMiksU090PWF2KDMpLGtnPWF2KDQpLE1PdD1hdig1KSxFT3Q9YXYoNiksVE90PXN2LnJhbmdlLHNJZT12dy5yYW5nZSxsSWU9d090LnJhbmdlLGNJZT1TT3QucmFuZ2UsdUllPWtnLnJhbmdlLGhJZT1NT3QucmFuZ2UsZkllPUVPdC5yYW5nZX0pO3ZhciBBT3QsUXR0LHBJZSxQT3Q9TSgoKT0+e0thKCk7QU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLFF0dD1BT3QscEllPUFPdC5yYW5nZX0pO3ZhciB0ZXQsYWQsZEllLElPdD1NKCgpPT57S2EoKTt0ZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTt0ZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTthZD10ZXQsZEllPXRldC5yYW5nZX0pO3ZhciBMT3QsZWV0LG1JZSxrT3Q9TSgoKT0+e0thKCk7eGYoKTtMT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9KSxlZXQ9TE90LG1JZT1MT3QucmFuZ2V9KTt2YXIgUk90LHJldCxnSWUsTk90PU0oKCk9PntLYSgpO3hmKCk7Uk90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqZ3cpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL2d3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSkscmV0PVJPdCxnSWU9Uk90LnJhbmdlfSk7dmFyIERPdCx4dyxfSWUsT090PU0oKCk9PntLYSgpO3hmKCk7RE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0tPfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLHh3PURPdCxfSWU9RE90LnJhbmdlfSk7ZnVuY3Rpb24gbHYoZSl7cmV0dXJuIE5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvWk99KX12YXIgY3YsYncsek90LEZPdCxSZyxCT3QsSE90LFZPdCx5SWUsdkllLHhJZSxiSWUsd0llLFNJZSxVT3Q9TSgoKT0+e0thKCk7eGYoKTtjdj1sdigwKSxidz1sdigxKSx6T3Q9bHYoMiksRk90PWx2KDMpLFJnPWx2KDQpLEJPdD1sdig1KSxIT3Q9bHYoNiksVk90PWN2LnJhbmdlLHlJZT1idy5yYW5nZSx2SWU9ek90LnJhbmdlLHhJZT1GT3QucmFuZ2UsYkllPVJnLnJhbmdlLHdJZT1CT3QucmFuZ2UsU0llPUhPdC5yYW5nZX0pO3ZhciBxT3QsbmV0LE1JZSxHT3Q9TSgoKT0+e0thKCk7cU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLG5ldD1xT3QsTUllPXFPdC5yYW5nZX0pO3ZhciBpZXQsc2QsRUllLFdPdD1NKCgpPT57S2EoKTtpZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTtpZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvZSkqZSksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrciplKX0pfTtzZD1pZXQsRUllPWlldC5yYW5nZX0pO3ZhciBKTz1NKCgpPT57Zk90KCk7bU90KCk7X090KCk7dk90KCk7Yk90KCk7Q090KCk7UE90KCk7SU90KCk7a090KCk7Tk90KCk7T090KCk7VU90KCk7R090KCk7V090KCl9KTtmdW5jdGlvbiBvZXQoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGFldChlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiB5QyhlLHQscil7cmV0dXJue3k6ZSxtOnQsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gc2V0KGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPXZDKGkpLHU9eEMoaSksaD12QyhvKSxmPXhDKG8pLHA9dkMoYSksZD14QyhhKSxnPXZDKHMpLF89eEMocykseT12QyhsKSx4PXhDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOlpPdCxlOlpPdCxmOlhJZSxnOmk5ZSxHOmE5ZSxIOldJZSxJOllJZSxqOmpJZSxMOnI3dCxtOiRJZSxNOktJZSxwOnN0LHE6U3QsUTp0N3QsczplN3QsUzpaSWUsdTpKSWUsVTpRSWUsVjp0OWUsdzplOWUsVzpyOWUseDpudWxsLFg6bnVsbCx5Om45ZSxZOm85ZSxaOnM5ZSwiJSI6UU90fSxTPXthOmJ0LEE6TXQsYjpsdCxCOkt0LGM6bnVsbCxkOkpPdCxlOkpPdCxmOmg5ZSxnOmI5ZSxHOlM5ZSxIOmw5ZSxJOmM5ZSxqOnU5ZSxMOmk3dCxtOmY5ZSxNOnA5ZSxwOl90LHE6Y3QsUTp0N3QsczplN3QsUzpkOWUsdTptOWUsVTpnOWUsVjpfOWUsdzp5OWUsVzp2OWUseDpudWxsLFg6bnVsbCx5Ong5ZSxZOnc5ZSxaOk05ZSwiJSI6UU90fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6JE90LGU6JE90LGY6VkllLGc6WE90LEc6ak90LEg6S090LEk6S090LGo6ekllLEw6SEllLG06T0llLE06RkllLHA6RCxxOkRJZSxROnFJZSxzOkdJZSxTOkJJZSx1OklJZSxVOkxJZSxWOmtJZSx3OlBJZSxXOlJJZSx4OnosWDpVLHk6WE90LFk6ak90LFo6TkllLCIlIjpVSWV9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT1bXSxwdD0tMSxodD0wLHd0PVgubGVuZ3RoLGt0LGllLGVlO2ZvcihkdCBpbnN0YW5jZW9mIERhdGV8fChkdD1uZXcgRGF0ZSgrZHQpKTsrK3B0PHd0OylYLmNoYXJDb2RlQXQocHQpPT09MzcmJihxLnB1c2goWC5zbGljZShodCxwdCkpLChpZT1ZT3Rba3Q9WC5jaGFyQXQoKytwdCldKSE9bnVsbD9rdD1YLmNoYXJBdCgrK3B0KTppZT1rdD09PSJlIj8iICI6IjAiLChlZT1ldFtrdF0pJiYoa3Q9ZWUoZHQsaWUpKSxxLnB1c2goa3QpLGh0PXB0KzEpO3JldHVybiBxLnB1c2goWC5zbGljZShodCxwdCkpLHEuam9pbigiIil9fWZ1bmN0aW9uIGsoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT15QygxOTAwLHZvaWQgMCwxKSxwdD1PKHEsWCxkdCs9IiIsMCksaHQsd3Q7aWYocHQhPWR0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBxKXJldHVybiBuZXcgRGF0ZShxLlEpO2lmKCJzImluIHEpcmV0dXJuIG5ldyBEYXRlKHEucyoxZTMrKCJMImluIHE/cS5MOjApKTtpZihldCYmISgiWiJpbiBxKSYmKHEuWj0wKSwicCJpbiBxJiYocS5IPXEuSCUxMitxLnAqMTIpLHEubT09PXZvaWQgMCYmKHEubT0icSJpbiBxP3EucTowKSwiViJpbiBxKXtpZihxLlY8MXx8cS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHF8fChxLnc9MSksIloiaW4gcT8oaHQ9YWV0KHlDKHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/YncuY2VpbChodCk6YncoaHQpLGh0PXh3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9b2V0KHlDKHEueSwwLDEpKSx3dD1odC5nZXREYXkoKSxodD13dD40fHx3dD09PTA/dncuY2VpbChodCk6dncoaHQpLGh0PXl3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRGdWxsWWVhcigpLHEubT1odC5nZXRNb250aCgpLHEuZD1odC5nZXREYXRlKCkrKHEudys2KSU3KX1lbHNlKCJXImluIHF8fCJVImluIHEpJiYoInciaW4gcXx8KHEudz0idSJpbiBxP3EudSU3OiJXImluIHE/MTowKSx3dD0iWiJpbiBxP2FldCh5QyhxLnksMCwxKSkuZ2V0VVRDRGF5KCk6b2V0KHlDKHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYWV0KHEpKTpvZXQocSl9fWZ1bmN0aW9uIE8oWCxldCxkdCxxKXtmb3IodmFyIHB0PTAsaHQ9ZXQubGVuZ3RoLHd0PWR0Lmxlbmd0aCxrdCxpZTtwdDxodDspe2lmKHE+PXd0KXJldHVybi0xO2lmKGt0PWV0LmNoYXJDb2RlQXQocHQrKyksa3Q9PT0zNyl7aWYoa3Q9ZXQuY2hhckF0KHB0KyspLGllPUNba3QgaW4gWU90P2V0LmNoYXJBdChwdCsrKTprdF0sIWllfHwocT1pZShYLGR0LHEpKTwwKXJldHVybi0xfWVsc2UgaWYoa3QhPWR0LmNoYXJDb2RlQXQocSsrKSlyZXR1cm4tMX1yZXR1cm4gcX1mdW5jdGlvbiBEKFgsZXQsZHQpe3ZhciBxPWMuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnA9dVtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKFgsZXQsZHQpe3ZhciBxPXAuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKFgsZXQsZHQpe3ZhciBxPWguZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZltxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKFgsZXQsZHQpe3ZhciBxPXkuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09eFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKFgsZXQsZHQpe3ZhciBxPWcuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09X1txWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKFgsZXQsZHQpe3JldHVybiBPKFgsdCxldCxkdCl9ZnVuY3Rpb24geihYLGV0LGR0KXtyZXR1cm4gTyhYLHIsZXQsZHQpfWZ1bmN0aW9uIFUoWCxldCxkdCl7cmV0dXJuIE8oWCxuLGV0LGR0KX1mdW5jdGlvbiBXKFgpe3JldHVybiBhW1guZ2V0RGF5KCldfWZ1bmN0aW9uIFooWCl7cmV0dXJuIG9bWC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoWCl7cmV0dXJuIGxbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChYKXtyZXR1cm4gc1tYLmdldE1vbnRoKCldfWZ1bmN0aW9uIHN0KFgpe3JldHVybiBpWysoWC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KFgpe3JldHVybiAxK35+KFguZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBidChYKXtyZXR1cm4gYVtYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChYKXtyZXR1cm4gb1tYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBsdChYKXtyZXR1cm4gbFtYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KFgpe3JldHVybiBzW1guZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gX3QoWCl7cmV0dXJuIGlbKyhYLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gY3QoWCl7cmV0dXJuIDErfn4oWC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsYik7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSxwYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMSk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsUyk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNQYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMCk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fX19ZnVuY3Rpb24gR3IoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gQUllKGUpe3JldHVybiBlLnJlcGxhY2UoQ0llLCJcXCQmIil9ZnVuY3Rpb24gdkMoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKEFJZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHhDKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIFBJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTEllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGtJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gak90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5JZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICRPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6SWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS090KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSEllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBVSWUoZSx0LHIpe3ZhciBuPVRJZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIHFJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFpPdChlLHQpe3JldHVybiBHcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIFdJZShlLHQpe3JldHVybiBHcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBZSWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIGpJZShlLHQpe3JldHVybiBHcigxK3l3LmNvdW50KGFkKGUpLGUpLHQsMyl9ZnVuY3Rpb24gcjd0KGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBYSWUoZSx0KXtyZXR1cm4gcjd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gJEllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gS0llKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gWkllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gSkllKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBRSWUoZSx0KXtyZXR1cm4gR3Ioc3YuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIG43dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD9rZyhlKTprZy5jZWlsKGUpfWZ1bmN0aW9uIHQ5ZShlLHQpe3JldHVybiBlPW43dChlKSxHcihrZy5jb3VudChhZChlKSxlKSsoYWQoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIGU5ZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiByOWUoZSx0KXtyZXR1cm4gR3IodncuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIG45ZShlLHQpe3JldHVybiBHcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gaTllKGUsdCl7cmV0dXJuIGU9bjd0KGUpLEdyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBvOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGE5ZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/a2coZSk6a2cuY2VpbChlKSxHcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gczllKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrR3IodC82MHwwLCIwIiwyKStHcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBKT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBsOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gYzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiB1OWUoZSx0KXtyZXR1cm4gR3IoMSt4dy5jb3VudChzZChlKSxlKSx0LDMpfWZ1bmN0aW9uIGk3dChlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gaDllKGUsdCl7cmV0dXJuIGk3dChlLHQpKyIwMDAifWZ1bmN0aW9uIGY5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIHA5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIGQ5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIG05ZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gZzllKGUsdCl7cmV0dXJuIEdyKGN2LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBvN3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/UmcoZSk6UmcuY2VpbChlKX1mdW5jdGlvbiBfOWUoZSx0KXtyZXR1cm4gZT1vN3QoZSksR3IoUmcuY291bnQoc2QoZSksZSkrKHNkKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiB5OWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gdjllKGUsdCl7cmV0dXJuIEdyKGJ3LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB4OWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIGI5ZShlLHQpe3JldHVybiBlPW83dChlKSxHcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBTOWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP1JnKGUpOlJnLmNlaWwoZSksR3IoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIE05ZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gUU90KCl7cmV0dXJuIiUifWZ1bmN0aW9uIHQ3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBlN3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgWU90LFRvLFRJZSxDSWUsYTd0PU0oKCk9PntKTygpO1lPdD17Ii0iOiIiLF86IiAiLDA6IjAifSxUbz0vXlxzKlxkKy8sVEllPS9eJS8sQ0llPS9bXFxeJCorP3xbXF0oKS57fV0vZ30pO2Z1bmN0aW9uIGNldChlKXtyZXR1cm4gd3c9c2V0KGUpLFFPPXd3LmZvcm1hdCxzN3Q9d3cucGFyc2UsdDc9d3cudXRjRm9ybWF0LGw3dD13dy51dGNQYXJzZSx3d312YXIgd3csUU8sczd0LHQ3LGw3dCxjN3Q9TSgoKT0+e2E3dCgpO2NldCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pfSk7dmFyIHVldD1NKCgpPT57Yzd0KCl9KTtmdW5jdGlvbiBUOWUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIEM5ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/K2U6K25ldyBEYXRlKCtlKX1mdW5jdGlvbiBlNyhlLHQscixuLGksbyxhLHMsbCl7dmFyIGM9aWQocEMseWYpLHU9Yy5pbnZlcnQsaD1jLmRvbWFpbixmPWwoIi4lTCIpLHA9bCgiOiVTIiksZD1sKCIlSTolTSIpLGc9bCgiJUkgJXAiKSxfPWwoIiVhICVkIikseT1sKCIlYiAlZCIpLHg9bCgiJUIiKSxiPWwoIiVZIiksUz1bW2EsMSxiQ10sW2EsNSw1KmJDXSxbYSwxNSwxNSpiQ10sW2EsMzAsMzAqYkNdLFtvLDEsd0NdLFtvLDUsNSp3Q10sW28sMTUsMTUqd0NdLFtvLDMwLDMwKndDXSxbaSwxLFNDXSxbaSwzLDMqU0NdLFtpLDYsNipTQ10sW2ksMTIsMTIqU0NdLFtuLDEsTUNdLFtuLDIsMipNQ10sW3IsMSxFOWVdLFt0LDEsdTd0XSxbdCwzLDMqdTd0XSxbZSwxLGhldF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9YUMoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj1aeShPL2hldCxEL2hldCxrKSxrPWUpOkw/KEw9U1tJL1NbTC0xXVsyXTxTW0xdWzJdL0k/TC0xOkxdLEI9TFsxXSxrPUxbMF0pOihCPU1hdGgubWF4KFp5KE8sRCxrKSwxKSxrPXMpfXJldHVybiBCPT1udWxsP2s6ay5ldmVyeShCKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEYXRlKHUoaykpfSxjLmRvbWFpbj1mdW5jdGlvbihrKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKHJ3LmNhbGwoayxDOWUpKTpoKCkubWFwKFQ5ZSl9LGMudGlja3M9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCksQj1EWzBdLEk9RFtELmxlbmd0aC0xXSxMPUk8QixSO3JldHVybiBMJiYoUj1CLEI9SSxJPVIpLFI9UChrLEIsSSxPKSxSPVI/Ui5yYW5nZShCLEkrMSk6W10sTD9SLnJldmVyc2UoKTpSfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oayxPKXtyZXR1cm4gTz09bnVsbD9DOmwoTyl9LGMubmljZT1mdW5jdGlvbihrLE8pe3ZhciBEPWgoKTtyZXR1cm4oaz1QKGssRFswXSxEW0QubGVuZ3RoLTFdLE8pKT9oKEdPKEQsaykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhjLGU3KGUsdCxyLG4saSxvLGEscyxsKSl9LGN9ZnVuY3Rpb24gaDd0KCl7cmV0dXJuIGU3KGFkLFF0dCxzdix5dyxKdHQsWnR0LF93LG13LFFPKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9dmFyIGJDLHdDLFNDLE1DLEU5ZSx1N3QsaGV0LGZldD1NKCgpPT57bWYoKTt1dygpO0pPKCk7dWV0KCk7Q2coKTtkQygpO1h0dCgpO2JDPTFlMyx3Qz1iQyo2MCxTQz13Qyo2MCxNQz1TQyoyNCxFOWU9TUMqNyx1N3Q9TUMqMzAsaGV0PU1DKjM2NX0pO2Z1bmN0aW9uIGY3dCgpe3JldHVybiBlNyhzZCxuZXQsY3YseHcscmV0LGVldCxfdyxtdyx0NykuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfXZhciBwN3Q9TSgoKT0+e2ZldCgpO3VldCgpO0pPKCl9KTtmdW5jdGlvbiBkbChlKXtyZXR1cm4gZS5tYXRjaCgvLns2fS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiMiK3R9KX12YXIgU3c9TSgoKT0+e30pO3ZhciBkN3QsbTd0PU0oKCk9PntTdygpO2Q3dD1kbCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIil9KTt2YXIgZzd0LF83dD1NKCgpPT57U3coKTtnN3Q9ZGwoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpfSk7dmFyIHk3dCx2N3Q9TSgoKT0+e1N3KCk7eTd0PWRsKCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKX0pO3ZhciB4N3QsYjd0PU0oKCk9PntTdygpO3g3dD1kbCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1Iil9KTt2YXIgdzd0LFM3dD1NKCgpPT57c3coKTt1dygpO3c3dD1jdygkYSgzMDAsLjUsMCksJGEoLTI0MCwuNSwxKSl9KTtmdW5jdGlvbiBUN3QoZSl7KGU8MHx8ZT4xKSYmKGUtPU1hdGguZmxvb3IoZSkpO3ZhciB0PU1hdGguYWJzKGUtLjUpO3JldHVybiByNy5oPTM2MCplLTEwMCxyNy5zPTEuNS0xLjUqdCxyNy5sPS44LS45KnQscjcrIiJ9dmFyIE03dCxFN3QscjcsQzd0PU0oKCk9PntzdygpO3V3KCk7TTd0PWN3KCRhKC0xMDAsLjc1LC4zNSksJGEoODAsMS41LC44KSksRTd0PWN3KCRhKDI2MCwuNzUsLjM1KSwkYSg4MCwxLjUsLjgpKSxyNz0kYSgpfSk7ZnVuY3Rpb24gbjcoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4odC0xLE1hdGguZmxvb3Iocip0KSkpXX19dmFyIEE3dCxQN3QsSTd0LEw3dCxrN3Q9TSgoKT0+e1N3KCk7QTd0PW43KGRsKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksUDd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksSTd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksTDd0PW43KGRsKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSl9KTtmdW5jdGlvbiBpNyhlKXt2YXIgdD0wLHI9MSxuPSExO2Z1bmN0aW9uIGkobyl7dmFyIGE9KG8tdCkvKHItdCk7cmV0dXJuIGUobj9NYXRoLm1heCgwLE1hdGgubWluKDEsYSkpOmEpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rb1swXSxyPStvWzFdLGkpOlt0LHJdfSxpLmNsYW1wPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhbyxpKTpufSxpLmludGVycG9sYXRvcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBpNyhlKS5kb21haW4oW3Qscl0pLmNsYW1wKG4pfSxvZChpKX12YXIgUjd0PU0oKCk9PntwdygpfSk7dmFyIE43dD1NKCgpPT57ak50KCk7ZU90KCk7cHcoKTtvT3QoKTt4dHQoKTtzT3QoKTtsT3QoKTtjT3QoKTt1T3QoKTtmZXQoKTtwN3QoKTttN3QoKTtfN3QoKTt2N3QoKTtiN3QoKTtTN3QoKTtDN3QoKTtrN3QoKTtSN3QoKX0pO3ZhciBvNyxFQyxhNz1NKCgpPT57bzc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEVDPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvNyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gTXcoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksRUMuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkVDW3RdLGxvY2FsOmV9OmV9dmFyIHM3PU0oKCk9PnthNygpfSk7ZnVuY3Rpb24gQTllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09bzcmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PW83P3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBQOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTmcoZSl7dmFyIHQ9TXcoZSk7cmV0dXJuKHQubG9jYWw/UDllOkE5ZSkodCl9dmFyIFRDPU0oKCk9PntzNygpO2E3KCl9KTtmdW5jdGlvbiBJOWUoKXt9ZnVuY3Rpb24gRXcoZSl7cmV0dXJuIGU9PW51bGw/STllOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIGw3PU0oKCk9Pnt9KTtmdW5jdGlvbiBEN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUV3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgQm4obix0aGlzLl9wYXJlbnRzKX12YXIgTzd0PU0oKCk9PntTYygpO2w3KCl9KTtmdW5jdGlvbiBMOWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBjNyhlKXtyZXR1cm4gZT09bnVsbD9MOWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgcGV0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6N3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWM3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBCbihuLGkpfXZhciBGN3Q9TSgoKT0+e1NjKCk7cGV0KCl9KTt2YXIgSDd0LFR3LEI3dCx1NyxkZXQ9TSgoKT0+e0g3dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX07dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFR3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxUdy5tYXRjaGVzfHwoQjd0PVR3LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8VHcubXNNYXRjaGVzU2VsZWN0b3J8fFR3Lm1vek1hdGNoZXNTZWxlY3Rvcnx8VHcub01hdGNoZXNTZWxlY3RvcixIN3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEI3dC5jYWxsKHRoaXMsZSl9fSkpO3U3PUg3dH0pO2Z1bmN0aW9uIFY3dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dTcoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEJuKG4sdGhpcy5fcGFyZW50cyl9dmFyIFU3dD1NKCgpPT57U2MoKTtkZXQoKX0pO2Z1bmN0aW9uIGg3KGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBtZXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHE3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoaDcpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENDKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBnZXQ9TSgoKT0+e21ldCgpO1NjKCk7Q0MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDQyxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIEc3dChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFc3dD1NKCgpPT57fSk7ZnVuY3Rpb24gazllKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBDQyhlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gUjllKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9WTd0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9WTd0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IENDKGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gajd0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9SOWU6azllLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Rzd0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBCbihhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIFk3dCxYN3Q9TSgoKT0+e1NjKCk7Z2V0KCk7Vzd0KCk7WTd0PSIkIn0pO2Z1bmN0aW9uICQ3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChoNyksdGhpcy5fcGFyZW50cyl9dmFyIEs3dD1NKCgpPT57bWV0KCk7U2MoKX0pO2Z1bmN0aW9uIFo3dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgQm4oYSx0aGlzLl9wYXJlbnRzKX12YXIgSjd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gUTd0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmbyE9PWEubmV4dFNpYmxpbmcmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciB0enQ9TSgoKT0+e30pO2Z1bmN0aW9uIGV6dChlKXtlfHwoZT1OOWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgQm4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIE45ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgcnp0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gbnp0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBpenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG96dCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBhenQ9TSgoKT0+e30pO2Z1bmN0aW9uIHN6dCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGx6dD1NKCgpPT57fSk7ZnVuY3Rpb24gY3p0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgdXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBoenQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGZ6dD1NKCgpPT57fSk7ZnVuY3Rpb24gcHp0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgZHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBEOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIE85ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIHo5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIEY5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBCOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIEg5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBtenQoZSx0KXt2YXIgcj1NdyhlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/TzllOkQ5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP0g5ZTpCOWU6ci5sb2NhbD9GOWU6ejllKShyLHQpKX12YXIgZ3p0PU0oKCk9PntzNygpfSk7ZnVuY3Rpb24gQ3coZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBmNz1NKCgpPT57fSk7ZnVuY3Rpb24gVjllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFU5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIHE5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBfenQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP1Y5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9xOWU6VTllKShlLHQscj09bnVsbD8iIjpyKSk6X2V0KHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIF9ldChlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fEN3KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB5ZXQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBHOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIFc5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gWTllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHl6dChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0c5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ZOWU6VzllKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgdnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiB4enQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHZldChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBienQoZSl9ZnVuY3Rpb24gYnp0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz14enQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB3enQoZSx0KXtmb3IodmFyIHI9dmV0KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gU3p0KGUsdCl7Zm9yKHZhciByPXZldChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGo5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt3enQodGhpcyxlKX19ZnVuY3Rpb24gWDllKGUpe3JldHVybiBmdW5jdGlvbigpe1N6dCh0aGlzLGUpfX1mdW5jdGlvbiAkOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/d3p0OlN6dCkodGhpcyxlKX19ZnVuY3Rpb24gTXp0KGUsdCl7dmFyIHI9eHp0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPXZldCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj8kOWU6dD9qOWU6WDllKShyLHQpKX12YXIgRXp0PU0oKCk9PntienQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gSzllKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBaOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBKOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFR6dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9LOWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0o5ZTpaOWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgQ3p0PU0oKCk9Pnt9KTtmdW5jdGlvbiBROWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB0TGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gZUxlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gQXp0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP1E5ZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/ZUxlOnRMZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgUHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByTGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSXp0KCl7cmV0dXJuIHRoaXMuZWFjaChyTGUpfXZhciBMenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG5MZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGt6dCgpe3JldHVybiB0aGlzLmVhY2gobkxlKX12YXIgUnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBOenQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgRHp0PU0oKCk9PntUQygpfSk7ZnVuY3Rpb24gaUxlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gT3p0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKSxuPXQ9PW51bGw/aUxlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6RXcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciB6enQ9TSgoKT0+e1RDKCk7bDcoKX0pO2Z1bmN0aW9uIG9MZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIEZ6dCgpe3JldHVybiB0aGlzLmVhY2gob0xlKX12YXIgQnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhTGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gc0xlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIEh6dChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9zTGU6YUxlKX12YXIgVnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBVenQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBxenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGxMZShlLHQscil7cmV0dXJuIGU9WXp0KGUsdCxyKSxmdW5jdGlvbihuKXt2YXIgaT1uLnJlbGF0ZWRUYXJnZXQ7KCFpfHxpIT09dGhpcyYmIShpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpJjgpKSYmZS5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFl6dChlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPVB1O1B1PW47dHJ5e2UuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxyKX1maW5hbGx5e1B1PWl9fX1mdW5jdGlvbiBjTGUoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIHVMZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYoISF0KXtmb3IodmFyIHI9MCxuPS0xLGk9dC5sZW5ndGgsbztyPGk7KytyKW89dFtyXSwoIWUudHlwZXx8by50eXBlPT09ZS50eXBlKSYmby5uYW1lPT09ZS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOnRbKytuXT1vOysrbj90Lmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBoTGUoZSx0LHIpe3ZhciBuPVd6dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2xMZTpZenQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz10aGlzLl9fb24sbCxjPW4odCxvLGEpO2lmKHMpe2Zvcih2YXIgdT0wLGg9cy5sZW5ndGg7dTxoOysrdSlpZigobD1zW3VdKS50eXBlPT09ZS50eXBlJiZsLm5hbWU9PT1lLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1yKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoZS50eXBlLGMsciksbD17dHlwZTplLnR5cGUsbmFtZTplLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6cn0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24ganp0KGUsdCxyKXt2YXIgbj1jTGUoZSsiIiksaSxvPW4ubGVuZ3RoLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGgsdTtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8bzsrK2kpaWYoKGE9bltpXSkudHlwZT09PXUudHlwZSYmYS5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfXJldHVybn1mb3Iocz10P2hMZTp1TGUscj09bnVsbCYmKHI9ITEpLGk9MDtpPG87KytpKXRoaXMuZWFjaChzKG5baV0sdCxyKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWHp0KGUsdCxyLG4pe3ZhciBpPVB1O2Uuc291cmNlRXZlbnQ9UHUsUHU9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e1B1PWl9fXZhciBXenQsUHUsR3p0LHA3PU0oKCk9PntXenQ9e30sUHU9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoR3p0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIEd6dHx8KFd6dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiAkenQoZSx0LHIpe3ZhciBuPUN3KGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGZMZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAkenQodGhpcyxlLHQpfX1mdW5jdGlvbiBwTGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gJHp0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIEt6dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3BMZTpmTGUpKGUsdCkpfXZhciBaenQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBCbihlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBKenQoKXtyZXR1cm4gbmV3IEJuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQUMpfXZhciBBQyxRenQsU2M9TSgoKT0+e083dCgpO0Y3dCgpO1U3dCgpO1g3dCgpO2dldCgpO0s3dCgpO0o3dCgpO3R6dCgpO3J6dCgpO2l6dCgpO2F6dCgpO2x6dCgpO3V6dCgpO2Z6dCgpO2R6dCgpO2d6dCgpO3lldCgpO3Z6dCgpO0V6dCgpO0N6dCgpO1B6dCgpO0x6dCgpO1J6dCgpO0R6dCgpO3p6dCgpO0J6dCgpO1Z6dCgpO3F6dCgpO3A3KCk7Wnp0KCk7QUM9W251bGxdO0JuLnByb3RvdHlwZT1KenQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCbixzZWxlY3Q6RDd0LHNlbGVjdEFsbDp6N3QsZmlsdGVyOlY3dCxkYXRhOmo3dCxlbnRlcjpxN3QsZXhpdDokN3QsbWVyZ2U6Wjd0LG9yZGVyOlE3dCxzb3J0OmV6dCxjYWxsOm56dCxub2RlczpvenQsbm9kZTpzenQsc2l6ZTpjenQsZW1wdHk6aHp0LGVhY2g6cHp0LGF0dHI6bXp0LHN0eWxlOl96dCxwcm9wZXJ0eTp5enQsY2xhc3NlZDpNenQsdGV4dDpUenQsaHRtbDpBenQscmFpc2U6SXp0LGxvd2VyOmt6dCxhcHBlbmQ6Tnp0LGluc2VydDpPenQscmVtb3ZlOkZ6dCxjbG9uZTpIenQsZGF0dW06VXp0LG9uOmp6dCxkaXNwYXRjaDpLenR9O1F6dD1KenR9KTtmdW5jdGlvbiBkNyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBCbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEJuKFtbZV1dLEFDKX12YXIgeGV0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gdEZ0KGUpe3JldHVybiBkNyhOZyhlKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBlRnQ9TSgoKT0+e1RDKCk7eGV0KCl9KTtmdW5jdGlvbiBtNygpe3JldHVybiBuZXcgYmV0fWZ1bmN0aW9uIGJldCgpe3RoaXMuXz0iQCIrKCsrZExlKS50b1N0cmluZygzNil9dmFyIGRMZSxyRnQ9TSgoKT0+e2RMZT0wO2JldC5wcm90b3R5cGU9bTcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZXQsZ2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl87ISh0IGluIGUpOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIGVbdF19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlW3RoaXMuX109dH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl8gaW4gZSYmZGVsZXRlIGVbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX19KTtmdW5jdGlvbiBBdygpe2Zvcih2YXIgZT1QdSx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfXZhciBnNz1NKCgpPT57cDcoKX0pO2Z1bmN0aW9uIERnKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBDPU0oKCk9Pnt9KTtmdW5jdGlvbiBuRnQoZSl7dmFyIHQ9QXcoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRGcoZSx0KX12YXIgaUZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBvRnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgQm4oW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgQm4oW2U9PW51bGw/W106ZV0sQUMpfXZhciBhRnQ9TSgoKT0+e1NjKCl9KTtmdW5jdGlvbiBzRnQoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PUF3KCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRGcoZSxvKTtyZXR1cm4gbnVsbH12YXIgbEZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBjRnQoZSx0KXt0PT1udWxsJiYodD1BdygpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EZyhlLHRbcl0pO3JldHVybiBpfXZhciB1RnQ9TSgoKT0+e2c3KCk7UEMoKX0pO3ZhciBoRnQ9TSgoKT0+e2VGdCgpO1RDKCk7ckZ0KCk7ZGV0KCk7aUZ0KCk7czcoKTthNygpO1BDKCk7eGV0KCk7YUZ0KCk7U2MoKTtsNygpO3BldCgpO3lldCgpO2xGdCgpO3VGdCgpO2Y3KCk7cDcoKX0pO2Z1bmN0aW9uIEVldCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGZGdCgpe3JldHVybiBuZXcgRWV0fXZhciB3ZXQsTWV0LHV2LG1MZSxJdSxwRnQ9TSgoKT0+e3dldD1NYXRoLlBJLE1ldD0yKndldCx1dj0xZS02LG1MZT1NZXQtdXY7RWV0LnByb3RvdHlwZT1mRnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpFZXQsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPnV2KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+dXYpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigod2V0LU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnV2JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnV2fHxNYXRoLmFicyh0aGlzLl95MS1jKT51dikmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJU1ldCtNZXQpLGg+bUxlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPnV2JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj13ZXQpKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtJdT1mRnR9KTt2YXIgUHc9TSgoKT0+e3BGdCgpfSk7ZnVuY3Rpb24gR2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBPZz1NKCgpPT57fSk7ZnVuY3Rpb24gbUZ0KGUpe3JldHVybiBlPjE/MDplPC0xP2t1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBDZXQoZSl7cmV0dXJuIGU+PTE/SUM6ZTw9LTE/LUlDOk1hdGguYXNpbihlKX12YXIgVGV0LEhvLHpnLGRGdCxfNyxMdSxodixDbyxrdSxJQyxNYyxJdz1NKCgpPT57VGV0PU1hdGguYWJzLEhvPU1hdGguYXRhbjIsemc9TWF0aC5jb3MsZEZ0PU1hdGgubWF4LF83PU1hdGgubWluLEx1PU1hdGguc2luLGh2PU1hdGguc3FydCxDbz0xZS0xMixrdT1NYXRoLlBJLElDPWt1LzIsTWM9MiprdX0pO2Z1bmN0aW9uIGdMZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBfTGUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24geUxlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gdkxlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIHhMZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBiTGUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj0odSoodC1vKS1oKihlLWkpKS8oaCpsLXUqYyk7cmV0dXJuW2UrZipsLHQrZipjXX1mdW5jdGlvbiB5NyhlLHQscixuLGksbyxhKXt2YXIgcz1lLXIsbD10LW4sYz0oYT9vOi1vKS9odihzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZj1lK3UscD10K2gsZD1yK3UsZz1uK2gsXz0oZitkKS8yLHk9KHArZykvMix4PWQtZixiPWctcCxTPXgqeCtiKmIsQz1pLW8sUD1mKmctZCpwLGs9KGI8MD8tMToxKSpodihkRnQoMCxDKkMqUy1QKlApKSxPPShQKmIteCprKS9TLEQ9KC1QKngtYiprKS9TLEI9KFAqYit4KmspL1MsST0oLVAqeCtiKmspL1MsTD1PLV8sUj1ELXksRj1CLV8sej1JLXk7cmV0dXJuIEwqTCtSKlI+RipGK3oqeiYmKE89QixEPUkpLHtjeDpPLGN5OkQseDAxOi11LHkwMTotaCx4MTE6TyooaS9DLTEpLHkxMTpEKihpL0MtMSl9fWZ1bmN0aW9uIGdGdCgpe3ZhciBlPWdMZSx0PV9MZSxyPUdlKDApLG49bnVsbCxpPXlMZSxvPXZMZSxhPXhMZSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBjLHUsaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JQyxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUlDLGc9VGV0KGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1JdSgpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPkNvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5NYy1DbylzLm1vdmVUbyhmKnpnKHApLGYqTHUocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5DbyYmKHMubW92ZVRvKGgqemcoZCksaCpMdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPkNvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aHYoaCpoK2YqZikpLEQ9XzcoVGV0KGYtaCkvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEI9RCxJPUQsTCxSO2lmKE8+Q28pe3ZhciBGPUNldChPL2gqTHUoaykpLHo9Q2V0KE8vZipMdShrKSk7KEMtPUYqMik+Q28/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPkNvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKnpnKHkpLFc9ZipMdSh5KSxaPWgqemcoUykscnQ9aCpMdShTKTtpZihEPkNvKXt2YXIgb3Q9Zip6Zyh4KSxzdD1mKkx1KHgpLFN0PWgqemcoYiksYnQ9aCpMdShiKTtpZihnPGt1KXt2YXIgTXQ9Qz5Dbz9iTGUoVSxXLFN0LGJ0LG90LHN0LFoscnQpOltaLHJ0XSxsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL0x1KG1GdCgobHQqX3QrS3QqY3QpLyhodihsdCpsdCtLdCpLdCkqaHYoX3QqX3QrY3QqY3QpKSkvMiksZXQ9aHYoTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9XzcoRCwoaC1ldCkvKFgtMSkpLEk9XzcoRCwoZi1ldCkvKFgrMSkpfX1QPkNvP0k+Q28/KEw9eTcoU3QsYnQsVSxXLGYsSSxfKSxSPXk3KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEhvKEwueTAxLEwueDAxKSxIbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxIbyhMLnkwMSxMLngwMSksSG8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixIbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEhvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEhvKFIueTExLFIueDExKSxIbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Q28pfHwhKEM+Q28pP3MubGluZVRvKFoscnQpOkI+Q28/KEw9eTcoWixydCxvdCxzdCxoLC1CLF8pLFI9eTcoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsSG8oTC55MDEsTC54MDEpLEhvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEhvKEwueTAxLEwueDAxKSxIbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEhvKEwuY3krTC55MTEsTC5jeCtMLngxMSksSG8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixIbyhSLnkxMSxSLngxMSksSG8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWt1LzI7cmV0dXJuW3pnKHUpKmMsTHUodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH12YXIgX0Z0PU0oKCk9PntQdygpO09nKCk7SXcoKX0pO2Z1bmN0aW9uIHlGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRmcoZSl7cmV0dXJuIG5ldyB5RnQoZSl9dmFyIExDPU0oKCk9Pnt5RnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7YnJlYWt9fX19KTtmdW5jdGlvbiBMdyhlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBrdyhlKXtyZXR1cm4gZVsxXX12YXIgdjc9TSgoKT0+e30pO2Z1bmN0aW9uIFJ3KCl7dmFyIGU9THcsdD1rdyxyPUdlKCEwKSxuPW51bGwsaT1GZyxvPW51bGw7ZnVuY3Rpb24gYShzKXt2YXIgbCxjPXMubGVuZ3RoLHUsaD0hMSxmO2ZvcihuPT1udWxsJiYobz1pKGY9SXUoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmcih1PXNbbF0sbCxzKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK2UodSxsLHMpLCt0KHUsbCxzKSk7aWYoZilyZXR1cm4gbz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTplfSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6dH0sYS5kZWZpbmVkPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoISFzKSxhKTpyfSxhLmN1cnZlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXMsbiE9bnVsbCYmKG89aShuKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPT1udWxsP249bz1udWxsOm89aShuPXMpLGEpOm59LGF9dmFyIHg3PU0oKCk9PntQdygpO09nKCk7TEMoKTt2NygpfSk7ZnVuY3Rpb24gYjcoKXt2YXIgZT1Mdyx0PW51bGwscj1HZSgwKSxuPWt3LGk9R2UoITApLG89bnVsbCxhPUZnLHM9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBoLGYscCxkPXUubGVuZ3RoLGcsXz0hMSx5LHg9bmV3IEFycmF5KGQpLGI9bmV3IEFycmF5KGQpO2ZvcihvPT1udWxsJiYocz1hKHk9SXUoKSkpLGg9MDtoPD1kOysraCl7aWYoIShoPGQmJmkoZz11W2hdLGgsdSkpPT09XylpZihfPSFfKWY9aCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWgtMTtwPj1mOy0tcClzLnBvaW50KHhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9XyYmKHhbaF09K2UoZyxoLHUpLGJbaF09K3IoZyxoLHUpLHMucG9pbnQodD8rdChnLGgsdSk6eFtoXSxuPytuKGcsaCx1KTpiW2hdKSl9aWYoeSlyZXR1cm4gcz1udWxsLHkrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBSdygpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLHQ9bnVsbCxsKTplfSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOmV9LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dT09bnVsbD9udWxsOnR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxuPW51bGwsbCk6cn0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpyfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpufSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KHIpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSghIXUpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxvIT1udWxsJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bz1zPW51bGw6cz1hKG89dSksbCk6b30sbH12YXIgQWV0PU0oKCk9PntQdygpO09nKCk7TEMoKTt4NygpO3Y3KCl9KTtmdW5jdGlvbiB2RnQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIHhGdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkZ0KGUpe3JldHVybiBlfXZhciB3RnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFNGdCgpe3ZhciBlPWJGdCx0PXZGdCxyPW51bGwsbj1HZSgwKSxpPUdlKE1jKSxvPUdlKDApO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGgsZj0wLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLGc9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oTWMsTWF0aC5tYXgoLU1jLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5LHg9TWF0aC5taW4oTWF0aC5hYnMoXykvYyxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14KihfPDA/LTE6MSksUztmb3IobD0wO2w8YzsrK2wpKFM9ZFtwW2xdPWxdPStlKHNbbF0sbCxzKSk+MCYmKGYrPVMpO2Zvcih0IT1udWxsP3Auc29ydChmdW5jdGlvbihDLFApe3JldHVybiB0KGRbQ10sZFtQXSl9KTpyIT1udWxsJiZwLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gcihzW0NdLHNbUF0pfSksbD0wLGg9Zj8oXy1jKmIpL2Y6MDtsPGM7KytsLGc9eSl1PXBbbF0sUz1kW3VdLHk9ZysoUz4wP1MqaDowKStiLGRbdV09e2RhdGE6c1t1XSxpbmRleDpsLHZhbHVlOlMsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnkscGFkQW5nbGU6eH07cmV0dXJuIGR9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6ZX0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMscj1udWxsLGEpOnR9LGEuc29ydD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLHQ9bnVsbCxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm99LGF9dmFyIE1GdD1NKCgpPT57T2coKTt4RnQoKTt3RnQoKTtJdygpfSk7ZnVuY3Rpb24gRUZ0KGUpe3RoaXMuX2N1cnZlPWV9ZnVuY3Rpb24gTncoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEVGdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fXZhciB3NyxQZXQ9TSgoKT0+e0xDKCk7dzc9TncoRmcpO0VGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jdXJ2ZS5wb2ludCh0Kk1hdGguc2luKGUpLHQqLU1hdGguY29zKGUpKX19fSk7ZnVuY3Rpb24gRHcoZSl7dmFyIHQ9ZS5jdXJ2ZTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmN1cnZlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoTncocikpOnQoKS5fY3VydmV9LGV9ZnVuY3Rpb24gSWV0KCl7cmV0dXJuIER3KFJ3KCkuY3VydmUodzcpKX12YXIgTGV0PU0oKCk9PntQZXQoKTt4NygpfSk7ZnVuY3Rpb24ga2V0KCl7dmFyIGU9YjcoKS5jdXJ2ZSh3NyksdD1lLmN1cnZlLHI9ZS5saW5lWDAsbj1lLmxpbmVYMSxpPWUubGluZVkwLG89ZS5saW5lWTE7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5zdGFydEFuZ2xlPWUueDAsZGVsZXRlIGUueDAsZS5lbmRBbmdsZT1lLngxLGRlbGV0ZSBlLngxLGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuaW5uZXJSYWRpdXM9ZS55MCxkZWxldGUgZS55MCxlLm91dGVyUmFkaXVzPWUueTEsZGVsZXRlIGUueTEsZS5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBEdyhyKCkpfSxkZWxldGUgZS5saW5lWDAsZS5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHcobigpKX0sZGVsZXRlIGUubGluZVgxLGUubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIER3KGkoKSl9LGRlbGV0ZSBlLmxpbmVZMCxlLmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEdyhvKCkpfSxkZWxldGUgZS5saW5lWTEsZS5jdXJ2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KE53KGEpKTp0KCkuX2N1cnZlfSxlfXZhciBURnQ9TSgoKT0+e1BldCgpO0FldCgpO0xldCgpfSk7ZnVuY3Rpb24gZnYoZSx0KXtyZXR1cm5bKHQ9K3QpKk1hdGguY29zKGUtPU1hdGguUEkvMiksdCpNYXRoLnNpbihlKV19dmFyIFJldD1NKCgpPT57fSk7dmFyIGtDLE5ldD1NKCgpPT57a0M9QXJyYXkucHJvdG90eXBlLnNsaWNlfSk7ZnVuY3Rpb24gd0xlKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiBTTGUoZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIERldChlKXt2YXIgdD13TGUscj1TTGUsbj1MdyxpPWt3LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1rQy5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1JdSgpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIE1MZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIEVMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIFRMZShlLHQscixuLGkpe3ZhciBvPWZ2KHQsciksYT1mdih0LHI9KHIraSkvMikscz1mdihuLHIpLGw9ZnYobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gQ0Z0KCl7cmV0dXJuIERldChNTGUpfWZ1bmN0aW9uIEFGdCgpe3JldHVybiBEZXQoRUxlKX1mdW5jdGlvbiBQRnQoKXt2YXIgZT1EZXQoVExlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBJRnQ9TSgoKT0+e1B3KCk7TmV0KCk7T2coKTt2NygpO1JldCgpfSk7dmFyIFJDLE9ldD1NKCgpPT57SXcoKTtSQz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L2t1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsTWMpfX19KTt2YXIgUzcsemV0PU0oKCk9PntTNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0LzUpLzI7ZS5tb3ZlVG8oLTMqciwtciksZS5saW5lVG8oLXIsLXIpLGUubGluZVRvKC1yLC0zKnIpLGUubGluZVRvKHIsLTMqciksZS5saW5lVG8ociwtciksZS5saW5lVG8oMypyLC1yKSxlLmxpbmVUbygzKnIsciksZS5saW5lVG8ocixyKSxlLmxpbmVUbyhyLDMqciksZS5saW5lVG8oLXIsMypyKSxlLmxpbmVUbygtcixyKSxlLmxpbmVUbygtMypyLHIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBMRnQsQ0xlLE03LEZldD1NKCgpPT57TEZ0PU1hdGguc3FydCguMzMzMzMzMzMzMzMzMzMzMyksQ0xlPUxGdCoyLE03PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvQ0xlKSxuPXIqTEZ0O2UubW92ZVRvKDAsLXIpLGUubGluZVRvKG4sMCksZS5saW5lVG8oMCxyKSxlLmxpbmVUbygtbiwwKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgQUxlLGtGdCxQTGUsSUxlLEU3LEJldD1NKCgpPT57SXcoKTtBTGU9Ljg5MDgxMzA5MTUyOTI4NTIsa0Z0PU1hdGguc2luKGt1LzEwKS9NYXRoLnNpbig3Kmt1LzEwKSxQTGU9TWF0aC5zaW4oTWMvMTApKmtGdCxJTGU9LU1hdGguY29zKE1jLzEwKSprRnQsRTc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCpBTGUpLG49UExlKnIsaT1JTGUqcjtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPU1jKm8vNSxzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7ZS5saW5lVG8obCpyLC1zKnIpLGUubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9ZS5jbG9zZVBhdGgoKX19fSk7dmFyIFQ3LEhldD1NKCgpPT57VDc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19fSk7dmFyIFZldCxDNyxVZXQ9TSgoKT0+e1ZldD1NYXRoLnNxcnQoMyksQzc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKFZldCozKSk7ZS5tb3ZlVG8oMCxyKjIpLGUubGluZVRvKC1WZXQqciwtciksZS5saW5lVG8oVmV0KnIsLXIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBFYyxUYyxxZXQsTExlLEE3LEdldD1NKCgpPT57RWM9LS41LFRjPU1hdGguc3FydCgzKS8yLHFldD0xL01hdGguc3FydCgxMiksTExlPShxZXQvMisxKSozLEE3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvTExlKSxuPXIvMixpPXIqcWV0LG89bixhPXIqcWV0K3Iscz0tbyxsPWE7ZS5tb3ZlVG8obixpKSxlLmxpbmVUbyhvLGEpLGUubGluZVRvKHMsbCksZS5saW5lVG8oRWMqbi1UYyppLFRjKm4rRWMqaSksZS5saW5lVG8oRWMqby1UYyphLFRjKm8rRWMqYSksZS5saW5lVG8oRWMqcy1UYypsLFRjKnMrRWMqbCksZS5saW5lVG8oRWMqbitUYyppLEVjKmktVGMqbiksZS5saW5lVG8oRWMqbytUYyphLEVjKmEtVGMqbyksZS5saW5lVG8oRWMqcytUYypsLEVjKmwtVGMqcyksZS5jbG9zZVBhdGgoKX19fSk7ZnVuY3Rpb24gTkZ0KCl7dmFyIGU9R2UoUkMpLHQ9R2UoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIGk7aWYocnx8KHI9aT1JdSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiByPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoaSksbik6ZX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoK2kpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6aSxuKTpyfSxufXZhciBSRnQsREZ0PU0oKCk9PntQdygpO09ldCgpO3pldCgpO0ZldCgpO0JldCgpO0hldCgpO1VldCgpO0dldCgpO09nKCk7UkZ0PVtSQyxTNyxNNyxUNyxFNyxDNyxBN119KTtmdW5jdGlvbiBDYygpe312YXIgTkM9TSgoKT0+e30pO2Z1bmN0aW9uIE93KGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqZS5feDArZS5feDEpLzMsKDIqZS5feTArZS5feTEpLzMsKGUuX3gwKzIqZS5feDEpLzMsKGUuX3kwKzIqZS5feTEpLzMsKGUuX3gwKzQqZS5feDErdCkvNiwoZS5feTArNCplLl95MStyKS82KX1mdW5jdGlvbiBEQyhlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gT0Z0KGUpe3JldHVybiBuZXcgREMoZSl9dmFyIE9DPU0oKCk9PntEQy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk93KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIHpGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRkZ0KGUpe3JldHVybiBuZXcgekZ0KGUpfXZhciBCRnQ9TSgoKT0+e05DKCk7T0MoKTt6RnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIEhGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gVkZ0KGUpe3JldHVybiBuZXcgSEZ0KGUpfXZhciBVRnQ9TSgoKT0+e09DKCk7SEZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MSt0KS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T3codGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19fSk7ZnVuY3Rpb24gcUZ0KGUsdCl7dGhpcy5fYmFzaXM9bmV3IERDKGUpLHRoaXMuX2JldGE9dH12YXIgR0Z0LFdGdD1NKCgpPT57T0MoKTtxRnQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj1lWzBdLGk9dFswXSxvPWVbcl0tbixhPXRbcl0taSxzPS0xLGw7KytzPD1yOylsPXMvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmVbc10rKDEtdGhpcy5fYmV0YSkqKG4rbCpvKSx0aGlzLl9iZXRhKnRbc10rKDEtdGhpcy5fYmV0YSkqKGkrbCphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O0dGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ9PT0xP25ldyBEQyhuKTpuZXcgcUZ0KG4sdCl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC44NSl9KTtmdW5jdGlvbiB6dyhlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFA3KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn12YXIgWUZ0LHpDPU0oKCk9PntQNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6encodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtZRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgUDcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBJNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIGpGdCxXZXQ9TSgoKT0+e05DKCk7ekMoKTtJNy5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtqRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgSTcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBMNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIFhGdCxZZXQ9TSgoKT0+e3pDKCk7TDcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6encodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBMNyhuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKX0pO2Z1bmN0aW9uIEZDKGUsdCxyKXt2YXIgbj1lLl94MSxpPWUuX3kxLG89ZS5feDIsYT1lLl95MjtpZihlLl9sMDFfYT5Dbyl7dmFyIHM9MiplLl9sMDFfMmErMyplLl9sMDFfYSplLl9sMTJfYStlLl9sMTJfMmEsbD0zKmUuX2wwMV9hKihlLl9sMDFfYStlLl9sMTJfYSk7bj0obipzLWUuX3gwKmUuX2wxMl8yYStlLl94MiplLl9sMDFfMmEpL2wsaT0oaSpzLWUuX3kwKmUuX2wxMl8yYStlLl95MiplLl9sMDFfMmEpL2x9aWYoZS5fbDIzX2E+Q28pe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLHU9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO289KG8qYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL3UsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1yKmUuX2wxMl8yYSkvdX1lLl9jb250ZXh0LmJlemllckN1cnZlVG8obixpLG8sYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gJEZ0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIEtGdCxrNz1NKCgpPT57SXcoKTt6QygpOyRGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OkZDKHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07S0Z0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgJEZ0KG4sdCk6bmV3IFA3KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSl9KTtmdW5jdGlvbiBaRnQoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH12YXIgSkZ0LFFGdD1NKCgpPT57V2V0KCk7TkMoKTtrNygpO1pGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O0pGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IFpGdChuLHQpOm5ldyBJNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gdEJ0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIGVCdCxyQnQ9TSgoKT0+e1lldCgpO2s3KCk7dEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O2VCdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHRCdChuLHQpOm5ldyBMNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gbkJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBpQnQoZSl7cmV0dXJuIG5ldyBuQnQoZSl9dmFyIG9CdD1NKCgpPT57TkMoKTtuQnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0LHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSl9fX0pO2Z1bmN0aW9uIGFCdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gc0J0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKGFCdChvKSthQnQoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBsQnQoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGpldChlLHQscil7dmFyIG49ZS5feDAsaT1lLl95MCxvPWUuX3gxLGE9ZS5feTEscz0oby1uKS8zO2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK3MsaStzKnQsby1zLGEtcypyLG8sYSl9ZnVuY3Rpb24gUjcoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIGNCdChlKXt0aGlzLl9jb250ZXh0PW5ldyB1QnQoZSl9ZnVuY3Rpb24gdUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBoQnQoZSl7cmV0dXJuIG5ldyBSNyhlKX1mdW5jdGlvbiBmQnQoZSl7cmV0dXJuIG5ldyBjQnQoZSl9dmFyIHBCdD1NKCgpPT57UjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmpldCh0aGlzLHRoaXMuX3QwLGxCdCh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3ZhciByPU5hTjtpZihlPStlLHQ9K3QsIShlPT09dGhpcy5feDEmJnQ9PT10aGlzLl95MSkpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsamV0KHRoaXMsbEJ0KHRoaXMscj1zQnQodGhpcyxlLHQpKSxyKTticmVhaztkZWZhdWx0OmpldCh0aGlzLHRoaXMuX3QwLHI9c0J0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07KGNCdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSNy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihlLHQpe1I3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsdCxlKX07dUJ0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQsZSxuLHIsbyxpKX19fSk7ZnVuY3Rpb24gbUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBkQnQoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBnQnQoZSl7cmV0dXJuIG5ldyBtQnQoZSl9dmFyIF9CdD1NKCgpPT57bUJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3gsdD10aGlzLl95LHI9ZS5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGVbMF0sdFswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZVswXSx0WzBdKSxyPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhlWzFdLHRbMV0pO2Vsc2UgZm9yKHZhciBuPWRCdChlKSxpPWRCdCh0KSxvPTAsYT0xO2E8cjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW29dLGlbMF1bb10sblsxXVtvXSxpWzFdW29dLGVbYV0sdFthXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5feC5wdXNoKCtlKSx0aGlzLl95LnB1c2goK3QpfX19KTtmdW5jdGlvbiBONyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl90PXR9ZnVuY3Rpb24geUJ0KGUpe3JldHVybiBuZXcgTjcoZSwuNSl9ZnVuY3Rpb24gdkJ0KGUpe3JldHVybiBuZXcgTjcoZSwwKX1mdW5jdGlvbiB4QnQoZSl7cmV0dXJuIG5ldyBONyhlLDEpfXZhciBiQnQ9TSgoKT0+e043LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fX0pO2Z1bmN0aW9uIFJ1KGUsdCl7aWYoKGE9ZS5sZW5ndGgpPjEpZm9yKHZhciByPTEsbixpLG89ZVt0WzBdXSxhLHM9by5sZW5ndGg7cjxhOysrcilmb3IoaT1vLG89ZVt0W3JdXSxuPTA7bjxzOysrbilvW25dWzFdKz1vW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX12YXIgRnc9TSgoKT0+e30pO2Z1bmN0aW9uIE51KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn12YXIgQnc9TSgoKT0+e30pO2Z1bmN0aW9uIGtMZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIHdCdCgpe3ZhciBlPUdlKFtdKSx0PU51LHI9UnUsbj1rTGU7ZnVuY3Rpb24gaShvKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzLGw9by5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoO2ZvcihzPTA7czxjOysrcyl7Zm9yKHZhciBmPWFbc10scD11W3NdPW5ldyBBcnJheShsKSxkPTAsZztkPGw7KytkKXBbZF09Zz1bMCwrbihvW2RdLGYsZCxvKV0sZy5kYXRhPW9bZF07cC5rZXk9Zn1mb3Iocz0wLGg9dCh1KTtzPGM7KytzKXVbaFtzXV0uaW5kZXg9cztyZXR1cm4gcih1LGgpLHV9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkdlKGtDLmNhbGwobykpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpHZSgrbyksaSk6bn0saS5vcmRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vPT1udWxsP051OnR5cGVvZiBvPT0iZnVuY3Rpb24iP286R2Uoa0MuY2FsbChvKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bz09bnVsbD9SdTpvLGkpOnJ9LGl9dmFyIFNCdD1NKCgpPT57TmV0KCk7T2coKTtGdygpO0J3KCl9KTtmdW5jdGlvbiBNQnQoZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saT0wLG89ZVswXS5sZW5ndGgsYTtpPG87KytpKXtmb3IoYT1yPTA7cjxuOysrcilhKz1lW3JdW2ldWzFdfHwwO2lmKGEpZm9yKHI9MDtyPG47KytyKWVbcl1baV1bMV0vPWF9UnUoZSx0KX19dmFyIEVCdD1NKCgpPT57RncoKX0pO2Z1bmN0aW9uIFRCdChlLHQpe2lmKChsPWUubGVuZ3RoKT4xKWZvcih2YXIgcixuPTAsaSxvLGEscyxsLGM9ZVt0WzBdXS5sZW5ndGg7bjxjOysrbilmb3IoYT1zPTAscj0wO3I8bDsrK3IpKG89KGk9ZVt0W3JdXVtuXSlbMV0taVswXSk+PTA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6aVswXT1hfXZhciBDQnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFCdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfVJ1KGUsdCl9fXZhciBQQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBJQnQoZSx0KXtpZighKCEoKGE9ZS5sZW5ndGgpPjApfHwhKChvPShpPWVbdFswXV0pLmxlbmd0aCk+MCkpKXtmb3IodmFyIHI9MCxuPTEsaSxvLGE7bjxvOysrbil7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGE7KytzKXtmb3IodmFyIHU9ZVt0W3NdXSxoPXVbbl1bMV18fDAsZj11W24tMV1bMV18fDAscD0oaC1mKS8yLGQ9MDtkPHM7KytkKXt2YXIgZz1lW3RbZF1dLF89Z1tuXVsxXXx8MCx5PWdbbi0xXVsxXXx8MDtwKz1fLXl9bCs9aCxjKz1wKmh9aVtuLTFdWzFdKz1pW24tMV1bMF09cixsJiYoci09Yy9sKX1pW24tMV1bMV0rPWlbbi0xXVswXT1yLFJ1KGUsdCl9fXZhciBMQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBENyhlKXt2YXIgdD1lLm1hcChYZXQpO3JldHVybiBOdShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIFhldChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9dmFyIE83PU0oKCk9PntCdygpfSk7ZnVuY3Rpb24ga0J0KGUpe3JldHVybiBENyhlKS5yZXZlcnNlKCl9dmFyIFJCdD1NKCgpPT57TzcoKX0pO2Z1bmN0aW9uIE5CdChlKXt2YXIgdD1lLmxlbmd0aCxyLG4saT1lLm1hcChYZXQpLG89TnUoZSkuc29ydChmdW5jdGlvbih1LGgpe3JldHVybiBpW2hdLWlbdV19KSxhPTAscz0wLGw9W10sYz1bXTtmb3Iocj0wO3I8dDsrK3Ipbj1vW3JdLGE8cz8oYSs9aVtuXSxsLnB1c2gobikpOihzKz1pW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX12YXIgREJ0PU0oKCk9PntCdygpO083KCl9KTtmdW5jdGlvbiBPQnQoZSl7cmV0dXJuIE51KGUpLnJldmVyc2UoKX12YXIgekJ0PU0oKCk9PntCdygpfSk7dmFyIEZCdD1NKCgpPT57X0Z0KCk7QWV0KCk7eDcoKTtNRnQoKTtURnQoKTtMZXQoKTtSZXQoKTtJRnQoKTtERnQoKTtPZXQoKTt6ZXQoKTtGZXQoKTtIZXQoKTtCZXQoKTtVZXQoKTtHZXQoKTtCRnQoKTtVRnQoKTtPQygpO1dGdCgpO1dldCgpO1lldCgpO3pDKCk7UUZ0KCk7ckJ0KCk7azcoKTtvQnQoKTtMQygpO3BCdCgpO19CdCgpO2JCdCgpO1NCdCgpO0VCdCgpO0NCdCgpO0Z3KCk7UEJ0KCk7TEJ0KCk7TzcoKTtSQnQoKTtEQnQoKTtCdygpO3pCdCgpfSk7ZnVuY3Rpb24gU3IoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIFNyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gJGV0LnNldFRpbWUoK28pLEtldC5zZXRUaW1lKCthKSxlKCRldCksZShLZXQpLE1hdGguZmxvb3IocigkZXQsS2V0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyICRldCxLZXQsZmE9TSgoKT0+eyRldD1uZXcgRGF0ZSxLZXQ9bmV3IERhdGV9KTt2YXIgejcsWmV0LEpldCxCQnQ9TSgoKT0+e2ZhKCk7ejc9U3IoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTt6Ny5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP1NyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOno3fTtaZXQ9ejcsSmV0PXo3LnJhbmdlfSk7dmFyIEJDLFBzLGJmLEY3LEI3LHdmPU0oKCk9PntCQz0xZTMsUHM9NmU0LGJmPTM2ZTUsRjc9ODY0ZTUsQjc9NjA0OGU1fSk7dmFyIEhCdCxRZXQsdHJ0LFZCdD1NKCgpPT57ZmEoKTt3ZigpO0hCdD1TcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL0JDKSpCQyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqQkMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0JDfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRZXQ9SEJ0LHRydD1IQnQucmFuZ2V9KTt2YXIgVUJ0LHFCdCxHQnQsV0J0PU0oKCk9PntmYSgpO3dmKCk7VUJ0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvUHMpKlBzKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpQcyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvUHN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLHFCdD1VQnQsR0J0PVVCdC5yYW5nZX0pO3ZhciBZQnQsakJ0LFhCdCwkQnQ9TSgoKT0+e2ZhKCk7d2YoKTtZQnQ9U3IoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpKlBzJWJmO3Q8MCYmKHQrPWJmKSxlLnNldFRpbWUoTWF0aC5mbG9vcigoK2UtdCkvYmYpKmJmK3QpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLGpCdD1ZQnQsWEJ0PVlCdC5yYW5nZX0pO3ZhciBLQnQsWkJ0LEpCdCxRQnQ9TSgoKT0+e2ZhKCk7d2YoKTtLQnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqUHMpL0Y3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFpCdD1LQnQsSkJ0PUtCdC5yYW5nZX0pO2Z1bmN0aW9uIHB2KGUpe3JldHVybiBTcihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlBzKS9CN30pfXZhciBINyxlcnQscnJ0LG5ydCxpcnQsb3J0LGFydCxzcnQsdEh0LGVIdCxySHQsbkh0LGlIdCxvSHQsYUh0PU0oKCk9PntmYSgpO3dmKCk7SDc9cHYoMCksZXJ0PXB2KDEpLHJydD1wdigyKSxucnQ9cHYoMyksaXJ0PXB2KDQpLG9ydD1wdig1KSxhcnQ9cHYoNiksc3J0PUg3LnJhbmdlLHRIdD1lcnQucmFuZ2UsZUh0PXJydC5yYW5nZSxySHQ9bnJ0LnJhbmdlLG5IdD1pcnQucmFuZ2UsaUh0PW9ydC5yYW5nZSxvSHQ9YXJ0LnJhbmdlfSk7dmFyIHNIdCxsSHQsY0h0LHVIdD1NKCgpPT57ZmEoKTtzSHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCkrKHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSksbEh0PXNIdCxjSHQ9c0h0LnJhbmdlfSk7dmFyIGxydCxoSHQsZkh0LHBIdD1NKCgpPT57ZmEoKTtscnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTtscnQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOlNyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTtoSHQ9bHJ0LGZIdD1scnQucmFuZ2V9KTt2YXIgZEh0LG1IdCxnSHQsX0h0PU0oKCk9PntmYSgpO3dmKCk7ZEh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KlBzKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9Qc30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSksbUh0PWRIdCxnSHQ9ZEh0LnJhbmdlfSk7dmFyIHlIdCx2SHQseEh0LGJIdD1NKCgpPT57ZmEoKTt3ZigpO3lIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLHZIdD15SHQseEh0PXlIdC5yYW5nZX0pO3ZhciB3SHQsU0h0LE1IdCxFSHQ9TSgoKT0+e2ZhKCk7d2YoKTt3SHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvRjd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksU0h0PXdIdCxNSHQ9d0h0LnJhbmdlfSk7ZnVuY3Rpb24gZHYoZSl7cmV0dXJuIFNyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvQjd9KX12YXIgVjcsY3J0LHVydCxocnQsZnJ0LHBydCxkcnQsbXJ0LFRIdCxDSHQsQUh0LFBIdCxJSHQsTEh0LGtIdD1NKCgpPT57ZmEoKTt3ZigpO1Y3PWR2KDApLGNydD1kdigxKSx1cnQ9ZHYoMiksaHJ0PWR2KDMpLGZydD1kdig0KSxwcnQ9ZHYoNSksZHJ0PWR2KDYpLG1ydD1WNy5yYW5nZSxUSHQ9Y3J0LnJhbmdlLENIdD11cnQucmFuZ2UsQUh0PWhydC5yYW5nZSxQSHQ9ZnJ0LnJhbmdlLElIdD1wcnQucmFuZ2UsTEh0PWRydC5yYW5nZX0pO3ZhciBSSHQsTkh0LERIdCxPSHQ9TSgoKT0+e2ZhKCk7Ukh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLE5IdD1SSHQsREh0PVJIdC5yYW5nZX0pO3ZhciBncnQsekh0LEZIdCxCSHQ9TSgoKT0+e2ZhKCk7Z3J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSk7Z3J0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpTcihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07ekh0PWdydCxGSHQ9Z3J0LnJhbmdlfSk7dmFyIEhIdD1NKCgpPT57ZmEoKTtCQnQoKTtWQnQoKTtXQnQoKTskQnQoKTtRQnQoKTthSHQoKTt1SHQoKTtwSHQoKTtfSHQoKTtiSHQoKTtFSHQoKTtrSHQoKTtPSHQoKTtCSHQoKX0pO2Z1bmN0aW9uIHBhKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHBhKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gX3J0LnNldFRpbWUoK28pLHlydC5zZXRUaW1lKCthKSxlKF9ydCksZSh5cnQpLE1hdGguZmxvb3IocihfcnQseXJ0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIF9ydCx5cnQsbXY9TSgoKT0+e19ydD1uZXcgRGF0ZSx5cnQ9bmV3IERhdGV9KTt2YXIgVTcscTcsRzcsSEM9TSgoKT0+e1U3PTZlNCxxNz04NjRlNSxHNz02MDQ4ZTV9KTt2YXIgVkh0LFc3LFJMZSxVSHQ9TSgoKT0+e212KCk7SEMoKTtWSHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL3E3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFc3PVZIdCxSTGU9Vkh0LnJhbmdlfSk7ZnVuY3Rpb24gZ3YoZSl7cmV0dXJuIHBhKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL0c3fSl9dmFyIFZDLEh3LHFIdCxHSHQsVncsV0h0LFlIdCxqSHQsTkxlLERMZSxPTGUsekxlLEZMZSxCTGUsWEh0PU0oKCk9PnttdigpO0hDKCk7VkM9Z3YoMCksSHc9Z3YoMSkscUh0PWd2KDIpLEdIdD1ndigzKSxWdz1ndig0KSxXSHQ9Z3YoNSksWUh0PWd2KDYpLGpIdD1WQy5yYW5nZSxOTGU9SHcucmFuZ2UsRExlPXFIdC5yYW5nZSxPTGU9R0h0LnJhbmdlLHpMZT1Wdy5yYW5nZSxGTGU9V0h0LnJhbmdlLEJMZT1ZSHQucmFuZ2V9KTt2YXIgdnJ0LF92LEhMZSwkSHQ9TSgoKT0+e212KCk7dnJ0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7dnJ0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpwYShmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07X3Y9dnJ0LEhMZT12cnQucmFuZ2V9KTt2YXIgS0h0LFk3LFZMZSxaSHQ9TSgoKT0+e212KCk7SEMoKTtLSHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvcTd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksWTc9S0h0LFZMZT1LSHQucmFuZ2V9KTtmdW5jdGlvbiB5dihlKXtyZXR1cm4gcGEoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctZSklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10KS9HN30pfXZhciBVQyxVdyxKSHQsUUh0LHF3LHRWdCxlVnQsclZ0LFVMZSxxTGUsR0xlLFdMZSxZTGUsakxlLG5WdD1NKCgpPT57bXYoKTtIQygpO1VDPXl2KDApLFV3PXl2KDEpLEpIdD15digyKSxRSHQ9eXYoMykscXc9eXYoNCksdFZ0PXl2KDUpLGVWdD15dig2KSxyVnQ9VUMucmFuZ2UsVUxlPVV3LnJhbmdlLHFMZT1KSHQucmFuZ2UsR0xlPVFIdC5yYW5nZSxXTGU9cXcucmFuZ2UsWUxlPXRWdC5yYW5nZSxqTGU9ZVZ0LnJhbmdlfSk7dmFyIHhydCx2dixYTGUsaVZ0PU0oKCk9PnttdigpO3hydD1wYShmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO3hydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6cGEoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3Z2PXhydCxYTGU9eHJ0LnJhbmdlfSk7dmFyIG9WdD1NKCgpPT57VUh0KCk7WEh0KCk7JEh0KCk7Wkh0KCk7blZ0KCk7aVZ0KCl9KTtmdW5jdGlvbiAkTGUoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGo3KGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHFDKGUpe3JldHVybnt5OmUsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlDKGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPUdDKGkpLHU9V0MoaSksaD1HQyhvKSxmPVdDKG8pLHA9R0MoYSksZD1XQyhhKSxnPUdDKHMpLF89V0MocykseT1HQyhsKSx4PVdDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOmNWdCxlOmNWdCxmOnZrZSxIOmdrZSxJOl9rZSxqOnlrZSxMOmRWdCxtOnhrZSxNOmJrZSxwOnN0LFE6ZlZ0LHM6cFZ0LFM6d2tlLHU6U2tlLFU6TWtlLFY6RWtlLHc6VGtlLFc6Q2tlLHg6bnVsbCxYOm51bGwseTpBa2UsWTpQa2UsWjpJa2UsIiUiOmhWdH0sUz17YTpTdCxBOmJ0LGI6TXQsQjpsdCxjOm51bGwsZDp1VnQsZTp1VnQsZjpOa2UsSDpMa2UsSTpra2UsajpSa2UsTDptVnQsbTpEa2UsTTpPa2UscDpLdCxROmZWdCxzOnBWdCxTOnprZSx1OkZrZSxVOkJrZSxWOkhrZSx3OlZrZSxXOlVrZSx4Om51bGwsWDpudWxsLHk6cWtlLFk6R2tlLFo6V2tlLCIlIjpoVnR9LEM9e2E6QixBOkksYjpMLEI6UixjOkYsZDpzVnQsZTpzVnQsZjpma2UsSDpsVnQsSTpsVnQsajpsa2UsTDpoa2UsbTpza2UsTTpja2UscDpELFE6ZGtlLHM6bWtlLFM6dWtlLHU6dGtlLFU6ZWtlLFY6cmtlLHc6UUxlLFc6bmtlLHg6eixYOlUseTpva2UsWTppa2UsWjpha2UsIiUiOnBrZX07Yi54PVAocixiKSxiLlg9UChuLGIpLGIuYz1QKHQsYiksUy54PVAocixTKSxTLlg9UChuLFMpLFMuYz1QKHQsUyk7ZnVuY3Rpb24gUChfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1bXSxkdD0tMSxxPTAscHQ9X3QubGVuZ3RoLGh0LHd0LGt0O2ZvcihYIGluc3RhbmNlb2YgRGF0ZXx8KFg9bmV3IERhdGUoK1gpKTsrK2R0PHB0OylfdC5jaGFyQ29kZUF0KGR0KT09PTM3JiYoZXQucHVzaChfdC5zbGljZShxLGR0KSksKHd0PWFWdFtodD1fdC5jaGFyQXQoKytkdCldKSE9bnVsbD9odD1fdC5jaGFyQXQoKytkdCk6d3Q9aHQ9PT0iZSI/IiAiOiIwIiwoa3Q9Y3RbaHRdKSYmKGh0PWt0KFgsd3QpKSxldC5wdXNoKGh0KSxxPWR0KzEpO3JldHVybiBldC5wdXNoKF90LnNsaWNlKHEsZHQpKSxldC5qb2luKCIiKX19ZnVuY3Rpb24gayhfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1xQygxOTAwKSxkdD1PKGV0LF90LFgrPSIiLDApLHEscHQ7aWYoZHQhPVgubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGV0KXJldHVybiBuZXcgRGF0ZShldC5RKTtpZigicCJpbiBldCYmKGV0Lkg9ZXQuSCUxMitldC5wKjEyKSwiViJpbiBldCl7aWYoZXQuVjwxfHxldC5WPjUzKXJldHVybiBudWxsOyJ3ImluIGV0fHwoZXQudz0xKSwiWiJpbiBldD8ocT1qNyhxQyhldC55KSkscHQ9cS5nZXRVVENEYXkoKSxxPXB0PjR8fHB0PT09MD9Vdy5jZWlsKHEpOlV3KHEpLHE9WTcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldFVUQ0Z1bGxZZWFyKCksZXQubT1xLmdldFVUQ01vbnRoKCksZXQuZD1xLmdldFVUQ0RhdGUoKSsoZXQudys2KSU3KToocT1jdChxQyhldC55KSkscHQ9cS5nZXREYXkoKSxxPXB0PjR8fHB0PT09MD9Idy5jZWlsKHEpOkh3KHEpLHE9Vzcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldEZ1bGxZZWFyKCksZXQubT1xLmdldE1vbnRoKCksZXQuZD1xLmdldERhdGUoKSsoZXQudys2KSU3KX1lbHNlKCJXImluIGV0fHwiVSJpbiBldCkmJigidyJpbiBldHx8KGV0Lnc9InUiaW4gZXQ/ZXQudSU3OiJXImluIGV0PzE6MCkscHQ9IloiaW4gZXQ/ajcocUMoZXQueSkpLmdldFVUQ0RheSgpOmN0KHFDKGV0LnkpKS5nZXREYXkoKSxldC5tPTAsZXQuZD0iVyJpbiBldD8oZXQudys2KSU3K2V0LlcqNy0ocHQrNSklNzpldC53K2V0LlUqNy0ocHQrNiklNyk7cmV0dXJuIloiaW4gZXQ/KGV0LkgrPWV0LlovMTAwfDAsZXQuTSs9ZXQuWiUxMDAsajcoZXQpKTpjdChldCl9fWZ1bmN0aW9uIE8oX3QsY3QsWCxldCl7Zm9yKHZhciBkdD0wLHE9Y3QubGVuZ3RoLHB0PVgubGVuZ3RoLGh0LHd0O2R0PHE7KXtpZihldD49cHQpcmV0dXJuLTE7aWYoaHQ9Y3QuY2hhckNvZGVBdChkdCsrKSxodD09PTM3KXtpZihodD1jdC5jaGFyQXQoZHQrKyksd3Q9Q1todCBpbiBhVnQ/Y3QuY2hhckF0KGR0KyspOmh0XSwhd3R8fChldD13dChfdCxYLGV0KSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1YLmNoYXJDb2RlQXQoZXQrKykpcmV0dXJuLTF9cmV0dXJuIGV0fWZ1bmN0aW9uIEQoX3QsY3QsWCl7dmFyIGV0PWMuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5wPXVbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEIoX3QsY3QsWCl7dmFyIGV0PXAuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWRbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEkoX3QsY3QsWCl7dmFyIGV0PWguZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWZbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoX3QsY3QsWCl7dmFyIGV0PXkuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPXhbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIoX3QsY3QsWCl7dmFyIGV0PWcuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPV9bZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEYoX3QsY3QsWCl7cmV0dXJuIE8oX3QsdCxjdCxYKX1mdW5jdGlvbiB6KF90LGN0LFgpe3JldHVybiBPKF90LHIsY3QsWCl9ZnVuY3Rpb24gVShfdCxjdCxYKXtyZXR1cm4gTyhfdCxuLGN0LFgpfWZ1bmN0aW9uIFcoX3Qpe3JldHVybiBhW190LmdldERheSgpXX1mdW5jdGlvbiBaKF90KXtyZXR1cm4gb1tfdC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoX3Qpe3JldHVybiBsW190LmdldE1vbnRoKCldfWZ1bmN0aW9uIG90KF90KXtyZXR1cm4gc1tfdC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChfdCl7cmV0dXJuIGlbKyhfdC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KF90KXtyZXR1cm4gYVtfdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gYnQoX3Qpe3JldHVybiBvW190LmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChfdCl7cmV0dXJuIGxbX3QuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbHQoX3Qpe3JldHVybiBzW190LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KF90KXtyZXR1cm4gaVsrKF90LmdldFVUQ0hvdXJzKCk+PTEyKV19cmV0dXJue2Zvcm1hdDpmdW5jdGlvbihfdCl7dmFyIGN0PVAoX3QrPSIiLGIpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9LHBhcnNlOmZ1bmN0aW9uKF90KXt2YXIgY3Q9ayhfdCs9IiIsJExlKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1QKF90Kz0iIixTKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNQYXJzZTpmdW5jdGlvbihfdCl7dmFyIGN0PWsoX3QsajcpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9fX1mdW5jdGlvbiBnbihlLHQscil7dmFyIG49ZTwwPyItIjoiIixpPShuPy1lOmUpKyIiLG89aS5sZW5ndGg7cmV0dXJuIG4rKG88cj9uZXcgQXJyYXkoci1vKzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiBKTGUoZSl7cmV0dXJuIGUucmVwbGFjZShaTGUsIlxcJCYiKX1mdW5jdGlvbiBHQyhlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAoSkxlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV0MoZSl7Zm9yKHZhciB0PXt9LHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdFtlW3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIHR9ZnVuY3Rpb24gUUxlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBla2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5rZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNCkpO3JldHVybiBuPyhlLnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYWtlKGUsdCxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzVnQoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbGtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxWdChlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBja2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBma2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcGtlKGUsdCxyKXt2YXIgbj1LTGUuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBka2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBta2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSoxZTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gZ2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIF9rZShlLHQpe3JldHVybiBnbihlLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24geWtlKGUsdCl7cmV0dXJuIGduKDErVzcuY291bnQoX3YoZSksZSksdCwzKX1mdW5jdGlvbiBkVnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHZrZShlLHQpe3JldHVybiBkVnQoZSx0KSsiMDAwIn1mdW5jdGlvbiB4a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBia2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiB3a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBTa2UoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1rZShlLHQpe3JldHVybiBnbihWQy5jb3VudChfdihlKSxlKSx0LDIpfWZ1bmN0aW9uIEVrZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/VncoZSk6VncuY2VpbChlKSxnbihWdy5jb3VudChfdihlKSxlKSsoX3YoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIFRrZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBDa2UoZSx0KXtyZXR1cm4gZ24oSHcuY291bnQoX3YoZSksZSksdCwyKX1mdW5jdGlvbiBBa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFBrZShlLHQpe3JldHVybiBnbihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSWtlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrZ24odC82MHwwLCIwIiwyKStnbih0JTYwLCIwIiwyKX1mdW5jdGlvbiB1VnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBMa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24ga2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBSa2UoZSx0KXtyZXR1cm4gZ24oMStZNy5jb3VudCh2dihlKSxlKSx0LDMpfWZ1bmN0aW9uIG1WdChlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gTmtlKGUsdCl7cmV0dXJuIG1WdChlLHQpKyIwMDAifWZ1bmN0aW9uIERrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIE9rZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHprZShlLHQpe3JldHVybiBnbihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIEZrZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gQmtlKGUsdCl7cmV0dXJuIGduKFVDLmNvdW50KHZ2KGUpLGUpLHQsMil9ZnVuY3Rpb24gSGtlKGUsdCl7dmFyIHI9ZS5nZXRVVENEYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD9xdyhlKTpxdy5jZWlsKGUpLGduKHF3LmNvdW50KHZ2KGUpLGUpKyh2dihlKS5nZXRVVENEYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gVmtlKGUpe3JldHVybiBlLmdldFVUQ0RheSgpfWZ1bmN0aW9uIFVrZShlLHQpe3JldHVybiBnbihVdy5jb3VudCh2dihlKSxlKSx0LDIpfWZ1bmN0aW9uIHFrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gR2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBXa2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGhWdCgpe3JldHVybiIlIn1mdW5jdGlvbiBmVnQoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gcFZ0KGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9dmFyIGFWdCxWbyxLTGUsWkxlLGJydD1NKCgpPT57b1Z0KCk7YVZ0PXsiLSI6IiIsXzoiICIsMDoiMCJ9LFZvPS9eXHMqXGQrLyxLTGU9L14lLyxaTGU9L1tcXF4kKis/fFtcXSgpLnt9XS9nfSk7ZnVuY3Rpb24gWDcoZSl7cmV0dXJuIEd3PVlDKGUpLHdydD1Hdy5mb3JtYXQsU3J0PUd3LnBhcnNlLGpDPUd3LnV0Y0Zvcm1hdCxYQz1Hdy51dGNQYXJzZSxHd312YXIgR3csd3J0LFNydCxqQyxYQywkNz1NKCgpPT57YnJ0KCk7WDcoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KX0pO2Z1bmN0aW9uIFlrZShlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfXZhciBNcnQsamtlLGdWdCxFcnQ9TSgoKT0+eyQ3KCk7TXJ0PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiO2prZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9Za2U6akMoTXJ0KSxnVnQ9amtlfSk7ZnVuY3Rpb24gWGtlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyICRrZSxfVnQseVZ0PU0oKCk9PntFcnQoKTskNygpOyRrZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP1hrZTpYQyhNcnQpLF9WdD0ka2V9KTt2YXIgdlZ0PU0oKCk9PnskNygpO2JydCgpO0VydCgpO3lWdCgpfSk7ZnVuY3Rpb24gWXcoKXtyZXR1cm4geHZ8fCh3VnQoS2tlKSx4dj1KQy5ub3coKStKNyl9ZnVuY3Rpb24gS2tlKCl7eHY9MH1mdW5jdGlvbiBidigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gQ3J0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBBcnQoKXtZdygpLCsrV3c7Zm9yKHZhciBlPUs3LHQ7ZTspKHQ9eHYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLVd3fWZ1bmN0aW9uIHhWdCgpe3h2PShaNz1KQy5ub3coKSkrSjcsV3c9S0M9MDt0cnl7QXJ0KCl9ZmluYWxseXtXdz0wLEprZSgpLHh2PTB9fWZ1bmN0aW9uIFprZSgpe3ZhciBlPUpDLm5vdygpLHQ9ZS1aNzt0PmJWdCYmKEo3LT10LFo3PWUpfWZ1bmN0aW9uIEprZSgpe2Zvcih2YXIgZSx0PUs3LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOks3PXIpO1pDPWUsVHJ0KG4pfWZ1bmN0aW9uIFRydChlKXtpZighV3cpe0tDJiYoS0M9Y2xlYXJUaW1lb3V0KEtDKSk7dmFyIHQ9ZS14djt0PjI0PyhlPDEvMCYmKEtDPXNldFRpbWVvdXQoeFZ0LGUtSkMubm93KCktSjcpKSwkQyYmKCRDPWNsZWFySW50ZXJ2YWwoJEMpKSk6KCRDfHwoWjc9SkMubm93KCksJEM9c2V0SW50ZXJ2YWwoWmtlLGJWdCkpLFd3PTEsd1Z0KHhWdCkpfX12YXIgV3csS0MsJEMsYlZ0LEs3LFpDLFo3LHh2LEo3LEpDLHdWdCxRNz1NKCgpPT57V3c9MCxLQz0wLCRDPTAsYlZ0PTFlMyxaNz0wLHh2PTAsSjc9MCxKQz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx3VnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07YnYucHJvdG90eXBlPUNydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmJ2LHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9ZdygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmWkMhPT10aGlzJiYoWkM/WkMuX25leHQ9dGhpczpLNz10aGlzLFpDPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsVHJ0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFRydCgpKX19fSk7ZnVuY3Rpb24gU1Z0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgTVZ0PU0oKCk9PntRNygpfSk7ZnVuY3Rpb24gRVZ0KGUsdCxyKXt2YXIgbj1uZXcgYnYsaT10O3JldHVybiB0PT1udWxsPyhuLnJlc3RhcnQoZSx0LHIpLG4pOih0PSt0LHI9cj09bnVsbD9ZdygpOityLG4ucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPWksbi5yZXN0YXJ0KG8saSs9dCxyKSxlKGEpfSx0LHIpLG4pfXZhciBUVnQ9TSgoKT0+e1E3KCl9KTt2YXIgQ1Z0PU0oKCk9PntRNygpO01WdCgpO1RWdCgpfSk7dmFyIHR6LFBydCxJcnQ9TSgoKT0+e3R6PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixQcnQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnR6LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBsZChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxQcnQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOlBydFt0XSxsb2NhbDplfTplfXZhciBlej1NKCgpPT57SXJ0KCl9KTtmdW5jdGlvbiBRa2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT10eiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09dHo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHQ4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiByeihlKXt2YXIgdD1sZChlKTtyZXR1cm4odC5sb2NhbD90OGU6UWtlKSh0KX12YXIgTHJ0PU0oKCk9PntleigpO0lydCgpfSk7ZnVuY3Rpb24gZThlKCl7fWZ1bmN0aW9uIHd2KGUpe3JldHVybiBlPT1udWxsP2U4ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBuej1NKCgpPT57fSk7ZnVuY3Rpb24gQVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT13dihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IG5vKG4sdGhpcy5fcGFyZW50cyl9dmFyIFBWdD1NKCgpPT57U2YoKTtueigpfSk7ZnVuY3Rpb24gcjhlKCl7cmV0dXJuW119ZnVuY3Rpb24gUUMoZSl7cmV0dXJuIGU9PW51bGw/cjhlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIGtydD1NKCgpPT57fSk7ZnVuY3Rpb24gSVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1RQyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgbm8obixpKX12YXIgTFZ0PU0oKCk9PntTZigpO2tydCgpfSk7ZnVuY3Rpb24gdEEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIFJydD1NKCgpPT57fSk7ZnVuY3Rpb24ga1Z0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgbm8obix0aGlzLl9wYXJlbnRzKX12YXIgUlZ0PU0oKCk9PntTZigpO1JydCgpfSk7ZnVuY3Rpb24gaXooZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9dmFyIE5ydD1NKCgpPT57fSk7ZnVuY3Rpb24gTlZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChpeiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gZUEoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIERydD1NKCgpPT57TnJ0KCk7U2YoKTtlQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGUpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChlKX19fSk7ZnVuY3Rpb24gRFZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgT1Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiBuOGUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IGVBKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiBpOGUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD16VnQrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD16VnQrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgZUEoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBGVnQoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P2k4ZTpuOGUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1EVnQoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IG5vKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX12YXIgelZ0LEJWdD1NKCgpPT57U2YoKTtEcnQoKTtPVnQoKTt6VnQ9IiQifSk7ZnVuY3Rpb24gSFZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGl6KSx0aGlzLl9wYXJlbnRzKX12YXIgVlZ0PU0oKCk9PntOcnQoKTtTZigpfSk7ZnVuY3Rpb24gVVZ0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBxVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdWdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgbm8oYSx0aGlzLl9wYXJlbnRzKX12YXIgV1Z0PU0oKCk9PntTZigpfSk7ZnVuY3Rpb24gWVZ0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgalZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYVnQoZSl7ZXx8KGU9bzhlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IG5vKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBvOGUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyICRWdD1NKCgpPT57U2YoKX0pO2Z1bmN0aW9uIEtWdCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgWlZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKVnQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgUVZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB0VXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBlVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJVdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIG5VdD1NKCgpPT57fSk7ZnVuY3Rpb24gaVV0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBvVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFVdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHNVdD1NKCgpPT57fSk7ZnVuY3Rpb24gYThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBzOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBsOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBjOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gdThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBoOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gbFV0KGUsdCl7dmFyIHI9bGQoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP3M4ZTphOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9oOGU6dThlOnIubG9jYWw/YzhlOmw4ZSkocix0KSl9dmFyIGNVdD1NKCgpPT57ZXooKX0pO2Z1bmN0aW9uIG96KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgT3J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBmOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gcDhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gZDhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIHVVdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/ZjhlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP2Q4ZTpwOGUpKGUsdCxyPT1udWxsPyIiOnIpKTpCZyh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBCZyhlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fG96KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB6cnQ9TSgoKT0+e09ydCgpfSk7ZnVuY3Rpb24gbThlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBnOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIF84ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBoVXQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9tOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/XzhlOmc4ZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIGZVdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFV0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBGcnQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgZFV0KGUpfWZ1bmN0aW9uIGRVdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9cFV0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gbVV0KGUsdCl7Zm9yKHZhciByPUZydChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIGdVdChlLHQpe2Zvcih2YXIgcj1GcnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiB5OGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7bVV0KHRoaXMsZSl9fWZ1bmN0aW9uIHY4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtnVXQodGhpcyxlKX19ZnVuY3Rpb24geDhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP21VdDpnVXQpKHRoaXMsZSl9fWZ1bmN0aW9uIF9VdChlLHQpe3ZhciByPXBVdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1GcnQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/eDhlOnQ/eThlOnY4ZSkocix0KSl9dmFyIHlVdD1NKCgpPT57ZFV0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIGI4ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gdzhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gUzhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiB2VXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/YjhlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9TOGU6dzhlKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIHhVdD1NKCgpPT57fSk7ZnVuY3Rpb24gTThlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gRThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIFQ4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGJVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9NOGU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1Q4ZTpFOGUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIHdVdD1NKCgpPT57fSk7ZnVuY3Rpb24gQzhlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIFNVdCgpe3JldHVybiB0aGlzLmVhY2goQzhlKX12YXIgTVV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBBOGUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBFVXQoKXtyZXR1cm4gdGhpcy5lYWNoKEE4ZSl9dmFyIFRVdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ1V0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6cnooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIEFVdD1NKCgpPT57THJ0KCl9KTtmdW5jdGlvbiBQOGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBQVXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOnJ6KGUpLG49dD09bnVsbD9QOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp3dih0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIElVdD1NKCgpPT57THJ0KCk7bnooKX0pO2Z1bmN0aW9uIEk4ZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIExVdCgpe3JldHVybiB0aGlzLmVhY2goSThlKX12YXIga1V0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMOGUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIGs4ZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gUlV0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP2s4ZTpMOGUpfXZhciBOVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIERVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIE9VdD1NKCgpPT57fSk7ZnVuY3Rpb24gUjhlKGUsdCxyKXtyZXR1cm4gZT1CVXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gQlV0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9QnJ0O0JydD1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtCcnQ9aX19fWZ1bmN0aW9uIE44ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gRDhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIE84ZShlLHQscil7dmFyIG49RlV0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UjhlOkJVdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBIVXQoZSx0LHIpe3ZhciBuPU44ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/TzhlOkQ4ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc312YXIgRlV0LEJydCx6VXQsVlV0PU0oKCk9PntGVXQ9e30sQnJ0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKHpVdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiB6VXR8fChGVXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gVVV0KGUsdCxyKXt2YXIgbj1veihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiB6OGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVVV0KHRoaXMsZSx0KX19ZnVuY3Rpb24gRjhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFVVdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBxVXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9GOGU6ejhlKShlLHQpKX12YXIgR1V0PU0oKCk9PntPcnQoKX0pO2Z1bmN0aW9uIG5vKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFdVdCgpe3JldHVybiBuZXcgbm8oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxCOGUpfXZhciBCOGUsY2QsU2Y9TSgoKT0+e1BWdCgpO0xWdCgpO1JWdCgpO0JWdCgpO0RydCgpO1ZWdCgpO3FWdCgpO1dWdCgpO2pWdCgpOyRWdCgpO1pWdCgpO1FWdCgpO2VVdCgpO25VdCgpO29VdCgpO3NVdCgpO2NVdCgpO3pydCgpO2ZVdCgpO3lVdCgpO3hVdCgpO3dVdCgpO01VdCgpO1RVdCgpO0FVdCgpO0lVdCgpO2tVdCgpO05VdCgpO09VdCgpO1ZVdCgpO0dVdCgpO0I4ZT1bbnVsbF07bm8ucHJvdG90eXBlPVdVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5vLHNlbGVjdDpBVnQsc2VsZWN0QWxsOklWdCxmaWx0ZXI6a1Z0LGRhdGE6RlZ0LGVudGVyOk5WdCxleGl0OkhWdCxqb2luOlVWdCxtZXJnZTpHVnQsb3JkZXI6WVZ0LHNvcnQ6WFZ0LGNhbGw6S1Z0LG5vZGVzOkpWdCxub2RlOnRVdCxzaXplOnJVdCxlbXB0eTppVXQsZWFjaDphVXQsYXR0cjpsVXQsc3R5bGU6dVV0LHByb3BlcnR5OmhVdCxjbGFzc2VkOl9VdCx0ZXh0OnZVdCxodG1sOmJVdCxyYWlzZTpTVXQsbG93ZXI6RVV0LGFwcGVuZDpDVXQsaW5zZXJ0OlBVdCxyZW1vdmU6TFV0LGNsb25lOlJVdCxkYXR1bTpEVXQsb246SFV0LGRpc3BhdGNoOnFVdH07Y2Q9V1V0fSk7dmFyIE1mPU0oKCk9PntScnQoKTtleigpO1NmKCk7bnooKTtrcnQoKTt6cnQoKX0pO2Z1bmN0aW9uIGpVdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBheihyKX1mdW5jdGlvbiBheihlKXt0aGlzLl89ZX1mdW5jdGlvbiBWOGUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBVOGUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBZVXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPUg4ZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIEg4ZSxIcnQsWFV0PU0oKCk9PntIOGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07YXoucHJvdG90eXBlPWpVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF6LG9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fLG49VjhlKGUrIiIsciksaSxvPS0xLGE9bi5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrbzxhOylpZigoaT0oZT1uW29dKS50eXBlKSYmKGk9VThlKHJbaV0sZS5uYW1lKSkpcmV0dXJuIGk7cmV0dXJufWlmKHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxhOylpZihpPShlPW5bb10pLnR5cGUpcltpXT1ZVXQocltpXSxlLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihpIGluIHIpcltpXT1ZVXQocltpXSxlLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgZT17fSx0PXRoaXMuXztmb3IodmFyIHIgaW4gdCllW3JdPXRbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IGF6KGUpfSxjYWxsOmZ1bmN0aW9uKGUsdCl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcj1uZXcgQXJyYXkoaSksbj0wLGksbztuPGk7KytuKXJbbl09YXJndW1lbnRzW24rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3Iobz10aGlzLl9bZV0sbj0wLGk9by5sZW5ndGg7bjxpOysrbilvW25dLnZhbHVlLmFwcGx5KHQscil9LGFwcGx5OmZ1bmN0aW9uKGUsdCxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2Zvcih2YXIgbj10aGlzLl9bZV0saT0wLG89bi5sZW5ndGg7aTxvOysraSluW2ldLnZhbHVlLmFwcGx5KHQscil9fTtIcnQ9alV0fSk7dmFyICRVdD1NKCgpPT57WFV0KCl9KTtmdW5jdGlvbiBYdygpe3JldHVybiBTdnx8KEpVdChxOGUpLFN2PW9BLm5vdygpK2N6KX1mdW5jdGlvbiBxOGUoKXtTdj0wfWZ1bmN0aW9uIGFBKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1eihlLHQscil7dmFyIG49bmV3IGFBO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gUVV0KCl7WHcoKSwrK2p3O2Zvcih2YXIgZT1zeix0O2U7KSh0PVN2LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1qd31mdW5jdGlvbiBLVXQoKXtTdj0obHo9b0Eubm93KCkpK2N6LGp3PW5BPTA7dHJ5e1FVdCgpfWZpbmFsbHl7anc9MCxXOGUoKSxTdj0wfX1mdW5jdGlvbiBHOGUoKXt2YXIgZT1vQS5ub3coKSx0PWUtbHo7dD5aVXQmJihjei09dCxsej1lKX1mdW5jdGlvbiBXOGUoKXtmb3IodmFyIGUsdD1zeixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpzej1yKTtpQT1lLFZydChuKX1mdW5jdGlvbiBWcnQoZSl7aWYoIWp3KXtuQSYmKG5BPWNsZWFyVGltZW91dChuQSkpO3ZhciB0PWUtU3Y7dD4yND8oZTwxLzAmJihuQT1zZXRUaW1lb3V0KEtVdCxlLW9BLm5vdygpLWN6KSksckEmJihyQT1jbGVhckludGVydmFsKHJBKSkpOihyQXx8KGx6PW9BLm5vdygpLHJBPXNldEludGVydmFsKEc4ZSxaVXQpKSxqdz0xLEpVdChLVXQpKX19dmFyIGp3LG5BLHJBLFpVdCxzeixpQSxseixTdixjeixvQSxKVXQsVXJ0PU0oKCk9Pntqdz0wLG5BPTAsckE9MCxaVXQ9MWUzLGx6PTAsU3Y9MCxjej0wLG9BPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLEpVdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTthQS5wcm90b3R5cGU9dXoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphQSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/WHcoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmlBIT09dGhpcyYmKGlBP2lBLl9uZXh0PXRoaXM6c3o9dGhpcyxpQT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLFZydCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxWcnQoKSl9fX0pO2Z1bmN0aW9uIGh6KGUsdCxyKXt2YXIgbj1uZXcgYUE7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgdHF0PU0oKCk9PntVcnQoKX0pO3ZhciBxcnQ9TSgoKT0+e1VydCgpO3RxdCgpfSk7ZnVuY3Rpb24gSGcoZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtYOGUoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlk4ZSx0d2VlbjpqOGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6cnF0fSl9ZnVuY3Rpb24gY0EoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+cnF0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gRHUoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+bEEpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaW8oZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBYOGUoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9dXoobywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPWZ6LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09ZnopcmV0dXJuIGwoKTtmb3IodSBpbiBuKWlmKHA9blt1XSxwLm5hbWU9PT1yLm5hbWUpe2lmKHAuc3RhdGU9PT1HcnQpcmV0dXJuIGh6KGEpO3Auc3RhdGU9PT1lcXQ/KHAuc3RhdGU9c0EscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1zQSxwLnRpbWVyLnN0b3AoKSxkZWxldGUgblt1XSl9aWYoaHooZnVuY3Rpb24oKXtyLnN0YXRlPT09R3J0JiYoci5zdGF0ZT1lcXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1sQSxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09bEEpe2ZvcihyLnN0YXRlPUdydCxpPW5ldyBBcnJheShmPXIudHdlZW4ubGVuZ3RoKSx1PTAsaD0tMTt1PGY7Kyt1KShwPXIudHdlZW5bdV0udmFsdWUuY2FsbChlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysraF09cCk7aS5sZW5ndGg9aCsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT1jPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxjL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQobCksci5zdGF0ZT1weiwxKSxoPS0xLGY9aS5sZW5ndGg7KytoPGY7KWlbaF0uY2FsbChudWxsLHUpO3Iuc3RhdGU9PT1weiYmKHIub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtyLnN0YXRlPXNBLHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW3RdO2Zvcih2YXIgYyBpbiBuKXJldHVybjtkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBZOGUsajhlLHJxdCxmeixsQSxHcnQsZXF0LHB6LHNBLEFjPU0oKCk9PnskVXQoKTtxcnQoKTtZOGU9SHJ0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLGo4ZT1bXSxycXQ9MCxmej0xLGxBPTIsR3J0PTMsZXF0PTQscHo9NSxzQT02fSk7ZnVuY3Rpb24gZHooZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+bEEmJm4uc3RhdGU8cHosbi5zdGF0ZT1zQSxuLnRpbWVyLnN0b3AoKSxpJiZuLm9uLmNhbGwoImludGVycnVwdCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgV3J0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gbnF0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkeih0aGlzLGUpfSl9dmFyIGlxdD1NKCgpPT57V3J0KCl9KTtmdW5jdGlvbiBteihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gWXJ0KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfXZhciBvcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZBKCl7fWZ1bmN0aW9uIHNxdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIHJSZSgpe3JldHVybiBwcXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gbHF0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVmcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9JDhlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/Y3F0KHQpOnI9PT0zP25ldyBtbCh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/Z3oodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/Z3oodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1LOGUuZXhlYyhlKSk/bmV3IG1sKHRbMV0sdFsyXSx0WzNdLDEpOih0PVo4ZS5leGVjKGUpKT9uZXcgbWwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SjhlLmV4ZWMoZSkpP2d6KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PVE4ZS5leGVjKGUpKT9neih0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD10UmUuZXhlYyhlKSk/ZnF0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9ZVJlLmV4ZWMoZSkpP2ZxdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFxdC5oYXNPd25Qcm9wZXJ0eShlKT9jcXQoYXF0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgbWwoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBjcXQoZSl7cmV0dXJuIG5ldyBtbChlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gZ3ooZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBtbChlLHQscixuKX1mdW5jdGlvbiBuUmUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBmQXx8KGU9VmcoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgbWwoZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IG1sfWZ1bmN0aW9uIEt3KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9uUmUoZSk6bmV3IG1sKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBtbChlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gdXF0KCl7cmV0dXJuIiMiK2pydCh0aGlzLnIpK2pydCh0aGlzLmcpK2pydCh0aGlzLmIpfWZ1bmN0aW9uIGhxdCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBqcnQoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gZnF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgRWYoZSx0LHIsbil9ZnVuY3Rpb24gcHF0KGUpe2lmKGUgaW5zdGFuY2VvZiBFZilyZXR1cm4gbmV3IEVmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGZBfHwoZT1WZyhlKSksIWUpcmV0dXJuIG5ldyBFZjtpZihlIGluc3RhbmNlb2YgRWYpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgRWYoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBkcXQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BxdChlKTpuZXcgRWYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEVmKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYcnQoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIHVBLF96LCR3LGhBLFRmLCQ4ZSxLOGUsWjhlLEo4ZSxROGUsdFJlLGVSZSxhcXQsbXF0PU0oKCk9PntvcXQoKTt1QT0uNyxfej0xL3VBLCR3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixoQT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixUZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsJDhlPS9eIyhbMC05YS1mXXszLDh9KSQvLEs4ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbJHcsJHcsJHddKyJcXCkkIiksWjhlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tUZixUZixUZl0rIlxcKSQiKSxKOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skdywkdywkdyxoQV0rIlxcKSQiKSxROGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tUZixUZixUZixoQV0rIlxcKSQiKSx0UmU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2hBLFRmLFRmXSsiXFwpJCIpLGVSZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2hBLFRmLFRmLGhBXSsiXFwpJCIpLGFxdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtteihmQSxWZyx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpzcXQsZm9ybWF0SGV4OnNxdCxmb3JtYXRIc2w6clJlLGZvcm1hdFJnYjpscXQsdG9TdHJpbmc6bHF0fSk7bXoobWwsS3csWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBtbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91QTpNYXRoLnBvdyh1QSxlKSxuZXcgbWwodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDp1cXQsZm9ybWF0SGV4OnVxdCxmb3JtYXRSZ2I6aHF0LHRvU3RyaW5nOmhxdH0pKTtteihFZixkcXQsWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3VBOk1hdGgucG93KHVBLGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IG1sKFhydChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxYcnQoZSxpLG4pLFhydChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciAkcnQ9TSgoKT0+e21xdCgpfSk7ZnVuY3Rpb24gS3J0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gZ3F0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBLcnQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgWnJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfcXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBLcnQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgeXF0PU0oKCk9PntacnQoKX0pO2Z1bmN0aW9uIEpydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHZxdD1NKCgpPT57fSk7ZnVuY3Rpb24gaVJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gb1JlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24geHF0KGUpe3JldHVybihlPStlKT09MT95ejpmdW5jdGlvbih0LHIpe3JldHVybiByLXQ/b1JlKHQscixlKTpKcnQoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24geXooZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/aVJlKGUscik6SnJ0KGlzTmFOKGUpP3Q6ZSl9dmFyIGJxdD1NKCgpPT57dnF0KCl9KTtmdW5jdGlvbiB3cXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1Ldyh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgdnosYVJlLHNSZSxTcXQ9TSgoKT0+eyRydCgpO1pydCgpO3lxdCgpO2JxdCgpO3Z6PWZ1bmN0aW9uIGUodCl7dmFyIHI9eHF0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPUt3KGkpKS5yLChvPUt3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9eXooaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO2FSZT13cXQoZ3F0KSxzUmU9d3F0KF9xdCl9KTtmdW5jdGlvbiBQYyhlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIGUqKDEtcikrdCpyfX12YXIgeHo9TSgoKT0+e30pO2Z1bmN0aW9uIGxSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gY1JlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19ZnVuY3Rpb24gZW50KGUsdCl7dmFyIHI9dG50Lmxhc3RJbmRleD1RcnQubGFzdEluZGV4PTAsbixpLG8sYT0tMSxzPVtdLGw9W107Zm9yKGU9ZSsiIix0PXQrIiI7KG49dG50LmV4ZWMoZSkpJiYoaT1RcnQuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlBjKG4saSl9KSkscj1RcnQubGFzdEluZGV4O3JldHVybiByPHQubGVuZ3RoJiYobz10LnNsaWNlKHIpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP2NSZShsWzBdLngpOmxSZSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHU9MCxoO3U8dDsrK3Upc1soaD1sW3VdKS5pXT1oLngoYyk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgdG50LFFydCxNcXQ9TSgoKT0+e3h6KCk7dG50PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRcnQ9bmV3IFJlZ0V4cCh0bnQuc291cmNlLCJnIil9KTtmdW5jdGlvbiBybnQoZSx0LHIsbixpLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQoZSplK3QqdCkpJiYoZS89YSx0Lz1hKSwobD1lKnIrdCpuKSYmKHItPWUqbCxuLT10KmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksZSpuPHQqciYmKGU9LWUsdD0tdCxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsZSkqRXF0LHNrZXdYOk1hdGguYXRhbihsKSpFcXQsc2NhbGVYOmEsc2NhbGVZOnN9fXZhciBFcXQsYnosVHF0PU0oKCk9PntFcXQ9MTgwL01hdGguUEksYno9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX19KTtmdW5jdGlvbiBBcXQoZSl7cmV0dXJuIGU9PT0ibm9uZSI/Yno6KHBBfHwocEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbm50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxDcXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHBBLnN0eWxlLnRyYW5zZm9ybT1lLGU9Q3F0LmdldENvbXB1dGVkU3R5bGUobm50LmFwcGVuZENoaWxkKHBBKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxubnQucmVtb3ZlQ2hpbGQocEEpLGU9ZS5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHJudCgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIFBxdChlKXtyZXR1cm4gZT09bnVsbD9iejood3p8fCh3ej1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx3ei5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9d3oudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgscm50KGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6YnopfXZhciBwQSxubnQsQ3F0LHd6LElxdD1NKCgpPT57VHF0KCl9KTtmdW5jdGlvbiBMcXQoZSx0LHIsbil7ZnVuY3Rpb24gaShjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbyhjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLHIpO2QucHVzaCh7aTpnLTQseDpQYyhjLGgpfSx7aTpnLTIseDpQYyh1LGYpfSl9ZWxzZShofHxmKSYmcC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZityKX1mdW5jdGlvbiBhKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKGkoaCkrInJvdGF0ZSgiLG51bGwsbiktMix4OlBjKGMsdSl9KSk6dSYmaC5wdXNoKGkoaCkrInJvdGF0ZSgiK3Urbil9ZnVuY3Rpb24gcyhjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKGkoaCkrInNrZXdYKCIsbnVsbCxuKS0yLHg6UGMoYyx1KX0pOnUmJmgucHVzaChpKGgpKyJza2V3WCgiK3Urbil9ZnVuY3Rpb24gbChjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goaShwKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ZC5wdXNoKHtpOmctNCx4OlBjKGMsaCl9LHtpOmctMix4OlBjKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJnAucHVzaChpKHApKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPWUoYyksdT1lKHUpLG8oYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksYShjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLHMoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0tMSxnPWYubGVuZ3RoLF87KytkPGc7KWhbKF89ZltkXSkuaV09Xy54KHApO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGludCxvbnQsa3F0PU0oKCk9Pnt4eigpO0lxdCgpO2ludD1McXQoQXF0LCJweCwgIiwicHgpIiwiZGVnKSIpLG9udD1McXQoUHF0LCIsICIsIikiLCIpIil9KTt2YXIgU3o9TSgoKT0+e3h6KCk7TXF0KCk7a3F0KCk7U3F0KCl9KTtmdW5jdGlvbiB1UmUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUR1KHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBoUmUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUR1KHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFJxdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWlvKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3VSZTpoUmUpKHIsZSx0KSl9ZnVuY3Rpb24gWncoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1EdSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIGlvKGksbikudmFsdWVbdF19fXZhciBkQT1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE16KGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9QYzp0IGluc3RhbmNlb2YgVmc/dno6KHI9VmcodCkpPyh0PXIsdnopOmVudCkoZSx0KX12YXIgYW50PU0oKCk9PnskcnQoKTtTeigpfSk7ZnVuY3Rpb24gZlJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBwUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBkUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUoZSk7cmV0dXJuIG89PT1yP251bGw6bz09PW4/aTppPXQobj1vLHIpfX1mdW5jdGlvbiBtUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gZ1JlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSksYT09PXM/bnVsbDphPT09biYmcz09PWk/bzpvPXQobj1hLGk9cykpfX1mdW5jdGlvbiBfUmUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpLGE9PT1zP251bGw6YT09PW4mJnM9PT1pP286bz10KG49YSxpPXMpKX19ZnVuY3Rpb24gTnF0KGUsdCl7dmFyIHI9bGQoZSksbj1yPT09InRyYW5zZm9ybSI/b250Ok16O3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP19SZTpnUmUpKHIsbixadyh0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9wUmU6ZlJlKShyKTooci5sb2NhbD9tUmU6ZFJlKShyLG4sdCsiIikpfXZhciBEcXQ9TSgoKT0+e1N6KCk7TWYoKTtkQSgpO2FudCgpfSk7ZnVuY3Rpb24geVJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsaShvKSl9fXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gdlJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGUoZSxpKG8pKX19cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBPcXQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPWxkKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/eVJlOnZSZSkobix0KSl9dmFyIHpxdD1NKCgpPT57TWYoKX0pO2Z1bmN0aW9uIHhSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBiUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gRnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/eFJlOmJSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIEJxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHdSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBTUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gSHF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/d1JlOlNSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIFZxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE1SZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gVXF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChNUmUodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZWFzZX12YXIgcXF0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gR3F0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBXcXQ9TSgoKT0+e01mKCk7dWQoKX0pO2Z1bmN0aW9uIFlxdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgVW8oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBqcXQ9TSgoKT0+e3VkKCl9KTtmdW5jdGlvbiBFUmUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBUUmUoZSx0LHIpe3ZhciBuLGksbz1FUmUodCk/Y0E6RHU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gWHF0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pbyh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goVFJlKHIsZSx0KSl9dmFyICRxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIENSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gS3F0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLENSZSh0aGlzLl9pZCkpfXZhciBacXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEpxdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXd2KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsSGcoY1tmXSx0LHIsZixjLGlvKHUscikpKTtyZXR1cm4gbmV3IFVvKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBRcXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gdEd0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9aW8odSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZIZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IFVvKG8sYSx0LHIpfXZhciBlR3Q9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gckd0KCl7cmV0dXJuIG5ldyBBUmUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBBUmUsbkd0PU0oKCk9PntNZigpO0FSZT1jZC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBQUmUoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QmcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gSVJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIExSZShlLHQscil7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CZyh0aGlzLGUpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24ga1JlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9QmcodGhpcyxlKSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGwmJihzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpKSxhPT09cz9udWxsOmE9PT1uJiZzPT09aT9vOm89dChuPWEsaT1zKX19ZnVuY3Rpb24gaUd0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9pbnQ6TXo7cmV0dXJuIHQ9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGUsUFJlKGUsbikpLm9uKCJlbmQuc3R5bGUuIitlLElSZShlKSk6dGhpcy5zdHlsZVR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/a1JlKGUsbixadyh0aGlzLCJzdHlsZS4iK2UsdCkpOkxSZShlLG4sdCsiIikscil9dmFyIG9HdD1NKCgpPT57U3ooKTtNZigpO2RBKCk7YW50KCl9KTtmdW5jdGlvbiBSUmUoZSx0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgaT10aGlzLG89dC5hcHBseShpLGFyZ3VtZW50cyk7cmV0dXJuIG8mJmZ1bmN0aW9uKGEpe2kuc3R5bGUuc2V0UHJvcGVydHkoZSxvKGEpLHIpfX1yZXR1cm4gbi5fdmFsdWU9dCxufWZ1bmN0aW9uIGFHdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixSUmUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBzR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIE5SZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIERSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBsR3QoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0RSZShadyh0aGlzLCJ0ZXh0IixlKSk6TlJlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBjR3Q9TSgoKT0+e2RBKCl9KTtmdW5jdGlvbiB1R3QoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9RXooKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PWlvKGwsdCk7SGcobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgaEd0PU0oKCk9Pnt1ZCgpO0FjKCl9KTtmdW5jdGlvbiBVbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gVHooZSl7cmV0dXJuIGNkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBFeigpe3JldHVybisrT1JlfXZhciBPUmUsSncsdWQ9TSgoKT0+e01mKCk7RHF0KCk7enF0KCk7QnF0KCk7VnF0KCk7cXF0KCk7V3F0KCk7anF0KCk7JHF0KCk7WnF0KCk7UXF0KCk7ZUd0KCk7bkd0KCk7b0d0KCk7c0d0KCk7Y0d0KCk7aEd0KCk7ZEEoKTtPUmU9MDtKdz1jZC5wcm90b3R5cGU7VW8ucHJvdG90eXBlPVR6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VW8sc2VsZWN0OkpxdCxzZWxlY3RBbGw6dEd0LGZpbHRlcjpHcXQsbWVyZ2U6WXF0LHNlbGVjdGlvbjpyR3QsdHJhbnNpdGlvbjp1R3QsY2FsbDpKdy5jYWxsLG5vZGVzOkp3Lm5vZGVzLG5vZGU6Sncubm9kZSxzaXplOkp3LnNpemUsZW1wdHk6SncuZW1wdHksZWFjaDpKdy5lYWNoLG9uOlhxdCxhdHRyOk5xdCxhdHRyVHdlZW46T3F0LHN0eWxlOmlHdCxzdHlsZVR3ZWVuOmFHdCx0ZXh0OmxHdCxyZW1vdmU6S3F0LHR3ZWVuOlJxdCxkZWxheTpGcXQsZHVyYXRpb246SHF0LGVhc2U6VXF0fX0pO2Z1bmN0aW9uIHpSZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBzbnQudGltZT1YdygpLHNudDtyZXR1cm4gcn1mdW5jdGlvbiBmR3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgVW8/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1FeigpLChyPXNudCkudGltZT1YdygpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkhnKGwsZSx0LGMsYSxyfHx6UmUobCx0KSk7cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSx0KX12YXIgc250LHBHdD1NKCgpPT57dWQoKTtBYygpO0lfKCk7cXJ0KCk7c250PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTp4c319KTt2YXIgZEd0PU0oKCk9PntNZigpO2lxdCgpO3BHdCgpO2NkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9bnF0O2NkLnByb3RvdHlwZS50cmFuc2l0aW9uPWZHdH0pO2Z1bmN0aW9uIG1HdChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+ZnomJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBVbyhbW2VdXSxGUmUsdCwraSl9cmV0dXJuIG51bGx9dmFyIEZSZSxnR3Q9TSgoKT0+e3VkKCk7QWMoKTtGUmU9W251bGxdfSk7dmFyIF9HdD1NKCgpPT57ZEd0KCk7dWQoKTtnR3QoKTtXcnQoKX0pO2Z1bmN0aW9uIGxudChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHlHdD1NKCgpPT57fSk7ZnVuY3Rpb24gdkd0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIHhHdChlKXtyZXR1cm4gZVsxXX12YXIgYkd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjbnQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBRdyhlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfWZ1bmN0aW9uIG1BKGUsdCl7dmFyIHI9dCxuPXQuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBnQShlLHQpe3ZhciByPXQsbj10LkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24gd0d0KGUpe2Zvcig7ZS5MOyllPWUuTDtyZXR1cm4gZX12YXIgdW50LEN6PU0oKCk9PntjbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjbnQsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT13R3QodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQscj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LHI9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9cix0LkM9ITAsZT10O3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5SJiYobUEodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsZ0EodGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLGU9bik6KGU9PT1yLkwmJihnQSh0aGlzLHIpLGU9cixyPWUuVSksci5DPSExLG4uQz0hMCxtQSh0aGlzLG4pKSkscj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0PWUuVSxyLG49ZS5MLGk9ZS5SLG8sYTtpZihuP2k/bz13R3QoaSk6bz1uOm89aSx0P3QuTD09PWU/dC5MPW86dC5SPW86dGhpcy5fPW8sbiYmaT8oYT1vLkMsby5DPWUuQyxvLkw9bixuLlU9byxvIT09aT8odD1vLlUsby5VPWUuVSxlPW8uUix0Lkw9ZSxvLlI9aSxpLlU9byk6KG8uVT10LHQ9byxlPW8uUikpOihhPWUuQyxlPW8pLGUmJihlLlU9dCksIWEpe2lmKGUmJmUuQyl7ZS5DPSExO3JldHVybn1kb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT10Lkwpe2lmKHI9dC5SLHIuQyYmKHIuQz0hMSx0LkM9ITAsbUEodGhpcyx0KSxyPXQuUiksci5MJiZyLkwuQ3x8ci5SJiZyLlIuQyl7KCFyLlJ8fCFyLlIuQykmJihyLkwuQz0hMSxyLkM9ITAsZ0EodGhpcyxyKSxyPXQuUiksci5DPXQuQyx0LkM9ci5SLkM9ITEsbUEodGhpcyx0KSxlPXRoaXMuXzticmVha319ZWxzZSBpZihyPXQuTCxyLkMmJihyLkM9ITEsdC5DPSEwLGdBKHRoaXMsdCkscj10LkwpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5MfHwhci5MLkMpJiYoci5SLkM9ITEsci5DPSEwLG1BKHRoaXMscikscj10LkwpLHIuQz10LkMsdC5DPXIuTC5DPSExLGdBKHRoaXMsdCksZT10aGlzLl87YnJlYWt9ci5DPSEwLGU9dCx0PXQuVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fTt1bnQ9Y250fSk7ZnVuY3Rpb24gdFMoZSx0LHIsbil7dmFyIGk9W251bGwsbnVsbF0sbz1Bby5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD1lLGkucmlnaHQ9dCxyJiZfQShpLGUsdCxyKSxuJiZfQShpLHQsZSxuKSxaYVtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxaYVt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIGVTKGUsdCxyKXt2YXIgbj1bdCxyXTtyZXR1cm4gbi5sZWZ0PWUsbn1mdW5jdGlvbiBfQShlLHQscixuKXshZVswXSYmIWVbMV0/KGVbMF09bixlLmxlZnQ9dCxlLnJpZ2h0PXIpOmUubGVmdD09PXI/ZVsxXT1uOmVbMF09bn1mdW5jdGlvbiBCUmUoZSx0LHIsbixpKXt2YXIgbz1lWzBdLGE9ZVsxXSxzPW9bMF0sbD1vWzFdLGM9YVswXSx1PWFbMV0saD0wLGY9MSxwPWMtcyxkPXUtbCxnO2lmKGc9dC1zLCEoIXAmJmc+MCkpe2lmKGcvPXAscDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihwPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPW4tcywhKCFwJiZnPDApKXtpZihnLz1wLHA8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYocD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9aWYoZz1yLWwsISghZCYmZz4wKSl7aWYoZy89ZCxkPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKGQ+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9aS1sLCEoIWQmJmc8MCkpe2lmKGcvPWQsZDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihkPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1yZXR1cm4hKGg+MCkmJiEoZjwxKXx8KGg+MCYmKGVbMF09W3MraCpwLGwraCpkXSksZjwxJiYoZVsxXT1bcytmKnAsbCtmKmRdKSksITB9fX19fWZ1bmN0aW9uIEhSZShlLHQscixuLGkpe3ZhciBvPWVbMV07aWYobylyZXR1cm4hMDt2YXIgYT1lWzBdLHM9ZS5sZWZ0LGw9ZS5yaWdodCxjPXNbMF0sdT1zWzFdLGg9bFswXSxmPWxbMV0scD0oYytoKS8yLGQ9KHUrZikvMixnLF87aWYoZj09PXUpe2lmKHA8dHx8cD49bilyZXR1cm47aWYoYz5oKXtpZighYSlhPVtwLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bcCxpXX1lbHNle2lmKCFhKWE9W3AsaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289W3Ascl19fWVsc2UgaWYoZz0oYy1oKS8oZi11KSxfPWQtZypwLGc8LTF8fGc+MSlpZihjPmgpe2lmKCFhKWE9WyhyLV8pL2cscl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVsoaS1fKS9nLGldfWVsc2V7aWYoIWEpYT1bKGktXykvZyxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bKHItXykvZyxyXX1lbHNlIGlmKHU8Zil7aWYoIWEpYT1bdCxnKnQrX107ZWxzZSBpZihhWzBdPj1uKXJldHVybjtvPVtuLGcqbitfXX1lbHNle2lmKCFhKWE9W24sZypuK19dO2Vsc2UgaWYoYVswXTx0KXJldHVybjtvPVt0LGcqdCtfXX1yZXR1cm4gZVswXT1hLGVbMV09bywhMH1mdW5jdGlvbiBTR3QoZSx0LHIsbil7Zm9yKHZhciBpPUFvLmxlbmd0aCxvO2ktLTspKCFIUmUobz1Bb1tpXSxlLHQscixuKXx8IUJSZShvLGUsdCxyLG4pfHwhKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+V3J8fE1hdGguYWJzKG9bMF1bMV0tb1sxXVsxXSk+V3IpKSYmZGVsZXRlIEFvW2ldfXZhciBBej1NKCgpPT57clMoKX0pO2Z1bmN0aW9uIE1HdChlKXtyZXR1cm4gWmFbZS5pbmRleF09e3NpdGU6ZSxoYWxmZWRnZXM6W119fWZ1bmN0aW9uIFZSZShlLHQpe3ZhciByPWUuc2l0ZSxuPXQubGVmdCxpPXQucmlnaHQ7cmV0dXJuIHI9PT1pJiYoaT1uLG49ciksaT9NYXRoLmF0YW4yKGlbMV0tblsxXSxpWzBdLW5bMF0pOihyPT09bj8obj10WzFdLGk9dFswXSk6KG49dFswXSxpPXRbMV0pLE1hdGguYXRhbjIoblswXS1pWzBdLGlbMV0tblsxXSkpfWZ1bmN0aW9uIGhudChlLHQpe3JldHVybiB0WysodC5sZWZ0IT09ZS5zaXRlKV19ZnVuY3Rpb24gVVJlKGUsdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1lLnNpdGUpXX1mdW5jdGlvbiBFR3QoKXtmb3IodmFyIGU9MCx0PVphLmxlbmd0aCxyLG4saSxvO2U8dDsrK2UpaWYoKHI9WmFbZV0pJiYobz0obj1yLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlhW2ldPWksc1tpXT1WUmUocixBb1tuW2ldXSk7Zm9yKGEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBzW2NdLXNbbF19KSxpPTA7aTxvOysraSlzW2ldPW5bYVtpXV07Zm9yKGk9MDtpPG87KytpKW5baV09c1tpXX19ZnVuY3Rpb24gVEd0KGUsdCxyLG4pe3ZhciBpPVphLmxlbmd0aCxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyx5PSEwO2ZvcihvPTA7bzxpOysrbylpZihhPVphW29dKXtmb3Iocz1hLnNpdGUsYz1hLmhhbGZlZGdlcyxsPWMubGVuZ3RoO2wtLTspQW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspZD1VUmUoYSxBb1tjW2xdXSksZz1kWzBdLF89ZFsxXSxoPWhudChhLEFvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Xcnx8TWF0aC5hYnMoXy1wKT5XcikmJihjLnNwbGljZShsLDAsQW8ucHVzaChlUyhzLGQsTWF0aC5hYnMoZy1lKTxXciYmbi1fPldyP1tlLE1hdGguYWJzKGYtZSk8V3I/cDpuXTpNYXRoLmFicyhfLW4pPFdyJiZyLWc+V3I/W01hdGguYWJzKHAtbik8V3I/ZjpyLG5dOk1hdGguYWJzKGctcik8V3ImJl8tdD5Xcj9bcixNYXRoLmFicyhmLXIpPFdyP3A6dF06TWF0aC5hYnMoXy10KTxXciYmZy1lPldyP1tNYXRoLmFicyhwLXQpPFdyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9WmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKEFvLnB1c2goZVMocz15LnNpdGUsUCxrKSktMSxBby5wdXNoKGVTKHMsayxPKSktMSxBby5wdXNoKGVTKHMsTyxEKSktMSxBby5wdXNoKGVTKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1aYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBaYVtvXSl9dmFyIGZudD1NKCgpPT57QXooKTtyUygpfSk7ZnVuY3Rpb24gcVJlKCl7UXcodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE12KGUpe3ZhciB0PWUuUCxyPWUuTjtpZighKCF0fHwhcikpe3ZhciBuPXQuc2l0ZSxpPWUuc2l0ZSxvPXIuc2l0ZTtpZihuIT09byl7dmFyIGE9aVswXSxzPWlbMV0sbD1uWzBdLWEsYz1uWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZj0yKihsKmgtYyp1KTtpZighKGY+PS1BR3QpKXt2YXIgcD1sKmwrYypjLGQ9dSp1K2gqaCxnPShoKnAtYypkKS9mLF89KGwqZC11KnApL2YseT1DR3QucG9wKCl8fG5ldyBxUmU7eS5hcmM9ZSx5LnNpdGU9aSx5Lng9ZythLHkueT0oeS5jeT1fK3MpK01hdGguc3FydChnKmcrXypfKSxlLmNpcmNsZT15O2Zvcih2YXIgeD1udWxsLGI9blMuXztiOylpZih5Lnk8Yi55fHx5Lnk9PT1iLnkmJnkueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3g9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7eD1iO2JyZWFrfW5TLmluc2VydCh4LHkpLHh8fChQej15KX19fX1mdW5jdGlvbiBFdihlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwoUHo9dC5OKSxuUy5yZW1vdmUodCksQ0d0LnB1c2godCksUXcodCksZS5jaXJjbGU9bnVsbCl9dmFyIENHdCxQeixwbnQ9TSgoKT0+e0N6KCk7clMoKTtDR3Q9W119KTtmdW5jdGlvbiBHUmUoKXtRdyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gUEd0KGUpe3ZhciB0PUlHdC5wb3AoKXx8bmV3IEdSZTtyZXR1cm4gdC5zaXRlPWUsdH1mdW5jdGlvbiBkbnQoZSl7RXYoZSksVHYucmVtb3ZlKGUpLElHdC5wdXNoKGUpLFF3KGUpfWZ1bmN0aW9uIExHdChlKXt2YXIgdD1lLmNpcmNsZSxyPXQueCxuPXQuY3ksaT1bcixuXSxvPWUuUCxhPWUuTixzPVtlXTtkbnQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPFdyOylvPWwuUCxzLnVuc2hpZnQobCksZG50KGwpLGw9bztzLnVuc2hpZnQobCksRXYobCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKHItYy5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tYy5jaXJjbGUuY3kpPFdyOylhPWMuTixzLnB1c2goYyksZG50KGMpLGM9YTtzLnB1c2goYyksRXYoYyk7dmFyIHU9cy5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1zW2hdLGw9c1toLTFdLF9BKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSxjPXNbdS0xXSxjLmVkZ2U9dFMobC5zaXRlLGMuc2l0ZSxudWxsLGkpLE12KGwpLE12KGMpfWZ1bmN0aW9uIGtHdChlKXtmb3IodmFyIHQ9ZVswXSxyPWVbMV0sbixpLG8sYSxzPVR2Ll87czspaWYobz1SR3QocyxyKS10LG8+V3Ipcz1zLkw7ZWxzZSBpZihhPXQtV1JlKHMsciksYT5Xcil7aWYoIXMuUil7bj1zO2JyZWFrfXM9cy5SfWVsc2V7bz4tV3I/KG49cy5QLGk9cyk6YT4tV3I/KG49cyxpPXMuTik6bj1pPXM7YnJlYWt9TUd0KGUpO3ZhciBsPVBHdChlKTtpZihUdi5pbnNlcnQobixsKSwhKCFuJiYhaSkpe2lmKG49PT1pKXtFdihuKSxpPVBHdChuLnNpdGUpLFR2Lmluc2VydChsLGkpLGwuZWRnZT1pLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSksTXYobiksTXYoaSk7cmV0dXJufWlmKCFpKXtsLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSk7cmV0dXJufUV2KG4pLEV2KGkpO3ZhciBjPW4uc2l0ZSx1PWNbMF0saD1jWzFdLGY9ZVswXS11LHA9ZVsxXS1oLGQ9aS5zaXRlLGc9ZFswXS11LF89ZFsxXS1oLHk9MiooZipfLXAqZykseD1mKmYrcCpwLGI9ZypnK18qXyxTPVsoXyp4LXAqYikveSt1LChmKmItZyp4KS95K2hdO19BKGkuZWRnZSxjLGQsUyksbC5lZGdlPXRTKGMsZSxudWxsLFMpLGkuZWRnZT10UyhlLGQsbnVsbCxTKSxNdihuKSxNdihpKX19ZnVuY3Rpb24gUkd0KGUsdCl7dmFyIHI9ZS5zaXRlLG49clswXSxpPXJbMV0sbz1pLXQ7aWYoIW8pcmV0dXJuIG47dmFyIGE9ZS5QO2lmKCFhKXJldHVybi0xLzA7cj1hLnNpdGU7dmFyIHM9clswXSxsPXJbMV0sYz1sLXQ7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9vLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1vLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gV1JlKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIFJHdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gblsxXT09PXQ/blswXToxLzB9dmFyIElHdCxOR3Q9TSgoKT0+e0N6KCk7Zm50KCk7cG50KCk7QXooKTtyUygpO0lHdD1bXX0pO2Z1bmN0aW9uIFlSZShlLHQscil7cmV0dXJuKGVbMF0tclswXSkqKHRbMV0tZVsxXSktKGVbMF0tdFswXSkqKHJbMV0tZVsxXSl9ZnVuY3Rpb24galJlKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHlBKGUsdCl7dmFyIHI9ZS5zb3J0KGpSZSkucG9wKCksbixpLG87Zm9yKEFvPVtdLFphPW5ldyBBcnJheShlLmxlbmd0aCksVHY9bmV3IHVudCxuUz1uZXcgdW50OzspaWYobz1QeixyJiYoIW98fHJbMV08by55fHxyWzFdPT09by55JiZyWzBdPG8ueCkpKHJbMF0hPT1ufHxyWzFdIT09aSkmJihrR3Qociksbj1yWzBdLGk9clsxXSkscj1lLnBvcCgpO2Vsc2UgaWYobylMR3Qoby5hcmMpO2Vsc2UgYnJlYWs7aWYoRUd0KCksdCl7dmFyIGE9K3RbMF1bMF0scz0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07U0d0KGEscyxsLGMpLFRHdChhLHMsbCxjKX10aGlzLmVkZ2VzPUFvLHRoaXMuY2VsbHM9WmEsVHY9blM9QW89WmE9bnVsbH12YXIgV3IsQUd0LFR2LFphLG5TLEFvLHJTPU0oKCk9PntOR3QoKTtmbnQoKTtwbnQoKTtBeigpO0N6KCk7V3I9MWUtNixBR3Q9MWUtMTI7eUEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5QSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gaG50KHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZZUmUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX19KTtmdW5jdGlvbiBER3QoKXt2YXIgZT12R3QsdD14R3Qscj1udWxsO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIG5ldyB5QShpLm1hcChmdW5jdGlvbihvLGEpe3ZhciBzPVtNYXRoLnJvdW5kKGUobyxhLGkpL1dyKSpXcixNYXRoLnJvdW5kKHQobyxhLGkpL1dyKSpXcl07cmV0dXJuIHMuaW5kZXg9YSxzLmRhdGE9byxzfSkscil9cmV0dXJuIG4ucG9seWdvbnM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkucG9seWdvbnMoKX0sbi5saW5rcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS5saW5rcygpfSxuLnRyaWFuZ2xlcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS50cmlhbmdsZXMoKX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6bG50KCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpsbnQoK2kpLG4pOnR9LG4uZXh0ZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWytpWzBdWzBdLCtpWzBdWzFdXSxbK2lbMV1bMF0sK2lbMV1bMV1dXSxuKTpyJiZbW3JbMF1bMF0sclswXVsxXV0sW3JbMV1bMF0sclsxXVsxXV1dfSxuLnNpemU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbMCwwXSxbK2lbMF0sK2lbMV1dXSxuKTpyJiZbclsxXVswXS1yWzBdWzBdLHJbMV1bMV0tclswXVsxXV19LG59dmFyIE9HdD1NKCgpPT57eUd0KCk7Ykd0KCk7clMoKX0pO3ZhciB6R3Q9TSgoKT0+e09HdCgpfSk7ZnVuY3Rpb24gQkd0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEl6KHIpfWZ1bmN0aW9uIEl6KGUpe3RoaXMuXz1lfWZ1bmN0aW9uICRSZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIEtSZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIEZHdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09WFJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgWFJlLHZBLEhHdD1NKCgpPT57WFJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0l6LnByb3RvdHlwZT1CR3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJeixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPSRSZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPUtSZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Rkd0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Rkd0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBJeihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dkE9Qkd0fSk7dmFyIG1udD1NKCgpPT57SEd0KCl9KTt2YXIgTHosZ250LF9udD1NKCgpPT57THo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGdudD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6THoseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIGhkKGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLGdudC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6Z250W3RdLGxvY2FsOmV9OmV9dmFyIGt6PU0oKCk9PntfbnQoKX0pO2Z1bmN0aW9uIFpSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUx6JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Mej90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gSlJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFJ6KGUpe3ZhciB0PWhkKGUpO3JldHVybih0LmxvY2FsP0pSZTpaUmUpKHQpfXZhciB5bnQ9TSgoKT0+e2t6KCk7X250KCl9KTtmdW5jdGlvbiBRUmUoKXt9ZnVuY3Rpb24gQ3YoZSl7cmV0dXJuIGU9PW51bGw/UVJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIE56PU0oKCk9Pnt9KTtmdW5jdGlvbiBWR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUN2KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgbWkobix0aGlzLl9wYXJlbnRzKX12YXIgVUd0PU0oKCk9PntPdSgpO056KCl9KTtmdW5jdGlvbiB0TmUoKXtyZXR1cm5bXX1mdW5jdGlvbiB4QShlKXtyZXR1cm4gZT09bnVsbD90TmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgdm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBxR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXhBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBtaShuLGkpfXZhciBHR3Q9TSgoKT0+e091KCk7dm50KCl9KTtmdW5jdGlvbiBiQShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX12YXIgeG50PU0oKCk9Pnt9KTtmdW5jdGlvbiBXR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBtaShuLHRoaXMuX3BhcmVudHMpfXZhciBZR3Q9TSgoKT0+e091KCk7eG50KCl9KTtmdW5jdGlvbiBEeihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgYm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBqR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKER6KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB3QShlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH12YXIgd250PU0oKCk9PntibnQoKTtPdSgpO3dBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d0EsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBYR3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciAkR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGVOZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgd0EoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHJOZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPUtHdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPUtHdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB3QShlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFpHdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/ck5lOmVOZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVhHdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgbWkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBLR3QsSkd0PU0oKCk9PntPdSgpO3dudCgpOyRHdCgpO0tHdD0iJCJ9KTtmdW5jdGlvbiBRR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoRHopLHRoaXMuX3BhcmVudHMpfXZhciB0V3Q9TSgoKT0+e2JudCgpO091KCl9KTtmdW5jdGlvbiBlV3QoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIHJXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbld0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBtaShhLHRoaXMuX3BhcmVudHMpfXZhciBpV3Q9TSgoKT0+e091KCl9KTtmdW5jdGlvbiBvV3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBhV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHNXdChlKXtlfHwoZT1uTmUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgbWkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIG5OZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgbFd0PU0oKCk9PntPdSgpfSk7ZnVuY3Rpb24gY1d0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB1V3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGhXdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBmV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHBXdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGRXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbVd0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgZ1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfV3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIHlXdD1NKCgpPT57fSk7ZnVuY3Rpb24gdld0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgeFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBpTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIG9OZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIGFOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIHNOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBsTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIGNOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBiV3QoZSx0KXt2YXIgcj1oZChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/b05lOmlOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP2NOZTpsTmU6ci5sb2NhbD9zTmU6YU5lKShyLHQpKX12YXIgd1d0PU0oKCk9PntreigpfSk7ZnVuY3Rpb24gT3ooZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBTbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBoTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBmTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gU1d0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD91TmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/Zk5lOmhOZSkoZSx0LHI9PW51bGw/IiI6cikpOlVnKHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIFVnKGUsdCl7cmV0dXJuIGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8T3ooZSkuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9dmFyIE1udD1NKCgpPT57U250KCl9KTtmdW5jdGlvbiBwTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIGROZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gbU5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIE1XdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3BOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9tTmU6ZE5lKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgRVd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBUV3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEVudChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBDV3QoZSl9ZnVuY3Rpb24gQ1d0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1UV3QoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBBV3QoZSx0KXtmb3IodmFyIHI9RW50KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gUFd0KGUsdCl7Zm9yKHZhciByPUVudChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGdOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtBV3QodGhpcyxlKX19ZnVuY3Rpb24gX05lKGUpe3JldHVybiBmdW5jdGlvbigpe1BXdCh0aGlzLGUpfX1mdW5jdGlvbiB5TmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/QVd0OlBXdCkodGhpcyxlKX19ZnVuY3Rpb24gSVd0KGUsdCl7dmFyIHI9VFd0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPUVudCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj95TmU6dD9nTmU6X05lKShyLHQpKX12YXIgTFd0PU0oKCk9PntDV3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gdk5lKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB4TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBiTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGtXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD92TmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP2JOZTp4TmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgUld0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3TmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBTTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gTU5lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gTld0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3dOZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/TU5lOlNOZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFTmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gT1d0KCl7cmV0dXJuIHRoaXMuZWFjaChFTmUpfXZhciB6V3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFROZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEZXdCgpe3JldHVybiB0aGlzLmVhY2goVE5lKX12YXIgQld0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIV3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSeihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgVld0PU0oKCk9Pnt5bnQoKX0pO2Z1bmN0aW9uIENOZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFVXdChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6UnooZSksbj10PT1udWxsP0NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkN2KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgcVd0PU0oKCk9Pnt5bnQoKTtOeigpfSk7ZnVuY3Rpb24gQU5lKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gR1d0KCl7cmV0dXJuIHRoaXMuZWFjaChBTmUpfXZhciBXV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFBOZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gSU5lKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBZV3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/SU5lOlBOZSl9dmFyIGpXdD1NKCgpPT57fSk7ZnVuY3Rpb24gWFd0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgJFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMTmUoZSx0LHIpe3JldHVybiBlPUpXdChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBKV3QoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1ZcjtZcj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtZcj1pfX19ZnVuY3Rpb24ga05lKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBSTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gTk5lKGUsdCxyKXt2YXIgbj1aV3QuaGFzT3duUHJvcGVydHkoZS50eXBlKT9MTmU6Sld0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIFFXdChlLHQscil7dmFyIG49a05lKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9OTmU6Uk5lLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFRudChlLHQscixuKXt2YXIgaT1ZcjtlLnNvdXJjZUV2ZW50PVlyLFlyPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtZcj1pfX12YXIgWld0LFlyLEtXdCx6ej1NKCgpPT57Wld0PXt9LFlyPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKEtXdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBLV3R8fChaV3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gdFl0KGUsdCxyKXt2YXIgbj1PeihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBETmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdFl0KHRoaXMsZSx0KX19ZnVuY3Rpb24gT05lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRZdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBlWXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9PTmU6RE5lKShlLHQpKX12YXIgcll0PU0oKCk9PntTbnQoKX0pO2Z1bmN0aW9uIG1pKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG5ZdCgpe3JldHVybiBuZXcgbWkoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxDbnQpfXZhciBDbnQsZmQsT3U9TSgoKT0+e1VHdCgpO0dHdCgpO1lHdCgpO0pHdCgpO3dudCgpO3RXdCgpO3JXdCgpO2lXdCgpO2FXdCgpO2xXdCgpO3VXdCgpO2ZXdCgpO2RXdCgpO2dXdCgpO3lXdCgpO3hXdCgpO3dXdCgpO01udCgpO0VXdCgpO0xXdCgpO1JXdCgpO0RXdCgpO3pXdCgpO0JXdCgpO1ZXdCgpO3FXdCgpO1dXdCgpO2pXdCgpOyRXdCgpO3p6KCk7cll0KCk7Q250PVtudWxsXTttaS5wcm90b3R5cGU9bll0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bWksc2VsZWN0OlZHdCxzZWxlY3RBbGw6cUd0LGZpbHRlcjpXR3QsZGF0YTpaR3QsZW50ZXI6akd0LGV4aXQ6UUd0LGpvaW46ZVd0LG1lcmdlOm5XdCxvcmRlcjpvV3Qsc29ydDpzV3QsY2FsbDpjV3Qsbm9kZXM6aFd0LG5vZGU6cFd0LHNpemU6bVd0LGVtcHR5Ol9XdCxlYWNoOnZXdCxhdHRyOmJXdCxzdHlsZTpTV3QscHJvcGVydHk6TVd0LGNsYXNzZWQ6SVd0LHRleHQ6a1d0LGh0bWw6Tld0LHJhaXNlOk9XdCxsb3dlcjpGV3QsYXBwZW5kOkhXdCxpbnNlcnQ6VVd0LHJlbW92ZTpHV3QsY2xvbmU6WVd0LGRhdHVtOlhXdCxvbjpRV3QsZGlzcGF0Y2g6ZVl0fTtmZD1uWXR9KTtmdW5jdGlvbiBwZChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBtaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IG1pKFtbZV1dLENudCl9dmFyIGlZdD1NKCgpPT57T3UoKX0pO2Z1bmN0aW9uIEZ6KCl7Zm9yKHZhciBlPVlyLHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9dmFyIEFudD1NKCgpPT57enooKX0pO2Z1bmN0aW9uIEJ6KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBudD1NKCgpPT57fSk7ZnVuY3Rpb24gaVMoZSl7dmFyIHQ9RnooKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksQnooZSx0KX12YXIgb1l0PU0oKCk9PntBbnQoKTtQbnQoKX0pO2Z1bmN0aW9uIEh6KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1GeigpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIG49MCxpPXQ/dC5sZW5ndGg6MCxvO248aTsrK24paWYoKG89dFtuXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIEJ6KGUsbyk7cmV0dXJuIG51bGx9dmFyIGFZdD1NKCgpPT57QW50KCk7UG50KCl9KTt2YXIgSXM9TSgoKT0+e3hudCgpO29ZdCgpO2t6KCk7aVl0KCk7T3UoKTtOeigpO3ZudCgpO01udCgpO2FZdCgpO3p6KCl9KTtmdW5jdGlvbiBWeigpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIHNZdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIEludChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXBkKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsVnosITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsVnosITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIExudChlLHQpe3ZhciByPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49cGQoZSkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYobi5vbigiY2xpY2suZHJhZyIsVnosITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIHI/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KHIuc3R5bGUuTW96VXNlclNlbGVjdD1yLl9fbm9zZWxlY3QsZGVsZXRlIHIuX19ub3NlbGVjdCl9dmFyIGxZdD1NKCgpPT57SXMoKTtzWXQoKX0pO3ZhciBjWXQ9TSgoKT0+e2xZdCgpfSk7ZnVuY3Rpb24gVXooZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGtudChlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgdVl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFQSgpe31mdW5jdGlvbiBmWXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBHTmUoKXtyZXR1cm4geVl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIHBZdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHFnKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PXpOZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2RZdCh0KTpyPT09Mz9uZXcgZ2wodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P3F6KHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P3F6KHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9Rk5lLmV4ZWMoZSkpP25ldyBnbCh0WzFdLHRbMl0sdFszXSwxKToodD1CTmUuZXhlYyhlKSk/bmV3IGdsKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PUhOZS5leGVjKGUpKT9xeih0WzFdLHRbMl0sdFszXSx0WzRdKToodD1WTmUuZXhlYyhlKSk/cXoodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9VU5lLmV4ZWMoZSkpP19ZdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXFOZS5leGVjKGUpKT9fWXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpoWXQuaGFzT3duUHJvcGVydHkoZSk/ZFl0KGhZdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IGdsKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gZFl0KGUpe3JldHVybiBuZXcgZ2woZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIHF6KGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgZ2woZSx0LHIsbil9ZnVuY3Rpb24gV05lKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRUF8fChlPXFnKGUpKSxlPyhlPWUucmdiKCksbmV3IGdsKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyBnbH1mdW5jdGlvbiBhUyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/V05lKGUpOm5ldyBnbChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2woZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG1ZdCgpe3JldHVybiIjIitSbnQodGhpcy5yKStSbnQodGhpcy5nKStSbnQodGhpcy5iKX1mdW5jdGlvbiBnWXQoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gUm50KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIF9ZdChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IENmKGUsdCxyLG4pfWZ1bmN0aW9uIHlZdChlKXtpZihlIGluc3RhbmNlb2YgQ2YpcmV0dXJuIG5ldyBDZihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBFQXx8KGU9cWcoZSkpLCFlKXJldHVybiBuZXcgQ2Y7aWYoZSBpbnN0YW5jZW9mIENmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IENmKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gdll0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT95WXQoZSk6bmV3IENmKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBDZihlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTm50KGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBTQSxHeixvUyxNQSxBZix6TmUsRk5lLEJOZSxITmUsVk5lLFVOZSxxTmUsaFl0LHhZdD1NKCgpPT57dVl0KCk7U0E9LjcsR3o9MS9TQSxvUz0iXFxzKihbKy1dP1xcZCspXFxzKiIsTUE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsQWY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHpOZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxGTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW29TLG9TLG9TXSsiXFwpJCIpLEJOZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbQWYsQWYsQWZdKyJcXCkkIiksSE5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbb1Msb1Msb1MsTUFdKyJcXCkkIiksVk5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQWYsQWYsQWYsTUFdKyJcXCkkIiksVU5lPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tNQSxBZixBZl0rIlxcKSQiKSxxTmU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tNQSxBZixBZixNQV0rIlxcKSQiKSxoWXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07VXooRUEscWcse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6Zll0LGZvcm1hdEhleDpmWXQsZm9ybWF0SHNsOkdOZSxmb3JtYXRSZ2I6cFl0LHRvU3RyaW5nOnBZdH0pO1V6KGdsLGFTLGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgZ2wodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U0E6TWF0aC5wb3coU0EsZSksbmV3IGdsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6bVl0LGZvcm1hdEhleDptWXQsZm9ybWF0UmdiOmdZdCx0b1N0cmluZzpnWXR9KSk7VXooQ2Ysdll0LGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9TQTpNYXRoLnBvdyhTQSxlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBnbChObnQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksTm50KGUsaSxuKSxObnQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgRG50PU0oKCk9Pnt4WXQoKX0pO2Z1bmN0aW9uIE9udChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGJZdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gT250KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIHpudD1NKCgpPT57fSk7ZnVuY3Rpb24gd1l0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gT250KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIFNZdD1NKCgpPT57em50KCl9KTtmdW5jdGlvbiBGbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBNWXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlOZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGpOZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uIEVZdChlKXtyZXR1cm4oZT0rZSk9PTE/V3o6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P2pOZSh0LHIsZSk6Rm50KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFd6KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP1lOZShlLHIpOkZudChpc05hTihlKT90OmUpfXZhciBUWXQ9TSgoKT0+e01ZdCgpfSk7ZnVuY3Rpb24gQ1l0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9YVModFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIFl6LFhOZSwkTmUsQVl0PU0oKCk9PntEbnQoKTt6bnQoKTtTWXQoKTtUWXQoKTtZej1mdW5jdGlvbiBlKHQpe3ZhciByPUVZdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1hUyhpKSkuciwobz1hUyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPVd6KGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtYTmU9Q1l0KGJZdCksJE5lPUNZdCh3WXQpfSk7ZnVuY3Rpb24gSWMoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIGp6PU0oKCk9Pnt9KTtmdW5jdGlvbiBLTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFpOZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIFZudChlLHQpe3ZhciByPUhudC5sYXN0SW5kZXg9Qm50Lmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPUhudC5leGVjKGUpKSYmKGk9Qm50LmV4ZWModCkpOykobz1pLmluZGV4KT5yJiYobz10LnNsaWNlKHIsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpJYyhuLGkpfSkpLHI9Qm50Lmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9aTmUobFswXS54KTpLTmUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIEhudCxCbnQsUFl0PU0oKCk9PntqeigpO0hudD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQm50PW5ldyBSZWdFeHAoSG50LnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gVW50KGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKklZdCxza2V3WDpNYXRoLmF0YW4obCkqSVl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgSVl0LFh6LExZdD1NKCgpPT57SVl0PTE4MC9NYXRoLlBJLFh6PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gUll0KGUpe3JldHVybiBlPT09Im5vbmUiP1h6OihUQXx8KFRBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHFudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsa1l0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxUQS5zdHlsZS50cmFuc2Zvcm09ZSxlPWtZdC5nZXRDb21wdXRlZFN0eWxlKHFudC5hcHBlbmRDaGlsZChUQSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscW50LnJlbW92ZUNoaWxkKFRBKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxVbnQoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBOWXQoZSl7cmV0dXJuIGU9PW51bGw/WHo6KCR6fHwoJHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksJHouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPSR6LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LFVudChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZikpOlh6KX12YXIgVEEscW50LGtZdCwkeixEWXQ9TSgoKT0+e0xZdCgpfSk7ZnVuY3Rpb24gT1l0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6SWMoYyxoKX0se2k6Zy0yLHg6SWModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpJYyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkljKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpJYyhjLGgpfSx7aTpnLTIseDpJYyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBHbnQsV250LHpZdD1NKCgpPT57anooKTtEWXQoKTtHbnQ9T1l0KFJZdCwicHgsICIsInB4KSIsImRlZykiKSxXbnQ9T1l0KE5ZdCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gQll0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIFFOZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiB0RGUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIGpudChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8Sk5lKWY9TWF0aC5sb2cocy9pKS9DQSxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKENBKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK0ZZdCp1KS8oMippKlludCpwKSxnPShzKnMtaSppLUZZdCp1KS8oMipzKlludCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykvQ0EsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1CWXQoXyksQz1pLyhZbnQqcCkqKFMqdERlKENBKmIrXyktUU5lKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0JZdChDQSpiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgQ0EsWW50LEZZdCxKTmUsSFl0PU0oKCk9PntDQT1NYXRoLlNRUlQyLFludD0yLEZZdD00LEpOZT0xZS0xMn0pO3ZhciBBQT1NKCgpPT57anooKTtQWXQoKTt6WXQoKTtIWXQoKTtBWXQoKX0pO2Z1bmN0aW9uIGxTKCl7cmV0dXJuIEF2fHwocVl0KGVEZSksQXY9a0Eubm93KCkrSnopfWZ1bmN0aW9uIGVEZSgpe0F2PTB9ZnVuY3Rpb24gUkEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFF6KGUsdCxyKXt2YXIgbj1uZXcgUkE7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBHWXQoKXtsUygpLCsrc1M7Zm9yKHZhciBlPUt6LHQ7ZTspKHQ9QXYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLXNTfWZ1bmN0aW9uIFZZdCgpe0F2PShaej1rQS5ub3coKSkrSnosc1M9SUE9MDt0cnl7R1l0KCl9ZmluYWxseXtzUz0wLG5EZSgpLEF2PTB9fWZ1bmN0aW9uIHJEZSgpe3ZhciBlPWtBLm5vdygpLHQ9ZS1aejt0PlVZdCYmKEp6LT10LFp6PWUpfWZ1bmN0aW9uIG5EZSgpe2Zvcih2YXIgZSx0PUt6LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOkt6PXIpO0xBPWUsWG50KG4pfWZ1bmN0aW9uIFhudChlKXtpZighc1Mpe0lBJiYoSUE9Y2xlYXJUaW1lb3V0KElBKSk7dmFyIHQ9ZS1Bdjt0PjI0PyhlPDEvMCYmKElBPXNldFRpbWVvdXQoVll0LGUta0Eubm93KCktSnopKSxQQSYmKFBBPWNsZWFySW50ZXJ2YWwoUEEpKSk6KFBBfHwoWno9a0Eubm93KCksUEE9c2V0SW50ZXJ2YWwockRlLFVZdCkpLHNTPTEscVl0KFZZdCkpfX12YXIgc1MsSUEsUEEsVVl0LEt6LExBLFp6LEF2LEp6LGtBLHFZdCwkbnQ9TSgoKT0+e3NTPTAsSUE9MCxQQT0wLFVZdD0xZTMsWno9MCxBdj0wLEp6PTAsa0E9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUscVl0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O1JBLnByb3RvdHlwZT1Rei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJBLHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9sUygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmTEEhPT10aGlzJiYoTEE/TEEuX25leHQ9dGhpczpLej10aGlzLExBPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsWG50KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFhudCgpKX19fSk7ZnVuY3Rpb24gdEYoZSx0LHIpe3ZhciBuPW5ldyBSQTtyZXR1cm4gdD10PT1udWxsPzA6K3Qsbi5yZXN0YXJ0KGZ1bmN0aW9uKGkpe24uc3RvcCgpLGUoaSt0KX0sdCxyKSxufXZhciBXWXQ9TSgoKT0+eyRudCgpfSk7dmFyIEtudD1NKCgpPT57JG50KCk7V1l0KCl9KTtmdW5jdGlvbiBHZyhlLHQscixuLGksbyl7dmFyIGE9ZS5fX3RyYW5zaXRpb247aWYoIWEpZS5fX3RyYW5zaXRpb249e307ZWxzZSBpZihyIGluIGEpcmV0dXJuO2FEZShlLHIse25hbWU6dCxpbmRleDpuLGdyb3VwOmksb246aURlLHR3ZWVuOm9EZSx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpqWXR9KX1mdW5jdGlvbiBEQShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5qWXQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiBKYShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5lRil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiBvbyhlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9clt0XSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIGFEZShlLHQscil7dmFyIG49ZS5fX3RyYW5zaXRpb24saTtuW3RdPXIsci50aW1lcj1ReihvLDAsci50aW1lKTtmdW5jdGlvbiBvKGMpe3Iuc3RhdGU9Wm50LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09Wm50KXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09ZUYpcmV0dXJuIHRGKGEpO3Auc3RhdGU9PT1ZWXQ/KHAuc3RhdGU9TkEscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1OQSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHRGKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PWVGJiYoci5zdGF0ZT1ZWXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1yRixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09ckYpe2ZvcihyLnN0YXRlPWVGLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPW5GLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PW5GJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9TkEsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIGlEZSxvRGUsall0LFpudCxyRixlRixZWXQsbkYsTkEsTHM9TSgoKT0+e21udCgpO0tudCgpO2lEZT12QSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxvRGU9W10sall0PTAsWm50PTEsckY9MixlRj0zLFlZdD00LG5GPTUsTkE9Nn0pO2Z1bmN0aW9uIFB2KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpLG89ITAsYTtpZighIXIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGEgaW4gcil7aWYoKG49clthXSkubmFtZSE9PXQpe289ITE7Y29udGludWV9aT1uLnN0YXRlPnJGJiZuLnN0YXRlPG5GLG4uc3RhdGU9TkEsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgSm50PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gWFl0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtQdih0aGlzLGUpfSl9dmFyICRZdD1NKCgpPT57Sm50KCl9KTtmdW5jdGlvbiBzRGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUphKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBsRGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUphKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIEtZdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPW9vKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3NEZTpsRGUpKHIsZSx0KSl9ZnVuY3Rpb24gY1MoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1KYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIG9vKGksbikudmFsdWVbdF19fXZhciBPQT1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGlGKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9JYzp0IGluc3RhbmNlb2YgcWc/WXo6KHI9cWcodCkpPyh0PXIsWXopOlZudCkoZSx0KX12YXIgUW50PU0oKCk9PntEbnQoKTtBQSgpfSk7ZnVuY3Rpb24gY0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiB1RGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBoRGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gZkRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBwRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBkRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIFpZdChlLHQpe3ZhciByPWhkKGUpLG49cj09PSJ0cmFuc2Zvcm0iP1dudDppRjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSx0eXBlb2YgdD09ImZ1bmN0aW9uIj8oci5sb2NhbD9kRGU6cERlKShyLG4sY1ModGhpcywiYXR0ci4iK2UsdCkpOnQ9PW51bGw/KHIubG9jYWw/dURlOmNEZSkocik6KHIubG9jYWw/ZkRlOmhEZSkocixuLHQpKX12YXIgSll0PU0oKCk9PntBQSgpO0lzKCk7T0EoKTtRbnQoKX0pO2Z1bmN0aW9uIG1EZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gZ0RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gX0RlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmZ0RlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB5RGUoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZtRGUoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIFFZdChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49aGQoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9fRGU6eURlKShuLHQpKX12YXIgdGp0PU0oKCk9PntJcygpfSk7ZnVuY3Rpb24gdkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHhEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT10fX1mdW5jdGlvbiBlanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj92RGU6eERlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kZWxheX12YXIgcmp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gYkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHdEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBuanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9iRGU6d0RlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn12YXIgaWp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gU0RlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0phKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBvanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKFNEZSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5lYXNlfXZhciBhanQ9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBzanQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBkYShuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGxqdD1NKCgpPT57SXMoKTtkZCgpfSk7ZnVuY3Rpb24gY2p0KGUpe2lmKGUuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBkYShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIHVqdD1NKCgpPT57ZGQoKX0pO2Z1bmN0aW9uIE1EZShlKXtyZXR1cm4oZSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciByPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD10LnNsaWNlKDAscikpLCF0fHx0PT09InN0YXJ0In0pfWZ1bmN0aW9uIEVEZShlLHQscil7dmFyIG4saSxvPU1EZSh0KT9EQTpKYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsZSkscz1hLm9uO3MhPT1uJiYoaT0obj1zKS5jb3B5KCkpLm9uKHQsciksYS5vbj1pfX1mdW5jdGlvbiBoanQoZSx0KXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP29vKHRoaXMubm9kZSgpLHIpLm9uLm9uKGUpOnRoaXMuZWFjaChFRGUocixlLHQpKX12YXIgZmp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gVERlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBwanQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsVERlKHRoaXMuX2lkKSl9dmFyIGRqdD1NKCgpPT57fSk7ZnVuY3Rpb24gbWp0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Q3YoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHZyhjW2ZdLHQscixmLGMsb28odSxyKSkpO3JldHVybiBuZXcgZGEobyx0aGlzLl9wYXJlbnRzLHQscil9dmFyIGdqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBfanQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSxjPWwubGVuZ3RoLHUsaD0wO2g8YzsrK2gpaWYodT1sW2hdKXtmb3IodmFyIGY9ZS5jYWxsKHUsdS5fX2RhdGFfXyxoLGwpLHAsZD1vbyh1LHIpLGc9MCxfPWYubGVuZ3RoO2c8XzsrK2cpKHA9ZltnXSkmJkdnKHAsdCxyLGcsZixkKTtvLnB1c2goZiksYS5wdXNoKHUpfXJldHVybiBuZXcgZGEobyxhLHQscil9dmFyIHlqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiB2anQoKXtyZXR1cm4gbmV3IENEZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9dmFyIENEZSx4anQ9TSgoKT0+e0lzKCk7Q0RlPWZkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcn0pO2Z1bmN0aW9uIEFEZShlLHQpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1VZyh0aGlzLGUpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSksVWcodGhpcyxlKSk7cmV0dXJuIG89PT1hP251bGw6bz09PXImJmE9PT1uP2k6aT10KHI9byxuPWEpfX1mdW5jdGlvbiBianQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gUERlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1VZyh0aGlzLGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gSURlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9VWcodGhpcyxlKSxzPXIodGhpcyksbD1zKyIiO3JldHVybiBzPT1udWxsJiYobD1zPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFVnKHRoaXMsZSkpKSxhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSl9fWZ1bmN0aW9uIExEZShlLHQpe3ZhciByLG4saSxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUphKHRoaXMsZSksYz1sLm9uLHU9bC52YWx1ZVtvXT09bnVsbD9zfHwocz1ianQodCkpOnZvaWQgMDsoYyE9PXJ8fGkhPT11KSYmKG49KHI9YykuY29weSgpKS5vbihhLGk9dSksbC5vbj1ufX1mdW5jdGlvbiB3anQoZSx0LHIpe3ZhciBuPShlKz0iIik9PSJ0cmFuc2Zvcm0iP0dudDppRjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxBRGUoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsYmp0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxJRGUoZSxuLGNTKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goTERlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxQRGUoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBTanQ9TSgoKT0+e0FBKCk7SXMoKTtMcygpO09BKCk7UW50KCl9KTtmdW5jdGlvbiBrRGUoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdC5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIFJEZShlLHQscil7dmFyIG4saTtmdW5jdGlvbiBvKCl7dmFyIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYobj0oaT1hKSYma0RlKGUsYSxyKSksbn1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIE1qdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixSRGUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBFanQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5EZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIEREZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBUanQoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0REZShjUyh0aGlzLCJ0ZXh0IixlKSk6TkRlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBDanQ9TSgoKT0+e09BKCl9KTtmdW5jdGlvbiBPRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIHpEZShlKXt2YXIgdCxyO2Z1bmN0aW9uIG4oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJih0PShyPWkpJiZPRGUoaSkpLHR9cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiBBanQoZSl7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LHpEZShlKSl9dmFyIFBqdD1NKCgpPT57fSk7ZnVuY3Rpb24gSWp0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPW9GKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1vbyhsLHQpO0dnKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgZGEobix0aGlzLl9wYXJlbnRzLGUscil9dmFyIExqdD1NKCgpPT57ZGQoKTtMcygpfSk7ZnVuY3Rpb24ga2p0KCl7dmFyIGUsdCxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0taT09PTAmJm8oKX19O3IuZWFjaChmdW5jdGlvbigpe3ZhciBjPUphKHRoaXMsbiksdT1jLm9uO3UhPT1lJiYodD0oZT11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFJqdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGRhKGUsdCxyLG4pe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiB0aXQoZSl7cmV0dXJuIGZkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBvRigpe3JldHVybisrRkRlfXZhciBGRGUsdVMsZGQ9TSgoKT0+e0lzKCk7Sll0KCk7dGp0KCk7cmp0KCk7aWp0KCk7YWp0KCk7bGp0KCk7dWp0KCk7Zmp0KCk7ZGp0KCk7Z2p0KCk7eWp0KCk7eGp0KCk7U2p0KCk7RWp0KCk7Q2p0KCk7UGp0KCk7TGp0KCk7T0EoKTtSanQoKTtGRGU9MDt1Uz1mZC5wcm90b3R5cGU7ZGEucHJvdG90eXBlPXRpdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRhLHNlbGVjdDptanQsc2VsZWN0QWxsOl9qdCxmaWx0ZXI6c2p0LG1lcmdlOmNqdCxzZWxlY3Rpb246dmp0LHRyYW5zaXRpb246SWp0LGNhbGw6dVMuY2FsbCxub2Rlczp1Uy5ub2Rlcyxub2RlOnVTLm5vZGUsc2l6ZTp1Uy5zaXplLGVtcHR5OnVTLmVtcHR5LGVhY2g6dVMuZWFjaCxvbjpoanQsYXR0cjpaWXQsYXR0clR3ZWVuOlFZdCxzdHlsZTp3anQsc3R5bGVUd2VlbjpNanQsdGV4dDpUanQsdGV4dFR3ZWVuOkFqdCxyZW1vdmU6cGp0LHR3ZWVuOktZdCxkZWxheTplanQsZHVyYXRpb246bmp0LGVhc2U6b2p0LGVuZDpranR9fSk7ZnVuY3Rpb24gQkRlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIGVpdC50aW1lPWxTKCksZWl0O3JldHVybiByfWZ1bmN0aW9uIE5qdChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBkYT8odD1lLl9pZCxlPWUuX25hbWUpOih0PW9GKCksKHI9ZWl0KS50aW1lPWxTKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmR2cobCxlLHQsYyxhLHJ8fEJEZShsLHQpKTtyZXR1cm4gbmV3IGRhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciBlaXQsRGp0PU0oKCk9PntkZCgpO0xzKCk7SV8oKTtLbnQoKTtlaXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBPanQ9TSgoKT0+e0lzKCk7JFl0KCk7RGp0KCk7ZmQucHJvdG90eXBlLmludGVycnVwdD1YWXQ7ZmQucHJvdG90eXBlLnRyYW5zaXRpb249Tmp0fSk7dmFyIHpqdD1NKCgpPT57ZGQoKTtMcygpfSk7dmFyIEZqdD1NKCgpPT57T2p0KCk7ZGQoKTt6anQoKTtKbnQoKX0pO2Z1bmN0aW9uIHpBKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgQmp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByaXQoZSx0LHIpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy50cmFuc2Zvcm09cn12YXIgSGp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQZihlLHQscil7dGhpcy5rPWUsdGhpcy54PXQsdGhpcy55PXJ9ZnVuY3Rpb24gYUYoZSl7cmV0dXJuIGUuX196b29tfHxoU312YXIgaFMsbml0PU0oKCk9PntQZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBmLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBQZih0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IFBmKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07aFM9bmV3IFBmKDEsMCwwKTthRi5wcm90b3R5cGU9UGYucHJvdG90eXBlfSk7ZnVuY3Rpb24gc0YoKXtZci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmUygpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIFZqdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIEhEZSgpe3JldHVybiFZci5idXR0b259ZnVuY3Rpb24gVkRlKCl7dmFyIGU9dGhpcyx0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLHQ9ZS53aWR0aC5iYXNlVmFsLnZhbHVlLHI9ZS5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9ZS5jbGllbnRXaWR0aCxyPWUuY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3Qscl1dfWZ1bmN0aW9uIFVqdCgpe3JldHVybiB0aGlzLl9fem9vbXx8aFN9ZnVuY3Rpb24gVURlKCl7cmV0dXJuLVlyLmRlbHRhWSooWXIuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gcURlKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEdEZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gcWp0KCl7dmFyIGU9SERlLHQ9VkRlLHI9R0RlLG49VURlLGk9cURlLG89WzAsMS8wXSxhPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHM9MjUwLGw9am50LGM9W10sdT12QSgic3RhcnQiLCJ6b29tIiwiZW5kIiksaCxmLHA9NTAwLGQ9MTUwLGc9MDtmdW5jdGlvbiBfKFIpe1IucHJvcGVydHkoIl9fem9vbSIsVWp0KS5vbigid2hlZWwuem9vbSIsaykub24oIm1vdXNlZG93bi56b29tIixPKS5vbigiZGJsY2xpY2suem9vbSIsRCkuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEIpLm9uKCJ0b3VjaG1vdmUuem9vbSIsSSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsTCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfV8udHJhbnNmb3JtPWZ1bmN0aW9uKFIsRil7dmFyIHo9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSO3oucHJvcGVydHkoIl9fem9vbSIsVWp0KSxSIT09ej9TKFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Qyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RikuZW5kKCl9KX0sXy5zY2FsZUJ5PWZ1bmN0aW9uKFIsRil7Xy5zY2FsZVRvKFIsZnVuY3Rpb24oKXt2YXIgej10aGlzLl9fem9vbS5rLFU9dHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RjtyZXR1cm4geipVfSl9LF8uc2NhbGVUbz1mdW5jdGlvbihSLEYpe18udHJhbnNmb3JtKFIsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Yih6KSxaPVUuaW52ZXJ0KFcpLHJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkY7cmV0dXJuIHIoeCh5KFUscnQpLFcsWikseixhKX0pfSxfLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKFIsRix6KXtfLnRyYW5zZm9ybShSLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsdHlwZW9mIHo9PSJmdW5jdGlvbiI/ei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sXy50cmFuc2xhdGVUbz1mdW5jdGlvbihSLEYseil7Xy50cmFuc2Zvcm0oUixmdW5jdGlvbigpe3ZhciBVPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFc9dGhpcy5fX3pvb20sWj1iKFUpO3JldHVybiByKGhTLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iPy1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRix0eXBlb2Ygej09ImZ1bmN0aW9uIj8tei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXopLFUsYSl9KX07ZnVuY3Rpb24geShSLEYpe3JldHVybiBGPU1hdGgubWF4KG9bMF0sTWF0aC5taW4ob1sxXSxGKSksRj09PVIuaz9SOm5ldyBQZihGLFIueCxSLnkpfWZ1bmN0aW9uIHgoUixGLHope3ZhciBVPUZbMF0telswXSpSLmssVz1GWzFdLXpbMV0qUi5rO3JldHVybiBVPT09Ui54JiZXPT09Ui55P1I6bmV3IFBmKFIuayxVLFcpfWZ1bmN0aW9uIGIoUil7cmV0dXJuWygrUlswXVswXSsgK1JbMV1bMF0pLzIsKCtSWzBdWzFdKyArUlsxXVsxXSkvMl19ZnVuY3Rpb24gUyhSLEYseil7Ui5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtDKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe0ModGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIFU9dGhpcyxXPWFyZ3VtZW50cyxaPUMoVSxXKSxydD10LmFwcGx5KFUsVyksb3Q9enx8YihydCksc3Q9TWF0aC5tYXgocnRbMV1bMF0tcnRbMF1bMF0scnRbMV1bMV0tcnRbMF1bMV0pLFN0PVUuX196b29tLGJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkoVSxXKTpGLE10PWwoU3QuaW52ZXJ0KG90KS5jb25jYXQoc3QvU3QuayksYnQuaW52ZXJ0KG90KS5jb25jYXQoc3QvYnQuaykpO3JldHVybiBmdW5jdGlvbihsdCl7aWYobHQ9PT0xKWx0PWJ0O2Vsc2V7dmFyIEt0PU10KGx0KSxfdD1zdC9LdFsyXTtsdD1uZXcgUGYoX3Qsb3RbMF0tS3RbMF0qX3Qsb3RbMV0tS3RbMV0qX3QpfVouem9vbShudWxsLGx0KX19KX1mdW5jdGlvbiBDKFIsRil7Zm9yKHZhciB6PTAsVT1jLmxlbmd0aCxXO3o8VTsrK3opaWYoKFc9Y1t6XSkudGhhdD09PVIpcmV0dXJuIFc7cmV0dXJuIG5ldyBQKFIsRil9ZnVuY3Rpb24gUChSLEYpe3RoaXMudGhhdD1SLHRoaXMuYXJncz1GLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD10LmFwcGx5KFIsRil9UC5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLmluZGV4PWMucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihSLEYpe3JldHVybiB0aGlzLm1vdXNlJiZSIT09Im1vdXNlIiYmKHRoaXMubW91c2VbMV09Ri5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZSIT09InRvdWNoIiYmKHRoaXMudG91Y2gwWzFdPUYuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJlIhPT0idG91Y2giJiYodGhpcy50b3VjaDFbMV09Ri5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPUYsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuLS10aGlzLmFjdGl2ZT09PTAmJihjLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihSKXtUbnQobmV3IHJpdChfLFIsdGhpcy50aGF0Ll9fem9vbSksdS5hcHBseSx1LFtSLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIGsoKXtpZighZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9dGhpcy5fX3pvb20sej1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sRi5rKk1hdGgucG93KDIsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksVT1pUyh0aGlzKTtpZihSLndoZWVsKShSLm1vdXNlWzBdWzBdIT09VVswXXx8Ui5tb3VzZVswXVsxXSE9PVVbMV0pJiYoUi5tb3VzZVsxXT1GLmludmVydChSLm1vdXNlWzBdPVUpKSxjbGVhclRpbWVvdXQoUi53aGVlbCk7ZWxzZXtpZihGLms9PT16KXJldHVybjtSLm1vdXNlPVtVLEYuaW52ZXJ0KFUpXSxQdih0aGlzKSxSLnN0YXJ0KCl9ZlMoKSxSLndoZWVsPXNldFRpbWVvdXQoVyxkKSxSLnpvb20oIm1vdXNlIixyKHgoeShGLHopLFIubW91c2VbMF0sUi5tb3VzZVsxXSksUi5leHRlbnQsYSkpO2Z1bmN0aW9uIFcoKXtSLndoZWVsPW51bGwsUi5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKGZ8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIFI9Qyh0aGlzLGFyZ3VtZW50cyksRj1wZChZci52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLFosITApLm9uKCJtb3VzZXVwLnpvb20iLHJ0LCEwKSx6PWlTKHRoaXMpLFU9WXIuY2xpZW50WCxXPVlyLmNsaWVudFk7SW50KFlyLnZpZXcpLHNGKCksUi5tb3VzZT1beix0aGlzLl9fem9vbS5pbnZlcnQoeildLFB2KHRoaXMpLFIuc3RhcnQoKTtmdW5jdGlvbiBaKCl7aWYoZlMoKSwhUi5tb3ZlZCl7dmFyIG90PVlyLmNsaWVudFgtVSxzdD1Zci5jbGllbnRZLVc7Ui5tb3ZlZD1vdCpvdCtzdCpzdD5nfVIuem9vbSgibW91c2UiLHIoeChSLnRoYXQuX196b29tLFIubW91c2VbMF09aVMoUi50aGF0KSxSLm1vdXNlWzFdKSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gcnQoKXtGLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLExudChZci52aWV3LFIubW92ZWQpLGZTKCksUi5lbmQoKX19ZnVuY3Rpb24gRCgpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBSPXRoaXMuX196b29tLEY9aVModGhpcyksej1SLmludmVydChGKSxVPVIuayooWXIuc2hpZnRLZXk/LjU6MiksVz1yKHgoeShSLFUpLEYseiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7ZlMoKSxzPjA/cGQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoUyxXLEYpOnBkKHRoaXMpLmNhbGwoXy50cmFuc2Zvcm0sVyl9fWZ1bmN0aW9uIEIoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHosVT1GLmxlbmd0aCxXLFoscnQ7Zm9yKHNGKCksVz0wO1c8VTsrK1cpWj1GW1ddLHJ0PUh6KHRoaXMsRixaLmlkZW50aWZpZXIpLHJ0PVtydCx0aGlzLl9fem9vbS5pbnZlcnQocnQpLFouaWRlbnRpZmllcl0sUi50b3VjaDA/Ui50b3VjaDF8fChSLnRvdWNoMT1ydCk6KFIudG91Y2gwPXJ0LHo9ITApO2lmKGgmJihoPWNsZWFyVGltZW91dChoKSwhUi50b3VjaDEpKXtSLmVuZCgpLHJ0PXBkKHRoaXMpLm9uKCJkYmxjbGljay56b29tIikscnQmJnJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm59eiYmKGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0scCksUHYodGhpcyksUi5zdGFydCgpKX19ZnVuY3Rpb24gSSgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFcsWixydDtmb3IoZlMoKSxoJiYoaD1jbGVhclRpbWVvdXQoaCkpLFU9MDtVPHo7KytVKVc9RltVXSxaPUh6KHRoaXMsRixXLmlkZW50aWZpZXIpLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9SLnRvdWNoMFswXT1aOlIudG91Y2gxJiZSLnRvdWNoMVsyXT09PVcuaWRlbnRpZmllciYmKFIudG91Y2gxWzBdPVopO2lmKFc9Ui50aGF0Ll9fem9vbSxSLnRvdWNoMSl7dmFyIG90PVIudG91Y2gwWzBdLHN0PVIudG91Y2gwWzFdLFN0PVIudG91Y2gxWzBdLGJ0PVIudG91Y2gxWzFdLE10PShNdD1TdFswXS1vdFswXSkqTXQrKE10PVN0WzFdLW90WzFdKSpNdCxsdD0obHQ9YnRbMF0tc3RbMF0pKmx0KyhsdD1idFsxXS1zdFsxXSkqbHQ7Vz15KFcsTWF0aC5zcXJ0KE10L2x0KSksWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl0scnQ9WyhzdFswXStidFswXSkvMiwoc3RbMV0rYnRbMV0pLzJdfWVsc2UgaWYoUi50b3VjaDApWj1SLnRvdWNoMFswXSxydD1SLnRvdWNoMFsxXTtlbHNlIHJldHVybjtSLnpvb20oInRvdWNoIixyKHgoVyxaLHJ0KSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gTCgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFc7Zm9yKHNGKCksZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0scCksVT0wO1U8ejsrK1UpVz1GW1VdLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9kZWxldGUgUi50b3VjaDA6Ui50b3VjaDEmJlIudG91Y2gxWzJdPT09Vy5pZGVudGlmaWVyJiZkZWxldGUgUi50b3VjaDE7Ui50b3VjaDEmJiFSLnRvdWNoMCYmKFIudG91Y2gwPVIudG91Y2gxLGRlbGV0ZSBSLnRvdWNoMSksUi50b3VjaDA/Ui50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KFIudG91Y2gwWzBdKTpSLmVuZCgpfXJldHVybiBfLndoZWVsRGVsdGE9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSgrUiksXyk6bn0sXy5maWx0ZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSghIVIpLF8pOmV9LF8udG91Y2hhYmxlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6ekEoISFSKSxfKTppfSxfLmV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SOnpBKFtbK1JbMF1bMF0sK1JbMF1bMV1dLFsrUlsxXVswXSwrUlsxXVsxXV1dKSxfKTp0fSxfLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvWzBdPStSWzBdLG9bMV09K1JbMV0sXyk6W29bMF0sb1sxXV19LF8udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhWzBdWzBdPStSWzBdWzBdLGFbMV1bMF09K1JbMV1bMF0sYVswXVsxXT0rUlswXVsxXSxhWzFdWzFdPStSWzFdWzFdLF8pOltbYVswXVswXSxhWzBdWzFdXSxbYVsxXVswXSxhWzFdWzFdXV19LF8uY29uc3RyYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVIsXyk6cn0sXy5kdXJhdGlvbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rUixfKTpzfSxfLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVIsXyk6bH0sXy5vbj1mdW5jdGlvbigpe3ZhciBSPXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiBSPT09dT9fOlJ9LF8uY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0oUj0rUikqUixfKTpNYXRoLnNxcnQoZyl9LF99dmFyIEdqdD1NKCgpPT57bW50KCk7Y1l0KCk7QUEoKTtJcygpO0ZqdCgpO0JqdCgpO0hqdCgpO25pdCgpO1ZqdCgpfSk7dmFyIFdqdD1NKCgpPT57R2p0KCk7bml0KCl9KTt2YXIgTXI9e307S3MoTXIse2FjdGl2ZTooKT0+bUd0LGFyYzooKT0+Z0Z0LGFyZWE6KCk9PmI3LGFyZWFSYWRpYWw6KCk9PmtldCxhc2NlbmRpbmc6KCk9Pl9jLGF4aXNCb3R0b206KCk9PlpNdCxheGlzTGVmdDooKT0+Sk10LGF4aXNSaWdodDooKT0+S010LGF4aXNUb3A6KCk9PiRNdCxiaXNlY3Q6KCk9PnNSLGJpc2VjdExlZnQ6KCk9PnNNdCxiaXNlY3RSaWdodDooKT0+eCQsYmlzZWN0b3I6KCk9PmFSLGJydXNoOigpPT55Q3QsYnJ1c2hTZWxlY3Rpb246KCk9Pm1DdCxicnVzaFg6KCk9PmdDdCxicnVzaFk6KCk9Pl9DdCxjaG9yZDooKT0+VUN0LGNsaWVudFBvaW50OigpPT5EZyxjbHVzdGVyOigpPT5HTHQsY29sb3I6KCk9PngyLGNyZWF0ZTooKT0+dEZ0LGNyZWF0b3I6KCk9Pk5nLGNyb3NzOigpPT5jTXQsY3N2OigpPT5wTnQsY3N2Rm9ybWF0OigpPT55UHQsY3N2Rm9ybWF0Um93czooKT0+dlB0LGNzdlBhcnNlOigpPT5nUHQsY3N2UGFyc2VSb3dzOigpPT5fUHQsY3ViZWhlbGl4OigpPT51TixjdXJ2ZUJhc2lzOigpPT5PRnQsY3VydmVCYXNpc0Nsb3NlZDooKT0+RkZ0LGN1cnZlQmFzaXNPcGVuOigpPT5WRnQsY3VydmVCdW5kbGU6KCk9PkdGdCxjdXJ2ZUNhcmRpbmFsOigpPT5ZRnQsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+akZ0LGN1cnZlQ2FyZGluYWxPcGVuOigpPT5YRnQsY3VydmVDYXRtdWxsUm9tOigpPT5LRnQsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5KRnQsY3VydmVDYXRtdWxsUm9tT3BlbjooKT0+ZUJ0LGN1cnZlTGluZWFyOigpPT5GZyxjdXJ2ZUxpbmVhckNsb3NlZDooKT0+aUJ0LGN1cnZlTW9ub3RvbmVYOigpPT5oQnQsY3VydmVNb25vdG9uZVk6KCk9PmZCdCxjdXJ2ZU5hdHVyYWw6KCk9PmdCdCxjdXJ2ZVN0ZXA6KCk9PnlCdCxjdXJ2ZVN0ZXBBZnRlcjooKT0+eEJ0LGN1cnZlU3RlcEJlZm9yZTooKT0+dkJ0LGN1c3RvbUV2ZW50OigpPT5YenQsZGVzY2VuZGluZzooKT0+aE10LGRldmlhdGlvbjooKT0+Y1IsZGlzcGF0Y2g6KCk9PmtBdCxkcmFnOigpPT5oUHQsZHJhZ0Rpc2FibGU6KCk9PkVOLGRyYWdFbmFibGU6KCk9PlROLGRzdkZvcm1hdDooKT0+dzIsZWFzZUJhY2s6KCk9Pk9aLGVhc2VCYWNrSW46KCk9PkpQdCxlYXNlQmFja0luT3V0OigpPT5PWixlYXNlQmFja091dDooKT0+UVB0LGVhc2VCb3VuY2U6KCk9PlMyLGVhc2VCb3VuY2VJbjooKT0+JFB0LGVhc2VCb3VuY2VJbk91dDooKT0+S1B0LGVhc2VCb3VuY2VPdXQ6KCk9PlMyLGVhc2VDaXJjbGU6KCk9PlJaLGVhc2VDaXJjbGVJbjooKT0+WVB0LGVhc2VDaXJjbGVJbk91dDooKT0+UlosZWFzZUNpcmNsZU91dDooKT0+alB0LGVhc2VDdWJpYzooKT0+QVosZWFzZUN1YmljSW46KCk9PmtQdCxlYXNlQ3ViaWNJbk91dDooKT0+QVosZWFzZUN1YmljT3V0OigpPT5SUHQsZWFzZUVsYXN0aWM6KCk9PkJaLGVhc2VFbGFzdGljSW46KCk9PmU2dCxlYXNlRWxhc3RpY0luT3V0OigpPT5yNnQsZWFzZUVsYXN0aWNPdXQ6KCk9PkJaLGVhc2VFeHA6KCk9PmtaLGVhc2VFeHBJbjooKT0+cVB0LGVhc2VFeHBJbk91dDooKT0+a1osZWFzZUV4cE91dDooKT0+R1B0LGVhc2VMaW5lYXI6KCk9PkNQdCxlYXNlUG9seTooKT0+SVosZWFzZVBvbHlJbjooKT0+RFB0LGVhc2VQb2x5SW5PdXQ6KCk9PklaLGVhc2VQb2x5T3V0OigpPT5PUHQsZWFzZVF1YWQ6KCk9PkNaLGVhc2VRdWFkSW46KCk9PlBQdCxlYXNlUXVhZEluT3V0OigpPT5DWixlYXNlUXVhZE91dDooKT0+SVB0LGVhc2VTaW46KCk9PkxaLGVhc2VTaW5JbjooKT0+SFB0LGVhc2VTaW5Jbk91dDooKT0+TFosZWFzZVNpbk91dDooKT0+VlB0LGVudHJpZXM6KCk9PmhBdCxldmVudDooKT0+UHUsZXh0ZW50OigpPT51Uixmb3JjZUNlbnRlcjooKT0+bzZ0LGZvcmNlQ29sbGlkZTooKT0+RjZ0LGZvcmNlTGluazooKT0+ajZ0LGZvcmNlTWFueUJvZHk6KCk9PmxJdCxmb3JjZVJhZGlhbDooKT0+dUl0LGZvcmNlU2ltdWxhdGlvbjooKT0+c0l0LGZvcmNlWDooKT0+Zkl0LGZvcmNlWTooKT0+ZEl0LGZvcm1hdDooKT0+ckosZm9ybWF0RGVmYXVsdExvY2FsZTooKT0+V04sZm9ybWF0TG9jYWxlOigpPT5xTixmb3JtYXRQcmVmaXg6KCk9Pm5KLGZvcm1hdFNwZWNpZmllcjooKT0+THksZ2VvQWxiZXJzOigpPT5ERCxnZW9BbGJlcnNVc2E6KCk9PnZMdCxnZW9BcmVhOigpPT5VSXQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhOigpPT5iTHQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT56RCxnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+U0x0LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OigpPT5GRCxnZW9Cb3VuZHM6KCk9PktJdCxnZW9DZW50cm9pZDooKT0+bjl0LGdlb0NpcmNsZTooKT0+dTl0LGdlb0NsaXBBbnRpbWVyaWRpYW46KCk9PnpULGdlb0NsaXBDaXJjbGU6KCk9Pl9ELGdlb0NsaXBFeHRlbnQ6KCk9PlI5dCxnZW9DbGlwUmVjdGFuZ2xlOigpPT5RcCxnZW9Db25pY0NvbmZvcm1hbDooKT0+VEx0LGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT5mUSxnZW9Db25pY0VxdWFsQXJlYTooKT0+VXksZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PmNRLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PlBMdCxnZW9Db25pY0VxdWlkaXN0YW50UmF3OigpPT5kUSxnZW9Db250YWluczooKT0+Vjl0LGdlb0Rpc3RhbmNlOigpPT5CeSxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9PkFMdCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9Pkd5LGdlb0dub21vbmljOigpPT5MTHQsZ2VvR25vbW9uaWNSYXc6KCk9PlZELGdlb0dyYXRpY3VsZTooKT0+U0QsZ2VvR3JhdGljdWxlMTA6KCk9Plc5dCxnZW9JZGVudGl0eTooKT0+Ukx0LGdlb0ludGVycG9sYXRlOigpPT5qOXQsZ2VvTGVuZ3RoOigpPT5iRCxnZW9NZXJjYXRvcjooKT0+RUx0LGdlb01lcmNhdG9yUmF3OigpPT5xeSxnZW9OYXR1cmFsRWFydGgxOigpPT5ETHQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+cUQsZ2VvT3J0aG9ncmFwaGljOigpPT56THQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5HRCxnZW9QYXRoOigpPT5mTHQsZ2VvUHJvamVjdGlvbjooKT0+ZW8sZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9PllULGdlb1JvdGF0aW9uOigpPT5sRCxnZW9TdGVyZW9ncmFwaGljOigpPT5CTHQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+V0QsZ2VvU3RyZWFtOigpPT5NbyxnZW9UcmFuc2Zvcm06KCk9PmRMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PlZMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PllELGhjbDooKT0+aVosaGllcmFyY2h5OigpPT5qVCxoaXN0b2dyYW06KCk9PnhNdCxoc2w6KCk9PlpLLGh0bWw6KCk9Pm9OdCxpbnRlcnBvbGF0ZTooKT0+WjIsaW50ZXJwb2xhdGVBcnJheTooKT0+Zk8saW50ZXJwb2xhdGVCYXNpczooKT0+Y08saW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDooKT0+aE8saW50ZXJwb2xhdGVDb29sOigpPT5FN3QsaW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PnE4dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6KCk9Pnc3dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc6KCk9Pkc4dCxpbnRlcnBvbGF0ZURhdGU6KCk9PmRPLGludGVycG9sYXRlSGNsOigpPT5COHQsaW50ZXJwb2xhdGVIY2xMb25nOigpPT5IOHQsaW50ZXJwb2xhdGVIc2w6KCk9Pk44dCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9PkQ4dCxpbnRlcnBvbGF0ZUluZmVybm86KCk9Pkk3dCxpbnRlcnBvbGF0ZUxhYjooKT0+JFEsaW50ZXJwb2xhdGVNYWdtYTooKT0+UDd0LGludGVycG9sYXRlTnVtYmVyOigpPT5BcyxpbnRlcnBvbGF0ZU9iamVjdDooKT0+bU8saW50ZXJwb2xhdGVQbGFzbWE6KCk9Pkw3dCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PlQ3dCxpbnRlcnBvbGF0ZVJnYjooKT0+ZUMsaW50ZXJwb2xhdGVSZ2JCYXNpczooKT0+bTh0LGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pmc4dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5fOHQsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PmdPLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5UOHQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PkM4dCxpbnRlcnBvbGF0ZVZpcmlkaXM6KCk9PkE3dCxpbnRlcnBvbGF0ZVdhcm06KCk9Pk03dCxpbnRlcnBvbGF0ZVpvb206KCk9Pkw4dCxpbnRlcnJ1cHQ6KCk9PmR6LGludGVydmFsOigpPT5FVnQsaXNvRm9ybWF0OigpPT5nVnQsaXNvUGFyc2U6KCk9Pl9WdCxqc29uOigpPT5zTnQsa2V5czooKT0+c0F0LGxhYjooKT0+bE4sbGluZTooKT0+UncsbGluZVJhZGlhbDooKT0+SWV0LGxpbmtIb3Jpem9udGFsOigpPT5DRnQsbGlua1JhZGlhbDooKT0+UEZ0LGxpbmtWZXJ0aWNhbDooKT0+QUZ0LGxvY2FsOigpPT5tNyxtYXA6KCk9PmJ5LG1hdGNoZXI6KCk9PnU3LG1heDooKT0+VE10LG1lYW46KCk9PkFNdCxtZWRpYW46KCk9PklNdCxtZXJnZTooKT0+a010LG1pbjooKT0+bVIsbW91c2U6KCk9Pm5GdCxuYW1lc3BhY2U6KCk9Pk13LG5hbWVzcGFjZXM6KCk9PkVDLG5lc3Q6KCk9PnJBdCxub3c6KCk9Pll3LHBhY2s6KCk9PlRrdCxwYWNrRW5jbG9zZTooKT0+JEQscGFja1NpYmxpbmdzOigpPT53a3QscGFpcnM6KCk9PmxNdCxwYXJ0aXRpb246KCk9PkFrdCxwYXRoOigpPT5LOHQscGVybXV0ZTooKT0+Tk10LHBpZTooKT0+U0Z0LHBvaW50UmFkaWFsOigpPT5mdixwb2x5Z29uQXJlYTooKT0+UTh0LHBvbHlnb25DZW50cm9pZDooKT0+ZVJ0LHBvbHlnb25Db250YWluczooKT0+bFJ0LHBvbHlnb25IdWxsOigpPT5hUnQscG9seWdvbkxlbmd0aDooKT0+dVJ0LHByZWNpc2lvbkZpeGVkOigpPT5BSXQscHJlY2lzaW9uUHJlZml4OigpPT5JSXQscHJlY2lzaW9uUm91bmQ6KCk9PmtJdCxxdWFkdHJlZTooKT0+eE8scXVhbnRpbGU6KCk9PmR5LHF1YW50aXplOigpPT5ZOHQscXVldWU6KCk9PndPLHJhZGlhbEFyZWE6KCk9PmtldCxyYWRpYWxMaW5lOigpPT5JZXQscmFuZG9tQmF0ZXM6KCk9PnROdCxyYW5kb21FeHBvbmVudGlhbDooKT0+ck50LHJhbmRvbUlyd2luSGFsbDooKT0+TU8scmFuZG9tTG9nTm9ybWFsOigpPT5KUnQscmFuZG9tTm9ybWFsOigpPT5TTyxyYW5kb21Vbmlmb3JtOigpPT5LUnQscmFuZ2U6KCk9PmhSLHJlcXVlc3Q6KCk9PkoyLHJnYjooKT0+S0sscmliYm9uOigpPT5LQ3Qsc2NhbGVCYW5kOigpPT5jQyxzY2FsZUlkZW50aXR5OigpPT5xTyxzY2FsZUltcGxpY2l0OigpPT5rTyxzY2FsZUxpbmVhcjooKT0+VU8sc2NhbGVMb2c6KCk9PldPLHNjYWxlT3JkaW5hbDooKT0+bncsc2NhbGVQb2ludDooKT0+WU50LHNjYWxlUG93OigpPT5fQyxzY2FsZVF1YW50aWxlOigpPT5ZTyxzY2FsZVF1YW50aXplOigpPT5qTyxzY2FsZVNlcXVlbnRpYWw6KCk9Pmk3LHNjYWxlU3FydDooKT0+YU90LHNjYWxlVGhyZXNob2xkOigpPT5YTyxzY2FsZVRpbWU6KCk9Pmg3dCxzY2FsZVV0YzooKT0+Zjd0LHNjYW46KCk9Pk9NdCxzY2hlbWVDYXRlZ29yeTEwOigpPT5kN3Qsc2NoZW1lQ2F0ZWdvcnkyMDooKT0+eDd0LHNjaGVtZUNhdGVnb3J5MjBiOigpPT5nN3Qsc2NoZW1lQ2F0ZWdvcnkyMGM6KCk9Pnk3dCxzZWxlY3Q6KCk9PmQ3LHNlbGVjdEFsbDooKT0+b0Z0LHNlbGVjdGlvbjooKT0+UXp0LHNlbGVjdG9yOigpPT5FdyxzZWxlY3RvckFsbDooKT0+Yzcsc2V0OigpPT5vQXQsc2h1ZmZsZTooKT0+Rk10LHN0YWNrOigpPT53QnQsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PlRCdCxzdGFja09mZnNldEV4cGFuZDooKT0+TUJ0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+UnUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5BQnQsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PklCdCxzdGFja09yZGVyQXNjZW5kaW5nOigpPT5ENyxzdGFja09yZGVyRGVzY2VuZGluZzooKT0+a0J0LHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9Pk5CdCxzdGFja09yZGVyTm9uZTooKT0+TnUsc3RhY2tPcmRlclJldmVyc2U6KCk9Pk9CdCxzdHJhdGlmeTooKT0+a2t0LHN0eWxlOigpPT5fZXQsc3VtOigpPT5ITXQsc3ltYm9sOigpPT5ORnQsc3ltYm9sQ2lyY2xlOigpPT5SQyxzeW1ib2xDcm9zczooKT0+Uzcsc3ltYm9sRGlhbW9uZDooKT0+TTcsc3ltYm9sU3F1YXJlOigpPT5UNyxzeW1ib2xTdGFyOigpPT5FNyxzeW1ib2xUcmlhbmdsZTooKT0+Qzcsc3ltYm9sV3llOigpPT5BNyxzeW1ib2xzOigpPT5SRnQsdGV4dDooKT0+Y050LHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM6KCk9PndNdCx0aHJlc2hvbGRTY290dDooKT0+TU10LHRocmVzaG9sZFN0dXJnZXM6KCk9PnBSLHRpY2tJbmNyZW1lbnQ6KCk9PmskLHRpY2tTdGVwOigpPT5mUix0aWNrczooKT0+dk10LHRpbWVEYXk6KCk9PlpCdCx0aW1lRGF5czooKT0+SkJ0LHRpbWVGb3JtYXQ6KCk9PndydCx0aW1lRm9ybWF0RGVmYXVsdExvY2FsZTooKT0+WDcsdGltZUZvcm1hdExvY2FsZTooKT0+WUMsdGltZUZyaWRheTooKT0+b3J0LHRpbWVGcmlkYXlzOigpPT5pSHQsdGltZUhvdXI6KCk9PmpCdCx0aW1lSG91cnM6KCk9PlhCdCx0aW1lSW50ZXJ2YWw6KCk9PlNyLHRpbWVNaWxsaXNlY29uZDooKT0+WmV0LHRpbWVNaWxsaXNlY29uZHM6KCk9PkpldCx0aW1lTWludXRlOigpPT5xQnQsdGltZU1pbnV0ZXM6KCk9PkdCdCx0aW1lTW9uZGF5OigpPT5lcnQsdGltZU1vbmRheXM6KCk9PnRIdCx0aW1lTW9udGg6KCk9PmxIdCx0aW1lTW9udGhzOigpPT5jSHQsdGltZVBhcnNlOigpPT5TcnQsdGltZVNhdHVyZGF5OigpPT5hcnQsdGltZVNhdHVyZGF5czooKT0+b0h0LHRpbWVTZWNvbmQ6KCk9PlFldCx0aW1lU2Vjb25kczooKT0+dHJ0LHRpbWVTdW5kYXk6KCk9Pkg3LHRpbWVTdW5kYXlzOigpPT5zcnQsdGltZVRodXJzZGF5OigpPT5pcnQsdGltZVRodXJzZGF5czooKT0+bkh0LHRpbWVUdWVzZGF5OigpPT5ycnQsdGltZVR1ZXNkYXlzOigpPT5lSHQsdGltZVdlZG5lc2RheTooKT0+bnJ0LHRpbWVXZWRuZXNkYXlzOigpPT5ySHQsdGltZVdlZWs6KCk9Pkg3LHRpbWVXZWVrczooKT0+c3J0LHRpbWVZZWFyOigpPT5oSHQsdGltZVllYXJzOigpPT5mSHQsdGltZW91dDooKT0+U1Z0LHRpbWVyOigpPT5DcnQsdGltZXJGbHVzaDooKT0+QXJ0LHRvdWNoOigpPT5zRnQsdG91Y2hlczooKT0+Y0Z0LHRyYW5zaXRpb246KCk9PlR6LHRyYW5zcG9zZTooKT0+Z1IsdHJlZTooKT0+Tmt0LHRyZWVtYXA6KCk9Pk9rdCx0cmVlbWFwQmluYXJ5OigpPT5Ga3QsdHJlZW1hcERpY2U6KCk9PmxmLHRyZWVtYXBSZXNxdWFyaWZ5OigpPT5Va3QsdHJlZW1hcFNsaWNlOigpPT53Zyx0cmVlbWFwU2xpY2VEaWNlOigpPT5Ia3QsdHJlZW1hcFNxdWFyaWZ5OigpPT50Tyx0c3Y6KCk9Pm1OdCx0c3ZGb3JtYXQ6KCk9PlNQdCx0c3ZGb3JtYXRSb3dzOigpPT5NUHQsdHN2UGFyc2U6KCk9PmJQdCx0c3ZQYXJzZVJvd3M6KCk9PndQdCx1dGNEYXk6KCk9PlNIdCx1dGNEYXlzOigpPT5NSHQsdXRjRm9ybWF0OigpPT5qQyx1dGNGcmlkYXk6KCk9PnBydCx1dGNGcmlkYXlzOigpPT5JSHQsdXRjSG91cjooKT0+dkh0LHV0Y0hvdXJzOigpPT54SHQsdXRjTWlsbGlzZWNvbmQ6KCk9PlpldCx1dGNNaWxsaXNlY29uZHM6KCk9PkpldCx1dGNNaW51dGU6KCk9Pm1IdCx1dGNNaW51dGVzOigpPT5nSHQsdXRjTW9uZGF5OigpPT5jcnQsdXRjTW9uZGF5czooKT0+VEh0LHV0Y01vbnRoOigpPT5OSHQsdXRjTW9udGhzOigpPT5ESHQsdXRjUGFyc2U6KCk9PlhDLHV0Y1NhdHVyZGF5OigpPT5kcnQsdXRjU2F0dXJkYXlzOigpPT5MSHQsdXRjU2Vjb25kOigpPT5RZXQsdXRjU2Vjb25kczooKT0+dHJ0LHV0Y1N1bmRheTooKT0+VjcsdXRjU3VuZGF5czooKT0+bXJ0LHV0Y1RodXJzZGF5OigpPT5mcnQsdXRjVGh1cnNkYXlzOigpPT5QSHQsdXRjVHVlc2RheTooKT0+dXJ0LHV0Y1R1ZXNkYXlzOigpPT5DSHQsdXRjV2VkbmVzZGF5OigpPT5ocnQsdXRjV2VkbmVzZGF5czooKT0+QUh0LHV0Y1dlZWs6KCk9PlY3LHV0Y1dlZWtzOigpPT5tcnQsdXRjWWVhcjooKT0+ekh0LHV0Y1llYXJzOigpPT5GSHQsdmFsdWVzOigpPT5jQXQsdmFyaWFuY2U6KCk9PmxSLHZlcnNpb246KCk9PmlNdCx2b3Jvbm9pOigpPT5ER3Qsd2luZG93OigpPT5Ddyx4bWw6KCk9PmhOdCx6aXA6KCk9PlVNdCx6b29tOigpPT5xanQsem9vbUlkZW50aXR5OigpPT5oUyx6b29tVHJhbnNmb3JtOigpPT5hRn0pO3ZhciBFcj1NKCgpPT57b010KCk7R010KCk7dEV0KCk7eEN0KCk7SkN0KCk7cEF0KCk7UEF0KCk7TkF0KCk7cFB0KCk7VFB0KCk7aTZ0KCk7Z0l0KCk7Tkl0KCk7cUx0KCk7R2t0KCk7WDh0KCk7Sjh0KCk7ZlJ0KCk7R1J0KCk7JFJ0KCk7aU50KCk7X050KCk7Tjd0KCk7aEZ0KCk7RkJ0KCk7SEh0KCk7dlZ0KCk7Q1Z0KCk7X0d0KCk7ekd0KCk7V2p0KCl9KTt2YXIgJGp0PUgoWGp0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYanQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZanQ9KEVyKCksVXQoTXIpKSxXZz1ZanQsamp0PVlqdDtmdW5jdGlvbiBXRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5hdHRyKGkscltpXSl9KX1mdW5jdGlvbiBZRGUoZSx0KXtmb3IodmFyIHIgaW4gdCllLmF0dHIocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBqRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1dEZTpZRGUpKHRoaXMsZSl9ZnVuY3Rpb24gWERlKGUsdCxyKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBvIGluIG4paS5zdHlsZShvLG5bb10scil9KX1mdW5jdGlvbiAkRGUoZSx0LHIpe2Zvcih2YXIgbiBpbiB0KWUuc3R5bGUobix0W25dLHIpO3JldHVybiBlfWZ1bmN0aW9uIEtEZShlLHQpe3JldHVybih0eXBlb2YgZT09ImZ1bmN0aW9uIj9YRGU6JERlKSh0aGlzLGUsdD09bnVsbD8iIjp0KX1mdW5jdGlvbiBaRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5wcm9wZXJ0eShpLHJbaV0pfSl9ZnVuY3Rpb24gSkRlKGUsdCl7Zm9yKHZhciByIGluIHQpZS5wcm9wZXJ0eShyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIFFEZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/WkRlOkpEZSkodGhpcyxlKX1mdW5jdGlvbiB0T2UoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcykudHJhbnNpdGlvbihlKTtmb3IodmFyIGkgaW4gciluLmF0dHIoaSxyW2ldKX0pfWZ1bmN0aW9uIGVPZShlLHQpe2Zvcih2YXIgciBpbiB0KWUuYXR0cihyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIHJPZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/dE9lOmVPZSkodGhpcyxlKX1mdW5jdGlvbiBuT2UoZSx0LHIpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpPVdnLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKGUpO2Zvcih2YXIgbyBpbiBuKWkuc3R5bGUobyxuW29dLHIpfSl9ZnVuY3Rpb24gaU9lKGUsdCxyKXtmb3IodmFyIG4gaW4gdCllLnN0eWxlKG4sdFtuXSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBvT2UoZSx0KXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/bk9lOmlPZSkodGhpcyxlLHQ9PW51bGw/IiI6dCl9V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1qRGU7V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9S0RlO1dnLnNlbGVjdGlvbi5wcm90b3R5cGUucHJvcGVydGllcz1RRGU7amp0LnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPXJPZTtqanQudHJhbnNpdGlvbi5wcm90b3R5cGUuc3R5bGVzPW9PZX0pO3ZhciBZZz1IKGlpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS2p0PShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gYU9lKGUpe2lmKGUuYXR0cnM9PW51bGwpaWYoZS5ub2Rlcz09bnVsbCl7dmFyIHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3QucHVzaCh0aGlzKX0pLEtqdC5zZWxlY3RBbGwodCl9ZWxzZSByZXR1cm4gS2p0LnNlbGVjdEFsbChlLm5vZGVzKCkpO2Vsc2UgcmV0dXJuIGV9aWl0LmNvZXJjZUV4dGVybmFsRDM9YU9lfSk7dmFyIElmPUgob2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2Z1bmN0aW9uIHNPZShlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyXT1yLHR9LHt9KX1vaXQubWFrZUVudW09c09lfSk7dmFyIEpqdD1IKGxGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRyPShJXygpLFV0KEJ2dCkpLGxPZT1ZZygpLGNPZT1JZigpLFpqdD17bGluZWFyOmRyLmVhc2VMaW5lYXIscXVhZDpkci5lYXNlUXVhZCxxdWFkSW46ZHIuZWFzZVF1YWRJbixxdWFkT3V0OmRyLmVhc2VRdWFkT3V0LHF1YWRJbk91dDpkci5lYXNlUXVhZEluT3V0LGN1YmljOmRyLmVhc2VDdWJpYyxjdWJpY0luOmRyLmVhc2VDdWJpY0luLGN1YmljT3V0OmRyLmVhc2VDdWJpY091dCxjdWJpY0luT3V0OmRyLmVhc2VDdWJpY0luT3V0LHBvbHk6ZHIuZWFzZVBvbHkscG9seUluOmRyLmVhc2VQb2x5SW4scG9seU91dDpkci5lYXNlUG9seU91dCxwb2x5SW5PdXQ6ZHIuZWFzZVBvbHlJbk91dCxzaW46ZHIuZWFzZVNpbixzaW5Jbjpkci5lYXNlU2luSW4sc2luT3V0OmRyLmVhc2VTaW5PdXQsc2luSW5PdXQ6ZHIuZWFzZVNpbkluT3V0LGV4cDpkci5lYXNlRXhwLGV4cEluOmRyLmVhc2VFeHBJbixleHBPdXQ6ZHIuZWFzZUV4cE91dCxleHBJbk91dDpkci5lYXNlRXhwSW5PdXQsY2lyY2xlOmRyLmVhc2VDaXJjbGUsY2lyY2xlSW46ZHIuZWFzZUNpcmNsZUluLGNpcmNsZU91dDpkci5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmRyLmVhc2VDaXJjbGVJbk91dCxib3VuY2U6ZHIuZWFzZUJvdW5jZSxib3VuY2VJbjpkci5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmRyLmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6ZHIuZWFzZUJvdW5jZUluT3V0LGJhY2s6ZHIuZWFzZUJhY2ssYmFja0luOmRyLmVhc2VCYWNrSW4sYmFja091dDpkci5lYXNlQmFja091dCxiYWNrSW5PdXQ6ZHIuZWFzZUJhY2tJbk91dCxlbGFzdGljOmRyLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpkci5lYXNlRWxhc3RpY0luLGVsYXN0aWNPdXQ6ZHIuZWFzZUVsYXN0aWNPdXQsZWxhc3RpY0luT3V0OmRyLmVhc2VFbGFzdGljSW5PdXR9O2xGLkVhc2VOYW1lPWNPZS5tYWtlRW51bShbImxpbmVhciIsInF1YWQiLCJxdWFkSW4iLCJxdWFkT3V0IiwicXVhZEluT3V0IiwiY3ViaWMiLCJjdWJpY0luIiwiY3ViaWNPdXQiLCJjdWJpY0luT3V0IiwicG9seSIsInBvbHlJbiIsInBvbHlPdXQiLCJwb2x5SW5PdXQiLCJzaW4iLCJzaW5JbiIsInNpbk91dCIsInNpbkluT3V0IiwiZXhwIiwiZXhwSW4iLCJleHBPdXQiLCJleHBJbk91dCIsImNpcmNsZSIsImNpcmNsZUluIiwiY2lyY2xlT3V0IiwiY2lyY2xlSW5PdXQiLCJib3VuY2UiLCJib3VuY2VJbiIsImJvdW5jZU91dCIsImJvdW5jZUluT3V0IiwiYmFjayIsImJhY2tJbiIsImJhY2tPdXQiLCJiYWNrSW5PdXQiLCJlbGFzdGljIiwiZWxhc3RpY0luIiwiZWxhc3RpY091dCIsImVsYXN0aWNJbk91dCJdKTt2YXIgdU9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3N0YXJ0RGVsYXk9ZS5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcER1cmF0aW9uPWUuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcERlbGF5PWUuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUyx0aGlzLl9tYXhUb3RhbER1cmF0aW9uPWUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUyx0aGlzLl9lYXNpbmdNb2RlPWUuX0RFRkFVTFRfRUFTSU5HX01PREV9cmV0dXJuIGUucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHQpO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStyKk1hdGgubWF4KHQtMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfSxlLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpczt0PWxPZS5jb2VyY2VFeHRlcm5hbEQzKHQpO3ZhciBpPXQuc2l6ZSgpLG89dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheShpKTtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZWFzZSh0aGlzLl9nZXRFYXNlRmFjdG9yeSgpKS5kdXJhdGlvbih0aGlzLnN0ZXBEdXJhdGlvbigpKS5kZWxheShmdW5jdGlvbihhLHMpe3JldHVybiBuLnN0YXJ0RGVsYXkoKStvKnN9KS5hdHRycyhyKX0sZS5wcm90b3R5cGUuc3RhcnREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9zdGFydERlbGF5Oih0aGlzLl9zdGFydERlbGF5PXQsdGhpcyl9LGUucHJvdG90eXBlLnN0ZXBEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9NYXRoLm1pbih0aGlzLl9zdGVwRHVyYXRpb24sdGhpcy5fbWF4VG90YWxEdXJhdGlvbik6KHRoaXMuX3N0ZXBEdXJhdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fc3RlcERlbGF5Oih0aGlzLl9zdGVwRGVsYXk9dCx0aGlzKX0sZS5wcm90b3R5cGUubWF4VG90YWxEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhUb3RhbER1cmF0aW9uOih0aGlzLl9tYXhUb3RhbER1cmF0aW9uPXQsdGhpcyl9LGUucHJvdG90eXBlLmVhc2luZ01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZWFzaW5nTW9kZToodGhpcy5fZWFzaW5nTW9kZT10LHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0RWFzZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVhc2luZ01vZGUoKTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPVpqdFt0XTtyZXR1cm4gcj09bnVsbD9aanQubGluZWFyOnJ9ZWxzZSByZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtyPU1hdGgubWF4KHIsMCk7dmFyIG49ci9NYXRoLm1heCh0LTEsMSk7cmV0dXJuIE1hdGgubWluKHRoaXMuc3RlcERlbGF5KCksbil9LGUuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTPTAsZS5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDAsZS5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1LGUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz0xLzAsZS5fREVGQVVMVF9FQVNJTkdfTU9ERT0iZXhwT3V0IixlfSgpO2xGLkVhc2luZz11T2V9KTt2YXIgUWp0PUgoYWl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoT2U9WWcoKSxmT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1oT2UuY29lcmNlRXh0ZXJuYWxEMyh0KSx0LmF0dHJzKHIpfSxlfSgpO2FpdC5OdWxsPWZPZX0pO3ZhciBMZj1IKGNGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHRYdD0oZGUoKSxVdChwZSkpO3RYdC5fX2V4cG9ydFN0YXIoSmp0KCksY0YpO3RYdC5fX2V4cG9ydFN0YXIoUWp0KCksY0YpfSk7dmFyIGVYdD1IKHNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcE9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmNhY2hlPXt9LHRoaXMuY29tcHV0ZT10fXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmNhY2hlW3RdPXRoaXMuY29tcHV0ZSh0KSksdGhpcy5jYWNoZVt0XX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYWNoZT17fSx0aGlzfSxlfSgpO3NpdC5DYWNoZT1wT2V9KTt2YXIgclh0PUgobGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFycmF5RXE9ZnVuY3Rpb24odCxyKXtpZih0PT1udWxsfHxyPT1udWxsKXJldHVybiB0PT09cjtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0hPT1yW25dKXJldHVybiExO3JldHVybiEwfSxlLm9iakVxPWZ1bmN0aW9uKHQscil7aWYodD09bnVsbHx8cj09bnVsbClyZXR1cm4gdD09PXI7dmFyIG49T2JqZWN0LmtleXModCkuc29ydCgpLGk9T2JqZWN0LmtleXMocikuc29ydCgpLG89bi5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHRbc119KSxhPWkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiByW3NdfSk7cmV0dXJuIGUuYXJyYXlFcShuLGkpJiZlLmFycmF5RXEobyxhKX0sZS5zdHJpY3RFcT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09cn0sZS5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtpZih0PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8hPW51bGwpZm9yKHZhciBhIGluIG8pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sYSkmJihpW2FdPW9bYV0pfSksaX0sZX0oKTtsaXQuTWV0aG9kcz1kT2V9KTt2YXIgblh0PUgoY2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmNvbWJpbmVXaGl0ZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1sgXHRdKy9nLCIgIil9LGUuaXNOb3RFbXB0eVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC50cmltKCkhPT0iIn0sZS50cmltU3RhcnQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKSxpPXI/ZnVuY3Rpb24obyl7cmV0dXJuIG8uc3BsaXQocikuc29tZShlLmlzTm90RW1wdHlTdHJpbmcpfTplLmlzTm90RW1wdHlTdHJpbmc7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkobythKT9vK2E6b30sIiIpfSxlLnRyaW1FbmQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKTtyZXR1cm4gbi5yZXZlcnNlKCksbj1lLnRyaW1TdGFydChuLmpvaW4oIiIpLHIpLnNwbGl0KCIiKSxuLnJldmVyc2UoKSxuLmpvaW4oIiIpfSxlfSgpO2NpdC5TdHJpbmdNZXRob2RzPW1PZX0pO3ZhciBpWHQ9SCh1aXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLldvcmREaXZpZGVyUmVnRXhwPW5ldyBSZWdFeHAoIlxcVyIpLHRoaXMuV2hpdGVzcGFjZVJlZ0V4cD1uZXcgUmVnRXhwKCJcXHMiKX1yZXR1cm4gZS5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztyZXR1cm4gdC5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4uc2xpY2UoMCwtMSkuY29uY2F0KHIuc2hvdWxkQ3JlYXRlTmV3VG9rZW4obltuLmxlbmd0aC0xXSxpKSl9LFsiIl0pfSxlLnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LHIpe2lmKCF0KXJldHVybltyXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qocik/W3Qrcl06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KHIpP1t0LHJdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09cj9bdCtyXTpbdCxyXTpbdCtyXX0sZX0oKTt1aXQuVG9rZW5pemVyPWdPZX0pO3ZhciBwUz1IKHVGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGhGKGUpe2Zvcih2YXIgdCBpbiBlKXVGLmhhc093blByb3BlcnR5KHQpfHwodUZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtoRihlWHQoKSk7aEYoclh0KCkpO2hGKG5YdCgpKTtoRihpWHQoKSl9KTt2YXIgYVh0PUgoaGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvWHQ9cFMoKSxfT2U9e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifSxmRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1yLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sZS5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LGUucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LHIsbixpLG8pe2lmKGk9PT12b2lkIDAmJihpPXt9KSxpPW9YdC5NZXRob2RzLmRlZmF1bHRzKHt9LF9PZSxpKSxlLlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2YoaS50ZXh0Um90YXRpb24pPT09LTEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIraS50ZXh0Um90YXRpb24rIi4gU3VwcG9ydGVkIHJvdGF0aW9ucyBhcmUgIitlLlN1cHBvcnRlZFJvdGF0aW9uLmpvaW4oIiwgIikpO2lmKGkudGV4dFNoZWFyIT1udWxsJiZpLnRleHRTaGVhcjwtODB8fGkudGV4dFNoZWFyPjgwKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK2kudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIGE9TWF0aC5hYnMoTWF0aC5hYnMoaS50ZXh0Um90YXRpb24pLTkwKT40NSxzPWE/cjpuLGw9YT9uOnIsYz1pLnRleHRTaGVhcix1PWMqTWF0aC5QSS8xODAsaD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGY9aCpNYXRoLnRhbih1KSxwPXMvTWF0aC5jb3ModSktTWF0aC5hYnMoZiksZD1sKk1hdGguY29zKHUpLGc9b1h0LlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UodCksXz10aGlzLl93cmFwcGVyP3RoaXMuX3dyYXBwZXIud3JhcChnLHRoaXMuX21lYXN1cmVyLHAsZCkud3JhcHBlZFRleHQ6Zyx5PV8uc3BsaXQoYApgKSx4PWUuWE9mZnNldEZhY3RvcltpLnhBbGlnbl0qcCpNYXRoLnNpbih1KSxiPWUuWU9mZnNldEZhY3RvcltpLnlBbGlnbl0qKGQteS5sZW5ndGgqaCksUz14LWIsQz1bMCwwXSxQPWkudGV4dFJvdGF0aW9uK2M7c3dpdGNoKGkudGV4dFJvdGF0aW9uKXtjYXNlIDkwOkM9W3IrUywwXTticmVhaztjYXNlLTkwOkM9Wy1TLG5dO2JyZWFrO2Nhc2UgMTgwOkM9W3IsbitTXTticmVhaztkZWZhdWx0OkM9WzAsLVNdO2JyZWFrfXZhciBrPXRoaXMuX3BlbkZhY3RvcnkuY3JlYXRlUGVuKHQse3RyYW5zbGF0ZTpDLHJvdGF0ZTpQfSxvKTt0aGlzLndyaXRlTGluZXMoeSxrLHAsaCxmLGkueEFsaWduKSxrLmRlc3Ryb3khPW51bGwmJmsuZGVzdHJveSgpfSxlLnByb3RvdHlwZS53cml0ZUxpbmVzPWZ1bmN0aW9uKHQscixuLGksbyxhKXt0LmZvckVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1vPjA/KGwrMSkqbzpsKm87ci53cml0ZShzLG4sYSxjLChsKzEpKmkpfSl9LGV9KCk7ZkYuWE9mZnNldEZhY3Rvcj17Y2VudGVyOi41LGxlZnQ6MCxyaWdodDoxfTtmRi5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9O2ZGLlN1cHBvcnRlZFJvdGF0aW9uPVstOTAsMCwxODAsOTBdO2hpdC5Xcml0ZXI9ZkZ9KTt2YXIgRkE9SChwRj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5T2UoZSl7Zm9yKHZhciB0IGluIGUpcEYuaGFzT3duUHJvcGVydHkodCl8fChwRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkocEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3lPZShhWHQoKSl9KTt2YXIgZml0PUgoZEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gZS5hZGRDbGFzc2VzLmFwcGx5KGUsW2ldLmNvbmNhdChyKSksaX0sZS5hZGRDbGFzc2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3I9ci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGkhPW51bGx9KSx0LmNsYXNzTGlzdCE9bnVsbD9yLmZvckVhY2goZnVuY3Rpb24oaSl7dC5jbGFzc0xpc3QuYWRkKGkpfSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixyLmpvaW4oIiAiKSl9LGUuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtkRi5IdG1sVXRpbHM9QkE7dmFyIHZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPXIsdGhpcy5hZGRUaXRsZT1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGE9QkEuYXBwZW5kKGkuZWxlbWVudCwic3BhbiIsInRleHQtdG1wIixpLmNsYXNzTmFtZSk7YS50ZXh0Q29udGVudD1vO3ZhciBzPUJBLmdldERpbWVuc2lvbnMoYSk7cmV0dXJuIGkuZWxlbWVudC5yZW1vdmVDaGlsZChhKSxzfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9QkEuYXBwZW5kKHMsImRpdiIsInRleHQtYmxvY2siLGkuY2xhc3NOYW1lKTtyZXR1cm4gbC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGwuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwgLTFlbSkgIisoInRyYW5zbGF0ZSgiK2EudHJhbnNsYXRlWzBdKyJweCwgIithLnRyYW5zbGF0ZVsxXSsicHgpICIpKygicm90YXRlKCIrYS5yb3RhdGUrImRlZykiKSxsLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0iMCAxLjJlbSIsaS5hZGRUaXRsZSYmbC5zZXRBdHRyaWJ1dGUoInRpdGxlIixvKSxpLmNyZWF0ZUh0bWxMaW5lUGVuKGwpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0QWRkVGl0bGU9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZT10fSxlLnByb3RvdHlwZS5jcmVhdGVIdG1sTGluZVBlbj1mdW5jdGlvbih0KXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz1CQS5hcHBlbmQodCwiZGl2IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc3R5bGUud2lkdGg9bisicHgiLHMuc3R5bGUudGV4dEFsaWduPWkscy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIixzLnN0eWxlLnRvcD1hKyJweCIscy5zdHlsZS5sZWZ0PW8rInB4In19fSxlfSgpO2RGLkh0bWxDb250ZXh0PXZPZX0pO3ZhciBjWHQ9SChtRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB4T2U9RkEoKSxzWHQ9Zml0KCksamc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuU1ZHX05TLHQpO3JldHVybiBzWHQuSHRtbFV0aWxzLmFkZENsYXNzZXMuYXBwbHkoc1h0Lkh0bWxVdGlscyxbaV0uY29uY2F0KHIpKSxpfSxlLmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCQm94KXRyeXt2YXIgcj10LmdldEJCb3goKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtqZy5TVkdfTlM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjttRi5TdmdVdGlscz1qZzt2YXIgbFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9cix0aGlzLmFkZFRpdGxlRWxlbWVudD1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXt2YXIgbz1pLmdldFRleHRFbGVtZW50cyhpLmVsZW1lbnQpLGE9by5wYXJlbnRFbGVtZW50LHM9by5jb250YWluZXJFbGVtZW50LGw9by50ZXh0RWxlbWVudDtyZXR1cm4gZnVuY3Rpb24oYyl7YS5hcHBlbmRDaGlsZChzKSxsLnRleHRDb250ZW50PWM7dmFyIHU9amcuZ2V0RGltZW5zaW9ucyhsKTtyZXR1cm4gYS5yZW1vdmVDaGlsZChzKSx1fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9amcuYXBwZW5kKHMsImciLCJ0ZXh0LWNvbnRhaW5lciIsaS5jbGFzc05hbWUpO2kuYWRkVGl0bGVFbGVtZW50JiYoamcuYXBwZW5kKGwsInRpdGxlIikudGV4dENvbnRlbnQ9byxsLnNldEF0dHJpYnV0ZSgidGl0bGUiLG8pKTt2YXIgYz1qZy5hcHBlbmQobCwiZyIsInRleHQtYXJlYSIpO3JldHVybiBjLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS50cmFuc2xhdGVbMF0rIiwiK2EudHJhbnNsYXRlWzFdKyIpIisoInJvdGF0ZSgiK2Eucm90YXRlKyIpIikpLGkuY3JlYXRlU3ZnTGluZVBlbihjKX19cmV0dXJuIGUucHJvdG90eXBlLnNldEFkZFRpdGxlRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmFkZFRpdGxlRWxlbWVudD10fSxlLnByb3RvdHlwZS5jcmVhdGVTdmdMaW5lUGVuPWZ1bmN0aW9uKHQpe3JldHVybnt3cml0ZTpmdW5jdGlvbihyLG4saSxvLGEpe28rPW4qeE9lLldyaXRlci5YT2Zmc2V0RmFjdG9yW2ldO3ZhciBzPWpnLmFwcGVuZCh0LCJ0ZXh0IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsZS5BbmNob3JNYXBbaV0pLHMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIithKyIpIikscy5zZXRBdHRyaWJ1dGUoInkiLCItMC4yNWVtIil9fX0sZS5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2lmKHQudGFnTmFtZT09PSJ0ZXh0Iil7dmFyIHI9dC5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj10LnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQodCkse2NvbnRhaW5lckVsZW1lbnQ6dCxwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6dH19dmFyIG49dC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobiE9bnVsbCl7dmFyIHI9bi5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj1uLnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQobikse2NvbnRhaW5lckVsZW1lbnQ6bixwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6bn19dmFyIGk9amcuY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6aSxwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6aX19LGV9KCk7bFh0LkFuY2hvck1hcD17Y2VudGVyOiJtaWRkbGUiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07bUYuU3ZnQ29udGV4dD1sWHR9KTt2YXIgdVh0PUgocGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBiT2U9RkEoKSx3T2U9IiM0NDQiLFNPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3I9PT12b2lkIDAmJihyPTEwKSxuPT09dm9pZCAwJiYobj17fSk7dmFyIGk9dGhpczt0aGlzLmN0eD10LHRoaXMubGluZUhlaWdodD1yLHRoaXMuc3R5bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe2kuY3R4LmZvbnQ9aS5zdHlsZS5mb250O3ZhciBhPWkuY3R4Lm1lYXN1cmVUZXh0KG8pLndpZHRoO3JldHVybnt3aWR0aDphLGhlaWdodDppLmxpbmVIZWlnaHR9fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3JldHVybiBzPT1udWxsJiYocz1pLmN0eCkscy5zYXZlKCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGVbMF0sYS50cmFuc2xhdGVbMV0pLHMucm90YXRlKGEucm90YXRlKk1hdGguUEkvMTgwKSxpLmNyZWF0ZUNhbnZhc1BlbihzKX0sdGhpcy5zdHlsZS5maWxsPT09dm9pZCAwJiYodGhpcy5zdHlsZS5maWxsPXdPZSl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZUNhbnZhc1Blbj1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3JldHVybntkZXN0cm95OmZ1bmN0aW9uKCl7dC5yZXN0b3JlKCl9LHdyaXRlOmZ1bmN0aW9uKG4saSxvLGEscyl7YSs9aSpiT2UuV3JpdGVyLlhPZmZzZXRGYWN0b3Jbb10sdC50ZXh0QWxpZ249byxyLnN0eWxlLmZvbnQhPW51bGwmJih0LmZvbnQ9ci5zdHlsZS5mb250KSxyLnN0eWxlLmZpbGwhPW51bGwmJih0LmZpbGxTdHlsZT1yLnN0eWxlLmZpbGwsdC5maWxsVGV4dChuLGEscykpLHIuc3R5bGUuc3Ryb2tlIT1udWxsJiYodC5zdHJva2VTdHlsZT1yLnN0eWxlLmZpbGwsdC5zdHJva2VUZXh0KG4sYSxzKSl9fX0sZX0oKTtwaXQuQ2FudmFzQ29udGV4dD1TT2V9KTt2YXIgbWl0PUgoZ0Y9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZGl0KGUpe2Zvcih2YXIgdCBpbiBlKWdGLmhhc093blByb3BlcnR5KHQpfHwoZ0ZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGdGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtkaXQoY1h0KCkpO2RpdCh1WHQoKSk7ZGl0KGZpdCgpKX0pO3ZhciBfRj1IKGdpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0LmNyZWF0ZVJ1bGVyIT1udWxsP3RoaXMucnVsZXI9dC5jcmVhdGVSdWxlcigpOnRoaXMucnVsZXI9dH1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ZS5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcih0KX0sZX0oKTtoWHQuSEVJR0hUX1RFWFQ9ImJkcHFsIjtnaXQuQWJzdHJhY3RNZWFzdXJlcj1oWHR9KTt2YXIgX2l0PUgoSEE9PnsidXNlIHN0cmljdCI7dmFyIE1PZT1IQSYmSEEuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0W25dPXJbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlGPV9GKCksRU9lPWZ1bmN0aW9uKGUpe01PZSh0LGUpO2Z1bmN0aW9uIHQocixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIGkudXNlR3VhcmRzPW4saX1yZXR1cm4gdC5wcm90b3R5cGUuX2FkZEd1YXJkcz1mdW5jdGlvbihyKXtyZXR1cm4geUYuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtyK3lGLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFR9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzLnVzZUd1YXJkc3x8bnx8L15bXHQgXSQvLnRlc3Qociksbz1pP3RoaXMuX2FkZEd1YXJkcyhyKTpyLGE9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMsbyk7cmV0dXJuIGEud2lkdGgtPWk/Mip0aGlzLmdldEd1YXJkV2lkdGgoKTowLGF9LHQucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT09dm9pZCAwJiYocj15Ri5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKSxyLnRyaW0oKT09PSIiKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgaT1yLnRyaW0oKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbWVhc3VyZUxpbmUobyl9KTtyZXR1cm57aGVpZ2h0OmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8rYS5oZWlnaHR9LDApLHdpZHRoOmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIE1hdGgubWF4KG8sYS53aWR0aCl9LDApfX0sdC5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd1YXJkV2lkdGg9PW51bGwmJih0aGlzLmd1YXJkV2lkdGg9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LHR9KHlGLkFic3RyYWN0TWVhc3VyZXIpO0hBLk1lYXN1cmVyPUVPZX0pO3ZhciB5aXQ9SChWQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVE9lPVZBJiZWQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ09lPV9pdCgpLEFPZT1mdW5jdGlvbihlKXtUT2UodCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9tZWFzdXJlTGluZS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ci5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQ2hhcmFjdGVyKG8pfSk7cmV0dXJue2hlaWdodDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBNYXRoLm1heChvLGEuaGVpZ2h0KX0sMCksd2lkdGg6aS5yZWR1Y2UoZnVuY3Rpb24obyxhKXtyZXR1cm4gbythLndpZHRofSwwKX19LHR9KENPZS5NZWFzdXJlcik7VkEuQ2hhcmFjdGVyTWVhc3VyZXI9QU9lfSk7dmFyIHZpdD1IKFVBPT57InVzZSBzdHJpY3QiO3ZhciBQT2U9VUEmJlVBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJT2U9cFMoKSxMT2U9eWl0KCksa09lPWZ1bmN0aW9uKGUpe1BPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmNhY2hlPW5ldyBJT2UuQ2FjaGUoZnVuY3Rpb24obyl7cmV0dXJuIGkuX21lYXN1cmVDaGFyYWN0ZXJOb3RGcm9tQ2FjaGUobyl9KSxpfXJldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSx0fShMT2UuQ2hhcmFjdGVyTWVhc3VyZXIpO1VBLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXI9a09lfSk7dmFyIGZYdD1IKHFBPT57InVzZSBzdHJpY3QiO3ZhciBST2U9cUEmJnFBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOT2U9cFMoKSxET2U9X0YoKSxPT2U9dml0KCksek9lPWZ1bmN0aW9uKGUpe1JPZSh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uZGltQ2FjaGU9bmV3IE5PZS5DYWNoZShmdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZU5vdEZyb21DYWNoZShpKX0pLG59cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlTm90RnJvbUNhY2hlPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMCYmKHI9RE9lLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLHRoaXMuZGltQ2FjaGUuZ2V0KHIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKSxlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfSx0fShPT2UuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7cUEuQ2FjaGVNZWFzdXJlcj16T2V9KTt2YXIgeGl0PUgodkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gR0EoZSl7Zm9yKHZhciB0IGluIGUpdkYuaGFzT3duUHJvcGVydHkodCl8fCh2Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0dBKF9GKCkpO0dBKHZpdCgpKTtHQShmWHQoKSk7R0EoeWl0KCkpO0dBKF9pdCgpKX0pO3ZhciB3aXQ9SChiaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdBPXBTKCksRk9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWF4TGluZXMoMS8wKSx0aGlzLnRleHRUcmltbWluZygiZWxsaXBzaXMiKSx0aGlzLmFsbG93QnJlYWtpbmdXb3JkcyghMSksdGhpcy5fdG9rZW5pemVyPW5ldyBXQS5Ub2tlbml6ZXIsdGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXI9Ii0ifXJldHVybiBlLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzKX0sZS5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3RleHRUcmltbWluZztpZih0IT09ImVsbGlwc2lzIiYmdCE9PSJub25lIil0aHJvdyBuZXcgRXJyb3IodCsiIC0gdW5zdXBwb3J0ZWQgdGV4dCB0cmltbWluZyBvcHRpb24uIik7cmV0dXJuIHRoaXMuX3RleHRUcmltbWluZz10LHRoaXN9LGUucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9hbGxvd0JyZWFraW5nV29yZHM6KHRoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz10LHRoaXMpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXRoaXM7aT09PXZvaWQgMCYmKGk9MS8wKTt2YXIgYT17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDp0LHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9LHM9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IoaS9yLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpuLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6YX0sbD10LnNwbGl0KGAKYCk7cmV0dXJuIGwucmVkdWNlKGZ1bmN0aW9uKGMsdSxoKXtyZXR1cm4gby5icmVha0xpbmVUb0ZpdFdpZHRoKGMsdSxoIT09bC5sZW5ndGgtMSxyKX0scykud3JhcHBpbmd9LGUucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dGhpczshdC5jYW5GaXRUZXh0JiZ0LndyYXBwaW5nLnRydW5jYXRlZFRleHQhPT0iIiYmKHQud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9YApgKTt2YXIgYT10aGlzLl90b2tlbml6ZXIudG9rZW5pemUocik7dD1hLnJlZHVjZShmdW5jdGlvbihsLGMpe3JldHVybiBvLndyYXBOZXh0VG9rZW4oYyxsLGkpfSx0KTt2YXIgcz1XQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5jdXJyZW50TGluZSk7cmV0dXJuIHQud3JhcHBpbmcubm9MaW5lcys9KyhzIT09IiIpLHQud3JhcHBpbmcubm9MaW5lcz09PXQuYXZhaWxhYmxlTGluZXMmJnRoaXMuX3RleHRUcmltbWluZyE9PSJub25lIiYmbj90LmNhbkZpdFRleHQ9ITE6dC53cmFwcGluZy53cmFwcGVkVGV4dCs9cyx0LmN1cnJlbnRMaW5lPWAKYCx0fSxlLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbih0LHIsbil7dmFyIGk9dGhpcyxvPXQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhLHMpe3JldHVybiBzIT09dC5sZW5ndGgtMT9hK2kuX2JyZWFraW5nQ2hhcmFjdGVyOmF9KTtyZXR1cm4gbi5tZWFzdXJlKHQpLndpZHRoPD1yfHxvLmV2ZXJ5KGZ1bmN0aW9uKGEpe3JldHVybiBuLm1lYXN1cmUoYSkud2lkdGg8PXJ9KX0sZS5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24odCxyLG4pe2lmKHRoaXMuX3RleHRUcmltbWluZz09PSJub25lIilyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOnR9O3ZhciBpPXQuc3Vic3RyaW5nKDApLnRyaW0oKSxvPW4ubWVhc3VyZShpKS53aWR0aCxhPW4ubWVhc3VyZSgiLi4uIikud2lkdGgscz10Lmxlbmd0aD4wJiZ0WzBdPT09YApgP2AKYDoiIjtpZihyPD1hKXt2YXIgbD1hLzMsYz1NYXRoLmZsb29yKHIvbCk7cmV0dXJue3JlbWFpbmluZ1Rva2VuOnQsd3JhcHBlZFRva2VuOnMrIi4uLiIuc3Vic3RyKDAsYyl9fWZvcig7bythPnI7KWk9V0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKGkuc3Vic3RyKDAsaS5sZW5ndGgtMSkpLG89bi5tZWFzdXJlKGkpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpXQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5zdWJzdHJpbmcoaS5sZW5ndGgpLCItIikudHJpbSgpLHdyYXBwZWRUb2tlbjpzK2krIi4uLiJ9fSxlLnByb3RvdHlwZS53cmFwTmV4dFRva2VuPWZ1bmN0aW9uKHQscixuKXtpZighci5jYW5GaXRUZXh0fHxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzfHwhdGhpcy5jYW5GaXRUb2tlbih0LHIuYXZhaWxhYmxlV2lkdGgsbikpcmV0dXJuIHRoaXMuZmluaXNoV3JhcHBpbmcodCxyLG4pO2Zvcih2YXIgaT10O2k7KXt2YXIgbz10aGlzLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGgoaSxyLmN1cnJlbnRMaW5lLHIuYXZhaWxhYmxlV2lkdGgsbik7aWYoci5jdXJyZW50TGluZT1vLmxpbmUsaT1vLnJlbWFpbmluZ1Rva2VuLGkhPW51bGwpaWYoci53cmFwcGluZy5ub0Jyb2tlV29yZHMrPStvLmJyZWFrV29yZCwrK3Iud3JhcHBpbmcubm9MaW5lcyxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzKXt2YXIgYT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUsci5hdmFpbGFibGVXaWR0aCxuKTtyZXR1cm4gci53cmFwcGluZy53cmFwcGVkVGV4dCs9YS53cmFwcGVkVG9rZW4sci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1hLnJlbWFpbmluZ1Rva2VuK2ksci5jdXJyZW50TGluZT1gCmAscn1lbHNlIHIud3JhcHBpbmcud3JhcHBlZFRleHQrPVdBLlN0cmluZ01ldGhvZHMudHJpbUVuZChyLmN1cnJlbnRMaW5lKSxyLmN1cnJlbnRMaW5lPWAKYH1yZXR1cm4gcn0sZS5wcm90b3R5cGUuZmluaXNoV3JhcHBpbmc9ZnVuY3Rpb24odCxyLG4pe2lmKHIuY2FuRml0VGV4dCYmci5hdmFpbGFibGVMaW5lcyE9PXIud3JhcHBpbmcubm9MaW5lcyYmdGhpcy5fdGV4dFRyaW1taW5nIT09Im5vbmUiKXt2YXIgaT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUrdCxyLmF2YWlsYWJsZVdpZHRoLG4pO3Iud3JhcHBpbmcud3JhcHBlZFRleHQrPWkud3JhcHBlZFRva2VuLHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9aS5yZW1haW5pbmdUb2tlbixyLndyYXBwaW5nLm5vQnJva2VXb3Jkcys9KyhpLnJlbWFpbmluZ1Rva2VuLmxlbmd0aDx0Lmxlbmd0aCksci53cmFwcGluZy5ub0xpbmVzKz0rKGkud3JhcHBlZFRva2VuLmxlbmd0aD4wKSxyLmN1cnJlbnRMaW5lPSIifWVsc2Ugci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz10O3JldHVybiByLmNhbkZpdFRleHQ9ITEscn0sZS5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbih0LHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyKSxpLm1lYXN1cmUocit0KS53aWR0aDw9bilyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6cit0LHJlbWFpbmluZ1Rva2VuOm51bGx9O2lmKHQudHJpbSgpPT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJnIudHJpbSgpIT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46dH07Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aCYmaS5tZWFzdXJlKHIrdC5zdWJzdHJpbmcoMCxhKzEpK28pLndpZHRoPD1uOykrK2E7dmFyIHM9IiI7cmV0dXJuIGE+MCYmKHM9bykse2JyZWFrV29yZDphPjAsbGluZTpyK3Quc3Vic3RyaW5nKDAsYSkrcyxyZW1haW5pbmdUb2tlbjp0LnN1YnN0cmluZyhhKX19LGV9KCk7Yml0LldyYXBwZXI9Rk9lfSk7dmFyIGRYdD1IKFlBPT57InVzZSBzdHJpY3QiO3ZhciBCT2U9WUEmJllBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBIT2U9d2l0KCkscFh0PWZ1bmN0aW9uKGUpe0JPZSh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXM7bz09PXZvaWQgMCYmKG89MS8wKTt2YXIgcz1yLnNwbGl0KGAKYCk7aWYocy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBsPWZ1bmN0aW9uKGcpe3JldHVybiBlLnByb3RvdHlwZS53cmFwLmNhbGwoYSxyLG4sZyxvKX0sYz1sKGkpO2lmKGMubm9MaW5lczwyKXJldHVybiBjO2Zvcih2YXIgdT0wLGg9aSxmPTA7Zjx0Lk5PX1dSQVBfSVRFUkFUSU9OUyYmaD51OysrZil7dmFyIHA9KGgrdSkvMixkPWwocCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhjLGQpPyhoPXAsYz1kKTp1PXB9cmV0dXJuIGN9LHQucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHIubm9MaW5lcz09PW4ubm9MaW5lcyYmci50cnVuY2F0ZWRUZXh0PT09bi50cnVuY2F0ZWRUZXh0fSx0fShIT2UuV3JhcHBlcik7cFh0Lk5PX1dSQVBfSVRFUkFUSU9OUz01O1lBLlNpbmdsZUxpbmVXcmFwcGVyPXBYdH0pO3ZhciBTaXQ9SCh4Rj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtWHQoZSl7Zm9yKHZhciB0IGluIGUpeEYuaGFzT3duUHJvcGVydHkodCl8fCh4Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoeEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO21YdChkWHQoKSk7bVh0KHdpdCgpKX0pO3ZhciBnWHQ9SChFaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1pdD1taXQoKSxWT2U9eGl0KCksVU9lPVNpdCgpLHFPZT1GQSgpLEdPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5jb250ZXh0PXQsdGhpcy5tZWFzdXJlcj1uZXcgVk9lLkNhY2hlTWVhc3VyZXIodGhpcy5jb250ZXh0KSx0aGlzLndyYXBwZXI9bmV3IFVPZS5XcmFwcGVyLHRoaXMud3JpdGVyPW5ldyBxT2UuV3JpdGVyKHRoaXMubWVhc3VyZXIsdGhpcy5jb250ZXh0LHRoaXMud3JhcHBlcil9cmV0dXJuIGUuc3ZnPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5TdmdDb250ZXh0KHQscixuKSl9LGUuY2FudmFzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5DYW52YXNDb250ZXh0KHQscixuKSl9LGUuaHRtbD1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBNaXQuSHRtbENvbnRleHQodCxyLG4pKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4saSxvKXt0aGlzLndyaXRlci53cml0ZSh0LHIsbixpLG8pfSxlLnByb3RvdHlwZS5jbGVhck1lYXN1cmVyQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLm1lYXN1cmVyLnJlc2V0KCl9LGV9KCk7RWl0LlR5cGVzZXR0ZXI9R09lfSk7dmFyIF9sPUgoYkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZFMoZSl7Zm9yKHZhciB0IGluIGUpYkYuaGFzT3duUHJvcGVydHkodCl8fChiRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RTKG1pdCgpKTtkUyh4aXQoKSk7ZFMoZ1h0KCkpO2RTKHBTKCkpO2RTKFNpdCgpKTtkUyhGQSgpKX0pO3ZhciBfWHQ9SChtUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobVMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBXT2U9KEVyKCksVXQoTXIpKSxZT2U9d2luZG93LkFycmF5O2Z1bmN0aW9uIGpPZShlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRlbXB0ZWQgdG8gYWRkIGFycmF5cyBvZiB1bmVxdWFsIGxlbmd0aCIpO3JldHVybiBlLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlW25dK3Rbbl19KX1tUy5hZGQ9ak9lO2Z1bmN0aW9uIFhPZShlKXt2YXIgdD1XT2Uuc2V0KCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuaGFzKFN0cmluZyhuKSl8fCh0LmFkZChTdHJpbmcobikpLHIucHVzaChuKSl9KSxyfW1TLnVuaXE9WE9lO2Z1bmN0aW9uICRPZShlKXtyZXR1cm4gWU9lLnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSl9bVMuZmxhdHRlbj0kT2U7ZnVuY3Rpb24gS09lKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPHQ7bisrKXJbbl09dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTplO3JldHVybiByfW1TLmNyZWF0ZUZpbGxlZEFycmF5PUtPZX0pO3ZhciB4WHQ9SChqQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoakEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2WHQ9KEVyKCksVXQoTXIpKSxaT2U9d2luZG93Lk1hdGg7ZnVuY3Rpb24gSk9lKGUsdCl7dmFyIHI9eVh0KGUpKy4wNSxuPXlYdCh0KSsuMDU7cmV0dXJuIHI+bj9yL246bi9yfWpBLmNvbnRyYXN0PUpPZTtmdW5jdGlvbiBRT2UoZSx0KXt2YXIgcj12WHQuY29sb3IoZSkuYnJpZ2h0ZXIodCk7cmV0dXJuIHIucmdiKCkudG9TdHJpbmcoKX1qQS5saWdodGVuQ29sb3I9UU9lO2Z1bmN0aW9uIHQ3ZShlLHQpe2UuY2xhc3NlZCh0LCEwKTt2YXIgcj1lLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIik7aWYocj09PSJ0cmFuc3BhcmVudCIpcmV0dXJuIG51bGw7dmFyIG49L1woKC4rKVwpLy5leGVjKHIpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW5bMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9K2EsbD1zLnRvU3RyaW5nKDE2KTtyZXR1cm4gczwxNj8iMCIrbDpsfSk7aWYoaS5sZW5ndGg9PT00JiZpWzNdPT09IjAwIilyZXR1cm4gbnVsbDt2YXIgbz0iIyIraS5qb2luKCIiKTtyZXR1cm4gZS5jbGFzc2VkKHQsITEpLG99akEuY29sb3JUZXN0PXQ3ZTtmdW5jdGlvbiB5WHQoZSl7dmFyIHQ9dlh0LnJnYihlKSxyPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEvMjU1LGE8PS4wMzkyOD9hLzEyLjkyOlpPZS5wb3coKGErLjA1NSkvMS4wNTUsMi40KX0sbj1yKHQuciksaT1yKHQuZyksbz1yKHQuYik7cmV0dXJuIC4yMTI2Km4rLjcxNTIqaSsuMDcyMipvfX0pO3ZhciBDaXQ9SChhbz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYW8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUaXQ9KEVyKCksVXQoTXIpKSxtYT13aW5kb3cuTWF0aDtmdW5jdGlvbiBlN2UoZSx0KXtmb3IodmFyIHI9dDtyIT1udWxsJiZyIT09ZTspcj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT1lfWFvLmNvbnRhaW5zPWU3ZTtmdW5jdGlvbiB3WHQoZSl7dmFyIHQ7dHJ5e3Q9ZS5ub2RlKCkuZ2V0QkJveCgpfWNhdGNoKHIpe3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19cmV0dXJuIHR9YW8uZWxlbWVudEJCb3g9d1h0O2Z1bmN0aW9uIHI3ZShlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4gd1h0KFRpdC5zZWxlY3QoZSkpO2lmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDp0LmxlZnQseTp0LnRvcCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1hby5lbnRpdHlCb3VuZHM9cjdlO2FvLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFlMy82MDtmdW5jdGlvbiBuN2UoZSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSE9bnVsbD93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnNldFRpbWVvdXQoZSxhby5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9YW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGw9bjdlO2Z1bmN0aW9uIGk3ZShlKXt2YXIgdD1lIGluc3RhbmNlb2YgVGl0LnNlbGVjdGlvbj9lLm5vZGUoKTplLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGtmKHIsIndpZHRoIikra2YociwicGFkZGluZy1sZWZ0Iikra2YociwicGFkZGluZy1yaWdodCIpK2tmKHIsImJvcmRlci1sZWZ0LXdpZHRoIikra2YociwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9YW8uZWxlbWVudFdpZHRoPWk3ZTtmdW5jdGlvbiBvN2UoZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIFRpdC5zZWxlY3Rpb24/ZS5ub2RlKCk6ZSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBrZihyLCJoZWlnaHQiKStrZihyLCJwYWRkaW5nLXRvcCIpK2tmKHIsInBhZGRpbmctYm90dG9tIikra2YociwiYm9yZGVyLXRvcC13aWR0aCIpK2tmKHIsImJvcmRlci1ib3R0b20td2lkdGgiKX1hby5lbGVtZW50SGVpZ2h0PW83ZTt2YXIgTGM9IlxccyIsWEE9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKykiLFNYdD0iKD86KD86IitMYysiKyw/IitMYysiKil8KD86LCIrTGMrIiopKSIsYTdlPW5ldyBSZWdFeHAoInRyYW5zbGF0ZSIrTGMrIipcXCgiK0xjKyIqKCIrWEErIikoPzoiK1NYdCsiKCIrWEErIikpPyIrTGMrIipcXCkiKSxzN2U9bmV3IFJlZ0V4cCgicm90YXRlIitMYysiKlxcKCIrTGMrIiooIitYQSsiKSIrTGMrIipcXCkiKSxsN2U9bmV3IFJlZ0V4cCgic2NhbGUiK0xjKyIqXFwoIitMYysiKigiK1hBKyIpKD86IitTWHQrIigiK1hBKyIpKT8iK0xjKyIqXFwpIik7ZnVuY3Rpb24gYzdlKGUpe3ZhciB0PWE3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV0sbj10WzJdLGk9bj09PXZvaWQgMD8wOm47cmV0dXJuWytyLCtpXX1lbHNlIHJldHVyblswLDBdfWFvLmdldFRyYW5zbGF0ZVZhbHVlcz1jN2U7ZnVuY3Rpb24gdTdlKGUpe3ZhciB0PXM3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV07cmV0dXJuK3J9ZWxzZSByZXR1cm4gMH1hby5nZXRSb3RhdGU9dTdlO2Z1bmN0aW9uIGg3ZShlKXt2YXIgdD1sN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdLG49dFsyXTtyZXR1cm5bK3Isbj09bnVsbD8rcjorbl19ZWxzZSByZXR1cm5bMCwwXX1hby5nZXRTY2FsZVZhbHVlcz1oN2U7ZnVuY3Rpb24gZjdlKGUsdCl7cmV0dXJuIShtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LmxlZnQpfHxtYS5jZWlsKGUubGVmdCk+PW1hLmZsb29yKHQucmlnaHQpfHxtYS5mbG9vcihlLmJvdHRvbSk8PW1hLmNlaWwodC50b3ApfHxtYS5jZWlsKGUudG9wKT49bWEuZmxvb3IodC5ib3R0b20pKX1hby5jbGllbnRSZWN0c092ZXJsYXA9ZjdlO2Z1bmN0aW9uIHA3ZShlLHQpe3JldHVybntsZWZ0OmUubGVmdC10LHRvcDplLnRvcC10LHJpZ2h0OmUucmlnaHQrdCxib3R0b206ZS5ib3R0b20rdCx3aWR0aDplLndpZHRoK3QqMixoZWlnaHQ6ZS5oZWlnaHQrdCoyfX1hby5leHBhbmRSZWN0PXA3ZTtmdW5jdGlvbiBkN2UoZSx0KXtyZXR1cm4gbWEuZmxvb3IodC5sZWZ0KTw9bWEuY2VpbChlLmxlZnQpJiZtYS5mbG9vcih0LnRvcCk8PW1hLmNlaWwoZS50b3ApJiZtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LnJpZ2h0KSYmbWEuZmxvb3IoZS5ib3R0b20pPD1tYS5jZWlsKHQuYm90dG9tKX1hby5jbGllbnRSZWN0SW5zaWRlPWQ3ZTtmdW5jdGlvbiBtN2UoZSx0LHIsbil7bj09PXZvaWQgMCYmKG49LjUpO3ZhciBpPWJYdChlKSxvPWJYdCh0KTtyZXR1cm4gci54K3Iud2lkdGg+PWkubWluLW4mJnIueDw9aS5tYXgrbiYmci55K3IuaGVpZ2h0Pj1vLm1pbi1uJiZyLnk8PW8ubWF4K259YW8uaW50ZXJzZWN0c0JCb3g9bTdlO2Z1bmN0aW9uIGJYdChlKXtpZih0eXBlb2YgZT09Im51bWJlciIpe3ZhciB0PWU7cmV0dXJue21pbjp0LG1heDp0fX12YXIgcj1lO2lmKHIgaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4gciYmIm1heCJpbiByKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigiaW5wdXQgJyIrZSsiJyBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gUmFuZ2UiKX1mdW5jdGlvbiBrZihlLHQpe3ZhciByPWUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxuPXBhcnNlRmxvYXQocik7cmV0dXJuIG58fDB9ZnVuY3Rpb24gZzdlKGUpe2Zvcih2YXIgdD1bXTtlJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KXQucHVzaChlKSxlPWUucGFyZW50RWxlbWVudDtyZXR1cm4gdH1hby5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1nN2U7ZnVuY3Rpb24gXzdlKGUpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkscj10LmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8dC5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIHg3ZShyKX1hby5nZXRFbGVtZW50VHJhbnNmb3JtPV83ZTt2YXIgeTdlPS9ebWF0cml4XCgoW14pXSspXCkkLyx2N2U9L1ssIF0rLztmdW5jdGlvbiB4N2UoZSl7aWYoZT09bnVsbHx8ZT09PSJub25lIilyZXR1cm4gbnVsbDt2YXIgdD1lLm1hdGNoKHk3ZSk7aWYodD09bnVsbHx8dC5sZW5ndGg8MilyZXR1cm4gbnVsbDt2YXIgcj10WzFdLnNwbGl0KHY3ZSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KG4pfSk7cmV0dXJuIHIubGVuZ3RoIT02P251bGw6cn19KTt2YXIgQWl0PUgoc289PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU0Y9KEVyKCksVXQoTXIpKSxNWHQ9Q2l0KCksbWQ9d2luZG93Lk1hdGgsYjdlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gdzdlKGUsdCxyKXtyZXR1cm4gbWQubWluKHQscik8PWUmJmU8PW1kLm1heCh0LHIpfXNvLmluUmFuZ2U9dzdlO2Z1bmN0aW9uIFM3ZShlLHQscil7cmV0dXJuIG1kLm1pbihtZC5tYXgodCxlKSxyKX1zby5jbGFtcD1TN2U7ZnVuY3Rpb24gTTdlKGUsdCxyKXt2YXIgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90Om51bGwsaT1uPT1udWxsP3Q6cixvPW49PW51bGw/U0YubWF4KGUpOlNGLm1heChlLG4pO3JldHVybiBvIT09dm9pZCAwP286aX1zby5tYXg9TTdlO2Z1bmN0aW9uIEU3ZShlLHQscil7dmFyIG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsLGk9bj09bnVsbD90OnIsbz1uPT1udWxsP1NGLm1pbihlKTpTRi5taW4oZSxuKTtyZXR1cm4gbyE9PXZvaWQgMD9vOml9c28ubWluPUU3ZTtmdW5jdGlvbiBUN2UoZSl7cmV0dXJuIGUhPT1lfXNvLmlzTmFOPVQ3ZTtmdW5jdGlvbiBDN2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZS1lPDF9c28uaXNWYWxpZE51bWJlcj1DN2U7ZnVuY3Rpb24gQTdlKGUsdCxyKXtpZihyPT09dm9pZCAwJiYocj0xKSxyPT09MCl0aHJvdyBuZXcgRXJyb3IoInN0ZXAgY2Fubm90IGJlIDAiKTtmb3IodmFyIG49bWQubWF4KG1kLmNlaWwoKHQtZSkvciksMCksaT1bXSxvPTA7bzxuOysrbylpW29dPWUrcipvO3JldHVybiBpfXNvLnJhbmdlPUE3ZTtmdW5jdGlvbiBQN2UoZSx0KXtyZXR1cm4gbWQucG93KHQueS1lLnksMikrbWQucG93KHQueC1lLngsMil9c28uZGlzdGFuY2VTcXVhcmVkPVA3ZTtmdW5jdGlvbiBJN2UoZSl7cmV0dXJuIGUvMzYwKm1kLlBJKjJ9c28uZGVncmVlc1RvUmFkaWFucz1JN2U7ZnVuY3Rpb24gTDdlKGUsdCl7cmV0dXJuIHQudG9wTGVmdC54PD1lLngmJnQuYm90dG9tUmlnaHQueD49ZS54JiZ0LnRvcExlZnQueTw9ZS55JiZ0LmJvdHRvbVJpZ2h0Lnk+PWUueX1zby53aXRoaW49TDdlO2Z1bmN0aW9uIGs3ZShlLHQscixuLGksbyxhLHMpe3JldHVybiBlPD1pK2EmJmk8PWUrciYmdDw9bytzJiZvPD10K259c28uYm91bmRzSW50ZXJzZWN0cz1rN2U7ZnVuY3Rpb24gUjdlKGUpe2Zvcih2YXIgdD1NWHQuZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnMoZSkscj1iN2Usbj1udWxsLGk9MCxvPXQ7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV0scz1NWHQuZ2V0RWxlbWVudFRyYW5zZm9ybShhKTtpZihzIT1udWxsKXt2YXIgbD1hLmNsaWVudFdpZHRoLzIsYz1hLmNsaWVudEhlaWdodC8yO3I9d0YocixbbCxjXSkscj1FWHQocixUWHQocykpLHI9d0YocixbLWwsLWNdKX12YXIgdT1hLnNjcm9sbExlZnQsaD1hLnNjcm9sbFRvcDsobj09PW51bGx8fGE9PT1uKSYmKHUtPWEub2Zmc2V0TGVmdCthLmNsaWVudExlZnQsaC09YS5vZmZzZXRUb3ArYS5jbGllbnRUb3Asbj1hLm9mZnNldFBhcmVudCkscj13RihyLFt1LGhdKX1yZXR1cm4gcn1zby5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPVI3ZTtmdW5jdGlvbiBFWHQoZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zby5tdWx0aXBseU1hdHJpeD1FWHQ7ZnVuY3Rpb24gTjdlKGUsdCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLHRbM10sdFs0XStlWzBdLHRbNV0rZVsxXV19c28ucHJlbXVsdGlwbHlUcmFuc2xhdGU9TjdlO2Z1bmN0aW9uIHdGKGUsdCl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVswXSp0WzBdK2VbMl0qdFsxXStlWzRdLGVbMV0qdFswXStlWzNdKnRbMV0rZVs1XV19c28ubXVsdGlwbHlUcmFuc2xhdGU9d0Y7ZnVuY3Rpb24gVFh0KGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07aWYodD09PTApdGhyb3cgbmV3IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2YXIgcj0xL3Q7cmV0dXJuW3IqZVszXSxyKi1lWzFdLHIqLWVbMl0sciplWzBdLHIqKC1lWzNdKmVbNF0rZVsyXSplWzVdKSxyKihlWzFdKmVbNF0rLWVbMF0qZVs1XSldfXNvLmludmVydE1hdHJpeD1UWHQ7ZnVuY3Rpb24gRDdlKGUsdCl7cmV0dXJue3g6ZVswXSp0LngrZVsyXSp0LnkrZVs0XSx5OmVbMV0qdC54K2VbM10qdC55K2VbNV19fXNvLmFwcGx5VHJhbnNmb3JtPUQ3ZX0pO3ZhciBDWHQ9SChNRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLmNlaWwodC5sZW5ndGgvMiksaT0wO2k8bjtpKyspclswXS5pbnNlcnQodFtpXSk7Zm9yKHZhciBpPW47aTx0Lmxlbmd0aDtpKyspclsxXS5pbnNlcnQodFtpXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneVRyaXZpYWw9TzdlO3ZhciB6N2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxyKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxyKX0sZS5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj0wLGk9MCxvPXQubGVuZ3RoLTEsYT10Lmxlbmd0aC0xLHM9MTtzPHQubGVuZ3RoLTE7cysrKXt2YXIgbD10W3NdO2wuYm91bmRzLnhsPnRbb10uYm91bmRzLnhsP289czpsLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49cyksbC5ib3VuZHMueWw+dFthXS5ib3VuZHMueWw/YT1zOmwuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1zKX12YXIgYz1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W29dLmJvdW5kcy54bCksdT1NYXRoLmFicyh0W2ldLmJvdW5kcy55aC10W2FdLmJvdW5kcy55bCksaD1jPnU/W24sb106W2ksYV0sZj1oWzBdLHA9aFsxXTtmPT09cCYmKGY9MCxwPXQubGVuZ3RoLTEpLHJbMF0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWF4KGYscCksMSlbMF0pLHJbMV0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWluKGYscCksMSlbMF0pfSxlLnByb3RvdHlwZS5hZGROZXh0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPW51bGwsaT1udWxsLG89bnVsbCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV0sbD1yWzBdLnVuaW9uQXJlYURpZmZlcmVuY2Uocy5ib3VuZHMpLGM9clsxXS51bmlvbkFyZWFEaWZmZXJlbmNlKHMuYm91bmRzKTsobDxpfHxuPT1udWxsKSYmKG49YSxpPWwsbz1yWzBdKSxjPGkmJihuPWEsaT1jLG89clsxXSl9by5pbnNlcnQodC5zcGxpY2UobiwxKVswXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneUxpbmVhcj16N2V9KTt2YXIgSWl0PUgoZ2Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRjdlPUNYdCgpLEI3ZT01LEg3ZT1uZXcgRjdlLlNwbGl0U3RyYXRlZ3lMaW5lYXIsUmY7KGZ1bmN0aW9uKGUpe2VbZS5QQVNTPTBdPSJQQVNTIixlW2UuRkFJTD0xXT0iRkFJTCIsZVtlLlBBU1NfQU5EX09WRVJXUklURT0yXT0iUEFTU19BTkRfT1ZFUldSSVRFIn0pKFJmPWdkLlF1ZXJ5UHJlZGljYXRlUmVzdWx0fHwoZ2QuUXVlcnlQcmVkaWNhdGVSZXN1bHQ9e30pKTtmdW5jdGlvbiBFRihlLHQscil7dmFyIG49MS8wLGk9MS8wLG89MS8wO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz10KGEuYm91bmRzLGUpLGw9cihhLmJvdW5kcyxlKTtyZXR1cm4gYS52YWx1ZSE9bnVsbD9zPG4/KG49cyxpPXMsbz1sLFJmLlBBU1NfQU5EX09WRVJXUklURSk6cz09PW4/UmYuUEFTUzpSZi5GQUlMOnM+bz9SZi5GQUlMOihpPU1hdGgubWluKHMsaSksbz1NYXRoLm1heChsLG8pLFJmLlBBU1MpfX1nZC5jcmVhdGVNaW5pbWl6aW5nTm9kZVByZWRpY2F0ZT1FRjtmdW5jdGlvbiBQaXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdChuLmJvdW5kcyxlKS10KHIuYm91bmRzLGUpfX1nZC5jcmVhdGVOb2RlU29ydD1QaXQ7dmFyIFY3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0PT09dm9pZCAwJiYodD1CN2UpLHI9PT12b2lkIDAmJihyPUg3ZSksdGhpcy5tYXhOb2RlQ2hpbGRyZW49dCx0aGlzLnNwbGl0U3RyYXRlZ3k9cix0aGlzLnJvb3Q9bmV3IFRGKCEwKSx0aGlzLnNpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yb290PW5ldyBURighMCksdGhpcy5zaXplPTB9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj10aGlzLnJvb3Q7IW4ubGVhZjspbj1uLnN1YnRyZWUodCk7dmFyIGk9VEYudmFsdWVOb2RlKHQscik7Zm9yKG4uaW5zZXJ0KGkpLHRoaXMuc2l6ZSs9MTtuLm92ZXJmbG93KHRoaXMubWF4Tm9kZUNoaWxkcmVuKTspbj1uLnNwbGl0KHRoaXMuc3BsaXRTdHJhdGVneSksbi5wYXJlbnQ9PW51bGwmJih0aGlzLnJvb3Q9bik7cmV0dXJuIGl9LGUucHJvdG90eXBlLmxvY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihyKXtyZXR1cm4gci5jb250YWlucyh0KX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciByPUVGKHQsUWEuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZSxRYS5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2UpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WD1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWCksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WT1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWSksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhyLHQpfSl9LGUucHJvdG90eXBlLmludGVyc2VjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcFgocix0KX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBZKHIsdCl9KX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7dmFyIHI9W107aWYodGhpcy5yb290LmJvdW5kcyE9bnVsbCYmIXQodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHI7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KWZvcih2YXIgaT1uLnNoaWZ0KCksbz0wO288aS5lbnRyaWVzLmxlbmd0aDtvKyspe3ZhciBhPWkuZW50cmllc1tvXTt0KGEuYm91bmRzKSYmKGkubGVhZj9yLnB1c2goYS52YWx1ZSk6bi5wdXNoKGEpKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUucXVlcnlOb2Rlcz1mdW5jdGlvbih0KXt2YXIgcj1bXTtpZih0aGlzLnJvb3QuYm91bmRzIT1udWxsJiZ0KHRoaXMucm9vdCk9PT1SZi5GQUlMKXJldHVybiByO2Zvcih2YXIgbj1bdGhpcy5yb290XTtuLmxlbmd0aD4wOylmb3IodmFyIGk9bi5zaGlmdCgpLG89MDtvPGkuZW50cmllcy5sZW5ndGg7bysrKXt2YXIgYT1pLmVudHJpZXNbb10scz10KGEpO3M9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUmJihyPVtdKSwocz09PVJmLlBBU1N8fHM9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUpJiYoaS5sZWFmP3IucHVzaChhKTpuLnB1c2goYSkpfXJldHVybiByfSxlfSgpO2dkLlJUcmVlPVY3ZTt2YXIgVEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMubGVhZj10LHRoaXMuYm91bmRzPW51bGwsdGhpcy5lbnRyaWVzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy52YWx1ZT1udWxsfXJldHVybiBlLnZhbHVlTm9kZT1mdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBlKCEwKTtyZXR1cm4gbi5ib3VuZHM9dCxuLnZhbHVlPXIsbn0sZS5wcm90b3R5cGUub3ZlcmZsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg+dH0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5wdXNoKHQpLHQucGFyZW50PXRoaXM7Zm9yKHZhciByPXRoaXM7ciE9bnVsbDspci5ib3VuZHM9UWEudW5pb25BbGwoW3IuYm91bmRzLHQuYm91bmRzXSkscj1yLnBhcmVudDtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuZW50cmllcy5pbmRleE9mKHQpO2lmKHI+PTApe3RoaXMuZW50cmllcy5zcGxpY2UociwxKTtmb3IodmFyIG49dGhpcztuIT1udWxsOyluLmJvdW5kcz1RYS51bmlvbkFsbChuLmVudHJpZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLmJvdW5kc30pKSxuPW4ucGFyZW50fXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5zdWJ0cmVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xLzAsbj1udWxsLGk9MDtpPHRoaXMuZW50cmllcy5sZW5ndGg7aSsrKXt2YXIgbz10aGlzLmVudHJpZXNbaV0sYT1vLnVuaW9uQXJlYURpZmZlcmVuY2UodCk7KGE8cnx8YT09PXImJm4hPW51bGwmJm8uZW50cmllcy5sZW5ndGg8bi5lbnRyaWVzLmxlbmd0aCkmJihuPW8pfXJldHVybiBufSxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudCE9bnVsbCYmdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO3ZhciByPVtuZXcgZSh0aGlzLmxlYWYpLG5ldyBlKHRoaXMubGVhZildO3Quc3BsaXQodGhpcy5lbnRyaWVzLHIpO3ZhciBuPXRoaXMucGFyZW50IT1udWxsP3RoaXMucGFyZW50Om5ldyBlKCExKTtyZXR1cm4gbi5pbnNlcnQoclswXSksbi5pbnNlcnQoclsxXSksbi5sZWFmPSExLG59LGUucHJvdG90eXBlLnVuaW9uQXJlYURpZmZlcmVuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKFFhLnVuaW9uKHRoaXMuYm91bmRzLHQpLmFyZWEoKS10aGlzLmJvdW5kcy5hcmVhKCkpfSxlLnByb3RvdHlwZS5tYXhEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWY/MToxK3RoaXMuZW50cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4RGVwdGgoKX0pLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiBNYXRoLm1heCh0LHIpfSl9LGV9KCk7Z2QuUlRyZWVOb2RlPVRGO3ZhciBRYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7dGhpcy54bD10LHRoaXMueWw9cix0aGlzLnhoPW4sdGhpcy55aD1pLHRoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsLHRoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1yZXR1cm4gZS54eXdoPWZ1bmN0aW9uKHQscixuLGkpe3JldHVybiBuZXcgZSh0LHIsdCtuLHIraSl9LGUuZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LngsdC55LHQueCt0LndpZHRoLHQueSt0LmhlaWdodCl9LGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnBvaW50UGFpcih0LnRvcExlZnQsdC5ib3R0b21SaWdodCl9LGUucG9pbnRQYWlyPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKE1hdGgubWluKHQueCxyLngpLE1hdGgubWluKHQueSxyLnkpLE1hdGgubWF4KHQueCxyLngpLE1hdGgubWF4KHQueSxyLnkpKX0sZS5wb2ludHM9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIm5lZWQgYXQgbGVhc3QgMiBwb2ludHMgdG8gY3JlYXRlIGJvdW5kcyIpO3ZhciByPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnh9KSxuPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnl9KTtyZXR1cm4gbmV3IGUoci5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5taW4oaSxvKX0pLG4ucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWluKGksbyl9KSxyLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBNYXRoLm1heChpLG8pfSksbi5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5tYXgoaSxvKX0pKX0sZS51bmlvbj1mdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShNYXRoLm1pbih0LnhsLHIueGwpLE1hdGgubWluKHQueWwsci55bCksTWF0aC5tYXgodC54aCxyLnhoKSxNYXRoLm1heCh0LnloLHIueWgpKX0sZS51bmlvbkFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdD10LmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbH0pLHQubGVuZ3RoPT09MD9udWxsOnQucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUudW5pb24ocixuKX0pfSxlLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbih0LHIpe3JldHVybiBlLmlzQm91bmRzT3ZlcmxhcFgodCxyKSYmZS5pc0JvdW5kc092ZXJsYXBZKHQscil9LGUuaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbih0LHIpe3JldHVybiEodC54aDxyLnhsKSYmISh0LnhsPnIueGgpfSxlLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKHQueWg8ci55bCkmJiEodC55bD5yLnloKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVg9ZnVuY3Rpb24odCxyKXt2YXIgbj10LndpZHRoLzIsaT10LnhsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueC1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWT1mdW5jdGlvbih0LHIpe3ZhciBuPXQuaGVpZ2h0LzIsaT10LnlsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueS1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgodCxyKTtyZXR1cm4gbj09PTA/MDpuK3Qud2lkdGh9LGUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVk9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuPT09MD8wOm4rdC5oZWlnaHR9LGUuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKHQsciksaT1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuKm4raSppfSxlLmRpc3RhbmNlU3F1YXJlZFRvRmFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgodCxyKSxpPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkodCxyKTtyZXR1cm4gbipuK2kqaX0sZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZWFDYWNoZWQ9PW51bGwmJih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpLHRoaXMuYXJlYUNhY2hlZH0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGw8PXQueCYmdGhpcy54aD49dC54JiZ0aGlzLnlsPD10LnkmJnRoaXMueWg+PXQueX0sZX0oKTtnZC5SVHJlZUJvdW5kcz1RYX0pO3ZhciBJWHQ9SChfZD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBWHQ9KEVyKCksVXQoTXIpKSxVN2U9T2UoKSxYZz1GZSgpLHE3ZT1JZigpO19kLklTdGFja2luZ09yZGVyPXE3ZS5tYWtlRW51bShbInRvcGRvd24iLCJib3R0b211cCJdKTt2YXIgUFh0PXdpbmRvdy5NYXRoO2Z1bmN0aW9uIEc3ZShlLHQscixuKXtuPT09dm9pZCAwJiYobj0iYm90dG9tdXAiKTt2YXIgaT1BWHQubWFwKCksbz1BWHQubWFwKCksYT1uZXcgWGcuTWFwO249PT0idG9wZG93biImJihlPWUuc2xpY2UoKSxlLnJldmVyc2UoKSk7Zm9yKHZhciBzPTAsbD1lO3M8bC5sZW5ndGg7cysrKXtmb3IodmFyIGM9bFtzXSx1PW5ldyBYZy5NYXAsaD1jLmRhdGEoKSxmPWgubGVuZ3RoLHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdLGc9dChkLHAsYyksXz1fZC5ub3JtYWxpemVLZXkoZykseT0rcihkLHAsYykseD12b2lkIDAsYj15Pj0wP2k6bztiLmhhcyhfKT8oeD1iLmdldChfKSxiLnNldChfLHgreSkpOih4PTAsYi5zZXQoXyx5KSksdS5zZXQoXyx7b2Zmc2V0OngsdmFsdWU6eSxheGlzVmFsdWU6ZyxvcmlnaW5hbERhdHVtOmQsb3JpZ2luYWxEYXRhc2V0OmMsb3JpZ2luYWxJbmRleDpwfSl9YS5zZXQoYyx1KX1yZXR1cm4gYX1fZC5zdGFjaz1HN2U7ZnVuY3Rpb24gVzdlKGUpe3ZhciB0PW5ldyBYZy5NYXAscj1uZXcgWGcuTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7dmFyIGE9aS5vZmZzZXQraS52YWx1ZSxzPVhnLk1hdGgubWF4KFthLGkub2Zmc2V0XSxpLm9mZnNldCksbD1YZy5NYXRoLm1pbihbYSxpLm9mZnNldF0saS5vZmZzZXQpLGM9aS5heGlzVmFsdWU7dC5oYXMobyk/dC5nZXQobykuZXh0ZW50PHMmJnQuc2V0KG8se2V4dGVudDpzLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSk6dC5zZXQobyx7ZXh0ZW50OnMsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KSxyLmhhcyhvKT9yLmdldChvKS5leHRlbnQ+bCYmci5zZXQobyx7ZXh0ZW50OmwsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KTpyLnNldChvLHtleHRlbnQ6bCxheGlzVmFsdWU6YyxzdGFja2VkRGF0dW06aX0pfSl9KSx7bWF4aW11bUV4dGVudHM6dCxtaW5pbXVtRXh0ZW50czpyfX1fZC5zdGFja2VkRXh0ZW50cz1XN2U7ZnVuY3Rpb24gWTdlKGUsdCxyKXt2YXIgbj1bXTtlLmZvckVhY2goZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9cy5kYXRhKCksYz1sLmxlbmd0aCx1PTA7dTxjO3UrKyl7dmFyIGg9bFt1XTtpZighKHIhPW51bGwmJiFyKGgsdSxzKSkpe3ZhciBmPWEuZ2V0KF9kLm5vcm1hbGl6ZUtleSh0KGgsdSxzKSkpO24ucHVzaChmLnZhbHVlK2Yub2Zmc2V0KX19fSk7dmFyIGk9WGcuTWF0aC5tYXgobiwwKSxvPVhnLk1hdGgubWluKG4sMCk7cmV0dXJuW1BYdC5taW4obywwKSxQWHQubWF4KDAsaSldfV9kLnN0YWNrZWRFeHRlbnQ9WTdlO19kLm5vcm1hbGl6ZUtleT1VN2UubWVtb2l6ZShmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSl9KTt2YXIgJEE9SChDRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ0YsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0NGLlNIT1dfV0FSTklOR1M9ITA7Q0YuQUREX1RJVExFX0VMRU1FTlRTPSEwfSk7dmFyIEFGPUgoZ1M9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgajdlPSRBKCk7ZnVuY3Rpb24gTFh0KGUpeyFqN2UuU0hPV19XQVJOSU5HU3x8Y29uc29sZS53YXJuKGUpfWdTLndhcm49TFh0O2Z1bmN0aW9uIGtYdChlLHQpe2Zvcih2YXIgcj1bXSxuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMl09YXJndW1lbnRzW25dO3JldHVybiB0PT09MD8oZShyKSwtMSk6d2luZG93LnNldFRpbWVvdXQoZSx0LHIpfWdTLnNldFRpbWVvdXQ9a1h0O2Z1bmN0aW9uIFg3ZShlLHQscil7dmFyIG49bnVsbCxpPVtdLG89ZnVuY3Rpb24oKXt0LmFwcGx5KHIsaSl9O3JldHVybiBmdW5jdGlvbigpe2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQobiksbj1rWHQobyxlKX19Z1MuZGVib3VuY2U9WDdlO2Z1bmN0aW9uICQ3ZShlLHQscil7cj09PXZvaWQgMCYmKHI9IiIpLExYdCgiTWV0aG9kICIrZSsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiK3QrIi4gUGxlYXNlIHJlZmVyIHRvIHRoZSByZWxlYXNlIG5vdGVzLiAiK3IpfWdTLmRlcHJlY2F0ZWQ9JDdlfSk7dmFyIFJYdD1IKExpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSzdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9cix0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiBlLnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSxlLnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LHIpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PXIpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PXIpLHRoaXMuZXhpdEluZGV4PXJ9LGUucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PTB8fHIhPXRbbi0xXX0pfSxlfSgpO0xpdC5CdWNrZXQ9SzdlfSk7dmFyIFJpdD1IKGtpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoa2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWjdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuU2V0PT0iZnVuY3Rpb24iP3RoaXMuX2VzNlNldD1uZXcgd2luZG93LlNldDp0aGlzLl92YWx1ZXM9W10sdGhpcy5zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsPyh0aGlzLl9lczZTZXQuYWRkKHQpLHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSx0aGlzKToodGhpcy5oYXModCl8fCh0aGlzLl92YWx1ZXMucHVzaCh0KSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCksdGhpcyl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZTZXQhPW51bGwpe3ZhciByPXRoaXMuX2VzNlNldC5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSxyfXZhciBuPXRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpO3JldHVybiBuIT09LTE/KHRoaXMuX3ZhbHVlcy5zcGxpY2UobiwxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsP3RoaXMuX2VzNlNldC5oYXModCk6dGhpcy5fdmFsdWVzLmluZGV4T2YodCkhPT0tMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2U2V0IT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNlNldC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX3ZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe3QuY2FsbChyLG8sbyxuKX0pfSxlfSgpO2tpdC5TZXQ9WjdlfSk7dmFyIE5YdD1IKE5pdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSjdlPShkZSgpLFV0KHBlKSksUTdlPVJpdCgpLHR6ZT1mdW5jdGlvbihlKXtKN2UuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHI9dGhpcyxuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baV09YXJndW1lbnRzW2ldO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obyl7by5hcHBseShyLG4pfSksdGhpc30sdH0oUTdlLlNldCk7Tml0LkNhbGxiYWNrU2V0PXR6ZX0pO3ZhciBEWHQ9SChEaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRnPUlpdCgpLGV6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9lbnRpdGllcz1bXSx0aGlzLl9ydHJlZT1uZXcgJGcuUlRyZWV9cmV0dXJuIGUucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih0LHIsbil7aWYodGhpcy5fZW50aXRpZXM9dGhpcy5fZW50aXRpZXMuY29uY2F0KHQpLG4hPT12b2lkIDApZm9yKHZhciBpPSRnLlJUcmVlQm91bmRzLmJvdW5kcyhuKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7JGcuUlRyZWVCb3VuZHMuaXNCb3VuZHNPdmVybGFwQm91bmRzKGkscykmJnRoaXMuX3J0cmVlLmluc2VydChzLGEpfWVsc2UgZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7dGhpcy5fcnRyZWUuaW5zZXJ0KHMsYSl9fSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0KHQpLnBvcCgpfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFgodCkucG9wKCl9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WSh0KS5wb3AoKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RZKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzfSxlfSgpO0RpdC5FbnRpdHlTdG9yZT1lemV9KTt2YXIgT1h0PUgoT2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByemU9QWl0KCksbnplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuTWFwPT0iZnVuY3Rpb24iP3RoaXMuX2VzNk1hcD1uZXcgd2luZG93Lk1hcDp0aGlzLl9rZXlWYWx1ZVBhaXJzPVtdfXJldHVybiBlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtpZihyemUuaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCJOYU4gbWF5IG5vdCBiZSB1c2VkIGFzIGEga2V5IHRvIHRoZSBNYXAiKTtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5zZXQodCxyKSx0aGlzO2Zvcih2YXIgbj0wO248dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tuXS52YWx1ZT1yLHRoaXM7cmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMucHVzaCh7a2V5OnQsdmFsdWU6cn0pLHRoaXN9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5nZXQodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW3JdLnZhbHVlfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuaGFzKHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2TWFwIT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNk1hcC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX2tleVZhbHVlUGFpcnMuZm9yRWFjaChmdW5jdGlvbihvKXt0LmNhbGwocixvLnZhbHVlLG8ua2V5LG4pfSl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5kZWxldGUodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnNwbGljZShyLDEpLCEwO3JldHVybiExfSxlfSgpO09pdC5NYXA9bnplfSk7dmFyIHpYdD1IKHppdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBpemUoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKyspZm9yKHZhciBvPWlbbl0sYT1PYmplY3Qua2V5cyhvKSxzPTAsbD1hO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO3JbY109b1tjXX1yZXR1cm4gcn16aXQuYXNzaWduPWl6ZX0pO3ZhciBIWHQ9SChQRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGaXQ9RmUoKSxGWHQ9Il9fUGxvdHRhYmxlX0NsaWVudFRyYW5zbGF0b3IiO2Z1bmN0aW9uIG96ZShlKXt2YXIgdD1lLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxyPXRbRlh0XTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IEJYdCh0KSx0W0ZYdF09cikscn1QRi5nZXRUcmFuc2xhdG9yPW96ZTt2YXIgQlh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLl9yb290RWxlbWVudD10fXJldHVybiBlLnByb3RvdHlwZS5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24odCxyKXt2YXIgbj17eDp0LHk6cn0saT1GaXQuTWF0aC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtKHRoaXMuX3Jvb3RFbGVtZW50KTtpZihpPT1udWxsKXJldHVybiBuO3ZhciBvPUZpdC5NYXRoLmFwcGx5VHJhbnNmb3JtKGksbik7cmV0dXJuIG99LGUuaXNFdmVudEluc2lkZT1mdW5jdGlvbih0LHIpe3JldHVybiBGaXQuRE9NLmNvbnRhaW5zKHQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHIudGFyZ2V0KX0sZX0oKTtQRi5UcmFuc2xhdG9yPUJYdH0pO3ZhciBGZT1IKHFvPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtnPShkZSgpLFV0KHBlKSksYXplPV9YdCgpO3FvLkFycmF5PWF6ZTt2YXIgc3plPXhYdCgpO3FvLkNvbG9yPXN6ZTt2YXIgbHplPUNpdCgpO3FvLkRPTT1semU7dmFyIGN6ZT1BaXQoKTtxby5NYXRoPWN6ZTt2YXIgdXplPUlpdCgpO3FvLlJUcmVlPXV6ZTt2YXIgaHplPUlYdCgpO3FvLlN0YWNraW5nPWh6ZTt2YXIgZnplPUFGKCk7cW8uV2luZG93PWZ6ZTtLZy5fX2V4cG9ydFN0YXIoUlh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihOWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKFlnKCkscW8pO0tnLl9fZXhwb3J0U3RhcihEWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKE9YdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoelh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihSaXQoKSxxbyk7S2cuX19leHBvcnRTdGFyKEhYdCgpLHFvKX0pO3ZhciBIaXQ9SChLQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS0EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWWHQ9RmUoKSxCaXQ9SUYoKSxwemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtCaXQuZmx1c2goKX0sZX0oKTtLQS5JbW1lZGlhdGU9cHplO3ZhciBkemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtWWHQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKEJpdC5mbHVzaCl9LGV9KCk7S0EuQW5pbWF0aW9uRnJhbWU9ZHplO3ZhciBtemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fdGltZW91dE1zZWM9Vlh0LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChCaXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSxlfSgpO0tBLlRpbWVvdXQ9bXplfSk7dmFyIElGPUgoenU9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHp1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgX1M9RmUoKSxnemU9SWYoKSxMRj1IaXQoKSxKQT1uZXcgX1MuU2V0LFZpdD1uZXcgX1MuU2V0LGtGPSExLFVpdD0hMTt6dS5Qb2xpY3k9Z3plLm1ha2VFbnVtKFsiaW1tZWRpYXRlIiwiYW5pbWF0aW9uRnJhbWUiLCJ0aW1lb3V0Il0pO3ZhciBaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gX3plKGUpe2lmKGU9PW51bGwpcmV0dXJuIFpBO3N3aXRjaChlKXtjYXNlIHp1LlBvbGljeS5pbW1lZGlhdGU6WkE9bmV3IExGLkltbWVkaWF0ZTticmVhaztjYXNlIHp1LlBvbGljeS5hbmltYXRpb25GcmFtZTpaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7YnJlYWs7Y2FzZSB6dS5Qb2xpY3kudGltZW91dDpaQT1uZXcgTEYuVGltZW91dDticmVhaztkZWZhdWx0Ol9TLldpbmRvdy53YXJuKCJVbnJlY29nbml6ZWQgcmVuZGVyUG9saWN5OiAiK2UpfX16dS5yZW5kZXJQb2xpY3k9X3plO2Z1bmN0aW9uIHl6ZShlKXtVaXQmJl9TLldpbmRvdy53YXJuKCJSZWdpc3RlcmVkIHRvIHJlbmRlciB3aGlsZSBvdGhlciBjb21wb25lbnRzIGFyZSBmbHVzaGluZzogcmVxdWVzdCBtYXkgYmUgaWdub3JlZCIpLEpBLmFkZChlKSxxWHQoKX16dS5yZWdpc3RlclRvUmVuZGVyPXl6ZTtmdW5jdGlvbiBVWHQoZSl7Vml0LmFkZChlKSxKQS5hZGQoZSkscVh0KCl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9VVh0O2Z1bmN0aW9uIHZ6ZShlKXtVWHQoZSl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXQ9dnplO2Z1bmN0aW9uIHFYdCgpe2tGfHwoa0Y9ITAsWkEucmVuZGVyKCkpfWZ1bmN0aW9uIHh6ZSgpe2lmKGtGKXtWaXQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wdXRlTGF5b3V0KCl9KSxKQS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbmRlcigpfSksVWl0PSEwO3ZhciBlPW5ldyBfUy5TZXQ7SkEuZm9yRWFjaChmdW5jdGlvbih0KXt0cnl7dC5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKHIpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgcn0sMCksZS5hZGQodCl9fSksVml0PW5ldyBfUy5TZXQsSkE9ZSxrRj0hMSxVaXQ9ITF9fXp1LmZsdXNoPXh6ZX0pO3ZhciBrYz1IKFFBPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShRQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEdYdD0oRXIoKSxVdChNcikpLFJGPUlGKCkseVM9RmUoKSxiemU9T2UoKSxXWHQ9WWcoKSxZWHQ9SWYoKTtRQS5YQWxpZ25tZW50PVlYdC5tYWtlRW51bShbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdKTtRQS5ZQWxpZ25tZW50PVlYdC5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTt2YXIgd3plPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX292ZXJmbG93SGlkZGVuPSExLHRoaXMuX29yaWdpbj17eDowLHk6MH0sdGhpcy5feEFsaWdubWVudD0ibGVmdCIsdGhpcy5feUFsaWdubWVudD0idG9wIix0aGlzLl9pc1NldHVwPSExLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgeVMuQ2FsbGJhY2tTZXQsdGhpcy5fb25EZXRhY2hDYWxsYmFja3M9bmV3IHlTLkNhbGxiYWNrU2V0LHRoaXMuX2Nzc0NsYXNzZXMuYWRkKCJjb21wb25lbnQiKX1yZXR1cm4gZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHQ9V1h0LmNvZXJjZUV4dGVybmFsRDModCksdGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7cmV0dXJuIHRoaXMuaXNSb290KCkmJih0aGlzLl9yb290RWxlbWVudD10LHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKSx0aGlzLl9lbGVtZW50IT1udWxsP3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD10LmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSksdGhpcy5faXNBbmNob3JlZD0hMCx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLm9uQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0KHRoaXMpLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2V0dXB8fCh0aGlzLl9jc3NDbGFzc2VzLmZvckVhY2goZnVuY3Rpb24ocil7dC5fZWxlbWVudC5jbGFzc2VkKHIsITApfSksdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2JhY2tncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImJhY2tncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudD10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiY29udGVudCIsITApLHRoaXMuX2ZvcmVncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImZvcmVncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fb3ZlcmZsb3dIaWRkZW4/dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIiwhMCk6dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LHIpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbih0LHIsbil7aWYodD09bnVsbHx8cj09bnVsbHx8bj09bnVsbCl7aWYodGhpcy5fZWxlbWVudD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZih0aGlzLl9yb290RWxlbWVudCE9bnVsbCl7dD17eDowLHk6MH07dmFyIGk9dGhpcy5fcm9vdEVsZW1lbnQubm9kZSgpO3I9eVMuRE9NLmVsZW1lbnRXaWR0aChpKSxuPXlTLkRPTS5lbGVtZW50SGVpZ2h0KGkpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJudWxsIGFyZ3VtZW50cyBjYW5ub3QgYmUgcGFzc2VkIHRvIGNvbXB1dGVMYXlvdXQoKSBvbiBhIG5vbi1yb290LCB1bmFuY2hvcmVkIG5vZGUiKX12YXIgbz10aGlzLl9zaXplRnJvbU9mZmVyKHIsbiksYT1vLmhlaWdodCxzPW8ud2lkdGgsbD1lLl94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0sYz1lLl95QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feUFsaWdubWVudF0sdT10LngrKHItcykqbCxoPXQueSsobi1hKSpjO3JldHVybiB0aGlzLnNldEJvdW5kcyhzLGEsdSxoKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24odCxyLG4saSl7cmV0dXJuIG49PT12b2lkIDAmJihuPTApLGk9PT12b2lkIDAmJihpPTApLHRoaXMuX3dpZHRoPXQsdGhpcy5faGVpZ2h0PXIsdGhpcy5fb3JpZ2luPXt4Om4seTppfSx0aGlzLl9lbGVtZW50IT1udWxsJiZ0aGlzLl9lbGVtZW50LnN0eWxlcyh7bGVmdDpuKyJweCIsaGVpZ2h0OnIrInB4Iix0b3A6aSsicHgiLHdpZHRoOnQrInB4In0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIhPW51bGwmJnRoaXMuX3Jlc2l6ZUhhbmRsZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxyKTtyZXR1cm57d2lkdGg6dGhpcy5maXhlZFdpZHRoKCk/TWF0aC5taW4odCxuLm1pbldpZHRoKTp0LGhlaWdodDp0aGlzLmZpeGVkSGVpZ2h0KCk/TWF0aC5taW4ocixuLm1pbkhlaWdodCk6cn19LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZ0aGlzLndpZHRoKCk+PTAmJnRoaXMuaGVpZ2h0KCk+PTAmJlJGLnJlZ2lzdGVyVG9SZW5kZXIodGhpcyksdGhpc30sZS5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuX3NjaGVkdWxlQ29tcHV0ZUxheW91dD1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJlJGLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfSxlLnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzaXplSGFuZGxlcj10LHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKTp0aGlzLnBhcmVudCgpLnJlZHJhdygpKSx0aGlzfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGV0YWNoKCksdCE9bnVsbCl7dmFyIHI9dm9pZCAwO2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8YnplLmlzRWxlbWVudCh0KT9yPUdYdC5zZWxlY3QodCk6cj1XWHQuY29lcmNlRXh0ZXJuYWxEMyh0KSwhci5ub2RlKCl8fHIubm9kZSgpLm5vZGVOYW1lPT1udWxsKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKHIubm9kZSgpLm5vZGVOYW1lPT09InN2ZyIpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKHIpfWlmKHRoaXMuX2VsZW1lbnQ9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJJZiBhIENvbXBvbmVudCBoYXMgbmV2ZXIgYmVlbiByZW5kZXJlZCBiZWZvcmUsIHRoZW4gcmVuZGVyVG8gbXVzdCBiZSBnaXZlbiBhIG5vZGUgdG8gcmVuZGVyIHRvLCBvciBhIGQzLlNlbGVjdGlvbiwgb3IgYSBzZWxlY3RvciBzdHJpbmciKTtyZXR1cm4gUkYucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXIodGhpcyksUkYuZmx1c2goKSx0aGlzfSxlLnByb3RvdHlwZS54QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feEFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl94QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS55QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feUFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl95QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8hMTp0aGlzLl9lbGVtZW50PT1udWxsP3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0KX0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpczoodGhpcy5fZWxlbWVudD09bnVsbD90aGlzLl9jc3NDbGFzc2VzLmFkZCh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCwhMCksdGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXM6KHRoaXMuX2VsZW1lbnQ9PW51bGw/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITEpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudChudWxsKSx0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5vbkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJlbnQ7aWYodCE9PW51bGwmJiF0Lmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3JldHVybiB0aGlzLl9wYXJlbnQ9dCx0aGlzfSxlLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnQsYm90dG9tUmlnaHQ6e3g6dC54K3RoaXMud2lkdGgoKSx5OnQueSt0aGlzLmhlaWdodCgpfX19LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5kZXRhY2goKX0sZS5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LGUucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWlnaHR9LGUucHJvdG90eXBlLm9yaWdpbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuX29yaWdpbi54LHk6dGhpcy5fb3JpZ2luLnl9fSxlLnByb3RvdHlwZS5vcmlnaW5Ub1Jvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcmlnaW4oKSxyPXRoaXMucGFyZW50KCk7ciE9bnVsbDspe3ZhciBuPXIub3JpZ2luKCk7dC54Kz1uLngsdC55Kz1uLnkscj1yLnBhcmVudCgpfXJldHVybiB0fSxlLnByb3RvdHlwZS5yb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7IXQuaXNSb290KCk7KXQ9dC5wYXJlbnQoKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuaXNSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCk9PW51bGx9LGUucHJvdG90eXBlLmZvcmVncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcn0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LGUucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH0sZS5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfSxlLl94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sZS5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9LGV9KCk7UUEuQ29tcG9uZW50PXd6ZX0pO3ZhciBCdT1IKEZ1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZTPShFcigpLFV0KE1yKSksU3plPSExO2Z1bmN0aW9uIE16ZShlLHQscil7ZT09PXZvaWQgMCYmKGU9MiksdD09PXZvaWQgMCYmKHQ9IiQiKSxyPT09dm9pZCAwJiYocj0hMCk7dmFyIG49cWl0KGUpO3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz1uKE1hdGguYWJzKGkpKTtyZXR1cm4gbyE9PSIiJiYocj9vPXQrbzpvKz10LGk8MCYmKG89Ii0iK28pKSxvfX1GdS5jdXJyZW5jeT1NemU7ZnVuY3Rpb24gcWl0KGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKGUpfX1GdS5maXhlZD1xaXQ7ZnVuY3Rpb24gRXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtpZih0eXBlb2YgdD09Im51bWJlciIpe3ZhciByPU1hdGgucG93KDEwLGUpO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZCh0KnIpL3IpfWVsc2UgcmV0dXJuIFN0cmluZyh0KX19RnUuZ2VuZXJhbD1FemU7ZnVuY3Rpb24gVHplKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSl9fUZ1LmlkZW50aXR5PVR6ZTtmdW5jdGlvbiBDemUoZSl7ZT09PXZvaWQgMCYmKGU9MCk7dmFyIHQ9cWl0KGUpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yKjEwMCxpPXIudG9TdHJpbmcoKSxvPU1hdGgucG93KDEwLGkubGVuZ3RoLShpLmluZGV4T2YoIi4iKSsxKSk7cmV0dXJuIG49cGFyc2VJbnQoKG4qbykudG9TdHJpbmcoKSwxMCkvbyx0KG4pKyIlIn19RnUucGVyY2VudGFnZT1DemU7ZnVuY3Rpb24gQXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdlMuZm9ybWF0KCIuIitlKyJzIikodCl9fUZ1LnNpU3VmZml4PUF6ZTtmdW5jdGlvbiBQemUoZSl7ZT09PXZvaWQgMCYmKGU9MyksTkYoZSk7dmFyIHQ9IktNQlRRIixyPXZTLmZvcm1hdCgiLiIrZSsiZSIpLG49dlMuZm9ybWF0KCIuIitlKyJmIiksaT1NYXRoLnBvdygxMCwzKih0Lmxlbmd0aCsxKSksbz1NYXRoLnBvdygxMCwtZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPU1hdGguYWJzKGEpO2lmKChzPG98fHM+PWkpJiZzIT09MClyZXR1cm4gcihhKTtmb3IodmFyIGw9LTE7cz49TWF0aC5wb3coMWUzLGwrMikmJmw8dC5sZW5ndGgtMTspbCsrO3ZhciBjPSIiO3JldHVybiBsPT09LTE/Yz1uKGEpOmM9bihhL01hdGgucG93KDFlMyxsKzEpKSt0W2xdLChhPjAmJmMuc3Vic3RyKDAsNCk9PT0iMTAwMCJ8fGE8MCYmYy5zdWJzdHIoMCw1KT09PSItMTAwMCIpJiYobDx0Lmxlbmd0aC0xPyhsKyssYz1uKGEvTWF0aC5wb3coMWUzLGwrMSkpK3RbbF0pOmM9cihhKSksY319RnUuc2hvcnRTY2FsZT1QemU7ZnVuY3Rpb24gSXplKCl7dmFyIGU9W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpIT09MH19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSSAlcCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCkhPT0wfX0se3NwZWNpZmllcjoiJWEgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSE9PTAmJnQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKSE9PTB9fV07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpLnByZWRpY2F0ZSh0KX0pLG49ci5sZW5ndGg+MD9yWzBdLnNwZWNpZmllcjoiJVkiO3JldHVybiB2Uy50aW1lRm9ybWF0KG4pKHQpfX1GdS5tdWx0aVRpbWU9SXplO2Z1bmN0aW9uIEx6ZShlLHQpe3JldHVybiB0PT09dm9pZCAwJiYodD1TemUpLHQ/dlMudXRjRm9ybWF0KGUpOnZTLnRpbWVGb3JtYXQoZSl9RnUudGltZT1MemU7ZnVuY3Rpb24gTkYoZSl7aWYoZTwwfHxlPjIwKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYW4gaW50ZWdlciIpfX0pO3ZhciB0ND1IKERGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShERiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGt6ZT0oZGUoKSxVdChwZSkpLHlkPShFcigpLFV0KE1yKSksR2l0PV9sKCksUnplPWtjKCksalh0PUJ1KCkseFM9RmUoKSxOemU9SWYoKTtERi5BeGlzT3JpZW50YXRpb249TnplLm1ha2VFbnVtKFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pO3ZhciBEemU9ZnVuY3Rpb24oZSl7a3plLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEscj09bnVsbHx8bj09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9cixpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihqWHQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1qWHQuaWRlbnRpdHkoKSxpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZXNjYWxlQ2FsbGJhY2spfSx0LnByb3RvdHlwZS50aWNrTGFiZWxEYXRhT25FbGVtZW50PWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwpe2Zvcih2YXIgbjtyIT1udWxsJiZyLmNsYXNzTGlzdCYmbj09PXZvaWQgMDspci5jbGFzc0xpc3QuY29udGFpbnModC5USUNLX0xBQkVMX0NMQVNTKT9uPXI6cj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT12b2lkIDA/dm9pZCAwOnlkLnNlbGVjdChyKS5kYXR1bSgpfX0sdC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9MCxvPTA7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYobz10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HO28rPWEqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCl9fWVsc2UgaWYoaT10aGlzLl9jb21wdXRlV2lkdGgoKSt0aGlzLl9tYXJnaW4sdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMip0Ll9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc7aSs9YSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKX1yZXR1cm57bWluV2lkdGg6aSxtaW5IZWlnaHQ6b319LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0hvcml6b250YWwoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5fc2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5yZXF1ZXN0ZWRTcGFjZShyLG4pO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3t3aWR0aDpyLGhlaWdodDppLm1pbkhlaWdodH06e2hlaWdodDpuLHdpZHRoOmkubWluV2lkdGh9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90aWNrTWFya0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fYmFzZWxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxpbmUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tcmVjdC1jb250YWluZXIiLCEwKTt2YXIgcj10aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiwhMCksbj1uZXcgR2l0LlN2Z0NvbnRleHQoci5ub2RlKCkpO3RoaXMuX2Fubm90YXRpb25NZWFzdXJlcj1uZXcgR2l0LkNhY2hlTWVhc3VyZXIobiksdGhpcy5fYW5ub3RhdGlvbldyaXRlcj1uZXcgR2l0LldyaXRlcih0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIsbil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLG49dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxpPW4uZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShuKTtyZXR1cm4gaS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSkseWQuc2VsZWN0KGkubm9kZXMoKVswXSkuY2xhc3NlZCh0LkVORF9USUNLX01BUktfQ0xBU1MsITApLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCghMCkpLHlkLnNlbGVjdChpLm5vZGVzKClbci5sZW5ndGgtMV0pLmNsYXNzZWQodC5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyB4Uy5NYXAsbz10aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCk7by5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBrPXIuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKHIuYW5ub3RhdGlvbkZvcm1hdHRlcigpKFApKSxPPXt3aWR0aDprLndpZHRoKzIqbixoZWlnaHQ6ay5oZWlnaHQrMipufTtpLnNldChQLE8pfSk7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMipuLHM9dGhpcy5fYW5ub3RhdGlvblRvVGllcihpKSxsPW5ldyB4Uy5TZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHU9dGhpcy5fY29yZVNpemUoKSxoPU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGMtdSkvYSkpO3MuZm9yRWFjaChmdW5jdGlvbihQLGspeyhQPT09LTF8fFA+PWgpJiZsLmFkZChrKX0pO3ZhciBmPWZ1bmN0aW9uKFAsayxPKXt2YXIgRD1QLnNlbGVjdEFsbCgiLiIrTykuZGF0YShvKSxCPUQuZW50ZXIoKS5hcHBlbmQoaykuY2xhc3NlZChPLCEwKS5tZXJnZShEKTtyZXR1cm4gRC5leGl0KCkucmVtb3ZlKCksQn0scD1mdW5jdGlvbihQKXtzd2l0Y2goci5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6cmV0dXJuIHMuZ2V0KFApKmErdTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gYy11LXMuZ2V0KFApKmF9fSxkPWZ1bmN0aW9uKFApe3JldHVybiByLl9zY2FsZS5zY2FsZShQKX0sZz1mdW5jdGlvbihQKXtyZXR1cm4gbC5oYXMoUCk/ImhpZGRlbiI6InZpc2libGUifSxfO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpfPTA7YnJlYWs7Y2FzZSJ0b3AiOl89dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOl89dGhpcy53aWR0aCgpO2JyZWFrfXZhciB5PXRoaXMuaXNIb3Jpem9udGFsKCk7Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGluZS1jb250YWluZXIiKSwibGluZSIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1MpLmF0dHJzKHt4MTp5P2Q6Xyx4Mjp5P2Q6cCx5MTp5P186ZCx5Mjp5P3A6ZCx2aXNpYmlsaXR5Omd9KSxmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiksImNpcmNsZSIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUykuYXR0cnMoe2N4Onk/ZDpfLGN5Onk/XzpkLHI6M30pO3ZhciB4PWZ1bmN0aW9uKFApe3N3aXRjaChyLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpyZXR1cm4gcChQKTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gcChQKS1pLmdldChQKS5oZWlnaHR9fTtmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIpLCJyZWN0Iix0LkFOTk9UQVRJT05fUkVDVF9DTEFTUykuYXR0cnMoe3g6eT9kOngseTp5P3g6ZCx3aWR0aDp5P2Z1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS53aWR0aH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH0saGVpZ2h0Onk/ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLndpZHRofSx2aXNpYmlsaXR5Omd9KTt2YXIgYj10aGlzLl9hbm5vdGF0aW9uV3JpdGVyLFM9dGhpcy5hbm5vdGF0aW9uRm9ybWF0dGVyKCksQz1mKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiKSwiZyIsdC5BTk5PVEFUSU9OX0xBQkVMX0NMQVNTKTtDLnNlbGVjdEFsbCgiLnRleHQtY29udGFpbmVyIikucmVtb3ZlKCksQy5hdHRycyh7dHJhbnNmb3JtOmZ1bmN0aW9uKFApe3ZhciBrPXk/ZChQKTp4KFApLE89eT94KFApOmQoUCk7cmV0dXJuInRyYW5zbGF0ZSgiK2srIiwiK08rIikifSx2aXNpYmlsaXR5Omd9KS5lYWNoKGZ1bmN0aW9uKFApe2Iud3JpdGUoUyhQKSx5P2kuZ2V0KFApLndpZHRoOmkuZ2V0KFApLmhlaWdodCx5P2kuZ2V0KFApLmhlaWdodDppLmdldChQKS53aWR0aCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246eT8wOjkwfSx5ZC5zZWxlY3QodGhpcykubm9kZSgpKX0pfSx0LnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiB4Uy5BcnJheS51bmlxKHRoaXMuYW5ub3RhdGVkVGlja3MoKS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/ITE6eFMuTWF0aC5pblJhbmdlKHIuX3NjYWxlLnNjYWxlKGkpLG5bMF0sblsxXSl9KSl9LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX2NvbXB1dGVIZWlnaHQoKTp0aGlzLl9jb21wdXRlV2lkdGgoKTtyZXR1cm4gTWF0aC5taW4obixyKX0sdC5wcm90b3R5cGUuX2Fubm90YXRpb25UaWVySGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HfSx0LnByb3RvdHlwZS5fYW5ub3RhdGlvblRvVGllcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W1tdXSxvPW5ldyB4Uy5NYXAsYT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1uLl9zY2FsZS5zY2FsZShzKSxjPXIuZ2V0KHMpLndpZHRoO2lmKGw8MHx8bCtjPmEpe28uc2V0KHMsLTEpO3JldHVybn1mb3IodmFyIHU9ZnVuY3Rpb24oZil7cmV0dXJuIGlbZl0uc29tZShmdW5jdGlvbihwKXt2YXIgZD1uLl9zY2FsZS5zY2FsZShwKSxnPXIuZ2V0KHApLndpZHRoO3JldHVybiBsK2M+PWQmJmw8PWQrZ30pfSxoPTA7dShoKTspaCsrLGkubGVuZ3RoPT09aCYmaS5wdXNoKFtdKTtpW2hdLnB1c2gocyksby5zZXQocyxoKX0pLG99LHQucHJvdG90eXBlLl9yZW1vdmVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1saW5lIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWNpcmNsZSIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1yZWN0IikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxhYmVsIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2g9ZnVuY3Rpb24oKXt2YXIgcj17eDE6MCx5MTowLHgyOjAseTI6MH07c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6ci54Mj10aGlzLndpZHRoKCk7YnJlYWs7Y2FzZSJ0b3AiOnIueDI9dGhpcy53aWR0aCgpLHIueTE9dGhpcy5oZWlnaHQoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJsZWZ0IjpyLngxPXRoaXMud2lkdGgoKSxyLngyPXRoaXMud2lkdGgoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJyaWdodCI6ci55Mj10aGlzLmhlaWdodCgpO2JyZWFrfXJldHVybiByfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9ITEpO3ZhciBpPXt4MTowLHkxOjAseDI6MCx5MjowfSxvPWZ1bmN0aW9uKHMpe3JldHVybiBuLl9zY2FsZS5zY2FsZShzKX07dGhpcy5pc0hvcml6b250YWwoKT8oaS54MT1vLGkueDI9byk6KGkueTE9byxpLnkyPW8pO3ZhciBhPXI/dGhpcy5fZW5kVGlja0xlbmd0aDp0aGlzLl9pbm5lclRpY2tMZW5ndGg7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6aS55Mj1hO2JyZWFrO2Nhc2UidG9wIjppLnkxPXRoaXMuaGVpZ2h0KCksaS55Mj10aGlzLmhlaWdodCgpLWE7YnJlYWs7Y2FzZSJsZWZ0IjppLngxPXRoaXMud2lkdGgoKSxpLngyPXRoaXMud2lkdGgoKS1hO2JyZWFrO2Nhc2UicmlnaHQiOmkueDI9YTticmVha31yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3NldERlZmF1bHRBbGlnbm1lbnQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0aGlzLnlBbGlnbm1lbnQoInRvcCIpO2JyZWFrO2Nhc2UidG9wIjp0aGlzLnlBbGlnbm1lbnQoImJvdHRvbSIpO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy54QWxpZ25tZW50KCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMueEFsaWdubWVudCgibGVmdCIpO2JyZWFrfX0sdC5wcm90b3R5cGUuaXNIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09InRvcCJ8fHRoaXMuX29yaWVudGF0aW9uPT09ImJvdHRvbSJ9LHQucHJvdG90eXBlLmdldFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NjYWxlfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5pbm5lclRpY2tMZW5ndGg9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImlubmVyIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmRUaWNrTGVuZ3RoPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg7aWYocjwwKXRocm93IG5ldyBFcnJvcigiZW5kIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fZW5kVGlja0xlbmd0aD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuX21heExhYmVsVGlja0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCk/TWF0aC5tYXgodGhpcy5pbm5lclRpY2tMZW5ndGgoKSx0aGlzLmVuZFRpY2tMZW5ndGgoKSk6dGhpcy5pbm5lclRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUudGlja0xhYmVsUGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInRpY2sgbGFiZWwgcGFkZGluZyBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm1hcmdpbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9tYXJnaW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibWFyZ2luIHNpemUgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl9tYXJnaW49cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uO3ZhciBuPXIudG9Mb3dlckNhc2UoKTtpZihuIT09InRvcCImJm4hPT0iYm90dG9tIiYmbiE9PSJsZWZ0IiYmbiE9PSJyaWdodCIpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBvcmllbnRhdGlvbiIpO3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj1uLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuc2hvd0VuZFRpY2tMYWJlbHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc2hvd0VuZFRpY2tMYWJlbHM6KHRoaXMuX3Nob3dFbmRUaWNrTGFiZWxzPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3Nob3dBbGxUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19NQVJLX0NMQVNTKS5lYWNoKGZ1bmN0aW9uKCl7eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9LHQucHJvdG90eXBlLl9zaG93QWxsVGlja0xhYmVscz1mdW5jdGlvbigpe3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUykuZWFjaChmdW5jdGlvbigpe3lkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pfSx0LnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUyk7bi5lbXB0eSgpfHxuLmVhY2goZnVuY3Rpb24oaSxvKXt4Uy5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX01BUktfQ0xBU1MpLG49dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24obyxhKXt2YXIgcz15ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gcz09PSJpbmhlcml0Inx8cz09PSJ2aXNpYmxlIn0pLGk9bi5kYXRhKCk7ci5lYWNoKGZ1bmN0aW9uKG8sYSl7aS5pbmRleE9mKG8pPT09LTEmJnlkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSx0LkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLHQuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLHQuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsdC5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLHQuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsdH0oUnplLkNvbXBvbmVudCk7REYuQXhpcz1EemV9KTt2YXIgJFh0PUgoaml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPemU9KGRlKCksVXQocGUpKSxXaXQ9KEVyKCksVXQoTXIpKSxPRj1fbCgpLHp6ZT1rYygpLFhYdD1GZSgpLFlpdD10NCgpLEZ6ZT1mdW5jdGlvbihlKXtPemUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe249PT12b2lkIDAmJihuPSJib3R0b20iKTt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxBbmdsZT0wLGkuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MCxpLmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIiksaX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciByPW5ldyBPRi5XcmFwcGVyO3JldHVybiB0aGlzLl90aWNrTGFiZWxNYXhMaW5lcyE9bnVsbCYmci5tYXhMaW5lcyh0aGlzLl90aWNrTGFiZWxNYXhMaW5lcykscn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93cml0ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9GLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgT0YuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgT0YuQ2FjaGVNZWFzdXJlcih0aGlzLl90eXBlc2V0dGVyQ29udGV4dCl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3KCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5pc0hvcml6b250YWwoKT8wOnRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSt0aGlzLm1hcmdpbigpOjA7aWYodGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoPT09MClyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07aWYodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKTt0aGlzLmlzSG9yaXpvbnRhbCgpP28rPWE6aSs9YX12YXIgcz10aGlzLl9tZWFzdXJlVGlja0xhYmVscyhyLG4pO3JldHVybnttaW5XaWR0aDpzLnVzZWRXaWR0aCtpLG1pbkhlaWdodDpzLnVzZWRIZWlnaHQrb319LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMucmVxdWVzdGVkU3BhY2UodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpLm1pbkhlaWdodDp0aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5XaWR0aCxpPXRoaXMubWFyZ2luKCkrdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSxvPW4taTtyZXR1cm4gTWF0aC5taW4obyxyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm4genplLkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbil9LHQucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHIsbil7cj09PXZvaWQgMCYmKHI9dGhpcy5fc2NhbGUpLG49PT12b2lkIDAmJihuPXIuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9dGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxvPXQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKmksYT1NYXRoLmNlaWwoby9yLnN0ZXBXaWR0aCgpKTtyZXR1cm57ZG9tYWluOm4uZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIGwlYT09PTB9KSxzdGVwV2lkdGg6YSpyLnN0ZXBXaWR0aCgpfX0sdC5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYociE9PTAmJnIhPT05MCYmciE9PS05MCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrcisiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHI8LTgwfHxyPjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIityKyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sdC5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbyxhO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpvPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGE9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGE9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGE9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWt9bi5lYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPVdpdC5zZWxlY3QodGhpcyksYz1pLmlzSG9yaXpvbnRhbCgpP3I6aS53aWR0aCgpLWkuX3RpY2tTcGFjZVJlcXVpcmVkKCksdT1pLmlzSG9yaXpvbnRhbCgpP2kuaGVpZ2h0KCktaS5fdGlja1NwYWNlUmVxdWlyZWQoKTpyLGg9e3hBbGlnbjpvW2kub3JpZW50YXRpb24oKV0seUFsaWduOmFbaS5vcmllbnRhdGlvbigpXSx0ZXh0Um90YXRpb246aS50aWNrTGFiZWxBbmdsZSgpLHRleHRTaGVhcjppLnRpY2tMYWJlbFNoZWFyQW5nbGUoKX07aWYoaS5fdGlja0xhYmVsTWF4V2lkdGghPW51bGwpe2lmKGkub3JpZW50YXRpb24oKT09PSJsZWZ0IiYmYz5pLl90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIGY9Yy1pLl90aWNrTGFiZWxNYXhXaWR0aCxwPWwuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitmKyIsIDApIjtsLmF0dHIoInRyYW5zZm9ybSIscCl9Yz1NYXRoLm1pbihjLGkuX3RpY2tMYWJlbE1heFdpZHRoKX1pLl93cml0ZXIud3JpdGUoaS5mb3JtYXR0ZXIoKShzKSxjLHUsaCxsLm5vZGUoKSl9KX0sdC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX3NjYWxlLGE9by5jbG9uZVdpdGhvdXRQcm92aWRlcnMoKS5yYW5nZShbMCx0aGlzLmlzSG9yaXpvbnRhbCgpP3I6bl0pLHM9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhhKSxsPXMuZG9tYWluLGM9cy5zdGVwV2lkdGgsdT1yLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKHU9Yyx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJih1PW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksdT1NYXRoLm1heCh1LDApKTt2YXIgaD1jO3RoaXMuaXNIb3Jpem9udGFsKCkmJihoPW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJihoPXItdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksaD1NYXRoLm1heChoLDApKSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCE9bnVsbCYmKHU9TWF0aC5taW4odSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCkpO3ZhciBmPWwubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBpLl93cmFwcGVyLndyYXAoaS5mb3JtYXR0ZXIoKSh4KSxpLl9tZWFzdXJlcix1LGgpfSkscD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/V2l0LnN1bTpYWHQuTWF0aC5tYXgsZD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/WFh0Lk1hdGgubWF4OldpdC5zdW0sZz1wKGYsZnVuY3Rpb24oeCl7cmV0dXJuIGkuX21lYXN1cmVyLm1lYXN1cmUoeC53cmFwcGVkVGV4dCkud2lkdGh9LDApLF89ZChmLGZ1bmN0aW9uKHgpe3JldHVybiBpLl9tZWFzdXJlci5tZWFzdXJlKHgud3JhcHBlZFRleHQpLmhlaWdodH0sMCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlIT09MCYmKHk9W18sZ10sZz15WzBdLF89eVsxXSkse3VzZWRXaWR0aDpnLHVzZWRIZWlnaHQ6X307dmFyIHl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxvPWkuZG9tYWluLGE9aS5zdGVwV2lkdGgscz1hO3RoaXMuaXNIb3Jpem9udGFsKCkmJnRoaXMuX3RpY2tMYWJlbE1heFdpZHRoIT1udWxsJiYocz1NYXRoLm1pbihzLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIGw9ZnVuY3Rpb24ocCxkKXt2YXIgZz1uLnNjYWxlKHApLXMvMixfPXIuaXNIb3Jpem9udGFsKCk/ZzowLHk9ci5pc0hvcml6b250YWwoKT8wOmc7cmV0dXJuInRyYW5zbGF0ZSgiK18rIiwiK3krIikifSxjPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK1lpdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEobyksdT1jLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChZaXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShjKTtjLmV4aXQoKS5yZW1vdmUoKSx1LmF0dHIoInRyYW5zZm9ybSIsbCksdS50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MoYSx1KTt2YXIgaD10aGlzLm9yaWVudGF0aW9uKCk9PT0icmlnaHQiP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCxmPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwiK2YrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsdH0oWWl0LkF4aXMpO2ppdC5DYXRlZ29yeT1GemV9KTt2YXIgS1h0PUgoJGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCemU9KGRlKCksVXQocGUpKSx6Rj0oRXIoKSxVdChNcikpLFhpdD1fbCgpLEh6ZT1CdSgpLGJTPUZlKCksd1M9dDQoKSxWemU9ZnVuY3Rpb24oZSl7QnplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIixpLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMSxpLmZvcm1hdHRlcihIemUuZ2VuZXJhbCgpKSxpfXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgcj1uZXcgWGl0LlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSx3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO3RoaXMuX21lYXN1cmVyPW5ldyBYaXQuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBYaXQuV3JhcHBlcigpLm1heExpbmVzKDEpfSx0LnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24/dGhpcy5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoKCk6dGhpcy5fY29tcHV0ZUV4YWN0VGV4dFdpZHRoKCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVFeGFjdFRleHRXaWR0aD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXRUaWNrVmFsdWVzKCksaT1uLm1hcChmdW5jdGlvbihvKXt2YXIgYT1yLmZvcm1hdHRlcigpKG8pO3JldHVybiByLl9tZWFzdXJlci5tZWFzdXJlKGEpLndpZHRofSk7cmV0dXJuIGJTLk1hdGgubWF4KGksMCl9LHQucHJvdG90eXBlLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0VGlja1ZhbHVlcygpLGk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgiTSIpLndpZHRoLG89bi5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9ci5mb3JtYXR0ZXIoKShhKTtyZXR1cm4gcy5sZW5ndGgqaX0pO3JldHVybiBiUy5NYXRoLm1heChvLDApfSx0LnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQ7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9zY2FsZSxuPXIuZG9tYWluKCksaT1uWzBdPD1uWzFdP25bMF06blsxXSxvPW5bMF0+PW5bMV0/blswXTpuWzFdO3JldHVybiByLnRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhPj1pJiZhPD1vfSl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9pc1NldHVwKXtpZighdGhpcy5pc0hvcml6b250YWwoKSl7dmFyIHI9dGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYocj50aGlzLndpZHRoKCl8fHI8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0saT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSxvPXRoaXMudGlja0xhYmVsUGFkZGluZygpLGE9Im1pZGRsZSIscz0wLGw9MCxjPTAsdT0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlImxlZnQiOmE9ImVuZCIscz0tbyx1PW87YnJlYWs7Y2FzZSJjZW50ZXIiOnU9aStvO2JyZWFrO2Nhc2UicmlnaHQiOmE9InN0YXJ0IixzPW8sdT1vO2JyZWFrfWVsc2Ugc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlInRvcCI6bi5keT0iLTAuM2VtIixjPW8sbD0tbzticmVhaztjYXNlImNlbnRlciI6Yz1pK287YnJlYWs7Y2FzZSJib3R0b20iOm4uZHk9IjFlbSIsYz1vLGw9bzticmVha312YXIgaD10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6bi54PWgueDEsbi5keT0iMC45NWVtIixsPWgueTErdTticmVhaztjYXNlInRvcCI6bi54PWgueDEsbi5keT0iLS4yNWVtIixsPWgueTEtdTticmVhaztjYXNlImxlZnQiOmE9ImVuZCIscz1oLngxLWMsbi55PWgueTE7YnJlYWs7Y2FzZSJyaWdodCI6YT0ic3RhcnQiLHM9aC54MStjLG4ueT1oLnkxO2JyZWFrfXZhciBmPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxwPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShmKTtwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHApO2Quc3R5bGUoInRleHQtYW5jaG9yIixhKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKS5hdHRycyhuKS50ZXh0KGZ1bmN0aW9uKF8pe3JldHVybiByLmZvcm1hdHRlcigpKF8pfSk7dmFyIGc9InRyYW5zbGF0ZSgiK3MrIiwgIitsKyIpIjtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsZyksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKXx8dGhpcy5faGlkZUVuZFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscygpLHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nIT09ImNlbnRlciImJnRoaXMuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWwoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzt2YXIgbj1yLnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoIShuPT09ImxlZnQifHxuPT09ImNlbnRlciJ8fG49PT0icmlnaHQiKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgaG9yaXpvbnRhbCBOdW1lcmljQXhpcyIpfWVsc2UgaWYoIShuPT09InRvcCJ8fG49PT0iY2VudGVyInx8bj09PSJib3R0b20iKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgdmVydGljYWwgTnVtZXJpY0F4aXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc9bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uOih0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1yLHRoaXMpfSx0LnByb3RvdHlwZS5faGlkZUVuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO2lmKG4uc2l6ZSgpIT09MCl7dmFyIGk9bi5ub2RlcygpWzBdO2JTLkRPTS5jbGllbnRSZWN0SW5zaWRlKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscil8fHpGLnNlbGVjdChpKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO3ZhciBvPW4ubm9kZXMoKVtuLnNpemUoKS0xXTtiUy5ET00uY2xpZW50UmVjdEluc2lkZShvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx6Ri5zZWxlY3Qobykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX19LHQucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKG8sYSl7dmFyIHM9ekYuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIHM9PT0iaW5oZXJpdCJ8fHM9PT0idmlzaWJsZSJ9KSxuPXIubm9kZXMoKS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSxpPTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoaSxuKSYmaTxuLmxlbmd0aDspaSs9MTtyLmVhY2goZnVuY3Rpb24obyxhKXt2YXIgcz16Ri5zZWxlY3QodGhpcyk7YSVpIT09MCYmcy5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLl9oYXNPdmVybGFwV2l0aEludGVydmFsPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCkqMyxvPW4ubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBiUy5ET00uZXhwYW5kUmVjdChjLGkpfSksYT0wO2E8by5sZW5ndGgtcjthKz1yKXt2YXIgcz1vW2FdLGw9b1thK3JdO2lmKGJTLkRPTS5jbGllbnRSZWN0c092ZXJsYXAocyxsKSlyZXR1cm4hMX1yZXR1cm4hMH0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdH0od1MuQXhpcyk7JGl0Lk51bWVyaWM9VnplfSk7dmFyIFpYdD1IKEZGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFV6ZT1GZSgpO2Z1bmN0aW9uIHF6ZShlKXtpZihlPD0wKXRocm93IG5ldyBFcnJvcigiaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5kb21haW4oKSxuPU1hdGgubWluKHJbMF0sclsxXSksaT1NYXRoLm1heChyWzBdLHJbMV0pLG89TWF0aC5jZWlsKG4vZSkqZSxhPU1hdGguZmxvb3IoKGktbykvZSkrMSxzPW4lZT09PTA/W106W25dLGw9VXplLk1hdGgucmFuZ2UoMCxhKS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIG8rdSplfSksYz1pJWU9PT0wP1tdOltpXTtyZXR1cm4gcy5jb25jYXQobCkuY29uY2F0KGMpfX1GRi5pbnRlcnZhbFRpY2tHZW5lcmF0b3I9cXplO2Z1bmN0aW9uIEd6ZSgpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmRlZmF1bHRUaWNrcygpO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihyLG4pe3JldHVybiByJTE9PT0wfHxuPT09MHx8bj09PXQubGVuZ3RoLTF9KX19RkYuaW50ZWdlclRpY2tHZW5lcmF0b3I9R3plfSk7dmFyIGU0PUgoSXY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEl2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBaaXQoZSx0LHIpe3JldHVybiByLShyLWUpKnR9SXYuem9vbU91dD1aaXQ7ZnVuY3Rpb24gS2l0KGUsdCxyKXtyZXR1cm4oZSp0LXIpLyh0LTEpfWZ1bmN0aW9uIFd6ZShlLHQscixuLGksbyxhKXtyZXR1cm4gdD1KWHQoZSx0LG4saSksUVh0KGUsdCxyLG8sYSl9SXYuY29uc3RyYWluZWRab29tPVd6ZTtmdW5jdGlvbiBKWHQoZSx0LHIsbil7dmFyIGk9dD4xLG89aT9uOnI7aWYobz09bnVsbClyZXR1cm4gdDt2YXIgYT1lLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkscz1hWzBdLGw9YVsxXSxjPU1hdGguYWJzKGwtcyksdT1pP01hdGgubWluOk1hdGgubWF4O3JldHVybiB1KHQsby9jKX1Jdi5jb25zdHJhaW5ab29tRXh0ZW50cz1KWHQ7ZnVuY3Rpb24gUVh0KGUsdCxyLG4saSl7aWYodDw9MSlyZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OnR9O2lmKG49PW51bGwmJmk9PW51bGwpcmV0dXJue2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fTt2YXIgbz10JHQoZSksYT1qemUoZSkscz1hPzEvMDotMS8wLGw9YT8tMS8wOjEvMDtuPW49PW51bGw/czpuLGk9aT09bnVsbD9sOmk7dmFyIGM9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHU9Y1swXSxoPWNbMV0sZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaSkscD1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaCksZD1aaXQocCx0LHIpLGc9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKG4pLF89ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHUpLHk9Wml0KF8sdCxyKSx4PU1hdGguYWJzKGYtZyksYj1NYXRoLmFicyhkLXkpO2lmKGI+eCl7dmFyIFM9KGYtZykvKHAtXyk7aWYoUyE9PTEpe3ZhciBDPUtpdChwLFMsZik7cmV0dXJue2NlbnRlclBvaW50OkMsem9vbUFtb3VudDpTfX1lbHNlIHJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6U319ZWxzZSByZXR1cm4gZD5mIT1vP3tjZW50ZXJQb2ludDpLaXQocCx0LGYpLHpvb21BbW91bnQ6dH06eTxnIT1vP3tjZW50ZXJQb2ludDpLaXQoXyx0LGcpLHpvb21BbW91bnQ6dH06e2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fX1Jdi5jb25zdHJhaW5ab29tVmFsdWVzPVFYdDtmdW5jdGlvbiBZemUoZSx0LHIsbil7dmFyIGk9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLG89aVswXSxhPWlbMV0scz10JHQoZSk7aWYodD4wIT09cyl7dmFyIGw9bjtpZihsIT1udWxsKXt2YXIgYz1lLnNjYWxlVHJhbnNmb3JtYXRpb24oYSksdT1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1heDpNYXRoLm1pbikoYyt0LHUpLWN9fWVsc2V7dmFyIGw9cjtpZihsIT1udWxsKXt2YXIgaD1lLnNjYWxlVHJhbnNmb3JtYXRpb24obyksZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1pbjpNYXRoLm1heCkoaCt0LGYpLWh9fXJldHVybiB0fUl2LmNvbnN0cmFpbmVkVHJhbnNsYXRpb249WXplO2Z1bmN0aW9uIHQkdChlKXt2YXIgdD1lLnJhbmdlKCk7cmV0dXJuIHRbMV08dFswXX1mdW5jdGlvbiBqemUoZSl7dmFyIHQ9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3JldHVybiB0WzFdPHRbMF19fSk7dmFyIEx2PUgoSml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlJHQ9RmUoKSxYemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSx0aGlzLl91cGRhdGVJZD0wLHRoaXMuX2NhbGxiYWNrcz1uZXcgZSR0LkNhbGxiYWNrU2V0LHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzPW5ldyBlJHQuU2V0fXJldHVybiBlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sZS5wcm90b3R5cGUuX2dldEFsbEluY2x1ZGVkVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7dD09PXZvaWQgMCYmKHQ9ITEpO3ZhciBuPVtdO3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkocix0KTtuPW4uY29uY2F0KG8pfSksbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQrKyx0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX0sZS5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMCx0aGlzLl9zZXREb21haW4odGhpcy5fZ2V0RXh0ZW50KCkpLHRoaXN9LGUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseSYmdGhpcy5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGUiKX0sZS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldERvbWFpbigpOih0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMSx0aGlzLl9zZXREb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXREb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbih0KXt0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzfHwodGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMCx0aGlzLl9iYWNraW5nU2NhbGVEb21haW4odCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9iYWNraW5nRG9tYWluIil9LGUucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldFJhbmdlKCk6KHRoaXMuX3NldFJhbmdlKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXRSYW5nZSIpfSxlLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfc2V0UmFuZ2UiKX0sZS5wcm90b3R5cGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuYWRkKHQpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmRlbGV0ZSh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZX0oKTtKaXQuU2NhbGU9WHplfSk7dmFyIGVvdD1IKHRvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgJHplPShkZSgpLFV0KHBlKSksQkY9KEVyKCksVXQoTXIpKSxLemU9ZTQoKSxyJHQ9RmUoKSxaemU9THYoKSxRaXQ9WzAsMV0sSnplPWZ1bmN0aW9uKGUpeyR6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX3JhbmdlPVswLDFdLHIuX2QzU2NhbGU9QkYuc2NhbGVCYW5kKCksci5fZDNTY2FsZS5yYW5nZShRaXQpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZT1CRi5zY2FsZUxpbmVhcigpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oUWl0KTt2YXIgbj0uMztyZXR1cm4gci5faW5uZXJQYWRkaW5nPXQuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZyhuKSxyLl9vdXRlclBhZGRpbmc9dC5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nKC41LG4pLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lV2l0aG91dFByb3ZpZGVycz1mdW5jdGlvbigpe3ZhciByPW5ldyB0KCkuZG9tYWluKHRoaXMuZG9tYWluKCkpLnJhbmdlKHRoaXMucmFuZ2UoKSkuaW5uZXJQYWRkaW5nKHRoaXMuaW5uZXJQYWRkaW5nKCkpLm91dGVyUGFkZGluZyh0aGlzLm91dGVyUGFkZGluZygpKTtyZXR1cm4gci5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCkpLHJ9LHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiByJHQuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiByJHQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sdC5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5pbnZlcnRSYW5nZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPXRoaXMucmFuZ2UoKSk7dmFyIGk9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSxvPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzBdKSxhPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzFdKSxzPXRoaXMuX2QzU2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gbi5fZDNTY2FsZShoKStpLzJ9KSxjPUJGLmJpc2VjdChsLG8pLHU9QkYuYmlzZWN0KGwsYSk7cmV0dXJuIHMuc2xpY2UoYyx1KX0sdC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLnJhbmdlLmNhbGwodGhpcyxyKX0sdC5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiAxLygxLXIpLTF9LHQuX2NvbnZlcnRUb1Bsb3R0YWJsZU91dGVyUGFkZGluZz1mdW5jdGlvbihyLG4pe3JldHVybiByLygxLW4pfSx0LnByb3RvdHlwZS5fc2V0QmFuZHM9ZnVuY3Rpb24oKXt2YXIgcj0xLTEvKDErdGhpcy5pbm5lclBhZGRpbmcoKSksbj10aGlzLm91dGVyUGFkZGluZygpLygxK3RoaXMuaW5uZXJQYWRkaW5nKCkpO3RoaXMuX2QzU2NhbGUucGFkZGluZ0lubmVyKHIpLHRoaXMuX2QzU2NhbGUucGFkZGluZ091dGVyKG4pfSx0LnByb3RvdHlwZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzY2FsZUJhbmQodGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSl9LHQucHJvdG90eXBlLnN0ZXBXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKigxK3RoaXMuaW5uZXJQYWRkaW5nKCkpKX0sdC5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sdC5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2lubmVyUGFkZGluZzoodGhpcy5faW5uZXJQYWRkaW5nPXIsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLm91dGVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9vdXRlclBhZGRpbmc6KHRoaXMuX291dGVyUGFkZGluZz1yLHRoaXMucmFuZ2UodGhpcy5yYW5nZSgpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKG4pfSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KEt6ZS56b29tT3V0KGEscixuKSl9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKG8pKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KG8rcil9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKGkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFpdH0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHIpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcy5fc2V0QmFuZHMoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhbmdlfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fcmFuZ2U9cix0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UociksdGhpcy5fc2V0QmFuZHMoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGVCYW5kPWZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLmFicyh0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUociktdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKDApKX0sdH0oWnplLlNjYWxlKTt0b3QuQ2F0ZWdvcnk9SnplfSk7dmFyIG4kdD1IKHJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUXplPShkZSgpLFV0KHBlKSksTmY9KEVyKCksVXQoTXIpKSxTUz1GZSgpLHRGZT1MdigpLGVGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvdW50PTAsdGhpcy50cmFja2VyPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRJbmRleD1mdW5jdGlvbih0KXtpZih0aGlzLnRyYWNrZXJbdF0hPW51bGwpcmV0dXJuIHRoaXMudHJhY2tlclt0XTt2YXIgcj10aGlzLmNvdW50O3JldHVybiB0aGlzLnRyYWNrZXJbdF09cix0aGlzLmNvdW50Kz0xLHJ9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX0sZX0oKSxyRmU9ZnVuY3Rpb24oZSl7UXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX3JhbmdlTGVuZ3RoPTEsbi5fdHJhY2tlcj1uZXcgZUZlO3ZhciBpO3N3aXRjaChyKXtjYXNlIG51bGw6Y2FzZSB2b2lkIDA6dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT09bnVsbCYmKHQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9dC5fZ2V0UGxvdHRhYmxlQ29sb3JzKCkpLGk9TmYuc2NhbGVPcmRpbmFsKCkucmFuZ2UodC5fcGxvdHRhYmxlQ29sb3JDYWNoZSk7YnJlYWs7Y2FzZSJDYXRlZ29yeTEwIjpjYXNlImNhdGVnb3J5MTAiOmNhc2UiMTAiOmk9TmYuc2NhbGVPcmRpbmFsKE5mLnNjaGVtZUNhdGVnb3J5MTApO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMCI6Y2FzZSJjYXRlZ29yeTIwIjpjYXNlIjIwIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMGIpO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMGMiOmNhc2UiY2F0ZWdvcnkyMGMiOmNhc2UiMjBjIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvbG9yU2NhbGUgdHlwZSIpfXJldHVybiBuLl9kM1NjYWxlPWksbi5fcmFuZ2VMZW5ndGg9bi5fZDNTY2FsZS5yYW5nZSgpLmxlbmd0aCxufXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gU1MuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTUy5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfSx0LmludmFsaWRhdGVDb2xvckNhY2hlPWZ1bmN0aW9uKCl7dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT1udWxsfSx0Ll9nZXRQbG90dGFibGVDb2xvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9W10sbj1OZi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInBsb3R0YWJsZS1jb2xvci10ZXN0ZXIiKSxpPVNTLkNvbG9yLmNvbG9yVGVzdChuLCIiKSxvPTAsYT1TUy5Db2xvci5jb2xvclRlc3QobiwicGxvdHRhYmxlLWNvbG9ycy0wIik7YSE9bnVsbCYmbzx0aGlzLl9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUyYmIShhPT09aSYmYT09PXJbci5sZW5ndGgtMV0pOylyLnB1c2goYSksbysrLGE9U1MuQ29sb3IuY29sb3JUZXN0KG4sInBsb3R0YWJsZS1jb2xvcnMtIitvKTtyZXR1cm4gbi5yZW1vdmUoKSxyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpLGk9dGhpcy5fdHJhY2tlci5nZXRJbmRleChyKSxvPU1hdGguZmxvb3IoaS90aGlzLl9yYW5nZUxlbmd0aCk7aWYobz09PTApcmV0dXJuIG47dmFyIGE9TWF0aC5sb2cobyp0Ll9MT09QX0xJR0hURU5fRkFDVE9SKzEpO3JldHVybiBTUy5Db2xvci5saWdodGVuQ29sb3IobixhKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzLl90cmFja2VyLmNsZWFyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpLHRoaXMuX3JhbmdlTGVuZ3RoPXIubGVuZ3RofSx0Ll9MT09QX0xJR0hURU5fRkFDVE9SPTEuNix0Ll9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUz0yNTYsdH0odEZlLlNjYWxlKTtyb3QuQ29sb3I9ckZlfSk7dmFyIG8kdD1IKG5vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbkZlPShkZSgpLFV0KHBlKSksTVM9KEVyKCksVXQoTXIpKSxpJHQ9RmUoKSxpRmU9THYoKSxvRmU9ZnVuY3Rpb24oZSl7bkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9ImxpbmVhciIpO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVMaW5lYXIoKTticmVhaztjYXNlImxvZyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZUxvZygpO2JyZWFrO2Nhc2Uic3FydCI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVNxcnQoKTticmVhaztjYXNlInBvdyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVBvdygpO2JyZWFrfWlmKG4uX2NvbG9yU2NhbGU9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIFF1YW50aXRhdGl2ZVNjYWxlIHNjYWxlIHR5cGUgIityKTtyZXR1cm4gbi5yYW5nZSh0LlJFRFMpLG59cmV0dXJuIHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3ZhciBuPU1TLmV4dGVudChyKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS5fZDNJbnRlcnBvbGF0ZWRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnJhbmdlKFswLDFdKS5pbnRlcnBvbGF0ZSh0aGlzLl9pbnRlcnBvbGF0ZUNvbG9ycygpKX0sdC5wcm90b3R5cGUuX2ludGVycG9sYXRlQ29sb3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fY29sb3JSYW5nZTtpZihyLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2NhbGUgYXJyYXlzIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIik7cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8pe289TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTt2YXIgYT1vKihyLmxlbmd0aC0xKSxzPU1hdGguZmxvb3IoYSksbD1NYXRoLmNlaWwoYSksYz1hLXM7cmV0dXJuIE1TLmludGVycG9sYXRlTGFiKHJbc10scltsXSkoYyl9fX0sdC5wcm90b3R5cGUuX3Jlc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLl9kM1NjYWxlPXRoaXMuX2QzSW50ZXJwb2xhdGVkU2NhbGUoKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKTtyZXR1cm4gci5sZW5ndGg+MCYmdGhpcy5fc2V0RG9tYWluKFtpJHQuTWF0aC5taW4ociwwKSxpJHQuTWF0aC5tYXgociwwKV0pLHRoaXN9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JSYW5nZX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2NvbG9yUmFuZ2U9cix0aGlzLl9yZXNldFNjYWxlKCl9LHQuUkVEUz1bIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLHQuQkxVRVM9WyIjRkZGRkZGIiwiI0NDRkZGRiIsIiNBNUZGRkQiLCIjODVGN0ZCIiwiIzZFRDNFRiIsIiM1NUE3RTAiLCIjNDE3RkQwIiwiIzI1NDVEMyIsIiMwQjAyRTEiXSx0LlBPU05FRz1bIiMwQjAyRTEiLCIjMjU0NUQzIiwiIzQxN0ZEMCIsIiM1NUE3RTAiLCIjNkVEM0VGIiwiIzg1RjdGQiIsIiNBNUZGRkQiLCIjQ0NGRkZGIiwiI0ZGRkZGRiIsIiNGRkY2RTEiLCIjRkVGNEMwIiwiI0ZFRDk3NiIsIiNGRUIyNEMiLCIjRkQ4RDNDIiwiI0ZDNEUyQSIsIiNFMzFBMUMiLCIjQjEwMDI2Il0sdH0oaUZlLlNjYWxlKTtub3QuSW50ZXJwb2xhdGVkQ29sb3I9b0ZlfSk7dmFyIHZkPUgoaW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhRmU9KGRlKCksVXQocGUpKSxzRmU9KEVyKCksVXQoTXIpKSxsRmU9ZTQoKSxFUz1GZSgpLGNGZT1MdigpLHVGZT1mdW5jdGlvbihlKXthRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5kZWZhdWx0VGlja3MoKX0sci5fcGFkUHJvcG9ydGlvbj0uMDUsci5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLHIuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBFUy5TZXQscn1yZXR1cm4gdC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb21haW5NaW49bnVsbCx0aGlzLl9kb21haW5NYXg9bnVsbCxlLnByb3RvdHlwZS5hdXRvRG9tYWluLmNhbGwodGhpcyksdGhpc30sdC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe2lmKHRoaXMuX2RvbWFpbk1pbiE9bnVsbCYmdGhpcy5fZG9tYWluTWF4IT1udWxsKXt0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NYXhdKTtyZXR1cm59dmFyIHI9dGhpcy5fZ2V0RXh0ZW50KCk7aWYodGhpcy5fZG9tYWluTWluIT1udWxsKXt2YXIgbj1yWzFdO3RoaXMuX2RvbWFpbk1pbj49biYmKG49dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NaW5dKVsxXSksdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sbl0pO3JldHVybn1pZih0aGlzLl9kb21haW5NYXghPW51bGwpe3ZhciBpPXJbMF07dGhpcy5fZG9tYWluTWF4PD1pJiYoaT10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWF4LHRoaXMuX2RvbWFpbk1heF0pWzBdKSx0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSk7cmV0dXJufWUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX2dldFVuYm91bmRlZEV4dGVudD1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj0hMSk7dmFyIG49dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMociksaT10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYobi5sZW5ndGghPT0wKXt2YXIgbz1bRVMuTWF0aC5taW4obixpWzBdKSxFUy5NYXRoLm1heChuLGlbMV0pXTtpPXRoaXMuX3BhZERvbWFpbihvKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiB0aGlzLl9kb21haW5NaW4hPW51bGwmJihyWzBdPXRoaXMuX2RvbWFpbk1pbiksdGhpcy5fZG9tYWluTWF4IT1udWxsJiYoclsxXT10aGlzLl9kb21haW5NYXgpLHJ9LHQucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZChyKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUociksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyWzBdLnZhbHVlT2YoKT09PXJbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihyKTtpZih0aGlzLl9wYWRQcm9wb3J0aW9uPT09MClyZXR1cm4gcjt2YXIgaT10aGlzLl9wYWRQcm9wb3J0aW9uLzIsbz1yWzBdLGE9clsxXSxzPSExLGw9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mKG4pO3AuZm9yRWFjaChmdW5jdGlvbihkKXtkLnZhbHVlT2YoKT09PW8udmFsdWVPZigpJiYocz0hMCksZC52YWx1ZU9mKCk9PT1hLnZhbHVlT2YoKSYmKGw9ITApfSl9KTt2YXIgYz10aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocik7dmFyIHU9cz9vOnRoaXMuaW52ZXJ0KHRoaXMuc2NhbGUobyktKHRoaXMuc2NhbGUoYSktdGhpcy5zY2FsZShvKSkqaSksaD1sP2E6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShhKSsodGhpcy5zY2FsZShhKS10aGlzLnNjYWxlKG8pKSppKTtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKGMpLHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD90aGlzLl9uaWNlRG9tYWluKFt1LGhdKTpbdSxoXX0sdC5wcm90b3R5cGUuc25hcHBpbmdEb21haW5FbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZDoodGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0Iil9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbCYmKHRoaXMuX2RvbWFpbk1pbj1yWzBdLHRoaXMuX2RvbWFpbk1heD1yWzFdKSxlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5kb21haW5NaW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5kb21haW4oKVswXToodGhpcy5fZG9tYWluTWluPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLmRvbWFpbk1heD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLmRvbWFpbigpWzFdOih0aGlzLl9kb21haW5NYXg9cix0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7dmFyIG49c0ZlLmV4dGVudChyLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gRVMuTWF0aC5pc1ZhbGlkTnVtYmVyKCtpKX0pKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLmludmVydChsRmUuem9vbU91dChhLHIsbikpfTt0aGlzLmRvbWFpbih0aGlzLnJhbmdlKCkubWFwKG8pKX0sdC5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihvKXtyZXR1cm4gbi5pbnZlcnQobytyKX07dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChpKSl9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZVRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnRlZFRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBFUy5NYXRoLmlzTmFOKGkpfHxpPT09MS8wfHxpPT09LTEvMH07aWYobihyWzBdKXx8bihyWzFdKSl7RVMuV2luZG93Lndhcm4oIldhcm5pbmc6IFF1YW50aXRhdGl2ZVNjYWxlcyBjYW5ub3QgdGFrZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb21haW4gdmFsdWUuIElnbm9yaW5nLiIpO3JldHVybn1lLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RGVmYXVsdFRpY2tzIil9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tHZW5lcmF0b3IodGhpcyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfbmljZURvbWFpbiIpfSx0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2RlZmF1bHRFeHRlbnQiKX0sdC5wcm90b3R5cGUudGlja0dlbmVyYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl90aWNrR2VuZXJhdG9yOih0aGlzLl90aWNrR2VuZXJhdG9yPXIsdGhpcyl9LHQuX0RFRkFVTFRfTlVNX1RJQ0tTPTEwLHR9KGNGZS5TY2FsZSk7aW90LlF1YW50aXRhdGl2ZVNjYWxlPXVGZX0pO3ZhciBhJHQ9SChvb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGhGZT0oZGUoKSxVdChwZSkpLGZGZT0oRXIoKSxVdChNcikpLHBGZT12ZCgpLGRGZT1mdW5jdGlvbihlKXtoRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1mRmUuc2NhbGVMaW5lYXIoKSxyfXJldHVybiB0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLDFdfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJbMF09PT1yWzFdP1tyWzBdLTEsclsxXSsxXTpyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlLmludmVydChyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3ModC5fREVGQVVMVF9OVU1fVElDS1MpfSx0LnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocikubmljZShuKS5kb21haW4oKX0sdH0ocEZlLlF1YW50aXRhdGl2ZVNjYWxlKTtvb3QuTGluZWFyPWRGZX0pO3ZhciBzJHQ9SChhb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1GZT0oZGUoKSxVdChwZSkpLGdGZT0oRXIoKSxVdChNcikpLF9GZT12ZCgpLHlGZT1mdW5jdGlvbihlKXttRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXtyPT09dm9pZCAwJiYocj0xMCk7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kM1NjYWxlPWdGZS5zY2FsZUxvZygpLmJhc2Uociksbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gclswXT09PXJbMV0/W3JbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksclsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06cn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHIpLm5pY2UoKS5kb21haW4oKX0sdH0oX0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTthb3QuTG9nPXlGZX0pO3ZhciBsJHQ9SChsb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZGZT0oZGUoKSxVdChwZSkpLHI0PShFcigpLFV0KE1yKSksVFM9RmUoKSxzb3Q9a3MoKSx4RmU9dmQoKSxiRmU9ZnVuY3Rpb24oZSl7dkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9MTApO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9sb2dUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uKGkpe3ZhciBvPWZ1bmN0aW9uKHgsYixTKXtyZXR1cm5beCxiLFNdLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gQy1QfSlbMV19LGE9VFMuTWF0aC5taW4obi5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSxzPVRTLk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbD1hLGM9byhhLHMsLW4uX3Bpdm90KSx1PW8oYSxzLG4uX3Bpdm90KSxoPXMsZj1uLl9sb2dUaWNrcygtYywtbCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybi14fSkucmV2ZXJzZSgpLHA9bi5fbG9nVGlja3ModSxoKSxkPU1hdGgubWF4KGEsLW4uX3Bpdm90KSxnPU1hdGgubWluKHMsbi5fcGl2b3QpLF89cjQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2QsZ10pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhkLGcpKSx5PWYuY29uY2F0KF8pLmNvbmNhdChwKTtyZXR1cm4geS5sZW5ndGg8PTEmJih5PXI0LnNjYWxlTGluZWFyKCkuZG9tYWluKFthLHNdKS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKSkseX0sbi5fZDNTY2FsZT1yNC5zY2FsZUxpbmVhcigpLG4uX2Jhc2U9cixuLl9waXZvdD1uLl9iYXNlLG4uX3NldERvbWFpbihuLl9kZWZhdWx0RXh0ZW50KCkpLG4udGlja0dlbmVyYXRvcihuLl9sb2dUaWNrR2VuZXJhdG9yKSxyPD0xKXRocm93IG5ldyBFcnJvcigiTW9kaWZpZWRMb2dTY2FsZTogVGhlIGJhc2UgbXVzdCBiZSA+IDEiKTtyZXR1cm4gbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciBuPXI8MD8tMToxO3JldHVybiByKj1uLHI8dGhpcy5fcGl2b3QmJihyKz0odGhpcy5fcGl2b3QtcikvdGhpcy5fcGl2b3QpLHI9TWF0aC5sb2cocikvTWF0aC5sb2codGhpcy5fYmFzZSkscio9bixyfSx0LnByb3RvdHlwZS5faW52ZXJ0ZWRBZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgbj1yPDA/LTE6MTtyZXR1cm4gcio9bixyPU1hdGgucG93KHRoaXMuX2Jhc2Uscikscjx0aGlzLl9waXZvdCYmKHI9dGhpcy5fcGl2b3QqKHItMSkvKHRoaXMuX3Bpdm90LTEpKSxyKj1uLHJ9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHRoaXMuX2FkanVzdGVkTG9nKHIpKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9pbnZlcnRlZEFkanVzdGVkTG9nKHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj1yO3ZhciBuPVt0aGlzLl9hZGp1c3RlZExvZyhyWzBdKSx0aGlzLl9hZGp1c3RlZExvZyhyWzFdKV07ZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsbil9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9sb2dUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9ob3dNYW55VGlja3MocixuKTtpZihvPT09MClyZXR1cm5bXTt2YXIgYT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxzPU1hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLmxvZyh0aGlzLl9iYXNlKSksbD1yNC5yYW5nZShzLGEsLU1hdGguY2VpbCgocy1hKS9vKSksYz1yNC5yYW5nZSh0aGlzLl9iYXNlLDEsLSh0aGlzLl9iYXNlLTEpKS5tYXAoTWF0aC5mbG9vciksdT1UUy5BcnJheS51bmlxKGMpLGg9bC5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBNYXRoLnBvdyhpLl9iYXNlLGctMSkqX30pfSksZj1UUy5BcnJheS5mbGF0dGVuKGgpLHA9Zi5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIHI8PWcmJmc8PW59KSxkPXAuc29ydChmdW5jdGlvbihnLF8pe3JldHVybiBnLV99KTtyZXR1cm4gZH0sdC5wcm90b3R5cGUuX2hvd01hbnlUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2FkanVzdGVkTG9nKFRTLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLG89dGhpcy5fYWRqdXN0ZWRMb2coVFMuTWF0aC5tYXgodGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSksYT10aGlzLl9hZGp1c3RlZExvZyhyKSxzPXRoaXMuX2FkanVzdGVkTG9nKG4pLGw9KHMtYSkvKG8taSksYz1NYXRoLmNlaWwobCpzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKTtyZXR1cm4gY30sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCx0aGlzLl9iYXNlXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe2lmKHJbMF09PT1yWzFdKXt2YXIgbj1yWzBdO3JldHVybiBuPjA/W24vdGhpcy5fYmFzZSxuKnRoaXMuX2Jhc2VdOm49PT0wP1stdGhpcy5fYmFzZSx0aGlzLl9iYXNlXTpbbip0aGlzLl9iYXNlLG4vdGhpcy5fYmFzZV19cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdH0oeEZlLlF1YW50aXRhdGl2ZVNjYWxlKTtsb3QuTW9kaWZpZWRMb2c9YkZlfSk7dmFyIGMkdD1IKGNvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoY290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd0ZlPShkZSgpLFV0KHBlKSksZ2E9KEVyKCksVXQoTXIpKSxrdj1IRigpLFNGZT12ZCgpLE1GZT1mdW5jdGlvbihlKXt3RmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1nYS5zY2FsZVRpbWUoKSxyLmF1dG9Eb21haW4oKSxyfXJldHVybiB0LnByb3RvdHlwZS50aWNrSW50ZXJ2YWw9ZnVuY3Rpb24ocixuLGkpe249PT12b2lkIDAmJihuPTEpLGk9PT12b2lkIDAmJihpPSExKTt2YXIgbz1nYS5zY2FsZVRpbWUoKSxhPXQudGltZUludGVydmFsVG9EM1RpbWUocixpKS5ldmVyeShuKTtyZXR1cm4gby5kb21haW4odGhpcy5kb21haW4oKSksby5yYW5nZSh0aGlzLnJhbmdlKCkpLG8udGlja3MoYSl9LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7aWYoclsxXTxyWzBdKXRocm93IG5ldyBFcnJvcigiU2NhbGUuVGltZSBkb21haW4gdmFsdWVzIG11c3QgYmUgaW4gY2hyb25vbG9naWNhbCBvcmRlciIpO3JldHVybiBlLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bbmV3IERhdGUoIjE5NzAtMDEtMDEiKSxuZXcgRGF0ZSgiMTk3MC0wMS0wMiIpXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uZ2V0VGltZSgpLGk9clsxXS5nZXRUaW1lKCk7aWYobj09PWkpe3ZhciBvPW5ldyBEYXRlKG4pO28uc2V0RGF0ZShvLmdldERhdGUoKS0xKTt2YXIgYT1uZXcgRGF0ZShpKTtyZXR1cm4gYS5zZXREYXRlKGEuZ2V0RGF0ZSgpKzEpLFtvLGFdfXJldHVybiByfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShuZXcgRGF0ZShyKSl9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpLmdldFRpbWUoKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApO3JldHVybltyWzBdLnZhbHVlT2YoKSxyWzFdLnZhbHVlT2YoKV19LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5kb21haW4oKTtyZXR1cm5bclswXS52YWx1ZU9mKCksclsxXS52YWx1ZU9mKCldfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLGk9clsxXTt0aGlzLmRvbWFpbihbbmV3IERhdGUobiksbmV3IERhdGUoaSldKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbihyKS5uaWNlKCkuZG9tYWluKCl9LHQudGltZUludGVydmFsVG9EM1RpbWU9ZnVuY3Rpb24ocixuKXtzd2l0Y2gocil7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuc2Vjb25kOnJldHVybiBuP2dhLnV0Y1NlY29uZDpnYS50aW1lU2Vjb25kO2Nhc2Uga3YuVGltZUludGVydmFsLm1pbnV0ZTpyZXR1cm4gbj9nYS51dGNNaW51dGU6Z2EudGltZU1pbnV0ZTtjYXNlIGt2LlRpbWVJbnRlcnZhbC5ob3VyOnJldHVybiBuP2dhLnV0Y0hvdXI6Z2EudGltZUhvdXI7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuZGF5OnJldHVybiBuP2dhLnV0Y0RheTpnYS50aW1lRGF5O2Nhc2Uga3YuVGltZUludGVydmFsLndlZWs6cmV0dXJuIG4/Z2EudXRjV2VlazpnYS50aW1lV2VlaztjYXNlIGt2LlRpbWVJbnRlcnZhbC5tb250aDpyZXR1cm4gbj9nYS51dGNNb250aDpnYS50aW1lTW9udGg7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwueWVhcjpyZXR1cm4gbj9nYS51dGNZZWFyOmdhLnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrcil9fSx0fShTRmUuUXVhbnRpdGF0aXZlU2NhbGUpO2NvdC5UaW1lPU1GZX0pO3ZhciBrcz1IKEh1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJ2PShkZSgpLFV0KHBlKSksRUZlPVpYdCgpO0h1LlRpY2tHZW5lcmF0b3JzPUVGZTtSdi5fX2V4cG9ydFN0YXIoZW90KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihuJHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKG8kdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIoYSR0KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihzJHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGwkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIoYyR0KCksSHUpO3ZhciBURmU9ZW90KCksQ0ZlPXZkKCk7ZnVuY3Rpb24gQUZlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQ0ZlLlF1YW50aXRhdGl2ZVNjYWxlfHxlIGluc3RhbmNlb2YgVEZlLkNhdGVnb3J5fUh1LmlzVHJhbnNmb3JtYWJsZT1BRmV9KTt2YXIgSEY9SChTZT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBQRmU9KGRlKCksVXQocGUpKSxWdT0oRXIoKSxVdChNcikpLHUkdD1fbCgpLGgkdD1CdSgpLElGZT1rcygpLG40PUZlKCksdW90PUlmKCksdHM9dDQoKTtTZS5UaW1lSW50ZXJ2YWw9dW90Lm1ha2VFbnVtKFsic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIndlZWsiLCJtb250aCIsInllYXIiXSk7U2UuVGltZUF4aXNPcmllbnRhdGlvbj11b3QubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSk7U2UuVGllckxhYmVsUG9zaXRpb249dW90Lm1ha2VFbnVtKFsiYmV0d2VlbiIsImNlbnRlciJdKTt2YXIgTEZlPWZ1bmN0aW9uKGUpe1BGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbixpKXt2YXIgbz1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBvLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249bnVsbCxvLl90aWVyTGFiZWxQb3NpdGlvbnM9W10sby5fdXNlVVRDPWksby5hZGRDbGFzcygidGltZS1heGlzIiksby50aWNrTGFiZWxQYWRkaW5nKDUpLG8uYXhpc0NvbmZpZ3VyYXRpb25zKHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TKG8uX3VzZVVUQykpLG8uYW5ub3RhdGlvbkZvcm1hdHRlcihoJHQudGltZSgiJWEgJWIgJWQsICVZIixvLl91c2VVVEMpKSxvfXJldHVybiB0LnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCFyLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBuLnRvTG93ZXJDYXNlKCk9PT0iYmV0d2VlbiJ8fG4udG9Mb3dlckNhc2UoKT09PSJjZW50ZXIifSkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwb3NpdGlvbiBmb3IgdGllciBsYWJlbHMiKTtyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uOih0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jdXJyZW50QXhpc0NvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdfSx0LnByb3RvdHlwZS5heGlzQ29uZmlndXJhdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zO3RoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucz1yLHRoaXMuX251bVRpZXJzPW40Lk1hdGgubWF4KHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSksMCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO2Zvcih2YXIgbj10aGlzLnRpZXJMYWJlbFBvc2l0aW9ucygpLGk9W10sbz0wO288dGhpcy5fbnVtVGllcnM7bysrKWkucHVzaChuW29dfHwiYmV0d2VlbiIpO3JldHVybiB0aGlzLnRpZXJMYWJlbFBvc2l0aW9ucyhpKSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpLG8pe288biYmaS5ldmVyeShmdW5jdGlvbihhKXtyZXR1cm4gci5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKGEpfSkmJihuPW8pfSksbj09PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGgmJihuNC5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tbiksbn0sdC5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24ocil7aWYociYmKHIudG9Mb3dlckNhc2UoKT09PSJyaWdodCJ8fHIudG9Mb3dlckNhc2UoKT09PSJsZWZ0IikpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIGUucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgbj0wO248dGhpcy5fbnVtVGllcnM7bisrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2gocit0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImJldHdlZW4iPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gVnUuc3VtKHRoaXMuX3RpZXJIZWlnaHRzKX0sdC5wcm90b3R5cGUuX2dldEludGVydmFsTGVuZ3RoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpWzBdLGk9SUZlLlRpbWUudGltZUludGVydmFsVG9EM1RpbWUoci5pbnRlcnZhbCx0aGlzLl91c2VVVEMpLG89aS5vZmZzZXQobixyLnN0ZXApO2lmKG8+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0pcmV0dXJuIHRoaXMud2lkdGgoKTt2YXIgYT1NYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZShvKS10aGlzLl9zY2FsZS5zY2FsZShuKSk7cmV0dXJuIGF9LHQucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHIuZm9ybWF0dGVyKHQuX0xPTkdfREFURSkpLndpZHRofSx0LnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe2lmKHRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbiE9bnVsbCl7dmFyIG49dC5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxpPXQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3IuaW50ZXJ2YWxdO2lmKG4hPW51bGwmJmkhPW51bGwmJmk8bilyZXR1cm4hMX12YXIgbz10aGlzLl9tYXhXaWR0aEZvckludGVydmFsKHIpKzIqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7cmV0dXJuIE1hdGgubWluKHRoaXMuX2dldEludGVydmFsTGVuZ3RoKHIpLHRoaXMud2lkdGgoKSk+PW99LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbiksbz10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24ocyxsLGMsdSl7cmV0dXJuIHMrbD5pLmhlaWdodD9zOnMrbH0pLGE9dGhpcy5tYXJnaW4oKSsodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSp0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpOjApO3JldHVybiBpLmhlaWdodD1NYXRoLm1pbihpLmhlaWdodCxvK2EpLGl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3NldHVwRG9tRWxlbWVudHMoKX0sdC5wcm90b3R5cGUuX3NldHVwRG9tRWxlbWVudHM9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuVElNRV9BWElTX1RJRVJfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnM9W10sdGhpcy5fdGllck1hcmtDb250YWluZXJzPVtdLHRoaXMuX3RpZXJCYXNlbGluZXM9W10sdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX2Jhc2VsaW5lLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8dGhpcy5fbnVtVGllcnM7KytyKXt2YXIgbj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElNRV9BWElTX1RJRVJfQ0xBU1MsITApO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMucHVzaChuLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKG4uYXBwZW5kKCJnIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApKSx0aGlzLl90aWVyQmFzZWxpbmVzLnB1c2gobi5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApKX12YXIgaT1uZXcgdSR0LlN2Z0NvbnRleHQodGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1swXS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyB1JHQuQ2FjaGVNZWFzdXJlcihpKX0sdC5wcm90b3R5cGUuX2dldFRpY2tJbnRlcnZhbFZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fc2NhbGUudGlja0ludGVydmFsKHIuaW50ZXJ2YWwsci5zdGVwLHRoaXMuX3VzZVVUQyl9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuLmNvbmNhdChyLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXMoaSkpfSxbXSl9LHQucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPTA7cjx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDtyKyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19MQUJFTF9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJCYXNlbGluZXNbcl0uc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbChyLmludGVydmFsLHIuc3RlcCx0aGlzLl91c2VVVEMpLGk9dGhpcy5fc2NhbGUuZG9tYWluKCksbz1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZU9mKCl9KTtyZXR1cm4gby5pbmRleE9mKGlbMF0udmFsdWVPZigpKT09PS0xJiZuLnVuc2hpZnQoaVswXSksby5pbmRleE9mKGlbMV0udmFsdWVPZigpKT09PS0xJiZuLnB1c2goaVsxXSksbn0sdC5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMsYT10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbihuKSxzPVtdO3RoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJiZXR3ZWVuIiYmbi5zdGVwPT09MT9hLm1hcChmdW5jdGlvbihnLF8pe18rMT49YS5sZW5ndGh8fHMucHVzaChuZXcgRGF0ZSgoYVtfKzFdLnZhbHVlT2YoKS1hW19dLnZhbHVlT2YoKSkvMithW19dLnZhbHVlT2YoKSkpfSk6cz1hO3ZhciBsPXIuc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEocyxmdW5jdGlvbihnKXtyZXR1cm4gU3RyaW5nKGcudmFsdWVPZigpKX0pLGM9bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKTtjLmFwcGVuZCgidGV4dCIpO3ZhciB1PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIifHxuLnN0ZXA9PT0xPzA6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaDt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9oPVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIiP2g9dGhpcy5oZWlnaHQoKS1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6aD10aGlzLmhlaWdodCgpLVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgZj1sLm1lcmdlKGMpLHA9Zi5zZWxlY3RBbGwoInRleHQiKTtwLnNpemUoKT4wJiZwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK2grIikiKSxsLmV4aXQoKS5yZW1vdmUoKSxmLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZyl7cmV0dXJuInRyYW5zbGF0ZSgiK28uX3NjYWxlLnNjYWxlKGcpKyIsMCkifSk7dmFyIGQ9dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldPT09ImNlbnRlciJ8fG4uc3RlcD09PTE/Im1pZGRsZSI6InN0YXJ0IjtmLnNlbGVjdEFsbCgidGV4dCIpLnRleHQobi5mb3JtYXR0ZXIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZCl9LHQucHJvdG90eXBlLl9yZW5kZXJUaWNrTWFya3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbbl0uc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxvPWkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHRzLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShpKSxhPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLHM9dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKS5yZWR1Y2UoZnVuY3Rpb24obCxjKXtyZXR1cm4gbCtjfSwwKTt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpOihhLnkxPXRoaXMuaGVpZ2h0KCktcyxhLnkyPXRoaXMuaGVpZ2h0KCktKHMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKSksby5hdHRycyhhKSx0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKTooYS55MT10aGlzLmhlaWdodCgpLXMsYS55Mj10aGlzLmhlaWdodCgpLShzKyh0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl09PT0iY2VudGVyIj90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpW28uc2l6ZSgpLTFdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5jbGFzc2VkKHRzLkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksVnUuc2VsZWN0KG8ubm9kZXMoKVtvLnNpemUoKS0xXSkuY2xhc3NlZCh0cy5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLGkuZXhpdCgpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEociksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobiksbz10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtvLnkyPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuaGVpZ2h0KCktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaS5hdHRycyhvKSxuLmV4aXQoKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleDwxP1tdOnRoaXMuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleC0xXVswXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIG49dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKSxuLmZvckVhY2goZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fcmVuZGVyVGllckxhYmVscyhyLl90aWVyTGFiZWxDb250YWluZXJzW2ZdLGgsZil9KTtmb3IodmFyIGk9bi5tYXAoZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24oaCl9KSxvPTAsYT0wO2E8TWF0aC5tYXgobi5sZW5ndGgsMSk7KythKXt2YXIgcz10aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKTtzLnkxKz10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9vOi1vLHMueTI9cy55MSx0aGlzLl90aWVyQmFzZWxpbmVzW2FdLmF0dHJzKHMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLG8rPXRoaXMuX3RpZXJIZWlnaHRzW2FdfXZhciBsPVtdLGM9dGhpcy5fc2NhbGUuZG9tYWluKCksdT10aGlzLl9zY2FsZS5zY2FsZShjWzFdKS10aGlzLl9zY2FsZS5zY2FsZShjWzBdKTt0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChuWzBdKSoxLjU+PXUmJihsPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSksdGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKGwpLHRoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpdGhpcy5fcmVuZGVyVGlja01hcmtzKGlbYV0sYSksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKGEpO3JldHVybiB0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuX2RyYXdBbm5vdGF0aW9ucygpOnRoaXMuX3JlbW92ZUFubm90YXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuaGVpZ2h0KCksaT0wO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5USU1FX0FYSVNfVElFUl9DTEFTUykuYXR0cigidmlzaWJpbGl0eSIsZnVuY3Rpb24obyxhKXtyZXR1cm4gaSs9ci5fdGllckhlaWdodHNbYV0saTw9bj8iaW5oZXJpdCI6ImhpZGRlbiJ9KX0sdC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguZmxvb3IoaS5sZWZ0KTw9TWF0aC5jZWlsKHUubGVmdCkmJk1hdGguZmxvb3IoaS50b3ApPD1NYXRoLmNlaWwodS50b3ApJiZNYXRoLmZsb29yKHUucmlnaHQpPD1NYXRoLmNlaWwoaS5sZWZ0K24ud2lkdGgoKSkmJk1hdGguZmxvb3IodS5ib3R0b20pPD1NYXRoLmNlaWwoaS50b3Arbi5oZWlnaHQoKSl9LGE9dGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbih1LGgpe3ZhciBmPVZ1LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpO3JldHVybiBmPT09InZpc2libGUifHxmPT09ImluaGVyaXQifSkscz1hLm5vZGVzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiB1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksbD10aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24odSxoKXt2YXIgZj1WdS5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gZj09PSJ2aXNpYmxlInx8Zj09PSJpbmhlcml0In0pLGM7bC5lYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVZ1LnNlbGVjdCh0aGlzKSxkPXNbaF0sZz1zW2grMV0sXz1jIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsYykseT1kIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZCkseD1nIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZyk7IW8oZil8fF98fHl8fHg/cC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOihjPWYscC5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSl9KX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5USU1FX0FYSVNfVElFUl9DTEFTUz0idGltZS1heGlzLXRpZXIiLHQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYPSh4ZD17fSx4ZFtTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kXT0wLHhkW1NlLlRpbWVJbnRlcnZhbC5taW51dGVdPTEseGRbU2UuVGltZUludGVydmFsLmhvdXJdPTIseGRbU2UuVGltZUludGVydmFsLmRheV09Myx4ZFtTZS5UaW1lSW50ZXJ2YWwud2Vla109NCx4ZFtTZS5UaW1lSW50ZXJ2YWwubW9udGhdPTUseGRbU2UuVGltZUludGVydmFsLnllYXJdPTYseGQpLHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBoJHQudGltZShpLHIpfTtyZXR1cm5bW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDozMCxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjMsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6Nixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxMixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVhICVlIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJWUiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjMsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIleSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MTAwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjIwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDo1MDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MWUzLGZvcm1hdHRlcjpuKCIlWSIpfV1dfSx0Ll9MT05HX0RBVEU9bmV3IERhdGUoOTk5OSw4LDI5LDEyLDU5LDk5OTkpLHR9KHRzLkF4aXMpO1NlLlRpbWU9TEZlO3ZhciB4ZH0pO3ZhciBmJHQ9SChpND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBob3Q9KGRlKCksVXQocGUpKTtob3QuX19leHBvcnRTdGFyKCRYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEtYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEhGKCksaTQpfSk7dmFyIG80PUgoZm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrRmU9RmUoKSxSRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3Rbcl1dLnNpemUhPT0wKXJldHVybiExO3JldHVybiEwfSxlLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj10Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3JdLGk9cj09PSJ3aGVlbCI/e3Bhc3NpdmU6ITF9OnZvaWQgMDt0Ll9ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMCl9LGUucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb25uZWN0ZWQmJnRoaXMuX2hhc05vQ2FsbGJhY2tzKCkmJihPYmplY3Qua2V5cyh0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bcl07dC5fZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSksdGhpcy5fY29ubmVjdGVkPSExKX0sZS5wcm90b3R5cGUuX2FkZENhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxyKXt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPT1udWxsJiYodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XT1uZXcga0ZlLkNhbGxiYWNrU2V0KSx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmFkZChyKSx0aGlzLl9jb25uZWN0KCl9LGUucHJvdG90eXBlLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKHQscil7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XSE9bnVsbCYmdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XS5kZWxldGUociksdGhpcy5fZGlzY29ubmVjdCgpfSxlLnByb3RvdHlwZS5fY2FsbENhbGxiYWNrc0ZvckV2ZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF07aSE9bnVsbCYmaS5jYWxsQ2FsbGJhY2tzLmFwcGx5KGkscil9LGV9KCk7Zm90LkRpc3BhdGNoZXI9UkZlfSk7dmFyIHAkdD1IKHBvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTkZlPShkZSgpLFV0KHBlKSksREZlPW80KCksT0ZlPWZ1bmN0aW9uKGUpe05GZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obil7cmV0dXJuIHIuX3Byb2Nlc3NLZXlkb3duKG4pfSxyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG4pe3JldHVybiByLl9wcm9jZXNzS2V5dXAobil9LHJ9cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciByPWRvY3VtZW50W3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IHQsZG9jdW1lbnRbdC5fRElTUEFUQ0hFUl9LRVldPXIpLHJ9LHQucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIua2V5Q29kZSxyKX0sdC5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZVVBfRVZFTlRfTkFNRSxyLmtleUNvZGUscil9LHQucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25LZXlVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlVUF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX0tFWVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfS2V5Iix0Ll9LRVlET1dOX0VWRU5UX05BTUU9ImtleWRvd24iLHQuX0tFWVVQX0VWRU5UX05BTUU9ImtleXVwIix0fShERmUuRGlzcGF0Y2hlcik7cG90LktleT1PRmV9KTt2YXIgbSR0PUgoZG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6RmU9KGRlKCksVXQocGUpKSxkJHQ9RmUoKSxGRmU9bzQoKSxCRmU9ZnVuY3Rpb24oZSl7ekZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX2xhc3RNb3VzZVBvc2l0aW9uPXt4Oi0xLHk6LTF9LG4uX3RyYW5zbGF0b3I9ZCR0LmdldFRyYW5zbGF0b3Iocik7dmFyIGk9ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cmV0dXJuIG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VPVkVSX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRV09aSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFT1VUX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VET1dOX0VWRU5UX05BTUUpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VVUF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fV0hFRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fV0hFRUxfRVZFTlRfTkFNRSl9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSl9LG59cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihyKXt2YXIgbj1yLnJvb3QoKS5yb290RWxlbWVudCgpLGk9blt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIGk9PW51bGwmJihpPW5ldyB0KHIpLG5bdC5fRElTUEFUQ0hFUl9LRVldPWkpLGl9LHQucHJvdG90eXBlLm9uTW91c2VNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFTU9WRV9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZk1vdXNlTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRURPV05fRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Nb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbldoZWVsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1dIRUVMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmV2hlZWw9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fV0hFRUxfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX0RCTENMSUNLX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmRGJsQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPSJlbGVtZW50IiksbyE9PSJwYWdlIiYmbyE9PSJlbGVtZW50Iil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIrbysiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYobz09PSJwYWdlInx8dGhpcy5ldmVudEluc2lkZShyLG4pKXt2YXIgYT10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbihuLmNsaWVudFgsbi5jbGllbnRZKTt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1hLHRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChpLHRoaXMubGFzdE1vdXNlUG9zaXRpb24oKSxuKX19LHQucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGQkdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUocixuKX0sdC5wcm90b3R5cGUubGFzdE1vdXNlUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdE1vdXNlUG9zaXRpb259LHQuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIix0Ll9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIix0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIix0Ll9NT1VTRU9VVF9FVkVOVF9OQU1FPSJtb3VzZW91dCIsdC5fTU9VU0VET1dOX0VWRU5UX05BTUU9Im1vdXNlZG93biIsdC5fTU9VU0VVUF9FVkVOVF9OQU1FPSJtb3VzZXVwIix0Ll9XSEVFTF9FVkVOVF9OQU1FPSJ3aGVlbCIsdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRT0iZGJsY2xpY2siLHR9KEZGZS5EaXNwYXRjaGVyKTtkb3QuTW91c2U9QkZlfSk7dmFyIF8kdD1IKG1vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSEZlPShkZSgpLFV0KHBlKSksZyR0PUZlKCksVkZlPW80KCksVUZlPWZ1bmN0aW9uKGUpe0hGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdHJhbnNsYXRvcj1nJHQuZ2V0VHJhbnNsYXRvcihyKSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNITU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsInBhZ2UiKX0sbn1yZXR1cm4gdC5nZXREaXNwYXRjaGVyPWZ1bmN0aW9uKHIpe3ZhciBuPXIucm9vdCgpLnJvb3RFbGVtZW50KCksaT1uW3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gaT09bnVsbCYmKGk9bmV3IHQociksblt0Ll9ESVNQQVRDSEVSX0tFWV09aSksaX0sdC5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vblRvdWNoTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaE1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaEVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSEVORF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIRU5EX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaENhbmNlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbihyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz0iZWxlbWVudCIpLG8hPT0icGFnZSImJm8hPT0iZWxlbWVudCIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK28rIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKCEobz09PSJlbGVtZW50IiYmIXRoaXMuZXZlbnRJbnNpZGUocixuKSkpe2Zvcih2YXIgYT1uLmNoYW5nZWRUb3VjaGVzLHM9e30sbD1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD11LmlkZW50aWZpZXIsZj10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbih1LmNsaWVudFgsdS5jbGllbnRZKTtmIT1udWxsJiYoc1toXT1mLGwucHVzaChoKSl9bC5sZW5ndGg+MCYmdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KGksbCxzLG4pfX0sdC5wcm90b3R5cGUuZXZlbnRJbnNpZGU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gZyR0LlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShyLG4pfSx0Ll9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCIsdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0Iix0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIix0Ll9UT1VDSEVORF9FVkVOVF9OQU1FPSJ0b3VjaGVuZCIsdC5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRT0idG91Y2hjYW5jZWwiLHR9KFZGZS5EaXNwYXRjaGVyKTttb3QuVG91Y2g9VUZlfSk7dmFyIE52PUgoYTQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGE0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ290PShkZSgpLFV0KHBlKSk7Z290Ll9fZXhwb3J0U3RhcihwJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihtJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihfJHQoKSxhNCl9KTt2YXIgRHY9SChfb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuX2FuY2hvckNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0Ll9hbmNob3Iocil9LHRoaXMuX2VuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXNjb25uZWN0KCksdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz10LHRoaXMuX2Nvbm5lY3QoKSx0aGlzfSxlLnByb3RvdHlwZS5kZXRhY2hGcm9tPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRldGFjaCgpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89bnVsbCx0aGlzfSxlLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9dCx0aGlzLl9lbmFibGVkP3RoaXMuX2Nvbm5lY3QoKTp0aGlzLl9kaXNjb25uZWN0KCksdGhpcyl9LGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24odCl7dGhpcy5faXNBbmNob3JlZD0hMH0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZD0hMX0sZS5wcm90b3R5cGUuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2U9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vcmlnaW5Ub1Jvb3QoKTtyZXR1cm57eDp0Lngtci54LHk6dC55LXIueX19LGUucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMDw9dC54JiYwPD10LnkmJnQueDw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZ0Lnk8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCl9LGUucHJvdG90eXBlLl9jb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkKCkmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJiF0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9uQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZS5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl91bmFuY2hvcigpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub2ZmQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZX0oKTtfb3QuSW50ZXJhY3Rpb249cUZlfSk7dmFyIHgkdD1IKHlvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgR0ZlPShkZSgpLFV0KHBlKSkseSR0PU52KCksdiR0PUZlKCksV0ZlPUR2KCksWUZlPWZ1bmN0aW9uKGUpe0dGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9jbGlja2VkRG93bj0hMSxyLl9kb3VibGVDbGlja2luZz0hMSxyLl9vbkNsaWNrQ2FsbGJhY2tzPW5ldyB2JHQuQ2FsbGJhY2tTZXQsci5fb25Eb3VibGVDbGlja0NhbGxiYWNrcz1uZXcgdiR0LkNhbGxiYWNrU2V0LHIuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihuLGkpfSxyLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChuLGkpfSxyLl9kYmxDbGlja0NhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZURibENsaWNrKG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihpW25bMF1dLG8pfSxyLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChpW25bMF1dLG8pfSxyLl90b3VjaENhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2NsaWNrZWREb3duPSExfSxyfXJldHVybiB0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj15JHQuTW91c2UuZ2V0RGlzcGF0Y2hlcihyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25EYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9eSR0LlRvdWNoLmdldERpc3BhdGNoZXIociksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl9oYW5kbGVDbGlja0Rvd249ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYodGhpcy5fY2xpY2tlZERvd249ITAsdGhpcy5fY2xpY2tlZFBvaW50PWkpfSx0LnByb3RvdHlwZS5faGFuZGxlQ2xpY2tVcD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2NsaWNrZWREb3duJiZ0Ll9wb2ludHNFcXVhbChvLHRoaXMuX2NsaWNrZWRQb2ludCkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG8sbil9LDApLHRoaXMuX2NsaWNrZWREb3duPSExfSx0LnByb3RvdHlwZS5faGFuZGxlRGJsQ2xpY2s9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9kb3VibGVDbGlja2luZz0hMCx0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobyxuKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2RvdWJsZUNsaWNraW5nPSExfSwwKX0sdC5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24ocixuKXtyZXR1cm4gci54PT09bi54JiZyLnk9PT1uLnl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oV0ZlLkludGVyYWN0aW9uKTt5b3QuQ2xpY2s9WUZlfSk7dmFyIHckdD1IKHZvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgakZlPShkZSgpLFV0KHBlKSksYiR0PU52KCksczQ9RmUoKSxYRmU9RHYoKSwkRmU9ZnVuY3Rpb24oZSl7akZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kcmFnZ2luZz0hMSxuLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PSEwLG4uX21vdXNlRmlsdGVyPXQuX0RFRkFVTFRfTU9VU0VfRklMVEVSLG4uX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fc3RhcnREcmFnKGksbyl9LG4uX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX2RvRHJhZyhpLG8pfSxuLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fZW5kRHJhZyhpLG8pfSxuLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9zdGFydERyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9kb0RyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihpLG8sYSl7cmV0dXJuIG4uX2VuZERyYWcob1tpWzBdXSxhKX0sbi5fbW91c2VCdXR0b249ciE9PXZvaWQgMD9yOjAsbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9YiR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9YiR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDpzNC5NYXRoLmNsYW1wKG4ueCwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSkseTpzNC5NYXRoLmNsYW1wKG4ueSwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCkpfTpufSx0LnByb3RvdHlwZS5fc3RhcnREcmFnPWZ1bmN0aW9uKHIsbil7aWYoIShuIGluc3RhbmNlb2YgTW91c2VFdmVudCYmIXRoaXMuX21vdXNlRmlsdGVyKG4pKSl7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmKG4ucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnZ2luZz0hMCx0aGlzLl9kcmFnT3JpZ2luPWksdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbikpfX0sdC5wcm90b3R5cGUuX2RvRHJhZz1mdW5jdGlvbihyLG4pe3RoaXMuX2RyYWdnaW5nJiZ0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocikpfSx0LnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihyLG4pe24gaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiZuLmJ1dHRvbiE9PXRoaXMuX21vdXNlQnV0dG9ufHx0aGlzLl9kcmFnZ2luZyYmKHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihyKSkpfSx0LnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ6KHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9cix0aGlzKX0sdC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21vdXNlRmlsdGVyOih0aGlzLl9tb3VzZUZpbHRlcj1yLHRoaXMpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQuX0RFRkFVTFRfTU9VU0VfRklMVEVSPWZ1bmN0aW9uKHIpe3JldHVybiByLmJ1dHRvbj09PTB9LHR9KFhGZS5JbnRlcmFjdGlvbik7dm90LkRyYWc9JEZlfSk7dmFyIHdvdD1IKGJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS0ZlPShkZSgpLFV0KHBlKSksUyR0PU52KCkseG90PUZlKCksWkZlPUR2KCksSkZlPWZ1bmN0aW9uKGUpe0tGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9rZXlQcmVzc0NhbGxiYWNrcz17fSxyLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9LHIuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiExfSxyLl9kb3duZWRLZXlzPW5ldyB4b3QuU2V0LHIuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVLZXlEb3duRXZlbnQobixpKX0sci5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5faGFuZGxlS2V5VXBFdmVudChuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9UyR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPVMkdC5LZXkuZ2V0RGlzcGF0Y2hlcigpLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vbktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9bnVsbCx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleURvd24odGhpcy5fa2V5RG93bkNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXI9bnVsbH0sdC5wcm90b3R5cGUuX2hhbmRsZUtleURvd25FdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLmxhc3RNb3VzZVBvc2l0aW9uKCkpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYhbi5yZXBlYXQmJih0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXSYmdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uY2FsbENhbGxiYWNrcyhyKSx0aGlzLl9kb3duZWRLZXlzLmFkZChyKSl9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHIpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLmNhbGxDYWxsYmFja3MociksdGhpcy5fZG93bmVkS2V5cy5kZWxldGUocil9LHQucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXT1uZXcgeG90LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXS5hZGQobiksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uZGVsZXRlKG4pLHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLnNpemU9PT0wJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0sdGhpc30sdC5wcm90b3R5cGUub25LZXlSZWxlYXNlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdPW5ldyB4b3QuQ2FsbGJhY2tTZXQpLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uYWRkKG4pLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5kZWxldGUobiksdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5zaXplPT09MCYmZGVsZXRlIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0sdGhpc30sdH0oWkZlLkludGVyYWN0aW9uKTtib3QuS2V5PUpGZX0pO3ZhciBDJHQ9SChTb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFGZT0oZGUoKSxVdChwZSkpLHRCZT0oRXIoKSxVdChNcikpLE0kdD1OdigpLEUkdD1rcygpLHlsPUZlKCksZUJlPWw0KCksckJlPUR2KCksVCR0PWU0KCksbkJlPWZ1bmN0aW9uKGUpe1FGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl93aGVlbEZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4hMH0saS5fd2hlZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEpe3JldHVybiBpLl9oYW5kbGVXaGVlbEV2ZW50KG8sYSl9LGkuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoU3RhcnQobyxhLHMpfSxpLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVBpbmNoKG8sYSxzKX0saS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fcGFuRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl96b29tRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl94U2NhbGVzPW5ldyB5bC5TZXQsaS5feVNjYWxlcz1uZXcgeWwuU2V0LGkuX2RyYWdJbnRlcmFjdGlvbj1uZXcgZUJlLkRyYWcsaS5fc2V0dXBEcmFnSW50ZXJhY3Rpb24oKSxpLl90b3VjaElkcz10QmUubWFwKCksaS5fbWluRG9tYWluRXh0ZW50cz1uZXcgeWwuTWFwLGkuX21heERvbWFpbkV4dGVudHM9bmV3IHlsLk1hcCxpLl9taW5Eb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxpLl9tYXhEb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxyIT1udWxsJiZpLmFkZFhTY2FsZShyKSxuIT1udWxsJiZpLmFkZFlTY2FsZShuKSxpfXJldHVybiB0LnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSx0LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fd2hlZWxGaWx0ZXI6KHRoaXMuX3doZWVsRmlsdGVyPXIsdGhpcyl9LHQucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5wYW4obi5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihpLHIueCkpfSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihpKXtpLnBhbihuLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uKGksci55KSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcztpPT09dm9pZCAwJiYoaT0hMCk7dmFyIGEscztyZXR1cm4gbiE9bnVsbCYmKGE9bi54LHM9bi55LGkmJih0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPW8uX2NvbnN0cmFpbmVkWm9vbShsLHIsYSk7YT1jLmNlbnRlclBvaW50LHI9Yy56b29tQW1vdW50fSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1vLl9jb25zdHJhaW5lZFpvb20obCxyLHMpO3M9Yy5jZW50ZXJQb2ludCxyPWMuem9vbUFtb3VudH0pKSksdGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1sLnJhbmdlKCksdT1hPT1udWxsPyhjWzFdK2NbMF0pLzI6YTtsLnpvb20ocix1KX0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9bC5yYW5nZSgpLHU9cz09bnVsbD8oY1sxXStjWzBdKS8yOnM7bC56b29tKHIsdSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKSx7em9vbUFtb3VudDpyLGNlbnRlclZhbHVlOntjZW50ZXJYOmEsY2VudGVyWTpzfX19LHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1NJHQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9TSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGwsdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hTdGFydD1mdW5jdGlvbihyLG4saSl7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aCYmdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDI7bysrKXt2YXIgYT1yW29dO3RoaXMuX3RvdWNoSWRzLnNldChhLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW2FdKSl9fSx0LnByb3RvdHlwZS5faGFuZGxlUGluY2g9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7aWYoISh0aGlzLl90b3VjaElkcy5zaXplKCk8Mikpe3ZhciBhPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpO2lmKCEoIXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoYVswXSkpfHwhdGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShhWzFdKSkpKXt2YXIgcz10Ll9wb2ludERpc3RhbmNlKGFbMF0sYVsxXSk7aWYocyE9PTApe3IuZm9yRWFjaChmdW5jdGlvbihTKXtvLl90b3VjaElkcy5oYXMoUy50b1N0cmluZygpKSYmby5fdG91Y2hJZHMuc2V0KFMudG9TdHJpbmcoKSxvLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKG5bU10pKX0pO3ZhciBsPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpLGM9dC5fcG9pbnREaXN0YW5jZShsWzBdLGxbMV0pO2lmKGMhPT0wKXt2YXIgdT1zL2MsaD1sLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OihTLngtYVtDXS54KS91LHk6KFMueS1hW0NdLnkpL3V9fSksZj10LmNlbnRlclBvaW50KGFbMF0sYVsxXSkscD10aGlzLnpvb20odSxmKSxkPXAuY2VudGVyVmFsdWUsZz1wLnpvb21BbW91bnQsXz1kLmNlbnRlclgseT1kLmNlbnRlclkseD1hLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OmhbQ10ueCpnK1MueCx5OmhbQ10ueSpnK1MueX19KSxiPXt4Ol8tKHhbMF0ueCt4WzFdLngpLzIseTp5LSh4WzBdLnkreFsxXS55KS8yfTt0aGlzLnBhbihiKX19fX19LHQuY2VudGVyUG9pbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm57eDooaStvKS8yLHk6KHMrYSkvMn19LHQuX3BvaW50RGlzdGFuY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG8taSwyKStNYXRoLnBvdyhzLWEsMikpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFbmQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ci5mb3JFYWNoKGZ1bmN0aW9uKGEpe28uX3RvdWNoSWRzLnJlbW92ZShhLnRvU3RyaW5nKCkpfSksdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPjAmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSx0LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbihyLG4pe2lmKCEhdGhpcy5fd2hlZWxGaWx0ZXIobikpe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQoaSkpe24ucHJldmVudERlZmF1bHQoKTt2YXIgbz1uLmRlbHRhWSE9PTA/bi5kZWx0YVk6bi5kZWx0YVgsYT1vKihuLmRlbHRhTW9kZT90Ll9QSVhFTFNfUEVSX0xJTkU6MSkscz1NYXRoLnBvdygyLGEqLjAwMik7dGhpcy56b29tKHMsaSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9fX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIFQkdC5jb25zdHJhaW5lZFpvb20ocixuLGksdGhpcy5taW5Eb21haW5FeHRlbnQociksdGhpcy5tYXhEb21haW5FeHRlbnQociksdGhpcy5taW5Eb21haW5WYWx1ZShyKSx0aGlzLm1heERvbWFpblZhbHVlKHIpKX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24ocixuKXtyZXR1cm4gVCR0LmNvbnN0cmFpbmVkVHJhbnNsYXRpb24ocixuLHRoaXMubWluRG9tYWluVmFsdWUociksdGhpcy5tYXhEb21haW5WYWx1ZShyKSl9LHQucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoITEpO3ZhciBuO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChmdW5jdGlvbigpe3JldHVybiBuPW51bGx9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKGZ1bmN0aW9uKGksbyl7aWYoIShyLl90b3VjaElkcy5zaXplKCk+PTIpKXt2YXIgYT17eDoobj09bnVsbD9pLng6bi54KS1vLngseToobj09bnVsbD9pLnk6bi55KS1vLnl9O3IucGFuKGEpLG49b319KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3BhbkVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9KX0sdC5wcm90b3R5cGUuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHM9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMubWluRG9tYWluRXh0ZW50KHIpIT1udWxsJiZ0aGlzLm1heERvbWFpbkV4dGVudChyKSE9bnVsbCYmIShyIGluc3RhbmNlb2YgRSR0LkxpbmVhcikmJiEociBpbnN0YW5jZW9mIEUkdC5UaW1lKX0sdC5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PW51bGwpe3ZhciBpPVtdO3JldHVybiB0aGlzLl94U2NhbGVzLmZvckVhY2goZnVuY3Rpb24obyl7aS5wdXNoKG8pfSksaX1yZXR1cm4gdGhpcy5feFNjYWxlcz1uZXcgeWwuU2V0LHIuZm9yRWFjaChmdW5jdGlvbihvKXtuLmFkZFhTY2FsZShvKX0pLHRoaXN9LHQucHJvdG90eXBlLnlTY2FsZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT1udWxsKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5feVNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kucHVzaChvKX0pLGl9cmV0dXJuIHRoaXMuX3lTY2FsZXM9bmV3IHlsLlNldCxyLmZvckVhY2goZnVuY3Rpb24obyl7bi5hZGRZU2NhbGUobyl9KSx0aGlzfSx0LnByb3RvdHlwZS5hZGRYU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3hTY2FsZXMuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZVhTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feFNjYWxlcy5kZWxldGUociksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmFkZFlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feVNjYWxlcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlWVNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl95U2NhbGVzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fbWluRG9tYWluRXh0ZW50cy5nZXQocik7aWYobi52YWx1ZU9mKCk8MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3ZhciBpPXRoaXMubWF4RG9tYWluRXh0ZW50KHIpO2lmKGkhPW51bGwmJmkudmFsdWVPZigpPG4udmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWluRG9tYWluRXh0ZW50IG11c3QgYmUgc21hbGxlciB0aGFuIG1heERvbWFpbkV4dGVudCBmb3IgdGhlIHNhbWUgU2NhbGUiKTtyZXR1cm4gdGhpcy5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cyhyKSYmeWwuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhEb21haW5FeHRlbnQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldChyKTtpZihuLnZhbHVlT2YoKTw9MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIHBvc2l0aXZlIik7dmFyIGk9dGhpcy5taW5Eb21haW5FeHRlbnQocik7aWYoaSE9bnVsbCYmbi52YWx1ZU9mKCk8aS52YWx1ZU9mKCkpdGhyb3cgbmV3IEVycm9yKCJtYXhEb21haW5FeHRlbnQgbXVzdCBiZSBsYXJnZXIgdGhhbiBtaW5Eb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHMocikmJnlsLldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21heERvbWFpbkV4dGVudHMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbj09bnVsbD90aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KHIpOih0aGlzLl9taW5Eb21haW5WYWx1ZXMuc2V0KHIsbiksdGhpcyl9LHQucHJvdG90eXBlLm1heERvbWFpblZhbHVlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PW51bGw/dGhpcy5fbWF4RG9tYWluVmFsdWVzLmdldChyKToodGhpcy5fbWF4RG9tYWluVmFsdWVzLnNldChyLG4pLHRoaXMpfSx0LnByb3RvdHlwZS5zZXRNaW5NYXhEb21haW5WYWx1ZXNUbz1mdW5jdGlvbihyKXt0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUocik7dmFyIG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9blswXSxvPW5bMV07cmV0dXJuIHRoaXMubWluRG9tYWluVmFsdWUocixpKSx0aGlzLm1heERvbWFpblZhbHVlKHIsbyksdGhpc30sdC5wcm90b3R5cGUub25QYW5FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUGFuRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25QYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0Ll9QSVhFTFNfUEVSX0xJTkU9MTIwLHR9KHJCZS5JbnRlcmFjdGlvbik7U290LlBhblpvb209bkJlfSk7dmFyIFAkdD1IKEVvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaUJlPShkZSgpLFV0KHBlKSksQSR0PU52KCksTW90PUZlKCksb0JlPUR2KCksYUJlPWZ1bmN0aW9uKGUpe2lCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9vdmVyQ29tcG9uZW50PSExLHIuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz1uZXcgTW90LkNhbGxiYWNrU2V0LHIuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzPW5ldyBNb3QuQ2FsbGJhY2tTZXQsci5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IE1vdC5DYWxsYmFja1NldCxyLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVNb3VzZUV2ZW50KG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZVRvdWNoRXZlbnQoaVtuWzBdXSxvKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9QSR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9QSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5faGFuZGxlTW91c2VFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX21vdXNlRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlUG9pbnRlckV2ZW50PWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKSxvPXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpO28mJm4/KHRoaXMuX292ZXJDb21wb25lbnR8fHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpLHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSkpOnRoaXMuX292ZXJDb21wb25lbnQmJnRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSksdGhpcy5fb3ZlckNvbXBvbmVudD1vJiZufSx0LnByb3RvdHlwZS5vblBvaW50ZXJFbnRlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyRW50ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyRXhpdD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJFeGl0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0ob0JlLkludGVyYWN0aW9uKTtFb3QuUG9pbnRlcj1hQmV9KTt2YXIgbDQ9SChaZz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWmcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjND0oZGUoKSxVdChwZSkpO2M0Ll9fZXhwb3J0U3Rhcih4JHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKHckdCgpLFpnKTtjNC5fX2V4cG9ydFN0YXIod290KCksWmcpO2M0Ll9fZXhwb3J0U3RhcihDJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKFAkdCgpLFpnKTt2YXIgc0JlPWU0KCk7Wmcuem9vbU91dD1zQmUuem9vbU91dH0pO3ZhciBUb3Q9SCh1ND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsQmU9KGRlKCksVXQocGUpKSxWRj1GZSgpLGNCZT1rYygpLGVzOyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKGVzPXU0LlByb3BlcnR5TW9kZXx8KHU0LlByb3BlcnR5TW9kZT17fSkpO3ZhciB1QmU9ZnVuY3Rpb24oZSl7bEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2JveFZpc2libGU9ITEsci5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19LHIuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHIuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHIuYWRkQ2xhc3MoInNlbGVjdGlvbi1ib3gtbGF5ZXIiKSxyLl9hZGp1c3RCb3VuZHNDYWxsYmFjaz1mdW5jdGlvbigpe3IucmVuZGVyKCl9LHIuX292ZXJmbG93SGlkZGVuPSEwLHIuX3hFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHIuX3lFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzZWxlY3Rpb24tYm94IiwhMCkucmVtb3ZlKCksdGhpcy5fYm94QXJlYT10aGlzLl9ib3guYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2VsZWN0aW9uLWFyZWEiLCEwKX0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm57d2lkdGg6cixoZWlnaHQ6bn19LHQucHJvdG90eXBlLmJvdW5kcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRCb3VuZHMoKToodGhpcy5fc2V0Qm91bmRzKHIpLHRoaXMuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49e3g6TWF0aC5taW4oci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9LGk9e3g6TWF0aC5tYXgoci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWF4KHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9O3RoaXMuX2JveEJvdW5kcz17dG9wTGVmdDpuLGJvdHRvbVJpZ2h0Oml9fSx0LnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54OnRoaXMuX3hTY2FsZT09bnVsbD8wOk1hdGgubWluKHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1pbih0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9LGJvdHRvbVJpZ2h0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6dGhpcy5feFNjYWxlPT1udWxsPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1heCh0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9fX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2JveFZpc2libGUpe3ZhciByPXRoaXMuYm91bmRzKCksbj1yLnRvcExlZnQueSxpPXIuYm90dG9tUmlnaHQueSxvPXIudG9wTGVmdC54LGE9ci5ib3R0b21SaWdodC54O2lmKCEoVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZWRi5NYXRoLmlzVmFsaWROdW1iZXIoaSkmJlZGLk1hdGguaXNWYWxpZE51bWJlcihvKSYmVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6byx5Om4sd2lkdGg6YS1vLGhlaWdodDppLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3hTY2FsZToodGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9cix0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLl94U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl95U2NhbGU6KHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlPXIsdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5feVNjYWxlLm9uVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS54RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2dldFhFeHRlbnQoKToodGhpcy5fc2V0WEV4dGVudChyKSx0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PWVzLlZBTFVFP3RoaXMuX3hFeHRlbnQ6dGhpcy5feFNjYWxlPT1udWxsP1t2b2lkIDAsdm9pZCAwXTpbdGhpcy5feFNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54KSx0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54KV19LHQucHJvdG90eXBlLl9zZXRYRXh0ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX3hFeHRlbnQ9cn0sdC5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRZRXh0ZW50KCk6KHRoaXMuX3NldFlFeHRlbnQociksdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFlFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUJvdW5kc01vZGU9PT1lcy5WQUxVRT90aGlzLl95RXh0ZW50OnRoaXMuX3lTY2FsZT09bnVsbD9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSx0LnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbihyKXt0aGlzLl95RXh0ZW50PXJ9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LHR9KGNCZS5Db21wb25lbnQpO3U0LlNlbGVjdGlvbkJveExheWVyPXVCZX0pO3ZhciBxRj1IKEFvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaEJlPShkZSgpLFV0KHBlKSksZkJlPWw0KCksQ290PUZlKCkscEJlPVlnKCksVUY9UG90KCksZEJlPVRvdCgpLG1CZT1mdW5jdGlvbihlKXtoQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZGV0ZWN0aW9uUmFkaXVzPTMsci5fcmVzaXphYmxlPSExLHIuX21vdmFibGU9ITEsci5faGFzQ29ybmVycz0hMCxyLmFkZENsYXNzKCJkcmFnLWJveC1sYXllciIpLHIuX2RyYWdJbnRlcmFjdGlvbj1uZXcgZkJlLkRyYWcsci5fc2V0VXBDYWxsYmFja3MoKSxyLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8ociksci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBDb3QuQ2FsbGJhY2tTZXQsci5fZHJhZ0NhbGxiYWNrcz1uZXcgQ290LkNhbGxiYWNrU2V0LHIuX2RyYWdFbmRDYWxsYmFja3M9bmV3IENvdC5DYWxsYmFja1NldCxyfXJldHVybiB0LnByb3RvdHlwZS5fc2V0VXBDYWxsYmFja3M9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG4saSxvLGEscz17bmV3Qm94OjAscmVzaXplOjEsbW92ZToyfSxsPXMubmV3Qm94LGM9ZnVuY3Rpb24oZil7bj1yLl9nZXRSZXNpemluZ0VkZ2VzKGYpO3ZhciBwPXIuYm91bmRzKCksZD1wLnRvcExlZnQueDw9Zi54JiZmLng8PXAuYm90dG9tUmlnaHQueCYmcC50b3BMZWZ0Lnk8PWYueSYmZi55PD1wLmJvdHRvbVJpZ2h0Lnk7ci5ib3hWaXNpYmxlKCkmJihuLnRvcHx8bi5ib3R0b218fG4ubGVmdHx8bi5yaWdodCk/bD1zLnJlc2l6ZTpyLmJveFZpc2libGUoKSYmci5tb3ZhYmxlKCkmJmQ/bD1zLm1vdmU6KGw9cy5uZXdCb3gsci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pLHIuX3hCb3VuZHNNb2RlPT09VUYuUHJvcGVydHlNb2RlLlZBTFVFJiZyLnhTY2FsZSgpIT1udWxsJiZyLl9zZXRYRXh0ZW50KFtyLnhTY2FsZSgpLmludmVydChmLngpLHIueFNjYWxlKCkuaW52ZXJ0KGYueCldKSxyLl95Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci55U2NhbGUoKSE9bnVsbCYmci5fc2V0WUV4dGVudChbci55U2NhbGUoKS5pbnZlcnQoZi55KSxyLnlTY2FsZSgpLmludmVydChmLnkpXSksci5yZW5kZXIoKSksci5ib3hWaXNpYmxlKCEwKSxwPXIuYm91bmRzKCksaT17eDpwLnRvcExlZnQueCx5OnAudG9wTGVmdC55fSxvPXt4OnAuYm90dG9tUmlnaHQueCx5OnAuYm90dG9tUmlnaHQueX0sYT1mLHIuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHApfSx1PWZ1bmN0aW9uKGYscCl7c3dpdGNoKGwpe2Nhc2Ugcy5uZXdCb3g6by54PXAueCxvLnk9cC55O2JyZWFrO2Nhc2Ugcy5yZXNpemU6bi5ib3R0b20/by55PXAueTpuLnRvcCYmKGkueT1wLnkpLG4ucmlnaHQ/by54PXAueDpuLmxlZnQmJihpLng9cC54KTticmVhaztjYXNlIHMubW92ZTp2YXIgZD1wLngtYS54LGc9cC55LWEueTtpLngrPWQsaS55Kz1nLG8ueCs9ZCxvLnkrPWcsYT1wO2JyZWFrfXIuX3NldEJvdW5kcyh7dG9wTGVmdDppLGJvdHRvbVJpZ2h0Om99KSxyLl94Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci54U2NhbGUoKSE9bnVsbCYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoaS54KSxyLnhTY2FsZSgpLmludmVydChvLngpXSksci5feUJvdW5kc01vZGU9PT1VRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueVNjYWxlKCkhPW51bGwmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGkueSksci55U2NhbGUoKS5pbnZlcnQoby55KV0pLHIucmVuZGVyKCksci5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfSxoPWZ1bmN0aW9uKGYscCl7bD09PXMubmV3Qm94JiZmLng9PT1wLngmJmYueT09PXAueSYmci5ib3hWaXNpYmxlKCExKSxyLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3Moci5ib3VuZHMoKSl9O3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChjKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHUpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoaCksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7ci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChjKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyh1KSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChoKSxyLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9O2lmKHRoaXMuX2RldGVjdGlvbkVkZ2VUPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlQj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUw9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VSPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9oYXNDb3JuZXJzKXt2YXIgaT1mdW5jdGlvbigpe3JldHVybiByLl9ib3guYXBwZW5kKCJjaXJjbGUiKS5zdHlsZXMoe29wYWNpdHk6MCxmaWxsOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlRmlsbCJ9KX07dGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRyIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJyIiwhMCl9fSx0LnByb3RvdHlwZS5fZ2V0UmVzaXppbmdFZGdlcz1mdW5jdGlvbihyKXt2YXIgbj17dG9wOiExLGJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gbjt2YXIgaT10aGlzLmJvdW5kcygpLG89aS50b3BMZWZ0LnksYT1pLmJvdHRvbVJpZ2h0Lnkscz1pLnRvcExlZnQueCxsPWkuYm90dG9tUmlnaHQueCxjPXRoaXMuX2RldGVjdGlvblJhZGl1cztyZXR1cm4gcy1jPD1yLngmJnIueDw9bCtjJiYobi50b3A9by1jPD1yLnkmJnIueTw9bytjLG4uYm90dG9tPWEtYzw9ci55JiZyLnk8PWErYyksby1jPD1yLnkmJnIueTw9YStjJiYobi5sZWZ0PXMtYzw9ci54JiZyLng8PXMrYyxuLnJpZ2h0PWwtYzw9ci54JiZyLng8PWwrYyksbn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgcj10aGlzLmJvdW5kcygpLG49ci50b3BMZWZ0LnksaT1yLmJvdHRvbVJpZ2h0Lnksbz1yLnRvcExlZnQueCxhPXIuYm90dG9tUmlnaHQueDt0aGlzLl9kZXRlY3Rpb25FZGdlVC5hdHRycyh7eDE6byx5MTpuLHgyOmEseTI6biwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2RldGVjdGlvbkVkZ2VCLmF0dHJzKHt4MTpvLHkxOmkseDI6YSx5MjppLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUwuYXR0cnMoe3gxOm8seTE6bix4MjpvLHkyOmksInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9kZXRlY3Rpb25FZGdlUi5hdHRycyh7eDE6YSx5MTpuLHgyOmEseTI6aSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2hhc0Nvcm5lcnMmJih0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTC5hdHRycyh7Y3g6byxjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFIuYXR0cnMoe2N4OmEsY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDpvLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6YSxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImRldGVjdGlvbiByYWRpdXMgY2Fubm90IGJlIG5lZ2F0aXZlLiIpO3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM9cix0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9yZXNpemFibGU6KHRoaXMuX3Jlc2l6YWJsZT1yLHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXMociksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfSx0LnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21vdmFibGU6KHRoaXMuX21vdmFibGU9cix0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldE1vdmFibGVDbGFzcz1mdW5jdGlvbigpe3RoaXMubW92YWJsZSgpJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJtb3ZhYmxlIik6dGhpcy5yZW1vdmVDbGFzcygibW92YWJsZSIpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LHQucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKToodGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0aGlzLnJlc2l6YWJsZSgpKSx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpLGUucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj1wQmUuY29lcmNlRXh0ZXJuYWxEMyhyKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19KX0sdH0oZEJlLlNlbGVjdGlvbkJveExheWVyKTtBb3QuRHJhZ0JveExheWVyPW1CZX0pO3ZhciBMb3Q9SChJb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KElvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdCZT0oZGUoKSxVdChwZSkpLF9CZT1GZSgpLHlCZT1rYygpLE92OyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKE92fHwoT3Y9e30pKTt2YXIgdkJlPWZ1bmN0aW9uKGUpe2dCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9tb2RlPU92LlZBTFVFLHIhPT10Lk9SSUVOVEFUSU9OX1ZFUlRJQ0FMJiZyIT09dC5PUklFTlRBVElPTl9IT1JJWk9OVEFMKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEd1aWRlTGluZUxheWVyIik7cmV0dXJuIG4uX29yaWVudGF0aW9uPXIsbi5fb3ZlcmZsb3dIaWRkZW49ITAsbi5hZGRDbGFzcygiZ3VpZGUtbGluZS1sYXllciIpLG4uX2lzVmVydGljYWwoKT9uLmFkZENsYXNzKCJ2ZXJ0aWNhbCIpOm4uYWRkQ2xhc3MoImhvcml6b250YWwiKSxuLl9zY2FsZVVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7bi5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLG4ucmVuZGVyKCl9LG59cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2d1aWRlTGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJndWlkZS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PXQuT1JJRU5UQVRJT05fVkVSVElDQUx9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5zY2FsZSgpLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuc2NhbGUoKS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMuX2d1aWRlTGluZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5fbW9kZT09PU92LlZBTFVFJiZ0aGlzLnZhbHVlKCkhPW51bGw/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09T3YuUElYRUwmJnRoaXMucGl4ZWxQb3NpdGlvbigpIT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpKX0sdC5wcm90b3R5cGUuX3NldFBpeGVsUG9zaXRpb25XaXRob3V0Q2hhbmdpbmdNb2RlPWZ1bmN0aW9uKHIpe3RoaXMuX3BpeGVsUG9zaXRpb249cix0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl92YWx1ZT10aGlzLnNjYWxlKCkuaW52ZXJ0KHRoaXMucGl4ZWxQb3NpdGlvbigpKSksdGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fc2NhbGU7dmFyIG49dGhpcy5fc2NhbGU7cmV0dXJuIG4hPW51bGwmJm4ub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3NjYWxlPXIsdGhpcy5fc2NhbGUub25VcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fdmFsdWU6KHRoaXMuX3ZhbHVlPXIsdGhpcy5fbW9kZT1Pdi5WQUxVRSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uO2lmKCFfQmUuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpKXRocm93IG5ldyBFcnJvcigicGl4ZWxQb3NpdGlvbiBtdXN0IGJlIGEgZmluaXRlIG51bWJlciIpO3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uPXIsdGhpcy5fbW9kZT1Pdi5QSVhFTCx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuc2NhbGUoKSE9bnVsbCYmdGhpcy5zY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKX0sdC5PUklFTlRBVElPTl9WRVJUSUNBTD0idmVydGljYWwiLHQuT1JJRU5UQVRJT05fSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsdH0oeUJlLkNvbXBvbmVudCk7SW90Lkd1aWRlTGluZUxheWVyPXZCZX0pO3ZhciBJJHQ9SChSb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHhCZT0oZGUoKSxVdChwZSkpLGJCZT1Mb3QoKSx3QmU9bDQoKSxrb3Q9RmUoKSxTQmU9ZnVuY3Rpb24oZSl7eEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7bi5fZGV0ZWN0aW9uUmFkaXVzPTMsbi5fZW5hYmxlZD0hMCxuLmFkZENsYXNzKCJkcmFnLWxpbmUtbGF5ZXIiKSxuLmFkZENsYXNzKCJlbmFibGVkIiksbi5fZHJhZ0ludGVyYWN0aW9uPW5ldyB3QmUuRHJhZyxuLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8obik7dmFyIGk9ZnVuY3Rpb24oYyl7cmV0dXJuIG4uX2lzVmVydGljYWwoKSYmbi5waXhlbFBvc2l0aW9uKCktbi5kZXRlY3Rpb25SYWRpdXMoKTw9Yy54JiZjLng8PW4ucGl4ZWxQb3NpdGlvbigpK24uZGV0ZWN0aW9uUmFkaXVzKCl8fCFuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PWMueSYmYy55PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfSxvPSExLGE9ZnVuY3Rpb24oYyl7aShjKSYmKG89ITAsbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoYSk7dmFyIHM9ZnVuY3Rpb24oYyx1KXtvJiYobi5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUobi5faXNWZXJ0aWNhbCgpP3UueDp1LnkpLG4uX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcocyk7dmFyIGw9ZnVuY3Rpb24oYyx1KXtvJiYobz0hMSxuLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtyZXR1cm4gbi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChsKSxuLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KGEpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHMpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKGwpLG4uX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrb3QuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcga290LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGtvdC5DYWxsYmFja1NldCxufXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KS5jbGFzc2VkKCJkcmFnLWVkZ2UiLCEwKX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpc30sdC5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXIsdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9cixyP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIiksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcyl9LHQucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sdH0oYkJlLkd1aWRlTGluZUxheWVyKTtSb3QuRHJhZ0xpbmVMYXllcj1TQmV9KTt2YXIgTCR0PUgoTm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNQmU9KGRlKCksVXQocGUpKSxFQmU9a2MoKTtmdW5jdGlvbiBHRihlLHQscil7dmFyIG49e307aWYociE9PXZvaWQgMClmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpLTFdLGE9cltpXTtuW2FdPW99cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBsPWUuc2NhbGUocyk7aWYoIXQpcmV0dXJuIGw7dmFyIGMsdT1uW3NdPT09dm9pZCAwP3ZvaWQgMDplLnNjYWxlKG5bc10pO3JldHVybiB1IT09dm9pZCAwJiYoYz11KyhsLXUpLzIpLGN9fXZhciBUQmU9ZnVuY3Rpb24oZSl7TUJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImdyaWRsaW5lcyIpLGkuX3hTY2FsZT1yLGkuX3lTY2FsZT1uLGkuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbmRlcigpfSxpLl94U2NhbGUmJmkuX3hTY2FsZS5vblVwZGF0ZShpLl9yZW5kZXJDYWxsYmFjayksaS5feVNjYWxlJiZpLl95U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGl9cmV0dXJuIHQucHJvdG90eXBlLmJldHdlZW5YPWZ1bmN0aW9uKHIpe3JldHVybiByPT09dm9pZCAwP3RoaXMuX2JldHdlZW5YOihyIT09dGhpcy5fYmV0d2VlblgmJih0aGlzLl9iZXR3ZWVuWD1yLHRoaXMucmVuZGVyKCkpLHRoaXMpfSx0LnByb3RvdHlwZS5iZXR3ZWVuWT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMD90aGlzLl9iZXR3ZWVuWToociE9PXRoaXMuX2JldHdlZW5ZJiYodGhpcy5fYmV0d2Vlblk9cix0aGlzLnJlbmRlcigpKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApLHRoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3JlZHJhd1hMaW5lcygpLHRoaXMuX3JlZHJhd1lMaW5lcygpLHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLl95U2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9yZWRyYXdYTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl94U2NhbGUpe3ZhciByPXRoaXMuYmV0d2VlblgoKSxuPXRoaXMuX3hTY2FsZS50aWNrcygpLnNsaWNlKHI/MTowKSxpPXRoaXMuX3hMaW5lc0NvbnRhaW5lci5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKG4pLG89aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpO28uYXR0cigieDEiLEdGKHRoaXMuX3hTY2FsZSxyLHRoaXMuX3hTY2FsZS50aWNrcygpKSkuYXR0cigieTEiLDApLmF0dHIoIngyIixHRih0aGlzLl94U2NhbGUscix0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkyIix0aGlzLmhlaWdodCgpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscikuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09MH0pLGkuZXhpdCgpLnJlbW92ZSgpfX0sdC5wcm90b3R5cGUuX3JlZHJhd1lMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3lTY2FsZSl7dmFyIHI9dGhpcy5iZXR3ZWVuWSgpLG49dGhpcy5feVNjYWxlLnRpY2tzKCkuc2xpY2Uocj8xOjApLGk9dGhpcy5feUxpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEobiksbz1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UoaSk7by5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHIpLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PTB9KSxpLmV4aXQoKS5yZW1vdmUoKX19LHR9KEVCZS5Db21wb25lbnQpO05vdC5HcmlkbGluZXM9VEJlfSk7dmFyIFdGPUgoRG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDQmU9KGRlKCksVXQocGUpKSxBQmU9WWcoKSxQQmU9a2MoKSxJQmU9ZnVuY3Rpb24oZSl7Q0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2RldGFjaENhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiByLnJlbW92ZShuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9QUJlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBpLmFuY2hvcihuLmVsZW1lbnQoKSl9KSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gci5yZW5kZXIoKX0pLHRoaXN9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoImhhcygpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sdC5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPWZ1bmN0aW9uKHIpe3IucGFyZW50KHRoaXMpLHIub25EZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX2lzQW5jaG9yZWQmJnIuYW5jaG9yKHRoaXMuZWxlbWVudCgpKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmhhcyhyKSYmKHIub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUociksci5kZXRhY2goKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiExfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoIl9mb3JFYWNoKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuaW52YWxpZGF0ZUNhY2hlKCl9KX0sdH0oUEJlLkNvbXBvbmVudCk7RG90LkNvbXBvbmVudENvbnRhaW5lcj1JQmV9KTt2YXIgem90PUgoT290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBMQmU9KGRlKCksVXQocGUpKSxrJHQ9RmUoKSxrQmU9V0YoKSxSQmU9ZnVuY3Rpb24oZSl7TEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fY29tcG9uZW50cz1bXSxuLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uYXBwZW5kKGkpfSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChyKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmluZGV4T2Yocik+PTB9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fY29tcG9uZW50cy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVxdWVzdGVkU3BhY2UocixuKX0pO3JldHVybnttaW5XaWR0aDprJHQuTWF0aC5tYXgoaSxmdW5jdGlvbihvKXtyZXR1cm4gby5taW5XaWR0aH0sMCksbWluSGVpZ2h0OmskdC5NYXRoLm1heChpLGZ1bmN0aW9uKG8pe3JldHVybiBvLm1pbkhlaWdodH0sMCl9fSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fZm9yRWFjaChmdW5jdGlvbihhKXthLmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LG8ud2lkdGgoKSxvLmhlaWdodCgpKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRXaWR0aCgpfSl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRIZWlnaHQoKX0pfSx0LnByb3RvdHlwZS5jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuc2xpY2UoKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsJiYhdGhpcy5oYXMocikmJihyLmRldGFjaCgpLHRoaXMuX2NvbXBvbmVudHMucHVzaChyKSx0aGlzLl9hZG9wdEFuZEFuY2hvcihyKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZihyKTtyZXR1cm4gbj49MD8odGhpcy5fY29tcG9uZW50cy5zcGxpY2UobiwxKSwhMCk6ITF9LHR9KGtCZS5Db21wb25lbnRDb250YWluZXIpO09vdC5Hcm91cD1SQmV9KTt2YXIgUiR0PUgoRm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOQmU9KGRlKCksVXQocGUpKSxZRj1fbCgpLERCZT0kQSgpLE9CZT1CdSgpLHpCZT1GZSgpLEZCZT1rYygpLEJCZT1mdW5jdGlvbihlKXtOQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fdGV4dFBhZGRpbmc9NSxyPT1udWxsKXRocm93IG5ldyBFcnJvcigiSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQgcmVxdWlyZXMgYSBpbnRlcnBvbGF0ZWRDb2xvclNjYWxlIik7cmV0dXJuIG4uX3NjYWxlPXIsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24oaSl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX3NjYWxlLm9uVXBkYXRlKG4uX3JlZHJhd0NhbGxiYWNrKSxuLl9mb3JtYXR0ZXI9T0JlLmdlbmVyYWwoKSxuLl9vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsbi5fZXhwYW5kcz0hMSxuLmFkZENsYXNzKCJsZWdlbmQiKSxuLmFkZENsYXNzKCJpbnRlcnBvbGF0ZWQtY29sb3ItbGVnZW5kIiksbn1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5leHBhbmRzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2V4cGFuZHM6KHRoaXMuX2V4cGFuZHM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0Ll9lbnN1cmVPcmllbnRhdGlvbj1mdW5jdGlvbihyKXtpZihyPXIudG9Mb3dlckNhc2UoKSxyPT09Imhvcml6b250YWwifHxyPT09ImxlZnQifHxyPT09InJpZ2h0IilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoJyInK3IrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX29yaWVudGF0aW9uOih0aGlzLl9vcmllbnRhdGlvbj10Ll9lbnN1cmVPcmllbnRhdGlvbihyKSx0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHx0aGlzLl9pc1ZlcnRpY2FsKCl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHwhdGhpcy5faXNWZXJ0aWNhbCgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj10Ll9ERUZBVUxUX05VTV9TV0FUQ0hFUyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCk7aWYocj09PTEpcmV0dXJuW25bMF1dO2Zvcih2YXIgaT0oblsxXS1uWzBdKS8oci0xKSxvPVtdLGE9MDthPHI7YSsrKW8ucHVzaChuWzBdK2kqYSk7cmV0dXJuIG99LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3N3YXRjaENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzd2F0Y2gtY29udGFpbmVyIiwhMCksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoLWJvdW5kaW5nLWJveCIsITApLHRoaXMuX2xvd2VyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9MQUJFTF9DTEFTUywhMCksdGhpcy5fdXBwZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt2YXIgcj1uZXcgWUYuU3ZnQ29udGV4dCh0aGlzLmNvbnRlbnQoKS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBZRi5NZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBZRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgWUYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlcil9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1vLHM9dGhpcy5fc2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gaS5fbWVhc3VyZXIubWVhc3VyZShpLl9mb3JtYXR0ZXIocCkpLndpZHRofSksYyx1LGg9dC5fREVGQVVMVF9OVU1fU1dBVENIRVM7aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgZj16QmUuTWF0aC5tYXgobCwwKTt1PWErbyt0aGlzLl90ZXh0UGFkZGluZytmK3RoaXMuX3RleHRQYWRkaW5nLGM9aCpvfWVsc2UgYz1hK28rYSx1PXRoaXMuX3RleHRQYWRkaW5nK2xbMF0raCpvK2xbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOnUsbWluSGVpZ2h0OmN9fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbiE9PSJob3Jpem9udGFsIn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCksaT10aGlzLl9mb3JtYXR0ZXIoblswXSksbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGkpLndpZHRoLGE9dGhpcy5fZm9ybWF0dGVyKG5bMV0pLHM9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShhKS53aWR0aCxsPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYz10aGlzLl90ZXh0UGFkZGluZyx1PXt4OjAseTowfSxoPXt4OjAseTowfSxmPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxwPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxkLGcsXyx5LHg9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sYixTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7Uz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBDPU1hdGgubWF4KG8scyk7Yj0odGhpcy53aWR0aCgpLUMtMip0aGlzLl90ZXh0UGFkZGluZykvMixkPU1hdGgubWF4KHRoaXMud2lkdGgoKS1iLTIqYy1DLDApLGc9MSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIHIuaGVpZ2h0KCktKFIrMSl9LHAueUFsaWduPSJ0b3AiLHUueT0wLGYueUFsaWduPSJib3R0b20iLGgueT0wLHRoaXMuX29yaWVudGF0aW9uPT09ImxlZnQiPyhfPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGMrQytjfSxwLnhBbGlnbj0icmlnaHQiLHUueD0tKGIrZCtjKSxmLnhBbGlnbj0icmlnaHQiLGgueD0tKGIrZCtjKSk6KF89ZnVuY3Rpb24oTCxSKXtyZXR1cm4gYn0scC54QWxpZ249ImxlZnQiLHUueD1iK2QrYyxmLnhBbGlnbj0ibGVmdCIsaC54PWIrZCtjKSx4LndpZHRoPWQseC5oZWlnaHQ9UypnfWVsc2UgYj1NYXRoLm1heChjLCh0aGlzLmhlaWdodCgpLWwpLzIpLFM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktYyo0LW8tcyksMCksZD0xLGc9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKmIsMCksXz1mdW5jdGlvbihMLFIpe3JldHVybiBNYXRoLmZsb29yKG8rMipjKStSfSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIGJ9LHAueEFsaWduPSJyaWdodCIsdS54PS1jLGYueEFsaWduPSJsZWZ0IixoLng9Yyx4Lnk9Yix4LndpZHRoPVMqZCx4LmhlaWdodD1nO3gueD1fKG51bGwsMCksdGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoYSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxwLHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt2YXIgUD0idHJhbnNsYXRlKCIrdS54KyIsICIrdS55KyIpIjt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsUCksdGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoaSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxmLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt2YXIgaz0idHJhbnNsYXRlKCIraC54KyIsICIraC55KyIpIjt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsayksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoeCk7dmFyIE89dGhpcy5fZ2VuZXJhdGVUaWNrcyhTKSxEPXRoaXMuX3N3YXRjaENvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc3dhdGNoIikuZGF0YShPKSxCPUQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKSxJPUQubWVyZ2UoQik7cmV0dXJuIEQuZXhpdCgpLnJlbW92ZSgpLEkuYXR0cnMoe2ZpbGw6ZnVuY3Rpb24oTCxSKXtyZXR1cm4gci5fc2NhbGUuc2NhbGUoTCl9LHdpZHRoOmQsaGVpZ2h0OmcseDpfLHksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksREJlLkFERF9USVRMRV9FTEVNRU5UUyYmQi5hcHBlbmQoInRpdGxlIikudGV4dChmdW5jdGlvbihMKXtyZXR1cm4gci5fZm9ybWF0dGVyKEwpfSksdGhpc30sdC5fREVGQVVMVF9OVU1fU1dBVENIRVM9MTEsdC5MRUdFTkRfTEFCRUxfQ0xBU1M9ImxlZ2VuZC1sYWJlbCIsdH0oRkJlLkNvbXBvbmVudCk7Rm90LkludGVycG9sYXRlZENvbG9yTGVnZW5kPUJCZX0pO3ZhciBWb3Q9SChoND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaDQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCb3Q9KGRlKCksVXQocGUpKSxqRj1fbCgpLEhCZT1rYygpLEhvdD1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3I9PT12b2lkIDAmJihyPSIiKSxuPT09dm9pZCAwJiYobj0wKTt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KHIpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKHRoaXMuX3RleHQpLG89KHRoaXMuYW5nbGUoKT09PTA/aS53aWR0aDppLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxhPSh0aGlzLmFuZ2xlKCk9PT0wP2kuaGVpZ2h0Omkud2lkdGgpKzIqdGhpcy5wYWRkaW5nKCk7cmV0dXJue21pbldpZHRoOm8sbWluSGVpZ2h0OmF9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpO3ZhciByPW5ldyBqRi5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgakYuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBqRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgakYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSx0LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RleHQ7aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hbmdsZTtpZihyJT0zNjAscj4xODA/ci09MzYwOnI8LTE4MCYmKHIrPTM2MCkscj09PS05MHx8cj09PTB8fHI9PT05MCl0aGlzLl9hbmdsZT1yO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBhbmdsZSBmb3IgTGFiZWwiKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5wYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3BhZGRpbmc7aWYocj0rcixyPDApdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBwYWRkaW5nIHZhbHVlLiBDYW5ub3QgYmUgbGVzcyB0aGFuIDAuIik7cmV0dXJuIHRoaXMuX3BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxuPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLmhlaWdodCgpLXIuaGVpZ2h0KS8yLHRoaXMucGFkZGluZygpKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLndpZHRoKCktci53aWR0aCkvMix0aGlzLnBhZGRpbmcoKSksMCk7dGhpcy5fdGV4dENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIituKyIpIik7dmFyIG89dGhpcy53aWR0aCgpLTIqaSxhPXRoaXMuaGVpZ2h0KCktMipuLHM9e3hBbGlnbjp0aGlzLnhBbGlnbm1lbnQoKSx5QWxpZ246dGhpcy55QWxpZ25tZW50KCksdGV4dFJvdGF0aW9uOnRoaXMuYW5nbGUoKX07cmV0dXJuIHRoaXMuX3dyaXRlci53cml0ZSh0aGlzLl90ZXh0LG8sYSxzKSx0aGlzfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0fShIQmUuQ29tcG9uZW50KTtoNC5MYWJlbD1Ib3Q7dmFyIFZCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5USVRMRV9MQUJFTF9DTEFTUyksaX1yZXR1cm4gdC5USVRMRV9MQUJFTF9DTEFTUz0idGl0bGUtbGFiZWwiLHR9KEhvdCk7aDQuVGl0bGVMYWJlbD1WQmU7dmFyIFVCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5BWElTX0xBQkVMX0NMQVNTKSxpfXJldHVybiB0LkFYSVNfTEFCRUxfQ0xBU1M9ImF4aXMtbGFiZWwiLHR9KEhvdCk7aDQuQXhpc0xhYmVsPVVCZX0pO3ZhciBYRj1IKGJkPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJzPShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gcUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KGUvMiwyKSl9fWJkLmNpcmNsZT1xQmU7ZnVuY3Rpb24gR0JlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbFNxdWFyZSkuc2l6ZShNYXRoLnBvdyhlLDIpKX19YmQuc3F1YXJlPUdCZTtmdW5jdGlvbiBXQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KGUsMikpfX1iZC5jcm9zcz1XQmU7ZnVuY3Rpb24gWUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbERpYW1vbmQpLnNpemUoTWF0aC50YW4oTWF0aC5QSS82KSpNYXRoLnBvdyhlLDIpLzIpfX1iZC5kaWFtb25kPVlCZTtmdW5jdGlvbiBqQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sVHJpYW5nbGUpLnNpemUoTWF0aC5zcXJ0KDMpKk1hdGgucG93KGUvMiwyKSl9fWJkLnRyaWFuZ2xlPWpCZTt2YXIgWEJlPS44OTA4MTMwOTE1MjkyODUyO2Z1bmN0aW9uICRCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xTdGFyKS5zaXplKFhCZSpNYXRoLnBvdyhlLzIsMikpfX1iZC5zdGFyPSRCZTt2YXIgS0JlPSgxL01hdGguc3FydCgxMikvMisxKSozO2Z1bmN0aW9uIFpCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xXeWUpLnNpemUoS0JlKk1hdGgucG93KGUvMi40LDIpKX19YmQud3llPVpCZX0pO3ZhciBOJHQ9SChxb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEpCZT0oZGUoKSxVdChwZSkpLHp2PShFcigpLFV0KE1yKSksJEY9X2woKSxRQmU9JEEoKSx0SGU9QnUoKSxlSGU9WEYoKSxKZz1GZSgpLHJIZT1rYygpLFVvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0xLzApLHRoaXMuY29sdW1ucz10LHRoaXMuYm90dG9tUGFkZGluZz1yLHRoaXMubWF4V2lkdGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10aGlzLmdldFdpZHRoQXZhaWxhYmxlKCk7dC53aWR0aD1NYXRoLm1pbihuLHIpLHRoaXMuY29sdW1ucy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXRoaXMuY29sdW1uc1t0XSxuPTAsaT0wO2k8dDtpKyspbis9dGhpcy5jb2x1bW5zW2ldLndpZHRoO3JldHVybnt0b3BMZWZ0Ont4Om4seTowfSxib3R0b21SaWdodDp7eDpuK3Iud2lkdGgseTpyLmhlaWdodH19fSxlLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSmcuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhlaWdodDtyZXR1cm4gcn0pLDApK3RoaXMuYm90dG9tUGFkZGluZ30sZS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbih0LHIpe3ZhciBuPXIud2lkdGg7cmV0dXJuIHQrbn0sMCksdGhpcy5tYXhXaWR0aCl9LGUucHJvdG90eXBlLmdldFdpZHRoQXZhaWxhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRXaWR0aCgpO3JldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoLXQsMCl9LGV9KCksbkhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0xLzApLHI9PT12b2lkIDAmJihyPTEvMCksbj09PXZvaWQgMCYmKG49MCksaT09PXZvaWQgMCYmKGk9W10pLHRoaXMubWF4V2lkdGg9dCx0aGlzLm1heEhlaWdodD1yLHRoaXMucGFkZGluZz1uLHRoaXMucm93cz1pfXJldHVybiBlLnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24odCl7dC5tYXhXaWR0aD10aGlzLm1heFdpZHRoLXRoaXMucGFkZGluZyoyLHRoaXMucm93cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRDb2x1bW5Cb3VuZHM9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmdldFJvd0JvdW5kcyh0KSxpPXRoaXMucm93c1t0XS5nZXRCb3VuZHMocik7cmV0dXJuIGkudG9wTGVmdC54Kz1uLnRvcExlZnQueCxpLmJvdHRvbVJpZ2h0LngrPW4udG9wTGVmdC54LGkudG9wTGVmdC55Kz1uLnRvcExlZnQueSxpLmJvdHRvbVJpZ2h0LnkrPW4udG9wTGVmdC55LGl9LGUucHJvdG90eXBlLmdldFJvd0JvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIHI9dGhpcy5wYWRkaW5nLG49dGhpcy5wYWRkaW5nLGk9MDtpPHQ7aSsrKW4rPXRoaXMucm93c1tpXS5nZXRIZWlnaHQoKTt2YXIgbz17dG9wTGVmdDp7eDpyLHk6bn0sYm90dG9tUmlnaHQ6e3g6cit0aGlzLnJvd3NbdF0uZ2V0V2lkdGgoKSx5Om4rdGhpcy5yb3dzW3RdLmdldEhlaWdodCgpfX07cmV0dXJuIG99LGUucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrci5nZXRIZWlnaHQoKX0sMCkrdGhpcy5wYWRkaW5nKjIsdGhpcy5tYXhIZWlnaHQpfSxlLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbihKZy5NYXRoLm1heCh0aGlzLnJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFdpZHRoKCl9KSwwKSt0aGlzLnBhZGRpbmcqMix0aGlzLm1heFdpZHRoKX0sZX0oKSxpSGU9ZnVuY3Rpb24oZSl7SkJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3BhZGRpbmc9NSxuLl9yb3dCb3R0b21QYWRkaW5nPTMsbi5hZGRDbGFzcygibGVnZW5kIiksbi5tYXhFbnRyaWVzUGVyUm93KDEpLHI9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJMZWdlbmQgcmVxdWlyZXMgYSBjb2xvclNjYWxlIik7cmV0dXJuIG4uX2NvbG9yU2NhbGU9cixuLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbihpKXtyZXR1cm4gbi5yZWRyYXcoKX0sbi5fY29sb3JTY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPXRIZS5pZGVudGl0eSgpLG4ubWF4TGluZXNQZXJFbnRyeSgxKSxuLnhBbGlnbm1lbnQoInJpZ2h0IikueUFsaWdubWVudCgidG9wIiksbi5jb21wYXJhdG9yKGZ1bmN0aW9uKGksbyl7dmFyIGE9bi5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gbi5fZm9ybWF0dGVyKHMpfSk7cmV0dXJuIGEuaW5kZXhPZihpKS1hLmluZGV4T2Yobyl9KSxuLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gZUhlLmNpcmNsZSgpfSxuLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9ST1dfQ0xBU1MsITApLG49ci5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKTtuLmFwcGVuZCgidGV4dCIpO3ZhciBpPW5ldyAkRi5TdmdDb250ZXh0KHIubm9kZSgpLG51bGwsUUJlLkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3ICRGLkNhY2hlTWVhc3VyZXIoaSksdGhpcy5fd3JhcHBlcj1uZXcgJEYuV3JhcHBlcigpLm1heExpbmVzKHRoaXMubWF4TGluZXNQZXJFbnRyeSgpKSx0aGlzLl93cml0ZXI9bmV3ICRGLldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsPyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT1yLHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LHQucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1uZXcgbkhlKHIsbix0aGlzLl9wYWRkaW5nKSxzPXRoaXMuX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGkuX2NvbXBhcmF0b3IoaS5fZm9ybWF0dGVyKGMpLGkuX2Zvcm1hdHRlcih1KSl9KSxsPW5ldyBVb3Q7cmV0dXJuIGEuYWRkUm93KGwpLGwuYm90dG9tUGFkZGluZz10aGlzLl9yb3dCb3R0b21QYWRkaW5nLHMuZm9yRWFjaChmdW5jdGlvbihjLHUpe2wuY29sdW1ucy5sZW5ndGgvMj09PWkubWF4RW50cmllc1BlclJvdygpJiYobD1uZXcgVW90LGwuYm90dG9tUGFkZGluZz1pLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgaD1sLmdldFdpZHRoQXZhaWxhYmxlKCksZj1pLl9mb3JtYXR0ZXIoYykscD1pLl9tZWFzdXJlci5tZWFzdXJlKGYpLndpZHRoLGQ9aC1vLXA8MDtkJiZsLmNvbHVtbnMubGVuZ3RoPjEmJihsPW5ldyBVb3QsbC5ib3R0b21QYWRkaW5nPWkuX3Jvd0JvdHRvbVBhZGRpbmcsYS5hZGRSb3cobCkpO3ZhciBnPXt3aWR0aDpvLGhlaWdodDpvLGRhdGE6e25hbWU6Yyx0eXBlOiJzeW1ib2wifX07bC5hZGRDb2x1bW4oZyksaD1sLmdldFdpZHRoQXZhaWxhYmxlKCk7dmFyIF89TWF0aC5taW4oaCxwKTtpLl93cmFwcGVyLm1heExpbmVzKGkubWF4TGluZXNQZXJFbnRyeSgpKTt2YXIgeT1pLl93cmFwcGVyLndyYXAoZixpLl9tZWFzdXJlcixfKS5ub0xpbmVzLHg9eSpvLGI9e3dpZHRoOl8saGVpZ2h0OngsZGF0YTp7bmFtZTpjLHR5cGU6InRleHQifX07bC5hZGRDb2x1bW4oYil9KSxhfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoSmcuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSxyXSxyKSxuKTtyZXR1cm57bWluSGVpZ2h0OmkuZ2V0SGVpZ2h0KCksbWluV2lkdGg6aS5nZXRXaWR0aCgpfX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBpLnJvd3MucmVkdWNlKGZ1bmN0aW9uKG8sYSxzKXtpZihvLmxlbmd0aCE9PTApcmV0dXJuIG87dmFyIGw9aS5nZXRSb3dCb3VuZHMocyksYz1KZy5NYXRoLndpdGhpbihyLGwpO3JldHVybiBjP2EuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24odSxoLGYpe3ZhciBwPWkuZ2V0Q29sdW1uQm91bmRzKHMsZiksZD1KZy5NYXRoLndpdGhpbihyLHApO2lmKGQpe3ZhciBnPW4uY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfUk9XX0NMQVNTKS5ub2RlcygpW3NdLF89enYuc2VsZWN0KGcpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfRU5UUllfQ0xBU1MpLm5vZGVzKClbTWF0aC5mbG9vcihmLzIpXSx5PXp2LnNlbGVjdChfKS5zZWxlY3QoIi4iK3QuTEVHRU5EX1NZTUJPTF9DTEFTUykseD1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHp2LnNlbGVjdChnKSksYj1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHkpO3JldHVyblt7Ym91bmRzOkpnLkRPTS5lbGVtZW50QkJveCh6di5zZWxlY3QoZykpLGRhdHVtOmguZGF0YS5uYW1lLHBvc2l0aW9uOnt4OnhbMF0rYlswXSx5OnhbMV0rYlsxXX0sc2VsZWN0aW9uOnp2LnNlbGVjdChfKSxjb21wb25lbnQ6bn1dfXJldHVybiB1fSxvKTpvfSxbXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgcj10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgbj10aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9ST1dfQ0xBU1MpLmRhdGEoci5yb3dzKSxpPW4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX1JPV19DTEFTUywhMCkubWVyZ2Uobik7bi5leGl0KCkucmVtb3ZlKCksaS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGEscyl7dmFyIGw9ci5nZXRSb3dCb3VuZHMocyk7cmV0dXJuInRyYW5zbGF0ZSgiK2wudG9wTGVmdC54KyIsICIrbC50b3BMZWZ0LnkrIikifSk7dmFyIG89dGhpcztyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuY29sdW1ucy5sZW5ndGg7Yys9MilsLnB1c2goW2EuY29sdW1uc1tjXSxhLmNvbHVtbnNbYysxXV0pO3ZhciB1PXp2LnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9FTlRSWV9DTEFTUykuZGF0YShsKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKS5tZXJnZSh1KTtoLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXTtyZXR1cm4gby5zeW1ib2woKShkLmRhdGEubmFtZSxzKShkLmhlaWdodCouNikobnVsbCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXSxnPXIucm93c1tzXS5jb2x1bW5zLmluZGV4T2YoZCksXz1yLmdldENvbHVtbkJvdW5kcyhzLGcpO3JldHVybiJ0cmFuc2xhdGUoIisoXy50b3BMZWZ0LngrZC53aWR0aC8yKSsiLCAiK2QuaGVpZ2h0LzIrIikifSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oZil7cmV0dXJuIG8uX2NvbG9yU2NhbGUuc2NhbGUoZlswXS5kYXRhLm5hbWUpfSkuYXR0cigib3BhY2l0eSIsZnVuY3Rpb24oZixwKXtyZXR1cm4gby5zeW1ib2xPcGFjaXR5KCkoZlswXS5kYXRhLm5hbWUscyl9KS5jbGFzc2VkKHQuTEVHRU5EX1NZTUJPTF9DTEFTUywhMCksaC5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0LWNvbnRhaW5lciIsITApLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZixwKXt2YXIgZD1mWzFdLGc9ci5yb3dzW3NdLmNvbHVtbnMuaW5kZXhPZihkKSxfPXIuZ2V0Q29sdW1uQm91bmRzKHMsZyk7cmV0dXJuInRyYW5zbGF0ZSgiK18udG9wTGVmdC54KyIsIDApIn0pLmVhY2goZnVuY3Rpb24oZixwLGQpe3ZhciBnPXp2LnNlbGVjdCh0aGlzKSxfPWZbMV0seT17eEFsaWduOiJsZWZ0Iix5QWxpZ246InRvcCIsdGV4dFJvdGF0aW9uOjB9O28uX3dyaXRlci53cml0ZShvLl9mb3JtYXR0ZXIoXy5kYXRhLm5hbWUpLF8ud2lkdGgsby5oZWlnaHQoKSx5LGcubm9kZSgpKX0pLHUuZXhpdCgpLnJlbW92ZSgpfSksdGhpc30sdC5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I6KHR5cGVvZiByPT0ibnVtYmVyIj90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcn06dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0LkxFR0VORF9ST1dfQ0xBU1M9ImxlZ2VuZC1yb3ciLHQuTEVHRU5EX0VOVFJZX0NMQVNTPSJsZWdlbmQtZW50cnkiLHQuTEVHRU5EX1NZTUJPTF9DTEFTUz0ibGVnZW5kLXN5bWJvbCIsdH0ockhlLkNvbXBvbmVudCk7cW90LkxlZ2VuZD1pSGV9KTt2YXIgR290PUgoS0Y9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEtGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgb0hlOyhmdW5jdGlvbihlKXtlLk1BSU49Im1haW4iLGUuUkVTRVQ9InJlc2V0In0pKG9IZT1LRi5BbmltYXRvcnx8KEtGLkFuaW1hdG9yPXt9KSl9KTt2YXIgTyR0PUgoKGVHbixEJHQpPT57InVzZSBzdHJpY3QiO0QkdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJkFycmF5LmlzQXJyYXkodCk9PT0hMX19KTt2YXIgQiR0PUgoKHJHbixGJHQpPT57InVzZSBzdHJpY3QiO3ZhciBhSGU9TyR0KCk7ZnVuY3Rpb24geiR0KGUpe3JldHVybiBhSGUoZSk9PT0hMCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgT2JqZWN0XSJ9RiR0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIHIsbjtyZXR1cm4hKHokdCh0KT09PSExfHwocj10LmNvbnN0cnVjdG9yLHR5cGVvZiByIT0iZnVuY3Rpb24iKXx8KG49ci5wcm90b3R5cGUseiR0KG4pPT09ITEpfHxuLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9fSk7dmFyIFlvdD1IKFdvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc0hlPUZlKCksSCR0PTAsbEhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj17fSksdGhpcy5fdXBkYXRlSWQ9SCR0KyssdGhpcy5fZGF0YT10LHRoaXMuX21ldGFkYXRhPXIsdGhpcy5fY2FsbGJhY2tzPW5ldyBzSGUuQ2FsbGJhY2tTZXR9cmV0dXJuIGUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2RhdGE6KHRoaXMuX2RhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tZXRhZGF0YToodGhpcy5fbWV0YWRhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQ9SCR0KyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LGV9KCk7V290LkRhdGFzZXQ9bEhlfSk7dmFyICRvdD1IKFJjPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGpvdD0oZGUoKSxVdChwZSkpLGNIZT1CJHQoKSx1SGU9WW90KCksaEhlPUx2KCk7ZnVuY3Rpb24gWG90KGUpe3JldHVybiBlIGluc3RhbmNlb2YgcDQ/ZTplIGluc3RhbmNlb2YgRGF0ZT9mNChlLnZhbHVlT2YoKSk6ZSBpbnN0YW5jZW9mIGhIZS5TY2FsZT9WJHQoZSk6ZSBpbnN0YW5jZW9mIHVIZS5EYXRhc2V0P1UkdChlKTpjSGUoZSk/WkYoZSk6QXJyYXkuaXNBcnJheShlKT9xJHQoZSk6ZjQoZSl9UmMuc2lnbj1Yb3Q7ZnVuY3Rpb24gViR0KGUpe3ZhciB0PXtkb21haW46ZS5kb21haW4oKSxyYW5nZTplLnJhbmdlKCksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpLHJlZjpmNChlKX07cmV0dXJuIFpGKHQpfVJjLnNpZ25TY2FsZT1WJHQ7ZnVuY3Rpb24gVSR0KGUpe3ZhciB0PXtyZWY6ZjQoZSksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpfTtyZXR1cm4gWkYodCl9UmMuc2lnbkRhdGFzZXQ9VSR0O2Z1bmN0aW9uIGY0KGUpe3JldHVybiBuZXcgVyR0KGUpfVJjLnNpZ25SZWY9ZjQ7ZnVuY3Rpb24gcSR0KGUpe3JldHVybiBuZXcgRyR0KGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBYb3QodCl9KSl9UmMuc2lnbkFycmF5PXEkdDtmdW5jdGlvbiBaRihlKXt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1Yb3QoZVtyXSkpO3JldHVybiBuZXcgWSR0KHQpfVJjLnNpZ25PYmo9WkY7dmFyIHA0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3RoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQodCk6ITB9LGV9KCk7UmMuU2lnbmF0dXJlPXA0O3ZhciBHJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmFycmF5PXIsbn1yZXR1cm4gdC5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24ocil7aWYoci5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49MDtuPHRoaXMuYXJyYXkubGVuZ3RoO24rKylpZih0aGlzLmFycmF5W25dLmlzRGlmZmVyZW50KHIuYXJyYXlbbl0pKXJldHVybiEwO3JldHVybiExfSx0fShwNCk7UmMuQXJyYXlTaWduYXR1cmU9RyR0O3ZhciBXJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLnJlZj1yLG59cmV0dXJuIHQucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnJlZiE9PXIucmVmfSx0fShwNCk7UmMuUmVmZXJlbmNlU2lnbmF0dXJlPVckdDt2YXIgWSR0PWZ1bmN0aW9uKGUpe2pvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5vYmo9cixufXJldHVybiB0LnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihyKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLm9iaiksaT1PYmplY3Qua2V5cyhyLm9iaik7aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG89MCxhPW47bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYoIXIub2JqLmhhc093blByb3BlcnR5KHMpfHx0aGlzLm9ialtzXS5pc0RpZmZlcmVudChyLm9ialtzXSkpcmV0dXJuITB9cmV0dXJuITF9LHR9KHA0KTtSYy5PYmplY3RTaWduYXR1cmU9WSR0fSk7dmFyIGokdD1IKEtvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZkhlPSRvdCgpO2Z1bmN0aW9uIHBIZShlKXt2YXIgdD12b2lkIDAscixuPSExLGk9ITEsbz1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxzPTA7czxhcmd1bWVudHMubGVuZ3RoO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtpZihuKXJldHVybiByO3ZhciBsPWZIZS5zaWduQXJyYXkoYSk7cmV0dXJuIHQ9PT12b2lkIDB8fHQuaXNEaWZmZXJlbnQobCk/KGkmJmNvbnNvbGUud2FybigiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksdD1sLHI9ZS5hcHBseSh0aGlzLGEpKTppJiZjb25zb2xlLndhcm4oImNhY2hlIGhpdCEiKSxyfTtyZXR1cm4gby5kb0xvY2tlZD1mdW5jdGlvbihhKXtpZihuKXRocm93IG5ldyBFcnJvcigiTG9ja2luZyBhbiBhbHJlYWR5IGxvY2tlZCBtZW1vaXplIGZ1bmN0aW9uISIpO249ITA7dmFyIHM9YS5hcHBseSh0aGlzKTtyZXR1cm4gbj0hMSxzfSxvLmxvZ1BlcmZvcm1hbmNlPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT0hMCksaT1hLHRoaXN9LG99S290Lm1lbW9pemU9cEhlfSk7dmFyIEskdD1IKEpGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRIZT1PZSgpLFpvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcFt0XT1yLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LGV9KCksWCR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWFwPW5ldyBab3R9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuZ2V0KHRbMF0pLmdldCh0WzFdKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSkmJnRoaXMubWFwLmdldCh0WzBdKS5oYXModFsxXSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSl8fHRoaXMubWFwLnNldCh0WzBdLG5ldyBab3QpLHRoaXMubWFwLmdldCh0WzBdKS5zZXQodFsxXSxyKSx0aGlzfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0WzBdKSYmdGhpcy5tYXAuZ2V0KHRbMF0pLmRlbGV0ZSh0WzFdKSwhMH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcD1uZXcgWm90fSxlLnJlc29sdmVyPWZ1bmN0aW9uKHQscixuKXtyZXR1cm5bbi51cGRhdGVJZCgpLHJdfSxlfSgpO2Z1bmN0aW9uICQkdChlKXt2YXIgdD1kSGUubWVtb2l6ZShlLFgkdC5yZXNvbHZlcik7cmV0dXJuIHQuY2FjaGU9bmV3IFgkdCx0fUpGLm1lbW9pemVQcm9qZWN0b3I9JCR0O2Z1bmN0aW9uIG1IZShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPSQkdChlW3RdKX0pLGV9SkYubWVtb2l6ZVByb2plY3RvcnM9bUhlfSk7dmFyIFokdD1IKEpvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ0hlPUNTKCk7ZnVuY3Rpb24gX0hlKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3ZhciByPWUuc2xpY2UoMCwtMSksbj1lW2UubGVuZ3RoLTFdLGk9Z0hlLm1lbW9pemUobiksbz1mdW5jdGlvbigpe3ZhciBhPXRoaXMscz1yLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5hcHBseShhKX0pO3JldHVybiBpLmFwcGx5KHZvaWQgMCxzKX07cmV0dXJuIG99Sm90Lm1lbVRodW5rPV9IZX0pO3ZhciBDUz1IKEFTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFvdD0oZGUoKSxVdChwZSkpO1FvdC5fX2V4cG9ydFN0YXIoaiR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoSyR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoWiR0KCksQVMpO3ZhciB5SGU9JG90KCk7QVMuc2lnbj15SGUuc2lnbn0pO3ZhciBGdj1IKE5jPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEokdD0oRXIoKSxVdChNcikpLHZIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fZHJhd1N0ZXA9cn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RHJhd1N0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhd1N0ZXB9LGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj1yW3IubGVuZ3RoLTFdLmF0dHJUb0FwcGxpZWRQcm9qZWN0b3I7dGhpcy5fY29udGV4dC5zYXZlKCksdGhpcy5fZHJhd1N0ZXAodGhpcy5fY29udGV4dCx0LG4pLHRoaXMuX2NvbnRleHQucmVzdG9yZSgpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe30sZX0oKTtOYy5DYW52YXNEcmF3ZXI9dkhlO05jLkNvbnRleHRTdHlsZUF0dHJzPVsiZmlsbC1vcGFjaXR5IiwiZmlsbCIsIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiB4SGUoZSx0LHIsbil7dmFyIGk9TmMuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KHQpO3JldHVybiBRJHQoZSxpLHIsbil9TmMucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzPXhIZTtmdW5jdGlvbiBRJHQoZSx0LHIsbil7Zm9yKHZhciBpPXt9LG89MCxhPXQ7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109ZVtzXShyLG4pKX1yZXR1cm4gaX1OYy5yZXNvbHZlQXR0cmlidXRlcz1RJHQ7ZnVuY3Rpb24gYkhlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbInN0cm9rZS1vcGFjaXR5Il0hPW51bGw/cGFyc2VGbG9hdChlWyJzdHJva2Utb3BhY2l0eSJdKToxO3JldHVybiByKnR9ZnVuY3Rpb24gd0hlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbImZpbGwtb3BhY2l0eSJdIT1udWxsP3BhcnNlRmxvYXQoZVsiZmlsbC1vcGFjaXR5Il0pOjE7cmV0dXJuIHIqdH1mdW5jdGlvbiB0S3QoZSl7cmV0dXJuIGVbInN0cm9rZS13aWR0aCJdIT1udWxsP3BhcnNlRmxvYXQoZVsic3Ryb2tlLXdpZHRoIl0pOjF9TmMuZ2V0U3Ryb2tlV2lkdGg9dEt0O2Z1bmN0aW9uIGVLdChlKXt2YXIgdD1lWyJzdHJva2UtZGFzaGFycmF5Il07aWYodCE9bnVsbCl0cnl7cmV0dXJuIHQuc3BsaXQoL1sgLF0rLykubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBwYXJzZUludChyLDEwKX0pfWNhdGNoKHIpe3JldHVybiBjb25zb2xlLmVycm9yKCJnZXRTdHJva2VEYXNoQXJyYXkgZmFpbGVkIHdpdGg6ICIrciksW119cmV0dXJuW119TmMuZ2V0U3Ryb2tlRGFzaEFycmF5PWVLdDtmdW5jdGlvbiBTSGUoZSx0LHIsbil7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSx0LmNvbnRleHQoZSksdChyKSxlLmxpbmVKb2luPSJyb3VuZCIsdGF0KGUsbiksZS5yZXN0b3JlKCl9TmMucmVuZGVyQXJlYT1TSGU7ZnVuY3Rpb24gTUhlKGUsdCxyLG4pe2Uuc2F2ZSgpLGUuYmVnaW5QYXRoKCksdC5jb250ZXh0KGUpLHQociksZS5saW5lSm9pbj0icm91bmQiLHRhdChlLG4pLGUucmVzdG9yZSgpfU5jLnJlbmRlckxpbmU9TUhlO2Z1bmN0aW9uIHRhdChlLHQpe2lmKHQuc3Ryb2tlKXtlLmxpbmVXaWR0aD10S3QodCk7dmFyIHI9SiR0LmNvbG9yKHQuc3Ryb2tlKSxuPWVLdCh0KTtlLnNldExpbmVEYXNoKG4pLHIub3BhY2l0eSo9YkhlKHQpLGUuc3Ryb2tlU3R5bGU9ci50b1N0cmluZygpLGUuc3Ryb2tlKCl9aWYodC5maWxsKXt2YXIgaT1KJHQuY29sb3IodC5maWxsKTtpLm9wYWNpdHkqPXdIZSh0KSxlLmZpbGxTdHlsZT1pLnRvU3RyaW5nKCksZS5maWxsKCl9fU5jLnJlbmRlclBhdGhXaXRoU3R5bGU9dGF0fSk7dmFyIFV1PUgoZWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9cn1yZXR1cm4gZS5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe3RoaXMuX2N1cnJlbnREcmF3ZXIhPW51bGwmJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIHI9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO3IuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1yfSxlLnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7dGhpcy5fY3VycmVudERyYXdlciE9bnVsbCYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LGUucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50RHJhd2VyIT1udWxsJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQscil9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sZX0oKTtlYXQuUHJveHlEcmF3ZXI9RUhlfSk7dmFyIERmPUgocmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUSGU9KEVyKCksVXQoTXIpKSxyS3Q9RmUoKSxDSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fcm9vdD1USGUuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHRoaXMuX2NsYXNzTmFtZT1yLHRoaXMuX3N2Z0VsZW1lbnROYW1lPXR9cmV0dXJuIGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO3RoaXMuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cyh0KTtmb3IodmFyIGk9MCxvPXIubGVuZ3RoLGE9ZnVuY3Rpb24obCl7dmFyIGM9cltsXTtyS3QuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAoYyl9LGkpLGkrPWMuYW5pbWF0b3IudG90YWxUaW1lKHQubGVuZ3RoKX0scz0wO3M8bztzKyspYShzKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9PW51bGwmJih0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9dGhpcy5fc2VsZWN0aW9uLm5vZGVzKCkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlc30sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXA9PW51bGw/bnVsbDp0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZU1hcC5nZXQodCl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3Jvb3QucmVtb3ZlKCl9LGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3Qubm9kZSgpKX0sZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxlLnByb3RvdHlwZS5zZWxlY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdmdFbGVtZW50TmFtZX0sZS5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzPWZ1bmN0aW9uKHQpe3ZhciByPXQubWFwKGZ1bmN0aW9uKGEscyl7cmV0dXJuIGEhPW51bGw/e2Q6YSxpOnN9Om51bGx9KSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSksaT10aGlzLl9yb290LnNlbGVjdEFsbCh0aGlzLnNlbGVjdG9yKCkpLmRhdGEobik7dGhpcy5fc2VsZWN0aW9uPWkuZW50ZXIoKS5hcHBlbmQodGhpcy5fc3ZnRWxlbWVudE5hbWUpLm1lcmdlKGkpLGkuZXhpdCgpLnJlbW92ZSgpO3ZhciBvPW5ldyByS3QuTWFwO3RoaXMuX3NlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGEpe28uc2V0KGEuaSx0aGlzKX0pLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPW8sdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9YS5kO3JldHVybiBzfSkpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LGUucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49WyJmaWxsIiwic3Ryb2tlIl07bi5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuYXR0clRvQXBwbGllZFByb2plY3RvcltpXSE9bnVsbCYmci5fc2VsZWN0aW9uLmF0dHIoaSx0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbaV0pfSksdC5hbmltYXRvci5hbmltYXRlKHRoaXMuX3NlbGVjdGlvbix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3IpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKX0sZX0oKTtyYXQuU1ZHRHJhd2VyPUNIZX0pO3ZhciBpYXQ9SChuYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG5LdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuc2NhbGU9MCx0aGlzLnRyYW5zbGF0ZT0wLHRoaXMuY2FjaGVkRG9tYWluPVtudWxsLG51bGxdLHRoaXMubGFzdFNlZW5Eb21haW49W251bGwsbnVsbF0sdGhpcy51cGRhdGVEb21haW49ZnVuY3Rpb24ocil7dC5sYXN0U2VlbkRvbWFpbj1yLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7dmFyIG49ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzFdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLGk9ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMV0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKTt0LnNjYWxlPW4vaXx8MSx0LnRyYW5zbGF0ZT1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKSp0LnNjYWxlfHwwfX1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTEsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj10aGlzLmxhc3RTZWVuRG9tYWlufSxlLnByb3RvdHlwZS5zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5jYWNoZWREb21haW49dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpfSxlfSgpLEFIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9dCx0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9cix0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IG5LdCx0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IG5LdCx0aGlzLnJlbmRlckRlZmVycmVkPWZ1bmN0aW9uKCl7bi5hcHBseVRyYW5zZm9ybSgpLGNsZWFyVGltZW91dChuLnRpbWVvdXRUb2tlbiksbi50aW1lb3V0VG9rZW49c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVuZGVyQ2FsbGJhY2soKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVkpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbih0LHIpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4odCksciYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihyKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LGUucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9ZnVuY3Rpb24odCxyKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVgudXBkYXRlRG9tYWluKHQpLHImJnRoaXMuZG9tYWluVHJhbnNmb3JtWS51cGRhdGVEb21haW4ociksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSxlLnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpblRyYW5zZm9ybVgucmVzZXQoKSx0aGlzLmRvbWFpblRyYW5zZm9ybVkucmVzZXQoKSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrKHRoaXMuZG9tYWluVHJhbnNmb3JtWC50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVguc2NhbGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNjYWxlKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVk9MjAwLGV9KCk7bmF0LkRlZmVycmVkUmVuZGVyZXI9QUhlfSk7dmFyIHJzPUgoUUY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUEhlPShkZSgpLFV0KHBlKSksd2Q9KEVyKCksVXQoTXIpKSxkND1MZigpLFNkPUZlKCksaUt0PUdvdCgpLG9hdD1DUygpLElIZT1rYygpLExIZT1GdigpLGtIZT1VdSgpLFJIZT1EZigpLE5IZT1ZZygpLERIZT1JZigpLE9IZT1pYXQoKTtRRi5SZW5kZXJlcj1ESGUubWFrZUVudW0oWyJzdmciLCJjYW52YXMiXSk7dmFyIHpIZT1mdW5jdGlvbihlKXtQSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLl9kYXRhQ2hhbmdlZD0hMSxyLl9hdHRyRXh0ZW50cz17fSxyLl9hbmltYXRlPSExLHIuX2FuaW1hdG9ycz17fSxyLl9wcm9wZXJ0eUV4dGVudHM9e30sci5fcmVzZXRFbnRpdHlTdG9yZT1mdW5jdGlvbigpe3IuX2NhY2hlZEVudGl0eVN0b3JlPXZvaWQgMH0sci5fb3ZlcmZsb3dIaWRkZW49ITAsci5hZGRDbGFzcygicGxvdCIpLHIuX2RhdGFzZXRUb0RyYXdlcj1uZXcgU2QuTWFwLHIuX2F0dHJCaW5kaW5ncz13ZC5tYXAoKSxyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGUoaSxvKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5yZW5kZXIoKX0sci5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5fb25EYXRhc2V0VXBkYXRlKCl9LHIuX3Byb3BlcnR5QmluZGluZ3M9d2QubWFwKCk7dmFyIG49bmV3IGQ0LkVhc2luZygpLm1heFRvdGFsRHVyYXRpb24odC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7cmV0dXJuIHIuYW5pbWF0b3IoaUt0LkFuaW1hdG9yLk1BSU4sbiksci5hbmltYXRvcihpS3QuQW5pbWF0b3IuUkVTRVQsbmV3IGQ0Lk51bGwpLHIuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZT1TZC5XaW5kb3cuZGVib3VuY2UoT0hlLkRlZmVycmVkUmVuZGVyZXIuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZLHIuX3Jlc2V0RW50aXR5U3RvcmUpLHJ9cmV0dXJuIHQuZ2V0VG90YWxEcmF3VGltZT1mdW5jdGlvbihyLG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBpK28uYW5pbWF0b3IudG90YWxUaW1lKHIubGVuZ3RoKX0sMCl9LHQuYXBwbHlEcmF3U3RlcHM9ZnVuY3Rpb24ocixuKXt2YXIgaT1yLm1hcChmdW5jdGlvbihvKXt2YXIgYT1vLmF0dHJUb1Byb2plY3RvcixzPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3NbbF09ZnVuY3Rpb24oYyx1KXtyZXR1cm4gYVtsXShjLHUsbil9fSkse2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6cyxhbmltYXRvcjpvLmFuaW1hdG9yfX0pO3JldHVybiBpfSx0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9TkhlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9kYXRhQ2hhbmdlZD0hMCx0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5faXNTZXR1cHx8KGUucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2NhbnZhcyE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX3JlbmRlckFyZWE9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVuZGVyLWFyZWEiLCEwKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KG4pfSkpfSx0LnByb3RvdHlwZS5fYXBwZW5kQ2FudmFzTm9kZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLnNlbGVjdCgiLnBsb3QtY2FudmFzLWNvbnRhaW5lciIpO3IuZW1wdHkoKSYmKHI9dGhpcy5lbGVtZW50KCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90LWNhbnZhcy1jb250YWluZXIiLCEwKSxyLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jYW52YXMubm9kZSgpKSl9LHQucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbihyLG4saSxvKXtpZihlLnByb3RvdHlwZS5zZXRCb3VuZHMuY2FsbCh0aGlzLHIsbixpLG8pLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzLl9jYW52YXMhPW51bGwpe2lmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkKXt0aGlzLl9idWZmZXJDYW52YXMuYXR0cigid2lkdGgiLHRoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIpKSx0aGlzLl9idWZmZXJDYW52YXMuYXR0cigiaGVpZ2h0Iix0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IikpO3ZhciBhPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXt2YXIgcz10aGlzLl9jYW52YXMubm9kZSgpO3Mud2lkdGg+MCYmcy5oZWlnaHQ+MD9hLmNhbnZhcy53aWR0aD4wJiZhLmNhbnZhcy5oZWlnaHQ+MCYmYS5kcmF3SW1hZ2UocywwLDApOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgYnVmZmVyIGNhbnZhcyB3aXRoIHdpdGggMHgwIGNhbnZhcyIpfXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwfXZhciBsPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIT1udWxsP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7dGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixyKmwpLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLG4qbCk7dmFyIGM9dGhpcy5fY2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpO2lmKGMmJihjLnNldFRyYW5zZm9ybShsLDAsMCxsLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzKSl7dmFyIHU9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKTt1LndpZHRoPjAmJnUuaGVpZ2h0PjA/Yy5jYW52YXMud2lkdGg+MCYmYy5jYW52YXMuaGVpZ2h0PjAmJmMuZHJhd0ltYWdlKHUsMCwwLHIsbik6Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZmlsbCBjYW52YXMgd2l0aCAweDAgYnVmZmVyIGNhbnZhcyIpfX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4ub2ZmVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKX0pLHRoaXMuZGF0YXNldHMoW10pfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQocik7cmV0dXJuIHRoaXMucmVuZGVyZXIoKT09PSJzdmciP24udXNlU1ZHKHRoaXMuX3JlbmRlckFyZWEpOm4udXNlQ2FudmFzKHRoaXMuX2NhbnZhcyksbn0sdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IGtIZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgUkhlLlNWR0RyYXdlcigicGF0aCIsIiIpfSxmdW5jdGlvbihuKXtyZXR1cm4gbmV3IExIZS5DYW52YXNEcmF3ZXIobixmdW5jdGlvbigpe30pfSl9LHQucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpP3RoaXMuX2FuaW1hdG9yc1tyXXx8bmV3IGQ0Lk51bGw6bmV3IGQ0Lk51bGx9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMucmVuZGVyTG93UHJpb3JpdHkoKX0sdC5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihyLG4saSl7cmV0dXJuIG49PW51bGw/dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKToodGhpcy5fYmluZEF0dHIocixuLGkpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9iaW5kUHJvcGVydHk9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocikscz1hIT1udWxsP2Euc2NhbGU6bnVsbCxsPXR5cGVvZiBuPT0iZnVuY3Rpb24iP246ZnVuY3Rpb24oKXtyZXR1cm4gbn07dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQocix7YWNjZXNzb3I6bCxzY2FsZTppLHBvc3RTY2FsZTpvfSkscyE9bnVsbCYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkocyxyKSxpIT1udWxsJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkoaSxyKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LHQucHJvdG90eXBlLl9iaW5kQXR0cj1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKSxhPW8hPW51bGw/by5zY2FsZTpudWxsLHM9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpmdW5jdGlvbigpe3JldHVybiBufTt0aGlzLl9hdHRyQmluZGluZ3Muc2V0KHIse2FjY2Vzc29yOnMsc2NhbGU6aX0pLGEhPW51bGwmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KGEsciksaSE9bnVsbCYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KGksciksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfSx0LnByb3RvdHlwZS5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3J9LHQucHJvdG90eXBlLl9nZXRBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9PW51bGwpe3ZhciByPXRoaXMuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCk7dC5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlMmJihyPW9hdC5tZW1vaXplUHJvamVjdG9ycyhyKSksdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yPXJ9cmV0dXJuIFNkLmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihpLG8pe3Jbb109dC5fc2NhbGVkQWNjZXNzb3IoaSl9KTt2YXIgbj10aGlzLl9wcm9wZXJ0eVByb2plY3RvcnMoKTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihpKXtyW2ldPT1udWxsJiYocltpXT1uW2ldKX0pLHJ9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5faXNBbmNob3JlZCYmKHRoaXMuX3BhaW50KCksdGhpcy5fZGF0YUNoYW5nZWQ9ITEpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlckNhbGxiYWNrKCksdGhpc30sdC5wcm90b3R5cGUuYW5pbWF0ZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5pbWF0ZToodGhpcy5fYW5pbWF0ZT1yLHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gdGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSxyfSx0LnByb3RvdHlwZS5fdXBkYXRlRXh0ZW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcihyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fYXR0ckV4dGVudHNbcl09PW51bGwpe3ZhciBpPW9hdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBuLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2F0dHJCaW5kaW5ncy5nZXQocil9LGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGE9PW51bGx8fGEuYWNjZXNzb3I9PW51bGw/bnVsbDpvLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gb0t0KHMsYSxudWxsKX0pfSk7dGhpcy5fYXR0ckV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fYXR0ckV4dGVudHNbcl0oKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdPT1udWxsKXt2YXIgaT1vYXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBuLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fZmlsdGVyRm9yUHJvcGVydHkocil9LGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gYT09bnVsbHx8YS5hY2Nlc3Nvcj09bnVsbD9udWxsOm8ubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBvS3QobCxhLHMpfSl9KTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdKCl9LHQucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIW4pcmV0dXJuW107dmFyIG89W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKGEscyl7aWYoYS5zY2FsZT09PXIpe3ZhciBsPWkuZ2V0RXh0ZW50c0ZvckF0dHIocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24oYSxzKXtpZihhLnNjYWxlPT09cil7dmFyIGw9aS5nZXRFeHRlbnRzRm9yUHJvcGVydHkocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSxvfSx0LnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbihyLG4pe3JldHVybiBuPT09dm9pZCAwP3RoaXMuX2FuaW1hdG9yc1tyXToodGhpcy5fYW5pbWF0b3JzW3JdPW4sdGhpcyl9LHQucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fY2FudmFzPT1udWxsPyJzdmciOiJjYW52YXMiOih0aGlzLl9jYW52YXM9PW51bGwmJnI9PT0iY2FudmFzIj8odGhpcy5fY2FudmFzPXdkLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuY2xhc3NlZCgicGxvdC1jYW52YXMiLCEwKSx0aGlzLl9idWZmZXJDYW52YXM9d2Quc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSx0aGlzLmVsZW1lbnQoKSE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlQ2FudmFzKG4uX2NhbnZhcyl9KSx0aGlzLnJlbmRlcigpKTp0aGlzLl9jYW52YXMhPW51bGwmJnI9PSJzdmciJiYodGhpcy5fY2FudmFzLnJlbW92ZSgpLHRoaXMuX2NhbnZhcz1udWxsLHRoaXMuX2J1ZmZlckNhbnZhcz1udWxsLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlU1ZHKG4uX3JlbmRlckFyZWEpfSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQociksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7dGhpcy5fcmVtb3ZlRGF0YXNldChyKTt2YXIgbj10aGlzLl9jcmVhdGVEcmF3ZXIocik7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQocixuKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQociksci5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldChyKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmluZGV4T2Yocik9PT0tMT90aGlzOih0aGlzLl9yZW1vdmVEYXRhc2V0Tm9kZXMociksci5vZmZVcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5kZWxldGUociksdGhpcyl9LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldChyKTtuLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkucHVzaChhKX0pLHI9PW51bGw/aTooaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9yZW1vdmVEYXRhc2V0KG8pfSksci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9hZGREYXRhc2V0KG8pfSksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBkNC5OdWxsfV19LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7fSx0LnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvLGEpe2Zvcih2YXIgcz1uLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KG8pLGw9MCxjPW8uZGF0YSgpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihwKXt2YXIgZD1jW3BdLGc9bi5fcGl4ZWxQb2ludChkLHAsbyk7aWYoU2QuTWF0aC5pc05hTihnLngpfHxTZC5NYXRoLmlzTmFOKGcueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgXz1uO2kucHVzaCh7ZGF0dW06ZCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gXy5fcGl4ZWxQb2ludC5jYWxsKF8sZCxwLG8pfSxpbmRleDpwLGRhdGFzZXQ6byxkYXRhc2V0SW5kZXg6YSxjb21wb25lbnQ6bixkcmF3ZXI6cyx2YWxpZERhdHVtSW5kZXg6bH0pLGwrK30sZj0wO2Y8dTtmKyspaChmKX0pLGl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IFNkLk1hcDtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0KG4sbi5kYXRhKCkpfSkscn0sdC5wcm90b3R5cGUuX3BhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yO3ZhciBuPXRoaXMuX2dlbmVyYXRlRHJhd1N0ZXBzKCksaT10aGlzLl9nZXREYXRhVG9EcmF3KCksbz10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiByLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KHUpfSk7aWYodGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpe3ZhciBhPXRoaXMuX2NhbnZhcy5ub2RlKCkscz1hLmdldENvbnRleHQoIjJkIik7cy5jbGVhclJlY3QoMCwwLGEuY2xpZW50V2lkdGgsYS5jbGllbnRIZWlnaHQpLHRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSExfXRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dC5hcHBseURyYXdTdGVwcyhuLHUpO29baF0uZHJhdyhpLmdldCh1KSxmKX0pO3ZhciBsPXRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gdC5nZXRUb3RhbERyYXdUaW1lKGkuZ2V0KHUpLG4pfSksYz1TZC5NYXRoLm1heChsLDApO3RoaXMuX2FkZGl0aW9uYWxQYWludChjKX0sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSksdGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpcmV0dXJuIHdkLnNlbGVjdEFsbCgpO3ZhciBpPVtdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fZGF0YXNldFRvRHJhd2VyLmdldChvKTtpZihhIT1udWxsKXt2YXIgcz1hLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtpLnB1c2guYXBwbHkoaSxzKX19KSx3ZC5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKHIpLmVudGl0aWVzKCkubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoaSl9KX0sdC5wcm90b3R5cGUuZmlsdGVyRW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLmZpbHRlcihyKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShpKX0pfSx0LnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKGEpe3JldHVybiBuLl9lbnRpdHlCb3VuZHMoYSl9O2lmKHIhPT12b2lkIDApe3ZhciBvPW5ldyBTZC5FbnRpdHlTdG9yZTtyZXR1cm4gby5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyhyKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLG99ZWxzZSBpZih0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT09PXZvaWQgMCl7dmFyIG89bmV3IFNkLkVudGl0eVN0b3JlO28uYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPW99cmV0dXJuIHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlfSx0LnByb3RvdHlwZS5fbG9jYWxPcmlnaW5Cb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6dGhpcy5oZWlnaHQoKX19fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0LGE9dGhpcy5fcGl4ZWxQb2ludChuLGksbykscz1hLngsbD1hLnk7cmV0dXJue3g6cyx5Omwsd2lkdGg6MCxoZWlnaHQ6MH19LHQucHJvdG90eXBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHk9ZnVuY3Rpb24ocil7dmFyIG49e2JvdW5kczp0aGlzLl9lbnRpdHlCb3VuZHMociksY29tcG9uZW50OnIuY29tcG9uZW50LGRhdGFzZXQ6ci5kYXRhc2V0LGRhdGFzZXRJbmRleDpyLmRhdGFzZXRJbmRleCxkYXR1bTpyLmRhdHVtLGluZGV4OnIuaW5kZXgscG9zaXRpb246ci5wb3NpdGlvbixzZWxlY3Rpb246d2Quc2VsZWN0KHIuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgoci52YWxpZERhdHVtSW5kZXgpKX07cmV0dXJuIG59LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHIpO3JldHVybiBuPT09dm9pZCAwP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobil9LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaTtpZihuPT1udWxsKXt2YXIgbz1yO2k9e3g6by50b3BMZWZ0LngseTpvLnRvcExlZnQueSx3aWR0aDpvLmJvdHRvbVJpZ2h0Lngtby50b3BMZWZ0LngsaGVpZ2h0Om8uYm90dG9tUmlnaHQueS1vLnRvcExlZnQueX19ZWxzZXt2YXIgYT1yO2k9e3g6YS5taW4seTpuLm1pbix3aWR0aDphLm1heC1hLm1pbixoZWlnaHQ6bi5tYXgtbi5taW59fXJldHVybiB0aGlzLmVudGl0aWVzSW5Cb3VuZHMoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbkJvdW5kcyhyKTtpZighIWkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9KX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJblhCb3VuZHMocik7aWYoISFpKXJldHVybiBpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5ZQm91bmRzKHIpO2lmKCEhaSlyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShvKX0pfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksci5vZmZVcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSxyLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LHQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9uVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSxyLm9uVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJue319LHQuX3NjYWxlZEFjY2Vzc29yPWZ1bmN0aW9uKHIpe3ZhciBuPXIuc2NhbGUsaT1yLmFjY2Vzc29yLG89ci5wb3N0U2NhbGUsYT1uPT1udWxsP2k6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBuLnNjYWxlKGkobCxjLHUpKX0scz1vPT1udWxsP2E6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBvKGEobCxjLHUpLGwsYyx1KX07cmV0dXJuIHN9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm57eDowLHk6MH19LHQucHJvdG90eXBlLl9hbmltYXRlT25OZXh0UmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUmJnRoaXMuX2RhdGFDaGFuZ2VkfSx0Lk9QVElNSVpFX01FTU9JWkVfUFJPSkVDVE9SUz0hMSx0Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OPTYwMCx0fShJSGUuQ29tcG9uZW50KTtRRi5QbG90PXpIZTtmdW5jdGlvbiBvS3QoZSx0LHIpe3ZhciBuPXQuYWNjZXNzb3IsaT10LnNjYWxlO2lmKGk9PW51bGwpcmV0dXJuW107dmFyIG89ZS5kYXRhKCk7ciE9bnVsbCYmKG89by5maWx0ZXIoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsZSl9KSk7dmFyIGE9ZnVuY3Rpb24obCxjKXtyZXR1cm4gbihsLGMsZSl9LHM9by5tYXAoYSk7cmV0dXJuIGkuZXh0ZW50T2ZWYWx1ZXMocyl9fSk7dmFyIGFLdD1IKGFhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRkhlPShkZSgpLFV0KHBlKSksQkhlPXJzKCksSEhlPUZlKCksVkhlPXpvdCgpLFVIZT1mdW5jdGlvbihlKXtGSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT0xLzA7cmV0dXJuIHRoaXMuY29tcG9uZW50cygpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9byxzPWEuZW50aXR5TmVhcmVzdChyKTtpZihzIT1udWxsKXt2YXIgbD1ISGUuTWF0aC5kaXN0YW5jZVNxdWFyZWQocy5wb3NpdGlvbixyKTtsPD1pJiYoaT1sLG49cyl9fSksbn0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwmJiEociBpbnN0YW5jZW9mIEJIZS5QbG90KSl0aHJvdyBuZXcgRXJyb3IoIlBsb3QgR3JvdXAgb25seSBhY2NlcHRzIHBsb3RzIik7cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZC5jYWxsKHRoaXMsciksdGhpc30sdH0oVkhlLkdyb3VwKTthYXQuUGxvdEdyb3VwPVVIZX0pO3ZhciBzS3Q9SChzYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFIZT0oZGUoKSxVdChwZSkpLHF1PShFcigpLFV0KE1yKSksR289RmUoKSxHSGU9V0YoKSxXSGU9ZnVuY3Rpb24oZSl7cUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fcm93UGFkZGluZz0wLG4uX2NvbHVtblBhZGRpbmc9MCxuLl9yb3dzPVtdLG4uX3Jvd1dlaWdodHM9W10sbi5fY29sdW1uV2VpZ2h0cz1bXSxuLl9uUm93cz0wLG4uX25Db2xzPTAsbi5fY2FsY3VsYXRlZExheW91dD1udWxsLG4uYWRkQ2xhc3MoInRhYmxlIiksci5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7aS5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YSE9bnVsbCYmbi5hZGQoYSxvLHMpfSl9KSxufXJldHVybiB0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXtmb3IodmFyIG49MDtuPHRoaXMuX25Sb3dzO24rKylmb3IodmFyIGk9MDtpPHRoaXMuX25Db2xzO2krKyl0aGlzLl9yb3dzW25dW2ldIT1udWxsJiZyKHRoaXMuX3Jvd3Nbbl1baV0pfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuITA7cmV0dXJuITF9LHQucHJvdG90eXBlLmNvbXBvbmVudEF0PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI8MHx8cj49dGhpcy5fblJvd3N8fG48MHx8bj49dGhpcy5fbkNvbHM/bnVsbDp0aGlzLl9yb3dzW3JdW25dfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpdGhyb3cgRXJyb3IoIkNhbm5vdCBhZGQgbnVsbCB0byBhIHRhYmxlIGNlbGwiKTtpZighdGhpcy5oYXMocikpe3ZhciBvPXRoaXMuX3Jvd3Nbbl0mJnRoaXMuX3Jvd3Nbbl1baV07aWYobyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoImNlbGwgaXMgb2NjdXBpZWQiKTtyLmRldGFjaCgpLHRoaXMuX25Sb3dzPU1hdGgubWF4KG4rMSx0aGlzLl9uUm93cyksdGhpcy5fbkNvbHM9TWF0aC5tYXgoaSsxLHRoaXMuX25Db2xzKSx0aGlzLl9wYWRUYWJsZVRvU2l6ZSh0aGlzLl9uUm93cyx0aGlzLl9uQ29scyksdGhpcy5fcm93c1tuXVtpXT1yLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHIpLHRoaXMucmVkcmF3KCl9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuIHRoaXMuX3Jvd3Nbbl1baV09bnVsbCwhMDtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2l0ZXJhdGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTtmb3IodmFyIG89dGhpcy5fcm93cyxhPXF1LnRyYW5zcG9zZSh0aGlzLl9yb3dzKSxzPXItdGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSksbD1uLXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpLGM9dC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyxvLGZ1bmN0aW9uKHope3JldHVybiB6PT1udWxsfHx6LmZpeGVkSGVpZ2h0KCl9KSx1PXQuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX2NvbHVtbldlaWdodHMsYSxmdW5jdGlvbih6KXtyZXR1cm4gej09bnVsbHx8ei5maXhlZFdpZHRoKCl9KSxoPXUubWFwKGZ1bmN0aW9uKHope3JldHVybiB6PT09MD8uNTp6fSksZj1jLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej09PTA/LjU6en0pLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGgscyksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoZixsKSxnPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLF89R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uUm93cykseSx4LGI9MCxTLEMsUDs7KXt2YXIgaz1Hby5BcnJheS5hZGQoXyxkKSxPPUdvLkFycmF5LmFkZChnLHApO1M9dGhpcy5fZGV0ZXJtaW5lR3VhcmFudGVlcyhPLGssaSksZz1TLmd1YXJhbnRlZWRXaWR0aHMsXz1TLmd1YXJhbnRlZWRIZWlnaHRzLEM9Uy53YW50c1dpZHRoQXJyLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuIHp9KSxQPVMud2FudHNIZWlnaHRBcnIuc29tZShmdW5jdGlvbih6KXtyZXR1cm4gen0pO3ZhciBEPXksQj14O3k9cy1xdS5zdW0oUy5ndWFyYW50ZWVkV2lkdGhzKSx4PWwtcXUuc3VtKFMuZ3VhcmFudGVlZEhlaWdodHMpO3ZhciBJPXZvaWQgMDtDPyhJPVMud2FudHNXaWR0aEFyci5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo/LjE6MH0pLEk9R28uQXJyYXkuYWRkKEksdSkpOkk9dTt2YXIgTD12b2lkIDA7UD8oTD1TLndhbnRzSGVpZ2h0QXJyLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej8uMTowfSksTD1Hby5BcnJheS5hZGQoTCxjKSk6TD1jLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEkseSksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoTCx4KSxiKys7dmFyIFI9eT4wJiZ5IT09RCxGPXg+MCYmeCE9PUI7aWYoIShSfHxGKXx8Yj41KWJyZWFrfXJldHVybiB5PXMtcXUuc3VtKFMuZ3VhcmFudGVlZFdpZHRocykseD1sLXF1LnN1bShTLmd1YXJhbnRlZWRIZWlnaHRzKSxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh1LHkpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGMseCkse2NvbFByb3BvcnRpb25hbFNwYWNlOnAscm93UHJvcG9ydGlvbmFsU3BhY2U6ZCxndWFyYW50ZWVkV2lkdGhzOlMuZ3VhcmFudGVlZFdpZHRocyxndWFyYW50ZWVkSGVpZ2h0czpTLmd1YXJhbnRlZWRIZWlnaHRzLHdhbnRzV2lkdGg6Qyx3YW50c0hlaWdodDpQfX0sdC5wcm90b3R5cGUuX2RldGVybWluZUd1YXJhbnRlZXM9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTt2YXIgbz1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxhPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHM9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fbkNvbHMpLGw9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fblJvd3MpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oYyx1KXtjLmZvckVhY2goZnVuY3Rpb24oaCxmKXt2YXIgcDtoIT1udWxsP3A9aC5yZXF1ZXN0ZWRTcGFjZShyW2ZdLG5bdV0pOnA9e21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O3ZhciBkPWk/TWF0aC5taW4ocC5taW5XaWR0aCxyW2ZdKTpwLm1pbldpZHRoO29bZl09TWF0aC5tYXgob1tmXSxkKTt2YXIgZz1pP01hdGgubWluKHAubWluSGVpZ2h0LG5bdV0pOnAubWluSGVpZ2h0O2FbdV09TWF0aC5tYXgoYVt1XSxnKTt2YXIgXz1wLm1pbldpZHRoPnJbZl07c1tmXT1zW2ZdfHxfO3ZhciB5PXAubWluSGVpZ2h0Pm5bdV07bFt1XT1sW3VdfHx5fSl9KSx7Z3VhcmFudGVlZFdpZHRoczpvLGd1YXJhbnRlZWRIZWlnaHRzOmEsd2FudHNXaWR0aEFycjpzLHdhbnRzSGVpZ2h0QXJyOmx9fSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQocixuKSx7bWluV2lkdGg6cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZFdpZHRocyksbWluSGVpZ2h0OnF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBhPXF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLHM9cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZEhlaWdodHMpLGw9dGhpcy5fY2FsY3VsYXRlZExheW91dDsoYT50aGlzLndpZHRoKCl8fHM+dGhpcy5oZWlnaHQoKSkmJihsPXRoaXMuX2l0ZXJhdGVMYXlvdXQodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksITApKTt2YXIgYz0wLHU9R28uQXJyYXkuYWRkKGwucm93UHJvcG9ydGlvbmFsU3BhY2UsbC5ndWFyYW50ZWVkSGVpZ2h0cyksaD1Hby5BcnJheS5hZGQobC5jb2xQcm9wb3J0aW9uYWxTcGFjZSxsLmd1YXJhbnRlZWRXaWR0aHMpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oZixwKXt2YXIgZD0wO2YuZm9yRWFjaChmdW5jdGlvbihnLF8pe2chPW51bGwmJmcuY29tcHV0ZUxheW91dCh7eDpkLHk6Y30saFtfXSx1W3BdKSxkKz1oW19dK28uX2NvbHVtblBhZGRpbmd9KSxjKz11W3BdK28uX3Jvd1BhZGRpbmd9KSx0aGlzfSx0LnByb3RvdHlwZS5yb3dQYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc7aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihyKXx8cjwwKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmNvbHVtblBhZGRpbmc9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZztpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHxyPDApdGhyb3cgRXJyb3IoImNvbHVtblBhZGRpbmcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZz1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUucm93V2VpZ2h0PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1tyXTtpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKG4pfHxuPDApdGhyb3cgRXJyb3IoInJvd1dlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9yb3dXZWlnaHRzW3JdPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5jb2x1bW5XZWlnaHQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9jb2x1bW5XZWlnaHRzW3JdO2lmKCFHby5NYXRoLmlzVmFsaWROdW1iZXIobil8fG48MCl0aHJvdyBFcnJvcigiY29sdW1uV2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbcl09bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj1xdS50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHQuX2ZpeGVkU3BhY2UocixmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbHx8bi5maXhlZFdpZHRoKCl9KX0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsfHxyLmZpeGVkSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyl7dGhpcy5fcm93c1tpXT09PXZvaWQgMCYmKHRoaXMuX3Jvd3NbaV09W10sdGhpcy5fcm93V2VpZ2h0c1tpXT1udWxsKTtmb3IodmFyIG89MDtvPG47bysrKXRoaXMuX3Jvd3NbaV1bb109PT12b2lkIDAmJih0aGlzLl9yb3dzW2ldW29dPW51bGwpfWZvcih2YXIgbz0wO288bjtvKyspdGhpcy5fY29sdW1uV2VpZ2h0c1tvXT09PXZvaWQgMCYmKHRoaXMuX2NvbHVtbldlaWdodHNbb109bnVsbCl9LHQuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obyxhKXtpZihvIT1udWxsKXJldHVybiBvO3ZhciBzPW5bYV0ubWFwKGkpLGw9cy5yZWR1Y2UoZnVuY3Rpb24oYyx1KXtyZXR1cm4gYyYmdX0sITApO3JldHVybiBsPzA6MX0pfSx0Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1xdS5zdW0ocik7cmV0dXJuIGk9PT0wP0dvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsci5sZW5ndGgpOnIubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuKm8vaX0pfSx0Ll9maXhlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHMmJmx9LCEwKX0sbz1mdW5jdGlvbihhKXtyZXR1cm4gaShhLm1hcChuKSl9O3JldHVybiBpKHIubWFwKG8pKX0sdH0oR0hlLkNvbXBvbmVudENvbnRhaW5lcik7c2F0LlRhYmxlPVdIZX0pO3ZhciBsS3Q9SChsYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFlIZT0oZGUoKSxVdChwZSkpLGpIZT1Wb3QoKSxYSGU9MiwkSGU9ZnVuY3Rpb24oZSl7WUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHIuX21heExpbmVzPVhIZSxyfXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3RoaXMuX3dyYXBwZXIubWF4TGluZXModGhpcy5fbWF4TGluZXMpO3ZhciBpPXRoaXMuYW5nbGUoKT09PTA/cjpuO2k9PT0wJiYoaT0xLzApO3ZhciBvPXRoaXMuX3dyYXBwZXIud3JhcCh0aGlzLl90ZXh0LHRoaXMuX21lYXN1cmVyLGkpLGE9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShvLndyYXBwZWRUZXh0KSxzPSh0aGlzLmFuZ2xlKCk9PT0wP2Eud2lkdGg6YS5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCksbD0odGhpcy5hbmdsZSgpPT09MD9hLmhlaWdodDphLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpzLG1pbkhlaWdodDpsfX0sdC5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21heExpbmVzOih0aGlzLl9tYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHR9KGpIZS5MYWJlbCk7bGF0LldyYXBwZWRMYWJlbD0kSGV9KTt2YXIgY0t0PUgoY2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBLSGU9KGRlKCksVXQocGUpKSxaSGU9cUYoKSxKSGU9ZnVuY3Rpb24oZSl7S0hlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoIngtZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6ci50b3BMZWZ0LngseTowfSxib3R0b21SaWdodDp7eDpyLmJvdHRvbVJpZ2h0LngseTp0aGlzLmhlaWdodCgpfX0pfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIngtcmVzaXphYmxlIil9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55U2NhbGUuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIil9LHQucHJvdG90eXBlLnlFeHRlbnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueUV4dGVudC5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigiWERyYWdCb3hMYXllciBoYXMgbm8geUV4dGVudCIpfSx0fShaSGUuRHJhZ0JveExheWVyKTtjYXQuWERyYWdCb3hMYXllcj1KSGV9KTt2YXIgdUt0PUgodWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1YXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBRSGU9KGRlKCksVXQocGUpKSx0VmU9cUYoKSxlVmU9ZnVuY3Rpb24oZSl7UUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoInktZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5OnIudG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTpyLmJvdHRvbVJpZ2h0Lnl9fSl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieFNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFlEcmFnQm94TGF5ZXIiKX0sdC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iil9LHR9KHRWZS5EcmFnQm94TGF5ZXIpO3VhdC5ZRHJhZ0JveExheWVyPWVWZX0pO3ZhciBQb3Q9SChfYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOcz0oZGUoKSxVdChwZSkpO05zLl9fZXhwb3J0U3RhcihxRigpLF9hKTtOcy5fX2V4cG9ydFN0YXIoSSR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihMJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKHpvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoTG90KCksX2EpO05zLl9fZXhwb3J0U3RhcihSJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKFZvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoTiR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihhS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKFRvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoc0t0KCksX2EpO05zLl9fZXhwb3J0U3RhcihsS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKGNLdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIodUt0KCksX2EpfSk7dmFyIGZhdD1IKGhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgclZlPShkZSgpLFV0KHBlKSksblZlPURmKCksaVZlPWZ1bmN0aW9uKGUpe3JWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIGZpbGwiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0fShuVmUuU1ZHRHJhd2VyKTtoYXQuQXJjU1ZHRHJhd2VyPWlWZX0pO3ZhciBkYXQ9SChwYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG9WZT0oZGUoKSxVdChwZSkpLGFWZT1EZigpLHNWZT1mdW5jdGlvbihlKXtvVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyYyBvdXRsaW5lIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoImZpbGwiLCJub25lIil9LHR9KGFWZS5TVkdEcmF3ZXIpO3BhdC5BcmNPdXRsaW5lU1ZHRHJhd2VyPXNWZX0pO3ZhciBtYXQ9SChlQj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZUIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsVmU9KGRlKCksVXQocGUpKSx0Qj1GdigpLGNWZT1EZigpLHVWZT1mdW5jdGlvbihlKXtsVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0oY1ZlLlNWR0RyYXdlcik7ZUIuQXJlYVNWR0RyYXdlcj11VmU7dmFyIGhWZT1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0sZlZlPVsib3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCJdO2Z1bmN0aW9uIHBWZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIG89dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxoVmUsblswXSwwKTt0Qi5yZW5kZXJBcmVhKHIsZSgpLG5bMF0sbyk7dmFyIGE9dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxmVmUsblswXSwwKTt0Qi5yZW5kZXJMaW5lKHIsdCgpLG5bMF0sYSl9fWVCLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXA9cFZlfSk7dmFyIG5CPUgockI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZFZlPShkZSgpLFV0KHBlKSksaEt0PUZ2KCksbVZlPURmKCksZ1ZlPWZ1bmN0aW9uKGUpe2RWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwibGluZSIpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihyKXtyLnN0eWxlKCJmaWxsIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0obVZlLlNWR0RyYXdlcik7ckIuTGluZVNWR0RyYXdlcj1nVmU7dmFyIF9WZT1bIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiB5VmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1oS3QucmVzb2x2ZUF0dHJpYnV0ZXMobixfVmUsclswXSwwKTtoS3QucmVuZGVyTGluZSh0LGUoKSxyWzBdLGkpfX1yQi5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPXlWZX0pO3ZhciBvQj1IKFBTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShQUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZLdD0oZGUoKSxVdChwZSkpLGlCPUZ2KCksdlZlPURmKCkseFZlPWZ1bmN0aW9uKGUpe2ZLdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSIiKTt2YXIgbj1lLmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3JldHVybiBuLl9yb290Q2xhc3NOYW1lPXIsbi5fcm9vdC5jbGFzc2VkKG4uX3Jvb3RDbGFzc05hbWUsITApLG59cmV0dXJuIHR9KHZWZS5TVkdEcmF3ZXIpO1BTLlJlY3RhbmdsZVNWR0RyYXdlcj14VmU7dmFyIGJWZT1pQi5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0Il0pO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKGUsdCxyKXtlLnNhdmUoKTtmb3IodmFyIG49dC5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBvPXRbaV07aWYobyE9bnVsbCl7dmFyIGE9aUIucmVzb2x2ZUF0dHJpYnV0ZXMocixiVmUsbyxpKTtlLmJlZ2luUGF0aCgpLGUucmVjdChhLngsYS55LGEud2lkdGgsYS5oZWlnaHQpLGlCLnJlbmRlclBhdGhXaXRoU3R5bGUoZSxhKX19ZS5yZXN0b3JlKCl9O3ZhciB3VmU9ZnVuY3Rpb24oZSl7Zkt0Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsUFMuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXApfHx0aGlzfXJldHVybiB0fShpQi5DYW52YXNEcmF3ZXIpO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdlcj13VmV9KTt2YXIgX2F0PUgoZ2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTVmU9KGRlKCksVXQocGUpKSxNVmU9RGYoKSxFVmU9ZnVuY3Rpb24oZSl7U1ZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsImxpbmUiLCIiKXx8dGhpc31yZXR1cm4gdH0oTVZlLlNWR0RyYXdlcik7Z2F0LlNlZ21lbnRTVkdEcmF3ZXI9RVZlfSk7dmFyIHBLdD1IKHlhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVFZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49d2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuc2NyZWVuV2lkdGg9dCx0aGlzLnNjcmVlbkhlaWdodD1yLHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1uLHRoaXMucGl4ZWxXaWR0aD10Km4sdGhpcy5waXhlbEhlaWdodD1yKm4sdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLG4pfXJldHVybiBlLnNpemVQaXhlbHM9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dC5jYW52YXM7by53aWR0aD1yKmksby5oZWlnaHQ9bippLG8uc3R5bGUud2lkdGg9cisicHgiLG8uc3R5bGUuaGVpZ2h0PW4rInB4Iix0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdC5zY2FsZShpLGkpfSxlLnByb3RvdHlwZS5ibGl0PWZ1bmN0aW9uKHQscixuKXtyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0wKSx0LmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxyLG4sdGhpcy5zY3JlZW5XaWR0aCx0aGlzLnNjcmVlbkhlaWdodCl9LGUucHJvdG90eXBlLmJsaXRDZW50ZXI9ZnVuY3Rpb24odCxyLG4pe3I9PT12b2lkIDAmJihyPTApLG49PT12b2lkIDAmJihuPTApLHRoaXMuYmxpdCh0LE1hdGguZmxvb3Ioci10aGlzLnNjcmVlbldpZHRoLzIpLE1hdGguZmxvb3Iobi10aGlzLnNjcmVlbkhlaWdodC8yKSl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXMuZGV2aWNlUGl4ZWxSYXRpbztyZXR1cm4gdGhpcy5zY3JlZW5XaWR0aD10LHRoaXMuc2NyZWVuSGVpZ2h0PXIsdGhpcy5waXhlbFdpZHRoPXQqaSx0aGlzLnBpeGVsSGVpZ2h0PXIqaSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLGkpLG4mJnRoaXMuY3R4LnRyYW5zbGF0ZSh0LzIsdC8yKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49ci5waXhlbFdpZHRoLGk9ci5waXhlbEhlaWdodCxvPXIuY3R4O3JldHVybiBvLnNhdmUoKSxvLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdD09bnVsbD9vLmNsZWFyUmVjdCgwLDAsbixpKTooby5maWxsU3R5bGU9dCxvLmZpbGxSZWN0KDAsMCxuLGkpKSxvLnJlc3RvcmUoKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRJbWFnZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLnBpeGVsV2lkdGgsdGhpcy5waXhlbEhlaWdodCl9LGV9KCk7eWF0LkNhbnZhc0J1ZmZlcj1UVmV9KTt2YXIgdmF0PUgoYUI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ1ZlPShkZSgpLFV0KHBlKSksbTQ9RnYoKSxBVmU9cEt0KCksUFZlPURmKCksSVZlPWZ1bmN0aW9uKGUpe0NWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwic3ltYm9sIil8fHRoaXN9cmV0dXJuIHR9KFBWZS5TVkdEcmF3ZXIpO2FCLlN5bWJvbFNWR0RyYXdlcj1JVmU7dmFyIExWZT1tNC5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSJdKTtmdW5jdGlvbiBrVmUoZSx0LHIsbil7dmFyIGk9dGhpcztyZXR1cm4gZnVuY3Rpb24obyxhLHMpe2Zvcih2YXIgbD1vLmNhbnZhcyxjPWwuY2xpZW50V2lkdGgsdT1sLmNsaWVudEhlaWdodCxoPW49PT12b2lkIDA/bmV3IEFWZS5DYW52YXNCdWZmZXIoMCwwKTpuLGY9dCgpLHA9cigpLGQ9bnVsbCxnPW51bGwsXz1udWxsLHk9MDt5PGEubGVuZ3RoO3krKyl7dmFyIHg9YVt5XTtpZih4IT1udWxsKXt2YXIgYj1tNC5yZXNvbHZlQXR0cmlidXRlcyhzLExWZSx4LHkpLFM9cCh4LHksZSk7aWYoISFSVmUoYyx1LGIueCxiLnksUykpe3ZhciBDPU5WZShkLGIsbTQuQ29udGV4dFN0eWxlQXR0cnMpLFA9Zih4LHksaS5fZGF0YXNldCk7aWYoIShDJiZfPT1TJiZnPT1QKSl7dmFyIGs9bTQuZ2V0U3Ryb2tlV2lkdGgoYiksTz1TK2srMTsoTz5oLnNjcmVlbldpZHRofHxPPmguc2NyZWVuSGVpZ2h0KSYmaC5yZXNpemUoTyxPLCEwKSxoLmNsZWFyKCk7dmFyIEQ9aC5jdHg7RC5iZWdpblBhdGgoKSxQKFMpLmNvbnRleHQoRCkobnVsbCksRC5jbG9zZVBhdGgoKSxtNC5yZW5kZXJQYXRoV2l0aFN0eWxlKEQsYiksZz1QLF89UyxkPWJ9aC5ibGl0Q2VudGVyKG8sYi54LGIueSl9fX19fWFCLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcD1rVmU7ZnVuY3Rpb24gUlZlKGUsdCxyLG4saSl7cmV0dXJuIHIraT49MCYmci1pPD1lJiZuK2k+PTAmJm4taTw9dH1mdW5jdGlvbiBOVmUoZSx0LHIpe2lmKGU9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoZVtpXSE9dFtpXSlyZXR1cm4hMX1yZXR1cm4hMH19KTt2YXIgQnY9SChEYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPZj0oZGUoKSxVdChwZSkpO09mLl9fZXhwb3J0U3RhcihmYXQoKSxEYyk7T2YuX19leHBvcnRTdGFyKGRhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIobWF0KCksRGMpO09mLl9fZXhwb3J0U3RhcihGdigpLERjKTtPZi5fX2V4cG9ydFN0YXIoVXUoKSxEYyk7T2YuX19leHBvcnRTdGFyKG5CKCksRGMpO09mLl9fZXhwb3J0U3RhcihvQigpLERjKTtPZi5fX2V4cG9ydFN0YXIoX2F0KCksRGMpO09mLl9fZXhwb3J0U3RhcihEZigpLERjKTtPZi5fX2V4cG9ydFN0YXIodmF0KCksRGMpfSk7dmFyIEh2PUgoYmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBEVmU9KGRlKCksVXQocGUpKSxkS3Q9a3MoKSx4YXQ9RmUoKSxPVmU9aWF0KCksZzQ9cnMoKSx6VmU9ZnVuY3Rpb24oZSl7RFZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsci5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSxyLl9kZWZlcnJlZFJlbmRlcmluZz0hMSxyLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtPWZ1bmN0aW9uKG4saSxvLGEpeyFyLl9pc0FuY2hvcmVkfHwoci5fcmVuZGVyQXJlYSE9bnVsbCYmci5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsICIraSsiKSBzY2FsZSgiK28rIiwgIithKyIpIiksci5fY2FudmFzIT1udWxsJiZyLl9jYW52YXMuc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rInB4LCAiK2krInB4KSBzY2FsZSgiK28rIiwgIithKyIpIikpfSxyLmFkZENsYXNzKCJ4eS1wbG90Iiksci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKX0sci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtpZihyLmRlZmVycmVkUmVuZGVyaW5nKCkpe3ZhciBuPXIueCgpJiZyLngoKS5zY2FsZSxpPXIueSgpJiZyLnkoKS5zY2FsZTtyLl9kZWZlcnJlZFJlbmRlcmVyLnVwZGF0ZURvbWFpbnMobixpKX1lbHNlIHIucmVuZGVyKCl9LHIuX2RlZmVycmVkUmVuZGVyZXI9bmV3IE9WZS5EZWZlcnJlZFJlbmRlcmVyKGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVuZGVyKCl9LHIuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm0pLHJ9cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmVycmVkUmVuZGVyaW5nKCkmJnRoaXMuX2RlZmVycmVkUmVuZGVyZXIucmVzZXRUcmFuc2Zvcm1zKCksZS5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLmRlZmVycmVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nO2lmKHIpe3ZhciBuPXRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSxpPXRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZTt0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnNldERvbWFpbnMobixpKX1yZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmc9cix0aGlzfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9YX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHQuX1hfS0VZLHIsbixpKTt2YXIgbz10aGlzLndpZHRoKCk7cmV0dXJuIG4hPW51bGwmJm8hPW51bGwmJm4ucmFuZ2UoWzAsb10pLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZX0tFWSxyLG4saSk7dmFyIG89dGhpcy5oZWlnaHQoKTtyZXR1cm4gbiE9bnVsbCYmbyE9bnVsbCYmKG4gaW5zdGFuY2VvZiBkS3QuQ2F0ZWdvcnk/bi5yYW5nZShbMCxvXSk6bi5yYW5nZShbbywwXSkpLHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngiJiZ0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluP3RoaXMuX21ha2VGaWx0ZXJCeVByb3BlcnR5KCJ5Iik6KHI9PT0ieSJ8fHI9PT0ieTAiKSYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpOm51bGx9LHQucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKTtpZihuIT1udWxsKXt2YXIgaT1uLmFjY2Vzc29yLG89bi5zY2FsZTtpZihvIT1udWxsKXJldHVybiBmdW5jdGlvbihhLHMsbCl7dmFyIGM9by5yYW5nZSgpO3JldHVybiB4YXQuTWF0aC5pblJhbmdlKG8uc2NhbGUoaShhLHMsbCkpLGNbMF0sY1sxXSl9fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9mZlVwZGF0ZShpKX0sdC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9uVXBkYXRlKGkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2spLHRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPyJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHIpe2Nhc2UieCI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMCx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCk7YnJlYWs7Y2FzZSJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITAsdGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3IrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgbz10aGlzLngoKSxhPW8mJm8uc2NhbGU7YSE9bnVsbCYmYS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt2YXIgcz10aGlzLnkoKSxsPXMmJnMuc2NhbGU7cmV0dXJuIGwhPW51bGwmJihsIGluc3RhbmNlb2YgZEt0LkNhdGVnb3J5P2wucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pOmwucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKSx0aGlzfSx0LnByb3RvdHlwZS5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy54KCkuc2NhbGU7ciE9bnVsbCYmci5hdXRvRG9tYWluKCl9LHQucHJvdG90eXBlLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW49ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnkoKS5zY2FsZTtyIT1udWxsJiZyLmF1dG9Eb21haW4oKX0sdC5wcm90b3R5cGUuc2hvd0FsbERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpc30sdC5wcm90b3R5cGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX3Byb2plY3RvcnNSZWFkeT1mdW5jdGlvbigpe3ZhciByPXRoaXMueCgpLG49dGhpcy55KCk7cmV0dXJuIHIhPW51bGwmJnIuYWNjZXNzb3IhPW51bGwmJm4hPW51bGwmJm4uYWNjZXNzb3IhPW51bGx9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJue3g6byhyLG4saSkseTphKHIsbixpKX19LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyksaT10aGlzLmF0dHIoImRlZmluZWQiKSxvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihyLngoKSkoYSxzLGwpLHU9ZzQuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci55KCkpKGEscyxsKTtyZXR1cm4gaSYmaS5hY2Nlc3NvcihhLHMsbCk9PT0hMT8hMTp4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHUpfTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oYSl7bi5zZXQoYSxuLmdldChhKS5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gbyhzLGwsYSl9KSl9KSxufSx0Ll9YX0tFWT0ieCIsdC5fWV9LRVk9InkiLHR9KGc0LlBsb3QpO2JhdC5YWVBsb3Q9elZlfSk7dmFyIFNhdD1IKGxCPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZWZT0oZGUoKSxVdChwZSkpLHlhPShFcigpLFV0KE1yKSksQlZlPUxmKCksSFZlPUJ2KCksVlZlPVV1KCksbUt0PW5CKCksVVZlPWtzKCksc0I9dmQoKSxRZz1GZSgpLHFWZT1JZigpLHdhdD1JUygpLHZsPXJzKCksR1ZlPUh2KCksZ0t0PXtsaW5lYXI6eWEuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOnlhLmN1cnZlTGluZWFyQ2xvc2VkLHN0ZXA6eWEuY3VydmVTdGVwLHN0ZXBCZWZvcmU6eWEuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjp5YS5jdXJ2ZVN0ZXBBZnRlcixiYXNpczp5YS5jdXJ2ZUJhc2lzLGJhc2lzT3Blbjp5YS5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDp5YS5jdXJ2ZUJhc2lzQ2xvc2VkLGJ1bmRsZTp5YS5jdXJ2ZUJ1bmRsZSxjYXJkaW5hbDp5YS5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3Blbjp5YS5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDp5YS5jdXJ2ZUNhcmRpbmFsQ2xvc2VkLG1vbm90b25lOnlhLmN1cnZlTW9ub3RvbmVYfTtsQi5DdXJ2ZU5hbWU9cVZlLm1ha2VFbnVtKFsibGluZWFyIiwibGluZWFyQ2xvc2VkIiwic3RlcCIsInN0ZXBCZWZvcmUiLCJzdGVwQWZ0ZXIiLCJiYXNpcyIsImJhc2lzT3BlbiIsImJhc2lzQ2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbE9wZW4iLCJjYXJkaW5hbENsb3NlZCIsIm1vbm90b25lIl0pO3ZhciBXVmU9ZnVuY3Rpb24oZSl7RlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fY3VydmU9ImxpbmVhciIsci5fYXV0b3JhbmdlU21vb3RoPSExLHIuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLHIuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxyLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLHIuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBCVmUuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbih2bC5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKSxuLmVhc2luZ01vZGUoImV4cEluT3V0Iiksbi5tYXhUb3RhbER1cmF0aW9uKHZsLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pLHIuYW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4sbiksci5hdHRyKCJzdHJva2UiLG5ldyBVVmUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuLGkpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzKTooZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsciksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9cix0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7dGhpcy5hdXRvcmFuZ2VNb2RlKCk9PT0ieCImJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBzQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKSx0aGlzLmF1dG9yYW5nZU1vZGUoKT09PSJ5IiYmdGhpcy55KCkmJnRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpfSx0LnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jdXJ2ZToodGhpcy5fY3VydmU9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ6KHRoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ9cix0aGlzKX0sdC5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ6KHRoaXMuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29sbGFwc2VEZW5zZUxpbmVzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ6KHRoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IFZWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgbUt0LkxpbmVTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgSFZlLkNhbnZhc0RyYXdlcihpLG1LdC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2QzTGluZUZhY3Rvcnkocil9KSl9KX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPWUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscik7aWYoIXRoaXMuX2F1dG9yYW5nZVNtb290aHx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT1yfHx0aGlzLmF1dG9yYW5nZU1vZGUoKSE9PSJ4IiYmdGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0ieSIpcmV0dXJuIG47dmFyIGk9dGhpcy5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cygpLG87cmV0dXJuIHRoaXMuYXV0b3JhbmdlTW9kZSgpPT09InkiP289aS5sZWZ0LmNvbmNhdChpLnJpZ2h0KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueX0pOm89aS50b3AuY29uY2F0KGkuYm90dG9tKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueH0pLG4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB5YS5leHRlbnQoeWEubWVyZ2UoW2Esb10pKX0pfSx0LnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm57bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfTt2YXIgbj10aGlzLnkoKS5zY2FsZSxpPXRoaXMueCgpLnNjYWxlLG89e2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX0sYT1pLnNjYWxlKGkuZG9tYWluKClbMF0pLHM9aS5zY2FsZShpLmRvbWFpbigpWzFdKSxsPW4uc2NhbGUobi5kb21haW4oKVswXSksYz1uLnNjYWxlKG4uZG9tYWluKClbMV0pO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih1KXtmb3IodmFyIGg9dS5kYXRhKCksZixwLGQsZyxfLHkseCxiLFM9MTtTPGgubGVuZ3RoO1MrKylfPXh8fGkuc2NhbGUoci54KCkuYWNjZXNzb3IoaFtTLTFdLFMtMSx1KSkseT1ifHxuLnNjYWxlKHIueSgpLmFjY2Vzc29yKGhbUy0xXSxTLTEsdSkpLHg9aS5zY2FsZShyLngoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLGI9bi5zY2FsZShyLnkoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLF88YT09YTw9eCYmKGY9YS1fLHA9eC1fLGc9Yi15LGQ9ZipnL3Asby5sZWZ0LnB1c2goe3g6YSx5Om4uaW52ZXJ0KHkrZCl9KSksXzxzPT1zPD14JiYoZj1zLV8scD14LV8sZz1iLXksZD1mKmcvcCxvLnJpZ2h0LnB1c2goe3g6cyx5Om4uaW52ZXJ0KHkrZCl9KSkseTxjPT1jPD1iJiYocD14LV8sZD1jLXksZz1iLXksZj1kKnAvZyxvLnRvcC5wdXNoKHt4OmkuaW52ZXJ0KF8rZikseTpjfSkpLHk8bD09bDw9YiYmKHA9eC1fLGQ9bC15LGc9Yi15LGY9ZCpwL2csby5ib3R0b20ucHVzaCh7eDppLmludmVydChfK2YpLHk6bH0pKX0pLG99LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLnNjYWxlLmRvbWFpbigpLG49TWF0aC5tYXgoclswXSxyWzFdKSxpPU1hdGgubWluKHJbMF0sclsxXSksbz1uPDAmJm58fGk+MCYmaXx8MCxhPXRoaXMueSgpLnNjYWxlLnNjYWxlKG8pO3JldHVybiBmdW5jdGlvbihzLGwsYyl7cmV0dXJuIGF9fSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKHZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHdhdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24obil7aWYobiE9PSJkIil7dmFyIGk9cltuXTtyW25dPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gby5sZW5ndGg+MD9pKG9bMF0sYSxzKTpudWxsfX19KSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZKHIpO3JldHVybiBuIT1udWxsP1tuXTpbXX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0xLzAsaT0xLzAsbyxhPXRoaXMuYm91bmRzKCkscz10aGlzLmVudGl0aWVzKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXTtpZighIVFnLk1hdGgud2l0aGluKHUucG9zaXRpb24sYSkpe3ZhciBoPU1hdGguYWJzKHIueC11LnBvc2l0aW9uLngpLGY9TWF0aC5hYnMoci55LXUucG9zaXRpb24ueSk7KGg8bnx8aD09PW4mJmY8aSkmJihvPXUsbj1oLGk9Zil9fXJldHVybiBvfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih2bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxyfSx0LnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gaS5fZDNMaW5lRmFjdG9yeShzLHIsbikobyl9fSx0LnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbihyLG4saSl7bj09PXZvaWQgMCYmKG49dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKSxpPT09dm9pZCAwJiYoaT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3ZhciBvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1uKGEscyxsKSx1PWkoYSxzLGwpO3JldHVybiBRZy5NYXRoLmlzVmFsaWROdW1iZXIoYykmJlFnLk1hdGguaXNWYWxpZE51bWJlcih1KX07cmV0dXJuIHlhLmxpbmUoKS54KGZ1bmN0aW9uKGEscyl7cmV0dXJuIG4oYSxzLHIpfSkueShmdW5jdGlvbihhLHMpe3JldHVybiBpKGEscyxyKX0pLmN1cnZlKHRoaXMuX2dldEN1cnZlRmFjdG9yeSgpKS5kZWZpbmVkKGZ1bmN0aW9uKGEscyl7cmV0dXJuIG8oYSxzLHIpfSl9LHQucHJvdG90eXBlLl9nZXRDdXJ2ZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmN1cnZlKCk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt2YXIgbj1nS3Rbcl07cmV0dXJuIG49PW51bGw/Z0t0LmxpbmVhcjpufWVsc2UgcmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPW5ldyBRZy5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0YSgpO2lmKCFyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmIXIuX2Rvd25zYW1wbGluZ0VuYWJsZWQpe24uc2V0KGksW29dKTtyZXR1cm59Zm9yKHZhciBhPVtdLHM9by5sZW5ndGgsbD0wO2w8cztsKyspYVtsXT1sO3IuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkJiYoYT1yLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nKGksYSkpLHIuX2Rvd25zYW1wbGluZ0VuYWJsZWQmJihhPXIuX2ZpbHRlckRvd25zYW1wbGluZyhpLGEpKSxyLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihhPXIuX2ZpbHRlckRlbnNlTGluZXMoaSxhKSk7Zm9yKHZhciBjPVtdLHU9YS5sZW5ndGgsbD0wO2w8dTtsKyspe3ZhciBoPWFbbF07Y1tsXT1vW2hdfW4uc2V0KGksW2NdKX0pLG59LHQucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMsbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1yLmRhdGEoKSxsPVtdLGM9ZnVuY3Rpb24oeCxiKXtyZXR1cm4gUWcuTWF0aC5pblJhbmdlKHgsMCxpLndpZHRoKCkpJiZRZy5NYXRoLmluUmFuZ2UoYiwwLGkuaGVpZ2h0KCkpfSx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW8oc1tuW3VdXSxuW3VdLHIpLGY9YShzW25bdV1dLG5bdV0scikscD1jKGgsZik7aWYoIXAmJm5bdS0xXSE9bnVsbCYmc1tuW3UtMV1dIT1udWxsKXt2YXIgZD1vKHNbblt1LTFdXSxuW3UtMV0sciksZz1hKHNbblt1LTFdXSxuW3UtMV0scik7cD1wfHxjKGQsZyl9aWYoIXAmJm5bdSsxXSE9bnVsbCYmc1tuW3UrMV1dIT1udWxsKXt2YXIgXz1vKHNbblt1KzFdXSxuW3UrMV0scikseT1hKHNbblt1KzFdXSxuW3UrMV0scik7cD1wfHxjKF8seSl9cCYmbC5wdXNoKG5bdV0pfXJldHVybiBsfSx0LnByb3RvdHlwZS5fZmlsdGVyRG93bnNhbXBsaW5nPWZ1bmN0aW9uKHIsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybltdO2Zvcih2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPVtuWzBdXSxsPWZ1bmN0aW9uKGssTyl7dmFyIEQ9byhpW25ba11dLG5ba10sciksQj1hKGlbbltrXV0sbltrXSxyKSxJPW8oaVtuW2srMV1dLG5baysxXSxyKSxMPWEoaVtuW2srMV1dLG5baysxXSxyKTtpZihPPT09MS8wKXJldHVybiBNYXRoLmZsb29yKEQpPT09TWF0aC5mbG9vcihJKTt2YXIgUj1CKyhJLUQpKk87cmV0dXJuIE1hdGguZmxvb3IoTCk9PT1NYXRoLmZsb29yKFIpfSxjPTA7YzxuLmxlbmd0aC0xOyl7Zm9yKHZhciB1PW5bY10saD1vKGlbbltjXV0sbltjXSxyKSxmPWEoaVtuW2NdXSxuW2NdLHIpLHA9byhpW25bYysxXV0sbltjKzFdLHIpLGQ9YShpW25bYysxXV0sbltjKzFdLHIpLGc9TWF0aC5mbG9vcihoKT09PU1hdGguZmxvb3IocCk/MS8wOihkLWYpLyhwLWgpLF89bltjXSx5PWc9PT0xLzA/ZjpoLHg9XyxiPXksUz0hMDtjPG4ubGVuZ3RoLTEmJihTfHxsKGMsZykpOyl7YysrLFM9ITE7dmFyIEM9Zz09PTEvMD9hKGlbbltjXV0sbltjXSxyKTpvKGlbbltjXV0sbltjXSxyKTtDPmImJihiPUMseD1uW2NdKSxDPHkmJih5PUMsXz1uW2NdKX12YXIgUD1uW2NdO18hPT11JiZzLnB1c2goXykseCE9PV8mJnghPT11JiZzLnB1c2goeCksUCE9PXUmJlAhPT1fJiZQIT09eCYmcy5wdXNoKFApfXJldHVybiBzfSx0LnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihyLG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPWZ1bmN0aW9uKGMpe3JldHVybiBvKGlbY10sYyxyKX0sbD1mdW5jdGlvbihjKXtyZXR1cm4gYShpW2NdLGMscil9O3JldHVybiB0aGlzLl9idWNrZXRCeVgocixuLHMsbCl9LHQucHJvdG90eXBlLl9idWNrZXRCeVg9ZnVuY3Rpb24ocixuLGksbyl7Zm9yKHZhciBhPVtdLHM9ci5kYXRhKCksbD1udWxsLGM9bi5sZW5ndGgsdT0wO3U8PWM7Kyt1KXt2YXIgaD1uW3VdO2lmKHNbaF0hPW51bGwpe3ZhciBmPU1hdGguZmxvb3IoaShoKSkscD1vKGgpO2w9PW51bGw/bD1uZXcgUWcuQnVja2V0KGgsZixwKTpsLmlzSW5CdWNrZXQoZik/bC5hZGRUb0J1Y2tldChwLGgpOihhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksbD1uZXcgUWcuQnVja2V0KGgsZixwKSl9fXJldHVybiBsIT1udWxsJiZhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksYX0sdH0oR1ZlLlhZUGxvdCk7bEIuTGluZT1XVmV9KTt2YXIgVGF0PUgoRWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShFYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZVmU9KGRlKCksVXQocGUpKSxjQj0oRXIoKSxVdChNcikpLGpWZT1rcygpLF80PUZlKCksTWF0PUJ2KCksX0t0PW1hdCgpLFhWZT1VdSgpLHlLdD1uQigpLHVCPUlTKCksJFZlPVNhdCgpLERzPXJzKCksS1ZlPWZ1bmN0aW9uKGUpe1lWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJhcmVhLXBsb3QiKSxyLnkwKDApLHIuYXR0cigiZmlsbC1vcGFjaXR5IiwuMjUpLHIuYXR0cigiZmlsbCIsbmV3IGpWZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuX2xpbmVEcmF3ZXJzPW5ldyBfNC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbiksbiE9bnVsbCl7dmFyIGk9dGhpcy55MCgpLmFjY2Vzc29yO2khPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVksaSxuKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueTA9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlWVNjYWxlKCl9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2xpbmVEcmF3ZXJzLnNldChyLG5ldyBNYXQuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHlLdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IE1hdC5DYW52YXNEcmF3ZXIoaSx5S3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBvPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueCgpKSxhPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueSgpKTtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShyLG8sYSl9KSl9KSksZS5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpO3JldHVybiB0aGlzLnJlbmRlcmVyKCk9PT0ic3ZnIj9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsciksdGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPURzLlBsb3QuYXBwbHlEcmF3U3RlcHMobixvKTtyLl9saW5lRHJhd2Vycy5nZXQobykuZHJhdyhpLmdldChvKSxhKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSksci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih1Qi5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLHJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IFhWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgX0t0LkFyZWFTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgTWF0LkNhbnZhc0RyYXdlcihpLF9LdC5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7dmFyIG89bi5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxhPW9bMF0scz1vWzFdLGw9b1syXSxjPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlQXJlYUdlbmVyYXRvcihhLHMsbCxjLHIpfSxmdW5jdGlvbigpe3ZhciBvPW4uX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksYT1vWzBdLHM9b1sxXSxsPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcihhLHMsbCxyKX0pKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHVCLkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KCJ5MCIpLG49XzQuQXJyYXkuZmxhdHRlbihyKSxpPV80LkFycmF5LnVuaXEobiksbz1pLmxlbmd0aD09PTE/aVswXTpudWxsLGE9dGhpcy55KCkscz1hJiZhLnNjYWxlO3MhPW51bGwmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciE9bnVsbCYmKHMucmVtb3ZlUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciksdGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXI9bnVsbCksbyE9bnVsbCYmKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW29dfSxzLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpKSl9LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3JldHVybiBEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpfSx0LnByb3RvdHlwZS5fY29vcmRpbmF0ZVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm5bRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKSx0aGlzLnJlbmRlcmVyKCk9PT0iY2FudmFzIilyZXR1cm4gY0Iuc2VsZWN0QWxsKCk7dmFyIGk9ZS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMscikubm9kZXMoKSxvPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQoYSl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBpLnB1c2guYXBwbHkoaSxhLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KSxjQi5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLGE9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3ZhciB1PW8uX2NyZWF0ZUFyZWFHZW5lcmF0b3IocixuLGksYSxjKTtyZXR1cm4gdShzKX19LHQucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz1yKGksbyxhKSxsPW4oaSxvLGEpO3JldHVybiBfNC5NYXRoLmlzVmFsaWROdW1iZXIocykmJl80Lk1hdGguaXNWYWxpZE51bWJlcihsKX19LHQucHJvdG90eXBlLl9jcmVhdGVBcmVhR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8sYSl7dmFyIHM9dGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCksbD1jQi5hcmVhKCkueChmdW5jdGlvbihjLHUpe3JldHVybiByKGMsdSxhKX0pLnkxKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG4oYyx1LGEpfSkueTAoZnVuY3Rpb24oYyx1KXtyZXR1cm4gaShjLHUsYSl9KS5jdXJ2ZShzKS5kZWZpbmVkKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG8oYyx1LGEpfSk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX2dldEN1cnZlRmFjdG9yeSgpLHM9Y0IubGluZSgpLngoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsbyl9KS55KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIG4obCxjLG8pfSkuY3VydmUoYSkuZGVmaW5lZChmdW5jdGlvbihsLGMpe3JldHVybiBpKGwsYyxvKX0pO3JldHVybiBzfSx0Ll9ZMF9LRVk9InkwIix0fSgkVmUuTGluZSk7RWF0LkFyZWE9S1ZlfSk7dmFyIHk0PUgoR3U9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEd1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWlZlPShkZSgpLFV0KHBlKSksQWF0PShFcigpLFV0KE1yKSksQ2F0PV9sKCksSlZlPUxmKCksUVZlPUJ1KCksdFVlPUJ2KCksZVVlPVV1KCksclVlPW9CKCksblVlPUNTKCksUGF0PWtzKCksdkt0PXZkKCkseGw9RmUoKSxMYXQ9SWYoKSx4S3Q9SVMoKSxoQj1ycygpLGlVZT1IdigpO0d1LkJhck9yaWVudGF0aW9uPUxhdC5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKTtHdS5MYWJlbHNQb3NpdGlvbj1MYXQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCIsIm91dHNpZGUiXSk7R3UuQmFyQWxpZ25tZW50PUxhdC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0pO3ZhciBJYXQ9ZnVuY3Rpb24oZSl7WlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xhYmVsRm9ybWF0dGVyPVFWZS5pZGVudGl0eSgpLG4uX2xhYmVsc0VuYWJsZWQ9ITEsbi5fbGFiZWxzUG9zaXRpb249R3UuTGFiZWxzUG9zaXRpb24uZW5kLG4uX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlPSEwLG4uX2JhckFsaWdubWVudD0ibWlkZGxlIixuLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3M9blVlLm1lbW9pemUob1VlKSxuLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLG4uYWRkQ2xhc3MoImJhci1wbG90IiksciE9PSJ2ZXJ0aWNhbCImJnIhPT0iaG9yaXpvbnRhbCIpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgUGxvdHMuQmFyIik7cmV0dXJuIG4uX2lzVmVydGljYWw9cj09PSJ2ZXJ0aWNhbCIsbi5hbmltYXRvcigiYmFzZWxpbmUiLG5ldyBKVmUuTnVsbCksbi5hdHRyKCJmaWxsIixuZXcgUGF0LkNvbG9yKCkucmFuZ2UoKVswXSksbi5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2JhclBpeGVsVGhpY2tuZXNzKCl9KSxuLl9sYWJlbENvbmZpZz1uZXcgeGwuTWFwLG4uX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltuLmJhc2VsaW5lVmFsdWUoKV19LG59cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LHQucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfSx0LnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfSx0LnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fQkFSX0VORF9LRVkpO3ZhciBuPXRoaXMucG9zaXRpb24oKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9CQVJfRU5EX0tFWSxyLGkpLHRoaXMuX3VwZGF0ZVRoaWNrbmVzc0F0dHIoKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuYmFyQWxpZ25tZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2JhckFsaWdubWVudDoodGhpcy5fYmFyQWxpZ25tZW50PXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGVVZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgclVlLlJlY3RhbmdsZVNWR0RyYXdlcih0Ll9CQVJfQVJFQV9DTEFTUyl9LGZ1bmN0aW9uKHIpe3JldHVybiBuZXcgdFVlLlJlY3RhbmdsZUNhbnZhc0RyYXdlcihyKX0pfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LHQucHJvdG90eXBlLmJhc2VsaW5lVmFsdWU9ZnVuY3Rpb24ocil7aWYocj09bnVsbCl7aWYodGhpcy5fYmFzZWxpbmVWYWx1ZSE9bnVsbClyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7dmFyIG49dGhpcy5sZW5ndGgoKS5zY2FsZTtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIFBhdC5UaW1lP25ldyBEYXRlKDApOjB9cmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU9cix0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsciksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsbiE9bnVsbCYmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPW4pLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCh0Ll9MQUJFTF9BUkVBX0NMQVNTLCEwKSxvPW5ldyBDYXQuU3ZnQ29udGV4dChpLm5vZGUoKSksYT1uZXcgQ2F0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgQ2F0LldyaXRlcihhLG8pO3JldHVybiB0aGlzLl9sYWJlbENvbmZpZy5zZXQocix7bGFiZWxBcmVhOmksbWVhc3VyZXI6YSx3cml0ZXI6c30pLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGFiZWxDb25maWcuZ2V0KHIpO24hPW51bGwmJihuLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUocikpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3ZhciBvPW4uX2lzVmVydGljYWw/bi5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WChyKTpuLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RZKHIpO3JldHVybiBvPT09dm9pZCAwP3ZvaWQgMDpuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX2VudGl0aWVzSW50ZXJzZWN0aW5nKHIueCxyLnkpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoaSk6aSgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPVtdLG89dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLGE9by5sZW5ndGgscz0wO3M8YTtzKyspe3ZhciBsPW9bc107eGwuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCb3VuZHMobCkpJiZpLnB1c2godGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KGwpKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3VwZGF0ZUxlbmd0aFNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHI9dGhpcy5sZW5ndGgoKS5zY2FsZTtyIGluc3RhbmNlb2Ygdkt0LlF1YW50aXRhdGl2ZVNjYWxlJiYoci5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpLHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHIpfSl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMubGVuZ3RoKCkuc2NhbGUsbz1pLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxhPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6byx5MTp0aGlzLl9pc1ZlcnRpY2FsP286MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpvLHkyOnRoaXMuX2lzVmVydGljYWw/bzp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGEpLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQocykubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmeGwuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1lLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpLG87aWYocj09PSJ4IiYmdGhpcy5faXNWZXJ0aWNhbClvPXRoaXMueCgpO2Vsc2UgaWYocj09PSJ5IiYmIXRoaXMuX2lzVmVydGljYWwpbz10aGlzLnkoKTtlbHNlIHJldHVybiBpO2lmKCEobyYmby5zY2FsZSYmby5zY2FsZSBpbnN0YW5jZW9mIHZLdC5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJuIGk7dmFyIGE9by5zY2FsZSxzPXRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIGk9aS5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIEFhdC5leHRlbnQoW2EuaW52ZXJ0KG4uX2dldFBvc2l0aW9uQXR0cihhLnNjYWxlKGxbMF0pLHMpKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzBdKSxzKStzKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzFdKSxzKSksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFsxXSkscykrcyldKX0pLGl9LHQucHJvdG90eXBlLl9nZXRQb3NpdGlvbkF0dHI9ZnVuY3Rpb24ocixuKXtzd2l0Y2godGhpcy5faXNWZXJ0aWNhbHx8KHItPW4sbio9LTEpLHRoaXMuX2JhckFsaWdubWVudCl7Y2FzZSJzdGFydCI6cmV0dXJuIHI7Y2FzZSJlbmQiOnJldHVybiByLW47Y2FzZSJtaWRkbGUiOmRlZmF1bHQ6cmV0dXJuIHItbi8yfX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpLGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbz10aGlzLmRhdGFzZXRzKCkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gbi5nZXQoYSkuc29tZShmdW5jdGlvbihzLGwpe3JldHVybiBzPT1udWxsPyExOnIuX2RyYXdMYWJlbChzLGwsYSxpKX0pfSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJm8mJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiByLl9sYWJlbENvbmZpZy5nZXQoYSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fbGFiZWxDb25maWcuZ2V0KGkpLHM9YS5sYWJlbEFyZWEsbD1hLm1lYXN1cmVyLGM9YS53cml0ZXIsdT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGg9dShyLG4saSksZj10aGlzLmxlbmd0aCgpLnNjYWxlLHA9ZiE9bnVsbD9mLnNjYWxlKGgpOmgsZD1mIT1udWxsP2Yuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOnRoaXMuYmFzZWxpbmVWYWx1ZSgpLGc9e3g6by54KHIsbixpKSx5Om8ueShyLG4saSl9LF89e3dpZHRoOm8ud2lkdGgocixuLGkpLGhlaWdodDpvLmhlaWdodChyLG4saSl9LHk9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoaCxyLG4saSkseD1sLm1lYXN1cmUoeSksYj10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihnLF8seCksUz10aGlzLl9pc1ZlcnRpY2FsP3A8PWQ6cDxkLEM9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGcsXyx4LGIsUyksUD1DLmNvbnRhaW5lckRpbWVuc2lvbnMsaz1DLmxhYmVsQ29udGFpbmVyT3JpZ2luLE89Qy5sYWJlbE9yaWdpbixEPUMuYWxpZ25tZW50LEI9by5maWxsKHIsbixpKSxJPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMsayxPLHgsYixCKSxMPXt4QWxpZ246RC54LHlBbGlnbjpELnl9O2Mud3JpdGUoeSxQLndpZHRoLFAuaGVpZ2h0LEwsSS5ub2RlKCkpO3ZhciBSPXRoaXMuX2lzVmVydGljYWw/Xy53aWR0aDx4LndpZHRoOl8uaGVpZ2h0PHguaGVpZ2h0O3JldHVybiBSfSx0LnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24ocixuLGkpe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09R3UuTGFiZWxzUG9zaXRpb24ub3V0c2lkZSlyZXR1cm4hMTt2YXIgbz10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYT10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgscz10aGlzLl9pc1ZlcnRpY2FsP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGw9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLGM9bythLHU9YTtyZXR1cm4gYz5zP3U9cy1vOm88MCYmKHU9YyksbCt0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9dX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbihyLG4saSxvLGEpe3ZhciBzPXRoaXMsbD10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYz10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgsdT10aGlzLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgsaD0iY2VudGVyIixmPWMscD1sLGQ9bCxnPWZ1bmN0aW9uKF8pe3N3aXRjaChfKXtjYXNlInRvcExlZnQiOmg9cy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIscCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsZCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI7cmV0dXJuO2Nhc2UiY2VudGVyIjpkKz0oYyt1KS8yO3JldHVybjtjYXNlImJvdHRvbVJpZ2h0IjpoPXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUixkKz1mLXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLXU7cmV0dXJufX07aWYobylzd2l0Y2godGhpcy5fbGFiZWxzUG9zaXRpb24pe2Nhc2UgR3UuTGFiZWxzUG9zaXRpb24uc3RhcnQ6ZyhhPyJib3R0b21SaWdodCI6InRvcExlZnQiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLm1pZGRsZTpnKCJjZW50ZXIiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLmVuZDpnKGE/InRvcExlZnQiOiJib3R0b21SaWdodCIpO2JyZWFrfWVsc2UgYT8oaD10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1LGQtPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UpOihoPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxkKz1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9uLndpZHRoOmYsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/ZjpuLmhlaWdodH0sbGFiZWxDb250YWluZXJPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD9yLng6cCx5OnRoaXMuX2lzVmVydGljYWw/cDpyLnl9LGxhYmVsT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ci54K24ud2lkdGgvMi1pLndpZHRoLzI6ZCx5OnRoaXMuX2lzVmVydGljYWw/ZDpyLnkrbi5oZWlnaHQvMi1pLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjpoLHk6dGhpcy5faXNWZXJ0aWNhbD9oOiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLngrIiwgIituLnkrIikiKTtpZihhKXtsLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApO3ZhciBjPXhsLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIscykqMS42PHhsLkNvbG9yLmNvbnRyYXN0KCJibGFjayIscyk7bC5jbGFzc2VkKGM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApfWVsc2UgbC5jbGFzc2VkKCJvZmYtYmFyLWxhYmVsIiwhMCk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCI7blthXT1mdW5jdGlvbigpe3JldHVybiBvfSxuW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoeEt0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih4S3QuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJ4IjoieSIsbD1oQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGM9aEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5sZW5ndGgoKSksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIE1hdGguYWJzKG8tYyhkLGcsXykpfSxoPW5bdC5fQkFSX1RISUNLTkVTU19LRVldLGY9bi5nYXAscD1mPT1udWxsP2g6ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWgoZCxnLF8pO3JldHVybiB5PHQuX0JBUl9HQVBMRVNTX1RIUkVTSE9MRF9QWD95OnktZihkLGcsXyl9O3JldHVybiBuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/cDp1LG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/dTpwLG5bYV09ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWMoZCxnLF8pO3JldHVybiB5Pm8/bzp5fSxuW3NdPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5fZ2V0UG9zaXRpb25BdHRyKGwoZCxnLF8pLGgoZCxnLF8pKX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZVRoaWNrbmVzc0F0dHI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5wb3NpdGlvbigpLGk9dGhpcy5iYXJFbmQoKTtuIT1udWxsJiZpIT1udWxsPyh0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSExLHRoaXMuYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbihvLGEscyl7dmFyIGw9bi5hY2Nlc3NvcihvLGEscyksYz1pLmFjY2Vzc29yKG8sYSxzKTtyZXR1cm4gbD1uLnNjYWxlP24uc2NhbGUuc2NhbGUobCk6bCxjPWkuc2NhbGU/aS5zY2FsZS5zY2FsZShjKTpjLE1hdGguYWJzKGMtbCl9KSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JhclBpeGVsVGhpY2tuZXNzKCl9KSl9LHQucHJvdG90eXBlLl9iYXJQaXhlbFRoaWNrbmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzJiZ0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3ModGhpcy5wb3NpdGlvbigpLHRoaXMuZGF0YXNldHMoKSx0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpKTowfSx0LnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihyKXtpZihyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpLCF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSlyZXR1cm5bXTt2YXIgbj1lLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIG59LHQucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49ci5kYXR1bSxpPXIuaW5kZXgsbz1yLmRhdGFzZXQ7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKG4saSxvKX0sdC5wcm90b3R5cGUuX3BpeGVsQm91bmRzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm57eDpvLngocixuLGkpLHk6by55KHIsbixpKSx3aWR0aDpvLndpZHRoKHIsbixpKSxoZWlnaHQ6by5oZWlnaHQocixuLGkpfX0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX3BpeGVsQm91bmRzKHIsbixpKSxhPSh0aGlzLl9pc1ZlcnRpY2FsP2hCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTpoQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpKHIsbixpKSxzPSh0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpLnNjYWxlOnRoaXMueCgpLnNjYWxlKS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk7cmV0dXJuIHRoaXMuX3BpeGVsUG9pbnRCYXIoYSxzLG8pfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludEJhcj1mdW5jdGlvbihyLG4saSl7dmFyIG8sYTtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8obz1pLngraS53aWR0aC8yLGE9cjw9bj9pLnk6aS55K2kuaGVpZ2h0KToobz1yPj1uP2kueCtpLndpZHRoOmkueCxhPWkueStpLmhlaWdodC8yKSx7eDpvLHk6YX19LHQucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMscixuKX0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49bmV3IHhsLk1hcCxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG89dGhpcy53aWR0aCgpLGE9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9cy5kYXRhKCkubWFwKGZ1bmN0aW9uKGMsdSl7dmFyIGg9ci5faXNEYXR1bU9uU2NyZWVuKGksbyxhLGMsdSxzKTtyZXR1cm4gaD9jOm51bGx9KTtuLnNldChzLGwpfSksbn0sdC5wcm90b3R5cGUuX2lzRGF0dW1PblNjcmVlbj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci54KG8sYSxzKSxjPXIueShvLGEscyksdT1yLndpZHRoKG8sYSxzKSxoPXIuaGVpZ2h0KG8sYSxzKSxmPXhsLk1hdGguaXNWYWxpZE51bWJlcihsKSYmeGwuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4bC5NYXRoLmlzVmFsaWROdW1iZXIodSkmJnhsLk1hdGguaXNWYWxpZE51bWJlcihoKTtyZXR1cm4gZj94bC5NYXRoLmJvdW5kc0ludGVyc2VjdHMobCxjLHUsaCwwLDAsbixpKTohMX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fbGFiZWxDb25maWcuZ2V0KG4pLm1lYXN1cmVyLnJlc2V0KCl9KX0sdC5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTUsdC5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYPTMsdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQsdC5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIix0Ll9CQVJfRU5EX0tFWT0iYmFyRW5kIix0Ll9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiLHQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwLHR9KGlVZS5YWVBsb3QpO0d1LkJhcj1JYXQ7ZnVuY3Rpb24gb1VlKGUsdCxyKXt2YXIgbixpPWUuc2NhbGU7aWYoaSBpbnN0YW5jZW9mIFBhdC5DYXRlZ29yeSluPWkucmFuZ2VCYW5kKCk7ZWxzZXt2YXIgbz1lLmFjY2Vzc29yLGE9QWF0LnNldCh4bC5BcnJheS5mbGF0dGVuKHQubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmRhdGEoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gbyh1LGgsYyl9KS5maWx0ZXIoZnVuY3Rpb24odSl7cmV0dXJuIHUhPW51bGx9KS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUudmFsdWVPZigpfSl9KSkpLnZhbHVlcygpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4rY30pO2Euc29ydChmdW5jdGlvbihjLHUpe3JldHVybiBjLXV9KTt2YXIgcz1hLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gaS5zY2FsZShjKX0pLGw9QWF0LnBhaXJzKHMpO249eGwuTWF0aC5taW4obCxmdW5jdGlvbihjLHUpe3JldHVybiBNYXRoLmFicyhjWzFdLWNbMF0pfSxyKklhdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pLG4qPUlhdC5fQkFSX1RISUNLTkVTU19SQVRJT31yZXR1cm4gbn19KTt2YXIgd0t0PUgoa2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhVWU9KGRlKCksVXQocGUpKSxzVWU9a3MoKSxsVWU9RmUoKSxiS3Q9eTQoKSxjVWU9cnMoKSx1VWU9ZnVuY3Rpb24oZSl7YVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2NsdXN0ZXJPZmZzZXRzPW5ldyBsVWUuTWFwLG59cmV0dXJuIHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX21ha2VJbm5lclNjYWxlKCksbz1mdW5jdGlvbihsLGMpe3JldHVybiBpLnJhbmdlQmFuZCgpfTtuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/bzpuLndpZHRoLG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/bi5oZWlnaHQ6bzt2YXIgYT1uLngscz1uLnk7cmV0dXJuIG4ueD10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKGwsYyx1KXtyZXR1cm4gYShsLGMsdSkrci5fY2x1c3Rlck9mZnNldHMuZ2V0KHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIGEobCxjLHUpfSxuLnk9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpK3IuX2NsdXN0ZXJPZmZzZXRzLmdldCh1KX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9tYWtlSW5uZXJTY2FsZSgpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2NsdXN0ZXJPZmZzZXRzLnNldChpLG4uc2NhbGUoU3RyaW5nKG8pKS1uLnJhbmdlQmFuZCgpLzIpfSl9LHQucHJvdG90eXBlLl9tYWtlSW5uZXJTY2FsZT1mdW5jdGlvbigpe3ZhciByPW5ldyBzVWUuQ2F0ZWdvcnk7ci5kb21haW4odGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybiBTdHJpbmcobyl9KSk7dmFyIG49Y1VlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihiS3QuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpO3JldHVybiByLnJhbmdlKFswLG4obnVsbCwwLG51bGwpXSkscn0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCksZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKX0sdH0oYkt0LkJhcik7a2F0LkNsdXN0ZXJlZEJhcj11VWV9KTt2YXIgU0t0PUgoTmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoVWU9KGRlKCksVXQocGUpKSx2ND0oRXIoKSxVdChNcikpLFJhdD1fbCgpLGZVZT1MZigpLHBVZT1CdSgpLGRVZT1rcygpLFZ2PUZlKCksbVVlPWZhdCgpLGdVZT1kYXQoKSxfVWU9VXUoKSx5VWU9QUYoKSxNZD1ycygpLHZVZT1mdW5jdGlvbihlKXtoVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhcnRBbmdsZT0wLHIuX2VuZEFuZ2xlPTIqTWF0aC5QSSxyLl9sYWJlbEZvcm1hdHRlcj1wVWUuaWRlbnRpdHkoKSxyLl9sYWJlbHNFbmFibGVkPSExLHIuaW5uZXJSYWRpdXMoMCksci5vdXRlclJhZGl1cyhmdW5jdGlvbigpe3ZhciBuPXIuX3BpZUNlbnRlcigpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChyLndpZHRoKCktbi54LG4ueCksTWF0aC5tYXgoci5oZWlnaHQoKS1uLnksbi55KSl9KSxyLmFkZENsYXNzKCJwaWUtcGxvdCIpLHIuYXR0cigiZmlsbCIsZnVuY3Rpb24obixpKXtyZXR1cm4gU3RyaW5nKGkpfSxuZXcgZFVlLkNvbG9yKSxyLl9zdHJva2VEcmF3ZXJzPW5ldyBWdi5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYXR0YWNoVG8oci5fcmVuZGVyQXJlYSl9KX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBvPXRoaXMuX3BpZUNlbnRlcigpO3RoaXMuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby54KyIsIitvLnkrIikiKTt2YXIgYT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLndpZHRoKCktby54LG8ueCksTWF0aC5tYXgodGhpcy5oZWlnaHQoKS1vLnksby55KSk7cmV0dXJuIHRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZSE9bnVsbCYmdGhpcy5pbm5lclJhZGl1cygpLnNjYWxlLnJhbmdlKFswLGFdKSx0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUhPW51bGwmJnRoaXMub3V0ZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxhXSksdGhpc30sdC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTEpcmV0dXJuIFZ2LldpbmRvdy53YXJuKCJPbmx5IG9uZSBkYXRhc2V0IGlzIHN1cHBvcnRlZCBpbiBQaWUgcGxvdHMiKSx0aGlzO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLGUucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxyKTt2YXIgbj1uZXcgZ1VlLkFyY091dGxpbmVTVkdEcmF3ZXI7cmV0dXJuIHRoaXMuX2lzU2V0dXAmJm4uYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZGVsZXRlKHIpLHRoaXMuX3N0YXJ0QW5nbGVzPVtdLHRoaXMuX2VuZEFuZ2xlcz1bXSx0aGlzfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT1lLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxyKS5ub2RlcygpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fc3Ryb2tlRHJhd2Vycy5nZXQobyk7YSE9bnVsbCYmaS5wdXNoLmFwcGx5KGksYS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSksdjQuc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9VZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgbVVlLkFyY1NWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4geVVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFBpZSBQbG90ISIpLG51bGx9KX0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpO3ZhciBpPWUucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7by5wb3NpdGlvbi54Kz1uLndpZHRoKCkvMixvLnBvc2l0aW9uLnkrPW4uaGVpZ2h0KCkvMjt2YXIgYT12NC5zZWxlY3Qobi5fc3Ryb2tlRHJhd2Vycy5nZXQoby5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KG8uaW5kZXgpKSxzPW87cmV0dXJuIHMuc3Ryb2tlU2VsZWN0aW9uPWEsc30pfSx0LnByb3RvdHlwZS5zZWN0b3JWYWx1ZT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1NFQ1RPUl9WQUxVRV9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fU0VDVE9SX1ZBTFVFX0tFWSxyLG4pLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmlubmVyUmFkaXVzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fSU5ORVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9JTk5FUl9SQURJVVNfS0VZLHIsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9PVVRFUl9SQURJVVNfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KHQuX09VVEVSX1JBRElVU19LRVkscixuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YXJ0QW5nbGU6KHRoaXMuX3N0YXJ0QW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbmRBbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9lbmRBbmdsZToodGhpcy5fZW5kQW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXt4OnRoaXMud2lkdGgoKS8yLHk6dGhpcy5oZWlnaHQoKS8yfSxpPXt4OnIueC1uLngseTpyLnktbi55fSxvPXRoaXMuX3NsaWNlSW5kZXhGb3JQb2ludChpKTtyZXR1cm4gbz09bnVsbD9bXTpbdGhpcy5lbnRpdGllcygpW29dXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksaT1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLG89TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKTtyZXR1cm4gbi5kPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdjQuYXJjKCkuaW5uZXJSYWRpdXMoaShhLHMsbCkpLm91dGVyUmFkaXVzKG8oYSxzLGwpKS5zdGFydEFuZ2xlKHIuX3N0YXJ0QW5nbGVzW3NdKS5lbmRBbmdsZShyLl9lbmRBbmdsZXNbc10pKGEscyl9LG59LHQucHJvdG90eXBlLl91cGRhdGVQaWVBbmdsZXM9ZnVuY3Rpb24oKXtpZih0aGlzLnNlY3RvclZhbHVlKCkhPW51bGwmJnRoaXMuZGF0YXNldHMoKS5sZW5ndGghPT0wKXt2YXIgcj1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChuKSxvPXY0LnBpZSgpLnNvcnQobnVsbCkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkudmFsdWUoZnVuY3Rpb24oYSxzKXtyZXR1cm4gcihhLHMsbil9KShpKTt0aGlzLl9zdGFydEFuZ2xlcz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5zdGFydEFuZ2xlfSksdGhpcy5fZW5kQW5nbGVzPW8ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmVuZEFuZ2xlfSl9fSx0LnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLG49dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLGk9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxhPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbCxjLHUsaDtyZXR1cm4gaT49MCYmYT49MD9vPj0wJiZzPj0wPyhsPW8sYz0wLGg9MCx1PWEpOm88MCYmczwwPyhsPTAsYz0tcyxoPTAsdT1pKTpvPj0wJiZzPDA/KGw9byxjPS1zLGg9MCx1PWkpOm88MCYmcz49MCYmKGw9MSxjPTEsaD0xLHU9TWF0aC5tYXgoaSxhKSk6aT49MCYmYTwwP28+PTAmJnM+PTA/KGw9TWF0aC5tYXgobyxzKSxjPTEsaD0xLHU9MSk6bzwwJiZzPDA/KGw9MCxjPTEsaD0tYSx1PWkpOm8+PTAmJnM8MD8obD1vLGM9MSxoPS1hLHU9MSk6bzwwJiZzPj0wJiYobD1zLGM9MSxoPTEsdT1pKTppPDAmJmE+PTA/bz49MCYmcz49MD8obD0xLGM9MCxoPS1pLHU9YSk6bzwwJiZzPDA/KGw9MSxjPU1hdGgubWF4KC1vLC1zKSxoPTEsdT0xKTpvPj0wJiZzPDA/KGw9MSxjPS1zLGg9LWksdT0xKTpvPDAmJnM+PTAmJihsPTEsYz0tbyxoPTEsdT1hKTppPDAmJmE8MCYmKG8+PTAmJnM+PTA/KGw9cyxjPTAsaD0taSx1PTApOm88MCYmczwwPyhsPTAsYz0tbyxoPS1hLHU9MCk6bz49MCYmczwwPyhsPTEsYz0xLGg9TWF0aC5tYXgobywtcyksdT0xKTpvPDAmJnM+PTAmJihsPXMsYz0tbyxoPTEsdT0wKSkse3g6aCt1PT0wPzA6aC8oaCt1KSp0aGlzLndpZHRoKCkseTpsK2M9PTA/MDpsLyhsK2MpKnRoaXMuaGVpZ2h0KCl9fSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyk7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTApcmV0dXJuIHI7dmFyIG49TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKSxpPXRoaXMuZGF0YXNldHMoKVswXSxvPXIuZ2V0KGkpLGE9by5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gdC5faXNWYWxpZERhdGEobihzLGwsaSkpfSk7cmV0dXJuIHIuc2V0KGksYSkscn0sdC5faXNWYWxpZERhdGE9ZnVuY3Rpb24ocil7cmV0dXJuIFZ2Lk1hdGguaXNWYWxpZE51bWJlcihyKSYmcj49MH0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSk7aWYoIXQuX2lzVmFsaWREYXRhKG8ocixuLGkpKSlyZXR1cm57eDpOYU4seTpOYU59O3ZhciBhPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkocixuLGkpLHM9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShyLG4saSksbD0oYStzKS8yLGM9djQucGllKCkuc29ydChudWxsKS52YWx1ZShmdW5jdGlvbihwLGQpe3ZhciBnPW8ocCxkLGkpO3JldHVybiB0Ll9pc1ZhbGlkRGF0YShnKT9nOjB9KS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKShpLmRhdGEoKSksdT1jW25dLnN0YXJ0QW5nbGUsaD1jW25dLmVuZEFuZ2xlLGY9KHUraCkvMjtyZXR1cm57eDpsKk1hdGguc2luKGYpLHk6LWwqTWF0aC5jb3MoZil9fSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3QoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmVnYuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKTt2YXIgaT10aGlzLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcygpLG89dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPU1kLlBsb3QuYXBwbHlEcmF3U3RlcHMoaSxhKTtuLl9zdHJva2VEcmF3ZXJzLmdldChhKS5kcmF3KG8uZ2V0KGEpLHMpfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVyblt7YXR0clRvUHJvamVjdG9yOnIsYW5pbWF0b3I6bmV3IGZVZS5OdWxsfV19LHQucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24ocil7dmFyIG49TWF0aC5zcXJ0KE1hdGgucG93KHIueCwyKStNYXRoLnBvdyhyLnksMikpLGk9TWF0aC5hY29zKC1yLnkvbik7ci54PDAmJihpPU1hdGguUEkqMi1pKTtmb3IodmFyIG8sYT0wO2E8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO2ErKylpZih0aGlzLl9zdGFydEFuZ2xlc1thXTxpJiZ0aGlzLl9lbmRBbmdsZXNbYV0+aSl7bz1hO2JyZWFrfWlmKG8hPT12b2lkIDApe3ZhciBzPXRoaXMuZGF0YXNldHMoKVswXSxsPXMuZGF0YSgpW29dLGM9dGhpcy5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGwsbyxzKSx1PXRoaXMub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihsLG8scyk7aWYobj5jJiZuPHUpcmV0dXJuIG99cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLG89bmV3IFJhdC5TdmdDb250ZXh0KGkubm9kZSgpKSxhPW5ldyBSYXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBSYXQuV3JpdGVyKGEsbyksbD10aGlzLmRhdGFzZXRzKClbMF0sYz10aGlzLl9nZXREYXRhVG9EcmF3KCkuZ2V0KGwpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihkKXt2YXIgZz1jW2RdLF89Zi5zZWN0b3JWYWx1ZSgpLmFjY2Vzc29yKGcsZCxsKTtpZighVnYuTWF0aC5pc1ZhbGlkTnVtYmVyKF8pKXJldHVybiJjb250aW51ZSI7Xz1mLl9sYWJlbEZvcm1hdHRlcihfLGcsZCxsKTt2YXIgeT1hLm1lYXN1cmUoXykseD0oZi5fZW5kQW5nbGVzW2RdK2YuX3N0YXJ0QW5nbGVzW2RdKS8yLGI9Zi5vdXRlclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLm91dGVyUmFkaXVzKCkuc2NhbGUmJihiPWYub3V0ZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShiKSk7dmFyIFM9Zi5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLmlubmVyUmFkaXVzKCkuc2NhbGUmJihTPWYuaW5uZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShTKSk7dmFyIEM9KGIrUykvMixQPU1hdGguc2luKHgpKkMteS53aWR0aC8yLGs9LU1hdGguY29zKHgpKkMteS5oZWlnaHQvMixPPVt7eDpQLHk6a30se3g6UCx5OmsreS5oZWlnaHR9LHt4OlAreS53aWR0aCx5Omt9LHt4OlAreS53aWR0aCx5OmsreS5oZWlnaHR9XSxEPU8uZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIE1hdGguYWJzKHoueCk8PXIud2lkdGgoKS8yJiZNYXRoLmFicyh6LnkpPD1yLmhlaWdodCgpLzJ9KTtpZihEKXt2YXIgQj1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gci5fc2xpY2VJbmRleEZvclBvaW50KHopfSk7RD1CLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiB6PT09ZH0pfXZhciBJPW4uZmlsbChnLGQsbCksTD1Wdi5Db2xvci5jb250cmFzdCgid2hpdGUiLEkpKjEuNjxWdi5Db2xvci5jb250cmFzdCgiYmxhY2siLEkpLFI9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitrKyIpIiksRj1MPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiO1IuY2xhc3NlZChGLCEwKSxSLnN0eWxlKCJ2aXNpYmlsaXR5IixEPyJpbmhlcml0IjoiaGlkZGVuIikscy53cml0ZShfLHkud2lkdGgseS5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LFIubm9kZSgpKX0sZj10aGlzLHA9MDtwPHU7cCsrKWgocCl9LHQuX0lOTkVSX1JBRElVU19LRVk9ImlubmVyLXJhZGl1cyIsdC5fT1VURVJfUkFESVVTX0tFWT0ib3V0ZXItcmFkaXVzIix0Ll9TRUNUT1JfVkFMVUVfS0VZPSJzZWN0b3ItdmFsdWUiLHR9KE1kLlBsb3QpO05hdC5QaWU9dlVlfSk7dmFyIE1LdD1IKE9hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeFVlPShkZSgpLFV0KHBlKSksYlVlPShFcigpLFV0KE1yKSksRGF0PV9sKCksd1VlPUxmKCksU1VlPUJ2KCksTVVlPVV1KCksRVVlPW9CKCksZkI9a3MoKSxPYz1GZSgpLHBCPXJzKCksVFVlPUh2KCksQ1VlPWZ1bmN0aW9uKGUpe3hVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9sYWJlbHNFbmFibGVkPSExLHIuX2xhYmVsPW51bGwsci5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IHdVZS5OdWxsKSxyLmFkZENsYXNzKCJyZWN0YW5nbGUtcGxvdCIpLHIuYXR0cigiZmlsbCIsbmV3IGZCLkNvbG9yKCkucmFuZ2UoKVswXSkscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgTVVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFVWUuUmVjdGFuZ2xlU1ZHRHJhd2VyfSxmdW5jdGlvbihyKXtyZXR1cm4gbmV3IFNVZS5SZWN0YW5nbGVDYW52YXNEcmF3ZXIocil9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLG89blt0Ll9YMl9LRVldLGE9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9blt0Ll9ZMl9LRVldLGw9dGhpcy54KCkuc2NhbGUsYz10aGlzLnkoKS5zY2FsZTtyZXR1cm4gbyE9bnVsbD8obi53aWR0aD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKG8odSxoLGYpLWkodSxoLGYpKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5taW4obyh1LGgsZiksaSh1LGgsZikpfSk6KG4ud2lkdGg9ZnVuY3Rpb24odSxoLGYpe3JldHVybiByLl9yZWN0YW5nbGVXaWR0aChsKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaSh1LGgsZiktLjUqbi53aWR0aCh1LGgsZil9KSxzIT1udWxsPyhuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKHModSxoLGYpLWEodSxoLGYpKX0sbi55PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5tYXgocyh1LGgsZiksYSh1LGgsZikpLW4uaGVpZ2h0KHUsaCxmKX0pOihuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIHIuX3JlY3RhbmdsZVdpZHRoKGMpfSxuLnk9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBhKHUsaCxmKS0uNSpuLmhlaWdodCh1LGgsZil9KSxkZWxldGUgblt0Ll9YMl9LRVldLGRlbGV0ZSBuW3QuX1kyX0tFWV0sbn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoInJlY3RhbmdsZXMiKX1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpO2lmKG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLG4hPW51bGwpe3ZhciBvPXRoaXMueDIoKSxhPW8mJm8uYWNjZXNzb3I7YSE9bnVsbCYmdGhpcy5fYmluZFByb3BlcnR5KHQuX1gyX0tFWSxhLG4sby5wb3N0U2NhbGUpfXJldHVybiBuIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkmJm4uaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKSx0aGlzfSx0LnByb3RvdHlwZS54Mj1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1gyX0tFWSk7dmFyIGk9dGhpcy54KCksbz1pJiZpLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLHIsbyxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbixpKSxuIT1udWxsKXt2YXIgbz10aGlzLnkyKCksYT1vJiZvLmFjY2Vzc29yO2EhPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMl9LRVksYSxuLG8ucG9zdFNjYWxlKX1yZXR1cm4gbiBpbnN0YW5jZW9mIGZCLkNhdGVnb3J5JiZuLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sdC5wcm90b3R5cGUueTI9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9ZMl9LRVkpO3ZhciBpPXRoaXMueSgpLG89aSYmaS5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxyLG8sbiksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0dW0sYT1pLmluZGV4LHM9aS5kYXRhc2V0LGw9bi54KG8sYSxzKSxjPW4ueShvLGEscyksdT1uLndpZHRoKG8sYSxzKSxoPW4uaGVpZ2h0KG8sYSxzKTtyZXR1cm4gbDw9ci54JiZyLng8PWwrdSYmYzw9ci55JiZyLnk8PWMraH0pfSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0O3JldHVybiB0aGlzLl9lbnRpdHlCQm94KG4saSxvLHRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpKX0sdC5wcm90b3R5cGUuX2VudGl0eUJCb3g9ZnVuY3Rpb24ocixuLGksbyl7cmV0dXJue3g6by54KHIsbixpKSx5Om8ueShyLG4saSksd2lkdGg6by53aWR0aChyLG4saSksaGVpZ2h0Om8uaGVpZ2h0KHIsbixpKX19LHQucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsOih0aGlzLl9sYWJlbD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMueDIoKSE9bnVsbCYmKHIueDI9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSksdGhpcy55MigpIT1udWxsJiYoci55Mj1wQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT1vLngocixuLGkpLHM9by55KHIsbixpKSxsPW8ud2lkdGgocixuLGkpLGM9by5oZWlnaHQocixuLGkpLHU9YStsLzIsaD1zK2MvMjtyZXR1cm57eDp1LHk6aH19LHQucHJvdG90eXBlLl9yZWN0YW5nbGVXaWR0aD1mdW5jdGlvbihyKXtpZihyIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkpcmV0dXJuIHIucmFuZ2VCYW5kKCk7dmFyIG49cj09PXRoaXMueCgpLnNjYWxlP3RoaXMueCgpLmFjY2Vzc29yOnRoaXMueSgpLmFjY2Vzc29yLGk9YlVlLnNldChPYy5BcnJheS5mbGF0dGVuKHRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGF0YSgpLm1hcChmdW5jdGlvbih1LGgpe3JldHVybiBuKHUsaCxjKS52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybitjfSksbz1PYy5NYXRoLm1pbihpLDApLGE9T2MuTWF0aC5tYXgoaSwwKSxzPXIuc2NhbGUobyksbD1yLnNjYWxlKGEpO3JldHVybihsLXMpL01hdGguYWJzKGEtbyl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IE9jLk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgbD1PYy5NYXRoLmlzVmFsaWROdW1iZXIobi54KGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLnkoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4ud2lkdGgoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4uaGVpZ2h0KGEscyxpKSk7cmV0dXJuIGw/YTpudWxsfSk7ci5zZXQoaSxvKX0pLHJ9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZ0aGlzLmxhYmVsKCkhPW51bGwmJk9jLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpLG8pe3JldHVybiByLl9kcmF3TGFiZWwobixpLG8pfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGkpe2Zvcih2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLHM9bmV3IERhdC5TdmdDb250ZXh0KGEubm9kZSgpKSxsPW5ldyBEYXQuQ2FjaGVNZWFzdXJlcihzKSxjPW5ldyBEYXQuV3JpdGVyKGwscyksdT10aGlzLngoKS5zY2FsZS5yYW5nZSgpLGg9dGhpcy55KCkuc2NhbGUucmFuZ2UoKSxmPU1hdGgubWluLmFwcGx5KG51bGwsdSkscD1NYXRoLm1heC5hcHBseShudWxsLHUpLGQ9TWF0aC5taW4uYXBwbHkobnVsbCxoKSxnPU1hdGgubWF4LmFwcGx5KG51bGwsaCksXz1yLmdldChuKSx5PV8ubGVuZ3RoLHg9MDt4PHk7eCsrKXt2YXIgYj1fW3hdO2lmKGIhPW51bGwpe3ZhciBTPSIiK3RoaXMubGFiZWwoKShiLHgsbiksQz1sLm1lYXN1cmUoUyksUD1vLngoYix4LG4pLGs9by55KGIseCxuKSxPPW8ud2lkdGgoYix4LG4pLEQ9by5oZWlnaHQoYix4LG4pO2lmKEMuaGVpZ2h0PD1EJiZDLndpZHRoPD1PKXt2YXIgQj0oTy1DLndpZHRoKS8yLEk9KEQtQy5oZWlnaHQpLzI7UCs9QixrKz1JO3ZhciBMPXttaW46UCxtYXg6UCtDLndpZHRofSxSPXttaW46ayxtYXg6aytDLmhlaWdodH07aWYoTC5taW48Znx8TC5tYXg+cHx8Ui5taW48ZHx8Ui5tYXg+Z3x8dGhpcy5fb3ZlcmxheUxhYmVsKEwsUix4LGkscikpY29udGludWU7dmFyIEY9by5maWxsKGIseCxuKSx6PU9jLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsRikqMS42PE9jLkNvbG9yLmNvbnRyYXN0KCJibGFjayIsRiksVT1hLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1ArIiwiK2srIikiKSxXPXo/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCI7VS5jbGFzc2VkKFcsITApLGMud3JpdGUoUyxDLndpZHRoLEMuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxVLm5vZGUoKSl9fX19LHQucHJvdG90eXBlLl9vdmVybGF5TGFiZWw9ZnVuY3Rpb24ocixuLGksbyxhKXtmb3IodmFyIHM9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbD10aGlzLmRhdGFzZXRzKCksYz1vO2M8bC5sZW5ndGg7YysrKWZvcih2YXIgdT1sW2NdLGg9YS5nZXQodSksZj1oLmxlbmd0aCxwPWM9PT1vP2krMTowO3A8ZjtwKyspaWYoT2MuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCQm94KGhbcF0scCx1LHMpKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5fWDJfS0VZPSJ4MiIsdC5fWTJfS0VZPSJ5MiIsdH0oVFVlLlhZUGxvdCk7T2F0LlJlY3RhbmdsZT1DVWV9KTt2YXIgVEt0PUgoSGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBVWU9KGRlKCksVXQocGUpKSx6YXQ9X2woKSxQVWU9QnUoKSxJVWU9WEYoKSxMVWU9VXUoKSxFS3Q9dmF0KCksa1VlPUxmKCksUlVlPUJ2KCksTlVlPWtzKCksRmF0PUZlKCksQmF0PUlTKCksYmw9cnMoKSxEVWU9SHYoKSxPVWU9ZnVuY3Rpb24oZSl7QVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fbGFiZWxGb3JtYXR0ZXI9UFVlLmlkZW50aXR5KCksci5fbGFiZWxzRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJzY2F0dGVyLXBsb3QiKTt2YXIgbj1uZXcga1VlLkVhc2luZztuLnN0YXJ0RGVsYXkoNSksbi5zdGVwRHVyYXRpb24oMjUwKSxuLm1heFRvdGFsRHVyYXRpb24oYmwuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksci5hbmltYXRvcihCYXQuQW5pbWF0b3IuTUFJTixuKSxyLmF0dHIoIm9wYWNpdHkiLC42KSxyLmF0dHIoImZpbGwiLG5ldyBOVWUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLnNpemUoNik7dmFyIGk9SVVlLmNpcmNsZSgpO3JldHVybiByLnN5bWJvbChmdW5jdGlvbigpe3JldHVybiBpfSksci5fbGFiZWxDb25maWc9bmV3IEZhdC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWUucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7dmFyIGE9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpKG8uZGF0dW0sby5pbmRleCxvLmRhdGFzZXQpO3JldHVybiBvLmRpYW1ldGVyPWEsb30pfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBMVWUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVLdC5TeW1ib2xTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgUlVlLkNhbnZhc0RyYXdlcihpLEVLdC5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXAocixmdW5jdGlvbigpe3JldHVybiBibC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLnN5bWJvbCgpKX0sZnVuY3Rpb24oKXtyZXR1cm4gYmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpfSkpfSl9LHQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9TSVpFX0tFWSxyLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQodC5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6cn0pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKTtuLmQ9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpKG8sYSxzKSgwKShudWxsKX0sci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihCYXQuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEJhdC5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHIueD1uLHIueT1pLHIudHJhbnNmb3JtPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4idHJhbnNsYXRlKCIrbihvLGEscykrIiwiK2kobyxhLHMpKyIpIn0sci5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLHJ9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgcj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKSxuPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3JldHVybiByKGksbyxhKShuKGksbyxhKSkobnVsbCl9fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3JldHVybnt4OnIucG9zaXRpb24ueC1yLmRpYW1ldGVyLzIseTpyLnBvc2l0aW9uLnktci5kaWFtZXRlci8yLHdpZHRoOnIuZGlhbWV0ZXIsaGVpZ2h0OnIuZGlhbWV0ZXJ9fSx0LnByb3RvdHlwZS5fZW50aXR5VmlzaWJsZU9uUGxvdD1mdW5jdGlvbihyLG4pe3ZhciBpPXttaW46bi50b3BMZWZ0LngsbWF4Om4uYm90dG9tUmlnaHQueH0sbz17bWluOm4udG9wTGVmdC55LG1heDpuLmJvdHRvbVJpZ2h0Lnl9LGE9dGhpcy5fZW50aXR5Qm91bmRzKHIpO3JldHVybiBGYXQuRE9NLmludGVyc2VjdHNCQm94KGksbyxhKX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSk7cmV0dXJuIHRoaXMuZW50aXRpZXMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIHM9YS5kYXR1bSxsPWEuaW5kZXgsYz1hLmRhdGFzZXQsdT1uKHMsbCxjKSxoPWkocyxsLGMpLGY9byhzLGwsYyk7cmV0dXJuIHUtZi8yPD1yLngmJnIueDw9dStmLzImJmgtZi8yPD1yLnkmJnIueTw9aCtmLzJ9KX0sdC5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsciksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fTEFCRUxfQVJFQV9DTEFTUywhMCksbz1uZXcgemF0LlN2Z0NvbnRleHQoaS5ub2RlKCkpLGE9bmV3IHphdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IHphdC5Xcml0ZXIoYSxvKTtyZXR1cm4gdGhpcy5fbGFiZWxDb25maWcuc2V0KHIse2xhYmVsQXJlYTppLG1lYXN1cmVyOmEsd3JpdGVyOnN9KSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xhYmVsQ29uZmlnLmdldChyKTtuIT1udWxsJiYobi5sYWJlbEFyZWEucmVtb3ZlKCksdGhpcy5fbGFiZWxDb25maWcuZGVsZXRlKHIpKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQoaSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmRmF0LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2Zvcih2YXIgYT1uLmdldChvKSxzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1hW2xdO2MhPW51bGwmJnIuX2RyYXdMYWJlbChjLGwsbyxpKX19KX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbihyLG4saSxvKXtpZihyLmxhYmVsIT1udWxsKXt2YXIgYT10aGlzLl9sYWJlbENvbmZpZy5nZXQoaSkscz1hLmxhYmVsQXJlYSxsPWEubWVhc3VyZXIsYz1hLndyaXRlcix1PXt4Om8ueChyLG4saSkseTpvLnkocixuLGkpfSxoPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKSxmPWgocixuLGkpLHA9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoci5sYWJlbCxyLG4saSksZD1sLm1lYXN1cmUocCksZz10aGlzLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXModSxmLGQpLF89Zy5jb250YWluZXJEaW1lbnNpb25zLHk9Zy5sYWJlbENvbnRhaW5lck9yaWdpbix4PWcubGFiZWxPcmlnaW4sYj1nLmFsaWdubWVudCxTPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMseSx4LGQpLEM9e3hBbGlnbjpiLngseUFsaWduOmIueX07Yy53cml0ZShwLF8ud2lkdGgsXy5oZWlnaHQsQyxTLm5vZGUoKSl9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1uPGkuaGVpZ2h0P24vMit0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU6MDtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnIueC1pLndpZHRoLzIseTpyLnktaS5oZWlnaHQvMitvfSxsYWJlbE9yaWdpbjp7eDpyLngseTpyLnl9LGFsaWdubWVudDp7eDoiY2VudGVyIix5OiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT1yLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ueCsiLCAiK24ueSsiKSIpO3JldHVybiBhLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApLGF9LHQuX1NJWkVfS0VZPSJzaXplIix0Ll9TWU1CT0xfS0VZPSJzeW1ib2wiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9InNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIix0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU9MTUsdH0oRFVlLlhZUGxvdCk7SGF0LlNjYXR0ZXI9T1VlfSk7dmFyIENLdD1IKFZhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgelVlPShkZSgpLFV0KHBlKSksRlVlPUxmKCksQlVlPVV1KCksSFVlPV9hdCgpLFZVZT1rcygpLFVVZT1BRigpLExTPXJzKCkscVVlPUh2KCksR1VlPWZ1bmN0aW9uKGUpe3pVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJzZWdtZW50LXBsb3QiKSxyLmF0dHIoInN0cm9rZSIsbmV3IFZVZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgQlVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIVWUuU2VnbWVudFNWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gVVVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFNlZ21lbnQgUGxvdCEiKSxudWxsfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBGVWUuTnVsbH1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihuPT1udWxsKWUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpO2Vsc2V7ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKTt2YXIgaT10aGlzLngyKCksbz1pJiZpLmFjY2Vzc29yO28hPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVksbyxuKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueDI9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWDJfS0VZKTt2YXIgbj10aGlzLngoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVkscixpKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbCllLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTtlbHNle2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbik7dmFyIGk9dGhpcy55MigpLG89aSYmaS5hY2Nlc3NvcjtvIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLG8sbil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1kyX0tFWSk7dmFyIG49dGhpcy55KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLHIsaSksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLngxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyLngyPXRoaXMueDIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSxyLnkxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxyLnkyPXRoaXMueTIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdChyKTtyZXR1cm4gbiE9bnVsbD9bbl06W119LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaSxvO2lmKG49PW51bGwpe3ZhciBhPXI7aT17bWluOmEudG9wTGVmdC54LG1heDphLmJvdHRvbVJpZ2h0Lnh9LG89e21pbjphLnRvcExlZnQueSxtYXg6YS5ib3R0b21SaWdodC55fX1lbHNlIGk9cixvPW47cmV0dXJuIHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKGksbyl9LHQucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1bXSxvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9dGhpcy5lbnRpdGllcygpLHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWFbbF07dGhpcy5fbGluZUludGVyc2VjdHNCb3goYyxyLG4sbykmJmkucHVzaChjKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMscz1vLngxKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpLGw9by54MihyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KSxjPW8ueTEoci5kYXR1bSxyLmluZGV4LHIuZGF0YXNldCksdT1vLnkyKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpO2lmKG4ubWluPD1zJiZzPD1uLm1heCYmaS5taW48PWMmJmM8PWkubWF4fHxuLm1pbjw9bCYmbDw9bi5tYXgmJmkubWluPD11JiZ1PD1pLm1heClyZXR1cm4hMDt2YXIgaD17eDpzLHk6Y30sZj17eDpsLHk6dX0scD1be3g6bi5taW4seTppLm1pbn0se3g6bi5taW4seTppLm1heH0se3g6bi5tYXgseTppLm1heH0se3g6bi5tYXgseTppLm1pbn1dLGQ9cC5maWx0ZXIoZnVuY3Rpb24oZyxfKXtyZXR1cm4gXyE9PTA/YS5fbGluZUludGVyc2VjdHNTZWdtZW50KGgsZixnLHBbXy0xXSkmJmEuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChnLHBbXy0xXSxoLGYpOiExfSk7cmV0dXJuIGQubGVuZ3RoPjB9LHQucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQ9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9ZnVuY3Rpb24ocyxsLGMpe3JldHVybihsLngtcy54KSooYy55LWwueSktKGwueS1zLnkpKihjLngtbC54KX07cmV0dXJuIGEocixuLGkpKmEocixuLG8pPDB9LHQuX1gyX0tFWT0ieDIiLHQuX1kyX0tFWT0ieTIiLHR9KHFVZS5YWVBsb3QpO1ZhdC5TZWdtZW50PUdVZX0pO3ZhciBJS3Q9SChVYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdVZT0oZGUoKSxVdChwZSkpLEFLdD0oRXIoKSxVdChNcikpLFlVZT1MZigpLFBLdD1DUygpLHQwPUZlKCksalVlPVRhdCgpLFhVZT1ycygpLCRVZT1mdW5jdGlvbihlKXtXVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhY2tpbmdSZXN1bHQ9UEt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gci54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHIueSgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiByLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihuLGksbyxhKXtyZXR1cm4gdDAuU3RhY2tpbmcuc3RhY2sobixpLG8sYSl9KSxyLl9zdGFja2VkRXh0ZW50PVBLdC5tZW1UaHVuayhyLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiByLngoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gci5fZmlsdGVyRm9yUHJvcGVydHkoInkiKX0sZnVuY3Rpb24obixpLG8pe3JldHVybiB0MC5TdGFja2luZy5zdGFja2VkRXh0ZW50KG4saSxvKX0pLHIuX2Jhc2VsaW5lVmFsdWU9MCxyLl9zdGFja2luZ09yZGVyPSJib3R0b211cCIsci5hZGRDbGFzcygic3RhY2tlZC1hcmVhLXBsb3QiKSxyLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bci5fYmFzZWxpbmVWYWx1ZV19LHIuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6cj8odDAuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgY3JvcHBlZCByZW5kZXJpbmcuIiksdGhpcyk6ZS5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBZVWUuTnVsbH0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuKSx0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0aGlzKX0sdC5wcm90b3R5cGUueU9mZnNldD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7aWYoaSE9bnVsbCl7dmFyIG89aS5nZXQocik7aWYobyE9bnVsbCl7dmFyIGE9by5nZXQoU3RyaW5nKG4pKTtpZihhIT1udWxsKXJldHVybiBhLm9mZnNldH19fSx0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YWNraW5nT3JkZXI6KHRoaXMuX3N0YWNraW5nT3JkZXI9cix0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkLmNhbGwodGhpcyk6KHQwLldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGRvd25zYW1wbGluZyIpLHRoaXMpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCkuc2NhbGUuc2NhbGUodGhpcy5fYmFzZWxpbmVWYWx1ZSksbj17eDE6MCx5MTpyLHgyOnRoaXMud2lkdGgoKSx5MjpyfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLG4pfSx0LnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCksbj1yJiZyLnNjYWxlO24hPW51bGwmJihuLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSxuLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgcj10aGlzLmRhdGFzZXRzKCksbj10aGlzLngoKS5hY2Nlc3NvcixpPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBBS3Quc2V0KGEuZGF0YSgpLm1hcChmdW5jdGlvbihzLGwpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobihzLGwsYSkpfSkpLnZhbHVlcygpfSksbz10Ll9kb21haW5LZXlzKHIsbik7aS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PW8ubGVuZ3RofSkmJnQwLldpbmRvdy53YXJuKCJ0aGUgZG9tYWlucyBhY3Jvc3MgdGhlIGRhdGFzZXRzIGFyZSBub3QgdGhlIHNhbWUuIFBsb3QgbWF5IHByb2R1Y2UgdW5pbnRlbmRlZCBiZWhhdmlvci4iKX19LHQuX2RvbWFpbktleXM9ZnVuY3Rpb24ocixuKXt2YXIgaT1BS3Quc2V0KCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvKXtmb3IodmFyIGE9by5kYXRhKCkscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtpLmFkZChuKGMsbCxvKSl9fSksaS52YWx1ZXMoKX0sdC5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPVhVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT10aGlzLnkoKS5hY2Nlc3NvcixvPXRoaXMueCgpLmFjY2Vzc29yLGE9ZnVuY3Rpb24odSxoLGYpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobyh1LGgsZikpfSxzPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksbD1mdW5jdGlvbih1LGgsZil7dmFyIHA9K2kodSxoLGYpLGQ9cy5nZXQoZikuZ2V0KGEodSxoLGYpKS5vZmZzZXQ7cmV0dXJuIHIueSgpLnNjYWxlLnNjYWxlKHArZCl9LGM9ZnVuY3Rpb24odSxoLGYpe3ZhciBwPXMuZ2V0KGYpLmdldChhKHUsaCxmKSkub2Zmc2V0O3JldHVybiByLnkoKS5zY2FsZS5zY2FsZShwKX07cmV0dXJuW24sbCxjXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89ZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQuY2FsbCh0aGlzLHIsbixpKSxhPXRoaXMueCgpLmFjY2Vzc29yKHIsbixpKSxzPXRoaXMueSgpLmFjY2Vzc29yKHIsbixpKSxsPXRoaXMueSgpLnNjYWxlLnNjYWxlKCtzK3RoaXMuX3N0YWNraW5nUmVzdWx0KCkuZ2V0KGkpLmdldCh0MC5TdGFja2luZy5ub3JtYWxpemVLZXkoYSkpLm9mZnNldCk7cmV0dXJue3g6by54LHk6bH19LHR9KGpVZS5BcmVhKTtVYXQuU3RhY2tlZEFyZWE9JFVlfSk7dmFyIGtLdD1IKFdhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS1VlPShkZSgpLFV0KHBlKSkscWF0PV9sKCksWlVlPUJ1KCksTEt0PUNTKCksZEI9RmUoKSxHYXQ9eTQoKSxKVWU9cnMoKSxRVWU9ZnVuY3Rpb24oZSl7S1VlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2V4dHJlbWFGb3JtYXR0ZXI9WlVlLmlkZW50aXR5KCksbi5fc3RhY2tpbmdSZXN1bHQ9TEt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihpLG8sYSxzKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2soaSxvLGEscyl9KSxuLl9zdGFja2VkRXh0ZW50PUxLdC5tZW1UaHVuayhuLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiBuLnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KG4uX2lzVmVydGljYWw/InkiOiJ4Iil9LGZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChpLG8sYSl9KSxuLmFkZENsYXNzKCJzdGFja2VkLWJhci1wbG90Iiksbi5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiLG59cmV0dXJuIHQucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc3RhY2tpbmdPcmRlcjoodGhpcy5fc3RhY2tpbmdPcmRlcj1yLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5leHRyZW1hRm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9leHRyZW1hRm9ybWF0dGVyOih0aGlzLl9leHRyZW1hRm9ybWF0dGVyPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChHYXQuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgcj1uZXcgcWF0LlN2Z0NvbnRleHQodGhpcy5fbGFiZWxBcmVhLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IHFhdC5DYWNoZU1lYXN1cmVyKHIpLHRoaXMuX3dyaXRlcj1uZXcgcWF0LldyaXRlcih0aGlzLl9tZWFzdXJlcixyKX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9kcmF3TGFiZWxzLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBuPSt0aGlzLmJhc2VsaW5lVmFsdWUoKSxpPXRoaXMucG9zaXRpb24oKS5zY2FsZSxvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT1kQi5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxzPWEubWF4aW11bUV4dGVudHMsbD1hLm1pbmltdW1FeHRlbnRzLGM9W10sdT1mdW5jdGlvbihmLHAsZCl7dmFyIGc9cC50b3BMZWZ0LF89Zy54LHk9Zy55LHg9cC5ib3R0b21SaWdodC54LXAudG9wTGVmdC54LGI9cC5ib3R0b21SaWdodC55LXAudG9wTGVmdC55LFM9ci5faXNWZXJ0aWNhbD94PmQ6Yj5kO2lmKCFTKXt2YXIgQz1yLl9sYWJlbEFyZWEuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiLCAiK3krIikiKTtDLmNsYXNzZWQoInN0YWNrZWQtYmFyLWxhYmVsIiwhMCk7dmFyIFA9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9O3IuX3dyaXRlci53cml0ZShmLHgsYixQLEMubm9kZSgpKX1yZXR1cm4gU30saD1mdW5jdGlvbihmLHApe3ZhciBkPXIuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCksZz1yLndpZHRoKCksXz1yLmhlaWdodCgpO2YuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LmV4dGVudCE9PW4pe3ZhciB4PXIuZXh0cmVtYUZvcm1hdHRlcigpKHkuZXh0ZW50KSxiPXIuX21lYXN1cmVyLm1lYXN1cmUoeCksUz15LnN0YWNrZWREYXR1bSxDPVMub3JpZ2luYWxEYXR1bSxQPVMub3JpZ2luYWxJbmRleCxrPVMub3JpZ2luYWxEYXRhc2V0O2lmKCFyLl9pc0RhdHVtT25TY3JlZW4oZCxnLF8sQyxQLGspKXJldHVybjt2YXIgTz1KVWUuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci5hdHRyKEdhdC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSkoQyxQLGspLEQ9by5zY2FsZSh5LmV4dGVudCksQj1yLl9nZXRQb3NpdGlvbkF0dHIoaS5zY2FsZSh5LmF4aXNWYWx1ZSksTykrTy8yLEk9ci5faXNWZXJ0aWNhbD97eDpCLHk6RH06e3g6RCx5OkJ9LEw9cChJLGIsTyksUj11KHgse3RvcExlZnQ6TCxib3R0b21SaWdodDp7eDpMLngrYi53aWR0aCx5OkwueStiLmhlaWdodH19LE8pO2MucHVzaChSKX19KX07aChzLGZ1bmN0aW9uKGYscCxkKXt2YXIgZz1yLl9pc1ZlcnRpY2FsP3Aud2lkdGg6cC5oZWlnaHQsXz1yLl9pc1ZlcnRpY2FsP3AuaGVpZ2h0OnAud2lkdGg7cmV0dXJue3g6ci5faXNWZXJ0aWNhbD9mLngtZy8yOmYueCt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5OnIuX2lzVmVydGljYWw/Zi55LV86Zi55LWcvMn19KSxoKGwsZnVuY3Rpb24oZixwLGQpe3ZhciBnPXIuX2lzVmVydGljYWw/cC53aWR0aDpwLmhlaWdodCxfPXIuX2lzVmVydGljYWw/cC5oZWlnaHQ6cC53aWR0aDtyZXR1cm57eDpyLl9pc1ZlcnRpY2FsP2YueC1nLzI6Zi54LV8seTpyLl9pc1ZlcnRpY2FsP2YueSt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUjpmLnktZy8yfX0pLGMuc29tZShmdW5jdGlvbihmKXtyZXR1cm4gZn0pJiZ0aGlzLl9sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IixvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLHM9dGhpcy5wb3NpdGlvbigpLmFjY2Vzc29yLGw9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBkQi5TdGFja2luZy5ub3JtYWxpemVLZXkocyhkLGcsXykpfSxjPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIG8uc2NhbGUoYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxoPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gby5zY2FsZSgrYShkLGcsXykrYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxmPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gTWF0aC5hYnMoaChkLGcsXyktdShkLGcsXykpfTtuW3RoaXMuX2lzVmVydGljYWw/ImhlaWdodCI6IndpZHRoIl09Zjt2YXIgcD1mdW5jdGlvbihkLGcsXyl7cmV0dXJuK2EoZCxnLF8pPDA/dShkLGcsXyk6aChkLGcsXyl9O3JldHVybiBuW2ldPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5faXNWZXJ0aWNhbD9wKGQsZyxfKTpwKGQsZyxfKS1mKGQsZyxfKX0sbn0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IjtyZXR1cm4gcj09PW4/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06ZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NSx0fShHYXQuQmFyKTtXYXQuU3RhY2tlZEJhcj1RVWV9KTt2YXIgUkt0PUgoWWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0cWU9KGRlKCksVXQocGUpKSxlcWU9RmUoKSxycWU9eTQoKSxucWU9cnMoKSxpcWU9ZnVuY3Rpb24oZSl7dHFlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2Nvbm5lY3RvcnNFbmFibGVkPSExLHIuYWRkQ2xhc3MoIndhdGVyZmFsbC1wbG90Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ6KHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkPXIsdGhpcyl9LHQucHJvdG90eXBlLnRvdGFsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1RPVEFMX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9UT1RBTF9LRVkscixudWxsKSx0aGlzKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuX2Nvbm5lY3RvckFyZWEuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQmJmVxZS5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3Q29ubmVjdG9ycygpfSxyKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKTtyZXR1cm4gdGhpcy5fY29ubmVjdG9yQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fQ09OTkVDVE9SX0FSRUFfQ0xBU1MsITApLG59LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9leHRlbnRdOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMueSgpLnNjYWxlLG89bnFlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMudG90YWwoKSksYT10aGlzLmF0dHIoInkiKTthPT1udWxsJiYobi55PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1yLnkoKS5hY2Nlc3NvcihsLGMsdSksZj1vKGwsYyx1KTtpZihmKXJldHVybiBNYXRoLm1pbihpLnNjYWxlKGgpLGkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gaDwwP2kuc2NhbGUocC1oKTppLnNjYWxlKHApO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBwPmQ/aS5zY2FsZShwKTppLnNjYWxlKGQpfSk7dmFyIHM9dGhpcy5hdHRyKCJoZWlnaHQiKTtyZXR1cm4gcz09bnVsbCYmKG4uaGVpZ2h0PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1vKGwsYyx1KSxmPXIueSgpLmFjY2Vzc29yKGwsYyx1KTtpZihoKXJldHVybiBNYXRoLmFicyhpLnNjYWxlKGYpLWkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShwKS1pLnNjYWxlKHAtZikpO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBNYXRoLmFicyhpLnNjYWxlKHApLWkuc2NhbGUoZCkpfSksbi5jbGFzcz1mdW5jdGlvbihsLGMsdSl7dmFyIGg9IiI7ci5hdHRyKCJjbGFzcyIpIT1udWxsJiYoaD1yLmF0dHIoImNsYXNzIikuYWNjZXNzb3IobCxjLHUpKyIgIik7dmFyIGY9byhsLGMsdSk7aWYoZilyZXR1cm4gaCt0Ll9CQVJfVE9UQUxfQ0xBU1M7dmFyIHA9ci55KCkuYWNjZXNzb3IobCxjLHUpO3JldHVybiBoKyhwPjA/dC5fQkFSX0dST1dUSF9DTEFTUzp0Ll9CQVJfREVDTElORV9DTEFTUyl9LG59LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3VidG90YWxzKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQ9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPU51bWJlci5NQVhfVkFMVUUsaT1OdW1iZXIuTUlOX1ZBTFVFLG89MCxhPSExLHM9ci5kYXRhKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXSxoPXRoaXMueSgpLmFjY2Vzc29yKHUsYyxyKSxmPXRoaXMudG90YWwoKS5hY2Nlc3Nvcih1LGMscik7aWYoKCFmfHxjPT09MCkmJihvKz1oKSx0aGlzLl9zdWJ0b3RhbHMucHVzaChvKSxvPG4mJihuPW8pLG8+aSYmKGk9byksZiYmKGg8biYmKG49aCksaD5pJiYoaT1oKSksIWEmJmYpe2Zvcih2YXIgcD1oLW8sZD0wO2Q8dGhpcy5fc3VidG90YWxzLmxlbmd0aDtkKyspdGhpcy5fc3VidG90YWxzW2RdKz1wO2E9ITAsbys9cCxuKz1wLGkrPXB9fXRoaXMuX2V4dGVudD1bbixpXX0sdC5wcm90b3R5cGUuX2RyYXdDb25uZWN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9MTtpPG4uZGF0YSgpLmxlbmd0aDtpKyspe3ZhciBvPWktMSxhPW4uZGF0YSgpW2ldLHM9bi5kYXRhKClbb10sbD1yLngocyxvLG4pLGM9ci54KGEsaSxuKStyLndpZHRoKGEsaSxuKSx1PXIueShhLGksbik7KHRoaXMuX3N1YnRvdGFsc1tpXT4wJiZ0aGlzLl9zdWJ0b3RhbHNbaV0+dGhpcy5fc3VidG90YWxzW29dfHx0aGlzLl9zdWJ0b3RhbHNbaV08MCYmdGhpcy5fc3VidG90YWxzW2ldPj10aGlzLl9zdWJ0b3RhbHNbb10pJiYodT1yLnkoYSxpLG4pK3IuaGVpZ2h0KGEsaSxuKSksdGhpcy5fY29ubmVjdG9yQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuX0NPTk5FQ1RPUl9DTEFTUywhMCkuYXR0cigieDEiLGwpLmF0dHIoIngyIixjKS5hdHRyKCJ5MSIsdSkuYXR0cigieTIiLHUpfX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN1YnRvdGFscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZGF0YXNldHMoKTtpZihyLmxlbmd0aD4wKXt2YXIgbj1yW3IubGVuZ3RoLTFdO3RoaXMuX3N1YnRvdGFscz1uZXcgQXJyYXksdGhpcy5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50KG4pfX0sdC5fQkFSX0RFQ0xJTkVfQ0xBU1M9IndhdGVyZmFsbC1kZWNsaW5lIix0Ll9CQVJfR1JPV1RIX0NMQVNTPSJ3YXRlcmZhbGwtZ3Jvd3RoIix0Ll9CQVJfVE9UQUxfQ0xBU1M9IndhdGVyZmFsbC10b3RhbCIsdC5fQ09OTkVDVE9SX0NMQVNTPSJjb25uZWN0b3IiLHQuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTPSJjb25uZWN0b3ItYXJlYSIsdC5fVE9UQUxfS0VZPSJ0b3RhbCIsdH0ocnFlLkJhcik7WWF0LldhdGVyZmFsbD1pcWV9KTt2YXIgSVM9SChPcz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT3MsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6Yz0oZGUoKSxVdChwZSkpO3pjLl9fZXhwb3J0U3RhcihUYXQoKSxPcyk7emMuX19leHBvcnRTdGFyKHk0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihHb3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHdLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoU2F0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihTS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKE1LdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoVEt0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihDS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKElLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoa0t0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihSS3QoKSxPcyl9KTt2YXIgTkt0PUgoamF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2phdC52ZXJzaW9uPSIzLjkuMCJ9KTt2YXIgd2w9SChsbj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGYz0oZGUoKSxVdChwZSkpOyRqdCgpO3ZhciBvcWU9TGYoKTtsbi5BbmltYXRvcnM9b3FlO3ZhciBhcWU9ZiR0KCk7bG4uQXhlcz1hcWU7dmFyIHNxZT1Qb3QoKTtsbi5Db21wb25lbnRzPXNxZTt2YXIgbHFlPSRBKCk7bG4uQ29uZmlncz1scWU7dmFyIGNxZT1CdSgpO2xuLkZvcm1hdHRlcnM9Y3FlO3ZhciB1cWU9SUYoKTtsbi5SZW5kZXJDb250cm9sbGVyPXVxZTt2YXIgaHFlPUhpdCgpO2xuLlJlbmRlclBvbGljaWVzPWhxZTt2YXIgZnFlPVhGKCk7bG4uU3ltYm9sRmFjdG9yaWVzPWZxZTt2YXIgcHFlPU52KCk7bG4uRGlzcGF0Y2hlcnM9cHFlO3ZhciBkcWU9QnYoKTtsbi5EcmF3ZXJzPWRxZTt2YXIgbXFlPWw0KCk7bG4uSW50ZXJhY3Rpb25zPW1xZTt2YXIgZ3FlPUlTKCk7bG4uUGxvdHM9Z3FlO3ZhciBfcWU9a3MoKTtsbi5TY2FsZXM9X3FlO3ZhciB5cWU9RmUoKTtsbi5VdGlscz15cWU7RmMuX19leHBvcnRTdGFyKHQ0KCksbG4pO3ZhciB2cWU9SEYoKTtsbi5UaW1lSW50ZXJ2YWw9dnFlLlRpbWVJbnRlcnZhbDtGYy5fX2V4cG9ydFN0YXIoa2MoKSxsbik7RmMuX19leHBvcnRTdGFyKFdGKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihZb3QoKSxsbik7dmFyIHhxZT1OS3QoKTtsbi52ZXJzaW9uPXhxZS52ZXJzaW9uO0ZjLl9fZXhwb3J0U3RhcihvNCgpLGxuKTtGYy5fX2V4cG9ydFN0YXIoVXUoKSxsbik7RmMuX19leHBvcnRTdGFyKER2KCksbG4pO0ZjLl9fZXhwb3J0U3Rhcih3b3QoKSxsbik7RmMuX19leHBvcnRTdGFyKEh2KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihycygpLGxuKTtGYy5fX2V4cG9ydFN0YXIodmQoKSxsbik7RmMuX19leHBvcnRTdGFyKEx2KCksbG4pfSk7dmFyIFFLdD1IKChzWG4sSkt0KT0+e2Z1bmN0aW9uIEJxZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9Skt0LmV4cG9ydHM9QnFlfSk7dmFyIFl2PUgoKGxYbix0WnQpPT57ZnVuY3Rpb24gSHFlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9dFp0LmV4cG9ydHM9SHFlfSk7dmFyIE00PUgoKGNYbixlWnQpPT57dmFyIFZxZT1ZdigpO2Z1bmN0aW9uIFVxZShlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKFZxZShlW3JdWzBdLHQpKXJldHVybiByO3JldHVybi0xfWVadC5leHBvcnRzPVVxZX0pO3ZhciBuWnQ9SCgodVhuLHJadCk9Pnt2YXIgcXFlPU00KCksR3FlPUFycmF5LnByb3RvdHlwZSxXcWU9R3FlLnNwbGljZTtmdW5jdGlvbiBZcWUoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPXFxZSh0LGUpO2lmKHI8MClyZXR1cm4hMTt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiByPT1uP3QucG9wKCk6V3FlLmNhbGwodCxyLDEpLC0tdGhpcy5zaXplLCEwfXJadC5leHBvcnRzPVlxZX0pO3ZhciBvWnQ9SCgoaFhuLGladCk9Pnt2YXIganFlPU00KCk7ZnVuY3Rpb24gWHFlKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1qcWUodCxlKTtyZXR1cm4gcjwwP3ZvaWQgMDp0W3JdWzFdfWladC5leHBvcnRzPVhxZX0pO3ZhciBzWnQ9SCgoZlhuLGFadCk9Pnt2YXIgJHFlPU00KCk7ZnVuY3Rpb24gS3FlKGUpe3JldHVybiAkcWUodGhpcy5fX2RhdGFfXyxlKT4tMX1hWnQuZXhwb3J0cz1LcWV9KTt2YXIgY1p0PUgoKHBYbixsWnQpPT57dmFyIFpxZT1NNCgpO2Z1bmN0aW9uIEpxZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX18sbj1acWUocixlKTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW2UsdF0pKTpyW25dWzFdPXQsdGhpc31sWnQuZXhwb3J0cz1KcWV9KTt2YXIgRTQ9SCgoZFhuLHVadCk9Pnt2YXIgUXFlPVFLdCgpLHRHZT1uWnQoKSxlR2U9b1p0KCksckdlPXNadCgpLG5HZT1jWnQoKTtmdW5jdGlvbiB6UyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX16Uy5wcm90b3R5cGUuY2xlYXI9UXFlO3pTLnByb3RvdHlwZS5kZWxldGU9dEdlO3pTLnByb3RvdHlwZS5nZXQ9ZUdlO3pTLnByb3RvdHlwZS5oYXM9ckdlO3pTLnByb3RvdHlwZS5zZXQ9bkdlO3VadC5leHBvcnRzPXpTfSk7dmFyIGZadD1IKChtWG4saFp0KT0+e3ZhciBpR2U9RTQoKTtmdW5jdGlvbiBvR2UoKXt0aGlzLl9fZGF0YV9fPW5ldyBpR2UsdGhpcy5zaXplPTB9aFp0LmV4cG9ydHM9b0dlfSk7dmFyIGRadD1IKChnWG4scFp0KT0+e2Z1bmN0aW9uIGFHZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUscn1wWnQuZXhwb3J0cz1hR2V9KTt2YXIgZ1p0PUgoKF9YbixtWnQpPT57ZnVuY3Rpb24gc0dlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX1tWnQuZXhwb3J0cz1zR2V9KTt2YXIgeVp0PUgoKHlYbixfWnQpPT57ZnVuY3Rpb24gbEdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1fWnQuZXhwb3J0cz1sR2V9KTt2YXIgY3N0PUgoKHZYbix2WnQpPT57dmFyIGNHZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dlp0LmV4cG9ydHM9Y0dlfSk7dmFyIEhjPUgoKHhYbix4WnQpPT57dmFyIHVHZT1jc3QoKSxoR2U9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmR2U9dUdlfHxoR2V8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7eFp0LmV4cG9ydHM9ZkdlfSk7dmFyIGp2PUgoKGJYbixiWnQpPT57dmFyIHBHZT1IYygpLGRHZT1wR2UuU3ltYm9sO2JadC5leHBvcnRzPWRHZX0pO3ZhciBFWnQ9SCgod1huLE1adCk9Pnt2YXIgd1p0PWp2KCksU1p0PU9iamVjdC5wcm90b3R5cGUsbUdlPVNadC5oYXNPd25Qcm9wZXJ0eSxnR2U9U1p0LnRvU3RyaW5nLFQ0PXdadD93WnQudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIF9HZShlKXt2YXIgdD1tR2UuY2FsbChlLFQ0KSxyPWVbVDRdO3RyeXtlW1Q0XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2gobyl7fXZhciBpPWdHZS5jYWxsKGUpO3JldHVybiBuJiYodD9lW1Q0XT1yOmRlbGV0ZSBlW1Q0XSksaX1NWnQuZXhwb3J0cz1fR2V9KTt2YXIgQ1p0PUgoKFNYbixUWnQpPT57dmFyIHlHZT1PYmplY3QucHJvdG90eXBlLHZHZT15R2UudG9TdHJpbmc7ZnVuY3Rpb24geEdlKGUpe3JldHVybiB2R2UuY2FsbChlKX1UWnQuZXhwb3J0cz14R2V9KTt2YXIgczA9SCgoTVhuLEladCk9Pnt2YXIgQVp0PWp2KCksYkdlPUVadCgpLHdHZT1DWnQoKSxTR2U9IltvYmplY3QgTnVsbF0iLE1HZT0iW29iamVjdCBVbmRlZmluZWRdIixQWnQ9QVp0P0FadC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gRUdlKGUpe3JldHVybiBlPT1udWxsP2U9PT12b2lkIDA/TUdlOlNHZTpQWnQmJlBadCBpbiBPYmplY3QoZSk/YkdlKGUpOndHZShlKX1JWnQuZXhwb3J0cz1FR2V9KTt2YXIgTWw9SCgoRVhuLExadCk9PntmdW5jdGlvbiBUR2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIGUhPW51bGwmJih0PT0ib2JqZWN0Inx8dD09ImZ1bmN0aW9uIil9TFp0LmV4cG9ydHM9VEdlfSk7dmFyIEZTPUgoKFRYbixrWnQpPT57dmFyIENHZT1zMCgpLEFHZT1NbCgpLFBHZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsSUdlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsTEdlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsa0dlPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gUkdlKGUpe2lmKCFBR2UoZSkpcmV0dXJuITE7dmFyIHQ9Q0dlKGUpO3JldHVybiB0PT1JR2V8fHQ9PUxHZXx8dD09UEdlfHx0PT1rR2V9a1p0LmV4cG9ydHM9UkdlfSk7dmFyIE5adD1IKChDWG4sUlp0KT0+e3ZhciBOR2U9SGMoKSxER2U9TkdlWyJfX2NvcmUtanNfc2hhcmVkX18iXTtSWnQuZXhwb3J0cz1ER2V9KTt2YXIgelp0PUgoKEFYbixPWnQpPT57dmFyIHVzdD1OWnQoKSxEWnQ9ZnVuY3Rpb24oKXt2YXIgZT0vW14uXSskLy5leGVjKHVzdCYmdXN0LmtleXMmJnVzdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGU/IlN5bWJvbChzcmMpXzEuIitlOiIifSgpO2Z1bmN0aW9uIE9HZShlKXtyZXR1cm4hIURadCYmRFp0IGluIGV9T1p0LmV4cG9ydHM9T0dlfSk7dmFyIGhzdD1IKChQWG4sRlp0KT0+e3ZhciB6R2U9RnVuY3Rpb24ucHJvdG90eXBlLEZHZT16R2UudG9TdHJpbmc7ZnVuY3Rpb24gQkdlKGUpe2lmKGUhPW51bGwpe3RyeXtyZXR1cm4gRkdlLmNhbGwoZSl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaCh0KXt9fXJldHVybiIifUZadC5leHBvcnRzPUJHZX0pO3ZhciBIWnQ9SCgoSVhuLEJadCk9Pnt2YXIgSEdlPUZTKCksVkdlPXpadCgpLFVHZT1NbCgpLHFHZT1oc3QoKSxHR2U9L1tcXF4kLiorPygpW1xde318XS9nLFdHZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxZR2U9RnVuY3Rpb24ucHJvdG90eXBlLGpHZT1PYmplY3QucHJvdG90eXBlLFhHZT1ZR2UudG9TdHJpbmcsJEdlPWpHZS5oYXNPd25Qcm9wZXJ0eSxLR2U9UmVnRXhwKCJeIitYR2UuY2FsbCgkR2UpLnJlcGxhY2UoR0dlLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIFpHZShlKXtpZighVUdlKGUpfHxWR2UoZSkpcmV0dXJuITE7dmFyIHQ9SEdlKGUpP0tHZTpXR2U7cmV0dXJuIHQudGVzdChxR2UoZSkpfUJadC5leHBvcnRzPVpHZX0pO3ZhciBVWnQ9SCgoTFhuLFZadCk9PntmdW5jdGlvbiBKR2UoZSx0KXtyZXR1cm4gZT09bnVsbD92b2lkIDA6ZVt0XX1WWnQuZXhwb3J0cz1KR2V9KTt2YXIgbDA9SCgoa1huLHFadCk9Pnt2YXIgUUdlPUhadCgpLHRXZT1VWnQoKTtmdW5jdGlvbiBlV2UoZSx0KXt2YXIgcj10V2UoZSx0KTtyZXR1cm4gUUdlKHIpP3I6dm9pZCAwfXFadC5leHBvcnRzPWVXZX0pO3ZhciB6Qj1IKChSWG4sR1p0KT0+e3ZhciByV2U9bDAoKSxuV2U9SGMoKSxpV2U9cldlKG5XZSwiTWFwIik7R1p0LmV4cG9ydHM9aVdlfSk7dmFyIEM0PUgoKE5YbixXWnQpPT57dmFyIG9XZT1sMCgpLGFXZT1vV2UoT2JqZWN0LCJjcmVhdGUiKTtXWnQuZXhwb3J0cz1hV2V9KTt2YXIgWFp0PUgoKERYbixqWnQpPT57dmFyIFladD1DNCgpO2Z1bmN0aW9uIHNXZSgpe3RoaXMuX19kYXRhX189WVp0P1ladChudWxsKTp7fSx0aGlzLnNpemU9MH1qWnQuZXhwb3J0cz1zV2V9KTt2YXIgS1p0PUgoKE9YbiwkWnQpPT57ZnVuY3Rpb24gbFdlKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSRadC5leHBvcnRzPWxXZX0pO3ZhciBKWnQ9SCgoelhuLFpadCk9Pnt2YXIgY1dlPUM0KCksdVdlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixoV2U9T2JqZWN0LnByb3RvdHlwZSxmV2U9aFdlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHBXZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKGNXZSl7dmFyIHI9dFtlXTtyZXR1cm4gcj09PXVXZT92b2lkIDA6cn1yZXR1cm4gZldlLmNhbGwodCxlKT90W2VdOnZvaWQgMH1aWnQuZXhwb3J0cz1wV2V9KTt2YXIgdEp0PUgoKEZYbixRWnQpPT57dmFyIGRXZT1DNCgpLG1XZT1PYmplY3QucHJvdG90eXBlLGdXZT1tV2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gX1dlKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIGRXZT90W2VdIT09dm9pZCAwOmdXZS5jYWxsKHQsZSl9UVp0LmV4cG9ydHM9X1dlfSk7dmFyIHJKdD1IKChCWG4sZUp0KT0+e3ZhciB5V2U9QzQoKSx2V2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIHhXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLHJbZV09eVdlJiZ0PT09dm9pZCAwP3ZXZTp0LHRoaXN9ZUp0LmV4cG9ydHM9eFdlfSk7dmFyIGlKdD1IKChIWG4sbkp0KT0+e3ZhciBiV2U9WFp0KCksd1dlPUtadCgpLFNXZT1KWnQoKSxNV2U9dEp0KCksRVdlPXJKdCgpO2Z1bmN0aW9uIEJTKGUpe3ZhciB0PS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fUJTLnByb3RvdHlwZS5jbGVhcj1iV2U7QlMucHJvdG90eXBlLmRlbGV0ZT13V2U7QlMucHJvdG90eXBlLmdldD1TV2U7QlMucHJvdG90eXBlLmhhcz1NV2U7QlMucHJvdG90eXBlLnNldD1FV2U7bkp0LmV4cG9ydHM9QlN9KTt2YXIgc0p0PUgoKFZYbixhSnQpPT57dmFyIG9KdD1pSnQoKSxUV2U9RTQoKSxDV2U9ekIoKTtmdW5jdGlvbiBBV2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBvSnQsbWFwOm5ldyhDV2V8fFRXZSksc3RyaW5nOm5ldyBvSnR9fWFKdC5leHBvcnRzPUFXZX0pO3ZhciBjSnQ9SCgoVVhuLGxKdCk9PntmdW5jdGlvbiBQV2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIHQ9PSJzdHJpbmcifHx0PT0ibnVtYmVyInx8dD09InN5bWJvbCJ8fHQ9PSJib29sZWFuIj9lIT09Il9fcHJvdG9fXyI6ZT09PW51bGx9bEp0LmV4cG9ydHM9UFdlfSk7dmFyIEE0PUgoKHFYbix1SnQpPT57dmFyIElXZT1jSnQoKTtmdW5jdGlvbiBMV2UoZSx0KXt2YXIgcj1lLl9fZGF0YV9fO3JldHVybiBJV2UodCk/clt0eXBlb2YgdD09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpyLm1hcH11SnQuZXhwb3J0cz1MV2V9KTt2YXIgZkp0PUgoKEdYbixoSnQpPT57dmFyIGtXZT1BNCgpO2Z1bmN0aW9uIFJXZShlKXt2YXIgdD1rV2UodGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1oSnQuZXhwb3J0cz1SV2V9KTt2YXIgZEp0PUgoKFdYbixwSnQpPT57dmFyIE5XZT1BNCgpO2Z1bmN0aW9uIERXZShlKXtyZXR1cm4gTldlKHRoaXMsZSkuZ2V0KGUpfXBKdC5leHBvcnRzPURXZX0pO3ZhciBnSnQ9SCgoWVhuLG1KdCk9Pnt2YXIgT1dlPUE0KCk7ZnVuY3Rpb24geldlKGUpe3JldHVybiBPV2UodGhpcyxlKS5oYXMoZSl9bUp0LmV4cG9ydHM9eldlfSk7dmFyIHlKdD1IKChqWG4sX0p0KT0+e3ZhciBGV2U9QTQoKTtmdW5jdGlvbiBCV2UoZSx0KXt2YXIgcj1GV2UodGhpcyxlKSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc31fSnQuZXhwb3J0cz1CV2V9KTt2YXIgRkI9SCgoWFhuLHZKdCk9Pnt2YXIgSFdlPXNKdCgpLFZXZT1mSnQoKSxVV2U9ZEp0KCkscVdlPWdKdCgpLEdXZT15SnQoKTtmdW5jdGlvbiBIUyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1IUy5wcm90b3R5cGUuY2xlYXI9SFdlO0hTLnByb3RvdHlwZS5kZWxldGU9VldlO0hTLnByb3RvdHlwZS5nZXQ9VVdlO0hTLnByb3RvdHlwZS5oYXM9cVdlO0hTLnByb3RvdHlwZS5zZXQ9R1dlO3ZKdC5leHBvcnRzPUhTfSk7dmFyIGJKdD1IKCgkWG4seEp0KT0+e3ZhciBXV2U9RTQoKSxZV2U9ekIoKSxqV2U9RkIoKSxYV2U9MjAwO2Z1bmN0aW9uICRXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIFdXZSl7dmFyIG49ci5fX2RhdGFfXztpZighWVdlfHxuLmxlbmd0aDxYV2UtMSlyZXR1cm4gbi5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IGpXZShuKX1yZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemU9ci5zaXplLHRoaXN9eEp0LmV4cG9ydHM9JFdlfSk7dmFyIFA0PUgoKEtYbix3SnQpPT57dmFyIEtXZT1FNCgpLFpXZT1mWnQoKSxKV2U9ZFp0KCksUVdlPWdadCgpLHRZZT15WnQoKSxlWWU9Ykp0KCk7ZnVuY3Rpb24gVlMoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgS1dlKGUpO3RoaXMuc2l6ZT10LnNpemV9VlMucHJvdG90eXBlLmNsZWFyPVpXZTtWUy5wcm90b3R5cGUuZGVsZXRlPUpXZTtWUy5wcm90b3R5cGUuZ2V0PVFXZTtWUy5wcm90b3R5cGUuaGFzPXRZZTtWUy5wcm90b3R5cGUuc2V0PWVZZTt3SnQuZXhwb3J0cz1WU30pO3ZhciBCQj1IKChaWG4sU0p0KT0+e2Z1bmN0aW9uIHJZZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aDsrK3I8biYmdChlW3JdLHIsZSkhPT0hMTspO3JldHVybiBlfVNKdC5leHBvcnRzPXJZZX0pO3ZhciBmc3Q9SCgoSlhuLE1KdCk9Pnt2YXIgblllPWwwKCksaVllPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ZZShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2godCl7fX0oKTtNSnQuZXhwb3J0cz1pWWV9KTt2YXIgSTQ9SCgoUVhuLFRKdCk9Pnt2YXIgRUp0PWZzdCgpO2Z1bmN0aW9uIG9ZZShlLHQscil7dD09Il9fcHJvdG9fXyImJkVKdD9FSnQoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6ZVt0XT1yfVRKdC5leHBvcnRzPW9ZZX0pO3ZhciBMND1IKCh0JG4sQ0p0KT0+e3ZhciBhWWU9STQoKSxzWWU9WXYoKSxsWWU9T2JqZWN0LnByb3RvdHlwZSxjWWU9bFllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHVZZShlLHQscil7dmFyIG49ZVt0XTsoIShjWWUuY2FsbChlLHQpJiZzWWUobixyKSl8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJmFZZShlLHQscil9Q0p0LmV4cG9ydHM9dVllfSk7dmFyIFVTPUgoKGUkbixBSnQpPT57dmFyIGhZZT1MNCgpLGZZZT1JNCgpO2Z1bmN0aW9uIHBZZShlLHQscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBvPS0xLGE9dC5sZW5ndGg7KytvPGE7KXt2YXIgcz10W29dLGw9bj9uKHJbc10sZVtzXSxzLHIsZSk6dm9pZCAwO2w9PT12b2lkIDAmJihsPWVbc10pLGk/ZlllKHIscyxsKTpoWWUocixzLGwpfXJldHVybiByfUFKdC5leHBvcnRzPXBZZX0pO3ZhciBJSnQ9SCgociRuLFBKdCk9PntmdW5jdGlvbiBkWWUoZSx0KXtmb3IodmFyIHI9LTEsbj1BcnJheShlKTsrK3I8ZTspbltyXT10KHIpO3JldHVybiBufVBKdC5leHBvcnRzPWRZZX0pO3ZhciBZdT1IKChuJG4sTEp0KT0+e2Z1bmN0aW9uIG1ZZShlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifUxKdC5leHBvcnRzPW1ZZX0pO3ZhciBSSnQ9SCgoaSRuLGtKdCk9Pnt2YXIgZ1llPXMwKCksX1llPVl1KCkseVllPSJbb2JqZWN0IEFyZ3VtZW50c10iO2Z1bmN0aW9uIHZZZShlKXtyZXR1cm4gX1llKGUpJiZnWWUoZSk9PXlZZX1rSnQuZXhwb3J0cz12WWV9KTt2YXIgcVM9SCgobyRuLE9KdCk9Pnt2YXIgTkp0PVJKdCgpLHhZZT1ZdSgpLERKdD1PYmplY3QucHJvdG90eXBlLGJZZT1ESnQuaGFzT3duUHJvcGVydHksd1llPURKdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxTWWU9Tkp0KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/Tkp0OmZ1bmN0aW9uKGUpe3JldHVybiB4WWUoZSkmJmJZZS5jYWxsKGUsImNhbGxlZSIpJiYhd1llLmNhbGwoZSwiY2FsbGVlIil9O09KdC5leHBvcnRzPVNZZX0pO3ZhciBUaT1IKChhJG4sekp0KT0+e3ZhciBNWWU9QXJyYXkuaXNBcnJheTt6SnQuZXhwb3J0cz1NWWV9KTt2YXIgQkp0PUgoKHMkbixGSnQpPT57ZnVuY3Rpb24gRVllKCl7cmV0dXJuITF9Rkp0LmV4cG9ydHM9RVllfSk7dmFyIFh2PUgoKGs0LEdTKT0+e3ZhciBUWWU9SGMoKSxDWWU9Qkp0KCksVUp0PXR5cGVvZiBrND09Im9iamVjdCImJms0JiYhazQubm9kZVR5cGUmJms0LEhKdD1VSnQmJnR5cGVvZiBHUz09Im9iamVjdCImJkdTJiYhR1Mubm9kZVR5cGUmJkdTLEFZZT1ISnQmJkhKdC5leHBvcnRzPT09VUp0LFZKdD1BWWU/VFllLkJ1ZmZlcjp2b2lkIDAsUFllPVZKdD9WSnQuaXNCdWZmZXI6dm9pZCAwLElZZT1QWWV8fENZZTtHUy5leHBvcnRzPUlZZX0pO3ZhciBSND1IKChsJG4scUp0KT0+e3ZhciBMWWU9OTAwNzE5OTI1NDc0MDk5MSxrWWU9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIFJZZShlLHQpe3ZhciByPXR5cGVvZiBlO3JldHVybiB0PXQ9PW51bGw/TFllOnQsISF0JiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZrWWUudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fXFKdC5leHBvcnRzPVJZZX0pO3ZhciBIQj1IKChjJG4sR0p0KT0+e3ZhciBOWWU9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBEWWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZT4tMSYmZSUxPT0wJiZlPD1OWWV9R0p0LmV4cG9ydHM9RFllfSk7dmFyIFlKdD1IKCh1JG4sV0p0KT0+e3ZhciBPWWU9czAoKSx6WWU9SEIoKSxGWWU9WXUoKSxCWWU9IltvYmplY3QgQXJndW1lbnRzXSIsSFllPSJbb2JqZWN0IEFycmF5XSIsVlllPSJbb2JqZWN0IEJvb2xlYW5dIixVWWU9IltvYmplY3QgRGF0ZV0iLHFZZT0iW29iamVjdCBFcnJvcl0iLEdZZT0iW29iamVjdCBGdW5jdGlvbl0iLFdZZT0iW29iamVjdCBNYXBdIixZWWU9IltvYmplY3QgTnVtYmVyXSIsalllPSJbb2JqZWN0IE9iamVjdF0iLFhZZT0iW29iamVjdCBSZWdFeHBdIiwkWWU9IltvYmplY3QgU2V0XSIsS1llPSJbb2JqZWN0IFN0cmluZ10iLFpZZT0iW29iamVjdCBXZWFrTWFwXSIsSlllPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsUVllPSJbb2JqZWN0IERhdGFWaWV3XSIsdGplPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGVqZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixyamU9IltvYmplY3QgSW50OEFycmF5XSIsbmplPSJbb2JqZWN0IEludDE2QXJyYXldIixpamU9IltvYmplY3QgSW50MzJBcnJheV0iLG9qZT0iW29iamVjdCBVaW50OEFycmF5XSIsYWplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsc2plPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsbGplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsVm49e307Vm5bdGplXT1WbltlamVdPVZuW3JqZV09Vm5bbmplXT1WbltpamVdPVZuW29qZV09Vm5bYWplXT1WbltzamVdPVZuW2xqZV09ITA7Vm5bQlllXT1WbltIWWVdPVZuW0pZZV09Vm5bVlllXT1WbltRWWVdPVZuW1VZZV09Vm5bcVllXT1WbltHWWVdPVZuW1dZZV09Vm5bWVllXT1WbltqWWVdPVZuW1hZZV09Vm5bJFllXT1WbltLWWVdPVZuW1pZZV09ITE7ZnVuY3Rpb24gY2plKGUpe3JldHVybiBGWWUoZSkmJnpZZShlLmxlbmd0aCkmJiEhVm5bT1llKGUpXX1XSnQuZXhwb3J0cz1jamV9KTt2YXIgTjQ9SCgoaCRuLGpKdCk9PntmdW5jdGlvbiB1amUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1qSnQuZXhwb3J0cz11amV9KTt2YXIgVkI9SCgoRDQsV1MpPT57dmFyIGhqZT1jc3QoKSxYSnQ9dHlwZW9mIEQ0PT0ib2JqZWN0IiYmRDQmJiFENC5ub2RlVHlwZSYmRDQsTzQ9WEp0JiZ0eXBlb2YgV1M9PSJvYmplY3QiJiZXUyYmIVdTLm5vZGVUeXBlJiZXUyxmamU9TzQmJk80LmV4cG9ydHM9PT1YSnQscHN0PWZqZSYmaGplLnByb2Nlc3MscGplPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPU80JiZPNC5yZXF1aXJlJiZPNC5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGV8fHBzdCYmcHN0LmJpbmRpbmcmJnBzdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTtXUy5leHBvcnRzPXBqZX0pO3ZhciBZUz1IKChmJG4sWkp0KT0+e3ZhciBkamU9WUp0KCksbWplPU40KCksJEp0PVZCKCksS0p0PSRKdCYmJEp0LmlzVHlwZWRBcnJheSxnamU9S0p0P21qZShLSnQpOmRqZTtaSnQuZXhwb3J0cz1namV9KTt2YXIgZHN0PUgoKHAkbixKSnQpPT57dmFyIF9qZT1JSnQoKSx5amU9cVMoKSx2amU9VGkoKSx4amU9WHYoKSxiamU9UjQoKSx3amU9WVMoKSxTamU9T2JqZWN0LnByb3RvdHlwZSxNamU9U2plLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIEVqZShlLHQpe3ZhciByPXZqZShlKSxuPSFyJiZ5amUoZSksaT0hciYmIW4mJnhqZShlKSxvPSFyJiYhbiYmIWkmJndqZShlKSxhPXJ8fG58fGl8fG8scz1hP19qZShlLmxlbmd0aCxTdHJpbmcpOltdLGw9cy5sZW5ndGg7Zm9yKHZhciBjIGluIGUpKHR8fE1qZS5jYWxsKGUsYykpJiYhKGEmJihjPT0ibGVuZ3RoInx8aSYmKGM9PSJvZmZzZXQifHxjPT0icGFyZW50Iil8fG8mJihjPT0iYnVmZmVyInx8Yz09ImJ5dGVMZW5ndGgifHxjPT0iYnl0ZU9mZnNldCIpfHxiamUoYyxsKSkpJiZzLnB1c2goYyk7cmV0dXJuIHN9Skp0LmV4cG9ydHM9RWplfSk7dmFyIHo0PUgoKGQkbixRSnQpPT57dmFyIFRqZT1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIENqZShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yLHI9dHlwZW9mIHQ9PSJmdW5jdGlvbiImJnQucHJvdG90eXBlfHxUamU7cmV0dXJuIGU9PT1yfVFKdC5leHBvcnRzPUNqZX0pO3ZhciBtc3Q9SCgobSRuLHRRdCk9PntmdW5jdGlvbiBBamUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUodChyKSl9fXRRdC5leHBvcnRzPUFqZX0pO3ZhciByUXQ9SCgoZyRuLGVRdCk9Pnt2YXIgUGplPW1zdCgpLElqZT1QamUoT2JqZWN0LmtleXMsT2JqZWN0KTtlUXQuZXhwb3J0cz1JamV9KTt2YXIgVUI9SCgoXyRuLG5RdCk9Pnt2YXIgTGplPXo0KCksa2plPXJRdCgpLFJqZT1PYmplY3QucHJvdG90eXBlLE5qZT1SamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gRGplKGUpe2lmKCFMamUoZSkpcmV0dXJuIGtqZShlKTt2YXIgdD1bXTtmb3IodmFyIHIgaW4gT2JqZWN0KGUpKU5qZS5jYWxsKGUscikmJnIhPSJjb25zdHJ1Y3RvciImJnQucHVzaChyKTtyZXR1cm4gdH1uUXQuZXhwb3J0cz1EamV9KTt2YXIgQmY9SCgoeSRuLGlRdCk9Pnt2YXIgT2plPUZTKCksemplPUhCKCk7ZnVuY3Rpb24gRmplKGUpe3JldHVybiBlIT1udWxsJiZ6amUoZS5sZW5ndGgpJiYhT2plKGUpfWlRdC5leHBvcnRzPUZqZX0pO3ZhciBBZD1IKCh2JG4sb1F0KT0+e3ZhciBCamU9ZHN0KCksSGplPVVCKCksVmplPUJmKCk7ZnVuY3Rpb24gVWplKGUpe3JldHVybiBWamUoZSk/QmplKGUpOkhqZShlKX1vUXQuZXhwb3J0cz1VamV9KTt2YXIgc1F0PUgoKHgkbixhUXQpPT57dmFyIHFqZT1VUygpLEdqZT1BZCgpO2Z1bmN0aW9uIFdqZShlLHQpe3JldHVybiBlJiZxamUodCxHamUodCksZSl9YVF0LmV4cG9ydHM9V2plfSk7dmFyIGNRdD1IKChiJG4sbFF0KT0+e2Z1bmN0aW9uIFlqZShlKXt2YXIgdD1bXTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBPYmplY3QoZSkpdC5wdXNoKHIpO3JldHVybiB0fWxRdC5leHBvcnRzPVlqZX0pO3ZhciBoUXQ9SCgodyRuLHVRdCk9Pnt2YXIgamplPU1sKCksWGplPXo0KCksJGplPWNRdCgpLEtqZT1PYmplY3QucHJvdG90eXBlLFpqZT1LamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gSmplKGUpe2lmKCFqamUoZSkpcmV0dXJuICRqZShlKTt2YXIgdD1YamUoZSkscj1bXTtmb3IodmFyIG4gaW4gZSluPT0iY29uc3RydWN0b3IiJiYodHx8IVpqZS5jYWxsKGUsbikpfHxyLnB1c2gobik7cmV0dXJuIHJ9dVF0LmV4cG9ydHM9SmplfSk7dmFyIGMwPUgoKFMkbixmUXQpPT57dmFyIFFqZT1kc3QoKSx0WGU9aFF0KCksZVhlPUJmKCk7ZnVuY3Rpb24gclhlKGUpe3JldHVybiBlWGUoZSk/UWplKGUsITApOnRYZShlKX1mUXQuZXhwb3J0cz1yWGV9KTt2YXIgZFF0PUgoKE0kbixwUXQpPT57dmFyIG5YZT1VUygpLGlYZT1jMCgpO2Z1bmN0aW9uIG9YZShlLHQpe3JldHVybiBlJiZuWGUodCxpWGUodCksZSl9cFF0LmV4cG9ydHM9b1hlfSk7dmFyIGdzdD1IKChGNCxqUyk9Pnt2YXIgYVhlPUhjKCkseVF0PXR5cGVvZiBGND09Im9iamVjdCImJkY0JiYhRjQubm9kZVR5cGUmJkY0LG1RdD15UXQmJnR5cGVvZiBqUz09Im9iamVjdCImJmpTJiYhalMubm9kZVR5cGUmJmpTLHNYZT1tUXQmJm1RdC5leHBvcnRzPT09eVF0LGdRdD1zWGU/YVhlLkJ1ZmZlcjp2b2lkIDAsX1F0PWdRdD9nUXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIGxYZShlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgcj1lLmxlbmd0aCxuPV9RdD9fUXQocik6bmV3IGUuY29uc3RydWN0b3Iocik7cmV0dXJuIGUuY29weShuKSxufWpTLmV4cG9ydHM9bFhlfSk7dmFyIF9zdD1IKChFJG4sdlF0KT0+e2Z1bmN0aW9uIGNYZShlLHQpe3ZhciByPS0xLG49ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KG4pKTsrK3I8bjspdFtyXT1lW3JdO3JldHVybiB0fXZRdC5leHBvcnRzPWNYZX0pO3ZhciB5c3Q9SCgoVCRuLHhRdCk9PntmdW5jdGlvbiB1WGUoZSx0KXtmb3IodmFyIHI9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGgsaT0wLG89W107KytyPG47KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYob1tpKytdPWEpfXJldHVybiBvfXhRdC5leHBvcnRzPXVYZX0pO3ZhciB2c3Q9SCgoQyRuLGJRdCk9PntmdW5jdGlvbiBoWGUoKXtyZXR1cm5bXX1iUXQuZXhwb3J0cz1oWGV9KTt2YXIgcUI9SCgoQSRuLFNRdCk9Pnt2YXIgZlhlPXlzdCgpLHBYZT12c3QoKSxkWGU9T2JqZWN0LnByb3RvdHlwZSxtWGU9ZFhlLnByb3BlcnR5SXNFbnVtZXJhYmxlLHdRdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGdYZT13UXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/W106KGU9T2JqZWN0KGUpLGZYZSh3UXQoZSksZnVuY3Rpb24odCl7cmV0dXJuIG1YZS5jYWxsKGUsdCl9KSl9OnBYZTtTUXQuZXhwb3J0cz1nWGV9KTt2YXIgRVF0PUgoKFAkbixNUXQpPT57dmFyIF9YZT1VUygpLHlYZT1xQigpO2Z1bmN0aW9uIHZYZShlLHQpe3JldHVybiBfWGUoZSx5WGUoZSksdCl9TVF0LmV4cG9ydHM9dlhlfSk7dmFyIEdCPUgoKEkkbixUUXQpPT57ZnVuY3Rpb24geFhlKGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaT1lLmxlbmd0aDsrK3I8bjspZVtpK3JdPXRbcl07cmV0dXJuIGV9VFF0LmV4cG9ydHM9eFhlfSk7dmFyIEI0PUgoKEwkbixDUXQpPT57dmFyIGJYZT1tc3QoKSx3WGU9YlhlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO0NRdC5leHBvcnRzPXdYZX0pO3ZhciB4c3Q9SCgoayRuLEFRdCk9Pnt2YXIgU1hlPUdCKCksTVhlPUI0KCksRVhlPXFCKCksVFhlPXZzdCgpLENYZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLEFYZT1DWGU/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KVNYZSh0LEVYZShlKSksZT1NWGUoZSk7cmV0dXJuIHR9OlRYZTtBUXQuZXhwb3J0cz1BWGV9KTt2YXIgSVF0PUgoKFIkbixQUXQpPT57dmFyIFBYZT1VUygpLElYZT14c3QoKTtmdW5jdGlvbiBMWGUoZSx0KXtyZXR1cm4gUFhlKGUsSVhlKGUpLHQpfVBRdC5leHBvcnRzPUxYZX0pO3ZhciBic3Q9SCgoTiRuLExRdCk9Pnt2YXIga1hlPUdCKCksUlhlPVRpKCk7ZnVuY3Rpb24gTlhlKGUsdCxyKXt2YXIgbj10KGUpO3JldHVybiBSWGUoZSk/bjprWGUobixyKGUpKX1MUXQuZXhwb3J0cz1OWGV9KTt2YXIgd3N0PUgoKEQkbixrUXQpPT57dmFyIERYZT1ic3QoKSxPWGU9cUIoKSx6WGU9QWQoKTtmdW5jdGlvbiBGWGUoZSl7cmV0dXJuIERYZShlLHpYZSxPWGUpfWtRdC5leHBvcnRzPUZYZX0pO3ZhciBOUXQ9SCgoTyRuLFJRdCk9Pnt2YXIgQlhlPWJzdCgpLEhYZT14c3QoKSxWWGU9YzAoKTtmdW5jdGlvbiBVWGUoZSl7cmV0dXJuIEJYZShlLFZYZSxIWGUpfVJRdC5leHBvcnRzPVVYZX0pO3ZhciBPUXQ9SCgoeiRuLERRdCk9Pnt2YXIgcVhlPWwwKCksR1hlPUhjKCksV1hlPXFYZShHWGUsIkRhdGFWaWV3Iik7RFF0LmV4cG9ydHM9V1hlfSk7dmFyIEZRdD1IKChGJG4selF0KT0+e3ZhciBZWGU9bDAoKSxqWGU9SGMoKSxYWGU9WVhlKGpYZSwiUHJvbWlzZSIpO3pRdC5leHBvcnRzPVhYZX0pO3ZhciBTc3Q9SCgoQiRuLEJRdCk9Pnt2YXIgJFhlPWwwKCksS1hlPUhjKCksWlhlPSRYZShLWGUsIlNldCIpO0JRdC5leHBvcnRzPVpYZX0pO3ZhciBWUXQ9SCgoSCRuLEhRdCk9Pnt2YXIgSlhlPWwwKCksUVhlPUhjKCksdCRlPUpYZShRWGUsIldlYWtNYXAiKTtIUXQuZXhwb3J0cz10JGV9KTt2YXIgS3Y9SCgoViRuLFhRdCk9Pnt2YXIgTXN0PU9RdCgpLEVzdD16QigpLFRzdD1GUXQoKSxDc3Q9U3N0KCksQXN0PVZRdCgpLGpRdD1zMCgpLFhTPWhzdCgpLFVRdD0iW29iamVjdCBNYXBdIixlJGU9IltvYmplY3QgT2JqZWN0XSIscVF0PSJbb2JqZWN0IFByb21pc2VdIixHUXQ9IltvYmplY3QgU2V0XSIsV1F0PSJbb2JqZWN0IFdlYWtNYXBdIixZUXQ9IltvYmplY3QgRGF0YVZpZXddIixyJGU9WFMoTXN0KSxuJGU9WFMoRXN0KSxpJGU9WFMoVHN0KSxvJGU9WFMoQ3N0KSxhJGU9WFMoQXN0KSwkdj1qUXQ7KE1zdCYmJHYobmV3IE1zdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9WVF0fHxFc3QmJiR2KG5ldyBFc3QpIT1VUXR8fFRzdCYmJHYoVHN0LnJlc29sdmUoKSkhPXFRdHx8Q3N0JiYkdihuZXcgQ3N0KSE9R1F0fHxBc3QmJiR2KG5ldyBBc3QpIT1XUXQpJiYoJHY9ZnVuY3Rpb24oZSl7dmFyIHQ9alF0KGUpLHI9dD09ZSRlP2UuY29uc3RydWN0b3I6dm9pZCAwLG49cj9YUyhyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIHIkZTpyZXR1cm4gWVF0O2Nhc2UgbiRlOnJldHVybiBVUXQ7Y2FzZSBpJGU6cmV0dXJuIHFRdDtjYXNlIG8kZTpyZXR1cm4gR1F0O2Nhc2UgYSRlOnJldHVybiBXUXR9cmV0dXJuIHR9KTtYUXQuZXhwb3J0cz0kdn0pO3ZhciBLUXQ9SCgoVSRuLCRRdCk9Pnt2YXIgcyRlPU9iamVjdC5wcm90b3R5cGUsbCRlPXMkZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBjJGUoZSl7dmFyIHQ9ZS5sZW5ndGgscj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmdHlwZW9mIGVbMF09PSJzdHJpbmciJiZsJGUuY2FsbChlLCJpbmRleCIpJiYoci5pbmRleD1lLmluZGV4LHIuaW5wdXQ9ZS5pbnB1dCkscn0kUXQuZXhwb3J0cz1jJGV9KTt2YXIgUHN0PUgoKHEkbixaUXQpPT57dmFyIHUkZT1IYygpLGgkZT11JGUuVWludDhBcnJheTtaUXQuZXhwb3J0cz1oJGV9KTt2YXIgV0I9SCgoRyRuLFFRdCk9Pnt2YXIgSlF0PVBzdCgpO2Z1bmN0aW9uIGYkZShlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgSlF0KHQpLnNldChuZXcgSlF0KGUpKSx0fVFRdC5leHBvcnRzPWYkZX0pO3ZhciBldGU9SCgoVyRuLHR0ZSk9Pnt2YXIgcCRlPVdCKCk7ZnVuY3Rpb24gZCRlKGUsdCl7dmFyIHI9dD9wJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfXR0ZS5leHBvcnRzPWQkZX0pO3ZhciBudGU9SCgoWSRuLHJ0ZSk9Pnt2YXIgbSRlPS9cdyokLztmdW5jdGlvbiBnJGUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsbSRlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fXJ0ZS5leHBvcnRzPWckZX0pO3ZhciBsdGU9SCgoaiRuLHN0ZSk9Pnt2YXIgaXRlPWp2KCksb3RlPWl0ZT9pdGUucHJvdG90eXBlOnZvaWQgMCxhdGU9b3RlP290ZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBfJGUoZSl7cmV0dXJuIGF0ZT9PYmplY3QoYXRlLmNhbGwoZSkpOnt9fXN0ZS5leHBvcnRzPV8kZX0pO3ZhciBJc3Q9SCgoWCRuLGN0ZSk9Pnt2YXIgeSRlPVdCKCk7ZnVuY3Rpb24gdiRlKGUsdCl7dmFyIHI9dD95JGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9Y3RlLmV4cG9ydHM9diRlfSk7dmFyIGh0ZT1IKCgkJG4sdXRlKT0+e3ZhciB4JGU9V0IoKSxiJGU9ZXRlKCksdyRlPW50ZSgpLFMkZT1sdGUoKSxNJGU9SXN0KCksRSRlPSJbb2JqZWN0IEJvb2xlYW5dIixUJGU9IltvYmplY3QgRGF0ZV0iLEMkZT0iW29iamVjdCBNYXBdIixBJGU9IltvYmplY3QgTnVtYmVyXSIsUCRlPSJbb2JqZWN0IFJlZ0V4cF0iLEkkZT0iW29iamVjdCBTZXRdIixMJGU9IltvYmplY3QgU3RyaW5nXSIsayRlPSJbb2JqZWN0IFN5bWJvbF0iLFIkZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLE4kZT0iW29iamVjdCBEYXRhVmlld10iLEQkZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixPJGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIseiRlPSJbb2JqZWN0IEludDhBcnJheV0iLEYkZT0iW29iamVjdCBJbnQxNkFycmF5XSIsQiRlPSJbb2JqZWN0IEludDMyQXJyYXldIixIJGU9IltvYmplY3QgVWludDhBcnJheV0iLFYkZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLFUkZT0iW29iamVjdCBVaW50MTZBcnJheV0iLHEkZT0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIEckZShlLHQscil7dmFyIG49ZS5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSBSJGU6cmV0dXJuIHgkZShlKTtjYXNlIEUkZTpjYXNlIFQkZTpyZXR1cm4gbmV3IG4oK2UpO2Nhc2UgTiRlOnJldHVybiBiJGUoZSxyKTtjYXNlIEQkZTpjYXNlIE8kZTpjYXNlIHokZTpjYXNlIEYkZTpjYXNlIEIkZTpjYXNlIEgkZTpjYXNlIFYkZTpjYXNlIFUkZTpjYXNlIHEkZTpyZXR1cm4gTSRlKGUscik7Y2FzZSBDJGU6cmV0dXJuIG5ldyBuO2Nhc2UgQSRlOmNhc2UgTCRlOnJldHVybiBuZXcgbihlKTtjYXNlIFAkZTpyZXR1cm4gdyRlKGUpO2Nhc2UgSSRlOnJldHVybiBuZXcgbjtjYXNlIGskZTpyZXR1cm4gUyRlKGUpfX11dGUuZXhwb3J0cz1HJGV9KTt2YXIgTHN0PUgoKEskbixwdGUpPT57dmFyIFckZT1NbCgpLGZ0ZT1PYmplY3QuY3JlYXRlLFkkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFXJGUodCkpcmV0dXJue307aWYoZnRlKXJldHVybiBmdGUodCk7ZS5wcm90b3R5cGU9dDt2YXIgcj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9dm9pZCAwLHJ9fSgpO3B0ZS5leHBvcnRzPVkkZX0pO3ZhciBrc3Q9SCgoWiRuLGR0ZSk9Pnt2YXIgaiRlPUxzdCgpLFgkZT1CNCgpLCQkZT16NCgpO2Z1bmN0aW9uIEskZShlKXtyZXR1cm4gdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiEkJGUoZSk/aiRlKFgkZShlKSk6e319ZHRlLmV4cG9ydHM9SyRlfSk7dmFyIGd0ZT1IKChKJG4sbXRlKT0+e3ZhciBaJGU9S3YoKSxKJGU9WXUoKSxRJGU9IltvYmplY3QgTWFwXSI7ZnVuY3Rpb24gdEtlKGUpe3JldHVybiBKJGUoZSkmJlokZShlKT09USRlfW10ZS5leHBvcnRzPXRLZX0pO3ZhciB4dGU9SCgoUSRuLHZ0ZSk9Pnt2YXIgZUtlPWd0ZSgpLHJLZT1ONCgpLF90ZT1WQigpLHl0ZT1fdGUmJl90ZS5pc01hcCxuS2U9eXRlP3JLZSh5dGUpOmVLZTt2dGUuZXhwb3J0cz1uS2V9KTt2YXIgd3RlPUgoKHRLbixidGUpPT57dmFyIGlLZT1LdigpLG9LZT1ZdSgpLGFLZT0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBzS2UoZSl7cmV0dXJuIG9LZShlKSYmaUtlKGUpPT1hS2V9YnRlLmV4cG9ydHM9c0tlfSk7dmFyIFR0ZT1IKChlS24sRXRlKT0+e3ZhciBsS2U9d3RlKCksY0tlPU40KCksU3RlPVZCKCksTXRlPVN0ZSYmU3RlLmlzU2V0LHVLZT1NdGU/Y0tlKE10ZSk6bEtlO0V0ZS5leHBvcnRzPXVLZX0pO3ZhciBSc3Q9SCgocktuLEl0ZSk9Pnt2YXIgaEtlPVA0KCksZktlPUJCKCkscEtlPUw0KCksZEtlPXNRdCgpLG1LZT1kUXQoKSxnS2U9Z3N0KCksX0tlPV9zdCgpLHlLZT1FUXQoKSx2S2U9SVF0KCkseEtlPXdzdCgpLGJLZT1OUXQoKSx3S2U9S3YoKSxTS2U9S1F0KCksTUtlPWh0ZSgpLEVLZT1rc3QoKSxUS2U9VGkoKSxDS2U9WHYoKSxBS2U9eHRlKCksUEtlPU1sKCksSUtlPVR0ZSgpLExLZT1BZCgpLGtLZT1jMCgpLFJLZT0xLE5LZT0yLERLZT00LEN0ZT0iW29iamVjdCBBcmd1bWVudHNdIixPS2U9IltvYmplY3QgQXJyYXldIix6S2U9IltvYmplY3QgQm9vbGVhbl0iLEZLZT0iW29iamVjdCBEYXRlXSIsQktlPSJbb2JqZWN0IEVycm9yXSIsQXRlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsSEtlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsVktlPSJbb2JqZWN0IE1hcF0iLFVLZT0iW29iamVjdCBOdW1iZXJdIixQdGU9IltvYmplY3QgT2JqZWN0XSIscUtlPSJbb2JqZWN0IFJlZ0V4cF0iLEdLZT0iW29iamVjdCBTZXRdIixXS2U9IltvYmplY3QgU3RyaW5nXSIsWUtlPSJbb2JqZWN0IFN5bWJvbF0iLGpLZT0iW29iamVjdCBXZWFrTWFwXSIsWEtlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsJEtlPSJbb2JqZWN0IERhdGFWaWV3XSIsS0tlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFpLZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixKS2U9IltvYmplY3QgSW50OEFycmF5XSIsUUtlPSJbb2JqZWN0IEludDE2QXJyYXldIix0WmU9IltvYmplY3QgSW50MzJBcnJheV0iLGVaZT0iW29iamVjdCBVaW50OEFycmF5XSIsclplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsblplPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsaVplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ249e307Q25bQ3RlXT1DbltPS2VdPUNuW1hLZV09Q25bJEtlXT1Dblt6S2VdPUNuW0ZLZV09Q25bS0tlXT1DbltaS2VdPUNuW0pLZV09Q25bUUtlXT1Dblt0WmVdPUNuW1ZLZV09Q25bVUtlXT1DbltQdGVdPUNuW3FLZV09Q25bR0tlXT1DbltXS2VdPUNuW1lLZV09Q25bZVplXT1DbltyWmVdPUNuW25aZV09Q25baVplXT0hMDtDbltCS2VdPUNuW0F0ZV09Q25baktlXT0hMTtmdW5jdGlvbiBZQihlLHQscixuLGksbyl7dmFyIGEscz10JlJLZSxsPXQmTktlLGM9dCZES2U7aWYociYmKGE9aT9yKGUsbixpLG8pOnIoZSkpLGEhPT12b2lkIDApcmV0dXJuIGE7aWYoIVBLZShlKSlyZXR1cm4gZTt2YXIgdT1US2UoZSk7aWYodSl7aWYoYT1TS2UoZSksIXMpcmV0dXJuIF9LZShlLGEpfWVsc2V7dmFyIGg9d0tlKGUpLGY9aD09QXRlfHxoPT1IS2U7aWYoQ0tlKGUpKXJldHVybiBnS2UoZSxzKTtpZihoPT1QdGV8fGg9PUN0ZXx8ZiYmIWkpe2lmKGE9bHx8Zj97fTpFS2UoZSksIXMpcmV0dXJuIGw/dktlKGUsbUtlKGEsZSkpOnlLZShlLGRLZShhLGUpKX1lbHNle2lmKCFDbltoXSlyZXR1cm4gaT9lOnt9O2E9TUtlKGUsaCxzKX19b3x8KG89bmV3IGhLZSk7dmFyIHA9by5nZXQoZSk7aWYocClyZXR1cm4gcDtvLnNldChlLGEpLElLZShlKT9lLmZvckVhY2goZnVuY3Rpb24oXyl7YS5hZGQoWUIoXyx0LHIsXyxlLG8pKX0pOkFLZShlKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKF8seSl7YS5zZXQoeSxZQihfLHQscix5LGUsbykpfSk7dmFyIGQ9Yz9sP2JLZTp4S2U6bD9rS2U6TEtlLGc9dT92b2lkIDA6ZChlKTtyZXR1cm4gZktlKGd8fGUsZnVuY3Rpb24oXyx5KXtnJiYoeT1fLF89ZVt5XSkscEtlKGEseSxZQihfLHQscix5LGUsbykpfSksYX1JdGUuZXhwb3J0cz1ZQn0pO3ZhciBrdGU9SCgobktuLEx0ZSk9Pnt2YXIgb1plPVJzdCgpLGFaZT00O2Z1bmN0aW9uIHNaZShlKXtyZXR1cm4gb1plKGUsYVplKX1MdGUuZXhwb3J0cz1zWmV9KTt2YXIgakI9SCgoaUtuLFJ0ZSk9PntmdW5jdGlvbiBsWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fVJ0ZS5leHBvcnRzPWxaZX0pO3ZhciBEdGU9SCgob0tuLE50ZSk9PntmdW5jdGlvbiBjWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtmb3IodmFyIGk9LTEsbz1PYmplY3QodCksYT1uKHQpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIGw9YVtlP3M6KytpXTtpZihyKG9bbF0sbCxvKT09PSExKWJyZWFrfXJldHVybiB0fX1OdGUuZXhwb3J0cz1jWmV9KTt2YXIgWEI9SCgoYUtuLE90ZSk9Pnt2YXIgdVplPUR0ZSgpLGhaZT11WmUoKTtPdGUuZXhwb3J0cz1oWmV9KTt2YXIgJEI9SCgoc0tuLHp0ZSk9Pnt2YXIgZlplPVhCKCkscFplPUFkKCk7ZnVuY3Rpb24gZFplKGUsdCl7cmV0dXJuIGUmJmZaZShlLHQscFplKX16dGUuZXhwb3J0cz1kWmV9KTt2YXIgQnRlPUgoKGxLbixGdGUpPT57dmFyIG1aZT1CZigpO2Z1bmN0aW9uIGdaZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIW1aZShyKSlyZXR1cm4gZShyLG4pO2Zvcih2YXIgaT1yLmxlbmd0aCxvPXQ/aTotMSxhPU9iamVjdChyKTsodD9vLS06KytvPGkpJiZuKGFbb10sbyxhKSE9PSExOyk7cmV0dXJuIHJ9fUZ0ZS5leHBvcnRzPWdaZX0pO3ZhciBIND1IKChjS24sSHRlKT0+e3ZhciBfWmU9JEIoKSx5WmU9QnRlKCksdlplPXlaZShfWmUpO0h0ZS5leHBvcnRzPXZaZX0pO3ZhciB1MD1IKCh1S24sVnRlKT0+e2Z1bmN0aW9uIHhaZShlKXtyZXR1cm4gZX1WdGUuZXhwb3J0cz14WmV9KTt2YXIgTnN0PUgoKGhLbixVdGUpPT57dmFyIGJaZT11MCgpO2Z1bmN0aW9uIHdaZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpiWmV9VXRlLmV4cG9ydHM9d1plfSk7dmFyIERzdD1IKChmS24scXRlKT0+e3ZhciBTWmU9QkIoKSxNWmU9SDQoKSxFWmU9TnN0KCksVFplPVRpKCk7ZnVuY3Rpb24gQ1plKGUsdCl7dmFyIHI9VFplKGUpP1NaZTpNWmU7cmV0dXJuIHIoZSxFWmUodCkpfXF0ZS5leHBvcnRzPUNaZX0pO3ZhciBPc3Q9SCgocEtuLEd0ZSk9PntHdGUuZXhwb3J0cz1Ec3QoKX0pO3ZhciBZdGU9SCgoZEtuLFd0ZSk9Pnt2YXIgQVplPUg0KCk7ZnVuY3Rpb24gUFplKGUsdCl7dmFyIHI9W107cmV0dXJuIEFaZShlLGZ1bmN0aW9uKG4saSxvKXt0KG4saSxvKSYmci5wdXNoKG4pfSkscn1XdGUuZXhwb3J0cz1QWmV9KTt2YXIgWHRlPUgoKG1LbixqdGUpPT57dmFyIElaZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gTFplKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLElaZSksdGhpc31qdGUuZXhwb3J0cz1MWmV9KTt2YXIgS3RlPUgoKGdLbiwkdGUpPT57ZnVuY3Rpb24ga1plKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX0kdGUuZXhwb3J0cz1rWmV9KTt2YXIgenN0PUgoKF9LbixadGUpPT57dmFyIFJaZT1GQigpLE5aZT1YdGUoKSxEWmU9S3RlKCk7ZnVuY3Rpb24gS0IoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFJaZTsrK3Q8cjspdGhpcy5hZGQoZVt0XSl9S0IucHJvdG90eXBlLmFkZD1LQi5wcm90b3R5cGUucHVzaD1OWmU7S0IucHJvdG90eXBlLmhhcz1EWmU7WnRlLmV4cG9ydHM9S0J9KTt2YXIgUXRlPUgoKHlLbixKdGUpPT57ZnVuY3Rpb24gT1plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoOysrcjxuOylpZih0KGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX1KdGUuZXhwb3J0cz1PWmV9KTt2YXIgRnN0PUgoKHZLbix0ZWUpPT57ZnVuY3Rpb24gelplKGUsdCl7cmV0dXJuIGUuaGFzKHQpfXRlZS5leHBvcnRzPXpaZX0pO3ZhciBCc3Q9SCgoeEtuLGVlZSk9Pnt2YXIgRlplPXpzdCgpLEJaZT1RdGUoKSxIWmU9RnN0KCksVlplPTEsVVplPTI7ZnVuY3Rpb24gcVplKGUsdCxyLG4saSxvKXt2YXIgYT1yJlZaZSxzPWUubGVuZ3RoLGw9dC5sZW5ndGg7aWYocyE9bCYmIShhJiZsPnMpKXJldHVybiExO3ZhciBjPW8uZ2V0KGUpLHU9by5nZXQodCk7aWYoYyYmdSlyZXR1cm4gYz09dCYmdT09ZTt2YXIgaD0tMSxmPSEwLHA9ciZVWmU/bmV3IEZaZTp2b2lkIDA7Zm9yKG8uc2V0KGUsdCksby5zZXQodCxlKTsrK2g8czspe3ZhciBkPWVbaF0sZz10W2hdO2lmKG4pdmFyIF89YT9uKGcsZCxoLHQsZSxvKTpuKGQsZyxoLGUsdCxvKTtpZihfIT09dm9pZCAwKXtpZihfKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYocCl7aWYoIUJaZSh0LGZ1bmN0aW9uKHkseCl7aWYoIUhaZShwLHgpJiYoZD09PXl8fGkoZCx5LHIsbixvKSkpcmV0dXJuIHAucHVzaCh4KX0pKXtmPSExO2JyZWFrfX1lbHNlIGlmKCEoZD09PWd8fGkoZCxnLHIsbixvKSkpe2Y9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxmfWVlZS5leHBvcnRzPXFaZX0pO3ZhciBuZWU9SCgoYktuLHJlZSk9PntmdW5jdGlvbiBHWmUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obixpKXtyWysrdF09W2ksbl19KSxyfXJlZS5leHBvcnRzPUdaZX0pO3ZhciBaQj1IKCh3S24saWVlKT0+e2Z1bmN0aW9uIFdaZShlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrdF09bn0pLHJ9aWVlLmV4cG9ydHM9V1plfSk7dmFyIGNlZT1IKChTS24sbGVlKT0+e3ZhciBvZWU9anYoKSxhZWU9UHN0KCksWVplPVl2KCksalplPUJzdCgpLFhaZT1uZWUoKSwkWmU9WkIoKSxLWmU9MSxaWmU9MixKWmU9IltvYmplY3QgQm9vbGVhbl0iLFFaZT0iW29iamVjdCBEYXRlXSIsdEplPSJbb2JqZWN0IEVycm9yXSIsZUplPSJbb2JqZWN0IE1hcF0iLHJKZT0iW29iamVjdCBOdW1iZXJdIixuSmU9IltvYmplY3QgUmVnRXhwXSIsaUplPSJbb2JqZWN0IFNldF0iLG9KZT0iW29iamVjdCBTdHJpbmddIixhSmU9IltvYmplY3QgU3ltYm9sXSIsc0plPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsbEplPSJbb2JqZWN0IERhdGFWaWV3XSIsc2VlPW9lZT9vZWUucHJvdG90eXBlOnZvaWQgMCxIc3Q9c2VlP3NlZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBjSmUoZSx0LHIsbixpLG8sYSl7c3dpdGNoKHIpe2Nhc2UgbEplOmlmKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHxlLmJ5dGVPZmZzZXQhPXQuYnl0ZU9mZnNldClyZXR1cm4hMTtlPWUuYnVmZmVyLHQ9dC5idWZmZXI7Y2FzZSBzSmU6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IW8obmV3IGFlZShlKSxuZXcgYWVlKHQpKSk7Y2FzZSBKWmU6Y2FzZSBRWmU6Y2FzZSBySmU6cmV0dXJuIFlaZSgrZSwrdCk7Y2FzZSB0SmU6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIG5KZTpjYXNlIG9KZTpyZXR1cm4gZT09dCsiIjtjYXNlIGVKZTp2YXIgcz1YWmU7Y2FzZSBpSmU6dmFyIGw9biZLWmU7aWYoc3x8KHM9JFplKSxlLnNpemUhPXQuc2l6ZSYmIWwpcmV0dXJuITE7dmFyIGM9YS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtufD1aWmUsYS5zZXQoZSx0KTt2YXIgdT1qWmUocyhlKSxzKHQpLG4saSxvLGEpO3JldHVybiBhLmRlbGV0ZShlKSx1O2Nhc2UgYUplOmlmKEhzdClyZXR1cm4gSHN0LmNhbGwoZSk9PUhzdC5jYWxsKHQpfXJldHVybiExfWxlZS5leHBvcnRzPWNKZX0pO3ZhciBmZWU9SCgoTUtuLGhlZSk9Pnt2YXIgdWVlPXdzdCgpLHVKZT0xLGhKZT1PYmplY3QucHJvdG90eXBlLGZKZT1oSmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gcEplKGUsdCxyLG4saSxvKXt2YXIgYT1yJnVKZSxzPXVlZShlKSxsPXMubGVuZ3RoLGM9dWVlKHQpLHU9Yy5sZW5ndGg7aWYobCE9dSYmIWEpcmV0dXJuITE7Zm9yKHZhciBoPWw7aC0tOyl7dmFyIGY9c1toXTtpZighKGE/ZiBpbiB0OmZKZS5jYWxsKHQsZikpKXJldHVybiExfXZhciBwPW8uZ2V0KGUpLGQ9by5nZXQodCk7aWYocCYmZClyZXR1cm4gcD09dCYmZD09ZTt2YXIgZz0hMDtvLnNldChlLHQpLG8uc2V0KHQsZSk7Zm9yKHZhciBfPWE7KytoPGw7KXtmPXNbaF07dmFyIHk9ZVtmXSx4PXRbZl07aWYobil2YXIgYj1hP24oeCx5LGYsdCxlLG8pOm4oeSx4LGYsZSx0LG8pO2lmKCEoYj09PXZvaWQgMD95PT09eHx8aSh5LHgscixuLG8pOmIpKXtnPSExO2JyZWFrfV98fChfPWY9PSJjb25zdHJ1Y3RvciIpfWlmKGcmJiFfKXt2YXIgUz1lLmNvbnN0cnVjdG9yLEM9dC5jb25zdHJ1Y3RvcjtTIT1DJiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEodHlwZW9mIFM9PSJmdW5jdGlvbiImJlMgaW5zdGFuY2VvZiBTJiZ0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQyBpbnN0YW5jZW9mIEMpJiYoZz0hMSl9cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLGd9aGVlLmV4cG9ydHM9cEplfSk7dmFyIHhlZT1IKChFS24sdmVlKT0+e3ZhciBWc3Q9UDQoKSxkSmU9QnN0KCksbUplPWNlZSgpLGdKZT1mZWUoKSxwZWU9S3YoKSxkZWU9VGkoKSxtZWU9WHYoKSxfSmU9WVMoKSx5SmU9MSxnZWU9IltvYmplY3QgQXJndW1lbnRzXSIsX2VlPSJbb2JqZWN0IEFycmF5XSIsSkI9IltvYmplY3QgT2JqZWN0XSIsdkplPU9iamVjdC5wcm90b3R5cGUseWVlPXZKZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB4SmUoZSx0LHIsbixpLG8pe3ZhciBhPWRlZShlKSxzPWRlZSh0KSxsPWE/X2VlOnBlZShlKSxjPXM/X2VlOnBlZSh0KTtsPWw9PWdlZT9KQjpsLGM9Yz09Z2VlP0pCOmM7dmFyIHU9bD09SkIsaD1jPT1KQixmPWw9PWM7aWYoZiYmbWVlKGUpKXtpZighbWVlKHQpKXJldHVybiExO2E9ITAsdT0hMX1pZihmJiYhdSlyZXR1cm4gb3x8KG89bmV3IFZzdCksYXx8X0plKGUpP2RKZShlLHQscixuLGksbyk6bUplKGUsdCxsLHIsbixpLG8pO2lmKCEociZ5SmUpKXt2YXIgcD11JiZ5ZWUuY2FsbChlLCJfX3dyYXBwZWRfXyIpLGQ9aCYmeWVlLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihwfHxkKXt2YXIgZz1wP2UudmFsdWUoKTplLF89ZD90LnZhbHVlKCk6dDtyZXR1cm4gb3x8KG89bmV3IFZzdCksaShnLF8scixuLG8pfX1yZXR1cm4gZj8ob3x8KG89bmV3IFZzdCksZ0plKGUsdCxyLG4saSxvKSk6ITF9dmVlLmV4cG9ydHM9eEplfSk7dmFyIFVzdD1IKChUS24sU2VlKT0+e3ZhciBiSmU9eGVlKCksYmVlPVl1KCk7ZnVuY3Rpb24gd2VlKGUsdCxyLG4saSl7cmV0dXJuIGU9PT10PyEwOmU9PW51bGx8fHQ9PW51bGx8fCFiZWUoZSkmJiFiZWUodCk/ZSE9PWUmJnQhPT10OmJKZShlLHQscixuLHdlZSxpKX1TZWUuZXhwb3J0cz13ZWV9KTt2YXIgRWVlPUgoKENLbixNZWUpPT57dmFyIHdKZT1QNCgpLFNKZT1Vc3QoKSxNSmU9MSxFSmU9MjtmdW5jdGlvbiBUSmUoZSx0LHIsbil7dmFyIGk9ci5sZW5ndGgsbz1pLGE9IW47aWYoZT09bnVsbClyZXR1cm4hbztmb3IoZT1PYmplY3QoZSk7aS0tOyl7dmFyIHM9cltpXTtpZihhJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KytpPG87KXtzPXJbaV07dmFyIGw9c1swXSxjPWVbbF0sdT1zWzFdO2lmKGEmJnNbMl0pe2lmKGM9PT12b2lkIDAmJiEobCBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBoPW5ldyB3SmU7aWYobil2YXIgZj1uKGMsdSxsLGUsdCxoKTtpZighKGY9PT12b2lkIDA/U0plKHUsYyxNSmV8RUplLG4saCk6ZikpcmV0dXJuITF9fXJldHVybiEwfU1lZS5leHBvcnRzPVRKZX0pO3ZhciBxc3Q9SCgoQUtuLFRlZSk9Pnt2YXIgQ0plPU1sKCk7ZnVuY3Rpb24gQUplKGUpe3JldHVybiBlPT09ZSYmIUNKZShlKX1UZWUuZXhwb3J0cz1BSmV9KTt2YXIgQWVlPUgoKFBLbixDZWUpPT57dmFyIFBKZT1xc3QoKSxJSmU9QWQoKTtmdW5jdGlvbiBMSmUoZSl7Zm9yKHZhciB0PUlKZShlKSxyPXQubGVuZ3RoO3ItLTspe3ZhciBuPXRbcl0saT1lW25dO3Rbcl09W24saSxQSmUoaSldfXJldHVybiB0fUNlZS5leHBvcnRzPUxKZX0pO3ZhciBHc3Q9SCgoSUtuLFBlZSk9PntmdW5jdGlvbiBrSmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6cltlXT09PXQmJih0IT09dm9pZCAwfHxlIGluIE9iamVjdChyKSl9fVBlZS5leHBvcnRzPWtKZX0pO3ZhciBMZWU9SCgoTEtuLEllZSk9Pnt2YXIgUkplPUVlZSgpLE5KZT1BZWUoKSxESmU9R3N0KCk7ZnVuY3Rpb24gT0plKGUpe3ZhciB0PU5KZShlKTtyZXR1cm4gdC5sZW5ndGg9PTEmJnRbMF1bMl0/REplKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1lfHxSSmUocixlLHQpfX1JZWUuZXhwb3J0cz1PSmV9KTt2YXIgWnY9SCgoa0tuLGtlZSk9Pnt2YXIgekplPXMwKCksRkplPVl1KCksQkplPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIEhKZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wifHxGSmUoZSkmJnpKZShlKT09QkplfWtlZS5leHBvcnRzPUhKZX0pO3ZhciBRQj1IKChSS24sUmVlKT0+e3ZhciBWSmU9VGkoKSxVSmU9WnYoKSxxSmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sR0plPS9eXHcqJC87ZnVuY3Rpb24gV0plKGUsdCl7aWYoVkplKGUpKXJldHVybiExO3ZhciByPXR5cGVvZiBlO3JldHVybiByPT0ibnVtYmVyInx8cj09InN5bWJvbCJ8fHI9PSJib29sZWFuInx8ZT09bnVsbHx8VUplKGUpPyEwOkdKZS50ZXN0KGUpfHwhcUplLnRlc3QoZSl8fHQhPW51bGwmJmUgaW4gT2JqZWN0KHQpfVJlZS5leHBvcnRzPVdKZX0pO3ZhciBPZWU9SCgoTktuLERlZSk9Pnt2YXIgTmVlPUZCKCksWUplPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtmdW5jdGlvbiBXc3QoZSx0KXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uInx8dCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihZSmUpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9dD90LmFwcGx5KHRoaXMsbik6blswXSxvPXIuY2FjaGU7aWYoby5oYXMoaSkpcmV0dXJuIG8uZ2V0KGkpO3ZhciBhPWUuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1vLnNldChpLGEpfHxvLGF9O3JldHVybiByLmNhY2hlPW5ldyhXc3QuQ2FjaGV8fE5lZSkscn1Xc3QuQ2FjaGU9TmVlO0RlZS5leHBvcnRzPVdzdH0pO3ZhciBGZWU9SCgoREtuLHplZSk9Pnt2YXIgakplPU9lZSgpLFhKZT01MDA7ZnVuY3Rpb24gJEplKGUpe3ZhciB0PWpKZShlLGZ1bmN0aW9uKG4pe3JldHVybiByLnNpemU9PT1YSmUmJnIuY2xlYXIoKSxufSkscj10LmNhY2hlO3JldHVybiB0fXplZS5leHBvcnRzPSRKZX0pO3ZhciBIZWU9SCgoT0tuLEJlZSk9Pnt2YXIgS0plPUZlZSgpLFpKZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxKSmU9L1xcKFxcKT8vZyxRSmU9S0plKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT00NiYmdC5wdXNoKCIiKSxlLnJlcGxhY2UoWkplLGZ1bmN0aW9uKHIsbixpLG8pe3QucHVzaChpP28ucmVwbGFjZShKSmUsIiQxIik6bnx8cil9KSx0fSk7QmVlLmV4cG9ydHM9UUplfSk7dmFyIFY0PUgoKHpLbixWZWUpPT57ZnVuY3Rpb24gdFFlKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09dChlW3JdLHIsZSk7cmV0dXJuIGl9VmVlLmV4cG9ydHM9dFFlfSk7dmFyIGplZT1IKChGS24sWWVlKT0+e3ZhciBVZWU9anYoKSxlUWU9VjQoKSxyUWU9VGkoKSxuUWU9WnYoKSxpUWU9MS8wLHFlZT1VZWU/VWVlLnByb3RvdHlwZTp2b2lkIDAsR2VlPXFlZT9xZWUudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIFdlZShlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGU7aWYoclFlKGUpKXJldHVybiBlUWUoZSxXZWUpKyIiO2lmKG5RZShlKSlyZXR1cm4gR2VlP0dlZS5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0taVFlPyItMCI6dH1ZZWUuZXhwb3J0cz1XZWV9KTt2YXIgWXN0PUgoKEJLbixYZWUpPT57dmFyIG9RZT1qZWUoKTtmdW5jdGlvbiBhUWUoZSl7cmV0dXJuIGU9PW51bGw/IiI6b1FlKGUpfVhlZS5leHBvcnRzPWFRZX0pO3ZhciBVND1IKChIS24sJGVlKT0+e3ZhciBzUWU9VGkoKSxsUWU9UUIoKSxjUWU9SGVlKCksdVFlPVlzdCgpO2Z1bmN0aW9uIGhRZShlLHQpe3JldHVybiBzUWUoZSk/ZTpsUWUoZSx0KT9bZV06Y1FlKHVRZShlKSl9JGVlLmV4cG9ydHM9aFFlfSk7dmFyICRTPUgoKFZLbixLZWUpPT57dmFyIGZRZT1adigpLHBRZT0xLzA7ZnVuY3Rpb24gZFFlKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nInx8ZlFlKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tcFFlPyItMCI6dH1LZWUuZXhwb3J0cz1kUWV9KTt2YXIgcTQ9SCgoVUtuLFplZSk9Pnt2YXIgbVFlPVU0KCksZ1FlPSRTKCk7ZnVuY3Rpb24gX1FlKGUsdCl7dD1tUWUodCxlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO2UhPW51bGwmJnI8bjspZT1lW2dRZSh0W3IrK10pXTtyZXR1cm4gciYmcj09bj9lOnZvaWQgMH1aZWUuZXhwb3J0cz1fUWV9KTt2YXIgUWVlPUgoKHFLbixKZWUpPT57dmFyIHlRZT1xNCgpO2Z1bmN0aW9uIHZRZShlLHQscil7dmFyIG49ZT09bnVsbD92b2lkIDA6eVFlKGUsdCk7cmV0dXJuIG49PT12b2lkIDA/cjpufUplZS5leHBvcnRzPXZRZX0pO3ZhciBlcmU9SCgoR0tuLHRyZSk9PntmdW5jdGlvbiB4UWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmdCBpbiBPYmplY3QoZSl9dHJlLmV4cG9ydHM9eFFlfSk7dmFyIGpzdD1IKChXS24scnJlKT0+e3ZhciBiUWU9VTQoKSx3UWU9cVMoKSxTUWU9VGkoKSxNUWU9UjQoKSxFUWU9SEIoKSxUUWU9JFMoKTtmdW5jdGlvbiBDUWUoZSx0LHIpe3Q9YlFlKHQsZSk7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGgsbz0hMTsrK248aTspe3ZhciBhPVRRZSh0W25dKTtpZighKG89ZSE9bnVsbCYmcihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIG98fCsrbiE9aT9vOihpPWU9PW51bGw/MDplLmxlbmd0aCwhIWkmJkVRZShpKSYmTVFlKGEsaSkmJihTUWUoZSl8fHdRZShlKSkpfXJyZS5leHBvcnRzPUNRZX0pO3ZhciBYc3Q9SCgoWUtuLG5yZSk9Pnt2YXIgQVFlPWVyZSgpLFBRZT1qc3QoKTtmdW5jdGlvbiBJUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmUFFlKGUsdCxBUWUpfW5yZS5leHBvcnRzPUlRZX0pO3ZhciBvcmU9SCgoaktuLGlyZSk9Pnt2YXIgTFFlPVVzdCgpLGtRZT1RZWUoKSxSUWU9WHN0KCksTlFlPVFCKCksRFFlPXFzdCgpLE9RZT1Hc3QoKSx6UWU9JFMoKSxGUWU9MSxCUWU9MjtmdW5jdGlvbiBIUWUoZSx0KXtyZXR1cm4gTlFlKGUpJiZEUWUodCk/T1FlKHpRZShlKSx0KTpmdW5jdGlvbihyKXt2YXIgbj1rUWUocixlKTtyZXR1cm4gbj09PXZvaWQgMCYmbj09PXQ/UlFlKHIsZSk6TFFlKHQsbixGUWV8QlFlKX19aXJlLmV4cG9ydHM9SFFlfSk7dmFyICRzdD1IKChYS24sYXJlKT0+e2Z1bmN0aW9uIFZRZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dm9pZCAwOnRbZV19fWFyZS5leHBvcnRzPVZRZX0pO3ZhciBscmU9SCgoJEtuLHNyZSk9Pnt2YXIgVVFlPXE0KCk7ZnVuY3Rpb24gcVFlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVVFlKHQsZSl9fXNyZS5leHBvcnRzPXFRZX0pO3ZhciB1cmU9SCgoS0tuLGNyZSk9Pnt2YXIgR1FlPSRzdCgpLFdRZT1scmUoKSxZUWU9UUIoKSxqUWU9JFMoKTtmdW5jdGlvbiBYUWUoZSl7cmV0dXJuIFlRZShlKT9HUWUoalFlKGUpKTpXUWUoZSl9Y3JlLmV4cG9ydHM9WFFlfSk7dmFyIEhmPUgoKFpLbixocmUpPT57dmFyICRRZT1MZWUoKSxLUWU9b3JlKCksWlFlPXUwKCksSlFlPVRpKCksUVFlPXVyZSgpO2Z1bmN0aW9uIHR0cihlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT1udWxsP1pRZTp0eXBlb2YgZT09Im9iamVjdCI/SlFlKGUpP0tRZShlWzBdLGVbMV0pOiRRZShlKTpRUWUoZSl9aHJlLmV4cG9ydHM9dHRyfSk7dmFyIEtzdD1IKChKS24sZnJlKT0+e3ZhciBldHI9eXN0KCkscnRyPVl0ZSgpLG50cj1IZigpLGl0cj1UaSgpO2Z1bmN0aW9uIG90cihlLHQpe3ZhciByPWl0cihlKT9ldHI6cnRyO3JldHVybiByKGUsbnRyKHQsMykpfWZyZS5leHBvcnRzPW90cn0pO3ZhciBkcmU9SCgoUUtuLHByZSk9Pnt2YXIgYXRyPU9iamVjdC5wcm90b3R5cGUsc3RyPWF0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBsdHIoZSx0KXtyZXR1cm4gZSE9bnVsbCYmc3RyLmNhbGwoZSx0KX1wcmUuZXhwb3J0cz1sdHJ9KTt2YXIgWnN0PUgoKHRabixtcmUpPT57dmFyIGN0cj1kcmUoKSx1dHI9anN0KCk7ZnVuY3Rpb24gaHRyKGUsdCl7cmV0dXJuIGUhPW51bGwmJnV0cihlLHQsY3RyKX1tcmUuZXhwb3J0cz1odHJ9KTt2YXIgX3JlPUgoKGVabixncmUpPT57dmFyIGZ0cj1VQigpLHB0cj1LdigpLGR0cj1xUygpLG10cj1UaSgpLGd0cj1CZigpLF90cj1YdigpLHl0cj16NCgpLHZ0cj1ZUygpLHh0cj0iW29iamVjdCBNYXBdIixidHI9IltvYmplY3QgU2V0XSIsd3RyPU9iamVjdC5wcm90b3R5cGUsU3RyPXd0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBNdHIoZSl7aWYoZT09bnVsbClyZXR1cm4hMDtpZihndHIoZSkmJihtdHIoZSl8fHR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGUuc3BsaWNlPT0iZnVuY3Rpb24ifHxfdHIoZSl8fHZ0cihlKXx8ZHRyKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9cHRyKGUpO2lmKHQ9PXh0cnx8dD09YnRyKXJldHVybiFlLnNpemU7aWYoeXRyKGUpKXJldHVybiFmdHIoZSkubGVuZ3RoO2Zvcih2YXIgciBpbiBlKWlmKFN0ci5jYWxsKGUscikpcmV0dXJuITE7cmV0dXJuITB9Z3JlLmV4cG9ydHM9TXRyfSk7dmFyIEpzdD1IKChyWm4seXJlKT0+e2Z1bmN0aW9uIEV0cihlKXtyZXR1cm4gZT09PXZvaWQgMH15cmUuZXhwb3J0cz1FdHJ9KTt2YXIgUXN0PUgoKG5abix2cmUpPT57dmFyIFR0cj1INCgpLEN0cj1CZigpO2Z1bmN0aW9uIEF0cihlLHQpe3ZhciByPS0xLG49Q3RyKGUpP0FycmF5KGUubGVuZ3RoKTpbXTtyZXR1cm4gVHRyKGUsZnVuY3Rpb24oaSxvLGEpe25bKytyXT10KGksbyxhKX0pLG59dnJlLmV4cG9ydHM9QXRyfSk7dmFyIHRsdD1IKChpWm4seHJlKT0+e3ZhciBQdHI9VjQoKSxJdHI9SGYoKSxMdHI9UXN0KCksa3RyPVRpKCk7ZnVuY3Rpb24gUnRyKGUsdCl7dmFyIHI9a3RyKGUpP1B0cjpMdHI7cmV0dXJuIHIoZSxJdHIodCwzKSl9eHJlLmV4cG9ydHM9UnRyfSk7dmFyIHdyZT1IKChvWm4sYnJlKT0+e2Z1bmN0aW9uIE50cihlLHQscixuKXt2YXIgaT0tMSxvPWU9PW51bGw/MDplLmxlbmd0aDtmb3IobiYmbyYmKHI9ZVsrK2ldKTsrK2k8bzspcj10KHIsZVtpXSxpLGUpO3JldHVybiByfWJyZS5leHBvcnRzPU50cn0pO3ZhciBNcmU9SCgoYVpuLFNyZSk9PntmdW5jdGlvbiBEdHIoZSx0LHIsbixpKXtyZXR1cm4gaShlLGZ1bmN0aW9uKG8sYSxzKXtyPW4/KG49ITEsbyk6dChyLG8sYSxzKX0pLHJ9U3JlLmV4cG9ydHM9RHRyfSk7dmFyIGVsdD1IKChzWm4sRXJlKT0+e3ZhciBPdHI9d3JlKCksenRyPUg0KCksRnRyPUhmKCksQnRyPU1yZSgpLEh0cj1UaSgpO2Z1bmN0aW9uIFZ0cihlLHQscil7dmFyIG49SHRyKGUpP090cjpCdHIsaT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIG4oZSxGdHIodCw0KSxyLGksenRyKX1FcmUuZXhwb3J0cz1WdHJ9KTt2YXIgQ3JlPUgoKGxabixUcmUpPT57dmFyIFV0cj1zMCgpLHF0cj1UaSgpLEd0cj1ZdSgpLFd0cj0iW29iamVjdCBTdHJpbmddIjtmdW5jdGlvbiBZdHIoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nInx8IXF0cihlKSYmR3RyKGUpJiZVdHIoZSk9PVd0cn1UcmUuZXhwb3J0cz1ZdHJ9KTt2YXIgUHJlPUgoKGNabixBcmUpPT57dmFyIGp0cj0kc3QoKSxYdHI9anRyKCJsZW5ndGgiKTtBcmUuZXhwb3J0cz1YdHJ9KTt2YXIgTHJlPUgoKHVabixJcmUpPT57dmFyICR0cj0iXFx1ZDgwMC1cXHVkZmZmIixLdHI9IlxcdTAzMDAtXFx1MDM2ZiIsWnRyPSJcXHVmZTIwLVxcdWZlMmYiLEp0cj0iXFx1MjBkMC1cXHUyMGZmIixRdHI9S3RyK1p0citKdHIsdGVyPSJcXHVmZTBlXFx1ZmUwZiIsZWVyPSJcXHUyMDBkIixyZXI9UmVnRXhwKCJbIitlZXIrJHRyK1F0cit0ZXIrIl0iKTtmdW5jdGlvbiBuZXIoZSl7cmV0dXJuIHJlci50ZXN0KGUpfUlyZS5leHBvcnRzPW5lcn0pO3ZhciBIcmU9SCgoaFpuLEJyZSk9Pnt2YXIgUnJlPSJcXHVkODAwLVxcdWRmZmYiLGllcj0iXFx1MDMwMC1cXHUwMzZmIixvZXI9IlxcdWZlMjAtXFx1ZmUyZiIsYWVyPSJcXHUyMGQwLVxcdTIwZmYiLHNlcj1pZXIrb2VyK2FlcixsZXI9IlxcdWZlMGVcXHVmZTBmIixjZXI9IlsiK1JyZSsiXSIscmx0PSJbIitzZXIrIl0iLG5sdD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIix1ZXI9Iig/OiIrcmx0KyJ8IitubHQrIikiLE5yZT0iW14iK1JyZSsiXSIsRHJlPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixPcmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGhlcj0iXFx1MjAwZCIsenJlPXVlcisiPyIsRnJlPSJbIitsZXIrIl0/IixmZXI9Iig/OiIraGVyKyIoPzoiK1tOcmUsRHJlLE9yZV0uam9pbigifCIpKyIpIitGcmUrenJlKyIpKiIscGVyPUZyZSt6cmUrZmVyLGRlcj0iKD86IitbTnJlK3JsdCsiPyIscmx0LERyZSxPcmUsY2VyXS5qb2luKCJ8IikrIikiLGtyZT1SZWdFeHAobmx0KyIoPz0iK25sdCsiKXwiK2RlcitwZXIsImciKTtmdW5jdGlvbiBtZXIoZSl7Zm9yKHZhciB0PWtyZS5sYXN0SW5kZXg9MDtrcmUudGVzdChlKTspKyt0O3JldHVybiB0fUJyZS5leHBvcnRzPW1lcn0pO3ZhciBVcmU9SCgoZlpuLFZyZSk9Pnt2YXIgZ2VyPVByZSgpLF9lcj1McmUoKSx5ZXI9SHJlKCk7ZnVuY3Rpb24gdmVyKGUpe3JldHVybiBfZXIoZSk/eWVyKGUpOmdlcihlKX1WcmUuZXhwb3J0cz12ZXJ9KTt2YXIgR3JlPUgoKHBabixxcmUpPT57dmFyIHhlcj1VQigpLGJlcj1LdigpLHdlcj1CZigpLFNlcj1DcmUoKSxNZXI9VXJlKCksRWVyPSJbb2JqZWN0IE1hcF0iLFRlcj0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBDZXIoZSl7aWYoZT09bnVsbClyZXR1cm4gMDtpZih3ZXIoZSkpcmV0dXJuIFNlcihlKT9NZXIoZSk6ZS5sZW5ndGg7dmFyIHQ9YmVyKGUpO3JldHVybiB0PT1FZXJ8fHQ9PVRlcj9lLnNpemU6eGVyKGUpLmxlbmd0aH1xcmUuZXhwb3J0cz1DZXJ9KTt2YXIgWXJlPUgoKGRabixXcmUpPT57dmFyIEFlcj1CQigpLFBlcj1Mc3QoKSxJZXI9JEIoKSxMZXI9SGYoKSxrZXI9QjQoKSxSZXI9VGkoKSxOZXI9WHYoKSxEZXI9RlMoKSxPZXI9TWwoKSx6ZXI9WVMoKTtmdW5jdGlvbiBGZXIoZSx0LHIpe3ZhciBuPVJlcihlKSxpPW58fE5lcihlKXx8emVyKGUpO2lmKHQ9TGVyKHQsNCkscj09bnVsbCl7dmFyIG89ZSYmZS5jb25zdHJ1Y3RvcjtpP3I9bj9uZXcgbzpbXTpPZXIoZSk/cj1EZXIobyk/UGVyKGtlcihlKSk6e306cj17fX1yZXR1cm4oaT9BZXI6SWVyKShlLGZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdChyLGEscyxsKX0pLHJ9V3JlLmV4cG9ydHM9RmVyfSk7dmFyIEtyZT1IKChtWm4sJHJlKT0+e3ZhciBqcmU9anYoKSxCZXI9cVMoKSxIZXI9VGkoKSxYcmU9anJlP2pyZS5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIFZlcihlKXtyZXR1cm4gSGVyKGUpfHxCZXIoZSl8fCEhKFhyZSYmZSYmZVtYcmVdKX0kcmUuZXhwb3J0cz1WZXJ9KTt2YXIgdEg9SCgoZ1puLEpyZSk9Pnt2YXIgVWVyPUdCKCkscWVyPUtyZSgpO2Z1bmN0aW9uIFpyZShlLHQscixuLGkpe3ZhciBvPS0xLGE9ZS5sZW5ndGg7Zm9yKHJ8fChyPXFlciksaXx8KGk9W10pOysrbzxhOyl7dmFyIHM9ZVtvXTt0PjAmJnIocyk/dD4xP1pyZShzLHQtMSxyLG4saSk6VWVyKGkscyk6bnx8KGlbaS5sZW5ndGhdPXMpfXJldHVybiBpfUpyZS5leHBvcnRzPVpyZX0pO3ZhciB0bmU9SCgoX1puLFFyZSk9PntmdW5jdGlvbiBHZXIoZSx0LHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxyWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIGUuYXBwbHkodCxyKX1RcmUuZXhwb3J0cz1HZXJ9KTt2YXIgaWx0PUgoKHlabixybmUpPT57dmFyIFdlcj10bmUoKSxlbmU9TWF0aC5tYXg7ZnVuY3Rpb24gWWVyKGUsdCxyKXtyZXR1cm4gdD1lbmUodD09PXZvaWQgMD9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLGk9LTEsbz1lbmUobi5sZW5ndGgtdCwwKSxhPUFycmF5KG8pOysraTxvOylhW2ldPW5bdCtpXTtpPS0xO2Zvcih2YXIgcz1BcnJheSh0KzEpOysraTx0OylzW2ldPW5baV07cmV0dXJuIHNbdF09cihhKSxXZXIoZSx0aGlzLHMpfX1ybmUuZXhwb3J0cz1ZZXJ9KTt2YXIgb25lPUgoKHZabixpbmUpPT57dmFyIGplcj1qQigpLG5uZT1mc3QoKSxYZXI9dTAoKSwkZXI9bm5lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIG5uZShlLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmplcih0KSx3cml0YWJsZTohMH0pfTpYZXI7aW5lLmV4cG9ydHM9JGVyfSk7dmFyIHNuZT1IKCh4Wm4sYW5lKT0+e3ZhciBLZXI9ODAwLFplcj0xNixKZXI9RGF0ZS5ub3c7ZnVuY3Rpb24gUWVyKGUpe3ZhciB0PTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPUplcigpLGk9WmVyLShuLXIpO2lmKHI9bixpPjApe2lmKCsrdD49S2VyKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fWFuZS5leHBvcnRzPVFlcn0pO3ZhciBvbHQ9SCgoYlpuLGxuZSk9Pnt2YXIgdHJyPW9uZSgpLGVycj1zbmUoKSxycnI9ZXJyKHRycik7bG5lLmV4cG9ydHM9cnJyfSk7dmFyIEc0PUgoKHdabixjbmUpPT57dmFyIG5ycj11MCgpLGlycj1pbHQoKSxvcnI9b2x0KCk7ZnVuY3Rpb24gYXJyKGUsdCl7cmV0dXJuIG9ycihpcnIoZSx0LG5yciksZSsiIil9Y25lLmV4cG9ydHM9YXJyfSk7dmFyIGFsdD1IKChTWm4sdW5lKT0+e2Z1bmN0aW9uIHNycihlLHQscixuKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1yKyhuPzE6LTEpO24/by0tOisrbzxpOylpZih0KGVbb10sbyxlKSlyZXR1cm4gbztyZXR1cm4tMX11bmUuZXhwb3J0cz1zcnJ9KTt2YXIgZm5lPUgoKE1abixobmUpPT57ZnVuY3Rpb24gbHJyKGUpe3JldHVybiBlIT09ZX1obmUuZXhwb3J0cz1scnJ9KTt2YXIgZG5lPUgoKEVabixwbmUpPT57ZnVuY3Rpb24gY3JyKGUsdCxyKXtmb3IodmFyIG49ci0xLGk9ZS5sZW5ndGg7KytuPGk7KWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfXBuZS5leHBvcnRzPWNycn0pO3ZhciBnbmU9SCgoVFpuLG1uZSk9Pnt2YXIgdXJyPWFsdCgpLGhycj1mbmUoKSxmcnI9ZG5lKCk7ZnVuY3Rpb24gcHJyKGUsdCxyKXtyZXR1cm4gdD09PXQ/ZnJyKGUsdCxyKTp1cnIoZSxocnIscil9bW5lLmV4cG9ydHM9cHJyfSk7dmFyIHluZT1IKChDWm4sX25lKT0+e3ZhciBkcnI9Z25lKCk7ZnVuY3Rpb24gbXJyKGUsdCl7dmFyIHI9ZT09bnVsbD8wOmUubGVuZ3RoO3JldHVybiEhciYmZHJyKGUsdCwwKT4tMX1fbmUuZXhwb3J0cz1tcnJ9KTt2YXIgeG5lPUgoKEFabix2bmUpPT57ZnVuY3Rpb24gZ3JyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lPT1udWxsPzA6ZS5sZW5ndGg7KytuPGk7KWlmKHIodCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hMX12bmUuZXhwb3J0cz1ncnJ9KTt2YXIgd25lPUgoKFBabixibmUpPT57ZnVuY3Rpb24gX3JyKCl7fWJuZS5leHBvcnRzPV9ycn0pO3ZhciBNbmU9SCgoSVpuLFNuZSk9Pnt2YXIgc2x0PVNzdCgpLHlycj13bmUoKSx2cnI9WkIoKSx4cnI9MS8wLGJycj1zbHQmJjEvdnJyKG5ldyBzbHQoWywtMF0pKVsxXT09eHJyP2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgc2x0KGUpfTp5cnI7U25lLmV4cG9ydHM9YnJyfSk7dmFyIFRuZT1IKChMWm4sRW5lKT0+e3ZhciB3cnI9enN0KCksU3JyPXluZSgpLE1ycj14bmUoKSxFcnI9RnN0KCksVHJyPU1uZSgpLENycj1aQigpLEFycj0yMDA7ZnVuY3Rpb24gUHJyKGUsdCxyKXt2YXIgbj0tMSxpPVNycixvPWUubGVuZ3RoLGE9ITAscz1bXSxsPXM7aWYocilhPSExLGk9TXJyO2Vsc2UgaWYobz49QXJyKXt2YXIgYz10P251bGw6VHJyKGUpO2lmKGMpcmV0dXJuIENycihjKTthPSExLGk9RXJyLGw9bmV3IHdycn1lbHNlIGw9dD9bXTpzO3Q6Zm9yKDsrK248bzspe3ZhciB1PWVbbl0saD10P3QodSk6dTtpZih1PXJ8fHUhPT0wP3U6MCxhJiZoPT09aCl7Zm9yKHZhciBmPWwubGVuZ3RoO2YtLTspaWYobFtmXT09PWgpY29udGludWUgdDt0JiZsLnB1c2goaCkscy5wdXNoKHUpfWVsc2UgaShsLGgscil8fChsIT09cyYmbC5wdXNoKGgpLHMucHVzaCh1KSl9cmV0dXJuIHN9RW5lLmV4cG9ydHM9UHJyfSk7dmFyIGxsdD1IKChrWm4sQ25lKT0+e3ZhciBJcnI9QmYoKSxMcnI9WXUoKTtmdW5jdGlvbiBrcnIoZSl7cmV0dXJuIExycihlKSYmSXJyKGUpfUNuZS5leHBvcnRzPWtycn0pO3ZhciBQbmU9SCgoUlpuLEFuZSk9Pnt2YXIgUnJyPXRIKCksTnJyPUc0KCksRHJyPVRuZSgpLE9ycj1sbHQoKSx6cnI9TnJyKGZ1bmN0aW9uKGUpe3JldHVybiBEcnIoUnJyKGUsMSxPcnIsITApKX0pO0FuZS5leHBvcnRzPXpycn0pO3ZhciBMbmU9SCgoTlpuLEluZSk9Pnt2YXIgRnJyPVY0KCk7ZnVuY3Rpb24gQnJyKGUsdCl7cmV0dXJuIEZycih0LGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9SW5lLmV4cG9ydHM9QnJyfSk7dmFyIGNsdD1IKChEWm4sa25lKT0+e3ZhciBIcnI9TG5lKCksVnJyPUFkKCk7ZnVuY3Rpb24gVXJyKGUpe3JldHVybiBlPT1udWxsP1tdOkhycihlLFZycihlKSl9a25lLmV4cG9ydHM9VXJyfSk7dmFyIEVsPUgoKE9abixSbmUpPT57dmFyIGVIO2lmKHR5cGVvZiBFeD09ImZ1bmN0aW9uIil0cnl7ZUg9e2Nsb25lOmt0ZSgpLGNvbnN0YW50OmpCKCksZWFjaDpPc3QoKSxmaWx0ZXI6S3N0KCksaGFzOlpzdCgpLGlzQXJyYXk6VGkoKSxpc0VtcHR5Ol9yZSgpLGlzRnVuY3Rpb246RlMoKSxpc1VuZGVmaW5lZDpKc3QoKSxrZXlzOkFkKCksbWFwOnRsdCgpLHJlZHVjZTplbHQoKSxzaXplOkdyZSgpLHRyYW5zZm9ybTpZcmUoKSx1bmlvbjpQbmUoKSx2YWx1ZXM6Y2x0KCl9fWNhdGNoKGUpe31lSHx8KGVIPXdpbmRvdy5fKTtSbmUuZXhwb3J0cz1lSH0pO3ZhciBySD1IKChGWm4sem5lKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgamU9RWwoKTt6bmUuZXhwb3J0cz1jcjt2YXIgcXJyPSJcMCIsSnY9IlwwIixObmU9IgEiO2Z1bmN0aW9uIGNyKGUpe3RoaXMuX2lzRGlyZWN0ZWQ9amUuaGFzKGUsImRpcmVjdGVkIik/ZS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9amUuaGFzKGUsIm11bHRpZ3JhcGgiKT9lLm11bHRpZ3JhcGg6ITEsdGhpcy5faXNDb21wb3VuZD1qZS5oYXMoZSwiY29tcG91bmQiKT9lLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0p2XT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1jci5wcm90b3R5cGUuX25vZGVDb3VudD0wO2NyLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7Y3IucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH07Y3IucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9O2NyLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9O2NyLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbGFiZWw9ZSx0aGlzfTtjci5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9O2NyLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBqZS5pc0Z1bmN0aW9uKGUpfHwoZT1qZS5jb25zdGFudChlKSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWUsdGhpc307Y3IucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9O2NyLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiBqZS5rZXlzKHRoaXMuX25vZGVzKX07Y3IucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX2luW3RdKX0pfTtjci5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX291dFt0XSl9KX07Y3IucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLG49dGhpcztyZXR1cm4gamUuZWFjaChlLGZ1bmN0aW9uKGkpe3IubGVuZ3RoPjE/bi5zZXROb2RlKGksdCk6bi5zZXROb2RlKGkpfSksdGhpc307Y3IucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1tlXT10KSx0aGlzKToodGhpcy5fbm9kZXNbZV09YXJndW1lbnRzLmxlbmd0aD4xP3Q6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGUpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbZV09SnYsdGhpcy5fY2hpbGRyZW5bZV09e30sdGhpcy5fY2hpbGRyZW5bSnZdW2VdPSEwKSx0aGlzLl9pbltlXT17fSx0aGlzLl9wcmVkc1tlXT17fSx0aGlzLl9vdXRbZV09e30sdGhpcy5fc3Vjc1tlXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX07Y3IucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25vZGVzW2VdfTtjci5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpfTtjci5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGplLmhhcyh0aGlzLl9ub2RlcyxlKSl7dmFyIHI9ZnVuY3Rpb24obil7dC5yZW1vdmVFZGdlKHQuX2VkZ2VPYmpzW25dKX07ZGVsZXRlIHRoaXMuX25vZGVzW2VdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSxkZWxldGUgdGhpcy5fcGFyZW50W2VdLGplLmVhY2godGhpcy5jaGlsZHJlbihlKSxmdW5jdGlvbihuKXt0LnNldFBhcmVudChuKX0pLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXSksamUuZWFjaChqZS5rZXlzKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLGplLmVhY2goamUua2V5cyh0aGlzLl9vdXRbZV0pLHIpLGRlbGV0ZSB0aGlzLl9vdXRbZV0sZGVsZXRlIHRoaXMuX3N1Y3NbZV0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9O2NyLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoamUuaXNVbmRlZmluZWQodCkpdD1KdjtlbHNle3QrPSIiO2Zvcih2YXIgcj10OyFqZS5pc1VuZGVmaW5lZChyKTtyPXRoaXMucGFyZW50KHIpKWlmKHI9PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3QrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodCl9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09dCx0aGlzLl9jaGlsZHJlblt0XVtlXT0hMCx0aGlzfTtjci5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbZV1dW2VdfTtjci5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciB0PXRoaXMuX3BhcmVudFtlXTtpZih0IT09SnYpcmV0dXJuIHR9fTtjci5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24oZSl7aWYoamUuaXNVbmRlZmluZWQoZSkmJihlPUp2KSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdD10aGlzLl9jaGlsZHJlbltlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfWVsc2V7aWYoZT09PUp2KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKGUpKXJldHVybltdfX07Y3IucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcmVkc1tlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfTtjci5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zdWNzW2VdO2lmKHQpcmV0dXJuIGplLmtleXModCl9O2NyLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYodClyZXR1cm4gamUudW5pb24odCx0aGlzLnN1Y2Nlc3NvcnMoZSkpfTtjci5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT90PXRoaXMuc3VjY2Vzc29ycyhlKTp0PXRoaXMubmVpZ2hib3JzKGUpLHQubGVuZ3RoPT09MH07Y3IucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt0LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHI9dGhpcztqZS5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKG8sYSl7ZShhKSYmdC5zZXROb2RlKGEsbyl9KSxqZS5lYWNoKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKG8pe3QuaGFzTm9kZShvLnYpJiZ0Lmhhc05vZGUoby53KSYmdC5zZXRFZGdlKG8sci5lZGdlKG8pKX0pO3ZhciBuPXt9O2Z1bmN0aW9uIGkobyl7dmFyIGE9ci5wYXJlbnQobyk7cmV0dXJuIGE9PT12b2lkIDB8fHQuaGFzTm9kZShhKT8obltvXT1hLGEpOmEgaW4gbj9uW2FdOmkoYSl9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJmplLmVhY2godC5ub2RlcygpLGZ1bmN0aW9uKG8pe3Quc2V0UGFyZW50KG8saShvKSl9KSx0fTtjci5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbihlKXtyZXR1cm4gamUuaXNGdW5jdGlvbihlKXx8KGU9amUuY29uc3RhbnQoZSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fTtjci5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gamUudmFsdWVzKHRoaXMuX2VkZ2VPYmpzKX07Y3IucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBqZS5yZWR1Y2UoZSxmdW5jdGlvbihpLG8pe3JldHVybiBuLmxlbmd0aD4xP3Iuc2V0RWRnZShpLG8sdCk6ci5zZXRFZGdlKGksbyksb30pLHRoaXN9O2NyLnByb3RvdHlwZS5zZXRFZGdlPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saT0hMSxvPWFyZ3VtZW50c1swXTt0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsJiYidiJpbiBvPyhlPW8udix0PW8udyxyPW8ubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKG49YXJndW1lbnRzWzFdLGk9ITApKTooZT1vLHQ9YXJndW1lbnRzWzFdLHI9YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKG49YXJndW1lbnRzWzJdLGk9ITApKSxlPSIiK2UsdD0iIit0LGplLmlzVW5kZWZpbmVkKHIpfHwocj0iIityKTt2YXIgYT1XNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtpZihqZS5oYXModGhpcy5fZWRnZUxhYmVscyxhKSlyZXR1cm4gaSYmKHRoaXMuX2VkZ2VMYWJlbHNbYV09biksdGhpcztpZighamUuaXNVbmRlZmluZWQocikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9lZGdlTGFiZWxzW2FdPWk/bjp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSx0LHIpO3ZhciBzPUdycih0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gZT1zLnYsdD1zLncsT2JqZWN0LmZyZWV6ZShzKSx0aGlzLl9lZGdlT2Jqc1thXT1zLERuZSh0aGlzLl9wcmVkc1t0XSxlKSxEbmUodGhpcy5fc3Vjc1tlXSx0KSx0aGlzLl9pblt0XVthXT1zLHRoaXMuX291dFtlXVthXT1zLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW25dfTtjci5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/dWx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpXNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gamUuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbil9O2NyLnByb3RvdHlwZS5yZW1vdmVFZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpLGk9dGhpcy5fZWRnZU9ianNbbl07cmV0dXJuIGkmJihlPWkudix0PWkudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tuXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbbl0sT25lKHRoaXMuX3ByZWRzW3RdLGUpLE9uZSh0aGlzLl9zdWNzW2VdLHQpLGRlbGV0ZSB0aGlzLl9pblt0XVtuXSxkZWxldGUgdGhpcy5fb3V0W2VdW25dLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfTtjci5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2luW2VdO2lmKHIpe3ZhciBuPWplLnZhbHVlcyhyKTtyZXR1cm4gdD9qZS5maWx0ZXIobixmdW5jdGlvbihpKXtyZXR1cm4gaS52PT09dH0pOm59fTtjci5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9vdXRbZV07aWYocil7dmFyIG49amUudmFsdWVzKHIpO3JldHVybiB0P2plLmZpbHRlcihuLGZ1bmN0aW9uKGkpe3JldHVybiBpLnc9PT10fSk6bn19O2NyLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmluRWRnZXMoZSx0KTtpZihyKXJldHVybiByLmNvbmNhdCh0aGlzLm91dEVkZ2VzKGUsdCkpfTtmdW5jdGlvbiBEbmUoZSx0KXtlW3RdP2VbdF0rKzplW3RdPTF9ZnVuY3Rpb24gT25lKGUsdCl7LS1lW3RdfHxkZWxldGUgZVt0XX1mdW5jdGlvbiBXNChlLHQscixuKXt2YXIgaT0iIit0LG89IiIrcjtpZighZSYmaT5vKXt2YXIgYT1pO2k9byxvPWF9cmV0dXJuIGkrTm5lK28rTm5lKyhqZS5pc1VuZGVmaW5lZChuKT9xcnI6bil9ZnVuY3Rpb24gR3JyKGUsdCxyLG4pe3ZhciBpPSIiK3Qsbz0iIityO2lmKCFlJiZpPm8pe3ZhciBhPWk7aT1vLG89YX12YXIgcz17djppLHc6b307cmV0dXJuIG4mJihzLm5hbWU9biksc31mdW5jdGlvbiB1bHQoZSx0KXtyZXR1cm4gVzQoZSx0LnYsdC53LHQubmFtZSl9fSk7dmFyIEJuZT1IKChCWm4sRm5lKT0+e0ZuZS5leHBvcnRzPSIyLjEuOCJ9KTt2YXIgVm5lPUgoKEhabixIbmUpPT57SG5lLmV4cG9ydHM9e0dyYXBoOnJIKCksdmVyc2lvbjpCbmUoKX19KTt2YXIgcW5lPUgoKFZabixVbmUpPT57dmFyIFZmPUVsKCksV3JyPXJIKCk7VW5lLmV4cG9ydHM9e3dyaXRlOllycixyZWFkOiRycn07ZnVuY3Rpb24gWXJyKGUpe3ZhciB0PXtvcHRpb25zOntkaXJlY3RlZDplLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmUuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6ZS5pc0NvbXBvdW5kKCl9LG5vZGVzOmpycihlKSxlZGdlczpYcnIoZSl9O3JldHVybiBWZi5pc1VuZGVmaW5lZChlLmdyYXBoKCkpfHwodC52YWx1ZT1WZi5jbG9uZShlLmdyYXBoKCkpKSx0fWZ1bmN0aW9uIGpycihlKXtyZXR1cm4gVmYubWFwKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCksbj1lLnBhcmVudCh0KSxpPXt2OnR9O3JldHVybiBWZi5pc1VuZGVmaW5lZChyKXx8KGkudmFsdWU9ciksVmYuaXNVbmRlZmluZWQobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gWHJyKGUpe3JldHVybiBWZi5tYXAoZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KSxuPXt2OnQudix3OnQud307cmV0dXJuIFZmLmlzVW5kZWZpbmVkKHQubmFtZSl8fChuLm5hbWU9dC5uYW1lKSxWZi5pc1VuZGVmaW5lZChyKXx8KG4udmFsdWU9ciksbn0pfWZ1bmN0aW9uICRycihlKXt2YXIgdD1uZXcgV3JyKGUub3B0aW9ucykuc2V0R3JhcGgoZS52YWx1ZSk7cmV0dXJuIFZmLmVhY2goZS5ub2RlcyxmdW5jdGlvbihyKXt0LnNldE5vZGUoci52LHIudmFsdWUpLHIucGFyZW50JiZ0LnNldFBhcmVudChyLnYsci5wYXJlbnQpfSksVmYuZWFjaChlLmVkZ2VzLGZ1bmN0aW9uKHIpe3Quc2V0RWRnZSh7djpyLnYsdzpyLncsbmFtZTpyLm5hbWV9LHIudmFsdWUpfSksdH19KTt2YXIgV25lPUgoKFVabixHbmUpPT57dmFyIG5IPUVsKCk7R25lLmV4cG9ydHM9S3JyO2Z1bmN0aW9uIEtycihlKXt2YXIgdD17fSxyPVtdLG47ZnVuY3Rpb24gaShvKXtuSC5oYXModCxvKXx8KHRbb109ITAsbi5wdXNoKG8pLG5ILmVhY2goZS5zdWNjZXNzb3JzKG8pLGkpLG5ILmVhY2goZS5wcmVkZWNlc3NvcnMobyksaSkpfXJldHVybiBuSC5lYWNoKGUubm9kZXMoKSxmdW5jdGlvbihvKXtuPVtdLGkobyksbi5sZW5ndGgmJnIucHVzaChuKX0pLHJ9fSk7dmFyIGhsdD1IKChxWm4sam5lKT0+e3ZhciBZbmU9RWwoKTtqbmUuZXhwb3J0cz1WYztmdW5jdGlvbiBWYygpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fVZjLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9O1ZjLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSl9O1ZjLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFluZS5oYXModGhpcy5fa2V5SW5kaWNlcyxlKX07VmMucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2tleUluZGljZXNbZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdGhpcy5fYXJyW3RdLnByaW9yaXR5fTtWYy5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKCk9PT0wKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9O1ZjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzO2lmKGU9U3RyaW5nKGUpLCFZbmUuaGFzKHIsZSkpe3ZhciBuPXRoaXMuX2FycixpPW4ubGVuZ3RoO3JldHVybiByW2VdPWksbi5wdXNoKHtrZXk6ZSxwcmlvcml0eTp0fSksdGhpcy5fZGVjcmVhc2UoaSksITB9cmV0dXJuITF9O1ZjLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgZT10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW2Uua2V5XSx0aGlzLl9oZWFwaWZ5KDApLGUua2V5fTtWYy5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzW2VdO2lmKHQ+dGhpcy5fYXJyW3JdLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrZSsiIE9sZDogIit0aGlzLl9hcnJbcl0ucHJpb3JpdHkrIiBOZXc6ICIrdCk7dGhpcy5fYXJyW3JdLnByaW9yaXR5PXQsdGhpcy5fZGVjcmVhc2Uocil9O1ZjLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9hcnIscj0yKmUsbj1yKzEsaT1lO3I8dC5sZW5ndGgmJihpPXRbcl0ucHJpb3JpdHk8dFtpXS5wcmlvcml0eT9yOmksbjx0Lmxlbmd0aCYmKGk9dFtuXS5wcmlvcml0eTx0W2ldLnByaW9yaXR5P246aSksaSE9PWUmJih0aGlzLl9zd2FwKGUsaSksdGhpcy5faGVhcGlmeShpKSkpfTtWYy5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9hcnIscj10W2VdLnByaW9yaXR5LG47ZSE9PTAmJihuPWU+PjEsISh0W25dLnByaW9yaXR5PHIpKTspdGhpcy5fc3dhcChlLG4pLGU9bn07VmMucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYXJyLG49dGhpcy5fa2V5SW5kaWNlcyxpPXJbZV0sbz1yW3RdO3JbZV09byxyW3RdPWksbltvLmtleV09ZSxuW2kua2V5XT10fX0pO3ZhciBmbHQ9SCgoR1puLFhuZSk9Pnt2YXIgWnJyPUVsKCksSnJyPWhsdCgpO1huZS5leHBvcnRzPXRucjt2YXIgUXJyPVpyci5jb25zdGFudCgxKTtmdW5jdGlvbiB0bnIoZSx0LHIsbil7cmV0dXJuIGVucihlLFN0cmluZyh0KSxyfHxRcnIsbnx8ZnVuY3Rpb24oaSl7cmV0dXJuIGUub3V0RWRnZXMoaSl9KX1mdW5jdGlvbiBlbnIoZSx0LHIsbil7dmFyIGk9e30sbz1uZXcgSnJyLGEscyxsPWZ1bmN0aW9uKGMpe3ZhciB1PWMudiE9PWE/Yy52OmMudyxoPWlbdV0sZj1yKGMpLHA9cy5kaXN0YW5jZStmO2lmKGY8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrYysiIFdlaWdodDogIitmKTtwPGguZGlzdGFuY2UmJihoLmRpc3RhbmNlPXAsaC5wcmVkZWNlc3Nvcj1hLG8uZGVjcmVhc2UodSxwKSl9O2ZvcihlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jPT09dD8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtpW2NdPXtkaXN0YW5jZTp1fSxvLmFkZChjLHUpfSk7by5zaXplKCk+MCYmKGE9by5yZW1vdmVNaW4oKSxzPWlbYV0scy5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KW4oYSkuZm9yRWFjaChsKTtyZXR1cm4gaX19KTt2YXIgS25lPUgoKFdabiwkbmUpPT57dmFyIHJucj1mbHQoKSxubnI9RWwoKTskbmUuZXhwb3J0cz1pbnI7ZnVuY3Rpb24gaW5yKGUsdCxyKXtyZXR1cm4gbm5yLnRyYW5zZm9ybShlLm5vZGVzKCksZnVuY3Rpb24obixpKXtuW2ldPXJucihlLGksdCxyKX0se30pfX0pO3ZhciBwbHQ9SCgoWVpuLEpuZSk9Pnt2YXIgWm5lPUVsKCk7Sm5lLmV4cG9ydHM9b25yO2Z1bmN0aW9uIG9ucihlKXt2YXIgdD0wLHI9W10sbj17fSxpPVtdO2Z1bmN0aW9uIG8oYSl7dmFyIHM9blthXT17b25TdGFjazohMCxsb3dsaW5rOnQsaW5kZXg6dCsrfTtpZihyLnB1c2goYSksZS5zdWNjZXNzb3JzKGEpLmZvckVhY2goZnVuY3Rpb24odSl7Wm5lLmhhcyhuLHUpP25bdV0ub25TdGFjayYmKHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5pbmRleCkpOihvKHUpLHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5sb3dsaW5rKSl9KSxzLmxvd2xpbms9PT1zLmluZGV4KXt2YXIgbD1bXSxjO2RvIGM9ci5wb3AoKSxuW2NdLm9uU3RhY2s9ITEsbC5wdXNoKGMpO3doaWxlKGEhPT1jKTtpLnB1c2gobCl9fXJldHVybiBlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtabmUuaGFzKG4sYSl8fG8oYSl9KSxpfX0pO3ZhciB0aWU9SCgoalpuLFFuZSk9Pnt2YXIgYW5yPUVsKCksc25yPXBsdCgpO1FuZS5leHBvcnRzPWxucjtmdW5jdGlvbiBsbnIoZSl7cmV0dXJuIGFuci5maWx0ZXIoc25yKGUpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfHx0Lmxlbmd0aD09PTEmJmUuaGFzRWRnZSh0WzBdLHRbMF0pfSl9fSk7dmFyIHJpZT1IKChYWm4sZWllKT0+e3ZhciBjbnI9RWwoKTtlaWUuZXhwb3J0cz1obnI7dmFyIHVucj1jbnIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gaG5yKGUsdCxyKXtyZXR1cm4gZm5yKGUsdHx8dW5yLHJ8fGZ1bmN0aW9uKG4pe3JldHVybiBlLm91dEVkZ2VzKG4pfSl9ZnVuY3Rpb24gZm5yKGUsdCxyKXt2YXIgbj17fSxpPWUubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe25bb109e30sbltvXVtvXT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKGZ1bmN0aW9uKGEpe28hPT1hJiYobltvXVthXT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSl9KSxyKG8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHM9YS52PT09bz9hLnc6YS52LGw9dChhKTtuW29dW3NdPXtkaXN0YW5jZTpsLHByZWRlY2Vzc29yOm99fSl9KSxpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bltvXTtpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9bltzXTtpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9bFtvXSxoPWFbY10sZj1sW2NdLHA9dS5kaXN0YW5jZStoLmRpc3RhbmNlO3A8Zi5kaXN0YW5jZSYmKGYuZGlzdGFuY2U9cCxmLnByZWRlY2Vzc29yPWgucHJlZGVjZXNzb3IpfSl9KX0pLG59fSk7dmFyIGRsdD1IKCgkWm4saWllKT0+e3ZhciBZND1FbCgpO2lpZS5leHBvcnRzPW5pZTtuaWUuQ3ljbGVFeGNlcHRpb249aUg7ZnVuY3Rpb24gbmllKGUpe3ZhciB0PXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKG8pe2lmKFk0LmhhcyhyLG8pKXRocm93IG5ldyBpSDtZNC5oYXModCxvKXx8KHJbb109ITAsdFtvXT0hMCxZNC5lYWNoKGUucHJlZGVjZXNzb3JzKG8pLGkpLGRlbGV0ZSByW29dLG4ucHVzaChvKSl9aWYoWTQuZWFjaChlLnNpbmtzKCksaSksWTQuc2l6ZSh0KSE9PWUubm9kZUNvdW50KCkpdGhyb3cgbmV3IGlIO3JldHVybiBufWZ1bmN0aW9uIGlIKCl7fWlILnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgc2llPUgoKEtabixhaWUpPT57dmFyIG9pZT1kbHQoKTthaWUuZXhwb3J0cz1wbnI7ZnVuY3Rpb24gcG5yKGUpe3RyeXtvaWUoZSl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIG9pZS5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0pO3ZhciBtbHQ9SCgoWlpuLGNpZSk9Pnt2YXIgb0g9RWwoKTtjaWUuZXhwb3J0cz1kbnI7ZnVuY3Rpb24gZG5yKGUsdCxyKXtvSC5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBuPShlLmlzRGlyZWN0ZWQoKT9lLnN1Y2Nlc3NvcnM6ZS5uZWlnaGJvcnMpLmJpbmQoZSksaT1bXSxvPXt9O3JldHVybiBvSC5lYWNoKHQsZnVuY3Rpb24oYSl7aWYoIWUuaGFzTm9kZShhKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIithKTtsaWUoZSxhLHI9PT0icG9zdCIsbyxuLGkpfSksaX1mdW5jdGlvbiBsaWUoZSx0LHIsbixpLG8pe29ILmhhcyhuLHQpfHwoblt0XT0hMCxyfHxvLnB1c2godCksb0guZWFjaChpKHQpLGZ1bmN0aW9uKGEpe2xpZShlLGEscixuLGksbyl9KSxyJiZvLnB1c2godCkpfX0pO3ZhciBoaWU9SCgoSlpuLHVpZSk9Pnt2YXIgbW5yPW1sdCgpO3VpZS5leHBvcnRzPWducjtmdW5jdGlvbiBnbnIoZSx0KXtyZXR1cm4gbW5yKGUsdCwicG9zdCIpfX0pO3ZhciBwaWU9SCgoUVpuLGZpZSk9Pnt2YXIgX25yPW1sdCgpO2ZpZS5leHBvcnRzPXlucjtmdW5jdGlvbiB5bnIoZSx0KXtyZXR1cm4gX25yKGUsdCwicHJlIil9fSk7dmFyIGdpZT1IKCh0Sm4sbWllKT0+e3ZhciBkaWU9RWwoKSx2bnI9ckgoKSx4bnI9aGx0KCk7bWllLmV4cG9ydHM9Ym5yO2Z1bmN0aW9uIGJucihlLHQpe3ZhciByPW5ldyB2bnIsbj17fSxpPW5ldyB4bnIsbztmdW5jdGlvbiBhKGwpe3ZhciBjPWwudj09PW8/bC53Omwudix1PWkucHJpb3JpdHkoYyk7aWYodSE9PXZvaWQgMCl7dmFyIGg9dChsKTtoPHUmJihuW2NdPW8saS5kZWNyZWFzZShjLGgpKX19aWYoZS5ub2RlQ291bnQoKT09PTApcmV0dXJuIHI7ZGllLmVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGwpe2kuYWRkKGwsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyLnNldE5vZGUobCl9KSxpLmRlY3JlYXNlKGUubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7aS5zaXplKCk+MDspe2lmKG89aS5yZW1vdmVNaW4oKSxkaWUuaGFzKG4sbykpci5zZXRFZGdlKG8sbltvXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIitlKTtzPSEwfWUubm9kZUVkZ2VzKG8pLmZvckVhY2goYSl9cmV0dXJuIHJ9fSk7dmFyIHlpZT1IKChlSm4sX2llKT0+e19pZS5leHBvcnRzPXtjb21wb25lbnRzOlduZSgpLGRpamtzdHJhOmZsdCgpLGRpamtzdHJhQWxsOktuZSgpLGZpbmRDeWNsZXM6dGllKCksZmxveWRXYXJzaGFsbDpyaWUoKSxpc0FjeWNsaWM6c2llKCkscG9zdG9yZGVyOmhpZSgpLHByZW9yZGVyOnBpZSgpLHByaW06Z2llKCksdGFyamFuOnBsdCgpLHRvcHNvcnQ6ZGx0KCl9fSk7dmFyIGJpZT1IKChySm4seGllKT0+e3ZhciB2aWU9Vm5lKCk7eGllLmV4cG9ydHM9e0dyYXBoOnZpZS5HcmFwaCxqc29uOnFuZSgpLGFsZzp5aWUoKSx2ZXJzaW9uOnZpZS52ZXJzaW9ufX0pO3ZhciBVYz1IKChuSm4sd2llKT0+e3ZhciBhSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2FIPWJpZSgpfWNhdGNoKGUpe31hSHx8KGFIPXdpbmRvdy5ncmFwaGxpYik7d2llLmV4cG9ydHM9YUh9KTt2YXIgTWllPUgoKG9KbixTaWUpPT57dmFyIHducj1Sc3QoKSxTbnI9MSxNbnI9NDtmdW5jdGlvbiBFbnIoZSl7cmV0dXJuIHducihlLFNucnxNbnIpfVNpZS5leHBvcnRzPUVucn0pO3ZhciBqND1IKChhSm4sRWllKT0+e3ZhciBUbnI9WXYoKSxDbnI9QmYoKSxBbnI9UjQoKSxQbnI9TWwoKTtmdW5jdGlvbiBJbnIoZSx0LHIpe2lmKCFQbnIocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuKG49PSJudW1iZXIiP0NucihyKSYmQW5yKHQsci5sZW5ndGgpOm49PSJzdHJpbmciJiZ0IGluIHIpP1RucihyW3RdLGUpOiExfUVpZS5leHBvcnRzPUlucn0pO3ZhciBBaWU9SCgoc0puLENpZSk9Pnt2YXIgTG5yPUc0KCksa25yPVl2KCksUm5yPWo0KCksTm5yPWMwKCksVGllPU9iamVjdC5wcm90b3R5cGUsRG5yPVRpZS5oYXNPd25Qcm9wZXJ0eSxPbnI9TG5yKGZ1bmN0aW9uKGUsdCl7ZT1PYmplY3QoZSk7dmFyIHI9LTEsbj10Lmxlbmd0aCxpPW4+Mj90WzJdOnZvaWQgMDtmb3IoaSYmUm5yKHRbMF0sdFsxXSxpKSYmKG49MSk7KytyPG47KWZvcih2YXIgbz10W3JdLGE9Tm5yKG8pLHM9LTEsbD1hLmxlbmd0aDsrK3M8bDspe3ZhciBjPWFbc10sdT1lW2NdOyh1PT09dm9pZCAwfHxrbnIodSxUaWVbY10pJiYhRG5yLmNhbGwoZSxjKSkmJihlW2NdPW9bY10pfXJldHVybiBlfSk7Q2llLmV4cG9ydHM9T25yfSk7dmFyIElpZT1IKChsSm4sUGllKT0+e3ZhciB6bnI9SGYoKSxGbnI9QmYoKSxCbnI9QWQoKTtmdW5jdGlvbiBIbnIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1PYmplY3QodCk7aWYoIUZucih0KSl7dmFyIG89em5yKHIsMyk7dD1CbnIodCkscj1mdW5jdGlvbihzKXtyZXR1cm4gbyhpW3NdLHMsaSl9fXZhciBhPWUodCxyLG4pO3JldHVybiBhPi0xP2lbbz90W2FdOmFdOnZvaWQgMH19UGllLmV4cG9ydHM9SG5yfSk7dmFyIGtpZT1IKChjSm4sTGllKT0+e3ZhciBWbnI9L1xzLztmdW5jdGlvbiBVbnIoZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmVm5yLnRlc3QoZS5jaGFyQXQodCkpOyk7cmV0dXJuIHR9TGllLmV4cG9ydHM9VW5yfSk7dmFyIE5pZT1IKCh1Sm4sUmllKT0+e3ZhciBxbnI9a2llKCksR25yPS9eXHMrLztmdW5jdGlvbiBXbnIoZSl7cmV0dXJuIGUmJmUuc2xpY2UoMCxxbnIoZSkrMSkucmVwbGFjZShHbnIsIiIpfVJpZS5leHBvcnRzPVducn0pO3ZhciBGaWU9SCgoaEpuLHppZSk9Pnt2YXIgWW5yPU5pZSgpLERpZT1NbCgpLGpucj1adigpLE9pZT0wLzAsWG5yPS9eWy0rXTB4WzAtOWEtZl0rJC9pLCRucj0vXjBiWzAxXSskL2ksS25yPS9eMG9bMC03XSskL2ksWm5yPXBhcnNlSW50O2Z1bmN0aW9uIEpucihlKXtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7aWYoam5yKGUpKXJldHVybiBPaWU7aWYoRGllKGUpKXt2YXIgdD10eXBlb2YgZS52YWx1ZU9mPT0iZnVuY3Rpb24iP2UudmFsdWVPZigpOmU7ZT1EaWUodCk/dCsiIjp0fWlmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gZT09PTA/ZTorZTtlPVlucihlKTt2YXIgcj0kbnIudGVzdChlKTtyZXR1cm4gcnx8S25yLnRlc3QoZSk/Wm5yKGUuc2xpY2UoMikscj8yOjgpOlhuci50ZXN0KGUpP09pZTorZX16aWUuZXhwb3J0cz1KbnJ9KTt2YXIgZ2x0PUgoKGZKbixIaWUpPT57dmFyIFFucj1GaWUoKSxCaWU9MS8wLHRpcj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gZWlyKGUpe2lmKCFlKXJldHVybiBlPT09MD9lOjA7aWYoZT1RbnIoZSksZT09PUJpZXx8ZT09PS1CaWUpe3ZhciB0PWU8MD8tMToxO3JldHVybiB0KnRpcn1yZXR1cm4gZT09PWU/ZTowfUhpZS5leHBvcnRzPWVpcn0pO3ZhciBVaWU9SCgocEpuLFZpZSk9Pnt2YXIgcmlyPWdsdCgpO2Z1bmN0aW9uIG5pcihlKXt2YXIgdD1yaXIoZSkscj10JTE7cmV0dXJuIHQ9PT10P3I/dC1yOnQ6MH1WaWUuZXhwb3J0cz1uaXJ9KTt2YXIgR2llPUgoKGRKbixxaWUpPT57dmFyIGlpcj1hbHQoKSxvaXI9SGYoKSxhaXI9VWllKCksc2lyPU1hdGgubWF4O2Z1bmN0aW9uIGxpcihlLHQscil7dmFyIG49ZT09bnVsbD8wOmUubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDphaXIocik7cmV0dXJuIGk8MCYmKGk9c2lyKG4raSwwKSksaWlyKGUsb2lyKHQsMyksaSl9cWllLmV4cG9ydHM9bGlyfSk7dmFyIFlpZT1IKChtSm4sV2llKT0+e3ZhciBjaXI9SWllKCksdWlyPUdpZSgpLGhpcj1jaXIodWlyKTtXaWUuZXhwb3J0cz1oaXJ9KTt2YXIgX2x0PUgoKGdKbixqaWUpPT57dmFyIGZpcj10SCgpO2Z1bmN0aW9uIHBpcihlKXt2YXIgdD1lPT1udWxsPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/ZmlyKGUsMSk6W119amllLmV4cG9ydHM9cGlyfSk7dmFyICRpZT1IKChfSm4sWGllKT0+e3ZhciBkaXI9WEIoKSxtaXI9TnN0KCksZ2lyPWMwKCk7ZnVuY3Rpb24gX2lyKGUsdCl7cmV0dXJuIGU9PW51bGw/ZTpkaXIoZSxtaXIodCksZ2lyKX1YaWUuZXhwb3J0cz1faXJ9KTt2YXIgWmllPUgoKHlKbixLaWUpPT57ZnVuY3Rpb24geWlyKGUpe3ZhciB0PWU9PW51bGw/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06dm9pZCAwfUtpZS5leHBvcnRzPXlpcn0pO3ZhciBRaWU9SCgodkpuLEppZSk9Pnt2YXIgdmlyPUk0KCkseGlyPSRCKCksYmlyPUhmKCk7ZnVuY3Rpb24gd2lyKGUsdCl7dmFyIHI9e307cmV0dXJuIHQ9YmlyKHQsMykseGlyKGUsZnVuY3Rpb24obixpLG8pe3ZpcihyLGksdChuLGksbykpfSkscn1KaWUuZXhwb3J0cz13aXJ9KTt2YXIgc0g9SCgoeEpuLHRvZSk9Pnt2YXIgU2lyPVp2KCk7ZnVuY3Rpb24gTWlyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aDsrK248aTspe3ZhciBvPWVbbl0sYT10KG8pO2lmKGEhPW51bGwmJihzPT09dm9pZCAwP2E9PT1hJiYhU2lyKGEpOnIoYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9dG9lLmV4cG9ydHM9TWlyfSk7dmFyIHJvZT1IKChiSm4sZW9lKT0+e2Z1bmN0aW9uIEVpcihlLHQpe3JldHVybiBlPnR9ZW9lLmV4cG9ydHM9RWlyfSk7dmFyIGlvZT1IKCh3Sm4sbm9lKT0+e3ZhciBUaXI9c0goKSxDaXI9cm9lKCksQWlyPXUwKCk7ZnVuY3Rpb24gUGlyKGUpe3JldHVybiBlJiZlLmxlbmd0aD9UaXIoZSxBaXIsQ2lyKTp2b2lkIDB9bm9lLmV4cG9ydHM9UGlyfSk7dmFyIHlsdD1IKChTSm4sb29lKT0+e3ZhciBJaXI9STQoKSxMaXI9WXYoKTtmdW5jdGlvbiBraXIoZSx0LHIpeyhyIT09dm9pZCAwJiYhTGlyKGVbdF0scil8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJklpcihlLHQscil9b29lLmV4cG9ydHM9a2lyfSk7dmFyIGxvZT1IKChNSm4sc29lKT0+e3ZhciBSaXI9czAoKSxOaXI9QjQoKSxEaXI9WXUoKSxPaXI9IltvYmplY3QgT2JqZWN0XSIsemlyPUZ1bmN0aW9uLnByb3RvdHlwZSxGaXI9T2JqZWN0LnByb3RvdHlwZSxhb2U9emlyLnRvU3RyaW5nLEJpcj1GaXIuaGFzT3duUHJvcGVydHksSGlyPWFvZS5jYWxsKE9iamVjdCk7ZnVuY3Rpb24gVmlyKGUpe2lmKCFEaXIoZSl8fFJpcihlKSE9T2lyKXJldHVybiExO3ZhciB0PU5pcihlKTtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgcj1CaXIuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmciBpbnN0YW5jZW9mIHImJmFvZS5jYWxsKHIpPT1IaXJ9c29lLmV4cG9ydHM9VmlyfSk7dmFyIHZsdD1IKChFSm4sY29lKT0+e2Z1bmN0aW9uIFVpcihlLHQpe2lmKCEodD09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBlW3RdPT0iZnVuY3Rpb24iKSYmdCE9Il9fcHJvdG9fXyIpcmV0dXJuIGVbdF19Y29lLmV4cG9ydHM9VWlyfSk7dmFyIGhvZT1IKChUSm4sdW9lKT0+e3ZhciBxaXI9VVMoKSxHaXI9YzAoKTtmdW5jdGlvbiBXaXIoZSl7cmV0dXJuIHFpcihlLEdpcihlKSl9dW9lLmV4cG9ydHM9V2lyfSk7dmFyIF9vZT1IKChDSm4sZ29lKT0+e3ZhciBmb2U9eWx0KCksWWlyPWdzdCgpLGppcj1Jc3QoKSxYaXI9X3N0KCksJGlyPWtzdCgpLHBvZT1xUygpLGRvZT1UaSgpLEtpcj1sbHQoKSxaaXI9WHYoKSxKaXI9RlMoKSxRaXI9TWwoKSx0b3I9bG9lKCksZW9yPVlTKCksbW9lPXZsdCgpLHJvcj1ob2UoKTtmdW5jdGlvbiBub3IoZSx0LHIsbixpLG8sYSl7dmFyIHM9bW9lKGUsciksbD1tb2UodCxyKSxjPWEuZ2V0KGwpO2lmKGMpe2ZvZShlLHIsYyk7cmV0dXJufXZhciB1PW8/byhzLGwscisiIixlLHQsYSk6dm9pZCAwLGg9dT09PXZvaWQgMDtpZihoKXt2YXIgZj1kb2UobCkscD0hZiYmWmlyKGwpLGQ9IWYmJiFwJiZlb3IobCk7dT1sLGZ8fHB8fGQ/ZG9lKHMpP3U9czpLaXIocyk/dT1YaXIocyk6cD8oaD0hMSx1PVlpcihsLCEwKSk6ZD8oaD0hMSx1PWppcihsLCEwKSk6dT1bXTp0b3IobCl8fHBvZShsKT8odT1zLHBvZShzKT91PXJvcihzKTooIVFpcihzKXx8SmlyKHMpKSYmKHU9JGlyKGwpKSk6aD0hMX1oJiYoYS5zZXQobCx1KSxpKHUsbCxuLG8sYSksYS5kZWxldGUobCkpLGZvZShlLHIsdSl9Z29lLmV4cG9ydHM9bm9yfSk7dmFyIHhvZT1IKChBSm4sdm9lKT0+e3ZhciBpb3I9UDQoKSxvb3I9eWx0KCksYW9yPVhCKCksc29yPV9vZSgpLGxvcj1NbCgpLGNvcj1jMCgpLHVvcj12bHQoKTtmdW5jdGlvbiB5b2UoZSx0LHIsbixpKXtlIT09dCYmYW9yKHQsZnVuY3Rpb24obyxhKXtpZihpfHwoaT1uZXcgaW9yKSxsb3Iobykpc29yKGUsdCxhLHIseW9lLG4saSk7ZWxzZXt2YXIgcz1uP24odW9yKGUsYSksbyxhKyIiLGUsdCxpKTp2b2lkIDA7cz09PXZvaWQgMCYmKHM9byksb29yKGUsYSxzKX19LGNvcil9dm9lLmV4cG9ydHM9eW9lfSk7dmFyIHdvZT1IKChQSm4sYm9lKT0+e3ZhciBob3I9RzQoKSxwb3I9ajQoKTtmdW5jdGlvbiBkb3IoZSl7cmV0dXJuIGhvcihmdW5jdGlvbih0LHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsbz1pPjE/cltpLTFdOnZvaWQgMCxhPWk+Mj9yWzJdOnZvaWQgMDtmb3Iobz1lLmxlbmd0aD4zJiZ0eXBlb2Ygbz09ImZ1bmN0aW9uIj8oaS0tLG8pOnZvaWQgMCxhJiZwb3IoclswXSxyWzFdLGEpJiYobz1pPDM/dm9pZCAwOm8saT0xKSx0PU9iamVjdCh0KTsrK248aTspe3ZhciBzPXJbbl07cyYmZSh0LHMsbixvKX1yZXR1cm4gdH0pfWJvZS5leHBvcnRzPWRvcn0pO3ZhciBNb2U9SCgoSUpuLFNvZSk9Pnt2YXIgbW9yPXhvZSgpLGdvcj13b2UoKSxfb3I9Z29yKGZ1bmN0aW9uKGUsdCxyKXttb3IoZSx0LHIpfSk7U29lLmV4cG9ydHM9X29yfSk7dmFyIHhsdD1IKChMSm4sRW9lKT0+e2Z1bmN0aW9uIHlvcihlLHQpe3JldHVybiBlPHR9RW9lLmV4cG9ydHM9eW9yfSk7dmFyIENvZT1IKChrSm4sVG9lKT0+e3ZhciB2b3I9c0goKSx4b3I9eGx0KCksYm9yPXUwKCk7ZnVuY3Rpb24gd29yKGUpe3JldHVybiBlJiZlLmxlbmd0aD92b3IoZSxib3IseG9yKTp2b2lkIDB9VG9lLmV4cG9ydHM9d29yfSk7dmFyIFBvZT1IKChSSm4sQW9lKT0+e3ZhciBTb3I9c0goKSxNb3I9SGYoKSxFb3I9eGx0KCk7ZnVuY3Rpb24gVG9yKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP1NvcihlLE1vcih0LDIpLEVvcik6dm9pZCAwfUFvZS5leHBvcnRzPVRvcn0pO3ZhciBMb2U9SCgoTkpuLElvZSk9Pnt2YXIgQ29yPUhjKCksQW9yPWZ1bmN0aW9uKCl7cmV0dXJuIENvci5EYXRlLm5vdygpfTtJb2UuZXhwb3J0cz1Bb3J9KTt2YXIgTm9lPUgoKERKbixSb2UpPT57dmFyIFBvcj1MNCgpLElvcj1VNCgpLExvcj1SNCgpLGtvZT1NbCgpLGtvcj0kUygpO2Z1bmN0aW9uIFJvcihlLHQscixuKXtpZigha29lKGUpKXJldHVybiBlO3Q9SW9yKHQsZSk7Zm9yKHZhciBpPS0xLG89dC5sZW5ndGgsYT1vLTEscz1lO3MhPW51bGwmJisraTxvOyl7dmFyIGw9a29yKHRbaV0pLGM9cjtpZihsPT09Il9fcHJvdG9fXyJ8fGw9PT0iY29uc3RydWN0b3IifHxsPT09InByb3RvdHlwZSIpcmV0dXJuIGU7aWYoaSE9YSl7dmFyIHU9c1tsXTtjPW4/bih1LGwscyk6dm9pZCAwLGM9PT12b2lkIDAmJihjPWtvZSh1KT91Okxvcih0W2krMV0pP1tdOnt9KX1Qb3IocyxsLGMpLHM9c1tsXX1yZXR1cm4gZX1Sb2UuZXhwb3J0cz1Sb3J9KTt2YXIgT29lPUgoKE9KbixEb2UpPT57dmFyIE5vcj1xNCgpLERvcj1Ob2UoKSxPb3I9VTQoKTtmdW5jdGlvbiB6b3IoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLG89e307KytuPGk7KXt2YXIgYT10W25dLHM9Tm9yKGUsYSk7cihzLGEpJiZEb3IobyxPb3IoYSxlKSxzKX1yZXR1cm4gb31Eb2UuZXhwb3J0cz16b3J9KTt2YXIgRm9lPUgoKHpKbix6b2UpPT57dmFyIEZvcj1Pb2UoKSxCb3I9WHN0KCk7ZnVuY3Rpb24gSG9yKGUsdCl7cmV0dXJuIEZvcihlLHQsZnVuY3Rpb24ocixuKXtyZXR1cm4gQm9yKGUsbil9KX16b2UuZXhwb3J0cz1Ib3J9KTt2YXIgSG9lPUgoKEZKbixCb2UpPT57dmFyIFZvcj1fbHQoKSxVb3I9aWx0KCkscW9yPW9sdCgpO2Z1bmN0aW9uIEdvcihlKXtyZXR1cm4gcW9yKFVvcihlLHZvaWQgMCxWb3IpLGUrIiIpfUJvZS5leHBvcnRzPUdvcn0pO3ZhciBVb2U9SCgoQkpuLFZvZSk9Pnt2YXIgV29yPUZvZSgpLFlvcj1Ib2UoKSxqb3I9WW9yKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/e306V29yKGUsdCl9KTtWb2UuZXhwb3J0cz1qb3J9KTt2YXIgR29lPUgoKEhKbixxb2UpPT57dmFyIFhvcj1NYXRoLmNlaWwsJG9yPU1hdGgubWF4O2Z1bmN0aW9uIEtvcihlLHQscixuKXtmb3IodmFyIGk9LTEsbz0kb3IoWG9yKCh0LWUpLyhyfHwxKSksMCksYT1BcnJheShvKTtvLS07KWFbbj9vOisraV09ZSxlKz1yO3JldHVybiBhfXFvZS5leHBvcnRzPUtvcn0pO3ZhciBZb2U9SCgoVkpuLFdvZSk9Pnt2YXIgWm9yPUdvZSgpLEpvcj1qNCgpLGJsdD1nbHQoKTtmdW5jdGlvbiBRb3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbiYmdHlwZW9mIG4hPSJudW1iZXIiJiZKb3IodCxyLG4pJiYocj1uPXZvaWQgMCksdD1ibHQodCkscj09PXZvaWQgMD8ocj10LHQ9MCk6cj1ibHQociksbj1uPT09dm9pZCAwP3Q8cj8xOi0xOmJsdChuKSxab3IodCxyLG4sZSl9fVdvZS5leHBvcnRzPVFvcn0pO3ZhciBYb2U9SCgoVUpuLGpvZSk9Pnt2YXIgdGFyPVlvZSgpLGVhcj10YXIoKTtqb2UuZXhwb3J0cz1lYXJ9KTt2YXIgS29lPUgoKHFKbiwkb2UpPT57ZnVuY3Rpb24gcmFyKGUsdCl7dmFyIHI9ZS5sZW5ndGg7Zm9yKGUuc29ydCh0KTtyLS07KWVbcl09ZVtyXS52YWx1ZTtyZXR1cm4gZX0kb2UuZXhwb3J0cz1yYXJ9KTt2YXIgUW9lPUgoKEdKbixKb2UpPT57dmFyIFpvZT1adigpO2Z1bmN0aW9uIG5hcihlLHQpe2lmKGUhPT10KXt2YXIgcj1lIT09dm9pZCAwLG49ZT09PW51bGwsaT1lPT09ZSxvPVpvZShlKSxhPXQhPT12b2lkIDAscz10PT09bnVsbCxsPXQ9PT10LGM9Wm9lKHQpO2lmKCFzJiYhYyYmIW8mJmU+dHx8byYmYSYmbCYmIXMmJiFjfHxuJiZhJiZsfHwhciYmbHx8IWkpcmV0dXJuIDE7aWYoIW4mJiFvJiYhYyYmZTx0fHxjJiZyJiZpJiYhbiYmIW98fHMmJnImJml8fCFhJiZpfHwhbClyZXR1cm4tMX1yZXR1cm4gMH1Kb2UuZXhwb3J0cz1uYXJ9KTt2YXIgZWFlPUgoKFdKbix0YWUpPT57dmFyIGlhcj1Rb2UoKTtmdW5jdGlvbiBvYXIoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPWUuY3JpdGVyaWEsbz10LmNyaXRlcmlhLGE9aS5sZW5ndGgscz1yLmxlbmd0aDsrK248YTspe3ZhciBsPWlhcihpW25dLG9bbl0pO2lmKGwpe2lmKG4+PXMpcmV0dXJuIGw7dmFyIGM9cltuXTtyZXR1cm4gbCooYz09ImRlc2MiPy0xOjEpfX1yZXR1cm4gZS5pbmRleC10LmluZGV4fXRhZS5leHBvcnRzPW9hcn0pO3ZhciBuYWU9SCgoWUpuLHJhZSk9Pnt2YXIgd2x0PVY0KCksYWFyPXE0KCksc2FyPUhmKCksbGFyPVFzdCgpLGNhcj1Lb2UoKSx1YXI9TjQoKSxoYXI9ZWFlKCksZmFyPXUwKCkscGFyPVRpKCk7ZnVuY3Rpb24gZGFyKGUsdCxyKXt0Lmxlbmd0aD90PXdsdCh0LGZ1bmN0aW9uKG8pe3JldHVybiBwYXIobyk/ZnVuY3Rpb24oYSl7cmV0dXJuIGFhcihhLG8ubGVuZ3RoPT09MT9vWzBdOm8pfTpvfSk6dD1bZmFyXTt2YXIgbj0tMTt0PXdsdCh0LHVhcihzYXIpKTt2YXIgaT1sYXIoZSxmdW5jdGlvbihvLGEscyl7dmFyIGw9d2x0KHQsZnVuY3Rpb24oYyl7cmV0dXJuIGMobyl9KTtyZXR1cm57Y3JpdGVyaWE6bCxpbmRleDorK24sdmFsdWU6b319KTtyZXR1cm4gY2FyKGksZnVuY3Rpb24obyxhKXtyZXR1cm4gaGFyKG8sYSxyKX0pfXJhZS5leHBvcnRzPWRhcn0pO3ZhciBhYWU9SCgoakpuLG9hZSk9Pnt2YXIgbWFyPXRIKCksZ2FyPW5hZSgpLF9hcj1HNCgpLGlhZT1qNCgpLHlhcj1fYXIoZnVuY3Rpb24oZSx0KXtpZihlPT1udWxsKXJldHVybltdO3ZhciByPXQubGVuZ3RoO3JldHVybiByPjEmJmlhZShlLHRbMF0sdFsxXSk/dD1bXTpyPjImJmlhZSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksZ2FyKGUsbWFyKHQsMSksW10pfSk7b2FlLmV4cG9ydHM9eWFyfSk7dmFyIGxhZT1IKChYSm4sc2FlKT0+e3ZhciB4YXI9WXN0KCksYmFyPTA7ZnVuY3Rpb24gd2FyKGUpe3ZhciB0PSsrYmFyO3JldHVybiB4YXIoZSkrdH1zYWUuZXhwb3J0cz13YXJ9KTt2YXIgdWFlPUgoKCRKbixjYWUpPT57ZnVuY3Rpb24gU2FyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aCxvPXQubGVuZ3RoLGE9e307KytuPGk7KXt2YXIgcz1uPG8/dFtuXTp2b2lkIDA7cihhLGVbbl0scyl9cmV0dXJuIGF9Y2FlLmV4cG9ydHM9U2FyfSk7dmFyIGZhZT1IKChLSm4saGFlKT0+e3ZhciBNYXI9TDQoKSxFYXI9dWFlKCk7ZnVuY3Rpb24gVGFyKGUsdCl7cmV0dXJuIEVhcihlfHxbXSx0fHxbXSxNYXIpfWhhZS5leHBvcnRzPVRhcn0pO3ZhciBVbj1IKChaSm4scGFlKT0+e3ZhciBsSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2xIPXtjbG9uZURlZXA6TWllKCksY29uc3RhbnQ6akIoKSxkZWZhdWx0czpBaWUoKSxlYWNoOk9zdCgpLGZpbHRlcjpLc3QoKSxmaW5kOllpZSgpLGZsYXR0ZW46X2x0KCksZm9yRWFjaDpEc3QoKSxmb3JJbjokaWUoKSxoYXM6WnN0KCksaXNVbmRlZmluZWQ6SnN0KCksbGFzdDpaaWUoKSxtYXA6dGx0KCksbWFwVmFsdWVzOlFpZSgpLG1heDppb2UoKSxtZXJnZTpNb2UoKSxtaW46Q29lKCksbWluQnk6UG9lKCksbm93OkxvZSgpLHBpY2s6VW9lKCkscmFuZ2U6WG9lKCkscmVkdWNlOmVsdCgpLHNvcnRCeTphYWUoKSx1bmlxdWVJZDpsYWUoKSx2YWx1ZXM6Y2x0KCksemlwT2JqZWN0OmZhZSgpfX1jYXRjaChlKXt9bEh8fChsSD13aW5kb3cuXyk7cGFlLmV4cG9ydHM9bEh9KTt2YXIgZ2FlPUgoKFFKbixtYWUpPT57bWFlLmV4cG9ydHM9Y0g7ZnVuY3Rpb24gY0goKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWNILnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2VudGluZWwsdD1lLl9wcmV2O2lmKHQhPT1lKXJldHVybiBkYWUodCksdH07Y0gucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmZGFlKGUpLGUuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PWUsdC5fbmV4dD1lLGUuX3ByZXY9dH07Y0gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9dGhpcy5fc2VudGluZWwscj10Ll9wcmV2O3IhPT10OyllLnB1c2goSlNPTi5zdHJpbmdpZnkocixDYXIpKSxyPXIuX3ByZXY7cmV0dXJuIlsiK2Uuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIGRhZShlKXtlLl9wcmV2Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj1lLl9wcmV2LGRlbGV0ZSBlLl9uZXh0LGRlbGV0ZSBlLl9wcmV2fWZ1bmN0aW9uIENhcihlLHQpe2lmKGUhPT0iX25leHQiJiZlIT09Il9wcmV2IilyZXR1cm4gdH19KTt2YXIgeWFlPUgoKHRRbixfYWUpPT57dmFyIFBkPVVuKCksQWFyPVVjKCkuR3JhcGgsUGFyPWdhZSgpO19hZS5leHBvcnRzPUxhcjt2YXIgSWFyPVBkLmNvbnN0YW50KDEpO2Z1bmN0aW9uIExhcihlLHQpe2lmKGUubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIHI9UmFyKGUsdHx8SWFyKSxuPWthcihyLmdyYXBoLHIuYnVja2V0cyxyLnplcm9JZHgpO3JldHVybiBQZC5mbGF0dGVuKFBkLm1hcChuLGZ1bmN0aW9uKGkpe3JldHVybiBlLm91dEVkZ2VzKGkudixpLncpfSksITApfWZ1bmN0aW9uIGthcihlLHQscil7Zm9yKHZhciBuPVtdLGk9dFt0Lmxlbmd0aC0xXSxvPXRbMF0sYTtlLm5vZGVDb3VudCgpOyl7Zm9yKDthPW8uZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7Zm9yKDthPWkuZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7aWYoZS5ub2RlQ291bnQoKSl7Zm9yKHZhciBzPXQubGVuZ3RoLTI7cz4wOy0tcylpZihhPXRbc10uZGVxdWV1ZSgpLGEpe249bi5jb25jYXQoU2x0KGUsdCxyLGEsITApKTticmVha319fXJldHVybiBufWZ1bmN0aW9uIFNsdChlLHQscixuLGkpe3ZhciBvPWk/W106dm9pZCAwO3JldHVybiBQZC5mb3JFYWNoKGUuaW5FZGdlcyhuLnYpLGZ1bmN0aW9uKGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO2kmJm8ucHVzaCh7djphLnYsdzphLnd9KSxsLm91dC09cyxNbHQodCxyLGwpfSksUGQuZm9yRWFjaChlLm91dEVkZ2VzKG4udiksZnVuY3Rpb24oYSl7dmFyIHM9ZS5lZGdlKGEpLGw9YS53LGM9ZS5ub2RlKGwpO2MuaW4tPXMsTWx0KHQscixjKX0pLGUucmVtb3ZlTm9kZShuLnYpLG99ZnVuY3Rpb24gUmFyKGUsdCl7dmFyIHI9bmV3IEFhcixuPTAsaT0wO1BkLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHMpe3Iuc2V0Tm9kZShzLHt2OnMsaW46MCxvdXQ6MH0pfSksUGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIGw9ci5lZGdlKHMudixzLncpfHwwLGM9dChzKSx1PWwrYztyLnNldEVkZ2Uocy52LHMudyx1KSxpPU1hdGgubWF4KGksci5ub2RlKHMudikub3V0Kz1jKSxuPU1hdGgubWF4KG4sci5ub2RlKHMudykuaW4rPWMpfSk7dmFyIG89UGQucmFuZ2UoaStuKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgUGFyfSksYT1uKzE7cmV0dXJuIFBkLmZvckVhY2goci5ub2RlcygpLGZ1bmN0aW9uKHMpe01sdChvLGEsci5ub2RlKHMpKX0pLHtncmFwaDpyLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fWZ1bmN0aW9uIE1sdChlLHQscil7ci5vdXQ/ci5pbj9lW3Iub3V0LXIuaW4rdF0uZW5xdWV1ZShyKTplW2UubGVuZ3RoLTFdLmVucXVldWUocik6ZVswXS5lbnF1ZXVlKHIpfX0pO3ZhciB4YWU9SCgoZVFuLHZhZSk9PnsidXNlIHN0cmljdCI7dmFyIFF2PVVuKCksTmFyPXlhZSgpO3ZhZS5leHBvcnRzPXtydW46RGFyLHVuZG86emFyfTtmdW5jdGlvbiBEYXIoZSl7dmFyIHQ9ZS5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP05hcihlLHIoZSkpOk9hcihlKTtRdi5mb3JFYWNoKHQsZnVuY3Rpb24obil7dmFyIGk9ZS5lZGdlKG4pO2UucmVtb3ZlRWRnZShuKSxpLmZvcndhcmROYW1lPW4ubmFtZSxpLnJldmVyc2VkPSEwLGUuc2V0RWRnZShuLncsbi52LGksUXYudW5pcXVlSWQoInJldiIpKX0pO2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLmVkZ2UoaSkud2VpZ2h0fX19ZnVuY3Rpb24gT2FyKGUpe3ZhciB0PVtdLHI9e30sbj17fTtmdW5jdGlvbiBpKG8pe1F2LmhhcyhuLG8pfHwobltvXT0hMCxyW29dPSEwLFF2LmZvckVhY2goZS5vdXRFZGdlcyhvKSxmdW5jdGlvbihhKXtRdi5oYXMocixhLncpP3QucHVzaChhKTppKGEudyl9KSxkZWxldGUgcltvXSl9cmV0dXJuIFF2LmZvckVhY2goZS5ub2RlcygpLGkpLHR9ZnVuY3Rpb24gemFyKGUpe1F2LmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihyLnJldmVyc2VkKXtlLnJlbW92ZUVkZ2UodCk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSxlLnNldEVkZ2UodC53LHQudixyLG4pfX0pfX0pO3ZhciBucz1IKChyUW4sTWFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUXI9VW4oKSxiYWU9VWMoKS5HcmFwaDtNYWUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOndhZSxzaW1wbGlmeTpGYXIsYXNOb25Db21wb3VuZEdyYXBoOkJhcixzdWNjZXNzb3JXZWlnaHRzOkhhcixwcmVkZWNlc3NvcldlaWdodHM6VmFyLGludGVyc2VjdFJlY3Q6VWFyLGJ1aWxkTGF5ZXJNYXRyaXg6cWFyLG5vcm1hbGl6ZVJhbmtzOkdhcixyZW1vdmVFbXB0eVJhbmtzOldhcixhZGRCb3JkZXJOb2RlOllhcixtYXhSYW5rOlNhZSxwYXJ0aXRpb246amFyLHRpbWU6WGFyLG5vdGltZTokYXJ9O2Z1bmN0aW9uIHdhZShlLHQscixuKXt2YXIgaTtkbyBpPVFyLnVuaXF1ZUlkKG4pO3doaWxlKGUuaGFzTm9kZShpKSk7cmV0dXJuIHIuZHVtbXk9dCxlLnNldE5vZGUoaSxyKSxpfWZ1bmN0aW9uIEZhcihlKXt2YXIgdD1uZXcgYmFlKCkuc2V0R3JhcGgoZS5ncmFwaCgpKTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dC5zZXROb2RlKHIsZS5ub2RlKHIpKX0pLFFyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQuZWRnZShyLnYsci53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxpPWUuZWRnZShyKTt0LnNldEVkZ2Uoci52LHIudyx7d2VpZ2h0Om4ud2VpZ2h0K2kud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChuLm1pbmxlbixpLm1pbmxlbil9KX0pLHR9ZnVuY3Rpb24gQmFyKGUpe3ZhciB0PW5ldyBiYWUoe211bHRpZ3JhcGg6ZS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGUuZ3JhcGgoKSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe2UuY2hpbGRyZW4ocikubGVuZ3RofHx0LnNldE5vZGUocixlLm5vZGUocikpfSksUXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dC5zZXRFZGdlKHIsZS5lZGdlKHIpKX0pLHR9ZnVuY3Rpb24gSGFyKGUpe3ZhciB0PVFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49e307cmV0dXJuIFFyLmZvckVhY2goZS5vdXRFZGdlcyhyKSxmdW5jdGlvbihpKXtuW2kud109KG5baS53XXx8MCkrZS5lZGdlKGkpLndlaWdodH0pLG59KTtyZXR1cm4gUXIuemlwT2JqZWN0KGUubm9kZXMoKSx0KX1mdW5jdGlvbiBWYXIoZSl7dmFyIHQ9UXIubWFwKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj17fTtyZXR1cm4gUXIuZm9yRWFjaChlLmluRWRnZXMociksZnVuY3Rpb24oaSl7bltpLnZdPShuW2kudl18fDApK2UuZWRnZShpKS53ZWlnaHR9KSxufSk7cmV0dXJuIFFyLnppcE9iamVjdChlLm5vZGVzKCksdCl9ZnVuY3Rpb24gVWFyKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9dC54LXIsbz10LnktbixhPWUud2lkdGgvMixzPWUuaGVpZ2h0LzI7aWYoIWkmJiFvKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7dmFyIGwsYztyZXR1cm4gTWF0aC5hYnMobykqYT5NYXRoLmFicyhpKSpzPyhvPDAmJihzPS1zKSxsPXMqaS9vLGM9cyk6KGk8MCYmKGE9LWEpLGw9YSxjPWEqby9pKSx7eDpyK2wseTpuK2N9fWZ1bmN0aW9uIHFhcihlKXt2YXIgdD1Rci5tYXAoUXIucmFuZ2UoU2FlKGUpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpLGk9bi5yYW5rO1FyLmlzVW5kZWZpbmVkKGkpfHwodFtpXVtuLm9yZGVyXT1yKX0pLHR9ZnVuY3Rpb24gR2FyKGUpe3ZhciB0PVFyLm1pbihRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikucmFua30pKTtRci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLm5vZGUocik7UXIuaGFzKG4sInJhbmsiKSYmKG4ucmFuay09dCl9KX1mdW5jdGlvbiBXYXIoZSl7dmFyIHQ9UXIubWluKFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24obyl7cmV0dXJuIGUubm9kZShvKS5yYW5rfSkpLHI9W107UXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLnJhbmstdDtyW2FdfHwoclthXT1bXSksclthXS5wdXNoKG8pfSk7dmFyIG49MCxpPWUuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtRci5mb3JFYWNoKHIsZnVuY3Rpb24obyxhKXtRci5pc1VuZGVmaW5lZChvKSYmYSVpIT09MD8tLW46biYmUXIuZm9yRWFjaChvLGZ1bmN0aW9uKHMpe2Uubm9kZShzKS5yYW5rKz1ufSl9KX1mdW5jdGlvbiBZYXIoZSx0LHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSx3YWUoZSwiYm9yZGVyIixpLHQpfWZ1bmN0aW9uIFNhZShlKXtyZXR1cm4gUXIubWF4KFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLnJhbms7aWYoIVFyLmlzVW5kZWZpbmVkKHIpKXJldHVybiByfSkpfWZ1bmN0aW9uIGphcihlLHQpe3ZhciByPXtsaHM6W10scmhzOltdfTtyZXR1cm4gUXIuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3Qobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiBYYXIoZSx0KXt2YXIgcj1Rci5ub3coKTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e2NvbnNvbGUubG9nKGUrIiB0aW1lOiAiKyhRci5ub3coKS1yKSsibXMiKX19ZnVuY3Rpb24gJGFyKGUsdCl7cmV0dXJuIHQoKX19KTt2YXIgQ2FlPUgoKG5RbixUYWUpPT57InVzZSBzdHJpY3QiO3ZhciBFYWU9VW4oKSxLYXI9bnMoKTtUYWUuZXhwb3J0cz17cnVuOlphcix1bmRvOlFhcn07ZnVuY3Rpb24gWmFyKGUpe2UuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxFYWUuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7SmFyKGUsdCl9KX1mdW5jdGlvbiBKYXIoZSx0KXt2YXIgcj10LnYsbj1lLm5vZGUocikucmFuayxpPXQudyxvPWUubm9kZShpKS5yYW5rLGE9dC5uYW1lLHM9ZS5lZGdlKHQpLGw9cy5sYWJlbFJhbms7aWYobyE9PW4rMSl7ZS5yZW1vdmVFZGdlKHQpO3ZhciBjLHUsaDtmb3IoaD0wLCsrbjtuPG87KytoLCsrbilzLnBvaW50cz1bXSx1PXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpzLGVkZ2VPYmo6dCxyYW5rOm59LGM9S2FyLmFkZER1bW15Tm9kZShlLCJlZGdlIix1LCJfZCIpLG49PT1sJiYodS53aWR0aD1zLndpZHRoLHUuaGVpZ2h0PXMuaGVpZ2h0LHUuZHVtbXk9ImVkZ2UtbGFiZWwiLHUubGFiZWxwb3M9cy5sYWJlbHBvcyksZS5zZXRFZGdlKHIsYyx7d2VpZ2h0OnMud2VpZ2h0fSxhKSxoPT09MCYmZS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goYykscj1jO2Uuc2V0RWRnZShyLGkse3dlaWdodDpzLndlaWdodH0sYSl9fWZ1bmN0aW9uIFFhcihlKXtFYWUuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLG49ci5lZGdlTGFiZWwsaTtmb3IoZS5zZXRFZGdlKHIuZWRnZU9iaixuKTtyLmR1bW15OylpPWUuc3VjY2Vzc29ycyh0KVswXSxlLnJlbW92ZU5vZGUodCksbi5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSxyLmR1bW15PT09ImVkZ2UtbGFiZWwiJiYobi54PXIueCxuLnk9ci55LG4ud2lkdGg9ci53aWR0aCxuLmhlaWdodD1yLmhlaWdodCksdD1pLHI9ZS5ub2RlKHQpfSl9fSk7dmFyIFg0PUgoKGlRbixBYWUpPT57InVzZSBzdHJpY3QiO3ZhciB1SD1VbigpO0FhZS5leHBvcnRzPXtsb25nZXN0UGF0aDp0c3Isc2xhY2s6ZXNyfTtmdW5jdGlvbiB0c3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lLm5vZGUobik7aWYodUguaGFzKHQsbikpcmV0dXJuIGkucmFuazt0W25dPSEwO3ZhciBvPXVILm1pbih1SC5tYXAoZS5vdXRFZGdlcyhuKSxmdW5jdGlvbihhKXtyZXR1cm4gcihhLncpLWUuZWRnZShhKS5taW5sZW59KSk7cmV0dXJuKG89PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fG89PT12b2lkIDB8fG89PT1udWxsKSYmKG89MCksaS5yYW5rPW99dUguZm9yRWFjaChlLnNvdXJjZXMoKSxyKX1mdW5jdGlvbiBlc3IoZSx0KXtyZXR1cm4gZS5ub2RlKHQudykucmFuay1lLm5vZGUodC52KS5yYW5rLWUuZWRnZSh0KS5taW5sZW59fSk7dmFyIEVsdD1IKChvUW4sUGFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaEg9VW4oKSxyc3I9VWMoKS5HcmFwaCxmSD1YNCgpLnNsYWNrO1BhZS5leHBvcnRzPW5zcjtmdW5jdGlvbiBuc3IoZSl7dmFyIHQ9bmV3IHJzcih7ZGlyZWN0ZWQ6ITF9KSxyPWUubm9kZXMoKVswXSxuPWUubm9kZUNvdW50KCk7dC5zZXROb2RlKHIse30pO2Zvcih2YXIgaSxvO2lzcih0LGUpPG47KWk9b3NyKHQsZSksbz10Lmhhc05vZGUoaS52KT9mSChlLGkpOi1mSChlLGkpLGFzcih0LGUsbyk7cmV0dXJuIHR9ZnVuY3Rpb24gaXNyKGUsdCl7ZnVuY3Rpb24gcihuKXtoSC5mb3JFYWNoKHQubm9kZUVkZ2VzKG4pLGZ1bmN0aW9uKGkpe3ZhciBvPWkudixhPW49PT1vP2kudzpvOyFlLmhhc05vZGUoYSkmJiFmSCh0LGkpJiYoZS5zZXROb2RlKGEse30pLGUuc2V0RWRnZShuLGEse30pLHIoYSkpfSl9cmV0dXJuIGhILmZvckVhY2goZS5ub2RlcygpLHIpLGUubm9kZUNvdW50KCl9ZnVuY3Rpb24gb3NyKGUsdCl7cmV0dXJuIGhILm1pbkJ5KHQuZWRnZXMoKSxmdW5jdGlvbihyKXtpZihlLmhhc05vZGUoci52KSE9PWUuaGFzTm9kZShyLncpKXJldHVybiBmSCh0LHIpfSl9ZnVuY3Rpb24gYXNyKGUsdCxyKXtoSC5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihuKXt0Lm5vZGUobikucmFuays9cn0pfX0pO3ZhciB6YWU9SCgoYVFuLE9hZSk9PnsidXNlIHN0cmljdCI7dmFyIElkPVVuKCksc3NyPUVsdCgpLGxzcj1YNCgpLnNsYWNrLGNzcj1YNCgpLmxvbmdlc3RQYXRoLHVzcj1VYygpLmFsZy5wcmVvcmRlcixoc3I9VWMoKS5hbGcucG9zdG9yZGVyLGZzcj1ucygpLnNpbXBsaWZ5O09hZS5leHBvcnRzPXQxO3QxLmluaXRMb3dMaW1WYWx1ZXM9Q2x0O3QxLmluaXRDdXRWYWx1ZXM9VGx0O3QxLmNhbGNDdXRWYWx1ZT1MYWU7dDEubGVhdmVFZGdlPVJhZTt0MS5lbnRlckVkZ2U9TmFlO3QxLmV4Y2hhbmdlRWRnZXM9RGFlO2Z1bmN0aW9uIHQxKGUpe2U9ZnNyKGUpLGNzcihlKTt2YXIgdD1zc3IoZSk7Q2x0KHQpLFRsdCh0LGUpO2Zvcih2YXIgcixuO3I9UmFlKHQpOyluPU5hZSh0LGUsciksRGFlKHQsZSxyLG4pfWZ1bmN0aW9uIFRsdChlLHQpe3ZhciByPWhzcihlLGUubm9kZXMoKSk7cj1yLnNsaWNlKDAsci5sZW5ndGgtMSksSWQuZm9yRWFjaChyLGZ1bmN0aW9uKG4pe3BzcihlLHQsbil9KX1mdW5jdGlvbiBwc3IoZSx0LHIpe3ZhciBuPWUubm9kZShyKSxpPW4ucGFyZW50O2UuZWRnZShyLGkpLmN1dHZhbHVlPUxhZShlLHQscil9ZnVuY3Rpb24gTGFlKGUsdCxyKXt2YXIgbj1lLm5vZGUociksaT1uLnBhcmVudCxvPSEwLGE9dC5lZGdlKHIsaSkscz0wO3JldHVybiBhfHwobz0hMSxhPXQuZWRnZShpLHIpKSxzPWEud2VpZ2h0LElkLmZvckVhY2godC5ub2RlRWRnZXMociksZnVuY3Rpb24obCl7dmFyIGM9bC52PT09cix1PWM/bC53OmwudjtpZih1IT09aSl7dmFyIGg9Yz09PW8sZj10LmVkZ2UobCkud2VpZ2h0O2lmKHMrPWg/ZjotZixtc3IoZSxyLHUpKXt2YXIgcD1lLmVkZ2Uocix1KS5jdXR2YWx1ZTtzKz1oPy1wOnB9fX0pLHN9ZnVuY3Rpb24gQ2x0KGUsdCl7YXJndW1lbnRzLmxlbmd0aDwyJiYodD1lLm5vZGVzKClbMF0pLGthZShlLHt9LDEsdCl9ZnVuY3Rpb24ga2FlKGUsdCxyLG4saSl7dmFyIG89cixhPWUubm9kZShuKTtyZXR1cm4gdFtuXT0hMCxJZC5mb3JFYWNoKGUubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKHMpe0lkLmhhcyh0LHMpfHwocj1rYWUoZSx0LHIscyxuKSl9KSxhLmxvdz1vLGEubGltPXIrKyxpP2EucGFyZW50PWk6ZGVsZXRlIGEucGFyZW50LHJ9ZnVuY3Rpb24gUmFlKGUpe3JldHVybiBJZC5maW5kKGUuZWRnZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGdlKHQpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBOYWUoZSx0LHIpe3ZhciBuPXIudixpPXIudzt0Lmhhc0VkZ2UobixpKXx8KG49ci53LGk9ci52KTt2YXIgbz1lLm5vZGUobiksYT1lLm5vZGUoaSkscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9SWQuZmlsdGVyKHQuZWRnZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gbD09PUlhZShlLGUubm9kZSh1LnYpLHMpJiZsIT09SWFlKGUsZS5ub2RlKHUudykscyl9KTtyZXR1cm4gSWQubWluQnkoYyxmdW5jdGlvbih1KXtyZXR1cm4gbHNyKHQsdSl9KX1mdW5jdGlvbiBEYWUoZSx0LHIsbil7dmFyIGk9ci52LG89ci53O2UucmVtb3ZlRWRnZShpLG8pLGUuc2V0RWRnZShuLnYsbi53LHt9KSxDbHQoZSksVGx0KGUsdCksZHNyKGUsdCl9ZnVuY3Rpb24gZHNyKGUsdCl7dmFyIHI9SWQuZmluZChlLm5vZGVzKCksZnVuY3Rpb24oaSl7cmV0dXJuIXQubm9kZShpKS5wYXJlbnR9KSxuPXVzcihlLHIpO249bi5zbGljZSgxKSxJZC5mb3JFYWNoKG4sZnVuY3Rpb24oaSl7dmFyIG89ZS5ub2RlKGkpLnBhcmVudCxhPXQuZWRnZShpLG8pLHM9ITE7YXx8KGE9dC5lZGdlKG8saSkscz0hMCksdC5ub2RlKGkpLnJhbms9dC5ub2RlKG8pLnJhbmsrKHM/YS5taW5sZW46LWEubWlubGVuKX0pfWZ1bmN0aW9uIG1zcihlLHQscil7cmV0dXJuIGUuaGFzRWRnZSh0LHIpfWZ1bmN0aW9uIElhZShlLHQscil7cmV0dXJuIHIubG93PD10LmxpbSYmdC5saW08PXIubGltfX0pO3ZhciBWYWU9SCgoc1FuLEhhZSk9PnsidXNlIHN0cmljdCI7dmFyIGdzcj1YNCgpLEJhZT1nc3IubG9uZ2VzdFBhdGgsX3NyPUVsdCgpLHlzcj16YWUoKTtIYWUuZXhwb3J0cz12c3I7ZnVuY3Rpb24gdnNyKGUpe3N3aXRjaChlLmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6RmFlKGUpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6YnNyKGUpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjp4c3IoZSk7YnJlYWs7ZGVmYXVsdDpGYWUoZSl9fXZhciB4c3I9QmFlO2Z1bmN0aW9uIGJzcihlKXtCYWUoZSksX3NyKGUpfWZ1bmN0aW9uIEZhZShlKXt5c3IoZSl9fSk7dmFyIHFhZT1IKChsUW4sVWFlKT0+e3ZhciBBbHQ9VW4oKTtVYWUuZXhwb3J0cz13c3I7ZnVuY3Rpb24gd3NyKGUpe3ZhciB0PU1zcihlKTtBbHQuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUubm9kZShyKSxpPW4uZWRnZU9iaixvPVNzcihlLHQsaS52LGkudyksYT1vLnBhdGgscz1vLmxjYSxsPTAsYz1hW2xdLHU9ITA7ciE9PWkudzspe2lmKG49ZS5ub2RlKHIpLHUpe2Zvcig7KGM9YVtsXSkhPT1zJiZlLm5vZGUoYykubWF4UmFuazxuLnJhbms7KWwrKztjPT09cyYmKHU9ITEpfWlmKCF1KXtmb3IoO2w8YS5sZW5ndGgtMSYmZS5ub2RlKGM9YVtsKzFdKS5taW5SYW5rPD1uLnJhbms7KWwrKztjPWFbbF19ZS5zZXRQYXJlbnQocixjKSxyPWUuc3VjY2Vzc29ycyhyKVswXX19KX1mdW5jdGlvbiBTc3IoZSx0LHIsbil7dmFyIGk9W10sbz1bXSxhPU1hdGgubWluKHRbcl0ubG93LHRbbl0ubG93KSxzPU1hdGgubWF4KHRbcl0ubGltLHRbbl0ubGltKSxsLGM7bD1yO2RvIGw9ZS5wYXJlbnQobCksaS5wdXNoKGwpO3doaWxlKGwmJih0W2xdLmxvdz5hfHxzPnRbbF0ubGltKSk7Zm9yKGM9bCxsPW47KGw9ZS5wYXJlbnQobCkpIT09Yzspby5wdXNoKGwpO3JldHVybntwYXRoOmkuY29uY2F0KG8ucmV2ZXJzZSgpKSxsY2E6Y319ZnVuY3Rpb24gTXNyKGUpe3ZhciB0PXt9LHI9MDtmdW5jdGlvbiBuKGkpe3ZhciBvPXI7QWx0LmZvckVhY2goZS5jaGlsZHJlbihpKSxuKSx0W2ldPXtsb3c6byxsaW06cisrfX1yZXR1cm4gQWx0LmZvckVhY2goZS5jaGlsZHJlbigpLG4pLHR9fSk7dmFyIFlhZT1IKChjUW4sV2FlKT0+e3ZhciBMZD1VbigpLFBsdD1ucygpO1dhZS5leHBvcnRzPXtydW46RXNyLGNsZWFudXA6QXNyfTtmdW5jdGlvbiBFc3IoZSl7dmFyIHQ9UGx0LmFkZER1bW15Tm9kZShlLCJyb290Iix7fSwiX3Jvb3QiKSxyPVRzcihlKSxuPUxkLm1heChMZC52YWx1ZXMocikpLTEsaT0yKm4rMTtlLmdyYXBoKCkubmVzdGluZ1Jvb3Q9dCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihhKXtlLmVkZ2UoYSkubWlubGVuKj1pfSk7dmFyIG89Q3NyKGUpKzE7TGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24oYSl7R2FlKGUsdCxpLG8sbixyLGEpfSksZS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPWl9ZnVuY3Rpb24gR2FlKGUsdCxyLG4saSxvLGEpe3ZhciBzPWUuY2hpbGRyZW4oYSk7aWYoIXMubGVuZ3RoKXthIT09dCYmZS5zZXRFZGdlKHQsYSx7d2VpZ2h0OjAsbWlubGVuOnJ9KTtyZXR1cm59dmFyIGw9UGx0LmFkZEJvcmRlck5vZGUoZSwiX2J0IiksYz1QbHQuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSx1PWUubm9kZShhKTtlLnNldFBhcmVudChsLGEpLHUuYm9yZGVyVG9wPWwsZS5zZXRQYXJlbnQoYyxhKSx1LmJvcmRlckJvdHRvbT1jLExkLmZvckVhY2gocyxmdW5jdGlvbihoKXtHYWUoZSx0LHIsbixpLG8saCk7dmFyIGY9ZS5ub2RlKGgpLHA9Zi5ib3JkZXJUb3A/Zi5ib3JkZXJUb3A6aCxkPWYuYm9yZGVyQm90dG9tP2YuYm9yZGVyQm90dG9tOmgsZz1mLmJvcmRlclRvcD9uOjIqbixfPXAhPT1kPzE6aS1vW2FdKzE7ZS5zZXRFZGdlKGwscCx7d2VpZ2h0OmcsbWlubGVuOl8sbmVzdGluZ0VkZ2U6ITB9KSxlLnNldEVkZ2UoZCxjLHt3ZWlnaHQ6ZyxtaW5sZW46XyxuZXN0aW5nRWRnZTohMH0pfSksZS5wYXJlbnQoYSl8fGUuc2V0RWRnZSh0LGwse3dlaWdodDowLG1pbmxlbjppK29bYV19KX1mdW5jdGlvbiBUc3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBvPWUuY2hpbGRyZW4obik7byYmby5sZW5ndGgmJkxkLmZvckVhY2gobyxmdW5jdGlvbihhKXtyKGEsaSsxKX0pLHRbbl09aX1yZXR1cm4gTGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24obil7cihuLDEpfSksdH1mdW5jdGlvbiBDc3IoZSl7cmV0dXJuIExkLnJlZHVjZShlLmVkZ2VzKCksZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlLmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBBc3IoZSl7dmFyIHQ9ZS5ncmFwaCgpO2UucmVtb3ZlTm9kZSh0Lm5lc3RpbmdSb290KSxkZWxldGUgdC5uZXN0aW5nUm9vdCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5uZXN0aW5nRWRnZSYmZS5yZW1vdmVFZGdlKHIpfSl9fSk7dmFyICRhZT1IKCh1UW4sWGFlKT0+e3ZhciBJbHQ9VW4oKSxQc3I9bnMoKTtYYWUuZXhwb3J0cz1Jc3I7ZnVuY3Rpb24gSXNyKGUpe2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jaGlsZHJlbihyKSxpPWUubm9kZShyKTtpZihuLmxlbmd0aCYmSWx0LmZvckVhY2gobix0KSxJbHQuaGFzKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBvPWkubWluUmFuayxhPWkubWF4UmFuaysxO288YTsrK28pamFlKGUsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxvKSxqYWUoZSwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxvKX19SWx0LmZvckVhY2goZS5jaGlsZHJlbigpLHQpfWZ1bmN0aW9uIGphZShlLHQscixuLGksbyl7dmFyIGE9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6dH0scz1pW3RdW28tMV0sbD1Qc3IuYWRkRHVtbXlOb2RlKGUsImJvcmRlciIsYSxyKTtpW3RdW29dPWwsZS5zZXRQYXJlbnQobCxuKSxzJiZlLnNldEVkZ2UocyxsLHt3ZWlnaHQ6MX0pfX0pO3ZhciBRYWU9SCgoaFFuLEphZSk9PnsidXNlIHN0cmljdCI7dmFyIFVmPVVuKCk7SmFlLmV4cG9ydHM9e2FkanVzdDpMc3IsdW5kbzprc3J9O2Z1bmN0aW9uIExzcihlKXt2YXIgdD1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyh0PT09ImxyInx8dD09PSJybCIpJiZaYWUoZSl9ZnVuY3Rpb24ga3NyKGUpe3ZhciB0PWUuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KHQ9PT0iYnQifHx0PT09InJsIikmJlJzcihlKSwodD09PSJsciJ8fHQ9PT0icmwiKSYmKE5zcihlKSxaYWUoZSkpfWZ1bmN0aW9uIFphZShlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtLYWUoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe0thZShlLmVkZ2UodCkpfSl9ZnVuY3Rpb24gS2FlKGUpe3ZhciB0PWUud2lkdGg7ZS53aWR0aD1lLmhlaWdodCxlLmhlaWdodD10fWZ1bmN0aW9uIFJzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtMbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLExsdCksVWYuaGFzKHIsInkiKSYmTGx0KHIpfSl9ZnVuY3Rpb24gTGx0KGUpe2UueT0tZS55fWZ1bmN0aW9uIE5zcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtrbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLGtsdCksVWYuaGFzKHIsIngiKSYma2x0KHIpfSl9ZnVuY3Rpb24ga2x0KGUpe3ZhciB0PWUueDtlLng9ZS55LGUueT10fX0pO3ZhciBlc2U9SCgoZlFuLHRzZSk9PnsidXNlIHN0cmljdCI7dmFyIGtkPVVuKCk7dHNlLmV4cG9ydHM9RHNyO2Z1bmN0aW9uIERzcihlKXt2YXIgdD17fSxyPWtkLmZpbHRlcihlLm5vZGVzKCksZnVuY3Rpb24ocyl7cmV0dXJuIWUuY2hpbGRyZW4ocykubGVuZ3RofSksbj1rZC5tYXgoa2QubWFwKHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSkpLGk9a2QubWFwKGtkLnJhbmdlKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG8ocyl7aWYoIWtkLmhhcyh0LHMpKXt0W3NdPSEwO3ZhciBsPWUubm9kZShzKTtpW2wucmFua10ucHVzaChzKSxrZC5mb3JFYWNoKGUuc3VjY2Vzc29ycyhzKSxvKX19dmFyIGE9a2Quc29ydEJ5KHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSk7cmV0dXJuIGtkLmZvckVhY2goYSxvKSxpfX0pO3ZhciBuc2U9SCgocFFuLHJzZSk9PnsidXNlIHN0cmljdCI7dmFyIGgwPVVuKCk7cnNlLmV4cG9ydHM9T3NyO2Z1bmN0aW9uIE9zcihlLHQpe2Zvcih2YXIgcj0wLG49MTtuPHQubGVuZ3RoOysrbilyKz16c3IoZSx0W24tMV0sdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24genNyKGUsdCxyKXtmb3IodmFyIG49aDAuemlwT2JqZWN0KHIsaDAubWFwKHIsZnVuY3Rpb24oYyx1KXtyZXR1cm4gdX0pKSxpPWgwLmZsYXR0ZW4oaDAubWFwKHQsZnVuY3Rpb24oYyl7cmV0dXJuIGgwLnNvcnRCeShoMC5tYXAoZS5vdXRFZGdlcyhjKSxmdW5jdGlvbih1KXtyZXR1cm57cG9zOm5bdS53XSx3ZWlnaHQ6ZS5lZGdlKHUpLndlaWdodH19KSwicG9zIil9KSwhMCksbz0xO288ci5sZW5ndGg7KW88PD0xO3ZhciBhPTIqby0xO28tPTE7dmFyIHM9aDAubWFwKG5ldyBBcnJheShhKSxmdW5jdGlvbigpe3JldHVybiAwfSksbD0wO3JldHVybiBoMC5mb3JFYWNoKGkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jLnBvcytvO3NbdV0rPWMud2VpZ2h0O2Zvcih2YXIgaD0wO3U+MDspdSUyJiYoaCs9c1t1KzFdKSx1PXUtMT4+MSxzW3VdKz1jLndlaWdodDtsKz1jLndlaWdodCpofSkpLGx9fSk7dmFyIGFzZT1IKChkUW4sb3NlKT0+e3ZhciBpc2U9VW4oKTtvc2UuZXhwb3J0cz1Gc3I7ZnVuY3Rpb24gRnNyKGUsdCl7cmV0dXJuIGlzZS5tYXAodCxmdW5jdGlvbihyKXt2YXIgbj1lLmluRWRnZXMocik7aWYobi5sZW5ndGgpe3ZhciBpPWlzZS5yZWR1Y2UobixmdW5jdGlvbihvLGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO3JldHVybntzdW06by5zdW0rcy53ZWlnaHQqbC5vcmRlcix3ZWlnaHQ6by53ZWlnaHQrcy53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djpyLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1lbHNlIHJldHVybnt2OnJ9fSl9fSk7dmFyIGxzZT1IKChtUW4sc3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVGw9VW4oKTtzc2UuZXhwb3J0cz1Cc3I7ZnVuY3Rpb24gQnNyKGUsdCl7dmFyIHI9e307VGwuZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7dmFyIGE9cltpLnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbaS52XSxpOm99O1RsLmlzVW5kZWZpbmVkKGkuYmFyeWNlbnRlcil8fChhLmJhcnljZW50ZXI9aS5iYXJ5Y2VudGVyLGEud2VpZ2h0PWkud2VpZ2h0KX0pLFRsLmZvckVhY2godC5lZGdlcygpLGZ1bmN0aW9uKGkpe3ZhciBvPXJbaS52XSxhPXJbaS53XTshVGwuaXNVbmRlZmluZWQobykmJiFUbC5pc1VuZGVmaW5lZChhKSYmKGEuaW5kZWdyZWUrKyxvLm91dC5wdXNoKHJbaS53XSkpfSk7dmFyIG49VGwuZmlsdGVyKHIsZnVuY3Rpb24oaSl7cmV0dXJuIWkuaW5kZWdyZWV9KTtyZXR1cm4gSHNyKG4pfWZ1bmN0aW9uIEhzcihlKXt2YXIgdD1bXTtmdW5jdGlvbiByKG8pe3JldHVybiBmdW5jdGlvbihhKXthLm1lcmdlZHx8KFRsLmlzVW5kZWZpbmVkKGEuYmFyeWNlbnRlcil8fFRsLmlzVW5kZWZpbmVkKG8uYmFyeWNlbnRlcil8fGEuYmFyeWNlbnRlcj49by5iYXJ5Y2VudGVyKSYmVnNyKG8sYSl9fWZ1bmN0aW9uIG4obyl7cmV0dXJuIGZ1bmN0aW9uKGEpe2EuaW4ucHVzaChvKSwtLWEuaW5kZWdyZWU9PT0wJiZlLnB1c2goYSl9fWZvcig7ZS5sZW5ndGg7KXt2YXIgaT1lLnBvcCgpO3QucHVzaChpKSxUbC5mb3JFYWNoKGkuaW4ucmV2ZXJzZSgpLHIoaSkpLFRsLmZvckVhY2goaS5vdXQsbihpKSl9cmV0dXJuIFRsLm1hcChUbC5maWx0ZXIodCxmdW5jdGlvbihvKXtyZXR1cm4hby5tZXJnZWR9KSxmdW5jdGlvbihvKXtyZXR1cm4gVGwucGljayhvLFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIFZzcihlLHQpe3ZhciByPTAsbj0wO2Uud2VpZ2h0JiYocis9ZS5iYXJ5Y2VudGVyKmUud2VpZ2h0LG4rPWUud2VpZ2h0KSx0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS52cz10LnZzLmNvbmNhdChlLnZzKSxlLmJhcnljZW50ZXI9ci9uLGUud2VpZ2h0PW4sZS5pPU1hdGgubWluKHQuaSxlLmkpLHQubWVyZ2VkPSEwfX0pO3ZhciBoc2U9SCgoZ1FuLHVzZSk9Pnt2YXIgJDQ9VW4oKSxVc3I9bnMoKTt1c2UuZXhwb3J0cz1xc3I7ZnVuY3Rpb24gcXNyKGUsdCl7dmFyIHI9VXNyLnBhcnRpdGlvbihlLGZ1bmN0aW9uKHUpe3JldHVybiAkNC5oYXModSwiYmFyeWNlbnRlciIpfSksbj1yLmxocyxpPSQ0LnNvcnRCeShyLnJocyxmdW5jdGlvbih1KXtyZXR1cm4tdS5pfSksbz1bXSxhPTAscz0wLGw9MDtuLnNvcnQoR3NyKCEhdCkpLGw9Y3NlKG8saSxsKSwkNC5mb3JFYWNoKG4sZnVuY3Rpb24odSl7bCs9dS52cy5sZW5ndGgsby5wdXNoKHUudnMpLGErPXUuYmFyeWNlbnRlcip1LndlaWdodCxzKz11LndlaWdodCxsPWNzZShvLGksbCl9KTt2YXIgYz17dnM6JDQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJihjLmJhcnljZW50ZXI9YS9zLGMud2VpZ2h0PXMpLGN9ZnVuY3Rpb24gY3NlKGUsdCxyKXtmb3IodmFyIG47dC5sZW5ndGgmJihuPSQ0Lmxhc3QodCkpLmk8PXI7KXQucG9wKCksZS5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBHc3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6dC5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOmU/ci5pLXQuaTp0Lmktci5pfX19KTt2YXIgZHNlPUgoKF9Rbixwc2UpPT57dmFyIGYwPVVuKCksV3NyPWFzZSgpLFlzcj1sc2UoKSxqc3I9aHNlKCk7cHNlLmV4cG9ydHM9ZnNlO2Z1bmN0aW9uIGZzZShlLHQscixuKXt2YXIgaT1lLmNoaWxkcmVuKHQpLG89ZS5ub2RlKHQpLGE9bz9vLmJvcmRlckxlZnQ6dm9pZCAwLHM9bz9vLmJvcmRlclJpZ2h0OnZvaWQgMCxsPXt9O2EmJihpPWYwLmZpbHRlcihpLGZ1bmN0aW9uKGQpe3JldHVybiBkIT09YSYmZCE9PXN9KSk7dmFyIGM9V3NyKGUsaSk7ZjAuZm9yRWFjaChjLGZ1bmN0aW9uKGQpe2lmKGUuY2hpbGRyZW4oZC52KS5sZW5ndGgpe3ZhciBnPWZzZShlLGQudixyLG4pO2xbZC52XT1nLGYwLmhhcyhnLCJiYXJ5Y2VudGVyIikmJiRzcihkLGcpfX0pO3ZhciB1PVlzcihjLHIpO1hzcih1LGwpO3ZhciBoPWpzcih1LG4pO2lmKGEmJihoLnZzPWYwLmZsYXR0ZW4oW2EsaC52cyxzXSwhMCksZS5wcmVkZWNlc3NvcnMoYSkubGVuZ3RoKSl7dmFyIGY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGEpWzBdKSxwPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSk7ZjAuaGFzKGgsImJhcnljZW50ZXIiKXx8KGguYmFyeWNlbnRlcj0wLGgud2VpZ2h0PTApLGguYmFyeWNlbnRlcj0oaC5iYXJ5Y2VudGVyKmgud2VpZ2h0K2Yub3JkZXIrcC5vcmRlcikvKGgud2VpZ2h0KzIpLGgud2VpZ2h0Kz0yfXJldHVybiBofWZ1bmN0aW9uIFhzcihlLHQpe2YwLmZvckVhY2goZSxmdW5jdGlvbihyKXtyLnZzPWYwLmZsYXR0ZW4oci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHRbbl0/dFtuXS52czpufSksITApfSl9ZnVuY3Rpb24gJHNyKGUsdCl7ZjAuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKT8oZS5iYXJ5Y2VudGVyPXQuYmFyeWNlbnRlcixlLndlaWdodD10LndlaWdodCk6KGUuYmFyeWNlbnRlcj0oZS5iYXJ5Y2VudGVyKmUud2VpZ2h0K3QuYmFyeWNlbnRlcip0LndlaWdodCkvKGUud2VpZ2h0K3Qud2VpZ2h0KSxlLndlaWdodCs9dC53ZWlnaHQpfX0pO3ZhciBnc2U9SCgoeVFuLG1zZSk9Pnt2YXIgSzQ9VW4oKSxLc3I9VWMoKS5HcmFwaDttc2UuZXhwb3J0cz1ac3I7ZnVuY3Rpb24gWnNyKGUsdCxyKXt2YXIgbj1Kc3IoZSksaT1uZXcgS3NyKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Om59KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKG8pe3JldHVybiBlLm5vZGUobyl9KTtyZXR1cm4gSzQuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLHM9ZS5wYXJlbnQobyk7KGEucmFuaz09PXR8fGEubWluUmFuazw9dCYmdDw9YS5tYXhSYW5rKSYmKGkuc2V0Tm9kZShvKSxpLnNldFBhcmVudChvLHN8fG4pLEs0LmZvckVhY2goZVtyXShvKSxmdW5jdGlvbihsKXt2YXIgYz1sLnY9PT1vP2wudzpsLnYsdT1pLmVkZ2UoYyxvKSxoPUs0LmlzVW5kZWZpbmVkKHUpPzA6dS53ZWlnaHQ7aS5zZXRFZGdlKGMsbyx7d2VpZ2h0OmUuZWRnZShsKS53ZWlnaHQraH0pfSksSzQuaGFzKGEsIm1pblJhbmsiKSYmaS5zZXROb2RlKG8se2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W3RdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbdF19KSl9KSxpfWZ1bmN0aW9uIEpzcihlKXtmb3IodmFyIHQ7ZS5oYXNOb2RlKHQ9SzQudW5pcXVlSWQoIl9yb290IikpOyk7cmV0dXJuIHR9fSk7dmFyIHlzZT1IKCh2UW4sX3NlKT0+e3ZhciBRc3I9VW4oKTtfc2UuZXhwb3J0cz10bHI7ZnVuY3Rpb24gdGxyKGUsdCxyKXt2YXIgbj17fSxpO1Fzci5mb3JFYWNoKHIsZnVuY3Rpb24obyl7Zm9yKHZhciBhPWUucGFyZW50KG8pLHMsbDthOyl7aWYocz1lLnBhcmVudChhKSxzPyhsPW5bc10sbltzXT1hKToobD1pLGk9YSksbCYmbCE9PWEpe3Quc2V0RWRnZShsLGEpO3JldHVybn1hPXN9fSl9fSk7dmFyIFNzZT1IKCh4UW4sd3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcDA9VW4oKSxlbHI9ZXNlKCkscmxyPW5zZSgpLG5scj1kc2UoKSxpbHI9Z3NlKCksb2xyPXlzZSgpLGFscj1VYygpLkdyYXBoLHZzZT1ucygpO3dzZS5leHBvcnRzPXNscjtmdW5jdGlvbiBzbHIoZSl7dmFyIHQ9dnNlLm1heFJhbmsoZSkscj14c2UoZSxwMC5yYW5nZSgxLHQrMSksImluRWRnZXMiKSxuPXhzZShlLHAwLnJhbmdlKHQtMSwtMSwtMSksIm91dEVkZ2VzIiksaT1lbHIoZSk7YnNlKGUsaSk7Zm9yKHZhciBvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhLHM9MCxsPTA7bDw0OysrcywrK2wpe2xscihzJTI/cjpuLHMlND49MiksaT12c2UuYnVpbGRMYXllck1hdHJpeChlKTt2YXIgYz1ybHIoZSxpKTtjPG8mJihsPTAsYT1wMC5jbG9uZURlZXAoaSksbz1jKX1ic2UoZSxhKX1mdW5jdGlvbiB4c2UoZSx0LHIpe3JldHVybiBwMC5tYXAodCxmdW5jdGlvbihuKXtyZXR1cm4gaWxyKGUsbixyKX0pfWZ1bmN0aW9uIGxscihlLHQpe3ZhciByPW5ldyBhbHI7cDAuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3ZhciBpPW4uZ3JhcGgoKS5yb290LG89bmxyKG4saSxyLHQpO3AwLmZvckVhY2goby52cyxmdW5jdGlvbihhLHMpe24ubm9kZShhKS5vcmRlcj1zfSksb2xyKG4scixvLnZzKX0pfWZ1bmN0aW9uIGJzZShlLHQpe3AwLmZvckVhY2godCxmdW5jdGlvbihyKXtwMC5mb3JFYWNoKHIsZnVuY3Rpb24obixpKXtlLm5vZGUobikub3JkZXI9aX0pfSl9fSk7dmFyIFJzZT1IKChiUW4sa3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWGU9VW4oKSxjbHI9VWMoKS5HcmFwaCx1bHI9bnMoKTtrc2UuZXhwb3J0cz17cG9zaXRpb25YOnBscixmaW5kVHlwZTFDb25mbGljdHM6TXNlLGZpbmRUeXBlMkNvbmZsaWN0czpFc2UsYWRkQ29uZmxpY3Q6Umx0LGhhc0NvbmZsaWN0OlRzZSx2ZXJ0aWNhbEFsaWdubWVudDpDc2UsaG9yaXpvbnRhbENvbXBhY3Rpb246QXNlLGFsaWduQ29vcmRpbmF0ZXM6SXNlLGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50OlBzZSxiYWxhbmNlOkxzZX07ZnVuY3Rpb24gTXNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihpLG8pe3ZhciBhPTAscz0wLGw9aS5sZW5ndGgsYz1YZS5sYXN0KG8pO3JldHVybiBYZS5mb3JFYWNoKG8sZnVuY3Rpb24odSxoKXt2YXIgZj1obHIoZSx1KSxwPWY/ZS5ub2RlKGYpLm9yZGVyOmw7KGZ8fHU9PT1jKSYmKFhlLmZvckVhY2goby5zbGljZShzLGgrMSksZnVuY3Rpb24oZCl7WGUuZm9yRWFjaChlLnByZWRlY2Vzc29ycyhkKSxmdW5jdGlvbihnKXt2YXIgXz1lLm5vZGUoZykseT1fLm9yZGVyOyh5PGF8fHA8eSkmJiEoXy5kdW1teSYmZS5ub2RlKGQpLmR1bW15KSYmUmx0KHIsZyxkKX0pfSkscz1oKzEsYT1wKX0pLG99cmV0dXJuIFhlLnJlZHVjZSh0LG4pLHJ9ZnVuY3Rpb24gRXNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihvLGEscyxsLGMpe3ZhciB1O1hlLmZvckVhY2goWGUucmFuZ2UoYSxzKSxmdW5jdGlvbihoKXt1PW9baF0sZS5ub2RlKHUpLmR1bW15JiZYZS5mb3JFYWNoKGUucHJlZGVjZXNzb3JzKHUpLGZ1bmN0aW9uKGYpe3ZhciBwPWUubm9kZShmKTtwLmR1bW15JiYocC5vcmRlcjxsfHxwLm9yZGVyPmMpJiZSbHQocixmLHUpfSl9KX1mdW5jdGlvbiBpKG8sYSl7dmFyIHM9LTEsbCxjPTA7cmV0dXJuIFhlLmZvckVhY2goYSxmdW5jdGlvbih1LGgpe2lmKGUubm9kZSh1KS5kdW1teT09PSJib3JkZXIiKXt2YXIgZj1lLnByZWRlY2Vzc29ycyh1KTtmLmxlbmd0aCYmKGw9ZS5ub2RlKGZbMF0pLm9yZGVyLG4oYSxjLGgscyxsKSxjPWgscz1sKX1uKGEsYyxhLmxlbmd0aCxsLG8ubGVuZ3RoKX0pLGF9cmV0dXJuIFhlLnJlZHVjZSh0LGkpLHJ9ZnVuY3Rpb24gaGxyKGUsdCl7aWYoZS5ub2RlKHQpLmR1bW15KXJldHVybiBYZS5maW5kKGUucHJlZGVjZXNzb3JzKHQpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikuZHVtbXl9KX1mdW5jdGlvbiBSbHQoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXZhciBpPWVbdF07aXx8KGVbdF09aT17fSksaVtyXT0hMH1mdW5jdGlvbiBUc2UoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXJldHVybiBYZS5oYXMoZVt0XSxyKX1mdW5jdGlvbiBDc2UoZSx0LHIsbil7dmFyIGk9e30sbz17fSxhPXt9O3JldHVybiBYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGwsYyl7aVtsXT1sLG9bbF09bCxhW2xdPWN9KX0pLFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbD0tMTtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9bihjKTtpZih1Lmxlbmd0aCl7dT1YZS5zb3J0QnkodSxmdW5jdGlvbihnKXtyZXR1cm4gYVtnXX0pO2Zvcih2YXIgaD0odS5sZW5ndGgtMSkvMixmPU1hdGguZmxvb3IoaCkscD1NYXRoLmNlaWwoaCk7Zjw9cDsrK2Ype3ZhciBkPXVbZl07b1tjXT09PWMmJmw8YVtkXSYmIVRzZShyLGMsZCkmJihvW2RdPWMsb1tjXT1pW2NdPWlbZF0sbD1hW2RdKX19fSl9KSx7cm9vdDppLGFsaWduOm99fWZ1bmN0aW9uIEFzZShlLHQscixuLGkpe3ZhciBvPXt9LGE9ZmxyKGUsdCxyLGkpLHM9aT8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBsKGgsZil7Zm9yKHZhciBwPWEubm9kZXMoKSxkPXAucG9wKCksZz17fTtkOylnW2RdP2goZCk6KGdbZF09ITAscC5wdXNoKGQpLHA9cC5jb25jYXQoZihkKSkpLGQ9cC5wb3AoKX1mdW5jdGlvbiBjKGgpe29baF09YS5pbkVkZ2VzKGgpLnJlZHVjZShmdW5jdGlvbihmLHApe3JldHVybiBNYXRoLm1heChmLG9bcC52XSthLmVkZ2UocCkpfSwwKX1mdW5jdGlvbiB1KGgpe3ZhciBmPWEub3V0RWRnZXMoaCkucmVkdWNlKGZ1bmN0aW9uKGQsZyl7cmV0dXJuIE1hdGgubWluKGQsb1tnLnddLWEuZWRnZShnKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkscD1lLm5vZGUoaCk7ZiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmcC5ib3JkZXJUeXBlIT09cyYmKG9baF09TWF0aC5tYXgob1toXSxmKSl9cmV0dXJuIGwoYyxhLnByZWRlY2Vzc29ycy5iaW5kKGEpKSxsKHUsYS5zdWNjZXNzb3JzLmJpbmQoYSkpLFhlLmZvckVhY2gobixmdW5jdGlvbihoKXtvW2hdPW9bcltoXV19KSxvfWZ1bmN0aW9uIGZscihlLHQscixuKXt2YXIgaT1uZXcgY2xyLG89ZS5ncmFwaCgpLGE9ZGxyKG8ubm9kZXNlcCxvLmVkZ2VzZXAsbik7cmV0dXJuIFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbDtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9cltjXTtpZihpLnNldE5vZGUodSksbCl7dmFyIGg9cltsXSxmPWkuZWRnZShoLHUpO2kuc2V0RWRnZShoLHUsTWF0aC5tYXgoYShlLGMsbCksZnx8MCkpfWw9Y30pfSksaX1mdW5jdGlvbiBQc2UoZSx0KXtyZXR1cm4gWGUubWluQnkoWGUudmFsdWVzKHQpLGZ1bmN0aW9uKHIpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gWGUuZm9ySW4ocixmdW5jdGlvbihvLGEpe3ZhciBzPW1scihlLGEpLzI7bj1NYXRoLm1heChvK3MsbiksaT1NYXRoLm1pbihvLXMsaSl9KSxuLWl9KX1mdW5jdGlvbiBJc2UoZSx0KXt2YXIgcj1YZS52YWx1ZXModCksbj1YZS5taW4ociksaT1YZS5tYXgocik7WGUuZm9yRWFjaChbInUiLCJkIl0sZnVuY3Rpb24obyl7WGUuZm9yRWFjaChbImwiLCJyIl0sZnVuY3Rpb24oYSl7dmFyIHM9bythLGw9ZVtzXSxjO2lmKGwhPT10KXt2YXIgdT1YZS52YWx1ZXMobCk7Yz1hPT09ImwiP24tWGUubWluKHUpOmktWGUubWF4KHUpLGMmJihlW3NdPVhlLm1hcFZhbHVlcyhsLGZ1bmN0aW9uKGgpe3JldHVybiBoK2N9KSl9fSl9KX1mdW5jdGlvbiBMc2UoZSx0KXtyZXR1cm4gWGUubWFwVmFsdWVzKGUudWwsZnVuY3Rpb24ocixuKXtpZih0KXJldHVybiBlW3QudG9Mb3dlckNhc2UoKV1bbl07dmFyIGk9WGUuc29ydEJ5KFhlLm1hcChlLG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gcGxyKGUpe3ZhciB0PXVsci5idWlsZExheWVyTWF0cml4KGUpLHI9WGUubWVyZ2UoTXNlKGUsdCksRXNlKGUsdCkpLG49e30saTtYZS5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbihhKXtpPWE9PT0idSI/dDpYZS52YWx1ZXModCkucmV2ZXJzZSgpLFhlLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3M9PT0iciImJihpPVhlLm1hcChpLGZ1bmN0aW9uKGgpe3JldHVybiBYZS52YWx1ZXMoaCkucmV2ZXJzZSgpfSkpO3ZhciBsPShhPT09InUiP2UucHJlZGVjZXNzb3JzOmUuc3VjY2Vzc29ycykuYmluZChlKSxjPUNzZShlLGkscixsKSx1PUFzZShlLGksYy5yb290LGMuYWxpZ24scz09PSJyIik7cz09PSJyIiYmKHU9WGUubWFwVmFsdWVzKHUsZnVuY3Rpb24oaCl7cmV0dXJuLWh9KSksblthK3NdPXV9KX0pO3ZhciBvPVBzZShlLG4pO3JldHVybiBJc2UobixvKSxMc2UobixlLmdyYXBoKCkuYWxpZ24pfWZ1bmN0aW9uIGRscihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgYT1uLm5vZGUoaSkscz1uLm5vZGUobyksbD0wLGM7aWYobCs9YS53aWR0aC8yLFhlLmhhcyhhLCJsYWJlbHBvcyIpKXN3aXRjaChhLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz0tYS53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Yz1hLndpZHRoLzI7YnJlYWt9aWYoYyYmKGwrPXI/YzotYyksYz0wLGwrPShhLmR1bW15P3Q6ZSkvMixsKz0ocy5kdW1teT90OmUpLzIsbCs9cy53aWR0aC8yLFhlLmhhcyhzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz1zLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpjPS1zLndpZHRoLzI7YnJlYWt9cmV0dXJuIGMmJihsKz1yP2M6LWMpLGM9MCxsfX1mdW5jdGlvbiBtbHIoZSx0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofX0pO3ZhciBPc2U9SCgod1FuLERzZSk9PnsidXNlIHN0cmljdCI7dmFyIFo0PVVuKCksTnNlPW5zKCksZ2xyPVJzZSgpLnBvc2l0aW9uWDtEc2UuZXhwb3J0cz1fbHI7ZnVuY3Rpb24gX2xyKGUpe2U9TnNlLmFzTm9uQ29tcG91bmRHcmFwaChlKSx5bHIoZSksWjQuZm9yRWFjaChnbHIoZSksZnVuY3Rpb24odCxyKXtlLm5vZGUocikueD10fSl9ZnVuY3Rpb24geWxyKGUpe3ZhciB0PU5zZS5idWlsZExheWVyTWF0cml4KGUpLHI9ZS5ncmFwaCgpLnJhbmtzZXAsbj0wO1o0LmZvckVhY2godCxmdW5jdGlvbihpKXt2YXIgbz1aNC5tYXgoWjQubWFwKGksZnVuY3Rpb24oYSl7cmV0dXJuIGUubm9kZShhKS5oZWlnaHR9KSk7WjQuZm9yRWFjaChpLGZ1bmN0aW9uKGEpe2Uubm9kZShhKS55PW4rby8yfSksbis9bytyfSl9fSk7dmFyIFVzZT1IKChTUW4sVnNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaXI9VW4oKSx6c2U9eGFlKCksRnNlPUNhZSgpLHZscj1WYWUoKSx4bHI9bnMoKS5ub3JtYWxpemVSYW5rcyxibHI9cWFlKCksd2xyPW5zKCkucmVtb3ZlRW1wdHlSYW5rcyxCc2U9WWFlKCksU2xyPSRhZSgpLEhzZT1RYWUoKSxNbHI9U3NlKCksRWxyPU9zZSgpLGQwPW5zKCksVGxyPVVjKCkuR3JhcGg7VnNlLmV4cG9ydHM9Q2xyO2Z1bmN0aW9uIENscihlLHQpe3ZhciByPXQmJnQuZGVidWdUaW1pbmc/ZDAudGltZTpkMC5ub3RpbWU7cigibGF5b3V0IixmdW5jdGlvbigpe3ZhciBuPXIoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gRmxyKGUpfSk7cigiICBydW5MYXlvdXQiLGZ1bmN0aW9uKCl7QWxyKG4scil9KSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLGZ1bmN0aW9uKCl7UGxyKGUsbil9KX0pfWZ1bmN0aW9uIEFscihlLHQpe3QoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIixmdW5jdGlvbigpe0JscihlKX0pLHQoIiAgICByZW1vdmVTZWxmRWRnZXMiLGZ1bmN0aW9uKCl7WGxyKGUpfSksdCgiICAgIGFjeWNsaWMiLGZ1bmN0aW9uKCl7enNlLnJ1bihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe0JzZS5ydW4oZSl9KSx0KCIgICAgcmFuayIsZnVuY3Rpb24oKXt2bHIoZDAuYXNOb25Db21wb3VuZEdyYXBoKGUpKX0pLHQoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe0hscihlKX0pLHQoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe3dscihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtCc2UuY2xlYW51cChlKX0pLHQoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXt4bHIoZSl9KSx0KCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXtWbHIoZSl9KSx0KCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtVbHIoZSl9KSx0KCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtGc2UucnVuKGUpfSksdCgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe2JscihlKX0pLHQoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXtTbHIoZSl9KSx0KCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7TWxyKGUpfSksdCgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXskbHIoZSl9KSx0KCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtIc2UuYWRqdXN0KGUpfSksdCgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe0VscihlKX0pLHQoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsZnVuY3Rpb24oKXtLbHIoZSl9KSx0KCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLGZ1bmN0aW9uKCl7amxyKGUpfSksdCgiICAgIG5vcm1hbGl6ZS51bmRvIixmdW5jdGlvbigpe0ZzZS51bmRvKGUpfSksdCgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1dscihlKX0pLHQoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtIc2UudW5kbyhlKX0pLHQoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtxbHIoZSl9KSx0KCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7R2xyKGUpfSksdCgiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7WWxyKGUpfSksdCgiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXt6c2UudW5kbyhlKX0pfWZ1bmN0aW9uIFBscihlLHQpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKSxpPXQubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LHQuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2UociksaT10LmVkZ2Uocik7bi5wb2ludHM9aS5wb2ludHMsaXIuaGFzKGksIngiKSYmKG4ueD1pLngsbi55PWkueSl9KSxlLmdyYXBoKCkud2lkdGg9dC5ncmFwaCgpLndpZHRoLGUuZ3JhcGgoKS5oZWlnaHQ9dC5ncmFwaCgpLmhlaWdodH12YXIgSWxyPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxMbHI9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sa2xyPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sUmxyPVsid2lkdGgiLCJoZWlnaHQiXSxObHI9e3dpZHRoOjAsaGVpZ2h0OjB9LERscj1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxPbHI9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSx6bHI9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIEZscihlKXt2YXIgdD1uZXcgVGxyKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkscj1EbHQoZS5ncmFwaCgpKTtyZXR1cm4gdC5zZXRHcmFwaChpci5tZXJnZSh7fSxMbHIsTmx0KHIsSWxyKSxpci5waWNrKHIsa2xyKSkpLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPURsdChlLm5vZGUobikpO3Quc2V0Tm9kZShuLGlyLmRlZmF1bHRzKE5sdChpLFJsciksTmxyKSksdC5zZXRQYXJlbnQobixlLnBhcmVudChuKSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1EbHQoZS5lZGdlKG4pKTt0LnNldEVkZ2Uobixpci5tZXJnZSh7fSxPbHIsTmx0KGksRGxyKSxpci5waWNrKGksemxyKSkpfSksdH1mdW5jdGlvbiBCbHIoZSl7dmFyIHQ9ZS5ncmFwaCgpO3QucmFua3NlcC89Mixpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYodC5yYW5rZGlyPT09IlRCInx8dC5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIEhscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoci53aWR0aCYmci5oZWlnaHQpe3ZhciBuPWUubm9kZSh0LnYpLGk9ZS5ub2RlKHQudyksbz17cmFuazooaS5yYW5rLW4ucmFuaykvMituLnJhbmssZTp0fTtkMC5hZGREdW1teU5vZGUoZSwiZWRnZS1wcm94eSIsbywiX2VwIil9fSl9ZnVuY3Rpb24gVmxyKGUpe3ZhciB0PTA7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpO24uYm9yZGVyVG9wJiYobi5taW5SYW5rPWUubm9kZShuLmJvcmRlclRvcCkucmFuayxuLm1heFJhbms9ZS5ub2RlKG4uYm9yZGVyQm90dG9tKS5yYW5rLHQ9aXIubWF4KHQsbi5tYXhSYW5rKSl9KSxlLmdyYXBoKCkubWF4UmFuaz10fWZ1bmN0aW9uIFVscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7ci5kdW1teT09PSJlZGdlLXByb3h5IiYmKGUuZWRnZShyLmUpLmxhYmVsUmFuaz1yLnJhbmssZS5yZW1vdmVOb2RlKHQpKX0pfWZ1bmN0aW9uIHFscihlKXt2YXIgdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscj0wLG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGk9MCxvPWUuZ3JhcGgoKSxhPW8ubWFyZ2lueHx8MCxzPW8ubWFyZ2lueXx8MDtmdW5jdGlvbiBsKGMpe3ZhciB1PWMueCxoPWMueSxmPWMud2lkdGgscD1jLmhlaWdodDt0PU1hdGgubWluKHQsdS1mLzIpLHI9TWF0aC5tYXgocix1K2YvMiksbj1NYXRoLm1pbihuLGgtcC8yKSxpPU1hdGgubWF4KGksaCtwLzIpfWlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe2woZS5ub2RlKGMpKX0pLGlyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUuZWRnZShjKTtpci5oYXModSwieCIpJiZsKHUpfSksdC09YSxuLT1zLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUubm9kZShjKTt1LngtPXQsdS55LT1ufSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24oYyl7dmFyIHU9ZS5lZGdlKGMpO2lyLmZvckVhY2godS5wb2ludHMsZnVuY3Rpb24oaCl7aC54LT10LGgueS09bn0pLGlyLmhhcyh1LCJ4IikmJih1LngtPXQpLGlyLmhhcyh1LCJ5IikmJih1LnktPW4pfSksby53aWR0aD1yLXQrYSxvLmhlaWdodD1pLW4rc31mdW5jdGlvbiBHbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpLG49ZS5ub2RlKHQudiksaT1lLm5vZGUodC53KSxvLGE7ci5wb2ludHM/KG89ci5wb2ludHNbMF0sYT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxvPWksYT1uKSxyLnBvaW50cy51bnNoaWZ0KGQwLmludGVyc2VjdFJlY3QobixvKSksci5wb2ludHMucHVzaChkMC5pbnRlcnNlY3RSZWN0KGksYSkpfSl9ZnVuY3Rpb24gV2xyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihpci5oYXMociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFlscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7ci5yZXZlcnNlZCYmci5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gamxyKGUpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2lmKGUuY2hpbGRyZW4odCkubGVuZ3RoKXt2YXIgcj1lLm5vZGUodCksbj1lLm5vZGUoci5ib3JkZXJUb3ApLGk9ZS5ub2RlKHIuYm9yZGVyQm90dG9tKSxvPWUubm9kZShpci5sYXN0KHIuYm9yZGVyTGVmdCkpLGE9ZS5ub2RlKGlyLmxhc3Qoci5ib3JkZXJSaWdodCkpO3Iud2lkdGg9TWF0aC5hYnMoYS54LW8ueCksci5oZWlnaHQ9TWF0aC5hYnMoaS55LW4ueSksci54PW8ueCtyLndpZHRoLzIsci55PW4ueStyLmhlaWdodC8yfX0pLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2Uubm9kZSh0KS5kdW1teT09PSJib3JkZXIiJiZlLnJlbW92ZU5vZGUodCl9KX1mdW5jdGlvbiBYbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7aWYodC52PT09dC53KXt2YXIgcj1lLm5vZGUodC52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlOnQsbGFiZWw6ZS5lZGdlKHQpfSksZS5yZW1vdmVFZGdlKHQpfX0pfWZ1bmN0aW9uICRscihlKXt2YXIgdD1kMC5idWlsZExheWVyTWF0cml4KGUpO2lyLmZvckVhY2godCxmdW5jdGlvbihyKXt2YXIgbj0wO2lyLmZvckVhY2gocixmdW5jdGlvbihpLG8pe3ZhciBhPWUubm9kZShpKTthLm9yZGVyPW8rbixpci5mb3JFYWNoKGEuc2VsZkVkZ2VzLGZ1bmN0aW9uKHMpe2QwLmFkZER1bW15Tm9kZShlLCJzZWxmZWRnZSIse3dpZHRoOnMubGFiZWwud2lkdGgsaGVpZ2h0OnMubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOm8rICsrbixlOnMuZSxsYWJlbDpzLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYS5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIEtscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7aWYoci5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBuPWUubm9kZShyLmUudiksaT1uLngrbi53aWR0aC8yLG89bi55LGE9ci54LWkscz1uLmhlaWdodC8yO2Uuc2V0RWRnZShyLmUsci5sYWJlbCksZS5yZW1vdmVOb2RlKHQpLHIubGFiZWwucG9pbnRzPVt7eDppKzIqYS8zLHk6by1zfSx7eDppKzUqYS82LHk6by1zfSx7eDppK2EseTpvfSx7eDppKzUqYS82LHk6bytzfSx7eDppKzIqYS8zLHk6bytzfV0sci5sYWJlbC54PXIueCxyLmxhYmVsLnk9ci55fX0pfWZ1bmN0aW9uIE5sdChlLHQpe3JldHVybiBpci5tYXBWYWx1ZXMoaXIucGljayhlLHQpLE51bWJlcil9ZnVuY3Rpb24gRGx0KGUpe3ZhciB0PXt9O3JldHVybiBpci5mb3JFYWNoKGUsZnVuY3Rpb24ocixuKXt0W24udG9Mb3dlckNhc2UoKV09cn0pLHR9fSk7dmFyIEdzZT1IKChNUW4scXNlKT0+e3ZhciBwSD1VbigpLFpscj1ucygpLEpscj1VYygpLkdyYXBoO3FzZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOlFscn07ZnVuY3Rpb24gUWxyKGUpe3ZhciB0PVpsci5idWlsZExheWVyTWF0cml4KGUpLHI9bmV3IEpscih7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLnNldEdyYXBoKHt9KTtyZXR1cm4gcEguZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obil7ci5zZXROb2RlKG4se2xhYmVsOm59KSxyLnNldFBhcmVudChuLCJsYXllciIrZS5ub2RlKG4pLnJhbmspfSkscEguZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24obil7ci5zZXRFZGdlKG4udixuLncse30sbi5uYW1lKX0pLHBILmZvckVhY2godCxmdW5jdGlvbihuLGkpe3ZhciBvPSJsYXllciIraTtyLnNldE5vZGUobyx7cmFuazoic2FtZSJ9KSxwSC5yZWR1Y2UobixmdW5jdGlvbihhLHMpe3JldHVybiByLnNldEVkZ2UoYSxzLHtzdHlsZToiaW52aXMifSksc30pfSkscn19KTt2YXIgWXNlPUgoKEVRbixXc2UpPT57V3NlLmV4cG9ydHM9IjAuOC41In0pO3ZhciBPbHQ9SCgoVFFuLGpzZSk9Pntqc2UuZXhwb3J0cz17Z3JhcGhsaWI6VWMoKSxsYXlvdXQ6VXNlKCksZGVidWc6R3NlKCksdXRpbDp7dGltZTpucygpLnRpbWUsbm90aW1lOm5zKCkubm90aW1lfSx2ZXJzaW9uOllzZSgpfX0pO3ZhciBWZHQ9RWUoSGR0KCksMSkse19fZXh0ZW5kczpkX3IsX19hc3NpZ246bV9yLF9fcmVzdDpnX3IsX19kZWNvcmF0ZTpFLF9fcGFyYW06X19yLF9fZXNEZWNvcmF0ZTp5X3IsX19ydW5Jbml0aWFsaXplcnM6dl9yLF9fcHJvcEtleTp4X3IsX19zZXRGdW5jdGlvbk5hbWU6Yl9yLF9fbWV0YWRhdGE6dyxfX2F3YWl0ZXI6d19yLF9fZ2VuZXJhdG9yOlNfcixfX2V4cG9ydFN0YXI6TV9yLF9fY3JlYXRlQmluZGluZzpFX3IsX192YWx1ZXM6VF9yLF9fcmVhZDpDX3IsX19zcHJlYWQ6QV9yLF9fc3ByZWFkQXJyYXlzOlBfcixfX3NwcmVhZEFycmF5OklfcixfX2F3YWl0OkxfcixfX2FzeW5jR2VuZXJhdG9yOmtfcixfX2FzeW5jRGVsZWdhdG9yOlJfcixfX2FzeW5jVmFsdWVzOk5fcixfX21ha2VUZW1wbGF0ZU9iamVjdDpEX3IsX19pbXBvcnRTdGFyOk9fcixfX2ltcG9ydERlZmF1bHQ6el9yLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6Rl9yLF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6Ql9yLF9fY2xhc3NQcml2YXRlRmllbGRJbjpIX3J9PVZkdC5kZWZhdWx0O2Z1bmN0aW9uIHl0KGUpe3JldHVybiB0PT57aWYoZSlpZih0Lmhhc093blByb3BlcnR5KCJpcyIpKXtpZihlIT09dC5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke2V9ICE9PSAke3QuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzIix7dmFsdWU6ZX0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUodC5pcyx0KX19ZnVuY3Rpb24gVWR0KGUsdCxyKXtlLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KCJwcm9wZXJ0aWVzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLmNvbnN0cnVjdG9yLCJwcm9wZXJ0aWVzIix7dmFsdWU6e319KSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF09T2JqZWN0LmFzc2lnbih7fSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF0scil9ZnVuY3Rpb24gQShlKXtyZXR1cm4odCxyKT0+e1VkdCh0LHIsZSl9fWZ1bmN0aW9uIEJ0KC4uLmUpe3JldHVybih0LHIpPT57dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgib2JzZXJ2ZXJzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmNvbnN0cnVjdG9yLCJvYnNlcnZlcnMiLHt2YWx1ZTpbXX0pLHQuY29uc3RydWN0b3Iub2JzZXJ2ZXJzLnB1c2goYCR7cn0oJHtlLmpvaW4oIiwiKX0pYCl9fWZ1bmN0aW9uIFJ0KGUsLi4udCl7cmV0dXJuKHIsbixpKT0+e2xldCBvPWBfX2NvbXB1dGUke259YDtPYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTppLmdldH0pLGkuZ2V0PXZvaWQgMDtsZXQgYT1bZSwuLi50XS5qb2luKCIsIik7VWR0KHIsbix7Y29tcHV0ZWQ6YCR7b30oJHthfSlgfSl9fXZhciBVX3I9cWR0KChlLHQpPT5lLnF1ZXJ5U2VsZWN0b3IodCkpLHFfcj1xZHQoKGUsdCk9PmUucXVlcnlTZWxlY3RvckFsbCh0KSk7ZnVuY3Rpb24gcWR0KGUpe3JldHVybiB0PT4ocixuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG4se2dldCgpe3JldHVybiBlKHRoaXMuc2hhZG93Um9vdCx0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX07dmFyIFR2ZT0vKHVybFwoKShbXildKikoXCkpL2csQ3ZlPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLyxJSSxacztmdW5jdGlvbiBsXyhlLHQpe2lmKGUmJkN2ZS50ZXN0KGUpfHxlPT09Ii8vIilyZXR1cm4gZTtpZihJST09PXZvaWQgMCl7SUk9ITE7dHJ5e2xldCByPW5ldyBVUkwoImIiLCJodHRwOi8vYSIpO3IucGF0aG5hbWU9ImMlMjBkIixJST1yLmhyZWY9PT0iaHR0cDovL2EvYyUyMGQifWNhdGNoKHIpe319aWYodHx8KHQ9ZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpLElJKXRyeXtyZXR1cm4gbmV3IFVSTChlLHQpLmhyZWZ9Y2F0Y2gocil7cmV0dXJuIGV9cmV0dXJuIFpzfHwoWnM9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJ0ZW1wIiksWnMuYmFzZT1acy5jcmVhdGVFbGVtZW50KCJiYXNlIiksWnMuaGVhZC5hcHBlbmRDaGlsZChacy5iYXNlKSxacy5hbmNob3I9WnMuY3JlYXRlRWxlbWVudCgiYSIpLFpzLmJvZHkuYXBwZW5kQ2hpbGQoWnMuYW5jaG9yKSksWnMuYmFzZS5ocmVmPXQsWnMuYW5jaG9yLmhyZWY9ZSxacy5hbmNob3IuaHJlZnx8ZX1mdW5jdGlvbiBITShlLHQpe3JldHVybiBlLnJlcGxhY2UoVHZlLGZ1bmN0aW9uKHIsbixpLG8pe3JldHVybiBuKyInIitsXyhpLnJlcGxhY2UoL1siJ10vZywiIiksdCkrIiciK299KX1mdW5jdGlvbiBDeChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCxlLmxhc3RJbmRleE9mKCIvIikrMSl9dmFyIGNfPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2UsJF9yPUJvb2xlYW4oIXdpbmRvdy5TaGFkeUNTU3x8d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcyksS19yPSF3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayxHZHQ9Y18mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtsZXQgZT1uZXcgQ1NTU3R5bGVTaGVldDtlLnJlcGxhY2VTeW5jKCIiKTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cz1bZV0sdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0c1swXT09PWV9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxXZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxDeChkb2N1bWVudC5iYXNlVVJJfHx3aW5kb3cubG9jYXRpb24uaHJlZik7dmFyIFZNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDA7dmFyIFlkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExO3ZhciBpdT13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3l8fCExO3ZhciBqZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmFsbG93VGVtcGxhdGVGcm9tRG9tTW9kdWxlfHwhMTt2YXIgcHA9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnN8fCExO3ZhciBMST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExO3ZhciBYZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMTt2YXIga0k9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeVVuZGVmaW5lZHx8ITE7dmFyICRkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIub3JkZXJlZENvbXB1dGVkfHwhMTt2YXIgZkc9ITA7dmFyIHBHPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5yZW1vdmVOZXN0ZWRUZW1wbGF0ZXN8fCExO3ZhciBSST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuZmFzdERvbUlmfHwhMTt2YXIgVU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMTt2YXIgcU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU5vT2JzZXJ2ZWRBdHRyaWJ1dGVzfHwhMTt2YXIgS2R0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci51c2VBZG9wdGVkU3R5bGVTaGVldHNXaXRoQnVpbHRDU1N8fCExO3ZhciBBdmU9MDtmdW5jdGlvbiBaZHQoKXt9WmR0LnByb3RvdHlwZS5fX21peGluQXBwbGljYXRpb25zO1pkdC5wcm90b3R5cGUuX19taXhpblNldDt2YXIgUm49ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fX21peGluQXBwbGljYXRpb25zO3R8fCh0PW5ldyBXZWFrTWFwLGUuX19taXhpbkFwcGxpY2F0aW9ucz10KTtsZXQgcj1BdmUrKztmdW5jdGlvbiBuKGkpe2xldCBvPWkuX19taXhpblNldDtpZihvJiZvW3JdKXJldHVybiBpO2xldCBhPXQscz1hLmdldChpKTtpZighcyl7cz1lKGkpLGEuc2V0KGkscyk7bGV0IGw9T2JqZWN0LmNyZWF0ZShzLl9fbWl4aW5TZXR8fG98fG51bGwpO2xbcl09ITAscy5fX21peGluU2V0PWx9cmV0dXJuIHN9cmV0dXJuIG59O3ZhciBkRz17fSx0bXQ9e307ZnVuY3Rpb24gSmR0KGUsdCl7ZEdbZV09dG10W2UudG9Mb3dlckNhc2UoKV09dH1mdW5jdGlvbiBRZHQoZSl7cmV0dXJuIGRHW2VdfHx0bXRbZS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiBQdmUoZSl7ZS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpJiZjb25zb2xlLndhcm4oImRvbS1tb2R1bGUgJXMgaGFzIHN0eWxlIG91dHNpZGUgdGVtcGxhdGUiLGUuaWQpfXZhciBvdT1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxyKXtpZih0KXtsZXQgbj1RZHQodCk7cmV0dXJuIG4mJnI/bi5xdWVyeVNlbGVjdG9yKHIpOm59cmV0dXJuIG51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3IhPT1uJiZ0aGlzLnJlZ2lzdGVyKCl9Z2V0IGFzc2V0cGF0aCgpe2lmKCF0aGlzLl9fYXNzZXRwYXRoKXtsZXQgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LHI9bF8odGhpcy5nZXRBdHRyaWJ1dGUoImFzc2V0cGF0aCIpfHwiIix0LmJhc2VVUkkpO3RoaXMuX19hc3NldHBhdGg9Q3gocil9cmV0dXJuIHRoaXMuX19hc3NldHBhdGh9cmVnaXN0ZXIodCl7aWYodD10fHx0aGlzLmlkLHQpe2lmKGl1JiZRZHQodCkhPT12b2lkIDApdGhyb3cgSmR0KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQsSmR0KHQsdGhpcyksUHZlKHRoaXMpfX19O291LnByb3RvdHlwZS5tb2R1bGVzPWRHO2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsb3UpO3ZhciBJdmU9ImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIsTHZlPSJpbmNsdWRlIixlbXQ9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBtRyhlKXtyZXR1cm4gb3UuaW1wb3J0KGUpfWZ1bmN0aW9uIHJtdChlKXtsZXQgdD1lLmJvZHk/ZS5ib2R5OmUscj1ITSh0LnRleHRDb250ZW50LGUuYmFzZVVSSSksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBuLnRleHRDb250ZW50PXIsbn1mdW5jdGlvbiBrdmUoZSl7bGV0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pLHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKC4uLlJ2ZSh0W25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUnZlKGUpe2xldCB0PW1HKGUpO2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkIixlKSxbXTtpZih0Ll9zdHlsZXM9PT12b2lkIDApe2xldCByPVtdO3IucHVzaCguLi5nRyh0KSk7bGV0IG49dC5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO24mJnIucHVzaCguLi5OSShuLHQuYXNzZXRwYXRoKSksdC5fc3R5bGVzPXJ9cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBOSShlLHQpe2lmKCFlLl9zdHlsZXMpe2xldCByPVtdLG49ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1vLmdldEF0dHJpYnV0ZShMdmUpO2EmJnIucHVzaCguLi5rdmUoYSkuZmlsdGVyKGZ1bmN0aW9uKHMsbCxjKXtyZXR1cm4gYy5pbmRleE9mKHMpPT09bH0pKSx0JiYoby50ZXh0Q29udGVudD1ITShvLnRleHRDb250ZW50LHQpKSxyLnB1c2gobyl9ZS5fc3R5bGVzPXJ9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBubXQoZSl7bGV0IHQ9bUcoZSk7cmV0dXJuIHQ/Z0codCk6W119ZnVuY3Rpb24gZ0coZSl7bGV0IHQ9W10scj1lLnF1ZXJ5U2VsZWN0b3JBbGwoSXZlKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXTtpZihpLmltcG9ydCl7bGV0IG89aS5pbXBvcnQsYT1pLmhhc0F0dHJpYnV0ZShlbXQpO2lmKGEmJiFvLl91bnNjb3BlZFN0eWxlKXtsZXQgcz1ybXQobyk7cy5zZXRBdHRyaWJ1dGUoZW10LCIiKSxvLl91bnNjb3BlZFN0eWxlPXN9ZWxzZSBvLl9zdHlsZXx8KG8uX3N0eWxlPXJtdChvKSk7dC5wdXNoKGE/by5fdW5zY29wZWRTdHlsZTpvLl9zdHlsZSl9fXJldHVybiB0fWZ1bmN0aW9uIGltdChlKXtsZXQgdD1lLnRyaW0oKS5zcGxpdCgvXHMrLykscj0iIjtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyKz1OdmUodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTnZlKGUpe2xldCB0PW1HKGUpO2lmKHQmJnQuX2Nzc1RleHQ9PT12b2lkIDApe2xldCByPU92ZSh0KSxuPXQucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYocis9RHZlKG4sdC5hc3NldHBhdGgpKSx0Ll9jc3NUZXh0PXJ8fG51bGx9cmV0dXJuIHR8fGNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgc3R5bGUgZGF0YSBpbiBtb2R1bGUgbmFtZWQiLGUpLHQmJnQuX2Nzc1RleHR8fCIifWZ1bmN0aW9uIER2ZShlLHQpe2xldCByPSIiLG49TkkoZSx0KTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtvLnBhcmVudE5vZGUmJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSxyKz1vLnRleHRDb250ZW50fXJldHVybiByfWZ1bmN0aW9uIE92ZShlKXtsZXQgdD0iIixyPWdHKGUpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl0udGV4dENvbnRlbnQ7cmV0dXJuIHR9dmFyIHVlPXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS53cmFwP3dpbmRvdy5TaGFkeURPTS53cmFwOndpbmRvdy5TaGFkeURPTT9lPT5TaGFkeURPTS5wYXRjaChlKTplPT5lO2Z1bmN0aW9uIERJKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiBhdShlKXtsZXQgdD1lLmluZGV4T2YoIi4iKTtyZXR1cm4gdD09PS0xP2U6ZS5zbGljZSgwLHQpfWZ1bmN0aW9uIF9HKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KyIuIik9PT0wfWZ1bmN0aW9uIEF4KGUsdCl7cmV0dXJuIHQuaW5kZXhPZihlKyIuIik9PT0wfWZ1bmN0aW9uIGRwKGUsdCxyKXtyZXR1cm4gdCtyLnNsaWNlKGUubGVuZ3RoKX1mdW5jdGlvbiBPSShlLHQpe3JldHVybiBlPT09dHx8X0coZSx0KXx8QXgoZSx0KX1mdW5jdGlvbiBQeChlKXtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49ZVtyXS50b1N0cmluZygpLnNwbGl0KCIuIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdC5wdXNoKG5baV0pfXJldHVybiB0LmpvaW4oIi4iKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIG9tdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9QeChlKS5zcGxpdCgiLiIpOmUudG9TdHJpbmcoKS5zcGxpdCgiLiIpfWZ1bmN0aW9uIE5vKGUsdCxyKXtsZXQgbj1lLGk9b210KHQpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtpZighbilyZXR1cm47bGV0IGE9aVtvXTtuPW5bYV19cmV0dXJuIHImJihyLnBhdGg9aS5qb2luKCIuIikpLG59ZnVuY3Rpb24geUcoZSx0LHIpe2xldCBuPWUsaT1vbXQodCksbz1pW2kubGVuZ3RoLTFdO2lmKGkubGVuZ3RoPjEpe2ZvcihsZXQgYT0wO2E8aS5sZW5ndGgtMTthKyspe2xldCBzPWlbYV07aWYobj1uW3NdLCFuKXJldHVybn1uW29dPXJ9ZWxzZSBuW3RdPXI7cmV0dXJuIGkuam9pbigiLiIpfXZhciB6ST17fSx6dmU9Ly1bYS16XS9nLEZ2ZT0vKFtBLVpdKS9nO2Z1bmN0aW9uIHdtKGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUuaW5kZXhPZigiLSIpPDA/ZTplLnJlcGxhY2UoenZlLHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpfWZ1bmN0aW9uIEl4KGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUucmVwbGFjZShGdmUsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfXZhciBCdmU9MCxhbXQ9MCxMeD1bXSxIdmU9MCx2Rz0hMSxzbXQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO25ldyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcihWdmUpLm9ic2VydmUoc210LHtjaGFyYWN0ZXJEYXRhOiEwfSk7ZnVuY3Rpb24gVnZlKCl7dkc9ITE7bGV0IGU9THgubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCByPUx4W3RdO2lmKHIpdHJ5e3IoKX1jYXRjaChuKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgbn0pfX1MeC5zcGxpY2UoMCxlKSxhbXQrPWV9dmFyIG1vPXthZnRlcihlKXtyZXR1cm57cnVuKHQpe3JldHVybiB3aW5kb3cuc2V0VGltZW91dCh0LGUpfSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19fSxydW4oZSx0KXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZSx0KX0sY2FuY2VsKGUpe3dpbmRvdy5jbGVhclRpbWVvdXQoZSl9fTt2YXIgTmk9e3J1bihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShlKX19O3ZhciBreD17cnVuKGUpe3JldHVybiB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjaz93aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjayhlKTp3aW5kb3cuc2V0VGltZW91dChlLDE2KX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayhlKTp3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX07dmFyIGxpPXtydW4oZSl7cmV0dXJuIHZHfHwodkc9ITAsc210LnRleHRDb250ZW50PUh2ZSsrKSxMeC5wdXNoKGUpLEJ2ZSsrfSxjYW5jZWwoZSl7bGV0IHQ9ZS1hbXQ7aWYodD49MCl7aWYoIUx4W3RdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrZSk7THhbdF09bnVsbH19fTt2YXIgVXZlPWxpLEZJPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhuKXtsZXQgaT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG8gaW4gbilvIGluIGl8fGkuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobyl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkobil7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChuKSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3Jbbl18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW25dPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IobixpKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAobil7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgaT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbbl07cmV0dXJuIGl8fChpPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pLHRoaXMuX19kYXRhQXR0cmlidXRlc1tpXT1uKSxpfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbix7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW25dfSxzZXQ6aT9mdW5jdGlvbigpe306ZnVuY3Rpb24obyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IG4gaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KG4pJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW25dPXRoaXNbbl0sZGVsZXRlIHRoaXNbbl0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKG4pe09iamVjdC5hc3NpZ24odGhpcyxuKX1fc2V0UHJvcGVydHkobixpKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkobixpKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkobil7cmV0dXJuIHRoaXMuX19kYXRhW25dfV9zZXRQZW5kaW5nUHJvcGVydHkobixpLG8pe2xldCBhPXRoaXMuX19kYXRhW25dLHM9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLGEpO3JldHVybiBzJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmIShuIGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW25dPWEpLHRoaXMuX19kYXRhW25dPWksdGhpcy5fX2RhdGFQZW5kaW5nW25dPWkpLHN9X2lzUHJvcGVydHlQZW5kaW5nKG4pe3JldHVybiEhKHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fX2RhdGFQZW5kaW5nLmhhc093blByb3BlcnR5KG4pKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXshdGhpcy5fX2RhdGFJbnZhbGlkJiZ0aGlzLl9fZGF0YVJlYWR5JiYodGhpcy5fX2RhdGFJbnZhbGlkPSEwLFV2ZS5ydW4oKCk9Pnt0aGlzLl9fZGF0YUludmFsaWQmJih0aGlzLl9fZGF0YUludmFsaWQ9ITEsdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCkpfSkpfV9lbmFibGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFFbmFibGVkfHwodGhpcy5fX2RhdGFFbmFibGVkPSEwLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyYmKHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKSx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHM9bnVsbCksdGhpcy5yZWFkeSgpKX1fZmx1c2hQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFDb3VudGVyKys7bGV0IG49dGhpcy5fX2RhdGEsaT10aGlzLl9fZGF0YVBlbmRpbmcsbz10aGlzLl9fZGF0YU9sZDt0aGlzLl9zaG91bGRQcm9wZXJ0aWVzQ2hhbmdlKG4saSxvKSYmKHRoaXMuX19kYXRhUGVuZGluZz1udWxsLHRoaXMuX19kYXRhT2xkPW51bGwsdGhpcy5fcHJvcGVydGllc0NoYW5nZWQobixpLG8pKSx0aGlzLl9fZGF0YUNvdW50ZXItLX1fc2hvdWxkUHJvcGVydGllc0NoYW5nZShuLGksbyl7cmV0dXJuIEJvb2xlYW4oaSl9X3Byb3BlcnRpZXNDaGFuZ2VkKG4saSxvKXt9X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gbyE9PWkmJihvPT09b3x8aT09PWkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuLGksbyxhKXtpIT09byYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eShuLG8pLHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayYmc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG4saSxvLGEpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KG4saSxvKXtpZighdGhpcy5fX3NlcmlhbGl6aW5nKXtsZXQgYT10aGlzLl9fZGF0YUF0dHJpYnV0ZXMscz1hJiZhW25dfHxuO3RoaXNbc109dGhpcy5fZGVzZXJpYWxpemVWYWx1ZShpLG98fHRoaXMuY29uc3RydWN0b3IudHlwZUZvclByb3BlcnR5KHMpKX19X3Byb3BlcnR5VG9BdHRyaWJ1dGUobixpLG8pe3RoaXMuX19zZXJpYWxpemluZz0hMCxvPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW25dOm8sdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxvLGl8fHRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pKSx0aGlzLl9fc2VyaWFsaXppbmc9ITF9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG4saSxvKXtsZXQgYT10aGlzLl9zZXJpYWxpemVWYWx1ZShpKTsobz09PSJjbGFzcyJ8fG89PT0ibmFtZSJ8fG89PT0ic2xvdCIpJiYobj11ZShuKSksYT09PXZvaWQgMD9uLnJlbW92ZUF0dHJpYnV0ZShvKTpuLnNldEF0dHJpYnV0ZShvLGEpfV9zZXJpYWxpemVWYWx1ZShuKXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIG4/IiI6dm9pZCAwO2RlZmF1bHQ6cmV0dXJuIG4hPW51bGw/bi50b1N0cmluZygpOnZvaWQgMH19X2Rlc2VyaWFsaXplVmFsdWUobixpKXtzd2l0Y2goaSl7Y2FzZSBCb29sZWFuOnJldHVybiBuIT09bnVsbDtjYXNlIE51bWJlcjpyZXR1cm4gTnVtYmVyKG4pO2RlZmF1bHQ6cmV0dXJuIG59fX1yZXR1cm4gdH0pO3ZhciBsbXQ9e30sQkk9SFRNTEVsZW1lbnQucHJvdG90eXBlO2Zvcig7Qkk7KXtsZXQgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhCSSk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspbG10W2VbdF1dPSEwO0JJPU9iamVjdC5nZXRQcm90b3R5cGVPZihCSSl9ZnVuY3Rpb24gcXZlKGUsdCl7aWYoIWxtdFt0XSl7bGV0IHI9ZVt0XTtyIT09dm9pZCAwJiYoZS5fX2RhdGE/ZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHQscik6KGUuX19kYXRhUHJvdG8/ZS5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsZSkpfHwoZS5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKGUuX19kYXRhUHJvdG8pKTplLl9fZGF0YVByb3RvPXt9LGUuX19kYXRhUHJvdG9bdF09cikpfX12YXIgSEk9Um4oZT0+e2xldCB0PUZJKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzRm9yQXR0cmlidXRlcygpe2xldCBpPXRoaXMub2JzZXJ2ZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXRoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHdtKGlbb10pKX1zdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpe3JldHVybiBJeChpKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVByb3RvJiYodGhpcy5faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0aGlzLl9fZGF0YVByb3RvKSx0aGlzLl9fZGF0YVByb3RvPW51bGwpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKGkpe2ZvcihsZXQgbyBpbiBpKXRoaXMuX3NldFByb3BlcnR5KG8saVtvXSl9X2Vuc3VyZUF0dHJpYnV0ZShpLG8pe2xldCBhPXRoaXM7YS5oYXNBdHRyaWJ1dGUoaSl8fHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKGEsbyxpKX1fc2VyaWFsaXplVmFsdWUoaSl7c3dpdGNoKHR5cGVvZiBpKXtjYXNlIm9iamVjdCI6aWYoaSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGkudG9TdHJpbmcoKTtpZihpKXRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2gobyl7cmV0dXJuIiJ9ZGVmYXVsdDpyZXR1cm4gc3VwZXIuX3NlcmlhbGl6ZVZhbHVlKGkpfX1fZGVzZXJpYWxpemVWYWx1ZShpLG8pe2xldCBhO3N3aXRjaChvKXtjYXNlIE9iamVjdDp0cnl7YT1KU09OLnBhcnNlKGkpfWNhdGNoKHMpe2E9aX1icmVhaztjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoaSl9Y2F0Y2gocyl7YT1udWxsLGNvbnNvbGUud2FybihgUG9seW1lcjo6QXR0cmlidXRlczogY291bGRuJ3QgZGVjb2RlIEFycmF5IGFzIEpTT046ICR7aX1gKX1icmVhaztjYXNlIERhdGU6YT1pc05hTihpKT9TdHJpbmcoaSk6TnVtYmVyKGkpLGE9bmV3IERhdGUoYSk7YnJlYWs7ZGVmYXVsdDphPXN1cGVyLl9kZXNlcmlhbGl6ZVZhbHVlKGksbyk7YnJlYWt9cmV0dXJuIGF9X2RlZmluZVByb3BlcnR5QWNjZXNzb3IoaSxvKXtxdmUodGhpcyxpKSxzdXBlci5fZGVmaW5lUHJvcGVydHlBY2Nlc3NvcihpLG8pfV9oYXNBY2Nlc3NvcihpKXtyZXR1cm4gdGhpcy5fX2RhdGFIYXNBY2Nlc3NvciYmdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltpXX1faXNQcm9wZXJ0eVBlbmRpbmcoaSl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2RhdGFQZW5kaW5nJiZpIGluIHRoaXMuX19kYXRhUGVuZGluZyl9fXJldHVybiByfSk7dmFyIEd2ZT17ImRvbS1pZiI6ITAsImRvbS1yZXBlYXQiOiEwfSxjbXQ9ITEsdW10PSExO2Z1bmN0aW9uIFd2ZSgpe2lmKCFjbXQpe2NtdD0hMDtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2UucGxhY2Vob2xkZXI9ImEiLHVtdD1lLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudH1yZXR1cm4gdW10fWZ1bmN0aW9uIFl2ZShlKXtXdmUoKSYmZS5sb2NhbE5hbWU9PT0idGV4dGFyZWEiJiZlLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudCYmKGUudGV4dENvbnRlbnQ9bnVsbCl9ZnVuY3Rpb24ganZlKGUpe2xldCB0PWUuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKHQmJkd2ZVt0XSl7bGV0IHI9ZTtmb3Ioci5yZW1vdmVBdHRyaWJ1dGUoImlzIiksZT1yLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KSxyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsciksZS5hcHBlbmRDaGlsZChyKTtyLmF0dHJpYnV0ZXMubGVuZ3RoOyllLnNldEF0dHJpYnV0ZShyLmF0dHJpYnV0ZXNbMF0ubmFtZSxyLmF0dHJpYnV0ZXNbMF0udmFsdWUpLHIucmVtb3ZlQXR0cmlidXRlKHIuYXR0cmlidXRlc1swXS5uYW1lKX1yZXR1cm4gZX1mdW5jdGlvbiBobXQoZSx0KXtsZXQgcj10LnBhcmVudEluZm8mJmhtdChlLHQucGFyZW50SW5mbyk7aWYocil7Zm9yKGxldCBuPXIuZmlyc3RDaGlsZCxpPTA7bjtuPW4ubmV4dFNpYmxpbmcpaWYodC5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gbn1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIFh2ZShlLHQscixuKXtuLmlkJiYodFtuLmlkXT1yKX1mdW5jdGlvbiAkdmUoZSx0LHIpe2lmKHIuZXZlbnRzJiZyLmV2ZW50cy5sZW5ndGgpZm9yKGxldCBuPTAsaT1yLmV2ZW50cyxvO248aS5sZW5ndGgmJihvPWlbbl0pO24rKyllLl9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsby5uYW1lLG8udmFsdWUsZSl9ZnVuY3Rpb24gS3ZlKGUsdCxyLG4pe3IudGVtcGxhdGVJbmZvJiYodC5fdGVtcGxhdGVJbmZvPXIudGVtcGxhdGVJbmZvLHQuX3BhcmVudFRlbXBsYXRlSW5mbz1uKX1mdW5jdGlvbiBadmUoZSx0LHIpe3JldHVybiBlPWUuX21ldGhvZEhvc3R8fGUsZnVuY3Rpb24oaSl7ZVtyXT9lW3JdKGksaS5kZXRhaWwpOmNvbnNvbGUud2FybigibGlzdGVuZXIgbWV0aG9kIGAiK3IrImAgbm90IGRlZmluZWQiKX19dmFyIGZtdD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIF9wYXJzZVRlbXBsYXRlKG4saSl7aWYoIW4uX3RlbXBsYXRlSW5mbyl7bGV0IG89bi5fdGVtcGxhdGVJbmZvPXt9O28ubm9kZUluZm9MaXN0PVtdLG8ubmVzdGVkVGVtcGxhdGU9Qm9vbGVhbihpKSxvLnN0cmlwV2hpdGVTcGFjZT1pJiZpLnN0cmlwV2hpdGVTcGFjZXx8bi5oYXNBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiKSx0aGlzLl9wYXJzZVRlbXBsYXRlQ29udGVudChuLG8se3BhcmVudDpudWxsfSl9cmV0dXJuIG4uX3RlbXBsYXRlSW5mb31zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KG4saSxvKXtyZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUobi5jb250ZW50LGksbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShuLGksbyl7bGV0IGE9ITEscz1uO3JldHVybiBzLmxvY2FsTmFtZT09InRlbXBsYXRlIiYmIXMuaGFzQXR0cmlidXRlKCJwcmVzZXJ2ZS1jb250ZW50Iik/YT10aGlzLl9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUocyxpLG8pfHxhOnMubG9jYWxOYW1lPT09InNsb3QiJiYoaS5oYXNJbnNlcnRpb25Qb2ludD0hMCksWXZlKHMpLHMuZmlyc3RDaGlsZCYmdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocyxpLG8pLHMuaGFzQXR0cmlidXRlcyYmcy5oYXNBdHRyaWJ1dGVzKCkmJihhPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhzLGksbyl8fGEpLGF8fG8ubm90ZWR9c3RhdGljIF9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhuLGksbyl7aWYoIShuLmxvY2FsTmFtZT09PSJzY3JpcHQifHxuLmxvY2FsTmFtZT09PSJzdHlsZSIpKWZvcihsZXQgYT1uLmZpcnN0Q2hpbGQscz0wLGw7YTthPWwpe2lmKGEubG9jYWxOYW1lPT0idGVtcGxhdGUiJiYoYT1qdmUoYSkpLGw9YS5uZXh0U2libGluZyxhLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCB1PWw7Zm9yKDt1JiZ1Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU7KWEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnQsbD11Lm5leHRTaWJsaW5nLG4ucmVtb3ZlQ2hpbGQodSksdT1sO2lmKGkuc3RyaXBXaGl0ZVNwYWNlJiYhYS50ZXh0Q29udGVudC50cmltKCkpe24ucmVtb3ZlQ2hpbGQoYSk7Y29udGludWV9fWxldCBjPXtwYXJlbnRJbmRleDpzLHBhcmVudEluZm86b307dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUoYSxpLGMpJiYoYy5pbmZvSW5kZXg9aS5ub2RlSW5mb0xpc3QucHVzaChjKS0xKSxhLnBhcmVudE5vZGUmJnMrK319c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobixpLG8pe2xldCBhPW4scz10aGlzLl9wYXJzZVRlbXBsYXRlKGEsaSk7cmV0dXJuKHMuY29udGVudD1hLmNvbnRlbnQub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZENoaWxkKGEuY29udGVudCksby50ZW1wbGF0ZUluZm89cywhMH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhuLGksbyl7bGV0IGE9ITEscz1BcnJheS5mcm9tKG4uYXR0cmlidXRlcyk7Zm9yKGxldCBsPXMubGVuZ3RoLTEsYztjPXNbbF07bC0tKWE9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYy5uYW1lLGMudmFsdWUpfHxhO3JldHVybiBhfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYSxzKXtyZXR1cm4gYS5zbGljZSgwLDMpPT09Im9uLSI/KG4ucmVtb3ZlQXR0cmlidXRlKGEpLG8uZXZlbnRzPW8uZXZlbnRzfHxbXSxvLmV2ZW50cy5wdXNoKHtuYW1lOmEuc2xpY2UoMyksdmFsdWU6c30pLCEwKTphPT09ImlkIj8oby5pZD1zLCEwKTohMX1zdGF0aWMgX2NvbnRlbnRGb3JUZW1wbGF0ZShuKXtsZXQgaT1uLl90ZW1wbGF0ZUluZm87cmV0dXJuIGkmJmkuY29udGVudHx8bi5jb250ZW50fV9zdGFtcFRlbXBsYXRlKG4saSl7biYmIW4uY29udGVudCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUobiksaT1pfHx0aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKG4pO2xldCBvPWkubm9kZUluZm9MaXN0LGE9aS5jb250ZW50fHxuLmNvbnRlbnQscz1kb2N1bWVudC5pbXBvcnROb2RlKGEsITApO3MuX19ub0luc2VydGlvblBvaW50PSFpLmhhc0luc2VydGlvblBvaW50O2xldCBsPXMubm9kZUxpc3Q9bmV3IEFycmF5KG8ubGVuZ3RoKTtzLiQ9e307Zm9yKGxldCBjPTAsdT1vLmxlbmd0aCxoO2M8dSYmKGg9b1tjXSk7YysrKXtsZXQgZj1sW2NdPWhtdChzLGgpO1h2ZSh0aGlzLHMuJCxmLGgpLEt2ZSh0aGlzLGYsaCxpKSwkdmUodGhpcyxmLGgpfXJldHVybiBzPXMsc31fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyxhKXthPWF8fG47bGV0IHM9WnZlKGEsaSxvKTtyZXR1cm4gdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGkscyksc31fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7bi5hZGRFdmVudExpc3RlbmVyKGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bi5yZW1vdmVFdmVudExpc3RlbmVyKGksbyl9fXJldHVybiB0fSk7dmFyIGpNPTAsWE09W10senI9e0NPTVBVVEU6Il9fY29tcHV0ZUVmZmVjdHMiLFJFRkxFQ1Q6Il9fcmVmbGVjdEVmZmVjdHMiLE5PVElGWToiX19ub3RpZnlFZmZlY3RzIixQUk9QQUdBVEU6Il9fcHJvcGFnYXRlRWZmZWN0cyIsT0JTRVJWRToiX19vYnNlcnZlRWZmZWN0cyIsUkVBRF9PTkxZOiJfX3JlYWRPbmx5In0seG10PSJfX2NvbXB1dGVJbmZvIixKdmU9L1tBLVpdLztmdW5jdGlvbiB4RyhlLHQscil7bGV0IG49ZVt0XTtpZighbiluPWVbdF09e307ZWxzZSBpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG49ZVt0XT1PYmplY3QuY3JlYXRlKGVbdF0pLHIpKWZvcihsZXQgaSBpbiBuKXtsZXQgbz1uW2ldLGE9bltpXT1BcnJheShvLmxlbmd0aCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspYVtzXT1vW3NdfXJldHVybiBufWZ1bmN0aW9uIFlNKGUsdCxyLG4saSxvKXtpZih0KXtsZXQgYT0hMSxzPWpNKys7Zm9yKGxldCBsIGluIHIpe2xldCBjPWk/YXUobCk6bCx1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cykmJighaXx8TUcobCxwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXMpLHAuZm4oZSxsLHIsbixwLmluZm8saSxvKSxhPSEwKX1yZXR1cm4gYX1yZXR1cm4hMX1mdW5jdGlvbiBRdmUoZSx0LHIsbixpLG8sYSxzKXtsZXQgbD0hMSxjPWE/YXUobik6bix1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cikmJighYXx8TUcobixwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXIpLHAuZm4oZSxuLGksbyxwLmluZm8sYSxzKSxsPSEwKTtyZXR1cm4gbH1mdW5jdGlvbiBNRyhlLHQpe2lmKHQpe2xldCByPXQubmFtZTtyZXR1cm4gcj09ZXx8ISEodC5zdHJ1Y3R1cmVkJiZfRyhyLGUpKXx8ISEodC53aWxkY2FyZCYmQXgocixlKSl9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBwbXQoZSx0LHIsbixpKXtsZXQgbz10eXBlb2YgaS5tZXRob2Q9PSJzdHJpbmciP2VbaS5tZXRob2RdOmkubWV0aG9kLGE9aS5wcm9wZXJ0eTtvP28uY2FsbChlLGUuX19kYXRhW2FdLG5bYV0pOmkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm9ic2VydmVyIG1ldGhvZCBgIitpLm1ldGhvZCsiYCBub3QgZGVmaW5lZCIpfWZ1bmN0aW9uIHQxZShlLHQscixuLGkpe2xldCBvPWVbenIuTk9USUZZXSxhLHM9ak0rKztmb3IobGV0IGMgaW4gdCl0W2NdJiYobyYmUXZlKGUsbyxzLGMscixuLGkpfHxpJiZlMWUoZSxjLHIpKSYmKGE9ITApO2xldCBsO2EmJihsPWUuX19kYXRhSG9zdCkmJmwuX2ludmFsaWRhdGVQcm9wZXJ0aWVzJiZsLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfWZ1bmN0aW9uIGUxZShlLHQscil7bGV0IG49YXUodCk7aWYobiE9PXQpe2xldCBpPUl4KG4pKyItY2hhbmdlZCI7cmV0dXJuIGJtdChlLGksclt0XSx0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBibXQoZSx0LHIsbil7bGV0IGk9e3ZhbHVlOnIscXVldWVQcm9wZXJ0eTohMH07biYmKGkucGF0aD1uKSx1ZShlKS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCh0LHtkZXRhaWw6aX0pKX1mdW5jdGlvbiByMWUoZSx0LHIsbixpLG8pe2xldCBzPShvP2F1KHQpOnQpIT10P3Q6bnVsbCxsPXM/Tm8oZSxzKTplLl9fZGF0YVt0XTtzJiZsPT09dm9pZCAwJiYobD1yW3RdKSxibXQoZSxpLmV2ZW50TmFtZSxsLHMpfWZ1bmN0aW9uIG4xZShlLHQscixuLGkpe2xldCBvLGE9ZS5kZXRhaWwscz1hJiZhLnBhdGg7cz8obj1kcChyLG4scyksbz1hJiZhLnZhbHVlKTpvPWUuY3VycmVudFRhcmdldFtyXSxvPWk/IW86bywoIXRbenIuUkVBRF9PTkxZXXx8IXRbenIuUkVBRF9PTkxZXVtuXSkmJnQuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLG8sITAsQm9vbGVhbihzKSkmJighYXx8IWEucXVldWVQcm9wZXJ0eSkmJnQuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9ZnVuY3Rpb24gaTFlKGUsdCxyLG4saSl7bGV0IG89ZS5fX2RhdGFbdF07Vk0mJihvPVZNKG8saS5hdHRyTmFtZSwiYXR0cmlidXRlIixlKSksZS5fcHJvcGVydHlUb0F0dHJpYnV0ZSh0LGkuYXR0ck5hbWUsbyl9ZnVuY3Rpb24gbzFlKGUsdCxyLG4pe2xldCBpPWVbenIuQ09NUFVURV07aWYoaSlpZigkZHQpe2pNKys7bGV0IG89czFlKGUpLGE9W107Zm9yKGxldCBsIGluIHQpZG10KGwsaSxhLG8sbik7bGV0IHM7Zm9yKDtzPWEuc2hpZnQoKTspd210KGUsIiIsdCxyLHMpJiZkbXQocy5tZXRob2RJbmZvLGksYSxvLG4pO09iamVjdC5hc3NpZ24ocixlLl9fZGF0YU9sZCksT2JqZWN0LmFzc2lnbih0LGUuX19kYXRhUGVuZGluZyksZS5fX2RhdGFQZW5kaW5nPW51bGx9ZWxzZXtsZXQgbz10O2Zvcig7WU0oZSxpLG8scixuKTspT2JqZWN0LmFzc2lnbihyLGUuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKHQsZS5fX2RhdGFQZW5kaW5nKSxvPWUuX19kYXRhUGVuZGluZyxlLl9fZGF0YVBlbmRpbmc9bnVsbH19dmFyIGExZT0oZSx0LHIpPT57bGV0IG49MCxpPXQubGVuZ3RoLTEsbz0tMTtmb3IoO248PWk7KXtsZXQgYT1uK2k+PjEscz1yLmdldCh0W2FdLm1ldGhvZEluZm8pLXIuZ2V0KGUubWV0aG9kSW5mbyk7aWYoczwwKW49YSsxO2Vsc2UgaWYocz4wKWk9YS0xO2Vsc2V7bz1hO2JyZWFrfX1vPDAmJihvPWkrMSksdC5zcGxpY2UobywwLGUpfSxkbXQ9KGUsdCxyLG4saSk9PntsZXQgbz1pP2F1KGUpOmUsYT10W29dO2lmKGEpZm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBsPWFbc107bC5pbmZvLmxhc3RSdW4hPT1qTSYmKCFpfHxNRyhlLGwudHJpZ2dlcikpJiYobC5pbmZvLmxhc3RSdW49ak0sYTFlKGwuaW5mbyxyLG4pKX19O2Z1bmN0aW9uIHMxZShlKXtsZXQgdD1lLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcztpZighdCl7dD1uZXcgTWFwO2xldCByPWVbenIuQ09NUFVURV0se2NvdW50czpuLHJlYWR5OmksdG90YWw6b309bDFlKGUpLGE7Zm9yKDthPWkuc2hpZnQoKTspe3Quc2V0KGEsdC5zaXplKTtsZXQgcz1yW2FdO3MmJnMuZm9yRWFjaChsPT57bGV0IGM9bC5pbmZvLm1ldGhvZEluZm87LS1vLC0tbltjXT09PTAmJmkucHVzaChjKX0pfW8hPT0wJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke2UubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSxlLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz10fXJldHVybiB0fWZ1bmN0aW9uIGwxZShlKXtsZXQgdD1lW3htdF0scj17fSxuPWVbenIuQ09NUFVURV0saT1bXSxvPTA7Zm9yKGxldCBhIGluIHQpe2xldCBzPXRbYV07bys9clthXT1zLmFyZ3MuZmlsdGVyKGw9PiFsLmxpdGVyYWwpLmxlbmd0aCsocy5keW5hbWljRm4/MTowKX1mb3IobGV0IGEgaW4gbil0W2FdfHxpLnB1c2goYSk7cmV0dXJue2NvdW50czpyLHJlYWR5OmksdG90YWw6b319ZnVuY3Rpb24gd210KGUsdCxyLG4saSl7bGV0IG89U0coZSx0LHIsbixpKTtpZihvPT09WE0pcmV0dXJuITE7bGV0IGE9aS5tZXRob2RJbmZvO3JldHVybiBlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2FdP2UuX3NldFBlbmRpbmdQcm9wZXJ0eShhLG8sITApOihlW2FdPW8sITEpfWZ1bmN0aW9uIGMxZShlLHQscil7bGV0IG49ZS5fX2RhdGFMaW5rZWRQYXRocztpZihuKXtsZXQgaTtmb3IobGV0IG8gaW4gbil7bGV0IGE9bltvXTtBeChvLHQpPyhpPWRwKG8sYSx0KSxlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxyLCEwLCEwKSk6QXgoYSx0KSYmKGk9ZHAoYSxvLHQpLGUuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChpLHIsITAsITApKX19fWZ1bmN0aW9uIGJHKGUsdCxyLG4saSxvLGEpe3IuYmluZGluZ3M9ci5iaW5kaW5nc3x8W107bGV0IHM9e2tpbmQ6bix0YXJnZXQ6aSxwYXJ0czpvLGxpdGVyYWw6YSxpc0NvbXBvdW5kOm8ubGVuZ3RoIT09MX07aWYoci5iaW5kaW5ncy5wdXNoKHMpLGQxZShzKSl7bGV0e2V2ZW50OmMsbmVnYXRlOnV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PWN8fEl4KGkpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT11fWxldCBsPXQubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IGM9MDtjPHMucGFydHMubGVuZ3RoO2MrKyl7bGV0IHU9cy5wYXJ0c1tjXTt1LmNvbXBvdW5kSW5kZXg9Yyx1MWUoZSx0LHMsdSxsKX19ZnVuY3Rpb24gdTFlKGUsdCxyLG4saSl7aWYoIW4ubGl0ZXJhbClpZihyLmtpbmQ9PT0iYXR0cmlidXRlIiYmci50YXJnZXRbMF09PT0iLSIpY29uc29sZS53YXJuKCJDYW5ub3Qgc2V0IGF0dHJpYnV0ZSAiK3IudGFyZ2V0KycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIHN0YXJ0aW5nIGNoYXJhY3RlcicpO2Vsc2V7bGV0IG89bi5kZXBlbmRlbmNpZXMsYT17aW5kZXg6aSxiaW5kaW5nOnIscGFydDpuLGV2YWx1YXRvcjplfTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGw9b1tzXTt0eXBlb2YgbD09InN0cmluZyImJihsPU1tdChsKSxsLndpbGRjYXJkPSEwKSxlLl9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHQsbC5yb290UHJvcGVydHkse2ZuOmgxZSxpbmZvOmEsdHJpZ2dlcjpsfSl9fX1mdW5jdGlvbiBoMWUoZSx0LHIsbixpLG8sYSl7bGV0IHM9YVtpLmluZGV4XSxsPWkuYmluZGluZyxjPWkucGFydDtpZihvJiZjLnNvdXJjZSYmdC5sZW5ndGg+Yy5zb3VyY2UubGVuZ3RoJiZsLmtpbmQ9PSJwcm9wZXJ0eSImJiFsLmlzQ29tcG91bmQmJnMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCYmcy5fX2RhdGFIYXNBY2Nlc3NvciYmcy5fX2RhdGFIYXNBY2Nlc3NvcltsLnRhcmdldF0pe2xldCB1PXJbdF07dD1kcChjLnNvdXJjZSxsLnRhcmdldCx0KSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCx1LCExLCEwKSYmZS5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCB1PWkuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcoZSxjLHQscixuLG8pO3UhPT1YTSYmZjFlKGUscyxsLGMsdSl9fWZ1bmN0aW9uIGYxZShlLHQscixuLGkpe2lmKGk9cDFlKHQsaSxyLG4pLFZNJiYoaT1WTShpLHIudGFyZ2V0LHIua2luZCx0KSksci5raW5kPT0iYXR0cmlidXRlIillLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSh0LGksci50YXJnZXQpO2Vsc2V7bGV0IG89ci50YXJnZXQ7dC5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZ0Ll9fZGF0YUhhc0FjY2Vzc29yJiZ0Ll9fZGF0YUhhc0FjY2Vzc29yW29dPyghdFt6ci5SRUFEX09OTFldfHwhdFt6ci5SRUFEX09OTFldW29dKSYmdC5fc2V0UGVuZGluZ1Byb3BlcnR5KG8saSkmJmUuX2VucXVldWVDbGllbnQodCk6ZS5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxvLGkpfX1mdW5jdGlvbiBwMWUoZSx0LHIsbil7aWYoci5pc0NvbXBvdW5kKXtsZXQgaT1lLl9fZGF0YUNvbXBvdW5kU3RvcmFnZVtyLnRhcmdldF07aVtuLmNvbXBvdW5kSW5kZXhdPXQsdD1pLmpvaW4oIiIpfXJldHVybiByLmtpbmQhPT0iYXR0cmlidXRlIiYmKHIudGFyZ2V0PT09InRleHRDb250ZW50Inx8ci50YXJnZXQ9PT0idmFsdWUiJiYoZS5sb2NhbE5hbWU9PT0iaW5wdXQifHxlLmxvY2FsTmFtZT09PSJ0ZXh0YXJlYSIpKSYmKHQ9dD09bnVsbD8iIjp0KSx0fWZ1bmN0aW9uIGQxZShlKXtyZXR1cm4gQm9vbGVhbihlLnRhcmdldCkmJmUua2luZCE9ImF0dHJpYnV0ZSImJmUua2luZCE9InRleHQiJiYhZS5pc0NvbXBvdW5kJiZlLnBhcnRzWzBdLm1vZGU9PT0ieyJ9ZnVuY3Rpb24gbTFlKGUsdCl7bGV0e25vZGVMaXN0OnIsbm9kZUluZm9MaXN0Om59PXQ7aWYobi5sZW5ndGgpZm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1yW2ldLHM9by5iaW5kaW5ncztpZihzKWZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2cxZShhLGMpLF8xZShhLGUsYyl9YS5fX2RhdGFIb3N0PWV9fWZ1bmN0aW9uIGcxZShlLHQpe2lmKHQuaXNDb21wb3VuZCl7bGV0IHI9ZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fChlLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT17fSksbj10LnBhcnRzLGk9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKylpW2FdPW5bYV0ubGl0ZXJhbDtsZXQgbz10LnRhcmdldDtyW29dPWksdC5saXRlcmFsJiZ0LmtpbmQ9PSJwcm9wZXJ0eSImJihvPT09ImNsYXNzTmFtZSImJihlPXVlKGUpKSxlW29dPXQubGl0ZXJhbCl9fWZ1bmN0aW9uIF8xZShlLHQscil7aWYoci5saXN0ZW5lckV2ZW50KXtsZXQgbj1yLnBhcnRzWzBdO2UuYWRkRXZlbnRMaXN0ZW5lcihyLmxpc3RlbmVyRXZlbnQsZnVuY3Rpb24oaSl7bjFlKGksdCxyLnRhcmdldCxuLnNvdXJjZSxuLm5lZ2F0ZSl9KX19ZnVuY3Rpb24gbW10KGUsdCxyLG4saSxvKXtvPXQuc3RhdGljfHxvJiYodHlwZW9mIG8hPSJvYmplY3QifHxvW3QubWV0aG9kTmFtZV0pO2xldCBhPXttZXRob2ROYW1lOnQubWV0aG9kTmFtZSxhcmdzOnQuYXJncyxtZXRob2RJbmZvOmksZHluYW1pY0ZuOm99O2ZvcihsZXQgcz0wLGw7czx0LmFyZ3MubGVuZ3RoJiYobD10LmFyZ3Nbc10pO3MrKylsLmxpdGVyYWx8fGUuX2FkZFByb3BlcnR5RWZmZWN0KGwucm9vdFByb3BlcnR5LHIse2ZuOm4saW5mbzphLHRyaWdnZXI6bH0pO3JldHVybiBvJiZlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0Lm1ldGhvZE5hbWUscix7Zm46bixpbmZvOmF9KSxhfWZ1bmN0aW9uIFNHKGUsdCxyLG4saSl7bGV0IG89ZS5fbWV0aG9kSG9zdHx8ZSxhPW9baS5tZXRob2ROYW1lXTtpZihhKXtsZXQgcz1lLl9tYXJzaGFsQXJncyhpLmFyZ3MsdCxyKTtyZXR1cm4gcz09PVhNP1hNOmEuYXBwbHkobyxzKX1lbHNlIGkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIitpLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX12YXIgeTFlPVtdLFNtdD0iKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopIix2MWU9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KSIseDFlPSIoPzonKD86W14nXFxcXF18XFxcXC4pKicpIixiMWU9Jyg/OiIoPzpbXiJcXFxcXXxcXFxcLikqIiknLHcxZT0iKD86Iit4MWUrInwiK2IxZSsiKSIsZ210PSIoPzooIitTbXQrInwiK3YxZSsifCIrdzFlKyIpXFxzKikiLFMxZT0iKD86IitnbXQrIig/OixcXHMqIitnbXQrIikqKSIsTTFlPSIoPzpcXChcXHMqKD86IitTMWUrIj8pXFwpXFxzKikiLEUxZT0iKCIrU210KyJcXHMqIitNMWUrIj8pIixUMWU9IihcXFtcXFt8e3spXFxzKiIsQzFlPSIoPzpdXXx9fSkiLEExZT0iKD86KCEpXFxzKik/IixQMWU9VDFlK0ExZStFMWUrQzFlLF9tdD1uZXcgUmVnRXhwKFAxZSwiZyIpO2Z1bmN0aW9uIHltdChlKXtsZXQgdD0iIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1lW3JdLmxpdGVyYWx8fCIiO3JldHVybiB0fWZ1bmN0aW9uIHdHKGUpe2xldCB0PWUubWF0Y2goLyhbXlxzXSs/KVwoKFtcc1xTXSopXCkvKTtpZih0KXtsZXQgbj17bWV0aG9kTmFtZTp0WzFdLHN0YXRpYzohMCxhcmdzOnkxZX07aWYodFsyXS50cmltKCkpe2xldCBpPXRbMl0ucmVwbGFjZSgvXFwsL2csIiZjb21tYTsiKS5zcGxpdCgiLCIpO3JldHVybiBJMWUoaSxuKX1lbHNlIHJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIEkxZShlLHQpe3JldHVybiB0LmFyZ3M9ZS5tYXAoZnVuY3Rpb24ocil7bGV0IG49TW10KHIpO3JldHVybiBuLmxpdGVyYWx8fCh0LnN0YXRpYz0hMSksbn0sdGhpcyksdH1mdW5jdGlvbiBNbXQoZSl7bGV0IHQ9ZS50cmltKCkucmVwbGFjZSgvJmNvbW1hOy9nLCIsIikucmVwbGFjZSgvXFwoLikvZywiJDEiKSxyPXtuYW1lOnQsdmFsdWU6IiIsbGl0ZXJhbDohMX0sbj10WzBdO3N3aXRjaChuPT09Ii0iJiYobj10WzFdKSxuPj0iMCImJm48PSI5IiYmKG49IiMiKSxuKXtjYXNlIiciOmNhc2UnIic6ci52YWx1ZT10LnNsaWNlKDEsLTEpLHIubGl0ZXJhbD0hMDticmVhaztjYXNlIiMiOnIudmFsdWU9TnVtYmVyKHQpLHIubGl0ZXJhbD0hMDticmVha31yZXR1cm4gci5saXRlcmFsfHwoci5yb290UHJvcGVydHk9YXUodCksci5zdHJ1Y3R1cmVkPURJKHQpLHIuc3RydWN0dXJlZCYmKHIud2lsZGNhcmQ9dC5zbGljZSgtMik9PSIuKiIsci53aWxkY2FyZCYmKHIubmFtZT10LnNsaWNlKDAsLTIpKSkpLHJ9ZnVuY3Rpb24gdm10KGUsdCxyKXtsZXQgbj1ObyhlLHIpO3JldHVybiBuPT09dm9pZCAwJiYobj10W3JdKSxufWZ1bmN0aW9uIEVtdChlLHQscixuKXtsZXQgaT17aW5kZXhTcGxpY2VzOm59O2tJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJih0LnNwbGljZXM9aSksZS5ub3RpZnlQYXRoKHIrIi5zcGxpY2VzIixpKSxlLm5vdGlmeVBhdGgocisiLmxlbmd0aCIsdC5sZW5ndGgpLGtJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihpLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gR00oZSx0LHIsbixpLG8pe0VtdChlLHQscixbe2luZGV4Om4sYWRkZWRDb3VudDppLHJlbW92ZWQ6byxvYmplY3Q6dCx0eXBlOiJzcGxpY2UifV0pfWZ1bmN0aW9uIEwxZShlKXtyZXR1cm4gZVswXS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfXZhciB1Xz1SbihlPT57bGV0IHQ9Zm10KEhJKGUpKTtjbGFzcyByIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50PSEwLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5LHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMsdGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzLHRoaXMuX19kYXRhSGFzUGF0aHMsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UsdGhpcy5fX2RhdGFIb3N0LHRoaXMuX19kYXRhVGVtcCx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZCx0aGlzLl9fZGF0YSx0aGlzLl9fZGF0YVBlbmRpbmcsdGhpcy5fX2RhdGFPbGQsdGhpcy5fX2NvbXB1dGVFZmZlY3RzLHRoaXMuX19jb21wdXRlSW5mbyx0aGlzLl9fcmVmbGVjdEVmZmVjdHMsdGhpcy5fX25vdGlmeUVmZmVjdHMsdGhpcy5fX3Byb3BhZ2F0ZUVmZmVjdHMsdGhpcy5fX29ic2VydmVFZmZlY3RzLHRoaXMuX19yZWFkT25seSx0aGlzLl9fdGVtcGxhdGVJbmZvLHRoaXMuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkfWdldCBQUk9QRVJUWV9FRkZFQ1RfVFlQRVMoKXtyZXR1cm4genJ9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fcmVnaXN0ZXJIb3N0KCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITEsdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsLHRoaXMuX19kYXRhVG9Ob3RpZnk9bnVsbCx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPW51bGwsdGhpcy5fX2RhdGFIYXNQYXRocz0hMSx0aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT10aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZXx8bnVsbCx0aGlzLl9fZGF0YUhvc3Q9dGhpcy5fX2RhdGFIb3N0fHxudWxsLHRoaXMuX19kYXRhVGVtcD17fSx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZD0hMX1fcmVnaXN0ZXJIb3N0KCl7aWYoV00ubGVuZ3RoKXtsZXQgaT1XTVtXTS5sZW5ndGgtMV07aS5fZW5xdWV1ZUNsaWVudCh0aGlzKSx0aGlzLl9fZGF0YUhvc3Q9aX19X2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMoaSl7dGhpcy5fX2RhdGE9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YVBlbmRpbmc9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YU9sZD17fX1faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhpKXtsZXQgbz10aGlzW3pyLlJFQURfT05MWV07Zm9yKGxldCBhIGluIGkpKCFvfHwhb1thXSkmJih0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbYV09dGhpcy5fX2RhdGFQZW5kaW5nW2FdPWlbYV0pfV9hZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihpLG89PXpyLlJFQURfT05MWSk7bGV0IHM9eEcodGhpcyxvLCEwKVtpXTtzfHwocz10aGlzW29dW2ldPVtdKSxzLnB1c2goYSl9X3JlbW92ZVByb3BlcnR5RWZmZWN0KGksbyxhKXtsZXQgcz14Ryh0aGlzLG8sITApW2ldLGw9cy5pbmRleE9mKGEpO2w+PTAmJnMuc3BsaWNlKGwsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KGksbyl7bGV0IGE9dGhpc1tvXTtyZXR1cm4gQm9vbGVhbihhJiZhW2ldKX1faGFzUmVhZE9ubHlFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLGEscyl7aWYoc3x8YXUoQXJyYXkuaXNBcnJheShpKT9pWzBdOmkpIT09aSl7aWYoIXMpe2xldCBsPU5vKHRoaXMsaSk7aWYoaT15Ryh0aGlzLGksbyksIWl8fCFzdXBlci5fc2hvdWxkUHJvcGVydHlDaGFuZ2UoaSxvLGwpKXJldHVybiExfWlmKHRoaXMuX19kYXRhSGFzUGF0aHM9ITAsdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKSlyZXR1cm4gYzFlKHRoaXMsaSxvKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbaV0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSk7dGhpc1tpXT1vfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShpLG8sYSl7KGEhPT1pW29dfHx0eXBlb2YgYT09Im9iamVjdCIpJiYobz09PSJjbGFzc05hbWUiJiYoaT11ZShpKSksaVtvXT1hKX1fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzJiZESShpKSxsPXM/dGhpcy5fX2RhdGFUZW1wOnRoaXMuX19kYXRhO3JldHVybiB0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShpLG8sbFtpXSk/KHRoaXMuX19kYXRhUGVuZGluZ3x8KHRoaXMuX19kYXRhUGVuZGluZz17fSx0aGlzLl9fZGF0YU9sZD17fSksaSBpbiB0aGlzLl9fZGF0YU9sZHx8KHRoaXMuX19kYXRhT2xkW2ldPXRoaXMuX19kYXRhW2ldKSxzP3RoaXMuX19kYXRhVGVtcFtpXT1vOnRoaXMuX19kYXRhW2ldPW8sdGhpcy5fX2RhdGFQZW5kaW5nW2ldPW8sKHN8fHRoaXNbenIuTk9USUZZXSYmdGhpc1t6ci5OT1RJRlldW2ldKSYmKHRoaXMuX19kYXRhVG9Ob3RpZnk9dGhpcy5fX2RhdGFUb05vdGlmeXx8e30sdGhpcy5fX2RhdGFUb05vdGlmeVtpXT1hKSwhMCk6ITF9X3NldFByb3BlcnR5KGksbyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFSZWFkeSYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X2VucXVldWVDbGllbnQoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz10aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzfHxbXSxpIT09dGhpcyYmdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cy5wdXNoKGkpfV9mbHVzaENsaWVudHMoKXt0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT90aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKToodGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITAsdGhpcy5fcmVhZHlDbGllbnRzKCksdGhpcy5fX2RhdGFSZWFkeT0hMCl9X19lbmFibGVPckZsdXNoQ2xpZW50cygpe2xldCBpPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM7aWYoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2EuX19kYXRhRW5hYmxlZD9hLl9fZGF0YVBlbmRpbmcmJmEuX2ZsdXNoUHJvcGVydGllcygpOmEuX2VuYWJsZVByb3BlcnRpZXMoKX19fV9yZWFkeUNsaWVudHMoKXt0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKX1zZXRQcm9wZXJ0aWVzKGksbyl7Zm9yKGxldCBhIGluIGkpKG98fCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1bYV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYSxpW2FdLCEwKTt0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHl8fHRoaXMuX2ZsdXNoQ2xpZW50cygpLHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X3Byb3BlcnRpZXNDaGFuZ2VkKGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzO3RoaXMuX19kYXRhSGFzUGF0aHM9ITE7bGV0IGw7bzFlKHRoaXMsbyxhLHMpLGw9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKG8sYSxzKSx0aGlzLl9mbHVzaENsaWVudHMoKSxZTSh0aGlzLHRoaXNbenIuUkVGTEVDVF0sbyxhLHMpLFlNKHRoaXMsdGhpc1t6ci5PQlNFUlZFXSxvLGEscyksbCYmdDFlKHRoaXMsbCxvLGEscyksdGhpcy5fX2RhdGFDb3VudGVyPT0xJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGksbyxhKXt0aGlzW3pyLlBST1BBR0FURV0mJllNKHRoaXMsdGhpc1t6ci5QUk9QQUdBVEVdLGksbyxhKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyxpLG8sYSl9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShpLG8sYSxzKXtsZXQgbD0oYyx1KT0+e1lNKHRoaXMsaS5wcm9wZXJ0eUVmZmVjdHMsYyxhLHUsaS5ub2RlTGlzdCk7Zm9yKGxldCBoPWkuZmlyc3RDaGlsZDtoO2g9aC5uZXh0U2libGluZyl0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUoaCxjLGEsdSl9O2kucnVuRWZmZWN0cz9pLnJ1bkVmZmVjdHMobCxvLHMpOmwobyxzKX1saW5rUGF0aHMoaSxvKXtpPVB4KGkpLG89UHgobyksdGhpcy5fX2RhdGFMaW5rZWRQYXRocz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzfHx7fSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2ldPW99dW5saW5rUGF0aHMoaSl7aT1QeChpKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzJiZkZWxldGUgdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tpXX1ub3RpZnlTcGxpY2VzKGksbyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpO0VtdCh0aGlzLHMsYS5wYXRoLG8pfWdldChpLG8pe3JldHVybiBObyhvfHx0aGlzLGkpfXNldChpLG8sYSl7YT95RyhhLGksbyk6KCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1baV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1wdXNoKGksLi4ubyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpLGw9cy5sZW5ndGgsYz1zLnB1c2goLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLGwsby5sZW5ndGgsW10pLGN9cG9wKGkpe2xldCBvPXtwYXRoOiIifSxhPU5vKHRoaXMsaSxvKSxzPUJvb2xlYW4oYS5sZW5ndGgpLGw9YS5wb3AoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCxhLmxlbmd0aCwwLFtsXSksbH1zcGxpY2UoaSxvLGEsLi4ucyl7bGV0IGw9e3BhdGg6IiJ9LGM9Tm8odGhpcyxpLGwpO288MD9vPWMubGVuZ3RoLU1hdGguZmxvb3IoLW8pOm8mJihvPU1hdGguZmxvb3IobykpO2xldCB1O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09Mj91PWMuc3BsaWNlKG8pOnU9Yy5zcGxpY2UobyxhLC4uLnMpLChzLmxlbmd0aHx8dS5sZW5ndGgpJiZHTSh0aGlzLGMsbC5wYXRoLG8scy5sZW5ndGgsdSksdX1zaGlmdChpKXtsZXQgbz17cGF0aDoiIn0sYT1Obyh0aGlzLGksbykscz1Cb29sZWFuKGEubGVuZ3RoKSxsPWEuc2hpZnQoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCwwLDAsW2xdKSxsfXVuc2hpZnQoaSwuLi5vKXtsZXQgYT17cGF0aDoiIn0scz1Obyh0aGlzLGksYSksbD1zLnVuc2hpZnQoLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLDAsby5sZW5ndGgsW10pLGx9bm90aWZ5UGF0aChpLG8pe2xldCBhO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2xldCBzPXtwYXRoOiIifTtvPU5vKHRoaXMsaSxzKSxhPXMucGF0aH1lbHNlIEFycmF5LmlzQXJyYXkoaSk/YT1QeChpKTphPWk7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGEsbywhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLlJFQURfT05MWSksbyYmKHRoaXNbIl9zZXQiK0wxZShpKV09ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoaSxhKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGksbyxhKXtsZXQgcz17cHJvcGVydHk6aSxtZXRob2Q6byxkeW5hbWljRm46Qm9vbGVhbihhKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5PQlNFUlZFLHtmbjpwbXQsaW5mbzpzLHRyaWdnZXI6e25hbWU6aX19KSxhJiZ0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChvLHpyLk9CU0VSVkUse2ZuOnBtdCxpbmZvOnMsdHJpZ2dlcjp7bmFtZTpvfX0pfV9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe2xldCBhPXdHKGkpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gJyIraSsiJyIpO21tdCh0aGlzLGEsenIuT0JTRVJWRSxTRyxudWxsLG8pfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSx7Zm46cjFlLGluZm86e2V2ZW50TmFtZTpJeChpKSsiLWNoYW5nZWQiLHByb3BlcnR5Oml9fSl9X2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGkpe2xldCBvPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpO29bMF09PT0iLSI/Y29uc29sZS53YXJuKCJQcm9wZXJ0eSAiK2krIiBjYW5ub3QgYmUgcmVmbGVjdGVkIHRvIGF0dHJpYnV0ZSAiK28rJyBiZWNhdXNlICItIiBpcyBub3QgYSB2YWxpZCBzdGFydGluZyBhdHRyaWJ1dGUgbmFtZS4gVXNlIGEgbG93ZXJjYXNlIGZpcnN0IGxldHRlciBmb3IgdGhlIHByb3BlcnR5IGluc3RlYWQuJyk6dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5SRUZMRUNULHtmbjppMWUsaW5mbzp7YXR0ck5hbWU6b319KX1fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShpLG8sYSl7bGV0IHM9d0cobyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgY29tcHV0ZWQgZXhwcmVzc2lvbiAnIitvKyInIik7bGV0IGw9bW10KHRoaXMscyx6ci5DT01QVVRFLHdtdCxpLGEpO3hHKHRoaXMseG10KVtpXT1sfV9tYXJzaGFsQXJncyhpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGEsbD1bXTtmb3IobGV0IGM9MCx1PWkubGVuZ3RoO2M8dTtjKyspe2xldHtuYW1lOmgsc3RydWN0dXJlZDpmLHdpbGRjYXJkOnAsdmFsdWU6ZCxsaXRlcmFsOmd9PWlbY107aWYoIWcpaWYocCl7bGV0IF89QXgoaCxvKSx5PXZtdChzLGEsXz9vOmgpO2Q9e3BhdGg6Xz9vOmgsdmFsdWU6eSxiYXNlOl8/Tm8ocyxoKTp5fX1lbHNlIGQ9Zj92bXQocyxhLGgpOnNbaF07aWYoa0kmJiF0aGlzLl9vdmVycmlkZUxlZ2FjeVVuZGVmaW5lZCYmZD09PXZvaWQgMCYmaS5sZW5ndGg+MSlyZXR1cm4gWE07bFtjXT1kfXJldHVybiBsfXN0YXRpYyBhZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGksbyxhKX1zdGF0aWMgY3JlYXRlUHJvcGVydHlPYnNlcnZlcihpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoaSxvLGEpfXN0YXRpYyBjcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pfXN0YXRpYyBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShpLG8pfXN0YXRpYyBjcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZUNvbXB1dGVkUHJvcGVydHkoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGksbyxhKX1zdGF0aWMgYmluZFRlbXBsYXRlKGkpe3JldHVybiB0aGlzLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGkpfV9iaW5kVGVtcGxhdGUoaSxvKXtsZXQgYT10aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKGkpLHM9dGhpcy5fX3ByZUJvdW5kVGVtcGxhdGVJbmZvPT1hO2lmKCFzKWZvcihsZXQgbCBpbiBhLnByb3BlcnR5RWZmZWN0cyl0aGlzLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKGwpO2lmKG8paWYoYT1PYmplY3QuY3JlYXRlKGEpLGEud2FzUHJlQm91bmQ9cywhdGhpcy5fX3RlbXBsYXRlSW5mbyl0aGlzLl9fdGVtcGxhdGVJbmZvPWE7ZWxzZXtsZXQgbD1pLl9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8sYz1sLmxhc3RDaGlsZDthLnBhcmVudD1sLGwubGFzdENoaWxkPWEsYS5wcmV2aW91c1NpYmxpbmc9YyxjP2MubmV4dFNpYmxpbmc9YTpsLmZpcnN0Q2hpbGQ9YX1lbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1hO3JldHVybiBhfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChpLG8sYSl7bGV0IHM9aS5ob3N0UHJvcHM9aS5ob3N0UHJvcHN8fHt9O3Nbb109ITA7bGV0IGw9aS5wcm9wZXJ0eUVmZmVjdHM9aS5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhsW29dPWxbb118fFtdKS5wdXNoKGEpfV9zdGFtcFRlbXBsYXRlKGksbyl7bz1vfHx0aGlzLl9iaW5kVGVtcGxhdGUoaSwhMCksV00ucHVzaCh0aGlzKTtsZXQgYT1zdXBlci5fc3RhbXBUZW1wbGF0ZShpLG8pO2lmKFdNLnBvcCgpLG8ubm9kZUxpc3Q9YS5ub2RlTGlzdCwhby53YXNQcmVCb3VuZCl7bGV0IHM9by5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgbD1hLmZpcnN0Q2hpbGQ7bDtsPWwubmV4dFNpYmxpbmcpcy5wdXNoKGwpfXJldHVybiBhLnRlbXBsYXRlSW5mbz1vLG0xZSh0aGlzLG8pLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5JiYodGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKG8sdGhpcy5fX2RhdGEsbnVsbCwhMSksdGhpcy5fZmx1c2hDbGllbnRzKCkpLGF9X3JlbW92ZUJvdW5kRG9tKGkpe2xldCBvPWkudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6YSxuZXh0U2libGluZzpzLHBhcmVudDpsfT1vO2E/YS5uZXh0U2libGluZz1zOmwmJihsLmZpcnN0Q2hpbGQ9cykscz9zLnByZXZpb3VzU2libGluZz1hOmwmJihsLmxhc3RDaGlsZD1hKSxvLm5leHRTaWJsaW5nPW8ucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IGM9by5jaGlsZE5vZGVzO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgaD1jW3VdO3VlKHVlKGgpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKGgpfX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTm9kZS5jYWxsKHRoaXMsaSxvLGEpO2lmKGkubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl7bGV0IGw9dGhpcy5fcGFyc2VCaW5kaW5ncyhpLnRleHRDb250ZW50LG8pO2wmJihpLnRleHRDb250ZW50PXltdChsKXx8IiAiLGJHKHRoaXMsbyxhLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGwpLHM9ITApfXJldHVybiBzfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUoaSxvLGEscyxsKXtsZXQgYz10aGlzLl9wYXJzZUJpbmRpbmdzKGwsbyk7aWYoYyl7bGV0IHU9cyxoPSJwcm9wZXJ0eSI7SnZlLnRlc3Qocyk/aD0iYXR0cmlidXRlIjpzW3MubGVuZ3RoLTFdPT0iJCImJihzPXMuc2xpY2UoMCwtMSksaD0iYXR0cmlidXRlIik7bGV0IGY9eW10KGMpO3JldHVybiBmJiZoPT0iYXR0cmlidXRlIiYmKHM9PSJjbGFzcyImJmkuaGFzQXR0cmlidXRlKCJjbGFzcyIpJiYoZis9IiAiK2kuZ2V0QXR0cmlidXRlKHMpKSxpLnNldEF0dHJpYnV0ZShzLGYpKSxoPT0iYXR0cmlidXRlIiYmdT09ImRpc2FibGUtdXBncmFkZSQiJiZpLnNldEF0dHJpYnV0ZShzLCIiKSxpLmxvY2FsTmFtZT09PSJpbnB1dCImJnU9PT0idmFsdWUiJiZpLnNldEF0dHJpYnV0ZSh1LCIiKSxpLnJlbW92ZUF0dHJpYnV0ZSh1KSxoPT09InByb3BlcnR5IiYmKHM9d20ocykpLGJHKHRoaXMsbyxhLGgscyxjLGYpLCEwfWVsc2UgcmV0dXJuIHQuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlLmNhbGwodGhpcyxpLG8sYSxzLGwpfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUuY2FsbCh0aGlzLGksbyxhKSxsPWkucGFyZW50Tm9kZSxjPWEudGVtcGxhdGVJbmZvLHU9bC5sb2NhbE5hbWU9PT0iZG9tLWlmIixoPWwubG9jYWxOYW1lPT09ImRvbS1yZXBlYXQiO3BHJiYodXx8aCkmJihsLnJlbW92ZUNoaWxkKGkpLGE9YS5wYXJlbnRJbmZvLGEudGVtcGxhdGVJbmZvPWMsYS5ub3RlZD0hMCxzPSExKTtsZXQgZj1jLmhvc3RQcm9wcztpZihSSSYmdSlmJiYoby5ob3N0UHJvcHM9T2JqZWN0LmFzc2lnbihvLmhvc3RQcm9wc3x8e30sZikscEd8fChhLnBhcmVudEluZm8ubm90ZWQ9ITApKTtlbHNle2xldCBwPSJ7Ijtmb3IobGV0IGQgaW4gZil7bGV0IGc9W3ttb2RlOnAsc291cmNlOmQsZGVwZW5kZW5jaWVzOltkXSxob3N0UHJvcDohMH1dO2JHKHRoaXMsbyxhLCJwcm9wZXJ0eSIsIl9ob3N0XyIrZCxnKX19cmV0dXJuIHN9c3RhdGljIF9wYXJzZUJpbmRpbmdzKGksbyl7bGV0IGE9W10scz0wLGw7Zm9yKDsobD1fbXQuZXhlYyhpKSkhPT1udWxsOyl7bC5pbmRleD5zJiZhLnB1c2goe2xpdGVyYWw6aS5zbGljZShzLGwuaW5kZXgpfSk7bGV0IGM9bFsxXVswXSx1PUJvb2xlYW4obFsyXSksaD1sWzNdLnRyaW0oKSxmPSExLHA9IiIsZD0tMTtjPT0ieyImJihkPWguaW5kZXhPZigiOjoiKSk+MCYmKHA9aC5zdWJzdHJpbmcoZCsyKSxoPWguc3Vic3RyaW5nKDAsZCksZj0hMCk7bGV0IGc9d0coaCksXz1bXTtpZihnKXtsZXR7YXJnczp5LG1ldGhvZE5hbWU6eH09Zztmb3IobGV0IFM9MDtTPHkubGVuZ3RoO1MrKyl7bGV0IEM9eVtTXTtDLmxpdGVyYWx8fF8ucHVzaChDKX1sZXQgYj1vLmR5bmFtaWNGbnM7KGImJmJbeF18fGcuc3RhdGljKSYmKF8ucHVzaCh4KSxnLmR5bmFtaWNGbj0hMCl9ZWxzZSBfLnB1c2goaCk7YS5wdXNoKHtzb3VyY2U6aCxtb2RlOmMsbmVnYXRlOnUsY3VzdG9tRXZlbnQ6ZixzaWduYXR1cmU6ZyxkZXBlbmRlbmNpZXM6XyxldmVudDpwfSkscz1fbXQubGFzdEluZGV4fWlmKHMmJnM8aS5sZW5ndGgpe2xldCBjPWkuc3Vic3RyaW5nKHMpO2MmJmEucHVzaCh7bGl0ZXJhbDpjfSl9cmV0dXJuIGEubGVuZ3RoP2E6bnVsbH1zdGF0aWMgX2V2YWx1YXRlQmluZGluZyhpLG8sYSxzLGwsYyl7bGV0IHU7cmV0dXJuIG8uc2lnbmF0dXJlP3U9U0coaSxhLHMsbCxvLnNpZ25hdHVyZSk6YSE9by5zb3VyY2U/dT1ObyhpLG8uc291cmNlKTpjJiZESShhKT91PU5vKGksYSk6dT1pLl9fZGF0YVthXSxvLm5lZ2F0ZSYmKHU9IXUpLHV9fXJldHVybiByfSksV009W107dmFyIGsxZT0wO2Z1bmN0aW9uIFRtdCgpe2sxZSsrfXZhciBSMWU9W107ZnVuY3Rpb24gVkkoZSl7UjFlLnB1c2goZSl9ZnVuY3Rpb24gTjFlKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO3Rbcl09dHlwZW9mIG49PSJmdW5jdGlvbiI/e3R5cGU6bn06bn1yZXR1cm4gdH12YXIgQ210PVJuKGU9PntsZXQgdD1GSShlKTtmdW5jdGlvbiByKG8pe2xldCBhPU9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtyZXR1cm4gYS5wcm90b3R5cGUgaW5zdGFuY2VvZiBpP2E6bnVsbH1mdW5jdGlvbiBuKG8pe2lmKCFvLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb3duUHJvcGVydGllcyIsbykpKXtsZXQgYT1udWxsO2lmKG8uaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgicHJvcGVydGllcyIsbykpKXtsZXQgcz1vLnByb3BlcnRpZXM7cyYmKGE9TjFlKHMpKX1vLl9fb3duUHJvcGVydGllcz1hfXJldHVybiBvLl9fb3duUHJvcGVydGllc31jbGFzcyBpIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzIix0aGlzKSkpe1ZJKHRoaXMucHJvdG90eXBlKTtsZXQgYT10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9YT9PYmplY3Qua2V5cyhhKS5tYXAocz0+dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocykpOltdfXJldHVybiB0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZmluYWxpemVkIix0aGlzKSkpe2xldCBhPXIodGhpcyk7YSYmYS5maW5hbGl6ZSgpLHRoaXMuX19maW5hbGl6ZWQ9ITAsdGhpcy5fZmluYWxpemVDbGFzcygpfX1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtsZXQgYT1uKHRoaXMpO2EmJnRoaXMuY3JlYXRlUHJvcGVydGllcyhhKX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2xldCBhPXIodGhpcyk7dGhpcy5fX3Byb3BlcnRpZXM9T2JqZWN0LmFzc2lnbih7fSxhJiZhLl9wcm9wZXJ0aWVzLG4odGhpcykpfXJldHVybiB0aGlzLl9fcHJvcGVydGllc31zdGF0aWMgdHlwZUZvclByb3BlcnR5KGEpe2xldCBzPXRoaXMuX3Byb3BlcnRpZXNbYV07cmV0dXJuIHMmJnMudHlwZX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtUbXQoKSx0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19cmV0dXJuIGl9KTt2YXIgQW10PSIzLjQuMSIsVUk9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQsU209Um4oZT0+e2xldCB0PUNtdCh1XyhlKSk7ZnVuY3Rpb24gcihsKXtpZighbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX3Byb3BlcnR5RGVmYXVsdHMiLGwpKSl7bC5fX3Byb3BlcnR5RGVmYXVsdHM9bnVsbDtsZXQgYz1sLl9wcm9wZXJ0aWVzO2ZvcihsZXQgdSBpbiBjKXtsZXQgaD1jW3VdOyJ2YWx1ZSJpbiBoJiYobC5fX3Byb3BlcnR5RGVmYXVsdHM9bC5fX3Byb3BlcnR5RGVmYXVsdHN8fHt9LGwuX19wcm9wZXJ0eURlZmF1bHRzW3VdPWgpfX1yZXR1cm4gbC5fX3Byb3BlcnR5RGVmYXVsdHN9ZnVuY3Rpb24gbihsKXtyZXR1cm4gbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsbCkpfHwobC5fX293bk9ic2VydmVycz1sLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsbCkpP2wub2JzZXJ2ZXJzOm51bGwpLGwuX19vd25PYnNlcnZlcnN9ZnVuY3Rpb24gaShsLGMsdSxoKXt1LmNvbXB1dGVkJiYodS5yZWFkT25seT0hMCksdS5jb21wdXRlZCYmKGwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2NvbnNvbGUud2FybihgQ2Fubm90IHJlZGVmaW5lIGNvbXB1dGVkIHByb3BlcnR5ICcke2N9Jy5gKTpsLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGMsdS5jb21wdXRlZCxoKSksdS5yZWFkT25seSYmIWwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2wuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoYywhdS5jb21wdXRlZCk6dS5yZWFkT25seT09PSExJiZsLl9oYXNSZWFkT25seUVmZmVjdChjKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSByZWFkT25seSBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlYWRPbmx5LmApLHUucmVmbGVjdFRvQXR0cmlidXRlJiYhbC5faGFzUmVmbGVjdEVmZmVjdChjKT9sLl9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShjKTp1LnJlZmxlY3RUb0F0dHJpYnV0ZT09PSExJiZsLl9oYXNSZWZsZWN0RWZmZWN0KGMpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlZmxlY3RlZCBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlZmxlY3RlZC5gKSx1Lm5vdGlmeSYmIWwuX2hhc05vdGlmeUVmZmVjdChjKT9sLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShjKTp1Lm5vdGlmeT09PSExJiZsLl9oYXNOb3RpZnlFZmZlY3QoYykmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2Ugbm90aWZ5IHByb3BlcnR5ICcke2N9JyBub24tbm90aWZ5LmApLHUub2JzZXJ2ZXImJmwuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoYyx1Lm9ic2VydmVyLGhbdS5vYnNlcnZlcl0pLGwuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAoYyl9ZnVuY3Rpb24gbyhsLGMsdSxoKXtpZighVUkpe2xldCBmPWMuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHA9TkkoYyksZD1ubXQodSksZz1jLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7Zm9yKGxldCB5PTA7eTxkLmxlbmd0aDt5Kyspe2xldCB4PWRbeV07eC50ZXh0Q29udGVudD1sLl9wcm9jZXNzU3R5bGVUZXh0KHgudGV4dENvbnRlbnQsaCksYy5jb250ZW50Lmluc2VydEJlZm9yZSh4LGcpfWxldCBfPTA7Zm9yKGxldCB5PTA7eTxwLmxlbmd0aDt5Kyspe2xldCB4PXBbeV0sYj1mW19dO2IhPT14Pyh4PXguY2xvbmVOb2RlKCEwKSxiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHgsYikpOl8rKyx4LnRleHRDb250ZW50PWwuX3Byb2Nlc3NTdHlsZVRleHQoeC50ZXh0Q29udGVudCxoKX19aWYod2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlKGMsdSksS2R0JiZVSSYmR2R0KXtsZXQgZj1jLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihmKXtsZXQgcD0iIjtBcnJheS5mcm9tKGYpLmZvckVhY2goZD0+e3ArPWQudGV4dENvbnRlbnQsZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpfSksbC5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCxsLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHApfX19ZnVuY3Rpb24gYShsKXtsZXQgYz1udWxsO2lmKGwmJighaXV8fGpkdCkmJihjPW91LmltcG9ydChsLCJ0ZW1wbGF0ZSIpLGl1JiYhYykpdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZXhwZWN0aW5nIGRvbS1tb2R1bGUgb3IgbnVsbCB0ZW1wbGF0ZSBmb3IgJHtsfWApO3JldHVybiBjfWNsYXNzIHMgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIEFtdH1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXt0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7bGV0IGM9bih0aGlzKTtjJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyhjLHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IGM9dGhpcy50ZW1wbGF0ZTtjJiYodHlwZW9mIGM9PSJzdHJpbmciPyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLGM9bnVsbCk6cHB8fChjPWMuY2xvbmVOb2RlKCEwKSkpLHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZT1jfXN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKGMpe2ZvcihsZXQgdSBpbiBjKWkodGhpcy5wcm90b3R5cGUsdSxjW3VdLGMpfXN0YXRpYyBjcmVhdGVPYnNlcnZlcnMoYyx1KXtsZXQgaD10aGlzLnByb3RvdHlwZTtmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyloLl9jcmVhdGVNZXRob2RPYnNlcnZlcihjW2ZdLHUpfXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfdGVtcGxhdGUiLHRoaXMpKSl7bGV0IGM9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9YyE9PXZvaWQgMD9jOnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmYSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZShjKXt0aGlzLl90ZW1wbGF0ZT1jfXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2xldCBjPXRoaXMuaW1wb3J0TWV0YTtpZihjKXRoaXMuX2ltcG9ydFBhdGg9Q3goYy51cmwpO2Vsc2V7bGV0IHU9b3UuaW1wb3J0KHRoaXMuaXMpO3RoaXMuX2ltcG9ydFBhdGg9dSYmdS5hc3NldHBhdGh8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuY29uc3RydWN0b3IuaW1wb3J0UGF0aH19cmV0dXJuIHRoaXMuX2ltcG9ydFBhdGh9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlLHRoaXMuX2ltcG9ydFBhdGgsdGhpcy5yb290UGF0aCx0aGlzLmltcG9ydFBhdGgsdGhpcy5yb290LHRoaXMuJH1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZmluYWxpemVUZW1wbGF0ZSh0aGlzLmxvY2FsTmFtZSksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290UGF0aD1XZHQsdGhpcy5pbXBvcnRQYXRoPXRoaXMuY29uc3RydWN0b3IuaW1wb3J0UGF0aDtsZXQgYz1yKHRoaXMuY29uc3RydWN0b3IpO2lmKCEhYylmb3IobGV0IHUgaW4gYyl7bGV0IGg9Y1t1XTtpZih0aGlzLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh1KSl7bGV0IGY9dHlwZW9mIGgudmFsdWU9PSJmdW5jdGlvbiI/aC52YWx1ZS5jYWxsKHRoaXMpOmgudmFsdWU7dGhpcy5faGFzQWNjZXNzb3IodSk/dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHUsZiwhMCk6dGhpc1t1XT1mfX19X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KGMpe3JldHVybiF0aGlzLmhhc093blByb3BlcnR5KGMpfXN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjLHUpe3JldHVybiBITShjLHUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZShjKXtsZXQgdT10aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU7aWYodSYmIXUuX19wb2x5bWVyRmluYWxpemVkKXt1Ll9fcG9seW1lckZpbmFsaXplZD0hMDtsZXQgaD10aGlzLmltcG9ydFBhdGgsZj1oP2xfKGgpOiIiO28odGhpcyx1LGMsZiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh1KX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbShjKXtsZXQgdT11ZSh0aGlzKTtpZih1LmF0dGFjaFNoYWRvdylyZXR1cm4gYz8odS5zaGFkb3dSb290fHwodS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4iLHNoYWR5VXBncmFkZUZyYWdtZW50OmN9KSx1LnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoYyksdGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVTaGVldCYmKHUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXRdKSksWGR0JiZ3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5mbHVzaEluaXRpYWwodS5zaGFkb3dSb290KSx1LnNoYWRvd1Jvb3QpOm51bGw7dGhyb3cgbmV3IEVycm9yKCJTaGFkb3dET00gbm90IGF2YWlsYWJsZS4gUG9seW1lckVsZW1lbnQgY2FuIGNyZWF0ZSBkb20gYXMgY2hpbGRyZW4gaW5zdGVhZCBvZiBpbiBTaGFkb3dET00gYnkgc2V0dGluZyBgdGhpcy5yb290ID0gdGhpcztgIGJlZm9yZSBgcmVhZHlgLiIpfXVwZGF0ZVN0eWxlcyhjKXt3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUodGhpcyxjKX1yZXNvbHZlVXJsKGMsdSl7cmV0dXJuIXUmJnRoaXMuaW1wb3J0UGF0aCYmKHU9bF8odGhpcy5pbXBvcnRQYXRoKSksbF8oYyx1KX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KGMsdSxoKXtyZXR1cm4gdS5keW5hbWljRm5zPXUuZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyx0Ll9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsYyx1LGgpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChjLHUsaCl7cmV0dXJuIExJJiYhKHUgaW4gdGhpcy5fcHJvcGVydGllcykmJiEoaC5pbmZvLnBhcnQuc2lnbmF0dXJlJiZoLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljKSYmIWguaW5mby5wYXJ0Lmhvc3RQcm9wJiYhYy5uZXN0ZWRUZW1wbGF0ZSYmY29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHt1fScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLHQuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLGMsdSxoKX19cmV0dXJuIHN9KTt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10LnRvU3RyaW5nKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZX19O2Z1bmN0aW9uIEQxZShlKXtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIGUudmFsdWU7dGhyb3cgbmV3IEVycm9yKGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWxMaXRlcmFsIGZ1bmN0aW9uOiAke2V9YCl9ZnVuY3Rpb24gTzFlKGUpe2lmKGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KXJldHVybiBlLmlubmVySFRNTDtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIEQxZShlKTt0aHJvdyBuZXcgRXJyb3IoYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWwgZnVuY3Rpb246ICR7ZX1gKX12YXIgUT1mdW5jdGlvbih0LC4uLnIpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIG4uaW5uZXJIVE1MPXIucmVkdWNlKChpLG8sYSk9PmkrTzFlKG8pK3RbYSsxXSx0WzBdKSxufTt2YXIgbXQ9U20oSFRNTEVsZW1lbnQpO3ZhciBmeT1FZShPZSgpLDEpO3ZhciBoXz0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxHSTtmdW5jdGlvbiBQbXQoZSl7ZSYmZS5zaGltY3NzcHJvcGVydGllcz9HST0hMTpHST1oX3x8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSl9dmFyIE1tO3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkIT09dm9pZCAwJiYoTW09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgV0k9Qm9vbGVhbih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzIT09dm9pZCAwP0dJPXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M6d2luZG93LlNoYWR5Q1NTPyhQbXQod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpQbXQod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgTng9R0k7dmFyIFlJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFydD0wLHRoaXMuZW5kPTAsdGhpcy5wcmV2aW91cz1udWxsLHRoaXMucGFyZW50PW51bGwsdGhpcy5ydWxlcz1udWxsLHRoaXMucGFyc2VkQ3NzVGV4dD0iIix0aGlzLmNzc1RleHQ9IiIsdGhpcy5hdFJ1bGU9ITEsdGhpcy50eXBlPTAsdGhpcy5rZXlmcmFtZXNOYW1lPSIiLHRoaXMuc2VsZWN0b3I9IiIsdGhpcy5wYXJzZWRTZWxlY3Rvcj0iIn19O2Z1bmN0aW9uIEVHKGUpe3JldHVybiBlPXoxZShlKSxJbXQoRjFlKGUpLGUpfWZ1bmN0aW9uIHoxZShlKXtyZXR1cm4gZS5yZXBsYWNlKGdwLmNvbW1lbnRzLCIiKS5yZXBsYWNlKGdwLnBvcnQsIiIpfWZ1bmN0aW9uIEYxZShlKXtsZXQgdD1uZXcgWUk7dC5zdGFydD0wLHQuZW5kPWUubGVuZ3RoO2xldCByPXQ7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT1MbXQpe3IucnVsZXN8fChyLnJ1bGVzPVtdKTtsZXQgbz1yLGE9by5ydWxlc1tvLnJ1bGVzLmxlbmd0aC0xXXx8bnVsbDtyPW5ldyBZSSxyLnN0YXJ0PW4rMSxyLnBhcmVudD1vLHIucHJldmlvdXM9YSxvLnJ1bGVzLnB1c2gocil9ZWxzZSBlW25dPT09a210JiYoci5lbmQ9bisxLHI9ci5wYXJlbnR8fHQpO3JldHVybiB0fWZ1bmN0aW9uIEltdChlLHQpe2xldCByPXQuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQtMSk7aWYoZS5wYXJzZWRDc3NUZXh0PWUuY3NzVGV4dD1yLnRyaW0oKSxlLnBhcmVudCl7bGV0IGk9ZS5wcmV2aW91cz9lLnByZXZpb3VzLmVuZDplLnBhcmVudC5zdGFydDtyPXQuc3Vic3RyaW5nKGksZS5zdGFydC0xKSxyPUIxZShyKSxyPXIucmVwbGFjZShncC5tdWx0aXBsZVNwYWNlcywiICIpLHI9ci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZigiOyIpKzEpO2xldCBvPWUucGFyc2VkU2VsZWN0b3I9ZS5zZWxlY3Rvcj1yLnRyaW0oKTtlLmF0UnVsZT1vLmluZGV4T2YoVzFlKT09PTAsZS5hdFJ1bGU/by5pbmRleE9mKEcxZSk9PT0wP2UudHlwZT1tcC5NRURJQV9SVUxFOm8ubWF0Y2goZ3Aua2V5ZnJhbWVzUnVsZSkmJihlLnR5cGU9bXAuS0VZRlJBTUVTX1JVTEUsZS5rZXlmcmFtZXNOYW1lPWUuc2VsZWN0b3Iuc3BsaXQoZ3AubXVsdGlwbGVTcGFjZXMpLnBvcCgpKTpvLmluZGV4T2YoUm10KT09PTA/ZS50eXBlPW1wLk1JWElOX1JVTEU6ZS50eXBlPW1wLlNUWUxFX1JVTEV9bGV0IG49ZS5ydWxlcztpZihuKWZvcihsZXQgaT0wLG89bi5sZW5ndGgsYTtpPG8mJihhPW5baV0pO2krKylJbXQoYSx0KTtyZXR1cm4gZX1mdW5jdGlvbiBCMWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwoWzAtOWEtZl17MSw2fSlccy9naSxmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxyPTYtdC5sZW5ndGg7Zm9yKDtyLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSl9ZnVuY3Rpb24gVEcoZSx0LHI9IiIpe2xldCBuPSIiO2lmKGUuY3NzVGV4dHx8ZS5ydWxlcyl7bGV0IGk9ZS5ydWxlcztpZihpJiYhSDFlKGkpKWZvcihsZXQgbz0wLGE9aS5sZW5ndGgscztvPGEmJihzPWlbb10pO28rKyluPVRHKHMsdCxuKTtlbHNlIG49dD9lLmNzc1RleHQ6VjFlKGUuY3NzVGV4dCksbj1uLnRyaW0oKSxuJiYobj0iICAiK24rYApgKX1yZXR1cm4gbiYmKGUuc2VsZWN0b3ImJihyKz1lLnNlbGVjdG9yKyIgIitMbXQrYApgKSxyKz1uLGUuc2VsZWN0b3ImJihyKz1rbXQrYAoKYCkpLHJ9ZnVuY3Rpb24gSDFlKGUpe2xldCB0PWVbMF07cmV0dXJuIEJvb2xlYW4odCkmJkJvb2xlYW4odC5zZWxlY3RvcikmJnQuc2VsZWN0b3IuaW5kZXhPZihSbXQpPT09MH1mdW5jdGlvbiBWMWUoZSl7cmV0dXJuIGU9VTFlKGUpLHExZShlKX1mdW5jdGlvbiBVMWUoZSl7cmV0dXJuIGUucmVwbGFjZShncC5jdXN0b21Qcm9wLCIiKS5yZXBsYWNlKGdwLm1peGluUHJvcCwiIil9ZnVuY3Rpb24gcTFlKGUpe3JldHVybiBlLnJlcGxhY2UoZ3AubWl4aW5BcHBseSwiIikucmVwbGFjZShncC52YXJBcHBseSwiIil9dmFyIG1wPXtTVFlMRV9SVUxFOjEsS0VZRlJBTUVTX1JVTEU6NyxNRURJQV9SVUxFOjQsTUlYSU5fUlVMRToxZTN9LExtdD0ieyIsa210PSJ9IixncD17Y29tbWVudHM6L1wvXCpbXipdKlwqKyhbXi8qXVteKl0qXCorKSpcLy9naW0scG9ydDovQGltcG9ydFteO10qOy9naW0sY3VzdG9tUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sbWl4aW5Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86Wztcbl18JCk/L2dpbSxtaXhpbkFwcGx5Oi9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLHZhckFwcGx5Oi9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sa2V5ZnJhbWVzUnVsZTovXkBbXlxzXSprZXlmcmFtZXMvLG11bHRpcGxlU3BhY2VzOi9ccysvZ30sUm10PSItLSIsRzFlPSJAbWVkaWEiLFcxZT0iQCI7dmFyIEtNPS8oPzpefFs7XHN7XVxzKikoLS1bXHctXSo/KVxzKjpccyooPzooKD86Jyg/OlxcJ3wuKSo/J3wiKD86XFwifC4pKj8ifFwoW14pXSo/XCl8W159O3tdKSspfFx7KFtefV0qKVx9KD86KD89Wztcc31dKXwkKSkvZ2ksRHg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2k7dmFyIE5tdD0vQG1lZGlhXHMoLiopLzt2YXIgRG10PW5ldyBTZXQsWTFlPSJzaGFkeS11bnNjb3BlZCI7ZnVuY3Rpb24gT210KGUpe2xldCB0PWUudGV4dENvbnRlbnQ7aWYoIURtdC5oYXModCkpe0RtdC5hZGQodCk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiLCIiKSxyLnRleHRDb250ZW50PXQsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKX19ZnVuY3Rpb24gem10KGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZShZMWUpfWZ1bmN0aW9uIFpNKGUsdCl7cmV0dXJuIGU/KHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9RUcoZSkpLHQmJk94KGUsdCksVEcoZSxOeCkpOiIifWZ1bmN0aW9uIENHKGUpe3JldHVybiFlLl9fY3NzUnVsZXMmJmUudGV4dENvbnRlbnQmJihlLl9fY3NzUnVsZXM9RUcoZS50ZXh0Q29udGVudCkpLGUuX19jc3NSdWxlc3x8bnVsbH1mdW5jdGlvbiBPeChlLHQscixuKXtpZighZSlyZXR1cm47bGV0IGk9ITEsbz1lLnR5cGU7aWYobiYmbz09PW1wLk1FRElBX1JVTEUpe2xldCBzPWUuc2VsZWN0b3IubWF0Y2goTm10KTtzJiYod2luZG93Lm1hdGNoTWVkaWEoc1sxXSkubWF0Y2hlc3x8KGk9ITApKX1vPT09bXAuU1RZTEVfUlVMRT90KGUpOnImJm89PT1tcC5LRVlGUkFNRVNfUlVMRT9yKGUpOm89PT1tcC5NSVhJTl9SVUxFJiYoaT0hMCk7bGV0IGE9ZS5ydWxlcztpZihhJiYhaSlmb3IobGV0IHM9MCxsPWEubGVuZ3RoLGM7czxsJiYoYz1hW3NdKTtzKyspT3goYyx0LHIsbil9ZnVuY3Rpb24gajFlKGUsdCl7bGV0IHI9MDtmb3IobGV0IG49dCxpPWUubGVuZ3RoO248aTtuKyspaWYoZVtuXT09PSIoIilyKys7ZWxzZSBpZihlW25dPT09IikiJiYtLXI9PT0wKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEFHKGUsdCl7bGV0IHI9ZS5pbmRleE9mKCJ2YXIoIik7aWYocj09PS0xKXJldHVybiB0KGUsIiIsIiIsIiIpO2xldCBuPWoxZShlLHIrMyksaT1lLnN1YnN0cmluZyhyKzQsbiksbz1lLnN1YnN0cmluZygwLHIpLGE9QUcoZS5zdWJzdHJpbmcobisxKSx0KSxzPWkuaW5kZXhPZigiLCIpO2lmKHM9PT0tMSlyZXR1cm4gdChvLGkudHJpbSgpLCIiLGEpO2xldCBsPWkuc3Vic3RyaW5nKDAscykudHJpbSgpLGM9aS5zdWJzdHJpbmcocysxKS50cmltKCk7cmV0dXJuIHQobyxsLGMsYSl9dmFyIGZ2cj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS53cmFwfHwoZT0+ZSk7ZnVuY3Rpb24gRm10KGUpe2xldCB0PWUubG9jYWxOYW1lLHI9IiIsbj0iIjtyZXR1cm4gdD90LmluZGV4T2YoIi0iKT4tMT9yPXQ6KG49dCxyPWUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiaXMiKXx8IiIpOihyPWUuaXMsbj1lLmV4dGVuZHMpLHtpczpyLHR5cGVFeHRlbnNpb246bn19ZnVuY3Rpb24gQm10KGUpe2xldCB0PVtdLHI9ZS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXtsZXQgaT1yW25dO3ptdChpKT9oX3x8KE9tdChpKSxpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSkpOih0LnB1c2goaS50ZXh0Q29udGVudCksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKX1yZXR1cm4gdC5qb2luKCIiKS50cmltKCl9dmFyIEhtdD0iY3NzLWJ1aWxkIjtmdW5jdGlvbiBYMWUoZSl7aWYoTW0hPT12b2lkIDApcmV0dXJuIE1tO2lmKGUuX19jc3NCdWlsZD09PXZvaWQgMCl7bGV0IHQ9ZS5nZXRBdHRyaWJ1dGUoSG10KTtpZih0KWUuX19jc3NCdWlsZD10O2Vsc2V7bGV0IHI9JDFlKGUpO3IhPT0iIiYmSzFlKGUpLGUuX19jc3NCdWlsZD1yfX1yZXR1cm4gZS5fX2Nzc0J1aWxkfHwiIn1mdW5jdGlvbiBQRyhlKXtyZXR1cm4gWDFlKGUpIT09IiJ9ZnVuY3Rpb24gJDFlKGUpe2xldCB0PWUubG9jYWxOYW1lPT09InRlbXBsYXRlIj9lLmNvbnRlbnQuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7aWYodCBpbnN0YW5jZW9mIENvbW1lbnQpe2xldCByPXQudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KCI6Iik7aWYoclswXT09PUhtdClyZXR1cm4gclsxXX1yZXR1cm4iIn1mdW5jdGlvbiBLMWUoZSl7bGV0IHQ9ZS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiP2UuY29udGVudC5maXJzdENoaWxkOmUuZmlyc3RDaGlsZDt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gSk0oZSx0KXtmb3IobGV0IHIgaW4gdClyPT09bnVsbD9lLnN0eWxlLnJlbW92ZVByb3BlcnR5KHIpOmUuc3R5bGUuc2V0UHJvcGVydHkocix0W3JdKX1mdW5jdGlvbiBqSShlLHQpe2xldCByPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIHI/ci50cmltKCk6IiJ9ZnVuY3Rpb24gVm10KGUpe2xldCB0PUR4LnRlc3QoZSl8fEtNLnRlc3QoZSk7cmV0dXJuIER4Lmxhc3RJbmRleD0wLEtNLmxhc3RJbmRleD0wLHR9dmFyIFoxZT0vO1xzKi9tLEoxZT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxVbXQ9L1xzKiFpbXBvcnRhbnQvLElHPSJfLV8iO3ZhciBMRz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxyKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczpyLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fSxYST1udWxsLERvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgTEd9ZGV0ZWN0TWl4aW4odCl7cmV0dXJuIFZtdCh0KX1nYXRoZXJTdHlsZXModCl7bGV0IHI9Qm10KHQuY29udGVudCk7aWYocil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1yLHQuY29udGVudC5pbnNlcnRCZWZvcmUobix0LmNvbnRlbnQuZmlyc3RDaGlsZCksbn1yZXR1cm4gbnVsbH10cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpe3QuX2dhdGhlcmVkU3R5bGU9PT12b2lkIDAmJih0Ll9nYXRoZXJlZFN0eWxlPXRoaXMuZ2F0aGVyU3R5bGVzKHQpKTtsZXQgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixyKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQscj0iIil7bGV0IG49Q0codCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixyKSx0LnRleHRDb250ZW50PVpNKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IHI9Q0codCk7cmV0dXJuIE94KHIsbj0+e24uc2VsZWN0b3I9PT0iOnJvb3QiJiYobi5zZWxlY3Rvcj0iaHRtbCIpLHRoaXMudHJhbnNmb3JtUnVsZShuKX0pLHQudGV4dENvbnRlbnQ9Wk0ocikscn10cmFuc2Zvcm1SdWxlcyh0LHIpe3RoaXMuX2N1cnJlbnRFbGVtZW50PXIsT3godCxuPT57dGhpcy50cmFuc2Zvcm1SdWxlKG4pfSksdGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbH10cmFuc2Zvcm1SdWxlKHQpe3QuY3NzVGV4dD10aGlzLnRyYW5zZm9ybUNzc1RleHQodC5wYXJzZWRDc3NUZXh0LHQpLHQuc2VsZWN0b3I9PT0iOnJvb3QiJiYodC5zZWxlY3Rvcj0iOmhvc3QgPiAqIil9dHJhbnNmb3JtQ3NzVGV4dCh0LHIpe3JldHVybiB0PXQucmVwbGFjZShLTSwobixpLG8sYSk9PnRoaXMuX3Byb2R1Y2VDc3NQcm9wZXJ0aWVzKG4saSxvLGEscikpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQscil9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgcj10O2Zvcig7ci5wYXJlbnQ7KXI9ci5wYXJlbnQ7bGV0IG49e30saT0hMTtyZXR1cm4gT3gocixvPT57aT1pfHxvPT09dCwhaSYmby5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoby5wYXJzZWRDc3NUZXh0KSl9KSxufV9jb25zdW1lQ3NzUHJvcGVydGllcyh0LHIpe2xldCBuPW51bGw7Zm9yKDtuPUR4LmV4ZWModCk7KXtsZXQgaT1uWzBdLG89blsxXSxhPW4uaW5kZXgscz1hK2kuaW5kZXhPZigiQGFwcGx5IiksbD1hK2kubGVuZ3RoLGM9dC5zbGljZSgwLHMpLHU9dC5zbGljZShsKSxoPXI/dGhpcy5fZmFsbGJhY2tzRnJvbVByZXZpb3VzUnVsZXMocik6e307T2JqZWN0LmFzc2lnbihoLHRoaXMuX2Nzc1RleHRUb01hcChjKSk7bGV0IGY9dGhpcy5fYXRBcHBseVRvQ3NzUHJvcGVydGllcyhvLGgpO3Q9YCR7Y30ke2Z9JHt1fWAsRHgubGFzdEluZGV4PWErZi5sZW5ndGh9cmV0dXJuIHR9X2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXModCxyKXt0PXQucmVwbGFjZShaMWUsIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe3RoaXMuX2N1cnJlbnRFbGVtZW50JiYoaS5kZXBlbmRhbnRzW3RoaXMuX2N1cnJlbnRFbGVtZW50XT0hMCk7bGV0IG8sYSxzLGw9aS5wcm9wZXJ0aWVzO2ZvcihvIGluIGwpcz1yJiZyW29dLGE9W28sIjogdmFyKCIsdCxJRyxvXSxzJiZhLnB1c2goIiwiLHMucmVwbGFjZShVbXQsIiIpKSxhLnB1c2goIikiKSxVbXQudGVzdChsW29dKSYmYS5wdXNoKCIgIWltcG9ydGFudCIpLG4ucHVzaChhLmpvaW4oIiIpKX1yZXR1cm4gbi5qb2luKCI7ICIpfV9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdCh0LHIpe2xldCBuPUoxZS5leGVjKHIpO3JldHVybiBuJiYoblsxXT9yPXRoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOnI9ImFwcGx5LXNoaW0taW5oZXJpdCIpLHJ9X2Nzc1RleHRUb01hcCh0LHI9ITEpe2xldCBuPXQuc3BsaXQoIjsiKSxpLG8sYT17fTtmb3IobGV0IHM9MCxsLGM7czxuLmxlbmd0aDtzKyspbD1uW3NdLGwmJihjPWwuc3BsaXQoIjoiKSxjLmxlbmd0aD4xJiYoaT1jWzBdLnRyaW0oKSxvPWMuc2xpY2UoMSkuam9pbigiOiIpLHImJihvPXRoaXMuX3JlcGxhY2VJbml0aWFsT3JJbmhlcml0KGksbykpLGFbaV09bykpO3JldHVybiBhfV9pbnZhbGlkYXRlTWl4aW5FbnRyeSh0KXtpZighIVhJKWZvcihsZXQgciBpbiB0LmRlcGVuZGFudHMpciE9PXRoaXMuX2N1cnJlbnRFbGVtZW50JiZYSShyKX1fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxyLG4saSxvKXtpZihuJiZBRyhuLChfLHkpPT57eSYmdGhpcy5fbWFwLmdldCh5KSYmKGk9YEBhcHBseSAke3l9O2ApfSksIWkpcmV0dXJuIHQ7bGV0IGE9dGhpcy5fY29uc3VtZUNzc1Byb3BlcnRpZXMoIiIraSxvKSxzPXQuc2xpY2UoMCx0LmluZGV4T2YoIi0tIikpLGw9dGhpcy5fY3NzVGV4dFRvTWFwKGEsITApLGM9bCx1PXRoaXMuX21hcC5nZXQociksaD11JiZ1LnByb3BlcnRpZXM7aD9jPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShoKSxsKTp0aGlzLl9tYXAuc2V0KHIsYyk7bGV0IGY9W10scCxkLGc9ITE7Zm9yKHAgaW4gYylkPWxbcF0sZD09PXZvaWQgMCYmKGQ9ImluaXRpYWwiKSxoJiYhKHAgaW4gaCkmJihnPSEwKSxmLnB1c2goYCR7cn0ke0lHfSR7cH06ICR7ZH1gKTtyZXR1cm4gZyYmdGhpcy5faW52YWxpZGF0ZU1peGluRW50cnkodSksdSYmKHUucHJvcGVydGllcz1jKSxuJiYocz1gJHt0fTske3N9YCksYCR7c30ke2Yuam9pbigiOyAiKX07YH19O0RvLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1Eby5wcm90b3R5cGUuZGV0ZWN0TWl4aW47RG8ucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZTtEby5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlcz1Eby5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVRlbXBsYXRlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZTtEby5wcm90b3R5cGUuX3NlcGFyYXRvcj1JRztPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJpbnZhbGlkQ2FsbGJhY2siLHtnZXQoKXtyZXR1cm4gWEl9LHNldChlKXtYST1lfX0pO3ZhciBxbXQ9RG87dmFyIFExZT17fSxRTT1RMWU7dmFyICRJPSJfYXBwbHlTaGltQ3VycmVudFZlcnNpb24iLHp4PSJfYXBwbHlTaGltTmV4dFZlcnNpb24iLEtJPSJfYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24iLHR4ZT1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBHbXQoZSl7bGV0IHQ9UU1bZV07dCYmZXhlKHQpfWZ1bmN0aW9uIGV4ZShlKXtlWyRJXT1lWyRJXXx8MCxlW0tJXT1lW0tJXXx8MCxlW3p4XT0oZVt6eF18fDApKzF9ZnVuY3Rpb24ga0coZSl7cmV0dXJuIGVbJEldPT09ZVt6eF19ZnVuY3Rpb24gV210KGUpe3JldHVybiFrRyhlKSYmZVtLSV09PT1lW3p4XX1mdW5jdGlvbiBZbXQoZSl7ZVtLSV09ZVt6eF0sZS5fdmFsaWRhdGluZ3x8KGUuX3ZhbGlkYXRpbmc9ITAsdHhlLnRoZW4oZnVuY3Rpb24oKXtlWyRJXT1lW3p4XSxlLl92YWxpZGF0aW5nPSExfSkpfXZhciBSRz1udWxsLGptdD13aW5kb3cuSFRNTEltcG9ydHMmJndpbmRvdy5IVE1MSW1wb3J0cy53aGVuUmVhZHl8fG51bGwsTkc7ZnVuY3Rpb24gWkkoZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7am10P2ptdChlKTooUkd8fChSRz1uZXcgUHJvbWlzZSh0PT57Tkc9dH0pLGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP05HKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9Pntkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmTkcoKX0pKSxSRy50aGVuKGZ1bmN0aW9uKCl7ZSYmZSgpfSkpfSl9dmFyIFhtdD0iX19zZWVuQnlTaGFkeUNTUyIsSkk9Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSIsUUk9bnVsbCx0RT1udWxsLFpsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZXM9W10sdGhpcy5lbnF1ZXVlZD0hMSxaSSgoKT0+e3dpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcyYmd2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7dGhpcy5lbnF1ZXVlZHx8IXRFfHwodGhpcy5lbnF1ZXVlZD0hMCxaSSh0RSkpfWFkZEN1c3RvbVN0eWxlKHQpe3RbWG10XXx8KHRbWG10XT0hMCx0aGlzLmN1c3RvbVN0eWxlcy5wdXNoKHQpLHRoaXMuZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpKX1nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHQpe2lmKHRbSkldKXJldHVybiB0W0pJXTtsZXQgcjtyZXR1cm4gdC5nZXRTdHlsZT9yPXQuZ2V0U3R5bGUoKTpyPXQscn1wcm9jZXNzU3R5bGVzKCl7bGV0IHQ9dGhpcy5jdXN0b21TdHlsZXM7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07aWYobltKSV0pY29udGludWU7bGV0IGk9dGhpcy5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2lmKGkpe2xldCBvPWkuX19hcHBsaWVkRWxlbWVudHx8aTtRSSYmUUkobyksbltKSV09b319cmV0dXJuIHR9fTtabC5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9WmwucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPVpsLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPVpsLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFpsLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldCgpe3JldHVybiBRSX0sc2V0KGUpe1FJPWV9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQoKXtyZXR1cm4gdEV9LHNldChlKXtsZXQgdD0hMTt0RXx8KHQ9ITApLHRFPWUsdCYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pO3ZhciBlRT1uZXcgcW10LERHPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT1udWxsLGVFLmludmFsaWRDYWxsYmFjaz1HbXR9ZW5zdXJlKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZXx8d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlJiYodGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsdGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS50cmFuc2Zvcm1DYWxsYmFjaz10PT57ZUUudHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl9LHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudmFsaWRhdGVDYWxsYmFjaz0oKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQmJnRoaXMuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9cHJlcGFyZVRlbXBsYXRlKHQscil7aWYodGhpcy5lbnN1cmUoKSxQRyh0KSlyZXR1cm47UU1bcl09dDtsZXQgbj1lRS50cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZighIXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdLGk9dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2kmJmVFLnRyYW5zZm9ybUN1c3RvbVN0eWxlKGkpfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LHIpe2lmKHRoaXMuZW5zdXJlKCksciYmSk0odCxyKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBuPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9ZWxzZXtsZXQgbj10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczpyfT1GbXQodCksbj1RTVtyXTtpZighKG4mJlBHKG4pKSYmbiYmIWtHKG4pKXtXbXQobil8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShuLHIpLFltdChuKSk7bGV0IGk9dC5zaGFkb3dSb290O2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtvJiYoby5fX2Nzc1J1bGVzPW4uX3N0eWxlQXN0LG8udGV4dENvbnRlbnQ9Wk0obi5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX07aWYoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSl7bGV0IGU9bmV3IERHLHQ9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U7d2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUocixuLGkpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnByZXBhcmVUZW1wbGF0ZShyLG4pfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXMocixuLGkpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUocixuLGkpfSxwcmVwYXJlVGVtcGxhdGVEb20ocixuKXt9LHN0eWxlU3VidHJlZShyLG4pe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlU3VidHJlZShyLG4pfSxzdHlsZUVsZW1lbnQocil7ZS5mbHVzaEN1c3RvbVN0eWxlcygpLGUuc3R5bGVFbGVtZW50KHIpfSxzdHlsZURvY3VtZW50KHIpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlRG9jdW1lbnQocil9LGdldENvbXB1dGVkU3R5bGVWYWx1ZShyLG4pe3JldHVybiBqSShyLG4pfSxmbHVzaEN1c3RvbVN0eWxlcygpe2UuZmx1c2hDdXN0b21TdHlsZXMoKX0sbmF0aXZlQ3NzOk54LG5hdGl2ZVNoYWRvdzpoXyxjc3NCdWlsZDpNbSxkaXNhYmxlUnVudGltZTpXSX0sdCYmKHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT10KX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPWVFO3ZhciBzcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FzeW5jTW9kdWxlPW51bGwsdGhpcy5fY2FsbGJhY2s9bnVsbCx0aGlzLl90aW1lcj1udWxsfXNldENvbmZpZyh0LHIpe3RoaXMuX2FzeW5jTW9kdWxlPXQsdGhpcy5fY2FsbGJhY2s9cix0aGlzLl90aW1lcj10aGlzLl9hc3luY01vZHVsZS5ydW4oKCk9Pnt0aGlzLl90aW1lcj1udWxsLHJFLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSl9Y2FuY2VsKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5fY2FuY2VsQXN5bmMoKSxyRS5kZWxldGUodGhpcykpfV9jYW5jZWxBc3luYygpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2FzeW5jTW9kdWxlLmNhbmNlbCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCl9Zmx1c2goKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLmNhbmNlbCgpLHRoaXMuX2NhbGxiYWNrKCkpfWlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX3RpbWVyIT1udWxsfXN0YXRpYyBkZWJvdW5jZSh0LHIsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBzcj90Ll9jYW5jZWxBc3luYygpOnQ9bmV3IHNyLHQuc2V0Q29uZmlnKHIsbiksdH19LHJFPW5ldyBTZXQsSmw9ZnVuY3Rpb24oZSl7ckUuYWRkKGUpfSwkbXQ9ZnVuY3Rpb24oKXtsZXQgZT1Cb29sZWFuKHJFLnNpemUpO3JldHVybiByRS5mb3JFYWNoKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHIpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyByfSl9fSksZX07dmFyIEJHPXR5cGVvZiBkb2N1bWVudC5oZWFkLnN0eWxlLnRvdWNoQWN0aW9uPT0ic3RyaW5nIixlOT0iX19wb2x5bWVyR2VzdHVyZXMiLHQ5PSJfX3BvbHltZXJHZXN0dXJlc0hhbmRsZWQiLHpHPSJfX3BvbHltZXJHZXN0dXJlc1RvdWNoQWN0aW9uIixLbXQ9MjUsWm10PTUsbnhlPTIsaXhlPTI1MDAscmd0PVsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsImNsaWNrIl0sb3hlPVswLDEsNCwyXSxheGU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KCJ0ZXN0Iix7YnV0dG9uczoxfSkuYnV0dG9ucz09PTF9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIEhHKGUpe3JldHVybiByZ3QuaW5kZXhPZihlKT4tMX12YXIgVkc9ITE7KGZ1bmN0aW9uKCl7dHJ5e2xldCBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldCgpe1ZHPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe319KSgpO2Z1bmN0aW9uIG5ndChlKXtpZighKEhHKGUpfHxlPT09InRvdWNoZW5kIikmJkJHJiZWRyYmWWR0KXJldHVybntwYXNzaXZlOiEwfX12YXIgaWd0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pLEZHPVtdLHN4ZT17YnV0dG9uOiEwLGlucHV0OiEwLGtleWdlbjohMCxtZXRlcjohMCxvdXRwdXQ6ITAsdGV4dGFyZWE6ITAscHJvZ3Jlc3M6ITAsc2VsZWN0OiEwfSxseGU9e2J1dHRvbjohMCxjb21tYW5kOiEwLGZpZWxkc2V0OiEwLGlucHV0OiEwLGtleWdlbjohMCxvcHRncm91cDohMCxvcHRpb246ITAsc2VsZWN0OiEwLHRleHRhcmVhOiEwfTtmdW5jdGlvbiBjeGUoZSl7cmV0dXJuIHN4ZVtlLmxvY2FsTmFtZV18fCExfWZ1bmN0aW9uIHV4ZShlKXtsZXQgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmxhYmVsc3x8W10pO2lmKCF0Lmxlbmd0aCl7dD1bXTtsZXQgcj1lLmdldFJvb3ROb2RlKCk7aWYoZS5pZCl7bGV0IG49ci5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2UuaWR9XWApO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXQucHVzaChuW2ldKX19cmV0dXJuIHR9dmFyIEptdD1mdW5jdGlvbihlKXtsZXQgdD1lLnNvdXJjZUNhcGFiaWxpdGllcztpZighKHQmJiF0LmZpcmVzVG91Y2hFdmVudHMpJiYoZVt0OV09e3NraXA6ITB9LGUudHlwZT09PSJjbGljayIpKXtsZXQgcj0hMSxuPW45KGUpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtpZihuW2ldLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2lmKG5baV0ubG9jYWxOYW1lPT09ImxhYmVsIilGRy5wdXNoKG5baV0pO2Vsc2UgaWYoY3hlKG5baV0pKXtsZXQgbz11eGUobltpXSk7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspcj1yfHxGRy5pbmRleE9mKG9bYV0pPi0xfX1pZihuW2ldPT09aWEubW91c2UudGFyZ2V0KXJldHVybn1pZihyKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKX19O2Z1bmN0aW9uIFFtdChlKXtsZXQgdD1pZ3Q/WyJjbGljayJdOnJndDtmb3IobGV0IHI9MCxuO3I8dC5sZW5ndGg7cisrKW49dFtyXSxlPyhGRy5sZW5ndGg9MCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG4sSm10LCEwKSk6ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLEptdCwhMCl9ZnVuY3Rpb24gaHhlKGUpe2lmKCFmRylyZXR1cm47aWEubW91c2UubW91c2VJZ25vcmVKb2J8fFFtdCghMCk7bGV0IHQ9ZnVuY3Rpb24oKXtRbXQoKSxpYS5tb3VzZS50YXJnZXQ9bnVsbCxpYS5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfTtpYS5tb3VzZS50YXJnZXQ9bjkoZSlbMF0saWEubW91c2UubW91c2VJZ25vcmVKb2I9c3IuZGVib3VuY2UoaWEubW91c2UubW91c2VJZ25vcmVKb2IsbW8uYWZ0ZXIoaXhlKSx0KX1mdW5jdGlvbiBwXyhlKXtsZXQgdD1lLnR5cGU7aWYoIUhHKHQpKXJldHVybiExO2lmKHQ9PT0ibW91c2Vtb3ZlIil7bGV0IHI9ZS5idXR0b25zPT09dm9pZCAwPzE6ZS5idXR0b25zO3JldHVybiBlIGluc3RhbmNlb2Ygd2luZG93Lk1vdXNlRXZlbnQmJiFheGUmJihyPW94ZVtlLndoaWNoXXx8MCksQm9vbGVhbihyJjEpfWVsc2UgcmV0dXJuKGUuYnV0dG9uPT09dm9pZCAwPzA6ZS5idXR0b24pPT09MH1mdW5jdGlvbiBmeGUoZSl7aWYoZS50eXBlPT09ImNsaWNrIil7aWYoZS5kZXRhaWw9PT0wKXJldHVybiEwO2xldCB0PV9wKGUpO2lmKCF0Lm5vZGVUeXBlfHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuITA7bGV0IHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUucGFnZVgsaT1lLnBhZ2VZO3JldHVybiEobj49ci5sZWZ0JiZuPD1yLnJpZ2h0JiZpPj1yLnRvcCYmaTw9ci5ib3R0b20pfXJldHVybiExfXZhciBpYT17bW91c2U6e3RhcmdldDpudWxsLG1vdXNlSWdub3JlSm9iOm51bGx9LHRvdWNoOnt4OjAseTowLGlkOi0xLHNjcm9sbERlY2lkZWQ6ITF9fTtmdW5jdGlvbiBweGUoZSl7bGV0IHQ9ImF1dG8iLHI9bjkoZSk7Zm9yKGxldCBuPTAsaTtuPHIubGVuZ3RoO24rKylpZihpPXJbbl0saVt6R10pe3Q9aVt6R107YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gb2d0KGUsdCxyKXtlLm1vdmVmbj10LGUudXBmbj1yLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscil9ZnVuY3Rpb24gRngoZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixlLm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZS51cGZuKSxlLm1vdmVmbj1udWxsLGUudXBmbj1udWxsfWZHJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsaHhlLFZHP3twYXNzaXZlOiEwfTohMSk7dmFyIG45PXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2g/d2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aDplPT5lLmNvbXBvc2VkUGF0aCYmZS5jb21wb3NlZFBhdGgoKXx8W10saUU9e30sZl89W107ZnVuY3Rpb24gZHhlKGUsdCl7bGV0IHI9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLHQpLG49cjtmb3IoO24mJm4uc2hhZG93Um9vdCYmIXdpbmRvdy5TaGFkeURPTTspe2xldCBpPW47aWYobj1uLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludChlLHQpLGk9PT1uKWJyZWFrO24mJihyPW4pfXJldHVybiByfWZ1bmN0aW9uIF9wKGUpe2xldCB0PW45KGUpO3JldHVybiB0Lmxlbmd0aD4wP3RbMF06ZS50YXJnZXR9ZnVuY3Rpb24gYWd0KGUpe2xldCB0LHI9ZS50eXBlLGk9ZS5jdXJyZW50VGFyZ2V0W2U5XTtpZighaSlyZXR1cm47bGV0IG89aVtyXTtpZighIW8pe2lmKCFlW3Q5XSYmKGVbdDldPXt9LHIuc2xpY2UoMCw1KT09PSJ0b3VjaCIpKXtlPWU7bGV0IGE9ZS5jaGFuZ2VkVG91Y2hlc1swXTtpZihyPT09InRvdWNoc3RhcnQiJiZlLnRvdWNoZXMubGVuZ3RoPT09MSYmKGlhLnRvdWNoLmlkPWEuaWRlbnRpZmllciksaWEudG91Y2guaWQhPT1hLmlkZW50aWZpZXIpcmV0dXJuO0JHfHwocj09PSJ0b3VjaHN0YXJ0Inx8cj09PSJ0b3VjaG1vdmUiKSYmbXhlKGUpfWlmKHQ9ZVt0OV0sIXQuc2tpcCl7Zm9yKGxldCBhPTAsczthPGZfLmxlbmd0aDthKyspcz1mX1thXSxvW3MubmFtZV0mJiF0W3MubmFtZV0mJnMuZmxvdyYmcy5mbG93LnN0YXJ0LmluZGV4T2YoZS50eXBlKT4tMSYmcy5yZXNldCYmcy5yZXNldCgpO2ZvcihsZXQgYT0wLHM7YTxmXy5sZW5ndGg7YSsrKXM9Zl9bYV0sb1tzLm5hbWVdJiYhdFtzLm5hbWVdJiYodFtzLm5hbWVdPSEwLHNbcl0oZSkpfX19ZnVuY3Rpb24gbXhlKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF0scj1lLnR5cGU7aWYocj09PSJ0b3VjaHN0YXJ0IilpYS50b3VjaC54PXQuY2xpZW50WCxpYS50b3VjaC55PXQuY2xpZW50WSxpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSExO2Vsc2UgaWYocj09PSJ0b3VjaG1vdmUiKXtpZihpYS50b3VjaC5zY3JvbGxEZWNpZGVkKXJldHVybjtpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSEwO2xldCBuPXB4ZShlKSxpPSExLG89TWF0aC5hYnMoaWEudG91Y2gueC10LmNsaWVudFgpLGE9TWF0aC5hYnMoaWEudG91Y2gueS10LmNsaWVudFkpO2UuY2FuY2VsYWJsZSYmKG49PT0ibm9uZSI/aT0hMDpuPT09InBhbi14Ij9pPWE+bzpuPT09InBhbi15IiYmKGk9bz5hKSksaT9lLnByZXZlbnREZWZhdWx0KCk6cjkoInRyYWNrIil9fWZ1bmN0aW9uIEVtKGUsdCxyKXtyZXR1cm4gaUVbdF0/KGd4ZShlLHQsciksITApOiExfWZ1bmN0aW9uIHNndChlLHQscil7cmV0dXJuIGlFW3RdPyhfeGUoZSx0LHIpLCEwKTohMX1mdW5jdGlvbiBneGUoZSx0LHIpe2xldCBuPWlFW3RdLGk9bi5kZXBzLG89bi5uYW1lLGE9ZVtlOV07YXx8KGVbZTldPWE9e30pO2ZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sIShpZ3QmJkhHKGwpJiZsIT09ImNsaWNrIikmJihjPWFbbF0sY3x8KGFbbF09Yz17X2NvdW50OjB9KSxjLl9jb3VudD09PTAmJmUuYWRkRXZlbnRMaXN0ZW5lcihsLGFndCxuZ3QobCkpLGNbb109KGNbb118fDApKzEsYy5fY291bnQ9KGMuX2NvdW50fHwwKSsxKTtlLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxuLnRvdWNoQWN0aW9uJiZkXyhlLG4udG91Y2hBY3Rpb24pfWZ1bmN0aW9uIF94ZShlLHQscil7bGV0IG49aUVbdF0saT1uLmRlcHMsbz1uLm5hbWUsYT1lW2U5XTtpZihhKWZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sYz1hW2xdLGMmJmNbb10mJihjW29dPShjW29dfHwxKS0xLGMuX2NvdW50PShjLl9jb3VudHx8MSktMSxjLl9jb3VudD09PTAmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGFndCxuZ3QobCkpKTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX1mdW5jdGlvbiBVRyhlKXtmXy5wdXNoKGUpO2ZvcihsZXQgdD0wO3Q8ZS5lbWl0cy5sZW5ndGg7dCsrKWlFW2UuZW1pdHNbdF1dPWV9ZnVuY3Rpb24geXhlKGUpe2ZvcihsZXQgdD0wLHI7dDxmXy5sZW5ndGg7dCsrKXtyPWZfW3RdO2ZvcihsZXQgbj0wLGk7bjxyLmVtaXRzLmxlbmd0aDtuKyspaWYoaT1yLmVtaXRzW25dLGk9PT1lKXJldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIGRfKGUsdCl7QkcmJmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmbGkucnVuKCgpPT57ZS5zdHlsZS50b3VjaEFjdGlvbj10fSksZVt6R109dH1mdW5jdGlvbiBxRyhlLHQscil7bGV0IG49bmV3IEV2ZW50KHQse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjb21wb3NlZDohMH0pO2lmKG4uZGV0YWlsPXIsdWUoZSkuZGlzcGF0Y2hFdmVudChuKSxuLmRlZmF1bHRQcmV2ZW50ZWQpe2xldCBpPXIucHJldmVudGVyfHxyLnNvdXJjZUV2ZW50O2kmJmkucHJldmVudERlZmF1bHQmJmkucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gcjkoZSl7bGV0IHQ9eXhlKGUpO3QuaW5mbyYmKHQuaW5mby5wcmV2ZW50PSEwKX1VRyh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpe0Z4KHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtpZighcF8oZSkpcmV0dXJuO2xldCB0PV9wKGUpLHI9dGhpcyxuPWZ1bmN0aW9uKGEpe3BfKGEpfHwobkUoInVwIix0LGEpLEZ4KHIuaW5mbykpfSxpPWZ1bmN0aW9uKGEpe3BfKGEpJiZuRSgidXAiLHQsYSksRngoci5pbmZvKX07b2d0KHRoaXMuaW5mbyxuLGkpLG5FKCJkb3duIix0LGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe25FKCJkb3duIixfcChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtuRSgidXAiLF9wKGUpLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSl9fSk7ZnVuY3Rpb24gbkUoZSx0LHIsbil7IXR8fHFHKHQsZSx7eDpyLmNsaWVudFgseTpyLmNsaWVudFksc291cmNlRXZlbnQ6cixwcmV2ZW50ZXI6bixwcmV2ZW50OmZ1bmN0aW9uKGkpe3JldHVybiByOShpKX19KX1VRyh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKGUpe3RoaXMubW92ZXMubGVuZ3RoPm54ZSYmdGhpcy5tb3Zlcy5zaGlmdCgpLHRoaXMubW92ZXMucHVzaChlKX0sbW92ZWZuOm51bGwsdXBmbjpudWxsLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLnN0YXRlPSJzdGFydCIsdGhpcy5pbmZvLnN0YXJ0ZWQ9ITEsdGhpcy5pbmZvLm1vdmVzPVtdLHRoaXMuaW5mby54PTAsdGhpcy5pbmZvLnk9MCx0aGlzLmluZm8ucHJldmVudD0hMSxGeCh0aGlzLmluZm8pfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoIXBfKGUpKXJldHVybjtsZXQgdD1fcChlKSxyPXRoaXMsbj1mdW5jdGlvbihhKXtsZXQgcz1hLmNsaWVudFgsbD1hLmNsaWVudFk7dGd0KHIuaW5mbyxzLGwpJiYoci5pbmZvLnN0YXRlPXIuaW5mby5zdGFydGVkP2EudHlwZT09PSJtb3VzZXVwIj8iZW5kIjoidHJhY2siOiJzdGFydCIsci5pbmZvLnN0YXRlPT09InN0YXJ0IiYmcjkoInRhcCIpLHIuaW5mby5hZGRNb3ZlKHt4OnMseTpsfSkscF8oYSl8fChyLmluZm8uc3RhdGU9ImVuZCIsRngoci5pbmZvKSksdCYmT0coci5pbmZvLHQsYSksci5pbmZvLnN0YXJ0ZWQ9ITApfSxpPWZ1bmN0aW9uKGEpe3IuaW5mby5zdGFydGVkJiZuKGEpLEZ4KHIuaW5mbyl9O29ndCh0aGlzLmluZm8sbixpKSx0aGlzLmluZm8ueD1lLmNsaWVudFgsdGhpcy5pbmZvLnk9ZS5jbGllbnRZfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2htb3ZlOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXSxuPXIuY2xpZW50WCxpPXIuY2xpZW50WTt0Z3QodGhpcy5pbmZvLG4saSkmJih0aGlzLmluZm8uc3RhdGU9PT0ic3RhcnQiJiZyOSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6bix5Oml9KSxPRyh0aGlzLmluZm8sdCxyKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpyLmNsaWVudFgseTpyLmNsaWVudFl9KSxPRyh0aGlzLmluZm8sdCxyKSl9fSk7ZnVuY3Rpb24gdGd0KGUsdCxyKXtpZihlLnByZXZlbnQpcmV0dXJuITE7aWYoZS5zdGFydGVkKXJldHVybiEwO2xldCBuPU1hdGguYWJzKGUueC10KSxpPU1hdGguYWJzKGUueS1yKTtyZXR1cm4gbj49Wm10fHxpPj1abXR9ZnVuY3Rpb24gT0coZSx0LHIpe2lmKCF0KXJldHVybjtsZXQgbj1lLm1vdmVzW2UubW92ZXMubGVuZ3RoLTJdLGk9ZS5tb3Zlc1tlLm1vdmVzLmxlbmd0aC0xXSxvPWkueC1lLngsYT1pLnktZS55LHMsbD0wO24mJihzPWkueC1uLngsbD1pLnktbi55KSxxRyh0LCJ0cmFjayIse3N0YXRlOmUuc3RhdGUseDpyLmNsaWVudFgseTpyLmNsaWVudFksZHg6byxkeTphLGRkeDpzLGRkeTpsLHNvdXJjZUV2ZW50OnIsaG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZHhlKHIuY2xpZW50WCxyLmNsaWVudFkpfX0pfVVHKHtuYW1lOiJ0YXAiLGRlcHM6WyJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbImNsaWNrIiwidG91Y2hlbmQiXX0sZW1pdHM6WyJ0YXAiXSxpbmZvOnt4Ok5hTix5Ok5hTixwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby54PU5hTix0aGlzLmluZm8ueT1OYU4sdGhpcy5pbmZvLnByZXZlbnQ9ITF9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtwXyhlKSYmKHRoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFkpfSxjbGljazpmdW5jdGlvbihlKXtwXyhlKSYmZWd0KHRoaXMuaW5mbyxlKX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PXQuY2xpZW50WCx0aGlzLmluZm8ueT10LmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2VndCh0aGlzLmluZm8sZS5jaGFuZ2VkVG91Y2hlc1swXSxlKX19KTtmdW5jdGlvbiBlZ3QoZSx0LHIpe2xldCBuPU1hdGguYWJzKHQuY2xpZW50WC1lLngpLGk9TWF0aC5hYnModC5jbGllbnRZLWUueSksbz1fcChyfHx0KTshb3x8bHhlW28ubG9jYWxOYW1lXSYmby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fChpc05hTihuKXx8aXNOYU4oaSl8fG48PUttdCYmaTw9S210fHxmeGUodCkpJiYoZS5wcmV2ZW50fHxxRyhvLCJ0YXAiLHt4OnQuY2xpZW50WCx5OnQuY2xpZW50WSxzb3VyY2VFdmVudDp0LHByZXZlbnRlcjpyfSkpfXZhciBsZ3Q9X3A7dmFyIHloPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7RW0obixpLG8pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7c2d0KG4saSxvKXx8c3VwZXIuX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl9fXJldHVybiB0fSk7dmFyIHZ4ZT0vOmhvc3RcKDpkaXJcKChsdHJ8cnRsKVwpXCkvZyx4eGU9Jzpob3N0KFtkaXI9IiQxIl0pJyxieGU9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLHd4ZT0nOmhvc3QoW2Rpcj0iJDIiXSkgJDEnLFN4ZT0vOmRpclwoKD86bHRyfHJ0bClcKS8sdWd0PUJvb2xlYW4od2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLG9FPVtdLGFFPW51bGwsR0c9IiI7ZnVuY3Rpb24gaGd0KCl7R0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9ZnVuY3Rpb24gZmd0KGUpe2UuX19hdXRvRGlyT3B0T3V0fHxlLnNldEF0dHJpYnV0ZSgiZGlyIixHRyl9ZnVuY3Rpb24gcGd0KCl7aGd0KCksR0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7Zm9yKGxldCBlPTA7ZTxvRS5sZW5ndGg7ZSsrKWZndChvRVtlXSl9ZnVuY3Rpb24gTXhlKCl7YUUmJmFFLnRha2VSZWNvcmRzKCkubGVuZ3RoJiZwZ3QoKX12YXIgZGd0PVJuKGU9Pnt1Z3R8fGFFfHwoaGd0KCksYUU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocGd0KSxhRS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkaXIiXX0pKTtsZXQgdD1ISShlKTtjbGFzcyByIGV4dGVuZHMgdHtzdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoaSxvKXtyZXR1cm4gaT10Ll9wcm9jZXNzU3R5bGVUZXh0LmNhbGwodGhpcyxpLG8pLCF1Z3QmJlN4ZS50ZXN0KGkpJiYoaT10aGlzLl9yZXBsYWNlRGlySW5Dc3NUZXh0KGkpLHRoaXMuX19hY3RpdmF0ZURpcj0hMCksaX1zdGF0aWMgX3JlcGxhY2VEaXJJbkNzc1RleHQoaSl7bGV0IG89aTtyZXR1cm4gbz1vLnJlcGxhY2UodnhlLHh4ZSksbz1vLnJlcGxhY2UoYnhlLHd4ZSksb31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9ITF9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX19hdXRvRGlyT3B0T3V0PXRoaXMuaGFzQXR0cmlidXRlKCJkaXIiKX1jb25uZWN0ZWRDYWxsYmFjaygpe3QucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpciYmKE14ZSgpLG9FLnB1c2godGhpcyksZmd0KHRoaXMpKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe2lmKHQucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpcil7bGV0IGk9b0UuaW5kZXhPZih0aGlzKTtpPi0xJiZvRS5zcGxpY2UoaSwxKX19fXJldHVybiByLl9fYWN0aXZhdGVEaXI9ITEscn0pO3ZhciBpOT0hMSxtZ3Q9W10sZ2d0PVtdO2Z1bmN0aW9uIF9ndCgpe2k5PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2k5PSExLEV4ZShtZ3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtUeGUoZ2d0KX0pfSl9ZnVuY3Rpb24gRXhlKGUpe2Zvcig7ZS5sZW5ndGg7KXlndChlLnNoaWZ0KCkpfWZ1bmN0aW9uIFR4ZShlKXtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspeWd0KGUuc2hpZnQoKSl9ZnVuY3Rpb24geWd0KGUpe2xldCB0PWVbMF0scj1lWzFdLG49ZVsyXTt0cnl7ci5hcHBseSh0LG4pfWNhdGNoKGkpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyBpfSl9fWZ1bmN0aW9uIHZndChlLHQscil7aTl8fF9ndCgpLG1ndC5wdXNoKFtlLHQscl0pfWZ1bmN0aW9uIFRtKGUsdCxyKXtpOXx8X2d0KCksZ2d0LnB1c2goW2UsdCxyXSl9ZnVuY3Rpb24geGd0KCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX1kb2N1bWVudC5yZWFkeVN0YXRlPT09ImludGVyYWN0aXZlInx8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSI/eGd0KCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHhndCk7ZnVuY3Rpb24gc0UoZSx0LHIpe3JldHVybntpbmRleDplLHJlbW92ZWQ6dCxhZGRlZENvdW50OnJ9fXZhciBiZ3Q9MCx3Z3Q9MSxXRz0yLFlHPTM7ZnVuY3Rpb24gQ3hlKGUsdCxyLG4saSxvKXtsZXQgYT1vLWkrMSxzPXItdCsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgYz0wO2M8YTtjKyspbFtjXT1uZXcgQXJyYXkocyksbFtjXVswXT1jO2ZvcihsZXQgYz0wO2M8cztjKyspbFswXVtjXT1jO2ZvcihsZXQgYz0xO2M8YTtjKyspZm9yKGxldCB1PTE7dTxzO3UrKylpZihqRyhlW3QrdS0xXSxuW2krYy0xXSkpbFtjXVt1XT1sW2MtMV1bdS0xXTtlbHNle2xldCBoPWxbYy0xXVt1XSsxLGY9bFtjXVt1LTFdKzE7bFtjXVt1XT1oPGY/aDpmfXJldHVybiBsfWZ1bmN0aW9uIEF4ZShlKXtsZXQgdD1lLmxlbmd0aC0xLHI9ZVswXS5sZW5ndGgtMSxuPWVbdF1bcl0saT1bXTtmb3IoO3Q+MHx8cj4wOyl7aWYodD09MCl7aS5wdXNoKFdHKSxyLS07Y29udGludWV9aWYocj09MCl7aS5wdXNoKFlHKSx0LS07Y29udGludWV9bGV0IG89ZVt0LTFdW3ItMV0sYT1lW3QtMV1bcl0scz1lW3RdW3ItMV0sbDthPHM/bD1hPG8/YTpvOmw9czxvP3M6byxsPT1vPyhvPT1uP2kucHVzaChiZ3QpOihpLnB1c2god2d0KSxuPW8pLHQtLSxyLS0pOmw9PWE/KGkucHVzaChZRyksdC0tLG49YSk6KGkucHVzaChXRyksci0tLG49cyl9cmV0dXJuIGkucmV2ZXJzZSgpLGl9ZnVuY3Rpb24gUHhlKGUsdCxyLG4saSxvKXtsZXQgYT0wLHM9MCxsLGM9TWF0aC5taW4oci10LG8taSk7aWYodD09MCYmaT09MCYmKGE9SXhlKGUsbixjKSkscj09ZS5sZW5ndGgmJm89PW4ubGVuZ3RoJiYocz1MeGUoZSxuLGMtYSkpLHQrPWEsaSs9YSxyLT1zLG8tPXMsci10PT0wJiZvLWk9PTApcmV0dXJuW107aWYodD09cil7Zm9yKGw9c0UodCxbXSwwKTtpPG87KWwucmVtb3ZlZC5wdXNoKG5baSsrXSk7cmV0dXJuW2xdfWVsc2UgaWYoaT09bylyZXR1cm5bc0UodCxbXSxyLXQpXTtsZXQgdT1BeGUoQ3hlKGUsdCxyLG4saSxvKSk7bD12b2lkIDA7bGV0IGg9W10sZj10LHA9aTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKylzd2l0Y2godVtkXSl7Y2FzZSBiZ3Q6bCYmKGgucHVzaChsKSxsPXZvaWQgMCksZisrLHArKzticmVhaztjYXNlIHdndDpsfHwobD1zRShmLFtdLDApKSxsLmFkZGVkQ291bnQrKyxmKyssbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrO2Nhc2UgV0c6bHx8KGw9c0UoZixbXSwwKSksbC5hZGRlZENvdW50KyssZisrO2JyZWFrO2Nhc2UgWUc6bHx8KGw9c0UoZixbXSwwKSksbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrfXJldHVybiBsJiZoLnB1c2gobCksaH1mdW5jdGlvbiBJeGUoZSx0LHIpe2ZvcihsZXQgbj0wO248cjtuKyspaWYoIWpHKGVbbl0sdFtuXSkpcmV0dXJuIG47cmV0dXJuIHJ9ZnVuY3Rpb24gTHhlKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPXQubGVuZ3RoLG89MDtmb3IoO288ciYmakcoZVstLW5dLHRbLS1pXSk7KW8rKztyZXR1cm4gb31mdW5jdGlvbiBvOShlLHQpe3JldHVybiBQeGUoZSwwLGUubGVuZ3RoLHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gakcoZSx0KXtyZXR1cm4gZT09PXR9ZnVuY3Rpb24gQngoZSl7cmV0dXJuIGUubG9jYWxOYW1lPT09InNsb3QifXZhciB2aD1jbGFzc3tzdGF0aWMgZ2V0RmxhdHRlbmVkTm9kZXMoZSl7bGV0IHQ9dWUoZSk7cmV0dXJuIEJ4KGUpPyhlPWUsdC5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOkFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAocj0+Qngocik/KHI9cix1ZShyKS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOltyXSkucmVkdWNlKChyLG4pPT5yLmNvbmNhdChuKSxbXSl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3RhcmdldD1lLHRoaXMuY2FsbGJhY2s9dCx0aGlzLl9lZmZlY3RpdmVOb2Rlcz1bXSx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX3NjaGVkdWxlZD0hMSx0aGlzLl9ib3VuZFNjaGVkdWxlPSgpPT57dGhpcy5fc2NoZWR1bGUoKX0sdGhpcy5jb25uZWN0KCksdGhpcy5fc2NoZWR1bGUoKX1jb25uZWN0KCl7QngodGhpcy5fdGFyZ2V0KT90aGlzLl9saXN0ZW5TbG90cyhbdGhpcy5fdGFyZ2V0XSk6dWUodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTT90aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9d2luZG93LlNoYWR5RE9NLm9ic2VydmVDaGlsZHJlbih0aGlzLl90YXJnZXQsZT0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnMoZSl9KToodGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57dGhpcy5fcHJvY2Vzc011dGF0aW9ucyhlKX0pLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtCeCh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOnVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4mJih0aGlzLl91bmxpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTSYmdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPyh3aW5kb3cuU2hhZHlET00udW5vYnNlcnZlQ2hpbGRyZW4odGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSx0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCk6dGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlciYmKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCkpLHRoaXMuX2Nvbm5lY3RlZD0hMX1fc2NoZWR1bGUoKXt0aGlzLl9zY2hlZHVsZWR8fCh0aGlzLl9zY2hlZHVsZWQ9ITAsbGkucnVuKCgpPT50aGlzLmZsdXNoKCkpKX1fcHJvY2Vzc011dGF0aW9ucyhlKXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyhlKSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKGUpe2lmKGUpZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07ci5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhyLmFkZGVkTm9kZXMpLHIucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKHIucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCBlPXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSx0PXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxyPW85KHQsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT0wLHM7YTxvLnJlbW92ZWQubGVuZ3RoJiYocz1vLnJlbW92ZWRbYV0pO2ErKyllLnJlbW92ZWROb2Rlcy5wdXNoKHMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT1vLmluZGV4O2E8by5pbmRleCtvLmFkZGVkQ291bnQ7YSsrKWUuYWRkZWROb2Rlcy5wdXNoKHRbYV0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPXQ7bGV0IG49ITE7cmV0dXJuKGUuYWRkZWROb2Rlcy5sZW5ndGh8fGUucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihuPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsZSkpLG59X2xpc3RlblNsb3RzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO0J4KHIpJiZyLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtCeChyKSYmci5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTt2YXIgY2k9ZnVuY3Rpb24oKXtsZXQgZSx0O2RvIGU9d2luZG93LlNoYWR5RE9NJiZTaGFkeURPTS5mbHVzaCgpLHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0uZmx1c2goKSx0PSRtdCgpO3doaWxlKGV8fHQpfTt2YXIgSHg9RWxlbWVudC5wcm90b3R5cGUsa3hlPUh4Lm1hdGNoZXN8fEh4Lm1hdGNoZXNTZWxlY3Rvcnx8SHgubW96TWF0Y2hlc1NlbGVjdG9yfHxIeC5tc01hdGNoZXNTZWxlY3Rvcnx8SHgub01hdGNoZXNTZWxlY3Rvcnx8SHgud2Via2l0TWF0Y2hlc1NlbGVjdG9yLCRHPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGt4ZS5jYWxsKGUsdCl9LEtyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3dpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlJiZ3aW5kb3cuU2hhZHlET00ucGF0Y2godCksdGhpcy5ub2RlPXR9b2JzZXJ2ZU5vZGVzKHQpe3JldHVybiBuZXcgdmgodGhpcy5ub2RlLHQpfXVub2JzZXJ2ZU5vZGVzKHQpe3QuZGlzY29ubmVjdCgpfW5vdGlmeU9ic2VydmVyKCl7fWRlZXBDb250YWlucyh0KXtpZih1ZSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCByPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtyJiZyIT09biYmciE9PXRoaXMubm9kZTspcj11ZShyKS5wYXJlbnROb2RlfHx1ZShyKS5ob3N0O3JldHVybiByPT09dGhpcy5ub2RlfWdldE93bmVyUm9vdCgpe3JldHVybiB1ZSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiB0aGlzLm5vZGUubG9jYWxOYW1lPT09InNsb3QiP3VlKHRoaXMubm9kZSkuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pOltdfWdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKCl7bGV0IHQ9W10scj11ZSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO3I7KXQucHVzaChyKSxyPXVlKHIpLmFzc2lnbmVkU2xvdDtyZXR1cm4gdH1pbXBvcnROb2RlKHQscil7bGV0IG49dGhpcy5ub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQ/dGhpcy5ub2RlOnRoaXMubm9kZS5vd25lckRvY3VtZW50O3JldHVybiB1ZShuKS5pbXBvcnROb2RlKHQscil9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzLm5vZGUpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtsZXQgcj10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxuPVtdO2ZvcihsZXQgaT0wLG89ci5sZW5ndGgsYTtpPG8mJihhPXJbaV0pO2krKylhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiRHKGEsdCkmJm4ucHVzaChhKTtyZXR1cm4gbn1nZXQgYWN0aXZlRWxlbWVudCgpe2xldCB0PXRoaXMubm9kZTtyZXR1cm4gdC5fYWN0aXZlRWxlbWVudCE9PXZvaWQgMD90Ll9hY3RpdmVFbGVtZW50OnQuYWN0aXZlRWxlbWVudH19O2Z1bmN0aW9uIFJ4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2Vbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25dLmFwcGx5KHRoaXMubm9kZSxhcmd1bWVudHMpfX19ZnVuY3Rpb24gU2d0KGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtuXX0sY29uZmlndXJhYmxlOiEwfSl9fWZ1bmN0aW9uIE54ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbl19LHNldDpmdW5jdGlvbihpKXt0aGlzLm5vZGVbbl09aX0sY29uZmlndXJhYmxlOiEwfSl9fXZhciBsRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50PXR9Z2V0IHJvb3RUYXJnZXQoKXtyZXR1cm4gdGhpcy5wYXRoWzBdfWdldCBsb2NhbFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnRhcmdldH1nZXQgcGF0aCgpe3JldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpfX07S3IucHJvdG90eXBlLmNsb25lTm9kZTtLci5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7S3IucHJvdG90eXBlLmluc2VydEJlZm9yZTtLci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7S3IucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtLci5wcm90b3R5cGUuc2V0QXR0cmlidXRlO0tyLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7S3IucHJvdG90eXBlLnBhcmVudE5vZGU7S3IucHJvdG90eXBlLmZpcnN0Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RDaGlsZDtLci5wcm90b3R5cGUubmV4dFNpYmxpbmc7S3IucHJvdG90eXBlLnByZXZpb3VzU2libGluZztLci5wcm90b3R5cGUuZmlyc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLm5leHRFbGVtZW50U2libGluZztLci5wcm90b3R5cGUucHJldmlvdXNFbGVtZW50U2libGluZztLci5wcm90b3R5cGUuY2hpbGROb2RlcztLci5wcm90b3R5cGUuY2hpbGRyZW47S3IucHJvdG90eXBlLmNsYXNzTGlzdDtLci5wcm90b3R5cGUudGV4dENvbnRlbnQ7S3IucHJvdG90eXBlLmlubmVySFRNTDt2YXIgWEc9S3I7aWYod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UmJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00uV3JhcHBlcil7Y2xhc3MgZSBleHRlbmRzIHdpbmRvdy5TaGFkeURPTS5XcmFwcGVye31PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhLci5wcm90b3R5cGUpLmZvckVhY2godD0+e3QhPSJhY3RpdmVFbGVtZW50IiYmKGUucHJvdG90eXBlW3RdPUtyLnByb3RvdHlwZVt0XSl9KSxTZ3QoZS5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksWEc9ZSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsRS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtsZXQgdD10aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQscj10JiZ6dCh0KS5nZXRPd25lclJvb3QoKSxuPXRoaXMucGF0aDtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZih6dChvKS5nZXRPd25lclJvb3QoKT09PXIpcmV0dXJuIG99fSxjb25maWd1cmFibGU6ITB9LHBhdGg6e2dldCgpe3JldHVybiB3aW5kb3cuU2hhZHlET00uY29tcG9zZWRQYXRoKHRoaXMuZXZlbnQpfSxjb25maWd1cmFibGU6ITB9fSl9ZWxzZSBSeGUoS3IucHJvdG90eXBlLFsiY2xvbmVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJyZW1vdmVDaGlsZCIsInJlcGxhY2VDaGlsZCIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIl0pLFNndChLci5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSxOeGUoS3IucHJvdG90eXBlLFsidGV4dENvbnRlbnQiLCJpbm5lckhUTUwiLCJjbGFzc05hbWUiXSk7dmFyIHp0PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8ZG9jdW1lbnQsZSBpbnN0YW5jZW9mIFhHfHxlIGluc3RhbmNlb2YgbEUpcmV0dXJuIGU7bGV0IHQ9ZS5fX2RvbUFwaTtyZXR1cm4gdHx8KGUgaW5zdGFuY2VvZiBFdmVudD90PW5ldyBsRShlKTp0PW5ldyBYRyhlKSxlLl9fZG9tQXBpPXQpLHR9O3ZhciBLRz13aW5kb3cuU2hhZHlET00sTWd0PXdpbmRvdy5TaGFkeUNTUztmdW5jdGlvbiBFZ3QoZSx0KXtyZXR1cm4gdWUoZSkuZ2V0Um9vdE5vZGUoKT09PXR9ZnVuY3Rpb24gVGd0KGUsdD0hMSl7aWYoIUtHfHwhTWd0fHwhS0cuaGFuZGxlc0R5bmFtaWNTY29waW5nKXJldHVybiBudWxsO2xldCByPU1ndC5TY29waW5nU2hpbTtpZighcilyZXR1cm4gbnVsbDtsZXQgbj1yLnNjb3BlRm9yTm9kZShlKSxpPXVlKGUpLmdldFJvb3ROb2RlKCksbz1hPT57aWYoIUVndChhLGkpKXJldHVybjtsZXQgcz1BcnJheS5mcm9tKEtHLm5hdGl2ZU1ldGhvZHMucXVlcnlTZWxlY3RvckFsbC5jYWxsKGEsIioiKSk7cy5wdXNoKGEpO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2lmKCFFZ3QoYyxpKSljb250aW51ZTtsZXQgdT1yLmN1cnJlbnRTY29wZUZvck5vZGUoYyk7dSE9PW4mJih1IT09IiImJnIudW5zY29wZU5vZGUoYyx1KSxyLnNjb3BlTm9kZShjLG4pKX19O2lmKG8oZSksdCl7bGV0IGE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocz0+e2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2ZvcihsZXQgdT0wO3U8Yy5hZGRlZE5vZGVzLmxlbmd0aDt1Kyspe2xldCBoPWMuYWRkZWROb2Rlc1t1XTtoLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oaCl9fX0pO3JldHVybiBhLm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxhfWVsc2UgcmV0dXJuIG51bGx9dmFyIFpHPSJkaXNhYmxlLXVwZ3JhZGUiLEpHPWU9Pntmb3IoO2U7KXtsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIm9ic2VydmVkQXR0cmlidXRlcyIpO2lmKHQpcmV0dXJuIHQuZ2V0O2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1yZXR1cm4oKT0+W119LEUxcj1SbihlPT57bGV0IHQ9U20oZSkscj1KRyh0KTtjbGFzcyBuIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuIHIuY2FsbCh0aGlzKS5jb25jYXQoWkcpfV9pbml0aWFsaXplUHJvcGVydGllcygpe3RoaXMuaGFzQXR0cmlidXRlKFpHKT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA6c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KG8pe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQobykmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyhvKSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpe289PVpHP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZCYmcz09bnVsbCYmKHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSk6c3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfX1yZXR1cm4gbn0pO3ZhciBhOT0iZGlzYWJsZS11cGdyYWRlIixEeGU9d2luZG93LlNoYWR5Q1NTLEd0PVJuKGU9PntsZXQgdD15aChTbShlKSkscj1VST90OmRndCh0KSxuPUpHKHIpLGk9e3g6InBhbi14Iix5OiJwYW4teSIsbm9uZToibm9uZSIsYWxsOiJhdXRvIn07Y2xhc3MgbyBleHRlbmRzIHJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuaXNBdHRhY2hlZCx0aGlzLl9fYm91bmRMaXN0ZW5lcnMsdGhpcy5fZGVib3VuY2Vycyx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQsdGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkLHRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBnZXQgaW1wb3J0TWV0YSgpe3JldHVybiB0aGlzLnByb3RvdHlwZS5pbXBvcnRNZXRhfWNyZWF0ZWQoKXt9X19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsYyl7KHRoaXMuX19kYXRhQXR0cmlidXRlcyYmdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW3NdfHxzPT09YTkpJiZ0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhzLGwsYyxudWxsKX1zZXRBdHRyaWJ1dGUocyxsKXtpZihxTSYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLmdldEF0dHJpYnV0ZShzKTtzdXBlci5zZXRBdHRyaWJ1dGUocyxsKSx0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24ocyxjLFN0cmluZyhsKSl9ZWxzZSBzdXBlci5zZXRBdHRyaWJ1dGUocyxsKX1yZW1vdmVBdHRyaWJ1dGUocyl7aWYocU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyl7bGV0IGw9dGhpcy5nZXRBdHRyaWJ1dGUocyk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHMpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocyl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gcU0mJiF0aGlzLnByb3RvdHlwZS5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXM/KHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKXx8KHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9W10sVkkodGhpcy5wcm90b3R5cGUpKSx0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzKTpuLmNhbGwodGhpcykuY29uY2F0KGE5KX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQocyl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChzKSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHMpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZCYmdGhpcy5fdGFrZUF0dHJpYnV0ZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fChzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaXNBdHRhY2hlZD0hMCx0aGlzLmF0dGFjaGVkKCkpfWF0dGFjaGVkKCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITEsdGhpcy5kZXRhY2hlZCgpKX1kZXRhY2hlZCgpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socyxsLGMsdSl7bCE9PWMmJihzPT1hOT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJmM9PW51bGwmJih0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHMsbCxjLHUpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZChzLGwsYykpKX1hdHRyaWJ1dGVDaGFuZ2VkKHMsbCxjKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYocHAmJnRoaXMuaGFzQXR0cmlidXRlKGE5KSl0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA7ZWxzZXtsZXQgcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7cy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLHMpKXx8KHRoaXMuX3JlZ2lzdGVyZWQoKSxzLl9faGFzUmVnaXN0ZXJGaW5pc2hlZD0hMCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290PXRoaXMsdGhpcy5jcmVhdGVkKCkscU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHRoaXMuaGFzQXR0cmlidXRlcygpP3RoaXMuX3Rha2VBdHRyaWJ1dGVzKCk6dGhpcy5wYXJlbnROb2RlfHwodGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkPSEwKSksdGhpcy5fYXBwbHlMaXN0ZW5lcnMoKX19X3Rha2VBdHRyaWJ1dGVzKCl7bGV0IHM9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbD0wLGM9cy5sZW5ndGg7bDxjO2wrKyl7bGV0IHU9c1tsXTt0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24odS5uYW1lLG51bGwsdS52YWx1ZSl9fV9yZWdpc3RlcmVkKCl7fXJlYWR5KCl7dGhpcy5fZW5zdXJlQXR0cmlidXRlcygpLHN1cGVyLnJlYWR5KCl9X2Vuc3VyZUF0dHJpYnV0ZXMoKXt9X2FwcGx5TGlzdGVuZXJzKCl7fXNlcmlhbGl6ZShzKXtyZXR1cm4gdGhpcy5fc2VyaWFsaXplVmFsdWUocyl9ZGVzZXJpYWxpemUocyxsKXtyZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZShzLGwpfXJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl9wcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKX1zZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShjfHx0aGlzLHMsbCl9ZXh0ZW5kKHMsbCl7aWYoIShzJiZsKSlyZXR1cm4gc3x8bDtsZXQgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsKTtmb3IobGV0IHU9MCxoO3U8Yy5sZW5ndGgmJihoPWNbdV0pO3UrKyl7bGV0IGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGgpO2YmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGgsZil9cmV0dXJuIHN9bWl4aW4ocyxsKXtmb3IobGV0IGMgaW4gbClzW2NdPWxbY107cmV0dXJuIHN9Y2hhaW5PYmplY3QocyxsKXtyZXR1cm4gcyYmbCYmcyE9PWwmJihzLl9fcHJvdG9fXz1sKSxzfWluc3RhbmNlVGVtcGxhdGUocyl7bGV0IGw9dGhpcy5jb25zdHJ1Y3Rvci5fY29udGVudEZvclRlbXBsYXRlKHMpO3JldHVybiBkb2N1bWVudC5pbXBvcnROb2RlKGwsITApfWZpcmUocyxsLGMpe2M9Y3x8e30sbD1sPT1udWxsP3t9Omw7bGV0IHU9bmV3IEV2ZW50KHMse2J1YmJsZXM6Yy5idWJibGVzPT09dm9pZCAwPyEwOmMuYnViYmxlcyxjYW5jZWxhYmxlOkJvb2xlYW4oYy5jYW5jZWxhYmxlKSxjb21wb3NlZDpjLmNvbXBvc2VkPT09dm9pZCAwPyEwOmMuY29tcG9zZWR9KTt1LmRldGFpbD1sO2xldCBoPWMubm9kZXx8dGhpcztyZXR1cm4gdWUoaCkuZGlzcGF0Y2hFdmVudCh1KSx1fWxpc3RlbihzLGwsYyl7cz1zfHx0aGlzO2xldCB1PXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCksaD11LmdldChzKTtofHwoaD17fSx1LnNldChzLGgpKTtsZXQgZj1sK2M7aFtmXXx8KGhbZl09dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShzLGwsYyx0aGlzKSl9dW5saXN0ZW4ocyxsLGMpe3M9c3x8dGhpcztsZXQgdT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQocyksaD1sK2MsZj11JiZ1W2hdO2YmJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUocyxsLGYpLHVbaF09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHMsbCl7ZF8obHx8dGhpcyxpW3NdfHwiYXV0byIpfSQkKHMpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzKX1nZXQgZG9tSG9zdCgpe2xldCBzPXVlKHRoaXMpLmdldFJvb3ROb2RlKCk7cmV0dXJuIHMgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3MuaG9zdDpzfWRpc3RyaWJ1dGVDb250ZW50KCl7bGV0IGw9enQodGhpcyk7d2luZG93LlNoYWR5RE9NJiZsLnNoYWRvd1Jvb3QmJlNoYWR5RE9NLmZsdXNoKCl9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB6dCh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCl9cXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpe3JldHVybiB6dCh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0RWZmZWN0aXZlQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCBzPXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGw9W107Zm9yKGxldCBjPTAsdTt1PXNbY107YysrKXUubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmbC5wdXNoKHUudGV4dENvbnRlbnQpO3JldHVybiBsLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4ocyl7bGV0IGw9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyk7cmV0dXJuIGwmJmxbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbihzKXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0Q29udGVudENoaWxkTm9kZXMocyl7bGV0IGw9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Ioc3x8InNsb3QiKTtyZXR1cm4gbD96dChsKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHMpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHMpLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSl9aXNMaWdodERlc2NlbmRhbnQocyl7bGV0IGw9dGhpcztyZXR1cm4gbCE9PXMmJnVlKGwpLmNvbnRhaW5zKHMpJiZ1ZShsKS5nZXRSb290Tm9kZSgpPT09dWUocykuZ2V0Um9vdE5vZGUoKX1pc0xvY2FsRGVzY2VuZGFudChzKXtyZXR1cm4gdGhpcy5yb290PT09dWUocykuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUocyxsPSExKXtyZXR1cm4gVGd0KHMsbCl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHMpe3JldHVybiBEeGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHRoaXMscyl9ZGVib3VuY2UocyxsLGMpe3JldHVybiB0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbc109c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tzXSxjPjA/bW8uYWZ0ZXIoYyk6bGksbC5iaW5kKHRoaXMpKX1pc0RlYm91bmNlckFjdGl2ZShzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107cmV0dXJuISEobCYmbC5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5mbHVzaCgpfWNhbmNlbERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5jYW5jZWwoKX1hc3luYyhzLGwpe3JldHVybiBsPjA/bW8ucnVuKHMuYmluZCh0aGlzKSxsKTp+bGkucnVuKHMuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmMocyl7czwwP2xpLmNhbmNlbCh+cyk6bW8uY2FuY2VsKHMpfWNyZWF0ZShzLGwpe2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7aWYobClpZihjLnNldFByb3BlcnRpZXMpYy5zZXRQcm9wZXJ0aWVzKGwpO2Vsc2UgZm9yKGxldCB1IGluIGwpY1t1XT1sW3VdO3JldHVybiBjfWVsZW1lbnRNYXRjaGVzKHMsbCl7cmV0dXJuICRHKGx8fHRoaXMscyl9dG9nZ2xlQXR0cmlidXRlKHMsbCl7bGV0IGM9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTMmJihjPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuaGFzQXR0cmlidXRlKHMpKSxsPyh1ZShjKS5zZXRBdHRyaWJ1dGUocywiIiksITApOih1ZShjKS5yZW1vdmVBdHRyaWJ1dGUocyksITEpfXRvZ2dsZUNsYXNzKHMsbCxjKXtjPWN8fHRoaXMsYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuY2xhc3NMaXN0LmNvbnRhaW5zKHMpKSxsP2MuY2xhc3NMaXN0LmFkZChzKTpjLmNsYXNzTGlzdC5yZW1vdmUocyl9dHJhbnNmb3JtKHMsbCl7bD1sfHx0aGlzLGwuc3R5bGUud2Via2l0VHJhbnNmb3JtPXMsbC5zdHlsZS50cmFuc2Zvcm09c310cmFuc2xhdGUzZChzLGwsYyx1KXt1PXV8fHRoaXMsdGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrcysiLCIrbCsiLCIrYysiKSIsdSl9YXJyYXlEZWxldGUocyxsKXtsZXQgYztpZihBcnJheS5pc0FycmF5KHMpKXtpZihjPXMuaW5kZXhPZihsKSxjPj0wKXJldHVybiBzLnNwbGljZShjLDEpfWVsc2UgaWYoYz1Obyh0aGlzLHMpLmluZGV4T2YobCksYz49MClyZXR1cm4gdGhpcy5zcGxpY2UocyxjLDEpO3JldHVybiBudWxsfV9sb2dnZXIocyxsKXtzd2l0Y2goQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg9PT0xJiZBcnJheS5pc0FycmF5KGxbMF0pJiYobD1sWzBdKSxzKXtjYXNlImxvZyI6Y2FzZSJ3YXJuIjpjYXNlImVycm9yIjpjb25zb2xlW3NdKC4uLmwpfX1fbG9nKC4uLnMpe3RoaXMuX2xvZ2dlcigibG9nIixzKX1fd2FybiguLi5zKXt0aGlzLl9sb2dnZXIoIndhcm4iLHMpfV9lcnJvciguLi5zKXt0aGlzLl9sb2dnZXIoImVycm9yIixzKX1fbG9nZihzLC4uLmwpe3JldHVyblsiWyVzOjolc10iLHRoaXMuaXMscywuLi5sXX19cmV0dXJuIG8ucHJvdG90eXBlLmlzPSIiLG99KTt2YXIgQ209RWUoT2UoKSwxKTtmdW5jdGlvbiB4aChlLHQpe2xldCByPTAsbj0wO2Zvcig7Oyl7aWYocj09PWUubGVuZ3RoKXJldHVybiBuPT09dC5sZW5ndGg/MDotMTtpZihuPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYobV8oZVtyXSkmJm1fKHRbbl0pKXtsZXQgaT1yLG89bjtyPUNndChlLHIrMSksbj1DZ3QodCxuKzEpO2xldCBhPXBhcnNlRmxvYXQoZS5zbGljZShpLHIpKSxzPXBhcnNlRmxvYXQodC5zbGljZShvLG4pKTtpZihhPHMpcmV0dXJuLTE7aWYoYT5zKXJldHVybiAxO2NvbnRpbnVlfWlmKFFHKGVbcl0pKXtpZighUUcodFtuXSkpcmV0dXJuLTF9ZWxzZXtpZihRRyh0W25dKSlyZXR1cm4gMTtpZihlW3JdPHRbbl0pcmV0dXJuLTE7aWYoZVtyXT50W25dKXJldHVybiAxfXIrKyxuKyt9fWZ1bmN0aW9uIENndChlLHQpe2xldCByOyhmdW5jdGlvbihpKXtpW2kuTkFUVVJBTD0wXT0iTkFUVVJBTCIsaVtpLlJFQUw9MV09IlJFQUwiLGlbaS5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixpW2kuRVhQT05FTlQ9M109IkVYUE9ORU5UIn0pKHJ8fChyPXt9KSk7bGV0IG49ci5OQVRVUkFMO2Zvcig7dDxlLmxlbmd0aDt0KyspaWYobj09PXIuTkFUVVJBTCl7aWYoZVt0XT09PSIuIiluPXIuUkVBTDtlbHNlIGlmKGVbdF09PT0iZSJ8fGVbdF09PT0iRSIpbj1yLkVYUE9ORU5UX1NJR047ZWxzZSBpZighbV8oZVt0XSkpYnJlYWt9ZWxzZSBpZihuPT09ci5SRUFMKXtpZihlW3RdPT09ImUifHxlW3RdPT09IkUiKW49ci5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIW1fKGVbdF0pKWJyZWFrfWVsc2UgaWYobj09PXIuRVhQT05FTlRfU0lHTilpZihtXyhlW3RdKXx8ZVt0XT09PSIrInx8ZVt0XT09PSItIiluPXIuRVhQT05FTlQ7ZWxzZSBicmVhaztlbHNlIGlmKG49PT1yLkVYUE9ORU5UJiYhbV8oZVt0XSkpYnJlYWs7cmV0dXJuIHR9ZnVuY3Rpb24gbV8oZSl7cmV0dXJuIjAiPD1lJiZlPD0iOSJ9ZnVuY3Rpb24gUUcoZSl7cmV0dXJuIGU9PT0iLyJ8fGU9PT0iXyJ8fG1fKGUpfXZhciBPeGU9W107ZnVuY3Rpb24genhlKGUpe3JldHVybiBDbS5rZXlzKGUpLnNvcnQoeGgpfWZ1bmN0aW9uICRpKGUpe3JldHVybiBDbS51bmlvbi5hcHBseShudWxsLENtLnZhbHVlcyhlKSkuc29ydCh4aCl9ZnVuY3Rpb24gRnhlKGUsdCl7bGV0IHI9W107cmV0dXJuIHQuZm9yRWFjaChuPT5yPXIuY29uY2F0KGVbbl0pKSxDbS51bmlxKHIpLnNvcnQoeGgpfXZhciBQZ3Q9IlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsSWd0PSJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyI7dmFyIHRXPXt9O0tzKHRXLHtnZXRGZWF0dXJlRmxhZ3M6KCk9Pkh4ZSxnZXRGZWF0dXJlRmxhZ3NUb1NlbmRUb1NlcnZlcjooKT0+Y0UsaW5pdGlhbGl6ZUZlYXR1cmVGbGFnczooKT0+TGd0LHNldEZlYXR1cmVGbGFnczooKT0+QnhlfSk7dmFyIHM5LGw5O0xndCgpO2Z1bmN0aW9uIExndCgpe3M5PW51bGwsbDk9bnVsbH1mdW5jdGlvbiBCeGUoZSx0KXtzOT1lLGw5PXR9ZnVuY3Rpb24gSHhlKCl7aWYoczk9PT1udWxsKXRocm93IEVycm9yKCJGZWF0dXJlRmxhZ3MgaGF2ZSBub3QgeWV0IGJlZW4gZGV0ZXJtaW5lZCBieSBUZW5zb3JCb2FyZC4iKTtyZXR1cm4gczl9ZnVuY3Rpb24gY0UoKXtpZihsOT09PW51bGwpdGhyb3cgRXJyb3IoIkZlYXR1cmVGbGFncyBoYXZlIG5vdCB5ZXQgYmVlbiBkZXRlcm1pbmVkIGJ5IFRlbnNvckJvYXJkLiIpO3JldHVybiBsOX12YXIgYzk9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lPSJSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3IifX0sVng9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxWeC5wcm90b3R5cGUpfX0sdUU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCksdGhpcy5tZXNzYWdlPWBSZXF1ZXN0TmV0d29ya0Vycm9yOiAke3Quc3RhdHVzfSBhdCAke3J9YCx0aGlzLm5hbWU9IlJlcXVlc3ROZXR3b3JrRXJyb3IiLHRoaXMucmVxPXQsdGhpcy51cmw9cn19LEFtOyhmdW5jdGlvbihlKXtlLkdFVD0iR0VUIixlLlBPU1Q9IlBPU1QifSkoQW18fChBbT17fSkpO3ZhciBVeD1jbGFzc3t2YWxpZGF0ZSgpe2lmKHRoaXMubWV0aG9kVHlwZT09PUFtLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBWeCgiYm9keSBtdXN0IGJlIG1pc3NpbmcgZm9yIGEgR0VUIHJlcXVlc3QuIil9fSxBZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTFlMyxyPTMpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX25BY3RpdmVSZXF1ZXN0cz0wLHRoaXMuX25TaW11bHRhbmVvdXNSZXF1ZXN0cz10LHRoaXMuX21heFJldHJpZXM9cn1yZXF1ZXN0KHQscil7bGV0IG49VXhlKHIpO3JldHVybiB0aGlzLnJlcXVlc3RXaXRoT3B0aW9ucyh0LG4pfXJlcXVlc3RXaXRoT3B0aW9ucyh0LHIpe3JldHVybiByLnZhbGlkYXRlKCksbmV3IFByb21pc2UoKGksbyk9PntsZXQgYT17cmVzb2x2ZTppLHJlamVjdDpvfTt0aGlzLl9xdWV1ZS5wdXNoKGEpLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PnRoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsdGhpcy5fbWF4UmV0cmllcyxyKSkudGhlbihpPT4odGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpLGkpLGk9PihpLm5hbWU9PT0iUmVxdWVzdE5ldHdvcmtFcnJvciImJih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCkpLFByb21pc2UucmVqZWN0KGkpKSl9ZmV0Y2godCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz17cmVzb2x2ZTpuLHJlamVjdDppfTt0aGlzLl9xdWV1ZS5wdXNoKG8pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PntsZXQgbj0xO3JldHVybiBuZXcgUHJvbWlzZShpPT57bGV0IG89KCk9PntmZXRjaCh0LHIpLnRoZW4oYT0+e2lmKCFhLm9rJiZ0aGlzLl9tYXhSZXRyaWVzPm4pe24rKyxvKCk7cmV0dXJufWkoYSksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpfSl9O28oKX0pfSl9Y2xlYXJRdWV1ZSgpe3ZhciB0O2Zvcig7dGhpcy5fcXVldWUubGVuZ3RoPjA7KSh0PXRoaXMuX3F1ZXVlLnBvcCgpKT09bnVsbHx8dC5yZWplY3QobmV3IGM5KCJSZXF1ZXN0IGNhbmNlbGxlZCBieSBjbGVhclF1ZXVlIikpfWFjdGl2ZVJlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0c31vdXRzdGFuZGluZ1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0cyt0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJnRoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKHZvaWQgMCl9cHJvbWlzZVdpdGhSZXRyaWVzKHQscixuKXt2YXIgaT1hPT5hLG89YT0+cj4wP3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsci0xLG4pOlByb21pc2UucmVqZWN0KGEpO3JldHVybiB0aGlzLl9wcm9taXNlRnJvbVVybCh0LG4pLnRoZW4oaSxvKX1fcHJvbWlzZUZyb21VcmwodCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz1WeGUoci5tZXRob2RUeXBlLHQsci53aXRoQ3JlZGVudGlhbHMsci5jb250ZW50VHlwZSk7by5zZXRSZXF1ZXN0SGVhZGVyKFBndCxKU09OLnN0cmluZ2lmeShjRSgpKSksby5vbmxvYWQ9ZnVuY3Rpb24oKXtvLnN0YXR1cz09PTIwMD9uKEpTT04ucGFyc2Uoby5yZXNwb25zZVRleHQpKTppKG5ldyB1RShvLHQpKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7aShuZXcgdUUobyx0KSl9LHIuYm9keT9vLnNlbmQoci5ib2R5KTpvLnNlbmQoKX0pfX07ZnVuY3Rpb24gVnhlKGUsdCxyLG4pe2xldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gaS5vcGVuKGUsdCksciYmKGkud2l0aENyZWRlbnRpYWxzPXIpLG4mJmkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixuKSxpfWZ1bmN0aW9uIFV4ZShlKXtsZXQgdD1uZXcgVXg7cmV0dXJuIGU/KHQubWV0aG9kVHlwZT1BbS5QT1NULHQuYm9keT1xeGUoZSksdCk6KHQubWV0aG9kVHlwZT1BbS5HRVQsdCl9ZnVuY3Rpb24gcXhlKGUpe2xldCB0PW5ldyBGb3JtRGF0YTtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSl7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uOltuXTtmb3IobGV0IG8gb2YgaSl0LmFwcGVuZChyLG8pfXJldHVybiB0fXZhciBrZ3Q9ImV4cGVyaW1lbnRhbFBsdWdpbiIsR3hlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksV3hlPVJndCgpO2Z1bmN0aW9uIFJndCgpe3JldHVybntlbnZpcm9ubWVudDooKT0+cXgoIi9lbnZpcm9ubWVudCIpLGV4cGVyaW1lbnRzOigpPT5xeCgiL2V4cGVyaW1lbnRzIikscGx1Z2luUm91dGU6KGUsdCxyKT0+cXgoYC9wbHVnaW4vJHtlfSR7dH1gLHIpLHBsdWdpblJvdXRlRm9yU3JjOihlLHQscj1uZXcgVVJMU2VhcmNoUGFyYW1zKT0+e2xldCBuPWNFKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiZyLmFwcGVuZChJZ3QsSlNPTi5zdHJpbmdpZnkobikpLHF4KGAvcGx1Z2luLyR7ZX0ke3R9YCxyKX0scGx1Z2luc0xpc3Rpbmc6KCk9PnF4KCIvcGx1Z2luc19saXN0aW5nIixOZ3Qoe1trZ3RdOkd4ZS5nZXRBbGwoa2d0KX0pKSxydW5zOigpPT5xeCgiL3J1bnMiKX19ZnVuY3Rpb24gX2UoKXtyZXR1cm4gV3hlfWZ1bmN0aW9uIHF4KGUsdD1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsZXQgcj0iZGF0YSIrZTtyZXR1cm4gU3RyaW5nKHQpJiYocis9KGUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iKStTdHJpbmcodCkpLHJ9ZnVuY3Rpb24gTmd0KGU9e30pe2xldCB0PU9iamVjdC5rZXlzKGUpLnNvcnQoKS5maWx0ZXIobj0+ZVtuXSkscj1uZXcgVVJMU2VhcmNoUGFyYW1zO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPWVbbl07KEFycmF5LmlzQXJyYXkoaSk/aTpbaV0pLmZvckVhY2goYT0+ci5hcHBlbmQobixhKSl9KSxyfXZhciB1OT1FZShPZSgpLDEpO3ZhciBOYTsoZnVuY3Rpb24oZSl7ZVtlLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyIsZVtlLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKE5hfHwoTmE9e30pKTtmdW5jdGlvbiBZeGUoZSx0KXtsZXQgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gobil7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTp0LG1ldGFkYXRhOnt0eXBlOk5hLlNFQVJDSF9SRVNVTFRTLHZhbGlkUmVnZXg6ISFyLHVuaXZlcnNhbFJlZ2V4OnQ9PT0iLioifSxpdGVtczpyP2UuZmlsdGVyKG49Pm4ubWF0Y2gocikpOltdfX1mdW5jdGlvbiBqeGUoZSx0PSIvIil7bGV0IHI9W10sbj17fTtyZXR1cm4gZS5mb3JFYWNoKGk9PntsZXQgbz1pLmluZGV4T2YodCksYT1vPj0wP2kuc2xpY2UoMCxvKTppO2lmKCFuW2FdKXtsZXQgcz17bmFtZTphLG1ldGFkYXRhOnt0eXBlOk5hLlBSRUZJWF9HUk9VUH0saXRlbXM6W119O25bYV09cyxyLnB1c2gocyl9blthXS5pdGVtcy5wdXNoKGkpfSkscn1mdW5jdGlvbiBYeGUoZSx0PSIiKXtsZXQgcj1bWXhlKGUsdCldLG49anhlKGUpO3JldHVybiBBcnJheSgpLmNvbmNhdChyLG4pfWZ1bmN0aW9uIGhFKGUsdCxyKXtsZXQgbj0kaShlKSxpPVh4ZShuLHIpLG89JHhlKHU5LnBpY2soZSx0KSk7cmV0dXJuIGkubWFwKCh7bmFtZTphLG1ldGFkYXRhOnMsaXRlbXM6bH0pPT4oe25hbWU6YSxtZXRhZGF0YTpzLGl0ZW1zOmwubWFwKGM9Pih7dGFnOmMscnVuczooby5nZXQoYyl8fFtdKS5zbGljZSgpfSkpfSkpfWZ1bmN0aW9uICR4ZShlKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntlW3JdLmZvckVhY2gobj0+e2xldCBpPXQuZ2V0KG4pfHxbXTtpLnB1c2gociksdC5zZXQobixpKX0pfSksdH1mdW5jdGlvbiBLeGUoZSx0KXtsZXQgcj14aChlLnRhZyx0LnRhZyk7cmV0dXJuIHIhPTA/cjp4aChlLnJ1bix0LnJ1bil9ZnVuY3Rpb24gUWwoZSx0LHIpe2xldCBuPWhFKGUsdCxyKTtmdW5jdGlvbiBpKG8pe2xldCBhPXU5LmZsYXR0ZW4oby5pdGVtcy5tYXAoKHt0YWc6cyxydW5zOmx9KT0+bC5tYXAoYz0+KHt0YWc6cyxydW46Y30pKSkpO3JldHVybiBhLnNvcnQoS3hlKSx7bmFtZTpvLm5hbWUsbWV0YWRhdGE6by5tZXRhZGF0YSxpdGVtczphfX1yZXR1cm4gbi5tYXAoaSl9dmFyIGNXPXt9O0tzKGNXLHtJcm9uUmVzaXphYmxlQmVoYXZpb3I6KCk9PkpzfSk7dmFyIFp4ZT17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsbGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwfSxGZ3Q9e2F0dGFjaGVkOiEwLGRldGFjaGVkOiEwLHJlYWR5OiEwLGNyZWF0ZWQ6ITAsYmVmb3JlUmVnaXN0ZXI6ITAscmVnaXN0ZXJlZDohMCxhdHRyaWJ1dGVDaGFuZ2VkOiEwLGJlaGF2aW9yczohMCxfbm9BY2Nlc3NvcnM6ITB9LEp4ZT1PYmplY3QuYXNzaWduKHtsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITAscHJvcGVydGllczohMCxvYnNlcnZlcnM6ITB9LEZndCk7ZnVuY3Rpb24gUXhlKGUsdCxyKXtsZXQgbj1lLl9ub0FjY2Vzc29ycyxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2lmKCEoYSBpbiByKSlpZihuKXRbYV09ZVthXTtlbHNle2xldCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKTtzJiYocy5jb25maWd1cmFibGU9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsYSxzKSl9fX1mdW5jdGlvbiBCZ3QoZSx0KXtyZXR1cm4gVWd0KHt9LEd0KHQpLGUpfWZ1bmN0aW9uIHRiZShlLHQscil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspSGd0KGUsdFtuXSxyLEp4ZSl9ZnVuY3Rpb24gSGd0KGUsdCxyLG4pe1F4ZSh0LGUsbik7Zm9yKGxldCBpIGluIFp4ZSl0W2ldJiYocltpXT1yW2ldfHxbXSxyW2ldLnB1c2godFtpXSkpfWZ1bmN0aW9uIFZndChlLHQscil7dD10fHxbXTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpP0FycmF5LmlzQXJyYXkoaSk/Vmd0KGksdCk6dC5pbmRleE9mKGkpPDAmJighcnx8ci5pbmRleE9mKGkpPDApJiZ0LnVuc2hpZnQoaSk6Y29uc29sZS53YXJuKCJiZWhhdmlvciBpcyBudWxsLCBjaGVjayBmb3IgbWlzc2luZyBvciA0MDQgaW1wb3J0Iil9cmV0dXJuIHR9ZnVuY3Rpb24gT2d0KGUsdCl7Zm9yKGxldCByIGluIHQpe2xldCBuPWVbcl0saT10W3JdOyEoInZhbHVlImluIGkpJiZuJiYidmFsdWUiaW4gbj9lW3JdPU9iamVjdC5hc3NpZ24oe3ZhbHVlOm4udmFsdWV9LGkpOmVbcl09aX19dmFyIHpndD1HdChIVE1MRWxlbWVudCk7ZnVuY3Rpb24gVWd0KGUsdCxyKXtsZXQgbixpPXt9O2NsYXNzIG8gZXh0ZW5kcyB0e3N0YXRpYyBfZmluYWxpemVDbGFzcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImdlbmVyYXRlZEZyb20iLHRoaXMpKSl0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7ZWxzZXtpZihuKWZvcihsZXQgbD0wLGM7bDxuLmxlbmd0aDtsKyspYz1uW2xdLGMucHJvcGVydGllcyYmdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKGMucHJvcGVydGllcyksYy5vYnNlcnZlcnMmJnRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGMub2JzZXJ2ZXJzLGMucHJvcGVydGllcyk7ZS5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoZS5wcm9wZXJ0aWVzKSxlLm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoZS5vYnNlcnZlcnMsZS5wcm9wZXJ0aWVzKSx0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKX19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7bGV0IGw9e307aWYobilmb3IobGV0IGM9MDtjPG4ubGVuZ3RoO2MrKylPZ3QobCxuW2NdLnByb3BlcnRpZXMpO3JldHVybiBPZ3QobCxlLnByb3BlcnRpZXMpLGx9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtsZXQgbD1bXTtpZihuKWZvcihsZXQgYz0wLHU7YzxuLmxlbmd0aDtjKyspdT1uW2NdLHUub2JzZXJ2ZXJzJiYobD1sLmNvbmNhdCh1Lm9ic2VydmVycykpO3JldHVybiBlLm9ic2VydmVycyYmKGw9bC5jb25jYXQoZS5vYnNlcnZlcnMpKSxsfWNyZWF0ZWQoKXtzdXBlci5jcmVhdGVkKCk7bGV0IGw9aS5jcmVhdGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfV9yZWdpc3RlcmVkKCl7bGV0IGw9by5wcm90b3R5cGU7aWYoIWwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19oYXNSZWdpc3RlckZpbmlzaGVkIixsKSkpe2wuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwLHN1cGVyLl9yZWdpc3RlcmVkKCkscHAmJmEobCk7bGV0IGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHU9aS5iZWZvcmVSZWdpc3RlcjtpZih1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKTtpZih1PWkucmVnaXN0ZXJlZCx1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKX19X2FwcGx5TGlzdGVuZXJzKCl7c3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7bGV0IGw9aS5saXN0ZW5lcnM7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpZih1KWZvcihsZXQgaCBpbiB1KXRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcyxoLHVbaF0pfX1fZW5zdXJlQXR0cmlidXRlcygpe2xldCBsPWkuaG9zdEF0dHJpYnV0ZXM7aWYobClmb3IobGV0IGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7bGV0IHU9bFtjXTtmb3IobGV0IGggaW4gdSl0aGlzLl9lbnN1cmVBdHRyaWJ1dGUoaCx1W2hdKX1zdXBlci5fZW5zdXJlQXR0cmlidXRlcygpfXJlYWR5KCl7c3VwZXIucmVhZHkoKTtsZXQgbD1pLnJlYWR5O2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dGFjaGVkKCl7c3VwZXIuYXR0YWNoZWQoKTtsZXQgbD1pLmF0dGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWRldGFjaGVkKCl7c3VwZXIuZGV0YWNoZWQoKTtsZXQgbD1pLmRldGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dHJpYnV0ZUNoYW5nZWQobCxjLHUpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTtsZXQgaD1pLmF0dHJpYnV0ZUNoYW5nZWQ7aWYoaClmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyloW2ZdLmNhbGwodGhpcyxsLGMsdSl9fWlmKHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtyXSk7bGV0IHM9dC5wcm90b3R5cGUuYmVoYXZpb3JzO249Vmd0KHIsbnVsbCxzKSxvLnByb3RvdHlwZS5iZWhhdmlvcnM9cz9zLmNvbmNhdChyKTpufWxldCBhPXM9PntuJiZ0YmUocyxuLGkpLEhndChzLGUsaSxGZ3QpfTtyZXR1cm4gcHB8fGEoby5wcm90b3R5cGUpLG8uZ2VuZXJhdGVkRnJvbT1lLG99dmFyIGg5PWZ1bmN0aW9uKGUsdCl7ZXx8Y29uc29sZS53YXJuKCJQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCIpO2xldCByPXQ/dCh6Z3QpOnpndDtyZXR1cm4gcj1VZ3QoZSxyLGUuYmVoYXZpb3JzKSxyLmlzPXIucHJvdG90eXBlLmlzPWUuaXMscn07dmFyIFl0PWZ1bmN0aW9uKGUpe2xldCB0O3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj90PWU6dD1ZdC5DbGFzcyhlKSxlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHQucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz1lLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyksY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQuaXMsdCksdH07WXQuQ2xhc3M9aDk7ZnVuY3Rpb24gZVcoZSx0LHIsbixpKXtsZXQgbztpJiYobz10eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsLG8mJihuPWUuX19kYXRhVGVtcFt0XSkpO2xldCBhPW4hPT1yJiYobj09PW58fHI9PT1yKTtyZXR1cm4gbyYmYSYmKGUuX19kYXRhVGVtcFt0XT1yKSxhfXZhciBHeD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gZVcodGhpcyxuLGksbywhMCl9fXJldHVybiB0fSksZjk9Um4oZT0+e2NsYXNzIHQgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdXRhYmxlRGF0YTpCb29sZWFufX1fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLG8pe3JldHVybiBlVyh0aGlzLG4saSxvLHRoaXMubXV0YWJsZURhdGEpfX1yZXR1cm4gdH0pO0d4Ll9tdXRhYmxlUHJvcGVydHlDaGFuZ2U9ZVc7dmFyIHJXPW51bGw7ZnVuY3Rpb24gblcoKXtyZXR1cm4gcld9blcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuVyx3cml0YWJsZTohMH19KTt2YXIgR2d0PXVfKG5XKSxlYmU9R3goR2d0KTtmdW5jdGlvbiByYmUoZSx0KXtyVz1lLE9iamVjdC5zZXRQcm90b3R5cGVPZihlLHQucHJvdG90eXBlKSxuZXcgdCxyVz1udWxsfXZhciBuYmU9dV8oY2xhc3N7fSk7ZnVuY3Rpb24gaVcoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtpZihCb29sZWFuKGUpIT1Cb29sZWFuKG4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fKSlpZihuLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpZT8obi5fX3BvbHltZXJUZXh0Q29udGVudF9fPW4udGV4dENvbnRlbnQsbi50ZXh0Q29udGVudD0iIik6bi50ZXh0Q29udGVudD1uLl9fcG9seW1lclRleHRDb250ZW50X187ZWxzZSBpZihuLmxvY2FsTmFtZT09PSJzbG90IilpZihlKW4uX19wb2x5bWVyUmVwbGFjZWRfXz1kb2N1bWVudC5jcmVhdGVDb21tZW50KCJoaWRkZW4tc2xvdCIpLHVlKHVlKG4pLnBhcmVudE5vZGUpLnJlcGxhY2VDaGlsZChuLl9fcG9seW1lclJlcGxhY2VkX18sbik7ZWxzZXtsZXQgaT1uLl9fcG9seW1lclJlcGxhY2VkX187aSYmdWUodWUoaSkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKG4saSl9ZWxzZSBuLnN0eWxlJiYoZT8obi5fX3BvbHltZXJEaXNwbGF5X189bi5zdHlsZS5kaXNwbGF5LG4uc3R5bGUuZGlzcGxheT0ibm9uZSIpOm4uc3R5bGUuZGlzcGxheT1uLl9fcG9seW1lckRpc3BsYXlfXyk7bi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189ZSxuLl9zaG93SGlkZUNoaWxkcmVuJiZuLl9zaG93SGlkZUNoaWxkcmVuKGUpfX12YXIgYmg9Y2xhc3MgZXh0ZW5kcyBuYmV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9jb25maWd1cmVQcm9wZXJ0aWVzKHQpLHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX19kYXRhSG9zdCk7bGV0IHI9W107dGhpcy5jaGlsZHJlbj1yO2ZvcihsZXQgaT10aGlzLnJvb3QuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylyLnB1c2goaSksaS5fX3RlbXBsYXRpemVJbnN0YW5jZT10aGlzO3RoaXMuX190ZW1wbGF0aXplT3duZXImJnRoaXMuX190ZW1wbGF0aXplT3duZXIuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCEwKTtsZXQgbj10aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7KHQmJm4uaW5zdGFuY2VQcm9wc3x8IW4uaW5zdGFuY2VQcm9wcykmJnRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX1fY29uZmlndXJlUHJvcGVydGllcyh0KXtpZih0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKWZvcihsZXQgbiBpbiB0aGlzLl9faG9zdFByb3BzKXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShuLHRoaXMuX19kYXRhSG9zdFsiX2hvc3RfIituXSk7Zm9yKGxldCBuIGluIHQpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sdFtuXSl9Zm9yd2FyZEhvc3RQcm9wKHQscil7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsciwhMSwhMCkmJnRoaXMuX19kYXRhSG9zdC5fZW5xdWV1ZUNsaWVudCh0aGlzKX1fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil7aWYodGhpcy5fbWV0aG9kSG9zdCYmdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLnBhcmVudE1vZGVsKXRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxyLGk9PntpLm1vZGVsPXRoaXMsbihpKX0pO2Vsc2V7bGV0IGk9dGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7aSYmaS5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil9fV9zaG93SGlkZUNoaWxkcmVuKHQpe2lXKHQsdGhpcy5jaGlsZHJlbil9X3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKXt0Ll9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdC5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnI9PSJ0ZXh0Q29udGVudCI/dC5fX3BvbHltZXJUZXh0Q29udGVudF9fPW46c3VwZXIuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKX1nZXQgcGFyZW50TW9kZWwoKXtsZXQgdD10aGlzLl9fcGFyZW50TW9kZWw7aWYoIXQpe2xldCByO3Q9dGhpcztkbyB0PXQuX19kYXRhSG9zdC5fX2RhdGFIb3N0O3doaWxlKChyPXQuX190ZW1wbGF0aXplT3B0aW9ucykmJiFyLnBhcmVudE1vZGVsKTt0aGlzLl9fcGFyZW50TW9kZWw9dH1yZXR1cm4gdH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiEwfX07YmgucHJvdG90eXBlLl9fZGF0YUhvc3Q7YmgucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM7YmgucHJvdG90eXBlLl9tZXRob2RIb3N0O2JoLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lcjtiaC5wcm90b3R5cGUuX19ob3N0UHJvcHM7dmFyIGliZT1HeChiaCk7ZnVuY3Rpb24gcWd0KGUpe2xldCB0PWUuX19kYXRhSG9zdDtyZXR1cm4gdCYmdC5fbWV0aG9kSG9zdHx8dH1mdW5jdGlvbiBvYmUoZSx0LHIpe2xldCBuPXIubXV0YWJsZURhdGE/aWJlOmJoO3RjLm1peGluJiYobj10Yy5taXhpbihuKSk7bGV0IGk9Y2xhc3MgZXh0ZW5kcyBue307cmV0dXJuIGkucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM9cixpLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGUpLGxiZShpLGUsdCxyKSxpfWZ1bmN0aW9uIGFiZShlLHQscixuKXtsZXQgaT1yLmZvcndhcmRIb3N0UHJvcDtpZihpJiZ0Lmhhc0hvc3RQcm9wcyl7bGV0IG89ZS5sb2NhbE5hbWU9PSJ0ZW1wbGF0ZSIsYT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzO2lmKCFhKXtpZihvKXtsZXQgbD1yLm11dGFibGVEYXRhP2ViZTpHZ3Q7Y2xhc3MgYyBleHRlbmRzIGx7fWE9dC50ZW1wbGF0aXplVGVtcGxhdGVDbGFzcz1jfWVsc2V7bGV0IGw9ZS5jb25zdHJ1Y3RvcjtjbGFzcyBjIGV4dGVuZHMgbHt9YT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWN9bGV0IHM9dC5ob3N0UHJvcHM7Zm9yKGxldCBsIGluIHMpYS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCJfaG9zdF8iK2wsYS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSx7Zm46c2JlKGwsaSl9KSxhLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoIl9ob3N0XyIrbCk7TEkmJm4mJmhiZSh0LHIsbil9aWYoZS5fX2RhdGFQcm90byYmT2JqZWN0LmFzc2lnbihlLl9fZGF0YSxlLl9fZGF0YVByb3RvKSxvKXJiZShlLGEpLGUuX19kYXRhVGVtcD17fSxlLl9fZGF0YVBlbmRpbmc9bnVsbCxlLl9fZGF0YU9sZD1udWxsLGUuX2VuYWJsZVByb3BlcnRpZXMoKTtlbHNle09iamVjdC5zZXRQcm90b3R5cGVPZihlLGEucHJvdG90eXBlKTtsZXQgcz10Lmhvc3RQcm9wcztmb3IobGV0IGwgaW4gcylpZihsPSJfaG9zdF8iK2wsbCBpbiBlKXtsZXQgYz1lW2xdO2RlbGV0ZSBlW2xdLGUuX19kYXRhW2xdPWN9fX19ZnVuY3Rpb24gc2JlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt0LmNhbGwobi5fX3RlbXBsYXRpemVPd25lcixpLnN1YnN0cmluZyg2KSxvW2ldKX19ZnVuY3Rpb24gbGJlKGUsdCxyLG4pe2xldCBpPXIuaG9zdFByb3BzfHx7fTtmb3IobGV0IG8gaW4gbi5pbnN0YW5jZVByb3BzKXtkZWxldGUgaVtvXTtsZXQgYT1uLm5vdGlmeUluc3RhbmNlUHJvcDthJiZlLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QobyxlLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpjYmUobyxhKX0pfWlmKG4uZm9yd2FyZEhvc3RQcm9wJiZ0Ll9fZGF0YUhvc3QpZm9yKGxldCBvIGluIGkpci5oYXNIb3N0UHJvcHN8fChyLmhhc0hvc3RQcm9wcz0hMCksZS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KG8sZS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46dWJlKCl9KX1mdW5jdGlvbiBjYmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3QuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLG4saSxvW2ldKX19ZnVuY3Rpb24gdWJlKCl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt0Ll9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgiX2hvc3RfIityLG5bcl0sITAsITApfX1mdW5jdGlvbiB0YyhlLHQscil7aWYoaXUmJiFxZ3QoZSkpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtpZihyPXJ8fHt9LGUuX190ZW1wbGF0aXplT3duZXIpdGhyb3cgbmV3IEVycm9yKCJBIDx0ZW1wbGF0ZT4gY2FuIG9ubHkgYmUgdGVtcGxhdGl6ZWQgb25jZSIpO2UuX190ZW1wbGF0aXplT3duZXI9dDtsZXQgaT0odD90LmNvbnN0cnVjdG9yOmJoKS5fcGFyc2VUZW1wbGF0ZShlKSxvPWkudGVtcGxhdGl6ZUluc3RhbmNlQ2xhc3M7b3x8KG89b2JlKGUsaSxyKSxpLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzPW8pO2xldCBhPXFndChlKTthYmUoZSxpLHIsYSk7bGV0IHM9Y2xhc3MgZXh0ZW5kcyBve307cmV0dXJuIHMucHJvdG90eXBlLl9tZXRob2RIb3N0PWEscy5wcm90b3R5cGUuX19kYXRhSG9zdD1lLHMucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyPXQscy5wcm90b3R5cGUuX19ob3N0UHJvcHM9aS5ob3N0UHJvcHMscz1zLHN9ZnVuY3Rpb24gaGJlKGUsdCxyKXtsZXQgbj1yLmNvbnN0cnVjdG9yLl9wcm9wZXJ0aWVzLHtwcm9wZXJ0eUVmZmVjdHM6aX09ZSx7aW5zdGFuY2VQcm9wczpvfT10O2ZvcihsZXQgYSBpbiBpKWlmKCFuW2FdJiYhKG8mJm9bYV0pKXtsZXQgcz1pW2FdO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXR7cGFydDpjfT1zW2xdLmluZm87aWYoIShjLnNpZ25hdHVyZSYmYy5zaWduYXR1cmUuc3RhdGljKSl7Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHthfScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApO2JyZWFrfX19fWZ1bmN0aW9uIHA5KGUsdCl7bGV0IHI7Zm9yKDt0OylpZihyPXQuX19kYXRhSG9zdD90OnQuX190ZW1wbGF0aXplSW5zdGFuY2UpaWYoci5fX2RhdGFIb3N0IT1lKXQ9ci5fX2RhdGFIb3N0O2Vsc2UgcmV0dXJuIHI7ZWxzZSB0PXVlKHQpLnBhcmVudE5vZGU7cmV0dXJuIG51bGx9dmFyIFdndD17dGVtcGxhdGl6ZShlLHQpe3RoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGU9ZSx0aGlzLmN0b3I9dGMoZSx0aGlzLHttdXRhYmxlRGF0YTpCb29sZWFuKHQpLHBhcmVudE1vZGVsOnRoaXMuX3BhcmVudE1vZGVsLGluc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxmb3J3YXJkSG9zdFByb3A6dGhpcy5fZm9yd2FyZEhvc3RQcm9wVjIsbm90aWZ5SW5zdGFuY2VQcm9wOnRoaXMuX25vdGlmeUluc3RhbmNlUHJvcFYyfSl9LHN0YW1wKGUpe3JldHVybiBuZXcgdGhpcy5jdG9yKGUpfSxtb2RlbEZvckVsZW1lbnQoZSl7cmV0dXJuIHA5KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsZSl9fTt2YXIgWWd0PSExO2Z1bmN0aW9uIFd4KCl7aWYocHAmJiFjXyl7aWYoIVlndCl7WWd0PSEwO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS50ZXh0Q29udGVudD0iZG9tLWJpbmQsZG9tLWlmLGRvbS1yZXBlYXR7ZGlzcGxheTpub25lO30iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9cmV0dXJuITB9cmV0dXJuITF9dmFyIGZiZT15aChmOSh1XyhIVE1MRWxlbWVudCkpKSxvVz1jbGFzcyBleHRlbmRzIGZiZXtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsibXV0YWJsZS1kYXRhIl19Y29uc3RydWN0b3IoKXtpZihzdXBlcigpLGl1KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkIik7dGhpcy5yb290PW51bGwsdGhpcy4kPW51bGwsdGhpcy5fX2NoaWxkcmVuPW51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3RoaXMubXV0YWJsZURhdGE9ITB9Y29ubmVjdGVkQ2FsbGJhY2soKXtXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW5kZXIoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19yZW1vdmVDaGlsZHJlbigpfV9faW5zZXJ0Q2hpbGRyZW4oKXt1ZSh1ZSh0aGlzKS5wYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUodGhpcy5yb290LHRoaXMpfV9fcmVtb3ZlQ2hpbGRyZW4oKXtpZih0aGlzLl9fY2hpbGRyZW4pZm9yKGxldCB0PTA7dDx0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoO3QrKyl0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fX2NoaWxkcmVuW3RdKX1yZW5kZXIoKXtsZXQgdDtpZighdGhpcy5fX2NoaWxkcmVuKXtpZih0PXR8fHRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSwhdCl7bGV0IHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih0PXRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSx0KXIuZGlzY29ubmVjdCgpLHRoaXMucmVuZGVyKCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImRvbS1iaW5kIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7ci5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pO3JldHVybn10aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0KSx0aGlzLiQ9dGhpcy5yb290LiQsdGhpcy5fX2NoaWxkcmVuPVtdO2ZvcihsZXQgcj10aGlzLnJvb3QuZmlyc3RDaGlsZDtyO3I9ci5uZXh0U2libGluZyl0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF09cjt0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9dGhpcy5fX2luc2VydENoaWxkcmVuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoImRvbS1iaW5kIixvVyk7dmFyIHBiZT1mOShtdCksZDk9Y2xhc3MgZXh0ZW5kcyBwYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJkb20tcmVwZWF0In1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxpdGVtc0luZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtc0luZGV4In0sc29ydDp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19zb3J0Q2hhbmdlZCJ9LGZpbHRlcjp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19maWx0ZXJDaGFuZ2VkIn0sb2JzZXJ2ZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9fb2JzZXJ2ZUNoYW5nZWQifSxkZWxheTpOdW1iZXIscmVuZGVyZWRJdGVtQ291bnQ6e3R5cGU6TnVtYmVyLG5vdGlmeTohVU0scmVhZE9ubHk6ITB9LGluaXRpYWxDb3VudDp7dHlwZTpOdW1iZXJ9LHRhcmdldEZyYW1lcmF0ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKSJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufSxyZXVzZUNodW5rZWRJbnN0YW5jZXM6e3R5cGU6Qm9vbGVhbn19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2VzPVtdLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sdGhpcy5fX2NodW5rQ291bnQ9bnVsbCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPW51bGwsdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9ITEsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9ITEsdGhpcy5fX2NodW5raW5nSWQ9MCx0aGlzLl9fc29ydEZuPW51bGwsdGhpcy5fX2ZpbHRlckZuPW51bGwsdGhpcy5fX29ic2VydmVQYXRocz1udWxsLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2lzRGV0YWNoZWQ9ITAsdGhpcy50ZW1wbGF0ZT1udWxsLHRoaXMuX3RlbXBsYXRlSW5mb31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX2lzRGV0YWNoZWQ9ITA7Zm9yKGxldCB0PTA7dDx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDt0KyspdGhpcy5fX2RldGFjaEluc3RhbmNlKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5fX2lzRGV0YWNoZWQpe3RoaXMuX19pc0RldGFjaGVkPSExO2xldCB0PXVlKHVlKHRoaXMpLnBhcmVudE5vZGUpO2ZvcihsZXQgcj0wO3I8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7cisrKXRoaXMuX19hdHRhY2hJbnN0YW5jZShyLHQpfX1fX2Vuc3VyZVRlbXBsYXRpemVkKCl7aWYoIXRoaXMuX19jdG9yKXtsZXQgdD10aGlzLHI9dGhpcy50ZW1wbGF0ZT10Ll90ZW1wbGF0ZUluZm8/dDp0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIXIpe2xldCBpPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgpPT57aWYodGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKWkuZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLXJlcGVhdCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKX0pO3JldHVybiBpLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksITF9bGV0IG49e307blt0aGlzLmFzXT0hMCxuW3RoaXMuaW5kZXhBc109ITAsblt0aGlzLml0ZW1zSW5kZXhBc109ITAsdGhpcy5fX2N0b3I9dGMocix0aGlzLHttdXRhYmxlRGF0YTp0aGlzLm11dGFibGVEYXRhLHBhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6bixmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24oaSxvKXtsZXQgYT10aGlzLl9faW5zdGFuY2VzO2ZvcihsZXQgcz0wLGw7czxhLmxlbmd0aCYmKGw9YVtzXSk7cysrKWwuZm9yd2FyZEhvc3RQcm9wKGksbyl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbihpLG8sYSl7aWYoT0kodGhpcy5hcyxvKSl7bGV0IHM9aVt0aGlzLml0ZW1zSW5kZXhBc107bz09dGhpcy5hcyYmKHRoaXMuaXRlbXNbc109YSk7bGV0IGw9ZHAodGhpcy5hcyxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7c31gLG8pO3RoaXMubm90aWZ5UGF0aChsLGEpfX19KX1yZXR1cm4hMH1fX2dldE1ldGhvZEhvc3QoKXtyZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0fHx0aGlzLl9fZGF0YUhvc3R9X19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7bGV0IHI9dCxuPXRoaXMuX19nZXRNZXRob2RIb3N0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5bcl0uYXBwbHkobixhcmd1bWVudHMpfX1yZXR1cm4gdH1fX3NvcnRDaGFuZ2VkKHQpe3RoaXMuX19zb3J0Rm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fZmlsdGVyQ2hhbmdlZCh0KXt0aGlzLl9fZmlsdGVyRm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fY29tcHV0ZUZyYW1lVGltZSh0KXtyZXR1cm4gTWF0aC5jZWlsKDFlMy90KX1fX29ic2VydmVDaGFuZ2VkKCl7dGhpcy5fX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCIuKiIsIi4iKS5zcGxpdCgiICIpfV9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KXtpZih0aGlzLl9fc29ydEZufHx0aGlzLl9fZmlsdGVyRm4pe2lmKCF0KXRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpO2Vsc2UgaWYodGhpcy5fX29ic2VydmVQYXRocyl7bGV0IHI9dGhpcy5fX29ic2VydmVQYXRocztmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl0LmluZGV4T2YocltuXSk9PT0wJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX19fV9faXRlbXNDaGFuZ2VkKHQpe3RoaXMuaXRlbXMmJiFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpJiZjb25zb2xlLndhcm4oImRvbS1yZXBlYXQgZXhwZWN0ZWQgYXJyYXkgZm9yIGBpdGVtc2AsIGZvdW5kIix0aGlzLml0ZW1zKSx0aGlzLl9faGFuZGxlSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfHwodC5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMCksdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpKX1fX2RlYm91bmNlUmVuZGVyKHQscj0wKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIscj4wP21vLmFmdGVyKHIpOmxpLHQuYmluZCh0aGlzKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9cmVuZGVyKCl7dGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpLGNpKCl9X19yZW5kZXIoKXtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRpemVkKCkpcmV0dXJuO2xldCB0PXRoaXMuaXRlbXN8fFtdLHI9dGhpcy5fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KSxuPXRoaXMuX19jYWxjdWxhdGVMaW1pdChyLmxlbmd0aCk7dGhpcy5fX3VwZGF0ZUluc3RhbmNlcyh0LG4sciksdGhpcy5pbml0aWFsQ291bnQmJih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rfHx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZykmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fY2h1bmtpbmdJZCksdGhpcy5fX2NodW5raW5nSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9fY29udGludWVDaHVua2luZygpKSksdGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5fX2luc3RhbmNlcy5sZW5ndGgpLCghVU18fHRoaXMubm90aWZ5RG9tQ2hhbmdlKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9X19zb3J0QW5kRmlsdGVySXRlbXModCl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyW25dPW47cmV0dXJuIHRoaXMuX19maWx0ZXJGbiYmKHI9ci5maWx0ZXIoKG4saSxvKT0+dGhpcy5fX2ZpbHRlckZuKHRbbl0saSxvKSkpLHRoaXMuX19zb3J0Rm4mJnIuc29ydCgobixpKT0+dGhpcy5fX3NvcnRGbih0W25dLHRbaV0pKSxyfV9fY2FsY3VsYXRlTGltaXQodCl7bGV0IHI9dCxuPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2lmKHRoaXMuaW5pdGlhbENvdW50KXtsZXQgaTshdGhpcy5fX2NodW5rQ291bnR8fHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZCYmIXRoaXMucmV1c2VDaHVua2VkSW5zdGFuY2VzPyhyPU1hdGgubWluKHQsdGhpcy5pbml0aWFsQ291bnQpLGk9TWF0aC5tYXgoci1uLDApLHRoaXMuX19jaHVua0NvdW50PWl8fDEpOihpPU1hdGgubWluKE1hdGgubWF4KHQtbiwwKSx0aGlzLl9fY2h1bmtDb3VudCkscj1NYXRoLm1pbihuK2ksdCkpLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9aT09PXRoaXMuX19jaHVua0NvdW50LHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPXI8dCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpfXJldHVybiB0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEscn1fX2NvbnRpbnVlQ2h1bmtpbmcoKXtpZih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rKXtsZXQgdD1wZXJmb3JtYW5jZS5ub3coKS10aGlzLl9fcmVuZGVyU3RhcnRUaW1lLHI9dGhpcy5fdGFyZ2V0RnJhbWVUaW1lL3Q7dGhpcy5fX2NodW5rQ291bnQ9TWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCpyKXx8MX10aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fdXBkYXRlSW5zdGFuY2VzKHQscixuKXtsZXQgaT10aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sbztmb3Iobz0wO288cjtvKyspe2xldCBhPXRoaXMuX19pbnN0YW5jZXNbb10scz1uW29dLGw9dFtzXTtpW3NdPW8sYT8oYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsbCksYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaW5kZXhBcyxvKSxhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pdGVtc0luZGV4QXMscyksYS5fZmx1c2hQcm9wZXJ0aWVzKCkpOnRoaXMuX19pbnNlcnRJbnN0YW5jZShsLG8scyl9Zm9yKGxldCBhPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoLTE7YT49bzthLS0pdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGEpfV9fZGV0YWNoSW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2luc3RhbmNlc1t0XSxuPXVlKHIucm9vdCk7Zm9yKGxldCBpPTA7aTxyLmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCBvPXIuY2hpbGRyZW5baV07bi5hcHBlbmRDaGlsZChvKX1yZXR1cm4gcn1fX2F0dGFjaEluc3RhbmNlKHQscil7bGV0IG49dGhpcy5fX2luc3RhbmNlc1t0XTtyLmluc2VydEJlZm9yZShuLnJvb3QsdGhpcyl9X19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KXt0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCksdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UodCwxKX1fX3N0YW1wSW5zdGFuY2UodCxyLG4pe2xldCBpPXt9O3JldHVybiBpW3RoaXMuYXNdPXQsaVt0aGlzLmluZGV4QXNdPXIsaVt0aGlzLml0ZW1zSW5kZXhBc109bixuZXcgdGhpcy5fX2N0b3IoaSl9X19pbnNlcnRJbnN0YW5jZSh0LHIsbil7bGV0IGk9dGhpcy5fX3N0YW1wSW5zdGFuY2UodCxyLG4pLG89dGhpcy5fX2luc3RhbmNlc1tyKzFdLGE9bz9vLmNoaWxkcmVuWzBdOnRoaXM7cmV0dXJuIHVlKHVlKHRoaXMpLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZShpLnJvb3QsYSksdGhpcy5fX2luc3RhbmNlc1tyXT1pLGl9X3Nob3dIaWRlQ2hpbGRyZW4odCl7Zm9yKGxldCByPTA7cjx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtyKyspdGhpcy5fX2luc3RhbmNlc1tyXS5fc2hvd0hpZGVDaGlsZHJlbih0KX1fX2hhbmRsZUl0ZW1QYXRoKHQscil7bGV0IG49dC5zbGljZSg2KSxpPW4uaW5kZXhPZigiLiIpLG89aTwwP246bi5zdWJzdHJpbmcoMCxpKTtpZihvPT1wYXJzZUludChvLDEwKSl7bGV0IGE9aTwwPyIiOm4uc3Vic3RyaW5nKGkrMSk7dGhpcy5fX2hhbmRsZU9ic2VydmVkUGF0aHMoYSk7bGV0IHM9dGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W29dLGw9dGhpcy5fX2luc3RhbmNlc1tzXTtpZihsKXtsZXQgYz10aGlzLmFzKyhhPyIuIithOiIiKTtsLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYyxyLCExLCEwKSxsLl9mbHVzaFByb3BlcnRpZXMoKX1yZXR1cm4hMH19aXRlbUZvckVsZW1lbnQodCl7bGV0IHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIHImJnJbdGhpcy5hc119aW5kZXhGb3JFbGVtZW50KHQpe2xldCByPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpO3JldHVybiByJiZyW3RoaXMuaW5kZXhBc119bW9kZWxGb3JFbGVtZW50KHQpe3JldHVybiBwOSh0aGlzLnRlbXBsYXRlLHQpfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGQ5LmlzLGQ5KTt2YXIgbTk9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1pZiJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0scmVzdGFtcDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX2xhc3RJZj0hMSx0aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz0hMSx0aGlzLl9fdGVtcGxhdGUsdGhpcy5fdGVtcGxhdGVJbmZvfV9fZGVib3VuY2VSZW5kZXIoKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIsbGksKCk9PnRoaXMuX19yZW5kZXIoKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO2xldCB0PXVlKHRoaXMpLnBhcmVudE5vZGU7KCF0fHx0Lm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJiF1ZSh0KS5ob3N0KSYmdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksV3goKXx8KHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaWYmJnRoaXMuX19kZWJvdW5jZVJlbmRlcigpfV9fZW5zdXJlVGVtcGxhdGUoKXtpZighdGhpcy5fX3RlbXBsYXRlKXtsZXQgdD10aGlzLHI9dC5fdGVtcGxhdGVJbmZvP3Q6dWUodCkucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighcil7bGV0IG49bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih1ZSh0aGlzKS5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKW4uZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLWlmIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7cmV0dXJuIG4ub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX10aGlzLl9fdGVtcGxhdGU9cn1yZXR1cm4hMH1fX2Vuc3VyZUluc3RhbmNlKCl7bGV0IHQ9dWUodGhpcykucGFyZW50Tm9kZTtpZih0aGlzLl9faGFzSW5zdGFuY2UoKSl7bGV0IHI9dGhpcy5fX2dldEluc3RhbmNlTm9kZXMoKTtpZihyJiZyLmxlbmd0aCYmdWUodGhpcykucHJldmlvdXNTaWJsaW5nIT09cltyLmxlbmd0aC0xXSlmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKyl1ZSh0KS5pbnNlcnRCZWZvcmUobyx0aGlzKX1lbHNle2lmKCF0fHwhdGhpcy5fX2Vuc3VyZVRlbXBsYXRlKCkpcmV0dXJuITE7dGhpcy5fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpfXJldHVybiEwfXJlbmRlcigpe2NpKCl9X19yZW5kZXIoKXtpZih0aGlzLmlmKXtpZighdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpcmV0dXJufWVsc2UgdGhpcy5yZXN0YW1wJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSwoIVVNfHx0aGlzLm5vdGlmeURvbUNoYW5nZSkmJnRoaXMuaWYhPXRoaXMuX2xhc3RJZiYmKHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuX2xhc3RJZj10aGlzLmlmKX1fX2hhc0luc3RhbmNlKCl7fV9fZ2V0SW5zdGFuY2VOb2Rlcygpe31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe31fX3RlYXJkb3duSW5zdGFuY2UoKXt9X3Nob3dIaWRlQ2hpbGRyZW4oKXt9fSxhVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzfV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2RhdGFIb3N0fHx0aGlzO2lmKGl1JiYhdGhpcy5fX2RhdGFIb3N0KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkIik7bGV0IG49ci5fYmluZFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSwhMCk7bi5ydW5FZmZlY3RzPShpLG8sYSk9PntsZXQgcz10aGlzLl9fc3luY0luZm87aWYodGhpcy5pZilzJiYodGhpcy5fX3N5bmNJbmZvPW51bGwsdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLG89T2JqZWN0LmFzc2lnbihzLmNoYW5nZWRQcm9wcyxvKSksaShvLGEpO2Vsc2UgaWYodGhpcy5fX2luc3RhbmNlKWlmKHN8fChzPXRoaXMuX19zeW5jSW5mbz17cnVuRWZmZWN0czppLGNoYW5nZWRQcm9wczp7fX0pLGEpZm9yKGxldCBsIGluIG8pe2xldCBjPWF1KGwpO3MuY2hhbmdlZFByb3BzW2NdPXRoaXMuX19kYXRhSG9zdFtjXX1lbHNlIE9iamVjdC5hc3NpZ24ocy5jaGFuZ2VkUHJvcHMsbyl9LHRoaXMuX19pbnN0YW5jZT1yLl9zdGFtcFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSxuKSx1ZSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLHRoaXMpfV9fc3luY0hvc3RQcm9wZXJ0aWVzKCl7bGV0IHQ9dGhpcy5fX3N5bmNJbmZvO3QmJih0aGlzLl9fc3luY0luZm89bnVsbCx0LnJ1bkVmZmVjdHModC5jaGFuZ2VkUHJvcHMsITEpKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtsZXQgdD10aGlzLl9fZGF0YUhvc3R8fHRoaXM7dGhpcy5fX2luc3RhbmNlJiYodC5fcmVtb3ZlQm91bmREb20odGhpcy5fX2luc3RhbmNlKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbCl9X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsaVcodCx0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxzVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLmNoaWxkcmVufV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7dGhpcy5fX2N0b3J8fCh0aGlzLl9fY3Rvcj10Yyh0aGlzLl9fdGVtcGxhdGUsdGhpcyx7bXV0YWJsZURhdGE6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHIsbil7dGhpcy5fX2luc3RhbmNlJiYodGhpcy5pZj90aGlzLl9faW5zdGFuY2UuZm9yd2FyZEhvc3RQcm9wKHIsbik6KHRoaXMuX19pbnZhbGlkUHJvcHM9dGhpcy5fX2ludmFsaWRQcm9wc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9faW52YWxpZFByb3BzW2F1KHIpXT0hMCkpfX0pKSx0aGlzLl9faW5zdGFuY2U9bmV3IHRoaXMuX19jdG9yLHVlKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2Uucm9vdCx0aGlzKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtpZih0aGlzLl9faW5zdGFuY2Upe2xldCB0PXRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7bGV0IHI9dWUodFswXSkucGFyZW50Tm9kZTtpZihyKXtyPXVlKHIpO2ZvcihsZXQgbj0wLGk7bjx0Lmxlbmd0aCYmKGk9dFtuXSk7bisrKXIucmVtb3ZlQ2hpbGQoaSl9fXRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbH19X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9faW52YWxpZFByb3BzO2lmKHQpe3RoaXMuX19pbnZhbGlkUHJvcHM9bnVsbDtmb3IobGV0IHIgaW4gdCl0aGlzLl9faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eShyLHRoaXMuX19kYXRhSG9zdFtyXSk7dGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKX19X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsdGhpcy5fX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKHQpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxqZ3Q9Ukk/YVc6c1c7Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGpndC5pcyxqZ3QpO3ZhciBkYmU9Um4oZT0+e2xldCB0PVNtKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczp7dHlwZTpBcnJheX0sbXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHRvZ2dsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fbGFzdEl0ZW1zPW51bGwsdGhpcy5fX2xhc3RNdWx0aT1udWxsLHRoaXMuX19zZWxlY3RlZE1hcD1udWxsfV9fdXBkYXRlU2VsZWN0aW9uKGksbyl7bGV0IGE9by5wYXRoO2lmKGE9PUpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKSl7bGV0IHM9by5iYXNlfHxbXSxsPXRoaXMuX19sYXN0SXRlbXMsYz10aGlzLl9fbGFzdE11bHRpO2lmKGkhPT1jJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksbCl7bGV0IHU9bzkocyxsKTt0aGlzLl9fYXBwbHlTcGxpY2VzKHUpfXRoaXMuX19sYXN0SXRlbXM9cyx0aGlzLl9fbGFzdE11bHRpPWl9ZWxzZSBpZihvLnBhdGg9PWAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uc3BsaWNlc2ApdGhpcy5fX2FwcGx5U3BsaWNlcyhvLnZhbHVlLmluZGV4U3BsaWNlcyk7ZWxzZXtsZXQgcz1hLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uYC5sZW5ndGgpLGw9cGFyc2VJbnQocywxMCk7cy5pbmRleE9mKCIuIik8MCYmcz09bCYmdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChsKX19X19hcHBseVNwbGljZXMoaSl7bGV0IG89dGhpcy5fX3NlbGVjdGVkTWFwO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgbD1pW3NdO28uZm9yRWFjaCgoYyx1KT0+e2M8bC5pbmRleHx8KGM+PWwuaW5kZXgrbC5yZW1vdmVkLmxlbmd0aD9vLnNldCh1LGMrbC5hZGRlZENvdW50LWwucmVtb3ZlZC5sZW5ndGgpOm8uc2V0KHUsLTEpKX0pO2ZvcihsZXQgYz0wO2M8bC5hZGRlZENvdW50O2MrKyl7bGV0IHU9bC5pbmRleCtjO28uaGFzKHRoaXMuaXRlbXNbdV0pJiZvLnNldCh0aGlzLml0ZW1zW3VdLHUpfX10aGlzLl9fdXBkYXRlTGlua3MoKTtsZXQgYT0wO28uZm9yRWFjaCgocyxsKT0+e3M8MD8odGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsby5kZWxldGUobCkpOmErK30pfV9fdXBkYXRlTGlua3MoKXtpZih0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMubXVsdGkpe2xldCBpPTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2gobz0+e28+PTAmJnRoaXMubGlua1BhdGhzKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtvfWAsYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS4ke2krK31gKX0pfWVsc2UgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaT0+e3RoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7aX1gKSx0aGlzLmxpbmtQYXRocyhKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZEl0ZW0iLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWApfSl9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMuX19zZWxlY3RlZE1hcD1uZXcgTWFwLHRoaXMuc2VsZWN0ZWQ9dGhpcy5tdWx0aT9bXTpudWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9aXNTZWxlY3RlZChpKXtyZXR1cm4gdGhpcy5fX3NlbGVjdGVkTWFwLmhhcyhpKX1pc0luZGV4U2VsZWN0ZWQoaSl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2ldKX1fX2Rlc2VsZWN0Q2hhbmdlZElkeChpKXtsZXQgbz10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKTtpZihvPj0wKXtsZXQgYT0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKChzLGwpPT57bz09YSsrJiZ0aGlzLmRlc2VsZWN0KGwpfSl9fV9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKXtsZXQgbz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2Ake0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWBdO2lmKG8pcmV0dXJuIHBhcnNlSW50KG8uc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS5gLmxlbmd0aCksMTApfWRlc2VsZWN0KGkpe2xldCBvPXRoaXMuX19zZWxlY3RlZE1hcC5nZXQoaSk7aWYobz49MCl7dGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpKTtsZXQgYTt0aGlzLm11bHRpJiYoYT10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChvKSksdGhpcy5fX3VwZGF0ZUxpbmtzKCksdGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9fWRlc2VsZWN0SW5kZXgoaSl7dGhpcy5kZXNlbGVjdCh0aGlzLml0ZW1zW2ldKX1zZWxlY3QoaSl7dGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaSkpfXNlbGVjdEluZGV4KGkpe2xldCBvPXRoaXMuaXRlbXNbaV07dGhpcy5pc1NlbGVjdGVkKG8pP3RoaXMudG9nZ2xlJiZ0aGlzLmRlc2VsZWN0SW5kZXgoaSk6KHRoaXMubXVsdGl8fHRoaXMuX19zZWxlY3RlZE1hcC5jbGVhcigpLHRoaXMuX19zZWxlY3RlZE1hcC5zZXQobyxpKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMucHVzaChKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksbyk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1vKX19cmV0dXJuIHJ9KTt2YXIgbWJlPWRiZShtdCksZzk9Y2xhc3MgZXh0ZW5kcyBtYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJhcnJheS1zZWxlY3RvciJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGc5LmlzLGc5KTt2YXIgXzk9bmV3IFpsO3dpbmRvdy5TaGFkeUNTU3x8KHdpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlKGUsdCxyKXt9LHByZXBhcmVUZW1wbGF0ZURvbShlLHQpe30scHJlcGFyZVRlbXBsYXRlU3R5bGVzKGUsdCxyKXt9LHN0eWxlU3VidHJlZShlLHQpe185LnByb2Nlc3NTdHlsZXMoKSxKTShlLHQpfSxzdHlsZUVsZW1lbnQoZSl7XzkucHJvY2Vzc1N0eWxlcygpfSxzdHlsZURvY3VtZW50KGUpe185LnByb2Nlc3NTdHlsZXMoKSxKTShkb2N1bWVudC5ib2R5LGUpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWUoZSx0KXtyZXR1cm4gakkoZSx0KX0sZmx1c2hDdXN0b21TdHlsZXMoKXt9LG5hdGl2ZUNzczpOeCxuYXRpdmVTaGFkb3c6aF8sY3NzQnVpbGQ6TW0sZGlzYWJsZVJ1bnRpbWU6V0l9KTt3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U9Xzk7dmFyIFhndD0iaW5jbHVkZSIsZ2JlPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSxsVz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT1udWxsLGdiZS5hZGRDdXN0b21TdHlsZSh0aGlzKX1nZXRTdHlsZSgpe2lmKHRoaXMuX3N0eWxlKXJldHVybiB0aGlzLl9zdHlsZTtsZXQgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7aWYoIXQpcmV0dXJuIG51bGw7dGhpcy5fc3R5bGU9dDtsZXQgcj10LmdldEF0dHJpYnV0ZShYZ3QpO3JldHVybiByJiYodC5yZW1vdmVBdHRyaWJ1dGUoWGd0KSx0LnRleHRDb250ZW50PWltdChyKSt0LnRleHRDb250ZW50KSx0aGlzLm93bmVyRG9jdW1lbnQhPT13aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpLHRoaXMuX3N0eWxlfX07d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY3VzdG9tLXN0eWxlIixsVyk7dmFyICRndDskZ3Q9R3guX211dGFibGVQcm9wZXJ0eUNoYW5nZTt2YXIgS2d0PXtwcm9wZXJ0aWVzOnttdXRhYmxlRGF0YTpCb29sZWFufSxfc2hvdWxkUHJvcGVydHlDaGFuZ2UoZSx0LHIpe3JldHVybiAkZ3QodGhpcyxlLHQscix0aGlzLm11dGFibGVEYXRhKX19O3ZhciBEYT1HdChIVE1MRWxlbWVudCkucHJvdG90eXBlO3ZhciB5OT1uZXcgU2V0LEpzPXtwcm9wZXJ0aWVzOntfcGFyZW50UmVzaXphYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQifSxfbm90aWZ5aW5nRGVzY2VuZGFudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnsiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIjoiX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzPVtdLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplPXRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcyksdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplPXRoaXMuX29uRGVzY2VuZGFudElyb25SZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6KHk5LmRlbGV0ZSh0aGlzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSkpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXshdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkoZSkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQoZSl9LHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbihlKXt0aGlzLl9wYXJlbnRSZXNpemFibGUmJnRoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKSx0aGlzLl9wYXJlbnRSZXNpemFibGU9ZSxlJiZlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHRoaXMpPT09LTEmJihlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5wdXNoKHRoaXMpLGUuX3N1YnNjcmliZUlyb25SZXNpemUodGhpcykpfSxzdG9wUmVzaXplTm90aWZpY2F0aW9uc0ZvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKGUpO3Q+LTEmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5zcGxpY2UodCwxKSx0aGlzLl91bnN1YnNjcmliZUlyb25SZXNpemUoZSkpfSxfc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxfdW5zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LHJlc2l6ZXJTaG91bGROb3RpZnk6ZnVuY3Rpb24oZSl7cmV0dXJuITB9LF9vbkRlc2NlbmRhbnRJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJufWNffHx0aGlzLl9maXJlUmVzaXplKCl9LF9maXJlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLXJlc2l6ZSIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITF9KX0sX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7dCE9PXRoaXMmJih0LmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KHQpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfcGFyZW50UmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSl9LF9ub3RpZnlEZXNjZW5kYW50OmZ1bmN0aW9uKGUpeyF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLGUubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKCEhdGhpcy5pc0F0dGFjaGVkKWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpe3ZhciBlPXRoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zLmJpbmQodGhpcyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24gdCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHQpLGUoKX0pfWVsc2UgdGhpcy5fZmluZFBhcmVudCgpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyk6KHk5LmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfZmluZFBhcmVudDpmdW5jdGlvbigpe3RoaXMuYXNzaWduUGFyZW50UmVzaXphYmxlKG51bGwpLHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSksdGhpcy5fcGFyZW50UmVzaXphYmxlP3k5LmRlbGV0ZSh0aGlzKTp5OS5hZGQodGhpcyl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICAvKiBTYWZhcmkgMTAgbmVlZHMgdGhpcyBwcm9wZXJ0eSBwcmVmaXhlZCB0byBjb3JyZWN0bHkgYXBwbHkgdGhlIGN1c3RvbSBwcm9wZXJ0eSAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLWNvbGxhcHNlLWNsb3NlZCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tY29sbGFwc2Utb3BlbmVkKSkgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLWNvbGxhcHNlIixiZWhhdmlvcnM6W0pzXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ob3Jpem9udGFsQ2hhbmdlZCJ9LG9wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSx0cmFuc2l0aW9uaW5nOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSxub0FuaW1hdGlvbjp7dHlwZTpCb29sZWFufSxfZGVzaXJlZFNpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sZ2V0IGRpbWVuc2lvbigpe3JldHVybiB0aGlzLmhvcml6b250YWw/IndpZHRoIjoiaGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXgoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXhXaWR0aCI6Im1heEhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4Q3NzKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24oZSx0KXtlPWU9PT0iYXV0byI/IiI6ZTt2YXIgcj10JiYhdGhpcy5ub0FuaW1hdGlvbiYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9kZXNpcmVkU2l6ZSE9PWU7aWYodGhpcy5fZGVzaXJlZFNpemU9ZSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSxyKXt2YXIgbj10aGlzLl9jYWxjU2l6ZSgpO2U9PT0iIiYmKHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT0iIixlPXRoaXMuX2NhbGNTaXplKCkpLHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1uLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLHI9ZSE9PW59dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWUscnx8dGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxlbmFibGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe0RhLl93YXJuKCJgZW5hYmxlVHJhbnNpdGlvbigpYCBpcyBkZXByZWNhdGVkLCB1c2UgYG5vQW5pbWF0aW9uYCBpbnN0ZWFkLiIpLHRoaXMubm9BbmltYXRpb249IWV9LF91cGRhdGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWUmJiF0aGlzLm5vQW5pbWF0aW9uPyIiOiIwcyJ9LF9ob3Jpem9udGFsQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5PXRoaXMuX2RpbWVuc2lvbk1heENzczt2YXIgZT10aGlzLl9kaW1lbnNpb25NYXg9PT0ibWF4V2lkdGgiPyJtYXhIZWlnaHQiOiJtYXhXaWR0aCI7dGhpcy5zdHlsZVtlXT0iIix0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCExKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCF0aGlzLm9wZW5lZCksdGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCExKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsITEpLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITApLHRoaXMub3BlbmVkJiZ0aGlzLmZvY3VzKCl9LF90cmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPXRoaXMuX2Rlc2lyZWRTaXplLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhdGhpcy5vcGVuZWQpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIix0aGlzLm9wZW5lZCksdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCExKX0sX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXt6dChlKS5yb290VGFyZ2V0PT09dGhpcyYmdGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxfY2FsY1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmRpbWVuc2lvbl0rInB4In19KTt2YXIgWmd0PVFgCi8qIE1vc3QgY29tbW9uIHVzZWQgZmxleCBzdHlsZXMqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCwKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaW5saW5lIHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQubm8td3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtYXV0byB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIC5mbGV4LW5vbmUgewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogQmFzaWMgZmxleGJveCByZXZlcnNlIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LXJldmVyc2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UsCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogRmxleGJveCBhbGlnbm1lbnQgKi8KPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogTm9uLWZsZXhib3ggcG9zaXRpb25pbmcgaGVscGVyIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9Imlyb24tcG9zaXRpb25pbmciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5yZWxhdGl2ZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICBib2R5LmZ1bGxibGVlZCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KICAgICAgLmZpeGVkLWJvdHRvbSwKICAgICAgLmZpeGVkLWxlZnQsCiAgICAgIC5maXhlZC1yaWdodCwKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLXJpZ2h0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAuZml4ZWQtYm90dG9tIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWxlZnQgewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7Wmd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWmd0LmNvbnRlbnQpO3ZhciBKZ3Q9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBbaGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7Smd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoSmd0LmNvbnRlbnQpO3ZhciBRZ3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtRZ3QudGV4dENvbnRlbnQ9IltoaWRkZW5dIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ijtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFFndCk7dmFyIGdvPWNsYXNze2NvbnN0cnVjdG9yKHQpe2dvWyIgIl0odCksdGhpcy50eXBlPXQmJnQudHlwZXx8ImRlZmF1bHQiLHRoaXMua2V5PXQmJnQua2V5LHQmJiJ2YWx1ZSJpbiB0JiYodGhpcy52YWx1ZT10LnZhbHVlKX1nZXQgdmFsdWUoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLmtleTtpZih0JiZyKXJldHVybiBnby50eXBlc1t0XSYmZ28udHlwZXNbdF1bcl19c2V0IHZhbHVlKHQpe3ZhciByPXRoaXMudHlwZSxuPXRoaXMua2V5O3ImJm4mJihyPWdvLnR5cGVzW3JdPWdvLnR5cGVzW3JdfHx7fSx0PT1udWxsP2RlbGV0ZSByW25dOnJbbl09dCl9Z2V0IGxpc3QoKXt2YXIgdD10aGlzLnR5cGU7aWYodCl7dmFyIHI9Z28udHlwZXNbdGhpcy50eXBlXTtyZXR1cm4gcj9PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIF9iZVt0aGlzLnR5cGVdW25dfSx0aGlzKTpbXX19YnlLZXkodCl7cmV0dXJuIHRoaXMua2V5PXQsdGhpcy52YWx1ZX19O2dvWyIgIl09ZnVuY3Rpb24oKXt9O2dvLnR5cGVzPXt9O3ZhciBfYmU9Z28udHlwZXM7WXQoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgZ28oe3R5cGU6ZSxrZXk6dH0pO3JldHVybiByIT09dm9pZCAwJiZyIT09bi52YWx1ZT9uLnZhbHVlPXI6dGhpcy52YWx1ZSE9PW4udmFsdWUmJih0aGlzLnZhbHVlPW4udmFsdWUpLG59LGdldCBsaXN0KCl7cmV0dXJuIHRoaXMuX19tZXRhJiZ0aGlzLl9fbWV0YS5saXN0fSxfc2VsZkNoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsdWU9dGhpcyl9LGJ5S2V5OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ28oe3R5cGU6dGhpcy50eXBlLGtleTplfSkudmFsdWV9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CmAsaXM6Imlyb24taWNvbiIscHJvcGVydGllczp7aWNvbjp7dHlwZTpTdHJpbmd9LHRoZW1lOnt0eXBlOlN0cmluZ30sc3JjOnt0eXBlOlN0cmluZ30sX21ldGE6e3ZhbHVlOkRhLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PShlfHwiIikuc3BsaXQoIjoiKTt0aGlzLl9pY29uTmFtZT10LnBvcCgpLHRoaXMuX2ljb25zZXROYW1lPXQucG9wKCl8fHRoaXMuX0RFRkFVTFRfSUNPTlNFVCx0aGlzLl91cGRhdGVJY29uKCl9LF9zcmNDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3VwZGF0ZUljb24oKX0sX3VzZXNJY29uc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8IXRoaXMuc3JjfSxfdXBkYXRlSWNvbjpmdW5jdGlvbigpe3RoaXMuX3VzZXNJY29uc2V0KCk/KHRoaXMuX2ltZyYmdGhpcy5faW1nLnBhcmVudE5vZGUmJnp0KHRoaXMucm9vdCkucmVtb3ZlQ2hpbGQodGhpcy5faW1nKSx0aGlzLl9pY29uTmFtZT09PSIiP3RoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKTp0aGlzLl9pY29uc2V0TmFtZSYmdGhpcy5fbWV0YSYmKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSksdGhpcy5faWNvbnNldD8odGhpcy5faWNvbnNldC5hcHBseUljb24odGhpcyx0aGlzLl9pY29uTmFtZSx0aGlzLnRoZW1lKSx0aGlzLnVubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSk6dGhpcy5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKSk6KHRoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLHp0KHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSk7WXQoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBnbyh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ucz10aGlzLl9jcmVhdGVJY29uTWFwKCksT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lKyI6IitlfSx0aGlzKX0sYXBwbHlJY29uOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVJY29uKGUpO3ZhciByPXRoaXMuX2Nsb25lSWNvbih0LHRoaXMucnRsTWlycm9yaW5nJiZ0aGlzLl90YXJnZXRJc1JUTChlKSk7aWYocil7dmFyIG49enQoZS5yb290fHxlKTtyZXR1cm4gbi5pbnNlcnRCZWZvcmUocixuLmNoaWxkTm9kZXNbMF0pLGUuX3N2Z0ljb249cn1yZXR1cm4gbnVsbH0scmVtb3ZlSWNvbjpmdW5jdGlvbihlKXtlLl9zdmdJY29uJiYoenQoZS5yb290fHxlKS5yZW1vdmVDaGlsZChlLl9zdmdJY29uKSxlLl9zdmdJY29uPW51bGwpfSxfdGFyZ2V0SXNSVEw6ZnVuY3Rpb24oZSl7aWYodGhpcy5fX3RhcmdldElzUlRMPT1udWxsKWlmKHRoaXMudXNlR2xvYmFsUnRsQXR0cmlidXRlKXt2YXIgdD1kb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGlyIik/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fX3RhcmdldElzUlRMPXQuZ2V0QXR0cmlidXRlKCJkaXIiKT09PSJydGwifWVsc2UgZSYmZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYoZT1lLmhvc3QpLHRoaXMuX190YXJnZXRJc1JUTD1lJiZ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5kaXJlY3Rpb249PT0icnRsIjtyZXR1cm4gdGhpcy5fX3RhcmdldElzUlRMfSxfbmFtZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhLnZhbHVlPW51bGwsdGhpcy5fbWV0YS5rZXk9dGhpcy5uYW1lLHRoaXMuX21ldGEudmFsdWU9dGhpcyx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KX0sX2NyZWF0ZUljb25NYXA6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaChmdW5jdGlvbih0KXtlW3QuaWRdPXR9KSxlfSxfY2xvbmVJY29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCksdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW2VdLHRoaXMuc2l6ZSx0KX0sX3ByZXBhcmVTdmdDbG9uZTpmdW5jdGlvbihlLHQscil7aWYoZSl7dmFyIG49ZS5jbG9uZU5vZGUoITApLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpLG89bi5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKXx8IjAgMCAiK3QrIiAiK3QsYT0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7cmV0dXJuIHImJm4uaGFzQXR0cmlidXRlKCJtaXJyb3ItaW4tcnRsIikmJihhKz0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyOyIpLGkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixvKSxpLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxpLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpLnN0eWxlLmNzc1RleHQ9YSxpLmFwcGVuZENoaWxkKG4pLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSxpfXJldHVybiBudWxsfX0pO3ZhciB5YmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpbWFnZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYWRkLWEtcGhvdG8iPjxwYXRoIGQ9Ik0zIDRWMWgydjNoM3YySDV2M0gzVjZIMFY0aDN6bTMgNlY3aDNWNGg3bDEuODMgMkgyMWMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMlYxMGgzem03IDljMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTUtNSAyLjI0LTUgNSAyLjI0IDUgNSA1em0tMy4yLTVjMCAxLjc3IDEuNDMgMy4yIDMuMiAzLjJzMy4yLTEuNDMgMy4yLTMuMi0xLjQzLTMuMi0zLjItMy4yLTMuMiAxLjQzLTMuMiAzLjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLXRvLXBob3RvcyI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGp1c3QiPjxwYXRoIGQ9Ik0xMiAyQzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwIDEwLTQuNDkgMTAtMTBTMTcuNTEgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMy04YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Npc3RhbnQiPjxwYXRoIGQ9Ik0xOSAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUuMTIgMTAuODhMMTIgMTdsLTEuODgtNC4xMkw2IDExbDQuMTItMS44OEwxMiA1bDEuODggNC4xMkwxOCAxMWwtNC4xMiAxLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lzdGFudC1waG90byI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXVkaW90cmFjayI+PHBhdGggZD0iTTEyIDN2OS4yOGMtLjQ3LS4xNy0uOTctLjI4LTEuNS0uMjhDOC4wMSAxMiA2IDE0LjAxIDYgMTYuNVM4LjAxIDIxIDEwLjUgMjFjMi4zMSAwIDQuMi0xLjc1IDQuNDUtNEgxNVY2aDRWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLWNpcmN1bGFyIj48cGF0aCBkPSJNMTAgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXpNNyA5LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0zIDdjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tMy0zYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMy02Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTQgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLTEuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTMgNmMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtNGMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0yLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtMy41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1saW5lYXIiPjxwYXRoIGQ9Ik01IDE3LjVjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjUuNjcgMS41IDEuNSAxLjV6TTkgMTNjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6TTMgMjFoMTh2LTJIM3Yyek01IDkuNWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTNS44MyA2LjUgNSA2LjUgMy41IDcuMTcgMy41IDggNC4xNyA5LjUgNSA5LjV6bTAgNGMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNS42NyAxLjUgMS41IDEuNXpNOSAxN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem04LS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMyAzdjJoMThWM0gzem0xNCA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0wIDRjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMyA5Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLW9mZiI+PHBhdGggZD0iTTE0IDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLS4yIDQuNDhsLjIuMDJjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjVsLjAyLjJjLjA5LjY3LjYxIDEuMTkgMS4yOCAxLjI4ek0xNCAzLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0tNCAwYy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMTEgN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptOCA4Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLTQgMTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTIuNSA1LjI3bDMuNzggMy43OEw2IDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xYzAtLjEtLjAzLS4xOS0uMDYtLjI4bDIuODEgMi44MWMtLjcxLjExLTEuMjUuNzMtMS4yNSAxLjQ3IDAgLjgzLjY3IDEuNSAxLjUgMS41Ljc0IDAgMS4zNi0uNTQgMS40Ny0xLjI1bDIuODEgMi44MWMtLjA5LS4wMy0uMTgtLjA2LS4yOC0uMDYtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTFjMC0uMS0uMDMtLjE5LS4wNi0uMjhsMy43OCAzLjc4TDIwIDIwLjIzIDMuNzcgNCAyLjUgNS4yN3pNMTAgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMTEtMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiAxM2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xek0zIDkuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTcgMTFjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bS0zLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1vbiI+PHBhdGggZD0iTTYgMTNjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtOGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0tMyAuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0xNSA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xNCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtMy41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptLTExIDEwYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptNyA3Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC0xN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA1LjVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em04IC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLThjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC00Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTMgOC41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMTQgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCAzLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tNC0xMmMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTAgOC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTQtNC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC00Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIj48L2NpcmNsZT48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTIiPjxwYXRoIGQ9Ik0xMCAyYy0xLjgyIDAtMy41My41LTUgMS4zNUM3Ljk5IDUuMDggMTAgOC4zIDEwIDEycy0yLjAxIDYuOTItNSA4LjY1QzYuNDcgMjEuNSA4LjE4IDIyIDEwIDIyYzUuNTIgMCAxMC00LjQ4IDEwLTEwUzE1LjUyIDIgMTAgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTMiPjxwYXRoIGQ9Ik05IDJjLTEuMDUgMC0yLjA1LjE2LTMgLjQ2IDQuMDYgMS4yNyA3IDUuMDYgNyA5LjU0IDAgNC40OC0yLjk0IDguMjctNyA5LjU0Ljk1LjMgMS45NS40NiAzIC40NiA1LjUyIDAgMTAtNC40OCAxMC0xMFMxNC41MiAyIDkgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTQiPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtLjg5IDAtMS43NC0uMi0yLjUtLjU1QzExLjU2IDE2LjUgMTMgMTQuNDIgMTMgMTJzLTEuNDQtNC41LTMuNS01LjQ1QzEwLjI2IDYuMiAxMS4xMSA2IDEyIDZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy01Ij48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTYiPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTciPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6bTAtMTBjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyb2tlbi1pbWFnZSI+PHBhdGggZD0iTTIxIDV2Ni41OWwtMy0zLjAxLTQgNC4wMS00LTQtNCA0LTMtMy4wMVY1YzAtMS4xLjktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ6bS0zIDYuNDJsMyAzLjAxVjE5YzAgMS4xLS45IDItMiAySDVjLTEuMSAwLTItLjktMi0ydi02LjU4bDMgMi45OSA0LTQgNCA0IDQtMy45OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicnVzaCI+PHBhdGggZD0iTTcgMTRjLTEuNjYgMC0zIDEuMzQtMyAzIDAgMS4zMS0xLjE2IDItMiAyIC45MiAxLjIyIDIuNDkgMiA0IDIgMi4yMSAwIDQtMS43OSA0LTQgMC0xLjY2LTEuMzQtMy0zLTN6bTEzLjcxLTkuMzdsLTEuMzQtMS4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMOSAxMi4yNSAxMS43NSAxNWw4Ljk2LTguOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJidXJzdC1tb2RlIj48cGF0aCBkPSJNMSA1aDJ2MTRIMXptNCAwaDJ2MTRINXptMTcgMEgxMGMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXpNMTEgMTdsMi41LTMuMTVMMTUuMjkgMTZsMi41LTMuMjJMMjEgMTdIMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhIj48cGF0aCBkPSJNOS40IDEwLjVsNC43Ny04LjI2QzEzLjQ3IDIuMDkgMTIuNzUgMiAxMiAyYy0yLjQgMC00LjYuODUtNi4zMiAyLjI1bDMuNjYgNi4zNS4wNi0uMXpNMjEuNTQgOWMtLjkyLTIuOTItMy4xNS01LjI2LTYtNi4zNEwxMS44OCA5aDkuNjZ6bS4yNiAxaC03LjQ5bC4yOS41IDQuNzYgOC4yNUMyMSAxNi45NyAyMiAxNC42MSAyMiAxMmMwLS42OS0uMDctMS4zNS0uMi0yek04LjU0IDEybC0zLjktNi43NUMzLjAxIDcuMDMgMiA5LjM5IDIgMTJjMCAuNjkuMDcgMS4zNS4yIDJoNy40OWwtMS4xNS0yem0tNi4wOCAzYy45MiAyLjkyIDMuMTUgNS4yNiA2IDYuMzRMMTIuMTIgMTVIMi40NnptMTEuMjcgMGwtMy45IDYuNzZjLjcuMTUgMS40Mi4yNCAyLjE3LjI0IDIuNCAwIDQuNi0uODUgNi4zMi0yLjI1bC0zLjY2LTYuMzUtLjkzIDEuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtYWx0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDJMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAySDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1mcm9udCI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01ek0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0xLjk5LjktMS45OSAyUzEwLjkgOCAxMiA4em01LThIN0M1LjkgMCA1IC45IDUgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMi0yLTJ6TTcgMmgxMHYxMC41YzAtMS42Ny0zLjMzLTIuNS01LTIuNXMtNSAuODMtNSAyLjVWMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcmVhciI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01em0zLTIwSDdDNS45IDAgNSAuOSA1IDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yem0tNSA2Yy0xLjExIDAtMi0uOS0yLTJzLjg5LTIgMS45OS0yIDIgLjkgMiAyQzE0IDUuMSAxMy4xIDYgMTIgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcm9sbCI+PHBhdGggZD0iTTE0IDVjMC0xLjEtLjktMi0yLTJoLTFWMmMwLS41NS0uNDUtMS0xLTFINmMtLjU1IDAtMSAuNDUtMSAxdjFINGMtMS4xIDAtMiAuOS0yIDJ2MTVjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yaDhWNWgtOHptLTIgMTNoLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6bTQgOWgtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnptNCA5aC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy1zdHJvbmciPjxwYXRoIGQ9Ik0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptLTcgN0gzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy13ZWFrIj48cGF0aCBkPSJNNSAxNUgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0ek0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xsZWN0aW9ucyI+PHBhdGggZD0iTTIyIDE2VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMnptLTExLTRsMi4wMyAyLjcxTDE2IDExbDQgNUg4bDMtNHpNMiA2djE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2SDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sbGVjdGlvbnMtYm9va21hcmsiPjxwYXRoIGQ9Ik00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTYtNEg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTBsLTIuNS0xLjVMMTUgMTJWNGg1djh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sb3ItbGVucyI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xvcml6ZSI+PHBhdGggZD0iTTIwLjcxIDUuNjNsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTMuMTIgMy4xMi0xLjkzLTEuOTEtMS40MSAxLjQxIDEuNDIgMS40MkwzIDE2LjI1VjIxaDQuNzVsOC45Mi04LjkyIDEuNDIgMS40MiAxLjQxLTEuNDEtMS45Mi0xLjkyIDMuMTItMy4xMmMuNC0uNC40LTEuMDMuMDEtMS40MnpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlIj48cGF0aCBkPSJNMTAgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDV2MmgyVjFoLTJ2MnptMCAxNUg1bDUtNnY2em05LTE1aC01djJoNXYxM2wtNS02djloNWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRyb2wtcG9pbnQiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMCAxMC00LjQ5IDEwLTEwUzE3LjUxIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udHJvbC1wb2ludC1kdXBsaWNhdGUiPjxwYXRoIGQ9Ik0xNiA4aC0ydjNoLTN2MmgzdjNoMnYtM2gzdi0yaC0zek0yIDEyYzAtMi43OSAxLjY0LTUuMiA0LjAxLTYuMzJWMy41MkMyLjUyIDQuNzYgMCA4LjA5IDAgMTJzMi41MiA3LjI0IDYuMDEgOC40OHYtMi4xNkMzLjY0IDE3LjIgMiAxNC43OSAyIDEyem0xMy05Yy00Ljk2IDAtOSA0LjA0LTkgOXM0LjA0IDkgOSA5IDktNC4wNCA5LTktNC4wNC05LTktOXptMCAxNmMtMy44NiAwLTctMy4xNC03LTdzMy4xNC03IDctNyA3IDMuMTQgNyA3LTMuMTQgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcCI+PHBhdGggZD0iTTE3IDE1aDJWN2MwLTEuMS0uOS0yLTItMkg5djJoOHY4ek03IDE3VjFINXY0SDF2Mmg0djEwYzAgMS4xLjkgMiAyIDJoMTB2NGgydi00aDR2LTJIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTE2LTkiPjxwYXRoIGQ9Ik0xOSA2SDVjLTEuMSAwLTIgLjktMiAydjhjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEwSDVWOGgxNHY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtMy0yIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINVY2aDE0djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNS00Ij48cGF0aCBkPSJNMTkgNUg1Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTJINVY3aDE0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNy01Ij48cGF0aCBkPSJNMTkgN0g1Yy0xLjEgMC0yIC45LTIgMnY2YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMnptMCA4SDVWOWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZGluIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZnJlZSI+PHBhdGggZD0iTTMgNXY0aDJWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTIgMTBIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00em0xNCA0aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0em0wLTE2aC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWxhbmRzY2FwZSI+PHBhdGggZD0iTTE5IDVINWMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDEySDVWN2gxNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLW9yaWdpbmFsIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0em0tNS4wNC02LjcxbC0yLjc1IDMuNTQtMS45Ni0yLjM2TDYuNSAxN2gxMWwtMy41NC00LjcxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg3VjVoMTB2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1yb3RhdGUiPjxwYXRoIGQ9Ik03LjQ3IDIxLjQ5QzQuMiAxOS45MyAxLjg2IDE2Ljc2IDEuNSAxM0gwYy41MSA2LjE2IDUuNjYgMTEgMTEuOTUgMTEgLjIzIDAgLjQ0LS4wMi42Ni0uMDNMOC44IDIwLjE1bC0xLjMzIDEuMzR6TTEyLjA1IDBjLS4yMyAwLS40NC4wMi0uNjYuMDRsMy44MSAzLjgxIDEuMzMtMS4zM0MxOS44IDQuMDcgMjIuMTQgNy4yNCAyMi41IDExSDI0Yy0uNTEtNi4xNi01LjY2LTExLTExLjk1LTExek0xNiAxNGgyVjhjMC0xLjExLS45LTItMi0yaC02djJoNnY2em0tOCAyVjRINnYySDR2MmgydjhjMCAxLjEuODkgMiAyIDJoOHYyaDJ2LTJoMnYtMkg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atc3F1YXJlIj48cGF0aCBkPSJNMTggNEg2Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINlY2aDEydjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlaGF6ZSI+PHBhdGggZD0iTTIgMTUuNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGV0YWlscyI+PHBhdGggZD0iTTMgNGw5IDE2IDktMTZIM3ptMy4zOCAyaDExLjI1TDEyIDE2IDYuMzggNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlZGl0Ij48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlIj48cGF0aCBkPSJNMTUgMTd2Mmgydi0yaDJ2LTJoLTJ2LTJoLTJ2MmgtMnYyaDJ6bTUtMTVINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek01IDVoNnYySDVWNXptMTUgMTVINEwyMCA0djE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0xIj48cGF0aCBkPSJNNCAxMXYyaDh2LTJINHptMTUgN2gtMlY3LjM4TDE0IDguNFY2LjdMMTguNyA1aC4zdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0yIj48cGF0aCBkPSJNMTUuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3cy4xOS0uNzkuMTktMS4xOGMwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIxdi0xLjcxaC01Ljk1ek0yIDExdjJoOHYtMkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXBsdXMtMSI+PHBhdGggZD0iTTEwIDdIOHY0SDR2Mmg0djRoMnYtNGg0di0yaC00Vjd6bTEwIDExaC0yVjcuMzhMMTUgOC40VjYuN0wxOS43IDVoLjN2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtcGx1cy0yIj48cGF0aCBkPSJNMTYuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3LjEzLS4zOS4xOS0uNzkuMTktMS4xOCAwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIydi0xLjcxaC01Ljk1ek04IDdINnY0SDJ2Mmg0djRoMnYtNGg0di0ySDhWN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS16ZXJvIj48cGF0aCBkPSJNMTYuMTQgMTIuNWMwIDEtLjEgMS44NS0uMyAyLjU1LS4yLjctLjQ4IDEuMjctLjgzIDEuNy0uMzYuNDQtLjc5Ljc1LTEuMy45NS0uNTEuMi0xLjA3LjMtMS43LjMtLjYyIDAtMS4xOC0uMS0xLjY5LS4zLS41MS0uMi0uOTUtLjUxLTEuMzEtLjk1LS4zNi0uNDQtLjY1LTEuMDEtLjg1LTEuNy0uMi0uNy0uMy0xLjU1LS4zLTIuNTV2LTIuMDRjMC0xIC4xLTEuODUuMy0yLjU1LjItLjcuNDgtMS4yNi44NC0xLjY5LjM2LS40My44LS43NCAxLjMxLS45M0MxMC44MSA1LjEgMTEuMzggNSAxMiA1Yy42MyAwIDEuMTkuMSAxLjcuMjkuNTEuMTkuOTUuNSAxLjMxLjkzLjM2LjQzLjY0Ljk5Ljg0IDEuNjkuMi43LjMgMS41NC4zIDIuNTV2Mi4wNHptLTIuMTEtMi4zNmMwLS42NC0uMDUtMS4xOC0uMTMtMS42Mi0uMDktLjQ0LS4yMi0uNzktLjQtMS4wNi0uMTctLjI3LS4zOS0uNDYtLjY0LS41OC0uMjUtLjEzLS41NC0uMTktLjg2LS4xOS0uMzIgMC0uNjEuMDYtLjg2LjE4cy0uNDcuMzEtLjY0LjU4Yy0uMTcuMjctLjMxLjYyLS40IDEuMDZzLS4xMy45OC0uMTMgMS42MnYyLjY3YzAgLjY0LjA1IDEuMTguMTQgMS42Mi4wOS40NS4yMy44MS40IDEuMDlzLjM5LjQ4LjY0LjYxLjU0LjE5Ljg3LjE5Yy4zMyAwIC42Mi0uMDYuODctLjE5cy40Ni0uMzMuNjMtLjYxYy4xNy0uMjguMy0uNjQuMzktMS4wOS4wOS0uNDUuMTMtLjk5LjEzLTEuNjJ2LTIuNjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyIj48cGF0aCBkPSJNMTUuOTYgMTAuMjlsLTIuNzUgMy41NC0xLjk2LTIuMzZMOC41IDE1aDExbC0zLjU0LTQuNzF6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTEiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgMTBoMlY1aC00djJoMnY4em03LTE0SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTIiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tNC00aC00di0yaDJjMS4xIDAgMi0uODkgMi0yVjdjMC0xLjExLS45LTItMi0yaC00djJoNHYyaC0yYy0xLjEgMC0yIC44OS0yIDJ2NGg2di0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0zIj48cGF0aCBkPSJNMjEgMUg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTQgOHYtMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNS44MyAwIDEuNS0uNjcgMS41LTEuNVY3YzAtMS4xMS0uOS0yLTItMmgtNHYyaDR2MmgtMnYyaDJ2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci00Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTEyIDEwaDJWNWgtMnY0aC0yVjVoLTJ2Nmg0djR6bTYtMTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNSI+PHBhdGggZD0iTTIxIDFIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE0IDh2LTJjMC0xLjExLS45LTItMi0yaC0yVjdoNFY1aC02djZoNHYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTYiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0yYzAtMS4xMS0uOS0yLTItMmgtMlY3aDRWNWgtNGMtMS4xIDAtMiAuODktMiAydjZjMCAxLjExLjkgMiAyIDJ6bTAtNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTciPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0ybDQtOFY1aC02djJoNGwtNCA4aDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTgiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0xLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41LjgzIDAgMS41LS42NyAxLjUtMS41VjdjMC0xLjExLS45LTItMi0yaC0yYy0xLjEgMC0yIC44OS0yIDJ2MS41YzAgLjgzLjY3IDEuNSAxLjUgMS41LS44MyAwLTEuNS42Ny0xLjUgMS41VjEzYzAgMS4xMS45IDIgMiAyem0wLThoMnYyaC0yVjd6bTAgNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTkiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0xNSA1aC0yYy0xLjEgMC0yIC44OS0yIDJ2MmMwIDEuMTEuOSAyIDIgMmgydjJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMlY3YzAtMS4xMS0uOS0yLTItMnptMCA0aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci05LXBsdXMiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgN1Y4YzAtMS4xMS0uOS0yLTItMmgtMWMtMS4xIDAtMiAuODktMiAydjFjMCAxLjExLjkgMiAyIDJoMXYxSDl2MmgzYzEuMSAwIDItLjg5IDItMnptLTMtM1Y4aDF2MWgtMXptMTAtOEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgOGgtMlY3aC0ydjJoLTJ2MmgydjJoMnYtMmgydjZIN1YzaDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWItYW5kLXciPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmwtNy04djhINWw3LThWNWg3djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1jZW50ZXItZm9jdXMiPjxwYXRoIGQ9Ik01IDE1SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6TTEyIDljLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1kcmFtYSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYxIDUuNjQgNS4zNiA4LjA0IDIuMzUgOC4zNiAwIDEwLjkgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTkgMThINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0aDJjMC0yLjc2LTEuODYtNS4wOC00LjQtNS43OEM4LjYxIDYuODggMTAuMiA2IDEyIDZjMy4wMyAwIDUuNSAyLjQ3IDUuNSA1LjV2LjVIMTljMS42NSAwIDMgMS4zNSAzIDNzLTEuMzUgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWZyYW1lcyI+PHBhdGggZD0iTTIwIDRoLTRsLTQtNC00IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDRWNmg0LjUybDMuNTItMy41TDE1LjUyIDZIMjB2MTR6TTE4IDhINnYxMGgxMiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1oZHIiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLW5vbmUiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci10aWx0LXNoaWZ0Ij48cGF0aCBkPSJNMTEgNC4wN1YyLjA1Yy0yLjAxLjItMy44NCAxLTUuMzIgMi4yMUw3LjEgNS42OWMxLjExLS44NiAyLjQ0LTEuNDQgMy45LTEuNjJ6bTcuMzIuMTlDMTYuODQgMy4wNSAxNS4wMSAyLjI1IDEzIDIuMDV2Mi4wMmMxLjQ2LjE4IDIuNzkuNzYgMy45IDEuNjJsMS40Mi0xLjQzek0xOS45MyAxMWgyLjAyYy0uMi0yLjAxLTEtMy44NC0yLjIxLTUuMzJMMTguMzEgNy4xYy44NiAxLjExIDEuNDQgMi40NCAxLjYyIDMuOXpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6TTE1IDEyYzAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzIDEuMzQgMyAzIDMgMy0xLjM0IDMtM3ptMy4zMSA0LjlsMS40MyAxLjQzYzEuMjEtMS40OCAyLjAxLTMuMzIgMi4yMS01LjMyaC0yLjAyYy0uMTggMS40NS0uNzYgMi43OC0xLjYyIDMuODl6TTEzIDE5LjkzdjIuMDJjMi4wMS0uMiAzLjg0LTEgNS4zMi0yLjIxbC0xLjQzLTEuNDNjLTEuMS44Ni0yLjQzIDEuNDQtMy44OSAxLjYyem0tNy4zMi0uMTlDNy4xNiAyMC45NSA5IDIxLjc1IDExIDIxLjk1di0yLjAyYy0xLjQ2LS4xOC0yLjc5LS43Ni0zLjktMS42MmwtMS40MiAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci12aW50YWdlIj48cGF0aCBkPSJNMTguNyAxMi40Yy0uMjgtLjE2LS41Ny0uMjktLjg2LS40LjI5LS4xMS41OC0uMjQuODYtLjQgMS45Mi0xLjExIDIuOTktMy4xMiAzLTUuMTktMS43OS0xLjAzLTQuMDctMS4xMS02IDAtLjI4LjE2LS41NC4zNS0uNzguNTQuMDUtLjMxLjA4LS42My4wOC0uOTUgMC0yLjIyLTEuMjEtNC4xNS0zLTUuMTlDMTAuMjEgMS44NSA5IDMuNzggOSA2YzAgLjMyLjAzLjY0LjA4Ljk1LS4yNC0uMi0uNS0uMzktLjc4LS41NS0xLjkyLTEuMTEtNC4yLTEuMDMtNiAwIDAgMi4wNyAxLjA3IDQuMDggMyA1LjE5LjI4LjE2LjU3LjI5Ljg2LjQtLjI5LjExLS41OC4yNC0uODYuNC0xLjkyIDEuMTEtMi45OSAzLjEyLTMgNS4xOSAxLjc5IDEuMDMgNC4wNyAxLjExIDYgMCAuMjgtLjE2LjU0LS4zNS43OC0uNTQtLjA1LjMyLS4wOC42NC0uMDguOTYgMCAyLjIyIDEuMjEgNC4xNSAzIDUuMTkgMS43OS0xLjA0IDMtMi45NyAzLTUuMTkgMC0uMzItLjAzLS42NC0uMDgtLjk1LjI0LjIuNS4zOC43OC41NCAxLjkyIDEuMTEgNC4yIDEuMDMgNiAwLS4wMS0yLjA3LTEuMDgtNC4wOC0zLTUuMTl6TTEyIDE2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFyZSI+PHBhdGggZD0iTTcgMTFIMXYyaDZ2LTJ6bTIuMTctMy4yNEw3LjA1IDUuNjQgNS42NCA3LjA1bDIuMTIgMi4xMiAxLjQxLTEuNDF6TTEzIDFoLTJ2NmgyVjF6bTUuMzYgNi4wNWwtMS40MS0xLjQxLTIuMTIgMi4xMiAxLjQxIDEuNDEgMi4xMi0yLjEyek0xNyAxMXYyaDZ2LTJoLTZ6bS01LTJjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zem0yLjgzIDcuMjRsMi4xMiAyLjEyIDEuNDEtMS40MS0yLjEyLTIuMTItMS40MSAxLjQxem0tOS4xOS43MWwxLjQxIDEuNDEgMi4xMi0yLjEyLTEuNDEtMS40MS0yLjEyIDIuMTJ6TTExIDIzaDJ2LTZoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1hdXRvIj48cGF0aCBkPSJNMyAydjEyaDN2OWw3LTEySDlsNC05SDN6bTE2IDBoLTJsLTMuMiA5aDEuOWwuNy0yaDMuMmwuNyAyaDEuOUwxOSAyem0tMi4xNSA1LjY1TDE4IDRsMS4xNSAzLjY1aC0yLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtb2ZmIj48cGF0aCBkPSJNMy4yNyAzTDIgNC4yN2w1IDVWMTNoM3Y5bDMuNTgtNi4xNEwxNy43MyAyMCAxOSAxOC43MyAzLjI3IDN6TTE3IDEwaC00bDQtOEg3djIuMThsOC40NiA4LjQ2TDE3IDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLW9uIj48cGF0aCBkPSJNNyAydjExaDN2OWw3LTEyaC00bDQtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00LTEyaDJWN2gtMnYyek0zIDV2MTRjMCAxLjEuOSAyIDIgMmg0di0ySDVWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTE2LTJ2MmgyYzAtMS4xLS45LTItMi0yem0tOCAyMGgyVjFoLTJ2MjJ6bTgtNmgydi0yaC0ydjJ6TTE1IDVoMlYzaC0ydjJ6bTQgOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRpZW50Ij48cGF0aCBkPSJNMTEgOWgydjJoLTJ6bS0yIDJoMnYySDl6bTQgMGgydjJoLTJ6bTItMmgydjJoLTJ6TTcgOWgydjJIN3ptMTItNkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMThIN3YtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTItN2gtMnYyaDJ2MmgtMnYtMmgtMnYyaC0ydi0yaC0ydjJIOXYtMkg3djJINXYtMmgydi0ySDVWNWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWluIj48cGF0aCBkPSJNMTAgMTJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yek02IDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMi04YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptLTQgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmlkLW9mZiI+PHBhdGggZD0iTTggNHYxLjQ1bDIgMlY0aDR2NGgtMy40NWwyIDJIMTR2MS40NWwyIDJWMTBoNHY0aC0zLjQ1bDIgMkgyMHYxLjQ1bDIgMlY0YzAtMS4xLS45LTItMi0ySDQuNTVsMiAySDh6bTggMGg0djRoLTRWNHpNMS4yNyAxLjI3TDAgMi41NWwyIDJWMjBjMCAxLjEuOSAyIDIgMmgxNS40NmwyIDIgMS4yNy0xLjI3TDEuMjcgMS4yN3pNMTAgMTIuNTVMMTEuNDUgMTRIMTB2LTEuNDV6bS02LTZMNS40NSA4SDRWNi41NXpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoMy40NWwuNTUuNTVWMTR6bTYgNmgtNHYtNGgzLjQ1bC41NS41NFYyMHptMiAwdi0xLjQ2TDE3LjQ2IDIwSDE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyaWQtb24iPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoNHY0em0wLTZINFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb2ZmIj48cGF0aCBkPSJNMTcuNSAxNXYtMmgxLjFsLjkgMkgyMWwtLjktMi4xYy41LS4yLjktLjguOS0xLjR2LTFjMC0uOC0uNy0xLjUtMS41LTEuNUgxNnY0LjlsMS4xIDEuMWguNHptMC00LjVoMnYxaC0ydi0xem0tNC41IDB2LjRsMS41IDEuNXYtMS45YzAtLjgtLjctMS41LTEuNS0xLjVoLTEuOWwxLjUgMS41aC40em0tMy41LTFsLTctNy0xLjEgMUw2LjkgOWgtLjR2MmgtMlY5SDN2NmgxLjV2LTIuNWgyVjE1SDh2LTQuOWwxLjUgMS41VjE1aDMuNGw3LjYgNy42IDEuMS0xLjEtMTIuMS0xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb24iPjxwYXRoIGQ9Ik0yMSAxMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjVIMTZ2NmgxLjV2LTJoMS4xbC45IDJIMjFsLS45LTIuMWMuNS0uMy45LS44LjktMS40em0tMS41IDBoLTJ2LTFoMnYxem0tMTMtLjVoLTJWOUgzdjZoMS41di0yLjVoMlYxNUg4VjlINi41djJ6TTEzIDlIOS41djZIMTNjLjggMCAxLjUtLjcgMS41LTEuNXYtM2MwLS44LS43LTEuNS0xLjUtMS41em0wIDQuNWgtMnYtM2gydjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLXN0cm9uZyI+PHBhdGggZD0iTTE3IDZjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02ek01IDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci13ZWFrIj48cGF0aCBkPSJNNSA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMTItMmMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bTAgMTBjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlYWxpbmciPjxwYXRoIGQ9Ik0xNy43MyAxMi4wMmwzLjk4LTMuOThjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtNC4zNC00LjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMy45OCAzLjk4TDggMi4yOUM3LjggMi4xIDcuNTUgMiA3LjI5IDJjLS4yNSAwLS41MS4xLS43LjI5TDIuMjUgNi42M2MtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWwzLjk4IDMuOThMMi4yNSAxNmMtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWw0LjM0IDQuMzRjLjM5LjM5IDEuMDIuMzkgMS40MSAwbDMuOTgtMy45OCAzLjk4IDMuOThjLjIuMi40NS4yOS43MS4yOS4yNiAwIC41MS0uMS43MS0uMjlsNC4zNC00LjM0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTMuOTktMy45OHpNMTIgOWMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tNC43MSAxLjk2TDMuNjYgNy4zNGwzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3pNMTAgMTNjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptMiAyYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bTItNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yLjY2IDkuMzRsLTMuNjMtMy42MiAzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbWFnZSI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1hZ2UtYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTYgMTBoLTJ2Mmgydi0yem0wIDRoLTJ2Mmgydi0yem0tOC00SDZ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem04LTZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDRWNmgxNnYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpc28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNNS41IDcuNWgydi0ySDl2MmgyVjlIOXYySDcuNVY5aC0yVjcuNXpNMTkgMTlINUwxOSA1djE0em0tMi0ydi0xLjVoLTVWMTdoNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5kc2NhcGUiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVhay1hZGQiPjxwYXRoIGQ9Ik02IDNIM3YzYzEuNjYgMCAzLTEuMzQgMy0zem04IDBoLTJjMCA0Ljk3LTQuMDMgOS05IDl2MmM2LjA4IDAgMTEtNC45MyAxMS0xMXptLTQgMEg4YzAgMi43Ni0yLjI0IDUtNSA1djJjMy44NyAwIDctMy4xMyA3LTd6bTAgMThoMmMwLTQuOTcgNC4wMy05IDktOXYtMmMtNi4wNyAwLTExIDQuOTMtMTEgMTF6bTggMGgzdi0zYy0xLjY2IDAtMyAxLjM0LTMgM3ptLTQgMGgyYzAtMi43NiAyLjI0LTUgNS01di0yYy0zLjg3IDAtNyAzLjEzLTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsZWFrLXJlbW92ZSI+PHBhdGggZD0iTTEwIDNIOGMwIC4zNy0uMDQuNzItLjEyIDEuMDZsMS41OSAxLjU5QzkuODEgNC44NCAxMCAzLjk0IDEwIDN6TTMgNC4yN2wyLjg0IDIuODRDNS4wMyA3LjY3IDQuMDYgOCAzIDh2MmMxLjYxIDAgMy4wOS0uNTUgNC4yNy0xLjQ2TDguNyA5Ljk3QzcuMTQgMTEuMjQgNS4xNiAxMiAzIDEydjJjMi43MSAwIDUuMTktLjk5IDcuMTEtMi42MmwyLjUgMi41QzEwLjk5IDE1LjgxIDEwIDE4LjI5IDEwIDIxaDJjMC0yLjE2Ljc2LTQuMTQgMi4wMy01LjY5bDEuNDMgMS40M0MxNC41NSAxNy45MSAxNCAxOS4zOSAxNCAyMWgyYzAtMS4wNi4zMy0yLjAzLjg5LTIuODRMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzIDMgNC4yN3pNMTQgM2gtMmMwIDEuNS0uMzcgMi45MS0xLjAyIDQuMTZsMS40NiAxLjQ2QzEzLjQyIDYuOTggMTQgNS4wNiAxNCAzem01Ljk0IDEzLjEyYy4zNC0uMDguNjktLjEyIDEuMDYtLjEydi0yYy0uOTQgMC0xLjg0LjE5LTIuNjYuNTJsMS42IDEuNnptLTQuNTYtNC41NmwxLjQ2IDEuNDZDMTguMDkgMTIuMzcgMTkuNSAxMiAyMSAxMnYtMmMtMi4wNiAwLTMuOTguNTgtNS42MiAxLjU2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlbnMiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmtlZC1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTQiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTE2IDMuMzNjMi41OCAwIDQuNjcgMi4wOSA0LjY3IDQuNjdIMjJjMC0zLjMxLTIuNjktNi02LTZ2MS4zM00xNiA2YzEuMTEgMCAyIC44OSAyIDJoMS4zM2MwLTEuODQtMS40OS0zLjMzLTMuMzMtMy4zM1Y2Ij48L3BhdGg+PHBhdGggZD0iTTE3IDljMC0xLjExLS44OS0yLTItMlY0SDlMNy4xNyA2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOWgtNXptLTUgMTBjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzIj48cGF0aCBkPSJNMTIgMTBjLTMuODYgMC03IDMuMTQtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ni0zLjE0LTctNy03em0wLTRDNS45MyA2IDEgMTAuOTMgMSAxN2gyYzAtNC45NiA0LjA0LTkgOS05czkgNC4wNCA5IDloMmMwLTYuMDctNC45My0xMS0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy0zIj48cGF0aCBkPSJNMTkuMDEgM2gtMTRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNy41YzAgLjgzLS42NyAxLjUtMS41IDEuNS44MyAwIDEuNS42NyAxLjUgMS41VjE1YzAgMS4xMS0uOSAyLTIgMmgtNHYtMmg0di0yaC0ydi0yaDJWOWgtNFY3aDRjMS4xIDAgMiAuODkgMiAydjEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy00Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDE0aC0ydi00SDlWN2gydjRoMlY3aDJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoMmMxLjEgMCAyIC44OSAyIDJ2MmMwIDEuMTEtLjkgMi0yIDJIOXYtMmg0di0ySDlWN2g2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNiI+PHBhdGggZD0iTTExIDE1aDJ2LTJoLTJ2MnptOC0xMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDZoLTR2MmgyYzEuMSAwIDIgLjg5IDIgMnYyYzAgMS4xMS0uOSAyLTIgMmgtMmMtMS4xIDAtMi0uODktMi0yVjljMC0xLjExLjktMiAyLTJoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLW9uZSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNSAxNGgtMlY5aC0yVjdoNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy10d28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgOGMwIDEuMTEtLjkgMi0yIDJoLTJ2Mmg0djJIOXYtNGMwLTEuMTEuOS0yIDItMmgyVjlIOVY3aDRjMS4xIDAgMiAuODkgMiAydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG91cGUiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMGg4YzEuMSAwIDItLjkgMi0ydi04YzAtNS41MS00LjQ5LTEwLTEwLTEwem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb25vY2hyb21lLXBob3RvcyI+PHBhdGggZD0iTTIwIDVoLTMuMkwxNSAzSDlMNy4yIDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE0aC04di0xYy0yLjggMC01LTIuMi01LTVzMi4yLTUgNS01VjdoOHYxMnptLTMtNmMwLTIuOC0yLjItNS01LTV2MS44YzEuOCAwIDMuMiAxLjQgMy4yIDMuMnMtMS40IDMuMi0zLjIgMy4yVjE4YzIuOCAwIDUtMi4yIDUtNXptLTguMiAwYzAgMS44IDEuNCAzLjIgMy4yIDMuMlY5LjhjLTEuOCAwLTMuMiAxLjQtMy4yIDMuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1jcmVhdGlvbiI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1maWx0ZXIiPjxwYXRoIGQ9Ik0xOCA0bDIgM2gtM2wtMi0zaC0ybDIgM2gtM2wtMi0zSDhsMiAzSDdMNSA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRoLTR6bS02Ljc1IDExLjI1TDEwIDE4bC0xLjI1LTIuNzVMNiAxNGwyLjc1LTEuMjVMMTAgMTBsMS4yNSAyLjc1TDE0IDE0bC0yLjc1IDEuMjV6bTUuNjktMy4zMUwxNiAxNGwtLjk0LTIuMDZMMTMgMTFsMi4wNi0uOTRMMTYgOGwuOTQgMi4wNkwxOSAxMWwtMi4wNi45NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtdXNpYy1ub3RlIj48cGF0aCBkPSJNMTIgM3YxMC41NWMtLjU5LS4zNC0xLjI3LS41NS0yLS41NS0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRWN2g0VjNoLTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlIj48cGF0aCBkPSJNMTMgMTYuMTJjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NSAwLTMuODctMy4xMy03LTctN3MtNyAzLjEzLTcgN2MwIDMuNDcgMi41MiA2LjM0IDUuODMgNi44OVYyMEg1djJoMTR2LTJoLTZ2LTMuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlLXBlb3BsZSI+PHBhdGggZD0iTTIyLjE3IDkuMTdjMC0zLjg3LTMuMTMtNy03LTdzLTcgMy4xMy03IDdjMCAzLjQ3IDIuNTIgNi4zNCA1LjgzIDYuODlWMjBINnYtM2gxdi00YzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2NGgxdjVoMTZ2LTJoLTN2LTMuODhjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NXpNNC41IDExYy44MyAwIDEuNS0uNjcgMS41LTEuNVM1LjMzIDggNC41IDggMyA4LjY3IDMgOS41IDMuNjcgMTEgNC41IDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdmlnYXRlLWJlZm9yZSI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF2aWdhdGUtbmV4dCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbGV0dGUiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEiPjxwYXRoIGQ9Ik0yMyAxOFY2YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMi41bDIuNSAzLjAxTDE0LjUgMTFsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLWZpc2gtZXllIj48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtaG9yaXpvbnRhbCI+PHBhdGggZD0iTTIwIDYuNTR2MTAuOTFjLTIuNi0uNzctNS4yOC0xLjE2LTgtMS4xNi0yLjcyIDAtNS40LjM5LTggMS4xNlY2LjU0YzIuNi43NyA1LjI4IDEuMTYgOCAxLjE2IDIuNzIuMDEgNS40LS4zOCA4LTEuMTZNMjEuNDMgNGMtLjEgMC0uMi4wMi0uMzEuMDZDMTguMTggNS4xNiAxNS4wOSA1LjcgMTIgNS43Yy0zLjA5IDAtNi4xOC0uNTUtOS4xMi0xLjY0LS4xMS0uMDQtLjIyLS4wNi0uMzEtLjA2LS4zNCAwLS41Ny4yMy0uNTcuNjN2MTQuNzVjMCAuMzkuMjMuNjIuNTcuNjIuMSAwIC4yLS4wMi4zMS0uMDYgMi45NC0xLjEgNi4wMy0xLjY0IDkuMTItMS42NCAzLjA5IDAgNi4xOC41NSA5LjEyIDEuNjQuMTEuMDQuMjEuMDYuMzEuMDYuMzMgMCAuNTctLjIzLjU3LS42M1Y0LjYzYzAtLjQtLjI0LS42My0uNTctLjYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLXZlcnRpY2FsIj48cGF0aCBkPSJNMTkuOTQgMjEuMTJjLTEuMS0yLjk0LTEuNjQtNi4wMy0xLjY0LTkuMTIgMC0zLjA5LjU1LTYuMTggMS42NC05LjEyLjA0LS4xMS4wNi0uMjIuMDYtLjMxIDAtLjM0LS4yMy0uNTctLjYzLS41N0g0LjYzYy0uNCAwLS42My4yMy0uNjMuNTcgMCAuMS4wMi4yLjA2LjMxQzUuMTYgNS44MiA1LjcxIDguOTEgNS43MSAxMmMwIDMuMDktLjU1IDYuMTgtMS42NCA5LjEyLS4wNS4xMS0uMDcuMjItLjA3LjMxIDAgLjMzLjIzLjU3LjYzLjU3aDE0Ljc1Yy4zOSAwIC42My0uMjQuNjMtLjU3LS4wMS0uMS0uMDMtLjItLjA3LS4zMXpNNi41NCAyMGMuNzctMi42IDEuMTYtNS4yOCAxLjE2LTggMC0yLjcyLS4zOS01LjQtMS4xNi04aDEwLjkxYy0uNzcgMi42LTEuMTYgNS4yOC0xLjE2IDggMCAyLjcyLjM5IDUuNCAxLjE2IDhINi41NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS13aWRlLWFuZ2xlIj48cGF0aCBkPSJNMTIgNmMyLjQ1IDAgNC43MS4yIDcuMjkuNjQuNDcgMS43OC43MSAzLjU4LjcxIDUuMzYgMCAxLjc4LS4yNCAzLjU4LS43MSA1LjM2LTIuNTguNDQtNC44NC42NC03LjI5LjY0cy00LjcxLS4yLTcuMjktLjY0QzQuMjQgMTUuNTggNCAxMy43OCA0IDEyYzAtMS43OC4yNC0zLjU4LjcxLTUuMzZDNy4yOSA2LjIgOS41NSA2IDEyIDZtMC0yYy0yLjczIDAtNS4yMi4yNC03Ljk1LjcybC0uOTMuMTYtLjI1LjlDMi4yOSA3Ljg1IDIgOS45MyAyIDEycy4yOSA0LjE1Ljg3IDYuMjJsLjI1Ljg5LjkzLjE2YzIuNzMuNDkgNS4yMi43MyA3Ljk1LjczczUuMjItLjI0IDcuOTUtLjcybC45My0uMTYuMjUtLjg5Yy41OC0yLjA4Ljg3LTQuMTYuODctNi4yM3MtLjI5LTQuMTUtLjg3LTYuMjJsLS4yNS0uODktLjkzLS4xNkMxNy4yMiA0LjI0IDE0LjczIDQgMTIgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90byI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tYWxidW0iPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6bTAgMTVsMy0zLjg2IDIuMTQgMi41OCAzLTMuODZMMTggMTlINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMkw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDJIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tZmlsdGVyIj48cGF0aCBkPSJNMTkuMDIgMTB2OUg1VjVoOVYzSDUuMDJjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTloLTJ6TTE3IDEwbC45NC0yLjA2TDIwIDdsLTIuMDYtLjk0TDE3IDRsLS45NCAyLjA2TDE0IDdsMi4wNi45NHptLTMuNzUuNzVMMTIgOGwtMS4yNSAyLjc1TDggMTJsMi43NSAxLjI1TDEyIDE2bDEuMjUtMi43NUwxNiAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1saWJyYXJ5Ij48cGF0aCBkPSJNMjIgMTZWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yem0tMTEtNGwyLjAzIDIuNzFMMTYgMTFsNCA1SDhsMy00ek0yIDZ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1hY3R1YWwiPjxwYXRoIGQ9Ik0yMSAzSDNDMiAzIDEgNCAxIDV2MTRjMCAxLjEuOSAyIDIgMmgxOGMxIDAgMi0xIDItMlY1YzAtMS0xLTItMi0yek01IDE3bDMuNS00LjUgMi41IDMuMDFMMTQuNSAxMWw0LjUgNkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LWxhcmdlIj48cGF0aCBkPSJNMjEgMTVoMnYyaC0ydi0yem0wLTRoMnYyaC0ydi0yem0yIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTMgM2gydjJoLTJWM3ptOCA0aDJ2MmgtMlY3em0wLTR2MmgyYzAtMS0xLTItMi0yek0xIDdoMnYySDFWN3ptMTYtNGgydjJoLTJWM3ptMCAxNmgydjJoLTJ2LTJ6TTMgM0MyIDMgMSA0IDEgNWgyVjN6bTYgMGgydjJIOVYzek01IDNoMnYySDVWM3ptLTQgOHY4YzAgMS4xLjkgMiAyIDJoMTJWMTFIMXptMiA4bDIuNS0zLjIxIDEuNzkgMi4xNSAyLjUtMy4yMkwxMyAxOUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LXNtYWxsIj48cGF0aCBkPSJNMjMgMTVoLTJ2Mmgydi0yem0wLTRoLTJ2Mmgydi0yem0wIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTUgM2gtMnYyaDJWM3ptOCA0aC0ydjJoMlY3em0tMi00djJoMmMwLTEtMS0yLTItMnpNMyAyMWg4di02SDF2NGMwIDEuMS45IDIgMiAyek0zIDdIMXYyaDJWN3ptMTIgMTJoLTJ2Mmgydi0yem00LTE2aC0ydjJoMlYzem0wIDE2aC0ydjJoMnYtMnpNMyAzQzIgMyAxIDQgMSA1aDJWM3ptMCA4SDF2Mmgydi0yem04LThIOXYyaDJWM3pNNyAzSDV2MmgyVjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1hcy1wZGYiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTguNSA3LjVjMCAuODMtLjY3IDEuNS0xLjUgMS41SDl2Mkg3LjVWN0gxMGMuODMgMCAxLjUuNjcgMS41IDEuNXYxem01IDJjMCAuODMtLjY3IDEuNS0xLjUgMS41aC0yLjVWN0gxNWMuODMgMCAxLjUuNjcgMS41IDEuNXYzem00LTNIMTl2MWgxLjVWMTFIMTl2MmgtMS41VjdoM3YxLjV6TTkgOS41aDF2LTFIOXYxek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTAgNS41aDF2LTNoLTF2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3J0cmFpdCI+PHBhdGggZD0iTTEyIDEyLjI1YzEuMjQgMCAyLjI1LTEuMDEgMi4yNS0yLjI1UzEzLjI0IDcuNzUgMTIgNy43NSA5Ljc1IDguNzYgOS43NSAxMHMxLjAxIDIuMjUgMi4yNSAyLjI1em00LjUgNGMwLTEuNS0zLTIuMjUtNC41LTIuMjVzLTQuNS43NS00LjUgMi4yNVYxN2g5di0uNzV6TTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtcmVkLWV5ZSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtOTAtZGVncmVlcy1jY3ciPjxwYXRoIGQ9Ik03LjM0IDYuNDFMLjg2IDEyLjlsNi40OSA2LjQ4IDYuNDktNi40OC02LjUtNi40OXpNMy42OSAxMi45bDMuNjYtMy42NkwxMSAxMi45bC0zLjY2IDMuNjYtMy42NS0zLjY2em0xNS42Ny02LjI2QzE3LjYxIDQuODggMTUuMyA0IDEzIDRWLjc2TDguNzYgNSAxMyA5LjI0VjZjMS43OSAwIDMuNTguNjggNC45NSAyLjA1IDIuNzMgMi43MyAyLjczIDcuMTcgMCA5LjlDMTYuNTggMTkuMzIgMTQuNzkgMjAgMTMgMjBjLS45NyAwLTEuOTQtLjIxLTIuODQtLjYxbC0xLjQ5IDEuNDlDMTAuMDIgMjEuNjIgMTEuNTEgMjIgMTMgMjJjMi4zIDAgNC42MS0uODggNi4zNi0yLjY0IDMuNTItMy41MSAzLjUyLTkuMjEgMC0xMi43MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtbGVmdCI+PHBhdGggZD0iTTcuMTEgOC41M0w1LjcgNy4xMUM0LjggOC4yNyA0LjI0IDkuNjEgNC4wNyAxMWgyLjAyYy4xNC0uODcuNDktMS43MiAxLjAyLTIuNDd6TTYuMDkgMTNINC4wN2MuMTcgMS4zOS43MiAyLjczIDEuNjIgMy44OWwxLjQxLTEuNDJjLS41Mi0uNzUtLjg3LTEuNTktMS4wMS0yLjQ3em0xLjAxIDUuMzJjMS4xNi45IDIuNTEgMS40NCAzLjkgMS42MVYxNy45Yy0uODctLjE1LTEuNzEtLjQ5LTIuNDYtMS4wM0w3LjEgMTguMzJ6TTEzIDQuMDdWMUw4LjQ1IDUuNTUgMTMgMTBWNi4wOWMyLjg0LjQ4IDUgMi45NCA1IDUuOTFzLTIuMTYgNS40My01IDUuOTF2Mi4wMmMzLjk1LS40OSA3LTMuODUgNy03Ljkzcy0zLjA1LTcuNDQtNy03LjkzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS1yaWdodCI+PHBhdGggZD0iTTE1LjU1IDUuNTVMMTEgMXYzLjA3QzcuMDYgNC41NiA0IDcuOTIgNCAxMnMzLjA1IDcuNDQgNyA3Ljkzdi0yLjAyYy0yLjg0LS40OC01LTIuOTQtNS01LjkxczIuMTYtNS40MyA1LTUuOTFWMTBsNC41NS00LjQ1ek0xOS45MyAxMWMtLjE3LTEuMzktLjcyLTIuNzMtMS42Mi0zLjg5bC0xLjQyIDEuNDJjLjU0Ljc1Ljg4IDEuNiAxLjAyIDIuNDdoMi4wMnpNMTMgMTcuOXYyLjAyYzEuMzktLjE3IDIuNzQtLjcxIDMuOS0xLjYxbC0xLjQ0LTEuNDRjLS43NS41NC0xLjU5Ljg5LTIuNDYgMS4wM3ptMy44OS0yLjQybDEuNDIgMS40MWMuOS0xLjE2IDEuNDUtMi41IDEuNjItMy44OWgtMi4wMmMtLjE0Ljg3LS40OCAxLjcyLTEuMDIgMi40OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzbGlkZXNob3ciPjxwYXRoIGQ9Ik0xMCA4djhsNS00LTUtNHptOS01SDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RyYWlnaHRlbiI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTBIM1Y4aDJ2NGgyVjhoMnY0aDJWOGgydjRoMlY4aDJ2NGgyVjhoMnY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0eWxlIj48cGF0aCBkPSJNMi41MyAxOS42NWwxLjM0LjU2di05LjAzbC0yLjQzIDUuODZjLS40MSAxLjAyLjA4IDIuMTkgMS4wOSAyLjYxem0xOS41LTMuN0wxNy4wNyAzLjk4Yy0uMzEtLjc1LTEuMDQtMS4yMS0xLjgxLTEuMjMtLjI2IDAtLjUzLjA0LS43OS4xNUw3LjEgNS45NWMtLjc1LjMxLTEuMjEgMS4wMy0xLjIzIDEuOC0uMDEuMjcuMDQuNTQuMTUuOGw0Ljk2IDExLjk3Yy4zMS43NiAxLjA1IDEuMjIgMS44MyAxLjIzLjI2IDAgLjUyLS4wNS43Ny0uMTVsNy4zNi0zLjA1YzEuMDItLjQyIDEuNTEtMS41OSAxLjA5LTIuNnpNNy44OCA4Ljc1Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bS0yIDExYzAgMS4xLjkgMiAyIDJoMS40NWwtMy40NS04LjM0djYuMzR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dpdGNoLWNhbWVyYSI+PHBhdGggZD0iTTIwIDRoLTMuMTdMMTUgMkg5TDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS01IDExLjVWMTNIOXYyLjVMNS41IDEyIDkgOC41VjExaDZWOC41bDMuNSAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2l0Y2gtdmlkZW8iPjxwYXRoIGQ9Ik0xOCA5LjVWNmMwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDE0Yy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTNsLTQgNHptLTUgNlYxM0g3djIuNUwzLjUgMTIgNyA4LjVWMTFoNlY4LjVsMy41IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhZy1mYWNlcyI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptMy41LTljLjgzIDAgMS41LS42NyAxLjUtMS41UzE2LjMzIDggMTUuNSA4IDE0IDguNjcgMTQgOS41cy42NyAxLjUgMS41IDEuNXptLTcgMGMuODMgMCAxLjUtLjY3IDEuNS0xLjVTOS4zMyA4IDguNSA4IDcgOC42NyA3IDkuNSA3LjY3IDExIDguNSAxMXptMy41IDYuNWMyLjMzIDAgNC4zMS0xLjQ2IDUuMTEtMy41SDYuODljLjggMi4wNCAyLjc4IDMuNSA1LjExIDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0ZXh0dXJlIj48cGF0aCBkPSJNMTkuNTEgMy4wOEwzLjA4IDE5LjUxYy4wOS4zNC4yNy42NS41MS45LjI1LjI0LjU2LjQyLjkuNTFMMjAuOTMgNC40OWMtLjE5LS42OS0uNzMtMS4yMy0xLjQyLTEuNDF6TTExLjg4IDNMMyAxMS44OHYyLjgzTDE0LjcxIDNoLTIuODN6TTUgM2MtMS4xIDAtMiAuOS0yIDJ2Mmw0LTRINXptMTQgMThjLjU1IDAgMS4wNS0uMjIgMS40MS0uNTkuMzctLjM2LjU5LS44Ni41OS0xLjQxdi0ybC00IDRoMnptLTkuNzEgMGgyLjgzTDIxIDEyLjEyVjkuMjlMOS4yOSAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lbGFwc2UiPjxwYXRoIGQ9Ik0xNi4yNCA3Ljc2QzE1LjA3IDYuNTkgMTMuNTQgNiAxMiA2djZsLTQuMjQgNC4yNGMyLjM0IDIuMzQgNi4xNCAyLjM0IDguNDkgMCAyLjM0LTIuMzQgMi4zNC02LjE0LS4wMS04LjQ4ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lciI+PHBhdGggZD0iTTE1IDFIOXYyaDZWMXptLTQgMTNoMlY4aC0ydjZ6bTguMDMtNi42MWwxLjQyLTEuNDJjLS40My0uNTEtLjktLjk5LTEuNDEtMS40MWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5IDktNC4wMyA5LTljMC0yLjEyLS43NC00LjA3LTEuOTctNS42MXpNMTIgMjBjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTEwIj48cGF0aCBkPSJNMCA3LjcyVjkuNGwzLTFWMThoMlY2aC0uMjVMMCA3Ljcyem0yMy43OCA2LjY1Yy0uMTQtLjI4LS4zNS0uNTMtLjYzLS43NC0uMjgtLjIxLS42MS0uMzktMS4wMS0uNTNzLS44NS0uMjctMS4zNS0uMzhjLS4zNS0uMDctLjY0LS4xNS0uODctLjIzLS4yMy0uMDgtLjQxLS4xNi0uNTUtLjI1LS4xNC0uMDktLjIzLS4xOS0uMjgtLjMtLjA1LS4xMS0uMDgtLjI0LS4wOC0uMzkgMC0uMTQuMDMtLjI4LjA5LS40MS4wNi0uMTMuMTUtLjI1LjI3LS4zNC4xMi0uMS4yNy0uMTguNDUtLjI0cy40LS4wOS42NC0uMDljLjI1IDAgLjQ3LjA0LjY2LjExLjE5LjA3LjM1LjE3LjQ4LjI5LjEzLjEyLjIyLjI2LjI5LjQyLjA2LjE2LjEuMzIuMS40OWgxLjk1YzAtLjM5LS4wOC0uNzUtLjI0LTEuMDktLjE2LS4zNC0uMzktLjYzLS42OS0uODgtLjMtLjI1LS42Ni0uNDQtMS4wOS0uNTlDMjEuNDkgOS4wNyAyMSA5IDIwLjQ2IDljLS41MSAwLS45OC4wNy0xLjM5LjIxLS40MS4xNC0uNzcuMzMtMS4wNi41Ny0uMjkuMjQtLjUxLjUyLS42Ny44NC0uMTYuMzItLjIzLjY1LS4yMyAxLjAxcy4wOC42OS4yMy45NmMuMTUuMjguMzYuNTIuNjQuNzMuMjcuMjEuNi4zOC45OC41My4zOC4xNC44MS4yNiAxLjI3LjM2LjM5LjA4LjcxLjE3Ljk1LjI2cy40My4xOS41Ny4yOWMuMTMuMS4yMi4yMi4yNy4zNC4wNS4xMi4wNy4yNS4wNy4zOSAwIC4zMi0uMTMuNTctLjQuNzctLjI3LjItLjY2LjI5LTEuMTcuMjktLjIyIDAtLjQzLS4wMi0uNjQtLjA4LS4yMS0uMDUtLjQtLjEzLS41Ni0uMjQtLjE3LS4xMS0uMy0uMjYtLjQxLS40NC0uMTEtLjE4LS4xNy0uNDEtLjE4LS42N2gtMS44OWMwIC4zNi4wOC43MS4yNCAxLjA1LjE2LjM0LjM5LjY1LjcuOTMuMzEuMjcuNjkuNDkgMS4xNS42Ni40Ni4xNy45OC4yNSAxLjU4LjI1LjUzIDAgMS4wMS0uMDYgMS40NC0uMTkuNDMtLjEzLjgtLjMxIDEuMTEtLjU0LjMxLS4yMy41NC0uNTEuNzEtLjgzLjE3LS4zMi4yNS0uNjcuMjUtMS4wNi0uMDItLjQtLjA5LS43NC0uMjQtMS4wMnptLTkuOTYtNy4zMmMtLjM0LS40LS43NS0uNy0xLjIzLS44OC0uNDctLjE4LTEuMDEtLjI3LTEuNTktLjI3LS41OCAwLTEuMTEuMDktMS41OS4yNy0uNDguMTgtLjg5LjQ3LTEuMjMuODgtLjM0LjQxLS42LjkzLS43OSAxLjU5LS4xOC42NS0uMjggMS40NS0uMjggMi4zOXYxLjkyYzAgLjk0LjA5IDEuNzQuMjggMi4zOS4xOS42Ni40NSAxLjE5LjggMS42LjM0LjQxLjc1LjcxIDEuMjMuODkuNDguMTggMS4wMS4yOCAxLjU5LjI4LjU5IDAgMS4xMi0uMDkgMS41OS0uMjguNDgtLjE4Ljg4LS40OCAxLjIyLS44OS4zNC0uNDEuNi0uOTQuNzgtMS42LjE4LS42NS4yOC0xLjQ1LjI4LTIuMzl2LTEuOTJjMC0uOTQtLjA5LTEuNzQtLjI4LTIuMzktLjE4LS42Ni0uNDQtMS4xOS0uNzgtMS41OXptLS45MiA2LjE3YzAgLjYtLjA0IDEuMTEtLjEyIDEuNTMtLjA4LjQyLS4yLjc2LS4zNiAxLjAyLS4xNi4yNi0uMzYuNDUtLjU5LjU3LS4yMy4xMi0uNTEuMTgtLjgyLjE4LS4zIDAtLjU4LS4wNi0uODItLjE4cy0uNDQtLjMxLS42LS41N2MtLjE2LS4yNi0uMjktLjYtLjM4LTEuMDItLjA5LS40Mi0uMTMtLjkzLS4xMy0xLjUzdi0yLjVjMC0uNi4wNC0xLjExLjEzLTEuNTIuMDktLjQxLjIxLS43NC4zOC0xIC4xNi0uMjUuMzYtLjQzLjYtLjU1LjI0LS4xMS41MS0uMTcuODEtLjE3LjMxIDAgLjU4LjA2LjgxLjE3LjI0LjExLjQ0LjI5LjYuNTUuMTYuMjUuMjkuNTguMzcuOTkuMDguNDEuMTMuOTIuMTMgMS41MnYyLjUxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTMiPjxwYXRoIGQ9Ik0xMS42MSAxMi45N2MtLjE2LS4yNC0uMzYtLjQ2LS42Mi0uNjUtLjI1LS4xOS0uNTYtLjM1LS45My0uNDguMy0uMTQuNTctLjMuOC0uNS4yMy0uMi40Mi0uNDEuNTctLjY0LjE1LS4yMy4yNy0uNDYuMzQtLjcxLjA4LS4yNC4xMS0uNDkuMTEtLjczIDAtLjU1LS4wOS0xLjA0LS4yOC0xLjQ2LS4xOC0uNDItLjQ0LS43Ny0uNzgtMS4wNi0uMzMtLjI4LS43My0uNS0xLjItLjY0LS40NS0uMTMtLjk3LS4yLTEuNTMtLjItLjU1IDAtMS4wNi4wOC0xLjUyLjI0LS40Ny4xNy0uODcuNC0xLjIuNjktLjMzLjI5LS42LjYzLS43OCAxLjAzLS4yLjM5LS4yOS44My0uMjkgMS4yOWgxLjk4YzAtLjI2LjA1LS40OS4xNC0uNjkuMDktLjIuMjItLjM4LjM4LS41Mi4xNy0uMTQuMzYtLjI1LjU4LS4zMy4yMi0uMDguNDYtLjEyLjczLS4xMi42MSAwIDEuMDYuMTYgMS4zNi40Ny4zLjMxLjQ0Ljc1LjQ0IDEuMzIgMCAuMjctLjA0LjUyLS4xMi43NC0uMDguMjItLjIxLjQxLS4zOC41Ny0uMTcuMTYtLjM4LjI4LS42My4zNy0uMjUuMDktLjU1LjEzLS44OS4xM0g2LjcydjEuNTdINy45Yy4zNCAwIC42NC4wNC45MS4xMS4yNy4wOC41LjE5LjY5LjM1LjE5LjE2LjM0LjM2LjQ0LjYxLjEuMjQuMTYuNTQuMTYuODcgMCAuNjItLjE4IDEuMDktLjUzIDEuNDItLjM1LjMzLS44NC40OS0xLjQ1LjQ5LS4yOSAwLS41Ni0uMDQtLjgtLjEzLS4yNC0uMDgtLjQ0LS4yLS42MS0uMzYtLjE3LS4xNi0uMy0uMzQtLjM5LS41Ni0uMDktLjIyLS4xNC0uNDYtLjE0LS43Mkg0LjE5YzAgLjU1LjExIDEuMDMuMzIgMS40NS4yMS40Mi41Ljc3Ljg2IDEuMDVzLjc3LjQ5IDEuMjQuNjMuOTYuMjEgMS40OC4yMWMuNTcgMCAxLjA5LS4wOCAxLjU4LS4yMy40OS0uMTUuOTEtLjM4IDEuMjYtLjY4LjM2LS4zLjY0LS42Ni44NC0xLjEuMi0uNDMuMy0uOTMuMy0xLjQ4IDAtLjI5LS4wNC0uNTgtLjExLS44Ni0uMDgtLjI1LS4xOS0uNTEtLjM1LS43NnptOS4yNiAxLjRjLS4xNC0uMjgtLjM1LS41My0uNjMtLjc0LS4yOC0uMjEtLjYxLS4zOS0xLjAxLS41M3MtLjg1LS4yNy0xLjM1LS4zOGMtLjM1LS4wNy0uNjQtLjE1LS44Ny0uMjMtLjIzLS4wOC0uNDEtLjE2LS41NS0uMjUtLjE0LS4wOS0uMjMtLjE5LS4yOC0uMy0uMDUtLjExLS4wOC0uMjQtLjA4LS4zOXMuMDMtLjI4LjA5LS40MWMuMDYtLjEzLjE1LS4yNS4yNy0uMzQuMTItLjEuMjctLjE4LjQ1LS4yNHMuNC0uMDkuNjQtLjA5Yy4yNSAwIC40Ny4wNC42Ni4xMS4xOS4wNy4zNS4xNy40OC4yOS4xMy4xMi4yMi4yNi4yOS40Mi4wNi4xNi4xLjMyLjEuNDloMS45NWMwLS4zOS0uMDgtLjc1LS4yNC0xLjA5LS4xNi0uMzQtLjM5LS42My0uNjktLjg4LS4zLS4yNS0uNjYtLjQ0LTEuMDktLjU5LS40My0uMTUtLjkyLS4yMi0xLjQ2LS4yMi0uNTEgMC0uOTguMDctMS4zOS4yMS0uNDEuMTQtLjc3LjMzLTEuMDYuNTctLjI5LjI0LS41MS41Mi0uNjcuODQtLjE2LjMyLS4yMy42NS0uMjMgMS4wMXMuMDguNjguMjMuOTZjLjE1LjI4LjM3LjUyLjY0LjczLjI3LjIxLjYuMzguOTguNTMuMzguMTQuODEuMjYgMS4yNy4zNi4zOS4wOC43MS4xNy45NS4yNnMuNDMuMTkuNTcuMjljLjEzLjEuMjIuMjIuMjcuMzQuMDUuMTIuMDcuMjUuMDcuMzkgMCAuMzItLjEzLjU3LS40Ljc3LS4yNy4yLS42Ni4yOS0xLjE3LjI5LS4yMiAwLS40My0uMDItLjY0LS4wOC0uMjEtLjA1LS40LS4xMy0uNTYtLjI0LS4xNy0uMTEtLjMtLjI2LS40MS0uNDQtLjExLS4xOC0uMTctLjQxLS4xOC0uNjdoLTEuODljMCAuMzYuMDguNzEuMjQgMS4wNS4xNi4zNC4zOS42NS43LjkzLjMxLjI3LjY5LjQ5IDEuMTUuNjYuNDYuMTcuOTguMjUgMS41OC4yNS41MyAwIDEuMDEtLjA2IDEuNDQtLjE5LjQzLS4xMy44LS4zMSAxLjExLS41NC4zMS0uMjMuNTQtLjUxLjcxLS44My4xNy0uMzIuMjUtLjY3LjI1LTEuMDYtLjAyLS40LS4wOS0uNzQtLjI0LTEuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItb2ZmIj48cGF0aCBkPSJNMTkuMDQgNC41NWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy0xLjgzIDAtMy41My41NS00Ljk1IDEuNDhsMS40NiAxLjQ2QzkuNTMgNi4zNSAxMC43MyA2IDEyIDZjMy44NyAwIDcgMy4xMyA3IDcgMCAxLjI3LS4zNSAyLjQ3LS45NCAzLjQ5bDEuNDUgMS40NUMyMC40NSAxNi41MyAyMSAxNC44MyAyMSAxM2MwLTIuMTItLjc0LTQuMDctMS45Ny01LjYxbDEuNDItMS40Mi0xLjQxLTEuNDJ6TTE1IDFIOXYyaDZWMXptLTQgOC40NGwyIDJWOGgtMnYxLjQ0ek0zLjAyIDRMMS43NSA1LjI3IDQuNSA4LjAzQzMuNTUgOS40NSAzIDExLjE2IDMgMTNjMCA0Ljk3IDQuMDIgOSA5IDkgMS44NCAwIDMuNTUtLjU1IDQuOTgtMS41bDIuNSAyLjUgMS4yNy0xLjI3LTcuNzEtNy43MUwzLjAyIDR6TTEyIDIwYy0zLjg3IDAtNy0zLjEzLTctNyAwLTEuMjguMzUtMi40OC45NS0zLjUybDkuNTYgOS41NmMtMS4wMy42MS0yLjIzLjk2LTMuNTEuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9uYWxpdHkiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNy45M2MtMy45NC0uNDktNy0zLjg1LTctNy45M3MzLjA1LTcuNDQgNy03LjkzdjE1Ljg2em0yLTE1Ljg2YzEuMDMuMTMgMiAuNDUgMi44Ny45M0gxM3YtLjkzek0xMyA3aDUuMjRjLjI1LjMxLjQ4LjY1LjY4IDFIMTNWN3ptMCAzaDYuNzRjLjA4LjMzLjE1LjY2LjE5IDFIMTN2LTF6bTAgOS45M1YxOWgyLjg3Yy0uODcuNDgtMS44NC44LTIuODcuOTN6TTE4LjI0IDE3SDEzdi0xaDUuOTJjLS4yLjM1LS40My42OS0uNjggMXptMS41LTNIMTN2LTFoNi45M2MtLjA0LjM0LS4xMS42Ny0uMTkgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFuc2Zvcm0iPjxwYXRoIGQ9Ik0yMiAxOHYtMkg4VjRoMkw3IDEgNCA0aDJ2MkgydjJoNHY4YzAgMS4xLjkgMiAyIDJoOHYyaC0ybDMgMyAzLTNoLTJ2LTJoNHpNMTAgOGg2djZoMlY4YzAtMS4xLS45LTItMi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVuZSI+PHBhdGggZD0iTTMgMTd2Mmg2di0ySDN6TTMgNXYyaDEwVjVIM3ptMTAgMTZ2LTJoOHYtMmgtOHYtMmgtMnY2aDJ6TTcgOXYySDN2Mmg0djJoMlY5SDd6bTE0IDR2LTJIMTF2MmgxMHptLTYtNGgyVjdoNFY1aC00VjNoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbWZ5Ij48cGF0aCBkPSJNMyA5aDRWNUgzdjR6bTAgNWg0di00SDN2NHptNSAwaDR2LTRIOHY0em01IDBoNHYtNGgtNHY0ek04IDloNFY1SDh2NHptNS00djRoNFY1aC00em01IDloNHYtNGgtNHY0ek0zIDE5aDR2LTRIM3Y0em01IDBoNHYtNEg4djR6bTUgMGg0di00aC00djR6bTUgMGg0di00aC00djR6bTAtMTR2NGg0VjVoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb21wYWN0Ij48cGF0aCBkPSJNMyAxOWg2di03SDN2N3ptNyAwaDEydi03SDEwdjd6TTMgNXY2aDE5VjVIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWduZXR0ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSAxNWMtNC40MiAwLTgtMi42OS04LTZzMy41OC02IDgtNiA4IDIuNjkgOCA2LTMuNTggNi04IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItYXV0byI+PHBhdGggZD0iTTYuODUgMTIuNjVoMi4zTDggOWwtMS4xNSAzLjY1ek0yMiA3bC0xLjIgNi4yOUwxOS4zIDdoLTEuNmwtMS40OSA2LjI5TDE1IDdoLS43NkMxMi43NyA1LjE3IDEwLjUzIDQgOCA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4YzMuMTMgMCA1Ljg0LTEuODEgNy4xNS00LjQzbC4xLjQzSDE3bDEuNS02LjFMMjAgMTZoMS43NWwyLjA1LTlIMjJ6bS0xMS43IDlsLS43LTJINi40bC0uNyAySDMuOEw3IDdoMmwzLjIgOWgtMS45eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWNsb3VkeSI+PHBhdGggZD0iTTE5LjM2IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjQtNC45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1pbmNhbmRlc2NlbnQiPjxwYXRoIGQ9Ik0zLjU1IDE4LjU0bDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6TTExIDIyLjQ1aDJWMTkuNWgtMnYyLjk1ek00IDEwLjVIMXYyaDN2LTJ6bTExLTQuMTlWMS41SDl2NC44MUM3LjIxIDcuMzUgNiA5LjI4IDYgMTEuNWMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMi4yMi0xLjIxLTQuMTUtMy01LjE5em01IDQuMTl2Mmgzdi0yaC0zem0tMi43NiA3LjY2bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWlyaWRlc2NlbnQiPjxwYXRoIGQ9Ik01IDE0LjVoMTR2LTZINXY2ek0xMSAuNTVWMy41aDJWLjU1aC0yem04LjA0IDIuNWwtMS43OSAxLjc5IDEuNDEgMS40MSAxLjgtMS43OS0xLjQyLTEuNDF6TTEzIDIyLjQ1VjE5LjVoLTJ2Mi45NWgyem03LjQ1LTMuOTFsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuOCAxLjQyLTEuNDJ6TTMuNTUgNC40NmwxLjc5IDEuNzkgMS40MS0xLjQxLTEuNzktMS43OS0xLjQxIDEuNDF6bTEuNDEgMTUuNDlsMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Itc3VubnkiPjxwYXRoIGQ9Ik02Ljc2IDQuODRsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuNzkgMS40Mi0xLjQxek00IDEwLjVIMXYyaDN2LTJ6bTktOS45NWgtMlYzLjVoMlYuNTV6bTcuNDUgMy45MWwtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDEgMS43OS0xLjc5em0tMy4yMSAxMy43bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40ek0yMCAxMC41djJoM3YtMmgtM3ptLTgtNWMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bS0xIDE2Ljk1aDJWMTkuNWgtMnYyLjk1em0tNy40NS0zLjkxbDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeWJlLmNvbnRlbnQpO3ZhciB2YmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpY29ucyIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iM2Qtcm90YXRpb24iPjxwYXRoIGQ9Ik03LjUyIDIxLjQ4QzQuMjUgMTkuOTQgMS45MSAxNi43NiAxLjU1IDEzSC4wNUMuNTYgMTkuMTYgNS43MSAyNCAxMiAyNGwuNjYtLjAzLTMuODEtMy44MS0xLjMzIDEuMzJ6bS44OS02LjUyYy0uMTkgMC0uMzctLjAzLS41Mi0uMDgtLjE2LS4wNi0uMjktLjEzLS40LS4yNC0uMTEtLjEtLjItLjIyLS4yNi0uMzctLjA2LS4xNC0uMDktLjMtLjA5LS40N2gtMS4zYzAgLjM2LjA3LjY4LjIxLjk1LjE0LjI3LjMzLjUuNTYuNjkuMjQuMTguNTEuMzIuODIuNDEuMy4xLjYyLjE1Ljk2LjE1LjM3IDAgLjcyLS4wNSAxLjAzLS4xNS4zMi0uMS42LS4yNS44My0uNDRzLjQyLS40My41NS0uNzJjLjEzLS4yOS4yLS42MS4yLS45NyAwLS4xOS0uMDItLjM4LS4wNy0uNTYtLjA1LS4xOC0uMTItLjM1LS4yMy0uNTEtLjEtLjE2LS4yNC0uMy0uNC0uNDMtLjE3LS4xMy0uMzctLjIzLS42MS0uMzEuMi0uMDkuMzctLjIuNTItLjMzLjE1LS4xMy4yNy0uMjcuMzctLjQyLjEtLjE1LjE3LS4zLjIyLS40Ni4wNS0uMTYuMDctLjMyLjA3LS40OCAwLS4zNi0uMDYtLjY4LS4xOC0uOTYtLjEyLS4yOC0uMjktLjUxLS41MS0uNjktLjItLjE5LS40Ny0uMzMtLjc3LS40M0M5LjEgOC4wNSA4Ljc2IDggOC4zOSA4Yy0uMzYgMC0uNjkuMDUtMSAuMTYtLjMuMTEtLjU3LjI2LS43OS40NS0uMjEuMTktLjM4LjQxLS41MS42Ny0uMTIuMjYtLjE4LjU0LS4xOC44NWgxLjNjMC0uMTcuMDMtLjMyLjA5LS40NXMuMTQtLjI1LjI1LS4zNGMuMTEtLjA5LjIzLS4xNy4zOC0uMjIuMTUtLjA1LjMtLjA4LjQ4LS4wOC40IDAgLjcuMS44OS4zMS4xOS4yLjI5LjQ5LjI5Ljg2IDAgLjE4LS4wMy4zNC0uMDguNDktLjA1LjE1LS4xNC4yNy0uMjUuMzctLjExLjEtLjI1LjE4LS40MS4yNC0uMTYuMDYtLjM2LjA5LS41OC4wOUg3LjV2MS4wM2guNzdjLjIyIDAgLjQyLjAyLjYuMDdzLjMzLjEzLjQ1LjIzYy4xMi4xMS4yMi4yNC4yOS40LjA3LjE2LjEuMzUuMS41NyAwIC40MS0uMTIuNzItLjM1LjkzLS4yMy4yMy0uNTUuMzMtLjk1LjMzem04LjU1LTUuOTJjLS4zMi0uMzMtLjctLjU5LTEuMTQtLjc3LS40My0uMTgtLjkyLS4yNy0xLjQ2LS4yN0gxMnY4aDIuM2MuNTUgMCAxLjA2LS4wOSAxLjUxLS4yNy40NS0uMTguODQtLjQzIDEuMTYtLjc2LjMyLS4zMy41Ny0uNzMuNzQtMS4xOS4xNy0uNDcuMjYtLjk5LjI2LTEuNTd2LS40YzAtLjU4LS4wOS0xLjEtLjI2LTEuNTctLjE4LS40Ny0uNDMtLjg3LS43NS0xLjJ6bS0uMzkgMy4xNmMwIC40Mi0uMDUuNzktLjE0IDEuMTMtLjEuMzMtLjI0LjYyLS40My44NS0uMTkuMjMtLjQzLjQxLS43MS41My0uMjkuMTItLjYyLjE4LS45OS4xOGgtLjkxVjkuMTJoLjk3Yy43MiAwIDEuMjcuMjMgMS42NC42OS4zOC40Ni41NyAxLjEyLjU3IDEuOTl2LjR6TTEyIDBsLS42Ni4wMyAzLjgxIDMuODEgMS4zMy0xLjMzYzMuMjcgMS41NSA1LjYxIDQuNzIgNS45NiA4LjQ4aDEuNUMyMy40NCA0Ljg0IDE4LjI5IDAgMTIgMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmlsaXR5Ij48cGF0aCBkPSJNMTIgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6bTkgN2gtNnYxM2gtMnYtNmgtMnY2SDlWOUgzVjdoMTh2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xOSAxM3YtMmMtMS41NC4wMi0zLjA5LS43NS00LjA3LTEuODNsLTEuMjktMS40M2MtLjE3LS4xOS0uMzgtLjM0LS42MS0uNDUtLjAxIDAtLjAxLS4wMS0uMDItLjAxSDEzYy0uMzUtLjItLjc1LS4zLTEuMTktLjI2QzEwLjc2IDcuMTEgMTAgOC4wNCAxMCA5LjA5VjE1YzAgMS4xLjkgMiAyIDJoNXY1aDJ2LTUuNWMwLTEuMS0uOS0yLTItMmgtM3YtMy40NWMxLjI5IDEuMDcgMy4yNSAxLjk0IDUgMS45NXptLTYuMTcgNWMtLjQxIDEuMTYtMS41MiAyLTIuODMgMi0xLjY2IDAtMy0xLjM0LTMtMyAwLTEuMzEuODQtMi40MSAyLTIuODNWMTIuMWMtMi4yOC40Ni00IDIuNDgtNCA0LjkgMCAyLjc2IDIuMjQgNSA1IDUgMi40MiAwIDQuNDQtMS43MiA0LjktNGgtMi4wN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1iYWxhbmNlLXdhbGxldCI+PHBhdGggZD0iTTIxIDE4djFjMCAxLjEtLjkgMi0yIDJINWMtMS4xMSAwLTItLjktMi0yVjVjMC0xLjEuODktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ2MWgtOWMtMS4xMSAwLTIgLjktMiAydjhjMCAxLjEuODkgMiAyIDJoOXptLTktMmgxMFY4SDEydjh6bTQtMi41Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJveCI+PHBhdGggZD0iTTMgNXYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0ySDVjLTEuMTEgMC0yIC45LTIgMnptMTIgNGMwIDEuNjYtMS4zNCAzLTMgM3MtMy0xLjM0LTMtMyAxLjM0LTMgMy0zIDMgMS4zNCAzIDN6bS05IDhjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xdjFINnYtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQiPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWFsZXJ0Ij48cGF0aCBkPSJNMTAuMDEgMjEuMDFjMCAxLjEuODkgMS45OSAxLjk5IDEuOTlzMS45OS0uODkgMS45OS0xLjk5aC0zLjk4em04Ljg3LTQuMTlWMTFjMC0zLjI1LTIuMjUtNS45Ny01LjI5LTYuNjl2LS43MkMxMy41OSAyLjcxIDEyLjg4IDIgMTIgMnMtMS41OS43MS0xLjU5IDEuNTl2LjcyQzcuMzcgNS4wMyA1LjEyIDcuNzUgNS4xMiAxMXY1LjgyTDMgMTguOTRWMjBoMTh2LTEuMDZsLTIuMTItMi4xMnpNMTYgMTMuMDFoLTN2M2gtMnYtM0g4VjExaDNWOGgydjNoM3YyLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtIj48cGF0aCBkPSJNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLWFkZCI+PHBhdGggZD0iTTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0xLTExaC0ydjNIOHYyaDN2M2gydi0zaDN2LTJoLTNWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vbiI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0tMS40Ni01LjQ3TDguNDEgMTIuNGwtMS4wNiAxLjA2IDMuMTggMy4xOCA2LTYtMS4wNi0xLjA2LTQuOTMgNC45NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGwtb3V0Ij48cGF0aCBkPSJNMTYuMjEgNC4xNmw0IDR2LTR6bTQgMTJsLTQgNGg0em0tMTIgNGwtNC00djR6bS00LTEybDQtNGgtNHptMTIuOTUtLjk1Yy0yLjczLTIuNzMtNy4xNy0yLjczLTkuOSAwcy0yLjczIDcuMTcgMCA5LjkgNy4xNyAyLjczIDkuOSAwIDIuNzMtNy4xNiAwLTkuOXptLTEuMSA4LjhjLTIuMTMgMi4xMy01LjU3IDIuMTMtNy43IDBzLTIuMTMtNS41NyAwLTcuNyA1LjU3LTIuMTMgNy43IDAgMi4xMyA1LjU3IDAgNy43eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYW5ub3VuY2VtZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDloLTJWNWgydjZ6bTAgNGgtMnYtMmgydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXBwcyI+PHBhdGggZD0iTTQgOGg0VjRINHY0em02IDEyaDR2LTRoLTR2NHptLTYgMGg0di00SDR2NHptMC02aDR2LTRINHY0em02IDBoNHYtNGgtNHY0em02LTEwdjRoNFY0aC00em0tNiA0aDRWNGgtNHY0em02IDZoNHYtNGgtNHY0em0wIDZoNHYtNGgtNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1iYWNrIj48cGF0aCBkPSJNMjAgMTFINy44M2w1LjU5LTUuNTlMMTIgNGwtOCA4IDggOCAxLjQxLTEuNDFMNy44MyAxM0gyMHYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kb3dud2FyZCI+PHBhdGggZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMTJsLTQtNGg4bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC11cCI+PHBhdGggZD0iTTcgMTRsNS01IDUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy11cHdhcmQiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTkgMTJoLTJ2M2gtM3YyaDV2LTV6TTcgOWgzVjdINXY1aDJWOXptMTQtNkgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50Ij48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIgMTRIN3YtMmg3djJ6bTMtNEg3di0yaDEwdjJ6bTAtNEg3VjdoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LWluZCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0wIDRjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem02IDEySDZ2LTEuNGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjFWMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTQgMTJoLTR2M2wtNS01IDUtNXYzaDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybmVkIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgMTVsLTUtNWgzVjloNHY0aDNsLTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF0dGFjaG1lbnQiPjxwYXRoIGQ9Ik0yIDEyLjVDMiA5LjQ2IDQuNDYgNyA3LjUgN0gxOGMyLjIxIDAgNCAxLjc5IDQgNHMtMS43OSA0LTQgNEg5LjVDOC4xMiAxNSA3IDEzLjg4IDcgMTIuNVM4LjEyIDEwIDkuNSAxMEgxN3YySDkuNDFjLS41NSAwLS41NSAxIDAgMUgxOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTJINy41QzUuNTcgOSA0IDEwLjU3IDQgMTIuNVM1LjU3IDE2IDcuNSAxNkgxN3YySDcuNUM0LjQ2IDE4IDIgMTUuNTQgMiAxMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF1dG9yZW5ldyI+PHBhdGggZD0iTTEyIDZ2M2w0LTQtNC00djNjLTQuNDIgMC04IDMuNTgtOCA4IDAgMS41Ny40NiAzLjAzIDEuMjQgNC4yNkw2LjcgMTQuOGMtLjQ1LS44My0uNy0xLjc5LS43LTIuOCAwLTMuMzEgMi42OS02IDYtNnptNi43NiAxLjc0TDE3LjMgOS4yYy40NC44NC43IDEuNzkuNyAyLjggMCAzLjMxLTIuNjkgNi02IDZ2LTNsLTQgNCA0IDR2LTNjNC40MiAwIDgtMy41OCA4LTggMC0xLjU3LS40Ni0zLjAzLTEuMjQtNC4yNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJhY2t1cCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmxvY2siPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek00IDEyYzAtNC40MiAzLjU4LTggOC04IDEuODUgMCAzLjU1LjYzIDQuOSAxLjY5TDUuNjkgMTYuOUM0LjYzIDE1LjU1IDQgMTMuODUgNCAxMnptOCA4Yy0xLjg1IDAtMy41NS0uNjMtNC45LTEuNjlMMTguMzEgNy4xQzE5LjM3IDguNDUgMjAgMTAuMTUgMjAgMTJjMCA0LjQyLTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyayI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyay1ib3JkZXIiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTVsLTUtMi4xOEw3IDE4VjVoMTB2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJidWlsZCI+PHBhdGggZD0iTTIyLjcgMTlsLTkuMS05LjFjLjktMi4zLjQtNS0xLjUtNi45LTItMi01LTIuNC03LjQtMS4zTDkgNiA2IDkgMS42IDQuN0MuNCA3LjEuOSAxMC4xIDIuOSAxMi4xYzEuOSAxLjkgNC42IDIuNCA2LjkgMS41bDkuMSA5LjFjLjQuNCAxIC40IDEuNCAwbDIuMy0yLjNjLjUtLjQuNS0xLjEuMS0xLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FjaGVkIj48cGF0aCBkPSJNMTkgOGwtNCA0aDNjMCAzLjMxLTIuNjkgNi02IDYtMS4wMSAwLTEuOTctLjI1LTIuOC0uN2wtMS40NiAxLjQ2QzguOTcgMTkuNTQgMTAuNDMgMjAgMTIgMjBjNC40MiAwIDgtMy41OCA4LThoM2wtNC00ek02IDEyYzAtMy4zMSAyLjY5LTYgNi02IDEuMDEgMCAxLjk3LjI1IDIuOC43bDEuNDYtMS40NkMxNS4wMyA0LjQ2IDEzLjU3IDQgMTIgNGMtNC40MiAwLTggMy41OC04IDhIMWw0IDQgNC00SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbmNlbCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtZ2lmdGNhcmQiPjxwYXRoIGQ9Ik0yMCA2aC0yLjE4Yy4xMS0uMzEuMTgtLjY1LjE4LTEgMC0xLjY2LTEuMzQtMy0zLTMtMS4wNSAwLTEuOTYuNTQtMi41IDEuMzVsLS41LjY3LS41LS42OEMxMC45NiAyLjU0IDEwLjA1IDIgOSAyIDcuMzQgMiA2IDMuMzQgNiA1YzAgLjM1LjA3LjY5LjE4IDFINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNS0yYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6TTkgNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoNS4wOEw3IDEwLjgzIDguNjIgMTIgMTEgOC43NmwxLTEuMzYgMSAxLjM2TDE1LjM4IDEyIDE3IDEwLjgzIDE0LjkyIDhIMjB2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC10cmF2ZWwiPjxwYXRoIGQ9Ik0yMCA2aC0zVjRjMC0xLjExLS44OS0yLTItMkg5Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTIgLjg5LTIgMnYxMWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6TTkgNGg2djJIOVY0em0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoM3YyaDJWOGg2djJoMlY4aDN2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGFuZ2UtaGlzdG9yeSI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWJveC1vdXRsaW5lLWJsYW5rIj48cGF0aCBkPSJNMTkgNXYxNEg1VjVoMTRtMC0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsYXNzIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsZWFyIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTQuNSAxNEg4Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zbC4xNC4wMUM4LjU4IDguMjggMTAuMTMgNyAxMiA3YzIuMjEgMCA0IDEuNzkgNCA0aC41YzEuMzggMCAyLjUgMS4xMiAyLjUgMi41UzE3Ljg4IDE2IDE2LjUgMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWRvd25sb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNyAxM2wtNSA1LTUtNWgzVjloNHY0aDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtb2ZmIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDRjLTEuNDggMC0yLjg1LjQzLTQuMDEgMS4xN2wxLjQ2IDEuNDZDMTAuMjEgNi4yMyAxMS4wOCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDMgMCAxLjEzLS42NCAyLjExLTEuNTYgMi42MmwxLjQ1IDEuNDVDMjMuMTYgMTguMTYgMjQgMTYuNjggMjQgMTVjMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTMgNS4yN2wyLjc1IDIuNzRDMi41NiA4LjE1IDAgMTAuNzcgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxMS43M2wyIDJMMjEgMjAuNzMgNC4yNyA0IDMgNS4yN3pNNy43MyAxMGw4IDhINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNGgxLjczeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtdXBsb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNCAxM3Y0aC00di00SDdsNS01IDUgNWgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2RlIj48cGF0aCBkPSJNOS40IDE2LjZMNC44IDEybDQuNi00LjZMOCA2bC02IDYgNiA2IDEuNC0xLjR6bTUuMiAwbDQuNi00LjYtNC42LTQuNkwxNiA2bDYgNi02IDYtMS40LTEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jb3B5Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jdXQiPjxwYXRoIGQ9Ik05LjY0IDcuNjRjLjIzLS41LjM2LTEuMDUuMzYtMS42NCAwLTIuMjEtMS43OS00LTQtNFMyIDMuNzkgMiA2czEuNzkgNCA0IDRjLjU5IDAgMS4xNC0uMTMgMS42NC0uMzZMMTAgMTJsLTIuMzYgMi4zNkM3LjE0IDE0LjEzIDYuNTkgMTQgNiAxNGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00YzAtLjU5LS4xMy0xLjE0LS4zNi0xLjY0TDEyIDE0bDcgN2gzdi0xTDkuNjQgNy42NHpNNiA4Yy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem0wIDEyYy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem02LTcuNWMtLjI4IDAtLjUtLjIyLS41LS41cy4yMi0uNS41LS41LjUuMjIuNS41LS4yMi41LS41LjV6TTE5IDNsLTYgNiAyIDIgNy03VjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb3B5cmlnaHQiPjxwYXRoIGQ9Ik0xMC4wOCAxMC44NmMuMDUtLjMzLjE2LS42Mi4zLS44N3MuMzQtLjQ2LjU5LS42MmMuMjQtLjE1LjU0LS4yMi45MS0uMjMuMjMuMDEuNDQuMDUuNjMuMTMuMi4wOS4zOC4yMS41Mi4zNnMuMjUuMzMuMzQuNTMuMTMuNDIuMTQuNjRoMS43OWMtLjAyLS40Ny0uMTEtLjktLjI4LTEuMjlzLS40LS43My0uNy0xLjAxLS42Ni0uNS0xLjA4LS42Ni0uODgtLjIzLTEuMzktLjIzYy0uNjUgMC0xLjIyLjExLTEuNy4zNHMtLjg4LjUzLTEuMi45Mi0uNTYuODQtLjcxIDEuMzZTOCAxMS4yOSA4IDExLjg3di4yN2MwIC41OC4wOCAxLjEyLjIzIDEuNjRzLjM5Ljk3LjcxIDEuMzUuNzIuNjkgMS4yLjkxIDEuMDUuMzQgMS43LjM0Yy40NyAwIC45MS0uMDggMS4zMi0uMjNzLjc3LS4zNiAxLjA4LS42My41Ni0uNTguNzQtLjk0LjI5LS43NC4zLTEuMTVoLTEuNzljLS4wMS4yMS0uMDYuNC0uMTUuNThzLS4yMS4zMy0uMzYuNDYtLjMyLjIzLS41Mi4zYy0uMTkuMDctLjM5LjA5LS42LjEtLjM2LS4wMS0uNjYtLjA4LS44OS0uMjMtLjI1LS4xNi0uNDUtLjM3LS41OS0uNjJzLS4yNS0uNTUtLjMtLjg4LS4wOC0uNjctLjA4LTF2LS4yN2MwLS4zNS4wMy0uNjguMDgtMS4wMXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlYXRlIj48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWRpdC1jYXJkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhc2hib2FyZCI+PHBhdGggZD0iTTMgMTNoOFYzSDN2MTB6bTAgOGg4di02SDN2NnptMTAgMGg4VjExaC04djEwem0wLTE4djZoOFYzaC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLWZvcmV2ZXIiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVzY3JpcHRpb24iPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTZIOHYtMmg4djJ6bTAtNEg4di0yaDh2MnptLTMtNVYzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRucyI+PHBhdGggZD0iTTIwIDEzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6TTcgMTljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek0yMCAzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXpNNyA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbmUtYWxsIj48cGF0aCBkPSJNMTggN2wtMS40MS0xLjQxLTYuMzQgNi4zNCAxLjQxIDEuNDFMMTggN3ptNC4yNC0xLjQxTDExLjY2IDE2LjE3IDcuNDggMTJsLTEuNDEgMS40MUwxMS42NiAxOWwxMi0xMi0xLjQyLTEuNDF6TS40MSAxMy40MUw2IDE5bDEuNDEtMS40MUwxLjgzIDEyIC40MSAxMy40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb251dC1sYXJnZSI+PHBhdGggZD0iTTExIDUuMDhWMmMtNSAuNS05IDQuODEtOSAxMHM0IDkuNSA5IDEwdi0zLjA4Yy0zLS40OC02LTMuNC02LTYuOTJzMy02LjQ0IDYtNi45MnpNMTguOTcgMTFIMjJjLS40Ny01LTQtOC41My05LTl2My4wOEMxNiA1LjUxIDE4LjU0IDggMTguOTcgMTF6TTEzIDE4LjkyVjIyYzUtLjQ3IDguNTMtNCA5LTloLTMuMDNjLS40MyAzLTIuOTcgNS40OS01Ljk3IDUuOTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZHJhZnRzIj48cGF0aCBkPSJNMjEuOTkgOGMwLS43Mi0uMzctMS4zNS0uOTQtMS43TDEyIDEgMi45NSA2LjNDMi4zOCA2LjY1IDIgNy4yOCAyIDh2MTBjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMmwtLjAxLTEwek0xMiAxM0wzLjc0IDcuODQgMTIgM2w4LjI2IDQuODRMMTIgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZWplY3QiPjxwYXRoIGQ9Ik01IDE3aDE0djJINXptNy0xMkw1LjMzIDE1aDEzLjM0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlcnJvci1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTVoMnYyaC0yem0wLThoMnY2aC0yem0uOTktNUM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV1cm8tc3ltYm9sIj48cGF0aCBkPSJNMTUgMTguNWMtMi41MSAwLTQuNjgtMS40Mi01Ljc2LTMuNUgxNXYtMkg4LjU4Yy0uMDUtLjMzLS4wOC0uNjYtLjA4LTFzLjAzLS42Ny4wOC0xSDE1VjlIOS4yNEMxMC4zMiA2LjkyIDEyLjUgNS41IDE1IDUuNWMxLjYxIDAgMy4wOS41OSA0LjIzIDEuNTdMMjEgNS4zQzE5LjQxIDMuODcgMTcuMyAzIDE1IDNjLTMuOTIgMC03LjI0IDIuNTEtOC40OCA2SDN2MmgzLjA2Yy0uMDQuMzMtLjA2LjY2LS4wNiAxIDAgLjM0LjAyLjY3LjA2IDFIM3YyaDMuNTJjMS4yNCAzLjQ5IDQuNTYgNiA4LjQ4IDYgMi4zMSAwIDQuNDEtLjg3IDYtMi4zbC0xLjc4LTEuNzdjLTEuMTMuOTgtMi42IDEuNTctNC4yMiAxLjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXZlbnQtc2VhdCI+PHBhdGggZD0iTTQgMTh2M2gzdi0zaDEwdjNoM3YtNkg0em0xNS04aDN2M2gtM3pNMiAxMGgzdjNIMnptMTUgM0g3VjVjMC0xLjEuOS0yIDItMmg2YzEuMSAwIDIgLjkgMiAydjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhpdC10by1hcHAiPjxwYXRoIGQ9Ik0xMC4wOSAxNS41OUwxMS41IDE3bDUtNS01LTUtMS40MSAxLjQxTDEyLjY3IDExSDN2Mmg5LjY3bC0yLjU4IDIuNTl6TTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjRoMlY1aDE0djE0SDV2LTRIM3Y0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBhbmQtbW9yZSI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBsb3JlIj48cGF0aCBkPSJNMTIgMTAuOWMtLjYxIDAtMS4xLjQ5LTEuMSAxLjFzLjQ5IDEuMSAxLjEgMS4xYy42MSAwIDEuMS0uNDkgMS4xLTEuMXMtLjQ5LTEuMS0xLjEtMS4xek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0yLjE5IDEyLjE5TDYgMThsMy44MS04LjE5TDE4IDZsLTMuODEgOC4xOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYWNlIj48cGF0aCBkPSJNOSAxMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6bTYgMGMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04IDAtLjI5LjAyLS41OC4wNS0uODYgMi4zNi0xLjA1IDQuMjMtMi45OCA1LjIxLTUuMzdDMTEuMDcgOC4zMyAxNC4wNSAxMCAxNy40MiAxMGMuNzggMCAxLjUzLS4wOSAyLjI1LS4yNi4yMS43MS4zMyAxLjQ3LjMzIDIuMjYgMCA0LjQxLTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmF2b3JpdGUiPjxwYXRoIGQ9Ik0xMiAyMS4zNWwtMS40NS0xLjMyQzUuNCAxNS4zNiAyIDEyLjI4IDIgOC41IDIgNS40MiA0LjQyIDMgNy41IDNjMS43NCAwIDMuNDEuODEgNC41IDIuMDlDMTMuMDkgMy44MSAxNC43NiAzIDE2LjUgMyAxOS41OCAzIDIyIDUuNDIgMjIgOC41YzAgMy43OC0zLjQgNi44Ni04LjU1IDExLjU0TDEyIDIxLjM1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZlZWRiYWNrIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDEyaC0ydi0yaDJ2MnptMC00aC0yVjZoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbGUtZG93bmxvYWQiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItbGlzdCI+PHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtaW4tcGFnZSI+PHBhdGggZD0iTTIwIDE5LjU5VjhsLTYtNkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjLjQ1IDAgLjg1LS4xNSAxLjE5LS40bC00LjQzLTQuNDNjLS44LjUyLTEuNzQuODMtMi43Ni44My0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDVjMCAxLjAyLS4zMSAxLjk2LS44MyAyLjc1TDIwIDE5LjU5ek05IDEzYzAgMS42NiAxLjM0IDMgMyAzczMtMS4zNCAzLTMtMS4zNC0zLTMtMy0zIDEuMzQtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmdlcnByaW50Ij48cGF0aCBkPSJNMTcuODEgNC40N2MtLjA4IDAtLjE2LS4wMi0uMjMtLjA2QzE1LjY2IDMuNDIgMTQgMyAxMi4wMSAzYy0xLjk4IDAtMy44Ni40Ny01LjU3IDEuNDEtLjI0LjEzLS41NC4wNC0uNjgtLjItLjEzLS4yNC0uMDQtLjU1LjItLjY4QzcuODIgMi41MiA5Ljg2IDIgMTIuMDEgMmMyLjEzIDAgMy45OS40NyA2LjAzIDEuNTIuMjUuMTMuMzQuNDMuMjEuNjctLjA5LjE4LS4yNi4yOC0uNDQuMjh6TTMuNSA5LjcyYy0uMSAwLS4yLS4wMy0uMjktLjA5LS4yMy0uMTYtLjI4LS40Ny0uMTItLjcuOTktMS40IDIuMjUtMi41IDMuNzUtMy4yN0M5Ljk4IDQuMDQgMTQgNC4wMyAxNy4xNSA1LjY1YzEuNS43NyAyLjc2IDEuODYgMy43NSAzLjI1LjE2LjIyLjExLjU0LS4xMi43LS4yMy4xNi0uNTQuMTEtLjctLjEyLS45LTEuMjYtMi4wNC0yLjI1LTMuMzktMi45NC0yLjg3LTEuNDctNi41NC0xLjQ3LTkuNC4wMS0xLjM2LjctMi41IDEuNy0zLjQgMi45Ni0uMDguMTQtLjIzLjIxLS4zOS4yMXptNi4yNSAxMi4wN2MtLjEzIDAtLjI2LS4wNS0uMzUtLjE1LS44Ny0uODctMS4zNC0xLjQzLTIuMDEtMi42NC0uNjktMS4yMy0xLjA1LTIuNzMtMS4wNS00LjM0IDAtMi45NyAyLjU0LTUuMzkgNS42Ni01LjM5czUuNjYgMi40MiA1LjY2IDUuMzljMCAuMjgtLjIyLjUtLjUuNXMtLjUtLjIyLS41LS41YzAtMi40Mi0yLjA5LTQuMzktNC42Ni00LjM5LTIuNTcgMC00LjY2IDEuOTctNC42NiA0LjM5IDAgMS40NC4zMiAyLjc3LjkzIDMuODUuNjQgMS4xNSAxLjA4IDEuNjQgMS44NSAyLjQyLjE5LjIuMTkuNTEgMCAuNzEtLjExLjEtLjI0LjE1LS4zNy4xNXptNy4xNy0xLjg1Yy0xLjE5IDAtMi4yNC0uMy0zLjEtLjg5LTEuNDktMS4wMS0yLjM4LTIuNjUtMi4zOC00LjM5IDAtLjI4LjIyLS41LjUtLjVzLjUuMjIuNS41YzAgMS40MS43MiAyLjc0IDEuOTQgMy41Ni43MS40OCAxLjU0LjcxIDIuNTQuNzEuMjQgMCAuNjQtLjAzIDEuMDQtLjEuMjctLjA1LjUzLjEzLjU4LjQxLjA1LjI3LS4xMy41My0uNDEuNTgtLjU3LjExLTEuMDcuMTItMS4yMS4xMnpNMTQuOTEgMjJjLS4wNCAwLS4wOS0uMDEtLjEzLS4wMi0xLjU5LS40NC0yLjYzLTEuMDMtMy43Mi0yLjEtMS40LTEuMzktMi4xNy0zLjI0LTIuMTctNS4yMiAwLTEuNjIgMS4zOC0yLjk0IDMuMDgtMi45NCAxLjcgMCAzLjA4IDEuMzIgMy4wOCAyLjk0IDAgMS4wNy45MyAxLjk0IDIuMDggMS45NHMyLjA4LS44NyAyLjA4LTEuOTRjMC0zLjc3LTMuMjUtNi44My03LjI1LTYuODMtMi44NCAwLTUuNDQgMS41OC02LjYxIDQuMDMtLjM5LjgxLS41OSAxLjc2LS41OSAyLjggMCAuNzguMDcgMi4wMS42NyAzLjYxLjEuMjYtLjAzLjU1LS4yOS42NC0uMjYuMS0uNTUtLjA0LS42NC0uMjktLjQ5LTEuMzEtLjczLTIuNjEtLjczLTMuOTYgMC0xLjIuMjMtMi4yOS42OC0zLjI0IDEuMzMtMi43OSA0LjI4LTQuNiA3LjUxLTQuNiA0LjU1IDAgOC4yNSAzLjUxIDguMjUgNy44MyAwIDEuNjItMS4zOCAyLjk0LTMuMDggMi45NHMtMy4wOC0xLjMyLTMuMDgtMi45NGMwLTEuMDctLjkzLTEuOTQtMi4wOC0xLjk0cy0yLjA4Ljg3LTIuMDggMS45NGMwIDEuNzEuNjYgMy4zMSAxLjg3IDQuNTEuOTUuOTQgMS44NiAxLjQ2IDMuMjcgMS44NS4yNy4wNy40Mi4zNS4zNS42MS0uMDUuMjMtLjI2LjM4LS40Ny4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaXJzdC1wYWdlIj48cGF0aCBkPSJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpZ2h0LWxhbmQiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTcuMTgtNS43M2w0LjM1IDEuMTYgNS4zMSAxLjQyYy44LjIxIDEuNjItLjI2IDEuODQtMS4wNi4yMS0uOC0uMjYtMS42Mi0xLjA2LTEuODRsLTUuMzEtMS40Mi0yLjc2LTkuMDJMMTAuMTIgMnY4LjI4TDUuMTUgOC45NWwtLjkzLTIuMzItMS40NS0uMzl2NS4xN2wxLjYuNDMgNS4zMSAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaWdodC10YWtlb2ZmIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em0xOS41Ny05LjM2Yy0uMjEtLjgtMS4wNC0xLjI4LTEuODQtMS4wNkwxNC45MiAxMGwtNi45LTYuNDMtMS45My41MSA0LjE0IDcuMTctNC45NyAxLjMzLTEuOTctMS41NC0xLjQ1LjM5IDEuODIgMy4xNi43NyAxLjMzIDEuNi0uNDMgNS4zMS0xLjQyIDQuMzUtMS4xNkwyMSAxMS40OWMuODEtLjIzIDEuMjgtMS4wNSAxLjA3LTEuODV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1mcm9udCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMiA0di0ySDNjMCAxLjEuODkgMiAyIDJ6TTMgOWgyVjdIM3Yyem0xMiAxMmgydi0yaC0ydjJ6bTQtMThIOWMtMS4xMSAwLTIgLjktMiAydjEwYzAgMS4xLjg5IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTJIOVY1aDEwdjEwem0tOCA2aDJ2LTJoLTJ2MnptLTQgMGgydi0ySDd2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXIiPjxwYXRoIGQ9Ik0xMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJoLThsLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItc2hhcmVkIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS01IDNjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yem00IDhoLTh2LTFjMC0xLjMzIDIuNjctMiA0LTJzNCAuNjcgNCAydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9udC1kb3dubG9hZCI+PHBhdGggZD0iTTkuOTMgMTMuNWg0LjE0TDEyIDcuOTh6TTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNC4wNSAxNi41bC0xLjE0LTNIOS4xN2wtMS4xMiAzSDUuOTZsNS4xMS0xM2gxLjg2bDUuMTEgMTNoLTIuMDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuIj48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuLWV4aXQiPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2F2ZWwiPjxwYXRoIGQ9Ik0xIDIxaDEydjJIMXpNNS4yNDUgOC4wN2wyLjgzLTIuODI3IDE0LjE0IDE0LjE0Mi0yLjgyOCAyLjgyOHpNMTIuMzE3IDFsNS42NTcgNS42NTYtMi44MyAyLjgzLTUuNjU0LTUuNjZ6TTMuODI1IDkuNDg1bDUuNjU3IDUuNjU3LTIuODI4IDIuODI4LTUuNjU3LTUuNjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imdlc3R1cmUiPjxwYXRoIGQ9Ik00LjU5IDYuODljLjctLjcxIDEuNC0xLjM1IDEuNzEtMS4yMi41LjIgMCAxLjAzLS4zIDEuNTItLjI1LjQyLTIuODYgMy44OS0yLjg2IDYuMzEgMCAxLjI4LjQ4IDIuMzQgMS4zNCAyLjk4Ljc1LjU2IDEuNzQuNzMgMi42NC40NiAxLjA3LS4zMSAxLjk1LTEuNCAzLjA2LTIuNzcgMS4yMS0xLjQ5IDIuODMtMy40NCA0LjA4LTMuNDQgMS42MyAwIDEuNjUgMS4wMSAxLjc2IDEuNzktMy43OC42NC01LjM4IDMuNjctNS4zOCA1LjM3IDAgMS43IDEuNDQgMy4wOSAzLjIxIDMuMDkgMS42MyAwIDQuMjktMS4zMyA0LjY5LTYuMUgyMXYtMi41aC0yLjQ3Yy0uMTUtMS42NS0xLjA5LTQuMi00LjAzLTQuMi0yLjI1IDAtNC4xOCAxLjkxLTQuOTQgMi44NC0uNTguNzMtMi4wNiAyLjQ4LTIuMjkgMi43Mi0uMjUuMy0uNjguODQtMS4xMS44NC0uNDUgMC0uNzItLjgzLS4zNi0xLjkyLjM1LTEuMDkgMS40LTIuODYgMS44NS0zLjUyLjc4LTEuMTQgMS4zLTEuOTIgMS4zLTMuMjhDOC45NSAzLjY5IDcuMzEgMyA2LjQ0IDMgNS4xMiAzIDMuOTcgNCAzLjcyIDQuMjVjLS4zNi4zNi0uNjYuNjYtLjg4LjkzbDEuNzUgMS43MXptOS4yOSAxMS42NmMtLjMxIDAtLjc0LS4yNi0uNzQtLjcyIDAtLjYuNzMtMi4yIDIuODctMi43Ni0uMyAyLjY5LTEuNDMgMy40OC0yLjEzIDMuNDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJnaWYiPjxwYXRoIGQ9Ik0xMS41IDlIMTN2NmgtMS41ek05IDlINmMtLjYgMC0xIC41LTEgMXY0YzAgLjUuNCAxIDEgMWgzYy42IDAgMS0uNSAxLTF2LTJIOC41djEuNWgtMnYtM0gxMFYxMGMwLS41LS40LTEtMS0xem0xMCAxLjVWOWgtNC41djZIMTZ2LTJoMnYtMS41aC0ydi0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRlIj48cGF0aCBkPSJNMTIgMTcuMjdMMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVscCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTdoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDEyLjkgMTMgMTMuNSAxMyAxNWgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlbHAtb3V0bGluZSI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoaXN0b3J5Ij48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvbWUiPjxwYXRoIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWZ1bGwiPjxwYXRoIGQ9Ik02IDJ2NmguMDFMNiA4LjAxIDEwIDEybC00IDQgLjAxLjAxSDZWMjJoMTJ2LTUuOTloLS4wMUwxOCAxNmwtNC00IDQtMy45OS0uMDEtLjAxSDE4VjJINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJodHRwIj48cGF0aCBkPSJNNC41IDExaC0yVjlIMXY2aDEuNXYtMi41aDJWMTVINlY5SDQuNXYyem0yLjUtLjVoMS41VjE1SDEwdi00LjVoMS41VjlIN3YxLjV6bTUuNSAwSDE0VjE1aDEuNXYtNC41SDE3VjloLTQuNXYxLjV6bTktMS41SDE4djZoMS41di0yaDJjLjggMCAxLjUtLjcgMS41LTEuNXYtMWMwLS44LS43LTEuNS0xLjUtMS41em0wIDIuNWgtMnYtMWgydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltcG9ydGFudC1kZXZpY2VzIj48cGF0aCBkPSJNMjMgMTEuMDFMMTggMTFjLS41NSAwLTEgLjQ1LTEgMXY5YzAgLjU1LjQ1IDEgMSAxaDVjLjU1IDAgMS0uNDUgMS0xdi05YzAtLjU1LS40NS0uOTktMS0uOTl6TTIzIDIwaC01di03aDV2N3pNMjAgMkgyQy44OSAyIDAgMi44OSAwIDR2MTJjMCAxLjEuODkgMiAyIDJoN3YySDd2Mmg4di0yaC0ydi0yaDJ2LTJIMlY0aDE4djVoMlY0YzAtMS4xMS0uOS0yLTItMnptLTguMDMgN0wxMSA2bC0uOTcgM0g3bDIuNDcgMS43Ni0uOTQgMi45MSAyLjQ3LTEuOCAyLjQ3IDEuOC0uOTQtMi45MUwxNSA5aC0zLjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluYm94Ij48cGF0aCBkPSJNMTkgM0g0Ljk5Yy0xLjExIDAtMS45OC44OS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xMS0uOS0yLTItMnptMCAxMmgtNGMwIDEuNjYtMS4zNSAzLTMgM3MtMy0xLjM0LTMtM0g0Ljk5VjVIMTl2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8tb3V0bGluZSI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbnZlcnQtY29sb3JzIj48cGF0aCBkPSJNMTcuNjYgNy45M0wxMiAyLjI3IDYuMzQgNy45M2MtMy4xMiAzLjEyLTMuMTIgOC4xOSAwIDExLjMxQzcuOSAyMC44IDkuOTUgMjEuNTggMTIgMjEuNThjMi4wNSAwIDQuMS0uNzggNS42Ni0yLjM0IDMuMTItMy4xMiAzLjEyLTguMTkgMC0xMS4zMXpNMTIgMTkuNTljLTEuNiAwLTMuMTEtLjYyLTQuMjQtMS43NkM2LjYyIDE2LjY5IDYgMTUuMTkgNiAxMy41OXMuNjItMy4xMSAxLjc2LTQuMjRMMTIgNS4xdjE0LjQ5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhYmVsIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5ndWFnZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXN0LXBhZ2UiPjxwYXRoIGQ9Ik01LjU5IDcuNDFMMTAuMTggMTJsLTQuNTkgNC41OUw3IDE4bDYtNi02LTZ6TTE2IDZoMnYxMmgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaWdodGJ1bGItb3V0bGluZSI+PHBhdGggZD0iTTkgMjFjMCAuNTUuNDUgMSAxIDFoNGMuNTUgMCAxLS40NSAxLTF2LTFIOXYxem0zLTE5QzguMTQgMiA1IDUuMTQgNSA5YzAgMi4zOCAxLjE5IDQuNDcgMyA1Ljc0VjE3YzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xdi0yLjI2YzEuODEtMS4yNyAzLTMuMzYgMy01Ljc0IDAtMy44Ni0zLjE0LTctNy03em0yLjg1IDExLjFsLS44NS42VjE2aC00di0yLjNsLS44NS0uNkM3LjggMTIuMTYgNyAxMC42MyA3IDljMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWMwIDEuNjMtLjggMy4xNi0yLjE1IDQuMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXN0eWxlIj48cGF0aCBkPSJNMyAxNmg1di0ySDN2MnptNi41IDBoNXYtMmgtNXYyem02LjUgMGg1di0yaC01djJ6TTMgMjBoMnYtMkgzdjJ6bTQgMGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnpNMyAxMmg4di0ySDN2MnptMTAgMGg4di0yaC04djJ6TTMgNHY0aDE4VjRIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxpc3QiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTAtOGgyVjdIM3Yyem00IDRoMTR2LTJIN3Yyem0wIDRoMTR2LTJIN3Yyek03IDd2MmgxNFY3SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jay1vcGVuIj48cGF0aCBkPSJNMTIgMTdjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2aDEuOWMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bTAgMTJINlYxMGgxMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMiAxN2MxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTYtOWgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yek04LjkgNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMXMzLjEgMS4zOSAzLjEgMy4xdjJIOC45VjZ6TTE4IDIwSDZWMTBoMTJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3lhbHR5Ij48cGF0aCBkPSJNMjEuNDEgMTEuNThsLTktOUMxMi4wNSAyLjIyIDExLjU1IDIgMTEgMkg0Yy0xLjEgMC0yIC45LTIgMnY3YzAgLjU1LjIyIDEuMDUuNTkgMS40Mmw5IDljLjM2LjM2Ljg2LjU4IDEuNDEuNTguNTUgMCAxLjA1LS4yMiAxLjQxLS41OWw3LTdjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLS41NS0uMjMtMS4wNi0uNTktMS40MnpNNS41IDdDNC42NyA3IDQgNi4zMyA0IDUuNVM0LjY3IDQgNS41IDQgNyA0LjY3IDcgNS41IDYuMzMgNyA1LjUgN3ptMTEuNzcgOC4yN0wxMyAxOS41NGwtNC4yNy00LjI3QzguMjggMTQuODEgOCAxNC4xOSA4IDEzLjVjMC0xLjM4IDEuMTItMi41IDIuNS0yLjUuNjkgMCAxLjMyLjI4IDEuNzcuNzRsLjczLjcyLjczLS43M2MuNDUtLjQ1IDEuMDgtLjczIDEuNzctLjczIDEuMzggMCAyLjUgMS4xMiAyLjUgMi41IDAgLjY5LS4yOCAxLjMyLS43MyAxLjc3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1haWwiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFya3VucmVhZC1tYWlsYm94Ij48cGF0aCBkPSJNMjAgNkgxMHY2SDhWNGg2VjBINnY2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtZW51Ij48cGF0aCBkPSJNMyAxOGgxOHYtMkgzdjJ6bTAtNWgxOHYtMkgzdjJ6bTAtN3YyaDE4VjZIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLXZlcnQiPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3RvcmN5Y2xlIj48cGF0aCBkPSJNMTkuNDQgOS4wM0wxNS40MSA1SDExdjJoMy41OWwyIDJINWMtMi44IDAtNSAyLjItNSA1czIuMiA1IDUgNWMyLjQ2IDAgNC40NS0xLjY5IDQuOS00aDEuNjVsMi43Ny0yLjc3Yy0uMjEuNTQtLjMyIDEuMTQtLjMyIDEuNzcgMCAyLjggMi4yIDUgNSA1czUtMi4yIDUtNWMwLTIuNjUtMS45Ny00Ljc3LTQuNTYtNC45N3pNNy44MiAxNUM3LjQgMTYuMTUgNi4yOCAxNyA1IDE3Yy0xLjYzIDAtMy0xLjM3LTMtM3MxLjM3LTMgMy0zYzEuMjggMCAyLjQuODUgMi44MiAySDV2MmgyLjgyek0xOSAxN2MtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtMyAzIDEuMzQgMyAzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5leHQtd2VlayI+PHBhdGggZD0iTTIwIDdoLTRWNWMwLS41NS0uMjItMS4wNS0uNTktMS40MUMxNS4wNSAzLjIyIDE0LjU1IDMgMTQgM2gtNGMtMS4xIDAtMiAuOS0yIDJ2Mkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjljMC0xLjEtLjktMi0yLTJ6TTEwIDVoNHYyaC00VjV6bTEgMTMuNWwtMS0xIDMtMy0zLTMgMS0xIDQgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibm90ZS1hZGQiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTRoLTN2M2gtMnYtM0g4di0yaDN2LTNoMnYzaDN2MnptLTMtN1YzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wYWNpdHkiPjxwYXRoIGQ9Ik0xNy42NiA4TDEyIDIuMzUgNi4zNCA4QzQuNzggOS41NiA0IDExLjY0IDQgMTMuNjRzLjc4IDQuMTEgMi4zNCA1LjY3IDMuNjEgMi4zNSA1LjY2IDIuMzUgNC4xLS43OSA1LjY2LTIuMzVTMjAgMTUuNjQgMjAgMTMuNjQgMTkuMjIgOS41NiAxNy42NiA4ek02IDE0Yy4wMS0yIC42Mi0zLjI3IDEuNzYtNC40TDEyIDUuMjdsNC4yNCA0LjM4QzE3LjM4IDEwLjc3IDE3Ljk5IDEyIDE4IDE0SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi1pbi1icm93c2VyIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjExIDAtMiAuOS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNHYtMkg1VjhoMTR2MTBoLTR2Mmg0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjg5LTItMi0yem0tNyA2bC00IDRoM3Y2aDJ2LTZoM2wtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi13aXRoIj48cGF0aCBkPSJNMTAgOWg0VjZoM2wtNS01LTUgNWgzdjN6bS0xIDFINlY3bC01IDUgNSA1di0zaDN2LTR6bTE0IDJsLTUtNXYzaC0zdjRoM3YzbDUtNXptLTkgM2gtNHYzSDdsNSA1IDUtNWgtM3YtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwYWdldmlldyI+PHBhdGggZD0iTTExLjUgOUMxMC4xMiA5IDkgMTAuMTIgOSAxMS41czEuMTIgMi41IDIuNSAyLjUgMi41LTEuMTIgMi41LTIuNVMxMi44OCA5IDExLjUgOXpNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS0zLjIxIDE0LjIxbC0yLjkxLTIuOTFjLS42OS40NC0xLjUxLjctMi4zOS43QzkuMDEgMTYgNyAxMy45OSA3IDExLjVTOS4wMSA3IDExLjUgNyAxNiA5LjAxIDE2IDExLjVjMCAuODgtLjI2IDEuNjktLjcgMi4zOWwyLjkxIDIuOS0xLjQyIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYXltZW50Ij48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tY2FtZXJhLW1pYyI+PHBhdGggZD0iTTIwIDVoLTMuMTdMMTUgM0g5TDcuMTcgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2LTIuMDljLTIuODMtLjQ4LTUtMi45NC01LTUuOTFoMmMwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00aDJjMCAyLjk3LTIuMTcgNS40My01IDUuOTFWMjFoN2MxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tNiA4YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tZGF0YS1zZXR0aW5nIj48cGF0aCBkPSJNMTguOTkgMTEuNWMuMzQgMCAuNjcuMDMgMSAuMDdMMjAgMCAwIDIwaDExLjU2Yy0uMDQtLjMzLS4wNy0uNjYtLjA3LTEgMC00LjE0IDMuMzYtNy41IDcuNS03LjV6bTMuNzEgNy45OWMuMDItLjE2LjA0LS4zMi4wNC0uNDkgMC0uMTctLjAxLS4zMy0uMDQtLjQ5bDEuMDYtLjgzYy4wOS0uMDguMTItLjIxLjA2LS4zMmwtMS0xLjczYy0uMDYtLjExLS4xOS0uMTUtLjMxLS4xMWwtMS4yNC41Yy0uMjYtLjItLjU0LS4zNy0uODUtLjQ5bC0uMTktMS4zMmMtLjAxLS4xMi0uMTItLjIxLS4yNC0uMjFoLTJjLS4xMiAwLS4yMy4wOS0uMjUuMjFsLS4xOSAxLjMyYy0uMy4xMy0uNTkuMjktLjg1LjQ5bC0xLjI0LS41Yy0uMTEtLjA0LS4yNCAwLS4zMS4xMWwtMSAxLjczYy0uMDYuMTEtLjA0LjI0LjA2LjMybDEuMDYuODNjLS4wMi4xNi0uMDMuMzItLjAzLjQ5IDAgLjE3LjAxLjMzLjAzLjQ5bC0xLjA2LjgzYy0uMDkuMDgtLjEyLjIxLS4wNi4zMmwxIDEuNzNjLjA2LjExLjE5LjE1LjMxLjExbDEuMjQtLjVjLjI2LjIuNTQuMzcuODUuNDlsLjE5IDEuMzJjLjAyLjEyLjEyLjIxLjI1LjIxaDJjLjEyIDAgLjIzLS4wOS4yNS0uMjFsLjE5LTEuMzJjLjMtLjEzLjU5LS4yOS44NC0uNDlsMS4yNS41Yy4xMS4wNC4yNCAwIC4zMS0uMTFsMS0xLjczYy4wNi0uMTEuMDMtLjI0LS4wNi0uMzJsLTEuMDctLjgzem0tMy43MSAxLjAxYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWRldmljZS1pbmZvcm1hdGlvbiI+PHBhdGggZD0iTTEzIDdoLTJ2MmgyVjd6bTAgNGgtMnY2aDJ2LTZ6bTQtOS45OUw3IDFjLTEuMSAwLTIgLjktMiAydjE4YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tbWVkaWEiPjxwYXRoIGQ9Ik0yIDZIMHY1aC4wMUwwIDIwYzAgMS4xLjkgMiAyIDJoMTh2LTJIMlY2em0yMC0yaC04bC0yLTJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnpNNyAxNWw0LjUtNiAzLjUgNC41MSAyLjUtMy4wMUwyMSAxNUg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tcGhvbmUtbXNnIj48cGF0aCBkPSJNMjAgMTUuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTEyIDN2MTBsMy0zaDZWM2gtOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGV0cyI+PGNpcmNsZSBjeD0iNC41IiBjeT0iOS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTUiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTkuNSIgY3k9IjkuNSIgcj0iMi41Ij48L2NpcmNsZT48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlIj48cGF0aCBkPSJNMTkgN2gtOHY2aDhWN3ptMi00SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4VjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk4aDE4djE0LjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZS1hbHQiPjxwYXRoIGQ9Ik0xOSAxMWgtOHY2aDh2LTZ6bTQgOFY0Ljk4QzIzIDMuODggMjIuMSAzIDIxIDNIM2MtMS4xIDAtMiAuODgtMiAxLjk4VjE5YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6bS0yIC4wMkgzVjQuOTdoMTh2MTQuMDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvbHltZXIiPjxwYXRoIGQ9Ik0xOSA0aC00TDcuMTEgMTYuNjMgNC41IDEyIDkgNEg1TC41IDEyIDUgMjBoNGw3Ljg5LTEyLjYzTDE5LjUgMTIgMTUgMjBoNGw0LjUtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3dlci1zZXR0aW5ncy1uZXciPjxwYXRoIGQ9Ik0xMyAzaC0ydjEwaDJWM3ptNC44MyAyLjE3bC0xLjQyIDEuNDJDMTcuOTkgNy44NiAxOSA5LjgxIDE5IDEyYzAgMy44Ny0zLjEzIDctNyA3cy03LTMuMTMtNy03YzAtMi4xOSAxLjAxLTQuMTQgMi41OC01LjQyTDYuMTcgNS4xN0M0LjIzIDYuODIgMyA5LjI2IDMgMTJjMCA0Ljk3IDQuMDMgOSA5IDlzOS00LjAzIDktOWMwLTIuNzQtMS4yMy01LjE4LTMuMTctNi44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmludCI+PHBhdGggZD0iTTE5IDhINWMtMS42NiAwLTMgMS4zNC0zIDN2Nmg0djRoMTJ2LTRoNHYtNmMwLTEuNjYtMS4zNC0zLTMtM3ptLTMgMTFIOHYtNWg4djV6bTMtN2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0tMS05SDZ2NGgxMlYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InF1ZXJ5LWJ1aWxkZXIiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmFkaW8tYnV0dG9uLWNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiA3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1IDUtMi4yNCA1LTUtMi4yNC01LTUtNXptMC01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyYWRpby1idXR0b24tdW5jaGVja2VkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWNvcmQtdm9pY2Utb3ZlciI+PGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjQiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkZWVtIj48cGF0aCBkPSJNMjAgNmgtMi4xOGMuMTEtLjMxLjE4LS42NS4xOC0xIDAtMS42Ni0xLjM0LTMtMy0zLTEuMDUgMC0xLjk2LjU0LTIuNSAxLjM1bC0uNS42Ny0uNS0uNjhDMTAuOTYgMi41NCAxMC4wNSAyIDkgMiA3LjM0IDIgNiAzLjM0IDYgNWMwIC4zNS4wNy42OS4xOCAxSDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTUtMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xek05IDRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDUuMDhMNyAxMC44MyA4LjYyIDEyIDExIDguNzZsMS0xLjM2IDEgMS4zNkwxNS4zOCAxMiAxNyAxMC44MyAxNC45MiA4SDIwdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkbyI+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlIj48cGF0aCBkPSJNMTkgMTNINXYtMmgxNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExSDd2LTJoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTIyLjczIDIyLjczTDIuNzcgMi43NyAyIDJsLS43My0uNzNMMCAyLjU0bDQuMzkgNC4zOSAyLjIxIDQuNjYtMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDcuNDZsMS4zOCAxLjM4Yy0uNS4zNi0uODMuOTUtLjgzIDEuNjIgMCAxLjEuODkgMiAxLjk5IDIgLjY3IDAgMS4yNi0uMzMgMS42Mi0uODRMMjEuNDYgMjRsMS4yNy0xLjI3ek03LjQyIDE1Yy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoMi4zNmwyIDJINy40MnptOC4xMy0yYy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg2LjU0bDkuMDEgOXpNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW9yZGVyIj48cGF0aCBkPSJNMyAxNWgxOHYtMkgzdjJ6bTAgNGgxOHYtMkgzdjJ6bTAtOGgxOFY5SDN2MnptMC02djJoMThWNUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5LWFsbCI+PHBhdGggZD0iTTcgOFY1bC03IDcgNyA3di0zbC00LTQgNC00em02IDFWNWwtNyA3IDcgN3YtNC4xYzUgMCA4LjUgMS42IDExIDUuMS0xLTUtNC0xMC0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQiPjxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXN0b3JlIj48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlc3RvcmUtcGFnZSI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptLTIgMTZjLTIuMDUgMC0zLjgxLTEuMjQtNC41OC0zaDEuNzFjLjYzLjkgMS42OCAxLjUgMi44NyAxLjUgMS45MyAwIDMuNS0xLjU3IDMuNS0zLjVTMTMuOTMgOS41IDEyIDkuNWMtMS4zNSAwLTIuNTIuNzgtMy4xIDEuOWwxLjYgMS42aC00VjlsMS4zIDEuM0M4LjY5IDguOTIgMTAuMjMgOCAxMiA4YzIuNzYgMCA1IDIuMjQgNSA1cy0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3VuZGVkLWNvcm5lciI+PHBhdGggZD0iTTE5IDE5aDJ2MmgtMnYtMnptMC0yaDJ2LTJoLTJ2MnpNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem04IDE2aDJ2LTJoLTJ2MnptLTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bS04IDBoMnYtMkg3djJ6bS00IDBoMnYtMkgzdjJ6TTIxIDhjMC0yLjc2LTIuMjQtNS01LTVoLTV2Mmg1YzEuNjUgMCAzIDEuMzUgMyAzdjVoMlY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvd2luZyI+PHBhdGggZD0iTTguNSAxNC41TDQgMTlsMS41IDEuNUw5IDE3aDJsLTIuNS0yLjV6TTE1IDFjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDIwLjAxTDE4IDI0bC0yLjk5LTMuMDFWMTkuNWwtNy4xLTcuMDljLS4zMS4wNS0uNjEuMDctLjkxLjA3di0yLjE2YzEuNjYuMDMgMy42MS0uODcgNC42Ny0yLjA0bDEuNC0xLjU1Yy4xOS0uMjEuNDMtLjM4LjY5LS41LjI5LS4xNC42Mi0uMjMuOTYtLjIzaC4wM0MxNS45OSA2LjAxIDE3IDcuMDIgMTcgOC4yNnY1Ljc1YzAgLjg0LS4zNSAxLjYxLS45MiAyLjE2bC0zLjU4LTMuNTh2LTIuMjdjLS42My41Mi0xLjQzIDEuMDItMi4yOSAxLjM5TDE2LjUgMThIMThsMyAzLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzY2hlZHVsZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzZWFyY2giPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZW5kIj48cGF0aCBkPSJNMi4wMSAyMUwyMyAxMiAyLjAxIDMgMiAxMGwxNSAyLTE1IDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmFja3VwLXJlc3RvcmUiPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmx1ZXRvb3RoIj48cGF0aCBkPSJNMTEgMjRoMnYtMmgtMnYyem0tNCAwaDJ2LTJIN3Yyem04IDBoMnYtMmgtMnYyem0yLjcxLTE4LjI5TDEyIDBoLTF2Ny41OUw2LjQxIDMgNSA0LjQxIDEwLjU5IDEwIDUgMTUuNTkgNi40MSAxNyAxMSAxMi40MVYyMGgxbDUuNzEtNS43MS00LjMtNC4yOSA0LjMtNC4yOXpNMTMgMy44M2wxLjg4IDEuODhMMTMgNy41OVYzLjgzem0xLjg4IDEwLjQ2TDEzIDE2LjE3di0zLjc2bDEuODggMS44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtY2VsbCI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6TTE2IC4wMUw4IDBDNi45IDAgNiAuOSA2IDJ2MTZjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE2SDhWNGg4djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWV0aGVybmV0Ij48cGF0aCBkPSJNNy43NyA2Ljc2TDYuMjMgNS40OC44MiAxMmw1LjQxIDYuNTIgMS41NC0xLjI4TDMuNDIgMTJsNC4zNS01LjI0ek03IDEzaDJ2LTJIN3Yyem0xMC0yaC0ydjJoMnYtMnptLTYgMmgydi0yaC0ydjJ6bTYuNzctNy41MmwtMS41NCAxLjI4TDIwLjU4IDEybC00LjM1IDUuMjQgMS41NCAxLjI4TDIzLjE4IDEybC01LjQxLTYuNTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvbmVudCI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb3NpdGUiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LXN2aWRlbyI+PHBhdGggZD0iTTggMTEuNWMwLS44My0uNjctMS41LTEuNS0xLjVTNSAxMC42NyA1IDExLjUgNS42NyAxMyA2LjUgMTMgOCAxMi4zMyA4IDExLjV6bTctNWMwLS44My0uNjctMS41LTEuNS0xLjVoLTNDOS42NyA1IDkgNS42NyA5IDYuNVM5LjY3IDggMTAuNSA4aDNjLjgzIDAgMS41LS42NyAxLjUtMS41ek04LjUgMTVjLS44MyAwLTEuNS42Ny0xLjUgMS41UzcuNjcgMTggOC41IDE4czEuNS0uNjcgMS41LTEuNVM5LjMzIDE1IDguNSAxNXpNMTIgMUM1LjkzIDEgMSA1LjkzIDEgMTJzNC45MyAxMSAxMSAxMSAxMS00LjkzIDExLTExUzE4LjA3IDEgMTIgMXptMCAyMGMtNC45NiAwLTktNC4wNC05LTlzNC4wNC05IDktOSA5IDQuMDQgOSA5LTQuMDQgOS05IDl6bTUuNS0xMWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bS0yIDVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLW92ZXJzY2FuIj48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcG93ZXIiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem0yLTIyaC0ydjEwaDJWMnptMy41NiAyLjQ0bC0xLjQ1IDEuNDVDMTYuODQgNi45NCAxOCA4LjgzIDE4IDExYzAgMy4zMS0yLjY5IDYtNiA2cy02LTIuNjktNi02YzAtMi4xNyAxLjE2LTQuMDYgMi44OC01LjEyTDcuNDQgNC40NEM1LjM2IDUuODggNCA4LjI4IDQgMTFjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOGMwLTIuNzItMS4zNi01LjEyLTMuNDQtNi41NnpNMTUgMjRoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXJlbW90ZSI+PHBhdGggZD0iTTE1IDlIOWMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjEwYzAtLjU1LS40NS0xLTEtMXptLTMgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTcuMDUgNi4wNWwxLjQxIDEuNDFDOS4zNyA2LjU2IDEwLjYyIDYgMTIgNnMyLjYzLjU2IDMuNTQgMS40NmwxLjQxLTEuNDFDMTUuNjggNC43OCAxMy45MyA0IDEyIDRzLTMuNjguNzgtNC45NSAyLjA1ek0xMiAwQzguOTYgMCA2LjIxIDEuMjMgNC4yMiAzLjIybDEuNDEgMS40MUM3LjI2IDMuMDEgOS41MSAyIDEyIDJzNC43NCAxLjAxIDYuMzYgMi42NGwxLjQxLTEuNDFDMTcuNzkgMS4yMyAxNS4wNCAwIDEyIDB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3AiPjxwYXRoIGQ9Ik0xNiA2VjRjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDJ2MTNjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmgtNnptLTYtMmg0djJoLTRWNHpNOSAxOFY5bDcuNSA0TDkgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcC10d28iPjxwYXRoIGQ9Ik0zIDlIMXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMkgzVjl6bTE1LTRWM2MwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMlY1aC01em0tNi0yaDR2MmgtNFYzem0wIDEyVjhsNS41IDMtNS41IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik03IDE4Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yek0xIDJ2MmgybDMuNiA3LjU5LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmgxMnYtMkg3LjQyYy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINS4yMWwtLjk0LTJIMXptMTYgMTZjLTEuMSAwLTEuOTkuOS0xLjk5IDJzLjg5IDIgMS45OSAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNvcnQiPjxwYXRoIGQ9Ik0zIDE4aDZ2LTJIM3Yyek0zIDZ2MmgxOFY2SDN6bTAgN2gxMnYtMkgzdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWFrZXItbm90ZXMtb2ZmIj48cGF0aCBkPSJNMTAuNTQgMTFsLS41NC0uNTRMNy41NCA4IDYgNi40NiAyLjM4IDIuODQgMS4yNyAxLjczIDAgM2wyLjAxIDIuMDFMMiAyMmw0LTRoOWw1LjczIDUuNzNMMjIgMjIuNDYgMTcuNTQgMThsLTctN3pNOCAxNEg2di0yaDJ2MnptLTItM1Y5bDIgMkg2em0xNC05SDQuMDhMMTAgNy45MlY2aDh2MmgtNy45MmwxIDFIMTh2MmgtNC45Mmw2Ljk5IDYuOTlDMjEuMTQgMTcuOTUgMjIgMTcuMDggMjIgMTZWNGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVsbGNoZWNrIj48cGF0aCBkPSJNMTIuNDUgMTZoMi4wOUw5LjQzIDNINy41N0wyLjQ2IDE2aDIuMDlsMS4xMi0zaDUuNjRsMS4xNCAzem0tNi4wMi01TDguNSA1LjQ4IDEwLjU3IDExSDYuNDN6bTE1LjE2LjU5bC04LjA5IDguMDlMOS44MyAxNmwtMS40MSAxLjQxIDUuMDkgNS4wOUwyMyAxM2wtMS40MS0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyLWJvcmRlciI+PHBhdGggZD0iTTIyIDkuMjRsLTcuMTktLjYyTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMSAxMiAxNy4yNyAxOC4xOCAyMWwtMS42My03LjAzTDIyIDkuMjR6TTEyIDE1LjRsLTMuNzYgMi4yNyAxLTQuMjgtMy4zMi0yLjg4IDQuMzgtLjM4TDEyIDYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3Rhci1oYWxmIj48cGF0aCBkPSJNMjIgOS4yNGwtNy4xOS0uNjJMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxIDEyIDE3LjI3IDE4LjE4IDIxbC0xLjYzLTcuMDNMMjIgOS4yNHpNMTIgMTUuNFY2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RvcmUiPjxwYXRoIGQ9Ik0yMCA0SDR2MmgxNlY0em0xIDEwdi0ybC0xLTVINGwtMSA1djJoMXY2aDEwdi02aDR2Nmgydi02aDF6bS05IDRINnYtNGg2djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViZGlyZWN0b3J5LWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xMSA5bDEuNDIgMS40Mkw4LjgzIDE0SDE4VjRoMnYxMkg4LjgzbDMuNTkgMy41OEwxMSAyMWwtNi02IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViamVjdCI+PHBhdGggZD0iTTE0IDE3SDR2MmgxMHYtMnptNi04SDR2MmgxNlY5ek00IDE1aDE2di0ySDR2MnpNNCA1djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1cGVydmlzb3ItYWNjb3VudCI+PHBhdGggZD0iTTE2LjUgMTJjMS4zOCAwIDIuNDktMS4xMiAyLjQ5LTIuNVMxNy44OCA3IDE2LjUgN0MxNS4xMiA3IDE0IDguMTIgMTQgOS41czEuMTIgMi41IDIuNSAyLjV6TTkgMTFjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNTMTAuNjYgNSA5IDVDNy4zNCA1IDYgNi4zNCA2IDhzMS4zNCAzIDMgM3ptNy41IDNjLTEuODMgMC01LjUuOTItNS41IDIuNzVWMTloMTF2LTIuMjVjMC0xLjgzLTMuNjctMi43NS01LjUtMi43NXpNOSAxM2MtMi4zMyAwLTcgMS4xNy03IDMuNVYxOWg3di0yLjI1YzAtLjg1LjMzLTIuMzQgMi4zNy0zLjQ3QzEwLjUgMTMuMSA5LjY2IDEzIDkgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnQiPjxwYXRoIGQ9Ik0xNiAxNy4wMVYxMGgtMnY3LjAxaC0zTDE1IDIxbDQtMy45OWgtM3pNOSAzTDUgNi45OWgzVjE0aDJWNi45OWgzTDkgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnRpY2FsLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTYuNSA5TDEwIDUuNSAxMy41IDlIMTF2NEg5VjlINi41em0xMSA2TDE0IDE4LjUgMTAuNSAxNUgxM3YtNGgydjRoMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhYiI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFiLXVuc2VsZWN0ZWQiPjxwYXRoIGQ9Ik0xIDloMlY3SDF2MnptMCA0aDJ2LTJIMXYyem0wLThoMlYzYy0xLjEgMC0yIC45LTIgMnptOCAxNmgydi0ySDl2MnptLTgtNGgydi0ySDF2MnptMiA0di0ySDFjMCAxLjEuOSAyIDIgMnpNMjEgM2gtOHY2aDEwVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTRoMnYtMmgtMnYyek05IDVoMlYzSDl2MnpNNSAyMWgydi0ySDV2MnpNNSA1aDJWM0g1djJ6bTE2IDE2YzEuMSAwIDItLjkgMi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRoZWF0ZXJzIj48cGF0aCBkPSJNMTggM3YyaC0yVjNIOHYySDZWM0g0djE4aDJ2LTJoMnYyaDh2LTJoMnYyaDJWM2gtMnpNOCAxN0g2di0yaDJ2MnptMC00SDZ2LTJoMnYyem0wLTRINlY3aDJ2MnptMTAgOGgtMnYtMmgydjJ6bTAtNGgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYi1kb3duIj48cGF0aCBkPSJNMTUgM0g2Yy0uODMgMC0xLjU0LjUtMS44NCAxLjIybC0zLjAyIDcuMDVjLS4wOS4yMy0uMTQuNDctLjE0LjczdjEuOTFsLjAxLjAxTDEgMTRjMCAxLjEuOSAyIDIgMmg2LjMxbC0uOTUgNC41Ny0uMDMuMzJjMCAuNDEuMTcuNzkuNDQgMS4wNkw5LjgzIDIzbDYuNTktNi41OWMuMzYtLjM2LjU4LS44Ni41OC0xLjQxVjVjMC0xLjEtLjktMi0yLTJ6bTQgMHYxMmg0VjNoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYnMtdXAtZG93biI+PHBhdGggZD0iTTEyIDZjMC0uNTUtLjQ1LTEtMS0xSDUuODJsLjY2LTMuMTguMDItLjIzYzAtLjMxLS4xMy0uNTktLjMzLS44TDUuMzggMCAuNDQgNC45NEMuMTcgNS4yMSAwIDUuNTkgMCA2djYuNWMwIC44My42NyAxLjUgMS41IDEuNWg2Ljc1Yy42MiAwIDEuMTUtLjM4IDEuMzgtLjkxbDIuMjYtNS4yOWMuMDctLjE3LjExLS4zNi4xMS0uNTVWNnptMTAuNSA0aC02Ljc1Yy0uNjIgMC0xLjE1LjM4LTEuMzguOTFsLTIuMjYgNS4yOWMtLjA3LjE3LS4xMS4zNi0uMTEuNTVWMThjMCAuNTUuNDUgMSAxIDFoNS4xOGwtLjY2IDMuMTgtLjAyLjI0YzAgLjMxLjEzLjU5LjMzLjhsLjc5Ljc4IDQuOTQtNC45NGMuMjctLjI3LjQ0LS42NS40NC0xLjA2di02LjVjMC0uODMtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVsaW5lIj48cGF0aCBkPSJNMjMgOGMwIDEuMS0uOSAyLTIgMi0uMTggMC0uMzUtLjAyLS41MS0uMDdsLTMuNTYgMy41NWMuMDUuMTYuMDcuMzQuMDcuNTIgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yYzAtLjE4LjAyLS4zNi4wNy0uNTJsLTIuNTUtMi41NWMtLjE2LjA1LS4zNC4wNy0uNTIuMDdzLS4zNi0uMDItLjUyLS4wN2wtNC41NSA0LjU2Yy4wNS4xNi4wNy4zMy4wNy41MSAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTJjLjE4IDAgLjM1LjAyLjUxLjA3bDQuNTYtNC41NUM4LjAyIDkuMzYgOCA5LjE4IDggOWMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgLjE4LS4wMi4zNi0uMDcuNTJsMi41NSAyLjU1Yy4xNi0uMDUuMzQtLjA3LjUyLS4wN3MuMzYuMDIuNTIuMDdsMy41NS0zLjU2QzE5LjAyIDguMzUgMTkgOC4xOCAxOSA4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2RheSI+PHBhdGggZD0iTTE5IDNoLTFWMWgtMnYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOGgxNHYxMXpNNyAxMGg1djVIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2xsIj48cGF0aCBkPSJNMTUgNGMtNC40MiAwLTggMy41OC04IDhzMy41OCA4IDggOCA4LTMuNTggOC04LTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2ek0zIDEyYzAtMi42MSAxLjY3LTQuODMgNC01LjY1VjQuMjZDMy41NSA1LjE1IDEgOC4yNyAxIDEyczIuNTUgNi44NSA2IDcuNzR2LTIuMDljLTIuMzMtLjgyLTQtMy4wNC00LTUuNjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhY2stY2hhbmdlcyI+PHBhdGggZD0iTTE5LjA3IDQuOTNsLTEuNDEgMS40MUMxOS4xIDcuNzkgMjAgOS43OSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHMtOC0zLjU4LTgtOGMwLTQuMDggMy4wNS03LjQ0IDctNy45M3YyLjAyQzguMTYgNi41NyA2IDkuMDMgNiAxMmMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMS42Ni0uNjctMy4xNi0xLjc2LTQuMjRsLTEuNDEgMS40MUMxNS41NSA5LjkgMTYgMTAuOSAxNiAxMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNGMwLTEuODYgMS4yOC0zLjQxIDMtMy44NnYyLjE0Yy0uNi4zNS0xIC45OC0xIDEuNzIgMCAxLjEuOSAyIDIgMnMyLS45IDItMmMwLS43NC0uNC0xLjM4LTEtMS43MlYyaC0xQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBjMC0yLjc2LTEuMTItNS4yNi0yLjkzLTcuMDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhbnNsYXRlIj48cGF0aCBkPSJNMTIuODcgMTUuMDdsLTIuNTQtMi41MS4wMy0uMDNjMS43NC0xLjk0IDIuOTgtNC4xNyAzLjcxLTYuNTNIMTdWNGgtN1YySDh2MkgxdjEuOTloMTEuMTdDMTEuNSA3LjkyIDEwLjQ0IDkuNzUgOSAxMS4zNSA4LjA3IDEwLjMyIDcuMyA5LjE5IDYuNjkgOGgtMmMuNzMgMS42MyAxLjczIDMuMTcgMi45OCA0LjU2bC01LjA5IDUuMDJMNCAxOWw1LTUgMy4xMSAzLjExLjc2LTIuMDR6TTE4LjUgMTBoLTJMMTIgMjJoMmwxLjEyLTNoNC43NUwyMSAyMmgybC00LjUtMTJ6bS0yLjYyIDdsMS42Mi00LjMzTDE5LjEyIDE3aC0zLjI0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy1mbGF0Ij48cGF0aCBkPSJNMjIgMTJsLTQtNHYzSDN2MmgxNXYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLXVwIj48cGF0aCBkPSJNMTYgNmwyLjI5IDIuMjktNC44OCA0Ljg4LTQtNEwyIDE2LjU5IDMuNDEgMThsNi02IDQgNCA2LjMtNi4yOUwyMiAxMlY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dXJuZWQtaW4tbm90Ij48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yem0wIDE1bC01LTIuMThMNyAxOFY1aDEwdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuYXJjaGl2ZSI+PHBhdGggZD0iTTIwLjU1IDUuMjJsLTEuMzktMS42OEMxOC44OCAzLjIxIDE4LjQ3IDMgMTggM0g2Yy0uNDcgMC0uODguMjEtMS4xNS41NUwzLjQ2IDUuMjJDMy4xNyA1LjU3IDMgNi4wMSAzIDYuNVYxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDktLjE3LS45My0uNDUtMS4yOHpNMTIgOS41bDUuNSA1LjVIMTR2MmgtNHYtMkg2LjVMMTIgOS41ek01LjEyIDVsLjgyLTFoMTJsLjkzIDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5mb2xkLWxlc3MiPjxwYXRoIGQ9Ik03LjQxIDE4LjU5TDguODMgMjAgMTIgMTYuODMgMTUuMTcgMjBsMS40MS0xLjQxTDEyIDE0bC00LjU5IDQuNTl6bTkuMTgtMTMuMThMMTUuMTcgNCAxMiA3LjE3IDguODMgNCA3LjQxIDUuNDEgMTIgMTBsNC41OS00LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZm9sZC1tb3JlIj48cGF0aCBkPSJNMTIgNS44M0wxNS4xNyA5bDEuNDEtMS40MUwxMiAzIDcuNDEgNy41OSA4LjgzIDkgMTIgNS44M3ptMCAxMi4zNEw4LjgzIDE1bC0xLjQxIDEuNDFMMTIgMjFsNC41OS00LjU5TDE1LjE3IDE1IDEyIDE4LjE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2ZXJpZmllZC11c2VyIj48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bS0yIDE2bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1hZ2VuZGEiPjxwYXRoIGQ9Ik0yMCAxM0gzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTF2LTZjMC0uNTUtLjQ1LTEtMS0xem0wLTEwSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jYXJvdXNlbCI+PHBhdGggZD0iTTcgMTloMTBWNEg3djE1em0tNS0yaDRWNkgydjExek0xOCA2djExaDRWNmgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbHVtbiI+PHBhdGggZD0iTTEwIDE4aDVWNWgtNXYxM3ptLTYgMGg1VjVINHYxM3pNMTYgNXYxM2g1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWhlYWRsaW5lIj48cGF0aCBkPSJNNCAxNWgxNnYtMkg0djJ6bTAgNGgxNnYtMkg0djJ6bTAtOGgxNlY5SDR2MnptMC02djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctbGlzdCI+PHBhdGggZD0iTTQgMTRoNHYtNEg0djR6bTAgNWg0di00SDR2NHpNNCA5aDRWNUg0djR6bTUgNWgxMnYtNEg5djR6bTAgNWgxMnYtNEg5djR6TTkgNXY0aDEyVjVIOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1xdWlsdCI+PHBhdGggZD0iTTEwIDE4aDV2LTZoLTV2NnptLTYgMGg1VjVINHYxM3ptMTIgMGg1di02aC01djZ6TTEwIDV2NmgxMVY1SDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctc3RyZWFtIj48cGF0aCBkPSJNNCAxOGgxN3YtNkg0djZ6TTQgNXY2aDE3VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aXNpYmlsaXR5Ij48cGF0aCBkPSJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpc2liaWxpdHktb2ZmIj48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3YXRjaC1sYXRlciI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem00LjIgMTQuMkwxMSAxM1Y3aDEuNXY1LjJsNC41IDIuNy0uOCAxLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Vla2VuZCI+PHBhdGggZD0iTTIxIDEwYy0xLjEgMC0yIC45LTIgMnYzSDV2LTNjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAydjVjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnYtNWMwLTEuMS0uOS0yLTItMnptLTMtNUg2Yy0xLjEgMC0yIC45LTIgMnYyLjE1YzEuMTYuNDEgMiAxLjUxIDIgMi44MlYxNGgxMnYtMi4wM2MwLTEuMy44NC0yLjQgMi0yLjgyVjdjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InlvdXR1YmUtc2VhcmNoZWQtZm9yIj48cGF0aCBkPSJNMTcuMDEgMTRoLS44bC0uMjctLjI3Yy45OC0xLjE0IDEuNTctMi42MSAxLjU3LTQuMjMgMC0zLjU5LTIuOTEtNi41LTYuNS02LjVzLTYuNSAzLTYuNSA2LjVIMmwzLjg0IDQgNC4xNi00SDYuNTFDNi41MSA3IDguNTMgNSAxMS4wMSA1czQuNSAyLjAxIDQuNSA0LjVjMCAyLjQ4LTIuMDIgNC41LTQuNSA0LjUtLjY1IDAtMS4yNi0uMTQtMS44Mi0uMzhMNy43MSAxNS4xYy45Ny41NyAyLjA5LjkgMy4zLjkgMS42MSAwIDMuMDgtLjU5IDQuMjItMS41N2wuMjcuMjd2Ljc5bDUuMDEgNC45OUwyMiAxOWwtNC45OS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20taW4iPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0em0yLjUtNGgtMnYySDl2LTJIN1Y5aDJWN2gxdjJoMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHZiZS5jb250ZW50KTt2YXIgdDB0PXsiVSswMDA4IjoiYmFja3NwYWNlIiwiVSswMDA5IjoidGFiIiwiVSswMDFCIjoiZXNjIiwiVSswMDIwIjoic3BhY2UiLCJVKzAwN0YiOiJkZWwifSx4YmU9ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0sZTB0PXtzaGlmdDoic2hpZnRLZXkiLGN0cmw6ImN0cmxLZXkiLGFsdDoiYWx0S2V5IixtZXRhOiJtZXRhS2V5In0sYmJlPS9bYS16MC05Kl0vLHdiZT0vVVwrLyxTYmU9L15hcnJvdy8sTWJlPS9ec3BhY2UoYmFyKT8vLEViZT0vXmVzY2FwZSQvO2Z1bmN0aW9uIHIwdChlLHQpe3ZhciByPSIiO2lmKGUpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtuPT09IiAifHxNYmUudGVzdChuKT9yPSJzcGFjZSI6RWJlLnRlc3Qobik/cj0iZXNjIjpuLmxlbmd0aD09MT8oIXR8fGJiZS50ZXN0KG4pKSYmKHI9bik6U2JlLnRlc3Qobik/cj1uLnJlcGxhY2UoImFycm93IiwiIik6bj09Im11bHRpcGx5Ij9yPSIqIjpyPW59cmV0dXJuIHJ9ZnVuY3Rpb24gVGJlKGUpe3ZhciB0PSIiO3JldHVybiBlJiYoZSBpbiB0MHQ/dD10MHRbZV06d2JlLnRlc3QoZSk/KGU9cGFyc2VJbnQoZS5yZXBsYWNlKCJVKyIsIjB4IiksMTYpLHQ9U3RyaW5nLmZyb21DaGFyQ29kZShlKS50b0xvd2VyQ2FzZSgpKTp0PWUudG9Mb3dlckNhc2UoKSksdH1mdW5jdGlvbiBDYmUoZSl7dmFyIHQ9IiI7cmV0dXJuIE51bWJlcihlKSYmKGU+PTY1JiZlPD05MD90PVN0cmluZy5mcm9tQ2hhckNvZGUoMzIrZSk6ZT49MTEyJiZlPD0xMjM/dD0iZiIrKGUtMTEyKzEpOmU+PTQ4JiZlPD01Nz90PVN0cmluZyhlLTQ4KTplPj05NiYmZTw9MTA1P3Q9U3RyaW5nKGUtOTYpOnQ9eGJlW2VdKSx0fWZ1bmN0aW9uIEFiZShlLHQpe3JldHVybiBlLmtleT9yMHQoZS5rZXksdCk6ZS5kZXRhaWwmJmUuZGV0YWlsLmtleT9yMHQoZS5kZXRhaWwua2V5LHQpOlRiZShlLmtleUlkZW50aWZpZXIpfHxDYmUoZS5rZXlDb2RlKXx8IiJ9ZnVuY3Rpb24gbjB0KGUsdCl7dmFyIHI9QWJlKHQsZS5oYXNNb2RpZmllcnMpO3JldHVybiByPT09ZS5rZXkmJighZS5oYXNNb2RpZmllcnN8fCEhdC5zaGlmdEtleT09ISFlLnNoaWZ0S2V5JiYhIXQuY3RybEtleT09ISFlLmN0cmxLZXkmJiEhdC5hbHRLZXk9PSEhZS5hbHRLZXkmJiEhdC5tZXRhS2V5PT0hIWUubWV0YUtleSl9ZnVuY3Rpb24gUGJlKGUpe3JldHVybiBlLmxlbmd0aD09PTE/e2NvbWJvOmUsa2V5OmUsZXZlbnQ6ImtleWRvd24ifTplLnNwbGl0KCIrIikucmVkdWNlKGZ1bmN0aW9uKHQscil7dmFyIG49ci5zcGxpdCgiOiIpLGk9blswXSxvPW5bMV07cmV0dXJuIGkgaW4gZTB0Pyh0W2UwdFtpXV09ITAsdC5oYXNNb2RpZmllcnM9ITApOih0LmtleT1pLHQuZXZlbnQ9b3x8ImtleWRvd24iKSx0fSx7Y29tYm86ZS5zcGxpdCgiOiIpLnNoaWZ0KCl9KX1mdW5jdGlvbiBpMHQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBQYmUodCl9KX12YXIgT289e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxhZGRPd25LZXlCaW5kaW5nOmZ1bmN0aW9uKGUsdCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW2VdPXQsdGhpcy5fcHJlcEtleUJpbmRpbmdzKCksdGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxyZW1vdmVPd25LZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncz17fSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LGtleWJvYXJkRXZlbnRNYXRjaGVzS2V5czpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1pMHQodCksbj0wO248ci5sZW5ndGg7KytuKWlmKG4wdChyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iZWhhdmlvcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUJpbmRpbmdzfSk7cmV0dXJuIGUuaW5kZXhPZih0aGlzLmtleUJpbmRpbmdzKT09PS0xJiZlLnB1c2godGhpcy5rZXlCaW5kaW5ncyksZX0sX3ByZXBLZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2tleUJpbmRpbmdzPXt9LHRoaXMuX2NvbGxlY3RLZXlCaW5kaW5ncygpLmZvckVhY2goZnVuY3Rpb24ocil7Zm9yKHZhciBuIGluIHIpdGhpcy5fYWRkS2V5QmluZGluZyhuLHJbbl0pfSx0aGlzKTtmb3IodmFyIGUgaW4gdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzKXRoaXMuX2FkZEtleUJpbmRpbmcoZSx0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbZV0pO2Zvcih2YXIgdCBpbiB0aGlzLl9rZXlCaW5kaW5ncyl0aGlzLl9rZXlCaW5kaW5nc1t0XS5zb3J0KGZ1bmN0aW9uKHIsbil7dmFyIGk9clswXS5oYXNNb2RpZmllcnMsbz1uWzBdLmhhc01vZGlmaWVycztyZXR1cm4gaT09PW8/MDppPy0xOjF9KX0sX2FkZEtleUJpbmRpbmc6ZnVuY3Rpb24oZSx0KXtpMHQoZSkuZm9yRWFjaChmdW5jdGlvbihyKXt0aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XT10aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XXx8W10sdGhpcy5fa2V5QmluZGluZ3Nbci5ldmVudF0ucHVzaChbcix0XSl9LHRoaXMpfSxfcmVzZXRLZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LF9saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpeyF0aGlzLmtleUV2ZW50VGFyZ2V0fHxPYmplY3Qua2V5cyh0aGlzLl9rZXlCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9rZXlCaW5kaW5nc1tlXSxyPXRoaXMuX29uS2V5QmluZGluZ0V2ZW50LmJpbmQodGhpcyx0KTt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLnB1c2goW3RoaXMua2V5RXZlbnRUYXJnZXQsZSxyXSksdGhpcy5rZXlFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKGUscil9LHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgZSx0LHIsbjt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspZT10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpLHQ9ZVswXSxyPWVbMV0sbj1lWzJdLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSxfb25LZXlCaW5kaW5nRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb24mJnQuc3RvcFByb3BhZ2F0aW9uKCksIXQuZGVmYXVsdFByZXZlbnRlZClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXVswXSxpPWVbcl1bMV07aWYobjB0KG4sdCkmJih0aGlzLl90cmlnZ2VyS2V5SGFuZGxlcihuLGksdCksdC5kZWZhdWx0UHJldmVudGVkKSlyZXR1cm59fSxfdHJpZ2dlcktleUhhbmRsZXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPU9iamVjdC5jcmVhdGUoZSk7bi5rZXlib2FyZEV2ZW50PXI7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KGUuZXZlbnQse2RldGFpbDpuLGNhbmNlbGFibGU6ITB9KTt0aGlzW3RdLmNhbGwodGhpcyxpKSxpLmRlZmF1bHRQcmV2ZW50ZWQmJnIucHJldmVudERlZmF1bHQoKX19O3ZhciB2OT17cHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOkhUTUxFbGVtZW50LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRTY3JvbGxUYXJnZXR9fX0sb2JzZXJ2ZXJzOlsiX3Njcm9sbFRhcmdldENoYW5nZWQoc2Nyb2xsVGFyZ2V0LCBpc0F0dGFjaGVkKSJdLF9zaG91bGRIYXZlTGlzdGVuZXI6ITAsX3Njcm9sbFRhcmdldENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZih0aGlzLl9vbGRTY3JvbGxUYXJnZXQmJih0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcighMSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQpLHRoaXMuX29sZFNjcm9sbFRhcmdldD1udWxsKSwhIXQpaWYoZT09PSJkb2N1bWVudCIpdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy5fZG9jO2Vsc2UgaWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgbj10aGlzLmRvbUhvc3Q7dGhpcy5zY3JvbGxUYXJnZXQ9biYmbi4kP24uJFtlXTp6dCh0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3IoIiMiK2UpfWVsc2UgdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIodGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyLGUpKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLl9kb2N9LGdldCBfZG9jKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGdldCBfc2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVlPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wOjB9LGdldCBfc2Nyb2xsTGVmdCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VYT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ6MH0sc2V0IF9zY3JvbGxUb3AoZSl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCxlKTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9ZSl9LHNldCBfc2Nyb2xsTGVmdChlKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8oZSx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9ZSl9LHNjcm9sbDpmdW5jdGlvbihlLHQpe3ZhciByO3R5cGVvZiBlPT0ib2JqZWN0Ij8ocj1lLmxlZnQsdD1lLnRvcCk6cj1lLHI9cnx8MCx0PXR8fDAsdGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHIsdCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1yLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD10KX0sZ2V0IF9zY3JvbGxUYXJnZXRXaWR0aCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVyV2lkdGg6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0V2lkdGg6MH0sZ2V0IF9zY3JvbGxUYXJnZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ6MH0sX2lzVmFsaWRTY3JvbGxUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sX3RvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dD09PXRoaXMuX2RvYz93aW5kb3c6dDtlP3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcnx8KHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcikpOnRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj1udWxsKX0sdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyPWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoZSx0aGlzLnNjcm9sbFRhcmdldCl9fTt2YXIgbzB0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksSWJlPW8wdCYmbzB0WzFdPj04LGEwdD0zLHMwdD0iLTEwMDAwcHgiLGZFPS0xMDA7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIEBhcHBseSAtLWlyb24tbGlzdC1pdGVtcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtncmlkXSkpICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhcnJheS1zZWxlY3RvciBpZD0ic2VsZWN0b3IiIGl0ZW1zPSJ7e2l0ZW1zfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSXRlbXN9fSIgc2VsZWN0ZWQtaXRlbT0ie3tzZWxlY3RlZEl0ZW19fSI+PC9hcnJheS1zZWxlY3Rvcj4KCiAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxzZWxlY3RlZEFzOnt0eXBlOlN0cmluZyx2YWx1ZToic2VsZWN0ZWQifSxncmlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W1dndCxKcyx2OSxLZ3RdLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxfcGFyZW50TW9kZWw6ITAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3ZhciBlPXRoaXMuZ3JpZD90aGlzLl9waHlzaWNhbFJvd3MqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZTtyZXR1cm4gZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiB6dCh6dCh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSxnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciBlPXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCxlLXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl92aXJ0dWFsU3RhcnRWYWw9ZX0sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxzZXQgX3BoeXNpY2FsU3RhcnQoZSl7ZT1lJXRoaXMuX3BoeXNpY2FsQ291bnQsZTwwJiYoZT10aGlzLl9waHlzaWNhbENvdW50K2UpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe3ZhciBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe3ZhciB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChyKSx0PnRoaXMuX3Njcm9sbFBvc2l0aW9uKXJldHVybiB0aGlzLmdyaWQ/bi1uJXRoaXMuX2l0ZW1zUGVyUm93Om47aWYodGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PW4pcmV0dXJuIG4tbiV0aGlzLl9pdGVtc1BlclJvd30pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtpZih0aGlzLmdyaWQpZT1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocil9KX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzfSxnZXQgX3ZpcnR1YWxSb3dDb3VudCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlydHVhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9lc3RSb3dzSW5WaWV3KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aWV3cG9ydEhlaWdodC90aGlzLl9yb3dIZWlnaHQpfSxnZXQgX3BoeXNpY2FsUm93cygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCt0aGlzLnNjcm9sbE9mZnNldH0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9kaWRGb2N1cy5iaW5kKHRoaXMpLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpLHRoaXMudW5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxfc2V0T3ZlcmZsb3c6ZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz1lPT09dGhpcz8idG91Y2giOiIiLHRoaXMuc3R5bGUub3ZlcmZsb3dZPWU9PT10aGlzPyJhdXRvIjoiIix0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KGVbInBhZGRpbmctdG9wIl0sMTApLHRoaXMuX2lzUlRMPUJvb2xlYW4oZS5kaXJlY3Rpb249PT0icnRsIiksdGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGgsdGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0LHRoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDt2YXIgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdzt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl9zY3JvbGxQb3NpdGlvbiksdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe3ZhciBpPXRoaXMuX2dldFJldXNhYmxlcyhyKTtyPyh0aGlzLl9waHlzaWNhbFRvcD1pLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQraS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5pbmRleGVzLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkuaW5kZXhlcyxyP251bGw6aS5pbmRleGVzKSx0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsMCksbGkpfX0sX2dldFJldXNhYmxlczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvPVtdLGE9dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8scz10aGlzLl92aXJ0dWFsU3RhcnQsbD10aGlzLl92aXJ0dWFsRW5kLGM9dGhpcy5fcGh5c2ljYWxDb3VudCx1PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxmPXRoaXMuX3Njcm9sbFBvc2l0aW9uLHA9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl9waHlzaWNhbEVuZCxuPWYtdSk6KHQ9dGhpcy5fcGh5c2ljYWxFbmQscj10aGlzLl9waHlzaWNhbFN0YXJ0LG49aC1wKTtpPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxuPW4taSwhKG8ubGVuZ3RoPj1jfHxuPD1hKTspaWYoZSl7aWYobCtvLmxlbmd0aCsxPj10aGlzLl92aXJ0dWFsQ291bnR8fHUraT49Zi10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7by5wdXNoKHQpLHU9dStpLHQ9KHQrMSklY31lbHNle2lmKHMtby5sZW5ndGg8PTB8fHUrdGhpcy5fcGh5c2ljYWxTaXplLWk8PXApYnJlYWs7by5wdXNoKHQpLHU9dS1pLHQ9dD09PTA/Yy0xOnQtMX1yZXR1cm57aW5kZXhlczpvLHBoeXNpY2FsVG9wOnUtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSYmZS5sZW5ndGg9PT0wfHx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHIpfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGUpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIHQscixuPW5ldyBBcnJheShlKTtmb3IodD0wO3Q8ZTt0Kyspcj10aGlzLnN0YW1wKG51bGwpLG5bdF09ci5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKSx0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChyLnJvb3QpO3JldHVybiBufSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UsYTB0LHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2lmKHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0KSx0aGlzLmdyaWQpe3ZhciByPXQldGhpcy5faXRlbXNQZXJSb3c7ciYmdC1yPD10aGlzLl9waHlzaWNhbENvdW50JiYodCs9dGhpcy5faXRlbXNQZXJSb3cpLHQtPXJ9dmFyIG49dC10aGlzLl9waHlzaWNhbENvdW50LGk9TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KTtpZighKG48MCkpe2lmKG4+MCl7dmFyIG89d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKG4pKTtmb3IodmFyIGE9MDthPG47YSsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnQrbix0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrbiksdGhpcy5fdXBkYXRlKCksdGhpcy5fdGVtcGxhdGVDb3N0PSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCktbykvbixpPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fGk9PT0wfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLGkpKSxreCk6dGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLGkpLGxpKSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYoISghdGhpcy5pc0F0dGFjaGVkfHwhdGhpcy5faXNWaXNpYmxlKSlpZih0aGlzLl9waHlzaWNhbENvdW50IT09MCl7dmFyIGU9dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl91cGRhdGUoZS5pbmRleGVzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChhMHQpKX0sX2Vuc3VyZVRlbXBsYXRpemVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Rvcil7dGhpcy5fdXNlclRlbXBsYXRlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigidGVtcGxhdGUiKSx0aGlzLl91c2VyVGVtcGxhdGV8fGNvbnNvbGUud2FybigiaXJvbi1saXN0IHJlcXVpcmVzIGEgdGVtcGxhdGUgdG8gYmUgcHJvdmlkZWQgaW4gbGlnaHQtZG9tIik7dmFyIGU9e307ZS5fX2tleV9fPSEwLGVbdGhpcy5hc109ITAsZVt0aGlzLmluZGV4QXNdPSEwLGVbdGhpcy5zZWxlY3RlZEFzXT0hMCxlLnRhYkluZGV4PSEwLHRoaXMuX2luc3RhbmNlUHJvcHM9ZSx0aGlzLnRlbXBsYXRpemUodGhpcy5fdXNlclRlbXBsYXRlLHRoaXMubXV0YWJsZURhdGEpfX0sX2dyaWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dHlwZW9mIHQhPSJ1bmRlZmluZWQiJiYodGhpcy5ub3RpZnlSZXNpemUoKSxjaSgpLGUmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGUpe2lmKGUucGF0aD09PSJpdGVtcyIpdGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpO2Vsc2UgaWYoZS5wYXRoPT09Iml0ZW1zLnNwbGljZXMiKXt0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgoZS52YWx1ZS5pbmRleFNwbGljZXMpLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjA7dmFyIHQ9ZS52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihpKXtyZXR1cm4gaS5hZGRlZENvdW50PjB8fGkucmVtb3ZlZC5sZW5ndGg+MH0pO2lmKHQpe3ZhciByPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt0aGlzLmNvbnRhaW5zKHIpJiZyLmJsdXIoKX12YXIgbj1lLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKGkpe3JldHVybiBpLmluZGV4K2kuYWRkZWRDb3VudD49dGhpcy5fdmlydHVhbFN0YXJ0JiZpLmluZGV4PD10aGlzLl92aXJ0dWFsRW5kfSx0aGlzKTsoIXRoaXMuX2lzQ2xpZW50RnVsbCgpfHxuKSYmdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSl9ZWxzZSBlLnBhdGghPT0iaXRlbXMubGVuZ3RoIiYmdGhpcy5fZm9yd2FyZEl0ZW1QYXRoKGUucGF0aCxlLnZhbHVlKX0sX2ZvcndhcmRJdGVtUGF0aDpmdW5jdGlvbihlLHQpe2U9ZS5zbGljZSg2KTt2YXIgcj1lLmluZGV4T2YoIi4iKTtyPT09LTEmJihyPWUubGVuZ3RoKTt2YXIgbixpLG8sYT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkscz1wYXJzZUludChlLnN1YnN0cmluZygwLHIpLDEwKTtuPXRoaXMuX2lzSW5kZXhSZW5kZXJlZChzKSxuPyhpPXRoaXMuX2dldFBoeXNpY2FsSW5kZXgocyksbz10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW2ldKSk6YSYmKG89YSksISghb3x8b1t0aGlzLmluZGV4QXNdIT09cykmJihlPWUuc3Vic3RyaW5nKHIrMSksZT10aGlzLmFzKyhlPyIuIitlOiIiKSxvLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSx0LCExLCEwKSxvLl9mbHVzaFByb3BlcnRpZXMmJm8uX2ZsdXNoUHJvcGVydGllcygpLG4mJih0aGlzLl91cGRhdGVNZXRyaWNzKFtpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpKSl9LF9hZGp1c3RWaXJ0dWFsSW5kZXg6ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQucmVtb3ZlZC5mb3JFYWNoKHRoaXMuX3JlbW92ZUl0ZW0sdGhpcyksdC5pbmRleDx0aGlzLl92aXJ0dWFsU3RhcnQpe3ZhciByPU1hdGgubWF4KHQuYWRkZWRDb3VudC10LnJlbW92ZWQubGVuZ3RoLHQuaW5kZXgtdGhpcy5fdmlydHVhbFN0YXJ0KTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3IsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD49MCYmKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCtyKX19LHRoaXMpfSxfcmVtb3ZlSXRlbTpmdW5jdGlvbihlKXt0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3QoZSksdGhpcy5fZm9jdXNlZEl0ZW0mJnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKVt0aGlzLmFzXT09PWUmJnRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oZSl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSxpPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbcl07aWYoaSE9bnVsbCl7dmFyIG89dGhpcy5tb2RlbEZvckVsZW1lbnQobik7by5fX2tleV9fPW51bGwsdGhpcy5fZm9yd2FyZFByb3BlcnR5KG8sdGhpcy5hcyxpKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobyx0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQoaSkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLHRoaXMuaW5kZXhBcyxyKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobywidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1yPzA6LTEpLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbby5fX2tleV9fXT10LG8uX2ZsdXNoUHJvcGVydGllcyYmby5fZmx1c2hQcm9wZXJ0aWVzKCEwKSxuLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBuLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIil9LGUpfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtjaSgpO3ZhciB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8sYSl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLmdyaWQ/KHRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxTaXplPU1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQpOihyPXRoaXMuX2l0ZW1zUGVyUm93PT09MT9yOk1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5faXRlbXNQZXJSb3c9MSksdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9dGhpcy5fcGh5c2ljYWxDb3VudD4wP3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwLHRoaXMuX3Jvd0hlaWdodD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwLHRoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKTp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIHQ9dGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoLHI9KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdCkvMjt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obixpKXt2YXIgbz1pJXRoaXMuX2l0ZW1zUGVyUm93LGE9TWF0aC5mbG9vcihvKnRoaXMuX2l0ZW1XaWR0aCtyKTt0aGlzLl9pc1JUTCYmKGE9YSotMSksdGhpcy50cmFuc2xhdGUzZChhKyJweCIsZSsicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1tuXSksdGhpcy5fc2hvdWxkUmVuZGVyTmV4dFJvdyhpKSYmKGUrPXRoaXMuX3Jvd0hlaWdodCl9KX1lbHNle2xldCBuPVtdO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihpLG8pe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLGEpLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbaV07bGV0IHM9YS5pZDtzJiZuLnB1c2gocyl9KSxuLmxlbmd0aCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsbi5qb2luKCIgIikpfX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ncmlkP3RoaXMuX2NvbXB1dGVWaWR4KGUpJXRoaXMuX2l0ZW1zUGVyUm93IT09dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW2VdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbihlKXtyZXR1cm4gZSV0aGlzLl9pdGVtc1BlclJvdz09PXRoaXMuX2l0ZW1zUGVyUm93LTF9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7dmFyIHQ9dGhpcy5fc2Nyb2xsUG9zaXRpb247IUliZSYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5ncmlkP3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl92aXJ0dWFsUm93Q291bnQqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLGU9ZXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCwoZXx8TWF0aC5hYnModGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3Njcm9sbEhlaWdodCk+PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KSYmKHRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCl9LHNjcm9sbFRvSXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHNjcm9sbFRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYoISh0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKGNpKCksdGhpcy5fcGh5c2ljYWxDb3VudCE9PTApKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl92aXJ0dWFsQ291bnQtMSksKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSl8fGU+PXRoaXMuX21heFZpcnR1YWxTdGFydCkmJih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5ncmlkP2UtdGhpcy5faXRlbXNQZXJSb3cqMjplLTEpLHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7cjxlJiZuPD1pOyluPW4rdGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9fSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTAsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsZnVuY3Rpb24oKXt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9pc1Zpc2libGU/KHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMCksdGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5fcmVuZGVyKCkpOnRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEpfSxOaSl9LHNlbGVjdEl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7aWYoIShlPDB8fGU+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe2lmKCF0aGlzLm11bHRpU2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGVkSXRlbSYmdGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSk7dCYmKHRbdGhpcy5zZWxlY3RlZEFzXT0hMCksdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KGUpfX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sZGVzZWxlY3RJbmRleDpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7aWYodGhpcy5faXNJbmRleFJlbmRlcmVkKGUpKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKTt0W3RoaXMuc2VsZWN0ZWRBc109ITEsdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXgoZSl9fSx0b2dnbGVTZWxlY3Rpb25Gb3JJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHRvZ2dsZVNlbGVjdGlvbkZvckluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZChlKTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2VdKTt0P3RoaXMuZGVzZWxlY3RJbmRleChlKTp0aGlzLnNlbGVjdEluZGV4KGUpfSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihlLHQpe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbZV0pW3RoaXMuc2VsZWN0ZWRBc109ITF9KSx0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sX3NlbGVjdGlvbkVuYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWU/dGhpcy5saXN0ZW46dGhpcy51bmxpc3Rlbjt0LmNhbGwodGhpcyx0aGlzLCJ0YXAiLCJfc2VsZWN0aW9uSGFuZGxlciIpfSxfc2VsZWN0aW9uSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudChlLnRhcmdldCk7aWYoISF0KXt2YXIgcixuLGk9enQoZSkucGF0aFswXSxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSxhPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0W3RoaXMuaW5kZXhBc10pXTtpLmxvY2FsTmFtZT09PSJpbnB1dCJ8fGkubG9jYWxOYW1lPT09ImJ1dHRvbiJ8fGkubG9jYWxOYW1lPT09InNlbGVjdCJ8fChyPXQudGFiSW5kZXgsdC50YWJJbmRleD1mRSxuPW8/by50YWJJbmRleDotMSx0LnRhYkluZGV4PXIsIShvJiZhIT09byYmYS5jb250YWlucyhvKSYmbiE9PWZFKSYmdGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJdGVtKHRbdGhpcy5hc10pKX19LF9tdWx0aVNlbGVjdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuJC5zZWxlY3Rvci5tdWx0aT1lfSx1cGRhdGVTaXplRm9ySXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sdXBkYXRlU2l6ZUZvckluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSkmJih0aGlzLl91cGRhdGVNZXRyaWNzKFt0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpKSxudWxsfSxfbWFuYWdlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2U+PTAmJmU8dGhpcy5fdmlydHVhbENvdW50P3RoaXMuX2lzSW5kZXhSZW5kZXJlZChlKT90aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKTp0aGlzLl9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbSgpOnRoaXMuX3ZpcnR1YWxDb3VudD4wJiZ0aGlzLl9waHlzaWNhbENvdW50PjAmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbXNQZXJSb3d8fDEsdGhpcy5ncmlkP01hdGguY2VpbChlL3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzplfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5maXJzdFZpc2libGVJbmRleCYmZTw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxmb2N1c0l0ZW06ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0oZSl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHx0aGlzLnNjcm9sbFRvSW5kZXgoZSk7dmFyIHQ9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpLG47ci50YWJJbmRleD1mRSx0LnRhYkluZGV4PT09ZkUmJihuPXQpLG58fChuPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iJytmRSsnIl0nKSksci50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9ZSxuJiZuLmZvY3VzKCl9fSxfcmVtb3ZlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5faXRlbXNQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTEsdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8MCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIHQ9dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10LnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHQucm9vdCl9dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1tlXSx0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkudGFiSW5kZXg9MCx0aGlzLl9waHlzaWNhbEl0ZW1zW2VdPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PWUsdGhpcy50cmFuc2xhdGUzZCgwLHMwdCwwLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKX19LF9yZXN0b3JlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXtpZighKCF0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDwwKSl7dGhpcy5fYXNzaWduTW9kZWxzKCk7dmFyIGU9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0PXRoaXMuX3BoeXNpY2FsSXRlbXNbZV07aWYoISF0KXt2YXIgcj10aGlzLm1vZGVsRm9yRWxlbWVudCh0KSxuPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtyW3RoaXMuYXNdPT09blt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09dCxyLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLHMwdCwwLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKSk6KHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCksdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbH19fSxfZGlkRm9jdXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQoZS50YXJnZXQpLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pLG49dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0hPT1udWxsLGk9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDshdHx8KHI9PT10P3RoaXMuX2lzSW5kZXhWaXNpYmxlKGkpfHx0aGlzLnNjcm9sbFRvSW5kZXgoaSk6KHRoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpLHImJihyLnRhYkluZGV4PS0xKSx0LnRhYkluZGV4PTAsaT10W3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1pLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgoaSksdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleF0sbiYmIXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiZ0aGlzLl91cGRhdGUoKSkpfSxfa2V5ZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA0MDp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PHRoaXMuX3ZpcnR1YWxDb3VudC0xJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM5OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/LTE6MSkpO2JyZWFrO2Nhc2UgMzg6dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD4wJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleC0odGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM3OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/MTotMSkpO2JyZWFrO2Nhc2UgMTM6dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksdGhpcy5zZWxlY3Rpb25FbmFibGVkJiZ0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKGUpO2JyZWFrfX0sX2NsYW1wOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heCh0LGUpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbZV09c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tlXSxyLHQuYmluZCh0aGlzKSksSmwodGhpcy5fZGVib3VuY2Vyc1tlXSl9LF9mb3J3YXJkUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2UuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHIpfSxfZm9yd2FyZEhvc3RQcm9wVjI6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLmZvcndhcmRIb3N0UHJvcChlLHQpfSx0aGlzKX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGUsdCxyKXtpZihPSSh0aGlzLmFzLHQpKXt2YXIgbj1lW3RoaXMuaW5kZXhBc107dD09dGhpcy5hcyYmKHRoaXMuaXRlbXNbbl09ciksdGhpcy5ub3RpZnlQYXRoKGRwKHRoaXMuYXMsIml0ZW1zLiIrbix0KSxyKX19LF9nZXRTdGFtcGVkQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxJdGVtc30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oZSx0LHIpe3QuaW5kZXhPZih0aGlzLmFzKyIuIik9PT0wJiZ0aGlzLm5vdGlmeVBhdGgoIml0ZW1zLiIrZS5fX2tleV9fKyIuIit0LnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHIpfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLm5vdGlmeVBhdGgoZSx0KX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmKHRoaXMubW9kZWxGb3JFbGVtZW50KHIpW2VdPXQpfSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIHp0KGU/ZS5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pO3ZhciB4OT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlbGVjdGlvbj1bXSx0aGlzLnNlbGVjdENhbGxiYWNrPXR9Z2V0KCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX1jbGVhcih0KXt0aGlzLnNlbGVjdGlvbi5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24ocil7KCF0fHx0LmluZGV4T2Yocik8MCkmJnRoaXMuc2V0SXRlbVNlbGVjdGVkKHIsITEpfSx0aGlzKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHQpPj0wfXNldEl0ZW1TZWxlY3RlZCh0LHIpe2lmKHQhPW51bGwmJnIhPT10aGlzLmlzU2VsZWN0ZWQodCkpe2lmKHIpdGhpcy5zZWxlY3Rpb24ucHVzaCh0KTtlbHNle3ZhciBuPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk7bj49MCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKG4sMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayh0LHIpfX1zZWxlY3QodCl7dGhpcy5tdWx0aT90aGlzLnRvZ2dsZSh0KTp0aGlzLmdldCgpIT09dCYmKHRoaXMuc2V0SXRlbVNlbGVjdGVkKHRoaXMuZ2V0KCksITEpLHRoaXMuc2V0SXRlbVNlbGVjdGVkKHQsITApKX10b2dnbGUodCl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhdGhpcy5pc1NlbGVjdGVkKHQpKX19O3ZhciB3aD17cHJvcGVydGllczp7YXR0ckZvclNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxzZWxlY3RlZDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sYWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6InRhcCIsb2JzZXJ2ZXI6Il9hY3RpdmF0ZUV2ZW50Q2hhbmdlZCJ9LHNlbGVjdGFibGU6U3RyaW5nLHNlbGVjdGVkQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJpcm9uLXNlbGVjdGVkIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGZhbGxiYWNrU2VsZWN0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxpdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9leGNsdWRlZExvY2FsTmFtZXM6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3RlbXBsYXRlOjEsImRvbS1iaW5kIjoxLCJkb20taWYiOjEsImRvbS1yZXBlYXQiOjF9fX19LG9ic2VydmVyczpbIl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQoYXR0ckZvclNlbGVjdGVkKSIsIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZCkiLCJfY2hlY2tGYWxsYmFjayhmYWxsYmFja1NlbGVjdGlvbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYmluZEZpbHRlckl0ZW09dGhpcy5fZmlsdGVySXRlbS5iaW5kKHRoaXMpLHRoaXMuX3NlbGVjdGlvbj1uZXcgeDkodGhpcy5fYXBwbHlTZWxlY3Rpb24uYmluZCh0aGlzKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZUl0ZW1zKHRoaXMpLHRoaXMuX2FkZExpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSxpbmRleE9mOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLml0ZW1zP3RoaXMuaXRlbXMuaW5kZXhPZihlKTotMX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0ZWQ9ZX0sc2VsZWN0UHJldmlvdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PWUtMTt0aGlzLnNlbGVjdGVkIT09dm9pZCAwJiYodD0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSktMStlKSVlKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZSh0KX0sc2VsZWN0TmV4dDpmdW5jdGlvbigpe3ZhciBlPTA7dGhpcy5zZWxlY3RlZCE9PXZvaWQgMCYmKGU9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpKzEpJXRoaXMuaXRlbXMubGVuZ3RoKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZShlKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3QodGhpcy5faW5kZXhUb1ZhbHVlKGUpKX0sZm9yY2VTeW5jaHJvbm91c0l0ZW1VcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdHlwZW9mIHRoaXMuX29ic2VydmVyLmZsdXNoPT0iZnVuY3Rpb24iP3RoaXMuX29ic2VydmVyLmZsdXNoKCk6dGhpcy5fdXBkYXRlSXRlbXMoKX0sZ2V0IF9zaG91bGRVcGRhdGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZCE9bnVsbH0sX2NoZWNrRmFsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5saXN0ZW4odGhpcyxlLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLnVubGlzdGVuKHRoaXMsZSwiX2FjdGl2YXRlSGFuZGxlciIpfSxfYWN0aXZhdGVFdmVudENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9yZW1vdmVMaXN0ZW5lcih0KSx0aGlzLl9hZGRMaXN0ZW5lcihlKX0sX3VwZGF0ZUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHRoaXMuc2VsZWN0YWJsZXx8IioiKTtlPUFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlLHRoaXMuX2JpbmRGaWx0ZXJJdGVtKSx0aGlzLl9zZXRJdGVtcyhlKX0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtJiYodGhpcy5zZWxlY3RlZD10aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0pKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RTZWxlY3RlZDpmdW5jdGlvbihlKXtpZighIXRoaXMuaXRlbXMpe3ZhciB0PXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO3Q/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKSx0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdGhpcy5fc2VsZWN0aW9uLmdldCgpPT09dm9pZCAwJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbZS5sb2NhbE5hbWVdfSxfdmFsdWVUb0l0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleChlKV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpe2Zvcih2YXIgdD0wLHI7cj10aGlzLml0ZW1zW3RdO3QrKylpZih0aGlzLl92YWx1ZUZvckl0ZW0ocik9PWUpcmV0dXJuIHR9ZWxzZSByZXR1cm4gTnVtYmVyKGUpfSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgdD10aGlzLml0ZW1zW2VdO2lmKHQpcmV0dXJuIHRoaXMuX3ZhbHVlRm9ySXRlbSh0KX1lbHNlIHJldHVybiBlfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZCl7dmFyIHQ9dGhpcy5pbmRleE9mKGUpO3JldHVybiB0PT09LTE/bnVsbDp0fXZhciByPWVbd20odGhpcy5hdHRyRm9yU2VsZWN0ZWQpXTtyZXR1cm4gciE9bnVsbD9yOmUuZ2V0QXR0cmlidXRlKHRoaXMuYXR0ckZvclNlbGVjdGVkKX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3RlZENsYXNzJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyx0LGUpLHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUmJnRoaXMudG9nZ2xlQXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUsdCxlKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLmZpcmUoImlyb24tIisodD8ic2VsZWN0IjoiZGVzZWxlY3QiKSx7aXRlbTplfSl9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odGhpcy5fc2VsZWN0aW9uLmdldCgpKX0sX29ic2VydmVJdGVtczpmdW5jdGlvbihlKXtyZXR1cm4genQoZSkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUl0ZW1zKCksdGhpcy5fdXBkYXRlU2VsZWN0ZWQoKSx0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsdCx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSl9KX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS50YXJnZXQscj10aGlzLml0ZW1zO3QmJnQhPXRoaXM7KXt2YXIgbj1yLmluZGV4T2YodCk7aWYobj49MCl7dmFyIGk9dGhpcy5faW5kZXhUb1ZhbHVlKG4pO3RoaXMuX2l0ZW1BY3RpdmF0ZShpLHQpO3JldHVybn10PXQucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDplLGl0ZW06dH0se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdChlKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCg6bm90KHNsb3QpOm5vdCguaXJvbi1zZWxlY3RlZCkpIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLXBhZ2VzIixiZWhhdmlvcnM6W0pzLHdoXSxwcm9wZXJ0aWVzOnthY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkUGFnZUNoYW5nZWQoc2VsZWN0ZWQpIl0sX3NlbGVjdGVkUGFnZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFzeW5jKHRoaXMubm90aWZ5UmVzaXplKX19KTt2YXIgbDB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7bDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobDB0LmNvbnRlbnQpO3ZhciBjMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBodG1sIHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIxIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI0Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KCiAgICAgIC8qIER1cGxpY2F0ZSB0aGUgc3R5bGVzIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3dlYmNvbXBvbmVudHMvc2hhZHljc3MvaXNzdWVzLzE5MyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2MwdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGMwdC5jb250ZW50KTt2YXIgRGk9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zZXRGb2N1c2VkKGUudHlwZT09PSJmb2N1cyIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLGU/InRydWUiOiJmYWxzZSIpLHRoaXMuc3R5bGUucG9pbnRlckV2ZW50cz1lPyJub25lIjoiIixlPyh0aGlzLl9vbGRUYWJJbmRleD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLnRhYkluZGV4PS0xLHRoaXMuYmx1cigpKTp0aGlzLl9vbGRUYWJJbmRleCE9PXZvaWQgMCYmKHRoaXMuX29sZFRhYkluZGV4PT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTp0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX29sZFRhYkluZGV4KSl9LF9jaGFuZ2VkQ29udHJvbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfX07dmFyIFl4PXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKGUpLGV8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbihlKXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZlKX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZSE9PWUmJih0aGlzLmFjdGl2ZT1lLHRoaXMuZmlyZSgiY2hhbmdlIikpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApLHRoaXMuX3NldFByZXNzZWQoITApLHRoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpLHRoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbC5rZXlib2FyZEV2ZW50LHI9enQodCkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChyKXx8KHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLmtleWJvYXJkRXZlbnQscj16dCh0KS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KHIpfHwodGhpcy5wcmVzc2VkJiZ0aGlzLl9hc3luY0NsaWNrKCksdGhpcy5fc2V0UHJlc3NlZCghMSkpfSxfYXN5bmNDbGljazpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9LDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3QmJnQhPWUmJnRoaXMuaGFzQXR0cmlidXRlKHQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX0sX2FjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLGU/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSksdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKTp0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NoYW5nZWRCdXR0b25TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCYmdGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkKCl9fSxTaD1bT28sWXhdO3ZhciBNaD17ZGlzdGFuY2U6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS1yLG89dC1uO3JldHVybiBNYXRoLnNxcnQoaSppK28qbyl9LG5vdzp3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSk6RGF0ZS5ub3d9O2Z1bmN0aW9uIHUwdChlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLndpZHRoPXRoaXMuYm91bmRpbmdSZWN0LndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCx0aGlzLnNpemU9TWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9dTB0LnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWguZGlzdGFuY2UoZSx0LDAsMCksbj1NaC5kaXN0YW5jZShlLHQsdGhpcy53aWR0aCwwKSxpPU1oLmRpc3RhbmNlKGUsdCwwLHRoaXMuaGVpZ2h0KSxvPU1oLmRpc3RhbmNlKGUsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtyZXR1cm4gTWF0aC5tYXgocixuLGksbyl9fTtmdW5jdGlvbiBnXyhlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbG9yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmNvbG9yLHRoaXMud2F2ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmNvbG9yLHRoaXMud2F2ZS5jbGFzc0xpc3QuYWRkKCJ3YXZlIiksdGhpcy53YXZlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIndhdmUtY29udGFpbmVyIiksenQodGhpcy53YXZlQ29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLndhdmUpLHRoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCl9Z18uTUFYX1JBRElVUz0zMDA7Z18ucHJvdG90eXBlPXtnZXQgcmVjZW50ZXJzKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5yZWNlbnRlcnN9LGdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXt2YXIgZTtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydD8oZT1NaC5ub3coKS10aGlzLm1vdXNlRG93blN0YXJ0LHRoaXMubW91c2VVcFN0YXJ0JiYoZS09dGhpcy5tb3VzZVVwRWxhcHNlZCksZSk6MH0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01oLm5vdygpLXRoaXMubW91c2VVcFN0YXJ0OjB9LGdldCBtb3VzZURvd25FbGFwc2VkU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWQvMWUzfSxnZXQgbW91c2VVcEVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VVcEVsYXBzZWQvMWUzfSxnZXQgbW91c2VJbnRlcmFjdGlvblNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZURvd25FbGFwc2VkU2Vjb25kcyt0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kc30sZ2V0IGluaXRpYWxPcGFjaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pbml0aWFsT3BhY2l0eX0sZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBlPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgsdD10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQscj1NYXRoLm1pbihNYXRoLnNxcnQoZSt0KSxnXy5NQVhfUkFESVVTKSoxLjErNSxuPTEuMS0uMiooci9nXy5NQVhfUkFESVVTKSxpPXRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvbixvPXIqKDEtTWF0aC5wb3coODAsLWkpKTtyZXR1cm4gTWF0aC5hYnMobyl9LGdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01hdGgubWF4KDAsdGhpcy5pbml0aWFsT3BhY2l0eS10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyp0aGlzLm9wYWNpdHlEZWNheVZlbG9jaXR5KTp0aGlzLmluaXRpYWxPcGFjaXR5fSxnZXQgb3V0ZXJPcGFjaXR5KCl7dmFyIGU9dGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqLjMsdD10aGlzLm9wYWNpdHk7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oZSx0KSl9LGdldCBpc09wYWNpdHlGdWxseURlY2F5ZWQoKXtyZXR1cm4gdGhpcy5vcGFjaXR5PC4wMSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLGdfLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsZ18uTUFYX1JBRElVUyl9LGdldCBpc0FuaW1hdGlvbkNvbXBsZXRlKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P3RoaXMuaXNPcGFjaXR5RnVsbHlEZWNheWVkOnRoaXMuaXNSZXN0aW5nQXRNYXhSYWRpdXN9LGdldCB0cmFuc2xhdGlvbkZyYWN0aW9uKCl7cmV0dXJuIE1hdGgubWluKDEsdGhpcy5yYWRpdXMvdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUqMi9NYXRoLnNxcnQoMikpfSxnZXQgeE5vdygpe3JldHVybiB0aGlzLnhFbmQ/dGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLm1heFJhZGl1cz0wLHRoaXMubW91c2VEb3duU3RhcnQ9MCx0aGlzLm1vdXNlVXBTdGFydD0wLHRoaXMueFN0YXJ0PTAsdGhpcy55U3RhcnQ9MCx0aGlzLnhFbmQ9MCx0aGlzLnlFbmQ9MCx0aGlzLnNsaWRlRGlzdGFuY2U9MCx0aGlzLmNvbnRhaW5lck1ldHJpY3M9bmV3IHUwdCh0aGlzLmVsZW1lbnQpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIGUsdCxyO3RoaXMud2F2ZS5zdHlsZS5vcGFjaXR5PXRoaXMub3BhY2l0eSxlPXRoaXMucmFkaXVzLyh0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKSx0PXRoaXMueE5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMueU5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrdCsicHgsICIrcisicHgpIix0aGlzLndhdmVDb250YWluZXIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUzZCgiK3QrInB4LCAiK3IrInB4LCAwKSIsdGhpcy53YXZlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGUoIitlKyIsIitlKyIpIix0aGlzLndhdmUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZTNkKCIrZSsiLCIrZSsiLDEpIn0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpLHRoaXMubW91c2VEb3duU3RhcnQ9TWgubm93KCksdGhpcy5jZW50ZXI/KHRoaXMueFN0YXJ0PXQsdGhpcy55U3RhcnQ9cix0aGlzLnNsaWRlRGlzdGFuY2U9TWguZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpOih0aGlzLnhTdGFydD1lP2UuZGV0YWlsLngtdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC5sZWZ0OnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHRoaXMueVN0YXJ0PWU/ZS5kZXRhaWwueS10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LnRvcDp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpLHRoaXMucmVjZW50ZXJzJiYodGhpcy54RW5kPXQsdGhpcy55RW5kPXIsdGhpcy5zbGlkZURpc3RhbmNlPU1oLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKSx0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsdGhpcy55U3RhcnQpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50b3A9KHRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUubGVmdD0odGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgifSx1cEFjdGlvbjpmdW5jdGlvbihlKXshdGhpcy5pc01vdXNlRG93bnx8KHRoaXMubW91c2VVcFN0YXJ0PU1oLm5vdygpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7enQoenQodGhpcy53YXZlQ29udGFpbmVyKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CmAsaXM6InBhcGVyLXJpcHBsZSIsYmVoYXZpb3JzOltPb10scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMua2V5RXZlbnRUYXJnZXR9LGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9vbkVudGVyS2V5ZG93biIsInNwYWNlOmtleWRvd24iOiJfb25TcGFjZUtleWRvd24iLCJzcGFjZTprZXl1cCI6Il9vblNwYWNlS2V5dXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3p0KHRoaXMpLnBhcmVudE5vZGUubm9kZVR5cGU9PTExP3RoaXMua2V5RXZlbnRUYXJnZXQ9enQodGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLmtleUV2ZW50VGFyZ2V0PXp0KHRoaXMpLnBhcmVudE5vZGU7dmFyIGU9dGhpcy5rZXlFdmVudFRhcmdldDt0aGlzLmxpc3RlbihlLCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLmxpc3RlbihlLCJkb3duIiwidWlEb3duQWN0aW9uIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsImRvd24iLCJ1aURvd25BY3Rpb24iKSx0aGlzLmtleUV2ZW50VGFyZ2V0PW51bGx9LGdldCBzaG91bGRLZWVwQW5pbWF0aW5nKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLnJpcHBsZXMubGVuZ3RoOysrZSlpZighdGhpcy5yaXBwbGVzW2VdLmlzQW5pbWF0aW9uQ29tcGxldGUpcmV0dXJuITA7cmV0dXJuITF9LHNpbXVsYXRlZFJpcHBsZTpmdW5jdGlvbigpe3RoaXMuZG93bkFjdGlvbihudWxsKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy51cEFjdGlvbigpfSwxKX0sdWlEb3duQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMuZG93bkFjdGlvbihlKX0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXtpZighKHRoaXMuaG9sZERvd24mJnRoaXMucmlwcGxlcy5sZW5ndGg+MCkpe3ZhciB0PXRoaXMuYWRkUmlwcGxlKCk7dC5kb3duQWN0aW9uKGUpLHRoaXMuX2FuaW1hdGluZ3x8KHRoaXMuX2FuaW1hdGluZz0hMCx0aGlzLmFuaW1hdGUoKSl9fSx1aVVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMudXBBY3Rpb24oZSl9LHVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuaG9sZERvd258fCh0aGlzLnJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwQWN0aW9uKGUpfSksdGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX0sb25BbmltYXRpb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZz0hMSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiIsdGhpcy5maXJlKCJ0cmFuc2l0aW9uZW5kIil9LGFkZFJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPW5ldyBnXyh0aGlzKTtyZXR1cm4genQodGhpcy4kLndhdmVzKS5hcHBlbmRDaGlsZChlLndhdmVDb250YWluZXIpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLmNvbG9yLHRoaXMucmlwcGxlcy5wdXNoKGUpLHRoaXMuX3NldEFuaW1hdGluZyghMCksZX0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmlwcGxlcy5pbmRleE9mKGUpO3Q8MHx8KHRoaXMucmlwcGxlcy5zcGxpY2UodCwxKSxlLnJlbW92ZSgpLHRoaXMucmlwcGxlcy5sZW5ndGh8fHRoaXMuX3NldEFuaW1hdGluZyghMSkpfSxhbmltYXRlOmZ1bmN0aW9uKCl7aWYoISF0aGlzLl9hbmltYXRpbmcpe3ZhciBlLHQ7Zm9yKGU9MDtlPHRoaXMucmlwcGxlcy5sZW5ndGg7KytlKXQ9dGhpcy5yaXBwbGVzW2VdLHQuZHJhdygpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLm9wYWNpdHk9dC5vdXRlck9wYWNpdHksdC5pc09wYWNpdHlGdWxseURlY2F5ZWQmJiF0LmlzUmVzdGluZ0F0TWF4UmFkaXVzJiZ0aGlzLnJlbW92ZVJpcHBsZSh0KTshdGhpcy5zaG91bGRLZWVwQW5pbWF0aW5nJiZ0aGlzLnJpcHBsZXMubGVuZ3RoPT09MD90aGlzLm9uQW5pbWF0aW9uQ29tcGxldGUoKTp3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kQW5pbWF0ZSl9fSxhbmltYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZSgpfSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpLHRoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSxfb25TcGFjZUtleXVwOmZ1bmN0aW9uKCl7dGhpcy51aVVwQWN0aW9uKCl9LF9ob2xkRG93bkNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0IT09dm9pZCAwJiYoZT90aGlzLmRvd25BY3Rpb24oKTp0aGlzLnVwQWN0aW9uKCkpfX0pO3ZhciBzdT17cHJvcGVydGllczp7bm9pbms6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX25vaW5rQ2hhbmdlZCJ9LF9yaXBwbGVDb250YWluZXI6e3R5cGU6T2JqZWN0fX0sX2J1dHRvblN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZm9jdXNlZCYmdGhpcy5lbnN1cmVSaXBwbGUoKX0sX2Rvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9kb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5wcmVzc2VkJiZ0aGlzLmVuc3VyZVJpcHBsZShlKX0sZW5zdXJlUmlwcGxlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhc1JpcHBsZSgpKXt0aGlzLl9yaXBwbGU9dGhpcy5fY3JlYXRlUmlwcGxlKCksdGhpcy5fcmlwcGxlLm5vaW5rPXRoaXMubm9pbms7dmFyIHQ9dGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzLnJvb3Q7aWYodCYmenQodCkuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlKSxlKXt2YXIgcj16dCh0aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMpLG49enQoZSkucm9vdFRhcmdldDtyLmRlZXBDb250YWlucyhuKSYmdGhpcy5fcmlwcGxlLnVpRG93bkFjdGlvbihlKX19fSxnZXRSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLl9yaXBwbGV9LGhhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuX3JpcHBsZSl9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKTtyZXR1cm4gZX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPWUpfX07dmFyIHVXPXtwcm9wZXJ0aWVzOntlbGV2YXRpb246e3R5cGU6TnVtYmVyLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMH19LG9ic2VydmVyczpbIl9jYWxjdWxhdGVFbGV2YXRpb24oZm9jdXNlZCwgZGlzYWJsZWQsIGFjdGl2ZSwgcHJlc3NlZCwgcmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiLCJfY29tcHV0ZUtleWJvYXJkQ2xhc3MocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCIsYW5pbWF0ZWQ6ITB9LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt2YXIgZT0xO3RoaXMuZGlzYWJsZWQ/ZT0wOnRoaXMuYWN0aXZlfHx0aGlzLnByZXNzZWQ/ZT00OnRoaXMucmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCYmKGU9MyksdGhpcy5fc2V0RWxldmF0aW9uKGUpfSxfY29tcHV0ZUtleWJvYXJkQ2xhc3M6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygia2V5Ym9hcmQtZm9jdXMiLGUpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlEb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5nZXRSaXBwbGUoKS5yaXBwbGVzLmxlbmd0aDwxJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKCl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlVcEhhbmRsZXIuY2FsbCh0aGlzLGUpLHRoaXMuaGFzUmlwcGxlKCkmJnRoaXMuX3JpcHBsZS51aVVwQWN0aW9uKCl9fSxoMHQ9W1NoLERpLHN1LHVXXTt2YXIgZjB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAvKiBOZWVkIHRvIHNwZWNpZnkgdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgdGhlIHN0eWxlcyBpbXBvcnRlZCBmcm9tIHBhcGVyLW1hdGVyaWFsLiAqLwogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtaW4td2lkdGg6IDUuMTRlbTsKICAgICAgbWFyZ2luOiAwIDAuMjllbTsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgb3V0bGluZS13aWR0aDogMDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIHBhZGRpbmc6IDAuN2VtIDAuNTdlbTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICA6aG9zdChbcmFpc2VkXS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLXJhaXNlZC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWZsYXQta2V5Ym9hcmQtZm9jdXM7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogI2E4YThhODsKICAgICAgY3Vyc29yOiBhdXRvOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdW3JhaXNlZF0pIHsKICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgIH0KCgogICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItYnV0dG9uLWluay1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KCiAgPHNsb3Q+PC9zbG90PmA7ZjB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6ZjB0LGlzOiJwYXBlci1idXR0b24iLGJlaGF2aW9yczpbaDB0XSxwcm9wZXJ0aWVzOntyYWlzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jYWxjdWxhdGVFbGV2YXRpb24ifX0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3RoaXMucmFpc2VkP3VXLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pO3ZhciBwMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZvciBHb29nbGUgcHJvZHVjdHMgKi8KCiAgICAgIC0tZ29vZ2xlLXJlZC0xMDA6ICNmNGM3YzM7CiAgICAgIC0tZ29vZ2xlLXJlZC0zMDA6ICNlNjdjNzM7CiAgICAgIC0tZ29vZ2xlLXJlZC01MDA6ICNkYjQ0Mzc7CiAgICAgIC0tZ29vZ2xlLXJlZC03MDA6ICNjNTM5Mjk7CgogICAgICAtLWdvb2dsZS1ibHVlLTEwMDogI2M2ZGFmYzsKICAgICAgLS1nb29nbGUtYmx1ZS0zMDA6ICM3YmFhZjc7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNTAwOiAjNDI4NWY0OwogICAgICAtLWdvb2dsZS1ibHVlLTcwMDogIzMzNjdkNjsKCiAgICAgIC0tZ29vZ2xlLWdyZWVuLTEwMDogI2I3ZTFjZDsKICAgICAgLS1nb29nbGUtZ3JlZW4tMzAwOiAjNTdiYjhhOwogICAgICAtLWdvb2dsZS1ncmVlbi01MDA6ICMwZjlkNTg7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTcwMDogIzBiODA0MzsKCiAgICAgIC0tZ29vZ2xlLXllbGxvdy0xMDA6ICNmY2U4YjI7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy0zMDA6ICNmN2NiNGQ7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy01MDA6ICNmNGI0MDA7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy03MDA6ICNmMDkzMDA7CgogICAgICAtLWdvb2dsZS1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1nb29nbGUtZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tZ29vZ2xlLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLWdvb2dsZS1ncmV5LTcwMDogIzYxNjE2MTsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZyb20gb25saW5lIHNwZWMgZG9jdW1lbnQgKi8KCiAgICAgIC0tcGFwZXItcmVkLTUwOiAjZmZlYmVlOwogICAgICAtLXBhcGVyLXJlZC0xMDA6ICNmZmNkZDI7CiAgICAgIC0tcGFwZXItcmVkLTIwMDogI2VmOWE5YTsKICAgICAgLS1wYXBlci1yZWQtMzAwOiAjZTU3MzczOwogICAgICAtLXBhcGVyLXJlZC00MDA6ICNlZjUzNTA7CiAgICAgIC0tcGFwZXItcmVkLTUwMDogI2Y0NDMzNjsKICAgICAgLS1wYXBlci1yZWQtNjAwOiAjZTUzOTM1OwogICAgICAtLXBhcGVyLXJlZC03MDA6ICNkMzJmMmY7CiAgICAgIC0tcGFwZXItcmVkLTgwMDogI2M2MjgyODsKICAgICAgLS1wYXBlci1yZWQtOTAwOiAjYjcxYzFjOwogICAgICAtLXBhcGVyLXJlZC1hMTAwOiAjZmY4YTgwOwogICAgICAtLXBhcGVyLXJlZC1hMjAwOiAjZmY1MjUyOwogICAgICAtLXBhcGVyLXJlZC1hNDAwOiAjZmYxNzQ0OwogICAgICAtLXBhcGVyLXJlZC1hNzAwOiAjZDUwMDAwOwoKICAgICAgLS1wYXBlci1waW5rLTUwOiAjZmNlNGVjOwogICAgICAtLXBhcGVyLXBpbmstMTAwOiAjZjhiYmQwOwogICAgICAtLXBhcGVyLXBpbmstMjAwOiAjZjQ4ZmIxOwogICAgICAtLXBhcGVyLXBpbmstMzAwOiAjZjA2MjkyOwogICAgICAtLXBhcGVyLXBpbmstNDAwOiAjZWM0MDdhOwogICAgICAtLXBhcGVyLXBpbmstNTAwOiAjZTkxZTYzOwogICAgICAtLXBhcGVyLXBpbmstNjAwOiAjZDgxYjYwOwogICAgICAtLXBhcGVyLXBpbmstNzAwOiAjYzIxODViOwogICAgICAtLXBhcGVyLXBpbmstODAwOiAjYWQxNDU3OwogICAgICAtLXBhcGVyLXBpbmstOTAwOiAjODgwZTRmOwogICAgICAtLXBhcGVyLXBpbmstYTEwMDogI2ZmODBhYjsKICAgICAgLS1wYXBlci1waW5rLWEyMDA6ICNmZjQwODE7CiAgICAgIC0tcGFwZXItcGluay1hNDAwOiAjZjUwMDU3OwogICAgICAtLXBhcGVyLXBpbmstYTcwMDogI2M1MTE2MjsKCiAgICAgIC0tcGFwZXItcHVycGxlLTUwOiAjZjNlNWY1OwogICAgICAtLXBhcGVyLXB1cnBsZS0xMDA6ICNlMWJlZTc7CiAgICAgIC0tcGFwZXItcHVycGxlLTIwMDogI2NlOTNkODsKICAgICAgLS1wYXBlci1wdXJwbGUtMzAwOiAjYmE2OGM4OwogICAgICAtLXBhcGVyLXB1cnBsZS00MDA6ICNhYjQ3YmM7CiAgICAgIC0tcGFwZXItcHVycGxlLTUwMDogIzljMjdiMDsKICAgICAgLS1wYXBlci1wdXJwbGUtNjAwOiAjOGUyNGFhOwogICAgICAtLXBhcGVyLXB1cnBsZS03MDA6ICM3YjFmYTI7CiAgICAgIC0tcGFwZXItcHVycGxlLTgwMDogIzZhMWI5YTsKICAgICAgLS1wYXBlci1wdXJwbGUtOTAwOiAjNGExNDhjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMTAwOiAjZWE4MGZjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMjAwOiAjZTA0MGZiOwogICAgICAtLXBhcGVyLXB1cnBsZS1hNDAwOiAjZDUwMGY5OwogICAgICAtLXBhcGVyLXB1cnBsZS1hNzAwOiAjYWEwMGZmOwoKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDogI2VkZTdmNjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0xMDA6ICNkMWM0ZTk7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMjAwOiAjYjM5ZGRiOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTMwMDogIzk1NzVjZDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS00MDA6ICM3ZTU3YzI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTAwOiAjNjczYWI3OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTYwMDogIzVlMzViMTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS03MDA6ICM1MTJkYTg7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtODAwOiAjNDUyN2EwOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTkwMDogIzMxMWI5MjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMTAwOiAjYjM4OGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWEyMDA6ICM3YzRkZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTQwMDogIzY1MWZmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNzAwOiAjNjIwMGVhOwoKICAgICAgLS1wYXBlci1pbmRpZ28tNTA6ICNlOGVhZjY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTEwMDogI2M1Y2FlOTsKICAgICAgLS1wYXBlci1pbmRpZ28tMjAwOiAjOWZhOGRhOwogICAgICAtLXBhcGVyLWluZGlnby0zMDA6ICM3OTg2Y2I7CiAgICAgIC0tcGFwZXItaW5kaWdvLTQwMDogIzVjNmJjMDsKICAgICAgLS1wYXBlci1pbmRpZ28tNTAwOiAjM2Y1MWI1OwogICAgICAtLXBhcGVyLWluZGlnby02MDA6ICMzOTQ5YWI7CiAgICAgIC0tcGFwZXItaW5kaWdvLTcwMDogIzMwM2Y5ZjsKICAgICAgLS1wYXBlci1pbmRpZ28tODAwOiAjMjgzNTkzOwogICAgICAtLXBhcGVyLWluZGlnby05MDA6ICMxYTIzN2U7CiAgICAgIC0tcGFwZXItaW5kaWdvLWExMDA6ICM4YzllZmY7CiAgICAgIC0tcGFwZXItaW5kaWdvLWEyMDA6ICM1MzZkZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE0MDA6ICMzZDVhZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE3MDA6ICMzMDRmZmU7CgogICAgICAtLXBhcGVyLWJsdWUtNTA6ICNlM2YyZmQ7CiAgICAgIC0tcGFwZXItYmx1ZS0xMDA6ICNiYmRlZmI7CiAgICAgIC0tcGFwZXItYmx1ZS0yMDA6ICM5MGNhZjk7CiAgICAgIC0tcGFwZXItYmx1ZS0zMDA6ICM2NGI1ZjY7CiAgICAgIC0tcGFwZXItYmx1ZS00MDA6ICM0MmE1ZjU7CiAgICAgIC0tcGFwZXItYmx1ZS01MDA6ICMyMTk2ZjM7CiAgICAgIC0tcGFwZXItYmx1ZS02MDA6ICMxZTg4ZTU7CiAgICAgIC0tcGFwZXItYmx1ZS03MDA6ICMxOTc2ZDI7CiAgICAgIC0tcGFwZXItYmx1ZS04MDA6ICMxNTY1YzA7CiAgICAgIC0tcGFwZXItYmx1ZS05MDA6ICMwZDQ3YTE7CiAgICAgIC0tcGFwZXItYmx1ZS1hMTAwOiAjODJiMWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTIwMDogIzQ0OGFmZjsKICAgICAgLS1wYXBlci1ibHVlLWE0MDA6ICMyOTc5ZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNzAwOiAjMjk2MmZmOwoKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwOiAjZTFmNWZlOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMTAwOiAjYjNlNWZjOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMjAwOiAjODFkNGZhOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMzAwOiAjNGZjM2Y3OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNDAwOiAjMjliNmY2OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwOiAjMDNhOWY0OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNjAwOiAjMDM5YmU1OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNzAwOiAjMDI4OGQxOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtODAwOiAjMDI3N2JkOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwOiAjMDE1NzliOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTEwMDogIzgwZDhmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWEyMDA6ICM0MGM0ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNDAwOiAjMDBiMGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTcwMDogIzAwOTFlYTsKCiAgICAgIC0tcGFwZXItY3lhbi01MDogI2UwZjdmYTsKICAgICAgLS1wYXBlci1jeWFuLTEwMDogI2IyZWJmMjsKICAgICAgLS1wYXBlci1jeWFuLTIwMDogIzgwZGVlYTsKICAgICAgLS1wYXBlci1jeWFuLTMwMDogIzRkZDBlMTsKICAgICAgLS1wYXBlci1jeWFuLTQwMDogIzI2YzZkYTsKICAgICAgLS1wYXBlci1jeWFuLTUwMDogIzAwYmNkNDsKICAgICAgLS1wYXBlci1jeWFuLTYwMDogIzAwYWNjMTsKICAgICAgLS1wYXBlci1jeWFuLTcwMDogIzAwOTdhNzsKICAgICAgLS1wYXBlci1jeWFuLTgwMDogIzAwODM4ZjsKICAgICAgLS1wYXBlci1jeWFuLTkwMDogIzAwNjA2NDsKICAgICAgLS1wYXBlci1jeWFuLWExMDA6ICM4NGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hMjAwOiAjMThmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTQwMDogIzAwZTVmZjsKICAgICAgLS1wYXBlci1jeWFuLWE3MDA6ICMwMGI4ZDQ7CgogICAgICAtLXBhcGVyLXRlYWwtNTA6ICNlMGYyZjE7CiAgICAgIC0tcGFwZXItdGVhbC0xMDA6ICNiMmRmZGI7CiAgICAgIC0tcGFwZXItdGVhbC0yMDA6ICM4MGNiYzQ7CiAgICAgIC0tcGFwZXItdGVhbC0zMDA6ICM0ZGI2YWM7CiAgICAgIC0tcGFwZXItdGVhbC00MDA6ICMyNmE2OWE7CiAgICAgIC0tcGFwZXItdGVhbC01MDA6ICMwMDk2ODg7CiAgICAgIC0tcGFwZXItdGVhbC02MDA6ICMwMDg5N2I7CiAgICAgIC0tcGFwZXItdGVhbC03MDA6ICMwMDc5NmI7CiAgICAgIC0tcGFwZXItdGVhbC04MDA6ICMwMDY5NWM7CiAgICAgIC0tcGFwZXItdGVhbC05MDA6ICMwMDRkNDA7CiAgICAgIC0tcGFwZXItdGVhbC1hMTAwOiAjYTdmZmViOwogICAgICAtLXBhcGVyLXRlYWwtYTIwMDogIzY0ZmZkYTsKICAgICAgLS1wYXBlci10ZWFsLWE0MDA6ICMxZGU5YjY7CiAgICAgIC0tcGFwZXItdGVhbC1hNzAwOiAjMDBiZmE1OwoKICAgICAgLS1wYXBlci1ncmVlbi01MDogI2U4ZjVlOTsKICAgICAgLS1wYXBlci1ncmVlbi0xMDA6ICNjOGU2Yzk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMjAwOiAjYTVkNmE3OwogICAgICAtLXBhcGVyLWdyZWVuLTMwMDogIzgxYzc4NDsKICAgICAgLS1wYXBlci1ncmVlbi00MDA6ICM2NmJiNmE7CiAgICAgIC0tcGFwZXItZ3JlZW4tNTAwOiAjNGNhZjUwOwogICAgICAtLXBhcGVyLWdyZWVuLTYwMDogIzQzYTA0NzsKICAgICAgLS1wYXBlci1ncmVlbi03MDA6ICMzODhlM2M7CiAgICAgIC0tcGFwZXItZ3JlZW4tODAwOiAjMmU3ZDMyOwogICAgICAtLXBhcGVyLWdyZWVuLTkwMDogIzFiNWUyMDsKICAgICAgLS1wYXBlci1ncmVlbi1hMTAwOiAjYjlmNmNhOwogICAgICAtLXBhcGVyLWdyZWVuLWEyMDA6ICM2OWYwYWU7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTQwMDogIzAwZTY3NjsKICAgICAgLS1wYXBlci1ncmVlbi1hNzAwOiAjMDBjODUzOwoKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDogI2YxZjhlOTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0xMDA6ICNkY2VkYzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMjAwOiAjYzVlMWE1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTMwMDogI2FlZDU4MTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi00MDA6ICM5Y2NjNjU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTAwOiAjOGJjMzRhOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTYwMDogIzdjYjM0MjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi03MDA6ICM2ODlmMzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tODAwOiAjNTU4YjJmOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTkwMDogIzMzNjkxZTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMTAwOiAjY2NmZjkwOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWEyMDA6ICNiMmZmNTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTQwMDogIzc2ZmYwMzsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNzAwOiAjNjRkZDE3OwoKICAgICAgLS1wYXBlci1saW1lLTUwOiAjZjlmYmU3OwogICAgICAtLXBhcGVyLWxpbWUtMTAwOiAjZjBmNGMzOwogICAgICAtLXBhcGVyLWxpbWUtMjAwOiAjZTZlZTljOwogICAgICAtLXBhcGVyLWxpbWUtMzAwOiAjZGNlNzc1OwogICAgICAtLXBhcGVyLWxpbWUtNDAwOiAjZDRlMTU3OwogICAgICAtLXBhcGVyLWxpbWUtNTAwOiAjY2RkYzM5OwogICAgICAtLXBhcGVyLWxpbWUtNjAwOiAjYzBjYTMzOwogICAgICAtLXBhcGVyLWxpbWUtNzAwOiAjYWZiNDJiOwogICAgICAtLXBhcGVyLWxpbWUtODAwOiAjOWU5ZDI0OwogICAgICAtLXBhcGVyLWxpbWUtOTAwOiAjODI3NzE3OwogICAgICAtLXBhcGVyLWxpbWUtYTEwMDogI2Y0ZmY4MTsKICAgICAgLS1wYXBlci1saW1lLWEyMDA6ICNlZWZmNDE7CiAgICAgIC0tcGFwZXItbGltZS1hNDAwOiAjYzZmZjAwOwogICAgICAtLXBhcGVyLWxpbWUtYTcwMDogI2FlZWEwMDsKCiAgICAgIC0tcGFwZXIteWVsbG93LTUwOiAjZmZmZGU3OwogICAgICAtLXBhcGVyLXllbGxvdy0xMDA6ICNmZmY5YzQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTIwMDogI2ZmZjU5ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctMzAwOiAjZmZmMTc2OwogICAgICAtLXBhcGVyLXllbGxvdy00MDA6ICNmZmVlNTg7CiAgICAgIC0tcGFwZXIteWVsbG93LTUwMDogI2ZmZWIzYjsKICAgICAgLS1wYXBlci15ZWxsb3ctNjAwOiAjZmRkODM1OwogICAgICAtLXBhcGVyLXllbGxvdy03MDA6ICNmYmMwMmQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTgwMDogI2Y5YTgyNTsKICAgICAgLS1wYXBlci15ZWxsb3ctOTAwOiAjZjU3ZjE3OwogICAgICAtLXBhcGVyLXllbGxvdy1hMTAwOiAjZmZmZjhkOwogICAgICAtLXBhcGVyLXllbGxvdy1hMjAwOiAjZmZmZjAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNDAwOiAjZmZlYTAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNzAwOiAjZmZkNjAwOwoKICAgICAgLS1wYXBlci1hbWJlci01MDogI2ZmZjhlMTsKICAgICAgLS1wYXBlci1hbWJlci0xMDA6ICNmZmVjYjM7CiAgICAgIC0tcGFwZXItYW1iZXItMjAwOiAjZmZlMDgyOwogICAgICAtLXBhcGVyLWFtYmVyLTMwMDogI2ZmZDU0ZjsKICAgICAgLS1wYXBlci1hbWJlci00MDA6ICNmZmNhMjg7CiAgICAgIC0tcGFwZXItYW1iZXItNTAwOiAjZmZjMTA3OwogICAgICAtLXBhcGVyLWFtYmVyLTYwMDogI2ZmYjMwMDsKICAgICAgLS1wYXBlci1hbWJlci03MDA6ICNmZmEwMDA7CiAgICAgIC0tcGFwZXItYW1iZXItODAwOiAjZmY4ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLTkwMDogI2ZmNmYwMDsKICAgICAgLS1wYXBlci1hbWJlci1hMTAwOiAjZmZlNTdmOwogICAgICAtLXBhcGVyLWFtYmVyLWEyMDA6ICNmZmQ3NDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTQwMDogI2ZmYzQwMDsKICAgICAgLS1wYXBlci1hbWJlci1hNzAwOiAjZmZhYjAwOwoKICAgICAgLS1wYXBlci1vcmFuZ2UtNTA6ICNmZmYzZTA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTEwMDogI2ZmZTBiMjsKICAgICAgLS1wYXBlci1vcmFuZ2UtMjAwOiAjZmZjYzgwOwogICAgICAtLXBhcGVyLW9yYW5nZS0zMDA6ICNmZmI3NGQ7CiAgICAgIC0tcGFwZXItb3JhbmdlLTQwMDogI2ZmYTcyNjsKICAgICAgLS1wYXBlci1vcmFuZ2UtNTAwOiAjZmY5ODAwOwogICAgICAtLXBhcGVyLW9yYW5nZS02MDA6ICNmYjhjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTcwMDogI2Y1N2MwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtODAwOiAjZWY2YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS05MDA6ICNlNjUxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWExMDA6ICNmZmQxODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWEyMDA6ICNmZmFiNDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE0MDA6ICNmZjkxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE3MDA6ICNmZjY1MDA7CgogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwOiAjZmJlOWU3OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTEwMDogI2ZmY2NiYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0yMDA6ICNmZmFiOTE7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMzAwOiAjZmY4YTY1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTQwMDogI2ZmNzA0MzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDA6ICNmZjU3MjI7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNjAwOiAjZjQ1MTFlOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTcwMDogI2U2NGExOTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS04MDA6ICNkODQzMTU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtOTAwOiAjYmYzNjBjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWExMDA6ICNmZjllODA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTIwMDogI2ZmNmU0MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNDAwOiAjZmYzZDAwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE3MDA6ICNkZDJjMDA7CgogICAgICAtLXBhcGVyLWJyb3duLTUwOiAjZWZlYmU5OwogICAgICAtLXBhcGVyLWJyb3duLTEwMDogI2Q3Y2NjODsKICAgICAgLS1wYXBlci1icm93bi0yMDA6ICNiY2FhYTQ7CiAgICAgIC0tcGFwZXItYnJvd24tMzAwOiAjYTE4ODdmOwogICAgICAtLXBhcGVyLWJyb3duLTQwMDogIzhkNmU2MzsKICAgICAgLS1wYXBlci1icm93bi01MDA6ICM3OTU1NDg7CiAgICAgIC0tcGFwZXItYnJvd24tNjAwOiAjNmQ0YzQxOwogICAgICAtLXBhcGVyLWJyb3duLTcwMDogIzVkNDAzNzsKICAgICAgLS1wYXBlci1icm93bi04MDA6ICM0ZTM0MmU7CiAgICAgIC0tcGFwZXItYnJvd24tOTAwOiAjM2UyNzIzOwoKICAgICAgLS1wYXBlci1ncmV5LTUwOiAjZmFmYWZhOwogICAgICAtLXBhcGVyLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLXBhcGVyLWdyZXktMjAwOiAjZWVlZWVlOwogICAgICAtLXBhcGVyLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLXBhcGVyLWdyZXktNDAwOiAjYmRiZGJkOwogICAgICAtLXBhcGVyLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLXBhcGVyLWdyZXktNjAwOiAjNzU3NTc1OwogICAgICAtLXBhcGVyLWdyZXktNzAwOiAjNjE2MTYxOwogICAgICAtLXBhcGVyLWdyZXktODAwOiAjNDI0MjQyOwogICAgICAtLXBhcGVyLWdyZXktOTAwOiAjMjEyMTIxOwoKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTA6ICNlY2VmZjE7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTEwMDogI2NmZDhkYzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMjAwOiAjYjBiZWM1OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0zMDA6ICM5MGE0YWU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTQwMDogIzc4OTA5YzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTAwOiAjNjA3ZDhiOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS02MDA6ICM1NDZlN2E7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTcwMDogIzQ1NWE2NDsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktODAwOiAjMzc0NzRmOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS05MDA6ICMyNjMyMzg7CgogICAgICAvKiBvcGFjaXR5IGZvciBkYXJrIHRleHQgb24gYSBsaWdodCBiYWNrZ3JvdW5kICovCiAgICAgIC0tZGFyay1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tZGFyay1kaXNhYmxlZC1vcGFjaXR5OiAwLjM4OyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWRhcmstc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNTQ7CiAgICAgIC0tZGFyay1wcmltYXJ5LW9wYWNpdHk6IDAuODc7CgogICAgICAvKiBvcGFjaXR5IGZvciBsaWdodCB0ZXh0IG9uIGEgZGFyayBiYWNrZ3JvdW5kICovCiAgICAgIC0tbGlnaHQtZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWxpZ2h0LWRpc2FibGVkLW9wYWNpdHk6IDAuMzsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1saWdodC1zZWNvbmRhcnktb3BhY2l0eTogMC43OwogICAgICAtLWxpZ2h0LXByaW1hcnktb3BhY2l0eTogMS4wOwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7cDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocDB0LmNvbnRlbnQpO3ZhciBkMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBhcyBpdHMgbWFpbgogICAgICAgKiBjb2xvciwgdGhlbiBzd2l0Y2hpbmcgZnJvbSBhIGxpZ2h0IHRvIGEgZGFyayB0aGVtZSBpcyBqdXN0IGEgbWF0dGVyIG9mCiAgICAgICAqIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgaW4geW91ciBhcHBsaWNhdGlvbi4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3IpOwogICAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3IpOwogICAgICAtLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yKTsKICAgICAgLS1kaXZpZGVyLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yKTsKICAgICAgLS1lcnJvci1jb2xvcjogdmFyKC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMCk7CgogICAgICAvKgogICAgICAgKiBQcmltYXJ5IGFuZCBhY2NlbnQgY29sb3JzLiBBbHNvIHNlZSBjb2xvci5qcyBmb3IgbW9yZSBjb2xvcnMuCiAgICAgICAqLwogICAgICAtLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLWxpZ2h0LXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby0xMDApOwogICAgICAtLWRhcmstcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTcwMCk7CgogICAgICAtLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMjAwKTsKICAgICAgLS1saWdodC1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTEwMCk7CiAgICAgIC0tZGFyay1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTQwMCk7CgoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIExpZ2h0IGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1saWdodC10aGVtZS1iYXNlLWNvbG9yOiAjMDAwMDAwOwogICAgICAtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3I6ICM3MzczNzM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM5YjliOWI7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yOiAjZGJkYmRiOwoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIERhcmsgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1kYXJrLXRoZW1lLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1kYXJrLXRoZW1lLWJhc2UtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS10ZXh0LWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjYmNiY2JjOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWRhcmstdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM2NDY0NjQ7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpdmlkZXItY29sb3I6ICMzYzNjM2M7CgogICAgICAvKgogICAgICAgKiBEZXByZWNhdGVkIHZhbHVlcyBiZWNhdXNlIG9mIHRoZWlyIGNvbmZ1c2luZyBuYW1lcy4KICAgICAgICovCiAgICAgIC0tdGV4dC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLWRlZmF1bHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtkMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChkMHQuY29udGVudCk7dmFyIEVoPXtwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7fSxkZXRhY2hlZDpmdW5jdGlvbigpe319O3ZhciBoVz1udWxsLFRoPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtoVz1uZXcgZ28oe3R5cGU6InZhbGlkYXRvciJ9KX0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWludmFsaWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSxnZXQgX3ZhbGlkYXRvcigpe3JldHVybiBoVyYmaFcuYnlLZXkodGhpcy52YWxpZGF0b3IpfSxoYXNWYWxpZGF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yIT1udWxsfSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmdGhpcy52YWx1ZSE9PXZvaWQgMD90aGlzLmludmFsaWQ9IXRoaXMuX2dldFZhbGlkaXR5KHRoaXMudmFsdWUpOnRoaXMuaW52YWxpZD0hdGhpcy5fZ2V0VmFsaWRpdHkoZSksIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc1ZhbGlkYXRvcigpP3RoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZShlKTohMH19O3ZhciBmVz17cHJvcGVydGllczp7Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToib24iLG9ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9yZXF1aXJlZENoYW5nZWQocmVxdWlyZWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hhc0lyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yPSEwfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIil9LF9jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPXRoaXMuY2hlY2tlZCx0aGlzLmZpcmUoImlyb24tY2hhbmdlIil9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXsodGhpcy52YWx1ZT09PXZvaWQgMHx8dGhpcy52YWx1ZT09PW51bGwpJiYodGhpcy52YWx1ZT0ib24iKX19LG0wdD1bRWgsVGgsZlddO3ZhciBwRT17b2JzZXJ2ZXJzOlsiX2ZvY3VzZWRDaGFuZ2VkKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0sX2ZvY3VzZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe2UmJnRoaXMuZW5zdXJlUmlwcGxlKCksdGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ob2xkRG93bj1lKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPXN1Ll9jcmVhdGVSaXBwbGUoKTtyZXR1cm4gZS5pZD0iaW5rIixlLnNldEF0dHJpYnV0ZSgiY2VudGVyIiwiIiksZS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiKSxlfX0sang9W1NoLERpLHN1LHBFXTt2YXIgTGJlPXtfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXtmVy5fY2hlY2tlZENoYW5nZWQuY2FsbCh0aGlzKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5jaGVja2VkP3RoaXMuX3JpcHBsZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCIiKTp0aGlzLl9yaXBwbGUucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIikpfSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7c3UuX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpLCF0aGlzLmRpc2FibGVkJiZ0aGlzLmlzQXR0YWNoZWQmJih0aGlzLmNoZWNrZWQ9dGhpcy5hY3RpdmUpfX0sWHg9W2p4LG0wdCxMYmVdO3ZhciBnMHQ9UWA8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1zaXplLCAxOHB4KTsKICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUsIC0xcHgpOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIDpob3N0KFtoaWRkZW5dKSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAjY2hlY2tib3hDb250YWluZXIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtYXJnaW46IHZhcigtLXBhcGVyLWNoZWNrYm94LW1hcmdpbiwgaW5pdGlhbCk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItY2hlY2tib3gtdmVydGljYWwtYWxpZ24sIG1pZGRsZSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogIH0KCiAgI2luayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgLyogQ2VudGVyIHRoZSByaXBwbGUgaW4gdGhlIGNoZWNrYm94IGJ5IG5lZ2F0aXZlIG9mZnNldHRpbmcgaXQgYnkKICAgICAqIChpbmtXaWR0aCAtIHJpcHBsZVdpZHRoKSAvIDIgKi8KICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogIH0KCiAgI2luazpkaXIocnRsKSB7CiAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogYXV0bzsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2tib3ggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlcjogc29saWQgMnB4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKCiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICAvKiBjaGVja2JveCBjaGVja2VkIGFuaW1hdGlvbnMgKi8KICAjY2hlY2tib3guY2hlY2tlZCAjY2hlY2ttYXJrIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwoKICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICBALXdlYmtpdC1rZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogICNjaGVja2JveC5jaGVja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMzYlOwogICAgaGVpZ2h0OiA3MCU7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1ib3R0b20td2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogIH0KCiAgI2NoZWNrbWFyazpkaXIocnRsKSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogIH0KCiAgLyogbGFiZWwgKi8KICAjY2hlY2tib3hMYWJlbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNjaGVja2JveExhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZDsKICB9CgogICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQoKICAjY2hlY2tib3hMYWJlbFtoaWRkZW5dIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3ggewogICAgb3BhY2l0eTogMC41OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3hMYWJlbCAgewogICAgb3BhY2l0eTogMC42NTsKICB9CgogIC8qIGludmFsaWQgc3RhdGUgKi8KICAjY2hlY2tib3guaW52YWxpZDpub3QoLmNoZWNrZWQpIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogIDxkaXYgaWQ9ImNoZWNrYm94IiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja2JveENsYXNzKGNoZWNrZWQsIGludmFsaWQpXV0iPgogICAgPGRpdiBpZD0iY2hlY2ttYXJrIiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja21hcmtDbGFzcyhjaGVja2VkKV1dIj48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJjaGVja2JveExhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtnMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpnMHQsaXM6InBhcGVyLWNoZWNrYm94IixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKTtpZihlPT09Ii0xcHgiKXt2YXIgdD10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUiKS50cmltKCkscj0icHgiLG49dC5tYXRjaCgvW0EtWmEtel0rJC8pO24hPT1udWxsJiYocj1uWzBdKTt2YXIgaT1wYXJzZUZsb2F0KHQpLG89OC8zKmk7cj09PSJweCImJihvPU1hdGguZmxvb3IobyksbyUyIT09aSUyJiZvKyspLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSI6bytyfSl9fSl9LF9jb21wdXRlQ2hlY2tib3hDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSIiO3JldHVybiBlJiYocis9ImNoZWNrZWQgIiksdCYmKHIrPSJpbnZhbGlkIikscn0sX2NvbXB1dGVDaGVja21hcmtDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iIjoiaGlkZGVuIn0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyLHBFLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTtpZighd2luZG93LnBvbHltZXJTa2lwTG9hZGluZ0ZvbnRSb2JvdG8pe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtlLnJlbD0ic3R5bGVzaGVldCIsZS50eXBlPSJ0ZXh0L2NzcyIsZS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixlLmhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubzo0MDAsNzAwfFJvYm90bzo0MDAsMzAwLDMwMGl0YWxpYyw0MDBpdGFsaWMsNTAwLDUwMGl0YWxpYyw3MDAsNzAwaXRhbGljIixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfXZhciBfMHQ9UWA8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtfMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfMHQuY29udGVudCk7dmFyIHBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cFcuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7cFcuaW5uZXJIVE1MPWA8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMjRweCA0MHB4OwoKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1kaWFsb2ctYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZzsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgubm8tcGFkZGluZykgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGlzIHNlbGVjdG9yIHdhcyBcYDpob3N0ID4gOjpjb250ZW50IGgyXGAuIEluIDIueCA8c2xvdD4gYWxsb3dzCiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpcwogICAgICBzZWxlY3Rvciwgc28gd2UgaGF2ZSB0byByZS1kZWZpbmUgZmlyc3QtY2hpbGQvbGFzdC1jaGlsZCBtYXJnaW5zIGJlbG93LiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi10b3AuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLWJvdHRvbS4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgucGFwZXItZGlhbG9nLWJ1dHRvbnMpLAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggOHB4IDhweCAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwVy5jb250ZW50KTt2YXIgeTB0PXtwcm9wZXJ0aWVzOnthbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxlbnRyeUFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9lbnRyeUFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfSxleGl0QW5pbWF0aW9uOntvYnNlcnZlcjoiX2V4aXRBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ319LF9lbnRyeUFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZW50cnk9W3tuYW1lOnRoaXMuZW50cnlBbmltYXRpb24sbm9kZTp0aGlzfV19LF9leGl0QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5leGl0PVt7bmFtZTp0aGlzLmV4aXRBbmltYXRpb24sbm9kZTp0aGlzfV19LF9jb3B5UHJvcGVydGllczpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sX2Nsb25lQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXtpc0Nsb25lOiEwfTtyZXR1cm4gdGhpcy5fY29weVByb3BlcnRpZXModCxlKSx0fSxfZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlOmZ1bmN0aW9uKGUsdCxyKXtpZighIXRoaXMuYW5pbWF0aW9uQ29uZmlnKXtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSYmdHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlPT0iZnVuY3Rpb24iKXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoInBsYXlBbmltYXRpb24iLCJQbGVhc2UgcHV0ICdhbmltYXRpb25Db25maWcnIGluc2lkZSBvZiB5b3VyIGNvbXBvbmVudHMgJ3Byb3BlcnRpZXMnIG9iamVjdCBpbnN0ZWFkIG9mIG91dHNpZGUgb2YgaXQuIikpO3JldHVybn12YXIgbjtpZihlP249dGhpcy5hbmltYXRpb25Db25maWdbZV06bj10aGlzLmFuaW1hdGlvbkNvbmZpZyxBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLG4pZm9yKHZhciBpLG89MDtpPW5bb107bysrKWlmKGkuYW5pbWF0YWJsZSlpLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShpLnR5cGV8fGUsdCxyKTtlbHNlIGlmKGkuaWQpe3ZhciBhPXRbaS5pZF07YT8oYS5pc0Nsb25lfHwodFtpLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhhKSxhPXRbaS5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGEsaSkpOnRbaS5pZF09aX1lbHNlIHIucHVzaChpKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD17fSxyPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShlLHQscik7Zm9yKHZhciBuIGluIHQpci5wdXNoKHRbbl0pO3JldHVybiByfX07dmFyIGtiZT17X2NvbmZpZ3VyZUFuaW1hdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10scj1bXTtpZihlLmxlbmd0aD4wKWZvcihsZXQgaSxvPTA7aT1lW29dO28rKyl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2lmKGEuaXNOZW9uQW5pbWF0aW9uKXtsZXQgcz1udWxsO2EuY29uZmlndXJlfHwoYS5jb25maWd1cmU9ZnVuY3Rpb24obCl7cmV0dXJuIG51bGx9KSxzPWEuY29uZmlndXJlKGkpLHIucHVzaCh7cmVzdWx0OnMsY29uZmlnOmksbmVvbkFuaW1hdGlvbjphfSl9ZWxzZSBjb25zb2xlLndhcm4odGhpcy5pcysiOiIsaS5uYW1lLCJub3QgZm91bmQhIil9Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBpPXJbbl0ucmVzdWx0LG89cltuXS5jb25maWcsYT1yW25dLm5lb25BbmltYXRpb247dHJ5e3R5cGVvZiBpLmNhbmNlbCE9ImZ1bmN0aW9uIiYmKGk9ZG9jdW1lbnQudGltZWxpbmUucGxheShpKSl9Y2F0Y2gocyl7aT1udWxsLGNvbnNvbGUud2FybigiQ291bGRudCBwbGF5IiwiKCIsby5uYW1lLCIpLiIscyl9aSYmdC5wdXNoKHtuZW9uQW5pbWF0aW9uOmEsY29uZmlnOm8sYW5pbWF0aW9uOml9KX1yZXR1cm4gdH0sX3Nob3VsZENvbXBsZXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMCxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5hbmltYXRpb24ucGxheVN0YXRlIT0iZmluaXNoZWQiKXt0PSExO2JyZWFrfXJldHVybiB0fSxfY29tcGxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5uZW9uQW5pbWF0aW9uLmNvbXBsZXRlKGVbdF0uY29uZmlnKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKGUpO2lmKCEhcil7dGhpcy5fYWN0aXZlPXRoaXMuX2FjdGl2ZXx8e30sdGhpcy5fYWN0aXZlW2VdJiYodGhpcy5fY29tcGxldGUodGhpcy5fYWN0aXZlW2VdKSxkZWxldGUgdGhpcy5fYWN0aXZlW2VdKTt2YXIgbj10aGlzLl9jb25maWd1cmVBbmltYXRpb25zKHIpO2lmKG4ubGVuZ3RoPT0wKXt0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pO3JldHVybn10aGlzLl9hY3RpdmVbZV09bjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLmFuaW1hdGlvbi5vbmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3Nob3VsZENvbXBsZXRlKG4pJiYodGhpcy5fY29tcGxldGUobiksZGVsZXRlIHRoaXMuX2FjdGl2ZVtlXSx0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pKX0uYmluZCh0aGlzKX19LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9hY3RpdmUpe3ZhciB0PXRoaXMuX2FjdGl2ZVtlXTtmb3IodmFyIHIgaW4gdCl0W3JdLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fSxiOT1beTB0LGtiZV07dmFyIHc5LFJiZT0oKT0+e2lmKHc5IT09dm9pZCAwKXJldHVybiB3OTtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtPYmplY3QuYXNzaWduKGUuc3R5bGUse292ZXJmbG93OiJhdXRvIixwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjBweCIsdG9wOiIwcHgiLG1heFdpZHRoOiIxMDBweCIsbWF4SGVpZ2h0OiIxMDBweCJ9KTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD0iMjAwcHgiLHQuc3R5bGUuaGVpZ2h0PSIyMDBweCIsZS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLHc5PU1hdGguYWJzKGUub2Zmc2V0V2lkdGgtMTAwKT4xP2Uub2Zmc2V0V2lkdGgtZS5jbGllbnRXaWR0aDowLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksdzl9LHYwdD17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lcldpZHRoOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGV9LGdldCBfZml0SGVpZ2h0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lckhlaWdodDplPXRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsZX0sZ2V0IF9maXRMZWZ0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPTA6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxlfSxnZXQgX2ZpdFRvcCgpe3ZhciBlO3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/ZT0wOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxlfSxnZXQgX2RlZmF1bHRQb3NpdGlvblRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGU7cmV0dXJuIGUmJmUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJihlPWUuaG9zdCksZX0sZ2V0IF9sb2NhbGVIb3Jpem9udGFsQWxpZ24oKXtpZih0aGlzLl9pc1JUTCl7aWYodGhpcy5ob3Jpem9udGFsQWxpZ249PT0icmlnaHQiKXJldHVybiJsZWZ0IjtpZih0aGlzLmhvcml6b250YWxBbGlnbj09PSJsZWZ0IilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGdldCBfaXNSVEwoKXtyZXR1cm4gdHlwZW9mIHRoaXMuX21lbW9pemVkSXNSVEw9PSJ1bmRlZmluZWQiJiYodGhpcy5fbWVtb2l6ZWRJc1JUTD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PSJydGwiKSx0aGlzLl9tZW1vaXplZElzUlRMfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb25UYXJnZXQ9dGhpcy5wb3NpdGlvblRhcmdldHx8dGhpcy5fZGVmYXVsdFBvc2l0aW9uVGFyZ2V0LHRoaXMuYXV0b0ZpdE9uQXR0YWNoJiYod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlzcGxheT09PSJub25lIj9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5maXQoKX0uYmluZCh0aGlzKSk6KHdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLmZpdCgpKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fX2RlZmVycmVkRml0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX19kZWZlcnJlZEZpdCksdGhpcy5fX2RlZmVycmVkRml0PW51bGwpfSxmaXQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uKCksdGhpcy5jb25zdHJhaW4oKSx0aGlzLmNlbnRlcigpfSxfZGlzY292ZXJJbmZvOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZpdEluZm8pe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zaXppbmdUYXJnZXQpO3RoaXMuX2ZpdEluZm89e2lubGluZVN0eWxlOnt0b3A6dGhpcy5zdHlsZS50b3B8fCIiLGxlZnQ6dGhpcy5zdHlsZS5sZWZ0fHwiIixwb3NpdGlvbjp0aGlzLnN0eWxlLnBvc2l0aW9ufHwiIn0sc2l6ZXJJbmxpbmVTdHlsZTp7bWF4V2lkdGg6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGh8fCIiLG1heEhlaWdodDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHR8fCIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ZS50b3AhPT0iYXV0byI/InRvcCI6ZS5ib3R0b20hPT0iYXV0byI/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ZS5sZWZ0IT09ImF1dG8iPyJsZWZ0IjplLnJpZ2h0IT09ImF1dG8iPyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OnQubWF4SGVpZ2h0IT09Im5vbmUiLHdpZHRoOnQubWF4V2lkdGghPT0ibm9uZSIsbWluV2lkdGg6cGFyc2VJbnQodC5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KHQubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQoZS5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KGUubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludChlLm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludChlLm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZpdEluZm98fHt9O2Zvcih2YXIgdCBpbiBlLnNpemVySW5saW5lU3R5bGUpdGhpcy5zaXppbmdUYXJnZXQuc3R5bGVbdF09ZS5zaXplcklubGluZVN0eWxlW3RdO2Zvcih2YXIgdCBpbiBlLmlubGluZVN0eWxlKXRoaXMuc3R5bGVbdF09ZS5pbmxpbmVTdHlsZVt0XTt0aGlzLl9maXRJbmZvPW51bGx9LHJlZml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdCx0PXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcDt0aGlzLnJlc2V0Rml0KCksdGhpcy5maXQoKSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0PWUsdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wPXR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbilyZXR1cm47dGhpcy5fZGlzY292ZXJJbmZvKCksd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2goKSx0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Iix0aGlzLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5zdHlsZS50b3A9IjBweCI7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLnBvc2l0aW9uVGFyZ2V0KSxyPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2xldCBuLGksbyxhO3RoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyYmKG49dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsaT10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxhPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCk7dmFyIHM9dGhpcy5fZml0SW5mby5tYXJnaW4sbD17d2lkdGg6ZS53aWR0aCtzLmxlZnQrcy5yaWdodCxoZWlnaHQ6ZS5oZWlnaHQrcy50b3Arcy5ib3R0b219LGM9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24sbCxlLHQsciksdT1jLmxlZnQrcy5sZWZ0LGg9Yy50b3Arcy50b3AsZj1NYXRoLm1pbihyLnJpZ2h0LXMucmlnaHQsdStlLndpZHRoKSxwPU1hdGgubWluKHIuYm90dG9tLXMuYm90dG9tLGgrZS5oZWlnaHQpO3U9TWF0aC5tYXgoci5sZWZ0K3MubGVmdCxNYXRoLm1pbih1LGYtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSksaD1NYXRoLm1heChyLnRvcCtzLnRvcCxNYXRoLm1pbihoLHAtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO2xldCBkPU1hdGgubWF4KGYtdSx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpLGc9TWF0aC5tYXgocC1oLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5IZWlnaHQpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWQrInB4Iix0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9ZysicHgiO2xldCBfPXUtZS5sZWZ0LHk9aC1lLnRvcDtpZih0aGlzLnN0eWxlLmxlZnQ9YCR7X31weGAsdGhpcy5zdHlsZS50b3A9YCR7eX1weGAsdGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzKXtsZXQgeD10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsYj10aGlzLnNpemluZ1RhcmdldC5jbGllbnRIZWlnaHQsUz1pLWEsUD14LWItUztpZihQPjApe2xldCBMPXIuaGVpZ2h0LXMudG9wLXMuYm90dG9tLFI9TWF0aC5taW4oTCxnK1ApO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1gJHtSfXB4YDtsZXQgRj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsej1GLXgsVTtjLnZlcnRpY2FsQWxpZ249PT0idG9wIj9VPXk6Yy52ZXJ0aWNhbEFsaWduPT09Im1pZGRsZSI/VT15LXovMjpjLnZlcnRpY2FsQWxpZ249PT0iYm90dG9tIiYmKFU9eS16KSxVPU1hdGgubWF4KHIudG9wK3MudG9wLE1hdGgubWluKFUsci5ib3R0b20tcy5ib3R0b20tRikpLHRoaXMuc3R5bGUudG9wPWAke1V9cHhgfWxldCBrPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLE89dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50V2lkdGgsRD1uLW8sST1rLU8tRDtpZihJPjApe2xldCBMPVJiZSgpLFI9ci53aWR0aC1zLmxlZnQtcy5yaWdodCxGPU1hdGgubWluKFIsZCtJLUwpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWAke0Z9cHhgO2xldCB6PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoK0wsVT16LWssVztjLmhvcml6b250YWxBbGlnbj09PSJsZWZ0Ij9XPV86Yy5ob3Jpem9udGFsQWxpZ249PT0iY2VudGVyIj9XPV8tVS8yOmMuaG9yaXpvbnRhbEFsaWduPT09InJpZ2h0IiYmKFc9Xy1VKSxXPU1hdGgubWF4KHIubGVmdCtzLmxlZnQsTWF0aC5taW4oVyxyLnJpZ2h0LXMucmlnaHQteikpLHRoaXMuc3R5bGUubGVmdD1gJHtXfXB4YH19fSxjb25zdHJhaW46ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Nob3VsZFBvc2l0aW9uKXt0aGlzLl9kaXNjb3ZlckluZm8oKTt2YXIgZT10aGlzLl9maXRJbmZvO2UucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zdHlsZS50b3A9IjBweCIpLGUucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLmxlZnQ9IjBweCIpLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnNpemVkQnkuaGVpZ2h0fHx0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHksInRvcCIsImJvdHRvbSIsIkhlaWdodCIpLGUuc2l6ZWRCeS53aWR0aHx8dGhpcy5fX3NpemVEaW1lbnNpb24odCxlLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHksImxlZnQiLCJyaWdodCIsIldpZHRoIil9fSxfc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3RoaXMuX19zaXplRGltZW5zaW9uKGUsdCxyLG4saSl9LF9fc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXRoaXMuX2ZpdEluZm8sYT10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKSxzPWk9PT0iV2lkdGgiP2Eud2lkdGg6YS5oZWlnaHQsbD10PT09bixjPWw/cy1lW25dOmVbcl0sdT1vLm1hcmdpbltsP3I6bl0saD0ib2Zmc2V0IitpLGY9dGhpc1toXS10aGlzLnNpemluZ1RhcmdldFtoXTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IitpXT1zLXUtYy1mKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBlPXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCEoZS52ZXJ0aWNhbGx5JiZlLmhvcml6b250YWxseSkpe3RoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnRvcD0iMHB4IiksZS5ob3Jpem9udGFsbHl8fCh0aGlzLnN0eWxlLmxlZnQ9IjBweCIpO3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtpZighZS52ZXJ0aWNhbGx5KXt2YXIgbj1yLnRvcC10LnRvcCsoci5oZWlnaHQtdC5oZWlnaHQpLzI7dGhpcy5zdHlsZS50b3A9bisicHgifWlmKCFlLmhvcml6b250YWxseSl7dmFyIGk9ci5sZWZ0LXQubGVmdCsoci53aWR0aC10LndpZHRoKS8yO3RoaXMuc3R5bGUubGVmdD1pKyJweCJ9fX19LF9fZ2V0Tm9ybWFsaXplZFJlY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGU9PT13aW5kb3c/e3RvcDowLGxlZnQ6MCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHR9OmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LF9fZ2V0T2Zmc2NyZWVuQXJlYTpmdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5taW4oMCxlLnRvcCkrTWF0aC5taW4oMCxyLmJvdHRvbS0oZS50b3ArdC5oZWlnaHQpKSxpPU1hdGgubWluKDAsZS5sZWZ0KStNYXRoLm1pbigwLHIucmlnaHQtKGUubGVmdCt0LndpZHRoKSk7cmV0dXJuIE1hdGguYWJzKG4pKnQud2lkdGgrTWF0aC5hYnMoaSkqdC5oZWlnaHR9LF9fZ2V0UG9zaXRpb246ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhPVt7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fV07aWYodGhpcy5ub092ZXJsYXApe2Zvcih2YXIgcz0wLGw9YS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9e307Zm9yKHZhciB1IGluIGFbc10pY1t1XT1hW3NdW3VdO2EucHVzaChjKX1hWzBdLnRvcD1hWzFdLnRvcCs9aS5oZWlnaHQsYVsyXS50b3A9YVszXS50b3AtPWkuaGVpZ2h0LGFbNF0ubGVmdD1hWzZdLmxlZnQrPWkud2lkdGgsYVs1XS5sZWZ0PWFbN10ubGVmdC09aS53aWR0aH10PXQ9PT0iYXV0byI/bnVsbDp0LGU9ZT09PSJhdXRvIj9udWxsOmUsKCFlfHxlPT09ImNlbnRlciIpJiYoYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6aS50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/aS5oZWlnaHQ6MCksbGVmdDppLmxlZnQtbi53aWR0aC8yK2kud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxhLnB1c2goe3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9pLmhlaWdodDowKSxsZWZ0OmkubGVmdC1uLndpZHRoLzIraS53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pKSwoIXR8fHQ9PT0ibWlkZGxlIikmJihhLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6aS50b3Atbi5oZWlnaHQvMitpLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9pLndpZHRoOjApfSksYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDppLnRvcC1uLmhlaWdodC8yK2kuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2kud2lkdGg6MCl9KSksdD09PSJtaWRkbGUiJiZlPT09ImNlbnRlciImJmEucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmkudG9wLW4uaGVpZ2h0LzIraS5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0LW4ud2lkdGgvMitpLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSk7Zm9yKHZhciBoLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGY9YVtzXSxwPWYudmVydGljYWxBbGlnbj09PXQsZD1mLmhvcml6b250YWxBbGlnbj09PWU7aWYoIXRoaXMuZHluYW1pY0FsaWduJiYhdGhpcy5ub092ZXJsYXAmJnAmJmQpe2g9ZjticmVha312YXIgZz0oIXR8fHApJiYoIWV8fGQpO2lmKCEoIXRoaXMuZHluYW1pY0FsaWduJiYhZykpe2lmKGYub2Zmc2NyZWVuQXJlYT10aGlzLl9fZ2V0T2Zmc2NyZWVuQXJlYShmLHIsbyksZi5vZmZzY3JlZW5BcmVhPT09MCYmZyl7aD1mO2JyZWFrfWg9aHx8Zjt2YXIgXz1mLm9mZnNjcmVlbkFyZWEtaC5vZmZzY3JlZW5BcmVhOyhfPDB8fF89PT0wJiYocHx8ZCkpJiYoaD1mKX19cmV0dXJuIGh9fTt2YXIgJHg9RWxlbWVudC5wcm90b3R5cGUsUzk9JHgubWF0Y2hlc3x8JHgubWF0Y2hlc1NlbGVjdG9yfHwkeC5tb3pNYXRjaGVzU2VsZWN0b3J8fCR4Lm1zTWF0Y2hlc1NlbGVjdG9yfHwkeC5vTWF0Y2hlc1NlbGVjdG9yfHwkeC53ZWJraXRNYXRjaGVzU2VsZWN0b3IsZFc9Y2xhc3N7Z2V0VGFiYmFibGVOb2Rlcyh0KXt2YXIgcj1bXSxuPXRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQscik7cmV0dXJuIG4/dGhpcy5fc29ydEJ5VGFiSW5kZXgocik6cn1pc0ZvY3VzYWJsZSh0KXtyZXR1cm4gUzkuY2FsbCh0LCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9TOS5jYWxsKHQsIjpub3QoW2Rpc2FibGVkXSkiKTpTOS5jYWxsKHQsImFbaHJlZl0sIGFyZWFbaHJlZl0sIGlmcmFtZSwgW3RhYmluZGV4XSwgW2NvbnRlbnRFZGl0YWJsZV0iKX1pc1RhYmJhYmxlKHQpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlKHQpJiZTOS5jYWxsKHQsJzpub3QoW3RhYmluZGV4PSItMSJdKScpJiZ0aGlzLl9pc1Zpc2libGUodCl9X25vcm1hbGl6ZWRUYWJJbmRleCh0KXtpZih0aGlzLmlzRm9jdXNhYmxlKHQpKXt2YXIgcj10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MDtyZXR1cm4gTnVtYmVyKHIpfXJldHVybi0xfV9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LHIpe2lmKHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4hMTt2YXIgbj10O2lmKCF0aGlzLl9pc1Zpc2libGUobikpcmV0dXJuITE7dmFyIGk9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KG4pLG89aT4wO2k+PTAmJnIucHVzaChuKTt2YXIgYTtuLmxvY2FsTmFtZT09PSJjb250ZW50Inx8bi5sb2NhbE5hbWU9PT0ic2xvdCI/YT16dChuKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6YT16dChuLnJvb3R8fG4pLmNoaWxkcmVuO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKW89dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoYVtzXSxyKXx8bztyZXR1cm4gb31faXNWaXNpYmxlKHQpe3ZhciByPXQuc3R5bGU7cmV0dXJuIHIudmlzaWJpbGl0eSE9PSJoaWRkZW4iJiZyLmRpc3BsYXkhPT0ibm9uZSI/KHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksci52aXNpYmlsaXR5IT09ImhpZGRlbiImJnIuZGlzcGxheSE9PSJub25lIik6ITF9X3NvcnRCeVRhYkluZGV4KHQpe3ZhciByPXQubGVuZ3RoO2lmKHI8MilyZXR1cm4gdDt2YXIgbj1NYXRoLmNlaWwoci8yKSxpPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UoMCxuKSksbz10aGlzLl9zb3J0QnlUYWJJbmRleCh0LnNsaWNlKG4pKTtyZXR1cm4gdGhpcy5fbWVyZ2VTb3J0QnlUYWJJbmRleChpLG8pfV9tZXJnZVNvcnRCeVRhYkluZGV4KHQscil7Zm9yKHZhciBuPVtdO3QubGVuZ3RoPjAmJnIubGVuZ3RoPjA7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIodFswXSxyWzBdKT9uLnB1c2goci5zaGlmdCgpKTpuLnB1c2godC5zaGlmdCgpKTtyZXR1cm4gbi5jb25jYXQodCxyKX1faGFzTG93ZXJUYWJPcmRlcih0LHIpe3ZhciBuPU1hdGgubWF4KHQudGFiSW5kZXgsMCksaT1NYXRoLm1heChyLnRhYkluZGV4LDApO3JldHVybiBuPT09MHx8aT09PTA/aT5uOm4+aX19LHgwdD1uZXcgZFc7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZC1jb2xvciwgIzAwMCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wOwogICAgICB9CgogICAgICA6aG9zdCgub3BlbmVkKSB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wYWNpdHksIDAuNik7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wZW5lZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tb3ZlcmxheS1iYWNrZHJvcCIscHJvcGVydGllczp7b3BlbmVkOntyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9vblRyYW5zaXRpb25lbmQifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX29wZW5lZFJhZj1udWxsfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKX0scHJlcGFyZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5wYXJlbnROb2RlJiZ6dChkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSExfSxjb21wbGV0ZTpmdW5jdGlvbigpeyF0aGlzLm9wZW5lZCYmdGhpcy5wYXJlbnROb2RlPT09ZG9jdW1lbnQuYm9keSYmenQodGhpcy5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzKX0sX29uVHJhbnNpdGlvbmVuZDpmdW5jdGlvbihlKXtlJiZlLnRhcmdldD09PXRoaXMmJnRoaXMuY29tcGxldGUoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7aWYoZSl0aGlzLnByZXBhcmUoKTtlbHNle3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpOyh0LnRyYW5zaXRpb25EdXJhdGlvbj09PSIwcyJ8fHQub3BhY2l0eT09MCkmJnRoaXMuY29tcGxldGUoKX0hdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5fX29wZW5lZFJhZiYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fb3BlbmVkUmFmKSx0aGlzLl9fb3BlbmVkUmFmPW51bGwpLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX19vcGVuZWRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbCx0aGlzLnRvZ2dsZUNsYXNzKCJvcGVuZWQiLHRoaXMub3BlbmVkKX0uYmluZCh0aGlzKSkpfX0pO3ZhciBtVz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX292ZXJsYXlzPVtdLHRoaXMuX21pbmltdW1aPTEwMSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCxFbShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fHwodGhpcy5fYmFja2Ryb3BFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tb3ZlcmxheS1iYWNrZHJvcCIpKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoKCF0fHwhKHQgaW5zdGFuY2VvZiBFbGVtZW50KSkmJih0PWRvY3VtZW50LmJvZHkpO3Qucm9vdCYmenQodC5yb290KS5hY3RpdmVFbGVtZW50Oyl0PXp0KHQucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gdH1fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXNbdF07aWYoISFyKXt2YXIgbj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxpPXRoaXMuX292ZXJsYXlzW25dO2lmKGkmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShyLGkpJiZuLS0sISh0Pj1uKSl7dmFyIG89TWF0aC5tYXgodGhpcy5jdXJyZW50T3ZlcmxheVooKSx0aGlzLl9taW5pbXVtWik7Zm9yKHRoaXMuX2dldFoocik8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoocixvKTt0PG47KXRoaXMuX292ZXJsYXlzW3RdPXRoaXMuX292ZXJsYXlzW3QrMV0sdCsrO3RoaXMuX292ZXJsYXlzW25dPXJ9fX1hZGRPclJlbW92ZU92ZXJsYXkodCl7dC5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KHQpOnRoaXMucmVtb3ZlT3ZlcmxheSh0KX1hZGRPdmVybGF5KHQpe3ZhciByPXRoaXMuX292ZXJsYXlzLmluZGV4T2YodCk7aWYocj49MCl7dGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQociksdGhpcy50cmFja0JhY2tkcm9wKCk7cmV0dXJufXZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aCxpPXRoaXMuX292ZXJsYXlzW24tMV0sbz1NYXRoLm1heCh0aGlzLl9nZXRaKGkpLHRoaXMuX21pbmltdW1aKSxhPXRoaXMuX2dldFoodCk7aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsaSkpe3RoaXMuX2FwcGx5T3ZlcmxheVooaSxvKSxuLS07dmFyIHM9dGhpcy5fb3ZlcmxheXNbbi0xXTtvPU1hdGgubWF4KHRoaXMuX2dldFoocyksdGhpcy5fbWluaW11bVopfWE8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoodCxvKSx0aGlzLl9vdmVybGF5cy5zcGxpY2UobiwwLHQpLHRoaXMudHJhY2tCYWNrZHJvcCgpfXJlbW92ZU92ZXJsYXkodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtyIT09LTEmJih0aGlzLl9vdmVybGF5cy5zcGxpY2UociwxKSx0aGlzLnRyYWNrQmFja2Ryb3AoKSl9Y3VycmVudE92ZXJsYXkoKXt2YXIgdD10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19Y3VycmVudE92ZXJsYXlaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5jdXJyZW50T3ZlcmxheSgpKX1lbnN1cmVNaW5pbXVtWih0KXt0aGlzLl9taW5pbXVtWj1NYXRoLm1heCh0aGlzLl9taW5pbXVtWix0KX1mb2N1c092ZXJsYXkoKXt2YXIgdD10aGlzLmN1cnJlbnRPdmVybGF5KCk7dCYmdC5fYXBwbHlGb2N1cygpfXRyYWNrQmFja2Ryb3AoKXt2YXIgdD10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7IXQmJiF0aGlzLl9iYWNrZHJvcEVsZW1lbnR8fCh0aGlzLmJhY2tkcm9wRWxlbWVudC5zdHlsZS56SW5kZXg9dGhpcy5fZ2V0Wih0KS0xLHRoaXMuYmFja2Ryb3BFbGVtZW50Lm9wZW5lZD0hIXQsdGhpcy5iYWNrZHJvcEVsZW1lbnQucHJlcGFyZSgpKX1nZXRCYWNrZHJvcHMoKXtmb3IodmFyIHQ9W10scj0wO3I8dGhpcy5fb3ZlcmxheXMubGVuZ3RoO3IrKyl0aGlzLl9vdmVybGF5c1tyXS53aXRoQmFja2Ryb3AmJnQucHVzaCh0aGlzLl9vdmVybGF5c1tyXSk7cmV0dXJuIHR9YmFja2Ryb3BaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0xfV9vdmVybGF5V2l0aEJhY2tkcm9wKCl7Zm9yKHZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMuX292ZXJsYXlzW3RdLndpdGhCYWNrZHJvcClyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19X2dldFoodCl7dmFyIHI9dGhpcy5fbWluaW11bVo7aWYodCl7dmFyIG49TnVtYmVyKHQuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS56SW5kZXgpO249PT1uJiYocj1uKX1yZXR1cm4gcn1fc2V0Wih0LHIpe3Quc3R5bGUuekluZGV4PXJ9X2FwcGx5T3ZlcmxheVoodCxyKXt0aGlzLl9zZXRaKHQscisyKX1fb3ZlcmxheUluUGF0aCh0KXt0PXR8fFtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uX21hbmFnZXI9PT10aGlzKXJldHVybiB0W3JdfV9vbkNhcHR1cmVDbGljayh0KXt2YXIgcj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtpZihyIT09LTEpZm9yKHZhciBuPXp0KHQpLnBhdGgsaTsoaT10aGlzLl9vdmVybGF5c1tyXSkmJnRoaXMuX292ZXJsYXlJblBhdGgobikhPT1pJiYoaS5fb25DYXB0dXJlQ2xpY2sodCksaS5hbGxvd0NsaWNrVGhyb3VnaCk7KXItLX1fb25DYXB0dXJlRm9jdXModCl7dmFyIHI9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3ImJnIuX29uQ2FwdHVyZUZvY3VzKHQpfV9vbkNhcHR1cmVLZXlEb3duKHQpe3ZhciByPXRoaXMuY3VycmVudE92ZXJsYXkoKTtyJiYoT28ua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsImVzYyIpP3IuX29uQ2FwdHVyZUVzYyh0KTpPby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidGFiIikmJnIuX29uQ2FwdHVyZVRhYih0KSl9X3Nob3VsZEJlQmVoaW5kT3ZlcmxheSh0LHIpe3JldHVybiF0LmFsd2F5c09uVG9wJiZyLmFsd2F5c09uVG9wfX0sYjB0PW5ldyBtVzt2YXIgRTk9e3BhZ2VYOjAscGFnZVk6MH0sdzB0PW51bGwsZ1c9W10sVDk9WyJ3aGVlbCIsIm1vdXNld2hlZWwiLCJET01Nb3VzZVNjcm9sbCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiXSxNOSxfVztmdW5jdGlvbiBTMHQoZSl7Q2guaW5kZXhPZihlKT49MHx8KENoLmxlbmd0aD09PTAmJkRiZSgpLENoLnB1c2goZSksX1c9Q2hbQ2gubGVuZ3RoLTFdLEUwdD1bXSxUMHQ9W10pfWZ1bmN0aW9uIE0wdChlKXt2YXIgdD1DaC5pbmRleE9mKGUpO3QhPT0tMSYmKENoLnNwbGljZSh0LDEpLF9XPUNoW0NoLmxlbmd0aC0xXSxFMHQ9W10sVDB0PVtdLENoLmxlbmd0aD09PTAmJk9iZSgpKX12YXIgQ2g9W10sRTB0PW51bGwsVDB0PW51bGw7ZnVuY3Rpb24gTmJlKGUpe2lmKGUuY2FuY2VsYWJsZSYmemJlKGUpJiZlLnByZXZlbnREZWZhdWx0KCksZS50YXJnZXRUb3VjaGVzKXt2YXIgdD1lLnRhcmdldFRvdWNoZXNbMF07RTkucGFnZVg9dC5wYWdlWCxFOS5wYWdlWT10LnBhZ2VZfX1mdW5jdGlvbiBEYmUoKXtNOT1NOXx8TmJlLmJpbmQodm9pZCAwKTtmb3IodmFyIGU9MCx0PVQ5Lmxlbmd0aDtlPHQ7ZSsrKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVDlbZV0sTTkse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfWZ1bmN0aW9uIE9iZSgpe2Zvcih2YXIgZT0wLHQ9VDkubGVuZ3RoO2U8dDtlKyspZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUOVtlXSxNOSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9ZnVuY3Rpb24gemJlKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7aWYoZS50eXBlIT09InRvdWNobW92ZSImJncwdCE9PXQmJih3MHQ9dCxnVz1GYmUoenQoZSkucGF0aCkpLCFnVy5sZW5ndGgpcmV0dXJuITA7aWYoZS50eXBlPT09InRvdWNoc3RhcnQiKXJldHVybiExO3ZhciByPUhiZShlKTtyZXR1cm4hQmJlKGdXLHIuZGVsdGFYLHIuZGVsdGFZKX1mdW5jdGlvbiBGYmUoZSl7Zm9yKHZhciB0PVtdLHI9ZS5pbmRleE9mKF9XKSxuPTA7bjw9cjtuKyspaWYoZVtuXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgaT1lW25dLG89aS5zdHlsZTtvLm92ZXJmbG93IT09InNjcm9sbCImJm8ub3ZlcmZsb3chPT0iYXV0byImJihvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpKSwoby5vdmVyZmxvdz09PSJzY3JvbGwifHxvLm92ZXJmbG93PT09ImF1dG8iKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIEJiZShlLHQscil7aWYoISghdCYmIXIpKWZvcih2YXIgbj1NYXRoLmFicyhyKT49TWF0aC5hYnModCksaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLGE9ITE7aWYobj9hPXI8MD9vLnNjcm9sbFRvcD4wOm8uc2Nyb2xsVG9wPG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0OmE9dDwwP28uc2Nyb2xsTGVmdD4wOm8uc2Nyb2xsTGVmdDxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgsYSlyZXR1cm4gb319ZnVuY3Rpb24gSGJlKGUpe3ZhciB0PXtkZWx0YVg6ZS5kZWx0YVgsZGVsdGFZOmUuZGVsdGFZfTtpZighKCJkZWx0YVgiaW4gZSkpe2lmKCJ3aGVlbERlbHRhWCJpbiBlJiYid2hlZWxEZWx0YVkiaW4gZSl0LmRlbHRhWD0tZS53aGVlbERlbHRhWCx0LmRlbHRhWT0tZS53aGVlbERlbHRhWTtlbHNlIGlmKCJ3aGVlbERlbHRhImluIGUpdC5kZWx0YVg9MCx0LmRlbHRhWT0tZS53aGVlbERlbHRhO2Vsc2UgaWYoImF4aXMiaW4gZSl0LmRlbHRhWD1lLmF4aXM9PT0xP2UuZGV0YWlsOjAsdC5kZWx0YVk9ZS5heGlzPT09Mj9lLmRldGFpbDowO2Vsc2UgaWYoZS50YXJnZXRUb3VjaGVzKXt2YXIgcj1lLnRhcmdldFRvdWNoZXNbMF07dC5kZWx0YVg9RTkucGFnZVgtci5wYWdlWCx0LmRlbHRhWT1FOS5wYWdlWS1yLnBhZ2VZfX1yZXR1cm4gdH12YXIgUG09e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LHNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpiMHR9LF9mb2N1c2VkQ2hpbGQ6e3R5cGU6T2JqZWN0fX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sb2JzZXJ2ZXJzOlsiX191cGRhdGVTY3JvbGxPYnNlcnZlcnMoaXNBdHRhY2hlZCwgb3BlbmVkLCBzY3JvbGxBY3Rpb24pIl0sZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9tYW5hZ2VyLmJhY2tkcm9wRWxlbWVudH0sZ2V0IF9mb2N1c05vZGUoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZENoaWxkfHx6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKCJbYXV0b2ZvY3VzXSIpfHx0aGlzfSxnZXQgX2ZvY3VzYWJsZU5vZGVzKCl7cmV0dXJuIHgwdC5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITEsdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbCx0aGlzLl9fcmFmcz17fSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX19zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbExlZnQ9bnVsbCx0aGlzLl9fb25DYXB0dXJlU2Nyb2xsPXRoaXMuX19vbkNhcHR1cmVTY3JvbGwuYmluZCh0aGlzKSx0aGlzLl9fcm9vdE5vZGVzPW51bGwsdGhpcy5fZW5zdXJlU2V0dXAoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCksdGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX29uTm9kZXNDaGFuZ2UpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbDtmb3IodmFyIGUgaW4gdGhpcy5fX3JhZnMpdGhpcy5fX3JhZnNbZV0hPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fcmFmc1tlXSk7dGhpcy5fX3JhZnM9e30sdGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX19pc0FuaW1hdGluZyYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOih0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sb3BlbjpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITF9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jYW5jZWxlZCIsZSx7Y2FuY2VsYWJsZTohMH0pO3QuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX3NldENhbmNlbGVkKCEwKSx0aGlzLm9wZW5lZD0hMSl9LGludmFsaWRhdGVUYWJiYWJsZXM6ZnVuY3Rpb24oKXt0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsfSxfZW5zdXJlU2V0dXA6ZnVuY3Rpb24oKXt0aGlzLl9vdmVybGF5U2V0dXB8fCh0aGlzLl9vdmVybGF5U2V0dXA9ITAsdGhpcy5zdHlsZS5vdXRsaW5lPSJub25lIix0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5pc0F0dGFjaGVkJiYodGhpcy5fX2lzQW5pbWF0aW5nPSEwLHRoaXMuX19kZXJhZigiX19vcGVuZWRDaGFuZ2VkIix0aGlzLl9fb3BlbmVkQ2hhbmdlZCkpfSxfY2FuY2VsZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNhbmNlbGVkPXRoaXMuY2FuY2VsZWR9LF93aXRoQmFja2Ryb3BDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy53aXRoQmFja2Ryb3AmJiF0aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT8odGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITApOnRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleCYmKHRoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSksdGhpcy5vcGVuZWQmJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbWFuYWdlci50cmFja0JhY2tkcm9wKCl9LF9wcmVwYXJlUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudCx0aGlzLl9wcmVwYXJlUG9zaXRpb25pbmcoKSx0aGlzLnJlZml0KCksdGhpcy5fZmluaXNoUG9zaXRpb25pbmcoKSx0aGlzLm5vQXV0b0ZvY3VzJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZm9jdXNOb2RlJiYodGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF9maW5pc2hSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1vcGVuZWQiKX0sX2ZpbmlzaFJlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdHlsZS56SW5kZXg9IiIsdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2xvc2VkIix0aGlzLmNsb3NpbmdSZWFzb24pfSxfcHJlcGFyZVBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0ibm9uZSIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0iIn0sX2ZpbmlzaFBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSIiLHRoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuc3R5bGUuZGlzcGxheT0iIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcH0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLm9wZW5lZCl0aGlzLm5vQXV0b0ZvY3VzfHx0aGlzLl9mb2N1c05vZGUuZm9jdXMoKTtlbHNle2lmKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUpe3ZhciBlPXRoaXMuX21hbmFnZXIuZGVlcEFjdGl2ZUVsZW1lbnQ7KGU9PT1kb2N1bWVudC5ib2R5fHxVYmUodGhpcyxlKSkmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCl9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX2ZvY3VzZWRDaGlsZD1udWxsfX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbk91dHNpZGVDbGlja3x8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVGb2N1czpmdW5jdGlvbihlKXtpZighIXRoaXMud2l0aEJhY2tkcm9wKXt2YXIgdD16dChlKS5wYXRoO3QuaW5kZXhPZih0aGlzKT09PS0xPyhlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2FwcGx5Rm9jdXMoKSk6dGhpcy5fZm9jdXNlZENoaWxkPXRbMF19fSxfb25DYXB0dXJlRXNjOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbkVzY0tleXx8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVUYWI6ZnVuY3Rpb24oZSl7aWYoISF0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgdD1lLnNoaWZ0S2V5LHI9dD90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSxuPXQ/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGUsaT0hMTtpZihyPT09bilpPSEwO2Vsc2V7dmFyIG89dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtpPW89PT1yfHxvPT09dGhpc31pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1uLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5pbnZhbGlkYXRlVGFiYmFibGVzKCksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9ZVswXSx0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9ZVtlLmxlbmd0aC0xXX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fcmFmcztyW2VdIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUocltlXSkscltlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyW2VdPW51bGwsdC5jYWxsKHRoaXMpfS5iaW5kKHRoaXMpKX0sX191cGRhdGVTY3JvbGxPYnNlcnZlcnM6ZnVuY3Rpb24oZSx0LHIpeyFlfHwhdHx8IXRoaXMuX19pc1ZhbGlkU2Nyb2xsQWN0aW9uKHIpPyhNMHQodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKToocj09PSJsb2NrIiYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSxTMHQodGhpcykpLHRoaXMuX19hZGRTY3JvbGxMaXN0ZW5lcnMoKSl9LF9fYWRkU2Nyb2xsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19yb290Tm9kZXMpe2lmKHRoaXMuX19yb290Tm9kZXM9W10sY18pZm9yKHZhciBlPXRoaXM7ZTspZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmZS5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2goZSksZT1lLmhvc3R8fGUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKSx0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fcm9vdE5vZGVzPW51bGwpfSxfX2lzVmFsaWRTY3JvbGxBY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0ibG9jayJ8fGU9PT0icmVmaXQifHxlPT09ImNhbmNlbCJ9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9faXNBbmltYXRpbmcmJiEoenQoZSkucGF0aC5pbmRleE9mKHRoaXMpPj0wKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UicmVmaXQiOnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpO2JyZWFrO2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbChlKTticmVha319LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fSxWYmU9ZT0+ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8ZS5ob3N0LFViZT0oZSx0KT0+e2ZvcihsZXQgcj10O3I7cj1WYmUocikpaWYocj09PWUpcmV0dXJuITA7cmV0dXJuITF9LEt4PVt2MHQsSnMsUG1dO3ZhciB5Vz17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImRpYWxvZyIsdGFiaW5kZXg6Ii0xIn0scHJvcGVydGllczp7bW9kYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX19yZWFkaWVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfbW9kYWxDaGFuZ2VkKG1vZGFsLCBfX3JlYWRpZWQpIl0sbGlzdGVuZXJzOnt0YXA6Il9vbkRpYWxvZ0NsaWNrIn0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy5fX3JlYWRpZWQ9ITB9LF9tb2RhbENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5ub0NhbmNlbE9uRXNjS2V5PSEwLHRoaXMud2l0aEJhY2tkcm9wPSEwKToodGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMubm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXkmJnRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleSx0aGlzLndpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCYmdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3ApKX0sX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNvbmZpcm1lZD1lfSxfb25EaWFsb2dDbGljazpmdW5jdGlvbihlKXtmb3IodmFyIHQ9enQoZSkucGF0aCxyPTAsbj10LmluZGV4T2YodGhpcyk7cjxuO3IrKyl7dmFyIGk9dFtyXTtpZihpLmhhc0F0dHJpYnV0ZSYmKGkuaGFzQXR0cmlidXRlKCJkaWFsb2ctZGlzbWlzcyIpfHxpLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSkpe3RoaXMuX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQoaS5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpLHRoaXMuY2xvc2UoKSxlLnN0b3BQcm9wYWdhdGlvbigpO2JyZWFrfX19fSxDMHQ9W0t4LHlXXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWRpYWxvZyIsYmVoYXZpb3JzOltDMHQsYjldLGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImVudHJ5Iil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZXhpdCIpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlzLXNjcm9sbGVkOm5vdCg6Zmlyc3QtY2hpbGQpKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYW4tc2Nyb2xsOm5vdCguc2Nyb2xsZWQtdG8tYm90dG9tKTpub3QoOmxhc3QtY2hpbGQpKTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLnNjcm9sbGFibGUgewogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXNjcm9sbDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzY3JvbGxhYmxlIiBjbGFzcz0ic2Nyb2xsYWJsZSIgb24tc2Nyb2xsPSJ1cGRhdGVTY3JvbGxTdGF0ZSI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHRoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A+MCksdGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCksdGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3ArdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0Pj10aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpfSxfZW5zdXJlVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5kaWFsb2dFbGVtZW50PXRoaXMuZGlhbG9nRWxlbWVudHx8dGhpcy5wYXJlbnRFbGVtZW50LHRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycyYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycy5pbmRleE9mKHlXKT49MD8odGhpcy5kaWFsb2dFbGVtZW50LnNpemluZ1RhcmdldD10aGlzLnNjcm9sbFRhcmdldCx0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJmaXQiKSk6dGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJmaXQiKX19KTt2YXIgZWM9WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KYCxpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LHRpbWVvdXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MH0sX3RleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sY3JlYXRlZDpmdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9dGhpcyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1hbm5vdW5jZSIsdGhpcy5fb25Jcm9uQW5ub3VuY2UuYmluZCh0aGlzKSl9LGFubm91bmNlOmZ1bmN0aW9uKGUpe3RoaXMuX3RleHQ9IiIsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX3RleHQ9ZX0sdGhpcy50aW1lb3V0KX0sX29uSXJvbkFubm91bmNlOmZ1bmN0aW9uKGUpe2UuZGV0YWlsJiZlLmRldGFpbC50ZXh0JiZ0aGlzLmFubm91bmNlKGUuZGV0YWlsLnRleHQpfX0pO2VjLmluc3RhbmNlPW51bGw7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1hMTF5LWFubm91bmNlciIpKSxkb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWMuaW5zdGFuY2UpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlYy5pbnN0YW5jZSl9KX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3QgaWQ9ImNvbnRlbnQiPjwvc2xvdD4KYCxpczoiaXJvbi1pbnB1dCIsYmVoYXZpb3JzOltUaF0scHJvcGVydGllczp7YmluZFZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVZhbHVlKGJpbmRWYWx1ZSkifSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaW5wdXRFbGVtZW50Ok9iamVjdH0sb2JzZXJ2ZXJzOlsiX2JpbmRWYWx1ZUNoYW5nZWQoYmluZFZhbHVlLCBfaW5wdXRFbGVtZW50KSJdLGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0IixrZXlwcmVzczoiX29uS2V5cHJlc3MifSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eSgpLHRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0iIix0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKGUpe3RoaXMuX2luaXRTbG90dGVkSW5wdXQoKX0uYmluZCh0aGlzKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJih6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbCl9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50fSxfaW5pdFNsb3R0ZWRJbnB1dDpmdW5jdGlvbigpe3RoaXMuX2lucHV0RWxlbWVudD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKClbMF0sdGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiYodGhpcy5iaW5kVmFsdWU9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpLHRoaXMuZmlyZSgiaXJvbi1pbnB1dC1yZWFkeSIpfSxnZXQgX3BhdHRlcm5SZWdFeHAoKXt2YXIgZTtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuKWU9bmV3IFJlZ0V4cCh0aGlzLmFsbG93ZWRQYXR0ZXJuKTtlbHNlIHN3aXRjaCh0aGlzLmlucHV0RWxlbWVudC50eXBlKXtjYXNlIm51bWJlciI6ZT0vWzAtOS4sZS1dLzticmVha31yZXR1cm4gZX0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU9PT12b2lkIDA/dC52YWx1ZT1udWxsOmUhPT10LnZhbHVlJiYodGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9ZSksdGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOmV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKCl7aWYodGhpcy5hbGxvd2VkUGF0dGVybiYmIXRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZCl7dmFyIGU9dGhpcy5fY2hlY2tQYXR0ZXJuVmFsaWRpdHkoKTtlfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCl9dGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sX2lzUHJpbnRhYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Q29kZT09OHx8ZS5rZXlDb2RlPT05fHxlLmtleUNvZGU9PTEzfHxlLmtleUNvZGU9PTI3LHI9ZS5rZXlDb2RlPT0xOXx8ZS5rZXlDb2RlPT0yMHx8ZS5rZXlDb2RlPT00NXx8ZS5rZXlDb2RlPT00Nnx8ZS5rZXlDb2RlPT0xNDR8fGUua2V5Q29kZT09MTQ1fHxlLmtleUNvZGU+MzImJmUua2V5Q29kZTw0MXx8ZS5rZXlDb2RlPjExMSYmZS5rZXlDb2RlPDEyNDtyZXR1cm4hdCYmIShlLmNoYXJDb2RlPT0wJiZyKX0sX29uS2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYoISghdGhpcy5hbGxvd2VkUGF0dGVybiYmdGhpcy5pbnB1dEVsZW1lbnQudHlwZSE9PSJudW1iZXIiKSl7dmFyIHQ9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighIXQmJiEoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5KSl7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSEwO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7dGhpcy5faXNQcmludGFibGUoZSkmJiF0LnRlc3QocikmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIGNoYXJhY3RlciAiK3IrIiBub3QgZW50ZXJlZC4iKSl9fX0sX2NoZWNrUGF0dGVyblZhbGlkaXR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighZSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDt0KyspaWYoIWUudGVzdCh0aGlzLmlucHV0RWxlbWVudC52YWx1ZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5wdXRFbGVtZW50KXJldHVybiB0aGlzLmludmFsaWQ9ITEsITA7dmFyIGU9dGhpcy5pbnB1dEVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO3JldHVybiBlJiYodGhpcy5yZXF1aXJlZCYmdGhpcy5iaW5kVmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLmJpbmRWYWx1ZSkpKSx0aGlzLmludmFsaWQ9IWUsdGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIiksZX0sX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcjpmdW5jdGlvbihlKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OmV9KX0sX2NvbXB1dGVWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19KTt2YXIgQzk9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7fX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNoYXItY291bnRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuPltbX2NoYXJDb3VudGVyU3RyXV08L3NwYW4+CmAsaXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltDOV0scHJvcGVydGllczp7X2NoYXJDb3VudGVyU3RyOnt0eXBlOlN0cmluZyx2YWx1ZToiMCJ9fSx1cGRhdGU6ZnVuY3Rpb24oZSl7aWYoISFlLmlucHV0RWxlbWVudCl7ZS52YWx1ZT1lLnZhbHVlfHwiIjt2YXIgdD1lLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7ZS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKHQrPSIvIitlLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKSx0aGlzLl9jaGFyQ291bnRlclN0cj10fX19KTt2YXIgQTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogdG8gbWFrZSBhIHN0YWNraW5nIGNvbnRleHQgKi8KICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWFsaWduLCBib3R0b20pOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7QTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoQTB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTpiZWZvcmUsCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpOmJlZm9yZSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWJlZm9yZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTphZnRlciwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1hZnRlcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzUlKSBzY2FsZSgwLjc1KTsKCiAgICAgICAgLyogU2luY2Ugd2Ugc2NhbGUgdG8gNzUvMTAwIG9mIHRoZSBzaXplLCB3ZSBhY3R1YWxseSBoYXZlIDEwMC83NSBvZiB0aGUKICAgICAgICBvcmlnaW5hbCBzcGFjZSBub3cgYXZhaWxhYmxlICovCiAgICAgICAgd2lkdGg6IDEzMyU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1mbG9hdGluZzsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWhpZGRlbiA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgLyogVGhlIGFwcGx5IHNoaW0gZG9lc24ndCBhcHBseSB0aGUgbmVzdGVkIGNvbG9yIGN1c3RvbSBwcm9wZXJ0eSwKICAgICAgICAgIHNvIHdlIGhhdmUgdG8gcmUtYXBwbHkgaXQgaGVyZS4gKi8KICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQodGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtaW52YWxpZDsKICAgICAgfQoKICAgICAgLnByZWZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1wcmVmaXg7CiAgICAgIH0KCiAgICAgIC5zdWZmaXggOjpzbG90dGVkKCopIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LW5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXN1ZmZpeDsKICAgICAgfQoKICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KSB7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQodGV4dGFyZWEpIHsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoKikgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50LmlzLWhpZ2hsaWdodGVkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBoaWRkZW49Iltbbm9MYWJlbEZsb2F0XV0iPiZuYnNwOzwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij48c2xvdCBuYW1lPSJwcmVmaXgiPjwvc2xvdD48L3NwYW4+CgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUlucHV0Q29udGVudENsYXNzKG5vTGFiZWxGbG9hdCxhbHdheXNGbG9hdExhYmVsLGZvY3VzZWQsaW52YWxpZCxfaW5wdXRIYXNDb250ZW50KV1dIiBpZD0ibGFiZWxBbmRJbnB1dENvbnRhaW5lciI+CiAgICAgICAgPHNsb3QgbmFtZT0ibGFiZWwiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJpbnB1dCI+PC9zbG90PgogICAgICA8L2Rpdj4KCiAgICAgIDxzcGFuIGNsYXNzPSJzdWZmaXgiPjxzbG90IG5hbWU9InN1ZmZpeCI+PC9zbG90Pjwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlVW5kZXJsaW5lQ2xhc3MoZm9jdXNlZCxpbnZhbGlkKV1dIj4KICAgICAgPGRpdiBjbGFzcz0idW5mb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8c2xvdCBuYW1lPSJhZGQtb24iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LF9ib3VuZE9uQmx1cjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKX19LF9ib3VuZE9uSW5wdXQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpfX0sX2JvdW5kVmFsdWVDaGFuZ2VkOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyl9fX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIiwiaXJvbi1pbnB1dC12YWxpZGF0ZSI6Il9vbklyb25JbnB1dFZhbGlkYXRlIn0sZ2V0IF92YWx1ZUNoYW5nZWRFdmVudCgpe3JldHVybiB0aGlzLmF0dHJGb3JWYWx1ZSsiLWNoYW5nZWQifSxnZXQgX3Byb3BlcnR5Rm9yVmFsdWUoKXtyZXR1cm4gd20odGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSxnZXQgX2lucHV0RWxlbWVudFZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFt0aGlzLl9wcm9wZXJ0eUZvclZhbHVlXXx8dGhpcy5faW5wdXRFbGVtZW50LnZhbHVlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITAsdGhpcy5fYWRkb25zfHwodGhpcy5fYWRkb25zPVtdKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZE9uRm9jdXMsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRPbkJsdXIsITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXR0ckZvclZhbHVlP3RoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3ZhbHVlQ2hhbmdlZEV2ZW50LHRoaXMuX2JvdW5kVmFsdWVDaGFuZ2VkKTp0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iix0aGlzLl9vbklucHV0KSx0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSYmdGhpcy5faW5wdXRFbGVtZW50VmFsdWUhPSIiP3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3ZhciB0PWUudGFyZ2V0O3RoaXMuX2FkZG9ucy5pbmRleE9mKHQpPT09LTEmJih0aGlzLl9hZGRvbnMucHVzaCh0KSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2hhbmRsZVZhbHVlKHRoaXMuX2lucHV0RWxlbWVudCkpfSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITApfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdC52YWx1ZT09PXZvaWQgMHx8dC52YWx1ZT09PSIiKXx8dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7dHx8dD09PTB8fGUudHlwZT09PSJudW1iZXIiJiYhZS5jaGVja1ZhbGlkaXR5KCk/dGhpcy5faW5wdXRIYXNDb250ZW50PSEwOnRoaXMuX2lucHV0SGFzQ29udGVudD0hMSx0aGlzLnVwZGF0ZUFkZG9ucyh7aW5wdXRFbGVtZW50OmUsdmFsdWU6dCxpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSxfaGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdXRvVmFsaWRhdGUmJmUpe3ZhciB0O2UudmFsaWRhdGU/dD1lLnZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudFZhbHVlKTp0PWUuY2hlY2tWYWxpZGl0eSgpLHRoaXMuaW52YWxpZD0hdH10aGlzLl9oYW5kbGVWYWx1ZShlKX0sX29uSXJvbklucHV0VmFsaWRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MDt0PXRoaXMuX2FkZG9uc1tyXTtyKyspdC51cGRhdGUoZSl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz0iaW5wdXQtY29udGVudCI7aWYoZSlpJiYobys9IiBsYWJlbC1pcy1oaWRkZW4iKSxuJiYobys9IiBpcy1pbnZhbGlkIik7ZWxzZXt2YXIgYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7dHx8aT8obys9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsbj9vKz0iIGlzLWludmFsaWQiOnImJihvKz0iIGxhYmVsLWlzLWhpZ2hsaWdodGVkIikpOihhJiYodGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksbiYmKG8rPSIgaXMtaW52YWxpZCIpKX1yZXR1cm4gciYmKG8rPSIgZm9jdXNlZCIpLG99LF9jb21wdXRlVW5kZXJsaW5lQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZXJsaW5lIjtyZXR1cm4gdD9yKz0iIGlzLWludmFsaWQiOmUmJihyKz0iIGlzLWhpZ2hsaWdodGVkIikscn0sX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSJhZGQtb24tY29udGVudCI7cmV0dXJuIHQ/cis9IiBpcy1pbnZhbGlkIjplJiYocis9IiBpcy1oaWdobGlnaHRlZCIpLHJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtZXJyb3I7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6MDsKICAgICAgICByaWdodDowOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPCEtLQogICAgSWYgdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbgogICAgXGBhcmlhLWRlc2NyaWJlZGJ5XGAgYXR0cmlidXRlLCBzdWNoIGFzIHdoZW4gdXNlZCBhcyBhIHBhcGVyLWlucHV0IGFkZC1vbiwKICAgIHRoZW4gYXBwbHlpbmcgXGB2aXNpYmlsaXR5OiBoaWRkZW47XGAgdG8gdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXRzZWxmCiAgICBkb2VzIG5vdCBoaWRlIHRoZSBlcnJvci4KCiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgogICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2FjY25hbWUtMS4xLyNtYXBwaW5nX2FkZGl0aW9uYWxfbmRfZGVzY3JpcHRpb24KICAgIC0tPgogICAgPGRpdiBpZD0iYTExeVdyYXBwZXIiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbQzldLHByb3BlcnRpZXM6e2ludmFsaWQ6e3JlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW59fSx1cGRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0SW52YWxpZChlLmludmFsaWQpfX0pO3ZhciBaeD17fTtaeC5OZXh0TGFiZWxJRD0xO1p4Lk5leHRBZGRvbklEPTE7WnguTmV4dElucHV0SUQ9MTt2YXIgcWJlPXtwcm9wZXJ0aWVzOntsYWJlbDp7dHlwZTpTdHJpbmd9LHZhbHVlOntub3RpZnk6ITAsdHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGludmFsaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sdHlwZTp7dHlwZTpTdHJpbmd9LGxpc3Q6e3R5cGU6U3RyaW5nfSxwYXR0ZXJuOnt0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sY2hhckNvdW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfYXV0b2ZvY3VzQ2hhbmdlZCJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LG1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1pbjp7dHlwZTpTdHJpbmd9LG1heDp7dHlwZTpTdHJpbmd9LHN0ZXA6e3R5cGU6U3RyaW5nfSxuYW1lOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxyZWFkb25seTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzaXplOnt0eXBlOk51bWJlcn0sYXV0b2NhcGl0YWxpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiJub25lIn0sYXV0b2NvcnJlY3Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmYifSxhdXRvc2F2ZTp7dHlwZTpTdHJpbmd9LHJlc3VsdHM6e3R5cGU6TnVtYmVyfSxhY2NlcHQ6e3R5cGU6U3RyaW5nfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFufSxfYXJpYURlc2NyaWJlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuJHx8KHRoaXMuJD17fSksdGhpcy4kLmlucHV0fHwodGhpcy5fZ2VuZXJhdGVJbnB1dElkKCksdGhpcy4kLmlucHV0PXRoaXMuJCQoIiMiK3RoaXMuX2lucHV0SWQpKSx0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIiwiZmlsZSJdfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCksIW10JiZ0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLmlucHV0RWxlbWVudC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKX0sX2FwcGVuZFN0cmluZ1dpdGhTcGFjZTpmdW5jdGlvbihlLHQpe3JldHVybiBlP2U9ZSsiICIrdDplPXQsZX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt2YXIgdD16dChlKS5yb290VGFyZ2V0O2lmKHQuaWQpdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnksdC5pZCk7ZWxzZXt2YXIgcj0icGFwZXItaW5wdXQtYWRkLW9uLSIrWnguTmV4dEFkZG9uSUQrKzt0LmlkPXIsdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnkscil9fSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC52YWxpZGF0ZSgpfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXtEaS5fZm9jdXNCbHVySGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5mb2N1c2VkJiYhdGhpcy5fc2hpZnRUYWJQcmVzc2VkJiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50JiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITAsdGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0KSx0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD10aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydDt0aGlzLnZhbHVlPWUsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ9dCx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQ9dH1jYXRjaChyKXt0aGlzLnZhbHVlPWV9fSxfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZX0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2lmKCFlKXt0aGlzLl9hcmlhTGFiZWxsZWRCeT0iIjtyZXR1cm59dmFyIHQ7ZS5pZD90PWUuaWQ6KHQ9InBhcGVyLWlucHV0LWxhYmVsLSIrWnguTmV4dExhYmVsSUQrKyxlLmlkPXQpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXR9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXsoIXRoaXMuX2lucHV0SWR8fHRoaXMuX2lucHV0SWQ9PT0iIikmJih0aGlzLl9pbnB1dElkPSJpbnB1dC0iK1p4Lk5leHRJbnB1dElEKyspfSxfb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5zaGFkb3dSb290JiZ0aGlzLmZpcmUoZS50eXBlLHtzb3VyY2VFdmVudDplfSx7bm9kZTp0aGlzLGJ1YmJsZXM6ZS5idWJibGVzLGNhbmNlbGFibGU6ZS5jYW5jZWxhYmxlfSl9LF9hdXRvZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvZm9jdXMmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdD1lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQscj10JiZlIT09ZG9jdW1lbnQuYm9keSYmZSE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyfHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX0sQTk9W0RpLE9vLHFiZV07WXQoe2lzOiJwYXBlci1pbnB1dCIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2ZvY3VzZWRdKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGUgPGlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcyBpdC4KICAgICAgSW4gMi54IHRoZSA8aXJvbi1pbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMKICAgICAgaXQsIGJ1dCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgd2UgbmVlZCB0byByZXNldCBzb21lCiAgICAgIG9mIHRoZSBuYXRpdmUgaW5wdXQncyBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgKGZyb20gdGhlIGlyb24taW5wdXQpICovCiAgICAgIGlyb24taW5wdXQgPiBpbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgd29yZC1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LXNwaW5uZXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtY2xlYXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1yZXZlYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1yZXZlYWw7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgaWQ9ImNvbnRhaW5lciIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8c2xvdCBuYW1lPSJwcmVmaXgiIHNsb3Q9InByZWZpeCI+PC9zbG90PgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPCEtLSBOZWVkIHRvIGJpbmQgbWF4bGVuZ3RoIHNvIHRoYXQgdGhlIHBhcGVyLWlucHV0LWNoYXItY291bnRlciB3b3JrcyBjb3JyZWN0bHkgLS0+CiAgICAgIDxpcm9uLWlucHV0IGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgc2xvdD0iaW5wdXQiIGNsYXNzPSJpbnB1dC1lbGVtZW50IiBpZCQ9IltbX2lucHV0SWRdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3I9IltbdmFsaWRhdG9yXV0iPgogICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIiByb2xlJD0iW1tpbnB1dFJvbGVdXSIgYXJpYS1oYXNwb3B1cCQ9IltbaW5wdXRBcmlhSGFzcG9wdXBdXSI+CiAgICAgIDwvaXJvbi1pbnB1dD4KCiAgICAgIDxzbG90IG5hbWU9InN1ZmZpeCIgc2xvdD0ic3VmZml4Ij48L3Nsb3Q+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CiAgYCxiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpTdHJpbmd9LGlucHV0Um9sZTp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfSxpbnB1dEFyaWFIYXNwb3B1cDp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50Ll9pbnB1dEVsZW1lbnR9LGxpc3RlbmVyczp7Imlyb24taW5wdXQtcmVhZHkiOiJfb25Jcm9uSW5wdXRSZWFkeSJ9LF9vbklyb25JbnB1dFJlYWR5OmZ1bmN0aW9uKCl7dGhpcy4kLm5hdGl2ZUlucHV0fHwodGhpcy4kLm5hdGl2ZUlucHV0PXRoaXMuJCQoImlucHV0IikpLHRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKSx0aGlzLmlucHV0RWxlbWVudC5iaW5kVmFsdWUmJnRoaXMuJC5jb250YWluZXIuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuaW5wdXRFbGVtZW50KX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIuYW5pbWF0aW5nIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50V3JhcHBlciI+CiAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1kcm9wZG93biIsYmVoYXZpb3JzOltEaSxPbyxLeCxiOV0scHJvcGVydGllczp7aG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToibGVmdCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxjbG9zZUFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGZvY3VzVGFyZ2V0Ont0eXBlOk9iamVjdH0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbihwb3NpdGlvblRhcmdldCwgdmVydGljYWxBbGlnbiwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbE9mZnNldCwgaG9yaXpvbnRhbE9mZnNldCkiXSxnZXQgY29udGFpbmVkRWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249dGhpcy5hbGxvd091dHNpZGVTY3JvbGw/InJlZml0IjoibG9jayIpLHRoaXMuX3JlYWRpZWQ9ITB9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7KCF0aGlzLnNpemluZ1RhcmdldHx8dGhpcy5zaXppbmdUYXJnZXQ9PT10aGlzKSYmKHRoaXMuc2l6aW5nVGFyZ2V0PXRoaXMuY29udGFpbmVkRWxlbWVudHx8dGhpcyl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5kaXNhYmxlZD90aGlzLmNhbmNlbCgpOih0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMuX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZygpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLm9wZW4/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oIm9wZW4iKSk6UG0uX3JlbmRlck9wZW5lZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLmNsb3NlPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJjbG9zZSIpKTpQbS5fcmVuZGVyQ2xvc2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX29uTmVvbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRpbmciKSx0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lZEVsZW1lbnQsdD1bXS5jb25jYXQodGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnfHxbXSkuY29uY2F0KHRoaXMuY2xvc2VBbmltYXRpb25Db25maWd8fFtdKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5ub2RlPWU7dGhpcy5hbmltYXRpb25Db25maWc9e29wZW46dGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnLGNsb3NlOnRoaXMuY2xvc2VBbmltYXRpb25Db25maWd9fSxfdXBkYXRlT3ZlcmxheVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfSxfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZDpmdW5jdGlvbihlKXshdGhpcy5fcmVhZGllZHx8KGU/KCF0aGlzLnNjcm9sbEFjdGlvbnx8dGhpcy5zY3JvbGxBY3Rpb249PT0ibG9jayIpJiYodGhpcy5zY3JvbGxBY3Rpb249InJlZml0Iik6dGhpcy5zY3JvbGxBY3Rpb249ImxvY2siKX0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvY3VzVGFyZ2V0fHx0aGlzLmNvbnRhaW5lZEVsZW1lbnQ7ZSYmdGhpcy5vcGVuZWQmJiF0aGlzLm5vQXV0b0ZvY3VzP2UuZm9jdXMoKTpQbS5fYXBwbHlGb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIHlwPXtwcm9wZXJ0aWVzOnthbmltYXRpb25UaW1pbmc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOjUwMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGZpbGw6ImJvdGgifX19fSxpc05lb25BbmltYXRpb246ITAsY3JlYXRlZDpmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYW5pbWF0ZXx8Y29uc29sZS53YXJuKCJObyB3ZWIgYW5pbWF0aW9ucyBkZXRlY3RlZC4gVGhpcyBlbGVtZW50IHdpbGwgbm90IGZ1bmN0aW9uIHdpdGhvdXQgYSB3ZWIgYW5pbWF0aW9ucyBwb2x5ZmlsbC4iKX0sdGltaW5nRnJvbUNvbmZpZzpmdW5jdGlvbihlKXtpZihlLnRpbWluZylmb3IodmFyIHQgaW4gZS50aW1pbmcpdGhpcy5hbmltYXRpb25UaW1pbmdbdF09ZS50aW1pbmdbdF07cmV0dXJuIHRoaXMuYW5pbWF0aW9uVGltaW5nfSxzZXRQcmVmaXhlZFByb3BlcnR5OmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49e3RyYW5zZm9ybTpbIndlYmtpdFRyYW5zZm9ybSJdLHRyYW5zZm9ybU9yaWdpbjpbIm1velRyYW5zZm9ybU9yaWdpbiIsIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdfSxpPW5bdF0sbyxhPTA7bz1pW2FdO2ErKyllLnN0eWxlW29dPXI7ZS5zdHlsZVt0XT1yfSxjb21wbGV0ZTpmdW5jdGlvbihlKXt9fTtZdCh7aXM6ImZhZGUtaW4tYW5pbWF0aW9uIixiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJmYWRlLW91dC1hbmltYXRpb24iLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGU7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtZ3Jvdy1oZWlnaHQtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bi8yKyJweCJ9LHtoZWlnaHQ6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe3dpZHRoOm4vMisicHgifSx7d2lkdGg6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7d2lkdGg6bisicHgifSx7d2lkdGg6bi1uLzIwKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5oZWlnaHQ7cmV0dXJuIHRoaXMuc2V0UHJlZml4ZWRQcm9wZXJ0eSh0LCJ0cmFuc2Zvcm1PcmlnaW4iLCIwIDAiKSx0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9LHtoZWlnaHQ6bi8yKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMHB4KSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTt2YXIgZEU9e0FOSU1BVElPTl9DVUJJQ19CRVpJRVI6ImN1YmljLWJlemllciguMywuOTUsLjUsMSkiLE1BWF9BTklNQVRJT05fVElNRV9NUzo0MDB9LEdiZT1ZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICBpcm9uLWRyb3Bkb3duIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1kcm9wZG93bjsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWwtYWxpZ249InRvcCJdKSAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB0b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQoKICAgICAgI3RyaWdnZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0cmlnZ2VyIiBvbi10YXA9InRvZ2dsZSI+CiAgICAgIDxzbG90IG5hbWU9ImRyb3Bkb3duLXRyaWdnZXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxpcm9uLWRyb3Bkb3duIGlkPSJkcm9wZG93biIgb3BlbmVkPSJ7e29wZW5lZH19IiBob3Jpem9udGFsLWFsaWduPSJbW2hvcml6b250YWxBbGlnbl1dIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIGhvcml6b250YWwtb2Zmc2V0PSJbW2hvcml6b250YWxPZmZzZXRdXSIgdmVydGljYWwtb2Zmc2V0PSJbW3ZlcnRpY2FsT2Zmc2V0XV0iIG5vLW92ZXJsYXA9Iltbbm9PdmVybGFwXV0iIG9wZW4tYW5pbWF0aW9uLWNvbmZpZz0iW1tvcGVuQW5pbWF0aW9uQ29uZmlnXV0iIGNsb3NlLWFuaW1hdGlvbi1jb25maWc9IltbY2xvc2VBbmltYXRpb25Db25maWddXSIgbm8tYW5pbWF0aW9ucz0iW1tub0FuaW1hdGlvbnNdXSIgZm9jdXMtdGFyZ2V0PSJbW19kcm9wZG93bkNvbnRlbnRdXSIgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBvbi1pcm9uLW92ZXJsYXktY2FuY2VsZWQ9Il9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KYCxpczoicGFwZXItbWVudS1idXR0b24iLGJlaGF2aW9yczpbT28sRGldLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOmRFLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6ZEUuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19XX19LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjE1MH19LHtuYW1lOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjUwLGVhc2luZzpkRS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MjAwLGVhc2luZzoiZWFzZS1pbiJ9fV19fSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuY2xvc2VPbkFjdGl2YXRlJiZ0aGlzLmNsb3NlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7ZT8odGhpcy5fZHJvcGRvd25Db250ZW50PXRoaXMuY29udGVudEVsZW1lbnQsdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1vcGVuIikpOnQhPW51bGwmJnRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tY2xvc2UiKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihlKXtEaS5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlJiZ0aGlzLm9wZW5lZCYmdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbCxyPXRoaXMuJC50cmlnZ2VyLG49enQodCkucGF0aDtuLmluZGV4T2Yocik+LTEmJmUucHJldmVudERlZmF1bHQoKX19KTtPYmplY3Qua2V5cyhkRSkuZm9yRWFjaChmdW5jdGlvbihlKXtHYmVbZV09ZEVbZV19KTt2YXIgdlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt2Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt2Vy5pbm5lckhUTUw9YDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLWRyb3Bkb3duLW1lbnUiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFycm93LWRyb3AtZG93biI+PHBhdGggZD0iTTcgMTBsNSA1IDUtNXoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2Vy5jb250ZW50KTt2YXIgeFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt4Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt4Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLgogICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudTsKICAgICAgfQoKICAgICAgLyogcGFwZXItZHJvcGRvd24tbWVudSBhbmQgcGFwZXItZHJvcGRvd24tbWVudS1saWdodCBib3RoIGRlbGVnYXRlIGZvY3VzCiAgICAgICAqIHRvIG90aGVyIGludGVybmFsIGVsZW1lbnRzIHdoaWNoIG1hbmFnZSBmb2N1cyBzdHlsaW5nLiAqLwogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKCiAgICAgICAgQGFwcGx5KC0tcGFwZXItZHJvcGRvd24tbWVudSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHhXLmNvbnRlbnQpO3ZhciBXYmU9R3QoSFRNTEVsZW1lbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSIgZXhwYW5kLXNpemluZy10YXJnZXQtZm9yLXNjcm9sbGJhcnM9IltbZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyc11dIj4KICAgICAgPCEtLSBzdXBwb3J0IGh5YnJpZCBtb2RlOiB1c2VyIG1pZ2h0IGJlIHVzaW5nIHBhcGVyLW1lbnUtYnV0dG9uIDEueCB3aGljaCBkaXN0cmlidXRlcyB2aWEgPGNvbnRlbnQ+IC0tPgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIDwhLS0gcGFwZXItaW5wdXQgaGFzIHR5cGU9InRleHQiIGZvciBhMTF5LCBkbyBub3QgcmVtb3ZlIC0tPgogICAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9InRleHQiIGludmFsaWQ9IltbaW52YWxpZF1dIiByZWFkb25seSBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1t2YWx1ZV1dIiBwbGFjZWhvbGRlcj0iW1twbGFjZWhvbGRlcl1dIiBlcnJvci1tZXNzYWdlPSJbW2Vycm9yTWVzc2FnZV1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbYWx3YXlzRmxvYXRMYWJlbF1dIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgbGFiZWw9IltbbGFiZWxdXSIgaW5wdXQtcm9sZT0iYnV0dG9uIiBpbnB1dC1hcmlhLWhhc3BvcHVwPSJsaXN0Ym94IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItaW5wdXQgMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CmAsaXM6InBhcGVyLWRyb3Bkb3duLW1lbnUiLGJlaGF2aW9yczpbU2gsRGksRWgsVGhdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InJpZ2h0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCJ9LHZlcnRpY2FsT2Zmc2V0Ok51bWJlcixkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3RhcDoiX29uVGFwIn0sa2V5QmluZGluZ3M6eyJ1cCBkb3duIjoib3BlbiIsZXNjOiJjbG9zZSJ9LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSkiXSxfYXR0YWNoRG9tKGUpe2xldCB0PXVlKHRoaXMpO3JldHVybiB0LmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiIsZGVsZWdhdGVzRm9jdXM6ITAsc2hhZHlVcGdyYWRlRnJhZ21lbnQ6ZX0pLHQuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlKSxXYmUucHJvdG90eXBlLl9hdHRhY2hEb20uY2FsbCh0aGlzLGUpfSxmb2N1cygpe3RoaXMuJC5pbnB1dC5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGVudEVsZW1lbnQ7ZSYmZS5zZWxlY3RlZEl0ZW0mJnRoaXMuX3NldFNlbGVjdGVkSXRlbShlLnNlbGVjdGVkSXRlbSl9LGdldCBjb250ZW50RWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5tZW51QnV0dG9uLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUuZGV0YWlsLml0ZW0pfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpfSxfb25UYXA6ZnVuY3Rpb24oZSl7bGd0KGUpPT09dGhpcyYmdGhpcy5vcGVuKCl9LF9zZWxlY3RlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PSIiO2U/dD1lLmxhYmVsfHxlLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8ZS50ZXh0Q29udGVudC50cmltKCk6dD0iIix0aGlzLnZhbHVlPXQsdGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwodCl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fChlPy00OjgpfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLnJlcXVpcmVkJiYhIXRoaXMudmFsdWV9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVuZWQ/InRydWUiOiJmYWxzZSIsdD10aGlzLmNvbnRlbnRFbGVtZW50O3QmJnQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKX19KTt2YXIgYlc9MSxQMHQ9MixQOT17b3V0ZXJTY3JvbGw6e3Njcm9sbDohMH0sc2hhZG93TW9kZTp7c3RhbmRhcmQ6UDB0LHdhdGVyZmFsbDpiVywid2F0ZXJmYWxsLXRhbGwiOmJXfSx0YWxsTW9kZTp7IndhdGVyZmFsbC10YWxsIjohMH19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbDsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgICNtYWluUGFuZWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtYm9keTsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNjcm9sbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2Nyb2xsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zY3JvbGwtY29udGFpbmVyOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBjb3ZlcgogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9Y292ZXJdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvdmVyLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluUGFuZWwgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHN0YW5kYXJkCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zdGFuZGFyZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc3RhbmRhcmQtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzZWFtZWQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXNlYW1lZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2VhbWVkLWNvbnRhaW5lcjsKICAgICAgfQoKCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC13YXRlcmZhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiB3YXRlcmZhbGwtdGFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsLXRhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC10YWxsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2Ryb3BTaGFkb3cgewogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41czsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2hhZG93OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdy5oYXMtc2hhZG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciA+IDo6c2xvdHRlZCguZml0KSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQoKICAgIDwvc3R5bGU+CgogICAgPHNsb3QgaWQ9ImhlYWRlclNsb3QiIG5hbWU9ImhlYWRlciI+PC9zbG90PgoKICAgIDxkaXYgaWQ9Im1haW5QYW5lbCI+CiAgICAgIDxkaXYgaWQ9Im1haW5Db250YWluZXIiIGNsYXNzXCQ9IltbX2NvbXB1dGVNYWluQ29udGFpbmVyQ2xhc3MobW9kZSldXSI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iZHJvcFNoYWRvdyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaGVhZGVyLXBhbmVsIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhbmRhcmQiLG9ic2VydmVyOiJfbW9kZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sc2hhZG93Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHRhbGxDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6InRhbGwifSxhdFRvcDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW4oYXRUb3AsIG1vZGUsIHNoYWRvdykiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FkZExpc3RlbmVyKCksdGhpcy5fa2VlcFNjcm9sbGluZ1N0YXRlKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksY29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxnZXQgaGVhZGVyKCl7cmV0dXJuIHp0KHRoaXMuJC5oZWFkZXJTbG90KS5nZXREaXN0cmlidXRlZE5vZGVzKClbMF19LGdldCBzY3JvbGxlcigpe3JldHVybiB0aGlzLl9nZXRTY3JvbGxlckZvck1vZGUodGhpcy5tb2RlKX0sZ2V0IHZpc2libGVTaGFkb3coKXtyZXR1cm4gdGhpcy4kLmRyb3BTaGFkb3cuY2xhc3NMaXN0LmNvbnRhaW5zKCJoYXMtc2hhZG93Iil9LF9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbjpmdW5jdGlvbihlLHQscil7dmFyIG49UDkuc2hhZG93TW9kZVt0XTt0aGlzLnNoYWRvdz90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PVAwdD90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PWJXJiYhZT90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsITEsdGhpcy4kLmRyb3BTaGFkb3cpfSxfY29tcHV0ZU1haW5Db250YWluZXJDbGFzczpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gdC5mbGV4PWUhPT0iY292ZXIiLE9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gdFtyXX0pLmpvaW4oIiAiKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLnNjcm9sbEhhbmRsZXIpfSxfbW9kZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1QOSxuPXRoaXMuaGVhZGVyLGk9MjAwO24mJihyLnRhbGxNb2RlW3RdJiYhci50YWxsTW9kZVtlXT8obi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMudGFsbENsYXNzKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9LGkpKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixyLnRhbGxNb2RlW2VdLG4pKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nyb2xsZXIsdD10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcChlLnNjcm9sbFRvcD09PTApLHQmJnRoaXMudGFsbENsYXNzJiZQOS50YWxsTW9kZVt0aGlzLm1vZGVdJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMudGFsbENsYXNzLHRoaXMuYXRUb3B8fHQuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMudGFsbENsYXNzKSYmZS5zY3JvbGxIZWlnaHQ8dGhpcy5vZmZzZXRIZWlnaHQsdCl9LF9zY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKSx0aGlzLmZpcmUoImNvbnRlbnQtc2Nyb2xsIix7dGFyZ2V0OnRoaXMuc2Nyb2xsZXJ9LHtidWJibGVzOiExfSl9LF9nZXRTY3JvbGxlckZvck1vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIFA5Lm91dGVyU2Nyb2xsW2VdP3RoaXM6dGhpcy4kLm1haW5Db250YWluZXJ9fSk7WXQoe2lzOiJwYXBlci1pY29uLWJ1dHRvbiIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CgogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKCiAgICAgICAgLyoKICAgICAgICAgIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvCiAgICAgICAgICBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLyogQmVjYXVzZSBvZiBwb2x5bWVyLzI1NTgsIHRoaXMgc3R5bGUgaGFzIGxvd2VyIHNwZWNpZmljaXR5IHRoYW4gKiAqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0ICNpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZC10ZXh0LCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBhdXRvOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWhvdmVyOwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxMDAlOwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8aXJvbi1pY29uIGlkPSJpY29uIiBzcmM9Iltbc3JjXV0iIGljb249IltbaWNvbl1dIgogICAgICAgICAgICAgICBhbHQkPSJbW2FsdF1dIj48L2lyb24taWNvbj4KICBgLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIn0sYmVoYXZpb3JzOltqeF0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3RlbXBsYXRlLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpfSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpOyghcnx8dD09cikmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIHRoZSBtaXJyb3Igc2l6ZXMgdGhlIGlucHV0L3RleHRhcmVhIHNvIGl0IGdyb3dzIHdpdGggdHlwaW5nIC0tPgogICAgPCEtLSB1c2UgJiMxNjA7IGluc3RlYWQgJm5ic3A7IG9mIHRvIGFsbG93IHRoaXMgZWxlbWVudCB0byBiZSB1c2VkIGluIFhIVE1MIC0tPgogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICA8IS0tIHNpemUgdGhlIGlucHV0L3RleHRhcmVhIHdpdGggYSBkaXYsIGJlY2F1c2UgdGhlIHRleHRhcmVhIGhhcyBpbnRyaW5zaWMgc2l6ZSBpbiBmZiAtLT4KICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgcm93cyQ9Iltbcm93c11dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIj48L3RleHRhcmVhPgogICAgPC9kaXY+CmAsaXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbVGgsRGldLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbGFiZWw6e3R5cGU6U3RyaW5nfX0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQifSxnZXQgdGV4dGFyZWEoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhfSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25TdGFydChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQ9ZX0sc2V0IHNlbGVjdGlvbkVuZChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPWV9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGU9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKS8pJiYhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMVszNDU2Nzg5XS8pO2UmJih0aGlzLiQudGV4dGFyZWEuc3R5bGUubWFyZ2luTGVmdD0iLTNweCIpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC50ZXh0YXJlYS52YWxpZGl0eS52YWxpZDtyZXR1cm4gZSYmKHRoaXMucmVxdWlyZWQmJnRoaXMudmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLnZhbHVlKSkpLHRoaXMuaW52YWxpZD0hZSx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSxlfSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLnZhbHVlPWV9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50ZXh0YXJlYTshdHx8KHQudmFsdWUhPT1lJiYodC52YWx1ZT1lfHxlPT09MD9lOiIiKSx0aGlzLmJpbmRWYWx1ZT1lLHRoaXMuJC5taXJyb3IuaW5uZXJIVE1MPXRoaXMuX3ZhbHVlRm9yTWlycm9yKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0aGlzLmJpbmRWYWx1ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9enQoZSkucGF0aDt0aGlzLnZhbHVlPXQ/dFswXS52YWx1ZTplLnRhcmdldC52YWx1ZX0sX2NvbnN0cmFpbjpmdW5jdGlvbihlKXt2YXIgdDtmb3IoZT1lfHxbIiJdLHRoaXMubWF4Um93cz4wJiZlLmxlbmd0aD50aGlzLm1heFJvd3M/dD1lLnNsaWNlKDAsdGhpcy5tYXhSb3dzKTp0PWUuc2xpY2UoMCk7dGhpcy5yb3dzPjAmJnQubGVuZ3RoPHRoaXMucm93czspdC5wdXNoKCIiKTtyZXR1cm4gdC5qb2luKCI8YnIvPiIpKyImIzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRleHRhcmVhO2lmKCEhZSlyZXR1cm4gdGhpcy50b2tlbnM9ZSYmZS52YWx1ZT9lLnZhbHVlLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvIi9nbSwiJnF1b3Q7IikucmVwbGFjZSgvJy9nbSwiJiMzOTsiKS5yZXBsYWNlKC88L2dtLCImbHQ7IikucmVwbGFjZSgvPi9nbSwiJmd0OyIpLnNwbGl0KGAKYCk6WyIiXSx0aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfSxfdXBkYXRlQ2FjaGVkOmZ1bmN0aW9uKCl7dGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIG5vLWxhYmVsLWZsb2F0JD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzPSJwYXBlci1pbnB1dC1pbnB1dCIgc2xvdD0iaW5wdXQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvciQ9IltbdmFsaWRhdG9yXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiByb3dzJD0iW1tyb3dzXV0iIG1heC1yb3dzJD0iW1ttYXhSb3dzXV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIj48L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CmAsaXM6InBhcGVyLXRleHRhcmVhIixiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGUpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1lfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25FbmQoZSl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZD1lfSxfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpfSxfYXJpYURlc2NyaWJlZEJ5Q2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZSl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC50ZXh0YXJlYX19KTt2YXIgd1c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt3Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgfQoKICAgICAgLnBhcGVyLWl0ZW0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBib3JkZXI6bm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgLnBhcGVyLWl0ZW1baGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1zZWxlY3RlZCksIC5wYXBlci1pdGVtLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pLCAucGFwZXItaXRlbVtkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyksIC5wYXBlci1pdGVtOmZvY3VzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwoKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tZGFyay1kaXZpZGVyLW9wYWNpdHkpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQtYmVmb3JlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQod1cuY29udGVudCk7dmFyIFliZT17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im9wdGlvbiIsdGFiaW5kZXg6IjAifX0sSTk9W1NoLERpLFliZV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbSIsYmVoYXZpb3JzOltJOV19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBuZWVkZWQgZm9yIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzIHRvIHdvcmsgb24gZmYgKi8KICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0d28tbGluZV0pIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLWJvZHktdHdvLWxpbmUtbWluLWhlaWdodCwgNzJweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aHJlZS1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10aHJlZS1saW5lLW1pbi1oZWlnaHQsIDg4cHgpOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZChbc2Vjb25kYXJ5XSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CgogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbS1ib2R5In0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWl0ZW07CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWljb24gewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIHdpZHRoOiB2YXIoLS1wYXBlci1pdGVtLWljb24td2lkdGgsIDU2cHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0taWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50SWNvbiIgY2xhc3M9ImNvbnRlbnQtaWNvbiI+CiAgICAgIDxzbG90IG5hbWU9Iml0ZW0taWNvbiI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWljb24taXRlbSIsYmVoYXZpb3JzOltJOV19KTt2YXIgU1c9e3Byb3BlcnRpZXM6e211bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Im11bHRpQ2hhbmdlZCJ9LHNlbGVjdGVkVmFsdWVzOnt0eXBlOkFycmF5LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2VsZWN0ZWRJdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlcykiXSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5tdWx0aT90aGlzLl90b2dnbGVTZWxlY3RlZChlKTp0aGlzLnNlbGVjdGVkPWV9LG11bHRpQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9zZWxlY3Rpb24ubXVsdGk9ZSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkIT1udWxsfHx0aGlzLnNlbGVjdGVkVmFsdWVzIT1udWxsJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YoZSkpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9LHRoaXMpKTp3aC5fdXBkYXRlQXR0ckZvclNlbGVjdGVkLmFwcGx5KHRoaXMpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm11bHRpP3RoaXMuX3NlbGVjdE11bHRpKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpOnRoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0TXVsdGk6ZnVuY3Rpb24oZSl7ZT1lfHxbXTt2YXIgdD0odGhpcy5fdmFsdWVzVG9JdGVtcyhlKXx8W10pLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaSE9bnVsbH0pO3RoaXMuX3NlbGVjdGlvbi5jbGVhcih0KTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLl9zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRbcl0sITApO2lmKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJiF0aGlzLl9zZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKXt2YXIgbj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKTtuJiZ0aGlzLnNlbGVjdCh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zZWxlY3Rpb24uZ2V0KCk7dGhpcy5tdWx0aT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhlKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oZS5sZW5ndGg/ZVswXTpudWxsKSk6ZSE9bnVsbD8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbZV0pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShlKSk6KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW10pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKSl9LF90b2dnbGVTZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoZSkscj10PDA7cj90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIixlKTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLHQsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKHQpfSx0aGlzKX19LEkwdD1bd2gsU1ddO3ZhciBfXz17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6WyJBbHQiLCJBbHRHcmFwaCIsIkNhcHNMb2NrIiwiQ29udHJvbCIsIkZuIiwiRm5Mb2NrIiwiSHlwZXIiLCJNZXRhIiwiTnVtTG9jayIsIk9TIiwiU2Nyb2xsTG9jayIsIlNoaWZ0IiwiU3VwZXIiLCJTeW1ib2wiLCJTeW1ib2xMb2NrIl0sX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TOjFlMyxfcHJldmlvdXNUYWJJbmRleDowLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51In0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU11bHRpc2VsZWN0YWJsZShtdWx0aSkiXSxsaXN0ZW5lcnM6e2ZvY3VzOiJfb25Gb2N1cyIsa2V5ZG93bjoiX29uS2V5ZG93biIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIHQ9dGhpcy5fdmFsdWVUb0l0ZW0oZSk7dCYmdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbSh0KSxTVy5zZWxlY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3Jlc2V0VGFiaW5kaWNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdD09PWU/IjAiOiItMSIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIix0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZCh0KSl9LHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKGUpe2U/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbihlKXtpZih0aGlzLl9NT0RJRklFUl9LRVlTLmluZGV4T2YoZS5rZXkpPT09LTEpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7dmFyIHQ9dGhpcy5fc2VhcmNoVGV4dHx8IiIscj1lLmtleSYmZS5rZXkubGVuZ3RoPT0xP2Uua2V5OlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTt0Kz1yLnRvTG9jYWxlTG93ZXJDYXNlKCk7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MCxvO289dGhpcy5pdGVtc1tpXTtpKyspaWYoIW8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgYT10aGlzLmF0dHJGb3JJdGVtVGl0bGV8fCJ0ZXh0Q29udGVudCIscz0ob1thXXx8by5nZXRBdHRyaWJ1dGUoYSl8fCIiKS50cmltKCk7aWYoIShzLmxlbmd0aDxuKSYmcy5zbGljZSgwLG4pLnRvTG9jYWxlTG93ZXJDYXNlKCk9PXQpe3RoaXMuX3NldEZvY3VzZWRJdGVtKG8pO2JyZWFrfX10aGlzLl9zZWFyY2hUZXh0PXQsdGhpcy5kZWJvdW5jZSgiX2NsZWFyU2VhcmNoVGV4dCIsdGhpcy5fY2xlYXJTZWFyY2hUZXh0LHRoaXMuX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TKX19LF9jbGVhclNlYXJjaFRleHQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWFyY2hUZXh0PSIifSxfZm9jdXNQcmV2aW91czpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLHI9MTtyPGUrMTtyKyspe3ZhciBuPXRoaXMuaXRlbXNbKHQtcitlKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfZm9jdXNOZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSkscj0xO3I8ZSsxO3IrKyl7dmFyIG49dGhpcy5pdGVtc1sodCtyKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt0P2Uuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpOmUuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx3aC5fYXBwbHlTZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfZm9jdXNlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dCYmdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxlJiYhZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJiF0aGlzLmRpc2FibGVkJiYoZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGUuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7X18uX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHQpLF9fLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfb25Gb2N1czpmdW5jdGlvbihlKXtpZighX18uX3NoaWZ0VGFiUHJlc3NlZCl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDt0IT09dGhpcyYmdHlwZW9mIHQudGFiSW5kZXghPSJ1bmRlZmluZWQiJiYhdGhpcy5pc0xpZ2h0RGVzY2VuZGFudCh0KXx8KHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXt2YXIgcj10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHI/dGhpcy5fc2V0Rm9jdXNlZEl0ZW0ocik6dGhpcy5pdGVtc1swXSYmdGhpcy5fZm9jdXNOZXh0KCl9KSl9fSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzTmV4dCgpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZm9jdXNlZEl0ZW07dCYmdC5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoZSwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKSxlLnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGUpe3doLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLGUpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OjAsdGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpOnRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpfX07X18uX3NoaWZ0VGFiUHJlc3NlZD0hMTt2YXIgTDk9W0kwdCxPbyxfX107WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbGlzdGJveCIsYmVoYXZpb3JzOltMOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imxpc3Rib3gifX0pO3ZhciBMMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7TDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTDB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LXRyYW5zaXRpb247CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTt2YXIgazk9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUoZSktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcChlKSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24oZSl7aWYoZT1wYXJzZUZsb2F0KGUpLCF0aGlzLnN0ZXApcmV0dXJuIGU7dmFyIHQ9TWF0aC5yb3VuZCgoZS10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gdGhpcy5zdGVwPDE/dC8oMS90aGlzLnN0ZXApK3RoaXMubWluOnQqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTihlKT90aGlzLm9sZFZhbHVlOmUsdGhpcy52YWx1ZSE9PWV9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCksdGhpcy5fc2V0UmF0aW8odGhpcy5fY2FsY1JhdGlvKHRoaXMudmFsdWUpKjEwMCl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlblwkPSJbW19oaWRlU2Vjb25kYXJ5UHJvZ3Jlc3Moc2Vjb25kYXJ5UmF0aW8pXV0iPjwvZGl2PgogICAgICA8ZGl2IGlkPSJwcmltYXJ5UHJvZ3Jlc3MiPjwvZGl2PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXByb2dyZXNzIixiZWhhdmlvcnM6W2s5XSxwcm9wZXJ0aWVzOntzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc2Vjb25kYXJ5UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3RvZ2dsZUluZGV0ZXJtaW5hdGUifSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcHJvZ3Jlc3NDaGFuZ2VkKHNlY29uZGFyeVByb2dyZXNzLCB2YWx1ZSwgbWluLCBtYXgsIGluZGV0ZXJtaW5hdGUpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InByb2dyZXNzYmFyIn0sX3RvZ2dsZUluZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygiaW5kZXRlcm1pbmF0ZSIsZSx0aGlzLiQucHJpbWFyeVByb2dyZXNzKX0sX3RyYW5zZm9ybVByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9InNjYWxlWCgiK3QvMTAwKyIpIjtlLnN0eWxlLnRyYW5zZm9ybT1lLnN0eWxlLndlYmtpdFRyYW5zZm9ybT1yfSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGUpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT10aGlzLl9jbGFtcFZhbHVlKGUpLHQ9dGhpcy5fY2xhbXBWYWx1ZSh0KTt2YXIgbz10aGlzLl9jYWxjUmF0aW8oZSkqMTAwLGE9dGhpcy5fY2FsY1JhdGlvKHQpKjEwMDt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbyksdGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxhKSx0aGlzLnNlY29uZGFyeVByb2dyZXNzPWUsaT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iix0KSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsciksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLG4pfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixlPyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB9fSk7dmFyIGswdD1RYAo8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZTogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXNpemUsIDE2cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUsIC0xcHgpOwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgI3JhZGlvQ29udGFpbmVyIHsKICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1yYWRpby1jb250YWluZXI7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNvZmZSYWRpbywgI29uUmFkaW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICB9CgogICNvZmZSYWRpbyB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjhzOwogIH0KCiAgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBlYXNlIDAuMjhzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC41KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTsKICB9CgogICNyYWRpb0xhYmVsIHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNyYWRpb0xhYmVsIHsKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogIH0KCiAgI3JhZGlvTGFiZWw6ZGlyKHJ0bCkgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICB9CgogICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAvKiBzbGlnaHRseSBkYXJrZXIgdGhhbiB0aGUgYnV0dG9uLCBzbyB0aGF0IGl0J3MgcmVhZGFibGUgKi8KICAgIG9wYWNpdHk6IDAuNjU7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0icmFkaW9Db250YWluZXIiPgogIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICA8ZGl2IGlkPSJvblJhZGlvIj48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtrMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTprMHQsaXM6InBhcGVyLXJhZGlvLWJ1dHRvbiIsYmVoYXZpb3JzOltYeF0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjohMSx0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnthcmlhQWN0aXZlQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiYXJpYS1jaGVja2VkIn19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC5yYWRpb0NvbnRhaW5lcn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiKS50cmltKCk7aWYoZT09PSItMXB4Iil7dmFyIHQ9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplIikudHJpbSgpKSxyPU1hdGguZmxvb3IoMyp0KTtyJTIhPT10JTImJnIrKyx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIjpyKyJweCJ9KX19KX19KTt2YXIgUjk9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51YmFyIn0sa2V5QmluZGluZ3M6e2xlZnQ6Il9vbkxlZnRLZXkiLHJpZ2h0OiJfb25SaWdodEtleSJ9LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sZ2V0IF9pc1JUTCgpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PT0icnRsIn0sX29uTGVmdEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c1ByZXZpb3VzKCk6dGhpcy5fZm9jdXNOZXh0KCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25LZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGUsInVwIGRvd24gbGVmdCByaWdodCBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKX19LE45PVtMOSxSOV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltOOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWx1ZVRvSXRlbShlKTtpZighKHQmJnQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSl7aWYodGhpcy5zZWxlY3RlZCl7dmFyIHI9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7aWYodGhpcy5zZWxlY3RlZD09ZSlpZih0aGlzLmFsbG93RW1wdHlTZWxlY3Rpb24pZT0iIjtlbHNle3ImJihyLmNoZWNrZWQ9ITApO3JldHVybn1yJiYoci5jaGVja2VkPSExKX13aC5zZWxlY3QuYXBwbHkodGhpcyxbZV0pLHRoaXMuZmlyZSgicGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZCIpfX0sX2FjdGl2YXRlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9pdGVtQWN0aXZhdGUodGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuZm9jdXNlZEl0ZW0pLHRoaXMuZm9jdXNlZEl0ZW0pfSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uRG93bktleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c05leHQoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGUpe1I5Ll9vbkxlZnRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oZSl7UjkuX29uUmlnaHRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX19KTt2YXIgUjB0PVFgCiAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgfQoKICAgIC8qIGZvY3VzIHNob3dzIHRoZSByaXBwbGUgKi8KICAgIDpob3N0KDpmb2N1cykgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC8qKgogICAgICAqIE5PVEUoa2VhbnVsZWUpOiBUaG91Z2ggOmhvc3QtY29udGV4dCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkLCBzb21lIHBhZ2VzCiAgICAgICogc3RpbGwgcmVseSBvbiBwYXBlci1zbGlkZXIgYmVpbmcgZmxpcHBlZCB3aGVuIGRpcj0icnRsIiBpcyBzZXQgb24gYm9keS4gRm9yIGZ1bGwKICAgICAgKiBjb21wYXRpYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICovCiAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICogbm90IGJlIHJlY29nbml6ZWQuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJydGwiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgOmhvc3QtY29udGV4dCBydWxlICh3aGVyZSBzdXBwb3J0ZWQpCiAgICAgICogdG8gc3VwcG9ydCBMVFIgc2xpZGVycyBpbiBSVEwgcGFnZXMuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJsdHIiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgfQoKICAgIC5iYXItY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE4cyBlYXNlOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZC5kcmFnZ2luZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAucmluZy5leHBhbmQ6bm90KC5waW4pID4gLmJhci1jb250YWluZXIgewogICAgICBsZWZ0OiBjYWxjKDhweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckJhciB7CiAgICAgIHBhZGRpbmc6IDE1cHggMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1iYXItY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1jb250YWluZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VycyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLyogc2xpZGVyLWtub2IgaXMgMzBweCArIHRoZSBzbGlkZXItaGVpZ2h0IHNvIHRoYXQgdGhlIG1hcmtlcnMgc2hvdWxkIHN0YXJ0IGF0IGEgb2Zmc2V0IG9mIDE1cHgqLwogICAgICB0b3A6IDE1cHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IC0xcHg7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgIH0KCiAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgfQogICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgIC5zbGlkZXItbWFya2VyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7CiAgICAgIHdpZHRoOiAycHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvciwgIzAwMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xNXB4IC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgfQoKICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wOHMgZWFzZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBtYXJnaW46IDEwcHg7CiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKCiAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICB9CgogICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgfQoKICAgIC5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICB9CgogICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTNweDsKICAgICAgd2lkdGg6IDI2cHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDsKCiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlLAogICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlOwogICAgfQoKICAgIC5waW4ucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpIHRyYW5zbGF0ZSgxN3B4LCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1mb250LWNvbG9yLCAjZmZmKTsKICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnBpbi5leHBhbmQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZSgwLCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgIH0KCiAgICAvKiBwYXBlci1pbnB1dCAqLwogICAgLnNsaWRlci1pbnB1dCB7CiAgICAgIHdpZHRoOiA1MHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQtY29udGFpbmVyLWlucHV0OwogICAgICB9OwogICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQ7CiAgICB9CgogICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICNzbGlkZXJDb250YWluZXIuZGlzYWJsZWQgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuZGlzYWJsZWQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICB9CgogICAgLmRpc2FibGVkLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgcGFwZXItcmlwcGxlIHsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzXCQ9IltbX2dldENsYXNzTmFtZXMoZGlzYWJsZWQsIHBpbiwgc25hcHMsIGltbWVkaWF0ZVZhbHVlLCBtaW4sIGV4cGFuZCwgZHJhZ2dpbmcsIHRyYW5zaXRpbmcsIGVkaXRhYmxlKV1dIj4KICAgIDxkaXYgY2xhc3M9ImJhci1jb250YWluZXIiPgogICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpZD0ic2xpZGVyQmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIHN0ZXA9Iltbc3RlcF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBzZWNvbmRhcnktcHJvZ3Jlc3M9Iltbc2Vjb25kYXJ5UHJvZ3Jlc3NdXSIgb24tZG93bj0iX2JhcmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX2JhcnRyYWNrIiBvbi10YXA9Il9iYXJjbGljayI+CiAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc25hcHNdXSI+CiAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXJzIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VyIj48L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ic2xpZGVyS25vYiIgY2xhc3M9InNsaWRlci1rbm9iIiBvbi1kb3duPSJfa25vYmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX29uVHJhY2siIG9uLXRyYW5zaXRpb25lbmQ9Il9rbm9iVHJhbnNpdGlvbkVuZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlXCQ9IltbaW1tZWRpYXRlVmFsdWVdXSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VkaXRhYmxlXV0iPgogICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIGNsYXNzPSJzbGlkZXItaW5wdXQiIGRpc2FibGVkXCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgPC9wYXBlci1pbnB1dD4KICA8L3RlbXBsYXRlPgpgO1IwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOlIwdCxpczoicGFwZXItc2xpZGVyIixiZWhhdmlvcnM6W09vLEVoLGp4LGs5XSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc25hcHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHBpbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sc2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkIn0sZWRpdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW1tZWRpYXRlVmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxtYXhNYXJrZXJzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sZXhwYW5kOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LGlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZUJhclRvdWNoJiZkXyh0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGUsdCxyLG4saSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLHQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixyKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsZSksdGhpcy5fcG9zaXRpb25Lbm9iKHRoaXMuX2NhbGNSYXRpbyhlKSoxMDApfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ2YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pfSxfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kcmFnZ2luZz90aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKSx0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oZSkpKSx0aGlzLl9zZXRSYXRpbyh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqMTAwKSx0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiLHRoaXMuZHJhZ2dpbmcmJih0aGlzLl9rbm9ic3RhcnR4PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy50cmFuc2xhdGUzZCgwLDAsMCx0aGlzLiQuc2xpZGVyS25vYikpfSxfY2FsY0tub2JQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pKmUvMTAwK3RoaXMubWlufSxfb25UcmFjazpmdW5jdGlvbihlKXtzd2l0Y2goZS5zdG9wUHJvcGFnYXRpb24oKSxlLmRldGFpbC5zdGF0ZSl7Y2FzZSJzdGFydCI6dGhpcy5fdHJhY2tTdGFydChlKTticmVhaztjYXNlInRyYWNrIjp0aGlzLl90cmFja1goZSk7YnJlYWs7Y2FzZSJlbmQiOnRoaXMuX3RyYWNrRW5kKCk7YnJlYWt9fSxfdHJhY2tTdGFydDpmdW5jdGlvbihlKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGgsdGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMuX3N0YXJ0eD10aGlzLl94LHRoaXMuX2tub2JzdGFydHg9dGhpcy5fc3RhcnR4LHRoaXMuX21pbng9LXRoaXMuX3N0YXJ0eCx0aGlzLl9tYXh4PXRoaXMuX3ctdGhpcy5fc3RhcnR4LHRoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITApfSxfdHJhY2tYOmZ1bmN0aW9uKGUpe3RoaXMuZHJhZ2dpbmd8fHRoaXMuX3RyYWNrU3RhcnQoZSk7dmFyIHQ9dGhpcy5faXNSVEw/LTE6MSxyPU1hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxlLmRldGFpbC5keCp0KSk7dGhpcy5feD10aGlzLl9zdGFydHgrcjt2YXIgbj10aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZShuKTt2YXIgaT10aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4O3RoaXMudHJhbnNsYXRlM2QoaSsicHgiLDAsMCx0aGlzLiQuc2xpZGVyS25vYil9LF90cmFja0VuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC5zbGlkZXJLbm9iLnN0eWxlO3RoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITEpLHRoaXMuX3Jlc2V0S25vYigpLHRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZSxlLnRyYW5zZm9ybT1lLndlYmtpdFRyYW5zZm9ybT0iIix0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihlKXt0aGlzLl9leHBhbmRLbm9iKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJnRoaXMuX29uVHJhY2soZSl9LF9iYXJjbGljazpmdW5jdGlvbihlKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIHQ9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPShlLmRldGFpbC54LXQubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihyPTEwMC1yKTt2YXIgbj10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApLHRoaXMuX3Bvc2l0aW9uS25vYihyKSxuPT09dGhpcy5yYXRpbyYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSksdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0pLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzKCl9LF9iYXJkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJih0aGlzLmRlYm91bmNlKCJleHBhbmRLbm9iIix0aGlzLl9leHBhbmRLbm9iLDYwKSx0aGlzLl9iYXJjbGljayhlKSl9LF9rbm9iVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuJC5zbGlkZXJLbm9iJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKX0sX3VwZGF0ZU1hcmtlcnM6ZnVuY3Rpb24oZSx0LHIsbil7bnx8dGhpcy5fc2V0TWFya2VycyhbXSk7dmFyIGk9TWF0aC5yb3VuZCgoci10KS90aGlzLnN0ZXApO2k+ZSYmKGk9ZSksKGk8MHx8IWlzRmluaXRlKGkpKSYmKGk9MCksdGhpcy5fc2V0TWFya2VycyhuZXcgQXJyYXkoaSkpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIgIil9LF9nZXRDbGFzc05hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lcmdlQ2xhc3Nlcyh7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZCxwaW46dGhpcy5waW4sc25hcHM6dGhpcy5zbmFwcyxyaW5nOnRoaXMuaW1tZWRpYXRlVmFsdWU8PXRoaXMubWluLGV4cGFuZDp0aGlzLmV4cGFuZCxkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLHRyYW5zaXRpbmc6dGhpcy50cmFuc2l0aW5nLGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9KX0sX2FsbG93QmFyRXZlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaWdub3JlQmFyVG91Y2h8fGUuZGV0YWlsLnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudH0sZ2V0IF9pc1JUTCgpe3JldHVybiB0aGlzLl9faXNSVEw9PT12b2lkIDAmJih0aGlzLl9faXNSVEw9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX19pc1JUTH0sX2xlZnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5faXNSVEw/dGhpcy5faW5jcmVtZW50S2V5KGUpOnRoaXMuX2RlY3JlbWVudEtleShlKX0sX3JpZ2h0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2RlY3JlbWVudEtleShlKTp0aGlzLl9pbmNyZW1lbnRLZXkoZSl9LF9pbmNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJlbmQiP3RoaXMudmFsdWU9dGhpcy5tYXg6dGhpcy5pbmNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGUucHJldmVudERlZmF1bHQoKSl9LF9kZWNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJob21lIj90aGlzLnZhbHVlPXRoaXMubWluOnRoaXMuZGVjcmVtZW50KCksdGhpcy5maXJlKCJjaGFuZ2UiKSxlLnByZXZlbnREZWZhdWx0KCkpfSxfY2hhbmdlVmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy52YWx1ZT1lLnRhcmdldC52YWx1ZSx0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbnB1dEtleURvd246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnNsaWRlcktub2IscEUuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYoZT90aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0iIjp0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fcmlwcGxlLmhvbGREb3duPWUpfX0pO3ZhciBNVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO01XLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO01XLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqLwogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAvKgogICAgICAgKiBDb25zdGFudHM6CiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKQogICAgICAgKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKQogICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGEKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG8KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpCiAgICAgICAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtcwogICAgICAgKi8KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKCiAgICAgICAgLyogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zOwoKICAgICAgICAvKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zOwoKICAgICAgICAvKiA0ICogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7CgogICAgICAgIC8qIFNIUklOS19USU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtczsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKCiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCiAgICAgICAgICogZmxpcHBlZCBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIEFsd2F5cyB1c2UgbHRyIHNvIHRoYXQgdGhlCiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqLwogICAgICAgIGRpcmVjdGlvbjogbHRyOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTEgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMiB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTMtY29sb3IsIHZhcigtLWdvb2dsZS15ZWxsb3ctNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci00IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKToKICAgICAgICoKICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nCiAgICAgICAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgbGF5ZXItMnVuZGFudCBhcyBpdAogICAgICAgKiBzZWVtcykuCiAgICAgICAqLwogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0xIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci00IHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGUKICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLgogICAgICAgKi8KICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBsZWZ0OiA0NSU7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLAogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAyMDAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICBsZWZ0OiAtMTAwJTsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICB9CgogICAgICAuYWN0aXZlIC5nYXAtcGF0Y2g6OmFmdGVyLAogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24gewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTVcuY29udGVudCk7dmFyIEQ5PXtwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9fYWN0aXZlQ2hhbmdlZCJ9LGFsdDp7dHlwZTpTdHJpbmcsdmFsdWU6ImxvYWRpbmciLG9ic2VydmVyOiJfX2FsdENoYW5nZWQifSxfX2Nvb2xpbmdEb3duOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuW2V8fHQ/ImFjdGl2ZSI6IiIsdD8iY29vbGRvd24iOiIiXS5qb2luKCIgIil9LF9fYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuX19zZXRBcmlhSGlkZGVuKCFlKSx0aGlzLl9fY29vbGluZ0Rvd249IWUmJnR9LF9fYWx0Q2hhbmdlZDpmdW5jdGlvbihlKXtlPT09ImxvYWRpbmciP3RoaXMuYWx0PXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fGU6KHRoaXMuX19zZXRBcmlhSGlkZGVuKGU9PT0iIiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGUpe3ZhciB0PSJhcmlhLWhpZGRlbiI7ZT90aGlzLnNldEF0dHJpYnV0ZSh0LCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9LF9fcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT0hMSx0aGlzLl9fY29vbGluZ0Rvd249ITF9fTt2YXIgTjB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMSI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0zIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItNCI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDtOMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpOMHQsaXM6InBhcGVyLXNwaW5uZXIiLGJlaGF2aW9yczpbRDldfSk7dmFyIEQwdD1RYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO0QwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOkQwdCxpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W0Q5XX0pO3ZhciBqYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tcmlnaHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqYmUuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC1mb2N1c2VkOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbRGksU2gsc3VdLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIWUmJiEhZS5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbihlKXtpZih0aGlzLmxpbmspe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpO2lmKCF0fHxlLnRhcmdldD09PXQpcmV0dXJuO3QuY2xpY2soKX19fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIFxgdHJhbnNwYXJlbnRcYC4gKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiczsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWwtcmV2ZXJzZTsKICAgICAgfQoKICAgICAgI3RhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250YWluZXI7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC1tb3otZmxleC1iYXNpczogYXV0bzsKICAgICAgICAtbXMtZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnMtY29udGVudDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQ6bm90KC5zY3JvbGxhYmxlKSwKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlLmZpdC1jb250YWluZXIgewogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgLyogSUUgLSBwcmV2ZW50IHRhYnMgZnJvbSBjb21wcmVzc2luZyB3aGVuIHRoZXkgc2hvdWxkIHNjcm9sbC4gKi8KICAgICAgICAtbXMtZmxleDogMSAwIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDAgYXV0bzsKICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgfQoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLm5vdC12aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvciwgdmFyKC0tcGFwZXIteWVsbG93LWExMDApKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmFsaWduLWJvdHRvbSB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhci5leHBhbmQgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmNvbnRyYWN0IHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQgPiA6OnNsb3R0ZWQoOm5vdCgjc2VsZWN0aW9uQmFyKSkgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLWxlZnQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9sZWZ0SGlkZGVuLCBzY3JvbGxhYmxlLCBoaWRlU2Nyb2xsQnV0dG9ucyldXSIgb24tdXA9Il9vblNjcm9sbEJ1dHRvblVwIiBvbi1kb3duPSJfb25MZWZ0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgoKICAgIDxkaXYgaWQ9InRhYnNDb250YWluZXIiIG9uLXRyYWNrPSJfc2Nyb2xsIiBvbi1kb3duPSJfZG93biI+CiAgICAgIDxkaXYgaWQ9InRhYnNDb250ZW50IiBjbGFzcyQ9IltbX2NvbXB1dGVUYWJzQ29udGVudENsYXNzKHNjcm9sbGFibGUsIGZpdENvbnRhaW5lcildXSI+CiAgICAgICAgPGRpdiBpZD0ic2VsZWN0aW9uQmFyIiBjbGFzcyQ9IltbX2NvbXB1dGVTZWxlY3Rpb25CYXJDbGFzcyhub0JhciwgYWxpZ25Cb3R0b20pXV0iIG9uLXRyYW5zaXRpb25lbmQ9Il9vbkJhclRyYW5zaXRpb25FbmQiPjwvZGl2PgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLXJpZ2h0IiBjbGFzcyQ9IltbX2NvbXB1dGVTY3JvbGxCdXR0b25DbGFzcyhfcmlnaHRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vblJpZ2h0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgpgLGlzOiJwYXBlci10YWJzIixiZWhhdmlvcnM6W0pzLE45XSxwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sbm9CYXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9TbGlkZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzY3JvbGxhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpdENvbnRhaW5lcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxkaXNhYmxlRHJhZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRlU2Nyb2xsQnV0dG9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbGlnbkJvdHRvbTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItdGFiIn0sYXV0b3NlbGVjdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvc2VsZWN0RGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGwsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD16dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKTt0LmZvckVhY2goZT90aGlzLl9zZXROb2lua0F0dHJpYnV0ZTp0aGlzLl9yZW1vdmVOb2lua0F0dHJpYnV0ZSl9LF9zZXROb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgibm9pbmsiLCIiKX0sX3JlbW92ZU5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2UucmVtb3ZlQXR0cmlidXRlKCJub2luayIpfSxfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hdHx8cj8iaGlkZGVuIjplPyJub3QtdmlzaWJsZSI6IiJ9LF9jb21wdXRlVGFic0NvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybiBlPyJzY3JvbGxhYmxlIisodD8iIGZpdC1jb250YWluZXIiOiIiKToiIGZpdC1jb250YWluZXIifSxfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ImhpZGRlbiI6dD8iYWxpZ24tYm90dG9tIjoiIn0sX29uVGFiU2l6aW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoIl9vblRhYlNpemluZ0NoYW5nZWQiLGZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsKCksdGhpcy5fdGFiQ2hhbmdlZCh0aGlzLnNlbGVjdGVkSXRlbSl9LDEwKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl90YWJDaGFuZ2VkKGUuZGV0YWlsLml0ZW0sdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPWUuZGV0YWlsLml0ZW0sdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmRlYm91bmNlKCJ0YWItY2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl90YWJDaGFuZ2VkKG51bGwsdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPW51bGx9LDEpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKSxfXy5fYWN0aXZhdGVIYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3NjaGVkdWxlQWN0aXZhdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT1lLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD10aGlzLmFzeW5jKHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIsdCl9LF9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW07dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLGUuZmlyZSh0aGlzLmFjdGl2YXRlRXZlbnQsbnVsbCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSl9LF9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCE9PXZvaWQgMCYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0KSx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKGUpe3RoaXMuYXV0b3NlbGVjdCYmdGhpcy5fc2NoZWR1bGVBY3RpdmF0aW9uKHRoaXMuZm9jdXNlZEl0ZW0sdGhpcy5hdXRvc2VsZWN0RGVsYXkpfSxfb25CbHVyQ2FwdHVyZTpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbSYmdGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGUsdCl7aWYoISF0aGlzLnNjcm9sbGFibGUpe3ZhciByPXQmJi10LmRkeHx8MDt0aGlzLl9hZmZlY3RTY3JvbGwocil9fSxfZG93bjpmdW5jdGlvbihlKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oZSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9ZTt2YXIgdD10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3RoaXMuX2xlZnRIaWRkZW49dD09PTAsdGhpcy5fcmlnaHRIaWRkZW49dD09PXRoaXMuX3RhYkNvbnRhaW5lclNjcm9sbFNpemV9LF9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpLHRoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihlLHQpe2lmKCFlKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcigwLDApO3JldHVybn12YXIgcj10aGlzLiQudGFic0NvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWkubGVmdC1yLmxlZnQ7aWYodGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChpLndpZHRoLG4pLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQobyxuKX0sdGhpcy5ub1NsaWRlfHx0PT1udWxsKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpO3JldHVybn12YXIgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dGhpcy5pdGVtcy5pbmRleE9mKHQpLGw9dGhpcy5pdGVtcy5pbmRleE9mKGUpLGM9NTt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5hZGQoImV4cGFuZCIpO3ZhciB1PXM8bCxoPXRoaXMuX2lzUlRMO2gmJih1PSF1KSx1P3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGkubGVmdCtpLndpZHRoLWEubGVmdCxuKS1jLHRoaXMuX2xlZnQpOnRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGEubGVmdCthLndpZHRoLWkubGVmdCxuKS1jLHRoaXMuX2NhbGNQZXJjZW50KG8sbikrYyksdGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQoaS53aWR0aCxvKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihlLHQpe3ZhciByPXQtdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDtyPDA/dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9cjoocis9ZS10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCxyPjAmJih0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1yKSl9LF9jYWxjUGVyY2VudDpmdW5jdGlvbihlLHQpe3JldHVybiAxMDAqZS90fSxfcG9zaXRpb25CYXI6ZnVuY3Rpb24oZSx0KXtlPWV8fDAsdD10fHwwLHRoaXMuX3dpZHRoPWUsdGhpcy5fbGVmdD10LHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGVYKCIrdCsiJSkgc2NhbGVYKCIrZS8xMDArIikiLHRoaXMuJC5zZWxlY3Rpb25CYXIpfSxfb25CYXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0O3QuY29udGFpbnMoImV4cGFuZCIpPyh0LnJlbW92ZSgiZXhwYW5kIiksdC5hZGQoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KSk6dC5jb250YWlucygiY29udHJhY3QiKSYmdC5yZW1vdmUoImNvbnRyYWN0Iil9fSk7dmFyIEp4PW51bGw7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci10b2FzdCIsYmVoYXZpb3JzOltLeF0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNlM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe3JldHVybiBEYS5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIiksdGhpcy5vcGVuZWR9LGdldCBfY2FuQXV0b0Nsb3NlKCl7cmV0dXJuIHRoaXMuZHVyYXRpb24+MCYmdGhpcy5kdXJhdGlvbiE9PTEvMH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZT1udWxsLGVjLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbihlKXt0eXBlb2YgZT09InN0cmluZyImJihlPXt0ZXh0OmV9KTtmb3IodmFyIHQgaW4gZSl0LmluZGV4T2YoIl8iKT09PTA/RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIHByaXZhdGUgYW5kIHdhcyBub3Qgc2V0LicpOnQgaW4gdGhpcz90aGlzW3RdPWVbdF06RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7ZSYmZS50YXJnZXQ9PT10aGlzJiZlLnByb3BlcnR5TmFtZT09PSJvcGFjaXR5IiYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2UhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKSx0aGlzLm9wZW5lZD8oSngmJkp4IT09dGhpcyYmSnguY2xvc2UoKSxKeD10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOkp4PT09dGhpcyYmKEp4PW51bGwpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMucG9zaXRpb25UYXJnZXQ9ZX19KTt2YXIgTzB0PVFgCgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOm5vbmU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXItY29sb3IsICMwMDAwMDApOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTUwKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24uZHJhZ2dpbmcgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJhciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXItY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgb3BhY2l0eTogMC4xMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0xNHB4OwogICAgICAgIGxlZnQ6IC0xNHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICAvKiBUaGUgdG9nZ2xlIGJ1dHRvbiBoYXMgYW4gYWJzb2x1dGUgcG9zaXRpb24gb2YgLTNweDsgVGhlIGV4dHJhIDFweAogICAgICAgIC8qIGFjY291bnRzIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBzaGFkb3cgYm94LiAqLwogICAgICAgIG1hcmdpbjogNHB4IDFweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYmFyLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWluay1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQmFyIiBjbGFzcz0idG9nZ2xlLWJhciI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJ1dHRvbiIgY2xhc3M9InRvZ2dsZS1idXR0b24iPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CgogIGA7TzB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6TzB0LGlzOiJwYXBlci10b2dnbGUtYnV0dG9uIixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIiwiYXJpYS1wcmVzc2VkIjoiZmFsc2UiLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e30sbGlzdGVuZXJzOnt0cmFjazoiX29udHJhY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXtkXyh0aGlzLCJwYW4teSIpfSl9LF9vbnRyYWNrOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsO3Quc3RhdGU9PT0ic3RhcnQiP3RoaXMuX3RyYWNrU3RhcnQodCk6dC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fdHJhY2tNb3ZlKHQpOnQuc3RhdGU9PT0iZW5kIiYmdGhpcy5fdHJhY2tFbmQodCl9LF90cmFja1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvMix0aGlzLl90cmFja0NoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuJC50b2dnbGVCdXR0b24uY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKX0sX3RyYWNrTW92ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrdDp0KSksdGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pLHRoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oZSl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIGU9c3UuX2NyZWF0ZVJpcHBsZSgpO3JldHVybiBlLmlkPSJpbmsiLGUuc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKSxlLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKSxlfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogXGAudG9vbGJhci10b29sc1xgIGRpc2FibGVzIHRvdWNoIGV2ZW50cyBzbyBtdWx0aXBsZSB0b29sYmFycyBjYW4gc3RhY2sgYW5kIG5vdAogICAgICAgKiBhYnNvcmIgZXZlbnRzLiBBbGwgY2hpbGRyZW4gbXVzdCBoYXZlIHBvaW50ZXIgZXZlbnRzIHJlLWVuYWJsZWQgdG8gd29yayBhcwogICAgICAgKiBleHBlY3RlZC4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKCo6bm90KFtkaXNhYmxlZF0pKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogNTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b24gKyAudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRoZSAtLXBhcGVyLXRvb2xiYXItdGl0bGUgbWl4aW4gaXMgYXBwbGllZCBoZXJlIGluc3RlYWQgb2YgYWJvdmUgdG8KICAgICAgICogZml4IHRoZSBpc3N1ZSB3aXRoIG1hcmdpbi1sZWZ0IGJlaW5nIGlnbm9yZWQgZHVlIHRvIGNzcyBvcmRlcmluZy4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGl0bGU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uW2ljb249bWVudV0pIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLyogVE9ETyhub21zKTogVW50aWwgd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiBmb3IgY2xhc3NlcyB0aGF0IGRvbid0IHVzZQogICAgICAgKiAvZGVlcC8gY3JlYXRlIG91ciBvd24uCiAgICAgICAqLwogICAgICAuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuY2VudGVyLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5lbmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvcEJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGJvdHRvbUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJib3R0b20iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sYmFyIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbGJhciJ9LHByb3BlcnRpZXM6e2JvdHRvbUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxqdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbWlkZGxlSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxyZWFkeTpmdW5jdGlvbigpe2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlKHRoaXMpLHRoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKX0sX29ic2VydmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfS5iaW5kKHRoaXMpKTtyZXR1cm4gdC5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdH0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7Y2koKTtmb3IodmFyIGU9W10sdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh6dCh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInNsb3QiKSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHp0KHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiY29udGVudCIpKSkscixuPTA7cj10W25dO24rKylmb3IodmFyIGk9enQocikuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLG8sYT0wO289aVthXTthKyspaWYoby5jbGFzc0xpc3QmJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKG8uaWQpZS5wdXNoKG8uaWQpO2Vsc2V7dmFyIHM9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KTtvLmlkPXMsZS5wdXNoKHMpfWUubGVuZ3RoPjAmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZSsoZT09PSJqdXN0aWZpZWQiPyIiOiItanVzdGlmaWVkIik6IiJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTAwMjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC1iYWNrZ3JvdW5kLCAjNjE2MTYxKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC10ZXh0LWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVVcCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZURvd24gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZUluT3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZU91dE9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bkluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25PdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZhZGUtaW4tYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVJbk9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuZmFkZS1vdXQtYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlT3V0T3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtdXAtYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZVVwOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVEb3duOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bkluOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uLW91dCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duT3V0OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5jYW5jZWwtYW5pbWF0aW9uIHsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0zMHMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogVGhhbmtzIElFIDEwLiAqLwoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntlbnRyeTpbe25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIixub2RlOnRoaXMsdGltaW5nOntkZWxheTowfX1dLGV4aXQ6W3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLG5vZGU6dGhpc31dfX19LF9zaG93aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3dlYmtpdEFuaW1hdGlvbkVuZDoiX29uQW5pbWF0aW9uRW5kIn0sZ2V0IHRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGUsdD16dCh0aGlzKS5nZXRPd25lclJvb3QoKSxyO3JldHVybiB0aGlzLmZvcj9yPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTpyPWUubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT90Lmhvc3Q6ZSxyfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmRUYXJnZXQoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGUpe2U9PT0iZW50cnkiP3RoaXMuc2hvdygpOmU9PT0iZXhpdCImJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoenQodGhpcykudGV4dENvbnRlbnQudHJpbSgpPT09IiIpe2Zvcih2YXIgZT0hMCx0PXp0KHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS50ZXh0Q29udGVudC50cmltKCkhPT0iIil7ZT0hMTticmVha31pZihlKXJldHVybn10aGlzLl9zaG93aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKX19LGhpZGU6ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Nob3dpbmcpe2lmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmcpe3RoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCk7cmV0dXJufWVsc2UgdGhpcy5fb25BbmltYXRpb25GaW5pc2goKTt0aGlzLl9zaG93aW5nPSExLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITB9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuX3RhcmdldHx8IXRoaXMub2Zmc2V0UGFyZW50KSl7dmFyIGU9dGhpcy5vZmZzZXQ7dGhpcy5tYXJnaW5Ub3AhPTE0JiZ0aGlzLm9mZnNldD09MTQmJihlPXRoaXMubWFyZ2luVG9wKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT0oci53aWR0aC1uLndpZHRoKS8yLG89KHIuaGVpZ2h0LW4uaGVpZ2h0KS8yLGE9ci5sZWZ0LXQubGVmdCxzPXIudG9wLXQudG9wLGwsYztzd2l0Y2godGhpcy5wb3NpdGlvbil7Y2FzZSJ0b3AiOmw9YStpLGM9cy1uLmhlaWdodC1lO2JyZWFrO2Nhc2UiYm90dG9tIjpsPWEraSxjPXMrci5oZWlnaHQrZTticmVhaztjYXNlImxlZnQiOmw9YS1uLndpZHRoLWUsYz1zK287YnJlYWs7Y2FzZSJyaWdodCI6bD1hK3Iud2lkdGgrZSxjPXMrbzticmVha310aGlzLmZpdFRvVmlzaWJsZUJvdW5kcz8odC5sZWZ0K2wrbi53aWR0aD53aW5kb3cuaW5uZXJXaWR0aD8odGhpcy5zdHlsZS5yaWdodD0iMHB4Iix0aGlzLnN0eWxlLmxlZnQ9ImF1dG8iKToodGhpcy5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsbCkrInB4Iix0aGlzLnN0eWxlLnJpZ2h0PSJhdXRvIiksdC50b3ArYytuLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQ/KHRoaXMuc3R5bGUuYm90dG9tPXQuaGVpZ2h0LXMrZSsicHgiLHRoaXMuc3R5bGUudG9wPSJhdXRvIik6KHRoaXMuc3R5bGUudG9wPU1hdGgubWF4KC10LnRvcCxjKSsicHgiLHRoaXMuc3R5bGUuYm90dG9tPSJhdXRvIikpOih0aGlzLnN0eWxlLmxlZnQ9bCsicHgiLHRoaXMuc3R5bGUudG9wPWMrInB4Iil9fSxfYWRkTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWVudGVyIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiYmx1ciIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMubGlzdGVuKHRoaXMsIm1vdXNlZW50ZXIiLCJoaWRlIil9LF9maW5kVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlfHx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl90YXJnZXQ9dGhpcy50YXJnZXQsdGhpcy5tYW51YWxNb2RlfHx0aGlzLl9hZGRMaXN0ZW5lcnMoKX0sX2RlbGF5Q2hhbmdlOmZ1bmN0aW9uKGUpe2UhPT01MDAmJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LWluIjplKyJtcyJ9KX0sX21hbnVhbE1vZGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlP3RoaXMuX3JlbW92ZUxpc3RlbmVycygpOnRoaXMuX2FkZExpc3RlbmVycygpfSxfY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMSx0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oZSl7aWYoZT09PSJlbnRyeSImJnRoaXMuYW5pbWF0aW9uRW50cnkhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTtpZihlPT09ImV4aXQiJiZ0aGlzLmFuaW1hdGlvbkV4aXQhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FeGl0O2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdJiZ0eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0ubmFtZT09InN0cmluZyIpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZyYmdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0udGltaW5nLmRlbGF5JiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXkhPT0wKXt2YXIgdD10aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXk7ZT09PSJlbnRyeSI/dGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOnQrIm1zIn0pOmU9PT0iZXhpdCImJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCI6dCsibXMifSl9cmV0dXJuIHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLm5hbWV9fSxfcmVtb3ZlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpLHRoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTt2YXIgcmI9RWUoT2UoKSwxKTt2YXIgbUU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX0sRVc9bmV3IFNldCxPOT1uZXcgU2V0O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKT0+e0VXLmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKT0+e085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO2Z1bmN0aW9uIGdFKGUpe2xldCB0PW5ldyBtRShlKTtyZXR1cm4gRVcuYWRkKHQpLHR9ZnVuY3Rpb24gVFcoZSl7bGV0IHQ9bmV3IG1FKGUpO3JldHVybiBPOS5hZGQodCksdH1mdW5jdGlvbiBDVygpe085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX1mdW5jdGlvbiBBVyhlKXtFVy5kZWxldGUoZSl9ZnVuY3Rpb24gUFcoZSl7TzkuZGVsZXRlKGUpfXZhciBrVz17fTtLcyhrVyx7Z2V0RmFrZUhhc2g6KCk9PkxXLHNldEZha2VIYXNoOigpPT5JVyxzZXRVc2VIYXNoOigpPT5YYmUsdXNlSGFzaDooKT0+ejl9KTt2YXIgejB0PSExO2Z1bmN0aW9uIFhiZShlKXt6MHQ9ZX1mdW5jdGlvbiB6OSgpe3JldHVybiB6MHR9dmFyIEYwdD0iIjtmdW5jdGlvbiBJVyhlKXtGMHQ9ZX1mdW5jdGlvbiBMVygpe3JldHVybiBGMHR9dmFyIFF4PSJfX3RhYl9fIixSVz17fTtmdW5jdGlvbiBCMHQoKXtyZXR1cm4gUld9ZnVuY3Rpb24gSDB0KGUpe1JXPWV9Z0UoKCk9PntSVz1lYih0YigpKX0pO2Z1bmN0aW9uIHRiKCl7cmV0dXJuIHo5KCk/d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk6TFcoKX1mdW5jdGlvbiBlYihlKXtsZXQgdD17fTtyZXR1cm4gZS5zcGxpdCgiJiIpLmZvckVhY2gobj0+e2xldCBpPW4uc3BsaXQoIj0iKTtpLmxlbmd0aD09PTE/dFtReF09aVswXTppLmxlbmd0aD09PTImJih0W2RlY29kZVVSSUNvbXBvbmVudChpWzBdKV09ZGVjb2RlVVJJQ29tcG9uZW50KGlbMV0pKX0pLHR9ZnVuY3Rpb24gRjkoZSx0PSExKXtpZih6OSgpKWlmKHQpe2xldCByPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3IuaGFzaD1lLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwiIixyLnRvU3RyaW5nKCkpfWVsc2Ugd2luZG93LmxvY2F0aW9uLmhhc2g9ZTtlbHNlIElXKGUpfWZ1bmN0aW9uIEI5KGUpe2xldCB0PSIiO2VbUXhdIT09dm9pZCAwJiYodCs9ZVtReF0pO2xldCByPU9iamVjdC5rZXlzKGUpLm1hcChuPT5bbixlW25dXSkuZmlsdGVyKG49Pm5bMF0hPT1ReCkubWFwKG49PmVuY29kZVVSSUNvbXBvbmVudChuWzBdKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pKS5qb2luKCImIik7cmV0dXJuIHIubGVuZ3RoPjA/dCsiJiIrcjp0fWZ1bmN0aW9uIFYwdChlLHQ9ITEpe2xldCByPWViKHRiKCkpO2RlbGV0ZSByW2VdLEY5KEI5KHIpLHQpfXZhciBxMHQ9ImRpc2FtYmlndWF0b3IiLHtnZXQ6JGJlLHNldDpLYmUsZ2V0SW5pdGlhbGl6ZXI6eV8sZ2V0T2JzZXJ2ZXI6dl8sZGlzcG9zZUJpbmRpbmc6WmJlfT12RShlPT5lLGU9PmUpLHtnZXQ6SmJlLHNldDpRYmUsZ2V0SW5pdGlhbGl6ZXI6dnAsZ2V0T2JzZXJ2ZXI6eHAsZGlzcG9zZUJpbmRpbmc6dDJlfT12RShlPT5lPT09InRydWUiPyEwOmU9PT0iZmFsc2UiPyExOnZvaWQgMCxlPT5lLnRvU3RyaW5nKCkpLHtnZXQ6Tlcsc2V0OkRXLGdldEluaXRpYWxpemVyOl9FLGdldE9ic2VydmVyOnlFLGRpc3Bvc2VCaW5kaW5nOmUyZX09dkUoZT0+K2UsZT0+ZS50b1N0cmluZygpKSx7Z2V0OnIyZSxzZXQ6bjJlLGdldEluaXRpYWxpemVyOk9XLGdldE9ic2VydmVyOnpXLGRpc3Bvc2VCaW5kaW5nOmkyZX09dkUoZT0+SlNPTi5wYXJzZShhdG9iKGUpKSxlPT5idG9hKEpTT04uc3RyaW5naWZ5KGUpKSk7ZnVuY3Rpb24gdkUoZSx0KXtsZXQgcj1bXSxuPVtdO2Z1bmN0aW9uIGkoYyx1PXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmgsdXNlTG9jYWxTdG9yYWdlOmY9ITF9PXUscD1mP3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShjKTplYih0YigpKVtjXTtyZXR1cm4gcD09bnVsbD9yYi5jbG9uZURlZXAoaCk6ZShwKX1mdW5jdGlvbiBvKGMsdSxoPXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmYsdXNlTG9jYWxTdG9yYWdlOnA9ITEsdXNlTG9jYXRpb25SZXBsYWNlOmQ9ITF9PWgsZz10KHUpO2lmKHApd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGMsZyksQ1coKTtlbHNlIGlmKCFyYi5pc0VxdWFsKHUsaShjLHt1c2VMb2NhbFN0b3JhZ2U6cH0pKSlpZihyYi5pc0VxdWFsKHUsZikpVjB0KGMsZCk7ZWxzZXtsZXQgXz1lYih0YigpKTtfW2NdPWcsRjkoQjkoXyksZCl9fWZ1bmN0aW9uIGEoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9VTB0KHRoaXMsYykscD0oKT0+e2xldCBfPWkoZixoKSx5PXRoaXNbaC5wb2x5bWVyUHJvcGVydHldO3JiLmlzRXF1YWwoXyx5KXx8KHRoaXNbaC5wb2x5bWVyUHJvcGVydHldPV8pfSxnPShoLnVzZUxvY2FsU3RvcmFnZT9UVzpnRSkoKCk9PnAoKSk7cmV0dXJuIGgudXNlTG9jYWxTdG9yYWdlP24ucHVzaChnKTpyLnB1c2goZykscCgpLHRoaXNbaC5wb2x5bWVyUHJvcGVydHldfX1mdW5jdGlvbiBzKCl7ci5mb3JFYWNoKGM9PkFXKGMpKSxuLmZvckVhY2goYz0+UFcoYykpfWZ1bmN0aW9uIGwoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9VTB0KHRoaXMsYykscD10aGlzW2gucG9seW1lclByb3BlcnR5XTtvKGYscCxoKX19cmV0dXJue2dldDppLHNldDpvLGdldEluaXRpYWxpemVyOmEsZ2V0T2JzZXJ2ZXI6bCxkaXNwb3NlQmluZGluZzpzfX1mdW5jdGlvbiBvMmUoKXtsZXQgZT1uZXcgU2V0KFsiZXhhbXBsZXNQYXRoIiwiaGlkZU1vZGVsUGFuZTIiLCJtb2RlbE5hbWUxIiwibW9kZWxOYW1lMiIsImluZmVyZW5jZUFkZHJlc3MxIiwiaW5mZXJlbmNlQWRkcmVzczIiLCJtb2RlbFR5cGUiLCJtb2RlbFZlcnNpb24xIiwibW9kZWxWZXJzaW9uMiIsIm1vZGVsU2lnbmF0dXJlMSIsIm1vZGVsU2lnbmF0dXJlMiIsIm1heEV4YW1wbGVzIiwibGFiZWxWb2NhYlBhdGgiLCJtdWx0aUNsYXNzIiwic2VxdWVuY2VFeGFtcGxlcyIsIm1heENsYXNzZXNUb0Rpc3BsYXkiLCJzYW1wbGluZ09kZHMiLCJ1c2VQcmVkaWN0QXBpIiwicHJlZGljdElucHV0VGVuc29yIiwicHJlZGljdE91dHB1dFRlbnNvciJdKSx0PWViKHRiKCkpO2lmKHRbUXhdPT09IndoYXRpZiIpe2ZvcihsZXQgciBvZiBlKWlmKHIgaW4gdCl7bGV0IG49dFtyXTt0W2BwLndoYXRpZi4ke3J9YF09bn19RjkoQjkodCkpLEgwdCh0KX1mdW5jdGlvbiBVMHQoZSx0KXtsZXQgcj1lW3EwdF07cmV0dXJuKHI9PW51bGw/W3RdOltyLHRdKS5qb2luKCIuIil9dmFyIHhFPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RhZ0ZpbHRlcj15XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSkuY2FsbCh0aGlzKSx0aGlzLl90YWdGaWx0ZXJPYnNlcnZlcj12XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSl9X2NvbXB1dGVUYWdGaWx0ZXIoKXtyZXR1cm4gdGhpcy5fdGFnRmlsdGVyfX07eEUudGVtcGxhdGU9UWAKICAgIDxwYXBlci1pbnB1dAogICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICBsYWJlbD0iRmlsdGVyIHRhZ3MgKHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydGVkKSIKICAgICAgdmFsdWU9Int7X3RhZ0ZpbHRlcn19IgogICAgICBjbGFzcz0ic2VhcmNoLWlucHV0IgogICAgPgogICAgICA8aXJvbi1pY29uIHByZWZpeD0iIiBpY29uPSJzZWFyY2giIHNsb3Q9InByZWZpeCI+PC9pcm9uLWljb24+CiAgICA8L3BhcGVyLWlucHV0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAxMHB4IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlVGFnRmlsdGVyKF90YWdGaWx0ZXIpIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsInRhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3RhZ0ZpbHRlck9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7eEU9RShbeXQoInRmLXRhZy1maWx0ZXJlciIpXSx4RSk7ZnVuY3Rpb24gX3MoZSl7bGV0e21vZHVsZU5hbWU6dCxzdHlsZUNvbnRlbnQ6cn09ZSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksbz1bXTtlLnN0eWxlRGVwZW5kZW5jaWVzJiZlLnN0eWxlRGVwZW5kZW5jaWVzLmZvckVhY2gocz0+e2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bC5zZXRBdHRyaWJ1dGUoImluY2x1ZGUiLHMpLG8ucHVzaChsKX0pO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7T2JqZWN0LmFzc2lnbihhLHt0ZXh0Q29udGVudDpyfSksby5mb3JFYWNoKHM9PntpLmNvbnRlbnQuYXBwZW5kQ2hpbGQocyl9KSxpLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYSksbi5hcHBlbmRDaGlsZChpKSxuLnJlZ2lzdGVyKHQpfV9zKHttb2R1bGVOYW1lOiJkYXNoYm9hcmQtc3R5bGUiLHN0eWxlRGVwZW5kZW5jaWVzOlsiaXJvbi1mbGV4Il0sc3R5bGVDb250ZW50OmAKICAgICAgOmhvc3QgewogICAgICAgIC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nOiAxNXB4OwogICAgICAgIC0tc2lkZWJhci1sZWZ0LXBhZGRpbmc6IDMwcHg7CiAgICAgIH0KCiAgICAgIFtzbG90PSdzaWRlYmFyJ10gewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDVweCAwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2V0dGluZ3MgewogICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbGVmdDogdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pbnB1dCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gewogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCB2YXIoLS10Yi11aS1ib3JkZXIpOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBwYWRkaW5nOiB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpIDAKICAgICAgICAgIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpmaXJzdC1vZi10eXBlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpsYXN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIHBhZGRpbmctdG9wOiAwOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICBgfSk7ZnVuY3Rpb24gX28oZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpLHRoaXMub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e3Iuc29tZShpPT5pLmF0dHJpYnV0ZU5hbWU9PT0iY2xhc3MiKSYmdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpfSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITB9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciByO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksKHI9dGhpcy5vYnNlcnZlcik9PW51bGx8fHIuZGlzY29ubmVjdCgpfV9tYXliZVNldERhcmtNb2RlKCl7dGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXJrLW1vZGUiKSl9fX1fcyh7bW9kdWxlTmFtZToic2Nyb2xsYmFyLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICB3aWR0aDogMTBweDsKICAgIH0KCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgIH0KICAgIC5zY3JvbGxiYXIgewogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQogIGB9KTt2YXIgQlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtCVy5zZXRBdHRyaWJ1dGUoImlzIiwiY3VzdG9tLXN0eWxlIik7QlcudGV4dENvbnRlbnQ9YAogIDpyb290IHsKICAgIC0tdGItb3JhbmdlLXdlYWs6ICNmZmE3MjY7CiAgICAtLXRiLW9yYW5nZS1zdHJvbmc6ICNmNTdjMDA7CiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwOwogICAgLS10Yi1ncmV5LWRhcmtlcjogI2UyZTJlMjsKICAgIC0tdGItZ3JleS1saWdodGVyOiAjZjNmM2YzOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTsKICAgIC0tdGItdWktbGlnaHQtYWNjZW50OiAjZTBlMGUwOwogICAgLS10Yi11aS1ib3JkZXI6IHZhcigtLXBhcGVyLWdyZXktMzAwKTsKICAgIC0tdGItZ3JhcGgtZmFkZWQ6ICNlMGQ0YjM7CiAgICAtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAtLXRiLXJhaXNlZC1idXR0b24tc2hhZG93LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7CiAgICAtLXRiLWxheW91dC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgLS10Yi1saW5rOiAjMTk3NmQyOyAvKiBtYXRlcmlhbCBibHVlIDcwMC4gKi8KICAgIC0tdGItbGluay12aXNpdGVkOiAjN2IxZmEyOyAvKiBtYXRlcmlhbCBwdXJwbGUgNzAwLiAqLwogIH0KCiAgOnJvb3QgLmRhcmstbW9kZSB7CiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS03MDApOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTsKICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiAjZmZmOwogICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzMDMwMzA7ICAvKiBtYXRlcmlhbCBncmV5IEE0MDAuICovCiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOwogICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTsKICAgIC0tdGItbGluazogIzQyYTVmNTsgLyogbWF0ZXJpYWwgYmx1ZSA0MDAuICovCiAgICAtLXRiLWxpbmstdmlzaXRlZDogI2JhNjhjODsgLyogbWF0ZXJpYWwgcHVycGxlIDMwMC4gKi8KICAgIC8qIE92ZXJyaWRlcyBwYXBlci1tYXRlcmlhbCAqLwogICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcF8tX2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCksCiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICB9CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChCVyk7dmFyIEhXPWNsYXNzIGV4dGVuZHMgX28obXQpe307SFcudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNpZGViYXIiPgogICAgICA8c2xvdCBuYW1lPSJzaWRlYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjZW50ZXIiPgogICAgICA8c2xvdCBuYW1lPSJjZW50ZXIiIGNsYXNzPSJzY29sbGJhciI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICAjc2lkZWJhciB7CiAgICAgICAgZmxleDogMCAwIHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1iYXNpcywgMjUlKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoLCAzNTBweCk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWluLXdpZHRoLCAyNzBweCk7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgI2NlbnRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NlbnRlciddKSB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAudGYtZ3JhcGgtZGFzaGJvYXJkICNjZW50ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtIVz1FKFt5dCgidGYtZGFzaGJvYXJkLWxheW91dCIpXSxIVyk7dmFyIEcwdD0iVEYuVGVuc29yQm9hcmQuUGFnaW5hdGVkVmlldy5saW1pdCIsYTJlPTEyLEFoPW51bGwsVlc9bmV3IFNldDtmdW5jdGlvbiBVVyhlKXtWVy5hZGQoZSl9ZnVuY3Rpb24gcVcoZSl7VlcuZGVsZXRlKGUpfWZ1bmN0aW9uIEdXKCl7cmV0dXJuIEFoPT1udWxsJiYoQWg9TlcoRzB0LHt1c2VMb2NhbFN0b3JhZ2U6ITB9KSwoQWg9PW51bGx8fCFpc0Zpbml0ZShBaCl8fEFoPD0wKSYmKEFoPWEyZSkpLEFofWZ1bmN0aW9uIHMyZShlKXtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGdvdDogJHtlfWApO2lmKGU8PTApdGhyb3cgbmV3IEVycm9yKGBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBidXQgZ290OiAke2V9YCk7ZSE9PUFoJiYoQWg9ZSxEVyhHMHQsQWgse3VzZUxvY2FsU3RvcmFnZTohMH0pLFZXLmZvckVhY2godD0+e3QoKX0pKX12YXIgbmI9Y2xhc3MgZXh0ZW5kcyBtdHt1cGRhdGVBcnJheVByb3AodCxyLG4pe2xldCBpPXRoaXMuZ2V0KHQpLG89cjtpZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBSYW5nZUVycm9yKGBFeHBlY3RlZCBuZXcgdmFsdWUgdG8gJyR7dH0nIHRvIGJlIGFuIGFycmF5LmApO0FycmF5LmlzQXJyYXkoaSl8fChpPVtdLHRoaXMuc2V0KHQsaSkpO2xldCBhPW5ldyBTZXQoby5tYXAoKGMsdSk9Pm4oYyx1KSkpLHM9MCxsPTA7Zm9yKDtzPGkubGVuZ3RoJiZsPG8ubGVuZ3RoOyl7aWYoYS5oYXMobihpW3NdLHMpKSluKGlbc10scyk9PW4ob1tsXSxsKT90aGlzLnNldChgJHt0fS4ke3N9YCxvW2xdKTp0aGlzLnNwbGljZSh0LHMsMCxvW2xdKTtlbHNle3RoaXMuc3BsaWNlKHQscywxKTtjb250aW51ZX1sKysscysrfXM8aS5sZW5ndGgmJnRoaXMuc3BsaWNlKHQscyksbDxvLmxlbmd0aCYmdGhpcy5wdXNoKHQsLi4uby5zbGljZShsKSl9fTt2YXIgT2k9Y2xhc3MgZXh0ZW5kcyBuYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7bGV0IHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO3RoaXMuX2N0b3I9dGModCx0aGlzLHtwYXJlbnRNb2RlbDohMCxpbnN0YW5jZVByb3BzOntbdGhpcy5hc106ITAsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihyLG4pe3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmZvckVhY2goaT0+e2kuZm9yd2FyZEhvc3RQcm9wKHIsbil9KX19KX1yZXR1cm4hMH1fYm9vdHN0cmFwRG9tKCl7aWYoIXRoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCl8fHRoaXMuX2RvbUJvb3RzdHJhcHBlZClyZXR1cm47bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2ZvcihsZXQgbiBvZiByKWlmKG4udHlwZT09PSJjaGlsZExpc3QiKWZvcihsZXQgaSBvZiBBcnJheS5mcm9tKG4uYWRkZWROb2RlcykpaSBpbnN0YW5jZW9mIEVsZW1lbnQmJmkuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKX0pLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKHI9Pnt0aGlzLnJlbW92ZUNoaWxkKHIpfSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9yZW5kZXJlZEl0ZW1zLmZvckVhY2goKHIsbik9PnRoaXMuX2luc2VydEl0ZW0ocixuKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwfV91cGRhdGVBY3RpdmUoKXshdGhpcy5fZG9tQm9vdHN0cmFwcGVkfHxBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKHQ9Pnt0Lm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSl9KX1fdXBkYXRlRG9tKHQpe2lmKCEhdGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYhKHQucGF0aD09Il9yZW5kZXJlZEl0ZW1zInx8dC5wYXRoPT0iX3JlbmRlcmVkSXRlbXMubGVuZ3RoIikpaWYodC5wYXRoPT09Il9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2gobj0+e2xldHtpbmRleDppLGFkZGVkQ291bnQ6byxvYmplY3Q6YSxyZW1vdmVkOnN9PW47cy5mb3JFYWNoKGw9Pnt0aGlzLl9yZW1vdmVJdGVtKGwsdGhpcy5jaGlsZHJlbltpXSl9KSxhLnNsaWNlKGksaStvKS5mb3JFYWNoKChsLGMpPT50aGlzLl9pbnNlcnRJdGVtKGwsaStjKSksdGhpcy5fdHJpbUNhY2hlKCl9KTtlbHNle2xldCByPXRoaXMuX2dldEl0ZW1LZXkodC52YWx1ZSk7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuaGFzKHIpP3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChyKS5ub3RpZnlQYXRoKHRoaXMuYXMsdC52YWx1ZSk6Y29uc29sZS53YXJuKGBFeHBlY3RlZCAnJHtyfScgdG8gZXhpc3QgaW4gdGhlIERPTSBidXQgY291bGQgbm90IGZpbmQgb25lLmApfX1faW5zZXJ0SXRlbSh0LHIpe2lmKCF0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGVtcGxhdGl6ZWQgYmVmb3JlIGluc2VydGluZyBhbiBpdGVtIik7bGV0IG4saT10aGlzLl9nZXRJdGVtS2V5KHQpO2lmKHRoaXMuX2xydUNhY2hlZEl0ZW1zLmhhcyhpKSluPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmdldChpKSx0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUoaSksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGkpLm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSk7ZWxzZXtsZXQgbz17W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGE9bmV3IHRoaXMuX2N0b3Iobyk7bj1hLnJvb3QsdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Quc2V0KGksYSl9dGhpcy5jaGlsZHJlbltyXT90aGlzLmluc2VydEJlZm9yZShuLHRoaXMuY2hpbGRyZW5bcl0pOigobi5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP0FycmF5LmZyb20obi5jaGlsZHJlbik6W25dKS5mb3JFYWNoKGE9PmEuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSksdGhpcy5hcHBlbmRDaGlsZChuKSl9X3JlbW92ZUl0ZW0odCxyKXtyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKTtsZXQgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLHIpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2xldFt0XT10aGlzLl9scnVDYWNoZWRJdGVtcy5rZXlzKCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKHQpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmRlbGV0ZSh0KX19fTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsImFzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxPaS5wcm90b3R5cGUsIml0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT2kucHJvdG90eXBlLCJfY29udGVudEFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfZG9tQm9vdHN0cmFwcGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2N0b3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9pLnByb3RvdHlwZSwiX3JlbmRlcmVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfcmVuZGVyZWRUZW1wbGF0ZUluc3QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfbHJ1Q2FjaGVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfY2FjaGVTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2dldEl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2lzQ29ubmVjdGVkIix2b2lkIDApO0UoW0J0KCJfaXNDb25uZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE9pLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCk7RShbQnQoIl9jb250ZW50QWN0aXZlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl91cGRhdGVBY3RpdmUiLG51bGwpO0UoW0J0KCJfcmVuZGVyZWRJdGVtcy4qIiwiX2RvbUJvb3RzdHJhcHBlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtPYmplY3RdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdXBkYXRlRG9tIixudWxsKTtFKFtCdCgiX2NhY2hlU2l6ZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTt2YXIgaG49Y2xhc3MgZXh0ZW5kcyBPaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxyKXt0JiZ0IT09ciYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmdC5uYW1lPT09IiIpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09TmEuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2xldHt0eXBlOnQsY29tcG9zaXRlU2VhcmNoOnJ9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIHImJnQ9PT1OYS5TRUFSQ0hfUkVTVUxUU31yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5vcGVuZWQ9dGhpcy5pbml0aWFsT3BlbmVkPT1udWxsPyEwOnRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsR1coKSl9LFVXKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe3FXKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5faXRlbXNSZW5kZXJlZCxyPXRoaXMuX2xpbWl0LG49dGhpcy5fYWN0aXZlSW5kZXgsaT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0KXJldHVybjtsZXQgbz1NYXRoLmZsb29yKG4vciksYT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxzPWk/YTphLnNsaWNlKG8qciwobysxKSpyKTt0aGlzLnVwZGF0ZURvbShzKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKHQqMil9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXt2YXIgdD10aGlzLl9saW1pdCxyPXRoaXMuX2FjdGl2ZUluZGV4O3JldHVybiBNYXRoLmZsb29yKHIvdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LHIpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9yKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7dmFyIHQ9dGhpcy5fcGFnZUNvdW50LHI9dGhpcy5kaXNhYmxlUGFnaW5hdGlvbjtyZXR1cm4hciYmdD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2U7cmV0dXJuIHQ+MX1nZXQgX2hhc05leHRQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2Uscj10aGlzLl9wYWdlQ291bnQ7cmV0dXJuIHQ8cn1fY29tcHV0ZUlucHV0V2lkdGgodCl7cmV0dXJuYGNhbGMoJHt0LnRvU3RyaW5nKCkubGVuZ3RofWVtICsgMjBweClgfV9zZXRBY3RpdmVJbmRleCh0KXtsZXQgcj0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ciYmKHQ9ciksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxyLG4pe3JldHVybiB0P3I6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7bGV0IHI9TnVtYmVyKHQudGFyZ2V0LnZhbHVlfHxOYU4pO2lmKGlzTmFOKHIpKXJldHVybjtsZXQgbj1NYXRoLm1heCgxLE1hdGgubWluKHIsdGhpcy5fcGFnZUNvdW50KSktMTt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9saW1pdCpuKX1faGFuZGxlUGFnZUNoYW5nZUV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fY3VycmVudFBhZ2UudG9TdHJpbmcoKSl9X2hhbmRsZVBhZ2VGb2N1c0V2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fcGFnZUlucHV0VmFsdWUpLHRoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITApfV9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9X3VwZGF0ZVBhZ2VJbnB1dFZhbHVlKHQpe3ZhciBuO2xldCByPShuPXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOm4ucXVlcnlTZWxlY3RvcigiI3BhZ2UtaW5wdXQgaW5wdXQiKTtyJiYoci52YWx1ZT10KX1fdXBkYXRlSW5wdXRXaWR0aCgpe3RoaXMudXBkYXRlU3R5bGVzKHsiLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoIjp0aGlzLl9pbnB1dFdpZHRofSl9fTtobi50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPlRhZ3MgbWF0Y2hpbmcgLzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbmFtZSIgdGl0bGUkPSJbW2NhdGVnb3J5Lm5hbWVdXSIKICAgICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZV1dIj4KICAgICAgICAgICAgPHNwYW4+W1tfY291bnRdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImV4cGFuZC1tb3JlIiBjbGFzcz0iZXhwYW5kLWFycm93Ij48L2lyb24taWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8IS0tIFRPRE8oc3RlcGhhbndsZWUpOiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBGb3Igc29tZSByZWFzb24sCiAgICAgICAgdHJhbnNpdGlvbmVuZCB0aGF0IHRoZSBpcm9uLWNvbGxhcHNlIHJlbGllcyBvbiBzb21ldGltZXMgZG9lcyBub3QKICAgICAgICB0cmlnZ2VyIHdoZW4gcmVuZGVyaW5nIGEgY2hhcnQgd2l0aCBhIHNwaW5uZXIuIEEgdG95IGV4YW1wbGUgY2Fubm90CiAgICAgICAgcmVwcm9kdWNlIHRoaXMgYnVnLiAtLT4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb249IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgICBpZD0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iW1tfcGFnZUNvdW50XV0iCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIgogICAgICAgICAgICAgICAgICBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50IgogICAgICAgICAgICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgNXB4IDFweCAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpsYXN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggdmFyKC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3IpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlOwogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbGV4LWJhc2lzOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0naXRlbXMnXSkgewogICAgICAgIC8qIFRvb2x0aXAgZm9yIGRlc2NyaXB0aW9ucyBhbmQgb3RoZXJzIGJyZWFrIHdpdGggbW9yZSBzdHJpY3Qgb25lcy4gKi8KICAgICAgICBjb250YWluOiBzdHlsZTsKICAgICAgfQoKICAgICAgI3BhZ2UtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0tdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXctcGFnZS1pbnB1dC13aWR0aCwgMTAwJSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobi5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saG4ucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxobi5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxobi5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKTtFKFtSdCgiX2NvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc011bHRpcGxlIixudWxsKTtFKFtCdCgib3BlbmVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW0Jvb2xlYW5dKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2hhbmdlQ29udGVudEFjdGl2ZSIsbnVsbCk7RShbUnQoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCk7RShbQnQoIl9pdGVtc1JlbmRlcmVkIiwiY2F0ZWdvcnkuaXRlbXMuKiIsIl9saW1pdCIsIl9hY3RpdmVJbmRleCIsIl9wYWdlQ291bnQiLCJkaXNhYmxlUGFnaW5hdGlvbiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfdXBkYXRlUmVuZGVyZWRJdGVtcyIsbnVsbCk7RShbUnQoIl9saW1pdCIsIl9hY3RpdmVJbmRleCIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2N1cnJlbnRQYWdlIixudWxsKTtFKFtSdCgiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCk7RShbUnQoIl9jdXJyZW50UGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxobi5wcm90b3R5cGUsIl9oYXNQcmV2aW91c1BhZ2UiLG51bGwpO0UoW1J0KCJfY3VycmVudFBhZ2UiLCJfcGFnZUNvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc05leHRQYWdlIixudWxsKTtFKFtCdCgiY2F0ZWdvcnkuaXRlbXMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCk7aG49RShbeXQoInRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IildLGhuKTt2YXIgVzB0PUVlKE9lKCksMSk7dmFyIEg5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19LGJwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoMSksdGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQsdGhpcy5pbml0aWFsaXplZD0hMX1yZWZyZXNoKCl7cmV0dXJuIHRoaXMubG9hZCgpLnRoZW4oKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSl9YWRkTGlzdGVuZXIodCl7bGV0IHI9bmV3IEg5KHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKHIpLHJ9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCh0PT57dHJ5e3QubGlzdGVuZXIoKX1jYXRjaChyKXt9fSl9fTt2YXIgVjk9Y2xhc3MgZXh0ZW5kcyBicHtsb2FkKCl7bGV0IHQ9X2UoKS5lbnZpcm9ubWVudCgpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57bGV0IG49e2RhdGFMb2NhdGlvbjpyLmRhdGFfbG9jYXRpb24sd2luZG93VGl0bGU6ci53aW5kb3dfdGl0bGV9O3IuZXhwZXJpbWVudF9uYW1lIT09dm9pZCAwJiYobi5leHBlcmltZW50TmFtZT1yLmV4cGVyaW1lbnRfbmFtZSksci5leHBlcmltZW50X2Rlc2NyaXB0aW9uIT09dm9pZCAwJiYobi5leHBlcmltZW50RGVzY3JpcHRpb249ci5leHBlcmltZW50X2Rlc2NyaXB0aW9uKSxyLmNyZWF0aW9uX3RpbWUhPT12b2lkIDAmJihuLmNyZWF0aW9uVGltZT1yLmNyZWF0aW9uX3RpbWUpLCFXMHQuaXNFcXVhbCh0aGlzLmVudmlyb25tZW50LG4pJiYodGhpcy5lbnZpcm9ubWVudD1uLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldERhdGFMb2NhdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZGF0YUxvY2F0aW9uOiIifWdldFdpbmRvd1RpdGxlKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC53aW5kb3dUaXRsZToiIn1nZXRFeHBlcmltZW50TmFtZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudE5hbWU6IiJ9Z2V0RXhwZXJpbWVudERlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50RGVzY3JpcHRpb246IiJ9Z2V0Q3JlYXRpb25UaW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5jcmVhdGlvblRpbWU6bnVsbH19LGliPW5ldyBWOTt2YXIgWTB0PUVlKE9lKCksMSk7dmFyIFU5PWNsYXNzIGV4dGVuZHMgYnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bnM9W119bG9hZCgpe2xldCB0PV9lKCkucnVucygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57WTB0LmlzRXF1YWwodGhpcy5fcnVucyxyKXx8KHRoaXMuX3J1bnM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRSdW5zKCl7cmV0dXJuIHRoaXMuX3J1bnMuc2xpY2UoKX19LHdwPW5ldyBVOTt2YXIgVnI9e307S3MoVnIse0Zvcm1hdFNwZWNpZmllcjooKT0+R0UsYWN0aXZlOigpPT5WdnQsYXJjOigpPT5CU3QsYXJlYTooKT0+ejgsYXJlYVJhZGlhbDooKT0+byQsYXNjZW5kaW5nOigpPT5vYSxhdXRvVHlwZTooKT0+aWosYXhpc0JvdHRvbTooKT0+WjksYXhpc0xlZnQ6KCk9PmxiLGF4aXNSaWdodDooKT0+bV90LGF4aXNUb3A6KCk9PmRfdCxiaXNlY3Q6KCk9PnlzLGJpc2VjdExlZnQ6KCk9PiQwdCxiaXNlY3RSaWdodDooKT0+V1csYmlzZWN0b3I6KCk9Pm9iLGJsb2I6KCk9PkQxdCxicnVzaDooKT0+R0wsYnJ1c2hTZWxlY3Rpb246KCk9PlVMLGJydXNoWDooKT0+anZ0LGJydXNoWTooKT0+cUwsYnVmZmVyOigpPT5PMXQsY2hvcmQ6KCk9PiR2dCxjbGllbnRQb2ludDooKT0+RG0sY2x1c3RlcjooKT0+V2J0LGNvbG9yOigpPT5yYyxjb250b3VyRGVuc2l0eTooKT0+ZzF0LGNvbnRvdXJzOigpPT5aTCxjcmVhdGU6KCk9PnN5dCxjcmVhdG9yOigpPT5SbSxjcm9zczooKT0+cTksY3N2OigpPT5GMXQsY3N2Rm9ybWF0OigpPT5iMXQsY3N2Rm9ybWF0Qm9keTooKT0+dzF0LGNzdkZvcm1hdFJvdzooKT0+TTF0LGNzdkZvcm1hdFJvd3M6KCk9PlMxdCxjc3ZGb3JtYXRWYWx1ZTooKT0+RTF0LGNzdlBhcnNlOigpPT5DYixjc3ZQYXJzZVJvd3M6KCk9PngxdCxjdWJlaGVsaXg6KCk9PmxhLGN1cnZlQmFzaXM6KCk9Plc4LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PlFTdCxjdXJ2ZUJhc2lzT3BlbjooKT0+ZTN0LGN1cnZlQnVuZGxlOigpPT5uM3QsY3VydmVDYXJkaW5hbDooKT0+aTN0LGN1cnZlQ2FyZGluYWxDbG9zZWQ6KCk9Pm8zdCxjdXJ2ZUNhcmRpbmFsT3BlbjooKT0+YTN0LGN1cnZlQ2F0bXVsbFJvbTooKT0+bDN0LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDooKT0+dTN0LGN1cnZlQ2F0bXVsbFJvbU9wZW46KCk9PmYzdCxjdXJ2ZUxpbmVhcjooKT0+WWgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9PmQzdCxjdXJ2ZU1vbm90b25lWDooKT0+eDN0LGN1cnZlTW9ub3RvbmVZOigpPT5iM3QsY3VydmVOYXR1cmFsOigpPT5NM3QsY3VydmVTdGVwOigpPT5FM3QsY3VydmVTdGVwQWZ0ZXI6KCk9PkMzdCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PlQzdCxjdXN0b21FdmVudDooKT0+TXAsZGVzY2VuZGluZzooKT0+WjB0LGRldmlhdGlvbjooKT0+VzksZGlzcGF0Y2g6KCk9PnZzLGRyYWc6KCk9PnBiLGRyYWdEaXNhYmxlOigpPT56bSxkcmFnRW5hYmxlOigpPT5GbSxkc3Y6KCk9Pm9qLGRzdkZvcm1hdDooKT0+V20sZWFzZUJhY2s6KCk9Pk9MLGVhc2VCYWNrSW46KCk9Pk9ZLGVhc2VCYWNrSW5PdXQ6KCk9Pk9MLGVhc2VCYWNrT3V0OigpPT56WSxlYXNlQm91bmNlOigpPT5QXyxlYXNlQm91bmNlSW46KCk9PlJZLGVhc2VCb3VuY2VJbk91dDooKT0+TlksZWFzZUJvdW5jZU91dDooKT0+UF8sZWFzZUNpcmNsZTooKT0+TkwsZWFzZUNpcmNsZUluOigpPT5JWSxlYXNlQ2lyY2xlSW5PdXQ6KCk9Pk5MLGVhc2VDaXJjbGVPdXQ6KCk9PkxZLGVhc2VDdWJpYzooKT0+eHMsZWFzZUN1YmljSW46KCk9PnhZLGVhc2VDdWJpY0luT3V0OigpPT54cyxlYXNlQ3ViaWNPdXQ6KCk9PmJZLGVhc2VFbGFzdGljOigpPT56TCxlYXNlRWxhc3RpY0luOigpPT5IWSxlYXNlRWxhc3RpY0luT3V0OigpPT5WWSxlYXNlRWxhc3RpY091dDooKT0+ekwsZWFzZUV4cDooKT0+UkwsZWFzZUV4cEluOigpPT5BWSxlYXNlRXhwSW5PdXQ6KCk9PlJMLGVhc2VFeHBPdXQ6KCk9PlBZLGVhc2VMaW5lYXI6KCk9Pl9ZLGVhc2VQb2x5OigpPT5MTCxlYXNlUG9seUluOigpPT5TWSxlYXNlUG9seUluT3V0OigpPT5MTCxlYXNlUG9seU91dDooKT0+TVksZWFzZVF1YWQ6KCk9PklMLGVhc2VRdWFkSW46KCk9PnlZLGVhc2VRdWFkSW5PdXQ6KCk9PklMLGVhc2VRdWFkT3V0OigpPT52WSxlYXNlU2luOigpPT5rTCxlYXNlU2luSW46KCk9PkVZLGVhc2VTaW5Jbk91dDooKT0+a0wsZWFzZVNpbk91dDooKT0+VFksZW50cmllczooKT0+dTF0LGV2ZW50OigpPT5xdCxleHRlbnQ6KCk9PmFhLGZvcmNlQ2VudGVyOigpPT5XMXQsZm9yY2VDb2xsaWRlOigpPT51eHQsZm9yY2VMaW5rOigpPT5meHQsZm9yY2VNYW55Qm9keTooKT0+Z3h0LGZvcmNlUmFkaWFsOigpPT5feHQsZm9yY2VTaW11bGF0aW9uOigpPT5teHQsZm9yY2VYOigpPT55eHQsZm9yY2VZOigpPT52eHQsZm9ybWF0OigpPT54bixmb3JtYXREZWZhdWx0TG9jYWxlOigpPT5uayxmb3JtYXRMb2NhbGU6KCk9PmVrLGZvcm1hdFByZWZpeDooKT0+V0UsZm9ybWF0U3BlY2lmaWVyOigpPT5McCxnZW9BbGJlcnM6KCk9PlVrLGdlb0FsYmVyc1VzYTooKT0+TGJ0LGdlb0FyZWE6KCk9Pk54dCxnZW9BemltdXRoYWxFcXVhbEFyZWE6KCk9PmtidCxnZW9BemltdXRoYWxFcXVhbEFyZWFSYXc6KCk9PkdrLGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OigpPT5SYnQsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PldrLGdlb0JvdW5kczooKT0+VXh0LGdlb0NlbnRyb2lkOigpPT5YeHQsZ2VvQ2lyY2xlOigpPT5ReHQsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+ZTUsZ2VvQ2xpcENpcmNsZTooKT0+QWssZ2VvQ2xpcEV4dGVudDooKT0+cmJ0LGdlb0NsaXBSZWN0YW5nbGU6KCk9PkRwLGdlb0NvbmljQ29uZm9ybWFsOigpPT5EYnQsZ2VvQ29uaWNDb25mb3JtYWxSYXc6KCk9PmpqLGdlb0NvbmljRXF1YWxBcmVhOigpPT5XXyxnZW9Db25pY0VxdWFsQXJlYVJhdzooKT0+V2osZ2VvQ29uaWNFcXVpZGlzdGFudDooKT0+emJ0LGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PlhqLGdlb0NvbnRhaW5zOigpPT5jYnQsZ2VvRGlzdGFuY2U6KCk9Pk5iLGdlb0VxdWFsRWFydGg6KCk9PkZidCxnZW9FcXVhbEVhcnRoUmF3OigpPT5YayxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9Pk9idCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9PmpfLGdlb0dub21vbmljOigpPT5CYnQsZ2VvR25vbW9uaWNSYXc6KCk9PiRrLGdlb0dyYXRpY3VsZTooKT0+TmssZ2VvR3JhdGljdWxlMTA6KCk9PmZidCxnZW9JZGVudGl0eTooKT0+SGJ0LGdlb0ludGVycG9sYXRlOigpPT5wYnQsZ2VvTGVuZ3RoOigpPT5rayxnZW9NZXJjYXRvcjooKT0+TmJ0LGdlb01lcmNhdG9yUmF3OigpPT5ZXyxnZW9OYXR1cmFsRWFydGgxOigpPT5WYnQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+S2ssZ2VvT3J0aG9ncmFwaGljOigpPT5VYnQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5aayxnZW9QYXRoOigpPT5UYnQsZ2VvUHJvamVjdGlvbjooKT0+U2ksZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9Pmw1LGdlb1JvdGF0aW9uOigpPT53ayxnZW9TdGVyZW9ncmFwaGljOigpPT5xYnQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+SmssZ2VvU3RyZWFtOigpPT52byxnZW9UcmFuc2Zvcm06KCk9PkNidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PkdidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PlFrLGdyYXk6KCk9PlN5dCxoY2w6KCk9PmdiLGhpZXJhcmNoeTooKT0+cDUsaGlzdG9ncmFtOigpPT5yX3QsaHNsOigpPT5WbSxodG1sOigpPT5xMXQsaW1hZ2U6KCk9PkgxdCxpbnRlcnBvbGF0ZTooKT0+bmMsaW50ZXJwb2xhdGVBcnJheTooKT0+RHl0LGludGVycG9sYXRlQmFzaXM6KCk9PmxMLGludGVycG9sYXRlQmFzaXNDbG9zZWQ6KCk9PmNMLGludGVycG9sYXRlQmx1ZXM6KCk9PnhTdCxpbnRlcnBvbGF0ZUJyQkc6KCk9PlF3dCxpbnRlcnBvbGF0ZUJ1R246KCk9PmxTdCxpbnRlcnBvbGF0ZUJ1UHU6KCk9PmNTdCxpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PlRTdCxpbnRlcnBvbGF0ZUNvb2w6KCk9PlBTdCxpbnRlcnBvbGF0ZUN1YmVoZWxpeDooKT0+Snl0LGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+Q1N0LGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzooKT0+RV8saW50ZXJwb2xhdGVEYXRlOigpPT5mTCxpbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5PeXQsaW50ZXJwb2xhdGVHbkJ1OigpPT51U3QsaW50ZXJwb2xhdGVHcmVlbnM6KCk9PmJTdCxpbnRlcnBvbGF0ZUdyZXlzOigpPT53U3QsaW50ZXJwb2xhdGVIY2w6KCk9PiR5dCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9Pkt5dCxpbnRlcnBvbGF0ZUhzbDooKT0+WXl0LGludGVycG9sYXRlSHNsTG9uZzooKT0+anl0LGludGVycG9sYXRlSHVlOigpPT56eXQsaW50ZXJwb2xhdGVJbmZlcm5vOigpPT5EU3QsaW50ZXJwb2xhdGVMYWI6KCk9Pk1fLGludGVycG9sYXRlTWFnbWE6KCk9Pk5TdCxpbnRlcnBvbGF0ZU51bWJlcjooKT0+emksaW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+eWIsaW50ZXJwb2xhdGVPYmplY3Q6KCk9PnBMLGludGVycG9sYXRlT3JSZDooKT0+aFN0LGludGVycG9sYXRlT3JhbmdlczooKT0+RVN0LGludGVycG9sYXRlUFJHbjooKT0+dFN0LGludGVycG9sYXRlUGlZRzooKT0+ZVN0LGludGVycG9sYXRlUGxhc21hOigpPT5PU3QsaW50ZXJwb2xhdGVQdUJ1OigpPT5wU3QsaW50ZXJwb2xhdGVQdUJ1R246KCk9PmZTdCxpbnRlcnBvbGF0ZVB1T3I6KCk9PnJTdCxpbnRlcnBvbGF0ZVB1UmQ6KCk9PmRTdCxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PlNTdCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PklTdCxpbnRlcnBvbGF0ZVJkQnU6KCk9Pm5TdCxpbnRlcnBvbGF0ZVJkR3k6KCk9PmlTdCxpbnRlcnBvbGF0ZVJkUHU6KCk9Pm1TdCxpbnRlcnBvbGF0ZVJkWWxCdTooKT0+b1N0LGludGVycG9sYXRlUmRZbEduOigpPT5hU3QsaW50ZXJwb2xhdGVSZWRzOigpPT5NU3QsaW50ZXJwb2xhdGVSZ2I6KCk9PnFtLGludGVycG9sYXRlUmdiQmFzaXM6KCk9PnVMLGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pk55dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5kTCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9PkxTdCxpbnRlcnBvbGF0ZVNwZWN0cmFsOigpPT5zU3QsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PnZiLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5fTCxpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZzooKT0+eUwsaW50ZXJwb2xhdGVUdXJibzooKT0+a1N0LGludGVycG9sYXRlVmlyaWRpczooKT0+UlN0LGludGVycG9sYXRlV2FybTooKT0+QVN0LGludGVycG9sYXRlWWxHbjooKT0+X1N0LGludGVycG9sYXRlWWxHbkJ1OigpPT5nU3QsaW50ZXJwb2xhdGVZbE9yQnI6KCk9PnlTdCxpbnRlcnBvbGF0ZVlsT3JSZDooKT0+dlN0LGludGVycG9sYXRlWm9vbTooKT0+dkwsaW50ZXJydXB0OigpPT5odSxpbnRlcnZhbDooKT0+bnZ0LGlzb0Zvcm1hdDooKT0+Rnd0LGlzb1BhcnNlOigpPT5Cd3QsanNvbjooKT0+VjF0LGtleXM6KCk9PiRMLGxhYjooKT0+d18sbGNoOigpPT5FeXQsbGluZTooKT0+dnUsbGluZVJhZGlhbDooKT0+aSQsbGlua0hvcml6b250YWw6KCk9PldTdCxsaW5rUmFkaWFsOigpPT5qU3QsbGlua1ZlcnRpY2FsOigpPT5ZU3QsbG9jYWw6KCk9PmVMLG1hcDooKT0+SmksbWF0Y2hlcjooKT0+dWIsbWF4OigpPT5sdSxtZWFuOigpPT5vX3QsbWVkaWFuOigpPT5hX3QsbWVyZ2U6KCk9PkltLG1pbjooKT0+TG0sbW91c2U6KCk9PnpvLG5hbWVzcGFjZTooKT0+UGgsbmFtZXNwYWNlczooKT0+U0UsbmVzdDooKT0+cjF0LG5vdzooKT0+QXAscGFjazooKT0+ZDJ0LHBhY2tFbmNsb3NlOigpPT5lOCxwYWNrU2libGluZ3M6KCk9PnUydCxwYWlyczooKT0+SzB0LHBhcnRpdGlvbjooKT0+bTJ0LHBhdGg6KCk9PmJzLHBlcm11dGU6KCk9PnNfdCxwaWU6KCk9PnFTdCxwaWVjZXdpc2U6KCk9PmRZLHBvaW50UmFkaWFsOigpPT5seSxwb2x5Z29uQXJlYTooKT0+TTJ0LHBvbHlnb25DZW50cm9pZDooKT0+RTJ0LHBvbHlnb25Db250YWluczooKT0+UDJ0LHBvbHlnb25IdWxsOigpPT5BMnQscG9seWdvbkxlbmd0aDooKT0+STJ0LHByZWNpc2lvbkZpeGVkOigpPT5payxwcmVjaXNpb25QcmVmaXg6KCk9Pm9rLHByZWNpc2lvblJvdW5kOigpPT5hayxxdWFkdHJlZTooKT0+emgscXVhbnRpbGU6KCk9PnNhLHF1YW50aXplOigpPT5ReXQscmFkaWFsQXJlYTooKT0+byQscmFkaWFsTGluZTooKT0+aSQscmFuZG9tQmF0ZXM6KCk9PlIydCxyYW5kb21FeHBvbmVudGlhbDooKT0+TjJ0LHJhbmRvbUlyd2luSGFsbDooKT0+czgscmFuZG9tTG9nTm9ybWFsOigpPT5rMnQscmFuZG9tTm9ybWFsOigpPT5hOCxyYW5kb21Vbmlmb3JtOigpPT5MMnQscmFuZ2U6KCk9PklyLHJnYjooKT0+Y3UscmliYm9uOigpPT5KdnQsc2NhbGVCYW5kOigpPT5RbSxzY2FsZURpdmVyZ2luZzooKT0+STgsc2NhbGVEaXZlcmdpbmdMb2c6KCk9PkNYLHNjYWxlRGl2ZXJnaW5nUG93OigpPT5MOCxzY2FsZURpdmVyZ2luZ1NxcnQ6KCk9PnF3dCxzY2FsZURpdmVyZ2luZ1N5bWxvZzooKT0+QVgsc2NhbGVJZGVudGl0eTooKT0+dTgsc2NhbGVJbXBsaWNpdDooKT0+bDgsc2NhbGVMaW5lYXI6KCk9Pk9uLHNjYWxlTG9nOigpPT5jYyxzY2FsZU9yZGluYWw6KCk9Pmd1LHNjYWxlUG9pbnQ6KCk9PnRnLHNjYWxlUG93OigpPT5LXyxzY2FsZVF1YW50aWxlOigpPT5lZyxzY2FsZVF1YW50aXplOigpPT5xYixzY2FsZVNlcXVlbnRpYWw6KCk9PlQ4LHNjYWxlU2VxdWVudGlhbExvZzooKT0+RVgsc2NhbGVTZXF1ZW50aWFsUG93OigpPT5DOCxzY2FsZVNlcXVlbnRpYWxRdWFudGlsZTooKT0+QTgsc2NhbGVTZXF1ZW50aWFsU3FydDooKT0+VXd0LHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+VFgsc2NhbGVTcXJ0OigpPT5ZMnQsc2NhbGVTeW1sb2c6KCk9PmY4LHNjYWxlVGhyZXNob2xkOigpPT5wOCxzY2FsZVRpbWU6KCk9PlliLHNjYWxlVXRjOigpPT5Wd3Qsc2NhbjooKT0+bF90LHNjaGVtZUFjY2VudDooKT0+R3d0LHNjaGVtZUJsdWVzOigpPT5LWCxzY2hlbWVCckJHOigpPT5QWCxzY2hlbWVCdUduOigpPT5GWCxzY2hlbWVCdVB1OigpPT5CWCxzY2hlbWVDYXRlZ29yeTEwOigpPT5qYixzY2hlbWVEYXJrMjooKT0+V3d0LHNjaGVtZUduQnU6KCk9PkhYLHNjaGVtZUdyZWVuczooKT0+Wlgsc2NoZW1lR3JleXM6KCk9PkpYLHNjaGVtZU9yUmQ6KCk9PlZYLHNjaGVtZU9yYW5nZXM6KCk9PmUkLHNjaGVtZVBSR246KCk9PklYLHNjaGVtZVBhaXJlZDooKT0+WXd0LHNjaGVtZVBhc3RlbDE6KCk9Pmp3dCxzY2hlbWVQYXN0ZWwyOigpPT5Yd3Qsc2NoZW1lUGlZRzooKT0+TFgsc2NoZW1lUHVCdTooKT0+cVgsc2NoZW1lUHVCdUduOigpPT5VWCxzY2hlbWVQdU9yOigpPT5rWCxzY2hlbWVQdVJkOigpPT5HWCxzY2hlbWVQdXJwbGVzOigpPT5RWCxzY2hlbWVSZEJ1OigpPT5SWCxzY2hlbWVSZEd5OigpPT5OWCxzY2hlbWVSZFB1OigpPT5XWCxzY2hlbWVSZFlsQnU6KCk9PkRYLHNjaGVtZVJkWWxHbjooKT0+T1gsc2NoZW1lUmVkczooKT0+dCQsc2NoZW1lU2V0MTooKT0+JHd0LHNjaGVtZVNldDI6KCk9Pkt3dCxzY2hlbWVTZXQzOigpPT5ad3Qsc2NoZW1lU3BlY3RyYWw6KCk9PnpYLHNjaGVtZVRhYmxlYXUxMDooKT0+Snd0LHNjaGVtZVlsR246KCk9PmpYLHNjaGVtZVlsR25CdTooKT0+WVgsc2NoZW1lWWxPckJyOigpPT5YWCxzY2hlbWVZbE9yUmQ6KCk9PiRYLHNlbGVjdDooKT0+SHQsc2VsZWN0QWxsOigpPT5FcCxzZWxlY3Rpb246KCk9PkloLHNlbGVjdG9yOigpPT5ObSxzZWxlY3RvckFsbDooKT0+Y2Isc2V0OigpPT5vMXQsc2h1ZmZsZTooKT0+Y190LHN0YWNrOigpPT5BM3Qsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PkkzdCxzdGFja09mZnNldEV4cGFuZDooKT0+UDN0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+eHUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5MM3Qsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PmszdCxzdGFja09yZGVyQXBwZWFyYW5jZTooKT0+Wjgsc3RhY2tPcmRlckFzY2VuZGluZzooKT0+Sjgsc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PlIzdCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5OM3Qsc3RhY2tPcmRlck5vbmU6KCk9PmJ1LHN0YWNrT3JkZXJSZXZlcnNlOigpPT5EM3Qsc3RyYXRpZnk6KCk9PnkydCxzdHlsZTooKT0+U3Asc3VtOigpPT51X3Qsc3ZnOigpPT5HMXQsc3ltYm9sOigpPT5aU3Qsc3ltYm9sQ2lyY2xlOigpPT5rNSxzeW1ib2xDcm9zczooKT0+Qjgsc3ltYm9sRGlhbW9uZDooKT0+SDgsc3ltYm9sU3F1YXJlOigpPT5VOCxzeW1ib2xTdGFyOigpPT5WOCxzeW1ib2xUcmlhbmdsZTooKT0+cTgsc3ltYm9sV3llOigpPT5HOCxzeW1ib2xzOigpPT5LU3QsdGV4dDooKT0+RF8sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczooKT0+bl90LHRocmVzaG9sZFNjb3R0OigpPT5pX3QsdGhyZXNob2xkU3R1cmdlczooKT0+c2IsdGlja0Zvcm1hdDooKT0+YzgsdGlja0luY3JlbWVudDooKT0+eF8sdGlja1N0ZXA6KCk9PnRsLHRpY2tzOigpPT5hYix0aW1lRGF5OigpPT50eSx0aW1lRGF5czooKT0+UTJ0LHRpbWVGb3JtYXQ6KCk9Pk01LHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOigpPT5TOCx0aW1lRm9ybWF0TG9jYWxlOigpPT5TNSx0aW1lRnJpZGF5OigpPT51WCx0aW1lRnJpZGF5czooKT0+aXd0LHRpbWVIb3VyOigpPT55OCx0aW1lSG91cnM6KCk9PloydCx0aW1lSW50ZXJ2YWw6KCk9PmJyLHRpbWVNaWxsaXNlY29uZDooKT0+Wl8sdGltZU1pbGxpc2Vjb25kczooKT0+YVgsdGltZU1pbnV0ZTooKT0+XzgsdGltZU1pbnV0ZXM6KCk9PiQydCx0aW1lTW9uZGF5OigpPT5yeSx0aW1lTW9uZGF5czooKT0+dHd0LHRpbWVNb250aDooKT0+djgsdGltZU1vbnRoczooKT0+c3d0LHRpbWVQYXJzZTooKT0+d1gsdGltZVNhdHVyZGF5OigpPT5oWCx0aW1lU2F0dXJkYXlzOigpPT5vd3QsdGltZVNlY29uZDooKT0+UV8sdGltZVNlY29uZHM6KCk9PnNYLHRpbWVTdW5kYXk6KCk9PnJnLHRpbWVTdW5kYXlzOigpPT5mWCx0aW1lVGh1cnNkYXk6KCk9PnpwLHRpbWVUaHVyc2RheXM6KCk9Pm53dCx0aW1lVHVlc2RheTooKT0+bFgsdGltZVR1ZXNkYXlzOigpPT5ld3QsdGltZVdlZG5lc2RheTooKT0+Y1gsdGltZVdlZG5lc2RheXM6KCk9PnJ3dCx0aW1lV2VlazooKT0+cmcsdGltZVdlZWtzOigpPT5mWCx0aW1lWWVhcjooKT0+R2gsdGltZVllYXJzOigpPT5sd3QsdGltZW91dDooKT0+ekUsdGltZXI6KCk9PkFfLHRpbWVyRmx1c2g6KCk9PmdZLHRvdWNoOigpPT5UcCx0b3VjaGVzOigpPT5seXQsdHJhbnNpdGlvbjooKT0+UEwsdHJhbnNwb3NlOigpPT5ZOSx0cmVlOigpPT52MnQsdHJlZW1hcDooKT0+eDJ0LHRyZWVtYXBCaW5hcnk6KCk9PmIydCx0cmVlbWFwRGljZTooKT0+VWgsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PlMydCx0cmVlbWFwU2xpY2U6KCk9PkptLHRyZWVtYXBTbGljZURpY2U6KCk9PncydCx0cmVlbWFwU3F1YXJpZnk6KCk9Pm84LHRzdjooKT0+QjF0LHRzdkZvcm1hdDooKT0+QTF0LHRzdkZvcm1hdEJvZHk6KCk9PlAxdCx0c3ZGb3JtYXRSb3c6KCk9PkwxdCx0c3ZGb3JtYXRSb3dzOigpPT5JMXQsdHN2Rm9ybWF0VmFsdWU6KCk9PmsxdCx0c3ZQYXJzZTooKT0+QWIsdHN2UGFyc2VSb3dzOigpPT5DMXQsdXRjRGF5OigpPT5ueSx1dGNEYXlzOigpPT5kd3QsdXRjRm9ybWF0OigpPT5heSx1dGNGcmlkYXk6KCk9PmdYLHV0Y0ZyaWRheXM6KCk9PnZ3dCx1dGNIb3VyOigpPT5iOCx1dGNIb3VyczooKT0+Znd0LHV0Y01pbGxpc2Vjb25kOigpPT5aXyx1dGNNaWxsaXNlY29uZHM6KCk9PmFYLHV0Y01pbnV0ZTooKT0+eDgsdXRjTWludXRlczooKT0+dXd0LHV0Y01vbmRheTooKT0+b3ksdXRjTW9uZGF5czooKT0+bXd0LHV0Y01vbnRoOigpPT53OCx1dGNNb250aHM6KCk9Pnd3dCx1dGNQYXJzZTooKT0+RTUsdXRjU2F0dXJkYXk6KCk9Pl9YLHV0Y1NhdHVyZGF5czooKT0+eHd0LHV0Y1NlY29uZDooKT0+UV8sdXRjU2Vjb25kczooKT0+c1gsdXRjU3VuZGF5OigpPT5uZyx1dGNTdW5kYXlzOigpPT55WCx1dGNUaHVyc2RheTooKT0+RnAsdXRjVGh1cnNkYXlzOigpPT55d3QsdXRjVHVlc2RheTooKT0+ZFgsdXRjVHVlc2RheXM6KCk9Pmd3dCx1dGNXZWRuZXNkYXk6KCk9Pm1YLHV0Y1dlZG5lc2RheXM6KCk9Pl93dCx1dGNXZWVrOigpPT5uZyx1dGNXZWVrczooKT0+eVgsdXRjWWVhcjooKT0+V2gsdXRjWWVhcnM6KCk9PlN3dCx2YWx1ZXM6KCk9PmwxdCx2YXJpYW5jZTooKT0+RzksdmVyc2lvbjooKT0+ajB0LHZvcm9ub2k6KCk9PkszdCx3aW5kb3c6KCk9PmhiLHhtbDooKT0+VTF0LHppcDooKT0+aF90LHpvb206KCk9PmVSLHpvb21JZGVudGl0eTooKT0+WGgsem9vbVRyYW5zZm9ybTooKT0+aTJ9KTt2YXIgajB0PSI1LjcuMCI7ZnVuY3Rpb24gb2EoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gb2IoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9bDJlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gbDJlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBvYShlKHQpLHIpfX12YXIgWDB0PW9iKG9hKSxXVz1YMHQucmlnaHQsJDB0PVgwdC5sZWZ0LHlzPVdXO2Z1bmN0aW9uIEswdChlLHQpe3Q9PW51bGwmJih0PVlXKTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT10KGksaT1lWysrcl0pO3JldHVybiBvfWZ1bmN0aW9uIFlXKGUsdCl7cmV0dXJuW2UsdF19ZnVuY3Rpb24gcTkoZSx0LHIpe3ZhciBuPWUubGVuZ3RoLGk9dC5sZW5ndGgsbz1uZXcgQXJyYXkobippKSxhLHMsbCxjO2ZvcihyPT1udWxsJiYocj1ZVyksYT1sPTA7YTxuOysrYSlmb3IoYz1lW2FdLHM9MDtzPGk7KytzLCsrbClvW2xdPXIoYyx0W3NdKTtyZXR1cm4gb31mdW5jdGlvbiBaMHQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gUXMoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX1mdW5jdGlvbiBHOShlLHQpe3ZhciByPWUubGVuZ3RoLG49MCxpPS0xLG89MCxhLHMsbD0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4oYT1RcyhlW2ldKSl8fChzPWEtbyxvKz1zLysrbixsKz1zKihhLW8pKTtlbHNlIGZvcig7KytpPHI7KWlzTmFOKGE9UXModChlW2ldLGksZSkpKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2lmKG4+MSlyZXR1cm4gbC8obi0xKX1mdW5jdGlvbiBXOShlLHQpe3ZhciByPUc5KGUsdCk7cmV0dXJuIHImJk1hdGguc3FydChyKX1mdW5jdGlvbiBhYShlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvLGE7aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJihvPmkmJihvPWkpLGE8aSYmKGE9aSkpO3JldHVybltvLGFdfXZhciBKMHQ9QXJyYXkucHJvdG90eXBlLFEwdD1KMHQuc2xpY2UsdF90PUowdC5tYXA7ZnVuY3Rpb24gYkUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGVfdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBJcihlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgalc9TWF0aC5zcXJ0KDUwKSxYVz1NYXRoLnNxcnQoMTApLCRXPU1hdGguc3FydCgyKTtmdW5jdGlvbiBhYihlLHQscil7dmFyIG4saT0tMSxvLGEscztpZih0PSt0LGU9K2Uscj0rcixlPT09dCYmcj4wKXJldHVybltlXTtpZigobj10PGUpJiYobz1lLGU9dCx0PW8pLChzPXhfKGUsdCxyKSk9PT0wfHwhaXNGaW5pdGUocykpcmV0dXJuW107aWYocz4wKWZvcihlPU1hdGguY2VpbChlL3MpLHQ9TWF0aC5mbG9vcih0L3MpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtZSsxKSk7KytpPG87KWFbaV09KGUraSkqcztlbHNlIGZvcihlPU1hdGguZmxvb3IoZSpzKSx0PU1hdGguY2VpbCh0KnMpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKGUtdCsxKSk7KytpPG87KWFbaV09KGUtaSkvcztyZXR1cm4gbiYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiB4XyhlLHQscil7dmFyIG49KHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSxvPW4vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KG8+PWpXPzEwOm8+PVhXPzU6bz49JFc/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhvPj1qVz8xMDpvPj1YVz81Om8+PSRXPzI6MSl9ZnVuY3Rpb24gdGwoZSx0LHIpe3ZhciBuPU1hdGguYWJzKHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksbz1uL2k7cmV0dXJuIG8+PWpXP2kqPTEwOm8+PVhXP2kqPTU6bz49JFcmJihpKj0yKSx0PGU/LWk6aX1mdW5jdGlvbiBzYihlKXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiByX3QoKXt2YXIgZT1lX3QsdD1hYSxyPXNiO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPXRsKHUsaCxmKSxmPUlyKE1hdGguY2VpbCh1L2YpKmYsaCxmKSk7Zm9yKHZhciBwPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLXA7Zm9yKDtmW3AtMV0+aDspZi5wb3AoKSwtLXA7dmFyIGQ9bmV3IEFycmF5KHArMSksZztmb3Iobz0wO288PXA7KytvKWc9ZFtvXT1bXSxnLngwPW8+MD9mW28tMV06dSxnLngxPW88cD9mW29dOmg7Zm9yKG89MDtvPGE7KytvKXM9bFtvXSx1PD1zJiZzPD1oJiZkW3lzKGYscywwLHApXS5wdXNoKGlbb10pO3JldHVybiBkfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6YkUoaSksbik6ZX0sbi5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpiRShbaVswXSxpWzFdXSksbik6dH0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6QXJyYXkuaXNBcnJheShpKT9iRShRMHQuY2FsbChpKSk6YkUoaSksbik6cn0sbn1mdW5jdGlvbiBzYShlLHQscil7aWYocj09bnVsbCYmKHI9UXMpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX1mdW5jdGlvbiBuX3QoZSx0LHIpe3JldHVybiBlPXRfdC5jYWxsKGUsUXMpLnNvcnQob2EpLE1hdGguY2VpbCgoci10KS8oMiooc2EoZSwuNzUpLXNhKGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiBpX3QoZSx0LHIpe3JldHVybiBNYXRoLmNlaWwoKHItdCkvKDMuNSpXOShlKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIGx1KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIG9fdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1RcyhlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPVFzKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufWZ1bmN0aW9uIGFfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvPVtdO2lmKHQ9PW51bGwpZm9yKDsrK248cjspaXNOYU4oaT1RcyhlW25dKSl8fG8ucHVzaChpKTtlbHNlIGZvcig7KytuPHI7KWlzTmFOKGk9UXModChlW25dLG4sZSkpKXx8by5wdXNoKGkpO3JldHVybiBzYShvLnNvcnQob2EpLC41KX1mdW5jdGlvbiBJbShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuPS0xLGk9MCxvLGE7KytuPHQ7KWkrPWVbbl0ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheShpKTstLXQ+PTA7KWZvcihhPWVbdF0scj1hLmxlbmd0aDstLXI+PTA7KW9bLS1pXT1hW3JdO3JldHVybiBvfWZ1bmN0aW9uIExtKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJm8+aSYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZvPmkmJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIHNfdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn1mdW5jdGlvbiBsX3QoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9b2EpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX1mdW5jdGlvbiBjX3QoZSx0LHIpe2Zvcih2YXIgbj0ocj09bnVsbD9lLmxlbmd0aDpyKS0odD10PT1udWxsPzA6K3QpLGksbztuOylvPU1hdGgucmFuZG9tKCkqbi0tfDAsaT1lW24rdF0sZVtuK3RdPWVbbyt0XSxlW28rdF09aTtyZXR1cm4gZX1mdW5jdGlvbiB1X3QoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz0wO2lmKHQ9PW51bGwpZm9yKDsrK248cjspKGk9K2Vbbl0pJiYobys9aSk7ZWxzZSBmb3IoOysrbjxyOykoaT0rdChlW25dLG4sZSkpJiYobys9aSk7cmV0dXJuIG99ZnVuY3Rpb24gWTkoZSl7aWYoIShvPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHQ9LTEscj1MbShlLGMyZSksbj1uZXcgQXJyYXkocik7Kyt0PHI7KWZvcih2YXIgaT0tMSxvLGE9blt0XT1uZXcgQXJyYXkobyk7KytpPG87KWFbaV09ZVtpXVt0XTtyZXR1cm4gbn1mdW5jdGlvbiBjMmUoZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGhfdCgpe3JldHVybiBZOShhcmd1bWVudHMpfXZhciBqOT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gZl90KGUpe3JldHVybiBlfXZhciBYOT0xLCQ5PTIsS1c9Myx3RT00LHBfdD0xZS02O2Z1bmN0aW9uIHUyZShlKXtyZXR1cm4idHJhbnNsYXRlKCIrKGUrLjUpKyIsMCkifWZ1bmN0aW9uIGgyZShlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisoZSsuNSkrIikifWZ1bmN0aW9uIGYyZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuK2UodCl9fWZ1bmN0aW9uIHAyZShlKXt2YXIgdD1NYXRoLm1heCgwLGUuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gZS5yb3VuZCgpJiYodD1NYXRoLnJvdW5kKHQpKSxmdW5jdGlvbihyKXtyZXR1cm4rZShyKSt0fX1mdW5jdGlvbiBkMmUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gSzkoZSx0KXt2YXIgcj1bXSxuPW51bGwsaT1udWxsLG89NixhPTYscz0zLGw9ZT09PVg5fHxlPT09d0U/LTE6MSxjPWU9PT13RXx8ZT09PSQ5PyJ4IjoieSIsdT1lPT09WDl8fGU9PT1LVz91MmU6aDJlO2Z1bmN0aW9uIGgoZil7dmFyIHA9bj09bnVsbD90LnRpY2tzP3QudGlja3MuYXBwbHkodCxyKTp0LmRvbWFpbigpOm4sZD1pPT1udWxsP3QudGlja0Zvcm1hdD90LnRpY2tGb3JtYXQuYXBwbHkodCxyKTpmX3Q6aSxnPU1hdGgubWF4KG8sMCkrcyxfPXQucmFuZ2UoKSx5PStfWzBdKy41LHg9K19bXy5sZW5ndGgtMV0rLjUsYj0odC5iYW5kd2lkdGg/cDJlOmYyZSkodC5jb3B5KCkpLFM9Zi5zZWxlY3Rpb24/Zi5zZWxlY3Rpb24oKTpmLEM9Uy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksUD1TLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHAsdCkub3JkZXIoKSxrPVAuZXhpdCgpLE89UC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEQ9UC5zZWxlY3QoImxpbmUiKSxCPVAuc2VsZWN0KCJ0ZXh0Iik7Qz1DLm1lcmdlKEMuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLFA9UC5tZXJnZShPKSxEPUQubWVyZ2UoTy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCpnKS5hdHRyKCJkeSIsZT09PVg5PyIwZW0iOmU9PT1LVz8iMC43MWVtIjoiMC4zMmVtIikpLGYhPT1TJiYoQz1DLnRyYW5zaXRpb24oZiksUD1QLnRyYW5zaXRpb24oZiksRD1ELnRyYW5zaXRpb24oZiksQj1CLnRyYW5zaXRpb24oZiksaz1rLnRyYW5zaXRpb24oZikuYXR0cigib3BhY2l0eSIscF90KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiBpc0Zpbml0ZShJPWIoSSkpP3UoSSk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksTy5hdHRyKCJvcGFjaXR5IixwX3QpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdShMJiZpc0Zpbml0ZShMPUwoSSkpP0w6YihJKSl9KSksay5yZW1vdmUoKSxDLmF0dHIoImQiLGU9PT13RXx8ZT09JDk/YT8iTSIrbCphKyIsIit5KyJIMC41ViIreCsiSCIrbCphOiJNMC41LCIreSsiViIreDphPyJNIit5KyIsIitsKmErIlYwLjVIIit4KyJWIitsKmE6Ik0iK3krIiwwLjVIIit4KSxQLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIHUoYihJKSl9KSxELmF0dHIoYysiMiIsbCpvKSxCLmF0dHIoYyxsKmcpLnRleHQoZCksUy5maWx0ZXIoZDJlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixlPT09JDk/InN0YXJ0IjplPT09d0U/ImVuZCI6Im1pZGRsZSIpLFMuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJ9KX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1mLGgpOnR9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1qOS5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWY9PW51bGw/W106ajkuY2FsbChmKSxoKTpyLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6ajkuY2FsbChmKSxoKTpuJiZuLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1mLGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rZixoKTpvfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2YsaCk6b30saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStmLGgpOmF9LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K2YsaCk6c30saH1mdW5jdGlvbiBkX3QoZSl7cmV0dXJuIEs5KFg5LGUpfWZ1bmN0aW9uIG1fdChlKXtyZXR1cm4gSzkoJDksZSl9ZnVuY3Rpb24gWjkoZSl7cmV0dXJuIEs5KEtXLGUpfWZ1bmN0aW9uIGxiKGUpe3JldHVybiBLOSh3RSxlKX1rbSgpO2ttKCk7dmFyIFE5PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTRT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6UTkseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBQaChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxTRS5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6U0VbdF0sbG9jYWw6ZX06ZX1mdW5jdGlvbiB5MmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1ROSYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09UTk/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHYyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBSbShlKXt2YXIgdD1QaChlKTtyZXR1cm4odC5sb2NhbD92MmU6eTJlKSh0KX1mdW5jdGlvbiB4MmUoKXt9ZnVuY3Rpb24gTm0oZSl7cmV0dXJuIGU9PW51bGw/eDJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19ZnVuY3Rpb24gdl90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ObShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IE5uKG4sdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gYjJlKCl7cmV0dXJuW119ZnVuY3Rpb24gY2IoZSl7cmV0dXJuIGU9PW51bGw/YjJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19ZnVuY3Rpb24geF90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1jYihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgTm4obixpKX1mdW5jdGlvbiB1YihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX1mdW5jdGlvbiBiX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXViKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBObihuLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHRMKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfWZ1bmN0aW9uIHdfdCgpe3JldHVybiBuZXcgTm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIE1FKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fU1FLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TUUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX07ZnVuY3Rpb24gU190KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgTV90PSIkIjtmdW5jdGlvbiB3MmUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IE1FKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiBTMmUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD1NX3QrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD1NX3QrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgTUUoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBFX3QoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P1MyZTp3MmUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1TX3QoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IE5uKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX1mdW5jdGlvbiBUX3QoKXtyZXR1cm4gbmV3IE5uKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENfdChlLHQscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6bi5hcHBlbmQoZSsiIiksdCE9bnVsbCYmKGk9dChpKSkscj09bnVsbD9vLnJlbW92ZSgpOnIobyksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX1mdW5jdGlvbiBBX3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IE5uKGEsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gUF90KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBJX3QoZSl7ZXx8KGU9TTJlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IE5uKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBNMmUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gTF90KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIGtfdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfWZ1bmN0aW9uIFJfdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTl90KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX1mdW5jdGlvbiBEX3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24gT190KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBFMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIFQyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIEMyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIEEyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBQMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIEkyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiB6X3QoZSx0KXt2YXIgcj1QaChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/VDJlOkUyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP0kyZTpQMmU6ci5sb2NhbD9BMmU6QzJlKShyLHQpKX1mdW5jdGlvbiBoYihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gTDJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGsyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIFIyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBGX3QoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0wyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9SMmU6azJlKShlLHQscj09bnVsbD8iIjpyKSk6U3AodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gU3AoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxoYihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBOMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIEQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gTzJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIEJfdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP04yZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9PMmU6RDJlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX1mdW5jdGlvbiBIX3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFpXKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IFZfdChlKX1mdW5jdGlvbiBWX3QoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPUhfdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfVZfdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX07ZnVuY3Rpb24gVV90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gcV90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5yZW1vdmUodFtuXSl9ZnVuY3Rpb24gejJlKGUpe3JldHVybiBmdW5jdGlvbigpe1VfdCh0aGlzLGUpfX1mdW5jdGlvbiBGMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cV90KHRoaXMsZSl9fWZ1bmN0aW9uIEIyZShlLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9VX3Q6cV90KSh0aGlzLGUpfX1mdW5jdGlvbiBHX3QoZSx0KXt2YXIgcj1IX3QoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WlcodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/QjJlOnQ/ejJlOkYyZSkocix0KSl9ZnVuY3Rpb24gSDJlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBWMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBVMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFdfdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9IMmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1UyZTpWMmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBxMmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBHMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gWV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3EyZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VzJlOkcyZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBZMmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gal90KCl7cmV0dXJuIHRoaXMuZWFjaChZMmUpfWZ1bmN0aW9uIGoyZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFhfdCgpe3JldHVybiB0aGlzLmVhY2goajJlKX1mdW5jdGlvbiAkX3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSbShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBYMmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBLX3QoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlJtKGUpLG49dD09bnVsbD9YMmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpObSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gJDJlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWl90KCl7cmV0dXJuIHRoaXMuZWFjaCgkMmUpfWZ1bmN0aW9uIEsyZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gWjJlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBKX3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/WjJlOksyZSl9ZnVuY3Rpb24gUV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZXl0PXt9LHF0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKHR5dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiB0eXR8fChleXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciB0eXQ7ZnVuY3Rpb24gSjJlKGUsdCxyKXtyZXR1cm4gZT1yeXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gcnl0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9cXQ7cXQ9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7cXQ9aX19fWZ1bmN0aW9uIFEyZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gdHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIGV3ZShlLHQscil7dmFyIG49ZXl0Lmhhc093blByb3BlcnR5KGUudHlwZSk/SjJlOnJ5dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBueXQoZSx0LHIpe3ZhciBuPVEyZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/ZXdlOnR3ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBNcChlLHQscixuKXt2YXIgaT1xdDtlLnNvdXJjZUV2ZW50PXF0LHF0PWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtxdD1pfX1mdW5jdGlvbiBpeXQoZSx0LHIpe3ZhciBuPWhiKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIHJ3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpeXQodGhpcyxlLHQpfX1mdW5jdGlvbiBud2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaXl0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIG95dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP253ZTpyd2UpKGUsdCkpfXZhciBFRT1bbnVsbF07ZnVuY3Rpb24gTm4oZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gYXl0KCl7cmV0dXJuIG5ldyBObihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEVFKX1Obi5wcm90b3R5cGU9YXl0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tm4sc2VsZWN0OnZfdCxzZWxlY3RBbGw6eF90LGZpbHRlcjpiX3QsZGF0YTpFX3QsZW50ZXI6d190LGV4aXQ6VF90LGpvaW46Q190LG1lcmdlOkFfdCxvcmRlcjpQX3Qsc29ydDpJX3QsY2FsbDpMX3Qsbm9kZXM6a190LG5vZGU6Ul90LHNpemU6Tl90LGVtcHR5OkRfdCxlYWNoOk9fdCxhdHRyOnpfdCxzdHlsZTpGX3QscHJvcGVydHk6Ql90LGNsYXNzZWQ6R190LHRleHQ6V190LGh0bWw6WV90LHJhaXNlOmpfdCxsb3dlcjpYX3QsYXBwZW5kOiRfdCxpbnNlcnQ6S190LHJlbW92ZTpaX3QsY2xvbmU6Sl90LGRhdHVtOlFfdCxvbjpueXQsZGlzcGF0Y2g6b3l0fTt2YXIgSWg9YXl0O2Z1bmN0aW9uIEh0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IE5uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgTm4oW1tlXV0sRUUpfWZ1bmN0aW9uIHN5dChlKXtyZXR1cm4gSHQoUm0oZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX12YXIgaXdlPTA7ZnVuY3Rpb24gZUwoKXtyZXR1cm4gbmV3IEpXfWZ1bmN0aW9uIEpXKCl7dGhpcy5fPSJAIisoKytpd2UpLnRvU3RyaW5nKDM2KX1KVy5wcm90b3R5cGU9ZUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKVyxnZXQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuXzshKHQgaW4gZSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZVt0XX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdGhpcy5fXT10fSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuXyBpbiBlJiZkZWxldGUgZVt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBmYigpe2Zvcih2YXIgZT1xdCx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIERtKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gem8oZSl7dmFyIHQ9ZmIoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRG0oZSx0KX1mdW5jdGlvbiBFcChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBObihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBObihbZT09bnVsbD9bXTplXSxFRSl9ZnVuY3Rpb24gVHAoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PWZiKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRG0oZSxvKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBseXQoZSx0KXt0PT1udWxsJiYodD1mYigpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EbShlLHRbcl0pO3JldHVybiBpfWZ1bmN0aW9uIHJMKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gT20oKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHptKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9SHQoZSkub24oImRyYWdzdGFydC5kcmFnIixPbSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixPbSwhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRm0oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUh0KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLE9tLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFRFKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBDRShlLHQscixuLGksbyxhLHMsbCxjKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMuc3ViamVjdD1yLHRoaXMuaWRlbnRpZmllcj1uLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9bCx0aGlzLl89Y31DRS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIGU9PT10aGlzLl8/dGhpczplfTtmdW5jdGlvbiBvd2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBhd2UoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIHN3ZShlKXtyZXR1cm4gZT09bnVsbD97eDpxdC54LHk6cXQueX06ZX1mdW5jdGlvbiBsd2UoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gcGIoKXt2YXIgZT1vd2UsdD1hd2Uscj1zd2Usbj1sd2UsaT17fSxvPXZzKCJzdGFydCIsImRyYWciLCJlbmQiKSxhPTAscyxsLGMsdSxoPTA7ZnVuY3Rpb24gZihTKXtTLm9uKCJtb3VzZWRvd24uZHJhZyIscCkuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLF8pLm9uKCJ0b3VjaG1vdmUuZHJhZyIseSkub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIseCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAoKXtpZighKHV8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpe3ZhciBTPWIoIm1vdXNlIix0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx6byx0aGlzLGFyZ3VtZW50cyk7IVN8fChIdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGQsITApLm9uKCJtb3VzZXVwLmRyYWciLGcsITApLHptKHF0LnZpZXcpLHJMKCksYz0hMSxzPXF0LmNsaWVudFgsbD1xdC5jbGllbnRZLFMoInN0YXJ0IikpfX1mdW5jdGlvbiBkKCl7aWYoT20oKSwhYyl7dmFyIFM9cXQuY2xpZW50WC1zLEM9cXQuY2xpZW50WS1sO2M9UypTK0MqQz5ofWkubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7SHQocXQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksRm0ocXQudmlldyxjKSxPbSgpLGkubW91c2UoImVuZCIpfWZ1bmN0aW9uIF8oKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUz1xdC5jaGFuZ2VkVG91Y2hlcyxDPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFA9Uy5sZW5ndGgsayxPO2ZvcihrPTA7azxQOysraykoTz1iKFNba10uaWRlbnRpZmllcixDLFRwLHRoaXMsYXJndW1lbnRzKSkmJihyTCgpLE8oInN0YXJ0IikpfX1mdW5jdGlvbiB5KCl7dmFyIFM9cXQuY2hhbmdlZFRvdWNoZXMsQz1TLmxlbmd0aCxQLGs7Zm9yKFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihPbSgpLGsoImRyYWciKSl9ZnVuY3Rpb24geCgpe3ZhciBTPXF0LmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2Zvcih1JiZjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsfSw1MDApLFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihyTCgpLGsoImVuZCIpKX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7dmFyIEQ9UChDLFMpLEIsSSxMLFI9by5jb3B5KCk7aWYoISFNcChuZXcgQ0UoZiwiYmVmb3Jlc3RhcnQiLEIsUyxhLERbMF0sRFsxXSwwLDAsUiksZnVuY3Rpb24oKXtyZXR1cm4ocXQuc3ViamVjdD1CPXIuYXBwbHkoayxPKSk9PW51bGw/ITE6KEk9Qi54LURbMF18fDAsTD1CLnktRFsxXXx8MCwhMCl9KSlyZXR1cm4gZnVuY3Rpb24gRih6KXt2YXIgVT1ELFc7c3dpdGNoKHope2Nhc2Uic3RhcnQiOmlbU109RixXPWErKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGlbU10sLS1hO2Nhc2UiZHJhZyI6RD1QKEMsUyksVz1hO2JyZWFrfU1wKG5ldyBDRShmLHosQixTLFcsRFswXStJLERbMV0rTCxEWzBdLVVbMF0sRFsxXS1VWzFdLFIpLFIuYXBwbHksUixbeixrLE9dKX19cmV0dXJuIGYuZmlsdGVyPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTplfSxmLmNvbnRhaW5lcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnR9LGYuc3ViamVjdD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnJ9LGYudG91Y2hhYmxlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTpufSxmLm9uPWZ1bmN0aW9uKCl7dmFyIFM9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIFM9PT1vP2Y6U30sZi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPShTPStTKSpTLGYpOk1hdGguc3FydChoKX0sZn1mdW5jdGlvbiBDcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gQm0oZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUmgoKXt9dmFyIEhtPS43LGJfPTEvSG0sZGI9IlxccyooWystXT9cXGQrKVxccyoiLEFFPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGtoPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixjd2U9L14jKFswLTlhLWZdezMsOH0pJC8sdXdlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tkYixkYixkYl0rIlxcKSQiKSxod2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2toLGtoLGtoXSsiXFwpJCIpLGZ3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2RiLGRiLGRiLEFFXSsiXFwpJCIpLHB3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2toLGtoLGtoLEFFXSsiXFwpJCIpLGR3ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbQUUsa2gsa2hdKyJcXCkkIiksbXdlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQUUsa2gsa2gsQUVdKyJcXCkkIiksY3l0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0NwKFJoLHJjLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OnV5dCxmb3JtYXRIZXg6dXl0LGZvcm1hdEhzbDpnd2UsZm9ybWF0UmdiOmh5dCx0b1N0cmluZzpoeXR9KTtmdW5jdGlvbiB1eXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBnd2UoKXtyZXR1cm4gZ3l0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGh5dCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHJjKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PWN3ZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2Z5dCh0KTpyPT09Mz9uZXcgS2kodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P25MKHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P25MKHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9dXdlLmV4ZWMoZSkpP25ldyBLaSh0WzFdLHRbMl0sdFszXSwxKToodD1od2UuZXhlYyhlKSk/bmV3IEtpKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PWZ3ZS5leGVjKGUpKT9uTCh0WzFdLHRbMl0sdFszXSx0WzRdKToodD1wd2UuZXhlYyhlKSk/bkwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9ZHdlLmV4ZWMoZSkpP215dCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PW13ZS5leGVjKGUpKT9teXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpjeXQuaGFzT3duUHJvcGVydHkoZSk/Znl0KGN5dFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IEtpKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gZnl0KGUpe3JldHVybiBuZXcgS2koZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIG5MKGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgS2koZSx0LHIsbil9ZnVuY3Rpb24gUEUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBSaHx8KGU9cmMoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgS2koZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IEtpfWZ1bmN0aW9uIGN1KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9QRShlKTpuZXcgS2koZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEtpKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcChLaSxjdSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgS2kodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IEtpKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6cHl0LGZvcm1hdEhleDpweXQsZm9ybWF0UmdiOmR5dCx0b1N0cmluZzpkeXR9KSk7ZnVuY3Rpb24gcHl0KCl7cmV0dXJuIiMiK1FXKHRoaXMucikrUVcodGhpcy5nKStRVyh0aGlzLmIpfWZ1bmN0aW9uIGR5dCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBRVyhlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBteXQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBMaChlLHQscixuKX1mdW5jdGlvbiBneXQoZSl7aWYoZSBpbnN0YW5jZW9mIExoKXJldHVybiBuZXcgTGgoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgUmh8fChlPXJjKGUpKSwhZSlyZXR1cm4gbmV3IExoO2lmKGUgaW5zdGFuY2VvZiBMaClyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBMaChhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIFZtKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9neXQoZSk6bmV3IExoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBMaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoTGgsVm0sQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgS2kodFkoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksdFkoZSxpLG4pLHRZKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpO2Z1bmN0aW9uIHRZKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBpTD1NYXRoLlBJLzE4MCxvTD0xODAvTWF0aC5QSTt2YXIgYUw9MTgsX3l0PS45NjQyMix5eXQ9MSx2eXQ9LjgyNTIxLHh5dD00LzI5LG1iPTYvMjksYnl0PTMqbWIqbWIsX3dlPW1iKm1iKm1iO2Z1bmN0aW9uIHd5dChlKXtpZihlIGluc3RhbmNlb2YgdXUpcmV0dXJuIG5ldyB1dShlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBOaClyZXR1cm4gVHl0KGUpO2UgaW5zdGFuY2VvZiBLaXx8KGU9UEUoZSkpO3ZhciB0PWlZKGUucikscj1pWShlLmcpLG49aVkoZS5iKSxpPWVZKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikveXl0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1lWSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL195dCksYT1lWSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL3Z5dCkpLG5ldyB1dSgxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gU3l0KGUsdCl7cmV0dXJuIG5ldyB1dShlLDAsMCx0PT1udWxsPzE6dCl9ZnVuY3Rpb24gd18oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3d5dChlKTpuZXcgdXUoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHV1KGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcCh1dSx3XyxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1dSh0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHV1KHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIHQ9X3l0KnJZKHQpLGU9eXl0KnJZKGUpLHI9dnl0KnJZKHIpLG5ldyBLaShuWSgzLjEzMzg1NjEqdC0xLjYxNjg2NjcqZS0uNDkwNjE0NipyKSxuWSgtLjk3ODc2ODQqdCsxLjkxNjE0MTUqZSsuMDMzNDU0KnIpLG5ZKC4wNzE5NDUzKnQtLjIyODk5MTQqZSsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gZVkoZSl7cmV0dXJuIGU+X3dlP01hdGgucG93KGUsMS8zKTplL2J5dCt4eXR9ZnVuY3Rpb24gclkoZSl7cmV0dXJuIGU+bWI/ZSplKmU6Ynl0KihlLXh5dCl9ZnVuY3Rpb24gblkoZSl7cmV0dXJuIDI1NSooZTw9LjAwMzEzMDg/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBpWShlKXtyZXR1cm4oZS89MjU1KTw9LjA0MDQ1P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBNeXQoZSl7aWYoZSBpbnN0YW5jZW9mIE5oKXJldHVybiBuZXcgTmgoZS5oLGUuYyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgdXV8fChlPXd5dChlKSksZS5hPT09MCYmZS5iPT09MClyZXR1cm4gbmV3IE5oKE5hTiwwPGUubCYmZS5sPDEwMD8wOk5hTixlLmwsZS5vcGFjaXR5KTt2YXIgdD1NYXRoLmF0YW4yKGUuYixlLmEpKm9MO3JldHVybiBuZXcgTmgodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksZS5sLGUub3BhY2l0eSl9ZnVuY3Rpb24gRXl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9NeXQoZSk6bmV3IE5oKHIsdCxlLG49PW51bGw/MTpuKX1mdW5jdGlvbiBnYihlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/TXl0KGUpOm5ldyBOaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gTmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFR5dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgdXUoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCppTDtyZXR1cm4gbmV3IHV1KGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9Q3AoTmgsZ2IsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTmgodGhpcy5oLHRoaXMuYyx0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOaCh0aGlzLmgsdGhpcy5jLHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBUeXQodGhpcykucmdiKCl9fSkpO3ZhciBJeXQ9LS4xNDg2MSxvWT0xLjc4Mjc3LGFZPS0uMjkyMjcsc0w9LS45MDY0OSxJRT0xLjk3Mjk0LEN5dD1JRSpzTCxBeXQ9SUUqb1ksUHl0PW9ZKmFZLXNMKkl5dDtmdW5jdGlvbiB5d2UoZSl7aWYoZSBpbnN0YW5jZW9mIFNfKXJldHVybiBuZXcgU18oZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgS2l8fChlPVBFKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oUHl0Km4rQ3l0KnQtQXl0KnIpLyhQeXQrQ3l0LUF5dCksbz1uLWksYT0oSUUqKHItaSktYVkqbykvc0wscz1NYXRoLnNxcnQoYSphK28qbykvKElFKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqb0wtMTIwOk5hTjtyZXR1cm4gbmV3IFNfKGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGxhKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT95d2UoZSk6bmV3IFNfKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBTXyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoU18sbGEsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSppTCx0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgS2koMjU1Kih0K3IqKEl5dCpuK29ZKmkpKSwyNTUqKHQrciooYVkqbitzTCppKSksMjU1Kih0K3IqKElFKm4pKSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBzWShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGxMKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBzWSgoci1uL3QpKnQsYSxpLG8scyl9fWZ1bmN0aW9uIGNMKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gc1koKHItbi90KSp0LGksbyxhLHMpfX1mdW5jdGlvbiBfYihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gTHl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gdndlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gVW0oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/THl0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpfYihpc05hTihlKT90OmUpfWZ1bmN0aW9uIGt5dChlKXtyZXR1cm4oZT0rZSk9PTE/S246ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P3Z3ZSh0LHIsZSk6X2IoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gS24oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/THl0KGUscik6X2IoaXNOYU4oZSk/dDplKX12YXIgcW09ZnVuY3Rpb24gZSh0KXt2YXIgcj1reXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9Y3UoaSkpLnIsKG89Y3UobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7ZnVuY3Rpb24gUnl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9Y3UodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHVMPVJ5dChsTCksTnl0PVJ5dChjTCk7ZnVuY3Rpb24geWIoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gaEwoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIER5dChlLHQpe3JldHVybihoTCh0KT95YjpsWSkoZSx0KX1mdW5jdGlvbiBsWShlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPW5jKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319ZnVuY3Rpb24gZkwoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fWZ1bmN0aW9uIHBMKGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bmMoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgdVk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGNZPW5ldyBSZWdFeHAodVkuc291cmNlLCJnIik7ZnVuY3Rpb24geHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBid2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiB2YihlLHQpe3ZhciByPXVZLmxhc3RJbmRleD1jWS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj11WS5leGVjKGUpKSYmKGk9Y1kuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnppKG4saSl9KSkscj1jWS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/YndlKGxbMF0ueCk6eHdlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIG5jKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9fYih0KToocj09PSJudW1iZXIiP3ppOnI9PT0ic3RyaW5nIj8obj1yYyh0KSk/KHQ9bixxbSk6dmI6dCBpbnN0YW5jZW9mIHJjP3FtOnQgaW5zdGFuY2VvZiBEYXRlP2ZMOmhMKHQpP3liOkFycmF5LmlzQXJyYXkodCk/bFk6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3BMOnppKShlLHQpfWZ1bmN0aW9uIE95dChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX1mdW5jdGlvbiB6eXQoZSx0KXt2YXIgcj1VbSgrZSwrdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXIobik7cmV0dXJuIGktMzYwKk1hdGguZmxvb3IoaS8zNjApfX1mdW5jdGlvbiBkTChlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQoZSooMS1yKSt0KnIpfX12YXIgRnl0PTE4MC9NYXRoLlBJLG1MPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGhZKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKkZ5dCxza2V3WDpNYXRoLmF0YW4obCkqRnl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgTEUsZlksQnl0LGdMO2Z1bmN0aW9uIEh5dChlKXtyZXR1cm4gZT09PSJub25lIj9tTDooTEV8fChMRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxmWT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQnl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMRS5zdHlsZS50cmFuc2Zvcm09ZSxlPUJ5dC5nZXRDb21wdXRlZFN0eWxlKGZZLmFwcGVuZENoaWxkKExFKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxmWS5yZW1vdmVDaGlsZChMRSksZT1lLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksaFkoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBWeXQoZSl7cmV0dXJuIGU9PW51bGw/bUw6KGdMfHwoZ0w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZ0wuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWdMLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LGhZKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6bUwpfWZ1bmN0aW9uIFV5dChlLHQscixuKXtmdW5jdGlvbiBpKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwscik7ZC5wdXNoKHtpOmctNCx4OnppKGMsaCl9LHtpOmctMix4OnppKHUsZil9KX1lbHNlKGh8fGYpJiZwLnB1c2goInRyYW5zbGF0ZSgiK2grdCtmK3IpfWZ1bmN0aW9uIGEoYyx1LGgsZil7YyE9PXU/KGMtdT4xODA/dSs9MzYwOnUtYz4xODAmJihjKz0zNjApLGYucHVzaCh7aTpoLnB1c2goaShoKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6emkoYyx1KX0pKTp1JiZoLnB1c2goaShoKSsicm90YXRlKCIrdStuKX1mdW5jdGlvbiBzKGMsdSxoLGYpe2MhPT11P2YucHVzaCh7aTpoLnB1c2goaShoKSsic2tld1goIixudWxsLG4pLTIseDp6aShjLHUpfSk6dSYmaC5wdXNoKGkoaCkrInNrZXdYKCIrdStuKX1mdW5jdGlvbiBsKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaChpKHApKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtkLnB1c2goe2k6Zy00LHg6emkoYyxoKX0se2k6Zy0yLHg6emkodSxmKX0pfWVsc2UoaCE9PTF8fGYhPT0xKSYmcC5wdXNoKGkocCkrInNjYWxlKCIraCsiLCIrZisiKSIpfXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBoPVtdLGY9W107cmV0dXJuIGM9ZShjKSx1PWUodSksbyhjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLHUudHJhbnNsYXRlWCx1LnRyYW5zbGF0ZVksaCxmKSxhKGMucm90YXRlLHUucm90YXRlLGgsZikscyhjLnNrZXdYLHUuc2tld1gsaCxmKSxsKGMuc2NhbGVYLGMuc2NhbGVZLHUuc2NhbGVYLHUuc2NhbGVZLGgsZiksYz11PW51bGwsZnVuY3Rpb24ocCl7Zm9yKHZhciBkPS0xLGc9Zi5sZW5ndGgsXzsrK2Q8ZzspaFsoXz1mW2RdKS5pXT1fLngocCk7cmV0dXJuIGguam9pbigiIil9fX12YXIgX0w9VXl0KEh5dCwicHgsICIsInB4KSIsImRlZykiKSx5TD1VeXQoVnl0LCIsICIsIikiLCIpIik7dmFyIGtFPU1hdGguU1FSVDIscFk9MixxeXQ9NCx3d2U9MWUtMTI7ZnVuY3Rpb24gR3l0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIFN3ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBNd2UoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIHZMKGUsdCl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLG89dFswXSxhPXRbMV0scz10WzJdLGw9by1yLGM9YS1uLHU9bCpsK2MqYyxoLGY7aWYodTx3d2UpZj1NYXRoLmxvZyhzL2kpL2tFLGg9ZnVuY3Rpb24oeCl7cmV0dXJuW3IreCpsLG4reCpjLGkqTWF0aC5leHAoa0UqeCpmKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1pKmkrcXl0KnUpLygyKmkqcFkqcCksZz0ocypzLWkqaS1xeXQqdSkvKDIqcypwWSpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykva0UsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1HeXQoXyksQz1pLyhwWSpwKSooUypNd2Uoa0UqYitfKS1Td2UoXykpO3JldHVybltyK0MqbCxuK0MqYyxpKlMvR3l0KGtFKmIrXyldfX1yZXR1cm4gaC5kdXJhdGlvbj1mKjFlMyxofWZ1bmN0aW9uIFd5dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVZtKHQpKS5oLChyPVZtKHIpKS5oKSxpPUtuKHQucyxyLnMpLG89S24odC5sLHIubCksYT1Lbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQucz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgWXl0PVd5dChVbSksanl0PVd5dChLbik7ZnVuY3Rpb24gTV8oZSx0KXt2YXIgcj1LbigoZT13XyhlKSkubCwodD13Xyh0KSkubCksbj1LbihlLmEsdC5hKSxpPUtuKGUuYix0LmIpLG89S24oZS5vcGFjaXR5LHQub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBlLmw9cihhKSxlLmE9bihhKSxlLmI9aShhKSxlLm9wYWNpdHk9byhhKSxlKyIifX1mdW5jdGlvbiBYeXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1nYih0KSkuaCwocj1nYihyKSkuaCksaT1Lbih0LmMsci5jKSxvPUtuKHQubCxyLmwpLGE9S24odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LmM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyICR5dD1YeXQoVW0pLEt5dD1YeXQoS24pO2Z1bmN0aW9uIFp5dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWxhKGkpKS5oLChvPWxhKG8pKS5oKSxzPUtuKGkucyxvLnMpLGw9S24oaS5sLG8ubCksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEp5dD1aeXQoVW0pLEVfPVp5dChLbik7ZnVuY3Rpb24gZFkoZSx0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10WzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT1lKGksaT10Wysrcl0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGEqPW4pKSk7cmV0dXJuIG9bc10oYS1zKX19ZnVuY3Rpb24gUXl0KGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobi8odC0xKSk7cmV0dXJuIHJ9a20oKTt2YXIgeGI9MCxORT0wLFJFPTAsZXZ0PTFlMyx4TCxERSxiTD0wLFRfPTAsd0w9MCxPRT10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxydnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07ZnVuY3Rpb24gQXAoKXtyZXR1cm4gVF98fChydnQoRXdlKSxUXz1PRS5ub3coKSt3TCl9ZnVuY3Rpb24gRXdlKCl7VF89MH1mdW5jdGlvbiBDXygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9Q18ucHJvdG90eXBlPUFfLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q18scmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP0FwKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZERSE9PXRoaXMmJihERT9ERS5fbmV4dD10aGlzOnhMPXRoaXMsREU9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixtWSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxtWSgpKX19O2Z1bmN0aW9uIEFfKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBnWSgpe0FwKCksKyt4Yjtmb3IodmFyIGU9eEwsdDtlOykodD1UXy1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0teGJ9ZnVuY3Rpb24gdHZ0KCl7VF89KGJMPU9FLm5vdygpKSt3TCx4Yj1ORT0wO3RyeXtnWSgpfWZpbmFsbHl7eGI9MCxDd2UoKSxUXz0wfX1mdW5jdGlvbiBUd2UoKXt2YXIgZT1PRS5ub3coKSx0PWUtYkw7dD5ldnQmJih3TC09dCxiTD1lKX1mdW5jdGlvbiBDd2UoKXtmb3IodmFyIGUsdD14TCxyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp4TD1yKTtERT1lLG1ZKG4pfWZ1bmN0aW9uIG1ZKGUpe2lmKCF4Yil7TkUmJihORT1jbGVhclRpbWVvdXQoTkUpKTt2YXIgdD1lLVRfO3Q+MjQ/KGU8MS8wJiYoTkU9c2V0VGltZW91dCh0dnQsZS1PRS5ub3coKS13TCkpLFJFJiYoUkU9Y2xlYXJJbnRlcnZhbChSRSkpKTooUkV8fChiTD1PRS5ub3coKSxSRT1zZXRJbnRlcnZhbChUd2UsZXZ0KSkseGI9MSxydnQodHZ0KSl9fWZ1bmN0aW9uIHpFKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn1mdW5jdGlvbiBudnQoZSx0LHIpe3ZhciBuPW5ldyBDXyxpPXQ7cmV0dXJuIHQ9PW51bGw/KG4ucmVzdGFydChlLHQsciksbik6KHQ9K3Qscj1yPT1udWxsP0FwKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIG8oYSl7YSs9aSxuLnJlc3RhcnQobyxpKz10LHIpLGUoYSl9LHQsciksbil9dmFyIEF3ZT12cygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxQd2U9W10sb3Z0PTAsTUw9MSxFTD0yLFNMPTMsaXZ0PTQsVEw9NSxGRT02O2Z1bmN0aW9uIEdtKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47SXdlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpBd2UsdHdlZW46UHdlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOm92dH0pfWZ1bmN0aW9uIEJFKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPm92dCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIE9hKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPlNMKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFppKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gSXdlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPUFfKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1NTCxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PU1MKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09U0wpcmV0dXJuIHpFKGEpO3Auc3RhdGU9PT1pdnQ/KHAuc3RhdGU9RkUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1GRSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHpFKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PVNMJiYoci5zdGF0ZT1pdnQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1FTCxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09RUwpe2ZvcihyLnN0YXRlPVNMLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVRMLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVRMJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9RkUsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gaHUoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+RUwmJm4uc3RhdGU8VEwsbi5zdGF0ZT1GRSxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGF2dChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aHUodGhpcyxlKX0pfWZ1bmN0aW9uIEx3ZShlLHQpe3ZhciByLG47cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9T2EodGhpcyxlKSxvPWkudHdlZW47aWYobyE9PXIpe249cj1vO2Zvcih2YXIgYT0wLHM9bi5sZW5ndGg7YTxzOysrYSlpZihuW2FdLm5hbWU9PT10KXtuPW4uc2xpY2UoKSxuLnNwbGljZShhLDEpO2JyZWFrfX1pLnR3ZWVuPW59fWZ1bmN0aW9uIGt3ZShlLHQscil7dmFyIG4saTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89T2EodGhpcyxlKSxhPW8udHdlZW47aWYoYSE9PW4pe2k9KG49YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6dCx2YWx1ZTpyfSxsPTAsYz1pLmxlbmd0aDtsPGM7KytsKWlmKGlbbF0ubmFtZT09PXQpe2lbbF09czticmVha31sPT09YyYmaS5wdXNoKHMpfW8udHdlZW49aX19ZnVuY3Rpb24gc3Z0KGUsdCl7dmFyIHI9dGhpcy5faWQ7aWYoZSs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WmkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLG89bi5sZW5ndGgsYTtpPG87KytpKWlmKChhPW5baV0pLm5hbWU9PT1lKXJldHVybiBhLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/THdlOmt3ZSkocixlLHQpKX1mdW5jdGlvbiBiYihlLHQscil7dmFyIG49ZS5faWQ7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciBpPU9hKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbdF09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gWmkoaSxuKS52YWx1ZVt0XX19ZnVuY3Rpb24gQ0woZSx0KXt2YXIgcjtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3ppOnQgaW5zdGFuY2VvZiByYz9xbToocj1yYyh0KSk/KHQ9cixxbSk6dmIpKGUsdCl9ZnVuY3Rpb24gUndlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBOd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBEd2UoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gT3dlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiB6d2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBGd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGx2dChlLHQpe3ZhciByPVBoKGUpLG49cj09PSJ0cmFuc2Zvcm0iP3lMOkNMO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP0Z3ZTp6d2UpKHIsbixiYih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9Od2U6UndlKShyKTooci5sb2NhbD9Pd2U6RHdlKShyLG4sdCkpfWZ1bmN0aW9uIEJ3ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gSHdlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gVndlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmSHdlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBVd2UoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZCd2UoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIGN2dChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49UGgoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9Wd2U6VXdlKShuLHQpKX1mdW5jdGlvbiBxd2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gR3dlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PXR9fWZ1bmN0aW9uIHV2dChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP3F3ZTpHd2UpKHQsZSkpOlppKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIFd3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBZd2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gaHZ0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/V3dlOll3ZSkodCxlKSk6WmkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259ZnVuY3Rpb24gandlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBmdnQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGp3ZSh0LGUpKTpaaSh0aGlzLm5vZGUoKSx0KS5lYXNlfWZ1bmN0aW9uIHB2dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dWIoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBkdnQoZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IEZvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYd2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiAkd2UoZSx0LHIpe3ZhciBuLGksbz1Yd2UodCk/QkU6T2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gbXZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9aaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goJHdlKHIsZSx0KSl9ZnVuY3Rpb24gS3dlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBndnQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsS3dlKHRoaXMuX2lkKSl9ZnVuY3Rpb24gX3Z0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Tm0oZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHbShjW2ZdLHQscixmLGMsWmkodSxyKSkpO3JldHVybiBuZXcgRm8obyx0aGlzLl9wYXJlbnRzLHQscil9ZnVuY3Rpb24geXZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Y2IoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9WmkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZHbShwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IEZvKG8sYSx0LHIpfXZhciBad2U9SWgucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIHZ2dCgpe3JldHVybiBuZXcgWndlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBKd2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89U3AodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFNwKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24geHZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFF3ZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9U3AodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIHRTZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVNwKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxTcCh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBlU2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1PYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9eHZ0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gYnZ0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9fTDpDTDtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxKd2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UseHZ0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSx0U2UoZSxuLGJiKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goZVNlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxRd2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfWZ1bmN0aW9uIHJTZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gblNlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZyU2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24gd3Z0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLG5TZShlLHQscj09bnVsbD8iIjpyKSl9ZnVuY3Rpb24gaVNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gb1NlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFN2dChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/b1NlKGJiKHRoaXMsInRleHQiLGUpKTppU2UoZT09bnVsbD8iIjplKyIiKSl9ZnVuY3Rpb24gYVNlKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PWUuY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBzU2UoZSl7dmFyIHQscjtmdW5jdGlvbiBuKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYodD0ocj1pKSYmYVNlKGkpKSx0fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24gTXZ0KGUpe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxzU2UoZSkpfWZ1bmN0aW9uIEV2dCgpe2Zvcih2YXIgZT10aGlzLl9uYW1lLHQ9dGhpcy5faWQscj1BTCgpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKWlmKGw9YVtjXSl7dmFyIHU9WmkobCx0KTtHbShsLGUscixjLGEse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyxlLHIpfWZ1bmN0aW9uIFR2dCgpe3ZhciBlLHQscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXstLWk9PT0wJiZvKCl9fTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1PYSh0aGlzLG4pLHU9Yy5vbjt1IT09ZSYmKHQ9KGU9dSkuY29weSgpLHQuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfXZhciBsU2U9MDtmdW5jdGlvbiBGbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gUEwoZSl7cmV0dXJuIEloKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBBTCgpe3JldHVybisrbFNlfXZhciB3Yj1JaC5wcm90b3R5cGU7Rm8ucHJvdG90eXBlPVBMLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Rm8sc2VsZWN0Ol92dCxzZWxlY3RBbGw6eXZ0LGZpbHRlcjpwdnQsbWVyZ2U6ZHZ0LHNlbGVjdGlvbjp2dnQsdHJhbnNpdGlvbjpFdnQsY2FsbDp3Yi5jYWxsLG5vZGVzOndiLm5vZGVzLG5vZGU6d2Iubm9kZSxzaXplOndiLnNpemUsZW1wdHk6d2IuZW1wdHksZWFjaDp3Yi5lYWNoLG9uOm12dCxhdHRyOmx2dCxhdHRyVHdlZW46Y3Z0LHN0eWxlOmJ2dCxzdHlsZVR3ZWVuOnd2dCx0ZXh0OlN2dCx0ZXh0VHdlZW46TXZ0LHJlbW92ZTpndnQsdHdlZW46c3Z0LGRlbGF5OnV2dCxkdXJhdGlvbjpodnQsZWFzZTpmdnQsZW5kOlR2dH07SV8oKTt2YXIgVVk9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfTtmdW5jdGlvbiBfU2UoZSx0KXtmb3IodmFyIHI7IShyPWUuX190cmFuc2l0aW9uKXx8IShyPXJbdF0pOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gVVkudGltZT1BcCgpLFVZO3JldHVybiByfWZ1bmN0aW9uIEh2dChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBGbz8odD1lLl9pZCxlPWUuX25hbWUpOih0PUFMKCksKHI9VVkpLnRpbWU9QXAoKSxlPWU9PW51bGw/bnVsbDplKyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiZHbShsLGUsdCxjLGEscnx8X1NlKGwsdCkpO3JldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLGUsdCl9SWgucHJvdG90eXBlLmludGVycnVwdD1hdnQ7SWgucHJvdG90eXBlLnRyYW5zaXRpb249SHZ0O3ZhciB5U2U9W251bGxdO2Z1bmN0aW9uIFZ2dChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+TUwmJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBGbyhbW2VdXSx5U2UsdCwraSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRkwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFV2dChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfWZ1bmN0aW9uIHFZKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gQkwoKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBxdnQ9e25hbWU6ImRyYWcifSxHWT17bmFtZToic3BhY2UifSxNYj17bmFtZToiaGFuZGxlIn0sRWI9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIEd2dChlKXtyZXR1cm5bK2VbMF0sK2VbMV1dfWZ1bmN0aW9uIFlZKGUpe3JldHVybltHdnQoZVswXSksR3Z0KGVbMV0pXX1mdW5jdGlvbiB2U2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBUcCh0LHF0LnRvdWNoZXMsZSl9fXZhciBITD17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKEhFKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP251bGw6W1srZVswXSx0WzBdWzFdXSxbK2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sVkw9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChIRSksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbD9udWxsOltbdFswXVswXSwrZVswXV0sW3RbMV1bMF0sK2VbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LHhTZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAoSEUpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6WVkoZSl9LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LFBwPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxXdnQ9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LFl2dD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sYlNlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHdTZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBIRShlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBTU2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBNU2UoKXt2YXIgZT10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT8oZT1lLnZpZXdCb3guYmFzZVZhbCxbW2UueCxlLnldLFtlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdXSk6W1swLDBdLFtlLndpZHRoLmJhc2VWYWwudmFsdWUsZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIEVTZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBXWShlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIFRTZShlKXtyZXR1cm4gZVswXVswXT09PWVbMV1bMF18fGVbMF1bMV09PT1lWzFdWzFdfWZ1bmN0aW9uIFVMKGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24ganZ0KCl7cmV0dXJuIGpZKEhMKX1mdW5jdGlvbiBxTCgpe3JldHVybiBqWShWTCl9ZnVuY3Rpb24gR0woKXtyZXR1cm4galkoeFNlKX1mdW5jdGlvbiBqWShlKXt2YXIgdD1NU2Uscj1TU2Usbj1FU2UsaT0hMCxvPXZzKCJzdGFydCIsImJydXNoIiwiZW5kIiksYT02LHM7ZnVuY3Rpb24gbChfKXt2YXIgeT1fLnByb3BlcnR5KCJfX2JydXNoIixnKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbSEUoIm92ZXJsYXkiKV0pO3kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSkubWVyZ2UoeSkuZWFjaChmdW5jdGlvbigpe3ZhciBiPVdZKHRoaXMpLmV4dGVudDtIdCh0aGlzKS5hdHRyKCJ4IixiWzBdWzBdKS5hdHRyKCJ5IixiWzBdWzFdKS5hdHRyKCJ3aWR0aCIsYlsxXVswXS1iWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGJbMV1bMV0tYlswXVsxXSl9KSxfLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0hFKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciB4PV8uc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YShlLmhhbmRsZXMsZnVuY3Rpb24oYil7cmV0dXJuIGIudHlwZX0pO3guZXhpdCgpLnJlbW92ZSgpLHguZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYil7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrYi50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbihiKXtyZXR1cm4gUHBbYi50eXBlXX0pLF8uZWFjaChjKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGQpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1sLm1vdmU9ZnVuY3Rpb24oXyx5KXtfLnNlbGVjdGlvbj9fLm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgeD10aGlzLGI9eC5fX2JydXNoLFM9dSh4LGFyZ3VtZW50cyksQz1iLnNlbGVjdGlvbixQPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eSxiLmV4dGVudCksaz1uYyhDLFApO2Z1bmN0aW9uIE8oRCl7Yi5zZWxlY3Rpb249RD09PTEmJlA9PT1udWxsP251bGw6ayhEKSxjLmNhbGwoeCksUy5icnVzaCgpfXJldHVybiBDIT09bnVsbCYmUCE9PW51bGw/TzpPKDEpfSk6Xy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxiPWFyZ3VtZW50cyxTPXguX19icnVzaCxDPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh4LGIpOnksUy5leHRlbnQpLFA9dSh4LGIpLmJlZm9yZXN0YXJ0KCk7aHUoeCksUy5zZWxlY3Rpb249Qz09PW51bGw/bnVsbDpDLGMuY2FsbCh4KSxQLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLmNsZWFyPWZ1bmN0aW9uKF8pe2wubW92ZShfLG51bGwpfTtmdW5jdGlvbiBjKCl7dmFyIF89SHQodGhpcykseT1XWSh0aGlzKS5zZWxlY3Rpb247eT8oXy5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIseVswXVswXSkuYXR0cigieSIseVswXVsxXSkuYXR0cigid2lkdGgiLHlbMV1bMF0teVswXVswXSkuYXR0cigiaGVpZ2h0Iix5WzFdWzFdLXlbMF1bMV0pLF8uc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbeC50eXBlLmxlbmd0aC0xXT09PSJlIj95WzFdWzBdLWEvMjp5WzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbMF09PT0icyI/eVsxXVsxXS1hLzI6eVswXVsxXS1hLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZT09PSJuInx8eC50eXBlPT09InMiP3lbMV1bMF0teVswXVswXSthOmF9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGU9PT0iZSJ8fHgudHlwZT09PSJ3Ij95WzFdWzFdLXlbMF1bMV0rYTphfSkpOl8uc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KF8seSx4KXt2YXIgYj1fLl9fYnJ1c2guZW1pdHRlcjtyZXR1cm4gYiYmKCF4fHwhYi5jbGVhbik/YjpuZXcgaChfLHkseCl9ZnVuY3Rpb24gaChfLHkseCl7dGhpcy50aGF0PV8sdGhpcy5hcmdzPXksdGhpcy5zdGF0ZT1fLl9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPXh9aC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihfKXtNcChuZXcgVXZ0KGwsXyxlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbXyx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBmKCl7aWYocyYmIXF0LnRvdWNoZXN8fCFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIF89dGhpcyx5PXF0LnRhcmdldC5fX2RhdGFfXy50eXBlLHg9KGkmJnF0Lm1ldGFLZXk/eT0ib3ZlcmxheSI6eSk9PT0ic2VsZWN0aW9uIj9xdnQ6aSYmcXQuYWx0S2V5P0ViOk1iLGI9ZT09PVZMP251bGw6YlNlW3ldLFM9ZT09PUhMP251bGw6d1NlW3ldLEM9V1koXyksUD1DLmV4dGVudCxrPUMuc2VsZWN0aW9uLE89UFswXVswXSxELEIsST1QWzBdWzFdLEwsUixGPVBbMV1bMF0seixVLFc9UFsxXVsxXSxaLHJ0LG90PTAsc3Q9MCxTdCxidD1iJiZTJiZpJiZxdC5zaGlmdEtleSxNdCxsdCxLdD1xdC50b3VjaGVzP3ZTZShxdC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTp6byxfdD1LdChfKSxjdD1fdCxYPXUoXyxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7eT09PSJvdmVybGF5Ij8oayYmKFN0PSEwKSxDLnNlbGVjdGlvbj1rPVtbRD1lPT09Vkw/TzpfdFswXSxMPWU9PT1ITD9JOl90WzFdXSxbej1lPT09Vkw/RjpELFo9ZT09PUhMP1c6TF1dKTooRD1rWzBdWzBdLEw9a1swXVsxXSx6PWtbMV1bMF0sWj1rWzFdWzFdKSxCPUQsUj1MLFU9eixydD1aO3ZhciBldD1IdChfKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxkdD1ldC5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixQcFt5XSk7aWYocXQudG91Y2hlcylYLm1vdmVkPXB0LFguZW5kZWQ9d3Q7ZWxzZXt2YXIgcT1IdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixwdCwhMCkub24oIm1vdXNldXAuYnJ1c2giLHd0LCEwKTtpJiZxLm9uKCJrZXlkb3duLmJydXNoIixrdCwhMCkub24oImtleXVwLmJydXNoIixpZSwhMCksem0ocXQudmlldyl9cVkoKSxodShfKSxjLmNhbGwoXyksWC5zdGFydCgpO2Z1bmN0aW9uIHB0KCl7dmFyIGVlPUt0KF8pO2J0JiYhTXQmJiFsdCYmKE1hdGguYWJzKGVlWzBdLWN0WzBdKT5NYXRoLmFicyhlZVsxXS1jdFsxXSk/bHQ9ITA6TXQ9ITApLGN0PWVlLFN0PSEwLEJMKCksaHQoKX1mdW5jdGlvbiBodCgpe3ZhciBlZTtzd2l0Y2gob3Q9Y3RbMF0tX3RbMF0sc3Q9Y3RbMV0tX3RbMV0seCl7Y2FzZSBHWTpjYXNlIHF2dDp7YiYmKG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLXosb3QpKSxCPUQrb3QsVT16K290KSxTJiYoc3Q9TWF0aC5tYXgoSS1MLE1hdGgubWluKFctWixzdCkpLFI9TCtzdCxydD1aK3N0KTticmVha31jYXNlIE1iOntiPDA/KG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLUQsb3QpKSxCPUQrb3QsVT16KTpiPjAmJihvdD1NYXRoLm1heChPLXosTWF0aC5taW4oRi16LG90KSksQj1ELFU9eitvdCksUzwwPyhzdD1NYXRoLm1heChJLUwsTWF0aC5taW4oVy1MLHN0KSksUj1MK3N0LHJ0PVopOlM+MCYmKHN0PU1hdGgubWF4KEktWixNYXRoLm1pbihXLVosc3QpKSxSPUwscnQ9WitzdCk7YnJlYWt9Y2FzZSBFYjp7YiYmKEI9TWF0aC5tYXgoTyxNYXRoLm1pbihGLEQtb3QqYikpLFU9TWF0aC5tYXgoTyxNYXRoLm1pbihGLHorb3QqYikpKSxTJiYoUj1NYXRoLm1heChJLE1hdGgubWluKFcsTC1zdCpTKSkscnQ9TWF0aC5tYXgoSSxNYXRoLm1pbihXLForc3QqUykpKTticmVha319VTxCJiYoYio9LTEsZWU9RCxEPXosej1lZSxlZT1CLEI9VSxVPWVlLHkgaW4gV3Z0JiZkdC5hdHRyKCJjdXJzb3IiLFBwW3k9V3Z0W3ldXSkpLHJ0PFImJihTKj0tMSxlZT1MLEw9WixaPWVlLGVlPVIsUj1ydCxydD1lZSx5IGluIFl2dCYmZHQuYXR0cigiY3Vyc29yIixQcFt5PVl2dFt5XV0pKSxDLnNlbGVjdGlvbiYmKGs9Qy5zZWxlY3Rpb24pLE10JiYoQj1rWzBdWzBdLFU9a1sxXVswXSksbHQmJihSPWtbMF1bMV0scnQ9a1sxXVsxXSksKGtbMF1bMF0hPT1CfHxrWzBdWzFdIT09Unx8a1sxXVswXSE9PVV8fGtbMV1bMV0hPT1ydCkmJihDLnNlbGVjdGlvbj1bW0IsUl0sW1UscnRdXSxjLmNhbGwoXyksWC5icnVzaCgpKX1mdW5jdGlvbiB3dCgpe2lmKHFZKCkscXQudG91Y2hlcyl7aWYocXQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO3MmJmNsZWFyVGltZW91dChzKSxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGx9LDUwMCl9ZWxzZSBGbShxdC52aWV3LFN0KSxxLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtldC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGR0LmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSksQy5zZWxlY3Rpb24mJihrPUMuc2VsZWN0aW9uKSxUU2UoaykmJihDLnNlbGVjdGlvbj1udWxsLGMuY2FsbChfKSksWC5lbmQoKX1mdW5jdGlvbiBrdCgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidD1iJiZTO2JyZWFrfWNhc2UgMTg6e3g9PT1NYiYmKGImJih6PVUtb3QqYixEPUIrb3QqYiksUyYmKFo9cnQtc3QqUyxMPVIrc3QqUykseD1FYixodCgpKTticmVha31jYXNlIDMyOnsoeD09PU1ifHx4PT09RWIpJiYoYjwwP3o9VS1vdDpiPjAmJihEPUItb3QpLFM8MD9aPXJ0LXN0OlM+MCYmKEw9Ui1zdCkseD1HWSxkdC5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbiksaHQoKSk7YnJlYWt9ZGVmYXVsdDpyZXR1cm59QkwoKX1mdW5jdGlvbiBpZSgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidCYmKE10PWx0PWJ0PSExLGh0KCkpO2JyZWFrfWNhc2UgMTg6e3g9PT1FYiYmKGI8MD96PVU6Yj4wJiYoRD1CKSxTPDA/Wj1ydDpTPjAmJihMPVIpLHg9TWIsaHQoKSk7YnJlYWt9Y2FzZSAzMjp7eD09PUdZJiYocXQuYWx0S2V5PyhiJiYoej1VLW90KmIsRD1CK290KmIpLFMmJihaPXJ0LXN0KlMsTD1SK3N0KlMpLHg9RWIpOihiPDA/ej1VOmI+MCYmKEQ9QiksUzwwP1o9cnQ6Uz4wJiYoTD1SKSx4PU1iKSxkdC5hdHRyKCJjdXJzb3IiLFBwW3ldKSxodCgpKTticmVha31kZWZhdWx0OnJldHVybn1CTCgpfX1mdW5jdGlvbiBwKCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBkKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBnKCl7dmFyIF89dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBfLmV4dGVudD1ZWSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksXy5kaW09ZSxffXJldHVybiBsLmV4dGVudD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKFlZKF8pKSxsKTp0fSxsLmZpbHRlcj1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKCEhXyksbCk6cn0sbC50b3VjaGFibGU9ZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIF89PSJmdW5jdGlvbiI/XzpGTCghIV8pLGwpOm59LGwuaGFuZGxlU2l6ZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rXyxsKTphfSxsLmtleU1vZGlmaWVycz1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIV8sbCk6aX0sbC5vbj1mdW5jdGlvbigpe3ZhciBfPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBfPT09bz9sOl99LGx9dmFyIFhZPU1hdGguY29zLCRZPU1hdGguc2luLFh2dD1NYXRoLlBJLFZFPVh2dC8yLEtZPVh2dCoyLFpZPU1hdGgubWF4O2Z1bmN0aW9uIENTZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSxyLnNvdXJjZS52YWx1ZStyLnRhcmdldC52YWx1ZSl9fWZ1bmN0aW9uICR2dCgpe3ZhciBlPTAsdD1udWxsLHI9bnVsbCxuPW51bGw7ZnVuY3Rpb24gaShvKXt2YXIgYT1vLmxlbmd0aCxzPVtdLGw9SXIoYSksYz1bXSx1PVtdLGg9dS5ncm91cHM9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEqYSkscCxkLGcsXyx5LHg7Zm9yKHA9MCx5PS0xOysreTxhOyl7Zm9yKGQ9MCx4PS0xOysreDxhOylkKz1vW3ldW3hdO3MucHVzaChkKSxjLnB1c2goSXIoYSkpLHArPWR9Zm9yKHQmJmwuc29ydChmdW5jdGlvbihCLEkpe3JldHVybiB0KHNbQl0sc1tJXSl9KSxyJiZjLmZvckVhY2goZnVuY3Rpb24oQixJKXtCLnNvcnQoZnVuY3Rpb24oTCxSKXtyZXR1cm4gcihvW0ldW0xdLG9bSV1bUl0pfSl9KSxwPVpZKDAsS1ktZSphKS9wLF89cD9lOktZL2EsZD0wLHk9LTE7Kyt5PGE7KXtmb3IoZz1kLHg9LTE7Kyt4PGE7KXt2YXIgYj1sW3ldLFM9Y1tiXVt4XSxDPW9bYl1bU10sUD1kLGs9ZCs9QypwO2ZbUyphK2JdPXtpbmRleDpiLHN1YmluZGV4OlMsc3RhcnRBbmdsZTpQLGVuZEFuZ2xlOmssdmFsdWU6Q319aFtiXT17aW5kZXg6YixzdGFydEFuZ2xlOmcsZW5kQW5nbGU6ZCx2YWx1ZTpzW2JdfSxkKz1ffWZvcih5PS0xOysreTxhOylmb3IoeD15LTE7Kyt4PGE7KXt2YXIgTz1mW3gqYSt5XSxEPWZbeSphK3hdOyhPLnZhbHVlfHxELnZhbHVlKSYmdS5wdXNoKE8udmFsdWU8RC52YWx1ZT97c291cmNlOkQsdGFyZ2V0Ok99Ontzb3VyY2U6Tyx0YXJnZXQ6RH0pfXJldHVybiBuP3Uuc29ydChuKTp1fXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpZKDAsbyksaSk6ZX0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW8saSk6dH0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8saSk6cn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPT1udWxsP249bnVsbDoobj1DU2UobykpLl89byxpKTpuJiZuLl99LGl9dmFyIEt2dD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gV0woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBKWT1NYXRoLlBJLFFZPTIqSlksTF89MWUtNixBU2U9UVktTF87ZnVuY3Rpb24gdGooKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBadnQoKXtyZXR1cm4gbmV3IHRqfXRqLnByb3RvdHlwZT1adnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0aixtb3ZlVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iUSIrICtlKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuXys9IkMiKyArZSsiLCIrICt0KyIsIisgK3IrIiwiKyArbisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24oZSx0LHIsbixpKXtlPStlLHQ9K3Qscj0rcixuPStuLGk9K2k7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPXItZSxsPW4tdCxjPW8tZSx1PWEtdCxoPWMqYyt1KnU7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKGg+TF8paWYoIShNYXRoLmFicyh1KnMtbCpjKT5MXyl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2V7dmFyIGY9ci1vLHA9bi1hLGQ9cypzK2wqbCxnPWYqZitwKnAsXz1NYXRoLnNxcnQoZCkseT1NYXRoLnNxcnQoaCkseD1pKk1hdGgudGFuKChKWS1NYXRoLmFjb3MoKGQraC1nKS8oMipfKnkpKSkvMiksYj14L3ksUz14L187TWF0aC5hYnMoYi0xKT5MXyYmKHRoaXMuXys9IkwiKyhlK2IqYykrIiwiKyh0K2IqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+YypwKSsiLCIrKHRoaXMuX3gxPWUrUypzKSsiLCIrKHRoaXMuX3kxPXQrUypsKX19LGFyYzpmdW5jdGlvbihlLHQscixuLGksbyl7ZT0rZSx0PSt0LHI9K3Isbz0hIW87dmFyIGE9cipNYXRoLmNvcyhuKSxzPXIqTWF0aC5zaW4obiksbD1lK2EsYz10K3MsdT0xXm8saD1vP24taTppLW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT5MX3x8TWF0aC5hYnModGhpcy5feTEtYyk+TF8pJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksciYmKGg8MCYmKGg9aCVRWStRWSksaD5BU2U/dGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyhlLWEpKyIsIisodC1zKSsiQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+TF8mJih0aGlzLl8rPSJBIityKyIsIityKyIsMCwiKyArKGg+PUpZKSsiLCIrdSsiLCIrKHRoaXMuX3gxPWUrcipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT10K3IqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGJzPVp2dDtmdW5jdGlvbiBQU2UoZSl7cmV0dXJuIGUuc291cmNlfWZ1bmN0aW9uIElTZShlKXtyZXR1cm4gZS50YXJnZXR9ZnVuY3Rpb24gTFNlKGUpe3JldHVybiBlLnJhZGl1c31mdW5jdGlvbiBrU2UoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiBSU2UoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24gSnZ0KCl7dmFyIGU9UFNlLHQ9SVNlLHI9TFNlLG49a1NlLGk9UlNlLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1LdnQuY2FsbChhcmd1bWVudHMpLGM9ZS5hcHBseSh0aGlzLGwpLHU9dC5hcHBseSh0aGlzLGwpLGg9K3IuYXBwbHkodGhpcywobFswXT1jLGwpKSxmPW4uYXBwbHkodGhpcyxsKS1WRSxwPWkuYXBwbHkodGhpcyxsKS1WRSxkPWgqWFkoZiksZz1oKiRZKGYpLF89K3IuYXBwbHkodGhpcywobFswXT11LGwpKSx5PW4uYXBwbHkodGhpcyxsKS1WRSx4PWkuYXBwbHkodGhpcyxsKS1WRTtpZihvfHwobz1zPWJzKCkpLG8ubW92ZVRvKGQsZyksby5hcmMoMCwwLGgsZixwKSwoZiE9PXl8fHAhPT14KSYmKG8ucXVhZHJhdGljQ3VydmVUbygwLDAsXypYWSh5KSxfKiRZKHkpKSxvLmFyYygwLDAsXyx5LHgpKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQsZyksby5jbG9zZVBhdGgoKSxzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6V0woK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6aX0sYS5zb3VyY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cyxhKTplfSxhLnRhcmdldD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfVRiKCk7dmFyIE9TZT1BcnJheS5wcm90b3R5cGUsS0w9T1NlLnNsaWNlO2Z1bmN0aW9uIGYxdChlLHQpe3JldHVybiBlLXR9ZnVuY3Rpb24gcDF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgsbj1lW3ItMV1bMV0qZVswXVswXS1lW3ItMV1bMF0qZVswXVsxXTsrK3Q8cjspbis9ZVt0LTFdWzFdKmVbdF1bMF0tZVt0LTFdWzBdKmVbdF1bMV07cmV0dXJuIG59ZnVuY3Rpb24gT2goZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGQxdChlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk7KytyPG47KWlmKGk9elNlKGUsdFtyXSkpcmV0dXJuIGk7cmV0dXJuIDB9ZnVuY3Rpb24gelNlKGUsdCl7Zm9yKHZhciByPXRbMF0sbj10WzFdLGk9LTEsbz0wLGE9ZS5sZW5ndGgscz1hLTE7bzxhO3M9bysrKXt2YXIgbD1lW29dLGM9bFswXSx1PWxbMV0saD1lW3NdLGY9aFswXSxwPWhbMV07aWYoRlNlKGwsaCx0KSlyZXR1cm4gMDt1Pm4hPXA+biYmcjwoZi1jKSoobi11KS8ocC11KStjJiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gRlNlKGUsdCxyKXt2YXIgbjtyZXR1cm4gQlNlKGUsdCxyKSYmSFNlKGVbbj0rKGVbMF09PT10WzBdKV0scltuXSx0W25dKX1mdW5jdGlvbiBCU2UoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pPT09KHJbMF0tZVswXSkqKHRbMV0tZVsxXSl9ZnVuY3Rpb24gSFNlKGUsdCxyKXtyZXR1cm4gZTw9dCYmdDw9cnx8cjw9dCYmdDw9ZX1mdW5jdGlvbiBtMXQoKXt9dmFyIElwPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gWkwoKXt2YXIgZT0xLHQ9MSxyPXNiLG49bDtmdW5jdGlvbiBpKGMpe3ZhciB1PXIoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl1PXUuc2xpY2UoKS5zb3J0KGYxdCk7ZWxzZXt2YXIgaD1hYShjKSxmPWhbMF0scD1oWzFdO3U9dGwoZixwLHUpLHU9SXIoTWF0aC5mbG9vcihmL3UpKnUsTWF0aC5mbG9vcihwL3UpKnUsdSl9cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBvKGMsZCl9KX1mdW5jdGlvbiBvKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYShjLHUsZnVuY3Rpb24ocCl7bihwLGMsdSkscDF0KHApPjA/aC5wdXNoKFtwXSk6Zi5wdXNoKHApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0wLGc9aC5sZW5ndGgsXztkPGc7KytkKWlmKGQxdCgoXz1oW2RdKVswXSxwKSE9PS0xKXtfLnB1c2gocCk7cmV0dXJufX0pLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOnUsY29vcmRpbmF0ZXM6aH19ZnVuY3Rpb24gYShjLHUsaCl7dmFyIGY9bmV3IEFycmF5LHA9bmV3IEFycmF5LGQsZyxfLHkseCxiO2ZvcihkPWc9LTEseT1jWzBdPj11LElwW3k8PDFdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tkKzFdPj11LElwW198eTw8MV0uZm9yRWFjaChTKTtmb3IoSXBbeTw8MF0uZm9yRWFjaChTKTsrK2c8dC0xOyl7Zm9yKGQ9LTEseT1jW2cqZStlXT49dSx4PWNbZyplXT49dSxJcFt5PDwxfHg8PDJdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tnKmUrZStkKzFdPj11LGI9eCx4PWNbZyplK2QrMV0+PXUsSXBbX3x5PDwxfHg8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt5fHg8PDNdLmZvckVhY2goUyl9Zm9yKGQ9LTEseD1jW2cqZV0+PXUsSXBbeDw8Ml0uZm9yRWFjaChTKTsrK2Q8ZS0xOyliPXgseD1jW2cqZStkKzFdPj11LElwW3g8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt4PDwzXS5mb3JFYWNoKFMpO2Z1bmN0aW9uIFMoQyl7dmFyIFA9W0NbMF1bMF0rZCxDWzBdWzFdK2ddLGs9W0NbMV1bMF0rZCxDWzFdWzFdK2ddLE89cyhQKSxEPXMoayksQixJOyhCPXBbT10pPyhJPWZbRF0pPyhkZWxldGUgcFtCLmVuZF0sZGVsZXRlIGZbSS5zdGFydF0sQj09PUk/KEIucmluZy5wdXNoKGspLGgoQi5yaW5nKSk6ZltCLnN0YXJ0XT1wW0kuZW5kXT17c3RhcnQ6Qi5zdGFydCxlbmQ6SS5lbmQscmluZzpCLnJpbmcuY29uY2F0KEkucmluZyl9KTooZGVsZXRlIHBbQi5lbmRdLEIucmluZy5wdXNoKGspLHBbQi5lbmQ9RF09Qik6KEI9ZltEXSk/KEk9cFtPXSk/KGRlbGV0ZSBmW0Iuc3RhcnRdLGRlbGV0ZSBwW0kuZW5kXSxCPT09ST8oQi5yaW5nLnB1c2goayksaChCLnJpbmcpKTpmW0kuc3RhcnRdPXBbQi5lbmRdPXtzdGFydDpJLnN0YXJ0LGVuZDpCLmVuZCxyaW5nOkkucmluZy5jb25jYXQoQi5yaW5nKX0pOihkZWxldGUgZltCLnN0YXJ0XSxCLnJpbmcudW5zaGlmdChQKSxmW0Iuc3RhcnQ9T109Qik6ZltPXT1wW0RdPXtzdGFydDpPLGVuZDpELHJpbmc6W1Asa119fX1mdW5jdGlvbiBzKGMpe3JldHVybiBjWzBdKjIrY1sxXSooZSsxKSo0fWZ1bmN0aW9uIGwoYyx1LGgpe2MuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mWzBdLGQ9ZlsxXSxnPXB8MCxfPWR8MCx5LHg9dVtfKmUrZ107cD4wJiZwPGUmJmc9PT1wJiYoeT11W18qZStnLTFdLGZbMF09cCsoaC15KS8oeC15KS0uNSksZD4wJiZkPHQmJl89PT1kJiYoeT11WyhfLTEpKmUrZ10sZlsxXT1kKyhoLXkpLyh4LXkpLS41KX0pfXJldHVybiBpLmNvbnRvdXI9byxpLnNpemU9ZnVuY3Rpb24oYyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW2UsdF07dmFyIHU9TWF0aC5jZWlsKGNbMF0pLGg9TWF0aC5jZWlsKGNbMV0pO2lmKCEodT4wKXx8IShoPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIGU9dSx0PWgsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6QXJyYXkuaXNBcnJheShjKT9PaChLTC5jYWxsKGMpKTpPaChjKSxpKTpyfSxpLnNtb290aD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jP2w6bTF0LGkpOm49PT1sfSxpfWZ1bmN0aW9uIEpMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsbD0wO3M8bityOysrcylzPG4mJihsKz1lLmRhdGFbcythKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVtzLW8rYSpuXSksdC5kYXRhW3MtcithKm5dPWwvTWF0aC5taW4ocysxLG4tMStvLXMsbykpfWZ1bmN0aW9uIFFMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8bjsrK2EpZm9yKHZhciBzPTAsbD0wO3M8aStyOysrcylzPGkmJihsKz1lLmRhdGFbYStzKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVthKyhzLW8pKm5dKSx0LmRhdGFbYSsocy1yKSpuXT1sL01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiBWU2UoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gVVNlKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIHFTZSgpe3JldHVybiAxfWZ1bmN0aW9uIGcxdCgpe3ZhciBlPVZTZSx0PVVTZSxyPXFTZSxuPTk2MCxpPTUwMCxvPTIwLGE9MixzPW8qMyxsPW4rcyoyPj5hLGM9aStzKjI+PmEsdT1PaCgyMCk7ZnVuY3Rpb24gaCh5KXt2YXIgeD1uZXcgRmxvYXQzMkFycmF5KGwqYyksYj1uZXcgRmxvYXQzMkFycmF5KGwqYyk7eS5mb3JFYWNoKGZ1bmN0aW9uKFAsayxPKXt2YXIgRD0rZShQLGssTykrcz4+YSxCPSt0KFAsayxPKStzPj5hLEk9K3IoUCxrLE8pO0Q+PTAmJkQ8bCYmQj49MCYmQjxjJiYoeFtEK0IqbF0rPUkpfSksSkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LG8+PmEpLFFMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSxvPj5hKSxKTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0sbz4+YSksUUwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LG8+PmEpLEpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSxvPj5hKSxRTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0sbz4+YSk7dmFyIFM9dSh4KTtpZighQXJyYXkuaXNBcnJheShTKSl7dmFyIEM9bHUoeCk7Uz10bCgwLEMsUyksUz1JcigwLE1hdGguZmxvb3IoQy9TKSpTLFMpLFMuc2hpZnQoKX1yZXR1cm4gWkwoKS50aHJlc2hvbGRzKFMpLnNpemUoW2wsY10pKHgpLm1hcChmKX1mdW5jdGlvbiBmKHkpe3JldHVybiB5LnZhbHVlKj1NYXRoLnBvdygyLC0yKmEpLHkuY29vcmRpbmF0ZXMuZm9yRWFjaChwKSx5fWZ1bmN0aW9uIHAoeSl7eS5mb3JFYWNoKGQpfWZ1bmN0aW9uIGQoeSl7eS5mb3JFYWNoKGcpfWZ1bmN0aW9uIGcoeSl7eVswXT15WzBdKk1hdGgucG93KDIsYSktcyx5WzFdPXlbMV0qTWF0aC5wb3coMixhKS1zfWZ1bmN0aW9uIF8oKXtyZXR1cm4gcz1vKjMsbD1uK3MqMj4+YSxjPWkrcyoyPj5hLGh9cmV0dXJuIGgueD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTplfSxoLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6dH0saC53ZWlnaHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6cn0saC5zaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltuLGldO3ZhciB4PU1hdGguY2VpbCh5WzBdKSxiPU1hdGguY2VpbCh5WzFdKTtpZighKHg+PTApJiYhKHg+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIG49eCxpPWIsXygpfSxoLmNlbGxTaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxhO2lmKCEoKHk9K3kpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIGE9TWF0aC5mbG9vcihNYXRoLmxvZyh5KS9NYXRoLkxOMiksXygpfSxoLnRocmVzaG9sZHM9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpBcnJheS5pc0FycmF5KHkpP09oKEtMLmNhbGwoeSkpOk9oKHkpLGgpOnV9LGguYmFuZHdpZHRoPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQobyoobysxKSk7aWYoISgoeT0reSk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gbz1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp5KnkrMSktMSkvMiksXygpfSxofWttKCk7cUUoKTtJXygpO2Z1bmN0aW9uIFhTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYmxvYigpfWZ1bmN0aW9uIEQxdChlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4oWFNlKX1mdW5jdGlvbiAkU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3JldHVybiBlLmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gTzF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbigkU2UpfXFFKCk7ZnVuY3Rpb24gS1NlKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS50ZXh0KCl9ZnVuY3Rpb24gRF8oZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKEtTZSl9ZnVuY3Rpb24gejF0KGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZ0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXZvaWQgMCksRF8odCxyKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBlKGksbil9KX19ZnVuY3Rpb24gb2ooZSx0LHIsbil7YXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiByPT0iZnVuY3Rpb24iJiYobj1yLHI9dm9pZCAwKTt2YXIgaT1XbShlKTtyZXR1cm4gRF8odCxyKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiBpLnBhcnNlKG8sbil9KX12YXIgRjF0PXoxdChDYiksQjF0PXoxdChBYik7ZnVuY3Rpb24gSDF0KGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiB0KWlbb109dFtvXTtpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3IoaSl9LGkuc3JjPWV9KX1mdW5jdGlvbiBaU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO2lmKCEoZS5zdGF0dXM9PT0yMDR8fGUuc3RhdHVzPT09MjA1KSlyZXR1cm4gZS5qc29uKCl9ZnVuY3Rpb24gVjF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihaU2UpfWZ1bmN0aW9uIGFqKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBEXyh0LHIpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcobixlKX0pfX12YXIgVTF0PWFqKCJhcHBsaWNhdGlvbi94bWwiKSxxMXQ9YWooInRleHQvaHRtbCIpLEcxdD1haigiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFcxdChlLHQpe3ZhciByO2U9PW51bGwmJihlPTApLHQ9PW51bGwmJih0PTApO2Z1bmN0aW9uIG4oKXt2YXIgaSxvPXIubGVuZ3RoLGEscz0wLGw9MDtmb3IoaT0wO2k8bzsrK2kpYT1yW2ldLHMrPWEueCxsKz1hLnk7Zm9yKHM9cy9vLWUsbD1sL28tdCxpPTA7aTxvOysraSlhPXJbaV0sYS54LT1zLGEueS09bH1yZXR1cm4gbi5pbml0aWFsaXplPWZ1bmN0aW9uKGkpe3I9aX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStpLG4pOmV9LG4ueT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0raSxuKTp0fSxufWZ1bmN0aW9uIERuKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBmdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fWZ1bmN0aW9uIFkxdChlKXt2YXIgdD0rdGhpcy5feC5jYWxsKG51bGwsZSkscj0rdGhpcy5feS5jYWxsKG51bGwsZSk7cmV0dXJuIGoxdCh0aGlzLmNvdmVyKHQsciksdCxyLGUpfWZ1bmN0aW9uIGoxdChlLHQscixuKXtpZihpc05hTih0KXx8aXNOYU4ocikpcmV0dXJuIGU7dmFyIGksbz1lLl9yb290LGE9e2RhdGE6bn0scz1lLl94MCxsPWUuX3kwLGM9ZS5feDEsdT1lLl95MSxoLGYscCxkLGcsXyx5LHg7aWYoIW8pcmV0dXJuIGUuX3Jvb3Q9YSxlO2Zvcig7by5sZW5ndGg7KWlmKChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mLGk9bywhKG89b1t5PV88PDF8Z10pKXJldHVybiBpW3ldPWEsZTtpZihwPStlLl94LmNhbGwobnVsbCxvLmRhdGEpLGQ9K2UuX3kuY2FsbChudWxsLG8uZGF0YSksdD09PXAmJnI9PT1kKXJldHVybiBhLm5leHQ9byxpP2lbeV09YTplLl9yb290PWEsZTtkbyBpPWk/aVt5XT1uZXcgQXJyYXkoNCk6ZS5fcm9vdD1uZXcgQXJyYXkoNCksKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWY7d2hpbGUoKHk9Xzw8MXxnKT09PSh4PShkPj1mKTw8MXxwPj1oKSk7cmV0dXJuIGlbeF09byxpW3ldPWEsZX1mdW5jdGlvbiBYMXQoZSl7dmFyIHQscixuPWUubGVuZ3RoLGksbyxhPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPTEvMCxjPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihyPTA7cjxuOysrcilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCx0PWVbcl0pKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpfHwoYVtyXT1pLHNbcl09byxpPGwmJihsPWkpLGk+dSYmKHU9aSksbzxjJiYoYz1vKSxvPmgmJihoPW8pKTtpZihsPnV8fGM+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihsLGMpLmNvdmVyKHUsaCkscj0wO3I8bjsrK3IpajF0KHRoaXMsYVtyXSxzW3JdLGVbcl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uICQxdChlLHQpe2lmKGlzTmFOKGU9K2UpfHxpc05hTih0PSt0KSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IoZSkpKzEsbz0obj1NYXRoLmZsb29yKHQpKSsxO2Vsc2V7Zm9yKHZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3I+ZXx8ZT49aXx8bj50fHx0Pj1vOylzd2l0Y2goYz0odDxuKTw8MXxlPHIsbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bCxhKj0yLGMpe2Nhc2UgMDppPXIrYSxvPW4rYTticmVhaztjYXNlIDE6cj1pLWEsbz1uK2E7YnJlYWs7Y2FzZSAyOmk9cithLG49by1hO2JyZWFrO2Nhc2UgMzpyPWktYSxuPW8tYTticmVha310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc31mdW5jdGlvbiBLMXQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpZG8gZS5wdXNoKHQuZGF0YSk7d2hpbGUodD10Lm5leHQpfSksZX1mdW5jdGlvbiBaMXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrZVswXVswXSwrZVswXVsxXSkuY292ZXIoK2VbMV1bMF0sK2VbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19ZnVuY3Rpb24geW8oZSx0LHIsbixpKXt0aGlzLm5vZGU9ZSx0aGlzLngwPXQsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9ZnVuY3Rpb24gSjF0KGUsdCxyKXt2YXIgbixpPXRoaXMuX3gwLG89dGhpcy5feTAsYSxzLGwsYyx1PXRoaXMuX3gxLGg9dGhpcy5feTEsZj1bXSxwPXRoaXMuX3Jvb3QsZCxnO2ZvcihwJiZmLnB1c2gobmV3IHlvKHAsaSxvLHUsaCkpLHI9PW51bGw/cj0xLzA6KGk9ZS1yLG89dC1yLHU9ZStyLGg9dCtyLHIqPXIpO2Q9Zi5wb3AoKTspaWYoISghKHA9ZC5ub2RlKXx8KGE9ZC54MCk+dXx8KHM9ZC55MCk+aHx8KGw9ZC54MSk8aXx8KGM9ZC55MSk8bykpaWYocC5sZW5ndGgpe3ZhciBfPShhK2wpLzIseT0ocytjKS8yO2YucHVzaChuZXcgeW8ocFszXSxfLHksbCxjKSxuZXcgeW8ocFsyXSxhLHksXyxjKSxuZXcgeW8ocFsxXSxfLHMsbCx5KSxuZXcgeW8ocFswXSxhLHMsXyx5KSksKGc9KHQ+PXkpPDwxfGU+PV8pJiYoZD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWddLGZbZi5sZW5ndGgtMS1nXT1kKX1lbHNle3ZhciB4PWUtK3RoaXMuX3guY2FsbChudWxsLHAuZGF0YSksYj10LSt0aGlzLl95LmNhbGwobnVsbCxwLmRhdGEpLFM9eCp4K2IqYjtpZihTPHIpe3ZhciBDPU1hdGguc3FydChyPVMpO2k9ZS1DLG89dC1DLHU9ZStDLGg9dCtDLG49cC5kYXRhfX1yZXR1cm4gbn1mdW5jdGlvbiBRMXQoZSl7aWYoaXNOYU4odT0rdGhpcy5feC5jYWxsKG51bGwsZSkpfHxpc05hTihoPSt0aGlzLl95LmNhbGwobnVsbCxlKSkpcmV0dXJuIHRoaXM7dmFyIHQscj10aGlzLl9yb290LG4saSxvLGE9dGhpcy5feDAscz10aGlzLl95MCxsPXRoaXMuX3gxLGM9dGhpcy5feTEsdSxoLGYscCxkLGcsXyx5O2lmKCFyKXJldHVybiB0aGlzO2lmKHIubGVuZ3RoKWZvcig7Oyl7aWYoKGQ9dT49KGY9KGErbCkvMikpP2E9ZjpsPWYsKGc9aD49KHA9KHMrYykvMikpP3M9cDpjPXAsdD1yLCEocj1yW189Zzw8MXxkXSkpcmV0dXJuIHRoaXM7aWYoIXIubGVuZ3RoKWJyZWFrOyh0W18rMSYzXXx8dFtfKzImM118fHRbXyszJjNdKSYmKG49dCx5PV8pfWZvcig7ci5kYXRhIT09ZTspaWYoaT1yLCEocj1yLm5leHQpKXJldHVybiB0aGlzO3JldHVybihvPXIubmV4dCkmJmRlbGV0ZSByLm5leHQsaT8obz9pLm5leHQ9bzpkZWxldGUgaS5uZXh0LHRoaXMpOnQ/KG8/dFtfXT1vOmRlbGV0ZSB0W19dLChyPXRbMF18fHRbMV18fHRbMl18fHRbM10pJiZyPT09KHRbM118fHRbMl18fHRbMV18fHRbMF0pJiYhci5sZW5ndGgmJihuP25beV09cjp0aGlzLl9yb290PXIpLHRoaXMpOih0aGlzLl9yb290PW8sdGhpcyl9ZnVuY3Rpb24gdHh0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyOysrdCl0aGlzLnJlbW92ZShlW3RdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBleHQoKXtyZXR1cm4gdGhpcy5fcm9vdH1mdW5jdGlvbiByeHQoKXt2YXIgZT0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbysrZTt3aGlsZSh0PXQubmV4dCl9KSxlfWZ1bmN0aW9uIG54dChlKXt2YXIgdD1bXSxyLG49dGhpcy5fcm9vdCxpLG8sYSxzLGw7Zm9yKG4mJnQucHVzaChuZXcgeW8obix0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO3I9dC5wb3AoKTspaWYoIWUobj1yLm5vZGUsbz1yLngwLGE9ci55MCxzPXIueDEsbD1yLnkxKSYmbi5sZW5ndGgpe3ZhciBjPShvK3MpLzIsdT0oYStsKS8yOyhpPW5bM10pJiZ0LnB1c2gobmV3IHlvKGksYyx1LHMsbCkpLChpPW5bMl0pJiZ0LnB1c2gobmV3IHlvKGksbyx1LGMsbCkpLChpPW5bMV0pJiZ0LnB1c2gobmV3IHlvKGksYyxhLHMsdSkpLChpPW5bMF0pJiZ0LnB1c2gobmV3IHlvKGksbyxhLGMsdSkpfXJldHVybiB0aGlzfWZ1bmN0aW9uIGl4dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgeW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgeW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgeW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgeW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgeW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBveHQoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gYXh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PWUsdGhpcyk6dGhpcy5feH1mdW5jdGlvbiBzeHQoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gbHh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PWUsdGhpcyk6dGhpcy5feX1mdW5jdGlvbiB6aChlLHQscil7dmFyIG49bmV3IHNqKHQ9PW51bGw/b3h0OnQscj09bnVsbD9zeHQ6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBlPT1udWxsP246bi5hZGRBbGwoZSl9ZnVuY3Rpb24gc2ooZSx0LHIsbixpLG8pe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBjeHQoZSl7Zm9yKHZhciB0PXtkYXRhOmUuZGF0YX0scj10O2U9ZS5uZXh0OylyPXIubmV4dD17ZGF0YTplLmRhdGF9O3JldHVybiB0fXZhciB6YT16aC5wcm90b3R5cGU9c2oucHJvdG90eXBlO3phLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgc2oodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1jeHQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1jeHQobikpO3JldHVybiBlfTt6YS5hZGQ9WTF0O3phLmFkZEFsbD1YMXQ7emEuY292ZXI9JDF0O3phLmRhdGE9SzF0O3phLmV4dGVudD1aMXQ7emEuZmluZD1KMXQ7emEucmVtb3ZlPVExdDt6YS5yZW1vdmVBbGw9dHh0O3phLnJvb3Q9ZXh0O3phLnNpemU9cnh0O3phLnZpc2l0PW54dDt6YS52aXNpdEFmdGVyPWl4dDt6YS54PWF4dDt6YS55PWx4dDtmdW5jdGlvbiBKU2UoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIFFTZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gdXh0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PXpoKHQsSlNlLFFTZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9ZnUoKSxMKz1CKkIpLEk9PT0wJiYoST1mdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6RG4oK2wpLHMoKSxvKTplfSxvfVRiKCk7ZnVuY3Rpb24gdDNlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIGh4dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBmeHQoZSl7dmFyIHQ9dDNlLHI9dSxuLGk9RG4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxmdSgpLGs9Qy55K0MudnktUy55LVMudnl8fGZ1KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1KaShhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPWh4dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PWh4dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLGQoKSxoKTppfSxofWttKCk7VGIoKTtmdW5jdGlvbiBweHQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBkeHQoZSl7cmV0dXJuIGUueX12YXIgZTNlPTEwLHIzZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gbXh0KGUpe3ZhciB0LHI9MSxuPS4wMDEsaT0xLU1hdGgucG93KG4sMS8zMDApLG89MCxhPS42LHM9SmkoKSxsPUFfKHUpLGM9dnMoInRpY2siLCJlbmQiKTtlPT1udWxsJiYoZT1bXSk7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLHQpLHI8biYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIix0KSl9ZnVuY3Rpb24gaChkKXt2YXIgZyxfPWUubGVuZ3RoLHk7ZD09PXZvaWQgMCYmKGQ9MSk7Zm9yKHZhciB4PTA7eDxkOysreClmb3Iocis9KG8tcikqaSxzLmVhY2goZnVuY3Rpb24oYil7YihyKX0pLGc9MDtnPF87KytnKXk9ZVtnXSx5LmZ4PT1udWxsP3kueCs9eS52eCo9YTooeS54PXkuZngseS52eD0wKSx5LmZ5PT1udWxsP3kueSs9eS52eSo9YTooeS55PXkuZnkseS52eT0wKTtyZXR1cm4gdH1mdW5jdGlvbiBmKCl7Zm9yKHZhciBkPTAsZz1lLmxlbmd0aCxfO2Q8ZzsrK2Qpe2lmKF89ZVtkXSxfLmluZGV4PWQsXy5meCE9bnVsbCYmKF8ueD1fLmZ4KSxfLmZ5IT1udWxsJiYoXy55PV8uZnkpLGlzTmFOKF8ueCl8fGlzTmFOKF8ueSkpe3ZhciB5PWUzZSpNYXRoLnNxcnQoZCkseD1kKnIzZTtfLng9eSpNYXRoLmNvcyh4KSxfLnk9eSpNYXRoLnNpbih4KX0oaXNOYU4oXy52eCl8fGlzTmFOKF8udnkpKSYmKF8udng9Xy52eT0wKX19ZnVuY3Rpb24gcChkKXtyZXR1cm4gZC5pbml0aWFsaXplJiZkLmluaXRpYWxpemUoZSksZH1yZXR1cm4gZigpLHQ9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwucmVzdGFydCh1KSx0fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGwuc3RvcCgpLHR9LG5vZGVzOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWQsZigpLHMuZWFjaChwKSx0KTplfSxhbHBoYTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZCx0KTpyfSxhbHBoYU1pbjpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZCx0KTpufSxhbHBoYURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStkLHQpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZCx0KTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtZCx0KToxLWF9LGZvcmNlOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZz09bnVsbD9zLnJlbW92ZShkKTpzLnNldChkLHAoZykpLHQpOnMuZ2V0KGQpfSxmaW5kOmZ1bmN0aW9uKGQsZyxfKXt2YXIgeT0wLHg9ZS5sZW5ndGgsYixTLEMsUCxrO2ZvcihfPT1udWxsP189MS8wOl8qPV8seT0wO3k8eDsrK3kpUD1lW3ldLGI9ZC1QLngsUz1nLVAueSxDPWIqYitTKlMsQzxfJiYoaz1QLF89Qyk7cmV0dXJuIGt9LG9uOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbihkLGcpLHQpOmMub24oZCl9fX1mdW5jdGlvbiBneHQoKXt2YXIgZSx0LHIsbj1EbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPXpoKGUscHh0LGR4dCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkRuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH1mdW5jdGlvbiBfeHQoZSx0LHIpe3ZhciBuLGk9RG4oLjEpLG8sYTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oK2UpKSx0PT1udWxsJiYodD0wKSxyPT1udWxsJiYocj0wKTtmdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT0wLGg9bi5sZW5ndGg7dTxoOysrdSl7dmFyIGY9blt1XSxwPWYueC10fHwxZS02LGQ9Zi55LXJ8fDFlLTYsZz1NYXRoLnNxcnQocCpwK2QqZCksXz0oYVt1XS1nKSpvW3VdKmMvZztmLnZ4Kz1wKl8sZi52eSs9ZCpffX1mdW5jdGlvbiBsKCl7aWYoISFuKXt2YXIgYyx1PW4ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheSh1KSxhPW5ldyBBcnJheSh1KSxjPTA7Yzx1OysrYylhW2NdPStlKG5bY10sYyxuKSxvW2NdPWlzTmFOKGFbY10pPzA6K2kobltjXSxjLG4pfX1yZXR1cm4gcy5pbml0aWFsaXplPWZ1bmN0aW9uKGMpe249YyxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpEbigrYyksbCgpLHMpOml9LHMucmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6RG4oK2MpLGwoKSxzKTplfSxzLng9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Mscyk6dH0scy55PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStjLHMpOnJ9LHN9ZnVuY3Rpb24geXh0KGUpe3ZhciB0PURuKC4xKSxyLG4saTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8wOitlKSk7ZnVuY3Rpb24gbyhzKXtmb3IodmFyIGw9MCxjPXIubGVuZ3RoLHU7bDxjOysrbCl1PXJbbF0sdS52eCs9KGlbbF0tdS54KSpuW2xdKnN9ZnVuY3Rpb24gYSgpe2lmKCEhcil7dmFyIHMsbD1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobCksaT1uZXcgQXJyYXkobCkscz0wO3M8bDsrK3MpbltzXT1pc05hTihpW3NdPStlKHJbc10scyxyKSk/MDordChyW3NdLHMscil9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24ocyl7cj1zLGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6dH0sby54PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6RG4oK3MpLGEoKSxvKTplfSxvfWZ1bmN0aW9uIHZ4dChlKXt2YXIgdD1EbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPURuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpEbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6ZX0sb31mdW5jdGlvbiB4eHQoZSl7cmV0dXJuIE1hdGguYWJzKGU9TWF0aC5yb3VuZChlKSk+PTFlMjE/ZS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmUudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE9fKGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfWZ1bmN0aW9uIEZoKGUpe3JldHVybiBlPU9fKE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfWZ1bmN0aW9uIGJ4dChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiB3eHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBuM2U9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gTHAoZSl7aWYoISh0PW4zZS5leGVjKGUpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2UpO3ZhciB0O3JldHVybiBuZXcgR0Uoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9THAucHJvdG90eXBlPUdFLnByb3RvdHlwZTtmdW5jdGlvbiBHRShlKXt0aGlzLmZpbGw9ZS5maWxsPT09dm9pZCAwPyIgIjplLmZpbGwrIiIsdGhpcy5hbGlnbj1lLmFsaWduPT09dm9pZCAwPyI+IjplLmFsaWduKyIiLHRoaXMuc2lnbj1lLnNpZ249PT12b2lkIDA/Ii0iOmUuc2lnbisiIix0aGlzLnN5bWJvbD1lLnN5bWJvbD09PXZvaWQgMD8iIjplLnN5bWJvbCsiIix0aGlzLnplcm89ISFlLnplcm8sdGhpcy53aWR0aD1lLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorZS53aWR0aCx0aGlzLmNvbW1hPSEhZS5jb21tYSx0aGlzLnByZWNpc2lvbj1lLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2UucHJlY2lzaW9uLHRoaXMudHJpbT0hIWUudHJpbSx0aGlzLnR5cGU9ZS50eXBlPT09dm9pZCAwPyIiOmUudHlwZSsiIn1HRS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBTeHQoZSl7dDpmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49LTEsaTtyPHQ7KytyKXN3aXRjaChlW3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErZVtyXSlicmVhayB0O24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD9lLnNsaWNlKDAsbikrZS5zbGljZShpKzEpOmV9dmFyIGxqO2Z1bmN0aW9uIE14dChlLHQpe3ZhciByPU9fKGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV0sbz1pLShsaj1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEsYT1uLmxlbmd0aDtyZXR1cm4gbz09PWE/bjpvPmE/bituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/bi5zbGljZSgwLG8pKyIuIituLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK09fKGUsTWF0aC5tYXgoMCx0K28tMSkpWzBdfWZ1bmN0aW9uIGNqKGUsdCl7dmFyIHI9T18oZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgdWo9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDp4eHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2ooZSoxMDAsdCl9LHI6Y2osczpNeHQsWDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBoaihlKXtyZXR1cm4gZX12YXIgRXh0PUFycmF5LnByb3RvdHlwZS5tYXAsVHh0PVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIGVrKGUpe3ZhciB0PWUuZ3JvdXBpbmc9PT12b2lkIDB8fGUudGhvdXNhbmRzPT09dm9pZCAwP2hqOmJ4dChFeHQuY2FsbChlLmdyb3VwaW5nLE51bWJlciksZS50aG91c2FuZHMrIiIpLHI9ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzBdKyIiLG49ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzFdKyIiLGk9ZS5kZWNpbWFsPT09dm9pZCAwPyIuIjplLmRlY2ltYWwrIiIsbz1lLm51bWVyYWxzPT09dm9pZCAwP2hqOnd4dChFeHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxwKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6dWpbQ118fChiPT09dm9pZCAwJiYoYj0xMiksUz0hMCxDPSJnIiksKF98fGY9PT0iMCImJnA9PT0iPSIpJiYoXz0hMCxmPSIwIixwPSI9Iik7dmFyIFA9Zz09PSIkIj9yOmc9PT0iIyImJi9bYm94WF0vLnRlc3QoQyk/IjAiK0MudG9Mb3dlckNhc2UoKToiIixrPWc9PT0iJCI/bjovWyVwXS8udGVzdChDKT9hOiIiLE89dWpbQ10sRD0vW2RlZmdwcnMlXS8udGVzdChDKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KEMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIEIoSSl7dmFyIEw9UCxSPWssRix6LFU7aWYoQz09PSJjIilSPU8oSSkrUixJPSIiO2Vsc2V7ST0rSTt2YXIgVz1JPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpPKE1hdGguYWJzKEkpLGIpLFMmJihJPVN4dChJKSksVyYmK0k9PTAmJmQhPT0iKyImJihXPSExKSxMPShXP2Q9PT0iKCI/ZDpzOmQ9PT0iLSJ8fGQ9PT0iKCI/IiI6ZCkrTCxSPShDPT09InMiP1R4dFs4K2xqLzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1McChoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaChmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1UeHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIHJrLHhuLFdFO25rKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTtmdW5jdGlvbiBuayhlKXtyZXR1cm4gcms9ZWsoZSkseG49cmsuZm9ybWF0LFdFPXJrLmZvcm1hdFByZWZpeCxya31mdW5jdGlvbiBpayhlKXtyZXR1cm4gTWF0aC5tYXgoMCwtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBvayhlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaCh0KS8zKSkpKjMtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBhayhlLHQpe3JldHVybiBlPU1hdGguYWJzKGUpLHQ9TWF0aC5hYnModCktZSxNYXRoLm1heCgwLEZoKHQpLUZoKGUpKSsxfWZ1bmN0aW9uIFNzKCl7cmV0dXJuIG5ldyBsa31mdW5jdGlvbiBsaygpe3RoaXMucmVzZXQoKX1say5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmxrLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24oZSl7Q3h0KHNrLGUsdGhpcy50KSxDeHQodGhpcyxzay5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9c2sudDp0aGlzLnM9c2sudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgc2s9bmV3IGxrO2Z1bmN0aW9uIEN4dChlLHQscil7dmFyIG49ZS5zPXQrcixpPW4tdCxvPW4taTtlLnQ9dC1vKyhyLWkpfXZhciBsZT0xZS02LHpfPTFlLTEyLEJlPU1hdGguUEksbW49QmUvMixQYj1CZS80LHdpPUJlKjIsdnI9MTgwL0JlLHllPUJlLzE4MCxSZT1NYXRoLmFicyxpYz1NYXRoLmF0YW4sYm49TWF0aC5hdGFuMixadD1NYXRoLmNvcyxZRT1NYXRoLmNlaWwsY2s9TWF0aC5leHA7dmFyIEZfPU1hdGgubG9nLHVrPU1hdGgucG93LFh0PU1hdGguc2luLGNhPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSx4cj1NYXRoLnNxcnQsSWI9TWF0aC50YW47ZnVuY3Rpb24gaGsoZSl7cmV0dXJuIGU+MT8wOmU8LTE/QmU6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIHduKGUpe3JldHVybiBlPjE/bW46ZTwtMT8tbW46TWF0aC5hc2luKGUpfWZ1bmN0aW9uIGZqKGUpe3JldHVybihlPVh0KGUvMikpKmV9ZnVuY3Rpb24gRnIoKXt9ZnVuY3Rpb24gZmsoZSx0KXtlJiZQeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKSYmUHh0W2UudHlwZV0oZSx0KX12YXIgQXh0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7ZmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWZrKHJbbl0uZ2VvbWV0cnksdCl9fSxQeHQ9e1NwaGVyZTpmdW5jdGlvbihlLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKGUsdCl7ZT1lLmNvb3JkaW5hdGVzLHQucG9pbnQoZVswXSxlWzFdLGVbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyllPXJbbl0sdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtwaihlLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspcGoocltuXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7SXh0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspSXh0KHJbbl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylmayhyW25dLHQpfX07ZnVuY3Rpb24gcGooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gSXh0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspcGooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHZvKGUsdCl7ZSYmQXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/QXh0W2UudHlwZV0oZSx0KTpmayhlLHQpfXZhciBqRT1TcygpLHBrPVNzKCksTHh0LGt4dCxkaixtaixnaixwdT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7akUucmVzZXQoKSxwdS5saW5lU3RhcnQ9aTNlLHB1LmxpbmVFbmQ9bzNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9K2pFO3BrLmFkZChlPDA/d2krZTplKSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1Gcn0sc3BoZXJlOmZ1bmN0aW9uKCl7cGsuYWRkKHdpKX19O2Z1bmN0aW9uIGkzZSgpe3B1LnBvaW50PWEzZX1mdW5jdGlvbiBvM2UoKXtSeHQoTHh0LGt4dCl9ZnVuY3Rpb24gYTNlKGUsdCl7cHUucG9pbnQ9Unh0LEx4dD1lLGt4dD10LGUqPXllLHQqPXllLGRqPWUsbWo9WnQodD10LzIrUGIpLGdqPVh0KHQpfWZ1bmN0aW9uIFJ4dChlLHQpe2UqPXllLHQqPXllLHQ9dC8yK1BiO3ZhciByPWUtZGosbj1yPj0wPzE6LTEsaT1uKnIsbz1adCh0KSxhPVh0KHQpLHM9Z2oqYSxsPW1qKm8rcypadChpKSxjPXMqbipYdChpKTtqRS5hZGQoYm4oYyxsKSksZGo9ZSxtaj1vLGdqPWF9ZnVuY3Rpb24gTnh0KGUpe3JldHVybiBway5yZXNldCgpLHZvKGUscHUpLHBrKjJ9ZnVuY3Rpb24gQl8oZSl7cmV0dXJuW2JuKGVbMV0sZVswXSksd24oZVsyXSldfWZ1bmN0aW9uIG9jKGUpe3ZhciB0PWVbMF0scj1lWzFdLG49WnQocik7cmV0dXJuW24qWnQodCksbipYdCh0KSxYdChyKV19ZnVuY3Rpb24gWEUoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl19ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm5bZVsxXSp0WzJdLWVbMl0qdFsxXSxlWzJdKnRbMF0tZVswXSp0WzJdLGVbMF0qdFsxXS1lWzFdKnRbMF1dfWZ1bmN0aW9uIGRrKGUsdCl7ZVswXSs9dFswXSxlWzFdKz10WzFdLGVbMl0rPXRbMl19ZnVuY3Rpb24gJEUoZSx0KXtyZXR1cm5bZVswXSp0LGVbMV0qdCxlWzJdKnRdfWZ1bmN0aW9uIEhfKGUpe3ZhciB0PXhyKGVbMF0qZVswXStlWzFdKmVbMV0rZVsyXSplWzJdKTtlWzBdLz10LGVbMV0vPXQsZVsyXS89dH12YXIgcmksTXMsdWksbmwsVl8sRnh0LEJ4dCxMYixLRT1TcygpLFltLE5wLFJwPXtwb2ludDpfaixsaW5lU3RhcnQ6RHh0LGxpbmVFbmQ6T3h0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1JwLnBvaW50PVZ4dCxScC5saW5lU3RhcnQ9czNlLFJwLmxpbmVFbmQ9bDNlLEtFLnJlc2V0KCkscHUucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwdS5wb2x5Z29uRW5kKCksUnAucG9pbnQ9X2osUnAubGluZVN0YXJ0PUR4dCxScC5saW5lRW5kPU94dCxqRTwwPyhyaT0tKHVpPTE4MCksTXM9LShubD05MCkpOktFPmxlP25sPTkwOktFPC1sZSYmKE1zPS05MCksTnBbMF09cmksTnBbMV09dWl9LHNwaGVyZTpmdW5jdGlvbigpe3JpPS0odWk9MTgwKSxNcz0tKG5sPTkwKX19O2Z1bmN0aW9uIF9qKGUsdCl7WW0ucHVzaChOcD1bcmk9ZSx1aT1lXSksdDxNcyYmKE1zPXQpLHQ+bmwmJihubD10KX1mdW5jdGlvbiBIeHQoZSx0KXt2YXIgcj1vYyhbZSp5ZSx0KnllXSk7aWYoTGIpe3ZhciBuPWtwKExiLHIpLGk9W25bMV0sLW5bMF0sMF0sbz1rcChpLG4pO0hfKG8pLG89Ql8obyk7dmFyIGE9ZS1WXyxzPWE+MD8xOi0xLGw9b1swXSp2cipzLGMsdT1SZShhKT4xODA7dV4ocypWXzxsJiZsPHMqZSk/KGM9b1sxXSp2cixjPm5sJiYobmw9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKlZfPGwmJmw8cyplKT8oYz0tb1sxXSp2cixjPE1zJiYoTXM9YykpOih0PE1zJiYoTXM9dCksdD5ubCYmKG5sPXQpKSksdT9lPFZfP3JsKHJpLGUpPnJsKHJpLHVpKSYmKHVpPWUpOnJsKGUsdWkpPnJsKHJpLHVpKSYmKHJpPWUpOnVpPj1yaT8oZTxyaSYmKHJpPWUpLGU+dWkmJih1aT1lKSk6ZT5WXz9ybChyaSxlKT5ybChyaSx1aSkmJih1aT1lKTpybChlLHVpKT5ybChyaSx1aSkmJihyaT1lKX1lbHNlIFltLnB1c2goTnA9W3JpPWUsdWk9ZV0pO3Q8TXMmJihNcz10KSx0Pm5sJiYobmw9dCksTGI9cixWXz1lfWZ1bmN0aW9uIER4dCgpe1JwLnBvaW50PUh4dH1mdW5jdGlvbiBPeHQoKXtOcFswXT1yaSxOcFsxXT11aSxScC5wb2ludD1faixMYj1udWxsfWZ1bmN0aW9uIFZ4dChlLHQpe2lmKExiKXt2YXIgcj1lLVZfO0tFLmFkZChSZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIEZ4dD1lLEJ4dD10O3B1LnBvaW50KGUsdCksSHh0KGUsdCl9ZnVuY3Rpb24gczNlKCl7cHUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbDNlKCl7Vnh0KEZ4dCxCeHQpLHB1LmxpbmVFbmQoKSxSZShLRSk+bGUmJihyaT0tKHVpPTE4MCkpLE5wWzBdPXJpLE5wWzFdPXVpLExiPW51bGx9ZnVuY3Rpb24gcmwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIGMzZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24genh0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBVeHQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYobmw9dWk9LShyaT1Ncz0xLzApLFltPVtdLHZvKGUsUnApLHI9WW0ubGVuZ3RoKXtmb3IoWW0uc29ydChjM2UpLHQ9MSxuPVltWzBdLG89W25dO3Q8cjsrK3QpaT1ZbVt0XSx6eHQobixpWzBdKXx8enh0KG4saVsxXSk/KHJsKG5bMF0saVsxXSk+cmwoblswXSxuWzFdKSYmKG5bMV09aVsxXSkscmwoaVswXSxuWzFdKT5ybChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXJsKG5bMV0saVswXSkpPmEmJihhPXMscmk9aVswXSx1aT1uWzFdKX1yZXR1cm4gWW09TnA9bnVsbCxyaT09PTEvMHx8TXM9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbcmksTXNdLFt1aSxubF1dfXZhciBaRSxtayxnayxfayx5ayx2ayx4ayxiayx5aix2aix4aixXeHQsWXh0LEZhLEJhLEhhLGR1PXtzcGhlcmU6RnIscG9pbnQ6YmosbGluZVN0YXJ0OnF4dCxsaW5lRW5kOkd4dCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtkdS5saW5lU3RhcnQ9ZjNlLGR1LmxpbmVFbmQ9cDNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZHUubGluZVN0YXJ0PXF4dCxkdS5saW5lRW5kPUd4dH19O2Z1bmN0aW9uIGJqKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7SkUocipadChlKSxyKlh0KGUpLFh0KHQpKX1mdW5jdGlvbiBKRShlLHQscil7KytaRSxnays9KGUtZ2spL1pFLF9rKz0odC1faykvWkUseWsrPShyLXlrKS9aRX1mdW5jdGlvbiBxeHQoKXtkdS5wb2ludD11M2V9ZnVuY3Rpb24gdTNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLGR1LnBvaW50PWgzZSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gaDNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCksbj1yKlp0KGUpLGk9cipYdChlKSxvPVh0KHQpLGE9Ym4oeHIoKGE9QmEqby1IYSppKSphKyhhPUhhKm4tRmEqbykqYSsoYT1GYSppLUJhKm4pKmEpLEZhKm4rQmEqaStIYSpvKTttays9YSx2ays9YSooRmErKEZhPW4pKSx4ays9YSooQmErKEJhPWkpKSxiays9YSooSGErKEhhPW8pKSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gR3h0KCl7ZHUucG9pbnQ9Ymp9ZnVuY3Rpb24gZjNlKCl7ZHUucG9pbnQ9ZDNlfWZ1bmN0aW9uIHAzZSgpe2p4dChXeHQsWXh0KSxkdS5wb2ludD1ian1mdW5jdGlvbiBkM2UoZSx0KXtXeHQ9ZSxZeHQ9dCxlKj15ZSx0Kj15ZSxkdS5wb2ludD1qeHQ7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLEpFKEZhLEJhLEhhKX1mdW5jdGlvbiBqeHQoZSx0KXtlKj15ZSx0Kj15ZTt2YXIgcj1adCh0KSxuPXIqWnQoZSksaT1yKlh0KGUpLG89WHQodCksYT1CYSpvLUhhKmkscz1IYSpuLUZhKm8sbD1GYSppLUJhKm4sYz14cihhKmErcypzK2wqbCksdT13bihjKSxoPWMmJi11L2M7eWorPWgqYSx2ais9aCpzLHhqKz1oKmwsbWsrPXUsdmsrPXUqKEZhKyhGYT1uKSkseGsrPXUqKEJhKyhCYT1pKSksYmsrPXUqKEhhKyhIYT1vKSksSkUoRmEsQmEsSGEpfWZ1bmN0aW9uIFh4dChlKXtaRT1taz1naz1faz15az12az14az1iaz15aj12aj14aj0wLHZvKGUsZHUpO3ZhciB0PXlqLHI9dmosbj14aixpPXQqdCtyKnIrbipuO3JldHVybiBpPHpfJiYodD12ayxyPXhrLG49YmssbWs8bGUmJih0PWdrLHI9X2ssbj15ayksaT10KnQrcipyK24qbixpPHpfKT9bTmFOLE5hTl06W2JuKHIsdCkqdnIsd24obi94cihpKSkqdnJdfWZ1bmN0aW9uIFVfKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBRRShlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9ZnVuY3Rpb24gd2ooZSx0KXtyZXR1cm5bUmUoZSk+QmU/ZStNYXRoLnJvdW5kKC1lL3dpKSp3aTplLHRdfXdqLmludmVydD13ajtmdW5jdGlvbiB0NShlLHQscil7cmV0dXJuKGUlPXdpKT90fHxyP1FFKEt4dChlKSxaeHQodCxyKSk6S3h0KGUpOnR8fHI/Wnh0KHQscik6d2p9ZnVuY3Rpb24gJHh0KGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB0Kz1lLFt0PkJlP3Qtd2k6dDwtQmU/dCt3aTp0LHJdfX1mdW5jdGlvbiBLeHQoZSl7dmFyIHQ9JHh0KGUpO3JldHVybiB0LmludmVydD0keHQoLWUpLHR9ZnVuY3Rpb24gWnh0KGUsdCl7dmFyIHI9WnQoZSksbj1YdChlKSxpPVp0KHQpLG89WHQodCk7ZnVuY3Rpb24gYShzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqcit1Km47cmV0dXJuW2JuKGgqaS1wKm8sdSpyLWYqbiksd24ocCppK2gqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqaS1oKm87cmV0dXJuW2JuKGgqaStmKm8sdSpyK3Aqbiksd24ocCpyLXUqbildfSxhfWZ1bmN0aW9uIHdrKGUpe2U9dDUoZVswXSp5ZSxlWzFdKnllLGUubGVuZ3RoPjI/ZVsyXSp5ZTowKTtmdW5jdGlvbiB0KHIpe3JldHVybiByPWUoclswXSp5ZSxyWzFdKnllKSxyWzBdKj12cixyWzFdKj12cixyfXJldHVybiB0LmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmludmVydChyWzBdKnllLHJbMV0qeWUpLHJbMF0qPXZyLHJbMV0qPXZyLHJ9LHR9ZnVuY3Rpb24gU2ooZSx0LHIsbixpLG8pe2lmKCEhcil7dmFyIGE9WnQodCkscz1YdCh0KSxsPW4qcjtpPT1udWxsPyhpPXQrbip3aSxvPXQtbC8yKTooaT1KeHQoYSxpKSxvPUp4dChhLG8pLChuPjA/aTxvOmk+bykmJihpKz1uKndpKSk7Zm9yKHZhciBjLHU9aTtuPjA/dT5vOnU8bzt1LT1sKWM9Ql8oW2EsLXMqWnQodSksLXMqWHQodSldKSxlLnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIEp4dChlLHQpe3Q9b2ModCksdFswXS09ZSxIXyh0KTt2YXIgcj1oaygtdFsxXSk7cmV0dXJuKCgtdFsyXTwwPy1yOnIpK3dpLWxlKSV3aX1mdW5jdGlvbiBReHQoKXt2YXIgZT1VXyhbMCwwXSksdD1VXyg5MCkscj1VXyg2KSxuLGksbz17cG9pbnQ6YX07ZnVuY3Rpb24gYShsLGMpe24ucHVzaChsPWkobCxjKSksbFswXSo9dnIsbFsxXSo9dnJ9ZnVuY3Rpb24gcygpe3ZhciBsPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykqeWUsdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSp5ZTtyZXR1cm4gbj1bXSxpPXQ1KC1sWzBdKnllLC1sWzFdKnllLDApLmludmVydCxTaihvLGMsdSwxKSxsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbl19LG49aT1udWxsLGx9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6VV8oWytsWzBdLCtsWzFdXSkscyk6ZX0scy5yYWRpdXM9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6dH0scy5wcmVjaXNpb249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6cn0sc31mdW5jdGlvbiBTaygpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbixpKXt0LnB1c2goW3IsbixpXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpGcixyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBrYihlLHQpe3JldHVybiBSZShlWzBdLXRbMF0pPGxlJiZSZShlWzFdLXRbMV0pPGxlfWZ1bmN0aW9uIE1rKGUsdCxyLG4pe3RoaXMueD1lLHRoaXMuej10LHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gRWsoZSx0LHIsbixpKXt2YXIgbz1bXSxhPVtdLHMsbDtpZihlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoISgoZz1kLmxlbmd0aC0xKTw9MCkpe3ZhciBnLF89ZFswXSx5PWRbZ10seDtpZihrYihfLHkpKXtpZighX1syXSYmIXlbMl0pe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufXlbMF0rPTIqbGV9by5wdXNoKHg9bmV3IE1rKF8sZCxudWxsLCEwKSksYS5wdXNoKHgubz1uZXcgTWsoXyxudWxsLHgsITEpKSxvLnB1c2goeD1uZXcgTWsoeSxkLG51bGwsITEpKSxhLnB1c2goeC5vPW5ldyBNayh5LG51bGwseCwhMCkpfX0pLCEhby5sZW5ndGgpe2ZvcihhLnNvcnQodCksdGJ0KG8pLHRidChhKSxzPTAsbD1hLmxlbmd0aDtzPGw7KytzKWFbc10uZT1yPSFyO2Zvcih2YXIgYz1vWzBdLHUsaDs7KXtmb3IodmFyIGY9YyxwPSEwO2YudjspaWYoKGY9Zi5uKT09PWMpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYocClmb3Iocz0wLGw9dS5sZW5ndGg7czxsOysrcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKHApZm9yKHU9Zi5wLnoscz11Lmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKGYueCxmLnAueCwtMSxpKTtmPWYucH1mPWYubyx1PWYueixwPSFwfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gdGJ0KGUpe2lmKCEhKHQ9ZS5sZW5ndGgpKXtmb3IodmFyIHQscj0wLG49ZVswXSxpOysrcjx0OyluLm49aT1lW3JdLGkucD1uLG49aTtuLm49aT1lWzBdLGkucD1ufX12YXIgTWo9U3MoKTtmdW5jdGlvbiBFaihlKXtyZXR1cm4gUmUoZVswXSk8PUJlP2VbMF06Y2EoZVswXSkqKChSZShlWzBdKStCZSkld2ktQmUpfWZ1bmN0aW9uIFRrKGUsdCl7dmFyIHI9RWoodCksbj10WzFdLGk9WHQobiksbz1bWHQociksLVp0KHIpLDBdLGE9MCxzPTA7TWoucmVzZXQoKSxpPT09MT9uPW1uK2xlOmk9PT0tMSYmKG49LW1uLWxlKTtmb3IodmFyIGw9MCxjPWUubGVuZ3RoO2w8YzsrK2wpaWYoISEoaD0odT1lW2xdKS5sZW5ndGgpKWZvcih2YXIgdSxoLGY9dVtoLTFdLHA9RWooZiksZD1mWzFdLzIrUGIsZz1YdChkKSxfPVp0KGQpLHk9MDt5PGg7Kyt5LHA9YixnPUMsXz1QLGY9eCl7dmFyIHg9dVt5XSxiPUVqKHgpLFM9eFsxXS8yK1BiLEM9WHQoUyksUD1adChTKSxrPWItcCxPPWs+PTA/MTotMSxEPU8qayxCPUQ+QmUsST1nKkM7aWYoTWouYWRkKGJuKEkqTypYdChEKSxfKlArSSpadChEKSkpLGErPUI/aytPKndpOmssQl5wPj1yXmI+PXIpe3ZhciBMPWtwKG9jKGYpLG9jKHgpKTtIXyhMKTt2YXIgUj1rcChvLEwpO0hfKFIpO3ZhciBGPShCXms+PTA/LTE6MSkqd24oUlsyXSk7KG4+Rnx8bj09PUYmJihMWzBdfHxMWzFdKSkmJihzKz1CXms+PTA/MTotMSl9fXJldHVybihhPC1sZXx8YTxsZSYmTWo8LWxlKV5zJjF9ZnVuY3Rpb24gQ2soZSx0LHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQoaSksYT1TaygpLHM9dChhKSxsPSExLGMsdSxoLGY9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDpfLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9eSxmLmxpbmVTdGFydD14LGYubGluZUVuZD1iLHU9W10sYz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2YucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD1fLHU9SW0odSk7dmFyIFM9VGsoYyxuKTt1Lmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksRWsodSxnM2UsUyxyLGkpKTpTJiYobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxsJiYoaS5wb2x5Z29uRW5kKCksbD0hMSksdT1jPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gcChTLEMpe2UoUyxDKSYmaS5wb2ludChTLEMpfWZ1bmN0aW9uIGQoUyxDKXtvLnBvaW50KFMsQyl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxvLmxpbmVTdGFydCgpfWZ1bmN0aW9uIF8oKXtmLnBvaW50PXAsby5saW5lRW5kKCl9ZnVuY3Rpb24geShTLEMpe2gucHVzaChbUyxDXSkscy5wb2ludChTLEMpfWZ1bmN0aW9uIHgoKXtzLmxpbmVTdGFydCgpLGg9W119ZnVuY3Rpb24gYigpe3koaFswXVswXSxoWzBdWzFdKSxzLmxpbmVFbmQoKTt2YXIgUz1zLmNsZWFuKCksQz1hLnJlc3VsdCgpLFAsaz1DLmxlbmd0aCxPLEQsQjtpZihoLnBvcCgpLGMucHVzaChoKSxoPW51bGwsISFrKXtpZihTJjEpe2lmKEQ9Q1swXSwoTz1ELmxlbmd0aC0xKT4wKXtmb3IobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxQPTA7UDxPOysrUClpLnBvaW50KChCPURbUF0pWzBdLEJbMV0pO2kubGluZUVuZCgpfXJldHVybn1rPjEmJlMmMiYmQy5wdXNoKEMucG9wKCkuY29uY2F0KEMuc2hpZnQoKSkpLHUucHVzaChDLmZpbHRlcihtM2UpKX19cmV0dXJuIGZ9fWZ1bmN0aW9uIG0zZShlKXtyZXR1cm4gZS5sZW5ndGg+MX1mdW5jdGlvbiBnM2UoZSx0KXtyZXR1cm4oKGU9ZS54KVswXTwwP2VbMV0tbW4tbGU6bW4tZVsxXSktKCh0PXQueClbMF08MD90WzFdLW1uLWxlOm1uLXRbMV0pfXZhciBlNT1DayhmdW5jdGlvbigpe3JldHVybiEwfSxfM2UsdjNlLFstQmUsLW1uXSk7ZnVuY3Rpb24gXzNlKGUpe3ZhciB0PU5hTixyPU5hTixuPU5hTixpO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLGk9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/QmU6LUJlLGw9UmUoby10KTtSZShsLUJlKTxsZT8oZS5wb2ludCh0LHI9KHIrYSkvMj4wP21uOi1tbiksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGUucG9pbnQobyxyKSxpPTApOm4hPT1zJiZsPj1CZSYmKFJlKHQtbik8bGUmJih0LT1uKmxlKSxSZShvLXMpPGxlJiYoby09cypsZSkscj15M2UodCxyLG8sYSksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGk9MCksZS5wb2ludCh0PW8scj1hKSxuPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSx0PXI9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWl9fX1mdW5jdGlvbiB5M2UoZSx0LHIsbil7dmFyIGksbyxhPVh0KGUtcik7cmV0dXJuIFJlKGEpPmxlP2ljKChYdCh0KSoobz1adChuKSkqWHQociktWHQobikqKGk9WnQodCkpKlh0KGUpKS8oaSpvKmEpKToodCtuKS8yfWZ1bmN0aW9uIHYzZShlLHQscixuKXt2YXIgaTtpZihlPT1udWxsKWk9ciptbixuLnBvaW50KC1CZSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChCZSxpKSxuLnBvaW50KEJlLDApLG4ucG9pbnQoQmUsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQmUsLWkpLG4ucG9pbnQoLUJlLDApLG4ucG9pbnQoLUJlLGkpO2Vsc2UgaWYoUmUoZVswXS10WzBdKT5sZSl7dmFyIG89ZVswXTx0WzBdP0JlOi1CZTtpPXIqby8yLG4ucG9pbnQoLW8saSksbi5wb2ludCgwLGkpLG4ucG9pbnQobyxpKX1lbHNlIG4ucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBBayhlKXt2YXIgdD1adChlKSxyPTYqeWUsbj10PjAsaT1SZSh0KT5sZTtmdW5jdGlvbiBvKHUsaCxmLHApe1NqKHAsZSxyLGYsdSxoKX1mdW5jdGlvbiBhKHUsaCl7cmV0dXJuIFp0KHUpKlp0KGgpPnR9ZnVuY3Rpb24gcyh1KXt2YXIgaCxmLHAsZCxnO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkPXA9ITEsZz0xfSxwb2ludDpmdW5jdGlvbihfLHkpe3ZhciB4PVtfLHldLGIsUz1hKF8seSksQz1uP1M/MDpjKF8seSk6Uz9jKF8rKF88MD9CZTotQmUpLHkpOjA7aWYoIWgmJihkPXA9UykmJnUubGluZVN0YXJ0KCksUyE9PXAmJihiPWwoaCx4KSwoIWJ8fGtiKGgsYil8fGtiKHgsYikpJiYoeFsyXT0xKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0sMiksdS5saW5lRW5kKCkpLGg9YjtlbHNlIGlmKGkmJmgmJm5eUyl7dmFyIFA7IShDJmYpJiYoUD1sKHgsaCwhMCkpJiYoZz0wLG4/KHUubGluZVN0YXJ0KCksdS5wb2ludChQWzBdWzBdLFBbMF1bMV0pLHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSk6KHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSx1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdLDMpKSl9UyYmKCFofHwha2IoaCx4KSkmJnUucG9pbnQoeFswXSx4WzFdKSxoPXgscD1TLGY9Q30sbGluZUVuZDpmdW5jdGlvbigpe3AmJnUubGluZUVuZCgpLGg9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gZ3woZCYmcCk8PDF9fX1mdW5jdGlvbiBsKHUsaCxmKXt2YXIgcD1vYyh1KSxkPW9jKGgpLGc9WzEsMCwwXSxfPWtwKHAsZCkseT1YRShfLF8pLHg9X1swXSxiPXkteCp4O2lmKCFiKXJldHVybiFmJiZ1O3ZhciBTPXQqeS9iLEM9LXQqeC9iLFA9a3AoZyxfKSxrPSRFKGcsUyksTz0kRShfLEMpO2RrKGssTyk7dmFyIEQ9UCxCPVhFKGssRCksST1YRShELEQpLEw9QipCLUkqKFhFKGssayktMSk7aWYoIShMPDApKXt2YXIgUj14cihMKSxGPSRFKEQsKC1CLVIpL0kpO2lmKGRrKEYsayksRj1CXyhGKSwhZilyZXR1cm4gRjt2YXIgej11WzBdLFU9aFswXSxXPXVbMV0sWj1oWzFdLHJ0O1U8eiYmKHJ0PXosej1VLFU9cnQpO3ZhciBvdD1VLXosc3Q9UmUob3QtQmUpPGxlLFN0PXN0fHxvdDxsZTtpZighc3QmJlo8VyYmKHJ0PVcsVz1aLFo9cnQpLFN0P3N0P1crWj4wXkZbMV08KFJlKEZbMF0teik8bGU/VzpaKTpXPD1GWzFdJiZGWzFdPD1aOm90PkJlXih6PD1GWzBdJiZGWzBdPD1VKSl7dmFyIGJ0PSRFKEQsKC1CK1IpL0kpO3JldHVybiBkayhidCxrKSxbRixCXyhidCldfX19ZnVuY3Rpb24gYyh1LGgpe3ZhciBmPW4/ZTpCZS1lLHA9MDtyZXR1cm4gdTwtZj9wfD0xOnU+ZiYmKHB8PTIpLGg8LWY/cHw9NDpoPmYmJihwfD04KSxwfXJldHVybiBDayhhLHMsbyxuP1swLC1lXTpbLUJlLGUtQmVdKX1mdW5jdGlvbiBlYnQoZSx0LHIsbixpLG8pe3ZhciBhPWVbMF0scz1lWzFdLGw9dFswXSxjPXRbMV0sdT0wLGg9MSxmPWwtYSxwPWMtcyxkO2lmKGQ9ci1hLCEoIWYmJmQ+MCkpe2lmKGQvPWYsZjwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihmPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPWktYSwhKCFmJiZkPDApKXtpZihkLz1mLGY8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYoZj4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9aWYoZD1uLXMsISghcCYmZD4wKSl7aWYoZC89cCxwPDApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1lbHNlIGlmKHA+MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWlmKGQ9by1zLCEoIXAmJmQ8MCkpe2lmKGQvPXAscDwwKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9ZWxzZSBpZihwPjApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1yZXR1cm4gdT4wJiYoZVswXT1hK3UqZixlWzFdPXMrdSpwKSxoPDEmJih0WzBdPWEraCpmLHRbMV09cytoKnApLCEwfX19fX12YXIgcjU9MWU5LFBrPS1yNTtmdW5jdGlvbiBEcChlLHQscixuKXtmdW5jdGlvbiBpKGMsdSl7cmV0dXJuIGU8PWMmJmM8PXImJnQ8PXUmJnU8PW59ZnVuY3Rpb24gbyhjLHUsaCxmKXt2YXIgcD0wLGQ9MDtpZihjPT1udWxsfHwocD1hKGMsaCkpIT09KGQ9YSh1LGgpKXx8bChjLHUpPDBeaD4wKWRvIGYucG9pbnQocD09PTB8fHA9PT0zP2U6cixwPjE/bjp0KTt3aGlsZSgocD0ocCtoKzQpJTQpIT09ZCk7ZWxzZSBmLnBvaW50KHVbMF0sdVsxXSl9ZnVuY3Rpb24gYShjLHUpe3JldHVybiBSZShjWzBdLWUpPGxlP3U+MD8wOjM6UmUoY1swXS1yKTxsZT91PjA/MjoxOlJlKGNbMV0tdCk8bGU/dT4wPzE6MDp1PjA/MzoyfWZ1bmN0aW9uIHMoYyx1KXtyZXR1cm4gbChjLngsdS54KX1mdW5jdGlvbiBsKGMsdSl7dmFyIGg9YShjLDEpLGY9YSh1LDEpO3JldHVybiBoIT09Zj9oLWY6aD09PTA/dVsxXS1jWzFdOmg9PT0xP2NbMF0tdVswXTpoPT09Mj9jWzFdLXVbMV06dVswXS1jWzBdfXJldHVybiBmdW5jdGlvbihjKXt2YXIgdT1jLGg9U2soKSxmLHAsZCxnLF8seSx4LGIsUyxDLFAsaz17cG9pbnQ6TyxsaW5lU3RhcnQ6TCxsaW5lRW5kOlIscG9seWdvblN0YXJ0OkIscG9seWdvbkVuZDpJfTtmdW5jdGlvbiBPKHosVSl7aSh6LFUpJiZ1LnBvaW50KHosVSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgej0wLFU9MCxXPXAubGVuZ3RoO1U8VzsrK1UpZm9yKHZhciBaPXBbVV0scnQ9MSxvdD1aLmxlbmd0aCxzdD1aWzBdLFN0LGJ0LE10PXN0WzBdLGx0PXN0WzFdO3J0PG90OysrcnQpU3Q9TXQsYnQ9bHQsc3Q9WltydF0sTXQ9c3RbMF0sbHQ9c3RbMV0sYnQ8PW4/bHQ+biYmKE10LVN0KSoobi1idCk+KGx0LWJ0KSooZS1TdCkmJisrejpsdDw9biYmKE10LVN0KSoobi1idCk8KGx0LWJ0KSooZS1TdCkmJi0tejtyZXR1cm4gen1mdW5jdGlvbiBCKCl7dT1oLGY9W10scD1bXSxQPSEwfWZ1bmN0aW9uIEkoKXt2YXIgej1EKCksVT1QJiZ6LFc9KGY9SW0oZikpLmxlbmd0aDsoVXx8VykmJihjLnBvbHlnb25TdGFydCgpLFUmJihjLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYyksYy5saW5lRW5kKCkpLFcmJkVrKGYscyx6LG8sYyksYy5wb2x5Z29uRW5kKCkpLHU9YyxmPXA9ZD1udWxsfWZ1bmN0aW9uIEwoKXtrLnBvaW50PUYscCYmcC5wdXNoKGQ9W10pLEM9ITAsUz0hMSx4PWI9TmFOfWZ1bmN0aW9uIFIoKXtmJiYoRihnLF8pLHkmJlMmJmgucmVqb2luKCksZi5wdXNoKGgucmVzdWx0KCkpKSxrLnBvaW50PU8sUyYmdS5saW5lRW5kKCl9ZnVuY3Rpb24gRih6LFUpe3ZhciBXPWkoeixVKTtpZihwJiZkLnB1c2goW3osVV0pLEMpZz16LF89VSx5PVcsQz0hMSxXJiYodS5saW5lU3RhcnQoKSx1LnBvaW50KHosVSkpO2Vsc2UgaWYoVyYmUyl1LnBvaW50KHosVSk7ZWxzZXt2YXIgWj1beD1NYXRoLm1heChQayxNYXRoLm1pbihyNSx4KSksYj1NYXRoLm1heChQayxNYXRoLm1pbihyNSxiKSldLHJ0PVt6PU1hdGgubWF4KFBrLE1hdGgubWluKHI1LHopKSxVPU1hdGgubWF4KFBrLE1hdGgubWluKHI1LFUpKV07ZWJ0KFoscnQsZSx0LHIsbik/KFN8fCh1LmxpbmVTdGFydCgpLHUucG9pbnQoWlswXSxaWzFdKSksdS5wb2ludChydFswXSxydFsxXSksV3x8dS5saW5lRW5kKCksUD0hMSk6VyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpLFA9ITEpfXg9eixiPVUsUz1XfXJldHVybiBrfX1mdW5jdGlvbiByYnQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9RHAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgVGo9U3MoKSxDaixJayxMayxSYj17c3BoZXJlOkZyLHBvaW50OkZyLGxpbmVTdGFydDp4M2UsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6RnIscG9seWdvbkVuZDpGcn07ZnVuY3Rpb24geDNlKCl7UmIucG9pbnQ9dzNlLFJiLmxpbmVFbmQ9YjNlfWZ1bmN0aW9uIGIzZSgpe1JiLnBvaW50PVJiLmxpbmVFbmQ9RnJ9ZnVuY3Rpb24gdzNlKGUsdCl7ZSo9eWUsdCo9eWUsQ2o9ZSxJaz1YdCh0KSxMaz1adCh0KSxSYi5wb2ludD1TM2V9ZnVuY3Rpb24gUzNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WHQodCksbj1adCh0KSxpPVJlKGUtQ2opLG89WnQoaSksYT1YdChpKSxzPW4qYSxsPUxrKnItSWsqbipvLGM9SWsqcitMaypuKm87VGouYWRkKGJuKHhyKHMqcytsKmwpLGMpKSxDaj1lLElrPXIsTGs9bn1mdW5jdGlvbiBrayhlKXtyZXR1cm4gVGoucmVzZXQoKSx2byhlLFJiKSwrVGp9dmFyIEFqPVtudWxsLG51bGxdLE0zZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6QWp9O2Z1bmN0aW9uIE5iKGUsdCl7cmV0dXJuIEFqWzBdPWUsQWpbMV09dCxrayhNM2UpfXZhciBuYnQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJrKHJbbl0uZ2VvbWV0cnksdCkpcmV0dXJuITA7cmV0dXJuITF9fSxpYnQ9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbihlLHQpe3JldHVybiBvYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2ludDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYob2J0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYWJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoYWJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2J0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoc2J0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihSayhyW25dLHQpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gUmsoZSx0KXtyZXR1cm4gZSYmaWJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/aWJ0W2UudHlwZV0oZSx0KTohMX1mdW5jdGlvbiBvYnQoZSx0KXtyZXR1cm4gTmIoZSx0KT09PTB9ZnVuY3Rpb24gYWJ0KGUsdCl7Zm9yKHZhciByLG4saSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXtpZihuPU5iKGVbb10sdCksbj09PTB8fG8+MCYmKGk9TmIoZVtvXSxlW28tMV0pLGk+MCYmcjw9aSYmbjw9aSYmKHIrbi1pKSooMS1NYXRoLnBvdygoci1uKS9pLDIpKTx6XyppKSlyZXR1cm4hMDtyPW59cmV0dXJuITF9ZnVuY3Rpb24gc2J0KGUsdCl7cmV0dXJuISFUayhlLm1hcChFM2UpLGxidCh0KSl9ZnVuY3Rpb24gRTNlKGUpe3JldHVybiBlPWUubWFwKGxidCksZS5wb3AoKSxlfWZ1bmN0aW9uIGxidChlKXtyZXR1cm5bZVswXSp5ZSxlWzFdKnllXX1mdW5jdGlvbiBjYnQoZSx0KXtyZXR1cm4oZSYmbmJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/bmJ0W2UudHlwZV06UmspKGUsdCl9ZnVuY3Rpb24gdWJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gaGJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gTmsoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIElyKFlFKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSXIoWUUocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSXIoWUUodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJXUpPmxlfSkubWFwKGYpKS5jb25jYXQoSXIoWUUoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJWgpPmxlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPXVidChvLGksOTApLHA9aGJ0KHQsZSxfKSxkPXVidChzLGEsOTApLGc9aGJ0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArbGVdLFsxODAsOTAtbGVdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1sZV0sWzE4MCw4MCtsZV1dKX1mdW5jdGlvbiBmYnQoKXtyZXR1cm4gTmsoKSgpfWZ1bmN0aW9uIHBidChlLHQpe3ZhciByPWVbMF0qeWUsbj1lWzFdKnllLGk9dFswXSp5ZSxvPXRbMV0qeWUsYT1adChuKSxzPVh0KG4pLGw9WnQobyksYz1YdChvKSx1PWEqWnQociksaD1hKlh0KHIpLGY9bCpadChpKSxwPWwqWHQoaSksZD0yKnduKHhyKGZqKG8tbikrYSpsKmZqKGktcikpKSxnPVh0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1YdCh5Kj1kKS9nLGI9WHQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltibihDLFMpKnZyLGJuKFAseHIoUypTK0MqQykpKnZyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcip2cixuKnZyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffWZ1bmN0aW9uIGptKGUpe3JldHVybiBlfXZhciBQaj1TcygpLElqPVNzKCksZGJ0LG1idCxMaixraixYbT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WG0ubGluZVN0YXJ0PVQzZSxYbS5saW5lRW5kPUEzZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1htLmxpbmVTdGFydD1YbS5saW5lRW5kPVhtLnBvaW50PUZyLFBqLmFkZChSZShJaikpLElqLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVBqLzI7cmV0dXJuIFBqLnJlc2V0KCksZX19O2Z1bmN0aW9uIFQzZSgpe1htLnBvaW50PUMzZX1mdW5jdGlvbiBDM2UoZSx0KXtYbS5wb2ludD1nYnQsZGJ0PUxqPWUsbWJ0PWtqPXR9ZnVuY3Rpb24gZ2J0KGUsdCl7SWouYWRkKGtqKmUtTGoqdCksTGo9ZSxraj10fWZ1bmN0aW9uIEEzZSgpe2didChkYnQsbWJ0KX12YXIgUmo9WG07dmFyIERiPTEvMCxEaz1EYixuNT0tRGIsT2s9bjUsUDNlPXtwb2ludDpJM2UsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OkZyLHBvbHlnb25FbmQ6RnIscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9W1tEYixEa10sW241LE9rXV07cmV0dXJuIG41PU9rPS0oRGs9RGI9MS8wKSxlfX07ZnVuY3Rpb24gSTNlKGUsdCl7ZTxEYiYmKERiPWUpLGU+bjUmJihuNT1lKSx0PERrJiYoRGs9dCksdD5PayYmKE9rPXQpfXZhciBPYj1QM2U7dmFyIE5qPTAsRGo9MCxpNT0wLHprPTAsRms9MCx6Yj0wLE9qPTAsemo9MCxvNT0wLHZidCx4YnQsQmgsSGgsbXU9e3BvaW50OnFfLGxpbmVTdGFydDpfYnQsbGluZUVuZDp5YnQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bXUubGluZVN0YXJ0PVIzZSxtdS5saW5lRW5kPU4zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe211LnBvaW50PXFfLG11LmxpbmVTdGFydD1fYnQsbXUubGluZUVuZD15YnR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW81P1tPai9vNSx6ai9vNV06emI/W3prL3piLEZrL3piXTppNT9bTmovaTUsRGovaTVdOltOYU4sTmFOXTtyZXR1cm4gTmo9RGo9aTU9ems9Rms9emI9T2o9emo9bzU9MCxlfX07ZnVuY3Rpb24gcV8oZSx0KXtOais9ZSxEais9dCwrK2k1fWZ1bmN0aW9uIF9idCgpe211LnBvaW50PUwzZX1mdW5jdGlvbiBMM2UoZSx0KXttdS5wb2ludD1rM2UscV8oQmg9ZSxIaD10KX1mdW5jdGlvbiBrM2UoZSx0KXt2YXIgcj1lLUJoLG49dC1IaCxpPXhyKHIqcituKm4pO3prKz1pKihCaCtlKS8yLEZrKz1pKihIaCt0KS8yLHpiKz1pLHFfKEJoPWUsSGg9dCl9ZnVuY3Rpb24geWJ0KCl7bXUucG9pbnQ9cV99ZnVuY3Rpb24gUjNlKCl7bXUucG9pbnQ9RDNlfWZ1bmN0aW9uIE4zZSgpe2JidCh2YnQseGJ0KX1mdW5jdGlvbiBEM2UoZSx0KXttdS5wb2ludD1iYnQscV8odmJ0PUJoPWUseGJ0PUhoPXQpfWZ1bmN0aW9uIGJidChlLHQpe3ZhciByPWUtQmgsbj10LUhoLGk9eHIocipyK24qbik7emsrPWkqKEJoK2UpLzIsRmsrPWkqKEhoK3QpLzIsemIrPWksaT1IaCplLUJoKnQsT2orPWkqKEJoK2UpLHpqKz1pKihIaCt0KSxvNSs9aSozLHFfKEJoPWUsSGg9dCl9dmFyIEZqPW11O2Z1bmN0aW9uIEJrKGUpe3RoaXMuX2NvbnRleHQ9ZX1Cay5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yYWRpdXM9ZSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha31kZWZhdWx0Ont0aGlzLl9jb250ZXh0Lm1vdmVUbyhlK3RoaXMuX3JhZGl1cyx0KSx0aGlzLl9jb250ZXh0LmFyYyhlLHQsdGhpcy5fcmFkaXVzLDAsd2kpO2JyZWFrfX19LHJlc3VsdDpGcn07dmFyIEhqPVNzKCksQmosd2J0LFNidCxhNSxzNSxIaz17cG9pbnQ6RnIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7SGsucG9pbnQ9TzNlfSxsaW5lRW5kOmZ1bmN0aW9uKCl7QmomJk1idCh3YnQsU2J0KSxIay5wb2ludD1Gcn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Qmo9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtCaj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT0rSGo7cmV0dXJuIEhqLnJlc2V0KCksZX19O2Z1bmN0aW9uIE8zZShlLHQpe0hrLnBvaW50PU1idCx3YnQ9YTU9ZSxTYnQ9czU9dH1mdW5jdGlvbiBNYnQoZSx0KXthNS09ZSxzNS09dCxIai5hZGQoeHIoYTUqYTUrczUqczUpKSxhNT1lLHM1PXR9dmFyIFZqPUhrO2Z1bmN0aW9uIFZrKCl7dGhpcy5fc3RyaW5nPVtdfVZrLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTpFYnQoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4oZT0rZSkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9ZSx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPT09MCYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3N0cmluZy5wdXNoKCJNIixlLCIsIix0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fc3RyaW5nLnB1c2goIkwiLGUsIiwiLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NpcmNsZT09bnVsbCYmKHRoaXMuX2NpcmNsZT1FYnQodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQsdGhpcy5fY2lyY2xlKTticmVha319fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgZT10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSxlfWVsc2UgcmV0dXJuIG51bGx9fTtmdW5jdGlvbiBFYnQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9ZnVuY3Rpb24gVGJ0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2byhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihSaikpLFJqLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihWaikpLFZqLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKE9iKSksT2IucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihGaikpLEZqLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLGptKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgVmspOm5ldyBCayh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfWZ1bmN0aW9uIENidChlKXtyZXR1cm57c3RyZWFtOiRtKGUpfX1mdW5jdGlvbiAkbShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVqO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gci5zdHJlYW09dCxyfX1mdW5jdGlvbiBVaigpe31Vai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVqLHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJlYW0ucG9pbnQoZSx0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHFqKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksdm8ocixlLnN0cmVhbShPYikpLHQoT2IucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIEdfKGUsdCxyKXtyZXR1cm4gcWooZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gRmIoZSx0LHIpe3JldHVybiBHXyhlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiBCYihlLHQscil7cmV0dXJuIHFqKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gSGIoZSx0LHIpe3JldHVybiBxaihlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBBYnQ9MTYsejNlPVp0KDMwKnllKTtmdW5jdGlvbiBHaihlLHQpe3JldHVybit0P0IzZShlLHQpOkYzZShlKX1mdW5jdGlvbiBGM2UoZSl7cmV0dXJuICRtKHtwb2ludDpmdW5jdGlvbih0LHIpe3Q9ZSh0LHIpLHRoaXMuc3RyZWFtLnBvaW50KHRbMF0sdFsxXSl9fSl9ZnVuY3Rpb24gQjNlKGUsdCl7ZnVuY3Rpb24gcihuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe3ZhciB5PWMtbix4PXUtaSxiPXkqeSt4Kng7aWYoYj40KnQmJmctLSl7dmFyIFM9YStmLEM9cytwLFA9bCtkLGs9eHIoUypTK0MqQytQKlApLE89d24oUC89ayksRD1SZShSZShQKS0xKTxsZXx8UmUoby1oKTxsZT8obytoKS8yOmJuKEMsUyksQj1lKEQsTyksST1CWzBdLEw9QlsxXSxSPUktbixGPUwtaSx6PXgqUi15KkY7KHoqei9iPnR8fFJlKCh5KlIreCpGKS9iLS41KT4uM3x8YSpmK3MqcCtsKmQ8ejNlKSYmKHIobixpLG8sYSxzLGwsSSxMLEQsUy89ayxDLz1rLFAsZyxfKSxfLnBvaW50KEksTCkscihJLEwsRCxTLEMsUCxjLHUsaCxmLHAsZCxnLF8pKX19cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfPXtwb2ludDp5LGxpbmVTdGFydDp4LGxpbmVFbmQ6Uyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpLF8ubGluZVN0YXJ0PUN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKSxfLmxpbmVTdGFydD14fX07ZnVuY3Rpb24geShPLEQpe089ZShPLEQpLG4ucG9pbnQoT1swXSxPWzFdKX1mdW5jdGlvbiB4KCl7aD1OYU4sXy5wb2ludD1iLG4ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYihPLEQpe3ZhciBCPW9jKFtPLERdKSxJPWUoTyxEKTtyKGgsZix1LHAsZCxnLGg9SVswXSxmPUlbMV0sdT1PLHA9QlswXSxkPUJbMV0sZz1CWzJdLEFidCxuKSxuLnBvaW50KGgsZil9ZnVuY3Rpb24gUygpe18ucG9pbnQ9eSxuLmxpbmVFbmQoKX1mdW5jdGlvbiBDKCl7eCgpLF8ucG9pbnQ9UCxfLmxpbmVFbmQ9a31mdW5jdGlvbiBQKE8sRCl7YihpPU8sRCksbz1oLGE9ZixzPXAsbD1kLGM9ZyxfLnBvaW50PWJ9ZnVuY3Rpb24gaygpe3IoaCxmLHUscCxkLGcsbyxhLGkscyxsLGMsQWJ0LG4pLF8ubGluZUVuZD1TLFMoKX1yZXR1cm4gX319dmFyIEgzZT0kbSh7cG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlKnllLHQqeWUpfX0pO2Z1bmN0aW9uIFYzZShlKXtyZXR1cm4gJG0oe3BvaW50OmZ1bmN0aW9uKHQscil7dmFyIG49ZSh0LHIpO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfWZ1bmN0aW9uIFUzZShlLHQscixuLGkpe2Z1bmN0aW9uIG8oYSxzKXtyZXR1cm4gYSo9bixzKj1pLFt0K2UqYSxyLWUqc119cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7cmV0dXJuWyhhLXQpL2Uqbiwoci1zKS9lKmldfSxvfWZ1bmN0aW9uIFBidChlLHQscixuLGksbyl7dmFyIGE9WnQobykscz1YdChvKSxsPWEqZSxjPXMqZSx1PWEvZSxoPXMvZSxmPShzKnItYSp0KS9lLHA9KHMqdCthKnIpL2U7ZnVuY3Rpb24gZChnLF8pe3JldHVybiBnKj1uLF8qPWksW2wqZy1jKl8rdCxyLWMqZy1sKl9dfXJldHVybiBkLmludmVydD1mdW5jdGlvbihnLF8pe3JldHVybltuKih1KmctaCpfK2YpLGkqKHAtaCpnLXUqXyldfSxkfWZ1bmN0aW9uIFNpKGUpe3JldHVybiBsNShmdW5jdGlvbigpe3JldHVybiBlfSkoKX1mdW5jdGlvbiBsNShlKXt2YXIgdCxyPTE1MCxuPTQ4MCxpPTI1MCxvPTAsYT0wLHM9MCxsPTAsYz0wLHUsaD0wLGY9MSxwPTEsZD1udWxsLGc9ZTUsXz1udWxsLHkseCxiLFM9am0sQz0uNSxQLGssTyxELEI7ZnVuY3Rpb24gSSh6KXtyZXR1cm4gTyh6WzBdKnllLHpbMV0qeWUpfWZ1bmN0aW9uIEwoeil7cmV0dXJuIHo9Ty5pbnZlcnQoelswXSx6WzFdKSx6JiZbelswXSp2cix6WzFdKnZyXX1JLnN0cmVhbT1mdW5jdGlvbih6KXtyZXR1cm4gRCYmQj09PXo/RDpEPUgzZShWM2UodSkoZyhQKFMoQj16KSkpKSl9LEkucHJlY2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz16LGQ9dm9pZCAwLEYoKSk6Z30sSS5wb3N0Y2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz16LF89eT14PWI9bnVsbCxGKCkpOlN9LEkuY2xpcEFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt6P0FrKGQ9eip5ZSk6KGQ9bnVsbCxlNSksRigpKTpkKnZyfSxJLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9ej09bnVsbD8oXz15PXg9Yj1udWxsLGptKTpEcChfPSt6WzBdWzBdLHk9K3pbMF1bMV0seD0relsxXVswXSxiPSt6WzFdWzFdKSxGKCkpOl89PW51bGw/bnVsbDpbW18seV0sW3gsYl1dfSxJLnNjYWxlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt6LFIoKSk6cn0sSS50cmFuc2xhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3pbMF0saT0relsxXSxSKCkpOltuLGldfSxJLmNlbnRlcj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz16WzBdJTM2MCp5ZSxhPXpbMV0lMzYwKnllLFIoKSk6W28qdnIsYSp2cl19LEkucm90YXRlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXpbMF0lMzYwKnllLGw9elsxXSUzNjAqeWUsYz16Lmxlbmd0aD4yP3pbMl0lMzYwKnllOjAsUigpKTpbcyp2cixsKnZyLGMqdnJdfSxJLmFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXolMzYwKnllLFIoKSk6aCp2cn0sSS5yZWZsZWN0WD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj16Py0xOjEsUigpKTpmPDB9LEkucmVmbGVjdFk9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ej8tMToxLFIoKSk6cDwwfSxJLnByZWNpc2lvbj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD1HaihrLEM9eip6KSxGKCkpOnhyKEMpfSxJLmZpdEV4dGVudD1mdW5jdGlvbih6LFUpe3JldHVybiBHXyhJLHosVSl9LEkuZml0U2l6ZT1mdW5jdGlvbih6LFUpe3JldHVybiBGYihJLHosVSl9LEkuZml0V2lkdGg9ZnVuY3Rpb24oeixVKXtyZXR1cm4gQmIoSSx6LFUpfSxJLmZpdEhlaWdodD1mdW5jdGlvbih6LFUpe3JldHVybiBIYihJLHosVSl9O2Z1bmN0aW9uIFIoKXt2YXIgej1QYnQociwwLDAsZixwLGgpLmFwcGx5KG51bGwsdChvLGEpKSxVPShoP1BidDpVM2UpKHIsbi16WzBdLGktelsxXSxmLHAsaCk7cmV0dXJuIHU9dDUocyxsLGMpLGs9UUUodCxVKSxPPVFFKHUsayksUD1HaihrLEMpLEYoKX1mdW5jdGlvbiBGKCl7cmV0dXJuIEQ9Qj1udWxsLEl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksSS5pbnZlcnQ9dC5pbnZlcnQmJkwsUigpfX1mdW5jdGlvbiBWYihlKXt2YXIgdD0wLHI9QmUvMyxuPWw1KGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp5ZSxyPW9bMV0qeWUpOlt0KnZyLHIqdnJdfSxpfWZ1bmN0aW9uIElidChlKXt2YXIgdD1adChlKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuW24qdCxYdChpKS90XX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm5bbi90LHduKGkqdCldfSxyfWZ1bmN0aW9uIFdqKGUsdCl7dmFyIHI9WHQoZSksbj0ocitYdCh0KSkvMjtpZihSZShuKTxsZSlyZXR1cm4gSWJ0KGUpO3ZhciBpPTErciooMipuLXIpLG89eHIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9eHIoaS0yKm4qWHQobCkpL247cmV0dXJuW2MqWHQocyo9biksby1jKlp0KHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWwsdT1ibihzLFJlKGMpKSpjYShjKTtyZXR1cm4gYypuPDAmJih1LT1CZSpjYShzKSpjYShjKSksW3Uvbix3bigoaS0ocypzK2MqYykqbipuKS8oMipuKSldfSxhfWZ1bmN0aW9uIFdfKCl7cmV0dXJuIFZiKFdqKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVrKCl7cmV0dXJuIFdfKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gcTNlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBMYnQoKXt2YXIgZSx0LHI9VWsoKSxuLGk9V18oKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1XXygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1xM2UoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2xlLGcrLjEyKnArbGVdLFtkLS4yMTQqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArbGUsZysuMTY2KnArbGVdLFtkLS4xMTUqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBHXyh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBGYih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gQmIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBIYih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX1mdW5jdGlvbiBxayhlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1adCh0KSxpPVp0KHIpLG89ZShuKmkpO3JldHVybltvKmkqWHQodCksbypYdChyKV19fWZ1bmN0aW9uIFZoKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPXhyKHQqdCtyKnIpLGk9ZShuKSxvPVh0KGkpLGE9WnQoaSk7cmV0dXJuW2JuKHQqbyxuKmEpLHduKG4mJnIqby9uKV19fXZhciBHaz1xayhmdW5jdGlvbihlKXtyZXR1cm4geHIoMi8oMStlKSl9KTtHay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIDIqd24oZS8yKX0pO2Z1bmN0aW9uIGtidCgpe3JldHVybiBTaShHaykuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBXaz1xayhmdW5jdGlvbihlKXtyZXR1cm4oZT1oayhlKSkmJmUvWHQoZSl9KTtXay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtmdW5jdGlvbiBSYnQoKXtyZXR1cm4gU2koV2spLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxODAtLjAwMSl9ZnVuY3Rpb24gWV8oZSx0KXtyZXR1cm5bZSxGXyhJYigobW4rdCkvMikpXX1ZXy5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKmljKGNrKHQpKS1tbl19O2Z1bmN0aW9uIE5idCgpe3JldHVybiBZaihZXykuc2NhbGUoOTYxL3dpKX1mdW5jdGlvbiBZaihlKXt2YXIgdD1TaShlKSxyPXQuY2VudGVyLG49dC5zY2FsZSxpPXQudHJhbnNsYXRlLG89dC5jbGlwRXh0ZW50LGE9bnVsbCxzLGwsYzt0LnNjYWxlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuKGgpLHUoKSk6bigpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaShoKSx1KCkpOmkoKX0sdC5jZW50ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIoaCksdSgpKTpyKCl9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD09bnVsbD9hPXM9bD1jPW51bGw6KGE9K2hbMF1bMF0scz0raFswXVsxXSxsPStoWzFdWzBdLGM9K2hbMV1bMV0pLHUoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19O2Z1bmN0aW9uIHUoKXt2YXIgaD1CZSpuKCksZj10KHdrKHQucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBvKGE9PW51bGw/W1tmWzBdLWgsZlsxXS1oXSxbZlswXStoLGZbMV0raF1dOmU9PT1ZXz9bW01hdGgubWF4KGZbMF0taCxhKSxzXSxbTWF0aC5taW4oZlswXStoLGwpLGNdXTpbW2EsTWF0aC5tYXgoZlsxXS1oLHMpXSxbbCxNYXRoLm1pbihmWzFdK2gsYyldXSl9cmV0dXJuIHUoKX1mdW5jdGlvbiBZayhlKXtyZXR1cm4gSWIoKG1uK2UpLzIpfWZ1bmN0aW9uIGpqKGUsdCl7dmFyIHI9WnQoZSksbj1lPT09dD9YdChlKTpGXyhyL1p0KHQpKS9GXyhZayh0KS9ZayhlKSksaT1yKnVrKFlrKGUpLG4pL247aWYoIW4pcmV0dXJuIFlfO2Z1bmN0aW9uIG8oYSxzKXtpPjA/czwtbW4rbGUmJihzPS1tbitsZSk6cz5tbi1sZSYmKHM9bW4tbGUpO3ZhciBsPWkvdWsoWWsocyksbik7cmV0dXJuW2wqWHQobiphKSxpLWwqWnQobiphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zLGM9Y2EobikqeHIoYSphK2wqbCksdT1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJih1LT1CZSpjYShhKSpjYShsKSksW3UvbiwyKmljKHVrKGkvYywxL24pKS1tbl19LG99ZnVuY3Rpb24gRGJ0KCl7cmV0dXJuIFZiKGpqKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfWZ1bmN0aW9uIGpfKGUsdCl7cmV0dXJuW2UsdF19al8uaW52ZXJ0PWpfO2Z1bmN0aW9uIE9idCgpe3JldHVybiBTaShqXykuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBYaihlLHQpe3ZhciByPVp0KGUpLG49ZT09PXQ/WHQoZSk6KHItWnQodCkpLyh0LWUpLGk9ci9uK2U7aWYoUmUobik8bGUpcmV0dXJuIGpfO2Z1bmN0aW9uIG8oYSxzKXt2YXIgbD1pLXMsYz1uKmE7cmV0dXJuW2wqWHQoYyksaS1sKlp0KGMpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1pLXMsYz1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJihjLT1CZSpjYShhKSpjYShsKSksW2MvbixpLWNhKG4pKnhyKGEqYStsKmwpXX0sb31mdW5jdGlvbiB6YnQoKXtyZXR1cm4gVmIoWGopLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9dmFyIGM1PTEuMzQwMjY0LHU1PS0uMDgxMTA2LGg1PTg5M2UtNixmNT0uMDAzNzk2LGprPXhyKDMpLzIsRzNlPTEyO2Z1bmN0aW9uIFhrKGUsdCl7dmFyIHI9d24oamsqWHQodCkpLG49cipyLGk9bipuKm47cmV0dXJuW2UqWnQocikvKGprKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKSksciooYzUrdTUqbitpKihoNStmNSpuKSldfVhrLmludmVydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10LG49cipyLGk9bipuKm4sbz0wLGEscyxsO288RzNlJiYocz1yKihjNSt1NSpuK2kqKGg1K2Y1Km4pKS10LGw9YzUrMyp1NSpuK2kqKDcqaDUrOSpmNSpuKSxyLT1hPXMvbCxuPXIqcixpPW4qbipuLCEoUmUoYSk8el8pKTsrK28pO3JldHVybltqayplKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKS9adChyKSx3bihYdChyKS9qayldfTtmdW5jdGlvbiBGYnQoKXtyZXR1cm4gU2koWGspLnNjYWxlKDE3Ny4xNTgpfWZ1bmN0aW9uICRrKGUsdCl7dmFyIHI9WnQodCksbj1adChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19JGsuaW52ZXJ0PVZoKGljKTtmdW5jdGlvbiBCYnQoKXtyZXR1cm4gU2koJGspLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9ZnVuY3Rpb24gSGJ0KCl7dmFyIGU9MSx0PTAscj0wLG49MSxpPTEsbz0wLGEscyxsPW51bGwsYyx1LGgsZj0xLHA9MSxkPSRtKHtwb2ludDpmdW5jdGlvbihTLEMpe3ZhciBQPWIoW1MsQ10pO3RoaXMuc3RyZWFtLnBvaW50KFBbMF0sUFsxXSl9fSksZz1qbSxfLHk7ZnVuY3Rpb24geCgpe3JldHVybiBmPWUqbixwPWUqaSxfPXk9bnVsbCxifWZ1bmN0aW9uIGIoUyl7dmFyIEM9U1swXSpmLFA9U1sxXSpwO2lmKG8pe3ZhciBrPVAqYS1DKnM7Qz1DKmErUCpzLFA9a31yZXR1cm5bQyt0LFArcl19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKFMpe3ZhciBDPVNbMF0tdCxQPVNbMV0tcjtpZihvKXt2YXIgaz1QKmErQypzO0M9QyphLVAqcyxQPWt9cmV0dXJuW0MvZixQL3BdfSxiLnN0cmVhbT1mdW5jdGlvbihTKXtyZXR1cm4gXyYmeT09PVM/XzpfPWQoZyh5PVMpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TLGw9Yz11PWg9bnVsbCx4KCkpOmd9LGIuY2xpcEV4dGVudD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TPT1udWxsPyhsPWM9dT1oPW51bGwsam0pOkRwKGw9K1NbMF1bMF0sYz0rU1swXVsxXSx1PStTWzFdWzBdLGg9K1NbMV1bMV0pLHgoKSk6bD09bnVsbD9udWxsOltbbCxjXSxbdSxoXV19LGIuc2NhbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K1MseCgpKTplfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rU1swXSxyPStTWzFdLHgoKSk6W3Qscl19LGIuYW5nbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89UyUzNjAqeWUscz1YdChvKSxhPVp0KG8pLHgoKSk6byp2cn0sYi5yZWZsZWN0WD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TPy0xOjEseCgpKTpuPDB9LGIucmVmbGVjdFk9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Uz8tMToxLHgoKSk6aTwwfSxiLmZpdEV4dGVudD1mdW5jdGlvbihTLEMpe3JldHVybiBHXyhiLFMsQyl9LGIuZml0U2l6ZT1mdW5jdGlvbihTLEMpe3JldHVybiBGYihiLFMsQyl9LGIuZml0V2lkdGg9ZnVuY3Rpb24oUyxDKXtyZXR1cm4gQmIoYixTLEMpfSxiLmZpdEhlaWdodD1mdW5jdGlvbihTLEMpe3JldHVybiBIYihiLFMsQyl9LGJ9ZnVuY3Rpb24gS2soZSx0KXt2YXIgcj10KnQsbj1yKnI7cmV0dXJuW2UqKC44NzA3LS4xMzE5NzkqcituKigtLjAxMzc5MStuKiguMDAzOTcxKnItLjAwMTUyOSpuKSkpLHQqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLS4wNDQ0NzUrLjAyODg3NCpyLS4wMDU5MTYqbikpKV19S2suaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dCxuPTI1LGk7ZG97dmFyIG89cipyLGE9bypvO3ItPWk9KHIqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLS4wNDQ0NzUrLjAyODg3NCpvLS4wMDU5MTYqYSkpKS10KS8oMS4wMDcyMjYrbyooLjAxNTA4NSozK2EqKC0uMDQ0NDc1KjcrLjAyODg3NCo5Km8tLjAwNTkxNioxMSphKSkpfXdoaWxlKFJlKGkpPmxlJiYtLW4+MCk7cmV0dXJuW2UvKC44NzA3KyhvPXIqcikqKC0uMTMxOTc5K28qKC0uMDEzNzkxK28qbypvKiguMDAzOTcxLS4wMDE1MjkqbykpKSkscl19O2Z1bmN0aW9uIFZidCgpe3JldHVybiBTaShLaykuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gWmsoZSx0KXtyZXR1cm5bWnQodCkqWHQoZSksWHQodCldfVprLmludmVydD1WaCh3bik7ZnVuY3Rpb24gVWJ0KCl7cmV0dXJuIFNpKFprKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2xlKX1mdW5jdGlvbiBKayhlLHQpe3ZhciByPVp0KHQpLG49MStadChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19SmsuaW52ZXJ0PVZoKGZ1bmN0aW9uKGUpe3JldHVybiAyKmljKGUpfSk7ZnVuY3Rpb24gcWJ0KCl7cmV0dXJuIFNpKEprKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIFFrKGUsdCl7cmV0dXJuW0ZfKEliKChtbit0KS8yKSksLWVdfVFrLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKmljKGNrKGUpKS1tbl19O2Z1bmN0aW9uIEdidCgpe3ZhciBlPVlqKFFrKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9ZnVuY3Rpb24gVzNlKGUsdCl7cmV0dXJuIGUucGFyZW50PT09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIFkzZShlKXtyZXR1cm4gZS5yZWR1Y2UoajNlLDApL2UubGVuZ3RofWZ1bmN0aW9uIGozZShlLHQpe3JldHVybiBlK3QueH1mdW5jdGlvbiBYM2UoZSl7cmV0dXJuIDErZS5yZWR1Y2UoJDNlLDApfWZ1bmN0aW9uICQzZShlLHQpe3JldHVybiBNYXRoLm1heChlLHQueSl9ZnVuY3Rpb24gSzNlKGUpe2Zvcih2YXIgdDt0PWUuY2hpbGRyZW47KWU9dFswXTtyZXR1cm4gZX1mdW5jdGlvbiBaM2UoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10W3QubGVuZ3RoLTFdO3JldHVybiBlfWZ1bmN0aW9uIFdidCgpe3ZhciBlPVczZSx0PTEscj0xLG49ITE7ZnVuY3Rpb24gaShvKXt2YXIgYSxzPTA7by5lYWNoQWZ0ZXIoZnVuY3Rpb24oZil7dmFyIHA9Zi5jaGlsZHJlbjtwPyhmLng9WTNlKHApLGYueT1YM2UocCkpOihmLng9YT9zKz1lKGYsYSk6MCxmLnk9MCxhPWYpfSk7dmFyIGw9SzNlKG8pLGM9WjNlKG8pLHU9bC54LWUobCxjKS8yLGg9Yy54K2UoYyxsKS8yO3JldHVybiBvLmVhY2hBZnRlcihuP2Z1bmN0aW9uKGYpe2YueD0oZi54LW8ueCkqdCxmLnk9KG8ueS1mLnkpKnJ9OmZ1bmN0aW9uKGYpe2YueD0oZi54LXUpLyhoLXUpKnQsZi55PSgxLShvLnk/Zi55L28ueToxKSkqcn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9byxpKTplfSxpLnNpemU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rb1swXSxyPStvWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStvWzBdLHI9K29bMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEozZShlKXt2YXIgdD0wLHI9ZS5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKCFuKXQ9MTtlbHNlIGZvcig7LS1uPj0wOyl0Kz1yW25dLnZhbHVlO2UudmFsdWU9dH1mdW5jdGlvbiBZYnQoKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoSjNlKX1mdW5jdGlvbiBqYnQoZSl7dmFyIHQ9dGhpcyxyLG49W3RdLGksbyxhO2RvIGZvcihyPW4ucmV2ZXJzZSgpLG49W107dD1yLnBvcCgpOylpZihlKHQpLGk9dC5jaGlsZHJlbixpKWZvcihvPTAsYT1pLmxlbmd0aDtvPGE7KytvKW4ucHVzaChpW29dKTt3aGlsZShuLmxlbmd0aCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWGJ0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG4saTt0PXIucG9wKCk7KWlmKGUodCksbj10LmNoaWxkcmVuLG4pZm9yKGk9bi5sZW5ndGgtMTtpPj0wOy0taSlyLnB1c2gobltpXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gJGJ0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG49W10saSxvLGE7dD1yLnBvcCgpOylpZihuLnB1c2godCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pci5wdXNoKGlbb10pO2Zvcig7dD1uLnBvcCgpOyllKHQpO3JldHVybiB0aGlzfWZ1bmN0aW9uIEtidChlKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciByPStlKHQuZGF0YSl8fDAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO3QudmFsdWU9cn0pfWZ1bmN0aW9uIFpidChlKXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJnQuY2hpbGRyZW4uc29ydChlKX0pfWZ1bmN0aW9uIEpidChlKXtmb3IodmFyIHQ9dGhpcyxyPVEzZSh0LGUpLG49W3RdO3QhPT1yOyl0PXQucGFyZW50LG4ucHVzaCh0KTtmb3IodmFyIGk9bi5sZW5ndGg7ZSE9PXI7KW4uc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiBufWZ1bmN0aW9uIFEzZShlLHQpe2lmKGU9PT10KXJldHVybiBlO3ZhciByPWUuYW5jZXN0b3JzKCksbj10LmFuY2VzdG9ycygpLGk9bnVsbDtmb3IoZT1yLnBvcCgpLHQ9bi5wb3AoKTtlPT09dDspaT1lLGU9ci5wb3AoKSx0PW4ucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24gUWJ0KCl7Zm9yKHZhciBlPXRoaXMsdD1bZV07ZT1lLnBhcmVudDspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIHQydCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiBlMnQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW58fGUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gcjJ0KCl7dmFyIGU9dGhpcyx0PVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24ocil7ciE9PWUmJnQucHVzaCh7c291cmNlOnIucGFyZW50LHRhcmdldDpyfSl9KSx0fWZ1bmN0aW9uIHA1KGUsdCl7dmFyIHI9bmV3IEttKGUpLG49K2UudmFsdWUmJihyLnZhbHVlPWUudmFsdWUpLGksbz1bcl0sYSxzLGwsYztmb3IodD09bnVsbCYmKHQ9ZU1lKTtpPW8ucG9wKCk7KWlmKG4mJihpLnZhbHVlPStpLmRhdGEudmFsdWUpLChzPXQoaS5kYXRhKSkmJihjPXMubGVuZ3RoKSlmb3IoaS5jaGlsZHJlbj1uZXcgQXJyYXkoYyksbD1jLTE7bD49MDstLWwpby5wdXNoKGE9aS5jaGlsZHJlbltsXT1uZXcgS20oc1tsXSkpLGEucGFyZW50PWksYS5kZXB0aD1pLmRlcHRoKzE7cmV0dXJuIHIuZWFjaEJlZm9yZSgkail9ZnVuY3Rpb24gdE1lKCl7cmV0dXJuIHA1KHRoaXMpLmVhY2hCZWZvcmUock1lKX1mdW5jdGlvbiBlTWUoZSl7cmV0dXJuIGUuY2hpbGRyZW59ZnVuY3Rpb24gck1lKGUpe2UuZGF0YT1lLmRhdGEuZGF0YX1mdW5jdGlvbiAkaihlKXt2YXIgdD0wO2RvIGUuaGVpZ2h0PXQ7d2hpbGUoKGU9ZS5wYXJlbnQpJiZlLmhlaWdodDwrK3QpfWZ1bmN0aW9uIEttKGUpe3RoaXMuZGF0YT1lLHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfUttLnByb3RvdHlwZT1wNS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkttLGNvdW50OllidCxlYWNoOmpidCxlYWNoQWZ0ZXI6JGJ0LGVhY2hCZWZvcmU6WGJ0LHN1bTpLYnQsc29ydDpaYnQscGF0aDpKYnQsYW5jZXN0b3JzOlFidCxkZXNjZW5kYW50czp0MnQsbGVhdmVzOmUydCxsaW5rczpyMnQsY29weTp0TWV9O3ZhciBuMnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGkydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX1mdW5jdGlvbiBlOChlKXtmb3IodmFyIHQ9MCxyPShlPWkydChuMnQuY2FsbChlKSkpLmxlbmd0aCxuPVtdLGksbzt0PHI7KWk9ZVt0XSxvJiZvMnQobyxpKT8rK3Q6KG89aU1lKG49bk1lKG4saSkpLHQ9MCk7cmV0dXJuIG99ZnVuY3Rpb24gbk1lKGUsdCl7dmFyIHIsbjtpZihLaih0LGUpKXJldHVyblt0XTtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKWlmKHQ4KHQsZVtyXSkmJktqKGQ1KGVbcl0sdCksZSkpcmV0dXJuW2Vbcl0sdF07Zm9yKHI9MDtyPGUubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPGUubGVuZ3RoOysrbilpZih0OChkNShlW3JdLGVbbl0pLHQpJiZ0OChkNShlW3JdLHQpLGVbbl0pJiZ0OChkNShlW25dLHQpLGVbcl0pJiZLaihhMnQoZVtyXSxlW25dLHQpLGUpKXJldHVybltlW3JdLGVbbl0sdF07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHQ4KGUsdCl7dmFyIHI9ZS5yLXQucixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPDB8fHIqcjxuKm4raSppfWZ1bmN0aW9uIG8ydChlLHQpe3ZhciByPWUuci10LnIrMWUtNixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIEtqKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYoIW8ydChlLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGlNZShlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gb01lKGVbMF0pO2Nhc2UgMjpyZXR1cm4gZDUoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIGEydChlWzBdLGVbMV0sZVsyXSl9fWZ1bmN0aW9uIG9NZShlKXtyZXR1cm57eDplLngseTplLnkscjplLnJ9fWZ1bmN0aW9uIGQ1KGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9ZS5yLG89dC54LGE9dC55LHM9dC5yLGw9by1yLGM9YS1uLHU9cy1pLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK28rbC9oKnUpLzIseToobithK2MvaCp1KS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBhMnQoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPWUucixhPXQueCxzPXQueSxsPXQucixjPXIueCx1PXIueSxoPXIucixmPW4tYSxwPW4tYyxkPWktcyxnPWktdSxfPWwtbyx5PWgtbyx4PW4qbitpKmktbypvLGI9eC1hKmEtcypzK2wqbCxTPXgtYypjLXUqdStoKmgsQz1wKmQtZipnLFA9KGQqUy1nKmIpLyhDKjIpLW4saz0oZypfLWQqeSkvQyxPPShwKmItZipTKS8oQyoyKS1pLEQ9KGYqeS1wKl8pL0MsQj1rKmsrRCpELTEsST0yKihvK1AqaytPKkQpLEw9UCpQK08qTy1vKm8sUj0tKEI/KEkrTWF0aC5zcXJ0KEkqSS00KkIqTCkpLygyKkIpOkwvSSk7cmV0dXJue3g6bitQK2sqUix5OmkrTytEKlIscjpSfX1mdW5jdGlvbiBzMnQoZSx0LHIpe3ZhciBuPWUueC10LngsaSxvLGE9ZS55LXQueSxzLGwsYz1uKm4rYSphO2M/KG89dC5yK3IucixvKj1vLGw9ZS5yK3IucixsKj1sLG8+bD8oaT0oYytsLW8pLygyKmMpLHM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsbC9jLWkqaSkpLHIueD1lLngtaSpuLXMqYSxyLnk9ZS55LWkqYStzKm4pOihpPShjK28tbCkvKDIqYykscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtaSppKSksci54PXQueCtpKm4tcyphLHIueT10LnkraSphK3MqbikpOihyLng9dC54K3IucixyLnk9dC55KX1mdW5jdGlvbiBsMnQoZSx0KXt2YXIgcj1lLnIrdC5yLTFlLTYsbj10LngtZS54LGk9dC55LWUueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBjMnQoZSl7dmFyIHQ9ZS5fLHI9ZS5uZXh0Ll8sbj10LnIrci5yLGk9KHQueCpyLnIrci54KnQucikvbixvPSh0Lnkqci5yK3IueSp0LnIpL247cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gcjgoZSl7dGhpcy5fPWUsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFpqKGUpe2lmKCEoaT1lLmxlbmd0aCkpcmV0dXJuIDA7dmFyIHQscixuLGksbyxhLHMsbCxjLHUsaDtpZih0PWVbMF0sdC54PTAsdC55PTAsIShpPjEpKXJldHVybiB0LnI7aWYocj1lWzFdLHQueD0tci5yLHIueD10LnIsci55PTAsIShpPjIpKXJldHVybiB0LnIrci5yO3MydChyLHQsbj1lWzJdKSx0PW5ldyByOCh0KSxyPW5ldyByOChyKSxuPW5ldyByOChuKSx0Lm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD10LnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9dDt0OmZvcihzPTM7czxpOysrcyl7czJ0KHQuXyxyLl8sbj1lW3NdKSxuPW5ldyByOChuKSxsPXIubmV4dCxjPXQucHJldmlvdXMsdT1yLl8ucixoPXQuXy5yO2RvIGlmKHU8PWgpe2lmKGwydChsLl8sbi5fKSl7cj1sLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGwydChjLl8sbi5fKSl7dD1jLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH1oKz1jLl8ucixjPWMucHJldmlvdXN9d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9dCxuLm5leHQ9cix0Lm5leHQ9ci5wcmV2aW91cz1yPW4sbz1jMnQodCk7KG49bi5uZXh0KSE9PXI7KShhPWMydChuKSk8byYmKHQ9bixvPWEpO3I9dC5uZXh0fWZvcih0PVtyLl9dLG49cjsobj1uLm5leHQpIT09cjspdC5wdXNoKG4uXyk7Zm9yKG49ZTgodCkscz0wO3M8aTsrK3MpdD1lW3NdLHQueC09bi54LHQueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gdTJ0KGUpe3JldHVybiBaaihlKSxlfWZ1bmN0aW9uIGgydChlKXtyZXR1cm4gZT09bnVsbD9udWxsOlViKGUpfWZ1bmN0aW9uIFViKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZX1mdW5jdGlvbiBPcCgpe3JldHVybiAwfWZ1bmN0aW9uIFptKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBhTWUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBkMnQoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj1PcDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoZjJ0KGUpKS5lYWNoQWZ0ZXIoSmoobiwuNSkpLmVhY2hCZWZvcmUocDJ0KDEpKTpvLmVhY2hCZWZvcmUoZjJ0KGFNZSkpLmVhY2hBZnRlcihKaihPcCwxKSkuZWFjaEFmdGVyKEpqKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKHAydChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1oMnQobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOlptKCtvKSxpKTpufSxpfWZ1bmN0aW9uIGYydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIEpqKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9WmoobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBwMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19ZnVuY3Rpb24gbjgoZSl7ZS54MD1NYXRoLnJvdW5kKGUueDApLGUueTA9TWF0aC5yb3VuZChlLnkwKSxlLngxPU1hdGgucm91bmQoZS54MSksZS55MT1NYXRoLnJvdW5kKGUueTEpfWZ1bmN0aW9uIFVoKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYobi10KS9lLnZhbHVlOysrczxsOylhPW9bc10sYS55MD1yLGEueTE9aSxhLngwPXQsYS54MT10Kz1hLnZhbHVlKmN9ZnVuY3Rpb24gbTJ0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKG44KSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmVWgobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIGcydD0iJCIsc01lPXtkZXB0aDotMX0sXzJ0PXt9O2Z1bmN0aW9uIGxNZShlKXtyZXR1cm4gZS5pZH1mdW5jdGlvbiBjTWUoZSl7cmV0dXJuIGUucGFyZW50SWR9ZnVuY3Rpb24geTJ0KCl7dmFyIGU9bE1lLHQ9Y01lO2Z1bmN0aW9uIHIobil7dmFyIGksbyxhPW4ubGVuZ3RoLHMsbCxjLHU9bmV3IEFycmF5KGEpLGgsZixwPXt9O2ZvcihvPTA7bzxhOysrbylpPW5bb10sYz11W29dPW5ldyBLbShpKSwoaD1lKGksbyxuKSkhPW51bGwmJihoKz0iIikmJihmPWcydCsoYy5pZD1oKSxwW2ZdPWYgaW4gcD9fMnQ6Yyk7Zm9yKG89MDtvPGE7KytvKWlmKGM9dVtvXSxoPXQobltvXSxvLG4pLGg9PW51bGx8fCEoaCs9IiIpKXtpZihzKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtzPWN9ZWxzZXtpZihsPXBbZzJ0K2hdLCFsKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitoKTtpZihsPT09XzJ0KXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2gpO2wuY2hpbGRyZW4/bC5jaGlsZHJlbi5wdXNoKGMpOmwuY2hpbGRyZW49W2NdLGMucGFyZW50PWx9aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYocy5wYXJlbnQ9c01lLHMuZWFjaEJlZm9yZShmdW5jdGlvbihkKXtkLmRlcHRoPWQucGFyZW50LmRlcHRoKzEsLS1hfSkuZWFjaEJlZm9yZSgkaikscy5wYXJlbnQ9bnVsbCxhPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBzfXJldHVybiByLmlkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKG4pLHIpOmV9LHIucGFyZW50SWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VWIobikscik6dH0scn1mdW5jdGlvbiB1TWUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gUWooZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gdD90WzBdOmUudH1mdW5jdGlvbiB0WChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbdC5sZW5ndGgtMV06ZS50fWZ1bmN0aW9uIGhNZShlLHQscil7dmFyIG49ci8odC5pLWUuaSk7dC5jLT1uLHQucys9cixlLmMrPW4sdC56Kz1yLHQubSs9cn1mdW5jdGlvbiBmTWUoZSl7Zm9yKHZhciB0PTAscj0wLG49ZS5jaGlsZHJlbixpPW4ubGVuZ3RoLG87LS1pPj0wOylvPW5baV0sby56Kz10LG8ubSs9dCx0Kz1vLnMrKHIrPW8uYyl9ZnVuY3Rpb24gcE1lKGUsdCxyKXtyZXR1cm4gZS5hLnBhcmVudD09PXQucGFyZW50P2UuYTpyfWZ1bmN0aW9uIGk4KGUsdCl7dGhpcy5fPWUsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPXR9aTgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoS20ucHJvdG90eXBlKTtmdW5jdGlvbiBkTWUoZSl7Zm9yKHZhciB0PW5ldyBpOChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBpOChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgaTgobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gdjJ0KCl7dmFyIGU9dU1lLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9ZE1lKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe2ZNZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD10WChkKSxmPVFqKGYpLGQmJmY7KWc9UWooZykscD10WChwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoaE1lKHBNZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhdFgocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVFqKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEptKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyIGVYPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiByWChlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/VWgobCxyLG4saSxnP24rPWQqXy9nOm8pOkptKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgbzg9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7clgodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KGVYKTtmdW5jdGlvbiB4MnQoKXt2YXIgZT1vOCx0PSExLHI9MSxuPTEsaT1bMF0sbz1PcCxhPU9wLHM9T3AsbD1PcCxjPU9wO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGYueDA9Zi55MD0wLGYueDE9cixmLnkxPW4sZi5lYWNoQmVmb3JlKGgpLGk9WzBdLHQmJmYuZWFjaEJlZm9yZShuOCksZn1mdW5jdGlvbiBoKGYpe3ZhciBwPWlbZi5kZXB0aF0sZD1mLngwK3AsZz1mLnkwK3AsXz1mLngxLXAseT1mLnkxLXA7XzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxmLngwPWQsZi55MD1nLGYueDE9XyxmLnkxPXksZi5jaGlsZHJlbiYmKHA9aVtmLmRlcHRoKzFdPW8oZikvMixkKz1jKGYpLXAsZys9YShmKS1wLF8tPXMoZiktcCx5LT1sKGYpLXAsXzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxlKGYsZCxnLF8seSkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZix1KTp0fSx1LnNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2ZbMF0sbj0rZlsxXSx1KTpbcixuXX0sdS50aWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKGYpLHUpOmV9LHUucGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcihmKS5wYWRkaW5nT3V0ZXIoZik6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKGYpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nQm90dG9tKGYpLnBhZGRpbmdMZWZ0KGYpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Wm0oK2YpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6Y30sdX1mdW5jdGlvbiBiMnQoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX1mdW5jdGlvbiB3MnQoZSx0LHIsbixpKXsoZS5kZXB0aCYxP0ptOlVoKShlLHQscixuLGkpfXZhciBTMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP1VoKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTpKbShjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9clgodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShlWCk7ZnVuY3Rpb24gTTJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG4saT1lW3ItMV0sbz0wOysrdDxyOyluPWksaT1lW3RdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn1mdW5jdGlvbiBFMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj0wLGk9MCxvLGE9ZVtyLTFdLHMsbD0wOysrdDxyOylvPWEsYT1lW3RdLGwrPXM9b1swXSphWzFdLWFbMF0qb1sxXSxuKz0ob1swXSthWzBdKSpzLGkrPShvWzFdK2FbMV0pKnM7cmV0dXJuIGwqPTMsW24vbCxpL2xdfWZ1bmN0aW9uIFQydChlLHQscil7cmV0dXJuKHRbMF0tZVswXSkqKHJbMV0tZVsxXSktKHRbMV0tZVsxXSkqKHJbMF0tZVswXSl9ZnVuY3Rpb24gbU1lKGUsdCl7cmV0dXJuIGVbMF0tdFswXXx8ZVsxXS10WzFdfWZ1bmN0aW9uIEMydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8dDsrK2kpe2Zvcig7bj4xJiZUMnQoZVtyW24tMl1dLGVbcltuLTFdXSxlW2ldKTw9MDspLS1uO3JbbisrXT1pfXJldHVybiByLnNsaWNlKDAsbil9ZnVuY3Rpb24gQTJ0KGUpe2lmKChyPWUubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciB0LHIsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkocik7Zm9yKHQ9MDt0PHI7Kyt0KW5bdF09WytlW3RdWzBdLCtlW3RdWzFdLHRdO2ZvcihuLnNvcnQobU1lKSx0PTA7dDxyOysrdClpW3RdPVtuW3RdWzBdLC1uW3RdWzFdXTt2YXIgbz1DMnQobiksYT1DMnQoaSkscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKHQ9by5sZW5ndGgtMTt0Pj0wOy0tdCljLnB1c2goZVtuW29bdF1dWzJdXSk7Zm9yKHQ9K3M7dDxhLmxlbmd0aC1sOysrdCljLnB1c2goZVtuW2FbdF1dWzJdXSk7cmV0dXJuIGN9ZnVuY3Rpb24gUDJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX1mdW5jdGlvbiBJMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9ZnVuY3Rpb24gYWMoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12YXIgTDJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPW49PW51bGw/MDorbixpPWk9PW51bGw/MToraSxhcmd1bWVudHMubGVuZ3RoPT09MT8oaT1uLG49MCk6aS09bixmdW5jdGlvbigpe3JldHVybiB0KCkqaStufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIGE4PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3ZhciBvLGE7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGZ1bmN0aW9uKCl7dmFyIHM7aWYobyE9bnVsbClzPW8sbz1udWxsO2Vsc2UgZG8gbz10KCkqMi0xLHM9dCgpKjItMSxhPW8qbytzKnM7d2hpbGUoIWF8fGE+MSk7cmV0dXJuIG4raSpzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBrMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49YTguc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBzOD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIFIydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7dmFyIGk9czguc291cmNlKHQpKG4pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpKCkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBOMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO2Z1bmN0aW9uIGhpKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShlKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKGUpO2JyZWFrfXJldHVybiB0aGlzfWZ1bmN0aW9uIHNjKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5pbnRlcnBvbGF0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmludGVycG9sYXRvcih0KS5kb21haW4oZSk7YnJlYWt9cmV0dXJuIHRoaXN9VGIoKTt2YXIgRDJ0PUFycmF5LnByb3RvdHlwZSxYXz1EMnQubWFwLGxjPUQydC5zbGljZTt2YXIgbDg9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gZ3UoKXt2YXIgZT1KaSgpLHQ9W10scj1bXSxuPWw4O2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPWUuZ2V0KGEpO2lmKCFzKXtpZihuIT09bDgpcmV0dXJuIG47ZS5zZXQoYSxzPXQucHVzaChvKSl9cmV0dXJuIHJbKHMtMSklci5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W10sZT1KaSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspZS5oYXMoYz0obD1vW2FdKSsiIil8fGUuc2V0KGMsdC5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sYy5jYWxsKG8pLGkpOnIuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGd1KHQscikudW5rbm93bihuKX0saGkuYXBwbHkoaSxhcmd1bWVudHMpLGl9ZnVuY3Rpb24gUW0oKXt2YXIgZT1ndSgpLnVua25vd24odm9pZCAwKSx0PWUuZG9tYWluLHI9ZS5yYW5nZSxuPVswLDFdLGksbyxhPSExLHM9MCxsPTAsYz0uNTtkZWxldGUgZS51bmtub3duO2Z1bmN0aW9uIHUoKXt2YXIgaD10KCkubGVuZ3RoLGY9blsxXTxuWzBdLHA9bltmLTBdLGQ9blsxLWZdO2k9KGQtcCkvTWF0aC5tYXgoMSxoLXMrbCoyKSxhJiYoaT1NYXRoLmZsb29yKGkpKSxwKz0oZC1wLWkqKGgtcykpKmMsbz1pKigxLXMpLGEmJihwPU1hdGgucm91bmQocCksbz1NYXRoLnJvdW5kKG8pKTt2YXIgZz1JcihoKS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIHAraSpffSk7cmV0dXJuIHIoZj9nLnJldmVyc2UoKTpnKX1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoaCksdSgpKTp0KCl9LGUucmFuZ2U9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49WytoWzBdLCtoWzFdXSx1KCkpOm4uc2xpY2UoKX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBuPVsraFswXSwraFsxXV0sYT0hMCx1KCl9LGUuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUuc3RlcD1mdW5jdGlvbigpe3JldHVybiBpfSxlLnJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhaCx1KCkpOmF9LGUucGFkZGluZz1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K2gpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSxoKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStoLHUoKSk6bH0sZS5hbGlnbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFFtKHQoKSxuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxoaS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBPMnQoZSl7dmFyIHQ9ZS5jb3B5O3JldHVybiBlLnBhZGRpbmc9ZS5wYWRkaW5nT3V0ZXIsZGVsZXRlIGUucGFkZGluZ0lubmVyLGRlbGV0ZSBlLnBhZGRpbmdPdXRlcixlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTzJ0KHQoKSl9LGV9ZnVuY3Rpb24gdGcoKXtyZXR1cm4gTzJ0KFFtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIHoydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gbTUoZSl7cmV0dXJuK2V9dmFyIEYydD1bMCwxXTtmdW5jdGlvbiBuaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBuWChlLHQpe3JldHVybih0LT1lPStlKT9mdW5jdGlvbihyKXtyZXR1cm4oci1lKS90fTp6MnQoaXNOYU4odCk/TmFOOi41KX1mdW5jdGlvbiBCMnQoZSl7dmFyIHQ9ZVswXSxyPWVbZS5sZW5ndGgtMV0sbjtyZXR1cm4gdD5yJiYobj10LHQ9cixyPW4pLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKHIsaSkpfX1mdW5jdGlvbiBnTWUoZSx0LHIpe3ZhciBuPWVbMF0saT1lWzFdLG89dFswXSxhPXRbMV07cmV0dXJuIGk8bj8obj1uWChpLG4pLG89cihhLG8pKToobj1uWChuLGkpLG89cihvLGEpKSxmdW5jdGlvbihzKXtyZXR1cm4gbyhuKHMpKX19ZnVuY3Rpb24gX01lKGUsdCxyKXt2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxhPS0xO2ZvcihlW25dPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8bjspaVthXT1uWChlW2FdLGVbYSsxXSksb1thXT1yKHRbYV0sdFthKzFdKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGw9eXMoZSxzLDEsbiktMTtyZXR1cm4gb1tsXShpW2xdKHMpKX19ZnVuY3Rpb24gcWgoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gJF8oKXt2YXIgZT1GMnQsdD1GMnQscj1uYyxuLGksbyxhPW5pLHMsbCxjO2Z1bmN0aW9uIHUoKXtyZXR1cm4gcz1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk+Mj9fTWU6Z01lLGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/bzoobHx8KGw9cyhlLm1hcChuKSx0LHIpKSkobihhKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBhKGkoKGN8fChjPXModCxlLm1hcChuKSx6aSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKGYsbTUpLGE9PT1uaXx8KGE9QjJ0KGUpKSx1KCkpOmUuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGYpLHUoKSk6dC5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHQ9bGMuY2FsbChmKSxyPWRMLHUoKX0saC5jbGFtcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1mP0IydChlKTpuaSxoKTphIT09bml9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Zix1KCkpOnJ9LGgudW5rbm93bj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mLGgpOm99LGZ1bmN0aW9uKGYscCl7cmV0dXJuIG49ZixpPXAsdSgpfX1mdW5jdGlvbiBnNShlLHQpe3JldHVybiAkXygpKGUsdCl9ZnVuY3Rpb24gYzgoZSx0LHIsbil7dmFyIGk9dGwoZSx0LHIpLG87c3dpdGNoKG49THAobj09bnVsbD8iLGYiOm4pLG4udHlwZSl7Y2FzZSJzIjp7dmFyIGE9TWF0aC5tYXgoTWF0aC5hYnMoZSksTWF0aC5hYnModCkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89b2soaSxhKSkmJihuLnByZWNpc2lvbj1vKSxXRShuLGEpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89YWsoaSxNYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihvPWlrKGkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiB4bihuKX1mdW5jdGlvbiBpbChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIGFiKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10KCk7cmV0dXJuIGM4KGlbMF0saVtpLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIsbil9LGUubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49dCgpLGk9MCxvPW4ubGVuZ3RoLTEsYT1uW2ldLHM9bltvXSxsO3JldHVybiBzPGEmJihsPWEsYT1zLHM9bCxsPWksaT1vLG89bCksbD14XyhhLHMsciksbD4wPyhhPU1hdGguZmxvb3IoYS9sKSpsLHM9TWF0aC5jZWlsKHMvbCkqbCxsPXhfKGEscyxyKSk6bDwwJiYoYT1NYXRoLmNlaWwoYSpsKS9sLHM9TWF0aC5mbG9vcihzKmwpL2wsbD14XyhhLHMscikpLGw+MD8obltpXT1NYXRoLmZsb29yKGEvbCkqbCxuW29dPU1hdGguY2VpbChzL2wpKmwsdChuKSk6bDwwJiYobltpXT1NYXRoLmNlaWwoYSpsKS9sLG5bb109TWF0aC5mbG9vcihzKmwpL2wsdChuKSksZX0sZX1mdW5jdGlvbiBPbigpe3ZhciBlPWc1KG5pLG5pKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsT24oKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxpbChlKX1mdW5jdGlvbiB1OChlKXt2YXIgdDtmdW5jdGlvbiByKG4pe3JldHVybiBpc05hTihuPStuKT90Om59cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKG4sbTUpLHIpOmUuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHU4KGUpLnVua25vd24odCl9LGU9YXJndW1lbnRzLmxlbmd0aD9YXy5jYWxsKGUsbTUpOlswLDFdLGlsKHIpfWZ1bmN0aW9uIGg4KGUsdCl7ZT1lLnNsaWNlKCk7dmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lW3JdLG89ZVtuXSxhO3JldHVybiBvPGkmJihhPXIscj1uLG49YSxhPWksaT1vLG89YSksZVtyXT10LmZsb29yKGkpLGVbbl09dC5jZWlsKG8pLGV9ZnVuY3Rpb24gSDJ0KGUpe3JldHVybiBNYXRoLmxvZyhlKX1mdW5jdGlvbiBWMnQoZSl7cmV0dXJuIE1hdGguZXhwKGUpfWZ1bmN0aW9uIHlNZShlKXtyZXR1cm4tTWF0aC5sb2coLWUpfWZ1bmN0aW9uIHZNZShlKXtyZXR1cm4tTWF0aC5leHAoLWUpfWZ1bmN0aW9uIHhNZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gYk1lKGUpe3JldHVybiBlPT09MTA/eE1lOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIHdNZShlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gVTJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIF81KGUpe3ZhciB0PWUoSDJ0LFYydCkscj10LmRvbWFpbixuPTEwLGksbztmdW5jdGlvbiBhKCl7cmV0dXJuIGk9d01lKG4pLG89Yk1lKG4pLHIoKVswXTwwPyhpPVUydChpKSxvPVUydChvKSxlKHlNZSx2TWUpKTplKEgydCxWMnQpLHR9cmV0dXJuIHQuYmFzZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rcyxhKCkpOm59LHQuZG9tYWluPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHMpLGEoKSk6cigpfSx0LnRpY2tzPWZ1bmN0aW9uKHMpe3ZhciBsPXIoKSxjPWxbMF0sdT1sW2wubGVuZ3RoLTFdLGg7KGg9dTxjKSYmKGY9YyxjPXUsdT1mKTt2YXIgZj1pKGMpLHA9aSh1KSxkLGcsXyx5PXM9PW51bGw/MTA6K3MseD1bXTtpZighKG4lMSkmJnAtZjx5KXtpZihmPU1hdGgucm91bmQoZiktMSxwPU1hdGgucm91bmQocCkrMSxjPjApe2Zvcig7ZjxwOysrZilmb3IoZz0xLGQ9byhmKTtnPG47KytnKWlmKF89ZCpnLCEoXzxjKSl7aWYoXz51KWJyZWFrO3gucHVzaChfKX19ZWxzZSBmb3IoO2Y8cDsrK2YpZm9yKGc9bi0xLGQ9byhmKTtnPj0xOy0tZylpZihfPWQqZywhKF88Yykpe2lmKF8+dSlicmVhazt4LnB1c2goXyl9fWVsc2UgeD1hYihmLHAsTWF0aC5taW4ocC1mLHkpKS5tYXAobyk7cmV0dXJuIGg/eC5yZXZlcnNlKCk6eH0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHMsbCl7aWYobD09bnVsbCYmKGw9bj09PTEwPyIuMGUiOiIsIiksdHlwZW9mIGwhPSJmdW5jdGlvbiImJihsPXhuKGwpKSxzPT09MS8wKXJldHVybiBsO3M9PW51bGwmJihzPTEwKTt2YXIgYz1NYXRoLm1heCgxLG4qcy90LnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGg9dS9vKE1hdGgucm91bmQoaSh1KSkpO3JldHVybiBoKm48bi0uNSYmKGgqPW4pLGg8PWM/bCh1KToiIn19LHQubmljZT1mdW5jdGlvbigpe3JldHVybiByKGg4KHIoKSx7Zmxvb3I6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5mbG9vcihpKHMpKSl9LGNlaWw6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5jZWlsKGkocykpKX19KSl9LHR9ZnVuY3Rpb24gY2MoKXt2YXIgZT1fNSgkXygpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsY2MoKSkuYmFzZShlLmJhc2UoKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxlfWZ1bmN0aW9uIHEydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmxvZzFwKE1hdGguYWJzKHQvZSkpfX1mdW5jdGlvbiBHMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5leHBtMShNYXRoLmFicyh0KSkqZX19ZnVuY3Rpb24geTUoZSl7dmFyIHQ9MSxyPWUocTJ0KHQpLEcydCh0KSk7cmV0dXJuIHIuY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShxMnQodD0rbiksRzJ0KHQpKTp0fSxpbChyKX1mdW5jdGlvbiBmOCgpe3ZhciBlPXk1KCRfKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxmOCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxoaS5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVzJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiBTTWUoZSl7cmV0dXJuIGU8MD8tTWF0aC5zcXJ0KC1lKTpNYXRoLnNxcnQoZSl9ZnVuY3Rpb24gTU1lKGUpe3JldHVybiBlPDA/LWUqZTplKmV9ZnVuY3Rpb24gdjUoZSl7dmFyIHQ9ZShuaSxuaSkscj0xO2Z1bmN0aW9uIG4oKXtyZXR1cm4gcj09PTE/ZShuaSxuaSk6cj09PS41P2UoU01lLE1NZSk6ZShXMnQociksVzJ0KDEvcikpfXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStpLG4oKSk6cn0saWwodCl9ZnVuY3Rpb24gS18oKXt2YXIgZT12NSgkXygpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsS18oKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0saGkuYXBwbHkoZSxhcmd1bWVudHMpLGV9ZnVuY3Rpb24gWTJ0KCl7cmV0dXJuIEtfLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gZWcoKXt2YXIgZT1bXSx0PVtdLHI9W10sbjtmdW5jdGlvbiBpKCl7dmFyIGE9MCxzPU1hdGgubWF4KDEsdC5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShzLTEpOysrYTxzOylyW2EtMV09c2EoZSxhL3MpO3JldHVybiBvfWZ1bmN0aW9uIG8oYSl7cmV0dXJuIGlzTmFOKGE9K2EpP246dFt5cyhyLGEpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9dC5pbmRleE9mKGEpO3JldHVybiBzPDA/W05hTixOYU5dOltzPjA/cltzLTFdOmVbMF0sczxyLmxlbmd0aD9yW3NdOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBzPTAsbD1hLmxlbmd0aCxjO3M8bDsrK3MpYz1hW3NdLGMhPW51bGwmJiFpc05hTihjPStjKSYmZS5wdXNoKGMpO3JldHVybiBlLnNvcnQob2EpLGkoKX0sby5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGEpLGkoKSk6dC5zbGljZSgpfSxvLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxvKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBlZygpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKG4pfSxoaS5hcHBseShvLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcWIoKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV0sbztmdW5jdGlvbiBhKGwpe3JldHVybiBsPD1sP2lbeXMobixsLDAscildOm99ZnVuY3Rpb24gcygpe3ZhciBsPS0xO2ZvcihuPW5ldyBBcnJheShyKTsrK2w8cjspbltsXT0oKGwrMSkqdC0obC1yKSplKS8ocisxKTtyZXR1cm4gYX1yZXR1cm4gYS5kb21haW49ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2xbMF0sdD0rbFsxXSxzKCkpOltlLHRdfSxhLnJhbmdlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShpPWxjLmNhbGwobCkpLmxlbmd0aC0xLHMoKSk6aS5zbGljZSgpfSxhLmludmVydEV4dGVudD1mdW5jdGlvbihsKXt2YXIgYz1pLmluZGV4T2YobCk7cmV0dXJuIGM8MD9bTmFOLE5hTl06YzwxP1tlLG5bMF1dOmM+PXI/W25bci0xXSx0XTpbbltjLTFdLG5bY11dfSxhLnVua25vd249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJihvPWwpLGF9LGEudGhyZXNob2xkcz1mdW5jdGlvbigpe3JldHVybiBuLnNsaWNlKCl9LGEuY29weT1mdW5jdGlvbigpe3JldHVybiBxYigpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSkudW5rbm93bihvKX0saGkuYXBwbHkoaWwoYSksYXJndW1lbnRzKX1mdW5jdGlvbiBwOCgpe3ZhciBlPVsuNV0sdD1bMCwxXSxyLG49MTtmdW5jdGlvbiBpKG8pe3JldHVybiBvPD1vP3RbeXMoZSxvLDAsbildOnJ9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWxjLmNhbGwobyksbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bGMuY2FsbChvKSxuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLGkpOnQuc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24obyl7dmFyIGE9dC5pbmRleE9mKG8pO3JldHVybltlW2EtMV0sZVthXV19LGkudW5rbm93bj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vLGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBwOCgpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKHIpfSxoaS5hcHBseShpLGFyZ3VtZW50cyl9dmFyIGlYPW5ldyBEYXRlLG9YPW5ldyBEYXRlO2Z1bmN0aW9uIGJyKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGJyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gaVguc2V0VGltZSgrbyksb1guc2V0VGltZSgrYSksZShpWCksZShvWCksTWF0aC5mbG9vcihyKGlYLG9YKSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIGQ4PWJyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7ZDguZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9icihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpkOH07dmFyIFpfPWQ4LGFYPWQ4LnJhbmdlO3ZhciBKXz0xZTMsdWM9NmU0LEdiPTM2ZTUsbTg9ODY0ZTUsZzg9NjA0OGU1O3ZhciBqMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqSl8pfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0pffSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRXz1qMnQsc1g9ajJ0LnJhbmdlO3ZhciBYMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpKXyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqdWMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3VjfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxfOD1YMnQsJDJ0PVgydC5yYW5nZTt2YXIgSzJ0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqSl8tZS5nZXRNaW51dGVzKCkqdWMpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHk4PUsydCxaMnQ9SzJ0LnJhbmdlO3ZhciBKMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqdWMpL204fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLHR5PUoydCxRMnQ9SjJ0LnJhbmdlO2Z1bmN0aW9uIGV5KGUpe3JldHVybiBicihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnVjKS9nOH0pfXZhciByZz1leSgwKSxyeT1leSgxKSxsWD1leSgyKSxjWD1leSgzKSx6cD1leSg0KSx1WD1leSg1KSxoWD1leSg2KSxmWD1yZy5yYW5nZSx0d3Q9cnkucmFuZ2UsZXd0PWxYLnJhbmdlLHJ3dD1jWC5yYW5nZSxud3Q9enAucmFuZ2UsaXd0PXVYLnJhbmdlLG93dD1oWC5yYW5nZTt2YXIgYXd0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLHY4PWF3dCxzd3Q9YXd0LnJhbmdlO3ZhciBwWD1icihmdW5jdGlvbihlKXtlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pO3BYLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpicihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07dmFyIEdoPXBYLGx3dD1wWC5yYW5nZTt2YXIgY3d0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KnVjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS91Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSkseDg9Y3d0LHV3dD1jd3QucmFuZ2U7dmFyIGh3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLGI4PWh3dCxmd3Q9aHd0LnJhbmdlO3ZhciBwd3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvbTh9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksbnk9cHd0LGR3dD1wd3QucmFuZ2U7ZnVuY3Rpb24gaXkoZSl7cmV0dXJuIGJyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZzh9KX12YXIgbmc9aXkoMCksb3k9aXkoMSksZFg9aXkoMiksbVg9aXkoMyksRnA9aXkoNCksZ1g9aXkoNSksX1g9aXkoNikseVg9bmcucmFuZ2UsbXd0PW95LnJhbmdlLGd3dD1kWC5yYW5nZSxfd3Q9bVgucmFuZ2UseXd0PUZwLnJhbmdlLHZ3dD1nWC5yYW5nZSx4d3Q9X1gucmFuZ2U7dmFyIGJ3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSx3OD1id3Qsd3d0PWJ3dC5yYW5nZTt2YXIgdlg9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTt2WC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6YnIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3ZhciBXaD12WCxTd3Q9dlgucmFuZ2U7ZnVuY3Rpb24geFgoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGJYKGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHg1KGUsdCxyKXtyZXR1cm57eTplLG06dCxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBTNShlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz1iNShpKSx1PXc1KGkpLGg9YjUobyksZj13NShvKSxwPWI1KGEpLGQ9dzUoYSksZz1iNShzKSxfPXc1KHMpLHk9YjUobCkseD13NShsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDpQd3QsZTpQd3QsZjpqTWUsZzpuRWUsRzpvRWUsSDpHTWUsSTpXTWUsajpZTWUsTDpOd3QsbTpYTWUsTTokTWUscDpzdCxxOlN0LFE6a3d0LHM6Und0LFM6S01lLHU6Wk1lLFU6Sk1lLFY6UU1lLHc6dEVlLFc6ZUVlLHg6bnVsbCxYOm51bGwseTpyRWUsWTppRWUsWjphRWUsIiUiOkx3dH0sUz17YTpidCxBOk10LGI6bHQsQjpLdCxjOm51bGwsZDpJd3QsZTpJd3QsZjp1RWUsZzp4RWUsRzp3RWUsSDpzRWUsSTpsRWUsajpjRWUsTDpPd3QsbTpoRWUsTTpmRWUscDpfdCxxOmN0LFE6a3d0LHM6Und0LFM6cEVlLHU6ZEVlLFU6bUVlLFY6Z0VlLHc6X0VlLFc6eUVlLHg6bnVsbCxYOm51bGwseTp2RWUsWTpiRWUsWjpTRWUsIiUiOkx3dH0sQz17YTpCLEE6SSxiOkwsQjpSLGM6RixkOkN3dCxlOkN3dCxmOkhNZSxnOlR3dCxHOkV3dCxIOkF3dCxJOkF3dCxqOk9NZSxMOkJNZSxtOkRNZSxNOnpNZSxwOkQscTpOTWUsUTpVTWUsczpxTWUsUzpGTWUsdTpQTWUsVTpJTWUsVjpMTWUsdzpBTWUsVzprTWUseDp6LFg6VSx5OlR3dCxZOkV3dCxaOlJNZSwiJSI6Vk1lfTtiLng9UChyLGIpLGIuWD1QKG4sYiksYi5jPVAodCxiKSxTLng9UChyLFMpLFMuWD1QKG4sUyksUy5jPVAodCxTKTtmdW5jdGlvbiBQKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9W10scHQ9LTEsaHQ9MCx3dD1YLmxlbmd0aCxrdCxpZSxlZTtmb3IoZHQgaW5zdGFuY2VvZiBEYXRlfHwoZHQ9bmV3IERhdGUoK2R0KSk7KytwdDx3dDspWC5jaGFyQ29kZUF0KHB0KT09PTM3JiYocS5wdXNoKFguc2xpY2UoaHQscHQpKSwoaWU9TXd0W2t0PVguY2hhckF0KCsrcHQpXSkhPW51bGw/a3Q9WC5jaGFyQXQoKytwdCk6aWU9a3Q9PT0iZSI/IiAiOiIwIiwoZWU9ZXRba3RdKSYmKGt0PWVlKGR0LGllKSkscS5wdXNoKGt0KSxodD1wdCsxKTtyZXR1cm4gcS5wdXNoKFguc2xpY2UoaHQscHQpKSxxLmpvaW4oIiIpfX1mdW5jdGlvbiBrKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9eDUoMTkwMCx2b2lkIDAsMSkscHQ9TyhxLFgsZHQrPSIiLDApLGh0LHd0O2lmKHB0IT1kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcSlyZXR1cm4gbmV3IERhdGUocS5RKTtpZigicyJpbiBxKXJldHVybiBuZXcgRGF0ZShxLnMqMWUzKygiTCJpbiBxP3EuTDowKSk7aWYoZXQmJiEoIloiaW4gcSkmJihxLlo9MCksInAiaW4gcSYmKHEuSD1xLkglMTIrcS5wKjEyKSxxLm09PT12b2lkIDAmJihxLm09InEiaW4gcT9xLnE6MCksIlYiaW4gcSl7aWYocS5WPDF8fHEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBxfHwocS53PTEpLCJaImluIHE/KGh0PWJYKHg1KHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/b3kuY2VpbChodCk6b3koaHQpLGh0PW55Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9eFgoeDUocS55LDAsMSkpLHd0PWh0LmdldERheSgpLGh0PXd0PjR8fHd0PT09MD9yeS5jZWlsKGh0KTpyeShodCksaHQ9dHkub2Zmc2V0KGh0LChxLlYtMSkqNykscS55PWh0LmdldEZ1bGxZZWFyKCkscS5tPWh0LmdldE1vbnRoKCkscS5kPWh0LmdldERhdGUoKSsocS53KzYpJTcpfWVsc2UoIlciaW4gcXx8IlUiaW4gcSkmJigidyJpbiBxfHwocS53PSJ1ImluIHE/cS51JTc6IlciaW4gcT8xOjApLHd0PSJaImluIHE/YlgoeDUocS55LDAsMSkpLmdldFVUQ0RheSgpOnhYKHg1KHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYlgocSkpOnhYKHEpfX1mdW5jdGlvbiBPKFgsZXQsZHQscSl7Zm9yKHZhciBwdD0wLGh0PWV0Lmxlbmd0aCx3dD1kdC5sZW5ndGgsa3QsaWU7cHQ8aHQ7KXtpZihxPj13dClyZXR1cm4tMTtpZihrdD1ldC5jaGFyQ29kZUF0KHB0KyspLGt0PT09Mzcpe2lmKGt0PWV0LmNoYXJBdChwdCsrKSxpZT1DW2t0IGluIE13dD9ldC5jaGFyQXQocHQrKyk6a3RdLCFpZXx8KHE9aWUoWCxkdCxxKSk8MClyZXR1cm4tMX1lbHNlIGlmKGt0IT1kdC5jaGFyQ29kZUF0KHErKykpcmV0dXJuLTF9cmV0dXJuIHF9ZnVuY3Rpb24gRChYLGV0LGR0KXt2YXIgcT1jLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5wPXVbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQihYLGV0LGR0KXt2YXIgcT1wLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWRbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSShYLGV0LGR0KXt2YXIgcT1oLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWZbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTChYLGV0LGR0KXt2YXIgcT15LmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPXhbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUihYLGV0LGR0KXt2YXIgcT1nLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPV9bcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRihYLGV0LGR0KXtyZXR1cm4gTyhYLHQsZXQsZHQpfWZ1bmN0aW9uIHooWCxldCxkdCl7cmV0dXJuIE8oWCxyLGV0LGR0KX1mdW5jdGlvbiBVKFgsZXQsZHQpe3JldHVybiBPKFgsbixldCxkdCl9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gYVtYLmdldERheSgpXX1mdW5jdGlvbiBaKFgpe3JldHVybiBvW1guZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KFgpe3JldHVybiBsW1guZ2V0TW9udGgoKV19ZnVuY3Rpb24gb3QoWCl7cmV0dXJuIHNbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChYKXtyZXR1cm4gaVsrKFguZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChYKXtyZXR1cm4gMSt+fihYLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gYnQoWCl7cmV0dXJuIGFbWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoWCl7cmV0dXJuIG9bWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbHQoWCl7cmV0dXJuIGxbWC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChYKXtyZXR1cm4gc1tYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIF90KFgpe3JldHVybiBpWysoWC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGN0KFgpe3JldHVybiAxK35+KFguZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLGIpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITEpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLFMpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjUGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITApO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH19fXZhciBNd3Q9eyItIjoiIixfOiIgIiwwOiIwIn0seG89L15ccypcZCsvLEVNZT0vXiUvLFRNZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gQnIoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gQ01lKGUpe3JldHVybiBlLnJlcGxhY2UoVE1lLCJcXCQmIil9ZnVuY3Rpb24gYjUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKENNZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHc1KGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIEFNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSU1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJNZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBETWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEN3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQk1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBWTWUoZSx0LHIpe3ZhciBuPUVNZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIFVNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHFNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFB3dChlLHQpe3JldHVybiBCcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIEdNZShlLHQpe3JldHVybiBCcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBXTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIFlNZShlLHQpe3JldHVybiBCcigxK3R5LmNvdW50KEdoKGUpLGUpLHQsMyl9ZnVuY3Rpb24gTnd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBqTWUoZSx0KXtyZXR1cm4gTnd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gWE1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gJE1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gS01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gWk1lKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBKTWUoZSx0KXtyZXR1cm4gQnIocmcuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIER3dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD96cChlKTp6cC5jZWlsKGUpfWZ1bmN0aW9uIFFNZShlLHQpe3JldHVybiBlPUR3dChlKSxCcih6cC5jb3VudChHaChlKSxlKSsoR2goZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIHRFZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBlRWUoZSx0KXtyZXR1cm4gQnIocnkuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIHJFZShlLHQpe3JldHVybiBCcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gbkVlKGUsdCl7cmV0dXJuIGU9RHd0KGUpLEJyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBpRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIG9FZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/enAoZSk6enAuY2VpbChlKSxCcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gYUVlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnIodC82MHwwLCIwIiwyKStCcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBJd3QoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBzRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gbEVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBjRWUoZSx0KXtyZXR1cm4gQnIoMStueS5jb3VudChXaChlKSxlKSx0LDMpfWZ1bmN0aW9uIE93dChlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gdUVlKGUsdCl7cmV0dXJuIE93dChlLHQpKyIwMDAifWZ1bmN0aW9uIGhFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGZFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHBFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIGRFZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gbUVlKGUsdCl7cmV0dXJuIEJyKG5nLmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB6d3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/RnAoZSk6RnAuY2VpbChlKX1mdW5jdGlvbiBnRWUoZSx0KXtyZXR1cm4gZT16d3QoZSksQnIoRnAuY291bnQoV2goZSksZSkrKFdoKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBfRWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24geUVlKGUsdCl7cmV0dXJuIEJyKG95LmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB2RWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIHhFZShlLHQpe3JldHVybiBlPXp3dChlKSxCcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gYkVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB3RWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP0ZwKGUpOkZwLmNlaWwoZSksQnIoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIFNFZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gTHd0KCl7cmV0dXJuIiUifWZ1bmN0aW9uIGt3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBSd3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgV2IsTTUsd1gsYXksRTU7Uzgoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBTOChlKXtyZXR1cm4gV2I9UzUoZSksTTU9V2IuZm9ybWF0LHdYPVdiLnBhcnNlLGF5PVdiLnV0Y0Zvcm1hdCxFNT1XYi51dGNQYXJzZSxXYn12YXIgU1g9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiI7ZnVuY3Rpb24gTUVlKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9dmFyIEVFZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9NRWU6YXkoU1gpLEZ3dD1FRWU7ZnVuY3Rpb24gVEVlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIENFZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP1RFZTpFNShTWCksQnd0PUNFZTt2YXIgVDU9MWUzLEM1PVQ1KjYwLEE1PUM1KjYwLFA1PUE1KjI0LEFFZT1QNSo3LEh3dD1QNSozMCxNWD1QNSozNjU7ZnVuY3Rpb24gUEVlKGUpe3JldHVybiBuZXcgRGF0ZShlKX1mdW5jdGlvbiBJRWUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gTTgoZSx0LHIsbixpLG8sYSxzLGwpe3ZhciBjPWc1KG5pLG5pKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxwPWwoIjolUyIpLGQ9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksXz1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksYj1sKCIlWSIpLFM9W1thLDEsVDVdLFthLDUsNSpUNV0sW2EsMTUsMTUqVDVdLFthLDMwLDMwKlQ1XSxbbywxLEM1XSxbbyw1LDUqQzVdLFtvLDE1LDE1KkM1XSxbbywzMCwzMCpDNV0sW2ksMSxBNV0sW2ksMywzKkE1XSxbaSw2LDYqQTVdLFtpLDEyLDEyKkE1XSxbbiwxLFA1XSxbbiwyLDIqUDVdLFtyLDEsQUVlXSxbdCwxLEh3dF0sW3QsMywzKkh3dF0sW2UsMSxNWF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9b2IoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj10bChPL01YLEQvTVgsayksaz1lKTpMPyhMPVNbSS9TW0wtMV1bMl08U1tMXVsyXS9JP0wtMTpMXSxCPUxbMV0saz1MWzBdKTooQj1NYXRoLm1heCh0bChPLEQsayksMSksaz1zKX1yZXR1cm4gQj09bnVsbD9rOmsuZXZlcnkoQil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGspe3JldHVybiBuZXcgRGF0ZSh1KGspKX0sYy5kb21haW49ZnVuY3Rpb24oayl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChYXy5jYWxsKGssSUVlKSk6aCgpLm1hcChQRWUpfSxjLnRpY2tzPWZ1bmN0aW9uKGssTyl7dmFyIEQ9aCgpLEI9RFswXSxJPURbRC5sZW5ndGgtMV0sTD1JPEIsUjtyZXR1cm4gTCYmKFI9QixCPUksST1SKSxSPVAoayxCLEksTyksUj1SP1IucmFuZ2UoQixJKzEpOltdLEw/Ui5yZXZlcnNlKCk6Un0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGssTyl7cmV0dXJuIE89PW51bGw/QzpsKE8pfSxjLm5pY2U9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCk7cmV0dXJuKGs9UChrLERbMF0sRFtELmxlbmd0aC0xXSxPKSk/aChoOChELGspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoYyxNOChlLHQscixuLGksbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIFliKCl7cmV0dXJuIGhpLmFwcGx5KE04KEdoLHY4LHJnLHR5LHk4LF84LFFfLFpfLE01KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiBWd3QoKXtyZXR1cm4gaGkuYXBwbHkoTTgoV2gsdzgsbmcsbnksYjgseDgsUV8sWl8sYXkpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEU4KCl7dmFyIGU9MCx0PTEscixuLGksbyxhPW5pLHM9ITEsbDtmdW5jdGlvbiBjKHUpe3JldHVybiBpc05hTih1PSt1KT9sOmEoaT09PTA/LjU6KHU9KG8odSktcikqaSxzP01hdGgubWF4KDAsTWF0aC5taW4oMSx1KSk6dSkpfXJldHVybiBjLmRvbWFpbj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vKGU9K3VbMF0pLG49byh0PSt1WzFdKSxpPXI9PT1uPzA6MS8obi1yKSxjKTpbZSx0XX0sYy5jbGFtcD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0hIXUsYyk6c30sYy5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxjKTphfSxjLnVua25vd249ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dSxjKTpsfSxmdW5jdGlvbih1KXtyZXR1cm4gbz11LHI9dShlKSxuPXUodCksaT1yPT09bj8wOjEvKG4tciksY319ZnVuY3Rpb24gQnAoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkuaW50ZXJwb2xhdG9yKGUuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gVDgoKXt2YXIgZT1pbChFOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLFQ4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRVgoKXt2YXIgZT1fNShFOCgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsRVgoKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUWCgpe3ZhciBlPXk1KEU4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQzgoKXt2YXIgZT12NShFOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQzgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIFV3dCgpe3JldHVybiBDOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEE4KCl7dmFyIGU9W10sdD1uaTtmdW5jdGlvbiByKG4pe2lmKCFpc05hTihuPStuKSlyZXR1cm4gdCgoeXMoZSxuKS0xKS8oZS5sZW5ndGgtMSkpfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpYT1uW2ldLGEhPW51bGwmJiFpc05hTihhPSthKSYmZS5wdXNoKGEpO3JldHVybiBlLnNvcnQob2EpLHJ9LHIuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEE4KHQpLmRvbWFpbihlKX0sc2MuYXBwbHkocixhcmd1bWVudHMpfWZ1bmN0aW9uIFA4KCl7dmFyIGU9MCx0PS41LHI9MSxuLGksbyxhLHMsbD1uaSxjLHU9ITEsaDtmdW5jdGlvbiBmKHApe3JldHVybiBpc05hTihwPStwKT9oOihwPS41KygocD0rYyhwKSktaSkqKHA8aT9hOnMpLGwodT9NYXRoLm1heCgwLE1hdGgubWluKDEscCkpOnApKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YyhlPStwWzBdKSxpPWModD0rcFsxXSksbz1jKHI9K3BbMl0pLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZik6W2UsdCxyXX0sZi5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXAsZik6dX0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9cCxmKTpsfSxmLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9cCxmKTpofSxmdW5jdGlvbihwKXtyZXR1cm4gYz1wLG49cChlKSxpPXAodCksbz1wKHIpLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZn19ZnVuY3Rpb24gSTgoKXt2YXIgZT1pbChQOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLEk4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ1goKXt2YXIgZT1fNShQOCgpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQ1goKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBBWCgpe3ZhciBlPXk1KFA4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxBWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTDgoKXt2YXIgZT12NShQOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsTDgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIHF3dCgpe3JldHVybiBMOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIHRlKGUpe2Zvcih2YXIgdD1lLmxlbmd0aC82fDAscj1uZXcgQXJyYXkodCksbj0wO248dDspcltuXT0iIyIrZS5zbGljZShuKjYsKytuKjYpO3JldHVybiByfXZhciBqYj10ZSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIik7dmFyIEd3dD10ZSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2Iik7dmFyIFd3dD10ZSgiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2Iik7dmFyIFl3dD10ZSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4Iik7dmFyIGp3dD10ZSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIik7dmFyIFh3dD10ZSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIik7dmFyICR3dD10ZSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5Iik7dmFyIEt3dD10ZSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIik7dmFyIFp3dD10ZSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7dmFyIEp3dD10ZSgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIik7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIHVMKGVbZS5sZW5ndGgtMV0pfXZhciBQWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAodGUpLFF3dD1JZShQWCk7dmFyIElYPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcCh0ZSksdFN0PUllKElYKTt2YXIgTFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKHRlKSxlU3Q9SWUoTFgpO3ZhciBrWD1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAodGUpLHJTdD1JZShrWCk7dmFyIFJYPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcCh0ZSksblN0PUllKFJYKTt2YXIgTlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKHRlKSxpU3Q9SWUoTlgpO3ZhciBEWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAodGUpLG9TdD1JZShEWCk7dmFyIE9YPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcCh0ZSksYVN0PUllKE9YKTt2YXIgelg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKHRlKSxzU3Q9SWUoelgpO3ZhciBGWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAodGUpLGxTdD1JZShGWCk7dmFyIEJYPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcCh0ZSksY1N0PUllKEJYKTt2YXIgSFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKHRlKSx1U3Q9SWUoSFgpO3ZhciBWWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAodGUpLGhTdD1JZShWWCk7dmFyIFVYPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcCh0ZSksZlN0PUllKFVYKTt2YXIgcVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKHRlKSxwU3Q9SWUocVgpO3ZhciBHWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAodGUpLGRTdD1JZShHWCk7dmFyIFdYPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcCh0ZSksbVN0PUllKFdYKTt2YXIgWVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKHRlKSxnU3Q9SWUoWVgpO3ZhciBqWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAodGUpLF9TdD1JZShqWCk7dmFyIFhYPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcCh0ZSkseVN0PUllKFhYKTt2YXIgJFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKHRlKSx2U3Q9SWUoJFgpO3ZhciBLWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAodGUpLHhTdD1JZShLWCk7dmFyIFpYPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcCh0ZSksYlN0PUllKFpYKTt2YXIgSlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKHRlKSx3U3Q9SWUoSlgpO3ZhciBRWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAodGUpLFNTdD1JZShRWCk7dmFyIHQkPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcCh0ZSksTVN0PUllKHQkKTt2YXIgZSQ9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKHRlKSxFU3Q9SWUoZSQpO2Z1bmN0aW9uIFRTdChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LWUqKDM1LjM0LWUqKDIzODEuNzMtZSooNjQwMi43LWUqKDcwMjQuNzItZSoyNzEwLjU3KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrZSooMTcwLjczK2UqKDUyLjgyLWUqKDEzMS40Ni1lKigxNzYuNTgtZSo2Ny4zNykpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K2UqKDQ0Mi4zNi1lKigyNDgyLjQzLWUqKDYxNjcuMjQtZSooNjYxNC45NC1lKjI0NzUuNjcpKSkpKSkpKyIpIn12YXIgQ1N0PUVfKGxhKDMwMCwuNSwwKSxsYSgtMjQwLC41LDEpKTt2YXIgQVN0PUVfKGxhKC0xMDAsLjc1LC4zNSksbGEoODAsMS41LC44KSksUFN0PUVfKGxhKDI2MCwuNzUsLjM1KSxsYSg4MCwxLjUsLjgpKSxrOD1sYSgpO2Z1bmN0aW9uIElTdChlKXsoZTwwfHxlPjEpJiYoZS09TWF0aC5mbG9vcihlKSk7dmFyIHQ9TWF0aC5hYnMoZS0uNSk7cmV0dXJuIGs4Lmg9MzYwKmUtMTAwLGs4LnM9MS41LTEuNSp0LGs4Lmw9LjgtLjkqdCxrOCsiIn12YXIgUjg9Y3UoKSxMRWU9TWF0aC5QSS8zLGtFZT1NYXRoLlBJKjIvMztmdW5jdGlvbiBMU3QoZSl7dmFyIHQ7cmV0dXJuIGU9KC41LWUpKk1hdGguUEksUjgucj0yNTUqKHQ9TWF0aC5zaW4oZSkpKnQsUjguZz0yNTUqKHQ9TWF0aC5zaW4oZStMRWUpKSp0LFI4LmI9MjU1Kih0PU1hdGguc2luKGUra0VlKSkqdCxSOCsiIn1mdW5jdGlvbiBrU3QoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzNC42MStlKigxMTcyLjMzLWUqKDEwNzkzLjU2LWUqKDMzMzAwLjEyLWUqKDM4Mzk0LjQ5LWUqMTQ4MjUuMDUpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyMy4zMStlKig1NTcuMzMrZSooMTIyNS4zMy1lKigzNTc0Ljk2LWUqKDEwNzMuNzcrZSo3MDcuNTYpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNy4yK2UqKDMyMTEuMS1lKigxNTMyNy45Ny1lKigyNzgxNC1lKigyMjU2OS4xOC1lKjY4MzguNjYpKSkpKSkpKyIpIn1mdW5jdGlvbiBOOChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX12YXIgUlN0PU44KHRlKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksTlN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksRFN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksT1N0PU44KHRlKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciByJD1NYXRoLmFicyxCbz1NYXRoLmF0YW4yLGlnPU1hdGguY29zLHpTdD1NYXRoLm1heCxEOD1NYXRoLm1pbixfdT1NYXRoLnNpbixzeT1NYXRoLnNxcnQsYm89MWUtMTIseXU9TWF0aC5QSSxJNT15dS8yLGhjPTIqeXU7ZnVuY3Rpb24gRlN0KGUpe3JldHVybiBlPjE/MDplPC0xP3l1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBuJChlKXtyZXR1cm4gZT49MT9JNTplPD0tMT8tSTU6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIFJFZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBORWUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gREVlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gT0VlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIHpFZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBGRWUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj1oKmwtdSpjO2lmKCEoZipmPGJvKSlyZXR1cm4gZj0odSoodC1vKS1oKihlLWkpKS9mLFtlK2YqbCx0K2YqY119ZnVuY3Rpb24gTzgoZSx0LHIsbixpLG8sYSl7dmFyIHM9ZS1yLGw9dC1uLGM9KGE/bzotbykvc3kocypzK2wqbCksdT1jKmwsaD0tYypzLGY9ZSt1LHA9dCtoLGQ9cit1LGc9bitoLF89KGYrZCkvMix5PShwK2cpLzIseD1kLWYsYj1nLXAsUz14KngrYipiLEM9aS1vLFA9ZipnLWQqcCxrPShiPDA/LTE6MSkqc3koelN0KDAsQypDKlMtUCpQKSksTz0oUCpiLXgqaykvUyxEPSgtUCp4LWIqaykvUyxCPShQKmIreCprKS9TLEk9KC1QKngrYiprKS9TLEw9Ty1fLFI9RC15LEY9Qi1fLHo9SS15O3JldHVybiBMKkwrUipSPkYqRit6KnomJihPPUIsRD1JKSx7Y3g6TyxjeTpELHgwMTotdSx5MDE6LWgseDExOk8qKGkvQy0xKSx5MTE6RCooaS9DLTEpfX1mdW5jdGlvbiBCU3QoKXt2YXIgZT1SRWUsdD1ORWUscj1xZSgwKSxuPW51bGwsaT1ERWUsbz1PRWUsYT16RWUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYyx1LGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktSTUsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JNSxnPXIkKGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1icygpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPmJvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5oYy1ibylzLm1vdmVUbyhmKmlnKHApLGYqX3UocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5ibyYmKHMubW92ZVRvKGgqaWcoZCksaCpfdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPmJvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6c3koaCpoK2YqZikpLEQ9RDgociQoZi1oKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQj1ELEk9RCxMLFI7aWYoTz5ibyl7dmFyIEY9biQoTy9oKl91KGspKSx6PW4kKE8vZipfdShrKSk7KEMtPUYqMik+Ym8/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPmJvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKmlnKHkpLFc9ZipfdSh5KSxaPWgqaWcoUykscnQ9aCpfdShTKTtpZihEPmJvKXt2YXIgb3Q9ZippZyh4KSxzdD1mKl91KHgpLFN0PWgqaWcoYiksYnQ9aCpfdShiKSxNdDtpZihnPHl1JiYoTXQ9RkVlKFUsVyxTdCxidCxvdCxzdCxaLHJ0KSkpe3ZhciBsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL191KEZTdCgobHQqX3QrS3QqY3QpLyhzeShsdCpsdCtLdCpLdCkqc3koX3QqX3QrY3QqY3QpKSkvMiksZXQ9c3koTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9RDgoRCwoaC1ldCkvKFgtMSkpLEk9RDgoRCwoZi1ldCkvKFgrMSkpfX1QPmJvP0k+Ym8/KEw9TzgoU3QsYnQsVSxXLGYsSSxfKSxSPU84KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEJvKEwueTAxLEwueDAxKSxCbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxCbyhMLnkwMSxMLngwMSksQm8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixCbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEJvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEJvKFIueTExLFIueDExKSxCbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Ym8pfHwhKEM+Ym8pP3MubGluZVRvKFoscnQpOkI+Ym8/KEw9TzgoWixydCxvdCxzdCxoLC1CLF8pLFI9TzgoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsQm8oTC55MDEsTC54MDEpLEJvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEJvKEwueTAxLEwueDAxKSxCbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEJvKEwuY3krTC55MTEsTC5jeCtMLngxMSksQm8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixCbyhSLnkxMSxSLngxMSksQm8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXl1LzI7cmV0dXJuW2lnKHUpKmMsX3UodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH1mdW5jdGlvbiBIU3QoZSl7dGhpcy5fY29udGV4dD1lfUhTdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha319fTtmdW5jdGlvbiBZaChlKXtyZXR1cm4gbmV3IEhTdChlKX1mdW5jdGlvbiBYYihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiAkYihlKXtyZXR1cm4gZVsxXX1mdW5jdGlvbiB2dSgpe3ZhciBlPVhiLHQ9JGIscj1xZSghMCksbj1udWxsLGk9WWgsbz1udWxsO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGg9ITEsZjtmb3Iobj09bnVsbCYmKG89aShmPWJzKCkpKSxsPTA7bDw9YzsrK2wpIShsPGMmJnIodT1zW2xdLGwscykpPT09aCYmKChoPSFoKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxoJiZvLnBvaW50KCtlKHUsbCxzKSwrdCh1LGwscykpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6ZX0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOnR9LGEuZGVmaW5lZD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCEhcyksYSk6cn0sYS5jdXJ2ZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zLG4hPW51bGwmJihvPWkobikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz09bnVsbD9uPW89bnVsbDpvPWkobj1zKSxhKTpufSxhfWZ1bmN0aW9uIHo4KCl7dmFyIGU9WGIsdD1udWxsLHI9cWUoMCksbj0kYixpPXFlKCEwKSxvPW51bGwsYT1ZaCxzPW51bGw7ZnVuY3Rpb24gbCh1KXt2YXIgaCxmLHAsZD11Lmxlbmd0aCxnLF89ITEseSx4PW5ldyBBcnJheShkKSxiPW5ldyBBcnJheShkKTtmb3Iobz09bnVsbCYmKHM9YSh5PWJzKCkpKSxoPTA7aDw9ZDsrK2gpe2lmKCEoaDxkJiZpKGc9dVtoXSxoLHUpKT09PV8paWYoXz0hXylmPWgscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCkscD1oLTE7cD49ZjstLXApcy5wb2ludCh4W3BdLGJbcF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfV8mJih4W2hdPStlKGcsaCx1KSxiW2hdPStyKGcsaCx1KSxzLnBvaW50KHQ/K3QoZyxoLHUpOnhbaF0sbj8rbihnLGgsdSk6YltoXSkpfWlmKHkpcmV0dXJuIHM9bnVsbCx5KyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gdnUoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSx0PW51bGwsbCk6ZX0sbC54MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTplfSxsLngxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbj1udWxsLGwpOnJ9LGwueTA9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6cn0sbC55MT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj11PT1udWxsP251bGw6dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6bn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShyKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoISF1KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXUsbyE9bnVsbCYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP289cz1udWxsOnM9YShvPXUpLGwpOm99LGx9ZnVuY3Rpb24gVlN0KGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIFVTdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBxU3QoKXt2YXIgZT1VU3QsdD1WU3Qscj1udWxsLG49cWUoMCksaT1xZShoYyksbz1xZSgwKTtmdW5jdGlvbiBhKHMpe3ZhciBsLGM9cy5sZW5ndGgsdSxoLGY9MCxwPW5ldyBBcnJheShjKSxkPW5ldyBBcnJheShjKSxnPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKGhjLE1hdGgubWF4KC1oYyxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseSx4PU1hdGgubWluKE1hdGguYWJzKF8pL2Msby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooXzwwPy0xOjEpLFM7Zm9yKGw9MDtsPGM7KytsKShTPWRbcFtsXT1sXT0rZShzW2xdLGwscykpPjAmJihmKz1TKTtmb3IodCE9bnVsbD9wLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gdChkW0NdLGRbUF0pfSk6ciE9bnVsbCYmcC5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIHIoc1tDXSxzW1BdKX0pLGw9MCxoPWY/KF8tYypiKS9mOjA7bDxjOysrbCxnPXkpdT1wW2xdLFM9ZFt1XSx5PWcrKFM+MD9TKmg6MCkrYixkW3VdPXtkYXRhOnNbdV0saW5kZXg6bCx2YWx1ZTpTLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp5LHBhZEFuZ2xlOnh9O3JldHVybiBkfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOmV9LGEuc29ydFZhbHVlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLHI9bnVsbCxhKTp0fSxhLnNvcnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyx0PW51bGwsYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTpvfSxhfXZhciBGOD1LYihZaCk7ZnVuY3Rpb24gR1N0KGUpe3RoaXMuX2N1cnZlPWV9R1N0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX2N1cnZlLnBvaW50KHQqTWF0aC5zaW4oZSksdCotTWF0aC5jb3MoZSkpfX07ZnVuY3Rpb24gS2IoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEdTdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fWZ1bmN0aW9uIFpiKGUpe3ZhciB0PWUuY3VydmU7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KEtiKHIpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIGkkKCl7cmV0dXJuIFpiKHZ1KCkuY3VydmUoRjgpKX1mdW5jdGlvbiBvJCgpe3ZhciBlPXo4KCkuY3VydmUoRjgpLHQ9ZS5jdXJ2ZSxyPWUubGluZVgwLG49ZS5saW5lWDEsaT1lLmxpbmVZMCxvPWUubGluZVkxO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUuc3RhcnRBbmdsZT1lLngwLGRlbGV0ZSBlLngwLGUuZW5kQW5nbGU9ZS54MSxkZWxldGUgZS54MSxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmlubmVyUmFkaXVzPWUueTAsZGVsZXRlIGUueTAsZS5vdXRlclJhZGl1cz1lLnkxLGRlbGV0ZSBlLnkxLGUubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gWmIocigpKX0sZGVsZXRlIGUubGluZVgwLGUubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFpiKG4oKSl9LGRlbGV0ZSBlLmxpbmVYMSxlLmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBaYihpKCkpfSxkZWxldGUgZS5saW5lWTAsZS5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gWmIobygpKX0sZGVsZXRlIGUubGluZVkxLGUuY3VydmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChLYihhKSk6dCgpLl9jdXJ2ZX0sZX1mdW5jdGlvbiBseShlLHQpe3JldHVyblsodD0rdCkqTWF0aC5jb3MoZS09TWF0aC5QSS8yKSx0Kk1hdGguc2luKGUpXX12YXIgTDU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEJFZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gSEVlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBhJChlKXt2YXIgdD1CRWUscj1IRWUsbj1YYixpPSRiLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1MNS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1icygpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIFZFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIFVFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIHFFZShlLHQscixuLGkpe3ZhciBvPWx5KHQsciksYT1seSh0LHI9KHIraSkvMikscz1seShuLHIpLGw9bHkobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gV1N0KCl7cmV0dXJuIGEkKFZFZSl9ZnVuY3Rpb24gWVN0KCl7cmV0dXJuIGEkKFVFZSl9ZnVuY3Rpb24galN0KCl7dmFyIGU9YSQocUVlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBrNT17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L3l1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsaGMpfX07dmFyIEI4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvNSkvMjtlLm1vdmVUbygtMypyLC1yKSxlLmxpbmVUbygtciwtciksZS5saW5lVG8oLXIsLTMqciksZS5saW5lVG8ociwtMypyKSxlLmxpbmVUbyhyLC1yKSxlLmxpbmVUbygzKnIsLXIpLGUubGluZVRvKDMqcixyKSxlLmxpbmVUbyhyLHIpLGUubGluZVRvKHIsMypyKSxlLmxpbmVUbygtciwzKnIpLGUubGluZVRvKC1yLHIpLGUubGluZVRvKC0zKnIsciksZS5jbG9zZVBhdGgoKX19O3ZhciBYU3Q9TWF0aC5zcXJ0KC4zMzMzMzMzMzMzMzMzMzMzKSxHRWU9WFN0KjIsSDg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC9HRWUpLG49cipYU3Q7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obiwwKSxlLmxpbmVUbygwLHIpLGUubGluZVRvKC1uLDApLGUuY2xvc2VQYXRoKCl9fTt2YXIgV0VlPS44OTA4MTMwOTE1MjkyODUyLCRTdD1NYXRoLnNpbih5dS8xMCkvTWF0aC5zaW4oNyp5dS8xMCksWUVlPU1hdGguc2luKGhjLzEwKSokU3QsakVlPS1NYXRoLmNvcyhoYy8xMCkqJFN0LFY4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQqV0VlKSxuPVlFZSpyLGk9akVlKnI7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1oYypvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2UubGluZVRvKGwqciwtcypyKSxlLmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfWUuY2xvc2VQYXRoKCl9fTt2YXIgVTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19O3ZhciBzJD1NYXRoLnNxcnQoMykscTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKHMkKjMpKTtlLm1vdmVUbygwLHIqMiksZS5saW5lVG8oLXMkKnIsLXIpLGUubGluZVRvKHMkKnIsLXIpLGUuY2xvc2VQYXRoKCl9fTt2YXIgZmM9LS41LHBjPU1hdGguc3FydCgzKS8yLGwkPTEvTWF0aC5zcXJ0KDEyKSxYRWU9KGwkLzIrMSkqMyxHOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L1hFZSksbj1yLzIsaT1yKmwkLG89bixhPXIqbCQrcixzPS1vLGw9YTtlLm1vdmVUbyhuLGkpLGUubGluZVRvKG8sYSksZS5saW5lVG8ocyxsKSxlLmxpbmVUbyhmYypuLXBjKmkscGMqbitmYyppKSxlLmxpbmVUbyhmYypvLXBjKmEscGMqbytmYyphKSxlLmxpbmVUbyhmYypzLXBjKmwscGMqcytmYypsKSxlLmxpbmVUbyhmYypuK3BjKmksZmMqaS1wYypuKSxlLmxpbmVUbyhmYypvK3BjKmEsZmMqYS1wYypvKSxlLmxpbmVUbyhmYypzK3BjKmwsZmMqbC1wYypzKSxlLmNsb3NlUGF0aCgpfX07dmFyIEtTdD1bazUsQjgsSDgsVTgsVjgscTgsRzhdO2Z1bmN0aW9uIFpTdCgpe3ZhciBlPXFlKGs1KSx0PXFlKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBpO2lmKHJ8fChyPWk9YnMoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gcj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKGkpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKCtpKSxuKTp0fSxuLmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOmksbik6cn0sbn1mdW5jdGlvbiBkYygpe31mdW5jdGlvbiBKYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmUuX3gwK2UuX3gxKS8zLCgyKmUuX3kwK2UuX3kxKS8zLChlLl94MCsyKmUuX3gxKS8zLChlLl95MCsyKmUuX3kxKS8zLChlLl94MCs0KmUuX3gxK3QpLzYsKGUuX3kwKzQqZS5feTErcikvNil9ZnVuY3Rpb24gUjUoZSl7dGhpcy5fY29udGV4dD1lfVI1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6SmIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6SmIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19O2Z1bmN0aW9uIFc4KGUpe3JldHVybiBuZXcgUjUoZSl9ZnVuY3Rpb24gSlN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1KU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZGMsYXJlYUVuZDpkYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0OkpiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fTtmdW5jdGlvbiBRU3QoZSl7cmV0dXJuIG5ldyBKU3QoZSl9ZnVuY3Rpb24gdDN0KGUpe3RoaXMuX2NvbnRleHQ9ZX10M3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpKYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX07ZnVuY3Rpb24gZTN0KGUpe3JldHVybiBuZXcgdDN0KGUpfWZ1bmN0aW9uIHIzdChlLHQpe3RoaXMuX2Jhc2lzPW5ldyBSNShlKSx0aGlzLl9iZXRhPXR9cjN0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49ZVswXSxpPXRbMF0sbz1lW3JdLW4sYT10W3JdLWkscz0tMSxsOysrczw9cjspbD1zL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSplW3NdKygxLXRoaXMuX2JldGEpKihuK2wqbyksdGhpcy5fYmV0YSp0W3NdKygxLXRoaXMuX2JldGEpKihpK2wqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTt2YXIgbjN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD09PTE/bmV3IFI1KG4pOm5ldyByM3Qobix0KX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjg1KTtmdW5jdGlvbiBRYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFk4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1ZOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6UWIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgaTN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFk4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIGo4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1qOC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgbzN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IGo4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIFg4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1YOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpRYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGEzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBYOChuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKTtmdW5jdGlvbiBONShlLHQscil7dmFyIG49ZS5feDEsaT1lLl95MSxvPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+Ym8pe3ZhciBzPTIqZS5fbDAxXzJhKzMqZS5fbDAxX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGw9MyplLl9sMDFfYSooZS5fbDAxX2ErZS5fbDEyX2EpO249KG4qcy1lLl94MCplLl9sMTJfMmErZS5feDIqZS5fbDAxXzJhKS9sLGk9KGkqcy1lLl95MCplLl9sMTJfMmErZS5feTIqZS5fbDAxXzJhKS9sfWlmKGUuX2wyM19hPmJvKXt2YXIgYz0yKmUuX2wyM18yYSszKmUuX2wyM19hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDIzX2EqKGUuX2wyM19hK2UuX2wxMl9hKTtvPShvKmMrZS5feDEqZS5fbDIzXzJhLXQqZS5fbDEyXzJhKS91LGE9KGEqYytlLl95MSplLl9sMjNfMmEtciplLl9sMTJfMmEpL3V9ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxvLGEsZS5feDIsZS5feTIpfWZ1bmN0aW9uIHMzdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fXMzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGwzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHMzdChuLHQpOm5ldyBZOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIGMzdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fWMzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpONSh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciB1M3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyBjM3Qobix0KTpuZXcgajgobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KTtmdW5jdGlvbiBoM3QoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH1oM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGYzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IGgzdChuLHQpOm5ldyBYOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIHAzdChlKXt0aGlzLl9jb250ZXh0PWV9cDN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe2U9K2UsdD0rdCx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCkpfX07ZnVuY3Rpb24gZDN0KGUpe3JldHVybiBuZXcgcDN0KGUpfWZ1bmN0aW9uIG0zdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gZzN0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKG0zdChvKSttM3QoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBfM3QoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGMkKGUsdCxyKXt2YXIgbj1lLl94MCxpPWUuX3kwLG89ZS5feDEsYT1lLl95MSxzPShvLW4pLzM7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqdCxvLXMsYS1zKnIsbyxhKX1mdW5jdGlvbiAkOChlKXt0aGlzLl9jb250ZXh0PWV9JDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmMkKHRoaXMsdGhpcy5fdDAsXzN0KHRoaXMsdGhpcy5fdDApKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TmFOO2lmKGU9K2UsdD0rdCwhKGU9PT10aGlzLl94MSYmdD09PXRoaXMuX3kxKSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxjJCh0aGlzLF8zdCh0aGlzLHI9ZzN0KHRoaXMsZSx0KSkscik7YnJlYWs7ZGVmYXVsdDpjJCh0aGlzLHRoaXMuX3QwLHI9ZzN0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07ZnVuY3Rpb24geTN0KGUpe3RoaXMuX2NvbnRleHQ9bmV3IHYzdChlKX0oeTN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKCQ4LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKGUsdCl7JDgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyx0LGUpfTtmdW5jdGlvbiB2M3QoZSl7dGhpcy5fY29udGV4dD1lfXYzdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUsbixyLG8saSl9fTtmdW5jdGlvbiB4M3QoZSl7cmV0dXJuIG5ldyAkOChlKX1mdW5jdGlvbiBiM3QoZSl7cmV0dXJuIG5ldyB5M3QoZSl9ZnVuY3Rpb24gUzN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1TM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZVswXSx0WzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlWzBdLHRbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKGVbMV0sdFsxXSk7ZWxzZSBmb3IodmFyIG49dzN0KGUpLGk9dzN0KHQpLG89MCxhPTE7YTxyOysrbywrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bb10saVswXVtvXSxuWzFdW29dLGlbMV1bb10sZVthXSx0W2FdKTsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnI9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTtmdW5jdGlvbiB3M3QoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBNM3QoZSl7cmV0dXJuIG5ldyBTM3QoZSl9ZnVuY3Rpb24gSzgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fdD10fUs4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fTtmdW5jdGlvbiBFM3QoZSl7cmV0dXJuIG5ldyBLOChlLC41KX1mdW5jdGlvbiBUM3QoZSl7cmV0dXJuIG5ldyBLOChlLDApfWZ1bmN0aW9uIEMzdChlKXtyZXR1cm4gbmV3IEs4KGUsMSl9ZnVuY3Rpb24geHUoZSx0KXtpZigoYT1lLmxlbmd0aCk+MSlmb3IodmFyIHI9MSxuLGksbz1lW3RbMF1dLGEscz1vLmxlbmd0aDtyPGE7KytyKWZvcihpPW8sbz1lW3Rbcl1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4oaVtuXVsxXSk/aVtuXVswXTppW25dWzFdfWZ1bmN0aW9uIGJ1KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn1mdW5jdGlvbiAkRWUoZSx0KXtyZXR1cm4gZVt0XX1mdW5jdGlvbiBBM3QoKXt2YXIgZT1xZShbXSksdD1idSxyPXh1LG49JEVlO2Z1bmN0aW9uIGkobyl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscyxsPW8ubGVuZ3RoLGM9YS5sZW5ndGgsdT1uZXcgQXJyYXkoYyksaDtmb3Iocz0wO3M8YzsrK3Mpe2Zvcih2YXIgZj1hW3NdLHA9dVtzXT1uZXcgQXJyYXkobCksZD0wLGc7ZDxsOysrZClwW2RdPWc9WzAsK24ob1tkXSxmLGQsbyldLGcuZGF0YT1vW2RdO3Aua2V5PWZ9Zm9yKHM9MCxoPXQodSk7czxjOysrcyl1W2hbc11dLmluZGV4PXM7cmV0dXJuIHIodSxoKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpxZShMNS5jYWxsKG8pKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286cWUoK28pLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bz09bnVsbD9idTp0eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOnFlKEw1LmNhbGwobykpLGkpOnR9LGkub2Zmc2V0PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW89PW51bGw/eHU6byxpKTpyfSxpfWZ1bmN0aW9uIFAzdChlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpPTAsbz1lWzBdLmxlbmd0aCxhO2k8bzsrK2kpe2ZvcihhPXI9MDtyPG47KytyKWErPWVbcl1baV1bMV18fDA7aWYoYSlmb3Iocj0wO3I8bjsrK3IpZVtyXVtpXVsxXS89YX14dShlLHQpfX1mdW5jdGlvbiBJM3QoZSx0KXtpZigobD1lLmxlbmd0aCk+MClmb3IodmFyIHIsbj0wLGksbyxhLHMsbCxjPWVbdFswXV0ubGVuZ3RoO248YzsrK24pZm9yKGE9cz0wLHI9MDtyPGw7KytyKShvPShpPWVbdFtyXV1bbl0pWzFdLWlbMF0pPjA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6KGlbMF09MCxpWzFdPW8pfWZ1bmN0aW9uIEwzdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfXh1KGUsdCl9fWZ1bmN0aW9uIGszdChlLHQpe2lmKCEoISgoYT1lLmxlbmd0aCk+MCl8fCEoKG89KGk9ZVt0WzBdXSkubGVuZ3RoKT4wKSkpe2Zvcih2YXIgcj0wLG49MSxpLG8sYTtuPG87KytuKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8YTsrK3Mpe2Zvcih2YXIgdT1lW3Rbc11dLGg9dVtuXVsxXXx8MCxmPXVbbi0xXVsxXXx8MCxwPShoLWYpLzIsZD0wO2Q8czsrK2Qpe3ZhciBnPWVbdFtkXV0sXz1nW25dWzFdfHwwLHk9Z1tuLTFdWzFdfHwwO3ArPV8teX1sKz1oLGMrPXAqaH1pW24tMV1bMV0rPWlbbi0xXVswXT1yLGwmJihyLT1jL2wpfWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIseHUoZSx0KX19ZnVuY3Rpb24gWjgoZSl7dmFyIHQ9ZS5tYXAoS0VlKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiBLRWUoZSl7Zm9yKHZhciB0PS0xLHI9MCxuPWUubGVuZ3RoLGksbz0tMS8wOysrdDxuOykoaT0rZVt0XVsxXSk+byYmKG89aSxyPXQpO3JldHVybiByfWZ1bmN0aW9uIEo4KGUpe3ZhciB0PWUubWFwKHUkKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiB1JChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9ZnVuY3Rpb24gUjN0KGUpe3JldHVybiBKOChlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gTjN0KGUpe3ZhciB0PWUubGVuZ3RoLHIsbixpPWUubWFwKHUkKSxvPVo4KGUpLGE9MCxzPTAsbD1bXSxjPVtdO2ZvcihyPTA7cjx0OysrciluPW9bcl0sYTxzPyhhKz1pW25dLGwucHVzaChuKSk6KHMrPWlbbl0sYy5wdXNoKG4pKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfWZ1bmN0aW9uIEQzdChlKXtyZXR1cm4gYnUoZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIGgkKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBPM3QoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gejN0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIGYkKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdDIoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mJC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYkLGluc2VydDpmdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtyPWV9ZWxzZSB0aGlzLl8/KGU9RjN0KHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LHI9ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxyPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPXIsdC5DPSEwLGU9dDtyJiZyLkM7KW49ci5VLHI9PT1uLkw/KGk9bi5SLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKEQ1KHRoaXMsciksZT1yLHI9ZS5VKSxyLkM9ITEsbi5DPSEwLE81KHRoaXMsbikpKTooaT1uLkwsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5MJiYoTzUodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsRDUodGhpcyxuKSkpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdD1lLlUscixuPWUuTCxpPWUuUixvLGE7aWYobj9pP289RjN0KGkpOm89bjpvPWksdD90Lkw9PT1lP3QuTD1vOnQuUj1vOnRoaXMuXz1vLG4mJmk/KGE9by5DLG8uQz1lLkMsby5MPW4sbi5VPW8sbyE9PWk/KHQ9by5VLG8uVT1lLlUsZT1vLlIsdC5MPWUsby5SPWksaS5VPW8pOihvLlU9dCx0PW8sZT1vLlIpKTooYT1lLkMsZT1vKSxlJiYoZS5VPXQpLCFhKXtpZihlJiZlLkMpe2UuQz0hMTtyZXR1cm59ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09dC5MKXtpZihyPXQuUixyLkMmJihyLkM9ITEsdC5DPSEwLEQ1KHRoaXMsdCkscj10LlIpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5SfHwhci5SLkMpJiYoci5MLkM9ITEsci5DPSEwLE81KHRoaXMscikscj10LlIpLHIuQz10LkMsdC5DPXIuUi5DPSExLEQ1KHRoaXMsdCksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYocj10Lkwsci5DJiYoci5DPSExLHQuQz0hMCxPNSh0aGlzLHQpLHI9dC5MKSxyLkwmJnIuTC5DfHxyLlImJnIuUi5DKXsoIXIuTHx8IXIuTC5DKSYmKHIuUi5DPSExLHIuQz0hMCxENSh0aGlzLHIpLHI9dC5MKSxyLkM9dC5DLHQuQz1yLkwuQz0hMSxPNSh0aGlzLHQpLGU9dGhpcy5fO2JyZWFrfXIuQz0hMCxlPXQsdD10LlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX07ZnVuY3Rpb24gRDUoZSx0KXt2YXIgcj10LG49dC5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIE81KGUsdCl7dmFyIHI9dCxuPXQuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBGM3QoZSl7Zm9yKDtlLkw7KWU9ZS5MO3JldHVybiBlfXZhciBwJD1mJDtmdW5jdGlvbiBlMihlLHQscixuKXt2YXIgaT1bbnVsbCxudWxsXSxvPXdvLnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PWUsaS5yaWdodD10LHImJno1KGksZSx0LHIpLG4mJno1KGksdCxlLG4pLFZhW2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFZhW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gcjIoZSx0LHIpe3ZhciBuPVt0LHJdO3JldHVybiBuLmxlZnQ9ZSxufWZ1bmN0aW9uIHo1KGUsdCxyLG4peyFlWzBdJiYhZVsxXT8oZVswXT1uLGUubGVmdD10LGUucmlnaHQ9cik6ZS5sZWZ0PT09cj9lWzFdPW46ZVswXT1ufWZ1bmN0aW9uIFpFZShlLHQscixuLGkpe3ZhciBvPWVbMF0sYT1lWzFdLHM9b1swXSxsPW9bMV0sYz1hWzBdLHU9YVsxXSxoPTAsZj0xLHA9Yy1zLGQ9dS1sLGc7aWYoZz10LXMsISghcCYmZz4wKSl7aWYoZy89cCxwPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKHA+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9bi1zLCEoIXAmJmc8MCkpe2lmKGcvPXAscDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihwPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1pZihnPXItbCwhKCFkJiZnPjApKXtpZihnLz1kLGQ8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYoZD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1pLWwsISghZCYmZzwwKSl7aWYoZy89ZCxkPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKGQ+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfXJldHVybiEoaD4wKSYmIShmPDEpfHwoaD4wJiYoZVswXT1bcytoKnAsbCtoKmRdKSxmPDEmJihlWzFdPVtzK2YqcCxsK2YqZF0pKSwhMH19fX19ZnVuY3Rpb24gSkVlKGUsdCxyLG4saSl7dmFyIG89ZVsxXTtpZihvKXJldHVybiEwO3ZhciBhPWVbMF0scz1lLmxlZnQsbD1lLnJpZ2h0LGM9c1swXSx1PXNbMV0saD1sWzBdLGY9bFsxXSxwPShjK2gpLzIsZD0odStmKS8yLGcsXztpZihmPT09dSl7aWYocDx0fHxwPj1uKXJldHVybjtpZihjPmgpe2lmKCFhKWE9W3Ascl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVtwLGldfWVsc2V7aWYoIWEpYT1bcCxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bcCxyXX19ZWxzZSBpZihnPShjLWgpLyhmLXUpLF89ZC1nKnAsZzwtMXx8Zz4xKWlmKGM+aCl7aWYoIWEpYT1bKHItXykvZyxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289WyhpLV8pL2csaV19ZWxzZXtpZighYSlhPVsoaS1fKS9nLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVsoci1fKS9nLHJdfWVsc2UgaWYodTxmKXtpZighYSlhPVt0LGcqdCtfXTtlbHNlIGlmKGFbMF0+PW4pcmV0dXJuO289W24sZypuK19dfWVsc2V7aWYoIWEpYT1bbixnKm4rX107ZWxzZSBpZihhWzBdPHQpcmV0dXJuO289W3QsZyp0K19dfXJldHVybiBlWzBdPWEsZVsxXT1vLCEwfWZ1bmN0aW9uIEIzdChlLHQscixuKXtmb3IodmFyIGk9d28ubGVuZ3RoLG87aS0tOykoIUpFZShvPXdvW2ldLGUsdCxyLG4pfHwhWkVlKG8sZSx0LHIsbil8fCEoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5Icnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5IcikpJiZkZWxldGUgd29baV19ZnVuY3Rpb24gSDN0KGUpe3JldHVybiBWYVtlLmluZGV4XT17c2l0ZTplLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gUUVlKGUsdCl7dmFyIHI9ZS5zaXRlLG49dC5sZWZ0LGk9dC5yaWdodDtyZXR1cm4gcj09PWkmJihpPW4sbj1yKSxpP01hdGguYXRhbjIoaVsxXS1uWzFdLGlbMF0tblswXSk6KHI9PT1uPyhuPXRbMV0saT10WzBdKToobj10WzBdLGk9dFsxXSksTWF0aC5hdGFuMihuWzBdLWlbMF0saVsxXS1uWzFdKSl9ZnVuY3Rpb24gZCQoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIHQ1ZShlLHQpe3JldHVybiB0WysodC5sZWZ0PT09ZS5zaXRlKV19ZnVuY3Rpb24gVjN0KCl7Zm9yKHZhciBlPTAsdD1WYS5sZW5ndGgscixuLGksbztlPHQ7KytlKWlmKChyPVZhW2VdKSYmKG89KG49ci5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3IoaT0wO2k8bzsrK2kpYVtpXT1pLHNbaV09UUVlKHIsd29bbltpXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSksaT0wO2k8bzsrK2kpc1tpXT1uW2FbaV1dO2ZvcihpPTA7aTxvOysraSluW2ldPXNbaV19fWZ1bmN0aW9uIFUzdChlLHQscixuKXt2YXIgaT1WYS5sZW5ndGgsbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8seT0hMDtmb3Iobz0wO288aTsrK28paWYoYT1WYVtvXSl7Zm9yKHM9YS5zaXRlLGM9YS5oYWxmZWRnZXMsbD1jLmxlbmd0aDtsLS07KXdvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsdT1jLmxlbmd0aDtsPHU7KWQ9dDVlKGEsd29bY1tsXV0pLGc9ZFswXSxfPWRbMV0saD1kJChhLHdvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Icnx8TWF0aC5hYnMoXy1wKT5IcikmJihjLnNwbGljZShsLDAsd28ucHVzaChyMihzLGQsTWF0aC5hYnMoZy1lKTxIciYmbi1fPkhyP1tlLE1hdGguYWJzKGYtZSk8SHI/cDpuXTpNYXRoLmFicyhfLW4pPEhyJiZyLWc+SHI/W01hdGguYWJzKHAtbik8SHI/ZjpyLG5dOk1hdGguYWJzKGctcik8SHImJl8tdD5Icj9bcixNYXRoLmFicyhmLXIpPEhyP3A6dF06TWF0aC5hYnMoXy10KTxIciYmZy1lPkhyP1tNYXRoLmFicyhwLXQpPEhyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9VmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKHdvLnB1c2gocjIocz15LnNpdGUsUCxrKSktMSx3by5wdXNoKHIyKHMsayxPKSktMSx3by5wdXNoKHIyKHMsTyxEKSktMSx3by5wdXNoKHIyKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1WYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBWYVtvXSl9dmFyIHEzdD1bXSxRODtmdW5jdGlvbiBlNWUoKXt0Mih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gY3koZSl7dmFyIHQ9ZS5QLHI9ZS5OO2lmKCEoIXR8fCFyKSl7dmFyIG49dC5zaXRlLGk9ZS5zaXRlLG89ci5zaXRlO2lmKG4hPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSxsPW5bMF0tYSxjPW5bMV0tcyx1PW9bMF0tYSxoPW9bMV0tcyxmPTIqKGwqaC1jKnUpO2lmKCEoZj49LUczdCkpe3ZhciBwPWwqbCtjKmMsZD11KnUraCpoLGc9KGgqcC1jKmQpL2YsXz0obCpkLXUqcCkvZix5PXEzdC5wb3AoKXx8bmV3IGU1ZTt5LmFyYz1lLHkuc2l0ZT1pLHkueD1nK2EseS55PSh5LmN5PV8rcykrTWF0aC5zcXJ0KGcqZytfKl8pLGUuY2lyY2xlPXk7Zm9yKHZhciB4PW51bGwsYj1uMi5fO2I7KWlmKHkueTxiLnl8fHkueT09PWIueSYmeS54PD1iLngpaWYoYi5MKWI9Yi5MO2Vsc2V7eD1iLlA7YnJlYWt9ZWxzZSBpZihiLlIpYj1iLlI7ZWxzZXt4PWI7YnJlYWt9bjIuaW5zZXJ0KHgseSkseHx8KFE4PXkpfX19fWZ1bmN0aW9uIHV5KGUpe3ZhciB0PWUuY2lyY2xlO3QmJih0LlB8fChROD10Lk4pLG4yLnJlbW92ZSh0KSxxM3QucHVzaCh0KSx0Mih0KSxlLmNpcmNsZT1udWxsKX12YXIgWTN0PVtdO2Z1bmN0aW9uIHI1ZSgpe3QyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBXM3QoZSl7dmFyIHQ9WTN0LnBvcCgpfHxuZXcgcjVlO3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIG0kKGUpe3V5KGUpLGh5LnJlbW92ZShlKSxZM3QucHVzaChlKSx0MihlKX1mdW5jdGlvbiBqM3QoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGk9W3Isbl0sbz1lLlAsYT1lLk4scz1bZV07bSQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8SHImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPEhyOylvPWwuUCxzLnVuc2hpZnQobCksbSQobCksbD1vO3MudW5zaGlmdChsKSx1eShsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMoci1jLmNpcmNsZS54KTxIciYmTWF0aC5hYnMobi1jLmNpcmNsZS5jeSk8SHI7KWE9Yy5OLHMucHVzaChjKSxtJChjKSxjPWE7cy5wdXNoKGMpLHV5KGMpO3ZhciB1PXMubGVuZ3RoLGg7Zm9yKGg9MTtoPHU7KytoKWM9c1toXSxsPXNbaC0xXSx6NShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW3UtMV0sYy5lZGdlPWUyKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxjeShsKSxjeShjKX1mdW5jdGlvbiBYM3QoZSl7Zm9yKHZhciB0PWVbMF0scj1lWzFdLG4saSxvLGEscz1oeS5fO3M7KWlmKG89JDN0KHMsciktdCxvPkhyKXM9cy5MO2Vsc2UgaWYoYT10LW41ZShzLHIpLGE+SHIpe2lmKCFzLlIpe249czticmVha31zPXMuUn1lbHNle28+LUhyPyhuPXMuUCxpPXMpOmE+LUhyPyhuPXMsaT1zLk4pOm49aT1zO2JyZWFrfUgzdChlKTt2YXIgbD1XM3QoZSk7aWYoaHkuaW5zZXJ0KG4sbCksISghbiYmIWkpKXtpZihuPT09aSl7dXkobiksaT1XM3Qobi5zaXRlKSxoeS5pbnNlcnQobCxpKSxsLmVkZ2U9aS5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpLGN5KG4pLGN5KGkpO3JldHVybn1pZighaSl7bC5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpO3JldHVybn11eShuKSx1eShpKTt2YXIgYz1uLnNpdGUsdT1jWzBdLGg9Y1sxXSxmPWVbMF0tdSxwPWVbMV0taCxkPWkuc2l0ZSxnPWRbMF0tdSxfPWRbMV0taCx5PTIqKGYqXy1wKmcpLHg9ZipmK3AqcCxiPWcqZytfKl8sUz1bKF8qeC1wKmIpL3krdSwoZipiLWcqeCkveStoXTt6NShpLmVkZ2UsYyxkLFMpLGwuZWRnZT1lMihjLGUsbnVsbCxTKSxpLmVkZ2U9ZTIoZSxkLG51bGwsUyksY3kobiksY3koaSl9fWZ1bmN0aW9uICQzdChlLHQpe3ZhciByPWUuc2l0ZSxuPXJbMF0saT1yWzFdLG89aS10O2lmKCFvKXJldHVybiBuO3ZhciBhPWUuUDtpZighYSlyZXR1cm4tMS8wO3I9YS5zaXRlO3ZhciBzPXJbMF0sbD1yWzFdLGM9bC10O2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixoPTEvby0xL2MsZj11L2M7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKih1KnUvKC0yKmMpLWwrYy8yK2ktby8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIG41ZShlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiAkM3Qocix0KTt2YXIgbj1lLnNpdGU7cmV0dXJuIG5bMV09PT10P25bMF06MS8wfXZhciBIcj0xZS02LEczdD0xZS0xMixoeSxWYSxuMix3bztmdW5jdGlvbiBpNWUoZSx0LHIpe3JldHVybihlWzBdLXJbMF0pKih0WzFdLWVbMV0pLShlWzBdLXRbMF0pKihyWzFdLWVbMV0pfWZ1bmN0aW9uIG81ZShlLHQpe3JldHVybiB0WzFdLWVbMV18fHRbMF0tZVswXX1mdW5jdGlvbiBGNShlLHQpe3ZhciByPWUuc29ydChvNWUpLnBvcCgpLG4saSxvO2Zvcih3bz1bXSxWYT1uZXcgQXJyYXkoZS5sZW5ndGgpLGh5PW5ldyBwJCxuMj1uZXcgcCQ7OylpZihvPVE4LHImJighb3x8clsxXTxvLnl8fHJbMV09PT1vLnkmJnJbMF08by54KSkoclswXSE9PW58fHJbMV0hPT1pKSYmKFgzdChyKSxuPXJbMF0saT1yWzFdKSxyPWUucG9wKCk7ZWxzZSBpZihvKWozdChvLmFyYyk7ZWxzZSBicmVhaztpZihWM3QoKSx0KXt2YXIgYT0rdFswXVswXSxzPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTtCM3QoYSxzLGwsYyksVTN0KGEscyxsLGMpfXRoaXMuZWRnZXM9d28sdGhpcy5jZWxscz1WYSxoeT1uMj13bz1WYT1udWxsfUY1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RjUscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGQkKHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZpNWUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX07ZnVuY3Rpb24gSzN0KCl7dmFyIGU9TzN0LHQ9ejN0LHI9bnVsbDtmdW5jdGlvbiBuKGkpe3JldHVybiBuZXcgRjUoaS5tYXAoZnVuY3Rpb24obyxhKXt2YXIgcz1bTWF0aC5yb3VuZChlKG8sYSxpKS9IcikqSHIsTWF0aC5yb3VuZCh0KG8sYSxpKS9IcikqSHJdO3JldHVybiBzLmluZGV4PWEscy5kYXRhPW8sc30pLHIpfXJldHVybiBuLnBvbHlnb25zPWZ1bmN0aW9uKGkpe3JldHVybiBuKGkpLnBvbHlnb25zKCl9LG4ubGlua3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkubGlua3MoKX0sbi50cmlhbmdsZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkudHJpYW5nbGVzKCl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmgkKCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpoJCgraSksbik6dH0sbi5leHRlbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbK2lbMF1bMF0sK2lbMF1bMV1dLFsraVsxXVswXSwraVsxXVsxXV1dLG4pOnImJltbclswXVswXSxyWzBdWzFdXSxbclsxXVswXSxyWzFdWzFdXV19LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1swLDBdLFsraVswXSwraVsxXV1dLG4pOnImJltyWzFdWzBdLXJbMF1bMF0sclsxXVsxXS1yWzBdWzFdXX0sbn1rbSgpO2Z1bmN0aW9uIEI1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBnJChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnRyYW5zZm9ybT1yfWZ1bmN0aW9uIGpoKGUsdCxyKXt0aGlzLms9ZSx0aGlzLng9dCx0aGlzLnk9cn1qaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpoLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBqaCh0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IGpoKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIFhoPW5ldyBqaCgxLDAsMCk7aTIucHJvdG90eXBlPWpoLnByb3RvdHlwZTtmdW5jdGlvbiBpMihlKXtmb3IoOyFlLl9fem9vbTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIFhoO3JldHVybiBlLl9fem9vbX1mdW5jdGlvbiB0Uigpe3F0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIG8yKCl7cXQucHJldmVudERlZmF1bHQoKSxxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBhNWUoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBzNWUoKXt2YXIgZT10aGlzO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSxlLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpPyhlPWUudmlld0JveC5iYXNlVmFsLFtbZS54LGUueV0sW2UueCtlLndpZHRoLGUueStlLmhlaWdodF1dKTpbWzAsMF0sW2Uud2lkdGguYmFzZVZhbC52YWx1ZSxlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV0pOltbMCwwXSxbZS5jbGllbnRXaWR0aCxlLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIFozdCgpe3JldHVybiB0aGlzLl9fem9vbXx8WGh9ZnVuY3Rpb24gbDVlKCl7cmV0dXJuLXF0LmRlbHRhWSoocXQuZGVsdGFNb2RlPT09MT8uMDU6cXQuZGVsdGFNb2RlPzE6LjAwMil9ZnVuY3Rpb24gYzVlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHU1ZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gZVIoKXt2YXIgZT1hNWUsdD1zNWUscj11NWUsbj1sNWUsaT1jNWUsbz1bMCwxLzBdLGE9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0scz0yNTAsbD12TCxjPXZzKCJzdGFydCIsInpvb20iLCJlbmQiKSx1LGgsZj01MDAscD0xNTAsZD0wO2Z1bmN0aW9uIGcoTCl7TC5wcm9wZXJ0eSgiX196b29tIixaM3QpLm9uKCJ3aGVlbC56b29tIixQKS5vbigibW91c2Vkb3duLnpvb20iLGspLm9uKCJkYmxjbGljay56b29tIixPKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuem9vbSIsRCkub24oInRvdWNobW92ZS56b29tIixCKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixJKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9Zy50cmFuc2Zvcm09ZnVuY3Rpb24oTCxSLEYpe3ZhciB6PUwuc2VsZWN0aW9uP0wuc2VsZWN0aW9uKCk6TDt6LnByb3BlcnR5KCJfX3pvb20iLFozdCksTCE9PXo/YihMLFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIFI9PSJmdW5jdGlvbiI/Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UikuZW5kKCl9KX0sZy5zY2FsZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnNjYWxlVG8oTCxmdW5jdGlvbigpe3ZhciB6PXRoaXMuX196b29tLmssVT10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiB6KlV9LEYpfSxnLnNjYWxlVG89ZnVuY3Rpb24oTCxSLEYpe2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Rj09bnVsbD94KHopOnR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsWj1VLmludmVydChXKSxydD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiByKHkoXyhVLHJ0KSxXLFopLHosYSl9LEYpfSxnLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlIsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sZy50cmFuc2xhdGVUbz1mdW5jdGlvbihMLFIsRix6KXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7dmFyIFU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksVz10aGlzLl9fem9vbSxaPXo9PW51bGw/eChVKTp0eXBlb2Ygej09ImZ1bmN0aW9uIj96LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6O3JldHVybiByKFhoLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iPy1SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotUix0eXBlb2YgRj09ImZ1bmN0aW9uIj8tRi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUYpLFUsYSl9LHopfTtmdW5jdGlvbiBfKEwsUil7cmV0dXJuIFI9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIpKSxSPT09TC5rP0w6bmV3IGpoKFIsTC54LEwueSl9ZnVuY3Rpb24geShMLFIsRil7dmFyIHo9UlswXS1GWzBdKkwuayxVPVJbMV0tRlsxXSpMLms7cmV0dXJuIHo9PT1MLngmJlU9PT1MLnk/TDpuZXcgamgoTC5rLHosVSl9ZnVuY3Rpb24geChMKXtyZXR1cm5bKCtMWzBdWzBdKyArTFsxXVswXSkvMiwoK0xbMF1bMV0rICtMWzFdWzFdKS8yXX1mdW5jdGlvbiBiKEwsUixGKXtMLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe1ModGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgej10aGlzLFU9YXJndW1lbnRzLFc9Uyh6LFUpLFo9dC5hcHBseSh6LFUpLHJ0PUY9PW51bGw/eChaKTp0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHosVSk6RixvdD1NYXRoLm1heChaWzFdWzBdLVpbMF1bMF0sWlsxXVsxXS1aWzBdWzFdKSxzdD16Ll9fem9vbSxTdD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHosVSk6UixidD1sKHN0LmludmVydChydCkuY29uY2F0KG90L3N0LmspLFN0LmludmVydChydCkuY29uY2F0KG90L1N0LmspKTtyZXR1cm4gZnVuY3Rpb24oTXQpe2lmKE10PT09MSlNdD1TdDtlbHNle3ZhciBsdD1idChNdCksS3Q9b3QvbHRbMl07TXQ9bmV3IGpoKEt0LHJ0WzBdLWx0WzBdKkt0LHJ0WzFdLWx0WzFdKkt0KX1XLnpvb20obnVsbCxNdCl9fSl9ZnVuY3Rpb24gUyhMLFIsRil7cmV0dXJuIUYmJkwuX196b29taW5nfHxuZXcgQyhMLFIpfWZ1bmN0aW9uIEMoTCxSKXt0aGlzLnRoYXQ9TCx0aGlzLmFyZ3M9Uix0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXQuYXBwbHkoTCxSKSx0aGlzLnRhcHM9MH1DLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMuYWN0aXZlPT09MSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oTCxSKXtyZXR1cm4gdGhpcy5tb3VzZSYmTCE9PSJtb3VzZSImJih0aGlzLm1vdXNlWzFdPVIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmTCE9PSJ0b3VjaCImJih0aGlzLnRvdWNoMFsxXT1SLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiZMIT09InRvdWNoIiYmKHRoaXMudG91Y2gxWzFdPVIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1SLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihMKXtNcChuZXcgZyQoZyxMLHRoaXMudGhhdC5fX3pvb20pLGMuYXBwbHksYyxbTCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBQKCl7aWYoIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXRoaXMuX196b29tLEY9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIuaypNYXRoLnBvdygyLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHo9em8odGhpcyk7aWYoTC53aGVlbCkoTC5tb3VzZVswXVswXSE9PXpbMF18fEwubW91c2VbMF1bMV0hPT16WzFdKSYmKEwubW91c2VbMV09Ui5pbnZlcnQoTC5tb3VzZVswXT16KSksY2xlYXJUaW1lb3V0KEwud2hlZWwpO2Vsc2V7aWYoUi5rPT09RilyZXR1cm47TC5tb3VzZT1beixSLmludmVydCh6KV0saHUodGhpcyksTC5zdGFydCgpfW8yKCksTC53aGVlbD1zZXRUaW1lb3V0KFUscCksTC56b29tKCJtb3VzZSIscih5KF8oUixGKSxMLm1vdXNlWzBdLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKTtmdW5jdGlvbiBVKCl7TC53aGVlbD1udWxsLEwuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihofHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBMPVModGhpcyxhcmd1bWVudHMsITApLFI9SHQocXQudmlldykub24oIm1vdXNlbW92ZS56b29tIixXLCEwKS5vbigibW91c2V1cC56b29tIixaLCEwKSxGPXpvKHRoaXMpLHo9cXQuY2xpZW50WCxVPXF0LmNsaWVudFk7em0ocXQudmlldyksdFIoKSxMLm1vdXNlPVtGLHRoaXMuX196b29tLmludmVydChGKV0saHUodGhpcyksTC5zdGFydCgpO2Z1bmN0aW9uIFcoKXtpZihvMigpLCFMLm1vdmVkKXt2YXIgcnQ9cXQuY2xpZW50WC16LG90PXF0LmNsaWVudFktVTtMLm1vdmVkPXJ0KnJ0K290Km90PmR9TC56b29tKCJtb3VzZSIscih5KEwudGhhdC5fX3pvb20sTC5tb3VzZVswXT16byhMLnRoYXQpLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKX1mdW5jdGlvbiBaKCl7Ui5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxGbShxdC52aWV3LEwubW92ZWQpLG8yKCksTC5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBMPXRoaXMuX196b29tLFI9em8odGhpcyksRj1MLmludmVydChSKSx6PUwuayoocXQuc2hpZnRLZXk/LjU6MiksVT1yKHkoXyhMLHopLFIsRiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7bzIoKSxzPjA/SHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoYixVLFIpOkh0KHRoaXMpLmNhbGwoZy50cmFuc2Zvcm0sVSl9fWZ1bmN0aW9uIEQoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgTD1xdC50b3VjaGVzLFI9TC5sZW5ndGgsRj1TKHRoaXMsYXJndW1lbnRzLHF0LmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PVIpLHosVSxXLFo7Zm9yKHRSKCksVT0wO1U8UjsrK1UpVz1MW1VdLFo9VHAodGhpcyxMLFcuaWRlbnRpZmllciksWj1bWix0aGlzLl9fem9vbS5pbnZlcnQoWiksVy5pZGVudGlmaWVyXSxGLnRvdWNoMD8hRi50b3VjaDEmJkYudG91Y2gwWzJdIT09WlsyXSYmKEYudG91Y2gxPVosRi50YXBzPTApOihGLnRvdWNoMD1aLHo9ITAsRi50YXBzPTErISF1KTt1JiYodT1jbGVhclRpbWVvdXQodSkpLHomJihGLnRhcHM8MiYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sZikpLGh1KHRoaXMpLEYuc3RhcnQoKSl9fWZ1bmN0aW9uIEIoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVLFcsWjtmb3IobzIoKSx1JiYodT1jbGVhclRpbWVvdXQodSkpLEwudGFwcz0wLHo9MDt6PEY7Kyt6KVU9Ult6XSxXPVRwKHRoaXMsUixVLmlkZW50aWZpZXIpLEwudG91Y2gwJiZMLnRvdWNoMFsyXT09PVUuaWRlbnRpZmllcj9MLnRvdWNoMFswXT1XOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmKEwudG91Y2gxWzBdPVcpO2lmKFU9TC50aGF0Ll9fem9vbSxMLnRvdWNoMSl7dmFyIHJ0PUwudG91Y2gwWzBdLG90PUwudG91Y2gwWzFdLHN0PUwudG91Y2gxWzBdLFN0PUwudG91Y2gxWzFdLGJ0PShidD1zdFswXS1ydFswXSkqYnQrKGJ0PXN0WzFdLXJ0WzFdKSpidCxNdD0oTXQ9U3RbMF0tb3RbMF0pKk10KyhNdD1TdFsxXS1vdFsxXSkqTXQ7VT1fKFUsTWF0aC5zcXJ0KGJ0L010KSksVz1bKHJ0WzBdK3N0WzBdKS8yLChydFsxXStzdFsxXSkvMl0sWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl19ZWxzZSBpZihMLnRvdWNoMClXPUwudG91Y2gwWzBdLFo9TC50b3VjaDBbMV07ZWxzZSByZXR1cm47TC56b29tKCJ0b3VjaCIscih5KFUsVyxaKSxMLmV4dGVudCxhKSl9fWZ1bmN0aW9uIEkoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVO2Zvcih0UigpLGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPW51bGx9LGYpLHo9MDt6PEY7Kyt6KVU9Ult6XSxMLnRvdWNoMCYmTC50b3VjaDBbMl09PT1VLmlkZW50aWZpZXI/ZGVsZXRlIEwudG91Y2gwOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmZGVsZXRlIEwudG91Y2gxO2lmKEwudG91Y2gxJiYhTC50b3VjaDAmJihMLnRvdWNoMD1MLnRvdWNoMSxkZWxldGUgTC50b3VjaDEpLEwudG91Y2gwKUwudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChMLnRvdWNoMFswXSk7ZWxzZSBpZihMLmVuZCgpLEwudGFwcz09PTIpe3ZhciBXPUh0KHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7VyYmVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gZy53aGVlbERlbHRhPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoK0wpLGcpOm59LGcuZmlsdGVyPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoISFMKSxnKTplfSxnLnRvdWNoYWJsZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOkI1KCEhTCksZyk6aX0sZy5leHRlbnQ9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpCNShbWytMWzBdWzBdLCtMWzBdWzFdXSxbK0xbMV1bMF0sK0xbMV1bMV1dXSksZyk6dH0sZy5zY2FsZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rTFswXSxvWzFdPStMWzFdLGcpOltvWzBdLG9bMV1dfSxnLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYVswXVswXT0rTFswXVswXSxhWzFdWzBdPStMWzFdWzBdLGFbMF1bMV09K0xbMF1bMV0sYVsxXVsxXT0rTFsxXVsxXSxnKTpbW2FbMF1bMF0sYVswXVsxXV0sW2FbMV1bMF0sYVsxXVsxXV1dfSxnLmNvbnN0cmFpbj1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1MLGcpOnJ9LGcuZHVyYXRpb249ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K0wsZyk6c30sZy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1MLGcpOmx9LGcub249ZnVuY3Rpb24oKXt2YXIgTD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gTD09PWM/ZzpMfSxnLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9KEw9K0wpKkwsZyk6TWF0aC5zcXJ0KGQpfSxnfXZhciBKM3Q9RWUoT2UoKSwxKTt2YXIgclI9Y2xhc3MgZXh0ZW5kcyBicHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2xldCB0PV9lKCkuZXhwZXJpbWVudHMoKTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e0ozdC5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLHIpfHwodGhpcy5fZXhwZXJpbWVudHM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX0sblI9bmV3IHJSO3ZhciBoNWU9e2dvb2dsZVN0YW5kYXJkOlsiI2RiNDQzNyIsIiNmZjcwNDMiLCIjZjRiNDAwIiwiIzBmOWQ1OCIsIiMwMDc5NmIiLCIjMDBhY2MxIiwiIzQyODVmNCIsIiM1YzZiYzAiLCIjYWI0N2JjIl0sZ29vZ2xlQ29vbDpbIiM5ZTlkMjQiLCIjMGY5ZDU4IiwiIzAwNzk2YiIsIiMwMGFjYzEiLCIjNDI4NWY0IiwiIzVjNmJjMCIsIiM2MDdkOGIiXSxnb29nbGVXYXJtOlsiIzc5NTU0OCIsIiNhYjQ3YmMiLCIjZjA2MjkyIiwiI2MyMTg1YiIsIiNkYjQ0MzciLCIjZmY3MDQzIiwiI2Y0YjQwMCJdLGdvb2dsZUNvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwQUNDMSIsIiNBQjQ3QkMiLCIjMkE1NkM2IiwiIzBiODA0MyIsIiNGN0NCNEQiLCIjYzBjYTMzIiwiIzVlMzViMSIsIiNBNTI3MTQiXSx0ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwNzdiYiIsIiNjYzMzMTEiLCIjMzNiYmVlIiwiI2VlMzM3NyIsIiMwMDk5ODgiLCIjYmJiYmJiIl0sY29sb3JCbGluZEFzc2lzdDE6WyIjNDQ3N2FhIiwiIzQ0YWFhYSIsIiNhYWFhNDQiLCIjYWE3NzQ0IiwiI2FhNDQ1NSIsIiNhYTQ0ODgiXSxjb2xvckJsaW5kQXNzaXN0MjpbIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiM4ODIyNTUiLCIjYWE0NDk5Il0sY29sb3JCbGluZEFzc2lzdDM6WyIjMzMyMjg4IiwiIzY2OTljYyIsIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiNhYTQ0NjYiLCIjODgyMjU1IiwiIzY2MTEwMCIsIiNhYTQ0OTkiXSxjb2xvckJsaW5kQXNzaXN0NDpbIiM0NDc3YWEiLCIjNjZjY2VlIiwiIzIyODgzMyIsIiNjY2JiNDQiLCIjZWU2Njc3IiwiI2FhMzM3NyIsIiNiYmJiYmIiXSxjb2xvckJsaW5kQXNzaXN0NTpbIiNGRjZEQjYiLCIjOTIwMDAwIiwiIzkyNDkwMCIsIiNEQkQxMDAiLCIjMjRGRjI0IiwiIzAwNkREQiIsIiM0OTAwOTIiXSxtbGRhc2g6WyIjRTQ3RUFEIiwiI0Y0NjQwRCIsIiNGQUEzMDAiLCIjRjVFNjM2IiwiIzAwQTA3NyIsIiMwMDc3QjgiLCIjMDBCN0VEIl19LGlSPWg1ZS50ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q7dmFyIF8kPWNsYXNze2NvbnN0cnVjdG9yKHQ9aVIpe3RoaXMucGFsZXR0ZT10LHRoaXMuaWRlbnRpZmllcnM9SmkoKX1zZXREb21haW4odCl7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnM9SmkoKSx0LmZvckVhY2goKHIsbik9Pnt0aGlzLmlkZW50aWZpZXJzLnNldChyLHRoaXMucGFsZXR0ZVtuJXRoaXMucGFsZXR0ZS5sZW5ndGhdKX0pLHRoaXN9Z2V0Q29sb3IodCl7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7dH0gd2FzIG5vdCBpbiB0aGUgZG9tYWluLmApO3JldHVybiB0aGlzLmlkZW50aWZpZXJzLmdldCh0KX19O2Z1bmN0aW9uIFEzdChlLHQpe2xldCByPW5ldyBfJDtmdW5jdGlvbiBuKCl7ci5zZXREb21haW4odCgpKX1yZXR1cm4gZS5hZGRMaXN0ZW5lcihuKSxuKCksaT0+ci5nZXRDb2xvcihpKX12YXIgZm49UTN0KHdwLCgpPT53cC5nZXRSdW5zKCkpLHZRcj1RM3QoblIsKCk9Pm5SLmdldEV4cGVyaW1lbnRzKCkubWFwKCh7bmFtZTplfSk9PmUpKTt2YXIgb2c9RWUoT2UoKSwxKTtfcyh7bW9kdWxlTmFtZToicnVuLWNvbG9yLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgW2NvbG9yLWNsYXNzPSdsaWdodC1ibHVlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0ncmVkJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdncmVlbiddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwdXJwbGUnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3RlYWwnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwaW5rJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcGluay01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0nb3JhbmdlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdicm93biddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdpbmRpZ28nXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICB9CiAgYH0pO3ZhciBvbD1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lcz1bXSx0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjooKT0+IiJ9LHRoaXMucmVnZXg9IiIsdGhpcy5zZWxlY3Rpb25TdGF0ZT17fSx0aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ9NDAsdGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2U9dGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl9X2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpe3ZhciB0PW9nLmRlYm91bmNlKHI9Pnt0aGlzLnJlZ2V4PXJ9LDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlO3I9PSIiP3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnJlZ2V4PXJ9LDMwKTp0KHIpfX1nZXQgX3JlZ2V4KCl7dmFyIHQ9dGhpcy5yZWdleDt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gocil7cmV0dXJuIG51bGx9fV9zZXRJc29sYXRvckljb24oKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGlvblN0YXRlLHI9b2cuZmlsdGVyKG9nLnZhbHVlcyh0KSkubGVuZ3RoLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCIuaXNvbGF0b3IiKSk7bi5mb3JFYWNoKGZ1bmN0aW9uKG8pe3I9PT0xJiZ0W28ubmFtZV0/by5pY29uPSJyYWRpby1idXR0b24tY2hlY2tlZCI6by5pY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pfWNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXgodCxyKXtsZXQgbj10aGlzLl9yZWdleDtyZXR1cm4gbj90aGlzLm5hbWVzLmZpbHRlcihpPT5uLnRlc3QoaSkpOnRoaXMubmFtZXN9Y29tcHV0ZU91dFNlbGVjdGVkKHQscil7dmFyIG49dGhpcy5zZWxlY3Rpb25TdGF0ZSxpPXRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdCxvPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4Lmxlbmd0aDw9aTtyZXR1cm4gdGhpcy5uYW1lc01hdGNoaW5nUmVnZXguZmlsdGVyKGE9Pm5bYV09PW51bGw/bzpuW2FdKX1zeW5jaHJvbml6ZUNvbG9ycyh0KXt2YXIgaSxvLGEsczt0aGlzLl9zZXRJc29sYXRvckljb24oKSwoKG89KGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpKSE9bnVsbD9vOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjpjLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmN9KX0pLCgocz0oYT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKSE9bnVsbD9zOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC5zdHlsZS5jb2xvcj1jfSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlU3R5bGVzKCl9KX1faXNvbGF0ZU5hbWUodCl7dmFyIHI9dC50YXJnZXQubmFtZSxuPXt9O3RoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihpKXtuW2ldPWk9PXJ9KSx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2NoZWNrYm94Q2hhbmdlKHQpe3ZhciByPXQudGFyZ2V0O2xldCBuPW9nLmNsb25lKHRoaXMuc2VsZWN0aW9uU3RhdGUpO25bci5uYW1lXT1yLmNoZWNrZWQsdGhpcy5zZWxlY3Rpb25TdGF0ZT1ufV9pc0NoZWNrZWQodCxyKXtyZXR1cm4gdGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKHQpIT0tMX10b2dnbGVBbGwoKXtsZXQgdD10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKG49PnRoaXMub3V0U2VsZWN0ZWQuaW5jbHVkZXMobikpLHI9e307dGhpcy5uYW1lcy5mb3JFYWNoKG49PntyW25dPSF0fSksdGhpcy5zZWxlY3Rpb25TdGF0ZT1yfX07b2wudGVtcGxhdGU9UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icnVuLWNvbG9yLXN0eWxlIj48L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dAogICAgICBpZD0ibmFtZXMtcmVnZXgiCiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJXcml0ZSBhIHJlZ2V4IHRvIGZpbHRlciBydW5zIgogICAgICB2YWx1ZT0iW1tyZWdleF1dIgogICAgICBvbi1iaW5kLXZhbHVlLWNoYW5nZWQ9Il9kZWJvdW5jZWRSZWdleENoYW5nZSIKICAgID48L3BhcGVyLWlucHV0PgogICAgPGRpdiBpZD0ib3V0ZXItY29udGFpbmVyIiBjbGFzcz0ic2Nyb2xsYmFyIj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbbmFtZXNNYXRjaGluZ1JlZ2V4XV0iCiAgICAgICAgb24tZG9tLWNoYW5nZT0ic3luY2hyb25pemVDb2xvcnMiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbX2lzQ2hlY2tlZChpdGVtLCBzZWxlY3Rpb25TdGF0ZS4qKV1dIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIgogICAgICAgICAgICA+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iaWNvbi1jb250YWluZXIgaXNvbGF0b3ItY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgaWNvbj0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCIKICAgICAgICAgICAgICBjbGFzcz0iaXNvbGF0b3IgdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIG9uLXRhcD0iX2lzb2xhdGVOYW1lIgogICAgICAgICAgICAgIG5hbWU9IltbaXRlbV1dIgogICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBjb250YWluOiBjb250ZW50OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubmFtZS1yb3cgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxvbC5wcm90b3R5cGUsIm5hbWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG9sLnByb3RvdHlwZSwicmVnZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxjb21wdXRlZDoiY29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleChuYW1lcy4qLCBfcmVnZXgpIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwibmFtZXNNYXRjaGluZ1JlZ2V4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvbC5wcm90b3R5cGUsInNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwLGNvbXB1dGVkOiJjb21wdXRlT3V0U2VsZWN0ZWQobmFtZXNNYXRjaGluZ1JlZ2V4LiosIHNlbGVjdGlvblN0YXRlLiopIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwib3V0U2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sb2wucHJvdG90eXBlLCJtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIix2b2lkIDApO0UoW1J0KCJyZWdleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG9sLnByb3RvdHlwZSwiX3JlZ2V4IixudWxsKTtFKFtCdCgic2VsZWN0aW9uU3RhdGUiLCJuYW1lcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sb2wucHJvdG90eXBlLCJfc2V0SXNvbGF0b3JJY29uIixudWxsKTtvbD1FKFt5dCgidGYtbXVsdGktY2hlY2tib3giKV0sb2wpO3ZhciBhMj1jbGFzcyBleHRlbmRzIG10e2dldCBfcGFydHMoKXt2YXIgdD10aGlzLnZhbHVlLHI9dGhpcy5kZWxpbWl0ZXJQYXR0ZXJuO2xldCBuPVtdO2Zvcig7Oyl7bGV0IGk9bmV3IFJlZ0V4cChyLCJnIik7aWYoaS50ZXN0KHQpLGkubGFzdEluZGV4PT09MCl7bi5wdXNoKHQpO2JyZWFrfWVsc2Ugbi5wdXNoKHQuc2xpY2UoMCxpLmxhc3RJbmRleCkpLHQ9dC5zbGljZShpLmxhc3RJbmRleCl9cmV0dXJuIG59fTthMi50ZW1wbGF0ZT1RYAogICAgPCEtLQogICAgICBUaGlzIHVnbHkgZm9ybWF0dGluZyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHNwYWNlcyBmcm9tIHNsaXBwaW5nCiAgICAgIGludG8gdGhlIEhUTUwuCiAgICAtLT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3BhcnRzXV0iIGFzPSJwYXJ0IgogICAgICA+W1twYXJ0XV08d2JyCiAgICAvPjwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhMi5wcm90b3R5cGUsInZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGEyLnByb3RvdHlwZSwiZGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKTtFKFtSdCgidmFsdWUiLCJkZWxpbWl0ZXJQYXR0ZXJuIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhMi5wcm90b3R5cGUsIl9wYXJ0cyIsbnVsbCk7YTI9RShbeXQoInRmLXdici1zdHJpbmciKV0sYTIpO3ZhciBtYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ydW5TZWxlY3Rpb25TdGF0ZT1PVygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KS5jYWxsKHRoaXMpLHRoaXMucmVnZXhJbnB1dD15XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pLmNhbGwodGhpcyksdGhpcy5fZGF0YUxvY2F0aW9uQ2xpcExlbmd0aD0yNTAsdGhpcy5fZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybj0iWy89XywtXSIsdGhpcy5jb2xvcmluZz17Z2V0Q29sb3I6Zm59LHRoaXMuX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU9elcoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksdGhpcy5fcmVnZXhPYnNlcnZlcj12XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pfWF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj13cC5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJydW5zIix3cC5nZXRSdW5zKCkpfSksdGhpcy5zZXQoInJ1bnMiLHdwLmdldFJ1bnMoKSksdGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1pYi5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX0pLHRoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX1kZXRhY2hlZCgpe3dwLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fcnVuU3RvcmVMaXN0ZW5lciksaWIucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9lbnZTdG9yZUxpc3RlbmVyKX1fdG9nZ2xlQWxsKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9Z2V0IF9jbGlwcGVkRGF0YUxvY2F0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhTG9jYXRpb24scj10aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoO2lmKHQhPT12b2lkIDApcmV0dXJuIHQubGVuZ3RoPnI/dC5zdWJzdHJpbmcoMCxyKTp0fV9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLiQkKCIjZGF0YS1sb2NhdGlvbi1kaWFsb2ciKS5vcGVuKCl9X3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24odCxyKXtyZXR1cm4gdCYmdC5sZW5ndGg+cn19O21jLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3A9IiIgaWQ9ImRhdGEtbG9jYXRpb24tZGlhbG9nIj4KICAgICAgPGgyPkRhdGEgTG9jYXRpb248L2gyPgogICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIgogICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgID4KICAgICAgPC90Zi13YnItc3RyaW5nCiAgICA+PC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3gKICAgICAgaWQ9Im11bHRpQ2hlY2tib3giCiAgICAgIG5hbWVzPSJbW3J1bnNdXSIKICAgICAgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iCiAgICAgIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIKICAgICAgcmVnZXg9Int7cmVnZXhJbnB1dH19IgogICAgICBjb2xvcmluZz0iW1tjb2xvcmluZ11dIgogICAgPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgICAgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIKICAgICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgICAgPjwvdGYtd2JyLXN0cmluZwogICAgICAgID48IS0tCiAgICAgICAgICBXZSB1c2UgSFRNTCBjb21tZW50cyB0byByZW1vdmUgc3BhY2VzIGJlZm9yZSB0aGUgZWxsaXBzaXMuCiAgICAgICAgLS0+PHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSIKICAgICAgICAgID48IS0tCiAgICAgICAgICAtLT48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgIHRmLXdici1zdHJpbmcgewogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgdGYtbXVsdGktY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgICN0b29sdGlwLWhlbHAgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQogICAgICBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CiAgICAgICNkYXRhLWxvY2F0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW46IDVweCAwIDAgMDsKICAgICAgICBtYXgtd2lkdGg6IDI4OHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdG9yZVJ1blNlbGVjdGlvblN0YXRlIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxtYy5wcm90b3R5cGUsInJ1blNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfcmVnZXhPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJyZWdleElucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbWMucHJvdG90eXBlLCJzZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG1jLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJkYXRhTG9jYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbWMucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsIl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG1jLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbUnQoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbWMucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCk7bWM9RShbeXQoInRmLXJ1bnMtc2VsZWN0b3IiKV0sbWMpO3ZhciBhbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQ9MH1jYW5jZWxsYWJsZSh0KXtsZXQgcj10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT57bGV0IGk9dGhpcy5jYW5jZWxsYXRpb25Db3VudCE9PXI7cmV0dXJuIHQoe3ZhbHVlOm4sY2FuY2VsbGVkOml9KX19Y2FuY2VsQWxsKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudCsrfX07dmFyIEg1PWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmh0bWw9IiJ9Z2V0IHNhbml0aXplZEh0bWwoKXtyZXR1cm4gdGhpcy5odG1sfWF0dGFjaGVkKCl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5tYXJrZG93biwhMCl9KX19O0g1LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1tzYW5pdGl6ZWRIdG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBcYDxwPlxgIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEJ5IHRhcmdldGluZyBvbmx5IHRoZSB0b3AtbGV2ZWwsIGV4dHJlbWFsIGVsZW1lbnRzLCB3ZSBwcmVzZXJ2ZSBhbnkKICAgICAgICogYWN0dWFsIHBhcmFncmFwaCBicmVha3MgYW5kIG9ubHkgY2hhbmdlIHRoZSBwYWRkaW5nIGFnYWluc3QgdGhlCiAgICAgICAqIGNvbXBvbmVudCBlZGdlcy4KICAgICAgICovCiAgICAgICNtYXJrZG93biA+IHA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDAuM2VtOwogICAgICB9CiAgICAgICNtYXJrZG93biA+IHA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4zZW07CiAgICAgIH0KCiAgICAgIC8qIFBsZWFzYW50IHN0eWxlcyBmb3IgTWFya2Rvd24gdGFibGVzLiAqLwogICAgICAjbWFya2Rvd24gdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCwKICAgICAgI21hcmtkb3duIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNkZmUyZTUpOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyLCAjYzZjYmQxKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEg1LnByb3RvdHlwZSwiaHRtbCIsdm9pZCAwKTtFKFtSdCgiaHRtbCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEg1LnByb3RvdHlwZSwic2FuaXRpemVkSHRtbCIsbnVsbCk7SDU9RShbeXQoInRmLW1hcmtkb3duLXZpZXciKV0sSDUpO19zKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICBmaWdjYXB0aW9uIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAuaGVhZGluZy1yb3cgewogICAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLyoqIFBpZWNlIG9mIHRleHQgaW4gdGhlIGZpZ3VyZSBjYXB0aW9uLiAqLwogICAgLmhlYWRpbmctbGFiZWwgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CgogICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqLwogICAgLmhlYWRpbmctcmlnaHQgewogICAgICBmbGV4LWdyb3c6IDA7CiAgICB9CiAgYH0pO2Z1bmN0aW9uIHMyKGUpe3JldHVybiBlP2UudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn1mdW5jdGlvbiB0TXQoZSl7bGV0IHQ9cDVlKGUpO3JldHVybiB0P01hdGgucm91bmQoKHRbMF0qMjk5K3RbMV0qNTg3K3RbMl0qMTE0KS8xZTMpPjEyNT8iaW5oZXJpdCI6IiNlZWUiOiJpbmhlcml0In1mdW5jdGlvbiBwNWUoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9ZS5tYXRjaCgvXiMoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkkLyk7aWYoIXQpcmV0dXJuIG51bGw7aWYoZS5sZW5ndGg9PTQpZm9yKHZhciByPTE7cjw9MztyKyspdFtyXT10W3JdK3Rbcl07cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX12YXIgZ2M9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIHRNdCh0KX1nZXQgX25hbWVMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gdHx8cnx8IiJ9Z2V0IF90YWdMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gciYmciE9PXQ/cjoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7bGV0IHI9dGhpcy4kLmRlc2NyaXB0aW9uRGlhbG9nO3IucG9zaXRpb25UYXJnZXQ9dC50YXJnZXQsci50b2dnbGUoKX19O2djLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGdjLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ2MucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnYy5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKTtFKFtSdCgiZGlzcGxheU5hbWUiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxnYy5wcm90b3R5cGUsIl9uYW1lTGFiZWwiLG51bGwpO0UoW1J0KCJkaXNwbGF5TmFtZSIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGdjLnByb3RvdHlwZSwiX3RhZ0xhYmVsIixudWxsKTtnYz1FKFt5dCgidGYtY2FyZC1oZWFkaW5nIildLGdjKTt2YXIgRmk9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9hdHRhY2hlZD0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIGZuKHQpfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfbWF4U3RlcEluZGV4KCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuIHQubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXX1nZXQgX3NhbXBsZVRleHQoKXt2YXIgdD10aGlzLnNhbXBsZTtyZXR1cm5gJHt0KzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3ZhciB0PXRoaXMudG90YWxTYW1wbGVzO3JldHVybiB0PjF9YXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuX2F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtsZXQgcj1fZSgpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi9hdWRpbyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6U3RyaW5nKHRoaXMuc2FtcGxlKX0pKSxuPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9aS52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGEpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixhLmxlbmd0aC0xKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9jcmVhdGVTdGVwRGF0dW0odCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh0LnF1ZXJ5KTtyLmFwcGVuZCgidHMiLFN0cmluZyh0LndhbGxfdGltZSkpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIscik7cmV0dXJue3dhbGxfdGltZTpzMihuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07RmkudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbdG90YWxTYW1wbGVzXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzdGVwIDxzdHJvbmc+W1tfY3VycmVudERhdHVtLnN0ZXBdXTwvc3Ryb25nPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgICAgW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzPSIiCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgPGF1ZGlvCiAgICAgICAgY29udHJvbHM9IiIKICAgICAgICBzcmMkPSJbW19jdXJyZW50RGF0dW0udXJsXV0iCiAgICAgICAgdHlwZSQ9IltbX2N1cnJlbnREYXR1bS5jb250ZW50VHlwZV1dIgogICAgICA+PC9hdWRpbz4KICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tfY3VycmVudERhdHVtLmxhYmVsXV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYWluLWF1ZGlvLWNvbnRhaW5lciI+PC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3I6ICM0MjQyNDI7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsgLyogc28gdGhlIHNsaWRlciBrbm9iIGRvZXNuJ3QgYnV0dCBvdXQgKi8KICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJ0b3RhbFNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRmkucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEZpLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxGaS5wcm90b3R5cGUsIl9tZXRhZGF0YUNhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRmkucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2N1cnJlbnREYXR1bSIsbnVsbCk7RShbUnQoInNhbXBsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpO0UoW1J0KCJ0b3RhbFNhbXBsZXMiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxGaS5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ0NoYW5nZSIsbnVsbCk7Rmk9RShbeXQoInRmLWF1ZGlvLWxvYWRlciIpXSxGaSk7dmFyICRoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihmeS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49ZnkubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpfSl9X3JlbG9hZEF1ZGlvKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1hdWRpby1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWZ5Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBmeS5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSx0b3RhbFNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTskaC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGF1ZGlvIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1hdWRpby1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkaC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJGgucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLCRoLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLCRoLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLCRoLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpOyRoPUUoW3l0KCJ0Zi1hdWRpby1kYXNoYm9hcmQiKV0sJGgpO3ZhciBWNT1jbGFzcyBleHRlbmRzIEd0KG10KXthdHRhY2hlZCgpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0LCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSl9X3NlbGVjdFRhcmdldCh0KXt0aGlzLnNlbGVjdGVkSWQ9dC5jdXJyZW50VGFyZ2V0LmlkfV9zZWxlY3RlZElkQ2hhbmdlZCgpe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiIyIrdGhpcy5zZWxlY3RlZElkKTshdHx8KHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKX0pLHQuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKSl9fTtWNS50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0id3JhcCI+CiAgICAgIDxoMz5bW25hbWVdXTwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PHNsb3Q+PC9zbG90PjwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVjUucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlbGVjdGVkSWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWNS5wcm90b3R5cGUsInNlbGVjdGVkSWQiLHZvaWQgMCk7VjU9RShbeXQoInRmLW9wdGlvbi1zZWxlY3RvciIpXSxWNSk7ZnVuY3Rpb24gb1IoZSx0KXtsZXQgcixuPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goYT0+e2xldCBzPWVbYV07cj09PXZvaWQgMCYmKHI9cy5kaXNwbGF5TmFtZSksciE9PXMuZGlzcGxheU5hbWUmJihyPW51bGwpLG5bcy5kZXNjcmlwdGlvbl09PT12b2lkIDAmJihuW3MuZGVzY3JpcHRpb25dPVtdKSxuW3MuZGVzY3JpcHRpb25dLnB1c2goYSl9KTtsZXQgaT1yIT1udWxsP3I6dCxvPSgoKT0+e2xldCBhPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PTA/IiI6YS5sZW5ndGg9PT0xP2FbMF06YDxwPjxzdHJvbmc+TXVsdGlwbGUgZGVzY3JpcHRpb25zOjwvc3Ryb25nPjwvcD48dWw+JHthLm1hcChjPT57bGV0IHU9bltjXS5tYXAocD0+YDxjb2RlPiR7cC5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8mL2csIiZhbXA7Iil9PC9jb2RlPmApLGg9dS5sZW5ndGg+Mj91LnNsaWNlKDAsdS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIit1W3UubGVuZ3RoLTFdOnUuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAke2Q1ZSh1Lmxlbmd0aCwicnVuIiwicnVucyIpfSAke2h9OjwvcD4ke2N9PC9saT5gfSkuam9pbigiIil9PC91bD5gfSkoKTtyZXR1cm57ZGlzcGxheU5hbWU6aSxkZXNjcmlwdGlvbjpvfX1mdW5jdGlvbiBkNWUoZSx0LHIpe3JldHVybiBlPT09MT90OnJ9dmFyIHJNdD1FZShPZSgpLDEpO3ZhciBIcD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLndlaWdodD0uNix0aGlzLl91cGRhdGVXZWlnaHQ9ck10LmRlYm91bmNlKGZ1bmN0aW9uKHQpe3RoaXMud2VpZ2h0PXR9LDI1MCl9X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCgpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpLHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfV9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkKCl7K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDwwP3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMCI6K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD4xJiYodGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIxIik7dmFyIHQ9K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDtpc05hTih0KXx8dGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0KX19O0hwLnRlbXBsYXRlPVFgCiAgICA8aDMgY2xhc3M9InRpdGxlIj5TbW9vdGhpbmc8L2gzPgogICAgPGRpdiBjbGFzcz0ic21vb3RoaW5nLWJsb2NrIj4KICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgIGlkPSJzbGlkZXIiCiAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcn19IgogICAgICAgIG1heD0iW1ttYXhdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgcGluCiAgICAgICAgc3RlcD0iW1tzdGVwXV0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHZhbHVlPSJ7e3dlaWdodH19IgogICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJpbnB1dCIKICAgICAgICBsYWJlbD0id2VpZ2h0IgogICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgdmFsdWU9Int7X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dH19IgogICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICA+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAudGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnNtb290aGluZy1ibG9jayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJzdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWF4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWluIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIcC5wcm90b3R5cGUsIndlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlckNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhwLnByb3RvdHlwZSwiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dCIsdm9pZCAwKTtIcD1FKFt5dCgidGYtc21vb3RoaW5nLWlucHV0IildLEhwKTt2YXIgWW89RWUoT2UoKSwxKTtmdW5jdGlvbiBNaShlLHQpe2xldCByPU9iamVjdC5rZXlzKHQpLnNvcnQoKS5maWx0ZXIoYT0+dFthXSE9PXZvaWQgMCk7aWYoIXIubGVuZ3RoKXJldHVybiBlO2xldCBuPWUuaW5kZXhPZigiPyIpIT09LTE/IiYiOiI/IixvPUFycmF5KCkuY29uY2F0KC4uLnIubWFwKGE9PntsZXQgcz10W2FdO3JldHVybihBcnJheS5pc0FycmF5KHMpP3M6W3NdKS5tYXAoYz0+YCR7YX09JHttNWUoYyl9YCl9KSkuam9pbigiJiIpO3JldHVybiBlK24rb31mdW5jdGlvbiBtNWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKX12YXIgJEt0PUVlKE9lKCksMSksWlduPUVlKHdsKCksMSk7dmFyIERLdD1FZShPZSgpLDEpO3ZhciB4NDsoZnVuY3Rpb24oZSl7ZVtlLkxPQURJTkc9MF09IkxPQURJTkciLGVbZS5MT0FERUQ9MV09IkxPQURFRCJ9KSh4NHx8KHg0PXt9KSk7ZnVuY3Rpb24ga1MoZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sb2FkS2V5PSIiLHRoaXMuZGF0YVRvTG9hZD1bXSx0aGlzLmdldERhdGFMb2FkTmFtZT1yPT5TdHJpbmcociksdGhpcy5kYXRhTG9hZGluZz0hMSx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMSx0aGlzLl9pc0Nvbm5lY3RlZD0hMSx0aGlzLl9kYXRhTG9hZFN0YXRlPW5ldyBNYXAsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwsdGhpcy5fbG9hZERhdGE9REt0LnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe3RoaXMuX2xvYWREYXRhQXN5bmMhPW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXt0aGlzLl9sb2FkRGF0YUFzeW5jIT1udWxsJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7IXRoaXMuYWN0aXZlfHwodGhpcy5fbG9hZERhdGFBc3luYyE9PW51bGwmJmNsZWFyVGltZW91dCh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPXNldFRpbWVvdXQodGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKHI9PntpZihyLmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtsZXQgbj10aGlzLmRhdGFUb0xvYWQuZmlsdGVyKGE9PntsZXQgcz10aGlzLmdldERhdGFMb2FkTmFtZShhKTtyZXR1cm4hdGhpcy5fZGF0YUxvYWRTdGF0ZS5oYXMocyl9KTtmb3IobGV0IGEgb2Ygbil7bGV0IHM9dGhpcy5nZXREYXRhTG9hZE5hbWUoYSk7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQocyx4NC5MT0FESU5HKX1sZXQgaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKGEuY2FuY2VsbGVkKXJldHVybjtsZXR7aXRlbTpzLGRhdGE6bH09YS52YWx1ZSxjPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHMpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGMseDQuTE9BREVEKSx0aGlzLmxvYWREYXRhQ2FsbGJhY2sodGhpcyxzLGwpfSksbz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKCFhLmNhbmNlbGxlZCl7bGV0IGw9YS52YWx1ZSxjPW5ldyBTZXQobi5tYXAoaD0+dGhpcy5nZXREYXRhTG9hZE5hbWUoaCkpKTt0aGlzLmRhdGFUb0xvYWQuc29tZShoPT5jLmhhcyh0aGlzLmdldERhdGFMb2FkTmFtZShoKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKHg0LkxPQURJTkcpfHwodGhpcy5kYXRhTG9hZGluZz0hMSl9KTt0aGlzLnJlcXVlc3REYXRhKG4saSwoKT0+byh2b2lkIDApKX0pKSl9fX12YXIgYnFlPUVlKE9lKCksMSksV289RWUod2woKSwxKSxSUz1be2NoYXJhY3RlcjoiXHUyNUZDIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0se2NoYXJhY3RlcjoiXHUyNUM2IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6Ilx1MjVCMiIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3RlcjoiXHUyNjA1IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnN0YXJ9LHtjaGFyYWN0ZXI6Ilx1MjcxQSIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dLEVkOyhmdW5jdGlvbihlKXtlLlNURVA9InN0ZXAiLGUuUkVMQVRJVkU9InJlbGF0aXZlIixlLldBTExfVElNRT0id2FsbF90aW1lIn0pKEVkfHwoRWQ9e30pKTt2YXIgZTA9NCx3cWU9NCxtQj0zLGdCPTIwLF9CPTQsT0t0PTY7ZnVuY3Rpb24gV3UoZSl7cmV0dXJuIHQ9PntsZXQgcj1NYXRoLmFicyh0KTtyPDFlLTE1JiYocj0wKTtsZXQgbjtyZXR1cm4gcj49MWU0P249eG4oIi4iK2UrIn5lIik6cj4wJiZyPC4wMT9uPXhuKCIuIitlKyJ+ZSIpOm49eG4oIi4iK2UrIn5nIiksbih0KX19dmFyIGI0PXhuKGAuJHt3cWV9fnNgKTtmdW5jdGlvbiBYYXQoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtlLnRpY2tHZW5lcmF0b3IoV28uU2NhbGVzLlRpY2tHZW5lcmF0b3JzLmludGVnZXJUaWNrR2VuZXJhdG9yKCkpO2xldCB0PW5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIik7cmV0dXJuIHQuZm9ybWF0dGVyKGI0KSx7c2NhbGU6ZSxheGlzOnQsYWNjZXNzb3I6cj0+ci5zdGVwfX12YXIgeUI9V28uRm9ybWF0dGVycy50aW1lKCIlYSAlYiAlZSwgJUg6JU06JVMiKTtmdW5jdGlvbiBTcWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOmUsYXhpczpuZXcgV28uQXhlcy5UaW1lKGUsImJvdHRvbSIpLGFjY2Vzc29yOnQ9PnQud2FsbF90aW1lfX12YXIgcjA9KGUsdCxyKT0+e2lmKGUucmVsYXRpdmUhPW51bGwpcmV0dXJuIGUucmVsYXRpdmU7bGV0IG49ci5kYXRhKCksaT1uLmxlbmd0aD4wPytuWzBdLndhbGxfdGltZTowO3JldHVybigrZS53YWxsX3RpbWUtaSkvKDYwKjYwKjFlMyl9LHZCPWU9PntsZXQgdD0iIixyPU1hdGguZmxvb3IoZS8yNCk7ZS09cioyNCxyJiYodCs9cisiZCAiKTtsZXQgbj1NYXRoLmZsb29yKGUpO2UtPW4sZSo9NjAsKG58fHIpJiYodCs9bisiaCAiKTtsZXQgaT1NYXRoLmZsb29yKGUpO2UtPWksZSo9NjAsKGl8fG58fHIpJiYodCs9aSsibSAiKTtsZXQgbz1NYXRoLmZsb29yKGUpO3JldHVybiB0K28rInMifTtmdW5jdGlvbiBNcWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6ZSxheGlzOm5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIiksYWNjZXNzb3I6cjB9fWZ1bmN0aW9uIHhCKGUpe3N3aXRjaChlKXtjYXNlIEVkLlNURVA6cmV0dXJuIFhhdCgpO2Nhc2UgRWQuV0FMTF9USU1FOnJldHVybiBTcWUoKTtjYXNlIEVkLlJFTEFUSVZFOnJldHVybiBNcWUoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB4VHlwZTogIitlKX19dmFyIHpzPUVlKE9lKCksMSksTW49RWUod2woKSwxKTt2YXIgdmE9RWUod2woKSwxKTtmdW5jdGlvbiBFcWUoZSl7bGV0IHQ9W10scj1lO2Zvcig7ciYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZih0LnB1c2gociksci5hc3NpZ25lZFNsb3Qpcj1yLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHIucGFyZW50RWxlbWVudClyPXIucGFyZW50RWxlbWVudDtlbHNle2xldCBuPXIucGFyZW50Tm9kZTtuIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9yPW4uaG9zdDpyPW4hPT1yP246bnVsbH1yZXR1cm4gdH12YXIgVHFlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gQ3FlKGUpe2xldCB0PUVxZShlKSxyPVRxZSxuPW51bGw7Zm9yKGxldCBpIG9mIHQpe2xldCBvPXZhLlV0aWxzLkRPTS5nZXRFbGVtZW50VHJhbnNmb3JtKGkpO2lmKG8hPW51bGwpe2xldCBsPWkuY2xpZW50V2lkdGgvMixjPWkuY2xpZW50SGVpZ2h0LzI7cj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2wsY10pLHI9dmEuVXRpbHMuTWF0aC5tdWx0aXBseU1hdHJpeChyLHZhLlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KG8pKSxyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbLWwsLWNdKX1sZXQgYT1pLnNjcm9sbExlZnQscz1pLnNjcm9sbFRvcDsobj09PW51bGx8fGk9PT1uKSYmKGEtPWkub2Zmc2V0TGVmdCtpLmNsaWVudExlZnQscy09aS5vZmZzZXRUb3AraS5jbGllbnRUb3Asbj1pLm9mZnNldFBhcmVudCkscj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2Esc10pfXJldHVybiByfXZhciB3Qj1jbGFzcyBleHRlbmRzIHZhLlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHQscil7bGV0IG49e3g6dCx5OnJ9LGk9Q3FlKHRoaXMuX3Jvb3RFbGVtZW50KTtyZXR1cm4gaT09bnVsbD9uOnZhLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0oaSxuKX19LFV2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuTW91c2V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW1V2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBVdih0KSxyW1V2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19LHF2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW3F2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBxdih0KSxyW3F2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19O3ZhLkludGVyYWN0aW9uLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWUueCYmMDw9ZS55JiZlLng8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZlLnk8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKX07dmFyIFNCPWNsYXNzIGV4dGVuZHMgdmEuSW50ZXJhY3Rpb25zLlBvaW50ZXJ7X2FuY2hvcih0KXtsZXQgcj10aGlzO3IuX2lzQW5jaG9yZWQ9ITAsci5fbW91c2VEaXNwYXRjaGVyPVV2LmdldERpc3BhdGNoZXIoci5fY29tcG9uZW50QXR0YWNoZWRUbyksci5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHIuX21vdXNlTW92ZUNhbGxiYWNrKSxyLl90b3VjaERpc3BhdGNoZXI9cXYuZ2V0RGlzcGF0Y2hlcihyLl9jb21wb25lbnRBdHRhY2hlZFRvKSxyLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHIuX3RvdWNoU3RhcnRDYWxsYmFjayl9fTt2YXIgekt0PUVlKE9lKCksMSk7dmFyIEd2OyhmdW5jdGlvbihlKXtlLkFVVE89ImF1dG8iLGUuQk9UVE9NPSJib3R0b20iLGUuUklHSFQ9InJpZ2h0In0pKEd2fHwoR3Y9e30pKTt2YXIgQXFlPXtib3hTaGFkb3c6IjAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIC4zKSIsb3BhY2l0eTowLHBvc2l0aW9uOiJmaXhlZCIsd2lsbENoYW5nZToidHJhbnNmb3JtIix6SW5kZXg6NX0sdzQ9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucG9zaXRpb249R3YuQVVUTyx0aGlzLm1pbkRpc3RGcm9tRWRnZT0xNSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9cmVhZHkoKXt0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9YXR0YWNoZWQoKXt0aGlzLl90dW5uZWw9dGhpcy5fY3JlYXRlVHVubmVsKCksdGhpcy5faGlkZU9uQmx1cj0oKT0+e2RvY3VtZW50LmhpZGRlbiYmdGhpcy5oaWRlKCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1kZXRhY2hlZCgpe3RoaXMuaGlkZSgpLHRoaXMuX3JlbW92ZVR1bm5lbCh0aGlzLl90dW5uZWwpLHRoaXMuX3R1bm5lbD1udWxsLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX3R1bm5lbC5zaGFkb3dSb290fWhpZGUoKXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fdHVubmVsLnN0eWxlLm9wYWNpdHk9MH11cGRhdGVBbmRQb3NpdGlvbih0KXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9yYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+eyF0aGlzLmlzQXR0YWNoZWR8fHRoaXMuX3JlcG9zaXRpb25JbXBsKHQpfSl9X3JlcG9zaXRpb25JbXBsKHQpe2xldCByPXRoaXMuX3R1bm5lbCxuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89d2luZG93LmlubmVySGVpZ2h0LGE9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxzPW4udG9wLGw9cytuLmhlaWdodCxjPWkuaGVpZ2h0K2dCLHU9bnVsbCxoPU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksZj1udWxsLHA9czt0aGlzLnBvc2l0aW9uPT1Hdi5SSUdIVD9oPW4ucmlnaHQ6KHA9bCtnQixhPGgraS53aWR0aCt0aGlzLm1pbkRpc3RGcm9tRWRnZSYmKGg9bnVsbCxmPXRoaXMubWluRGlzdEZyb21FZGdlKSksdGhpcy5wb3NpdGlvbj09R3YuQVVUTyYmbi50b3AtYz4wJiZvPG4udG9wK24uaGVpZ2h0K2MmJihwPW51bGwsdT1vLXMrZ0IpO2xldCBkPXtjb250YWluOiJjb250ZW50IixvcGFjaXR5OjEsbGVmdDpoP2Ake2h9cHhgOm51bGwscmlnaHQ6Zj9gJHtmfXB4YDpudWxsLHRvcDpwP2Ake3B9cHhgOm51bGwsYm90dG9tOnU/YCR7dX1weGA6bnVsbH07ekt0LmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxkKXx8KE9iamVjdC5hc3NpZ24oci5zdHlsZSxkKSx0aGlzLl9zdHlsZUNhY2hlPWQpfV9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LnN0eWxlLEFxZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fV9yZW1vdmVUdW5uZWwodCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19O0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHc0LnByb3RvdHlwZSwiY29udGVudENvbXBvbmVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdzQucHJvdG90eXBlLCJwb3NpdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3NC5wcm90b3R5cGUsIm1pbkRpc3RGcm9tRWRnZSIsdm9pZCAwKTt3ND1FKFt5dCgidnotY2hhcnQtdG9vbHRpcCIpXSx3NCk7dmFyIE5TPUVlKHdsKCksMSk7dmFyIEhLdD0xZTQsVkt0PS4wMDEsVUt0PXhuKCIuMn5lIiksUHFlPXhuKCIuNH5yIiksRkt0PXhuKCIsfiIpO2Z1bmN0aW9uIEJLdChlKXtpZihlPT09MClyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PUhLdHx8dDxWS3Q/VUt0KGUpOlBxZShlKX12YXIgS2F0PXtmb3JtYXRUaWNrOkJLdCxmb3JtYXRTaG9ydDpCS3QsZm9ybWF0UmVhZGFibGUoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PUhLdHx8dDxWS3Q/VUt0KGUpOkZLdChlKX0sZm9ybWF0TG9uZzpGS3R9LGlXbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQodm9pZCAwLHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6NH0pO3ZhciBvV249eG4oIjAuM35zIiksYVduPXhuKCIsLjN+ZiIpO3ZhciBJcWU9MWUzLExxZT02MCpJcWUsa3FlPTYwKkxxZSxScWU9MjQqa3FlLHNXbj0zNjUqUnFlLGxXbj14bigiLjR+Iik7dmFyIE5xZT1ZYigpLnRpY2tGb3JtYXQoKSwkYXQscUt0PXtmb3JtYXRUaWNrKGUpe3JldHVybiBOcWUobmV3IERhdGUoZSkpfSxmb3JtYXRTaG9ydChlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSl9LGZvcm1hdFJlYWRhYmxlKGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZygkYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KX0sZm9ybWF0TG9uZyhlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTt2YXIgVGQ7KGZ1bmN0aW9uKGUpe2VbZS5MSU5FQVI9MF09IkxJTkVBUiIsZVtlLkxPRzEwPTFdPSJMT0cxMCIsZVtlLlRJTUU9Ml09IlRJTUUifSkoVGR8fChUZD17fSkpO2Z1bmN0aW9uIEdLdChlKXtzd2l0Y2goZSl7Y2FzZSBUZC5MSU5FQVI6cmV0dXJuIG5ldyBaYXQ7Y2FzZSBUZC5MT0cxMDpyZXR1cm4gbmV3IEphdDtjYXNlIFRkLlRJTUU6cmV0dXJuIG5ldyBRYXQ7ZGVmYXVsdDpsZXQgdD1lO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgRHFlPS4wNSxaYXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9S2F0fXRyYW5zZm9ybSh0LHIsbil7bGV0W2ksb109dCxhPW8taSxbcyxsXT1yLGM9bC1zO3JldHVybiBhPT09MD9zOmMvYSoobi1pKStzfWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LHIsbil9cmV2ZXJzZSh0LHIsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHIsdCxuKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYobjxyKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKG49PT1yKXJldHVybiByPT09MD9bLTEsMV06cjwwP1syKnIsMF06WzAsMipyXTtsZXQgaT1PbigpLG89KG4tcitOdW1iZXIuRVBTSUxPTikqRHFlLFthLHNdPWkuZG9tYWluKFtyLW8sbitvXSkubmljZSgpLmRvbWFpbigpO3JldHVyblthLHNdfXRpY2tzKHQscil7cmV0dXJuIE9uKCkuZG9tYWluKHQpLnRpY2tzKHIpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSmF0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUthdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxyLG4pe2lmKG48PTApcmV0dXJuIHJbMF07bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hO3JldHVybiBuPXRoaXMudHJhbnNmb3JtKG4pLGgvKHUrTnVtYmVyLkVQU0lMT04pKihuLWwpK2F9cmV2ZXJzZSh0LHIsbil7bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKG4tYSkrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYocj5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCBpPU1hdGgubWF4KHIsTnVtYmVyLk1JTl9WQUxVRSksbz1NYXRoLm1heChuLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBuPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLGkqLjUpLG8qMl19dGlja3ModCxyKXtsZXQgbj10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxpPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLG89Y2MoKS5kb21haW4oW24saV0pLnRpY2tzKHIpO3JldHVybiBvLmxlbmd0aD9vOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LFFhdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2NhbGU9WWIoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9cUt0fWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShyKShuKX1yZXZlcnNlKHQscixuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UocikuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXRoaXMuc2NhbGUuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bci5nZXRUaW1lKCksbi5nZXRUaW1lKCldfXRpY2tzKHQscil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnRpY2tzKHIpLm1hcChuPT5uLmdldFRpbWUoKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fTt2YXIgTUI9Y2xhc3MgZXh0ZW5kcyBOUy5TY2FsZXMuTGluZWFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2V0VmFsdWVQcm92aWRlckZvckRvbWFpbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj10LHRoaXN9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10O3JldHVybiBHS3QoVGQuTElORUFSKS5uaWNlRG9tYWluKFtuLGldKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KHQpe2xldCByPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKHIubGVuZ3RoIT09MCl7bGV0IGk9W05TLlV0aWxzLk1hdGgubWluKHIsblswXSksTlMuVXRpbHMuTWF0aC5tYXgocixuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKGkpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtsZXQgcj10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhyKX1leHRlbnRPZlZhbHVlcyh0KXtsZXQgcj10LmZpbHRlcihvPT5OUy5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIobykpLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IG89ci5zb3J0KChsLGMpPT5sLWMpLGE9c2EobywuMDUpLHM9c2EobywuOTUpO249ci5maWx0ZXIobD0+bD49YSYmbDw9cyl9bGV0IGk9YWEobik7cmV0dXJuIGlbMF09PW51bGx8fGlbMV09PW51bGw/W106aX1pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn19O3ZhciBDQj1FZSh3bCgpLDEpO3ZhciBXS3Q9RWUod2woKSwxKSxFQj1jbGFzcyBleHRlbmRzIFdLdC5RdWFudGl0YXRpdmVTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faWdub3JlT3V0bGllcj0hMX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7bGV0IHI9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMocil9fTt2YXIgVEI9TWF0aC5wb3coMiwtMTA3NCk7ZnVuY3Rpb24gUzQoZSl7cmV0dXJuIE1hdGgubG9nMTAoZSl9ZnVuY3Rpb24gdHN0KGUpe3JldHVybiBNYXRoLnBvdygxMCxlKX12YXIgQUI9Y2xhc3MgZXh0ZW5kcyBFQntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fZDNMb2dTY2FsZT1jYygpLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUodCl7cmV0dXJuIHQ8PTA/TmFOOnRoaXMuX2QzTG9nU2NhbGUodCl9aW52ZXJ0KHQpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydCh0KX1zY2FsZVRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfWludmVydGVkVHJhbnNmb3JtYXRpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9c2V0VHJhbnNmb3JtYXRpb25Eb21haW4odCl7dGhpcy5kb21haW4odCl9Z2V0VHJhbnNmb3JtYXRpb25FeHRlbnQoKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX1fZ2V0RG9tYWluKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59X3NldERvbWFpbih0KXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPXQ7bGV0W3Isbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heChUQixyKSxuXSl9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10LG89TWF0aC5tYXgoUzQoVEIpLFM0KG4pKSxhPVM0KGkpLHM9YS1vLGw9cz9zKnRoaXMucGFkUHJvcG9ydGlvbigpOjE7cmV0dXJuW3RzdChNYXRoLm1heChTNChUQiksby1sKSksdHN0KGErbCldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7bGV0IHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCksbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoci5sZW5ndGghPT0wKXtsZXQgaT1bQ0IuVXRpbHMuTWF0aC5taW4ocixuWzBdKSxDQi5VdGlscy5NYXRoLm1heChyLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4oaSl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe3JldHVybiBzdXBlci5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKS5tYXAobj0+bj4wP246VEIpfV9kZWZhdWx0RXh0ZW50KCl7cmV0dXJuWzEsMTBdfV9iYWNraW5nU2NhbGVEb21haW4odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZDNMb2dTY2FsZS5kb21haW4oKToodGhpcy5fZDNMb2dTY2FsZS5kb21haW4odCksdGhpcyl9X2dldFJhbmdlKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUucmFuZ2UoKX1fc2V0UmFuZ2UodCl7dGhpcy5fZDNMb2dTY2FsZS5yYW5nZSh0KX1kZWZhdWx0VGlja3MoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS50aWNrcygxKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXModCl7bGV0IHI9dC5maWx0ZXIobz0+Q0IuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZvPjApLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IGE9ci5tYXAoUzQpLnNvcnQoKGMsdSk9PmMtdSkscz1zYShhLC4wNSksbD1zYShhLC45NSk7bj1hLmZpbHRlcihjPT5jPj1zJiZjPD1sKS5tYXAodHN0KX1sZXQgaT1hYShuKTtyZXR1cm4gaVswXT09bnVsbHx8aVsxXT09bnVsbD9bXTppfX07dmFyIENkPUVlKHdsKCksMSk7dmFyIG4wPUVlKHdsKCksMSksUEI9Y2xhc3MgZXh0ZW5kcyBuMC5Db21wb25lbnRzLlNlbGVjdGlvbkJveExheWVye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMuZWFzZUZuPXhzLHRoaXMuX2FuaW1hdGlvblRpbWU9NzUwLHRoaXMueFNjYWxlKHQpLHRoaXMueVNjYWxlKHIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkRyYWcsdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkNsaWNrLHRoaXMuc2V0dXBDYWxsYmFja3MoKSx0aGlzLnVuem9vbU1ldGhvZD1uLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyl9KSx0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyl9KX1pbnRlcmFjdGlvblN0YXJ0KHQpe3RoaXMub25TdGFydD10fWludGVyYWN0aW9uRW5kKHQpe3RoaXMub25FbmQ9dH1kcmFnSW50ZXJhY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufXNldHVwQ2FsbGJhY2tzKCl7bGV0IHQ9ITE7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHI9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0OnJ9KSx0aGlzLm9uU3RhcnQoKX0pLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcoKHIsbik9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0aGlzLmJveFZpc2libGUoITApLHQ9ITB9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKChyLG4pPT57dGhpcy5ib3hWaXNpYmxlKCExKSx0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0P3RoaXMuem9vbSgpOnRoaXMub25FbmQoKSx0PSExfSksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5vbkRvdWJsZUNsaWNrKHRoaXMudW56b29tLmJpbmQodGhpcykpfWFuaW1hdGlvblRpbWUodCl7aWYodD09bnVsbClyZXR1cm4gdGhpcy5fYW5pbWF0aW9uVGltZTtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbmltYXRpb25UaW1lIGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbmltYXRpb25UaW1lPXQsdGhpc31lYXNlKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiZWFzZSBmdW5jdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm4odCgwKSE9PTB8fHQoMSkhPT0xKSYmbjAuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKT09MCAmJiBmKDEpPT0xLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKSx0aGlzLmVhc2VGbj10LHRoaXN9em9vbSgpe2xldCB0PXRoaXMueEV4dGVudCgpWzBdLnZhbHVlT2YoKSxyPXRoaXMueEV4dGVudCgpWzFdLnZhbHVlT2YoKSxuPXRoaXMueUV4dGVudCgpWzFdLnZhbHVlT2YoKSxpPXRoaXMueUV4dGVudCgpWzBdLnZhbHVlT2YoKTt0PT09cnx8bj09PWl8fHRoaXMuaW50ZXJwb2xhdGVab29tKHQscixuLGkpfXVuem9vbSgpe2xldCB0PXRoaXMueFNjYWxlKCk7dC5fZG9tYWluTWluPW51bGwsdC5fZG9tYWluTWF4PW51bGw7bGV0IHI9dC5fZ2V0RXh0ZW50KCk7dGhpcy54U2NhbGUoKS5kb21haW4ociksdGhpcy51bnpvb21NZXRob2QoKX1pc1pvb21pbmcodCl7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoIXQpLHRoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZW5hYmxlZCghdCl9aW50ZXJwb2xhdGVab29tKHQscixuLGkpe2xldCBvPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLGE9dGhpcy54U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCkscz10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxsPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLGM9dGhpcy5lYXNlRm4sdT0ocCxkLGcpPT56aShwLGQpKGMoZykpO3RoaXMuaXNab29taW5nKCEwKTtsZXQgaD1EYXRlLm5vdygpLGY9KCk9PntsZXQgZD1EYXRlLm5vdygpLWgsZz10aGlzLl9hbmltYXRpb25UaW1lPT09MD8xOk1hdGgubWluKDEsZC90aGlzLl9hbmltYXRpb25UaW1lKSxfPXUobyx0LGcpLHk9dShhLHIsZykseD11KHMsbixnKSxiPXUobCxpLGcpO3RoaXMueFNjYWxlKCkuZG9tYWluKFtfLHldKSx0aGlzLnlTY2FsZSgpLmRvbWFpbihbeCxiXSksZzwxP24wLlV0aWxzLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChmKToodGhpcy5vbkVuZCgpLHRoaXMuaXNab29taW5nKCExKSl9O2YoKX19O3ZhciB4YTsoZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09Ik5PTkUiLGVbZS5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsZVtlLlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoeGF8fCh4YT17fSkpO3ZhciB6Zj1jbGFzcyBleHRlbmRzIENkLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT14YS5OT05FLHRoaXMucGFuU3RhcnRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5FbmRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5ab29tPW5ldyBDZC5JbnRlcmFjdGlvbnMuUGFuWm9vbSh0LHIpLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihvPT56Zi5pc1BhbktleShvKSYmby5idXR0b249PT0wKSx0aGlzLnBhblpvb20ud2hlZWxGaWx0ZXIodGhpcy5jYW5TY3JvbGxab29tKSx0aGlzLmRyYWdab29tTGF5ZXI9bmV3IFBCKHQscixuKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIobz0+IXpmLmlzUGFuS2V5KG8pJiZvLmJ1dHRvbj09PTApLHRoaXMuYXBwZW5kKHRoaXMuZHJhZ1pvb21MYXllcik7bGV0IGk9dGhpcy5vbldoZWVsLmJpbmQodGhpcyk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1DZC5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGkpLHRoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLnBhblpvb20uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXImJih0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwoaSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwpfSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5QQU5OSU5HKX0pLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdFbmQoKCk9Pnt0aGlzLnN0YXRlPT14YS5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKHhhLk5PTkUpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5EUkFHX1pPT01JTkcpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PXhhLkRSQUdfWk9PTUlORyYmdGhpcy5zZXRTdGF0ZSh4YS5OT05FKX0pfW9uV2hlZWwodCxyKXtpZih0aGlzLmNhblNjcm9sbFpvb20ocikpcmV0dXJuO2xldCBuPXRoaXMuZWxlbWVudCgpO2lmKCFuLnNlbGVjdCgiLmhlbHAiKS5lbXB0eSgpKXJldHVybjtsZXQgaT1uLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiaGVscCIsITApO2kuYXBwZW5kKCJzcGFuIikudGV4dCgiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSxpLm9uKCJhbmltYXRpb25lbmQiLCgpPT52b2lkIGkucmVtb3ZlKCkpfXN0YXRpYyBpc1BhbktleSh0KXtyZXR1cm4gQm9vbGVhbih0LmFsdEtleSl8fEJvb2xlYW4odC5zaGlmdEtleSl9Y2FuU2Nyb2xsWm9vbSh0KXtyZXR1cm4gdC5hbHRLZXl9c2V0U3RhdGUodCl7aWYodGhpcy5zdGF0ZT09dClyZXR1cm47bGV0IHI9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXQsdGhpcy5yb290KCkucmVtb3ZlQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZShyKSksdGhpcy5yb290KCkuYWRkQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZSh0KSkscj09eGEuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCksdD09eGEuUEFOTklORyYmdGhpcy5wYW5TdGFydENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKX1zdGF0ZUNsYXNzTmFtZSh0KXtzd2l0Y2godCl7Y2FzZSB4YS5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIHhhLkRSQUdfWk9PTUlORzpyZXR1cm4iZHJhZy16b29taW5nIjtjYXNlIHhhLk5PTkU6ZGVmYXVsdDpyZXR1cm4iIn19b25QYW5TdGFydCh0KXt0aGlzLnBhblN0YXJ0Q2FsbGJhY2suYWRkKHQpfW9uUGFuRW5kKHQpe3RoaXMucGFuRW5kQ2FsbGJhY2suYWRkKHQpfW9uU2Nyb2xsWm9vbSh0KXt0aGlzLnBhblpvb20ub25ab29tRW5kKHQpfW9uRHJhZ1pvb21TdGFydCh0KXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25TdGFydCh0KX1vbkRyYWdab29tRW5kKHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvbkVuZCh0KX19O3ZhciBJQjsoZnVuY3Rpb24oZSl7ZVtlLlRFWFQ9MF09IlRFWFQiLGVbZS5ET009MV09IkRPTSJ9KShJQnx8KElCPXt9KSk7dmFyIEZmOyhmdW5jdGlvbihlKXtlLkxPRz0ibG9nIixlLkxJTkVBUj0ibGluZWFyIn0pKEZmfHwoRmY9e30pKTt2YXIgWUt0PTIwLERTPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCl7dGhpcy5kaXJ0eURhdGFzZXRzPW5ldyBTZXQsdGhpcy5zZXJpZXNOYW1lcz1bXSx0aGlzLm5hbWUyZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWksdGhpcy50b29sdGlwPW8sdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgTW4uRGF0YXNldCx0aGlzLm5hbkRhdGFzZXQ9bmV3IE1uLkRhdGFzZXQsdGhpcy55VmFsdWVBY2Nlc3Nvcj1yLHRoaXMuc3ltYm9sRnVuY3Rpb249dSx0aGlzLl9kZWZhdWx0WFJhbmdlPWwsdGhpcy5fZGVmYXVsdFlSYW5nZT1jLHRoaXMudG9vbHRpcENvbHVtbnM9YSx0aGlzLmJ1aWxkQ2hhcnQodCxyLG4scyxoKX1idWlsZENoYXJ0KHQscixuLGksbyl7dGhpcy5kZXN0cm95KCk7bGV0IGE9dCgpO3RoaXMueEFjY2Vzc29yPWEuYWNjZXNzb3IsdGhpcy54U2NhbGU9YS5zY2FsZSx0aGlzLnhBeGlzPWEuYXhpcyx0aGlzLnhBeGlzLm1hcmdpbigxKS50aWNrTGFiZWxQYWRkaW5nKDMpLG8mJnRoaXMueEF4aXMuZm9ybWF0dGVyKG8pLHRoaXMueVNjYWxlPURTLmdldFlTY2FsZUZyb21UeXBlKG4pLHRoaXMueVNjYWxlLnNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpLHRoaXMueUF4aXM9bmV3IE1uLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBzPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihzKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKSx0aGlzLmZpbGxBcmVhPWk7bGV0IGw9bmV3IHpmKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLCgpPT50aGlzLnJlc2V0RG9tYWluKCkpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uPXRoaXMuY3JlYXRlVG9vbHRpcEludGVyYWN0aW9uKGwpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudD1uZXcgTW4uQ29tcG9uZW50O2xldCBjPXRoaXMuYnVpbGRQbG90KHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLGkpO3RoaXMuZ3JpZGxpbmVzPW5ldyBNbi5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7bGV0IHU9bnVsbDtuIT09RmYuTE9HJiYodT1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigiaG9yaXpvbnRhbCIpLHUuc2NhbGUodGhpcy55U2NhbGUpLnZhbHVlKDApKTtsZXQgaD1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigidmVydGljYWwiKTtoLnNjYWxlKHRoaXMueFNjYWxlKS52YWx1ZSgwKSx0aGlzLmNlbnRlcj1uZXcgTW4uQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsdSxoLGMsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LGxdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IE1uLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7biYmKHRoaXMubWFyZ2luQXJlYVBsb3Q9bmV3IE1uLlBsb3RzLkFyZWEsdGhpcy5tYXJnaW5BcmVhUGxvdC54KHRoaXMueEFjY2Vzc29yLHQpLHRoaXMubWFyZ2luQXJlYVBsb3QueShuLmhpZ2hlckFjY2Vzc29yLHIpLHRoaXMubWFyZ2luQXJlYVBsb3QueTAobi5sb3dlckFjY2Vzc29yKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuMyksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJzdHJva2Utd2lkdGgiLDApKSx0aGlzLnNtb290aGVkQWNjZXNzb3I9Yz0+Yy5zbW9vdGhlZDtsZXQgaT1uZXcgTW4uUGxvdHMuTGluZTtpLngodGhpcy54QWNjZXNzb3IsdCksaS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksaS5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubGluZVBsb3Q9aSx0aGlzLnNldHVwVG9vbHRpcHMoaSk7bGV0IG89bmV3IE1uLlBsb3RzLkxpbmU7aWYoby54KHRoaXMueEFjY2Vzc29yLHQpLG8ueSh0aGlzLnNtb290aGVkQWNjZXNzb3Isciksby5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMuc21vb3RoTGluZVBsb3Q9byx0aGlzLnN5bWJvbEZ1bmN0aW9uKXtsZXQgYz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtjLngodGhpcy54QWNjZXNzb3IsdCksYy55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYy5hdHRyKCJmaWxsIiwodSxoLGYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoZi5tZXRhZGF0YSgpLm5hbWUpKSxjLmF0dHIoIm9wYWNpdHkiLDEpLGMuc2l6ZShfQioyKSxjLnN5bWJvbCgodSxoLGYpPT50aGlzLnN5bWJvbEZ1bmN0aW9uKGYubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3Q9Y31sZXQgYT1uZXcgTW4uUGxvdHMuU2NhdHRlcjthLngodGhpcy54QWNjZXNzb3IsdCksYS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYS5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSksYS5hdHRyKCJvcGFjaXR5IiwxKSxhLnNpemUoX0IqMiksYS5kYXRhc2V0cyhbdGhpcy5sYXN0UG9pbnRzRGF0YXNldF0pLHRoaXMuc2NhdHRlclBsb3Q9YTtsZXQgcz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtzLngodGhpcy54QWNjZXNzb3IsdCkscy55KGM9PmMuZGlzcGxheVkscikscy5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSkscy5hdHRyKCJvcGFjaXR5IiwxKSxzLnNpemUoT0t0KjIpLHMuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pLHMuc3ltYm9sKE1uLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZSksdGhpcy5uYW5EaXNwbGF5PXM7bGV0IGw9W3MsYSxvLGldO3JldHVybiB0aGlzLm1hcmdpbkFyZWFQbG90JiZsLnB1c2godGhpcy5tYXJnaW5BcmVhUGxvdCksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJmwucHVzaCh0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCksbmV3IE1uLkNvbXBvbmVudHMuR3JvdXAobCl9aWdub3JlWU91dGxpZXJzKHQpe3QhPT10aGlzLl9pZ25vcmVZT3V0bGllcnMmJih0aGlzLl9pZ25vcmVZT3V0bGllcnM9dCx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMueVNjYWxlLmlnbm9yZU91dGxpZXIodCksdGhpcy5yZXNldFlEb21haW4oKSl9Z2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCl7bGV0IHQ9dGhpcy5nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKSxyPW49PnQubWFwKGk9Pm4uZGF0YSgpLm1hcChvPT5pKG8sLTEsbikpKTtyZXR1cm4genMuZmxhdHRlbkRlZXAodGhpcy5kYXRhc2V0cy5tYXAocikpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7bGV0IHQ9dGhpcy5nZXRZQXhpc0FjY2Vzc29yKCkscj10aGlzLmRhdGFzZXRzLm1hcChvPT57bGV0IGE9bnVsbCxzPW8uZGF0YSgpLmZpbHRlcihsPT4haXNOYU4odChsLC0xLG8pKSk7aWYocy5sZW5ndGg+MCl7bGV0IGw9cy5sZW5ndGgtMTthPXNbbF0sYS5uYW1lPW8ubWV0YWRhdGEoKS5uYW1lLGEucmVsYXRpdmU9cjAoYSwtMSxvKX1yZXR1cm4gYX0pLmZpbHRlcihvPT5vIT1udWxsKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEociksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bGV0IG49bz0+e2xldCBhPW51bGwscz1vLmRhdGEoKSxsPTA7Zm9yKDtsPHMubGVuZ3RoJiZhPT1udWxsOylpc05hTih0KHNbbF0sLTEsbykpfHwoYT10KHNbbF0sLTEsbykpLGwrKzthPT1udWxsJiYoYT0wKTtsZXQgYz1bXTtmb3IobD0wO2w8cy5sZW5ndGg7bCsrKWlzTmFOKHQoc1tsXSwtMSxvKSk/KHNbbF0ubmFtZT1vLm1ldGFkYXRhKCkubmFtZSxzW2xdLmRpc3BsYXlZPWEsc1tsXS5yZWxhdGl2ZT1yMChzW2xdLC0xLG8pLGMucHVzaChzW2xdKSk6YT10KHNbbF0sLTEsbyk7cmV0dXJuIGN9LGk9enMuZmxhdHRlbih0aGlzLmRhdGFzZXRzLm1hcChuKSk7dGhpcy5uYW5EYXRhc2V0LmRhdGEoaSl9cmVzZXREb21haW4oKXt0aGlzLnJlc2V0WERvbWFpbigpLHRoaXMucmVzZXRZRG9tYWluKCl9cmVzZXRYRG9tYWluKCl7bGV0IHQ7aWYodGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCl0PXRoaXMuX2RlZmF1bHRYUmFuZ2U7ZWxzZXtsZXQgcj10aGlzLnhTY2FsZTtyLl9kb21haW5NaW49bnVsbCxyLl9kb21haW5NYXg9bnVsbCx0PXIuX2dldEV4dGVudCgpfXRoaXMueFNjYWxlLmRvbWFpbih0KX1yZXNldFlEb21haW4oKXt0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2xldCB0PVt0aGlzLmdldFlBeGlzQWNjZXNzb3IoKV07cmV0dXJuIHRoaXMuZmlsbEFyZWEmJnQucHVzaCh0aGlzLmZpbGxBcmVhLmxvd2VyQWNjZXNzb3IsdGhpcy5maWxsQXJlYS5oaWdoZXJBY2Nlc3NvciksdH1nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24odCl7bGV0IHI9bmV3IFNCLG49KCk9PntyLmVuYWJsZWQoITEpLHRoaXMuaGlkZVRvb2x0aXBzKCl9LGk9KCk9PnIuZW5hYmxlZCghMCk7cmV0dXJuIHQub25QYW5TdGFydChuKSx0Lm9uRHJhZ1pvb21TdGFydChuKSx0Lm9uUGFuRW5kKGkpLHQub25EcmFnWm9vbUVuZChpKSx0Lm9uU2Nyb2xsWm9vbSgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpLHIub25Qb2ludGVyTW92ZShvPT57dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249byx0aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KG8pfSksci5vblBvaW50ZXJFeGl0KCgpPT50aGlzLmhpZGVUb29sdGlwcygpKSxyfXVwZGF0ZVRvb2x0aXBDb250ZW50KHQpeyF0aGlzLmxpbmVQbG90fHwod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgcj17eDp0LngseTp0Lnl9LG49dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCksaT10aGlzLmxpbmVQbG90LmRhdGFzZXRzKCkubWFwKGw9PnRoaXMuZmluZENsb3Nlc3RQb2ludChyLGwpKS5maWx0ZXIobD0+Qm9vbGVhbihsKSksbz1Nbi5VdGlscy5ET00uaW50ZXJzZWN0c0JCb3gsYT1pLmZpbHRlcihsPT5vKGwueCxsLnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IobC5kYXR1bSwwLGwuZGF0YXNldCkpKSxzPWEuZmlsdGVyKGw9PiFpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKGwuZGF0dW0sMCxsLmRhdGFzZXQpKSk7aWYoaS5sZW5ndGghPT0wKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7bGV0IGw9dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLmRhdGEocyxjPT5jLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtsLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJwb2ludCIsITApLGwuYXR0cigiciIsX0IpLmF0dHIoImN4IixjPT5jLngpLmF0dHIoImN5IixjPT5jLnkpLnN0eWxlKCJzdHJva2UiLCJub25lIikuYXR0cigiZmlsbCIsYz0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSxsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhhLHIsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpfWhpZGVUb29sdGlwcygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMudG9vbHRpcC5oaWRlKCksdGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5IiwiYmxvY2siKSx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikucmVtb3ZlKCl9c2V0dXBUb29sdGlwcyh0KXt0Lm9uRGV0YWNoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCExKX0pLHQub25BbmNob3IoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5hdHRhY2hUbyh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCEwKX0pfWRyYXdUb29sdGlwcyh0LHIsbil7aWYoIXQubGVuZ3RoKXt0aGlzLnRvb2x0aXAuaGlkZSgpO3JldHVybn1sZXR7Y29sb3JTY2FsZTppfT10aGlzO249W3t0aXRsZToiIixzdGF0aWM6ITEsZXZhbFR5cGU6SUIuRE9NLGV2YWx1YXRlKGQpe3JldHVybiBIdCh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLCIifSxlbnRlcihkKXtIdCh0aGlzKS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpfX0sLi4ubl07bGV0IGE9V3UoZTApLHM9ZD0+TWF0aC5wb3coZC54LXIueCwyKStNYXRoLnBvdyhkLnktci55LDIpLGw9enMubWluKHQubWFwKHMpKSxjPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcjt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09ImFzY2VuZGluZyI/dD16cy5zb3J0QnkodCxkPT5jKGQuZGF0dW0sLTEsZC5kYXRhc2V0KSk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJkZXNjZW5kaW5nIj90PXpzLnNvcnRCeSh0LGQ9PmMoZC5kYXR1bSwtMSxkLmRhdGFzZXQpKS5yZXZlcnNlKCk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJuZWFyZXN0Ij90PXpzLnNvcnRCeSh0LHMpOnQ9dC5zbGljZSgwKS5yZXZlcnNlKCk7bGV0IHU9dGhpcyxoPUh0KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxmPWguc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKG4sKGQsZyxfKT0+ZC50aXRsZSk7Zi5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KGQ9PmQudGl0bGUpLm5vZGVzKCksZi5leGl0KCkucmVtb3ZlKCk7bGV0IHA9aC5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEodCwoZCxnLF8pPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtwLmNsYXNzZWQoImRpc3RhbnQiLGQ9PntsZXQgZz1kLmRhdGFzZXQuZGF0YSgpWzBdLF89enMubGFzdChkLmRhdGFzZXQuZGF0YSgpKSx5PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKGcsMCxkLmRhdGFzZXQpKSx4PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKF8sMCxkLmRhdGFzZXQpKSxiPXRoaXMuc21vb3RoaW5nRW5hYmxlZD9kLmRhdHVtLnNtb290aGVkOnRoaXMueVZhbHVlQWNjZXNzb3IoZC5kYXR1bSwwLGQuZGF0YXNldCk7cmV0dXJuIHIueDx5fHxyLng+eHx8aXNOYU4oYil9KS5jbGFzc2VkKCJjbG9zZXN0IixkPT5zKGQpPT09bCkuZWFjaChmdW5jdGlvbihkKXt1LmRyYXdUb29sdGlwUm93KHRoaXMsbixkKX0pLm9yZGVyKCkscC5leGl0KCkucmVtb3ZlKCkscC5lbnRlcigpLmFwcGVuZCgidHIiKS5lYWNoKGZ1bmN0aW9uKGQpe3UuZHJhd1Rvb2x0aXBSb3codGhpcyxuLGQpfSkubm9kZXMoKSx0aGlzLnRvb2x0aXAudXBkYXRlQW5kUG9zaXRpb24odGhpcy50YXJnZXRTVkcubm9kZSgpKX1kcmF3VG9vbHRpcFJvdyh0LHIsbil7bGV0IGk9dGhpcyxvPUh0KHQpLnNlbGVjdEFsbCgidGQiKS5kYXRhKHIpO28uZWFjaChmdW5jdGlvbihhKXthLnN0YXRpY3x8aS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKGksdGhpcyxhLG4pfSksby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKGZ1bmN0aW9uKGEpeyJlbnRlciJpbiBhJiZhLmVudGVyLmNhbGwodGhpcyxuKSxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLGEsbil9KX1kcmF3VG9vbHRpcENvbHVtbih0LHIsbil7bGV0e3Ntb290aGluZ0VuYWJsZWQ6aX09dGhpczsiZXZhbFR5cGUiaW4gciYmci5ldmFsVHlwZT09SUIuRE9NP3IuZXZhbHVhdGUuY2FsbCh0LG4se3Ntb290aGluZ0VuYWJsZWQ6aX0pOkh0KHQpLnRleHQoci5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSkpfWZpbmRDbG9zZXN0UG9pbnQodCxyKXtsZXQgbj1yLmRhdGEoKS5tYXAoKHMsbCk9PnRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKHMsbCxyKSkpLGk9enMuc29ydGVkSW5kZXgobix0LngpO2lmKG4ubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGk9PT1uLmxlbmd0aClpPWktMTtlbHNlIGlmKGkhPT0wKXtsZXQgcz1NYXRoLmFicyhuW2ktMV0tdC54KSxsPU1hdGguYWJzKG5baV0tdC54KTtpPXM8bD9pLTE6aX1sZXQgbz1yLmRhdGEoKVtpXSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3IobyxpLHIpOnRoaXMueVZhbHVlQWNjZXNzb3IobyxpLHIpO3JldHVybnt4Om5baV0seTp0aGlzLnlTY2FsZS5zY2FsZShhKSxkYXR1bTpvLGRhdGFzZXQ6cn19cmVzbW9vdGhEYXRhc2V0KHQpe2xldCByPXQuZGF0YSgpLG49dGhpcy5zbW9vdGhpbmdXZWlnaHQsaT1yLmxlbmd0aD4wPzA6TmFOLG89MCxhPXIubWFwKChsLGMpPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGwsYyx0KSkscz1hLmV2ZXJ5KGw9Pmw9PWFbMF0pO3IuZm9yRWFjaCgobCxjKT0+e2xldCB1PWFbY107aWYoc3x8IU51bWJlci5pc0Zpbml0ZSh1KSlsLnNtb290aGVkPXU7ZWxzZXtpPWkqbisoMS1uKSp1LG8rKztsZXQgaD0xO24hPT0xJiYoaD0xLU1hdGgucG93KG4sbykpLGwuc21vb3RoZWQ9aS9ofX0pfWdldERhdGFzZXQodCl7cmV0dXJuIHRoaXMubmFtZTJkYXRhc2V0c1t0XT09PXZvaWQgMCYmKHRoaXMubmFtZTJkYXRhc2V0c1t0XT1uZXcgTW4uRGF0YXNldChbXSx7bmFtZTp0LG1ldGE6bnVsbH0pKSx0aGlzLm5hbWUyZGF0YXNldHNbdF19c3RhdGljIGdldFlTY2FsZUZyb21UeXBlKHQpe2lmKHQ9PT1GZi5MT0cpcmV0dXJuIG5ldyBBQjtpZih0PT09RmYuTElORUFSKXJldHVybiBuZXcgTUI7dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIit0KX1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0PXQuc29ydCgpLHQucmV2ZXJzZSgpLHRoaXMuc2VyaWVzTmFtZXM9dH1kaXNhYmxlQ2hhbmdlcygpe3RoaXMuZGlydHlEYXRhc2V0cy5zaXplfHwodGhpcy5saW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhMaW5lUGxvdCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyhbXSkpfWNvbW1pdENoYW5nZXMoKXt0aGlzLmRhdGFzZXRzPXRoaXMuc2VyaWVzTmFtZXMubWFwKHQ9PnRoaXMuZ2V0RGF0YXNldCh0KSksWy4uLnRoaXMuZGlydHlEYXRhc2V0c10uZm9yRWFjaCh0PT57dGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnJlc21vb3RoRGF0YXNldCh0aGlzLmdldERhdGFzZXQodCkpfSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSx0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpLHRoaXMuZGlydHlEYXRhc2V0cy5jbGVhcigpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2Vycyh0KXtsZXQgcj10LmRhdGEoKTtpZihyLmxlbmd0aDw9WUt0KXJldHVybiB0O2xldCBuPU1hdGguY2VpbChyLmxlbmd0aC9ZS3QpLGk9bmV3IEFycmF5KE1hdGguZmxvb3Ioci5sZW5ndGgvbikpO2ZvcihsZXQgbz0wLGE9MDtvPGkubGVuZ3RoO28rKyxhKz1uKWlbb109clthXTtyZXR1cm4gbmV3IE1uLkRhdGFzZXQoaSx0Lm1ldGFkYXRhKCkpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmRpc2FibGVDaGFuZ2VzKCksdGhpcy5nZXREYXRhc2V0KHQpLmRhdGEociksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zZXRTZXJpZXNNZXRhZGF0YSh0LHIpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoTXgoS2woe30sdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKCkpLHttZXRhOnJ9KSksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zbW9vdGhpbmdVcGRhdGUodCl7dGhpcy5zbW9vdGhpbmdXZWlnaHQ9dCx0aGlzLmRhdGFzZXRzLmZvckVhY2gocj0+dGhpcy5yZXNtb290aERhdGFzZXQocikpLHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8KHRoaXMubGluZVBsb3QuYWRkQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMuc21vb3RoZWRBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSEwLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cykpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfXNtb290aGluZ0Rpc2FibGUoKXt0aGlzLnNtb290aGluZ0VuYWJsZWQmJih0aGlzLmxpbmVQbG90LnJlbW92ZUNsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpfXNldENvbG9yU2NhbGUodCl7dGhpcy5jb2xvclNjYWxlPXR9c2V0VG9vbHRpcENvbHVtbnModCl7dGhpcy50b29sdGlwQ29sdW1ucz10fXNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHQpe3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9dH1yZW5kZXJUbyh0KXt0aGlzLnRhcmdldFNWRz10LHRoaXMub3V0ZXIucmVuZGVyVG8odCksdGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCYmdGhpcy5yZXNldFhEb21haW4oKSx0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsJiZ0aGlzLnJlc2V0WURvbWFpbigpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXJlZHJhdygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpLHRoaXMub3V0ZXIucmVkcmF3KCl9KX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl7aWYodGhpcy5fbGFzdERyYXdCQm94KXtsZXR7d2lkdGg6dH09dGhpcy5fbGFzdERyYXdCQm94LHt3aWR0aDpyfT10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD09MCYmdDxyJiZ0aGlzLm91dGVyLmludmFsaWRhdGVDYWNoZSgpfXRoaXMuX2xhc3REcmF3QkJveD10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZGVzdHJveSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKSx0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKX1vbkFuY2hvcih0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLm9uQW5jaG9yKHQpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHQodGhpcy54QXhpcy5nZXRTY2FsZSgpKSYmdCh0aGlzLnlBeGlzLmdldFNjYWxlKCkpO2Z1bmN0aW9uIHQocil7bGV0IG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9ci5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpO3JldHVybiBpWzBdPT09blswXSYmaVsxXT09PW5bMV19fX07dmFyIFhLdD1FZShPZSgpLDEpLG5zdD1FZSh3bCgpLDEpO19zKHttb2R1bGVOYW1lOiJwbG90dGFibGUtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAKLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0LAoucGxvdHRhYmxlIC5zY2F0dGVyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KCmB9KTt2YXIgaTA7KGZ1bmN0aW9uKGUpe2UuR1JPVVA9IkciLGUuRElWPSJESVYiLGUuU1ZHPSJTVkciLGUuVEVYVD0iVEVYVCJ9KShpMHx8KGkwPXt9KSk7dmFyIGVzdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnVuaXF1ZUlkPTAsdGhpcy5yb290PXR9ZXhwb3J0QXNTdHJpbmcoKXtsZXQgdD10aGlzLmNvbnZlcnQodGhpcy5yb290KTtpZighdClyZXR1cm4iIjtsZXQgcj10aGlzLmNyZWF0ZVJvb3RTdmcoKTtyZXR1cm4gci5hcHBlbmRDaGlsZCh0KSxyLm91dGVySFRNTH1jcmVhdGVVbmlxdWVJZCh0KXtyZXR1cm5gJHt0fV8ke3RoaXMudW5pcXVlSWQrK31gfWdldFNpemUoKXtyZXR1cm4gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNyZWF0ZVJvb3RTdmcoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxyPXRoaXMuZ2V0U2l6ZSgpO3JldHVybiB0LnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7ci53aWR0aH0gJHtyLmhlaWdodH1gKSx0LnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLHR9Y3JlYXRlQ29udmVydGVkTm9kZSh0KXtsZXQgcj10Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYodC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJihyPT1pMC5ESVZ8fHI9PWkwLlNWRykpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaTAuR1JPVVApLGk9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksbz1wYXJzZUludChpLmxlZnQsMTApLGE9cGFyc2VJbnQoaS50b3AsMTApO2lmKG98fGEpe2xldCBzPXRoaXMuY3JlYXRlVW5pcXVlSWQoImNsaXAiKTtuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7b30sICR7YX0pYCksbi5zZXRBdHRyaWJ1dGUoImNsaXAtcGF0aCIsYHVybCgjJHtzfSlgKTtsZXQgbD1wYXJzZUludChpLndpZHRoLDEwKSxjPXBhcnNlSW50KGkuaGVpZ2h0LDEwKSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInJlY3QiKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyhsKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKGMpKTtsZXQgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIik7aC5pZD1zLGguYXBwZW5kQ2hpbGQodSksbi5hcHBlbmRDaGlsZChoKX1yZXR1cm4gbn1lbHNlIHJldHVybiB0LmNsb25lTm9kZSgpfWNvbnZlcnQodCl7bGV0IHI9dGhpcy5jcmVhdGVDb252ZXJ0ZWROb2RlKHQpO3JldHVybiBBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKGk9PnRoaXMuY29udmVydChpKSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goaT0+e3IuYXBwZW5kQ2hpbGQoaSl9KSxyLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PWkwLkdST1VQJiYhci5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUodCk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKHQscikpfXN0cmlwQ2xhc3ModCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSx0fXRyYW5zZmVyU3R5bGUodCxyKXtpZihyLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gcjtsZXQgbj1yLGk9ci5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLG89d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGk9PWkwLlRFWFQmJk9iamVjdC5hc3NpZ24obi5zdHlsZSx7Zm9udEZhbWlseTpvLmZvbnRGYW1pbHksZm9udFNpemU6by5mb250U2l6ZSxmb250V2VpZ2h0Om8uZm9udFdlaWdodH0pLGkhPWkwLkdST1VQJiYobi5zZXRBdHRyaWJ1dGUoImZpbGwiLG8uZmlsbCksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsby5zdHJva2UpLG4uc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLG8uc3Ryb2tlV2lkdGgpKSxvLm9wYWNpdHkhPSIxIiYmbi5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLG8ub3BhY2l0eSkscn1zaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4hMX19LExCPWNsYXNzIGV4dGVuZHMgZXN0e3Nob3VsZE9taXROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERT90LmNsYXNzTGlzdC5jb250YWlucygic2NhdHRlci1wbG90Iik6ITF9fTtfcyh7bW9kdWxlTmFtZToidnotcGFuLXpvb20tc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAuaGVscCB7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7CiAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7CiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYWRlLW91dDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpOwogICAgICBib3R0b206IDA7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgbGVmdDogMDsKICAgICAgb3BhY2l0eTogMTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDA7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICAuaGVscCA+IHNwYW4gewogICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgMTAwJSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgfQogIGB9KTt2YXIgT3FlPVd1KGUwKSxqS3Q9ZT0+aXNOYU4oZSk/Ik5hTiI6T3FlKGUpLGlzdD1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTplPT5lLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlNtb290aGVkIixldmFsdWF0ZShlLHQpe2xldHtzbW9vdGhpbmdFbmFibGVkOnJ9PXQ7cmV0dXJuIGpLdChyP2UuZGF0dW0uc21vb3RoZWQ6ZS5kYXR1bS5zY2FsYXIpfX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6ZT0+akt0KGUuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTplPT5iNChlLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOmU9PnlCKGUuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZT0+dkIocjAoZS5kYXR1bSwtMSxlLmRhdGFzZXQpKX1dLFpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IG5zdC5TY2FsZXMuQ29sb3IoKS5yYW5nZShqYi5zbGljZSgwKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMuc21vb3RoaW5nV2VpZ2h0PS42LHRoaXMueFR5cGU9bnVsbCx0aGlzLnhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9bnVsbCx0aGlzLnlWYWx1ZUFjY2Vzc29yPXQ9PnQuc2NhbGFyLHRoaXMudG9vbHRpcENvbHVtbnM9aXN0LHRoaXMueVNjYWxlVHlwZT1GZi5MSU5FQVIsdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy50b29sdGlwU29ydGluZ01ldGhvZD0iZGVmYXVsdCIsdGhpcy50b29sdGlwUG9zaXRpb249R3YuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2xldCB0PXtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9O3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcC5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleWRvd24iLHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleXVwIix0aGlzLl9vbktleVVwLmJpbmQodGhpcyksdCl9ZGV0YWNoZWQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCh7bm9kZTp0LGV2ZW50TmFtZTpyLGZ1bmM6bixvcHRpb246aX0pPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2xpc3RlbmVycy5jbGVhcigpKX1fbGlzdGVuKHQscixuLGk9e30pe3RoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz1uZXcgU2V0KSx0aGlzLl9saXN0ZW5lcnMuYWRkKHtub2RlOnQsZXZlbnROYW1lOnIsZnVuYzpuLG9wdGlvbjppfSksdC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX1fb25LZXlEb3duKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbk1vdXNlRG93bih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCEwKX1fb25Nb3VzZVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITEpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHRoaXMuX2NoYXJ0P3RoaXMuX2NoYXJ0LmlzRGF0YUZpdFRvRG9tYWluKCk6ITB9c2V0VmlzaWJsZVNlcmllcyh0KXtYS3QuaXNFcXVhbCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUsdCl8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9c2V0U2VyaWVzTWV0YWRhdGEodCxyKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdPXIsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpeyF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpfXJlc2V0RG9tYWluKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfV9tYWtlQ2hhcnQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2xldCB0PXRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDtpZighdGhpcy54VHlwZSYmIXQ/dD1YYXQ6dGhpcy54VHlwZSYmKHQ9KCk9PnhCKHRoaXMueFR5cGUpKSwhKCF0fHwhdGhpcy55VmFsdWVBY2Nlc3Nvcnx8IXRoaXMudG9vbHRpcENvbHVtbnMpKXt2YXIgcj1uZXcgRFModCx0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlVHlwZSx0aGlzLmNvbG9yU2NhbGUsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsdGhpcy5zeW1ib2xGdW5jdGlvbix0aGlzLnhBeGlzRm9ybWF0dGVyKSxuPUh0KHRoaXMuJC5jaGFydGRpdik7ci5yZW5kZXJUbyhuKSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PXIsdGhpcy5fY2hhcnQub25BbmNob3IoKCk9PnRoaXMuZmlyZSgiY2hhcnQtYXR0YWNoZWQiKSl9fSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXshdGhpcy5fY2hhcnR8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaCh0PT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LHRoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XXx8W10pfSksdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZpbHRlcih0PT50aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKS5mb3JFYWNoKHQ9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNNZXRhZGF0YSh0LHRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pfSksdGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX2NoYXJ0LmNvbW1pdENoYW5nZXMoKSl9X3Ntb290aGluZ0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fCh0aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5fY2hhcnQuc21vb3RoaW5nVXBkYXRlKHRoaXMuc21vb3RoaW5nV2VpZ2h0KTp0aGlzLl9jaGFydC5zbW9vdGhpbmdEaXNhYmxlKCkpfV9vdXRsaWVyc0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0Lmlnbm9yZVlPdXRsaWVycyh0aGlzLmlnbm9yZVlPdXRsaWVycyl9X2NvbG9yU2NhbGVDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHwodGhpcy5fY2hhcnQuc2V0Q29sb3JTY2FsZSh0aGlzLmNvbG9yU2NhbGUpLHRoaXMuX2NoYXJ0LnJlZHJhdygpKX1fdG9vbHRpcENvbHVtbnNDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwQ29sdW1ucyh0aGlzLnRvb2x0aXBDb2x1bW5zKX1fdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX1nZXRFeHBvcnRlcigpe3JldHVybiBuZXcgTEIodGhpcy4kLmNoYXJ0ZGl2KX19O1pyLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcAogICAgICBpZD0idG9vbHRpcCIKICAgICAgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIKICAgID48L3Z6LWNoYXJ0LXRvb2x0aXA+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZ6LXBhbi16b29tLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiAubWFpbiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IGxpbmUuZ3VpZGUtbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjOTk5OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgICAgIH0KICAgICAgI2NoYXJ0ZGl2OmhvdmVyIC5tYWluIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLG5zdC5TY2FsZXMuQ29sb3IpXSxaci5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxaci5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwieEF4aXNGb3JtYXR0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaci5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwieVNjYWxlVHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ0b29sdGlwUG9zaXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfY2hhcnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9zZXJpZXNEYXRhQ2FjaGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfc2VyaWVzTWV0YWRhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLCJ4VHlwZSIsInlWYWx1ZUFjY2Vzc29yIiwieVNjYWxlVHlwZSIsImlzQXR0YWNoZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCk7RShbQnQoIl9jaGFydCIsIl92aXNpYmxlU2VyaWVzQ2FjaGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3JlbG9hZEZyb21DYWNoZSIsbnVsbCk7RShbQnQoInNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGhpbmdXZWlnaHQiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Ntb290aGluZ0NoYW5nZWQiLG51bGwpO0UoW0J0KCJpZ25vcmVZT3V0bGllcnMiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX291dGxpZXJzQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yU2NhbGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVDaGFuZ2VkIixudWxsKTtFKFtCdCgidG9vbHRpcENvbHVtbnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zQ2hhbmdlZCIsbnVsbCk7RShbQnQoInRvb2x0aXBTb3J0aW5nTWV0aG9kIiwiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxaci5wcm90b3R5cGUsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQiLG51bGwpO1pyPUUoW3l0KCJ2ei1saW5lLWNoYXJ0MiIpXSxacik7dmFyIHJzdD1jbGFzcyBleHRlbmRzIG10e307cnN0LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgPHRhYmxlPgogICAgICAgIDx0aGVhZD48L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIHRib2R5IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgdGQgewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICB9CgogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICB9CgogICAgICAuY2xvc2VzdCAuc3dhdGNoIHsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggI2ZmZjsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaXN0YW50IHRkOm5vdCguc3dhdGNoKSB7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO3JzdD1FKFt5dCgidnotbGluZS1jaGFydC10b29sdGlwIildLHJzdCk7dmFyIG9zdD1bXSx6cWU9MCxGcWU9JEt0LnRocm90dGxlKGZ1bmN0aW9uIGUoKXtpZihvc3QubGVuZ3RoPT0wKXJldHVybjtsZXQgdD1vc3Quc2hpZnQoKTt0JiZ0LmFjdGl2ZSYmKHQucmVkcmF3KCksdC5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITEpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh6cWUpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9LDEwMCksSG49Y2xhc3MgZXh0ZW5kcyBrUyhHdChtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZWRyYXdSYWY9bnVsbCx0aGlzLmFjdGl2ZT0hMSx0aGlzLmxvZ1NjYWxlQWN0aXZlPSExLHRoaXMuY29sb3JTY2FsZT17c2NhbGU6Zm59LHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMCx0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMX1vbkxvYWRGaW5pc2goKXt0aGlzLmNvbW1pdENoYW5nZXMoKSx0aGlzLmRhdGFUb0xvYWQubGVuZ3RoPjAmJnRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZCYmKHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMSx0aGlzLmdldENoYXJ0KCkucmVzZXREb21haW4oKSksdGhpcy5yZWRyYXcoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKX1leHBvcnRBc1N2Z1N0cmluZygpe3JldHVybiB0aGlzLmdldENoYXJ0KCkuZ2V0RXhwb3J0ZXIoKS5leHBvcnRBc1N0cmluZygpfWdldENoYXJ0KCl7cmV0dXJuIHRoaXMuJC5jaGFydH1yZXNldERvbWFpbigpe3RoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzRGF0YSh0LHIpfXNldFNlcmllc01ldGFkYXRhKHQscil7dGhpcy5nZXRDaGFydCgpLnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZ2V0Q2hhcnQoKS5jb21taXRDaGFuZ2VzKCl9cmVkcmF3KCl7dGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pfV9sb2FkS2V5Q2hhbmdlZCgpe3RoaXMucmVzZXQoKSx0aGlzLl9yZXNldERvbWFpbk9uTmV4dExvYWQ9ITB9X2RhdGFTZXJpZXNDaGFuZ2VkKCl7dGhpcy5nZXRDaGFydCgpLnNldFZpc2libGVTZXJpZXModGhpcy5kYXRhU2VyaWVzKX1fbG9nU2NhbGVDaGFuZ2VkKHQpe2xldCByPXRoaXMuZ2V0Q2hhcnQoKTtyLnlTY2FsZVR5cGU9dD9GZi5MT0c6RmYuTElORUFSLHRoaXMucmVkcmF3KCl9X2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSYmKG9zdC5wdXNoKHRoaXMpLEZxZSgpKX1fb25DaGFydEF0dGFjaGVkKCl7dGhpcy5hY3RpdmV8fCh0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMCl9fTtIbi50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEhuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJsb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSG4ucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEhuLnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSG4ucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEhuLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJ0b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhuLnByb3RvdHlwZSwidG9vbHRpcFBvc2l0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sSG4ucHJvdG90eXBlLCJzeW1ib2xGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIbi5wcm90b3R5cGUsIl9yZXNldERvbWFpbk9uTmV4dExvYWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJfbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUiLHZvaWQgMCk7RShbQnQoImxvYWRLZXkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhuLnByb3RvdHlwZSwiX2xvYWRLZXlDaGFuZ2VkIixudWxsKTtFKFtCdCgiZGF0YVNlcmllcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIbi5wcm90b3R5cGUsIl9kYXRhU2VyaWVzQ2hhbmdlZCIsbnVsbCk7SG49RShbeXQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKV0sSG4pO19zKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICA6aG9zdCB7CiAgICAgIG1hcmdpbjogNXB4IDEwcHg7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDMzMHB4OwogICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgaDEgewogICAgICBmb250LXNpemU6IDE5cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICB9CgogICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgI2J1dHRvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQoKICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIHBhZGRpbmc6IDRweDsKICAgIH0KCiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMzJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICBtYXJnaW46IDJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgIH0KICBgfSk7dmFyIE9TPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyl7dGhpcy5ydW49dCx0aGlzLnRhZz1yLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPW99Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19O2Z1bmN0aW9uIGtCKGUsdCl7cmV0dXJuYCR7dH0gKCR7ZX0pYH12YXIgV3Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtsZXQgcj10Lm1hdGNoKC9cKCguKilcKSQvKTtyZXR1cm4gcj9yWzFdOiIifX07dmFyIEpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyBXdih7c2NhbGU6Zm59KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPWEsbD10aGlzLl90YWdGaWx0ZXIsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnNjYWxhcil9LHt0aXRsZToiTG93ZXIgTWFyZ2luIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ubG93ZXIpfSx7dGl0bGU6IlVwcGVyIE1hcmdpbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnVwcGVyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpuPT5iNChuLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOm49PnlCKG4uZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6bj0+dkIocjAobi5kYXR1bSwtMSxuLmRhdGFzZXQpKX1dfSkoKSx0aGlzLl9taXNzaW5nVGFncz1bXSx0aGlzLl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy4kLmxvYWRlcjt0JiZ0LnJlc2V0RG9tYWluKCl9X2NzdlVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6ImNzdiJ9KX1fanNvblVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6Impzb24ifSl9X2Rvd25sb2FkRGF0YVVybCh0LHIpe2xldCBuPXRbcl0saT1uZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bi5nZXRUYWcoKSxydW46bi5nZXRSdW4oKX0pO3JldHVybiBfZSgpLnBsdWdpblJvdXRlRm9yU3JjKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIixpKX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbih0KXtyZXR1cm4ocixuLGkpPT57aWYoIWkucmVnZXhfdmFsaWQpe3RoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO3JldHVybn1sZXQgbz1Zby5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxhPVtdO1lvLmZvckVhY2godCxsPT57bGV0IGM9ITEsdT1pLnRhZ190b19ldmVudHNbbC52YWx1ZV0saD1pLnRhZ190b19ldmVudHNbbC5sb3dlcl0sZj1pLnRhZ190b19ldmVudHNbbC51cHBlcl07aWYoWW8uaXNVbmRlZmluZWQodSkmJihhLnB1c2gobC52YWx1ZSksYz0hMCksWW8uaXNVbmRlZmluZWQoaCkmJihhLnB1c2gobC5sb3dlciksYz0hMCksWW8uaXNVbmRlZmluZWQoZikmJihhLnB1c2gobC51cHBlciksYz0hMCksYylyZXR1cm47bGV0IHA9Yj0+YlsxXSxkPXRoaXMuX2ZpbmRTdGVwTWlzbWF0Y2gobCx1Lm1hcChwKSxoLm1hcChwKSxmLm1hcChwKSk7aWYoZCl7dGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIixkKTtyZXR1cm59bGV0IGc9Yj0+YlsyXSxfPXUubWFwKChiLFMpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShiWzBdKjFlMyksc3RlcDpwKGIpLHNjYWxhcjpnKGIpLGxvd2VyOmcoaFtTXSksdXBwZXI6ZyhmW1NdKX0pKSx5PWtCKG4sbC52YWx1ZSkseD1vW3ldO2lmKHgpeC5zZXREYXRhKF8pO2Vsc2V7bGV0IGI9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLGwudmFsdWUseSxfKTtvW3ldPWJ9fSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixvKTtsZXQgcz1Zby5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsbD0+bC5ydW49PT1uKTtpZihhLmxlbmd0aCYmYS5sZW5ndGghPTMpe2xldCBsPXtydW46bix0YWdzOmF9O3M+PTA/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIscywxLGwpOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixsKX1lbHNlIHM+PTAmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLHMsMSl9fV9maW5kU3RlcE1pc21hdGNoKHQscixuLGkpe3JldHVybiBZby5pc0VxdWFsKG4scikmJllvLmlzRXF1YWwoaSxyKT9udWxsOntzZXJpZXNPYmplY3Q6dCx2YWx1ZVN0ZXBzOnIsbG93ZXJTdGVwczpuLHVwcGVyU3RlcHM6aX19X2NyZWF0ZU5ld0RhdGFTZXJpZXModCxyLG4saSl7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF18PTA7bGV0IG89UlNbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dLGE9bmV3IE9TKHQscixuLGksbykscz1SUy5sZW5ndGg7cmV0dXJuIHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XSsxKSVzLGF9X3VwZGF0ZUNoYXJ0KCl7dmFyIHQ9dGhpcy5fbmFtZVRvRGF0YVNlcmllcztZby5mb3JPd24odCxyPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHIuZ2V0TmFtZSgpLHIuZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfWdldCBfc2VyaWVzTmFtZXMoKXtsZXQgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoW3Isbl0pPT50LmhhcyhuLnJ1bikpLm1hcCgoW3JdKT0+cil9X2RldGVybWluZUNvbG9yKHQscil7cmV0dXJuIHQuc2NhbGUocil9X3JlZnJlc2hEYXRhU2VyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnRmlsdGVyO3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxyKXtyZXR1cm4gdFtyXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLm1hcmdpbkNoYXJ0U2VyaWVzO3JldHVybiBZby5mbGF0dGVuKHQubWFwKGk9PltpLnZhbHVlLGkubG93ZXIsaS51cHBlcl0pKS5tYXAoaT0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhpKSsiKSIpLmpvaW4oInwiKX1fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9X2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3ZhciB0PXRoaXMudGl0bGU7cmV0dXJuIHR8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe3ZhciByO2xldCB0PXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpOyF0fHwocj10aGlzLnJvb3QpPT1udWxsfHxyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChuPT57bGV0IGk9dC5pdGVtRm9yRWxlbWVudChuKTtuLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsaSl9KX19O0pyLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSnIucHJvdG90eXBlLCJtYXJnaW5DaGFydFNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sSnIucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwic2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpyLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxKci5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfc3RlcHNNaXNtYXRjaCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpyLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxKci5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoIm1hcmdpbkNoYXJ0U2VyaWVzIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKTtFKFtSdCgidGl0bGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKci5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpO0pyPUUoW3l0KCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIildLEpyKTt2YXIgbzA9RWUoT2UoKSwxKTt2YXIgUkI9e307S3MoUkIse0Jhc2VTdG9yZTooKT0+YnAsQ2FuY2VsbGVyOigpPT5hbixFbnZpcm9ubWVudFN0b3JlOigpPT5WOSxFeHBlcmltZW50c1N0b3JlOigpPT5yUixIdHRwTWV0aG9kVHlwZTooKT0+QW0sSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6KCk9PlZ4LExpc3RlbktleTooKT0+SDksUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yOigpPT5jOSxSZXF1ZXN0TWFuYWdlcjooKT0+QWUsUmVxdWVzdE5ldHdvcmtFcnJvcjooKT0+dUUsUmVxdWVzdE9wdGlvbnM6KCk9PlV4LFJ1bnNTdG9yZTooKT0+VTksVFlQRVM6KCk9Pk94ZSxhZGRQYXJhbXM6KCk9Pk1pLGNyZWF0ZVJvdXRlcjooKT0+Umd0LGNyZWF0ZVNlYXJjaFBhcmFtOigpPT5OZ3QsZW52aXJvbm1lbnRTdG9yZTooKT0+aWIsZXhwZXJpbWVudHNTdG9yZTooKT0+blIsZmlsdGVyVGFnczooKT0+RnhlLGdldFJvdXRlcjooKT0+X2UsZ2V0UnVuc05hbWVkOigpPT56eGUsZ2V0VGFnczooKT0+JGkscnVuc1N0b3JlOigpPT53cH0pO3ZhciBFbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3RpdmU9ITAsdGhpcy5fY29sb3JTY2FsZT1uZXcgV3Yoe3NjYWxlOmZufSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy5fdGFnRmlsdGVyLGM9TWkobyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg9e30sdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoiY3N2In0pfV9qc29uVXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoianNvbiJ9KX1fZG93bmxvYWREYXRhVXJsKHQscil7bGV0IG49dFtyXSxpPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfSk7cmV0dXJuIF9lKCkucGx1Z2luUm91dGVGb3JTcmMoImN1c3RvbV9zY2FsYXJzIiwiL2Rvd25sb2FkX2RhdGEiLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2xldCBpPW8wLmNsb25lKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpO28wLmZvck93bihuLnRhZ190b19ldmVudHMsKG8sYSk9PntsZXQgcz1vLm1hcCh1PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSh1WzBdKjFlMyksc3RlcDp1WzFdLHNjYWxhcjp1WzJdfSkpLGw9a0IocixhKSxjPWlbbF07aWYoYyljLnNldERhdGEocyk7ZWxzZXtvMC5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXT0wKTtsZXQgdT1SU1t0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXV0saD1uZXcgT1MocixhLGwscyx1KTtpW2xdPWg7bGV0IGY9UlMubGVuZ3RoO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3JdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSsxKSVmfX0pLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIsaSl9fX1fdXBkYXRlQ2hhcnQoKXt2YXIgdD10aGlzLl9uYW1lVG9EYXRhU2VyaWVzO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLG5dKT0+e3RoaXMuJC5sb2FkZXIuc2V0U2VyaWVzRGF0YShyLG4uZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfV9jb21wdXRlU2VsZWN0ZWRSdW5zU2V0KHQpe2xldCByPXt9O3JldHVybiBvMC5mb3JFYWNoKHQsbj0+e3Jbbl09MX0pLHJ9Z2V0IF9zZXJpZXNOYW1lcygpe2xldCB0PW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbcixuXSk9PnQuaGFzKG4ucnVuKSkubWFwKChbcl0pPT5yKX1fZGV0ZXJtaW5lQ29sb3IodCxyKXtyZXR1cm4gdC5zY2FsZShyKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt2YXIgdD10aGlzLl90YWdGaWx0ZXI7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix7fSl9X2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIHQ9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbdF0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9X2RldGVybWluZVN5bWJvbCh0LHIpe3JldHVybiB0W3JdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn1nZXQgX3RhZ0ZpbHRlcigpe3ZhciB0PXRoaXMudGFnUmVnZXhlcztyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06dC5tYXAocj0+IigiK3IrIikiKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7dmFyIHQ9dGhpcy50aXRsZTtyZXR1cm4gdHx8InVudGl0bGVkIn1fbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQodCl7dmFyIG47bGV0IHI9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7IXJ8fChuPXRoaXMucm9vdCk9PW51bGx8fG4ucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKGk9PntsZXQgbz1yLml0ZW1Gb3JFbGVtZW50KGkpO2kuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxvKX0pfX07RW4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiCiAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgICAgYXM9ImRhdGFTZXJpZXNOYW1lIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICAgICAgICA+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIKICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICA+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIKICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZU1hdGNoZXNJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+IE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKSA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRW4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVuLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFbi5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxFbi5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEVuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRW4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEVuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVuLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRW4ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixXdildLEVuLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfbmFtZVRvRGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVuLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sRW4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVuLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRW4ucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFbi5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoInRhZ1JlZ2V4ZXMiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFbi5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpO0UoW1J0KCJ0aXRsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVuLnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCk7RW49RShbeXQoInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLEVuKTt2YXIgam89Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7bGV0IHQ9X2UoKS5wbHVnaW5zTGlzdGluZygpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhbi52YWx1ZS5jdXN0b21fc2NhbGFycyksIXRoaXMuX2RhdGFOb3RGb3VuZCYmdGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHIpfV9yZWxvYWRDaGFydHMoKXt2YXIgcjtsZXQgdD0ocj10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDpyLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIik7dD09bnVsbHx8dC5mb3JFYWNoKG49PntuLnJlbG9hZCgpfSl9X3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfbGF5b3V0IixuLnZhbHVlKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JlbG9hZENoYXJ0cygpKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IHI9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChyPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKGk9PihyJiYhaS5jbG9zZWQmJih0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2kudGl0bGVdPSEwKSx7bmFtZTppLnRpdGxlLGl0ZW1zOmkuY2hhcnQsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQLG9wZW5lZDohIXRoaXMuX29wZW5lZENhdGVnb3JpZXNbaS50aXRsZV19fSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7bGV0IHI9dC50YXJnZXQ7ci5vcGVuZWQ/dGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tyLmNhdGVnb3J5Lm5hbWVdPSEwOmRlbGV0ZSB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3IuY2F0ZWdvcnkubmFtZV19fTtqby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nLWxhYmVsIj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbid0IGxhaWQgb3V0IHRoZSBkYXNoYm9hcmQuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyBsYXkgb3V0IHRoZSBkYXNoYm9hcmQsIHBhc3MgYSA8Y29kZT5MYXlvdXQ8L2NvZGU+IHByb3RvYnVmZmVyCiAgICAgICAgICAgICAgdG8gdGhlIDxjb2RlPnNldF9sYXlvdXQ8L2NvZGU+IG1ldGhvZC4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHByZT4KZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgYXM9ImNoYXJ0IgogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgZGlzYWJsZS1wYWdpbmF0aW9uCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubXVsdGlsaW5lXV0iPgogICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICAgIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICBtYXJnaW4tY2hhcnQtc2VyaWVzPSJbW2NoYXJ0Lm1hcmdpbi5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxqby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGpvLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sam8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sam8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGpvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqby5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqby5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sam8ucHJvdG90eXBlLCJfb3BlbmVkQ2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqby5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtSdCgiX2xheW91dCIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sam8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7am89RShbeXQoInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLGpvKTt2YXIgREI9RWUoT2UoKSwxKTt2YXIgYXN0PUVlKE9lKCksMSksYmE9RWUod2woKSwxKTt2YXIgTkI9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnJ1bjJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9cix0aGlzLmJ1aWxkQ2hhcnQodCl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5ydW4yZGF0YXNldHNbdF09PT12b2lkIDAmJih0aGlzLnJ1bjJkYXRhc2V0c1t0XT1uZXcgYmEuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgcj14Qih0KTt0aGlzLnhBY2Nlc3Nvcj1yLmFjY2Vzc29yLHRoaXMueFNjYWxlPXIuc2NhbGUsdGhpcy54QXhpcz1yLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMCksdGhpcy54QXhpcy50aWNrTGFiZWxQYWRkaW5nKDMpLHRoaXMueVNjYWxlPW5ldyBiYS5TY2FsZXMuTGluZWFyLHRoaXMueUF4aXM9bmV3IGJhLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IGJhLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKSx0aGlzLmNlbnRlcj1uZXcgYmEuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsaV0pLHRoaXMub3V0ZXI9bmV3IGJhLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxvPWFzdC5yYW5nZShpLmxlbmd0aC0xKS5tYXAoaD0+KGlbaCsxXS1pW2hdKS8yNTAwKSxhPWkubWFwKChoLGYpPT5wPT5wW2ZdWzFdKSxzPTQsbD1hW3NdLGM9YXN0LnJhbmdlKGEubGVuZ3RoLTEpLm1hcChoPT57bGV0IGY9bmV3IGJhLlBsb3RzLkFyZWE7Zi54KHQscik7bGV0IHA9aD5zP2FbaF06YVtoKzFdLGQ9aD5zP2FbaCsxXTphW2hdO3JldHVybiBmLnkoZCxuKSxmLnkwKHApLGYuYXR0cigiZmlsbCIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZSIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZS13ZWlnaHQiLChnLF8seSk9PiIwLjVweCIpLGYuYXR0cigic3Ryb2tlLW9wYWNpdHkiLCgpPT5vW2hdKSxmLmF0dHIoImZpbGwtb3BhY2l0eSIsKCk9Pm9baF0pLGZ9KSx1PW5ldyBiYS5QbG90cy5MaW5lO3JldHVybiB1LngodCxyKSx1LnkobCxuKSx1LmF0dHIoInN0cm9rZSIsKGgsZixwKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHAucnVuKSksdGhpcy5wbG90cz1jLG5ldyBiYS5Db21wb25lbnRzLkdyb3VwKGMpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5ydW5zPXQ7bGV0IHI9dC5tYXAobj0+dGhpcy5nZXREYXRhc2V0KG4pKTt0aGlzLnBsb3RzLmZvckVhY2gobj0+bi5kYXRhc2V0cyhyKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKHIpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19LEJjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IGJhLlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUscj10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCwhIW4pe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGk9bmV3IE5CKHQsciksbz1IdCh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8obyksdGhpcy5fY2hhcnQ9aX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0JjLnRlbXBsYXRlPVFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGJhLlNjYWxlcy5Db2xvcildLEJjLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCYy5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQmMucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsTkIpXSxCYy5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQmMucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJjLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCYy5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQmMucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxCYy5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpO0JjPUUoW3l0KCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0sQmMpO3ZhciB3YT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW4ubWFwKGE9PntsZXRbcyxsLGNdPWE7cmV0dXJuIGMud2FsbF90aW1lPW5ldyBEYXRlKHMqMWUzKSxjLnN0ZXA9bCxjfSksbz10aGlzLmdldERhdGFMb2FkTmFtZShyKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtvXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOmZufSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHQpfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07d2EudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3YS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHdhLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHdhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd2EucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx3YS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sd2EucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHdhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx3YS5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd2EucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO3dhPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLHdhKTt2YXIgU2w9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihEQi5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49REIubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtTbC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieFR5cGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICAgIChIaXN0b2dyYW1zIGFuZCBkaXN0cmlidXRpb25zIGJvdGggdXNlIHRoZSBoaXN0b2dyYW0gc3VtbWFyeQogICAgICAgICAgICAgICAgb3BlcmF0aW9uLikKICAgICAgICAgICAgICA8L2xpPgoKICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgPjwvdGYtZGlzdHJpYnV0aW9uLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTbC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFNsLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1NsPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIildLFNsKTt2YXIgT0I9e307S3MoT0Ise0RJU0FNQklHVUFUT1I6KCk9PnEwdCxMaXN0ZW5LZXk6KCk9Pm1FLGFkZEhhc2hMaXN0ZW5lcjooKT0+Z0UsYWRkU3RvcmFnZUxpc3RlbmVyOigpPT5UVyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6KCk9PnQyZSxkaXNwb3NlTnVtYmVyQmluZGluZzooKT0+ZTJlLGRpc3Bvc2VPYmplY3RCaW5kaW5nOigpPT5pMmUsZGlzcG9zZVN0cmluZ0JpbmRpbmc6KCk9PlpiZSxmaXJlU3RvcmFnZUNoYW5nZWQ6KCk9PkNXLGdldEJvb2xlYW46KCk9PkpiZSxnZXRCb29sZWFuSW5pdGlhbGl6ZXI6KCk9PnZwLGdldEJvb2xlYW5PYnNlcnZlcjooKT0+eHAsZ2V0TnVtYmVyOigpPT5OVyxnZXROdW1iZXJJbml0aWFsaXplcjooKT0+X0UsZ2V0TnVtYmVyT2JzZXJ2ZXI6KCk9PnlFLGdldE9iamVjdDooKT0+cjJlLGdldE9iamVjdEluaXRpYWxpemVyOigpPT5PVyxnZXRPYmplY3RPYnNlcnZlcjooKT0+elcsZ2V0U3RyaW5nOigpPT4kYmUsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6KCk9PnlfLGdldFN0cmluZ09ic2VydmVyOigpPT52XyxnZXRVcmxIYXNoRGljdDooKT0+QjB0LG1ha2VCaW5kaW5nczooKT0+dkUsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTooKT0+bzJlLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OigpPT5BVyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTooKT0+UFcsc2V0Qm9vbGVhbjooKT0+UWJlLHNldE51bWJlcjooKT0+RFcsc2V0T2JqZWN0OigpPT5uMmUsc2V0U3RyaW5nOigpPT5LYmV9KTt2YXIgaWN0PUVlKE9lKCksMSk7dmFyIEtLdD0iR3JhcGggZGFzaGJvYXJkIGFjdGlvbnMiLFpLdD0iR3JhcGggZGFzaGJvYXJkIHRpbWluZ3MiLHNzdDsoZnVuY3Rpb24oZSl7ZS5GRVRDSF9QQlRYVF9CWVRFUz0iRkVUQ0hfUEJUWFRfQllURVMiLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9GSUxFU1lTVEVNPSJGRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0iLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVI9IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fU0VSVkVSIixlLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUPSJQQVJTRV9QQlRYVF9JTlRPX09CSkVDVCIsZS5GRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUz0iRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMiLGUuUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX01FVEFEQVRBX1BCVFhUX0lOVE9fT0JKRUNUIixlLk5PUk1BTElaSU5HX05BTUVTPSJOT1JNQUxJWklOR19OQU1FUyIsZS5CVUlMRF9TTElNX0dSQVBIPSJCVUlMRF9TTElNX0dSQVBIIixlLkhJRVJBUkNIWV9BRERfTk9ERVM9IkhJRVJBUkNIWV9BRERfTk9ERVMiLGUuSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVM9IkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTIixlLkhJRVJBUkNIWV9BRERfRURHRVM9IkhJRVJBUkNIWV9BRERfRURHRVMiLGUuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFM9IkhJRVJBUkNIWV9GSU5EX1NJTUlMQVJfU1VCR1JBUEhTIixlLlJFTkRFUl9CVUlMRF9ISUVSQVJDSFk9IlJFTkRFUl9CVUlMRF9ISUVSQVJDSFkiLGUuUkVOREVSX1NDRU5FX0xBWU9VVD0iUkVOREVSX1NDRU5FX0xBWU9VVCIsZS5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkU9IlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORSIsZS5HUkFQSF9MT0FEX1NVQ0NFRURFRD0iR1JBUEhfTE9BRF9TVUNDRUVERUQiLGUuR1JBUEhfTE9BRF9GQUlMRUQ9IkdSQVBIX0xPQURfRkFJTEVEIn0pKHNzdHx8KHNzdD17fSkpO3ZhciBsc3Q7KGZ1bmN0aW9uKGUpe2UuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsZS5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLGUuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLGUuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLGUuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLGUuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIixlLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKGxzdHx8KGxzdD17fSkpO3ZhciBqcj1LbChLbCh7fSxzc3QpLGxzdCk7dmFyIG5sZT1FZShPbHQoKSwxKSxwbj1FZShPZSgpLDEpO3ZhciBGczsoZnVuY3Rpb24oZSl7ZS5PUF9HUkFQSD0ib3BfZ3JhcGgiLGUuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCIsZS5QUk9GSUxFPSJwcm9maWxlIn0pKEZzfHwoRnM9e30pKTt2YXIgdmU9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLEdST1VQOiJlZGdlIixMSU5FOiJlZGdlbGluZSIsUkVGRVJFTkNFX0VER0U6InJlZmVyZW5jZWVkZ2UiLFJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIixCUklER0VOT0RFOiJicmlkZ2UiLEVMTElQU0lTTk9ERToiZWxsaXBzaXMifSxKND17RWRnZTp7TEFCRUw6My41fSxBbm5vdGF0aW9uOntMQUJFTDo1fSxOb2RlOntFWFBBTkRFRF9MQUJFTDo5LFNFUklFU19MQUJFTDo4LE9QX0xBQkVMOjYsSEVBTFRIX1BJTExfU1RBVF9MQUJFTDo0fX0sanU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtmdW5jdGlvbiBtMChlLHQscil7bGV0IG49ZS5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZihvLnRhZ05hbWU9PT10KXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2xldCBhPSEwO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWE9YSYmby5jbGFzc0xpc3QuY29udGFpbnMocltzXSk7aWYoYSlyZXR1cm4gSHQobyl9ZWxzZSBpZighcnx8by5jbGFzc0xpc3QuY29udGFpbnMocikpcmV0dXJuIEh0KG8pfX1yZXR1cm4gSHQobnVsbCl9ZnVuY3Rpb24gQW4oZSx0LHIsbil7bGV0IGk9bTAoZSx0LHIpO2lmKCFpLmVtcHR5KCkpcmV0dXJuIGk7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYociBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKW8uY2xhc3NMaXN0LmFkZChyW2FdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChyKTtyZXR1cm4gbj9lLm5vZGUoKS5pbnNlcnRCZWZvcmUobyxuKTplLm5vZGUoKS5hcHBlbmRDaGlsZChvKSxIdChvKS5kYXR1bShlLmRhdHVtKCkpfXZhciBLUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQscil7dGhpcy5zdGFydFRpbWUhPW51bGw/dGhpcy5zdGFydFRpbWU9TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dGhpcy5zdGFydFRpbWU9dCx0aGlzLmVuZFRpbWUhPW51bGw/dGhpcy5lbmRUaW1lPU1hdGgubWF4KHRoaXMuZW5kVGltZSxyKTp0aGlzLmVuZFRpbWU9cn1hZGRCeXRlc0FsbG9jYXRpb24odCl7dGhpcy50b3RhbEJ5dGVzIT1udWxsP3RoaXMudG90YWxCeXRlcz1NYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsdCk6dGhpcy50b3RhbEJ5dGVzPXR9Y29tYmluZSh0KXt0LnRvdGFsQnl0ZXMhPW51bGwmJih0aGlzLnRvdGFsQnl0ZXMrPXQudG90YWxCeXRlcyksdC5nZXRUb3RhbE1pY3JvcygpIT1udWxsJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUodC5zdGFydFRpbWUsdC5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiB0aGlzLnN0YXJ0VGltZT09bnVsbHx8dGhpcy5lbmRUaW1lPT1udWxsP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX0sUTQ9Ljc1LHRQPTEyLHRjcj0uMyxlY3I9WzEsNWU2XSxYc2U9S18oKS5leHBvbmVudCh0Y3IpLmRvbWFpbihlY3IpLnJhbmdlKFtRNCx0UF0pLmNsYW1wKCEwKTt2YXIgWlM9RWUoT2UoKSwxKTt2YXIgS3NlPTIwO2Z1bmN0aW9uIHJjcihlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgidGltaW5nSWQiKX1mdW5jdGlvbiBQbyhlKXtyY3IoZSk/KFpLdCxlLnRpbWluZ0lkLGUuZXZlbnRWYWx1ZSx2b2lkIDApOihLS3QsZS5hY3Rpb25JZCxlLmV2ZW50TGFiZWwsdm9pZCAwKX1mdW5jdGlvbiBSZChlLHQscil7bGV0IG49RGF0ZS5ub3coKSxpPXQoKSxvPURhdGUubm93KCktbjtyZXR1cm4gY29uc29sZS5sb2coZSwiOiIsbywibXMiKSxyJiZQbyh7dGltaW5nSWQ6cixldmVudFZhbHVlOm99KSxpfWZ1bmN0aW9uIG5QKGUpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2Uuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmUucHJvZ3Jlc3MudmFsdWUsbXNnOnR9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSt0LG1zZzplLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbih0LHIpe2NvbnNvbGUuZXJyb3Ioci5zdGFjayksZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSxtc2c6dCxlcnJvcjohMH0pfX19ZnVuY3Rpb24gSlMoZSx0LHIpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKG4pe2Uuc2V0TWVzc2FnZShyKyI6ICIrbil9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKG4pe2UudXBkYXRlUHJvZ3Jlc3Mobip0LzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKG4saSl7ZS5yZXBvcnRFcnJvcihyKyI6ICIrbixpKX19fWZ1bmN0aW9uIFpzZShlLHQscixuLGkpe24uc2V0TWVzc2FnZShlKTt0cnl7bGV0IG89UmQoZSxyLGkpO3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKHQpLG99Y2F0Y2gobyl7cmV0dXJuIG4ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2UsbyksbnVsbH19ZnVuY3Rpb24gZTEoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntuLnNldE1lc3NhZ2UoZSksc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcz1SZChlLHIsaSk7bi51cGRhdGVQcm9ncmVzcyh0KSxvKHMpfWNhdGNoKHMpe24ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2Uscyl9fSxLc2UpfSl9ZnVuY3Rpb24gbUgoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntsZXQgcz1mdW5jdGlvbihsKXtuLnJlcG9ydEVycm9yKCJGYWlsZWQgIitlLGwpLGEobCl9O24uc2V0TWVzc2FnZShlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCBsPURhdGUubm93KCk7cigpLnRoZW4oZnVuY3Rpb24oYyl7bGV0IHU9RGF0ZS5ub3coKS1sO2NvbnNvbGUubG9nKGUsIjoiLHUsIm1zIiksbi51cGRhdGVQcm9ncmVzcyh0KSxQbyh7dGltaW5nSWQ6aSxldmVudFZhbHVlOnV9KSxvKGMpfSkuY2F0Y2gocyl9Y2F0Y2gobCl7cyhsKX19LEtzZSl9KX1mdW5jdGlvbiBKc2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX12YXIgaVA9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XSxvUD1be3N5bWJvbDoiXHhCNXMifSx7c3ltYm9sOiJtcyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJzIixudW1Vbml0czoxZTN9LHtzeW1ib2w6Im1pbiIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImhyIixudW1Vbml0czo2MH0se3N5bWJvbDoiZGF5cyIsbnVtVW5pdHM6MjR9XTtmdW5jdGlvbiBOZChlLHQscj0wKXtyZXR1cm4gcisxPHQubGVuZ3RoJiZlPj10W3IrMV0ubnVtVW5pdHM/TmQoZS90W3IrMV0ubnVtVW5pdHMsdCxyKzEpOk51bWJlcihlLnRvUHJlY2lzaW9uKDMpKSsiICIrdFtyXS5zeW1ib2x9ZnVuY3Rpb24gZ0goZSl7cmV0dXJuISEoZSYmKGUudG90YWxCeXRlcz4wfHxlLmdldFRvdGFsTWljcm9zKCk+MHx8ZS5vdXRwdXRTaXplKSl9ZnVuY3Rpb24gemx0KGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuIGU7bGV0IHQ9MCxyPTAsbj1aUy5taW4oWlMubWFwKGUsaT0+aS5sZW5ndGgpKTtmb3IoOzspe3QrKztsZXQgaT1aUy5tYXAoZSxhPT5hLnN1YnN0cmluZygwLHQpKTtpZihpLmV2ZXJ5KChhLHMpPT5zPT09MD8hMDphPT09aVtzLTFdKSl7aWYodD49bilyZXR1cm4gZTtyPXR9ZWxzZSBicmVha31yZXR1cm4gWlMubWFwKGUsaT0+aS5zdWJzdHJpbmcocikpfWZ1bmN0aW9uIFFzZShlKXt2YXIgdD0rbmV3IERhdGUtK25ldyBEYXRlKGUvMWUzKTtyZXR1cm4gdDwzZTQ/Imp1c3Qgbm93Ijp0PDZlND9NYXRoLmZsb29yKHQvMWUzKSsiIHNlY29uZHMgYWdvIjp0PDEyZTQ/ImEgbWludXRlIGFnbyI6dDwzNmU1P01hdGguZmxvb3IodC82ZTQpKyIgbWludXRlcyBhZ28iOk1hdGguZmxvb3IodC8zNmU1KT09MT8iYW4gaG91ciBhZ28iOnQ8ODY0ZTU/TWF0aC5mbG9vcih0LzM2ZTUpKyIgaG91cnMgYWdvIjp0PDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKHQvODY0ZTUpKyIgZGF5cyBhZ28ifXZhciBuY3I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksclA9bmNyLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gJHNlKGUsdCl7cmV0dXJuIHJQJiYoclAuZm9udD1gJHt0fXB4IFJvYm90bywgc2Fucy1zZXJpZmApLHJQPT1udWxsP3ZvaWQgMDpyUC5tZWFzdXJlVGV4dChlKS53aWR0aH1mdW5jdGlvbiB0bGUoZSx0LHIpe2lmKCFlKXJldHVybiIiO2lmKCRzZShlLHQpPD1yKXJldHVybiBlO2xldCBuPTAsaT1lLmxlbmd0aDtmb3IoO248aTspe2xldCBvPW4rTWF0aC5yb3VuZCgoaS1uKS8yKSxhPWUuc2xpY2UoMCxvKSsiXHUyMDI2Ijskc2UoYSx0KTw9cj9uPW86aT1vLTF9cmV0dXJuIG49PT0wP2VbMF06ZS5zbGljZSgwLG4pKyJcdTIwMjYifXZhciBkSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LHIpe3ZhciBuOyhuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpKT09bnVsbHx8bi5wdXNoKHIpfXJlbW92ZUxpc3RlbmVyKHQscil7dmFyIGk7bGV0IG49KGk9dGhpcy5nZXRMaXN0ZW5lcnModCkpPT1udWxsP3ZvaWQgMDppLmZpbHRlcihvPT5vIT09cik7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5zZXQodCxuKX1kaXNwYXRjaEV2ZW50KHQscil7Zm9yKGxldCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4ocil9fTt2YXIgQWw9Ii8iLHFjPSJfX3Jvb3RfXyIsU2E9Il9fZnVuY3Rpb25fbGlicmFyeV9fIixpbGU9Il90b29fbGFyZ2VfYXR0cnMiO3ZhciBvbGU9Ii0tIixnMDsoZnVuY3Rpb24oZSl7ZVtlLkZVTEw9MF09IkZVTEwiLGVbZS5FTUJFRERFRD0xXT0iRU1CRURERUQiLGVbZS5NRVRBPTJdPSJNRVRBIixlW2UuU0VSSUVTPTNdPSJTRVJJRVMiLGVbZS5DT1JFPTRdPSJDT1JFIixlW2UuU0hBRE9XPTVdPSJTSEFET1ciLGVbZS5CUklER0U9Nl09IkJSSURHRSIsZVtlLkVER0U9N109IkVER0UifSkoZzB8fChnMD17fSkpO3ZhciBqdDsoZnVuY3Rpb24oZSl7ZVtlLk1FVEE9MF09Ik1FVEEiLGVbZS5PUD0xXT0iT1AiLGVbZS5TRVJJRVM9Ml09IlNFUklFUyIsZVtlLkJSSURHRT0zXT0iQlJJREdFIixlW2UuRUxMSVBTSVM9NF09IkVMTElQU0lTIn0pKGp0fHwoanQ9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5JTkNMVURFPTBdPSJJTkNMVURFIixlW2UuRVhDTFVERT0xXT0iRVhDTFVERSIsZVtlLlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KSh1cnx8KHVyPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuR1JPVVA9MF09IkdST1VQIixlW2UuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShpc3x8KGlzPXt9KSk7dmFyIGljcj0iX291dHB1dF9zaGFwZXMiLG9jcj0iX1hsYUNsdXN0ZXIiLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX0sX0g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPWp0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9dXIuVU5TUEVDSUZJRUR9c2V0TnVtTW9yZU5vZGVzKHQpe3RoaXMubnVtTW9yZU5vZGVzPXQsdGhpcy5uYW1lPSIuLi4gIit0KyIgbW9yZSJ9fSxfMD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wPXQub3AsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRldmljZT10LmRldmljZSx0aGlzLmF0dHI9dC5hdHRyLHRoaXMuaW5wdXRzPWNjcih0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz1hY3IodC5hdHRyKSx0aGlzLnhsYUNsdXN0ZXI9c2NyKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT1qdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVELHRoaXMub3duaW5nU2VyaWVzPW51bGx9fTtmdW5jdGlvbiBsUChlLHQ9e30pe3JldHVybiBuZXcgYVAoZSx0KX1mdW5jdGlvbiBhbGUoZSx0LHIpe3BuLmVhY2goZS5ub2RlcyxuPT57bi5zdGF0cz1udWxsfSkscG4uZWFjaCh0LmRldl9zdGF0cyxuPT57ciYmIXJbbi5kZXZpY2VdfHxwbi5lYWNoKG4ubm9kZV9zdGF0cyxpPT57bGV0IG89aS5ub2RlX25hbWUgaW4gZS5ub2Rlcz9pLm5vZGVfbmFtZTpzUChpLm5vZGVfbmFtZSk7aWYoIShvIGluIGUubm9kZXMpKXJldHVybjtsZXQgYT0wO2kubWVtb3J5JiZwbi5lYWNoKGkubWVtb3J5LGw9PntsLnRvdGFsX2J5dGVzJiYobC50b3RhbF9ieXRlcz4wP2ErPU51bWJlcihsLnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIrbykpfSk7bGV0IHM9bnVsbDtpLm91dHB1dCYmKHM9cG4ubWFwKGkub3V0cHV0LGw9PnBuLm1hcChsLnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sYz0+TnVtYmVyKGMuc2l6ZSkpKSksZS5ub2Rlc1tvXS5kZXZpY2U9bi5kZXZpY2UsZS5ub2Rlc1tvXS5zdGF0cz09bnVsbCYmKGUubm9kZXNbb10uc3RhdHM9bmV3IEtTKHMpKSxlLm5vZGVzW29dLnN0YXRzLmFkZEJ5dGVzQWxsb2NhdGlvbihhKSxpLmFsbF9lbmRfcmVsX21pY3JvcyYmKGkuYWxsX2VuZF9yZWxfbWljcm9zPjA/ZS5ub2Rlc1tvXS5zdGF0cy5hZGRFeGVjdXRpb25UaW1lKGkuYWxsX3N0YXJ0X21pY3JvcyxpLmFsbF9zdGFydF9taWNyb3MraS5hbGxfZW5kX3JlbF9taWNyb3MpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBydW50aW1lIGZvciAiK28pKX0pfSl9dmFyIGFQPWNsYXNze2NvbnN0cnVjdG9yKHQscj17fSl7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWp0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPWUzKHQsZzAuTUVUQSxyKSx0aGlzLmJyaWRnZWdyYXBoPW51bGwsdGhpcy5vcEhpc3RvZ3JhbT17fSx0aGlzLmRldmljZUhpc3RvZ3JhbT17fSx0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e30sdGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9LHRoaXMudGVtcGxhdGVJZD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExLHRoaXMuaW5jbHVkZT11ci5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIikscj10aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIjtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZShyKX1sZWF2ZXMoKXtsZXQgdD1bXSxyPVt0aGlzXSxuO2Zvcig7ci5sZW5ndGg7KXtsZXQgaT1yLnNoaWZ0KCk7aSE9bnVsbCYmaS5pc0dyb3VwTm9kZT8obj1pLm1ldGFncmFwaCxwbi5lYWNoKG4ubm9kZXMoKSxvPT5yLnB1c2gobi5ub2RlKG8pKSkpOnQucHVzaChpPT1udWxsP3ZvaWQgMDppLm5hbWUpfXJldHVybiB0fX07ZnVuY3Rpb24gSGx0KGUsdCl7cmV0dXJuIG5ldyBxZihlLHQpfXZhciBxZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudj10LHRoaXMudz1yLHRoaXMuYmFzZUVkZ2VMaXN0PVtdLHRoaXMuaW5ib3VuZD1udWxsLHRoaXMubnVtUmVndWxhckVkZ2VzPTAsdGhpcy5udW1Db250cm9sRWRnZXM9MCx0aGlzLm51bVJlZkVkZ2VzPTAsdGhpcy50b3RhbFNpemU9MH1hZGRCYXNlRWRnZSh0LHIpe3RoaXMuYmFzZUVkZ2VMaXN0LnB1c2godCksdC5pc0NvbnRyb2xEZXBlbmRlbmN5P3RoaXMubnVtQ29udHJvbEVkZ2VzKz0xOnRoaXMubnVtUmVndWxhckVkZ2VzKz0xLHQuaXNSZWZlcmVuY2VFZGdlJiYodGhpcy5udW1SZWZFZGdlcys9MSksdGhpcy50b3RhbFNpemUrPXFmLmNvbXB1dGVTaXplT2ZFZGdlKHQsciksci5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoci5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LHIpe2xldCBuPXIubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtyLmhhc1NoYXBlSW5mbz0hMDtsZXQgaT1PYmplY3Qua2V5cyhuLm91dHB1dFNoYXBlcykubWFwKG89Pm4ub3V0cHV0U2hhcGVzW29dKS5tYXAobz0+bz09bnVsbD8xOm8ucmVkdWNlKChhLHMpPT4ocz09PS0xJiYocz0xKSxhKnMpLDEpKTtyZXR1cm4gcG4uc3VtKGkpfX07ZnVuY3Rpb24gUVMoZSx0LHIsbixpLG8pe3JldHVybiBuZXcgQmx0KGUsdCxyLG4saSxvKX1mdW5jdGlvbiB0MyhlLHQscixuLGkpe2xldCBvPXR5cGVvZiBuIT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiPyJbIituKyItIitpKyJdIjoiIyIsYT1lK28rdDtyZXR1cm4ocj9yKyIvIjoiIikrYX12YXIgQmx0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLm5hbWU9b3x8dDModCxyLG4pLHRoaXMudHlwZT1qdC5TRVJJRVMsdGhpcy5oYXNMb29wPSExLHRoaXMucHJlZml4PXQsdGhpcy5zdWZmaXg9cix0aGlzLmNsdXN0ZXJJZD1pLHRoaXMuaWRzPVtdLHRoaXMucGFyZW50PW4sdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9ZTMobyxnMC5TRVJJRVMsYSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEfX07ZnVuY3Rpb24gYWNyKGUpe2xldCB0PW51bGw7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldHtrZXk6bix2YWx1ZTppfT1lW3JdO2lmKG49PT1pY3Ipe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG89aS5saXN0LnNoYXBlLm1hcChhPT5hLnVua25vd25fcmFuaz9udWxsOmEuZGltPT1udWxsfHxhLmRpbS5sZW5ndGg9PT0xJiZhLmRpbVswXS5zaXplPT1udWxsP1tdOmEuZGltLm1hcChzPT5zLnNpemV8fDApKTtyZXR1cm4gZS5zcGxpY2UociwxKSxvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBzY3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5rZXk9PT1vY3IpcmV0dXJuIGVbdF0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH12YXIgbGNyPS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBjY3IoZSl7bGV0IHQ9W10scj1udWxsO2ZvcihsZXQgbiBvZiBlfHxbXSl7bGV0IGk9bi5zdGFydHNXaXRoKCJeIik7aSYmKG49bi5zdWJzdHJpbmcoMSkpO2xldCBvPW4sYT0iMCIscz1uLmluY2x1ZGVzKCI6IikmJm4ubWF0Y2gobGNyKTtzJiYobz1zWzFdLGE9c1syXSksciE9PW8mJihyPW8sdC5wdXNoKHtuYW1lOm8sb3V0cHV0VGVuc29yS2V5OmEsaXNDb250cm9sRGVwZW5kZW5jeTppfSkpfXJldHVybiB0fWZ1bmN0aW9uIEZsdChlLHQscixuLGksbyl7aWYodD09PXIubmFtZSlyZXR1cm47bGV0IGE9aS5yZWZFZGdlc1tyLm9wKyIgIitvXT09PSEwO2UuZWRnZXMucHVzaCh7djp0LHc6ci5uYW1lLG91dHB1dFRlbnNvcktleTpuLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5Om4uaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6YX0pfXZhciBzbGU9e2VuYWJsZUVtYmVkZGluZzohMCxpbkVtYmVkZGluZ1R5cGVzOlsiQ29uc3QiXSxvdXRFbWJlZGRpbmdUeXBlczpbIl5bYS16QS1aXStTdW1tYXJ5JCJdLHJlZkVkZ2VzOnsiQXNzaWduIDAiOiEwLCJBc3NpZ25BZGQgMCI6ITAsIkFzc2lnblN1YiAwIjohMCwiYXNzaWduIDAiOiEwLCJhc3NpZ25fYWRkIDAiOiEwLCJhc3NpZ25fc3ViIDAiOiEwLCJjb3VudF91cF90byAwIjohMCwiU2NhdHRlckFkZCAwIjohMCwiU2NhdHRlclN1YiAwIjohMCwiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2Z1bmN0aW9uIGxsZShlLHQscil7bGV0IG49e30saT17fSxvPXt9LGE9ZWxlKHQuaW5FbWJlZGRpbmdUeXBlcykscz1lbGUodC5vdXRFbWJlZGRpbmdUeXBlcyksbD1bXSxjPWUubm9kZSx1PW5ldyBBcnJheShjLmxlbmd0aCk7cmV0dXJuIGUxKCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxwPWc9PntsZXQgXz1uZXcgXzAoZyk7cmV0dXJuIGEoXyk/KGwucHVzaChfLm5hbWUpLG5bXy5uYW1lXT1fLF8pOnMoXyk/KGwucHVzaChfLm5hbWUpLGlbXy5uYW1lXT1fLHBuLmVhY2goXy5pbnB1dHMseT0+e2xldCB4PXkubmFtZTtvW3hdPW9beF18fFtdLG9beF0ucHVzaChfKX0pLF8pOihoW2ZdPV8sdVtmXT1fLm5hbWUsZisrLF8pfTtwbi5lYWNoKGMscCk7bGV0IGQ9Zz0+e2xldCBfPVNhK2cuc2lnbmF0dXJlLm5hbWU7aWYocCh7bmFtZTpfLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksZy5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgYj0wLFM9Qz0+e2xldCBQPXAoe25hbWU6XytBbCtDLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkMudHlwZX19XX0pO1AuZnVuY3Rpb25JbnB1dEluZGV4PWIsYisrfTtnLnNpZ25hdHVyZS5pbnB1dF9hcmcubmFtZT9TKGcuc2lnbmF0dXJlLmlucHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5pbnB1dF9hcmcsUyl9bGV0IHk9MCx4PXt9O2lmKGcuc2lnbmF0dXJlLm91dHB1dF9hcmcpe2xldCBiPVM9Pnt4W18rQWwrUy5uYW1lXT15LHkrK307Zy5zaWduYXR1cmUub3V0cHV0X2FyZy5uYW1lP2IoZy5zaWduYXR1cmUub3V0cHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5vdXRwdXRfYXJnLGIpfXBuLmVhY2goZy5ub2RlX2RlZixiPT57Yi5uYW1lPV8rIi8iK2IubmFtZSx0eXBlb2YgYi5pbnB1dD09InN0cmluZyImJihiLmlucHV0PVtiLmlucHV0XSk7bGV0IFM9cChiKTtwbi5pc051bWJlcih4W2IubmFtZV0pJiYoUy5mdW5jdGlvbk91dHB1dEluZGV4PXhbYi5uYW1lXSkscG4uZWFjaChTLmlucHV0cyxDPT57Qy5uYW1lPV8rQWwrQy5uYW1lfSl9KX07cmV0dXJuIGUubGlicmFyeSYmZS5saWJyYXJ5LmZ1bmN0aW9uJiZwbi5lYWNoKGUubGlicmFyeS5mdW5jdGlvbixkKSxoLnNwbGljZShmKSx1LnNwbGljZShmKSxofSxyLGpyLk5PUk1BTElaSU5HX05BTUVTKS50aGVuKGg9PmUxKCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLDcwLCgpPT57bGV0IGY9dWNyKHUsbCkscD1uZXcgWHU7cmV0dXJuIHBuLmVhY2goaCxkPT57bGV0IGc9ZltkLm5hbWVdfHxkLm5hbWU7cC5ub2Rlc1tnXT1kLGQubmFtZSBpbiBvJiYoZC5vdXRFbWJlZGRpbmdzPW9bZC5uYW1lXSxwbi5lYWNoKGQub3V0RW1iZWRkaW5ncyxfPT57Xy5uYW1lPWZbXy5uYW1lXXx8Xy5uYW1lfSkpLGQubmFtZT1nfSkscG4uZWFjaChoLGQ9Pntwbi5lYWNoKGQuaW5wdXRzLChnLF8pPT57bGV0IHk9Zy5uYW1lO2lmKHkgaW4gbil7bGV0IHg9blt5XTtkLmluRW1iZWRkaW5ncy5wdXNoKHgpO2ZvcihsZXQgYiBvZiB4LmlucHV0cylGbHQocCxmW2IubmFtZV18fGIubmFtZSxkLGIsdCxfKX1lbHNlIGlmKHkgaW4gaSl7bGV0IHg9aVt5XTtmb3IobGV0IGIgb2YgeC5pbnB1dHMpRmx0KHAsZltiLm5hbWVdfHxiLm5hbWUsZCxnLHQsXyl9ZWxzZSBGbHQocCxmW3ldfHx5LGQsZyx0LF8pfSl9KSxwbi5lYWNoKG4sKGQsZyk9PntkLm5hbWU9ZltkLm5hbWVdfHxkLm5hbWV9KSxwfSxyLGpyLkJVSUxEX1NMSU1fR1JBUEgpKX1mdW5jdGlvbiBlMyhlLHQscj17fSl7bGV0IG49bmV3IG5sZS5ncmFwaGxpYi5HcmFwaChyKTtyZXR1cm4gbi5zZXRHcmFwaCh7bmFtZTplLHJhbmtkaXI6ci5yYW5rZGlyfHwiQlQiLHR5cGU6dH0pLG59ZnVuY3Rpb24gZWxlKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49bmV3IFJlZ0V4cChlW3JdKTtpZih0eXBlb2YgdC5vcD09InN0cmluZyImJnQub3AubWF0Y2gobikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHNQKGUpe2xldCB0PWUuc3BsaXQoQWwpO3JldHVybiBlK0FsKyIoIit0W3QubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiB1Y3IoZSx0KXtsZXQgcj17fSxuPXt9O2Uuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpe2xldCBvPWVbaV07cG4uZWFjaChjUChvKS5zbGljZSgwLC0xKSxhPT57blthXT0hMH0pO2ZvcihsZXQgYT1pKzE7YTxlLmxlbmd0aDsrK2Epe2xldCBzPWVbYV07aWYocG4uc3RhcnRzV2l0aChzLG8pKXtpZihzLmxlbmd0aD5vLmxlbmd0aCYmcy5jaGFyQXQoby5sZW5ndGgpPT09QWwpe3Jbb109c1Aobyk7YnJlYWt9fWVsc2UgYnJlYWt9fXJldHVybiBwbi5lYWNoKHQsaT0+e2kgaW4gbiYmKHJbaV09c1AoaSkpfSkscn1mdW5jdGlvbiBybGUoZSl7bGV0IHQ9ZS5ub2RlcygpLm1hcChmdW5jdGlvbihyKXt2YXIgbjtyZXR1cm4obj1lLm5laWdoYm9ycyhyKSk9PW51bGw/dm9pZCAwOm4ubGVuZ3RofSk7cmV0dXJuIHQuc29ydCgpLHR9ZnVuY3Rpb24gY2xlKGUsdCl7bGV0IHI9cmxlKGUpLG49cmxlKHQpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGNQKGUsdCl7bGV0IHI9W10sbj1lLmluZGV4T2YoQWwpO2Zvcig7bj49MDspci5wdXNoKGUuc3Vic3RyaW5nKDAsbikpLG49ZS5pbmRleE9mKEFsLG4rMSk7aWYodCl7bGV0IGk9dFtlXTtpJiZyLnB1c2goaSl9cmV0dXJuIHIucHVzaChlKSxyfWZ1bmN0aW9uIHlIKGUpe3JldHVybiBlPT09dXIuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1mdW5jdGlvbiB1bGUoZSl7cmV0dXJuIGU9PT1pcy5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn12YXIgSGU9RWUoT2UoKSwxKTt2YXIgcjE9RWUoT2UoKSwxKTtmdW5jdGlvbiBobGUoZSx0KXtsZXQgcj1mY3IoZSksbj1wY3Iocix0KTtyZXR1cm4gT2JqZWN0LmtleXMobikuc29ydChpPT5uW2ldLmxldmVsKS5yZWR1Y2UoKGksbyk9PihpW29dPW5bb10saSkse30pfWZ1bmN0aW9uIGhjcihlKXtsZXQgdD1yMS5tYXAoe2RlcHRoOmUuZGVwdGgsInxWfCI6ZS5tZXRhZ3JhcGgubm9kZXMoKS5sZW5ndGgsInxFfCI6ZS5tZXRhZ3JhcGguZWRnZXMoKS5sZW5ndGh9LGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkrIj0iK259KS5qb2luKCIgIikscj1yMS5tYXAoZS5vcEhpc3RvZ3JhbSxmdW5jdGlvbihuLGkpe3JldHVybiBpKyI9IitufSkuam9pbigiLCIpO3JldHVybiB0KyIgW29wc10gIityfWZ1bmN0aW9uIGZjcihlKXtsZXQgdD1lLmdldE5vZGVNYXAoKSxyPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgobixpKT0+e2xldCBvPXRbaV07aWYoby50eXBlIT09anQuTUVUQSlyZXR1cm4gbjtsZXQgYT1pLnNwbGl0KCIvIikubGVuZ3RoLTEscz1oY3IobyksbD1uW3NdfHx7bm9kZXM6W10sbGV2ZWw6YX07cmV0dXJuIG5bc109bCxsLm5vZGVzLnB1c2gobyksbC5sZXZlbD5hJiYobC5sZXZlbD1hKSxufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChuPT5bbixyW25dXSkuZmlsdGVyKChbbixpXSk9PntsZXR7bm9kZXM6b309aTtpZihvLmxlbmd0aD4xKXJldHVybiEwO2xldCBhPW9bMF07cmV0dXJuIGEudHlwZT09PWp0Lk1FVEEmJmEuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoW24saV0pPT5pLm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBwY3IoZSx0KXtyZXR1cm4gcjEucmVkdWNlKGUsZnVuY3Rpb24obixpKXtsZXQgbz1pWzBdLGE9aVsxXS5ub2RlcyxzPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obCl7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspaWYoIXR8fGRjcihzW2NdLm1ldGFub2RlLm1ldGFncmFwaCxsLm1ldGFncmFwaCkpe2wudGVtcGxhdGVJZD1zW2NdLm1ldGFub2RlLnRlbXBsYXRlSWQsc1tjXS5tZW1iZXJzLnB1c2gobC5uYW1lKTtyZXR1cm59bC50ZW1wbGF0ZUlkPW8rIlsiK3MubGVuZ3RoKyJdIixzLnB1c2goe21ldGFub2RlOmwsbWVtYmVyczpbbC5uYW1lXX0pfSkscy5mb3JFYWNoKGZ1bmN0aW9uKGwpe25bbC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6aVsxXS5sZXZlbCxub2RlczpsLm1lbWJlcnN9fSksbn0se30pfWZ1bmN0aW9uIHZIKGUsdCxyKXtyZXR1cm4gcjEuc29ydEJ5KGUsW249PnQubm9kZShuKS5vcCxuPT50Lm5vZGUobikudGVtcGxhdGVJZCxuPT57dmFyIGk7cmV0dXJuKGk9dC5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+e3ZhciBpO3JldHVybihpPXQucHJlZGVjZXNzb3JzKG4pKT09bnVsbD92b2lkIDA6aS5sZW5ndGh9LG49Pnt2YXIgaTtyZXR1cm4oaT10LnN1Y2Nlc3NvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+bi5zdWJzdHIoci5sZW5ndGgpXSl9ZnVuY3Rpb24gZGNyKGUsdCl7aWYoIWNsZShlLHQpKXJldHVybiExO2xldCByPWUuZ3JhcGgoKS5uYW1lLG49dC5ncmFwaCgpLm5hbWUsaT17fSxvPXt9LGE9W107ZnVuY3Rpb24gcyh1LGgpe2xldCBmPXUuc3Vic3RyKHIubGVuZ3RoKSxwPWguc3Vic3RyKG4ubGVuZ3RoKTtyZXR1cm4gaVtmXV5vW3BdPyhjb25zb2xlLndhcm4oImRpZmZlcmVudCB2aXNpdCBwYXR0ZXJuIiwiWyIrcisiXSIsZiwiWyIrbisiXSIscCksITApOihpW2ZdfHwoaVtmXT1vW3BdPSEwLGEucHVzaCh7bjE6dSxuMjpofSkpLCExKX1sZXQgbD1lLnNvdXJjZXMoKSxjPXQuc291cmNlcygpO2lmKGwubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJkaWZmZXJlbnQgc291cmNlIGxlbmd0aCIpLCExO2w9dkgobCxlLHIpLGM9dkgoYyx0LG4pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWlmKHMobFt1XSxjW3VdKSlyZXR1cm4hMTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgdT1hLnBvcCgpO2lmKCFtY3IoZS5ub2RlKHU9PW51bGw/dm9pZCAwOnUubjEpLHQubm9kZSh1PT1udWxsP3ZvaWQgMDp1Lm4yKSkpcmV0dXJuITE7bGV0IGY9ZS5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjEpLHA9dC5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjIpO2lmKChmPT1udWxsP3ZvaWQgMDpmLmxlbmd0aCkhPT0ocD09bnVsbD92b2lkIDA6cC5sZW5ndGgpKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixmLHApLCExO2Y9dkgoZixlLHIpLHA9dkgocCx0LG4pO2ZvcihsZXQgZD0wO2Q8KGY9PW51bGw/dm9pZCAwOmYubGVuZ3RoKTtkKyspaWYocyhmPT1udWxsP3ZvaWQgMDpmW2RdLHA9PW51bGw/dm9pZCAwOnBbZF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIG1jcihlLHQpe2lmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUsbj10O3JldHVybiEhci50ZW1wbGF0ZUlkJiYhIW4udGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkPT09bi50ZW1wbGF0ZUlkfWVsc2V7aWYoZS50eXBlPT09anQuT1AmJnQudHlwZT09PWp0Lk9QKXJldHVybiBlLm9wPT09dC5vcDtpZihlLnR5cGU9PT1qdC5TRVJJRVMmJnQudHlwZT09PWp0LlNFUklFUyl7bGV0IHI9ZSxuPXQsaT1yLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gaT09PW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoaT09PTB8fHIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1uLm1ldGFncmFwaC5ub2RlKG4ubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX19cmV0dXJuITF9dmFyIERkOyhmdW5jdGlvbihlKXtlW2UuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKERkfHwoRGQ9e30pKTt2YXIgb3M9Y2xhc3MgZXh0ZW5kcyBkSHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9bFAocWMsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4W3FjXT10aGlzLnJvb3QsdGhpcy5vcmRlcmluZ3M9e319Z2V0U2VyaWVzR3JvdXBUeXBlKHQpe3ZhciByO3JldHVybihyPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSE9bnVsbD9yOmlzLkdST1VQfXNldFNlcmllc0dyb3VwVHlwZSh0LHIpe3JldHVybiB0aGlzLnNlcmllc0dyb3VwTWFwLnNldCh0LHIpfWJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpe2xldCByPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09aXMuR1JPVVA/aXMuVU5HUk9VUDppcy5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxyXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxyKXt0aGlzLmluZGV4W3RdPXJ9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IHI9dGhpcy5pbmRleFt0XTtpZighcil0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIHIpKXJldHVybiBudWxsO2xldCBuPXI7aWYobi5icmlkZ2VncmFwaClyZXR1cm4gbi5icmlkZ2VncmFwaDtsZXQgaT1uLmJyaWRnZWdyYXBoPWUzKCJCUklER0VHUkFQSCIsZzAuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighci5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gci5wYXJlbnROb2RlKSlyZXR1cm4gaTtsZXQgbz1yLnBhcmVudE5vZGUsYT1vLm1ldGFncmFwaCxzPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoby5uYW1lKTtyZXR1cm4gSGUuZWFjaChbYSxzXSxsPT57bC5lZGdlcygpLmZpbHRlcihjPT5jLnY9PT10fHxjLnc9PT10KS5mb3JFYWNoKGM9PntsZXQgdT1jLnc9PT10LGg9bC5lZGdlKGMpO0hlLmVhY2goaC5iYXNlRWRnZUxpc3QsZj0+e2xldFtwLGRdPXU/W2YudyxjLnZdOltmLnYsYy53XSxnPXRoaXMuZ2V0Q2hpbGROYW1lKHQscCksXz17djp1P2Q6Zyx3OnU/ZzpkfSx5PWkuZWRnZShfKTt5fHwoeT1IbHQoXy52LF8udykseS5pbmJvdW5kPXUsaS5zZXRFZGdlKF8udixfLncseSkpLHkuYWRkQmFzZUVkZ2UoZix0aGlzKX0pfSl9KSxpfWdldENoaWxkTmFtZSh0LHIpe2xldCBuPXRoaXMuaW5kZXhbcl07Zm9yKDtuOyl7aWYobi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUubmFtZT09PXQpcmV0dXJuIG4ubmFtZTtuPW4ucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK3IpfWdldFByZWRlY2Vzc29ycyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKHIsITApO3JldHVybiByLmlzR3JvdXBOb2RlfHxIZS5lYWNoKHIuaW5FbWJlZGRpbmdzLGk9PntIZS5lYWNoKHIuaW5wdXRzLG89PntpZihvLm5hbWU9PT1pLm5hbWUpe2xldCBhPW5ldyBxZihpLm5hbWUsdCk7YS5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTpvLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Om8ub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OmkubmFtZSx3OnR9LHRoaXMpLG4ucmVndWxhci5wdXNoKGEpfX0pfSksbn1nZXRTdWNjZXNzb3JzKHQpe2xldCByPXRoaXMuaW5kZXhbdF07aWYoIXIpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMociwhMSk7cmV0dXJuIHIuaXNHcm91cE5vZGV8fEhlLmVhY2goci5vdXRFbWJlZGRpbmdzLGk9PntIZS5lYWNoKGkuaW5wdXRzLG89PntpZihvLm5hbWU9PT10KXtsZXQgYT1uZXcgcWYodCxpLm5hbWUpO2EuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6by5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpvLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp0LHc6aS5uYW1lfSx0aGlzKSxuLnJlZ3VsYXIucHVzaChhKX19KX0pLG59Z2V0T25lV2F5RWRnZXModCxyKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxvPWkubWV0YWdyYXBoLGE9dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBmbGUobyx0LHIsbiksZmxlKGEsdCxyLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighci5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LG89ci5tZXRhZ3JhcGg7SGUuZWFjaChvLmVkZ2VzKCksYz0+eyFvLmVkZ2UoYykubnVtUmVndWxhckVkZ2VzfHwoYy52IGluIG58fChuW2Mudl09W10pLG5bYy52XS5wdXNoKGMudyksaVtjLnddPSEwKX0pO2xldCBhPUhlLmRpZmZlcmVuY2UoSGUua2V5cyhuKSxIZS5rZXlzKGkpKSxzPXRoaXMub3JkZXJpbmdzW3RdPXt9LGw9MDtmb3IoO2EubGVuZ3RoOyl7bGV0IGM9YS5zaGlmdCgpO3NbY109bCsrLEhlLmVhY2gobltjXSx1PT5hLnB1c2godSkpLGRlbGV0ZSBuW2NdfXJldHVybiBzfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9JEwodGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcj1ndSgpLmRvbWFpbih0KS5yYW5nZShJcigwLHQubGVuZ3RoKSk7cmV0dXJuIG49PnIobil9dXBkYXRlVGVtcGxhdGVzKCl7UmQoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgpPT57dGhpcy50ZW1wbGF0ZXM9aGxlKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KERkLlRFTVBMQVRFU19VUERBVEVEKX0sanIuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX07ZnVuY3Rpb24gZmxlKGUsdCxyLG4pe2xldCBpPXI/ZS5pbkVkZ2VzKHQubmFtZSk6ZS5vdXRFZGdlcyh0Lm5hbWUpO0hlLmVhY2goaSxvPT57bGV0IGE9ZS5lZGdlKG8pOyhhLm51bVJlZ3VsYXJFZGdlcz9uLnJlZ3VsYXI6bi5jb250cm9sKS5wdXNoKGEpfSl9dmFyIHIzPXt2ZXJpZnlUZW1wbGF0ZTohMCxzZXJpZXNOb2RlTWluU2l6ZTo1LHNlcmllc01hcDpuZXcgTWFwLHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtmdW5jdGlvbiBiSChlLHQscil7bGV0IG49bmV3IG9zKHQpLGk9e307cmV0dXJuIGUxKCJBZGRpbmcgbm9kZXMiLDMwLCgpPT57bGV0IG89e30sYT17fTtIZS5lYWNoKGUubm9kZXMsKHMsbCk9PntzLmRldmljZSYmKG9bcy5kZXZpY2VdPSEwKSxzLnhsYUNsdXN0ZXImJihhW3MueGxhQ2x1c3Rlcl09ITApfSksbi5kZXZpY2VzPUhlLmtleXMobyksbi54bGFDbHVzdGVycz1IZS5rZXlzKGEpLF9jcihuLGUpfSxyLGpyLkhJRVJBUkNIWV9BRERfTk9ERVMpLnRoZW4oKCk9PmUxKCJEZXRlY3Qgc2VyaWVzIiwzMCwoKT0+e3Quc2VyaWVzTm9kZU1pblNpemU+MCYmbWxlKG4ucm9vdCxuLGksdC5zZXJpZXNOb2RlTWluU2l6ZSx0LnNlcmllc01hcCx0LnVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnMpfSxyLGpyLkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkudGhlbigoKT0+ZTEoIkFkZGluZyBlZGdlcyIsNDAsKCk9Pnt5Y3IobixlLGkpfSxyLGpyLkhJRVJBUkNIWV9BRERfRURHRVMpKS50aGVuKCgpPT5uKX1mdW5jdGlvbiBwbGUoZSx0KXtsZXQgcj17fSxuPXt9O0hlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSk7by5kZXZpY2UhPW51bGwmJihyW28uZGV2aWNlXT0hMCksby54bGFDbHVzdGVyIT1udWxsJiYobltvLnhsYUNsdXN0ZXJdPSEwKX0pLGUuZGV2aWNlcz1IZS5rZXlzKHIpLGUueGxhQ2x1c3RlcnM9SGUua2V5cyhuKSxIZS5lYWNoKGUuZ2V0Tm9kZU1hcCgpLChpLG8pPT57aS5pc0dyb3VwTm9kZSYmKGkuc3RhdHM9bmV3IEtTKG51bGwpLGkuZGV2aWNlSGlzdG9ncmFtPXt9KX0pLEhlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSksYT1vO2Zvcig7YS5wYXJlbnROb2RlIT1udWxsOyl7aWYoby5kZXZpY2UhPW51bGwpe2xldCBzPWEucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07c1tvLmRldmljZV09KHNbby5kZXZpY2VdfHwwKSsxfWlmKG8ueGxhQ2x1c3RlciE9bnVsbCl7bGV0IHM9YS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07c1tvLnhsYUNsdXN0ZXJdPShzW28ueGxhQ2x1c3Rlcl18fDApKzF9by5zdGF0cyE9bnVsbCYmYS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoby5zdGF0cyksYT1hLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gZGxlKGUpe2xldCB0PVtdLHI9e307cmV0dXJuIEhlLmVhY2goZS5yb290LmxlYXZlcygpLG49PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT1qdC5PUCl7bGV0IG89aTtpZighby5jb21wYXRpYmxlKWlmKG8ub3duaW5nU2VyaWVzKXtpZihlLmdldFNlcmllc0dyb3VwVHlwZShvLm93bmluZ1Nlcmllcyk9PT1pcy5VTkdST1VQKXQucHVzaChvKTtlbHNlIGlmKCFyW28ub3duaW5nU2VyaWVzXSl7bGV0IGE9ZS5ub2RlKG8ub3duaW5nU2VyaWVzKTthJiYocltvLm93bmluZ1Nlcmllc109YSx0LnB1c2goYSkpfX1lbHNlIHQucHVzaChvKTtIZS5lYWNoKG8uaW5FbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pLEhlLmVhY2goby5vdXRFbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pfX0pLHR9ZnVuY3Rpb24gX2NyKGUsdCl7bGV0IHI9e307SGUuZWFjaCh0Lm5vZGVzLChuLGkpPT57bGV0IG89Y1Aobi5uYW1lKSxhPWUucm9vdDthLmRlcHRoPU1hdGgubWF4KG8ubGVuZ3RoLGEuZGVwdGgpLHJbbi5vcF18fChyW24ub3BdPVtdKSxyW24ub3BdLnB1c2gobik7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmKGEuZGVwdGg9TWF0aC5tYXgoYS5kZXB0aCxvLmxlbmd0aC1zKSxhLmNhcmRpbmFsaXR5Kz1uLmNhcmRpbmFsaXR5LGEub3BIaXN0b2dyYW1bbi5vcF09KGEub3BIaXN0b2dyYW1bbi5vcF18fDApKzEsbi5kZXZpY2UhPW51bGwmJihhLmRldmljZUhpc3RvZ3JhbVtuLmRldmljZV09KGEuZGV2aWNlSGlzdG9ncmFtW24uZGV2aWNlXXx8MCkrMSksbi54bGFDbHVzdGVyIT1udWxsJiYoYS54bGFDbHVzdGVySGlzdG9ncmFtW24ueGxhQ2x1c3Rlcl09KGEueGxhQ2x1c3Rlckhpc3RvZ3JhbVtuLnhsYUNsdXN0ZXJdfHwwKSsxKSxuLmNvbXBhdGlibGU/YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOmEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChuLmluRW1iZWRkaW5ncyx1PT57dS5jb21wYXRpYmxlP2EuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTphLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChuLm91dEVtYmVkZGluZ3MsdT0+e3UuY29tcGF0aWJsZT9hLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLHMhPT1vLmxlbmd0aC0xKTtzKyspe2xldCBsPW9bc10sYz1lLm5vZGUobCk7aWYoIWMmJihjPWxQKGwsZS5ncmFwaE9wdGlvbnMpLGMucGFyZW50Tm9kZT1hLGUuc2V0Tm9kZShsLGMpLGEubWV0YWdyYXBoLnNldE5vZGUobCxjKSxsLmluZGV4T2YoU2EpPT09MCYmYS5uYW1lPT09cWMpKXtsZXQgdT1sLnN1YnN0cmluZyhTYS5sZW5ndGgpO3JbdV18fChyW3VdPVtdKSxlLmxpYnJhcnlGdW5jdGlvbnNbdV09e25vZGU6Yyx1c2FnZXM6clt1XX0sYy5hc3NvY2lhdGVkRnVuY3Rpb249dX1hPWN9ZS5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9YSxhLm1ldGFncmFwaC5zZXROb2RlKG4ubmFtZSxuKSxIZS5lYWNoKG4uaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKHMpe2Uuc2V0Tm9kZShzLm5hbWUscykscy5wYXJlbnROb2RlPW59KSxIZS5lYWNoKG4ub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihzKXtlLnNldE5vZGUocy5uYW1lLHMpLHMucGFyZW50Tm9kZT1ufSl9KX1mdW5jdGlvbiB5Y3IoZSx0LHIpe2xldCBuPWUuZ2V0Tm9kZU1hcCgpLGk9W10sbz1bXSxhPShzLGwpPT57bGV0IGM9MDtmb3IoO3M7KWxbYysrXT1zLm5hbWUscz1zLnBhcmVudE5vZGU7cmV0dXJuIGMtMX07SGUuZWFjaCh0LmVkZ2VzLHM9PntsZXQgbD1hKHQubm9kZXNbcy52XSxpKSxjPWEodC5ub2Rlc1tzLnddLG8pO2lmKGw9PT0tMXx8Yz09PS0xKXJldHVybjtmb3IoO2lbbF09PT1vW2NdOylpZihsLS0sYy0tLGw8MHx8YzwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IHU9bltpW2wrMV1dLGg9aVtsXSxmPW9bY10scD11Lm1ldGFncmFwaC5lZGdlKGgsZik7cHx8KHA9SGx0KGgsZiksdS5tZXRhZ3JhcGguc2V0RWRnZShoLGYscCkpLCF1Lmhhc05vbkNvbnRyb2xFZGdlcyYmIXMuaXNDb250cm9sRGVwZW5kZW5jeSYmKHUuaGFzTm9uQ29udHJvbEVkZ2VzPSEwKSxwLmFkZEJhc2VFZGdlKHMsZSl9KX1mdW5jdGlvbiBtbGUoZSx0LHIsbixpLG8pe2xldCBhPWUubWV0YWdyYXBoO0hlLmVhY2goYS5ub2RlcygpLHU9PntsZXQgaD1hLm5vZGUodSk7aC50eXBlPT09anQuTUVUQSYmbWxlKGgsdCxyLG4saSxvKX0pO2xldCBzPXZjcihhKSxjPShvP2Jjcjp4Y3IpKHMsYSx0LmdyYXBoT3B0aW9ucyk7SGUuZWFjaChjLGZ1bmN0aW9uKHUsaCl7bGV0IGY9dS5tZXRhZ3JhcGgubm9kZXMoKTtIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTtkLm93bmluZ1Nlcmllc3x8KGQub3duaW5nU2VyaWVzPWgpfSksZi5sZW5ndGg8biYmdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKT09PWlzLkdST1VQJiZ0LnNldFNlcmllc0dyb3VwVHlwZSh1Lm5hbWUsaXMuVU5HUk9VUCksdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKSE9PWlzLlVOR1JPVVAmJih0LnNldE5vZGUoaCx1KSxhLnNldE5vZGUoaCx1KSxIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTt1Lm1ldGFncmFwaC5zZXROb2RlKHAsZCksdS5wYXJlbnROb2RlPWQucGFyZW50Tm9kZSx1LmNhcmRpbmFsaXR5KyssZC5kZXZpY2UhPW51bGwmJih1LmRldmljZUhpc3RvZ3JhbVtkLmRldmljZV09KHUuZGV2aWNlSGlzdG9ncmFtW2QuZGV2aWNlXXx8MCkrMSksZC54bGFDbHVzdGVyIT1udWxsJiYodS54bGFDbHVzdGVySGlzdG9ncmFtW2QueGxhQ2x1c3Rlcl09KHUueGxhQ2x1c3Rlckhpc3RvZ3JhbVtkLnhsYUNsdXN0ZXJdfHwwKSsxKSxkLmNvbXBhdGlibGU/dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChkLmluRW1iZWRkaW5ncyxnPT57Zy5jb21wYXRpYmxlP3UuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTp1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChkLm91dEVtYmVkZGluZ3MsZz0+e2cuY29tcGF0aWJsZT91LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLGQucGFyZW50Tm9kZT11LHJbcF09aCxhLnJlbW92ZU5vZGUocCl9KSl9KX1mdW5jdGlvbiB2Y3IoZSl7bGV0IHQ9e307cmV0dXJuIEhlLnJlZHVjZShlLm5vZGVzKCksKHIsbik9PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT09anQuTUVUQSlyZXR1cm4gcjtsZXQgbz1pLm9wO3JldHVybiBvJiYocltvXT1yW29dfHxbXSxyW29dLnB1c2goaS5uYW1lKSkscn0sdCl9ZnVuY3Rpb24geGNyKGUsdCxyKXtsZXQgbj17fTtyZXR1cm4gSGUuZWFjaChlLGZ1bmN0aW9uKGksbyl7aWYoaS5sZW5ndGg8PTEpcmV0dXJuO2xldCBhPXt9O0hlLmVhY2goaSxmdW5jdGlvbihzKXtsZXQgbD1zLmNoYXJBdChzLmxlbmd0aC0xKT09PSIqIixjPXMuc3BsaXQoIi8iKSx1PWNbYy5sZW5ndGgtMV0saD1jLnNsaWNlKDAsYy5sZW5ndGgtMSkuam9pbigiLyIpLGY9dS5tYXRjaCgvXihcRCopKFxkKykkLykscCxkLGc9IiI7Zj8ocD1mWzFdLGQ9ZlsyXSk6KHA9bD91LnN1YnN0cigwLHUubGVuZ3RoLTEpOnUsZD0wLGc9bD8iKiI6IiIpO2xldCBfPXQzKHAsZyxoKTthW19dPWFbX118fFtdO2xldCB5PVFTKHAsZyxoLCtkLHMscik7YVtfXS5wdXNoKHkpfSksSGUuZWFjaChhLGZ1bmN0aW9uKHMsbCl7aWYocy5sZW5ndGg8MilyZXR1cm47cy5zb3J0KGZ1bmN0aW9uKHUsaCl7cmV0dXJuK3UuY2x1c3RlcklkLStoLmNsdXN0ZXJJZH0pO2xldCBjPVtzWzBdXTtmb3IobGV0IHU9MTt1PHMubGVuZ3RoO3UrKyl7bGV0IGg9c1t1XTtpZihoLmNsdXN0ZXJJZD09PWNbYy5sZW5ndGgtMV0uY2x1c3RlcklkKzEpe2MucHVzaChoKTtjb250aW51ZX14SChjLG4sK28sdCxyKSxjPVtoXX14SChjLG4sK28sdCxyKX0pfSksbn1mdW5jdGlvbiBiY3IoZSx0LHIpe2xldCBuPXt9O3JldHVybiBIZS5lYWNoKGUsZnVuY3Rpb24oaSxvKXtpZihpLmxlbmd0aDw9MSlyZXR1cm47bGV0IGE9e30scz17fTtIZS5lYWNoKGksZnVuY3Rpb24oYyl7bGV0IHU9Yy5jaGFyQXQoYy5sZW5ndGgtMSk9PT0iKiIsaD1jLnNwbGl0KCIvIiksZj1oW2gubGVuZ3RoLTFdLHA9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmpvaW4oIi8iKSxkPS8oXGQrKS9nLGc9W10sXyx5LHgsYixTLEM9MDtmb3IoO189ZC5leGVjKGYpOykrK0MseT1mLnNsaWNlKDAsXy5pbmRleCkseD1fWzBdLGI9Zi5zbGljZShfLmluZGV4K19bMF0ubGVuZ3RoKSxTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSk7QzwxJiYoeT11P2Yuc3Vic3RyKDAsZi5sZW5ndGgtMSk6Zix4PTAsYj11PyIqIjoiIixTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSkpfSk7dmFyIGw9e307SGUuZWFjaChzLGZ1bmN0aW9uKGMsdSl7Yy5zb3J0KGZ1bmN0aW9uKHkseCl7cmV0dXJuIGFbeFswXV0uaWRzLmxlbmd0aC1hW3lbMF1dLmlkcy5sZW5ndGh9KTt2YXIgaD1jWzBdWzBdLGY9Y1swXVsxXTtsW2hdPWxbaF18fFtdO2xldCBwPXUuc3BsaXQoIi8iKSxkPXBbcC5sZW5ndGgtMV0sZz1wLnNsaWNlKDAscC5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBfPVFTKGFbaF0ucHJlZml4LGFbaF0uc3VmZml4LGcsK2YsdSxyKTtsW2hdLnB1c2goXyl9KSxIZS5lYWNoKGwsZnVuY3Rpb24oYyx1KXtpZihjLmxlbmd0aDwyKXJldHVybjtjLnNvcnQoZnVuY3Rpb24oZixwKXtyZXR1cm4rZi5jbHVzdGVySWQtK3AuY2x1c3RlcklkfSk7bGV0IGg9W2NbMF1dO2ZvcihsZXQgZj0xO2Y8Yy5sZW5ndGg7ZisrKXtsZXQgcD1jW2ZdO2lmKHAuY2x1c3RlcklkPT09aFtoLmxlbmd0aC0xXS5jbHVzdGVySWQrMSl7aC5wdXNoKHApO2NvbnRpbnVlfXhIKGgsbiwrbyx0LHIpLGg9W3BdfXhIKGgsbiwrbyx0LHIpfSl9KSxufWZ1bmN0aW9uIHhIKGUsdCxyLG4saSl7aWYoZS5sZW5ndGg+MSl7bGV0IG89dDMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQsZVswXS5jbHVzdGVySWQsZVtlLmxlbmd0aC0xXS5jbHVzdGVySWQpLGE9UVMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQscixvLGkpO0hlLmVhY2goZSxmdW5jdGlvbihzKXthLmlkcy5wdXNoKHMuY2x1c3RlcklkKSxhLm1ldGFncmFwaC5zZXROb2RlKHMubmFtZSxuLm5vZGUocy5uYW1lKSl9KSx0W29dPWF9fXZhciBtZT1FZShPZSgpLDEpO3ZhciB5MD17REVGQVVMVF9GSUxMOiIjZmZmZmZmIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiIsQ09NUEFUSUJMRToiIzBmOWQ1OCIsSU5DT01QQVRJQkxFOiIjZGI0NDM3In0sS3U9e0RFRkFVTFRfRklMTDoiI2Q5ZDlkOSIsREVGQVVMVF9TVFJPS0U6IiNhNmE2YTYiLFNBVFVSQVRJT046LjYsTElHSFRORVNTOi44NSxFWFBBTkRFRF9DT0xPUjoiI2YwZjBmMCIsSFVFUzpbMjIwLDEwMCwxODAsNDAsMjAsMzQwLDI2MCwzMDAsMTQwLDYwXSxTVFJVQ1RVUkVfUEFMRVRURShlLHQpe2xldCByPUt1LkhVRVMsbj1yLmxlbmd0aCxpPXJbZSVuXSxvPU1hdGguc2luKGkqTWF0aC5QSS8zNjApLGE9dD8zMDo5MC02MCpvLHM9dD85NTo4MDtyZXR1cm4gVm0oaSwuMDEqYSwuMDEqcykudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoZSl7cmV0dXJuIEt1LlNUUlVDVFVSRV9QQUxFVFRFKGUpfSxYTEFfQ0xVU1RFUl9QQUxFVFRFKGUpe3JldHVybiBLdS5TVFJVQ1RVUkVfUEFMRVRURShlKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9LFZsdD17REVGQVVMVF9GSUxMOiJ3aGl0ZSIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIifSxYbz17bWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0sd2NyPW5ldyBSZWdFeHAoIl4oPzoiK1NhKyIpPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIiksbG89Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuaGllcmFyY2h5PXQsdGhpcy5kaXNwbGF5aW5nU3RhdHM9cix0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9bix0aGlzLmluZGV4PXt9LHRoaXMucmVuZGVyZWRPcE5hbWVzPVtdLHRoaXMuY29tcHV0ZVNjYWxlcygpLHRoaXMuaGFzU3ViaGllcmFyY2h5PXt9LHRoaXMucm9vdD1uZXcgU0godC5yb290LHQuZ3JhcGhPcHRpb25zKSx0aGlzLmluZGV4W3Qucm9vdC5uYW1lXT10aGlzLnJvb3QsdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0LnJvb3QubmFtZSksdGhpcy5idWlsZFN1YmhpZXJhcmNoeSh0LnJvb3QubmFtZSksdGhpcy5yb290LmV4cGFuZGVkPSEwLHRoaXMudHJhY2VJbnB1dHM9ITF9Y29tcHV0ZVNjYWxlcygpe3RoaXMuZGV2aWNlQ29sb3JNYXA9Z3UoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UobWUubWFwKElyKHRoaXMuaGllcmFyY2h5LmRldmljZXMubGVuZ3RoKSxLdS5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWd1KCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShtZS5tYXAoSXIodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxLdS5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IHQ9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGgscj1sdSh0Lm5vZGVzKCksKGksbyk9PntsZXQgYT10Lm5vZGUoaSk7aWYoYS5zdGF0cyE9bnVsbClyZXR1cm4gYS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPU9uKCkuZG9tYWluKFswLHJdKS5yYW5nZShYby5taW5NYXhDb2xvcnMpO2xldCBuPWx1KHQubm9kZXMoKSwoaSxvKT0+e2xldCBhPXQubm9kZShpKTtpZihhLnN0YXRzIT1udWxsKXJldHVybiBhLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9T24oKS5kb21haW4oWzAsbl0pLnJhbmdlKFhvLm1pbk1heENvbG9ycyksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP1hzZTpPbigpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbUTQsdFBdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxyKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7bGV0IG49bWUuc3VtKE9iamVjdC5rZXlzKHQpLm1hcChpPT50W2ldKSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChpPT4oe2NvbG9yOnIoaSkscHJvcG9ydGlvbjp0W2ldL259KSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgcj10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFyKXJldHVybiBudWxsO2xldCBuPXIuaXNHcm91cE5vZGU/bmV3IFNIKHIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgR2Yocik7dGhpcy5pbmRleFt0XT1uLHRoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2godCksci5zdGF0cyYmKG4ubWVtb3J5Q29sb3I9dGhpcy5tZW1vcnlVc2FnZVNjYWxlKHIuc3RhdHMudG90YWxCeXRlcyksbi5jb21wdXRlVGltZUNvbG9yPXRoaXMuY29tcHV0ZVRpbWVTY2FsZShyLnN0YXRzLmdldFRvdGFsTWljcm9zKCkpKSxuLmlzRmFkZWRPdXQ9dGhpcy5kaXNwbGF5aW5nU3RhdHMmJiFnSChyLnN0YXRzKTt2YXIgaT1udWxsLG89bnVsbCxhPW51bGw7aWYoci5pc0dyb3VwTm9kZSl7aT1yLmRldmljZUhpc3RvZ3JhbSxvPXIueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgcz1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxsPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7KHMhPTB8fGwhPTApJiYoYT1zLyhzK2wpKX1lbHNle2xldCBzPW4ubm9kZS5kZXZpY2U7cyYmKGk9e1tzXToxfSk7bGV0IGw9bi5ub2RlLnhsYUNsdXN0ZXI7bCYmKG89e1tsXToxfSksbi5ub2RlLnR5cGU9PT1qdC5PUCYmKGE9bi5ub2RlLmNvbXBhdGlibGU/MTowKX1yZXR1cm4gaSYmKG4uZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaSx0aGlzLmRldmljZUNvbG9yTWFwKSksbyYmKG4ueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKG8sdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKSxhIT1udWxsJiYobi5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6eTAuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOmF9LHtjb2xvcjp5MC5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLWF9XSksdGhpcy5pbmRleFt0XX1nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpe2xldCByPWNQKHQpLG49MCxpPW51bGwsbz10O2Zvcig7bjxyLmxlbmd0aCYmKG89cltuXSxpPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKSwhIWkuZXhwYW5kZWQpO24rKyk7aWYobj09ci5sZW5ndGgtMil7bGV0IGE9cltuKzFdO2lmKGkhPW51bGwmJmkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbYV18fGkhPW51bGwmJmkub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW2FdKXJldHVybiBhfXJldHVybiBvfXNldERlcHRoKHQpe3lsZSh0aGlzLnJvb3QsK3QpfWlzTm9kZUF1eGlsaWFyeSh0KXtsZXQgcj10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUodC5ub2RlLnBhcmVudE5vZGUubmFtZSksbj1tZS5maW5kKHIuaXNvbGF0ZWRJbkV4dHJhY3QsaT0+aS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSk7cmV0dXJuIG4/ITA6KG49bWUuZmluZChyLmlzb2xhdGVkT3V0RXh0cmFjdCxpPT5pLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQscixuLGkpe2xldCBvPW4ubmFtZS5yZXBsYWNlKHIsaSksYT10Lm1ldGFncmFwaC5ub2RlKG8pO2lmKGEpcmV0dXJuIGE7YT1uZXcgXzAoe25hbWU6byxpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOm1lLmNsb25lRGVlcChuLmF0dHIpfSksYS5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5vdXRwdXRTaGFwZXM9bWUuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxhLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLGEuZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LGEuZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsYS5pbnB1dHM9bi5pbnB1dHMubWFwKGw9PntsZXQgYz1tZS5jbG9uZShsKTtyZXR1cm4gYy5uYW1lPWwubmFtZS5yZXBsYWNlKHIsaSksY30pLGEucGFyZW50Tm9kZT10LHQubWV0YWdyYXBoLnNldE5vZGUoYS5uYW1lLGEpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUoYS5uYW1lLGEpO2xldCBzPWw9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LHIsbCxpKTtyZXR1cm4gYS5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKHMpLGEub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKHMpLGF9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LHIsbixpLG8pe2xldCBhPXt9LHM9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQscixuLGksbyxhKTtyZXR1cm4gbWUuaXNFbXB0eShhKXx8dGhpcy5wYXRjaEVkZ2VzRnJvbUZ1bmN0aW9uT3V0cHV0cyhyLGEpLHN9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LHIsbixpLG8sYSl7bGV0IHM9bFAobi5uYW1lLnJlcGxhY2UoaSxvKSk7cmV0dXJuIHMuZGVwdGg9bi5kZXB0aCxzLmNhcmRpbmFsaXR5PW4uY2FyZGluYWxpdHkscy50ZW1wbGF0ZUlkPW4udGVtcGxhdGVJZCxzLm9wSGlzdG9ncmFtPW1lLmNsb25lKG4ub3BIaXN0b2dyYW0pLHMuZGV2aWNlSGlzdG9ncmFtPW1lLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxzLnhsYUNsdXN0ZXJIaXN0b2dyYW09bWUuY2xvbmUobi54bGFDbHVzdGVySGlzdG9ncmFtKSxzLmhhc05vbkNvbnRyb2xFZGdlcz1uLmhhc05vbkNvbnRyb2xFZGdlcyxzLmluY2x1ZGU9bi5pbmNsdWRlLHMubm9kZUF0dHJpYnV0ZXM9bWUuY2xvbmUobi5ub2RlQXR0cmlidXRlcykscy5hc3NvY2lhdGVkRnVuY3Rpb249bi5hc3NvY2lhdGVkRnVuY3Rpb24sbWUuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLGw9PntsZXQgYz1uLm1ldGFncmFwaC5ub2RlKGwpO3N3aXRjaChjLnR5cGUpe2Nhc2UganQuTUVUQTpsZXQgdT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxyLGMsaSxvLGEpO3UucGFyZW50Tm9kZT1zLHMubWV0YWdyYXBoLnNldE5vZGUodS5uYW1lLHUpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUodS5uYW1lLHUpO2JyZWFrO2Nhc2UganQuT1A6bGV0IGg9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHMsaSxjLG8pO21lLmlzTnVtYmVyKGguZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHIsaCksbWUuaXNOdW1iZXIoaC5mdW5jdGlvbk91dHB1dEluZGV4KSYmKGFbaC5mdW5jdGlvbk91dHB1dEluZGV4XT1oKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihjLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixzLGksbyksc31jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQscixuLGkpe21lLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSxvPT57bGV0IGE9dC5tZXRhZ3JhcGguZWRnZShvKSxzPWEudi5yZXBsYWNlKG4saSksbD1hLncucmVwbGFjZShuLGkpLGM9bmV3IHFmKHMsbCk7Yy5pbmJvdW5kPWEuaW5ib3VuZCxjLm51bVJlZ3VsYXJFZGdlcz1hLm51bVJlZ3VsYXJFZGdlcyxjLm51bUNvbnRyb2xFZGdlcz1hLm51bUNvbnRyb2xFZGdlcyxjLm51bVJlZkVkZ2VzPWEubnVtUmVmRWRnZXMsYy50b3RhbFNpemU9YS50b3RhbFNpemUsYS5iYXNlRWRnZUxpc3QmJihjLmJhc2VFZGdlTGlzdD1hLmJhc2VFZGdlTGlzdC5tYXAodT0+e2xldCBoPW1lLmNsb25lKHUpO3JldHVybiBoLnY9dS52LnJlcGxhY2UobixpKSxoLnc9dS53LnJlcGxhY2UobixpKSxofSkpLHIubWV0YWdyYXBoLm5vZGUobCk/ci5tZXRhZ3JhcGguc2V0RWRnZShzLGwsYyk6ci5tZXRhZ3JhcGguc2V0RWRnZShsLHMsYyl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQscil7bGV0IG49TWF0aC5taW4oci5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9bWUuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtyLmlucHV0cy5wdXNoKGkpO2xldCBvPXRoaXMuaGllcmFyY2h5LmdldFByZWRlY2Vzc29ycyh0Lm5hbWUpLGEscz0wO21lLmVhY2goby5yZWd1bGFyLGw9PntpZihzKz1sLm51bVJlZ3VsYXJFZGdlcyxzPm4pcmV0dXJuIGE9bCwhMX0pLG1lLmVhY2goYS5iYXNlRWRnZUxpc3QsbD0+e2wudz09PXQubmFtZSYmKGwudz1yLm5hbWUpLGwudj09PXQubmFtZSYmKGwudj1yLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHModCxyKXtsZXQgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7bWUuZWFjaChuLnJlZ3VsYXIsaT0+e21lLmVhY2goaS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPXRoaXMuaGllcmFyY2h5Lm5vZGUoby53KTttZS5lYWNoKGEuaW5wdXRzLHM9PntpZihzLm5hbWU9PT10Lm5hbWUpe2xldCBsPXJbcy5vdXRwdXRUZW5zb3JLZXldO3MubmFtZT1sLm5hbWUscy5vdXRwdXRUZW5zb3JLZXk9by5vdXRwdXRUZW5zb3JLZXl9fSl9KSxtZS5lYWNoKGkuYmFzZUVkZ2VMaXN0LG89PntvLnY9cltvLm91dHB1dFRlbnNvcktleV0ubmFtZSxvLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCByPXRoaXMuaW5kZXhbdF07aWYoci5ub2RlLnR5cGUhPT1qdC5NRVRBJiZyLm5vZGUudHlwZSE9PWp0LlNFUklFUylyZXR1cm47bGV0IG49cixpPW4ubm9kZS5tZXRhZ3JhcGgsbz1uLmNvcmVHcmFwaCxhPVtdLHM9W107bWUuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KG1lLmVhY2goaS5ub2RlcygpLGQ9PntsZXQgZz1pLm5vZGUoZCksXz10aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2cub3BdO2lmKCFffHxkLmluZGV4T2YoU2EpPT09MClyZXR1cm47bGV0IHk9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKGksZyxfLm5vZGUsXy5ub2RlLm5hbWUsZy5uYW1lKTthLnB1c2goZykscy5wdXNoKHkpfSksbWUuZWFjaChzLChkLGcpPT57bGV0IF89YVtnXTtkLnBhcmVudE5vZGU9Xy5wYXJlbnROb2RlLGkuc2V0Tm9kZShfLm5hbWUsZCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShfLm5hbWUsZCl9KSksbWUuZWFjaChpLm5vZGVzKCksZD0+e2xldCBnPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGQpLF89Zy5ub2RlO28uc2V0Tm9kZShkLGcpLF8uaXNHcm91cE5vZGV8fChtZS5lYWNoKF8uaW5FbWJlZGRpbmdzLHk9PntsZXQgeD1uZXcgT2QobnVsbCksYj1uZXcgR2YoeSk7Z2xlKGcseSxiLHgsZ2kuQ09OU1RBTlQpLHRoaXMuaW5kZXhbeS5uYW1lXT1ifSksbWUuZWFjaChfLm91dEVtYmVkZGluZ3MseT0+e2xldCB4PW5ldyBPZChudWxsKSxiPW5ldyBHZih5KTtfbGUoZyx5LGIseCxnaS5TVU1NQVJZKSx0aGlzLmluZGV4W3kubmFtZV09Yn0pKX0pLG1lLmVhY2goaS5lZGdlcygpLGQ9PntsZXQgZz1pLmVkZ2UoZCksXz1uZXcgT2QoZyk7Xy5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbZC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W2Qud10uaXNGYWRlZE91dCxvLnNldEVkZ2UoZC52LGQudyxfKX0pLG4ubm9kZS50eXBlPT09anQuTUVUQSYmUGNyKG4sdGhpcy5hdXRvRXh0cmFjdE5vZGVzKSxtZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PXFjJiZtZS5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoZCxnKT0+e2xldCBfPWQubm9kZSx5PXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKF8ubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKHkpLHkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsby5yZW1vdmVOb2RlKF8ubmFtZSl9KTtsZXQgbD1uLm5vZGUucGFyZW50Tm9kZTtpZighbClyZXR1cm47bGV0IGM9dGhpcy5pbmRleFtsLm5hbWVdLHU9KGQsLi4uZyk9PmcuY29uY2F0KFtkPyJJTiI6Ik9VVCJdKS5qb2luKCJ+fiIpLGg9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgodCksZj17aW46e30sb3V0Ont9LGNvbnRyb2w6e319O21lLmVhY2goaC5lZGdlcygpLGQ9PntsZXQgZz0hIWkubm9kZShkLncpLF89Zz9kLnY6ZC53O2guZWRnZShkKS5udW1SZWd1bGFyRWRnZXM/Zz9mLm91dFtfXT0oZi5vdXRbX118fDApKzE6Zi5pbltfXT0oZi5pbltfXXx8MCkrMTpmLmNvbnRyb2xbX109KGYuY29udHJvbFtfXXx8MCkrMX0pO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTttZS5lYWNoKGguZWRnZXMoKSxkPT57bGV0IGc9aC5lZGdlKGQpLF89ISFpLm5vZGUoZC53KSxbeSx4XT1fP1tkLncsZC52XTpbZC52LGQud10sYj10aGlzLmluZGV4W3ldLFM9dGhpcy5pbmRleFt4XSxDPVM/Uy5ub2RlOnBbeF0sUD0hZy5udW1SZWd1bGFyRWRnZXMmJmYuY29udHJvbFt4XT5Yby5tYXhDb250cm9sRGVncmVlLFssa109Xz9bci5pbkFubm90YXRpb25zLGIuaW5Bbm5vdGF0aW9uc106W3Iub3V0QW5ub3RhdGlvbnMsYi5vdXRBbm5vdGF0aW9uc10sRD0oXz9mLm91dDpmLmluKVt4XT5Yby5tYXhCcmlkZ2VQYXRoRGVncmVlLEI9bnVsbCxJPSExO2lmKFhvLmVuYWJsZUJyaWRnZWdyYXBoJiYhRCYmIVAmJmIuaXNJbkNvcmUoKSl7bGV0IFc9Wj0+e2xldCBydD1fP3t2Olosdzp0fTp7djp0LHc6Wn07cmV0dXJuIGMuY29yZUdyYXBoLmVkZ2UocnQpfTtCPVcoeCksQnx8KEI9Vyh1KF8seCxsLm5hbWUpKSksST0hIUJ9bGV0IEw9ITE7aWYoQiYmIWcubnVtUmVndWxhckVkZ2VzKXtsZXQgVz1CLFo9Yy5ub2RlO2Zvcig7Vy5hZGpvaW5pbmdNZXRhZWRnZTspVz1XLmFkam9pbmluZ01ldGFlZGdlLFo9Wi5wYXJlbnROb2RlO2xldCBydD10aGlzLmhpZXJhcmNoeS5nZXRUb3BvbG9naWNhbE9yZGVyaW5nKFoubmFtZSksb3Q9Vy5tZXRhZWRnZTtMPXJ0W290LnZdPnJ0W290LnddfWlmKEk9SSYmIUwsIUkpe2sucHVzaChuZXcgaTMoQyxTLG5ldyBPZChnKSxnaS5TSE9SVENVVCxfKSk7cmV0dXJufWxldCBSPXUoXyx0KSxGPXUoXyx4LHQpLHo9by5ub2RlKEYpO2lmKCF6KXtsZXQgVz1vLm5vZGUoUik7aWYoIVcpe2xldCBydD17bmFtZTpSLHR5cGU6anQuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTp1ci5VTlNQRUNJRklFRCxpbmJvdW5kOl8sbm9kZUF0dHJpYnV0ZXM6e319O1c9bmV3IEdmKHJ0KSx0aGlzLmluZGV4W1JdPVcsby5zZXROb2RlKFIsVyl9bGV0IFo9e25hbWU6Rix0eXBlOmp0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6dXIuVU5TUEVDSUZJRUQsaW5ib3VuZDpfLG5vZGVBdHRyaWJ1dGVzOnt9fTt6PW5ldyBHZihaKSx0aGlzLmluZGV4W0ZdPXosby5zZXROb2RlKEYseiksby5zZXRQYXJlbnQoRixSKSxXLm5vZGUuY2FyZGluYWxpdHkrK31sZXQgVT1uZXcgT2QoZyk7VS5hZGpvaW5pbmdNZXRhZWRnZT1CLF8/by5zZXRFZGdlKEYseSxVKTpvLnNldEVkZ2UoeSxGLFUpfSksbWUuZWFjaChbITAsITFdLGQ9PntsZXQgZz11KGQsdCksXz1vLm5vZGUoZyk7IV98fG1lLmVhY2goby5ub2RlcygpLHk9Pnt2YXIgayxPO2lmKG8ubm9kZSh5KS5ub2RlLnR5cGU9PT1qdC5CUklER0V8fCEoZD8hKChrPW8ucHJlZGVjZXNzb3JzKHkpKSE9bnVsbCYmay5sZW5ndGgpOiEoKE89by5zdWNjZXNzb3JzKHkpKSE9bnVsbCYmTy5sZW5ndGgpKSlyZXR1cm47bGV0IFM9dShkLHQsIlNUUlVDVFVSQUxfVEFSR0VUIiksQz1vLm5vZGUoUyk7aWYoIUMpe2xldCBEPXtuYW1lOlMsdHlwZTpqdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOnVyLlVOU1BFQ0lGSUVELGluYm91bmQ6ZCxub2RlQXR0cmlidXRlczp7fX07Qz1uZXcgR2YoRCksQy5zdHJ1Y3R1cmFsPSEwLHRoaXMuaW5kZXhbU109QyxvLnNldE5vZGUoUyxDKSxfLm5vZGUuY2FyZGluYWxpdHkrKyxvLnNldFBhcmVudChTLGcpfWxldCBQPW5ldyBPZChudWxsKTtQLnN0cnVjdHVyYWw9ITAsUC53ZWlnaHQtLSxkP28uc2V0RWRnZShTLHksUCk6by5zZXRFZGdlKHksUyxQKX0pfSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXttZS5lYWNoKHQuZWRnZXMoKSxyPT57bGV0IG49dC5lZGdlKHIpLGk9bmV3IE9kKG4pO21lLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPW8udi5zcGxpdChBbCk7Zm9yKGxldCBzPWEubGVuZ3RoO3M+PTA7cy0tKXtsZXQgbD1hLnNsaWNlKDAscyksYz10aGlzLmhpZXJhcmNoeS5ub2RlKGwuam9pbihBbCkpO2lmKGMpe2lmKGMudHlwZT09PWp0Lk9QJiZ0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2Mub3BdKWZvcihsZXQgdT0xO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sLnNsaWNlKDAsdSkuam9pbihBbCk7IWh8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoaCl9YnJlYWt9fX0pfSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89cix0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1vLHRoaXMucG9pbnRzPVtdfX0sZ2k7KGZ1bmN0aW9uKGUpe2VbZS5TSE9SVENVVD0wXT0iU0hPUlRDVVQiLGVbZS5DT05TVEFOVD0xXT0iQ09OU1RBTlQiLGVbZS5TVU1NQVJZPTJdPSJTVU1NQVJZIixlW2UuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKGdpfHwoZ2k9e30pKTt2YXIgd0g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8WG8ubWF4QW5ub3RhdGlvbnMpe3RoaXMubGlzdC5wdXNoKHQpO3JldHVybn1sZXQgcj10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihyLmFubm90YXRpb25UeXBlPT09Z2kuRUxMSVBTSVMpe2xldCBpPXIubm9kZTtpLnNldE51bU1vcmVOb2RlcygrK2kubnVtTW9yZU5vZGVzKTtyZXR1cm59bGV0IG49bmV3IF9IKDEpO3RoaXMubGlzdC5wdXNoKG5ldyBpMyhuLG5ldyBHZihuKSxudWxsLGdpLkVMTElQU0lTLHQuaXNJbikpfX0sR2Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5ub2RlPXQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmluQW5ub3RhdGlvbnM9bmV3IHdILHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IHdILHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKEFsKSsxKSx0LnR5cGU9PT1qdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7bGV0IHI9dGhpcy5kaXNwbGF5TmFtZS5tYXRjaCh3Y3IpO3I/dGhpcy5kaXNwbGF5TmFtZT1yWzFdOm1lLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxTYSkmJih0aGlzLmRpc3BsYXlOYW1lPXRoaXMuZGlzcGxheU5hbWUuc3Vic3RyaW5nKFNhLmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX0sT2Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fTtmdW5jdGlvbiBnbGUoZSx0LHIsbixpKXtsZXQgbz1uZXcgaTModCxyLG4saSwhMCk7ZS5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gX2xlKGUsdCxyLG4saSl7bGV0IG89bmV3IGkzKHQscixuLGksITEpO2Uub3V0QW5ub3RhdGlvbnMucHVzaChvKX1mdW5jdGlvbiBTY3IoZSx0KXttZS5lYWNoKGUubm9kZXMoKSxyPT57bGV0IG49ZS5ub2RlKHIpO2lmKG4uZXhwYW5kZWQ9dD4xLHQ+MClzd2l0Y2gobi5ub2RlLnR5cGUpe2Nhc2UganQuTUVUQTpjYXNlIGp0LlNFUklFUzp5bGUobix0LTEpO2JyZWFrfX0pfXZhciBTSD1jbGFzcyBleHRlbmRzIEdme2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCk7bGV0IGk9dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1lMyhpLm5hbWUsZzAuQ09SRSxyKSx0aGlzLmluRXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5vdXRFeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNvbGF0ZWRJbkV4dHJhY3Q9W10sdGhpcy5pc29sYXRlZE91dEV4dHJhY3Q9W10sdGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19O2Z1bmN0aW9uIHlsZShlLHQpe2UuY29yZUdyYXBoJiZTY3IoZS5jb3JlR3JhcGgsdCl9ZnVuY3Rpb24gdVAoZSx0LHIpe2xldCBuPWUubm9kZSh0KSxpPWUubm9kZShyKSxvPWUuZWRnZSh0LHIpOyhuLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERSkmJm4ubm9kZS5pbmNsdWRlIT09dXIuRVhDTFVERSYmaS5ub2RlLmluY2x1ZGUhPT11ci5FWENMVURFfHwoX2xlKG4saS5ub2RlLGksbyxnaS5TSE9SVENVVCksZ2xlKGksbi5ub2RlLG4sbyxnaS5TSE9SVENVVCksZS5yZW1vdmVFZGdlKHQscikpfWZ1bmN0aW9uIFVsdChlLHQscil7dmFyIG87bGV0IG49ZS5jb3JlR3JhcGgsaT1uLm5vZGUodCk7aS5pc091dEV4dHJhY3Q9ITAsbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLChYby5kZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWV8fHIpJiZtZS5lYWNoKG4uc3VjY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sdCxhKX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaSksbi5yZW1vdmVOb2RlKHQpKX1mdW5jdGlvbiBxbHQoZSx0LHIpe3ZhciBvO2xldCBuPWUuY29yZUdyYXBoLGk9bi5ub2RlKHQpO2kuaXNJbkV4dHJhY3Q9ITAsbWUuZWFjaChuLnN1Y2Nlc3NvcnModCksKGEscyk9Pnt1UChuLHQsYSl9KSwoWG8uZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxyKSYmbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChpKSxuLnJlbW92ZU5vZGUodCkpfWZ1bmN0aW9uIHZsZShlLHQpe2lmKGUudHlwZT09PWp0Lk9QKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLm9wPT09dFtyXSlyZXR1cm4hMH1lbHNlIGlmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUuZ2V0Um9vdE9wKCk7aWYocil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoci5vcD09PXRbbl0pcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIE1jcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57dmFyIGksbzt0Lm5vZGUocikubm9kZS5pbmNsdWRlPT09dXIuRVhDTFVERSYmIXIuc3RhcnRzV2l0aChTYSkmJigoKGk9ZS5jb3JlR3JhcGgub3V0RWRnZXMocikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aCk+KChvPWUuY29yZUdyYXBoLmluRWRnZXMocikpPT1udWxsP3ZvaWQgMDpvLmxlbmd0aCk/VWx0KGUsciwhMCk6cWx0KGUsciwhMCkpfSl9ZnVuY3Rpb24gRWNyKGUpe2xldCB0PWUuY29yZUdyYXBoO21lLmVhY2godC5ub2RlcygpLHI9PntsZXQgbj10Lm5vZGUocik7bi5ub2RlLmluY2x1ZGU9PT11ci5VTlNQRUNJRklFRCYmdmxlKG4ubm9kZSxYby5vdXRFeHRyYWN0VHlwZXMpJiZVbHQoZSxyKX0pfWZ1bmN0aW9uIFRjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57bGV0IG49dC5ub2RlKHIpO24ubm9kZS5pbmNsdWRlPT09dXIuVU5TUEVDSUZJRUQmJnZsZShuLm5vZGUsWG8uaW5FeHRyYWN0VHlwZXMpJiZxbHQoZSxyKX0pfWZ1bmN0aW9uIENjcihlKXtsZXQgdD1lLmNvcmVHcmFwaCxyPXt9LG49e30saT0wO2lmKG1lLmVhY2godC5ub2RlcygpLF89Pnt2YXIgYixTLEMsUDtpZih0Lm5vZGUoXykubm9kZS5pbmNsdWRlIT09dXIuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCB5PW1lLnJlZHVjZSh0LnByZWRlY2Vzc29ycyhfKSwoayxPKT0+e2xldCBEPXQuZWRnZShPLF8pLm1ldGFlZGdlO3JldHVybiBrKyhELm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTt5PT09MCYmKChiPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Yi5sZW5ndGgpPjAmJih5PShTPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Uy5sZW5ndGgpO2xldCB4PW1lLnJlZHVjZSh0LnN1Y2Nlc3NvcnMoXyksKGssTyk9PntsZXQgRD10LmVkZ2UoXyxPKS5tZXRhZWRnZTtyZXR1cm4gaysoRC5udW1SZWd1bGFyRWRnZXM/MTowKX0sMCk7eD09PTAmJigoQz10LnN1Y2Nlc3NvcnMoXykpPT1udWxsP3ZvaWQgMDpDLmxlbmd0aCk+MCYmKHg9KFA9dC5zdWNjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6UC5sZW5ndGgpLHJbX109eSxuW19dPXgsaSsrfSksaTxYby5taW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uKXJldHVybjtsZXQgbz1Yby5taW5EZWdyZWVGb3JFeHRyYWN0aW9uLTEsYT1NYXRoLnJvdW5kKGkqLjc1KSxzPU1hdGgucm91bmQoaSouMjUpLGw9T2JqZWN0LmtleXMocikuc29ydCgoXyx5KT0+cltfXS1yW3ldKSxjPXJbbFthXV0sdT1yW2xbc11dLGg9YytjLXU7aD1NYXRoLm1heChoLG8pO2ZvcihsZXQgXz1pLTE7cltsW19dXT5oO18tLSlxbHQoZSxsW19dKTtsZXQgZj1PYmplY3Qua2V5cyhuKS5zb3J0KChfLHkpPT5uW19dLW5beV0pLHA9bltmW2FdXSxkPW5bZltzXV0sZz1wKyhwLWQpKjQ7Zz1NYXRoLm1heChnLG8pO2ZvcihsZXQgXz1pLTE7bltmW19dXT5nO18tLSl7bGV0IHk9dC5ub2RlKGZbX10pOyF5fHx5LmlzSW5FeHRyYWN0fHxVbHQoZSxmW19dKX19ZnVuY3Rpb24gQWNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9e307bWUuZWFjaCh0LmVkZ2VzKCksbj0+e3QuZWRnZShuKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXN8fCgocltuLnZdPXJbbi52XXx8W10pLnB1c2gobiksKHJbbi53XT1yW24ud118fFtdKS5wdXNoKG4pKX0pLG1lLmVhY2gociwobixpKT0+e24ubGVuZ3RoPlhvLm1heENvbnRyb2xEZWdyZWUmJm1lLmVhY2gobixvPT51UCh0LG8udixvLncpKX0pfWZ1bmN0aW9uIFBjcihlLHQpe01jcihlKSxYby5vdXRFeHRyYWN0VHlwZXMubGVuZ3RoJiZFY3IoZSksWG8uaW5FeHRyYWN0VHlwZXMubGVuZ3RoJiZUY3IoZSksdCYmQ2NyKGUpLFhvLm1heENvbnRyb2xEZWdyZWUmJkFjcihlKTtsZXQgcj1lLmNvcmVHcmFwaDttZS5lYWNoKHIubm9kZXMoKSxuPT57dmFyIGE7bGV0IGk9ci5ub2RlKG4pLG89KGE9ci5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDphLmxlbmd0aDtpZihpLm5vZGUuaW5jbHVkZT09PXVyLlVOU1BFQ0lGSUVEJiZvPT09MCl7bGV0IHM9aS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLGw9aS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7aS5pc0luRXh0cmFjdD8oZS5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGkpLGkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsci5yZW1vdmVOb2RlKG4pKTppLmlzT3V0RXh0cmFjdD8oZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSk6WG8uZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGUmJihzJiYhbD8oaS5pc0luRXh0cmFjdD0hMCxlLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goaSksaS5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERSxyLnJlbW92ZU5vZGUobikpOmwmJiFzJiYoaS5pc091dEV4dHJhY3Q9ITAsZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSkpfX0pfWZ1bmN0aW9uIHhsZShlLHQscil7bGV0IG49ci5zcGxpdCgiLyIpLGk9bltuLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsoaT09bnVsbD92b2lkIDA6aS5sZW5ndGgpPT09MiYmKG5bbi5sZW5ndGgtMV09aT09bnVsbD92b2lkIDA6aVsxXSk7bGV0IG89blswXSxhPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IHM9MTtzPG4ubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWp0Lk9QO3MrKyl0LmJ1aWxkU3ViaGllcmFyY2h5KG8pLGEuZXhwYW5kZWQ9ITAsZS5zZXROb2RlRXhwYW5kZWQoYSksbys9Ii8iK25bc10sYT10LmdldFJlbmRlck5vZGVCeU5hbWUobyk7cmV0dXJuIGEubm9kZS5uYW1lfXZhciBNbGU9RWUoT2x0KCksMSksWmU9RWUoT2UoKSwxKTt2YXIgVHI9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0scGFkZGluZzp7cGFkZGluZ1RvcDo0MCxwYWRkaW5nTGVmdDoyMH19LHN1YnNjZW5lOnttZXRhOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjIwLGV4dHJhY3RYT2Zmc2V0OjE1LGV4dHJhY3RZT2Zmc2V0OjIwfSxzZXJpZXM6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MTB9fSxub2RlU2l6ZTp7bWV0YTp7cmFkaXVzOjUsd2lkdGg6NjAsbWF4TGFiZWxXaWR0aDo1MixoZWlnaHQ6T24oKS5kb21haW4oWzEsMjAwXSkucmFuZ2UoWzE1LDYwXSkuY2xhbXAoITApLGV4cGFuZEJ1dHRvblJhZGl1czozfSxvcDp7d2lkdGg6MTUsaGVpZ2h0OjYscmFkaXVzOjMsbGFiZWxPZmZzZXQ6LTgsbWF4TGFiZWxXaWR0aDozMH0sc2VyaWVzOntleHBhbmRlZDp7cmFkaXVzOjEwLGxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDo0MH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19LG8zPTE0MDtmdW5jdGlvbiBNSChlKXtlLm5vZGUuaXNHcm91cE5vZGUmJkxjcihlKSxlLm5vZGUudHlwZT09PWp0Lk1FVEE/a2NyKGUpOmUubm9kZS50eXBlPT09anQuU0VSSUVTJiZSY3IoZSl9ZnVuY3Rpb24gSWNyKGUpe2UuaW5ib3hXaWR0aD1lLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9Uci5hbm5vdGF0aW9ucy5pbmJveFdpZHRoOjAsZS5vdXRib3hXaWR0aD1lLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/VHIuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCxlLmNvcmVCb3gud2lkdGg9ZS53aWR0aCxlLmNvcmVCb3guaGVpZ2h0PWUuaGVpZ2h0O2xldCB0PWUuZGlzcGxheU5hbWUubGVuZ3RoLHI9MztlLndpZHRoPU1hdGgubWF4KGUuY29yZUJveC53aWR0aCtlLmluYm94V2lkdGgrZS5vdXRib3hXaWR0aCx0KnIpfWZ1bmN0aW9uIExjcihlKXtsZXQgdD1lLmNvcmVHcmFwaC5ub2RlcygpLm1hcChyPT5lLmNvcmVHcmFwaC5ub2RlKHIpKS5jb25jYXQoZS5pc29sYXRlZEluRXh0cmFjdCxlLmlzb2xhdGVkT3V0RXh0cmFjdCxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtaZS5lYWNoKHQscj0+e3N3aXRjaChyLm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpaZS5leHRlbmQocixUci5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqdC5CUklER0U6WmUuZXh0ZW5kKHIsVHIubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIGp0Lk1FVEE6ci5leHBhbmRlZD9NSChyKTooWmUuZXh0ZW5kKHIsVHIubm9kZVNpemUubWV0YSksci5oZWlnaHQ9VHIubm9kZVNpemUubWV0YS5oZWlnaHQoci5ub2RlLmNhcmRpbmFsaXR5KSk7YnJlYWs7Y2FzZSBqdC5TRVJJRVM6aWYoci5leHBhbmRlZClaZS5leHRlbmQocixUci5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLE1IKHIpO2Vsc2V7bGV0IGk9ci5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz9Uci5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6VHIubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWw7WmUuZXh0ZW5kKHIsaSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIityLm5vZGUudHlwZSl9ci5leHBhbmRlZHx8SWNyKHIpLE5jcihyKX0pfWZ1bmN0aW9uIEVsZShlLHQpe1plLmV4dGVuZChlLmdyYXBoKCkse25vZGVzZXA6dC5ub2RlU2VwLHJhbmtzZXA6dC5yYW5rU2VwLGVkZ2VzZXA6dC5lZGdlU2VwfSk7bGV0IHI9W10sbj1bXTtpZihaZS5lYWNoKGUubm9kZXMoKSxsPT57ZS5ub2RlKGwpLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnB1c2gobCk6bi5wdXNoKGwpfSksIW4ubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtNbGUubGF5b3V0KGUpO2xldCBpPTEvMCxvPTEvMCxhPS0xLzAscz0tMS8wO3JldHVybiBaZS5lYWNoKG4sbD0+e2xldCBjPWUubm9kZShsKSx1PS41KmMud2lkdGgsaD1jLngtdSxmPWMueCt1O2k9aDxpP2g6aSxhPWY+YT9mOmE7bGV0IHA9LjUqYy5oZWlnaHQsZD1jLnktcCxnPWMueStwO289ZDxvP2Q6byxzPWc+cz9nOnN9KSxaZS5lYWNoKGUuZWRnZXMoKSxsPT57bGV0IGM9ZS5lZGdlKGwpO2lmKGMuc3RydWN0dXJhbClyZXR1cm47bGV0IHU9ZS5ub2RlKGMubWV0YWVkZ2UudiksaD1lLm5vZGUoYy5tZXRhZWRnZS53KTtpZihjLnBvaW50cy5sZW5ndGg9PT0zJiZEY3IoYy5wb2ludHMpKXtpZih1IT1udWxsKXtsZXQgZD11LmV4cGFuZGVkP3UueDp2MCh1KTtjLnBvaW50c1swXS54PWR9aWYoaCE9bnVsbCl7bGV0IGQ9aC5leHBhbmRlZD9oLng6djAoaCk7Yy5wb2ludHNbMl0ueD1kfWMucG9pbnRzPVtjLnBvaW50c1swXSxjLnBvaW50c1sxXV19bGV0IGY9Yy5wb2ludHNbYy5wb2ludHMubGVuZ3RoLTJdO2ghPW51bGwmJihjLnBvaW50c1tjLnBvaW50cy5sZW5ndGgtMV09U2xlKGYsaCkpO2xldCBwPWMucG9pbnRzWzFdO3UhPW51bGwmJihjLnBvaW50c1swXT1TbGUocCx1KSksWmUuZWFjaChjLnBvaW50cyxkPT57aT1kLng8aT9kLng6aSxhPWQueD5hP2QueDphLG89ZC55PG8/ZC55Om8scz1kLnk+cz9kLnk6c30pfSksWmUuZWFjaChlLm5vZGVzKCksbD0+e2xldCBjPWUubm9kZShsKTtjLngtPWksYy55LT1vfSksWmUuZWFjaChlLmVkZ2VzKCksbD0+e1plLmVhY2goZS5lZGdlKGwpLnBvaW50cyxjPT57Yy54LT1pLGMueS09b30pfSkse3dpZHRoOmEtaSxoZWlnaHQ6cy1vfX1mdW5jdGlvbiBrY3IoZSl7bGV0IHQ9VHIuc3Vic2NlbmUubWV0YTtaZS5leHRlbmQoZSx0KSxaZS5leHRlbmQoZS5jb3JlQm94LEVsZShlLmNvcmVHcmFwaCxUci5ncmFwaC5tZXRhKSk7bGV0IHI9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/WmUubWF4QnkoZS5pc29sYXRlZEluRXh0cmFjdCxjPT5jLndpZHRoKS53aWR0aDpudWxsO2UuaW5FeHRyYWN0Qm94LndpZHRoPXIhPW51bGw/cjowLGUuaW5FeHRyYWN0Qm94LmhlaWdodD1aZS5yZWR1Y2UoZS5pc29sYXRlZEluRXh0cmFjdCwoYyx1LGgpPT57bGV0IGY9aD4wP3QuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gdS54PTAsdS55PWMrZit1LmhlaWdodC8yLGMrZit1LmhlaWdodH0sMCk7bGV0IG49ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1plLm1heEJ5KGUuaXNvbGF0ZWRPdXRFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5vdXRFeHRyYWN0Qm94LndpZHRoPW4hPW51bGw/bjowLGUub3V0RXh0cmFjdEJveC5oZWlnaHQ9WmUucmVkdWNlKGUuaXNvbGF0ZWRPdXRFeHRyYWN0LChjLHUsaCk9PntsZXQgZj1oPjA/dC5leHRyYWN0WU9mZnNldDowO3JldHVybiB1Lng9MCx1Lnk9YytmK3UuaGVpZ2h0LzIsYytmK3UuaGVpZ2h0fSwwKTtsZXQgaT1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9aZS5tYXhCeShlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPWkhPW51bGw/aTowLGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9WmUucmVkdWNlKGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsKGMsdSxoKT0+e2xldCBmPWg+MD90LmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIHUueD0wLHUueT1jK2YrdS5oZWlnaHQvMixjK2YrdS5oZWlnaHR9LDApO2xldCBvPTA7ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wJiZvKyssZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuY29yZUdyYXBoLm5vZGVDb3VudCgpPjAmJm8rKztsZXQgYT1Uci5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9bzw9MT8wOm8qYSxsPU1hdGgubWF4KG8zLGUuaW5FeHRyYWN0Qm94LndpZHRoK2Uub3V0RXh0cmFjdEJveC53aWR0aCk7ZS5jb3JlQm94LndpZHRoKz1sK3MrZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK3MsZS5jb3JlQm94LmhlaWdodD10LmxhYmVsSGVpZ2h0K01hdGgubWF4KGUuaW5FeHRyYWN0Qm94LmhlaWdodCxlLmNvcmVCb3guaGVpZ2h0LGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsZS5vdXRFeHRyYWN0Qm94LmhlaWdodCksZS53aWR0aD1lLmNvcmVCb3gud2lkdGgrdC5wYWRkaW5nTGVmdCt0LnBhZGRpbmdSaWdodCxlLmhlaWdodD1lLnBhZGRpbmdUb3ArZS5jb3JlQm94LmhlaWdodCtlLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gUmNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9VHIuc3Vic2NlbmUuc2VyaWVzO1plLmV4dGVuZChlLHIpLFplLmV4dGVuZChlLmNvcmVCb3gsRWxlKGUuY29yZUdyYXBoLFRyLmdyYXBoLnNlcmllcykpLFplLmVhY2godC5ub2RlcygpLG49Pnt0Lm5vZGUobikuZXhjbHVkZWQ9ITF9KSxlLndpZHRoPWUuY29yZUJveC53aWR0aCtyLnBhZGRpbmdMZWZ0K3IucGFkZGluZ1JpZ2h0LGUuaGVpZ2h0PWUuY29yZUJveC5oZWlnaHQrci5wYWRkaW5nVG9wK3IucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBOY3IoZSl7aWYoZS5leHBhbmRlZClyZXR1cm47bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3Qscj1lLm91dEFubm90YXRpb25zLmxpc3Q7WmUuZWFjaCh0LHU9PmJsZSh1KSksWmUuZWFjaChyLHU9PmJsZSh1KSk7bGV0IG49VHIuYW5ub3RhdGlvbnMsaT1aZS5yZWR1Y2UodCwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PS0oZS5jb3JlQm94LndpZHRoK2gud2lkdGgpLzItbi54T2Zmc2V0LGguZHk9dStwK2guaGVpZ2h0LzIsdStwK2guaGVpZ2h0fSwwKTtaZS5lYWNoKHQsdT0+e3UuZHktPWkvMix1LmxhYmVsT2Zmc2V0PW4ubGFiZWxPZmZzZXR9KTtsZXQgbz1aZS5yZWR1Y2UociwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PShlLmNvcmVCb3gud2lkdGgraC53aWR0aCkvMituLnhPZmZzZXQsaC5keT11K3AraC5oZWlnaHQvMix1K3AraC5oZWlnaHR9LDApO1plLmVhY2gocix1PT57dS5keS09by8yLHUubGFiZWxPZmZzZXQ9bi5sYWJlbE9mZnNldH0pO2xldCBhPU1hdGgubWluKGUuaGVpZ2h0LzItZS5yYWRpdXMsaS8yKTthPWE8MD8wOmE7bGV0IHM9T24oKS5kb21haW4oWzAsdC5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7WmUuZWFjaCh0LCh1LGgpPT57dS5wb2ludHM9W3tkeDp1LmR4K3Uud2lkdGgvMixkeTp1LmR5fSx7ZHg6LWUuY29yZUJveC53aWR0aC8yLGR5OnQubGVuZ3RoPjE/cyhoKTowfV19KTtsZXQgbD1NYXRoLm1pbihlLmhlaWdodC8yLWUucmFkaXVzLG8vMik7bD1sPDA/MDpsO2xldCBjPU9uKCkuZG9tYWluKFswLHIubGVuZ3RoLTFdKS5yYW5nZShbLWwsbF0pO1plLmVhY2gociwodSxoKT0+e3UucG9pbnRzPVt7ZHg6ZS5jb3JlQm94LndpZHRoLzIsZHk6ci5sZW5ndGg+MT9jKGgpOjB9LHtkeDp1LmR4LXUud2lkdGgvMixkeTp1LmR5fV19KSxlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCxpLG8pfWZ1bmN0aW9uIGJsZShlKXtzd2l0Y2goZS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBnaS5DT05TVEFOVDpaZS5leHRlbmQoZSxUci5jb25zdGFudC5zaXplKTticmVhaztjYXNlIGdpLlNIT1JUQ1VUOmlmKGUubm9kZS50eXBlPT09anQuT1ApWmUuZXh0ZW5kKGUsVHIuc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKGUubm9kZS50eXBlPT09anQuTUVUQSlaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZihlLm5vZGUudHlwZT09PWp0LlNFUklFUylaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBnaS5TVU1NQVJZOlplLmV4dGVuZChlLFRyLmNvbnN0YW50LnNpemUpO2JyZWFrfX1mdW5jdGlvbiB2MChlKXtpZihlLmV4cGFuZGVkKXJldHVybiBlLng7bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2UuaW5ib3hXaWR0aDowO3JldHVybiBlLngtZS53aWR0aC8yK3QrZS5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24gd2xlKGUsdCl7bGV0IHI9dC54LWUueCxuPXQueS1lLnk7cmV0dXJuIDE4MCpNYXRoLmF0YW4obi9yKS9NYXRoLlBJfWZ1bmN0aW9uIERjcihlKXtsZXQgdD13bGUoZVswXSxlWzFdKTtmb3IobGV0IHI9MTtyPGUubGVuZ3RoLTE7cisrKXtsZXQgbj13bGUoZVtyXSxlW3IrMV0pO2lmKE1hdGguYWJzKG4tdCk+MSlyZXR1cm4hMTt0PW59cmV0dXJuITB9ZnVuY3Rpb24gU2xlKGUsdCl7bGV0IHI9dC5leHBhbmRlZD90Lng6djAodCksbj10LnksaT1lLngtcixvPWUueS1uLGE9dC5leHBhbmRlZD90LndpZHRoOnQuY29yZUJveC53aWR0aCxzPXQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCxsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmEvMj5NYXRoLmFicyhpKSpzLzI/KG88MCYmKHM9LXMpLGw9bz09PTA/MDpzLzIqaS9vLGM9cy8yKTooaTwwJiYoYT0tYSksbD1hLzIsYz1pPT09MD8wOmEvMipvL2kpLHt4OnIrbCx5Om4rY319dmFyIFBsPW0wLEhpPXZlLE9jcj0zMjAsemNyPTE1MCxmUD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMUUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMUUifV07ZnVuY3Rpb24gQ2xlKGUsdCxyLG4pe2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1udWxsO3RyeXtpZihvPXQuZ2V0QkJveCgpLChvPT1udWxsP3ZvaWQgMDpvLndpZHRoKT09PTApcmV0dXJufWNhdGNoKGMpe3JldHVybn1sZXQgYT0uOSpNYXRoLm1pbihpLndpZHRoLyhvPT1udWxsP3ZvaWQgMDpvLndpZHRoKSxpLmhlaWdodC8obz09bnVsbD92b2lkIDA6by5oZWlnaHQpLDIpLHM9VHIuZ3JhcGgsbD1YaC5zY2FsZShhKS50cmFuc2xhdGUocy5wYWRkaW5nLnBhZGRpbmdMZWZ0LHMucGFkZGluZy5wYWRkaW5nVG9wKTtIdChlKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHIudHJhbnNmb3JtLGwpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Iub24oImVuZC5maXR0ZWQiLG51bGwpLG4oKX0pfWZ1bmN0aW9uIEFsZShlLHQscixuKXtsZXQgaT1IdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7ZX0iXWApLm5vZGUoKTtpZighaSlyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtlfSJgKSwhMTtsZXQgbz1pLmdldEJCb3goKSxhPWkuZ2V0U2NyZWVuQ1RNKCkscz10LmNyZWF0ZVNWR1BvaW50KCksbD10LmNyZWF0ZVNWR1BvaW50KCk7cy54PW8ueCxzLnk9by55LGwueD1vLngrby53aWR0aCxsLnk9by55K28uaGVpZ2h0LHM9cy5tYXRyaXhUcmFuc2Zvcm0oYSksbD1sLm1hdHJpeFRyYW5zZm9ybShhKTtsZXQgYz0ocCxkLGcsXyk9PiEocD5nJiZkPF8pLHU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXUubGVmdCt1LndpZHRoLU9jcixmPXUudG9wK3UuaGVpZ2h0LXpjcjtpZihjKHMueCxsLngsdS5sZWZ0LGgpfHxjKHMueSxsLnksdS50b3AsZikpe2xldCBwPShzLngrbC54KS8yLGQ9KHMueStsLnkpLzIsZz11LmxlZnQrdS53aWR0aC8yLXAsXz11LnRvcCt1LmhlaWdodC8yLWQseT1pMih0KTtyZXR1cm4gSHQodCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChuLnRyYW5zbGF0ZUJ5LGcveS5rLF8veS5rKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBQbGUoZSx0KXtsZXQgcj10Lm5vZGUudHlwZT09PWp0LlNFUklFUz8wOlRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7YTMoUGwoZSwiZyIsSGkuU2NlbmUuQ09SRSksMCxyKTtsZXQgbj10Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9VHIuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxzPTA7aWYobiYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksaSYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksbil7bGV0IGw9dC5jb3JlQm94LndpZHRoO3M8bzM/bD1sLW8zK3QuaW5FeHRyYWN0Qm94LndpZHRoLzI6bD1sLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLShpP2E6MCksbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLklORVhUUkFDVCksbCxyKX1pZihpKXtsZXQgbD10LmNvcmVCb3gud2lkdGg7czxvMz9sPWwtbzMrdC5vdXRFeHRyYWN0Qm94LndpZHRoLzI6bC09dC5vdXRFeHRyYWN0Qm94LndpZHRoLzIsbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLk9VVEVYVFJBQ1QpLGwscil9aWYobyl7bGV0IGw9dC5jb3JlQm94LndpZHRoLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2EzKFBsKGUsImciLEhpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGwscil9fWZ1bmN0aW9uIElsZShlLHQpe0h0KGUpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9ZnVuY3Rpb24gYTMoZSx0LHIpe2UuYXR0cigidHJhbnNmb3JtIikhPW51bGwmJihlPWUudHJhbnNpdGlvbigicG9zaXRpb24iKSksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIil9ZnVuY3Rpb24gemQoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LW4vMikuYXR0cigieSIsci1pLzIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLGkpfWZ1bmN0aW9uIExsZShlLHQscixuLGkpe2xldCBvPWkvMixhPW4vMixzPVtbdCxyLW9dLFt0K2EscitvXSxbdC1hLHIrb11dO2UudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIscy5tYXAobD0+bC5qb2luKCIsIikpLmpvaW4oIiAiKSl9ZnVuY3Rpb24ga2xlKGUsdCl7bGV0IHI9djAodCksbj10LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoLGk9dC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0LG89cituLzItNixhPXQueS1pLzIrNjt0Lm5vZGUudHlwZT09PWp0LlNFUklFUyYmIXQuZXhwYW5kZWQmJihvKz0xMCxhLT0yKTtsZXQgcz0idHJhbnNsYXRlKCIrbysiLCIrYSsiKSI7ZS5zZWxlY3RBbGwoInBhdGgiKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixzKSxlLnNlbGVjdCgiY2lyY2xlIikudHJhbnNpdGlvbigpLmF0dHIoe2N4Om8sY3k6YSxyOlRyLm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9ZnVuY3Rpb24gRUgoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsdCkuYXR0cigiY3kiLHIpLmF0dHIoInJ4IixuLzIpLmF0dHIoInJ5IixpLzIpfWZ1bmN0aW9uIFRsZShlLHQpe3JldHVybiB0P2UudG9GaXhlZCgwKTpNYXRoLmFicyhlKT49MT9lLnRvRml4ZWQoMSk6ZS50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIEZjcihlLHQscixuKXtsZXQgaT0iRGV2aWNlOiAiK2UuZGV2aWNlX25hbWUrYApgO2krPSJkdHlwZTogIitlLmR0eXBlK2AKYDtsZXQgbz0iKHNjYWxhcikiO2Uuc2hhcGUubGVuZ3RoPjAmJihvPSIoIitlLnNoYXBlLmpvaW4oIiwiKSsiKSIpLGkrPWAKc2hhcGU6IGArbytgCgpgLGkrPSIjKGVsZW1lbnRzKTogIit0K2AKYDtsZXQgYT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdPjAmJmEucHVzaCgiIygiK2ZQW3NdLmxhYmVsKyIpOiAiK3Jbc10pO3JldHVybiBpKz1hLmpvaW4oIiwgIikrYAoKYCxuLm1heD49bi5taW4mJihpKz0ibWluOiAiK24ubWluKyIsIG1heDogIituLm1heCtgCmAsaSs9Im1lYW46ICIrbi5tZWFuKyIsIHN0ZGRldjogIituLnN0ZGRldiksaX1mdW5jdGlvbiBCY3IoZSx0LHIsbixpPTYwLG89MTAsYT0wLHMpe2lmKEh0KGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhdClyZXR1cm47bGV0IGw9dC52YWx1ZSxjPWwuc2xpY2UoMiw4KSx1PWNbMF0saD1jWzFdLGY9Y1s1XSxwPWxbMV0sZD17bWluOmxbOF0sbWF4OmxbOV0sbWVhbjpsWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGxbMTFdKX07aT09bnVsbCYmKGk9NjApLG89PW51bGwmJihvPTEwKSxhPT1udWxsJiYoYT0wKSxyIT1udWxsJiZyLm5vZGUudHlwZT09PWp0Lk9QJiYoaS89MixvLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImciKTtnLmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsIik7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImxpbmVhckdyYWRpZW50IikseD0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIituO3kuc2V0QXR0cmlidXRlKCJpZCIseCk7bGV0IGI9MCxTPSIwJSI7Zm9yKGxldCBEPTA7RDxjLmxlbmd0aDtEKyspe2lmKCFjW0RdKWNvbnRpbnVlO2IrPWNbRF07bGV0IEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIik7Qi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsUyksQi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGZQW0RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoQik7bGV0IEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIiksTD1iKjEwMC9wKyIlIjtJLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixMKSxJLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsZlBbRF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChJKSxTPUx9Xy5hcHBlbmRDaGlsZCh5KTtsZXQgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit4KyIpIiksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcoaSkpLEMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhvKSksQy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhhKSksZy5hcHBlbmRDaGlsZChDKTtsZXQgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInRpdGxlIik7UC50ZXh0Q29udGVudD1GY3IodCxwLGMsZCksZy5hcHBlbmRDaGlsZChQKTtsZXQgaz0hMTtpZihyIT1udWxsKXtsZXQgRD1yLngtaS8yLEI9ci55LW8tci5oZWlnaHQvMi0yO2lmKHIubGFiZWxPZmZzZXQ8MCYmKEIrPXIubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsICIrQisiKSIpLGNbMl18fGNbM118fGNbNF0pe2xldCBMPXIubm9kZS5hdHRyO2lmKEwmJkwubGVuZ3RoKXtmb3IobGV0IFI9MDtSPEwubGVuZ3RoO1IrKylpZihMW1JdLmtleT09PSJUIil7bGV0IEY9TFtSXS52YWx1ZS50eXBlO2s9RiYmL15EVF8oQk9PTHxJTlR8VUlOVCkvLnRlc3QoRik7YnJlYWt9fX19bGV0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJ0ZXh0Iik7aWYoTnVtYmVyLmlzRmluaXRlKGQubWluKSYmTnVtYmVyLmlzRmluaXRlKGQubWF4KSl7bGV0IEQ9VGxlKGQubWluLGspLEI9VGxlKGQubWF4LGspO2lmKHA+MT9PLnRleHRDb250ZW50PUQrIiB+ICIrQjpPLnRleHRDb250ZW50PUQsdT4wfHxoPjB8fGY+MCl7Ty50ZXh0Q29udGVudCs9IiAoIjtsZXQgST1bXTt1PjAmJkkucHVzaChgTmFOXHhENyR7dX1gKSxoPjAmJkkucHVzaChgLVx1MjIxRVx4RDcke2h9YCksZj4wJiZJLnB1c2goYCtcdTIyMUVceEQ3JHtmfWApLE8udGV4dENvbnRlbnQrPUkuam9pbigiOyAiKSsiKSJ9fWVsc2UgTy50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO08uY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxzPT1udWxsJiYocz1pLzIpLE8uc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcocykpLE8uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoYS0yKSksZy5hcHBlbmRDaGlsZChPKSx6dChlLnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfWZ1bmN0aW9uIFJsZShlLHQscil7aWYoIXQpcmV0dXJuO2xldCBuPTE7SHQoZSkuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24obyl7bGV0IGE9dFtvLm5vZGUubmFtZV0scz1hP2Fbcl06bnVsbDtCY3IodGhpcyxzLG8sbisrKX0pfXZhciBxbjsoZnVuY3Rpb24oZSl7ZS5OT05FPSJub25lIixlLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIixlLkRFVklDRT0iZGV2aWNlIixlLk1FTU9SWT0ibWVtb3J5IixlLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLGUuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLGUuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKHFufHwocW49e30pKTt2YXIgbVA9RWUoT2UoKSwxKTt2YXIgVmk9RWUoT2UoKSwxKTtmdW5jdGlvbiBIY3IoZSl7bGV0IHQ9MCxyPTAsbj1lO2Zvcig7biYmbi5vZmZzZXRMZWZ0Pj0wJiZuLm9mZnNldFRvcD49MDspdCs9bi5vZmZzZXRMZWZ0LW4uc2Nyb2xsTGVmdCxyKz1uLm9mZnNldFRvcC1uLnNjcm9sbFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OnQsdG9wOnJ9fWZ1bmN0aW9uIFdsdChlLHQpe2xldCByPWUuZ2V0Q29udGV4dE1lbnUoKSxuPUh0KGUuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7bGV0IGE9cXQscz1IY3IoZSk7bi5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikuc3R5bGUoImxlZnQiLGEuY2xpZW50WC1zLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIixhLmNsaWVudFktcy50b3ArMSsicHgiKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTtmdW5jdGlvbiBsKHUpe3UmJnUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMocil8fChuLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSkpfWRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSksbi50ZXh0KCIiKSxuLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCh1LGgpPT57dS5hY3Rpb24odGhpcyxpLG8pLGwoKX0pLnRleHQoZnVuY3Rpb24odSl7cmV0dXJuIHUudGl0bGUoaSl9KX19dmFyIEFIPUVlKE9lKCksMSk7dmFyIFVjcj0iXHhENyIsTmxlPXFiKCkuZG9tYWluKFtRNCx0UF0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKSxxY3I9Mi41O2Z1bmN0aW9uIHBQKGUpe3JldHVybiBlLnYrb2xlK2Uud31mdW5jdGlvbiB6bGUoZSx0LHIpe2xldCBuPXIsaT1bXTtpPUFILnJlZHVjZSh0LmVkZ2VzKCksKHMsbCk9PntsZXQgYz10LmVkZ2UobCk7cmV0dXJuIHMucHVzaCh7djpsLnYsdzpsLncsbGFiZWw6Y30pLHN9LGkpO2xldCBhPUFuKGUsImciLHZlLkVkZ2UuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShpLHBQKTtyZXR1cm4gYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix2ZS5FZGdlLkdST1VQKS5hdHRyKCJkYXRhLWVkZ2UiLHBQKS5lYWNoKGZ1bmN0aW9uKHMpe2xldCBsPUh0KHRoaXMpO3MubGFiZWwuZWRnZUdyb3VwPWwsbi5fZWRnZUdyb3VwSW5kZXhbcFAocyldPWwsbi5oYW5kbGVFZGdlU2VsZWN0ZWQmJmwub24oImNsaWNrIixjPT57cXQuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOmMsZWRnZUdyb3VwOmx9KX0pLFhsdChsLHMsbil9KS5tZXJnZShhKS5lYWNoKGZ1bmN0aW9uKCl7V2NyKHIsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKHMpe1ljcihIdCh0aGlzKSxzLG4pfSksYS5leGl0KCkuZWFjaChzPT57ZGVsZXRlIG4uX2VkZ2VHcm91cEluZGV4W3BQKHMpXX0pLnJlbW92ZSgpLGF9ZnVuY3Rpb24gWWx0KGUsdCl7bGV0IHI9dC5nZXROb2RlQnlOYW1lKGUudik7aWYoci5vdXRwdXRTaGFwZXM9PW51bGx8fEFILmlzRW1wdHkoci5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBuPXIub3V0cHV0U2hhcGVzW2Uub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbj09bnVsbD9udWxsOm4ubGVuZ3RoPT09MD8ic2NhbGFyIjpuLm1hcChpPT5pPT09LTE/Ij8iOmkpLmpvaW4oVWNyKX1mdW5jdGlvbiBqbHQoZSx0KXtyZXR1cm4gdC5lZGdlTGFiZWxGdW5jdGlvbj90LmVkZ2VMYWJlbEZ1bmN0aW9uKGUsdCk6ZS5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/ZS5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6WWx0KGUuYmFzZUVkZ2VMaXN0WzBdLHQpfWZ1bmN0aW9uIERsZShlLHQscil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJwYXRoIik7Zm9yKGxldCBpPTE7aTxlLmxlbmd0aDtpKyspaWYobi5zZXRBdHRyaWJ1dGUoImQiLHIoZS5zbGljZSgwLGkpKSksbi5nZXRUb3RhbExlbmd0aCgpPnQpcmV0dXJuIGktMTtyZXR1cm4gZS5sZW5ndGgtMX1mdW5jdGlvbiBPbGUoZSx0LHIpe2xldCBuPXZ1KCkueCh1PT51LngpLnkodT0+dS55KSxpPUh0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLG4oZSkpLG89K3QuYXR0cigibWFya2VyV2lkdGgiKSxhPXQuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rdC5hdHRyKCJyZWZYIiksYz1pLm5vZGUoKTtpZihyKXtsZXQgdT0xLWwvcyxoPW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPURsZShlLGgsbik7cmV0dXJuIGVbcC0xXT17eDpmLngseTpmLnl9LGUuc2xpY2UocC0xKX1lbHNle2xldCB1PTEtbC9zLGg9Yy5nZXRUb3RhbExlbmd0aCgpLW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPURsZShlLGgsbik7cmV0dXJuIGVbcF09e3g6Zi54LHk6Zi55fSxlLnNsaWNlKDAscCsxKX19ZnVuY3Rpb24gWGx0KGUsdCxyLG4pe249bnx8dmUuRWRnZS5MSU5FLHQubGFiZWwmJnQubGFiZWwuc3RydWN0dXJhbCYmKG4rPSIgIit2ZS5FZGdlLlNUUlVDVFVSQUwpLHQubGFiZWwmJnQubGFiZWwubWV0YWVkZ2UmJnQubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihuKz0iICIrdmUuRWRnZS5SRUZFUkVOQ0VfRURHRSksci5oYW5kbGVFZGdlU2VsZWN0ZWQmJihuKz0iICIrdmUuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgaT0icGF0aF8iK3BQKHQpLG87aWYoci5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih0LG4pO2Vsc2V7bGV0IGM9MTt0LmxhYmVsIT1udWxsJiZ0LmxhYmVsLm1ldGFlZGdlIT1udWxsJiYoYz10LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoYyl9bGV0IGE9ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsaSkuYXR0cigiY2xhc3MiLG4pLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4Iik7aWYodC5sYWJlbCYmdC5sYWJlbC5tZXRhZWRnZSlpZih0LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtsZXQgYz1gcmVmZXJlbmNlLWFycm93aGVhZC0ke05sZShvKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtjfSlgKSx0LmxhYmVsLnN0YXJ0TWFya2VySWQ9Y31lbHNle2xldCBjPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHtObGUobyl9YDthLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2N9KWApLHQubGFiZWwuZW5kTWFya2VySWQ9Y31pZih0LmxhYmVsPT1udWxsfHx0LmxhYmVsLm1ldGFlZGdlPT1udWxsKXJldHVybjtsZXQgcz1qbHQodC5sYWJlbC5tZXRhZWRnZSxyLnJlbmRlckhpZXJhcmNoeSk7aWYocz09bnVsbClyZXR1cm47bGV0IGw9bz5xY3I/ImNlbnRyYWwiOiJ0ZXh0LWFmdGVyLWVkZ2UiO2UuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitpKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX12YXIgQ0g9dnUoKS5jdXJ2ZShXOCkueChlPT5lLngpLnkoZT0+ZS55KTtmdW5jdGlvbiBHY3IoZSx0LHIsbixpKXtsZXQgbz1yLmxhYmVsLGE9by5hZGpvaW5pbmdNZXRhZWRnZSxzPW8ucG9pbnRzLHtzaGFkb3dSb290Omx9PWU7aWYoci5sYWJlbC5zdGFydE1hcmtlcklkJiYocz1PbGUocyxIdChsPT1udWxsP3ZvaWQgMDpsLnF1ZXJ5U2VsZWN0b3IoIiMiK3IubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksci5sYWJlbC5lbmRNYXJrZXJJZCYmKHM9T2xlKHMsSHQobD09bnVsbD92b2lkIDA6bC5xdWVyeVNlbGVjdG9yKCIjIityLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhYSlyZXR1cm4gbmMoaSxDSChzKSk7bGV0IGM9YS5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsdT1vLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBnO2xldCBmPWMuZ2V0UG9pbnRBdExlbmd0aCh1P2MuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oYy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKChnPXQuZ2V0Q1RNKCkpPT1udWxsP3ZvaWQgMDpnLmludmVyc2UoKSkscD11PzA6cy5sZW5ndGgtMTtyZXR1cm4gc1twXS54PWYueCxzW3BdLnk9Zi55LENIKHMpfX1mdW5jdGlvbiBXY3IoZSx0KXtIdCh0KS5zZWxlY3QoInBhdGguIit2ZS5FZGdlLkxJTkUpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gR2NyKGUsdGhpcyxyLG4saSl9KX1mdW5jdGlvbiBZY3IoZSx0LHIpe2UuY2xhc3NlZCgiZmFkZWQiLHQubGFiZWwuaXNGYWRlZE91dCk7bGV0IG49dC5sYWJlbC5tZXRhZWRnZTtlLnNlbGVjdCgicGF0aC4iK3ZlLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLG4mJiFuLm51bVJlZ3VsYXJFZGdlcyl9ZnVuY3Rpb24gUEgoZSx0LHIpe2xldCBpPUFuKGUsImciLHZlLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0LG89Pm8ubm9kZS5uYW1lKyI6IitvLm5vZGUudHlwZSk7cmV0dXJuIGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLG89Pm8ubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKG8pe2xldCBhPUh0KHRoaXMpO3IuYWRkTm9kZUdyb3VwKG8ubm9kZS5uYW1lLGEpfSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLG89PnZlLk5vZGUuR1JPVVArIiAiK1dsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKSxzPUFuKGEsImciLHZlLkFubm90YXRpb24uSU5CT1gpO1ZsZShzLG8uaW5Bbm5vdGF0aW9ucyxvLHIpO2xldCBsPUFuKGEsImciLHZlLkFubm90YXRpb24uT1VUQk9YKTtWbGUobCxvLm91dEFubm90YXRpb25zLG8scik7bGV0IGM9R2xlKGEsbyx2ZS5Ob2RlLlNIQVBFKTtvLm5vZGUuaXNHcm91cE5vZGUmJlhjcihjLG8sciksSGxlKGMsbyxyKSxqY3IoYSxvLHIpO2xldCB1PUtjcihhLG8scik7SGxlKHUsbyxyLG8ubm9kZS50eXBlPT09anQuTUVUQSksczMoYSxvLHIpLEpjcihhLG8pfSksaS5leGl0KCkuZWFjaChmdW5jdGlvbihvKXtyLnJlbW92ZU5vZGVHcm91cChvLm5vZGUubmFtZSk7bGV0IGE9SHQodGhpcyk7by5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLklOQk9YKS5zZWxlY3RBbGwoIi4iK3ZlLkFubm90YXRpb24uR1JPVVApLmVhY2gocz0+e3IucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHMsbyl9KSxvLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIit2ZS5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHM9PntyLnJlbW92ZUFubm90YXRpb25Hcm91cChzLG8pfSl9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIGpjcihlLHQscil7aWYodC5ub2RlLmlzR3JvdXBOb2RlKXtpZih0LmV4cGFuZGVkKXJldHVybiBlY3QoZSx0LHIsdmUuU3Vic2NlbmUuR1JPVVApO1BsKGUsImciLHZlLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBCbGUoZSx0KXtsZXQgcj10LngtdC53aWR0aC8yK3QucGFkZGluZ0xlZnQsbj10LnktdC5oZWlnaHQvMit0LnBhZGRpbmdUb3AsaT1QbChlLCJnIix2ZS5TdWJzY2VuZS5HUk9VUCk7YTMoaSxyLG4pfWZ1bmN0aW9uIFhjcihlLHQscil7bGV0IG49QW4oZSwiZyIsdmUuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtBbihuLCJjaXJjbGUiLHZlLk5vZGUuQlVUVE9OX0NJUkNMRSksQW4obiwicGF0aCIsdmUuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpLEFuKG4sInBhdGgiLHZlLk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksbi5vbigiY2xpY2siLGk9PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6aS5ub2RlLm5hbWV9KX0pLGtsZShuLHQpfWZ1bmN0aW9uIEhsZShlLHQscixuKXtpZihuKXtlLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3JldHVybn1sZXQgaT1XbHQocixVbGUodC5ub2RlLHIpKTtlLm9uKCJkYmxjbGljayIsbz0+e3IuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3ZlciIsbz0+e3IuaXNOb2RlRXhwYW5kZWQobyl8fHIuZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLG89PntyLmlzTm9kZUV4cGFuZGVkKG8pfHxyLmZpcmUoIm5vZGUtdW5oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLG89PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oImNvbnRleHRtZW51IiwobyxhKT0+e3IuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOm8ubm9kZS5uYW1lfSksaS5jYWxsKG8sYSl9KX1mdW5jdGlvbiBVbGUoZSx0KXtsZXQgcj1be3RpdGxlOm49PnlIKGUuaW5jbHVkZSksYWN0aW9uOihuLGksbyk9Pnt0LmZpcmUoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHtuYW1lOmUubmFtZX0pfX1dO3JldHVybiB0Lm5vZGVDb250ZXh0TWVudUl0ZW1zJiYocj1yLmNvbmNhdCh0Lm5vZGVDb250ZXh0TWVudUl0ZW1zKSksSmx0KGUpJiZyLnB1c2goe3RpdGxlOm49PlFsdChlKSxhY3Rpb246KG4saSxvKT0+e3QuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOklIKGUpfSl9fSkscn1mdW5jdGlvbiBKbHQoZSl7cmV0dXJuIElIKGUpIT09bnVsbH1mdW5jdGlvbiBJSChlKXtyZXR1cm4gZT9lLnR5cGU9PT1qdC5TRVJJRVM/ZS5uYW1lOmUudHlwZT09PWp0Lk9QP2Uub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiAkY3IoZSl7bGV0IHQ9bnVsbDtpZihlKWUudHlwZT09PWp0LlNFUklFUz90PWU6ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUudHlwZT09PWp0LlNFUklFUyYmKHQ9ZS5wYXJlbnROb2RlKTtlbHNlIHJldHVybiBudWxsO3JldHVybiB0fWZ1bmN0aW9uIFFsdChlKXtyZXR1cm4gdWxlKCRjcihlKSE9PW51bGw/aXMuR1JPVVA6aXMuVU5HUk9VUCl9ZnVuY3Rpb24gS2NyKGUsdCxyKXt2YXIgYztsZXQgbj10LmRpc3BsYXlOYW1lLGk9dC5ub2RlLnR5cGU9PT1qdC5NRVRBJiYhdC5leHBhbmRlZCxvPUFuKGUsInRleHQiLHZlLk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7KGM9YS5wYXJlbnROb2RlKT09bnVsbHx8Yy5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGp0Lk1FVEE6cz10LmV4cGFuZGVkP0o0Lk5vZGUuRVhQQU5ERURfTEFCRUw6SjQuTm9kZS5TRVJJRVNfTEFCRUw7YnJlYWs7Y2FzZSBqdC5PUDpzPUo0Lk5vZGUuT1BfTEFCRUw7YnJlYWt9aWYoaSl7bi5sZW5ndGg+ci5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYobj1uLnN1YnN0cigwLHIubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsiXHUyMDI2Iik7bGV0IHU9WmNyKHIpO28uYXR0cigiZm9udC1zaXplIix1KG4ubGVuZ3RoKSsicHgiKSxzPXUobi5sZW5ndGgpfWxldCBsPW8udGV4dChuKTtyZXR1cm4gcWxlKGwsdC5ub2RlLnR5cGUscyx0KSxvfWZ1bmN0aW9uIHFsZShlLHQscixuKXtsZXQgaT1lLm5vZGUoKSxvPWkudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaCh0KXtjYXNlIGp0Lk1FVEE6biYmIW4uZXhwYW5kZWQmJihhPVRyLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBqdC5PUDphPVRyLm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9VHIuYW5ub3RhdGlvbnMubWF4TGFiZWxXaWR0aDticmVhaztkZWZhdWx0OmJyZWFrfWlmKGEhPT1udWxsKXJldHVybiBpLnRleHRDb250ZW50PXRsZShpLnRleHRDb250ZW50LHIsYSksZS5hcHBlbmQoInRpdGxlIikudGV4dChvKX12YXIgJGx0PW51bGw7ZnVuY3Rpb24gWmNyKGUpe3JldHVybiAkbHR8fCgkbHQ9T24oKS5kb21haW4oW2UubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxlLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbZS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsZS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLCRsdH1mdW5jdGlvbiBkUChlLHQscixuKXtQbChlLCJ0ZXh0Iix2ZS5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsdCkuYXR0cigieSIscituKX1mdW5jdGlvbiBHbGUoZSx0LHIpe2xldCBuPUFuKGUsImciLHIpO3N3aXRjaCh0Lm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpsZXQgaT10Lm5vZGU7aWYoVmkuaXNOdW1iZXIoaS5mdW5jdGlvbklucHV0SW5kZXgpfHxWaS5pc051bWJlcihpLmZ1bmN0aW9uT3V0cHV0SW5kZXgpKXtBbihuLCJwb2x5Z29uIix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9QW4obiwiZWxsaXBzZSIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UganQuU0VSSUVTOmxldCBvPSJhbm5vdGF0aW9uIixhPXQ7YS5jb3JlR3JhcGgmJihvPWEubm9kZS5oYXNOb25Db250cm9sRWRnZXM/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpO2xldCBzPVt2ZS5Ob2RlLkNPTE9SX1RBUkdFVF07YS5pc0ZhZGVkT3V0JiZzLnB1c2goImZhZGVkLWVsbGlwc2UiKSxBbihuLCJ1c2UiLHMpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbysiLXN0YW1wIiksQW4obiwicmVjdCIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4Iix0LnJhZGl1cykuYXR0cigicnkiLHQucmFkaXVzKTticmVhaztjYXNlIGp0LkJSSURHRTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2Nhc2UganQuTUVUQTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXJldHVybiBufWZ1bmN0aW9uIFdsZShlKXtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UganQuT1A6cmV0dXJuIHZlLk9QTk9ERTtjYXNlIGp0Lk1FVEE6cmV0dXJuIHZlLk1FVEFOT0RFO2Nhc2UganQuU0VSSUVTOnJldHVybiB2ZS5TRVJJRVNOT0RFO2Nhc2UganQuQlJJREdFOnJldHVybiB2ZS5CUklER0VOT0RFO2Nhc2UganQuRUxMSVBTSVM6cmV0dXJuIHZlLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9ZnVuY3Rpb24gSmNyKGUsdCl7bGV0IHI9UGwoZSwiZyIsdmUuTm9kZS5TSEFQRSksbj12MCh0KTtzd2l0Y2godC5ub2RlLnR5cGUpe2Nhc2UganQuT1A6e2xldCBpPXQubm9kZTtpZihWaS5pc051bWJlcihpLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFZpLmlzTnVtYmVyKGkuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2xldCBvPVBsKHIsInBvbHlnb24iKTtMbGUobyx0LngsdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1lbHNle2xldCBvPVBsKHIsImVsbGlwc2UiKTtFSChvLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1kUChlLG4sdC55LHQubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UganQuTUVUQTp7bGV0IGk9ci5zZWxlY3RBbGwoInJlY3QiKTt0LmV4cGFuZGVkPyh6ZChpLHQueCx0LnksdC53aWR0aCx0LmhlaWdodCksQmxlKGUsdCksZFAoZSxuLHQueSwtdC5oZWlnaHQvMit0LmxhYmVsSGVpZ2h0LzIpKTooemQoaSxuLHQueSx0LmNvcmVCb3gud2lkdGgsdC5jb3JlQm94LmhlaWdodCksZFAoZSxuLHQueSwwKSk7YnJlYWt9Y2FzZSBqdC5TRVJJRVM6e2xldCBpPVBsKHIsInVzZSIpO3QuZXhwYW5kZWQ/KHpkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KSxCbGUoZSx0KSxkUChlLG4sdC55LC10LmhlaWdodC8yK3QubGFiZWxIZWlnaHQvMikpOih6ZChpLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KSxkUChlLG4sdC55LHQubGFiZWxPZmZzZXQpKTticmVha31jYXNlIGp0LkJSSURHRTp7bGV0IGk9UGwociwicmVjdCIpO3pkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX19ZnVuY3Rpb24gS2x0KGUsdCxyKXtsZXQgbj1Kc2UoZSk7aWYoIXIpcmV0dXJuYHVybCgjJHtufSlgO2xldCBpPUh0KHIpLG89aS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpO28uZW1wdHkoKSYmKG89aS5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsIl9ncmFwaC1ncmFkaWVudHMiKSk7bGV0IGE9by5zZWxlY3QoImxpbmVhckdyYWRpZW50IyIrbik7aWYoYS5lbXB0eSgpKXthPW8uYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixlKSxhLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2xldCBzPTA7VmkuZWFjaCh0LGw9PntsZXQgYz1sLmNvbG9yO2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixzKS5hdHRyKCJzdG9wLWNvbG9yIixjKSxhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIscytsLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGMpLHMrPWwucHJvcG9ydGlvbn0pfXJldHVybmB1cmwoIyR7bn0pYH1mdW5jdGlvbiBMSChlKXtIdChlKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfWZ1bmN0aW9uIGtIKGUsdCxyLG4saSl7bGV0IG89S3U7c3dpdGNoKGU9ZXx8KCgpPT4wKSx0KXtjYXNlIHFuLk5PTkU6Y2FzZSBxbi5TVFJVQ1RVUkU6aWYoci5ub2RlLnR5cGU9PT1qdC5NRVRBKXtsZXQgYT1yLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gdD09PXFuLlNUUlVDVFVSRSYmYSE9PW51bGw/by5TVFJVQ1RVUkVfUEFMRVRURShlKGEpLG4pOm8uVU5LTk9XTn1lbHNlIHJldHVybiByLm5vZGUudHlwZT09PWp0LlNFUklFUz9uP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpyLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnN0cnVjdHVyYWw/IiNmMGUiOnIubm9kZS5pbmJvdW5kPyIjMGVmIjoiI2ZlMCI6VmkuaXNOdW1iZXIoci5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlZpLmlzTnVtYmVyKHIubm9kZS5mdW5jdGlvbk91dHB1dEluZGV4KT8iIzAwOTY4OCI6IndoaXRlIjtjYXNlIHFuLkRFVklDRTpyZXR1cm4gci5kZXZpY2VDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoImRldmljZS0iK3Iubm9kZS5uYW1lLHIuZGV2aWNlQ29sb3JzLGkpO2Nhc2UgcW4uWExBX0NMVVNURVI6cmV0dXJuIHIueGxhQ2x1c3RlckNvbG9ycz09bnVsbD9vLlVOS05PV046bj9vLkVYUEFOREVEX0NPTE9SOktsdCgieGxhLSIrci5ub2RlLm5hbWUsci54bGFDbHVzdGVyQ29sb3JzLGkpO2Nhc2UgcW4uQ09NUFVURV9USU1FOnJldHVybiBuP28uRVhQQU5ERURfQ09MT1I6ci5jb21wdXRlVGltZUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5NRU1PUlk6cmV0dXJuIG4/by5FWFBBTkRFRF9DT0xPUjpyLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5PUF9DT01QQVRJQklMSVRZOnJldHVybiByLmNvbXBhdGliaWxpdHlDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoIm9wLWNvbXBhdC0iK3Iubm9kZS5uYW1lLHIuY29tcGF0aWJpbGl0eUNvbG9ycyxpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iil9fWZ1bmN0aW9uIHMzKGUsdCxyLG4pe249bnx8dmUuTm9kZS5TSEFQRTtsZXQgaT1yLmlzTm9kZUhpZ2hsaWdodGVkKHQubm9kZS5uYW1lKSxvPXIuaXNOb2RlU2VsZWN0ZWQodC5ub2RlLm5hbWUpLGE9dC5pc0luRXh0cmFjdHx8dC5pc091dEV4dHJhY3R8fHQuaXNMaWJyYXJ5RnVuY3Rpb24scz10LmV4cGFuZGVkJiZuIT09dmUuQW5ub3RhdGlvbi5OT0RFLGw9dC5pc0ZhZGVkT3V0O2UuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGkpLGUuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLGUuY2xhc3NlZCgiZXh0cmFjdCIsYSksZS5jbGFzc2VkKCJleHBhbmRlZCIscyksZS5jbGFzc2VkKCJmYWRlZCIsbCk7bGV0IGM9ZS5zZWxlY3QoIi4iK24rIiAuIit2ZS5Ob2RlLkNPTE9SX1RBUkdFVCksdT1rSChyLnRlbXBsYXRlSW5kZXgsci5jb2xvckJ5LHQscyxyLmdldEdyYXBoU3ZnUm9vdCgpKTtjLnN0eWxlKCJmaWxsIix1KSxjLnN0eWxlKCJzdHJva2UiLG8/bnVsbDp0Y3QodSkpfWZ1bmN0aW9uIHRjdChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCwzKT09PSJ1cmwiP0t1LkdSQURJRU5UX09VVExJTkU6Y3UoZSkuZGFya2VyKCkudG9TdHJpbmcoKX1mdW5jdGlvbiBZbGUoZSx0LHIsbil7bGV0IGk9SHQoZSk7aWYoaS5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLGkuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksaS5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCF0fHwhbnx8IXIpcmV0dXJuO2xldCBvPWpsZShyLHQpLGE9e307VmkuZWFjaChvLGZ1bmN0aW9uKGMpe2E9WGxlKGUsdCxjLGEpfSk7bGV0IHM9T2JqZWN0LmtleXMoYSksbD10dXIodCxzKTtldXIoZSxsKSxpLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKS5lYWNoKGZ1bmN0aW9uKGMpe2xldCB1PWMubm9kZS5uYW1lO2kuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3V9Il1gKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKX0pLGkuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX1mdW5jdGlvbiBqbGUoZSx0KXtsZXQgcj1bXSxuPXQuZ2V0Tm9kZUJ5TmFtZShlKTtpZihuIGluc3RhbmNlb2YgXzApcmV0dXJuW25dLmNvbmNhdChuLmluRW1iZWRkaW5ncyk7bGV0IGk9bi5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gVmkuZWFjaChpLGZ1bmN0aW9uKG8pe3I9ci5jb25jYXQoamxlKG8sdCkpfSkscn1mdW5jdGlvbiBYbGUoZSx0LHIsbil7aWYobltyLm5hbWVdKXJldHVybiBuO25bci5uYW1lXT0hMDtsZXQgaT1yLmlucHV0cyxvPVpsdCh0LHIpO0h0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke28ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBhPXt9O1ZpLmVhY2goaSxmdW5jdGlvbih1KXtsZXQgaD10LmdldE5vZGVCeU5hbWUodS5uYW1lKTtpZihoPT09dm9pZCAwKXJldHVybjtpZihoIGluc3RhbmNlb2YgYVApe2xldCBkPXNQKGgubmFtZSk7aD10LmdldE5vZGVCeU5hbWUoZCl9bGV0IGY9Wmx0KHQsaCkscD1hW2YubmFtZV07cD9wLm9wTm9kZXMucHVzaChoKTphW2YubmFtZV09e3Zpc2libGVQYXJlbnQ6ZixvcE5vZGVzOltoXX19KTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB1PTE7Yy5uYW1lIT09cWM7dSsrKWM9Yy5wYXJlbnROb2RlLHNbYy5uYW1lXT17dHJhY2VkOiExLGluZGV4OnUsY29ubmVjdGlvbkVuZHBvaW50czpbXX0sbFt1XT1jO3JldHVybiBWaS5mb3JPd24oYSxmdW5jdGlvbih1LGgpe2xldCBmPXUudmlzaWJsZVBhcmVudDtWaS5lYWNoKHUub3BOb2RlcyxmdW5jdGlvbihwKXtuPVhsZShlLHQscCxuKX0pLGYubmFtZSE9PW8ubmFtZSYmUWNyKGUsZixzLGwpfSksbn1mdW5jdGlvbiBRY3IoZSx0LHIsbil7bGV0IGk9dCxvPXQsYT1bXTtmb3IoOyFyW2kubmFtZV07KW8ubmFtZSE9PWkubmFtZSYmYS5wdXNoKFtvLGldKSxvPWksaT1pLnBhcmVudE5vZGU7bGV0IHM9cltpLm5hbWVdLmluZGV4LGw9bltNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lLGY9SHQoZSk7Zi5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksVmkuZWFjaChhLGZ1bmN0aW9uKHApe2xldCBkPXBbMF0sZz1wWzFdLF89YFtkYXRhLWVkZ2U9IiR7ZC5uYW1lfS0tJHtjfX5+JHtnLm5hbWV9fn5PVVQiXWA7Zi5zZWxlY3RBbGwoXykuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX0pO2ZvcihsZXQgcD0xO3A8cztwKyspe2xldCBkPW5bcC0xXSxnPW5bcF0sXz1gW2RhdGEtZWRnZT0iJHt1fX5+JHtnLm5hbWV9fn5JTi0tJHtkLm5hbWV9Il1gO2Yuc2VsZWN0QWxsKF8pLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9fWZ1bmN0aW9uIHR1cihlLHQpe2xldCByPXt9O3JldHVybiBWaS5lYWNoKHQsZnVuY3Rpb24obil7bGV0IGk9ZS5nZXROb2RlQnlOYW1lKG4pLG89Wmx0KGUsaSk7cltvLm5hbWVdPW99KSxyfWZ1bmN0aW9uIGV1cihlLHQpe1ZpLmZvck93bih0LGZ1bmN0aW9uKHIpe2xldCBuPXI7Zm9yKDtuLm5hbWUhPT1xYzspe2xldCBpPUh0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApO2kubm9kZXMoKS5sZW5ndGgmJiFpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpJiYhaS5jbGFzc2VkKCJzZWxlY3RlZCIpJiYhaS5jbGFzc2VkKCJvcCIpJiZpLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApLG49bi5wYXJlbnROb2RlfX0pfWZ1bmN0aW9uIFpsdChlLHQpe2xldCByPSExLG49dDtmb3IoOyFyOylpZih0PW4sbj10LnBhcmVudE5vZGUsbj09PXZvaWQgMClyPSEwO2Vsc2V7bGV0IGk9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG4ubmFtZSk7aSYmKGkuZXhwYW5kZWR8fG4gaW5zdGFuY2VvZiBfMCkmJihyPSEwKX1yZXR1cm4gdH1mdW5jdGlvbiBWbGUoZSx0LHIsbil7bGV0IGk9ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0Lmxpc3Qsbz0+by5ub2RlLm5hbWUpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixvPT5vLm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtuLmFkZEFubm90YXRpb25Hcm91cChvLHIsYSk7bGV0IHM9dmUuQW5ub3RhdGlvbi5FREdFLGw9by5yZW5kZXJNZXRhZWRnZUluZm8mJm8ucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO2wmJiFsLm51bVJlZ3VsYXJFZGdlcyYmKHMrPSIgIit2ZS5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSksbCYmbC5udW1SZWZFZGdlcyYmKHMrPSIgIit2ZS5FZGdlLlJFRl9MSU5FKSxYbHQoYSxvLG4scyksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTPyhpdXIoYSxvKSxudXIoYSxvKSk6JGxlKGEsby5ub2RlLm5hbWUsbyx2ZS5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKGkpLmF0dHIoImNsYXNzIixvPT52ZS5Bbm5vdGF0aW9uLkdST1VQKyIgIitydXIoby5hbm5vdGF0aW9uVHlwZSkrIiAiK1dsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTthdXIoYSxyLG8sbiksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTJiZvdXIoYSxyLG8sbil9KSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKG8pe24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKG8scil9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIHJ1cihlKXtyZXR1cm4oZ2lbZV18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIG51cihlLHQpe2lmKHQuYW5ub3RhdGlvblR5cGU9PT1naS5TVU1NQVJZKUFuKGUsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpO2Vsc2V7bGV0IHI9R2xlKGUsdCx2ZS5Bbm5vdGF0aW9uLk5PREUpO0FuKHIsInRpdGxlIikudGV4dCh0Lm5vZGUubmFtZSl9fWZ1bmN0aW9uIGl1cihlLHQpe2xldCByPXQubm9kZS5uYW1lLnNwbGl0KCIvIiksbj1yW3IubGVuZ3RoLTFdO3JldHVybiAkbGUoZSxuLHQsbnVsbCl9ZnVuY3Rpb24gJGxlKGUsdCxyLG4pe2xldCBpPXZlLkFubm90YXRpb24uTEFCRUw7biYmKGkrPSIgIituKTtsZXQgbz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHIuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBxbGUobywtMSxKNC5Bbm5vdGF0aW9uLkxBQkVMKX1mdW5jdGlvbiBvdXIoZSx0LHIsbil7ZS5vbigibW91c2VvdmVyIixpPT57bi5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsaT0+e24uZmlyZSgiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsaT0+e3F0LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOmkubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KSxyLmFubm90YXRpb25UeXBlIT09Z2kuU1VNTUFSWSYmci5hbm5vdGF0aW9uVHlwZSE9PWdpLkNPTlNUQU5UJiZlLm9uKCJjb250ZXh0bWVudSIsV2x0KG4sVWxlKHIubm9kZSxuKSkpfWZ1bmN0aW9uIGF1cihlLHQscixuKXtsZXQgaT12MCh0KTtyLnJlbmRlck5vZGVJbmZvJiZyLmFubm90YXRpb25UeXBlIT09Z2kuRUxMSVBTSVMmJnMzKGUsci5yZW5kZXJOb2RlSW5mbyxuLHZlLkFubm90YXRpb24uTk9ERSksci5hbm5vdGF0aW9uVHlwZT09PWdpLlNVTU1BUlkmJihyLndpZHRoKz0xMCksZS5zZWxlY3QoInRleHQuIit2ZS5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsaStyLmR4KyhyLmlzSW4/LTE6MSkqKHIud2lkdGgvMityLmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3IuZHkpLGUuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixpK3IuZHgtMykuYXR0cigieSIsdC55K3IuZHktNiksRUgoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLGkrci5keCx0Lnkrci5keSxyLndpZHRoLHIuaGVpZ2h0KSxlLnNlbGVjdCgicGF0aC4iK3ZlLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLG89PntsZXQgYT1vLnBvaW50cy5tYXAocz0+KHt4OnMuZHgraSx5OnMuZHkrdC55fSkpO3JldHVybiBDSChhKX0pfWZ1bmN0aW9uIGVjdChlLHQscixuKXtuPW58fHZlLlNjZW5lLkdST1VQO2xldCBpPW0wKGUsImciLG4pLmVtcHR5KCksbz1BbihlLCJnIixuKSxhPUFuKG8sImciLHZlLlNjZW5lLkNPUkUpLHM9VmkucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksKGwsYyk9PntsZXQgdT10LmNvcmVHcmFwaC5ub2RlKGMpO3JldHVybiB1LmV4Y2x1ZGVkfHxsLnB1c2godSksbH0sQXJyYXkoKSk7aWYodC5ub2RlLnR5cGU9PT1qdC5TRVJJRVMmJnMucmV2ZXJzZSgpLHpsZShhLHQuY29yZUdyYXBoLHIpLFBIKGEscyxyKSx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5JTkVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZEluRXh0cmFjdCxyKX1lbHNlIG0wKG8sImciLHZlLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7aWYodC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjApe2xldCBsPUFuKG8sImciLHZlLlNjZW5lLk9VVEVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZE91dEV4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKTtpZih0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKTtQSChsLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtyZXR1cm4gUGxlKG8sdCksaSYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb312YXIgc3VyPS44LFJIPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLnN2Zz10LHRoaXMubGFiZWxQYWRkaW5nPWEsdGhpcy56b29tRz1yLHRoaXMubWFpblpvb209bix0aGlzLm1heFdhbmRIPW87bGV0IHM9SHQoaS5zaGFkb3dSb290KSxsPXMuc2VsZWN0KCJzdmciKSxjPWwuc2VsZWN0KCJyZWN0IiksdT1mPT57dGhpcy52aWV3cG9pbnRDb29yZC54PXF0LngsdGhpcy52aWV3cG9pbnRDb29yZC55PXF0LnksdGhpcy51cGRhdGVWaWV3cG9pbnQoKX07dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07bGV0IGg9cGIoKS5zdWJqZWN0KE9iamVjdCkub24oImRyYWciLHUpO2MuZGF0dW0odGhpcy52aWV3cG9pbnRDb29yZCkuY2FsbChoKSxsLm9uKCJjbGljayIsKCk9PntpZihxdC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZj1OdW1iZXIoYy5hdHRyKCJ3aWR0aCIpKSxwPU51bWJlcihjLmF0dHIoImhlaWdodCIpKSxkPXpvKGwubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9ZFswXS1mLzIsdGhpcy52aWV3cG9pbnRDb29yZC55PWRbMV0tcC8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSx0aGlzLnZpZXdwb2ludD1jLm5vZGUoKSx0aGlzLm1pbmltYXBTdmc9bC5ub2RlKCksdGhpcy5taW5pbWFwPWksdGhpcy5jYW52YXM9cy5zZWxlY3QoImNhbnZhcy5maXJzdCIpLm5vZGUoKSx0aGlzLmNhbnZhc0J1ZmZlcj1zLnNlbGVjdCgiY2FudmFzLnNlY29uZCIpLm5vZGUoKSx0aGlzLmRvd25sb2FkQ2FudmFzPXMuc2VsZWN0KCJjYW52YXMuZG93bmxvYWQiKS5ub2RlKCksSHQodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtIdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCB0PS10aGlzLnZpZXdwb2ludENvb3JkLngqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXAscj0tdGhpcy52aWV3cG9pbnRDb29yZC55KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwO0h0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLFhoLnRyYW5zbGF0ZSh0LHIpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLmRvd25sb2FkQ2FudmFzLnRvQmxvYihyPT57dChyKX0sImltYWdlL3BuZyIpfSl9dXBkYXRlKCl7bGV0IHQ9bnVsbDt0cnl7aWYodD10aGlzLnpvb21HLmdldEJCb3goKSx0LndpZHRoPT09MClyZXR1cm59Y2F0Y2gocCl7cmV0dXJufWxldCByPUh0KHRoaXMuc3ZnKSxuPSIiLGk9dGhpcy5zdmcsYT0oaS5nZXRSb290Tm9kZT9pLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspdHJ5e2xldCBkPWFbcF0uY3NzUnVsZXN8fGFbcF0ucnVsZXM7aWYoZD09bnVsbCljb250aW51ZTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKyluKz1kW2ddLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLCIiKStgCmB9Y2F0Y2goZCl7aWYoZC5uYW1lIT09IlNlY3VyaXR5RXJyb3IiKXRocm93IGR9bGV0IHM9ci5hcHBlbmQoInN0eWxlIik7cy50ZXh0KG4pO2xldCBsPUh0KHRoaXMuem9vbUcpLGM9bC5hdHRyKCJ0cmFuc2Zvcm0iKTtsLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPXRoaXMubGFiZWxQYWRkaW5nKjIsdC53aWR0aCs9dGhpcy5sYWJlbFBhZGRpbmcqMixyLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxIdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksSHQodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7bGV0IHU9SHQodGhpcy5kb3dubG9hZENhbnZhcyk7dS5zdHlsZSgid2lkdGgiLHQud2lkdGgpLHUuc3R5bGUoImhlaWdodCIsdC5oZWlnaHQpLHUuYXR0cigid2lkdGgiLDMqdC53aWR0aCksdS5hdHRyKCJoZWlnaHQiLDMqdC5oZWlnaHQpLHRoaXMudHJhbnNsYXRlIT1udWxsJiZ0aGlzLnpvb20hPW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy56b29tKCkpO2xldCBoPW5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodGhpcy5zdmcpO3MucmVtb3ZlKCksci5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKSxsLmF0dHIoInRyYW5zZm9ybSIsYyk7bGV0IGY9bmV3IEltYWdlO2Yub25sb2FkPSgpPT57bGV0IHA9dGhpcy5jYW52YXNCdWZmZXIuZ2V0Q29udGV4dCgiMmQiKTtwPT1udWxsfHxwLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNCdWZmZXIud2lkdGgsdGhpcy5jYW52YXNCdWZmZXIuaGVpZ2h0KSxwPT1udWxsfHxwLmRyYXdJbWFnZShmLDAsMCx0aGlzLm1pbmltYXBTaXplLndpZHRoLHRoaXMubWluaW1hcFNpemUuaGVpZ2h0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntIdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEh0KHRoaXMuY2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxbdGhpcy5jYW52YXMsdGhpcy5jYW52YXNCdWZmZXJdPVt0aGlzLmNhbnZhc0J1ZmZlcix0aGlzLmNhbnZhc119KTtsZXQgZD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZD09bnVsbHx8ZC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGQ9PW51bGx8fGQuZHJhd0ltYWdlKGYsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSxmLm9uZXJyb3I9KCk9PntsZXQgcD1uZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtmLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHApfSxmLnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoaCl9em9vbSh0KXtpZih0aGlzLnNjYWxlTWluaW1hcD09bnVsbClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCByPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49SHQodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1yLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLG89ci5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsbyk7bGV0IGE9dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxzPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LGw9dGhpcy52aWV3cG9pbnRDb29yZC54LGM9dGhpcy52aWV3cG9pbnRDb29yZC55LHU9TWF0aC5taW4oTWF0aC5tYXgoMCxsK2kpLGEpLU1hdGgubWluKE1hdGgubWF4KDAsbCksYSksaD1NYXRoLm1pbihNYXRoLm1heCgwLGMrbykscyktTWF0aC5taW4oTWF0aC5tYXgoMCxjKSxzKTt1KmgvKGEqcyk8c3VyP3RoaXMubWluaW1hcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTp0aGlzLm1pbmltYXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fTt2YXIgbmN0PWNsYXNzIGV4dGVuZHMgbXR7aW5pdCh0LHIsbixpLG8pe3JldHVybiBuZXcgUkgodCxyLG4sdGhpcyxpLG8pfX07bmN0LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIKICAgICAgICAgIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIKICAgICAgICAgIHg9Ii0yMCUiCiAgICAgICAgICB5PSItMjAlIgogICAgICAgICAgd2lkdGg9IjE1MCUiCiAgICAgICAgICBoZWlnaHQ9IjE1MCUiCiAgICAgICAgPgogICAgICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlR3JhcGhpYyIgZHg9IjEiIGR5PSIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgICAgcmVzdWx0PSJtYXRyaXhPdXQiCiAgICAgICAgICAgIGluPSJvZmZPdXQiCiAgICAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgdmFsdWVzPSIwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjUgMCIKICAgICAgICAgID48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgICAgcmVzdWx0PSJibHVyT3V0IgogICAgICAgICAgICBpbj0ibWF0cml4T3V0IgogICAgICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgICA+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICAgIDxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZUJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgPCEtLSBBZGRpdGlvbmFsIGNhbnZhcyB0byB1c2UgYXMgYnVmZmVyIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbiB1cGRhdGVzIC0tPgogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICBgO25jdD1FKFt5dCgidGYtZ3JhcGgtbWluaW1hcCIpXSxuY3QpO3ZhciBLbGU9UWAKICA8c3R5bGU+CiAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNzdmcgewogICAgICBmbGV4OiAxOwogICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNoaWRkZW4gewogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHRvcDogMHB4OwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgdGV4dCB7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBOb2RlIGFuZCBhbm5vdGF0aW9uLW5vZGUgZm9yIE1ldGFub2RlIC0tLSAqLwoKICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICB9CiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICB9CiAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICB9CgogICAgLmZhZGVkLAogICAgLmZhZGVkIHJlY3QsCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCBwYXRoLAogICAgLmZhZGVkIHVzZSwKICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgcGF0aCB7CiAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCB1c2UgewogICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgdGV4dCB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gZWxsaXBzZSwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogI2ZmOTgwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAubm9uLWlucHV0ID4gKiA+IHJlY3QsCi5ub24taW5wdXQgPiAqID4gZWxsaXBzZSwKLm5vbi1pbnB1dCA+ICogPiB1c2UsCi8qIEZvciBDb25zdCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+ICogPiAuY29uc3RhbnQ6bm90KFtjbGFzcyo9ImlucHV0LWhpZ2hsaWdodCJdKSA+CiAgLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICBzdHJva2UtZGFzaGFycmF5OiBpbmhlcml0OwogICAgfQoKICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgIC5ub24taW5wdXQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC8qIElucHV0IGVkZ2VzLiAqLwogICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICA+IC5pbi1hbm5vdGF0aW9ucwogICAgICA+IC5hbm5vdGF0aW9uCiAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIHN0cm9rZTogIzk5OSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgIC5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQsCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiBwYXRoLAovKiBBbm5vdGF0aW9uIHN0eWxlcyAobGFiZWwgYW5kIGVkZ2VzIHJlc3BlY3RpdmVseSkuICovCi5ub24taW5wdXQgPiBnID4KLmFubm90YXRpb246bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkKSA+Ci5hbm5vdGF0aW9uLWxhYmVsCi8qLmFubm90YXRpb24tZWRnZSovIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgIC5vcCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNmZmY7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KCiAgICAub3Auc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBTZXJpZXMgTm9kZSAtLS0gKi8KCiAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKiBPbmNlIGV4cGFuZGVkLCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4gYW5kIGhpZGUgdGhlIDx1c2U+LiAqLwogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICBzdHJva2U6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICB9CiAgICAuc2VyaWVzLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHVzZSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKioKICogVE9ETzogU2ltcGxpZnkgdGhpcyBieSBhcHBseWluZyBhIHN0YWJsZSBjbGFzcyBuYW1lIHRvIGFsbCA8Zz4KICogZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgaGF2ZSBlaXRoZXIgdGhlIG5vZGVzaGFwZSBvciBhbm5vdGF0aW9uLW5vZGUgY2xhc3Nlcy4KICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiAjY2NjOwogICAgfQogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLmFubm90YXRpb24uc2VyaWVzLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICBvcGFjaXR5OiAwLjI7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgIHN0cm9rZTogI2ZmYjc0ZDsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGVzIC0tLSAqLwoKICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAubm9kZSB7CiAgICAgIC8qIFByb3ZpZGUgYSBoaW50IHRvIGJyb3dzZXJzIHRvIGF2b2lkIHVzaW5nIHRoZWlyIHN0YXRpYyByYXN0ZXJpemF0aW9uCiAgICAgIGF0IGluaXRpYWwgc2NhbGUsIHdoaWNoIGxvb2tzIHZlcnkgcGl4ZWxhdGVkIG9uIENocm9taXVtIHdoZW4gem9vbWVkIGluLgogICAgICBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyAqbm90KiB1c2UgJ3dpbGwtY2hhbmdlOiB0cmFuc2Zvcm0nIGFuZAogICAgICAndHJhbnNsYXRlWigwKSBoZXJlLCB3aGljaCBpbnRyb2R1Y2UgYmx1cnJpbmVzcyBvbiBGaXJlZm94LgogICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQ3NDQgKi8KICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CiAgICB9CgogICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogIzQ0NDsKICAgIH0KCiAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA5cHg7CiAgICB9CgogICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA4cHg7CiAgICB9CgogICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBmb250LXNpemU6IDZweDsKICAgIH0KCiAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogbm9ybWFsOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNTBhM2Y3OwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNDI4NWY0OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgIC8qIG9ubHkgYXBwbGllZCBmb3IgYW5ub3RhdGlvbnMgdGhhdCBhcmUgbm90IHN1bW1hcnkgb3IgY29uc3RhbnQuCiguc3VtbWFyeSwgLmNvbnN0YW50IGdldHMgb3ZlcnJpZGRlbiBiZWxvdykgKi8KICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAuYW5ub3RhdGlvbi5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2FhYTsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNhYWE7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgLmV4cGFuZGVkID4gLmluLWFubm90YXRpb25zLAogICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgfQoKICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogcmVkOwogICAgfQoKICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgc3Ryb2tlOiAjZGI0NDM3OwogICAgfQoKICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBmaWxsOiAjYTUyNzE0OwogICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICB9CgogICAgLnN1bW1hcnkuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBFZGdlIC0tLSAqLwoKICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2JiYjsKICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICB9CgogICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBzdHJva2U6ICNmMDA7CiAgICB9CgogICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICBmaWxsOiAjMDAwOwogICAgfQoKICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgIC5lZGdlID4gdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgIGZpbGw6ICM2NjY7CiAgICB9CgogICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNiYmI7CiAgICB9CgogICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZmZiNzRkOwogICAgfQoKICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZjAwOwogICAgfQoKICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICB9CgogICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgIC5ub2RlOm5vdCguaGlnaGxpZ2h0ZWQpOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBvcGFjaXR5OiAwLjAxOwogICAgfQogICAgLm5vZGUuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIC5idXR0b25jaXJjbGUgewogICAgICBmaWxsOiAjZTc4MTFkOwogICAgfQogICAgLmJ1dHRvbmNpcmNsZTpob3ZlciB7CiAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICB9CiAgICAuZXhwYW5kYnV0dG9uLAogICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uLAogICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgLyogT25seSBzaG93IHRoZSBleHBhbmQgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZCBhbmQgb25seSBzaG93IHRoZQogICBjb2xsYXBzZSBidXR0b24gd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuICovCiAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICBmb250LXNpemU6IDRweDsKICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwgcmVjdCB7CiAgICAgIGZpbHRlcjogdXJsKCNoZWFsdGgtcGlsbC1zaGFkb3cpOwogICAgICByeDogMzsKICAgICAgcnk6IDM7CiAgICB9CgogICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB0b3A6IDIwcHg7CiAgICB9CgogICAgLnRpdGxlLAogICAgLmF1eFRpdGxlLAogICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNtaW5pbWFwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMjBweDsKICAgICAgYm90dG9tOiAyMHB4OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0idGl0bGVDb250YWluZXIiPgogICAgPGRpdiBpZD0idGl0bGUiIGNsYXNzPSJ0aXRsZSI+TWFpbiBHcmFwaDwvZGl2PgogICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICA8ZGl2IGlkPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSIgY2xhc3M9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIj5GdW5jdGlvbnM8L2Rpdj4KICA8L2Rpdj4KICA8c3ZnIGlkPSJzdmciPgogICAgPGRlZnM+CiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIHJlZmVyZW5jZSBlZGdlIHBhdGhzIG9mIGRpZmZlcmVudCBwcmVkZWZpbmVkIHNpemVzIHBlciBjb2xvci4gLS0+CiAgICAgIDxwYXRoCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1zbWFsbCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjEzIgogICAgICAgIG1hcmtlckhlaWdodD0iMTMiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxNiIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjE2IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXhsYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjIwIgogICAgICAgIG1hcmtlckhlaWdodD0iMjAiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkcyBmb3IgZGF0YWZsb3cgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkIGZvciBhbm5vdGF0aW9uIGVkZ2UgcGF0aHMuIC0tPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMCIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgcng9IjcuNSIKICAgICAgICByeT0iMyIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgPGVsbGlwc2UKICAgICAgICBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIgogICAgICAgIHJ4PSI1IgogICAgICAgIHJ5PSIyIgogICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICA+PC9lbGxpcHNlPgogICAgICA8IS0tIFZlcnRpY2FsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPCEtLSBIb3Jpem9udGFsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIGZvciBhbm5vdGF0aW9uLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjkiIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI1IiB5PSIyIj48L3VzZT4KICAgICAgPC9nPgogICAgICA8c3ZnCiAgICAgICAgaWQ9InN1bW1hcnktaWNvbiIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIHdpZHRoPSIxMiIKICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgID48L3BhdGg+CiAgICAgIDwvc3ZnPgoKICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0icmVjdEhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSI1IgogICAgICAgIGhlaWdodD0iNSIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgogICAgICA8cGF0dGVybgogICAgICAgIGlkPSJlbGxpcHNlSGF0Y2giCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgaGVpZ2h0PSIyIgogICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMiIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICA8L3BhdHRlcm4+CgogICAgICA8IS0tIEEgc2hhZG93IGZvciBoZWFsdGggcGlsbHMuIC0tPgogICAgICA8ZmlsdGVyCiAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXNoYWRvdyIKICAgICAgICB4PSItNDAlIgogICAgICAgIHk9Ii00MCUiCiAgICAgICAgd2lkdGg9IjE4MCUiCiAgICAgICAgaGVpZ2h0PSIxODAlIgogICAgICA+CiAgICAgICAgPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPGZlT2Zmc2V0IGR4PSIwIiBkeT0iMCIgcmVzdWx0PSJvZmZzZXRibHVyIj48L2ZlT2Zmc2V0PgogICAgICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDAwMDAwIj48L2ZlRmxvb2Q+CiAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0ib2Zmc2V0Ymx1ciIgb3BlcmF0b3I9ImluIj48L2ZlQ29tcG9zaXRlPgogICAgICAgIDxmZU1lcmdlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgICA8ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgPC9mZU1lcmdlPgogICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KICAgIDwhLS0gTWFrZSBhIGxhcmdlIHJlY3RhbmdsZSB0aGF0IGZpbGxzIHRoZSBzdmcgc3BhY2Ugc28gdGhhdAogIHpvb20gZXZlbnRzIGdldCBjYXB0dXJlZCBvbiBzYWZhcmkgLS0+CiAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICA8ZyBpZD0icm9vdCI+PC9nPgogIDwvc3ZnPgogIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgPGRpdiBpZD0iY29udGV4dE1lbnUiIGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgpgO3ZhciBMcj1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7QWxlKHQsdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9Z2V0R3JhcGhTdmdSb290KCl7cmV0dXJuIHRoaXMuJC5zdmd9Z2V0Q29udGV4dE1lbnUoKXtyZXR1cm4gdGhpcy4kLmNvbnRleHRNZW51fV9yZXNldFN0YXRlKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5fdXBkYXRlTGFiZWxzKCExKSxIdCh0aGlzLiQuc3ZnKS5zZWxlY3QoIiNyb290Iikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksTEgodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksUmQoInRmLWdyYXBoLXNjZW5lIChsYXlvdXQpOiIsZnVuY3Rpb24oKXtNSCh0LnJvb3QpfS5iaW5kKHRoaXMpLGpyLlJFTkRFUl9TQ0VORV9MQVlPVVQpLFJkKCJ0Zi1ncmFwaC1zY2VuZSAoYnVpbGQgc2NlbmUpOiIsZnVuY3Rpb24oKXtlY3QoSHQodGhpcy4kLnJvb3QpLHQucm9vdCx0aGlzKSxJbGUodGhpcy4kLnN2Zyx0aGlzKSx0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcyksanIuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX3pvb209ZVIoKS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRoaXMuX3pvb21TdGFydENvb3Jkcyl7dmFyIHQ9TWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LXRoaXMuX3pvb21UcmFuc2Zvcm0ueCwyKStNYXRoLnBvdyh0aGlzLl96b29tU3RhcnRDb29yZHMueS10aGlzLl96b29tVHJhbnNmb3JtLnksMikpO3Q8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCl9dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09cXQudHJhbnNmb3JtLHRoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKSx0aGlzLl96b29tZWQ9ITAsSHQodGhpcy4kLnJvb3QpLmF0dHIoInRyYW5zZm9ybSIscXQudHJhbnNmb3JtKSx0aGlzLm1pbmltYXAuem9vbShxdC50cmFuc2Zvcm0pfS5iaW5kKHRoaXMpKSxIdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKSxIdCh3aW5kb3cpLm9uKCJyZXNpemUiLGZ1bmN0aW9uKCl7dGhpcy5taW5pbWFwLnpvb20oKX0uYmluZCh0aGlzKSksdGhpcy5taW5pbWFwPXRoaXMuJC5taW5pbWFwLmluaXQodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLFRyLm1pbmltYXAuc2l6ZSxUci5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXt2YXIgdD10aGlzLl9pc0F0dGFjaGVkO3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlfHwhdHx8c2V0VGltZW91dCh0aGlzLmZpdC5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9X3VwZGF0ZUxhYmVscyh0KXt2YXIgcj10aGlzLiQkKCIudGl0bGUiKSxuPXIuc3R5bGUsaT10aGlzLiQkKCIuYXV4VGl0bGUiKSxvPWkuc3R5bGUsYT10aGlzLiQkKCIuZnVuY3Rpb25MaWJyYXJ5VGl0bGUiKS5zdHlsZTtsZXQgcz1IdCh0aGlzLiQuc3ZnKTt2YXIgbD1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmbCYmdGhpcy5wcm9ncmVzcyYmdGhpcy5wcm9ncmVzcy52YWx1ZT09PTEwMCl7dmFyIGM9cy5zZWxlY3QoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fHMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLk9VVEVYVFJBQ1QpLm5vZGUoKSx1PWwuZ2V0Q1RNKCkuZSxoPWM/Yy5nZXRDVE0oKS5lOm51bGw7bi5kaXNwbGF5PSJpbmxpbmUiLG4ubGVmdD11KyJweCIsaCE9PW51bGwmJmghPT11PyhvLmRpc3BsYXk9ImlubGluZSIsaD1NYXRoLm1heCh1K3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsaCksby5sZWZ0PWgrInB4Iik6by5kaXNwbGF5PSJub25lIjtsZXQgZj1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCkscD1mP2YuZ2V0Q1RNKCkuZTpudWxsO3AhPT1udWxsJiZwIT09aD8oYS5kaXNwbGF5PSJpbmxpbmUiLHA9TWF0aC5tYXgoaCtpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHApLGEubGVmdD1wKyJweCIpOmEuZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLG8uZGlzcGxheT0ibm9uZSIsYS5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe3RoaXMucmVuZGVySGllcmFyY2h5IT1udWxsJiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksbVAuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwodCxyKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9Zml0KCl7dGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U9ITAsQ2xlKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQscixuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bci5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxyKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW3Iubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxyKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1yfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxyKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1yfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4O1JsZSh0aGlzLiQuc3ZnLHQscil9X3VwZGF0ZU5vZGVTdGF0ZSh0KXt2YXIgcj10aGlzLmdldE5vZGUodCksbj10aGlzLmdldE5vZGVHcm91cCh0KTtpZihuJiZzMyhuLHIsdGhpcyksci5ub2RlLnR5cGU9PT1qdC5NRVRBJiZyLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uJiYhci5pc0xpYnJhcnlGdW5jdGlvbil7dmFyIGk9U2Erci5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbixvPUh0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJytpKyciXScpO3MzKG8scix0aGlzKX12YXIgYT10aGlzLmdldEFubm90YXRpb25Hcm91cHNJbmRleCh0KTttUC5lYWNoKGEsKHMsbCk9PntzMyhzLHIsdGhpcyxIaS5Bbm5vdGF0aW9uLk5PREUpfSl9X3NlbGVjdGVkTm9kZUNoYW5nZWQodCxyKXtpZih0IT09ciYmKHImJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKSwhIXQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKHQpLGk9W107bi5wYXJlbnROb2RlIT1udWxsJiZuLnBhcmVudE5vZGUubmFtZSE9cWM7KW49bi5wYXJlbnROb2RlLGkucHVzaChuLm5hbWUpO3ZhciBvO21QLmZvckVhY2hSaWdodChpLGE9Pnt0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShhKTt2YXIgcz10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO3Mubm9kZS5pc0dyb3VwTm9kZSYmIXMuZXhwYW5kZWQmJihzLmV4cGFuZGVkPSEwLG98fChvPXMpKX0pLG8mJih0aGlzLnNldE5vZGVFeHBhbmRlZChvKSx0aGlzLl96b29tZWQ9ITApLHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5wYW5Ub05vZGUodCl9LFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9fV9oaWdobGlnaHRlZE5vZGVDaGFuZ2VkKHQscil7dCE9PXImJih0JiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUodCksciYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpKX1fb25ab29tQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1fZmlyZUVuYWJsZUNsaWNrKCl7dGhpcy5maXJlKCJlbmFibGUtY2xpY2siKX1fdXBkYXRlSW5wdXRUcmFjZSgpe1lsZSh0aGlzLmdldEdyYXBoU3ZnUm9vdCgpLHRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX07THIudGVtcGxhdGU9S2xlO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sTHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxMci5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfb25ab29tQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tU3RhcnRDb29yZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbVRyYW5zZm9ybSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLExyLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9ub2RlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9lZGdlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhMYXJnZUZvbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTHIucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLExyLnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicmVuZGVySGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtFKFtCdCgiX2lzQXR0YWNoZWQiLCJyZW5kZXJIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpO0UoW0J0KCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKTtFKFtCdCgidHJhY2VJbnB1dHMiLCJzZWxlY3RlZE5vZGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpO0xyPUUoW3l0KCJ0Zi1ncmFwaC1zY2VuZSIpXSxMcik7dmFyIERyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKCEhdCl7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKXIuaW5jbHVkZT11ci5VTlNQRUNJRklFRDt0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0KX19X2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTshdHx8dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMscj10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmciYmKGFsZSh0aGlzLmJhc2ljR3JhcGgsdCxyKSxwbGUodGhpcy5ncmFwaEhpZXJhcmNoeSx0KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09anQuTUVUQSlyZXR1cm47bGV0IHI9dGhpcyxuPVJkKCJuZXcgdGZfZ3JhcGhfcmVuZGVyLkhpZXJhcmNoeSIsKCk9PntsZXQgaT1uZXcgbG8odCwhIXRoaXMuc3RhdHMsdGhpcy5hdXRvRXh0cmFjdE5vZGVzKTtpLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24saS5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uO2Z1bmN0aW9uIG8oYSl7cmV0dXJue21pblZhbHVlOmEuZG9tYWluKClbMF0sbWF4VmFsdWU6YS5kb21haW4oKVsxXSxzdGFydENvbG9yOmEucmFuZ2UoKVswXSxlbmRDb2xvcjphLnJhbmdlKClbMV19fXJldHVybiByLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6byhpLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTpvKGkubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOmljdC5tYXAoaS5kZXZpY2VDb2xvck1hcC5kb21haW4oKSxmdW5jdGlvbihhKXtyZXR1cm57ZGV2aWNlOmEsY29sb3I6aS5kZXZpY2VDb2xvck1hcChhKX19KSx4bGFfY2x1c3RlcjppY3QubWFwKGkueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGEpe3JldHVybnt4bGFfY2x1c3RlcjphLGNvbG9yOmkueGxhQ2x1c3RlckNvbG9yTWFwKGEpfX0pfSksaX0sanIuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ci5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0JiZ0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpfWZpdCgpe3RoaXMuJC5zY2VuZS5maXQoKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy4kLnNjZW5lLmdldEltYWdlQmxvYigpfV9ncmFwaENoYW5nZWQoKXshdGhpcy5ncmFwaEhpZXJhcmNoeXx8KHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLiQuc2NlbmUubm9kZUNvbG9yc0NoYW5nZWQoKX0pLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodCl9X3NlbGVjdGVkRWRnZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkRWRnZTt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpLHQmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZChIaS5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZSh0KSksdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKHQpfV9ub2RlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmdGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5kZXRhaWwubmFtZSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZWRnZVNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdC5kZXRhaWwuZWRnZUdyb3VwKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIix0LmRldGFpbC5lZGdlRGF0YSkpLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X25vZGVIaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIix0LmRldGFpbC5uYW1lKX1fbm9kZVVuaGlnaGxpZ2h0ZWQodCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsbnVsbCl9X25vZGVUb2dnbGVFeHBhbmQodCl7dGhpcy5fbm9kZVNlbGVjdGVkKHQpO3ZhciByPXQuZGV0YWlsLm5hbWUsbj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpO24ubm9kZS50eXBlIT09anQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShyKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuc2V0Tm9kZUV4cGFuZGVkKG4pfSw3NSksUG8oe2FjdGlvbklkOmpyLk5PREVfRVhQQU5TSU9OX1RPR0dMRUQsZXZlbnRMYWJlbDpuLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9KSl9X25vZGVUb2dnbGVFeHRyYWN0KHQpe3ZhciByPXQuZGV0YWlsLm5hbWU7dGhpcy5ub2RlVG9nZ2xlRXh0cmFjdChyKX1ub2RlVG9nZ2xlRXh0cmFjdCh0KXtsZXQgcj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpO3Iubm9kZS5pbmNsdWRlPT11ci5JTkNMVURFP3Iubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREU6ci5ub2RlLmluY2x1ZGU9PXVyLkVYQ0xVREU/ci5ub2RlLmluY2x1ZGU9dXIuSU5DTFVERTpyLm5vZGUuaW5jbHVkZT10aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkocik/dXIuSU5DTFVERTp1ci5FWENMVURFLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpLFBvKHthY3Rpb25JZDpqci5OT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQsZXZlbnRMYWJlbDpyLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREU/IkF1eGlsaWFyeSB0byBNYWluIjoiTWFpbiB0byBBdXhpbGlhcnkifSl9X25vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt2YXIgcj10LmRldGFpbC5uYW1lO3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHIpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciByPW5QKHRoaXMpLG49SlMociwxMDAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKTtsZXQgaT1NeChLbCh7fSx0aGlzLmhpZXJhcmNoeVBhcmFtcykse3Nlcmllc01hcDp0aGlzLmdyYXBoSGllcmFyY2h5LmJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpfSk7YkgodGhpcy5iYXNpY0dyYXBoLGksbikudGhlbihmdW5jdGlvbihvKXt0aGlzLnNldCgiZ3JhcGhIaWVyYXJjaHkiLG8pLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfS5iaW5kKHRoaXMpKX1fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtsZXQgdD0iLiIrSGkuRWRnZS5TRUxFQ1RFRDtIdCh0KS5jbGFzc2VkKEhpLkVkZ2UuU0VMRUNURUQsITEpLmVhY2goKHIsbik9PntpZihyLmxhYmVsKXtsZXQgaT1IdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKTtyLmxhYmVsLnN0YXJ0TWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtyLmxhYmVsLnN0YXJ0TWFya2VySWR9KWApLHIubGFiZWwuZW5kTWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7ci5sYWJlbC5lbmRNYXJrZXJJZH0pYCl9fSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe3ZhciByO2lmKHQubGFiZWwpe2xldCBuPXQubGFiZWwuc3RhcnRNYXJrZXJJZHx8dC5sYWJlbC5lbmRNYXJrZXJJZDtpZihuKXtsZXQgaT1uLnJlcGxhY2UoImRhdGFmbG93LSIsInNlbGVjdGVkLSIpLG89dGhpcy4kJCgiIyIraSk7aWYoIW8pe2xldCBzPXRoaXMuJC5zY2VuZS5xdWVyeVNlbGVjdG9yKCIjIituKTtvPXM9PW51bGw/dm9pZCAwOnMuY2xvbmVOb2RlKCEwKSxvLnNldEF0dHJpYnV0ZSgiaWQiLGkpLG8uY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQtYXJyb3doZWFkIiksKHI9cz09bnVsbD92b2lkIDA6cy5wYXJlbnROb2RlKT09bnVsbHx8ci5hcHBlbmRDaGlsZChvKX1sZXQgYT10LmxhYmVsLnN0YXJ0TWFya2VySWQ/Im1hcmtlci1zdGFydCI6Im1hcmtlci1lbmQiO3RoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKS5zdHlsZShhLGB1cmwoIyR7aX0pYCl9fX1ub3QodCl7cmV0dXJuIXR9fTtEci50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUKICAgICAgICAgIGlkPSJzY2VuZSIKICAgICAgICAgIGNsYXNzPSJhdXRvIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBwcm9ncmVzcz0iW1twcm9ncmVzc11dIgogICAgICAgICAgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICA+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxEci5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sRHIucHJvdG90eXBlLCJiYXNpY0dyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJkZXZpY2VzRm9yU3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLGxvKV0sRHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJhdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxEci5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLERyLnByb3RvdHlwZSwiX3JlbmRlckRlcHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJfYWxsb3dHcmFwaFNlbGVjdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRHIucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtCdCgiYXV0b0V4dHJhY3ROb2RlcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIsImVkZ2VXaWR0aEZ1bmN0aW9uIiwiaGFuZGxlTm9kZVNlbGVjdGVkIiwiZWRnZUxhYmVsRnVuY3Rpb24iLCJoYW5kbGVFZGdlU2VsZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5IixudWxsKTtFKFtCdCgic3RhdHMiLCJkZXZpY2VzRm9yU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX3N0YXRzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkTm9kZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkRWRnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWRFZGdlQ2hhbmdlZCIsbnVsbCk7RHI9RShbeXQoInRmLWdyYXBoIildLERyKTt2YXIgY289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuaGVhbHRoUGlsbEVudHJpZXM9ZlB9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIikscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZyJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxyKXtyZXR1cm4gdCYmcn1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQscil7cmV0dXJuIHQ/dFtyXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4LG49dGhpcy5zZWxlY3RlZE5vZGUsaT10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihvfHwhbilyZXR1cm4gbnVsbDtsZXQgYT10W25dO2lmKCFhKXJldHVybiBudWxsO2xldCBzPWFbaT8wOnJdO3JldHVybiBzP3MudmFsdWUuc2xpY2UoMiw4KTpudWxsfWdldCBfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWUoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgsbj10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsaT10aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihuKXJldHVybiBpLnRvRml4ZWQoMCk7aWYobylyZXR1cm4gMDtmb3IobGV0IGEgaW4gdClyZXR1cm4gdFthXVtyXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgcj10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLHJbci5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCByIGluIHQpcmV0dXJuIHRbcl0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxyPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoISFyKXtyLmlubmVyVGV4dD0iIjtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuaW5uZXJUZXh0PVFzZShpLmZpcnN0X3RpbWVzdGFtcCksYS5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksby5hcHBlbmRDaGlsZChhKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIiksbC5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKGwsaS50ZW5zb3JfbmFtZSkscy5hcHBlbmRDaGlsZChsKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGMuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixzLmFwcGVuZENoaWxkKGMpLG8uYXBwZW5kQ2hpbGQocyk7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZihoLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSxoLmFwcGVuZENoaWxkKHUpLG8uYXBwZW5kQ2hpbGQoaCksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxmLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsZi5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAtXHUyMjFFIiksdS5hcHBlbmRDaGlsZChmKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLHAuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICtcdTIyMUUiKSx1LmFwcGVuZENoaWxkKHApfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxkLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksdS5hcHBlbmRDaGlsZChkKX16dChyKS5hcHBlbmRDaGlsZChvKX19fV9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHQscil7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt2YXIgbj14bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjZW5lIiksdGhpcy5yZW5kZXJIaWVyYXJjaHksciksaSxvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO28mJihpPW8uc2Nyb2xsSGVpZ2h0LW8uc2Nyb2xsVG9wKTt2YXIgYT10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgcz0oKT0+e28uc2Nyb2xsVG9wPW8uc2Nyb2xsSGVpZ2h0LWl9O28mJihhP3MoKTp3aW5kb3cuc2V0VGltZW91dChzLDIwKSl9KX19O2NvLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgaDIgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDEwcHggMTBweCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLXByZXZpZXcgewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogMCAxMHB4IDAgMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1sYWJlbCwKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGNvbG9yOiAjNzc3OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcKICAgKiAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducyB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLAogICAqIGFuZCBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgKiBBcHBhcmVudGx5LCB0aGUgcGFwZXItc2xpZGVyIGxhY2tzIGEgbWl4aW4gZm9yIHRob3NlIHBhZGRpbmcgdmFsdWVzLiAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1udW1iZXItaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgdGQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgIH0KCiAgICAgIC50ZW5zb3ItZGV2aWNlLXRkIHsKICAgICAgICBtYXgtd2lkdGg6IDE0MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsIHsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsID4gZGl2IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAjZXZlbnQtY291bnRzLXRoIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMTQxLCAwKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigwLCA2MiwgMjEyKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDQsIDQ3LCA0NCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQgaGVhbHRoLXBpbGwtbGVnZW5kIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgIEVuYWJsZSBhbGwgKG5vdCBqdXN0IHNhbXBsZWQpIHN0ZXBzLiBSZXF1aXJlcyBzbG93IGRpc2sgcmVhZC4KICAgICAgPC9kaXY+CiAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIKICAgICAgICBjaGVja2VkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIKICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSIKICAgICAgICAgIC8+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlCiAgICAgICAgICBhY3RpdmUKICAgICAgICAgIGhpZGRlbiQ9IltbIWFyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiCiAgICAgICAgPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgICAgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iCiAgICAgICAgICBzbmFwcwogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGgyPgogICAgICAgIEhlYWx0aCBQaWxsCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBDb3VudHMgZm9yIFNlbGVjdGVkIE5vZGUKICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIExlZ2VuZAogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaGVhbHRoUGlsbEVudHJpZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhbHRoLXBpbGwtZW50cnkiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItcHJldmlldyIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tpdGVtLmJhY2tncm91bmRfY29sb3JdXSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxhYmVsIj5bW2l0ZW0ubGFiZWxdXTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idGVuc29yLWNvdW50Ij4KICAgICAgICAgICAgW1tfY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUsCiAgICAgICAgICAgIGluZGV4KV1dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBoaWRkZW4kPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSI+CiAgICAgICAgPGgyIGlkPSJudW1lcmljLWFsZXJ0cy1oZWFkZXIiPk51bWVyaWMgQWxlcnRzPC9oMj4KICAgICAgICA8cD5BbGVydHMgYXJlIHNvcnRlZCBmcm9tIHRvcCB0byBib3R0b20gYnkgaW5jcmVhc2luZyB0aW1lc3RhbXAuPC9wPgogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIgogICAgICA+CiAgICAgICAgPHAgY2xhc3M9Im5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiI+CiAgICAgICAgICBObyBudW1lcmljIGFsZXJ0cyBzbyBmYXIuIFRoYXQgaXMgbGlrZWx5IGdvb2QuIEFsZXJ0cyBpbmRpY2F0ZSB0aGUKICAgICAgICAgIHByZXNlbmNlIG9mIE5hTiBvciAoKy8tKSBJbmZpbml0eSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBjb25jZXJuaW5nLgogICAgICAgIDwvcD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLGNvLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxjby5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJzZWxlY3RlZE5vZGUiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2JpZ2dlc3RTdGVwRXZlclNlZW4iLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtCdCgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxjby5wcm90b3R5cGUsIl91cGRhdGVBbGVydHNMaXN0IixudWxsKTtjbz1FKFt5dCgidGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIildLGNvKTt2YXIgb2N0PXt9O0tzKG9jdCx7R3JhcGhJY29uVHlwZTooKT0+bjF9KTt2YXIgbjE7KGZ1bmN0aW9uKGUpe2UuQ09OU1Q9IkNPTlNUIixlLk1FVEE9Ik1FVEEiLGUuT1A9Ik9QIixlLlNFUklFUz0iU0VSSUVTIixlLlNVTU1BUlk9IlNVTU1BUlkifSkobjF8fChuMT17fSkpO3ZhciBadT1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmVydGljYWw9ITEsdGhpcy5maWxsT3ZlcnJpZGU9bnVsbCx0aGlzLnN0cm9rZU92ZXJyaWRlPW51bGwsdGhpcy5oZWlnaHQ9MjAsdGhpcy5mYWRlZD0hMX1nZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfWdldCBfZmlsbCgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMuZmlsbE92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9GSUxMO2Nhc2UgbjEuU0VSSUVTOnJldHVybiBWbHQuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIHkwLkRFRkFVTFRfRklMTH19Z2V0IF9zdHJva2UoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLnN0cm9rZU92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9TVFJPS0U7Y2FzZSBuMS5TRVJJRVM6cmV0dXJuIFZsdC5ERUZBVUxUX1NUUk9LRTtkZWZhdWx0OnJldHVybiB5MC5ERUZBVUxUX1NUUk9LRX19X2lzVHlwZSh0LHIpe3JldHVybiB0PT09cn1fZmFkZWRDbGFzcyh0LHIpe3JldHVybiB0PyJmYWRlZC0iK3I6IiJ9fTtadS50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSBzdmcgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8IS0tIFNWRyBmb3IgZGVmaW5pdGlvbnMgLS0+CiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuCiAgICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgICB3aWR0aD0iMiIKICAgICAgICAgIGhlaWdodD0iMiIKICAgICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBlbGxpcHNlLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgICByeD0iNy41IgogICAgICAgICAgcnk9IjMiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjIiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgIHdpZHRoPSIxMiIKICAgICAgICA+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgICAgPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICAgIDwvZGVmcz4KICAgIDwvc3ZnPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ0NPTlNUJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICA+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgY3g9IjUiCiAgICAgICAgICBjeT0iNSIKICAgICAgICAgIHI9IjMiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgPjwvY2lyY2xlPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU1VNTUFSWScpXV0iPgogICAgICA8c3ZnCiAgICAgICAgd2lkdGgkPSJbW2hlaWdodF1dIgogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnT1AnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTYgOCIKICAgICAgPgogICAgICAgIDx1c2UKICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdlbGxpcHNlJyl9fSIKICAgICAgICAgIHg9IjgiCiAgICAgICAgICB5PSI0IgogICAgICAgID48L3VzZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ01FVEEnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMzcgMTYiCiAgICAgID4KICAgICAgICA8cmVjdAogICAgICAgICAgeD0iMSIKICAgICAgICAgIHk9IjEiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdyZWN0Jyl9fSIKICAgICAgICAgIHN0cm9rZS13aWR0aD0iMnB4IgogICAgICAgICAgaGVpZ2h0PSIxNCIKICAgICAgICAgIHdpZHRoPSIzNSIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjUiCiAgICAgICAgPjwvcmVjdD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMTYgMTUiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjIiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMTAiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIgogICAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIKICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgeT0iMSIKICAgICAgICAgID48L3VzZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxadS5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwiZmlsbE92ZXJyaWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwic3Ryb2tlT3ZlcnJpZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWnUucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsImZhZGVkIix2b2lkIDApO0UoW1J0KCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWnUucHJvdG90eXBlLCJfZmlsbCIsbnVsbCk7RShbUnQoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFp1LnByb3RvdHlwZSwiX3N0cm9rZSIsbnVsbCk7WnU9RShbeXQoInRmLWdyYXBoLWljb24iKV0sWnUpO3ZhciBCcz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PXFuLlNUUlVDVFVSRSx0aGlzLnRlbXBsYXRlSW5kZXg9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnZlcnRpY2FsPSExLHRoaXMuY29uc3Q9ITEsdGhpcy5zdW1tYXJ5PSExLHRoaXMuZmlsbD1udWxsLHRoaXMuaGVpZ2h0PTIwfV9jb21wdXRlRmlsbE92ZXJyaWRlKHQscixuLGksbyl7cmV0dXJuIHQmJnImJmk/a0goaSxuLHIsITEpOm99X2dldFN0cm9rZU92ZXJyaWRlKHQpe3JldHVybiB0P3RjdCh0KTpudWxsfV9nZXRUeXBlKHQscixuLGkpe2xldHtHcmFwaEljb25UeXBlOm99PW9jdDtpZih0KXN3aXRjaCh0LnR5cGUpe2Nhc2UganQuT1A6e2xldCBhPXQub3A7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIj9vLk9QOmE9PT0iQ29uc3QifHxuP28uQ09OU1Q6YS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxyP28uU1VNTUFSWTpvLk9QfWNhc2UganQuTUVUQTpyZXR1cm4gby5NRVRBO2Nhc2UganQuU0VSSUVTOnJldHVybiBvLlNFUklFU31yZXR1cm4gaX1faXNWZXJ0aWNhbCh0LHIpe3JldHVybiB0P3QuaGFzTm9uQ29udHJvbEVkZ2VzOiEhcn1fZ2V0RmFkZWQodCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dH1fb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKHQscil7bGV0e25vZGU6bixyZW5kZXJJbmZvOmksY29sb3JCeTpvLHRlbXBsYXRlSW5kZXg6YX09dGhpczt0IT09ciYmTEgodGhpcy4kLmljb24uZ2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpKSxuJiZpJiZhJiZrSChhLG8saSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07QnMudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgLS10Yi1ncmFwaC1mYWRlZDogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLWdyYXBoLWljb24KICAgICAgaWQ9Imljb24iCiAgICAgIHR5cGU9IltbX2dldFR5cGUobm9kZSwgc3VtbWFyeSwgY29uc3QsIHR5cGUpXV0iCiAgICAgIGhlaWdodD0iW1toZWlnaHRdXSIKICAgICAgZmlsbC1vdmVycmlkZT0iW1tfZmlsbE92ZXJyaWRlXV0iCiAgICAgIHN0cm9rZS1vdmVycmlkZT0iW1tfZ2V0U3Ryb2tlT3ZlcnJpZGUoX2ZpbGxPdmVycmlkZSldXSIKICAgICAgZmFkZWQ9IltbX2dldEZhZGVkKHJlbmRlckluZm8pXV0iCiAgICAgIHZlcnRpY2FsPSJbW19pc1ZlcnRpY2FsKG5vZGUsIHZlcnRpY2FsKV1dIgogICAgPjwvdGYtZ3JhcGgtaWNvbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxCcy5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQnMucHJvdG90eXBlLCJjb25zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEJzLnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsImZpbGwiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQnMucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlRmlsbE92ZXJyaWRlKG5vZGUsIHJlbmRlckluZm8sIGNvbG9yQnksIHRlbXBsYXRlSW5kZXgsIGZpbGwpIixvYnNlcnZlcjoiX29uRmlsbE92ZXJyaWRlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApO0JzPUUoW3l0KCJ0Zi1ub2RlLWljb24iKV0sQnMpO3ZhciBHYz1jbGFzcyBleHRlbmRzIEd0KG10KXtfaXRlbVR5cGVDaGFuZ2VkKCl7dGhpcy5pdGVtVHlwZSE9PSJzdWJub2RlIj90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07R2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxHYy5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCk7R2M9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0iKV0sR2MpO3ZhciBhcz1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wQ29tcGF0Q29sb3I9eTAuQ09NUEFUSUJMRSx0aGlzLl9vcEluY29tcGF0Q29sb3I9eTAuSU5DT01QQVRJQkxFLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LHIpe3JldHVybiByLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxyKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtyJiZyLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7bGV0IHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4hdHx8IXQucm9vdD9bXToodGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2luY29tcGF0aWJsZU9wc0xpc3QiKSksZGxlKHQpKX1nZXQgX29wQ29tcGF0U2NvcmUoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQmJnQucm9vdCl7dmFyIHI9dC5yb290LG49ci5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGUsaT1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlO2lmKG49PTAmJmk9PTApcmV0dXJuIDA7dmFyIG89bitpO3JldHVybiBNYXRoLmZsb29yKDEwMCpuL28pLzEwMH1yZXR1cm4gMH1nZXQgX29wQ29tcGF0U2NvcmVMYWJlbCgpe3ZhciB0PXRoaXMuX29wQ29tcGF0U2NvcmU7cmV0dXJuIHhuKCIuMCUiKSh0KX1nZXQgX3RvdGFsSW5jb21wYXRPcHMoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/dC5yb290LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlOjB9X2dyYXBoSGllcmFyY2h5Q2hhbmdlZCgpe3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksdGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihEZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KX19O2FzLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxhcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sYXMucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYXMucHJvdG90eXBlLCJub2RlVGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxhcy5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhcy5wcm90b3R5cGUsIl9vcENvbXBhdENvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGFzLnByb3RvdHlwZSwiX29wSW5jb21wYXRDb2xvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhcy5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW1J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfaW5jb21wYXRpYmxlT3BOb2RlcyIsbnVsbCk7RShbUnQoImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZSIsbnVsbCk7RShbUnQoIl9vcENvbXBhdFNjb3JlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZUxhYmVsIixudWxsKTtFKFtSdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhcy5wcm90b3R5cGUsIl90b3RhbEluY29tcGF0T3BzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGFzLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7YXM9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIildLGFzKTt2YXIgbDM9RWUoT2UoKSwxKTt2YXIgV2M9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe19pdGVtVHlwZUNoYW5nZWQoKXt0aGlzLml0ZW1UeXBlIT09InN1Ym5vZGUiP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse2NhcmROb2RlOnRoaXMuY2FyZE5vZGUubmFtZSxub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07V2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXllbGxvdy05MDApOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO1djPUUoW3l0KCJ0Zi1ub2RlLWxpc3QtaXRlbSIpXSxXYyk7dmFyIGRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hMSx0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hMSx0aGlzLl90ZW1wbGF0ZUluZGV4PW51bGx9ZXhwYW5kTm9kZSgpe3RoaXMuZmlyZSgiX25vZGUuZXhwYW5kIix0aGlzLm5vZGUpfV9nZXROb2RlKHQscil7cmV0dXJuIHIubm9kZSh0KX1fZ2V0Tm9kZVN0YXRzKHQscil7dmFyIG49dGhpcy5fZ2V0Tm9kZSh0LHIpO3JldHVybiBuP24uc3RhdHM6bnVsbH1fZ2V0VG90YWxNaWNyb3ModCl7cmV0dXJuIHQ/dC5nZXRUb3RhbE1pY3JvcygpOjB9Z2V0IF9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztyZXR1cm4gZ0godCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZighKCF0fHwhdC50b3RhbEJ5dGVzKSlyZXR1cm4gTmQodC50b3RhbEJ5dGVzLGlQKX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKCEoIXR8fCF0LmdldFRvdGFsTWljcm9zKCkpKXJldHVybiBOZCh0LmdldFRvdGFsTWljcm9zKCksb1ApfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYoISghdHx8IXQub3V0cHV0U2l6ZXx8IXQub3V0cHV0U2l6ZS5sZW5ndGgpKXJldHVybiBsMy5tYXAodC5vdXRwdXRTaXplLGZ1bmN0aW9uKHIpe3JldHVybiByLmxlbmd0aD09PTA/InNjYWxhciI6IlsiK3Iuam9pbigiLCAiKSsiXSJ9KX1fZ2V0UmVuZGVySW5mbyh0LHIpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCl9Z2V0IF9hdHRyaWJ1dGVzKCl7dmFyIHQ9dGhpcy5fbm9kZTtpZih0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjYXR0cmlidXRlc0xpc3QiKSksIXR8fCF0LmF0dHIpcmV0dXJuW107dmFyIHI9W107cmV0dXJuIGwzLmVhY2godC5hdHRyLGZ1bmN0aW9uKG4pe24ua2V5PT09aWxlP3I9ci5jb25jYXQobi52YWx1ZS5saXN0LnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybntrZXk6aSx2YWx1ZToiVG9vIGxhcmdlIHRvIHNob3cuLi4ifX0pKTpyLnB1c2goe2tleTpuLmtleSx2YWx1ZTpKU09OLnN0cmluZ2lmeShuLnZhbHVlKX0pfSkscn1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3Qoci5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHIuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT1qdC5NRVRBKXJldHVybltdO2xldCBuPXIubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQscixuKXt2YXIgaT1hPT5sMy5tYXAoYS5iYXNlRWRnZUxpc3Qscz0+e3ZhciBsPXI/cy52OnMudztyZXR1cm57bmFtZTpsLG5vZGU6dGhpcy5fZ2V0Tm9kZShsLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDpZbHQocyx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLG89ZnVuY3Rpb24oYSl7dmFyIHM9W107cmV0dXJuIGwzLmVhY2goYSxsPT57dmFyIGM9cj9sLnY6bC53OyFufHxsLmJhc2VFZGdlTGlzdC5sZW5ndGg9PTE/cz1zLmNvbmNhdChpKGwpKTpzLnB1c2goe25hbWU6Yyxub2RlOnRoaXMuX2dldE5vZGUoYyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6amx0KGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhjLHRoaXMucmVuZGVySGllcmFyY2h5KX0pfSksc30uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpvKHQucmVndWxhciksY29udHJvbDpvKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0IixRbHQodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ciYmci5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LHIpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIseUgodCkpfV90b2dnbGVHcm91cCgpe3ZhciB0PUlIKHRoaXMuX25vZGUpO3RoaXMuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnR9KX1faXNMaWJyYXJ5RnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubmFtZS5zdGFydHNXaXRoKFNhKX1faXNJblNlcmllcyh0KXtyZXR1cm4gSmx0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpfSl9fTtkbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuc3ViLWxpc3QtZ3JvdXAgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CgogICAgICAuYXR0ci1sZWZ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgLnN1Yi1saXN0LXRhYmxlLWNlbGw6bGFzdC1jaGlsZCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1jZWxsIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sRGVwcyB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgOHB4OwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSI+CiAgICAgICAgICAgIDx0Zi13YnItc3RyaW5nIHZhbHVlPSJbW19ub2RlLm5hbWVdXSIgZGVsaW1pdGVyLXBhdHRlcm49Ii8iPgogICAgICAgICAgICA8L3RmLXdici1zdHJpbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgICAgbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICByZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhncmFwaE5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5vcH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIE9wZXJhdGlvbjoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLm9wXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5tZXRhZ3JhcGh9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBTdWJncmFwaDoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLmNhcmRpbmFsaXR5XV08L3NwYW4+IG5vZGVzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBhdHRyaWJ1dGVzIj4KICAgICAgICAgICAgQXR0cmlidXRlcyAoPHNwYW4+W1tfYXR0cmlidXRlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImF0dHJpYnV0ZXNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19hdHRyaWJ1dGVzXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJpbnB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFByZWQpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sUHJlZCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2xdXSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBzdWNjZXNzb3JzIj4KICAgICAgICAgICAgT3V0cHV0cyAoPHNwYW4+W1tfdG90YWxTdWNjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJvdXRwdXRzTGlzdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc3VjY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvciIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdWNjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sU3VjYyIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFN1Y2N9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbaXRlbV1dIDxiciAvPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgICAgVXNhZ2VzIG9mIHRoZSBGdW5jdGlvbiAoPHNwYW4+W1tfZnVuY3Rpb25Vc2FnZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfZnVuY3Rpb25Vc2FnZXNdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0iZnVuY3Rpb25Vc2FnZXMiCiAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc0xpYnJhcnlGdW5jdGlvbihfbm9kZSldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlSW5jbHVkZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19hdXhCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2lzSW5TZXJpZXMoX25vZGUpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtaW5jbHVkZS1ncm91cCI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiCiAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUdyb3VwIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2dyb3VwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbi5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxkbi5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbi5wcm90b3R5cGUsIm5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZG4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbi5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRuLnByb3RvdHlwZSwiX29wZW5lZENvbnRyb2xTdWNjIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiX2F1eEJ1dHRvblRleHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sZG4ucHJvdG90eXBlLCJfdGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZSIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCk7RShbUnQoIl9wcmVkZWNlc3NvcnMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9zdWNjZXNzb3JzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRuLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7ZG49RShbeXQoInRmLW5vZGUtaW5mbyIpXSxkbik7dmFyIHNzPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LHIpe3JldHVybiB0JiZyJiZPYmplY3Qua2V5cyhyKS5sZW5ndGg+MH1fZXF1YWxzKHQscil7cmV0dXJuIHQ9PT1yfX07c3MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7c2VsZWN0ZWROb2RlfX0iPgogICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCI+CiAgICAgICAgPHRmLW5vZGUtaW5mbwogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZmxhdC1ncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgZ3JhcGgtbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIgogICAgICAgICAgbm9kZS1pbmNsdWRlPSJbW3NlbGVjdGVkTm9kZUluY2x1ZGVdXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZAogICAgICAgIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgIG5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUKICAgICAgaXM9ImRvbS1pZiIKICAgICAgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iCiAgICA+CiAgICAgIDx0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQKICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICA+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxzcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sc3MucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHNzLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNzLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sc3MucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzcy5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc3MucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxzcy5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzcy5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCk7c3M9RShbeXQoInRmLWdyYXBoLWluZm8iKV0sc3MpO3ZhciBjdXI9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9LHRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ9ITEsdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5jb21wYXROb2RlVGl0bGU9IlRQVSBDb21wYXRpYmlsaXR5In1maXQoKXt0aGlzLiQuZ3JhcGguZml0KCl9ZG93bmxvYWRBc0ltYWdlKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSl9X2lzTm90Q29tcGxldGUodCl7cmV0dXJuIHQudmFsdWU8MTAwfV9nZXRDb250YWluZXJDbGFzcyh0KXt2YXIgcj0iY29udGFpbmVyIjtyZXR1cm4gdC5lcnJvciYmKHIrPSIgZXJyb3IiKSx0aGlzLl9pc05vdENvbXBsZXRlKHQpJiYocis9IiBsb2FkaW5nIikscn1fb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9X29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfV91cGRhdGVOb2RlSW5jbHVkZSgpe2xldCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTp1ci5VTlNQRUNJRklFRH1fc2xpbUdyYXBoQ2hhbmdlZCgpe2lmKCF0aGlzLmdyYXBoKXJldHVybjtsZXR7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDpyfT1jdXI7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPnImJnRoaXMuY29sb3JCeT09PXFuLlNUUlVDVFVSRSYmKHRoaXMuY29sb3JCeT1xbi5OT05FKX1fZW5zdXJlVGVtcGxhdGVzKCl7IXRoaXMuZ3JhcGhIaWVyYXJjaHl8fHRoaXMuY29sb3JCeSE9PXFuLlNUUlVDVFVSRXx8dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCl9fTt0bi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixvcyldLHRuLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSx0bi5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRuLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJkZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx0bi5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx0bi5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImVkZ2VXaWR0aEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRuLnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdG4ucHJvdG90eXBlLCJfaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGFuZGxlTm9kZVNlbGVjdGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQnQoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfdXBkYXRlTm9kZUluY2x1ZGUiLG51bGwpO0UoW0J0KCJncmFwaCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfc2xpbUdyYXBoQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfZW5zdXJlVGVtcGxhdGVzIixudWxsKTt0bj1FKFt5dCgidGYtZ3JhcGgtYm9hcmQiKV0sdG4pO3ZhciBjMz1FZShPZSgpLDEpO3ZhciBKdT1jbGFzc3tpc05vdFRwdU9wKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJjcHU6IikhPS0xfHx0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJncHU6IikhPS0xPyEwOnQudG9Mb3dlckNhc2UoKS5zZWFyY2goInRwdSIpPT0tMX1vcFZhbGlkKHQpe3JldHVybiB0Lm5hbWUuc2VhcmNoKFNhKT09MHx8IXQub3B8fHQuZGV2aWNlJiZ0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpfHx0LmRldmljZSYmdC5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIikhPS0xPyEwOmMzLmluY2x1ZGVzKEp1LldISVRFTElTVCx0Lm9wKX19O0p1LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2Z1bmN0aW9uIFpsZShlLHQpe2lmKHQ9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ29tcGF0aWJpbGl0eSBwcm92aWRlciByZXF1aXJlZCwgYnV0IGdvdDogIit0KTtjMy5lYWNoKGUubm9kZXMscj0+e3IuY29tcGF0aWJsZT10Lm9wVmFsaWQociksYzMuZWFjaChyLmluRW1iZWRkaW5ncyxuPT57bi5jb21wYXRpYmxlPXQub3BWYWxpZChuKX0pLGMzLmVhY2goci5vdXRFbWJlZGRpbmdzLG49PntuLmNvbXBhdGlibGU9dC5vcFZhbGlkKG4pfSl9KX12YXIgZ1A9RWUoT2UoKSwxKTt2YXIgSmxlPUVlKE9lKCksMSk7dmFyIElsPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yYXdSZWdleElucHV0PSIiLHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD0iIix0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXk9MTUwLHRoaXMuX21heFJlZ2V4UmVzdWx0cz00Mn1nZXQgX3JlZ2V4SW5wdXQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeSxyPXRoaXMuX3Jhd1JlZ2V4SW5wdXQ7cmV0dXJuIHIudHJpbSgpfV9yZWdleElucHV0Q2hhbmdlZCgpe3ZhciB0PXRoaXMuX3JlZ2V4SW5wdXQ7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfV9jbGVhclNlYXJjaFJlc3VsdHMoKXt0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIsW10pfV9yZXF1ZXN0U2VhcmNoKCl7aWYoIXRoaXMuX3NlYXJjaFBlbmRpbmcpe2lmKHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQpe3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7cmV0dXJufXRoaXMuX3NlYXJjaFBlbmRpbmc9ITAsdGhpcy5fZXhlY3V0ZVNlYXJjaCgpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0sdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KX19X2V4ZWN1dGVTZWFyY2goKXtpZih0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9dGhpcy5fcmVnZXhJbnB1dCwhdGhpcy5fcmVnZXhJbnB1dCl7dGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7cmV0dXJufXRyeXt2YXIgdD1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGkpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn1sZXQgcj1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7SmxlLmVhY2gobiwoaSxvKT0+e2lmKHIubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7IXQudGVzdChvKXx8ci5wdXNoKG8pfSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLHIpfV9tYXRjaENsaWNrZWQodCl7bGV0IHI9dC5tb2RlbC5pdGVtO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHIpLFBvKHthY3Rpb25JZDpqci5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07SWwudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0icnVucy1yZWdleCIKICAgICAgICBsYWJlbD0iU2VhcmNoIG5vZGVzIChyZWdleCkiCiAgICAgICAgdmFsdWU9Int7X3Jhd1JlZ2V4SW5wdXR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cy1hbmNob3IiPgogICAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3JlZ2V4TWF0Y2hlc11dIj4KICAgICAgICAgICAgPGRpdiBpZD0ic2VhcmNoLW1hdGNoIiBvbi1jbGljaz0iX21hdGNoQ2xpY2tlZCI+W1tpdGVtXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzZWFyY2gtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI3J1bnMtcmVnZXggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMtYW5jaG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cyB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlyZWN0aW9uOiBydGw7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2g6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS13ZWFrKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJfcmF3UmVnZXhJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoVGltZW91dERlbGF5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoUGVuZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElsLnByb3RvdHlwZSwiX3JlZ2V4TWF0Y2hlcyIsdm9pZCAwKTtFKFtSdCgicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbC5wcm90b3R5cGUsIl9yZWdleElucHV0IixudWxsKTtFKFtCdCgiX3JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLElsLnByb3RvdHlwZSwiX3JlZ2V4SW5wdXRDaGFuZ2VkIixudWxsKTtJbD1FKFt5dCgidGYtZ3JhcGgtbm9kZS1zZWFyY2giKV0sSWwpO3ZhciBsY3Q9L2RldmljZTooW146XSs6WzAtOV0rKSQvLHNjdD1be3JlZ2V4OmxjdH1dLFFsZT1bXSx1dXI9bmV3IFNldChbcW4uQ09NUFVURV9USU1FLHFuLk1FTU9SWV0pLFBuPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PXFuLHRoaXMuc3RhdHM9bnVsbCx0aGlzLmRldmljZXNGb3JTdGF0cz1udWxsLHRoaXMuY29sb3JCeT1xbi5TVFJVQ1RVUkUsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTAsdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9ITAsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPUZzLk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLkdSQVBIX1RZUEVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlfSl9X29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLk5PREVfQ09MT1JfTU9ERV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5jb2xvckJ5fSl9X29uVHJhY2VJbnB1dHNDaGFuZ2VkQnlVc2VyR2VzdHVyZSgpe1BvKHthY3Rpb25JZDpqci5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYodCE9bnVsbCl7dmFyIHI9e30sbj1nUC5lYWNoKHQuZGV2X3N0YXRzLGZ1bmN0aW9uKGkpe3ZhciBvPWdQLnNvbWUoc2N0LGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlZ2V4LnRlc3QoaS5kZXZpY2UpfSksYT1nUC5zb21lKFFsZSxmdW5jdGlvbihzKXtyZXR1cm4gcy5yZWdleC50ZXN0KGkuZGV2aWNlKX0pO28mJiFhJiYocltpLmRldmljZV09ITApfSk7dGhpcy5zZXQoImRldmljZXNGb3JTdGF0cyIscil9fWdldCBfY3VycmVudERldmljZXMoKXt2YXIgdD10aGlzLmRldmljZXNGb3JTdGF0cztsZXQgcj10aGlzLnN0YXRzLG89KHI/ci5kZXZfc3RhdHM6W10pLm1hcChzPT5zLmRldmljZSkuZmlsdGVyKHM9PnNjdC5zb21lKGw9PmwucmVnZXgudGVzdChzKSkpLGE9emx0KG8pO2lmKGEubGVuZ3RoPT0xKXtsZXQgcz1hWzBdLm1hdGNoKGxjdCk7cyYmKGFbMF09c1sxXSl9cmV0dXJuIG8ubWFwKChzLGwpPT57bGV0IGM9bnVsbDtyZXR1cm4gUWxlLmZvckVhY2godT0+e3UucmVnZXgudGVzdChzKSYmKGM9dS5tc2cpfSkse2RldmljZTpzLHN1ZmZpeDphW2xdLHVzZWQ6dD09bnVsbD92b2lkIDA6dFtzXSxpZ25vcmVkTXNnOmN9fSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtsZXQgcj10LnRhcmdldCxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VzRm9yU3RhdHMpLGk9ci52YWx1ZTtyLmNoZWNrZWQ/bltpXT0hMDpkZWxldGUgbltpXSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixuKX1fbnVtVGFncyh0LHIpe3JldHVybiB0aGlzLl9nZXRUYWdzKHQscikubGVuZ3RofV9nZXRUYWdzKHQscil7cmV0dXJuIXR8fCF0W3JdP1tdOnRbcl0udGFnc31fZml0KCl7dGhpcy5maXJlKCJmaXQtdGFwIil9X2lzR3JhZGllbnRDb2xvcmluZyh0LHIpe3JldHVybiB1dXIuaGFzKHIpJiZ0IT1udWxsfV9lcXVhbHModCxyKXtyZXR1cm4gdD09PXJ9Z2V0IF9jdXJyZW50RGV2aWNlUGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zO2xldCByPXQuZGV2aWNlLmZpbHRlcihvPT5zY3Quc29tZShhPT5hLnJlZ2V4LnRlc3Qoby5kZXZpY2UpKSksbj16bHQoci5tYXAobz0+by5kZXZpY2UpKTtpZihuLmxlbmd0aD09MSl7dmFyIGk9blswXS5tYXRjaChsY3QpO2kmJihuWzBdPWlbMV0pfXJldHVybiByLm1hcCgobyxhKT0+KHtkZXZpY2U6blthXSxjb2xvcjpvLmNvbG9yfSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXM7cmV0dXJuIHQueGxhX2NsdXN0ZXJ9Z2V0IF9jdXJyZW50R3JhZGllbnRQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXMscj10aGlzLmNvbG9yQnk7aWYoIXRoaXMuX2lzR3JhZGllbnRDb2xvcmluZyh0aGlzLnN0YXRzLHIpKXJldHVybiBudWxsO2xldCBuPXRbcl0saT1uLm1pblZhbHVlLG89bi5tYXhWYWx1ZTtyZXR1cm4gcj09PXFuLk1FTU9SWT8oaT1OZChpLGlQKSxvPU5kKG8saVApKTpyPT09cW4uQ09NUFVURV9USU1FJiYoaT1OZChpLG9QKSxvPU5kKG8sb1ApKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpvLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7dmFyIGE7bGV0IHI9KGE9dC50YXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDphWzBdO2lmKCFyKXJldHVybjtsZXQgbj1yLm5hbWUsaT1uLmxhc3RJbmRleE9mKCIuIik7aT49MCYmKG49bi5zdWJzdHJpbmcoMCxpKSk7bGV0IG89bi5sYXN0SW5kZXhPZigiLyIpO28+PTAmJihuPW4uc3Vic3RyaW5nKG8rMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksUG8oe2FjdGlvbklkOmpyLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTX0pfV9kYXRhc2V0c0NoYW5nZWQodCxyKXt2YXIgbjtyIT1udWxsJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKChuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pPT1udWxsP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQscixuLGkpe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dP251bGw6e3J1bjp0W3JdLm5hbWUsdGFnOnRbcl0udGFnc1tuXS50YWcsdHlwZTppfX1fc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQodCl7dmFyIHI7IXRoaXMuZGF0YXNldHN8fCh0aGlzLmNvbG9yQnk9cW4uU1RSVUNUVVJFLHRoaXMuX3NlbGVjdGVkVGFnSW5kZXg9MCx0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpLHRoaXMudHJhY2VJbnB1dHM9ITEsdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZSgocj10aGlzLmRhdGFzZXRzW3RdKT09bnVsbD92b2lkIDA6ci5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtsZXR7ZGF0YXNldHM6dCxfc2VsZWN0ZWRSdW5JbmRleDpyLF9zZWxlY3RlZFRhZ0luZGV4Om59PXRoaXM7aWYoIXR8fCF0W3JdfHwhdFtyXS50YWdzW25dfHx0W3JdLnRhZ3Nbbl0ub3BHcmFwaClyZXR1cm4gRnMuT1BfR1JBUEg7bGV0IGk9dFtyXTtyZXR1cm4gaS50YWdzW25dLnByb2ZpbGU/RnMuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP0ZzLkNPTkNFUFRVQUxfR1JBUEg6RnMuT1BfR1JBUEh9X2dldEZpbGUoKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9X3NldERvd25sb2FkRmlsZW5hbWUodCl7dGhpcy5fZG93bmxvYWRGaWxlbmFtZT0odHx8ImdyYXBoIikrIi5wbmcifV9zdGF0c05vdE51bGwodCl7cmV0dXJuIHQhPT1udWxsfV90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfV9nZXRUb2dnbGVMZWdlbmRJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn1fZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5vcEdyYXBofV9nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLnByb2ZpbGV9X2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5jb25jZXB0dWFsR3JhcGh9fTtQbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjNTU1OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZV8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZF8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICNmZmY7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogI2YzZjNmMzsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICNlZWU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogNXB4IDAgNXB4IDVweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyB7CiAgICAgICAgcGFkZGluZzogMCAyMHB4IDIwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtaG9sZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciB7CiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yKTsKICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciwKICAgICAgLmxlZ2VuZC1jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICB9CiAgICAgIHN2Zy5pY29uLAogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblZhbHVlcyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblN0YXJ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgICAuZG9tYWluRW5kIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNvbG9yQm94IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLmltYWdlLWljb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZ3JheSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogOHB4IDVweCA4cHggMDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3IpOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5idXR0b24tdGV4dCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICAudXBsb2FkLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24taWNvbiB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIuY29udHJvbC1vcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMTVweCAxNXB4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICBzcGFuLmNvdW50ZXIgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICB9CgogICAgICAucnVucy1yb3cgLnRpdGxlLAogICAgICAudGFncy1yb3cgLnRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IHBhcGVyLWl0ZW0sCiAgICAgIC50YWdzLXJvdyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQuZ3JhZGllbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICB9CgogICAgICAvKiogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyB0aGF0IHN1cHByZXNzIHBvaW50ZXIgZXZlbnRzIGZvciBkaXNhYmxlZCBidXR0b25zLiBPdGhlcndpc2UsIHRoZSAqLwogICAgICAvKiAgdG9vbHRpcHMgZG8gbm90IGFwcGVhci4gKi8KICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAubGVnZW5kLWNsYXJpZmllciB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBoZWxwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgcGFwZXItdG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICB9CgogICAgICAvKiogT3RoZXJ3aXNlLCBwb2x5bWVyIFVJIGNvbnRyb2xzIGFwcGVhciBhdG9wIG5vZGUgc2VhcmNoLiAqLwogICAgICB0Zi1ncmFwaC1ub2RlLXNlYXJjaCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDx0Zi1ncmFwaC1ub2RlLXNlYXJjaAogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtbm9kZS1zZWFyY2g+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLXRhcD0iX2ZpdCIgYWx0PSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXNwZWN0LXJhdGlvIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5GaXQgdG8gc2NyZWVuPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgIG9uLWNsaWNrPSJkb3dubG9hZCIKICAgICAgICAgIGFsdD0iRG93bmxvYWQgUE5HIgogICAgICAgID4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS1kb3dubG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+RG93bmxvYWQgUE5HPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfZ2V0RmlsZSIKICAgICAgICAgICAgYWx0PSJVcGxvYWQgZmlsZSIKICAgICAgICAgICAgdGl0bGU9IlVwbG9hZCBhIHBidHh0IGZpbGUgdG8gdmlldyBhIGdyYXBoIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS11cGxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+VXBsb2FkIGZpbGU8L3NwYW4+CiAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgICAgIGlkPSJmaWxlIgogICAgICAgICAgICAgIG5hbWU9ImZpbGUiCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfdXBkYXRlRmlsZUlucHV0IgogICAgICAgICAgICAgIGFjY2VwdD0iLnBidHh0IgogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHJ1bnMtcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICBSdW4gPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgIG5vaW5rCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkUnVuSW5kZXh9fSIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciB0YWdzLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciIKICAgICAgICAgICAgICA+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgICAgbm9pbmsKICAgICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWdJbmRleH19IgogICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkdyYXBoIHR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZEdyYXBoVHlwZX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPCEtLSBOb3RlIHRoYXQgdGhlIG5hbWUgaGFzIHRvIG1hdGNoIHRoYXQgb2YgdGZfZ3JhcGhfY29tbW9uLlNlbGVjdGlvblR5cGUuIC0tPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJvcF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+T3AgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJjb25jZXB0dWFsX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPkNvbmNlcHR1YWwgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJwcm9maWxlIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Qcm9maWxlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPk5vZGUgb3B0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICBjaGVja2VkPSJ7e3RyYWNlSW5wdXRzfX0iCiAgICAgICAgICBvbi1jaGFuZ2U9Il9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YXV0b0V4dHJhY3ROb2Rlc319Ij4KICAgICAgICAgIEF1dG8tZXh0cmFjdCBoaWdoLWRlZ3JlZSBub2RlcwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICAgICAgPlNob3cgaGVhbHRoIHBpbGxzPC9wYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Db2xvciBieTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5Lk5PTkVdXSI+Tm9uZTwvcGFwZXItcmFkaW8tYnV0dG9uPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LlNUUlVDVFVSRV1dIgogICAgICAgICAgICA+U3RydWN0dXJlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5ERVZJQ0VdXSIKICAgICAgICAgICAgPkRldmljZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuWExBX0NMVVNURVJdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgID4KICAgICAgICAgICAgWExBIGNsdXN0ZXIKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IFhMQSBjbHVzdGVyIGlzIG9ubHkgZW5hYmxlZCBpZiBhdCBsZWFzdCAxIG9wIHNwZWNpZmllcwogICAgICAgICAgICBhbiBYTEEgY2x1c3Rlci4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuQ09NUFVURV9USU1FXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBjb21wdXRlIHRpbWUgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5NRU1PUlldXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIE1lbW9yeQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuT1BfQ09NUEFUSUJJTElUWV1dIgogICAgICAgICAgPgogICAgICAgICAgICBUUFUgY29tcGF0aWJpbGl0eQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgd2hldGhlciBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSBmb3IgdGhlIFRQVSBkZXZpY2UuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGVnZW5kLXRvb2xiYXIiIG9uLWNsaWNrPSJfdG9nZ2xlTGVnZW5kT3BlbiI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZS1sZWdlbmQtdGV4dCI+TGVnZW5kPC9zcGFuPgogICAgICAgIDxpcm9uLWljb24KICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLWJ1dHRvbiIKICAgICAgICA+CiAgICAgICAgPC9pcm9uLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIiBjbGFzcz0ibGVnZW5kLWNvbnRlbnQiPgogICAgICAgIDwhLS0gQ29sb3ItbW9kZS1zcGVjaWZpYyBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNHcmFkaWVudENvbG9yaW5nKHN0YXRzLCBjb2xvckJ5KV1dIj4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBjbGFzcz0iY29sb3ItdGV4dCBncmFkaWVudC1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudCIKICAgICAgICAgICAgICAgICAgeDE9IjAlIgogICAgICAgICAgICAgICAgICB5MT0iMCUiCiAgICAgICAgICAgICAgICAgIHgyPSIxMDAlIgogICAgICAgICAgICAgICAgICB5Mj0iMCUiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InN0YXJ0IgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5zdGFydENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVuZCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjEwMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5lbmRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgd2lkdGg9IjEzNSIKICAgICAgICAgICAgICAgIGhlaWdodD0iMjAiCiAgICAgICAgICAgICAgICBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIKICAgICAgICAgICAgICAgIHN0cm9rZT0iYmxhY2siCiAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblZhbHVlcyBjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5FbmQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5tYXhWYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIiAvPgogICAgICAgICAgICA8ZGl2PkRldmljZXMgaW5jbHVkZWQgaW4gc3RhdHM6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VzXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyBkZXZpY2VzLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgICA+PGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlJD0iW1tpdGVtLmRldmljZV1dIgogICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iCiAgICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX2RldmljZUNoZWNrYm94Q2xpY2tlZCIKICAgICAgICAgICAgICAgICAgLz48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbaXRlbS5zdWZmaXhdXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2l0ZW0uaWdub3JlZE1zZ11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICAgIGljb249ImhlbHAiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGVscC1pY29uIgogICAgICAgICAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICA+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPiBjb2xvcnMgPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+c2FtZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ2RldmljZScpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iW1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAneGxhX2NsdXN0ZXInKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI3VuZmlsbGVkLXJlY3QiCiAgICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS54bGFfY2x1c3Rlcl1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjZ3JleS1yZWN0IgogICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIFhMQSBjbHVzdGVyPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+VmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2RiNDQzNyIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPkludmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RhdHNOb3ROdWxsKHN0YXRzKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmFkZWQ+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVudXNlZCBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBDb21tb24gbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4oKiA9IGV4cGFuZGFibGUpPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVuY2Fwc3VsYXRlcyBhIHNldCBvZiBub2Rlcy4gTmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbCBhbmQKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHNjb3BlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgcGVyZm9ybXMgYW4gb3BlcmF0aW9uLiBUaGVzZSBub2RlcyBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU0VSSUVTIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBVbmNvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iU0VSSUVTIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0id2hpdGUiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiM4NDg0ODQiCiAgICAgICAgICAgICAgICAgICAgICBjeD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICBjeT0iMTAiCiAgICAgICAgICAgICAgICAgICAgICByPSI1IgogICAgICAgICAgICAgICAgICAgID48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IG91dHB1dHMgYSBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU1VNTUFSWSIgaGVpZ2h0PSIyMCI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgU3VtbWFyeQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIERhdGFmbG93IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgICAgdXB3YXJkcyB1bmxlc3MgYXJyb3doZWFkcyBzcGVjaWZ5IG90aGVyd2lzZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9IjIsIDIiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY3kgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYmV0d2VlbiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjcmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoYXQgdGhlIG91dGdvaW5nIG9wZXJhdGlvbiBub2RlIGNhbiBtdXRhdGUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyB0ZW5zb3IuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sUG4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUG4ucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUG4ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxQbi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFBuLnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsImhlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKTtFKFtSdCgiZGV2aWNlc0ZvclN0YXRzIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFBuLnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpO0UoW1J0KCJjb2xvckJ5UGFyYW1zIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUG4ucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKTtQbj1FKFt5dCgidGYtZ3JhcGgtY29udHJvbHMiKV0sUG4pO2Z1bmN0aW9uIGh1cihlKXtpZihlPT09InRydWUiKXJldHVybiEwO2lmKGU9PT0iZmFsc2UiKXJldHVybiExO2lmKGVbMF09PT0nIicpcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSk7bGV0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocik/ZTpyfWZ1bmN0aW9uIHRjZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntmZXRjaChlKS50aGVuKG49PntuLm9rP24uYXJyYXlCdWZmZXIoKS50aGVuKHQscik6bi50ZXh0KCkudGhlbihyLHIpfSl9KX1mdW5jdGlvbiBlY2UoZSx0KXtyZXR1cm4gWnNlKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+ZT09bnVsbD9Qcm9taXNlLnJlc29sdmUobnVsbCk6dGNlKGUpLHQsanIuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4ocj0+bUgoIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5yIT1udWxsP2d1cihyKTpQcm9taXNlLnJlc29sdmUobnVsbCksdCxqci5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpfWZ1bmN0aW9uIHJjZShlLHQscil7cmV0dXJuIG1IKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPURhdGUubm93KCk7aWYodCl7bGV0IG89eWllbGQgbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD0oKT0+YShsLnJlc3VsdCksbC5vbmVycm9yPSgpPT5zKGwuZXJyb3IpLGwucmVhZEFzQXJyYXlCdWZmZXIodCl9KTtyZXR1cm4gUG8oe3RpbWluZ0lkOmpyLkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSxldmVudFZhbHVlOkRhdGUubm93KCktbn0pLG99bGV0IGk9eWllbGQgdGNlKGUpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSxpfSkscixqci5GRVRDSF9QQlRYVF9CWVRFUykudGhlbihuPT5tSCgiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9Pm11cihuKSxyLGpyLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUKSl9ZnVuY3Rpb24gZnVyKGUsdCxyPTFlNixuPWAKYCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShzLGwsYyl7bGV0IHU9Yz49ZS5ieXRlTGVuZ3RoLGg9bC5zcGxpdChuKTtoWzBdPXMraFswXTtsZXQgZj11PyIiOmgucG9wKCk7Zm9yKGxldCBnIG9mIGgpdHJ5e3QoZyl9Y2F0Y2goXyl7byhfKTtyZXR1cm59aWYodSl7aSghMCk7cmV0dXJufWxldCBwPW5ldyBCbG9iKFtlLnNsaWNlKGMsYytyKV0pLGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmxvYWQ9ZnVuY3Rpb24oZyl7YShmLGcudGFyZ2V0LnJlc3VsdCxjK3IpfSxkLnJlYWRBc1RleHQocCl9YSgiIiwiIiwwKX0pfXZhciBwdXI9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5pbnB1dF9hcmciOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5vdXRwdXRfYXJnIjohMCwibGlicmFyeS52ZXJzaW9ucyI6ITAsbm9kZTohMCwibm9kZS5pbnB1dCI6ITAsIm5vZGUuYXR0ciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITB9LGR1cj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZnVuY3Rpb24gbXVyKGUpe3JldHVybiBuY2UoZSxwdXIpfWZ1bmN0aW9uIGd1cihlKXtyZXR1cm4gbmNlKGUsZHVyKS50aGVuKHQ9PnQuc3RlcF9zdGF0cyl9ZnVuY3Rpb24gbmNlKGUsdCl7bGV0IHI9e30sbj1bXSxpPVtdLG89cjtmdW5jdGlvbiBhKGwpe2xldCBjPWwuaW5kZXhPZigiOiIpLHU9bC5zdWJzdHJpbmcoMCxjKS50cmltKCksaD1odXIobC5zdWJzdHJpbmcoYysyKS50cmltKCkpO3JldHVybntuYW1lOnUsdmFsdWU6aH19ZnVuY3Rpb24gcyhsLGMsdSxoKXtsZXQgZj1sW2NdO2Y9PW51bGw/bFtjXT1oLmpvaW4oIi4iKWluIHQ/W3VdOnU6QXJyYXkuaXNBcnJheShmKT9mLnB1c2godSk6bFtjXT1bZix1XX1yZXR1cm4gZnVyKGUsZnVuY3Rpb24obCl7aWYobD1sLnRyaW0oKSwhIWwpc3dpdGNoKGxbbC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGM9bC5zdWJzdHJpbmcoMCxsLmxlbmd0aC0yKS50cmltKCksdT17fTtuLnB1c2gobyksaS5wdXNoKGMpLHMobyxjLHUsaSksbz11O2JyZWFrO2Nhc2UifSI6bz1uLnBvcCgpLGkucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgaD1hKGwpO3MobyxoLm5hbWUsaC52YWx1ZSxpLmNvbmNhdChoLm5hbWUpKTticmVha319KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX1mdW5jdGlvbiBvY2UoZSx0LHIsbj1uZXcgSnUsaT1yMyl7bGV0IG89SlMoZSwzMCwiRGF0YSIpLGE9SlMoZSwyMCwiR3JhcGgiKSxzPUpTKGUsNTAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKSxsPURhdGUubm93KCk7cmV0dXJuIHJjZSh0LHIsbykudGhlbihmdW5jdGlvbihjKXtpZighYy5ub2RlKXRocm93IG5ldyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtyZXR1cm4gbGxlKGMsc2xlLGEpfSwoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkudGhlbihjPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7WmxlKGMsbik7bGV0IHU9eWllbGQgYkgoYyxpLHMpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLWx9KSx7Z3JhcGg6YyxncmFwaEhpZXJhcmNoeTp1fX0pKS5jYXRjaChjPT57bGV0IHU9YEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLgoKJHtjfWA7dGhyb3cgZS5yZXBvcnRFcnJvcih1LGMpLFBvKHt0aW1pbmdJZDpqci5HUkFQSF9MT0FEX0ZBSUxFRCxldmVudFZhbHVlOkRhdGUubm93KCktbH0pLGN9KX12YXIgSHM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyPW5ldyBKdSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLl90ZW1wbGF0ZT1udWxsfV9zZWxlY3Rpb25DaGFuZ2VkKCl7IXRoaXMuc2VsZWN0aW9ufHx0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX1fbG9hZCh0KXtsZXR7cnVuOnIsdGFnOm4sdHlwZTppfT10O3N3aXRjaChpKXtjYXNlIEZzLk9QX0dSQVBIOmNhc2UgRnMuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7bGV0IG89bmV3IFVSTFNlYXJjaFBhcmFtcztvLnNldCgicnVuIixyKSxvLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGk9PT1Gcy5DT05DRVBUVUFMX0dSQVBIKSksbiYmby5zZXQoInRhZyIsbik7bGV0IGE9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixvKTtyZXR1cm4gdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpyLHRhZzpufX0pfWNhc2UgRnMuUFJPRklMRTp7bGV0e3RhZ3M6b309dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpmfSk9PmY9PT1yKSxzPW8uZmluZChmPT5mLnRhZz09PW4pLm9wR3JhcGg/bjpudWxsO2NvbnNvbGUuYXNzZXJ0KG8uZmluZChmPT5mLnRhZz09PXMpLGBSZXF1aXJlZCB0YWcgKCR7c30pIGlzIG1pc3NpbmcuYCk7bGV0IGM9IXRoaXMuX2dyYXBoUnVuVGFnfHx0aGlzLl9ncmFwaFJ1blRhZy5ydW4hPT1yfHx0aGlzLl9ncmFwaFJ1blRhZy50YWchPT1zP3RoaXMuX2xvYWQoe3J1bjpyLHRhZzpzLHR5cGU6RnMuT1BfR1JBUEh9KTpQcm9taXNlLnJlc29sdmUoKSx1PW5ldyBVUkxTZWFyY2hQYXJhbXM7dS5zZXQoInRhZyIsbiksdS5zZXQoInJ1biIscik7bGV0IGg9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsdSk7cmV0dXJuIGMudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoaCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtpfWApKX19X3JlYWRBbmRQYXJzZU1ldGFkYXRhKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9blAodGhpcyk7ZWNlKHQscikudGhlbihmdW5jdGlvbihuKXt0aGlzLl9zZXRPdXRTdGF0cyhuKX0uYmluZCh0aGlzKSl9X2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgodCxyKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2xldCBuPW5QKHRoaXMpO3JldHVybiBvY2Uobix0LHIhPT12b2lkIDA/cjpudWxsLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKGZ1bmN0aW9uKHtncmFwaDppLGdyYXBoSGllcmFyY2h5Om99KXt0aGlzLl9zZXRPdXRHcmFwaChpKSx0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShvKX0uYmluZCh0aGlzKSl9X3NlbGVjdGVkRmlsZUNoYW5nZWQoKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGVkRmlsZTtpZighdClyZXR1cm47bGV0IHI9dC50YXJnZXQsbj0oaT1yLmZpbGVzKT09bnVsbD92b2lkIDA6aVswXTshbnx8KHIudmFsdWU9IiIsdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLG4pKX19O0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIcy5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixvcyldLEhzLnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFh1KV0sSHMucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsIl9ncmFwaFJ1blRhZyIsdm9pZCAwKTtFKFtCdCgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3Rpb25DaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkIixudWxsKTtIcz1FKFt5dCgidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIpXSxIcyk7dmFyIGFjZT0icnVuIjt2YXIgT3I9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj15XyhhY2Use2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITF9KS5jYWxsKHRoaXMpLHRoaXMuX3J1bk9ic2VydmVyPXZfKGFjZSx7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57dC5jYW5jZWxsZWR8fHQudmFsdWUuZGVidWdnZXImJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxyKXtyZXR1cm4gdHx8ci5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxyKXtsZXQgbj17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeSh0KSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07ciE9PXZvaWQgMCYmKG4uc3RlcD1yKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChfZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6cixsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7dmFyIHQ9dGhpcy5faXNBdHRhY2hlZDt0aGlzLl9pbml0aWFsaXplZHx8IXR8fCh0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IEp1KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKHI9PntsZXQgbj1PYmplY3Qua2V5cyhyKTt0aGlzLl9kYXRhc2V0cz1uLnNvcnQoeGgpLm1hcChpPT57bGV0IG89cltpXSxzPU9iamVjdC5rZXlzKG8udGFncykuc29ydCh4aCkubWFwKGM9Pm8udGFnc1tjXSkubWFwKCh7dGFnOmMsY29uY2VwdHVhbF9ncmFwaDp1LG9wX2dyYXBoOmgscHJvZmlsZTpmfSk9Pih7dGFnOmMsZGlzcGxheU5hbWU6Yyxjb25jZXB0dWFsR3JhcGg6dSxvcEdyYXBoOmgscHJvZmlsZTpmfSkpLGw9by5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uc106cztyZXR1cm57bmFtZTppLHRhZ3M6bH19KSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9X2RldGVybWluZVNlbGVjdGVkRGF0YXNldCgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzRmV0Y2hlZCxyPXRoaXMuX2RhdGFzZXRzLG49dGhpcy5ydW47aWYoIW4pe3RoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtyZXR1cm59bGV0IGk9ci5maW5kSW5kZXgobz0+by5uYW1lPT09bik7aWYoaT09PS0xKXtpZih0KXtsZXQgbz10aGlzLiQkKCIjZXJyb3ItZGlhbG9nIik7by50ZXh0Q29udGVudD1gTm8gZGF0YXNldCBuYW1lZCAiJHtufSIgY291bGQgYmUgZm91bmQuYCxvLm9wZW4oKX1yZXR1cm59dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLGkpfV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLHI9dGhpcy5fZGF0YXNldHMsbj10aGlzLl9zZWxlY3RlZERhdGFzZXQ7IXR8fHIubGVuZ3RoPD1ufHx0aGlzLnNldCgicnVuIixyW25dLm5hbWUpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDt0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIT09bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47bGV0IHI9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxyKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBhPW9bMF0scz1vWzFdO2lmKCEhdGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBhKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGFbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixzKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLGEpLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQscixuKXtyZXR1cm4gdD8hcnx8IXIubGVuZ3RoP249PT0iRU1QVFkiOm49PT0iUFJFU0VOVCI6bj09PSJOT1RfTE9BREVEIn1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCh0KXt0aGlzLnJlbG9hZCgpfV9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kKCl7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCh0KXt0P3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9X21heWJlRmV0Y2hIZWFsdGhQaWxscygpeyF0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKXx8dGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtPci50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX3NlbGVjdGVkRGF0YXNldCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLGxvKV0sT3IucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sT3IucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxPci5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sT3IucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sT3IucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT3IucHJvdG90eXBlLCJfc2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9yLnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQnQoIl9pc0F0dGFjaGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwicnVuIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwiX3NlbGVjdGVkRGF0YXNldCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT3IucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCk7T3I9RShbeXQoInRmLWdyYXBoLWRhc2hib2FyZCIpXSxPcik7dmFyIE5IPUVlKE9lKCksMSk7dmFyIGtyPVZyLE1hPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPWtyLnNjYWxlT3JkaW5hbChrci5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9cix0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgcj10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxvPXRoaXMuZHgsYT10aGlzLnkscz10aGlzLl9kYXRhLGw9dGhpcy5fbmFtZSxjPXRoaXMubW9kZSx1PWtyLmhjbCh0aGlzLmNvbG9yU2NhbGUobCkpLGg9a3Iuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxmPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl19LHA9ZnVuY3Rpb24oTnQpe3JldHVybiBOdFthXX0sZD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W29dfSxnPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl0rTnRbb119LF89ZnVuY3Rpb24oTnQpe3JldHVybiBOdFtyXX07cj09PSJyZWxhdGl2ZSImJihfPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnQud2FsbF90aW1lLXNbMF0ud2FsbF90aW1lfSk7dmFyIHk9dGhpcy4kLnN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PXkud2lkdGgsYj15LmhlaWdodCxTLEM9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTtjPT09Im9mZnNldCI/KFM9Yi8yLjUsQy50b3A9Uys1KTpTPWItQy50b3AtQy5ib3R0b207dmFyIFA9eC1DLmxlZnQtQy5yaWdodCxrPWItQy50b3AtQy5ib3R0b20sTz1rci5taW4ocyxmKSxEPWtyLm1heChzLGcpLEI9a3IuZm9ybWF0KCIuM24iKSxJPWtyLmZvcm1hdCgiLjBmIik7cj09PSJ3YWxsX3RpbWUiP0k9a3IudGltZUZvcm1hdCgiJW0vJWQgJVgiKTpyPT09InJlbGF0aXZlIiYmKEk9ZnVuY3Rpb24oTnQpe3JldHVybiBrci5mb3JtYXQoIi4xciIpKE50LzM2ZTUpKyJoIn0pO3ZhciBMPXMubWFwKGZ1bmN0aW9uKE50LHplKXtyZXR1cm5ba3IubWluKE50W2ldLGYpLGtyLm1heChOdFtpXSxnKV19KSxSPXMubWFwKGZ1bmN0aW9uKE50KXtyZXR1cm4ga3IuZXh0ZW50KE50W2ldLHApfSksRj01MDAsej1rci5leHRlbnQocyxfKSxVPShyPT09IndhbGxfdGltZSI/a3Iuc2NhbGVUaW1lKCk6a3Iuc2NhbGVMaW5lYXIoKSkuZG9tYWluKHopLnJhbmdlKFswLGM9PT0ib2Zmc2V0Ij9rOjBdKSxXPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gUlt6ZV1bMV19KV0pLnJhbmdlKFtTLDBdKSxaPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFcuZG9tYWluKCkpLnJhbmdlKFtGLDBdKSxydD1rci5zY2FsZUxpbmVhcigpLmRvbWFpbihba3IubWluKHMsZnVuY3Rpb24oTnQsemUpe3JldHVybiBMW3plXVswXX0pLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gTFt6ZV1bMV19KV0pLm5pY2UoKS5yYW5nZShbMCxQXSksb3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4ocnQuZG9tYWluKCkpLnJhbmdlKFswLEZdKTtsZXQgc3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4oa3IuZXh0ZW50KHMsXykpLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLmludGVycG9sYXRlKGtyLmludGVycG9sYXRlSGNsKTt2YXIgU3Q9a3IuYXhpc0JvdHRvbShydCkudGlja3MoTWF0aC5tYXgoMixQLzIwKSksYnQ9a3IuYXhpc1JpZ2h0KFUpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tGb3JtYXQoSSksTXQ9a3IuYXhpc1JpZ2h0KFcpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tTaXplKFArNSkudGlja0Zvcm1hdChCKSxsdD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W25dK050W29dLzJ9LEt0PWtyLmxpbmUoKS54KGZ1bmN0aW9uKE50KXtyZXR1cm4gb3QobHQoTnQpKX0pLnkoZnVuY3Rpb24oTnQpe3JldHVybiBaKE50W2FdKX0pLF90PWZ1bmN0aW9uKE50KXtyZXR1cm4iTSIrb3QobHQoTnRbMF0pKSsiLCIrWigwKSsiTCIrS3QoTnQpLnNsaWNlKDEpKyJMIitvdChsdChOdFtOdC5sZW5ndGgtMV0pKSsiLCIrWigwKX0sY3Q9dGhpcy4kLnN2ZyxYPWtyLnNlbGVjdChjdCksZXQ9WC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksZHQ9WC5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUD4wJiZQPD0xNTB9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIFA+MTUwJiZQPD0zMDB9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gUD4zMDB9KSxxPWV0LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MubGVmdCsiLCIrQy50b3ArIikiKSxwdD1rci5iaXNlY3RvcihnKS5sZWZ0LGh0PWR0LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtUdC5zdHlsZSgib3BhY2l0eSIsMSksQ3Quc3R5bGUoIm9wYWNpdHkiLDEpLGF0LnN0eWxlKCJvcGFjaXR5IiwxKSxDZS5zdHlsZSgib3BhY2l0eSIsMSksaC5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7VHQuc3R5bGUoIm9wYWNpdHkiLDApLEN0LnN0eWxlKCJvcGFjaXR5IiwwKSxhdC5zdHlsZSgib3BhY2l0eSIsMCksQ2Uuc3R5bGUoIm9wYWNpdHkiLDApLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKSxJdC5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksaC5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixQdCksd3Q9aHQuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1DLmxlZnQrIiwiKy1DLnRvcCsiKSIpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLGt0PWh0LnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEocyksaWU9a3QuZXhpdCgpLnJlbW92ZSgpLGVlPWt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxMZT1lZS5tZXJnZShrdCkuc29ydChmdW5jdGlvbihOdCx6ZSl7cmV0dXJuIF8oTnQpLV8oemUpfSksYXI9cS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE50KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oTnQpKS1TOjApKyIpIn0pLGZyPWVlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKSx0dD1hci5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oTnQpe3JldHVybiBjPT09Im9mZnNldCI/LjE6MH0pLmF0dHIoInkxIixTKS5hdHRyKCJ5MiIsUykuYXR0cigieDIiLFApLCQ9ZWUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIiksSXQ9TGUuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihOdCl7cmV0dXJuIF90KE50W2ldKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLCR0PWFyLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK1AvRisiLCAiK1MvRisiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPyIiOnN0KF8oTnQpKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPzE6MH0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pLGhlPWVlLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxUdD1MZS5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pO2hlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMiksaGUuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBiZT1kdC5zZWxlY3QoIi54LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ4Il0pLG50PWJlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEN0PWJlLm1lcmdlKG50KTtudC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksbnQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLG50LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIFd0PWR0LnNlbGVjdCgiLnktYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSksZmU9V3QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYXQ9V3QubWVyZ2UoZmUpO2ZlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpLGZlLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSxmZS5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3ZhciBzZT1kdC5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLFF0PXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLENlPXNlLm1lcmdlKFF0KTtRdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxRdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksUXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxxLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5IixjPT09Im9mZnNldCI/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoYz09PSJvZmZzZXQiPy1TOjApKyIpIikuY2FsbChNdCkscS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitrKyIpIikuY2FsbChTdCkscS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsYz09PSJvZmZzZXQiPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCAiKyhjPT09Im9mZnNldCI/MDprKSsiKSIpLmNhbGwoYnQpLHEuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxxLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIik7ZnVuY3Rpb24gUHQoKXt2YXIgTnQ9a3IubW91c2UodGhpcyksemU9cnQuaW52ZXJ0KE50WzBdKSx5bj1VLmludmVydChOdFsxXSk7ZnVuY3Rpb24gV2koY24pe3JldHVybiBNYXRoLm1pbihjbltpXS5sZW5ndGgtMSxwdChjbltpXSx6ZSkpfXZhciBBcixQYT0xLzAsaG87VHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbixjeCl7dmFyIHJwPVdpKGNuKTtobz1jbjt2YXIgSz1ydChjbltpXVtycF1bbl0rY25baV1bcnBdW29dLzIpLGd0PVcoY25baV1bcnBdW2FdKSxFdD1jPT09Im9mZnNldCI/VShfKGNuKSktKFMtZ3QpOmd0LHh0PU1hdGguYWJzKE50WzFdLUV0KTtyZXR1cm4geHQ8UGEmJihQYT14dCxBcj1jbiksInRyYW5zbGF0ZSgiK0srIiwiK2d0KyIpIn0pLFR0LnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3ZhciBjeD1XaShjbik7cmV0dXJuIGNuW2ldW2N4XVthXX0pLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pLEl0LmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pO3ZhciBJYT1XaShobyk7Q3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK3J0KGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMikrIiwgIitrKyIpIn0pLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3JldHVybiBCKGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMil9KTt2YXIgbHg9YnQudGlja0Zvcm1hdCgpO2F0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oY24pe3JldHVybiJ0cmFuc2xhdGUoIitQKyIsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oQXIpKTowKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyIiOiJub25lIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGx4KF8oQXIpKX0pO3ZhciBjbT1NdC50aWNrRm9ybWF0KCk7Q2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK1ArIiwgIisoYz09PSJvZmZzZXQiPzA6VyhBcltpXVtJYV1bYV0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGNtKEFyW2ldW0lhXVthXSl9KTt2YXIgSjA9a3IubW91c2UoY3QpO2guc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhKMFswXSsxNSkrInB4LCIrKEowWzFdLTE1KSsicHgpIikuc2VsZWN0KCJzcGFuIikudGV4dChjPT09Im9mZnNldCI/Y20oQXJbaV1bSWFdW2FdKToocj09PSJzdGVwIj8ic3RlcCAiOiIiKStseChfKEFyKSkpfX19O01hLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwiZHgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE1hLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNYS5wcm90b3R5cGUsIm1vZGVUcmFuc2l0aW9uRHVyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxNYS5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxNYS5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWEucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKTtFKFtCdCgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTWEucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpO0UoW0J0KCJtb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxNYS5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKTtNYT1FKFt5dCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0sTWEpO2Z1bmN0aW9uIHl1cihlKXtsZXRbdCxyLG5dPWU7cmV0dXJue3dhbGxfdGltZTp0LHN0ZXA6cixtaW46TG0obi5tYXAoKFtpLCxdKT0+aSkpLG1heDpsdShuLm1hcCgoWyxpXSk9PmkpKSxidWNrZXRzOm4ubWFwKChbaSxvLGFdKT0+KHtsZWZ0OmkscmlnaHQ6byxjb3VudDphfSkpfX1mdW5jdGlvbiB2dXIoZSx0LHIsbj0zMCl7KHQ9PT12b2lkIDB8fHI9PW51bGwpJiYodD0wLHI9MCkscj09PXQmJihyPXQqMS4xKzEsdD10LzEuMS0xKTtsZXQgaT0oci10KS9uLG89MCxhPVtdO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBsPXQrcyppLGM9bCtpLHU9MDtmb3IoO288ZS5idWNrZXRzLmxlbmd0aDspe2xldCBoPU1hdGgubWluKHIsZS5idWNrZXRzW29dLnJpZ2h0KSxmPU1hdGgubWF4KHQsZS5idWNrZXRzW29dLmxlZnQpO2lmKGgtZj4wKXtsZXQgZD1NYXRoLm1pbihoLGMpLU1hdGgubWF4KGYsbCksZz1kLyhoLWYpKmUuYnVja2V0c1tvXS5jb3VudDt1Kz1kPjA/ZzowfWVsc2V7bGV0IGQ9Yz49cjt1Kz1sPD1mJiYoZD9oPD1jOmg8Yyk/ZS5idWNrZXRzW29dLmNvdW50OjB9aWYoaD5jKWJyZWFrO28rK31hLnB1c2goe3g6bCxkeDppLHk6dX0pfXJldHVybiBhfWZ1bmN0aW9uIHNjZShlKXtsZXQgdD1lLm1hcCh5dXIpLHI9TG0odCxpPT5pLm1pbiksbj1sdSh0LGk9PmkubWF4KTtyZXR1cm4gdC5tYXAoaT0+KHt3YWxsX3RpbWU6aS53YWxsX3RpbWUsc3RlcDppLnN0ZXAsYmluczp2dXIoaSxyLG4pfSkpfXZhciBFYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPXNjZShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHIpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odCl9cmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9fTtFYS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRWEucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxFYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVhLnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxFYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEVhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFYS5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtCdCgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3VwZGF0ZURhdGFUb0xvYWQiLG51bGwpO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFYS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RWE9RShbeXQoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKV0sRWEpO3ZhciBscz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2hpc3RvZ3JhbU1vZGU9Im9mZnNldCIsdGhpcy5fdGltZVByb3BlcnR5PSJzdGVwIix0aGlzLl9yZXN0YW1wPSExLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1fcmVkcmF3Q2F0ZWdvcnlQYW5lKHQscil7IXJ8fHQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKG49Pm4ucmVkcmF3KCkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihOSC5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49TkgubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSGlzdG9ncmFtcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtscy50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJoaXN0b2dyYW1Nb2RlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSGlzdG9ncmFtIG1vZGUiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvZmZzZXQiPm9mZnNldDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJPZmZzZXQgdGltZSBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaGlzdG9ncmFtIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlcgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIgogICAgICAgICAgICAgICAgICBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxscy5wcm90b3R5cGUsIl90aW1lUHJvcGVydHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGxzLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbHMucHJvdG90eXBlLCJfcmVzdGFtcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLGxzLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO2xzPUUoW3l0KCJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIildLGxzKTt2YXIgdTM9Y2xhc3N7Y29uc3RydWN0b3IodCxyPSEwKXt0aGlzLl9yZXF1ZXN0TWFuYWdlcj10LHRoaXMuX3VzZUh0dHBHZXQ9cn1nZXRFeHBlcmltZW50KHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL2V4cGVyaW1lbnQiLHQpfWdldERvd25sb2FkVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiaHBhcmFtcyIsIi9kb3dubG9hZF9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSkpfWxpc3RTZXNzaW9uR3JvdXBzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL3Nlc3Npb25fZ3JvdXBzIix0KX1saXN0TWV0cmljRXZhbHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCIvbWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxyKXtpZih0aGlzLl91c2VIdHRwR2V0KXtsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0LG5ldyBVUkxTZWFyY2hQYXJhbXMoe3JlcXVlc3Q6SlNPTi5zdHJpbmdpZnkocil9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyl9bGV0IG49bmV3IFV4O24ud2l0aENyZWRlbnRpYWxzPSEwLG4ubWV0aG9kVHlwZT1BbS5QT1NULG4uY29udGVudFR5cGU9InRleHQvcGxhaW4iLG4uYm9keT1KU09OLnN0cmluZ2lmeShyKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdFdpdGhPcHRpb25zKGksbil9fTt2YXIgX2NlPUVlKE9lKCksMSk7dmFyIERIPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3JpZW50YXRpb249Imhvcml6b250YWwifX07REgudGVtcGxhdGU9UWAKICAgIDxzbG90IG5hbWU9ImNvbnRlbnQiPjwvc2xvdD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3Qgc2xvdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBzbG90IHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyOiAwIHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsICNjY2MpOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIDo6c2xvdHRlZCgqOm5vdCg6bGFzdC1jaGlsZCkpIHsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiA1cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiA1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sREgucHJvdG90eXBlLCJvcmllbnRhdGlvbiIsdm9pZCAwKTtESD1FKFt5dCgiaHBhcmFtcy1zcGxpdC1sYXlvdXQiKV0sREgpO3ZhciBjcz17fTtLcyhjcyx7Y29sdW1uVmFsdWVCeUluZGV4OigpPT54MCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5CSCxldWNsaWRlYW5EaXN0OigpPT5oMyxmaWx0ZXJTZXQ6KCk9PlB1cixnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OigpPT56SCxoYXNoT2ZTdHJpbmc6KCk9PmRjdCxocGFyYW1OYW1lOigpPT5GZCxocGFyYW1WYWx1ZUJ5SW5kZXg6KCk9PmhjZSxocGFyYW1WYWx1ZUJ5TmFtZTooKT0+dWNlLGhwYXJhbVZhbHVlQnlWaXNpYmxlSW5kZXg6KCk9Pm1jZSxpc051bGxPclVuZGVmaW5lZDooKT0+VHVyLGwyTm9ybVNxdWFyZWQ6KCk9PnAzLG1ldHJpY05hbWU6KCk9PlF1LG1ldHJpY1ZhbHVlQnlJbmRleDooKT0+ZmNlLG1ldHJpY1ZhbHVlQnlOYW1lOigpPT5mMyxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5GSCxudW1Db2x1bW5zOigpPT51Y3QsbnVtSFBhcmFtczooKT0+bGNlLG51bU1ldHJpY3M6KCk9PmNjZSxudW1WaXNpYmxlQ29sdW1uczooKT0+d3VyLG51bVZpc2libGVIUGFyYW1zOigpPT5wY2UsbnVtVmlzaWJsZU1ldHJpY3M6KCk9PmRjZSxudW1lcmljQ29sdW1uRXh0ZW50OigpPT5oY3QscG9pbnRUb1JlY3RhbmdsZURpc3Q6KCk9PmdjZSxwcmV0dHlQcmludDooKT0+YjAscHJldHR5UHJpbnRIUGFyYW1WYWx1ZUJ5TmFtZTooKT0+U3VyLHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6KCk9Pk11cixxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOigpPT5BdXIscXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdDooKT0+Q3VyLHJvdGF0ZVN0cjooKT0+RXVyLHNjaGVtYUNvbHVtbk5hbWU6KCk9PmNjdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTooKT0+YnVyLHNlc3Npb25Hcm91cFdpdGhOYW1lOigpPT5mY3Qsc2V0QXJyYXlPYnNlcnZhYmx5OigpPT5wY3QsdHJhbnNsYXRlU3RyOigpPT55UCx2aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudDooKT0+X1B9KTt2YXIgT0g9RWUoT2UoKSwxKTtmdW5jdGlvbiBGZChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZSE9PSIiJiZlLmRpc3BsYXlOYW1lIT09dm9pZCAwP2UuZGlzcGxheU5hbWU6ZS5uYW1lfWZ1bmN0aW9uIFF1KGUpe2lmKGUuZGlzcGxheU5hbWUhPT0iIiYmZS5kaXNwbGF5TmFtZSE9PXZvaWQgMClyZXR1cm4gZS5kaXNwbGF5TmFtZTtsZXQgdD1lLm5hbWUuZ3JvdXAscj1lLm5hbWUudGFnO3JldHVybiB0PT09dm9pZCAwJiYodD0iIikscj09PXZvaWQgMCYmKHI9IiIpLHQ9PT0iIj9yOnQrIi4iK3J9ZnVuY3Rpb24gY2N0KGUsdCl7aWYodDxlLmhwYXJhbUNvbHVtbnMubGVuZ3RoKXJldHVybiBGZChlLmhwYXJhbUNvbHVtbnNbdF0uaHBhcmFtSW5mbyk7bGV0IHI9dC1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoO3JldHVybiBRdShlLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mbyl9ZnVuY3Rpb24gbGNlKGUpe3JldHVybiBlLmhwYXJhbUNvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIGNjZShlKXtyZXR1cm4gZS5tZXRyaWNDb2x1bW5zLmxlbmd0aH1mdW5jdGlvbiB1Y3QoZSl7cmV0dXJuIGxjZShlKStjY2UoZSl9ZnVuY3Rpb24gdWNlKGUsdCl7cmV0dXJuIGVbdF19ZnVuY3Rpb24gZjMoZSx0KXtyZXR1cm4gZS5maW5kKHI9Pk9ILmlzRXF1YWwoci5uYW1lLHQpKX1mdW5jdGlvbiBoY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1Db2x1bW5zW3JdLmhwYXJhbUluZm8ubmFtZV19ZnVuY3Rpb24gZmNlKGUsdCxyKXtsZXQgbj1lLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mby5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiB4MChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1Db2x1bW5zLmxlbmd0aD9oY2UoZSx0LHIpOmZjZShlLHQsci1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiBoY3QoZSx0LHIpe3JldHVybiBhYSh0LG49PngwKGUsbixyKSl9ZnVuY3Rpb24gekgoZSx0LHIpe2xldCBuO2lmKHI8dC5ocGFyYW1JbmZvcy5sZW5ndGgpbj1lLmhwYXJhbUNvbHVtbnMuZmluZEluZGV4KGk9PmkuaHBhcmFtSW5mby5uYW1lPT09dC5ocGFyYW1JbmZvc1tyXS5uYW1lKTtlbHNle2xldCBpPXItdC5ocGFyYW1JbmZvcy5sZW5ndGgsbz10Lm1ldHJpY0luZm9zW2ldLm5hbWU7bj1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoK2UubWV0cmljQ29sdW1ucy5maW5kSW5kZXgoYT0+YS5tZXRyaWNJbmZvLm5hbWU9PT1vKX1yZXR1cm4gY29uc29sZS5hc3NlcnQobiE9PS0xKSxufWZ1bmN0aW9uIGJ1cihlLHQpe2lmKHQ8ZS5ocGFyYW1JbmZvcy5sZW5ndGgpcmV0dXJuIEZkKGUuaHBhcmFtSW5mb3NbdF0pO2xldCByPXQtZS5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJuIFF1KGUubWV0cmljSW5mb3Nbcl0pfWZ1bmN0aW9uIHBjZShlKXtyZXR1cm4gZS5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gZGNlKGUpe3JldHVybiBlLm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiB3dXIoZSl7cmV0dXJuIHBjZShlKStkY2UoZSl9ZnVuY3Rpb24gX1AoZSx0LHIpe3JldHVybiBhYSh0LG49PkJIKGUsbixyKSl9ZnVuY3Rpb24gU3VyKGUsdCl7cmV0dXJuIGIwKHVjZShlLHQpKX1mdW5jdGlvbiBNdXIoZSx0KXtyZXR1cm4gYjAoZjMoZSx0KSl9ZnVuY3Rpb24gZmN0KGUsdCl7cmV0dXJuIGUuZmluZChyPT5yLm5hbWU9PT10KX1mdW5jdGlvbiBtY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1JbmZvc1tyXS5uYW1lXX1mdW5jdGlvbiBGSChlLHQscil7bGV0IG49ZS5tZXRyaWNJbmZvc1tyXS5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBCSChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1JbmZvcy5sZW5ndGg/bWNlKGUsdCxyKTpGSChlLHQsci1lLmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gYjAoZSl7cmV0dXJuIE9ILmlzTnVtYmVyKGUpP2UudG9QcmVjaXNpb24oNSk6ZT09bnVsbD8iIjplLnRvU3RyaW5nKCl9ZnVuY3Rpb24gcDMoZSx0KXtyZXR1cm4gZSplK3QqdH1mdW5jdGlvbiBoMyhlLHQscixuKXtyZXR1cm4gTWF0aC5zcXJ0KHAzKGUtcix0LW4pKX1mdW5jdGlvbiBnY2UoZSx0LHIsbixpLG8pe2lmKGU8ciYmdDxuKXJldHVybiBoMyhlLHQscixuKTtpZihyPD1lJiZlPGkmJnQ8bilyZXR1cm4gbi10O2lmKGk8PWUmJnQ8bilyZXR1cm4gaDMoZSx0LGksbik7aWYoZTxyJiZuPD10JiZ0PG8pcmV0dXJuIHItZTtpZihyPD1lJiZlPGkmJm48PXQmJnQ8bylyZXR1cm4gMDtpZihpPD1lJiZuPD10JiZ0PG8pcmV0dXJuIGUtaTtpZihlPHImJm88PXQpcmV0dXJuIGgzKGUsdCxyLG8pO2lmKHI8PWUmJmU8aSYmbzw9dClyZXR1cm4gdC1vO2lmKGk8PWUmJm88PXQpcmV0dXJuIGgzKGUsdCxpLG8pO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIn1mdW5jdGlvbiB5UChlLHQpe3JldHVybiB0PT09dm9pZCAwPyJ0cmFuc2xhdGUoIitlKyIpIjoidHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9ZnVuY3Rpb24gRXVyKGUsdCxyKXtsZXQgbj0icm90YXRlKCIrZTtyZXR1cm4gdCE9PXZvaWQgMCYmciE9PXZvaWQgMCYmKG49bisiLCIrdCsiLCIrciksbj1uKyIpIixufWZ1bmN0aW9uIFR1cihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBDdXIoZSx0LHIsbixpLG8pe2UudmlzaXQoKGEscyxsLGMsdSk9PntpZihhLmxlbmd0aD09PXZvaWQgMCl7ZG97bGV0IGg9ZS54KCkoYS5kYXRhKSxmPWUueSgpKGEuZGF0YSk7dDw9aCYmaDxuJiZyPD1mJiZmPGkmJm8oYS5kYXRhKX13aGlsZShhPWEubmV4dCk7cmV0dXJuITB9cmV0dXJuIHM+PW58fGM8PXR8fGw+PWl8fHU8PXJ9KX1mdW5jdGlvbiBBdXIoZSx0LHIsbixpKXtlLnZpc2l0KChvLGEscyxsLGMpPT57aWYoby5sZW5ndGg9PT12b2lkIDApe2Rve2xldCB1PWUueCgpKG8uZGF0YSksaD1lLnkoKShvLmRhdGEpLGY9aDModCxyLHUsaCk7Zjw9biYmaShvLmRhdGEsZil9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBnY2UodCxyLGEscyxsLGMpPm59KX1mdW5jdGlvbiBQdXIoZSx0KXtsZXQgcj1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gobj0+e3QobikmJnIuYWRkKG4pfSkscn1mdW5jdGlvbiBwY3QoZSx0LHIpe2xldCBuPWUuZ2V0KHQsZSk7aWYoIUFycmF5LmlzQXJyYXkobikpe2Uuc2V0KHQscik7cmV0dXJufWUuc3BsaWNlLmFwcGx5KGUsW3QsMCxuLmxlbmd0aF0uY29uY2F0KHIpKX1mdW5jdGlvbiBkY3QoZSl7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0PXQqMzErZS5jaGFyQ29kZUF0KHIpJjQyOTQ5NjcyOTU7cmV0dXJuIHQrVEkoMiwzMSl9dmFyIEl1cj0xMCxRbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb25maWd1cmF0aW9uPXtzY2hlbWE6e2hwYXJhbUNvbHVtbnM6QXJyYXkoKSxtZXRyaWNDb2x1bW5zOkFycmF5KCl9LGNvbHVtbnNWaXNpYmlsaXR5OkFycmF5KCksdmlzaWJsZVNjaGVtYTp7aHBhcmFtSW5mb3M6QXJyYXkoKSxtZXRyaWNJbmZvczpBcnJheSgpfX0sdGhpcy5zZXNzaW9uR3JvdXBzPVtdLHRoaXMuZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXM9ITEsdGhpcy5kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcz0hMSx0aGlzLl9zdGF0dXNlcz1be3ZhbHVlOiJTVEFUVVNfVU5LTk9XTiIsZGlzcGxheU5hbWU6IlVua25vd24iLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX1NVQ0NFU1MiLGRpc3BsYXlOYW1lOiJTdWNjZXNzIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19GQUlMVVJFIixkaXNwbGF5TmFtZToiRmFpbHVyZSIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfUlVOTklORyIsZGlzcGxheU5hbWU6IlJ1bm5pbmciLGFsbG93ZWQ6ITB9XSx0aGlzLl9nZXRFeHBlcmltZW50UmVzb2x2ZWQ9bmV3IFByb21pc2UodD0+e3RoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50PXR9KSx0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlcj1uZXcgYW4sdGhpcy5fcGFnZVNpemVJbnB1dD17dmFsdWU6IjEwMCIsaW52YWxpZDohMX0sdGhpcy5fcGFnZU51bWJlcklucHV0PXt2YWx1ZToiMSIsaW52YWxpZDohMX0sdGhpcy5fcGFnZUNvdW50U3RyPSI/Iix0aGlzLl9ocGFyYW1OYW1lPUZkLHRoaXMuX21ldHJpY05hbWU9UXUsdGhpcy5fcHJldHR5UHJpbnQ9YjB9cmVsb2FkKCl7dGhpcy5fcXVlcnlTZXJ2ZXIoKX1fY3N2VXJsKHQscil7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIsImNzdiIpfV9qc29uVXJsKHQscil7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIsImpzb24iKX1fbGF0ZXhVcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwibGF0ZXgiKX1fZG93bmxvYWREYXRhVXJsKHQscixuKXtsZXQgaT1yLmNvbHVtbnNWaXNpYmlsaXR5O3JldHVybiB0aGlzLmJhY2tlbmQuZ2V0RG93bmxvYWRVcmwobix0LGkpfV9jb21wdXRlRXhwZXJpbWVudEFuZFJlbGF0ZWRQcm9wcygpe2xldCB0PWNzO2lmKHQuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5iYWNrZW5kKXx8dC5pc051bGxPclVuZGVmaW5lZCh0aGlzLmV4cGVyaW1lbnROYW1lKSlyZXR1cm47bGV0IHI9e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWV9O3RoaXMuYmFja2VuZC5nZXRFeHBlcmltZW50KHIpLnRoZW4obj0+e19jZS5pc0VxdWFsKG4sdGhpcy5fZXhwZXJpbWVudCl8fCh0aGlzLnNldCgiX2V4cGVyaW1lbnQiLG4pLHRoaXMuX2NvbXB1dGVIUGFyYW1zKCksdGhpcy5fY29tcHV0ZU1ldHJpY3MoKSx0aGlzLl9xdWVyeVNlcnZlcigpLHRoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50KCkpfSkuZmluYWxseSgoKT0+e3RoaXMuX2NvbXB1dGVEYXRhRm91bmQoKX0pfV9jb21wdXRlRGF0YUZvdW5kKCl7bGV0IHQ9Qm9vbGVhbih0aGlzLl9leHBlcmltZW50JiZ0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zJiZ0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zLmxlbmd0aD4wKTt0aGlzLnNldCgiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHQpLHRoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsIXQpfV9jb21wdXRlSFBhcmFtcygpe2xldCB0PVtdO3RoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MuZm9yRWFjaChpPT57bGV0IG89e2luZm86aSxkaXNwbGF5ZWQ6ITEsZmlsdGVyOnt9fTtvLmluZm8uaGFzT3duUHJvcGVydHkoImRvbWFpbkRpc2NyZXRlIik/by5pbmZvLmRvbWFpbkRpc2NyZXRlLmxlbmd0aDxJdXI/KG8uZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVtdLG8uaW5mby5kb21haW5EaXNjcmV0ZS5mb3JFYWNoKGE9PntvLmZpbHRlci5kb21haW5EaXNjcmV0ZS5wdXNoKHt2YWx1ZTphLGNoZWNrZWQ6ITB9KX0pKTpvLmZpbHRlci5yZWdleHA9IiI6by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQiP28uZmlsdGVyLmludGVydmFsPXttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19OmNvbnNvbGUud2FybigiY2Fubm90IHByb2Nlc3MgZG9tYWluIHR5cGUgJXMgd2l0aG91dCBkaXNjcmV0ZSBkb21haW4gdmFsdWVzIixvLmluZm8udHlwZSksdC5wdXNoKG8pfSksdC5zb3J0KChpLG8pPT5pLmluZm8uZGlmZmVycz09PW8uaW5mby5kaWZmZXJzPzA6aS5pbmZvLmRpZmZlcnM/LTE6MSk7bGV0IG49TWF0aC5taW4oNSx0Lmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxuO2krKyl0W2ldLmRpc3BsYXllZD0hMDt0aGlzLnNldCgiX2hwYXJhbXMiLHQpfV9jb21wdXRlTWV0cmljcygpe2xldCB0PVtdO3RoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MuZm9yRWFjaCgobixpKT0+e2xldCBvPXtpbmZvOm4sZmlsdGVyOntpbnRlcnZhbDp7bWluOnt2YWx1ZToiIixpbnZhbGlkOiExfSxtYXg6e3ZhbHVlOiIiLGludmFsaWQ6ITF9fX0sZGlzcGxheWVkOmk8NX07dC5wdXNoKG8pfSksdGhpcy5zZXQoIl9tZXRyaWNzIix0KX1fY29tcHV0ZVNjaGVtYSgpe3JldHVybiF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcz97aHBhcmFtQ29sdW1uczpbXSxtZXRyaWNDb2x1bW5zOltdfTp7aHBhcmFtQ29sdW1uczp0aGlzLl9ocGFyYW1zLm1hcCh0PT4oe2hwYXJhbUluZm86dC5pbmZvfSkpLG1ldHJpY0NvbHVtbnM6dGhpcy5fbWV0cmljcy5tYXAodD0+KHttZXRyaWNJbmZvOnQuaW5mb30pKX19X3VwZGF0ZUNvbmZpZ3VyYXRpb24oKXt0aGlzLmRlYm91bmNlKCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsKCk9Pnt0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp0aGlzLl9jb21wdXRlU2NoZW1hKCksY29sdW1uc1Zpc2liaWxpdHk6dGhpcy5fY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCksdmlzaWJsZVNjaGVtYTp0aGlzLl9jb21wdXRlVmlzaWJsZVNjaGVtYSgpfX0pfV9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKXtyZXR1cm4hdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3M/W106dGhpcy5faHBhcmFtcy5tYXAodD0+dC5kaXNwbGF5ZWQpLmNvbmNhdCh0aGlzLl9tZXRyaWNzLm1hcCh0PT50LmRpc3BsYXllZCkpfV9jb21wdXRlVmlzaWJsZVNjaGVtYSgpe2lmKCF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcylyZXR1cm57aHBhcmFtSW5mb3M6W10sbWV0cmljSW5mb3M6W119O2xldCB0PXRoaXMuX2hwYXJhbXMuZmlsdGVyKG49Pm4uZGlzcGxheWVkKS5tYXAobj0+bi5pbmZvKSxyPXRoaXMuX21ldHJpY3MuZmlsdGVyKG49Pm4uZGlzcGxheWVkKS5tYXAobj0+bi5pbmZvKTtyZXR1cm57aHBhcmFtSW5mb3M6dCxtZXRyaWNJbmZvczpyfX1faGFzUmVnZXhwRmlsdGVyKHQpe3JldHVybiB0LmZpbHRlci5yZWdleHAhPT12b2lkIDB9X3F1ZXJ5U2VydmVyKCl7dGhpcy5kZWJvdW5jZSgicXVlcnlTZXJ2ZXIiLCgpPT50aGlzLl9xdWVyeVNlcnZlck5vRGVib3VuY2UoKSwxMDApfV9xdWVyeVNlcnZlck5vRGVib3VuY2UoKXtpZighKCF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcykpcmV0dXJuIHRoaXMuX3NlbmRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKS50aGVuKHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh7dmFsdWU6dCxjYW5jZWxsZWQ6cn0pPT57aWYoIXIpe2lmKHQudG90YWxTaXplPj0wKXtsZXQgbj0rdGhpcy5fcGFnZVNpemVJbnB1dC52YWx1ZTt0aGlzLnNldCgiX3BhZ2VDb3VudFN0ciIsU3RyaW5nKE1hdGguY2VpbCh0LnRvdGFsU2l6ZS9uKSkpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHQudG90YWxTaXplKX1lbHNlIHRoaXMuc2V0KCJfcGFnZUNvdW50U3RyIiwiPyIpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLCJVbmtub3duIik7cGN0KHRoaXMsInNlc3Npb25Hcm91cHMiLHQuc2Vzc2lvbkdyb3Vwcyl9fSkpfV9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCl7bGV0IHQ9dGhpcy5fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKTtpZih0IT09bnVsbClyZXR1cm4gdGhpcy5zZXQoIl9zZXNzaW9uR3JvdXBzUmVxdWVzdCIsdCksdGhpcy5fbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIuY2FuY2VsQWxsKCksdGhpcy5iYWNrZW5kLmxpc3RTZXNzaW9uR3JvdXBzKHQpfV9idWlsZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2xldCB0PXRoaXMscj0hMDtmdW5jdGlvbiBuKGgpe3JldHVybiBoLm1pbi52YWx1ZSE9PSIifHxoLm1heC52YWx1ZSE9PSIifWZ1bmN0aW9uIGkoaCl7bGV0IGY9dC5nZXQoaCsiLm1pbi52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGYhPT12b2lkIDApO2xldCBwPWY9PT0iIj8iLUluZmluaXR5IjorZixkPWlzTmFOKHApO3Quc2V0KGgrIi5taW4uaW52YWxpZCIsZCkscj1yJiYhZDtsZXQgZz10LmdldChoKyIubWF4LnZhbHVlIik7Y29uc29sZS5hc3NlcnQoZyE9PXZvaWQgMCk7bGV0IF89Zz09PSIiPyJJbmZpbml0eSI6K2cseT1pc05hTihfKTtyZXR1cm4gdC5zZXQoaCsiLm1heC5pbnZhbGlkIix5KSxyPXImJiF5LGR8fHk/bnVsbDp7bWluVmFsdWU6cCxtYXhWYWx1ZTpffX1mdW5jdGlvbiBvKGgpe2xldCBmPXQuZ2V0KGgrIi52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGYhPT12b2lkIDApO2xldCBwPStmLGQ9TnVtYmVyLmlzSW50ZWdlcihwKSYmcD4wO3JldHVybiB0LnNldChoKyIuaW52YWxpZCIsIWQpLHI9ciYmZCxkP3A6bnVsbH1sZXQgYT10aGlzLl9zdGF0dXNlcy5maWx0ZXIoaD0+aC5hbGxvd2VkKS5tYXAoaD0+aC52YWx1ZSkscz1bXTtpZih0aGlzLl9ocGFyYW1zLmZvckVhY2goKGgsZik9PntsZXQgcD17aHBhcmFtOmguaW5mby5uYW1lfTtoLmZpbHRlci5kb21haW5EaXNjcmV0ZT9oLmZpbHRlci5kb21haW5EaXNjcmV0ZS5ldmVyeShnPT5nLmNoZWNrZWQpfHwocC5maWx0ZXJEaXNjcmV0ZT1bXSxoLmZpbHRlci5kb21haW5EaXNjcmV0ZS5mb3JFYWNoKGc9PntnLmNoZWNrZWQmJnAuZmlsdGVyRGlzY3JldGUucHVzaChnLnZhbHVlKX0pKTpoLmZpbHRlci5pbnRlcnZhbD9uKGguZmlsdGVyLmludGVydmFsKSYmKHAuZmlsdGVySW50ZXJ2YWw9aSgiX2hwYXJhbXMuIitmKyIuZmlsdGVyLmludGVydmFsIikpOmguZmlsdGVyLnJlZ2V4cCYmKHAuZmlsdGVyUmVnZXhwPWguZmlsdGVyLnJlZ2V4cCkscy5wdXNoKHApfSksdGhpcy5fbWV0cmljcy5mb3JFYWNoKChoLGYpPT57bGV0IHA9e21ldHJpYzpoLmluZm8ubmFtZX07bihoLmZpbHRlci5pbnRlcnZhbCkmJihwLmZpbHRlckludGVydmFsPWkoIl9tZXRyaWNzLiIrZisiLmZpbHRlci5pbnRlcnZhbCIpKSxzLnB1c2gocCl9KSx0aGlzLl9zb3J0QnlJbmRleCE9PXZvaWQgMCYmdGhpcy5fc29ydERpcmVjdGlvbiE9PXZvaWQgMCl7aWYoISh0aGlzLl9zb3J0QnlJbmRleCBpbiBzKSlyZXR1cm4gY29uc29sZS5lcnJvcigiTm8gY29sdW1uIGluIGNvbFBhcmFtcyB3aXRoIGluZGV4IHNvcnRCeUluZGV4OiAlcyIsdGhpcy5fc29ydEJ5SW5kZXgpLG51bGw7c1t0aGlzLl9zb3J0QnlJbmRleF0ub3JkZXI9dGhpcy5fc29ydERpcmVjdGlvbj09PTA/Ik9SREVSX0FTQyI6Ik9SREVSX0RFU0MifWxldCBsPW8oIl9wYWdlTnVtYmVySW5wdXQiKXx8MCxjPW8oIl9wYWdlU2l6ZUlucHV0Iil8fDA7aWYoIXIpcmV0dXJuIG51bGw7bGV0IHU9YyoobC0xKTtyZXR1cm57ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZSxhbGxvd2VkU3RhdHVzZXM6YSxjb2xQYXJhbXM6cyxzdGFydEluZGV4OnUsc2xpY2VTaXplOmN9fV9tZXRyaWNTb3J0QnlJbmRleCh0KXtyZXR1cm4gdCt0aGlzLl9ocGFyYW1zLmxlbmd0aH19O1FuLnRlbXBsYXRlPVFgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBoeXBlcnBhcmFtZXRlcnMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkh5cGVycGFyYW1ldGVyczwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X2hwYXJhbXN9fSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJocGFyYW0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjaGVja2VkPSJ7e2hwYXJhbS5kaXNwbGF5ZWR9fSIKICAgICAgICAgICAgICBjbGFzcz0iaHBhcmFtLWNoZWNrYm94IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8IS0tIFByZWNpc2VseSBvbmUgb2YgdGhlIHRlbXBsYXRlcyBiZWxvdyB3aWxsIGJlIHN0YW1wZWQuLS0+CiAgICAgICAgICAgIDwhLS0gMS4gQSBsaXN0IG9mIGNoZWNrYm94ZXMgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7aXRlbS5jaGVja2VkfX0iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkaXNjcmV0ZS12YWx1ZS1jaGVja2JveCIKICAgICAgICAgICAgICAgICAgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFtbX3ByZXR0eVByaW50KGl0ZW0udmFsdWUpXV0KICAgICAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPCEtLSAyLiBBIG51bWVyaWMgaW50ZXJ2YWwgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1pbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWluLnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi5pbnZhbGlkXV0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iLWluZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1heCIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWF4LnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC5pbnZhbGlkXV0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iK2luZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8IS0tIDMuIEEgcmVnZXhwIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc1JlZ2V4cEZpbHRlcihocGFyYW0pXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9IlJlZ3VsYXIgZXhwcmVzc2lvbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIucmVnZXhwfX0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBtZXRyaWNzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NZXRyaWNzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfbWV0cmljc319IiBhcz0ibWV0cmljIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldHJpYyI+CiAgICAgICAgICAgIDwhLS0gVE9ETyhlcmV6KTogTWFrZSBpdCBlYXNpZXIgdG8gaGFuZGxlIGEgbGFyZ2UgbnVtYmVyIG9mCiAgICAgICAgICAgICAgICAgIG1ldHJpY3M6CiAgICAgICAgICAgICAgICAgIDEuIEFkZCBhbiAnaXNvbGF0b3InIHJhZGlvLWJ1dHRvbiB0byBzZWxlY3QganVzdCBvbmUKICAgICAgICAgICAgICAgICAgbWV0cmljIGFuZAogICAgICAgICAgICAgICAgICBoaWRlIGFsbCB0aGUgcmVzdAogICAgICAgICAgICAgICAgICAyLiBBZGQgYSAndG9nZ2xlLWFsbCcgYnV0dG9uIHRoYXQgd2lsbCBoaWRlL3VuaGlkZQogICAgICAgICAgICAgICAgICAgIGFsbCB0aGUKICAgICAgICAgICAgICAgICAgbWV0cmljcy4KICAgICAgICAgICAgICAgICAgVXNlIHNpbWlsYXIgbG9naWMvYXBwZWFyYW5jZSB0byB0aGUgcnVuLXNlbGVjdG9yIG9mCiAgICAgICAgICAgICAgICAgIHNjYWxhcnMuLS0+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNoZWNrZWQ9Int7bWV0cmljLmRpc3BsYXllZH19IgogICAgICAgICAgICAgIGNsYXNzPSJtZXRyaWMtY2hlY2tib3giCiAgICAgICAgICAgID4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzdGF0dXMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0YXR1czwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3N0YXR1c2VzXV0iIGFzPSJzdGF0dXMiPgogICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7c3RhdHVzLmFsbG93ZWR9fSIgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICBbW3N0YXR1cy5kaXNwbGF5TmFtZV1dCiAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHNvcnRpbmciPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNvcnRpbmc8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IlNvcnQgYnkiCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0QnlJbmRleH19IgogICAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfaHBhcmFtc11dIiBhcz0iaHBhcmFtIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT4gW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXSA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX21ldHJpY3NdXSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX21ldHJpY05hbWUobWV0cmljLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IkRpcmVjdGlvbiIKICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NvcnREaXJlY3Rpb259fSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+QXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbT5EZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gcGFnaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYWdpbmc8L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgTnVtYmVyIG9mIG1hdGNoaW5nIHNlc3Npb24gZ3JvdXBzOiBbW190b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0cl1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1udW1iZXItaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJQYWdlICMiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlTnVtYmVySW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZU51bWJlcklucHV0LmludmFsaWRdXSIKICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8ZGl2IHNsb3Q9InN1ZmZpeCIgY2xhc3M9InBhZ2Utc3VmZml4Ij4vIFtbX3BhZ2VDb3VudFN0cl1dPC9kaXY+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2Utc2l6ZS1pbnB1dCI+CiAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgbGFiZWw9Ik1heCAjIG9mIHNlc3Npb24gZ3JvdXBzIHBlciBwYWdlOiIKICAgICAgICAgICAgdmFsdWU9Int7X3BhZ2VTaXplSW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZVNpemVJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIGRvd25sb2FkIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlc3Npb25Hcm91cHNSZXF1ZXN0XV0iPgogICAgICAgICAgRG93bmxvYWQgZGF0YSBhcwogICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9ImNzdkxpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUuY3N2IgogICAgICAgICAgICAgIGhyZWY9IltbX2NzdlVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkNTVjwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9Impzb25MaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmpzb24iCiAgICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJsYXRleExpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUudGV4IgogICAgICAgICAgICAgIGhyZWY9IltbX2xhdGV4VXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+TGFUZVg8L2EKICAgICAgICAgICAgPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIG1hcmdpbi1ib3R0b206IDdweDsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3gsCiAgICAgIC5tZXRyaWMtY2hlY2tib3gsCiAgICAgIC5ocGFyYW0tY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgLmhwYXJhbSwKICAgICAgLm1ldHJpYyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmlubGluZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgICAucGFnZS1udW1iZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgIH0KICAgICAgLnBhZ2Utc2l6ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgICAucGFnZS1zdWZmaXggewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFuLnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUW4ucHJvdG90eXBlLCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9leHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9ocGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9tZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc3RhdHVzZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfZ2V0RXhwZXJpbWVudFJlc29sdmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sUW4ucHJvdG90eXBlLCJfcmVzb2x2ZUdldEV4cGVyaW1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydEJ5SW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydERpcmVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9wYWdlU2l6ZUlucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFuLnByb3RvdHlwZSwiX3BhZ2VOdW1iZXJJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsIl9wYWdlQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUW4ucHJvdG90eXBlLCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHZvaWQgMCk7RShbQnQoImJhY2tlbmQiLCJleHBlcmltZW50TmFtZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMiLG51bGwpO0UoW0J0KCJfaHBhcmFtcy4qIiwiX21ldHJpY3MuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsbnVsbCk7UW49RShbeXQoInRmLWhwYXJhbXMtcXVlcnktcGFuZSIpXSxRbik7dmFyIFVjdD1FZShPZSgpLDEpO3ZhciBtY3Q9dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5jdXN0b21FbGVtZW50cyE9bnVsbCYmd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2shPT12b2lkIDA7dmFyIGkxPShlLHQscj1udWxsKT0+e2Zvcig7dCE9PXI7KXtsZXQgbj10Lm5leHRTaWJsaW5nO2UucmVtb3ZlQ2hpbGQodCksdD1ufX07dmFyIFljPWB7e2xpdC0ke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKX19fWAsZ2N0PWA8IS0tJHtZY30tLT5gLHljZT1uZXcgUmVnRXhwKGAke1ljfXwke2djdH1gKSxkMz0iJGxpdCQiLG8xPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5wYXJ0cz1bXSx0aGlzLmVsZW1lbnQ9cjtsZXQgbj1bXSxpPVtdLG89ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLmNvbnRlbnQsMTMzLG51bGwsITEpLGE9MCxzPS0xLGw9MCx7c3RyaW5nczpjLHZhbHVlczp7bGVuZ3RoOnV9fT10O2Zvcig7bDx1Oyl7bGV0IGg9by5uZXh0Tm9kZSgpO2lmKGg9PT1udWxsKXtvLmN1cnJlbnROb2RlPWkucG9wKCk7Y29udGludWV9aWYocysrLGgubm9kZVR5cGU9PT0xKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7bGV0IGY9aC5hdHRyaWJ1dGVzLHtsZW5ndGg6cH09ZixkPTA7Zm9yKGxldCBnPTA7ZzxwO2crKyl2Y2UoZltnXS5uYW1lLGQzKSYmZCsrO2Zvcig7ZC0tID4wOyl7bGV0IGc9Y1tsXSxfPUhILmV4ZWMoZylbMl0seT1fLnRvTG93ZXJDYXNlKCkrZDMseD1oLmdldEF0dHJpYnV0ZSh5KTtoLnJlbW92ZUF0dHJpYnV0ZSh5KTtsZXQgYj14LnNwbGl0KHljZSk7dGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJhdHRyaWJ1dGUiLGluZGV4OnMsbmFtZTpfLHN0cmluZ3M6Yn0pLGwrPWIubGVuZ3RoLTF9fWgudGFnTmFtZT09PSJURU1QTEFURSImJihpLnB1c2goaCksby5jdXJyZW50Tm9kZT1oLmNvbnRlbnQpfWVsc2UgaWYoaC5ub2RlVHlwZT09PTMpe2xldCBmPWguZGF0YTtpZihmLmluZGV4T2YoWWMpPj0wKXtsZXQgcD1oLnBhcmVudE5vZGUsZD1mLnNwbGl0KHljZSksZz1kLmxlbmd0aC0xO2ZvcihsZXQgXz0wO188ZztfKyspe2xldCB5LHg9ZFtfXTtpZih4PT09IiIpeT1ZZigpO2Vsc2V7bGV0IGI9SEguZXhlYyh4KTtiIT09bnVsbCYmdmNlKGJbMl0sZDMpJiYoeD14LnNsaWNlKDAsYi5pbmRleCkrYlsxXStiWzJdLnNsaWNlKDAsLWQzLmxlbmd0aCkrYlszXSkseT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh4KX1wLmluc2VydEJlZm9yZSh5LGgpLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6KytzfSl9ZFtnXT09PSIiPyhwLmluc2VydEJlZm9yZShZZigpLGgpLG4ucHVzaChoKSk6aC5kYXRhPWRbZ10sbCs9Z319ZWxzZSBpZihoLm5vZGVUeXBlPT09OClpZihoLmRhdGE9PT1ZYyl7bGV0IGY9aC5wYXJlbnROb2RlOyhoLnByZXZpb3VzU2libGluZz09PW51bGx8fHM9PT1hKSYmKHMrKyxmLmluc2VydEJlZm9yZShZZigpLGgpKSxhPXMsdGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJub2RlIixpbmRleDpzfSksaC5uZXh0U2libGluZz09PW51bGw/aC5kYXRhPSIiOihuLnB1c2goaCkscy0tKSxsKyt9ZWxzZXtsZXQgZj0tMTtmb3IoOyhmPWguZGF0YS5pbmRleE9mKFljLGYrMSkpIT09LTE7KXRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6LTF9KSxsKyt9fWZvcihsZXQgaCBvZiBuKWgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKX19LHZjZT0oZSx0KT0+e2xldCByPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiByPj0wJiZlLnNsaWNlKHIpPT09dH0sdlA9ZT0+ZS5pbmRleCE9PS0xLFlmPSgpPT5kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSxISD0vKFsgXHgwOVx4MGFceDBjXHgwZF0pKFteXDAtXHgxRlx4N0YtXHg5RiAiJz49L10rKShbIFx4MDlceDBhXHgwY1x4MGRdKj1bIFx4MDlceDBhXHgwY1x4MGRdKig/OlteIFx4MDlceDBhXHgwY1x4MGQiJ2A8Pj1dKnwiW14iXSp8J1teJ10qKSkkLzt2YXIgX2N0PTEzMztmdW5jdGlvbiB5Y3QoZSx0KXtsZXR7ZWxlbWVudDp7Y29udGVudDpyfSxwYXJ0czpufT1lLGk9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLF9jdCxudWxsLCExKSxvPXhQKG4pLGE9bltvXSxzPS0xLGw9MCxjPVtdLHU9bnVsbDtmb3IoO2kubmV4dE5vZGUoKTspe3MrKztsZXQgaD1pLmN1cnJlbnROb2RlO2ZvcihoLnByZXZpb3VzU2libGluZz09PXUmJih1PW51bGwpLHQuaGFzKGgpJiYoYy5wdXNoKGgpLHU9PT1udWxsJiYodT1oKSksdSE9PW51bGwmJmwrKzthIT09dm9pZCAwJiZhLmluZGV4PT09czspYS5pbmRleD11IT09bnVsbD8tMTphLmluZGV4LWwsbz14UChuLG8pLGE9bltvXX1jLmZvckVhY2goaD0+aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpKX12YXIgTHVyPWU9PntsZXQgdD1lLm5vZGVUeXBlPT09MTE/MDoxLHI9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlLF9jdCxudWxsLCExKTtmb3IoO3IubmV4dE5vZGUoKTspdCsrO3JldHVybiB0fSx4UD0oZSx0PS0xKT0+e2ZvcihsZXQgcj10KzE7cjxlLmxlbmd0aDtyKyspe2xldCBuPWVbcl07aWYodlAobikpcmV0dXJuIHJ9cmV0dXJuLTF9O2Z1bmN0aW9uIHhjZShlLHQscj1udWxsKXtsZXR7ZWxlbWVudDp7Y29udGVudDpufSxwYXJ0czppfT1lO2lmKHI9PW51bGwpe24uYXBwZW5kQ2hpbGQodCk7cmV0dXJufWxldCBvPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobixfY3QsbnVsbCwhMSksYT14UChpKSxzPTAsbD0tMTtmb3IoO28ubmV4dE5vZGUoKTspZm9yKGwrKyxvLmN1cnJlbnROb2RlPT09ciYmKHM9THVyKHQpLHIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxyKSk7YSE9PS0xJiZpW2FdLmluZGV4PT09bDspe2lmKHM+MCl7Zm9yKDthIT09LTE7KWlbYV0uaW5kZXgrPXMsYT14UChpLGEpO3JldHVybn1hPXhQKGksYSl9fXZhciBrdXI9bmV3IFdlYWtNYXA7dmFyIGExPWU9PnR5cGVvZiBlPT0iZnVuY3Rpb24iJiZrdXIuaGFzKGUpO3ZhciBMbD17fSxWSD17fTt2YXIgdzA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX19wYXJ0cz1bXSx0aGlzLnRlbXBsYXRlPXQsdGhpcy5wcm9jZXNzb3I9cix0aGlzLm9wdGlvbnM9bn11cGRhdGUodCl7bGV0IHI9MDtmb3IobGV0IG4gb2YgdGhpcy5fX3BhcnRzKW4hPT12b2lkIDAmJm4uc2V0VmFsdWUodFtyXSkscisrO2ZvcihsZXQgbiBvZiB0aGlzLl9fcGFydHMpbiE9PXZvaWQgMCYmbi5jb21taXQoKX1fY2xvbmUoKXtsZXQgdD1tY3Q/dGhpcy50ZW1wbGF0ZS5lbGVtZW50LmNvbnRlbnQuY2xvbmVOb2RlKCEwKTpkb2N1bWVudC5pbXBvcnROb2RlKHRoaXMudGVtcGxhdGUuZWxlbWVudC5jb250ZW50LCEwKSxyPVtdLG49dGhpcy50ZW1wbGF0ZS5wYXJ0cyxpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIodCwxMzMsbnVsbCwhMSksbz0wLGE9MCxzLGw9aS5uZXh0Tm9kZSgpO2Zvcig7bzxuLmxlbmd0aDspe2lmKHM9bltvXSwhdlAocykpe3RoaXMuX19wYXJ0cy5wdXNoKHZvaWQgMCksbysrO2NvbnRpbnVlfWZvcig7YTxzLmluZGV4OylhKyssbC5ub2RlTmFtZT09PSJURU1QTEFURSImJihyLnB1c2gobCksaS5jdXJyZW50Tm9kZT1sLmNvbnRlbnQpLChsPWkubmV4dE5vZGUoKSk9PT1udWxsJiYoaS5jdXJyZW50Tm9kZT1yLnBvcCgpLGw9aS5uZXh0Tm9kZSgpKTtpZihzLnR5cGU9PT0ibm9kZSIpe2xldCBjPXRoaXMucHJvY2Vzc29yLmhhbmRsZVRleHRFeHByZXNzaW9uKHRoaXMub3B0aW9ucyk7Yy5pbnNlcnRBZnRlck5vZGUobC5wcmV2aW91c1NpYmxpbmcpLHRoaXMuX19wYXJ0cy5wdXNoKGMpfWVsc2UgdGhpcy5fX3BhcnRzLnB1c2goLi4udGhpcy5wcm9jZXNzb3IuaGFuZGxlQXR0cmlidXRlRXhwcmVzc2lvbnMobCxzLm5hbWUscy5zdHJpbmdzLHRoaXMub3B0aW9ucykpO28rK31yZXR1cm4gbWN0JiYoZG9jdW1lbnQuYWRvcHROb2RlKHQpLGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUodCkpLHR9fTt2YXIgYmNlPXdpbmRvdy50cnVzdGVkVHlwZXMmJnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDplPT5lfSksTnVyPWAgJHtZY30gYCxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnN0cmluZ3M9dCx0aGlzLnZhbHVlcz1yLHRoaXMudHlwZT1uLHRoaXMucHJvY2Vzc29yPWl9Z2V0SFRNTCgpe2xldCB0PXRoaXMuc3RyaW5ncy5sZW5ndGgtMSxyPSIiLG49ITE7Zm9yKGxldCBpPTA7aTx0O2krKyl7bGV0IG89dGhpcy5zdHJpbmdzW2ldLGE9by5sYXN0SW5kZXhPZigiPCEtLSIpO249KGE+LTF8fG4pJiZvLmluZGV4T2YoIi0tPiIsYSsxKT09PS0xO2xldCBzPUhILmV4ZWMobyk7cz09PW51bGw/cis9bysobj9OdXI6Z2N0KTpyKz1vLnN1YnN0cigwLHMuaW5kZXgpK3NbMV0rc1syXStkMytzWzNdK1ljfXJldHVybiByKz10aGlzLnN0cmluZ3NbdF0scn1nZXRUZW1wbGF0ZUVsZW1lbnQoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLHI9dGhpcy5nZXRIVE1MKCk7cmV0dXJuIGJjZSE9PXZvaWQgMCYmKHI9YmNlLmNyZWF0ZUhUTUwocikpLHQuaW5uZXJIVE1MPXIsdH19O3ZhciBHSD1lPT5lPT09bnVsbHx8ISh0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSxVSD1lPT5BcnJheS5pc0FycmF5KGUpfHwhIShlJiZlW1N5bWJvbC5pdGVyYXRvcl0pLG0zPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmRpcnR5PSEwLHRoaXMuZWxlbWVudD10LHRoaXMubmFtZT1yLHRoaXMuc3RyaW5ncz1uLHRoaXMucGFydHM9W107Zm9yKGxldCBpPTA7aTxuLmxlbmd0aC0xO2krKyl0aGlzLnBhcnRzW2ldPXRoaXMuX2NyZWF0ZVBhcnQoKX1fY3JlYXRlUGFydCgpe3JldHVybiBuZXcgYlAodGhpcyl9X2dldFZhbHVlKCl7bGV0IHQ9dGhpcy5zdHJpbmdzLHI9dC5sZW5ndGgtMSxuPXRoaXMucGFydHM7aWYocj09PTEmJnRbMF09PT0iIiYmdFsxXT09PSIiKXtsZXQgbz1uWzBdLnZhbHVlO2lmKHR5cGVvZiBvPT0ic3ltYm9sIilyZXR1cm4gU3RyaW5nKG8pO2lmKHR5cGVvZiBvPT0ic3RyaW5nInx8IVVIKG8pKXJldHVybiBvfWxldCBpPSIiO2ZvcihsZXQgbz0wO288cjtvKyspe2krPXRbb107bGV0IGE9bltvXTtpZihhIT09dm9pZCAwKXtsZXQgcz1hLnZhbHVlO2lmKEdIKHMpfHwhVUgocykpaSs9dHlwZW9mIHM9PSJzdHJpbmciP3M6U3RyaW5nKHMpO2Vsc2UgZm9yKGxldCBsIG9mIHMpaSs9dHlwZW9mIGw9PSJzdHJpbmciP2w6U3RyaW5nKGwpfX1yZXR1cm4gaSs9dFtyXSxpfWNvbW1pdCgpe3RoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLHRoaXMuX2dldFZhbHVlKCkpKX19LGJQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuY29tbWl0dGVyPXR9c2V0VmFsdWUodCl7dCE9PUxsJiYoIUdIKHQpfHx0IT09dGhpcy52YWx1ZSkmJih0aGlzLnZhbHVlPXQsYTEodCl8fCh0aGlzLmNvbW1pdHRlci5kaXJ0eT0hMCkpfWNvbW1pdCgpe2Zvcig7YTEodGhpcy52YWx1ZSk7KXtsZXQgdD10aGlzLnZhbHVlO3RoaXMudmFsdWU9TGwsdCh0aGlzKX10aGlzLnZhbHVlIT09TGwmJnRoaXMuY29tbWl0dGVyLmNvbW1pdCgpfX0sQmQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsdGhpcy5vcHRpb25zPXR9YXBwZW5kSW50byh0KXt0aGlzLnN0YXJ0Tm9kZT10LmFwcGVuZENoaWxkKFlmKCkpLHRoaXMuZW5kTm9kZT10LmFwcGVuZENoaWxkKFlmKCkpfWluc2VydEFmdGVyTm9kZSh0KXt0aGlzLnN0YXJ0Tm9kZT10LHRoaXMuZW5kTm9kZT10Lm5leHRTaWJsaW5nfWFwcGVuZEludG9QYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdC5fX2luc2VydCh0aGlzLmVuZE5vZGU9WWYoKSl9aW5zZXJ0QWZ0ZXJQYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdGhpcy5lbmROb2RlPXQuZW5kTm9kZSx0LmVuZE5vZGU9dGhpcy5zdGFydE5vZGV9c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2lmKHRoaXMuc3RhcnROb2RlLnBhcmVudE5vZGU9PT1udWxsKXJldHVybjtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IHI9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLHIodGhpcyl9bGV0IHQ9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0IT09TGwmJihHSCh0KT90IT09dGhpcy52YWx1ZSYmdGhpcy5fX2NvbW1pdFRleHQodCk6dCBpbnN0YW5jZW9mIFMwP3RoaXMuX19jb21taXRUZW1wbGF0ZVJlc3VsdCh0KTp0IGluc3RhbmNlb2YgTm9kZT90aGlzLl9fY29tbWl0Tm9kZSh0KTpVSCh0KT90aGlzLl9fY29tbWl0SXRlcmFibGUodCk6dD09PVZIPyh0aGlzLnZhbHVlPVZILHRoaXMuY2xlYXIoKSk6dGhpcy5fX2NvbW1pdFRleHQodCkpfV9faW5zZXJ0KHQpe3RoaXMuZW5kTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LHRoaXMuZW5kTm9kZSl9X19jb21taXROb2RlKHQpe3RoaXMudmFsdWUhPT10JiYodGhpcy5jbGVhcigpLHRoaXMuX19pbnNlcnQodCksdGhpcy52YWx1ZT10KX1fX2NvbW1pdFRleHQodCl7bGV0IHI9dGhpcy5zdGFydE5vZGUubmV4dFNpYmxpbmc7dD10PT1udWxsPyIiOnQ7bGV0IG49dHlwZW9mIHQ9PSJzdHJpbmciP3Q6U3RyaW5nKHQpO3I9PT10aGlzLmVuZE5vZGUucHJldmlvdXNTaWJsaW5nJiZyLm5vZGVUeXBlPT09Mz9yLmRhdGE9bjp0aGlzLl9fY29tbWl0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSksdGhpcy52YWx1ZT10fV9fY29tbWl0VGVtcGxhdGVSZXN1bHQodCl7bGV0IHI9dGhpcy5vcHRpb25zLnRlbXBsYXRlRmFjdG9yeSh0KTtpZih0aGlzLnZhbHVlIGluc3RhbmNlb2YgdzAmJnRoaXMudmFsdWUudGVtcGxhdGU9PT1yKXRoaXMudmFsdWUudXBkYXRlKHQudmFsdWVzKTtlbHNle2xldCBuPW5ldyB3MChyLHQucHJvY2Vzc29yLHRoaXMub3B0aW9ucyksaT1uLl9jbG9uZSgpO24udXBkYXRlKHQudmFsdWVzKSx0aGlzLl9fY29tbWl0Tm9kZShpKSx0aGlzLnZhbHVlPW59fV9fY29tbWl0SXRlcmFibGUodCl7QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKXx8KHRoaXMudmFsdWU9W10sdGhpcy5jbGVhcigpKTtsZXQgcj10aGlzLnZhbHVlLG49MCxpO2ZvcihsZXQgbyBvZiB0KWk9cltuXSxpPT09dm9pZCAwJiYoaT1uZXcgQmQodGhpcy5vcHRpb25zKSxyLnB1c2goaSksbj09PTA/aS5hcHBlbmRJbnRvUGFydCh0aGlzKTppLmluc2VydEFmdGVyUGFydChyW24tMV0pKSxpLnNldFZhbHVlKG8pLGkuY29tbWl0KCksbisrO248ci5sZW5ndGgmJihyLmxlbmd0aD1uLHRoaXMuY2xlYXIoaSYmaS5lbmROb2RlKSl9Y2xlYXIodD10aGlzLnN0YXJ0Tm9kZSl7aTEodGhpcy5zdGFydE5vZGUucGFyZW50Tm9kZSx0Lm5leHRTaWJsaW5nLHRoaXMuZW5kTm9kZSl9fSx3UD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYodGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsbi5sZW5ndGghPT0yfHxuWzBdIT09IiJ8fG5bMV0hPT0iIil0aHJvdyBuZXcgRXJyb3IoIkJvb2xlYW4gYXR0cmlidXRlcyBjYW4gb25seSBjb250YWluIGEgc2luZ2xlIGV4cHJlc3Npb24iKTt0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLnN0cmluZ3M9bn1zZXRWYWx1ZSh0KXt0aGlzLl9fcGVuZGluZ1ZhbHVlPXR9Y29tbWl0KCl7Zm9yKDthMSh0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCByPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxyKHRoaXMpfWlmKHRoaXMuX19wZW5kaW5nVmFsdWU9PT1MbClyZXR1cm47bGV0IHQ9ISF0aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMudmFsdWUhPT10JiYodD90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSwiIik6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpLHRoaXMudmFsdWU9dCksdGhpcy5fX3BlbmRpbmdWYWx1ZT1MbH19LFNQPWNsYXNzIGV4dGVuZHMgbTN7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQscixuKSx0aGlzLnNpbmdsZT1uLmxlbmd0aD09PTImJm5bMF09PT0iIiYmblsxXT09PSIifV9jcmVhdGVQYXJ0KCl7cmV0dXJuIG5ldyBxSCh0aGlzKX1fZ2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zaW5nbGU/dGhpcy5wYXJ0c1swXS52YWx1ZTpzdXBlci5fZ2V0VmFsdWUoKX1jb21taXQoKXt0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT10aGlzLl9nZXRWYWx1ZSgpKX19LHFIPWNsYXNzIGV4dGVuZHMgYlB7fSx3Y2U9ITE7KCgpPT57dHJ5e2xldCBlPXtnZXQgY2FwdHVyZSgpe3JldHVybiB3Y2U9ITAsITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKX1jYXRjaChlKXt9fSkoKTt2YXIgTVA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMuZWxlbWVudD10LHRoaXMuZXZlbnROYW1lPXIsdGhpcy5ldmVudENvbnRleHQ9bix0aGlzLl9fYm91bmRIYW5kbGVFdmVudD1pPT50aGlzLmhhbmRsZUV2ZW50KGkpfXNldFZhbHVlKHQpe3RoaXMuX19wZW5kaW5nVmFsdWU9dH1jb21taXQoKXtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IG89dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLG8odGhpcyl9aWYodGhpcy5fX3BlbmRpbmdWYWx1ZT09PUxsKXJldHVybjtsZXQgdD10aGlzLl9fcGVuZGluZ1ZhbHVlLHI9dGhpcy52YWx1ZSxuPXQ9PW51bGx8fHIhPW51bGwmJih0LmNhcHR1cmUhPT1yLmNhcHR1cmV8fHQub25jZSE9PXIub25jZXx8dC5wYXNzaXZlIT09ci5wYXNzaXZlKSxpPXQhPW51bGwmJihyPT1udWxsfHxuKTtuJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucyksaSYmKHRoaXMuX19vcHRpb25zPUR1cih0KSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucykpLHRoaXMudmFsdWU9dCx0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsfWhhbmRsZUV2ZW50KHQpe3R5cGVvZiB0aGlzLnZhbHVlPT0iZnVuY3Rpb24iP3RoaXMudmFsdWUuY2FsbCh0aGlzLmV2ZW50Q29udGV4dHx8dGhpcy5lbGVtZW50LHQpOnRoaXMudmFsdWUuaGFuZGxlRXZlbnQodCl9fSxEdXI9ZT0+ZSYmKHdjZT97Y2FwdHVyZTplLmNhcHR1cmUscGFzc2l2ZTplLnBhc3NpdmUsb25jZTplLm9uY2V9OmUuY2FwdHVyZSk7ZnVuY3Rpb24gdmN0KGUpe2xldCB0PXMxLmdldChlLnR5cGUpO3Q9PT12b2lkIDAmJih0PXtzdHJpbmdzQXJyYXk6bmV3IFdlYWtNYXAsa2V5U3RyaW5nOm5ldyBNYXB9LHMxLnNldChlLnR5cGUsdCkpO2xldCByPXQuc3RyaW5nc0FycmF5LmdldChlLnN0cmluZ3MpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7bGV0IG49ZS5zdHJpbmdzLmpvaW4oWWMpO3JldHVybiByPXQua2V5U3RyaW5nLmdldChuKSxyPT09dm9pZCAwJiYocj1uZXcgbzEoZSxlLmdldFRlbXBsYXRlRWxlbWVudCgpKSx0LmtleVN0cmluZy5zZXQobixyKSksdC5zdHJpbmdzQXJyYXkuc2V0KGUuc3RyaW5ncyxyKSxyfXZhciBzMT1uZXcgTWFwO3ZhciBNMD1uZXcgV2Vha01hcCx4Y3Q9KGUsdCxyKT0+e2xldCBuPU0wLmdldCh0KTtuPT09dm9pZCAwJiYoaTEodCx0LmZpcnN0Q2hpbGQpLE0wLnNldCh0LG49bmV3IEJkKE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTp2Y3R9LHIpKSksbi5hcHBlbmRJbnRvKHQpKSxuLnNldFZhbHVlKGUpLG4uY29tbWl0KCl9O3ZhciBXSD1jbGFzc3toYW5kbGVBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LHIsbixpKXtsZXQgbz1yWzBdO3JldHVybiBvPT09Ii4iP25ldyBTUCh0LHIuc2xpY2UoMSksbikucGFydHM6bz09PSJAIj9bbmV3IE1QKHQsci5zbGljZSgxKSxpLmV2ZW50Q29udGV4dCldOm89PT0iPyI/W25ldyB3UCh0LHIuc2xpY2UoMSksbildOm5ldyBtMyh0LHIsbikucGFydHN9aGFuZGxlVGV4dEV4cHJlc3Npb24odCl7cmV0dXJuIG5ldyBCZCh0KX19LFNjZT1uZXcgV0g7dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJih3aW5kb3cubGl0SHRtbFZlcnNpb25zfHwod2luZG93LmxpdEh0bWxWZXJzaW9ucz1bXSkpLnB1c2goIjEuNC4xIik7dmFyIEVjZT0oZSx0KT0+YCR7ZX0tLSR7dH1gLFlIPSEwO3R5cGVvZiB3aW5kb3cuU2hhZHlDU1M9PSJ1bmRlZmluZWQiP1lIPSExOnR5cGVvZiB3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlRG9tPT0idW5kZWZpbmVkIiYmKGNvbnNvbGUud2FybigiSW5jb21wYXRpYmxlIFNoYWR5Q1NTIHZlcnNpb24gZGV0ZWN0ZWQuIFBsZWFzZSB1cGRhdGUgdG8gYXQgbGVhc3QgQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzQDIuMC4yIGFuZCBAd2ViY29tcG9uZW50cy9zaGFkeWNzc0AxLjMuMS4iKSxZSD0hMSk7dmFyIEZ1cj1lPT50PT57bGV0IHI9RWNlKHQudHlwZSxlKSxuPXMxLmdldChyKTtuPT09dm9pZCAwJiYobj17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxzMS5zZXQocixuKSk7bGV0IGk9bi5zdHJpbmdzQXJyYXkuZ2V0KHQuc3RyaW5ncyk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtsZXQgbz10LnN0cmluZ3Muam9pbihZYyk7aWYoaT1uLmtleVN0cmluZy5nZXQobyksaT09PXZvaWQgMCl7bGV0IGE9dC5nZXRUZW1wbGF0ZUVsZW1lbnQoKTtZSCYmd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZURvbShhLGUpLGk9bmV3IG8xKHQsYSksbi5rZXlTdHJpbmcuc2V0KG8saSl9cmV0dXJuIG4uc3RyaW5nc0FycmF5LnNldCh0LnN0cmluZ3MsaSksaX0sQnVyPVsiaHRtbCIsInN2ZyJdLEh1cj1lPT57QnVyLmZvckVhY2godD0+e2xldCByPXMxLmdldChFY2UodCxlKSk7ciE9PXZvaWQgMCYmci5rZXlTdHJpbmcuZm9yRWFjaChuPT57bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6aX19PW4sbz1uZXcgU2V0O0FycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpKS5mb3JFYWNoKGE9PntvLmFkZChhKX0pLHljdChuLG8pfSl9KX0sVGNlPW5ldyBTZXQsVnVyPShlLHQscik9PntUY2UuYWRkKGUpO2xldCBuPXI/ci5lbGVtZW50OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksaT10LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIikse2xlbmd0aDpvfT1pO2lmKG89PT0wKXt3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7cmV0dXJufWxldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Zm9yKGxldCBjPTA7YzxvO2MrKyl7bGV0IHU9aVtjXTt1LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodSksYS50ZXh0Q29udGVudCs9dS50ZXh0Q29udGVudH1IdXIoZSk7bGV0IHM9bi5jb250ZW50O3I/eGNlKHIsYSxzLmZpcnN0Q2hpbGQpOnMuaW5zZXJ0QmVmb3JlKGEscy5maXJzdENoaWxkKSx3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7bGV0IGw9cy5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpO2lmKHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cmJmwhPT1udWxsKXQuaW5zZXJ0QmVmb3JlKGwuY2xvbmVOb2RlKCEwKSx0LmZpcnN0Q2hpbGQpO2Vsc2UgaWYocil7cy5pbnNlcnRCZWZvcmUoYSxzLmZpcnN0Q2hpbGQpO2xldCBjPW5ldyBTZXQ7Yy5hZGQoYSkseWN0KHIsYyl9fSxDY2U9KGUsdCxyKT0+e2lmKCFyfHx0eXBlb2YgciE9Im9iamVjdCJ8fCFyLnNjb3BlTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgc2NvcGVOYW1lYCBvcHRpb24gaXMgcmVxdWlyZWQuIik7bGV0IG49ci5zY29wZU5hbWUsaT1NMC5oYXModCksbz1ZSCYmdC5ub2RlVHlwZT09PTExJiYhIXQuaG9zdCxhPW8mJiFUY2UuaGFzKG4pLHM9YT9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk6dDtpZih4Y3QoZSxzLE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTpGdXIobil9LHIpKSxhKXtsZXQgbD1NMC5nZXQocyk7TTAuZGVsZXRlKHMpO2xldCBjPWwudmFsdWUgaW5zdGFuY2VvZiB3MD9sLnZhbHVlLnRlbXBsYXRlOnZvaWQgMDtWdXIobixzLGMpLGkxKHQsdC5maXJzdENoaWxkKSx0LmFwcGVuZENoaWxkKHMpLE0wLnNldCh0LGwpfSFpJiZvJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHQuaG9zdCl9O3ZhciBBY2U7d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9KGUsdCk9PmU7dmFyIFRjdD17dG9BdHRyaWJ1dGUoZSx0KXtzd2l0Y2godCl7Y2FzZSBCb29sZWFuOnJldHVybiBlPyIiOm51bGw7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpyZXR1cm4gZT09bnVsbD9lOkpTT04uc3RyaW5naWZ5KGUpfXJldHVybiBlfSxmcm9tQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gZSE9PW51bGw7Y2FzZSBOdW1iZXI6cmV0dXJuIGU9PT1udWxsP251bGw6TnVtYmVyKGUpO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6cmV0dXJuIEpTT04ucGFyc2UoZSl9cmV0dXJuIGV9fSxQY2U9KGUsdCk9PnQhPT1lJiYodD09PXR8fGU9PT1lKSxiY3Q9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6VGN0LHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpQY2V9LHdjdD0xLFNjdD0xPDwyLE1jdD0xPDwzLEVjdD0xPDw0LENjdD0iZmluYWxpemVkIixnMz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmluaXRpYWxpemUoKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9PntsZXQgaT10aGlzLl9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobixyKTtpIT09dm9pZCAwJiYodGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5zZXQoaSxuKSx0LnB1c2goaSkpfSksdH1zdGF0aWMgX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9jbGFzc1Byb3BlcnRpZXMiLHRoaXMpKSl7dGhpcy5fY2xhc3NQcm9wZXJ0aWVzPW5ldyBNYXA7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9jbGFzc1Byb3BlcnRpZXM7dCE9PXZvaWQgMCYmdC5mb3JFYWNoKChyLG4pPT50aGlzLl9jbGFzc1Byb3BlcnRpZXMuc2V0KG4scikpfX1zdGF0aWMgY3JlYXRlUHJvcGVydHkodCxyPWJjdCl7aWYodGhpcy5fZW5zdXJlQ2xhc3NQcm9wZXJ0aWVzKCksdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLnNldCh0LHIpLHIubm9BY2Nlc3Nvcnx8dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2xldCBuPXR5cGVvZiB0PT0ic3ltYm9sIj9TeW1ib2woKTpgX18ke3R9YCxpPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsbixyKTtpIT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsdCxpKX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQscixuKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbcl19LHNldChpKXtsZXQgbz10aGlzW3RdO3RoaXNbcl09aSx0aGlzLnJlcXVlc3RVcGRhdGVJbnRlcm5hbCh0LG8sbil9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQpe3JldHVybiB0aGlzLl9jbGFzc1Byb3BlcnRpZXMmJnRoaXMuX2NsYXNzUHJvcGVydGllcy5nZXQodCl8fGJjdH1zdGF0aWMgZmluYWxpemUoKXtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYodC5oYXNPd25Qcm9wZXJ0eShDY3QpfHx0LmZpbmFsaXplKCksdGhpc1tDY3RdPSEwLHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXA9bmV3IE1hcCx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInByb3BlcnRpZXMiLHRoaXMpKSl7bGV0IHI9dGhpcy5wcm9wZXJ0aWVzLG49Wy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLC4uLnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocik6W11dO2ZvcihsZXQgaSBvZiBuKXRoaXMuY3JlYXRlUHJvcGVydHkoaSxyW2ldKX19c3RhdGljIF9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCxyKXtsZXQgbj1yLmF0dHJpYnV0ZTtyZXR1cm4gbj09PSExP3ZvaWQgMDp0eXBlb2Ygbj09InN0cmluZyI/bjp0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1zdGF0aWMgX3ZhbHVlSGFzQ2hhbmdlZCh0LHIsbj1QY2Upe3JldHVybiBuKHQscil9c3RhdGljIF9wcm9wZXJ0eVZhbHVlRnJvbUF0dHJpYnV0ZSh0LHIpe2xldCBuPXIudHlwZSxpPXIuY29udmVydGVyfHxUY3Qsbz10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmkuZnJvbUF0dHJpYnV0ZTtyZXR1cm4gbz9vKHQsbik6dH1zdGF0aWMgX3Byb3BlcnR5VmFsdWVUb0F0dHJpYnV0ZSh0LHIpe2lmKHIucmVmbGVjdD09PXZvaWQgMClyZXR1cm47bGV0IG49ci50eXBlLGk9ci5jb252ZXJ0ZXI7cmV0dXJuKGkmJmkudG9BdHRyaWJ1dGV8fFRjdC50b0F0dHJpYnV0ZSkodCxuKX1pbml0aWFsaXplKCl7dGhpcy5fdXBkYXRlU3RhdGU9MCx0aGlzLl91cGRhdGVQcm9taXNlPW5ldyBQcm9taXNlKHQ9PnRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dCksdGhpcy5fY2hhbmdlZFByb3BlcnRpZXM9bmV3IE1hcCx0aGlzLl9zYXZlSW5zdGFuY2VQcm9wZXJ0aWVzKCksdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwoKX1fc2F2ZUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuY29uc3RydWN0b3IuX2NsYXNzUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT57aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG49dGhpc1tyXTtkZWxldGUgdGhpc1tyXSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXN8fCh0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXM9bmV3IE1hcCksdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzLnNldChyLG4pfX0pfV9hcHBseUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuX2luc3RhbmNlUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT50aGlzW3JdPXQpLHRoaXMuX2luc3RhbmNlUHJvcGVydGllcz12b2lkIDB9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLmVuYWJsZVVwZGF0aW5nKCl9ZW5hYmxlVXBkYXRpbmcoKXt0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyIT09dm9pZCAwJiYodGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlcigpLHRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dm9pZCAwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3IhPT1uJiZ0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsbil9X3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxyLG49YmN0KXtsZXQgaT10aGlzLmNvbnN0cnVjdG9yLG89aS5fYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQsbik7aWYobyE9PXZvaWQgMCl7bGV0IGE9aS5fcHJvcGVydHlWYWx1ZVRvQXR0cmlidXRlKHIsbik7aWYoYT09PXZvaWQgMClyZXR1cm47dGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8TWN0LGE9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobyk6dGhpcy5zZXRBdHRyaWJ1dGUobyxhKSx0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZSZ+TWN0fX1fYXR0cmlidXRlVG9Qcm9wZXJ0eSh0LHIpe2lmKHRoaXMuX3VwZGF0ZVN0YXRlJk1jdClyZXR1cm47bGV0IG49dGhpcy5jb25zdHJ1Y3RvcixpPW4uX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuZ2V0KHQpO2lmKGkhPT12b2lkIDApe2xldCBvPW4uZ2V0UHJvcGVydHlPcHRpb25zKGkpO3RoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfEVjdCx0aGlzW2ldPW4uX3Byb3BlcnR5VmFsdWVGcm9tQXR0cmlidXRlKHIsbyksdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmfkVjdH19cmVxdWVzdFVwZGF0ZUludGVybmFsKHQscixuKXtsZXQgaT0hMDtpZih0IT09dm9pZCAwKXtsZXQgbz10aGlzLmNvbnN0cnVjdG9yO249bnx8by5nZXRQcm9wZXJ0eU9wdGlvbnModCksby5fdmFsdWVIYXNDaGFuZ2VkKHRoaXNbdF0scixuLmhhc0NoYW5nZWQpPyh0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5oYXModCl8fHRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzLnNldCh0LHIpLG4ucmVmbGVjdD09PSEwJiYhKHRoaXMuX3VwZGF0ZVN0YXRlJkVjdCkmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz09PXZvaWQgMCYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNldCh0LG4pKSk6aT0hMX0hdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlJiZpJiYodGhpcy5fdXBkYXRlUHJvbWlzZT10aGlzLl9lbnF1ZXVlVXBkYXRlKCkpfXJlcXVlc3RVcGRhdGUodCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxyKSx0aGlzLnVwZGF0ZUNvbXBsZXRlfV9lbnF1ZXVlVXBkYXRlKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZXxTY3Q7dHJ5e3lpZWxkIHRoaXMuX3VwZGF0ZVByb21pc2V9Y2F0Y2gocil7fWxldCB0PXRoaXMucGVyZm9ybVVwZGF0ZSgpO3JldHVybiB0IT1udWxsJiYoeWllbGQgdCksIXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZX0pfWdldCBfaGFzUmVxdWVzdGVkVXBkYXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVN0YXRlJlNjdH1nZXQgaGFzVXBkYXRlZCgpe3JldHVybiB0aGlzLl91cGRhdGVTdGF0ZSZ3Y3R9cGVyZm9ybVVwZGF0ZSgpe2lmKCF0aGlzLl9oYXNSZXF1ZXN0ZWRVcGRhdGUpcmV0dXJuO3RoaXMuX2luc3RhbmNlUHJvcGVydGllcyYmdGhpcy5fYXBwbHlJbnN0YW5jZVByb3BlcnRpZXMoKTtsZXQgdD0hMSxyPXRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzO3RyeXt0PXRoaXMuc2hvdWxkVXBkYXRlKHIpLHQ/dGhpcy51cGRhdGUocik6dGhpcy5fbWFya1VwZGF0ZWQoKX1jYXRjaChuKXt0aHJvdyB0PSExLHRoaXMuX21hcmtVcGRhdGVkKCksbn10JiYodGhpcy5fdXBkYXRlU3RhdGUmd2N0fHwodGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8d2N0LHRoaXMuZmlyc3RVcGRhdGVkKHIpKSx0aGlzLnVwZGF0ZWQocikpfV9tYXJrVXBkYXRlZCgpe3RoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmflNjdH1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fZ2V0VXBkYXRlQ29tcGxldGUoKX1fZ2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2V9c2hvdWxkVXBkYXRlKHQpe3JldHVybiEwfXVwZGF0ZSh0KXt0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcyE9PXZvaWQgMCYmdGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuc2l6ZT4wJiYodGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuZm9yRWFjaCgocixuKT0+dGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShuLHRoaXNbbl0scikpLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPXZvaWQgMCksdGhpcy5fbWFya1VwZGF0ZWQoKX11cGRhdGVkKHQpe31maXJzdFVwZGF0ZWQodCl7fX07QWNlPUNjdDtnM1tBY2VdPSEwO3ZhciBJY2U9RWxlbWVudC5wcm90b3R5cGUsSWlpPUljZS5tc01hdGNoZXNTZWxlY3Rvcnx8SWNlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcjt2YXIgakg9d2luZG93LlNoYWRvd1Jvb3QmJih3aW5kb3cuU2hhZHlDU1M9PT12b2lkIDB8fHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsQWN0PVN5bWJvbCgpLGwxPWNsYXNze2NvbnN0cnVjdG9yKHQscil7aWYociE9PUFjdCl0aHJvdyBuZXcgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PXR9Z2V0IHN0eWxlU2hlZXQoKXtyZXR1cm4gdGhpcy5fc3R5bGVTaGVldD09PXZvaWQgMCYmKGpIPyh0aGlzLl9zdHlsZVNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LHRoaXMuX3N0eWxlU2hlZXQucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSk6dGhpcy5fc3R5bGVTaGVldD1udWxsKSx0aGlzLl9zdHlsZVNoZWV0fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19LFBjdD1lPT5uZXcgbDEoU3RyaW5nKGUpLEFjdCksVXVyPWU9PntpZihlIGluc3RhbmNlb2YgbDEpcmV0dXJuIGUuY3NzVGV4dDtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogJHtlfS4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQKICAgICAgICAgICAgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LmApfSxDaT0oZSwuLi50KT0+e2xldCByPXQucmVkdWNlKChuLGksbyk9Pm4rVXVyKGkpK2VbbysxXSxlWzBdKTtyZXR1cm4gbmV3IGwxKHIsQWN0KX07KHdpbmRvdy5saXRFbGVtZW50VmVyc2lvbnN8fCh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zPVtdKSkucHVzaCgiMi41LjEiKTt2YXIgTGNlPXt9LEVQPWNsYXNzIGV4dGVuZHMgZzN7c3RhdGljIGdldFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlc31zdGF0aWMgX2dldFVuaXF1ZVN0eWxlcygpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3N0eWxlcyIsdGhpcykpKXJldHVybjtsZXQgdD10aGlzLmdldFN0eWxlcygpO2lmKEFycmF5LmlzQXJyYXkodCkpe2xldCByPShvLGEpPT5vLnJlZHVjZVJpZ2h0KChzLGwpPT5BcnJheS5pc0FycmF5KGwpP3IobCxzKToocy5hZGQobCkscyksYSksbj1yKHQsbmV3IFNldCksaT1bXTtuLmZvckVhY2gobz0+aS51bnNoaWZ0KG8pKSx0aGlzLl9zdHlsZXM9aX1lbHNlIHRoaXMuX3N0eWxlcz10PT09dm9pZCAwP1tdOlt0XTt0aGlzLl9zdHlsZXM9dGhpcy5fc3R5bGVzLm1hcChyPT57aWYociBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQmJiFqSCl7bGV0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoci5jc3NSdWxlcykucmVkdWNlKChpLG8pPT5pK28uY3NzVGV4dCwiIik7cmV0dXJuIFBjdChuKX1yZXR1cm4gcn0pfWluaXRpYWxpemUoKXtzdXBlci5pbml0aWFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0VW5pcXVlU3R5bGVzKCksdGhpcy5yZW5kZXJSb290PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpLHdpbmRvdy5TaGFkb3dSb290JiZ0aGlzLnJlbmRlclJvb3QgaW5zdGFuY2VvZiB3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5hZG9wdFN0eWxlcygpfWNyZWF0ZVJlbmRlclJvb3QoKXtyZXR1cm4gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyl9YWRvcHRTdHlsZXMoKXtsZXQgdD10aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXM7dC5sZW5ndGghPT0wJiYod2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiYhd2luZG93LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdz93aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0ucHJlcGFyZUFkb3B0ZWRDc3NUZXh0KHQubWFwKHI9PnIuY3NzVGV4dCksdGhpcy5sb2NhbE5hbWUpOmpIP3RoaXMucmVuZGVyUm9vdC5hZG9wdGVkU3R5bGVTaGVldHM9dC5tYXAocj0+ciBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/cjpyLnN0eWxlU2hlZXQpOnRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzVXBkYXRlZCYmd2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpfXVwZGF0ZSh0KXtsZXQgcj10aGlzLnJlbmRlcigpO3N1cGVyLnVwZGF0ZSh0KSxyIT09TGNlJiZ0aGlzLmNvbnN0cnVjdG9yLnJlbmRlcihyLHRoaXMucmVuZGVyUm9vdCx7c2NvcGVOYW1lOnRoaXMubG9jYWxOYW1lLGV2ZW50Q29udGV4dDp0aGlzfSksdGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzJiYodGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzPSExLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlcy5mb3JFYWNoKG49PntsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kudGV4dENvbnRlbnQ9bi5jc3NUZXh0LHRoaXMucmVuZGVyUm9vdC5hcHBlbmRDaGlsZChpKX0pKX1yZW5kZXIoKXtyZXR1cm4gTGNlfX07RVAuZmluYWxpemVkPSEwO0VQLnJlbmRlcj1DY2U7RVAuc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifTt2YXIga2NlPTAsSWN0PXt9LGpjPShlLHQscik9PntsZXQgbj1yJiZyLm1vZHVsZUlkfHxgY3VzdG9tLXN0eWxlLW1vZHVsZS0ke2tjZSsrfWA7QXJyYXkuaXNBcnJheSh0KXx8KHQ9dD9bdF06W10pLHQuZm9yRWFjaChhPT57aWYoIShhIGluc3RhbmNlb2YgbDEpKXRocm93IG5ldyBFcnJvcigiQW4gaXRlbSBpbiBzdHlsZXMgaXMgbm90IG9mIHR5cGUgQ1NTUmVzdWx0LiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AuIik7aWYoIUljdFthXSl7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZG9tLW1vZHVsZSIpO3MuaW5uZXJIVE1MPWAKICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8c3R5bGU+JHthLnRvU3RyaW5nKCl9PC9zdHlsZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICBgO2xldCBsPWBjdXN0b20tc3R5bGUtbW9kdWxlLSR7a2NlKyt9YDtzLnJlZ2lzdGVyKGwpLEljdFthXT1sfX0pO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtpZihlKXtsZXQgYT1jdXN0b21FbGVtZW50cy5nZXQoZSk7YSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9fZmluYWxpemVkIikmJmNvbnNvbGUud2FybihgVGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24gZm9yICIke2V9IgogICAgICB3YXMgZmluYWxpemVkIGJlZm9yZSBhIHN0eWxlIG1vZHVsZSB3YXMgcmVnaXN0ZXJlZC4KICAgICAgTWFrZSBzdXJlIHRvIGFkZCBjb21wb25lbnQgc3BlY2lmaWMgc3R5bGUgbW9kdWxlcyBiZWZvcmUKICAgICAgaW1wb3J0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGN1c3RvbSBlbGVtZW50LmApLGkuc2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiLGUpfWxldCBvPXImJnIuaW5jbHVkZXx8W107aS5pbm5lckhUTUw9YAogICAgPHRlbXBsYXRlPgogICAgICAke28ubWFwKGE9PmA8c3R5bGUgaW5jbHVkZT0ke2F9Pjwvc3R5bGU+YCl9CiAgICAgICR7dC5tYXAoYT0+YDxzdHlsZSBpbmNsdWRlPSR7SWN0W2FdfT48L3N0eWxlPmApfQogICAgPC90ZW1wbGF0ZT4KICBgLGkucmVnaXN0ZXIobil9O3ZhciBMY3Q9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtzdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn19O2N1c3RvbUVsZW1lbnRzLmRlZmluZSgidmFhZGluLWx1bW8tc3R5bGVzIixMY3QpO3ZhciBxdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQmFzZSAoYmFja2dyb3VuZCkgKi8KICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjZmZmOwoKICAgIC8qIFRpbnQgKi8KICAgIC0tbHVtby10aW50LTVwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMyk7CiAgICAtLWx1bW8tdGludC0xMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4zNyk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC40NCk7CiAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC41KTsKICAgIC0tbHVtby10aW50LTQwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjU3KTsKICAgIC0tbHVtby10aW50LTUwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjY0KTsKICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjcpOwogICAgLS1sdW1vLXRpbnQtNzBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNzcpOwogICAgLS1sdW1vLXRpbnQtODBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuODQpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuOSk7CiAgICAtLWx1bW8tdGludDogI2ZmZjsKCiAgICAvKiBTaGFkZSAqLwogICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCA2MSUsIDI1JSwgMC4wNSk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA1NyUsIDI0JSwgMC4xKTsKICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDUzJSwgMjMlLCAwLjE2KTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDUwJSwgMjIlLCAwLjI2KTsKICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDQ3JSwgMjElLCAwLjM4KTsKICAgIC0tbHVtby1zaGFkZS01MHBjdDogaHNsYSgyMTQsIDQ1JSwgMjAlLCAwLjUpOwogICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgNDMlLCAxOSUsIDAuNjEpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgNDIlLCAxOCUsIDAuNzIpOwogICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgNDElLCAxNyUsIDAuODMpOwogICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgNDAlLCAxNiUsIDAuOTQpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzNSUsIDE1JSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXNoYWRlLTVwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTEwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTEwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0yMHBjdDogdmFyKC0tbHVtby1zaGFkZS0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTQwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC01MHBjdDogdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTcwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTcwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC04MHBjdDogdmFyKC0tbHVtby1zaGFkZS04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtOTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0OiB2YXIoLS1sdW1vLXNoYWRlKTsKCiAgICAvKiBUZXh0ICovCiAgICAtLWx1bW8taGVhZGVyLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QpOwogICAgLS1sdW1vLWJvZHktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC05MHBjdCk7CiAgICAtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNzBwY3QpOwogICAgLS1sdW1vLXRlcnRpYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNTBwY3QpOwogICAgLS1sdW1vLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwoKICAgIC8qIFByaW1hcnkgKi8KICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA5MCUsIDUyJSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdDogaHNsYSgyMTQsIDkwJSwgNTIlLCAwLjUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC4xKTsKICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7CiAgICAtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcjogI2ZmZjsKCiAgICAvKiBFcnJvciAqLwogICAgLS1sdW1vLWVycm9yLWNvbG9yOiBoc2woMywgMTAwJSwgNjElKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCAxMDAlLCA2MCUsIDAuNSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjEpOwogICAgLS1sdW1vLWVycm9yLXRleHQtY29sb3I6IGhzbCgzLCA5MiUsIDUzJSk7CiAgICAtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogU3VjY2VzcyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3I6IGhzbCgxNDUsIDgwJSwgNDIlKTsgLyogaHNsKDE0NCw4MiUsMzclKTsgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNzYlLCA0NCUsIDAuNTUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItMTBwY3Q6IGhzbGEoMTQ1LCA3NiUsIDQ0JSwgMC4xMik7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCAxMDAlLCAzMiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29udHJhc3QtY29sb3I6ICNmZmY7CiAgfQpgLFJjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1JjZS5pbm5lckhUTUw9YDxzdHlsZT4ke3F1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFJjZS5jb250ZW50KTt2YXIgR3VyPUNpYAogIFt0aGVtZX49J2RhcmsnXSB7CiAgICAvKiBCYXNlIChiYWNrZ3JvdW5kKSAqLwogICAgLS1sdW1vLWJhc2UtY29sb3I6IGhzbCgyMTQsIDM1JSwgMjElKTsKCiAgICAvKiBUaW50ICovCiAgICAtLWx1bW8tdGludC01cGN0OiBoc2xhKDIxNCwgNjUlLCA4NSUsIDAuMDYpOwogICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMjE0LCA2MCUsIDgwJSwgMC4xNCk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgyMTQsIDY0JSwgODIlLCAwLjIzKTsKICAgIC0tbHVtby10aW50LTMwcGN0OiBoc2xhKDIxNCwgNjklLCA4NCUsIDAuMzIpOwogICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMjE0LCA3MyUsIDg2JSwgMC40MSk7CiAgICAtLWx1bW8tdGludC01MHBjdDogaHNsYSgyMTQsIDc4JSwgODglLCAwLjUpOwogICAgLS1sdW1vLXRpbnQtNjBwY3Q6IGhzbGEoMjE0LCA4MiUsIDkwJSwgMC42KTsKICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDIxNCwgODclLCA5MiUsIDAuNyk7CiAgICAtLWx1bW8tdGludC04MHBjdDogaHNsYSgyMTQsIDkxJSwgOTQlLCAwLjgpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMjE0LCA5NiUsIDk2JSwgMC45KTsKICAgIC0tbHVtby10aW50OiBoc2woMjE0LCAxMDAlLCA5OCUpOwoKICAgIC8qIFNoYWRlICovCiAgICAtLWx1bW8tc2hhZGUtNXBjdDogaHNsYSgyMTQsIDAlLCAwJSwgMC4wNyk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA0JSwgMiUsIDAuMTUpOwogICAgLS1sdW1vLXNoYWRlLTIwcGN0OiBoc2xhKDIxNCwgOCUsIDQlLCAwLjIzKTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDEyJSwgNiUsIDAuMzIpOwogICAgLS1sdW1vLXNoYWRlLTQwcGN0OiBoc2xhKDIxNCwgMTYlLCA4JSwgMC40MSk7CiAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCAyMCUsIDEwJSwgMC41KTsKICAgIC0tbHVtby1zaGFkZS02MHBjdDogaHNsYSgyMTQsIDI0JSwgMTIlLCAwLjYpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgMjglLCAxMyUsIDAuNyk7CiAgICAtLWx1bW8tc2hhZGUtODBwY3Q6IGhzbGEoMjE0LCAzMiUsIDEzJSwgMC44KTsKICAgIC0tbHVtby1zaGFkZS05MHBjdDogaHNsYSgyMTQsIDMzJSwgMTMlLCAwLjkpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzMyUsIDEzJSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXRpbnQtNXBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMTBwY3Q6IHZhcigtLWx1bW8tdGludC0xMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tdGludC0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tdGludC0zMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNDBwY3Q6IHZhcigtLWx1bW8tdGludC00MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tdGludC01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tdGludC02MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNzBwY3Q6IHZhcigtLWx1bW8tdGludC03MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tdGludC04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tdGludC05MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3Q6IHZhcigtLWx1bW8tdGludCk7CgogICAgLyogVGV4dCAqLwogICAgLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0KTsKICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpOwogICAgLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTcwcGN0KTsKICAgIC0tbHVtby10ZXJ0aWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTUwcGN0KTsKICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKCiAgICAvKiBQcmltYXJ5ICovCiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvcjogaHNsKDIxNCwgODYlLCA1NSUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3Q6IGhzbGEoMjE0LCA4NiUsIDU1JSwgMC41KTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA2MyUsIDAuMSk7CiAgICAtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yOiBoc2woMjE0LCAxMDAlLCA3MCUpOwogICAgLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogRXJyb3IgKi8KICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDkwJSwgNjMlKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC41KTsKICAgIC0tbHVtby1lcnJvci1jb2xvci0xMHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC4xKTsKICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgMTAwJSwgNjclKTsKCiAgICAvKiBTdWNjZXNzICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvcjogaHNsKDE0NSwgNjUlLCA0MiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItNTBwY3Q6IGhzbGEoMTQ1LCA2NSUsIDQyJSwgMC41KTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuMSk7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCA4NSUsIDQ3JSk7CiAgfQoKICBodG1sIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgW3RoZW1lfj0nZGFyayddIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgaDEsCiAgaDIsCiAgaDMsCiAgaDQsCiAgaDUsCiAgaDYgewogICAgY29sb3I6IHZhcigtLWx1bW8taGVhZGVyLXRleHQtY29sb3IpOwogIH0KCiAgYSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3IpOwogIH0KCiAgYmxvY2txdW90ZSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgfQoKICBjb2RlLAogIHByZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKTsKICB9CmA7amMoIiIsR3VyLHttb2R1bGVJZDoibHVtby1jb2xvciJ9KTt2YXIgV3VyPUNpYAogIDpob3N0IHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcikgIWltcG9ydGFudDsKICB9CmA7amMoIiIsV3VyLHttb2R1bGVJZDoibHVtby1jb2xvci1sZWdhY3kiLGluY2x1ZGU6WyJsdW1vLWNvbG9yIl19KTt2YXIgTmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7TmNlLmlubmVySFRNTD1gCiAgPHN0eWxlPgogICAgQGZvbnQtZmFjZSB7CiAgICAgIGZvbnQtZmFtaWx5OiAnbHVtby1pY29ucyc7CiAgICAgIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRWNBQXNBQUFBQUlpd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCQ0FBQUFEc0FBQUJVSUlzbGVrOVRMeklBQUFGRUFBQUFRd0FBQUZaQUlVdUtZMjFoY0FBQUFZZ0FBQUQ0QUFBRHJzQ1U4ZDVuYkhsbUFBQUNnQUFBQzJNQUFCZDRoOVRvMldobFlXUUFBQTNrQUFBQU1BQUFBRFphLzZTc2FHaGxZUUFBRGhRQUFBQWRBQUFBSkFicEEzNW9iWFI0QUFBT05BQUFBQkFBQUFDc3BCQUFBR3h2WTJFQUFBNUVBQUFBV0FBQUFGaDU1SUFzYldGNGNBQUFEcHdBQUFBZkFBQUFJQUZLQVhCdVlXMWxBQUFPdkFBQUFURUFBQUl1VVVKWkNIQnZjM1FBQUEvd0FBQUJLd0FBQWVsbThTelZlSnhqWUdSZ1lPQmlNR0N3WTJCeWNmTUpZZURMU1N6Slk1QmlZR0dBQUpBOE1wc3hKek05a1lFRHhnUEtzWUJwRGlCbWc0Z0NBQ1k3QlVnQWVKeGpZR1MreURpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpHKzBtSU8rcC9GRU1VY3hEQU5LTXdJa2dNQUJuOE1MUUI0bk8zU1dXNkRNQUJGMFV0d0NFbklQTS96aExLOExxaGZYUnliU1AxNFhVWXRIVjloR1lRd1FCTklvM2NVSVBraFFlTTdyaWIxZWtxblhnOTgxWHVDMXF2eTg0bHpvamxlaDNwdXhMMGhQakdqUlU0NzN0ZWxvRWVmQVVOR2pKa3daY2FjQlV0V3JObXdaY2VlQTBkT25MbHc1Y2FkQjA5ZWxQR2hHZitqME5USS82NUtmWGVyVDZKaHFLbnBSS3RnT3B1cWFUcnRLalBVbHFIbWh0bzIxSTdwTDZpNmhscVkzcTdxR1dyZlVBZUdPalRVa2FHT0RYVmlxRk5EblJucTNGQVhocm8wMUpXaHJnMTFZNmhiUTkwWjZ0NVFENFo2Tk5TVG9aNE45V0tvVjBPOUdlcmRVQitHK2pUVWw2R1dSdmtMMjRCa0VYaWN0Vmg5YkZ2VkZiL254dmJ6KzdSZi9ONnpIY2QyYkNmUCtXZ2MxWjlOMGpwTm5FTDZrYlJWUzZIQTJoUVlHaDlUR1IxQ2JDcWEyclhyV09rUUUvc0hOSmdtdFp2b1ZOWnFFMUIxRE5IeHpUUXhDZWhVVFlpSlRReUVOdWkwcVNMZXpyM1BkdXlRZmdtUldPZmRlOCs5NTUxejdybm4vTzRqTG9KL2JSUDBVYUtRTUxGSmpwQkF2cGhMWkMzRGswb2s3V0J6UjIvdXBKczdSeXcvbmZGYmxuL3V1Ti9hcEN2d3JLTHJTdlVxUnVmYm01cG4wZnMwdzRnWXhuR1ZQNnFIbk80YldpRFFHUWd3dFM2bG0zbEIzUW9YMU0ydndFbXV6aXJGMzl5K0VzMitESjhkMXBreXFCSXFvemUzRDErWno0RHJGb2F6eEk4ZFd3TXJEbFoyRE1xUUFSOUFST3NKVSsyY21sVFBhelRjbzUyRjF4VGEyYTIrSzh2dnE5MmRWSG10TG9QZVFYL0FaUFJZR3RoRFlPZVpqQmpLb0ZzVkd1bFIzbFdVOTVXZUNLNDRxSFU3TWhXVUdVS1pEVDNvS1VjRzJHV3VoK0VERGZVWUEvamhBaGwwVE9zSk5ZU0V1N21RbWkzVXpmWHdaS0E0QnNWc0hMWFFZR2dSVzk1dUV0cEoxVmZuOVhpTHJpUkJsRkVxeHNEakEwOXlDTlVvUXh4d2Q3S1dTVHQyeTNHVEtpZmxxSFJTb1daYzNtMTFXYS9mSmRGZ1hENHNTWWZsZUpCS2Q4R016N0o4ZFpuL2NHUkNjS0dEbkEyR2UzZkt6Y3ZsblRETnRoR1dMWHpYL1dhWHRVQW1SZ2VMbEhTcjMwcjBHOVVUWE1iMEF0bXd6T295NzNma1NsSFprZHV3L1RZdVU5Y0FENFl1dFBveFRUc0EzNzk3d1ZyNFovMU5DNXpBUkhyNHZ0eEpqeElmaVpNaE1rYldrKzE0Qm5KWkt3cUdad0Rmc3dMeXhXRFNnMTFyRkxKRjdOb3B4amQxaDEvUU9UK29lemdmdTNZcStIaytkdWY1eCs0MG8xR1RrYUlnaWtLL0lFbkM2YVl4Q1VCYVpKU040WFRZRmpVL1lNTklLcUp3aERHT0NDSThGRFhuWG1YanRHaEdKeVNocWpBT25CT2tXMkpHOVM3R2dZZU1XQVU1SnpobldtQk9hT00rQ0tFUG9xU2ZGREMyVW5xK0RMbFVnVVZVRkZMWkdKZzZqdGxvanNkc2E4a1BPYlB1SmRpNWRuQmRCc0xKTUdUV0RhNHQySnZ0d3VQbzlzK1k4NnN1di9XMzNRRzFyQWFPQVVWK3Z4NEs2ZjJEMDRQVktsQzdXTFNyWnpBaTQ1WlY2bElDN1dvWHFtUnl2VXFvVndyelVvVnNJamVUWFdRditSSDVHVGxCWGlCL0luOGxuMEliQkNBRk9hakFKcmdaWXlPSFdxT2ZVZS9hSGpJMTJSNk9RbzFqQ2d0MjE1bCs0ZjZYUGIrME1Ob3UwVis0M24yRjc3dFNmUmIyNGQ3eml0Z25LbXZZSHM2OXp1Z2FQdkJ3djZpb1hrYjJMZEw2NUF0dzUxdUxrWGx1MWJoTU1SY1hTUGNZb3FLSVJsaDM0bFFQOC81SmJ1VUZ5ZTR2eEQ2LzZNeEZGMTFDMHVWTHI5VWxndzQ0dFMzcE1WaU5MVUV4YnljRmdMSWN0K1FETWliUmlteDF5ZFV6OEZYWml1T0lEQk9NVlgyblVaYytodU5FNVhVSjgxdWlKb2lhYndxYVZGMHVhY0tiYXUvcGw0UjJWVzBYWGxKcmE2Ym9WcllHNjQ2VEY1Tll6d3k0dmpFTlZyRGxjTnBaUGw4REg2WFg4WFdDeDBtdldWWlk2S0ZMcnZzWTY2L3pQaWN0NUZueGFOVVIvanV2WkNNM1R2RDYwRTJXMXRaaXpiWFRQRHVhYmNtMG5iYnpwV0twbUExYXlCUThnaWVkTFVNK0Ewa05qQmpRam11WXo3WXJnSVhZdm1GNjNaTEJ3U1hycG45VGI5d3dkZC9VMUgwUE1RSzNYY084dWwzV1Q3UHlQUGRweTBUZW1LeE5SY0pOYXVpWEpublVEcFVwcFFXczRTblVJeTBFRVNHWXFKWVFMR0h4emFHV3dWSWFTNlk3bVFGTThaallEUTNheGpmNjFTV2pVMzNKd09aQTFwd2FHMUw5bXpmNzFhSFJkWDFKSHc2RnAwYVhoTndicXllR05nNE5iZHpHQ0J4b3o0WlhqeTROdTY5WnI2c0RZNnZNckxVNW5BMVA4SmtiZFdYSjZFUmZNcnl2TmgxSmZROStUNGRJaEd2Szl3M2R4akJCemF0c1EvTWxPSFZJRG5ZcER6Nm9kQVhsUTAxdDJQYTVJYWZkOE1NcHhBZURLUDBDNkNqZ1ZMVDVvc0I2aWNVeDAxbFdqWHh6VC9HeVJGMndlbEVNNVovN2pHM1ZqUTFTck5uNUlieXpPRzVkb2JCMy9RSHh5WnZzWGNvejhJb0V3UzdwbENnK3p4SFFrNDI0cTlCZkVwa0VTSmJGSFF1c0RCU1dGa3VCa29QTzBrTEt3UlZZanhHWGxIVGNURFFNSi9INlRYOWFma083bW5yYVRPMWZlVG5aQVhMdTRjcDdIQVhNbU5HMXllRms5VGdTL05IaFpSLzRRb0JUci9aQis2aENneWwxNU5xMVViTjZuRTEvWm5QMVUyY2l6Q0JwdnM4Y0pRWko0TGtZeDVOL3laUEFVWk5RUTBWNGYzQlFsbFdySzNZUnpsMzBkT1Q2UlZuMnVwTnVyNndvU2E4Q3FwZFQvYUtuQk00bzNqTnVyOWQ5eHF0VVQ2dmVCRXQ5Q2E5YXQrRVJ6RUVoVWtSOHNhNW1RNGFWdkpvVmVFQTh6STRlaTVtVUxYRkd5VTd6LzZUQWVZTFZjcHpTV1pZOFBZWUY1eXJUVjYwc1QwK1hWMTQxdlgrK1dmMTZWMmJGZUdWUFpYeEZwa3Z5ZUtUV0xsemZXMG1uS3hzWTZZMzI5NC8wOTk4U0NmWDFibG01cGJjdkZHbHEvcjA3TVJBTWhZSURpVzVKRktXVzN2ZHJFcENzWlNKRytvbTdadS9QU1NjWkpoTmtMYm1XNVdzcjEycFdxVzV6S3Rsd1JTNGJGT3hVdzE3bUN6eTZsc2tDRGwxV1lPR1dEWXJBRHJNQTdCRER3ZVdXTmQ1a29pSm5SMWR6K3l0TFAycTBTcVBCMWxuSzJjY0I3UlllNEZTb1BrczNpQjN0NHR4VFNIY3RiMnN5MWl2azBwdkh1Q05tNncxZjZ3eHYzK09DZ043OExxZFFuVVZoN1Iwb1RBcDB6T2YycmJXNzcwVnU1QzJkSXlHZFRuSG84elNqaTdkcHBqMFVTb1ZDeitsaFJNVGg1M1RlcTlWYkdmYmp1U2JBb29TZFhheVk0UFlIZzM3NEM2ZjdnbDFCL0RYdUo0L1FYeE9CZEpGSnNwRnNJM2VncG9XVVVDamxUSUZuTllObCtaeVpLbUJlWUtHSGtEMVF5RGxoYUtiS3dLY0lKcUo0VExKMk9tZFkvSldYYWU0RGRHQnc4SFo3ZVhjZ0ZGMnpyMlNvYWxEcnk1aUtxb2EwUHVoZTNoUFEyczNlbFRZTStNSStuM3JLMEtnTDcvTGEzR2VNTHQ2bTd1OTEydkdudnRPUmlJYTBxQm1ocVZpK1hXOVhOQm1xYjhlVmdLeklIZkdJNWJOb0c3WDBVQ3plSVNtcUljTy9uWThGSDdVOGF2WDlmeC9TVCtoeDBzZXpQdzlReThNdW0zR1dmMk40VXkveUlZR1ZCWGJKSFdJWnA3ZGZUY3B0ZE1UcjlRbXE3RGFpSy91a3FDTDRrdDRSVWZTNVhQbk10bVQyMi9tUUZxRjdlbVNxdHJsdThTVkVseERSSnJaT0RrcHV3ZTBWZlRmamRFcDFmN0E3ditmb3pOQlhVSi82V1R1SzJUdEZscEZWWkFaM0xjRnZVaTFaMnAyWVQrRU1Ba0dKVlN0T3pMVEFQZzRJcVdJQWx6UlNqT0JrbDJ6eGozVEt5Y3B6VC9NbnZYM3VhU01XTStnVTBya1hqb2hoZWZWUk1hcHMzL2tMTVNLdjIzbFQyM3V4UXJrUWp5T0psZU1Ec2RoQW5ENlpHRWxXWjVNakNYekNFL2hrV1grV0Y0a256R2hWT3lLMmVRWmVrVjNleW8wekw4a3VZV0NuREN2ampoQWtjVFBPQkRYVmRvYXYzSFZjRm5Rakx2dFY5UzJwMHpBNkplZ1B3TVF4dCt5RmIzbGw5ekdscS81ZFJLYjNjRXlRWW9hTllwaGFySjd4Q0I3QVd4c0xZM2pqWlhZMFhzWmowV2p3YzlJNlBQL2RLQUJuQ1phcUhwYVpFQUN4azRaZUxaU0tOZ1pBQmwrbFlRWDFzSlFPU1gzbjZyNDEwZXZjb3VkNUplQUdVWFZQOUgxdFpPS2VqVHE0T25vMHowZXJybzFGcm5PcG9odmExZC9oVGR0VnNRZEtONVc5UmxUM05qRDBuem55S05UZ0tBTWZXTldjeW9kVjBJR0xQSUhPRjBvNEp5cXVmYUs0ejZXSUl6dUdoM2Q4Yzhjd1FnOEVSK09WeHlyamRtOHZOdWh0czRMb09paEd4SU11VWRnendpWU43eGhoMStvWm5KTnVURzdnUVp2dTRYV1o5R0FaWmpHRXVid2VQcVlodEtEVEgrOVZRa2wxNy9pR3lic25KKzgrc0t0eVByY2xsOXR5NjVac2RzdC85aXFwRUtoN001VmRCeGgzY3NPZE5jNnRXM0kxdXlNMVB6T1hlZ1NPckxGc0ZOSTJPMjdNK1RGMkFwbk45TVV2NXVkNkxqeEl2RVFuSFJ6eEl1NElzQTlNTEZrSm4ydGNab1o3T043ZFhlN3VqcmM4SHJ1c1BLYW1scVh3ZDc3bFFVdUxwaWxhdTRQVU1hcHVlQmI3aXJVNFJvVVhFWVh1VnVJR2xSR21PcCsybE5rYVJQVnppT3FtbGFadmFxRzRkRmdTajBqeEVKV3J2MTJJVVdudG13K3JmUWFyUkUwQXBoNG9jSTZubFVsR3FzK3UzLytUL2V0aFc2MlBwSHAyZUhiWnN0bmgvd09POTV5REFIaWNZMkJrWUdBQTRwbUo2UUh4L0RaZkdiaVpYd0JGR0dwVU56UWk2UCt2bWFjeTNRSnlPUmlZUUtJQU5vVUxWWGljWTJCa1lHQU8rcDhGSkY4d0FBSHpWQVpHQmxTZ0RRQlc5Z052QUFBQWVKeGpZR0JnWUg0eE5EQUF6d1FtandBQUFBQUFUZ0NhQU9nQkNnRXNBVTRCY0FHYUFjUUI3Z0lhQXB3QzZBU2FCTHdFMWdUeUJRNEZLZ1Y2QmRBRi9nWkVCbVlHdGdjWUI1QUlHQWhTQ0dvSS9nbEdDYjRKMmdvRUNqd0tnZ3E0Q3ZBTFVBdVdDN3g0bkdOZ1pHQmcwR1pNWVJCbEFBRW1JT1lDUWdhRy8yQStBd0FZbEFHOEFIaWNiWkU5VHNNd0dJYmY5QS9SU2dnRVltSHhBZ3RxK2pOMlpHajNEdDNUMUdsVE9YSGt1Qlc5QXlmZ0VCeUNnVE53Q0E3QlcvTkpsVkJ0eWQvangrOFhLd21BYTN3aHduRkU2SWIxT0JxNDRPNlBtNlFiNFJiNVFiaU5IaDZGTy9SRDRTNmVNUkh1NFJhYVQ0aGFselIzZUJWdTRBcHZ3azM2ZCtFVytVTzRqWHQ4Q25mb3Y0VzdXT0JIdUllbjZNWHNDdHZQVTF2V2M3M2VtY1NkeElrVzJ0VzVMZFVvSHA3a1RKZmFKVjZ2MVBLZzZ2MTY3SDJtTW1jTE5iV2wxOFpZVlRtNzFhbVBOOTVYazhFZ0V4K250b0RCRGdVcytzaVJzcGFvTWVmN3J1a05Fcml6aVhOdXdTN0htb2U5d2dneHYrZTU1SXpKTXFRVGVOWVYwMHNjdU5iWTgrWXhyVWZHZmNhTVpiL0NOUFFlMDRiVDBsVGhiRXVUMHNmWWhLNksvMjNBbWYzTHgrSDI0aGNqNEdTY0FBQUFlSnh0anRsdWd6QVFSYmtKVUVKSXV1Lzd2cVI4bEdOUEFjV3gwWUFiNWUvTGtsUjk2RWdlblN1ZkdZMDM4UHFLdmY5cmhnR0c4QkVneEE0aWpCQmpqQVFUVExHTFBlempBSWM0d2pGT2NJb3puT01DbDdqQ05XNXdpenZjNHdHUGVNSXpYdkNLTjd6akF6Tjhlb25RUldaU1NhWW1qdnVnNmFzZTk4aEZsdGV4TUptbVZObVYyV0J2ZE5nWlVjK3VqQVd6WFczVURudTF3NDNhc1N0SGM4R3B6QVhYL3B5MGpxVFFaSlRna2N4SkxwYUNGMGxEMzJ4TnQrNDN0QXNuMjlEZnQwMnVES1MyY2pHVU5nc2syNnFLMmxGdGhZb1UyN0lOUHFtaURxZzVnb2UwcHFSNXFTb3FNZGVrL0NVWkZ5d0w0NnJFc2lJbWxlcWlxb015dDRiYVhsdS8xR0xkTkZmNXpiY05tZHIxWVVXQ1plNDdvK3pVbWIvRG9TdGJ3M2NWc2VmOUFMamppUFFBKSBmb3JtYXQoJ3dvZmYnKTsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgfQoKICAgIGh0bWwgewogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tY2VudGVyOiAiXFxlYTAxIjsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLWxlZnQ6ICJcXGVhMDIiOwogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tcmlnaHQ6ICJcXGVhMDMiOwogICAgICAtLWx1bW8taWNvbnMtYW5nbGUtZG93bjogIlxcZWEwNCI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1sZWZ0OiAiXFxlYTA1IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXJpZ2h0OiAiXFxlYTA2IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXVwOiAiXFxlYTA3IjsKICAgICAgLS1sdW1vLWljb25zLWFycm93LWRvd246ICJcXGVhMDgiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctbGVmdDogIlxcZWEwOSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy1yaWdodDogIlxcZWEwYSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy11cDogIlxcZWEwYiI7CiAgICAgIC0tbHVtby1pY29ucy1iYXItY2hhcnQ6ICJcXGVhMGMiOwogICAgICAtLWx1bW8taWNvbnMtYmVsbDogIlxcZWEwZCI7CiAgICAgIC0tbHVtby1pY29ucy1jYWxlbmRhcjogIlxcZWEwZSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGVja21hcms6ICJcXGVhMGYiOwogICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1kb3duOiAiXFxlYTEwIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tbGVmdDogIlxcZWExMSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLXJpZ2h0OiAiXFxlYTEyIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tdXA6ICJcXGVhMTMiOwogICAgICAtLWx1bW8taWNvbnMtY2xvY2s6ICJcXGVhMTQiOwogICAgICAtLWx1bW8taWNvbnMtY29nOiAiXFxlYTE1IjsKICAgICAgLS1sdW1vLWljb25zLWNyb3NzOiAiXFxlYTE2IjsKICAgICAgLS1sdW1vLWljb25zLWRvd25sb2FkOiAiXFxlYTE3IjsKICAgICAgLS1sdW1vLWljb25zLWRyb3Bkb3duOiAiXFxlYTE4IjsKICAgICAgLS1sdW1vLWljb25zLWVkaXQ6ICJcXGVhMTkiOwogICAgICAtLWx1bW8taWNvbnMtZXJyb3I6ICJcXGVhMWEiOwogICAgICAtLWx1bW8taWNvbnMtZXllOiAiXFxlYTFiIjsKICAgICAgLS1sdW1vLWljb25zLWV5ZS1kaXNhYmxlZDogIlxcZWExYyI7CiAgICAgIC0tbHVtby1pY29ucy1tZW51OiAiXFxlYTFkIjsKICAgICAgLS1sdW1vLWljb25zLW1pbnVzOiAiXFxlYTFlIjsKICAgICAgLS1sdW1vLWljb25zLW9yZGVyZWQtbGlzdDogIlxcZWExZiI7CiAgICAgIC0tbHVtby1pY29ucy1waG9uZTogIlxcZWEyMCI7CiAgICAgIC0tbHVtby1pY29ucy1waG90bzogIlxcZWEyMSI7CiAgICAgIC0tbHVtby1pY29ucy1wbGF5OiAiXFxlYTIyIjsKICAgICAgLS1sdW1vLWljb25zLXBsdXM6ICJcXGVhMjMiOwogICAgICAtLWx1bW8taWNvbnMtcmVkbzogIlxcZWEyNCI7CiAgICAgIC0tbHVtby1pY29ucy1yZWxvYWQ6ICJcXGVhMjUiOwogICAgICAtLWx1bW8taWNvbnMtc2VhcmNoOiAiXFxlYTI2IjsKICAgICAgLS1sdW1vLWljb25zLXVuZG86ICJcXGVhMjciOwogICAgICAtLWx1bW8taWNvbnMtdW5vcmRlcmVkLWxpc3Q6ICJcXGVhMjgiOwogICAgICAtLWx1bW8taWNvbnMtdXBsb2FkOiAiXFxlYTI5IjsKICAgICAgLS1sdW1vLWljb25zLXVzZXI6ICJcXGVhMmEiOwogICAgfQogIDwvc3R5bGU+CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChOY2UuY29udGVudCk7dmFyIFl1cj1DaWAKICA6aG9zdCB7CiAgICAtLWx1bW8tc2l6ZS14czogMS42MjVyZW07CiAgICAtLWx1bW8tc2l6ZS1zOiAxLjg3NXJlbTsKICAgIC0tbHVtby1zaXplLW06IDIuMjVyZW07CiAgICAtLWx1bW8tc2l6ZS1sOiAyLjc1cmVtOwogICAgLS1sdW1vLXNpemUteGw6IDMuNXJlbTsKCiAgICAvKiBJY29ucyAqLwogICAgLS1sdW1vLWljb24tc2l6ZS1zOiAxLjI1ZW07CiAgICAtLWx1bW8taWNvbi1zaXplLW06IDEuNWVtOwogICAgLS1sdW1vLWljb24tc2l6ZS1sOiAyLjI1ZW07CiAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KICAgIC0tbHVtby1pY29uLXNpemU6IHZhcigtLWx1bW8taWNvbi1zaXplLW0pOwogIH0KYCxEY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtEY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtZdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChEY2UuY29udGVudCk7dmFyIGp1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBTcXVhcmUgKi8KICAgIC0tbHVtby1zcGFjZS14czogMC4yNXJlbTsKICAgIC0tbHVtby1zcGFjZS1zOiAwLjVyZW07CiAgICAtLWx1bW8tc3BhY2UtbTogMXJlbTsKICAgIC0tbHVtby1zcGFjZS1sOiAxLjVyZW07CiAgICAtLWx1bW8tc3BhY2UteGw6IDIuNXJlbTsKCiAgICAvKiBXaWRlICovCiAgICAtLWx1bW8tc3BhY2Utd2lkZS14czogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UteHMpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtczogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLW06IGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1sOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLWwpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUteGw6IGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhsKTsKCiAgICAvKiBUYWxsICovCiAgICAtLWx1bW8tc3BhY2UtdGFsbC14czogdmFyKC0tbHVtby1zcGFjZS14cykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtczogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLW06IHZhcigtLWx1bW8tc3BhY2UtbSkgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1sOiB2YXIoLS1sdW1vLXNwYWNlLWwpIGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwteGw6IHZhcigtLWx1bW8tc3BhY2UteGwpIGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKTsKICB9CmAsT2NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7T2NlLmlubmVySFRNTD1gPHN0eWxlPiR7anVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoT2NlLmNvbnRlbnQpO3ZhciBYdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQm9yZGVyIHJhZGl1cyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtczogMC4yNWVtOyAvKiBDaGVja2JveCwgYmFkZ2UsIGRhdGUtcGlja2VyIHllYXIgaW5kaWNhdG9yLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLW06IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cywgMC4yNWVtKTsgLyogQnV0dG9uLCB0ZXh0IGZpZWxkLCBtZW51IG92ZXJsYXksIGV0YyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtbDogMC41ZW07IC8qIERpYWxvZywgbm90aWZpY2F0aW9uLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzOiAwLjI1ZW07IC8qIERlcHJlY2F0ZWQgKi8KCiAgICAvKiBTaGFkb3cgKi8KICAgIC0tbHVtby1ib3gtc2hhZG93LXhzOiAwIDFweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTUwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXM6IDAgMnB4IDRweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDNweCAxMnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0zMHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1tOiAwIDJweCA2cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCA4cHggMjRweCAtNHB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbDogMCAzcHggMThweCAtMnB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDEycHggNDhweCAtNnB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3cteGw6IDAgNHB4IDI0cHggLTNweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxOHB4IDY0cHggLThweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKCiAgICAvKiBDbGlja2FibGUgZWxlbWVudCBjdXJzb3IgKi8KICAgIC0tbHVtby1jbGlja2FibGUtY3Vyc29yOiBkZWZhdWx0OwogIH0KYCx6Y2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt6Y2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtYdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh6Y2UuY29udGVudCk7dmFyICR1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBwcmV0dGllci1pZ25vcmUgKi8KICAgIC0tbHVtby1mb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnUm9ib3RvJywgJ1NlZ29lIFVJJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7CgogICAgLyogRm9udCBzaXplcyAqLwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eHM6IDAuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXhzOiAwLjgxMjVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXM6IDAuODc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1tOiAxcmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1sOiAxLjEyNXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteGw6IDEuMzc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eGw6IDEuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXh4eGw6IDIuNXJlbTsKCiAgICAvKiBMaW5lIGhlaWdodHMgKi8KICAgIC0tbHVtby1saW5lLWhlaWdodC14czogMS4yNTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1zOiAxLjM3NTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1tOiAxLjYyNTsKICB9CmAsRmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7RmNlLmlubmVySFRNTD1gPHN0eWxlPiR7JHVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoRmNlLmNvbnRlbnQpO3ZhciBLdXI9Q2lgCiAgaHRtbCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLCB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKSk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1tKTsKICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICB9CgogIC8qIENhbuKAmXQgY29tYmluZSB3aXRoIHRoZSBhYm92ZSBzZWxlY3RvciBiZWNhdXNlIHRoYXQgZG9lc27igJl0IHdvcmsgaW4gYnJvd3NlcnMgd2l0aG91dCBuYXRpdmUgc2hhZG93IGRvbSAqLwogIDpob3N0IHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LW0pOwogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIH0KCiAgc21hbGwsCiAgW3RoZW1lfj0nZm9udC1zaXplLXMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtcyk7CiAgfQoKICBbdGhlbWV+PSdmb250LXNpemUteHMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhzKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXhzKTsKICB9CgogIGgxLAogIGgyLAogIGgzLAogIGg0LAogIGg1LAogIGg2IHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7CiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07CiAgfQoKICBoMSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgaDIgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgfQoKICBoMyB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDQgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1sKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDUgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIG1hcmdpbi1ib3R0b206IDAuMjVlbTsKICB9CgogIGg2IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHMpOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogIH0KCiAgcCwKICBibG9ja3F1b3RlIHsKICAgIG1hcmdpbi10b3A6IDAuNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgfQoKICBhOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgaHIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgaGVpZ2h0OiAxcHg7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiB2YXIoLS1sdW1vLXNwYWNlLXMpIGNhbGModmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pIC8gMik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICB9CgogIGJsb2NrcXVvdGUgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICB9CgogIGIsCiAgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogIGJsb2NrcXVvdGVbZGlyPSdydGwnXSB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogIH0KYDtqYygiIixLdXIse21vZHVsZUlkOiJsdW1vLXR5cG9ncmFwaHkifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCB7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgW3BhcnQ9J2xhYmVsJ106bm90KFtlbXB0eV0pIHsKICAgICAgbWFyZ2luOiAwLjE4NzVlbSAwLjg3NWVtIDAuMTg3NWVtIDAuMzc1ZW07CiAgICB9CgogICAgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB3aWR0aDogY2FsYygxZW0gKyAycHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgbWFyZ2luOiAwLjE4NzVlbTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4xMiwgMC4zMiwgMC41NCwgMiksIGJhY2tncm91bmQtY29sb3IgMC4xNXM7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXSkgW3BhcnQ9J2NoZWNrYm94J10sCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgIH0KCiAgICAvKiBOZWVkZWQgdG8gYWxpZ24gdGhlIGNoZWNrYm94IG5pY2VseSBvbiB0aGUgYmFzZWxpbmUgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnXFwyMDAzJzsKICAgIH0KCiAgICAvKiBDaGVja21hcmsgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIHdpZHRoOiAwOwogICAgICBoZWlnaHQ6IDA7CiAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICBib3JkZXItd2lkdGg6IDAuMTg3NWVtIDAgMCAwLjE4NzVlbTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMC44MTI1ZW07CiAgICAgIGxlZnQ6IDAuNWVtOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNTUpIHJvdGF0ZSgtMTM1ZGVnKTsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHdpZHRoOiAwLjYyNWVtOwogICAgICBoZWlnaHQ6IDEuMDYyNWVtOwogICAgfQoKICAgIC8qIEluZGV0ZXJtaW5hdGUgY2hlY2ttYXJrICovCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdG9wOiA0NSU7CiAgICAgIGhlaWdodDogMTAlOwogICAgICBsZWZ0OiAyMiU7CiAgICAgIHJpZ2h0OiAyMiU7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBib3JkZXI6IDA7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcik7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXM7CiAgICB9CgogICAgLyogRm9jdXMgcmluZyAqLwogICAgOmhvc3QoW2ZvY3VzLXJpbmddKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGVkICovCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBjb2xvcjogdmFyKC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nbGFiZWwnXSA6OnNsb3R0ZWQoKikgewogICAgICBjb2xvcjogaW5oZXJpdDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J106OmFmdGVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC4zNzVlbSAwLjE4NzVlbSAwLjg3NWVtOwogICAgfQoKICAgIC8qIFRyYW5zaXRpb24gdGhlIGNoZWNrbWFyayBpZiBhY3RpdmF0ZWQgd2l0aCB0aGUgbW91c2UgKGRpc2FibGVkIGZvciBncmlkIHNlbGVjdC1hbGwgdGhpcyB3YXkpICovCiAgICA6aG9zdCg6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMsIGhlaWdodCAwLjI1czsKICAgIH0KCiAgICAvKiBVc2VkIGZvciBhY3RpdmF0aW9uICJoYWxvIiAqLwogICAgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNCk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBvcGFjaXR5IDAuOHM7CiAgICB9CgogICAgLyogSG92ZXIgKi8KICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogRGlzYWJsZSBob3ZlciBmb3IgdG91Y2ggZGV2aWNlcyAqLwogICAgQG1lZGlhIChwb2ludGVyOiBjb2Fyc2UpIHsKICAgICAgOmhvc3QoOm5vdChbY2hlY2tlZF0pOm5vdChbaW5kZXRlcm1pbmF0ZV0pOm5vdChbZGlzYWJsZWRdKTpob3ZlcikgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB9CiAgICB9CgogICAgLyogQWN0aXZlICovCiAgICA6aG9zdChbYWN0aXZlXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDVzOwogICAgfQoKICAgIDpob3N0KFthY3RpdmVdW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXTpub3QoW2NoZWNrZWRdKSkgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFzLCAwLjAxczsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgb3BhY2l0eTogMC40OwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWNoZWNrYm94In0pO3ZhciBCY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0aGVtZTp7dHlwZTpTdHJpbmcscmVhZE9ubHk6ITB9fX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSkscj09PSJ0aGVtZSImJnRoaXMuX3NldFRoZW1lKGkpfX07dmFyIFhIPWU9PmNsYXNzIGV4dGVuZHMgQmNlKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0IHI9dGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5fdGVtcGxhdGU7biYmQXJyYXkuZnJvbShuLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGVbaW5jbHVkZV0iKSkuZm9yRWFjaChpPT57dGhpcy5faW5jbHVkZVN0eWxlKGkuZ2V0QXR0cmlidXRlKCJpbmNsdWRlIikscil9KSx0aGlzLl9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil9c3RhdGljIF9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil7bGV0IGk9b3UucHJvdG90eXBlLm1vZHVsZXMsbz0hMSxhPXRoaXMuaXMrIi1kZWZhdWx0LXRoZW1lIjtPYmplY3Qua2V5cyhpKS5zb3J0KChzLGwpPT57bGV0IGM9cy5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLHU9bC5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLGg9WyJsdW1vLSIsIm1hdGVyaWFsLSJdLGY9aC5maWx0ZXIoZD0+cy5pbmRleE9mKGQpPT09MCkubGVuZ3RoPjAscD1oLmZpbHRlcihkPT5sLmluZGV4T2YoZCk9PT0wKS5sZW5ndGg+MDtyZXR1cm4gYyE9PXU/Yz8tMToxOmYhPT1wP2Y/LTE6MTowfSkuZm9yRWFjaChzPT57aWYocyE9PWEpe2xldCBsPWlbc10uZ2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiKTtsJiZsLnNwbGl0KCIgIikuZm9yRWFjaChjPT57bmV3IFJlZ0V4cCgiXiIrYy5zcGxpdCgiKiIpLmpvaW4oIi4qIikrIiQiKS50ZXN0KHRoaXMuaXMpJiYobz0hMCx0aGlzLl9pbmNsdWRlU3R5bGUocyxyKSl9KX19KSwhbyYmaVthXSYmdGhpcy5faW5jbHVkZVN0eWxlKGEscil9c3RhdGljIF9pbmNsdWRlU3R5bGUocixuKXtpZihuJiYhbi5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2luY2x1ZGU9IiR7cn0iXWApKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kuc2V0QXR0cmlidXRlKCJpbmNsdWRlIixyKSxuLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaSl9fX07dmFyIGtjdD0hMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKCk9PntrY3Q9ITB9LHtjYXB0dXJlOiEwfSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PntrY3Q9ITF9LHtjYXB0dXJlOiEwfSk7dmFyIFp1cj1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3RhYmluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX3RhYmluZGV4Q2hhbmdlZCJ9fX19LEhjZT1lPT5jbGFzcyBleHRlbmRzIFp1cihlKXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW59LF9wcmV2aW91c1RhYkluZGV4Ont0eXBlOk51bWJlcn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfaXNTaGlmdFRhYmJpbmc6e3R5cGU6Qm9vbGVhbn19fXJlYWR5KCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57ci5jb21wb3NlZFBhdGgoKVswXT09PXRoaXM/dGhpcy5jb250YWlucyhyLnJlbGF0ZWRUYXJnZXQpfHx0aGlzLl9mb2N1cygpOnIuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLmZvY3VzRWxlbWVudCkhPT0tMSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX3NldEZvY3VzZWQoITApfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3NldEZvY3VzZWQoITEpKSxzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscj0+eyFyLmRlZmF1bHRQcmV2ZW50ZWQmJnIua2V5Q29kZT09PTkmJnIuc2hpZnRLZXkmJih0aGlzLl9pc1NoaWZ0VGFiYmluZz0hMCxIVE1MRWxlbWVudC5wcm90b3R5cGUuZm9jdXMuYXBwbHkodGhpcyksdGhpcy5fc2V0Rm9jdXNlZCghMSksc2V0VGltZW91dCgoKT0+dGhpcy5faXNTaGlmdFRhYmJpbmc9ITEsMCkpfSksdGhpcy5hdXRvZm9jdXMmJiF0aGlzLmRpc2FibGVkJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSx0aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpfSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzQXR0cmlidXRlKCJmb2N1c2VkIikmJnRoaXMuX3NldEZvY3VzZWQoITEpfV9zZXRGb2N1c2VkKHIpe3I/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzZWQiLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXNlZCIpLHImJmtjdD90aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJmb2N1cy1yaW5nIil9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB3aW5kb3cuY29uc29sZS53YXJuKGBQbGVhc2UgaW1wbGVtZW50IHRoZSAnZm9jdXNFbGVtZW50JyBwcm9wZXJ0eSBpbiA8JHt0aGlzLmxvY2FsTmFtZX0+YCksdGhpc31fZm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuX2lzU2hpZnRUYWJiaW5nfHwodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Zm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuZGlzYWJsZWR8fCh0aGlzLmZvY3VzRWxlbWVudC5mb2N1cygpLHRoaXMuX3NldEZvY3VzZWQoITApKX1ibHVyKCl7IXRoaXMuZm9jdXNFbGVtZW50fHwodGhpcy5mb2N1c0VsZW1lbnQuYmx1cigpLHRoaXMuX3NldEZvY3VzZWQoITEpKX1fZGlzYWJsZWRDaGFuZ2VkKHIpe3RoaXMuZm9jdXNFbGVtZW50LmRpc2FibGVkPXIscj8odGhpcy5ibHVyKCksdGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4LHRoaXMudGFiaW5kZXg9LTEsdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIikpOih0eXBlb2YgdGhpcy5fcHJldmlvdXNUYWJJbmRleCE9InVuZGVmaW5lZCImJih0aGlzLnRhYmluZGV4PXRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIikpfV90YWJpbmRleENoYW5nZWQocil7ciE9PXZvaWQgMCYmKHRoaXMuZm9jdXNFbGVtZW50LnRhYkluZGV4PXIpLHRoaXMuZGlzYWJsZWQmJnRoaXMudGFiaW5kZXgmJih0aGlzLnRhYmluZGV4IT09LTEmJih0aGlzLl9wcmV2aW91c1RhYkluZGV4PXRoaXMudGFiaW5kZXgpLHRoaXMudGFiaW5kZXg9cj12b2lkIDApfWNsaWNrKCl7dGhpcy5kaXNhYmxlZHx8c3VwZXIuY2xpY2soKX19O3ZhciBKdXI9L1wvXCpcKlxzK3ZhYWRpbi1kZXYtbW9kZTpzdGFydChbXHNcU10qKXZhYWRpbi1kZXYtbW9kZTplbmRccytcKlwqXC8vaSwkSD13aW5kb3cuVmFhZGluJiZ3aW5kb3cuVmFhZGluLkZsb3cmJndpbmRvdy5WYWFkaW4uRmxvdy5jbGllbnRzO2Z1bmN0aW9uIFF1cigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4hMH1yZXR1cm4gVmNlKGUpfWZ1bmN0aW9uIHRocigpe3RyeXtyZXR1cm4gZWhyKCk/ITA6cmhyKCk/JEg/IW5ocigpOiFRdXIoKTohMX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gZWhyKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWFkaW4uZGV2ZWxvcG1lbnRtb2RlLmZvcmNlIil9ZnVuY3Rpb24gcmhyKCl7cmV0dXJuWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk+PTB9ZnVuY3Rpb24gbmhyKCl7cmV0dXJuISEoJEgmJk9iamVjdC5rZXlzKCRIKS5tYXAodD0+JEhbdF0pLmZpbHRlcih0PT50LnByb2R1Y3Rpb25Nb2RlKS5sZW5ndGg+MCl9ZnVuY3Rpb24gVmNlKGUsdCl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpcmV0dXJuO2xldCByPUp1ci5leGVjKGUudG9TdHJpbmcoKSk7aWYocil0cnl7ZT1uZXcgRnVuY3Rpb24oclsxXSl9Y2F0Y2gobil7Y29uc29sZS5sb2coInZhYWRpbi1kZXZlbG9wbWVudC1tb2RlLWRldGVjdG9yOiB1bmNvbW1lbnRBbmRSdW4oKSBmYWlsZWQiLG4pfXJldHVybiBlKHQpfXdpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e307dmFyIFJjdD1mdW5jdGlvbihlLHQpe2lmKHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlKXJldHVybiBWY2UoZSx0KX07d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9PT12b2lkIDAmJih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZT10aHIoKSk7ZnVuY3Rpb24gaWhyKCl7fXZhciBVY2U9ZnVuY3Rpb24oKXtpZih0eXBlb2YgUmN0PT0iZnVuY3Rpb24iKXJldHVybiBSY3QoaWhyKX07dmFyIF8zPWNsYXNze3N0YXRpYyBkZXRlY3RTY3JvbGxUeXBlKCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC50ZXh0Q29udGVudD0iQUJDRCIsdC5kaXI9InJ0bCIsdC5zdHlsZS5mb250U2l6ZT0iMTRweCIsdC5zdHlsZS53aWR0aD0iNHB4Iix0LnN0eWxlLmhlaWdodD0iMXB4Iix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS50b3A9Ii0xMDAwcHgiLHQuc3R5bGUub3ZlcmZsb3c9InNjcm9sbCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtsZXQgcj0icmV2ZXJzZSI7cmV0dXJuIHQuc2Nyb2xsTGVmdD4wP3I9ImRlZmF1bHQiOih0LnNjcm9sbExlZnQ9Mix0LnNjcm9sbExlZnQ8MiYmKHI9Im5lZ2F0aXZlIikpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCkscn1zdGF0aWMgZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxyLG4pe2xldHtzY3JvbGxMZWZ0Oml9PW47aWYociE9PSJydGwifHwhdClyZXR1cm4gaTtzd2l0Y2godCl7Y2FzZSJuZWdhdGl2ZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aCtpO2Nhc2UicmV2ZXJzZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aC1pfXJldHVybiBpfXN0YXRpYyBzZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LHIsbixpKXtpZihyIT09InJ0bCJ8fCF0KXtuLnNjcm9sbExlZnQ9aTtyZXR1cm59c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOm4uc2Nyb2xsTGVmdD1uLmNsaWVudFdpZHRoLW4uc2Nyb2xsV2lkdGgraTticmVhaztjYXNlInJldmVyc2UiOm4uc2Nyb2xsTGVmdD1uLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaTticmVhaztkZWZhdWx0Om4uc2Nyb2xsTGVmdD1pO2JyZWFrfX19O3ZhciBFMD1bXSxvaHI9ZnVuY3Rpb24oKXtsZXQgZT1EY3QoKTtFMC5mb3JFYWNoKHQ9PntOY3QodCxlKX0pfSxLSCxhaHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIob2hyKTthaHIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZGlyIl19KTt2YXIgTmN0PWZ1bmN0aW9uKGUsdCxyPWUuZ2V0QXR0cmlidXRlKCJkaXIiKSl7dD9lLnNldEF0dHJpYnV0ZSgiZGlyIix0KTpyIT1udWxsJiZlLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9LERjdD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKX0sWkg9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntkaXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19fXN0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCksS0h8fChLSD1fMy5kZXRlY3RTY3JvbGxUeXBlKCkpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZGlyIil8fCh0aGlzLl9fc3Vic2NyaWJlKCksTmN0KHRoaXMsRGN0KCksbnVsbCkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSl7aWYoc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHIsbixpKSxyIT09ImRpciIpcmV0dXJuO2xldCBvPURjdCgpLGE9aT09PW8mJkUwLmluZGV4T2YodGhpcyk9PT0tMSxzPSFpJiZuJiZFMC5pbmRleE9mKHRoaXMpPT09LTE7YXx8cz8odGhpcy5fX3N1YnNjcmliZSgpLE5jdCh0aGlzLG8saSkpOmkhPT1vJiZuPT09byYmdGhpcy5fX3N1YnNjcmliZSghMSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX19zdWJzY3JpYmUoITEpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJkaXIiKX1fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpe2k9PT0iZGlyIiYmbj09PSIiJiYhci5oYXNBdHRyaWJ1dGUoImRpciIpfHxzdXBlci5fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKXtyPT09ImRpciImJiFuP3RoaXMuZGlyPSIiOnN1cGVyLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKX1fX3N1YnNjcmliZShyPSEwKXtyP0UwLmluZGV4T2YodGhpcyk9PT0tMSYmRTAucHVzaCh0aGlzKTpFMC5pbmRleE9mKHRoaXMpPi0xJiZFMC5zcGxpY2UoRTAuaW5kZXhPZih0aGlzKSwxKX1fX2dldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHIpe3JldHVybiBfMy5nZXROb3JtYWxpemVkU2Nyb2xsTGVmdChLSCx0aGlzLmdldEF0dHJpYnV0ZSgiZGlyIil8fCJsdHIiLHIpfV9fc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQocixuKXtyZXR1cm4gXzMuc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoS0gsdGhpcy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIixyLG4pfX07d2luZG93LlZhYWRpbj13aW5kb3cuVmFhZGlufHx7fTt3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnM9d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zfHxbXTt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrPXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2t8fHt9O3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl09ZnVuY3Rpb24oKXtVY2UoKX07dmFyIE9jdCxxY2U9bmV3IFNldCxKSD1lPT5jbGFzcyBleHRlbmRzIFpIKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0e2lzOnJ9PXRoaXM7ciYmIXFjZS5oYXMocikmJih3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnMucHVzaCh0aGlzKSxxY2UuYWRkKHIpLHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2smJihPY3Q9c3IuZGVib3VuY2UoT2N0LGt4LCgpPT57d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFja1sidmFhZGluLXVzYWdlLXN0YXRpc3RpY3MiXSgpfSksSmwoT2N0KSkpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxkb2N1bWVudC5kb2N0eXBlPT09bnVsbCYmY29uc29sZS53YXJuKCdWYWFkaW4gY29tcG9uZW50cyByZXF1aXJlIHRoZSAic3RhbmRhcmRzIG1vZGUiIGRlY2xhcmF0aW9uLiBQbGVhc2UgYWRkIDwhRE9DVFlQRSBodG1sPiB0byB0aGUgSFRNTCBkb2N1bWVudC4nKX19O3ZhciBRSD1jbGFzcyBleHRlbmRzIEpIKEhjZShYSCh5aChtdCkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBRYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB9CgogICAgICAgIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGZsZXg6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBpbnB1dFt0eXBlPSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogMDsKICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgoKICAgICAgPGxhYmVsPgogICAgICAgIDxzcGFuIHBhcnQ9ImNoZWNrYm94Ij4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgY2hlY2tlZD0ie3tjaGVja2VkOjpjaGFuZ2V9fSIKICAgICAgICAgICAgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iCiAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9Int7aW5kZXRlcm1pbmF0ZTo6Y2hhbmdlfX0iCiAgICAgICAgICAgIHJvbGU9InByZXNlbnRhdGlvbiIKICAgICAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgICAgLz4KICAgICAgICA8L3NwYW4+CgogICAgICAgIDxzcGFuIHBhcnQ9ImxhYmVsIj4KICAgICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvbGFiZWw+CiAgICBgfXN0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWNoZWNrYm94In1zdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2NoZWNrZWRDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbmRldGVybWluYXRlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSx2YWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9uIn0sX25hdGl2ZUNoZWNrYm94Ont0eXBlOk9iamVjdH19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm5hbWV9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jaGVja2VkP3RoaXMuX3N0b3JlZE5hbWU6IiJ9c2V0IG5hbWUodCl7dGhpcy5fc3RvcmVkTmFtZT10fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsImNoZWNrYm94IiksdGhpcy5fbmF0aXZlQ2hlY2tib3g9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLl9hZGRBY3RpdmVMaXN0ZW5lcnMoKTtsZXQgdD10aGlzLmdldEF0dHJpYnV0ZSgibmFtZSIpO3QmJih0aGlzLm5hbWU9dCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0ibGFiZWwiXScpLnF1ZXJ5U2VsZWN0b3IoInNsb3QiKS5hZGRFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZS5iaW5kKHRoaXMpKSx0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpfV91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpe2xldCB0PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImxhYmVsIl0nKSxyPXQuZmlyc3RFbGVtZW50Q2hpbGQuYXNzaWduZWROb2RlcygpO3RoaXMuX2lzQXNzaWduZWROb2Rlc0VtcHR5KHIpP3Quc2V0QXR0cmlidXRlKCJlbXB0eSIsIiIpOnQucmVtb3ZlQXR0cmlidXRlKCJlbXB0eSIpfV9pc0Fzc2lnbmVkTm9kZXNFbXB0eSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0wfHx0Lmxlbmd0aD09MSYmdFswXS5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnRbMF0udGV4dENvbnRlbnQudHJpbSgpPT09IiJ9X2NoZWNrZWRDaGFuZ2VkKHQpe3RoaXMuaW5kZXRlcm1pbmF0ZT90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIixCb29sZWFuKHQpKX1faW5kZXRlcm1pbmF0ZUNoYW5nZWQodCl7dD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIix0aGlzLmNoZWNrZWQpfV9hZGRBY3RpdmVMaXN0ZW5lcnMoKXt0aGlzLl9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHRoaXMsImRvd24iLHQ9Pnt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsIiIpfSksdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLCJ1cCIsKCk9PnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhY3RpdmUiKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0QXR0cmlidXRlKCJhY3RpdmUiLCIiKSl9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIiksdGhpcy5pbmRldGVybWluYXRlJiYodGhpcy5pbmRldGVybWluYXRlPSExKSl9KX1nZXQgZm9jdXNFbGVtZW50KCl7cmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpfV9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KXtyZXR1cm4hKHRoaXMuZGlzYWJsZWR8fHQudGFyZ2V0LmxvY2FsTmFtZT09PSJhIil9X2hhbmRsZUNsaWNrKHQpe3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiYodGhpcy5pbmRldGVybWluYXRlPyh0aGlzLmluZGV0ZXJtaW5hdGU9ITEsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSk6dC5jb21wb3NlZFBhdGgoKVswXSE9PXRoaXMuX25hdGl2ZUNoZWNrYm94JiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSkpfV90b2dnbGVDaGVja2VkKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2hhbmdlIix7Y29tcG9zZWQ6ITEsYnViYmxlczohMH0pKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShRSC5pcyxRSCk7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1zKTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKCiAgICAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgIC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdCk7CiAgICB9CgogICAgLyogTm8gKG91dGVyKSBib3JkZXIgKi8KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLWJvcmRlciddKSkgewogICAgICBib3JkZXI6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogQ2VsbCBzdHlsZXMgKi8KCiAgICBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1tKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1tKTsKICAgIH0KCiAgICAvKiBBcHBseSByb3cgYm9yZGVycyBieSBkZWZhdWx0IGFuZCBpbnRyb2R1Y2UgdGhlICJuby1yb3ctYm9yZGVycyIgdmFyaWFudCAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogSGlkZSBmaXJzdCBib2R5IHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J11bZmlyc3RdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLW0pIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgIH0KCiAgICAvKiBGb2N1cy1yaW5nICovCgogICAgW3BhcnR+PSdjZWxsJ106Zm9jdXMgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIDpob3N0KFtuYXZpZ2F0aW5nXSkgW3BhcnR+PSdjZWxsJ106Zm9jdXM6OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERyYWcgYW5kIERyb3Agc3R5bGVzICovCiAgICA6aG9zdChbZHJhZ292ZXJdKTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB6LWluZGV4OiAxMDA7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIHsKICAgICAgei1pbmRleDogMTAwICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ10gewogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgKyAycHgpOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSBbZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIGhlaWdodDogMnB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXI9J2JlbG93J10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgdG9wOiAxMDAlOwogICAgICBib3R0b206IGF1dG87CiAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcj0nYWJvdmUnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICB0b3A6IGF1dG87CiAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0nYmVsb3cnXSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSk6OmFmdGVyLAogICAgW3BhcnR+PSdyb3cnXVtkZXRhaWxzLW9wZW5lZF1bZHJhZ292ZXI9J2Fib3ZlJ10gW3BhcnR+PSdkZXRhaWxzLWNlbGwnXTo6YWZ0ZXIgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdW2RyYWdvdmVyPSdvbi10b3AnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBoZWlnaHQ6IDEwMCU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIHsKICAgICAgLyogQWRkIGJvdHRvbS1zcGFjZSB0byB0aGUgcm93IHNvIHRoZSBkcmFnIG51bWJlciBkb2Vzbid0IGdldCBjbGlwcGVkLiBOZWVkZWQgZm9yIElFL0VkZ2UgKi8KICAgICAgYm9yZGVyLWJvdHRvbTogMTAwcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIHotaW5kZXg6IDEwMCAhaW1wb3J0YW50OwogICAgICBvcGFjaXR5OiAwLjk7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bbGFzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICBbaW9zXSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgICNzY3JvbGxlcjpub3QoW2lvc10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XTpub3QoW2RyYWdzdGFydD0nJ10pOjphZnRlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IHZhcigtLV9ncmlkLWRyYWctc3RhcnQteCk7CiAgICAgIHRvcDogdmFyKC0tX2dyaWQtZHJhZy1zdGFydC15KTsKICAgICAgei1pbmRleDogMTAwOwogICAgICBjb250ZW50OiBhdHRyKGRyYWdzdGFydCk7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpICogMC44KTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3IpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWVycm9yLWNvbG9yKTsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pOwogICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHhzKTsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHRleHQtdHJhbnNmb3JtOiBpbml0aWFsOwogICAgICBsZXR0ZXItc3BhY2luZzogaW5pdGlhbDsKICAgICAgbWluLXdpZHRoOiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1zKSAqIDAuNyk7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAvKiBIZWFkZXJzIGFuZCBmb290ZXJzICovCgogICAgW3BhcnR+PSdoZWFkZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdmb290ZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICB9CgogICAgW3BhcnQ9J3JvdyddOm9ubHktY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLXhsKTsKICAgIH0KCiAgICAvKiBIZWFkZXIgYm9yZGVycyAqLwoKICAgIC8qIEhpZGUgZmlyc3QgaGVhZGVyIHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcDogMDsKICAgIH0KCiAgICBbcGFydD0ncm93J106bGFzdC1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBib3JkZXItYm90dG9tOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSd0b3AnXSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEZvb3RlciBib3JkZXJzICovCgogICAgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3A6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdmb290ZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdib3R0b20nXSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb2x1bW4gcmVvcmRlcmluZyAqLwoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ11bcmVvcmRlci1zdGF0dXM9J2FsbG93ZWQnXSB7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXVtyZW9yZGVyLXN0YXR1cz0nZHJhZ2dpbmcnXSB7CiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpLCB2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgYm94LXNoYWRvdzogdmFyKC0tbHVtby1ib3gtc2hhZG93LXMpOwogICAgICAvKiBUT0RPIFVzZSB0aGUgc2FtZSBzdHlsZXMgYXMgZm9yIHRoZSBjZWxsIGVsZW1lbnQgKHJlb3JkZXItZ2hvc3QgY29waWVzIHN0eWxlcyBmcm9tIHRoZSBjZWxsIGVsZW1lbnQpICovCiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UtcykgdmFyKC0tbHVtby1zcGFjZS1tKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIENvbHVtbiByZXNpemluZyAqLwoKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ10gewogICAgICB3aWR0aDogM3B4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSAqOm5vdChbY29sdW1uLXJlc2l6aW5nXSkgW3BhcnR+PSdjZWxsJ106aG92ZXIgW3BhcnQ9J3Jlc2l6ZS1oYW5kbGUnXSwKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ106YWN0aXZlIHsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdHJhbnNpdGlvbi1kZWxheTogMC4xNXM7CiAgICB9CgogICAgLyogQ29sdW1uIGJvcmRlcnMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdjb2x1bW4tYm9yZGVycyddKSBbcGFydH49J2NlbGwnXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBGcm96ZW4gY29sdW1ucyAqLwoKICAgIFtsYXN0LWZyb3plbl0gewogICAgICBib3JkZXItcmlnaHQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdsZWZ0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBSb3cgc3RyaXBlcyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3Jvdy1zdHJpcGVzJ10pIFtwYXJ0fj0ncm93J106bm90KFtvZGRdKSBbcGFydH49J2JvZHktY2VsbCddLAogICAgOmhvc3QoW3RoZW1lfj0ncm93LXN0cmlwZXMnXSkgW3BhcnR+PSdyb3cnXTpub3QoW29kZF0pIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10gewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1jb250cmFzdC01cGN0KSwgdmFyKC0tbHVtby1jb250cmFzdC01cGN0KSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICAgIH0KCiAgICAvKiBTZWxlY3RlZCByb3cgKi8KCiAgICAvKiBSYWlzZSB0aGUgc2VsZWN0ZWQgcm93cyBhYm92ZSB1bnNlbGVjdGVkIHJvd3MgKHNvIHRoYXQgYm94LXNoYWRvdyBjYW4gY292ZXIgdW5zZWxlY3RlZCByb3dzKSAqLwogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSB7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSBbcGFydH49J2JvZHktY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvciksIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICB9CgogICAgLyogQ292ZXIgdGhlIGJvcmRlciBvZiBhbiB1bnNlbGVjdGVkIHJvdyAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm94LXNoYWRvdzogMCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgMCAwIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb21wYWN0ICovCgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydD0ncm93J106b25seS1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtbSk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1zKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0PSdyb3cnXVtmaXJzdF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgbWluLWhlaWdodDogY2FsYyh2YXIoLS1sdW1vLXNpemUtcykgLSB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkpOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXhzKSB2YXIoLS1sdW1vLXNwYWNlLXMpOwogICAgfQoKICAgIC8qIFdyYXAgY2VsbCBjb250ZW50cyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3dyYXAtY2VsbC1jb250ZW50J10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIH0KCiAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtsYXN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVt0aGVtZX49J2NvbHVtbi1ib3JkZXJzJ10pIFtwYXJ0fj0nY2VsbCddOm5vdChbbGFzdC1jb2x1bW5dKTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSB7CiAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVtvdmVyZmxvd349J3JpZ2h0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWdyaWQifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCgudmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveCkgewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgfQogIGAse21vZHVsZUlkOiJ2YWFkaW4tZ3JpZC1zZWxlY3QtYWxsLWNoZWNrYm94LWx1bW8ifSk7dmFyIEdjZT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLHNocj1HY2UmJkdjZVsxXT49OCxXY2U9MyxZY2U9aDkoe2JlaGF2aW9yczpbSnMsdjldLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF90ZW1wbGF0ZUNvc3Q6MCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU2l6ZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9tYXhTY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3ZpZXdwb3J0SGVpZ2h0K3RoaXMuX3Njcm9sbE9mZnNldH0sZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KGUpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5fdmlydHVhbFN0YXJ0VmFsPWV9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sc2V0IF9waHlzaWNhbFN0YXJ0KGUpe2U9ZSV0aGlzLl9waHlzaWNhbENvdW50LGU8MCYmKGU9dGhpcy5fcGh5c2ljYWxDb3VudCtlKSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe2xldCBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe2xldCB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl0sdD50aGlzLl9zY3JvbGxQb3NpdGlvbilyZXR1cm4gbn0pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7bGV0IGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtsZXQgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7dDx0aGlzLl9zY3JvbGxCb3R0b20mJihlPW4pLHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl19KSx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LHVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllczpmdW5jdGlvbigpe2xldCBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD10aGlzLnNjcm9sbFRhcmdldD09PXRoaXM/MDpwYXJzZUludChlWyJwYWRkaW5nLXRvcCJdLDEwKSx0aGlzLl9pc1JUTD1Cb29sZWFuKGUuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX3ZpZXdwb3J0V2lkdGg9dGhpcy4kLml0ZW1zLm9mZnNldFdpZHRoLHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodH0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXtsZXQgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDtsZXQgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7bGV0e3BoeXNpY2FsVG9wOm4saW5kZXhlczppfT10aGlzLl9nZXRSZXVzYWJsZXMocik7cj8odGhpcy5fcGh5c2ljYWxUb3A9bix0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2kubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0LWkubGVuZ3RoKSx0aGlzLl91cGRhdGUoaSxyP251bGw6aSksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLDApLGxpKX19LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24oZSl7bGV0IHQscixuLGk9W10sbz10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxhPXRoaXMuX3ZpcnR1YWxTdGFydCxzPXRoaXMuX3ZpcnR1YWxFbmQsbD10aGlzLl9waHlzaWNhbENvdW50LGM9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0LHU9dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LGg9dGhpcy5fc2Nyb2xsVG9wLGY9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj1oLWMpOih0PXRoaXMuX3BoeXNpY2FsRW5kLHI9dS1mKTtuPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF0scj1yLW4sIShpLmxlbmd0aD49bHx8cjw9byk7KWlmKGUpe2lmKHMraS5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50fHxjK24+PWgtdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO2kucHVzaCh0KSxjPWMrbix0PSh0KzEpJWx9ZWxzZXtpZihhLWkubGVuZ3RoPD0wfHxjK3RoaXMuX3BoeXNpY2FsU2l6ZS1uPD1mKWJyZWFrO2kucHVzaCh0KSxjPWMtbix0PXQ9PT0wP2wtMTp0LTF9cmV0dXJue2luZGV4ZXM6aSxwaHlzaWNhbFRvcDpjLXRoaXMuX3Njcm9sbE9mZnNldH19LF91cGRhdGU6ZnVuY3Rpb24oZSx0KXtpZighKGUmJmUubGVuZ3RoPT09MHx8dGhpcy5fcGh5c2ljYWxDb3VudD09PTApKXtpZih0aGlzLl9hc3NpZ25Nb2RlbHMoZSksdGhpcy5fdXBkYXRlTWV0cmljcyhlKSx0KWZvcig7dC5sZW5ndGg7KXtsZXQgcj10LnBvcCgpO3RoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9waHlzaWNhbFNpemVzW3JdfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsQm90dG9tIT0wJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKGUpe2xldCByPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrZSxXY2UsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCktdGhpcy5fcGh5c2ljYWxDb3VudCxuPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSk7aWYoIShyPDApKXtpZihyPjApe2xldCBpPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChyKSk7Zm9yKGxldCBvPTA7bzxyO28rKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50K3IsdGhpcy5fcGh5c2ljYWxTdGFydD50aGlzLl9waHlzaWNhbEVuZCYmdGhpcy5faXNJbmRleFJlbmRlcmVkKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpJiZ0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpPHRoaXMuX3BoeXNpY2FsRW5kJiYodGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3IpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLWkpL3Isbj1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpfXRoaXMuX3ZpcnR1YWxFbmQ+PXRoaXMuX3ZpcnR1YWxDb3VudC0xfHxuPT09MHx8KHRoaXMuX2lzQ2xpZW50RnVsbCgpP3RoaXMuX3BoeXNpY2FsU2l6ZTx0aGlzLl9vcHRQaHlzaWNhbFNpemUmJnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyx0aGlzLl9jbGFtcChNYXRoLnJvdW5kKDUwL3RoaXMuX3RlbXBsYXRlQ29zdCksMSxuKSksa3gpOnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyxuKSxsaSkpfX0sX3JlbmRlcjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuaXNBdHRhY2hlZHx8IXRoaXMuX2lzVmlzaWJsZSkpaWYodGhpcy5fcGh5c2ljYWxDb3VudCE9PTApe2xldHtwaHlzaWNhbFRvcDplLGluZGV4ZXM6dH09dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrdC5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QubGVuZ3RoLHRoaXMuX3VwZGF0ZSh0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChXY2UpKX0sX2l0ZW1zQ2hhbmdlZDpmdW5jdGlvbihlKXtlLnBhdGg9PT0iaXRlbXMiJiYodGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXtsZXQgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF91cGRhdGVNZXRyaWNzOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9pc1Zpc2libGUpcmV0dXJuO2NpKCk7bGV0IHQ9MCxyPTAsbj10aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obyl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK3Qtcix0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PW4mJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgoaSpuK3QpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTtsZXQgZT10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24odCl7dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbdF0pLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19KX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fdmlydHVhbFN0YXJ0PT09MD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZihlIT09MCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtZTtsZXQgdD10aGlzLl9zY3JvbGxUb3A7IXNociYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsZT1lfHx0aGlzLl9zY3JvbGxIZWlnaHQ9PT0wLGU9ZXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUsKGV8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCkmJih0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCsicHgiLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwwfHxlPnRoaXMuaXRlbXMubGVuZ3RoLTF8fChjaSgpLHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSlyZXR1cm47ZT10aGlzLl9jbGFtcChlLDAsdGhpcy5fdmlydHVhbENvdW50LTEpLCghdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHxlPj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpJiYodGhpcy5fdmlydHVhbFN0YXJ0PWUtMSksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7bGV0IHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxTdGFydCxuPTAsaT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtmb3IoO3I8ZSYmbjw9aTspbj1uK3RoaXMuX3BoeXNpY2FsU2l6ZXNbdF0sdD0odCsxKSV0aGlzLl9waHlzaWNhbENvdW50LHIrKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtuKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH0sX3Jlc2V0QXZlcmFnZTpmdW5jdGlvbigpe3RoaXMuX3BoeXNpY2FsQXZlcmFnZT0wLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50PTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLGZ1bmN0aW9uKCl7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pc1Zpc2libGU/KHRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITApLHRoaXMuX3Jlc2V0QXZlcmFnZSgpLHRoaXMuX3JlbmRlcigpKTp0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCExKX0sTmkpfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0KyhlLXRoaXMuX3ZpcnR1YWxTdGFydCkpJXRoaXMuX3BoeXNpY2FsQ291bnR9LF9jbGFtcDpmdW5jdGlvbihlLHQscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgodCxlKSl9LF9kZWJvdW5jZTpmdW5jdGlvbihlLHQscil7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW2VdPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNbZV0scix0LmJpbmQodGhpcykpLEpsKHRoaXMuX2RlYm91bmNlcnNbZV0pfX0pO3ZhciB0Vj1jbGFzcyBleHRlbmRzIFljZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57c2l6ZTp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxfdmlkeE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZWZmZWN0aXZlU2l6ZUNoYW5nZWQoX2VmZmVjdGl2ZVNpemUpIl19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKCl7fV9hZnRlclNjcm9sbCgpe31fZ2V0Um93VGFyZ2V0KCl7fV9jcmVhdGVTY3JvbGxlclJvd3MoKXt9X2NhblBvcHVsYXRlKCl7fXNjcm9sbFRvSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInNjcm9sbFRvSW5kZXgiKSx0aGlzLl9zY3JvbGxpbmdUb0luZGV4PSEwLHQ9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9lZmZlY3RpdmVTaXplLTEpLHRoaXMuJC50YWJsZS5zY3JvbGxUb3A9dC90aGlzLl9lZmZlY3RpdmVTaXplKih0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fbWF4U2Nyb2xsVG9wKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldCgxZTYpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHQtdGhpcy5fdmlkeE9mZnNldCkpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKTtsZXQgcj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKG49Pm4uaW5kZXg9PT10KVswXTtpZihyKXtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtNYXRoLmFicyhuKT4xJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9bix0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfXRoaXMuX3Njcm9sbGluZ1RvSW5kZXg9ITF9X2VmZmVjdGl2ZVNpemVDaGFuZ2VkKHQpe2xldCByLG49MDt0aGlzLl9pdGVyYXRlSXRlbXMoKGksbyk9PntpZihvPT09dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07cj1hLmluZGV4LG49YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9fSksdGhpcy5pdGVtcyYmdDx0aGlzLml0ZW1zLmxlbmd0aCYmKHRoaXMuX3Njcm9sbFRvcD0wKSxBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpfHwodGhpcy5pdGVtcz17bGVuZ3RoOk1hdGgubWluKHQsMWU1KX0pLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5faXRlbXNDaGFuZ2VkKHtwYXRoOiJpdGVtcyJ9KSksdGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKHRoaXMuaXRlbXMubGVuZ3RoLHQpfHwwLHRoaXMuX3Njcm9sbFRvcD09PTAmJih0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fc2Nyb2xsVG9JbmRleChNYXRoLm1pbih0LTEscikpKSx0aGlzLl9pdGVyYXRlSXRlbXMoaT0+e2xldCBvPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07aWYoby5pbmRleD09PXImJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1NYXRoLnJvdW5kKG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW4pKSxvLmluZGV4PT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5faXRlbXNGb2N1c2FibGUmJnRoaXMuJC5pdGVtcy5jb250YWlucyh0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkpe2xldCBhPUFycmF5LmZyb20odGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50RWxlbWVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLl9pdGVtc0ZvY3VzYWJsZSk7by5jaGlsZHJlblthXS5mb2N1cygpfX0pKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3VwZGF0ZSgpKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fcG9zaXRpb25JdGVtcygpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7bGV0IHQ7aXNOYU4odGhpcy5fcGh5c2ljYWxUb3ApJiYodD0hMCx0aGlzLl9waHlzaWNhbFRvcD0wKTtsZXQgcj10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMobj0+e3RoaXMuX3BoeXNpY2FsSXRlbXNbbl0uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7cn1weClgLHIrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbl19KSx0JiZ0aGlzLl9zY3JvbGxUb0luZGV4KDApfV9pbmNyZWFzZVBvb2xJZk5lZWRlZCh0KXt0PT09MCYmdGhpcy5fc2Nyb2xsaW5nVG9JbmRleHx8IXRoaXMuX2NhblBvcHVsYXRlKCl8fCF0aGlzLl9lZmZlY3RpdmVTaXplfHwodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkP3RoaXMuX29wdFBoeXNpY2FsU2l6ZSE9PTEvMCYmKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLE5pLCgpPT57dGhpcy5fdXBkYXRlTWV0cmljcygpO2xldCByPXRoaXMuX29wdFBoeXNpY2FsU2l6ZS10aGlzLl9waHlzaWNhbFNpemUsbj1NYXRoLmNlaWwoci90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpO3RoaXMuX3BoeXNpY2FsQ291bnQrbj50aGlzLl9lZmZlY3RpdmVTaXplJiYobj1NYXRoLm1heCgwLHRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fcGh5c2ljYWxDb3VudCkpLHRoaXMuX3BoeXNpY2FsU2l6ZSYmbj4wJiZ0aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJihzdXBlci5faW5jcmVhc2VQb29sSWZOZWVkZWQobiksdGhpcy5fX3Jlb3JkZXJDaGlsZE5vZGVzKCkpfSkpOih0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWQ9ITAsc3VwZXIuX2luY3JlYXNlUG9vbElmTmVlZGVkKDI1KSkpfV9fcmVvcmRlckNoaWxkTm9kZXMoKXtsZXQgdD1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZE5vZGVzKTshIXQucmVkdWNlKChuLGksbyxhKT0+e2lmKG89PT0wfHxhW28tMV0uaW5kZXg9PT1pLmluZGV4LTEpcmV0dXJuIG59LCEwKXx8dC5zb3J0KChuLGkpPT5uLmluZGV4LWkuaW5kZXgpLmZvckVhY2gobj0+dGhpcy4kLml0ZW1zLmFwcGVuZENoaWxkKG4pKX1fY3JlYXRlUG9vbCh0KXtsZXQgcj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj10aGlzLl9jcmVhdGVTY3JvbGxlclJvd3ModCk7bi5mb3JFYWNoKG89PnIuYXBwZW5kQ2hpbGQobykpLHRoaXMuX2dldFJvd1RhcmdldCgpLmFwcGVuZENoaWxkKHIpO2xldCBpPXRoaXMucXVlcnlTZWxlY3RvcigiW3Nsb3RdIik7aWYoaSl7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInNsb3QiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsImZvby1iYXIiKSxpLnNldEF0dHJpYnV0ZSgic2xvdCIsbyl9cmV0dXJuIFRtKHRoaXMsKCk9PnRoaXMubm90aWZ5UmVzaXplKCkpLG59X2Fzc2lnbk1vZGVscyh0KXt0aGlzLl9pdGVyYXRlSXRlbXMoKHIsbik9PntsZXQgaT10aGlzLl9waHlzaWNhbEl0ZW1zW3JdO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiaGlkZGVuIixuPj10aGlzLl9lZmZlY3RpdmVTaXplLGkpLHRoaXMuX3VwZGF0ZVNjcm9sbGVySXRlbShpLG4rKHRoaXMuX3ZpZHhPZmZzZXR8fDApKX0sdCl9X3Njcm9sbEhhbmRsZXIoKXtsZXQgdD10aGlzLiQudGFibGUuc2Nyb2xsVG9wLXRoaXMuX3Njcm9sbFBvc2l0aW9uO3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9zY3JvbGxIYW5kbGVyKTtsZXQgcj10aGlzLl92aWR4T2Zmc2V0O3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT50aGlzLl9tYXhTY3JvbGxUb3ApJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZT90aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCk6dGhpcy5fdmlkeE9mZnNldD0wLHRoaXMuX3ZpZHhPZmZzZXQhPT1yJiZ0aGlzLl91cGRhdGUoKSx0aGlzLl9hZnRlclNjcm9sbCgpfV9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCl7aWYoTWF0aC5hYnModCk+MWU0KXtpZih0aGlzLl9ub1NjYWxlKXt0aGlzLl9ub1NjYWxlPSExO3JldHVybn1sZXQgcj10aGlzLiQudGFibGUuc2Nyb2xsVG9wLyh0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLG49cip0aGlzLl9lZmZlY3RpdmVTaXplO3RoaXMuX3ZpZHhPZmZzZXQ9TWF0aC5yb3VuZChuLXIqdGhpcy5fdmlydHVhbENvdW50KX1lbHNle2xldCByPXRoaXMuX3ZpZHhPZmZzZXR8fDAsbj0xZTMsaT0xMDA7dGhpcy5fc2Nyb2xsVG9wPT09MD8odGhpcy5fdmlkeE9mZnNldD0wLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KDApKTp0aGlzLmZpcnN0VmlzaWJsZUluZGV4PG4mJnRoaXMuX3ZpZHhPZmZzZXQ+MCYmKHRoaXMuX3ZpZHhPZmZzZXQtPU1hdGgubWluKHRoaXMuX3ZpZHhPZmZzZXQsaSksciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5maXJzdFZpc2libGVJbmRleCsoci10aGlzLl92aWR4T2Zmc2V0KSksdGhpcy5fbm9TY2FsZT0hMCk7bGV0IG89dGhpcy5fZWZmZWN0aXZlU2l6ZS10aGlzLl92aXJ0dWFsQ291bnQ7dGhpcy5fc2Nyb2xsVG9wPj10aGlzLl9tYXhTY3JvbGxUb3AmJnRoaXMuX21heFNjcm9sbFRvcD4wPyh0aGlzLl92aWR4T2Zmc2V0PW8sciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5fdmlydHVhbENvdW50KSk6dGhpcy5maXJzdFZpc2libGVJbmRleD50aGlzLl92aXJ0dWFsQ291bnQtbiYmdGhpcy5fdmlkeE9mZnNldDxvJiYodGhpcy5fdmlkeE9mZnNldCs9TWF0aC5taW4oby10aGlzLl92aWR4T2Zmc2V0LGkpLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgtKHRoaXMuX3ZpZHhPZmZzZXQtcikpLHRoaXMuX25vU2NhbGU9ITApfX1fYWNjZXNzSXJvbkxpc3RBUEkodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3NBc3luY0VuYWJsZWQ9ITE7bGV0IHI9dC5hcHBseSh0aGlzKTtyZXR1cm4gdGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3M9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3MsTmksKCk9PnRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSEwKSxyfV9kZWJvdW5jZVJlbmRlcih0LHIpe3N1cGVyLl9kZWJvdW5jZVJlbmRlcigoKT0+dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkodCkscil9X3dhcm5Qcml2YXRlQVBJQWNjZXNzKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkJiZjb25zb2xlLndhcm4oYEFjY2Vzc2luZyBwcml2YXRlIEFQSSAoJHt0fSkhYCl9X3JlbmRlcigpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZW5kZXIpfV9pdGVtc0NoYW5nZWQoKXt9Z2V0IF9maXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuZmlyc3RWaXNpYmxlSW5kZXgpfWdldCBfbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIubGFzdFZpc2libGVJbmRleCl9X3Njcm9sbFRvSW5kZXgodCl7dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuc2Nyb2xsVG9JbmRleCh0KSl9Z2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJmaXJzdFZpc2libGVJbmRleCIpLHN1cGVyLmZpcnN0VmlzaWJsZUluZGV4fXNldCBmaXJzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleD10fWdldCBsYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJsYXN0VmlzaWJsZUluZGV4Iiksc3VwZXIubGFzdFZpc2libGVJbmRleH1zZXQgbGFzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXg9dH11cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygidXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzIiksc3VwZXIudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1fcmVzaXplSGFuZGxlcigpe3N1cGVyLl9yZXNpemVIYW5kbGVyKCksY2koKX19O3ZhciBqY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfYTExeVVwZGF0ZUdyaWRTaXplKHNpemUsIF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfV9hMTF5R2V0SGVhZGVyUm93Q291bnQocil7cmV0dXJuIHIuZmlsdGVyKG49Pm4uc29tZShpPT5pLl9oZWFkZXJUZW1wbGF0ZXx8aS5oZWFkZXJSZW5kZXJlcnx8aS5wYXRofHxpLmhlYWRlcikpLmxlbmd0aH1fYTExeUdldEZvb3RlclJvd0NvdW50KHIpe3JldHVybiByLmZpbHRlcihuPT5uLnNvbWUoaT0+aS5faGVhZGVyVGVtcGxhdGV8fGkuaGVhZGVyUmVuZGVyZXIpKS5sZW5ndGh9X2ExMXlVcGRhdGVHcmlkU2l6ZShyLG4pe2lmKHI9PT12b2lkIDB8fG49PT12b2lkIDApcmV0dXJuO2xldCBpPW5bbi5sZW5ndGgtMV07dGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIscit0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQobikrdGhpcy5fYTExeUdldEZvb3RlclJvd0NvdW50KG4pKSx0aGlzLiQudGFibGUuc2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IixpJiZpLmxlbmd0aHx8MCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpfV9hMTF5VXBkYXRlSGVhZGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLG4rMSkpfV9hMTF5VXBkYXRlRm9vdGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmZvb3Rlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLHRoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSt0aGlzLnNpemUrbisxKSl9X2ExMXlVcGRhdGVSb3dSb3dpbmRleChyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixuK3RoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSsxKX1fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHIsbil7ci5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLEJvb2xlYW4obikpLEFycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT5pLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsQm9vbGVhbihuKSkpfV9hMTF5VXBkYXRlUm93TGV2ZWwocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1sZXZlbCIsbisxKX1fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQocixuKXtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+e3R5cGVvZiBuPT0iYm9vbGVhbiI/aS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG4pOmkuaGFzQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIikmJmkucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIil9KX1fYTExeVNldFJvd0RldGFpbHNDZWxsKHIsbil7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpIT09biYmaS5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLG4uaWQpfSl9X2ExMXlVcGRhdGVDZWxsQ29sc3BhbihyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLWNvbHNwYW4iLE51bWJlcihuKSl9X2ExMXlVcGRhdGVTb3J0ZXJzKCl7QXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoInZhYWRpbi1ncmlkLXNvcnRlciIpKS5mb3JFYWNoKHI9PntsZXQgbj1yLnBhcmVudE5vZGU7Zm9yKDtuJiZuLmxvY2FsTmFtZSE9PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiOyluPW4ucGFyZW50Tm9kZTtuJiZuLmFzc2lnbmVkU2xvdCYmbi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImFyaWEtc29ydCIse2FzYzoiYXNjZW5kaW5nIixkZXNjOiJkZXNjZW5kaW5nIn1bU3RyaW5nKHIuZGlyZWN0aW9uKV18fCJub25lIil9KX19O3ZhciBYY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmVJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjZWxsLWFjdGl2YXRlIix0aGlzLl9hY3RpdmF0ZUl0ZW0uYmluZCh0aGlzKSl9X2FjdGl2YXRlSXRlbShyKXtsZXQgbj1yLmRldGFpbC5tb2RlbCxpPW4/bi5pdGVtOm51bGw7aSYmKHRoaXMuYWN0aXZlSXRlbT10aGlzLl9pdGVtc0VxdWFsKHRoaXMuYWN0aXZlSXRlbSxpKT9udWxsOmkpfV9vbkNsaWNrKHIpe2lmKHIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW5bbi5pbmRleE9mKHRoaXMuJC50YWJsZSktM107aWYoIWl8fGkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik+LTEpcmV0dXJuO2xldCBvPWkuX2NvbnRlbnQsYT10aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudDshby5jb250YWlucyhhKSYmIXRoaXMuX2lzRm9jdXNhYmxlKHIudGFyZ2V0KSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKGkucGFyZW50RWxlbWVudCl9fSkpfV9pc0ZvY3VzYWJsZShyKXtyZXR1cm4gbGhyKHIpfX0sbGhyPWU9PntpZighZS5wYXJlbnROb2RlKXJldHVybiExO2xldCByPUFycmF5LmZyb20oZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0YWJpbmRleF0sIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIG9iamVjdCwgaWZyYW1lLCBsYWJlbCwgYVtocmVmXSwgYXJlYVtocmVmXSIpKS5maWx0ZXIobj0+bi5nZXRBdHRyaWJ1dGUoInBhcnQiKSE9PSJjZWxsIGJvZHktY2VsbCIpLmluZGV4T2YoZSkhPT0tMTtyZXR1cm4hZS5kaXNhYmxlZCYmcn07dmFyICRjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOkFycmF5fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2l0ZW1zQ2hhbmdlZChpdGVtcywgaXRlbXMuKiwgaXNBdHRhY2hlZCkiXX1faXRlbXNDaGFuZ2VkKHIsbixpKXtpZighIWkpe2lmKCFBcnJheS5pc0FycmF5KHIpKXtyPT1udWxsJiYodGhpcy5zaXplPTApLHRoaXMuZGF0YVByb3ZpZGVyPT09dGhpcy5fYXJyYXlEYXRhUHJvdmlkZXImJih0aGlzLmRhdGFQcm92aWRlcj12b2lkIDApO3JldHVybn10aGlzLnNpemU9ci5sZW5ndGgsdGhpcy5kYXRhUHJvdmlkZXI9dGhpcy5kYXRhUHJvdmlkZXJ8fHRoaXMuX2FycmF5RGF0YVByb3ZpZGVyLHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfX1fYXJyYXlEYXRhUHJvdmlkZXIocixuKXtsZXQgaT0oQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKT90aGlzLml0ZW1zOltdKS5zbGljZSgwKTt0aGlzLl9maWx0ZXJzJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX2ZpbHRlcnMsImZpbHRlcmluZyIsaSkmJihpPXRoaXMuX2ZpbHRlcihpKSksdGhpcy5zaXplPWkubGVuZ3RoLHIuc29ydE9yZGVycy5sZW5ndGgmJnRoaXMuX2NoZWNrUGF0aHModGhpcy5fc29ydGVycywic29ydGluZyIsaSkmJihpPWkuc29ydCh0aGlzLl9tdWx0aVNvcnQuYmluZCh0aGlzKSkpO2xldCBvPXIucGFnZSpyLnBhZ2VTaXplLGE9bytyLnBhZ2VTaXplLHM9aS5zbGljZShvLGEpO24ocyxpLmxlbmd0aCl9X2NoZWNrUGF0aHMocixuLGkpe2lmKCFpLmxlbmd0aClyZXR1cm4hMTtsZXQgbz0hMDtmb3IobGV0IGEgaW4gcil7bGV0IHM9clthXS5wYXRoO2lmKCFzfHxzLmluZGV4T2YoIi4iKT09PS0xKWNvbnRpbnVlO2xldCBsPXMucmVwbGFjZSgvXC5bXi5dKiQvLCIiKTtEYS5nZXQobCxpWzBdKT09PXZvaWQgMCYmKGNvbnNvbGUud2FybihgUGF0aCAiJHtzfSIgdXNlZCBmb3IgJHtufSBkb2VzIG5vdCBleGlzdCBpbiBhbGwgb2YgdGhlIGl0ZW1zLCAke259IGlzIGRpc2FibGVkLmApLG89ITEpfXJldHVybiBvfV9tdWx0aVNvcnQocixuKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAoaT0+aS5kaXJlY3Rpb249PT0iYXNjIj90aGlzLl9jb21wYXJlKERhLmdldChpLnBhdGgsciksRGEuZ2V0KGkucGF0aCxuKSk6aS5kaXJlY3Rpb249PT0iZGVzYyI/dGhpcy5fY29tcGFyZShEYS5nZXQoaS5wYXRoLG4pLERhLmdldChpLnBhdGgscikpOjApLnJlZHVjZSgoaSxvKT0+aXx8bywwKX1fbm9ybWFsaXplRW1wdHlWYWx1ZShyKXtyZXR1cm5bdm9pZCAwLG51bGxdLmluZGV4T2Yocik+PTA/IiI6aXNOYU4ocik/ci50b1N0cmluZygpOnJ9X2NvbXBhcmUocixuKXtyZXR1cm4gcj10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKHIpLG49dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShuKSxyPG4/LTE6cj5uPzE6MH1fZmlsdGVyKHIpe3JldHVybiByLmZpbHRlcihuPT50aGlzLl9maWx0ZXJzLmZpbHRlcihpPT57bGV0IG89dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShEYS5nZXQoaS5wYXRoLG4pKSxhPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoaS52YWx1ZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBvLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPT09LTF9KS5sZW5ndGg9PT0wKX19O3ZhciBLY2U9ZT0+Y2xhc3MgZXh0ZW5kcyB5aChlKXtyZWFkeSgpe3N1cGVyLnJlYWR5KCk7bGV0IHI9dGhpcy4kLnNjcm9sbGVyO0VtKHIsInRyYWNrIix0aGlzLl9vbkhlYWRlclRyYWNrLmJpbmQodGhpcykpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixuPT5yLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikmJm4ucHJldmVudERlZmF1bHQoKSksci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PSJyZXNpemUtaGFuZGxlIiYmbi5wcmV2ZW50RGVmYXVsdCgpKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PT0icmVzaXplLWhhbmRsZSImJm4ucHJldmVudERlZmF1bHQoKSl9X29uSGVhZGVyVHJhY2socil7bGV0IG49ci50YXJnZXQ7aWYobi5nZXRBdHRyaWJ1dGUoInBhcnQiKT09PSJyZXNpemUtaGFuZGxlIil7bGV0IG89bi5wYXJlbnRFbGVtZW50Ll9jb2x1bW47Zm9yKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpO28ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI7KW89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoby5fY2hpbGRDb2x1bW5zLDApLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gbC5fb3JkZXItYy5fb3JkZXJ9KS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIWwuaGlkZGVufSkucG9wKCk7bGV0IGE9QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImNlbGwiXScpKSxzPWEuZmlsdGVyKGw9PmwuX2NvbHVtbj09PW8pWzBdO2lmKHMub2Zmc2V0V2lkdGgpe2xldCBsPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHMpLGM9MTArcGFyc2VJbnQobC5wYWRkaW5nTGVmdCkrcGFyc2VJbnQobC5wYWRkaW5nUmlnaHQpK3BhcnNlSW50KGwuYm9yZGVyTGVmdFdpZHRoKStwYXJzZUludChsLmJvcmRlclJpZ2h0V2lkdGgpK3BhcnNlSW50KGwubWFyZ2luTGVmdCkrcGFyc2VJbnQobC5tYXJnaW5SaWdodCksdT1zLm9mZnNldFdpZHRoKyh0aGlzLl9faXNSVEw/cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXIuZGV0YWlsLng6ci5kZXRhaWwueC1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KTtvLndpZHRoPU1hdGgubWF4KGMsdSkrInB4IixvLmZsZXhHcm93PTB9YS5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwuX2NvbHVtbi5fb3JkZXItYy5fY29sdW1uLl9vcmRlcn0pLmZvckVhY2goZnVuY3Rpb24obCxjLHUpe2M8dS5pbmRleE9mKHMpJiYobC5fY29sdW1uLndpZHRoPWwub2Zmc2V0V2lkdGgrInB4IixsLl9jb2x1bW4uZmxleEdyb3c9MCl9KSxyLmRldGFpbC5zdGF0ZT09PSJlbmQiJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciLCExLHRoaXMuJC5zY3JvbGxlciksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlc2l6ZSIse2RldGFpbDp7cmVzaXplZENvbHVtbjpvfX0pKSksdGhpcy5fcmVzaXplSGFuZGxlcigpfX19O3ZhciBaY2U9Y2xhc3MgSmNle2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmdyaWQ9dCx0aGlzLnBhcmVudENhY2hlPXIsdGhpcy5wYXJlbnRJdGVtPW4sdGhpcy5pdGVtQ2FjaGVzPXt9LHRoaXMuaXRlbXM9e30sdGhpcy5lZmZlY3RpdmVTaXplPTAsdGhpcy5zaXplPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9e319aXNMb2FkaW5nKCl7cmV0dXJuIEJvb2xlYW4oT2JqZWN0LmtleXModGhpcy5wZW5kaW5nUmVxdWVzdHMpLmxlbmd0aHx8T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5maWx0ZXIodD0+dGhpcy5pdGVtQ2FjaGVzW3RdLmlzTG9hZGluZygpKVswXSl9Z2V0SXRlbUZvckluZGV4KHQpe2xldHtjYWNoZTpyLHNjYWxlZEluZGV4Om59PXRoaXMuZ2V0Q2FjaGVBbmRJbmRleCh0KTtyZXR1cm4gci5pdGVtc1tuXX11cGRhdGVTaXplKCl7dGhpcy5lZmZlY3RpdmVTaXplPSF0aGlzLnBhcmVudEl0ZW18fHRoaXMuZ3JpZC5faXNFeHBhbmRlZCh0aGlzLnBhcmVudEl0ZW0pP3RoaXMuc2l6ZStPYmplY3Qua2V5cyh0aGlzLml0ZW1DYWNoZXMpLnJlZHVjZSgodCxyKT0+e2xldCBuPXRoaXMuaXRlbUNhY2hlc1tyXTtyZXR1cm4gbi51cGRhdGVTaXplKCksdCtuLmVmZmVjdGl2ZVNpemV9LDApOjB9ZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh0KXtpZighdGhpcy5pdGVtQ2FjaGVzW3RdKXtsZXQgcj1uZXcgSmNlKHRoaXMuZ3JpZCx0aGlzLHRoaXMuaXRlbXNbdF0pO3RoaXMuaXRlbUNhY2hlc1t0XT1yLHRoaXMuZ3JpZC5fbG9hZFBhZ2UoMCxyKX19Z2V0Q2FjaGVBbmRJbmRleCh0KXtsZXQgcj10LG49T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89TnVtYmVyKG5baV0pLGE9dGhpcy5pdGVtQ2FjaGVzW29dO2lmKHI8PW8pcmV0dXJue2NhY2hlOnRoaXMsc2NhbGVkSW5kZXg6cn07aWYocjw9bythLmVmZmVjdGl2ZVNpemUpcmV0dXJuIGEuZ2V0Q2FjaGVBbmRJbmRleChyLW8tMSk7ci09YS5lZmZlY3RpdmVTaXplfXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OnJ9fX0sUWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57cGFnZVNpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjUwLG9ic2VydmVyOiJfcGFnZVNpemVDaGFuZ2VkIn0sZGF0YVByb3ZpZGVyOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhUHJvdmlkZXJDaGFuZ2VkIn0sbG9hZGluZzp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9jYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpjZSh0aGlzKX19LGl0ZW1JZFBhdGg6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGV4cGFuZGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NpemVDaGFuZ2VkKHNpemUpIiwiX2l0ZW1JZFBhdGhDaGFuZ2VkKGl0ZW1JZFBhdGgpIiwiX2V4cGFuZGVkSXRlbXNDaGFuZ2VkKGV4cGFuZGVkSXRlbXMuKikiXX1fc2l6ZUNoYW5nZWQocil7bGV0IG49ci10aGlzLl9jYWNoZS5zaXplO3RoaXMuX2NhY2hlLnNpemUrPW4sdGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSs9bix0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCl9X2dldEl0ZW0ocixuKXtpZihyPj10aGlzLl9lZmZlY3RpdmVTaXplKXJldHVybjtuLmluZGV4PXI7bGV0e2NhY2hlOmksc2NhbGVkSW5kZXg6b309dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxhPWkuaXRlbXNbb107YT8odGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMSxuKSx0aGlzLl91cGRhdGVJdGVtKG4sYSksdGhpcy5faXNFeHBhbmRlZChhKSYmaS5lbnN1cmVTdWJDYWNoZUZvclNjYWxlZEluZGV4KG8pKToodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMCxuKSx0aGlzLl9sb2FkUGFnZSh0aGlzLl9nZXRQYWdlRm9ySW5kZXgobyksaSkpfV9leHBhbmRlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7ci5pdGVtIT09dm9pZCAwJiYobj90aGlzLmV4cGFuZEl0ZW0oci5pdGVtKTp0aGlzLmNvbGxhcHNlSXRlbShyLml0ZW0pKX1nZXRJdGVtSWQocil7cmV0dXJuIHRoaXMuaXRlbUlkUGF0aD90aGlzLmdldCh0aGlzLml0ZW1JZFBhdGgscik6cn1faXNFeHBhbmRlZChyKXtyZXR1cm4gdGhpcy5fX2V4cGFuZGVkS2V5cy5oYXModGhpcy5nZXRJdGVtSWQocikpfV9leHBhbmRlZEl0ZW1zQ2hhbmdlZCgpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5fYXNzaWduTW9kZWxzKCl9X2l0ZW1JZFBhdGhDaGFuZ2VkKCl7dGhpcy5fX2NhY2hlRXhwYW5kZWRLZXlzKCl9X19jYWNoZUV4cGFuZGVkS2V5cygpe3RoaXMuZXhwYW5kZWRJdGVtcyYmKHRoaXMuX19leHBhbmRlZEtleXM9bmV3IFNldCx0aGlzLmV4cGFuZGVkSXRlbXMuZm9yRWFjaChyPT57dGhpcy5fX2V4cGFuZGVkS2V5cy5hZGQodGhpcy5nZXRJdGVtSWQocikpfSkpfWV4cGFuZEl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKXx8KHRoaXMuZXhwYW5kZWRJdGVtcz1bLi4udGhpcy5leHBhbmRlZEl0ZW1zLHJdKX1jb2xsYXBzZUl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKSYmKHRoaXMuZXhwYW5kZWRJdGVtcz10aGlzLmV4cGFuZGVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZ2V0SW5kZXhMZXZlbChyKXtsZXR7Y2FjaGU6bn09dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxpPTA7Zm9yKDtuLnBhcmVudENhY2hlOyluPW4ucGFyZW50Q2FjaGUsaSsrO3JldHVybiBpfV9jYW5Qb3B1bGF0ZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX2hhc0RhdGEmJnRoaXMuX2NvbHVtblRyZWUpfV9sb2FkUGFnZShyLG4pe2lmKCFuLnBlbmRpbmdSZXF1ZXN0c1tyXSYmdGhpcy5kYXRhUHJvdmlkZXIpe3RoaXMuX3NldExvYWRpbmcoITApLG4ucGVuZGluZ1JlcXVlc3RzW3JdPSEwO2xldCBpPXtwYWdlOnIscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxzb3J0T3JkZXJzOnRoaXMuX21hcFNvcnRlcnMoKSxmaWx0ZXJzOnRoaXMuX21hcEZpbHRlcnMoKSxwYXJlbnRJdGVtOm4ucGFyZW50SXRlbX07dGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5kYXRhUHJvdmlkZXIoaSwobyxhKT0+e2EhPT12b2lkIDA/bi5zaXplPWE6aS5wYXJlbnRJdGVtJiYobi5zaXplPW8ubGVuZ3RoKTtsZXQgcz1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikubWFwKGw9PmwuX2l0ZW0pO28uZm9yRWFjaCgobCxjKT0+e2xldCB1PXIqdGhpcy5wYWdlU2l6ZStjO24uaXRlbXNbdV09bCx0aGlzLl9pc0V4cGFuZGVkKGwpJiZzLmluZGV4T2YobCk+LTEmJm4uZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh1KX0pLHRoaXMuX2hhc0RhdGE9ITAsZGVsZXRlIG4ucGVuZGluZ1JlcXVlc3RzW3JdLHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEsbW8uYWZ0ZXIoMCksKCk9Pnt0aGlzLl9zZXRMb2FkaW5nKCExKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+IWwuaGlkZGVuKS5mb3JFYWNoKGw9Pnt0aGlzLl9jYWNoZS5nZXRJdGVtRm9ySW5kZXgobC5pbmRleCkmJnRoaXMuX2dldEl0ZW0obC5pbmRleCxsKX0pLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpfSksdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCl8fHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YS5mbHVzaCgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCl9KX19X2dldFBhZ2VGb3JJbmRleChyKXtyZXR1cm4gTWF0aC5mbG9vcihyL3RoaXMucGFnZVNpemUpfWNsZWFyQ2FjaGUoKXt0aGlzLl9jYWNoZT1uZXcgWmNlKHRoaXMpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PntBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2gobj0+e24uX2luc3RhbmNlJiZuLl9pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KCJpdGVtIix7fSwhMSl9KX0pLHRoaXMuX2NhY2hlLnNpemU9dGhpcy5zaXplfHwwLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9oYXNEYXRhPSExLHRoaXMuX2Fzc2lnbk1vZGVscygpLCghdGhpcy5fZWZmZWN0aXZlU2l6ZXx8IXRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZCkmJnRoaXMuX2xvYWRQYWdlKDAsdGhpcy5fY2FjaGUpfV9wYWdlU2l6ZUNoYW5nZWQocixuKXtuIT09dm9pZCAwJiZyIT09biYmdGhpcy5jbGVhckNhY2hlKCl9X2NoZWNrU2l6ZSgpe3RoaXMuc2l6ZT09PXZvaWQgMCYmdGhpcy5fZWZmZWN0aXZlU2l6ZT09PTAmJmNvbnNvbGUud2FybigiVGhlIDx2YWFkaW4tZ3JpZD4gbmVlZHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiBvcmRlciB0byBkaXNwbGF5IHJvd3MuIFNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRvIHRoZSBgc2l6ZWAgcHJvcGVydHksIG9yIHByb3ZpZGUgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBgZGF0YVByb3ZpZGVyYFx1MjAxOXMgYGNhbGxiYWNrYCBjYWxsLiIpfV9kYXRhUHJvdmlkZXJDaGFuZ2VkKHIsbil7biE9PXZvaWQgMCYmdGhpcy5jbGVhckNhY2hlKCksciYmdGhpcy5pdGVtcyYmdGhpcy5pdGVtcy5sZW5ndGgmJnRoaXMuX3Njcm9sbFRvSW5kZXgodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpLHRoaXMuX2RlYm91bmNlckNoZWNrU2l6ZT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDaGVja1NpemUsbW8uYWZ0ZXIoMmUzKSx0aGlzLl9jaGVja1NpemUuYmluZCh0aGlzKSksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfV9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKXt0aGlzLl9oYXNEYXRhfHx0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1faXRlbXNFcXVhbChyLG4pe3JldHVybiB0aGlzLmdldEl0ZW1JZChyKT09PXRoaXMuZ2V0SXRlbUlkKG4pfV9nZXRJdGVtSW5kZXhJbkFycmF5KHIsbil7bGV0IGk9LTE7cmV0dXJuIG4uZm9yRWFjaCgobyxhKT0+e3RoaXMuX2l0ZW1zRXF1YWwobyxyKSYmKGk9YSl9KSxpfXNjcm9sbFRvSW5kZXgocil7c3VwZXIuc2Nyb2xsVG9JbmRleChyKSwhaXNOYU4ocikmJih0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKXx8IXRoaXMuY2xpZW50SGVpZ2h0KSYmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleD1yKX1fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCl7aWYodGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4JiZ0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtsZXQgcj10aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg7ZGVsZXRlIHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCx0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCYmdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wuZmx1c2goKSx0aGlzLnNjcm9sbFRvSW5kZXgocil9fX07dmFyIHR1ZT1lPT5jbGFzcyBleHRlbmRzIGV7cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX2FkZE5vZGVPYnNlcnZlcigpfV9oYXNDb2x1bW5Hcm91cHMocil7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIilyZXR1cm4hMDtyZXR1cm4hMX1fZ2V0Q2hpbGRDb2x1bW5zKHIpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2RlcyhyKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KX1fZmxhdHRlbkNvbHVtbkdyb3VwcyhyKXtyZXR1cm4gci5tYXAobj0+bi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj90aGlzLl9nZXRDaGlsZENvbHVtbnMobik6W25dKS5yZWR1Y2UoKG4saSk9Pm4uY29uY2F0KGkpLFtdKX1fZ2V0Q29sdW1uVHJlZSgpe2xldCByPXZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcih0aGlzLl9pc0NvbHVtbkVsZW1lbnQpLG49W107Zm9yKGxldCBpPXI7bi5wdXNoKGkpLCEhdGhpcy5faGFzQ29sdW1uR3JvdXBzKGkpOylpPXRoaXMuX2ZsYXR0ZW5Db2x1bW5Hcm91cHMoaSk7cmV0dXJuIG59X3VwZGF0ZUNvbHVtblRyZWUoKXtsZXQgcj10aGlzLl9nZXRDb2x1bW5UcmVlKCk7dGhpcy5fYXJyYXlFcXVhbHMocix0aGlzLl9jb2x1bW5UcmVlKXx8KHRoaXMuX2NvbHVtblRyZWU9cil9X2FkZE5vZGVPYnNlcnZlcigpe3RoaXMuX29ic2VydmVyPW5ldyB2aCh0aGlzLHI9PntsZXQgbj1yLmFkZGVkTm9kZXMuZmlsdGVyKG89Pm8ubG9jYWxOYW1lPT09InRlbXBsYXRlIiYmby5jbGFzc0xpc3QuY29udGFpbnMoInJvdy1kZXRhaWxzIikpWzBdO24mJnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSE9PW4mJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGU9bik7bGV0IGk9bz0+by5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KS5sZW5ndGg+MDtpZihpKHIuYWRkZWROb2Rlcyl8fGkoci5yZW1vdmVkTm9kZXMpKXtsZXQgbz1yLnJlbW92ZWROb2Rlcy5mbGF0TWFwKHM9PnMuX2FsbENlbGxzKSxhPXM9Pm8uZmlsdGVyKGw9PmwuX2NvbnRlbnQuY29udGFpbnMocykpLmxlbmd0aDt0aGlzLl9fcmVtb3ZlU29ydGVycyh0aGlzLl9zb3J0ZXJzLmZpbHRlcihhKSksdGhpcy5fX3JlbW92ZUZpbHRlcnModGhpcy5fZmlsdGVycy5maWx0ZXIoYSkpLHRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKX10aGlzLl9kZWJvdW5jZXJDaGVja0ltcG9ydHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzLG1vLmFmdGVyKDJlMyksdGhpcy5fY2hlY2tJbXBvcnRzLmJpbmQodGhpcykpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfSl9X2FycmF5RXF1YWxzKHIsbil7aWYoIXJ8fCFufHxyLmxlbmd0aCE9bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTAsbz1yLmxlbmd0aDtpPG87aSsrKWlmKHJbaV1pbnN0YW5jZW9mIEFycmF5JiZuW2ldaW5zdGFuY2VvZiBBcnJheSl7aWYoIXRoaXMuX2FycmF5RXF1YWxzKHJbaV0sbltpXSkpcmV0dXJuITF9ZWxzZSBpZihyW2ldIT1uW2ldKXJldHVybiExO3JldHVybiEwfV9jaGVja0ltcG9ydHMoKXtbInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIsInZhYWRpbi1ncmlkLWZpbHRlciIsInZhYWRpbi1ncmlkLWZpbHRlci1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC10cmVlLXRvZ2dsZSIsInZhYWRpbi1ncmlkLXNlbGVjdGlvbi1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0LWNvbHVtbiIsInZhYWRpbi1ncmlkLXNvcnRlciJdLmZvckVhY2gocj0+e2xldCBuPXRoaXMucXVlcnlTZWxlY3RvcihyKTtuJiYhKG4gaW5zdGFuY2VvZiBtdCkmJmNvbnNvbGUud2FybihgTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIDwke3J9PiBlbGVtZW50LmApfSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpe0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRyIikpLmZvckVhY2gocj0+dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpKX1fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpe0FycmF5LmZyb20oci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSknKSkuc29ydCgobixpKT0+bi5fY29sdW1uLl9vcmRlci1pLl9jb2x1bW4uX29yZGVyKS5mb3JFYWNoKChuLGksbyk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0LWNvbHVtbiIsaT09PTAsbiksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWNvbHVtbiIsaT09PW8ubGVuZ3RoLTEsbil9KX1faXNDb2x1bW5FbGVtZW50KHIpe3JldHVybiByLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJi9cYmNvbHVtblxiLy50ZXN0KHIubG9jYWxOYW1lKX19O3ZhciBldWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle2dldEV2ZW50Q29udGV4dChyKXtsZXQgbj17fSxpPXIuY29tcG9zZWRQYXRoKCksbz1pW2kuaW5kZXhPZih0aGlzLiQudGFibGUpLTNdO3JldHVybiBvJiYobi5zZWN0aW9uPVsiYm9keSIsImhlYWRlciIsImZvb3RlciIsImRldGFpbHMiXS5maWx0ZXIoYT0+by5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKGEpPi0xKVswXSxvLl9jb2x1bW4mJihuLmNvbHVtbj1vLl9jb2x1bW4pLChuLnNlY3Rpb249PT0iYm9keSJ8fG4uc2VjdGlvbj09PSJkZXRhaWxzIikmJk9iamVjdC5hc3NpZ24obix0aGlzLl9fZ2V0Um93TW9kZWwoby5wYXJlbnRFbGVtZW50KSkpLG59fTt2YXIgcnVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2ZpbHRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmaWx0ZXItY2hhbmdlZCIsdGhpcy5fZmlsdGVyQ2hhbmdlZC5iaW5kKHRoaXMpKX1fZmlsdGVyQ2hhbmdlZChyKXtyLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX19hZGRGaWx0ZXIoci50YXJnZXQpLHRoaXMuX19hcHBseUZpbHRlcnMoKX1fX3JlbW92ZUZpbHRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9maWx0ZXJzPXRoaXMuX2ZpbHRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCkpfV9fYWRkRmlsdGVyKHIpe3RoaXMuX2ZpbHRlcnMuaW5kZXhPZihyKT09PS0xJiZ0aGlzLl9maWx0ZXJzLnB1c2gocil9X19hcHBseUZpbHRlcnMoKXt0aGlzLmRhdGFQcm92aWRlciYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLmNsZWFyQ2FjaGUoKX1fbWFwRmlsdGVycygpe3JldHVybiB0aGlzLl9maWx0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLHZhbHVlOnIudmFsdWV9KSl9fTt2YXIgVDA9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLXRlbXBsYXRpemVyIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGF0YUhvc3Q6T2JqZWN0LHRlbXBsYXRlOk9iamVjdCxfdGVtcGxhdGVJbnN0YW5jZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wYXJlbnRQYXRoVmFsdWVzOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX0sX2dyaWQ6T2JqZWN0fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZChfdGVtcGxhdGVJbnN0YW5jZXMuKiwgX3BhcmVudFBhdGhWYWx1ZXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5faW5zdGFuY2VQcm9wcz17ZGV0YWlsc09wZW5lZDohMCxpbmRleDohMCxpdGVtOiEwLHNlbGVjdGVkOiEwLGV4cGFuZGVkOiEwLGxldmVsOiEwfX1jcmVhdGVJbnN0YW5jZSgpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7bGV0IHQ9bmV3IHRoaXMuX1RlbXBsYXRlQ2xhc3Moe30pO3JldHVybiB0aGlzLmFkZEluc3RhbmNlKHQpLHR9YWRkSW5zdGFuY2UodCl7dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuaW5kZXhPZih0KT09PS0xJiYodGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMucHVzaCh0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMubm90aWZ5UGF0aCgiX3RlbXBsYXRlSW5zdGFuY2VzLioiLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzKSkpfXJlbW92ZUluc3RhbmNlKHQpe2xldCByPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YodCk7dGhpcy5zcGxpY2UoIl90ZW1wbGF0ZUluc3RhbmNlcyIsciwxKX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXt0aGlzLl9UZW1wbGF0ZUNsYXNzfHwodGhpcy5fVGVtcGxhdGVDbGFzcz10Yyh0aGlzLnRlbXBsYXRlLHRoaXMse2luc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxwYXJlbnRNb2RlbDohMCxmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24odCxyKXt0aGlzLl9mb3J3YXJkUGFyZW50UHJvcCh0LHIpLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzJiZ0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQscixuKXtpZihyPT09ImluZGV4Inx8cj09PSJpdGVtIilyZXR1cm47bGV0IGk9YF9fJHtyfV9fYDtpZih0W2ldPT09bilyZXR1cm47dFtpXT1uO2xldCBvPUFycmF5LmZyb20odGhpcy5fZ3JpZC4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+dGhpcy5fZ3JpZC5faXRlbXNFcXVhbChsLl9pdGVtLHQuaXRlbSkpWzBdO28mJkFycmF5LmZyb20oby5jaGlsZHJlbikuZm9yRWFjaChsPT57bC5faW5zdGFuY2UmJihsLl9pbnN0YW5jZVtpXT1uLGwuX2luc3RhbmNlLm5vdGlmeVBhdGgocixuKSl9KTtsZXQgYT0iaXRlbS4iO2lmKEFycmF5LmlzQXJyYXkodGhpcy5fZ3JpZC5pdGVtcykmJnIuaW5kZXhPZihhKT09PTApe2xldCBsPXRoaXMuX2dyaWQuaXRlbXMuaW5kZXhPZih0Lml0ZW0pLGM9ci5zbGljZShhLmxlbmd0aCk7dGhpcy5fZ3JpZC5ub3RpZnlQYXRoKGBpdGVtcy4ke2x9LiR7Y31gLG4pfWxldCBzPWBfJHtyfUluc3RhbmNlQ2hhbmdlZENhbGxiYWNrYDt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkW3NdJiZ0aGlzLl9ncmlkW3NdKHQsbil9fSkpfV9mb3J3YXJkUGFyZW50UHJvcCh0LHIpe3RoaXMuX3BhcmVudFBhdGhWYWx1ZXNbdF09cix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX1fdGVtcGxhdGVJbnN0YW5jZXNDaGFuZ2VkKHQpe2xldCByLG47aWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcyIpcj0wLG49dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RoO2Vsc2UgaWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIilyPXQudmFsdWUuaW5kZXgsbj10LnZhbHVlLmFkZGVkQ291bnQ7ZWxzZSByZXR1cm47T2JqZWN0LmtleXModGhpcy5fcGFyZW50UGF0aFZhbHVlc3x8e30pLmZvckVhY2goaT0+e2ZvcihsZXQgbz1yO288cituO28rKyl0aGlzLl90ZW1wbGF0ZUluc3RhbmNlc1tvXS5zZXQoaSx0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW2ldKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKFQwLmlzLFQwKTt2YXIgbnVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGV0YWlsc09wZW5lZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdCxyb3dEZXRhaWxzUmVuZGVyZXI6RnVuY3Rpb24sX2RldGFpbHNDZWxsczp7dHlwZTpBcnJheX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChkZXRhaWxzT3BlbmVkSXRlbXMuKiwgX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSIsIl9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlLCByb3dEZXRhaWxzUmVuZGVyZXIpIl19X3Jvd0RldGFpbHNUZW1wbGF0ZU9yUmVuZGVyZXJDaGFuZ2VkKHIsbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSBmb3Igcm93IGRldGFpbHMiKTtpZihyfHxuKXtpZihyJiYhci50ZW1wbGF0aXplcil7bGV0IGk9bmV3IFQwO2kuX2dyaWQ9dGhpcyxpLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3QsaS50ZW1wbGF0ZT1yLHIudGVtcGxhdGl6ZXI9aX10aGlzLl9jb2x1bW5UcmVlJiZBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChpPT57aS5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpfHwodGhpcy5fdXBkYXRlUm93KGksdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQoaSwhMSkpLGRlbGV0ZSBpLnF1ZXJ5U2VsZWN0b3IoIltwYXJ0fj1kZXRhaWxzLWNlbGxdIikuX2luc3RhbmNlfSksdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMubGVuZ3RoJiYoQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2godGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwsdGhpcyksdGhpcy5fdXBkYXRlKCkpfX1fZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChyKXtyLnBhdGg9PT0iZGV0YWlsc09wZW5lZEl0ZW1zLmxlbmd0aCJ8fCFyLnZhbHVlfHxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChuPT57dGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwobixuLl9pdGVtKSx0aGlzLl9hMTF5VXBkYXRlUm93RGV0YWlsc09wZW5lZChuLHRoaXMuX2lzRGV0YWlsc09wZW5lZChuLl9pdGVtKSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkZXRhaWxzLW9wZW5lZCIsdGhpcy5faXNEZXRhaWxzT3BlbmVkKG4uX2l0ZW0pLG4pfSl9X2NvbmZpZ3VyZURldGFpbHNDZWxsKHIpe3Iuc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBkZXRhaWxzLWNlbGwiKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsITAscil9X3RvZ2dsZURldGFpbHNDZWxsKHIsbil7bGV0IGk9ci5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImRldGFpbHMtY2VsbCJdJyk7aWYoIWkpcmV0dXJuO2xldCBvPSF0aGlzLl9pc0RldGFpbHNPcGVuZWQobiksYT0hIWkuaGlkZGVuIT09bzsoIWkuX2luc3RhbmNlJiYhaS5fcmVuZGVyZXJ8fGkuaGlkZGVuIT09bykmJihpLmhpZGRlbj1vLG8/ci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iKToodGhpcy5yb3dEZXRhaWxzUmVuZGVyZXI/KGkuX3JlbmRlcmVyPXRoaXMucm93RGV0YWlsc1JlbmRlcmVyLGkuX3JlbmRlcmVyLmNhbGwodGhpcyxpLl9jb250ZW50LHRoaXMse2luZGV4OnIuaW5kZXgsaXRlbTpufSkpOnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSYmIWkuX2luc3RhbmNlJiYoaS5faW5zdGFuY2U9dGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksaS5fY29udGVudC5pbm5lckhUTUw9IiIsaS5fY29udGVudC5hcHBlbmRDaGlsZChpLl9pbnN0YW5jZS5yb290KSx0aGlzLl91cGRhdGVJdGVtKHIsbikpLGNpKCksci5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke2kub2Zmc2V0SGVpZ2h0fXB4YCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSkpLGEmJih0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpKX1fdXBkYXRlRGV0YWlsc0NlbGxIZWlnaHRzKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXTpub3QoW2hpZGRlbl0pJykpLmZvckVhY2gocj0+e3IucGFyZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke3Iub2Zmc2V0SGVpZ2h0fXB4YCl9KX1faXNEZXRhaWxzT3BlbmVkKHIpe3JldHVybiB0aGlzLmRldGFpbHNPcGVuZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zKSE9PS0xfW9wZW5JdGVtRGV0YWlscyhyKXt0aGlzLl9pc0RldGFpbHNPcGVuZWQocil8fCh0aGlzLmRldGFpbHNPcGVuZWRJdGVtcz1bLi4udGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMscl0pfWNsb3NlSXRlbURldGFpbHMocil7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHIpJiYodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9dGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLm9wZW5JdGVtRGV0YWlscyhyLml0ZW0pOnRoaXMuY2xvc2VJdGVtRGV0YWlscyhyLml0ZW0pfX07dmFyIHpjdD17U0NST0xMSU5HOjUwMCxJR05PUkVfV0hFRUw6NTAwfSxpdWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfZnJvemVuQ2VsbHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfcm93V2l0aEZvY3VzZWRFbGVtZW50OkVsZW1lbnQsX2RlbHRhWUFjYzp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3VzZVN0aWNreTp7dHlwZTpCb29sZWFuLHZhbHVlOndpbmRvdy5DU1MmJndpbmRvdy5DU1Muc3VwcG9ydHMmJih3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpfHx3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsIi13ZWJraXQtc3RpY2t5IikpfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQoX3ZpZXdwb3J0SGVpZ2h0KSJdfXNldCBfc2Nyb2xsVG9wKHIpe3RoaXMuJC50YWJsZS5zY3JvbGxUb3A9cn1nZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLiQudGFibGUuc2Nyb2xsVG9wfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zY3JvbGxMaW5lSGVpZ2h0PXRoaXMuX2dldFNjcm9sbExpbmVIZWlnaHQoKX1fZ2V0U2Nyb2xsTGluZUhlaWdodCgpe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUuZm9udFNpemU9ImluaXRpYWwiLHIuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKTtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKS5mb250U2l6ZTtyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyKSxuP3dpbmRvdy5wYXJzZUludChuKTp2b2lkIDB9X3Njcm9sbFZpZXdwb3J0SGVpZ2h0VXBkYXRlZChyKXt0aGlzLl9zY3JvbGxQYWdlSGVpZ2h0PXItdGhpcy4kLmhlYWRlci5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5jbGllbnRIZWlnaHQtdGhpcy5fc2Nyb2xsTGluZUhlaWdodH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLm91dGVyc2Nyb2xsZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy4kLnRhYmxlLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuX29uV2hlZWwpLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57bGV0IG49ci5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuJC5pdGVtcyk7dGhpcy5fcm93V2l0aEZvY3VzZWRFbGVtZW50PXIuY29tcG9zZWRQYXRoKClbbi0xXX0pLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD12b2lkIDApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PnRoaXMuX19tb3VzZURvd249ITApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT57dGhpcy5fX21vdXNlRG93bj0hMSx0aGlzLl9fcGVuZGluZ1Jlb3JkZXImJih0aGlzLl9fcGVuZGluZ1Jlb3JkZXI9ITEsc2V0VGltZW91dCgoKT0+dGhpcy5fcmVvcmRlclJvd3MoKSx6Y3QuU0NST0xMSU5HKSl9KX1zY3JvbGxUb0luZGV4KHIpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHIpKX1fb25XaGVlbChyKXtpZihyLmN0cmxLZXl8fHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3Ioci50YXJnZXQsci5kZWx0YVgsci5kZWx0YVkpKXJldHVybjtsZXQgbj10aGlzLiQudGFibGUsaT1yLmRlbHRhWTtpZihyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/aSo9dGhpcy5fc2Nyb2xsTGluZUhlaWdodDpyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJihpKj10aGlzLl9zY3JvbGxQYWdlSGVpZ2h0KSx0aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lKXt0aGlzLl9kZWx0YVlBY2MrPWksci5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pKz10aGlzLl9kZWx0YVlBY2MsdGhpcy5fZGVsdGFZQWNjPTAsdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZT0hMCx0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldoZWVsQW5pbWF0aW9uRnJhbWUsTmksKCk9PnRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITEpO2xldCBvPU1hdGguYWJzKHIuZGVsdGFYKStNYXRoLmFicyhpKTt0aGlzLl9jYW5TY3JvbGwobixyLmRlbHRhWCxpKT8oci5wcmV2ZW50RGVmYXVsdCgpLG4uc2Nyb2xsVG9wKz1pLG4uc2Nyb2xsTGVmdCs9ci5kZWx0YVgsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITAsdGhpcy5faWdub3JlTmV3V2hlZWw9ITAsdGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWw9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWwsbW8uYWZ0ZXIoemN0LklHTk9SRV9XSEVFTCksKCk9PnRoaXMuX2lnbm9yZU5ld1doZWVsPSExKSk6dGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bSYmbzw9dGhpcy5fcHJldmlvdXNNb21lbnR1bXx8dGhpcy5faWdub3JlTmV3V2hlZWw/ci5wcmV2ZW50RGVmYXVsdCgpOm8+dGhpcy5fcHJldmlvdXNNb21lbnR1bSYmKHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITEpLHRoaXMuX3ByZXZpb3VzTW9tZW50dW09b31faGFzU2Nyb2xsZWRBbmNlc3RvcihyLG4saSl7aWYoci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IilyZXR1cm4hMTtpZih0aGlzLl9jYW5TY3JvbGwocixuLGkpJiZbImF1dG8iLCJzY3JvbGwiXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUocikub3ZlcmZsb3cpIT09LTEpcmV0dXJuITA7aWYociE9PXRoaXMmJnIucGFyZW50RWxlbWVudClyZXR1cm4gdGhpcy5faGFzU2Nyb2xsZWRBbmNlc3RvcihyLnBhcmVudEVsZW1lbnQsbixpKX1fY2FuU2Nyb2xsKHIsbixpKXtyZXR1cm4gaT4wJiZyLnNjcm9sbFRvcDxyLnNjcm9sbEhlaWdodC1yLm9mZnNldEhlaWdodHx8aTwwJiZyLnNjcm9sbFRvcD4wfHxuPjAmJnIuc2Nyb2xsTGVmdDxyLnNjcm9sbFdpZHRoLXIub2Zmc2V0V2lkdGh8fG48MCYmci5zY3JvbGxMZWZ0PjB9X3NjaGVkdWxlU2Nyb2xsaW5nKCl7dGhpcy5fc2Nyb2xsaW5nRnJhbWV8fCh0aGlzLl9zY3JvbGxpbmdGcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpKSksdGhpcy5fZGVib3VuY2VTY3JvbGxpbmc9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VTY3JvbGxpbmcsbW8uYWZ0ZXIoemN0LlNDUk9MTElORyksKCk9PntjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zY3JvbGxpbmdGcmFtZSksZGVsZXRlIHRoaXMuX3Njcm9sbGluZ0ZyYW1lLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuX3Jlb3JkZXJSb3dzKCl9KX1fYWZ0ZXJTY3JvbGwoKXt0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKSx0aGlzLmhhc0F0dHJpYnV0ZSgicmVvcmRlcmluZyIpfHx0aGlzLl9zY2hlZHVsZVNjcm9sbGluZygpLHRoaXMuX3VwZGF0ZU92ZXJmbG93KCl9X3VwZGF0ZU92ZXJmbG93KCl7bGV0IHI9IiIsbj10aGlzLiQudGFibGU7bi5zY3JvbGxUb3A8bi5zY3JvbGxIZWlnaHQtbi5jbGllbnRIZWlnaHQmJihyKz0iIGJvdHRvbSIpLG4uc2Nyb2xsVG9wPjAmJihyKz0iIHRvcCIpLG4uc2Nyb2xsTGVmdDxuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgmJihyKz0iIHJpZ2h0Iiksbi5zY3JvbGxMZWZ0PjAmJihyKz0iIGxlZnQiKSx0aGlzLl9kZWJvdW5jZU92ZXJmbG93PXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlT3ZlcmZsb3csTmksKCk9PntsZXQgaT1yLnRyaW0oKTtpLmxlbmd0aD4wJiZ0aGlzLmdldEF0dHJpYnV0ZSgib3ZlcmZsb3ciKSE9PWk/dGhpcy5zZXRBdHRyaWJ1dGUoIm92ZXJmbG93IixpKTppLmxlbmd0aD09MCYmdGhpcy5oYXNBdHRyaWJ1dGUoIm92ZXJmbG93IikmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJvdmVyZmxvdyIpfSl9X3Jlb3JkZXJSb3dzKCl7aWYodGhpcy5fX21vdXNlRG93bil7dGhpcy5fX3BlbmRpbmdSZW9yZGVyPSEwO3JldHVybn1sZXQgcj10aGlzLiQuaXRlbXMsbj1yLnF1ZXJ5U2VsZWN0b3JBbGwoInRyIik7aWYoIW4ubGVuZ3RoKXJldHVybjtsZXQgaT10aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fdmlkeE9mZnNldCxvPXRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudHx8QXJyYXkuZnJvbShuKS5maWx0ZXIobD0+IWwuaGlkZGVuKVswXTtpZighbylyZXR1cm47bGV0IGE9by5pbmRleC1pLHM9QXJyYXkuZnJvbShuKS5pbmRleE9mKG8pLWE7aWYocz4wKWZvcihsZXQgbD0wO2w8cztsKyspci5hcHBlbmRDaGlsZChuW2xdKTtlbHNlIGlmKHM8MClmb3IobGV0IGw9bi5sZW5ndGgrcztsPG4ubGVuZ3RoO2wrKylyLmluc2VydEJlZm9yZShuW2xdLG5bMF0pO2lmKHRoaXMuX3NhZmFyaSl7bGV0e3RyYW5zZm9ybTpsfT10aGlzLiQuaGVhZGVyLnN0eWxlO3RoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPSIiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPWwpfX1fZnJvemVuQ2VsbHNDaGFuZ2VkKCl7dGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cz1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDYWNoZUVsZW1lbnRzLGxpLCgpPT57QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl0nKSkuZm9yRWFjaChmdW5jdGlvbihyKXtyLnN0eWxlLnRyYW5zZm9ybT0iIn0pLHRoaXMuX2Zyb3plbkNlbGxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuJC50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJbZnJvemVuXSIpKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpfSksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfV91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpe3RoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wJiZ0aGlzLl9faXNSVEwmJih0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzPXtzY3JvbGxXaWR0aDp0aGlzLiQudGFibGUuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6dGhpcy4kLnRhYmxlLmNsaWVudFdpZHRofSl9X3VwZGF0ZUxhc3RGcm96ZW4oKXtpZighdGhpcy5fY29sdW1uVHJlZSlyZXR1cm47bGV0IHI9dGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5zbGljZSgwKTtyLnNvcnQoKGksbyk9PmkuX29yZGVyLW8uX29yZGVyKTtsZXQgbj1yLnJlZHVjZSgoaSxvLGEpPT4oby5fbGFzdEZyb3plbj0hMSxvLmZyb3plbiYmIW8uaGlkZGVuP2E6aSksdm9pZCAwKTtuIT09dm9pZCAwJiYocltuXS5fbGFzdEZyb3plbj0hMCl9X3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpe2xldCByPU1hdGgubWF4KDAsdGhpcy5fc2Nyb2xsTGVmdCksbj1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbFRvcCksaT0wLG89MCxhPTA7aWYodGhpcy5fdXNlU3RpY2t5fHwoaT1yLG89bixhPXRoaXMuJC50YWJsZS5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRUb3ApLHRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8pLHRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8rYSksdGhpcy4kLml0ZW1zLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSwwKSx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCl7bGV0IHM9dGhpcy5fX2lzUlRMP3RoaXMuX19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0aGlzLiQudGFibGUpK3RoaXMuX19zY3JvbGxlck1ldHJpY3MuY2xpZW50V2lkdGgtdGhpcy5fX3Njcm9sbGVyTWV0cmljcy5zY3JvbGxXaWR0aDp0aGlzLl9zY3JvbGxMZWZ0LGw9dGhpcy5fZ2V0VHJhbnNsYXRlKHMsMCk7Zm9yKGxldCBjPTA7Yzx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg7YysrKXRoaXMuX2Zyb3plbkNlbGxzW2NdLnN0eWxlLnRyYW5zZm9ybT1sfX1fZ2V0VHJhbnNsYXRlKHIsbil7cmV0dXJuYHRyYW5zbGF0ZSgke3J9cHgsICR7bn1weClgfX07dmFyIG91ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHNlbGVjdGVkSXRlbXMuKikiXX1faXNTZWxlY3RlZChyKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHIsdGhpcy5zZWxlY3RlZEl0ZW1zKT4tMX1zZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocil8fCh0aGlzLnNlbGVjdGVkSXRlbXM9Wy4uLnRoaXMuc2VsZWN0ZWRJdGVtcyxyXSl9ZGVzZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocikmJih0aGlzLnNlbGVjdGVkSXRlbXM9dGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X3RvZ2dsZUl0ZW0ocil7dGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuc2VsZWN0ZWRJdGVtcyk9PT0tMT90aGlzLnNlbGVjdEl0ZW0ocik6dGhpcy5kZXNlbGVjdEl0ZW0ocil9X3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHIpe3RoaXMuJC5pdGVtcy5jaGlsZHJlbi5sZW5ndGgmJihyLnBhdGg9PT0ic2VsZWN0ZWRJdGVtcyJ8fHIucGF0aD09PSJzZWxlY3RlZEl0ZW1zLnNwbGljZXMiKSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2gobj0+e3RoaXMuX3VwZGF0ZUl0ZW0obixuLl9pdGVtKX0pfV9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLnNlbGVjdEl0ZW0oci5pdGVtKTp0aGlzLmRlc2VsZWN0SXRlbShyLml0ZW0pfX07dmFyIGF1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211bHRpU29ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3ByZXZpb3VzU29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRlci1jaGFuZ2VkIix0aGlzLl9vblNvcnRlckNoYW5nZWQpfV9vblNvcnRlckNoYW5nZWQocil7bGV0IG49ci50YXJnZXQ7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fdXBkYXRlU29ydGVyKG4pLHRoaXMuX19hcHBseVNvcnRlcnMoKX1fX3JlbW92ZVNvcnRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9zb3J0ZXJzPXRoaXMuX3NvcnRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLm11bHRpU29ydCYmdGhpcy5fX3VwZGF0ZVNvcnRPcmRlcnMoKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCkpfV9fdXBkYXRlU29ydE9yZGVycygpe3RoaXMuX3NvcnRlcnMuZm9yRWFjaCgocixuKT0+ci5fb3JkZXI9dGhpcy5fc29ydGVycy5sZW5ndGg+MT9uOm51bGwsdGhpcyl9X191cGRhdGVTb3J0ZXIocil7aWYoISghci5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMuaW5kZXhPZihyKT09PS0xKSl7aWYoci5fb3JkZXI9bnVsbCx0aGlzLm11bHRpU29ydCl0aGlzLl9yZW1vdmVBcnJheUl0ZW0odGhpcy5fc29ydGVycyxyKSxyLmRpcmVjdGlvbiYmdGhpcy5fc29ydGVycy51bnNoaWZ0KHIpLHRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCk7ZWxzZSBpZihyLmRpcmVjdGlvbil7bGV0IG49dGhpcy5fc29ydGVycy5maWx0ZXIoaT0+aSE9cik7dGhpcy5fc29ydGVycz1bcl0sbi5mb3JFYWNoKGk9PntpLl9vcmRlcj1udWxsLGkuZGlyZWN0aW9uPW51bGx9KX19fV9fYXBwbHlTb3J0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2ExMXlVcGRhdGVTb3J0ZXJzKCksdGhpcy5fcHJldmlvdXNTb3J0ZXJzPXRoaXMuX21hcFNvcnRlcnMoKX1fbWFwU29ydGVycygpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLGRpcmVjdGlvbjpyLmRpcmVjdGlvbn0pKX1fcmVtb3ZlQXJyYXlJdGVtKHIsbil7bGV0IGk9ci5pbmRleE9mKG4pO2k+LTEmJnIuc3BsaWNlKGksMSl9fTt2YXIgc3VlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2VsbENsYXNzTmFtZUdlbmVyYXRvcjpGdW5jdGlvbn19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fY2VsbENsYXNzTmFtZUdlbmVyYXRvckNoYW5nZWQoY2VsbENsYXNzTmFtZUdlbmVyYXRvcikiXX1fX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKCl7dGhpcy5nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKCl9Z2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIocj0+IXIuaGlkZGVuKS5mb3JFYWNoKHI9PnRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXMocix0aGlzLl9fZ2V0Um93TW9kZWwocikpKX1fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyhyLG4pe0FycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT57aWYoaS5fX2dlbmVyYXRlZENsYXNzZXMmJmkuX19nZW5lcmF0ZWRDbGFzc2VzLmZvckVhY2gobz0+aS5jbGFzc0xpc3QucmVtb3ZlKG8pKSx0aGlzLmNlbGxDbGFzc05hbWVHZW5lcmF0b3Ipe2xldCBvPXRoaXMuY2VsbENsYXNzTmFtZUdlbmVyYXRvcihpLl9jb2x1bW4sbik7aS5fX2dlbmVyYXRlZENsYXNzZXM9byYmby5zcGxpdCgiICIpLmZpbHRlcihhPT5hLmxlbmd0aD4wKSxpLl9fZ2VuZXJhdGVkQ2xhc3NlcyYmaS5fX2dlbmVyYXRlZENsYXNzZXMuZm9yRWFjaChhPT5pLmNsYXNzTGlzdC5hZGQoYSkpfX0pfX07dmFyIFRQPXtCRVRXRUVOOiJiZXR3ZWVuIixPTl9UT1A6Im9uLXRvcCIsT05fVE9QX09SX0JFVFdFRU46Im9uLXRvcC1vci1iZXR3ZWVuIixPTl9HUklEOiJvbi1ncmlkIn0sQzA9e09OX1RPUDoib24tdG9wIixBQk9WRToiYWJvdmUiLEJFTE9XOiJiZWxvdyIsRU1QVFk6ImVtcHR5In0sbHVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZHJvcE1vZGU6U3RyaW5nLHJvd3NEcmFnZ2FibGU6Qm9vbGVhbixkcmFnRmlsdGVyOkZ1bmN0aW9uLGRyb3BGaWx0ZXI6RnVuY3Rpb24sX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkOnt2YWx1ZTo1MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHJvd3NEcmFnZ2FibGUsIGRyb3BNb2RlLCBkcmFnRmlsdGVyLCBkcm9wRmlsdGVyKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5fb25EcmFnT3Zlci5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIix0aGlzLl9vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsdGhpcy5fb25Ecm9wLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLHI9Pnt0aGlzLmRyb3BNb2RlJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCkpfSl9X29uRHJhZ1N0YXJ0KHIpe2lmKHRoaXMucm93c0RyYWdnYWJsZSl7bGV0IG49ci50YXJnZXQ7aWYobi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IiYmKG49bi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5wYXJlbnROb2RlKSxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpcmV0dXJuO2lmKHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnZ2luZy1yb3dzIiwhMCx0aGlzKSx0aGlzLl9zYWZhcmkpe2xldCBzPW4uc3R5bGUudHJhbnNmb3JtO24uc3R5bGUudG9wPS90cmFuc2xhdGVZXCgoLiopXCkvLmV4ZWMocylbMV0sbi5zdHlsZS50cmFuc2Zvcm09Im5vbmUiLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e24uc3R5bGUudG9wPSIiLG4uc3R5bGUudHJhbnNmb3JtPXN9KX1sZXQgaT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2lvcz9yLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2Uobik6ci5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4sci5jbGllbnRYLWkubGVmdCxyLmNsaWVudFktaS50b3ApO2xldCBvPVtuXTt0aGlzLl9pc1NlbGVjdGVkKG4uX2l0ZW0pJiYobz10aGlzLl9fZ2V0Vmlld3BvcnRSb3dzKCkuZmlsdGVyKHM9PnRoaXMuX2lzU2VsZWN0ZWQocy5faXRlbSkpLmZpbHRlcihzPT4hdGhpcy5kcmFnRmlsdGVyfHx0aGlzLmRyYWdGaWx0ZXIodGhpcy5fX2dldFJvd01vZGVsKHMpKSkpLHIuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQiLHRoaXMuX19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKG8pKSxuLnNldEF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IixvLmxlbmd0aD4xP28ubGVuZ3RoOiIiKSx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tX2dyaWQtZHJhZy1zdGFydC14IjpgJHtyLmNsaWVudFgtaS5sZWZ0KzIwfXB4YCwiLS1fZ3JpZC1kcmFnLXN0YXJ0LXkiOmAke3IuY2xpZW50WS1pLnRvcCsxMH1weGB9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6IiIsIi0tX2dyaWQtZHJhZy1zdGFydC15IjoiIn0pfSk7bGV0IGE9bmV3IEN1c3RvbUV2ZW50KCJncmlkLWRyYWdzdGFydCIse2RldGFpbDp7ZHJhZ2dlZEl0ZW1zOm8ubWFwKHM9PnMuX2l0ZW0pLHNldERyYWdEYXRhOihzLGwpPT5yLmRhdGFUcmFuc2Zlci5zZXREYXRhKHMsbCksc2V0RHJhZ2dlZEl0ZW1zQ291bnQ6cz0+bi5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIscyl9fSk7YS5vcmlnaW5hbEV2ZW50PXIsdGhpcy5kaXNwYXRjaEV2ZW50KGEpfX1fb25EcmFnRW5kKHIpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITEsdGhpcyksci5zdG9wUHJvcGFnYXRpb24oKTtsZXQgbj1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJhZ2VuZCIpO24ub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChuKX1fb25EcmFnTGVhdmUocil7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX1fb25EcmFnT3ZlcihyKXtpZih0aGlzLmRyb3BNb2RlKXtpZih0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwLHRoaXMuX2RyYWdPdmVySXRlbT12b2lkIDAsdGhpcy5fX2RuZEF1dG9TY3JvbGwoci5jbGllbnRZKSl7dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCk7cmV0dXJufWxldCBuPXIuY29tcG9zZWRQYXRoKCkuZmlsdGVyKGk9PmkubG9jYWxOYW1lPT09InRyIilbMF07aWYoIXRoaXMuX2VmZmVjdGl2ZVNpemV8fHRoaXMuZHJvcE1vZGU9PT1UUC5PTl9HUklEKXRoaXMuX2Ryb3BMb2NhdGlvbj1DMC5FTVBUWTtlbHNlIGlmKCFufHxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpe2lmKG4pcmV0dXJuO2lmKHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOfHx0aGlzLmRyb3BNb2RlPT09VFAuT05fVE9QX09SX0JFVFdFRU4pbj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PiFpLmhpZGRlbikucG9wKCksdGhpcy5fZHJvcExvY2F0aW9uPUMwLkJFTE9XO2Vsc2UgcmV0dXJufWVsc2V7bGV0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0aGlzLl9kcm9wTG9jYXRpb249QzAuT05fVE9QLHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOKXtsZXQgbz1yLmNsaWVudFktaS50b3A8aS5ib3R0b20tci5jbGllbnRZO3RoaXMuX2Ryb3BMb2NhdGlvbj1vP0MwLkFCT1ZFOkMwLkJFTE9XfWVsc2UgdGhpcy5kcm9wTW9kZT09PVRQLk9OX1RPUF9PUl9CRVRXRUVOJiYoci5jbGllbnRZLWkudG9wPGkuaGVpZ2h0LzM/dGhpcy5fZHJvcExvY2F0aW9uPUMwLkFCT1ZFOnIuY2xpZW50WS1pLnRvcD5pLmhlaWdodC8zKjImJih0aGlzLl9kcm9wTG9jYXRpb249QzAuQkVMT1cpKX1pZihuJiZuLmhhc0F0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIpKXt0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwO3JldHVybn1yLnN0b3BQcm9wYWdhdGlvbigpLHIucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcm9wTG9jYXRpb249PT1DMC5FTVBUWT90aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdvdmVyIiwhMCx0aGlzKTpuPyh0aGlzLl9kcmFnT3Zlckl0ZW09bi5faXRlbSxuLmdldEF0dHJpYnV0ZSgiZHJhZ292ZXIiKSE9PXRoaXMuX2Ryb3BMb2NhdGlvbiYmbi5zZXRBdHRyaWJ1dGUoImRyYWdvdmVyIix0aGlzLl9kcm9wTG9jYXRpb24pKTp0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX19X19kbmRBdXRvU2Nyb2xsKHIpe2lmKHRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nKXJldHVybiEwO2xldCBuPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLGk9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Asbz1uLXIrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQsYT1yLWkrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQscz0wO2lmKGE+MD9zPWEqMjpvPjAmJihzPS1vKjIpLHMpe2xldCBsPXRoaXMuJC50YWJsZS5zY3JvbGxUb3A7aWYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9cyxsIT09dGhpcy4kLnRhYmxlLnNjcm9sbFRvcClyZXR1cm4gdGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITAsc2V0VGltZW91dCgoKT0+dGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITEsMjApLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSwhMH19X19nZXRWaWV3cG9ydFJvd3MoKXtsZXQgcj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxuPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3JldHVybiBBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PntsZXQgbz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBvLmJvdHRvbT5yJiZvLnRvcDxufSl9X2NsZWFyRHJhZ1N0eWxlcygpe3RoaXMucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnIucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpKX1fb25Ecm9wKHIpe2lmKHRoaXMuZHJvcE1vZGUpe3Iuc3RvcFByb3BhZ2F0aW9uKCksci5wcmV2ZW50RGVmYXVsdCgpO2xldCBuPXIuZGF0YVRyYW5zZmVyLnR5cGVzJiZBcnJheS5mcm9tKHIuZGF0YVRyYW5zZmVyLnR5cGVzKS5tYXAobz0+KHt0eXBlOm8sZGF0YTpyLmRhdGFUcmFuc2Zlci5nZXREYXRhKG8pfSkpO3RoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO2xldCBpPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcm9wIix7YnViYmxlczpyLmJ1YmJsZXMsY2FuY2VsYWJsZTpyLmNhbmNlbGFibGUsZGV0YWlsOntkcm9wVGFyZ2V0SXRlbTp0aGlzLl9kcmFnT3Zlckl0ZW0sZHJvcExvY2F0aW9uOnRoaXMuX2Ryb3BMb2NhdGlvbixkcmFnRGF0YTpufX0pO2kub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChpKX19X19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKHIpe3JldHVybiByLm1hcChuPT5BcnJheS5mcm9tKG4uY2hpbGRyZW4pLmZpbHRlcihpPT4haS5oaWRkZW4mJmkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik9PT0tMSkuc29ydCgoaSxvKT0+aS5fY29sdW1uLl9vcmRlcj5vLl9jb2x1bW4uX29yZGVyPzE6LTEpLm1hcChpPT5pLl9jb250ZW50LnRleHRDb250ZW50LnRyaW0oKSkuZmlsdGVyKGk9PmkpLmpvaW4oIgkiKSkuam9pbihgCmApfV9kcmFnRHJvcEFjY2Vzc0NoYW5nZWQoKXt0aGlzLmZpbHRlckRyYWdBbmREcm9wKCl9ZmlsdGVyRHJhZ0FuZERyb3AoKXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbikuZm9yRWFjaChyPT57dGhpcy5fZmlsdGVyRHJhZ0FuZERyb3Aocix0aGlzLl9fZ2V0Um93TW9kZWwocikpfSl9X2ZpbHRlckRyYWdBbmREcm9wKHIsbil7bGV0IGk9IXRoaXMucm93c0RyYWdnYWJsZXx8dGhpcy5kcmFnRmlsdGVyJiYhdGhpcy5kcmFnRmlsdGVyKG4pLG89IXRoaXMuZHJvcE1vZGV8fHRoaXMuZHJvcEZpbHRlciYmIXRoaXMuZHJvcEZpbHRlcihuKTtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLm1hcChzPT5zLl9jb250ZW50KS5mb3JFYWNoKHM9PntpP3MucmVtb3ZlQXR0cmlidXRlKCJkcmFnZ2FibGUiKTpzLnNldEF0dHJpYnV0ZSgiZHJhZ2dhYmxlIiwhMCl9KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWctZGlzYWJsZWQiLGksciksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcm9wLWRpc2FibGVkIixvLHIpfX07dmFyIGN1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19oZWFkZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9pdGVtc0ZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX2Zvb3RlckZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX25hdmlnYXRpbmdJc0hpZGRlbjpCb29sZWFuLF9mb2N1c2VkSXRlbUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfZm9jdXNlZENvbHVtbk9yZGVyOk51bWJlcixpbnRlcmFjdGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMCxvYnNlcnZlcjoiX2ludGVyYWN0aW5nQ2hhbmdlZCJ9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksISh0aGlzLl9pb3N8fHRoaXMuX2FuZHJvaWQpJiYodGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX29uS2V5VXApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25Gb2N1c0luKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkZvY3VzT3V0KSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25DZWxsRm9jdXNJbi5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHRoaXMuX29uQ2VsbEZvY3VzT3V0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5faXNNb3VzZWRvd249ITB9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT50aGlzLl9pc01vdXNlZG93bj0hMSkpfV9mb2N1c2FibGVDaGFuZ2VkKHIsbil7biYmbi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxyJiZ0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHIpfV9pbnRlcmFjdGluZ0NoYW5nZWQoKXt0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHRoaXMuX2hlYWRlckZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9pdGVtc0ZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9mb290ZXJGb2N1c2FibGUpfV9vbktleURvd24ocil7bGV0IG49ci5rZXksaTtzd2l0Y2gobil7Y2FzZSJBcnJvd1VwIjpjYXNlIkFycm93RG93biI6Y2FzZSJBcnJvd0xlZnQiOmNhc2UiQXJyb3dSaWdodCI6Y2FzZSJQYWdlVXAiOmNhc2UiUGFnZURvd24iOmNhc2UiSG9tZSI6Y2FzZSJFbmQiOmk9Ik5hdmlnYXRpb24iO2JyZWFrO2Nhc2UiRW50ZXIiOmNhc2UiRXNjYXBlIjpjYXNlIkYyIjppPSJJbnRlcmFjdGlvbiI7YnJlYWs7Y2FzZSJUYWIiOmk9IlRhYiI7YnJlYWs7Y2FzZSIgIjppPSJTcGFjZSI7YnJlYWt9dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksdGhpcy5pbnRlcmFjdGluZyYmaSE9PSJJbnRlcmFjdGlvbiImJihpPXZvaWQgMCksaSYmdGhpc1tgX29uJHtpfUtleURvd25gXShyLG4pfV9lbnN1cmVTY3JvbGxlZFRvSW5kZXgocil7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT5pLmluZGV4PT09cilbMF18fHRoaXMuX3Njcm9sbFRvSW5kZXgocil9X29uTmF2aWdhdGlvbktleURvd24ocixuKXt0aGlzLl9zY3JvbGxIYW5kbGVyKCksci5wcmV2ZW50RGVmYXVsdCgpO2Z1bmN0aW9uIGkoQil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoQi5wYXJlbnROb2RlLmNoaWxkcmVuLEIpfWxldCBvPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXgtdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgtMSxhPTAscz0wO3N3aXRjaChuKXtjYXNlIkFycm93UmlnaHQiOmE9dGhpcy5fX2lzUlRMPy0xOjE7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOmE9dGhpcy5fX2lzUlRMPzE6LTE7YnJlYWs7Y2FzZSJIb21lIjphPS0xLzAsci5jdHJsS2V5JiYocz0tMS8wKTticmVhaztjYXNlIkVuZCI6YT0xLzAsci5jdHJsS2V5JiYocz0xLzApO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjpzPTE7YnJlYWs7Y2FzZSJBcnJvd1VwIjpzPS0xO2JyZWFrO2Nhc2UiUGFnZURvd24iOnM9bzticmVhaztjYXNlIlBhZ2VVcCI6cz0tbzticmVha31sZXQgbD1yLmNvbXBvc2VkUGF0aCgpWzBdLGM9aShsKSx1PXRoaXMuX2VsZW1lbnRNYXRjaGVzKGwsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSxoPWwucGFyZW50Tm9kZSxmPWgucGFyZW50Tm9kZSxwPShmPT09dGhpcy4kLml0ZW1zP3RoaXMuX2VmZmVjdGl2ZVNpemU6Zi5jaGlsZHJlbi5sZW5ndGgpLTEsZD1mPT09dGhpcy4kLml0ZW1zP3RoaXMuX2ZvY3VzZWRJdGVtSW5kZXghPT12b2lkIDA/dGhpcy5fZm9jdXNlZEl0ZW1JbmRleDpoLmluZGV4OmkoaCksZz1NYXRoLm1heCgwLE1hdGgubWluKGQrcyxwKSksXz0hMTtpZihmPT09dGhpcy4kLml0ZW1zKXtsZXQgQj1oLl9pdGVtLEk9dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KGcpO3U/Xz1zPT09MDpfPXM9PT0xJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoQil8fHM9PT0tMSYmZyE9PWQmJnRoaXMuX2lzRGV0YWlsc09wZW5lZChJKSxfIT09dSYmKHM9PT0xJiZffHxzPT09LTEmJiFfKSYmKGc9ZCl9aWYoZiE9PXRoaXMuJC5pdGVtcyl7aWYoZz5kKWZvcig7ZzxwJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZysrO2Vsc2UgaWYoZzxkKWZvcig7Zz4wJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZy0tfXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj09PXZvaWQgMCYmKHU/dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPTA6dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXRoaXMuX2dldENvbHVtbnMoZixkKS5maWx0ZXIoQj0+IUIuaGlkZGVuKVtjXS5fb3JkZXIpO2xldCB5PXRoaXMuX2dldENvbHVtbnMoZixnKS5maWx0ZXIoQj0+IUIuaGlkZGVuKSx4PXkubWFwKEI9PkIuX29yZGVyKS5zb3J0KChCLEkpPT5CLUkpLGI9eC5sZW5ndGgtMSxTPXguaW5kZXhPZih4LnNsaWNlKDApLnNvcnQoKEIsSSk9Pk1hdGguYWJzKEItdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyKS1NYXRoLmFicyhJLXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcikpWzBdKSxDPXM9PT0wJiZ1P1M6TWF0aC5tYXgoMCxNYXRoLm1pbihTK2EsYikpO0MhPT1TJiYodGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCksZj09PXRoaXMuJC5pdGVtcyYmdGhpcy5fZW5zdXJlU2Nyb2xsZWRUb0luZGV4KGcpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7bGV0IGs9eS5yZWR1Y2UoKEIsSSxMKT0+KEJbSS5fb3JkZXJdPUwsQikse30pW3hbQ11dLE89Zj09PXRoaXMuJC5pdGVtcz9BcnJheS5mcm9tKGYuY2hpbGRyZW4pLmZpbHRlcihCPT5CLmluZGV4PT09ZylbMF06Zi5jaGlsZHJlbltnXTtpZighTylyZXR1cm47bGV0IEQ9Xz9BcnJheS5mcm9tKE8uY2hpbGRyZW4pLmZpbHRlcihCPT50aGlzLl9lbGVtZW50TWF0Y2hlcyhCLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpWzBdOk8uY2hpbGRyZW5ba107aWYodGhpcy5fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKEQpLGY9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PWcpLGY9PT10aGlzLiQuaXRlbXMpe2xldCBCPUQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksST10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxMPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO0IuYm90dG9tPkk/KHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPUIuYm90dG9tLUksdGhpcy5fc2Nyb2xsSGFuZGxlcigpKTpCLnRvcDxMJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcC09TC1CLnRvcCx0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfUQuZm9jdXMoKX1fb25JbnRlcmFjdGlvbktleURvd24ocixuKXtsZXQgaT1yLmNvbXBvc2VkUGF0aCgpWzBdLG89aS5sb2NhbE5hbWU9PT0iaW5wdXQiJiYhL14oYnV0dG9ufGNoZWNrYm94fGNvbG9yfGZpbGV8aW1hZ2V8cmFkaW98cmFuZ2V8cmVzZXR8c3VibWl0KSQvaS50ZXN0KGkudHlwZSksYTtzd2l0Y2gobil7Y2FzZSJFbnRlciI6YT10aGlzLmludGVyYWN0aW5nPyFvOiEwO2JyZWFrO2Nhc2UiRXNjYXBlIjphPSExO2JyZWFrO2Nhc2UiRjIiOmE9IXRoaXMuaW50ZXJhY3Rpbmc7YnJlYWt9bGV0e2NlbGw6c309dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7aWYodGhpcy5pbnRlcmFjdGluZyE9PWEmJnMhPT1udWxsKWlmKGEpe2xldCBsPXMuX2NvbnRlbnQucXVlcnlTZWxlY3RvcigiW2ZvY3VzLXRhcmdldF0iKXx8cy5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtsJiYoci5wcmV2ZW50RGVmYXVsdCgpLGwuZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCxzLmZvY3VzKCksdGhpcy5fc2V0SW50ZXJhY3RpbmcoITEpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQocixuKXtsZXQgaT1bdGhpcy4kLnRhYmxlLHRoaXMuX2hlYWRlckZvY3VzYWJsZSx0aGlzLl9pdGVtc0ZvY3VzYWJsZSx0aGlzLl9mb290ZXJGb2N1c2FibGUsdGhpcy4kLmZvY3VzZXhpdF0sbz1pLmluZGV4T2Yocik7Zm9yKG8rPW47bz49MCYmbzw9aS5sZW5ndGgtMSYmKCFpW29dfHxpW29dLnBhcmVudE5vZGUuaGlkZGVuKTspbys9bjtyZXR1cm4gaVtvXX1fb25UYWJLZXlEb3duKHIpe2xldCBuPXRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQoci5jb21wb3NlZFBhdGgoKVswXSxyLnNoaWZ0S2V5Py0xOjEpO2lmKG49PT10aGlzLiQudGFibGUpdGhpcy4kLnRhYmxlLmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy4kLmZvY3VzZXhpdCl0aGlzLiQuZm9jdXNleGl0LmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy5faXRlbXNGb2N1c2FibGUpe2xldCBpPW4sbz10aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnROb2RlO2lmKHRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0aGlzLl9mb2N1c2VkSXRlbUluZGV4KSxvLmluZGV4IT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCl7bGV0IGE9QXJyYXkuZnJvbShvLmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKSxzPUFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+bC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpWzBdO3MmJihpPXMuY2hpbGRyZW5bYV0pfXIucHJldmVudERlZmF1bHQoKSxpLmZvY3VzKCl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksbi5mb2N1cygpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X29uU3BhY2VLZXlEb3duKHIpe3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdOyghbi5fY29udGVudHx8IW4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpJiZ0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWFjdGl2YXRlIix7ZGV0YWlsOnttb2RlbDp0aGlzLl9fZ2V0Um93TW9kZWwobi5wYXJlbnRFbGVtZW50KX19KSl9X29uS2V5VXAocil7aWYoIS9eKCB8U3BhY2VCYXIpJC8udGVzdChyLmtleSkpcmV0dXJuO3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO2lmKG4uX2NvbnRlbnQmJm4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpe2xldCBpPXRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIik7bi5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGljaygpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsaSx0aGlzKX19X29uRm9jdXNJbihyKXt0aGlzLl9pc01vdXNlZG93bnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO249PT10aGlzLiQudGFibGV8fG49PT10aGlzLiQuZm9jdXNleGl0Pyh0aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KG4sbj09PXRoaXMuJC50YWJsZT8xOi0xKS5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSk6dGhpcy5fZGV0ZWN0SW50ZXJhY3Rpbmcocil9X29uRm9jdXNPdXQocil7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSx0aGlzLl9kZXRlY3RJbnRlcmFjdGluZyhyKX1fb25DZWxsRm9jdXNJbihyKXtsZXR7c2VjdGlvbjpuLGNlbGw6aX09dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksbiYmaSYmKHRoaXMuX2FjdGl2ZVJvd0dyb3VwPW4sdGhpcy4kLmhlYWRlcj09PW4/dGhpcy5faGVhZGVyRm9jdXNhYmxlPWk6dGhpcy4kLml0ZW1zPT09bj90aGlzLl9pdGVtc0ZvY3VzYWJsZT1pOnRoaXMuJC5mb290ZXI9PT1uJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPWkpLGkuX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIse2J1YmJsZXM6ITF9KSksaS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1cyIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpLHRoaXMuX2RldGVjdEZvY3VzZWRJdGVtSW5kZXgocil9X29uQ2VsbEZvY3VzT3V0KHIpe3IuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpPT09MyYmci5jb21wb3NlZFBhdGgoKVswXS5fY29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1c291dCIse2J1YmJsZXM6ITF9KSl9X2RldGVjdEludGVyYWN0aW5nKHIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCkuc29tZShpPT5pLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTt0aGlzLl9zZXRJbnRlcmFjdGluZyhuKX1fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleChyKXtsZXR7c2VjdGlvbjpuLHJvdzppfT10aGlzLl9nZXRHcmlkRXZlbnRMb2NhdGlvbihyKTtuPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fZm9jdXNlZEl0ZW1JbmRleD1pLmluZGV4KX1fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldChyKXtpZighcilyZXR1cm47bGV0IG49dGhpcy5fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQociksaT10aGlzLmludGVyYWN0aW5nJiZuPT09dGhpcy5fYWN0aXZlUm93R3JvdXA7ci50YWJJbmRleD1pPy0xOjB9X3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHIsbil7ci5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIikmJnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpLG49PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW4mJih0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW49ITEsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKSl9X2dldENvbHVtbnMocixuKXtsZXQgaT10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xO3JldHVybiByPT09dGhpcy4kLmhlYWRlcj9pPW46cj09PXRoaXMuJC5mb290ZXImJihpPXRoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTEtbiksdGhpcy5fY29sdW1uVHJlZVtpXX1fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKXtpZih0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5faGVhZGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbilbMF0pLHRoaXMuJC5pdGVtcy5maXJzdEVsZW1lbnRDaGlsZCl7bGV0IHI9dGhpcy5faXRlcmF0ZUl0ZW1zKChuLGkpPT57aWYodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXg9PT1pKXJldHVybiB0aGlzLiQuaXRlbXMuY2hpbGRyZW5bbl19KTtyJiYodGhpcy5faXRlbXNGb2N1c2FibGU9QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5maWx0ZXIobj0+IW4uaGlkZGVuKVswXSl9dGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCYmKHRoaXMuX2Zvb3RlckZvY3VzYWJsZT1BcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pWzBdKX1fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKHIpe2lmKHIuaGFzQXR0cmlidXRlKCJmcm96ZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXMociwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKXJldHVybjtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ci5wYXJlbnROb2RlLG89QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpLGE9dGhpcy4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9YS5sZWZ0LGw9YS5yaWdodDtmb3IobGV0IGM9by0xO2M+PTA7Yy0tKXtsZXQgdT1pLmNoaWxkcmVuW2NdO2lmKCEodS5oYXNBdHRyaWJ1dGUoImhpZGRlbiIpfHx0aGlzLl9lbGVtZW50TWF0Y2hlcyh1LCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpJiZ1Lmhhc0F0dHJpYnV0ZSgiZnJvemVuIikpe3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDticmVha319Zm9yKGxldCBjPW8rMTtjPGkuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7bGV0IHU9aS5jaGlsZHJlbltjXTtpZighKHUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXModSwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKSYmdS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXtsPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDticmVha319bi5sZWZ0PHMmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChuLmxlZnQtcykpLG4ucmlnaHQ+bCYmKHRoaXMuJC50YWJsZS5zY3JvbGxMZWZ0Kz1NYXRoLnJvdW5kKG4ucmlnaHQtbCkpfV9lbGVtZW50TWF0Y2hlcyhyLG4pe3JldHVybiByLm1hdGNoZXM/ci5tYXRjaGVzKG4pOkFycmF5LmZyb20oci5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwobikpLmluZGV4T2YocikhPT0tMX1fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocil7bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW4uaW5kZXhPZih0aGlzLiQudGFibGUpLG89aT49MT9uW2ktMV06bnVsbCxhPWk+PTI/bltpLTJdOm51bGwscz1pPj0zP25baS0zXTpudWxsO3JldHVybntzZWN0aW9uOm8scm93OmEsY2VsbDpzfX1fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQocil7cmV0dXJuIHI9PT10aGlzLl9oZWFkZXJGb2N1c2FibGU/dGhpcy4kLmhlYWRlcjpyPT09dGhpcy5faXRlbXNGb2N1c2FibGU/dGhpcy4kLml0ZW1zOnI9PT10aGlzLl9mb290ZXJGb2N1c2FibGU/dGhpcy4kLmZvb3RlcjpudWxsfX07ZnVuY3Rpb24gdXVlKGUsdCxyKXtsZXQgbj0xO2UuZm9yRWFjaChpPT57biUxMD09PTAmJm4rKyxpLl9vcmRlcj1yK24qdCxuKyt9KX12YXIgaHVlPWU9PmNsYXNzIGV4dGVuZHMgeWgoZSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9vcmRlckJhc2VTY29wZTp7dHlwZTpOdW1iZXIsdmFsdWU6MWU3fX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl91cGRhdGVPcmRlcnMoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLEVtKHRoaXMsInRyYWNrIix0aGlzLl9vblRyYWNrRXZlbnQpLHRoaXMuX3Jlb3JkZXJHaG9zdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnQ9InJlb3JkZXItZ2hvc3QiXScpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZS5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSl9X29uQ29udGV4dE1lbnUocil7dGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKSYmci5wcmV2ZW50RGVmYXVsdCgpfV9vblRvdWNoU3RhcnQocil7dGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9vblRyYWNrU3RhcnQoe2RldGFpbDp7eDpyLnRvdWNoZXNbMF0uY2xpZW50WCx5OnIudG91Y2hlc1swXS5jbGllbnRZfX0pfSwxMDApfV9vblRvdWNoTW92ZShyKXt0aGlzLl9kcmFnZ2VkQ29sdW1uJiZyLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCl9X29uVG91Y2hFbmQoKXtjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0KSx0aGlzLl9vblRyYWNrRW5kKCl9X29uVHJhY2tFdmVudChyKXtpZihyLmRldGFpbC5zdGF0ZT09PSJzdGFydCIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uW24uaW5kZXhPZih0aGlzLiQuaGVhZGVyKS0yXTtpZighaXx8IWkuX2NvbnRlbnR8fGkuX2NvbnRlbnQuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHx0aGlzLiQuc2Nyb2xsZXIuaGFzQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciKSlyZXR1cm47dGhpcy5fdG91Y2hEZXZpY2V8fHRoaXMuX29uVHJhY2tTdGFydChyKX1lbHNlIHIuZGV0YWlsLnN0YXRlPT09InRyYWNrIj90aGlzLl9vblRyYWNrKHIpOnIuZGV0YWlsLnN0YXRlPT09ImVuZCImJnRoaXMuX29uVHJhY2tFbmQocil9X29uVHJhY2tTdGFydChyKXtpZighdGhpcy5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgmJnIuY29tcG9zZWRQYXRoKCk7aWYobiYmbi5maWx0ZXIobz0+by5oYXNBdHRyaWJ1dGUmJm8uaGFzQXR0cmlidXRlKCJkcmFnZ2FibGUiKSlbMF0pcmV0dXJuO2xldCBpPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighKCFpfHxpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImhlYWRlci1jZWxsIik9PT0tMSkpe2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCEwLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW49aS5fY29sdW1uO3RoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudD09PTE7KXRoaXMuX2RyYWdnZWRDb2x1bW49dGhpcy5fZHJhZ2dlZENvbHVtbi5wYXJlbnRFbGVtZW50O3RoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCJhbGxvd2VkIiksdGhpcy5fZHJhZ2dlZENvbHVtbi5fcmVvcmRlclN0YXR1cz0iZHJhZ2dpbmciLHRoaXMuX3VwZGF0ZUdob3N0KGkpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHIuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/ci5kZXRhaWwueS01MDpyLmRldGFpbC55KSx0aGlzLl9hdXRvU2Nyb2xsZXIoKX19X29uVHJhY2socil7aWYoIXRoaXMuX2RyYWdnZWRDb2x1bW4pcmV0dXJuO2xldCBuPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighbilyZXR1cm47bGV0IGk9dGhpcy5fZ2V0VGFyZ2V0Q29sdW1uKG4sdGhpcy5fZHJhZ2dlZENvbHVtbik7dGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24oaSxyLmRldGFpbC54KSYmdGhpcy5fc3dhcENvbHVtbk9yZGVycyh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpLHRoaXMuX3VwZGF0ZUdob3N0UG9zaXRpb24oci5kZXRhaWwueCx0aGlzLl90b3VjaERldmljZT9yLmRldGFpbC55LTUwOnIuZGV0YWlsLnkpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD1yLmRldGFpbC54fV9vblRyYWNrRW5kKCl7IXRoaXMuX2RyYWdnZWRDb2x1bW58fCh0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCExLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2RyYWdnZWRDb2x1bW49bnVsbCx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9bnVsbCx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2x1bW4tcmVvcmRlciIse2RldGFpbDp7Y29sdW1uczp0aGlzLl9nZXRDb2x1bW5zSW5PcmRlcigpfX0pKSl9X2dldENvbHVtbnNJbk9yZGVyKCl7cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUuc2xpY2UoMCkucG9wKCkuZmlsdGVyKHI9PiFyLmhpZGRlbikuc29ydCgocixuKT0+ci5fb3JkZXItbi5fb3JkZXIpfV9jZWxsRnJvbVBvaW50KHIsbil7cj1yfHwwLG49bnx8MCx0aGlzLl9kcmFnZ2VkQ29sdW1ufHx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCEwLHRoaXMuJC5zY3JvbGxlcik7bGV0IGk9dGhpcy5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQocixuKTtpZih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCExLHRoaXMuJC5zY3JvbGxlciksaSYmaS5fY29sdW1uKXJldHVybiBpfV91cGRhdGVHaG9zdFBvc2l0aW9uKHIsbil7bGV0IGk9dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci1pLndpZHRoLzIsYT1uLWkuaGVpZ2h0LzIscz1wYXJzZUludCh0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnR8fDApLGw9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll90b3B8fDApO3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdD1zLShpLmxlZnQtbyksdGhpcy5fcmVvcmRlckdob3N0Ll90b3A9bC0oaS50b3AtYSksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fXB4LCAke3RoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfXB4KWB9X3VwZGF0ZUdob3N0KHIpe2xldCBuPXRoaXMuX3Jlb3JkZXJHaG9zdDtuLnRleHRDb250ZW50PXIuX2NvbnRlbnQuaW5uZXJUZXh0O2xldCBpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpO3JldHVyblsiYm94U2l6aW5nIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwiYmFja2dyb3VuZCIsImFsaWduSXRlbXMiLCJwYWRkaW5nIiwiYm9yZGVyIiwiZmxleC1kaXJlY3Rpb24iLCJvdmVyZmxvdyJdLmZvckVhY2gobz0+bi5zdHlsZVtvXT1pW29dKSxufV91cGRhdGVPcmRlcnMocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHwoclswXS5mb3JFYWNoKGk9PmkuX29yZGVyPTApLHV1ZShyWzBdLHRoaXMuX29yZGVyQmFzZVNjb3BlLDApKX1fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHIsbil7QXJyYXkuZnJvbShyLnBhcmVudE5vZGUuY2hpbGRyZW4pLmZpbHRlcihpPT4vY29sdW1uLy50ZXN0KGkubG9jYWxOYW1lKSYmdGhpcy5faXNTd2FwQWxsb3dlZChpLHIpKS5mb3JFYWNoKGk9PmkuX3Jlb3JkZXJTdGF0dXM9bil9X2F1dG9TY3JvbGxlcigpe2lmKHRoaXMuX2xhc3REcmFnQ2xpZW50WCl7bGV0IHI9dGhpcy5fbGFzdERyYWdDbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrNTAsbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwO3I+MD90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9ci8xMDpuPjAmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09bi8xMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX1faXNTd2FwQWxsb3dlZChyLG4pe2lmKHImJm4pe2xldCBpPXIhPT1uLG89ci5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50LGE9ci5mcm96ZW49PT1uLmZyb3plbjtyZXR1cm4gaSYmbyYmYX19X2lzU3dhcHBhYmxlQnlQb3NpdGlvbihyLG4pe2xldCBpPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpub3QoW2hpZGRlbl0pIFtwYXJ0fj0iY2VsbCJdJykpLmZpbHRlcihzPT5yLmNvbnRhaW5zKHMuX2NvbHVtbikpWzBdLG89dGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yKCJ0cjpub3QoW2hpZGRlbl0pIFtyZW9yZGVyLXN0YXR1cz1kcmFnZ2luZ10iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGEubGVmdD5vLmxlZnQ/bj5hLnJpZ2h0LW8ud2lkdGg6bjxhLmxlZnQrby53aWR0aH1fc3dhcENvbHVtbk9yZGVycyhyLG4pe2xldCBpPXIuX29yZGVyO3IuX29yZGVyPW4uX29yZGVyLG4uX29yZGVyPWksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpfV9nZXRUYXJnZXRDb2x1bW4ocixuKXtpZihyJiZuKXtsZXQgaT1yLl9jb2x1bW47Zm9yKDtpLnBhcmVudEVsZW1lbnQhPT1uLnBhcmVudEVsZW1lbnQmJmkhPT10aGlzOylpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gaS5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50P2k6ci5fY29sdW1ufX19O3ZhciBjaHI9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntyZXNpemFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIpcmV0dXJuO2xldCByPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gciYmci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIiYmci5yZXNpemFibGV8fCExfX0sX2hlYWRlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2Zvb3RlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sZnJvemVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGRlbjp7dHlwZTpCb29sZWFufSxoZWFkZXI6e3R5cGU6U3RyaW5nfSx0ZXh0QWxpZ246e3R5cGU6U3RyaW5nfSxfbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXI6TnVtYmVyLF9yZW9yZGVyU3RhdHVzOkJvb2xlYW4sX2VtcHR5Q2VsbHM6QXJyYXksX2hlYWRlckNlbGw6T2JqZWN0LF9mb290ZXJDZWxsOk9iamVjdCxfZ3JpZDpPYmplY3QsaGVhZGVyUmVuZGVyZXI6RnVuY3Rpb24sZm9vdGVyUmVuZGVyZXI6RnVuY3Rpb259fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfd2lkdGhDaGFuZ2VkKHdpZHRoLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9mcm96ZW5DaGFuZ2VkKGZyb3plbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZmxleEdyb3dDaGFuZ2VkKGZsZXhHcm93LCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9wYXRoT3JIZWFkZXJDaGFuZ2VkKHBhdGgsIGhlYWRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKiwgcmVuZGVyZXIsIGhlYWRlclJlbmRlcmVyLCBfYm9keVRlbXBsYXRlLCBfaGVhZGVyVGVtcGxhdGUpIiwiX3RleHRBbGlnbkNoYW5nZWQodGV4dEFsaWduLCBfY2VsbHMuKiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsKSIsIl9vcmRlckNoYW5nZWQoX29yZGVyLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9sYXN0RnJvemVuQ2hhbmdlZChfbGFzdEZyb3plbikiLCJfc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcihfYm9keVRlbXBsYXRlLCByZW5kZXJlciwgX2NlbGxzLCBfY2VsbHMuKikiLCJfc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKF9oZWFkZXJUZW1wbGF0ZSwgaGVhZGVyUmVuZGVyZXIsIF9oZWFkZXJDZWxsKSIsIl9zZXRGb290ZXJUZW1wbGF0ZU9yUmVuZGVyZXIoX2Zvb3RlclRlbXBsYXRlLCBmb290ZXJSZW5kZXJlciwgX2Zvb3RlckNlbGwpIiwiX3Jlc2l6YWJsZUNoYW5nZWQocmVzaXphYmxlLCBfaGVhZGVyQ2VsbCkiLCJfcmVvcmRlclN0YXR1c0NoYW5nZWQoX3Jlb3JkZXJTdGF0dXMsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2hpZGRlbkNoYW5nZWQoaGlkZGVuLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9ib2R5VGVtcGxhdGUmJih0aGlzLl9ib2R5VGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5faGVhZGVyVGVtcGxhdGUmJih0aGlzLl9oZWFkZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl9mb290ZXJUZW1wbGF0ZSYmKHRoaXMuX2Zvb3RlclRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLl9ib2R5VGVtcGxhdGV8fHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuY2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKHI9PntyLl9jb250ZW50LnBhcmVudE5vZGV8fHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuYXBwZW5kQ2hpbGQoci5fY29udGVudCl9KX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9maW5kSG9zdEdyaWQoKXx8dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChyPT57ci5fY29udGVudC5wYXJlbnROb2RlJiZyLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoci5fY29udGVudCl9KX0pLHRoaXMuX2dyaWRWYWx1ZT12b2lkIDB9X2ZpbmRIb3N0R3JpZCgpe2xldCByPXRoaXM7Zm9yKDtyJiYhL152YWFkaW4uKmdyaWQoLXBybyk/JC8udGVzdChyLmxvY2FsTmFtZSk7KXI9ci5hc3NpZ25lZFNsb3Q/ci5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZTpyLnBhcmVudE5vZGU7cmV0dXJuIHJ8fHZvaWQgMH1nZXQgX2dyaWQoKXtyZXR1cm4gdGhpcy5fZ3JpZFZhbHVlfHwodGhpcy5fZ3JpZFZhbHVlPXRoaXMuX2ZpbmRIb3N0R3JpZCgpKSx0aGlzLl9ncmlkVmFsdWV9Z2V0IF9hbGxDZWxscygpe3JldHVybltdLmNvbmNhdCh0aGlzLl9jZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzfHxbXSkuY29uY2F0KHRoaXMuX2hlYWRlckNlbGwpLmNvbmNhdCh0aGlzLl9mb290ZXJDZWxsKS5maWx0ZXIocj0+cil9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXI9bmV3IHZoKHRoaXMsKCk9Pnt0aGlzLl9oZWFkZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKSx0aGlzLl9mb290ZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlRm9vdGVyVGVtcGxhdGUoKSx0aGlzLl9ib2R5VGVtcGxhdGU9dGhpcy5fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpfSl9X3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCExLCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVCb2R5VGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgpfHxudWxsKX1fcHJlcGFyZVRlbXBsYXRpemVyKHIsbil7aWYociYmIXIudGVtcGxhdGl6ZXIpe2xldCBpPW5ldyBUMDtpLl9ncmlkPXRoaXMuX2dyaWQsaS5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LGkuX2luc3RhbmNlUHJvcHM9bnx8aS5faW5zdGFuY2VQcm9wcyxpLnRlbXBsYXRlPXIsci50ZW1wbGF0aXplcj1pfXJldHVybiByfV9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKXt0aGlzLmhlYWRlclJlbmRlcmVyJiZ0aGlzLl9oZWFkZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5oZWFkZXJSZW5kZXJlcix0aGlzLl9oZWFkZXJDZWxsKSx0aGlzLmZvb3RlclJlbmRlcmVyJiZ0aGlzLl9mb290ZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5mb290ZXJSZW5kZXJlcix0aGlzLl9mb290ZXJDZWxsKX1fX3J1blJlbmRlcmVyKHIsbixpKXtsZXQgbz1bbi5fY29udGVudCx0aGlzXTtpJiZpLml0ZW0mJm8ucHVzaChpKSxyLmFwcGx5KHRoaXMsbyl9X19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpe2lmKCF0aGlzLmhpZGRlbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSIpO2kuZm9yRWFjaChvPT57bGV0IGE9dGhpcy5fZ3JpZC5fX2dldFJvd01vZGVsKG8ucGFyZW50RWxlbWVudCk7aWYobilvLl9yZW5kZXJlcj1uLChhLml0ZW18fG49PT10aGlzLmhlYWRlclJlbmRlcmVyfHxuPT09dGhpcy5mb290ZXJSZW5kZXJlcikmJnRoaXMuX19ydW5SZW5kZXJlcihuLG8sYSk7ZWxzZSBpZihvLl90ZW1wbGF0ZSE9PXIpe28uX3RlbXBsYXRlPXIsby5fY29udGVudC5pbm5lckhUTUw9IiIsci50ZW1wbGF0aXplci5fZ3JpZD1yLnRlbXBsYXRpemVyLl9ncmlkfHx0aGlzLl9ncmlkO2xldCBzPXIudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKTtvLl9jb250ZW50LmFwcGVuZENoaWxkKHMucm9vdCksby5faW5zdGFuY2U9cyxhLml0ZW0mJm8uX2luc3RhbmNlLnNldFByb3BlcnRpZXMoYSl9fSl9fV9zZXRCb2R5VGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpfV9zZXRIZWFkZXJUZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpeyhyfHxuKSYmaSYmdGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcihyLG4sW2ldKX1fc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJih0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixbaV0pLHRoaXMuX2dyaWQuX191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KGkucGFyZW50RWxlbWVudCkpfV9zZWxlY3RGaXJzdFRlbXBsYXRlKHI9ITEsbj0hMSl7cmV0dXJuIHZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcihpPT5pLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJoZWFkZXIiKT09PXImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJmb290ZXIiKT09PW4pWzBdfV9maW5kVGVtcGxhdGUocixuKXtsZXQgaT10aGlzLl9zZWxlY3RGaXJzdFRlbXBsYXRlKHIsbik7cmV0dXJuIGkmJnRoaXMuZGF0YUhvc3QmJihpLl9yb290RGF0YUhvc3Q9dGhpcy5kYXRhSG9zdC5fcm9vdERhdGFIb3N0fHx0aGlzLmRhdGFIb3N0KSxpfV9mbGV4R3Jvd0NoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJmbGV4R3JvdyIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5mbGV4R3Jvdz1yKX1fb3JkZXJDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5vcmRlcj1yKX1fd2lkdGhDaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgid2lkdGgiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUud2lkdGg9ciksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fX2ZvcmNlUmVmbG93JiZ0aGlzLl9ncmlkLl9fZm9yY2VSZWZsb3coKX1fZnJvemVuQ2hhbmdlZChyKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoImZyb3plbiIsciksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIscixuKSksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkJiZ0aGlzLl9ncmlkLl9mcm96ZW5DZWxsc0NoYW5nZWQoKX1fbGFzdEZyb3plbkNoYW5nZWQocil7dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxhc3QtZnJvemVuIixyLG4pKSx0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJih0aGlzLnBhcmVudEVsZW1lbnQuX2xhc3RGcm96ZW49cil9X3BhdGhPckhlYWRlckNoYW5nZWQocixuLGksbyxhLHMsbCxjLHUpe2xldCBoPW4hPT12b2lkIDA7aWYoIWwmJiF1JiZoJiZpJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCxuKSxyJiZhLnZhbHVlKXtpZighcyYmIWMpe2xldCBmPShwLGQse2l0ZW06Z30pPT50aGlzLl9fc2V0VGV4dENvbnRlbnQocCx0aGlzLmdldChyLGcpKTt0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHZvaWQgMCxmLGEudmFsdWUpfSFsJiYhdSYmIWgmJmkmJm4hPT1udWxsJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCx0aGlzLl9nZW5lcmF0ZUhlYWRlcihyKSl9aSYmdGhpcy5fZ3JpZC5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkoaS5wYXJlbnRFbGVtZW50KX1fX3NldFRleHRDb250ZW50KHIsbil7ci50ZXh0Q29udGVudCE9PW4mJihyLnRleHRDb250ZW50PW4pfV9nZW5lcmF0ZUhlYWRlcihyKXtyZXR1cm4gci5zdWJzdHIoci5sYXN0SW5kZXhPZigiLiIpKzEpLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9eLi8sbj0+bi50b1VwcGVyQ2FzZSgpKX1fdG9nZ2xlQXR0cmlidXRlKHIsbixpKXtpLmhhc0F0dHJpYnV0ZShyKT09PSFuJiYobj9pLnNldEF0dHJpYnV0ZShyLCIiKTppLnJlbW92ZUF0dHJpYnV0ZShyKSl9X3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zZXRBdHRyaWJ1dGUoInJlb3JkZXItc3RhdHVzIixyKSl9X3Jlc2l6YWJsZUNoYW5nZWQocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHxuJiZbbl0uY29uY2F0KHRoaXMuX2VtcHR5Q2VsbHMpLmZvckVhY2goaT0+e2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3RvcignW3BhcnR+PSJyZXNpemUtaGFuZGxlIl0nKTtpZihvJiZpLnJlbW92ZUNoaWxkKG8pLHIpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc2V0QXR0cmlidXRlKCJwYXJ0IiwicmVzaXplLWhhbmRsZSIpLGkuYXBwZW5kQ2hpbGQoYSl9fX0pfV90ZXh0QWxpZ25DaGFuZ2VkKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuO2lmKFsic3RhcnQiLCJlbmQiLCJjZW50ZXIiXS5pbmRleE9mKHIpPT09LTEpe2NvbnNvbGUud2FybigndGV4dEFsaWduIGNhbiBvbmx5IGJlIHNldCBhcyAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIicpO3JldHVybn1sZXQgbjtnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2dyaWQpLmRpcmVjdGlvbj09PSJsdHIiP3I9PT0ic3RhcnQiP249ImxlZnQiOnI9PT0iZW5kIiYmKG49InJpZ2h0Iik6cj09PSJzdGFydCI/bj0icmlnaHQiOnI9PT0iZW5kIiYmKG49ImxlZnQiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKGk9PntpLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj1yLGdldENvbXB1dGVkU3R5bGUoaS5fY29udGVudCkudGV4dEFsaWduIT09ciYmKGkuX2NvbnRlbnQuc3R5bGUudGV4dEFsaWduPW4pfSl9X2hpZGRlbkNoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJoaWRkZW4iLHIpLCEhciE9ISF0aGlzLl9wcmV2aW91c0hpZGRlbiYmdGhpcy5fZ3JpZCYmKHI9PT0hMCYmdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bi5fY29udGVudC5wYXJlbnROb2RlJiZuLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobi5fY29udGVudCl9KSx0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkPXNyLmRlYm91bmNlKHRoaXMuX2dyaWQuX2RlYm91bmNlckhpZGRlbkNoYW5nZWQsTmksKCk9Pnt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlKHRoaXMuX2dyaWQuX2NvbHVtblRyZWUpfSksdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbiYmdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX2dyaWQubm90aWZ5UmVzaXplJiZ0aGlzLl9ncmlkLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX2dyaWQuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uJiZ0aGlzLl9ncmlkLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbigpKSx0aGlzLl9wcmV2aW91c0hpZGRlbj1yfX0sZVY9Y2xhc3MgZXh0ZW5kcyBjaHIoWkgobXQpKXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLWNvbHVtbiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3dpZHRoOnt0eXBlOlN0cmluZyx2YWx1ZToiMTAwcHgifSxmbGV4R3Jvdzp7dHlwZTpOdW1iZXIsdmFsdWU6MX0scmVuZGVyZXI6RnVuY3Rpb24scGF0aDp7dHlwZTpTdHJpbmd9LGF1dG9XaWR0aDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm9keVRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2NlbGxzOkFycmF5fX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShlVi5pcyxlVik7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIEBrZXlmcmFtZXMgdmFhZGluLWdyaWQtYXBwZWFyIHsKICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBhbmltYXRpb246IDFtcyB2YWFkaW4tZ3JpZC1hcHBlYXI7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzY3JvbGxlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pIHsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pICNzY3JvbGxlciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjdGFibGUgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBvdXRsaW5lOiBub25lOwogICAgICAvKiBXb3JrYXJvdW5kIGZvciBhIERlc2t0b3AgU2FmYXJpIGJ1ZzogbmV3IHN0YWNraW5nIGNvbnRleHQgaGVyZSBwcmV2ZW50cyB0aGUgc2Nyb2xsYmFyIGZyb20gZ2V0dGluZyBoaWRkZW4gKi8KICAgICAgei1pbmRleDogMDsKICAgIH0KCiAgICAjaGVhZGVyLAogICAgI2Zvb3RlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAjaGVhZGVyIHsKICAgICAgdG9wOiAwOwogICAgfQoKICAgIHRoIHsKICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgIH0KCiAgICAvKiBTYWZhcmkgZG9lc24ndCB3b3JrIHdpdGggImluaGVyaXQiICovCiAgICBbc2FmYXJpXSB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaXRpYWw7CiAgICB9CgogICAgI2Zvb3RlciB7CiAgICAgIGJvdHRvbTogMDsKICAgIH0KCiAgICAjaXRlbXMgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbGVmdDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtYXJnaW46IDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtsb2FkaW5nXSBbcGFydH49J2JvZHktY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXTplbXB0eSB7CiAgICAgIGhlaWdodDogMWVtOwogICAgfQoKICAgIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW2Zyb3plbl0gewogICAgICB6LWluZGV4OiAyOwogICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgfQoKICAgIFtuby1zY3JvbGxiYXJzXVtzYWZhcmldICN0YWJsZSwKICAgIFtuby1zY3JvbGxiYXJzXVtmaXJlZm94XSAjdGFibGUgewogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC8qIFJlb3JkZXJpbmcgc3R5bGVzICovCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSwKICAgICNzY3JvbGxlcltuby1jb250ZW50LXBvaW50ZXItZXZlbnRzXSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBvcGFjaXR5OiAwLjU7CgogICAgICAvKiBQcmV2ZW50IG92ZXJmbG93aW5nIHRoZSBncmlkIGluIEZpcmVmb3ggKi8KICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgewogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBSZXNpemluZyBzdHlsZXMgKi8KICAgIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBjb250ZW50OiAnJzsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMzVweDsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgfQoKICAgIFtsYXN0LWNvbHVtbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSwKICAgIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIHJpZ2h0OiAwOwogICAgfQoKICAgICNzY3JvbGxlcltjb2x1bW4tcmVzaXppbmddIHsKICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBTaXplciBzdHlsZXMgKi8KICAgICNzaXplciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgICNzaXplciBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXVtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgbGluZS1oZWlnaHQ6IDA7CiAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIG1heC1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ106OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICctJzsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjaXRlbXMsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2hlYWRlciwKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjZm9vdGVyIHsKICAgICAgbGVmdDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBsZWZ0OiBhdXRvOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10gewogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CiAgYCx7bW9kdWxlSWQ6InZhYWRpbi1ncmlkLXN0eWxlcyJ9KTt2YXIgdWhyPSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KSgpLHJWPWNsYXNzIGV4dGVuZHMgSkgoWEgoUWNlKCRjZSh0dWUoWGNlKGl1ZShvdWUoYXVlKG51ZShjdWUoamNlKHJ1ZShodWUoS2NlKGV1ZShsdWUoc3VlKHRWKSkpKSkpKSkpKSkpKSkpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gUWAKICAgICAgPGRpdgogICAgICAgIGlkPSJzY3JvbGxlciIKICAgICAgICBzYWZhcmkkPSJbW19zYWZhcmldXSIKICAgICAgICBpb3MkPSJbW19pb3NdXSIKICAgICAgICBsb2FkaW5nJD0iW1tsb2FkaW5nXV0iCiAgICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZCQ9IltbY29sdW1uUmVvcmRlcmluZ0FsbG93ZWRdXSIKICAgICAgPgogICAgICAgIDx0YWJsZSBpZD0idGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPSJ0cnVlIiB0YWJpbmRleD0iMCI+CiAgICAgICAgICA8Y2FwdGlvbiBpZD0ic2l6ZXIiIHBhcnQ9InJvdyI+PC9jYXB0aW9uPgogICAgICAgICAgPHRoZWFkIGlkPSJoZWFkZXIiIHJvbGU9InJvd2dyb3VwIj48L3RoZWFkPgogICAgICAgICAgPHRib2R5IGlkPSJpdGVtcyIgcm9sZT0icm93Z3JvdXAiPjwvdGJvZHk+CiAgICAgICAgICA8dGZvb3QgaWQ9ImZvb3RlciIgcm9sZT0icm93Z3JvdXAiPjwvdGZvb3Q+CiAgICAgICAgPC90YWJsZT4KCiAgICAgICAgPGRpdiBwYXJ0PSJyZW9yZGVyLWdob3N0Ij48L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJmb2N1c2V4aXQiIHRhYmluZGV4PSIwIj48L2Rpdj4KICAgIGB9c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9jb2x1bW5UcmVlQ2hhbmdlZChfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X3NhZmFyaTp7dHlwZTpCb29sZWFuLHZhbHVlOi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF9pb3M6e3R5cGU6Qm9vbGVhbix2YWx1ZTovaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbXx8bmF2aWdhdG9yLnBsYXRmb3JtPT09Ik1hY0ludGVsIiYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjF9LF9maXJlZm94Ont0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sX2FuZHJvaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTovYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF90b3VjaERldmljZTp7dHlwZTpCb29sZWFuLHZhbHVlOnVocn0saGVpZ2h0QnlSb3dzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfaGVpZ2h0QnlSb3dzQ2hhbmdlZCJ9LF9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0aGlzLl9vbkFuaW1hdGlvbkVuZCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LHIsbiksdD09PSJkaXIiJiYodGhpcy5fX2lzUlRMPW49PT0icnRsIix0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpKX1fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCl7cmV0dXJuISFBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHQ9PnQuY2xpZW50SGVpZ2h0KS5sZW5ndGh9X19pdGVtc1JlY2VpdmVkKCl7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQmJiF0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSYmdGhpcy5fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCkmJih0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZD0hMSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkpfV9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KXt0LmZvckVhY2gocj0+e3Iud2lkdGg9ImF1dG8iLHIuX29yaWdGbGV4R3Jvdz1yLmZsZXhHcm93LHIuZmxleEdyb3c9MH0pLHQuZm9yRWFjaChyPT57ci5fY3VycmVudFdpZHRoPTAsci5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bGV0IGk9bi5vZmZzZXRXaWR0aCsxO3IuX2N1cnJlbnRXaWR0aD1NYXRoLm1heChyLl9jdXJyZW50V2lkdGgsaSl9KX0pLHQuZm9yRWFjaChyPT57ci53aWR0aD1gJHtyLl9jdXJyZW50V2lkdGh9cHhgLHIuZmxleEdyb3c9ci5fb3JpZ0ZsZXhHcm93LHIuX2N1cnJlbnRXaWR0aD12b2lkIDAsci5fb3JpZ0ZsZXhHcm93PXZvaWQgMH0pfXJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl7aWYoISF0aGlzLl9jb2x1bW5UcmVlKWlmKHRoaXMuX2NhY2hlLmlzTG9hZGluZygpKXRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSEwO2Vsc2V7bGV0IHQ9dGhpcy5fZ2V0Q29sdW1ucygpLmZpbHRlcihyPT4hci5oaWRkZW4mJnIuYXV0b1dpZHRoKTt0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KX19X2NyZWF0ZVNjcm9sbGVyUm93cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO2kuc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93IiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl91cGRhdGVSb3coaSx0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLCJib2R5IiwhMSwhMCksci5wdXNoKGkpfXJldHVybiB0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLmZvckVhY2gobj0+bi5pc0Nvbm5lY3RlZCYmbi5ub3RpZnlQYXRoJiZuLm5vdGlmeVBhdGgoIl9jZWxscy4qIixuLl9jZWxscykpLHZndCh0aGlzLCgpPT57dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKX0pLHJ9X2dldFJvd1RhcmdldCgpe3JldHVybiB0aGlzLiQuaXRlbXN9X2NyZWF0ZUNlbGwodCl7bGV0IHI9dGhpcy5fY29udGVudEluZGV4PXRoaXMuX2NvbnRlbnRJbmRleCsxfHwwLG49InZhYWRpbi1ncmlkLWNlbGwtY29udGVudC0iK3IsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsbik7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtvLmlkPW4ucmVwbGFjZSgiLWNvbnRlbnQtIiwiLSIpLG8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksby5zZXRBdHRyaWJ1dGUoInJvbGUiLHQ9PT0idGQiPyJncmlkY2VsbCI6ImNvbHVtbmhlYWRlciIpO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNsb3QiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIm5hbWUiLG4pLG8uYXBwZW5kQ2hpbGQoYSksby5fY29udGVudD1pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e2lmKHdpbmRvdy5jaHJvbWUpe2xldCBzPSgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixzLCEwKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscywhMCl9ZWxzZSBzZXRUaW1lb3V0KCgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKX0pfSksb31fdXBkYXRlUm93KHQscixuLGksbyl7bj1ufHwiYm9keSI7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO0FycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaChzPT5zLl92YWNhbnQ9ITApLHQuaW5uZXJIVE1MPSIiLHQuaWQhPT0ic2l6ZXIiJiYodC5oaWRkZW49ITApLHIuZmlsdGVyKHM9PiFzLmhpZGRlbikuZm9yRWFjaCgocyxsLGMpPT57bGV0IHU7aWYobj09PSJib2R5Iil7aWYocy5fY2VsbHM9cy5fY2VsbHN8fFtdLHU9cy5fY2VsbHMuZmlsdGVyKGg9PmguX3ZhY2FudClbMF0sdXx8KHU9dGhpcy5fY3JlYXRlQ2VsbCgidGQiKSxzLl9jZWxscy5wdXNoKHUpKSx1LnNldEF0dHJpYnV0ZSgicGFydCIsImNlbGwgYm9keS1jZWxsIiksdC5hcHBlbmRDaGlsZCh1KSxsPT09Yy5sZW5ndGgtMSYmKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpKXt0aGlzLl9kZXRhaWxzQ2VsbHM9dGhpcy5fZGV0YWlsc0NlbGxzfHxbXTtsZXQgaD10aGlzLl9kZXRhaWxzQ2VsbHMuZmlsdGVyKGY9PmYuX3ZhY2FudClbMF18fHRoaXMuX2NyZWF0ZUNlbGwoInRkIik7dGhpcy5fZGV0YWlsc0NlbGxzLmluZGV4T2YoaCk9PT0tMSYmdGhpcy5fZGV0YWlsc0NlbGxzLnB1c2goaCksaC5fY29udGVudC5wYXJlbnRFbGVtZW50fHxhLmFwcGVuZENoaWxkKGguX2NvbnRlbnQpLHRoaXMuX2NvbmZpZ3VyZURldGFpbHNDZWxsKGgpLHQuYXBwZW5kQ2hpbGQoaCksdGhpcy5fYTExeVNldFJvd0RldGFpbHNDZWxsKHQsaCksaC5fdmFjYW50PSExfXMubm90aWZ5UGF0aCYmIW8mJnMubm90aWZ5UGF0aCgiX2NlbGxzLioiLHMuX2NlbGxzKX1lbHNle2xldCBoPW49PT0iaGVhZGVyIj8idGgiOiJ0ZCI7aXx8cy5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj8odT1zW2BfJHtufUNlbGxgXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHNbYF8ke259Q2VsbGBdPXUpOihzLl9lbXB0eUNlbGxzPXMuX2VtcHR5Q2VsbHN8fFtdLHU9cy5fZW1wdHlDZWxscy5maWx0ZXIoZj0+Zi5fdmFjYW50KVswXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHMuX2VtcHR5Q2VsbHMuaW5kZXhPZih1KT09PS0xJiZzLl9lbXB0eUNlbGxzLnB1c2godSkpLHUuc2V0QXR0cmlidXRlKCJwYXJ0IixgY2VsbCAke259LWNlbGxgKSx0aGlzLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eSh0KX11Ll9jb250ZW50LnBhcmVudEVsZW1lbnR8fGEuYXBwZW5kQ2hpbGQodS5fY29udGVudCksdS5fdmFjYW50PSExLHUuX2NvbHVtbj1zfSksdGhpcy5hcHBlbmRDaGlsZChhKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW5Gb3JSb3codCl9X191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KHQpe2lmKCF0KXJldHVybjtsZXQgcj1BcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZpbHRlcihuPT57bGV0IGk9bi5fY29sdW1uO2lmKGkuX2VtcHR5Q2VsbHMmJmkuX2VtcHR5Q2VsbHMuaW5kZXhPZihuKT4tMSlyZXR1cm4hMTtpZih0LnBhcmVudEVsZW1lbnQ9PT10aGlzLiQuaGVhZGVyKXtpZihpLmhlYWRlclJlbmRlcmVyfHxpLl9oZWFkZXJUZW1wbGF0ZSlyZXR1cm4hMDtpZihpLmhlYWRlcj09PW51bGwpcmV0dXJuITE7aWYoaS5wYXRofHxpLmhlYWRlciE9PXZvaWQgMClyZXR1cm4hMH1lbHNlIGlmKGkuZm9vdGVyUmVuZGVyZXJ8fGkuX2Zvb3RlclRlbXBsYXRlKXJldHVybiEwfSk7dC5oaWRkZW4hPT0hci5sZW5ndGgmJih0LmhpZGRlbj0hci5sZW5ndGgsdGhpcy5ub3RpZnlSZXNpemUoKSl9X3VwZGF0ZVNjcm9sbGVySXRlbSh0LHIpe3RoaXMuX3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHQsciksdGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZmlyc3QiLHI9PT0wLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgib2RkIixyJTIsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1Jvd2luZGV4KHQsciksdGhpcy5fZ2V0SXRlbShyLHQpKX1fY29sdW1uVHJlZUNoYW5nZWQodCl7dGhpcy5fcmVuZGVyQ29sdW1uVHJlZSh0KSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl9X3JlbmRlckNvbHVtblRyZWUodCl7Zm9yKEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMV0sbnVsbCwhMSwhMCkpO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPHQubGVuZ3RoOyl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtyLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLHIuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmhlYWRlci5hcHBlbmRDaGlsZChyKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO24uc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93Iiksbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLiQuZm9vdGVyLmFwcGVuZENoaWxkKG4pfWZvcig7dGhpcy4kLmhlYWRlci5jaGlsZHJlbi5sZW5ndGg+dC5sZW5ndGg7KXRoaXMuJC5oZWFkZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZCksdGhpcy4kLmZvb3Rlci5yZW1vdmVDaGlsZCh0aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkKTtBcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbbl0sImhlYWRlciIsbj09PXQubGVuZ3RoLTEpKSxBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMS1uXSwiZm9vdGVyIixuPT09MCkpLHRoaXMuX3VwZGF0ZVJvdyh0aGlzLiQuc2l6ZXIsdFt0Lmxlbmd0aC0xXSksdGhpcy5fcmVzaXplSGFuZGxlcigpLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKXt0aGlzLl9maXJlZm94JiYodGhpcy4kLml0ZW1zLnN0eWxlLnBhZGRpbmdCb3R0b209MCx0aGlzLmhlaWdodEJ5Um93c3x8KHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPWAke3RoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0fXB4YCkpLHRoaXMuX2lvcyYmIXdpbmRvdy5DU1Muc3VwcG9ydHMoInBvc2l0aW9uIiwic3RpY2t5IikmJih0aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuJC50YWJsZS5zdHlsZS5taW5IZWlnaHQ9IjEwMCUiLHRoaXMuJC50YWJsZS5zdHlsZS5tYXhIZWlnaHQ9IjEwMCUiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9YCR7dGhpcy4kLnNjcm9sbGVyLm9mZnNldEhlaWdodH1weGApKX1fdXBkYXRlSXRlbSh0LHIpe3QuX2l0ZW09cjtsZXQgbj10aGlzLl9fZ2V0Um93TW9kZWwodCk7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJzZWxlY3RlZCIsbi5zZWxlY3RlZCx0KSx0aGlzLl9hMTF5VXBkYXRlUm93U2VsZWN0ZWQodCxuLnNlbGVjdGVkKSx0aGlzLl9hMTF5VXBkYXRlUm93TGV2ZWwodCxuLmxldmVsKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImV4cGFuZGVkIixuLmV4cGFuZGVkLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChyKSx0KSwodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsciksdGhpcy5fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyh0LG4pLHRoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHQsbiksQXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpZihpLl9yZW5kZXJlcil7bGV0IG89aS5fY29sdW1ufHx0aGlzO2kuX3JlbmRlcmVyLmNhbGwobyxpLl9jb250ZW50LG8sbil9ZWxzZSBpLl9pbnN0YW5jZSYmKGkuX2luc3RhbmNlLl9fZGV0YWlsc09wZW5lZF9fPW4uZGV0YWlsc09wZW5lZCxpLl9pbnN0YW5jZS5fX3NlbGVjdGVkX189bi5zZWxlY3RlZCxpLl9pbnN0YW5jZS5fX2xldmVsX189bi5sZXZlbCxpLl9pbnN0YW5jZS5fX2V4cGFuZGVkX189bi5leHBhbmRlZCxpLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKG4pKX0pLHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyVXBkYXRlSGVpZ2h0cyxtby5hZnRlcigxKSwoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9KX1fcmVzaXplSGFuZGxlcigpe3RoaXMuX3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZXNpemVIYW5kbGVyLCEwKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9vbkFuaW1hdGlvbkVuZCh0KXt0LmFuaW1hdGlvbk5hbWUuaW5kZXhPZigidmFhZGluLWdyaWQtYXBwZWFyIik9PT0wJiYodGhpcy5fcmVuZGVyKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCksdGhpcy4kLnRhYmxlLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPSJ0b3VjaCJ9KSl9X3RvZ2dsZUF0dHJpYnV0ZSh0LHIsbil7bi5oYXNBdHRyaWJ1dGUodCk9PT0hciYmKHI/bi5zZXRBdHRyaWJ1dGUodCwiIik6bi5yZW1vdmVBdHRyaWJ1dGUodCkpfV9fZ2V0Um93TW9kZWwodCl7cmV0dXJue2luZGV4OnQuaW5kZXgsaXRlbTp0Ll9pdGVtLGxldmVsOnRoaXMuX2dldEluZGV4TGV2ZWwodC5pbmRleCksZXhwYW5kZWQ6dGhpcy5faXNFeHBhbmRlZCh0Ll9pdGVtKSxzZWxlY3RlZDp0aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pLGRldGFpbHNPcGVuZWQ6ISEodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKX19cmVuZGVyKCl7dGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX2NvbHVtblRyZWUuZm9yRWFjaCh0PT57dC5mb3JFYWNoKHI9PnIuX3JlbmRlckhlYWRlckFuZEZvb3RlcigpKX0pLHRoaXMuX3VwZGF0ZSgpKX1ub3RpZnlSZXNpemUoKXtzdXBlci5ub3RpZnlSZXNpemUoKX1faGVpZ2h0QnlSb3dzQ2hhbmdlZCh0LHIpeyh0fHxyKSYmdGhpcy5ub3RpZnlSZXNpemUoKX1fX2ZvcmNlUmVmbG93KCl7dGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3c9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3csTmksKCk9Pnt0aGlzLiQuc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsc2V0VGltZW91dCgoKT0+dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSIiKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHJWLmlzLHJWKTtmdW5jdGlvbiBmdWUoZSx0KXtyZXR1cm4gQmd0KGUsdCl9dmFyIGMxPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bj0iIn1fY3N2VXJsKHQscixuKXtyZXR1cm4gcj9NaShuKHQscikse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQscixuKXtyZXR1cm4gcj9uKHQscik6IiJ9X2Nzdk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uY3N2YDoiIn1fanNvbk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uanNvbmA6IiJ9fTtjMS50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiCiAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19IgogICAgPgogICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3J1bnNdXSI+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5dXSI+CiAgICAgIDxhIGRvd25sb2FkPSJbW19jc3ZOYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfY3N2VXJsKHRhZywgX3J1biwgdXJsRm4pXV0iCiAgICAgICAgPkNTVjwvYQogICAgICA+PCEtLQogICAgICAtLT48YQogICAgICAgIGRvd25sb2FkPSJbW19qc29uTmFtZSh0YWcsIF9ydW4pXV0iCiAgICAgICAgaHJlZj0iW1tfanNvblVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5KU09OPC9hCiAgICAgID4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICBhIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtOwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsIl9ydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGMxLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjMS5wcm90b3R5cGUsInVybEZuIix2b2lkIDApO2MxPUUoW3l0KCJ0Zi1kb3dubG9hZGVyIildLGMxKTt2YXIgaGhyPTY0LEVsaT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLEduPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1udWxsLHRoaXMuX2xvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2lmKG49PW51bGwpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGRhdGEgZm9yOiIscik7cmV0dXJufWxldCBpPW4ubWFwKGE9Pih7d2FsbF90aW1lOm5ldyBEYXRlKGFbMF0qMWUzKSxzdGVwOmFbMV0sc2NhbGFyOmFbMl19KSksbz10aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHIpO3Quc2V0U2VyaWVzTWV0YWRhdGEobyxyKSx0LnNldFNlcmllc0RhdGEobyxpKX0sdGhpcy5nZXREYXRhTG9hZFVybD0oe3RhZzp0LHJ1bjpyfSk9Pl9lKCkucGx1Z2luUm91dGVGb3JTcmMoInNjYWxhcnMiLCIvc2NhbGFycyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnQscnVuOnJ9KSksdGhpcy5fZG93bmxvYWRVcmxGbj0odCxyKT0+dGhpcy5nZXREYXRhTG9hZFVybCh7dGFnOnQscnVuOnJ9KSx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PnRoaXMuaW5Db2xhYj90aGlzLl9yZXF1ZXN0RGF0YUdldCh0LHIsbik6dGhpcy5fcmVxdWVzdERhdGFQb3N0KHQscixuKSx0aGlzLl9yZXF1ZXN0RGF0YUdldD0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPU1pKG8se3RhZzphLnRhZyxydW46YS5ydW59KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHMpLnRoZW4obD0+dm9pZCByKHtpdGVtOmEsZGF0YTpsfSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcmVxdWVzdERhdGFQb3N0PSh0LHIsbik9Pnt2YXIgYztsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnNfbXVsdGlydW4iKSxhPW5ldyBNYXA7Zm9yKGxldHt0YWc6dSxydW46aH1vZiB0KXtsZXQgZj1hLmdldCh1KTtmPT1udWxsJiZhLnNldCh1LGY9W10pLGYucHVzaChoKX1sZXQgcz0oYz10aGlzLmJhdGNoU2l6ZSkhPW51bGw/YzpoaHIsbD1bXTtmb3IobGV0W3UsaF1vZiBhKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7Zis9cylsLnB1c2goe3RhZzp1LHJ1bnM6aC5zbGljZShmLGYrcyl9KTtQcm9taXNlLmFsbChsLm1hcCgoe3RhZzp1LHJ1bnM6aH0pPT50aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyx7dGFnOnUscnVuczpofSkudGhlbihmPT57Zm9yKGxldCBwIG9mIGgpe2xldCBkPXt0YWc6dSxydW46cH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYscCk/cih7aXRlbTpkLGRhdGE6ZltwXX0pOnIoe2l0ZW06ZCxkYXRhOm51bGx9KX19KSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fZ2V0RGF0YUxvYWROYW1lPXQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57bGV0IHQ9aXN0LnNsaWNlKCkscj10LmZpbmRJbmRleChuPT5uLnRpdGxlPT0iTmFtZSIpO3JldHVybiB0LnNwbGljZShyLDEse3RpdGxlOiJOYW1lIixldmFsdWF0ZTpuPT57bGV0IGk9bi5kYXRhc2V0Lm1ldGFkYXRhKCkubWV0YTtyZXR1cm4gdGhpcy5fZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oaSl9fSksdH0pKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3ZhciB0O3JldHVybih0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTt0JiZ0LnJlc2V0RG9tYWluKCl9X3VwZGF0ZURvd25sb2FkTGluaygpe3ZhciBuO2xldCB0PXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLmV4cG9ydEFzU3ZnU3RyaW5nKCkscj0obj10aGlzLnNoYWRvd1Jvb3QpPT1udWxsP3ZvaWQgMDpuLnF1ZXJ5U2VsZWN0b3IoIiNzdmdMaW5rIik7ci5ocmVmPWBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYSh0KX1gfV9ydW5zRnJvbURhdGEodCl7cmV0dXJuIHQubWFwKHI9PnIucnVuKX1fZ2V0RGF0YVNlcmllcygpe3JldHVybiB0aGlzLmRhdGFUb0xvYWQubWFwKHQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCkpfV9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHtydW46dCxleHBlcmltZW50OnI9e25hbWU6Il9kZWZhdWx0In19KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW3IubmFtZSx0XSl9X2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKHQpe3JldHVybiB0LnJ1bn1fZ2V0Q29sb3JTY2FsZSgpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUhPT1udWxsP3RoaXMuY29sb3JTY2FsZTp7c2NhbGU6dD0+e2xldFsscl09SlNPTi5wYXJzZSh0KTtyZXR1cm4gZm4ocil9fX19O0duLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19nZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUpXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX2dldERhdGFTZXJpZXMoZGF0YVRvTG9hZC4qKV1dIgogICAgICAgIGRhdGEtdG8tbG9hZD0iW1tkYXRhVG9Mb2FkXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC1uYW1lPSJbW19nZXREYXRhTG9hZE5hbWVdXSIKICAgICAgICBnZXQtZGF0YS1sb2FkLXVybD0iW1tnZXREYXRhTG9hZFVybF1dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tyZXF1ZXN0RGF0YV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfbG9hZERhdGFDYWxsYmFja11dIgogICAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICAgIGxvZy1zY2FsZS1hY3RpdmU9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgdGFnLW1ldGFkYXRhPSJbW3RhZ01ldGFkYXRhXV0iCiAgICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249ImF1dG8iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPHBhcGVyLW1lbnUtYnV0dG9uIG9uLXBhcGVyLWRyb3Bkb3duLW9wZW49Il91cGRhdGVEb3dubG9hZExpbmsiPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBpY29uPSJmaWxlLWRvd25sb2FkIgogICAgICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPgogICAgICAgICAgICAgIDxhIGlkPSJzdmdMaW5rIiBkb3dubG9hZD0iW1t0YWddXS5zdmciPgogICAgICAgICAgICAgICAgRG93bmxvYWQgQ3VycmVudCBDaGFydCBhcyBTVkcKICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLW1lbnUtYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8dGYtZG93bmxvYWRlcgogICAgICAgICAgICBydW5zPSJbW19ydW5zRnJvbURhdGEoZGF0YVRvTG9hZCldXSIKICAgICAgICAgICAgdGFnPSJbW3RhZ11dIgogICAgICAgICAgICB1cmwtZm49IltbX2Rvd25sb2FkVXJsRm5dXSIKICAgICAgICAgID48L3RmLWRvd25sb2FkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgfQoKICAgICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgICNidXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIGEgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHBhcGVyLW1lbnUtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIHBhcGVyLWl0ZW0gYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sR24ucHJvdG90eXBlLCJkYXRhVG9Mb2FkIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEduLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sR24ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic2hvd0Rvd25MaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHbi5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEduLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEduLnByb3RvdHlwZSwiYmF0Y2hTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsImluQ29sYWIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfbG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwiZ2V0RGF0YUxvYWRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZG93bmxvYWRVcmxGbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwicmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR24ucHJvdG90eXBlLCJfbG9nU2NhbGVBY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEduLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0duPUUoW3l0KCJ0Zi1zY2FsYXItY2FyZCIpXSxHbik7dmFyIFZzPWNsYXNzIGV4dGVuZHMgZnVlKFtjV10sbXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlc3Npb25Hcm91cD1udWxsLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fbm9NdWx0aUV4cGVyaW1lbnRzPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntQcm9taXNlLmFsbCh0Lm1hcChpPT57bGV0IG89e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6aS5ydW4sbWV0cmljTmFtZTppLnRhZ307cmV0dXJuIHRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMobykudGhlbihhPT52b2lkIHIoe2l0ZW06aSxkYXRhOmF9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9jb2xvclNjYWxlPXtzY2FsZTp0PT57bGV0IHI9SlNPTi5wYXJzZSh0KVsxXSxuPXRoaXMuX2luZGV4T2ZTZXNzaW9uLmdldChyKSxpPWlSO3JldHVybiBpWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCtuKSVpLmxlbmd0aF19fX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5yZWRyYXcuYmluZCh0aGlzKSl9cmVkcmF3KCl7dmFyIHQ7KHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2gocj0+e3IucmVkcmF3KCl9KX1fc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3ZhciB0OyF0aGlzLnNlc3Npb25Hcm91cHx8T2JqZWN0LmtleXModGhpcy5zZXNzaW9uR3JvdXApLmxlbmd0aD09MD8odGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD0wKToodGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCh0aGlzLnNlc3Npb25Hcm91cC5zZXNzaW9ucy5tYXAoKHIsbik9PltyLm5hbWUsbl0pKSx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD1kY3QodGhpcy5zZXNzaW9uR3JvdXAubmFtZSkpLCh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntsZXQgbj1yLGk9bi5nZXQoInRhZyIpO24uc2V0KCJ0YWciLCIiKSxuLnNldCgidGFnIixpKX0pfV9oYXZlTWV0cmljcygpe3JldHVybiB0aGlzLnZpc2libGVTY2hlbWEmJkFycmF5LmlzQXJyYXkodGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zKSYmdGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wfV9oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCYmdGhpcy5faGF2ZU1ldHJpY3MoKX1fY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyh0LHIpe3JldHVybiB0PT09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHxyPT09bnVsbD9bXTp0LnNlc3Npb25zLmZpbHRlcihuPT5mMyhuLm1ldHJpY1ZhbHVlcyxyLm5hbWUpIT09dm9pZCAwKS5tYXAobj0+KHt0YWc6ci5uYW1lLHJ1bjpuLm5hbWV9KSl9X2NvbXB1dGVUYWdNZXRhZGF0YSh0KXtyZXR1cm57ZGlzcGxheU5hbWU6UXUodCksZGVzY3JpcHRpb246dC5kZXNjcmlwdGlvbnx8IiJ9fX07VnMudGVtcGxhdGU9UWAKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shc2Vzc2lvbkdyb3VwXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBzZXNzaW9uIGdyb3VwIHNlbGVjdGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2Ugc2VsZWN0IGEgc2Vzc2lvbiBncm91cCB0byBzZWUgaXRzIG1ldHJpYy1ncmFwaHMgaGVyZS48L3A+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhdmVNZXRyaWNzKHZpc2libGVTY2hlbWEuKildXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIG1ldHJpY3MgYXJlIGVuYWJsZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBlbmFibGUgc29tZSBtZXRyaWNzIHRvIHNlZSBjb250ZW50IGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKHZpc2libGVTY2hlbWEuKiwgc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3NdXSIKICAgICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGEgcmVxdWVzdC1tYW5hZ2VyIGF0dHJpYnV0ZSBzaW5jZQogICAgICAgICAgICAgICB3ZSBwcm92aWRlIGEgZnVuY3Rpb24gaW4gcmVxdWVzdC1kYXRhIGZvciBjYWxsaW5nIHRoZSBiYWNrZW5kCiAgICAgICAgICAgICAgIHRvIGdldCB0aGUgbWV0cmljcyBkYXRhLgogICAgICAgICAgICAtLT4KICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICBjbGFzcz0ic2NhbGFyLWNhcmQiCiAgICAgICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhzZXNzaW9uR3JvdXAsIG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHRhZz0iW1ttZXRyaWNJbmZvLm5hbWUudGFnXV0iCiAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfY29tcHV0ZVRhZ01ldGFkYXRhKG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX25vTXVsdGlFeHBlcmltZW50c11dIgogICAgICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgPgogICAgICAgICAgPC90Zi1zY2FsYXItY2FyZD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8IS0tICJpcm9uLWZsZXgiIGlzIG5lZWRlZCB0byB1c2UgdGhlIGxheW91dCBjbGFzc2VzIGluIHRoZSBkaXYgYWJvdmUgLS0+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVnMucHJvdG90eXBlLCJfbm9NdWx0aUV4cGVyaW1lbnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiX2luZGV4T2ZTZXNzaW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cE5hbWVIYXNoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sVnMucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJfY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3VwLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cENoYW5nZWQiLG51bGwpO1ZzPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyIpXSxWcyk7dmFyIEhkPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faHBhcmFtTmFtZT1GZCx0aGlzLl9tZXRyaWNOYW1lPVF1fV92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe2xldCB0PXRoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuZ2V0KCJkZXRhaWxzT3BlbmVkSXRlbXMiKTt0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIixbXSksY2koKTtsZXQgcj1uZXcgTWFwO3RoaXMuc2Vzc2lvbkdyb3Vwcy5mb3JFYWNoKG49PntyLnNldChuLm5hbWUsbil9KSx0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIix0Lm1hcChuPT5yLmdldChuLm5hbWUpKS5maWx0ZXIoQm9vbGVhbikpfV9zZXNzaW9uR3JvdXBIUGFyYW0odCxyKXtyZXR1cm4gdD09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQuaHBhcmFtcyxyKT8iIjpiMCh0LmhwYXJhbXNbcl0pfV9zZXNzaW9uR3JvdXBNZXRyaWModCxyKXtpZih0PT1udWxsfHxPYmplY3Qua2V5cyh0KS5sZW5ndGg9PTApcmV0dXJuIiI7Zm9yKGxldCBuPTA7bjx0Lm1ldHJpY1ZhbHVlcy5sZW5ndGg7KytuKXtsZXQgaT10Lm1ldHJpY1ZhbHVlc1tuXTtpZihpLm5hbWUuZ3JvdXA9PT1yLmdyb3VwJiZpLm5hbWUudGFnPT1yLnRhZylyZXR1cm4gYjAoaS52YWx1ZSl9cmV0dXJuIiJ9X3Jvd051bWJlcih0KXtyZXR1cm4gdCsxfX07SGQudGVtcGxhdGU9UWAKICAgIDx2YWFkaW4tZ3JpZAogICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC10YWJsZSIKICAgICAgaWQ9InNlc3Npb25Hcm91cHNUYWJsZSIKICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZD0iIgogICAgICBpdGVtcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICA+CiAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5UcmlhbCBJRDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+W1tpdGVtLm5hbWVdXTwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZW5hYmxlU2hvd01ldHJpY3NdXSI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIGF1dG9XaWR0aD0iIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5TaG93IE1ldHJpY3M8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0idGFibGUtY2VsbCIgY2hlY2tlZD0ie3tkZXRhaWxzT3BlbmVkfX0iPgogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbdmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc11dIgogICAgICAgIGFzPSJocGFyYW1JbmZvIgogICAgICAgIGluZGV4LWFzPSJocGFyYW1JbmRleCIKICAgICAgPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW1JbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwSFBhcmFtKGl0ZW0sIGhwYXJhbUluZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJ7e3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3N9fSIKICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICBpbmRleC1hcz0ibWV0cmljSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cE1ldHJpYyhpdGVtLCBtZXRyaWNJbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgY2xhc3M9InJvdy1kZXRhaWxzIj4KICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW2l0ZW1dXSIKICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICAgIGNsYXNzPSJzZXNzaW9uLWdyb3VwLWRldGFpbHMiCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3ZhYWRpbi1ncmlkPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjMzAzMDMwOwogICAgICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHZhYWRpbi1ncmlkIHsKICAgICAgICAtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICAvKiBsaW5lLWJyZWFrIG92ZXJmbG93aW5nIGNvbHVtbiBoZWFkZXJzICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLXRhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtZGV0YWlscyB7CiAgICAgICAgaGVpZ2h0OiAzNjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSGQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIZC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIZC5wcm90b3R5cGUsImVuYWJsZVNob3dNZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhkLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxIZC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0J0KCJ2aXNpYmxlU2NoZW1hLioiLCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhkLnByb3RvdHlwZSwiX3Zpc2libGVTY2hlbWFPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKTtIZD1FKFt5dCgidGYtaHBhcmFtcy10YWJsZS12aWV3IildLEhkKTt2YXIgQ1A9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLnZpc2libGVTY2hlbWE9bnVsbH1fcHJvcGVydGllc0FyZVBvcHVsYXRlZCh0LHIpe3JldHVybiB0IT1udWxsJiZyIT09dm9pZCAwJiZyIT09bnVsbH1fc2luZ2xldG9uU2Vzc2lvbkdyb3Vwcyh0KXtyZXR1cm4gdD09bnVsbD9bXTpbdF19fTtDUC50ZW1wbGF0ZT1RYAogICAgPCEtLSBJZiBzZXNzaW9uR3JvdXAgb3IgdmlzaWJsZVNjaGVtYSBhcmUgbm90IHBvcHVsYXRlZCwgZG8gbm90IGRpc3BsYXkKICAgICAgICAgYW55dGhpbmcuCiAgICAgIC0tPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbW19wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSIKICAgID4KICAgICAgPCEtLSBEaXNwbGF5IG9uZSByb3cgd2l0aG91dCBhICJzaG93LW1ldHJpY3MiIGNvbHVtbiAtLT4KICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2luZ2xldG9uU2Vzc2lvbkdyb3VwcyhzZXNzaW9uR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbWyFfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDxkaXY+Q2xpY2sgb3IgaG92ZXIgb3ZlciBhIHNlc3Npb24gZ3JvdXAgdG8gZGlzcGxheSBpdHMgdmFsdWVzIGhlcmUuPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJzZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0NQPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIildLENQKTt2YXIgQVA9RWUoT2UoKSwxKTtmdW5jdGlvbiBwdWUoZSx0LHIsbil7aWYodC5sZW5ndGg8MilyZXR1cm4gY29uc29sZS5lcnJvcigiTGVzcyB0aGFuIHR3byBheGVzIGluIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QuIiksbnVsbDtsZXQgaT1yWzBdLG89clsxXTtpZihpPD10WzBdfHxpPj10W3QubGVuZ3RoLTFdKXJldHVybiBudWxsO2xldCBhPUFQLnNvcnRlZEluZGV4KHQsaSk7Y29uc29sZS5hc3NlcnQoYT4wKSxjb25zb2xlLmFzc2VydChhPHQubGVuZ3RoKTtsZXQgcz1hLTE7ZnVuY3Rpb24gbChoLGYscCxkKXtsZXQgZz1oLXAsXz1mLWQseT1pLXAseD1vLWQsYj0oZyp5K18qeCkvKGcqZytfKl8pO2lmKGI8PTApcmV0dXJuIHAzKHkseCk7aWYoYj49MSl7bGV0IFM9aC1pLEM9Zi1vO3JldHVybiBwMyhTLEMpfXJldHVybiBwMyh5LWIqZyx4LWIqXyl9bGV0IGM9bnVsbCx1PW51bGw7cmV0dXJuIGUuZm9yRWFjaChoPT57bGV0IGY9bChoLmNvbnRyb2xQb2ludHNbc11bMF0saC5jb250cm9sUG9pbnRzW3NdWzFdLGguY29udHJvbFBvaW50c1thXVswXSxoLmNvbnRyb2xQb2ludHNbYV1bMV0pO2Y+bnx8KGM9PT1udWxsfHxmPGMpJiYoYz1mLHU9aCl9KSx1fWZ1bmN0aW9uIGR1ZShlLHQscil7cmV0dXJuIGUuZG9tYWluKCkuZmlsdGVyKG49PntsZXQgaT1lKG4pO3JldHVybiB0PD1pJiZpPD1yfSl9ZnVuY3Rpb24gbXVlKGUsdCxyKXtsZXQgbj1lLnJhbmdlKCksaT1uLmZpbHRlcihvPT50PD1vJiZvPD1yKS5tYXAobz0+e2xldCBhPWUuaW52ZXJ0RXh0ZW50KG8pO3JldHVybiBvPT09bltuLmxlbmd0aC0xXT9bYVswXSxhWzFdKzFdOmF9KTtyZXR1cm4gaS5sZW5ndGg9PTA/WzAsMF06YWEoSW0oaSkpfWZ1bmN0aW9uIGd1ZShlLHQscil7cmV0dXJuW2UuaW52ZXJ0KHQpLGUuaW52ZXJ0KHIpXS5zb3J0KChuLGkpPT5uLWkpfWZ1bmN0aW9uIEZjdChlLHQscil7ZnVuY3Rpb24gbigpe2lmKGUubGVuZ3RoPT09MClyZXR1cm5bMSwyXTtsZXRbaSxvXT1hYShlKTtyZXR1cm4gaSE9PW8/W2ksb106aT4wP1tpKi41LGkqMS41XTppPDA/W2kqMS41LGkqLjVdOlstMSwxXX1pZihyPT09IkxJTkVBUiIpcmV0dXJuIE9uKCkuZG9tYWluKG4oKSkucmFuZ2UoW3QsMF0pO2lmKHI9PT0iTE9HIil7bGV0IGk9bigpO3JldHVybiBpWzBdPD0wJiZpWzFdPj0wP0ZjdChlLHQsIkxJTkVBUiIpOmNjKCkuZG9tYWluKGkpLnJhbmdlKFt0LDBdKX1lbHNlIGlmKHI9PT0iUVVBTlRJTEUiKXtsZXQgbz1JcigyMCkubWFwKGE9PnQtYSp0LzE5KTtyZXR1cm4gZS5sZW5ndGg9PT0wJiYoZT1bMV0pLGVnKCkuZG9tYWluKEFQLnVuaXEoZSkpLnJhbmdlKG8pfWVsc2V7aWYocj09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKEFQLnVuaXEoZS5zb3J0KCkpKS5yYW5nZShbdCwwXSkucGFkZGluZyguMSk7dGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBzY2FsZTogIityKX19dmFyIHUxOyhmdW5jdGlvbihlKXtlLkxJTkVBUj0iTElORUFSIixlLkxPRz0iTE9HIixlLlFVQU5USUxFPSJRVUFOVElMRSIsZS5OT05fTlVNRVJJQz0iTk9OX05VTUVSSUMifSkodTF8fCh1MT17fSkpO3ZhciBQUD1jbGFzc3tpc1Bhc3NpbmcodCl7cmV0dXJuITB9fSxuVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9sb3dlcj10LHRoaXMuX3VwcGVyPXIsdGhpcy5fbG93ZXJPcGVuPW4sdGhpcy5fdXBwZXJPcGVuPWl9aXNQYXNzaW5nKHQpe2xldCByPXQ7cmV0dXJuIHRoaXMuX2JlZm9yZSh0aGlzLl9sb3dlcixyLCF0aGlzLl9sb3dlck9wZW4pJiZ0aGlzLl9iZWZvcmUocix0aGlzLl91cHBlciwhdGhpcy5fdXBwZXJPcGVuKX1fYmVmb3JlKHQscixuKXtyZXR1cm4gbj90PD1yOnQ8cn19LEhjdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb21haW5TZXQ9dH1pc1Bhc3NpbmcodCl7cmV0dXJuIHRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgocj0+cj09PXQpIT09LTF9fSxWY3Q9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9cix0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bix0aGlzLl9jb2xJbmRleD1pLHRoaXMuX2lzRGlzcGxheWVkPSExLHRoaXMuX3lTY2FsZT1udWxsLHRoaXMuX3NjYWxlVHlwZT1udWxsLHRoaXMuc2V0QnJ1c2hTZWxlY3Rpb24obnVsbCl9Y29sSW5kZXgoKXtyZXR1cm4gdGhpcy5fY29sSW5kZXh9eVNjYWxlKCl7cmV0dXJuIHRoaXMuX3lTY2FsZX1zY2FsZVR5cGUoKXtyZXR1cm4gdGhpcy5fc2NhbGVUeXBlfWJydXNoU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2JydXNoU2VsZWN0aW9ufWlzRGlzcGxheWVkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcGxheWVkfXNldEJydXNoU2VsZWN0aW9uKHQpe3RoaXMuX2JydXNoU2VsZWN0aW9uPXQsdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1zZXREb21haW5BbmRTY2FsZSh0LHIpe3RoaXMuX3NjYWxlVHlwZT1yLHRoaXMuX3lTY2FsZT1GY3QodC5zbGljZSgpLHRoaXMuX3N2Z1Byb3BzLmhlaWdodCx0aGlzLnNjYWxlVHlwZSgpKSx0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSx0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfWJydXNoRmlsdGVyKCl7cmV0dXJuIHRoaXMuX2JydXNoRmlsdGVyfXVwZGF0ZURPTSh0KXtsZXQgcj1sYih0aGlzLnlTY2FsZSgpKTt0aGlzLnNjYWxlVHlwZSgpPT09dTEuUVVBTlRJTEUmJihyPXIudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KHhuKCItLjZnIikpKTtsZXQgbj1IdCh0KTtuLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLG4uYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcyIsITApLmNhbGwocikuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpcy10aXRsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsLTkpLnRleHQoYT0+Y2N0KHRoaXMuX3NjaGVtYSxhKSksbi5jYWxsKHBiKCkub24oInN0YXJ0IiwoKT0+e3Quc2V0QXR0cmlidXRlKCJpcy1kcmFnZ2luZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdTdGFydCh0aGlzLmNvbEluZGV4KCkpfSkub24oImRyYWciLCgpPT50aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnKHF0LngpKS5vbigiZW5kIiwoKT0+e3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdFbmQoKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciKX0pKTtsZXQgaT1xTCgpLmV4dGVudChbWy04LDBdLFs4LHRoaXMuX3N2Z1Byb3BzLmhlaWdodCsxXV0pLm9uKCJzdGFydCIsKCk9PnshQmN0KHF0KXx8KHQuc2V0QXR0cmlidXRlKCJpcy1icnVzaGluZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKSl9KS5vbigiYnJ1c2giLCgpPT57IUJjdChxdCl8fHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKX0pLm9uKCJlbmQiLCgpPT57IUJjdChxdCl8fCh0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbiksdC5yZW1vdmVBdHRyaWJ1dGUoImlzLWJydXNoaW5nIikpfSksbz1IdCh0KS5hcHBlbmQoImciKS5jbGFzc2VkKCJicnVzaCIsITApO28uY2FsbChpKSxpLm1vdmUobyx0aGlzLmJydXNoU2VsZWN0aW9uKCkpfXNldERpc3BsYXllZCh0KXt0aGlzLl9pc0Rpc3BsYXllZD10fV9idWlsZEJydXNoRmlsdGVyKHQscixuKXtpZih0PT09bnVsbClyZXR1cm4gbmV3IFBQO2lmKHI9PT1udWxsKXJldHVybiBjb25zb2xlLmVycm9yKCJTY2FsZSB0eXBlIGlzIG51bGwsIGJ1dCBicnVzaFNlbGVjdGlvbiBpc24ndDogIix0KSxuZXcgUFA7c3dpdGNoKHIpe2Nhc2UgdTEuTElORUFSOmNhc2UgdTEuTE9HOntsZXRbaSxvXT1ndWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCExKX1jYXNlIHUxLlFVQU5USUxFOntsZXRbaSxvXT1tdWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCEwKX1jYXNlIHUxLk5PTl9OVU1FUklDOnJldHVybiBuZXcgSGN0KGR1ZShuLHRbMF0sdFsxXSkpfXJldHVybiBjb25zb2xlLmVycm9yKCJVbmtub3duIHNjYWxlIHR5cGU6ICIsciksbmV3IFBQfX0saVY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlcz10aGlzLl9jcmVhdGVBeGVzKG4pLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zPXRnKCkucmFuZ2UoWzEsdGhpcy5fc3ZnUHJvcHMud2lkdGgtMV0pLnBhZGRpbmcoLjUpLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYXhpcy1wYXJlbnQiKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCIuYXhpcy1wYXJlbnQiKX11cGRhdGVBeGVzKHQscil7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7bGV0IG49bmV3IFNldDt0LmNvbHVtbnMuZm9yRWFjaChvPT57bGV0IGE9by5hYnNvbHV0ZUluZGV4LHM9dGhpcy5fYXhlc1thXTtzLnNldERpc3BsYXllZCghMCk7bGV0IGw9ci5tYXAoYz0+eDAodGhpcy5fc2NoZW1hLGMsYSkpO3Muc2V0RG9tYWluQW5kU2NhbGUobCxvLnNjYWxlKSxuLmFkZChhKX0pLHRoaXMuX2F4ZXMuZm9yRWFjaChvPT57bi5oYXMoby5jb2xJbmRleCgpKXx8by5zZXREaXNwbGF5ZWQoITEpfSksdGhpcy5fdXBkYXRlU3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMobiksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmRhdGEoQXJyYXkuZnJvbShuKSxvPT5vKSx0aGlzLl9wYXJlbnRzU2VsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzLXBhcmVudCIsITApLm1lcmdlKHRoaXMuX3BhcmVudHNTZWwpO2xldCBpPXRoaXM7dGhpcy5fcGFyZW50c1NlbC5jYWxsKG89PnRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTShvKSkuZWFjaChmdW5jdGlvbihvKXtpLl9heGVzW29dLnVwZGF0ZURPTSh0aGlzKX0pfW1hcFZpc2libGVBeGVzKHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5tYXAocj0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihyKSx0aGlzLl9heGVzW3JdKSl9YWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5ldmVyeShyPT50KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHIpLHRoaXMuX2F4ZXNbcl0pKX1nZXRBeGlzRm9yQ29sSW5kZXgodCl7cmV0dXJuIHRoaXMuX2F4ZXNbdF19ZHJhZ1N0YXJ0KHQpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2F4ZXNbdF0uaXNEaXNwbGF5ZWQoKSksdGhpcy5fZHJhZ2dlZEF4aXM9dGhpcy5fYXhlc1t0XSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfWRyYWcodCl7dD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuX3N2Z1Byb3BzLndpZHRoKSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXQ7bGV0IHI9dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCk7ci5zb3J0KChuLGkpPT50aGlzLmdldEF4aXNQb3NpdGlvbihuKS10aGlzLmdldEF4aXNQb3NpdGlvbihpKSksdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKHIpLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsKX1kcmFnRW5kKHQpe2NvbnNvbGUuYXNzZXJ0KHRoaXMuaXNBeGlzRHJhZ2dpbmcoKSksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj1udWxsLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKHQpKX1pc0F4aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGx9Z2V0QXhpc1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGwmJnRoaXMuX2RyYWdnZWRBeGlzLmNvbEluZGV4KCk9PT10P3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb246dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnModCl9X3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpe2xldCByPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcihpPT50LmhhcyhpKSksbj1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnIsLi4uQXJyYXkuZnJvbSh0KV0pKTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4obil9X3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0KXt0LmF0dHIoInRyYW5zZm9ybSIscj0+eVAodGhpcy5nZXRBeGlzUG9zaXRpb24ocikpKX1fY3JlYXRlQXhlcyh0KXtyZXR1cm4gSXIodWN0KHRoaXMuX3NjaGVtYSkpLm1hcChyPT5uZXcgVmN0KHRoaXMuX3N2Z1Byb3BzLHRoaXMuX3NjaGVtYSx0LHIpKX19O2Z1bmN0aW9uIEJjdChlKXtyZXR1cm4gZS5zb3VyY2VFdmVudCE9PW51bGx9dmFyIGpmOyhmdW5jdGlvbihlKXtlW2UuRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCIsZVtlLkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoamZ8fChqZj17fSkpO3ZhciB0aD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0PT09dm9pZCAwJiYodD1FcChudWxsKSksY29uc29sZS5hc3NlcnQodC5zaXplKCk8PTEpLHRoaXMuX3Nlc3Npb25Hcm91cFNlbD10fXNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpPT09MT90aGlzLl9zZXNzaW9uR3JvdXBTZWwuZGF0dW0oKTpudWxsfWlzTnVsbCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCgpPT09bnVsbH1zZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Vzc2lvbkdyb3VwU2VsfWVxdWFsc1RvKHQpe3ZhciByLG47cmV0dXJuIHRoaXMuaXNOdWxsKCk/dC5pc051bGwoKTp0LmlzTnVsbCgpPyExOigocj10LnNlc3Npb25Hcm91cCgpKT09bnVsbD92b2lkIDA6ci5uYW1lKT09KChuPXRoaXMuc2Vzc2lvbkdyb3VwKCkpPT1udWxsP3ZvaWQgMDpuLm5hbWUpfX0sb1Y9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlc0NvbGxlY3Rpb249bix0aGlzLl9zZXNzaW9uR3JvdXBzPVtdLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmJhY2tncm91bmQiKS5yZW1vdmUoKSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5mb3JlZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fYmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl9mZ1BhdGhzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuYXBwZW5kKCJnIikuY2xhc3NlZCgiZm9yZWdyb3VuZCIsITApLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPW5ldyB0aCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdGgsdGhpcy5fZDNsaW5lPXZ1KCkuY3VydmUoWWgpfWdldFNlc3Npb25Hcm91cEhhbmRsZSh0KXtyZXR1cm4gdD09bnVsbD9uZXcgdGg6bmV3IHRoKHRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKHI9PnIubmFtZT09PXQubmFtZSkpfWhpZGVCYWNrZ3JvdW5kTGluZXMoKXt0aGlzLl9iZ1BhdGhzU2VsLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKX1zaG93QmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IixudWxsKX1wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKXtyZXR1cm4gdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlfXNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlfXJlY29tcHV0ZUNvbnRyb2xQb2ludHModCxyPTApeyh0PT09amYuRk9SRUdST1VORD90aGlzLl9mZ1BhdGhzU2VsOnRoaXMuX2JnUGF0aHNTZWwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyKS5hdHRyKCJkIixpPT50aGlzLl9wYXRoREF0dHJpYnV0ZShpKSksdD09PWpmLkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgpPT57bGV0IGk9dGhpczt0aGlzLl9mZ1BhdGhzU2VsLmVhY2goZnVuY3Rpb24obyl7aS5fc2V0Q29udHJvbFBvaW50c1Byb3BlcnR5KHRoaXMsbyl9KX0pfXJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKXt0aGlzLl9mZ1BhdGhzU2VsLmNsYXNzZWQoImludmlzaWJsZS1wYXRoIix0PT4hdGhpcy5fYXhlc0NvbGxlY3Rpb24uYWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KChyLG4pPT5uLmJydXNoRmlsdGVyKCkuaXNQYXNzaW5nKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpKSksdGhpcy5fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKX1zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcih0LHIsbil7bGV0IGk9dGhpcy5fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxyLG4pO3RoaXMuX2ZnUGF0aHNTZWwuYXR0cigic3Ryb2tlIixpKX1yZWRyYXcodCxyLG4saSl7bGV0IG89dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLGE9dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz10LHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKG8pLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKGEpLHRoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5EKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuQkFDS0dST1VORCksdGhpcy5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCksdGhpcy5zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcihyLG4saSl9dXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKHQpe3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITEpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT10LHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITApfWNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCl7dGhpcy51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAobmV3IHRoKX11cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMCl9ZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKXtsZXQgbj10aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygobyxhKT0+byksaT1wdWUodGhpcy5fdmlzaWJsZUZnUGF0aHNTZWwubm9kZXMoKSxuLFt0LHJdLDEwMCk7cmV0dXJuIGk9PT1udWxsP25ldyB0aDpuZXcgdGgoSHQoaSkpfV9jcmVhdGVMaW5lQ29sb3JGdW5jdGlvbih0LHIsbil7aWYodD09PW51bGwpcmV0dXJuKCk9PiJyZWQiO2xldCBpPU9uKCkuZG9tYWluKGhjdCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3Vwcyx0KSkucmFuZ2UoW3Isbl0pLmludGVycG9sYXRlKE1fKTtyZXR1cm4gbz0+aSh4MCh0aGlzLl9zY2hlbWEsbyx0KSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odCl7cmV0dXJuIHQ9dC5kYXRhKHRoaXMuX3Nlc3Npb25Hcm91cHMscj0+ci5uYW1lKSx0LmV4aXQoKS5yZW1vdmUoKSx0LmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2UodCl9X3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0LHIpe3QuY29udHJvbFBvaW50cz10aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhyKX1fY29tcHV0ZUNvbnRyb2xQb2ludHModCl7cmV0dXJuIHRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKChyLG4pPT5bcixuLnlTY2FsZSgpKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpXSl9X3BhdGhEQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLl9kM2xpbmUodGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHModCkpfV91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpe3RoaXMuX3Zpc2libGVGZ1BhdGhzU2VsPXRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKCI6bm90KC5pbnZpc2libGUtcGF0aCkiKX19O3ZhciBhVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuc3ZnPUh0KHQpO2xldCBuPXt0b3A6MzAscmlnaHQ6MTAsYm90dG9tOjEwLGxlZnQ6MTB9LGk9MTAwLG89MjAwLGE9cippK24ubGVmdCtuLnJpZ2h0LHM9bytuLnRvcCtuLmJvdHRvbTt0aGlzLnN2Zy5hdHRyKCJ2aWV3Qm94IixgMCAwICR7YX0gJHtzfWApLHRoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLGErInB4IiksdGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLHMrInB4IiksdGhpcy53aWR0aD1hLW4ubGVmdC1uLnJpZ2h0LHRoaXMuaGVpZ2h0PXMtbi50b3Atbi5ib3R0b20sdGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIseVAobi5sZWZ0LG4udG9wKSl9fSxzVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1uLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPWksdGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGlWKHQscix0aGlzKSx0aGlzLl9saW5lc0NvbGxlY3Rpb249bmV3IG9WKHQscix0aGlzLl9heGVzQ29sbGVjdGlvbiksdGhpcy5fc3ZnUHJvcHMuc3ZnLm9uKCJjbGljayIsKCk9PnRoaXMub25DbGljaygpKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLCgpPT57bGV0W28sYV09em8odGhpcy5fc3ZnUHJvcHMuc3ZnRy5ub2RlKCkpO3RoaXMub25Nb3VzZU1vdmVkKG8sYSl9KS5vbigibW91c2VsZWF2ZSIsKCk9PnRoaXMub25Nb3VzZUxlYXZlKCkpfW9uRHJhZ1N0YXJ0KHQpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdTdGFydCh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uaGlkZUJhY2tncm91bmRMaW5lcygpfW9uRHJhZyh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnKHQpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGpmLkZPUkVHUk9VTkQpfW9uRHJhZ0VuZCgpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdFbmQoNTAwKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5ELDUwMCksd2luZG93LnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5CQUNLR1JPVU5EKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2hvd0JhY2tncm91bmRMaW5lcygpfSw1MDApfW9uQnJ1c2hDaGFuZ2VkKHQscil7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZ2V0QXhpc0ZvckNvbEluZGV4KHQpLnNldEJydXNoU2VsZWN0aW9uKHIpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKHQscil7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwodGhpcy5fbGluZXNDb2xsZWN0aW9uLmNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKG51bGwpKX1vbkNsaWNrKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpPT09dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCk/dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKG5ldyB0aCk6dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodCxyKXt0aGlzLl9heGVzQ29sbGVjdGlvbi51cGRhdGVBeGVzKHQscik7bGV0IG49dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLGk9dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlZHJhdyhyLHQuY29sb3JCeUNvbHVtbkluZGV4IT09dm9pZCAwP3QuY29sdW1uc1t0LmNvbG9yQnlDb2x1bW5JbmRleF0uYWJzb2x1dGVJbmRleDpudWxsLHQubWluQ29sb3IsdC5tYXhDb2xvciksbi5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpfHx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKSxpLmVxdWFsc1RvKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfXNjaGVtYSgpe3JldHVybiB0aGlzLl9zY2hlbWF9fTt2YXIgZWg9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5yZWRyYXdDb3VudD0wfV9vcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe3ZhciBuO2lmKCF0aGlzLm9wdGlvbnMpcmV0dXJuO2xldHtjb25maWd1cmF0aW9uOnR9PShuPXRoaXMuX3ByZXZPcHRpb25zKSE9bnVsbD9uOnt9LHtjb25maWd1cmF0aW9uOnJ9PXRoaXMub3B0aW9ucztpZih0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9PT12b2lkIDB8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LnNjaGVtYSxyLnNjaGVtYSl8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LmNvbHVtbnNWaXNpYmlsaXR5LHIuY29sdW1uc1Zpc2liaWxpdHkpKXtIdCh0aGlzLiQuc3ZnKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtsZXQgaT1uZXcgYVYodGhpcy4kLnN2ZyxyLmNvbHVtbnNWaXNpYmlsaXR5LmZpbHRlcihCb29sZWFuKS5sZW5ndGgpO3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlcj1uZXcgc1YoaSxyLnNjaGVtYSxvPT50aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pLG89PnRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pKX10aGlzLl9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodGhpcy5vcHRpb25zLHRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3VwcyksdGhpcy5yZWRyYXdDb3VudCsrLHRoaXMuX3ByZXZPcHRpb25zPXRoaXMub3B0aW9uc31jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZCh0KXt0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9dH1zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD10fV9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCl7bGV0IHQ9Y3M7aWYodGhpcy5zZXNzaW9uR3JvdXBzPT09dm9pZCAwKXt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dm9pZCAwO3JldHVybn1sZXQgcj10aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5zY2hlbWE7dGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXRoaXMuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIobj0+e2ZvcihsZXQgaT0wO2k8dC5udW1Db2x1bW5zKHIpOysraSl7aWYoIXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLmNvbHVtbnNWaXNpYmlsaXR5W2ldKWNvbnRpbnVlO2xldCBvPXQuY29sdW1uVmFsdWVCeUluZGV4KHIsbixpKTtpZihvPT09dm9pZCAwfHxvPT09Ik5hTiIpcmV0dXJuITF9cmV0dXJuITB9KX19O2VoLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3c6IDAgMXB4IDAgI2ZmZiwKICAgICAgICAgIDFweCAwIDAgI2ZmZiwgMCAtMXB4IDAgI2ZmZiwgLTFweCAwIDAgI2ZmZjsKICAgICAgfQogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICMwMDAsCiAgICAgICAgICAxcHggMCAwICMwMDAsIDAgLTFweCAwICMwMDAsIC0xcHggMCAwICMwMDA7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5iYWNrZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZGRkOwogICAgICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICAgICAgfQoKICAgICAgLmZvcmVncm91bmQgcGF0aCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC43OwogICAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgfQoKICAgICAgLyogV2lsbCBiZSBzZXQgb24gZm9yZWdyb3VuZCBwYXRocyB0aGF0IGFyZSBub3QgImNvbnRhaW5lZCIgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgYXhlcyBicnVzaGVzLiBJZiBubyBicnVzaGVzIGFyZSBzZXQsIG5vIHBhdGggd2lsbCBoYXZlIHRoaXMgY2xhc3MuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5pbnZpc2libGUtcGF0aCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogU3R5bGUgZm9yIHRoZSBwYXRoIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIHBvaW50ZXIgKHR5cGljYWxseSB3aWxsIGJlY29tZQogICAgICB0aGUgc2VsZWN0ZWQgcGF0aCB3aGVuIHRoZSB1c2VyIGNsaWNrcykuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5wZWFrZWQtcGF0aCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHBhdGggY2xhc3MuIFdlIHVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZQogICAgICAgICBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIGNvbG9yIG9mIGEgcGF0aC4gKi8KICAgICAgLmZvcmVncm91bmQgLnNlbGVjdGVkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMyAhaW1wb3J0YW50OwogICAgICAgIHN0cm9rZTogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXhpcyB0ZXh0IHsKICAgICAgICB0ZXh0LXNoYWRvdzogdmFyKC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdyk7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxlaC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZWgucHJvdG90eXBlLCJyZWRyYXdDb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVoLnByb3RvdHlwZSwiX3ZhbGlkU2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsIl9pbnRlcmFjdGlvbk1hbmFnZXIiLHZvaWQgMCk7RShbQnQoIm9wdGlvbnMuKiIsInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZWgucHJvdG90eXBlLCJfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpO2VoPUUoW3l0KCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90IildLGVoKTt2YXIgQTA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcHRpb25zPW51bGx9X2NvbmZpZ3VyYXRpb25DaGFuZ2VkKCl7bGV0IHQ9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEscj10aGlzLmNvbmZpZ3VyYXRpb24uc2NoZW1hLG49KGEscyk9Pih7bmFtZTpGZChhKSxpbmRleDpzLGFic29sdXRlSW5kZXg6ekgocix0LHMpLHNjYWxlOnRoaXMuX2lzTnVtZXJpY0NvbHVtbihzKT8iTElORUFSIjoiTk9OX05VTUVSSUMifSksaT0oYSxzKT0+e2xldCBsPXMrdC5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJue3NjYWxlOiJMSU5FQVIiLG5hbWU6UXUoYSksaW5kZXg6bCxhYnNvbHV0ZUluZGV4OnpIKHIsdCxsKX19LG89e2NvbHVtbnM6dC5ocGFyYW1JbmZvcy5tYXAobikuY29uY2F0KHQubWV0cmljSW5mb3MubWFwKGkpKSxtaW5Db2xvcjoiIzAwMDBGRiIsbWF4Q29sb3I6IiNGRjAwMDAiLGNvbmZpZ3VyYXRpb246dGhpcy5jb25maWd1cmF0aW9ufTt0aGlzLnNldCgib3B0aW9ucyIsbyksY2koKSx0aGlzLnNldCgib3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgiLHRoaXMuX2RlZmF1bHRDb2xvckJ5Q29sdW1uSW5kZXgoKSl9X3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoKXt0aGlzLm9wdGlvbnMhPT1udWxsJiZ0aGlzLm9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKHQ9PntsZXQgcj0ib3B0aW9ucy5jb2x1bW5zLiIrdC5pbmRleDshdGhpcy5fYWxsb3dMb2dTY2FsZSh0KSYmdC5zY2FsZT09PSJMT0ciJiZ0aGlzLnNldChyKyIuc2NhbGUiLCJMSU5FQVIiKX0pfV9hbGxvd0xvZ1NjYWxlKHQpe2lmKCF0aGlzLl9pc051bWVyaWNDb2x1bW4odC5pbmRleCl8fCF0aGlzLnNlc3Npb25Hcm91cHMpcmV0dXJuITE7bGV0W3Isbl09X1AodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQuaW5kZXgpO3JldHVybiByPjB8fG48MH1faXNOdW1lcmljQ29sdW1uKHQpe3JldHVybiB0Pj10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGh8fHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zW3RdLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQifV9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPjApcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDtsZXQgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgocj0+ci50eXBlPT09IkRBVEFfVFlQRV9GTE9BVDY0Iik7aWYodCE9PS0xKXJldHVybiB0fX07QTAudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtcGFuZWwiPgogICAgICA8IS0tICdDb2xvciBieScgZHJvcCBkb3duIG1lbnUgLS0+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgbGFiZWw9IkNvbG9yIGJ5IgogICAgICAgIGlkPSJjb2xvckJ5RHJvcERvd25NZW51IgogICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgID4KICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2VsZWN0ZWQ9Int7b3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXh9fSIKICAgICAgICAgIGlkPSJjb2xvckJ5TGlzdEJveCIKICAgICAgICA+CiAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgIGl0ZW1zPSJbW29wdGlvbnMuY29sdW1uc11dIgogICAgICAgICAgICBhcz0iY29sdW1uIgogICAgICAgICAgICBpZD0iY29sb3JCeUNvbHVtblRlbXBsYXRlIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaXRlbSBkaXNhYmxlZD0iW1shX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICAgIFtbY29sdW1uLm5hbWVdXQogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgoKICAgICAgPCEtLSBDb2x1bW5zIHNjYWxlcyAtLT4KICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgIDwhLS0gU2NhbGUgb3B0aW9ucyBmb3IgZWFjaCBudW1lcmljIGZlYXR1cmUgLS0+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvcHRpb25zLmNvbHVtbnN9fSIgYXM9ImNvbHVtbiI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi10aXRsZSI+W1tjb2x1bW4ubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgICAgICAgICBjbGFzcz0ic2NhbGUtcmFkaW8tZ3JvdXAiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e2NvbHVtbi5zY2FsZX19IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkxJTkVBUiI+CiAgICAgICAgICAgICAgICAgICAgTGluZWFyCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8IS0tIFRoZSBpZCBoZXJlIGlzIHVzZWQgdG8gYWNjZXNzIHRoaXMgYnV0dG9uIGluIHVuaXQKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cy4tLT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGlkPSJsb2dTY2FsZUJ1dHRvbl9bW2NvbHVtbi5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgbmFtZT0iTE9HIgogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbWyFfYWxsb3dMb2dTY2FsZShjb2x1bW4sIHNlc3Npb25Hcm91cHMuKildXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIExvZ2FyaXRobWljCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IlFVQU5USUxFIj4KICAgICAgICAgICAgICAgICAgICBRdWFudGlsZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5jb250cm9sLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuY29sdW1uIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggZGFya2dyYXk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5jb2x1bW4tdGl0bGUgewogICAgICAgIC8qIEZpdCBldmVyeSB0aXRsZSBpbiBvbmUgbGluZSBzbyB0aGUgcmFkaW8gYm94ZXMgYWxpZ24gdmVydGljYWxseS4gKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIC5zY2FsZS1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQTAucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxBMC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEEwLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtCdCgiY29uZmlndXJhdGlvbi4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxBMC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQTAucHJvdG90eXBlLCJfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcyIsbnVsbCk7QTA9RShbeXQoInRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIildLEEwKTt2YXIgaDE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07aDEudGVtcGxhdGU9UWAKICAgIDwhLS0gQ29udHJvbHMgYmVoYXZpb3Igb2YgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdAogICAgICAgICBvdXRwdXRzIHNldCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4KICAgICAgLS0+CiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBUaGUgc2NhbGUgYW5kIGNvbG9yIGNvbnRyb2xzLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdCAtLT4KICAgICAgPHRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QKICAgICAgICBpZD0icGxvdCIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBzZWxlY3RlZC1zZXNzaW9uLWdyb3VwPSJ7e19zZWxlY3RlZEdyb3VwfX0iCiAgICAgICAgY2xvc2VzdC1zZXNzaW9uLWdyb3VwPSJ7e19jbG9zZXN0R3JvdXB9fSIKICAgICAgICBvcHRpb25zPSJbW19vcHRpb25zXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIGlkPSJ2YWx1ZXMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscwogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgoKICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGgxLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxoMS5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7aDE9RShbeXQoInRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciKV0saDEpO3ZhciB5Mz1FZShPZSgpLDEpO3ZhciAkbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3N2Zz1udWxsLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcix0aGlzLl9zdmc9SHQodGhpcy4kLnN2ZyksdGhpcy5fcmVkcmF3KCl9X3Nlc3Npb25Hcm91cHNDaGFuZ2VkKCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCE9PW51bGwmJih0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPWZjdCh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCksdGhpcy5fcmVkcmF3KCl9X3Zpc2libGVTY2hlbWFDaGFuZ2VkKCl7dGhpcy5fYnJ1c2hlZENlbGxJbmRleD1udWxsLHRoaXMuX2JydXNoU2VsZWN0aW9uPW51bGwsdGhpcy5fcmVkcmF3KCl9X3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgpPT57bGV0IHQ9Y3Mscj0xMjAwLG49LjQqcixpPTE1MCxvPS43NSppO3RoaXMud2lkdGg9TWF0aC5tYXgoaSp0Lm51bVZpc2libGVDb2x1bW5zKHRoaXMudmlzaWJsZVNjaGVtYSksciksdGhpcy5oZWlnaHQ9TWF0aC5tYXgobyp0Lm51bVZpc2libGVNZXRyaWNzKHRoaXMudmlzaWJsZVNjaGVtYSksbiksdGhpcy5fY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCIsdGhpcy5fc3ZnLmF0dHIoIndpZHRoIix0aGlzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHRoaXMuaGVpZ2h0KSx0aGlzLl9zdmcuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksdGhpcy5fZHJhdygpfSwxMDApfV9kcmF3KCl7bGV0IHQ9Y3Mscj10aGlzO2lmKCF0aGlzLnNlc3Npb25Hcm91cHN8fHRoaXMuc2Vzc2lvbkdyb3Vwcy5sZW5ndGg9PTB8fCF0aGlzLnZpc2libGVTY2hlbWF8fHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg9PTApcmV0dXJuO2xldCBuPUlyKHQubnVtVmlzaWJsZUNvbHVtbnMoci52aXNpYmxlU2NoZW1hKSksaT1Jcih0Lm51bVZpc2libGVNZXRyaWNzKHIudmlzaWJsZVNjaGVtYSkpLG89ODAsYT01MCxzPTUsbD1RbSgpLmRvbWFpbihuKS5yYW5nZShbbytzLHRoaXMud2lkdGgtMS1zXSkucGFkZGluZ0lubmVyKC4xKSxjPVFtKCkuZG9tYWluKGkpLnJhbmdlKFt0aGlzLmhlaWdodC0xLXMtYSxzXSkucGFkZGluZ0lubmVyKC4xKSx1PWwuYmFuZHdpZHRoKCksaD1jLmJhbmR3aWR0aCgpLGY9bi5tYXAoY3Q9PnIuX2NlbGxTY2FsZShjdCxbMCx1LTFdKSkscD1pLm1hcChjdD0+ci5fY2VsbFNjYWxlKGN0K3QubnVtVmlzaWJsZUhQYXJhbXMoci52aXNpYmxlU2NoZW1hKSxbaC0xLDBdKSksZD10aGlzLl9zdmcuc2VsZWN0QWxsKCIueC1heGlzIikuZGF0YShuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKGwoY3QpLDApKTtmdW5jdGlvbiBnKGN0KXtyZXR1cm4ieC1heGlzLWNsaXAtcGF0aC0iK2N0fWZ1bmN0aW9uIF8oY3Qpe3JldHVybiJ4LWxhYmVsLWNsaXAtcGF0aC0iK2N0fWQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixnKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtcykuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0LWEvMiksZC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLF8pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHIuaGVpZ2h0LWEvMikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsYS8yKSxkLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrZyhjdCkrIikiKS5lYWNoKGZ1bmN0aW9uKGN0KXtIdCh0aGlzKS5jYWxsKFMsWjkoZltjdF0pLnRpY2tTaXplKHIuaGVpZ2h0LWEpLHUsNDAsci5vcHRpb25zLmNvbHVtbnNbY3RdLnNjYWxlKX0pLGQuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzLWxhYmVsIiwhMCkuYXR0cigiY2xpcC1wYXRoIixjdD0+InVybCgjIitfKGN0KSsiKSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsdS8yKS5hdHRyKCJ5IixyLmhlaWdodC0xLWEvNCkudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKS5hcHBlbmQoInRpdGxlIikudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKTtsZXQgeT10aGlzLl9zdmcuc2VsZWN0QWxsKCIueS1heGlzIikuZGF0YShpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKHIud2lkdGgtMSxjKGN0KSkpO2Z1bmN0aW9uIHgoY3Qpe3JldHVybiJ5LWF4aXMtY2xpcC1wYXRoLSIrY3R9ZnVuY3Rpb24gYihjdCl7cmV0dXJuInktbGFiZWwtY2xpcC1wYXRoLSIrY3R9eS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHgpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oci53aWR0aC1vLzItMSkpLmF0dHIoInkiLC1zKS5hdHRyKCJ3aWR0aCIsci53aWR0aC1vLzIpLmF0dHIoImhlaWdodCIsaCsyKnMpLHkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixiKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHIud2lkdGgtMSkpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixvLzIpLmF0dHIoImhlaWdodCIsaCkseS5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK3goY3QpKyIpIikuZWFjaChmdW5jdGlvbihjdCl7SHQodGhpcykuY2FsbChTLGxiKHBbY3RdKS50aWNrU2l6ZShyLndpZHRoLW8pLGgsMjAsci5vcHRpb25zLmNvbHVtbnNbY3QrdC5udW1WaXNpYmxlSFBhcmFtcyhyLnZpc2libGVTY2hlbWEpXS5zY2FsZSl9KSx5LmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrYihjdCkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLC0oci53aWR0aC1vLzQtMSkpLmF0dHIoInkiLGgvMikuYXR0cigidHJhbnNmb3JtIix0LnJvdGF0ZVN0cig5MCwtKHIud2lkdGgtby80LTEpLGgvMikpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSk7ZnVuY3Rpb24gUyhjdCxYLGV0LGR0LHEpe2xldCBwdD1NYXRoLmZsb29yKGV0L2R0KSxodD1YLnNjYWxlKCk7aWYocT09PSJRVUFOVElMRSIpe2xldCB3dD1odC5xdWFudGlsZXMoKSxrdD1NYXRoLmNlaWwod3QubGVuZ3RoL3B0KTt3dD1JcigwLHd0Lmxlbmd0aCxrdCkubWFwKGllPT53dFtpZV0pLFgudGlja1ZhbHVlcyh3dCkudGlja0Zvcm1hdCh4bigiLS4yZyIpKX0ocT09PSJMSU5FQVIifHxxPT09IkxPRyIpJiZYLnRpY2tzKHB0KSxjdC5jYWxsKFgpLGN0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLnJlbW92ZSgpLGN0LnNlbGVjdEFsbCgiLnRpY2sgbGluZSIpLmF0dHIoInN0cm9rZSIsIiNkZGQiKX1sZXQgQz10aGlzLl9zdmcuc2VsZWN0QWxsKCIuY2VsbCIpLmRhdGEocTkobixpKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjZWxsIiwhMCkuYXR0cigidHJhbnNmb3JtIiwoW2N0LFhdKT0+dC50cmFuc2xhdGVTdHIobChjdCksYyhYKSkpLFA9Qy5hcHBlbmQoImciKS5jbGFzc2VkKCJmcmFtZSIsITApLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC1zKS5hdHRyKCJ5IiwtcykuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLGgrMipzKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksaz1udWxsO3Iub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXghPT12b2lkIDAmJihrPU9uKCkuZG9tYWluKHRoaXMuX2NvbEV4dGVudCh0aGlzLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSkucmFuZ2UoW3RoaXMub3B0aW9ucy5taW5Db2xvcix0aGlzLm9wdGlvbnMubWF4Q29sb3JdKS5pbnRlcnBvbGF0ZShNXykpO2xldCBPPXIub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXg9PT12b2lkIDA/KCk9PiJyZWQiOih7c2Vzc2lvbkdyb3VwOmN0fSk9PmsodGhpcy5fY29sVmFsdWUoY3Qsci5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpO2Z1bmN0aW9uIEQoY3QsWCl7cmV0dXJuIGZbWF0oci5fY29sVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEIoY3QsWCl7cmV0dXJuIHBbWF0oci5fbWV0cmljVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEkoY3QsWCl7bGV0IGV0PWN0LnNlbGVjdEFsbCgiLmRhdGEtbWFya2VyIikuZGF0YSgoW3B0LGh0XSk9PnIuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIod3Q9PnIuX2NvbFZhbHVlKHd0LHB0KSE9PXZvaWQgMCYmci5fbWV0cmljVmFsdWUod3QsaHQpIT09dm9pZCAwKS5tYXAod3Q9Pih7Y29sOnB0LG1ldHJpYzpodCxzZXNzaW9uR3JvdXA6d3QseDpEKHd0LHB0KSx5OkIod3QsaHQpLHNlc3Npb25Hcm91cE1hcmtlcnM6bnVsbH0pKSkuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoImRhdGEtbWFya2VyIiwhMCkuYXR0cigiY3giLCh7eDpwdH0pPT5wdCkuYXR0cigiY3kiLCh7eTpwdH0pPT5wdCkuYXR0cigiciIsMikuYXR0cigiZmlsbCIsWCksZHQ9bmV3IE1hcDtyLnNlc3Npb25Hcm91cHMuZm9yRWFjaChwdD0+e2R0LnNldChwdCxbXSl9KSxldC5lYWNoKGZ1bmN0aW9uKHB0KXt2YXIgaHQ7KGh0PWR0LmdldChwdC5zZXNzaW9uR3JvdXApKT09bnVsbHx8aHQucHVzaCh0aGlzKX0pLGV0LmVhY2gocHQ9PntsZXQgaHQ9ZHQuZ2V0KHB0LnNlc3Npb25Hcm91cCk7cHQuc2Vzc2lvbkdyb3VwTWFya2Vycz1uZXcgU2V0KGh0KX0pO2xldCBxPW4ubWFwKHB0PT5pLm1hcChodD0+ZXQuZmlsdGVyKHd0PT53dC5jb2w9PXB0JiZ3dC5tZXRyaWM9PWh0KSkpO3JldHVybltldCxxLGR0XX1sZXRbTCxSLEZdPUkoQy5hcHBlbmQoImciKSxPKTtmdW5jdGlvbiB6KGN0LFgpe2xldCBldD1bXTtyZXR1cm4gUltjdF1bWF0uZWFjaChmdW5jdGlvbigpe2V0LnB1c2godGhpcyl9KSx6aCgpLngoZHQ9Pkh0KGR0KS5kYXR1bSgpLngpLnkoZHQ9Pkh0KGR0KS5kYXR1bSgpLnkpLmFkZEFsbChldCl9bGV0IFU9bi5tYXAoY3Q9PmkubWFwKFg9PnooY3QsWCkpKSxXPW51bGw7YnQoKSYmKFc9Qy5maWx0ZXIoY3Q9PnkzLmlzRXF1YWwoY3Qsci5fYnJ1c2hlZENlbGxJbmRleCkpLGNvbnNvbGUuYXNzZXJ0KFcuc2l6ZSgpPT0xLFcpKTtsZXQgWj1uZXcgU2V0KEwubm9kZXMoKSk7cnQoKTtmdW5jdGlvbiBydCgpe2xldCBjdD1uZXcgU2V0KEwubm9kZXMoKSk7TXQoKXx8KGN0PW90KHIuX2JydXNoZWRDZWxsSW5kZXgsci5fYnJ1c2hTZWxlY3Rpb24pKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KGN0LFg9PiFaLmhhcyhYKSkpKS5hdHRyKCJmaWxsIixPKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KFosWD0+IWN0LmhhcyhYKSkpKS5hdHRyKCJmaWxsIiwiI2RkZCIpLFo9Y3R9ZnVuY3Rpb24gb3QoY3QsWCl7Y29uc29sZS5hc3NlcnQoY3QhPT1udWxsKSxjb25zb2xlLmFzc2VydChYIT09bnVsbCk7bGV0W2V0LGR0XT1jdCxxPW5ldyBTZXQ7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdChVW2V0XVtkdF0sWFswXVswXSxYWzBdWzFdLFhbMV1bMF0sWFsxXVsxXSxwdD0+e0h0KHB0KS5kYXR1bSgpLnNlc3Npb25Hcm91cE1hcmtlcnMuZm9yRWFjaCh3dD0+e3EuYWRkKHd0KX0pfSkscX1sZXQgc3Q9R0woKS5leHRlbnQoW1stcysxLC1zKzFdLFt1LTErcy0xLGgtMStzLTFdXSkub24oInN0YXJ0IixmdW5jdGlvbigpe2J0KCkmJlcubm9kZSgpIT10aGlzJiZzdC5tb3ZlKFcsbnVsbCksU3QodGhpcyl9KS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7U3QodGhpcyl9KS5vbigiZW5kIixmdW5jdGlvbigpe1N0KHRoaXMpfSk7ZnVuY3Rpb24gU3QoY3Qpe2xldCBYPVVMKGN0KTshYnQoKSYmWD09PW51bGx8fGJ0KCkmJmN0PT09Vy5ub2RlKCkmJnkzLmlzRXF1YWwoWCxyLl9icnVzaFNlbGVjdGlvbil8fChyLl9icnVzaFNlbGVjdGlvbj1YLFghPT1udWxsPyhXPUh0KGN0KSxyLl9icnVzaGVkQ2VsbEluZGV4PVcuZGF0dW0oKSk6KFc9bnVsbCxyLl9icnVzaGVkQ2VsbEluZGV4PW51bGwpLHJ0KCkpfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuIHIuX2JydXNoZWRDZWxsSW5kZXghPT1udWxsJiZyLl9icnVzaFNlbGVjdGlvbiE9PW51bGx9ZnVuY3Rpb24gTXQoKXtyZXR1cm4hYnQoKXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMF09PT1yLl9icnVzaFNlbGVjdGlvblsxXVswXXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMV09PT1yLl9icnVzaFNlbGVjdGlvblsxXVsxXX1DLmNhbGwoc3QpLGJ0KCkmJnN0Lm1vdmUoVyxyLl9icnVzaFNlbGVjdGlvbik7bGV0IGx0PW51bGwsS3Q9bnVsbDt0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwIT09bnVsbCYmKEt0PUVwKEYuZ2V0KHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXApKS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCEwKSksQy5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IGN0PWx0PT09S3Q/bnVsbDpsdDtpZihjdD09PUt0KXJldHVybjtLdCE9PW51bGwmJkt0LmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITEpLEt0PWN0LEt0IT09bnVsbCYmS3QuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCk7bGV0IFg9S3Q9PT1udWxsP251bGw6S3QuZGF0dW0oKS5zZXNzaW9uR3JvdXA7ci5zZWxlY3RlZFNlc3Npb25Hcm91cD1YfSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIixmdW5jdGlvbihbY3QsWF0pe2xldFtldCxkdF09em8odGhpcykscT1fdChjdCxYLGV0LGR0LDIwKTtsdCE9PXEmJihsdCE9PW51bGwmJmx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksbHQ9cSxsdCE9PW51bGw/KGx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMCksci5jbG9zZXN0U2Vzc2lvbkdyb3VwPWx0LmRhdHVtKCkuc2Vzc2lvbkdyb3VwKTpyLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCl9KS5vbigibW91c2VsZWF2ZSIsZnVuY3Rpb24oW2N0LFhdKXtsdCE9PW51bGwmJihsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGx0PW51bGwsci5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSk7ZnVuY3Rpb24gX3QoY3QsWCxldCxkdCxxKXtsZXQgcHQ9MS8wLGh0PW51bGw7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luRGlzayhVW2N0XVtYXSxldCxkdCxxLCh3dCxrdCk9PntpZihaLmhhcyh3dCkmJmt0PHB0KXtsZXQgaWU9SHQod3QpLmRhdHVtKCk7cHQ9a3QsaHQ9aWUuc2Vzc2lvbkdyb3VwfX0pLGh0PT09bnVsbD9udWxsOkVwKEYuZ2V0KGh0KSl9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiKiIpLmNsYXNzZWQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IiwhMCl9X2NlbGxTY2FsZSh0LHIpe2xldCBuPXRoaXMuX2NvbEV4dGVudCh0KSxpPU9uKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IkxJTkVBUiIpcmV0dXJuIGk7aWYodGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGU9PT0iTE9HIilyZXR1cm4gblswXTw9MCYmblsxXT49MD9pOmNjKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IlFVQU5USUxFIil7bGV0IG89KHJbMV0tclswXSkvMTksYT1JcigyMCkubWFwKHM9PnJbMF0rbypzKTtyZXR1cm4gZWcoKS5kb21haW4oeTMudW5pcSh0aGlzLnNlc3Npb25Hcm91cHMubWFwKHM9PnRoaXMuX2NvbFZhbHVlKHMsdCkpKSkucmFuZ2UoYSl9ZWxzZXtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKHkzLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChvPT50aGlzLl9jb2xWYWx1ZShvLHQpKS5zb3J0KCkpKS5yYW5nZShyKS5wYWRkaW5nKC4xKTt0aHJvdyJVbmtub3duIHNjYWxlIGZvciBjb2x1bW46ICIrdCsiLiBvcHRpb25zOiAiK3RoaXMub3B0aW9uc319X2NvbFZhbHVlKHQscil7cmV0dXJuIEJIKHRoaXMudmlzaWJsZVNjaGVtYSx0LHIpfV9tZXRyaWNWYWx1ZSh0LHIpe3JldHVybiBGSCh0aGlzLnZpc2libGVTY2hlbWEsdCxyKX1fY29sRXh0ZW50KHQpe3JldHVybiBfUCh0aGlzLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQpfX07JG8udGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxzdmcgaWQ9InN2ZyI+PC9zdmc+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAuZnJhbWUgcmVjdCB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjbG9zZXN0IGRhdGEgcG9pbnQgbWFya2VyIHRvIHRoZSBtb3VzZSBwb2ludGVyLiBXZSB1c2UgIWltcG9ydGFudAogICAgICAgICB0byBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4KICAgICAgKi8KICAgICAgLmNsb3Nlc3QtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YSBwb2ludCBtYXJrZXIuIFdlIHVzZSAhaW1wb3J0YW50IHRvCiAgICAgICAgIG92ZXJyaWRlIHRoZSBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIHN0eWxlIG9mIGEgbWFya2VyLiAqLwogICAgICAuc2VsZWN0ZWQtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkby5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsSFRNTEVsZW1lbnQpXSwkby5wcm90b3R5cGUsIl9jb250YWluZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfc3ZnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLCRvLnByb3RvdHlwZSwid2lkdGgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sJG8ucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfYnJ1c2hlZENlbGxJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsIl9icnVzaFNlbGVjdGlvbiIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3Vwcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSwkby5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInZpc2libGVTY2hlbWEuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJG8ucHJvdG90eXBlLCJfdmlzaWJsZVNjaGVtYUNoYW5nZWQiLG51bGwpO0UoW0J0KCJvcHRpb25zLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRvLnByb3RvdHlwZSwiX3JlZHJhdyIsbnVsbCk7JG89RShbeXQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IildLCRvKTt2YXIgZjE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07ZjEudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHRoZSBzY2F0dGVyIHBsb3QgbWF0cml4CiAgICAgICAgICAgICBvdXRwdXRzIHRoZSBjb25maWd1cmVkIG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgc2NhdHRlciBwbG90IG1hdHJpeCAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90CiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0icGxvdCIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDwhLS0gU2hvd3Mgc2Vzc2lvbiBncm91cCBkZXRhaWxzIGZvciB0aGUgY2xpY2tlZCBtYXJrZXIuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZjEucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGYxLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtmMT1FKFt5dCgidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciKV0sZjEpO3ZhciBYZj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zZWxlY3RlZFRhYj0wLHRoaXMuX3RhYmxlVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlRhYmxlIil9LHRoaXMuX3BhcmFsbGVsQ29vcmRzVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlBhcmFsbGVsIENvb3JkcyIpfSx0aGlzLl9zY2F0dGVyUGxvdE1hdHJpeFRhYkNsaWNrZWQ9KCk9Pnt0aGlzLmxvZ0FjdGlvbigiVGFiIENsaWNrZWQiLCJTY2F0dGVyIFBsb3QgTWF0cml4Iil9LHRoaXMubG9nQWN0aW9uPSh0LHIpPT57bGV0IG49d2luZG93LmRhdGFMYXllcnx8W107ZnVuY3Rpb24gaSgpe24ucHVzaChhcmd1bWVudHMpfWkoImV2ZW50Iix0LHtldmVudF9jYXRlZ29yeToiSFBhcmFtcyIsZXZlbnRfbGFiZWw6cn0pfSx0aGlzLmxvZ0FjdGlvbigiUGx1Z2luIExvYWQiKX19O1hmLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIDwhLS0gdmlldy1pZCBjYW4gYmUgdXNlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBsb2NhdGUgYSB0YWIuCiAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGltcGxlbWVudGluZyB0aGUgdmlldwogICAgICAgICAgICAgICB3aXRob3V0IHRoZSAndGYtaHBhcmFtcy0nIHByZWZpeC4gLS0+CiAgICAgICAgICA8cGFwZXItdGFiIG9uLWNsaWNrPSJfdGFibGVUYWJDbGlja2VkIiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4KICAgICAgICAgICAgVEFCTEUgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfcGFyYWxsZWxDb29yZHNUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJwYXJhbGxlbC1jb29yZHMtdmlldyIKICAgICAgICAgID4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfc2NhdHRlclBsb3RNYXRyaXhUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJzY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciCiAgICAgICAgICA+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWYkPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiCiAgICAgICAgICAgICAgICByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpZD0iYnVnLXJlcG9ydCIKICAgICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIEJ1ZyBSZXBvcnQgLyBGZWF0dXJlIFJlcXVlc3QKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlbHBVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbaGVscFVybF1dIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpY29uPSJoZWxwLW91dGxpbmUiCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJWaWV3IGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvcGFwZXItdGFicz4KICAgICAgPC9wYXBlci10b29sYmFyPgogICAgICA8aXJvbi1wYWdlcyBzZWxlY3RlZD0iW1tfc2VsZWN0ZWRUYWJdXSIgY2xhc3M9ImZpdCB0YWItdmlldyI+CiAgICAgICAgPGRpdiBpZD0iMCIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy10YWJsZS12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgICAgZW5hYmxlLXNob3ctbWV0cmljcwogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMiIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLXBhZ2VzPgogICAgPC9wYXBlci1oZWFkZXItcGFuZWw+CgogICAgPHN0eWxlPgogICAgICAudGFiLXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAudGFiLWJhciB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKAogICAgICAgICAgLS10Yi10b29sYmFyLWJhY2tncm91bmQtY29sb3IsCiAgICAgICAgICB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKQogICAgICAgICk7CiAgICAgIH0KICAgICAgLnRhYiB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGYtaHBhcmFtcy10YWJsZS12aWV3IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsgLyogRW5zdXJlIHRoYXQgaWNvbnMgc3RheSBhbGlnbmVkICovCiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgICAjYnVnLXJlcG9ydCB7CiAgICAgICAgYm9yZGVyOiBzb2xpZCBibGFjazsKICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkczsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayBhIHsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWGYucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFhmLnByb3RvdHlwZSwiaGVscFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImJ1Z1JlcG9ydFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFhmLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWGYucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFhmLnByb3RvdHlwZSwiX3NlbGVjdGVkVGFiIix2b2lkIDApO1hmPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxYZik7dmFyIHJoPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlbG9hZCgpe3RoaXMuJFsicXVlcnktcGFuZSJdLnJlbG9hZCgpfX07cmgudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dD4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgPHRmLWhwYXJhbXMtcXVlcnktcGFuZQogICAgICAgICAgaWQ9InF1ZXJ5LXBhbmUiCiAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgY29uZmlndXJhdGlvbj0ie3tfY29uZmlndXJhdGlvbn19IgogICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Int7X3Nlc3Npb25Hcm91cHN9fSIKICAgICAgICAgIGRhdGEtbG9hZGVkLXdpdGgtbm9uLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgICBkYXRhLWxvYWRlZC13aXRoLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1xdWVyeS1wYW5lPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGhwYXJhbXMgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhwYXJhbXMgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgRXZlbnQgZmlsZXMgYXJlIHN0aWxsIGJlaW5nIGxvYWRlZCAodHJ5IHJlbG9hZGluZyB0aGlzIHBhZ2UpLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZQogICAgICAgICAgICBpZD0ic2Vzc2lvbnMtcGFuZSIKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGhlbHAtdXJsPSJbW2hlbHBVcmxdXSIKICAgICAgICAgICAgYnVnLXJlcG9ydC11cmw9IltbYnVnUmVwb3J0VXJsXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW19jb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW19zZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIGhwYXJhbXMtc3BsaXQtbGF5b3V0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtaW4td2lkdGg6IDEwJTsKICAgICAgfQoKICAgICAgLmNlbnRlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsdTMpXSxyaC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJidWdSZXBvcnRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scmgucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scmgucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHJoLnByb3RvdHlwZSwiX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scmgucHJvdG90eXBlLCJfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCk7cmg9RShbeXQoInRmLWhwYXJhbXMtbWFpbiIpXSxyaCk7dmFyIHBocj1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgidGVuc29yYm9hcmRDb2xhYiIpPT09InRydWUiLGxWPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9iYWNrZW5kPW5ldyB1MyhuZXcgQWUscGhyKX1yZWxvYWQoKXt0aGlzLiRbImhwYXJhbXMtbWFpbiJdLnJlbG9hZCgpfX07bFYudGVtcGxhdGU9UWAKICAgIDwhLS0gVGVuc29yQm9hcmQgZG9lcyBub3Qgc3BlY2lmeSBhbiBleHBlcmltZW50TmFtZS4gQ3VycmVudGx5IGl0IG9ubHkKICAgICAgICAgc3VwcG9ydHMgb25lIGV4cGVyaW1lbnQgcGVyIGludm9jYXRpb24uIC0tPgogICAgPHRmLWhwYXJhbXMtbWFpbgogICAgICBpZD0iaHBhcmFtcy1tYWluIgogICAgICBiYWNrZW5kPSJbW19iYWNrZW5kXV0iCiAgICAgIGV4cGVyaW1lbnQtbmFtZT0iIgogICAgPgogICAgPC90Zi1ocGFyYW1zLW1haW4+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsVi5wcm90b3R5cGUsIl9iYWNrZW5kIix2b2lkIDApO2xWPUUoW3l0KCJ0Zi1ocGFyYW1zLWRhc2hib2FyZCIpXSxsVik7dmFyIHAxPUVlKE9lKCksMSk7dmFyIF9uPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdHVhbFNpemU9ITEsdGhpcy5icmlnaHRuZXNzQWRqdXN0bWVudD0uNSx0aGlzLmNvbnRyYXN0UGVyY2VudGFnZT0wLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9pbWFnZUNhbmNlbGxlcj1uZXcgYW4sdGhpcy5fc3RlcHM9W10sdGhpcy5faXNJbWFnZUxvYWRpbmc9ITF9Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1nZXQgX2hhc0F0TGVhc3RPbmVTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4wfWdldCBfaGFzTXVsdGlwbGVTdGVwcygpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MX1nZXQgX2N1cnJlbnRTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHMscj10aGlzLl9zdGVwSW5kZXg7cmV0dXJuIHRbcl18fG51bGx9Z2V0IF9zdGVwVmFsdWUoKXt2YXIgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3MyKHQud2FsbF90aW1lKToiIn1nZXQgX21heFN0ZXBJbmRleCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiB0Lmxlbmd0aC0xfWdldCBfc2FtcGxlVGV4dCgpe3ZhciB0PXRoaXMuc2FtcGxlO3JldHVybmAke3QrMX1gfWdldCBfaGFzTXVsdGlwbGVTYW1wbGVzKCl7dmFyIHQ9dGhpcy5vZlNhbXBsZXM7cmV0dXJuIHQ+MX1fZ2V0QXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuYWN0dWFsU2l6ZT8idHJ1ZSI6ImZhbHNlIn1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxyPV9lKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiLHQpLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHQucXVlcnkpO3IuYXBwZW5kKCJ0cyIsdC53YWxsX3RpbWUpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImltYWdlcyIsIi9pbmRpdmlkdWFsSW1hZ2UiLHIpO3JldHVybnt3YWxsX3RpbWU6bmV3IERhdGUodC53YWxsX3RpbWUqMWUzKSxzdGVwOnQuc3RlcCx1cmw6bn19X3VwZGF0ZUltYWdlVXJsKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXAscj10aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50LG49dGhpcy5jb250cmFzdFBlcmNlbnRhZ2U7aWYoIXQpcmV0dXJuO2xldCBpPW5ldyBJbWFnZTt0aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxBbGwoKSxpLm9ubG9hZD1pLm9uZXJyb3I9dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsbGFibGUobz0+e2lmKG8uY2FuY2VsbGVkKXJldHVybjtsZXQgYT10aGlzLiQkKCIjbWFpbi1pbWFnZS1jb250YWluZXIiKTthJiYoYS50ZXh0Q29udGVudD0iIix6dChhKS5hcHBlbmRDaGlsZChpKSksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpfSkuYmluZCh0aGlzKSxpLnN0eWxlLmZpbHRlcj1gY29udHJhc3QoJHtufSUpIGAsaS5zdHlsZS5maWx0ZXIrPWBicmlnaHRuZXNzKCR7cn0pYCx0aGlzLnNldCgiX2lzSW1hZ2VMb2FkaW5nIiwhMCksaS5zcmM9dC51cmx9X2hhbmRsZVRhcCh0KXt0aGlzLnNldCgiYWN0dWFsU2l6ZSIsIXRoaXMuYWN0dWFsU2l6ZSl9X3RvTG9jYWxlU3RyaW5nKHQpe3JldHVybiB0LnRvTG9jYWxlU3RyaW5nKCl9fTtfbi50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgZGF0ZXRpbWUiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc0ltYWdlTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8IS0tIFNlbWFudGljYWxseSBhIGJ1dHRvbiBidXQgPGltZz4gaW5zaWRlIGEgPGJ1dHRvbj4gZGlzYWxsb3dzIHVzZXIgdG8gZG8KICAgIGFuIGludGVyZXN0aW5nIG9wZXJhdGlvbiBsaWtlICJDb3B5IEltYWdlIiBpbiBub24tQ2hyb21pdW0gYnJvd3NlcnMuIC0tPgogICAgPGEKICAgICAgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIgogICAgICByb2xlPSJidXR0b24iCiAgICAgIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIKICAgICAgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIgogICAgICBvbi10YXA9Il9oYW5kbGVUYXAiCiAgICA+PC9hPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAvKiogTWFrZSBidXR0b24gYSBkaXYuICovCiAgICAgIGJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IEdldCByaWQgb2YgZG90dGVkIGxpbmUgaW5zaWRlIGJ1dHRvbi4gKi8KICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IFNpbXVsYXRlIENocm9tZSdzIG91dGVyIGdsb3cgb24gYnV0dG9uIHdoZW4gZm9jdXNlZC4gKi8KICAgICAgYnV0dG9uOi1tb3otZm9jdXNyaW5nIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMXB4IDJweCBIaWdobGlnaHQ7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDAgMTVweCA0MHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLyoqIFdoZW4gYWN0dWFsIHNpemUgc2hvd24gaXMgb24sIHVzZSB0aGUgYWN0dWFsIGltYWdlIHdpZHRoLiAqLwogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1zcGlubmVyLWxpdGUgewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKgogICAgICAgICAqIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUKICAgICAgICAgKiBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zCiAgICAgICAgICogd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwgYW5kCiAgICAgICAgICogYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZgogICAgICAgICAqIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgICAgICAgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMjRweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJvZlNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxfbi5wcm90b3R5cGUsImFjdHVhbFNpemUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxfbi5wcm90b3R5cGUsImNvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLF9uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfbWV0YWRhdGFDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfaW1hZ2VDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxfbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sX24ucHJvdG90eXBlLCJfaXNJbWFnZUxvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU3RlcHMiLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW1J0KCJfc3RlcHMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9tYXhTdGVwSW5kZXgiLG51bGwpO0UoW1J0KCJzYW1wbGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zYW1wbGVUZXh0IixudWxsKTtFKFtSdCgib2ZTYW1wbGVzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU2FtcGxlcyIsbnVsbCk7RShbQnQoInJ1biIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpO0UoW0J0KCJfY3VycmVudFN0ZXAiLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsImNvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJfdXBkYXRlSW1hZ2VVcmwiLG51bGwpO19uPUUoW3l0KCJ0Zi1pbWFnZS1sb2FkZXIiKV0sX24pO3ZhciBJbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudD0xLHRoaXMuX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2U9MTAwLHRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PTEsdGhpcy5fY29udHJhc3RQZXJjZW50YWdlPTEwMCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWV9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkSW1hZ2VzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihwMS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49cDEubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSW1hZ2VzKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X3Jlc2V0QnJpZ2h0bmVzcygpe3RoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1fcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfYnJpZ2h0bmVzc0lzRGVmYXVsdCgpe3ZhciB0PXRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50O3JldHVybiB0PT09dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fWdldCBfY29udHJhc3RJc0RlZmF1bHQoKXt2YXIgdD10aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U7cmV0dXJuIHQ9PT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtsZXQgbz1wMS5tYXBWYWx1ZXModCxjPT5PYmplY3Qua2V5cyhjKSksYT1RbChvLHIsbik7ZnVuY3Rpb24gcyhjKXtsZXQgdT10W2MucnVuXVtjLnRhZ10uc2FtcGxlcztyZXR1cm4gcDEucmFuZ2UodSkubWFwKGg9Pk9iamVjdC5hc3NpZ24oe30sYyx7c2FtcGxlOmgsb2ZTYW1wbGVzOnV9KSl9cmV0dXJuIGEubWFwKGM9Pk9iamVjdC5hc3NpZ24oe30sYyx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGMuaXRlbXMubWFwKHMpKX0pKX1fdGFnTWV0YWRhdGEodCxyLG4pe3JldHVybiB0W3JdW25dfX07SW8udGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZTwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5CcmlnaHRuZXNzIGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iMiIKICAgICAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgICAgICBwaW4KICAgICAgICAgICAgICAgIHN0ZXA9IjAuMDEiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRCcmlnaHRuZXNzIgogICAgICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2JyaWdodG5lc3NJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSI1MDAiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2NvbnRyYXN0UGVyY2VudGFnZX19IgogICAgICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRDb250cmFzdCIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19jb250cmFzdElzRGVmYXVsdF1dIgogICAgICAgICAgICAgICAgPlJlc2V0PC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBpbWFnZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWltYWdlLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIG9mLXNhbXBsZXM9IltbaXRlbS5vZlNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgYWN0dWFsLXNpemU9IltbX2FjdHVhbFNpemVdXSIKICAgICAgICAgICAgICAgICAgYnJpZ2h0bmVzcy1hZGp1c3RtZW50PSJbW19icmlnaHRuZXNzQWRqdXN0bWVudF1dIgogICAgICAgICAgICAgICAgICBjb250cmFzdC1wZXJjZW50YWdlPSJbW19jb250cmFzdFBlcmNlbnRhZ2VdXSIKICAgICAgICAgICAgICAgID48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElvLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJby5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9hY3R1YWxTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2JyaWdodG5lc3NBZGp1c3RtZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2NvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJby5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW8ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9icmlnaHRuZXNzQWRqdXN0bWVudCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9icmlnaHRuZXNzSXNEZWZhdWx0IixudWxsKTtFKFtSdCgiX2NvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9jb250cmFzdElzRGVmYXVsdCIsbnVsbCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLElvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0lvPUUoW3l0KCJ0Zi1pbWFnZS1kYXNoYm9hcmQiKV0sSW8pO3ZhciBzeD1FZShPZSgpLDEpO3ZhciBkMTsoZnVuY3Rpb24oZSl7ZVtlLkNBTkNFTExFRD0xXT0iQ0FOQ0VMTEVEIn0pKGQxfHwoZDE9e30pKTt2YXIgY1Y7KGZ1bmN0aW9uKGUpe2VbZS5WRVJURVg9MV09IlZFUlRFWCIsZVtlLkZBQ0U9Ml09IkZBQ0UiLGVbZS5DT0xPUj0zXT0iQ09MT1IifSkoY1Z8fChjVj17fSkpO3ZhciBxY3Q7KGZ1bmN0aW9uKGUpe2UuVkVSVEVYPSJmbG9hdDMyIixlLkZBQ0U9ImludDMyIixlLkNPTE9SPSJ1aW50OCJ9KShxY3R8fChxY3Q9e30pKTt2YXIgSVA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9yZXF1ZXN0TWFuYWdlcj10fXJlbG9hZCh0LHIsbil7cmV0dXJuIHRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9mZXRjaE1ldGFkYXRhKHQscixuKX1fZmV0Y2hEYXRhQnlTdGVwKHQscixuLGksbyxhKXtsZXQgcz1fZSgpLnBsdWdpblJvdXRlKCJtZXNoIiwiL2RhdGEiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LGNvbnRlbnRfdHlwZTpuLHNhbXBsZTpTdHJpbmcoaSksc3RlcDpTdHJpbmcobyl9KSksbD1mdW5jdGlvbih1KXtsZXQgZj1bXTtmb3IobGV0IHA9MDtwPHUubGVuZ3RoLzM7cCsrKXtsZXQgZD1bXTtmb3IobGV0IGc9MDtnPDM7ZysrKWQucHVzaCh1W3AqMytnXSk7Zi5wdXNoKGQpfXJldHVybiBmfSxjPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh1PT57aWYodS5jYW5jZWxsZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pO2xldCBoPXUudmFsdWU7c3dpdGNoKG4pe2Nhc2UiVkVSVEVYIjphLnZlcnRpY2VzPWwobmV3IEZsb2F0MzJBcnJheShoKSk7YnJlYWs7Y2FzZSJGQUNFIjphLmZhY2VzPWwobmV3IEludDMyQXJyYXkoaCkpO2JyZWFrO2Nhc2UiQ09MT1IiOmEuY29sb3JzPWwobmV3IFVpbnQ4QXJyYXkoaCkpO2JyZWFrfXJldHVybiBhfSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKHMse21ldGhvZDoiR0VUIixoZWFkZXJzOntyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixjb250ZW50VHlwZTpxY3Rbbl19fSkudGhlbih1PT51LmFycmF5QnVmZmVyKCkpLnRoZW4oYyl9ZmV0Y2hEYXRhKHQscixuLGkpe2xldCBvPVtdLGE9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMoY1YpLmZvckVhY2gocz0+e2xldCBsPTE8PGNWW3NdO3QuY29tcG9uZW50cyZsJiZvLnB1c2godGhpcy5fZmV0Y2hEYXRhQnlTdGVwKHIsbixzLGksdC5zdGVwLGEpKX0pLFByb21pc2UuYWxsKG8pfV9mZXRjaE1ldGFkYXRhKHQscixuKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IGk9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LHNhbXBsZTpufSkpLG89dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGE9PmEuY2FuY2VsbGVkP1Byb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pOmEudmFsdWUpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChpKS50aGVuKGE9PmEuanNvbigpKS50aGVuKG8pLnRoZW4odGhpcy5fcHJvY2Vzc01ldGFkYXRhLmJpbmQodGhpcykpfV9wcm9jZXNzTWV0YWRhdGEodCl7aWYoIXQpcmV0dXJuO2xldCByPW5ldyBNYXA7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBvPXRbaV07ci5oYXMoby5zdGVwKXx8ci5zZXQoby5zdGVwLFtdKSxyLmdldChvLnN0ZXApLnB1c2gobyl9bGV0IG49W107cmV0dXJuIHIuZm9yRWFjaChpPT57bGV0IG89dGhpcy5fY3JlYXRlU3RlcERhdHVtKGlbMF0pO24ucHVzaChvKX0pLG59X2NyZWF0ZVN0ZXBEYXR1bSh0KXtyZXR1cm57d2FsbF90aW1lOm5ldyBEYXRlKHQud2FsbF90aW1lKjFlMyksc3RlcDp0LnN0ZXAsY29uZmlnOnQuY29uZmlnLGNvbnRlbnRfdHlwZTp0LmNvbnRlbnRfdHlwZSxjb21wb25lbnRzOnQuY29tcG9uZW50c319fTt2YXIgd009e307S3Mod00se0FDRVNGaWxtaWNUb25lTWFwcGluZzooKT0+cGZlLEFkZEVxdWF0aW9uOigpPT5NMSxBZGRPcGVyYXRpb246KCk9PmNmZSxBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZTooKT0+a2h0LEFkZGl0aXZlQmxlbmRpbmc6KCk9Pk11dCxBbHBoYUZvcm1hdDooKT0+eGZlLEFsd2F5c0RlcHRoOigpPT5yZmUsQWx3YXlzU3RlbmNpbEZ1bmM6KCk9Pk9mZSxBbWJpZW50TGlnaHQ6KCk9Pkw2LEFtYmllbnRMaWdodFByb2JlOigpPT56VSxBbmltYXRpb25DbGlwOigpPT5RMSxBbmltYXRpb25Mb2FkZXI6KCk9Pm9odCxBbmltYXRpb25NaXhlcjooKT0+VlUsQW5pbWF0aW9uT2JqZWN0R3JvdXA6KCk9PkhVLEFuaW1hdGlvblV0aWxzOigpPT5ZbixBcmNDdXJ2ZTooKT0+bDYsQXJyYXlDYW1lcmE6KCk9Pm42LEFycm93SGVscGVyOigpPT5NaHQsQXVkaW86KCk9PkQ2LEF1ZGlvQW5hbHlzZXI6KCk9PkZVLEF1ZGlvQ29udGV4dDooKT0+emh0LEF1ZGlvTGlzdGVuZXI6KCk9PmNodCxBdWRpb0xvYWRlcjooKT0+RFUsQXhlc0hlbHBlcjooKT0+dk0sQXhpc0hlbHBlcjooKT0+SzByLEJhY2tTaWRlOigpPT5JaSxCYXNpY0RlcHRoUGFja2luZzooKT0+UmZlLEJhc2ljU2hhZG93TWFwOigpPT5taHIsQmluYXJ5VGV4dHVyZUxvYWRlcjooKT0+ZV9yLEJvbmU6KCk9PnNNLEJvb2xlYW5LZXlmcmFtZVRyYWNrOigpPT5hbSxCb3VuZGluZ0JveEhlbHBlcjooKT0+WjByLEJveDI6KCk9PiQwLEJveDM6KCk9PnRhLEJveDNIZWxwZXI6KCk9PndodCxCb3hCdWZmZXJHZW9tZXRyeTooKT0+UWYsQm94R2VvbWV0cnk6KCk9PlFmLEJveEhlbHBlcjooKT0+eU0sQnVmZmVyQXR0cmlidXRlOigpPT5KZSxCdWZmZXJHZW9tZXRyeTooKT0+UGUsQnVmZmVyR2VvbWV0cnlMb2FkZXI6KCk9PlJVLEJ5dGVUeXBlOigpPT5tZmUsQ2FjaGU6KCk9PnR4LENhbWVyYTooKT0+UjEsQ2FtZXJhSGVscGVyOigpPT5iaHQsQ2FudmFzUmVuZGVyZXI6KCk9Pm5fcixDYW52YXNUZXh0dXJlOigpPT54VSxDYXRtdWxsUm9tQ3VydmUzOigpPT5jNixDaW5lb25Ub25lTWFwcGluZzooKT0+ZmZlLENpcmNsZUJ1ZmZlckdlb21ldHJ5OigpPT5GMSxDaXJjbGVHZW9tZXRyeTooKT0+RjEsQ2xhbXBUb0VkZ2VXcmFwcGluZzooKT0+Sm8sQ2xvY2s6KCk9Pm1NLENvbG9yOigpPT5uZSxDb2xvcktleWZyYW1lVHJhY2s6KCk9Pk02LENvbXByZXNzZWRUZXh0dXJlOigpPT5hNixDb21wcmVzc2VkVGV4dHVyZUxvYWRlcjooKT0+YWh0LENvbmVCdWZmZXJHZW9tZXRyeTooKT0+QjEsQ29uZUdlb21ldHJ5OigpPT5CMSxDdWJlQ2FtZXJhOigpPT5KMyxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6KCk9Pm54LEN1YmVSZWZyYWN0aW9uTWFwcGluZzooKT0+aXgsQ3ViZVRleHR1cmU6KCk9PkgwLEN1YmVUZXh0dXJlTG9hZGVyOigpPT5UVSxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzooKT0+eE0sQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6KCk9Pno2LEN1YmljQmV6aWVyQ3VydmU6KCk9PmNNLEN1YmljQmV6aWVyQ3VydmUzOigpPT51NixDdWJpY0ludGVycG9sYW50OigpPT5TVSxDdWxsRmFjZUJhY2s6KCk9PlN1dCxDdWxsRmFjZUZyb250OigpPT5WaGUsQ3VsbEZhY2VGcm9udEJhY2s6KCk9PmRocixDdWxsRmFjZU5vbmU6KCk9PkhoZSxDdXJ2ZTooKT0+ZnMsQ3VydmVQYXRoOigpPT53VSxDdXN0b21CbGVuZGluZzooKT0+cWhlLEN1c3RvbVRvbmVNYXBwaW5nOigpPT5kZmUsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kcmljYWw6KCk9Pm1odCxEYXRhVGV4dHVyZTooKT0+SmQsRGF0YVRleHR1cmUyREFycmF5OigpPT50TSxEYXRhVGV4dHVyZTNEOigpPT5yNixEYXRhVGV4dHVyZUxvYWRlcjooKT0+Q1UsRGF0YVV0aWxzOigpPT5UaHQsRGVjcmVtZW50U3RlbmNpbE9wOigpPT5UaHIsRGVjcmVtZW50V3JhcFN0ZW5jaWxPcDooKT0+QWhyLERlZmF1bHRMb2FkaW5nTWFuYWdlcjooKT0+aXBlLERlcHRoRm9ybWF0OigpPT56MCxEZXB0aFN0ZW5jaWxGb3JtYXQ6KCk9PmsxLERlcHRoVGV4dHVyZTooKT0+bk0sRGlyZWN0aW9uYWxMaWdodDooKT0+STYsRGlyZWN0aW9uYWxMaWdodEhlbHBlcjooKT0+eGh0LERpc2NyZXRlSW50ZXJwb2xhbnQ6KCk9Pk1VLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5IMSxEb2RlY2FoZWRyb25HZW9tZXRyeTooKT0+SDEsRG91YmxlU2lkZTooKT0+TDEsRHN0QWxwaGFGYWN0b3I6KCk9PktoZSxEc3RDb2xvckZhY3RvcjooKT0+SmhlLER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU6KCk9PkgwcixEeW5hbWljQ29weVVzYWdlOigpPT5VaHIsRHluYW1pY0RyYXdVc2FnZTooKT0+WTMsRHluYW1pY1JlYWRVc2FnZTooKT0+QmhyLEVkZ2VzR2VvbWV0cnk6KCk9PnM2LEVkZ2VzSGVscGVyOigpPT5KMHIsRWxsaXBzZUN1cnZlOigpPT5WMSxFcXVhbERlcHRoOigpPT5pZmUsRXF1YWxTdGVuY2lsRnVuYzooKT0+a2hyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOigpPT5ZUCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzooKT0+alAsRXVsZXI6KCk9PnRtLEV2ZW50RGlzcGF0Y2hlcjooKT0+VXMsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OigpPT5oaCxFeHRydWRlR2VvbWV0cnk6KCk9PmhoLEZhY2VDb2xvcnM6KCk9PlAwcixGaWxlTG9hZGVyOigpPT5KYyxGbGF0U2hhZGluZzooKT0+QWh0LEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PmRVLEZsb2F0MzJBdHRyaWJ1dGU6KCk9PlgwcixGbG9hdDMyQnVmZmVyQXR0cmlidXRlOigpPT54ZSxGbG9hdDY0QXR0cmlidXRlOigpPT4kMHIsRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZTooKT0+bVUsRmxvYXRUeXBlOigpPT5qZCxGb2c6KCk9PnoxLEZvZ0V4cDI6KCk9Pk8xLEZvbnQ6KCk9PnVfcixGb250TG9hZGVyOigpPT5jX3IsRnJhbWVidWZmZXJUZXh0dXJlOigpPT52VSxGcm9udFNpZGU6KCk9PkkxLEZydXN0dW06KCk9Pk4xLEdMQnVmZmVyQXR0cmlidXRlOigpPT5xVSxHTFNMMTooKT0+R2hyLEdMU0wzOigpPT5LdXQsR3JlYXRlckRlcHRoOigpPT5hZmUsR3JlYXRlckVxdWFsRGVwdGg6KCk9Pm9mZSxHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYzooKT0+T2hyLEdyZWF0ZXJTdGVuY2lsRnVuYzooKT0+TmhyLEdyaWRIZWxwZXI6KCk9PllVLEdyb3VwOigpPT5YZCxIYWxmRmxvYXRUeXBlOigpPT5DMSxIZW1pc3BoZXJlTGlnaHQ6KCk9PlQ2LEhlbWlzcGhlcmVMaWdodEhlbHBlcjooKT0+eWh0LEhlbWlzcGhlcmVMaWdodFByb2JlOigpPT5PVSxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5HMSxJY29zYWhlZHJvbkdlb21ldHJ5OigpPT5HMSxJbWFnZUJpdG1hcExvYWRlcjooKT0+TlUsSW1hZ2VMb2FkZXI6KCk9PmV4LEltYWdlVXRpbHM6KCk9PktmLEltbWVkaWF0ZVJlbmRlck9iamVjdDooKT0+aF9yLEluY3JlbWVudFN0ZW5jaWxPcDooKT0+RWhyLEluY3JlbWVudFdyYXBTdGVuY2lsT3A6KCk9PkNocixJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnJtLEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OigpPT5ONixJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+VVUsSW5zdGFuY2VkTWVzaDooKT0+aTYsSW50MTZBdHRyaWJ1dGU6KCk9PkcwcixJbnQxNkJ1ZmZlckF0dHJpYnV0ZTooKT0+ZlUsSW50MzJBdHRyaWJ1dGU6KCk9PlkwcixJbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+cFUsSW50OEF0dHJpYnV0ZTooKT0+VjByLEludDhCdWZmZXJBdHRyaWJ1dGU6KCk9PmNVLEludFR5cGU6KCk9Pl9mZSxJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+ZW0sSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnRwLEludGVycG9sYW50OigpPT5maCxJbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5LUCxJbnRlcnBvbGF0ZUxpbmVhcjooKT0+WlAsSW50ZXJwb2xhdGVTbW9vdGg6KCk9PnJVLEludmVydFN0ZW5jaWxPcDooKT0+UGhyLEpTT05Mb2FkZXI6KCk9PmlfcixLZWVwU3RlbmNpbE9wOigpPT5uVSxLZXlmcmFtZVRyYWNrOigpPT5EbCxMT0Q6KCk9Pl9VLExhdGhlQnVmZmVyR2VvbWV0cnk6KCk9PlcxLExhdGhlR2VvbWV0cnk6KCk9PlcxLExheWVyczooKT0+WDMsTGVuc0ZsYXJlOigpPT5hX3IsTGVzc0RlcHRoOigpPT5uZmUsTGVzc0VxdWFsRGVwdGg6KCk9PmlVLExlc3NFcXVhbFN0ZW5jaWxGdW5jOigpPT5SaHIsTGVzc1N0ZW5jaWxGdW5jOigpPT5MaHIsTGlnaHQ6KCk9Pk9sLExpZ2h0UHJvYmU6KCk9PnJ4LExpbmU6KCk9PmNoLExpbmUzOigpPT5HVSxMaW5lQmFzaWNNYXRlcmlhbDooKT0+R2ksTGluZUN1cnZlOigpPT5VMSxMaW5lQ3VydmUzOigpPT5iVSxMaW5lRGFzaGVkTWF0ZXJpYWw6KCk9Pnc2LExpbmVMb29wOigpPT5vNixMaW5lUGllY2VzOigpPT5DMHIsTGluZVNlZ21lbnRzOigpPT5BYSxMaW5lU3RyaXA6KCk9PlQwcixMaW5lYXJFbmNvZGluZzooKT0+UWQsTGluZWFyRmlsdGVyOigpPT5paSxMaW5lYXJJbnRlcnBvbGFudDooKT0+UzYsTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOigpPT54aHIsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+dmhyLExpbmVhck1pcG1hcExpbmVhckZpbHRlcjooKT0+b3gsTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjooKT0+TGh0LExpbmVhclRvbmVNYXBwaW5nOigpPT51ZmUsTG9hZGVyOigpPT5lYSxMb2FkZXJVdGlsczooKT0+ZE0sTG9hZGluZ01hbmFnZXI6KCk9PkU2LExvb3BPbmNlOigpPT5QZmUsTG9vcFBpbmdQb25nOigpPT5MZmUsTG9vcFJlcGVhdDooKT0+SWZlLEx1bWluYW5jZUFscGhhRm9ybWF0OigpPT53ZmUsTHVtaW5hbmNlRm9ybWF0OigpPT5iZmUsTU9VU0U6KCk9PkswLE1hdGVyaWFsOigpPT5xaSxNYXRlcmlhbExvYWRlcjooKT0+a1UsTWF0aDooKT0+aWZyLE1hdGhVdGlsczooKT0+aWZyLE1hdHJpeDM6KCk9PmtpLE1hdHJpeDQ6KCk9Pk1lLE1heEVxdWF0aW9uOigpPT5BdXQsTWVzaDooKT0+dGksTWVzaEJhc2ljTWF0ZXJpYWw6KCk9PnNoLE1lc2hEZXB0aE1hdGVyaWFsOigpPT5lTSxNZXNoRGlzdGFuY2VNYXRlcmlhbDooKT0+ck0sTWVzaEZhY2VNYXRlcmlhbDooKT0+TDByLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6KCk9Png2LE1lc2hNYXRjYXBNYXRlcmlhbDooKT0+YjYsTWVzaE5vcm1hbE1hdGVyaWFsOigpPT52NixNZXNoUGhvbmdNYXRlcmlhbDooKT0+XzYsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6KCk9Pmc2LE1lc2hTdGFuZGFyZE1hdGVyaWFsOigpPT5wTSxNZXNoVG9vbk1hdGVyaWFsOigpPT55NixNaW5FcXVhdGlvbjooKT0+Q3V0LE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6KCk9PiRQLE1peE9wZXJhdGlvbjooKT0+bGZlLE11bHRpTWF0ZXJpYWw6KCk9PmswcixNdWx0aXBseUJsZW5kaW5nOigpPT5UdXQsTXVsdGlwbHlPcGVyYXRpb246KCk9Pk82LE5lYXJlc3RGaWx0ZXI6KCk9PkxpLE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI6KCk9PnlocixOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+X2hyLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6KCk9PmFVLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOigpPT5vVSxOZXZlckRlcHRoOigpPT5lZmUsTmV2ZXJTdGVuY2lsRnVuYzooKT0+SWhyLE5vQmxlbmRpbmc6KCk9PiRkLE5vQ29sb3JzOigpPT5BMHIsTm9Ub25lTWFwcGluZzooKT0+S2QsTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlOigpPT4kVSxOb3JtYWxCbGVuZGluZzooKT0+VjMsTm90RXF1YWxEZXB0aDooKT0+c2ZlLE5vdEVxdWFsU3RlbmNpbEZ1bmM6KCk9PkRocixOdW1iZXJLZXlmcmFtZVRyYWNrOigpPT5aMSxPYmplY3QzRDooKT0+b3IsT2JqZWN0TG9hZGVyOigpPT5zaHQsT2JqZWN0U3BhY2VOb3JtYWxNYXA6KCk9PkRmZSxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6KCk9PlcwLE9jdGFoZWRyb25HZW9tZXRyeTooKT0+VzAsT25lRmFjdG9yOigpPT5qaGUsT25lTWludXNEc3RBbHBoYUZhY3RvcjooKT0+WmhlLE9uZU1pbnVzRHN0Q29sb3JGYWN0b3I6KCk9PlFoZSxPbmVNaW51c1NyY0FscGhhRmFjdG9yOigpPT5JaHQsT25lTWludXNTcmNDb2xvckZhY3RvcjooKT0+JGhlLE9ydGhvZ3JhcGhpY0NhbWVyYTooKT0+RDEsUENGU2hhZG93TWFwOigpPT5DaHQsUENGU29mdFNoYWRvd01hcDooKT0+VWhlLFBNUkVNR2VuZXJhdG9yOigpPT5lNixQYXJhbWV0cmljR2VvbWV0cnk6KCk9PnNfcixQYXJ0aWNsZTooKT0+TjByLFBhcnRpY2xlQmFzaWNNYXRlcmlhbDooKT0+ejByLFBhcnRpY2xlU3lzdGVtOigpPT5EMHIsUGFydGljbGVTeXN0ZW1NYXRlcmlhbDooKT0+RjByLFBhdGg6KCk9PnExLFBlcnNwZWN0aXZlQ2FtZXJhOigpPT5VaSxQbGFuZTooKT0+JGMsUGxhbmVCdWZmZXJHZW9tZXRyeTooKT0+VjAsUGxhbmVHZW9tZXRyeTooKT0+VjAsUGxhbmVIZWxwZXI6KCk9PlNodCxQb2ludENsb3VkOigpPT5SMHIsUG9pbnRDbG91ZE1hdGVyaWFsOigpPT5PMHIsUG9pbnRMaWdodDooKT0+UDYsUG9pbnRMaWdodEhlbHBlcjooKT0+X2h0LFBvaW50czooKT0+aW0sUG9pbnRzTWF0ZXJpYWw6KCk9Pm5tLFBvbGFyR3JpZEhlbHBlcjooKT0+dmh0LFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+dWgsUG9seWhlZHJvbkdlb21ldHJ5OigpPT51aCxQb3NpdGlvbmFsQXVkaW86KCk9PnVodCxQcm9wZXJ0eUJpbmRpbmc6KCk9PkNyLFByb3BlcnR5TWl4ZXI6KCk9PkJVLFF1YWRyYXRpY0JlemllckN1cnZlOigpPT51TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6KCk9PmhNLFF1YXRlcm5pb246KCk9PnlpLFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrOigpPT5YMCxRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ6KCk9PkVVLFJFVklTSU9OOigpPT5qVSxSR0JBRGVwdGhQYWNraW5nOigpPT5OZmUsUkdCQUZvcm1hdDooKT0+UW8sUkdCQUludGVnZXJGb3JtYXQ6KCk9PkNmZSxSR0JBX0FTVENfMTB4MTBfRm9ybWF0OigpPT5ZdXQsUkdCQV9BU1RDXzEweDVfRm9ybWF0OigpPT5xdXQsUkdCQV9BU1RDXzEweDZfRm9ybWF0OigpPT5HdXQsUkdCQV9BU1RDXzEweDhfRm9ybWF0OigpPT5XdXQsUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdDooKT0+anV0LFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ6KCk9Plh1dCxSR0JBX0FTVENfNHg0X0Zvcm1hdDooKT0+RHV0LFJHQkFfQVNUQ181eDRfRm9ybWF0OigpPT5PdXQsUkdCQV9BU1RDXzV4NV9Gb3JtYXQ6KCk9Pnp1dCxSR0JBX0FTVENfNng1X0Zvcm1hdDooKT0+RnV0LFJHQkFfQVNUQ182eDZfRm9ybWF0OigpPT5CdXQsUkdCQV9BU1RDXzh4NV9Gb3JtYXQ6KCk9Pkh1dCxSR0JBX0FTVENfOHg2X0Zvcm1hdDooKT0+VnV0LFJHQkFfQVNUQ184eDhfRm9ybWF0OigpPT5VdXQsUkdCQV9CUFRDX0Zvcm1hdDooKT0+JHV0LFJHQkFfRVRDMl9FQUNfRm9ybWF0OigpPT5OdXQsUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0OigpPT5rdXQsUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0OigpPT5MdXQsUkdCQV9TM1RDX0RYVDFfRm9ybWF0OigpPT5RVixSR0JBX1MzVENfRFhUM19Gb3JtYXQ6KCk9PnRVLFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdDooKT0+ZVUsUkdCX0VUQzFfRm9ybWF0OigpPT5BZmUsUkdCX0VUQzJfRm9ybWF0OigpPT5SdXQsUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQ6KCk9Pkl1dCxSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdDooKT0+UHV0LFJHQl9TM1RDX0RYVDFfRm9ybWF0OigpPT5KVixSR0Zvcm1hdDooKT0+RWZlLFJHSW50ZWdlckZvcm1hdDooKT0+VGZlLFJhd1NoYWRlck1hdGVyaWFsOigpPT5VMCxSYXk6KCk9PkpmLFJheWNhc3RlcjooKT0+cGh0LFJlY3RBcmVhTGlnaHQ6KCk9Pms2LFJlZEZvcm1hdDooKT0+U2ZlLFJlZEludGVnZXJGb3JtYXQ6KCk9Pk1mZSxSZWluaGFyZFRvbmVNYXBwaW5nOigpPT5oZmUsUmVwZWF0V3JhcHBpbmc6KCk9PlhQLFJlcGxhY2VTdGVuY2lsT3A6KCk9Pk1ocixSZXZlcnNlU3VidHJhY3RFcXVhdGlvbjooKT0+V2hlLFJpbmdCdWZmZXJHZW9tZXRyeTooKT0+WTEsUmluZ0dlb21ldHJ5OigpPT5ZMSxTY2VuZTooKT0+cTAsU2NlbmVVdGlsczooKT0+b19yLFNoYWRlckNodW5rOigpPT5ocixTaGFkZXJMaWI6KCk9PmFoLFNoYWRlck1hdGVyaWFsOigpPT5saCxTaGFkb3dNYXRlcmlhbDooKT0+bTYsU2hhcGU6KCk9PktjLFNoYXBlQnVmZmVyR2VvbWV0cnk6KCk9PlkwLFNoYXBlR2VvbWV0cnk6KCk9PlkwLFNoYXBlUGF0aDooKT0+RWh0LFNoYXBlVXRpbHM6KCk9PlpjLFNob3J0VHlwZTooKT0+Z2ZlLFNrZWxldG9uOigpPT5sTSxTa2VsZXRvbkhlbHBlcjooKT0+V1UsU2tpbm5lZE1lc2g6KCk9PmFNLFNtb290aFNoYWRpbmc6KCk9PmdocixTcGhlcmU6KCk9PlpmLFNwaGVyZUJ1ZmZlckdlb21ldHJ5OigpPT5qMCxTcGhlcmVHZW9tZXRyeTooKT0+ajAsU3BoZXJpY2FsOigpPT5fTSxTcGhlcmljYWxIYXJtb25pY3MzOigpPT5SNixTcGxpbmVDdXJ2ZTooKT0+Zk0sU3BvdExpZ2h0OigpPT5BNixTcG90TGlnaHRIZWxwZXI6KCk9PmdodCxTcHJpdGU6KCk9Pm9NLFNwcml0ZU1hdGVyaWFsOigpPT5pTSxTcmNBbHBoYUZhY3RvcjooKT0+UGh0LFNyY0FscGhhU2F0dXJhdGVGYWN0b3I6KCk9PnRmZSxTcmNDb2xvckZhY3RvcjooKT0+WGhlLFN0YXRpY0NvcHlVc2FnZTooKT0+VmhyLFN0YXRpY0RyYXdVc2FnZTooKT0+VzMsU3RhdGljUmVhZFVzYWdlOigpPT5GaHIsU3RlcmVvQ2FtZXJhOigpPT5saHQsU3RyZWFtQ29weVVzYWdlOigpPT5xaHIsU3RyZWFtRHJhd1VzYWdlOigpPT56aHIsU3RyZWFtUmVhZFVzYWdlOigpPT5IaHIsU3RyaW5nS2V5ZnJhbWVUcmFjazooKT0+c20sU3VidHJhY3RFcXVhdGlvbjooKT0+R2hlLFN1YnRyYWN0aXZlQmxlbmRpbmc6KCk9PkV1dCxUT1VDSDooKT0+WjAsVGFuZ2VudFNwYWNlTm9ybWFsTWFwOigpPT5heCxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5qMSxUZXRyYWhlZHJvbkdlb21ldHJ5OigpPT5qMSxUZXh0R2VvbWV0cnk6KCk9PmxfcixUZXh0dXJlOigpPT52aSxUZXh0dXJlTG9hZGVyOigpPT5BVSxUb3J1c0J1ZmZlckdlb21ldHJ5OigpPT5YMSxUb3J1c0dlb21ldHJ5OigpPT5YMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTooKT0+JDEsVG9ydXNLbm90R2VvbWV0cnk6KCk9PiQxLFRyaWFuZ2xlOigpPT5vaSxUcmlhbmdsZUZhbkRyYXdNb2RlOigpPT53aHIsVHJpYW5nbGVTdHJpcERyYXdNb2RlOigpPT5iaHIsVHJpYW5nbGVzRHJhd01vZGU6KCk9PmtmZSxUdWJlQnVmZmVyR2VvbWV0cnk6KCk9PksxLFR1YmVHZW9tZXRyeTooKT0+SzEsVVZNYXBwaW5nOigpPT5YVSxVaW50MTZBdHRyaWJ1dGU6KCk9PlcwcixVaW50MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PiQzLFVpbnQzMkF0dHJpYnV0ZTooKT0+ajByLFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+SzMsVWludDhBdHRyaWJ1dGU6KCk9PlUwcixVaW50OEJ1ZmZlckF0dHJpYnV0ZTooKT0+dVUsVWludDhDbGFtcGVkQXR0cmlidXRlOigpPT5xMHIsVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlOigpPT5oVSxVbmlmb3JtOigpPT5nTSxVbmlmb3Jtc0xpYjooKT0+cmUsVW5pZm9ybXNVdGlsczooKT0+VmZlLFVuc2lnbmVkQnl0ZVR5cGU6KCk9PlpkLFVuc2lnbmVkSW50MjQ4VHlwZTooKT0+QTEsVW5zaWduZWRJbnRUeXBlOigpPT5WUCxVbnNpZ25lZFNob3J0NDQ0NFR5cGU6KCk9PnlmZSxVbnNpZ25lZFNob3J0NTU1MVR5cGU6KCk9PnZmZSxVbnNpZ25lZFNob3J0VHlwZTooKT0+RzMsVlNNU2hhZG93TWFwOigpPT5GMyxWZWN0b3IyOigpPT5MdCxWZWN0b3IzOigpPT5qLFZlY3RvcjQ6KCk9PmVuLFZlY3RvcktleWZyYW1lVHJhY2s6KCk9PkoxLFZlcnRleDooKT0+QjByLFZlcnRleENvbG9yczooKT0+STByLFZpZGVvVGV4dHVyZTooKT0+eVUsV2ViR0wxUmVuZGVyZXI6KCk9PmdVLFdlYkdMQ3ViZVJlbmRlclRhcmdldDooKT0+UTMsV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM6KCk9PmxVLFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ6KCk9PmozLFdlYkdMUmVuZGVyVGFyZ2V0OigpPT51cyxXZWJHTFJlbmRlclRhcmdldEN1YmU6KCk9PnJfcixXZWJHTFJlbmRlcmVyOigpPT5ybixXZWJHTFV0aWxzOigpPT5RZmUsV2lyZWZyYW1lR2VvbWV0cnk6KCk9PmQ2LFdpcmVmcmFtZUhlbHBlcjooKT0+UTByLFdyYXBBcm91bmRFbmRpbmc6KCk9PkpQLFhIUkxvYWRlcjooKT0+dF9yLFplcm9DdXJ2YXR1cmVFbmRpbmc6KCk9PkUxLFplcm9GYWN0b3I6KCk9PlloZSxaZXJvU2xvcGVFbmRpbmc6KCk9PlQxLFplcm9TdGVuY2lsT3A6KCk9PlNocixfU1JHQkFGb3JtYXQ6KCk9PnNVLHNSR0JFbmNvZGluZzooKT0+V259KTt2YXIgalU9IjEzNyIsSzA9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyLFJPVEFURTowLERPTExZOjEsUEFOOjJ9LFowPXtST1RBVEU6MCxQQU46MSxET0xMWV9QQU46MixET0xMWV9ST1RBVEU6M30sSGhlPTAsU3V0PTEsVmhlPTIsZGhyPTMsbWhyPTAsQ2h0PTEsVWhlPTIsRjM9MyxJMT0wLElpPTEsTDE9MixBaHQ9MSxnaHI9MiwkZD0wLFYzPTEsTXV0PTIsRXV0PTMsVHV0PTQscWhlPTUsTTE9MTAwLEdoZT0xMDEsV2hlPTEwMixDdXQ9MTAzLEF1dD0xMDQsWWhlPTIwMCxqaGU9MjAxLFhoZT0yMDIsJGhlPTIwMyxQaHQ9MjA0LElodD0yMDUsS2hlPTIwNixaaGU9MjA3LEpoZT0yMDgsUWhlPTIwOSx0ZmU9MjEwLGVmZT0wLHJmZT0xLG5mZT0yLGlVPTMsaWZlPTQsb2ZlPTUsYWZlPTYsc2ZlPTcsTzY9MCxsZmU9MSxjZmU9MixLZD0wLHVmZT0xLGhmZT0yLGZmZT0zLHBmZT00LGRmZT01LFhVPTMwMCxueD0zMDEsaXg9MzAyLFlQPTMwMyxqUD0zMDQseE09MzA2LHo2PTMwNyxYUD0xZTMsSm89MTAwMSwkUD0xMDAyLExpPTEwMDMsb1U9MTAwNCxfaHI9MTAwNCxhVT0xMDA1LHlocj0xMDA1LGlpPTEwMDYsTGh0PTEwMDcsdmhyPTEwMDcsb3g9MTAwOCx4aHI9MTAwOCxaZD0xMDA5LG1mZT0xMDEwLGdmZT0xMDExLEczPTEwMTIsX2ZlPTEwMTMsVlA9MTAxNCxqZD0xMDE1LEMxPTEwMTYseWZlPTEwMTcsdmZlPTEwMTgsQTE9MTAyMCx4ZmU9MTAyMSxRbz0xMDIzLGJmZT0xMDI0LHdmZT0xMDI1LHowPTEwMjYsazE9MTAyNyxTZmU9MTAyOCxNZmU9MTAyOSxFZmU9MTAzMCxUZmU9MTAzMSxDZmU9MTAzMyxKVj0zMzc3NixRVj0zMzc3Nyx0VT0zMzc3OCxlVT0zMzc3OSxQdXQ9MzU4NDAsSXV0PTM1ODQxLEx1dD0zNTg0MixrdXQ9MzU4NDMsQWZlPTM2MTk2LFJ1dD0zNzQ5MixOdXQ9Mzc0OTYsRHV0PTM3ODA4LE91dD0zNzgwOSx6dXQ9Mzc4MTAsRnV0PTM3ODExLEJ1dD0zNzgxMixIdXQ9Mzc4MTMsVnV0PTM3ODE0LFV1dD0zNzgxNSxxdXQ9Mzc4MTYsR3V0PTM3ODE3LFd1dD0zNzgxOCxZdXQ9Mzc4MTksanV0PTM3ODIwLFh1dD0zNzgyMSwkdXQ9MzY0OTIsUGZlPTIyMDAsSWZlPTIyMDEsTGZlPTIyMDIsS1A9MjMwMCxaUD0yMzAxLHJVPTIzMDIsRTE9MjQwMCxUMT0yNDAxLEpQPTI0MDIsJFU9MjUwMCxraHQ9MjUwMSxrZmU9MCxiaHI9MSx3aHI9MixRZD0zZTMsV249MzAwMSxSZmU9MzIwMCxOZmU9MzIwMSxheD0wLERmZT0xLFNocj0wLG5VPTc2ODAsTWhyPTc2ODEsRWhyPTc2ODIsVGhyPTc2ODMsQ2hyPTM0MDU1LEFocj0zNDA1NixQaHI9NTM4NixJaHI9NTEyLExocj01MTMsa2hyPTUxNCxSaHI9NTE1LE5ocj01MTYsRGhyPTUxNyxPaHI9NTE4LE9mZT01MTksVzM9MzUwNDQsWTM9MzUwNDgsemhyPTM1MDQwLEZocj0zNTA0NSxCaHI9MzUwNDksSGhyPTM1MDQxLFZocj0zNTA0NixVaHI9MzUwNTAscWhyPTM1MDQyLEdocj0iMTAwIixLdXQ9IjMwMCBlcyIsc1U9MTAzNSxVcz1jbGFzc3thZGRFdmVudExpc3RlbmVyKHQscil7dGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwJiYodGhpcy5fbGlzdGVuZXJzPXt9KTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7blt0XT09PXZvaWQgMCYmKG5bdF09W10pLG5bdF0uaW5kZXhPZihyKT09PS0xJiZuW3RdLnB1c2gocil9aGFzRXZlbnRMaXN0ZW5lcih0LHIpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm4hMTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIG5bdF0hPT12b2lkIDAmJm5bdF0uaW5kZXhPZihyKSE9PS0xfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0XTtpZihpIT09dm9pZCAwKXtsZXQgbz1pLmluZGV4T2Yocik7byE9PS0xJiZpLnNwbGljZShvLDEpfX1kaXNwYXRjaEV2ZW50KHQpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IG49dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYobiE9PXZvaWQgMCl7dC50YXJnZXQ9dGhpcztsZXQgaT1uLnNsaWNlKDApO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLmNhbGwodGhpcyx0KTt0LnRhcmdldD1udWxsfX19LEtvPVtdO2ZvcihsZXQgZT0wO2U8MjU2O2UrKylLb1tlXT0oZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpO3ZhciB1Vj0xMjM0NTY3LFAxPU1hdGguUEkvMTgwLFFQPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIE5sKCl7bGV0IGU9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxyPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKEtvW2UmMjU1XStLb1tlPj44JjI1NV0rS29bZT4+MTYmMjU1XStLb1tlPj4yNCYyNTVdKyItIitLb1t0JjI1NV0rS29bdD4+OCYyNTVdKyItIitLb1t0Pj4xNiYxNXw2NF0rS29bdD4+MjQmMjU1XSsiLSIrS29bciY2M3wxMjhdK0tvW3I+PjgmMjU1XSsiLSIrS29bcj4+MTYmMjU1XStLb1tyPj4yNCYyNTVdK0tvW24mMjU1XStLb1tuPj44JjI1NV0rS29bbj4+MTYmMjU1XStLb1tuPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFpvKGUsdCxyKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihyLGUpKX1mdW5jdGlvbiBSaHQoZSx0KXtyZXR1cm4oZSV0K3QpJXR9ZnVuY3Rpb24gV2hyKGUsdCxyLG4saSl7cmV0dXJuIG4rKGUtdCkqKGktbikvKHItdCl9ZnVuY3Rpb24gWWhyKGUsdCxyKXtyZXR1cm4gZSE9PXQ/KHItZSkvKHQtZSk6MH1mdW5jdGlvbiBVUChlLHQscil7cmV0dXJuKDEtcikqZStyKnR9ZnVuY3Rpb24gamhyKGUsdCxyLG4pe3JldHVybiBVUChlLHQsMS1NYXRoLmV4cCgtcipuKSl9ZnVuY3Rpb24gWGhyKGUsdD0xKXtyZXR1cm4gdC1NYXRoLmFicyhSaHQoZSx0KjIpLXQpfWZ1bmN0aW9uICRocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKigzLTIqZSkpfWZ1bmN0aW9uIEtocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKmUqKGUqKGUqNi0xNSkrMTApKX1mdW5jdGlvbiBaaHIoZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSsxKSl9ZnVuY3Rpb24gSmhyKGUsdCl7cmV0dXJuIGUrTWF0aC5yYW5kb20oKSoodC1lKX1mdW5jdGlvbiBRaHIoZSl7cmV0dXJuIGUqKC41LU1hdGgucmFuZG9tKCkpfWZ1bmN0aW9uIHRmcihlKXtyZXR1cm4gZSE9PXZvaWQgMCYmKHVWPWUlMjE0NzQ4MzY0NyksdVY9dVYqMTY4MDclMjE0NzQ4MzY0NywodVYtMSkvMjE0NzQ4MzY0Nn1mdW5jdGlvbiBlZnIoZSl7cmV0dXJuIGUqUDF9ZnVuY3Rpb24gcmZyKGUpe3JldHVybiBlKlFQfWZ1bmN0aW9uIFp1dChlKXtyZXR1cm4oZSZlLTEpPT09MCYmZSE9PTB9ZnVuY3Rpb24gemZlKGUpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLkxOMikpfWZ1bmN0aW9uIEZmZShlKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSl9ZnVuY3Rpb24gbmZyKGUsdCxyLG4saSl7bGV0IG89TWF0aC5jb3MsYT1NYXRoLnNpbixzPW8oci8yKSxsPWEoci8yKSxjPW8oKHQrbikvMiksdT1hKCh0K24pLzIpLGg9bygodC1uKS8yKSxmPWEoKHQtbikvMikscD1vKChuLXQpLzIpLGQ9YSgobi10KS8yKTtzd2l0Y2goaSl7Y2FzZSJYWVgiOmUuc2V0KHMqdSxsKmgsbCpmLHMqYyk7YnJlYWs7Y2FzZSJZWlkiOmUuc2V0KGwqZixzKnUsbCpoLHMqYyk7YnJlYWs7Y2FzZSJaWFoiOmUuc2V0KGwqaCxsKmYscyp1LHMqYyk7YnJlYWs7Y2FzZSJYWlgiOmUuc2V0KHMqdSxsKmQsbCpwLHMqYyk7YnJlYWs7Y2FzZSJZWFkiOmUuc2V0KGwqcCxzKnUsbCpkLHMqYyk7YnJlYWs7Y2FzZSJaWVoiOmUuc2V0KGwqZCxsKnAscyp1LHMqYyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLk1hdGhVdGlsczogLnNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2kpfX12YXIgaWZyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLERFRzJSQUQ6UDEsUkFEMkRFRzpRUCxnZW5lcmF0ZVVVSUQ6TmwsY2xhbXA6Wm8sZXVjbGlkZWFuTW9kdWxvOlJodCxtYXBMaW5lYXI6V2hyLGludmVyc2VMZXJwOllocixsZXJwOlVQLGRhbXA6amhyLHBpbmdwb25nOlhocixzbW9vdGhzdGVwOiRocixzbW9vdGhlcnN0ZXA6S2hyLHJhbmRJbnQ6WmhyLHJhbmRGbG9hdDpKaHIscmFuZEZsb2F0U3ByZWFkOlFocixzZWVkZWRSYW5kb206dGZyLGRlZ1RvUmFkOmVmcixyYWRUb0RlZzpyZnIsaXNQb3dlck9mVHdvOlp1dCxjZWlsUG93ZXJPZlR3bzp6ZmUsZmxvb3JQb3dlck9mVHdvOkZmZSxzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOm5mcn0pLEx0PWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTApe3RoaXMueD10LHRoaXMueT1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LHIpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54K3IueCx0aGlzLnk9dC55K3IueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LHIpe3JldHVybiB0aGlzLngrPXQueCpyLHRoaXMueSs9dC55KnIsdGhpc31zdWIodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQscikpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngtci54LHRoaXMueT10Lnktci55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKnIraVszXSpuK2lbNl0sdGhpcy55PWlbMV0qcitpWzRdKm4raVs3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oci54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oci55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55O3JldHVybiByKnIrbipufW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzfWxlcnBWZWN0b3JzKHQscixuKXtyZXR1cm4gdGhpcy54PXQueCsoci54LXQueCkqbix0aGlzLnk9dC55KyhyLnktdC55KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXN9cm90YXRlQXJvdW5kKHQscil7bGV0IG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxvPXRoaXMueC10LngsYT10aGlzLnktdC55O3JldHVybiB0aGlzLng9bypuLWEqaSt0LngsdGhpcy55PW8qaSthKm4rdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0x0LnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGtpPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPWksdVsyXT1zLHVbM109cix1WzRdPW8sdVs1XT1sLHVbNl09bix1WzddPWEsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0sdGhpc31leHRyYWN0QmFzaXModCxyLG4pe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0scls0XSxyWzhdLHJbMV0scls1XSxyWzldLHJbMl0scls2XSxyWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxyKXtsZXQgbj10LmVsZW1lbnRzLGk9ci5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMsYT1uWzBdLHM9blszXSxsPW5bNl0sYz1uWzFdLHU9bls0XSxoPW5bN10sZj1uWzJdLHA9bls1XSxkPW5bOF0sZz1pWzBdLF89aVszXSx5PWlbNl0seD1pWzFdLGI9aVs0XSxTPWlbN10sQz1pWzJdLFA9aVs1XSxrPWlbOF07cmV0dXJuIG9bMF09YSpnK3MqeCtsKkMsb1szXT1hKl8rcypiK2wqUCxvWzZdPWEqeStzKlMrbCprLG9bMV09YypnK3UqeCtoKkMsb1s0XT1jKl8rdSpiK2gqUCxvWzddPWMqeSt1KlMraCprLG9bMl09ZipnK3AqeCtkKkMsb1s1XT1mKl8rcCpiK2QqUCxvWzhdPWYqeStwKlMrZCprLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzNdKj10LHJbNl0qPXQsclsxXSo9dCxyWzRdKj10LHJbN10qPXQsclsyXSo9dCxyWzVdKj10LHJbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIHIqYSp1LXIqcypjLW4qbyp1K24qcypsK2kqbypjLWkqYSpsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11KmEtcypjLGY9cypsLXUqbyxwPWMqby1hKmwsZD1yKmgrbipmK2kqcDtpZihkPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCBnPTEvZDtyZXR1cm4gdFswXT1oKmcsdFsxXT0oaSpjLXUqbikqZyx0WzJdPShzKm4taSphKSpnLHRbM109ZipnLHRbNF09KHUqci1pKmwpKmcsdFs1XT0oaSpvLXMqcikqZyx0WzZdPXAqZyx0WzddPShuKmwtYypyKSpnLHRbOF09KGEqci1uKm8pKmcsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxyPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9clsxXSxyWzFdPXJbM10sclszXT10LHQ9clsyXSxyWzJdPXJbNl0scls2XT10LHQ9cls1XSxyWzVdPXJbN10scls3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPXJbMF0sdFsxXT1yWzNdLHRbMl09cls2XSx0WzNdPXJbMV0sdFs0XT1yWzRdLHRbNV09cls3XSx0WzZdPXJbMl0sdFs3XT1yWzVdLHRbOF09cls4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQscixuLGksbyxhLHMpe2xldCBsPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7cmV0dXJuIHRoaXMuc2V0KG4qbCxuKmMsLW4qKGwqYStjKnMpK2ErdCwtaSpjLGkqbCwtaSooLWMqYStsKnMpK3MrciwwLDAsMSksdGhpc31zY2FsZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0qPXQsblszXSo9dCxuWzZdKj10LG5bMV0qPXIsbls0XSo9cixuWzddKj1yLHRoaXN9cm90YXRlKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbM10scz1pWzZdLGw9aVsxXSxjPWlbNF0sdT1pWzddO3JldHVybiBpWzBdPXIqbytuKmwsaVszXT1yKmErbipjLGlbNl09cipzK24qdSxpWzFdPS1uKm8rcipsLGlbNF09LW4qYStyKmMsaVs3XT0tbipzK3IqdSx0aGlzfXRyYW5zbGF0ZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0rPXQqblsyXSxuWzNdKz10Km5bNV0sbls2XSs9dCpuWzhdLG5bMV0rPXIqblsyXSxuWzRdKz1yKm5bNV0sbls3XSs9cipuWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspaWYocltpXSE9PW5baV0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQscj0wKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK3JdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbcl09blswXSx0W3IrMV09blsxXSx0W3IrMl09blsyXSx0W3IrM109blszXSx0W3IrNF09bls0XSx0W3IrNV09bls1XSx0W3IrNl09bls2XSx0W3IrN109bls3XSx0W3IrOF09bls4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07a2kucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBCZmUoZSl7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDstLXQpaWYoZVt0XT42NTUzNSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgb2ZyPXtJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheX07ZnVuY3Rpb24gQjMoZSx0KXtyZXR1cm4gbmV3IG9mcltlXSh0KX1mdW5jdGlvbiB0NihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixlKX12YXIgSGZlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LG5oPXtoOjAsczowLGw6MH0saFY9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBHY3QoZSx0LHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj9lKyh0LWUpKjYqcjpyPDEvMj90OnI8Mi8zP2UrKHQtZSkqNiooMi8zLXIpOmV9ZnVuY3Rpb24gVTMoZSl7cmV0dXJuIGU8LjA0MDQ1P2UqLjA3NzM5OTM4MDg6TWF0aC5wb3coZSouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIFdjdChlKXtyZXR1cm4gZTwuMDAzMTMwOD9lKjEyLjkyOjEuMDU1Kk1hdGgucG93KGUsLjQxNjY2KS0uMDU1fXZhciBuZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7cmV0dXJuIHI9PT12b2lkIDAmJm49PT12b2lkIDA/dGhpcy5zZXQodCk6dGhpcy5zZXRSR0IodCxyLG4pfXNldCh0KXtyZXR1cm4gdCYmdC5pc0NvbG9yP3RoaXMuY29weSh0KTp0eXBlb2YgdD09Im51bWJlciI/dGhpcy5zZXRIZXgodCk6dHlwZW9mIHQ9PSJzdHJpbmciJiZ0aGlzLnNldFN0eWxlKHQpLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9dCx0aGlzLmI9dCx0aGlzfXNldEhleCh0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLHRoaXMucj0odD4+MTYmMjU1KS8yNTUsdGhpcy5nPSh0Pj44JjI1NSkvMjU1LHRoaXMuYj0odCYyNTUpLzI1NSx0aGlzfXNldFJHQih0LHIsbil7cmV0dXJuIHRoaXMucj10LHRoaXMuZz1yLHRoaXMuYj1uLHRoaXN9c2V0SFNMKHQscixuKXtpZih0PVJodCh0LDEpLHI9Wm8ociwwLDEpLG49Wm8obiwwLDEpLHI9PT0wKXRoaXMucj10aGlzLmc9dGhpcy5iPW47ZWxzZXtsZXQgaT1uPD0uNT9uKigxK3IpOm4rci1uKnIsbz0yKm4taTt0aGlzLnI9R2N0KG8saSx0KzEvMyksdGhpcy5nPUdjdChvLGksdCksdGhpcy5iPUdjdChvLGksdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIHIoaSl7aSE9PXZvaWQgMCYmcGFyc2VGbG9hdChpKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBuO2lmKG49L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCBpLG89blsxXSxhPW5bMl07c3dpdGNoKG8pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKGk9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChpWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoaVsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGlbM10sMTApKS8yNTUscihpWzRdKSx0aGlzO2lmKGk9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChpWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQoaVsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KGlbM10sMTApKS8xMDAscihpWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKGk9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpe2xldCBzPXBhcnNlRmxvYXQoaVsxXSkvMzYwLGw9cGFyc2VJbnQoaVsyXSwxMCkvMTAwLGM9cGFyc2VJbnQoaVszXSwxMCkvMTAwO3JldHVybiByKGlbNF0pLHRoaXMuc2V0SFNMKHMsbCxjKX1icmVha319ZWxzZSBpZihuPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7bGV0IGk9blsxXSxvPWkubGVuZ3RoO2lmKG89PT0zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMSkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKG89PT02KXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoNCkraS5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiB0JiZ0Lmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKHQpOnRoaXN9c2V0Q29sb3JOYW1lKHQpe2xldCByPUhmZVt0LnRvTG93ZXJDYXNlKCldO3JldHVybiByIT09dm9pZCAwP3RoaXMuc2V0SGV4KHIpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1VMyh0LnIpLHRoaXMuZz1VMyh0LmcpLHRoaXMuYj1VMyh0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPVdjdCh0LnIpLHRoaXMuZz1XY3QodC5nKSx0aGlzLmI9V2N0KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IHI9dGhpcy5yLG49dGhpcy5nLGk9dGhpcy5iLG89TWF0aC5tYXgocixuLGkpLGE9TWF0aC5taW4ocixuLGkpLHMsbCxjPShhK28pLzI7aWYoYT09PW8pcz0wLGw9MDtlbHNle2xldCB1PW8tYTtzd2l0Y2gobD1jPD0uNT91LyhvK2EpOnUvKDItby1hKSxvKXtjYXNlIHI6cz0obi1pKS91KyhuPGk/NjowKTticmVhaztjYXNlIG46cz0oaS1yKS91KzI7YnJlYWs7Y2FzZSBpOnM9KHItbikvdSs0O2JyZWFrfXMvPTZ9cmV0dXJuIHQuaD1zLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQscixuKXtyZXR1cm4gdGhpcy5nZXRIU0wobmgpLG5oLmgrPXQsbmgucys9cixuaC5sKz1uLHRoaXMuc2V0SFNMKG5oLmgsbmgucyxuaC5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxyKXtyZXR1cm4gdGhpcy5yPXQucityLnIsdGhpcy5nPXQuZytyLmcsdGhpcy5iPXQuYityLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxyKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqcix0aGlzLmcrPSh0LmctdGhpcy5nKSpyLHRoaXMuYis9KHQuYi10aGlzLmIpKnIsdGhpc31sZXJwQ29sb3JzKHQscixuKXtyZXR1cm4gdGhpcy5yPXQucisoci5yLXQucikqbix0aGlzLmc9dC5nKyhyLmctdC5nKSpuLHRoaXMuYj10LmIrKHIuYi10LmIpKm4sdGhpc31sZXJwSFNMKHQscil7dGhpcy5nZXRIU0wobmgpLHQuZ2V0SFNMKGhWKTtsZXQgbj1VUChuaC5oLGhWLmgsciksaT1VUChuaC5zLGhWLnMsciksbz1VUChuaC5sLGhWLmwscik7cmV0dXJuIHRoaXMuc2V0SFNMKG4saSxvKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLnI9dFtyXSx0aGlzLmc9dFtyKzFdLHRoaXMuYj10W3IrMl0sdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLnIsdFtyKzFdPXRoaXMuZyx0W3IrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpe3JldHVybiB0aGlzLnI9dC5nZXRYKHIpLHRoaXMuZz10LmdldFkociksdGhpcy5iPXQuZ2V0WihyKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07bmUuTkFNRVM9SGZlO25lLnByb3RvdHlwZS5pc0NvbG9yPSEwO25lLnByb3RvdHlwZS5yPTE7bmUucHJvdG90eXBlLmc9MTtuZS5wcm90b3R5cGUuYj0xO3ZhciB2MyxLZj1jbGFzc3tzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYyl8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudD09InVuZGVmaW5lZCIpcmV0dXJuIHQuc3JjO2xldCByO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClyPXQ7ZWxzZXt2Mz09PXZvaWQgMCYmKHYzPXQ2KCJjYW52YXMiKSksdjMud2lkdGg9dC53aWR0aCx2My5oZWlnaHQ9dC5oZWlnaHQ7bGV0IG49djMuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP24ucHV0SW1hZ2VEYXRhKHQsMCwwKTpuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxyPXYzfXJldHVybiByLndpZHRoPjIwNDh8fHIuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxyLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTpyLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IHI9dDYoImNhbnZhcyIpO3Iud2lkdGg9dC53aWR0aCxyLmhlaWdodD10LmhlaWdodDtsZXQgbj1yLmdldENvbnRleHQoIjJkIik7bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCk7bGV0IGk9bi5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG89aS5kYXRhO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKW9bYV09VTMob1thXS8yNTUpKjI1NTtyZXR1cm4gbi5wdXRJbWFnZURhdGEoaSwwLDApLHJ9ZWxzZSBpZih0LmRhdGEpe2xldCByPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKylyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P3Jbbl09TWF0aC5mbG9vcihVMyhyW25dLzI1NSkqMjU1KTpyW25dPVUzKHJbbl0pO3JldHVybntkYXRhOnIsd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fWVsc2UgcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLiIpLHR9fSxhZnI9MCx2aT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQ9dmkuREVGQVVMVF9JTUFHRSxyPXZpLkRFRkFVTFRfTUFQUElORyxuPUpvLGk9Sm8sbz1paSxhPW94LHM9UW8sbD1aZCxjPTEsdT1RZCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTphZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1yLHRoaXMud3JhcFM9bix0aGlzLndyYXBUPWksdGhpcy5tYWdGaWx0ZXI9byx0aGlzLm1pbkZpbHRlcj1hLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PXMsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBMdCgwLDApLHRoaXMucmVwZWF0PW5ldyBMdCgxLDEpLHRoaXMuY2VudGVyPW5ldyBMdCgwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGtpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIXImJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgaT10aGlzLmltYWdlO2lmKGkudXVpZD09PXZvaWQgMCYmKGkudXVpZD1ObCgpKSwhciYmdC5pbWFnZXNbaS51dWlkXT09PXZvaWQgMCl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1bXTtmb3IobGV0IGE9MCxzPWkubGVuZ3RoO2E8czthKyspaVthXS5pc0RhdGFUZXh0dXJlP28ucHVzaChZY3QoaVthXS5pbWFnZSkpOm8ucHVzaChZY3QoaVthXSkpfWVsc2Ugbz1ZY3QoaSk7dC5pbWFnZXNbaS51dWlkXT17dXVpZDppLnV1aWQsdXJsOm99fW4uaW1hZ2U9aS51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihuLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHJ8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09biksbn1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PVhVKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgWFA6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBKbzp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2UgJFA6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBYUDp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIEpvOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAkUDpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt2aS5ERUZBVUxUX0lNQUdFPXZvaWQgMDt2aS5ERUZBVUxUX01BUFBJTkc9WFU7dmkucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBZY3QoZSl7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwP0tmLmdldERhdGFVUkwoZSk6ZS5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuZGF0YSksd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsdHlwZTplLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX12YXIgZW49Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTAsaT0xKXt0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzLnc9aX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy56fXNldCB3aWR0aCh0KXt0aGlzLno9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMud31zZXQgaGVpZ2h0KHQpe3RoaXMudz10fXNldCh0LHIsbixpKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpcy53PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXMudz10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Vyh0KXtyZXR1cm4gdGhpcy53PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7Y2FzZSAzOnRoaXMudz1yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtjYXNlIDM6cmV0dXJuIHRoaXMudztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueix0aGlzLncpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXMudz10LnchPT12b2lkIDA/dC53OjEsdGhpc31hZGQodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQscikpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzLncrPXQudyx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXMudys9dCx0aGlzfWFkZFZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCtyLngsdGhpcy55PXQueStyLnksdGhpcy56PXQueityLnosdGhpcy53PXQudytyLncsdGhpc31hZGRTY2FsZWRWZWN0b3IodCxyKXtyZXR1cm4gdGhpcy54Kz10Lngqcix0aGlzLnkrPXQueSpyLHRoaXMueis9dC56KnIsdGhpcy53Kz10Lncqcix0aGlzfXN1Yih0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxyKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMudy09dC53LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpcy53LT10LHRoaXN9c3ViVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54LXIueCx0aGlzLnk9dC55LXIueSx0aGlzLno9dC56LXIueix0aGlzLnc9dC53LXIudyx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzLncqPXQudyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzLncqPXQsdGhpc31hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dGhpcy53LGE9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWFbMF0qcithWzRdKm4rYVs4XSppK2FbMTJdKm8sdGhpcy55PWFbMV0qcithWzVdKm4rYVs5XSppK2FbMTNdKm8sdGhpcy56PWFbMl0qcithWzZdKm4rYVsxMF0qaSthWzE0XSpvLHRoaXMudz1hWzNdKnIrYVs3XSpuK2FbMTFdKmkrYVsxNV0qbyx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfXNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHQpe3RoaXMudz0yKk1hdGguYWNvcyh0LncpO2xldCByPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiByPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9yLHRoaXMueT10Lnkvcix0aGlzLno9dC56L3IpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCByLG4saSxvLGw9dC5lbGVtZW50cyxjPWxbMF0sdT1sWzRdLGg9bFs4XSxmPWxbMV0scD1sWzVdLGQ9bFs5XSxnPWxbMl0sXz1sWzZdLHk9bFsxMF07aWYoTWF0aC5hYnModS1mKTwuMDEmJk1hdGguYWJzKGgtZyk8LjAxJiZNYXRoLmFicyhkLV8pPC4wMSl7aWYoTWF0aC5hYnModStmKTwuMSYmTWF0aC5hYnMoaCtnKTwuMSYmTWF0aC5hYnMoZCtfKTwuMSYmTWF0aC5hYnMoYytwK3ktMyk8LjEpcmV0dXJuIHRoaXMuc2V0KDEsMCwwLDApLHRoaXM7cj1NYXRoLlBJO2xldCBiPShjKzEpLzIsUz0ocCsxKS8yLEM9KHkrMSkvMixQPSh1K2YpLzQsaz0oaCtnKS80LE89KGQrXykvNDtyZXR1cm4gYj5TJiZiPkM/YjwuMDE/KG49MCxpPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKToobj1NYXRoLnNxcnQoYiksaT1QL24sbz1rL24pOlM+Qz9TPC4wMT8obj0uNzA3MTA2NzgxLGk9MCxvPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChTKSxuPVAvaSxvPU8vaSk6QzwuMDE/KG49LjcwNzEwNjc4MSxpPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoQyksbj1rL28saT1PL28pLHRoaXMuc2V0KG4saSxvLHIpLHRoaXN9bGV0IHg9TWF0aC5zcXJ0KChfLWQpKihfLWQpKyhoLWcpKihoLWcpKyhmLXUpKihmLXUpKTtyZXR1cm4gTWF0aC5hYnMoeCk8LjAwMSYmKHg9MSksdGhpcy54PShfLWQpL3gsdGhpcy55PShoLWcpL3gsdGhpcy56PShmLXUpL3gsdGhpcy53PU1hdGguYWNvcygoYytwK3ktMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihyLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihyLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihyLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihyLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpcy53PXRoaXMudzwwP01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzLnc9LXRoaXMudyx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0LnordGhpcy53KnQud31sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopK01hdGguYWJzKHRoaXMudyl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXMudys9KHQudy10aGlzLncpKnIsdGhpc31sZXJwVmVjdG9ycyh0LHIsbil7cmV0dXJuIHRoaXMueD10LngrKHIueC10LngpKm4sdGhpcy55PXQueSsoci55LXQueSkqbix0aGlzLno9dC56KyhyLnotdC56KSpuLHRoaXMudz10LncrKHIudy10LncpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnomJnQudz09PXRoaXMud31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXMuej10W3IrMl0sdGhpcy53PXRbciszXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHRbcisyXT10aGlzLnosdFtyKzNdPXRoaXMudyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzLnc9dC5nZXRXKHIpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXMudz1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnoseWllbGQgdGhpcy53fX07ZW4ucHJvdG90eXBlLmlzVmVjdG9yND0hMDt2YXIgdXM9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIsbj17fSl7c3VwZXIoKSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPTEsdGhpcy5zY2lzc29yPW5ldyBlbigwLDAsdCxyKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IGVuKDAsMCx0LHIpLHRoaXMudGV4dHVyZT1uZXcgdmkodm9pZCAwLG4ubWFwcGluZyxuLndyYXBTLG4ud3JhcFQsbi5tYWdGaWx0ZXIsbi5taW5GaWx0ZXIsbi5mb3JtYXQsbi50eXBlLG4uYW5pc290cm9weSxuLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cixkZXB0aDoxfSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPW4uZ2VuZXJhdGVNaXBtYXBzIT09dm9pZCAwP24uZ2VuZXJhdGVNaXBtYXBzOiExLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD1uLmludGVybmFsRm9ybWF0IT09dm9pZCAwP24uaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPW4ubWluRmlsdGVyIT09dm9pZCAwP24ubWluRmlsdGVyOmlpLHRoaXMuZGVwdGhCdWZmZXI9bi5kZXB0aEJ1ZmZlciE9PXZvaWQgMD9uLmRlcHRoQnVmZmVyOiEwLHRoaXMuc3RlbmNpbEJ1ZmZlcj1uLnN0ZW5jaWxCdWZmZXIhPT12b2lkIDA/bi5zdGVuY2lsQnVmZmVyOiExLHRoaXMuZGVwdGhUZXh0dXJlPW4uZGVwdGhUZXh0dXJlIT09dm9pZCAwP24uZGVwdGhUZXh0dXJlOm51bGx9c2V0VGV4dHVyZSh0KXt0LmltYWdlPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxkZXB0aDp0aGlzLmRlcHRofSx0aGlzLnRleHR1cmU9dH1zZXRTaXplKHQscixuPTEpeyh0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1yfHx0aGlzLmRlcHRoIT09bikmJih0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW4sdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZS5pbWFnZS5kZXB0aD1uLHRoaXMuZGlzcG9zZSgpKSx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt1cy5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMDt2YXIgbFU9Y2xhc3MgZXh0ZW5kcyB1c3tjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIodCxyKTtsZXQgaT10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288bjtvKyspdGhpcy50ZXh0dXJlW29dPWkuY2xvbmUoKX1zZXRTaXplKHQscixuPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PXJ8fHRoaXMuZGVwdGghPT1uKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW47Zm9yKGxldCBpPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO2k8bztpKyspdGhpcy50ZXh0dXJlW2ldLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW2ldLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZVtpXS5pbWFnZS5kZXB0aD1uO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCByPTAsbj10LnRleHR1cmUubGVuZ3RoO3I8bjtyKyspdGhpcy50ZXh0dXJlW3JdPXQudGV4dHVyZVtyXS5jbG9uZSgpO3JldHVybiB0aGlzfX07bFUucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIGozPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG49e30pe3N1cGVyKHQscixuKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PW4uaWdub3JlRGVwdGghPT12b2lkIDA/bi5pZ25vcmVEZXB0aDohMCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT1uLnVzZVJlbmRlclRvVGV4dHVyZSE9PXZvaWQgMD9uLnVzZVJlbmRlclRvVGV4dHVyZTohMSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10aGlzLnVzZVJlbmRlclRvVGV4dHVyZT09PSExfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2FtcGxlcz10LnNhbXBsZXMsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dC51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9dC51c2VSZW5kZXJidWZmZXIsdGhpc319O2ozLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ITA7dmFyIHlpPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTAsbj0wLGk9MSl7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fdz1pfXN0YXRpYyBzbGVycCh0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiBTdGF0aWMgLnNsZXJwKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApIGluc3RlYWQuIiksbi5zbGVycFF1YXRlcm5pb25zKHQscixpKX1zdGF0aWMgc2xlcnBGbGF0KHQscixuLGksbyxhLHMpe2xldCBsPW5baSswXSxjPW5baSsxXSx1PW5baSsyXSxoPW5baSszXSxmPW9bYSswXSxwPW9bYSsxXSxkPW9bYSsyXSxnPW9bYSszXTtpZihzPT09MCl7dFtyKzBdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWg7cmV0dXJufWlmKHM9PT0xKXt0W3IrMF09Zix0W3IrMV09cCx0W3IrMl09ZCx0W3IrM109ZztyZXR1cm59aWYoaCE9PWd8fGwhPT1mfHxjIT09cHx8dSE9PWQpe2xldCBfPTEtcyx5PWwqZitjKnArdSpkK2gqZyx4PXk+PTA/MTotMSxiPTEteSp5O2lmKGI+TnVtYmVyLkVQU0lMT04pe2xldCBDPU1hdGguc3FydChiKSxQPU1hdGguYXRhbjIoQyx5KngpO189TWF0aC5zaW4oXypQKS9DLHM9TWF0aC5zaW4ocypQKS9DfWxldCBTPXMqeDtpZihsPWwqXytmKlMsYz1jKl8rcCpTLHU9dSpfK2QqUyxoPWgqXytnKlMsXz09PTEtcyl7bGV0IEM9MS9NYXRoLnNxcnQobCpsK2MqYyt1KnUraCpoKTtsKj1DLGMqPUMsdSo9QyxoKj1DfX10W3JdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWh9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQscixuLGksbyxhKXtsZXQgcz1uW2ldLGw9bltpKzFdLGM9bltpKzJdLHU9bltpKzNdLGg9b1thXSxmPW9bYSsxXSxwPW9bYSsyXSxkPW9bYSszXTtyZXR1cm4gdFtyXT1zKmQrdSpoK2wqcC1jKmYsdFtyKzFdPWwqZCt1KmYrYypoLXMqcCx0W3IrMl09YypkK3UqcCtzKmYtbCpoLHRbciszXT11KmQtcypoLWwqZi1jKnAsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQscixuLGkpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1yLHRoaXMuX3o9bix0aGlzLl93PWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQscil7aWYoISh0JiZ0LmlzRXVsZXIpKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IG49dC5feCxpPXQuX3ksbz10Ll96LGE9dC5fb3JkZXIscz1NYXRoLmNvcyxsPU1hdGguc2luLGM9cyhuLzIpLHU9cyhpLzIpLGg9cyhvLzIpLGY9bChuLzIpLHA9bChpLzIpLGQ9bChvLzIpO3N3aXRjaChhKXtjYXNlIlhZWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIllYWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIlpYWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlpZWCI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIllaWCI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlhaWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrYSl9cmV0dXJuIHIhPT0hMSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LHIpe2xldCBuPXIvMixpPU1hdGguc2luKG4pO3JldHVybiB0aGlzLl94PXQueCppLHRoaXMuX3k9dC55KmksdGhpcy5fej10LnoqaSx0aGlzLl93PU1hdGguY29zKG4pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgcj10LmVsZW1lbnRzLG49clswXSxpPXJbNF0sbz1yWzhdLGE9clsxXSxzPXJbNV0sbD1yWzldLGM9clsyXSx1PXJbNl0saD1yWzEwXSxmPW4rcytoO2lmKGY+MCl7bGV0IHA9LjUvTWF0aC5zcXJ0KGYrMSk7dGhpcy5fdz0uMjUvcCx0aGlzLl94PSh1LWwpKnAsdGhpcy5feT0oby1jKSpwLHRoaXMuX3o9KGEtaSkqcH1lbHNlIGlmKG4+cyYmbj5oKXtsZXQgcD0yKk1hdGguc3FydCgxK24tcy1oKTt0aGlzLl93PSh1LWwpL3AsdGhpcy5feD0uMjUqcCx0aGlzLl95PShpK2EpL3AsdGhpcy5fej0obytjKS9wfWVsc2UgaWYocz5oKXtsZXQgcD0yKk1hdGguc3FydCgxK3Mtbi1oKTt0aGlzLl93PShvLWMpL3AsdGhpcy5feD0oaSthKS9wLHRoaXMuX3k9LjI1KnAsdGhpcy5fej0obCt1KS9wfWVsc2V7bGV0IHA9MipNYXRoLnNxcnQoMStoLW4tcyk7dGhpcy5fdz0oYS1pKS9wLHRoaXMuX3g9KG8rYykvcCx0aGlzLl95PShsK3UpL3AsdGhpcy5fej0uMjUqcH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQscil7bGV0IG49dC5kb3QocikrMTtyZXR1cm4gbjxOdW1iZXIuRVBTSUxPTj8obj0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PW4pOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9bikpOih0aGlzLl94PXQueSpyLnotdC56KnIueSx0aGlzLl95PXQueipyLngtdC54KnIueix0aGlzLl96PXQueCpyLnktdC55KnIueCx0aGlzLl93PW4pLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoWm8odGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQscil7bGV0IG49dGhpcy5hbmdsZVRvKHQpO2lmKG49PT0wKXJldHVybiB0aGlzO2xldCBpPU1hdGgubWluKDEsci9uKTtyZXR1cm4gdGhpcy5zbGVycCh0LGkpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdD09PTA/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpe2xldCBuPXQuX3gsaT10Ll95LG89dC5feixhPXQuX3cscz1yLl94LGw9ci5feSxjPXIuX3osdT1yLl93O3JldHVybiB0aGlzLl94PW4qdSthKnMraSpjLW8qbCx0aGlzLl95PWkqdSthKmwrbypzLW4qYyx0aGlzLl96PW8qdSthKmMrbipsLWkqcyx0aGlzLl93PWEqdS1uKnMtaSpsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LHIpe2lmKHI9PT0wKXJldHVybiB0aGlzO2lmKHI9PT0xKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IG49dGhpcy5feCxpPXRoaXMuX3ksbz10aGlzLl96LGE9dGhpcy5fdyxzPWEqdC5fdytuKnQuX3graSp0Ll95K28qdC5fejtpZihzPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3oscz0tcyk6dGhpcy5jb3B5KHQpLHM+PTEpcmV0dXJuIHRoaXMuX3c9YSx0aGlzLl94PW4sdGhpcy5feT1pLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtcypzO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgcD0xLXI7cmV0dXJuIHRoaXMuX3c9cCphK3IqdGhpcy5fdyx0aGlzLl94PXAqbityKnRoaXMuX3gsdGhpcy5feT1wKmkrcip0aGlzLl95LHRoaXMuX3o9cCpvK3IqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxzKSxoPU1hdGguc2luKCgxLXIpKnUpL2MsZj1NYXRoLnNpbihyKnUpL2M7cmV0dXJuIHRoaXMuX3c9YSpoK3RoaXMuX3cqZix0aGlzLl94PW4qaCt0aGlzLl94KmYsdGhpcy5feT1pKmgrdGhpcy5feSpmLHRoaXMuX3o9bypoK3RoaXMuX3oqZix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQscixuKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKHIsbil9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxyPU1hdGguc3FydCgxLXQpLG49TWF0aC5zcXJ0KHQpLGk9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQocipNYXRoLmNvcyhpKSxuKk1hdGguc2luKG8pLG4qTWF0aC5jb3MobykscipNYXRoLnNpbihpKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLl94PXRbcl0sdGhpcy5feT10W3IrMV0sdGhpcy5fej10W3IrMl0sdGhpcy5fdz10W3IrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy5feCx0W3IrMV09dGhpcy5feSx0W3IrMl09dGhpcy5feix0W3IrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5feD10LmdldFgociksdGhpcy5feT10LmdldFkociksdGhpcy5fej10LmdldFoociksdGhpcy5fdz10LmdldFcociksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07eWkucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgaj1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCl7dGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW59c2V0KHQscixuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxyKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngrci54LHRoaXMueT10Lnkrci55LHRoaXMuej10Lnorci56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQscil7cmV0dXJuIHRoaXMueCs9dC54KnIsdGhpcy55Kz10Lnkqcix0aGlzLnorPXQueipyLHRoaXN9c3ViKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LHIpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueC1yLngsdGhpcy55PXQueS1yLnksdGhpcy56PXQuei1yLnosdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxyKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54KnIueCx0aGlzLnk9dC55KnIueSx0aGlzLno9dC56KnIueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKHl1ZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQscil7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKHl1ZS5zZXRGcm9tQXhpc0FuZ2xlKHQscikpfWFwcGx5TWF0cml4Myh0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bM10qbitvWzZdKmksdGhpcy55PW9bMV0qcitvWzRdKm4rb1s3XSppLHRoaXMuej1vWzJdKnIrb1s1XSpuK29bOF0qaSx0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cyxhPTEvKG9bM10qcitvWzddKm4rb1sxMV0qaStvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSpyK29bNF0qbitvWzhdKmkrb1sxMl0pKmEsdGhpcy55PShvWzFdKnIrb1s1XSpuK29bOV0qaStvWzEzXSkqYSx0aGlzLno9KG9bMl0qcitvWzZdKm4rb1sxMF0qaStvWzE0XSkqYSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LngsYT10Lnkscz10LnosbD10LncsYz1sKnIrYSppLXMqbix1PWwqbitzKnItbyppLGg9bCppK28qbi1hKnIsZj0tbypyLWEqbi1zKmk7cmV0dXJuIHRoaXMueD1jKmwrZiotbyt1Ki1zLWgqLWEsdGhpcy55PXUqbCtmKi1hK2gqLW8tYyotcyx0aGlzLno9aCpsK2YqLXMrYyotYS11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bNF0qbitvWzhdKmksdGhpcy55PW9bMV0qcitvWzVdKm4rb1s5XSppLHRoaXMuej1vWzJdKnIrb1s2XSpuK29bMTBdKmksdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKHIueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKHIueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKHIueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXN9bGVycFZlY3RvcnModCxyLG4pe3JldHVybiB0aGlzLng9dC54KyhyLngtdC54KSpuLHRoaXMueT10LnkrKHIueS10LnkpKm4sdGhpcy56PXQueisoci56LXQueikqbix0aGlzfWNyb3NzKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LHIpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXIueCxzPXIueSxsPXIuejtyZXR1cm4gdGhpcy54PWkqbC1vKnMsdGhpcy55PW8qYS1uKmwsdGhpcy56PW4qcy1pKmEsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IHI9dC5sZW5ndGhTcSgpO2lmKHI9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IG49dC5kb3QodGhpcykvcjtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKG4pfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqY3QuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IodCksdGhpcy5zdWIoamN0KX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihqY3QuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgcj1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYocj09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgbj10aGlzLmRvdCh0KS9yO3JldHVybiBNYXRoLmFjb3MoWm8obiwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55LGk9dGhpcy56LXQuejtyZXR1cm4gcipyK24qbitpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxyLG4pe2xldCBpPU1hdGguc2luKHIpKnQ7cmV0dXJuIHRoaXMueD1pKk1hdGguc2luKG4pLHRoaXMueT1NYXRoLmNvcyhyKSp0LHRoaXMuej1pKk1hdGguY29zKG4pLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4ociksdGhpcy55PW4sdGhpcy56PXQqTWF0aC5jb3MociksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMTJdLHRoaXMueT1yWzEzXSx0aGlzLno9clsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9cix0aGlzLnk9bix0aGlzLno9aSx0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxyKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxyKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQscil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsciozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzLno9dFtyKzJdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdFtyKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLHI9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsbj1NYXRoLnNxcnQoMS1USSh0LDIpKTtyZXR1cm4gdGhpcy54PW4qTWF0aC5jb3MociksdGhpcy55PW4qTWF0aC5zaW4ociksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O2oucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgamN0PW5ldyBqLHl1ZT1uZXcgeWksdGE9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaigxLzAsMS8wLDEvMCkscj1uZXcgaigtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgdT10W2xdLGg9dFtsKzFdLGY9dFtsKzJdO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IHU9dC5nZXRYKGwpLGg9dC5nZXRZKGwpLGY9dC5nZXRaKGwpO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCByPTAsbj10Lmxlbmd0aDtyPG47cisrKXRoaXMuZXhwYW5kQnlQb2ludCh0W3JdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LHIpe2xldCBuPW0xLmNvcHkocikubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfXNldEZyb21PYmplY3QodCxyPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQscil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQscj0hMSl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7bGV0IG49dC5nZW9tZXRyeTtpZihuIT09dm9pZCAwKWlmKHImJm4uYXR0cmlidXRlcyE9bnVsbCYmbi5hdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwKXtsZXQgbz1uLmF0dHJpYnV0ZXMucG9zaXRpb247Zm9yKGxldCBhPTAscz1vLmNvdW50O2E8czthKyspbTEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGEpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQobTEpfWVsc2Ugbi5ib3VuZGluZ0JveD09PW51bGwmJm4uY29tcHV0ZUJvdW5kaW5nQm94KCksWGN0LmNvcHkobi5ib3VuZGluZ0JveCksWGN0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKFhjdCk7bGV0IGk9dC5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspdGhpcy5leHBhbmRCeU9iamVjdChpW29dLHIpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsbTEpLG0xLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCByLG47cmV0dXJuIHQubm9ybWFsLng+MD8ocj10Lm5vcm1hbC54KnRoaXMubWluLngsbj10Lm5vcm1hbC54KnRoaXMubWF4LngpOihyPXQubm9ybWFsLngqdGhpcy5tYXgueCxuPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhyKz10Lm5vcm1hbC55KnRoaXMubWluLnksbis9dC5ub3JtYWwueSp0aGlzLm1heC55KToocis9dC5ub3JtYWwueSp0aGlzLm1heC55LG4rPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhyKz10Lm5vcm1hbC56KnRoaXMubWluLnosbis9dC5ub3JtYWwueip0aGlzLm1heC56KToocis9dC5ub3JtYWwueip0aGlzLm1heC56LG4rPXQubm9ybWFsLnoqdGhpcy5taW4ueikscjw9LXQuY29uc3RhbnQmJm4+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihMUCksZlYuc3ViVmVjdG9ycyh0aGlzLm1heCxMUCkseDMuc3ViVmVjdG9ycyh0LmEsTFApLGIzLnN1YlZlY3RvcnModC5iLExQKSx3My5zdWJWZWN0b3JzKHQuYyxMUCksUDAuc3ViVmVjdG9ycyhiMyx4MyksSTAuc3ViVmVjdG9ycyh3MyxiMyksZzEuc3ViVmVjdG9ycyh4Myx3Myk7bGV0IHI9WzAsLVAwLnosUDAueSwwLC1JMC56LEkwLnksMCwtZzEueixnMS55LFAwLnosMCwtUDAueCxJMC56LDAsLUkwLngsZzEueiwwLC1nMS54LC1QMC55LFAwLngsMCwtSTAueSxJMC54LDAsLWcxLnksZzEueCwwXTtyZXR1cm4hJGN0KHIseDMsYjMsdzMsZlYpfHwocj1bMSwwLDAsMCwxLDAsMCwwLDFdLCEkY3Qocix4MyxiMyx3MyxmVikpPyExOihwVi5jcm9zc1ZlY3RvcnMoUDAsSTApLHI9W3BWLngscFYueSxwVi56XSwkY3Qocix4MyxiMyx3MyxmVikpfWNsYW1wUG9pbnQodCxyKXtyZXR1cm4gci5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIG0xLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPXRoaXMuZ2V0U2l6ZShtMSkubGVuZ3RoKCkqLjUsdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXM6KFZkWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzFdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0RnJvbVBvaW50cyhWZCksdGhpcyl9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07dGEucHJvdG90eXBlLmlzQm94Mz0hMDt2YXIgVmQ9W25ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqXSxtMT1uZXcgaixYY3Q9bmV3IHRhLHgzPW5ldyBqLGIzPW5ldyBqLHczPW5ldyBqLFAwPW5ldyBqLEkwPW5ldyBqLGcxPW5ldyBqLExQPW5ldyBqLGZWPW5ldyBqLHBWPW5ldyBqLF8xPW5ldyBqO2Z1bmN0aW9uICRjdChlLHQscixuLGkpe2ZvcihsZXQgbz0wLGE9ZS5sZW5ndGgtMztvPD1hO28rPTMpe18xLmZyb21BcnJheShlLG8pO2xldCBzPWkueCpNYXRoLmFicyhfMS54KStpLnkqTWF0aC5hYnMoXzEueSkraS56Kk1hdGguYWJzKF8xLnopLGw9dC5kb3QoXzEpLGM9ci5kb3QoXzEpLHU9bi5kb3QoXzEpO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsdSksTWF0aC5taW4obCxjLHUpKT5zKXJldHVybiExfXJldHVybiEwfXZhciBzZnI9bmV3IHRhLHZ1ZT1uZXcgaixkVj1uZXcgaixLY3Q9bmV3IGosWmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPXJ9c2V0KHQscil7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9cix0aGlzfXNldEZyb21Qb2ludHModCxyKXtsZXQgbj10aGlzLmNlbnRlcjtyIT09dm9pZCAwP24uY29weShyKTpzZnIuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIobik7bGV0IGk9MDtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQodFtvXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQoaSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgcj10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1yKnJ9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LHIpe2xldCBuPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiByLmNvcHkodCksbj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKHIuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxyLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxyfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtLY3Quc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgcj1LY3QubGVuZ3RoU3EoKTtpZihyPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzKXtsZXQgbj1NYXRoLnNxcnQociksaT0obi10aGlzLnJhZGl1cykqLjU7dGhpcy5jZW50ZXIuYWRkKEtjdC5tdWx0aXBseVNjYWxhcihpL24pKSx0aGlzLnJhZGl1cys9aX1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5jZW50ZXIuZXF1YWxzKHQuY2VudGVyKT09PSEwP2RWLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOmRWLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQodnVlLmNvcHkodC5jZW50ZXIpLmFkZChkVikpLHRoaXMuZXhwYW5kQnlQb2ludCh2dWUuY29weSh0LmNlbnRlcikuc3ViKGRWKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sVWQ9bmV3IGosWmN0PW5ldyBqLG1WPW5ldyBqLEwwPW5ldyBqLEpjdD1uZXcgaixnVj1uZXcgaixRY3Q9bmV3IGosSmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LFVkKSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7ci5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2xldCBuPXIuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gbjwwP3IuY29weSh0aGlzLm9yaWdpbik6ci5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2xldCByPVVkLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gcjwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihVZC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodGhpcy5vcmlnaW4pLFVkLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVNxVG9TZWdtZW50KHQscixuLGkpe1pjdC5jb3B5KHQpLmFkZChyKS5tdWx0aXBseVNjYWxhciguNSksbVYuY29weShyKS5zdWIodCkubm9ybWFsaXplKCksTDAuY29weSh0aGlzLm9yaWdpbikuc3ViKFpjdCk7bGV0IG89dC5kaXN0YW5jZVRvKHIpKi41LGE9LXRoaXMuZGlyZWN0aW9uLmRvdChtVikscz1MMC5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LUwwLmRvdChtViksYz1MMC5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1hKmEpLGgsZixwLGQ7aWYodT4wKWlmKGg9YSpsLXMsZj1hKnMtbCxkPW8qdSxoPj0wKWlmKGY+PS1kKWlmKGY8PWQpe2xldCBnPTEvdTtoKj1nLGYqPWcscD1oKihoK2EqZisyKnMpK2YqKGEqaCtmKzIqbCkrY31lbHNlIGY9byxoPU1hdGgubWF4KDAsLShhKmYrcykpLHA9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LW8saD1NYXRoLm1heCgwLC0oYSpmK3MpKSxwPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZD8oaD1NYXRoLm1heCgwLC0oLWEqbytzKSksZj1oPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk6Zjw9ZD8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShhKm8rcykpLGY9aD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPWE+MD8tbzpvLGg9TWF0aC5tYXgoMCwtKGEqZitzKSkscD0taCpoK2YqKGYrMipsKStjO3JldHVybiBuJiZuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksaSYmaS5jb3B5KG1WKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoWmN0KSxwfWludGVyc2VjdFNwaGVyZSh0LHIpe1VkLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2xldCBuPVVkLmRvdCh0aGlzLmRpcmVjdGlvbiksaT1VZC5kb3QoVWQpLW4qbixvPXQucmFkaXVzKnQucmFkaXVzO2lmKGk+bylyZXR1cm4gbnVsbDtsZXQgYT1NYXRoLnNxcnQoby1pKSxzPW4tYSxsPW4rYTtyZXR1cm4gczwwJiZsPDA/bnVsbDpzPDA/dGhpcy5hdChsLHIpOnRoaXMuYXQocyxyKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCByPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYocj09PTApcmV0dXJuIHQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT09PTA/MDpudWxsO2xldCBuPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9yO3JldHVybiBuPj0wP246bnVsbH1pbnRlcnNlY3RQbGFuZSh0LHIpe2xldCBuPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBuPT09bnVsbD9udWxsOnRoaXMuYXQobixyKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IHI9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiByPT09MHx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpyPDB9aW50ZXJzZWN0Qm94KHQscil7bGV0IG4saSxvLGEscyxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGg9MS90aGlzLmRpcmVjdGlvbi56LGY9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KG49KHQubWluLngtZi54KSpjLGk9KHQubWF4LngtZi54KSpjKToobj0odC5tYXgueC1mLngpKmMsaT0odC5taW4ueC1mLngpKmMpLHU+PTA/KG89KHQubWluLnktZi55KSp1LGE9KHQubWF4LnktZi55KSp1KToobz0odC5tYXgueS1mLnkpKnUsYT0odC5taW4ueS1mLnkpKnUpLG4+YXx8bz5pfHwoKG8+bnx8biE9PW4pJiYobj1vKSwoYTxpfHxpIT09aSkmJihpPWEpLGg+PTA/KHM9KHQubWluLnotZi56KSpoLGw9KHQubWF4LnotZi56KSpoKToocz0odC5tYXguei1mLnopKmgsbD0odC5taW4uei1mLnopKmgpLG4+bHx8cz5pKXx8KChzPm58fG4hPT1uKSYmKG49cyksKGw8aXx8aSE9PWkpJiYoaT1sKSxpPDApP251bGw6dGhpcy5hdChuPj0wP246aSxyKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0aGlzLmludGVyc2VjdEJveCh0LFVkKSE9PW51bGx9aW50ZXJzZWN0VHJpYW5nbGUodCxyLG4saSxvKXtKY3Quc3ViVmVjdG9ycyhyLHQpLGdWLnN1YlZlY3RvcnMobix0KSxRY3QuY3Jvc3NWZWN0b3JzKEpjdCxnVik7bGV0IGE9dGhpcy5kaXJlY3Rpb24uZG90KFFjdCkscztpZihhPjApe2lmKGkpcmV0dXJuIG51bGw7cz0xfWVsc2UgaWYoYTwwKXM9LTEsYT0tYTtlbHNlIHJldHVybiBudWxsO0wwLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9cyp0aGlzLmRpcmVjdGlvbi5kb3QoZ1YuY3Jvc3NWZWN0b3JzKEwwLGdWKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPXMqdGhpcy5kaXJlY3Rpb24uZG90KEpjdC5jcm9zcyhMMCkpO2lmKGM8MHx8bCtjPmEpcmV0dXJuIG51bGw7bGV0IHU9LXMqTDAuZG90KFFjdCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9hLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxNZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyl7bGV0IHk9dGhpcy5lbGVtZW50cztyZXR1cm4geVswXT10LHlbNF09cix5WzhdPW4seVsxMl09aSx5WzFdPW8seVs1XT1hLHlbOV09cyx5WzEzXT1sLHlbMl09Yyx5WzZdPXUseVsxMF09aCx5WzE0XT1mLHlbM109cCx5WzddPWQseVsxMV09Zyx5WzE1XT1fLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgTWUoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0scls5XT1uWzldLHJbMTBdPW5bMTBdLHJbMTFdPW5bMTFdLHJbMTJdPW5bMTJdLHJbMTNdPW5bMTNdLHJbMTRdPW5bMTRdLHJbMTVdPW5bMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiByWzEyXT1uWzEyXSxyWzEzXT1uWzEzXSxyWzE0XT1uWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0sclszXSxyWzZdLDAsclsxXSxyWzRdLHJbN10sMCxyWzJdLHJbNV0scls4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQscixuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxyLG4pe3JldHVybiB0aGlzLnNldCh0Lngsci54LG4ueCwwLHQueSxyLnksbi55LDAsdC56LHIueixuLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cyxpPTEvUzMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG89MS9TMy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksYT0xL1MzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gclswXT1uWzBdKmksclsxXT1uWzFdKmksclsyXT1uWzJdKmksclszXT0wLHJbNF09bls0XSpvLHJbNV09bls1XSpvLHJbNl09bls2XSpvLHJbN109MCxyWzhdPW5bOF0qYSxyWzldPW5bOV0qYSxyWzEwXT1uWzEwXSphLHJbMTFdPTAsclsxMl09MCxyWzEzXT0wLHJbMTRdPTAsclsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQueCxpPXQueSxvPXQueixhPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLmNvcyhpKSxjPU1hdGguc2luKGkpLHU9TWF0aC5jb3MobyksaD1NYXRoLnNpbihvKTtpZih0Lm9yZGVyPT09IlhZWiIpe2xldCBmPWEqdSxwPWEqaCxkPXMqdSxnPXMqaDtyWzBdPWwqdSxyWzRdPS1sKmgscls4XT1jLHJbMV09cCtkKmMscls1XT1mLWcqYyxyWzldPS1zKmwsclsyXT1nLWYqYyxyWzZdPWQrcCpjLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWVhaIil7bGV0IGY9bCp1LHA9bCpoLGQ9Yyp1LGc9YypoO3JbMF09ZitnKnMscls0XT1kKnMtcCxyWzhdPWEqYyxyWzFdPWEqaCxyWzVdPWEqdSxyWzldPS1zLHJbMl09cCpzLWQscls2XT1nK2YqcyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpYWSIpe2xldCBmPWwqdSxwPWwqaCxkPWMqdSxnPWMqaDtyWzBdPWYtZypzLHJbNF09LWEqaCxyWzhdPWQrcCpzLHJbMV09cCtkKnMscls1XT1hKnUscls5XT1nLWYqcyxyWzJdPS1hKmMscls2XT1zLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWllYIil7bGV0IGY9YSp1LHA9YSpoLGQ9cyp1LGc9cypoO3JbMF09bCp1LHJbNF09ZCpjLXAscls4XT1mKmMrZyxyWzFdPWwqaCxyWzVdPWcqYytmLHJbOV09cCpjLWQsclsyXT0tYyxyWzZdPXMqbCxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllaWCIpe2xldCBmPWEqbCxwPWEqYyxkPXMqbCxnPXMqYztyWzBdPWwqdSxyWzRdPWctZipoLHJbOF09ZCpoK3AsclsxXT1oLHJbNV09YSp1LHJbOV09LXMqdSxyWzJdPS1jKnUscls2XT1wKmgrZCxyWzEwXT1mLWcqaH1lbHNlIGlmKHQub3JkZXI9PT0iWFpZIil7bGV0IGY9YSpsLHA9YSpjLGQ9cypsLGc9cypjO3JbMF09bCp1LHJbNF09LWgscls4XT1jKnUsclsxXT1mKmgrZyxyWzVdPWEqdSxyWzldPXAqaC1kLHJbMl09ZCpoLXAscls2XT1zKnUsclsxMF09ZypoK2Z9cmV0dXJuIHJbM109MCxyWzddPTAsclsxMV09MCxyWzEyXT0wLHJbMTNdPTAsclsxNF09MCxyWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMuY29tcG9zZShsZnIsdCxjZnIpfWxvb2tBdCh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4ga2wuc3ViVmVjdG9ycyh0LHIpLGtsLmxlbmd0aFNxKCk9PT0wJiYoa2wuej0xKSxrbC5ub3JtYWxpemUoKSxrMC5jcm9zc1ZlY3RvcnMobixrbCksazAubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhuLnopPT09MT9rbC54Kz0xZS00OmtsLnorPTFlLTQsa2wubm9ybWFsaXplKCksazAuY3Jvc3NWZWN0b3JzKG4sa2wpKSxrMC5ub3JtYWxpemUoKSxfVi5jcm9zc1ZlY3RvcnMoa2wsazApLGlbMF09azAueCxpWzRdPV9WLngsaVs4XT1rbC54LGlbMV09azAueSxpWzVdPV9WLnksaVs5XT1rbC55LGlbMl09azAueixpWzZdPV9WLnosaVsxMF09a2wueix0aGlzfW11bHRpcGx5KHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQscikpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQscil7bGV0IG49dC5lbGVtZW50cyxpPXIuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9blswXSxzPW5bNF0sbD1uWzhdLGM9blsxMl0sdT1uWzFdLGg9bls1XSxmPW5bOV0scD1uWzEzXSxkPW5bMl0sZz1uWzZdLF89blsxMF0seT1uWzE0XSx4PW5bM10sYj1uWzddLFM9blsxMV0sQz1uWzE1XSxQPWlbMF0saz1pWzRdLE89aVs4XSxEPWlbMTJdLEI9aVsxXSxJPWlbNV0sTD1pWzldLFI9aVsxM10sRj1pWzJdLHo9aVs2XSxVPWlbMTBdLFc9aVsxNF0sWj1pWzNdLHJ0PWlbN10sb3Q9aVsxMV0sc3Q9aVsxNV07cmV0dXJuIG9bMF09YSpQK3MqQitsKkYrYypaLG9bNF09YSprK3MqSStsKnorYypydCxvWzhdPWEqTytzKkwrbCpVK2Mqb3Qsb1sxMl09YSpEK3MqUitsKlcrYypzdCxvWzFdPXUqUCtoKkIrZipGK3AqWixvWzVdPXUqaytoKkkrZip6K3AqcnQsb1s5XT11Kk8raCpMK2YqVStwKm90LG9bMTNdPXUqRCtoKlIrZipXK3Aqc3Qsb1syXT1kKlArZypCK18qRit5Klosb1s2XT1kKmsrZypJK18qeit5KnJ0LG9bMTBdPWQqTytnKkwrXypVK3kqb3Qsb1sxNF09ZCpEK2cqUitfKlcreSpzdCxvWzNdPXgqUCtiKkIrUypGK0MqWixvWzddPXgqaytiKkkrUyp6K0MqcnQsb1sxMV09eCpPK2IqTCtTKlUrQypvdCxvWzE1XT14KkQrYipSK1MqVytDKnN0LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzRdKj10LHJbOF0qPXQsclsxMl0qPXQsclsxXSo9dCxyWzVdKj10LHJbOV0qPXQsclsxM10qPXQsclsyXSo9dCxyWzZdKj10LHJbMTBdKj10LHJbMTRdKj10LHJbM10qPXQscls3XSo9dCxyWzExXSo9dCxyWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyPXRbMF0sbj10WzRdLGk9dFs4XSxvPXRbMTJdLGE9dFsxXSxzPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGg9dFs2XSxmPXRbMTBdLHA9dFsxNF0sZD10WzNdLGc9dFs3XSxfPXRbMTFdLHk9dFsxNV07cmV0dXJuIGQqKCtvKmwqaC1pKmMqaC1vKnMqZituKmMqZitpKnMqcC1uKmwqcCkrZyooK3IqbCpwLXIqYypmK28qYSpmLWkqYSpwK2kqYyp1LW8qbCp1KStfKigrcipjKmgtcipzKnAtbyphKmgrbiphKnArbypzKnUtbipjKnUpK3kqKC1pKnMqdS1yKmwqaCtyKnMqZitpKmEqaC1uKmEqZituKmwqdSl9dHJhbnNwb3NlKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyO3JldHVybiByPXRbMV0sdFsxXT10WzRdLHRbNF09cixyPXRbMl0sdFsyXT10WzhdLHRbOF09cixyPXRbNl0sdFs2XT10WzldLHRbOV09cixyPXRbM10sdFszXT10WzEyXSx0WzEyXT1yLHI9dFs3XSx0WzddPXRbMTNdLHRbMTNdPXIscj10WzExXSx0WzExXT10WzE0XSx0WzE0XT1yLHRoaXN9c2V0UG9zaXRpb24odCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueik6KGlbMTJdPXQsaVsxM109cixpWzE0XT1uKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD10WzldLGY9dFsxMF0scD10WzExXSxkPXRbMTJdLGc9dFsxM10sXz10WzE0XSx5PXRbMTVdLHg9aCpfKmMtZypmKmMrZypsKnAtcypfKnAtaCpsKnkrcypmKnksYj1kKmYqYy11Kl8qYy1kKmwqcCthKl8qcCt1KmwqeS1hKmYqeSxTPXUqZypjLWQqaCpjK2QqcypwLWEqZypwLXUqcyp5K2EqaCp5LEM9ZCpoKmwtdSpnKmwtZCpzKmYrYSpnKmYrdSpzKl8tYSpoKl8sUD1yKngrbipiK2kqUytvKkM7aWYoUD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApO2xldCBrPTEvUDtyZXR1cm4gdFswXT14KmssdFsxXT0oZypmKm8taCpfKm8tZyppKnArbipfKnAraCppKnktbipmKnkpKmssdFsyXT0ocypfKm8tZypsKm8rZyppKmMtbipfKmMtcyppKnkrbipsKnkpKmssdFszXT0oaCpsKm8tcypmKm8taCppKmMrbipmKmMrcyppKnAtbipsKnApKmssdFs0XT1iKmssdFs1XT0odSpfKm8tZCpmKm8rZCppKnAtcipfKnAtdSppKnkrcipmKnkpKmssdFs2XT0oZCpsKm8tYSpfKm8tZCppKmMrcipfKmMrYSppKnktcipsKnkpKmssdFs3XT0oYSpmKm8tdSpsKm8rdSppKmMtcipmKmMtYSppKnArcipsKnApKmssdFs4XT1TKmssdFs5XT0oZCpoKm8tdSpnKm8tZCpuKnArcipnKnArdSpuKnktcipoKnkpKmssdFsxMF09KGEqZypvLWQqcypvK2QqbipjLXIqZypjLWEqbip5K3Iqcyp5KSprLHRbMTFdPSh1KnMqby1hKmgqby11Km4qYytyKmgqYythKm4qcC1yKnMqcCkqayx0WzEyXT1DKmssdFsxM109KHUqZyppLWQqaCppK2QqbipmLXIqZypmLXUqbipfK3IqaCpfKSprLHRbMTRdPShkKnMqaS1hKmcqaS1kKm4qbCtyKmcqbCthKm4qXy1yKnMqXykqayx0WzE1XT0oYSpoKmktdSpzKmkrdSpuKmwtcipoKmwtYSpuKmYrcipzKmYpKmssdGhpc31zY2FsZSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LG89dC56O3JldHVybiByWzBdKj1uLHJbNF0qPWkscls4XSo9byxyWzFdKj1uLHJbNV0qPWkscls5XSo9byxyWzJdKj1uLHJbNl0qPWksclsxMF0qPW8sclszXSo9bixyWzddKj1pLHJbMTFdKj1vLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0sbj10WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSxpPXRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF07cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChyLG4saSkpfW1ha2VUcmFuc2xhdGlvbih0LHIsbil7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsciwwLDAsMSxuLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsciwtbiwwLDAsbixyLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KHIsMCxuLDAsMCwxLDAsMCwtbiwwLHIsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQociwtbiwwLDAsbixyLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LHIpe2xldCBuPU1hdGguY29zKHIpLGk9TWF0aC5zaW4ociksbz0xLW4sYT10Lngscz10LnksbD10LnosYz1vKmEsdT1vKnM7cmV0dXJuIHRoaXMuc2V0KGMqYStuLGMqcy1pKmwsYypsK2kqcywwLGMqcytpKmwsdSpzK24sdSpsLWkqYSwwLGMqbC1pKnMsdSpsK2kqYSxvKmwqbCtuLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxyLG4pe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsciwwLDAsMCwwLG4sMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuc2V0KDEsbixvLDAsdCwxLGEsMCxyLGksMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPXIuX3gsYT1yLl95LHM9ci5feixsPXIuX3csYz1vK28sdT1hK2EsaD1zK3MsZj1vKmMscD1vKnUsZD1vKmgsZz1hKnUsXz1hKmgseT1zKmgseD1sKmMsYj1sKnUsUz1sKmgsQz1uLngsUD1uLnksaz1uLno7cmV0dXJuIGlbMF09KDEtKGcreSkpKkMsaVsxXT0ocCtTKSpDLGlbMl09KGQtYikqQyxpWzNdPTAsaVs0XT0ocC1TKSpQLGlbNV09KDEtKGYreSkpKlAsaVs2XT0oXyt4KSpQLGlbN109MCxpWzhdPShkK2IpKmssaVs5XT0oXy14KSprLGlbMTBdPSgxLShmK2cpKSprLGlbMTFdPTAsaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnosaVsxNV09MSx0aGlzfWRlY29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPVMzLnNldChpWzBdLGlbMV0saVsyXSkubGVuZ3RoKCksYT1TMy5zZXQoaVs0XSxpWzVdLGlbNl0pLmxlbmd0aCgpLHM9UzMuc2V0KGlbOF0saVs5XSxpWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9aVsxMl0sdC55PWlbMTNdLHQuej1pWzE0XSxpaC5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvYSxoPTEvcztyZXR1cm4gaWguZWxlbWVudHNbMF0qPWMsaWguZWxlbWVudHNbMV0qPWMsaWguZWxlbWVudHNbMl0qPWMsaWguZWxlbWVudHNbNF0qPXUsaWguZWxlbWVudHNbNV0qPXUsaWguZWxlbWVudHNbNl0qPXUsaWguZWxlbWVudHNbOF0qPWgsaWguZWxlbWVudHNbOV0qPWgsaWguZWxlbWVudHNbMTBdKj1oLHIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGloKSxuLng9byxuLnk9YSxuLno9cyx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LHIsbixpLG8sYSl7YT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IHM9dGhpcy5lbGVtZW50cyxsPTIqby8oci10KSxjPTIqby8obi1pKSx1PShyK3QpLyhyLXQpLGg9KG4raSkvKG4taSksZj0tKGErbykvKGEtbykscD0tMiphKm8vKGEtbyk7cmV0dXJuIHNbMF09bCxzWzRdPTAsc1s4XT11LHNbMTJdPTAsc1sxXT0wLHNbNV09YyxzWzldPWgsc1sxM109MCxzWzJdPTAsc1s2XT0wLHNbMTBdPWYsc1sxNF09cCxzWzNdPTAsc1s3XT0wLHNbMTFdPS0xLHNbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmVsZW1lbnRzLGw9MS8oci10KSxjPTEvKG4taSksdT0xLyhhLW8pLGg9KHIrdCkqbCxmPShuK2kpKmMscD0oYStvKSp1O3JldHVybiBzWzBdPTIqbCxzWzRdPTAsc1s4XT0wLHNbMTJdPS1oLHNbMV09MCxzWzVdPTIqYyxzWzldPTAsc1sxM109LWYsc1syXT0wLHNbNl09MCxzWzEwXT0tMip1LHNbMTRdPS1wLHNbM109MCxzWzddPTAsc1sxMV09MCxzWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8MTY7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LHI9MCl7Zm9yKGxldCBuPTA7bjwxNjtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rcl07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gdFtyXT1uWzBdLHRbcisxXT1uWzFdLHRbcisyXT1uWzJdLHRbciszXT1uWzNdLHRbcis0XT1uWzRdLHRbcis1XT1uWzVdLHRbcis2XT1uWzZdLHRbcis3XT1uWzddLHRbcis4XT1uWzhdLHRbcis5XT1uWzldLHRbcisxMF09blsxMF0sdFtyKzExXT1uWzExXSx0W3IrMTJdPW5bMTJdLHRbcisxM109blsxM10sdFtyKzE0XT1uWzE0XSx0W3IrMTVdPW5bMTVdLHR9fTtNZS5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciBTMz1uZXcgaixpaD1uZXcgTWUsbGZyPW5ldyBqKDAsMCwwKSxjZnI9bmV3IGooMSwxLDEpLGswPW5ldyBqLF9WPW5ldyBqLGtsPW5ldyBqLHh1ZT1uZXcgTWUsYnVlPW5ldyB5aSx0bT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCxpPXRtLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aX1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LHIsbixpPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQscj10aGlzLl9vcmRlcixuPSEwKXtsZXQgaT10LmVsZW1lbnRzLG89aVswXSxhPWlbNF0scz1pWzhdLGw9aVsxXSxjPWlbNV0sdT1pWzldLGg9aVsyXSxmPWlbNl0scD1pWzEwXTtzd2l0Y2gocil7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKFpvKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUscCksdGhpcy5fej1NYXRoLmF0YW4yKC1hLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLVpvKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyxwKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihabyhmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1abyhoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1hLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oWm8obCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMscCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtWm8oYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIityKX1yZXR1cm4gdGhpcy5fb3JkZXI9cixuPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQscixuKXtyZXR1cm4geHVlLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KHh1ZSxyLG4pfXNldEZyb21WZWN0b3IzKHQscj10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LHIpfXJlb3JkZXIodCl7cmV0dXJuIGJ1ZS5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihidWUsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdFszXSE9PXZvaWQgMCYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMuX3gsdFtyKzFdPXRoaXMuX3ksdFtyKzJdPXRoaXMuX3osdFtyKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgaih0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3RtLnByb3RvdHlwZS5pc0V1bGVyPSEwO3RtLkRlZmF1bHRPcmRlcj0iWFlaIjt0bS5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO3ZhciBYMz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9KDE8PHR8MCk+Pj4wfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuKHRoaXMubWFzayZ0Lm1hc2spIT09MH1pc0VuYWJsZWQodCl7cmV0dXJuKHRoaXMubWFzayYoMTw8dHwwKSkhPT0wfX0sdWZyPTAsd3VlPW5ldyBqLE0zPW5ldyB5aSxxZD1uZXcgTWUseVY9bmV3IGosa1A9bmV3IGosaGZyPW5ldyBqLGZmcj1uZXcgeWksU3VlPW5ldyBqKDEsMCwwKSxNdWU9bmV3IGooMCwxLDApLEV1ZT1uZXcgaigwLDAsMSkscGZyPXt0eXBlOiJhZGRlZCJ9LFR1ZT17dHlwZToicmVtb3ZlZCJ9LG9yPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnVmcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPW9yLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBqLHI9bmV3IHRtLG49bmV3IHlpLGk9bmV3IGooMSwxLDEpO2Z1bmN0aW9uIG8oKXtuLnNldEZyb21FdWxlcihyLCExKX1mdW5jdGlvbiBhKCl7ci5zZXRGcm9tUXVhdGVybmlvbihuLHZvaWQgMCwhMSl9ci5fb25DaGFuZ2Uobyksbi5fb25DaGFuZ2UoYSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgTWV9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGtpfX0pLHRoaXMubWF0cml4PW5ldyBNZSx0aGlzLm1hdHJpeFdvcmxkPW5ldyBNZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBYMyx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxyKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LHIpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxyKXtyZXR1cm4gTTMuc2V0RnJvbUF4aXNBbmdsZSh0LHIpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShNMyksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LHIpe3JldHVybiBNMy5zZXRGcm9tQXhpc0FuZ2xlKHQsciksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKFN1ZSx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhNdWUsdCl9cm90YXRlWih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoRXVlLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LHIpe3JldHVybiB3dWUuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZCh3dWUubXVsdGlwbHlTY2FsYXIocikpLHRoaXN9dHJhbnNsYXRlWCh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoU3VlLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKE11ZSx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhFdWUsdCl9bG9jYWxUb1dvcmxkKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX13b3JsZFRvTG9jYWwodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHFkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LHIsbil7dC5pc1ZlY3RvcjM/eVYuY29weSh0KTp5Vi5zZXQodCxyLG4pO2xldCBpPXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLGtQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/cWQubG9va0F0KGtQLHlWLHRoaXMudXApOnFkLmxvb2tBdCh5VixrUCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHFkKSxpJiYocWQuZXh0cmFjdFJvdGF0aW9uKGkubWF0cml4V29ybGQpLE0zLnNldEZyb21Sb3RhdGlvbk1hdHJpeChxZCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zLmludmVydCgpKSl9YWRkKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCByPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0aGlzLmFkZChhcmd1bWVudHNbcl0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyh0LnBhcmVudCE9PW51bGwmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQocGZyKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbbl0pO3JldHVybiB0aGlzfWxldCByPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4gciE9PS0xJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShyLDEpLHQuZGlzcGF0Y2hFdmVudChUdWUpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IHI9dGhpcy5jaGlsZHJlblt0XTtyLnBhcmVudD1udWxsLHIuZGlzcGF0Y2hFdmVudChUdWUpfXJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXN9YXR0YWNoKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpLHQucGFyZW50IT09bnVsbCYmKHQucGFyZW50LnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KHFkKSx0aGlzLmFkZCh0KSx0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKSx0aGlzfWdldE9iamVjdEJ5SWQodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgiaWQiLHQpfWdldE9iamVjdEJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIix0KX1nZXRPYmplY3RCeVByb3BlcnR5KHQscil7aWYodGhpc1t0XT09PXIpcmV0dXJuIHRoaXM7Zm9yKGxldCBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPGk7bisrKXtsZXQgYT10aGlzLmNoaWxkcmVuW25dLmdldE9iamVjdEJ5UHJvcGVydHkodCxyKTtpZihhIT09dm9pZCAwKXJldHVybiBhfX1nZXRXb3JsZFBvc2l0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKX1nZXRXb3JsZFF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHQsaGZyKSx0fWdldFdvcmxkU2NhbGUodCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLGZmcix0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCByPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KHJbOF0scls5XSxyWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCByPXRoaXMucGFyZW50O3IhPT1udWxsJiYodChyKSxyLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQscil7bGV0IG49dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZuIT09bnVsbCYmbi51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCkscj09PSEwKXtsZXQgaT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixuPXt9O3ImJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxuLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCBpPXt9O2kudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoaS5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKGkucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoaS5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKGkucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxpLmxheWVycz10aGlzLmxheWVycy5tYXNrLGkubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKGkubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihpLnR5cGU9Ikluc3RhbmNlZE1lc2giLGkuY291bnQ9dGhpcy5jb3VudCxpLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKGkuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBvKHMsbCl7cmV0dXJuIHNbbC51dWlkXT09PXZvaWQgMCYmKHNbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9pLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihpLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihpLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtpLmdlb21ldHJ5PW8odC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBzPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihzIT09dm9pZCAwJiZzLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9cy5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107byh0LnNoYXBlcyxoKX1lbHNlIG8odC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKGkuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxpLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYobyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxpLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IHM9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKXMucHVzaChvKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtpLm1hdGVyaWFsPXN9ZWxzZSBpLm1hdGVyaWFsPW8odC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7aS5jaGlsZHJlbj1bXTtmb3IobGV0IHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylpLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltzXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe2kuYW5pbWF0aW9ucz1bXTtmb3IobGV0IHM9MDtzPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7cysrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbc107aS5hbmltYXRpb25zLnB1c2gobyh0LmFuaW1hdGlvbnMsbCkpfX1pZihyKXtsZXQgcz1hKHQuZ2VvbWV0cmllcyksbD1hKHQubWF0ZXJpYWxzKSxjPWEodC50ZXh0dXJlcyksdT1hKHQuaW1hZ2VzKSxoPWEodC5zaGFwZXMpLGY9YSh0LnNrZWxldG9ucykscD1hKHQuYW5pbWF0aW9ucyk7cy5sZW5ndGg+MCYmKG4uZ2VvbWV0cmllcz1zKSxsLmxlbmd0aD4wJiYobi5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKG4udGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKG4uaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihuLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYobi5za2VsZXRvbnM9ZikscC5sZW5ndGg+MCYmKG4uYW5pbWF0aW9ucz1wKX1yZXR1cm4gbi5vYmplY3Q9aSxuO2Z1bmN0aW9uIGEocyl7bGV0IGw9W107Zm9yKGxldCBjIGluIHMpe2xldCB1PXNbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LHI9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxyPT09ITApZm9yKGxldCBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe2xldCBpPXQuY2hpbGRyZW5bbl07dGhpcy5hZGQoaS5jbG9uZSgpKX1yZXR1cm4gdGhpc319O29yLkRlZmF1bHRVcD1uZXcgaigwLDEsMCk7b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7b3IucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIG9oPW5ldyBqLEdkPW5ldyBqLHR1dD1uZXcgaixXZD1uZXcgaixFMz1uZXcgaixUMz1uZXcgaixDdWU9bmV3IGosZXV0PW5ldyBqLHJ1dD1uZXcgaixudXQ9bmV3IGosb2k9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3RoaXMuYT10LHRoaXMuYj1yLHRoaXMuYz1ufXN0YXRpYyBnZXROb3JtYWwodCxyLG4saSl7aS5zdWJWZWN0b3JzKG4sciksb2guc3ViVmVjdG9ycyh0LHIpLGkuY3Jvc3Mob2gpO2xldCBvPWkubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP2kubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOmkuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQscixuLGksbyl7b2guc3ViVmVjdG9ycyhpLHIpLEdkLnN1YlZlY3RvcnMobixyKSx0dXQuc3ViVmVjdG9ycyh0LHIpO2xldCBhPW9oLmRvdChvaCkscz1vaC5kb3QoR2QpLGw9b2guZG90KHR1dCksYz1HZC5kb3QoR2QpLHU9R2QuZG90KHR1dCksaD1hKmMtcypzO2lmKGg9PT0wKXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IGY9MS9oLHA9KGMqbC1zKnUpKmYsZD0oYSp1LXMqbCkqZjtyZXR1cm4gby5zZXQoMS1wLWQsZCxwKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LHIsbixpKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxyLG4saSxXZCksV2QueD49MCYmV2QueT49MCYmV2QueCtXZC55PD0xfXN0YXRpYyBnZXRVVih0LHIsbixpLG8sYSxzLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LHIsbixpLFdkKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sV2QueCksbC5hZGRTY2FsZWRWZWN0b3IoYSxXZC55KSxsLmFkZFNjYWxlZFZlY3RvcihzLFdkLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxyLG4saSl7cmV0dXJuIG9oLnN1YlZlY3RvcnMobixyKSxHZC5zdWJWZWN0b3JzKHQsciksb2guY3Jvc3MoR2QpLmRvdChpKTwwfXNldCh0LHIsbil7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KHIpLHRoaXMuYy5jb3B5KG4pLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5jb3B5KHRbcl0pLHRoaXMuYi5jb3B5KHRbbl0pLHRoaXMuYy5jb3B5KHRbaV0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsciksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxuKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBvaC5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLEdkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksb2guY3Jvc3MoR2QpLmxlbmd0aCgpKi41fWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIG9pLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LHIpe3JldHVybiBvaS5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxyKX1nZXRVVih0LHIsbixpLG8pe3JldHVybiBvaS5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLHIsbixpLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIG9pLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gb2kuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7bGV0IG49dGhpcy5hLGk9dGhpcy5iLG89dGhpcy5jLGEscztFMy5zdWJWZWN0b3JzKGksbiksVDMuc3ViVmVjdG9ycyhvLG4pLGV1dC5zdWJWZWN0b3JzKHQsbik7bGV0IGw9RTMuZG90KGV1dCksYz1UMy5kb3QoZXV0KTtpZihsPD0wJiZjPD0wKXJldHVybiByLmNvcHkobik7cnV0LnN1YlZlY3RvcnModCxpKTtsZXQgdT1FMy5kb3QocnV0KSxoPVQzLmRvdChydXQpO2lmKHU+PTAmJmg8PXUpcmV0dXJuIHIuY29weShpKTtsZXQgZj1sKmgtdSpjO2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIGE9bC8obC11KSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpO251dC5zdWJWZWN0b3JzKHQsbyk7bGV0IHA9RTMuZG90KG51dCksZD1UMy5kb3QobnV0KTtpZihkPj0wJiZwPD1kKXJldHVybiByLmNvcHkobyk7bGV0IGc9cCpjLWwqZDtpZihnPD0wJiZjPj0wJiZkPD0wKXJldHVybiBzPWMvKGMtZCksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihUMyxzKTtsZXQgXz11KmQtcCpoO2lmKF88PTAmJmgtdT49MCYmcC1kPj0wKXJldHVybiBDdWUuc3ViVmVjdG9ycyhvLGkpLHM9KGgtdSkvKGgtdSsocC1kKSksci5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihDdWUscyk7bGV0IHk9MS8oXytnK2YpO3JldHVybiBhPWcqeSxzPWYqeSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpLmFkZFNjYWxlZFZlY3RvcihUMyxzKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxkZnI9MCxxaT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpkZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPVYzLHRoaXMuc2lkZT1JMSx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9UGh0LHRoaXMuYmxlbmREc3Q9SWh0LHRoaXMuYmxlbmRFcXVhdGlvbj1NMSx0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPWlVLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9T2ZlLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW5VLHRoaXMuc3RlbmNpbFpGYWlsPW5VLHRoaXMuc3RlbmNpbFpQYXNzPW5VLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCByIGluIHQpe2xldCBuPXRbcl07aWYobj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrcisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKHI9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PUFodDtjb250aW51ZX1sZXQgaT10aGlzW3JdO2lmKGk9PT12b2lkIDApe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrcisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpO2NvbnRpbnVlfWkmJmkuaXNDb2xvcj9pLnNldChuKTppJiZpLmlzVmVjdG9yMyYmbiYmbi5pc1ZlY3RvcjM/aS5jb3B5KG4pOnRoaXNbcl09bn19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIjtyJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07bi51dWlkPXRoaXMudXVpZCxuLnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYobi5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYobi5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx0aGlzLnJvdWdobmVzcyE9PXZvaWQgMCYmKG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx0aGlzLm1ldGFsbmVzcyE9PXZvaWQgMCYmKG4ubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx0aGlzLnNoZWVuIT09dm9pZCAwJiYobi5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYobi5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdGhpcy5zaGVlblJvdWdobmVzcyE9PXZvaWQgMCYmKG4uc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYobi5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiZ0aGlzLmVtaXNzaXZlSW50ZW5zaXR5IT09MSYmKG4uZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYobi5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYobi5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYobi5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdGhpcy5zaGluaW5lc3MhPT12b2lkIDAmJihuLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdGhpcy5jbGVhcmNvYXQhPT12b2lkIDAmJihuLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MhPT12b2lkIDAmJihuLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobi5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihuLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihuLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLG4ubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihuLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsbi5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihuLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLG4uYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYobi5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxuLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYobi5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsbi5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKG4ubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKG4uZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdGhpcy5jb21iaW5lIT09dm9pZCAwJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSkpLHRoaXMuZW52TWFwSW50ZW5zaXR5IT09dm9pZCAwJiYobi5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHRoaXMucmVmbGVjdGl2aXR5IT09dm9pZCAwJiYobi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHRoaXMucmVmcmFjdGlvblJhdGlvIT09dm9pZCAwJiYobi5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRyYW5zbWlzc2lvbiE9PXZvaWQgMCYmKG4udHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYobi50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudGhpY2tuZXNzIT09dm9pZCAwJiYobi50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihuLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdGhpcy5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdGhpcy5zaXplIT09dm9pZCAwJiYobi5zaXplPXRoaXMuc2l6ZSksdGhpcy5zaGFkb3dTaWRlIT09bnVsbCYmKG4uc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHRoaXMuc2l6ZUF0dGVudWF0aW9uIT09dm9pZCAwJiYobi5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLHRoaXMuYmxlbmRpbmchPT1WMyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksdGhpcy5zaWRlIT09STEmJihuLnNpZGU9dGhpcy5zaWRlKSx0aGlzLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPSEwKSx0aGlzLm9wYWNpdHk8MSYmKG4ub3BhY2l0eT10aGlzLm9wYWNpdHkpLHRoaXMudHJhbnNwYXJlbnQ9PT0hMCYmKG4udHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCksbi5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmMsbi5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3Qsbi5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZSxuLmNvbG9yV3JpdGU9dGhpcy5jb2xvcldyaXRlLG4uYWxwaGFXcml0ZT10aGlzLmFscGhhV3JpdGUsbi5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsbi5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxuLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsbi5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixuLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxuLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsbi5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsbi5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmdGhpcy5yb3RhdGlvbiE9PTAmJihuLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLHRoaXMucG9seWdvbk9mZnNldD09PSEwJiYobi5wb2x5Z29uT2Zmc2V0PSEwKSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IhPT0wJiYobi5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMhPT0wJiYobi5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiZ0aGlzLmxpbmV3aWR0aCE9PTEmJihuLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdGhpcy5kYXNoU2l6ZSE9PXZvaWQgMCYmKG4uZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdGhpcy5nYXBTaXplIT09dm9pZCAwJiYobi5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdGhpcy5zY2FsZSE9PXZvaWQgMCYmKG4uc2NhbGU9dGhpcy5zY2FsZSksdGhpcy5kaXRoZXJpbmc9PT0hMCYmKG4uZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYobi5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLHRoaXMuYWxwaGFUb0NvdmVyYWdlPT09ITAmJihuLmFscGhhVG9Db3ZlcmFnZT10aGlzLmFscGhhVG9Db3ZlcmFnZSksdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9PT0hMCYmKG4ucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKSx0aGlzLndpcmVmcmFtZT09PSEwJiYobi53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPjEmJihuLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCksdGhpcy53aXJlZnJhbWVMaW5lY2FwIT09InJvdW5kIiYmKG4ud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApLHRoaXMud2lyZWZyYW1lTGluZWpvaW4hPT0icm91bmQiJiYobi53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKSx0aGlzLmZsYXRTaGFkaW5nPT09ITAmJihuLmZsYXRTaGFkaW5nPXRoaXMuZmxhdFNoYWRpbmcpLHRoaXMudmlzaWJsZT09PSExJiYobi52aXNpYmxlPSExKSx0aGlzLnRvbmVNYXBwZWQ9PT0hMSYmKG4udG9uZU1hcHBlZD0hMSksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTtmdW5jdGlvbiBpKG8pe2xldCBhPVtdO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1vW3NdO2RlbGV0ZSBsLm1ldGFkYXRhLGEucHVzaChsKX1yZXR1cm4gYX1pZihyKXtsZXQgbz1pKHQudGV4dHVyZXMpLGE9aSh0LmltYWdlcyk7by5sZW5ndGg+MCYmKG4udGV4dHVyZXM9byksYS5sZW5ndGg+MCYmKG4uaW1hZ2VzPWEpfXJldHVybiBufWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCByPXQuY2xpcHBpbmdQbGFuZXMsbj1udWxsO2lmKHIhPT1udWxsKXtsZXQgaT1yLmxlbmd0aDtuPW5ldyBBcnJheShpKTtmb3IobGV0IG89MDtvIT09aTsrK28pbltvXT1yW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9bix0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfX07cWkucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIHNoPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtzaC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgSW49bmV3IGosdlY9bmV3IEx0LEplPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLm5vcm1hbGl6ZWQ9bj09PSEwLHRoaXMudXNhZ2U9VzMsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQscixuKXt0Kj10aGlzLml0ZW1TaXplLG4qPXIuaXRlbVNpemU7Zm9yKGxldCBpPTAsbz10aGlzLml0ZW1TaXplO2k8bztpKyspdGhpcy5hcnJheVt0K2ldPXIuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgbmUpLHJbbisrXT1hLnIscltuKytdPWEuZyxyW24rK109YS5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgTHQpLHJbbisrXT1hLngscltuKytdPWEueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IGopLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgZW4pLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56LHJbbisrXT1hLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKXZWLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxyKSx2Vi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShyLHZWLngsdlYueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsciksSW4uYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKHIsSW4ueCxJbi55LEluLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi54PXRoaXMuZ2V0WChyKSxJbi55PXRoaXMuZ2V0WShyKSxJbi56PXRoaXMuZ2V0WihyKSxJbi5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspSW4ueD10aGlzLmdldFgociksSW4ueT10aGlzLmdldFkociksSW4uej10aGlzLmdldFoociksSW4uYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUluLng9dGhpcy5nZXRYKHIpLEluLnk9dGhpcy5nZXRZKHIpLEluLno9dGhpcy5nZXRaKHIpLEluLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihyLEluLngsSW4ueSxJbi56KTtyZXR1cm4gdGhpc31zZXQodCxyPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LHIpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxyKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPXIsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPXIsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPXIsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPXIsdGhpc31zZXRYWSh0LHIsbil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpc31zZXRYWVpXKHQscixuLGksbyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1XMyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O0plLnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgY1U9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDhBcnJheSh0KSxyLG4pfX0sdVU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQ4QXJyYXkodCkscixuKX19LGhVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxyLG4pfX0sZlU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDE2QXJyYXkodCkscixuKX19LCQzPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxyLG4pfX0scFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDMyQXJyYXkodCkscixuKX19LEszPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxyLG4pfX0sZFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLHIsbil9fTtkVS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwO3ZhciB4ZT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQzMkFycmF5KHQpLHIsbil9fSxtVT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQ2NEFycmF5KHQpLHIsbil9fSxtZnI9MCxYYz1uZXcgTWUsaXV0PW5ldyBvcixDMz1uZXcgaixSbD1uZXcgdGEsUlA9bmV3IHRhLExvPW5ldyBqLFBlPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOm1mcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KEJmZSh0KT9LMzokMykodCwxKTp0aGlzLmluZGV4PXQsdGhpc31nZXRBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XX1zZXRBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdPXIsdGhpc31kZWxldGVBdHRyaWJ1dGUodCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbdF0sdGhpc31oYXNBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XSE9PXZvaWQgMH1hZGRHcm91cCh0LHIsbj0wKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDp0LGNvdW50OnIsbWF0ZXJpYWxJbmRleDpufSl9Y2xlYXJHcm91cHMoKXt0aGlzLmdyb3Vwcz1bXX1zZXREcmF3UmFuZ2UodCxyKXt0aGlzLmRyYXdSYW5nZS5zdGFydD10LHRoaXMuZHJhd1JhbmdlLmNvdW50PXJ9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtyIT09dm9pZCAwJiYoci5hcHBseU1hdHJpeDQodCksci5uZWVkc1VwZGF0ZT0hMCk7bGV0IG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtpZihuIT09dm9pZCAwKXtsZXQgbz1uZXcga2koKS5nZXROb3JtYWxNYXRyaXgodCk7bi5hcHBseU5vcm1hbE1hdHJpeChvKSxuLm5lZWRzVXBkYXRlPSEwfWxldCBpPXRoaXMuYXR0cmlidXRlcy50YW5nZW50O3JldHVybiBpIT09dm9pZCAwJiYoaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksaS5uZWVkc1VwZGF0ZT0hMCksdGhpcy5ib3VuZGluZ0JveCE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ1NwaGVyZSE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpc31hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvblgodCksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9cm90YXRlWSh0KXtyZXR1cm4gWGMubWFrZVJvdGF0aW9uWSh0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31yb3RhdGVaKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25aKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXRyYW5zbGF0ZSh0LHIsbil7cmV0dXJuIFhjLm1ha2VUcmFuc2xhdGlvbih0LHIsbiksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9c2NhbGUodCxyLG4pe3JldHVybiBYYy5tYWtlU2NhbGUodCxyLG4pLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfWxvb2tBdCh0KXtyZXR1cm4gaXV0Lmxvb2tBdCh0KSxpdXQudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoaXV0Lm1hdHJpeCksdGhpc31jZW50ZXIoKXtyZXR1cm4gdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihDMykubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoQzMueCxDMy55LEMzLnopLHRoaXN9c2V0RnJvbVBvaW50cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2xldCBvPXRbbl07ci5wdXNoKG8ueCxvLnksby56fHwwKX1yZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSksdGhpc31jb21wdXRlQm91bmRpbmdCb3goKXt0aGlzLmJvdW5kaW5nQm94PT09bnVsbCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IHRhKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgaigtMS8wLC0xLzAsLTEvMCksbmV3IGooMS8wLDEvMCwxLzApKTtyZXR1cm59aWYodCE9PXZvaWQgMCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1yW25dO1JsLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUobyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixSbC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbyksTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxSbC5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWF4KSl9fWVsc2UgdGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTsoaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueCl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnkpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi56KSkmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBDb21wdXRlZCBtaW4vbWF4IGhhdmUgTmFOIHZhbHVlcy4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX1jb21wdXRlQm91bmRpbmdTcGhlcmUoKXt0aGlzLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IFpmKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgaiwxLzApO3JldHVybn1pZih0KXtsZXQgbj10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihSbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dO1JQLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyhSbC5taW4sUlAubWluKSxSbC5leHBhbmRCeVBvaW50KExvKSxMby5hZGRWZWN0b3JzKFJsLm1heCxSUC5tYXgpLFJsLmV4cGFuZEJ5UG9pbnQoTG8pKTooUmwuZXhwYW5kQnlQb2ludChSUC5taW4pLFJsLmV4cGFuZEJ5UG9pbnQoUlAubWF4KSl9UmwuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBvPTAsYT10LmNvdW50O288YTtvKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSk7aWYocilmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspe2xldCBzPXJbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9cy5jb3VudDtjPHU7YysrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxsJiYoQzMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLExvLmFkZChDMykpLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KGkpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmF0dHJpYnV0ZXM7aWYodD09PW51bGx8fHIucG9zaXRpb249PT12b2lkIDB8fHIubm9ybWFsPT09dm9pZCAwfHxyLnV2PT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGZhaWxlZC4gTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIChpbmRleCwgcG9zaXRpb24sIG5vcm1hbCBvciB1dikiKTtyZXR1cm59bGV0IG49dC5hcnJheSxpPXIucG9zaXRpb24uYXJyYXksbz1yLm5vcm1hbC5hcnJheSxhPXIudXYuYXJyYXkscz1pLmxlbmd0aC8zO3IudGFuZ2VudD09PXZvaWQgMCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBKZShuZXcgRmxvYXQzMkFycmF5KDQqcyksNCkpO2xldCBsPXIudGFuZ2VudC5hcnJheSxjPVtdLHU9W107Zm9yKGxldCBCPTA7QjxzO0IrKyljW0JdPW5ldyBqLHVbQl09bmV3IGo7bGV0IGg9bmV3IGosZj1uZXcgaixwPW5ldyBqLGQ9bmV3IEx0LGc9bmV3IEx0LF89bmV3IEx0LHk9bmV3IGoseD1uZXcgajtmdW5jdGlvbiBiKEIsSSxMKXtoLmZyb21BcnJheShpLEIqMyksZi5mcm9tQXJyYXkoaSxJKjMpLHAuZnJvbUFycmF5KGksTCozKSxkLmZyb21BcnJheShhLEIqMiksZy5mcm9tQXJyYXkoYSxJKjIpLF8uZnJvbUFycmF5KGEsTCoyKSxmLnN1YihoKSxwLnN1YihoKSxnLnN1YihkKSxfLnN1YihkKTtsZXQgUj0xLyhnLngqXy55LV8ueCpnLnkpOyFpc0Zpbml0ZShSKXx8KHkuY29weShmKS5tdWx0aXBseVNjYWxhcihfLnkpLmFkZFNjYWxlZFZlY3RvcihwLC1nLnkpLm11bHRpcGx5U2NhbGFyKFIpLHguY29weShwKS5tdWx0aXBseVNjYWxhcihnLngpLmFkZFNjYWxlZFZlY3RvcihmLC1fLngpLm11bHRpcGx5U2NhbGFyKFIpLGNbQl0uYWRkKHkpLGNbSV0uYWRkKHkpLGNbTF0uYWRkKHkpLHVbQl0uYWRkKHgpLHVbSV0uYWRkKHgpLHVbTF0uYWRkKHgpKX1sZXQgUz10aGlzLmdyb3VwcztTLmxlbmd0aD09PTAmJihTPVt7c3RhcnQ6MCxjb3VudDpuLmxlbmd0aH1dKTtmb3IobGV0IEI9MCxJPVMubGVuZ3RoO0I8STsrK0Ipe2xldCBMPVNbQl0sUj1MLnN0YXJ0LEY9TC5jb3VudDtmb3IobGV0IHo9UixVPVIrRjt6PFU7eis9MyliKG5beiswXSxuW3orMV0sblt6KzJdKX1sZXQgQz1uZXcgaixQPW5ldyBqLGs9bmV3IGosTz1uZXcgajtmdW5jdGlvbiBEKEIpe2suZnJvbUFycmF5KG8sQiozKSxPLmNvcHkoayk7bGV0IEk9Y1tCXTtDLmNvcHkoSSksQy5zdWIoay5tdWx0aXBseVNjYWxhcihrLmRvdChJKSkpLm5vcm1hbGl6ZSgpLFAuY3Jvc3NWZWN0b3JzKE8sSSk7bGV0IFI9UC5kb3QodVtCXSk8MD8tMToxO2xbQio0XT1DLngsbFtCKjQrMV09Qy55LGxbQio0KzJdPUMueixsW0IqNCszXT1SfWZvcihsZXQgQj0wLEk9Uy5sZW5ndGg7QjxJOysrQil7bGV0IEw9U1tCXSxSPUwuc3RhcnQsRj1MLmNvdW50O2ZvcihsZXQgej1SLFU9UitGO3o8VTt6Kz0zKUQoblt6KzBdKSxEKG5beisxXSksRChuW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihyIT09dm9pZCAwKXtsZXQgbj10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYobj09PXZvaWQgMCluPW5ldyBKZShuZXcgRmxvYXQzMkFycmF5KHIuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbik7ZWxzZSBmb3IobGV0IGY9MCxwPW4uY291bnQ7ZjxwO2YrKyluLnNldFhZWihmLDAsMCwwKTtsZXQgaT1uZXcgaixvPW5ldyBqLGE9bmV3IGoscz1uZXcgaixsPW5ldyBqLGM9bmV3IGosdT1uZXcgaixoPW5ldyBqO2lmKHQpZm9yKGxldCBmPTAscD10LmNvdW50O2Y8cDtmKz0zKXtsZXQgZD10LmdldFgoZiswKSxnPXQuZ2V0WChmKzEpLF89dC5nZXRYKGYrMik7aS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZCksby5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZyksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsXyksdS5zdWJWZWN0b3JzKGEsbyksaC5zdWJWZWN0b3JzKGksbyksdS5jcm9zcyhoKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUobixkKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUobixnKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUobixfKSxzLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxuLnNldFhZWihkLHMueCxzLnkscy56KSxuLnNldFhZWihnLGwueCxsLnksbC56KSxuLnNldFhZWihfLGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLHA9ci5jb3VudDtmPHA7Zis9MylpLmZyb21CdWZmZXJBdHRyaWJ1dGUocixmKzApLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGYrMSksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZisyKSx1LnN1YlZlY3RvcnMoYSxvKSxoLnN1YlZlY3RvcnMoaSxvKSx1LmNyb3NzKGgpLG4uc2V0WFlaKGYrMCx1LngsdS55LHUueiksbi5zZXRYWVooZisxLHUueCx1LnksdS56KSxuLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLG4ubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQscil7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59cj09PXZvaWQgMCYmKHI9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBpIGluIG4pe2lmKHQuYXR0cmlidXRlc1tpXT09PXZvaWQgMCljb250aW51ZTtsZXQgYT1uW2ldLmFycmF5LHM9dC5hdHRyaWJ1dGVzW2ldLGw9cy5hcnJheSxjPXMuaXRlbVNpemUqcix1PU1hdGgubWluKGwubGVuZ3RoLGEubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylhW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCByPTAsbj10LmNvdW50O3I8bjtyKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLExvLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKHIsTG8ueCxMby55LExvLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQocyxsKXtsZXQgYz1zLmFycmF5LHU9cy5pdGVtU2l6ZSxoPXMubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLHA9MCxkPTA7Zm9yKGxldCBnPTAsXz1sLmxlbmd0aDtnPF87ZysrKXtzLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/cD1sW2ddKnMuZGF0YS5zdHJpZGUrcy5vZmZzZXQ6cD1sW2ddKnU7Zm9yKGxldCB5PTA7eTx1O3krKylmW2QrK109Y1twKytdfXJldHVybiBuZXcgSmUoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IHI9bmV3IFBlLG49dGhpcy5pbmRleC5hcnJheSxpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXSxjPXQobCxuKTtyLnNldEF0dHJpYnV0ZShzLGMpfWxldCBvPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1bXSxjPW9bc107Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLHA9dChmLG4pO2wucHVzaChwKX1yLm1vcnBoQXR0cmlidXRlc1tzXT1sfXIubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10aGlzLmdyb3Vwcztmb3IobGV0IHM9MCxsPWEubGVuZ3RoO3M8bDtzKyspe2xldCBjPWFbc107ci5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gcn10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgcj10aGlzLmluZGV4O3IhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOnIuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLmFycmF5KX0pO2xldCBuPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gbil7bGV0IGM9bltsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCBpPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IHA9Y1toXTt1LnB1c2gocC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKGlbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1pLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgYT10aGlzLmdyb3VwczthLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKSk7bGV0IHM9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gcyE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpzLmNlbnRlci50b0FycmF5KCkscmFkaXVzOnMucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IHI9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgbj10LmluZGV4O24hPT1udWxsJiZ0aGlzLnNldEluZGV4KG4uY2xvbmUocikpO2xldCBpPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gaSl7bGV0IHU9aVtjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUocikpfWxldCBvPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBvKXtsZXQgdT1bXSxoPW9bY107Zm9yKGxldCBmPTAscD1oLmxlbmd0aDtmPHA7ZisrKXUucHVzaChoW2ZdLmNsb25lKHIpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PWEubGVuZ3RoO2M8dTtjKyspe2xldCBoPWFbY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgcz10LmJvdW5kaW5nQm94O3MhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1zLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtQZS5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgQXVlPW5ldyBNZSxBMz1uZXcgSmYsb3V0PW5ldyBaZixSMD1uZXcgaixOMD1uZXcgaixEMD1uZXcgaixhdXQ9bmV3IGosc3V0PW5ldyBqLGx1dD1uZXcgaix4Vj1uZXcgaixiVj1uZXcgaix3Vj1uZXcgaixTVj1uZXcgTHQsTVY9bmV3IEx0LEVWPW5ldyBMdCxjdXQ9bmV3IGosVFY9bmV3IGosdGk9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBzaCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxyKXtsZXQgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRlcmlhbCxvPXRoaXMubWF0cml4V29ybGQ7aWYoaT09PXZvaWQgMHx8KG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLG91dC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLG91dC5hcHBseU1hdHJpeDQobyksdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShvdXQpPT09ITEpfHwoQXVlLmNvcHkobykuaW52ZXJ0KCksQTMuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KEF1ZSksbi5ib3VuZGluZ0JveCE9PW51bGwmJkEzLmludGVyc2VjdHNCb3gobi5ib3VuZGluZ0JveCk9PT0hMSkpcmV0dXJuO2xldCBhO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHM9bi5pbmRleCxsPW4uYXR0cmlidXRlcy5wb3NpdGlvbixjPW4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHU9bi5tb3JwaFRhcmdldHNSZWxhdGl2ZSxoPW4uYXR0cmlidXRlcy51dixmPW4uYXR0cmlidXRlcy51djIscD1uLmdyb3VwcyxkPW4uZHJhd1JhbmdlO2lmKHMhPT1udWxsKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBnPTAsXz1wLmxlbmd0aDtnPF87ZysrKXtsZXQgeT1wW2ddLHg9aVt5Lm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgoeS5zdGFydCxkLnN0YXJ0KSxTPU1hdGgubWluKHMuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LGQuc3RhcnQrZC5jb3VudCkpO2ZvcihsZXQgQz1iLFA9UztDPFA7Qys9Myl7bGV0IGs9cy5nZXRYKEMpLE89cy5nZXRYKEMrMSksRD1zLmdldFgoQysyKTthPUNWKHRoaXMseCx0LEEzLGwsYyx1LGgsZixrLE8sRCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoQy8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD15Lm1hdGVyaWFsSW5kZXgsci5wdXNoKGEpKX19ZWxzZXtsZXQgZz1NYXRoLm1heCgwLGQuc3RhcnQpLF89TWF0aC5taW4ocy5jb3VudCxkLnN0YXJ0K2QuY291bnQpO2ZvcihsZXQgeT1nLHg9Xzt5PHg7eSs9Myl7bGV0IGI9cy5nZXRYKHkpLFM9cy5nZXRYKHkrMSksQz1zLmdldFgoeSsyKTthPUNWKHRoaXMsaSx0LEEzLGwsYyx1LGgsZixiLFMsQyksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoeS8zKSxyLnB1c2goYSkpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGc9MCxfPXAubGVuZ3RoO2c8XztnKyspe2xldCB5PXBbZ10seD1pW3kubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heCh5LnN0YXJ0LGQuc3RhcnQpLFM9TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbih5LnN0YXJ0K3kuY291bnQsZC5zdGFydCtkLmNvdW50KSk7Zm9yKGxldCBDPWIsUD1TO0M8UDtDKz0zKXtsZXQgaz1DLE89QysxLEQ9QysyO2E9Q1YodGhpcyx4LHQsQTMsbCxjLHUsaCxmLGssTyxEKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihDLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXkubWF0ZXJpYWxJbmRleCxyLnB1c2goYSkpfX1lbHNle2xldCBnPU1hdGgubWF4KDAsZC5zdGFydCksXz1NYXRoLm1pbihsLmNvdW50LGQuc3RhcnQrZC5jb3VudCk7Zm9yKGxldCB5PWcseD1fO3k8eDt5Kz0zKXtsZXQgYj15LFM9eSsxLEM9eSsyO2E9Q1YodGhpcyxpLHQsQTMsbCxjLHUsaCxmLGIsUyxDKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcih5LzMpLHIucHVzaChhKSl9fX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O3RpLnByb3RvdHlwZS5pc01lc2g9ITA7ZnVuY3Rpb24gZ2ZyKGUsdCxyLG4saSxvLGEscyl7bGV0IGw7aWYodC5zaWRlPT09SWk/bD1uLmludGVyc2VjdFRyaWFuZ2xlKGEsbyxpLCEwLHMpOmw9bi5pbnRlcnNlY3RUcmlhbmdsZShpLG8sYSx0LnNpZGUhPT1MMSxzKSxsPT09bnVsbClyZXR1cm4gbnVsbDtUVi5jb3B5KHMpLFRWLmFwcGx5TWF0cml4NChlLm1hdHJpeFdvcmxkKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhUVik7cmV0dXJuIGM8ci5uZWFyfHxjPnIuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6VFYuY2xvbmUoKSxvYmplY3Q6ZX19ZnVuY3Rpb24gQ1YoZSx0LHIsbixpLG8sYSxzLGwsYyx1LGgpe1IwLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxjKSxOMC5mcm9tQnVmZmVyQXR0cmlidXRlKGksdSksRDAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGgpO2xldCBmPWUubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKG8mJmYpe3hWLnNldCgwLDAsMCksYlYuc2V0KDAsMCwwKSx3Vi5zZXQoMCwwLDApO2ZvcihsZXQgZD0wLGc9by5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXSx5PW9bZF07XyE9PTAmJihhdXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LGMpLHN1dC5mcm9tQnVmZmVyQXR0cmlidXRlKHksdSksbHV0LmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxoKSxhPyh4Vi5hZGRTY2FsZWRWZWN0b3IoYXV0LF8pLGJWLmFkZFNjYWxlZFZlY3RvcihzdXQsXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dCxfKSk6KHhWLmFkZFNjYWxlZFZlY3RvcihhdXQuc3ViKFIwKSxfKSxiVi5hZGRTY2FsZWRWZWN0b3Ioc3V0LnN1YihOMCksXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dC5zdWIoRDApLF8pKSl9UjAuYWRkKHhWKSxOMC5hZGQoYlYpLEQwLmFkZCh3Vil9ZS5pc1NraW5uZWRNZXNoJiYoZS5ib25lVHJhbnNmb3JtKGMsUjApLGUuYm9uZVRyYW5zZm9ybSh1LE4wKSxlLmJvbmVUcmFuc2Zvcm0oaCxEMCkpO2xldCBwPWdmcihlLHQscixuLFIwLE4wLEQwLGN1dCk7aWYocCl7cyYmKFNWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxNVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsdSksRVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGgpLHAudXY9b2kuZ2V0VVYoY3V0LFIwLE4wLEQwLFNWLE1WLEVWLG5ldyBMdCkpLGwmJihTVi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksTVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLEVWLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxwLnV2Mj1vaS5nZXRVVihjdXQsUjAsTjAsRDAsU1YsTVYsRVYsbmV3IEx0KSk7bGV0IGQ9e2E6YyxiOnUsYzpoLG5vcm1hbDpuZXcgaixtYXRlcmlhbEluZGV4OjB9O29pLmdldE5vcm1hbChSMCxOMCxEMCxkLm5vcm1hbCkscC5mYWNlPWR9cmV0dXJuIHB9dmFyIFFmPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xLG89MSxhPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLGRlcHRoOm4sd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOm8sZGVwdGhTZWdtZW50czphfTtsZXQgcz10aGlzO2k9TWF0aC5mbG9vcihpKSxvPU1hdGguZmxvb3IobyksYT1NYXRoLmZsb29yKGEpO2xldCBsPVtdLGM9W10sdT1bXSxoPVtdLGY9MCxwPTA7ZCgieiIsInkiLCJ4IiwtMSwtMSxuLHIsdCxhLG8sMCksZCgieiIsInkiLCJ4IiwxLC0xLG4sciwtdCxhLG8sMSksZCgieCIsInoiLCJ5IiwxLDEsdCxuLHIsaSxhLDIpLGQoIngiLCJ6IiwieSIsMSwtMSx0LG4sLXIsaSxhLDMpLGQoIngiLCJ5IiwieiIsMSwtMSx0LHIsbixpLG8sNCksZCgieCIsInkiLCJ6IiwtMSwtMSx0LHIsLW4saSxvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGgsMikpO2Z1bmN0aW9uIGQoZyxfLHkseCxiLFMsQyxQLGssTyxEKXtsZXQgQj1TL2ssST1DL08sTD1TLzIsUj1DLzIsRj1QLzIsej1rKzEsVT1PKzEsVz0wLFo9MCxydD1uZXcgajtmb3IobGV0IG90PTA7b3Q8VTtvdCsrKXtsZXQgc3Q9b3QqSS1SO2ZvcihsZXQgU3Q9MDtTdDx6O1N0Kyspe2xldCBidD1TdCpCLUw7cnRbZ109YnQqeCxydFtfXT1zdCpiLHJ0W3ldPUYsYy5wdXNoKHJ0LngscnQueSxydC56KSxydFtnXT0wLHJ0W19dPTAscnRbeV09UD4wPzE6LTEsdS5wdXNoKHJ0LngscnQueSxydC56KSxoLnB1c2goU3QvayksaC5wdXNoKDEtb3QvTyksVys9MX19Zm9yKGxldCBvdD0wO290PE87b3QrKylmb3IobGV0IHN0PTA7c3Q8aztzdCsrKXtsZXQgU3Q9ZitzdCt6Km90LGJ0PWYrc3Qreioob3QrMSksTXQ9Zisoc3QrMSkreioob3QrMSksbHQ9Zisoc3QrMSkreipvdDtsLnB1c2goU3QsYnQsbHQpLGwucHVzaChidCxNdCxsdCksWis9Nn1zLmFkZEdyb3VwKHAsWixEKSxwKz1aLGYrPVd9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFFmKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gWjMoZSl7bGV0IHQ9e307Zm9yKGxldCByIGluIGUpe3Rbcl09e307Zm9yKGxldCBuIGluIGVbcl0pe2xldCBpPWVbcl1bbl07aSYmKGkuaXNDb2xvcnx8aS5pc01hdHJpeDN8fGkuaXNNYXRyaXg0fHxpLmlzVmVjdG9yMnx8aS5pc1ZlY3RvcjN8fGkuaXNWZWN0b3I0fHxpLmlzVGV4dHVyZXx8aS5pc1F1YXRlcm5pb24pP3Rbcl1bbl09aS5jbG9uZSgpOkFycmF5LmlzQXJyYXkoaSk/dFtyXVtuXT1pLnNsaWNlKCk6dFtyXVtuXT1pfX1yZXR1cm4gdH1mdW5jdGlvbiBUYShlKXtsZXQgdD17fTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49WjMoZVtyXSk7Zm9yKGxldCBpIGluIG4pdFtpXT1uW2ldfXJldHVybiB0fXZhciBWZmU9e2Nsb25lOlozLG1lcmdlOlRhfSxfZnI9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAseWZyPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsbGg9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPV9mcix0aGlzLmZyYWdtZW50U2hhZGVyPXlmcix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx0IT09dm9pZCAwJiYodC5hdHRyaWJ1dGVzIT09dm9pZCAwJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1aMyh0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7ci5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLHIudW5pZm9ybXM9e307Zm9yKGxldCBpIGluIHRoaXMudW5pZm9ybXMpe2xldCBhPXRoaXMudW5pZm9ybXNbaV0udmFsdWU7YSYmYS5pc1RleHR1cmU/ci51bmlmb3Jtc1tpXT17dHlwZToidCIsdmFsdWU6YS50b0pTT04odCkudXVpZH06YSYmYS5pc0NvbG9yP3IudW5pZm9ybXNbaV09e3R5cGU6ImMiLHZhbHVlOmEuZ2V0SGV4KCl9OmEmJmEuaXNWZWN0b3IyP3IudW5pZm9ybXNbaV09e3R5cGU6InYyIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc1ZlY3RvcjM/ci51bmlmb3Jtc1tpXT17dHlwZToidjMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yND9yLnVuaWZvcm1zW2ldPXt0eXBlOiJ2NCIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNNYXRyaXgzP3IudW5pZm9ybXNbaV09e3R5cGU6Im0zIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc01hdHJpeDQ/ci51bmlmb3Jtc1tpXT17dHlwZToibTQiLHZhbHVlOmEudG9BcnJheSgpfTpyLnVuaWZvcm1zW2ldPXt2YWx1ZTphfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoci5kZWZpbmVzPXRoaXMuZGVmaW5lcyksci52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsci5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBuPXt9O2ZvcihsZXQgaSBpbiB0aGlzLmV4dGVuc2lvbnMpdGhpcy5leHRlbnNpb25zW2ldPT09ITAmJihuW2ldPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihyLmV4dGVuc2lvbnM9bikscn19O2xoLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBSMT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IE1lLHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgTWUsdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgTWV9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgcj10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtcls4XSwtcls5XSwtclsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxyKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LHIpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07UjEucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBVaT1jbGFzcyBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKHQ9NTAscj0xLG49LjEsaT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9cix0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQscil7cmV0dXJuIHN1cGVyLmNvcHkodCxyKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgcj0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PVFQKjIqTWF0aC5hdGFuKHIpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oUDEqLjUqdGhpcy5mb3YpO3JldHVybiAuNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiBRUCoyKk1hdGguYXRhbihNYXRoLnRhbihQMSouNSp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQscixuLGksbyxhKXt0aGlzLmFzcGVjdD10L3IsdGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PXIsdGhpcy52aWV3Lm9mZnNldFg9bix0aGlzLnZpZXcub2Zmc2V0WT1pLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIscj10Kk1hdGgudGFuKFAxKi41KnRoaXMuZm92KS90aGlzLnpvb20sbj0yKnIsaT10aGlzLmFzcGVjdCpuLG89LS41KmksYT10aGlzLnZpZXc7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPWEuZnVsbFdpZHRoLGM9YS5mdWxsSGVpZ2h0O28rPWEub2Zmc2V0WCppL2wsci09YS5vZmZzZXRZKm4vYyxpKj1hLndpZHRoL2wsbio9YS5oZWlnaHQvY31sZXQgcz10aGlzLmZpbG1PZmZzZXQ7cyE9PTAmJihvKz10KnMvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8raSxyLHItbix0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5mb3Y9dGhpcy5mb3Ysci5vYmplY3Quem9vbT10aGlzLnpvb20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHIub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsci5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksci5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLHIub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LHJ9fTtVaS5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgUDM9OTAsSTM9MSxKMz1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsbi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTtyZXR1cm59dGhpcy5yZW5kZXJUYXJnZXQ9bjtsZXQgaT1uZXcgVWkoUDMsSTMsdCxyKTtpLmxheWVycz10aGlzLmxheWVycyxpLnVwLnNldCgwLC0xLDApLGkubG9va0F0KG5ldyBqKDEsMCwwKSksdGhpcy5hZGQoaSk7bGV0IG89bmV3IFVpKFAzLEkzLHQscik7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgaigtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgYT1uZXcgVWkoUDMsSTMsdCxyKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsMSksYS5sb29rQXQobmV3IGooMCwxLDApKSx0aGlzLmFkZChhKTtsZXQgcz1uZXcgVWkoUDMsSTMsdCxyKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsLTEpLHMubG9va0F0KG5ldyBqKDAsLTEsMCkpLHRoaXMuYWRkKHMpO2xldCBsPW5ldyBVaShQMyxJMyx0LHIpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IGooMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgVWkoUDMsSTMsdCxyKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBqKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LHIpe3RoaXMucGFyZW50PT09bnVsbCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBuPXRoaXMucmVuZGVyVGFyZ2V0LFtpLG8sYSxzLGwsY109dGhpcy5jaGlsZHJlbix1PXQueHIuZW5hYmxlZCxoPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBmPW4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7bi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChuLDApLHQucmVuZGVyKHIsaSksdC5zZXRSZW5kZXJUYXJnZXQobiwxKSx0LnJlbmRlcihyLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMiksdC5yZW5kZXIocixhKSx0LnNldFJlbmRlclRhcmdldChuLDMpLHQucmVuZGVyKHIscyksdC5zZXRSZW5kZXJUYXJnZXQobiw0KSx0LnJlbmRlcihyLGwpLG4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9Zix0LnNldFJlbmRlclRhcmdldChuLDUpLHQucmVuZGVyKHIsYyksdC5zZXRSZW5kZXJUYXJnZXQoaCksdC54ci5lbmFibGVkPXUsbi50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxIMD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe3Q9dCE9PXZvaWQgMD90OltdLHI9ciE9PXZvaWQgMD9yOm54LHN1cGVyKHQscixuLGksbyxhLHMsbCxjLHUpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07SDAucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIFEzPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG4pe051bWJlci5pc0ludGVnZXIocikmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLHI9biksc3VwZXIodCx0LHIpLHI9cnx8e30sdGhpcy50ZXh0dXJlPW5ldyBIMCh2b2lkIDAsci5tYXBwaW5nLHIud3JhcFMsci53cmFwVCxyLm1hZ0ZpbHRlcixyLm1pbkZpbHRlcixyLmZvcm1hdCxyLnR5cGUsci5hbmlzb3Ryb3B5LHIuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9yLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyIT09dm9pZCAwP3IubWluRmlsdGVyOmlpfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQscil7dGhpcy50ZXh0dXJlLnR5cGU9ci50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UW8sdGhpcy50ZXh0dXJlLmVuY29kaW5nPXIuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ci5tYWdGaWx0ZXI7bGV0IG49e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YAoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCgkJCQkJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7CgoJCQkJfQoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCgkJCQkJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCQkJCQkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgoJCQkJfQoJCQlgLGZyYWdtZW50U2hhZGVyOmAKCgkJCQl1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CgoJCQkJdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKCgkJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoKCQkJCQl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CgoJCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoKCQkJCX0KCQkJYH0saT1uZXcgUWYoNSw1LDUpLG89bmV3IGxoKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpaMyhuLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6bi52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6bi5mcmFnbWVudFNoYWRlcixzaWRlOklpLGJsZW5kaW5nOiRkfSk7by51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9cjtsZXQgYT1uZXcgdGkoaSxvKSxzPXIubWluRmlsdGVyO3JldHVybiByLm1pbkZpbHRlcj09PW94JiYoci5taW5GaWx0ZXI9aWkpLG5ldyBKMygxLDEwLHRoaXMpLnVwZGF0ZSh0LGEpLHIubWluRmlsdGVyPXMsYS5nZW9tZXRyeS5kaXNwb3NlKCksYS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LHIsbixpKXtsZXQgbz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgYT0wO2E8NjthKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxhKSx0LmNsZWFyKHIsbixpKTt0LnNldFJlbmRlclRhcmdldChvKX19O1EzLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgdXV0PW5ldyBqLHZmcj1uZXcgaix4ZnI9bmV3IGtpLCRjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGooMSwwLDApLHI9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0Q29tcG9uZW50cyh0LHIsbixpKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQscixuKSx0aGlzLmNvbnN0YW50PWksdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LHIpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LXIuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LHIsbil7bGV0IGk9dXV0LnN1YlZlY3RvcnMobixyKS5jcm9zcyh2ZnIuc3ViVmVjdG9ycyh0LHIpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChpLHQpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7bGV0IHQ9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTtyZXR1cm4gdGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIodCksdGhpcy5jb25zdGFudCo9dCx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLmNvbnN0YW50Kj0tMSx0aGlzLm5vcm1hbC5uZWdhdGUoKSx0aGlzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuZG90KHQpK3RoaXMuY29uc3RhbnR9ZGlzdGFuY2VUb1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQodC5jZW50ZXIpLXQucmFkaXVzfXByb2plY3RQb2ludCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxyKXtsZXQgbj10LmRlbHRhKHV1dCksaT10aGlzLm5vcm1hbC5kb3Qobik7aWYoaT09PTApcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpPT09MD9yLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgbz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9pO3JldHVybiBvPDB8fG8+MT9udWxsOnIuY29weShuKS5tdWx0aXBseVNjYWxhcihvKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IHI9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksbj10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIHI8MCYmbj4wfHxuPDAmJnI+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxyKXtsZXQgbj1yfHx4ZnIuZ2V0Tm9ybWFsTWF0cml4KHQpLGk9dGhpcy5jb3BsYW5hclBvaW50KHV1dCkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1pLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTskYy5wcm90b3R5cGUuaXNQbGFuZT0hMDt2YXIgTDM9bmV3IFpmLEFWPW5ldyBqLE4xPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICRjLHI9bmV3ICRjLG49bmV3ICRjLGk9bmV3ICRjLG89bmV3ICRjLGE9bmV3ICRjKXt0aGlzLnBsYW5lcz1bdCxyLG4saSxvLGFdfXNldCh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5wbGFuZXM7cmV0dXJuIHNbMF0uY29weSh0KSxzWzFdLmNvcHkociksc1syXS5jb3B5KG4pLHNbM10uY29weShpKSxzWzRdLmNvcHkobyksc1s1XS5jb3B5KGEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXJbbl0uY29weSh0LnBsYW5lc1tuXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmVsZW1lbnRzLGk9blswXSxvPW5bMV0sYT1uWzJdLHM9blszXSxsPW5bNF0sYz1uWzVdLHU9bls2XSxoPW5bN10sZj1uWzhdLHA9bls5XSxkPW5bMTBdLGc9blsxMV0sXz1uWzEyXSx5PW5bMTNdLHg9blsxNF0sYj1uWzE1XTtyZXR1cm4gclswXS5zZXRDb21wb25lbnRzKHMtaSxoLWwsZy1mLGItXykubm9ybWFsaXplKCksclsxXS5zZXRDb21wb25lbnRzKHMraSxoK2wsZytmLGIrXykubm9ybWFsaXplKCksclsyXS5zZXRDb21wb25lbnRzKHMrbyxoK2MsZytwLGIreSkubm9ybWFsaXplKCksclszXS5zZXRDb21wb25lbnRzKHMtbyxoLWMsZy1wLGIteSkubm9ybWFsaXplKCkscls0XS5zZXRDb21wb25lbnRzKHMtYSxoLXUsZy1kLGIteCkubm9ybWFsaXplKCkscls1XS5zZXRDb21wb25lbnRzKHMrYSxoK3UsZytkLGIreCkubm9ybWFsaXplKCksdGhpc31pbnRlcnNlY3RzT2JqZWN0KHQpe2xldCByPXQuZ2VvbWV0cnk7cmV0dXJuIHIuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZyLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEwzLmNvcHkoci5ib3VuZGluZ1NwaGVyZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShMMyl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gTDMuY2VudGVyLnNldCgwLDAsMCksTDMucmFkaXVzPS43MDcxMDY3ODExODY1NDc2LEwzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoTDMpfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmNlbnRlcixpPS10LnJhZGl1cztmb3IobGV0IG89MDtvPDY7bysrKWlmKHJbb10uZGlzdGFuY2VUb1BvaW50KG4pPGkpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXtsZXQgaT1yW25dO2lmKEFWLng9aS5ub3JtYWwueD4wP3QubWF4Lng6dC5taW4ueCxBVi55PWkubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksQVYuej1pLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LGkuZGlzdGFuY2VUb1BvaW50KEFWKTwwKXJldHVybiExfXJldHVybiEwfWNvbnRhaW5zUG9pbnQodCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylpZihyW25dLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2Z1bmN0aW9uIFVmZSgpe2xldCBlPW51bGwsdD0hMSxyPW51bGwsbj1udWxsO2Z1bmN0aW9uIGkobyxhKXtyKG8sYSksbj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXt0IT09ITAmJnIhPT1udWxsJiYobj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKSx0PSEwKX0sc3RvcDpmdW5jdGlvbigpe2UuY2FuY2VsQW5pbWF0aW9uRnJhbWUobiksdD0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbihvKXtyPW99LHNldENvbnRleHQ6ZnVuY3Rpb24obyl7ZT1vfX19ZnVuY3Rpb24gYmZyKGUsdCl7bGV0IHI9dC5pc1dlYkdMMixuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGkoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxwPWUuY3JlYXRlQnVmZmVyKCk7ZS5iaW5kQnVmZmVyKHUscCksZS5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZD01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Q9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/cj9kPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmQ9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9kPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Q9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9kPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9kPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZD01MTIxKSx7YnVmZmVyOnAsdHlwZTpkLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBvKGMsdSxoKXtsZXQgZj11LmFycmF5LHA9dS51cGRhdGVSYW5nZTtlLmJpbmRCdWZmZXIoaCxjKSxwLmNvdW50PT09LTE/ZS5idWZmZXJTdWJEYXRhKGgsMCxmKToocj9lLmJ1ZmZlclN1YkRhdGEoaCxwLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYscC5vZmZzZXQscC5jb3VudCk6ZS5idWZmZXJTdWJEYXRhKGgscC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KHAub2Zmc2V0LHAub2Zmc2V0K3AuY291bnQpKSxwLmNvdW50PS0xKX1mdW5jdGlvbiBhKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksbi5nZXQoYyl9ZnVuY3Rpb24gcyhjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9bi5nZXQoYyk7dSYmKGUuZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxuLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9bi5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmbi5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1uLmdldChjKTtoPT09dm9pZCAwP24uc2V0KGMsaShjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYobyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6YSxyZW1vdmU6cyx1cGRhdGU6bH19dmFyIFYwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppfTtsZXQgbz10LzIsYT1yLzIscz1NYXRoLmZsb29yKG4pLGw9TWF0aC5mbG9vcihpKSxjPXMrMSx1PWwrMSxoPXQvcyxmPXIvbCxwPVtdLGQ9W10sZz1bXSxfPVtdO2ZvcihsZXQgeT0wO3k8dTt5Kyspe2xldCB4PXkqZi1hO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBTPWIqaC1vO2QucHVzaChTLC14LDApLGcucHVzaCgwLDAsMSksXy5wdXNoKGIvcyksXy5wdXNoKDEteS9sKX19Zm9yKGxldCB5PTA7eTxsO3krKylmb3IobGV0IHg9MDt4PHM7eCsrKXtsZXQgYj14K2MqeSxTPXgrYyooeSsxKSxDPXgrMStjKih5KzEpLFA9eCsxK2MqeTtwLnB1c2goYixTLFApLHAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVjAodC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSx3ZnI9YCNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7CiNlbmRpZmAsU2ZyPWAjaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCxNZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCxFZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCgl1bmlmb3JtIGZsb2F0IGFscGhhVGVzdDsKI2VuZGlmYCxUZnI9YCNpZmRlZiBVU0VfQU9NQVAKCWZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uOwoJI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApCgkJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjZW5kaWYKI2VuZGlmYCxDZnI9YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxBZnI9InZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyIsUGZyPWB2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApOwojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7CiNlbmRpZmAsSWZyPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxMZnI9YCNpZmRlZiBVU0VfQlVNUE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDsKCXVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlOwoJdmVjMiBkSGR4eV9md2QoKSB7CgkJdmVjMiBkU1RkeCA9IGRGZHgoIHZVdiApOwoJCXZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTsKCQlmbG9hdCBIbGwgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7CgkJZmxvYXQgZEJ4ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7CgkJZmxvYXQgZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLnggLSBIbGw7CgkJcmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7Cgl9Cgl2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5LCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2TiA9IHN1cmZfbm9ybTsKCQl2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7CgkJdmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApOwoJCWZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICkgKiBmYWNlRGlyZWN0aW9uOwoJCXZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApOwoJCXJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTsKCX0KI2VuZGlmYCxrZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmVjNCBwbGFuZTsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHsKCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJaWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVMKCQlib29sIGNsaXBwZWQgPSB0cnVlOwoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJCXBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTsKCQkJY2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJCWlmICggY2xpcHBlZCApIGRpc2NhcmQ7CgkjZW5kaWYKI2VuZGlmYCxSZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxOZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247CiNlbmRpZmAsRGZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWZgLE9mcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsemZyPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCXZhcnlpbmcgdmVjNCB2Q29sb3I7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLEZmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLEJmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsSGZyPWAjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzCiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2CiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjYKI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwNwojZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzUKI2RlZmluZSBFUFNJTE9OIDFlLTYKI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KCBhICkgKCAxLjAgLSBzYXR1cmF0ZSggYSApICkKZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfQpmbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH0KZmxvYXQgcG93NCggY29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfQpmbG9hdCBtYXgzKCBjb25zdCBpbiB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH0KZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH0KaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHsKCWNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MzsKCWhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApOwoJcmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7Cn0KI2lmZGVmIEhJR0hfUFJFQ0lTSU9OCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfQojZWxzZQoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgewoJCWZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7CgkJcmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50OwoJfQojZW5kaWYKc3RydWN0IEluY2lkZW50TGlnaHQgewoJdmVjMyBjb2xvcjsKCXZlYzMgZGlyZWN0aW9uOwoJYm9vbCB2aXNpYmxlOwp9OwpzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQgewoJdmVjMyBkaXJlY3REaWZmdXNlOwoJdmVjMyBkaXJlY3RTcGVjdWxhcjsKCXZlYzMgaW5kaXJlY3REaWZmdXNlOwoJdmVjMyBpbmRpcmVjdFNwZWN1bGFyOwp9OwpzdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7Cgl2ZWMzIHBvc2l0aW9uOwoJdmVjMyBub3JtYWw7Cgl2ZWMzIHZpZXdEaXI7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCn07CnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTsKfQp2ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApOwp9Cm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkgewoJbWF0MyB0bXA7Cgl0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTsKCXRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApOwoJdG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwgbVsgMSBdLnosIG1bIDIgXS56ICk7CglyZXR1cm4gdG1wOwp9CmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7Cgl2ZWMzIHdlaWdodHMgPSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7CglyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTsKfQpib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHsKCXJldHVybiBtWyAyIF1bIDMgXSA9PSAtIDEuMDsKfQp2ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkgewoJZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7CglmbG9hdCB2ID0gYXNpbiggY2xhbXAoIGRpci55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7CglyZXR1cm4gdmVjMiggdSwgdiApOwp9YCxWZnI9YCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWCgkjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjAKCSNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMAoJI2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjAKCSNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjAKCWZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkgewoJCXZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmYWNlID0gLSAxLjA7CgkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkgewoJCQlpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKQoJCQkJZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wOwoJCQllbHNlCgkJCQlmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7CgkJfSBlbHNlIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0KCQlyZXR1cm4gZmFjZTsKCX0KCXZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkgewoJCXZlYzIgdXY7CgkJaWYgKCBmYWNlID09IDAuMCApIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9CgkJcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTsKCX0KCXZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7CgkJZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApOwoJCWZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTsKCQltaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7CgkJZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTsKCQlmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApOwoJCXZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7CgkJaWYgKCBmYWNlID4gMi4wICkgewoJCQl1di55ICs9IGZhY2VTaXplOwoJCQlmYWNlIC09IDMuMDsKCQl9CgkJdXYueCArPSBmYWNlICogZmFjZVNpemU7CgkJaWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7CgkJCXV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplOwoJCX0KCQl1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTsKCQl1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApOwoJCXV2ICo9IHRleGVsU2l6ZTsKCQlyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiOwoJfQoJI2RlZmluZSByMCAxLjAKCSNkZWZpbmUgdjAgMC4zMzkKCSNkZWZpbmUgbTAgLSAyLjAKCSNkZWZpbmUgcjEgMC44CgkjZGVmaW5lIHYxIDAuMjc2CgkjZGVmaW5lIG0xIC0gMS4wCgkjZGVmaW5lIHI0IDAuNAoJI2RlZmluZSB2NCAwLjA0NgoJI2RlZmluZSBtNCAyLjAKCSNkZWZpbmUgcjUgMC4zMDUKCSNkZWZpbmUgdjUgMC4wMTYKCSNkZWZpbmUgbTUgMy4wCgkjZGVmaW5lIHI2IDAuMjEKCSNkZWZpbmUgdjYgMC4wMDM4CgkjZGVmaW5lIG02IDQuMAoJZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSAwLjA7CgkJaWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7CgkJCW1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7CgkJCW1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7CgkJCW1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7CgkJCW1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTsKCQl9IGVsc2UgewoJCQltaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTsJCX0KCQlyZXR1cm4gbWlwOwoJfQoJdmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkgewoJCWZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTsKCQlmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApOwoJCWZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTsKCQl2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7CgkJaWYgKCBtaXBGID09IDAuMCApIHsKCQkJcmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7CgkJfSBlbHNlIHsKCQkJdmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApOwoJCQlyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTsKCQl9Cgl9CiNlbmRpZmAsVWZyPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxxZnI9YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzOwojZW5kaWZgLEdmcj1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7CiNlbmRpZmAsV2ZyPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxZZnI9YCNpZmRlZiBVU0VfRU1JU1NJVkVNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwOwojZW5kaWZgLGpmcj0iZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixYZnI9YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLCRmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2ZWMzIGNhbWVyYVRvRnJhZzsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApOwoJCX0KCQl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApOwoJCSNlbHNlCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2Vsc2UKCQl2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkUKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTsKCSNlbHNlCgkJdmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApOwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREICkKCQlvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7CgkjZW5kaWYKI2VuZGlmYCxLZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTsKCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgkjZWxzZQoJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCSNlbmRpZgoJCiNlbmRpZmAsWmZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLEpmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HICkKCQkjZGVmaW5lIEVOVl9XT1JMRFBPUwoJI2VuZGlmCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJCgkJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZW5kaWYKI2VuZGlmYCxRZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKCSNlbHNlCgkJdmVjMyBjYW1lcmFUb1ZlcnRleDsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCx0cHI9YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxlcHI9YCNpZmRlZiBVU0VfRk9HCgl2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDsKI2VuZGlmYCxycHI9YCNpZmRlZiBVU0VfRk9HCgkjaWZkZWYgRk9HX0VYUDIKCQlmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTsKCSNlbHNlCgkJZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCB2Rm9nRGVwdGggKTsKCSNlbmRpZgoJZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApOwojZW5kaWZgLG5wcj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxpcHI9YCNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwOwojZW5kaWYKdmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkgewoJZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTsKCXZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7CgkjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgkJcmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApOwoJI2Vsc2UKCQlyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApOwoJI2VuZGlmCn1gLG9wcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTCgkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwojZW5kaWZgLGFwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHNwcj1gdmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7Ckdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7Ckdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5OwpiYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjsKYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRyeS5ub3JtYWw7CmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKdkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKdkluZGlyZWN0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApOwoJdkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKZmxvYXQgZG90Tkw7CnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwp2SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwp2SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fRElSX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCXZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmYCxscHI9YHVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93Owp1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7CnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07CnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7CglmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56OwoJdmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7CglyZXR1cm4gcmVzdWx0Owp9CnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KdmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkgewoJdmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7CglyZXR1cm4gaXJyYWRpYW5jZTsKfQpmbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHsKCSNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApCgkJZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApOwoJCWlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7CgkJCWRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApOwoJCX0KCQlyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmOwoJI2Vsc2UKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7CgkJCXJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7CgkJfQoJCXJldHVybiAxLjA7CgkjZW5kaWYKfQpmbG9hdCBnZXRTcG90QXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGNvbmVDb3NpbmUsIGNvbnN0IGluIGZsb2F0IHBlbnVtYnJhQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBhbmdsZUNvc2luZSApIHsKCXJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTsKfQojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCglzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCX07Cgl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07Cgl2b2lkIGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCWxpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjsKCQlsaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjsKCQlsaWdodC52aXNpYmxlID0gdHJ1ZTsKCX0KI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJc3RydWN0IFBvaW50TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCX07Cgl1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTsKCXZvaWQgZ2V0UG9pbnRMaWdodEluZm8oIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7CgkJdmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQlsaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7CgkJbGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApOwoJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7Cgl9CiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJc3RydWN0IFNwb3RMaWdodCB7CgkJdmVjMyBwb3NpdGlvbjsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIGNvbG9yOwoJCWZsb2F0IGRpc3RhbmNlOwoJCWZsb2F0IGRlY2F5OwoJCWZsb2F0IGNvbmVDb3M7CgkJZmxvYXQgcGVudW1icmFDb3M7Cgl9OwoJdW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07Cgl2b2lkIGdldFNwb3RMaWdodEluZm8oIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGFuZ2xlQ29zID0gZG90KCBsaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBzcG90QXR0ZW51YXRpb24gPSBnZXRTcG90QXR0ZW51YXRpb24oIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7CgkJaWYgKCBzcG90QXR0ZW51YXRpb24gPiAwLjAgKSB7CgkJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQkJbGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247CgkJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7CgkJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7CgkJfSBlbHNlIHsKCQkJbGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTsKCQkJbGlnaHQudmlzaWJsZSA9IGZhbHNlOwoJCX0KCX0KI2VuZGlmCiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXN0cnVjdCBSZWN0QXJlYUxpZ2h0IHsKCQl2ZWMzIGNvbG9yOwoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0OwoJfTsKCXVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xOwl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjsKCXVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTsKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCglzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIHNreUNvbG9yOwoJCXZlYzMgZ3JvdW5kQ29sb3I7Cgl9OwoJdW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07Cgl2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41OwoJCXZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7CgkJcmV0dXJuIGlycmFkaWFuY2U7Cgl9CiNlbmRpZmAsY3ByPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLHVwcj1gVG9vbk1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO2AsaHByPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IFRvb25NYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKfTsKdm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1Rvb24KI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9Ub29uCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLGZwcj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLHBwcj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cgl2ZWMzIHNwZWN1bGFyQ29sb3I7CglmbG9hdCBzcGVjdWxhclNoaW5pbmVzczsKCWZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7Cn07CnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoOwp9CnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfQmxpbm5QaG9uZwojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcKI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApCSgwKWAsZHByPWBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTsKdmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApOwpmbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApOwojaWZkZWYgSU9SCgkjaWZkZWYgU1BFQ1VMQVIKCQlmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5OwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7CgkJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCQlzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hOwoJCSNlbmRpZgoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCQlzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiOwoJCSNlbmRpZgoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTsKCSNlbHNlCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7CgkJdmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7CgkJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CgkjZW5kaWYKCW1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7CiNlbHNlCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwoJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0OwoJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJCW1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgkJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55OwoJI2VuZGlmCgltYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7CW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCW1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJbWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjsKCSNlbmRpZgoJbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApOwoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7CgkjZW5kaWYKI2VuZGlmYCxtcHI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxncHI9YApHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCglnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwojaWYgKCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglQb2ludExpZ2h0IHBvaW50TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdOwoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTICkKCQlwb2ludExpZ2h0U2hhZG93ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93QmlhcywgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglTcG90TGlnaHQgc3BvdExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyApCgkJc3BvdExpZ2h0U2hhZG93ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93Qmlhcywgc3BvdExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTICkKCQlkaXJlY3Rpb25hbExpZ2h0U2hhZG93ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApCglSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHsKCQlyZWN0QXJlYUxpZ2h0ID0gcmVjdEFyZWFMaWdodHNbIGkgXTsKCQlSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCXZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCWlycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApCgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQkJaXJyYWRpYW5jZSArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApCgl2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7CiNlbmRpZmAsX3ByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCSNpZmRlZiBVU0VfTElHSFRNQVAKCQl2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCQlsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7CgkJI2VuZGlmCgkJaXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7CgkjZW5kaWYKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQlpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAseXByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAsdnByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCglnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7CiNlbmRpZmAseHByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCgl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7Cgl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7Cgl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwojZW5kaWZgLGJwcj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsd3ByPWAjaWZkZWYgVVNFX0xPR0RFUFRIQlVGCgkjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVAoJCXZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53OwoJCXZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApOwoJI2Vsc2UKCQlpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHsKCQkJZ2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wOwoJCQlnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7CgkJfQoJI2VuZGlmCiNlbmRpZmAsU3ByPWAjaWZkZWYgVVNFX01BUAoJdmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApOwoJI2lmZGVmIERFQ09ERV9WSURFT19URVhUVVJFCgkJc2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQoIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7CgkjZW5kaWYKCWRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yOwojZW5kaWZgLE1wcj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCxFcHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXZlYzIgdXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5OwojZW5kaWYKI2lmZGVmIFVTRV9NQVAKCWRpZmZ1c2VDb2xvciAqPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTsKI2VuZGlmCiNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZzsKI2VuZGlmYCxUcHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCxDcHI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxBcHI9YCNpZmRlZiBVU0VfTUVUQUxORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7CiNlbmRpZmAsUHByPWAjaWZkZWYgVVNFX01PUlBITk9STUFMUwoJb2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQl9CgkjZWxzZQoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCSNlbmRpZgojZW5kaWZgLElwcj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsTHByPWAjaWZkZWYgVVNFX01PUlBIVEFSR0VUUwoJdHJhbnNmb3JtZWQgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJZm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkgewoJCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2Vsc2UKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2VuZGlmCgkJfQoJI2Vsc2UKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ0ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ3ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxrcHI9YGZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wOwojaWZkZWYgRkxBVF9TSEFERUQKCXZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7Cgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTsKI2Vsc2UKCXZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApOwoJCXZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJCWJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJI2VuZGlmCgkJI2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApCgkJCW1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmCnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7YCxScHI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsTnByPWAjaWZuZGVmIEZMQVRfU0hBREVECgl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZhcnlpbmcgdmVjMyB2VGFuZ2VudDsKCQl2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDsKCSNlbmRpZgojZW5kaWZgLERwcj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxPcHI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLHpwcj1gI2lmZGVmIFVTRV9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTsKI2VuZGlmCiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCXVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7CiNlbmRpZgojaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKQoJdmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMyBtYXBOLCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgcTAgPSB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7CgkJdmVjMyBxMSA9IHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkgKSwgZEZkeSggZXllX3Bvcy56ICkgKTsKCQl2ZWMyIHN0MCA9IGRGZHgoIHZVdi5zdCApOwoJCXZlYzIgc3QxID0gZEZkeSggdlV2LnN0ICk7CgkJdmVjMyBOID0gc3VyZl9ub3JtOwoJCXZlYzMgcTFwZXJwID0gY3Jvc3MoIHExLCBOICk7CgkJdmVjMyBxMHBlcnAgPSBjcm9zcyggTiwgcTAgKTsKCQl2ZWMzIFQgPSBxMXBlcnAgKiBzdDAueCArIHEwcGVycCAqIHN0MS54OwoJCXZlYzMgQiA9IHExcGVycCAqIHN0MC55ICsgcTBwZXJwICogc3QxLnk7CgkJZmxvYXQgZGV0ID0gbWF4KCBkb3QoIFQsIFQgKSwgZG90KCBCLCBCICkgKTsKCQlmbG9hdCBzY2FsZSA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBUICogKCBtYXBOLnggKiBzY2FsZSApICsgQiAqICggbWFwTi55ICogc2NhbGUgKSArIE4gKiBtYXBOLnogKTsKCX0KI2VuZGlmYCxGcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsOwojZW5kaWZgLEJwcj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxIcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlOwojZW5kaWZgLFZwcj1gI2lmZGVmIE9QQVFVRQpkaWZmdXNlQ29sb3IuYSA9IDEuMDsKI2VuZGlmCiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xOwojZW5kaWYKZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtgLFVwcj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxxcHI9YCNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBCglnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hOwojZW5kaWZgLEdwcj1gdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247CiNlbmRpZgptdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjsKZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtgLFdwcj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFlwcj1gI2lmZGVmIERJVEhFUklORwoJdmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7CgkJZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApOwoJCXZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7CgkJZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTsKCQlyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCOwoJfQojZW5kaWZgLGpwcj1gZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzOwojaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTsKCXJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nOwojZW5kaWZgLFhwcj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCwkcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCglmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkgewoJCXJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApOwoJfQoJdmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7CgkJcmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApOwoJfQoJZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7CgkJZmxvYXQgb2NjbHVzaW9uID0gMS4wOwoJCXZlYzIgZGlzdHJpYnV0aW9uID0gdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7CgkJZmxvYXQgaGFyZF9zaGFkb3cgPSBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTsKCQlpZiAoaGFyZF9zaGFkb3cgIT0gMS4wICkgewoJCQlmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7CgkJCWZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7CgkJCWZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7CQkJc29mdG5lc3NfcHJvYmFiaWxpdHkgPSBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7CQkJb2NjbHVzaW9uID0gY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7CgkJfQoJCXJldHVybiBvY2NsdXNpb247Cgl9CglmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkgewoJCWZsb2F0IHNoYWRvdyA9IDEuMDsKCQlzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudzsKCQlzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7CgkJYnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApOwoJCWJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTsKCQlidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7CgkJYm9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTsKCQlpZiAoIGZydXN0dW1UZXN0ICkgewoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgyID0gZHgwIC8gMi4wOwoJCQlmbG9hdCBkeTIgPSBkeTAgLyAyLjA7CgkJCWZsb2F0IGR4MyA9IGR4MSAvIDIuMDsKCQkJZmxvYXQgZHkzID0gZHkxIC8gMi4wOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKQoJCQkpICogKCAxLjAgLyAxNy4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHggPSB0ZXhlbFNpemUueDsKCQkJZmxvYXQgZHkgPSB0ZXhlbFNpemUueTsKCQkJdmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5OwoJCQl2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaGFkb3dNYXBTaXplICsgMC41ICk7CgkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBmLnkgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQlzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZWxzZQoJCQlzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2VuZGlmCgkJfQoJCXJldHVybiBzaGFkb3c7Cgl9Cgl2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7CgkJdmVjMyBhYnNWID0gYWJzKCB2ICk7CgkJZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7CgkJYWJzViAqPSBzY2FsZVRvQ3ViZTsKCQl2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7CgkJdmVjMiBwbGFuYXIgPSB2Lnh5OwoJCWZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7CgkJZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsOwoJCWlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHsKCQkJaWYgKCB2LnogPiAwLjAgKQoJCQkJcGxhbmFyLnggPSA0LjAgLSB2Lng7CgkJfSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTsKCQkJcGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YOwoJCX0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7CgkJCXBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7CgkJCXBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7CgkJfQoJCXJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTsKCX0KCWZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkgewoJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7CgkJdmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7CgkJZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTsJCWRwICs9IHNoYWRvd0JpYXM7CgkJdmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQl2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7CgkJCXJldHVybiAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLEtwcj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKI2VuZGlmYCxacHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCxKcHI9YGZsb2F0IGdldFNoYWRvd01hc2soKSB7CglmbG9hdCBzaGFkb3cgPSAxLjA7CgkjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjZW5kaWYKCXJldHVybiBzaGFkb3c7Cn1gLFFwcj1gI2lmZGVmIFVTRV9TS0lOTklORwoJbWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7CgltYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTsKCW1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApOwoJbWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7CiNlbmRpZmAsdGRyPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxlZHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCXZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7Cgl2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTsKCXNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54OwoJc2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7Cglza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejsKCXNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53OwoJdHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejsKI2VuZGlmYCxyZHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0VzsKCXNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4OwoJb2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2VuZGlmCiNlbmRpZmAsbmRyPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLGlkcj1gI2lmZGVmIFVTRV9TUEVDVUxBUk1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7CiNlbmRpZmAsb2RyPWAjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HICkKCWdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLGFkcj1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHNkcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCWZsb2F0IHRyYW5zbWlzc2lvbkFscGhhID0gMS4wOwoJZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uOwoJZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzOwoJI2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVAKCQl0cmFuc21pc3Npb25GYWN0b3IgKj0gdGV4dHVyZTJEKCB0cmFuc21pc3Npb25NYXAsIHZVdiApLnI7CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQCgkJdGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nOwoJI2VuZGlmCgl2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uOwoJdmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApOwoJdmVjMyBuID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oCgkJbiwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLAoJCXBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLAoJCWF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTsKCXRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKCXRyYW5zbWlzc2lvbkFscGhhID0gbWl4KCB0cmFuc21pc3Npb25BbHBoYSwgdHJhbnNtaXNzaW9uLmEsIHRyYW5zbWlzc2lvbkZhY3RvciApOwojZW5kaWZgLGxkcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uOwoJdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7Cgl1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7Cgl1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDsKCSNlbmRpZgoJdW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOwoJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDsKCXVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJdmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHsKCQl2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTsKCQl2ZWMzIG1vZGVsU2NhbGU7CgkJbW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTsKCX0KCWZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkgewoJCXJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApOwoJfQoJdmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7CgkJI2lmZGVmIFRFWFRVUkVfTE9EX0VYVAoJCQlyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbmRpZgoJfQoJdmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkgewoJCWlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7CgkJCXJldHVybiByYWRpYW5jZTsKCQl9IGVsc2UgewoJCQl2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJCQl2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7CQkJcmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTsKCQl9Cgl9Cgl2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLAoJCWNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsCgkJY29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLAoJCWNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQl2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7CgkJdmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7CgkJdmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApOwoJCXZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53OwoJCXJlZnJhY3Rpb25Db29yZHMgKz0gMS4wOwoJCXJlZnJhY3Rpb25Db29yZHMgLz0gMi4wOwoJCXZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTsKCQl2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7CgkJdmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7CgkJcmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTsKCX0KI2VuZGlmYCxjZHI9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCx1ZHI9YCNpZmRlZiBVU0VfVVYKCSNpZmRlZiBVVlNfVkVSVEVYX09OTFkKCQl2ZWMyIHZVdjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMyIHZVdjsKCSNlbmRpZgoJdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwojZW5kaWZgLGhkcj1gI2lmZGVmIFVTRV9VVgoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKI2VuZGlmYCxmZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAscGRyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCWF0dHJpYnV0ZSB2ZWMyIHV2MjsKCXZhcnlpbmcgdmVjMiB2VXYyOwoJdW5pZm9ybSBtYXQzIHV2MlRyYW5zZm9ybTsKI2VuZGlmYCxkZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTsKI2VuZGlmYCxtZHI9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAsZ2RyPWB2YXJ5aW5nIHZlYzIgdlV2Owp1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CnZvaWQgbWFpbigpIHsKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CglnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApOwp9YCxfZHI9YHVuaWZvcm0gc2FtcGxlcjJEIHQyRDsKdmFyeWluZyB2ZWMyIHZVdjsKdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAseWRyPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCx2ZHI9YCNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJdmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CglnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjsKCWdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCx4ZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dzsKfWAsYmRyPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCx3ZHI9YCNkZWZpbmUgRElTVEFOQ0UKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6Owp9YCxTZHI9YCNkZWZpbmUgRElTVEFOQ0UKdW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uOwp1bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTsKdW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTsKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4gKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCWZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTsKCWRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTsKCWRpc3QgPSBzYXR1cmF0ZSggZGlzdCApOwoJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7Cn1gLE1kcj1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLEVkcj1gdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7Cgl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CglnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLFRkcj1gdW5pZm9ybSBmbG9hdCBzY2FsZTsKYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7Cgl2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsQ2RyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxBZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLFBkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7CgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxJZHI9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxMZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZMaWdodEZyb250Owp2YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrOwoJdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250OwoJI2VuZGlmCgkjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250OwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpOwoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLGtkcj1gI2RlZmluZSBNQVRDQVAKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6Owp9YCxSZHI9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxOZHI9YCNkZWZpbmUgTk9STUFMCiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLERkcj1gI2RlZmluZSBOT1JNQUwKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTsKfWAsT2RyPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHpkcj1gI2RlZmluZSBQSE9ORwp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIHZlYzMgc3BlY3VsYXI7CnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLEZkcj1gI2RlZmluZSBTVEFOREFSRAp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6OwojZW5kaWYKfWAsQmRyPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsSGRyPWAjZGVmaW5lIFRPT04KdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLFZkcj1gI2RlZmluZSBUT09OCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLFVkcj1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHFkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxHZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsV2RyPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsWWRyPWB1bmlmb3JtIGZsb2F0IHJvdGF0aW9uOwp1bmlmb3JtIHZlYzIgY2VudGVyOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCXZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJdmVjMiBzY2FsZTsKCXNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApOwoJc2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7CgkjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7CgkjZW5kaWYKCXZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7Cgl2ZWMyIHJvdGF0ZWRQb3NpdGlvbjsKCXJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCXJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCW12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uOwoJZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxqZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxocj17YWxwaGFtYXBfZnJhZ21lbnQ6d2ZyLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6U2ZyLGFscGhhdGVzdF9mcmFnbWVudDpNZnIsYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6RWZyLGFvbWFwX2ZyYWdtZW50OlRmcixhb21hcF9wYXJzX2ZyYWdtZW50OkNmcixiZWdpbl92ZXJ0ZXg6QWZyLGJlZ2lubm9ybWFsX3ZlcnRleDpQZnIsYnNkZnM6SWZyLGJ1bXBtYXBfcGFyc19mcmFnbWVudDpMZnIsY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OmtmcixjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDpSZnIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Ok5mcixjbGlwcGluZ19wbGFuZXNfdmVydGV4OkRmcixjb2xvcl9mcmFnbWVudDpPZnIsY29sb3JfcGFyc19mcmFnbWVudDp6ZnIsY29sb3JfcGFyc192ZXJ0ZXg6RmZyLGNvbG9yX3ZlcnRleDpCZnIsY29tbW9uOkhmcixjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6VmZyLGRlZmF1bHRub3JtYWxfdmVydGV4OlVmcixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6cWZyLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6R2ZyLGVtaXNzaXZlbWFwX2ZyYWdtZW50OldmcixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OllmcixlbmNvZGluZ3NfZnJhZ21lbnQ6amZyLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OlhmcixlbnZtYXBfZnJhZ21lbnQ6JGZyLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpLZnIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6WmZyLGVudm1hcF9wYXJzX3ZlcnRleDpKZnIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6Y3ByLGVudm1hcF92ZXJ0ZXg6UWZyLGZvZ192ZXJ0ZXg6dHByLGZvZ19wYXJzX3ZlcnRleDplcHIsZm9nX2ZyYWdtZW50OnJwcixmb2dfcGFyc19mcmFnbWVudDpucHIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDppcHIsbGlnaHRtYXBfZnJhZ21lbnQ6b3ByLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6YXByLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpzcHIsbGlnaHRzX3BhcnNfYmVnaW46bHByLGxpZ2h0c190b29uX2ZyYWdtZW50OnVwcixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmhwcixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6ZnByLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OnBwcixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6ZHByLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50Om1wcixsaWdodHNfZnJhZ21lbnRfYmVnaW46Z3ByLGxpZ2h0c19mcmFnbWVudF9tYXBzOl9wcixsaWdodHNfZnJhZ21lbnRfZW5kOnlwcixsb2dkZXB0aGJ1Zl9mcmFnbWVudDp2cHIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDp4cHIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6YnByLGxvZ2RlcHRoYnVmX3ZlcnRleDp3cHIsbWFwX2ZyYWdtZW50OlNwcixtYXBfcGFyc19mcmFnbWVudDpNcHIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OkVwcixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpUcHIsbWV0YWxuZXNzbWFwX2ZyYWdtZW50OkNwcixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDpBcHIsbW9ycGhub3JtYWxfdmVydGV4OlBwcixtb3JwaHRhcmdldF9wYXJzX3ZlcnRleDpJcHIsbW9ycGh0YXJnZXRfdmVydGV4Okxwcixub3JtYWxfZnJhZ21lbnRfYmVnaW46a3ByLG5vcm1hbF9mcmFnbWVudF9tYXBzOlJwcixub3JtYWxfcGFyc19mcmFnbWVudDpOcHIsbm9ybWFsX3BhcnNfdmVydGV4OkRwcixub3JtYWxfdmVydGV4Ok9wcixub3JtYWxtYXBfcGFyc19mcmFnbWVudDp6cHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjpGcHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOkJwcixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDpIcHIsb3V0cHV0X2ZyYWdtZW50OlZwcixwYWNraW5nOlVwcixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OnFwcixwcm9qZWN0X3ZlcnRleDpHcHIsZGl0aGVyaW5nX2ZyYWdtZW50OldwcixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDpZcHIscm91Z2huZXNzbWFwX2ZyYWdtZW50Ompwcixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDpYcHIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6JHByLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpLcHIsc2hhZG93bWFwX3ZlcnRleDpacHIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50Okpwcixza2luYmFzZV92ZXJ0ZXg6UXByLHNraW5uaW5nX3BhcnNfdmVydGV4OnRkcixza2lubmluZ192ZXJ0ZXg6ZWRyLHNraW5ub3JtYWxfdmVydGV4OnJkcixzcGVjdWxhcm1hcF9mcmFnbWVudDpuZHIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDppZHIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6b2RyLHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6YWRyLHRyYW5zbWlzc2lvbl9mcmFnbWVudDpzZHIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bGRyLHV2X3BhcnNfZnJhZ21lbnQ6Y2RyLHV2X3BhcnNfdmVydGV4OnVkcix1dl92ZXJ0ZXg6aGRyLHV2Ml9wYXJzX2ZyYWdtZW50OmZkcix1djJfcGFyc192ZXJ0ZXg6cGRyLHV2Ml92ZXJ0ZXg6ZGRyLHdvcmxkcG9zX3ZlcnRleDptZHIsYmFja2dyb3VuZF92ZXJ0OmdkcixiYWNrZ3JvdW5kX2ZyYWc6X2RyLGN1YmVfdmVydDp5ZHIsY3ViZV9mcmFnOnZkcixkZXB0aF92ZXJ0OnhkcixkZXB0aF9mcmFnOmJkcixkaXN0YW5jZVJHQkFfdmVydDp3ZHIsZGlzdGFuY2VSR0JBX2ZyYWc6U2RyLGVxdWlyZWN0X3ZlcnQ6TWRyLGVxdWlyZWN0X2ZyYWc6RWRyLGxpbmVkYXNoZWRfdmVydDpUZHIsbGluZWRhc2hlZF9mcmFnOkNkcixtZXNoYmFzaWNfdmVydDpBZHIsbWVzaGJhc2ljX2ZyYWc6UGRyLG1lc2hsYW1iZXJ0X3ZlcnQ6SWRyLG1lc2hsYW1iZXJ0X2ZyYWc6TGRyLG1lc2htYXRjYXBfdmVydDprZHIsbWVzaG1hdGNhcF9mcmFnOlJkcixtZXNobm9ybWFsX3ZlcnQ6TmRyLG1lc2hub3JtYWxfZnJhZzpEZHIsbWVzaHBob25nX3ZlcnQ6T2RyLG1lc2hwaG9uZ19mcmFnOnpkcixtZXNocGh5c2ljYWxfdmVydDpGZHIsbWVzaHBoeXNpY2FsX2ZyYWc6QmRyLG1lc2h0b29uX3ZlcnQ6SGRyLG1lc2h0b29uX2ZyYWc6VmRyLHBvaW50c192ZXJ0OlVkcixwb2ludHNfZnJhZzpxZHIsc2hhZG93X3ZlcnQ6R2RyLHNoYWRvd19mcmFnOldkcixzcHJpdGVfdmVydDpZZHIsc3ByaXRlX2ZyYWc6amRyfSxyZT17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9LHV2MlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfX0sc3BlY3VsYXJtYXA6e3NwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfX0sZW52bWFwOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfSxyZWZsZWN0aXZpdHk6e3ZhbHVlOjF9LGlvcjp7dmFsdWU6MS41fSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgTHQoMSwxKX19LGRpc3BsYWNlbWVudG1hcDp7ZGlzcGxhY2VtZW50TWFwOnt2YWx1ZTpudWxsfSxkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjI1ZS01fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJlM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IEx0KC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX19fSxhaD17YmFzaWM6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5zcGVjdWxhcm1hcCxyZS5lbnZtYXAscmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmJ1bXBtYXAscmUubm9ybWFsbWFwLHJlLmRpc3BsYWNlbWVudG1hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IG5lKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5lbWlzc2l2ZW1hcCxyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUucm91Z2huZXNzbWFwLHJlLm1ldGFsbmVzc21hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLmdyYWRpZW50bWFwLHJlLmZvZyxyZS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgbmUoMCl9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOlRhKFtyZS5wb2ludHMscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOmhyLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpoci5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOlRhKFtyZS5zcHJpdGUscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmhyLmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOlRhKFtyZS5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpoci5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgan0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6VGEoW3JlLmxpZ2h0cyxyZS5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpoci5zaGFkb3dfZnJhZ319O2FoLnBoeXNpY2FsPXt1bmlmb3JtczpUYShbYWguc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBMdCgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgTHR9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IG5lKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF9mcmFnfTtmdW5jdGlvbiBYZHIoZSx0LHIsbixpLG8pe2xldCBhPW5ldyBuZSgwKSxzPWk9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIHAoZyxfKXtsZXQgeT0hMSx4PV8uaXNTY2VuZT09PSEwP18uYmFja2dyb3VuZDpudWxsO3gmJnguaXNUZXh0dXJlJiYoeD10LmdldCh4KSk7bGV0IGI9ZS54cixTPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7UyYmUy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJih4PW51bGwpLHg9PT1udWxsP2QoYSxzKTp4JiZ4LmlzQ29sb3ImJihkKHgsMSkseT0hMCksKGUuYXV0b0NsZWFyfHx5KSYmZS5jbGVhcihlLmF1dG9DbGVhckNvbG9yLGUuYXV0b0NsZWFyRGVwdGgsZS5hdXRvQ2xlYXJTdGVuY2lsKSx4JiYoeC5pc0N1YmVUZXh0dXJlfHx4Lm1hcHBpbmc9PT14TSk/KGM9PT12b2lkIDAmJihjPW5ldyB0aShuZXcgUWYoMSwxLDEpLG5ldyBsaCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6WjMoYWguY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmFoLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFoLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpJaSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oQyxQLGspe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKGsubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLG4udXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT14LGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT14LmlzQ3ViZVRleHR1cmUmJnguaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXh8fGghPT14LnZlcnNpb258fGYhPT1lLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT14LGg9eC52ZXJzaW9uLGY9ZS50b25lTWFwcGluZyksZy51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6eCYmeC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgdGkobmV3IFYwKDIsMiksbmV3IGxoKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOlozKGFoLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjphaC5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphaC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6STEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLG4udXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT14LHgubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZ4LnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh4Lm1hdHJpeCksKHUhPT14fHxoIT09eC52ZXJzaW9ufHxmIT09ZS50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9eCxoPXgudmVyc2lvbixmPWUudG9uZU1hcHBpbmcpLGcudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGQoZyxfKXtyLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoZy5yLGcuZyxnLmIsXyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBhfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKGcsXz0xKXthLnNldChnKSxzPV8sZChhLHMpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oZyl7cz1nLGQoYSxzKX0scmVuZGVyOnB9fWZ1bmN0aW9uICRkcihlLHQscixuKXtsZXQgaT1lLmdldFBhcmFtZXRlcigzNDkyMSksbz1uLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksYT1uLmlzV2ViR0wyfHxvIT09bnVsbCxzPXt9LGw9ZyhudWxsKSxjPWw7ZnVuY3Rpb24gdShSLEYseixVLFcpe2xldCBaPSExO2lmKGEpe2xldCBydD1kKFUseixGKTtjIT09cnQmJihjPXJ0LGYoYy5vYmplY3QpKSxaPV8oVSxXKSxaJiZ5KFUsVyl9ZWxzZXtsZXQgcnQ9Ri53aXJlZnJhbWU9PT0hMDsoYy5nZW9tZXRyeSE9PVUuaWR8fGMucHJvZ3JhbSE9PXouaWR8fGMud2lyZWZyYW1lIT09cnQpJiYoYy5nZW9tZXRyeT1VLmlkLGMucHJvZ3JhbT16LmlkLGMud2lyZWZyYW1lPXJ0LFo9ITApfVIuaXNJbnN0YW5jZWRNZXNoPT09ITAmJihaPSEwKSxXIT09bnVsbCYmci51cGRhdGUoVywzNDk2MyksWiYmKGsoUixGLHosVSksVyE9PW51bGwmJmUuYmluZEJ1ZmZlcigzNDk2MyxyLmdldChXKS5idWZmZXIpKX1mdW5jdGlvbiBoKCl7cmV0dXJuIG4uaXNXZWJHTDI/ZS5jcmVhdGVWZXJ0ZXhBcnJheSgpOm8uY3JlYXRlVmVydGV4QXJyYXlPRVMoKX1mdW5jdGlvbiBmKFIpe3JldHVybiBuLmlzV2ViR0wyP2UuYmluZFZlcnRleEFycmF5KFIpOm8uYmluZFZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIHAoUil7cmV0dXJuIG4uaXNXZWJHTDI/ZS5kZWxldGVWZXJ0ZXhBcnJheShSKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIGQoUixGLHope2xldCBVPXoud2lyZWZyYW1lPT09ITAsVz1zW1IuaWRdO1c9PT12b2lkIDAmJihXPXt9LHNbUi5pZF09Vyk7bGV0IFo9V1tGLmlkXTtaPT09dm9pZCAwJiYoWj17fSxXW0YuaWRdPVopO2xldCBydD1aW1VdO3JldHVybiBydD09PXZvaWQgMCYmKHJ0PWcoaCgpKSxaW1VdPXJ0KSxydH1mdW5jdGlvbiBnKFIpe2xldCBGPVtdLHo9W10sVT1bXTtmb3IobGV0IFc9MDtXPGk7VysrKUZbV109MCx6W1ddPTAsVVtXXT0wO3JldHVybntnZW9tZXRyeTpudWxsLHByb2dyYW06bnVsbCx3aXJlZnJhbWU6ITEsbmV3QXR0cmlidXRlczpGLGVuYWJsZWRBdHRyaWJ1dGVzOnosYXR0cmlidXRlRGl2aXNvcnM6VSxvYmplY3Q6UixhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIF8oUixGKXtsZXQgej1jLmF0dHJpYnV0ZXMsVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9eltaXSxvdD1VW1pdO2lmKHJ0PT09dm9pZCAwfHxydC5hdHRyaWJ1dGUhPT1vdHx8cnQuZGF0YSE9PW90LmRhdGEpcmV0dXJuITA7VysrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1XfHxjLmluZGV4IT09Rn1mdW5jdGlvbiB5KFIsRil7bGV0IHo9e30sVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9VVtaXSxvdD17fTtvdC5hdHRyaWJ1dGU9cnQscnQuZGF0YSYmKG90LmRhdGE9cnQuZGF0YSkseltaXT1vdCxXKyt9Yy5hdHRyaWJ1dGVzPXosYy5hdHRyaWJ1dGVzTnVtPVcsYy5pbmRleD1GfWZ1bmN0aW9uIHgoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKVJbRl09MH1mdW5jdGlvbiBiKFIpe1MoUiwwKX1mdW5jdGlvbiBTKFIsRil7bGV0IHo9Yy5uZXdBdHRyaWJ1dGVzLFU9Yy5lbmFibGVkQXR0cmlidXRlcyxXPWMuYXR0cmlidXRlRGl2aXNvcnM7eltSXT0xLFVbUl09PT0wJiYoZS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShSKSxVW1JdPTEpLFdbUl0hPT1GJiYoKG4uaXNXZWJHTDI/ZTp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtuLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oUixGKSxXW1JdPUYpfWZ1bmN0aW9uIEMoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXMsRj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgej0wLFU9Ri5sZW5ndGg7ejxVO3orKylGW3pdIT09Ult6XSYmKGUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHopLEZbel09MCl9ZnVuY3Rpb24gUChSLEYseixVLFcsWil7bi5pc1dlYkdMMj09PSEwJiYoej09PTUxMjR8fHo9PT01MTI1KT9lLnZlcnRleEF0dHJpYklQb2ludGVyKFIsRix6LFcsWik6ZS52ZXJ0ZXhBdHRyaWJQb2ludGVyKFIsRix6LFUsVyxaKX1mdW5jdGlvbiBrKFIsRix6LFUpe2lmKG4uaXNXZWJHTDI9PT0hMSYmKFIuaXNJbnN0YW5jZWRNZXNofHxVLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZ0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpPT09bnVsbClyZXR1cm47eCgpO2xldCBXPVUuYXR0cmlidXRlcyxaPXouZ2V0QXR0cmlidXRlcygpLHJ0PUYuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IG90IGluIFope2xldCBzdD1aW290XTtpZihzdC5sb2NhdGlvbj49MCl7bGV0IFN0PVdbb3RdO2lmKFN0PT09dm9pZCAwJiYob3Q9PT0iaW5zdGFuY2VNYXRyaXgiJiZSLmluc3RhbmNlTWF0cml4JiYoU3Q9Ui5pbnN0YW5jZU1hdHJpeCksb3Q9PT0iaW5zdGFuY2VDb2xvciImJlIuaW5zdGFuY2VDb2xvciYmKFN0PVIuaW5zdGFuY2VDb2xvcikpLFN0IT09dm9pZCAwKXtsZXQgYnQ9U3Qubm9ybWFsaXplZCxNdD1TdC5pdGVtU2l6ZSxsdD1yLmdldChTdCk7aWYobHQ9PT12b2lkIDApY29udGludWU7bGV0IEt0PWx0LmJ1ZmZlcixfdD1sdC50eXBlLGN0PWx0LmJ5dGVzUGVyRWxlbWVudDtpZihTdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgWD1TdC5kYXRhLGV0PVguc3RyaWRlLGR0PVN0Lm9mZnNldDtpZihYJiZYLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylTKHN0LmxvY2F0aW9uK3EsWC5tZXNoUGVyQXR0cmlidXRlKTtSLmlzSW5zdGFuY2VkTWVzaCE9PSEwJiZVLl9tYXhJbnN0YW5jZUNvdW50PT09dm9pZCAwJiYoVS5fbWF4SW5zdGFuY2VDb3VudD1YLm1lc2hQZXJBdHRyaWJ1dGUqWC5jb3VudCl9ZWxzZSBmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspYihzdC5sb2NhdGlvbitxKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylQKHN0LmxvY2F0aW9uK3EsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LGV0KmN0LChkdCtNdC9zdC5sb2NhdGlvblNpemUqcSkqY3QpfWVsc2V7aWYoU3QuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUpe2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylTKHN0LmxvY2F0aW9uK1gsU3QubWVzaFBlckF0dHJpYnV0ZSk7Ui5pc0luc3RhbmNlZE1lc2ghPT0hMCYmVS5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKFUuX21heEluc3RhbmNlQ291bnQ9U3QubWVzaFBlckF0dHJpYnV0ZSpTdC5jb3VudCl9ZWxzZSBmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspYihzdC5sb2NhdGlvbitYKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylQKHN0LmxvY2F0aW9uK1gsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LE10KmN0LE10L3N0LmxvY2F0aW9uU2l6ZSpYKmN0KX19ZWxzZSBpZihydCE9PXZvaWQgMCl7bGV0IGJ0PXJ0W290XTtpZihidCE9PXZvaWQgMClzd2l0Y2goYnQubGVuZ3RoKXtjYXNlIDI6ZS52ZXJ0ZXhBdHRyaWIyZnYoc3QubG9jYXRpb24sYnQpO2JyZWFrO2Nhc2UgMzplLnZlcnRleEF0dHJpYjNmdihzdC5sb2NhdGlvbixidCk7YnJlYWs7Y2FzZSA0OmUudmVydGV4QXR0cmliNGZ2KHN0LmxvY2F0aW9uLGJ0KTticmVhaztkZWZhdWx0OmUudmVydGV4QXR0cmliMWZ2KHN0LmxvY2F0aW9uLGJ0KX19fX1DKCl9ZnVuY3Rpb24gTygpe0koKTtmb3IobGV0IFIgaW4gcyl7bGV0IEY9c1tSXTtmb3IobGV0IHogaW4gRil7bGV0IFU9Rlt6XTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgRlt6XX1kZWxldGUgc1tSXX19ZnVuY3Rpb24gRChSKXtpZihzW1IuaWRdPT09dm9pZCAwKXJldHVybjtsZXQgRj1zW1IuaWRdO2ZvcihsZXQgeiBpbiBGKXtsZXQgVT1GW3pdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSBGW3pdfWRlbGV0ZSBzW1IuaWRdfWZ1bmN0aW9uIEIoUil7Zm9yKGxldCBGIGluIHMpe2xldCB6PXNbRl07aWYoeltSLmlkXT09PXZvaWQgMCljb250aW51ZTtsZXQgVT16W1IuaWRdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSB6W1IuaWRdfX1mdW5jdGlvbiBJKCl7TCgpLGMhPT1sJiYoYz1sLGYoYy5vYmplY3QpKX1mdW5jdGlvbiBMKCl7bC5nZW9tZXRyeT1udWxsLGwucHJvZ3JhbT1udWxsLGwud2lyZWZyYW1lPSExfXJldHVybntzZXR1cDp1LHJlc2V0OkkscmVzZXREZWZhdWx0U3RhdGU6TCxkaXNwb3NlOk8scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6RCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOkIsaW5pdEF0dHJpYnV0ZXM6eCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpDfX1mdW5jdGlvbiBLZHIoZSx0LHIsbil7bGV0IGk9bi5pc1dlYkdMMixvO2Z1bmN0aW9uIGEoYyl7bz1jfWZ1bmN0aW9uIHMoYyx1KXtlLmRyYXdBcnJheXMobyxjLHUpLHIudXBkYXRlKHUsbywxKX1mdW5jdGlvbiBsKGMsdSxoKXtpZihoPT09MClyZXR1cm47bGV0IGYscDtpZihpKWY9ZSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKGY9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLGY9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59ZltwXShvLGMsdSxoKSxyLnVwZGF0ZSh1LG8saCl9dGhpcy5zZXRNb2RlPWEsdGhpcy5yZW5kZXI9cyx0aGlzLnJlbmRlckluc3RhbmNlcz1sfWZ1bmN0aW9uIFpkcihlLHQscil7bGV0IG47ZnVuY3Rpb24gaSgpe2lmKG4hPT12b2lkIDApcmV0dXJuIG47aWYodC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCBrPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtuPWUuZ2V0UGFyYW1ldGVyKGsuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIG49MDtyZXR1cm4gbn1mdW5jdGlvbiBvKGspe2lmKGs9PT0iaGlnaHAiKXtpZihlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO2s9Im1lZGl1bXAifXJldHVybiBrPT09Im1lZGl1bXAiJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBhPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxzPXIucHJlY2lzaW9uIT09dm9pZCAwP3IucHJlY2lzaW9uOiJoaWdocCIsbD1vKHMpO2whPT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIscywibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikscz1sKTtsZXQgYz1hfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI9PT0hMCxoPWUuZ2V0UGFyYW1ldGVyKDM0OTMwKSxmPWUuZ2V0UGFyYW1ldGVyKDM1NjYwKSxwPWUuZ2V0UGFyYW1ldGVyKDMzNzkpLGQ9ZS5nZXRQYXJhbWV0ZXIoMzQwNzYpLGc9ZS5nZXRQYXJhbWV0ZXIoMzQ5MjEpLF89ZS5nZXRQYXJhbWV0ZXIoMzYzNDcpLHk9ZS5nZXRQYXJhbWV0ZXIoMzYzNDgpLHg9ZS5nZXRQYXJhbWV0ZXIoMzYzNDkpLGI9Zj4wLFM9YXx8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0IiksQz1iJiZTLFA9YT9lLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6YSxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6aSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246cyxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6aCxtYXhWZXJ0ZXhUZXh0dXJlczpmLG1heFRleHR1cmVTaXplOnAsbWF4Q3ViZW1hcFNpemU6ZCxtYXhBdHRyaWJ1dGVzOmcsbWF4VmVydGV4VW5pZm9ybXM6XyxtYXhWYXJ5aW5nczp5LG1heEZyYWdtZW50VW5pZm9ybXM6eCx2ZXJ0ZXhUZXh0dXJlczpiLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpTLGZsb2F0VmVydGV4VGV4dHVyZXM6QyxtYXhTYW1wbGVzOlB9fWZ1bmN0aW9uIEpkcihlKXtsZXQgdD10aGlzLHI9bnVsbCxuPTAsaT0hMSxvPSExLGE9bmV3ICRjLHM9bmV3IGtpLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLHApe2xldCBkPWgubGVuZ3RoIT09MHx8Znx8biE9PTB8fGk7cmV0dXJuIGk9ZixyPXUoaCxwLDApLG49aC5sZW5ndGgsZH0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixwKXtsZXQgZD1oLmNsaXBwaW5nUGxhbmVzLGc9aC5jbGlwSW50ZXJzZWN0aW9uLF89aC5jbGlwU2hhZG93cyx5PWUuZ2V0KGgpO2lmKCFpfHxkPT09bnVsbHx8ZC5sZW5ndGg9PT0wfHxvJiYhXylvP3UobnVsbCk6YygpO2Vsc2V7bGV0IHg9bz8wOm4sYj14KjQsUz15LmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1TLFM9dShkLGYsYixwKTtmb3IobGV0IEM9MDtDIT09YjsrK0MpU1tDXT1yW0NdO3kuY2xpcHBpbmdTdGF0ZT1TLHRoaXMubnVtSW50ZXJzZWN0aW9uPWc/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9eH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ciYmKGwudmFsdWU9cixsLm5lZWRzVXBkYXRlPW4+MCksdC5udW1QbGFuZXM9bix0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLHAsZCl7bGV0IGc9aCE9PW51bGw/aC5sZW5ndGg6MCxfPW51bGw7aWYoZyE9PTApe2lmKF89bC52YWx1ZSxkIT09ITB8fF89PT1udWxsKXtsZXQgeT1wK2cqNCx4PWYubWF0cml4V29ybGRJbnZlcnNlO3MuZ2V0Tm9ybWFsTWF0cml4KHgpLChfPT09bnVsbHx8Xy5sZW5ndGg8eSkmJihfPW5ldyBGbG9hdDMyQXJyYXkoeSkpO2ZvcihsZXQgYj0wLFM9cDtiIT09ZzsrK2IsUys9NClhLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHgscyksYS5ub3JtYWwudG9BcnJheShfLFMpLF9bUyszXT1hLmNvbnN0YW50fWwudmFsdWU9XyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1nLHQubnVtSW50ZXJzZWN0aW9uPTAsX319ZnVuY3Rpb24gUWRyKGUpe2xldCB0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm4gcz09PVlQP2EubWFwcGluZz1ueDpzPT09alAmJihhLm1hcHBpbmc9aXgpLGF9ZnVuY3Rpb24gbihhKXtpZihhJiZhLmlzVGV4dHVyZSYmYS5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMSl7bGV0IHM9YS5tYXBwaW5nO2lmKHM9PT1ZUHx8cz09PWpQKWlmKHQuaGFzKGEpKXtsZXQgbD10LmdldChhKS50ZXh0dXJlO3JldHVybiByKGwsYS5tYXBwaW5nKX1lbHNle2xldCBsPWEuaW1hZ2U7aWYobCYmbC5oZWlnaHQ+MCl7bGV0IGM9bmV3IFEzKGwuaGVpZ2h0LzIpO3JldHVybiBjLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKGUsYSksdC5zZXQoYSxjKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpLHIoYy50ZXh0dXJlLGEubWFwcGluZyl9ZWxzZSByZXR1cm4gbnVsbH19cmV0dXJuIGF9ZnVuY3Rpb24gaShhKXtsZXQgcz1hLnRhcmdldDtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpO2xldCBsPXQuZ2V0KHMpO2whPT12b2lkIDAmJih0LmRlbGV0ZShzKSxsLmRpc3Bvc2UoKSl9ZnVuY3Rpb24gbygpe3Q9bmV3IFdlYWtNYXB9cmV0dXJue2dldDpuLGRpc3Bvc2U6b319dmFyIEQxPWNsYXNzIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IodD0tMSxyPTEsbj0xLGk9LTEsbz0uMSxhPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1yLHRoaXMudG9wPW4sdGhpcy5ib3R0b209aSx0aGlzLm5lYXI9byx0aGlzLmZhcj1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfXNldFZpZXdPZmZzZXQodCxyLG4saSxvLGEpe3RoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1yLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLHI9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLG49KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLGk9KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yLG89bi10LGE9bit0LHM9aStyLGw9aS1yO2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgYz0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLHU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207bys9Yyp0aGlzLnZpZXcub2Zmc2V0WCxhPW8rYyp0aGlzLnZpZXcud2lkdGgscy09dSp0aGlzLnZpZXcub2Zmc2V0WSxsPXMtdSp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKG8sYSxzLGwsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC56b29tPXRoaXMuem9vbSxyLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxyLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LHIub2JqZWN0LnRvcD10aGlzLnRvcCxyLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSkscn19O0QxLnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT0hMDt2YXIgVTA9Y2xhc3MgZXh0ZW5kcyBsaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn19O1UwLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO3ZhciBxMz00LEYwPTgsJGY9TWF0aC5wb3coMixGMCkscWZlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxHZmU9RjAtcTMrMStxZmUubGVuZ3RoLGszPTIwLGh1dD1uZXcgRDEse19sb2RQbGFuZXM6TlAsX3NpemVMb2RzOlB1ZSxfc2lnbWFzOlBWfT10bXIoKSxJdWU9bmV3IG5lLGZ1dD1udWxsLFMxPSgxK01hdGguc3FydCg1KSkvMixSMz0xL1MxLEx1ZT1bbmV3IGooMSwxLDEpLG5ldyBqKC0xLDEsMSksbmV3IGooMSwxLC0xKSxuZXcgaigtMSwxLC0xKSxuZXcgaigwLFMxLFIzKSxuZXcgaigwLFMxLC1SMyksbmV3IGooUjMsMCxTMSksbmV3IGooLVIzLDAsUzEpLG5ldyBqKFMxLFIzLDApLG5ldyBqKC1TMSxSMywwKV0sZTY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1udWxsLHRoaXMuX2JsdXJNYXRlcmlhbD1lbXIoazMpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LHI9MCxuPS4xLGk9MTAwKXtmdXQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxuLGksbykscj4wJiZ0aGlzLl9ibHVyKG8sMCwwLHIpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxyPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LHIpfWZyb21DdWJlbWFwKHQscj1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxyKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1OdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXt0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1SdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCE9PW51bGwmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSx0aGlzLl9jdWJlbWFwU2hhZGVyIT09bnVsbCYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksdGhpcy5fZXF1aXJlY3RTaGFkZXIhPT1udWxsJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDxOUC5sZW5ndGg7dCsrKU5QW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZnV0KSx0LnNjaXNzb3JUZXN0PSExLElWKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LHIpe2Z1dD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbj1yfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LG4pLHRoaXMuX2FwcGx5UE1SRU0obiksdGhpcy5fY2xlYW51cChuKSxufV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IHI9e21hZ0ZpbHRlcjppaSxtaW5GaWx0ZXI6aWksZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6QzEsZm9ybWF0OlFvLGVuY29kaW5nOlFkLGRlcHRoQnVmZmVyOiExfSxuPWt1ZShyKTtyZXR1cm4gbi5kZXB0aEJ1ZmZlcj0hdCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD09PW51bGwmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1rdWUocikpLG59X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgcj1uZXcgdGkoTlBbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShyLGh1dCl9X3NjZW5lVG9DdWJlVVYodCxyLG4saSl7bGV0IHM9bmV3IFVpKDkwLDEscixuKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGg9dS5hdXRvQ2xlYXIsZj11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihJdWUpLHUudG9uZU1hcHBpbmc9S2QsdS5hdXRvQ2xlYXI9ITE7bGV0IHA9bmV3IHNoKHtuYW1lOiJQTVJFTS5CYWNrZ3JvdW5kIixzaWRlOklpLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZD1uZXcgdGkobmV3IFFmLHApLGc9ITEsXz10LmJhY2tncm91bmQ7Xz9fLmlzQ29sb3ImJihwLmNvbG9yLmNvcHkoXyksdC5iYWNrZ3JvdW5kPW51bGwsZz0hMCk6KHAuY29sb3IuY29weShJdWUpLGc9ITApO2ZvcihsZXQgeT0wO3k8Njt5Kyspe2xldCB4PXklMzt4PT09MD8ocy51cC5zZXQoMCxsW3ldLDApLHMubG9va0F0KGNbeV0sMCwwKSk6eD09PTE/KHMudXAuc2V0KDAsMCxsW3ldKSxzLmxvb2tBdCgwLGNbeV0sMCkpOihzLnVwLnNldCgwLGxbeV0sMCkscy5sb29rQXQoMCwwLGNbeV0pKSxJVihpLHgqJGYseT4yPyRmOjAsJGYsJGYpLHUuc2V0UmVuZGVyVGFyZ2V0KGkpLGcmJnUucmVuZGVyKGQscyksdS5yZW5kZXIodCxzKX1kLmdlb21ldHJ5LmRpc3Bvc2UoKSxkLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9X31fdGV4dHVyZVRvQ3ViZVVWKHQscil7bGV0IG49dGhpcy5fcmVuZGVyZXIsaT10Lm1hcHBpbmc9PT1ueHx8dC5tYXBwaW5nPT09aXg7aT8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPU51ZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9dC5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxKTp0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1SdWUoKSk7bGV0IG89aT90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLGE9bmV3IHRpKE5QWzBdLG8pLHM9by51bmlmb3JtcztzLmVudk1hcC52YWx1ZT10LGl8fHMudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSVYociwwLDAsMyokZiwyKiRmKSxuLnNldFJlbmRlclRhcmdldChyKSxuLnJlbmRlcihhLGh1dCl9X2FwcGx5UE1SRU0odCl7bGV0IHI9dGhpcy5fcmVuZGVyZXIsbj1yLmF1dG9DbGVhcjtyLmF1dG9DbGVhcj0hMTtmb3IobGV0IGk9MTtpPEdmZTtpKyspe2xldCBvPU1hdGguc3FydChQVltpXSpQVltpXS1QVltpLTFdKlBWW2ktMV0pLGE9THVlWyhpLTEpJUx1ZS5sZW5ndGhdO3RoaXMuX2JsdXIodCxpLTEsaSxvLGEpfXIuYXV0b0NsZWFyPW59X2JsdXIodCxyLG4saSxvKXtsZXQgYT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LGEscixuLGksImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihhLHQsbixuLGksImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQscixuLGksbyxhLHMpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO2EhPT0ibGF0aXR1ZGluYWwiJiZhIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IHRpKE5QW2ldLGMpLGY9Yy51bmlmb3JtcyxwPVB1ZVtuXS0xLGQ9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipwKToyKk1hdGguUEkvKDIqazMtMSksZz1vL2QsXz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IodSpnKTprMztfPmszJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke199IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gJHtrM31gKTtsZXQgeT1bXSx4PTA7Zm9yKGxldCBQPTA7UDxrMzsrK1Ape2xldCBrPVAvZyxPPU1hdGguZXhwKC1rKmsvMik7eS5wdXNoKE8pLFA9PT0wP3grPU86UDxfJiYoeCs9MipPKX1mb3IobGV0IFA9MDtQPHkubGVuZ3RoO1ArKyl5W1BdPXlbUF0veDtmLmVudk1hcC52YWx1ZT10LnRleHR1cmUsZi5zYW1wbGVzLnZhbHVlPV8sZi53ZWlnaHRzLnZhbHVlPXksZi5sYXRpdHVkaW5hbC52YWx1ZT1hPT09ImxhdGl0dWRpbmFsIixzJiYoZi5wb2xlQXhpcy52YWx1ZT1zKSxmLmRUaGV0YS52YWx1ZT1kLGYubWlwSW50LnZhbHVlPUYwLW47bGV0IGI9UHVlW2ldLFM9MypNYXRoLm1heCgwLCRmLTIqYiksQz0oaT09PTA/MDoyKiRmKSsyKmIqKGk+RjAtcTM/aS1GMCtxMzowKTtJVihyLFMsQywzKmIsMipiKSxsLnNldFJlbmRlclRhcmdldChyKSxsLnJlbmRlcihoLGh1dCl9fTtmdW5jdGlvbiB0bXIoKXtsZXQgZT1bXSx0PVtdLHI9W10sbj1GMDtmb3IobGV0IGk9MDtpPEdmZTtpKyspe2xldCBvPU1hdGgucG93KDIsbik7dC5wdXNoKG8pO2xldCBhPTEvbztpPkYwLXEzP2E9cWZlW2ktRjArcTMtMV06aT09PTAmJihhPTApLHIucHVzaChhKTtsZXQgcz0xLyhvLTEpLGw9LXMvMixjPTErcy8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LHA9MyxkPTIsZz0xLF89bmV3IEZsb2F0MzJBcnJheShwKmYqaCkseT1uZXcgRmxvYXQzMkFycmF5KGQqZipoKSx4PW5ldyBGbG9hdDMyQXJyYXkoZypmKmgpO2ZvcihsZXQgUz0wO1M8aDtTKyspe2xldCBDPVMlMyoyLzMtMSxQPVM+Mj8wOi0xLGs9W0MsUCwwLEMrMi8zLFAsMCxDKzIvMyxQKzEsMCxDLFAsMCxDKzIvMyxQKzEsMCxDLFArMSwwXTtfLnNldChrLHAqZipTKSx5LnNldCh1LGQqZipTKTtsZXQgTz1bUyxTLFMsUyxTLFNdO3guc2V0KE8sZypmKlMpfWxldCBiPW5ldyBQZTtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShfLHApKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKZSh5LGQpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgSmUoeCxnKSksZS5wdXNoKGIpLG4+cTMmJm4tLX1yZXR1cm57X2xvZFBsYW5lczplLF9zaXplTG9kczp0LF9zaWdtYXM6cn19ZnVuY3Rpb24ga3VlKGUpe2xldCB0PW5ldyB1cygzKiRmLDMqJGYsZSk7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPXhNLHQudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLHQuc2Npc3NvclRlc3Q9ITAsdH1mdW5jdGlvbiBJVihlLHQscixuLGkpe2Uudmlld3BvcnQuc2V0KHQscixuLGkpLGUuc2Npc3Nvci5zZXQodCxyLG4saSl9ZnVuY3Rpb24gZW1yKGUpe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoZSkscj1uZXcgaigwLDEsMCk7cmV0dXJuIG5ldyBVMCh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOmV9LHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHNhbXBsZXM6e3ZhbHVlOjF9LHdlaWdodHM6e3ZhbHVlOnR9LGxhdGl0dWRpbmFsOnt2YWx1ZTohMX0sZFRoZXRhOnt2YWx1ZTowfSxtaXBJbnQ6e3ZhbHVlOjB9LHBvbGVBeGlzOnt2YWx1ZTpyfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSBpbnQgc2FtcGxlczsKCQkJdW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07CgkJCXVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDsKCQkJdW5pZm9ybSBmbG9hdCBkVGhldGE7CgkJCXVuaWZvcm0gZmxvYXQgbWlwSW50OwoJCQl1bmlmb3JtIHZlYzMgcG9sZUF4aXM7CgoJCQkjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVYKCQkJI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KCgkJCXZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkgewoKCQkJCWZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApOwoJCQkJLy8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uCgkJCQl2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YQoJCQkJCSsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKQoJCQkJCSsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApOwoKCQkJCXJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApOwoKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoKCQkJCXZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTsKCgkJCQlpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHsKCgkJCQkJYXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApOwoKCQkJCX0KCgkJCQlheGlzID0gbm9ybWFsaXplKCBheGlzICk7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7CgoJCQkJZm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkgewoKCQkJCQlpZiAoIGkgPj0gc2FtcGxlcyApIHsKCgkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJCWZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTsKCQkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7CgoJCQkJfQoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBSdWUoKXtsZXQgZT1uZXcgTHQoMSwxKTtyZXR1cm4gbmV3IFUwKHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTplfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTsKCgkJCSNpbmNsdWRlIDxjb21tb24+CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgoJCQkJdmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTsKCQkJCXZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTsKCgkJCQl2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTsKCQkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCQl2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggKz0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnkgKz0gdGV4ZWxTaXplLnk7CgkJCQl2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggLT0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCgkJCQl2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApOwoJCQkJdmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTsKCQkJCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIE51ZSgpe3JldHVybiBuZXcgVTAoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6Tmh0KCksZnJhZ21lbnRTaGFkZXI6YAoKCQkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCgkJCXZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uOwoKCQkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIE5odCgpe3JldHVybmAKCgkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQlhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4OwoKCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJLy8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvbgoJCXZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkgewoKCQkJdXYgPSAyLjAgKiB1diAtIDEuMDsKCgkJCXZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApOwoKCQkJaWYgKCBmYWNlID09IDAuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHsKCgkJCQlkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHoKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHsKCgkJCQlkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHoKCgkJCX0KCgkJCXJldHVybiBkaXJlY3Rpb247CgoJCX0KCgkJdm9pZCBtYWluKCkgewoKCQkJdk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApOwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKCgkJfQoJYH1mdW5jdGlvbiBybXIoZSl7bGV0IHQ9bmV3IFdlYWtNYXAscj1udWxsO2Z1bmN0aW9uIG4ocyl7aWYocyYmcy5pc1RleHR1cmUpe2xldCBsPXMubWFwcGluZyxjPWw9PT1ZUHx8bD09PWpQLHU9bD09PW54fHxsPT09aXg7aWYoY3x8dSlpZihzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmcy5uZWVkc1BNUkVNVXBkYXRlPT09ITApe3MubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChzKTtyZXR1cm4gcj09PW51bGwmJihyPW5ldyBlNihlKSksaD1jP3IuZnJvbUVxdWlyZWN0YW5ndWxhcihzLGgpOnIuZnJvbUN1YmVtYXAocyxoKSx0LnNldChzLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKHMpKXJldHVybiB0LmdldChzKS50ZXh0dXJlO3tsZXQgaD1zLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJmkoaCkpe3I9PT1udWxsJiYocj1uZXcgZTYoZSkpO2xldCBmPWM/ci5mcm9tRXF1aXJlY3Rhbmd1bGFyKHMpOnIuZnJvbUN1YmVtYXAocyk7cmV0dXJuIHQuc2V0KHMsZikscy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBzfWZ1bmN0aW9uIGkocyl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylzW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIG8ocyl7bGV0IGw9cy50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIGEoKXt0PW5ldyBXZWFrTWFwLHIhPT1udWxsJiYoci5kaXNwb3NlKCkscj1udWxsKX1yZXR1cm57Z2V0Om4sZGlzcG9zZTphfX1mdW5jdGlvbiBubXIoZSl7bGV0IHQ9e307ZnVuY3Rpb24gcihuKXtpZih0W25dIT09dm9pZCAwKXJldHVybiB0W25dO2xldCBpO3N3aXRjaChuKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOmk9ZS5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjppPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjppPWUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxlLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6aT1lLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDppPWUuZ2V0RXh0ZW5zaW9uKG4pfXJldHVybiB0W25dPWksaX1yZXR1cm57aGFzOmZ1bmN0aW9uKG4pe3JldHVybiByKG4pIT09bnVsbH0saW5pdDpmdW5jdGlvbihuKXtuLmlzV2ViR0wyP3IoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKToocigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHIoIk9FU190ZXh0dXJlX2Zsb2F0IikscigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLHIoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikscigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikscigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLHIoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikscigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxyKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxyKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxyKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKG4pe2xldCBpPXIobik7cmV0dXJuIGk9PT1udWxsJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrbisiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLGl9fX1mdW5jdGlvbiBpbXIoZSx0LHIsbil7bGV0IGk9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBhKGgpe2xldCBmPWgudGFyZ2V0O2YuaW5kZXghPT1udWxsJiZ0LnJlbW92ZShmLmluZGV4KTtmb3IobGV0IGQgaW4gZi5hdHRyaWJ1dGVzKXQucmVtb3ZlKGYuYXR0cmlidXRlc1tkXSk7Zi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxkZWxldGUgaVtmLmlkXTtsZXQgcD1vLmdldChmKTtwJiYodC5yZW1vdmUocCksby5kZWxldGUoZikpLG4ucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoZiksZi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PT09ITAmJmRlbGV0ZSBmLl9tYXhJbnN0YW5jZUNvdW50LHIubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGlbZi5pZF09PT0hMHx8KGYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksaVtmLmlkXT0hMCxyLm1lbW9yeS5nZW9tZXRyaWVzKyspLGZ9ZnVuY3Rpb24gbChoKXtsZXQgZj1oLmF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIGYpdC51cGRhdGUoZltkXSwzNDk2Mik7bGV0IHA9aC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIHApe2xldCBnPXBbZF07Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXQudXBkYXRlKGdbX10sMzQ5NjIpfX1mdW5jdGlvbiBjKGgpe2xldCBmPVtdLHA9aC5pbmRleCxkPWguYXR0cmlidXRlcy5wb3NpdGlvbixnPTA7aWYocCE9PW51bGwpe2xldCB4PXAuYXJyYXk7Zz1wLnZlcnNpb247Zm9yKGxldCBiPTAsUz14Lmxlbmd0aDtiPFM7Yis9Myl7bGV0IEM9eFtiKzBdLFA9eFtiKzFdLGs9eFtiKzJdO2YucHVzaChDLFAsUCxrLGssQyl9fWVsc2V7bGV0IHg9ZC5hcnJheTtnPWQudmVyc2lvbjtmb3IobGV0IGI9MCxTPXgubGVuZ3RoLzMtMTtiPFM7Yis9Myl7bGV0IEM9YiswLFA9YisxLGs9YisyO2YucHVzaChDLFAsUCxrLGssQyl9fWxldCBfPW5ldyhCZmUoZik/SzM6JDMpKGYsMSk7Xy52ZXJzaW9uPWc7bGV0IHk9by5nZXQoaCk7eSYmdC5yZW1vdmUoeSksby5zZXQoaCxfKX1mdW5jdGlvbiB1KGgpe2xldCBmPW8uZ2V0KGgpO2lmKGYpe2xldCBwPWguaW5kZXg7cCE9PW51bGwmJmYudmVyc2lvbjxwLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBvLmdldChoKX1yZXR1cm57Z2V0OnMsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIG9tcihlLHQscixuKXtsZXQgaT1uLmlzV2ViR0wyLG87ZnVuY3Rpb24gYShmKXtvPWZ9bGV0IHMsbDtmdW5jdGlvbiBjKGYpe3M9Zi50eXBlLGw9Zi5ieXRlc1BlckVsZW1lbnR9ZnVuY3Rpb24gdShmLHApe2UuZHJhd0VsZW1lbnRzKG8scCxzLGYqbCksci51cGRhdGUocCxvLDEpfWZ1bmN0aW9uIGgoZixwLGQpe2lmKGQ9PT0wKXJldHVybjtsZXQgZyxfO2lmKGkpZz1lLF89ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihnPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksXz0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLGc9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWdbX10obyxwLHMsZipsLGQpLHIudXBkYXRlKHAsbyxkKX10aGlzLnNldE1vZGU9YSx0aGlzLnNldEluZGV4PWMsdGhpcy5yZW5kZXI9dSx0aGlzLnJlbmRlckluc3RhbmNlcz1ofWZ1bmN0aW9uIGFtcihlKXtsZXQgdD17Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LHI9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtmdW5jdGlvbiBuKG8sYSxzKXtzd2l0Y2goci5jYWxscysrLGEpe2Nhc2UgNDpyLnRyaWFuZ2xlcys9cyooby8zKTticmVhaztjYXNlIDE6ci5saW5lcys9cyooby8yKTticmVhaztjYXNlIDM6ci5saW5lcys9cyooby0xKTticmVhaztjYXNlIDI6ci5saW5lcys9cypvO2JyZWFrO2Nhc2UgMDpyLnBvaW50cys9cypvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGEpO2JyZWFrfX1mdW5jdGlvbiBpKCl7ci5mcmFtZSsrLHIuY2FsbHM9MCxyLnRyaWFuZ2xlcz0wLHIucG9pbnRzPTAsci5saW5lcz0wfXJldHVybnttZW1vcnk6dCxyZW5kZXI6cixwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDppLHVwZGF0ZTpufX12YXIgdE09Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07dE0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO2Z1bmN0aW9uIHNtcihlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gbG1yKGUsdCl7cmV0dXJuIE1hdGguYWJzKHRbMV0pLU1hdGguYWJzKGVbMV0pfWZ1bmN0aW9uIER1ZShlLHQpe2xldCByPTEsbj10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7biBpbnN0YW5jZW9mIEludDhBcnJheT9yPTEyNzpuIGluc3RhbmNlb2YgSW50MTZBcnJheT9yPTMyNzY3Om4gaW5zdGFuY2VvZiBJbnQzMkFycmF5P3I9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixuKSxlLmRpdmlkZVNjYWxhcihyKX1mdW5jdGlvbiBjbXIoZSx0LHIpe2xldCBuPXt9LGk9bmV3IEZsb2F0MzJBcnJheSg4KSxvPW5ldyBXZWFrTWFwLGE9bmV3IGoscz1bXTtmb3IobGV0IGM9MDtjPDg7YysrKXNbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgcD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBkPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCxnPW8uZ2V0KHUpO2lmKGc9PT12b2lkIDB8fGcuY291bnQhPT1kKXtsZXQgTD1mdW5jdGlvbigpe0IuZGlzcG9zZSgpLG8uZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9O2chPT12b2lkIDAmJmcudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHg9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sUz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLEM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LFA9eD09PSEwPzI6MSxrPUMqUCxPPTE7az50Lm1heFRleHR1cmVTaXplJiYoTz1NYXRoLmNlaWwoay90Lm1heFRleHR1cmVTaXplKSxrPXQubWF4VGV4dHVyZVNpemUpO2xldCBEPW5ldyBGbG9hdDMyQXJyYXkoaypPKjQqZCksQj1uZXcgdE0oRCxrLE8sZCk7Qi5mb3JtYXQ9UW8sQi50eXBlPWpkLEIubmVlZHNVcGRhdGU9ITA7bGV0IEk9UCo0O2ZvcihsZXQgUj0wO1I8ZDtSKyspe2xldCBGPWJbUl0sej1TW1JdLFU9aypPKjQqUjtmb3IobGV0IFc9MDtXPEYuY291bnQ7VysrKXthLmZyb21CdWZmZXJBdHRyaWJ1dGUoRixXKSxGLm5vcm1hbGl6ZWQ9PT0hMCYmRHVlKGEsRik7bGV0IFo9VypJO0RbVStaKzBdPWEueCxEW1UrWisxXT1hLnksRFtVK1orMl09YS56LERbVStaKzNdPTAseD09PSEwJiYoYS5mcm9tQnVmZmVyQXR0cmlidXRlKHosVyksei5ub3JtYWxpemVkPT09ITAmJkR1ZShhLHopLERbVStaKzRdPWEueCxEW1UrWis1XT1hLnksRFtVK1orNl09YS56LERbVStaKzddPTApfX1nPXtjb3VudDpkLHRleHR1cmU6QixzaXplOm5ldyBMdChrLE8pfSxvLnNldCh1LGcpLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9bGV0IF89MDtmb3IobGV0IHg9MDt4PHAubGVuZ3RoO3grKylfKz1wW3hdO2xldCB5PXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLV87Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIseSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscCksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0c1RleHR1cmUiLGcudGV4dHVyZSxyKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoZSwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLGcuc2l6ZSl9ZWxzZXtsZXQgZD1wPT09dm9pZCAwPzA6cC5sZW5ndGgsZz1uW3UuaWRdO2lmKGc9PT12b2lkIDB8fGcubGVuZ3RoIT09ZCl7Zz1bXTtmb3IobGV0IFM9MDtTPGQ7UysrKWdbU109W1MsMF07blt1LmlkXT1nfWZvcihsZXQgUz0wO1M8ZDtTKyspe2xldCBDPWdbU107Q1swXT1TLENbMV09cFtTXX1nLnNvcnQobG1yKTtmb3IobGV0IFM9MDtTPDg7UysrKVM8ZCYmZ1tTXVsxXT8oc1tTXVswXT1nW1NdWzBdLHNbU11bMV09Z1tTXVsxXSk6KHNbU11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsc1tTXVsxXT0wKTtzLnNvcnQoc21yKTtsZXQgXz11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix5PXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCx4PTA7Zm9yKGxldCBTPTA7Uzw4O1MrKyl7bGV0IEM9c1tTXSxQPUNbMF0saz1DWzFdO1AhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmaz8oXyYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKSE9PV9bUF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUyxfW1BdKSx5JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1MpIT09eVtQXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTLHlbUF0pLGlbU109ayx4Kz1rKTooXyYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1MpLHkmJnUuaGFzQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTKSxpW1NdPTApfWxldCBiPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsYiksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaSl9fXJldHVybnt1cGRhdGU6bH19ZnVuY3Rpb24gdW1yKGUsdCxyLG4pe2xldCBpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG8obCl7bGV0IGM9bi5yZW5kZXIuZnJhbWUsdT1sLmdlb21ldHJ5LGg9dC5nZXQobCx1KTtyZXR1cm4gaS5nZXQoaCkhPT1jJiYodC51cGRhdGUoaCksaS5zZXQoaCxjKSksbC5pc0luc3RhbmNlZE1lc2gmJihsLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpPT09ITEmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksaH1mdW5jdGlvbiBhKCl7aT1uZXcgV2Vha01hcH1mdW5jdGlvbiBzKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksYy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOm8sZGlzcG9zZTphfX12YXIgcjY9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07cjYucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgV2ZlPW5ldyB2aSxZZmU9bmV3IHRNLGpmZT1uZXcgcjYsWGZlPW5ldyBIMCxPdWU9W10senVlPVtdLEZ1ZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxCdWU9bmV3IEZsb2F0MzJBcnJheSg5KSxIdWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBiTShlLHQscil7bGV0IG49ZVswXTtpZihuPD0wfHxuPjApcmV0dXJuIGU7bGV0IGk9dCpyLG89T3VlW2ldO2lmKG89PT12b2lkIDAmJihvPW5ldyBGbG9hdDMyQXJyYXkoaSksT3VlW2ldPW8pLHQhPT0wKXtuLnRvQXJyYXkobywwKTtmb3IobGV0IGE9MSxzPTA7YSE9PXQ7KythKXMrPXIsZVthXS50b0FycmF5KG8scyl9cmV0dXJuIG99ZnVuY3Rpb24gaHMoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBDYShlLHQpe2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyllW3JdPXRbcl19ZnVuY3Rpb24gS1UoZSx0KXtsZXQgcj16dWVbdF07cj09PXZvaWQgMCYmKHI9bmV3IEludDMyQXJyYXkodCksenVlW3RdPXIpO2ZvcihsZXQgbj0wO24hPT10OysrbilyW25dPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiByfWZ1bmN0aW9uIGhtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7clswXSE9PXQmJihlLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiBmbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueSkmJihlLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksclswXT10LngsclsxXT10LnkpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiBwbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueXx8clsyXSE9PXQueikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLHJbMF09dC54LHJbMV09dC55LHJbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoclswXSE9PXQucnx8clsxXSE9PXQuZ3x8clsyXSE9PXQuYikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLHJbMF09dC5yLHJbMV09dC5nLHJbMl09dC5iKTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTNmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gZG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10Lnl8fHJbMl0hPT10Lnp8fHJbM10hPT10LncpJiYoZS51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksclswXT10LngsclsxXT10LnksclsyXT10LnosclszXT10LncpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiBtbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtIdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsSHVlKSxDYShyLG4pfX1mdW5jdGlvbiBnbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtCdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsQnVlKSxDYShyLG4pfX1mdW5jdGlvbiBfbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtGdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsRnVlKSxDYShyLG4pfX1mdW5jdGlvbiB5bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO3JbMF0hPT10JiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gdm1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB4bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLENhKHIsdCkpfWZ1bmN0aW9uIGJtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aHMocix0KXx8KGUudW5pZm9ybTRpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gd21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtyWzBdIT09dCYmKGUudW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiBTbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBNbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBFbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBUbXIoZSx0LHIpe2xldCBuPXRoaXMuY2FjaGUsaT1yLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtuWzBdIT09aSYmKGUudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxuWzBdPWkpLHIuc2FmZVNldFRleHR1cmUyRCh0fHxXZmUsaSl9ZnVuY3Rpb24gQ21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUzRCh0fHxqZmUsaSl9ZnVuY3Rpb24gQW1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxYZmUsaSl9ZnVuY3Rpb24gUG1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUyREFycmF5KHR8fFlmZSxpKX1mdW5jdGlvbiBJbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gaG1yO2Nhc2UgMzU2NjQ6cmV0dXJuIGZtcjtjYXNlIDM1NjY1OnJldHVybiBwbXI7Y2FzZSAzNTY2NjpyZXR1cm4gZG1yO2Nhc2UgMzU2NzQ6cmV0dXJuIG1tcjtjYXNlIDM1Njc1OnJldHVybiBnbXI7Y2FzZSAzNTY3NjpyZXR1cm4gX21yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiB5bXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiB2bXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB4bXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBibXI7Y2FzZSA1MTI1OnJldHVybiB3bXI7Y2FzZSAzNjI5NDpyZXR1cm4gU21yO2Nhc2UgMzYyOTU6cmV0dXJuIE1tcjtjYXNlIDM2Mjk2OnJldHVybiBFbXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBUbXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIENtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBBbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gUG1yfX1mdW5jdGlvbiBMbXIoZSx0KXtlLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGttcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDIpO2UudW5pZm9ybTJmdih0aGlzLmFkZHIscil9ZnVuY3Rpb24gUm1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsMyk7ZS51bmlmb3JtM2Z2KHRoaXMuYWRkcixyKX1mdW5jdGlvbiBObXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSw0KTtlLnVuaWZvcm00ZnYodGhpcy5hZGRyLHIpfWZ1bmN0aW9uIERtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDQpO2UudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gT21yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsOSk7ZS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiB6bXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSwxNik7ZS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBGbXIoZSx0KXtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEJtcihlLHQpe2UudW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gSG1yKGUsdCl7ZS51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWbXIoZSx0KXtlLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFVtcihlLHQpe2UudW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHFtcihlLHQpe2UudW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEdtcihlLHQpe2UudW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFdtcihlLHQpe2UudW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFltcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmUyRCh0W29dfHxXZmUsaVtvXSl9ZnVuY3Rpb24gam1yKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxpPUtVKHIsbik7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IG89MDtvIT09bjsrK28pci5zZXRUZXh0dXJlM0QodFtvXXx8amZlLGlbb10pfWZ1bmN0aW9uIFhtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fFhmZSxpW29dKX1mdW5jdGlvbiAkbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9S1UocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNldFRleHR1cmUyREFycmF5KHRbb118fFlmZSxpW29dKX1mdW5jdGlvbiBLbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gTG1yO2Nhc2UgMzU2NjQ6cmV0dXJuIGttcjtjYXNlIDM1NjY1OnJldHVybiBSbXI7Y2FzZSAzNTY2NjpyZXR1cm4gTm1yO2Nhc2UgMzU2NzQ6cmV0dXJuIERtcjtjYXNlIDM1Njc1OnJldHVybiBPbXI7Y2FzZSAzNTY3NjpyZXR1cm4gem1yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBGbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBCbXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBIbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBWbXI7Y2FzZSA1MTI1OnJldHVybiBVbXI7Y2FzZSAzNjI5NDpyZXR1cm4gcW1yO2Nhc2UgMzYyOTU6cmV0dXJuIEdtcjtjYXNlIDM2Mjk2OnJldHVybiBXbXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBZbXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIGptcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBYbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gJG1yfX1mdW5jdGlvbiBabXIoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmFkZHI9cix0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9SW1yKHQudHlwZSl9ZnVuY3Rpb24gJGZlKGUsdCxyKXt0aGlzLmlkPWUsdGhpcy5hZGRyPXIsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9S21yKHQudHlwZSl9JGZlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihlKXtsZXQgdD10aGlzLmNhY2hlO2UgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09ZS5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgpKSxDYSh0LGUpfTtmdW5jdGlvbiBLZmUoZSl7dGhpcy5pZD1lLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fUtmZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXRoaXMuc2VxO2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXtsZXQgYT1uW2ldO2Euc2V0VmFsdWUoZSx0W2EuaWRdLHIpfX07dmFyIHB1dD0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24gVnVlKGUsdCl7ZS5zZXEucHVzaCh0KSxlLm1hcFt0LmlkXT10fWZ1bmN0aW9uIEptcihlLHQscil7bGV0IG49ZS5uYW1lLGk9bi5sZW5ndGg7Zm9yKHB1dC5sYXN0SW5kZXg9MDs7KXtsZXQgbz1wdXQuZXhlYyhuKSxhPXB1dC5sYXN0SW5kZXgscz1vWzFdLGw9b1syXT09PSJdIixjPW9bM107aWYobCYmKHM9c3wwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZhKzI9PT1pKXtWdWUocixjPT09dm9pZCAwP25ldyBabXIocyxlLHQpOm5ldyAkZmUocyxlLHQpKTticmVha31lbHNle2xldCBoPXIubWFwW3NdO2g9PT12b2lkIDAmJihoPW5ldyBLZmUocyksVnVlKHIsaCkpLHI9aH19fWZ1bmN0aW9uIEIwKGUsdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IHI9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgbj0wO248cjsrK24pe2xldCBpPWUuZ2V0QWN0aXZlVW5pZm9ybSh0LG4pLG89ZS5nZXRVbmlmb3JtTG9jYXRpb24odCxpLm5hbWUpO0ptcihpLG8sdGhpcyl9fUIwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihlLHQscixuKXtsZXQgaT10aGlzLm1hcFt0XTtpIT09dm9pZCAwJiZpLnNldFZhbHVlKGUscixuKX07QjAucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10W3JdO24hPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUoZSxyLG4pfTtCMC51cGxvYWQ9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtpIT09bzsrK2kpe2xldCBhPXRbaV0scz1yW2EuaWRdO3MubmVlZHNVcGRhdGUhPT0hMSYmYS5zZXRWYWx1ZShlLHMudmFsdWUsbil9fTtCMC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24oZSx0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO24hPT1pOysrbil7bGV0IG89ZVtuXTtvLmlkIGluIHQmJnIucHVzaChvKX1yZXR1cm4gcn07ZnVuY3Rpb24gVXVlKGUsdCxyKXtsZXQgbj1lLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gZS5zaGFkZXJTb3VyY2UobixyKSxlLmNvbXBpbGVTaGFkZXIobiksbn12YXIgUW1yPTA7ZnVuY3Rpb24gdGdyKGUpe2xldCB0PWUuc3BsaXQoYApgKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdPXIrMSsiOiAiK3Rbcl07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGVncihlKXtzd2l0Y2goZSl7Y2FzZSBRZDpyZXR1cm5bIkxpbmVhciIsIiggdmFsdWUgKSJdO2Nhc2UgV246cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07ZGVmYXVsdDpyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOiIsZSksWyJMaW5lYXIiLCIoIHZhbHVlICkiXX19ZnVuY3Rpb24gcXVlKGUsdCxyKXtsZXQgbj1lLmdldFNoYWRlclBhcmFtZXRlcih0LDM1NzEzKSxpPWUuZ2V0U2hhZGVySW5mb0xvZyh0KS50cmltKCk7cmV0dXJuIG4mJmk9PT0iIj8iIjpyLnRvVXBwZXJDYXNlKCkrYAoKYCtpK2AKCmArdGdyKGUuZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiByZ3IoZSx0KXtsZXQgcj1lZ3IodCk7cmV0dXJuInZlYzQgIitlKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrclswXStyWzFdKyI7IH0ifWZ1bmN0aW9uIG5ncihlLHQpe2xldCByO3N3aXRjaCh0KXtjYXNlIHVmZTpyPSJMaW5lYXIiO2JyZWFrO2Nhc2UgaGZlOnI9IlJlaW5oYXJkIjticmVhaztjYXNlIGZmZTpyPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgcGZlOnI9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgZGZlOnI9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxyPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrZSsiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIityKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gaWdyKGUpe3JldHVybltlLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxlLmVudk1hcEN1YmVVVnx8ZS5idW1wTWFwfHxlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8ZS5jbGVhcmNvYXROb3JtYWxNYXB8fGUuZmxhdFNoYWRpbmd8fGUuc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKGUuZXh0ZW5zaW9uRnJhZ0RlcHRofHxlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixlLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChlLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fGUuZW52TWFwfHxlLnRyYW5zbWlzc2lvbikmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoSFApLmpvaW4oYApgKX1mdW5jdGlvbiBvZ3IoZSl7bGV0IHQ9W107Zm9yKGxldCByIGluIGUpe2xldCBuPWVbcl07biE9PSExJiZ0LnB1c2goIiNkZWZpbmUgIityKyIgIituKX1yZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gYWdyKGUsdCl7bGV0IHI9e30sbj1lLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcyMSk7Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IG89ZS5nZXRBY3RpdmVBdHRyaWIodCxpKSxhPW8ubmFtZSxzPTE7by50eXBlPT09MzU2NzQmJihzPTIpLG8udHlwZT09PTM1Njc1JiYocz0zKSxvLnR5cGU9PT0zNTY3NiYmKHM9NCksclthXT17dHlwZTpvLnR5cGUsbG9jYXRpb246ZS5nZXRBdHRyaWJMb2NhdGlvbih0LGEpLGxvY2F0aW9uU2l6ZTpzfX1yZXR1cm4gcn1mdW5jdGlvbiBIUChlKXtyZXR1cm4gZSE9PSIifWZ1bmN0aW9uIEd1ZShlLHQpe3JldHVybiBlLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBXdWUoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcy10Lm51bUNsaXBJbnRlcnNlY3Rpb24pfXZhciBzZ3I9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBKdXQoZSl7cmV0dXJuIGUucmVwbGFjZShzZ3IsbGdyKX1mdW5jdGlvbiBsZ3IoZSx0KXtsZXQgcj1oclt0XTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gSnV0KHIpfXZhciBjZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyx1Z3I9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBZdWUoZSl7cmV0dXJuIGUucmVwbGFjZSh1Z3IsWmZlKS5yZXBsYWNlKGNncixoZ3IpfWZ1bmN0aW9uIGhncihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksWmZlKGUsdCxyLG4pfWZ1bmN0aW9uIFpmZShlLHQscixuKXtsZXQgaT0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChyKTtvKyspaSs9bi5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIGl9ZnVuY3Rpb24ganVlKGUpe2xldCB0PSJwcmVjaXNpb24gIitlLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtlLnByZWNpc2lvbisiIGludDsiO3JldHVybiBlLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDplLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6ZS5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gZmdyKGUpe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIGUuc2hhZG93TWFwVHlwZT09PUNodD90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOmUuc2hhZG93TWFwVHlwZT09PVVoZT90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6ZS5zaGFkb3dNYXBUeXBlPT09RjMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIHBncihlKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYoZS5lbnZNYXApc3dpdGNoKGUuZW52TWFwTW9kZSl7Y2FzZSBueDpjYXNlIGl4OnQ9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgeE06Y2FzZSB6Njp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBkZ3IoZSl7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKGUuZW52TWFwKXN3aXRjaChlLmVudk1hcE1vZGUpe2Nhc2UgaXg6Y2FzZSB6Njp0PSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBtZ3IoZSl7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihlLmVudk1hcClzd2l0Y2goZS5jb21iaW5lKXtjYXNlIE82OnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBsZmU6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSBjZmU6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZ2dyKGUsdCxyLG4pe2xldCBpPWUuZ2V0Q29udGV4dCgpLG89ci5kZWZpbmVzLGE9ci52ZXJ0ZXhTaGFkZXIscz1yLmZyYWdtZW50U2hhZGVyLGw9ZmdyKHIpLGM9cGdyKHIpLHU9ZGdyKHIpLGg9bWdyKHIpLGY9ci5pc1dlYkdMMj8iIjppZ3IocikscD1vZ3IobyksZD1pLmNyZWF0ZVByb2dyYW0oKSxnLF8seT1yLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK3IuZ2xzbFZlcnNpb24rYApgOiIiO3IuaXNSYXdTaGFkZXJNYXRlcmlhbD8oZz1bcF0uZmlsdGVyKEhQKS5qb2luKGAKYCksZy5sZW5ndGg+MCYmKGcrPWAKYCksXz1bZixwXS5maWx0ZXIoSFApLmpvaW4oYApgKSxfLmxlbmd0aD4wJiYoXys9YApgKSk6KGc9W2p1ZShyKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK3Iuc2hhZGVyTmFtZSxwLHIuaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLHIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIE1BWF9CT05FUyAiK3IubWF4Qm9uZXMsci51c2VGb2cmJnIuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHIudXNlRm9nJiZyLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHIubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsci5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLHIuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixyLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHIubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsci5ub3JtYWxNYXAmJnIudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLHIuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLHIuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixyLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsci5kaXNwbGFjZW1lbnRNYXAmJnIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixyLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsci5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLHIuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsci5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsci5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsci5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLHIudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsci52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixyLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHIudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixyLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixyLm1vcnBoTm9ybWFscyYmci5mbGF0U2hhZGluZz09PSExPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLHIubW9ycGhUYXJnZXRzJiZyLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cyYmci5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfQ09VTlQgIityLm1vcnBoVGFyZ2V0c0NvdW50OiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnIucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCIJYXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiCWF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIglhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKSIsIglhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIglhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWYgKCBkZWZpbmVkKCBVU0VfTU9SUEhUQVJHRVRTICkgJiYgISBkZWZpbmVkKCBNT1JQSFRBUkdFVFNfVEVYVFVSRSApICkiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIgkjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIgkjZWxzZSIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ1OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIgkjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCIJYXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLGAKYF0uZmlsdGVyKEhQKS5qb2luKGAKYCksXz1bZixqdWUociksIiNkZWZpbmUgU0hBREVSX05BTUUgIityLnNoYWRlck5hbWUscCxyLnVzZUZvZyYmci5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsci51c2VGb2cmJnIuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsci5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsci5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmVudk1hcD8iI2RlZmluZSAiK2g6IiIsci5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHIuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixyLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsci5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixyLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixyLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixyLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixyLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsci5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLHIuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixyLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsci5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixyLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixyLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixyLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsci5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsci5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixyLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixyLnZlcnRleENvbG9yc3x8ci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixyLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLHIudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsci51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsci5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixyLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmci5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoci5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxyLmVudk1hcCkmJnIucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixyLnRvbmVNYXBwaW5nIT09S2Q/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixyLnRvbmVNYXBwaW5nIT09S2Q/aHIudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixyLnRvbmVNYXBwaW5nIT09S2Q/bmdyKCJ0b25lTWFwcGluZyIsci50b25lTWFwcGluZyk6IiIsci5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixyLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixoci5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCxyZ3IoImxpbmVhclRvT3V0cHV0VGV4ZWwiLHIub3V0cHV0RW5jb2RpbmcpLHIuZGVwdGhQYWNraW5nPyIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIityLmRlcHRoUGFja2luZzoiIixgCmBdLmZpbHRlcihIUCkuam9pbihgCmApKSxhPUp1dChhKSxhPUd1ZShhLHIpLGE9V3VlKGEscikscz1KdXQocykscz1HdWUocyxyKSxzPVd1ZShzLHIpLGE9WXVlKGEpLHM9WXVlKHMpLHIuaXNXZWJHTDImJnIuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYoeT1gI3ZlcnNpb24gMzAwIGVzCmAsZz1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK2csXz1bIiNkZWZpbmUgdmFyeWluZyBpbiIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbihgCmApK2AKYCtfKTtsZXQgeD15K2crYSxiPXkrXytzLFM9VXVlKGksMzU2MzMseCksQz1VdWUoaSwzNTYzMixiKTtpZihpLmF0dGFjaFNoYWRlcihkLFMpLGkuYXR0YWNoU2hhZGVyKGQsQyksci5pbmRleDBBdHRyaWJ1dGVOYW1lIT09dm9pZCAwP2kuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCxyLmluZGV4MEF0dHJpYnV0ZU5hbWUpOnIubW9ycGhUYXJnZXRzPT09ITAmJmkuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCwicG9zaXRpb24iKSxpLmxpbmtQcm9ncmFtKGQpLGUuZGVidWcuY2hlY2tTaGFkZXJFcnJvcnMpe2xldCBPPWkuZ2V0UHJvZ3JhbUluZm9Mb2coZCkudHJpbSgpLEQ9aS5nZXRTaGFkZXJJbmZvTG9nKFMpLnRyaW0oKSxCPWkuZ2V0U2hhZGVySW5mb0xvZyhDKS50cmltKCksST0hMCxMPSEwO2lmKGkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihkLDM1NzE0KT09PSExKXtJPSExO2xldCBSPXF1ZShpLFMsInZlcnRleCIpLEY9cXVlKGksQywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IFNoYWRlciBFcnJvciAiK2kuZ2V0RXJyb3IoKSsiIC0gVkFMSURBVEVfU1RBVFVTICIraS5nZXRQcm9ncmFtUGFyYW1ldGVyKGQsMzU3MTUpK2AKClByb2dyYW0gSW5mbyBMb2c6IGArTytgCmArUitgCmArRil9ZWxzZSBPIT09IiI/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6IixPKTooRD09PSIifHxCPT09IiIpJiYoTD0hMSk7TCYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOkkscHJvZ3JhbUxvZzpPLHZlcnRleFNoYWRlcjp7bG9nOkQscHJlZml4Omd9LGZyYWdtZW50U2hhZGVyOntsb2c6QixwcmVmaXg6X319KX1pLmRlbGV0ZVNoYWRlcihTKSxpLmRlbGV0ZVNoYWRlcihDKTtsZXQgUDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIFA9PT12b2lkIDAmJihQPW5ldyBCMChpLGQpKSxQfTtsZXQgaztyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGs9PT12b2lkIDAmJihrPWFncihpLGQpKSxrfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtuLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksaS5kZWxldGVQcm9ncmFtKGQpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1yLnNoYWRlck5hbWUsdGhpcy5pZD1RbXIrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09ZCx0aGlzLnZlcnRleFNoYWRlcj1TLHRoaXMuZnJhZ21lbnRTaGFkZXI9Qyx0aGlzfXZhciBfZ3I9MCxRdXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYWRlckNhY2hlPW5ldyBNYXAsdGhpcy5tYXRlcmlhbENhY2hlPW5ldyBNYXB9dXBkYXRlKHQpe2xldCByPXQudmVydGV4U2hhZGVyLG49dC5mcmFnbWVudFNoYWRlcixpPXRoaXMuX2dldFNoYWRlclN0YWdlKHIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UobiksYT10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiBhLmhhcyhpKT09PSExJiYoYS5hZGQoaSksaS51c2VkVGltZXMrKyksYS5oYXMobyk9PT0hMSYmKGEuYWRkKG8pLG8udXNlZFRpbWVzKyspLHRoaXN9cmVtb3ZlKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZS5nZXQodCk7Zm9yKGxldCBuIG9mIHIpbi51c2VkVGltZXMtLSxuLnVzZWRUaW1lcz09PTAmJnRoaXMuc2hhZGVyQ2FjaGUuZGVsZXRlKG4pO3JldHVybiB0aGlzLm1hdGVyaWFsQ2FjaGUuZGVsZXRlKHQpLHRoaXN9Z2V0VmVydGV4U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQudmVydGV4U2hhZGVyKS5pZH1nZXRGcmFnbWVudFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LmZyYWdtZW50U2hhZGVyKS5pZH1kaXNwb3NlKCl7dGhpcy5zaGFkZXJDYWNoZS5jbGVhcigpLHRoaXMubWF0ZXJpYWxDYWNoZS5jbGVhcigpfV9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZTtyZXR1cm4gci5oYXModCk9PT0hMSYmci5zZXQodCxuZXcgU2V0KSxyLmdldCh0KX1fZ2V0U2hhZGVyU3RhZ2UodCl7bGV0IHI9dGhpcy5zaGFkZXJDYWNoZTtpZihyLmhhcyh0KT09PSExKXtsZXQgbj1uZXcgdGh0O3Iuc2V0KHQsbil9cmV0dXJuIHIuZ2V0KHQpfX0sdGh0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1fZ3IrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZnVuY3Rpb24geWdyKGUsdCxyLG4saSxvLGEpe2xldCBzPW5ldyBYMyxsPW5ldyBRdXQsYz1bXSx1PWkuaXNXZWJHTDIsaD1pLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1pLmZsb2F0VmVydGV4VGV4dHVyZXMscD1pLm1heFZlcnRleFVuaWZvcm1zLGQ9aS52ZXJ0ZXhUZXh0dXJlcyxnPWkucHJlY2lzaW9uLF89e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiB5KEkpe2xldCBSPUkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigocC0yMCkvNCksVT1NYXRoLm1pbih6LFIubGVuZ3RoKTtyZXR1cm4gVTxSLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitSLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK1UrIi4iKSwwKTpVfX1mdW5jdGlvbiB4KEksTCxSLEYseil7bGV0IFU9Ri5mb2csVz1JLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFo9KEkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9yOnQpLmdldChJLmVudk1hcHx8VykscnQ9X1tJLnR5cGVdLG90PXouaXNTa2lubmVkTWVzaD95KHopOjA7SS5wcmVjaXNpb24hPT1udWxsJiYoZz1pLmdldE1heFByZWNpc2lvbihJLnByZWNpc2lvbiksZyE9PUkucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsSS5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixnLCJpbnN0ZWFkLiIpKTtsZXQgc3QsU3QsYnQsTXQ7aWYocnQpe2xldCBYPWFoW3J0XTtzdD1YLnZlcnRleFNoYWRlcixTdD1YLmZyYWdtZW50U2hhZGVyfWVsc2Ugc3Q9SS52ZXJ0ZXhTaGFkZXIsU3Q9SS5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShJKSxidD1sLmdldFZlcnRleFNoYWRlcklEKEkpLE10PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChJKTtsZXQgbHQ9ZS5nZXRSZW5kZXJUYXJnZXQoKSxLdD1JLmFscGhhVGVzdD4wLF90PUkuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6cnQsc2hhZGVyTmFtZTpJLnR5cGUsdmVydGV4U2hhZGVyOnN0LGZyYWdtZW50U2hhZGVyOlN0LGRlZmluZXM6SS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmJ0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6TXQsaXNSYXdTaGFkZXJNYXRlcmlhbDpJLmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjpJLmdsc2xWZXJzaW9uLHByZWNpc2lvbjpnLGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmQsb3V0cHV0RW5jb2Rpbmc6bHQ9PT1udWxsP2Uub3V0cHV0RW5jb2Rpbmc6bHQuaXNYUlJlbmRlclRhcmdldD09PSEwP2x0LnRleHR1cmUuZW5jb2Rpbmc6UWQsbWFwOiEhSS5tYXAsbWF0Y2FwOiEhSS5tYXRjYXAsZW52TWFwOiEhWixlbnZNYXBNb2RlOlomJloubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFaJiYoWi5tYXBwaW5nPT09eE18fFoubWFwcGluZz09PXo2KSxsaWdodE1hcDohIUkubGlnaHRNYXAsYW9NYXA6ISFJLmFvTWFwLGVtaXNzaXZlTWFwOiEhSS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhSS5idW1wTWFwLG5vcm1hbE1hcDohIUkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOkkubm9ybWFsTWFwVHlwZT09PURmZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6SS5ub3JtYWxNYXBUeXBlPT09YXgsZGVjb2RlVmlkZW9UZXh0dXJlOiEhSS5tYXAmJkkubWFwLmlzVmlkZW9UZXh0dXJlPT09ITAmJkkubWFwLmVuY29kaW5nPT09V24sY2xlYXJjb2F0Ol90LGNsZWFyY29hdE1hcDpfdCYmISFJLmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6X3QmJiEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOl90JiYhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIUkuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIUkucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIUkubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhSS5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIUkuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIUkuYWxwaGFNYXAsYWxwaGFUZXN0Okt0LGFscGhhV3JpdGU6SS5hbHBoYVdyaXRlfHxJLnRyYW5zcGFyZW50LGdyYWRpZW50TWFwOiEhSS5ncmFkaWVudE1hcCxzaGVlbjpJLnNoZWVuPjAsc2hlZW5Db2xvck1hcDohIUkuc2hlZW5Db2xvck1hcCxzaGVlblJvdWdobmVzc01hcDohIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdHJhbnNtaXNzaW9uOkkudHJhbnNtaXNzaW9uPjAsdHJhbnNtaXNzaW9uTWFwOiEhSS50cmFuc21pc3Npb25NYXAsdGhpY2tuZXNzTWFwOiEhSS50aGlja25lc3NNYXAsY29tYmluZTpJLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6ISFJLm5vcm1hbE1hcCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczpJLnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6SS52ZXJ0ZXhDb2xvcnM9PT0hMCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx2ZXJ0ZXhVdnM6ISFJLm1hcHx8ISFJLmJ1bXBNYXB8fCEhSS5ub3JtYWxNYXB8fCEhSS5zcGVjdWxhck1hcHx8ISFJLmFscGhhTWFwfHwhIUkuZW1pc3NpdmVNYXB8fCEhSS5yb3VnaG5lc3NNYXB8fCEhSS5tZXRhbG5lc3NNYXB8fCEhSS5jbGVhcmNvYXRNYXB8fCEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXB8fCEhSS5jbGVhcmNvYXROb3JtYWxNYXB8fCEhSS5kaXNwbGFjZW1lbnRNYXB8fCEhSS50cmFuc21pc3Npb25NYXB8fCEhSS50aGlja25lc3NNYXB8fCEhSS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISFJLnNwZWN1bGFyQ29sb3JNYXB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdXZzVmVydGV4T25seTohKCEhSS5tYXB8fCEhSS5idW1wTWFwfHwhIUkubm9ybWFsTWFwfHwhIUkuc3BlY3VsYXJNYXB8fCEhSS5hbHBoYU1hcHx8ISFJLmVtaXNzaXZlTWFwfHwhIUkucm91Z2huZXNzTWFwfHwhIUkubWV0YWxuZXNzTWFwfHwhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwfHxJLnRyYW5zbWlzc2lvbj4wfHwhIUkudHJhbnNtaXNzaW9uTWFwfHwhIUkudGhpY2tuZXNzTWFwfHwhIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEhSS5zcGVjdWxhckNvbG9yTWFwfHxJLnNoZWVuPjB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXApJiYhIUkuZGlzcGxhY2VtZW50TWFwLGZvZzohIVUsdXNlRm9nOkkuZm9nLGZvZ0V4cDI6VSYmVS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISFJLmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjpJLnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmgsc2tpbm5pbmc6ei5pc1NraW5uZWRNZXNoPT09ITAmJm90PjAsbWF4Qm9uZXM6b3QsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpMLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpMLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOkwuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6TC5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpMLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpMLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpMLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOkwuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6YS5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjphLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6SS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDplLnNoYWRvd01hcC5lbmFibGVkJiZSLmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6ZS5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzpJLnRvbmVNYXBwZWQ/ZS50b25lTWFwcGluZzpLZCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czplLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTpJLnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDpJLnNpZGU9PT1MMSxmbGlwU2lkZWQ6SS5zaWRlPT09SWksZGVwdGhQYWNraW5nOkkuZGVwdGhQYWNraW5nIT09dm9pZCAwP0kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6SS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fG4uaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8bi5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxuLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpJLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKEkpe2xldCBMPVtdO2lmKEkuc2hhZGVySUQ/TC5wdXNoKEkuc2hhZGVySUQpOihMLnB1c2goSS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksTC5wdXNoKEkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLEkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IFIgaW4gSS5kZWZpbmVzKUwucHVzaChSKSxMLnB1c2goSS5kZWZpbmVzW1JdKTtyZXR1cm4gSS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihTKEwsSSksQyhMLEkpLEwucHVzaChlLm91dHB1dEVuY29kaW5nKSksTC5wdXNoKEkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxMLmpvaW4oKX1mdW5jdGlvbiBTKEksTCl7SS5wdXNoKEwucHJlY2lzaW9uKSxJLnB1c2goTC5vdXRwdXRFbmNvZGluZyksSS5wdXNoKEwuZW52TWFwTW9kZSksSS5wdXNoKEwuY29tYmluZSksSS5wdXNoKEwudmVydGV4VXZzKSxJLnB1c2goTC5mb2dFeHAyKSxJLnB1c2goTC5zaXplQXR0ZW51YXRpb24pLEkucHVzaChMLm1heEJvbmVzKSxJLnB1c2goTC5tb3JwaFRhcmdldHNDb3VudCksSS5wdXNoKEwubnVtRGlyTGlnaHRzKSxJLnB1c2goTC5udW1Qb2ludExpZ2h0cyksSS5wdXNoKEwubnVtU3BvdExpZ2h0cyksSS5wdXNoKEwubnVtSGVtaUxpZ2h0cyksSS5wdXNoKEwubnVtUmVjdEFyZWFMaWdodHMpLEkucHVzaChMLm51bURpckxpZ2h0U2hhZG93cyksSS5wdXNoKEwubnVtUG9pbnRMaWdodFNoYWRvd3MpLEkucHVzaChMLm51bVNwb3RMaWdodFNoYWRvd3MpLEkucHVzaChMLnNoYWRvd01hcFR5cGUpLEkucHVzaChMLnRvbmVNYXBwaW5nKSxJLnB1c2goTC5udW1DbGlwcGluZ1BsYW5lcyksSS5wdXNoKEwubnVtQ2xpcEludGVyc2VjdGlvbiksSS5wdXNoKEwuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gQyhJLEwpe3MuZGlzYWJsZUFsbCgpLEwuaXNXZWJHTDImJnMuZW5hYmxlKDApLEwuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmcy5lbmFibGUoMSksTC5pbnN0YW5jaW5nJiZzLmVuYWJsZSgyKSxMLmluc3RhbmNpbmdDb2xvciYmcy5lbmFibGUoMyksTC5tYXAmJnMuZW5hYmxlKDQpLEwubWF0Y2FwJiZzLmVuYWJsZSg1KSxMLmVudk1hcCYmcy5lbmFibGUoNiksTC5lbnZNYXBDdWJlVVYmJnMuZW5hYmxlKDcpLEwubGlnaHRNYXAmJnMuZW5hYmxlKDgpLEwuYW9NYXAmJnMuZW5hYmxlKDkpLEwuZW1pc3NpdmVNYXAmJnMuZW5hYmxlKDEwKSxMLmJ1bXBNYXAmJnMuZW5hYmxlKDExKSxMLm5vcm1hbE1hcCYmcy5lbmFibGUoMTIpLEwub2JqZWN0U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDEzKSxMLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmcy5lbmFibGUoMTQpLEwuY2xlYXJjb2F0JiZzLmVuYWJsZSgxNSksTC5jbGVhcmNvYXRNYXAmJnMuZW5hYmxlKDE2KSxMLmNsZWFyY29hdFJvdWdobmVzc01hcCYmcy5lbmFibGUoMTcpLEwuY2xlYXJjb2F0Tm9ybWFsTWFwJiZzLmVuYWJsZSgxOCksTC5kaXNwbGFjZW1lbnRNYXAmJnMuZW5hYmxlKDE5KSxMLnNwZWN1bGFyTWFwJiZzLmVuYWJsZSgyMCksTC5yb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxMLm1ldGFsbmVzc01hcCYmcy5lbmFibGUoMjIpLEwuZ3JhZGllbnRNYXAmJnMuZW5hYmxlKDIzKSxMLmFscGhhTWFwJiZzLmVuYWJsZSgyNCksTC5hbHBoYVRlc3QmJnMuZW5hYmxlKDI1KSxMLnZlcnRleENvbG9ycyYmcy5lbmFibGUoMjYpLEwudmVydGV4QWxwaGFzJiZzLmVuYWJsZSgyNyksTC52ZXJ0ZXhVdnMmJnMuZW5hYmxlKDI4KSxMLnZlcnRleFRhbmdlbnRzJiZzLmVuYWJsZSgyOSksTC51dnNWZXJ0ZXhPbmx5JiZzLmVuYWJsZSgzMCksTC5mb2cmJnMuZW5hYmxlKDMxKSxJLnB1c2gocy5tYXNrKSxzLmRpc2FibGVBbGwoKSxMLnVzZUZvZyYmcy5lbmFibGUoMCksTC5mbGF0U2hhZGluZyYmcy5lbmFibGUoMSksTC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZzLmVuYWJsZSgyKSxMLnNraW5uaW5nJiZzLmVuYWJsZSgzKSxMLnVzZVZlcnRleFRleHR1cmUmJnMuZW5hYmxlKDQpLEwubW9ycGhUYXJnZXRzJiZzLmVuYWJsZSg1KSxMLm1vcnBoTm9ybWFscyYmcy5lbmFibGUoNiksTC5wcmVtdWx0aXBsaWVkQWxwaGEmJnMuZW5hYmxlKDcpLEwuc2hhZG93TWFwRW5hYmxlZCYmcy5lbmFibGUoOCksTC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmcy5lbmFibGUoOSksTC5kb3VibGVTaWRlZCYmcy5lbmFibGUoMTApLEwuZmxpcFNpZGVkJiZzLmVuYWJsZSgxMSksTC5kZXB0aFBhY2tpbmcmJnMuZW5hYmxlKDEyKSxMLmRpdGhlcmluZyYmcy5lbmFibGUoMTMpLEwuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnMuZW5hYmxlKDE0KSxMLnNwZWN1bGFyQ29sb3JNYXAmJnMuZW5hYmxlKDE1KSxMLnRyYW5zbWlzc2lvbiYmcy5lbmFibGUoMTYpLEwudHJhbnNtaXNzaW9uTWFwJiZzLmVuYWJsZSgxNyksTC50aGlja25lc3NNYXAmJnMuZW5hYmxlKDE4KSxMLnNoZWVuJiZzLmVuYWJsZSgxOSksTC5zaGVlbkNvbG9yTWFwJiZzLmVuYWJsZSgyMCksTC5zaGVlblJvdWdobmVzc01hcCYmcy5lbmFibGUoMjEpLEwuZGVjb2RlVmlkZW9UZXh0dXJlJiZzLmVuYWJsZSgyMiksSS5wdXNoKHMubWFzayl9ZnVuY3Rpb24gUChJKXtsZXQgTD1fW0kudHlwZV0sUjtpZihMKXtsZXQgRj1haFtMXTtSPVZmZS5jbG9uZShGLnVuaWZvcm1zKX1lbHNlIFI9SS51bmlmb3JtcztyZXR1cm4gUn1mdW5jdGlvbiBrKEksTCl7bGV0IFI7Zm9yKGxldCBGPTAsej1jLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1jW0ZdO2lmKFUuY2FjaGVLZXk9PT1MKXtSPVUsKytSLnVzZWRUaW1lczticmVha319cmV0dXJuIFI9PT12b2lkIDAmJihSPW5ldyBnZ3IoZSxMLEksbyksYy5wdXNoKFIpKSxSfWZ1bmN0aW9uIE8oSSl7aWYoLS1JLnVzZWRUaW1lcz09PTApe2xldCBMPWMuaW5kZXhPZihJKTtjW0xdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxJLmRlc3Ryb3koKX19ZnVuY3Rpb24gRChJKXtsLnJlbW92ZShJKX1mdW5jdGlvbiBCKCl7bC5kaXNwb3NlKCl9cmV0dXJue2dldFBhcmFtZXRlcnM6eCxnZXRQcm9ncmFtQ2FjaGVLZXk6YixnZXRVbmlmb3JtczpQLGFjcXVpcmVQcm9ncmFtOmsscmVsZWFzZVByb2dyYW06TyxyZWxlYXNlU2hhZGVyQ2FjaGU6RCxwcm9ncmFtczpjLGRpc3Bvc2U6Qn19ZnVuY3Rpb24gdmdyKCl7bGV0IGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdChvKXtsZXQgYT1lLmdldChvKTtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30sZS5zZXQobyxhKSksYX1mdW5jdGlvbiByKG8pe2UuZGVsZXRlKG8pfWZ1bmN0aW9uIG4obyxhLHMpe2UuZ2V0KG8pW2FdPXN9ZnVuY3Rpb24gaSgpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LHJlbW92ZTpyLHVwZGF0ZTpuLGRpc3Bvc2U6aX19ZnVuY3Rpb24geGdyKGUsdCl7cmV0dXJuIGUuZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9lLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOmUucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP2UucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjplLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9lLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6ZS56IT09dC56P2Uuei10Lno6ZS5pZC10LmlkfWZ1bmN0aW9uIFh1ZShlLHQpe3JldHVybiBlLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/ZS5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjplLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6ZS56IT09dC56P3Quei1lLno6ZS5pZC10LmlkfWZ1bmN0aW9uICR1ZSgpe2xldCBlPVtdLHQ9MCxyPVtdLG49W10saT1bXTtmdW5jdGlvbiBvKCl7dD0wLHIubGVuZ3RoPTAsbi5sZW5ndGg9MCxpLmxlbmd0aD0wfWZ1bmN0aW9uIGEoaCxmLHAsZCxnLF8pe2xldCB5PWVbdF07cmV0dXJuIHk9PT12b2lkIDA/KHk9e2lkOmguaWQsb2JqZWN0OmgsZ2VvbWV0cnk6ZixtYXRlcmlhbDpwLGdyb3VwT3JkZXI6ZCxyZW5kZXJPcmRlcjpoLnJlbmRlck9yZGVyLHo6Zyxncm91cDpffSxlW3RdPXkpOih5LmlkPWguaWQseS5vYmplY3Q9aCx5Lmdlb21ldHJ5PWYseS5tYXRlcmlhbD1wLHkuZ3JvdXBPcmRlcj1kLHkucmVuZGVyT3JkZXI9aC5yZW5kZXJPcmRlcix5Lno9Zyx5Lmdyb3VwPV8pLHQrKyx5fWZ1bmN0aW9uIHMoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi5wdXNoKHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnB1c2goeSk6ci5wdXNoKHkpfWZ1bmN0aW9uIGwoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi51bnNoaWZ0KHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnVuc2hpZnQoeSk6ci51bnNoaWZ0KHkpfWZ1bmN0aW9uIGMoaCxmKXtyLmxlbmd0aD4xJiZyLnNvcnQoaHx8eGdyKSxuLmxlbmd0aD4xJiZuLnNvcnQoZnx8WHVlKSxpLmxlbmd0aD4xJiZpLnNvcnQoZnx8WHVlKX1mdW5jdGlvbiB1KCl7Zm9yKGxldCBoPXQsZj1lLmxlbmd0aDtoPGY7aCsrKXtsZXQgcD1lW2hdO2lmKHAuaWQ9PT1udWxsKWJyZWFrO3AuaWQ9bnVsbCxwLm9iamVjdD1udWxsLHAuZ2VvbWV0cnk9bnVsbCxwLm1hdGVyaWFsPW51bGwscC5ncm91cD1udWxsfX1yZXR1cm57b3BhcXVlOnIsdHJhbnNtaXNzaXZlOm4sdHJhbnNwYXJlbnQ6aSxpbml0Om8scHVzaDpzLHVuc2hpZnQ6bCxmaW5pc2g6dSxzb3J0OmN9fWZ1bmN0aW9uIGJncigpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQobixpKXtsZXQgbztyZXR1cm4gZS5oYXMobik9PT0hMT8obz1uZXcgJHVlLGUuc2V0KG4sW29dKSk6aT49ZS5nZXQobikubGVuZ3RoPyhvPW5ldyAkdWUsZS5nZXQobikucHVzaChvKSk6bz1lLmdldChuKVtpXSxvfWZ1bmN0aW9uIHIoKXtlPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxkaXNwb3NlOnJ9fWZ1bmN0aW9uIHdncigpe2xldCBlPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoZVt0LmlkXSE9PXZvaWQgMClyZXR1cm4gZVt0LmlkXTtsZXQgcjtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOnI9e2RpcmVjdGlvbjpuZXcgaixjb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixkaXJlY3Rpb246bmV3IGosY29sb3I6bmV3IG5lLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixjb2xvcjpuZXcgbmUsZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6cj17ZGlyZWN0aW9uOm5ldyBqLHNreUNvbG9yOm5ldyBuZSxncm91bmRDb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6cj17Y29sb3I6bmV3IG5lLHBvc2l0aW9uOm5ldyBqLGhhbGZXaWR0aDpuZXcgaixoYWxmSGVpZ2h0Om5ldyBqfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX1mdW5jdGlvbiBTZ3IoKXtsZXQgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKGVbdC5pZF0hPT12b2lkIDApcmV0dXJuIGVbdC5pZF07bGV0IHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0fTticmVhaztjYXNlIlNwb3RMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0LHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX12YXIgTWdyPTA7ZnVuY3Rpb24gRWdyKGUsdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShlLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBUZ3IoZSx0KXtsZXQgcj1uZXcgd2dyLG49U2dyKCksaT17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKWkucHJvYmUucHVzaChuZXcgaik7bGV0IG89bmV3IGosYT1uZXcgTWUscz1uZXcgTWU7ZnVuY3Rpb24gbCh1LGgpe2xldCBmPTAscD0wLGQ9MDtmb3IobGV0IEQ9MDtEPDk7RCsrKWkucHJvYmVbRF0uc2V0KDAsMCwwKTtsZXQgZz0wLF89MCx5PTAseD0wLGI9MCxTPTAsQz0wLFA9MDt1LnNvcnQoRWdyKTtsZXQgaz1oIT09ITA/TWF0aC5QSToxO2ZvcihsZXQgRD0wLEI9dS5sZW5ndGg7RDxCO0QrKyl7bGV0IEk9dVtEXSxMPUkuY29sb3IsUj1JLmludGVuc2l0eSxGPUkuZGlzdGFuY2Usej1JLnNoYWRvdyYmSS5zaGFkb3cubWFwP0kuc2hhZG93Lm1hcC50ZXh0dXJlOm51bGw7aWYoSS5pc0FtYmllbnRMaWdodClmKz1MLnIqUiprLHArPUwuZypSKmssZCs9TC5iKlIqaztlbHNlIGlmKEkuaXNMaWdodFByb2JlKWZvcihsZXQgVT0wO1U8OTtVKyspaS5wcm9iZVtVXS5hZGRTY2FsZWRWZWN0b3IoSS5zaC5jb2VmZmljaWVudHNbVV0sUik7ZWxzZSBpZihJLmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5jb2xvci5jb3B5KEkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEkuaW50ZW5zaXR5KmspLEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxpLmRpcmVjdGlvbmFsU2hhZG93W2ddPVosaS5kaXJlY3Rpb25hbFNoYWRvd01hcFtnXT16LGkuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbZ109SS5zaGFkb3cubWF0cml4LFMrK31pLmRpcmVjdGlvbmFsW2ddPVUsZysrfWVsc2UgaWYoSS5pc1Nwb3RMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSS5tYXRyaXhXb3JsZCksVS5jb2xvci5jb3B5KEwpLm11bHRpcGx5U2NhbGFyKFIqayksVS5kaXN0YW5jZT1GLFUuY29uZUNvcz1NYXRoLmNvcyhJLmFuZ2xlKSxVLnBlbnVtYnJhQ29zPU1hdGguY29zKEkuYW5nbGUqKDEtSS5wZW51bWJyYSkpLFUuZGVjYXk9SS5kZWNheSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsaS5zcG90U2hhZG93W3ldPVosaS5zcG90U2hhZG93TWFwW3ldPXosaS5zcG90U2hhZG93TWF0cml4W3ldPUkuc2hhZG93Lm1hdHJpeCxQKyt9aS5zcG90W3ldPVUseSsrfWVsc2UgaWYoSS5pc1JlY3RBcmVhTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1UuY29sb3IuY29weShMKS5tdWx0aXBseVNjYWxhcihSKSxVLmhhbGZXaWR0aC5zZXQoSS53aWR0aCouNSwwLDApLFUuaGFsZkhlaWdodC5zZXQoMCxJLmhlaWdodCouNSwwKSxpLnJlY3RBcmVhW3hdPVUseCsrfWVsc2UgaWYoSS5pc1BvaW50TGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUuY29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihJLmludGVuc2l0eSprKSxVLmRpc3RhbmNlPUkuZGlzdGFuY2UsVS5kZWNheT1JLmRlY2F5LEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxaLnNoYWRvd0NhbWVyYU5lYXI9Vy5jYW1lcmEubmVhcixaLnNoYWRvd0NhbWVyYUZhcj1XLmNhbWVyYS5mYXIsaS5wb2ludFNoYWRvd1tfXT1aLGkucG9pbnRTaGFkb3dNYXBbX109eixpLnBvaW50U2hhZG93TWF0cml4W19dPUkuc2hhZG93Lm1hdHJpeCxDKyt9aS5wb2ludFtfXT1VLF8rK31lbHNlIGlmKEkuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1Uuc2t5Q29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLFUuZ3JvdW5kQ29sb3IuY29weShJLmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLGkuaGVtaVtiXT1VLGIrK319eD4wJiYodC5pc1dlYkdMMnx8ZS5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITA/KGkucmVjdEFyZWFMVEMxPXJlLkxUQ19GTE9BVF8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19GTE9BVF8yKTplLmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSEwPyhpLnJlY3RBcmVhTFRDMT1yZS5MVENfSEFMRl8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxpLmFtYmllbnRbMF09ZixpLmFtYmllbnRbMV09cCxpLmFtYmllbnRbMl09ZDtsZXQgTz1pLmhhc2g7KE8uZGlyZWN0aW9uYWxMZW5ndGghPT1nfHxPLnBvaW50TGVuZ3RoIT09X3x8Ty5zcG90TGVuZ3RoIT09eXx8Ty5yZWN0QXJlYUxlbmd0aCE9PXh8fE8uaGVtaUxlbmd0aCE9PWJ8fE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzIT09U3x8Ty5udW1Qb2ludFNoYWRvd3MhPT1DfHxPLm51bVNwb3RTaGFkb3dzIT09UCkmJihpLmRpcmVjdGlvbmFsLmxlbmd0aD1nLGkuc3BvdC5sZW5ndGg9eSxpLnJlY3RBcmVhLmxlbmd0aD14LGkucG9pbnQubGVuZ3RoPV8saS5oZW1pLmxlbmd0aD1iLGkuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPVMsaS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9UyxpLnBvaW50U2hhZG93Lmxlbmd0aD1DLGkucG9pbnRTaGFkb3dNYXAubGVuZ3RoPUMsaS5zcG90U2hhZG93Lmxlbmd0aD1QLGkuc3BvdFNoYWRvd01hcC5sZW5ndGg9UCxpLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1TLGkucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPUMsaS5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1QLE8uZGlyZWN0aW9uYWxMZW5ndGg9ZyxPLnBvaW50TGVuZ3RoPV8sTy5zcG90TGVuZ3RoPXksTy5yZWN0QXJlYUxlbmd0aD14LE8uaGVtaUxlbmd0aD1iLE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzPVMsTy5udW1Qb2ludFNoYWRvd3M9QyxPLm51bVNwb3RTaGFkb3dzPVAsaS52ZXJzaW9uPU1ncisrKX1mdW5jdGlvbiBjKHUsaCl7bGV0IGY9MCxwPTAsZD0wLGc9MCxfPTAseT1oLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHg9MCxiPXUubGVuZ3RoO3g8Yjt4Kyspe2xldCBTPXVbeF07aWYoUy5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBDPWkuZGlyZWN0aW9uYWxbZl07Qy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMudGFyZ2V0Lm1hdHJpeFdvcmxkKSxDLmRpcmVjdGlvbi5zdWIobyksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLGYrK31lbHNlIGlmKFMuaXNTcG90TGlnaHQpe2xldCBDPWkuc3BvdFtkXTtDLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxDLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy50YXJnZXQubWF0cml4V29ybGQpLEMuZGlyZWN0aW9uLnN1YihvKSxDLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oeSksZCsrfWVsc2UgaWYoUy5pc1JlY3RBcmVhTGlnaHQpe2xldCBDPWkucmVjdEFyZWFbZ107Qy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSkscy5pZGVudGl0eSgpLGEuY29weShTLm1hdHJpeFdvcmxkKSxhLnByZW11bHRpcGx5KHkpLHMuZXh0cmFjdFJvdGF0aW9uKGEpLEMuaGFsZldpZHRoLnNldChTLndpZHRoKi41LDAsMCksQy5oYWxmSGVpZ2h0LnNldCgwLFMuaGVpZ2h0Ki41LDApLEMuaGFsZldpZHRoLmFwcGx5TWF0cml4NChzKSxDLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KHMpLGcrK31lbHNlIGlmKFMuaXNQb2ludExpZ2h0KXtsZXQgQz1pLnBvaW50W3BdO0MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHArK31lbHNlIGlmKFMuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBDPWkuaGVtaVtfXTtDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLEMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLF8rK319fXJldHVybntzZXR1cDpsLHNldHVwVmlldzpjLHN0YXRlOml9fWZ1bmN0aW9uIEt1ZShlLHQpe2xldCByPW5ldyBUZ3IoZSx0KSxuPVtdLGk9W107ZnVuY3Rpb24gbygpe24ubGVuZ3RoPTAsaS5sZW5ndGg9MH1mdW5jdGlvbiBhKGgpe24ucHVzaChoKX1mdW5jdGlvbiBzKGgpe2kucHVzaChoKX1mdW5jdGlvbiBsKGgpe3Iuc2V0dXAobixoKX1mdW5jdGlvbiBjKGgpe3Iuc2V0dXBWaWV3KG4saCl9cmV0dXJue2luaXQ6byxzdGF0ZTp7bGlnaHRzQXJyYXk6bixzaGFkb3dzQXJyYXk6aSxsaWdodHM6cn0sc2V0dXBMaWdodHM6bCxzZXR1cExpZ2h0c1ZpZXc6YyxwdXNoTGlnaHQ6YSxwdXNoU2hhZG93OnN9fWZ1bmN0aW9uIENncihlLHQpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG4obyxhPTApe2xldCBzO3JldHVybiByLmhhcyhvKT09PSExPyhzPW5ldyBLdWUoZSx0KSxyLnNldChvLFtzXSkpOmE+PXIuZ2V0KG8pLmxlbmd0aD8ocz1uZXcgS3VlKGUsdCksci5nZXQobykucHVzaChzKSk6cz1yLmdldChvKVthXSxzfWZ1bmN0aW9uIGkoKXtyPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6bixkaXNwb3NlOml9fXZhciBlTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9UmZlLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpc319O2VNLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO3ZhciByTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgaix0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KHQucmVmZXJlbmNlUG9zaXRpb24pLHRoaXMubmVhckRpc3RhbmNlPXQubmVhckRpc3RhbmNlLHRoaXMuZmFyRGlzdGFuY2U9dC5mYXJEaXN0YW5jZSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc319O3JNLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBBZ3I9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxQZ3I9YHVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzOwp1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CiNpbmNsdWRlIDxwYWNraW5nPgp2b2lkIG1haW4oKSB7Cgljb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7CglmbG9hdCBtZWFuID0gMC4wOwoJZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wOwoJZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApOwoJZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7Cglmb3IgKCBmbG9hdCBpID0gMC4wOyBpIDwgc2FtcGxlczsgaSArKyApIHsKCQlmbG9hdCB1dk9mZnNldCA9IHV2U3RhcnQgKyBpICogdXZTdHJpZGU7CgkJI2lmZGVmIEhPUklaT05UQUxfUEFTUwoJCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGlzdHJpYnV0aW9uLng7CgkJCXNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDsKCQkjZWxzZQoJCQlmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGVwdGg7CgkJCXNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoOwoJCSNlbmRpZgoJfQoJbWVhbiA9IG1lYW4gLyBzYW1wbGVzOwoJc3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuIC8gc2FtcGxlczsKCWZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApOwoJZ2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTsKfWA7ZnVuY3Rpb24gSmZlKGUsdCxyKXtsZXQgbj1uZXcgTjEsaT1uZXcgTHQsbz1uZXcgTHQsYT1uZXcgZW4scz1uZXcgZU0oe2RlcHRoUGFja2luZzpOZmV9KSxsPW5ldyByTSxjPXt9LHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXswOklpLDE6STEsMjpMMX0sZj1uZXcgbGgoe2RlZmluZXM6e1ZTTV9TQU1QTEVTOjh9LHVuaWZvcm1zOntzaGFkb3dfcGFzczp7dmFsdWU6bnVsbH0scmVzb2x1dGlvbjp7dmFsdWU6bmV3IEx0fSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6QWdyLGZyYWdtZW50U2hhZGVyOlBncn0pLHA9Zi5jbG9uZSgpO3AuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtsZXQgZD1uZXcgUGU7ZC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2xldCBnPW5ldyB0aShkLGYpLF89dGhpczt0aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPUNodCx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEMsUCl7aWYoXy5lbmFibGVkPT09ITF8fF8uYXV0b1VwZGF0ZT09PSExJiZfLm5lZWRzVXBkYXRlPT09ITF8fFMubGVuZ3RoPT09MClyZXR1cm47bGV0IGs9ZS5nZXRSZW5kZXJUYXJnZXQoKSxPPWUuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxEPWUuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxCPWUuc3RhdGU7Qi5zZXRCbGVuZGluZygkZCksQi5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLEIuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxCLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IEk9MCxMPVMubGVuZ3RoO0k8TDtJKyspe2xldCBSPVNbSV0sRj1SLnNoYWRvdztpZihGPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsUiwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZihGLmF1dG9VcGRhdGU9PT0hMSYmRi5uZWVkc1VwZGF0ZT09PSExKWNvbnRpbnVlO2kuY29weShGLm1hcFNpemUpO2xldCB6PUYuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoaS5tdWx0aXBseSh6KSxvLmNvcHkoRi5tYXBTaXplKSwoaS54PnV8fGkueT51KSYmKGkueD51JiYoby54PU1hdGguZmxvb3IodS96LngpLGkueD1vLngqei54LEYubWFwU2l6ZS54PW8ueCksaS55PnUmJihvLnk9TWF0aC5mbG9vcih1L3oueSksaS55PW8ueSp6LnksRi5tYXBTaXplLnk9by55KSksRi5tYXA9PT1udWxsJiYhRi5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PUYzKXtsZXQgVz17bWluRmlsdGVyOmlpLG1hZ0ZpbHRlcjppaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYubWFwUGFzcz1uZXcgdXMoaS54LGkueSxXKSxGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9aWYoRi5tYXA9PT1udWxsKXtsZXQgVz17bWluRmlsdGVyOkxpLG1hZ0ZpbHRlcjpMaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1lLnNldFJlbmRlclRhcmdldChGLm1hcCksZS5jbGVhcigpO2xldCBVPUYuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgVz0wO1c8VTtXKyspe2xldCBaPUYuZ2V0Vmlld3BvcnQoVyk7YS5zZXQoby54KloueCxvLnkqWi55LG8ueCpaLnosby55KloudyksQi52aWV3cG9ydChhKSxGLnVwZGF0ZU1hdHJpY2VzKFIsVyksbj1GLmdldEZydXN0dW0oKSxiKEMsUCxGLmNhbWVyYSxSLHRoaXMudHlwZSl9IUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1GMyYmeShGLFApLEYubmVlZHNVcGRhdGU9ITF9Xy5uZWVkc1VwZGF0ZT0hMSxlLnNldFJlbmRlclRhcmdldChrLE8sRCl9O2Z1bmN0aW9uIHkoUyxDKXtsZXQgUD10LnVwZGF0ZShnKTtmLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1TLmJsdXJTYW1wbGVzJiYoZi5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMscC5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMsZi5uZWVkc1VwZGF0ZT0hMCxwLm5lZWRzVXBkYXRlPSEwKSxmLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPVMubWFwLnRleHR1cmUsZi51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPVMubWFwU2l6ZSxmLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1TLnJhZGl1cyxlLnNldFJlbmRlclRhcmdldChTLm1hcFBhc3MpLGUuY2xlYXIoKSxlLnJlbmRlckJ1ZmZlckRpcmVjdChDLG51bGwsUCxmLGcsbnVsbCkscC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1TLm1hcFBhc3MudGV4dHVyZSxwLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Uy5tYXBTaXplLHAudW5pZm9ybXMucmFkaXVzLnZhbHVlPVMucmFkaXVzLGUuc2V0UmVuZGVyVGFyZ2V0KFMubWFwKSxlLmNsZWFyKCksZS5yZW5kZXJCdWZmZXJEaXJlY3QoQyxudWxsLFAscCxnLG51bGwpfWZ1bmN0aW9uIHgoUyxDLFAsayxPLEQsQil7bGV0IEk9bnVsbCxMPWsuaXNQb2ludExpZ2h0PT09ITA/Uy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOlMuY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihMIT09dm9pZCAwP0k9TDpJPWsuaXNQb2ludExpZ2h0PT09ITA/bDpzLGUubG9jYWxDbGlwcGluZ0VuYWJsZWQmJlAuY2xpcFNoYWRvd3M9PT0hMCYmUC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxQLmRpc3BsYWNlbWVudE1hcCYmUC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fFAuYWxwaGFNYXAmJlAuYWxwaGFUZXN0PjApe2xldCBSPUkudXVpZCxGPVAudXVpZCx6PWNbUl07ej09PXZvaWQgMCYmKHo9e30sY1tSXT16KTtsZXQgVT16W0ZdO1U9PT12b2lkIDAmJihVPUkuY2xvbmUoKSx6W0ZdPVUpLEk9VX1yZXR1cm4gSS52aXNpYmxlPVAudmlzaWJsZSxJLndpcmVmcmFtZT1QLndpcmVmcmFtZSxCPT09RjM/SS5zaWRlPVAuc2hhZG93U2lkZSE9PW51bGw/UC5zaGFkb3dTaWRlOlAuc2lkZTpJLnNpZGU9UC5zaGFkb3dTaWRlIT09bnVsbD9QLnNoYWRvd1NpZGU6aFtQLnNpZGVdLEkuYWxwaGFNYXA9UC5hbHBoYU1hcCxJLmFscGhhVGVzdD1QLmFscGhhVGVzdCxJLmNsaXBTaGFkb3dzPVAuY2xpcFNoYWRvd3MsSS5jbGlwcGluZ1BsYW5lcz1QLmNsaXBwaW5nUGxhbmVzLEkuY2xpcEludGVyc2VjdGlvbj1QLmNsaXBJbnRlcnNlY3Rpb24sSS5kaXNwbGFjZW1lbnRNYXA9UC5kaXNwbGFjZW1lbnRNYXAsSS5kaXNwbGFjZW1lbnRTY2FsZT1QLmRpc3BsYWNlbWVudFNjYWxlLEkuZGlzcGxhY2VtZW50Qmlhcz1QLmRpc3BsYWNlbWVudEJpYXMsSS53aXJlZnJhbWVMaW5ld2lkdGg9UC53aXJlZnJhbWVMaW5ld2lkdGgsSS5saW5ld2lkdGg9UC5saW5ld2lkdGgsay5pc1BvaW50TGlnaHQ9PT0hMCYmSS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJihJLnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihrLm1hdHJpeFdvcmxkKSxJLm5lYXJEaXN0YW5jZT1PLEkuZmFyRGlzdGFuY2U9RCksSX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7aWYoUy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoQy5sYXllcnMpJiYoUy5pc01lc2h8fFMuaXNMaW5lfHxTLmlzUG9pbnRzKSYmKFMuY2FzdFNoYWRvd3x8Uy5yZWNlaXZlU2hhZG93JiZPPT09RjMpJiYoIVMuZnJ1c3R1bUN1bGxlZHx8bi5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7Uy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhQLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKTtsZXQgST10LnVwZGF0ZShTKSxMPVMubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMKSl7bGV0IFI9SS5ncm91cHM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1SW0ZdLFc9TFtVLm1hdGVyaWFsSW5kZXhdO2lmKFcmJlcudmlzaWJsZSl7bGV0IFo9eChTLEksVyxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxaLFMsVSl9fX1lbHNlIGlmKEwudmlzaWJsZSl7bGV0IFI9eChTLEksTCxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxSLFMsbnVsbCl9fWxldCBCPVMuY2hpbGRyZW47Zm9yKGxldCBJPTAsTD1CLmxlbmd0aDtJPEw7SSsrKWIoQltJXSxDLFAsayxPKX19ZnVuY3Rpb24gSWdyKGUsdCxyKXtsZXQgbj1yLmlzV2ViR0wyO2Z1bmN0aW9uIGkoKXtsZXQgYXQ9ITEsc2U9bmV3IGVuLFF0PW51bGwsQ2U9bmV3IGVuKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFB0KXtRdCE9PVB0JiYhYXQmJihlLmNvbG9yTWFzayhQdCxQdCxQdCxQdCksUXQ9UHQpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCxOdCx6ZSx5bixXaSl7V2k9PT0hMCYmKFB0Kj15bixOdCo9eW4semUqPXluKSxzZS5zZXQoUHQsTnQsemUseW4pLENlLmVxdWFscyhzZSk9PT0hMSYmKGUuY2xlYXJDb2xvcihQdCxOdCx6ZSx5biksQ2UuY29weShzZSkpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLFF0PW51bGwsQ2Uuc2V0KC0xLDAsMCwwKX19fWZ1bmN0aW9uIG8oKXtsZXQgYXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oUHQpe1B0P2x0KDI5MjkpOkt0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFB0KXtzZSE9PVB0JiYhYXQmJihlLmRlcHRoTWFzayhQdCksc2U9UHQpfSxzZXRGdW5jOmZ1bmN0aW9uKFB0KXtpZihRdCE9PVB0KXtpZihQdClzd2l0Y2goUHQpe2Nhc2UgZWZlOmUuZGVwdGhGdW5jKDUxMik7YnJlYWs7Y2FzZSByZmU6ZS5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIG5mZTplLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgaVU6ZS5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIGlmZTplLmRlcHRoRnVuYyg1MTQpO2JyZWFrO2Nhc2Ugb2ZlOmUuZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSBhZmU6ZS5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIHNmZTplLmRlcHRoRnVuYyg1MTcpO2JyZWFrO2RlZmF1bHQ6ZS5kZXB0aEZ1bmMoNTE1KX1lbHNlIGUuZGVwdGhGdW5jKDUxNSk7UXQ9UHR9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCl7Q2UhPT1QdCYmKGUuY2xlYXJEZXB0aChQdCksQ2U9UHQpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLHNlPW51bGwsUXQ9bnVsbCxDZT1udWxsfX19ZnVuY3Rpb24gYSgpe2xldCBhdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oQXIpe2F0fHwoQXI/bHQoMjk2MCk6S3QoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKEFyKXtzZSE9PUFyJiYhYXQmJihlLnN0ZW5jaWxNYXNrKEFyKSxzZT1Bcil9LHNldEZ1bmM6ZnVuY3Rpb24oQXIsUGEsaG8peyhRdCE9PUFyfHxDZSE9PVBhfHxQdCE9PWhvKSYmKGUuc3RlbmNpbEZ1bmMoQXIsUGEsaG8pLFF0PUFyLENlPVBhLFB0PWhvKX0sc2V0T3A6ZnVuY3Rpb24oQXIsUGEsaG8peyhOdCE9PUFyfHx6ZSE9PVBhfHx5biE9PWhvKSYmKGUuc3RlbmNpbE9wKEFyLFBhLGhvKSxOdD1Bcix6ZT1QYSx5bj1obyl9LHNldExvY2tlZDpmdW5jdGlvbihBcil7YXQ9QXJ9LHNldENsZWFyOmZ1bmN0aW9uKEFyKXtXaSE9PUFyJiYoZS5jbGVhclN0ZW5jaWwoQXIpLFdpPUFyKX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGx9fX1sZXQgcz1uZXcgaSxsPW5ldyBvLGM9bmV3IGEsdT17fSxoPXt9LGY9bmV3IFdlYWtNYXAscD1bXSxkPW51bGwsZz0hMSxfPW51bGwseT1udWxsLHg9bnVsbCxiPW51bGwsUz1udWxsLEM9bnVsbCxQPW51bGwsaz0hMSxPPW51bGwsRD1udWxsLEI9bnVsbCxJPW51bGwsTD1udWxsLFI9ZS5nZXRQYXJhbWV0ZXIoMzU2NjEpLEY9ITEsej0wLFU9ZS5nZXRQYXJhbWV0ZXIoNzkzOCk7VS5pbmRleE9mKCJXZWJHTCIpIT09LTE/KHo9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49MSk6VS5pbmRleE9mKCJPcGVuR0wgRVMiKSE9PS0xJiYoej1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49Mik7bGV0IFc9bnVsbCxaPXt9LHJ0PWUuZ2V0UGFyYW1ldGVyKDMwODgpLG90PWUuZ2V0UGFyYW1ldGVyKDI5NzgpLHN0PW5ldyBlbigpLmZyb21BcnJheShydCksU3Q9bmV3IGVuKCkuZnJvbUFycmF5KG90KTtmdW5jdGlvbiBidChhdCxzZSxRdCl7bGV0IENlPW5ldyBVaW50OEFycmF5KDQpLFB0PWUuY3JlYXRlVGV4dHVyZSgpO2UuYmluZFRleHR1cmUoYXQsUHQpLGUudGV4UGFyYW1ldGVyaShhdCwxMDI0MSw5NzI4KSxlLnRleFBhcmFtZXRlcmkoYXQsMTAyNDAsOTcyOCk7Zm9yKGxldCBOdD0wO050PFF0O050KyspZS50ZXhJbWFnZTJEKHNlK050LDAsNjQwOCwxLDEsMCw2NDA4LDUxMjEsQ2UpO3JldHVybiBQdH1sZXQgTXQ9e307TXRbMzU1M109YnQoMzU1MywzNTUzLDEpLE10WzM0MDY3XT1idCgzNDA2NywzNDA2OSw2KSxzLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxsdCgyOTI5KSxsLnNldEZ1bmMoaVUpLGh0KCExKSx3dChTdXQpLGx0KDI4ODQpLHEoJGQpO2Z1bmN0aW9uIGx0KGF0KXt1W2F0XSE9PSEwJiYoZS5lbmFibGUoYXQpLHVbYXRdPSEwKX1mdW5jdGlvbiBLdChhdCl7dVthdF0hPT0hMSYmKGUuZGlzYWJsZShhdCksdVthdF09ITEpfWZ1bmN0aW9uIF90KGF0LHNlKXtyZXR1cm4gaFthdF0hPT1zZT8oZS5iaW5kRnJhbWVidWZmZXIoYXQsc2UpLGhbYXRdPXNlLG4mJihhdD09PTM2MDA5JiYoaFszNjE2MF09c2UpLGF0PT09MzYxNjAmJihoWzM2MDA5XT1zZSkpLCEwKTohMX1mdW5jdGlvbiBjdChhdCxzZSl7bGV0IFF0PXAsQ2U9ITE7aWYoYXQpaWYoUXQ9Zi5nZXQoc2UpLFF0PT09dm9pZCAwJiYoUXQ9W10sZi5zZXQoc2UsUXQpKSxhdC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgUHQ9YXQudGV4dHVyZTtpZihRdC5sZW5ndGghPT1QdC5sZW5ndGh8fFF0WzBdIT09MzYwNjQpe2ZvcihsZXQgTnQ9MCx6ZT1QdC5sZW5ndGg7TnQ8emU7TnQrKylRdFtOdF09MzYwNjQrTnQ7UXQubGVuZ3RoPVB0Lmxlbmd0aCxDZT0hMH19ZWxzZSBRdFswXSE9PTM2MDY0JiYoUXRbMF09MzYwNjQsQ2U9ITApO2Vsc2UgUXRbMF0hPT0xMDI5JiYoUXRbMF09MTAyOSxDZT0hMCk7Q2UmJihyLmlzV2ViR0wyP2UuZHJhd0J1ZmZlcnMoUXQpOnQuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKS5kcmF3QnVmZmVyc1dFQkdMKFF0KSl9ZnVuY3Rpb24gWChhdCl7cmV0dXJuIGQhPT1hdD8oZS51c2VQcm9ncmFtKGF0KSxkPWF0LCEwKTohMX1sZXQgZXQ9e1tNMV06MzI3NzQsW0doZV06MzI3NzgsW1doZV06MzI3Nzl9O2lmKG4pZXRbQ3V0XT0zMjc3NSxldFtBdXRdPTMyNzc2O2Vsc2V7bGV0IGF0PXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7YXQhPT1udWxsJiYoZXRbQ3V0XT1hdC5NSU5fRVhULGV0W0F1dF09YXQuTUFYX0VYVCl9bGV0IGR0PXtbWWhlXTowLFtqaGVdOjEsW1hoZV06NzY4LFtQaHRdOjc3MCxbdGZlXTo3NzYsW0poZV06Nzc0LFtLaGVdOjc3MixbJGhlXTo3NjksW0lodF06NzcxLFtRaGVdOjc3NSxbWmhlXTo3NzN9O2Z1bmN0aW9uIHEoYXQsc2UsUXQsQ2UsUHQsTnQsemUseW4pe2lmKGF0PT09JGQpe2c9PT0hMCYmKEt0KDMwNDIpLGc9ITEpO3JldHVybn1pZihnPT09ITEmJihsdCgzMDQyKSxnPSEwKSxhdCE9PXFoZSl7aWYoYXQhPT1ffHx5biE9PWspe2lmKCh5IT09TTF8fFMhPT1NMSkmJihlLmJsZW5kRXF1YXRpb24oMzI3NzQpLHk9TTEsUz1NMSkseW4pc3dpdGNoKGF0KXtjYXNlIFYzOmUuYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgTXV0OmUuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixhdCk7YnJlYWt9ZWxzZSBzd2l0Y2goYXQpe2Nhc2UgVjM6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIE11dDplLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsYXQpO2JyZWFrfXg9bnVsbCxiPW51bGwsQz1udWxsLFA9bnVsbCxfPWF0LGs9eW59cmV0dXJufVB0PVB0fHxzZSxOdD1OdHx8UXQsemU9emV8fENlLChzZSE9PXl8fFB0IT09UykmJihlLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShldFtzZV0sZXRbUHRdKSx5PXNlLFM9UHQpLChRdCE9PXh8fENlIT09Ynx8TnQhPT1DfHx6ZSE9PVApJiYoZS5ibGVuZEZ1bmNTZXBhcmF0ZShkdFtRdF0sZHRbQ2VdLGR0W050XSxkdFt6ZV0pLHg9UXQsYj1DZSxDPU50LFA9emUpLF89YXQsaz1udWxsfWZ1bmN0aW9uIHB0KGF0LHNlKXthdC5zaWRlPT09TDE/S3QoMjg4NCk6bHQoMjg4NCk7bGV0IFF0PWF0LnNpZGU9PT1JaTtzZSYmKFF0PSFRdCksaHQoUXQpLGF0LmJsZW5kaW5nPT09VjMmJmF0LnRyYW5zcGFyZW50PT09ITE/cSgkZCk6cShhdC5ibGVuZGluZyxhdC5ibGVuZEVxdWF0aW9uLGF0LmJsZW5kU3JjLGF0LmJsZW5kRHN0LGF0LmJsZW5kRXF1YXRpb25BbHBoYSxhdC5ibGVuZFNyY0FscGhhLGF0LmJsZW5kRHN0QWxwaGEsYXQucHJlbXVsdGlwbGllZEFscGhhKSxsLnNldEZ1bmMoYXQuZGVwdGhGdW5jKSxsLnNldFRlc3QoYXQuZGVwdGhUZXN0KSxsLnNldE1hc2soYXQuZGVwdGhXcml0ZSkscy5zZXRNYXNrKGF0LmNvbG9yV3JpdGUpO2xldCBDZT1hdC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KENlKSxDZSYmKGMuc2V0TWFzayhhdC5zdGVuY2lsV3JpdGVNYXNrKSxjLnNldEZ1bmMoYXQuc3RlbmNpbEZ1bmMsYXQuc3RlbmNpbFJlZixhdC5zdGVuY2lsRnVuY01hc2spLGMuc2V0T3AoYXQuc3RlbmNpbEZhaWwsYXQuc3RlbmNpbFpGYWlsLGF0LnN0ZW5jaWxaUGFzcykpLGllKGF0LnBvbHlnb25PZmZzZXQsYXQucG9seWdvbk9mZnNldEZhY3RvcixhdC5wb2x5Z29uT2Zmc2V0VW5pdHMpLGF0LmFscGhhVG9Db3ZlcmFnZT09PSEwP2x0KDMyOTI2KTpLdCgzMjkyNil9ZnVuY3Rpb24gaHQoYXQpe08hPT1hdCYmKGF0P2UuZnJvbnRGYWNlKDIzMDQpOmUuZnJvbnRGYWNlKDIzMDUpLE89YXQpfWZ1bmN0aW9uIHd0KGF0KXthdCE9PUhoZT8obHQoMjg4NCksYXQhPT1EJiYoYXQ9PT1TdXQ/ZS5jdWxsRmFjZSgxMDI5KTphdD09PVZoZT9lLmN1bGxGYWNlKDEwMjgpOmUuY3VsbEZhY2UoMTAzMikpKTpLdCgyODg0KSxEPWF0fWZ1bmN0aW9uIGt0KGF0KXthdCE9PUImJihGJiZlLmxpbmVXaWR0aChhdCksQj1hdCl9ZnVuY3Rpb24gaWUoYXQsc2UsUXQpe2F0PyhsdCgzMjgyMyksKEkhPT1zZXx8TCE9PVF0KSYmKGUucG9seWdvbk9mZnNldChzZSxRdCksST1zZSxMPVF0KSk6S3QoMzI4MjMpfWZ1bmN0aW9uIGVlKGF0KXthdD9sdCgzMDg5KTpLdCgzMDg5KX1mdW5jdGlvbiBMZShhdCl7YXQ9PT12b2lkIDAmJihhdD0zMzk4NCtSLTEpLFchPT1hdCYmKGUuYWN0aXZlVGV4dHVyZShhdCksVz1hdCl9ZnVuY3Rpb24gYXIoYXQsc2Upe1c9PT1udWxsJiZMZSgpO2xldCBRdD1aW1ddO1F0PT09dm9pZCAwJiYoUXQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxaW1ddPVF0KSwoUXQudHlwZSE9PWF0fHxRdC50ZXh0dXJlIT09c2UpJiYoZS5iaW5kVGV4dHVyZShhdCxzZXx8TXRbYXRdKSxRdC50eXBlPWF0LFF0LnRleHR1cmU9c2UpfWZ1bmN0aW9uIGZyKCl7bGV0IGF0PVpbV107YXQhPT12b2lkIDAmJmF0LnR5cGUhPT12b2lkIDAmJihlLmJpbmRUZXh0dXJlKGF0LnR5cGUsbnVsbCksYXQudHlwZT12b2lkIDAsYXQudGV4dHVyZT12b2lkIDApfWZ1bmN0aW9uIHR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiAkKCl7dHJ5e2UudGV4U3ViSW1hZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIEl0KCl7dHJ5e2UudGV4U3ViSW1hZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uICR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBoZSgpe3RyeXtlLnRleFN0b3JhZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIFR0KCl7dHJ5e2UudGV4U3RvcmFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gYmUoKXt0cnl7ZS50ZXhJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gbnQoKXt0cnl7ZS50ZXhJbWFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gQ3QoYXQpe3N0LmVxdWFscyhhdCk9PT0hMSYmKGUuc2Npc3NvcihhdC54LGF0LnksYXQueixhdC53KSxzdC5jb3B5KGF0KSl9ZnVuY3Rpb24gV3QoYXQpe1N0LmVxdWFscyhhdCk9PT0hMSYmKGUudmlld3BvcnQoYXQueCxhdC55LGF0LnosYXQudyksU3QuY29weShhdCkpfWZ1bmN0aW9uIGZlKCl7ZS5kaXNhYmxlKDMwNDIpLGUuZGlzYWJsZSgyODg0KSxlLmRpc2FibGUoMjkyOSksZS5kaXNhYmxlKDMyODIzKSxlLmRpc2FibGUoMzA4OSksZS5kaXNhYmxlKDI5NjApLGUuZGlzYWJsZSgzMjkyNiksZS5ibGVuZEVxdWF0aW9uKDMyNzc0KSxlLmJsZW5kRnVuYygxLDApLGUuYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksZS5jb2xvck1hc2soITAsITAsITAsITApLGUuY2xlYXJDb2xvcigwLDAsMCwwKSxlLmRlcHRoTWFzayghMCksZS5kZXB0aEZ1bmMoNTEzKSxlLmNsZWFyRGVwdGgoMSksZS5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxlLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLGUuc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxlLmNsZWFyU3RlbmNpbCgwKSxlLmN1bGxGYWNlKDEwMjkpLGUuZnJvbnRGYWNlKDIzMDUpLGUucG9seWdvbk9mZnNldCgwLDApLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksbj09PSEwJiYoZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLGUudXNlUHJvZ3JhbShudWxsKSxlLmxpbmVXaWR0aCgxKSxlLnNjaXNzb3IoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS52aWV3cG9ydCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSx1PXt9LFc9bnVsbCxaPXt9LGg9e30sZj1uZXcgV2Vha01hcCxwPVtdLGQ9bnVsbCxnPSExLF89bnVsbCx5PW51bGwseD1udWxsLGI9bnVsbCxTPW51bGwsQz1udWxsLFA9bnVsbCxrPSExLE89bnVsbCxEPW51bGwsQj1udWxsLEk9bnVsbCxMPW51bGwsc3Quc2V0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLFN0LnNldCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxzLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6cyxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmx0LGRpc2FibGU6S3QsYmluZEZyYW1lYnVmZmVyOl90LGRyYXdCdWZmZXJzOmN0LHVzZVByb2dyYW06WCxzZXRCbGVuZGluZzpxLHNldE1hdGVyaWFsOnB0LHNldEZsaXBTaWRlZDpodCxzZXRDdWxsRmFjZTp3dCxzZXRMaW5lV2lkdGg6a3Qsc2V0UG9seWdvbk9mZnNldDppZSxzZXRTY2lzc29yVGVzdDplZSxhY3RpdmVUZXh0dXJlOkxlLGJpbmRUZXh0dXJlOmFyLHVuYmluZFRleHR1cmU6ZnIsY29tcHJlc3NlZFRleEltYWdlMkQ6dHQsdGV4SW1hZ2UyRDpiZSx0ZXhJbWFnZTNEOm50LHRleFN0b3JhZ2UyRDpoZSx0ZXhTdG9yYWdlM0Q6VHQsdGV4U3ViSW1hZ2UyRDokLHRleFN1YkltYWdlM0Q6SXQsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6JHQsc2Npc3NvcjpDdCx2aWV3cG9ydDpXdCxyZXNldDpmZX19ZnVuY3Rpb24gTGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPWkuaXNXZWJHTDIsbD1pLm1heFRleHR1cmVzLGM9aS5tYXhDdWJlbWFwU2l6ZSx1PWkubWF4VGV4dHVyZVNpemUsaD1pLm1heFNhbXBsZXMscD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxkPW5ldyBXZWFrTWFwLGcsXz0hMTt0cnl7Xz10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzIT0idW5kZWZpbmVkIiYmbmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIikhPT1udWxsfWNhdGNoKHR0KXt9ZnVuY3Rpb24geSh0dCwkKXtyZXR1cm4gXz9uZXcgT2Zmc2NyZWVuQ2FudmFzKHR0LCQpOnQ2KCJjYW52YXMiKX1mdW5jdGlvbiB4KHR0LCQsSXQsJHQpe2xldCBoZT0xO2lmKCh0dC53aWR0aD4kdHx8dHQuaGVpZ2h0PiR0KSYmKGhlPSR0L01hdGgubWF4KHR0LndpZHRoLHR0LmhlaWdodCkpLGhlPDF8fCQ9PT0hMClpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IFR0PSQ/RmZlOk1hdGguZmxvb3IsYmU9VHQoaGUqdHQud2lkdGgpLG50PVR0KGhlKnR0LmhlaWdodCk7Zz09PXZvaWQgMCYmKGc9eShiZSxudCkpO2xldCBDdD1JdD95KGJlLG50KTpnO3JldHVybiBDdC53aWR0aD1iZSxDdC5oZWlnaHQ9bnQsQ3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodHQsMCwwLGJlLG50KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK3R0LndpZHRoKyJ4Iit0dC5oZWlnaHQrIikgdG8gKCIrYmUrIngiK250KyIpLiIpLEN0fWVsc2UgcmV0dXJuImRhdGEiaW4gdHQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIit0dC53aWR0aCsieCIrdHQuaGVpZ2h0KyIpLiIpLHR0O3JldHVybiB0dH1mdW5jdGlvbiBiKHR0KXtyZXR1cm4gWnV0KHR0LndpZHRoKSYmWnV0KHR0LmhlaWdodCl9ZnVuY3Rpb24gUyh0dCl7cmV0dXJuIHM/ITE6dHQud3JhcFMhPT1Kb3x8dHQud3JhcFQhPT1Kb3x8dHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIEModHQsJCl7cmV0dXJuIHR0LmdlbmVyYXRlTWlwbWFwcyYmJCYmdHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIFAodHQpe2UuZ2VuZXJhdGVNaXBtYXAodHQpfWZ1bmN0aW9uIGsodHQsJCxJdCwkdCxoZT0hMSl7aWYocz09PSExKXJldHVybiAkO2lmKHR0IT09bnVsbCl7aWYoZVt0dF0hPT12b2lkIDApcmV0dXJuIGVbdHRdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIit0dCsiJyIpfWxldCBUdD0kO3JldHVybiAkPT09NjQwMyYmKEl0PT09NTEyNiYmKFR0PTMzMzI2KSxJdD09PTUxMzEmJihUdD0zMzMyNSksSXQ9PT01MTIxJiYoVHQ9MzMzMjEpKSwkPT09MzMzMTkmJihJdD09PTUxMjYmJihUdD0zMzMyOCksSXQ9PT01MTMxJiYoVHQ9MzMzMjcpLEl0PT09NTEyMSYmKFR0PTMzMzIzKSksJD09PTY0MDgmJihJdD09PTUxMjYmJihUdD0zNDgzNiksSXQ9PT01MTMxJiYoVHQ9MzQ4NDIpLEl0PT09NTEyMSYmKFR0PSR0PT09V24mJmhlPT09ITE/MzU5MDc6MzI4NTYpLEl0PT09MzI4MTkmJihUdD0zMjg1NCksSXQ9PT0zMjgyMCYmKFR0PTMyODU1KSksKFR0PT09MzMzMjV8fFR0PT09MzMzMjZ8fFR0PT09MzMzMjd8fFR0PT09MzMzMjh8fFR0PT09MzQ4NDJ8fFR0PT09MzQ4MzYpJiZ0LmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLFR0fWZ1bmN0aW9uIE8odHQsJCxJdCl7cmV0dXJuIEModHQsSXQpPT09ITB8fHR0LmlzRnJhbWVidWZmZXJUZXh0dXJlJiZ0dC5taW5GaWx0ZXIhPT1MaSYmdHQubWluRmlsdGVyIT09aWk/TWF0aC5sb2cyKE1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpKSsxOnR0Lm1pcG1hcHMhPT12b2lkIDAmJnR0Lm1pcG1hcHMubGVuZ3RoPjA/dHQubWlwbWFwcy5sZW5ndGg6dHQuaXNDb21wcmVzc2VkVGV4dHVyZSYmQXJyYXkuaXNBcnJheSh0dC5pbWFnZSk/JC5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIEQodHQpe3JldHVybiB0dD09PUxpfHx0dD09PW9VfHx0dD09PWFVPzk3Mjg6OTcyOX1mdW5jdGlvbiBCKHR0KXtsZXQgJD10dC50YXJnZXQ7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixCKSxMKCQpLCQuaXNWaWRlb1RleHR1cmUmJmQuZGVsZXRlKCQpLGEubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gSSh0dCl7bGV0ICQ9dHQudGFyZ2V0OyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSSksUigkKX1mdW5jdGlvbiBMKHR0KXtsZXQgJD1uLmdldCh0dCk7JC5fX3dlYmdsSW5pdCE9PXZvaWQgMCYmKGUuZGVsZXRlVGV4dHVyZSgkLl9fd2ViZ2xUZXh0dXJlKSxuLnJlbW92ZSh0dCkpfWZ1bmN0aW9uIFIodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO2lmKCEhdHQpe2lmKCR0Ll9fd2ViZ2xUZXh0dXJlIT09dm9pZCAwJiYoZS5kZWxldGVUZXh0dXJlKCR0Ll9fd2ViZ2xUZXh0dXJlKSxhLm1lbW9yeS50ZXh0dXJlcy0tKSx0dC5kZXB0aFRleHR1cmUmJnR0LmRlcHRoVGV4dHVyZS5kaXNwb3NlKCksdHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBoZT0wO2hlPDY7aGUrKyllLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcltoZV0pLEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbERlcHRoYnVmZmVyW2hlXSk7ZWxzZSBlLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksSXQuX193ZWJnbERlcHRoYnVmZmVyJiZlLmRlbGV0ZVJlbmRlcmJ1ZmZlcihJdC5fX3dlYmdsRGVwdGhidWZmZXIpLEl0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxJdC5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYodHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGhlPTAsVHQ9JC5sZW5ndGg7aGU8VHQ7aGUrKyl7bGV0IGJlPW4uZ2V0KCRbaGVdKTtiZS5fX3dlYmdsVGV4dHVyZSYmKGUuZGVsZXRlVGV4dHVyZShiZS5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksbi5yZW1vdmUoJFtoZV0pfW4ucmVtb3ZlKCQpLG4ucmVtb3ZlKHR0KX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIFUoKXtsZXQgdHQ9RjtyZXR1cm4gdHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3R0KyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSx0dH1mdW5jdGlvbiBXKHR0LCQpe2xldCBJdD1uLmdldCh0dCk7aWYodHQuaXNWaWRlb1RleHR1cmUmJmt0KHR0KSx0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2xldCAkdD10dC5pbWFnZTtpZigkdD09PXZvaWQgMCljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2UgaWYoJHQuY29tcGxldGU9PT0hMSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKTtlbHNle2x0KEl0LHR0LCQpO3JldHVybn19ci5hY3RpdmVUZXh0dXJlKDMzOTg0KyQpLHIuYmluZFRleHR1cmUoMzU1MyxJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gWih0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM1ODY2LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBydCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDMyODc5LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBvdCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7S3QoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM0MDY3LEl0Ll9fd2ViZ2xUZXh0dXJlKX1sZXQgc3Q9e1tYUF06MTA0OTcsW0pvXTozMzA3MSxbJFBdOjMzNjQ4fSxTdD17W0xpXTo5NzI4LFtvVV06OTk4NCxbYVVdOjk5ODYsW2lpXTo5NzI5LFtMaHRdOjk5ODUsW294XTo5OTg3fTtmdW5jdGlvbiBidCh0dCwkLEl0KXtpZihJdD8oZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQyLHN0WyQud3JhcFNdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDMsc3RbJC53cmFwVF0pLCh0dD09PTMyODc5fHx0dD09PTM1ODY2KSYmZS50ZXhQYXJhbWV0ZXJpKHR0LDMyODgyLHN0WyQud3JhcFJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDAsU3RbJC5tYWdGaWx0ZXJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDEsU3RbJC5taW5GaWx0ZXJdKSk6KGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MiwzMzA3MSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQzLDMzMDcxKSwodHQ9PT0zMjg3OXx8dHQ9PT0zNTg2NikmJmUudGV4UGFyYW1ldGVyaSh0dCwzMjg4MiwzMzA3MSksKCQud3JhcFMhPT1Kb3x8JC53cmFwVCE9PUpvKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MCxEKCQubWFnRmlsdGVyKSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQxLEQoJC5taW5GaWx0ZXIpKSwkLm1pbkZpbHRlciE9PUxpJiYkLm1pbkZpbHRlciE9PWlpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksdC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCAkdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoJC50eXBlPT09amQmJnQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSExfHxzPT09ITEmJiQudHlwZT09PUMxJiZ0LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSExKXJldHVybjsoJC5hbmlzb3Ryb3B5PjF8fG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYoZS50ZXhQYXJhbWV0ZXJmKHR0LCR0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKCQuYW5pc290cm9weSxpLmdldE1heEFuaXNvdHJvcHkoKSkpLG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHk9JC5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24gTXQodHQsJCl7dHQuX193ZWJnbEluaXQ9PT12b2lkIDAmJih0dC5fX3dlYmdsSW5pdD0hMCwkLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEIpLHR0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGx0KHR0LCQsSXQpe2xldCAkdD0zNTUzOyQuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJigkdD0zNTg2NiksJC5pc0RhdGFUZXh0dXJlM0QmJigkdD0zMjg3OSksTXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKCR0LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGhlPVMoJCkmJmIoJC5pbWFnZSk9PT0hMSxUdD14KCQuaW1hZ2UsaGUsITEsdSk7VHQ9aWUoJCxUdCk7bGV0IGJlPWIoVHQpfHxzLG50PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxDdD1vLmNvbnZlcnQoJC50eXBlKSxXdD1rKCQuaW50ZXJuYWxGb3JtYXQsbnQsQ3QsJC5lbmNvZGluZywkLmlzVmlkZW9UZXh0dXJlKTtidCgkdCwkLGJlKTtsZXQgZmUsYXQ9JC5taXBtYXBzLHNlPXMmJiQuaXNWaWRlb1RleHR1cmUhPT0hMCxRdD10dC5fX3ZlcnNpb249PT12b2lkIDAsQ2U9TygkLFR0LGJlKTtpZigkLmlzRGVwdGhUZXh0dXJlKVd0PTY0MDIscz8kLnR5cGU9PT1qZD9XdD0zNjAxMjokLnR5cGU9PT1WUD9XdD0zMzE5MDokLnR5cGU9PT1BMT9XdD0zNTA1NjpXdD0zMzE4OTokLnR5cGU9PT1qZCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksJC5mb3JtYXQ9PT16MCYmV3Q9PT02NDAyJiYkLnR5cGUhPT1HMyYmJC50eXBlIT09VlAmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSwkLnR5cGU9RzMsQ3Q9by5jb252ZXJ0KCQudHlwZSkpLCQuZm9ybWF0PT09azEmJld0PT09NjQwMiYmKFd0PTM0MDQxLCQudHlwZSE9PUExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLCQudHlwZT1BMSxDdD1vLmNvbnZlcnQoJC50eXBlKSkpLHNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLDEsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KTpyLnRleEltYWdlMkQoMzU1MywwLFd0LFR0LndpZHRoLFR0LmhlaWdodCwwLG50LEN0LG51bGwpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlKWlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSk7JC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBzZT8oUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KSxyLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzQ29tcHJlc3NlZFRleHR1cmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sJC5mb3JtYXQhPT1Rbz9udCE9PW51bGw/c2U/ci5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsZmUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLGZlLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnNlP3IudGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSl9ZWxzZSBpZigkLmlzRGF0YVRleHR1cmUyREFycmF5KXNlPyhRdCYmci50ZXhTdG9yYWdlM0QoMzU4NjYsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoKSxyLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UzRCgzNTg2NiwwLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlM0Qpc2U/KFF0JiZyLnRleFN0b3JhZ2UzRCgzMjg3OSxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgpLHIudGV4U3ViSW1hZ2UzRCgzMjg3OSwwLDAsMCwwLFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCxudCxDdCxUdC5kYXRhKSk6ci50ZXhJbWFnZTNEKDMyODc5LDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoLDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzRnJhbWVidWZmZXJUZXh0dXJlKXNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsMCxudCxDdCxudWxsKTtlbHNlIGlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsbnQsQ3QsZmUpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LG50LEN0LGZlKTskLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHNlPyhRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQpLHIudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLG50LEN0LFR0KSk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxudCxDdCxUdCk7QygkLGJlKSYmUCgkdCksdHQuX192ZXJzaW9uPSQudmVyc2lvbiwkLm9uVXBkYXRlJiYkLm9uVXBkYXRlKCQpfWZ1bmN0aW9uIEt0KHR0LCQsSXQpe2lmKCQuaW1hZ2UubGVuZ3RoIT09NilyZXR1cm47TXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKDM0MDY3LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0ICR0PSQmJigkLmlzQ29tcHJlc3NlZFRleHR1cmV8fCQuaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSksaGU9JC5pbWFnZVswXSYmJC5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLFR0PVtdO2ZvcihsZXQgUHQ9MDtQdDw2O1B0KyspISR0JiYhaGU/VHRbUHRdPXgoJC5pbWFnZVtQdF0sITEsITAsYyk6VHRbUHRdPWhlPyQuaW1hZ2VbUHRdLmltYWdlOiQuaW1hZ2VbUHRdLFR0W1B0XT1pZSgkLFR0W1B0XSk7bGV0IGJlPVR0WzBdLG50PWIoYmUpfHxzLEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9cyYmJC5pc1ZpZGVvVGV4dHVyZSE9PSEwLHNlPXR0Ll9fdmVyc2lvbj09PXZvaWQgMCxRdD1PKCQsYmUsbnQpO2J0KDM0MDY3LCQsbnQpO2xldCBDZTtpZigkdCl7YXQmJnNlJiZyLnRleFN0b3JhZ2UyRCgzNDA2NyxRdCxmZSxiZS53aWR0aCxiZS5oZWlnaHQpO2ZvcihsZXQgUHQ9MDtQdDw2O1B0Kyspe0NlPVR0W1B0XS5taXBtYXBzO2ZvcihsZXQgTnQ9MDtOdDxDZS5sZW5ndGg7TnQrKyl7bGV0IHplPUNlW050XTskLmZvcm1hdCE9PVFvP0N0IT09bnVsbD9hdD9yLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsemUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStQdCxOdCxmZSx6ZS53aWR0aCx6ZS5oZWlnaHQsMCx6ZS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsV3QsemUuZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50LGZlLHplLndpZHRoLHplLmhlaWdodCwwLEN0LFd0LHplLmRhdGEpfX19ZWxzZXtDZT0kLm1pcG1hcHMsYXQmJnNlJiYoQ2UubGVuZ3RoPjAmJlF0Kyssci50ZXhTdG9yYWdlMkQoMzQwNjcsUXQsZmUsVHRbMF0ud2lkdGgsVHRbMF0uaGVpZ2h0KSk7Zm9yKGxldCBQdD0wO1B0PDY7UHQrKylpZihoZSl7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLFR0W1B0XS53aWR0aCxUdFtQdF0uaGVpZ2h0LEN0LFd0LFR0W1B0XS5kYXRhKTpyLnRleEltYWdlMkQoMzQwNjkrUHQsMCxmZSxUdFtQdF0ud2lkdGgsVHRbUHRdLmhlaWdodCwwLEN0LFd0LFR0W1B0XS5kYXRhKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB5bj1DZVtOdF0uaW1hZ2VbUHRdLmltYWdlO2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCsxLDAsMCx5bi53aWR0aCx5bi5oZWlnaHQsQ3QsV3QseW4uZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUseW4ud2lkdGgseW4uaGVpZ2h0LDAsQ3QsV3QseW4uZGF0YSl9fWVsc2V7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLEN0LFd0LFR0W1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LDAsZmUsQ3QsV3QsVHRbUHRdKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB6ZT1DZVtOdF07YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50KzEsMCwwLEN0LFd0LHplLmltYWdlW1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUsQ3QsV3QsemUuaW1hZ2VbUHRdKX19fUMoJCxudCkmJlAoMzQwNjcpLHR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sJC5vblVwZGF0ZSYmJC5vblVwZGF0ZSgkKX1mdW5jdGlvbiBfdCh0dCwkLEl0LCR0LGhlKXtsZXQgVHQ9by5jb252ZXJ0KEl0LmZvcm1hdCxJdC5lbmNvZGluZyksYmU9by5jb252ZXJ0KEl0LnR5cGUpLG50PWsoSXQuaW50ZXJuYWxGb3JtYXQsVHQsYmUsSXQuZW5jb2RpbmcpO24uZ2V0KCQpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGhlPT09MzI4Nzl8fGhlPT09MzU4NjY/ci50ZXhJbWFnZTNEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwkLmRlcHRoLDAsVHQsYmUsbnVsbCk6ci50ZXhJbWFnZTJEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwwLFR0LGJlLG51bGwpKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwLHd0KCQpKTplLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBjdCh0dCwkLEl0KXtpZihlLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsdHQpLCQuZGVwdGhCdWZmZXImJiEkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD0zMzE4OTtpZihJdHx8JC51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBoZT0kLmRlcHRoVGV4dHVyZTtoZSYmaGUuaXNEZXB0aFRleHR1cmUmJihoZS50eXBlPT09amQ/JHQ9MzYwMTI6aGUudHlwZT09PVZQJiYoJHQ9MzMxOTApKTtsZXQgVHQ9d3QoJCk7JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCl9ZWxzZSBlLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsJHQsJC53aWR0aCwkLmhlaWdodCk7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSx0dCl9ZWxzZSBpZigkLmRlcHRoQnVmZmVyJiYkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD13dCgkKTtJdCYmJC51c2VSZW5kZXJidWZmZXI/ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLCQud2lkdGgsJC5oZWlnaHQpLGUuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsdHQpfWVsc2V7bGV0ICR0PSQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwPyQudGV4dHVyZVswXTokLnRleHR1cmUsaGU9by5jb252ZXJ0KCR0LmZvcm1hdCwkdC5lbmNvZGluZyksVHQ9by5jb252ZXJ0KCR0LnR5cGUpLGJlPWsoJHQuaW50ZXJuYWxGb3JtYXQsaGUsVHQsJHQuZW5jb2RpbmcpLG50PXd0KCQpO0l0JiYkLnVzZVJlbmRlcmJ1ZmZlcj9lLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTokLnVzZVJlbmRlclRvVGV4dHVyZT9wLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTplLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsYmUsJC53aWR0aCwkLmhlaWdodCl9ZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIFgodHQsJCl7aWYoJCYmJC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksISgkLmRlcHRoVGV4dHVyZSYmJC5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpKXRocm93IG5ldyBFcnJvcigicmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZSIpOyghbi5nZXQoJC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlfHwkLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCE9PSQud2lkdGh8fCQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCE9PSQuaGVpZ2h0KSYmKCQuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPSQud2lkdGgsJC5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PSQuaGVpZ2h0LCQuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKSxXKCQuZGVwdGhUZXh0dXJlLDApO2xldCAkdD1uLmdldCgkLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsaGU9d3QoJCk7aWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09ejApJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLCR0LDApO2Vsc2UgaWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09azEpJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDMzMzA2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLCR0LDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKX1mdW5jdGlvbiBldCh0dCl7bGV0ICQ9bi5nZXQodHQpLEl0PXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYodHQuZGVwdGhUZXh0dXJlJiYhJC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKXtpZihJdCl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7WCgkLl9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCl9ZWxzZSBpZihJdCl7JC5fX3dlYmdsRGVwdGhidWZmZXI9W107Zm9yKGxldCAkdD0wOyR0PDY7JHQrKylyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlclskdF0pLCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XT1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGN0KCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XSx0dCwhMSl9ZWxzZSByLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlciksJC5fX3dlYmdsRGVwdGhidWZmZXI9ZS5jcmVhdGVSZW5kZXJidWZmZXIoKSxjdCgkLl9fd2ViZ2xEZXB0aGJ1ZmZlcix0dCwhMSk7ci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gZHQodHQsJCxJdCl7bGV0ICR0PW4uZ2V0KHR0KTskIT09dm9pZCAwJiZfdCgkdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsdHQudGV4dHVyZSwzNjA2NCwzNTUzKSxJdCE9PXZvaWQgMCYmZXQodHQpfWZ1bmN0aW9uIHEodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO3R0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEkpLHR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMhPT0hMCYmKCR0Ll9fd2ViZ2xUZXh0dXJlPT09dm9pZCAwJiYoJHQuX193ZWJnbFRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCkpLCR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sYS5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IGhlPXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITAsVHQ9dHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwLGJlPSQuaXNEYXRhVGV4dHVyZTNEfHwkLmlzRGF0YVRleHR1cmUyREFycmF5LG50PWIodHQpfHxzO2lmKGhlKXtJdC5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdPWUuY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksVHQpaWYoaS5kcmF3QnVmZmVycyl7bGV0IEN0PXR0LnRleHR1cmU7Zm9yKGxldCBXdD0wLGZlPUN0Lmxlbmd0aDtXdDxmZTtXdCsrKXtsZXQgYXQ9bi5nZXQoQ3RbV3RdKTthdC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKGF0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYodHQudXNlUmVuZGVyYnVmZmVyKWlmKHMpe0l0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7bGV0IEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9d3QodHQpO2UucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGF0LGZlLHR0LndpZHRoLHR0LmhlaWdodCksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsSXQuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDY0LDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLHR0LmRlcHRoQnVmZmVyJiYoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksY3QoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLHR0LCEwKSksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtpZihoZSl7ci5iaW5kVGV4dHVyZSgzNDA2NywkdC5fX3dlYmdsVGV4dHVyZSksYnQoMzQwNjcsJCxudCk7Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylfdChJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdLHR0LCQsMzYwNjQsMzQwNjkrQ3QpO0MoJCxudCkmJlAoMzQwNjcpLHIudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVHQpe2xldCBDdD10dC50ZXh0dXJlO2ZvcihsZXQgV3Q9MCxmZT1DdC5sZW5ndGg7V3Q8ZmU7V3QrKyl7bGV0IGF0PUN0W1d0XSxzZT1uLmdldChhdCk7ci5iaW5kVGV4dHVyZSgzNTUzLHNlLl9fd2ViZ2xUZXh0dXJlKSxidCgzNTUzLGF0LG50KSxfdChJdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsYXQsMzYwNjQrV3QsMzU1MyksQyhhdCxudCkmJlAoMzU1Myl9ci51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgQ3Q9MzU1MztiZSYmKHM/Q3Q9JC5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLHIuYmluZFRleHR1cmUoQ3QsJHQuX193ZWJnbFRleHR1cmUpLGJ0KEN0LCQsbnQpLF90KEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCwkLDM2MDY0LEN0KSxDKCQsbnQpJiZQKEN0KSxyLnVuYmluZFRleHR1cmUoKX10dC5kZXB0aEJ1ZmZlciYmZXQodHQpfWZ1bmN0aW9uIHB0KHR0KXtsZXQgJD1iKHR0KXx8cyxJdD10dC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/dHQudGV4dHVyZTpbdHQudGV4dHVyZV07Zm9yKGxldCAkdD0wLGhlPUl0Lmxlbmd0aDskdDxoZTskdCsrKXtsZXQgVHQ9SXRbJHRdO2lmKEMoVHQsJCkpe2xldCBiZT10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLG50PW4uZ2V0KFR0KS5fX3dlYmdsVGV4dHVyZTtyLmJpbmRUZXh0dXJlKGJlLG50KSxQKGJlKSxyLnVuYmluZFRleHR1cmUoKX19fWZ1bmN0aW9uIGh0KHR0KXtpZih0dC51c2VSZW5kZXJidWZmZXIpaWYocyl7bGV0ICQ9dHQud2lkdGgsSXQ9dHQuaGVpZ2h0LCR0PTE2Mzg0LGhlPVszNjA2NF0sVHQ9dHQuc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5Njt0dC5kZXB0aEJ1ZmZlciYmaGUucHVzaChUdCksdHQuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fCh0dC5kZXB0aEJ1ZmZlciYmKCR0fD0yNTYpLHR0LnN0ZW5jaWxCdWZmZXImJigkdHw9MTAyNCkpO2xldCBiZT1uLmdldCh0dCk7ci5iaW5kRnJhbWVidWZmZXIoMzYwMDgsYmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsRnJhbWVidWZmZXIpLHR0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYoZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW1R0XSksZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1R0XSkpLGUuYmxpdEZyYW1lYnVmZmVyKDAsMCwkLEl0LDAsMCwkLEl0LCR0LDk3MjgpLGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGhlKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gd3QodHQpe3JldHVybiBzJiYodHQudXNlUmVuZGVyYnVmZmVyfHx0dC51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsdHQuc2FtcGxlcyk6MH1mdW5jdGlvbiBrdCh0dCl7bGV0ICQ9YS5yZW5kZXIuZnJhbWU7ZC5nZXQodHQpIT09JCYmKGQuc2V0KHR0LCQpLHR0LnVwZGF0ZSgpKX1mdW5jdGlvbiBpZSh0dCwkKXtsZXQgSXQ9dHQuZW5jb2RpbmcsJHQ9dHQuZm9ybWF0LGhlPXR0LnR5cGU7cmV0dXJuIHR0LmlzQ29tcHJlc3NlZFRleHR1cmU9PT0hMHx8dHQuaXNWaWRlb1RleHR1cmU9PT0hMHx8dHQuZm9ybWF0PT09c1V8fEl0IT09UWQmJihJdD09PVduP3M9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiYkdD09PVFvPyh0dC5mb3JtYXQ9c1UsdHQubWluRmlsdGVyPWlpLHR0LmdlbmVyYXRlTWlwbWFwcz0hMSk6JD1LZi5zUkdCVG9MaW5lYXIoJCk6KCR0IT09UW98fGhlIT09WmQpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixJdCkpLCR9bGV0IGVlPSExLExlPSExO2Z1bmN0aW9uIGFyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoZWU9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGVlPSEwKSx0dD10dC50ZXh0dXJlKSxXKHR0LCQpfWZ1bmN0aW9uIGZyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKExlPT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksTGU9ITApLHR0PXR0LnRleHR1cmUpLG90KHR0LCQpfXRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1VLHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9eix0aGlzLnNldFRleHR1cmUyRD1XLHRoaXMuc2V0VGV4dHVyZTJEQXJyYXk9Wix0aGlzLnNldFRleHR1cmUzRD1ydCx0aGlzLnNldFRleHR1cmVDdWJlPW90LHRoaXMucmViaW5kVGV4dHVyZXM9ZHQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1xLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPXB0LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9aHQsdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPWV0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9X3QsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWFyLHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZyfWZ1bmN0aW9uIFFmZShlLHQscil7bGV0IG49ci5pc1dlYkdMMjtmdW5jdGlvbiBpKG8sYT1udWxsKXtsZXQgcztpZihvPT09WmQpcmV0dXJuIDUxMjE7aWYobz09PXlmZSlyZXR1cm4gMzI4MTk7aWYobz09PXZmZSlyZXR1cm4gMzI4MjA7aWYobz09PW1mZSlyZXR1cm4gNTEyMDtpZihvPT09Z2ZlKXJldHVybiA1MTIyO2lmKG89PT1HMylyZXR1cm4gNTEyMztpZihvPT09X2ZlKXJldHVybiA1MTI0O2lmKG89PT1WUClyZXR1cm4gNTEyNTtpZihvPT09amQpcmV0dXJuIDUxMjY7aWYobz09PUMxKXJldHVybiBuPzUxMzE6KHM9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxzIT09bnVsbD9zLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKG89PT14ZmUpcmV0dXJuIDY0MDY7aWYobz09PVFvKXJldHVybiA2NDA4O2lmKG89PT1iZmUpcmV0dXJuIDY0MDk7aWYobz09PXdmZSlyZXR1cm4gNjQxMDtpZihvPT09ejApcmV0dXJuIDY0MDI7aWYobz09PWsxKXJldHVybiAzNDA0MTtpZihvPT09U2ZlKXJldHVybiA2NDAzO2lmKG89PT1zVSlyZXR1cm4gcz10LmdldCgiRVhUX3NSR0IiKSxzIT09bnVsbD9zLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYobz09PU1mZSlyZXR1cm4gMzYyNDQ7aWYobz09PUVmZSlyZXR1cm4gMzMzMTk7aWYobz09PVRmZSlyZXR1cm4gMzMzMjA7aWYobz09PUNmZSlyZXR1cm4gMzYyNDk7aWYobz09PUpWfHxvPT09UVZ8fG89PT10VXx8bz09PWVVKWlmKGE9PT1XbilpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIikscyE9PW51bGwpe2lmKG89PT1KVilyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZihvPT09UVYpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYobz09PXRVKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKG89PT1lVSlyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2Vsc2UgaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxzIT09bnVsbCl7aWYobz09PUpWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PVFWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKG89PT10VSlyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZihvPT09ZVUpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09UHV0fHxvPT09SXV0fHxvPT09THV0fHxvPT09a3V0KWlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLHMhPT1udWxsKXtpZihvPT09UHV0KXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PUl1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKG89PT1MdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PWt1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKG89PT1BZmUpcmV0dXJuIHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIikscyE9PW51bGw/cy5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYobz09PVJ1dHx8bz09PU51dClpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIikscyE9PW51bGwpe2lmKG89PT1SdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfRVRDMjpzLkNPTVBSRVNTRURfUkdCOF9FVEMyO2lmKG89PT1OdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOnMuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31lbHNlIHJldHVybiBudWxsO2lmKG89PT1EdXR8fG89PT1PdXR8fG89PT16dXR8fG89PT1GdXR8fG89PT1CdXR8fG89PT1IdXR8fG89PT1WdXR8fG89PT1VdXR8fG89PT1xdXR8fG89PT1HdXR8fG89PT1XdXR8fG89PT1ZdXR8fG89PT1qdXR8fG89PT1YdXQpaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxzIT09bnVsbCl7aWYobz09PUR1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZihvPT09T3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKG89PT16dXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYobz09PUZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZihvPT09QnV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKG89PT1IdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYobz09PVZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZihvPT09VXV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKG89PT1xdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZihvPT09R3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYobz09PVd1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKG89PT1ZdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKG89PT1qdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKG89PT1YdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYobz09PSR1dClpZihzPXQuZ2V0KCJFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjIikscyE9PW51bGwpe2lmKG89PT0kdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDpzLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1lbHNlIHJldHVybiBudWxsO2lmKG89PT1BMSlyZXR1cm4gbj8zNDA0Mjoocz10LmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHMhPT1udWxsP3MuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6bnVsbCl9cmV0dXJue2NvbnZlcnQ6aX19dmFyIG42PWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLmNhbWVyYXM9dH19O242LnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhPSEwO3ZhciBYZD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikdyb3VwIn19O1hkLnByb3RvdHlwZS5pc0dyb3VwPSEwO3ZhciBrZ3I9e3R5cGU6Im1vdmUifSxxUD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgWGQsdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBYZCx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgaiksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IFhkLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBqKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxyLG4pe2xldCBpPW51bGwsbz1udWxsLGE9bnVsbCxzPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJnIuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihzIT09bnVsbCYmKGk9ci5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsbiksaSE9PW51bGwmJihzLm1hdHJpeC5mcm9tQXJyYXkoaS50cmFuc2Zvcm0ubWF0cml4KSxzLm1hdHJpeC5kZWNvbXBvc2Uocy5wb3NpdGlvbixzLnJvdGF0aW9uLHMuc2NhbGUpLGkubGluZWFyVmVsb2NpdHk/KHMuaGFzTGluZWFyVmVsb2NpdHk9ITAscy5saW5lYXJWZWxvY2l0eS5jb3B5KGkubGluZWFyVmVsb2NpdHkpKTpzLmhhc0xpbmVhclZlbG9jaXR5PSExLGkuYW5ndWxhclZlbG9jaXR5PyhzLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxzLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KGkuYW5ndWxhclZlbG9jaXR5KSk6cy5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KGtncikpKSxjJiZ0LmhhbmQpe2E9ITA7Zm9yKGxldCBnIG9mIHQuaGFuZC52YWx1ZXMoKSl7bGV0IF89ci5nZXRKb2ludFBvc2UoZyxuKTtpZihjLmpvaW50c1tnLmpvaW50TmFtZV09PT12b2lkIDApe2xldCB4PW5ldyBYZDt4Lm1hdHJpeEF1dG9VcGRhdGU9ITEseC52aXNpYmxlPSExLGMuam9pbnRzW2cuam9pbnROYW1lXT14LGMuYWRkKHgpfWxldCB5PWMuam9pbnRzW2cuam9pbnROYW1lXTtfIT09bnVsbCYmKHkubWF0cml4LmZyb21BcnJheShfLnRyYW5zZm9ybS5tYXRyaXgpLHkubWF0cml4LmRlY29tcG9zZSh5LnBvc2l0aW9uLHkucm90YXRpb24seS5zY2FsZSkseS5qb2ludFJhZGl1cz1fLnJhZGl1cykseS52aXNpYmxlPV8hPT1udWxsfWxldCB1PWMuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0saD1jLmpvaW50c1sidGh1bWItdGlwIl0sZj11LnBvc2l0aW9uLmRpc3RhbmNlVG8oaC5wb3NpdGlvbikscD0uMDIsZD0uMDA1O2MuaW5wdXRTdGF0ZS5waW5jaGluZyYmZj5wK2Q/KGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohYy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPD1wLWQmJihjLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIGwhPT1udWxsJiZ0LmdyaXBTcGFjZSYmKG89ci5nZXRQb3NlKHQuZ3JpcFNwYWNlLG4pLG8hPT1udWxsJiYobC5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksbC5tYXRyaXguZGVjb21wb3NlKGwucG9zaXRpb24sbC5yb3RhdGlvbixsLnNjYWxlKSxvLmxpbmVhclZlbG9jaXR5PyhsLmhhc0xpbmVhclZlbG9jaXR5PSEwLGwubGluZWFyVmVsb2NpdHkuY29weShvLmxpbmVhclZlbG9jaXR5KSk6bC5oYXNMaW5lYXJWZWxvY2l0eT0hMSxvLmFuZ3VsYXJWZWxvY2l0eT8obC5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsbC5hbmd1bGFyVmVsb2NpdHkuY29weShvLmFuZ3VsYXJWZWxvY2l0eSkpOmwuaGFzQW5ndWxhclZlbG9jaXR5PSExKSk7cmV0dXJuIHMhPT1udWxsJiYocy52aXNpYmxlPWkhPT1udWxsKSxsIT09bnVsbCYmKGwudmlzaWJsZT1vIT09bnVsbCksYyE9PW51bGwmJihjLnZpc2libGU9YSE9PW51bGwpLHRoaXN9fSxuTT1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe2lmKHU9dSE9PXZvaWQgMD91OnowLHUhPT16MCYmdSE9PWsxKXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTtuPT09dm9pZCAwJiZ1PT09ejAmJihuPUczKSxuPT09dm9pZCAwJiZ1PT09azEmJihuPUExKSxzdXBlcihudWxsLGksbyxhLHMsbCx1LG4sYyksdGhpcy5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cn0sdGhpcy5tYWdGaWx0ZXI9cyE9PXZvaWQgMD9zOkxpLHRoaXMubWluRmlsdGVyPWwhPT12b2lkIDA/bDpMaSx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07bk0ucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO3ZhciBlaHQ9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCk7bGV0IG49dGhpcyxpPW51bGwsbz0xLGE9bnVsbCxzPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwscD0hMSxkPW51bGwsZz1yLmdldENvbnRleHRBdHRyaWJ1dGVzKCksXz1udWxsLHk9bnVsbCx4PVtdLGI9bmV3IE1hcCxTPW5ldyBVaTtTLmxheWVycy5lbmFibGUoMSksUy52aWV3cG9ydD1uZXcgZW47bGV0IEM9bmV3IFVpO0MubGF5ZXJzLmVuYWJsZSgyKSxDLnZpZXdwb3J0PW5ldyBlbjtsZXQgUD1bUyxDXSxrPW5ldyBuNjtrLmxheWVycy5lbmFibGUoMSksay5sYXllcnMuZW5hYmxlKDIpO2xldCBPPW51bGwsRD1udWxsO3RoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRIYW5kU3BhY2UoKX07ZnVuY3Rpb24gQihvdCl7bGV0IHN0PWIuZ2V0KG90LmlucHV0U291cmNlKTtzdCYmc3QuZGlzcGF0Y2hFdmVudCh7dHlwZTpvdC50eXBlLGRhdGE6b3QuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBJKCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKG90LHN0KXtvdC5kaXNjb25uZWN0KHN0KX0pLGIuY2xlYXIoKSxPPW51bGwsRD1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KF8pLGY9bnVsbCxoPW51bGwsdT1udWxsLGk9bnVsbCx5PW51bGwscnQuc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX10aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24ob3Qpe289b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgZnJhbWVidWZmZXIgc2NhbGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5zZXRSZWZlcmVuY2VTcGFjZVR5cGU9ZnVuY3Rpb24ob3Qpe3M9b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBhfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGR9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24ob3Qpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYoaT1vdCxpIT09bnVsbCl7aWYoXz10LmdldFJlbmRlclRhcmdldCgpLGkuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVuZCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplZW5kIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIsSSksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLEwpLGcueHJDb21wYXRpYmxlIT09ITAmJih5aWVsZCByLm1ha2VYUkNvbXBhdGlibGUoKSksaS5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDB8fHQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyPT09ITEpe2xldCBzdD17YW50aWFsaWFzOmkucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP2cuYW50aWFsaWFzOiEwLGFscGhhOmcuYWxwaGEsZGVwdGg6Zy5kZXB0aCxzdGVuY2lsOmcuc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOm99O2Y9bmV3IFhSV2ViR0xMYXllcihpLHIsc3QpLGkudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpmfSkseT1uZXcgdXMoZi5mcmFtZWJ1ZmZlcldpZHRoLGYuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1lbHNle3A9Zy5hbnRpYWxpYXM7bGV0IHN0PW51bGwsU3Q9bnVsbCxidD1udWxsO2cuZGVwdGgmJihidD1nLnN0ZW5jaWw/MzUwNTY6MzMxOTAsc3Q9Zy5zdGVuY2lsP2sxOnowLFN0PWcuc3RlbmNpbD9BMTpHMyk7bGV0IE10PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09V24/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6YnQsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcoaSxyKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKE10KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSkscD95PW5ldyBqMyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTp5PW5ldyB1cyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX15LmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSksYT15aWVsZCBpLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShzKSxydC5zZXRDb250ZXh0KGkpLHJ0LnN0YXJ0KCksbi5pc1ByZXNlbnRpbmc9ITAsbi5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fSl9O2Z1bmN0aW9uIEwob3Qpe2xldCBzdD1pLmlucHV0U291cmNlcztmb3IobGV0IFN0PTA7U3Q8eC5sZW5ndGg7U3QrKyliLnNldChzdFtTdF0seFtTdF0pO2ZvcihsZXQgU3Q9MDtTdDxvdC5yZW1vdmVkLmxlbmd0aDtTdCsrKXtsZXQgYnQ9b3QucmVtb3ZlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiYoTXQuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOmJ0fSksYi5kZWxldGUoYnQpKX1mb3IobGV0IFN0PTA7U3Q8b3QuYWRkZWQubGVuZ3RoO1N0Kyspe2xldCBidD1vdC5hZGRlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiZNdC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6YnR9KX19bGV0IFI9bmV3IGosRj1uZXcgajtmdW5jdGlvbiB6KG90LHN0LFN0KXtSLnNldEZyb21NYXRyaXhQb3NpdGlvbihzdC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24oU3QubWF0cml4V29ybGQpO2xldCBidD1SLmRpc3RhbmNlVG8oRiksTXQ9c3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxsdD1TdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEt0PU10WzE0XS8oTXRbMTBdLTEpLF90PU10WzE0XS8oTXRbMTBdKzEpLGN0PShNdFs5XSsxKS9NdFs1XSxYPShNdFs5XS0xKS9NdFs1XSxldD0oTXRbOF0tMSkvTXRbMF0sZHQ9KGx0WzhdKzEpL2x0WzBdLHE9S3QqZXQscHQ9S3QqZHQsaHQ9YnQvKC1ldCtkdCksd3Q9aHQqLWV0O3N0Lm1hdHJpeFdvcmxkLmRlY29tcG9zZShvdC5wb3NpdGlvbixvdC5xdWF0ZXJuaW9uLG90LnNjYWxlKSxvdC50cmFuc2xhdGVYKHd0KSxvdC50cmFuc2xhdGVaKGh0KSxvdC5tYXRyaXhXb3JsZC5jb21wb3NlKG90LnBvc2l0aW9uLG90LnF1YXRlcm5pb24sb3Quc2NhbGUpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQga3Q9S3QraHQsaWU9X3QraHQsZWU9cS13dCxMZT1wdCsoYnQtd3QpLGFyPWN0Kl90L2llKmt0LGZyPVgqX3QvaWUqa3Q7b3QucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoZWUsTGUsYXIsZnIsa3QsaWUpfWZ1bmN0aW9uIFUob3Qsc3Qpe3N0PT09bnVsbD9vdC5tYXRyaXhXb3JsZC5jb3B5KG90Lm1hdHJpeCk6b3QubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhzdC5tYXRyaXhXb3JsZCxvdC5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihvdCl7aWYoaT09PW51bGwpcmV0dXJuO2submVhcj1DLm5lYXI9Uy5uZWFyPW90Lm5lYXIsay5mYXI9Qy5mYXI9Uy5mYXI9b3QuZmFyLChPIT09ay5uZWFyfHxEIT09ay5mYXIpJiYoaS51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOmsubmVhcixkZXB0aEZhcjprLmZhcn0pLE89ay5uZWFyLEQ9ay5mYXIpO2xldCBzdD1vdC5wYXJlbnQsU3Q9ay5jYW1lcmFzO1UoayxzdCk7Zm9yKGxldCBNdD0wO010PFN0Lmxlbmd0aDtNdCsrKVUoU3RbTXRdLHN0KTtrLm1hdHJpeFdvcmxkLmRlY29tcG9zZShrLnBvc2l0aW9uLGsucXVhdGVybmlvbixrLnNjYWxlKSxvdC5wb3NpdGlvbi5jb3B5KGsucG9zaXRpb24pLG90LnF1YXRlcm5pb24uY29weShrLnF1YXRlcm5pb24pLG90LnNjYWxlLmNvcHkoay5zY2FsZSksb3QubWF0cml4LmNvcHkoay5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkLmNvcHkoay5tYXRyaXhXb3JsZCk7bGV0IGJ0PW90LmNoaWxkcmVuO2ZvcihsZXQgTXQ9MCxsdD1idC5sZW5ndGg7TXQ8bHQ7TXQrKylidFtNdF0udXBkYXRlTWF0cml4V29ybGQoITApO1N0Lmxlbmd0aD09PTI/eihrLFMsQyk6ay5wcm9qZWN0aW9uTWF0cml4LmNvcHkoUy5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtpZihoIT09bnVsbClyZXR1cm4gaC5maXhlZEZvdmVhdGlvbjtpZihmIT09bnVsbClyZXR1cm4gZi5maXhlZEZvdmVhdGlvbn0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24ob3Qpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1vdCksZiE9PW51bGwmJmYuZml4ZWRGb3ZlYXRpb24hPT12b2lkIDAmJihmLmZpeGVkRm92ZWF0aW9uPW90KX07bGV0IFc9bnVsbDtmdW5jdGlvbiBaKG90LHN0KXtpZihjPXN0LmdldFZpZXdlclBvc2UoYSksZD1zdCxjIT09bnVsbCl7bGV0IGJ0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKHksZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQoeSkpO2xldCBNdD0hMTtidC5sZW5ndGghPT1rLmNhbWVyYXMubGVuZ3RoJiYoay5jYW1lcmFzLmxlbmd0aD0wLE10PSEwKTtmb3IobGV0IGx0PTA7bHQ8YnQubGVuZ3RoO2x0Kyspe2xldCBLdD1idFtsdF0sX3Q9bnVsbDtpZihmIT09bnVsbClfdD1mLmdldFZpZXdwb3J0KEt0KTtlbHNle2xldCBYPXUuZ2V0Vmlld1N1YkltYWdlKGgsS3QpO190PVgudmlld3BvcnQsbHQ9PT0wJiYodC5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyh5LFguY29sb3JUZXh0dXJlLGguaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOlguZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoeSkpfWxldCBjdD1QW2x0XTtjdC5tYXRyaXguZnJvbUFycmF5KEt0LnRyYW5zZm9ybS5tYXRyaXgpLGN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEt0LnByb2plY3Rpb25NYXRyaXgpLGN0LnZpZXdwb3J0LnNldChfdC54LF90LnksX3Qud2lkdGgsX3QuaGVpZ2h0KSxsdD09PTAmJmsubWF0cml4LmNvcHkoY3QubWF0cml4KSxNdD09PSEwJiZrLmNhbWVyYXMucHVzaChjdCl9fWxldCBTdD1pLmlucHV0U291cmNlcztmb3IobGV0IGJ0PTA7YnQ8eC5sZW5ndGg7YnQrKyl7bGV0IE10PXhbYnRdLGx0PVN0W2J0XTtNdC51cGRhdGUobHQsc3QsYSl9VyYmVyhvdCxzdCksZD1udWxsfWxldCBydD1uZXcgVWZlO3J0LnNldEFuaW1hdGlvbkxvb3AoWiksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKG90KXtXPW90fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gUmdyKGUpe2Z1bmN0aW9uIHQoeSx4KXt5LmZvZ0NvbG9yLnZhbHVlLmNvcHkoeC5jb2xvcikseC5pc0ZvZz8oeS5mb2dOZWFyLnZhbHVlPXgubmVhcix5LmZvZ0Zhci52YWx1ZT14LmZhcik6eC5pc0ZvZ0V4cDImJih5LmZvZ0RlbnNpdHkudmFsdWU9eC5kZW5zaXR5KX1mdW5jdGlvbiByKHkseCxiLFMsQyl7eC5pc01lc2hCYXNpY01hdGVyaWFsP24oeSx4KTp4LmlzTWVzaExhbWJlcnRNYXRlcmlhbD8obih5LHgpLGwoeSx4KSk6eC5pc01lc2hUb29uTWF0ZXJpYWw/KG4oeSx4KSx1KHkseCkpOnguaXNNZXNoUGhvbmdNYXRlcmlhbD8obih5LHgpLGMoeSx4KSk6eC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPyhuKHkseCkseC5pc01lc2hQaHlzaWNhbE1hdGVyaWFsP2YoeSx4LEMpOmgoeSx4KSk6eC5pc01lc2hNYXRjYXBNYXRlcmlhbD8obih5LHgpLHAoeSx4KSk6eC5pc01lc2hEZXB0aE1hdGVyaWFsPyhuKHkseCksZCh5LHgpKTp4LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw/KG4oeSx4KSxnKHkseCkpOnguaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KG4oeSx4KSxfKHkseCkpOnguaXNMaW5lQmFzaWNNYXRlcmlhbD8oaSh5LHgpLHguaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJm8oeSx4KSk6eC5pc1BvaW50c01hdGVyaWFsP2EoeSx4LGIsUyk6eC5pc1Nwcml0ZU1hdGVyaWFsP3MoeSx4KTp4LmlzU2hhZG93TWF0ZXJpYWw/KHkuY29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5KTp4LmlzU2hhZGVyTWF0ZXJpYWwmJih4LnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9ZnVuY3Rpb24gbih5LHgpe3kub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseC5jb2xvciYmeS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseC5lbWlzc2l2ZSYmeS5lbWlzc2l2ZS52YWx1ZS5jb3B5KHguZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHguZW1pc3NpdmVJbnRlbnNpdHkpLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguc3BlY3VsYXJNYXAmJih5LnNwZWN1bGFyTWFwLnZhbHVlPXguc3BlY3VsYXJNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IGI9ZS5nZXQoeCkuZW52TWFwO2ImJih5LmVudk1hcC52YWx1ZT1iLHkuZmxpcEVudk1hcC52YWx1ZT1iLmlzQ3ViZVRleHR1cmUmJmIuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSx5LnJlZmxlY3Rpdml0eS52YWx1ZT14LnJlZmxlY3Rpdml0eSx5Lmlvci52YWx1ZT14Lmlvcix5LnJlZnJhY3Rpb25SYXRpby52YWx1ZT14LnJlZnJhY3Rpb25SYXRpbykseC5saWdodE1hcCYmKHkubGlnaHRNYXAudmFsdWU9eC5saWdodE1hcCx5LmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPXgubGlnaHRNYXBJbnRlbnNpdHkpLHguYW9NYXAmJih5LmFvTWFwLnZhbHVlPXguYW9NYXAseS5hb01hcEludGVuc2l0eS52YWx1ZT14LmFvTWFwSW50ZW5zaXR5KTtsZXQgUzt4Lm1hcD9TPXgubWFwOnguc3BlY3VsYXJNYXA/Uz14LnNwZWN1bGFyTWFwOnguZGlzcGxhY2VtZW50TWFwP1M9eC5kaXNwbGFjZW1lbnRNYXA6eC5ub3JtYWxNYXA/Uz14Lm5vcm1hbE1hcDp4LmJ1bXBNYXA/Uz14LmJ1bXBNYXA6eC5yb3VnaG5lc3NNYXA/Uz14LnJvdWdobmVzc01hcDp4Lm1ldGFsbmVzc01hcD9TPXgubWV0YWxuZXNzTWFwOnguYWxwaGFNYXA/Uz14LmFscGhhTWFwOnguZW1pc3NpdmVNYXA/Uz14LmVtaXNzaXZlTWFwOnguY2xlYXJjb2F0TWFwP1M9eC5jbGVhcmNvYXRNYXA6eC5jbGVhcmNvYXROb3JtYWxNYXA/Uz14LmNsZWFyY29hdE5vcm1hbE1hcDp4LmNsZWFyY29hdFJvdWdobmVzc01hcD9TPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwOnguc3BlY3VsYXJJbnRlbnNpdHlNYXA/Uz14LnNwZWN1bGFySW50ZW5zaXR5TWFwOnguc3BlY3VsYXJDb2xvck1hcD9TPXguc3BlY3VsYXJDb2xvck1hcDp4LnRyYW5zbWlzc2lvbk1hcD9TPXgudHJhbnNtaXNzaW9uTWFwOngudGhpY2tuZXNzTWFwP1M9eC50aGlja25lc3NNYXA6eC5zaGVlbkNvbG9yTWFwP1M9eC5zaGVlbkNvbG9yTWFwOnguc2hlZW5Sb3VnaG5lc3NNYXAmJihTPXguc2hlZW5Sb3VnaG5lc3NNYXApLFMhPT12b2lkIDAmJihTLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihTPVMudGV4dHVyZSksUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFMubWF0cml4KSk7bGV0IEM7eC5hb01hcD9DPXguYW9NYXA6eC5saWdodE1hcCYmKEM9eC5saWdodE1hcCksQyE9PXZvaWQgMCYmKEMuaXNXZWJHTFJlbmRlclRhcmdldCYmKEM9Qy50ZXh0dXJlKSxDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2MlRyYW5zZm9ybS52YWx1ZS5jb3B5KEMubWF0cml4KSl9ZnVuY3Rpb24gaSh5LHgpe3kuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHkub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHl9ZnVuY3Rpb24gbyh5LHgpe3kuZGFzaFNpemUudmFsdWU9eC5kYXNoU2l6ZSx5LnRvdGFsU2l6ZS52YWx1ZT14LmRhc2hTaXplK3guZ2FwU2l6ZSx5LnNjYWxlLnZhbHVlPXguc2NhbGV9ZnVuY3Rpb24gYSh5LHgsYixTKXt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHkuc2l6ZS52YWx1ZT14LnNpemUqYix5LnNjYWxlLnZhbHVlPVMqLjUseC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgQzt4Lm1hcD9DPXgubWFwOnguYWxwaGFNYXAmJihDPXguYWxwaGFNYXApLEMhPT12b2lkIDAmJihDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoQy5tYXRyaXgpKX1mdW5jdGlvbiBzKHkseCl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnJvdGF0aW9uLnZhbHVlPXgucm90YXRpb24seC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgYjt4Lm1hcD9iPXgubWFwOnguYWxwaGFNYXAmJihiPXguYWxwaGFNYXApLGIhPT12b2lkIDAmJihiLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmYi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoYi5tYXRyaXgpKX1mdW5jdGlvbiBsKHkseCl7eC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCl9ZnVuY3Rpb24gYyh5LHgpe3kuc3BlY3VsYXIudmFsdWUuY29weSh4LnNwZWN1bGFyKSx5LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heCh4LnNoaW5pbmVzcywxZS00KSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIHUoeSx4KXt4LmdyYWRpZW50TWFwJiYoeS5ncmFkaWVudE1hcC52YWx1ZT14LmdyYWRpZW50TWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGgoeSx4KXt5LnJvdWdobmVzcy52YWx1ZT14LnJvdWdobmVzcyx5Lm1ldGFsbmVzcy52YWx1ZT14Lm1ldGFsbmVzcyx4LnJvdWdobmVzc01hcCYmKHkucm91Z2huZXNzTWFwLnZhbHVlPXgucm91Z2huZXNzTWFwKSx4Lm1ldGFsbmVzc01hcCYmKHkubWV0YWxuZXNzTWFwLnZhbHVlPXgubWV0YWxuZXNzTWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpLGUuZ2V0KHgpLmVudk1hcCYmKHkuZW52TWFwSW50ZW5zaXR5LnZhbHVlPXguZW52TWFwSW50ZW5zaXR5KX1mdW5jdGlvbiBmKHkseCxiKXtoKHkseCkseS5pb3IudmFsdWU9eC5pb3IseC5zaGVlbj4wJiYoeS5zaGVlbkNvbG9yLnZhbHVlLmNvcHkoeC5zaGVlbkNvbG9yKS5tdWx0aXBseVNjYWxhcih4LnNoZWVuKSx5LnNoZWVuUm91Z2huZXNzLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3MseC5zaGVlbkNvbG9yTWFwJiYoeS5zaGVlbkNvbG9yTWFwLnZhbHVlPXguc2hlZW5Db2xvck1hcCkseC5zaGVlblJvdWdobmVzc01hcCYmKHkuc2hlZW5Sb3VnaG5lc3NNYXAudmFsdWU9eC5zaGVlblJvdWdobmVzc01hcCkpLHguY2xlYXJjb2F0PjAmJih5LmNsZWFyY29hdC52YWx1ZT14LmNsZWFyY29hdCx5LmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzcyx4LmNsZWFyY29hdE1hcCYmKHkuY2xlYXJjb2F0TWFwLnZhbHVlPXguY2xlYXJjb2F0TWFwKSx4LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwKSx4LmNsZWFyY29hdE5vcm1hbE1hcCYmKHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUuY29weSh4LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx5LmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZT14LmNsZWFyY29hdE5vcm1hbE1hcCx4LnNpZGU9PT1JaSYmeS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkpLHgudHJhbnNtaXNzaW9uPjAmJih5LnRyYW5zbWlzc2lvbi52YWx1ZT14LnRyYW5zbWlzc2lvbix5LnRyYW5zbWlzc2lvblNhbXBsZXJNYXAudmFsdWU9Yi50ZXh0dXJlLHkudHJhbnNtaXNzaW9uU2FtcGxlclNpemUudmFsdWUuc2V0KGIud2lkdGgsYi5oZWlnaHQpLHgudHJhbnNtaXNzaW9uTWFwJiYoeS50cmFuc21pc3Npb25NYXAudmFsdWU9eC50cmFuc21pc3Npb25NYXApLHkudGhpY2tuZXNzLnZhbHVlPXgudGhpY2tuZXNzLHgudGhpY2tuZXNzTWFwJiYoeS50aGlja25lc3NNYXAudmFsdWU9eC50aGlja25lc3NNYXApLHkuYXR0ZW51YXRpb25EaXN0YW5jZS52YWx1ZT14LmF0dGVudWF0aW9uRGlzdGFuY2UseS5hdHRlbnVhdGlvbkNvbG9yLnZhbHVlLmNvcHkoeC5hdHRlbnVhdGlvbkNvbG9yKSkseS5zcGVjdWxhckludGVuc2l0eS52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5LHkuc3BlY3VsYXJDb2xvci52YWx1ZS5jb3B5KHguc3BlY3VsYXJDb2xvcikseC5zcGVjdWxhckludGVuc2l0eU1hcCYmKHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eU1hcCkseC5zcGVjdWxhckNvbG9yTWFwJiYoeS5zcGVjdWxhckNvbG9yTWFwLnZhbHVlPXguc3BlY3VsYXJDb2xvck1hcCl9ZnVuY3Rpb24gcCh5LHgpe3gubWF0Y2FwJiYoeS5tYXRjYXAudmFsdWU9eC5tYXRjYXApLHguYnVtcE1hcCYmKHkuYnVtcE1hcC52YWx1ZT14LmJ1bXBNYXAseS5idW1wU2NhbGUudmFsdWU9eC5idW1wU2NhbGUseC5zaWRlPT09SWkmJih5LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx4Lm5vcm1hbE1hcCYmKHkubm9ybWFsTWFwLnZhbHVlPXgubm9ybWFsTWFwLHkubm9ybWFsU2NhbGUudmFsdWUuY29weSh4Lm5vcm1hbFNjYWxlKSx4LnNpZGU9PT1JaSYmeS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseC5kaXNwbGFjZW1lbnRNYXAmJih5LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gZCh5LHgpe3guZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGcoeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSx5LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeC5yZWZlcmVuY2VQb3NpdGlvbikseS5uZWFyRGlzdGFuY2UudmFsdWU9eC5uZWFyRGlzdGFuY2UseS5mYXJEaXN0YW5jZS52YWx1ZT14LmZhckRpc3RhbmNlfWZ1bmN0aW9uIF8oeSx4KXt4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6dCxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpyfX1mdW5jdGlvbiBOZ3IoKXtsZXQgZT10NigiY2FudmFzIik7cmV0dXJuIGUuc3R5bGUuZGlzcGxheT0iYmxvY2siLGV9ZnVuY3Rpb24gcm4oZT17fSl7bGV0IHQ9ZS5jYW52YXMhPT12b2lkIDA/ZS5jYW52YXM6TmdyKCkscj1lLmNvbnRleHQhPT12b2lkIDA/ZS5jb250ZXh0Om51bGwsbj1lLmFscGhhIT09dm9pZCAwP2UuYWxwaGE6ITEsaT1lLmRlcHRoIT09dm9pZCAwP2UuZGVwdGg6ITAsbz1lLnN0ZW5jaWwhPT12b2lkIDA/ZS5zdGVuY2lsOiEwLGE9ZS5hbnRpYWxpYXMhPT12b2lkIDA/ZS5hbnRpYWxpYXM6ITEscz1lLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9lLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP2UucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9ZS5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/ZS5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP2UuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLHA9W10sZD1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPVFkLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz1LZCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgZz10aGlzLF89ITEseT0wLHg9MCxiPW51bGwsUz0tMSxDPW51bGwsUD1uZXcgZW4saz1uZXcgZW4sTz1udWxsLEQ9dC53aWR0aCxCPXQuaGVpZ2h0LEk9MSxMPW51bGwsUj1udWxsLEY9bmV3IGVuKDAsMCxELEIpLHo9bmV3IGVuKDAsMCxELEIpLFU9ITEsVz1uZXcgTjEsWj0hMSxydD0hMSxvdD1udWxsLHN0PW5ldyBNZSxTdD1uZXcgaixidD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIE10KCl7cmV0dXJuIGI9PT1udWxsP0k6MX1sZXQgbHQ9cjtmdW5jdGlvbiBLdChLLGd0KXtmb3IobGV0IEV0PTA7RXQ8Sy5sZW5ndGg7RXQrKyl7bGV0IHh0PUtbRXRdLEZ0PXQuZ2V0Q29udGV4dCh4dCxndCk7aWYoRnQhPT1udWxsKXJldHVybiBGdH1yZXR1cm4gbnVsbH10cnl7bGV0IEs9e2FscGhhOiEwLGRlcHRoOmksc3RlbmNpbDpvLGFudGlhbGlhczphLHByZW11bHRpcGxpZWRBbHBoYTpzLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLGB0aHJlZS5qcyByJHtqVX1gKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZlLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixhdCwhMSksbHQ9PT1udWxsKXtsZXQgZ3Q9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKGcuaXNXZWJHTDFSZW5kZXJlcj09PSEwJiZndC5zaGlmdCgpLGx0PUt0KGd0LEspLGx0PT09bnVsbCl0aHJvdyBLdChndCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX1sdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9PT12b2lkIDAmJihsdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKEspe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrSy5tZXNzYWdlKSxLfWxldCBfdCxjdCxYLGV0LGR0LHEscHQsaHQsd3Qsa3QsaWUsZWUsTGUsYXIsZnIsdHQsJCxJdCwkdCxoZSxUdCxiZSxudDtmdW5jdGlvbiBDdCgpe190PW5ldyBubXIobHQpLGN0PW5ldyBaZHIobHQsX3QsZSksX3QuaW5pdChjdCksYmU9bmV3IFFmZShsdCxfdCxjdCksWD1uZXcgSWdyKGx0LF90LGN0KSxldD1uZXcgYW1yKGx0KSxkdD1uZXcgdmdyLHE9bmV3IExncihsdCxfdCxYLGR0LGN0LGJlLGV0KSxwdD1uZXcgUWRyKGcpLGh0PW5ldyBybXIoZyksd3Q9bmV3IGJmcihsdCxjdCksbnQ9bmV3ICRkcihsdCxfdCx3dCxjdCksa3Q9bmV3IGltcihsdCx3dCxldCxudCksaWU9bmV3IHVtcihsdCxrdCx3dCxldCksJHQ9bmV3IGNtcihsdCxjdCxxKSx0dD1uZXcgSmRyKGR0KSxlZT1uZXcgeWdyKGcscHQsaHQsX3QsY3QsbnQsdHQpLExlPW5ldyBSZ3IoZHQpLGFyPW5ldyBiZ3IsZnI9bmV3IENncihfdCxjdCksSXQ9bmV3IFhkcihnLHB0LFgsaWUsbixzKSwkPW5ldyBKZmUoZyxpZSxjdCksaGU9bmV3IEtkcihsdCxfdCxldCxjdCksVHQ9bmV3IG9tcihsdCxfdCxldCxjdCksZXQucHJvZ3JhbXM9ZWUucHJvZ3JhbXMsZy5jYXBhYmlsaXRpZXM9Y3QsZy5leHRlbnNpb25zPV90LGcucHJvcGVydGllcz1kdCxnLnJlbmRlckxpc3RzPWFyLGcuc2hhZG93TWFwPSQsZy5zdGF0ZT1YLGcuaW5mbz1ldH1DdCgpO2xldCBXdD1uZXcgZWh0KGcsbHQpO3RoaXMueHI9V3QsdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGx0fSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGx0LmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBLPV90LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7SyYmSy5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgSz1fdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0smJksucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIEl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihLKXtLIT09dm9pZCAwJiYoST1LLHRoaXMuc2V0U2l6ZShELEIsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKEspe3JldHVybiBLLnNldChELEIpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oSyxndCxFdCl7aWYoV3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn1EPUssQj1ndCx0LndpZHRoPU1hdGguZmxvb3IoSypJKSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkkpLEV0IT09ITEmJih0LnN0eWxlLndpZHRoPUsrInB4Iix0LnN0eWxlLmhlaWdodD1ndCsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLKXtyZXR1cm4gSy5zZXQoRCpJLEIqSSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLLGd0LEV0KXtEPUssQj1ndCxJPUV0LHQud2lkdGg9TWF0aC5mbG9vcihLKkV0KSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkV0KSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShQKX0sdGhpcy5nZXRWaWV3cG9ydD1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEYpfSx0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKEssZ3QsRXQseHQpe0suaXNWZWN0b3I0P0Yuc2V0KEsueCxLLnksSy56LEsudyk6Ri5zZXQoSyxndCxFdCx4dCksWC52aWV3cG9ydChQLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoSSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3Nvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KHopfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oSyxndCxFdCx4dCl7Sy5pc1ZlY3RvcjQ/ei5zZXQoSy54LEsueSxLLnosSy53KTp6LnNldChLLGd0LEV0LHh0KSxYLnNjaXNzb3Ioay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIFV9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oSyl7WC5zZXRTY2lzc29yVGVzdChVPUspfSx0aGlzLnNldE9wYXF1ZVNvcnQ9ZnVuY3Rpb24oSyl7TD1LfSx0aGlzLnNldFRyYW5zcGFyZW50U29ydD1mdW5jdGlvbihLKXtSPUt9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEl0LmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe0l0LnNldENsZWFyQ29sb3IuYXBwbHkoSXQsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIEl0LmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7SXQuc2V0Q2xlYXJBbHBoYS5hcHBseShJdCxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKEssZ3QsRXQpe2xldCB4dD0wOyhLPT09dm9pZCAwfHxLKSYmKHh0fD0xNjM4NCksKGd0PT09dm9pZCAwfHxndCkmJih4dHw9MjU2KSwoRXQ9PT12b2lkIDB8fEV0KSYmKHh0fD0xMDI0KSxsdC5jbGVhcih4dCl9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmZSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYXQsITEpLGFyLmRpc3Bvc2UoKSxmci5kaXNwb3NlKCksZHQuZGlzcG9zZSgpLHB0LmRpc3Bvc2UoKSxodC5kaXNwb3NlKCksaWUuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxlZS5kaXNwb3NlKCksV3QuZGlzcG9zZSgpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsemUpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHluKSxvdCYmKG90LmRpc3Bvc2UoKSxvdD1udWxsKSxXaS5zdG9wKCl9O2Z1bmN0aW9uIGZlKEspe0sucHJldmVudERlZmF1bHQoKSxjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LiIpLF89ITB9ZnVuY3Rpb24gYXQoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSxfPSExO2xldCBLPWV0LmF1dG9SZXNldCxndD0kLmVuYWJsZWQsRXQ9JC5hdXRvVXBkYXRlLHh0PSQubmVlZHNVcGRhdGUsRnQ9JC50eXBlO0N0KCksZXQuYXV0b1Jlc2V0PUssJC5lbmFibGVkPWd0LCQuYXV0b1VwZGF0ZT1FdCwkLm5lZWRzVXBkYXRlPXh0LCQudHlwZT1GdH1mdW5jdGlvbiBzZShLKXtsZXQgZ3Q9Sy50YXJnZXQ7Z3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsc2UpLFF0KGd0KX1mdW5jdGlvbiBRdChLKXtDZShLKSxkdC5yZW1vdmUoSyl9ZnVuY3Rpb24gQ2UoSyl7bGV0IGd0PWR0LmdldChLKS5wcm9ncmFtcztndCE9PXZvaWQgMCYmKGd0LmZvckVhY2goZnVuY3Rpb24oRXQpe2VlLnJlbGVhc2VQcm9ncmFtKEV0KX0pLEsuaXNTaGFkZXJNYXRlcmlhbCYmZWUucmVsZWFzZVNoYWRlckNhY2hlKEspKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0LFZlKXtndD09PW51bGwmJihndD1idCk7bGV0IFVlPUZ0LmlzTWVzaCYmRnQubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHRyPWNuKEssZ3QsRXQseHQsRnQpO1guc2V0TWF0ZXJpYWwoeHQsVWUpO2xldCBLZT1FdC5pbmRleCxYcj1FdC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKEtlPT09bnVsbCl7aWYoWHI9PT12b2lkIDB8fFhyLmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihLZS5jb3VudD09PTApcmV0dXJuO2xldCBfcj0xO3h0LndpcmVmcmFtZT09PSEwJiYoS2U9a3QuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKEV0KSxfcj0yKSxudC5zZXR1cChGdCx4dCx0cixFdCxLZSk7bGV0IFByLGpuPWhlO0tlIT09bnVsbCYmKFByPXd0LmdldChLZSksam49VHQsam4uc2V0SW5kZXgoUHIpKTtsZXQgbnA9S2UhPT1udWxsP0tlLmNvdW50OlhyLmNvdW50LHVtPUV0LmRyYXdSYW5nZS5zdGFydCpfcixtcj1FdC5kcmF3UmFuZ2UuY291bnQqX3IsRmw9VmUhPT1udWxsP1ZlLnN0YXJ0Kl9yOjAsWG49VmUhPT1udWxsP1ZlLmNvdW50Kl9yOjEvMCxCbD1NYXRoLm1heCh1bSxGbCksdXg9TWF0aC5taW4obnAsdW0rbXIsRmwrWG4pLTEsSGw9TWF0aC5tYXgoMCx1eC1CbCsxKTtpZihIbCE9PTApe2lmKEZ0LmlzTWVzaCl4dC53aXJlZnJhbWU9PT0hMD8oWC5zZXRMaW5lV2lkdGgoeHQud2lyZWZyYW1lTGluZXdpZHRoKk10KCkpLGpuLnNldE1vZGUoMSkpOmpuLnNldE1vZGUoNCk7ZWxzZSBpZihGdC5pc0xpbmUpe2xldCBWbD14dC5saW5ld2lkdGg7Vmw9PT12b2lkIDAmJihWbD0xKSxYLnNldExpbmVXaWR0aChWbCpNdCgpKSxGdC5pc0xpbmVTZWdtZW50cz9qbi5zZXRNb2RlKDEpOkZ0LmlzTGluZUxvb3A/am4uc2V0TW9kZSgyKTpqbi5zZXRNb2RlKDMpfWVsc2UgRnQuaXNQb2ludHM/am4uc2V0TW9kZSgwKTpGdC5pc1Nwcml0ZSYmam4uc2V0TW9kZSg0KTtpZihGdC5pc0luc3RhbmNlZE1lc2gpam4ucmVuZGVySW5zdGFuY2VzKEJsLEhsLEZ0LmNvdW50KTtlbHNlIGlmKEV0LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpe2xldCBWbD1NYXRoLm1pbihFdC5pbnN0YW5jZUNvdW50LEV0Ll9tYXhJbnN0YW5jZUNvdW50KTtqbi5yZW5kZXJJbnN0YW5jZXMoQmwsSGwsVmwpfWVsc2Ugam4ucmVuZGVyKEJsLEhsKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbihLLGd0KXtmPWZyLmdldChLKSxmLmluaXQoKSxkLnB1c2goZiksSy50cmF2ZXJzZVZpc2libGUoZnVuY3Rpb24oRXQpe0V0LmlzTGlnaHQmJkV0LmxheWVycy50ZXN0KGd0LmxheWVycykmJihmLnB1c2hMaWdodChFdCksRXQuY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KEV0KSl9KSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEsudHJhdmVyc2UoZnVuY3Rpb24oRXQpe2xldCB4dD1FdC5tYXRlcmlhbDtpZih4dClpZihBcnJheS5pc0FycmF5KHh0KSlmb3IobGV0IEZ0PTA7RnQ8eHQubGVuZ3RoO0Z0Kyspe2xldCBWZT14dFtGdF07Y20oVmUsSyxFdCl9ZWxzZSBjbSh4dCxLLEV0KX0pLGQucG9wKCksZj1udWxsfTtsZXQgUHQ9bnVsbDtmdW5jdGlvbiBOdChLKXtQdCYmUHQoSyl9ZnVuY3Rpb24gemUoKXtXaS5zdG9wKCl9ZnVuY3Rpb24geW4oKXtXaS5zdGFydCgpfWxldCBXaT1uZXcgVWZlO1dpLnNldEFuaW1hdGlvbkxvb3AoTnQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZXaS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKEspe1B0PUssV3Quc2V0QW5pbWF0aW9uTG9vcChLKSxLPT09bnVsbD9XaS5zdG9wKCk6V2kuc3RhcnQoKX0sV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0Iix6ZSksV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIseW4pLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEssZ3Qpe2lmKGd0IT09dm9pZCAwJiZndC5pc0NhbWVyYSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7cmV0dXJufWlmKF89PT0hMClyZXR1cm47Sy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlTWF0cml4V29ybGQoKSxndC5wYXJlbnQ9PT1udWxsJiZndC51cGRhdGVNYXRyaXhXb3JsZCgpLFd0LmVuYWJsZWQ9PT0hMCYmV3QuaXNQcmVzZW50aW5nPT09ITAmJihXdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJld0LnVwZGF0ZUNhbWVyYShndCksZ3Q9V3QuZ2V0Q2FtZXJhKCkpLEsuaXNTY2VuZT09PSEwJiZLLm9uQmVmb3JlUmVuZGVyKGcsSyxndCxiKSxmPWZyLmdldChLLGQubGVuZ3RoKSxmLmluaXQoKSxkLnB1c2goZiksc3QubXVsdGlwbHlNYXRyaWNlcyhndC5wcm9qZWN0aW9uTWF0cml4LGd0Lm1hdHJpeFdvcmxkSW52ZXJzZSksVy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzdCkscnQ9dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCxaPXR0LmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxydCxndCksaD1hci5nZXQoSyxwLmxlbmd0aCksaC5pbml0KCkscC5wdXNoKGgpLEFyKEssZ3QsMCxnLnNvcnRPYmplY3RzKSxoLmZpbmlzaCgpLGcuc29ydE9iamVjdHM9PT0hMCYmaC5zb3J0KEwsUiksWj09PSEwJiZ0dC5iZWdpblNoYWRvd3MoKTtsZXQgRXQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYoJC5yZW5kZXIoRXQsSyxndCksWj09PSEwJiZ0dC5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxJdC5yZW5kZXIoaCxLKSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLGd0LmlzQXJyYXlDYW1lcmEpe2xldCB4dD1ndC5jYW1lcmFzO2ZvcihsZXQgRnQ9MCxWZT14dC5sZW5ndGg7RnQ8VmU7RnQrKyl7bGV0IFVlPXh0W0Z0XTtQYShoLEssVWUsVWUudmlld3BvcnQpfX1lbHNlIFBhKGgsSyxndCk7YiE9PW51bGwmJihxLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KGIpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpKSxLLmlzU2NlbmU9PT0hMCYmSy5vbkFmdGVyUmVuZGVyKGcsSyxndCksWC5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLFguYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxYLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksWC5zZXRQb2x5Z29uT2Zmc2V0KCExKSxudC5yZXNldERlZmF1bHRTdGF0ZSgpLFM9LTEsQz1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9mPWRbZC5sZW5ndGgtMV06Zj1udWxsLHAucG9wKCkscC5sZW5ndGg+MD9oPXBbcC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBBcihLLGd0LEV0LHh0KXtpZihLLnZpc2libGU9PT0hMSlyZXR1cm47aWYoSy5sYXllcnMudGVzdChndC5sYXllcnMpKXtpZihLLmlzR3JvdXApRXQ9Sy5yZW5kZXJPcmRlcjtlbHNlIGlmKEsuaXNMT0QpSy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlKGd0KTtlbHNlIGlmKEsuaXNMaWdodClmLnB1c2hMaWdodChLKSxLLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhLKTtlbHNlIGlmKEsuaXNTcHJpdGUpe2lmKCFLLmZydXN0dW1DdWxsZWR8fFcuaW50ZXJzZWN0c1Nwcml0ZShLKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDt0ci52aXNpYmxlJiZoLnB1c2goSyxVZSx0cixFdCxTdC56LG51bGwpfX1lbHNlIGlmKChLLmlzTWVzaHx8Sy5pc0xpbmV8fEsuaXNQb2ludHMpJiYoSy5pc1NraW5uZWRNZXNoJiZLLnNrZWxldG9uLmZyYW1lIT09ZXQucmVuZGVyLmZyYW1lJiYoSy5za2VsZXRvbi51cGRhdGUoKSxLLnNrZWxldG9uLmZyYW1lPWV0LnJlbmRlci5mcmFtZSksIUsuZnJ1c3R1bUN1bGxlZHx8Vy5pbnRlcnNlY3RzT2JqZWN0KEspKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHRyKSl7bGV0IEtlPVVlLmdyb3Vwcztmb3IobGV0IFhyPTAsX3I9S2UubGVuZ3RoO1hyPF9yO1hyKyspe2xldCBQcj1LZVtYcl0sam49dHJbUHIubWF0ZXJpYWxJbmRleF07am4mJmpuLnZpc2libGUmJmgucHVzaChLLFVlLGpuLEV0LFN0LnosUHIpfX1lbHNlIHRyLnZpc2libGUmJmgucHVzaChLLFVlLHRyLEV0LFN0LnosbnVsbCl9fWxldCBWZT1LLmNoaWxkcmVuO2ZvcihsZXQgVWU9MCx0cj1WZS5sZW5ndGg7VWU8dHI7VWUrKylBcihWZVtVZV0sZ3QsRXQseHQpfWZ1bmN0aW9uIFBhKEssZ3QsRXQseHQpe2xldCBGdD1LLm9wYXF1ZSxWZT1LLnRyYW5zbWlzc2l2ZSxVZT1LLnRyYW5zcGFyZW50O2Yuc2V0dXBMaWdodHNWaWV3KEV0KSxWZS5sZW5ndGg+MCYmaG8oRnQsZ3QsRXQpLHh0JiZYLnZpZXdwb3J0KFAuY29weSh4dCkpLEZ0Lmxlbmd0aD4wJiZJYShGdCxndCxFdCksVmUubGVuZ3RoPjAmJklhKFZlLGd0LEV0KSxVZS5sZW5ndGg+MCYmSWEoVWUsZ3QsRXQpfWZ1bmN0aW9uIGhvKEssZ3QsRXQpe2lmKG90PT09bnVsbCl7bGV0IFVlPWE9PT0hMCYmY3QuaXNXZWJHTDI9PT0hMD9qMzp1cztvdD1uZXcgVWUoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpiZS5jb252ZXJ0KEMxKSE9PW51bGw/QzE6WmQsbWluRmlsdGVyOm94LG1hZ0ZpbHRlcjpMaSx3cmFwUzpKbyx3cmFwVDpKbyx1c2VSZW5kZXJUb1RleHR1cmU6X3QuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0pfWxldCB4dD1nLmdldFJlbmRlclRhcmdldCgpO2cuc2V0UmVuZGVyVGFyZ2V0KG90KSxnLmNsZWFyKCk7bGV0IEZ0PWcudG9uZU1hcHBpbmc7Zy50b25lTWFwcGluZz1LZCxJYShLLGd0LEV0KSxnLnRvbmVNYXBwaW5nPUZ0LHEudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQob3QpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKG90KSxnLnNldFJlbmRlclRhcmdldCh4dCl9ZnVuY3Rpb24gSWEoSyxndCxFdCl7bGV0IHh0PWd0LmlzU2NlbmU9PT0hMD9ndC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBGdD0wLFZlPUsubGVuZ3RoO0Z0PFZlO0Z0Kyspe2xldCBVZT1LW0Z0XSx0cj1VZS5vYmplY3QsS2U9VWUuZ2VvbWV0cnksWHI9eHQ9PT1udWxsP1VlLm1hdGVyaWFsOnh0LF9yPVVlLmdyb3VwO3RyLmxheWVycy50ZXN0KEV0LmxheWVycykmJmx4KHRyLGd0LEV0LEtlLFhyLF9yKX19ZnVuY3Rpb24gbHgoSyxndCxFdCx4dCxGdCxWZSl7Sy5vbkJlZm9yZVJlbmRlcihnLGd0LEV0LHh0LEZ0LFZlKSxLLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKEV0Lm1hdHJpeFdvcmxkSW52ZXJzZSxLLm1hdHJpeFdvcmxkKSxLLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoSy5tb2RlbFZpZXdNYXRyaXgpLEZ0Lm9uQmVmb3JlUmVuZGVyKGcsZ3QsRXQseHQsSyxWZSksRnQudHJhbnNwYXJlbnQ9PT0hMCYmRnQuc2lkZT09PUwxPyhGdC5zaWRlPUlpLEZ0Lm5lZWRzVXBkYXRlPSEwLGcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEZ0LnNpZGU9STEsRnQubmVlZHNVcGRhdGU9ITAsZy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksRnQuc2lkZT1MMSk6Zy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksSy5vbkFmdGVyUmVuZGVyKGcsZ3QsRXQseHQsRnQsVmUpfWZ1bmN0aW9uIGNtKEssZ3QsRXQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KTtsZXQgeHQ9ZHQuZ2V0KEspLEZ0PWYuc3RhdGUubGlnaHRzLFZlPWYuc3RhdGUuc2hhZG93c0FycmF5LFVlPUZ0LnN0YXRlLnZlcnNpb24sdHI9ZWUuZ2V0UGFyYW1ldGVycyhLLEZ0LnN0YXRlLFZlLGd0LEV0KSxLZT1lZS5nZXRQcm9ncmFtQ2FjaGVLZXkodHIpLFhyPXh0LnByb2dyYW1zO3h0LmVudmlyb25tZW50PUsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ndC5lbnZpcm9ubWVudDpudWxsLHh0LmZvZz1ndC5mb2cseHQuZW52TWFwPShLLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldChLLmVudk1hcHx8eHQuZW52aXJvbm1lbnQpLFhyPT09dm9pZCAwJiYoSy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzZSksWHI9bmV3IE1hcCx4dC5wcm9ncmFtcz1Ycik7bGV0IF9yPVhyLmdldChLZSk7aWYoX3IhPT12b2lkIDApe2lmKHh0LmN1cnJlbnRQcm9ncmFtPT09X3ImJnh0LmxpZ2h0c1N0YXRlVmVyc2lvbj09PVVlKXJldHVybiBKMChLLHRyKSxfcn1lbHNlIHRyLnVuaWZvcm1zPWVlLmdldFVuaWZvcm1zKEspLEsub25CdWlsZChFdCx0cixnKSxLLm9uQmVmb3JlQ29tcGlsZSh0cixnKSxfcj1lZS5hY3F1aXJlUHJvZ3JhbSh0cixLZSksWHIuc2V0KEtlLF9yKSx4dC51bmlmb3Jtcz10ci51bmlmb3JtcztsZXQgUHI9eHQudW5pZm9ybXM7KCFLLmlzU2hhZGVyTWF0ZXJpYWwmJiFLLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fEsuY2xpcHBpbmc9PT0hMCkmJihQci5jbGlwcGluZ1BsYW5lcz10dC51bmlmb3JtKSxKMChLLHRyKSx4dC5uZWVkc0xpZ2h0cz1ycChLKSx4dC5saWdodHNTdGF0ZVZlcnNpb249VWUseHQubmVlZHNMaWdodHMmJihQci5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1GdC5zdGF0ZS5hbWJpZW50LFByLmxpZ2h0UHJvYmUudmFsdWU9RnQuc3RhdGUucHJvYmUsUHIuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWwsUHIuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3csUHIuc3BvdExpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5zcG90LFByLnNwb3RMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuc3BvdFNoYWRvdyxQci5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYSxQci5sdGNfMS52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYUxUQzEsUHIubHRjXzIudmFsdWU9RnQuc3RhdGUucmVjdEFyZWFMVEMyLFByLnBvaW50TGlnaHRzLnZhbHVlPUZ0LnN0YXRlLnBvaW50LFByLnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93LFByLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9RnQuc3RhdGUuaGVtaSxQci5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcCxQci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCxQci5zcG90U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnNwb3RTaGFkb3dNYXAsUHIuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5zcG90U2hhZG93TWF0cml4LFByLnBvaW50U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWFwLFByLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgam49X3IuZ2V0VW5pZm9ybXMoKSxucD1CMC5zZXFXaXRoVmFsdWUoam4uc2VxLFByKTtyZXR1cm4geHQuY3VycmVudFByb2dyYW09X3IseHQudW5pZm9ybXNMaXN0PW5wLF9yfWZ1bmN0aW9uIEowKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQub3V0cHV0RW5jb2Rpbmc9Z3Qub3V0cHV0RW5jb2RpbmcsRXQuaW5zdGFuY2luZz1ndC5pbnN0YW5jaW5nLEV0LnNraW5uaW5nPWd0LnNraW5uaW5nLEV0Lm1vcnBoVGFyZ2V0cz1ndC5tb3JwaFRhcmdldHMsRXQubW9ycGhOb3JtYWxzPWd0Lm1vcnBoTm9ybWFscyxFdC5tb3JwaFRhcmdldHNDb3VudD1ndC5tb3JwaFRhcmdldHNDb3VudCxFdC5udW1DbGlwcGluZ1BsYW5lcz1ndC5udW1DbGlwcGluZ1BsYW5lcyxFdC5udW1JbnRlcnNlY3Rpb249Z3QubnVtQ2xpcEludGVyc2VjdGlvbixFdC52ZXJ0ZXhBbHBoYXM9Z3QudmVydGV4QWxwaGFzLEV0LnZlcnRleFRhbmdlbnRzPWd0LnZlcnRleFRhbmdlbnRzLEV0LnRvbmVNYXBwaW5nPWd0LnRvbmVNYXBwaW5nfWZ1bmN0aW9uIGNuKEssZ3QsRXQseHQsRnQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KSxxLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFZlPWd0LmZvZyxVZT14dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2d0LmVudmlyb25tZW50Om51bGwsdHI9Yj09PW51bGw/Zy5vdXRwdXRFbmNvZGluZzpiLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9iLnRleHR1cmUuZW5jb2Rpbmc6UWQsS2U9KHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldCh4dC5lbnZNYXB8fFVlKSxYcj14dC52ZXJ0ZXhDb2xvcnM9PT0hMCYmISFFdC5hdHRyaWJ1dGVzLmNvbG9yJiZFdC5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCxfcj0hIXh0Lm5vcm1hbE1hcCYmISFFdC5hdHRyaWJ1dGVzLnRhbmdlbnQsUHI9ISFFdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sam49ISFFdC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLG5wPUV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9FdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsdW09eHQudG9uZU1hcHBlZD9nLnRvbmVNYXBwaW5nOktkLG1yPWR0LmdldCh4dCksRmw9Zi5zdGF0ZS5saWdodHM7aWYoWj09PSEwJiYocnQ9PT0hMHx8SyE9PUMpKXtsZXQgcXM9Sz09PUMmJnh0LmlkPT09Uzt0dC5zZXRTdGF0ZSh4dCxLLHFzKX1sZXQgWG49ITE7eHQudmVyc2lvbj09PW1yLl9fdmVyc2lvbj8obXIubmVlZHNMaWdodHMmJm1yLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PUZsLnN0YXRlLnZlcnNpb258fG1yLm91dHB1dEVuY29kaW5nIT09dHJ8fEZ0LmlzSW5zdGFuY2VkTWVzaCYmbXIuaW5zdGFuY2luZz09PSExfHwhRnQuaXNJbnN0YW5jZWRNZXNoJiZtci5pbnN0YW5jaW5nPT09ITB8fEZ0LmlzU2tpbm5lZE1lc2gmJm1yLnNraW5uaW5nPT09ITF8fCFGdC5pc1NraW5uZWRNZXNoJiZtci5za2lubmluZz09PSEwfHxtci5lbnZNYXAhPT1LZXx8eHQuZm9nJiZtci5mb2chPT1WZXx8bXIubnVtQ2xpcHBpbmdQbGFuZXMhPT12b2lkIDAmJihtci5udW1DbGlwcGluZ1BsYW5lcyE9PXR0Lm51bVBsYW5lc3x8bXIubnVtSW50ZXJzZWN0aW9uIT09dHQubnVtSW50ZXJzZWN0aW9uKXx8bXIudmVydGV4QWxwaGFzIT09WHJ8fG1yLnZlcnRleFRhbmdlbnRzIT09X3J8fG1yLm1vcnBoVGFyZ2V0cyE9PVByfHxtci5tb3JwaE5vcm1hbHMhPT1qbnx8bXIudG9uZU1hcHBpbmchPT11bXx8Y3QuaXNXZWJHTDI9PT0hMCYmbXIubW9ycGhUYXJnZXRzQ291bnQhPT1ucCkmJihYbj0hMCk6KFhuPSEwLG1yLl9fdmVyc2lvbj14dC52ZXJzaW9uKTtsZXQgQmw9bXIuY3VycmVudFByb2dyYW07WG49PT0hMCYmKEJsPWNtKHh0LGd0LEZ0KSk7bGV0IHV4PSExLEhsPSExLFZsPSExLFlpPUJsLmdldFVuaWZvcm1zKCksaG09bXIudW5pZm9ybXM7aWYoWC51c2VQcm9ncmFtKEJsLnByb2dyYW0pJiYodXg9ITAsSGw9ITAsVmw9ITApLHh0LmlkIT09UyYmKFM9eHQuaWQsSGw9ITApLHV4fHxDIT09Syl7aWYoWWkuc2V0VmFsdWUobHQsInByb2plY3Rpb25NYXRyaXgiLEsucHJvamVjdGlvbk1hdHJpeCksY3QubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmWWkuc2V0VmFsdWUobHQsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKEsuZmFyKzEpL01hdGguTE4yKSksQyE9PUsmJihDPUssSGw9ITAsVmw9ITApLHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHh0LmlzTWVzaFRvb25NYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuZW52TWFwKXtsZXQgcXM9WWkubWFwLmNhbWVyYVBvc2l0aW9uO3FzIT09dm9pZCAwJiZxcy5zZXRWYWx1ZShsdCxTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkpfSh4dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx4dC5pc01lc2hUb29uTWF0ZXJpYWx8fHh0LmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8eHQuaXNNZXNoQmFzaWNNYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuaXNTaGFkZXJNYXRlcmlhbCkmJllpLnNldFZhbHVlKGx0LCJpc09ydGhvZ3JhcGhpYyIsSy5pc09ydGhvZ3JhcGhpY0NhbWVyYT09PSEwKSwoeHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8eHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx4dC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHh0LmlzTWVzaEJhc2ljTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzU2hhZG93TWF0ZXJpYWx8fEZ0LmlzU2tpbm5lZE1lc2gpJiZZaS5zZXRWYWx1ZShsdCwidmlld01hdHJpeCIsSy5tYXRyaXhXb3JsZEludmVyc2UpfWlmKEZ0LmlzU2tpbm5lZE1lc2gpe1lpLnNldE9wdGlvbmFsKGx0LEZ0LCJiaW5kTWF0cml4IiksWWkuc2V0T3B0aW9uYWwobHQsRnQsImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IHFzPUZ0LnNrZWxldG9uO3FzJiYoY3QuZmxvYXRWZXJ0ZXhUZXh0dXJlcz8ocXMuYm9uZVRleHR1cmU9PT1udWxsJiZxcy5jb21wdXRlQm9uZVRleHR1cmUoKSxZaS5zZXRWYWx1ZShsdCwiYm9uZVRleHR1cmUiLHFzLmJvbmVUZXh0dXJlLHEpLFlpLnNldFZhbHVlKGx0LCJib25lVGV4dHVyZVNpemUiLHFzLmJvbmVUZXh0dXJlU2l6ZSkpOllpLnNldE9wdGlvbmFsKGx0LHFzLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFFdCYmKEV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8RXQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCE9PXZvaWQgMCkmJiR0LnVwZGF0ZShGdCxFdCx4dCxCbCksKEhsfHxtci5yZWNlaXZlU2hhZG93IT09RnQucmVjZWl2ZVNoYWRvdykmJihtci5yZWNlaXZlU2hhZG93PUZ0LnJlY2VpdmVTaGFkb3csWWkuc2V0VmFsdWUobHQsInJlY2VpdmVTaGFkb3ciLEZ0LnJlY2VpdmVTaGFkb3cpKSxIbCYmKFlpLnNldFZhbHVlKGx0LCJ0b25lTWFwcGluZ0V4cG9zdXJlIixnLnRvbmVNYXBwaW5nRXhwb3N1cmUpLG1yLm5lZWRzTGlnaHRzJiZjeChobSxWbCksVmUmJnh0LmZvZyYmTGUucmVmcmVzaEZvZ1VuaWZvcm1zKGhtLFZlKSxMZS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhobSx4dCxJLEIsb3QpLEIwLnVwbG9hZChsdCxtci51bmlmb3Jtc0xpc3QsaG0scSkpLHh0LmlzU2hhZGVyTWF0ZXJpYWwmJnh0LnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoQjAudXBsb2FkKGx0LG1yLnVuaWZvcm1zTGlzdCxobSxxKSx4dC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpLHh0LmlzU3ByaXRlTWF0ZXJpYWwmJllpLnNldFZhbHVlKGx0LCJjZW50ZXIiLEZ0LmNlbnRlciksWWkuc2V0VmFsdWUobHQsIm1vZGVsVmlld01hdHJpeCIsRnQubW9kZWxWaWV3TWF0cml4KSxZaS5zZXRWYWx1ZShsdCwibm9ybWFsTWF0cml4IixGdC5ub3JtYWxNYXRyaXgpLFlpLnNldFZhbHVlKGx0LCJtb2RlbE1hdHJpeCIsRnQubWF0cml4V29ybGQpLEJsfWZ1bmN0aW9uIGN4KEssZ3Qpe0suYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9Z3QsSy5saWdodFByb2JlLm5lZWRzVXBkYXRlPWd0LEsuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9Z3QsSy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1ndH1mdW5jdGlvbiBycChLKXtyZXR1cm4gSy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEsuaXNNZXNoVG9vbk1hdGVyaWFsfHxLLmlzTWVzaFBob25nTWF0ZXJpYWx8fEsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Sy5pc1NoYWRvd01hdGVyaWFsfHxLLmlzU2hhZGVyTWF0ZXJpYWwmJksubGlnaHRzPT09ITB9dGhpcy5nZXRBY3RpdmVDdWJlRmFjZT1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHh9LHRoaXMuZ2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGJ9LHRoaXMuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXM9ZnVuY3Rpb24oSyxndCxFdCl7ZHQuZ2V0KEsudGV4dHVyZSkuX193ZWJnbFRleHR1cmU9Z3QsZHQuZ2V0KEsuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1FdDtsZXQgeHQ9ZHQuZ2V0KEspO3h0Ll9faGFzRXh0ZXJuYWxUZXh0dXJlcz0hMCx4dC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJih4dC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPUV0PT09dm9pZCAwLHh0Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEsudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxLLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxLLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQuX193ZWJnbEZyYW1lYnVmZmVyPWd0LEV0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyPWd0PT09dm9pZCAwfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihLLGd0PTAsRXQ9MCl7Yj1LLHk9Z3QseD1FdDtsZXQgeHQ9ITA7aWYoSyl7bGV0IEtlPWR0LmdldChLKTtLZS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciE9PXZvaWQgMD8oWC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCkseHQ9ITEpOktlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj09PXZvaWQgMD9xLnNldHVwUmVuZGVyVGFyZ2V0KEspOktlLl9faGFzRXh0ZXJuYWxUZXh0dXJlcyYmcS5yZWJpbmRUZXh0dXJlcyhLLGR0LmdldChLLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGR0LmdldChLLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBGdD1udWxsLFZlPSExLFVlPSExO2lmKEspe2xldCBLZT1LLnRleHR1cmU7KEtlLmlzRGF0YVRleHR1cmUzRHx8S2UuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoVWU9ITApO2xldCBYcj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO0suaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KEZ0PVhyW2d0XSxWZT0hMCk6Sy51c2VSZW5kZXJidWZmZXI/RnQ9ZHQuZ2V0KEspLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpGdD1YcixQLmNvcHkoSy52aWV3cG9ydCksay5jb3B5KEsuc2Npc3NvciksTz1LLnNjaXNzb3JUZXN0fWVsc2UgUC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksTz1VO2lmKFguYmluZEZyYW1lYnVmZmVyKDM2MTYwLEZ0KSYmY3QuZHJhd0J1ZmZlcnMmJnh0JiZYLmRyYXdCdWZmZXJzKEssRnQpLFgudmlld3BvcnQoUCksWC5zY2lzc29yKGspLFguc2V0U2Npc3NvclRlc3QoTyksVmUpe2xldCBLZT1kdC5nZXQoSy50ZXh0dXJlKTtsdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStndCxLZS5fX3dlYmdsVGV4dHVyZSxFdCl9ZWxzZSBpZihVZSl7bGV0IEtlPWR0LmdldChLLnRleHR1cmUpLFhyPWd0fHwwO2x0LmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LEtlLl9fd2ViZ2xUZXh0dXJlLEV0fHwwLFhyKX1TPS0xfSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdCxWZSxVZSl7aWYoIShLJiZLLmlzV2ViR0xSZW5kZXJUYXJnZXQpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7cmV0dXJufWxldCB0cj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO2lmKEsuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJlVlIT09dm9pZCAwJiYodHI9dHJbVWVdKSx0cil7WC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHIpO3RyeXtsZXQgS2U9Sy50ZXh0dXJlLFhyPUtlLmZvcm1hdCxfcj1LZS50eXBlO2lmKFhyIT09UW8mJmJlLmNvbnZlcnQoWHIpIT09bHQuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBQcj1fcj09PUMxJiYoX3QuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8Y3QuaXNXZWJHTDImJl90LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZihfciE9PVpkJiZiZS5jb252ZXJ0KF9yKSE9PWx0LmdldFBhcmFtZXRlcigzNTczOCkmJiEoX3I9PT1qZCYmKGN0LmlzV2ViR0wyfHxfdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fF90LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpKSYmIVByKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIik7cmV0dXJufWx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApPT09MzYwNTM/Z3Q+PTAmJmd0PD1LLndpZHRoLXh0JiZFdD49MCYmRXQ8PUsuaGVpZ2h0LUZ0JiZsdC5yZWFkUGl4ZWxzKGd0LEV0LHh0LEZ0LGJlLmNvbnZlcnQoWHIpLGJlLmNvbnZlcnQoX3IpLFZlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtsZXQgS2U9YiE9PW51bGw/ZHQuZ2V0KGIpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjpudWxsO1guYmluZEZyYW1lYnVmZmVyKDM2MTYwLEtlKX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbihLLGd0LEV0PTApe2lmKGd0LmlzRnJhbWVidWZmZXJUZXh0dXJlIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuIik7cmV0dXJufWxldCB4dD1NYXRoLnBvdygyLC1FdCksRnQ9TWF0aC5mbG9vcihndC5pbWFnZS53aWR0aCp4dCksVmU9TWF0aC5mbG9vcihndC5pbWFnZS5oZWlnaHQqeHQpO3Euc2V0VGV4dHVyZTJEKGd0LDApLGx0LmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMsRXQsMCwwLEsueCxLLnksRnQsVmUpLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKEssZ3QsRXQseHQ9MCl7bGV0IEZ0PWd0LmltYWdlLndpZHRoLFZlPWd0LmltYWdlLmhlaWdodCxVZT1iZS5jb252ZXJ0KEV0LmZvcm1hdCksdHI9YmUuY29udmVydChFdC50eXBlKTtxLnNldFRleHR1cmUyRChFdCwwKSxsdC5waXhlbFN0b3JlaSgzNzQ0MCxFdC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEsRXQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyxFdC51bnBhY2tBbGlnbm1lbnQpLGd0LmlzRGF0YVRleHR1cmU/bHQudGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksRnQsVmUsVWUsdHIsZ3QuaW1hZ2UuZGF0YSk6Z3QuaXNDb21wcmVzc2VkVGV4dHVyZT9sdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksZ3QubWlwbWFwc1swXS53aWR0aCxndC5taXBtYXBzWzBdLmhlaWdodCxVZSxndC5taXBtYXBzWzBdLmRhdGEpOmx0LnRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LFVlLHRyLGd0LmltYWdlKSx4dD09PTAmJkV0LmdlbmVyYXRlTWlwbWFwcyYmbHQuZ2VuZXJhdGVNaXBtYXAoMzU1MyksWC51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0PTApe2lmKGcuaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBWZT1LLm1heC54LUsubWluLngrMSxVZT1LLm1heC55LUsubWluLnkrMSx0cj1LLm1heC56LUsubWluLnorMSxLZT1iZS5jb252ZXJ0KHh0LmZvcm1hdCksWHI9YmUuY29udmVydCh4dC50eXBlKSxfcjtpZih4dC5pc0RhdGFUZXh0dXJlM0QpcS5zZXRUZXh0dXJlM0QoeHQsMCksX3I9MzI4Nzk7ZWxzZSBpZih4dC5pc0RhdGFUZXh0dXJlMkRBcnJheSlxLnNldFRleHR1cmUyREFycmF5KHh0LDApLF9yPTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1sdC5waXhlbFN0b3JlaSgzNzQ0MCx4dC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEseHQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyx4dC51bnBhY2tBbGlnbm1lbnQpO2xldCBQcj1sdC5nZXRQYXJhbWV0ZXIoMzMxNCksam49bHQuZ2V0UGFyYW1ldGVyKDMyODc4KSxucD1sdC5nZXRQYXJhbWV0ZXIoMzMxNiksdW09bHQuZ2V0UGFyYW1ldGVyKDMzMTUpLG1yPWx0LmdldFBhcmFtZXRlcigzMjg3NyksRmw9RXQuaXNDb21wcmVzc2VkVGV4dHVyZT9FdC5taXBtYXBzWzBdOkV0LmltYWdlO2x0LnBpeGVsU3RvcmVpKDMzMTQsRmwud2lkdGgpLGx0LnBpeGVsU3RvcmVpKDMyODc4LEZsLmhlaWdodCksbHQucGl4ZWxTdG9yZWkoMzMxNixLLm1pbi54KSxsdC5waXhlbFN0b3JlaSgzMzE1LEsubWluLnkpLGx0LnBpeGVsU3RvcmVpKDMyODc3LEsubWluLnopLEV0LmlzRGF0YVRleHR1cmV8fEV0LmlzRGF0YVRleHR1cmUzRD9sdC50ZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLFhyLEZsLmRhdGEpOkV0LmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksbHQuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsRmwuZGF0YSkpOmx0LnRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsWHIsRmwpLGx0LnBpeGVsU3RvcmVpKDMzMTQsUHIpLGx0LnBpeGVsU3RvcmVpKDMyODc4LGpuKSxsdC5waXhlbFN0b3JlaSgzMzE2LG5wKSxsdC5waXhlbFN0b3JlaSgzMzE1LHVtKSxsdC5waXhlbFN0b3JlaSgzMjg3NyxtciksRnQ9PT0wJiZ4dC5nZW5lcmF0ZU1pcG1hcHMmJmx0LmdlbmVyYXRlTWlwbWFwKF9yKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihLKXtxLnNldFRleHR1cmUyRChLLDApLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXt5PTAseD0wLGI9bnVsbCxYLnJlc2V0KCksbnQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfXJuLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIGdVPWNsYXNzIGV4dGVuZHMgcm57fTtnVS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgTzE9Y2xhc3N7Y29uc3RydWN0b3IodCxyPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgbmUodCksdGhpcy5kZW5zaXR5PXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IE8xKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtPMS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciB6MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9MSxuPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IG5lKHQpLHRoaXMubmVhcj1yLHRoaXMuZmFyPW59Y2xvbmUoKXtyZXR1cm4gbmV3IHoxKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTt6MS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIHEwPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoci5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxyfX07cTAucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIGVtPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLnVzYWdlPVczLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9TmwoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxyLG4pe3QqPXRoaXMuc3RyaWRlLG4qPXIuc3RyaWRlO2ZvcihsZXQgaT0wLG89dGhpcy5zdHJpZGU7aTxvO2krKyl0aGlzLmFycmF5W3QraV09ci5hcnJheVtuK2ldO3JldHVybiB0aGlzfXNldCh0LHI9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsciksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IHI9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHIsdGhpcy5zdHJpZGUpO3JldHVybiBuLnNldFVzYWdlKHRoaXMudXNhZ2UpLG59b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07ZW0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIEFpPW5ldyBqLHRwPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGk9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5vZmZzZXQ9bix0aGlzLm5vcm1hbGl6ZWQ9aT09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5kYXRhLmNvdW50O3I8bjtyKyspQWkueD10aGlzLmdldFgociksQWkueT10aGlzLmdldFkociksQWkuej10aGlzLmdldFoociksQWkuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUFpLng9dGhpcy5nZXRYKHIpLEFpLnk9dGhpcy5nZXRZKHIpLEFpLno9dGhpcy5nZXRaKHIpLEFpLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylBaS54PXRoaXMuZ2V0WChyKSxBaS55PXRoaXMuZ2V0WShyKSxBaS56PXRoaXMuZ2V0WihyKSxBaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVoocixBaS54LEFpLnksQWkueik7cmV0dXJuIHRoaXN9c2V0WCh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1yLHRoaXN9c2V0WSh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPXIsdGhpc31zZXRaKHQscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09cix0aGlzfXNldFcodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1yLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxyLG4pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPXIsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1pLHRoaXN9c2V0WFlaVyh0LHIsbixpLG8pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJuIG5ldyBKZShuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihyKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IHRwKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6cixub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07dHAucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGlNPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07aU0ucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIE4zLERQPW5ldyBqLEQzPW5ldyBqLE8zPW5ldyBqLHozPW5ldyBMdCxPUD1uZXcgTHQsdHBlPW5ldyBNZSxMVj1uZXcgaix6UD1uZXcgaixrVj1uZXcgaixadWU9bmV3IEx0LGR1dD1uZXcgTHQsSnVlPW5ldyBMdCxvTT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLE4zPT09dm9pZCAwKXtOMz1uZXcgUGU7bGV0IHI9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksbj1uZXcgZW0ociw1KTtOMy5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxOMy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgdHAobiwzLDAsITEpKSxOMy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgdHAobiwyLDMsITEpKX10aGlzLmdlb21ldHJ5PU4zLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBpTSx0aGlzLmNlbnRlcj1uZXcgTHQoLjUsLjUpfXJheWNhc3QodCxyKXt0LmNhbWVyYT09PW51bGwmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxEMy5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksdHBlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLE8zLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmdGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb249PT0hMSYmRDMubXVsdGlwbHlTY2FsYXIoLU8zLnopO2xldCBuPXRoaXMubWF0ZXJpYWwucm90YXRpb24saSxvO24hPT0wJiYobz1NYXRoLmNvcyhuKSxpPU1hdGguc2luKG4pKTtsZXQgYT10aGlzLmNlbnRlcjtSVihMVi5zZXQoLS41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoelAuc2V0KC41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoa1Yuc2V0KC41LC41LDApLE8zLGEsRDMsaSxvKSxadWUuc2V0KDAsMCksZHV0LnNldCgxLDApLEp1ZS5zZXQoMSwxKTtsZXQgcz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVix6UCxrViwhMSxEUCk7aWYocz09PW51bGwmJihSVih6UC5zZXQoLS41LC41LDApLE8zLGEsRDMsaSxvKSxkdXQuc2V0KDAsMSkscz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVixrVix6UCwhMSxEUCkscz09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhEUCk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fHIucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpEUC5jbG9uZSgpLHV2Om9pLmdldFVWKERQLExWLHpQLGtWLFp1ZSxkdXQsSnVlLG5ldyBMdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0LmNlbnRlciE9PXZvaWQgMCYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fTtvTS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7ZnVuY3Rpb24gUlYoZSx0LHIsbixpLG8pe3ozLnN1YlZlY3RvcnMoZSxyKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KG4pLGkhPT12b2lkIDA/KE9QLng9byp6My54LWkqejMueSxPUC55PWkqejMueCtvKnozLnkpOk9QLmNvcHkoejMpLGUuY29weSh0KSxlLngrPU9QLngsZS55Kz1PUC55LGUuYXBwbHlNYXRyaXg0KHRwZSl9dmFyIE5WPW5ldyBqLFF1ZT1uZXcgaixfVT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9jdXJyZW50TGV2ZWw9MCx0aGlzLnR5cGU9IkxPRCIsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfSxpc0xPRDp7dmFsdWU6ITB9fSksdGhpcy5hdXRvVXBkYXRlPSEwfWNvcHkodCl7c3VwZXIuY29weSh0LCExKTtsZXQgcj10LmxldmVscztmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspe2xldCBvPXJbbl07dGhpcy5hZGRMZXZlbChvLm9iamVjdC5jbG9uZSgpLG8uZGlzdGFuY2UpfXJldHVybiB0aGlzLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlLHRoaXN9YWRkTGV2ZWwodCxyPTApe3I9TWF0aC5hYnMocik7bGV0IG49dGhpcy5sZXZlbHMsaTtmb3IoaT0wO2k8bi5sZW5ndGgmJiEocjxuW2ldLmRpc3RhbmNlKTtpKyspO3JldHVybiBuLnNwbGljZShpLDAse2Rpc3RhbmNlOnIsb2JqZWN0OnR9KSx0aGlzLmFkZCh0KSx0aGlzfWdldEN1cnJlbnRMZXZlbCgpe3JldHVybiB0aGlzLl9jdXJyZW50TGV2ZWx9Z2V0T2JqZWN0Rm9yRGlzdGFuY2UodCl7bGV0IHI9dGhpcy5sZXZlbHM7aWYoci5sZW5ndGg+MCl7bGV0IG4saTtmb3Iobj0xLGk9ci5sZW5ndGg7bjxpJiYhKHQ8cltuXS5kaXN0YW5jZSk7bisrKTtyZXR1cm4gcltuLTFdLm9iamVjdH1yZXR1cm4gbnVsbH1yYXljYXN0KHQscil7aWYodGhpcy5sZXZlbHMubGVuZ3RoPjApe05WLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgaT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhOVik7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShpKS5yYXljYXN0KHQscil9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLmxldmVscztpZihyLmxlbmd0aD4xKXtOVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksUXVlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgbj1OVi5kaXN0YW5jZVRvKFF1ZSkvdC56b29tO3JbMF0ub2JqZWN0LnZpc2libGU9ITA7bGV0IGksbztmb3IoaT0xLG89ci5sZW5ndGg7aTxvJiZuPj1yW2ldLmRpc3RhbmNlO2krKylyW2ktMV0ub2JqZWN0LnZpc2libGU9ITEscltpXS5vYmplY3QudmlzaWJsZT0hMDtmb3IodGhpcy5fY3VycmVudExldmVsPWktMTtpPG87aSsrKXJbaV0ub2JqZWN0LnZpc2libGU9ITF9fXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7dGhpcy5hdXRvVXBkYXRlPT09ITEmJihyLm9iamVjdC5hdXRvVXBkYXRlPSExKSxyLm9iamVjdC5sZXZlbHM9W107bGV0IG49dGhpcy5sZXZlbHM7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKXtsZXQgYT1uW2ldO3Iub2JqZWN0LmxldmVscy5wdXNoKHtvYmplY3Q6YS5vYmplY3QudXVpZCxkaXN0YW5jZTphLmRpc3RhbmNlfSl9cmV0dXJuIHJ9fSx0aGU9bmV3IGosZWhlPW5ldyBlbixyaGU9bmV3IGVuLERncj1uZXcgaixuaGU9bmV3IE1lLGFNPWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IE1lLHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IE1lfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxyKXt0aGlzLnNrZWxldG9uPXQscj09PXZvaWQgMCYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxyPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KHIpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShyKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgZW4scj10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IG49MCxpPXIuY291bnQ7bjxpO24rKyl7dC54PXIuZ2V0WChuKSx0Lnk9ci5nZXRZKG4pLHQuej1yLmdldFoobiksdC53PXIuZ2V0VyhuKTtsZXQgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLHIuc2V0WFlaVyhuLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMuYmluZE1vZGU9PT0iYXR0YWNoZWQiP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTp0aGlzLmJpbmRNb2RlPT09ImRldGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LHIpe2xldCBuPXRoaXMuc2tlbGV0b24saT10aGlzLmdlb21ldHJ5O2VoZS5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luSW5kZXgsdCkscmhlLmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsdCksdGhlLmNvcHkocikuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksci5zZXQoMCwwLDApO2ZvcihsZXQgbz0wO288NDtvKyspe2xldCBhPXJoZS5nZXRDb21wb25lbnQobyk7aWYoYSE9PTApe2xldCBzPWVoZS5nZXRDb21wb25lbnQobyk7bmhlLm11bHRpcGx5TWF0cmljZXMobi5ib25lc1tzXS5tYXRyaXhXb3JsZCxuLmJvbmVJbnZlcnNlc1tzXSksci5hZGRTY2FsZWRWZWN0b3IoRGdyLmNvcHkodGhlKS5hcHBseU1hdHJpeDQobmhlKSxhKX19cmV0dXJuIHIuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07YU0ucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITA7dmFyIHNNPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fTtzTS5wcm90b3R5cGUuaXNCb25lPSEwO3ZhciBKZD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQ9bnVsbCxyPTEsbj0xLGksbyxhLHMsbCxjPUxpLHU9TGksaCxmKXtzdXBlcihudWxsLGEscyxsLGMsdSxpLG8saCxmKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bn0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O0pkLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBpaGU9bmV3IE1lLE9ncj1uZXcgTWUsbE09Y2xhc3N7Y29uc3RydWN0b3IodD1bXSxyPVtdKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLmJvbmVzPXQuc2xpY2UoMCksdGhpcy5ib25lSW52ZXJzZXM9cix0aGlzLmJvbmVNYXRyaWNlcz1udWxsLHRoaXMuYm9uZVRleHR1cmU9bnVsbCx0aGlzLmJvbmVUZXh0dXJlU2l6ZT0wLHRoaXMuZnJhbWU9LTEsdGhpcy5pbml0KCl9aW5pdCgpe2xldCB0PXRoaXMuYm9uZXMscj10aGlzLmJvbmVJbnZlcnNlcztpZih0aGlzLmJvbmVNYXRyaWNlcz1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKjE2KSxyLmxlbmd0aD09PTApdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodC5sZW5ndGghPT1yLmxlbmd0aCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTnVtYmVyIG9mIGludmVyc2UgYm9uZSBtYXRyaWNlcyBkb2VzIG5vdCBtYXRjaCBhbW91bnQgb2YgYm9uZXMuIiksdGhpcy5ib25lSW52ZXJzZXM9W107Zm9yKGxldCBuPTAsaT10aGlzLmJvbmVzLmxlbmd0aDtuPGk7bisrKXRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKX19Y2FsY3VsYXRlSW52ZXJzZXMoKXt0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGg9MDtmb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPW5ldyBNZTt0aGlzLmJvbmVzW3RdJiZuLmNvcHkodGhpcy5ib25lc1t0XS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdGhpcy5ib25lSW52ZXJzZXMucHVzaChuKX19cG9zZSgpe2ZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiZuLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5ib25lSW52ZXJzZXNbdF0pLmludmVydCgpfWZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiYobi5wYXJlbnQmJm4ucGFyZW50LmlzQm9uZT8obi5tYXRyaXguY29weShuLnBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbi5tYXRyaXgubXVsdGlwbHkobi5tYXRyaXhXb3JsZCkpOm4ubWF0cml4LmNvcHkobi5tYXRyaXhXb3JsZCksbi5tYXRyaXguZGVjb21wb3NlKG4ucG9zaXRpb24sbi5xdWF0ZXJuaW9uLG4uc2NhbGUpKX19dXBkYXRlKCl7bGV0IHQ9dGhpcy5ib25lcyxyPXRoaXMuYm9uZUludmVyc2VzLG49dGhpcy5ib25lTWF0cmljZXMsaT10aGlzLmJvbmVUZXh0dXJlO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXT90W29dLm1hdHJpeFdvcmxkOk9ncjtpaGUubXVsdGlwbHlNYXRyaWNlcyhzLHJbb10pLGloZS50b0FycmF5KG4sbyoxNil9aSE9PW51bGwmJihpLm5lZWRzVXBkYXRlPSEwKX1jbG9uZSgpe3JldHVybiBuZXcgbE0odGhpcy5ib25lcyx0aGlzLmJvbmVJbnZlcnNlcyl9Y29tcHV0ZUJvbmVUZXh0dXJlKCl7bGV0IHQ9TWF0aC5zcXJ0KHRoaXMuYm9uZXMubGVuZ3RoKjQpO3Q9emZlKHQpLHQ9TWF0aC5tYXgodCw0KTtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KHQqdCo0KTtyLnNldCh0aGlzLmJvbmVNYXRyaWNlcyk7bGV0IG49bmV3IEpkKHIsdCx0LFFvLGpkKTtyZXR1cm4gbi5uZWVkc1VwZGF0ZT0hMCx0aGlzLmJvbmVNYXRyaWNlcz1yLHRoaXMuYm9uZVRleHR1cmU9bix0aGlzLmJvbmVUZXh0dXJlU2l6ZT10LHRoaXN9Z2V0Qm9uZUJ5TmFtZSh0KXtmb3IobGV0IHI9MCxuPXRoaXMuYm9uZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMuYm9uZXNbcl07aWYoaS5uYW1lPT09dClyZXR1cm4gaX19ZGlzcG9zZSgpe3RoaXMuYm9uZVRleHR1cmUhPT1udWxsJiYodGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCksdGhpcy5ib25lVGV4dHVyZT1udWxsKX1mcm9tSlNPTih0LHIpe3RoaXMudXVpZD10LnV1aWQ7Zm9yKGxldCBuPTAsaT10LmJvbmVzLmxlbmd0aDtuPGk7bisrKXtsZXQgbz10LmJvbmVzW25dLGE9cltvXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6IixvKSxhPW5ldyBzTSksdGhpcy5ib25lcy5wdXNoKGEpLHRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKCkuZnJvbUFycmF5KHQuYm9uZUludmVyc2VzW25dKSl9cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJTa2VsZXRvbiIsZ2VuZXJhdG9yOiJTa2VsZXRvbi50b0pTT04ifSxib25lczpbXSxib25lSW52ZXJzZXM6W119O3QudXVpZD10aGlzLnV1aWQ7bGV0IHI9dGhpcy5ib25lcyxuPXRoaXMuYm9uZUludmVyc2VzO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKyl7bGV0IGE9cltpXTt0LmJvbmVzLnB1c2goYS51dWlkKTtsZXQgcz1uW2ldO3QuYm9uZUludmVyc2VzLnB1c2gocy50b0FycmF5KCkpfXJldHVybiB0fX0scm09Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbixpPTEpe3R5cGVvZiBuPT0ibnVtYmVyIiYmKGk9bixuPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LHIsbiksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cm0ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBvaGU9bmV3IE1lLGFoZT1uZXcgTWUsRFY9W10sRlA9bmV3IHRpLGk2PWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsciksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgcm0obmV3IEZsb2F0MzJBcnJheShuKjE2KSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1uLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSx0Lmluc3RhbmNlQ29sb3IhPT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQscil7ci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9Z2V0TWF0cml4QXQodCxyKXtyLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXJheWNhc3QodCxyKXtsZXQgbj10aGlzLm1hdHJpeFdvcmxkLGk9dGhpcy5jb3VudDtpZihGUC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LEZQLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsRlAubWF0ZXJpYWwhPT12b2lkIDApZm9yKGxldCBvPTA7bzxpO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLG9oZSksYWhlLm11bHRpcGx5TWF0cmljZXMobixvaGUpLEZQLm1hdHJpeFdvcmxkPWFoZSxGUC5yYXljYXN0KHQsRFYpO2ZvcihsZXQgYT0wLHM9RFYubGVuZ3RoO2E8czthKyspe2xldCBsPURWW2FdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsci5wdXNoKGwpfURWLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQscil7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcm0obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxyLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxyKXtyLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2k2LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIEdpPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O0dpLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBzaGU9bmV3IGosbGhlPW5ldyBqLGNoZT1uZXcgTWUsbXV0PW5ldyBKZixPVj1uZXcgWmYsY2g9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBHaSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKHQuaW5kZXg9PT1udWxsKXtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bMF07Zm9yKGxldCBpPTEsbz1yLmNvdW50O2k8bztpKyspc2hlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixpLTEpLGxoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSksbltpXT1uW2ktMV0sbltpXSs9c2hlLmRpc3RhbmNlVG8obGhlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgeGUobiwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQscil7bGV0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLE9WLmNvcHkobi5ib3VuZGluZ1NwaGVyZSksT1YuYXBwbHlNYXRyaXg0KGkpLE9WLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKE9WKT09PSExKXJldHVybjtjaGUuY29weShpKS5pbnZlcnQoKSxtdXQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KGNoZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcyxjPW5ldyBqLHU9bmV3IGosaD1uZXcgaixmPW5ldyBqLHA9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZD1uLmluZGV4LF89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGQhPT1udWxsKXtsZXQgeT1NYXRoLm1heCgwLGEuc3RhcnQpLHg9TWF0aC5taW4oZC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgYj15LFM9eC0xO2I8UztiKz1wKXtsZXQgQz1kLmdldFgoYiksUD1kLmdldFgoYisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxDKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxQKSxtdXQuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBPPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO088dC5uZWFyfHxPPnQuZmFyfHxyLnB1c2goe2Rpc3RhbmNlOk8scG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCB5PU1hdGgubWF4KDAsYS5zdGFydCkseD1NYXRoLm1pbihfLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBiPXksUz14LTE7YjxTO2IrPXApe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIrMSksbXV0LmRpc3RhbmNlU3FUb1NlZ21lbnQoYyx1LGYsaCk+bCljb250aW51ZTtmLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgUD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmKTtQPHQubmVhcnx8UD50LmZhcnx8ci5wdXNoKHtkaXN0YW5jZTpQLHBvaW50OmguY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6YixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19fWVsc2Ugbi5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2NoLnByb3RvdHlwZS5pc0xpbmU9ITA7dmFyIHVoZT1uZXcgaixoaGU9bmV3IGosQWE9Y2xhc3MgZXh0ZW5kcyBjaHtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsciksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCByPXQuYXR0cmlidXRlcy5wb3NpdGlvbixuPVtdO2ZvcihsZXQgaT0wLG89ci5jb3VudDtpPG87aSs9Mil1aGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkpLGhoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSsxKSxuW2ldPWk9PT0wPzA6bltpLTFdLG5baSsxXT1uW2ldK3VoZS5kaXN0YW5jZVRvKGhoZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IHhlKG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX07QWEucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzPSEwO3ZhciBvNj1jbGFzcyBleHRlbmRzIGNoe2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19O282LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBubT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtubS5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgZmhlPW5ldyBNZSxyaHQ9bmV3IEpmLHpWPW5ldyBaZixGVj1uZXcgaixpbT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IFBlLHI9bmV3IG5tKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LHIpe2xldCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHpWLmNvcHkobi5ib3VuZGluZ1NwaGVyZSkselYuYXBwbHlNYXRyaXg0KGkpLHpWLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKHpWKT09PSExKXJldHVybjtmaGUuY29weShpKS5pbnZlcnQoKSxyaHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KGZoZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcztpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPW4uaW5kZXgsaD1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsYS5zdGFydCkscD1NYXRoLm1pbihjLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBkPWYsZz1wO2Q8ZztkKyspe2xldCBfPWMuZ2V0WChkKTtGVi5mcm9tQnVmZmVyQXR0cmlidXRlKGgsXykscGhlKEZWLF8sbCxpLHQscix0aGlzKX19ZWxzZXtsZXQgZj1NYXRoLm1heCgwLGEuc3RhcnQpLHA9TWF0aC5taW4oaC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgZD1mLGc9cDtkPGc7ZCsrKUZWLmZyb21CdWZmZXJBdHRyaWJ1dGUoaCxkKSxwaGUoRlYsZCxsLGksdCxyLHRoaXMpfX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2ltLnByb3RvdHlwZS5pc1BvaW50cz0hMDtmdW5jdGlvbiBwaGUoZSx0LHIsbixpLG8sYSl7bGV0IHM9cmh0LmRpc3RhbmNlU3FUb1BvaW50KGUpO2lmKHM8cil7bGV0IGw9bmV3IGo7cmh0LmNsb3Nlc3RQb2ludFRvUG9pbnQoZSxsKSxsLmFwcGx5TWF0cml4NChuKTtsZXQgYz1pLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPGkubmVhcnx8Yz5pLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KHMpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OmF9KX19dmFyIHlVPWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMpe3N1cGVyKHQscixuLGksbyxhLHMsbCxjKSx0aGlzLm1pbkZpbHRlcj1hIT09dm9pZCAwP2E6aWksdGhpcy5tYWdGaWx0ZXI9byE9PXZvaWQgMD9vOmlpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7ZnVuY3Rpb24gaCgpe3UubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGgpfSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09PSExJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19O3lVLnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMDt2YXIgdlU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzLmZvcm1hdD1uLHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt2VS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITA7dmFyIGE2PWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMsdSxoLGYpe3N1cGVyKG51bGwsYSxzLGwsYyx1LGksbyxoLGYpLHRoaXMuaW1hZ2U9e3dpZHRoOnIsaGVpZ2h0Om59LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTthNi5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMDt2YXIgeFU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyl7c3VwZXIodCxyLG4saSxvLGEscyxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt4VS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciBGMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTgsbj0wLGk9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6cix0aGV0YVN0YXJ0Om4sdGhldGFMZW5ndGg6aX0scj1NYXRoLm1heCgzLHIpO2xldCBvPVtdLGE9W10scz1bXSxsPVtdLGM9bmV3IGosdT1uZXcgTHQ7YS5wdXNoKDAsMCwwKSxzLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PXI7aCsrLGYrPTMpe2xldCBwPW4raC9yKmk7Yy54PXQqTWF0aC5jb3MocCksYy55PXQqTWF0aC5zaW4ocCksYS5wdXNoKGMueCxjLnksYy56KSxzLnB1c2goMCwwLDEpLHUueD0oYVtmXS90KzEpLzIsdS55PShhW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1yO2grKylvLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgRjEodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxvbT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9OCxvPTEsYT0hMSxzPTAsbD1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJDeWxpbmRlckdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDp0LHJhZGl1c0JvdHRvbTpyLGhlaWdodDpuLHJhZGlhbFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6byxvcGVuRW5kZWQ6YSx0aGV0YVN0YXJ0OnMsdGhldGFMZW5ndGg6bH07bGV0IGM9dGhpcztpPU1hdGguZmxvb3IoaSksbz1NYXRoLmZsb29yKG8pO2xldCB1PVtdLGg9W10sZj1bXSxwPVtdLGQ9MCxnPVtdLF89bi8yLHk9MDt4KCksYT09PSExJiYodD4wJiZiKCEwKSxyPjAmJmIoITEpKSx0aGlzLnNldEluZGV4KHUpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShwLDIpKTtmdW5jdGlvbiB4KCl7bGV0IFM9bmV3IGosQz1uZXcgaixQPTAsaz0oci10KS9uO2ZvcihsZXQgTz0wO088PW87TysrKXtsZXQgRD1bXSxCPU8vbyxJPUIqKHItdCkrdDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IFI9TC9pLEY9UipsK3Msej1NYXRoLnNpbihGKSxVPU1hdGguY29zKEYpO0MueD1JKnosQy55PS1CKm4rXyxDLno9SSpVLGgucHVzaChDLngsQy55LEMueiksUy5zZXQoeixrLFUpLm5vcm1hbGl6ZSgpLGYucHVzaChTLngsUy55LFMueikscC5wdXNoKFIsMS1CKSxELnB1c2goZCsrKX1nLnB1c2goRCl9Zm9yKGxldCBPPTA7TzxpO08rKylmb3IobGV0IEQ9MDtEPG87RCsrKXtsZXQgQj1nW0RdW09dLEk9Z1tEKzFdW09dLEw9Z1tEKzFdW08rMV0sUj1nW0RdW08rMV07dS5wdXNoKEIsSSxSKSx1LnB1c2goSSxMLFIpLFArPTZ9Yy5hZGRHcm91cCh5LFAsMCkseSs9UH1mdW5jdGlvbiBiKFMpe2xldCBDPWQsUD1uZXcgTHQsaz1uZXcgaixPPTAsRD1TPT09ITA/dDpyLEI9Uz09PSEwPzE6LTE7Zm9yKGxldCBMPTE7TDw9aTtMKyspaC5wdXNoKDAsXypCLDApLGYucHVzaCgwLEIsMCkscC5wdXNoKC41LC41KSxkKys7bGV0IEk9ZDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IEY9TC9pKmwrcyx6PU1hdGguY29zKEYpLFU9TWF0aC5zaW4oRik7ay54PUQqVSxrLnk9XypCLGsuej1EKnosaC5wdXNoKGsueCxrLnksay56KSxmLnB1c2goMCxCLDApLFAueD16Ki41Ky41LFAueT1VKi41KkIrLjUscC5wdXNoKFAueCxQLnkpLGQrK31mb3IobGV0IEw9MDtMPGk7TCsrKXtsZXQgUj1DK0wsRj1JK0w7Uz09PSEwP3UucHVzaChGLEYrMSxSKTp1LnB1c2goRisxLEYsUiksTys9M31jLmFkZEdyb3VwKHksTyxTPT09ITA/MToyKSx5Kz1PfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBvbSh0LnJhZGl1c1RvcCx0LnJhZGl1c0JvdHRvbSx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sQjE9Y2xhc3MgZXh0ZW5kcyBvbXtjb25zdHJ1Y3Rvcih0PTEscj0xLG49OCxpPTEsbz0hMSxhPTAscz1NYXRoLlBJKjIpe3N1cGVyKDAsdCxyLG4saSxvLGEscyksdGhpcy50eXBlPSJDb25lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsaGVpZ2h0OnIscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppLG9wZW5FbmRlZDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBCMSh0LnJhZGl1cyx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sdWg9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PVtdLHI9W10sbj0xLGk9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczp0LGluZGljZXM6cixyYWRpdXM6bixkZXRhaWw6aX07bGV0IG89W10sYT1bXTtzKGkpLGMobiksdSgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShvLnNsaWNlKCksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpLGk9PT0wP3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTp0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKTtmdW5jdGlvbiBzKHgpe2xldCBiPW5ldyBqLFM9bmV3IGosQz1uZXcgajtmb3IobGV0IFA9MDtQPHIubGVuZ3RoO1ArPTMpcChyW1ArMF0sYikscChyW1ArMV0sUykscChyW1ArMl0sQyksbChiLFMsQyx4KX1mdW5jdGlvbiBsKHgsYixTLEMpe2xldCBQPUMrMSxrPVtdO2ZvcihsZXQgTz0wO088PVA7TysrKXtrW09dPVtdO2xldCBEPXguY2xvbmUoKS5sZXJwKFMsTy9QKSxCPWIuY2xvbmUoKS5sZXJwKFMsTy9QKSxJPVAtTztmb3IobGV0IEw9MDtMPD1JO0wrKylMPT09MCYmTz09PVA/a1tPXVtMXT1EOmtbT11bTF09RC5jbG9uZSgpLmxlcnAoQixML0kpfWZvcihsZXQgTz0wO088UDtPKyspZm9yKGxldCBEPTA7RDwyKihQLU8pLTE7RCsrKXtsZXQgQj1NYXRoLmZsb29yKEQvMik7RCUyPT09MD8oZihrW09dW0IrMV0pLGYoa1tPKzFdW0JdKSxmKGtbT11bQl0pKTooZihrW09dW0IrMV0pLGYoa1tPKzFdW0IrMV0pLGYoa1tPKzFdW0JdKSl9fWZ1bmN0aW9uIGMoeCl7bGV0IGI9bmV3IGo7Zm9yKGxldCBTPTA7UzxvLmxlbmd0aDtTKz0zKWIueD1vW1MrMF0sYi55PW9bUysxXSxiLno9b1tTKzJdLGIubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoeCksb1tTKzBdPWIueCxvW1MrMV09Yi55LG9bUysyXT1iLnp9ZnVuY3Rpb24gdSgpe2xldCB4PW5ldyBqO2ZvcihsZXQgYj0wO2I8by5sZW5ndGg7Yis9Myl7eC54PW9bYiswXSx4Lnk9b1tiKzFdLHguej1vW2IrMl07bGV0IFM9Xyh4KS8yL01hdGguUEkrLjUsQz15KHgpL01hdGguUEkrLjU7YS5wdXNoKFMsMS1DKX1kKCksaCgpfWZ1bmN0aW9uIGgoKXtmb3IobGV0IHg9MDt4PGEubGVuZ3RoO3grPTYpe2xldCBiPWFbeCswXSxTPWFbeCsyXSxDPWFbeCs0XSxQPU1hdGgubWF4KGIsUyxDKSxrPU1hdGgubWluKGIsUyxDKTtQPi45JiZrPC4xJiYoYjwuMiYmKGFbeCswXSs9MSksUzwuMiYmKGFbeCsyXSs9MSksQzwuMiYmKGFbeCs0XSs9MSkpfX1mdW5jdGlvbiBmKHgpe28ucHVzaCh4LngseC55LHgueil9ZnVuY3Rpb24gcCh4LGIpe2xldCBTPXgqMztiLng9dFtTKzBdLGIueT10W1MrMV0sYi56PXRbUysyXX1mdW5jdGlvbiBkKCl7bGV0IHg9bmV3IGosYj1uZXcgaixTPW5ldyBqLEM9bmV3IGosUD1uZXcgTHQsaz1uZXcgTHQsTz1uZXcgTHQ7Zm9yKGxldCBEPTAsQj0wO0Q8by5sZW5ndGg7RCs9OSxCKz02KXt4LnNldChvW0QrMF0sb1tEKzFdLG9bRCsyXSksYi5zZXQob1tEKzNdLG9bRCs0XSxvW0QrNV0pLFMuc2V0KG9bRCs2XSxvW0QrN10sb1tEKzhdKSxQLnNldChhW0IrMF0sYVtCKzFdKSxrLnNldChhW0IrMl0sYVtCKzNdKSxPLnNldChhW0IrNF0sYVtCKzVdKSxDLmNvcHkoeCkuYWRkKGIpLmFkZChTKS5kaXZpZGVTY2FsYXIoMyk7bGV0IEk9XyhDKTtnKFAsQiswLHgsSSksZyhrLEIrMixiLEkpLGcoTyxCKzQsUyxJKX19ZnVuY3Rpb24gZyh4LGIsUyxDKXtDPDAmJngueD09PTEmJihhW2JdPXgueC0xKSxTLng9PT0wJiZTLno9PT0wJiYoYVtiXT1DLzIvTWF0aC5QSSsuNSl9ZnVuY3Rpb24gXyh4KXtyZXR1cm4gTWF0aC5hdGFuMih4LnosLXgueCl9ZnVuY3Rpb24geSh4KXtyZXR1cm4gTWF0aC5hdGFuMigteC55LE1hdGguc3FydCh4LngqeC54K3gueip4LnopKX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgdWgodC52ZXJ0aWNlcyx0LmluZGljZXMsdC5yYWRpdXMsdC5kZXRhaWxzKX19LEgxPWNsYXNzIGV4dGVuZHMgdWh7Y29uc3RydWN0b3IodD0xLHI9MCl7bGV0IG49KDErTWF0aC5zcXJ0KDUpKS8yLGk9MS9uLG89Wy0xLC0xLC0xLC0xLC0xLDEsLTEsMSwtMSwtMSwxLDEsMSwtMSwtMSwxLC0xLDEsMSwxLC0xLDEsMSwxLDAsLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwtaSwtbiwwLC1pLG4sMCxpLC1uLDAsaSxuLDAsLW4sMCwtaSxuLDAsLWksLW4sMCxpLG4sMCxpXSxhPVszLDExLDcsMyw3LDE1LDMsMTUsMTMsNywxOSwxNyw3LDE3LDYsNyw2LDE1LDE3LDQsOCwxNyw4LDEwLDE3LDEwLDYsOCwwLDE2LDgsMTYsMiw4LDIsMTAsMCwxMiwxLDAsMSwxOCwwLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XTtzdXBlcihvLGEsdCxyKSx0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDpyfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBIMSh0LnJhZGl1cyx0LmRldGFpbCl9fSxCVj1uZXcgaixIVj1uZXcgaixndXQ9bmV3IGosVlY9bmV3IG9pLHM2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1udWxsLHI9MSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17Z2VvbWV0cnk6dCx0aHJlc2hvbGRBbmdsZTpyfSx0IT09bnVsbCl7bGV0IGk9TWF0aC5wb3coMTAsNCksbz1NYXRoLmNvcyhQMSpyKSxhPXQuZ2V0SW5kZXgoKSxzPXQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGw9YT9hLmNvdW50OnMuY291bnQsYz1bMCwwLDBdLHU9WyJhIiwiYiIsImMiXSxoPW5ldyBBcnJheSgzKSxmPXt9LHA9W107Zm9yKGxldCBkPTA7ZDxsO2QrPTMpe2E/KGNbMF09YS5nZXRYKGQpLGNbMV09YS5nZXRYKGQrMSksY1syXT1hLmdldFgoZCsyKSk6KGNbMF09ZCxjWzFdPWQrMSxjWzJdPWQrMik7bGV0e2E6ZyxiOl8sYzp5fT1WVjtpZihnLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzBdKSxfLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzFdKSx5LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzJdKSxWVi5nZXROb3JtYWwoZ3V0KSxoWzBdPWAke01hdGgucm91bmQoZy54KmkpfSwke01hdGgucm91bmQoZy55KmkpfSwke01hdGgucm91bmQoZy56KmkpfWAsaFsxXT1gJHtNYXRoLnJvdW5kKF8ueCppKX0sJHtNYXRoLnJvdW5kKF8ueSppKX0sJHtNYXRoLnJvdW5kKF8ueippKX1gLGhbMl09YCR7TWF0aC5yb3VuZCh5LngqaSl9LCR7TWF0aC5yb3VuZCh5LnkqaSl9LCR7TWF0aC5yb3VuZCh5LnoqaSl9YCwhKGhbMF09PT1oWzFdfHxoWzFdPT09aFsyXXx8aFsyXT09PWhbMF0pKWZvcihsZXQgeD0wO3g8Mzt4Kyspe2xldCBiPSh4KzEpJTMsUz1oW3hdLEM9aFtiXSxQPVZWW3VbeF1dLGs9VlZbdVtiXV0sTz1gJHtTfV8ke0N9YCxEPWAke0N9XyR7U31gO0QgaW4gZiYmZltEXT8oZ3V0LmRvdChmW0RdLm5vcm1hbCk8PW8mJihwLnB1c2goUC54LFAueSxQLnopLHAucHVzaChrLngsay55LGsueikpLGZbRF09bnVsbCk6TyBpbiBmfHwoZltPXT17aW5kZXgwOmNbeF0saW5kZXgxOmNbYl0sbm9ybWFsOmd1dC5jbG9uZSgpfSl9fWZvcihsZXQgZCBpbiBmKWlmKGZbZF0pe2xldHtpbmRleDA6ZyxpbmRleDE6X309ZltkXTtCVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsZyksSFYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLF8pLHAucHVzaChCVi54LEJWLnksQlYueikscC5wdXNoKEhWLngsSFYueSxIVi56KX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShwLDMpKX19fSxmcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQscil7bGV0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChuLHIpfWdldFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiByfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50QXQobi90KSk7cmV0dXJuIHJ9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgcj1bXSxuLGk9dGhpcy5nZXRQb2ludCgwKSxvPTA7ci5wdXNoKDApO2ZvcihsZXQgYT0xO2E8PXQ7YSsrKW49dGhpcy5nZXRQb2ludChhL3QpLG8rPW4uZGlzdGFuY2VUbyhpKSxyLnB1c2gobyksaT1uO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1yLHJ9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxyKXtsZXQgbj10aGlzLmdldExlbmd0aHMoKSxpPTAsbz1uLmxlbmd0aCxhO3I/YT1yOmE9dCpuW28tMV07bGV0IHM9MCxsPW8tMSxjO2Zvcig7czw9bDspaWYoaT1NYXRoLmZsb29yKHMrKGwtcykvMiksYz1uW2ldLWEsYzwwKXM9aSsxO2Vsc2UgaWYoYz4wKWw9aS0xO2Vsc2V7bD1pO2JyZWFrfWlmKGk9bCxuW2ldPT09YSlyZXR1cm4gaS8oby0xKTtsZXQgdT1uW2ldLGY9bltpKzFdLXUscD0oYS11KS9mO3JldHVybihpK3ApLyhvLTEpfWdldFRhbmdlbnQodCxyKXtsZXQgaT10LTFlLTQsbz10KzFlLTQ7aTwwJiYoaT0wKSxvPjEmJihvPTEpO2xldCBhPXRoaXMuZ2V0UG9pbnQoaSkscz10aGlzLmdldFBvaW50KG8pLGw9cnx8KGEuaXNWZWN0b3IyP25ldyBMdDpuZXcgaik7cmV0dXJuIGwuY29weShzKS5zdWIoYSkubm9ybWFsaXplKCksbH1nZXRUYW5nZW50QXQodCxyKXtsZXQgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFRhbmdlbnQobixyKX1jb21wdXRlRnJlbmV0RnJhbWVzKHQscil7bGV0IG49bmV3IGosaT1bXSxvPVtdLGE9W10scz1uZXcgaixsPW5ldyBNZTtmb3IobGV0IHA9MDtwPD10O3ArKyl7bGV0IGQ9cC90O2lbcF09dGhpcy5nZXRUYW5nZW50QXQoZCxuZXcgail9b1swXT1uZXcgaixhWzBdPW5ldyBqO2xldCBjPU51bWJlci5NQVhfVkFMVUUsdT1NYXRoLmFicyhpWzBdLngpLGg9TWF0aC5hYnMoaVswXS55KSxmPU1hdGguYWJzKGlbMF0ueik7dTw9YyYmKGM9dSxuLnNldCgxLDAsMCkpLGg8PWMmJihjPWgsbi5zZXQoMCwxLDApKSxmPD1jJiZuLnNldCgwLDAsMSkscy5jcm9zc1ZlY3RvcnMoaVswXSxuKS5ub3JtYWxpemUoKSxvWzBdLmNyb3NzVmVjdG9ycyhpWzBdLHMpLGFbMF0uY3Jvc3NWZWN0b3JzKGlbMF0sb1swXSk7Zm9yKGxldCBwPTE7cDw9dDtwKyspe2lmKG9bcF09b1twLTFdLmNsb25lKCksYVtwXT1hW3AtMV0uY2xvbmUoKSxzLmNyb3NzVmVjdG9ycyhpW3AtMV0saVtwXSkscy5sZW5ndGgoKT5OdW1iZXIuRVBTSUxPTil7cy5ub3JtYWxpemUoKTtsZXQgZD1NYXRoLmFjb3MoWm8oaVtwLTFdLmRvdChpW3BdKSwtMSwxKSk7b1twXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHMsZCkpfWFbcF0uY3Jvc3NWZWN0b3JzKGlbcF0sb1twXSl9aWYocj09PSEwKXtsZXQgcD1NYXRoLmFjb3MoWm8ob1swXS5kb3Qob1t0XSksLTEsMSkpO3AvPXQsaVswXS5kb3Qocy5jcm9zc1ZlY3RvcnMob1swXSxvW3RdKSk+MCYmKHA9LXApO2ZvcihsZXQgZD0xO2Q8PXQ7ZCsrKW9bZF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhpW2RdLHAqZCkpLGFbZF0uY3Jvc3NWZWN0b3JzKGlbZF0sb1tkXSl9cmV0dXJue3RhbmdlbnRzOmksbm9ybWFsczpvLGJpbm9ybWFsczphfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0sVjE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MSxpPTEsbz0wLGE9TWF0aC5QSSoyLHM9ITEsbD0wKXtzdXBlcigpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXQsdGhpcy5hWT1yLHRoaXMueFJhZGl1cz1uLHRoaXMueVJhZGl1cz1pLHRoaXMuYVN0YXJ0QW5nbGU9byx0aGlzLmFFbmRBbmdsZT1hLHRoaXMuYUNsb2Nrd2lzZT1zLHRoaXMuYVJvdGF0aW9uPWx9Z2V0UG9pbnQodCxyKXtsZXQgbj1yfHxuZXcgTHQsaT1NYXRoLlBJKjIsbz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLGE9TWF0aC5hYnMobyk8TnVtYmVyLkVQU0lMT047Zm9yKDtvPDA7KW8rPWk7Zm9yKDtvPmk7KW8tPWk7bzxOdW1iZXIuRVBTSUxPTiYmKGE/bz0wOm89aSksdGhpcy5hQ2xvY2t3aXNlPT09ITAmJiFhJiYobz09PWk/bz0taTpvPW8taSk7bGV0IHM9dGhpcy5hU3RhcnRBbmdsZSt0Km8sbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhzKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKHMpO2lmKHRoaXMuYVJvdGF0aW9uIT09MCl7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGg9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLGY9bC10aGlzLmFYLHA9Yy10aGlzLmFZO2w9Zip1LXAqaCt0aGlzLmFYLGM9ZipoK3AqdSt0aGlzLmFZfXJldHVybiBuLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O1YxLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgbDY9Y2xhc3MgZXh0ZW5kcyBWMXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSl7c3VwZXIodCxyLG4sbixpLG8sYSksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTtsNi5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDtmdW5jdGlvbiBEaHQoKXtsZXQgZT0wLHQ9MCxyPTAsbj0wO2Z1bmN0aW9uIGkobyxhLHMsbCl7ZT1vLHQ9cyxyPS0zKm8rMyphLTIqcy1sLG49MipvLTIqYStzK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyl7aShhLHMsYyoocy1vKSxjKihsLWEpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyx1LGgpe2xldCBmPShhLW8pL2MtKHMtbykvKGMrdSkrKHMtYSkvdSxwPShzLWEpL3UtKGwtYSkvKHUraCkrKGwtcykvaDtmKj11LHAqPXUsaShhLHMsZixwKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgYT1vKm8scz1hKm87cmV0dXJuIGUrdCpvK3IqYStuKnN9fX12YXIgVVY9bmV3IGosX3V0PW5ldyBEaHQseXV0PW5ldyBEaHQsdnV0PW5ldyBEaHQsYzY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PVtdLHI9ITEsbj0iY2VudHJpcGV0YWwiLGk9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPXIsdGhpcy5jdXJ2ZVR5cGU9bix0aGlzLnRlbnNpb249aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnBvaW50cyxvPWkubGVuZ3RoLGE9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQscz1NYXRoLmZsb29yKGEpLGw9YS1zO3RoaXMuY2xvc2VkP3MrPXM+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKHMpL28pKzEpKm86bD09PTAmJnM9PT1vLTEmJihzPW8tMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fHM+MD9jPWlbKHMtMSklb106KFVWLnN1YlZlY3RvcnMoaVswXSxpWzFdKS5hZGQoaVswXSksYz1VVik7bGV0IGg9aVtzJW9dLGY9aVsocysxKSVvXTtpZih0aGlzLmNsb3NlZHx8cysyPG8/dT1pWyhzKzIpJW9dOihVVi5zdWJWZWN0b3JzKGlbby0xXSxpW28tMl0pLmFkZChpW28tMV0pLHU9VVYpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBwPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxkPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCkscCksZz1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLHApLF89TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxwKTtnPDFlLTQmJihnPTEpLGQ8MWUtNCYmKGQ9ZyksXzwxZS00JiYoXz1nKSxfdXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCxkLGcsXykseXV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksZCxnLF8pLHZ1dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGQsZyxfKX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoX3V0LmluaXRDYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCx0aGlzLnRlbnNpb24pLHl1dC5pbml0Q2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksdGhpcy50ZW5zaW9uKSx2dXQuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBuLnNldChfdXQuY2FsYyhsKSx5dXQuY2FsYyhsKSx2dXQuY2FsYyhsKSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCByPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5wb2ludHNbcl07dC5wb2ludHMucHVzaChpLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXQucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LnBvaW50c1tyXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBqKCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07YzYucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiBkaGUoZSx0LHIsbixpKXtsZXQgbz0obi10KSouNSxhPShpLXIpKi41LHM9ZSplLGw9ZSpzO3JldHVybigyKnItMipuK28rYSkqbCsoLTMqciszKm4tMipvLWEpKnMrbyplK3J9ZnVuY3Rpb24gemdyKGUsdCl7bGV0IHI9MS1lO3JldHVybiByKnIqdH1mdW5jdGlvbiBGZ3IoZSx0KXtyZXR1cm4gMiooMS1lKSplKnR9ZnVuY3Rpb24gQmdyKGUsdCl7cmV0dXJuIGUqZSp0fWZ1bmN0aW9uIEdQKGUsdCxyLG4pe3JldHVybiB6Z3IoZSx0KStGZ3IoZSxyKStCZ3IoZSxuKX1mdW5jdGlvbiBIZ3IoZSx0KXtsZXQgcj0xLWU7cmV0dXJuIHIqcipyKnR9ZnVuY3Rpb24gVmdyKGUsdCl7bGV0IHI9MS1lO3JldHVybiAzKnIqciplKnR9ZnVuY3Rpb24gVWdyKGUsdCl7cmV0dXJuIDMqKDEtZSkqZSplKnR9ZnVuY3Rpb24gcWdyKGUsdCl7cmV0dXJuIGUqZSplKnR9ZnVuY3Rpb24gV1AoZSx0LHIsbixpKXtyZXR1cm4gSGdyKGUsdCkrVmdyKGUscikrVWdyKGUsbikrcWdyKGUsaSl9dmFyIGNNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQsaT1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bix0aGlzLnYzPWl9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MixzPXRoaXMudjM7cmV0dXJuIG4uc2V0KFdQKHQsaS54LG8ueCxhLngscy54KSxXUCh0LGkueSxvLnksYS55LHMueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07Y00ucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgdTY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGosbj1uZXcgaixpPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1uLHRoaXMudjM9aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBuLnNldChXUCh0LGkueCxvLngsYS54LHMueCksV1AodCxpLnksby55LGEueSxzLnkpLFdQKHQsaS56LG8ueixhLnoscy56KSksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTt1Ni5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgVTE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBMdCxyPW5ldyBMdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9cn1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yO3JldHVybiB0PT09MT9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59Z2V0UG9pbnRBdCh0LHIpe3JldHVybiB0aGlzLmdldFBvaW50KHQscil9Z2V0VGFuZ2VudCh0LHIpe2xldCBuPXJ8fG5ldyBMdDtyZXR1cm4gbi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1UxLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYlU9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1yfWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cjtyZXR1cm4gdD09PTE/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufWdldFBvaW50QXQodCxyKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LHIpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHVNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9cix0aGlzLnYyPW59Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07dU0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmU9ITA7dmFyIGhNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1ufWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSksR1AodCxpLnosby56LGEueikpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07aE0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3ZhciBmTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSIsdGhpcy5wb2ludHM9dH1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yLGk9dGhpcy5wb2ludHMsbz0oaS5sZW5ndGgtMSkqdCxhPU1hdGguZmxvb3Iobykscz1vLWEsbD1pW2E9PT0wP2E6YS0xXSxjPWlbYV0sdT1pW2E+aS5sZW5ndGgtMj9pLmxlbmd0aC0xOmErMV0saD1pW2E+aS5sZW5ndGgtMz9pLmxlbmd0aC0xOmErMl07cmV0dXJuIG4uc2V0KGRoZShzLGwueCxjLngsdS54LGgueCksZGhlKHMsbC55LGMueSx1LnksaC55KSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMucG9pbnRzW3JdO3QucG9pbnRzLnB1c2goaS50b0FycmF5KCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2gobmV3IEx0KCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpc319O2ZNLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBPaHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bDYsQ2F0bXVsbFJvbUN1cnZlMzpjNixDdWJpY0JlemllckN1cnZlOmNNLEN1YmljQmV6aWVyQ3VydmUzOnU2LEVsbGlwc2VDdXJ2ZTpWMSxMaW5lQ3VydmU6VTEsTGluZUN1cnZlMzpiVSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp1TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6aE0sU3BsaW5lQ3VydmU6Zk19KSx3VT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCkscj10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMocil8fHRoaXMuY3VydmVzLnB1c2gobmV3IFUxKHIsdCkpfWdldFBvaW50KHQscil7bGV0IG49dCp0aGlzLmdldExlbmd0aCgpLGk9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxvPTA7Zm9yKDtvPGkubGVuZ3RoOyl7aWYoaVtvXT49bil7bGV0IGE9aVtvXS1uLHM9dGhpcy5jdXJ2ZXNbb10sbD1zLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLWEvbDtyZXR1cm4gcy5nZXRQb2ludEF0KGMscil9bysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLHI9MDtmb3IobGV0IG49MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtuPGk7bisrKXIrPXRoaXMuY3VydmVzW25dLmdldExlbmd0aCgpLHQucHVzaChyKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIucHVzaChyWzBdKSxyfWdldFBvaW50cyh0PTEyKXtsZXQgcj1bXSxuO2ZvcihsZXQgaT0wLG89dGhpcy5jdXJ2ZXM7aTxvLmxlbmd0aDtpKyspe2xldCBhPW9baV0scz1hJiZhLmlzRWxsaXBzZUN1cnZlP3QqMjphJiYoYS5pc0xpbmVDdXJ2ZXx8YS5pc0xpbmVDdXJ2ZTMpPzE6YSYmYS5pc1NwbGluZUN1cnZlP3QqYS5wb2ludHMubGVuZ3RoOnQsbD1hLmdldFBvaW50cyhzKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtuJiZuLmVxdWFscyh1KXx8KHIucHVzaCh1KSxuPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIubGVuZ3RoPjEmJiFyW3IubGVuZ3RoLTFdLmVxdWFscyhyWzBdKSYmci5wdXNoKHJbMF0pLHJ9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXRoaXMuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmN1cnZlc1tyXTt0LmN1cnZlcy5wdXNoKGkudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2gobmV3IE9odFtpLnR5cGVdKCkuZnJvbUpTT04oaSkpfXJldHVybiB0aGlzfX0scTE9Y2xhc3MgZXh0ZW5kcyB3VXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEx0LHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgcj0xLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmxpbmVUbyh0W3JdLngsdFtyXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31saW5lVG8odCxyKXtsZXQgbj1uZXcgVTEodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQscixuLGkpe2xldCBvPW5ldyB1TSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe2xldCBzPW5ldyBjTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpLG5ldyBMdChvLGEpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChzKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxhKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IHI9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxuPW5ldyBmTShyKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChuKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmN1cnJlbnRQb2ludC54LGw9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNhcmModCtzLHIrbCxuLGksbyxhKSx0aGlzfWFic2FyYyh0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LHIsbixuLGksbyxhKSx0aGlzfWVsbGlwc2UodCxyLG4saSxvLGEscyxsKXtsZXQgYz10aGlzLmN1cnJlbnRQb2ludC54LHU9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrYyxyK3UsbixpLG8sYSxzLGwpLHRoaXN9YWJzZWxsaXBzZSh0LHIsbixpLG8sYSxzLGwpe2xldCBjPW5ldyBWMSh0LHIsbixpLG8sYSxzLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgaD1jLmdldFBvaW50KDApO2guZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oaC54LGgueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sS2M9Y2xhc3MgZXh0ZW5kcyBxMXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7bjxpO24rKylyW25dPXRoaXMuaG9sZXNbbl0uZ2V0UG9pbnRzKHQpO3JldHVybiByfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dC5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5ob2xlc1tyXTt0aGlzLmhvbGVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCByPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmhvbGVzW3JdO3QuaG9sZXMucHVzaChpLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCByPTAsbj10LmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmhvbGVzW3JdO3RoaXMuaG9sZXMucHVzaChuZXcgcTEoKS5mcm9tSlNPTihpKSl9cmV0dXJuIHRoaXN9fSxHZ3I9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKGUsdCxyPTIpe2xldCBuPXQmJnQubGVuZ3RoLGk9bj90WzBdKnI6ZS5sZW5ndGgsbz1lcGUoZSwwLGksciwhMCksYT1bXTtpZighb3x8by5uZXh0PT09by5wcmV2KXJldHVybiBhO2xldCBzLGwsYyx1LGgsZixwO2lmKG4mJihvPSRncihlLHQsbyxyKSksZS5sZW5ndGg+ODAqcil7cz1jPWVbMF0sbD11PWVbMV07Zm9yKGxldCBkPXI7ZDxpO2QrPXIpaD1lW2RdLGY9ZVtkKzFdLGg8cyYmKHM9aCksZjxsJiYobD1mKSxoPmMmJihjPWgpLGY+dSYmKHU9Zik7cD1NYXRoLm1heChjLXMsdS1sKSxwPXAhPT0wPzEvcDowfXJldHVybiBoNihvLGEscixzLGwscCksYX19O2Z1bmN0aW9uIGVwZShlLHQscixuLGkpe2xldCBvLGE7aWYoaT09PWEwcihlLHQscixuKT4wKWZvcihvPXQ7bzxyO28rPW4pYT1taGUobyxlW29dLGVbbysxXSxhKTtlbHNlIGZvcihvPXItbjtvPj10O28tPW4pYT1taGUobyxlW29dLGVbbysxXSxhKTtyZXR1cm4gYSYmWlUoYSxhLm5leHQpJiYocDYoYSksYT1hLm5leHQpLGF9ZnVuY3Rpb24gRzAoZSx0KXtpZighZSlyZXR1cm4gZTt0fHwodD1lKTtsZXQgcj1lLG47ZG8gaWYobj0hMSwhci5zdGVpbmVyJiYoWlUocixyLm5leHQpfHxhaShyLnByZXYscixyLm5leHQpPT09MCkpe2lmKHA2KHIpLHI9dD1yLnByZXYscj09PXIubmV4dClicmVhaztuPSEwfWVsc2Ugcj1yLm5leHQ7d2hpbGUobnx8ciE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIGg2KGUsdCxyLG4saSxvLGEpe2lmKCFlKXJldHVybjshYSYmbyYmdDByKGUsbixpLG8pO2xldCBzPWUsbCxjO2Zvcig7ZS5wcmV2IT09ZS5uZXh0Oyl7aWYobD1lLnByZXYsYz1lLm5leHQsbz9ZZ3IoZSxuLGksbyk6V2dyKGUpKXt0LnB1c2gobC5pL3IpLHQucHVzaChlLmkvciksdC5wdXNoKGMuaS9yKSxwNihlKSxlPWMubmV4dCxzPWMubmV4dDtjb250aW51ZX1pZihlPWMsZT09PXMpe2E/YT09PTE/KGU9amdyKEcwKGUpLHQsciksaDYoZSx0LHIsbixpLG8sMikpOmE9PT0yJiZYZ3IoZSx0LHIsbixpLG8pOmg2KEcwKGUpLHQscixuLGksbywxKTticmVha319fWZ1bmN0aW9uIFdncihlKXtsZXQgdD1lLnByZXYscj1lLG49ZS5uZXh0O2lmKGFpKHQscixuKT49MClyZXR1cm4hMTtsZXQgaT1lLm5leHQubmV4dDtmb3IoO2khPT1lLnByZXY7KXtpZihIMyh0LngsdC55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmYWkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBZZ3IoZSx0LHIsbil7bGV0IGk9ZS5wcmV2LG89ZSxhPWUubmV4dDtpZihhaShpLG8sYSk+PTApcmV0dXJuITE7bGV0IHM9aS54PG8ueD9pLng8YS54P2kueDphLng6by54PGEueD9vLng6YS54LGw9aS55PG8ueT9pLnk8YS55P2kueTphLnk6by55PGEueT9vLnk6YS55LGM9aS54Pm8ueD9pLng+YS54P2kueDphLng6by54PmEueD9vLng6YS54LHU9aS55Pm8ueT9pLnk+YS55P2kueTphLnk6by55PmEueT9vLnk6YS55LGg9bmh0KHMsbCx0LHIsbiksZj1uaHQoYyx1LHQscixuKSxwPWUucHJldlosZD1lLm5leHRaO2Zvcig7cCYmcC56Pj1oJiZkJiZkLno8PWY7KXtpZihwIT09ZS5wcmV2JiZwIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxwLngscC55KSYmYWkocC5wcmV2LHAscC5uZXh0KT49MHx8KHA9cC5wcmV2WixkIT09ZS5wcmV2JiZkIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxkLngsZC55KSYmYWkoZC5wcmV2LGQsZC5uZXh0KT49MCkpcmV0dXJuITE7ZD1kLm5leHRafWZvcig7cCYmcC56Pj1oOyl7aWYocCE9PWUucHJldiYmcCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnkscC54LHAueSkmJmFpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLnByZXZafWZvcig7ZCYmZC56PD1mOyl7aWYoZCE9PWUucHJldiYmZCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJmFpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIGpncihlLHQscil7bGV0IG49ZTtkb3tsZXQgaT1uLnByZXYsbz1uLm5leHQubmV4dDshWlUoaSxvKSYmcnBlKGksbixuLm5leHQsbykmJmY2KGksbykmJmY2KG8saSkmJih0LnB1c2goaS5pL3IpLHQucHVzaChuLmkvciksdC5wdXNoKG8uaS9yKSxwNihuKSxwNihuLm5leHQpLG49ZT1vKSxuPW4ubmV4dH13aGlsZShuIT09ZSk7cmV0dXJuIEcwKG4pfWZ1bmN0aW9uIFhncihlLHQscixuLGksbyl7bGV0IGE9ZTtkb3tsZXQgcz1hLm5leHQubmV4dDtmb3IoO3MhPT1hLnByZXY7KXtpZihhLmkhPT1zLmkmJm4wcihhLHMpKXtsZXQgbD1ucGUoYSxzKTthPUcwKGEsYS5uZXh0KSxsPUcwKGwsbC5uZXh0KSxoNihhLHQscixuLGksbyksaDYobCx0LHIsbixpLG8pO3JldHVybn1zPXMubmV4dH1hPWEubmV4dH13aGlsZShhIT09ZSl9ZnVuY3Rpb24gJGdyKGUsdCxyLG4pe2xldCBpPVtdLG8sYSxzLGwsYztmb3Iobz0wLGE9dC5sZW5ndGg7bzxhO28rKylzPXRbb10qbixsPW88YS0xP3RbbysxXSpuOmUubGVuZ3RoLGM9ZXBlKGUscyxsLG4sITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLGkucHVzaChyMHIoYykpO2ZvcihpLnNvcnQoS2dyKSxvPTA7bzxpLmxlbmd0aDtvKyspWmdyKGlbb10scikscj1HMChyLHIubmV4dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gS2dyKGUsdCl7cmV0dXJuIGUueC10Lnh9ZnVuY3Rpb24gWmdyKGUsdCl7aWYodD1KZ3IoZSx0KSx0KXtsZXQgcj1ucGUodCxlKTtHMCh0LHQubmV4dCksRzAocixyLm5leHQpfX1mdW5jdGlvbiBKZ3IoZSx0KXtsZXQgcj10LG49ZS54LGk9ZS55LG89LTEvMCxhO2Rve2lmKGk8PXIueSYmaT49ci5uZXh0LnkmJnIubmV4dC55IT09ci55KXtsZXQgZj1yLngrKGktci55KSooci5uZXh0Lngtci54KS8oci5uZXh0Lnktci55KTtpZihmPD1uJiZmPm8pe2lmKG89ZixmPT09bil7aWYoaT09PXIueSlyZXR1cm4gcjtpZihpPT09ci5uZXh0LnkpcmV0dXJuIHIubmV4dH1hPXIueDxyLm5leHQueD9yOnIubmV4dH19cj1yLm5leHR9d2hpbGUociE9PXQpO2lmKCFhKXJldHVybiBudWxsO2lmKG49PT1vKXJldHVybiBhO2xldCBzPWEsbD1hLngsYz1hLnksdT0xLzAsaDtyPWE7ZG8gbj49ci54JiZyLng+PWwmJm4hPT1yLngmJkgzKGk8Yz9uOm8saSxsLGMsaTxjP286bixpLHIueCxyLnkpJiYoaD1NYXRoLmFicyhpLXIueSkvKG4tci54KSxmNihyLGUpJiYoaDx1fHxoPT09dSYmKHIueD5hLnh8fHIueD09PWEueCYmUWdyKGEscikpKSYmKGE9cix1PWgpKSxyPXIubmV4dDt3aGlsZShyIT09cyk7cmV0dXJuIGF9ZnVuY3Rpb24gUWdyKGUsdCl7cmV0dXJuIGFpKGUucHJldixlLHQucHJldik8MCYmYWkodC5uZXh0LGUsZS5uZXh0KTwwfWZ1bmN0aW9uIHQwcihlLHQscixuKXtsZXQgaT1lO2RvIGkuej09PW51bGwmJihpLno9bmh0KGkueCxpLnksdCxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dDt3aGlsZShpIT09ZSk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxlMHIoaSl9ZnVuY3Rpb24gZTByKGUpe2xldCB0LHIsbixpLG8sYSxzLGwsYz0xO2Rve2ZvcihyPWUsZT1udWxsLG89bnVsbCxhPTA7cjspe2ZvcihhKyssbj1yLHM9MCx0PTA7dDxjJiYocysrLG49bi5uZXh0WiwhIW4pO3QrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspcyE9PTAmJihsPT09MHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksbz9vLm5leHRaPWk6ZT1pLGkucHJldlo9byxvPWk7cj1ufW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKGE+MSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmh0KGUsdCxyLG4saSl7cmV0dXJuIGU9MzI3NjcqKGUtcikqaSx0PTMyNzY3Kih0LW4pKmksZT0oZXxlPDw4KSYxNjcxMTkzNSxlPShlfGU8PDQpJjI1MjY0NTEzNSxlPShlfGU8PDIpJjg1ODk5MzQ1OSxlPShlfGU8PDEpJjE0MzE2NTU3NjUsdD0odHx0PDw4KSYxNjcxMTkzNSx0PSh0fHQ8PDQpJjI1MjY0NTEzNSx0PSh0fHQ8PDIpJjg1ODk5MzQ1OSx0PSh0fHQ8PDEpJjE0MzE2NTU3NjUsZXx0PDwxfWZ1bmN0aW9uIHIwcihlKXtsZXQgdD1lLHI9ZTtkbyh0Lng8ci54fHx0Lng9PT1yLngmJnQueTxyLnkpJiYocj10KSx0PXQubmV4dDt3aGlsZSh0IT09ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSDMoZSx0LHIsbixpLG8sYSxzKXtyZXR1cm4oaS1hKSoodC1zKS0oZS1hKSooby1zKT49MCYmKGUtYSkqKG4tcyktKHItYSkqKHQtcyk+PTAmJihyLWEpKihvLXMpLShpLWEpKihuLXMpPj0wfWZ1bmN0aW9uIG4wcihlLHQpe3JldHVybiBlLm5leHQuaSE9PXQuaSYmZS5wcmV2LmkhPT10LmkmJiFpMHIoZSx0KSYmKGY2KGUsdCkmJmY2KHQsZSkmJm8wcihlLHQpJiYoYWkoZS5wcmV2LGUsdC5wcmV2KXx8YWkoZSx0LnByZXYsdCkpfHxaVShlLHQpJiZhaShlLnByZXYsZSxlLm5leHQpPjAmJmFpKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gYWkoZSx0LHIpe3JldHVybih0LnktZS55KSooci54LXQueCktKHQueC1lLngpKihyLnktdC55KX1mdW5jdGlvbiBaVShlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueX1mdW5jdGlvbiBycGUoZSx0LHIsbil7bGV0IGk9R1YoYWkoZSx0LHIpKSxvPUdWKGFpKGUsdCxuKSksYT1HVihhaShyLG4sZSkpLHM9R1YoYWkocixuLHQpKTtyZXR1cm4hIShpIT09byYmYSE9PXN8fGk9PT0wJiZxVihlLHIsdCl8fG89PT0wJiZxVihlLG4sdCl8fGE9PT0wJiZxVihyLGUsbil8fHM9PT0wJiZxVihyLHQsbikpfWZ1bmN0aW9uIHFWKGUsdCxyKXtyZXR1cm4gdC54PD1NYXRoLm1heChlLngsci54KSYmdC54Pj1NYXRoLm1pbihlLngsci54KSYmdC55PD1NYXRoLm1heChlLnksci55KSYmdC55Pj1NYXRoLm1pbihlLnksci55KX1mdW5jdGlvbiBHVihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9ZnVuY3Rpb24gaTByKGUsdCl7bGV0IHI9ZTtkb3tpZihyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZycGUocixyLm5leHQsZSx0KSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09ZSk7cmV0dXJuITF9ZnVuY3Rpb24gZjYoZSx0KXtyZXR1cm4gYWkoZS5wcmV2LGUsZS5uZXh0KTwwP2FpKGUsdCxlLm5leHQpPj0wJiZhaShlLGUucHJldix0KT49MDphaShlLHQsZS5wcmV2KTwwfHxhaShlLGUubmV4dCx0KTwwfWZ1bmN0aW9uIG8wcihlLHQpe2xldCByPWUsbj0hMSxpPShlLngrdC54KS8yLG89KGUueSt0LnkpLzI7ZG8gci55Pm8hPXIubmV4dC55Pm8mJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihvLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHQ7d2hpbGUociE9PWUpO3JldHVybiBufWZ1bmN0aW9uIG5wZShlLHQpe2xldCByPW5ldyBpaHQoZS5pLGUueCxlLnkpLG49bmV3IGlodCh0LmksdC54LHQueSksaT1lLm5leHQsbz10LnByZXY7cmV0dXJuIGUubmV4dD10LHQucHJldj1lLHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLG59ZnVuY3Rpb24gbWhlKGUsdCxyLG4pe2xldCBpPW5ldyBpaHQoZSx0LHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBwNihlKXtlLm5leHQucHJldj1lLnByZXYsZS5wcmV2Lm5leHQ9ZS5uZXh0LGUucHJldlomJihlLnByZXZaLm5leHRaPWUubmV4dFopLGUubmV4dFomJihlLm5leHRaLnByZXZaPWUucHJldlopfWZ1bmN0aW9uIGlodChlLHQscil7dGhpcy5pPWUsdGhpcy54PXQsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gYTByKGUsdCxyLG4pe2xldCBpPTA7Zm9yKGxldCBvPXQsYT1yLW47bzxyO28rPW4paSs9KGVbYV0tZVtvXSkqKGVbbysxXStlW2ErMV0pLGE9bztyZXR1cm4gaX12YXIgWmM9Y2xhc3N7c3RhdGljIGFyZWEodCl7bGV0IHI9dC5sZW5ndGgsbj0wO2ZvcihsZXQgaT1yLTEsbz0wO288cjtpPW8rKyluKz10W2ldLngqdFtvXS55LXRbb10ueCp0W2ldLnk7cmV0dXJuIG4qLjV9c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiBaYy5hcmVhKHQpPDB9c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUodCxyKXtsZXQgbj1bXSxpPVtdLG89W107Z2hlKHQpLF9oZShuLHQpO2xldCBhPXQubGVuZ3RoO3IuZm9yRWFjaChnaGUpO2ZvcihsZXQgbD0wO2w8ci5sZW5ndGg7bCsrKWkucHVzaChhKSxhKz1yW2xdLmxlbmd0aCxfaGUobixyW2xdKTtsZXQgcz1HZ3IudHJpYW5ndWxhdGUobixpKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTMpby5wdXNoKHMuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIGdoZShlKXtsZXQgdD1lLmxlbmd0aDt0PjImJmVbdC0xXS5lcXVhbHMoZVswXSkmJmUucG9wKCl9ZnVuY3Rpb24gX2hlKGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZS5wdXNoKHRbcl0ueCksZS5wdXNoKHRbcl0ueSl9dmFyIGhoPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCguNSwuNSksbmV3IEx0KC0uNSwuNSksbmV3IEx0KC0uNSwtLjUpLG5ldyBMdCguNSwtLjUpXSkscj17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOnJ9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgbj10aGlzLGk9W10sbz1bXTtmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspe2xldCBjPXRbc107YShjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShvLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gYShzKXtsZXQgbD1bXSxjPXIuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9yLmN1cnZlU2VnbWVudHM6MTIsdT1yLnN0ZXBzIT09dm9pZCAwP3Iuc3RlcHM6MSxoPXIuZGVwdGghPT12b2lkIDA/ci5kZXB0aDoxLGY9ci5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ci5iZXZlbEVuYWJsZWQ6ITAscD1yLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP3IuYmV2ZWxUaGlja25lc3M6LjIsZD1yLmJldmVsU2l6ZSE9PXZvaWQgMD9yLmJldmVsU2l6ZTpwLS4xLGc9ci5iZXZlbE9mZnNldCE9PXZvaWQgMD9yLmJldmVsT2Zmc2V0OjAsXz1yLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ci5iZXZlbFNlZ21lbnRzOjMseT1yLmV4dHJ1ZGVQYXRoLHg9ci5VVkdlbmVyYXRvciE9PXZvaWQgMD9yLlVWR2VuZXJhdG9yOnMwcjtyLmFtb3VudCE9PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxoPXIuYW1vdW50KTtsZXQgYixTPSExLEMsUCxrLE87eSYmKGI9eS5nZXRTcGFjZWRQb2ludHModSksUz0hMCxmPSExLEM9eS5jb21wdXRlRnJlbmV0RnJhbWVzKHUsITEpLFA9bmV3IGosaz1uZXcgaixPPW5ldyBqKSxmfHwoXz0wLHA9MCxkPTAsZz0wKTtsZXQgRD1zLmV4dHJhY3RQb2ludHMoYyksQj1ELnNoYXBlLEk9RC5ob2xlcztpZighWmMuaXNDbG9ja1dpc2UoQikpe0I9Qi5yZXZlcnNlKCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO1pjLmlzQ2xvY2tXaXNlKGh0KSYmKElbcV09aHQucmV2ZXJzZSgpKX19bGV0IFI9WmMudHJpYW5ndWxhdGVTaGFwZShCLEkpLEY9Qjtmb3IobGV0IHE9MCxwdD1JLmxlbmd0aDtxPHB0O3ErKyl7bGV0IGh0PUlbcV07Qj1CLmNvbmNhdChodCl9ZnVuY3Rpb24geihxLHB0LGh0KXtyZXR1cm4gcHR8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IikscHQuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihodCkuYWRkKHEpfWxldCBVPUIubGVuZ3RoLFc9Ui5sZW5ndGg7ZnVuY3Rpb24gWihxLHB0LGh0KXtsZXQgd3Qsa3QsaWUsZWU9cS54LXB0LngsTGU9cS55LXB0LnksYXI9aHQueC1xLngsZnI9aHQueS1xLnksdHQ9ZWUqZWUrTGUqTGUsJD1lZSpmci1MZSphcjtpZihNYXRoLmFicygkKT5OdW1iZXIuRVBTSUxPTil7bGV0IEl0PU1hdGguc3FydCh0dCksJHQ9TWF0aC5zcXJ0KGFyKmFyK2ZyKmZyKSxoZT1wdC54LUxlL0l0LFR0PXB0LnkrZWUvSXQsYmU9aHQueC1mci8kdCxudD1odC55K2FyLyR0LEN0PSgoYmUtaGUpKmZyLShudC1UdCkqYXIpLyhlZSpmci1MZSphcik7d3Q9aGUrZWUqQ3QtcS54LGt0PVR0K0xlKkN0LXEueTtsZXQgV3Q9d3Qqd3Qra3Qqa3Q7aWYoV3Q8PTIpcmV0dXJuIG5ldyBMdCh3dCxrdCk7aWU9TWF0aC5zcXJ0KFd0LzIpfWVsc2V7bGV0IEl0PSExO2VlPk51bWJlci5FUFNJTE9OP2FyPk51bWJlci5FUFNJTE9OJiYoSXQ9ITApOmVlPC1OdW1iZXIuRVBTSUxPTj9hcjwtTnVtYmVyLkVQU0lMT04mJihJdD0hMCk6TWF0aC5zaWduKExlKT09PU1hdGguc2lnbihmcikmJihJdD0hMCksSXQ/KHd0PS1MZSxrdD1lZSxpZT1NYXRoLnNxcnQodHQpKTood3Q9ZWUsa3Q9TGUsaWU9TWF0aC5zcXJ0KHR0LzIpKX1yZXR1cm4gbmV3IEx0KHd0L2llLGt0L2llKX1sZXQgcnQ9W107Zm9yKGxldCBxPTAscHQ9Ri5sZW5ndGgsaHQ9cHQtMSx3dD1xKzE7cTxwdDtxKyssaHQrKyx3dCsrKWh0PT09cHQmJihodD0wKSx3dD09PXB0JiYod3Q9MCkscnRbcV09WihGW3FdLEZbaHRdLEZbd3RdKTtsZXQgb3Q9W10sc3QsU3Q9cnQuY29uY2F0KCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO3N0PVtdO2ZvcihsZXQgd3Q9MCxrdD1odC5sZW5ndGgsaWU9a3QtMSxlZT13dCsxO3d0PGt0O3d0KyssaWUrKyxlZSsrKWllPT09a3QmJihpZT0wKSxlZT09PWt0JiYoZWU9MCksc3Rbd3RdPVooaHRbd3RdLGh0W2llXSxodFtlZV0pO290LnB1c2goc3QpLFN0PVN0LmNvbmNhdChzdCl9Zm9yKGxldCBxPTA7cTxfO3ErKyl7bGV0IHB0PXEvXyxodD1wKk1hdGguY29zKHB0Kk1hdGguUEkvMiksd3Q9ZCpNYXRoLnNpbihwdCpNYXRoLlBJLzIpK2c7Zm9yKGxldCBrdD0wLGllPUYubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT16KEZba3RdLHJ0W2t0XSx3dCk7X3QoZWUueCxlZS55LC1odCl9Zm9yKGxldCBrdD0wLGllPUkubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT1JW2t0XTtzdD1vdFtrdF07Zm9yKGxldCBMZT0wLGFyPWVlLmxlbmd0aDtMZTxhcjtMZSsrKXtsZXQgZnI9eihlZVtMZV0sc3RbTGVdLHd0KTtfdChmci54LGZyLnksLWh0KX19fWxldCBidD1kK2c7Zm9yKGxldCBxPTA7cTxVO3ErKyl7bGV0IHB0PWY/eihCW3FdLFN0W3FdLGJ0KTpCW3FdO1M/KGsuY29weShDLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHB0LngpLFAuY29weShDLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIocHQueSksTy5jb3B5KGJbMF0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChwdC54LHB0LnksMCl9Zm9yKGxldCBxPTE7cTw9dTtxKyspZm9yKGxldCBwdD0wO3B0PFU7cHQrKyl7bGV0IGh0PWY/eihCW3B0XSxTdFtwdF0sYnQpOkJbcHRdO1M/KGsuY29weShDLm5vcm1hbHNbcV0pLm11bHRpcGx5U2NhbGFyKGh0LngpLFAuY29weShDLmJpbm9ybWFsc1txXSkubXVsdGlwbHlTY2FsYXIoaHQueSksTy5jb3B5KGJbcV0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChodC54LGh0LnksaC91KnEpfWZvcihsZXQgcT1fLTE7cT49MDtxLS0pe2xldCBwdD1xL18saHQ9cCpNYXRoLmNvcyhwdCpNYXRoLlBJLzIpLHd0PWQqTWF0aC5zaW4ocHQqTWF0aC5QSS8yKStnO2ZvcihsZXQga3Q9MCxpZT1GLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9eihGW2t0XSxydFtrdF0sd3QpO190KGVlLngsZWUueSxoK2h0KX1mb3IobGV0IGt0PTAsaWU9SS5sZW5ndGg7a3Q8aWU7a3QrKyl7bGV0IGVlPUlba3RdO3N0PW90W2t0XTtmb3IobGV0IExlPTAsYXI9ZWUubGVuZ3RoO0xlPGFyO0xlKyspe2xldCBmcj16KGVlW0xlXSxzdFtMZV0sd3QpO1M/X3QoZnIueCxmci55K2JbdS0xXS55LGJbdS0xXS54K2h0KTpfdChmci54LGZyLnksaCtodCl9fX1NdCgpLGx0KCk7ZnVuY3Rpb24gTXQoKXtsZXQgcT1pLmxlbmd0aC8zO2lmKGYpe2xldCBwdD0wLGh0PVUqcHQ7Zm9yKGxldCB3dD0wO3d0PFc7d3QrKyl7bGV0IGt0PVJbd3RdO2N0KGt0WzJdK2h0LGt0WzFdK2h0LGt0WzBdK2h0KX1wdD11K18qMixodD1VKnB0O2ZvcihsZXQgd3Q9MDt3dDxXO3d0Kyspe2xldCBrdD1SW3d0XTtjdChrdFswXStodCxrdFsxXStodCxrdFsyXStodCl9fWVsc2V7Zm9yKGxldCBwdD0wO3B0PFc7cHQrKyl7bGV0IGh0PVJbcHRdO2N0KGh0WzJdLGh0WzFdLGh0WzBdKX1mb3IobGV0IHB0PTA7cHQ8VztwdCsrKXtsZXQgaHQ9UltwdF07Y3QoaHRbMF0rVSp1LGh0WzFdK1UqdSxodFsyXStVKnUpfX1uLmFkZEdyb3VwKHEsaS5sZW5ndGgvMy1xLDApfWZ1bmN0aW9uIGx0KCl7bGV0IHE9aS5sZW5ndGgvMyxwdD0wO0t0KEYscHQpLHB0Kz1GLmxlbmd0aDtmb3IobGV0IGh0PTAsd3Q9SS5sZW5ndGg7aHQ8d3Q7aHQrKyl7bGV0IGt0PUlbaHRdO0t0KGt0LHB0KSxwdCs9a3QubGVuZ3RofW4uYWRkR3JvdXAocSxpLmxlbmd0aC8zLXEsMSl9ZnVuY3Rpb24gS3QocSxwdCl7bGV0IGh0PXEubGVuZ3RoO2Zvcig7LS1odD49MDspe2xldCB3dD1odCxrdD1odC0xO2t0PDAmJihrdD1xLmxlbmd0aC0xKTtmb3IobGV0IGllPTAsZWU9dStfKjI7aWU8ZWU7aWUrKyl7bGV0IExlPVUqaWUsYXI9VSooaWUrMSksZnI9cHQrd3QrTGUsdHQ9cHQra3QrTGUsJD1wdCtrdCthcixJdD1wdCt3dCthcjtYKGZyLHR0LCQsSXQpfX19ZnVuY3Rpb24gX3QocSxwdCxodCl7bC5wdXNoKHEpLGwucHVzaChwdCksbC5wdXNoKGh0KX1mdW5jdGlvbiBjdChxLHB0LGh0KXtldChxKSxldChwdCksZXQoaHQpO2xldCB3dD1pLmxlbmd0aC8zLGt0PXguZ2VuZXJhdGVUb3BVVihuLGksd3QtMyx3dC0yLHd0LTEpO2R0KGt0WzBdKSxkdChrdFsxXSksZHQoa3RbMl0pfWZ1bmN0aW9uIFgocSxwdCxodCx3dCl7ZXQocSksZXQocHQpLGV0KHd0KSxldChwdCksZXQoaHQpLGV0KHd0KTtsZXQga3Q9aS5sZW5ndGgvMyxpZT14LmdlbmVyYXRlU2lkZVdhbGxVVihuLGksa3QtNixrdC0zLGt0LTIsa3QtMSk7ZHQoaWVbMF0pLGR0KGllWzFdKSxkdChpZVszXSksZHQoaWVbMV0pLGR0KGllWzJdKSxkdChpZVszXSl9ZnVuY3Rpb24gZXQocSl7aS5wdXNoKGxbcSozKzBdKSxpLnB1c2gobFtxKjMrMV0pLGkucHVzaChsW3EqMysyXSl9ZnVuY3Rpb24gZHQocSl7by5wdXNoKHEueCksby5wdXNoKHEueSl9fX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKSxyPXRoaXMucGFyYW1ldGVycy5zaGFwZXMsbj10aGlzLnBhcmFtZXRlcnMub3B0aW9ucztyZXR1cm4gbDByKHIsbix0KX1zdGF0aWMgZnJvbUpTT04odCxyKXtsZXQgbj1bXTtmb3IobGV0IG89MCxhPXQuc2hhcGVzLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW3Quc2hhcGVzW29dXTtuLnB1c2gocyl9bGV0IGk9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiBpIT09dm9pZCAwJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPW5ldyBPaHRbaS50eXBlXSgpLmZyb21KU09OKGkpKSxuZXcgaGgobix0Lm9wdGlvbnMpfX0sczByPXtnZW5lcmF0ZVRvcFVWOmZ1bmN0aW9uKGUsdCxyLG4saSl7bGV0IG89dFtyKjNdLGE9dFtyKjMrMV0scz10W24qM10sbD10W24qMysxXSxjPXRbaSozXSx1PXRbaSozKzFdO3JldHVybltuZXcgTHQobyxhKSxuZXcgTHQocyxsKSxuZXcgTHQoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihlLHQscixuLGksbyl7bGV0IGE9dFtyKjNdLHM9dFtyKjMrMV0sbD10W3IqMysyXSxjPXRbbiozXSx1PXRbbiozKzFdLGg9dFtuKjMrMl0sZj10W2kqM10scD10W2kqMysxXSxkPXRbaSozKzJdLGc9dFtvKjNdLF89dFtvKjMrMV0seT10W28qMysyXTtyZXR1cm4gTWF0aC5hYnMocy11KTxNYXRoLmFicyhhLWMpP1tuZXcgTHQoYSwxLWwpLG5ldyBMdChjLDEtaCksbmV3IEx0KGYsMS1kKSxuZXcgTHQoZywxLXkpXTpbbmV3IEx0KHMsMS1sKSxuZXcgTHQodSwxLWgpLG5ldyBMdChwLDEtZCksbmV3IEx0KF8sMS15KV19fTtmdW5jdGlvbiBsMHIoZSx0LHIpe2lmKHIuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1lW25dO3Iuc2hhcGVzLnB1c2goby51dWlkKX1lbHNlIHIuc2hhcGVzLnB1c2goZS51dWlkKTtyZXR1cm4gdC5leHRydWRlUGF0aCE9PXZvaWQgMCYmKHIub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxyfXZhciBHMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPSgxK01hdGguc3FydCg1KSkvMixpPVstMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLDAsMCwtMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLG4sMCwtMSxuLDAsMSwtbiwwLC0xLC1uLDAsMV0sbz1bMCwxMSw1LDAsNSwxLDAsMSw3LDAsNywxMCwwLDEwLDExLDEsNSw5LDUsMTEsNCwxMSwxMCwyLDEwLDcsNiw3LDEsOCwzLDksNCwzLDQsMiwzLDIsNiwzLDYsOCwzLDgsOSw0LDksNSwyLDQsMTEsNiwyLDEwLDgsNiw3LDksOCwxXTtzdXBlcihpLG8sdCxyKSx0aGlzLnR5cGU9Ikljb3NhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEcxKHQucmFkaXVzLHQuZGV0YWlsKX19LFcxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1bbmV3IEx0KDAsLjUpLG5ldyBMdCguNSwwKSxuZXcgTHQoMCwtLjUpXSxyPTEyLG49MCxpPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkxhdGhlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cG9pbnRzOnQsc2VnbWVudHM6cixwaGlTdGFydDpuLHBoaUxlbmd0aDppfSxyPU1hdGguZmxvb3IociksaT1abyhpLDAsTWF0aC5QSSoyKTtsZXQgbz1bXSxhPVtdLHM9W10sbD1bXSxjPVtdLHU9MS9yLGg9bmV3IGosZj1uZXcgTHQscD1uZXcgaixkPW5ldyBqLGc9bmV3IGosXz0wLHk9MDtmb3IobGV0IHg9MDt4PD10Lmxlbmd0aC0xO3grKylzd2l0Y2goeCl7Y2FzZSAwOl89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZy5jb3B5KHApLHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KTticmVhaztjYXNlIHQubGVuZ3RoLTE6bC5wdXNoKGcueCxnLnksZy56KTticmVhaztkZWZhdWx0Ol89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZC5jb3B5KHApLHAueCs9Zy54LHAueSs9Zy55LHAueis9Zy56LHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KSxnLmNvcHkoZCl9Zm9yKGxldCB4PTA7eDw9cjt4Kyspe2xldCBiPW4reCp1KmksUz1NYXRoLnNpbihiKSxDPU1hdGguY29zKGIpO2ZvcihsZXQgUD0wO1A8PXQubGVuZ3RoLTE7UCsrKXtoLng9dFtQXS54KlMsaC55PXRbUF0ueSxoLno9dFtQXS54KkMsYS5wdXNoKGgueCxoLnksaC56KSxmLng9eC9yLGYueT1QLyh0Lmxlbmd0aC0xKSxzLnB1c2goZi54LGYueSk7bGV0IGs9bFszKlArMF0qUyxPPWxbMypQKzFdLEQ9bFszKlArMF0qQztjLnB1c2goayxPLEQpfX1mb3IobGV0IHg9MDt4PHI7eCsrKWZvcihsZXQgYj0wO2I8dC5sZW5ndGgtMTtiKyspe2xldCBTPWIreCp0Lmxlbmd0aCxDPVMsUD1TK3QubGVuZ3RoLGs9Uyt0Lmxlbmd0aCsxLE89UysxO28ucHVzaChDLFAsTyksby5wdXNoKGssTyxQKX10aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHMsMikpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShjLDMpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBXMSh0LnBvaW50cyx0LnNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgpfX0sVzA9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj1bMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTFdLGk9WzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXTtzdXBlcihuLGksdCxyKSx0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVzAodC5yYWRpdXMsdC5kZXRhaWwpfX0sWTE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PS41LHI9MSxuPTgsaT0xLG89MCxhPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IlJpbmdHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtpbm5lclJhZGl1czp0LG91dGVyUmFkaXVzOnIsdGhldGFTZWdtZW50czpuLHBoaVNlZ21lbnRzOmksdGhldGFTdGFydDpvLHRoZXRhTGVuZ3RoOmF9LG49TWF0aC5tYXgoMyxuKSxpPU1hdGgubWF4KDEsaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD10LGY9KHItdCkvaSxwPW5ldyBqLGQ9bmV3IEx0O2ZvcihsZXQgZz0wO2c8PWk7ZysrKXtmb3IobGV0IF89MDtfPD1uO18rKyl7bGV0IHk9bytfL24qYTtwLng9aCpNYXRoLmNvcyh5KSxwLnk9aCpNYXRoLnNpbih5KSxsLnB1c2gocC54LHAueSxwLnopLGMucHVzaCgwLDAsMSksZC54PShwLngvcisxKS8yLGQueT0ocC55L3IrMSkvMix1LnB1c2goZC54LGQueSl9aCs9Zn1mb3IobGV0IGc9MDtnPGk7ZysrKXtsZXQgXz1nKihuKzEpO2ZvcihsZXQgeT0wO3k8bjt5Kyspe2xldCB4PXkrXyxiPXgsUz14K24rMSxDPXgrbisyLFA9eCsxO3MucHVzaChiLFMsUCkscy5wdXNoKFMsQyxQKX19dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWTEodC5pbm5lclJhZGl1cyx0Lm91dGVyUmFkaXVzLHQudGhldGFTZWdtZW50cyx0LnBoaVNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LFkwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCgwLC41KSxuZXcgTHQoLS41LC0uNSksbmV3IEx0KC41LC0uNSldKSxyPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOnJ9O2xldCBuPVtdLGk9W10sbz1bXSxhPVtdLHM9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAocyxsLHUpLHMrPWwsbD0wO3RoaXMuc2V0SW5kZXgobiksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9aS5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhyKSxwPWYuc2hhcGUsZD1mLmhvbGVzO1pjLmlzQ2xvY2tXaXNlKHApPT09ITEmJihwPXAucmV2ZXJzZSgpKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107WmMuaXNDbG9ja1dpc2UoeCk9PT0hMCYmKGRbX109eC5yZXZlcnNlKCkpfWxldCBnPVpjLnRyaWFuZ3VsYXRlU2hhcGUocCxkKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107cD1wLmNvbmNhdCh4KX1mb3IobGV0IF89MCx5PXAubGVuZ3RoO188eTtfKyspe2xldCB4PXBbX107aS5wdXNoKHgueCx4LnksMCksby5wdXNoKDAsMCwxKSxhLnB1c2goeC54LHgueSl9Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1nW19dLGI9eFswXStoLFM9eFsxXStoLEM9eFsyXStoO24ucHVzaChiLFMsQyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLHI9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gYzByKHIsdCl9c3RhdGljIGZyb21KU09OKHQscil7bGV0IG49W107Zm9yKGxldCBpPTAsbz10LnNoYXBlcy5sZW5ndGg7aTxvO2krKyl7bGV0IGE9clt0LnNoYXBlc1tpXV07bi5wdXNoKGEpfXJldHVybiBuZXcgWTAobix0LmN1cnZlU2VnbWVudHMpfX07ZnVuY3Rpb24gYzByKGUsdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2xldCBpPWVbcl07dC5zaGFwZXMucHVzaChpLnV1aWQpfWVsc2UgdC5zaGFwZXMucHVzaChlLnV1aWQpO3JldHVybiB0fXZhciBqMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTMyLG49MTYsaT0wLG89TWF0aC5QSSoyLGE9MCxzPU1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJTcGhlcmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx3aWR0aFNlZ21lbnRzOnIsaGVpZ2h0U2VnbWVudHM6bixwaGlTdGFydDppLHBoaUxlbmd0aDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfSxyPU1hdGgubWF4KDMsTWF0aC5mbG9vcihyKSksbj1NYXRoLm1heCgyLE1hdGguZmxvb3IobikpO2xldCBsPU1hdGgubWluKGErcyxNYXRoLlBJKSxjPTAsdT1bXSxoPW5ldyBqLGY9bmV3IGoscD1bXSxkPVtdLGc9W10sXz1bXTtmb3IobGV0IHk9MDt5PD1uO3krKyl7bGV0IHg9W10sYj15L24sUz0wO3k9PTAmJmE9PTA/Uz0uNS9yOnk9PW4mJmw9PU1hdGguUEkmJihTPS0uNS9yKTtmb3IobGV0IEM9MDtDPD1yO0MrKyl7bGV0IFA9Qy9yO2gueD0tdCpNYXRoLmNvcyhpK1AqbykqTWF0aC5zaW4oYStiKnMpLGgueT10Kk1hdGguY29zKGErYipzKSxoLno9dCpNYXRoLnNpbihpK1AqbykqTWF0aC5zaW4oYStiKnMpLGQucHVzaChoLngsaC55LGgueiksZi5jb3B5KGgpLm5vcm1hbGl6ZSgpLGcucHVzaChmLngsZi55LGYueiksXy5wdXNoKFArUywxLWIpLHgucHVzaChjKyspfXUucHVzaCh4KX1mb3IobGV0IHk9MDt5PG47eSsrKWZvcihsZXQgeD0wO3g8cjt4Kyspe2xldCBiPXVbeV1beCsxXSxTPXVbeV1beF0sQz11W3krMV1beF0sUD11W3krMV1beCsxXTsoeSE9PTB8fGE+MCkmJnAucHVzaChiLFMsUCksKHkhPT1uLTF8fGw8TWF0aC5QSSkmJnAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajAodC5yYWRpdXMsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5waGlTdGFydCx0LnBoaUxlbmd0aCx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxqMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPVsxLDEsMSwtMSwtMSwxLC0xLDEsLTEsMSwtMSwtMV0saT1bMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdO3N1cGVyKG4saSx0LHIpLHRoaXMudHlwZT0iVGV0cmFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajEodC5yYWRpdXMsdC5kZXRhaWwpfX0sWDE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0uNCxuPTgsaT02LG89TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx0dWJlOnIscmFkaWFsU2VnbWVudHM6bix0dWJ1bGFyU2VnbWVudHM6aSxhcmM6b30sbj1NYXRoLmZsb29yKG4pLGk9TWF0aC5mbG9vcihpKTtsZXQgYT1bXSxzPVtdLGw9W10sYz1bXSx1PW5ldyBqLGg9bmV3IGosZj1uZXcgajtmb3IobGV0IHA9MDtwPD1uO3ArKylmb3IobGV0IGQ9MDtkPD1pO2QrKyl7bGV0IGc9ZC9pKm8sXz1wL24qTWF0aC5QSSoyO2gueD0odCtyKk1hdGguY29zKF8pKSpNYXRoLmNvcyhnKSxoLnk9KHQrcipNYXRoLmNvcyhfKSkqTWF0aC5zaW4oZyksaC56PXIqTWF0aC5zaW4oXykscy5wdXNoKGgueCxoLnksaC56KSx1Lng9dCpNYXRoLmNvcyhnKSx1Lnk9dCpNYXRoLnNpbihnKSxmLnN1YlZlY3RvcnMoaCx1KS5ub3JtYWxpemUoKSxsLnB1c2goZi54LGYueSxmLnopLGMucHVzaChkL2kpLGMucHVzaChwL24pfWZvcihsZXQgcD0xO3A8PW47cCsrKWZvcihsZXQgZD0xO2Q8PWk7ZCsrKXtsZXQgZz0oaSsxKSpwK2QtMSxfPShpKzEpKihwLTEpK2QtMSx5PShpKzEpKihwLTEpK2QseD0oaSsxKSpwK2Q7YS5wdXNoKGcsXyx4KSxhLnB1c2goXyx5LHgpfXRoaXMuc2V0SW5kZXgoYSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGMsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFgxKHQucmFkaXVzLHQudHViZSx0LnJhZGlhbFNlZ21lbnRzLHQudHVidWxhclNlZ21lbnRzLHQuYXJjKX19LCQxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9LjQsbj02NCxpPTgsbz0yLGE9Myl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6cix0dWJ1bGFyU2VnbWVudHM6bixyYWRpYWxTZWdtZW50czppLHA6byxxOmF9LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD1uZXcgaixmPW5ldyBqLHA9bmV3IGosZD1uZXcgaixnPW5ldyBqLF89bmV3IGoseT1uZXcgajtmb3IobGV0IGI9MDtiPD1uOysrYil7bGV0IFM9Yi9uKm8qTWF0aC5QSSoyO3goUyxvLGEsdCxwKSx4KFMrLjAxLG8sYSx0LGQpLF8uc3ViVmVjdG9ycyhkLHApLHkuYWRkVmVjdG9ycyhkLHApLGcuY3Jvc3NWZWN0b3JzKF8seSkseS5jcm9zc1ZlY3RvcnMoZyxfKSxnLm5vcm1hbGl6ZSgpLHkubm9ybWFsaXplKCk7Zm9yKGxldCBDPTA7Qzw9aTsrK0Mpe2xldCBQPUMvaSpNYXRoLlBJKjIsaz0tcipNYXRoLmNvcyhQKSxPPXIqTWF0aC5zaW4oUCk7aC54PXAueCsoayp5LngrTypnLngpLGgueT1wLnkrKGsqeS55K08qZy55KSxoLno9cC56KyhrKnkueitPKmcueiksbC5wdXNoKGgueCxoLnksaC56KSxmLnN1YlZlY3RvcnMoaCxwKS5ub3JtYWxpemUoKSxjLnB1c2goZi54LGYueSxmLnopLHUucHVzaChiL24pLHUucHVzaChDL2kpfX1mb3IobGV0IGI9MTtiPD1uO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztzLnB1c2goQyxQLE8pLHMucHVzaChQLGssTyl9dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSk7ZnVuY3Rpb24geChiLFMsQyxQLGspe2xldCBPPU1hdGguY29zKGIpLEQ9TWF0aC5zaW4oYiksQj1DL1MqYixJPU1hdGguY29zKEIpO2sueD1QKigyK0kpKi41Kk8say55PVAqKDIrSSkqRCouNSxrLno9UCpNYXRoLnNpbihCKSouNX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgJDEodC5yYWRpdXMsdC50dWJlLHQudHVidWxhclNlZ21lbnRzLHQucmFkaWFsU2VnbWVudHMsdC5wLHQucSl9fSxLMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IGhNKG5ldyBqKC0xLC0xLDApLG5ldyBqKC0xLDEsMCksbmV3IGooMSwxLDApKSxyPTY0LG49MSxpPTgsbz0hMSl7c3VwZXIoKSx0aGlzLnR5cGU9IlR1YmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtwYXRoOnQsdHVidWxhclNlZ21lbnRzOnIscmFkaXVzOm4scmFkaWFsU2VnbWVudHM6aSxjbG9zZWQ6b307bGV0IGE9dC5jb21wdXRlRnJlbmV0RnJhbWVzKHIsbyk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzLHRoaXMubm9ybWFscz1hLm5vcm1hbHMsdGhpcy5iaW5vcm1hbHM9YS5iaW5vcm1hbHM7bGV0IHM9bmV3IGosbD1uZXcgaixjPW5ldyBMdCx1PW5ldyBqLGg9W10sZj1bXSxwPVtdLGQ9W107ZygpLHRoaXMuc2V0SW5kZXgoZCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHAsMikpO2Z1bmN0aW9uIGcoKXtmb3IobGV0IGI9MDtiPHI7YisrKV8oYik7XyhvPT09ITE/cjowKSx4KCkseSgpfWZ1bmN0aW9uIF8oYil7dT10LmdldFBvaW50QXQoYi9yLHUpO2xldCBTPWEubm9ybWFsc1tiXSxDPWEuYmlub3JtYWxzW2JdO2ZvcihsZXQgUD0wO1A8PWk7UCsrKXtsZXQgaz1QL2kqTWF0aC5QSSoyLE89TWF0aC5zaW4oayksRD0tTWF0aC5jb3Moayk7bC54PUQqUy54K08qQy54LGwueT1EKlMueStPKkMueSxsLno9RCpTLnorTypDLnosbC5ub3JtYWxpemUoKSxmLnB1c2gobC54LGwueSxsLnopLHMueD11LngrbipsLngscy55PXUueStuKmwueSxzLno9dS56K24qbC56LGgucHVzaChzLngscy55LHMueil9fWZ1bmN0aW9uIHkoKXtmb3IobGV0IGI9MTtiPD1yO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztkLnB1c2goQyxQLE8pLGQucHVzaChQLGssTyl9fWZ1bmN0aW9uIHgoKXtmb3IobGV0IGI9MDtiPD1yO2IrKylmb3IobGV0IFM9MDtTPD1pO1MrKyljLng9Yi9yLGMueT1TL2kscC5wdXNoKGMueCxjLnkpfX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5wYXRoPXRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpLHR9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSzEobmV3IE9odFt0LnBhdGgudHlwZV0oKS5mcm9tSlNPTih0LnBhdGgpLHQudHVidWxhclNlZ21lbnRzLHQucmFkaXVzLHQucmFkaWFsU2VnbWVudHMsdC5jbG9zZWQpfX0sZDY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PW51bGwpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJXaXJlZnJhbWVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtnZW9tZXRyeTp0fSx0IT09bnVsbCl7bGV0IHI9W10sbj1uZXcgU2V0LGk9bmV3IGosbz1uZXcgajtpZih0LmluZGV4IT09bnVsbCl7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLHM9dC5pbmRleCxsPXQuZ3JvdXBzO2wubGVuZ3RoPT09MCYmKGw9W3tzdGFydDowLGNvdW50OnMuY291bnQsbWF0ZXJpYWxJbmRleDowfV0pO2ZvcihsZXQgYz0wLHU9bC5sZW5ndGg7Yzx1OysrYyl7bGV0IGg9bFtjXSxmPWguc3RhcnQscD1oLmNvdW50O2ZvcihsZXQgZD1mLGc9ZitwO2Q8ZztkKz0zKWZvcihsZXQgXz0wO188MztfKyspe2xldCB5PXMuZ2V0WChkK18pLHg9cy5nZXRYKGQrKF8rMSklMyk7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGEseSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGEseCkseWhlKGksbyxuKT09PSEwJiYoci5wdXNoKGkueCxpLnksaS56KSxyLnB1c2goby54LG8ueSxvLnopKX19fWVsc2V7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGw9YS5jb3VudC8zO3M8bDtzKyspZm9yKGxldCBjPTA7YzwzO2MrKyl7bGV0IHU9MypzK2MsaD0zKnMrKGMrMSklMztpLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxoKSx5aGUoaSxvLG4pPT09ITAmJihyLnB1c2goaS54LGkueSxpLnopLHIucHVzaChvLngsby55LG8ueikpfX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKX19fTtmdW5jdGlvbiB5aGUoZSx0LHIpe2xldCBuPWAke2UueH0sJHtlLnl9LCR7ZS56fS0ke3QueH0sJHt0Lnl9LCR7dC56fWAsaT1gJHt0Lnh9LCR7dC55fSwke3Quen0tJHtlLnh9LCR7ZS55fSwke2Uuen1gO3JldHVybiByLmhhcyhuKT09PSEwfHxyLmhhcyhpKT09PSEwPyExOihyLmFkZChuLGkpLCEwKX12YXIgdmhlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJveEdlb21ldHJ5OlFmLEJveEJ1ZmZlckdlb21ldHJ5OlFmLENpcmNsZUdlb21ldHJ5OkYxLENpcmNsZUJ1ZmZlckdlb21ldHJ5OkYxLENvbmVHZW9tZXRyeTpCMSxDb25lQnVmZmVyR2VvbWV0cnk6QjEsQ3lsaW5kZXJHZW9tZXRyeTpvbSxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5Om9tLERvZGVjYWhlZHJvbkdlb21ldHJ5OkgxLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OkgxLEVkZ2VzR2VvbWV0cnk6czYsRXh0cnVkZUdlb21ldHJ5OmhoLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpoaCxJY29zYWhlZHJvbkdlb21ldHJ5OkcxLEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6RzEsTGF0aGVHZW9tZXRyeTpXMSxMYXRoZUJ1ZmZlckdlb21ldHJ5OlcxLE9jdGFoZWRyb25HZW9tZXRyeTpXMCxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6VzAsUGxhbmVHZW9tZXRyeTpWMCxQbGFuZUJ1ZmZlckdlb21ldHJ5OlYwLFBvbHloZWRyb25HZW9tZXRyeTp1aCxQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6dWgsUmluZ0dlb21ldHJ5OlkxLFJpbmdCdWZmZXJHZW9tZXRyeTpZMSxTaGFwZUdlb21ldHJ5OlkwLFNoYXBlQnVmZmVyR2VvbWV0cnk6WTAsU3BoZXJlR2VvbWV0cnk6ajAsU3BoZXJlQnVmZmVyR2VvbWV0cnk6ajAsVGV0cmFoZWRyb25HZW9tZXRyeTpqMSxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OmoxLFRvcnVzR2VvbWV0cnk6WDEsVG9ydXNCdWZmZXJHZW9tZXRyeTpYMSxUb3J1c0tub3RHZW9tZXRyeTokMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTokMSxUdWJlR2VvbWV0cnk6SzEsVHViZUJ1ZmZlckdlb21ldHJ5OksxLFdpcmVmcmFtZUdlb21ldHJ5OmQ2fSksbTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O202LnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciBwTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBuZSgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtwTS5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMDt2YXIgZzY9Y2xhc3MgZXh0ZW5kcyBwTXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBabygyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24ocil7dGhpcy5pb3I9KDErLjQqcikvKDEtLjQqcil9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBuZSgwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgbmUoMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBuZSgxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX07ZzYucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITA7dmFyIF82PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgbmUoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtfNi5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgeTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt5Ni5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwO3ZhciB2Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07djYucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3ZhciB4Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPU82LHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3g2LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dmFyIGI2PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O2I2LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgdzY9Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt3Ni5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIHUwcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxTaGFkb3dNYXRlcmlhbDptNixTcHJpdGVNYXRlcmlhbDppTSxSYXdTaGFkZXJNYXRlcmlhbDpVMCxTaGFkZXJNYXRlcmlhbDpsaCxQb2ludHNNYXRlcmlhbDpubSxNZXNoUGh5c2ljYWxNYXRlcmlhbDpnNixNZXNoU3RhbmRhcmRNYXRlcmlhbDpwTSxNZXNoUGhvbmdNYXRlcmlhbDpfNixNZXNoVG9vbk1hdGVyaWFsOnk2LE1lc2hOb3JtYWxNYXRlcmlhbDp2NixNZXNoTGFtYmVydE1hdGVyaWFsOng2LE1lc2hEZXB0aE1hdGVyaWFsOmVNLE1lc2hEaXN0YW5jZU1hdGVyaWFsOnJNLE1lc2hCYXNpY01hdGVyaWFsOnNoLE1lc2hNYXRjYXBNYXRlcmlhbDpiNixMaW5lRGFzaGVkTWF0ZXJpYWw6dzYsTGluZUJhc2ljTWF0ZXJpYWw6R2ksTWF0ZXJpYWw6cWl9KSxZbj17YXJyYXlTbGljZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIFluLmlzVHlwZWRBcnJheShlKT9uZXcgZS5jb25zdHJ1Y3RvcihlLnN1YmFycmF5KHQsciE9PXZvaWQgMD9yOmUubGVuZ3RoKSk6ZS5zbGljZSh0LHIpfSxjb252ZXJ0QXJyYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiFlfHwhciYmZS5jb25zdHJ1Y3Rvcj09PXQ/ZTp0eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD09Im51bWJlciI/bmV3IHQoZSk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSl9LGlzVHlwZWRBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLG8pe3JldHVybiBlW2ldLWVbb119bGV0IHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7Zm9yKGxldCBpPTA7aSE9PXI7KytpKW5baV09aTtyZXR1cm4gbi5zb3J0KHQpLG59LHNvcnRlZEFycmF5OmZ1bmN0aW9uKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPW5ldyBlLmNvbnN0cnVjdG9yKG4pO2ZvcihsZXQgbz0wLGE9MDthIT09bjsrK28pe2xldCBzPXJbb10qdDtmb3IobGV0IGw9MDtsIT09dDsrK2wpaVthKytdPWVbcytsXX1yZXR1cm4gaX0sZmxhdHRlbkpTT046ZnVuY3Rpb24oZSx0LHIsbil7bGV0IGk9MSxvPWVbMF07Zm9yKDtvIT09dm9pZCAwJiZvW25dPT09dm9pZCAwOylvPWVbaSsrXTtpZihvPT09dm9pZCAwKXJldHVybjtsZXQgYT1vW25dO2lmKGEhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShhKSlkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaC5hcHBseShyLGEpKSxvPWVbaSsrXTt3aGlsZShvIT09dm9pZCAwKTtlbHNlIGlmKGEudG9BcnJheSE9PXZvaWQgMClkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLGEudG9BcnJheShyLHIubGVuZ3RoKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCk7ZWxzZSBkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaChhKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCl9LHN1YmNsaXA6ZnVuY3Rpb24oZSx0LHIsbixpPTMwKXtsZXQgbz1lLmNsb25lKCk7by5uYW1lPXQ7bGV0IGE9W107Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKXtsZXQgYz1vLnRyYWNrc1tsXSx1PWMuZ2V0VmFsdWVTaXplKCksaD1bXSxmPVtdO2ZvcihsZXQgcD0wO3A8Yy50aW1lcy5sZW5ndGg7KytwKXtsZXQgZD1jLnRpbWVzW3BdKmk7aWYoIShkPHJ8fGQ+PW4pKXtoLnB1c2goYy50aW1lc1twXSk7Zm9yKGxldCBnPTA7Zzx1OysrZylmLnB1c2goYy52YWx1ZXNbcCp1K2ddKX19aC5sZW5ndGghPT0wJiYoYy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkoaCxjLnRpbWVzLmNvbnN0cnVjdG9yKSxjLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkoZixjLnZhbHVlcy5jb25zdHJ1Y3RvciksYS5wdXNoKGMpKX1vLnRyYWNrcz1hO2xldCBzPTEvMDtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpcz5vLnRyYWNrc1tsXS50aW1lc1swXSYmKHM9by50cmFja3NbbF0udGltZXNbMF0pO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClvLnRyYWNrc1tsXS5zaGlmdCgtMSpzKTtyZXR1cm4gby5yZXNldER1cmF0aW9uKCksb30sbWFrZUNsaXBBZGRpdGl2ZTpmdW5jdGlvbihlLHQ9MCxyPWUsbj0zMCl7bjw9MCYmKG49MzApO2xldCBpPXIudHJhY2tzLmxlbmd0aCxvPXQvbjtmb3IobGV0IGE9MDthPGk7KythKXtsZXQgcz1yLnRyYWNrc1thXSxsPXMuVmFsdWVUeXBlTmFtZTtpZihsPT09ImJvb2wifHxsPT09InN0cmluZyIpY29udGludWU7bGV0IGM9ZS50cmFja3MuZmluZChmdW5jdGlvbih5KXtyZXR1cm4geS5uYW1lPT09cy5uYW1lJiZ5LlZhbHVlVHlwZU5hbWU9PT1sfSk7aWYoYz09PXZvaWQgMCljb250aW51ZTtsZXQgdT0wLGg9cy5nZXRWYWx1ZVNpemUoKTtzLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYodT1oLzMpO2xldCBmPTAscD1jLmdldFZhbHVlU2l6ZSgpO2MuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihmPXAvMyk7bGV0IGQ9cy50aW1lcy5sZW5ndGgtMSxnO2lmKG88PXMudGltZXNbMF0pe2xldCB5PXUseD1oLXU7Zz1Zbi5hcnJheVNsaWNlKHMudmFsdWVzLHkseCl9ZWxzZSBpZihvPj1zLnRpbWVzW2RdKXtsZXQgeT1kKmgrdSx4PXkraC11O2c9WW4uYXJyYXlTbGljZShzLnZhbHVlcyx5LHgpfWVsc2V7bGV0IHk9cy5jcmVhdGVJbnRlcnBvbGFudCgpLHg9dSxiPWgtdTt5LmV2YWx1YXRlKG8pLGc9WW4uYXJyYXlTbGljZSh5LnJlc3VsdEJ1ZmZlcix4LGIpfWw9PT0icXVhdGVybmlvbiImJm5ldyB5aSgpLmZyb21BcnJheShnKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KGcpO2xldCBfPWMudGltZXMubGVuZ3RoO2ZvcihsZXQgeT0wO3k8XzsrK3kpe2xldCB4PXkqcCtmO2lmKGw9PT0icXVhdGVybmlvbiIpeWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMseCxnLDAsYy52YWx1ZXMseCk7ZWxzZXtsZXQgYj1wLWYqMjtmb3IobGV0IFM9MDtTPGI7KytTKWMudmFsdWVzW3grU10tPWdbU119fX1yZXR1cm4gZS5ibGVuZE1vZGU9a2h0LGV9fSxmaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9aSE9PXZvaWQgMD9pOm5ldyByLmNvbnN0cnVjdG9yKG4pLHRoaXMuc2FtcGxlVmFsdWVzPXIsdGhpcy52YWx1ZVNpemU9bix0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG49dGhpcy5fY2FjaGVkSW5kZXgsaT1yW25dLG89cltuLTFdO3Q6e2U6e2xldCBhO3I6e246aWYoISh0PGkpKXtmb3IobGV0IHM9bisyOzspe2lmKGk9PT12b2lkIDApe2lmKHQ8bylicmVhayBuO3JldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLHQsbyl9aWYobj09PXMpYnJlYWs7aWYobz1pLGk9clsrK25dLHQ8aSlicmVhayBlfWE9ci5sZW5ndGg7YnJlYWsgcn1pZighKHQ+PW8pKXtsZXQgcz1yWzFdO3Q8cyYmKG49MixvPXMpO2ZvcihsZXQgbD1uLTI7Oyl7aWYobz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYobj09PWwpYnJlYWs7aWYoaT1vLG89clstLW4tMV0sdD49bylicmVhayBlfWE9bixuPTA7YnJlYWsgcn1icmVhayB0fWZvcig7bjxhOyl7bGV0IHM9bithPj4+MTt0PHJbc10/YT1zOm49cysxfWlmKGk9cltuXSxvPXJbbi0xXSxvPT09dm9pZCAwKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxpKTtpZihpPT09dm9pZCAwKXJldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmludGVydmFsQ2hhbmdlZF8obixvLGkpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhuLG8sdCxpKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IHI9dGhpcy5yZXN1bHRCdWZmZXIsbj10aGlzLnNhbXBsZVZhbHVlcyxpPXRoaXMudmFsdWVTaXplLG89dCppO2ZvcihsZXQgYT0wO2EhPT1pOysrYSlyW2FdPW5bbythXTtyZXR1cm4gcn1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O2ZoLnByb3RvdHlwZS5iZWZvcmVTdGFydF89ZmgucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87ZmgucHJvdG90eXBlLmFmdGVyRW5kXz1maC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgU1U9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfX1pbnRlcnZhbENoYW5nZWRfKHQscixuKXtsZXQgaT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixhPXQrMSxzPWlbb10sbD1pW2FdO2lmKHM9PT12b2lkIDApc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgVDE6bz10LHM9MipyLW47YnJlYWs7Y2FzZSBKUDpvPWkubGVuZ3RoLTIscz1yK2lbb10taVtvKzFdO2JyZWFrO2RlZmF1bHQ6bz10LHM9bn1pZihsPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSBUMTphPXQsbD0yKm4tcjticmVhaztjYXNlIEpQOmE9MSxsPW4raVsxXS1pWzBdO2JyZWFrO2RlZmF1bHQ6YT10LTEsbD1yfWxldCBjPShuLXIpKi41LHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhyLXMpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1uKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PWEqdX1pbnRlcnBvbGF0ZV8odCxyLG4saSl7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxzPXRoaXMudmFsdWVTaXplLGw9dCpzLGM9bC1zLHU9dGhpcy5fb2Zmc2V0UHJldixoPXRoaXMuX29mZnNldE5leHQsZj10aGlzLl93ZWlnaHRQcmV2LHA9dGhpcy5fd2VpZ2h0TmV4dCxkPShuLXIpLyhpLXIpLGc9ZCpkLF89ZypkLHk9LWYqXysyKmYqZy1mKmQseD0oMStmKSpfKygtMS41LTIqZikqZysoLS41K2YpKmQrMSxiPSgtMS1wKSpfKygxLjUrcCkqZysuNSpkLFM9cCpfLXAqZztmb3IobGV0IEM9MDtDIT09czsrK0Mpb1tDXT15KmFbdStDXSt4KmFbYytDXStiKmFbbCtDXStTKmFbaCtDXTtyZXR1cm4gb319LFM2PWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSl9aW50ZXJwb2xhdGVfKHQscixuLGkpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyx1PShuLXIpLyhpLXIpLGg9MS11O2ZvcihsZXQgZj0wO2YhPT1zOysrZilvW2ZdPWFbYytmXSpoK2FbbCtmXSp1O3JldHVybiBvfX0sTVU9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRGw9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYocj09PXZvaWQgMHx8ci5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkocix0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkobix0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKGl8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IHI9dC5jb25zdHJ1Y3RvcixuO2lmKHIudG9KU09OIT09dGhpcy50b0pTT04pbj1yLnRvSlNPTih0KTtlbHNle249e25hbWU6dC5uYW1lLHRpbWVzOlluLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6WW4uY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IGk9dC5nZXRJbnRlcnBvbGF0aW9uKCk7aSE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihuLmludGVycG9sYXRpb249aSl9cmV0dXJuIG4udHlwZT10LlZhbHVlVHlwZU5hbWUsbn1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IE1VKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBTNih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgU1UodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IHI7c3dpdGNoKHQpe2Nhc2UgS1A6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgWlA6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjticmVhaztjYXNlIHJVOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7YnJlYWt9aWYocj09PXZvaWQgMCl7bGV0IG49InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodGhpcy5jcmVhdGVJbnRlcnBvbGFudD09PXZvaWQgMClpZih0IT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3Iobik7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLG4pLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9cix0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiBLUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBaUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiByVX19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZih0IT09MCl7bGV0IHI9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbilyW25dKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKHQhPT0xKXtsZXQgcj10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7biE9PWk7KytuKXJbbl0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LHIpe2xldCBuPXRoaXMudGltZXMsaT1uLmxlbmd0aCxvPTAsYT1pLTE7Zm9yKDtvIT09aSYmbltvXTx0OykrK287Zm9yKDthIT09LTEmJm5bYV0+cjspLS1hO2lmKCsrYSxvIT09MHx8YSE9PWkpe28+PWEmJihhPU1hdGgubWF4KGEsMSksbz1hLTEpO2xldCBzPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKG4sbyxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qcyxhKnMpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAscj10aGlzLmdldFZhbHVlU2l6ZSgpO3ItTWF0aC5mbG9vcihyKSE9PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSx0PSExKTtsZXQgbj10aGlzLnRpbWVzLGk9dGhpcy52YWx1ZXMsbz1uLmxlbmd0aDtvPT09MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRyYWNrIGlzIGVtcHR5LiIsdGhpcyksdD0hMSk7bGV0IGE9bnVsbDtmb3IobGV0IHM9MDtzIT09bztzKyspe2xldCBsPW5bc107aWYodHlwZW9mIGw9PSJudW1iZXIiJiZpc05hTihsKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHMsbCksdD0hMTticmVha31pZihhIT09bnVsbCYmYT5sKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMscyxsLGEpLHQ9ITE7YnJlYWt9YT1sfWlmKGkhPT12b2lkIDAmJlluLmlzVHlwZWRBcnJheShpKSlmb3IobGV0IHM9MCxsPWkubGVuZ3RoO3MhPT1sOysrcyl7bGV0IGM9aVtzXTtpZihpc05hTihjKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxzLGMpLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7bGV0IHQ9WW4uYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxyPVluLmFycmF5U2xpY2UodGhpcy52YWx1ZXMpLG49dGhpcy5nZXRWYWx1ZVNpemUoKSxpPXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpPT09clUsbz10Lmxlbmd0aC0xLGE9MTtmb3IobGV0IHM9MTtzPG87KytzKXtsZXQgbD0hMSxjPXRbc10sdT10W3MrMV07aWYoYyE9PXUmJihzIT09MXx8YyE9PXRbMF0pKWlmKGkpbD0hMDtlbHNle2xldCBoPXMqbixmPWgtbixwPWgrbjtmb3IobGV0IGQ9MDtkIT09bjsrK2Qpe2xldCBnPXJbaCtkXTtpZihnIT09cltmK2RdfHxnIT09cltwK2RdKXtsPSEwO2JyZWFrfX19aWYobCl7aWYocyE9PWEpe3RbYV09dFtzXTtsZXQgaD1zKm4sZj1hKm47Zm9yKGxldCBwPTA7cCE9PW47KytwKXJbZitwXT1yW2grcF19KythfX1pZihvPjApe3RbYV09dFtvXTtmb3IobGV0IHM9bypuLGw9YSpuLGM9MDtjIT09bjsrK2MpcltsK2NdPXJbcytjXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKHQsMCxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHIsMCxhKm4pKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPXIpLHRoaXN9Y2xvbmUoKXtsZXQgdD1Zbi5hcnJheVNsaWNlKHRoaXMudGltZXMsMCkscj1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLG49dGhpcy5jb25zdHJ1Y3RvcixpPW5ldyBuKHRoaXMubmFtZSx0LHIpO3JldHVybiBpLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsaX19O0RsLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPVpQO3ZhciBhbT1jbGFzcyBleHRlbmRzIERse307YW0ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiO2FtLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXk7YW0ucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUtQO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBNNj1jbGFzcyBleHRlbmRzIERse307TTYucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgWjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O1oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBFVT1jbGFzcyBleHRlbmRzIGZoe2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKHQscixuLGkpfWludGVycG9sYXRlXyh0LHIsbixpKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD0obi1yKS8oaS1yKSxjPXQqcztmb3IobGV0IHU9YytzO2MhPT11O2MrPTQpeWkuc2xlcnBGbGF0KG8sMCxhLGMtcyxhLGMsbCk7cmV0dXJuIG99fSxYMD1jbGFzcyBleHRlbmRzIERse0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IEVVKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1gwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIjtYMC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249WlA7WDAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIHNtPWNsYXNzIGV4dGVuZHMgRGx7fTtzbS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ic3RyaW5nIjtzbS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3NtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1LUDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgSjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O0oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBRMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9LTEsbixpPSRVKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249cix0aGlzLmJsZW5kTW9kZT1pLHRoaXMudXVpZD1ObCgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCByPVtdLG49dC50cmFja3MsaT0xLyh0LmZwc3x8MSk7Zm9yKGxldCBhPTAscz1uLmxlbmd0aDthIT09czsrK2Epci5wdXNoKGYwcihuW2FdKS5zY2FsZShpKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24scix0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCByPVtdLG49dC50cmFja3MsaT17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6cix1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLGE9bi5sZW5ndGg7byE9PWE7KytvKXIucHVzaChEbC50b0pTT04obltvXSkpO3JldHVybiBpfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LHIsbixpKXtsZXQgbz1yLmxlbmd0aCxhPVtdO2ZvcihsZXQgcz0wO3M8bztzKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChzK28tMSklbyxzLChzKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IHU9WW4uZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPVluLnNvcnRlZEFycmF5KGwsMSx1KSxjPVluLnNvcnRlZEFycmF5KGMsMSx1KSwhaSYmbFswXT09PTAmJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxhLnB1c2gobmV3IFoxKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrcltzXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgdGhpcyh0LC0xLGEpfXN0YXRpYyBmaW5kQnlOYW1lKHQscil7bGV0IG49dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IGk9dDtuPWkuZ2VvbWV0cnkmJmkuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8aS5hbmltYXRpb25zfWZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKG5baV0ubmFtZT09PXIpcmV0dXJuIG5baV07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQscixuKXtsZXQgaT17fSxvPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrKyl7bGV0IGM9dFtzXSx1PWMubmFtZS5tYXRjaChvKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9aVtoXTtmfHwoaVtoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBhPVtdO2ZvcihsZXQgcyBpbiBpKWEucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHMsaVtzXSxyLG4pKTtyZXR1cm4gYX1zdGF0aWMgcGFyc2VBbmltYXRpb24odCxyKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBuPWZ1bmN0aW9uKGgsZixwLGQsZyl7aWYocC5sZW5ndGghPT0wKXtsZXQgXz1bXSx5PVtdO1luLmZsYXR0ZW5KU09OKHAsXyx5LGQpLF8ubGVuZ3RoIT09MCYmZy5wdXNoKG5ldyBoKGYsXyx5KSl9fSxpPVtdLG89dC5uYW1lfHwiZGVmYXVsdCIsYT10LmZwc3x8MzAscz10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBwPXt9LGQ7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKylpZihmW2RdLm1vcnBoVGFyZ2V0cylmb3IobGV0IGc9MDtnPGZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDtnKyspcFtmW2RdLm1vcnBoVGFyZ2V0c1tnXV09LTE7Zm9yKGxldCBnIGluIHApe2xldCBfPVtdLHk9W107Zm9yKGxldCB4PTA7eCE9PWZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3gpe2xldCBiPWZbZF07Xy5wdXNoKGIudGltZSkseS5wdXNoKGIubW9ycGhUYXJnZXQ9PT1nPzE6MCl9aS5wdXNoKG5ldyBaMSgiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIrZysiXSIsXyx5KSl9bD1wLmxlbmd0aCooYXx8MSl9ZWxzZXtsZXQgcD0iLmJvbmVzWyIrcltoXS5uYW1lKyJdIjtuKEoxLHArIi5wb3NpdGlvbiIsZiwicG9zIixpKSxuKFgwLHArIi5xdWF0ZXJuaW9uIixmLCJyb3QiLGkpLG4oSjEscCsiLnNjYWxlIixmLCJzY2wiLGkpfX1yZXR1cm4gaS5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMobyxsLGkscyl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLHI9MDtmb3IobGV0IG49MCxpPXQubGVuZ3RoO24hPT1pOysrbil7bGV0IG89dGhpcy50cmFja3Nbbl07cj1NYXRoLm1heChyLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPXIsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0PXQmJnRoaXMudHJhY2tzW3JdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0LnB1c2godGhpcy50cmFja3Nbcl0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGgwcihlKXtzd2l0Y2goZS50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBaMTtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIEoxO2Nhc2UiY29sb3IiOnJldHVybiBNNjtjYXNlInF1YXRlcm5pb24iOnJldHVybiBYMDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIGFtO2Nhc2Uic3RyaW5nIjpyZXR1cm4gc219dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIitlKX1mdW5jdGlvbiBmMHIoZSl7aWYoZS50eXBlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1oMHIoZS50eXBlKTtpZihlLnRpbWVzPT09dm9pZCAwKXtsZXQgcj1bXSxuPVtdO1luLmZsYXR0ZW5KU09OKGUua2V5cyxyLG4sInZhbHVlIiksZS50aW1lcz1yLGUudmFsdWVzPW59cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShlKTpuZXcgdChlLm5hbWUsZS50aW1lcyxlLnZhbHVlcyxlLmludGVycG9sYXRpb24pfXZhciB0eD17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbZV09dCl9LGdldDpmdW5jdGlvbihlKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tlXX0scmVtb3ZlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmZpbGVzW2VdfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxFNj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9dGhpcyxvPSExLGE9MCxzPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9cix0aGlzLm9uRXJyb3I9bix0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXtzKyssbz09PSExJiZpLm9uU3RhcnQhPT12b2lkIDAmJmkub25TdGFydCh1LGEscyksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe2ErKyxpLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJmkub25Qcm9ncmVzcyh1LGEscyksYT09PXMmJihvPSExLGkub25Mb2FkIT09dm9pZCAwJiZpLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7aS5vbkVycm9yIT09dm9pZCAwJiZpLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgcD1jW2hdLGQ9Y1toKzFdO2lmKHAuZ2xvYmFsJiYocC5sYXN0SW5kZXg9MCkscC50ZXN0KHUpKXJldHVybiBkfXJldHVybiBudWxsfX19LGlwZT1uZXcgRTYsZWE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tYW5hZ2VyPXQhPT12b2lkIDA/dDppcGUsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQscil7bGV0IG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXtuLmxvYWQodCxpLHIsbyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0sWWQ9e30sSmM9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXR4LmdldCh0KTtpZihvIT09dm9pZCAwKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntyJiZyKG8pLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxvO2lmKFlkW3RdIT09dm9pZCAwKXtZZFt0XS5wdXNoKHtvbkxvYWQ6cixvblByb2dyZXNzOm4sb25FcnJvcjppfSk7cmV0dXJufVlkW3RdPVtdLFlkW3RdLnB1c2goe29uTG9hZDpyLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KTtsZXQgYT1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxzPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChhKS50aGVuKGM9PntpZihjLnN0YXR1cz09PTIwMHx8Yy5zdGF0dXM9PT0wKXtpZihjLnN0YXR1cz09PTAmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJ1bmRlZmluZWQifHxjLmJvZHkuZ2V0UmVhZGVyPT09dm9pZCAwKXJldHVybiBjO2xldCB1PVlkW3RdLGg9Yy5ib2R5LmdldFJlYWRlcigpLGY9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxwPWY/cGFyc2VJbnQoZik6MCxkPXAhPT0wLGc9MCxfPW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoeSl7eCgpO2Z1bmN0aW9uIHgoKXtoLnJlYWQoKS50aGVuKCh7ZG9uZTpiLHZhbHVlOlN9KT0+e2lmKGIpeS5jbG9zZSgpO2Vsc2V7Zys9Uy5ieXRlTGVuZ3RoO2xldCBDPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6ZCxsb2FkZWQ6Zyx0b3RhbDpwfSk7Zm9yKGxldCBQPTAsaz11Lmxlbmd0aDtQPGs7UCsrKXtsZXQgTz11W1BdO08ub25Qcm9ncmVzcyYmTy5vblByb2dyZXNzKEMpfXkuZW5xdWV1ZShTKSx4KCl9fSl9fX0pO3JldHVybiBuZXcgUmVzcG9uc2UoXyl9ZWxzZSB0aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh1LHMpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHM9PT12b2lkIDApcmV0dXJuIGMudGV4dCgpO3tsZXQgaD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMocyksZj1oJiZoWzFdP2hbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAscD1uZXcgVGV4dERlY29kZXIoZik7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGQ9PnAuZGVjb2RlKGQpKX19fSkudGhlbihjPT57dHguYWRkKHQsYyk7bGV0IHU9WWRbdF07ZGVsZXRlIFlkW3RdO2ZvcihsZXQgaD0wLGY9dS5sZW5ndGg7aDxmO2grKyl7bGV0IHA9dVtoXTtwLm9uTG9hZCYmcC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVlkW3RdO2lmKHU9PT12b2lkIDApdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBZZFt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBwPXVbaF07cC5vbkVycm9yJiZwLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sb2h0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKHRoaXMubWFuYWdlcik7YS5zZXRQYXRoKHRoaXMucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT1RMS5wYXJzZSh0W25dKTtyLnB1c2goaSl9cmV0dXJuIHJ9fSxhaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1bXSxzPW5ldyBhNixsPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2wuc2V0UGF0aCh0aGlzLnBhdGgpLGwuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGwuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGwuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKTtsZXQgYz0wO2Z1bmN0aW9uIHUoaCl7bC5sb2FkKHRbaF0sZnVuY3Rpb24oZil7bGV0IHA9by5wYXJzZShmLCEwKTthW2hdPXt3aWR0aDpwLndpZHRoLGhlaWdodDpwLmhlaWdodCxmb3JtYXQ6cC5mb3JtYXQsbWlwbWFwczpwLm1pcG1hcHN9LGMrPTEsYz09PTYmJihwLm1pcG1hcENvdW50PT09MSYmKHMubWluRmlsdGVyPWlpKSxzLmltYWdlPWEscy5mb3JtYXQ9cC5mb3JtYXQscy5uZWVkc1VwZGF0ZT0hMCxyJiZyKHMpKX0sbixpKX1pZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgaD0wLGY9dC5sZW5ndGg7aDxmOysraCl1KGgpO2Vsc2UgbC5sb2FkKHQsZnVuY3Rpb24oaCl7bGV0IGY9by5wYXJzZShoLCEwKTtpZihmLmlzQ3ViZW1hcCl7bGV0IHA9Zi5taXBtYXBzLmxlbmd0aC9mLm1pcG1hcENvdW50O2ZvcihsZXQgZD0wO2Q8cDtkKyspe2FbZF09e21pcG1hcHM6W119O2ZvcihsZXQgZz0wO2c8Zi5taXBtYXBDb3VudDtnKyspYVtkXS5taXBtYXBzLnB1c2goZi5taXBtYXBzW2QqZi5taXBtYXBDb3VudCtnXSksYVtkXS5mb3JtYXQ9Zi5mb3JtYXQsYVtkXS53aWR0aD1mLndpZHRoLGFbZF0uaGVpZ2h0PWYuaGVpZ2h0fXMuaW1hZ2U9YX1lbHNlIHMuaW1hZ2Uud2lkdGg9Zi53aWR0aCxzLmltYWdlLmhlaWdodD1mLmhlaWdodCxzLm1pcG1hcHM9Zi5taXBtYXBzO2YubWlwbWFwQ291bnQ9PT0xJiYocy5taW5GaWx0ZXI9aWkpLHMuZm9ybWF0PWYuZm9ybWF0LHMubmVlZHNVcGRhdGU9ITAsciYmcihzKX0sbixpKTtyZXR1cm4gc319LGV4PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXt0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXRoaXMsYT10eC5nZXQodCk7aWYoYSE9PXZvaWQgMClyZXR1cm4gby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ciYmcihhKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksYTtsZXQgcz10NigiaW1nIik7ZnVuY3Rpb24gbCgpe3UoKSx0eC5hZGQodCx0aGlzKSxyJiZyKHRoaXMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGMoaCl7dSgpLGkmJmkoaCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiB1KCl7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKX1yZXR1cm4gcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKSx0LnN1YnN0cigwLDUpIT09ImRhdGE6IiYmdGhpcy5jcm9zc09yaWdpbiE9PXZvaWQgMCYmKHMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbiksby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzLnNyYz10LHN9fSxUVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IEgwLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7YS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxhLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgcz0wO2Z1bmN0aW9uIGwoYyl7YS5sb2FkKHRbY10sZnVuY3Rpb24odSl7by5pbWFnZXNbY109dSxzKysscz09PTYmJihvLm5lZWRzVXBkYXRlPSEwLHImJnIobykpfSx2b2lkIDAsaSl9Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDsrK2MpbChjKTtyZXR1cm4gb319LENVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpkLHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cmV0dXJuIHMuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihsKXtsZXQgYz1vLnBhcnNlKGwpOyFjfHwoYy5pbWFnZSE9PXZvaWQgMD9hLmltYWdlPWMuaW1hZ2U6Yy5kYXRhIT09dm9pZCAwJiYoYS5pbWFnZS53aWR0aD1jLndpZHRoLGEuaW1hZ2UuaGVpZ2h0PWMuaGVpZ2h0LGEuaW1hZ2UuZGF0YT1jLmRhdGEpLGEud3JhcFM9Yy53cmFwUyE9PXZvaWQgMD9jLndyYXBTOkpvLGEud3JhcFQ9Yy53cmFwVCE9PXZvaWQgMD9jLndyYXBUOkpvLGEubWFnRmlsdGVyPWMubWFnRmlsdGVyIT09dm9pZCAwP2MubWFnRmlsdGVyOmlpLGEubWluRmlsdGVyPWMubWluRmlsdGVyIT09dm9pZCAwP2MubWluRmlsdGVyOmlpLGEuYW5pc290cm9weT1jLmFuaXNvdHJvcHkhPT12b2lkIDA/Yy5hbmlzb3Ryb3B5OjEsYy5lbmNvZGluZyE9PXZvaWQgMCYmKGEuZW5jb2Rpbmc9Yy5lbmNvZGluZyksYy5mbGlwWSE9PXZvaWQgMCYmKGEuZmxpcFk9Yy5mbGlwWSksYy5mb3JtYXQhPT12b2lkIDAmJihhLmZvcm1hdD1jLmZvcm1hdCksYy50eXBlIT09dm9pZCAwJiYoYS50eXBlPWMudHlwZSksYy5taXBtYXBzIT09dm9pZCAwJiYoYS5taXBtYXBzPWMubWlwbWFwcyxhLm1pbkZpbHRlcj1veCksYy5taXBtYXBDb3VudD09PTEmJihhLm1pbkZpbHRlcj1paSksYy5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDAmJihhLmdlbmVyYXRlTWlwbWFwcz1jLmdlbmVyYXRlTWlwbWFwcyksYS5uZWVkc1VwZGF0ZT0hMCxyJiZyKGEsYykpfSxuLGkpLGF9fSxBVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IHZpLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7cmV0dXJuIGEuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCksYS5sb2FkKHQsZnVuY3Rpb24ocyl7by5pbWFnZT1zLG8ubmVlZHNVcGRhdGU9ITAsciE9PXZvaWQgMCYmcihvKX0sbixpKSxvfX0sT2w9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBuZSh0KSx0aGlzLmludGVuc2l0eT1yfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLHIub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx0aGlzLmdyb3VuZENvbG9yIT09dm9pZCAwJiYoci5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdGhpcy5kaXN0YW5jZSE9PXZvaWQgMCYmKHIub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHRoaXMuYW5nbGUhPT12b2lkIDAmJihyLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx0aGlzLmRlY2F5IT09dm9pZCAwJiYoci5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdGhpcy5wZW51bWJyYSE9PXZvaWQgMCYmKHIub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHRoaXMuc2hhZG93IT09dm9pZCAwJiYoci5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxyfX07T2wucHJvdG90eXBlLmlzTGlnaHQ9ITA7dmFyIFQ2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsbiksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgbmUocil9Y29weSh0KXtyZXR1cm4gT2wucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX07VDYucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciB4aGU9bmV3IE1lLGJoZT1uZXcgaix3aGU9bmV3IGosQzY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEx0KDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1lLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IE4xLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgTHQoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgZW4oMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IHI9dGhpcy5jYW1lcmEsbj10aGlzLm1hdHJpeDtiaGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLHIucG9zaXRpb24uY29weShiaGUpLHdoZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLHIubG9va0F0KHdoZSksci51cGRhdGVNYXRyaXhXb3JsZCgpLHhoZS5tdWx0aXBseU1hdHJpY2VzKHIucHJvamVjdGlvbk1hdHJpeCxyLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh4aGUpLG4uc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLG4ubXVsdGlwbHkoci5wcm9qZWN0aW9uTWF0cml4KSxuLm11bHRpcGx5KHIubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXt9O3JldHVybiB0aGlzLmJpYXMhPT0wJiYodC5iaWFzPXRoaXMuYmlhcyksdGhpcy5ub3JtYWxCaWFzIT09MCYmKHQubm9ybWFsQmlhcz10aGlzLm5vcm1hbEJpYXMpLHRoaXMucmFkaXVzIT09MSYmKHQucmFkaXVzPXRoaXMucmFkaXVzKSwodGhpcy5tYXBTaXplLnghPT01MTJ8fHRoaXMubWFwU2l6ZS55IT09NTEyKSYmKHQubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpKSx0LmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdCxkZWxldGUgdC5jYW1lcmEubWF0cml4LHR9fSxQVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpKDUwLDEsLjUsNTAwKSksdGhpcy5mb2N1cz0xfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCByPXRoaXMuY2FtZXJhLG49UVAqMip0LmFuZ2xlKnRoaXMuZm9jdXMsaT10aGlzLm1hcFNpemUud2lkdGgvdGhpcy5tYXBTaXplLmhlaWdodCxvPXQuZGlzdGFuY2V8fHIuZmFyOyhuIT09ci5mb3Z8fGkhPT1yLmFzcGVjdHx8byE9PXIuZmFyKSYmKHIuZm92PW4sci5hc3BlY3Q9aSxyLmZhcj1vLHIudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxzdXBlci51cGRhdGVNYXRyaWNlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzfX07UFUucHJvdG90eXBlLmlzU3BvdExpZ2h0U2hhZG93PSEwO3ZhciBBNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT1NYXRoLlBJLzMsbz0wLGE9MSl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5kaXN0YW5jZT1uLHRoaXMuYW5nbGU9aSx0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1hLHRoaXMuc2hhZG93PW5ldyBQVX1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtBNi5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIFNoZT1uZXcgTWUsQlA9bmV3IGoseHV0PW5ldyBqLElVPWNsYXNzIGV4dGVuZHMgQzZ7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVWkoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEx0KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGVuKDIsMSwxLDEpLG5ldyBlbigwLDEsMSwxKSxuZXcgZW4oMywxLDEsMSksbmV3IGVuKDEsMSwxLDEpLG5ldyBlbigzLDAsMSwxKSxuZXcgZW4oMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgaigxLDAsMCksbmV3IGooLTEsMCwwKSxuZXcgaigwLDAsMSksbmV3IGooMCwwLC0xKSxuZXcgaigwLDEsMCksbmV3IGooMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IGooMCwxLDApLG5ldyBqKDAsMSwwKSxuZXcgaigwLDEsMCksbmV3IGooMCwxLDApLG5ldyBqKDAsMCwxKSxuZXcgaigwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LHI9MCl7bGV0IG49dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fG4uZmFyO28hPT1uLmZhciYmKG4uZmFyPW8sbi51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLEJQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoQlApLHh1dC5jb3B5KG4ucG9zaXRpb24pLHh1dC5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbcl0pLG4udXAuY29weSh0aGlzLl9jdWJlVXBzW3JdKSxuLmxvb2tBdCh4dXQpLG4udXBkYXRlTWF0cml4V29ybGQoKSxpLm1ha2VUcmFuc2xhdGlvbigtQlAueCwtQlAueSwtQlAueiksU2hlLm11bHRpcGx5TWF0cmljZXMobi5wcm9qZWN0aW9uTWF0cml4LG4ubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KFNoZSl9fTtJVS5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBQNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT0xKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1uLHRoaXMuZGVjYXk9aSx0aGlzLnNoYWRvdz1uZXcgSVV9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtQNi5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBMVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IEQxKC01LDUsNSwtNSwuNSw1MDApKX19O0xVLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIEk2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5zaGFkb3c9bmV3IExVfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0k2LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIEw2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0w2LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgazY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0xMCxpPTEwKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PWl9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsci5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LHJ9fTtrNi5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBSNj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgail9c2V0KHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspdGhpcy5jb2VmZmljaWVudHNbcl0uY29weSh0W3JdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQscil7bGV0IG49dC54LGk9dC55LG89dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIHIuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxyLmFkZFNjYWxlZFZlY3RvcihhWzFdLC40ODg2MDMqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwuNDg4NjAzKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbM10sLjQ4ODYwMypuKSxyLmFkZFNjYWxlZFZlY3RvcihhWzRdLDEuMDkyNTQ4KihuKmkpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDEuMDkyNTQ4KihpKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzddLDEuMDkyNTQ4KihuKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC41NDYyNzQqKG4qbi1pKmkpKSxyfWdldElycmFkaWFuY2VBdCh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiByLmNvcHkoYVswXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksci5hZGRTY2FsZWRWZWN0b3IoYVsxXSwyKi41MTE2NjQqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwyKi41MTE2NjQqbyksci5hZGRTY2FsZWRWZWN0b3IoYVszXSwyKi41MTE2NjQqbiksci5hZGRTY2FsZWRWZWN0b3IoYVs0XSwyKi40MjkwNDMqbippKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDIqLjQyOTA0MyppKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksci5hZGRTY2FsZWRWZWN0b3IoYVs3XSwyKi40MjkwNDMqbipvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC40MjkwNDMqKG4qbi1pKmkpKSxyfWFkZCh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLmFkZCh0LmNvZWZmaWNpZW50c1tyXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tuXSxyKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmxlcnAodC5jb2VmZmljaWVudHNbbl0scik7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW3JdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tyXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxyPTApe2xldCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS5mcm9tQXJyYXkodCxyK2kqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCBpPTA7aTw5O2krKyluW2ldLnRvQXJyYXkodCxyK2kqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxyKXtsZXQgbj10LngsaT10Lnksbz10Lno7clswXT0uMjgyMDk1LHJbMV09LjQ4ODYwMyppLHJbMl09LjQ4ODYwMypvLHJbM109LjQ4ODYwMypuLHJbNF09MS4wOTI1NDgqbippLHJbNV09MS4wOTI1NDgqaSpvLHJbNl09LjMxNTM5MiooMypvKm8tMSkscls3XT0xLjA5MjU0OCpuKm8scls4XT0uNTQ2Mjc0KihuKm4taSppKX19O1I2LnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIHJ4PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodD1uZXcgUjYscj0xKXtzdXBlcih2b2lkIDAsciksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCkscn19O3J4LnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIGtVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50ZXh0dXJlcz17fX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9dGhpcy50ZXh0dXJlcztmdW5jdGlvbiBuKG8pe3JldHVybiByW29dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsbykscltvXX1sZXQgaT1uZXcgdTByW3QudHlwZV07aWYodC51dWlkIT09dm9pZCAwJiYoaS51dWlkPXQudXVpZCksdC5uYW1lIT09dm9pZCAwJiYoaS5uYW1lPXQubmFtZSksdC5jb2xvciE9PXZvaWQgMCYmaS5jb2xvciE9PXZvaWQgMCYmaS5jb2xvci5zZXRIZXgodC5jb2xvciksdC5yb3VnaG5lc3MhPT12b2lkIDAmJihpLnJvdWdobmVzcz10LnJvdWdobmVzcyksdC5tZXRhbG5lc3MhPT12b2lkIDAmJihpLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdC5zaGVlbiE9PXZvaWQgMCYmKGkuc2hlZW49dC5zaGVlbiksdC5zaGVlbkNvbG9yIT09dm9pZCAwJiYoaS5zaGVlbkNvbG9yPW5ldyBuZSgpLnNldEhleCh0LnNoZWVuQ29sb3IpKSx0LnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzKSx0LmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlLnNldEhleCh0LmVtaXNzaXZlKSx0LnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyLnNldEhleCh0LnNwZWN1bGFyKSx0LnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYoaS5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5KSx0LnNwZWN1bGFyQ29sb3IhPT12b2lkIDAmJmkuc3BlY3VsYXJDb2xvciE9PXZvaWQgMCYmaS5zcGVjdWxhckNvbG9yLnNldEhleCh0LnNwZWN1bGFyQ29sb3IpLHQuc2hpbmluZXNzIT09dm9pZCAwJiYoaS5zaGluaW5lc3M9dC5zaGluaW5lc3MpLHQuY2xlYXJjb2F0IT09dm9pZCAwJiYoaS5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQpLHQuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MpLHQudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24pLHQudGhpY2tuZXNzIT09dm9pZCAwJiYoaS50aGlja25lc3M9dC50aGlja25lc3MpLHQuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UpLHQuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmaS5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiZpLmF0dGVudWF0aW9uQ29sb3Iuc2V0SGV4KHQuYXR0ZW51YXRpb25Db2xvciksdC5mb2chPT12b2lkIDAmJihpLmZvZz10LmZvZyksdC5mbGF0U2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdC5ibGVuZGluZyE9PXZvaWQgMCYmKGkuYmxlbmRpbmc9dC5ibGVuZGluZyksdC5jb21iaW5lIT09dm9pZCAwJiYoaS5jb21iaW5lPXQuY29tYmluZSksdC5zaWRlIT09dm9pZCAwJiYoaS5zaWRlPXQuc2lkZSksdC5zaGFkb3dTaWRlIT09dm9pZCAwJiYoaS5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSksdC5vcGFjaXR5IT09dm9pZCAwJiYoaS5vcGFjaXR5PXQub3BhY2l0eSksdC50cmFuc3BhcmVudCE9PXZvaWQgMCYmKGkudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdC5hbHBoYVRlc3QhPT12b2lkIDAmJihpLmFscGhhVGVzdD10LmFscGhhVGVzdCksdC5kZXB0aFRlc3QhPT12b2lkIDAmJihpLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdC5kZXB0aFdyaXRlIT09dm9pZCAwJiYoaS5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdC5jb2xvcldyaXRlIT09dm9pZCAwJiYoaS5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdC5hbHBoYVdyaXRlIT09dm9pZCAwJiYoaS5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSksdC5zdGVuY2lsV3JpdGUhPT12b2lkIDAmJihpLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdC5zdGVuY2lsV3JpdGVNYXNrIT09dm9pZCAwJiYoaS5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdC5zdGVuY2lsRnVuYyE9PXZvaWQgMCYmKGkuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdC5zdGVuY2lsUmVmIT09dm9pZCAwJiYoaS5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdC5zdGVuY2lsRnVuY01hc2shPT12b2lkIDAmJihpLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdC5zdGVuY2lsRmFpbCE9PXZvaWQgMCYmKGkuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdC5zdGVuY2lsWkZhaWwhPT12b2lkIDAmJihpLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdC5zdGVuY2lsWlBhc3MhPT12b2lkIDAmJihpLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdC53aXJlZnJhbWUhPT12b2lkIDAmJihpLndpcmVmcmFtZT10LndpcmVmcmFtZSksdC53aXJlZnJhbWVMaW5ld2lkdGghPT12b2lkIDAmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdC53aXJlZnJhbWVMaW5lY2FwIT09dm9pZCAwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdC53aXJlZnJhbWVMaW5lam9pbiE9PXZvaWQgMCYmKGkud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdC5yb3RhdGlvbiE9PXZvaWQgMCYmKGkucm90YXRpb249dC5yb3RhdGlvbiksdC5saW5ld2lkdGghPT0xJiYoaS5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHQuZGFzaFNpemUhPT12b2lkIDAmJihpLmRhc2hTaXplPXQuZGFzaFNpemUpLHQuZ2FwU2l6ZSE9PXZvaWQgMCYmKGkuZ2FwU2l6ZT10LmdhcFNpemUpLHQuc2NhbGUhPT12b2lkIDAmJihpLnNjYWxlPXQuc2NhbGUpLHQucG9seWdvbk9mZnNldCE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHQucG9seWdvbk9mZnNldEZhY3RvciE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHQucG9seWdvbk9mZnNldFVuaXRzIT09dm9pZCAwJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHQuZGl0aGVyaW5nIT09dm9pZCAwJiYoaS5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHQuYWxwaGFUb0NvdmVyYWdlIT09dm9pZCAwJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UpLHQucHJlbXVsdGlwbGllZEFscGhhIT09dm9pZCAwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEpLHQudmlzaWJsZSE9PXZvaWQgMCYmKGkudmlzaWJsZT10LnZpc2libGUpLHQudG9uZU1hcHBlZCE9PXZvaWQgMCYmKGkudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHQudXNlckRhdGEhPT12b2lkIDAmJihpLnVzZXJEYXRhPXQudXNlckRhdGEpLHQudmVydGV4Q29sb3JzIT09dm9pZCAwJiYodHlwZW9mIHQudmVydGV4Q29sb3JzPT0ibnVtYmVyIj9pLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycz4wOmkudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzKSx0LnVuaWZvcm1zIT09dm9pZCAwKWZvcihsZXQgbyBpbiB0LnVuaWZvcm1zKXtsZXQgYT10LnVuaWZvcm1zW29dO3N3aXRjaChpLnVuaWZvcm1zW29dPXt9LGEudHlwZSl7Y2FzZSJ0IjppLnVuaWZvcm1zW29dLnZhbHVlPW4oYS52YWx1ZSk7YnJlYWs7Y2FzZSJjIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBuZSgpLnNldEhleChhLnZhbHVlKTticmVhaztjYXNlInYyIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBMdCgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlInYzIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBqKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UidjQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGVuKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTMiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGtpKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IE1lKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2RlZmF1bHQ6aS51bmlmb3Jtc1tvXS52YWx1ZT1hLnZhbHVlfX1pZih0LmRlZmluZXMhPT12b2lkIDAmJihpLmRlZmluZXM9dC5kZWZpbmVzKSx0LnZlcnRleFNoYWRlciE9PXZvaWQgMCYmKGkudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyKSx0LmZyYWdtZW50U2hhZGVyIT09dm9pZCAwJiYoaS5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyKSx0LmV4dGVuc2lvbnMhPT12b2lkIDApZm9yKGxldCBvIGluIHQuZXh0ZW5zaW9ucylpLmV4dGVuc2lvbnNbb109dC5leHRlbnNpb25zW29dO2lmKHQuc2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5zaGFkaW5nPT09MSksdC5zaXplIT09dm9pZCAwJiYoaS5zaXplPXQuc2l6ZSksdC5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbiksdC5tYXAhPT12b2lkIDAmJihpLm1hcD1uKHQubWFwKSksdC5tYXRjYXAhPT12b2lkIDAmJihpLm1hdGNhcD1uKHQubWF0Y2FwKSksdC5hbHBoYU1hcCE9PXZvaWQgMCYmKGkuYWxwaGFNYXA9bih0LmFscGhhTWFwKSksdC5idW1wTWFwIT09dm9pZCAwJiYoaS5idW1wTWFwPW4odC5idW1wTWFwKSksdC5idW1wU2NhbGUhPT12b2lkIDAmJihpLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSksdC5ub3JtYWxNYXAhPT12b2lkIDAmJihpLm5vcm1hbE1hcD1uKHQubm9ybWFsTWFwKSksdC5ub3JtYWxNYXBUeXBlIT09dm9pZCAwJiYoaS5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSksdC5ub3JtYWxTY2FsZSE9PXZvaWQgMCl7bGV0IG89dC5ub3JtYWxTY2FsZTtBcnJheS5pc0FycmF5KG8pPT09ITEmJihvPVtvLG9dKSxpLm5vcm1hbFNjYWxlPW5ldyBMdCgpLmZyb21BcnJheShvKX1yZXR1cm4gdC5kaXNwbGFjZW1lbnRNYXAhPT12b2lkIDAmJihpLmRpc3BsYWNlbWVudE1hcD1uKHQuZGlzcGxhY2VtZW50TWFwKSksdC5kaXNwbGFjZW1lbnRTY2FsZSE9PXZvaWQgMCYmKGkuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSksdC5kaXNwbGFjZW1lbnRCaWFzIT09dm9pZCAwJiYoaS5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50QmlhcyksdC5yb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLnJvdWdobmVzc01hcD1uKHQucm91Z2huZXNzTWFwKSksdC5tZXRhbG5lc3NNYXAhPT12b2lkIDAmJihpLm1ldGFsbmVzc01hcD1uKHQubWV0YWxuZXNzTWFwKSksdC5lbWlzc2l2ZU1hcCE9PXZvaWQgMCYmKGkuZW1pc3NpdmVNYXA9bih0LmVtaXNzaXZlTWFwKSksdC5lbWlzc2l2ZUludGVuc2l0eSE9PXZvaWQgMCYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSksdC5zcGVjdWxhck1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJNYXA9bih0LnNwZWN1bGFyTWFwKSksdC5zcGVjdWxhckludGVuc2l0eU1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bih0LnNwZWN1bGFySW50ZW5zaXR5TWFwKSksdC5zcGVjdWxhckNvbG9yTWFwIT09dm9pZCAwJiYoaS5zcGVjdWxhckNvbG9yTWFwPW4odC5zcGVjdWxhckNvbG9yTWFwKSksdC5lbnZNYXAhPT12b2lkIDAmJihpLmVudk1hcD1uKHQuZW52TWFwKSksdC5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSksdC5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSksdC5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyksdC5saWdodE1hcCE9PXZvaWQgMCYmKGkubGlnaHRNYXA9bih0LmxpZ2h0TWFwKSksdC5saWdodE1hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSksdC5hb01hcCE9PXZvaWQgMCYmKGkuYW9NYXA9bih0LmFvTWFwKSksdC5hb01hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSksdC5ncmFkaWVudE1hcCE9PXZvaWQgMCYmKGkuZ3JhZGllbnRNYXA9bih0LmdyYWRpZW50TWFwKSksdC5jbGVhcmNvYXRNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE1hcD1uKHQuY2xlYXJjb2F0TWFwKSksdC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD1uKHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwKSksdC5jbGVhcmNvYXROb3JtYWxNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE5vcm1hbE1hcD1uKHQuY2xlYXJjb2F0Tm9ybWFsTWFwKSksdC5jbGVhcmNvYXROb3JtYWxTY2FsZSE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx0LnRyYW5zbWlzc2lvbk1hcCE9PXZvaWQgMCYmKGkudHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSx0LnRoaWNrbmVzc01hcCE9PXZvaWQgMCYmKGkudGhpY2tuZXNzTWFwPW4odC50aGlja25lc3NNYXApKSx0LnNoZWVuQ29sb3JNYXAhPT12b2lkIDAmJihpLnNoZWVuQ29sb3JNYXA9bih0LnNoZWVuQ29sb3JNYXApKSx0LnNoZWVuUm91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzc01hcD1uKHQuc2hlZW5Sb3VnaG5lc3NNYXApKSxpfXNldFRleHR1cmVzKHQpe3JldHVybiB0aGlzLnRleHR1cmVzPXQsdGhpc319LGRNPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgcj0iIjtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W25dKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocikpfWNhdGNoKG4pe3JldHVybiByfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IHI9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiByPT09LTE/Ii4vIjp0LnN1YnN0cigwLHIrMSl9c3RhdGljIHJlc29sdmVVUkwodCxyKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KHIpJiYvXlwvLy50ZXN0KHQpJiYocj1yLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OnIrdCl9fSxONj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtONi5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgUlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9e30sbj17fTtmdW5jdGlvbiBpKHAsZCl7aWYocltkXSE9PXZvaWQgMClyZXR1cm4gcltkXTtsZXQgXz1wLmludGVybGVhdmVkQnVmZmVyc1tkXSx5PW8ocCxfLmJ1ZmZlcikseD1CMyhfLnR5cGUseSksYj1uZXcgZW0oeCxfLnN0cmlkZSk7cmV0dXJuIGIudXVpZD1fLnV1aWQscltkXT1iLGJ9ZnVuY3Rpb24gbyhwLGQpe2lmKG5bZF0hPT12b2lkIDApcmV0dXJuIG5bZF07bGV0IF89cC5hcnJheUJ1ZmZlcnNbZF0seT1uZXcgVWludDMyQXJyYXkoXykuYnVmZmVyO3JldHVybiBuW2RdPXkseX1sZXQgYT10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IE42Om5ldyBQZSxzPXQuZGF0YS5pbmRleDtpZihzIT09dm9pZCAwKXtsZXQgcD1CMyhzLnR5cGUscy5hcnJheSk7YS5zZXRJbmRleChuZXcgSmUocCwxKSl9bGV0IGw9dC5kYXRhLmF0dHJpYnV0ZXM7Zm9yKGxldCBwIGluIGwpe2xldCBkPWxbcF0sZztpZihkLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBfPWkodC5kYXRhLGQuZGF0YSk7Zz1uZXcgdHAoXyxkLml0ZW1TaXplLGQub2Zmc2V0LGQubm9ybWFsaXplZCl9ZWxzZXtsZXQgXz1CMyhkLnR5cGUsZC5hcnJheSkseT1kLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP3JtOkplO2c9bmV3IHkoXyxkLml0ZW1TaXplLGQubm9ybWFsaXplZCl9ZC5uYW1lIT09dm9pZCAwJiYoZy5uYW1lPWQubmFtZSksZC51c2FnZSE9PXZvaWQgMCYmZy5zZXRVc2FnZShkLnVzYWdlKSxkLnVwZGF0ZVJhbmdlIT09dm9pZCAwJiYoZy51cGRhdGVSYW5nZS5vZmZzZXQ9ZC51cGRhdGVSYW5nZS5vZmZzZXQsZy51cGRhdGVSYW5nZS5jb3VudD1kLnVwZGF0ZVJhbmdlLmNvdW50KSxhLnNldEF0dHJpYnV0ZShwLGcpfWxldCBjPXQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM7aWYoYylmb3IobGV0IHAgaW4gYyl7bGV0IGQ9Y1twXSxnPVtdO2ZvcihsZXQgXz0wLHk9ZC5sZW5ndGg7Xzx5O18rKyl7bGV0IHg9ZFtfXSxiO2lmKHguaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IFM9aSh0LmRhdGEseC5kYXRhKTtiPW5ldyB0cChTLHguaXRlbVNpemUseC5vZmZzZXQseC5ub3JtYWxpemVkKX1lbHNle2xldCBTPUIzKHgudHlwZSx4LmFycmF5KTtiPW5ldyBKZShTLHguaXRlbVNpemUseC5ub3JtYWxpemVkKX14Lm5hbWUhPT12b2lkIDAmJihiLm5hbWU9eC5uYW1lKSxnLnB1c2goYil9YS5tb3JwaEF0dHJpYnV0ZXNbcF09Z310LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmUmJihhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSEwKTtsZXQgaD10LmRhdGEuZ3JvdXBzfHx0LmRhdGEuZHJhd2NhbGxzfHx0LmRhdGEub2Zmc2V0cztpZihoIT09dm9pZCAwKWZvcihsZXQgcD0wLGQ9aC5sZW5ndGg7cCE9PWQ7KytwKXtsZXQgZz1oW3BdO2EuYWRkR3JvdXAoZy5zdGFydCxnLmNvdW50LGcubWF0ZXJpYWxJbmRleCl9bGV0IGY9dC5kYXRhLmJvdW5kaW5nU3BoZXJlO2lmKGYhPT12b2lkIDApe2xldCBwPW5ldyBqO2YuY2VudGVyIT09dm9pZCAwJiZwLmZyb21BcnJheShmLmNlbnRlciksYS5ib3VuZGluZ1NwaGVyZT1uZXcgWmYocCxmLnJhZGl1cyl9cmV0dXJuIHQubmFtZSYmKGEubmFtZT10Lm5hbWUpLHQudXNlckRhdGEmJihhLnVzZXJEYXRhPXQudXNlckRhdGEpLGF9fSxzaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT10aGlzLnBhdGg9PT0iIj9kTS5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fGE7bGV0IHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cy5zZXRQYXRoKHRoaXMucGF0aCkscy5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcikscy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLHMubG9hZCh0LGZ1bmN0aW9uKGwpe2xldCBjPW51bGw7dHJ5e2M9SlNPTi5wYXJzZShsKX1jYXRjaChoKXtpIT09dm9pZCAwJiZpKGgpLGNvbnNvbGUuZXJyb3IoIlRIUkVFOk9iamVjdExvYWRlcjogQ2FuJ3QgcGFyc2UgIit0KyIuIixoLm1lc3NhZ2UpO3JldHVybn1sZXQgdT1jLm1ldGFkYXRhO2lmKHU9PT12b2lkIDB8fHUudHlwZT09PXZvaWQgMHx8dS50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIit0KTtyZXR1cm59by5wYXJzZShjLHIpfSxuLGkpfWxvYWRBc3luYyh0LHIpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IG49dGhpcyxpPXRoaXMucGF0aD09PSIiP2RNLmV4dHJhY3RVcmxCYXNlKHQpOnRoaXMucGF0aDt0aGlzLnJlc291cmNlUGF0aD10aGlzLnJlc291cmNlUGF0aHx8aTtsZXQgbz1uZXcgSmModGhpcy5tYW5hZ2VyKTtvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyk7bGV0IGE9eWllbGQgby5sb2FkQXN5bmModCxyKSxzPUpTT04ucGFyc2UoYSksbD1zLm1ldGFkYXRhO2lmKGw9PT12b2lkIDB8fGwudHlwZT09PXZvaWQgMHx8bC50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXRocm93IG5ldyBFcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrdCk7cmV0dXJuIHlpZWxkIG4ucGFyc2VBc3luYyhzKX0pfXBhcnNlKHQscil7bGV0IG49dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxpPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLG89dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLGkpLGE9dGhpcy5wYXJzZUltYWdlcyh0LmltYWdlcyxmdW5jdGlvbigpe3IhPT12b2lkIDAmJnIoYyl9KSxzPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLGEpLGw9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxzKSxjPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QsbyxsLHMsbiksdT10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGMpO2lmKHRoaXMuYmluZFNrZWxldG9ucyhjLHUpLHIhPT12b2lkIDApe2xldCBoPSExO2ZvcihsZXQgZiBpbiBhKWlmKGFbZl1pbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpe2g9ITA7YnJlYWt9aD09PSExJiZyKGMpfXJldHVybiBjfXBhcnNlQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLnBhcnNlQW5pbWF0aW9ucyh0LmFuaW1hdGlvbnMpLG49dGhpcy5wYXJzZVNoYXBlcyh0LnNoYXBlcyksaT10aGlzLnBhcnNlR2VvbWV0cmllcyh0Lmdlb21ldHJpZXMsbiksbz15aWVsZCB0aGlzLnBhcnNlSW1hZ2VzQXN5bmModC5pbWFnZXMpLGE9dGhpcy5wYXJzZVRleHR1cmVzKHQudGV4dHVyZXMsbykscz10aGlzLnBhcnNlTWF0ZXJpYWxzKHQubWF0ZXJpYWxzLGEpLGw9dGhpcy5wYXJzZU9iamVjdCh0Lm9iamVjdCxpLHMsYSxyKSxjPXRoaXMucGFyc2VTa2VsZXRvbnModC5za2VsZXRvbnMsbCk7cmV0dXJuIHRoaXMuYmluZFNrZWxldG9ucyhsLGMpLGx9KX1wYXJzZVNoYXBlcyh0KXtsZXQgcj17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7bGV0IG89bmV3IEtjKCkuZnJvbUpTT04odFtuXSk7cltvLnV1aWRdPW99cmV0dXJuIHJ9cGFyc2VTa2VsZXRvbnModCxyKXtsZXQgbj17fSxpPXt9O2lmKHIudHJhdmVyc2UoZnVuY3Rpb24obyl7by5pc0JvbmUmJihpW28udXVpZF09byl9KSx0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9bmV3IGxNKCkuZnJvbUpTT04odFtvXSxpKTtuW3MudXVpZF09c31yZXR1cm4gbn1wYXJzZUdlb21ldHJpZXModCxyKXtsZXQgbj17fTtpZih0IT09dm9pZCAwKXtsZXQgaT1uZXcgUlU7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtsZXQgcyxsPXRbb107c3dpdGNoKGwudHlwZSl7Y2FzZSJCdWZmZXJHZW9tZXRyeSI6Y2FzZSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI6cz1pLnBhcnNlKGwpO2JyZWFrO2Nhc2UiR2VvbWV0cnkiOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogVGhlIGxlZ2FjeSBHZW9tZXRyeSB0eXBlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7YnJlYWs7ZGVmYXVsdDpsLnR5cGUgaW4gdmhlP3M9dmhlW2wudHlwZV0uZnJvbUpTT04obCxyKTpjb25zb2xlLndhcm4oYFRIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJHtsLnR5cGV9ImApfXMudXVpZD1sLnV1aWQsbC5uYW1lIT09dm9pZCAwJiYocy5uYW1lPWwubmFtZSkscy5pc0J1ZmZlckdlb21ldHJ5PT09ITAmJmwudXNlckRhdGEhPT12b2lkIDAmJihzLnVzZXJEYXRhPWwudXNlckRhdGEpLG5bbC51dWlkXT1zfX1yZXR1cm4gbn1wYXJzZU1hdGVyaWFscyh0LHIpe2xldCBuPXt9LGk9e307aWYodCE9PXZvaWQgMCl7bGV0IG89bmV3IGtVO28uc2V0VGV4dHVyZXMocik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdO2lmKGwudHlwZT09PSJNdWx0aU1hdGVyaWFsIil7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxsLm1hdGVyaWFscy5sZW5ndGg7dSsrKXtsZXQgaD1sLm1hdGVyaWFsc1t1XTtuW2gudXVpZF09PT12b2lkIDAmJihuW2gudXVpZF09by5wYXJzZShoKSksYy5wdXNoKG5baC51dWlkXSl9aVtsLnV1aWRdPWN9ZWxzZSBuW2wudXVpZF09PT12b2lkIDAmJihuW2wudXVpZF09by5wYXJzZShsKSksaVtsLnV1aWRdPW5bbC51dWlkXX19cmV0dXJuIGl9cGFyc2VBbmltYXRpb25zKHQpe2xldCByPXt9O2lmKHQhPT12b2lkIDApZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl0sbz1RMS5wYXJzZShpKTtyW28udXVpZF09b31yZXR1cm4gcn1wYXJzZUltYWdlcyh0LHIpe2xldCBuPXRoaXMsaT17fSxvO2Z1bmN0aW9uIGEobCl7cmV0dXJuIG4ubWFuYWdlci5pdGVtU3RhcnQobCksby5sb2FkKGwsZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVuZChsKX0sdm9pZCAwLGZ1bmN0aW9uKCl7bi5tYW5hZ2VyLml0ZW1FcnJvcihsKSxuLm1hbmFnZXIuaXRlbUVuZChsKX0pfWZ1bmN0aW9uIHMobCl7aWYodHlwZW9mIGw9PSJzdHJpbmciKXtsZXQgYz1sLHU9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoYyk/YzpuLnJlc291cmNlUGF0aCtjO3JldHVybiBhKHUpfWVsc2UgcmV0dXJuIGwuZGF0YT97ZGF0YTpCMyhsLnR5cGUsbC5kYXRhKSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH06bnVsbH1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtsZXQgbD1uZXcgRTYocik7bz1uZXcgZXgobCksby5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtmb3IobGV0IGM9MCx1PXQubGVuZ3RoO2M8dTtjKyspe2xldCBoPXRbY10sZj1oLnVybDtpZihBcnJheS5pc0FycmF5KGYpKXtpW2gudXVpZF09W107Zm9yKGxldCBwPTAsZD1mLmxlbmd0aDtwPGQ7cCsrKXtsZXQgZz1mW3BdLF89cyhnKTtfIT09bnVsbCYmKF8gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2lbaC51dWlkXS5wdXNoKF8pOmlbaC51dWlkXS5wdXNoKG5ldyBKZChfLmRhdGEsXy53aWR0aCxfLmhlaWdodCkpKX19ZWxzZXtsZXQgcD1zKGgudXJsKTtwIT09bnVsbCYmKGlbaC51dWlkXT1wKX19fXJldHVybiBpfXBhcnNlSW1hZ2VzQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLG49e30saTtmdW5jdGlvbiBvKGEpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXtsZXQgcz1hLGw9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3Qocyk/czpyLnJlc291cmNlUGF0aCtzO3JldHVybiB5aWVsZCBpLmxvYWRBc3luYyhsKX1lbHNlIHJldHVybiBhLmRhdGE/e2RhdGE6QjMoYS50eXBlLGEuZGF0YSksd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHR9Om51bGx9KX1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtpPW5ldyBleCh0aGlzLm1hbmFnZXIpLGkuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdLGM9bC51cmw7aWYoQXJyYXkuaXNBcnJheShjKSl7bltsLnV1aWRdPVtdO2ZvcihsZXQgdT0wLGg9Yy5sZW5ndGg7dTxoO3UrKyl7bGV0IGY9Y1t1XSxwPXlpZWxkIG8oZik7cCE9PW51bGwmJihwIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9uW2wudXVpZF0ucHVzaChwKTpuW2wudXVpZF0ucHVzaChuZXcgSmQocC5kYXRhLHAud2lkdGgscC5oZWlnaHQpKSl9fWVsc2V7bGV0IHU9eWllbGQgbyhsLnVybCk7dSE9PW51bGwmJihuW2wudXVpZF09dSl9fX1yZXR1cm4gbn0pfXBhcnNlVGV4dHVyZXModCxyKXtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuIHR5cGVvZiBvPT0ibnVtYmVyIj9vOihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlci5wYXJzZVRleHR1cmU6IENvbnN0YW50IHNob3VsZCBiZSBpbiBudW1lcmljIGZvcm0uIixvKSxhW29dKX1sZXQgaT17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXTtzLmltYWdlPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxzLnV1aWQpLHJbcy5pbWFnZV09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLHMuaW1hZ2UpO2xldCBsLGM9cltzLmltYWdlXTtBcnJheS5pc0FycmF5KGMpPyhsPW5ldyBIMChjKSxjLmxlbmd0aD09PTYmJihsLm5lZWRzVXBkYXRlPSEwKSk6KGMmJmMuZGF0YT9sPW5ldyBKZChjLmRhdGEsYy53aWR0aCxjLmhlaWdodCk6bD1uZXcgdmkoYyksYyYmKGwubmVlZHNVcGRhdGU9ITApKSxsLnV1aWQ9cy51dWlkLHMubmFtZSE9PXZvaWQgMCYmKGwubmFtZT1zLm5hbWUpLHMubWFwcGluZyE9PXZvaWQgMCYmKGwubWFwcGluZz1uKHMubWFwcGluZyxwMHIpKSxzLm9mZnNldCE9PXZvaWQgMCYmbC5vZmZzZXQuZnJvbUFycmF5KHMub2Zmc2V0KSxzLnJlcGVhdCE9PXZvaWQgMCYmbC5yZXBlYXQuZnJvbUFycmF5KHMucmVwZWF0KSxzLmNlbnRlciE9PXZvaWQgMCYmbC5jZW50ZXIuZnJvbUFycmF5KHMuY2VudGVyKSxzLnJvdGF0aW9uIT09dm9pZCAwJiYobC5yb3RhdGlvbj1zLnJvdGF0aW9uKSxzLndyYXAhPT12b2lkIDAmJihsLndyYXBTPW4ocy53cmFwWzBdLE1oZSksbC53cmFwVD1uKHMud3JhcFsxXSxNaGUpKSxzLmZvcm1hdCE9PXZvaWQgMCYmKGwuZm9ybWF0PXMuZm9ybWF0KSxzLnR5cGUhPT12b2lkIDAmJihsLnR5cGU9cy50eXBlKSxzLmVuY29kaW5nIT09dm9pZCAwJiYobC5lbmNvZGluZz1zLmVuY29kaW5nKSxzLm1pbkZpbHRlciE9PXZvaWQgMCYmKGwubWluRmlsdGVyPW4ocy5taW5GaWx0ZXIsRWhlKSkscy5tYWdGaWx0ZXIhPT12b2lkIDAmJihsLm1hZ0ZpbHRlcj1uKHMubWFnRmlsdGVyLEVoZSkpLHMuYW5pc290cm9weSE9PXZvaWQgMCYmKGwuYW5pc290cm9weT1zLmFuaXNvdHJvcHkpLHMuZmxpcFkhPT12b2lkIDAmJihsLmZsaXBZPXMuZmxpcFkpLHMucHJlbXVsdGlwbHlBbHBoYSE9PXZvaWQgMCYmKGwucHJlbXVsdGlwbHlBbHBoYT1zLnByZW11bHRpcGx5QWxwaGEpLHMudW5wYWNrQWxpZ25tZW50IT09dm9pZCAwJiYobC51bnBhY2tBbGlnbm1lbnQ9cy51bnBhY2tBbGlnbm1lbnQpLHMudXNlckRhdGEhPT12b2lkIDAmJihsLnVzZXJEYXRhPXMudXNlckRhdGEpLGlbcy51dWlkXT1sfXJldHVybiBpfXBhcnNlT2JqZWN0KHQscixuLGksbyl7bGV0IGE7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gcltmXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsZikscltmXX1mdW5jdGlvbiBsKGYpe2lmKGYhPT12b2lkIDApe2lmKEFycmF5LmlzQXJyYXkoZikpe2xldCBwPVtdO2ZvcihsZXQgZD0wLGc9Zi5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXTtuW19dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixfKSxwLnB1c2gobltfXSl9cmV0dXJuIHB9cmV0dXJuIG5bZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLGYpLG5bZl19fWZ1bmN0aW9uIGMoZil7cmV0dXJuIGlbZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsZiksaVtmXX1sZXQgdSxoO3N3aXRjaCh0LnR5cGUpe2Nhc2UiU2NlbmUiOmE9bmV3IHEwLHQuYmFja2dyb3VuZCE9PXZvaWQgMCYmKE51bWJlci5pc0ludGVnZXIodC5iYWNrZ3JvdW5kKT9hLmJhY2tncm91bmQ9bmV3IG5lKHQuYmFja2dyb3VuZCk6YS5iYWNrZ3JvdW5kPWModC5iYWNrZ3JvdW5kKSksdC5lbnZpcm9ubWVudCE9PXZvaWQgMCYmKGEuZW52aXJvbm1lbnQ9Yyh0LmVudmlyb25tZW50KSksdC5mb2chPT12b2lkIDAmJih0LmZvZy50eXBlPT09IkZvZyI/YS5mb2c9bmV3IHoxKHQuZm9nLmNvbG9yLHQuZm9nLm5lYXIsdC5mb2cuZmFyKTp0LmZvZy50eXBlPT09IkZvZ0V4cDIiJiYoYS5mb2c9bmV3IE8xKHQuZm9nLmNvbG9yLHQuZm9nLmRlbnNpdHkpKSk7YnJlYWs7Y2FzZSJQZXJzcGVjdGl2ZUNhbWVyYSI6YT1uZXcgVWkodC5mb3YsdC5hc3BlY3QsdC5uZWFyLHQuZmFyKSx0LmZvY3VzIT09dm9pZCAwJiYoYS5mb2N1cz10LmZvY3VzKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LmZpbG1HYXVnZSE9PXZvaWQgMCYmKGEuZmlsbUdhdWdlPXQuZmlsbUdhdWdlKSx0LmZpbG1PZmZzZXQhPT12b2lkIDAmJihhLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0KSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIk9ydGhvZ3JhcGhpY0NhbWVyYSI6YT1uZXcgRDEodC5sZWZ0LHQucmlnaHQsdC50b3AsdC5ib3R0b20sdC5uZWFyLHQuZmFyKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIkFtYmllbnRMaWdodCI6YT1uZXcgTDYodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjphPW5ldyBJNih0LmNvbG9yLHQuaW50ZW5zaXR5KTticmVhaztjYXNlIlBvaW50TGlnaHQiOmE9bmV3IFA2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmRlY2F5KTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmE9bmV3IGs2KHQuY29sb3IsdC5pbnRlbnNpdHksdC53aWR0aCx0LmhlaWdodCk7YnJlYWs7Y2FzZSJTcG90TGlnaHQiOmE9bmV3IEE2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmFuZ2xlLHQucGVudW1icmEsdC5kZWNheSk7YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmE9bmV3IFQ2KHQuY29sb3IsdC5ncm91bmRDb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJMaWdodFByb2JlIjphPW5ldyByeCgpLmZyb21KU09OKHQpO2JyZWFrO2Nhc2UiU2tpbm5lZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgYU0odSxoKSx0LmJpbmRNb2RlIT09dm9pZCAwJiYoYS5iaW5kTW9kZT10LmJpbmRNb2RlKSx0LmJpbmRNYXRyaXghPT12b2lkIDAmJmEuYmluZE1hdHJpeC5mcm9tQXJyYXkodC5iaW5kTWF0cml4KSx0LnNrZWxldG9uIT09dm9pZCAwJiYoYS5za2VsZXRvbj10LnNrZWxldG9uKTticmVhaztjYXNlIk1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgdGkodSxoKTticmVhaztjYXNlIkluc3RhbmNlZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCk7bGV0IGY9dC5jb3VudCxwPXQuaW5zdGFuY2VNYXRyaXgsZD10Lmluc3RhbmNlQ29sb3I7YT1uZXcgaTYodSxoLGYpLGEuaW5zdGFuY2VNYXRyaXg9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkocC5hcnJheSksMTYpLGQhPT12b2lkIDAmJihhLmluc3RhbmNlQ29sb3I9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkoZC5hcnJheSksZC5pdGVtU2l6ZSkpO2JyZWFrO2Nhc2UiTE9EIjphPW5ldyBfVTticmVhaztjYXNlIkxpbmUiOmE9bmV3IGNoKHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJMaW5lTG9vcCI6YT1uZXcgbzYocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVTZWdtZW50cyI6YT1uZXcgQWEocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIlBvaW50Q2xvdWQiOmNhc2UiUG9pbnRzIjphPW5ldyBpbShzKHQuZ2VvbWV0cnkpLGwodC5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UiU3ByaXRlIjphPW5ldyBvTShsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkdyb3VwIjphPW5ldyBYZDticmVhaztjYXNlIkJvbmUiOmE9bmV3IHNNO2JyZWFrO2RlZmF1bHQ6YT1uZXcgb3J9aWYoYS51dWlkPXQudXVpZCx0Lm5hbWUhPT12b2lkIDAmJihhLm5hbWU9dC5uYW1lKSx0Lm1hdHJpeCE9PXZvaWQgMD8oYS5tYXRyaXguZnJvbUFycmF5KHQubWF0cml4KSx0Lm1hdHJpeEF1dG9VcGRhdGUhPT12b2lkIDAmJihhLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlKSxhLm1hdHJpeEF1dG9VcGRhdGUmJmEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKSk6KHQucG9zaXRpb24hPT12b2lkIDAmJmEucG9zaXRpb24uZnJvbUFycmF5KHQucG9zaXRpb24pLHQucm90YXRpb24hPT12b2lkIDAmJmEucm90YXRpb24uZnJvbUFycmF5KHQucm90YXRpb24pLHQucXVhdGVybmlvbiE9PXZvaWQgMCYmYS5xdWF0ZXJuaW9uLmZyb21BcnJheSh0LnF1YXRlcm5pb24pLHQuc2NhbGUhPT12b2lkIDAmJmEuc2NhbGUuZnJvbUFycmF5KHQuc2NhbGUpKSx0LmNhc3RTaGFkb3chPT12b2lkIDAmJihhLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93KSx0LnJlY2VpdmVTaGFkb3chPT12b2lkIDAmJihhLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93KSx0LnNoYWRvdyYmKHQuc2hhZG93LmJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5iaWFzPXQuc2hhZG93LmJpYXMpLHQuc2hhZG93Lm5vcm1hbEJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5ub3JtYWxCaWFzPXQuc2hhZG93Lm5vcm1hbEJpYXMpLHQuc2hhZG93LnJhZGl1cyE9PXZvaWQgMCYmKGEuc2hhZG93LnJhZGl1cz10LnNoYWRvdy5yYWRpdXMpLHQuc2hhZG93Lm1hcFNpemUhPT12b2lkIDAmJmEuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KHQuc2hhZG93Lm1hcFNpemUpLHQuc2hhZG93LmNhbWVyYSE9PXZvaWQgMCYmKGEuc2hhZG93LmNhbWVyYT10aGlzLnBhcnNlT2JqZWN0KHQuc2hhZG93LmNhbWVyYSkpKSx0LnZpc2libGUhPT12b2lkIDAmJihhLnZpc2libGU9dC52aXNpYmxlKSx0LmZydXN0dW1DdWxsZWQhPT12b2lkIDAmJihhLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkKSx0LnJlbmRlck9yZGVyIT09dm9pZCAwJiYoYS5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyKSx0LnVzZXJEYXRhIT09dm9pZCAwJiYoYS51c2VyRGF0YT10LnVzZXJEYXRhKSx0LmxheWVycyE9PXZvaWQgMCYmKGEubGF5ZXJzLm1hc2s9dC5sYXllcnMpLHQuY2hpbGRyZW4hPT12b2lkIDApe2xldCBmPXQuY2hpbGRyZW47Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspYS5hZGQodGhpcy5wYXJzZU9iamVjdChmW3BdLHIsbixpLG8pKX1pZih0LmFuaW1hdGlvbnMhPT12b2lkIDApe2xldCBmPXQuYW5pbWF0aW9ucztmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IGQ9ZltwXTthLmFuaW1hdGlvbnMucHVzaChvW2RdKX19aWYodC50eXBlPT09IkxPRCIpe3QuYXV0b1VwZGF0ZSE9PXZvaWQgMCYmKGEuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUpO2xldCBmPXQubGV2ZWxzO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKXtsZXQgZD1mW3BdLGc9YS5nZXRPYmplY3RCeVByb3BlcnR5KCJ1dWlkIixkLm9iamVjdCk7ZyE9PXZvaWQgMCYmYS5hZGRMZXZlbChnLGQuZGlzdGFuY2UpfX1yZXR1cm4gYX1iaW5kU2tlbGV0b25zKHQscil7T2JqZWN0LmtleXMocikubGVuZ3RoIT09MCYmdC50cmF2ZXJzZShmdW5jdGlvbihuKXtpZihuLmlzU2tpbm5lZE1lc2g9PT0hMCYmbi5za2VsZXRvbiE9PXZvaWQgMCl7bGV0IGk9cltuLnNrZWxldG9uXTtpPT09dm9pZCAwP2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBObyBza2VsZXRvbiBmb3VuZCB3aXRoIFVVSUQ6IixuLnNrZWxldG9uKTpuLmJpbmQoaSxuLmJpbmRNYXRyaXgpfX0pfXNldFRleHR1cmVQYXRoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuIiksdGhpcy5zZXRSZXNvdXJjZVBhdGgodCl9fSxwMHI9e1VWTWFwcGluZzpYVSxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6bngsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOml4LEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOllQLEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOmpQLEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOnhNLEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOno2fSxNaGU9e1JlcGVhdFdyYXBwaW5nOlhQLENsYW1wVG9FZGdlV3JhcHBpbmc6Sm8sTWlycm9yZWRSZXBlYXRXcmFwcGluZzokUH0sRWhlPXtOZWFyZXN0RmlsdGVyOkxpLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOm9VLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6YVUsTGluZWFyRmlsdGVyOmlpLExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6TGh0LExpbmVhck1pcG1hcExpbmVhckZpbHRlcjpveH0sTlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLGE9dHguZ2V0KHQpO2lmKGEhPT12b2lkIDApcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe3ImJnIoYSksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLGE7bGV0IHM9e307cy5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIscy5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LHMpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXt0eC5hZGQodCxsKSxyJiZyKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7aSYmaShsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05VLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBXVix6aHQ9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gV1Y9PT12b2lkIDAmJihXVj1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLFdWfSxzZXRDb250ZXh0OmZ1bmN0aW9uKGUpe1dWPWV9fSxEVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2Euc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCxmdW5jdGlvbihzKXt0cnl7bGV0IGw9cy5zbGljZSgwKTt6aHQuZ2V0Q29udGV4dCgpLmRlY29kZUF1ZGlvRGF0YShsLGZ1bmN0aW9uKHUpe3IodSl9KX1jYXRjaChsKXtpP2kobCk6Y29uc29sZS5lcnJvcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0sbixpKX19LE9VPWNsYXNzIGV4dGVuZHMgcnh7Y29uc3RydWN0b3IodCxyLG49MSl7c3VwZXIodm9pZCAwLG4pO2xldCBpPW5ldyBuZSgpLnNldCh0KSxvPW5ldyBuZSgpLnNldChyKSxhPW5ldyBqKGkucixpLmcsaS5iKSxzPW5ldyBqKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShhKS5hZGQocykubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShhKS5zdWIocykubXVsdGlwbHlTY2FsYXIoYyl9fTtPVS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMDt2YXIgelU9Y2xhc3MgZXh0ZW5kcyByeHtjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIodm9pZCAwLHIpO2xldCBuPW5ldyBuZSgpLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQobi5yLG4uZyxuLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19O3pVLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciBUaGU9bmV3IE1lLENoZT1uZXcgTWUseTE9bmV3IE1lLGxodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBVaSx0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKSx0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNhbWVyYVI9bmV3IFVpLHRoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpLHRoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2NhY2hlPXtmb2N1czpudWxsLGZvdjpudWxsLGFzcGVjdDpudWxsLG5lYXI6bnVsbCxmYXI6bnVsbCx6b29tOm51bGwsZXllU2VwOm51bGx9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLl9jYWNoZTtpZihyLmZvY3VzIT09dC5mb2N1c3x8ci5mb3YhPT10LmZvdnx8ci5hc3BlY3QhPT10LmFzcGVjdCp0aGlzLmFzcGVjdHx8ci5uZWFyIT09dC5uZWFyfHxyLmZhciE9PXQuZmFyfHxyLnpvb20hPT10Lnpvb218fHIuZXllU2VwIT09dGhpcy5leWVTZXApe3IuZm9jdXM9dC5mb2N1cyxyLmZvdj10LmZvdixyLmFzcGVjdD10LmFzcGVjdCp0aGlzLmFzcGVjdCxyLm5lYXI9dC5uZWFyLHIuZmFyPXQuZmFyLHIuem9vbT10Lnpvb20sci5leWVTZXA9dGhpcy5leWVTZXAseTEuY29weSh0LnByb2plY3Rpb25NYXRyaXgpO2xldCBpPXIuZXllU2VwLzIsbz1pKnIubmVhci9yLmZvY3VzLGE9ci5uZWFyKk1hdGgudGFuKFAxKnIuZm92Ki41KS9yLnpvb20scyxsO0NoZS5lbGVtZW50c1sxMl09LWksVGhlLmVsZW1lbnRzWzEyXT1pLHM9LWEqci5hc3BlY3QrbyxsPWEqci5hc3BlY3Qrbyx5MS5lbGVtZW50c1swXT0yKnIubmVhci8obC1zKSx5MS5lbGVtZW50c1s4XT0obCtzKS8obC1zKSx0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KHkxKSxzPS1hKnIuYXNwZWN0LW8sbD1hKnIuYXNwZWN0LW8seTEuZWxlbWVudHNbMF09MipyLm5lYXIvKGwtcykseTEuZWxlbWVudHNbOF09KGwrcykvKGwtcyksdGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weSh5MSl9dGhpcy5jYW1lcmFMLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoQ2hlKSx0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKS5tdWx0aXBseShUaGUpfX0sbU09Y2xhc3N7Y29uc3RydWN0b3IodD0hMCl7dGhpcy5hdXRvU3RhcnQ9dCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMub2xkVGltZT0wLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITF9c3RhcnQoKXt0aGlzLnN0YXJ0VGltZT1BaGUoKSx0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWUsdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMucnVubmluZz0hMH1zdG9wKCl7dGhpcy5nZXRFbGFwc2VkVGltZSgpLHRoaXMucnVubmluZz0hMSx0aGlzLmF1dG9TdGFydD0hMX1nZXRFbGFwc2VkVGltZSgpe3JldHVybiB0aGlzLmdldERlbHRhKCksdGhpcy5lbGFwc2VkVGltZX1nZXREZWx0YSgpe2xldCB0PTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwwO2lmKHRoaXMucnVubmluZyl7bGV0IHI9QWhlKCk7dD0oci10aGlzLm9sZFRpbWUpLzFlMyx0aGlzLm9sZFRpbWU9cix0aGlzLmVsYXBzZWRUaW1lKz10fXJldHVybiB0fX07ZnVuY3Rpb24gQWhlKCl7cmV0dXJuKHR5cGVvZiBwZXJmb3JtYW5jZT09InVuZGVmaW5lZCI/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCl9dmFyIHYxPW5ldyBqLFBoZT1uZXcgeWksZDByPW5ldyBqLHgxPW5ldyBqLGNodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkF1ZGlvTGlzdGVuZXIiLHRoaXMuY29udGV4dD16aHQuZ2V0Q29udGV4dCgpLHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCx0aGlzLnRpbWVEZWx0YT0wLHRoaXMuX2Nsb2NrPW5ldyBtTX1nZXRJbnB1dCgpe3JldHVybiB0aGlzLmdhaW59cmVtb3ZlRmlsdGVyKCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbCYmKHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5nYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj1udWxsKSx0aGlzfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmZpbHRlcn1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbD8odGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSk6dGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj10LHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpc31nZXRNYXN0ZXJWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0TWFzdGVyVm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpO2xldCByPXRoaXMuY29udGV4dC5saXN0ZW5lcixuPXRoaXMudXA7aWYodGhpcy50aW1lRGVsdGE9dGhpcy5fY2xvY2suZ2V0RGVsdGEoKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSh2MSxQaGUsZDByKSx4MS5zZXQoMCwwLC0xKS5hcHBseVF1YXRlcm5pb24oUGhlKSxyLnBvc2l0aW9uWCl7bGV0IGk9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMudGltZURlbHRhO3IucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHYxLngsaSksci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodjEueSxpKSxyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2MS56LGkpLHIuZm9yd2FyZFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoeDEueCxpKSxyLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHgxLnksaSksci5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh4MS56LGkpLHIudXBYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueCxpKSxyLnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnksaSksci51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi56LGkpfWVsc2Ugci5zZXRQb3NpdGlvbih2MS54LHYxLnksdjEueiksci5zZXRPcmllbnRhdGlvbih4MS54LHgxLnkseDEueixuLngsbi55LG4ueil9fSxENj1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYodGhpcy5pc1BsYXlpbmc9PT0hMCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO3JldHVybn1pZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn10aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IHI9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiByLmJ1ZmZlcj10aGlzLmJ1ZmZlcixyLmxvb3A9dGhpcy5sb29wLHIubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LHIubG9vcEVuZD10aGlzLmxvb3BFbmQsci5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLHIuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPXIsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsdGhpcy5sb29wPT09ITAmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfXN0b3AoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLHRoaXMuX2Nvbm5lY3RlZD09PSEwPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdGhpcy5zb3VyY2UuZGV0dW5lIT09dm9pZCAwKXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLnBsYXliYWNrUmF0ZT10LHRoaXMuaXNQbGF5aW5nPT09ITAmJnRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMT8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMubG9vcD10LHRoaXMuaXNQbGF5aW5nPT09ITAmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc31zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fSxiMT1uZXcgaixJaGU9bmV3IHlpLG0wcj1uZXcgaix3MT1uZXcgaix1aHQ9Y2xhc3MgZXh0ZW5kcyBENntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCksdGhpcy5wYW5uZXIucGFubmluZ01vZGVsPSJIUlRGIix0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMucGFubmVyfWdldFJlZkRpc3RhbmNlKCl7cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlfXNldFJlZkRpc3RhbmNlKHQpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZT10LHRoaXN9Z2V0Um9sbG9mZkZhY3Rvcigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfXNldFJvbGxvZmZGYWN0b3IodCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9dCx0aGlzfWdldERpc3RhbmNlTW9kZWwoKXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbH1zZXREaXN0YW5jZU1vZGVsKHQpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsPXQsdGhpc31nZXRNYXhEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX1zZXRNYXhEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9dCx0aGlzfXNldERpcmVjdGlvbmFsQ29uZSh0LHIsbil7cmV0dXJuIHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPXQsdGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9cix0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPW4sdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtpZihzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSEwJiZ0aGlzLmlzUGxheWluZz09PSExKXJldHVybjt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiMSxJaGUsbTByKSx3MS5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihJaGUpO2xldCByPXRoaXMucGFubmVyO2lmKHIucG9zaXRpb25YKXtsZXQgbj10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7ci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYjEueCxuKSxyLnBvc2l0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiMS55LG4pLHIucG9zaXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIxLnosbiksci5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodzEueCxuKSxyLm9yaWVudGF0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh3MS55LG4pLHIub3JpZW50YXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHcxLnosbil9ZWxzZSByLnNldFBvc2l0aW9uKGIxLngsYjEueSxiMS56KSxyLnNldE9yaWVudGF0aW9uKHcxLngsdzEueSx3MS56KX19LEZVPWNsYXNze2NvbnN0cnVjdG9yKHQscj0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1yLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLHI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspdCs9cltuXTtyZXR1cm4gdC9yLmxlbmd0aH19LEJVPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1uO2xldCBpLG8sYTtzd2l0Y2gocil7Y2FzZSJxdWF0ZXJuaW9uIjppPXRoaXMuX3NsZXJwLG89dGhpcy5fc2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjppPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NlbGVjdCxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkobio1KTticmVhaztkZWZhdWx0Omk9dGhpcy5fbGVycCxvPXRoaXMuX2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio1KX10aGlzLl9taXhCdWZmZXJSZWdpb249aSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1vLHRoaXMuX3NldElkZW50aXR5PWEsdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LHIpe2xldCBuPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUsbz10KmkraSxhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihhPT09MCl7Zm9yKGxldCBzPTA7cyE9PWk7KytzKW5bbytzXT1uW3NdO2E9cn1lbHNle2ErPXI7bGV0IHM9ci9hO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihuLG8sMCxzLGkpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1hfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgcj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUocixpLDAsdCxuKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgcj10aGlzLnZhbHVlU2l6ZSxuPXRoaXMuYnVmZmVyLGk9dCpyK3Isbz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxzPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLG88MSl7bGV0IGw9cip0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4saSxsLDEtbyxyKX1hPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKG4saSx0aGlzLl9hZGRJbmRleCpyLDEscik7Zm9yKGxldCBsPXIsYz1yK3I7bCE9PWM7KytsKWlmKG5bbF0hPT1uW2wrcl0pe3Muc2V0VmFsdWUobixpKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcscj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShyLGkpO2ZvcihsZXQgbz1uLGE9aTtvIT09YTsrK28pcltvXT1yW2krbyVuXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxyPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPXQ7bjxyO24rKyl0aGlzLmJ1ZmZlcltuXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLHI9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPTA7bjx0aGlzLnZhbHVlU2l6ZTtuKyspdGhpcy5idWZmZXJbcituXT10aGlzLmJ1ZmZlclt0K25dfV9zZWxlY3QodCxyLG4saSxvKXtpZihpPj0uNSlmb3IobGV0IGE9MDthIT09bzsrK2EpdFtyK2FdPXRbbithXX1fc2xlcnAodCxyLG4saSl7eWkuc2xlcnBGbGF0KHQscix0LHIsdCxuLGkpfV9zbGVycEFkZGl0aXZlKHQscixuLGksbyl7bGV0IGE9dGhpcy5fd29ya0luZGV4Km87eWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxhLHQscix0LG4pLHlpLnNsZXJwRmxhdCh0LHIsdCxyLHQsYSxpKX1fbGVycCh0LHIsbixpLG8pe2xldCBhPTEtaTtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBsPXIrczt0W2xdPXRbbF0qYSt0W24rc10qaX19X2xlcnBBZGRpdGl2ZSh0LHIsbixpLG8pe2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IHM9cithO3Rbc109dFtzXSt0W24rYV0qaX19fSxGaHQ9IlxcW1xcXVxcLjpcXC8iLGcwcj1uZXcgUmVnRXhwKCJbIitGaHQrIl0iLCJnIiksQmh0PSJbXiIrRmh0KyJdIixfMHI9IlteIitGaHQucmVwbGFjZSgiXFwuIiwiIikrIl0iLHkwcj0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksdjByPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLF8wcikseDByPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksYjByPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixCaHQpLHcwcj1uZXcgUmVnRXhwKCJeIit5MHIrdjByK3gwcitiMHIrIiQiKSxTMHI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0saGh0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1ufHxDci5wYXJzZVRyYWNrTmFtZShyKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhyLGkpfWdldFZhbHVlKHQscil7dGhpcy5iaW5kKCk7bGV0IG49dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dGhpcy5fYmluZGluZ3Nbbl07aSE9PXZvaWQgMCYmaS5nZXRWYWx1ZSh0LHIpfXNldFZhbHVlKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBpPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtyIT09bjsrK3IpdFtyXS5iaW5kKCl9dW5iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCByPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxuPXQubGVuZ3RoO3IhPT1uOysrcil0W3JdLnVuYmluZCgpfX0sQ3I9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMucGF0aD1yLHRoaXMucGFyc2VkUGF0aD1ufHxDci5wYXJzZVRyYWNrTmFtZShyKSx0aGlzLm5vZGU9Q3IuZmluZE5vZGUodCx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHx0LHRoaXMucm9vdE5vZGU9dCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfXN0YXRpYyBjcmVhdGUodCxyLG4pe3JldHVybiB0JiZ0LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IENyLkNvbXBvc2l0ZSh0LHIsbik6bmV3IENyKHQscixuKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShnMHIsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZSh0KXtsZXQgcj13MHIuZXhlYyh0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgbj17bm9kZU5hbWU6clsyXSxvYmplY3ROYW1lOnJbM10sb2JqZWN0SW5kZXg6cls0XSxwcm9wZXJ0eU5hbWU6cls1XSxwcm9wZXJ0eUluZGV4OnJbNl19LGk9bi5ub2RlTmFtZSYmbi5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKGkhPT12b2lkIDAmJmkhPT0tMSl7bGV0IG89bi5ub2RlTmFtZS5zdWJzdHJpbmcoaSsxKTtTMHIuaW5kZXhPZihvKSE9PS0xJiYobi5ub2RlTmFtZT1uLm5vZGVOYW1lLnN1YnN0cmluZygwLGkpLG4ub2JqZWN0TmFtZT1vKX1pZihuLnByb3BlcnR5TmFtZT09PW51bGx8fG4ucHJvcGVydHlOYW1lLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3QpO3JldHVybiBufXN0YXRpYyBmaW5kTm9kZSh0LHIpe2lmKCFyfHxyPT09IiJ8fHI9PT0iLiJ8fHI9PT0tMXx8cj09PXQubmFtZXx8cj09PXQudXVpZClyZXR1cm4gdDtpZih0LnNrZWxldG9uKXtsZXQgbj10LnNrZWxldG9uLmdldEJvbmVCeU5hbWUocik7aWYobiE9PXZvaWQgMClyZXR1cm4gbn1pZih0LmNoaWxkcmVuKXtsZXQgbj1mdW5jdGlvbihvKXtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKyl7bGV0IHM9b1thXTtpZihzLm5hbWU9PT1yfHxzLnV1aWQ9PT1yKXJldHVybiBzO2xldCBsPW4ocy5jaGlsZHJlbik7aWYobClyZXR1cm4gbH1yZXR1cm4gbnVsbH0saT1uKHQuY2hpbGRyZW4pO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KHQscil7dFtyXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXRbcisrXT1uW2ldfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0W3JdPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkodCxyKX1fc2V0VmFsdWVfZGlyZWN0KHQscil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbcl19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKW5baV09dFtyKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbcl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsciksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKHQscil9X3NldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMubm9kZSxyPXRoaXMucGFyc2VkUGF0aCxuPXIub2JqZWN0TmFtZSxpPXIucHJvcGVydHlOYW1lLG89ci5wcm9wZXJ0eUluZGV4O2lmKHR8fCh0PUNyLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsci5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUsdGhpcy5ub2RlPXQpLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGUsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZSwhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7cmV0dXJufWlmKG4pe2xldCBjPXIub2JqZWN0SW5kZXg7c3dpdGNoKG4pe2Nhc2UibWF0ZXJpYWxzIjppZighdC5tYXRlcmlhbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuIix0aGlzKTtyZXR1cm59aWYoIXQubWF0ZXJpYWwubWF0ZXJpYWxzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7cmV0dXJufXQ9dC5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSJib25lcyI6aWYoIXQuc2tlbGV0b24pe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7cmV0dXJufXQ9dC5za2VsZXRvbi5ib25lcztmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKylpZih0W3VdLm5hbWU9PT1jKXtjPXU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih0W25dPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7cmV0dXJufXQ9dFtuXX1pZihjIT09dm9pZCAwKXtpZih0W2NdPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLHQpO3JldHVybn10PXRbY119fWxldCBhPXRbaV07aWYoYT09PXZvaWQgMCl7bGV0IGM9ci5ub2RlTmFtZTtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2MrIi4iK2krIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsdCk7cmV0dXJufWxldCBzPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PXQsdC5uZWVkc1VwZGF0ZSE9PXZvaWQgMD9zPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUhPT12b2lkIDAmJihzPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgbD10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZihvIT09dm9pZCAwKXtpZihpPT09Im1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIpe2lmKCF0Lmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO3JldHVybn1pZih0Lmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpe2lmKCF0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7cmV0dXJufXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W29dIT09dm9pZCAwJiYobz10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtvXSl9ZWxzZXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7cmV0dXJufX1sPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hLHRoaXMucHJvcGVydHlJbmRleD1vfWVsc2UgYS5mcm9tQXJyYXkhPT12b2lkIDAmJmEudG9BcnJheSE9PXZvaWQgMD8obD10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTpBcnJheS5pc0FycmF5KGEpPyhsPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOnRoaXMucHJvcGVydHlOYW1lPWk7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbbF0sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2xdW3NdfXVuYmluZCgpe3RoaXMubm9kZT1udWxsLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fTtDci5Db21wb3NpdGU9aGh0O0NyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfTtDci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfTtDci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxDci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxDci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldO0NyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtDci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTt2YXIgSFU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtsZXQgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBuPTAsaT1hcmd1bWVudHMubGVuZ3RoO24hPT1pOysrbil0W2FyZ3VtZW50c1tuXS51dWlkXT1uO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtsZXQgcj10aGlzO3RoaXMuc3RhdHM9e29iamVjdHM6e2dldCB0b3RhbCgpe3JldHVybiByLl9vYmplY3RzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHRoaXMudG90YWwtci5uQ2FjaGVkT2JqZWN0c199fSxnZXQgYmluZGluZ3NQZXJPYmplY3QoKXtyZXR1cm4gci5fYmluZGluZ3MubGVuZ3RofX19YWRkKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9wYXRocyxpPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aCxzLGw9dC5sZW5ndGgsYz10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IHU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7dSE9PWg7Kyt1KXtsZXQgZj1hcmd1bWVudHNbdV0scD1mLnV1aWQsZD1yW3BdO2lmKGQ9PT12b2lkIDApe2Q9bCsrLHJbcF09ZCx0LnB1c2goZik7Zm9yKGxldCBnPTAsXz1hO2chPT1fOysrZylvW2ddLnB1c2gobmV3IENyKGYsbltnXSxpW2ddKSl9ZWxzZSBpZihkPGMpe3M9dFtkXTtsZXQgZz0tLWMsXz10W2ddO3JbXy51dWlkXT1kLHRbZF09XyxyW3BdPWcsdFtnXT1mO2ZvcihsZXQgeT0wLHg9YTt5IT09eDsrK3kpe2xldCBiPW9beV0sUz1iW2ddLEM9YltkXTtiW2RdPVMsQz09PXZvaWQgMCYmKEM9bmV3IENyKGYsblt5XSxpW3ldKSksYltnXT1DfX1lbHNlIHRbZF0hPT1zJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWN9cmVtb3ZlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBhPTAscz1hcmd1bWVudHMubGVuZ3RoO2EhPT1zOysrYSl7bGV0IGw9YXJndW1lbnRzW2FdLGM9bC51dWlkLHU9cltjXTtpZih1IT09dm9pZCAwJiZ1Pj1vKXtsZXQgaD1vKyssZj10W2hdO3JbZi51dWlkXT11LHRbdV09ZixyW2NdPWgsdFtoXT1sO2ZvcihsZXQgcD0wLGQ9aTtwIT09ZDsrK3Ape2xldCBnPW5bcF0sXz1nW2hdLHk9Z1t1XTtnW3VdPV8sZ1toXT15fX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b311bmNhY2hlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c18sYT10Lmxlbmd0aDtmb3IobGV0IHM9MCxsPWFyZ3VtZW50cy5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hcmd1bWVudHNbc10sdT1jLnV1aWQsaD1yW3VdO2lmKGghPT12b2lkIDApaWYoZGVsZXRlIHJbdV0saDxvKXtsZXQgZj0tLW8scD10W2ZdLGQ9LS1hLGc9dFtkXTtyW3AudXVpZF09aCx0W2hdPXAscltnLnV1aWRdPWYsdFtmXT1nLHQucG9wKCk7Zm9yKGxldCBfPTAseT1pO18hPT15OysrXyl7bGV0IHg9bltfXSxiPXhbZl0sUz14W2RdO3hbaF09Yix4W2ZdPVMseC5wb3AoKX19ZWxzZXtsZXQgZj0tLWEscD10W2ZdO2Y+MCYmKHJbcC51dWlkXT1oKSx0W2hdPXAsdC5wb3AoKTtmb3IobGV0IGQ9MCxnPWk7ZCE9PWc7KytkKXtsZXQgXz1uW2RdO19baF09X1tmXSxfLnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b31zdWJzY3JpYmVfKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGk9blt0XSxvPXRoaXMuX2JpbmRpbmdzO2lmKGkhPT12b2lkIDApcmV0dXJuIG9baV07bGV0IGE9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxsPXRoaXMuX29iamVjdHMsYz1sLmxlbmd0aCx1PXRoaXMubkNhY2hlZE9iamVjdHNfLGg9bmV3IEFycmF5KGMpO2k9by5sZW5ndGgsblt0XT1pLGEucHVzaCh0KSxzLnB1c2gociksby5wdXNoKGgpO2ZvcihsZXQgZj11LHA9bC5sZW5ndGg7ZiE9PXA7KytmKXtsZXQgZD1sW2ZdO2hbZl09bmV3IENyKGQsdCxyKX1yZXR1cm4gaH11bnN1YnNjcmliZV8odCl7bGV0IHI9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLG49clt0XTtpZihuIT09dm9pZCAwKXtsZXQgaT10aGlzLl9wYXRocyxvPXRoaXMuX3BhcnNlZFBhdGhzLGE9dGhpcy5fYmluZGluZ3Mscz1hLmxlbmd0aC0xLGw9YVtzXSxjPXRbc107cltjXT1uLGFbbl09bCxhLnBvcCgpLG9bbl09b1tzXSxvLnBvcCgpLGlbbl09aVtzXSxpLnBvcCgpfX19O0hVLnByb3RvdHlwZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwPSEwO3ZhciBmaHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49bnVsbCxpPXIuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9cix0aGlzLl9sb2NhbFJvb3Q9bix0aGlzLmJsZW5kTW9kZT1pO2xldCBvPXIudHJhY2tzLGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfTtmb3IobGV0IGM9MDtjIT09YTsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7c1tjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPXMsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkoYSksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPUlmZSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmdGhpcy50aW1lU2NhbGUhPT0wJiZ0aGlzLl9zdGFydFRpbWU9PT1udWxsJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LHIpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPXIsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LHIsbil7aWYodC5mYWRlT3V0KHIpLHRoaXMuZmFkZUluKHIpLG4pe2xldCBpPXRoaXMuX2NsaXAuZHVyYXRpb24sbz10Ll9jbGlwLmR1cmF0aW9uLGE9by9pLHM9aS9vO3Qud2FycCgxLGEsciksdGhpcy53YXJwKHMsMSxyKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LHIsbil7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLHIsbil9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LHIsbil7bGV0IGk9dGhpcy5fbWl4ZXIsbz1pLnRpbWUsYT10aGlzLnRpbWVTY2FsZSxzPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3M9PT1udWxsJiYocz1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9cyk7bGV0IGw9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1zLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytuLGNbMF09dC9hLGNbMV09ci9hLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxyLG4saSl7aWYoIXRoaXMuZW5hYmxlZCl7dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO3JldHVybn1sZXQgbz10aGlzLl9zdGFydFRpbWU7aWYobyE9PW51bGwpe2xldCBsPSh0LW8pKm47aWYobDwwfHxuPT09MClyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwscj1uKmx9cio9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2xldCBhPXRoaXMuX3VwZGF0ZVRpbWUocikscz10aGlzLl91cGRhdGVXZWlnaHQodCk7aWYocz4wKXtsZXQgbD10aGlzLl9pbnRlcnBvbGFudHMsYz10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO3N3aXRjaCh0aGlzLmJsZW5kTW9kZSl7Y2FzZSBraHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShzKTticmVhaztjYXNlICRVOmRlZmF1bHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGUoaSxzKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IHI9MDtpZih0aGlzLmVuYWJsZWQpe3I9dGhpcy53ZWlnaHQ7bGV0IG49dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobiE9PW51bGwpe2xldCBpPW4uZXZhbHVhdGUodClbMF07cio9aSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksaT09PTAmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1yLHJ9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgcj0wO2lmKCF0aGlzLnBhdXNlZCl7cj10aGlzLnRpbWVTY2FsZTtsZXQgbj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtuIT09bnVsbCYmKHIqPW4uZXZhbHVhdGUodClbMF0sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSxyPT09MD90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1yKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1yLHJ9X3VwZGF0ZVRpbWUodCl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixuPXRoaXMubG9vcCxpPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LGE9bj09PUxmZTtpZih0PT09MClyZXR1cm4gbz09PS0xP2k6YSYmKG8mMSk9PT0xP3ItaTppO2lmKG49PT1QZmUpe289PT0tMSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTt0OntpZihpPj1yKWk9cjtlbHNlIGlmKGk8MClpPTA7ZWxzZXt0aGlzLnRpbWU9aTticmVhayB0fXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZihvPT09LTEmJih0Pj0wPyhvPTAsdGhpcy5fc2V0RW5kaW5ncyghMCx0aGlzLnJlcGV0aXRpb25zPT09MCxhKSk6dGhpcy5fc2V0RW5kaW5ncyh0aGlzLnJlcGV0aXRpb25zPT09MCwhMCxhKSksaT49cnx8aTwwKXtsZXQgcz1NYXRoLmZsb29yKGkvcik7aS09cipzLG8rPU1hdGguYWJzKHMpO2xldCBsPXRoaXMucmVwZXRpdGlvbnMtbztpZihsPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGk9dD4wP3I6MCx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZihsPT09MSl7bGV0IGM9dDwwO3RoaXMuX3NldEVuZGluZ3MoYywhYyxhKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEsYSk7dGhpcy5fbG9vcENvdW50PW8sdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOnN9KX19ZWxzZSB0aGlzLnRpbWU9aTtpZihhJiYobyYxKT09PTEpcmV0dXJuIHItaX1yZXR1cm4gaX1fc2V0RW5kaW5ncyh0LHIsbil7bGV0IGk9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztuPyhpLmVuZGluZ1N0YXJ0PVQxLGkuZW5kaW5nRW5kPVQxKToodD9pLmVuZGluZ1N0YXJ0PXRoaXMuemVyb1Nsb3BlQXRTdGFydD9UMTpFMTppLmVuZGluZ1N0YXJ0PUpQLHI/aS5lbmRpbmdFbmQ9dGhpcy56ZXJvU2xvcGVBdEVuZD9UMTpFMTppLmVuZGluZ0VuZD1KUCl9X3NjaGVkdWxlRmFkaW5nKHQscixuKXtsZXQgaT10aGlzLl9taXhlcixvPWkudGltZSxhPXRoaXMuX3dlaWdodEludGVycG9sYW50O2E9PT1udWxsJiYoYT1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7bGV0IHM9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1hLnNhbXBsZVZhbHVlcztyZXR1cm4gc1swXT1vLGxbMF09cixzWzFdPW8rdCxsWzFdPW4sdGhpc319LFZVPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfV9iaW5kQWN0aW9uKHQscil7bGV0IG49dC5fbG9jYWxSb290fHx0aGlzLl9yb290LGk9dC5fY2xpcC50cmFja3Msbz1pLmxlbmd0aCxhPXQuX3Byb3BlcnR5QmluZGluZ3Mscz10Ll9pbnRlcnBvbGFudHMsbD1uLnV1aWQsYz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsdT1jW2xdO3U9PT12b2lkIDAmJih1PXt9LGNbbF09dSk7Zm9yKGxldCBoPTA7aCE9PW87KytoKXtsZXQgZj1pW2hdLHA9Zi5uYW1lLGQ9dVtwXTtpZihkIT09dm9pZCAwKSsrZC5yZWZlcmVuY2VDb3VudCxhW2hdPWQ7ZWxzZXtpZihkPWFbaF0sZCE9PXZvaWQgMCl7ZC5fY2FjaGVJbmRleD09PW51bGwmJigrK2QucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGQsbCxwKSk7Y29udGludWV9bGV0IGc9ciYmci5fcHJvcGVydHlCaW5kaW5nc1toXS5iaW5kaW5nLnBhcnNlZFBhdGg7ZD1uZXcgQlUoQ3IuY3JlYXRlKG4scCxnKSxmLlZhbHVlVHlwZU5hbWUsZi5nZXRWYWx1ZVNpemUoKSksKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLGwscCksYVtoXT1kfXNbaF0ucmVzdWx0QnVmZmVyPWQuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZih0Ll9jYWNoZUluZGV4PT09bnVsbCl7bGV0IG49KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZCxpPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXBbaV07dGhpcy5fYmluZEFjdGlvbih0LG8mJm8ua25vd25BY3Rpb25zWzBdKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih0LGksbil9bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTtvLnVzZUNvdW50Kys9PT0wJiYodGhpcy5fbGVuZEJpbmRpbmcobyksby5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKHQpfX1fZGVhY3RpdmF0ZUFjdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTstLW8udXNlQ291bnQ9PT0wJiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCByPXQuX2NhY2hlSW5kZXg7cmV0dXJuIHIhPT1udWxsJiZyPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LHIsbil7bGV0IGk9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3JdO2lmKGE9PT12b2lkIDApYT17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW3JdPWE7ZWxzZXtsZXQgcz1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX10Ll9jYWNoZUluZGV4PWkubGVuZ3RoLGkucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtuXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49cltyLmxlbmd0aC0xXSxpPXQuX2NhY2hlSW5kZXg7bi5fY2FjaGVJbmRleD1pLHJbaV09bixyLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQsYT10aGlzLl9hY3Rpb25zQnlDbGlwLHM9YVtvXSxsPXMua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbDtsZXQgaD1zLmFjdGlvbkJ5Um9vdCxmPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQ7ZGVsZXRlIGhbZl0sbC5sZW5ndGg9PT0wJiZkZWxldGUgYVtvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07LS1vLnJlZmVyZW5jZUNvdW50PT09MCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG8pfX1fbGVuZEFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxpPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fdGFrZUJhY2tBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X2FkZEluYWN0aXZlQmluZGluZyh0LHIsbil7bGV0IGk9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLG89dGhpcy5fYmluZGluZ3MsYT1pW3JdO2E9PT12b2lkIDAmJihhPXt9LGlbcl09YSksYVtuXT10LHQuX2NhY2hlSW5kZXg9by5sZW5ndGgsby5wdXNoKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsaT1uLnJvb3ROb2RlLnV1aWQsbz1uLnBhdGgsYT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1hW2ldLGw9cltyLmxlbmd0aC0xXSxjPXQuX2NhY2hlSW5kZXg7bC5fY2FjaGVJbmRleD1jLHJbY109bCxyLnBvcCgpLGRlbGV0ZSBzW29dLE9iamVjdC5rZXlzKHMpLmxlbmd0aD09PTAmJmRlbGV0ZSBhW2ldfV9sZW5kQmluZGluZyh0KXtsZXQgcj10aGlzLl9iaW5kaW5ncyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxvPXJbaV07dC5fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9jYWNoZUluZGV4PW4scltuXT1vfV90YWtlQmFja0JpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Msbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpe2xldCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMscj10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLG49dFtyXTtyZXR1cm4gbj09PXZvaWQgMCYmKG49bmV3IFM2KG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLG4uX19jYWNoZUluZGV4PXIsdFtyXT1uKSxufV90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KXtsZXQgcj10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLG49dC5fX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLG89cltpXTt0Ll9fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9fY2FjaGVJbmRleD1uLHJbbl09b31jbGlwQWN0aW9uKHQscixuKXtsZXQgaT1yfHx0aGlzLl9yb290LG89aS51dWlkLGE9dHlwZW9mIHQ9PSJzdHJpbmciP1ExLmZpbmRCeU5hbWUoaSx0KTp0LHM9YSE9PW51bGw/YS51dWlkOnQsbD10aGlzLl9hY3Rpb25zQnlDbGlwW3NdLGM9bnVsbDtpZihuPT09dm9pZCAwJiYoYSE9PW51bGw/bj1hLmJsZW5kTW9kZTpuPSRVKSxsIT09dm9pZCAwKXtsZXQgaD1sLmFjdGlvbkJ5Um9vdFtvXTtpZihoIT09dm9pZCAwJiZoLmJsZW5kTW9kZT09PW4pcmV0dXJuIGg7Yz1sLmtub3duQWN0aW9uc1swXSxhPT09bnVsbCYmKGE9Yy5fY2xpcCl9aWYoYT09PW51bGwpcmV0dXJuIG51bGw7bGV0IHU9bmV3IGZodCh0aGlzLGEscixuKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUscyxvKSx1fWV4aXN0aW5nQWN0aW9uKHQscil7bGV0IG49cnx8dGhpcy5fcm9vdCxpPW4udXVpZCxvPXR5cGVvZiB0PT0ic3RyaW5nIj9RMS5maW5kQnlOYW1lKG4sdCk6dCxhPW8/by51dWlkOnQscz10aGlzLl9hY3Rpb25zQnlDbGlwW2FdO3JldHVybiBzIT09dm9pZCAwJiZzLmFjdGlvbkJ5Um9vdFtpXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucyxyPXRoaXMuX25BY3RpdmVBY3Rpb25zO2ZvcihsZXQgbj1yLTE7bj49MDstLW4pdFtuXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe3QqPXRoaXMudGltZVNjYWxlO2xldCByPXRoaXMuX2FjdGlvbnMsbj10aGlzLl9uQWN0aXZlQWN0aW9ucyxpPXRoaXMudGltZSs9dCxvPU1hdGguc2lnbih0KSxhPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09bjsrK2MpcltjXS5fdXBkYXRlKGksdCxvLGEpO2xldCBzPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylzW2NdLmFwcGx5KGEpO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCByPTA7cjx0aGlzLl9hY3Rpb25zLmxlbmd0aDtyKyspdGhpcy5fYWN0aW9uc1tyXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPWlbbl07aWYobyE9PXZvaWQgMCl7bGV0IGE9by5rbm93bkFjdGlvbnM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzIT09bDsrK3Mpe2xldCBjPWFbc107dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgdT1jLl9jYWNoZUluZGV4LGg9cltyLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGguX2NhY2hlSW5kZXg9dSxyW3VdPWgsci5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSBpW25dfX11bmNhY2hlUm9vdCh0KXtsZXQgcj10LnV1aWQsbj10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgYSBpbiBuKXtsZXQgcz1uW2FdLmFjdGlvbkJ5Um9vdCxsPXNbcl07bCE9PXZvaWQgMCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBpPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPWlbcl07aWYobyE9PXZvaWQgMClmb3IobGV0IGEgaW4gbyl7bGV0IHM9b1thXTtzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHMpfX11bmNhY2hlQWN0aW9uKHQscil7bGV0IG49dGhpcy5leGlzdGluZ0FjdGlvbih0LHIpO24hPT1udWxsJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihuKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihuKSl9fTtWVS5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgZ009Y2xhc3N7Y29uc3RydWN0b3IodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IGdNKHRoaXMudmFsdWUuY2xvbmU9PT12b2lkIDA/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX0sVVU9Y2xhc3MgZXh0ZW5kcyBlbXtjb25zdHJ1Y3Rvcih0LHIsbj0xKXtzdXBlcih0LHIpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCByPXN1cGVyLmNsb25lKHQpO3JldHVybiByLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHJ9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLHIubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUscn19O1VVLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBxVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPXIsdGhpcy5pdGVtU2l6ZT1uLHRoaXMuZWxlbWVudFNpemU9aSx0aGlzLmNvdW50PW8sdGhpcy52ZXJzaW9uPTB9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9c2V0VHlwZSh0LHIpe3JldHVybiB0aGlzLnR5cGU9dCx0aGlzLmVsZW1lbnRTaXplPXIsdGhpc31zZXRJdGVtU2l6ZSh0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9c2V0Q291bnQodCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX07cVUucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIHBodD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9MS8wKXt0aGlzLnJheT1uZXcgSmYodCxyKSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5sYXllcnM9bmV3IFgzLHRoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e3RocmVzaG9sZDoxfSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fX1zZXQodCxyKXt0aGlzLnJheS5zZXQodCxyKX1zZXRGcm9tQ2FtZXJhKHQscil7ciYmci5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQodC54LHQueSwuNSkudW5wcm9qZWN0KHIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXMuY2FtZXJhPXIpOnImJnIuaXNPcnRob2dyYXBoaWNDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXQodC54LHQueSwoci5uZWFyK3IuZmFyKS8oci5uZWFyLXIuZmFyKSkudW5wcm9qZWN0KHIpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oci5tYXRyaXhXb3JsZCksdGhpcy5jYW1lcmE9cik6Y29uc29sZS5lcnJvcigiVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZTogIityLnR5cGUpfWludGVyc2VjdE9iamVjdCh0LHI9ITAsbj1bXSl7cmV0dXJuIGRodCh0LHRoaXMsbixyKSxuLnNvcnQoTGhlKSxufWludGVyc2VjdE9iamVjdHModCxyPSEwLG49W10pe2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKylkaHQodFtpXSx0aGlzLG4scik7cmV0dXJuIG4uc29ydChMaGUpLG59fTtmdW5jdGlvbiBMaGUoZSx0KXtyZXR1cm4gZS5kaXN0YW5jZS10LmRpc3RhbmNlfWZ1bmN0aW9uIGRodChlLHQscixuKXtpZihlLmxheWVycy50ZXN0KHQubGF5ZXJzKSYmZS5yYXljYXN0KHQsciksbj09PSEwKXtsZXQgaT1lLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylkaHQoaVtvXSx0LHIsITApfX12YXIgX009Y2xhc3N7Y29uc3RydWN0b3IodD0xLHI9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMucGhpPXIsdGhpcy50aGV0YT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1yLHRoaXMudGhldGE9bix0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMucGhpPXQucGhpLHRoaXMudGhldGE9dC50aGV0YSx0aGlzfW1ha2VTYWZlKCl7cmV0dXJuIHRoaXMucGhpPU1hdGgubWF4KDFlLTYsTWF0aC5taW4oTWF0aC5QSS0xZS02LHRoaXMucGhpKSksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtyKnIrbipuKSx0aGlzLnJhZGl1cz09PTA/KHRoaXMudGhldGE9MCx0aGlzLnBoaT0wKToodGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy5waGk9TWF0aC5hY29zKFpvKHIvdGhpcy5yYWRpdXMsLTEsMSkpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LG1odD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTEscj0wLG49MCl7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1yLHRoaXMueT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnRoZXRhPXIsdGhpcy55PW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnRoZXRhPXQudGhldGEsdGhpcy55PXQueSx0aGlzfXNldEZyb21WZWN0b3IzKHQpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModC54LHQueSx0LnopfXNldEZyb21DYXJ0ZXNpYW5Db29yZHModCxyLG4pe3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQodCp0K24qbiksdGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy55PXIsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxraGU9bmV3IEx0LCQwPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IEx0KDEvMCwxLzApLHI9bmV3IEx0KC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtyXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxyKXtsZXQgbj1raGUuY29weShyKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKG4pLHRoaXMubWF4LmNvcHkodCkuYWRkKG4pLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQscil7cmV0dXJuIHIuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBraGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19OyQwLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIFJoZT1uZXcgaixZVj1uZXcgaixHVT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yfXNldCh0LHIpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodCksdGhpcy5lbmQuY29weShyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0LnN0YXJ0KSx0aGlzLmVuZC5jb3B5KHQuZW5kKSx0aGlzfWdldENlbnRlcih0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX1kZWx0YSh0KXtyZXR1cm4gdC5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfWRpc3RhbmNlU3EoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmVuZCl9ZGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKX1hdCh0LHIpe3JldHVybiB0aGlzLmRlbHRhKHIpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KX1jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscil7UmhlLnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSxZVi5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpO2xldCBuPVlWLmRvdChZViksbz1ZVi5kb3QoUmhlKS9uO3JldHVybiByJiYobz1abyhvLDAsMSkpLG99Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIsbil7bGV0IGk9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscik7cmV0dXJuIHRoaXMuZGVsdGEobikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxOaGU9bmV3IGosZ2h0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1yO2xldCBuPW5ldyBQZSxpPVswLDAsMCwwLDAsMSwwLDAsMCwxLDAsMSwwLDAsMCwtMSwwLDEsMCwwLDAsMCwxLDEsMCwwLDAsMCwtMSwxXTtmb3IobGV0IGE9MCxzPTEsbD0zMjthPGw7YSsrLHMrKyl7bGV0IGM9YS9sKk1hdGguUEkqMix1PXMvbCpNYXRoLlBJKjI7aS5wdXNoKE1hdGguY29zKGMpLE1hdGguc2luKGMpLDEsTWF0aC5jb3ModSksTWF0aC5zaW4odSksMSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMuY29uZT1uZXcgQWEobixvKSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IHQ9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOjFlMyxyPXQqTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7dGhpcy5jb25lLnNjYWxlLnNldChyLHIsdCksTmhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCksdGhpcy5jb25lLmxvb2tBdChOaGUpLHRoaXMuY29sb3IhPT12b2lkIDA/dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19LE8wPW5ldyBqLGpWPW5ldyBNZSxidXQ9bmV3IE1lLFdVPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCl7bGV0IHI9b3BlKHQpLG49bmV3IFBlLGk9W10sbz1bXSxhPW5ldyBuZSgwLDAsMSkscz1uZXcgbmUoMCwxLDApO2ZvcihsZXQgYz0wO2M8ci5sZW5ndGg7YysrKXtsZXQgdT1yW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihpLnB1c2goMCwwLDApLGkucHVzaCgwLDAsMCksby5wdXNoKGEucixhLmcsYS5iKSxvLnB1c2gocy5yLHMuZyxzLmIpKX1uLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSxuLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShvLDMpKTtsZXQgbD1uZXcgR2koe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIobixsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1yLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPXRoaXMuYm9uZXMsbj10aGlzLmdlb21ldHJ5LGk9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7YnV0LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxhPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107cy5wYXJlbnQmJnMucGFyZW50LmlzQm9uZSYmKGpWLm11bHRpcGx5TWF0cmljZXMoYnV0LHMubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSxPMC54LE8wLnksTzAueiksalYubXVsdGlwbHlNYXRyaWNlcyhidXQscy5wYXJlbnQubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSsxLE8wLngsTzAueSxPMC56KSxhKz0yKX1uLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIG9wZShlKXtsZXQgdD1bXTtlJiZlLmlzQm9uZSYmdC5wdXNoKGUpO2ZvcihsZXQgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXQucHVzaC5hcHBseSh0LG9wZShlLmNoaWxkcmVuW3JdKSk7cmV0dXJuIHR9dmFyIF9odD1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1uZXcgajAociw0LDIpLG89bmV3IHNoKHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihpLG8pLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5jb2xvcj1uLHRoaXMudHlwZT0iUG9pbnRMaWdodEhlbHBlciIsdGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5jb2xvciE9PXZvaWQgMD90aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxNMHI9bmV3IGosRGhlPW5ldyBuZSxPaGU9bmV3IG5lLHlodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uO2xldCBpPW5ldyBXMChyKTtpLnJvdGF0ZVkoTWF0aC5QSSouNSksdGhpcy5tYXRlcmlhbD1uZXcgc2goe3dpcmVmcmFtZTohMCxmb2c6ITEsdG9uZU1hcHBlZDohMX0pLHRoaXMuY29sb3I9PT12b2lkIDAmJih0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMCk7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksYT1uZXcgRmxvYXQzMkFycmF5KG8uY291bnQqMyk7aS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgSmUoYSwzKSksdGhpcy5hZGQobmV3IHRpKGksdGhpcy5tYXRlcmlhbCkpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe2xldCB0PXRoaXMuY2hpbGRyZW5bMF07aWYodGhpcy5jb2xvciE9PXZvaWQgMCl0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle2xldCByPXQuZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO0RoZS5jb3B5KHRoaXMubGlnaHQuY29sb3IpLE9oZS5jb3B5KHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IpO2ZvcihsZXQgbj0wLGk9ci5jb3VudDtuPGk7bisrKXtsZXQgbz1uPGkvMj9EaGU6T2hlO3Iuc2V0WFlaKG4sby5yLG8uZyxvLmIpfXIubmVlZHNVcGRhdGU9ITB9dC5sb29rQXQoTTByLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSl9fSxZVT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MTAscj0xMCxuPTQ0NzM5MjQsaT04OTQ3ODQ4KXtuPW5ldyBuZShuKSxpPW5ldyBuZShpKTtsZXQgbz1yLzIsYT10L3Iscz10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLHA9MCxkPS1zO2Y8PXI7ZisrLGQrPWEpe2wucHVzaCgtcywwLGQscywwLGQpLGwucHVzaChkLDAsLXMsZCwwLHMpO2xldCBnPWY9PT1vP246aTtnLnRvQXJyYXkoYyxwKSxwKz0zLGcudG9BcnJheShjLHApLHArPTMsZy50b0FycmF5KGMscCkscCs9MyxnLnRvQXJyYXkoYyxwKSxwKz0zfWxldCB1PW5ldyBQZTt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShjLDMpKTtsZXQgaD1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX0sdmh0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xMCxyPTE2LG49OCxpPTY0LG89NDQ3MzkyNCxhPTg5NDc4NDgpe289bmV3IG5lKG8pLGE9bmV3IG5lKGEpO2xldCBzPVtdLGw9W107Zm9yKGxldCBoPTA7aDw9cjtoKyspe2xldCBmPWgvciooTWF0aC5QSSoyKSxwPU1hdGguc2luKGYpKnQsZD1NYXRoLmNvcyhmKSp0O3MucHVzaCgwLDAsMCkscy5wdXNoKHAsMCxkKTtsZXQgZz1oJjE/bzphO2wucHVzaChnLnIsZy5nLGcuYiksbC5wdXNoKGcucixnLmcsZy5iKX1mb3IobGV0IGg9MDtoPD1uO2grKyl7bGV0IGY9aCYxP286YSxwPXQtdC9uKmg7Zm9yKGxldCBkPTA7ZDxpO2QrKyl7bGV0IGc9ZC9pKihNYXRoLlBJKjIpLF89TWF0aC5zaW4oZykqcCx5PU1hdGguY29zKGcpKnA7cy5wdXNoKF8sMCx5KSxsLnB1c2goZi5yLGYuZyxmLmIpLGc9KGQrMSkvaSooTWF0aC5QSSoyKSxfPU1hdGguc2luKGcpKnAseT1NYXRoLmNvcyhnKSpwLHMucHVzaChfLDAseSksbC5wdXNoKGYucixmLmcsZi5iKX19bGV0IGM9bmV3IFBlO2Muc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLGMuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IHhlKGwsMykpO2xldCB1PW5ldyBHaSh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihjLHUpLHRoaXMudHlwZT0iUG9sYXJHcmlkSGVscGVyIn19LHpoZT1uZXcgaixYVj1uZXcgaixGaGU9bmV3IGoseGh0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW4scj09PXZvaWQgMCYmKHI9MSk7bGV0IGk9bmV3IFBlO2kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFstcixyLDAscixyLDAsciwtciwwLC1yLC1yLDAsLXIsciwwXSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMubGlnaHRQbGFuZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLmxpZ2h0UGxhbmUpLGk9bmV3IFBlLGkuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDAsMV0sMykpLHRoaXMudGFyZ2V0TGluZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLnRhcmdldExpbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7emhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKSxYVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLEZoZS5zdWJWZWN0b3JzKFhWLHpoZSksdGhpcy5saWdodFBsYW5lLmxvb2tBdChYViksdGhpcy5jb2xvciE9PXZvaWQgMD8odGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpKToodGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpLHRoaXMudGFyZ2V0TGluZS5sb29rQXQoWFYpLHRoaXMudGFyZ2V0TGluZS5zY2FsZS56PUZoZS5sZW5ndGgoKX19LCRWPW5ldyBqLF9pPW5ldyBSMSxiaHQ9Y2xhc3MgZXh0ZW5kcyBBYXtjb25zdHJ1Y3Rvcih0KXtsZXQgcj1uZXcgUGUsbj1uZXcgR2koe2NvbG9yOjE2Nzc3MjE1LHZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSksaT1bXSxvPVtdLGE9e30scz1uZXcgbmUoMTY3NTUyMDApLGw9bmV3IG5lKDE2NzExNjgwKSxjPW5ldyBuZSg0Mzc3NSksdT1uZXcgbmUoMTY3NzcyMTUpLGg9bmV3IG5lKDMzNTU0NDMpO2YoIm4xIiwibjIiLHMpLGYoIm4yIiwibjQiLHMpLGYoIm40IiwibjMiLHMpLGYoIm4zIiwibjEiLHMpLGYoImYxIiwiZjIiLHMpLGYoImYyIiwiZjQiLHMpLGYoImY0IiwiZjMiLHMpLGYoImYzIiwiZjEiLHMpLGYoIm4xIiwiZjEiLHMpLGYoIm4yIiwiZjIiLHMpLGYoIm4zIiwiZjMiLHMpLGYoIm40IiwiZjQiLHMpLGYoInAiLCJuMSIsbCksZigicCIsIm4yIixsKSxmKCJwIiwibjMiLGwpLGYoInAiLCJuNCIsbCksZigidTEiLCJ1MiIsYyksZigidTIiLCJ1MyIsYyksZigidTMiLCJ1MSIsYyksZigiYyIsInQiLHUpLGYoInAiLCJjIixoKSxmKCJjbjEiLCJjbjIiLGgpLGYoImNuMyIsImNuNCIsaCksZigiY2YxIiwiY2YyIixoKSxmKCJjZjMiLCJjZjQiLGgpO2Z1bmN0aW9uIGYoZCxnLF8pe3AoZCxfKSxwKGcsXyl9ZnVuY3Rpb24gcChkLGcpe2kucHVzaCgwLDAsMCksby5wdXNoKGcucixnLmcsZy5iKSxhW2RdPT09dm9pZCAwJiYoYVtkXT1bXSksYVtkXS5wdXNoKGkubGVuZ3RoLzMtMSl9ci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksci5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobywzKSksc3VwZXIocixuKSx0aGlzLnR5cGU9IkNhbWVyYUhlbHBlciIsdGhpcy5jYW1lcmE9dCx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5wb2ludE1hcD1hLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeSxyPXRoaXMucG9pbnRNYXAsbj0xLGk9MTtfaS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSxQaSgiYyIscix0LF9pLDAsMCwtMSksUGkoInQiLHIsdCxfaSwwLDAsMSksUGkoIm4xIixyLHQsX2ksLW4sLWksLTEpLFBpKCJuMiIscix0LF9pLG4sLWksLTEpLFBpKCJuMyIscix0LF9pLC1uLGksLTEpLFBpKCJuNCIscix0LF9pLG4saSwtMSksUGkoImYxIixyLHQsX2ksLW4sLWksMSksUGkoImYyIixyLHQsX2ksbiwtaSwxKSxQaSgiZjMiLHIsdCxfaSwtbixpLDEpLFBpKCJmNCIscix0LF9pLG4saSwxKSxQaSgidTEiLHIsdCxfaSxuKi43LGkqMS4xLC0xKSxQaSgidTIiLHIsdCxfaSwtbiouNyxpKjEuMSwtMSksUGkoInUzIixyLHQsX2ksMCxpKjIsLTEpLFBpKCJjZjEiLHIsdCxfaSwtbiwwLDEpLFBpKCJjZjIiLHIsdCxfaSxuLDAsMSksUGkoImNmMyIscix0LF9pLDAsLWksMSksUGkoImNmNCIscix0LF9pLDAsaSwxKSxQaSgiY24xIixyLHQsX2ksLW4sMCwtMSksUGkoImNuMiIscix0LF9pLG4sMCwtMSksUGkoImNuMyIscix0LF9pLDAsLWksLTEpLFBpKCJjbjQiLHIsdCxfaSwwLGksLTEpLHQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19O2Z1bmN0aW9uIFBpKGUsdCxyLG4saSxvLGEpeyRWLnNldChpLG8sYSkudW5wcm9qZWN0KG4pO2xldCBzPXRbZV07aWYocyE9PXZvaWQgMCl7bGV0IGw9ci5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7Zm9yKGxldCBjPTAsdT1zLmxlbmd0aDtjPHU7YysrKWwuc2V0WFlaKHNbY10sJFYueCwkVi55LCRWLnopfX12YXIgS1Y9bmV3IHRhLHlNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1uZXcgRmxvYXQzMkFycmF5KDgqMyksbz1uZXcgUGU7by5zZXRJbmRleChuZXcgSmUobiwxKSksby5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUoaSwzKSksc3VwZXIobyxuZXcgR2koe2NvbG9yOnIsdG9uZU1hcHBlZDohMX0pKSx0aGlzLm9iamVjdD10LHRoaXMudHlwZT0iQm94SGVscGVyIix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX11cGRhdGUodCl7aWYodCE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4iKSx0aGlzLm9iamVjdCE9PXZvaWQgMCYmS1Yuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCksS1YuaXNFbXB0eSgpKXJldHVybjtsZXQgcj1LVi5taW4sbj1LVi5tYXgsaT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sbz1pLmFycmF5O29bMF09bi54LG9bMV09bi55LG9bMl09bi56LG9bM109ci54LG9bNF09bi55LG9bNV09bi56LG9bNl09ci54LG9bN109ci55LG9bOF09bi56LG9bOV09bi54LG9bMTBdPXIueSxvWzExXT1uLnosb1sxMl09bi54LG9bMTNdPW4ueSxvWzE0XT1yLnosb1sxNV09ci54LG9bMTZdPW4ueSxvWzE3XT1yLnosb1sxOF09ci54LG9bMTldPXIueSxvWzIwXT1yLnosb1syMV09bi54LG9bMjJdPXIueSxvWzIzXT1yLnosaS5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfXNldEZyb21PYmplY3QodCl7cmV0dXJuIHRoaXMub2JqZWN0PXQsdGhpcy51cGRhdGUoKSx0aGlzfWNvcHkodCl7cmV0dXJuIEFhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm9iamVjdD10Lm9iamVjdCx0aGlzfX0sd2h0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1bMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwtMSwtMSwxLC0xLC0xLC0xLC0xLDEsLTEsLTFdLG89bmV3IFBlO28uc2V0SW5kZXgobmV3IEplKG4sMSkpLG8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHN1cGVyKG8sbmV3IEdpKHtjb2xvcjpyLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5ib3g9dCx0aGlzLnR5cGU9IkJveDNIZWxwZXIiLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IHI9dGhpcy5ib3g7ci5pc0VtcHR5KCl8fChyLmdldENlbnRlcih0aGlzLnBvc2l0aW9uKSxyLmdldFNpemUodGhpcy5zY2FsZSksdGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhciguNSksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCkpfX0sU2h0PWNsYXNzIGV4dGVuZHMgY2h7Y29uc3RydWN0b3IodCxyPTEsbj0xNjc3Njk2MCl7bGV0IGk9bixvPVsxLC0xLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwxLDAsMCwxLDAsMCwwXSxhPW5ldyBQZTthLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShvLDMpKSxhLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHN1cGVyKGEsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJQbGFuZUhlbHBlciIsdGhpcy5wbGFuZT10LHRoaXMuc2l6ZT1yO2xldCBzPVsxLDEsMSwtMSwxLDEsLTEsLTEsMSwxLDEsMSwtMSwtMSwxLDEsLTEsMV0sbD1uZXcgUGU7bC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksbC5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzLmFkZChuZXcgdGkobCxuZXcgc2goe2NvbG9yOmksb3BhY2l0eTouMix0cmFuc3BhcmVudDohMCxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITF9KSkpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPS10aGlzLnBsYW5lLmNvbnN0YW50O01hdGguYWJzKHIpPDFlLTgmJihyPTFlLTgpLHRoaXMuc2NhbGUuc2V0KC41KnRoaXMuc2l6ZSwuNSp0aGlzLnNpemUsciksdGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5zaWRlPXI8MD9JaTpJMSx0aGlzLmxvb2tBdCh0aGlzLnBsYW5lLm5vcm1hbCksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fSxCaGU9bmV3IGosWlYsd3V0LE1odD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IGooMCwwLDEpLHI9bmV3IGooMCwwLDApLG49MSxpPTE2Nzc2OTYwLG89biouMixhPW8qLjIpe3N1cGVyKCksdGhpcy50eXBlPSJBcnJvd0hlbHBlciIsWlY9PT12b2lkIDAmJihaVj1uZXcgUGUsWlYuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDEsMF0sMykpLHd1dD1uZXcgb20oMCwuNSwxLDUsMSksd3V0LnRyYW5zbGF0ZSgwLC0uNSwwKSksdGhpcy5wb3NpdGlvbi5jb3B5KHIpLHRoaXMubGluZT1uZXcgY2goWlYsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5saW5lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5saW5lKSx0aGlzLmNvbmU9bmV3IHRpKHd1dCxuZXcgc2goe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLmNvbmUubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMuc2V0RGlyZWN0aW9uKHQpLHRoaXMuc2V0TGVuZ3RoKG4sbyxhKX1zZXREaXJlY3Rpb24odCl7aWYodC55Pi45OTk5OSl0aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpO2Vsc2UgaWYodC55PC0uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgxLDAsMCwwKTtlbHNle0JoZS5zZXQodC56LDAsLXQueCkubm9ybWFsaXplKCk7bGV0IHI9TWF0aC5hY29zKHQueSk7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoQmhlLHIpfX1zZXRMZW5ndGgodCxyPXQqLjIsbj1yKi4yKXt0aGlzLmxpbmUuc2NhbGUuc2V0KDEsTWF0aC5tYXgoMWUtNCx0LXIpLDEpLHRoaXMubGluZS51cGRhdGVNYXRyaXgoKSx0aGlzLmNvbmUuc2NhbGUuc2V0KG4scixuKSx0aGlzLmNvbmUucG9zaXRpb24ueT10LHRoaXMuY29uZS51cGRhdGVNYXRyaXgoKX1zZXRDb2xvcih0KXt0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHQpLHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0LCExKSx0aGlzLmxpbmUuY29weSh0LmxpbmUpLHRoaXMuY29uZS5jb3B5KHQuY29uZSksdGhpc319LHZNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xKXtsZXQgcj1bMCwwLDAsdCwwLDAsMCwwLDAsMCx0LDAsMCwwLDAsMCwwLHRdLG49WzEsMCwwLDEsLjYsMCwwLDEsMCwuNiwxLDAsMCwwLDEsMCwuNiwxXSxpPW5ldyBQZTtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShuLDMpKTtsZXQgbz1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIoaSxvKSx0aGlzLnR5cGU9IkF4ZXNIZWxwZXIifXNldENvbG9ycyh0LHIsbil7bGV0IGk9bmV3IG5lLG89dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLmFycmF5O3JldHVybiBpLnNldCh0KSxpLnRvQXJyYXkobywwKSxpLnRvQXJyYXkobywzKSxpLnNldChyKSxpLnRvQXJyYXkobyw2KSxpLnRvQXJyYXkobyw5KSxpLnNldChuKSxpLnRvQXJyYXkobywxMiksaS50b0FycmF5KG8sMTUpLHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5uZWVkc1VwZGF0ZT0hMCx0aGlzfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19LEVodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBuZSx0aGlzLnN1YlBhdGhzPVtdLHRoaXMuY3VycmVudFBhdGg9bnVsbH1tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aD1uZXcgcTEsdGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpLHRoaXMuY3VycmVudFBhdGgubW92ZVRvKHQsciksdGhpc31saW5lVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5saW5lVG8odCxyKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxyLG4saSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyh0LHIsbixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8odCxyLG4saSxvLGEpLHRoaXN9c3BsaW5lVGhydSh0KXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KHQpLHRoaXN9dG9TaGFwZXModCxyKXtmdW5jdGlvbiBuKHgpe2xldCBiPVtdO2ZvcihsZXQgUz0wLEM9eC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9eFtTXSxrPW5ldyBLYztrLmN1cnZlcz1QLmN1cnZlcyxiLnB1c2goayl9cmV0dXJuIGJ9ZnVuY3Rpb24gaSh4LGIpe2xldCBTPWIubGVuZ3RoLEM9ITE7Zm9yKGxldCBQPVMtMSxrPTA7azxTO1A9aysrKXtsZXQgTz1iW1BdLEQ9YltrXSxCPUQueC1PLngsST1ELnktTy55O2lmKE1hdGguYWJzKEkpPk51bWJlci5FUFNJTE9OKXtpZihJPDAmJihPPWJba10sQj0tQixEPWJbUF0sST0tSSkseC55PE8ueXx8eC55PkQueSljb250aW51ZTtpZih4Lnk9PT1PLnkpe2lmKHgueD09PU8ueClyZXR1cm4hMH1lbHNle2xldCBMPUkqKHgueC1PLngpLUIqKHgueS1PLnkpO2lmKEw9PT0wKXJldHVybiEwO2lmKEw8MCljb250aW51ZTtDPSFDfX1lbHNle2lmKHgueSE9PU8ueSljb250aW51ZTtpZihELng8PXgueCYmeC54PD1PLnh8fE8ueDw9eC54JiZ4Lng8PUQueClyZXR1cm4hMH19cmV0dXJuIEN9bGV0IG89WmMuaXNDbG9ja1dpc2UsYT10aGlzLnN1YlBhdGhzO2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtpZihyPT09ITApcmV0dXJuIG4oYSk7bGV0IHMsbCxjLHU9W107aWYoYS5sZW5ndGg9PT0xKXJldHVybiBsPWFbMF0sYz1uZXcgS2MsYy5jdXJ2ZXM9bC5jdXJ2ZXMsdS5wdXNoKGMpLHU7bGV0IGg9IW8oYVswXS5nZXRQb2ludHMoKSk7aD10PyFoOmg7bGV0IGY9W10scD1bXSxkPVtdLGc9MCxfO3BbZ109dm9pZCAwLGRbZ109W107Zm9yKGxldCB4PTAsYj1hLmxlbmd0aDt4PGI7eCsrKWw9YVt4XSxfPWwuZ2V0UG9pbnRzKCkscz1vKF8pLHM9dD8hczpzLHM/KCFoJiZwW2ddJiZnKysscFtnXT17czpuZXcgS2MscDpffSxwW2ddLnMuY3VydmVzPWwuY3VydmVzLGgmJmcrKyxkW2ddPVtdKTpkW2ddLnB1c2goe2g6bCxwOl9bMF19KTtpZighcFswXSlyZXR1cm4gbihhKTtpZihwLmxlbmd0aD4xKXtsZXQgeD0hMSxiPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKylmW1NdPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9ZFtTXTtmb3IobGV0IGs9MDtrPFAubGVuZ3RoO2srKyl7bGV0IE89UFtrXSxEPSEwO2ZvcihsZXQgQj0wO0I8cC5sZW5ndGg7QisrKWkoTy5wLHBbQl0ucCkmJihTIT09QiYmYi5wdXNoKHtmcm9tczpTLHRvczpCLGhvbGU6a30pLEQ/KEQ9ITEsZltCXS5wdXNoKE8pKTp4PSEwKTtEJiZmW1NdLnB1c2goTyl9fWIubGVuZ3RoPjAmJih4fHwoZD1mKSl9bGV0IHk7Zm9yKGxldCB4PTAsYj1wLmxlbmd0aDt4PGI7eCsrKXtjPXBbeF0ucyx1LnB1c2goYykseT1kW3hdO2ZvcihsZXQgUz0wLEM9eS5sZW5ndGg7UzxDO1MrKyljLmhvbGVzLnB1c2goeVtTXS5oKX1yZXR1cm4gdX19LGFwZT1uZXcgRmxvYXQzMkFycmF5KDEpLEUwcj1uZXcgSW50MzJBcnJheShhcGUuYnVmZmVyKSxUaHQ9Y2xhc3N7c3RhdGljIHRvSGFsZkZsb2F0KHQpe3Q+NjU1MDQmJihjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFVdGlscy50b0hhbGZGbG9hdCgpOiB2YWx1ZSBleGNlZWRzIDY1NTA0LiIpLHQ9NjU1MDQpLGFwZVswXT10O2xldCByPUUwclswXSxuPXI+PjE2JjMyNzY4LGk9cj4+MTImMjA0NyxvPXI+PjIzJjI1NTtyZXR1cm4gbzwxMDM/bjpvPjE0Mj8obnw9MzE3NDQsbnw9KG89PTI1NT8wOjEpJiZyJjgzODg2MDcsbik6bzwxMTM/KGl8PTIwNDgsbnw9KGk+PjExNC1vKSsoaT4+MTEzLW8mMSksbik6KG58PW8tMTEyPDwxMHxpPj4xLG4rPWkmMSxuKX19LFQwcj0wLEMwcj0xLEEwcj0wLFAwcj0xLEkwcj0yO2Z1bmN0aW9uIEwwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoRmFjZU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLGV9ZnVuY3Rpb24gazByKGU9W10pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIiksZS5pc011bHRpTWF0ZXJpYWw9ITAsZS5tYXRlcmlhbHM9ZSxlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2xpY2UoKX0sZX1mdW5jdGlvbiBSMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpLG5ldyBpbShlLHQpfWZ1bmN0aW9uIE4wcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKSxuZXcgb00oZSl9ZnVuY3Rpb24gRDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIiksbmV3IGltKGUsdCl9ZnVuY3Rpb24gTzByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiB6MHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIEYwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIEIwcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIiksbmV3IGooZSx0LHIpfWZ1bmN0aW9uIEgwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXRVc2FnZSggVEhSRUUuRHluYW1pY0RyYXdVc2FnZSApIGluc3RlYWQuIiksbmV3IEplKGUsdCkuc2V0VXNhZ2UoWTMpfWZ1bmN0aW9uIFYwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgY1UoZSx0KX1mdW5jdGlvbiBVMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgdVUoZSx0KX1mdW5jdGlvbiBxMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OENsYW1wZWRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBoVShlLHQpfWZ1bmN0aW9uIEcwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBmVShlLHQpfWZ1bmN0aW9uIFcwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3ICQzKGUsdCl9ZnVuY3Rpb24gWTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHBVKGUsdCl9ZnVuY3Rpb24gajByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgSzMoZSx0KX1mdW5jdGlvbiBYMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GbG9hdDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHhlKGUsdCl9ZnVuY3Rpb24gJDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBtVShlLHQpfWZzLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZnMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldFBvaW50PXQsZX07cTEucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKGUpfTtmdW5jdGlvbiBLMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQXhpc0hlbHBlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkF4ZXNIZWxwZXIuIiksbmV3IHZNKGUpfWZ1bmN0aW9uIFowcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuIiksbmV3IHlNKGUsdCl9ZnVuY3Rpb24gSjByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRWRnZXNIZWxwZXIgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkVkZ2VzR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgQWEobmV3IHM2KGUuZ2VvbWV0cnkpLG5ldyBHaSh7Y29sb3I6dCE9PXZvaWQgMD90OjE2Nzc3MjE1fSkpfVlVLnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9O1dVLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4iKX07ZnVuY3Rpb24gUTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpLG5ldyBBYShuZXcgZDYoZS5nZW9tZXRyeSksbmV3IEdpKHtjb2xvcjp0IT09dm9pZCAwP3Q6MTY3NzcyMTV9KSl9ZWEucHJvdG90eXBlLmV4dHJhY3RVcmxCYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlcjogLmV4dHJhY3RVcmxCYXNlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkxvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCkgaW5zdGVhZC4iKSxkTS5leHRyYWN0VXJsQmFzZShlKX07ZWEuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIHRfcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5YSFJMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5GaWxlTG9hZGVyLiIpLG5ldyBKYyhlKX1mdW5jdGlvbiBlX3IoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpLG5ldyBDVShlKX0kMC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07JDAucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTskMC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07JDAucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKGUpfTt0YS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07dGEucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTt0YS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07dGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O3RhLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShlKX07WmYucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9O04xLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KGUpfTtHVS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O2tpLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O2tpLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtraS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07a2kucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShlKS5pbnZlcnQoKX07TWUucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIiksdGhpcy5jb3B5UG9zaXRpb24oZSl9O01lLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O01lLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuZXcgaigpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX07TWUucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oZSl9O01lLnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yND1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVBeGlzPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuIiksZS50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcyl9O01lLnByb3RvdHlwZS5jcm9zc1ZlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlQnlBeGlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubWFrZUZydXN0dW09ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuIiksdGhpcy5tYWtlUGVyc3BlY3RpdmUoZSx0LG4scixpLG8pfTtNZS5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KGUpLmludmVydCgpfTskYy5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKGUpfTt5aS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgaXMgbm93IHZlY3Rvci5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKSBpbnN0ZWFkLiIpLGUuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTt5aS5wcm90b3R5cGUuaW52ZXJzZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KGUpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzUGxhbmUoZSl9O0pmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O29pLnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpLHRoaXMuZ2V0QXJlYSgpfTtvaS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZChlLHQpfTtvaS5wcm90b3R5cGUubWlkcG9pbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIiksdGhpcy5nZXRNaWRwb2ludChlKX07b2kucHJvdG90eXBlbm9ybWFsPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksdGhpcy5nZXROb3JtYWwoZSl9O29pLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLnBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0UGxhbmUoKS4iKSx0aGlzLmdldFBsYW5lKGUpfTtvaS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLG9pLmdldEJhcnljb29yZChlLHQscixuLGkpfTtvaS5ub3JtYWw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSxvaS5nZXROb3JtYWwoZSx0LHIsbil9O0tjLnByb3RvdHlwZS5leHRyYWN0QWxsUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKGUpfTtLYy5wcm90b3R5cGUuZXh0cnVkZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgaGgodGhpcyxlKX07S2MucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgWTAodGhpcyxlKX07THQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQscil9O0x0LnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07THQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5nZXRQb3NpdGlvbkZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUpfTtqLnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKGUpfTtqLnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsZSl9O2oucHJvdG90eXBlLmFwcGx5UHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpLHRoaXMuYXBwbHlNYXRyaXg0KGUpfTtqLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtqLnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07ai5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O2VuLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtlbi5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O29yLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIiksdGhpcy5nZXRPYmplY3RCeU5hbWUoZSl9O29yLnByb3RvdHlwZS5yZW5kZXJEZXB0aD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfTtvci5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpLHRoaXMudHJhbnNsYXRlT25BeGlzKHQsZSl9O29yLnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX07b3IucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob3IucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPWV9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTt0aS5wcm90b3R5cGUuc2V0RHJhd01vZGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aS5wcm90b3R5cGUse2RyYXdNb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIiksa2ZlfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7YU0ucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtVaS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihlLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT2wucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9ZX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1lfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1lfX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9ZX19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPWV9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9ZX19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPWV9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPWV9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9ZX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9ZX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSmUucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09WTN9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShZMyl9fX0pO0plLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKGU9PT0hMD9ZMzpXMyksdGhpc307SmUucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSmUucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07UGUucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChlKX07UGUucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShlLG5ldyBKZShhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOmU9PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShlLHQpfTtQZS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24oZSx0LHIpe3IhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChlLHQpfTtQZS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtQZS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtQZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUoZSl9O1BlLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBlLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7ZW0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShlPT09ITA/WTM6VzMpLHRoaXN9O2VtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07aGgucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2hoLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtoaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3EwLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07Z00ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocWkucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBuZX19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9ZT09PUFodH19LHN0ZW5jaWxNYXNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFza30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2s9ZX19LHZlcnRleFRhbmdlbnRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsaC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPWV9fX0pO3JuLnByb3RvdHlwZS5jbGVhclRhcmdldD1mdW5jdGlvbihlLHQscixuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuIiksdGhpcy5zZXRSZW5kZXJUYXJnZXQoZSksdGhpcy5jbGVhcih0LHIsbil9O3JuLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4iKSx0aGlzLnNldEFuaW1hdGlvbkxvb3AoZSl9O3JuLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9O3JuLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuIiksdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfTtybi5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4iKSx0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb259O3JuLnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuIiksdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKX07cm4ucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QoZSl9O3JuLnByb3RvdHlwZS5pbml0TWF0ZXJpYWw9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuYWRkUHJlUGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUHJlUGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmUyRD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEFjdGl2ZU1pcE1hcExldmVsKCkgaXMgbm93IC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLiIpLHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocm4ucHJvdG90eXBlLHtzaGFkb3dNYXBFbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4iKSx0aGlzLnNoYWRvd01hcC5lbmFibGVkPWV9fSxzaGFkb3dNYXBUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4iKSx0aGlzLnNoYWRvd01hcC50eXBlPWV9fSxzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LGNvbnRleHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuIiksdGhpcy5nZXRDb250ZXh0KCl9fSx2cjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnZyIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnhyIiksdGhpcy54cn19LGdhbW1hSW5wdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKX19LGdhbW1hT3V0cHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksdGhpcy5vdXRwdXRFbmNvZGluZz1lPT09ITA/V246UWR9fSx0b25lTWFwcGluZ1doaXRlUG9pbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKSwxfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LGdhbW1hRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKSwyfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZmUucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pO2Z1bmN0aW9uIHJfcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApLiIpLG5ldyBRMyhlLHIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHVzLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPWV9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9ZX19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZX19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZX19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PWV9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PWV9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PWV9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PWV9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1lfX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lfX19KTtENi5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybiBuZXcgRFUoKS5sb2FkKGUsZnVuY3Rpb24obil7dC5zZXRCdWZmZXIobil9KSx0aGlzfTtGVS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9O0ozLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKGUsdCl9O0ozLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKGUsdCxyLG4pfTtLZi5jcm9zc09yaWdpbj12b2lkIDA7S2YubG9hZFRleHR1cmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgaT1uZXcgQVU7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1pLmxvYWQoZSxyLHZvaWQgMCxuKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfTtLZi5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCBpPW5ldyBUVTtpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBvPWkubG9hZChlLHIsdm9pZCAwLG4pO3JldHVybiB0JiYoby5tYXBwaW5nPXQpLG99O0tmLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07S2YubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O2Z1bmN0aW9uIG5fcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX1mdW5jdGlvbiBpX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyIGhhcyBiZWVuIHJlbW92ZWQuIil9dmFyIG9fcj17Y3JlYXRlTXVsdGlNYXRlcmlhbE9iamVjdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGRldGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGF0dGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9fTtmdW5jdGlvbiBhX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9vYmplY3RzL0xlbnNmbGFyZS5qcyIpfWZ1bmN0aW9uIHNfcigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5QYXJhbWV0cmljR2VvbWV0cnkgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1BhcmFtZXRyaWNHZW9tZXRyeS5qcyIpLG5ldyBQZX1mdW5jdGlvbiBsX3IoKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuVGV4dEdlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9UZXh0R2VvbWV0cnkuanMiKSxuZXcgUGV9ZnVuY3Rpb24gY19yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRm9udExvYWRlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcyIpfWZ1bmN0aW9uIHVfcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkZvbnQgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMiKX1mdW5jdGlvbiBoX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbW1lZGlhdGVSZW5kZXJPYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4iKX10eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246alV9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPWpVKTt2YXIgc3BlPXt0eXBlOiJjaGFuZ2UifSxIaHQ9e3R5cGU6InN0YXJ0In0sbHBlPXt0eXBlOiJlbmQifSxKVT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSxyPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyICJkb21FbGVtZW50IiBpcyBub3cgbWFuZGF0b3J5LicpLHI9PT1kb2N1bWVudCYmY29uc29sZS5lcnJvcignVEhSRUUuT3JiaXRDb250cm9sczogImRvY3VtZW50IiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCAiZG9tRWxlbWVudCIuIFBsZWFzZSB1c2UgInJlbmRlcmVyLmRvbUVsZW1lbnQiIGluc3RlYWQuJyksdGhpcy5vYmplY3Q9dCx0aGlzLmRvbUVsZW1lbnQ9cix0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb249Im5vbmUiLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRhcmdldD1uZXcgaix0aGlzLm1pbkRpc3RhbmNlPTAsdGhpcy5tYXhEaXN0YW5jZT0xLzAsdGhpcy5taW5ab29tPTAsdGhpcy5tYXhab29tPTEvMCx0aGlzLm1pblBvbGFyQW5nbGU9MCx0aGlzLm1heFBvbGFyQW5nbGU9TWF0aC5QSSx0aGlzLm1pbkF6aW11dGhBbmdsZT0tMS8wLHRoaXMubWF4QXppbXV0aEFuZ2xlPTEvMCx0aGlzLmVuYWJsZURhbXBpbmc9ITEsdGhpcy5kYW1waW5nRmFjdG9yPS4wNSx0aGlzLmVuYWJsZVpvb209ITAsdGhpcy56b29tU3BlZWQ9MSx0aGlzLmVuYWJsZVJvdGF0ZT0hMCx0aGlzLnJvdGF0ZVNwZWVkPTEsdGhpcy5lbmFibGVQYW49ITAsdGhpcy5wYW5TcGVlZD0xLHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSEwLHRoaXMua2V5UGFuU3BlZWQ9Nyx0aGlzLmF1dG9Sb3RhdGU9ITEsdGhpcy5hdXRvUm90YXRlU3BlZWQ9Mix0aGlzLmtleXM9e0xFRlQ6IkFycm93TGVmdCIsVVA6IkFycm93VXAiLFJJR0hUOiJBcnJvd1JpZ2h0IixCT1RUT006IkFycm93RG93biJ9LHRoaXMubW91c2VCdXR0b25zPXtMRUZUOkswLlJPVEFURSxNSURETEU6SzAuRE9MTFksUklHSFQ6SzAuUEFOfSx0aGlzLnRvdWNoZXM9e09ORTpaMC5ST1RBVEUsVFdPOlowLkRPTExZX1BBTn0sdGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCksdGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKSx0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb20sdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udWxsLHRoaXMuZ2V0UG9sYXJBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnBoaX0sdGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnRoZXRhfSx0aGlzLmdldERpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JqZWN0LnBvc2l0aW9uLmRpc3RhbmNlVG8odGhpcy50YXJnZXQpfSx0aGlzLmxpc3RlblRvS2V5RXZlbnRzPWZ1bmN0aW9uKG50KXtudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmciksdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udH0sdGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtuLnRhcmdldDAuY29weShuLnRhcmdldCksbi5wb3NpdGlvbjAuY29weShuLm9iamVjdC5wb3NpdGlvbiksbi56b29tMD1uLm9iamVjdC56b29tfSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7bi50YXJnZXQuY29weShuLnRhcmdldDApLG4ub2JqZWN0LnBvc2l0aW9uLmNvcHkobi5wb3NpdGlvbjApLG4ub2JqZWN0Lnpvb209bi56b29tMCxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksbi5kaXNwYXRjaEV2ZW50KHNwZSksbi51cGRhdGUoKSxvPWkuTk9ORX0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGosQ3Q9bmV3IHlpKCkuc2V0RnJvbVVuaXRWZWN0b3JzKHQudXAsbmV3IGooMCwxLDApKSxXdD1DdC5jbG9uZSgpLmludmVydCgpLGZlPW5ldyBqLGF0PW5ldyB5aSxzZT0yKk1hdGguUEk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IENlPW4ub2JqZWN0LnBvc2l0aW9uO250LmNvcHkoQ2UpLnN1YihuLnRhcmdldCksbnQuYXBwbHlRdWF0ZXJuaW9uKEN0KSxzLnNldEZyb21WZWN0b3IzKG50KSxuLmF1dG9Sb3RhdGUmJm89PT1pLk5PTkUmJkQoaygpKSxuLmVuYWJsZURhbXBpbmc/KHMudGhldGErPWwudGhldGEqbi5kYW1waW5nRmFjdG9yLHMucGhpKz1sLnBoaSpuLmRhbXBpbmdGYWN0b3IpOihzLnRoZXRhKz1sLnRoZXRhLHMucGhpKz1sLnBoaSk7bGV0IFB0PW4ubWluQXppbXV0aEFuZ2xlLE50PW4ubWF4QXppbXV0aEFuZ2xlO3JldHVybiBpc0Zpbml0ZShQdCkmJmlzRmluaXRlKE50KSYmKFB0PC1NYXRoLlBJP1B0Kz1zZTpQdD5NYXRoLlBJJiYoUHQtPXNlKSxOdDwtTWF0aC5QST9OdCs9c2U6TnQ+TWF0aC5QSSYmKE50LT1zZSksUHQ8PU50P3MudGhldGE9TWF0aC5tYXgoUHQsTWF0aC5taW4oTnQscy50aGV0YSkpOnMudGhldGE9cy50aGV0YT4oUHQrTnQpLzI/TWF0aC5tYXgoUHQscy50aGV0YSk6TWF0aC5taW4oTnQscy50aGV0YSkpLHMucGhpPU1hdGgubWF4KG4ubWluUG9sYXJBbmdsZSxNYXRoLm1pbihuLm1heFBvbGFyQW5nbGUscy5waGkpKSxzLm1ha2VTYWZlKCkscy5yYWRpdXMqPWMscy5yYWRpdXM9TWF0aC5tYXgobi5taW5EaXN0YW5jZSxNYXRoLm1pbihuLm1heERpc3RhbmNlLHMucmFkaXVzKSksbi5lbmFibGVEYW1waW5nPT09ITA/bi50YXJnZXQuYWRkU2NhbGVkVmVjdG9yKHUsbi5kYW1waW5nRmFjdG9yKTpuLnRhcmdldC5hZGQodSksbnQuc2V0RnJvbVNwaGVyaWNhbChzKSxudC5hcHBseVF1YXRlcm5pb24oV3QpLENlLmNvcHkobi50YXJnZXQpLmFkZChudCksbi5vYmplY3QubG9va0F0KG4udGFyZ2V0KSxuLmVuYWJsZURhbXBpbmc9PT0hMD8obC50aGV0YSo9MS1uLmRhbXBpbmdGYWN0b3IsbC5waGkqPTEtbi5kYW1waW5nRmFjdG9yLHUubXVsdGlwbHlTY2FsYXIoMS1uLmRhbXBpbmdGYWN0b3IpKToobC5zZXQoMCwwLDApLHUuc2V0KDAsMCwwKSksYz0xLGh8fGZlLmRpc3RhbmNlVG9TcXVhcmVkKG4ub2JqZWN0LnBvc2l0aW9uKT5hfHw4KigxLWF0LmRvdChuLm9iamVjdC5xdWF0ZXJuaW9uKSk+YT8obi5kaXNwYXRjaEV2ZW50KHNwZSksZmUuY29weShuLm9iamVjdC5wb3NpdGlvbiksYXQuY29weShuLm9iamVjdC5xdWF0ZXJuaW9uKSxoPSExLCEwKTohMX19KCksdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7bi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCksbi5fZG9tRWxlbWVudEtleUV2ZW50cyE9PW51bGwmJm4uX2RvbUVsZW1lbnRLZXlFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnIpfTtsZXQgbj10aGlzLGk9e05PTkU6LTEsUk9UQVRFOjAsRE9MTFk6MSxQQU46MixUT1VDSF9ST1RBVEU6MyxUT1VDSF9QQU46NCxUT1VDSF9ET0xMWV9QQU46NSxUT1VDSF9ET0xMWV9ST1RBVEU6Nn0sbz1pLk5PTkUsYT0xZS02LHM9bmV3IF9NLGw9bmV3IF9NLGM9MSx1PW5ldyBqLGg9ITEsZj1uZXcgTHQscD1uZXcgTHQsZD1uZXcgTHQsZz1uZXcgTHQsXz1uZXcgTHQseT1uZXcgTHQseD1uZXcgTHQsYj1uZXcgTHQsUz1uZXcgTHQsQz1bXSxQPXt9O2Z1bmN0aW9uIGsoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKm4uYXV0b1JvdGF0ZVNwZWVkfWZ1bmN0aW9uIE8oKXtyZXR1cm4gTWF0aC5wb3coLjk1LG4uem9vbVNwZWVkKX1mdW5jdGlvbiBEKG50KXtsLnRoZXRhLT1udH1mdW5jdGlvbiBCKG50KXtsLnBoaS09bnR9bGV0IEk9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50Lm11bHRpcGx5U2NhbGFyKC1XdCksdS5hZGQobnQpfX0oKSxMPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bi5zY3JlZW5TcGFjZVBhbm5pbmc9PT0hMD9udC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDEpOihudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50LmNyb3NzVmVjdG9ycyhuLm9iamVjdC51cCxudCkpLG50Lm11bHRpcGx5U2NhbGFyKFd0KSx1LmFkZChudCl9fSgpLFI9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtsZXQgYXQ9bi5kb21FbGVtZW50O2lmKG4ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpe2xldCBzZT1uLm9iamVjdC5wb3NpdGlvbjtudC5jb3B5KHNlKS5zdWIobi50YXJnZXQpO2xldCBRdD1udC5sZW5ndGgoKTtRdCo9TWF0aC50YW4obi5vYmplY3QuZm92LzIqTWF0aC5QSS8xODApLEkoMipXdCpRdC9hdC5jbGllbnRIZWlnaHQsbi5vYmplY3QubWF0cml4KSxMKDIqZmUqUXQvYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCl9ZWxzZSBuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8oSShXdCoobi5vYmplY3QucmlnaHQtbi5vYmplY3QubGVmdCkvbi5vYmplY3Quem9vbS9hdC5jbGllbnRXaWR0aCxuLm9iamVjdC5tYXRyaXgpLEwoZmUqKG4ub2JqZWN0LnRvcC1uLm9iamVjdC5ib3R0b20pL24ub2JqZWN0Lnpvb20vYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCkpOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC4iKSxuLmVuYWJsZVBhbj0hMSl9fSgpO2Z1bmN0aW9uIEYobnQpe24ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmE/Yy89bnQ6bi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KG4ub2JqZWN0Lnpvb209TWF0aC5tYXgobi5taW5ab29tLE1hdGgubWluKG4ubWF4Wm9vbSxuLm9iamVjdC56b29tKm50KSksbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLGg9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksbi5lbmFibGVab29tPSExKX1mdW5jdGlvbiB6KG50KXtuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP2MqPW50Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbS9udCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxoPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gVShudCl7Zi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKX1mdW5jdGlvbiBXKG50KXt4LnNldChudC5jbGllbnRYLG50LmNsaWVudFkpfWZ1bmN0aW9uIFoobnQpe2cuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSl9ZnVuY3Rpb24gcnQobnQpe3Auc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSksZC5zdWJWZWN0b3JzKHAsZikubXVsdGlwbHlTY2FsYXIobi5yb3RhdGVTcGVlZCk7bGV0IEN0PW4uZG9tRWxlbWVudDtEKDIqTWF0aC5QSSpkLngvQ3QuY2xpZW50SGVpZ2h0KSxCKDIqTWF0aC5QSSpkLnkvQ3QuY2xpZW50SGVpZ2h0KSxmLmNvcHkocCksbi51cGRhdGUoKX1mdW5jdGlvbiBvdChudCl7Yi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSxTLnN1YlZlY3RvcnMoYix4KSxTLnk+MD9GKE8oKSk6Uy55PDAmJnooTygpKSx4LmNvcHkoYiksbi51cGRhdGUoKX1mdW5jdGlvbiBzdChudCl7Xy5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSx5LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIFN0KG50KXtudC5kZWx0YVk8MD96KE8oKSk6bnQuZGVsdGFZPjAmJkYoTygpKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIGJ0KG50KXtsZXQgQ3Q9ITE7c3dpdGNoKG50LmNvZGUpe2Nhc2Ugbi5rZXlzLlVQOlIoMCxuLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5CT1RUT006UigwLC1uLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5MRUZUOlIobi5rZXlQYW5TcGVlZCwwKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5SSUdIVDpSKC1uLmtleVBhblNwZWVkLDApLEN0PSEwO2JyZWFrfUN0JiYobnQucHJldmVudERlZmF1bHQoKSxuLnVwZGF0ZSgpKX1mdW5jdGlvbiBNdCgpe2lmKEMubGVuZ3RoPT09MSlmLnNldChDWzBdLnBhZ2VYLENbMF0ucGFnZVkpO2Vsc2V7bGV0IG50PS41KihDWzBdLnBhZ2VYK0NbMV0ucGFnZVgpLEN0PS41KihDWzBdLnBhZ2VZK0NbMV0ucGFnZVkpO2Yuc2V0KG50LEN0KX19ZnVuY3Rpb24gbHQoKXtpZihDLmxlbmd0aD09PTEpZy5zZXQoQ1swXS5wYWdlWCxDWzBdLnBhZ2VZKTtlbHNle2xldCBudD0uNSooQ1swXS5wYWdlWCtDWzFdLnBhZ2VYKSxDdD0uNSooQ1swXS5wYWdlWStDWzFdLnBhZ2VZKTtnLnNldChudCxDdCl9fWZ1bmN0aW9uIEt0KCl7bGV0IG50PUNbMF0ucGFnZVgtQ1sxXS5wYWdlWCxDdD1DWzBdLnBhZ2VZLUNbMV0ucGFnZVksV3Q9TWF0aC5zcXJ0KG50Km50K0N0KkN0KTt4LnNldCgwLFd0KX1mdW5jdGlvbiBfdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVBhbiYmbHQoKX1mdW5jdGlvbiBjdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVJvdGF0ZSYmTXQoKX1mdW5jdGlvbiBYKG50KXtpZihDLmxlbmd0aD09MSlwLnNldChudC5wYWdlWCxudC5wYWdlWSk7ZWxzZXtsZXQgV3Q9YmUobnQpLGZlPS41KihudC5wYWdlWCtXdC54KSxhdD0uNSoobnQucGFnZVkrV3QueSk7cC5zZXQoZmUsYXQpfWQuc3ViVmVjdG9ycyhwLGYpLm11bHRpcGx5U2NhbGFyKG4ucm90YXRlU3BlZWQpO2xldCBDdD1uLmRvbUVsZW1lbnQ7RCgyKk1hdGguUEkqZC54L0N0LmNsaWVudEhlaWdodCksQigyKk1hdGguUEkqZC55L0N0LmNsaWVudEhlaWdodCksZi5jb3B5KHApfWZ1bmN0aW9uIGV0KG50KXtpZihDLmxlbmd0aD09PTEpXy5zZXQobnQucGFnZVgsbnQucGFnZVkpO2Vsc2V7bGV0IEN0PWJlKG50KSxXdD0uNSoobnQucGFnZVgrQ3QueCksZmU9LjUqKG50LnBhZ2VZK0N0LnkpO18uc2V0KFd0LGZlKX15LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKX1mdW5jdGlvbiBkdChudCl7bGV0IEN0PWJlKG50KSxXdD1udC5wYWdlWC1DdC54LGZlPW50LnBhZ2VZLUN0LnksYXQ9TWF0aC5zcXJ0KFd0Kld0K2ZlKmZlKTtiLnNldCgwLGF0KSxTLnNldCgwLE1hdGgucG93KGIueS94Lnksbi56b29tU3BlZWQpKSxGKFMueSkseC5jb3B5KGIpfWZ1bmN0aW9uIHEobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUGFuJiZldChudCl9ZnVuY3Rpb24gcHQobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUm90YXRlJiZYKG50KX1mdW5jdGlvbiBodChudCl7bi5lbmFibGVkIT09ITEmJihDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUobnQucG9pbnRlcklkKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCkpLCR0KG50KSxudC5wb2ludGVyVHlwZT09PSJ0b3VjaCI/dHQobnQpOmVlKG50KSl9ZnVuY3Rpb24gd3QobnQpe24uZW5hYmxlZCE9PSExJiYobnQucG9pbnRlclR5cGU9PT0idG91Y2giPyQobnQpOkxlKG50KSl9ZnVuY3Rpb24ga3QobnQpe2hlKG50KSxDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKG50LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpKSxuLmRpc3BhdGNoRXZlbnQobHBlKSxvPWkuTk9ORX1mdW5jdGlvbiBpZShudCl7aGUobnQpfWZ1bmN0aW9uIGVlKG50KXtsZXQgQ3Q7c3dpdGNoKG50LmJ1dHRvbil7Y2FzZSAwOkN0PW4ubW91c2VCdXR0b25zLkxFRlQ7YnJlYWs7Y2FzZSAxOkN0PW4ubW91c2VCdXR0b25zLk1JRERMRTticmVhaztjYXNlIDI6Q3Q9bi5tb3VzZUJ1dHRvbnMuUklHSFQ7YnJlYWs7ZGVmYXVsdDpDdD0tMX1zd2l0Y2goQ3Qpe2Nhc2UgSzAuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO1cobnQpLG89aS5ET0xMWTticmVhaztjYXNlIEswLlJPVEFURTppZihudC5jdHJsS2V5fHxudC5tZXRhS2V5fHxudC5zaGlmdEtleSl7aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47WihudCksbz1pLlBBTn1lbHNle2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9YnJlYWs7Y2FzZSBLMC5QQU46aWYobnQuY3RybEtleXx8bnQubWV0YUtleXx8bnQuc2hpZnRLZXkpe2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9ZWxzZXtpZihuLmVuYWJsZVBhbj09PSExKXJldHVybjtaKG50KSxvPWkuUEFOfWJyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9byE9PWkuTk9ORSYmbi5kaXNwYXRjaEV2ZW50KEhodCl9ZnVuY3Rpb24gTGUobnQpe2lmKG4uZW5hYmxlZCE9PSExKXN3aXRjaChvKXtjYXNlIGkuUk9UQVRFOmlmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO3J0KG50KTticmVhaztjYXNlIGkuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO290KG50KTticmVhaztjYXNlIGkuUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO3N0KG50KTticmVha319ZnVuY3Rpb24gYXIobnQpe24uZW5hYmxlZD09PSExfHxuLmVuYWJsZVpvb209PT0hMXx8byE9PWkuTk9ORXx8KG50LnByZXZlbnREZWZhdWx0KCksbi5kaXNwYXRjaEV2ZW50KEhodCksU3QobnQpLG4uZGlzcGF0Y2hFdmVudChscGUpKX1mdW5jdGlvbiBmcihudCl7bi5lbmFibGVkPT09ITF8fG4uZW5hYmxlUGFuPT09ITF8fGJ0KG50KX1mdW5jdGlvbiB0dChudCl7c3dpdGNoKFR0KG50KSxDLmxlbmd0aCl7Y2FzZSAxOnN3aXRjaChuLnRvdWNoZXMuT05FKXtjYXNlIFowLlJPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtNdCgpLG89aS5UT1VDSF9ST1RBVEU7YnJlYWs7Y2FzZSBaMC5QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47bHQoKSxvPWkuVE9VQ0hfUEFOO2JyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9YnJlYWs7Y2FzZSAyOnN3aXRjaChuLnRvdWNoZXMuVFdPKXtjYXNlIFowLkRPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47X3QoKSxvPWkuVE9VQ0hfRE9MTFlfUEFOO2JyZWFrO2Nhc2UgWjAuRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtjdCgpLG89aS5UT1VDSF9ET0xMWV9ST1RBVEU7YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX1icmVhaztkZWZhdWx0Om89aS5OT05FfW8hPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChIaHQpfWZ1bmN0aW9uICQobnQpe3N3aXRjaChUdChudCksbyl7Y2FzZSBpLlRPVUNIX1JPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtYKG50KSxuLnVwZGF0ZSgpO2JyZWFrO2Nhc2UgaS5UT1VDSF9QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47ZXQobnQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47cShudCksbi51cGRhdGUoKTticmVhaztjYXNlIGkuVE9VQ0hfRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtwdChudCksbi51cGRhdGUoKTticmVhaztkZWZhdWx0Om89aS5OT05FfX1mdW5jdGlvbiBJdChudCl7bi5lbmFibGVkIT09ITEmJm50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gJHQobnQpe0MucHVzaChudCl9ZnVuY3Rpb24gaGUobnQpe2RlbGV0ZSBQW250LnBvaW50ZXJJZF07Zm9yKGxldCBDdD0wO0N0PEMubGVuZ3RoO0N0KyspaWYoQ1tDdF0ucG9pbnRlcklkPT1udC5wb2ludGVySWQpe0Muc3BsaWNlKEN0LDEpO3JldHVybn19ZnVuY3Rpb24gVHQobnQpe2xldCBDdD1QW250LnBvaW50ZXJJZF07Q3Q9PT12b2lkIDAmJihDdD1uZXcgTHQsUFtudC5wb2ludGVySWRdPUN0KSxDdC5zZXQobnQucGFnZVgsbnQucGFnZVkpfWZ1bmN0aW9uIGJlKG50KXtsZXQgQ3Q9bnQucG9pbnRlcklkPT09Q1swXS5wb2ludGVySWQ/Q1sxXTpDWzBdO3JldHVybiBQW0N0LnBvaW50ZXJJZF19bi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyLHtwYXNzaXZlOiExfSksdGhpcy51cGRhdGUoKX19O3ZhciBGNj1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fbGFzdE1lc2g9bnVsbCx0aGlzLl9jbG9jaz1uZXcgbU0sdGhpcy5fY2FudmFzU2l6ZT1udWxsLHRoaXMuX2xheWVyc0NvbmZpZz1udWxsLHRoaXMuX3J1bkNvbG9yPXR9X2lzT2JqZWN0KHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiByPT0ib2JqZWN0IiYmdCE9bnVsbCYmIUFycmF5LmlzQXJyYXkodCl9X2FwcGx5RGVmYXVsdHModCxyKXtsZXQgbj17fSxpPVt0LHJdO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2ZvcihsZXQgcyBpbiBhKXtsZXQgbD1zIGluIG47dGhpcy5faXNPYmplY3QoYVtzXSk/bltzXT10aGlzLl9hcHBseURlZmF1bHRzKG5bc118fHt9LGFbc10pOmx8fChuW3NdPWFbc10pfX1yZXR1cm4gbn1fY3JlYXRlTGF5ZXJzKCl7aWYoISghdGhpcy5fbGF5ZXJzQ29uZmlnfHwhdGhpcy5fc2NlbmV8fCF0aGlzLl9sYXN0TWVzaCkpe2lmKHRoaXMuX2xheWVyc0NvbmZpZy5zaG93Qm91bmRpbmdCb3gpe3ZhciB0PW5ldyB5TSh0aGlzLl9sYXN0TWVzaCxuZXcgbmUoInJnYigwLCAwLCAyNTUpIikpO3RoaXMuX3NjZW5lLmFkZCh0KX1pZih0aGlzLl9sYXllcnNDb25maWcuc2hvd0F4ZXMpe3ZhciByPW5ldyB2TSg1KTt0aGlzLl9zY2VuZS5hZGQocil9fX1zZXRMYXllcnNDb25maWcodCl7dGhpcy5fbGF5ZXJzQ29uZmlnPXRoaXMuX2FwcGx5RGVmYXVsdHModCx0aGlzLl9sYXllcnNDb25maWd8fHt9KX1fY3JlYXRlV29ybGQodCxyKXt2YXIgYSxzLGwsYztpZih0aGlzLmlzUmVhZHkoKSlyZXR1cm47dGhpcy5fc2NlbmU9bmV3IHEwO3ZhciBuPW5ldyB3TVt0LmNhbWVyYS5jbHNdKHQuY2FtZXJhLmZvdiwoKGE9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmEud2lkdGgpLygocz10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6cy5oZWlnaHQpLHQuY2FtZXJhLm5lYXIsdC5jYW1lcmEuZmFyKTt0aGlzLl9jYW1lcmE9bix0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj12b2lkIDAsdC5jYW1lcmEucG9zaXRpb24mJih0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj1uZXcgaigpLmZyb21BcnJheSh0LmNhbWVyYS5wb3NpdGlvbikpLHRoaXMuaW5pdENhbWVyYUxvb2tBdD12b2lkIDAsdC5jYW1lcmEubG9va0F0JiYodGhpcy5pbml0Q2FtZXJhTG9va0F0PW5ldyBqKCkuZnJvbUFycmF5KHQuY2FtZXJhLmxvb2tBdCkpO3ZhciBpPW5ldyBKVShuLHIpO2xldCBvPWk7by5sb29rU3BlZWQ9LjQsby5tb3ZlbWVudFNwZWVkPTIwLG8ubm9GbHk9ITAsby5sb29rVmVydGljYWw9ITAsby5jb25zdHJhaW5WZXJ0aWNhbD0hMCxvLnZlcnRpY2FsTWluPTEsby52ZXJ0aWNhbE1heD0yLG8uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX2NhbWVyYUNvbnRyb2xzPWksdGhpcy5fcmVuZGVyZXI9bmV3IHJuKHthbnRpYWxpYXM6ITB9KSx0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKChsPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpsLndpZHRoLChjPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpjLmhlaWdodCksdGhpcy5fcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigxNjc3NzIxNSwxKX1fY2xlYXJTY2VuZSgpe3ZhciB0O2lmKHRoaXMuX3NjZW5lKWZvcig7dGhpcy5fc2NlbmUuY2hpbGRyZW4ubGVuZ3RoPjA7KXRoaXMuX3NjZW5lLnJlbW92ZSgodD10aGlzLl9zY2VuZSk9PW51bGw/dm9pZCAwOnQuY2hpbGRyZW5bMF0pfWdldFJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyfWdldENhbWVyYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2NhbWVyYUNvbnRyb2xzfWlzUmVhZHkoKXtyZXR1cm4hIXRoaXMuX2NhbWVyYSYmISF0aGlzLl9jYW1lcmFDb250cm9sc31nZXRDYW1lcmFQb3NpdGlvbigpe3ZhciB0LHIsbjtyZXR1cm57ZmFyOih0PXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnQuZmFyLHBvc2l0aW9uOihyPXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnIucG9zaXRpb24uY2xvbmUoKSx0YXJnZXQ6KG49dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsP3ZvaWQgMDpuLnRhcmdldC5jbG9uZSgpfX1zZXRDYW52YXNTaXplKHQpe3RoaXMuX2NhbnZhc1NpemU9dH1kcmF3KCl7dmFyIHIsbixpLG87dGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCksdGhpcy5fY2FtZXJhJiYodGhpcy5fY2FtZXJhLmFzcGVjdD0oKHI9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOnIud2lkdGgpLygobj10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6bi5oZWlnaHQpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHRoaXMuX3JlbmRlcmVyLnNldFNpemUoKGk9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmkud2lkdGgsKG89dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOm8uaGVpZ2h0KTtsZXQgdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCk7dGhpcy5fY2FtZXJhQ29udHJvbHMudXBkYXRlKGEpLHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpLHRoaXMuX3JlbmRlcmVyLnJlbmRlcih0aGlzLl9zY2VuZSx0aGlzLl9jYW1lcmEpfS5iaW5kKHRoaXMpO3QoKX11cGRhdGVTY2VuZSh0LHIpe2xldCBuPXt9OyJjb25maWciaW4gdCYmdC5jb25maWcmJihuPUpTT04ucGFyc2UodC5jb25maWcpKSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImJlZm9yZVVwZGF0ZVNjZW5lIn0pO2xldCBpPXtjYW1lcmE6e2NsczoiUGVyc3BlY3RpdmVDYW1lcmEiLGZvdjo3NSxuZWFyOi4xLGZhcjoxZTN9LGxpZ2h0czpbe2NsczoiQW1iaWVudExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NX0se2NsczoiRGlyZWN0aW9uYWxMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzUscG9zaXRpb246WzAsLTEsMl19XX07bj10aGlzLl9hcHBseURlZmF1bHRzKG4saSksdGhpcy5fY3JlYXRlV29ybGQobixyKSx0aGlzLl9jbGVhclNjZW5lKCksdGhpcy5fY3JlYXRlTGlnaHRzKHRoaXMuX3NjZW5lLG4pLHRoaXMuX2NyZWF0ZUdlb21ldHJ5KHQsbiksdGhpcy5fY3JlYXRlTGF5ZXJzKCksdGhpcy5kcmF3KCl9cmVzZXRWaWV3KHQpe3ZhciBuLGk7aWYoIXRoaXMuaXNSZWFkeSgpKXJldHVybjsobj10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fG4ucmVzZXQoKTtsZXQgcjshdCYmdGhpcy5fbGFzdE1lc2gmJihyPXRoaXMuX2xhc3RNZXNoKSxyJiYodGhpcy5fZml0T2JqZWN0VG9WaWV3cG9ydChyKSx0aGlzLl9sYXN0TWVzaD1yKSwoaT10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fGkudXBkYXRlKCl9X2NyZWF0ZUdlb21ldHJ5KHQscil7bGV0IG49dC5tZXNoO24udmVydGljZXMmJm4uZmFjZXMmJm4uZmFjZXMubGVuZ3RoP3RoaXMuX2NyZWF0ZU1lc2gobixyKTp0aGlzLl9jcmVhdGVQb2ludENsb3VkKG4scil9X2NyZWF0ZVBvaW50Q2xvdWQodCxyKXt2YXIgaDtsZXQgbj10LnZlcnRpY2VzLGk9dC5jb2xvcnMsbz17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2kmJmkubGVuZ3RoPT1uLmxlbmd0aD9vLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMDpvLm1hdGVyaWFsLmNvbG9yPXRoaXMuX3J1bkNvbG9yO2xldCBhPXRoaXMuX2FwcGx5RGVmYXVsdHMocixvKSxzPW5ldyBQZSxsPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2lmKHMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKGwsMykpLGkmJmkubGVuZ3RoPT1uLmxlbmd0aCl7bGV0IGY9bmV3IEZsb2F0MzJBcnJheShpLmZsYXQoKSk7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspZltwXT1mW3BdLzI1NTtzLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKZShmLDMpKX12YXIgYz1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLHU9bmV3IGltKHMsYyk7KGg9dGhpcy5fc2NlbmUpPT1udWxsfHxoLmFkZCh1KSx0aGlzLl9sYXN0TWVzaD11fXNldENhbWVyYVZpZXdwb2ludCh0LHIsbil7dGhpcy5fc2lsZW50PSEwLHRoaXMuX2NhbWVyYSYmKHRoaXMuX2NhbWVyYS5mYXI9cix0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KHQueCx0LnksdC56KSx0aGlzLl9jYW1lcmEubG9va0F0KG4uY2xvbmUoKSksdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksdGhpcy5fY2FtZXJhQ29udHJvbHMmJih0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQ9bi5jbG9uZSgpLHRoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpKSx0aGlzLl9zaWxlbnQ9ITF9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UodCl7dGhpcy5fc2lsZW50fHx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixldmVudDp0fSl9X2ZpdE9iamVjdFRvVmlld3BvcnQodCl7dmFyIHAsZCxnO2xldCBuPW5ldyB0YSxpPW5ldyBqLG89bmV3IGo7bi5zZXRGcm9tT2JqZWN0KHQpLG4uZ2V0Q2VudGVyKGkpLG4uZ2V0U2l6ZShvKTtsZXQgYT1NYXRoLm1heChvLngsby55LG8ueikscz0oKHA9dGhpcy5fY2FtZXJhKT09bnVsbD92b2lkIDA6cC5mb3YpKihNYXRoLlBJLzE4MCksbD1NYXRoLmFicyhhLygyKk1hdGgudGFuKHMvMikpKSoxLjI1LGM9bi5taW4ueix1PWM8MD8tYytsOmwtYyxoPShkPXRoaXMuaW5pdENhbWVyYVBvc2l0aW9uKSE9bnVsbD9kOm5ldyBqKGkueCxpLnksbCksZj0oZz10aGlzLmluaXRDYW1lcmFMb29rQXQpIT1udWxsP2c6aTt0aGlzLnNldENhbWVyYVZpZXdwb2ludChoLHUqMyxmKX1fY3JlYXRlTWVzaCh0LHIpe3ZhciBmO2xldCBuPXQudmVydGljZXMsaT10LmZhY2VzLG89dC5jb2xvcnMsYT10aGlzLl9hcHBseURlZmF1bHRzKHIse21hdGVyaWFsOntjbHM6Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIixjb2xvcjoiI2EwYTBhMCIscm91Z2huZXNzOjEsbWV0YWxuZXNzOjB9fSkscz1uZXcgUGUsbD1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShsLDMpKTtsZXQgYz1uZXcgVWludDE2QXJyYXkoaS5mbGF0KCkpO2lmKG8mJm8ubGVuZ3RoKXtsZXQgcD1vLmZsYXQoKTtmb3IobGV0IGQ9MDtkPHAubGVuZ3RoO2QrKylwW2RdPXBbZF0vMjU1O3Muc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEplKG5ldyBGbG9hdDMyQXJyYXkocCksMykpLGEubWF0ZXJpYWw9YS5tYXRlcmlhbHx8e30sYS5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITB9cy5jZW50ZXIoKSxzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHMuc2V0SW5kZXgobmV3IEplKGMsMSkpLHMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtsZXQgdT1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLGg9bmV3IHRpKHMsdSk7aC5jYXN0U2hhZG93PSEwLGgucmVjZWl2ZVNoYWRvdz0hMCwoZj10aGlzLl9zY2VuZSk9PW51bGx8fGYuYWRkKGgpLHRoaXMuX2xhc3RNZXNoPWh9X2NyZWF0ZUxpZ2h0cyh0LHIpe2ZvcihsZXQgbj0wO248ci5saWdodHMubGVuZ3RoO24rKyl7bGV0IGk9ci5saWdodHNbbl0sbz1uZXcgd01baS5jbHNdKGkuY29sb3IsaS5pbnRlbnNpdHkpO2kucG9zaXRpb24mJm8ucG9zaXRpb24uc2V0KGkucG9zaXRpb25bMF0saS5wb3NpdGlvblsxXSxpLnBvc2l0aW9uWzJdKSx0LmFkZChvKX19fTt2YXIgTG49Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuYWN0aXZlPSExLHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITEsdGhpcy5fY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZD0hMSx0aGlzLl9pc01lc2hMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IElQKHRoaXMucmVxdWVzdE1hbmFnZXIpO2xldCB0PW5ldyBGNih0aGlzLl9ydW5Db2xvcik7dC5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVVcGRhdGVTY2VuZSIsdGhpcy5fdXBkYXRlQ2FudmFzU2l6ZS5iaW5kKHRoaXMpKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNhbWVyYVBvc2l0aW9uQ2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX21lc2hWaWV3ZXI9dH1yZWxvYWQoKXshdGhpcy5hY3RpdmV8fCF0aGlzLl9kYXRhUHJvdmlkZXJ8fCh0aGlzLl9pc01lc2hMb2FkaW5nPSEwLHRoaXMuX2RhdGFQcm92aWRlci5yZWxvYWQodGhpcy5ydW4sdGhpcy50YWcsdGhpcy5zYW1wbGUpLnRoZW4odD0+eyF0fHwodGhpcy5fc3RlcHM9dCx0aGlzLl9zdGVwSW5kZXg9dC5sZW5ndGgtMSl9KS5jYXRjaCh0PT57aWYoIXR8fCF0LmNvZGV8fHQuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHQ9dHx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHQpfSkpfV91cGRhdGVTY2VuZSgpe3ZhciByO2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwOyF0fHwhdC5tZXNofHwodGhpcy5fbWVzaFZpZXdlci51cGRhdGVTY2VuZSh0LHRoaXMpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWR8fCh0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITApLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZHx8KChyPXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHIuYXBwZW5kQ2hpbGQodGhpcy5fbWVzaFZpZXdlci5nZXRSZW5kZXJlcigpLmRvbUVsZW1lbnQpLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMCkpfV9kZWJvdW5jZWRGZXRjaE1lc2goKXt0aGlzLmRlYm91bmNlKCJmZXRjaE1lc2giLCgpPT50aGlzLl9tYXliZUZldGNoTWVzaCgpLDEwMCl9X21heWJlRmV0Y2hNZXNoKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDtpZighKCF0fHx0Lm1lc2h8fHQubWVzaEZldGNoaW5nKSl7dC5tZXNoRmV0Y2hpbmc9ITAsdGhpcy5faXNNZXNoTG9hZGluZz0hMDt0cnl7bGV0IHI9eWllbGQgdGhpcy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YSh0LHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKTt0Lm1lc2g9clswXSx0aGlzLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2gocil7aWYoIXJ8fCFyLmNvZGV8fHIuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHI9cnx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHIpfWZpbmFsbHl7dGhpcy5faXNNZXNoTG9hZGluZz0hMSx0Lm1lc2hGZXRjaGluZz0hMX19fSl9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UoKXtpZighdGhpcy5fbWVzaFZpZXdlci5pc1JlYWR5KCkpcmV0dXJuO2xldCB0PW5ldyBDdXN0b21FdmVudCgiY2FtZXJhLXBvc2l0aW9uLWNoYW5nZSIse2RldGFpbDp0aGlzLl9tZXNoVmlld2VyLmdldENhbWVyYVBvc2l0aW9uKCl9KTt0aGlzLmRpc3BhdGNoRXZlbnQodCl9c2V0Q2FtZXJhVmlld3BvaW50KHQscixuKXt0aGlzLl9tZXNoVmlld2VyLnNldENhbWVyYVZpZXdwb2ludCh0LHIsbil9X3VwZGF0ZUNhbnZhc1NpemUoKXtsZXQgdD10aGlzLm9mZnNldFdpZHRoLHI9dCxuPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQsaT17d2lkdGg6dCxoZWlnaHQ6ci1ufTt0aGlzLl9tZXNoVmlld2VyLnNldENhbnZhc1NpemUoaSl9cmVkcmF3KCl7dGhpcy5fdXBkYXRlQ2FudmFzU2l6ZSgpLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuX21lc2hWaWV3ZXIuZHJhdygpfV9oYXNBdExlYXN0T25lU3RlcCh0KXtyZXR1cm4hIXQmJnQubGVuZ3RoPjB9X2hhc011bHRpcGxlU3RlcHModCl7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7bGV0IHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/czIodC53YWxsX3RpbWUpOiIifV9nZXRNYXhTdGVwSW5kZXgodCl7cmV0dXJuIHQubGVuZ3RoLTF9X2dldFNhbXBsZVRleHQodCl7cmV0dXJuIFN0cmluZyh0KzEpfV9oYXNNdWx0aXBsZVNhbXBsZXModCl7cmV0dXJuIHQ+MX1fdXBkYXRlVmlldygpe3ZhciB0PXRoaXMuc2VsZWN0ZWRWaWV3O3RoaXMuX21lc2hWaWV3ZXImJnQ9PSJhbGwiJiZ0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpfXRvTG9jYWxlU3RyaW5nXyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07TG4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc01lc2hMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHMoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwic2VsZWN0ZWRWaWV3Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxMbi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEY2KV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixJUCldLExuLnByb3RvdHlwZSwiX2RhdGFQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMbi5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxMbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTG4ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlckF0dGFjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExuLnByb3RvdHlwZSwiX2lzTWVzaExvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLExuLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiwiYWN0aXZlIiwiX2RhdGFQcm92aWRlciIsIl9tZXNoVmlld2VyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCk7RShbQnQoIl9jdXJyZW50U3RlcC4qIiwiX21lc2hWaWV3ZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVNjZW5lIixudWxsKTtFKFtCdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsIl9kZWJvdW5jZWRGZXRjaE1lc2giLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTG4ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW0J0KCJzZWxlY3RlZFZpZXciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVZpZXciLG51bGwpO0xuPUUoW3l0KCJ0Zi1tZXNoLWxvYWRlciIpXSxMbik7dmFyIHBoPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9Ii4qIix0aGlzLl9zZWxlY3RlZFZpZXc9ImFsbCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCl9LCExKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9X2dldEFsbENoaWxkcmVuKCl7dmFyIHQ7cmV0dXJuIEFycmF5LmZyb20oKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1tZXNoLWxvYWRlciIpKX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZWQodCl7dGhpcy5fc2VsZWN0ZWRWaWV3PT0ic2hhcmUiJiZ0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2gocj0+e3QudGFyZ2V0IT1yJiZyLnNldENhbWVyYVZpZXdwb2ludCh0LmRldGFpbC5wb3NpdGlvbix0LmRldGFpbC5mYXIsdC5kZXRhaWwudGFyZ2V0KX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4odGhpcy5fcmVsb2FkTWVzaGVzLmJpbmQodGhpcykpfV9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2godD0+e3QucmVkcmF3KCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoc3guaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPXN4Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuX2RhdGFOb3RGb3VuZD1pLmxlbmd0aD09PTAsdGhpcy5fcnVuVG9UYWdJbmZvPXJ9KX1fcmVsb2FkTWVzaGVzKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHQ9Pnt0LnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPXN4Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBzeC5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSxvZlNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfX07cGgudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9InNpZGViYXIiIGNsYXNzPSJhbGwtY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiB2aWV3LWNvbnRyb2wiPgogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Qb2ludCBvZiB2aWV3PC9oMz4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgIGlkPSJ2aWV3LXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVmlld319IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImFsbC1yYWRpby1idXR0b24iIG5hbWU9ImFsbCI+CiAgICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHBvaW50cwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0iYWxsLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFpvb20gYW5kIGNlbnRlciBjYW1lcmEgdG8gZGlzcGxheSBhbGwgcG9pbnRzIGF0IG9uY2UuIE5vdGUsCiAgICAgICAgICAgICAgICAgIHRoYXQgc29tZSBwb2ludHMgY291bGQgYmUgdG9vIGZhciAoaS5lLiB0b28gc21hbGwpIHRvIGJlCiAgICAgICAgICAgICAgICAgIHZpc2libGUuCiAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJ1c2VyLXJhZGlvLWJ1dHRvbiIgbmFtZT0idXNlciI+CiAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmlldwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0idXNlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgY2FtZXJhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ic2hhcmUtcmFkaW8tYnV0dG9uIiBuYW1lPSJzaGFyZSI+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludAogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0ic2hhcmUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgU2hhcmUgdmlld3BvaW50IGFtb25nIGFsbCBjYW1lcmFzLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHBvaW50IGNsb3VkIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHBvaW50IGNsb3VkIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1tZXNoLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLXZpZXc9IltbX3NlbGVjdGVkVmlld11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgY2xhc3M9InRmLW1lc2gtbG9hZGVyLWNvbnRhaW5lciIKICAgICAgICAgICAgICAgICAgb24tY2FtZXJhLXBvc2l0aW9uLWNoYW5nZT0iX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1tZXNoLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIGgzLnRpdGxlIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC52aWV3LWNvbnRyb2wgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgICAvKiBMYXlvdXQgbXVzdCBiZSBob3Jpem9udGFsLCBpLmUuIGl0ZW1zIGFycmFuZ2VkIGluIGEgcm93LiBJZiBpdGVtcyBjYW5ub3QgZml0IGluIGEgcm93LAogICAgICAgKiB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBuZXh0IGxpbmUuIEFsbCBpdGVtcyBtdXN0IGJlIHNxdWFyZSBhdCBhbGwgdGltZXMuIE1pbmltdW0gc2l6ZSBvZgogICAgICAgKiB0aGUgaXRlbSBpcyA0ODBweC4gVGhpcyBtZWFucyB0aGF0IG1heGltdW0gc2l6ZSBvZiB0aGUgaXRlbSBtdXN0IGJlIDQ4MHB4ICsgNDc5cHggPSA5NTlweC4KICAgICAgICogKi8KICAgICAgLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgdGYtbWVzaC1sb2FkZXIgewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBmbGV4LWJhc2lzOiA0ODBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scGgucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHBoLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwaC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHBoLnByb3RvdHlwZSwiX3NlbGVjdGVkVmlldyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwaC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtwaD1FKFt5dCgibWVzaC1kYXNoYm9hcmQiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaCk7dmFyIFFVPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pbnN0YWxsQ29tbWFuZD0icGlwIGluc3RhbGwgLVUgdGVuc29yYm9hcmQtcGx1Z2luLXByb2ZpbGUifV9jb3B5SW5zdGFsbENvbW1hbmQoKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCB0PSgpPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dGhpcy4kLmNvbW1hbmRUZXh0YXJlYS5zZWxlY3QoKTt0cnl7eWllbGQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5faW5zdGFsbENvbW1hbmQpfWNhdGNoKGkpe2lmKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKXJldHVybiBQcm9taXNlLnJlamVjdCgpfX0pLHI9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dHJ5e3lpZWxkIHQoKSxyLmlubmVyVGV4dD0iQ29waWVkLiJ9Y2F0Y2gobil7ci5pbm5lclRleHQ9IkZhaWxlZCB0byBjb3B5IHRvIGNsaXBib2FyZC4ifX0pfV9yZW1vdmVDb3BpZWRNZXNzYWdlKCl7bGV0IHQ9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dC5pbm5lclRleHQ9IiJ9fTtRVS50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgcHJvZmlsZSBwbHVnaW4gaGFzIG1vdmVkLjwvaDM+CiAgICAgIDxwPgogICAgICAgIFBsZWFzZSBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSBwbHVnaW4gZnJvbSBQeVBJIGJ5CiAgICAgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgbWFjaGluZSBydW5uaW5nIFRlbnNvckJvYXJkOgogICAgICA8L3A+CiAgICAgIDx0ZXh0YXJlYQogICAgICAgIGlkPSJjb21tYW5kVGV4dGFyZWEiCiAgICAgICAgcmVhZG9ubHk9IiIKICAgICAgICByb3dzPSIxIgogICAgICAgIG9uLWJsdXI9Il9yZW1vdmVDb3BpZWRNZXNzYWdlIgogICAgICA+CltbX2luc3RhbGxDb21tYW5kXV08L3RleHRhcmVhCiAgICAgID4KICAgICAgPGRpdiBpZD0iY29weUNvbnRhaW5lciI+CiAgICAgICAgPHNwYW4gaWQ9ImNvcGllZE1lc3NhZ2UiPjwvc3Bhbj4KICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZD0iIiBvbi10YXA9Il9jb3B5SW5zdGFsbENvbW1hbmQiCiAgICAgICAgICA+Q29weSB0byBjbGlwYm9hcmQ8L3BhcGVyLWJ1dHRvbgogICAgICAgID4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgIH0KICAgICAgI2NvbW1hbmRUZXh0YXJlYSB7CiAgICAgICAgbWFyZ2luLXRvcDogMWV4OwogICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjY29weUNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAjY29waWVkTWVzc2FnZSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUVUucHJvdG90eXBlLCJfaW5zdGFsbENvbW1hbmQiLHZvaWQgMCk7UVU9RShbeXQoInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIildLFFVKTt2YXIgbG09RWUoT2UoKSwxKTt2YXIgemw9RWUoT2UoKSwxKSx0cT1FZSh3bCgpLDEpO3ZhciBubj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5PXt9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj17c2NhbGU6Zm59LHRoaXMuX2NhbmNlbGxlcj1uZXcgYW4sdGhpcy5feENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD0oKT0+e2xldCB0PW5ldyB0cS5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IHRxLkF4ZXMuTnVtZXJpYyh0LCJib3R0b20iKSxhY2Nlc3NvcjpyPT5yLnJlY2FsbH19LHRoaXMuX3lWYWx1ZUFjY2Vzc29yPXQ9PnQucHJlY2lzaW9uLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTpuPT5uLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOm49Pm4uZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOm49Pm4uZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19KSgpLHRoaXMuX3Nlcmllc0RhdGFGaWVsZHM9WyJ0aHJlc2hvbGRzIiwicHJlY2lzaW9uIiwicmVjYWxsIiwidHJ1ZV9wb3NpdGl2ZXMiLCJmYWxzZV9wb3NpdGl2ZXMiLCJ0cnVlX25lZ2F0aXZlcyIsImZhbHNlX25lZ2F0aXZlcyJdLHRoaXMuX2RlZmF1bHRYUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fZGVmYXVsdFlSYW5nZT1bLS4wNSwxLjA1XSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgicHJfY3VydmVzIiwiL3ByX2N1cnZlcyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy50YWcsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9zbW9vdGhpbmdFbmFibGVkPSExfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUsbikpfX1fY29tcHV0ZVJ1bkNvbG9yKHQpe3JldHVybiBmbih0KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYXR0YWNoZWQ9ITAsdGhpcy5yZWxvYWQoKX1fZ2V0Q2hhcnREYXRhTG9hZGVyKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIil9cmVsb2FkKCl7aWYoISF0aGlzLl9hdHRhY2hlZCl7aWYodGhpcy5ydW5zLmxlbmd0aD09PTApe3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLHt9KTtyZXR1cm59dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVsb2FkKCl9fV9zZXRDaGFydERhdGEoKXt2YXIgdD10aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSxyPXRoaXMuX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnksbj10aGlzLl9zZXRPZlJlbGV2YW50UnVuczt6bC5mb3JPd24odCwoaSxvKT0+e2xldCBhPXJbb107aWYoIShhJiZ0W29dLnN0ZXA9PT1hLnN0ZXApKXtpZighbltvXSl7dGhpcy5fY2xlYXJTZXJpZXNEYXRhKG8pO3JldHVybn10aGlzLl91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKG8saSl9fSl9X3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4odCxyKXtsZXQgbj16bC5yZWR1Y2UodGhpcy5fc2VyaWVzRGF0YUZpZWxkcywoYSxzKT0+KGFbc109cltzXS5zbGljZSgpLnJldmVyc2UoKSxhKSx7fSksaT1uZXcgQXJyYXkoblt0aGlzLl9zZXJpZXNEYXRhRmllbGRzWzBdXS5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKWlbYV09emwubWFwVmFsdWVzKG4scz0+c1thXSk7bGV0IG89dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7by5zZXRTZXJpZXNEYXRhKHQsaSksby5jb21taXRDaGFuZ2VzKCl9X2NsZWFyU2VyaWVzRGF0YSh0KXtsZXQgcj10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTtyLnNldFNlcmllc0RhdGEodCxbXSksci5jb21taXRDaGFuZ2VzKCl9X3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5KCl7dmFyIHQ9dGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUscj10aGlzLnJ1blRvU3RlcENhcDtsZXQgbj17fTt6bC5mb3JPd24odCwoaSxvKT0+eyFpfHwhaS5sZW5ndGh8fChuW29dPXRoaXMuX2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHJbb10saSkpfSksdGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSksdGhpcy5zZXQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsbil9X25vdGlmeURhdGFDaGFuZ2UoKXt2YXIgdD10aGlzLl9ydW5Ub0RhdGFPdmVyVGltZTt0aGlzLm9uRGF0YUNoYW5nZSYmdGhpcy5vbkRhdGFDaGFuZ2UodCl9X2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHQscil7bGV0IG49TWF0aC5taW4oemwuc29ydGVkSW5kZXgoci5tYXAoaT0+aS5zdGVwKSx0KSxyLmxlbmd0aC0xKTtyZXR1cm4gcltuXX1nZXQgX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSgpe3ZhciB0PXRoaXMucnVucyxyPXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5O3JldHVybiB6bC5maWx0ZXIodCxuPT5yW25dKS5zb3J0KCl9Z2V0IF9zZXRPZlJlbGV2YW50UnVucygpe3ZhciB0PXRoaXMuX3J1bnNXaXRoU3RlcEF2YWlsYWJsZTtsZXQgcj17fTtyZXR1cm4gemwuZm9yRWFjaCh0LG49PntyW25dPSEwfSkscn1fY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKHQscil7bGV0IG49dFtyXTtyZXR1cm4gbj9uLnN0ZXA6bnVsbH1fY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bih0LHIpe2xldCBuPXRbcl07cmV0dXJuIG4/bmV3IERhdGUobi53YWxsX3RpbWUqMWUzKS50b1N0cmluZygpOm51bGx9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fcmVzZXREb21haW4oKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZXNldERvbWFpbigpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfX07bm4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICB4LWNvbXBvbmVudHMtY3JlYXRpb24tbWV0aG9kPSJbW194Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iCiAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbX3lWYWx1ZUFjY2Vzc29yXV0iCiAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVGdW5jdGlvbl1dIgogICAgICBkZWZhdWx0LXgtcmFuZ2U9IltbX2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgZGVmYXVsdC15LXJhbmdlPSJbW19kZWZhdWx0WVJhbmdlXV0iCiAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICBkYXRhLXNlcmllcz0iW1tydW5zXV0iCiAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iCiAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgID48L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CgogICAgPGRpdiBpZD0iYnV0dG9ucy1yb3ciPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJSZXNldCBheGVzIHRvIFswLCAxXS4iCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ic3RlcC1sZWdlbmQiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFN0ZXBBdmFpbGFibGVdXSIgYXM9InJ1biI+CiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJjb2xvci1ib3giCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiBbW19jb21wdXRlUnVuQ29sb3IocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIFtbcnVuXV0gaXMgYXQKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWxhYmVsLXRleHQiPgogICAgICAgICAgICBzdGVwIFtbX2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSA8L3NwYW4KICAgICAgICAgID48YnIgLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3YWxsLXRpbWUtbGFiZWwtdGV4dCI+CiAgICAgICAgICAgIChbW19jb21wdXRlQ3VycmVudFdhbGxUaW1lRm9yUnVuKF9ydW5Ub1ByQ3VydmVFbnRyeSwgcnVuKV1dKQogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KICAgICAgI3N0ZXAtbGVnZW5kIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5sZWdlbmQtcm93IHsKICAgICAgICBtYXJnaW46IDVweCAwIDVweCAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5jb2xvci1ib3ggewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICB9CiAgICAgIC5zdGVwLWxhYmVsLXRleHQgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC53YWxsLXRpbWUtbGFiZWwtdGV4dCB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbm4ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsInJ1blRvU3RlcENhcCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLG5uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9ydW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX3J1blRvRGF0YU92ZXJUaW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbm4ucHJvdG90eXBlLCJvbkRhdGFDaGFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfY29sb3JTY2FsZUZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sbm4ucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl95VmFsdWVBY2Nlc3NvciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbm4ucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFGaWVsZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRYUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxubi5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG5uLnByb3RvdHlwZSwiX3Ntb290aGluZ0VuYWJsZWQiLHZvaWQgMCk7RShbQnQoInJ1bnMiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwicmVsb2FkIixudWxsKTtFKFtCdCgiX3J1blRvUHJDdXJ2ZUVudHJ5IiwiX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnkiLCJfc2V0T2ZSZWxldmFudFJ1bnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX3NldENoYXJ0RGF0YSIsbnVsbCk7RShbQnQoIl9ydW5Ub0RhdGFPdmVyVGltZSIsInJ1blRvU3RlcENhcCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sbm4ucHJvdG90eXBlLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkiLG51bGwpO0UoW0J0KCJfcnVuVG9EYXRhT3ZlclRpbWUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX25vdGlmeURhdGFDaGFuZ2UiLG51bGwpO0UoW1J0KCJydW5zIiwiX3J1blRvUHJDdXJ2ZUVudHJ5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxubi5wcm90b3R5cGUsIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiLG51bGwpO0UoW1J0KCJfcnVuc1dpdGhTdGVwQXZhaWxhYmxlIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbm4ucHJvdG90eXBlLCJfc2V0T2ZSZWxldmFudFJ1bnMiLG51bGwpO25uPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1jYXJkIildLG5uKTt2YXIgU009RWUoT2UoKSwxKTt2YXIgZXA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcnVuVG9TdGVwSW5kZXg9e319X2NvbXB1dGVDb2xvckZvclJ1bih0KXtyZXR1cm4gZm4odCl9X2NvbXB1dGVUaW1lVGV4dEZvclJ1bih0LHIsbixpKXtsZXQgbz1yW25dO2lmKCFTTS5pc051bWJlcihvKSlyZXR1cm4iIjtsZXQgYT10W25dO2lmKCFhKXJldHVybiIiO2xldCBzPWFbb11baV07aWYoaT09PSJzdGVwIilyZXR1cm5gc3RlcCAke3N9YDtpZihpPT09InJlbGF0aXZlIilyZXR1cm4gczwxP2AkeyhzKjFlMykudG9GaXhlZCgyKX0gbXNgOmAke3MudG9GaXhlZCgyKX0gc2A7aWYoaT09PSJ3YWxsX3RpbWUiKXJldHVybiBuZXcgRGF0ZShzKjFlMykudG9TdHJpbmcoKTt0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtpfSBpcyBub3QgcmVjb2duaXplZC5gKX1fc2xpZGVyVmFsdWVDaGFuZ2VkKHQpe2xldCByPXQudGFyZ2V0LmRhdGFzZXQucnVuLG49dC50YXJnZXQuaW1tZWRpYXRlVmFsdWUsaT1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtpc05hTihuKT9kZWxldGUgaVtyXTppW3JdPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLHRoaXMuX3J1blRvU3RlcEluZGV4PWl9X2NvbXB1dGVNYXhTdGVwSW5kZXhGb3JSdW4odCxyKXtsZXQgbj10W3JdO3JldHVybiBuJiZuLmxlbmd0aD9uLmxlbmd0aC0xOjB9X3VwZGF0ZVN0ZXBzRm9yTmV3UnVucygpe3ZhciB0PXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztsZXQgcj1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtTTS5mb3JPd24odCwobixpKT0+e1NNLmlzTnVtYmVyKHJbaV0pfHwocltpXT1uLmxlbmd0aC0xKX0pLHRoaXMuX3J1blRvU3RlcEluZGV4PXJ9X2dldFN0ZXAodCxyKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbcl06MH1fY29tcHV0ZVJ1blRvU3RlcCh0LHIpe2xldCBuPXt9O3JldHVybiBTTS5mb3JPd24ociwoaSxvKT0+e2xldCBhPXRbb107IWF8fChuW29dPWFbaV0uc3RlcCl9KSxufWdldCBfcnVuc1dpdGhTbGlkZXJzKCl7dmFyIHQ9dGhpcy5ydW5zLHI9dGhpcy5ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzO3JldHVybiB0LmZpbHRlcihuPT5yW25dKX19O2VwLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFNsaWRlcnNdXSIgYXM9InJ1biI+CiAgICAgIDxkaXYgY2xhc3M9InJ1bi13aWRnZXQiPgogICAgICAgIDxkaXYgY2xhc3M9InJ1bi1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJydW4tY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW19jb21wdXRlQ29sb3JGb3JSdW4ocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij5bW3J1bl1dPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBkYXRhLXJ1biQ9IltbcnVuXV0iCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgbWluPSIwIgogICAgICAgICAgbWF4PSJbW19jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIHJ1bildXSIKICAgICAgICAgIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIgogICAgICAgICAgb24taW1tZWRpYXRlLXZhbHVlLWNoYW5nZWQ9Il9zbGlkZXJWYWx1ZUNoYW5nZWQiCiAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ydW4td2lkZ2V0IHsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICBtYXJnaW46IC04cHggMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwLWRpc3BsYXktY29udGFpbmVyIHsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDAgMDsKICAgICAgfQogICAgICAucnVuLXRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAucnVuLWNvbG9yLWJveCB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZXAucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGVwLnByb3RvdHlwZSwidGltZURpc3BsYXlUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwiX3J1blRvU3RlcEluZGV4Iix2b2lkIDApO0UoW0J0KCJydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxlcC5wcm90b3R5cGUsIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMiLG51bGwpO0UoW1J0KCJydW5zIiwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZXAucHJvdG90eXBlLCJfcnVuc1dpdGhTbGlkZXJzIixudWxsKTtlcD1FKFt5dCgidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiKV0sZXApO3ZhciBrbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3RpbWVEaXNwbGF5VHlwZT0ic3RlcCIsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3J1blRvVGFnSW5mbz17fSx0aGlzLl90YWdUb1J1blRvRGF0YT17fSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX3N0ZXA9MH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe1Byb21pc2UuYWxsKFt0aGlzLl9mZXRjaFRhZ3MoKV0pLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRDYXJkcygpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYobG0uaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPWxtLm1hcFZhbHVlcyhyLG89PmxtLmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkQ2FyZHMoKXt2YXIgdDtsbS5mb3JFYWNoKCh0PXRoaXMucm9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvckFsbCgidGYtcHItY3VydmUtY2FyZCIpLHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWxtLm1hcFZhbHVlcyh0LG89Pk9iamVjdC5rZXlzKG8pKTtyZXR1cm4gaEUoaSxyLG4pfWdldCBfcmVsZXZhbnRTZWxlY3RlZFJ1bnMoKXt2YXIgdD10aGlzLl9zZWxlY3RlZFJ1bnMscj10aGlzLl9ydW5Ub1RhZ0luZm87cmV0dXJuIHQuZmlsdGVyKG49PnJbbl0pfV90YWdNZXRhZGF0YSh0LHIsbil7bGV0IGk9e307ci5mb3JFYWNoKGE9PntpW2FdPXRbYV1bbl19KTtsZXQgbz1uLnJlcGxhY2UoL1wvcHJfY3VydmVzJC8sIiIpO3JldHVybiBvUihpLG8pfV9jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2sodCl7cmV0dXJuIHI9Pnt0aGlzLnNldCgiX3RhZ1RvUnVuVG9EYXRhIixNeChLbCh7fSx0aGlzLl90YWdUb1J1blRvRGF0YSkse1t0XTpyfSkpfX1nZXQgX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMoKXt2YXIgdD10aGlzLl90YWdUb1J1blRvRGF0YTtsZXQgcj17fTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyh0KSlmb3IobGV0W2Fdb2YgT2JqZWN0LmVudHJpZXMobykpKHJbYV09PW51bGx8fGk8clthXSkmJihyW2FdPWkpO2xldCBuPXt9O2ZvcihsZXRbaSxvXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgYT10W29dW2ldO25baV09YS5tYXAocz0+KHtzdGVwOnMuc3RlcCx3YWxsX3RpbWU6cy53YWxsX3RpbWUscmVsYXRpdmU6cy53YWxsX3RpbWUtYVswXS53YWxsX3RpbWV9KSl9cmV0dXJuIG59fTtrby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0idGltZS10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9IlRpbWUgRGlzcGxheSBUeXBlIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lRGlzcGxheVR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgLS0+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiIgaWQ9InN0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yCiAgICAgICAgICAgICAgICBydW5zPSJbW19yZWxldmFudFNlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgcnVuLXRvLXN0ZXA9Int7X3J1blRvU3RlcH19IgogICAgICAgICAgICAgICAgcnVuLXRvLWF2YWlsYWJsZS10aW1lLWVudHJpZXM9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSIKICAgICAgICAgICAgICAgIHRpbWUtZGlzcGxheS10eXBlPSJbW190aW1lRGlzcGxheVR5cGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3Rvcj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwcmVjaXNpb27igJNyZWNhbGwgY3VydmUgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgcHJlY2lzaW9u4oCTcmVjYWxsIGRhdGEgdG8geW91ciBldmVudAogICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLWNhcmQKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW5zPSJbW2l0ZW0ucnVuc11dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1bnMsIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwLWNhcD0iW1tfcnVuVG9TdGVwXV0iCiAgICAgICAgICAgICAgICAgIG9uLWRhdGEtY2hhbmdlPSJbW19jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2soaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1wci1jdXJ2ZS1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAvKiogRG8gbm90IGxldCB0aGUgc3RlcHMgc2VsZWN0b3Igb2NjbHVkZSB0aGUgcnVuIHNlbGVjdG9yLiAqLwogICAgICAjc3RlcHMtc2VsZWN0b3ItY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA2MCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sa28ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGtvLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl90YWdUb1J1blRvRGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfcnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxrby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sa28ucHJvdG90eXBlLCJfc3RlcCIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa28ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7RShbUnQoIl9zZWxlY3RlZFJ1bnMiLCJfcnVuVG9UYWdJbmZvIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrby5wcm90b3R5cGUsIl9yZWxldmFudFNlbGVjdGVkUnVucyIsbnVsbCk7RShbUnQoIl90YWdUb1J1blRvRGF0YSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtvLnByb3RvdHlwZSwiX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLG51bGwpO2tvPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQiKV0sa28pO3ZhciBCNj1FZShPZSgpLDEpO3ZhciB1bz1jbGFzcyBleHRlbmRzIEd0KG5iKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3RhZ0ZpbHRlcj0iIix0aGlzLl9jYXRlZ29yaWVzPVtdLHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoNTApLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfWdldCBfc21vb3RoaW5nRW5hYmxlZCgpe3ZhciB0PXRoaXMuX3Ntb290aGluZ1dlaWdodDtyZXR1cm4gdD4wfV9nZXRDYXRlZ29yeUtleSh0KXtyZXR1cm4gdC5tZXRhZGF0YS50eXBlPT1OYS5TRUFSQ0hfUkVTVUxUUz8iIjp0Lm5hbWV9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2hhcnRzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoQjYuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPUI2Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZENoYXJ0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3VwZGF0ZUNhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7bGV0IGksbz1uLGE9QjYubWFwVmFsdWVzKHQscz0+T2JqZWN0LmtleXMocykpO2k9aEUoYSxyLG8pLGkuZm9yRWFjaChzPT57cy5pdGVtcz1zLml0ZW1zLm1hcChsPT4oe3RhZzpsLnRhZyxzZXJpZXM6bC5ydW5zLm1hcChjPT4oe3J1bjpjLHRhZzpsLnRhZ30pKX0pKX0pLHRoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsaSx0aGlzLl9nZXRDYXRlZ29yeUtleSl9X3RhZ01ldGFkYXRhKHQscixuKXtsZXQgaT10Lm5hbWUsbz1uLnRhZyxhPXt9O24uc2VyaWVzLmZvckVhY2goKHtydW46dX0pPT57YVt1XT1yW3VdW29dfSk7bGV0IHM9by5yZXBsYWNlKC9cL3NjYWxhcl9zdW1tYXJ5JC8sIiIpLHtkZXNjcmlwdGlvbjpsLGRpc3BsYXlOYW1lOmN9PW9SKGEscyk7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09TmEuUFJFRklYX0dST1VQJiZjLnN0YXJ0c1dpdGgoaSsiLyIpJiYoYz1jLnNsaWNlKGkubGVuZ3RoKzEpKSx7ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTpjfX19O3VvLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJzaG93LWRvd25sb2FkLWxpbmtzIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfc2hvd0Rvd25sb2FkTGlua3N9fSIKICAgICAgICAgICAgICAgID5TaG93IGRhdGEgZG93bmxvYWQgbGlua3M8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJpZ25vcmUteS1vdXRsaWVyIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfaWdub3JlWU91dGxpZXJzfX0iCiAgICAgICAgICAgICAgICA+SWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmc8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nIj4KICAgICAgICAgICAgICA8ZGl2PlRvb2x0aXAgc29ydGluZyBtZXRob2Q6PC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e190b29sdGlwU29ydGluZ01ldGhvZH19IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0iMCIKICAgICAgICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVmYXVsdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+YXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5uZWFyZXN0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1zbW9vdGhpbmctaW5wdXQKICAgICAgICAgICAgICB3ZWlnaHQ9Int7X3Ntb290aGluZ1dlaWdodH19IgogICAgICAgICAgICAgIHN0ZXA9IjAuMDAxIgogICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICBtYXg9IjAuOTk5IgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHNjYWxhciBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXNjYWxhci1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgZGF0YS10by1sb2FkPSJbW2l0ZW0uc2VyaWVzXV0iCiAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX2dldE11bHRpRXhwZXJpbWVudHMoZGF0YVNlbGVjdGlvbildXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW19zbW9vdGhpbmdXZWlnaHRdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShjYXRlZ29yeSwgX3J1blRvVGFnSW5mbywgaXRlbSldXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbX3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgYmF0Y2gtc2l6ZT0iW1tmZWF0dXJlRmxhZ3Muc2NhbGFyc0JhdGNoU2l6ZV1dIgogICAgICAgICAgICAgICAgICBpbi1jb2xhYj0iW1tmZWF0dXJlRmxhZ3MuaW5Db2xhYl1dIgogICAgICAgICAgICAgICAgPjwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KCiAgICAgIC5saW5lLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgLmNlbnRlciB7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJmZWF0dXJlRmxhZ3MiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsIl9zaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdW8ucHJvdG90eXBlLCJfc21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1by5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdW8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx1by5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx1by5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx1by5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtCdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdW8ucHJvdG90eXBlLCJfdXBkYXRlQ2F0ZWdvcmllcyIsbnVsbCk7dW89RShbeXQoInRmLXNjYWxhci1kYXNoYm9hcmQiKV0sdW8pO3ZhciBjcGU9RWUoT2UoKSwxKTt2YXIgZGg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RleHRzPVtdLHRoaXMuX2NhbmNlbGxlcj1uZXcgYW59Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1fY2hhbmdlUnVuQ29sb3IoKXt2YXIgdD10aGlzLl9ydW5Db2xvcjt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGItdGV4dC1sb2FkZXItb3V0bGluZSI6dH0pfWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9X2UoKSxyPU1pKHQucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLG1hcmtkb3duOnRoaXMubWFya2Rvd25FbmFibGVkPyJ0cnVlIjoiZmFsc2UifSksbj10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgbz1pLnZhbHVlLm1hcChhPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShhLndhbGxfdGltZSoxZTMpLHN0ZXA6YS5zdGVwLHRleHQ6YS50ZXh0fSkpO3RoaXMuc2V0KCJfdGV4dHMiLG8uc2xpY2UoKS5yZXZlcnNlKCkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2Zvcm1hdFN0ZXAodCl7cmV0dXJuIHhuKCIsIikodCl9fTtkaC50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZyBydW49IltbcnVuXV0iIHRhZz0iW1t0YWddXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8cGFwZXItbWF0ZXJpYWwKICAgICAgZWxldmF0aW9uPSIxIgogICAgICBpZD0ic3RlcHMtY29udGFpbmVyIgogICAgICBjbGFzcz0iY29udGFpbmVyIHNjcm9sbGJhciIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfdGV4dHNdXSI+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InN0ZXAtY29udGFpbmVyIj4KICAgICAgICAgIHN0ZXAgPHNwYW4gY2xhc3M9InN0ZXAtdmFsdWUiPltbX2Zvcm1hdFN0ZXAoaXRlbS5zdGVwKV1dPC9zcGFuPgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InRleHQiPgogICAgICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tpdGVtLnRleHRdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgLnNjcm9sbGJhciB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAjc3RlcHMtY29udGFpbmVyIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgLyogY29sb3IgY29tcHV0ZWQgYW5kIHNldCBhcyBpbmxpbmUgc3R5bGUgKi87CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXRiLXRleHQtbG9hZGVyLW91dGxpbmUpOwogICAgICB9CiAgICAgIC50ZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAzcHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnN0ZXAtY29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyKTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsgLyogdG8gY29ycmVjdCBmb3IgYm9yZGVyICovCiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lcjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkaC5wcm90b3R5cGUsIm1hcmtkb3duRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZGgucHJvdG90eXBlLCJfdGV4dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxkaC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sZGgucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkaC5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbQnQoIl9ydW5Db2xvciIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZGgucHJvdG90eXBlLCJfY2hhbmdlUnVuQ29sb3IiLG51bGwpO2RoPUUoW3l0KCJ0Zi10ZXh0LWxvYWRlciIpXSxkaCk7dmFyIFFjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fbWFya2Rvd25FbmFibGVkPXZwKCJfbWFya2Rvd25FbmFibGVkIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX21hcmtkb3duRW5hYmxlZFN0b3JhZ2VPYnNlcnZlcj14cCgiX21hcmtkb3duRW5hYmxlZCIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX21hcmtkb3duRW5hYmxlZE9ic2VydmVyKF9tYXJrZG93bkVuYWJsZWQpIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkVGV4dHMoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihjcGUuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnKSlyZXR1cm47bGV0IG49JGkocik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLG4ubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsciksdGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX0pfV9yZWxvYWRUZXh0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtdGV4dC1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWcscj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7cmV0dXJuIFFsKHQscixuKX1fbWFya2Rvd25FbmFibGVkT2JzZXJ2ZXIoKXt0aGlzLl9yZWxvYWRUZXh0cygpfX07UWMudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X21hcmtkb3duRW5hYmxlZH19IgogICAgICAgICAgICAgID5FbmFibGUgTWFya2Rvd248L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyB0ZXh0IGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSB0ZXh0IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi10ZXh0LWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBtYXJrZG93bi1lbmFibGVkPSJbW19tYXJrZG93bkVuYWJsZWRdXSIKICAgICAgICAgICAgICAgID48L3RmLXRleHQtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfbWFya2Rvd25FbmFibGVkU3RvcmFnZU9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfbWFya2Rvd25FbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRYy5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUWMucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRYy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUWMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFjLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFFjLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1FjPUUoW3l0KCJ0Zi10ZXh0LWRhc2hib2FyZCIpXSxRYyk7dmFyIFZodD1jbGFzcyBleHRlbmRzIEd0KG10KXt9O1ZodC50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgV2hhdC1JZiBUb29sIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuPC9oMz4KICAgICAgPHA+CiAgICAgICAgVGhlCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9wYWlyLWNvZGUuZ2l0aHViLmlvL2xpdC8iCiAgICAgICAgICA+TGVhcm5pbmcgSW50ZXJwcmV0YWJpbGl0eSBUb29sIChMSVQpPC9hCiAgICAgICAgPgogICAgICAgIGlzIGFuIGFjdGl2ZWx5IG1haW50YWluZWQgYWx0ZXJuYXRpdmUuIFBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vcGFpci1jb2RlLmdpdGh1Yi5pby9saXQvc2V0dXAvIj5oZXJlPC9hPiB0byBpbnN0YWxsIGFuZAogICAgICAgIHVzZSB0aGlzIHRvb2wuCiAgICAgIDwvcD4KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQoKICAgICAgICAubWVzc2FnZSB7CiAgICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIH0KICAgICAgICAjY29tbWFuZFRleHRhcmVhIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDFleDsKICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgICByZXNpemU6IHZlcnRpY2FsOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgfQogICAgICAgICNjb3B5Q29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQogICAgICAgICNjb3BpZWRNZXNzYWdlIHsKICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgIDwvZGl2PgogIGA7Vmh0PUUoW3l0KCJ0Zi13aXQtcmVkaXJlY3QtZGFzaGJvYXJkIildLFZodCk7dmFyIHVwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfYmFja2VuZD1SQn19O3VwZT1FKFt5dCgidGYtYmFja2VuZCIpXSx1cGUpO3ZhciBocGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnJ1bnNDb2xvclNjYWxlPWZufX07aHBlPUUoW3l0KCJ0Zi1jb2xvci1zY2FsZSIpXSxocGUpO3ZhciBmcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2ZlYXR1cmVfZmxhZ3M9dFd9fTtmcGU9RShbeXQoInRmLWZlYXR1cmUtZmxhZ3MiKV0sZnBlKTt2YXIgcHBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9nbG9iYWxzPWtXfX07cHBlPUUoW3l0KCJ0Zi1nbG9iYWxzIildLHBwZSk7dmFyIFVodD17fTtLcyhVaHQse1RmRG9tUmVwZWF0OigpPT5PaSxhZGRMaW1pdExpc3RlbmVyOigpPT5VVyxnZXRMaW1pdDooKT0+R1cscmVtb3ZlTGltaXRMaXN0ZW5lcjooKT0+cVcsc2V0TGltaXQ6KCk9PnMyZX0pO3ZhciBkcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3BhZ2luYXRlZF92aWV3PVVodH19O2RwZT1FKFt5dCgidGYtcGFnaW5hdGVkLXZpZXctc3RvcmUiKV0sZHBlKTt2YXIgbXBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9zdG9yYWdlPU9CfX07bXBlPUUoW3l0KCJ0Zi1zdG9yYWdlIildLG1wZSk7fSkoKTsKLyohCiAqIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qIQogKiBpc29iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXNvYmplY3Q+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC4KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KClNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwphbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi8qKgogKiBAZmlsZW92ZXJ2aWV3CiAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+CiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKgogKiBAZmlsZW92ZXJ2aWV3IG1hbnVhbGx5IGFkZCBkMy1zZWxlY3Rpb24tbXVsdGkgdG8gZDMgZGVmYXVsdCBidW5kbGUuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzCiAqIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zZWxlY3Rpb24tbXVsdGkvaXNzdWVzLzExIGZvciB3aHkgd2UgaGF2ZSB0byBkbyB0aGlzCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGNvbnZlbmllbnQgdGh1bmsgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZQogKiBvZiBjcmVhdGluZyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGlucHV0cyBmcm9tIG11dGFibGUgY2xhc3MgcHJvcGVydGllcy4KICovCi8qKgogKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogKiBAbGljZW5zZSBNSVQKICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogKiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KICoKICogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogKiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiAqIHdlIHdyaXRlIGEgcmVjdXJzaXZlIFNpZ25hdHVyZSBpbnRlcmZhY2UgdGhhdCBob2xkcyBhbiBpbW11dGFibGUgc25hcHNob3Qgb2Ygd2hhdGV2ZXIKICogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKICogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KICoKICogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxOSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwoKKCgpPT57dmFyIElpZT1PYmplY3QuY3JlYXRlLGtBPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxBaWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixSaWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsUGllPU9iamVjdC5nZXRQcm90b3R5cGVPZixPaWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxHVj0obix0KT0+KCk9Pih0fHxuKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLEZBPShuLHQpPT57Zm9yKHZhciBlIGluIHQpa0EobixlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9LFdWPShuLHQsZSk9PihlPW51bGwhPW4/SWllKFBpZShuKSk6e30sKChuLHQsZSxpKT0+e2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKGxldCByIG9mIFJpZSh0KSkhT2llLmNhbGwobixyKSYmdW5kZWZpbmVkIT09ciYma0EobixyLHtnZXQ6KCk9PnRbcl0sZW51bWVyYWJsZTohKGk9QWllKHQscikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gbn0pKCF0JiZuJiZuLl9fZXNNb2R1bGU/ZTprQShlLCJkZWZhdWx0Iix7dmFsdWU6bixlbnVtZXJhYmxlOiEwfSksbikpLEk0PUdWKChKVWUsX0MpPT57dmFyIHI0LG80LHM0LGE0LGw0LGM0LGQ0LHU0LHA0LGY0LG00LGg0LGc0LGhDLFFBLF80LGI0LHY0LFJtLHk0LHg0LEM0LE00LHc0LFM0LEU0LFQ0LEQ0LGdDOyFmdW5jdGlvbihuKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiB0aGlzP3RoaXM6e307ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTppLl9fZXNNb2R1bGU9ITApLGZ1bmN0aW9uKG8scyl7cmV0dXJuIGlbb109cj9yKG8scyk6c319ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInRzbGliIixbImV4cG9ydHMiXSxmdW5jdGlvbihpKXtuKGUodCxlKGkpKSl9KTpuKCJvYmplY3QiPT10eXBlb2YgX0MmJiJvYmplY3QiPT10eXBlb2YgX0MuZXhwb3J0cz9lKHQsZShfQy5leHBvcnRzKSk6ZSh0KSl9KGZ1bmN0aW9uKG4pe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihpLHIpe2kuX19wcm90b19fPXJ9fHxmdW5jdGlvbihpLHIpe2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYoaVtvXT1yW29dKX07cjQ9ZnVuY3Rpb24oaSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgciYmbnVsbCE9PXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhyKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1pfXQoaSxyKSxpLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOihvLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbyl9LG80PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGkpe2Zvcih2YXIgcixvPTEscz1hcmd1bWVudHMubGVuZ3RoO288cztvKyspZm9yKHZhciBhIGluIHI9YXJndW1lbnRzW29dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpJiYoaVthXT1yW2FdKTtyZXR1cm4gaX0sczQ9ZnVuY3Rpb24oaSxyKXt2YXIgbz17fTtmb3IodmFyIHMgaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmci5pbmRleE9mKHMpPDAmJihvW3NdPWlbc10pO2lmKG51bGwhPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT0wO2ZvcihzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaSk7YTxzLmxlbmd0aDthKyspci5pbmRleE9mKHNbYV0pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChpLHNbYV0pJiYob1tzW2FdXT1pW3NbYV1dKX1yZXR1cm4gb30sYTQ9ZnVuY3Rpb24oaSxyLG8scyl7dmFyIGMsYT1hcmd1bWVudHMubGVuZ3RoLGw9YTwzP3I6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk6cztpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWw9UmVmbGVjdC5kZWNvcmF0ZShpLHIsbyxzKTtlbHNlIGZvcih2YXIgZD1pLmxlbmd0aC0xO2Q+PTA7ZC0tKShjPWlbZF0pJiYobD0oYTwzP2MobCk6YT4zP2MocixvLGwpOmMocixvKSl8fGwpO3JldHVybiBhPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8sbCksbH0sbDQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gZnVuY3Rpb24obyxzKXtyKG8scyxpKX19LGM0PWZ1bmN0aW9uKGkscixvLHMsYSxsKXtmdW5jdGlvbiBjKEEpe2lmKHZvaWQgMCE9PUEmJiJmdW5jdGlvbiIhPXR5cGVvZiBBKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIEF9Zm9yKHZhciBtLGQ9cy5raW5kLHU9ImdldHRlciI9PT1kPyJnZXQiOiJzZXR0ZXIiPT09ZD8ic2V0IjoidmFsdWUiLHA9IXImJmk/cy5zdGF0aWM/aTppLnByb3RvdHlwZTpudWxsLGY9cnx8KHA/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLHMubmFtZSk6e30pLGI9ITEsTT1vLmxlbmd0aC0xO00+PTA7TS0tKXt2YXIgeT17fTtmb3IodmFyIHggaW4gcyl5W3hdPSJhY2Nlc3MiPT09eD97fTpzW3hdO2Zvcih2YXIgeCBpbiBzLmFjY2Vzcyl5LmFjY2Vzc1t4XT1zLmFjY2Vzc1t4XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKEEpe2lmKGIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7bC5wdXNoKGMoQXx8bnVsbCkpfTt2YXIgUj0oMCxvW01dKSgiYWNjZXNzb3IiPT09ZD97Z2V0OmYuZ2V0LHNldDpmLnNldH06Zlt1XSx5KTtpZigiYWNjZXNzb3IiPT09ZCl7aWYodm9pZCAwPT09Uiljb250aW51ZTtpZihudWxsPT09Unx8Im9iamVjdCIhPXR5cGVvZiBSKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhtPWMoUi5nZXQpKSYmKGYuZ2V0PW0pLChtPWMoUi5zZXQpKSYmKGYuc2V0PW0pLChtPWMoUi5pbml0KSkmJmEucHVzaChtKX1lbHNlKG09YyhSKSkmJigiZmllbGQiPT09ZD9hLnB1c2gobSk6Zlt1XT1tKX1wJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocCxzLm5hbWUsZiksYj0hMH0sZDQ9ZnVuY3Rpb24oaSxyLG8pe2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoPjIsYT0wO2E8ci5sZW5ndGg7YSsrKW89cz9yW2FdLmNhbGwoaSxvKTpyW2FdLmNhbGwoaSk7cmV0dXJuIHM/bzp2b2lkIDB9LHU0PWZ1bmN0aW9uKGkpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgaT9pOiIiLmNvbmNhdChpKX0scDQ9ZnVuY3Rpb24oaSxyLG8pe3JldHVybiJzeW1ib2wiPT10eXBlb2YgciYmKHI9ci5kZXNjcmlwdGlvbj8iWyIuY29uY2F0KHIuZGVzY3JpcHRpb24sIl0iKToiIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm5hbWUiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6bz8iIi5jb25jYXQobywiICIscik6cn0pfSxmND1mdW5jdGlvbihpLHIpe2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QubWV0YWRhdGEpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaSxyKX0sbTQ9ZnVuY3Rpb24oaSxyLG8scyl7cmV0dXJuIG5ldyhvfHwobz1Qcm9taXNlKSkoZnVuY3Rpb24obCxjKXtmdW5jdGlvbiBkKGYpe3RyeXtwKHMubmV4dChmKSl9Y2F0Y2gobSl7YyhtKX19ZnVuY3Rpb24gdShmKXt0cnl7cChzLnRocm93KGYpKX1jYXRjaChtKXtjKG0pfX1mdW5jdGlvbiBwKGYpe2YuZG9uZT9sKGYudmFsdWUpOmZ1bmN0aW9uKGwpe3JldHVybiBsIGluc3RhbmNlb2Ygbz9sOm5ldyBvKGZ1bmN0aW9uKGMpe2MobCl9KX0oZi52YWx1ZSkudGhlbihkLHUpfXAoKHM9cy5hcHBseShpLHJ8fFtdKSkubmV4dCgpKX0pfSxoND1mdW5jdGlvbihpLHIpe3ZhciBzLGEsbCxjLG89e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmbFswXSl0aHJvdyBsWzFdO3JldHVybiBsWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGM9e25leHQ6ZCgwKSx0aHJvdzpkKDEpLHJldHVybjpkKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoY1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjO2Z1bmN0aW9uIGQocCl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihwKXtpZihzKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2MmJihjPTAscFswXSYmKG89MCkpLG87KXRyeXtpZihzPTEsYSYmKGw9MiZwWzBdP2EucmV0dXJuOnBbMF0/YS50aHJvd3x8KChsPWEucmV0dXJuKSYmbC5jYWxsKGEpLDApOmEubmV4dCkmJiEobD1sLmNhbGwoYSxwWzFdKSkuZG9uZSlyZXR1cm4gbDtzd2l0Y2goYT0wLGwmJihwPVsyJnBbMF0sbC52YWx1ZV0pLHBbMF0pe2Nhc2UgMDpjYXNlIDE6bD1wO2JyZWFrO2Nhc2UgNDpyZXR1cm4gby5sYWJlbCsrLHt2YWx1ZTpwWzFdLGRvbmU6ITF9O2Nhc2UgNTpvLmxhYmVsKyssYT1wWzFdLHA9WzBdO2NvbnRpbnVlO2Nhc2UgNzpwPW8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobD0obD1vLnRyeXMpLmxlbmd0aD4wJiZsW2wubGVuZ3RoLTFdKSYmKDY9PT1wWzBdfHwyPT09cFswXSkpe289MDtjb250aW51ZX1pZigzPT09cFswXSYmKCFsfHxwWzFdPmxbMF0mJnBbMV08bFszXSkpe28ubGFiZWw9cFsxXTticmVha31pZig2PT09cFswXSYmby5sYWJlbDxsWzFdKXtvLmxhYmVsPWxbMV0sbD1wO2JyZWFrfWlmKGwmJm8ubGFiZWw8bFsyXSl7by5sYWJlbD1sWzJdLG8ub3BzLnB1c2gocCk7YnJlYWt9bFsyXSYmby5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlfXA9ci5jYWxsKGksbyl9Y2F0Y2goZil7cD1bNixmXSxhPTB9ZmluYWxseXtzPWw9MH1pZig1JnBbMF0pdGhyb3cgcFsxXTtyZXR1cm57dmFsdWU6cFswXT9wWzFdOnZvaWQgMCxkb25lOiEwfX0oW3AsZl0pfX19LGc0PWZ1bmN0aW9uKGkscil7Zm9yKHZhciBvIGluIGkpImRlZmF1bHQiIT09byYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiZnQyhyLGksbyl9LGdDPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyLG8scyl7dm9pZCAwPT09cyYmKHM9byk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLG8pOyghYXx8KCJnZXQiaW4gYT8hci5fX2VzTW9kdWxlOmEud3JpdGFibGV8fGEuY29uZmlndXJhYmxlKSkmJihhPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByW29dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLHMsYSl9OmZ1bmN0aW9uKGkscixvLHMpe3ZvaWQgMD09PXMmJihzPW8pLGlbc109cltvXX0saEM9ZnVuY3Rpb24oaSl7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG89ciYmaVtyXSxzPTA7aWYobylyZXR1cm4gby5jYWxsKGkpO2lmKGkmJiJudW1iZXIiPT10eXBlb2YgaS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSYmcz49aS5sZW5ndGgmJihpPXZvaWQgMCkse3ZhbHVlOmkmJmlbcysrXSxkb25lOiFpfX19O3Rocm93IG5ldyBUeXBlRXJyb3Iocj8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9LFFBPWZ1bmN0aW9uKGkscil7dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmaVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFvKXJldHVybiBpO3ZhciBhLGMscz1vLmNhbGwoaSksbD1bXTt0cnl7Zm9yKDsodm9pZCAwPT09cnx8ci0tID4wKSYmIShhPXMubmV4dCgpKS5kb25lOylsLnB1c2goYS52YWx1ZSl9Y2F0Y2goZCl7Yz17ZXJyb3I6ZH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKG89cy5yZXR1cm4pJiZvLmNhbGwocyl9ZmluYWxseXtpZihjKXRocm93IGMuZXJyb3J9fXJldHVybiBsfSxfND1mdW5jdGlvbigpe2Zvcih2YXIgaT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylpPWkuY29uY2F0KFFBKGFyZ3VtZW50c1tyXSkpO3JldHVybiBpfSxiND1mdW5jdGlvbigpe2Zvcih2YXIgaT0wLHI9MCxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKylpKz1hcmd1bWVudHNbcl0ubGVuZ3RoO3ZhciBzPUFycmF5KGkpLGE9MDtmb3Iocj0wO3I8bztyKyspZm9yKHZhciBsPWFyZ3VtZW50c1tyXSxjPTAsZD1sLmxlbmd0aDtjPGQ7YysrLGErKylzW2FdPWxbY107cmV0dXJuIHN9LHY0PWZ1bmN0aW9uKGkscixvKXtpZihvfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIGwscz0wLGE9ci5sZW5ndGg7czxhO3MrKykobHx8IShzIGluIHIpKSYmKGx8fChsPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsMCxzKSksbFtzXT1yW3NdKTtyZXR1cm4gaS5jb25jYXQobHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocikpfSxSbT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFJtPyh0aGlzLnY9aSx0aGlzKTpuZXcgUm0oaSl9LHk0PWZ1bmN0aW9uKGkscixvKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGEscz1vLmFwcGx5KGkscnx8W10pLGw9W107cmV0dXJuIGE9e30sYygibmV4dCIpLGMoInRocm93IiksYygicmV0dXJuIiksYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sYTtmdW5jdGlvbiBjKGIpe3NbYl0mJihhW2JdPWZ1bmN0aW9uKE0pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih5LHgpe2wucHVzaChbYixNLHkseF0pPjF8fGQoYixNKX0pfSl9ZnVuY3Rpb24gZChiLE0pe3RyeXshZnVuY3Rpb24oYil7Yi52YWx1ZSBpbnN0YW5jZW9mIFJtP1Byb21pc2UucmVzb2x2ZShiLnZhbHVlLnYpLnRoZW4ocCxmKTptKGxbMF1bMl0sYil9KHNbYl0oTSkpfWNhdGNoKHkpe20obFswXVszXSx5KX19ZnVuY3Rpb24gcChiKXtkKCJuZXh0IixiKX1mdW5jdGlvbiBmKGIpe2QoInRocm93IixiKX1mdW5jdGlvbiBtKGIsTSl7YihNKSxsLnNoaWZ0KCksbC5sZW5ndGgmJmQobFswXVswXSxsWzBdWzFdKX19LHg0PWZ1bmN0aW9uKGkpe3ZhciByLG87cmV0dXJuIHI9e30scygibmV4dCIpLHMoInRocm93IixmdW5jdGlvbihhKXt0aHJvdyBhfSkscygicmV0dXJuIikscltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHI7ZnVuY3Rpb24gcyhhLGwpe3JbYV09aVthXT9mdW5jdGlvbihjKXtyZXR1cm4obz0hbyk/e3ZhbHVlOlJtKGlbYV0oYykpLGRvbmU6ITF9Omw/bChjKTpjfTpsfX0sQzQ9ZnVuY3Rpb24oaSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBvLHI9aVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIHI/ci5jYWxsKGkpOihpPWhDKGkpLG89e30scygibmV4dCIpLHMoInRocm93IikscygicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gcyhsKXtvW2xdPWlbbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLHUpeyFmdW5jdGlvbihsLGMsZCx1KXtQcm9taXNlLnJlc29sdmUodSkudGhlbihmdW5jdGlvbihwKXtsKHt2YWx1ZTpwLGRvbmU6ZH0pfSxjKX0oZCx1LChjPWlbbF0oYykpLmRvbmUsYy52YWx1ZSl9KX19fSxNND1mdW5jdGlvbihpLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGksInJhdyIse3ZhbHVlOnJ9KTppLnJhdz1yLGl9O3ZhciBlPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6cn0pfTpmdW5jdGlvbihpLHIpe2kuZGVmYXVsdD1yfTt3ND1mdW5jdGlvbihpKXtpZihpJiZpLl9fZXNNb2R1bGUpcmV0dXJuIGk7dmFyIHI9e307aWYobnVsbCE9aSlmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmZ0MocixpLG8pO3JldHVybiBlKHIsaSkscn0sUzQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9fSxFND1mdW5jdGlvbihpLHIsbyxzKXtpZigiYSI9PT1vJiYhcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IXM6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiJtIj09PW8/czoiYSI9PT1vP3MuY2FsbChpKTpzP3MudmFsdWU6ci5nZXQoaSl9LFQ0PWZ1bmN0aW9uKGkscixvLHMsYSl7aWYoIm0iPT09cyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZigiYSI9PT1zJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IWE6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuImEiPT09cz9hLmNhbGwoaSxvKTphP2EudmFsdWU9bzpyLnNldChpLG8pLG99LEQ0PWZ1bmN0aW9uKGkscil7aWYobnVsbD09PXJ8fCJvYmplY3QiIT10eXBlb2YgciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9yPT09aTppLmhhcyhyKX0sbigiX19leHRlbmRzIixyNCksbigiX19hc3NpZ24iLG80KSxuKCJfX3Jlc3QiLHM0KSxuKCJfX2RlY29yYXRlIixhNCksbigiX19wYXJhbSIsbDQpLG4oIl9fZXNEZWNvcmF0ZSIsYzQpLG4oIl9fcnVuSW5pdGlhbGl6ZXJzIixkNCksbigiX19wcm9wS2V5Iix1NCksbigiX19zZXRGdW5jdGlvbk5hbWUiLHA0KSxuKCJfX21ldGFkYXRhIixmNCksbigiX19hd2FpdGVyIixtNCksbigiX19nZW5lcmF0b3IiLGg0KSxuKCJfX2V4cG9ydFN0YXIiLGc0KSxuKCJfX2NyZWF0ZUJpbmRpbmciLGdDKSxuKCJfX3ZhbHVlcyIsaEMpLG4oIl9fcmVhZCIsUUEpLG4oIl9fc3ByZWFkIixfNCksbigiX19zcHJlYWRBcnJheXMiLGI0KSxuKCJfX3NwcmVhZEFycmF5Iix2NCksbigiX19hd2FpdCIsUm0pLG4oIl9fYXN5bmNHZW5lcmF0b3IiLHk0KSxuKCJfX2FzeW5jRGVsZWdhdG9yIix4NCksbigiX19hc3luY1ZhbHVlcyIsQzQpLG4oIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixNNCksbigiX19pbXBvcnRTdGFyIix3NCksbigiX19pbXBvcnREZWZhdWx0IixTNCksbigiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsRTQpLG4oIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLFQ0KSxuKCJfX2NsYXNzUHJpdmF0ZUZpZWxkSW4iLEQ0KX0pfSksaUc9R1YobGs9PnsidXNlIHN0cmljdCI7dmFyIG4sZnU9bGsmJmxrLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKG4sdCxlKXtpZihlfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIG8saT0wLHI9dC5sZW5ndGg7aTxyO2krKykob3x8IShpIGluIHQpKSYmKG98fChvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxpKSksb1tpXT10W2ldKTtyZXR1cm4gbi5jb25jYXQob3x8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfTtuPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHope3ZhciBlZT16LnBlcmZvcm1hbmNlO2Z1bmN0aW9uIGxlKGd0KXtlZSYmZWUubWFyayYmZWUubWFyayhndCl9ZnVuY3Rpb24gRShndCxtZSl7ZWUmJmVlLm1lYXN1cmUmJmVlLm1lYXN1cmUoZ3QsbWUpfWxlKCJab25lIik7dmFyIEg9ei5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyI7ZnVuY3Rpb24gWShndCl7cmV0dXJuIEgrZ3R9dmFyIEo9ITA9PT16W1koImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKHouWm9uZSl7aWYoSnx8ImZ1bmN0aW9uIiE9dHlwZW9mIHouWm9uZS5fX3N5bWJvbF9fKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTtyZXR1cm4gei5ab25lfXZhciBzZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGd0KG1lLGhlKXt0aGlzLl9wYXJlbnQ9bWUsdGhpcy5fbmFtZT1oZT9oZS5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz1oZSYmaGUucHJvcGVydGllc3x8e30sdGhpcy5fem9uZURlbGVnYXRlPW5ldyBldCh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsaGUpfXJldHVybiBndC5hc3NlcnRab25lUGF0Y2hlZD1mdW5jdGlvbigpe2lmKHouUHJvbWlzZSE9PWtuLlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGd0LCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBtZT1ndC5jdXJyZW50O21lLnBhcmVudDspbWU9bWUucGFyZW50O3JldHVybiBtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3QsImN1cnJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcnIuem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3QsImN1cnJlbnRUYXNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHlzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGd0Ll9fbG9hZF9wYXRjaD1mdW5jdGlvbihtZSxoZSxSZSl7aWYodm9pZCAwPT09UmUmJihSZT0hMSksa24uaGFzT3duUHJvcGVydHkobWUpKXtpZighUmUmJkopdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK21lKX1lbHNlIGlmKCF6WyJfX1pvbmVfZGlzYWJsZV8iK21lXSl7dmFyIFNuPSJab25lOiIrbWU7bGUoU24pLGtuW21lXT1oZSh6LGd0LHByKSxFKFNuLFNuKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShndC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGd0LnByb3RvdHlwZSwibmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGd0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24obWUpe3ZhciBoZT10aGlzLmdldFpvbmVXaXRoKG1lKTtpZihoZSlyZXR1cm4gaGUuX3Byb3BlcnRpZXNbbWVdfSxndC5wcm90b3R5cGUuZ2V0Wm9uZVdpdGg9ZnVuY3Rpb24obWUpe2Zvcih2YXIgaGU9dGhpcztoZTspe2lmKGhlLl9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG1lKSlyZXR1cm4gaGU7aGU9aGUuX3BhcmVudH1yZXR1cm4gbnVsbH0sZ3QucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24obWUpe2lmKCFtZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLG1lKX0sZ3QucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24obWUsaGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5jdGlvbiBnb3Q6ICIrbWUpO3ZhciBSZT10aGlzLl96b25lRGVsZWdhdGUuaW50ZXJjZXB0KHRoaXMsbWUsaGUpLFNuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFNuLnJ1bkd1YXJkZWQoUmUsdGhpcyxhcmd1bWVudHMsaGUpfX0sZ3QucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihtZSxoZSxSZSxTbil7cnI9e3BhcmVudDpycix6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLG1lLGhlLFJlLFNuKX1maW5hbGx5e3JyPXJyLnBhcmVudH19LGd0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKG1lLGhlLFJlLFNuKXt2b2lkIDA9PT1oZSYmKGhlPW51bGwpLHJyPXtwYXJlbnQ6cnIsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsbWUsaGUsUmUsU24pfWNhdGNoKG1yKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxtcikpdGhyb3cgbXJ9fWZpbmFsbHl7cnI9cnIucGFyZW50fX0sZ3QucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24obWUsaGUsUmUpe2lmKG1lLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKG1lLnpvbmV8fEV0KS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZihtZS5zdGF0ZSE9PXBpfHxtZS50eXBlIT09ZmkmJm1lLnR5cGUhPT1Pbil7dmFyIFNuPW1lLnN0YXRlIT1XbjtTbiYmbWUuX3RyYW5zaXRpb25UbyhXbixWbiksbWUucnVuQ291bnQrKzt2YXIgbXI9eXM7eXM9bWUscnI9e3BhcmVudDpycix6b25lOnRoaXN9O3RyeXttZS50eXBlPT1PbiYmbWUuZGF0YSYmIW1lLmRhdGEuaXNQZXJpb2RpYyYmKG1lLmNhbmNlbEZuPXZvaWQgMCk7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlVGFzayh0aGlzLG1lLGhlLFJlKX1jYXRjaCh1bCl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsdWwpKXRocm93IHVsfX1maW5hbGx5e21lLnN0YXRlIT09cGkmJm1lLnN0YXRlIT09TmkmJihtZS50eXBlPT1maXx8bWUuZGF0YSYmbWUuZGF0YS5pc1BlcmlvZGljP1NuJiZtZS5fdHJhbnNpdGlvblRvKFZuLFduKToobWUucnVuQ291bnQ9MCx0aGlzLl91cGRhdGVUYXNrQ291bnQobWUsLTEpLFNuJiZtZS5fdHJhbnNpdGlvblRvKHBpLFduLHBpKSkpLHJyPXJyLnBhcmVudCx5cz1tcn19fSxndC5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKG1lKXtpZihtZS56b25lJiZtZS56b25lIT09dGhpcylmb3IodmFyIGhlPXRoaXM7aGU7KXtpZihoZT09PW1lLnpvbmUpdGhyb3cgRXJyb3IoImNhbiBub3QgcmVzY2hlZHVsZSB0YXNrIHRvICIuY29uY2F0KHRoaXMubmFtZSwiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIpLmNvbmNhdChtZS56b25lLm5hbWUpKTtoZT1oZS5wYXJlbnR9bWUuX3RyYW5zaXRpb25UbyhRbixwaSk7dmFyIFJlPVtdO21lLl96b25lRGVsZWdhdGVzPVJlLG1lLl96b25lPXRoaXM7dHJ5e21lPXRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcyxtZSl9Y2F0Y2goU24pe3Rocm93IG1lLl90cmFuc2l0aW9uVG8oTmksUW4scGkpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLFNuKSxTbn1yZXR1cm4gbWUuX3pvbmVEZWxlZ2F0ZXM9PT1SZSYmdGhpcy5fdXBkYXRlVGFza0NvdW50KG1lLDEpLG1lLnN0YXRlPT1RbiYmbWUuX3RyYW5zaXRpb25UbyhWbixRbiksbWV9LGd0LnByb3RvdHlwZS5zY2hlZHVsZU1pY3JvVGFzaz1mdW5jdGlvbihtZSxoZSxSZSxTbil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBxZSh2bixtZSxoZSxSZSxTbix2b2lkIDApKX0sZ3QucHJvdG90eXBlLnNjaGVkdWxlTWFjcm9UYXNrPWZ1bmN0aW9uKG1lLGhlLFJlLFNuLG1yKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHFlKE9uLG1lLGhlLFJlLFNuLG1yKSl9LGd0LnByb3RvdHlwZS5zY2hlZHVsZUV2ZW50VGFzaz1mdW5jdGlvbihtZSxoZSxSZSxTbixtcil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBxZShmaSxtZSxoZSxSZSxTbixtcikpfSxndC5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihtZSl7aWYobWUuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBjYW5jZWxsZWQgaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisobWUuem9uZXx8RXQpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKG1lLnN0YXRlPT09Vm58fG1lLnN0YXRlPT09V24pe21lLl90cmFuc2l0aW9uVG8oVXQsVm4sV24pO3RyeXt0aGlzLl96b25lRGVsZWdhdGUuY2FuY2VsVGFzayh0aGlzLG1lKX1jYXRjaChoZSl7dGhyb3cgbWUuX3RyYW5zaXRpb25UbyhOaSxVdCksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsaGUpLGhlfXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQobWUsLTEpLG1lLl90cmFuc2l0aW9uVG8ocGksVXQpLG1lLnJ1bkNvdW50PTAsbWV9fSxndC5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihtZSxoZSl7dmFyIFJlPW1lLl96b25lRGVsZWdhdGVzOy0xPT1oZSYmKG1lLl96b25lRGVsZWdhdGVzPW51bGwpO2Zvcih2YXIgU249MDtTbjxSZS5sZW5ndGg7U24rKylSZVtTbl0uX3VwZGF0ZVRhc2tDb3VudChtZS50eXBlLGhlKX0sZ3R9KCk7c2UuX19zeW1ib2xfXz1ZO3ZhciBHaSx6ZT17bmFtZToiIixvbkhhc1Rhc2s6ZnVuY3Rpb24oZ3QsbWUsaGUsUmUpe3JldHVybiBndC5oYXNUYXNrKGhlLFJlKX0sb25TY2hlZHVsZVRhc2s6ZnVuY3Rpb24oZ3QsbWUsaGUsUmUpe3JldHVybiBndC5zY2hlZHVsZVRhc2soaGUsUmUpfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24oZ3QsbWUsaGUsUmUsU24sbXIpe3JldHVybiBndC5pbnZva2VUYXNrKGhlLFJlLFNuLG1yKX0sb25DYW5jZWxUYXNrOmZ1bmN0aW9uKGd0LG1lLGhlLFJlKXtyZXR1cm4gZ3QuY2FuY2VsVGFzayhoZSxSZSl9fSxldD1mdW5jdGlvbigpe2Z1bmN0aW9uIGd0KG1lLGhlLFJlKXt0aGlzLl90YXNrQ291bnRzPXttaWNyb1Rhc2s6MCxtYWNyb1Rhc2s6MCxldmVudFRhc2s6MH0sdGhpcy56b25lPW1lLHRoaXMuX3BhcmVudERlbGVnYXRlPWhlLHRoaXMuX2ZvcmtaUz1SZSYmKFJlJiZSZS5vbkZvcms/UmU6aGUuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9UmUmJihSZS5vbkZvcms/aGU6aGUuX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3VyclpvbmU9UmUmJihSZS5vbkZvcms/dGhpcy56b25lOmhlLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPVJlJiYoUmUub25JbnRlcmNlcHQ/UmU6aGUuX2ludGVyY2VwdFpTKSx0aGlzLl9pbnRlcmNlcHREbGd0PVJlJiYoUmUub25JbnRlcmNlcHQ/aGU6aGUuX2ludGVyY2VwdERsZ3QpLHRoaXMuX2ludGVyY2VwdEN1cnJab25lPVJlJiYoUmUub25JbnRlcmNlcHQ/dGhpcy56b25lOmhlLl9pbnRlcmNlcHRDdXJyWm9uZSksdGhpcy5faW52b2tlWlM9UmUmJihSZS5vbkludm9rZT9SZTpoZS5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9UmUmJihSZS5vbkludm9rZT9oZTpoZS5faW52b2tlRGxndCksdGhpcy5faW52b2tlQ3VyclpvbmU9UmUmJihSZS5vbkludm9rZT90aGlzLnpvbmU6aGUuX2ludm9rZUN1cnJab25lKSx0aGlzLl9oYW5kbGVFcnJvclpTPVJlJiYoUmUub25IYW5kbGVFcnJvcj9SZTpoZS5faGFuZGxlRXJyb3JaUyksdGhpcy5faGFuZGxlRXJyb3JEbGd0PVJlJiYoUmUub25IYW5kbGVFcnJvcj9oZTpoZS5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPVJlJiYoUmUub25IYW5kbGVFcnJvcj90aGlzLnpvbmU6aGUuX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPVJlJiYoUmUub25TY2hlZHVsZVRhc2s/UmU6aGUuX3NjaGVkdWxlVGFza1pTKSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PVJlJiYoUmUub25TY2hlZHVsZVRhc2s/aGU6aGUuX3NjaGVkdWxlVGFza0RsZ3QpLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPVJlJiYoUmUub25TY2hlZHVsZVRhc2s/dGhpcy56b25lOmhlLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSksdGhpcy5faW52b2tlVGFza1pTPVJlJiYoUmUub25JbnZva2VUYXNrP1JlOmhlLl9pbnZva2VUYXNrWlMpLHRoaXMuX2ludm9rZVRhc2tEbGd0PVJlJiYoUmUub25JbnZva2VUYXNrP2hlOmhlLl9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPVJlJiYoUmUub25JbnZva2VUYXNrP3RoaXMuem9uZTpoZS5faW52b2tlVGFza0N1cnJab25lKSx0aGlzLl9jYW5jZWxUYXNrWlM9UmUmJihSZS5vbkNhbmNlbFRhc2s/UmU6aGUuX2NhbmNlbFRhc2taUyksdGhpcy5fY2FuY2VsVGFza0RsZ3Q9UmUmJihSZS5vbkNhbmNlbFRhc2s/aGU6aGUuX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9UmUmJihSZS5vbkNhbmNlbFRhc2s/dGhpcy56b25lOmhlLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO3ZhciBTbj1SZSYmUmUub25IYXNUYXNrOyhTbnx8aGUmJmhlLl9oYXNUYXNrWlMpJiYodGhpcy5faGFzVGFza1pTPVNuP1JlOnplLHRoaXMuX2hhc1Rhc2tEbGd0PWhlLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9dGhpcyx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bWUsUmUub25TY2hlZHVsZVRhc2t8fCh0aGlzLl9zY2hlZHVsZVRhc2taUz16ZSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PWhlLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuem9uZSksUmUub25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPXplLHRoaXMuX2ludm9rZVRhc2tEbGd0PWhlLHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLFJlLm9uQ2FuY2VsVGFza3x8KHRoaXMuX2NhbmNlbFRhc2taUz16ZSx0aGlzLl9jYW5jZWxUYXNrRGxndD1oZSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9dGhpcy56b25lKSl9cmV0dXJuIGd0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKG1lLGhlKXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsdGhpcy56b25lLG1lLGhlKTpuZXcgc2UobWUsaGUpfSxndC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKG1lLGhlLFJlKXtyZXR1cm4gdGhpcy5faW50ZXJjZXB0WlM/dGhpcy5faW50ZXJjZXB0WlMub25JbnRlcmNlcHQodGhpcy5faW50ZXJjZXB0RGxndCx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSxtZSxoZSxSZSk6aGV9LGd0LnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24obWUsaGUsUmUsU24sbXIpe3JldHVybiB0aGlzLl9pbnZva2VaUz90aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LHRoaXMuX2ludm9rZUN1cnJab25lLG1lLGhlLFJlLFNuLG1yKTpoZS5hcHBseShSZSxTbil9LGd0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbihtZSxoZSl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZSxtZSxoZSl9LGd0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24obWUsaGUpe3ZhciBSZT1oZTtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJlJlLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksKFJlPXRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2NoZWR1bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsbWUsaGUpKXx8KFJlPWhlKTtlbHNlIGlmKGhlLnNjaGVkdWxlRm4paGUuc2NoZWR1bGVGbihoZSk7ZWxzZXtpZihoZS50eXBlIT12bil0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMgbWlzc2luZyBzY2hlZHVsZUZuLiIpO3BuKGhlKX1yZXR1cm4gUmV9LGd0LnByb3RvdHlwZS5pbnZva2VUYXNrPWZ1bmN0aW9uKG1lLGhlLFJlLFNuKXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLG1lLGhlLFJlLFNuKTpoZS5jYWxsYmFjay5hcHBseShSZSxTbil9LGd0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKG1lLGhlKXt2YXIgUmU7aWYodGhpcy5fY2FuY2VsVGFza1pTKVJlPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLG1lLGhlKTtlbHNle2lmKCFoZS5jYW5jZWxGbil0aHJvdyBFcnJvcigiVGFzayBpcyBub3QgY2FuY2VsYWJsZSIpO1JlPWhlLmNhbmNlbEZuKGhlKX1yZXR1cm4gUmV9LGd0LnByb3RvdHlwZS5oYXNUYXNrPWZ1bmN0aW9uKG1lLGhlKXt0cnl7dGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSxtZSxoZSl9Y2F0Y2goUmUpe3RoaXMuaGFuZGxlRXJyb3IobWUsUmUpfX0sZ3QucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24obWUsaGUpe3ZhciBSZT10aGlzLl90YXNrQ291bnRzLFNuPVJlW21lXSxtcj1SZVttZV09U24raGU7aWYobXI8MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC4iKTswIT1TbiYmMCE9bXJ8fHRoaXMuaGFzVGFzayh0aGlzLnpvbmUse21pY3JvVGFzazpSZS5taWNyb1Rhc2s+MCxtYWNyb1Rhc2s6UmUubWFjcm9UYXNrPjAsZXZlbnRUYXNrOlJlLmV2ZW50VGFzaz4wLGNoYW5nZTptZX0pfSxndH0oKSxxZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGd0KG1lLGhlLFJlLFNuLG1yLHVsKXtpZih0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bWUsdGhpcy5zb3VyY2U9aGUsdGhpcy5kYXRhPVNuLHRoaXMuc2NoZWR1bGVGbj1tcix0aGlzLmNhbmNlbEZuPXVsLCFSZSl0aHJvdyBuZXcgRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7dGhpcy5jYWxsYmFjaz1SZTt2YXIgdHQ9dGhpczt0aGlzLmludm9rZT1tZT09PWZpJiZTbiYmU24udXNlRz9ndC5pbnZva2VUYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIGd0Lmludm9rZVRhc2suY2FsbCh6LHR0LHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIGd0Lmludm9rZVRhc2s9ZnVuY3Rpb24obWUsaGUsUmUpe21lfHwobWU9dGhpcyksTXIrKzt0cnl7cmV0dXJuIG1lLnJ1bkNvdW50KyssbWUuem9uZS5ydW5UYXNrKG1lLGhlLFJlKX1maW5hbGx5ezE9PU1yJiZQbigpLE1yLS19fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3QucHJvdG90eXBlLCJ6b25lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvbmV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGd0LnByb3RvdHlwZSwic3RhdGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZ3QucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlUmVxdWVzdD1mdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb25UbyhwaSxRbil9LGd0LnByb3RvdHlwZS5fdHJhbnNpdGlvblRvPWZ1bmN0aW9uKG1lLGhlLFJlKXtpZih0aGlzLl9zdGF0ZSE9PWhlJiZ0aGlzLl9zdGF0ZSE9PVJlKXRocm93IG5ldyBFcnJvcigiIi5jb25jYXQodGhpcy50eXBlLCIgJyIpLmNvbmNhdCh0aGlzLnNvdXJjZSwiJzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICciKS5jb25jYXQobWUsIicsIGV4cGVjdGluZyBzdGF0ZSAnIikuY29uY2F0KGhlLCInIikuY29uY2F0KFJlPyIgb3IgJyIrUmUrIiciOiIiLCIsIHdhcyAnIikuY29uY2F0KHRoaXMuX3N0YXRlLCInLiIpKTt0aGlzLl9zdGF0ZT1tZSxtZT09cGkmJih0aGlzLl96b25lRGVsZWdhdGVzPW51bGwpfSxndC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhJiZ0eXBlb2YgdGhpcy5kYXRhLmhhbmRsZUlkPCJ1Ij90aGlzLmRhdGEuaGFuZGxlSWQudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9LGd0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTp0aGlzLnR5cGUsc3RhdGU6dGhpcy5zdGF0ZSxzb3VyY2U6dGhpcy5zb3VyY2Usem9uZTp0aGlzLnpvbmUubmFtZSxydW5Db3VudDp0aGlzLnJ1bkNvdW50fX0sZ3R9KCkscnQ9WSgic2V0VGltZW91dCIpLGR0PVkoIlByb21pc2UiKSxTdD1ZKCJ0aGVuIiksRHQ9W10sY249ITE7ZnVuY3Rpb24gdmkoZ3Qpe2lmKEdpfHx6W2R0XSYmKEdpPXpbZHRdLnJlc29sdmUoMCkpLEdpKXt2YXIgbWU9R2lbU3RdO21lfHwobWU9R2kudGhlbiksbWUuY2FsbChHaSxndCl9ZWxzZSB6W3J0XShndCwwKX1mdW5jdGlvbiBwbihndCl7MD09PU1yJiYwPT09RHQubGVuZ3RoJiZ2aShQbiksZ3QmJkR0LnB1c2goZ3QpfWZ1bmN0aW9uIFBuKCl7aWYoIWNuKXtmb3IoY249ITA7RHQubGVuZ3RoOyl7dmFyIGd0PUR0O0R0PVtdO2Zvcih2YXIgbWU9MDttZTxndC5sZW5ndGg7bWUrKyl7dmFyIGhlPWd0W21lXTt0cnl7aGUuem9uZS5ydW5UYXNrKGhlLG51bGwsbnVsbCl9Y2F0Y2goUmUpe3ByLm9uVW5oYW5kbGVkRXJyb3IoUmUpfX19cHIubWljcm90YXNrRHJhaW5Eb25lKCksY249ITF9fXZhciBFdD17bmFtZToiTk8gWk9ORSJ9LHBpPSJub3RTY2hlZHVsZWQiLFFuPSJzY2hlZHVsaW5nIixWbj0ic2NoZWR1bGVkIixXbj0icnVubmluZyIsVXQ9ImNhbmNlbGluZyIsTmk9InVua25vd24iLHZuPSJtaWNyb1Rhc2siLE9uPSJtYWNyb1Rhc2siLGZpPSJldmVudFRhc2siLGtuPXt9LHByPXtzeW1ib2w6WSxjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHJyfSxvblVuaGFuZGxlZEVycm9yOmZyLG1pY3JvdGFza0RyYWluRG9uZTpmcixzY2hlZHVsZU1pY3JvVGFzazpwbixzaG93VW5jYXVnaHRFcnJvcjpmdW5jdGlvbigpe3JldHVybiFzZVtZKCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yIildfSxwYXRjaEV2ZW50VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoT25Qcm9wZXJ0aWVzOmZyLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIGZyfSxiaW5kQXJndW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoVGhlbjpmdW5jdGlvbigpe3JldHVybiBmcn0scGF0Y2hNYWNyb1Rhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LHBhdGNoRXZlbnRQcm90b3R5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LGlzSUVPckVkZ2U6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZ2V0R2xvYmFsT2JqZWN0czpmdW5jdGlvbigpe30sT2JqZWN0RGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbigpe30sT2JqZWN0Q3JlYXRlOmZ1bmN0aW9uKCl7fSxBcnJheVNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LHdyYXBXaXRoQ3VycmVudFpvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LGZpbHRlclByb3BlcnRpZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sYXR0YWNoT3JpZ2luVG9QYXRjaGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZyfSxfcmVkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBmcn0scGF0Y2hDYWxsYmFja3M6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LG5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrOnZpfSxycj17cGFyZW50Om51bGwsem9uZTpuZXcgc2UobnVsbCxudWxsKX0seXM9bnVsbCxNcj0wO2Z1bmN0aW9uIGZyKCl7fUUoIlpvbmUiLCJab25lIiksei5ab25lPXNlfSh0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnNlbGZ8fGdsb2JhbCk7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxlPU9iamVjdC5nZXRQcm90b3R5cGVPZixpPU9iamVjdC5jcmVhdGUscj1BcnJheS5wcm90b3R5cGUuc2xpY2Usbz0iYWRkRXZlbnRMaXN0ZW5lciIscz0icmVtb3ZlRXZlbnRMaXN0ZW5lciIsYT1ab25lLl9fc3ltYm9sX18obyksbD1ab25lLl9fc3ltYm9sX18ocyksYz0idHJ1ZSIsZD0iZmFsc2UiLHU9Wm9uZS5fX3N5bWJvbF9fKCIiKTtmdW5jdGlvbiBwKHosZWUpe3JldHVybiBab25lLmN1cnJlbnQud3JhcCh6LGVlKX1mdW5jdGlvbiBmKHosZWUsbGUsRSxIKXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKHosZWUsbGUsRSxIKX12YXIgbT1ab25lLl9fc3ltYm9sX18sYj10eXBlb2Ygd2luZG93PCJ1IixNPWI/d2luZG93OnZvaWQgMCx5PWImJk18fCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsLHg9InJlbW92ZUF0dHJpYnV0ZSI7ZnVuY3Rpb24gUih6LGVlKXtmb3IodmFyIGxlPXoubGVuZ3RoLTE7bGU+PTA7bGUtLSkiZnVuY3Rpb24iPT10eXBlb2YgeltsZV0mJih6W2xlXT1wKHpbbGVdLGVlKyJfIitsZSkpO3JldHVybiB6fWZ1bmN0aW9uIFYoeil7cmV0dXJuIXp8fCExIT09ei53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2Ygei5nZXQmJnR5cGVvZiB6LnNldD4idSIpfXZhciB0ZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsSz0hKCJudyJpbiB5KSYmdHlwZW9mIHkucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSx4ZT0hSyYmIXRlJiYhKCFifHwhTS5IVE1MRWxlbWVudCksWGU9dHlwZW9mIHkucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSYmIXRlJiYhKCFifHwhTS5IVE1MRWxlbWVudCksRGU9e30sRD1mdW5jdGlvbih6KXtpZih6PXp8fHkuZXZlbnQpe3ZhciBlZT1EZVt6LnR5cGVdO2VlfHwoZWU9RGVbei50eXBlXT1tKCJPTl9QUk9QRVJUWSIrei50eXBlKSk7dmFyIEgsbGU9dGhpc3x8ei50YXJnZXR8fHksRT1sZVtlZV07cmV0dXJuIHhlJiZsZT09PU0mJiJlcnJvciI9PT16LnR5cGU/ITA9PT0oSD1FJiZFLmNhbGwodGhpcyx6Lm1lc3NhZ2Usei5maWxlbmFtZSx6LmxpbmVubyx6LmNvbG5vLHouZXJyb3IpKSYmei5wcmV2ZW50RGVmYXVsdCgpOm51bGwhPShIPUUmJkUuYXBwbHkodGhpcyxhcmd1bWVudHMpKSYmIUgmJnoucHJldmVudERlZmF1bHQoKSxIfX07ZnVuY3Rpb24gcmUoeixlZSxsZSl7dmFyIEU9bih6LGVlKTtpZighRSYmbGUmJm4obGUsZWUpJiYoRT17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxFJiZFLmNvbmZpZ3VyYWJsZSl7dmFyIFk9bSgib24iK2VlKyJwYXRjaGVkIik7aWYoIXouaGFzT3duUHJvcGVydHkoWSl8fCF6W1ldKXtkZWxldGUgRS53cml0YWJsZSxkZWxldGUgRS52YWx1ZTt2YXIgSj1FLmdldCxzZT1FLnNldCx6ZT1lZS5zbGljZSgyKSxldD1EZVt6ZV07ZXR8fChldD1EZVt6ZV09bSgiT05fUFJPUEVSVFkiK3plKSksRS5zZXQ9ZnVuY3Rpb24ocWUpe3ZhciBydD10aGlzOyFydCYmej09PXkmJihydD15KSxydCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBydFtldF0mJnJ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoemUsRCksc2UmJnNlLmNhbGwocnQsbnVsbCkscnRbZXRdPXFlLCJmdW5jdGlvbiI9PXR5cGVvZiBxZSYmcnQuYWRkRXZlbnRMaXN0ZW5lcih6ZSxELCExKSl9LEUuZ2V0PWZ1bmN0aW9uKCl7dmFyIHFlPXRoaXM7aWYoIXFlJiZ6PT09eSYmKHFlPXkpLCFxZSlyZXR1cm4gbnVsbDt2YXIgcnQ9cWVbZXRdO2lmKHJ0KXJldHVybiBydDtpZihKKXt2YXIgZHQ9Si5jYWxsKHRoaXMpO2lmKGR0KXJldHVybiBFLnNldC5jYWxsKHRoaXMsZHQpLCJmdW5jdGlvbiI9PXR5cGVvZiBxZVt4XSYmcWUucmVtb3ZlQXR0cmlidXRlKGVlKSxkdH1yZXR1cm4gbnVsbH0sdCh6LGVlLEUpLHpbWV09ITB9fX1mdW5jdGlvbiBjZSh6LGVlLGxlKXtpZihlZSlmb3IodmFyIEU9MDtFPGVlLmxlbmd0aDtFKyspcmUoeiwib24iK2VlW0VdLGxlKTtlbHNle3ZhciBIPVtdO2Zvcih2YXIgWSBpbiB6KSJvbiI9PVkuc2xpY2UoMCwyKSYmSC5wdXNoKFkpO2Zvcih2YXIgSj0wO0o8SC5sZW5ndGg7SisrKXJlKHosSFtKXSxsZSl9fXZhciBmZT1tKCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24gYmUoeil7dmFyIGVlPXlbel07aWYoZWUpe3lbbSh6KV09ZWUseVt6XT1mdW5jdGlvbigpe3ZhciBIPVIoYXJndW1lbnRzLHopO3N3aXRjaChILmxlbmd0aCl7Y2FzZSAwOnRoaXNbZmVdPW5ldyBlZTticmVhaztjYXNlIDE6dGhpc1tmZV09bmV3IGVlKEhbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW2ZlXT1uZXcgZWUoSFswXSxIWzFdKTticmVhaztjYXNlIDM6dGhpc1tmZV09bmV3IGVlKEhbMF0sSFsxXSxIWzJdKTticmVhaztjYXNlIDQ6dGhpc1tmZV09bmV3IGVlKEhbMF0sSFsxXSxIWzJdLEhbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LHBlKHlbel0sZWUpO3ZhciBFLGxlPW5ldyBlZShmdW5jdGlvbigpe30pO2ZvcihFIGluIGxlKSJYTUxIdHRwUmVxdWVzdCI9PT16JiYicmVzcG9uc2VCbG9iIj09PUV8fGZ1bmN0aW9uKEgpeyJmdW5jdGlvbiI9PXR5cGVvZiBsZVtIXT95W3pdLnByb3RvdHlwZVtIXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW2ZlXVtIXS5hcHBseSh0aGlzW2ZlXSxhcmd1bWVudHMpfTp0KHlbel0ucHJvdG90eXBlLEgse3NldDpmdW5jdGlvbihZKXsiZnVuY3Rpb24iPT10eXBlb2YgWT8odGhpc1tmZV1bSF09cChZLHorIi4iK0gpLHBlKHRoaXNbZmVdW0hdLFkpKTp0aGlzW2ZlXVtIXT1ZfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tmZV1bSF19fSl9KEUpO2ZvcihFIGluIGVlKSJwcm90b3R5cGUiIT09RSYmZWUuaGFzT3duUHJvcGVydHkoRSkmJih5W3pdW0VdPWVlW0VdKX19ZnVuY3Rpb24gbmUoeixlZSxsZSl7Zm9yKHZhciBFPXo7RSYmIUUuaGFzT3duUHJvcGVydHkoZWUpOylFPWUoRSk7IUUmJnpbZWVdJiYoRT16KTt2YXIgSD1tKGVlKSxZPW51bGw7aWYoRSYmKCEoWT1FW0hdKXx8IUUuaGFzT3duUHJvcGVydHkoSCkpJiYoWT1FW0hdPUVbZWVdLFYoRSYmbihFLGVlKSkpKXt2YXIgc2U9bGUoWSxILGVlKTtFW2VlXT1mdW5jdGlvbigpe3JldHVybiBzZSh0aGlzLGFyZ3VtZW50cyl9LHBlKEVbZWVdLFkpfXJldHVybiBZfWZ1bmN0aW9uIGRlKHosZWUsbGUpe3ZhciBFPW51bGw7ZnVuY3Rpb24gSChZKXt2YXIgSj1ZLmRhdGE7cmV0dXJuIEouYXJnc1tKLmNiSWR4XT1mdW5jdGlvbigpe1kuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRS5hcHBseShKLnRhcmdldCxKLmFyZ3MpLFl9RT1uZSh6LGVlLGZ1bmN0aW9uKFkpe3JldHVybiBmdW5jdGlvbihKLHNlKXt2YXIgemU9bGUoSixzZSk7cmV0dXJuIHplLmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VbemUuY2JJZHhdP2YoemUubmFtZSxzZVt6ZS5jYklkeF0semUsSCk6WS5hcHBseShKLHNlKX19KX1mdW5jdGlvbiBwZSh6LGVlKXt6W20oIk9yaWdpbmFsRGVsZWdhdGUiKV09ZWV9dmFyIGplPSExLENlPSExO2Z1bmN0aW9uIGx0KCl7aWYoamUpcmV0dXJuIENlO2plPSEwO3RyeXt2YXIgej1NLm5hdmlnYXRvci51c2VyQWdlbnQ7KC0xIT09ei5pbmRleE9mKCJNU0lFICIpfHwtMSE9PXouaW5kZXhPZigiVHJpZGVudC8iKXx8LTEhPT16LmluZGV4T2YoIkVkZ2UvIikpJiYoQ2U9ITApfWNhdGNoe31yZXR1cm4gQ2V9Wm9uZS5fX2xvYWRfcGF0Y2goIlpvbmVBd2FyZVByb21pc2UiLGZ1bmN0aW9uKHosZWUsbGUpe3ZhciBFPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsSD1PYmplY3QuZGVmaW5lUHJvcGVydHksSj1sZS5zeW1ib2wsc2U9W10semU9ITA9PT16W0ooIkRJU0FCTEVfV1JBUFBJTkdfVU5DQVVHSFRfUFJPTUlTRV9SRUpFQ1RJT04iKV0sZXQ9SigiUHJvbWlzZSIpLHFlPUooInRoZW4iKSxydD0iX19jcmVhdGlvblRyYWNlX18iO2xlLm9uVW5oYW5kbGVkRXJyb3I9ZnVuY3Rpb24odHQpe2lmKGxlLnNob3dVbmNhdWdodEVycm9yKCkpe3ZhciBBdD10dCYmdHQucmVqZWN0aW9uO0F0P2NvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLEF0IGluc3RhbmNlb2YgRXJyb3I/QXQubWVzc2FnZTpBdCwiOyBab25lOiIsdHQuem9uZS5uYW1lLCI7IFRhc2s6Iix0dC50YXNrJiZ0dC50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLEF0LEF0IGluc3RhbmNlb2YgRXJyb3I/QXQuc3RhY2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKHR0KX19LGxlLm1pY3JvdGFza0RyYWluRG9uZT1mdW5jdGlvbigpe2Zvcih2YXIgdHQ9ZnVuY3Rpb24oKXt2YXIgQXQ9c2Uuc2hpZnQoKTt0cnl7QXQuem9uZS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7dGhyb3cgQXQudGhyb3dPcmlnaW5hbD9BdC5yZWplY3Rpb246QXR9KX1jYXRjaChDdCl7IWZ1bmN0aW9uKHR0KXtsZS5vblVuaGFuZGxlZEVycm9yKHR0KTt0cnl7dmFyIEF0PWVlW2R0XTsiZnVuY3Rpb24iPT10eXBlb2YgQXQmJkF0LmNhbGwodGhpcyx0dCl9Y2F0Y2h7fX0oQ3QpfX07c2UubGVuZ3RoOyl0dCgpfTt2YXIgZHQ9SigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKTtmdW5jdGlvbiBEdCh0dCl7cmV0dXJuIHR0JiZ0dC50aGVufWZ1bmN0aW9uIGNuKHR0KXtyZXR1cm4gdHR9ZnVuY3Rpb24gR2kodHQpe3JldHVybiBoZS5yZWplY3QodHQpfXZhciB2aT1KKCJzdGF0ZSIpLHBuPUooInZhbHVlIiksUG49SigiZmluYWxseSIpLEV0PUooInBhcmVudFByb21pc2VWYWx1ZSIpLHBpPUooInBhcmVudFByb21pc2VTdGF0ZSIpLFFuPSJQcm9taXNlLnRoZW4iLFZuPW51bGwsV249ITAsVXQ9ITEsTmk9MDtmdW5jdGlvbiB2bih0dCxBdCl7cmV0dXJuIGZ1bmN0aW9uKEN0KXt0cnl7cHIodHQsQXQsQ3QpfWNhdGNoKEplKXtwcih0dCwhMSxKZSl9fX12YXIgT249ZnVuY3Rpb24oKXt2YXIgdHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKEN0KXtyZXR1cm4gZnVuY3Rpb24oKXt0dHx8KHR0PSEwLEN0LmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sZmk9IlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiLGtuPUooImN1cnJlbnRUYXNrVHJhY2UiKTtmdW5jdGlvbiBwcih0dCxBdCxDdCl7dmFyIEplPU9uKCk7aWYodHQ9PT1DdCl0aHJvdyBuZXcgVHlwZUVycm9yKGZpKTtpZih0dFt2aV09PT1Wbil7dmFyIFp0PW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIEN0fHwiZnVuY3Rpb24iPT10eXBlb2YgQ3QpJiYoWnQ9Q3QmJkN0LnRoZW4pfWNhdGNoKG5pKXtyZXR1cm4gSmUoZnVuY3Rpb24oKXtwcih0dCwhMSxuaSl9KSgpLHR0fWlmKEF0IT09VXQmJkN0IGluc3RhbmNlb2YgaGUmJkN0Lmhhc093blByb3BlcnR5KHZpKSYmQ3QuaGFzT3duUHJvcGVydHkocG4pJiZDdFt2aV0hPT1Wbil5cyhDdCkscHIodHQsQ3RbdmldLEN0W3BuXSk7ZWxzZSBpZihBdCE9PVV0JiYiZnVuY3Rpb24iPT10eXBlb2YgWnQpdHJ5e1p0LmNhbGwoQ3QsSmUodm4odHQsQXQpKSxKZSh2bih0dCwhMSkpKX1jYXRjaChuaSl7SmUoZnVuY3Rpb24oKXtwcih0dCwhMSxuaSl9KSgpfWVsc2V7dHRbdmldPUF0O3ZhciBCbj10dFtwbl07aWYodHRbcG5dPUN0LHR0W1BuXT09PVBuJiZBdD09PVduJiYodHRbdmldPXR0W3BpXSx0dFtwbl09dHRbRXRdKSxBdD09PVV0JiZDdCBpbnN0YW5jZW9mIEVycm9yKXt2YXIgUm49ZWUuY3VycmVudFRhc2smJmVlLmN1cnJlbnRUYXNrLmRhdGEmJmVlLmN1cnJlbnRUYXNrLmRhdGFbcnRdO1JuJiZIKEN0LGtuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpSbn0pfWZvcih2YXIgWm49MDtabjxCbi5sZW5ndGg7KU1yKHR0LEJuW1puKytdLEJuW1puKytdLEJuW1puKytdLEJuW1puKytdKTtpZigwPT1Cbi5sZW5ndGgmJkF0PT1VdCl7dHRbdmldPU5pO3ZhciBLbj1DdDt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrZnVuY3Rpb24odHQpe3JldHVybiB0dCYmdHQudG9TdHJpbmc9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPyh0dC5jb25zdHJ1Y3RvciYmdHQuY29uc3RydWN0b3IubmFtZXx8IiIpKyI6ICIrSlNPTi5zdHJpbmdpZnkodHQpOnR0P3R0LnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHR0KX0oQ3QpKyhDdCYmQ3Quc3RhY2s/IlxuIitDdC5zdGFjazoiIikpfWNhdGNoKG5pKXtLbj1uaX16ZSYmKEtuLnRocm93T3JpZ2luYWw9ITApLEtuLnJlamVjdGlvbj1DdCxLbi5wcm9taXNlPXR0LEtuLnpvbmU9ZWUuY3VycmVudCxLbi50YXNrPWVlLmN1cnJlbnRUYXNrLHNlLnB1c2goS24pLGxlLnNjaGVkdWxlTWljcm9UYXNrKCl9fX1yZXR1cm4gdHR9dmFyIHJyPUooInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24geXModHQpe2lmKHR0W3ZpXT09PU5pKXt0cnl7dmFyIEF0PWVlW3JyXTtBdCYmImZ1bmN0aW9uIj09dHlwZW9mIEF0JiZBdC5jYWxsKHRoaXMse3JlamVjdGlvbjp0dFtwbl0scHJvbWlzZTp0dH0pfWNhdGNoe310dFt2aV09VXQ7Zm9yKHZhciBDdD0wO0N0PHNlLmxlbmd0aDtDdCsrKXR0PT09c2VbQ3RdLnByb21pc2UmJnNlLnNwbGljZShDdCwxKX19ZnVuY3Rpb24gTXIodHQsQXQsQ3QsSmUsWnQpe3lzKHR0KTt2YXIgQm49dHRbdmldLFJuPUJuPyJmdW5jdGlvbiI9PXR5cGVvZiBKZT9KZTpjbjoiZnVuY3Rpb24iPT10eXBlb2YgWnQ/WnQ6R2k7QXQuc2NoZWR1bGVNaWNyb1Rhc2soUW4sZnVuY3Rpb24oKXt0cnl7dmFyIFpuPXR0W3BuXSxLbj0hIUN0JiZQbj09PUN0W1BuXTtLbiYmKEN0W0V0XT1abixDdFtwaV09Qm4pO3ZhciBuaT1BdC5ydW4oUm4sdm9pZCAwLEtuJiZSbiE9PUdpJiZSbiE9PWNuP1tdOltabl0pO3ByKEN0LCEwLG5pKX1jYXRjaCh5aSl7cHIoQ3QsITEseWkpfX0sQ3QpfXZhciBndD1mdW5jdGlvbigpe30sbWU9ei5BZ2dyZWdhdGVFcnJvcixoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHR0KEF0KXt2YXIgQ3Q9dGhpcztpZighKEN0IGluc3RhbmNlb2YgdHQpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7Q3RbdmldPVZuLEN0W3BuXT1bXTt0cnl7dmFyIEplPU9uKCk7QXQmJkF0KEplKHZuKEN0LFduKSksSmUodm4oQ3QsVXQpKSl9Y2F0Y2goWnQpe3ByKEN0LCExLFp0KX19cmV0dXJuIHR0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9LHR0LnJlc29sdmU9ZnVuY3Rpb24oQXQpe3JldHVybiBwcihuZXcgdGhpcyhudWxsKSxXbixBdCl9LHR0LnJlamVjdD1mdW5jdGlvbihBdCl7cmV0dXJuIHByKG5ldyB0aGlzKG51bGwpLFV0LEF0KX0sdHQuYW55PWZ1bmN0aW9uKEF0KXtpZighQXR8fCJmdW5jdGlvbiIhPXR5cGVvZiBBdFtTeW1ib2wuaXRlcmF0b3JdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgbWUoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciBDdD1bXSxKZT0wO3RyeXtmb3IodmFyIFp0PTAsQm49QXQ7WnQ8Qm4ubGVuZ3RoO1p0KyspSmUrKyxDdC5wdXNoKHR0LnJlc29sdmUoQm5bWnRdKSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBtZShbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUplKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgbWUoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciBabj0hMSxLbj1bXTtyZXR1cm4gbmV3IHR0KGZ1bmN0aW9uKG5pLHlpKXtmb3IodmFyIGhyPTA7aHI8Q3QubGVuZ3RoO2hyKyspQ3RbaHJdLnRoZW4oZnVuY3Rpb24oUm8pe1pufHwoWm49ITAsbmkoUm8pKX0sZnVuY3Rpb24oUm8pe0tuLnB1c2goUm8pLDA9PS0tSmUmJihabj0hMCx5aShuZXcgbWUoS24sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpKX0pfSl9LHR0LnJhY2U9ZnVuY3Rpb24oQXQpe3ZhciBDdCxKZSxadD1uZXcgdGhpcyhmdW5jdGlvbih5aSxocil7Q3Q9eWksSmU9aHJ9KTtmdW5jdGlvbiBCbih5aSl7Q3QoeWkpfWZ1bmN0aW9uIFJuKHlpKXtKZSh5aSl9Zm9yKHZhciBabj0wLEtuPUF0O1puPEtuLmxlbmd0aDtabisrKXt2YXIgbmk9S25bWm5dO0R0KG5pKXx8KG5pPXRoaXMucmVzb2x2ZShuaSkpLG5pLnRoZW4oQm4sUm4pfXJldHVybiBadH0sdHQuYWxsPWZ1bmN0aW9uKEF0KXtyZXR1cm4gdHQuYWxsV2l0aENhbGxiYWNrKEF0KX0sdHQuYWxsU2V0dGxlZD1mdW5jdGlvbihBdCl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgdHQ/dGhpczp0dCkuYWxsV2l0aENhbGxiYWNrKEF0LHt0aGVuQ2FsbGJhY2s6ZnVuY3Rpb24oSmUpe3JldHVybntzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6SmV9fSxlcnJvckNhbGxiYWNrOmZ1bmN0aW9uKEplKXtyZXR1cm57c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOkplfX19KX0sdHQuYWxsV2l0aENhbGxiYWNrPWZ1bmN0aW9uKEF0LEN0KXtmb3IodmFyIEplLFp0LEJuPW5ldyB0aGlzKGZ1bmN0aW9uKEtyLHZvKXtKZT1LcixadD12b30pLFJuPTIsWm49MCxLbj1bXSxuaT1mdW5jdGlvbihLcil7RHQoS3IpfHwoS3I9eWkucmVzb2x2ZShLcikpO3ZhciB2bz1abjt0cnl7S3IudGhlbihmdW5jdGlvbihIcil7S25bdm9dPUN0P0N0LnRoZW5DYWxsYmFjayhIcik6SHIsMD09LS1SbiYmSmUoS24pfSxmdW5jdGlvbihIcil7Q3Q/KEtuW3ZvXT1DdC5lcnJvckNhbGxiYWNrKEhyKSwwPT0tLVJuJiZKZShLbikpOlp0KEhyKX0pfWNhdGNoKEhyKXtadChIcil9Um4rKyxabisrfSx5aT10aGlzLGhyPTAsUm89QXQ7aHI8Um8ubGVuZ3RoO2hyKyspbmkoUm9baHJdKTtyZXR1cm4gMD09KFJuLT0yKSYmSmUoS24pLEJufSxPYmplY3QuZGVmaW5lUHJvcGVydHkodHQucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlByb21pc2UifSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0dC5wcm90b3R5cGUsU3ltYm9sLnNwZWNpZXMse2dldDpmdW5jdGlvbigpe3JldHVybiB0dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0dC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihBdCxDdCl7dmFyIEplLFp0PW51bGw9PT0oSmU9dGhpcy5jb25zdHJ1Y3Rvcil8fHZvaWQgMD09PUplP3ZvaWQgMDpKZVtTeW1ib2wuc3BlY2llc107KCFadHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFp0KSYmKFp0PXRoaXMuY29uc3RydWN0b3J8fHR0KTt2YXIgQm49bmV3IFp0KGd0KSxSbj1lZS5jdXJyZW50O3JldHVybiB0aGlzW3ZpXT09Vm4/dGhpc1twbl0ucHVzaChSbixCbixBdCxDdCk6TXIodGhpcyxSbixCbixBdCxDdCksQm59LHR0LnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihBdCl7cmV0dXJuIHRoaXMudGhlbihudWxsLEF0KX0sdHQucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oQXQpe3ZhciBDdCxKZT1udWxsPT09KEN0PXRoaXMuY29uc3RydWN0b3IpfHx2b2lkIDA9PT1DdD92b2lkIDA6Q3RbU3ltYm9sLnNwZWNpZXNdOyghSmV8fCJmdW5jdGlvbiIhPXR5cGVvZiBKZSkmJihKZT10dCk7dmFyIFp0PW5ldyBKZShndCk7WnRbUG5dPVBuO3ZhciBCbj1lZS5jdXJyZW50O3JldHVybiB0aGlzW3ZpXT09Vm4/dGhpc1twbl0ucHVzaChCbixadCxBdCxBdCk6TXIodGhpcyxCbixadCxBdCxBdCksWnR9LHR0fSgpO2hlLnJlc29sdmU9aGUucmVzb2x2ZSxoZS5yZWplY3Q9aGUucmVqZWN0LGhlLnJhY2U9aGUucmFjZSxoZS5hbGw9aGUuYWxsO3ZhciBSZT16W2V0XT16LlByb21pc2U7ei5Qcm9taXNlPWhlO3ZhciBTbj1KKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIG1yKHR0KXt2YXIgQXQ9dHQucHJvdG90eXBlLEN0PUUoQXQsInRoZW4iKTtpZighQ3R8fCExIT09Q3Qud3JpdGFibGUmJkN0LmNvbmZpZ3VyYWJsZSl7dmFyIEplPUF0LnRoZW47QXRbcWVdPUplLHR0LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKFp0LEJuKXt2YXIgUm49dGhpcztyZXR1cm4gbmV3IGhlKGZ1bmN0aW9uKEtuLG5pKXtKZS5jYWxsKFJuLEtuLG5pKX0pLnRoZW4oWnQsQm4pfSx0dFtTbl09ITB9fXJldHVybiBsZS5wYXRjaFRoZW49bXIsUmUmJihtcihSZSksbmUoeiwiZmV0Y2giLGZ1bmN0aW9uKHR0KXtyZXR1cm4gZnVuY3Rpb24odHQpe3JldHVybiBmdW5jdGlvbihBdCxDdCl7dmFyIEplPXR0LmFwcGx5KEF0LEN0KTtpZihKZSBpbnN0YW5jZW9mIGhlKXJldHVybiBKZTt2YXIgWnQ9SmUuY29uc3RydWN0b3I7cmV0dXJuIFp0W1NuXXx8bXIoWnQpLEplfX0odHQpfSkpLFByb21pc2VbZWUuX19zeW1ib2xfXygidW5jYXVnaHRQcm9taXNlRXJyb3JzIildPXNlLGhlfSksWm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIixmdW5jdGlvbih6KXt2YXIgZWU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLGxlPW0oIk9yaWdpbmFsRGVsZWdhdGUiKSxFPW0oIlByb21pc2UiKSxIPW0oIkVycm9yIiksWT1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXt2YXIgZXQ9dGhpc1tsZV07aWYoZXQpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV0P2VlLmNhbGwoZXQpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldCk7aWYodGhpcz09PVByb21pc2Upe3ZhciBxZT16W0VdO2lmKHFlKXJldHVybiBlZS5jYWxsKHFlKX1pZih0aGlzPT09RXJyb3Ipe3ZhciBydD16W0hdO2lmKHJ0KXJldHVybiBlZS5jYWxsKHJ0KX19cmV0dXJuIGVlLmNhbGwodGhpcyl9O1lbbGVdPWVlLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1ZO3ZhciBKPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBQcm9taXNlJiZ0aGlzIGluc3RhbmNlb2YgUHJvbWlzZT8iW29iamVjdCBQcm9taXNlXSI6Si5jYWxsKHRoaXMpfX0pO3ZhciBNdD0hMTtpZih0eXBlb2Ygd2luZG93PCJ1Iil0cnl7dmFyIHB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe010PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixwdCxwdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLHB0LHB0KX1jYXRjaHtNdD0hMX12YXIgdGksa2ksRmksWixMLE9lPXt1c2VHOiEwfSxBbj17fSx3dD17fSxvbj1uZXcgUmVnRXhwKCJeIit1KyIoXFx3KykodHJ1ZXxmYWxzZSkkIiksdmU9bSgicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gbXQoeixlZSl7dmFyIGxlPShlZT9lZSh6KTp6KStkLEU9KGVlP2VlKHopOnopK2MsSD11K2xlLFk9dStFO0FuW3pdPXt9LEFuW3pdW2RdPUgsQW5bel1bY109WX1mdW5jdGlvbiBmdCh6LGVlLGxlLEUpe3ZhciBIPUUmJkUuYWRkfHxvLFk9RSYmRS5ybXx8cyxKPUUmJkUubGlzdGVuZXJzfHwiZXZlbnRMaXN0ZW5lcnMiLHNlPUUmJkUucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLHplPW0oSCksZXQ9Ii4iK0grIjoiLHFlPSJwcmVwZW5kTGlzdGVuZXIiLHJ0PSIuIitxZSsiOiIsZHQ9ZnVuY3Rpb24oUG4sRXQscGkpe2lmKCFQbi5pc1JlbW92ZWQpe3ZhciBWbixRbj1Qbi5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIFFuJiZRbi5oYW5kbGVFdmVudCYmKFBuLmNhbGxiYWNrPWZ1bmN0aW9uKE5pKXtyZXR1cm4gUW4uaGFuZGxlRXZlbnQoTmkpfSxQbi5vcmlnaW5hbERlbGVnYXRlPVFuKTt0cnl7UG4uaW52b2tlKFBuLEV0LFtwaV0pfWNhdGNoKE5pKXtWbj1OaX12YXIgV249UG4ub3B0aW9ucztyZXR1cm4gV24mJiJvYmplY3QiPT10eXBlb2YgV24mJlduLm9uY2UmJkV0W1ldLmNhbGwoRXQscGkudHlwZSxQbi5vcmlnaW5hbERlbGVnYXRlP1BuLm9yaWdpbmFsRGVsZWdhdGU6UG4uY2FsbGJhY2ssV24pLFZufX07ZnVuY3Rpb24gU3QoUG4sRXQscGkpe2lmKEV0PUV0fHx6LmV2ZW50KXt2YXIgUW49UG58fEV0LnRhcmdldHx8eixWbj1RbltBbltFdC50eXBlXVtwaT9jOmRdXTtpZihWbil7dmFyIFduPVtdO2lmKDE9PT1Wbi5sZW5ndGgpKFV0PWR0KFZuWzBdLFFuLEV0KSkmJlduLnB1c2goVXQpO2Vsc2UgZm9yKHZhciBOaT1Wbi5zbGljZSgpLHZuPTA7dm48TmkubGVuZ3RoJiYoIUV0fHwhMCE9PUV0W3ZlXSk7dm4rKyl7dmFyIFV0OyhVdD1kdChOaVt2bl0sUW4sRXQpKSYmV24ucHVzaChVdCl9aWYoMT09PVduLmxlbmd0aCl0aHJvdyBXblswXTt2YXIgT249ZnVuY3Rpb24oZmkpe3ZhciBrbj1XbltmaV07ZWUubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soZnVuY3Rpb24oKXt0aHJvdyBrbn0pfTtmb3Iodm49MDt2bjxXbi5sZW5ndGg7dm4rKylPbih2bil9fX12YXIgRHQ9ZnVuY3Rpb24oUG4pe3JldHVybiBTdCh0aGlzLFBuLCExKX0sY249ZnVuY3Rpb24oUG4pe3JldHVybiBTdCh0aGlzLFBuLCEwKX07ZnVuY3Rpb24gR2koUG4sRXQpe2lmKCFQbilyZXR1cm4hMTt2YXIgcGk9ITA7RXQmJnZvaWQgMCE9PUV0LnVzZUcmJihwaT1FdC51c2VHKTt2YXIgUW49RXQmJkV0LnZoLFZuPSEwO0V0JiZ2b2lkIDAhPT1FdC5jaGtEdXAmJihWbj1FdC5jaGtEdXApO3ZhciBXbj0hMTtFdCYmdm9pZCAwIT09RXQucnQmJihXbj1FdC5ydCk7Zm9yKHZhciBVdD1QbjtVdCYmIVV0Lmhhc093blByb3BlcnR5KEgpOylVdD1lKFV0KTtpZighVXQmJlBuW0hdJiYoVXQ9UG4pLCFVdHx8VXRbemVdKXJldHVybiExO3ZhciBycixOaT1FdCYmRXQuZXZlbnROYW1lVG9TdHJpbmcsdm49e30sT249VXRbemVdPVV0W0hdLGZpPVV0W20oWSldPVV0W1ldLGtuPVV0W20oSildPVV0W0pdLHByPVV0W20oc2UpXT1VdFtzZV07RXQmJkV0LnByZXBlbmQmJihycj1VdFttKEV0LnByZXBlbmQpXT1VdFtFdC5wcmVwZW5kXSk7dmFyIFJlPXBpP2Z1bmN0aW9uKEplKXtpZighdm4uaXNFeGlzdGluZylyZXR1cm4gT24uY2FsbCh2bi50YXJnZXQsdm4uZXZlbnROYW1lLHZuLmNhcHR1cmU/Y246RHQsdm4ub3B0aW9ucyl9OmZ1bmN0aW9uKEplKXtyZXR1cm4gT24uY2FsbCh2bi50YXJnZXQsdm4uZXZlbnROYW1lLEplLmludm9rZSx2bi5vcHRpb25zKX0sU249cGk/ZnVuY3Rpb24oSmUpe2lmKCFKZS5pc1JlbW92ZWQpe3ZhciBadD1BbltKZS5ldmVudE5hbWVdLEJuPXZvaWQgMDtadCYmKEJuPVp0W0plLmNhcHR1cmU/YzpkXSk7dmFyIFJuPUJuJiZKZS50YXJnZXRbQm5dO2lmKFJuKWZvcih2YXIgWm49MDtabjxSbi5sZW5ndGg7Wm4rKylpZihSbltabl09PT1KZSl7Um4uc3BsaWNlKFpuLDEpLEplLmlzUmVtb3ZlZD0hMCwwPT09Um4ubGVuZ3RoJiYoSmUuYWxsUmVtb3ZlZD0hMCxKZS50YXJnZXRbQm5dPW51bGwpO2JyZWFrfX1pZihKZS5hbGxSZW1vdmVkKXJldHVybiBmaS5jYWxsKEplLnRhcmdldCxKZS5ldmVudE5hbWUsSmUuY2FwdHVyZT9jbjpEdCxKZS5vcHRpb25zKX06ZnVuY3Rpb24oSmUpe3JldHVybiBmaS5jYWxsKEplLnRhcmdldCxKZS5ldmVudE5hbWUsSmUuaW52b2tlLEplLm9wdGlvbnMpfSx1bD1FdCYmRXQuZGlmZj9FdC5kaWZmOmZ1bmN0aW9uKEplLFp0KXt2YXIgQm49dHlwZW9mIFp0O3JldHVybiJmdW5jdGlvbiI9PT1CbiYmSmUuY2FsbGJhY2s9PT1adHx8Im9iamVjdCI9PT1CbiYmSmUub3JpZ2luYWxEZWxlZ2F0ZT09PVp0fSx0dD1ab25lW20oIlVOUEFUQ0hFRF9FVkVOVFMiKV0sQXQ9elttKCJQQVNTSVZFX0VWRU5UUyIpXSxDdD1mdW5jdGlvbihKZSxadCxCbixSbixabixLbil7cmV0dXJuIHZvaWQgMD09PVpuJiYoWm49ITEpLHZvaWQgMD09PUtuJiYoS249ITEpLGZ1bmN0aW9uKCl7dmFyIG5pPXRoaXN8fHoseWk9YXJndW1lbnRzWzBdO0V0JiZFdC50cmFuc2ZlckV2ZW50TmFtZSYmKHlpPUV0LnRyYW5zZmVyRXZlbnROYW1lKHlpKSk7dmFyIGhyPWFyZ3VtZW50c1sxXTtpZighaHIpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihLJiYidW5jYXVnaHRFeGNlcHRpb24iPT09eWkpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgUm89ITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGhyKXtpZighaHIuaGFuZGxlRXZlbnQpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtSbz0hMH1pZighUW58fFFuKEplLGhyLG5pLGFyZ3VtZW50cykpe3ZhciBLYz1NdCYmISFBdCYmLTEhPT1BdC5pbmRleE9mKHlpKSxLcj1mdW5jdGlvbihKZSxadCl7cmV0dXJuIU10JiYib2JqZWN0Ij09dHlwZW9mIEplJiZKZT8hIUplLmNhcHR1cmU6TXQmJlp0PyJib29sZWFuIj09dHlwZW9mIEplP3tjYXB0dXJlOkplLHBhc3NpdmU6ITB9OkplPyJvYmplY3QiPT10eXBlb2YgSmUmJiExIT09SmUucGFzc2l2ZT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSmUpLHtwYXNzaXZlOiEwfSk6SmU6e3Bhc3NpdmU6ITB9OkplfShhcmd1bWVudHNbMl0sS2MpO2lmKHR0KWZvcih2YXIgdm89MDt2bzx0dC5sZW5ndGg7dm8rKylpZih5aT09PXR0W3ZvXSlyZXR1cm4gS2M/SmUuY2FsbChuaSx5aSxocixLcik6SmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBIcj0hIUtyJiYoImJvb2xlYW4iPT10eXBlb2YgS3J8fEtyLmNhcHR1cmUpLE1tPSEoIUtyfHwib2JqZWN0IiE9dHlwZW9mIEtyKSYmS3Iub25jZSxEaWU9Wm9uZS5jdXJyZW50LE9BPUFuW3lpXTtPQXx8KG10KHlpLE5pKSxPQT1Bblt5aV0pO3ZhciBIVj1PQVtIcj9jOmRdLHdtPW5pW0hWXSx6Vj0hMTtpZih3bSl7aWYoelY9ITAsVm4pZm9yKHZvPTA7dm88d20ubGVuZ3RoO3ZvKyspaWYodWwod21bdm9dLGhyKSlyZXR1cm59ZWxzZSB3bT1uaVtIVl09W107dmFyIHRDLFVWPW5pLmNvbnN0cnVjdG9yLm5hbWUsalY9d3RbVVZdO2pWJiYodEM9alZbeWldKSx0Q3x8KHRDPVVWK1p0KyhOaT9OaSh5aSk6eWkpKSx2bi5vcHRpb25zPUtyLE1tJiYodm4ub3B0aW9ucy5vbmNlPSExKSx2bi50YXJnZXQ9bmksdm4uY2FwdHVyZT1Icix2bi5ldmVudE5hbWU9eWksdm4uaXNFeGlzdGluZz16Vjt2YXIgQ189cGk/T2U6dm9pZCAwO0NfJiYoQ18udGFza0RhdGE9dm4pO3ZhciBRZD1EaWUuc2NoZWR1bGVFdmVudFRhc2sodEMsaHIsQ18sQm4sUm4pO2lmKHZuLnRhcmdldD1udWxsLENfJiYoQ18udGFza0RhdGE9bnVsbCksTW0mJihLci5vbmNlPSEwKSwhTXQmJiJib29sZWFuIj09dHlwZW9mIFFkLm9wdGlvbnN8fChRZC5vcHRpb25zPUtyKSxRZC50YXJnZXQ9bmksUWQuY2FwdHVyZT1IcixRZC5ldmVudE5hbWU9eWksUm8mJihRZC5vcmlnaW5hbERlbGVnYXRlPWhyKSxLbj93bS51bnNoaWZ0KFFkKTp3bS5wdXNoKFFkKSxabilyZXR1cm4gbml9fX07cmV0dXJuIFV0W0hdPUN0KE9uLGV0LFJlLFNuLFduKSxyciYmKFV0W3FlXT1DdChycixydCxmdW5jdGlvbihKZSl7cmV0dXJuIHJyLmNhbGwodm4udGFyZ2V0LHZuLmV2ZW50TmFtZSxKZS5pbnZva2Usdm4ub3B0aW9ucyl9LFNuLFduLCEwKSksVXRbWV09ZnVuY3Rpb24oKXt2YXIgSmU9dGhpc3x8eixadD1hcmd1bWVudHNbMF07RXQmJkV0LnRyYW5zZmVyRXZlbnROYW1lJiYoWnQ9RXQudHJhbnNmZXJFdmVudE5hbWUoWnQpKTt2YXIgQm49YXJndW1lbnRzWzJdLFJuPSEhQm4mJigiYm9vbGVhbiI9PXR5cGVvZiBCbnx8Qm4uY2FwdHVyZSksWm49YXJndW1lbnRzWzFdO2lmKCFabilyZXR1cm4gZmkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFRbnx8UW4oZmksWm4sSmUsYXJndW1lbnRzKSl7dmFyIG5pLEtuPUFuW1p0XTtLbiYmKG5pPUtuW1JuP2M6ZF0pO3ZhciB5aT1uaSYmSmVbbmldO2lmKHlpKWZvcih2YXIgaHI9MDtocjx5aS5sZW5ndGg7aHIrKyl7dmFyIFJvPXlpW2hyXTtpZih1bChSbyxabikpcmV0dXJuIHlpLnNwbGljZShociwxKSxSby5pc1JlbW92ZWQ9ITAsMD09PXlpLmxlbmd0aCYmKFJvLmFsbFJlbW92ZWQ9ITAsSmVbbmldPW51bGwsInN0cmluZyI9PXR5cGVvZiBadCkmJihKZVt1KyJPTl9QUk9QRVJUWSIrWnRdPW51bGwpLFJvLnpvbmUuY2FuY2VsVGFzayhSbyksV24/SmU6dm9pZCAwfXJldHVybiBmaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxVdFtKXT1mdW5jdGlvbigpe3ZhciBKZT10aGlzfHx6LFp0PWFyZ3VtZW50c1swXTtFdCYmRXQudHJhbnNmZXJFdmVudE5hbWUmJihadD1FdC50cmFuc2ZlckV2ZW50TmFtZShadCkpO2Zvcih2YXIgQm49W10sUm49b2UoSmUsTmk/TmkoWnQpOlp0KSxabj0wO1puPFJuLmxlbmd0aDtabisrKXt2YXIgS249Um5bWm5dO0JuLnB1c2goS24ub3JpZ2luYWxEZWxlZ2F0ZT9Lbi5vcmlnaW5hbERlbGVnYXRlOktuLmNhbGxiYWNrKX1yZXR1cm4gQm59LFV0W3NlXT1mdW5jdGlvbigpe3ZhciBKZT10aGlzfHx6LFp0PWFyZ3VtZW50c1swXTtpZihadCl7RXQmJkV0LnRyYW5zZmVyRXZlbnROYW1lJiYoWnQ9RXQudHJhbnNmZXJFdmVudE5hbWUoWnQpKTt2YXIgeWk9QW5bWnRdO2lmKHlpKXt2YXIgS2M9SmVbeWlbZF1dLEtyPUplW3lpW2NdXTtpZihLYylmb3IodmFyIHZvPUtjLnNsaWNlKCksUm49MDtSbjx2by5sZW5ndGg7Um4rKyl0aGlzW1ldLmNhbGwodGhpcyxadCwoSHI9dm9bUm5dKS5vcmlnaW5hbERlbGVnYXRlP0hyLm9yaWdpbmFsRGVsZWdhdGU6SHIuY2FsbGJhY2ssSHIub3B0aW9ucyk7aWYoS3IpZm9yKHZvPUtyLnNsaWNlKCksUm49MDtSbjx2by5sZW5ndGg7Um4rKyl7dmFyIEhyO3RoaXNbWV0uY2FsbCh0aGlzLFp0LChIcj12b1tSbl0pLm9yaWdpbmFsRGVsZWdhdGU/SHIub3JpZ2luYWxEZWxlZ2F0ZTpIci5jYWxsYmFjayxIci5vcHRpb25zKX19fWVsc2V7dmFyIEJuPU9iamVjdC5rZXlzKEplKTtmb3IoUm49MDtSbjxCbi5sZW5ndGg7Um4rKyl7dmFyIEtuPW9uLmV4ZWMoQm5bUm5dKSxuaT1LbiYmS25bMV07bmkmJiJyZW1vdmVMaXN0ZW5lciIhPT1uaSYmdGhpc1tzZV0uY2FsbCh0aGlzLG5pKX10aGlzW3NlXS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoV24pcmV0dXJuIHRoaXN9LHBlKFV0W0hdLE9uKSxwZShVdFtZXSxmaSkscHImJnBlKFV0W3NlXSxwciksa24mJnBlKFV0W0pdLGtuKSwhMH1mb3IodmFyIHZpPVtdLHBuPTA7cG48bGUubGVuZ3RoO3BuKyspdmlbcG5dPUdpKGxlW3BuXSxFKTtyZXR1cm4gdml9ZnVuY3Rpb24gb2UoeixlZSl7aWYoIWVlKXt2YXIgbGU9W107Zm9yKHZhciBFIGluIHope3ZhciBIPW9uLmV4ZWMoRSksWT1IJiZIWzFdO2lmKFkmJighZWV8fFk9PT1lZSkpe3ZhciBKPXpbRV07aWYoSilmb3IodmFyIHNlPTA7c2U8Si5sZW5ndGg7c2UrKylsZS5wdXNoKEpbc2VdKX19cmV0dXJuIGxlfXZhciB6ZT1BbltlZV07emV8fChtdChlZSksemU9QW5bZWVdKTt2YXIgZXQ9elt6ZVtkXV0scWU9elt6ZVtjXV07cmV0dXJuIGV0P3FlP2V0LmNvbmNhdChxZSk6ZXQuc2xpY2UoKTpxZT9xZS5zbGljZSgpOltdfWZ1bmN0aW9uIHN0KHosZWUpe3ZhciBsZT16LkV2ZW50O2xlJiZsZS5wcm90b3R5cGUmJmVlLnBhdGNoTWV0aG9kKGxlLnByb3RvdHlwZSwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIixmdW5jdGlvbihFKXtyZXR1cm4gZnVuY3Rpb24oSCxZKXtIW3ZlXT0hMCxFJiZFLmFwcGx5KEgsWSl9fSl9ZnVuY3Rpb24gWWUoeixlZSxsZSxFLEgpe3ZhciBZPVpvbmUuX19zeW1ib2xfXyhFKTtpZighZWVbWV0pe3ZhciBKPWVlW1ldPWVlW0VdO2VlW0VdPWZ1bmN0aW9uKHNlLHplLGV0KXtyZXR1cm4gemUmJnplLnByb3RvdHlwZSYmSC5mb3JFYWNoKGZ1bmN0aW9uKHFlKXt2YXIgcnQ9IiIuY29uY2F0KGxlLCIuIikuY29uY2F0KEUsIjo6IikrcWUsZHQ9emUucHJvdG90eXBlO3RyeXtpZihkdC5oYXNPd25Qcm9wZXJ0eShxZSkpe3ZhciBTdD16Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihkdCxxZSk7U3QmJlN0LnZhbHVlPyhTdC52YWx1ZT16LndyYXBXaXRoQ3VycmVudFpvbmUoU3QudmFsdWUscnQpLHouX3JlZGVmaW5lUHJvcGVydHkoemUucHJvdG90eXBlLHFlLFN0KSk6ZHRbcWVdJiYoZHRbcWVdPXoud3JhcFdpdGhDdXJyZW50Wm9uZShkdFtxZV0scnQpKX1lbHNlIGR0W3FlXSYmKGR0W3FlXT16LndyYXBXaXRoQ3VycmVudFpvbmUoZHRbcWVdLHJ0KSl9Y2F0Y2h7fX0pLEouY2FsbChlZSxzZSx6ZSxldCl9LHouYXR0YWNoT3JpZ2luVG9QYXRjaGVkKGVlW0VdLEopfX1mdW5jdGlvbiBfdCh6LGVlLGxlKXtpZighbGV8fDA9PT1sZS5sZW5ndGgpcmV0dXJuIGVlO3ZhciBFPWxlLmZpbHRlcihmdW5jdGlvbihZKXtyZXR1cm4gWS50YXJnZXQ9PT16fSk7aWYoIUV8fDA9PT1FLmxlbmd0aClyZXR1cm4gZWU7dmFyIEg9RVswXS5pZ25vcmVQcm9wZXJ0aWVzO3JldHVybiBlZS5maWx0ZXIoZnVuY3Rpb24oWSl7cmV0dXJuLTE9PT1ILmluZGV4T2YoWSl9KX1mdW5jdGlvbiB1dCh6LGVlLGxlLEUpe3omJmNlKHosX3QoeixlZSxsZSksRSl9ZnVuY3Rpb24gc24oeil7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHopLmZpbHRlcihmdW5jdGlvbihlZSl7cmV0dXJuIGVlLnN0YXJ0c1dpdGgoIm9uIikmJmVlLmxlbmd0aD4yfSkubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUuc3Vic3RyaW5nKDIpfSl9ZnVuY3Rpb24gdnQoeixlZSxsZSl7dmFyIEU9bGUuY29uZmlndXJhYmxlO3JldHVybiBtbih6LGVlLGxlPUxlKHosZWUsbGUpLEUpfWZ1bmN0aW9uIGVuKHosZWUpe3JldHVybiB6JiZ6W0xdJiZ6W0xdW2VlXX1mdW5jdGlvbiBMZSh6LGVlLGxlKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKGxlKXx8KGxlLmNvbmZpZ3VyYWJsZT0hMCksbGUuY29uZmlndXJhYmxlfHwoIXpbTF0mJiFPYmplY3QuaXNGcm96ZW4oeikmJmtpKHosTCx7d3JpdGFibGU6ITAsdmFsdWU6e319KSx6W0xdJiYoeltMXVtlZV09ITApKSxsZX1mdW5jdGlvbiBtbih6LGVlLGxlLEUpe3RyeXtyZXR1cm4ga2koeixlZSxsZSl9Y2F0Y2goSil7aWYoIWxlLmNvbmZpZ3VyYWJsZSl0aHJvdyBKO3R5cGVvZiBFPiJ1Ij9kZWxldGUgbGUuY29uZmlndXJhYmxlOmxlLmNvbmZpZ3VyYWJsZT1FO3RyeXtyZXR1cm4ga2koeixlZSxsZSl9Y2F0Y2goc2Upe3ZhciBIPSExO2lmKCgiY3JlYXRlZENhbGxiYWNrIj09PWVlfHwiYXR0YWNoZWRDYWxsYmFjayI9PT1lZXx8ImRldGFjaGVkQ2FsbGJhY2siPT09ZWV8fCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siPT09ZWUpJiYoSD0hMCksIUgpdGhyb3cgc2U7dmFyIFk9bnVsbDt0cnl7WT1KU09OLnN0cmluZ2lmeShsZSl9Y2F0Y2h7WT1sZS50b1N0cmluZygpfWNvbnNvbGUubG9nKCJBdHRlbXB0aW5nIHRvIGNvbmZpZ3VyZSAnIi5jb25jYXQoZWUsIicgd2l0aCBkZXNjcmlwdG9yICciKS5jb25jYXQoWSwiJyBvbiBvYmplY3QgJyIpLmNvbmNhdCh6LCInIGFuZCBnb3QgZXJyb3IsIGdpdmluZyB1cDogIikuY29uY2F0KHNlKSl9fX1ab25lLl9fbG9hZF9wYXRjaCgidXRpbCIsZnVuY3Rpb24oeixlZSxsZSl7dmFyIEU9c24oeik7bGUucGF0Y2hPblByb3BlcnRpZXM9Y2UsbGUucGF0Y2hNZXRob2Q9bmUsbGUuYmluZEFyZ3VtZW50cz1SLGxlLnBhdGNoTWFjcm9UYXNrPWRlO3ZhciBIPWVlLl9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKSxZPWVlLl9fc3ltYm9sX18oIlVOUEFUQ0hFRF9FVkVOVFMiKTt6W1ldJiYoeltIXT16W1ldKSx6W0hdJiYoZWVbSF09ZWVbWV09eltIXSksbGUucGF0Y2hFdmVudFByb3RvdHlwZT1zdCxsZS5wYXRjaEV2ZW50VGFyZ2V0PWZ0LGxlLmlzSUVPckVkZ2U9bHQsbGUuT2JqZWN0RGVmaW5lUHJvcGVydHk9dCxsZS5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9bixsZS5PYmplY3RDcmVhdGU9aSxsZS5BcnJheVNsaWNlPXIsbGUucGF0Y2hDbGFzcz1iZSxsZS53cmFwV2l0aEN1cnJlbnRab25lPXAsbGUuZmlsdGVyUHJvcGVydGllcz1fdCxsZS5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQ9cGUsbGUuX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LGxlLnBhdGNoQ2FsbGJhY2tzPVllLGxlLmdldEdsb2JhbE9iamVjdHM9ZnVuY3Rpb24oKXtyZXR1cm57Z2xvYmFsU291cmNlczp3dCx6b25lU3ltYm9sRXZlbnROYW1lczpBbixldmVudE5hbWVzOkUsaXNCcm93c2VyOnhlLGlzTWl4OlhlLGlzTm9kZTpLLFRSVUVfU1RSOmMsRkFMU0VfU1RSOmQsWk9ORV9TWU1CT0xfUFJFRklYOnUsQUREX0VWRU5UX0xJU1RFTkVSX1NUUjpvLFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6c319fSk7dmFyIHosem89ZnUoZnUoZnUoZnUoZnUoZnUoZnUoZnUoW10sWyJhYm9ydCIsImFuaW1hdGlvbmNhbmNlbCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImF1eGNsaWNrIiwiYmVmb3JlaW5wdXQiLCJibHVyIiwiY2FuY2VsIiwiY2FucGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2hhbmdlIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwiY29tcG9zaXRpb25lbmQiLCJjdWVjaGFuZ2UiLCJjbGljayIsImNsb3NlIiwiY29udGV4dG1lbnUiLCJjdXJlY2hhbmdlIiwiZGJsY2xpY2siLCJkcmFnIiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImRyYWdleGl0IiwiZHJhZ2xlYXZlIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHVyYXRpb25jaGFuZ2UiLCJlbXB0aWVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwiZ290cG9pbnRlcmNhcHR1cmUiLCJpbnB1dCIsImludmFsaWQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImxvYWQiLCJsb2Fkc3RhcnQiLCJsb2FkZWRkYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb3N0cG9pbnRlcmNhcHR1cmUiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsIm1vdXNld2hlZWwiLCJvcmllbnRhdGlvbmNoYW5nZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJwb2ludGVybG9ja2NoYW5nZSIsIm1venBvaW50ZXJsb2NrY2hhbmdlIiwid2Via2l0cG9pbnRlcmxvY2tlcmNoYW5nZSIsInBvaW50ZXJsb2NrZXJyb3IiLCJtb3pwb2ludGVybG9ja2Vycm9yIiwid2Via2l0cG9pbnRlcmxvY2tlcnJvciIsInBvaW50ZXJtb3ZlIiwicG9pbnRvdXQiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJ1cCIsInByb2dyZXNzIiwicmF0ZWNoYW5nZSIsInJlc2V0IiwicmVzaXplIiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInNlbGVjdCIsInNlbGVjdGlvbmNoYW5nZSIsInNlbGVjdHN0YXJ0Iiwic2hvdyIsInNvcnQiLCJzdGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWV1cGRhdGUiLCJ2b2x1bWVjaGFuZ2UiLCJ0b3VjaGNhbmNlbCIsInRvdWNobW92ZSIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5kIiwid2FpdGluZyIsIndoZWVsIl0sITApLFsid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCJ3ZWJnbGNvbnRleHRsb3N0Iiwid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciJdLCEwKSxbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZWVycm9yIl0sITApLFsidG9nZ2xlIl0sITApLFsiYWZ0ZXJzY3JpcHRleGVjdXRlIiwiYmVmb3Jlc2NyaXB0ZXhlY3V0ZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJmcmVlemUiLCJmdWxsc2NyZWVuY2hhbmdlIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCJmdWxsc2NyZWVuZXJyb3IiLCJtb3pmdWxsc2NyZWVuZXJyb3IiLCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3IiLCJtc2Z1bGxzY3JlZW5lcnJvciIsInJlYWR5c3RhdGVjaGFuZ2UiLCJ2aXNpYmlsaXR5Y2hhbmdlIiwicmVzdW1lIl0sITApLFsiYWJzb2x1dGVkZXZpY2VvcmllbnRhdGlvbiIsImFmdGVyaW5wdXQiLCJhZnRlcnByaW50IiwiYXBwaW5zdGFsbGVkIiwiYmVmb3JlaW5zdGFsbHByb21wdCIsImJlZm9yZXByaW50IiwiYmVmb3JldW5sb2FkIiwiZGV2aWNlbGlnaHQiLCJkZXZpY2Vtb3Rpb24iLCJkZXZpY2VvcmllbnRhdGlvbiIsImRldmljZW9yaWVudGF0aW9uYWJzb2x1dGUiLCJkZXZpY2Vwcm94aW1pdHkiLCJoYXNoY2hhbmdlIiwibGFuZ3VhZ2VjaGFuZ2UiLCJtZXNzYWdlIiwibW96YmVmb3JlcGFpbnQiLCJvZmZsaW5lIiwib25saW5lIiwicGFpbnQiLCJwYWdlc2hvdyIsInBhZ2VoaWRlIiwicG9wc3RhdGUiLCJyZWplY3Rpb25oYW5kbGVkIiwic3RvcmFnZSIsInVuaGFuZGxlZHJlamVjdGlvbiIsInVubG9hZCIsInVzZXJwcm94aW1pdHkiLCJ2cmRpc3BsYXljb25uZWN0ZWQiLCJ2cmRpc3BsYXlkaXNjb25uZWN0ZWQiLCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIl0sITApLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLCEwKSxbImFjdGl2YXRlIiwiYWZ0ZXJ1cGRhdGUiLCJhcmlhcmVxdWVzdCIsImJlZm9yZWFjdGl2YXRlIiwiYmVmb3JlZGVhY3RpdmF0ZSIsImJlZm9yZWVkaXRmb2N1cyIsImJlZm9yZXVwZGF0ZSIsImNlbGxjaGFuZ2UiLCJjb250cm9sc2VsZWN0IiwiZGF0YWF2YWlsYWJsZSIsImRhdGFzZXRjaGFuZ2VkIiwiZGF0YXNldGNvbXBsZXRlIiwiZXJyb3J1cGRhdGUiLCJmaWx0ZXJjaGFuZ2UiLCJsYXlvdXRjb21wbGV0ZSIsImxvc2VjYXB0dXJlIiwibW92ZSIsIm1vdmVlbmQiLCJtb3Zlc3RhcnQiLCJwcm9wZXJ0eWNoYW5nZSIsInJlc2l6ZWVuZCIsInJlc2l6ZXN0YXJ0Iiwicm93ZW50ZXIiLCJyb3dleGl0Iiwicm93c2RlbGV0ZSIsInJvd3NpbnNlcnRlZCIsImNvbW1hbmQiLCJjb21wYXNzbmVlZHNjYWxpYnJhdGlvbiIsImRlYWN0aXZhdGUiLCJoZWxwIiwibXNjb250ZW50em9vbSIsIm1zbWFuaXB1bGF0aW9uc3RhdGVjaGFuZ2VkIiwibXNnZXN0dXJlY2hhbmdlIiwibXNnZXN0dXJlZG91YmxldGFwIiwibXNnZXN0dXJlZW5kIiwibXNnZXN0dXJlaG9sZCIsIm1zZ2VzdHVyZXN0YXJ0IiwibXNnZXN0dXJldGFwIiwibXNnb3Rwb2ludGVyY2FwdHVyZSIsIm1zaW5lcnRpYXN0YXJ0IiwibXNsb3N0cG9pbnRlcmNhcHR1cmUiLCJtc3BvaW50ZXJjYW5jZWwiLCJtc3BvaW50ZXJkb3duIiwibXNwb2ludGVyZW50ZXIiLCJtc3BvaW50ZXJob3ZlciIsIm1zcG9pbnRlcmxlYXZlIiwibXNwb2ludGVybW92ZSIsIm1zcG9pbnRlcm91dCIsIm1zcG9pbnRlcm92ZXIiLCJtc3BvaW50ZXJ1cCIsInBvaW50ZXJvdXQiLCJtc3NpdGVtb2RlanVtcGxpc3RpdGVtcmVtb3ZlZCIsIm1zdGh1bWJuYWlsY2xpY2siLCJzdG9wIiwic3RvcmFnZWNvbW1pdCJdLCEwKTsoej10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KVsoImxlZ2FjeVBhdGNoIiwoei5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyIpKyJsZWdhY3lQYXRjaCIpXT1mdW5jdGlvbigpe3ZhciBFPXouWm9uZTtFLl9fbG9hZF9wYXRjaCgiZGVmaW5lUHJvcGVydHkiLGZ1bmN0aW9uKEgsWSxKKXtKLl9yZWRlZmluZVByb3BlcnR5PXZ0LHRpPVpvbmUuX19zeW1ib2xfXyxraT1PYmplY3RbdGkoImRlZmluZVByb3BlcnR5IildPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxGaT1PYmplY3RbdGkoImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFo9T2JqZWN0LmNyZWF0ZSxMPXRpKCJ1bmNvbmZpZ3VyYWJsZXMiKSxPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oeixlZSxsZSl7aWYoZW4oeixlZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFzc2lnbiB0byByZWFkIG9ubHkgcHJvcGVydHkgJyIrZWUrIicgb2YgIit6KTt2YXIgRT1sZS5jb25maWd1cmFibGU7cmV0dXJuInByb3RvdHlwZSIhPT1lZSYmKGxlPUxlKHosZWUsbGUpKSxtbih6LGVlLGxlLEUpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbih6LGVlKXtPYmplY3Qua2V5cyhlZSkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeixKLGVlW0pdKX0pO2Zvcih2YXIgbGU9MCxFPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZWUpO2xlPEUubGVuZ3RoO2xlKyspe3ZhciBIPUVbbGVdO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWUsSCk/LmVudW1lcmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LEgsZWVbSF0pfXJldHVybiB6fSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKHosZWUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZWUmJiFPYmplY3QuaXNGcm96ZW4oZWUpJiZPYmplY3Qua2V5cyhlZSkuZm9yRWFjaChmdW5jdGlvbihsZSl7ZWVbbGVdPUxlKHosbGUsZWVbbGVdKX0pLFooeixlZSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9ZnVuY3Rpb24oeixlZSl7dmFyIGxlPUZpKHosZWUpO3JldHVybiBsZSYmZW4oeixlZSkmJihsZS5jb25maWd1cmFibGU9ITEpLGxlfX0pLEUuX19sb2FkX3BhdGNoKCJyZWdpc3RlckVsZW1lbnQiLGZ1bmN0aW9uKEgsWSxKKXshZnVuY3Rpb24oeixlZSl7dmFyIGxlPWVlLmdldEdsb2JhbE9iamVjdHMoKTsobGUuaXNCcm93c2VyfHxsZS5pc01peCkmJiJyZWdpc3RlckVsZW1lbnQiaW4gei5kb2N1bWVudCYmZWUucGF0Y2hDYWxsYmFja3MoZWUsZG9jdW1lbnQsIkRvY3VtZW50IiwicmVnaXN0ZXJFbGVtZW50IixbImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfShILEopfSksRS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0TGVnYWN5IixmdW5jdGlvbihILFksSil7KGZ1bmN0aW9uKHosZWUpe3ZhciBsZT1lZS5nZXRHbG9iYWxPYmplY3RzKCksRT1sZS5ldmVudE5hbWVzLEg9bGUuZ2xvYmFsU291cmNlcyxZPWxlLnpvbmVTeW1ib2xFdmVudE5hbWVzLEo9bGUuVFJVRV9TVFIsc2U9bGUuRkFMU0VfU1RSLHplPWxlLlpPTkVfU1lNQk9MX1BSRUZJWCxxZT0iQXBwbGljYXRpb25DYWNoZSxFdmVudFNvdXJjZSxGaWxlUmVhZGVyLElucHV0TWV0aG9kQ29udGV4dCxNZWRpYUNvbnRyb2xsZXIsTWVzc2FnZVBvcnQsTm9kZSxQZXJmb3JtYW5jZSxTVkdFbGVtZW50SW5zdGFuY2UsU2hhcmVkV29ya2VyLFRleHRUcmFjayxUZXh0VHJhY2tDdWUsVGV4dFRyYWNrTGlzdCxXZWJLaXROYW1lZEZsb3csV2luZG93LFdvcmtlcixXb3JrZXJHbG9iYWxTY29wZSxYTUxIdHRwUmVxdWVzdCxYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LFhNTEh0dHBSZXF1ZXN0VXBsb2FkLElEQlJlcXVlc3QsSURCT3BlbkRCUmVxdWVzdCxJREJEYXRhYmFzZSxJREJUcmFuc2FjdGlvbixJREJDdXJzb3IsREJJbmRleCxXZWJTb2NrZXQiLnNwbGl0KCIsIikscnQ9IkV2ZW50VGFyZ2V0IixkdD1bXSxTdD16Lnd0ZixEdD0iQW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29udGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxGcmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJLExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2QsT0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVzcyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJsZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxlLFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLnNwbGl0KCIsIik7U3Q/ZHQ9RHQubWFwKGZ1bmN0aW9uKE1yKXtyZXR1cm4iSFRNTCIrTXIrIkVsZW1lbnQifSkuY29uY2F0KHFlKTp6W3J0XT9kdC5wdXNoKHJ0KTpkdD1xZTtmb3IodmFyIGNuPXouX19ab25lX2Rpc2FibGVfSUVfY2hlY2t8fCExLEdpPXouX19ab25lX2VuYWJsZV9jcm9zc19jb250ZXh0X2NoZWNrfHwhMSx2aT1lZS5pc0lFT3JFZGdlKCksUG49IltvYmplY3QgRnVuY3Rpb25XcmFwcGVyXSIsRXQ9ImZ1bmN0aW9uIF9fQlJPV1NFUlRPT0xTX0NPTlNPTEVfU0FGRUZVTkMoKSB7IFtuYXRpdmUgY29kZV0gfSIscGk9e01TUG9pbnRlckNhbmNlbDoicG9pbnRlcmNhbmNlbCIsTVNQb2ludGVyRG93bjoicG9pbnRlcmRvd24iLE1TUG9pbnRlckVudGVyOiJwb2ludGVyZW50ZXIiLE1TUG9pbnRlckhvdmVyOiJwb2ludGVyaG92ZXIiLE1TUG9pbnRlckxlYXZlOiJwb2ludGVybGVhdmUiLE1TUG9pbnRlck1vdmU6InBvaW50ZXJtb3ZlIixNU1BvaW50ZXJPdXQ6InBvaW50ZXJvdXQiLE1TUG9pbnRlck92ZXI6InBvaW50ZXJvdmVyIixNU1BvaW50ZXJVcDoicG9pbnRlcnVwIn0sUW49MDtRbjxFLmxlbmd0aDtRbisrKXt2YXIgTmk9emUrKChWbj1FW1FuXSkrc2UpLHZuPXplKyhWbitKKTtZW1ZuXT17fSxZW1ZuXVtzZV09TmksWVtWbl1bSl09dm59Zm9yKFFuPTA7UW48RHQubGVuZ3RoO1FuKyspZm9yKHZhciBPbj1EdFtRbl0sZmk9SFtPbl09e30sa249MDtrbjxFLmxlbmd0aDtrbisrKXt2YXIgVm47ZmlbVm49RVtrbl1dPU9uKyIuYWRkRXZlbnRMaXN0ZW5lcjoiK1ZufXZhciBycj1bXTtmb3IoUW49MDtRbjxkdC5sZW5ndGg7UW4rKyl7dmFyIHlzPXpbZHRbUW5dXTtyci5wdXNoKHlzJiZ5cy5wcm90b3R5cGUpfWVlLnBhdGNoRXZlbnRUYXJnZXQoeixlZSxycix7dmg6ZnVuY3Rpb24oTXIsZnIsZ3QsbWUpe2lmKCFjbiYmdmkpaWYoR2kpdHJ5e2lmKChoZT1mci50b1N0cmluZygpKT09PVBufHxoZT09RXQpcmV0dXJuIE1yLmFwcGx5KGd0LG1lKSwhMX1jYXRjaHtyZXR1cm4gTXIuYXBwbHkoZ3QsbWUpLCExfWVsc2V7dmFyIGhlO2lmKChoZT1mci50b1N0cmluZygpKT09PVBufHxoZT09RXQpcmV0dXJuIE1yLmFwcGx5KGd0LG1lKSwhMX1lbHNlIGlmKEdpKXRyeXtmci50b1N0cmluZygpfWNhdGNoe3JldHVybiBNci5hcHBseShndCxtZSksITF9cmV0dXJuITB9LHRyYW5zZmVyRXZlbnROYW1lOmZ1bmN0aW9uKE1yKXtyZXR1cm4gcGlbTXJdfHxNcn19KSxab25lW2VlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXT0hIXpbcnRdfSkoSCxKKSxmdW5jdGlvbih6LGVlKXt2YXIgbGU9ei5nZXRHbG9iYWxPYmplY3RzKCk7aWYoKCFsZS5pc05vZGV8fGxlLmlzTWl4KSYmIWZ1bmN0aW9uKHosZWUpe3ZhciBsZT16LmdldEdsb2JhbE9iamVjdHMoKTtpZigobGUuaXNCcm93c2VyfHxsZS5pc01peCkmJiF6Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKSYmdHlwZW9mIEVsZW1lbnQ8InUiKXt2YXIgWT16Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpO2lmKFkmJiFZLmNvbmZpZ3VyYWJsZSlyZXR1cm4hMTtpZihZKXt6Lk9iamVjdERlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSk7dmFyIHNlPSEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikub25jbGljaztyZXR1cm4gei5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIsWSksc2V9fXZhciB6ZT1lZS5YTUxIdHRwUmVxdWVzdDtpZighemUpcmV0dXJuITE7dmFyIGV0PSJvbnJlYWR5c3RhdGVjaGFuZ2UiLHFlPXplLnByb3RvdHlwZSxydD16Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihxZSxldCk7aWYocnQpcmV0dXJuIHouT2JqZWN0RGVmaW5lUHJvcGVydHkocWUsZXQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pLHNlPSEhKGR0PW5ldyB6ZSkub25yZWFkeXN0YXRlY2hhbmdlLHouT2JqZWN0RGVmaW5lUHJvcGVydHkocWUsZXQscnR8fHt9KSxzZTt2YXIgU3Q9ei5zeW1ib2woImZha2UiKTt6Lk9iamVjdERlZmluZVByb3BlcnR5KHFlLGV0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tTdF19LHNldDpmdW5jdGlvbih2aSl7dGhpc1tTdF09dml9fSk7dmFyIGR0LER0PWZ1bmN0aW9uKCl7fTtyZXR1cm4oZHQ9bmV3IHplKS5vbnJlYWR5c3RhdGVjaGFuZ2U9RHQsc2U9ZHRbU3RdPT09RHQsZHQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsc2V9KHosZWUpKXt2YXIgWT10eXBlb2YgV2ViU29ja2V0PCJ1IjsoZnVuY3Rpb24oeil7Zm9yKHZhciBlZT16LnN5bWJvbCgidW5ib3VuZCIpLGxlPWZ1bmN0aW9uKEgpe3ZhciBZPXpvW0hdLEo9Im9uIitZO3NlbGYuYWRkRXZlbnRMaXN0ZW5lcihZLGZ1bmN0aW9uKHNlKXt2YXIgZXQscWUsemU9c2UudGFyZ2V0O2ZvcihxZT16ZT96ZS5jb25zdHJ1Y3Rvci5uYW1lKyIuIitKOiJ1bmtub3duLiIrSjt6ZTspemVbSl0mJiF6ZVtKXVtlZV0mJigoZXQ9ei53cmFwV2l0aEN1cnJlbnRab25lKHplW0pdLHFlKSlbZWVdPXplW0pdLHplW0pdPWV0KSx6ZT16ZS5wYXJlbnRFbGVtZW50fSwhMCl9LEU9MDtFPHpvLmxlbmd0aDtFKyspbGUoRSl9KSh6KSx6LnBhdGNoQ2xhc3MoIlhNTEh0dHBSZXF1ZXN0IiksWSYmZnVuY3Rpb24oeixlZSl7dmFyIGxlPXouZ2V0R2xvYmFsT2JqZWN0cygpLEU9bGUuQUREX0VWRU5UX0xJU1RFTkVSX1NUUixIPWxlLlJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFIsWT1lZS5XZWJTb2NrZXQ7ZWUuRXZlbnRUYXJnZXR8fHoucGF0Y2hFdmVudFRhcmdldChlZSx6LFtZLnByb3RvdHlwZV0pLGVlLldlYlNvY2tldD1mdW5jdGlvbih6ZSxldCl7dmFyIHJ0LGR0LHFlPWFyZ3VtZW50cy5sZW5ndGg+MT9uZXcgWSh6ZSxldCk6bmV3IFkoemUpLFN0PXouT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHFlLCJvbm1lc3NhZ2UiKTtyZXR1cm4gU3QmJiExPT09U3QuY29uZmlndXJhYmxlPyhydD16Lk9iamVjdENyZWF0ZShxZSksZHQ9cWUsW0UsSCwic2VuZCIsImNsb3NlIl0uZm9yRWFjaChmdW5jdGlvbihEdCl7cnRbRHRdPWZ1bmN0aW9uKCl7dmFyIGNuPXouQXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoRHQ9PT1FfHxEdD09PUgpe3ZhciBHaT1jbi5sZW5ndGg+MD9jblswXTp2b2lkIDA7aWYoR2kpe3ZhciB2aT1ab25lLl9fc3ltYm9sX18oIk9OX1BST1BFUlRZIitHaSk7cWVbdmldPXJ0W3ZpXX19cmV0dXJuIHFlW0R0XS5hcHBseShxZSxjbil9fSkpOnJ0PXFlLHoucGF0Y2hPblByb3BlcnRpZXMocnQsWyJjbG9zZSIsImVycm9yIiwibWVzc2FnZSIsIm9wZW4iXSxkdCkscnR9O3ZhciBKPWVlLldlYlNvY2tldDtmb3IodmFyIHNlIGluIFkpSltzZV09WVtzZV19KHosZWUpLFpvbmVbei5zeW1ib2woInBhdGNoRXZlbnRzIildPSEwfX0oSixIKX0pfTt2YXIgdnM9bSgiem9uZVRhc2siKTtmdW5jdGlvbiBkbCh6LGVlLGxlLEUpe3ZhciBIPW51bGwsWT1udWxsO2xlKz1FO3ZhciBKPXt9O2Z1bmN0aW9uIHNlKGV0KXt2YXIgcWU9ZXQuZGF0YTtyZXR1cm4gcWUuYXJnc1swXT1mdW5jdGlvbigpe3JldHVybiBldC5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxxZS5oYW5kbGVJZD1ILmFwcGx5KHoscWUuYXJncyksZXR9ZnVuY3Rpb24gemUoZXQpe3JldHVybiBZLmNhbGwoeixldC5kYXRhLmhhbmRsZUlkKX1IPW5lKHosZWUrPUUsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihxZSxydCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WzBdKXt2YXIgZHQ9e2lzUGVyaW9kaWM6IkludGVydmFsIj09PUUsZGVsYXk6IlRpbWVvdXQiPT09RXx8IkludGVydmFsIj09PUU/cnRbMV18fDA6dm9pZCAwLGFyZ3M6cnR9LFN0PXJ0WzBdO3J0WzBdPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtkdC5pc1BlcmlvZGljfHwoIm51bWJlciI9PXR5cGVvZiBkdC5oYW5kbGVJZD9kZWxldGUgSltkdC5oYW5kbGVJZF06ZHQuaGFuZGxlSWQmJihkdC5oYW5kbGVJZFt2c109bnVsbCkpfX07dmFyIER0PWYoZWUscnRbMF0sZHQsc2UsemUpO2lmKCFEdClyZXR1cm4gRHQ7dmFyIGNuPUR0LmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjbj9KW2NuXT1EdDpjbiYmKGNuW3ZzXT1EdCksY24mJmNuLnJlZiYmY24udW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi51bnJlZiYmKER0LnJlZj1jbi5yZWYuYmluZChjbiksRHQudW5yZWY9Y24udW5yZWYuYmluZChjbikpLCJudW1iZXIiPT10eXBlb2YgY258fGNuP2NuOkR0fXJldHVybiBldC5hcHBseSh6LHJ0KX19KSxZPW5lKHosbGUsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihxZSxydCl7dmFyIFN0LGR0PXJ0WzBdOyJudW1iZXIiPT10eXBlb2YgZHQ/U3Q9SltkdF06KFN0PWR0JiZkdFt2c10pfHwoU3Q9ZHQpLFN0JiYic3RyaW5nIj09dHlwZW9mIFN0LnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1TdC5zdGF0ZSYmKFN0LmNhbmNlbEZuJiZTdC5kYXRhLmlzUGVyaW9kaWN8fDA9PT1TdC5ydW5Db3VudCkmJigibnVtYmVyIj09dHlwZW9mIGR0P2RlbGV0ZSBKW2R0XTpkdCYmKGR0W3ZzXT1udWxsKSxTdC56b25lLmNhbmNlbFRhc2soU3QpKTpldC5hcHBseSh6LHJ0KX19KX1ab25lLl9fbG9hZF9wYXRjaCgibGVnYWN5IixmdW5jdGlvbih6KXt2YXIgZWU9eltab25lLl9fc3ltYm9sX18oImxlZ2FjeVBhdGNoIildO2VlJiZlZSgpfSksWm9uZS5fX2xvYWRfcGF0Y2goInF1ZXVlTWljcm90YXNrIixmdW5jdGlvbih6LGVlLGxlKXtsZS5wYXRjaE1ldGhvZCh6LCJxdWV1ZU1pY3JvdGFzayIsZnVuY3Rpb24oRSl7cmV0dXJuIGZ1bmN0aW9uKEgsWSl7ZWUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygicXVldWVNaWNyb3Rhc2siLFlbMF0pfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goInRpbWVycyIsZnVuY3Rpb24oeil7dmFyIGxlPSJjbGVhciI7ZGwoeiwic2V0IixsZSwiVGltZW91dCIpLGRsKHosInNldCIsbGUsIkludGVydmFsIiksZGwoeiwic2V0IixsZSwiSW1tZWRpYXRlIil9KSxab25lLl9fbG9hZF9wYXRjaCgicmVxdWVzdEFuaW1hdGlvbkZyYW1lIixmdW5jdGlvbih6KXtkbCh6LCJyZXF1ZXN0IiwiY2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxkbCh6LCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxkbCh6LCJ3ZWJraXRSZXF1ZXN0Iiwid2Via2l0Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJibG9ja2luZyIsZnVuY3Rpb24oeixlZSl7Zm9yKHZhciBsZT1bImFsZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdLEU9MDtFPGxlLmxlbmd0aDtFKyspbmUoeixsZVtFXSxmdW5jdGlvbihZLEosc2Upe3JldHVybiBmdW5jdGlvbih6ZSxldCl7cmV0dXJuIGVlLmN1cnJlbnQucnVuKFkseixldCxzZSl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLGZ1bmN0aW9uKHosZWUsbGUpeyhmdW5jdGlvbih6LGVlKXtlZS5wYXRjaEV2ZW50UHJvdG90eXBlKHosZWUpfSkoeixsZSksZnVuY3Rpb24oeixlZSl7aWYoIVpvbmVbZWUuc3ltYm9sKCJwYXRjaEV2ZW50VGFyZ2V0IildKXtmb3IodmFyIGxlPWVlLmdldEdsb2JhbE9iamVjdHMoKSxFPWxlLmV2ZW50TmFtZXMsSD1sZS56b25lU3ltYm9sRXZlbnROYW1lcyxZPWxlLlRSVUVfU1RSLEo9bGUuRkFMU0VfU1RSLHNlPWxlLlpPTkVfU1lNQk9MX1BSRUZJWCx6ZT0wO3plPEUubGVuZ3RoO3plKyspe3ZhciBldD1FW3plXSxkdD1zZSsoZXQrSiksU3Q9c2UrKGV0K1kpO0hbZXRdPXt9LEhbZXRdW0pdPWR0LEhbZXRdW1ldPVN0fXZhciBEdD16LkV2ZW50VGFyZ2V0O0R0JiZEdC5wcm90b3R5cGUmJmVlLnBhdGNoRXZlbnRUYXJnZXQoeixlZSxbRHQmJkR0LnByb3RvdHlwZV0pfX0oeixsZSk7dmFyIEU9ei5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O0UmJkUucHJvdG90eXBlJiZsZS5wYXRjaEV2ZW50VGFyZ2V0KHosbGUsW0UucHJvdG90eXBlXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiTXV0YXRpb25PYnNlcnZlciIsZnVuY3Rpb24oeixlZSxsZSl7YmUoIk11dGF0aW9uT2JzZXJ2ZXIiKSxiZSgiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIkludGVyc2VjdGlvbk9ic2VydmVyIixmdW5jdGlvbih6LGVlLGxlKXtiZSgiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJGaWxlUmVhZGVyIixmdW5jdGlvbih6LGVlLGxlKXtiZSgiRmlsZVJlYWRlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IixmdW5jdGlvbih6LGVlLGxlKXshZnVuY3Rpb24oeixlZSl7aWYoKCFLfHxYZSkmJiFab25lW3ouc3ltYm9sKCJwYXRjaEV2ZW50cyIpXSl7dmFyIGxlPWVlLl9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcyxFPVtdO2lmKHhlKXt2YXIgSD13aW5kb3c7RT1FLmNvbmNhdChbIkRvY3VtZW50IiwiU1ZHRWxlbWVudCIsIkVsZW1lbnQiLCJIVE1MRWxlbWVudCIsIkhUTUxCb2R5RWxlbWVudCIsIkhUTUxNZWRpYUVsZW1lbnQiLCJIVE1MRnJhbWVTZXRFbGVtZW50IiwiSFRNTEZyYW1lRWxlbWVudCIsIkhUTUxJRnJhbWVFbGVtZW50IiwiSFRNTE1hcnF1ZWVFbGVtZW50IiwiV29ya2VyIl0pO3ZhciBZPWZ1bmN0aW9uKCl7dHJ5e3ZhciB6PU0ubmF2aWdhdG9yLnVzZXJBZ2VudDtpZigtMSE9PXouaW5kZXhPZigiTVNJRSAiKXx8LTEhPT16LmluZGV4T2YoIlRyaWRlbnQvIikpcmV0dXJuITB9Y2F0Y2h7fXJldHVybiExfSgpP1t7dGFyZ2V0OkgsaWdub3JlUHJvcGVydGllczpbImVycm9yIl19XTpbXTt1dChILHNuKEgpLGxlJiZsZS5jb25jYXQoWSksZShIKSl9RT1FLmNvbmNhdChbIlhNTEh0dHBSZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCIsIklEQkluZGV4IiwiSURCUmVxdWVzdCIsIklEQk9wZW5EQlJlcXVlc3QiLCJJREJEYXRhYmFzZSIsIklEQlRyYW5zYWN0aW9uIiwiSURCQ3Vyc29yIiwiV2ViU29ja2V0Il0pO2Zvcih2YXIgSj0wO0o8RS5sZW5ndGg7SisrKXt2YXIgc2U9ZWVbRVtKXV07c2UmJnNlLnByb3RvdHlwZSYmdXQoc2UucHJvdG90eXBlLHNuKHNlLnByb3RvdHlwZSksbGUpfX19KGxlLHopfSksWm9uZS5fX2xvYWRfcGF0Y2goImN1c3RvbUVsZW1lbnRzIixmdW5jdGlvbih6LGVlLGxlKXshZnVuY3Rpb24oeixlZSl7dmFyIGxlPWVlLmdldEdsb2JhbE9iamVjdHMoKTsobGUuaXNCcm93c2VyfHxsZS5pc01peCkmJnouY3VzdG9tRWxlbWVudHMmJiJjdXN0b21FbGVtZW50cyJpbiB6JiZlZS5wYXRjaENhbGxiYWNrcyhlZSx6LmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfSh6LGxlKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJYSFIiLGZ1bmN0aW9uKHosZWUpeyFmdW5jdGlvbihldCl7dmFyIHFlPWV0LlhNTEh0dHBSZXF1ZXN0O2lmKHFlKXt2YXIgcnQ9cWUucHJvdG90eXBlLFN0PXJ0W2FdLER0PXJ0W2xdO2lmKCFTdCl7dmFyIGNuPWV0LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYoY24pe3ZhciBHaT1jbi5wcm90b3R5cGU7U3Q9R2lbYV0sRHQ9R2lbbF19fXZhciB2aT0icmVhZHlzdGF0ZWNoYW5nZSIscG49InNjaGVkdWxlZCIsUW49bmUocnQsIm9wZW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLGZpKXtyZXR1cm4gT25bRV09MD09ZmlbMl0sT25bSl09ZmlbMV0sUW4uYXBwbHkoT24sZmkpfX0pLFduPW0oImZldGNoVGFza0Fib3J0aW5nIiksVXQ9bSgiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLE5pPW5lKHJ0LCJzZW5kIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihPbixmaSl7aWYoITA9PT1lZS5jdXJyZW50W1V0XXx8T25bRV0pcmV0dXJuIE5pLmFwcGx5KE9uLGZpKTt2YXIga249e3RhcmdldDpPbix1cmw6T25bSl0saXNQZXJpb2RpYzohMSxhcmdzOmZpLGFib3J0ZWQ6ITF9LHByPWYoIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLEV0LGtuLFBuLHBpKTtPbiYmITA9PT1PbltzZV0mJiFrbi5hYm9ydGVkJiZwci5zdGF0ZT09PXBuJiZwci5pbnZva2UoKX19KSx2bj1uZShydCwiYWJvcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLGZpKXt2YXIga249ZnVuY3Rpb24oT24pe3JldHVybiBPbltsZV19KE9uKTtpZihrbiYmInN0cmluZyI9PXR5cGVvZiBrbi50eXBlKXtpZihudWxsPT1rbi5jYW5jZWxGbnx8a24uZGF0YSYma24uZGF0YS5hYm9ydGVkKXJldHVybjtrbi56b25lLmNhbmNlbFRhc2soa24pfWVsc2UgaWYoITA9PT1lZS5jdXJyZW50W1duXSlyZXR1cm4gdm4uYXBwbHkoT24sZmkpfX0pfWZ1bmN0aW9uIFBuKE9uKXt2YXIgZmk9T24uZGF0YSxrbj1maS50YXJnZXQ7a25bWV09ITEsa25bc2VdPSExO3ZhciBwcj1rbltIXTtTdHx8KFN0PWtuW2FdLER0PWtuW2xdKSxwciYmRHQuY2FsbChrbix2aSxwcik7dmFyIHJyPWtuW0hdPWZ1bmN0aW9uKCl7aWYoa24ucmVhZHlTdGF0ZT09PWtuLkRPTkUpaWYoIWZpLmFib3J0ZWQmJmtuW1ldJiZPbi5zdGF0ZT09PXBuKXt2YXIgTXI9a25bZWUuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2lmKDAhPT1rbi5zdGF0dXMmJk1yJiZNci5sZW5ndGg+MCl7dmFyIGZyPU9uLmludm9rZTtPbi5pbnZva2U9ZnVuY3Rpb24oKXtmb3IodmFyIGd0PWtuW2VlLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXSxtZT0wO21lPGd0Lmxlbmd0aDttZSsrKWd0W21lXT09PU9uJiZndC5zcGxpY2UobWUsMSk7IWZpLmFib3J0ZWQmJk9uLnN0YXRlPT09cG4mJmZyLmNhbGwoT24pfSxNci5wdXNoKE9uKX1lbHNlIE9uLmludm9rZSgpfWVsc2UhZmkuYWJvcnRlZCYmITE9PT1rbltZXSYmKGtuW3NlXT0hMCl9O3JldHVybiBTdC5jYWxsKGtuLHZpLHJyKSxrbltsZV18fChrbltsZV09T24pLE5pLmFwcGx5KGtuLGZpLmFyZ3MpLGtuW1ldPSEwLE9ufWZ1bmN0aW9uIEV0KCl7fWZ1bmN0aW9uIHBpKE9uKXt2YXIgZmk9T24uZGF0YTtyZXR1cm4gZmkuYWJvcnRlZD0hMCx2bi5hcHBseShmaS50YXJnZXQsZmkuYXJncyl9fSh6KTt2YXIgbGU9bSgieGhyVGFzayIpLEU9bSgieGhyU3luYyIpLEg9bSgieGhyTGlzdGVuZXIiKSxZPW0oInhoclNjaGVkdWxlZCIpLEo9bSgieGhyVVJMIiksc2U9bSgieGhyRXJyb3JCZWZvcmVTY2hlZHVsZWQiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJnZW9sb2NhdGlvbiIsZnVuY3Rpb24oeil7ei5uYXZpZ2F0b3ImJnoubmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZmdW5jdGlvbih6LGVlKXtmb3IodmFyIGxlPXouY29uc3RydWN0b3IubmFtZSxFPWZ1bmN0aW9uKFkpe3ZhciBldCxxZSxKPWVlW1ldLHNlPXpbSl07aWYoc2Upe2lmKCFWKG4oeixKKSkpcmV0dXJuImNvbnRpbnVlIjt6W0pdPShxZT1mdW5jdGlvbigpe3JldHVybiBldC5hcHBseSh0aGlzLFIoYXJndW1lbnRzLGxlKyIuIitKKSl9LHBlKHFlLGV0PXNlKSxxZSl9fSxIPTA7SDxlZS5sZW5ndGg7SCsrKUUoSCl9KHoubmF2aWdhdG9yLmdlb2xvY2F0aW9uLFsiZ2V0Q3VycmVudFBvc2l0aW9uIiwid2F0Y2hQb3NpdGlvbiJdKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLGZ1bmN0aW9uKHosZWUpe2Z1bmN0aW9uIGxlKEUpe3JldHVybiBmdW5jdGlvbihIKXtvZSh6LEUpLmZvckVhY2goZnVuY3Rpb24oSil7dmFyIHNlPXouUHJvbWlzZVJlamVjdGlvbkV2ZW50O2lmKHNlKXt2YXIgemU9bmV3IHNlKEUse3Byb21pc2U6SC5wcm9taXNlLHJlYXNvbjpILnJlamVjdGlvbn0pO0ouaW52b2tlKHplKX19KX19ei5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJihlZVttKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1sZSgidW5oYW5kbGVkcmVqZWN0aW9uIiksZWVbbSgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09bGUoInJlamVjdGlvbmhhbmRsZWQiKSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUobik6bigpfSk7ZnVuY3Rpb24gX24obil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gU20obil7bGV0IGU9bihpPT57RXJyb3IuY2FsbChpKSxpLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfSk7cmV0dXJuIGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9dmFyIG5DPVNtKG49PmZ1bmN0aW9uKGUpe24odGhpcyksdGhpcy5tZXNzYWdlPWU/YCR7ZS5sZW5ndGh9IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2UubWFwKChpLHIpPT5gJHtyKzF9KSAke2kudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWV9KTtmdW5jdGlvbiBEcChuLHQpe2lmKG4pe2xldCBlPW4uaW5kZXhPZih0KTswPD1lJiZuLnNwbGljZShlLDEpfX12YXIgTW49Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbml0aWFsVGVhcmRvd249dCx0aGlzLmNsb3NlZD0hMSx0aGlzLl9wYXJlbnRhZ2U9bnVsbCx0aGlzLl9maW5hbGl6ZXJzPW51bGx9dW5zdWJzY3JpYmUoKXtsZXQgdDtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO2xldHtfcGFyZW50YWdlOmV9PXRoaXM7aWYoZSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbyBvZiBlKW8ucmVtb3ZlKHRoaXMpO2Vsc2UgZS5yZW1vdmUodGhpcyk7bGV0e2luaXRpYWxUZWFyZG93bjppfT10aGlzO2lmKF9uKGkpKXRyeXtpKCl9Y2F0Y2gobyl7dD1vIGluc3RhbmNlb2YgbkM/by5lcnJvcnM6W29dfWxldHtfZmluYWxpemVyczpyfT10aGlzO2lmKHIpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IobGV0IG8gb2Ygcil0cnl7cVYobyl9Y2F0Y2gocyl7dD10Pz9bXSxzIGluc3RhbmNlb2YgbkM/dD1bLi4udCwuLi5zLmVycm9yc106dC5wdXNoKHMpfX1pZih0KXRocm93IG5ldyBuQyh0KX19YWRkKHQpe3ZhciBlO2lmKHQmJnQhPT10aGlzKWlmKHRoaXMuY2xvc2VkKXFWKHQpO2Vsc2V7aWYodCBpbnN0YW5jZW9mIE1uKXtpZih0LmNsb3NlZHx8dC5faGFzUGFyZW50KHRoaXMpKXJldHVybjt0Ll9hZGRQYXJlbnQodGhpcyl9KHRoaXMuX2ZpbmFsaXplcnM9bnVsbCE9PShlPXRoaXMuX2ZpbmFsaXplcnMpJiZ2b2lkIDAhPT1lP2U6W10pLnB1c2godCl9fV9oYXNQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpcztyZXR1cm4gZT09PXR8fEFycmF5LmlzQXJyYXkoZSkmJmUuaW5jbHVkZXModCl9X2FkZFBhcmVudCh0KXtsZXR7X3BhcmVudGFnZTplfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGUpPyhlLnB1c2godCksZSk6ZT9bZSx0XTp0fV9yZW1vdmVQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpcztlPT09dD90aGlzLl9wYXJlbnRhZ2U9bnVsbDpBcnJheS5pc0FycmF5KGUpJiZEcChlLHQpfXJlbW92ZSh0KXtsZXR7X2ZpbmFsaXplcnM6ZX09dGhpcztlJiZEcChlLHQpLHQgaW5zdGFuY2VvZiBNbiYmdC5fcmVtb3ZlUGFyZW50KHRoaXMpfX07TW4uRU1QVFk9KCgpPT57bGV0IG49bmV3IE1uO3JldHVybiBuLmNsb3NlZD0hMCxufSkoKTt2YXIgTkE9TW4uRU1QVFk7ZnVuY3Rpb24gaUMobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBNbnx8biYmImNsb3NlZCJpbiBuJiZfbihuLnJlbW92ZSkmJl9uKG4uYWRkKSYmX24obi51bnN1YnNjcmliZSl9ZnVuY3Rpb24gcVYobil7X24obik/bigpOm4udW5zdWJzY3JpYmUoKX12YXIgcGw9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDohMX0sRW09e3NldFRpbWVvdXQobix0LC4uLmUpe2xldHtkZWxlZ2F0ZTppfT1FbTtyZXR1cm4gaT8uc2V0VGltZW91dD9pLnNldFRpbWVvdXQobix0LC4uLmUpOnNldFRpbWVvdXQobix0LC4uLmUpfSxjbGVhclRpbWVvdXQobil7bGV0e2RlbGVnYXRlOnR9PUVtO3JldHVybih0Py5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkobil9LGRlbGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gckMobil7RW0uc2V0VGltZW91dCgoKT0+e2xldHtvblVuaGFuZGxlZEVycm9yOnR9PXBsO2lmKCF0KXRocm93IG47dChuKX0pfWZ1bmN0aW9uIGZsKCl7fXZhciBZVj1MQSgiQyIsdm9pZCAwLHZvaWQgMCk7ZnVuY3Rpb24gTEEobix0LGUpe3JldHVybntraW5kOm4sdmFsdWU6dCxlcnJvcjplfX12YXIgSXA9bnVsbDtmdW5jdGlvbiBUbShuKXtpZihwbC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXtsZXQgdD0hSXA7aWYodCYmKElwPXtlcnJvclRocm93bjohMSxlcnJvcjpudWxsfSksbigpLHQpe2xldHtlcnJvclRocm93bjplLGVycm9yOml9PUlwO2lmKElwPW51bGwsZSl0aHJvdyBpfX1lbHNlIG4oKX12YXIgQXA9Y2xhc3MgZXh0ZW5kcyBNbntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaXNTdG9wcGVkPSExLHQ/KHRoaXMuZGVzdGluYXRpb249dCxpQyh0KSYmdC5hZGQodGhpcykpOnRoaXMuZGVzdGluYXRpb249TGllfXN0YXRpYyBjcmVhdGUodCxlLGkpe3JldHVybiBuZXcgbWwodCxlLGkpfW5leHQodCl7dGhpcy5pc1N0b3BwZWQ/VkEoTEEoIk4iLHQsdm9pZCAwKSx0aGlzKTp0aGlzLl9uZXh0KHQpfWVycm9yKHQpe3RoaXMuaXNTdG9wcGVkP1ZBKExBKCJFIix2b2lkIDAsdCksdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKHQpKX1jb21wbGV0ZSgpe3RoaXMuaXNTdG9wcGVkP1ZBKFlWLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX11bnN1YnNjcmliZSgpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsc3VwZXIudW5zdWJzY3JpYmUoKSx0aGlzLmRlc3RpbmF0aW9uPW51bGwpfV9uZXh0KHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KX1fZXJyb3IodCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fV9jb21wbGV0ZSgpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fX0sRmllPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIEJBKG4sdCl7cmV0dXJuIEZpZS5jYWxsKG4sdCl9dmFyIG1sPWNsYXNzIGV4dGVuZHMgQXB7Y29uc3RydWN0b3IodCxlLGkpe2xldCByO2lmKHN1cGVyKCksX24odCl8fCF0KXI9e25leHQ6dD8/dm9pZCAwLGVycm9yOmU/P3ZvaWQgMCxjb21wbGV0ZTppPz92b2lkIDB9O2Vsc2V7bGV0IG87dGhpcyYmcGwudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0PyhvPU9iamVjdC5jcmVhdGUodCksby51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLHI9e25leHQ6dC5uZXh0JiZCQSh0Lm5leHQsbyksZXJyb3I6dC5lcnJvciYmQkEodC5lcnJvcixvKSxjb21wbGV0ZTp0LmNvbXBsZXRlJiZCQSh0LmNvbXBsZXRlLG8pfSk6cj10fXRoaXMuZGVzdGluYXRpb249bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucGFydGlhbE9ic2VydmVyPXR9bmV4dCh0KXtsZXR7cGFydGlhbE9ic2VydmVyOmV9PXRoaXM7aWYoZS5uZXh0KXRyeXtlLm5leHQodCl9Y2F0Y2goaSl7b0MoaSl9fWVycm9yKHQpe2xldHtwYXJ0aWFsT2JzZXJ2ZXI6ZX09dGhpcztpZihlLmVycm9yKXRyeXtlLmVycm9yKHQpfWNhdGNoKGkpe29DKGkpfWVsc2Ugb0ModCl9Y29tcGxldGUoKXtsZXR7cGFydGlhbE9ic2VydmVyOnR9PXRoaXM7aWYodC5jb21wbGV0ZSl0cnl7dC5jb21wbGV0ZSgpfWNhdGNoKGUpe29DKGUpfX19KHIpfX07ZnVuY3Rpb24gb0Mobil7cGwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz9mdW5jdGlvbihuKXtwbC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZJcCYmKElwLmVycm9yVGhyb3duPSEwLElwLmVycm9yPW4pfShuKTpyQyhuKX1mdW5jdGlvbiBWQShuLHQpe2xldHtvblN0b3BwZWROb3RpZmljYXRpb246ZX09cGw7ZSYmRW0uc2V0VGltZW91dCgoKT0+ZShuLHQpKX12YXIgTGllPXtjbG9zZWQ6ITAsbmV4dDpmbCxlcnJvcjpmdW5jdGlvbihuKXt0aHJvdyBufSxjb21wbGV0ZTpmbH0sRG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUiO2Z1bmN0aW9uIGlzKG4pe3JldHVybiBufWZ1bmN0aW9uIFVBKG4pe3JldHVybiAwPT09bi5sZW5ndGg/aXM6MT09PW4ubGVuZ3RoP25bMF06ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucmVkdWNlKChpLHIpPT5yKGkpLGUpfX12YXIgS3Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlJiYodGhpcy5fc3Vic2NyaWJlPWUpfWxpZnQoZSl7bGV0IGk9bmV3IG47cmV0dXJuIGkuc291cmNlPXRoaXMsaS5vcGVyYXRvcj1lLGl9c3Vic2NyaWJlKGUsaSxyKXtsZXQgbz1mdW5jdGlvbihuKXtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIEFwfHxmdW5jdGlvbihuKXtyZXR1cm4gbiYmX24obi5uZXh0KSYmX24obi5lcnJvcikmJl9uKG4uY29tcGxldGUpfShuKSYmaUMobil9KGUpP2U6bmV3IG1sKGUsaSxyKTtyZXR1cm4gVG0oKCk9PntsZXR7b3BlcmF0b3I6cyxzb3VyY2U6YX09dGhpcztvLmFkZChzP3MuY2FsbChvLGEpOmE/dGhpcy5fc3Vic2NyaWJlKG8pOnRoaXMuX3RyeVN1YnNjcmliZShvKSl9KSxvfV90cnlTdWJzY3JpYmUoZSl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUoZSl9Y2F0Y2goaSl7ZS5lcnJvcihpKX19Zm9yRWFjaChlLGkpe3JldHVybiBuZXcoaT1LVihpKSkoKHIsbyk9PntsZXQgcz1uZXcgbWwoe25leHQ6YT0+e3RyeXtlKGEpfWNhdGNoKGwpe28obCkscy51bnN1YnNjcmliZSgpfX0sZXJyb3I6byxjb21wbGV0ZTpyfSk7dGhpcy5zdWJzY3JpYmUocyl9KX1fc3Vic2NyaWJlKGUpe3ZhciBpO3JldHVybiBudWxsPT09KGk9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN1YnNjcmliZShlKX1bRG1dKCl7cmV0dXJuIHRoaXN9cGlwZSguLi5lKXtyZXR1cm4gVUEoZSkodGhpcyl9dG9Qcm9taXNlKGUpe3JldHVybiBuZXcoZT1LVihlKSkoKGkscik9PntsZXQgbzt0aGlzLnN1YnNjcmliZShzPT5vPXMscz0+cihzKSwoKT0+aShvKSl9KX19cmV0dXJuIG4uY3JlYXRlPXQ9Pm5ldyBuKHQpLG59KSgpO2Z1bmN0aW9uIEtWKG4pe3ZhciB0O3JldHVybiBudWxsIT09KHQ9bj8/cGwuUHJvbWlzZSkmJnZvaWQgMCE9PXQ/dDpQcm9taXNlfWZ1bmN0aW9uIGpBKG4pe3JldHVybiBfbihuPy5saWZ0KX1mdW5jdGlvbiBxdChuKXtyZXR1cm4gdD0+e2lmKGpBKHQpKXJldHVybiB0LmxpZnQoZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBuKGUsdGhpcyl9Y2F0Y2goaSl7dGhpcy5lcnJvcihpKX19KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZSIpfX1mdW5jdGlvbiBWdChuLHQsZSxpLHIpe3JldHVybiBuZXcgTV8obix0LGUsaSxyKX12YXIgR0EsTV89Y2xhc3MgZXh0ZW5kcyBBcHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIodCksdGhpcy5vbkZpbmFsaXplPW8sdGhpcy5zaG91bGRVbnN1YnNjcmliZT1zLHRoaXMuX25leHQ9ZT9mdW5jdGlvbihhKXt0cnl7ZShhKX1jYXRjaChsKXt0LmVycm9yKGwpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9cj9mdW5jdGlvbihhKXt0cnl7cihhKX1jYXRjaChsKXt0LmVycm9yKGwpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWk/ZnVuY3Rpb24oKXt0cnl7aSgpfWNhdGNoKGEpe3QuZXJyb3IoYSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgdDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtsZXR7Y2xvc2VkOmV9PXRoaXM7c3VwZXIudW5zdWJzY3JpYmUoKSwhZSYmKG51bGw9PT0odD10aGlzLm9uRmluYWxpemUpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcykpfX19LHdfPWNsYXNzIGV4dGVuZHMgS3R7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc291cmNlPXQsdGhpcy5zdWJqZWN0RmFjdG9yeT1lLHRoaXMuX3N1YmplY3Q9bnVsbCx0aGlzLl9yZWZDb3VudD0wLHRoaXMuX2Nvbm5lY3Rpb249bnVsbCxqQSh0KSYmKHRoaXMubGlmdD10LmxpZnQpfV9zdWJzY3JpYmUodCl7cmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZSh0KX1nZXRTdWJqZWN0KCl7bGV0IHQ9dGhpcy5fc3ViamVjdDtyZXR1cm4oIXR8fHQuaXNTdG9wcGVkKSYmKHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fV90ZWFyZG93bigpe3RoaXMuX3JlZkNvdW50PTA7bGV0e19jb25uZWN0aW9uOnR9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsdD8udW5zdWJzY3JpYmUoKX1jb25uZWN0KCl7bGV0IHQ9dGhpcy5fY29ubmVjdGlvbjtpZighdCl7dD10aGlzLl9jb25uZWN0aW9uPW5ldyBNbjtsZXQgZT10aGlzLmdldFN1YmplY3QoKTt0LmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUoVnQoZSx2b2lkIDAsKCk9Pnt0aGlzLl90ZWFyZG93bigpLGUuY29tcGxldGUoKX0saT0+e3RoaXMuX3RlYXJkb3duKCksZS5lcnJvcihpKX0sKCk9PnRoaXMuX3RlYXJkb3duKCkpKSksdC5jbG9zZWQmJih0aGlzLl9jb25uZWN0aW9uPW51bGwsdD1Nbi5FTVBUWSl9cmV0dXJuIHR9cmVmQ291bnQoKXtyZXR1cm4gcXQoKG4sdCk9PntsZXQgZT1udWxsO24uX3JlZkNvdW50Kys7bGV0IGk9VnQodCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFufHxuLl9yZWZDb3VudDw9MHx8MDwtLW4uX3JlZkNvdW50KXJldHVybiB2b2lkKGU9bnVsbCk7bGV0IHI9bi5fY29ubmVjdGlvbixvPWU7ZT1udWxsLHImJighb3x8cj09PW8pJiZyLnVuc3Vic2NyaWJlKCksdC51bnN1YnNjcmliZSgpfSk7bi5zdWJzY3JpYmUoaSksaS5jbG9zZWR8fChlPW4uY29ubmVjdCgpKX0pKHRoaXMpfX0sSW09e3NjaGVkdWxlKG4pe2xldCB0PXJlcXVlc3RBbmltYXRpb25GcmFtZSxlPWNhbmNlbEFuaW1hdGlvbkZyYW1lLHtkZWxlZ2F0ZTppfT1JbTtpJiYodD1pLnJlcXVlc3RBbmltYXRpb25GcmFtZSxlPWkuY2FuY2VsQW5pbWF0aW9uRnJhbWUpO2xldCByPXQobz0+e2U9dm9pZCAwLG4obyl9KTtyZXR1cm4gbmV3IE1uKCgpPT5lPy4ocikpfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4ubil7bGV0e2RlbGVnYXRlOnR9PUltO3JldHVybih0Py5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHJlcXVlc3RBbmltYXRpb25GcmFtZSkoLi4ubil9LGNhbmNlbEFuaW1hdGlvbkZyYW1lKC4uLm4pe2xldHtkZWxlZ2F0ZTp0fT1JbTtyZXR1cm4odD8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNhbmNlbEFuaW1hdGlvbkZyYW1lKSguLi5uKX0sZGVsZWdhdGU6dm9pZCAwfSwkVj1TbShuPT5mdW5jdGlvbigpe24odGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pLEllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5jbG9zZWQ9ITEsdGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsdGhpcy5vYnNlcnZlcnM9W10sdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5oYXNFcnJvcj0hMSx0aGlzLnRocm93bkVycm9yPW51bGx9bGlmdChlKXtsZXQgaT1uZXcgc0ModGhpcyx0aGlzKTtyZXR1cm4gaS5vcGVyYXRvcj1lLGl9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgJFZ9bmV4dChlKXtUbSgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzKSk7Zm9yKGxldCBpIG9mIHRoaXMuY3VycmVudE9ic2VydmVycylpLm5leHQoZSl9fSl9ZXJyb3IoZSl7VG0oKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmhhc0Vycm9yPXRoaXMuaXNTdG9wcGVkPSEwLHRoaXMudGhyb3duRXJyb3I9ZTtsZXR7b2JzZXJ2ZXJzOml9PXRoaXM7Zm9yKDtpLmxlbmd0aDspaS5zaGlmdCgpLmVycm9yKGUpfX0pfWNvbXBsZXRlKCl7VG0oKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmlzU3RvcHBlZD0hMDtsZXR7b2JzZXJ2ZXJzOmV9PXRoaXM7Zm9yKDtlLmxlbmd0aDspZS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgZTtyZXR1cm4obnVsbD09PShlPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShlKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoZSl9X3N1YnNjcmliZShlKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksdGhpcy5faW5uZXJTdWJzY3JpYmUoZSl9X2lubmVyU3Vic2NyaWJlKGUpe2xldHtoYXNFcnJvcjppLGlzU3RvcHBlZDpyLG9ic2VydmVyczpvfT10aGlzO3JldHVybiBpfHxyP05BOih0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxvLnB1c2goZSksbmV3IE1uKCgpPT57dGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsRHAobyxlKX0pKX1fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKXtsZXR7aGFzRXJyb3I6aSx0aHJvd25FcnJvcjpyLGlzU3RvcHBlZDpvfT10aGlzO2k/ZS5lcnJvcihyKTpvJiZlLmNvbXBsZXRlKCl9YXNPYnNlcnZhYmxlKCl7bGV0IGU9bmV3IEt0O3JldHVybiBlLnNvdXJjZT10aGlzLGV9fXJldHVybiBuLmNyZWF0ZT0odCxlKT0+bmV3IHNDKHQsZSksbn0pKCksc0M9Y2xhc3MgZXh0ZW5kcyBJZXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj10LHRoaXMuc291cmNlPWV9bmV4dCh0KXt2YXIgZSxpO251bGw9PT0oaT1udWxsPT09KGU9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUubmV4dCl8fHZvaWQgMD09PWl8fGkuY2FsbChlLHQpfWVycm9yKHQpe3ZhciBlLGk7bnVsbD09PShpPW51bGw9PT0oZT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lcnJvcil8fHZvaWQgMD09PWl8fGkuY2FsbChlLHQpfWNvbXBsZXRlKCl7dmFyIHQsZTtudWxsPT09KGU9bnVsbD09PSh0PXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHQpfV9zdWJzY3JpYmUodCl7dmFyIGUsaTtyZXR1cm4gbnVsbCE9PShpPW51bGw9PT0oZT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3Vic2NyaWJlKHQpKSYmdm9pZCAwIT09aT9pOk5BfX0sQWk9Y2xhc3MgZXh0ZW5kcyBJZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3ZhbHVlPXR9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX1fc3Vic2NyaWJlKHQpe2xldCBlPXN1cGVyLl9zdWJzY3JpYmUodCk7cmV0dXJuIWUuY2xvc2VkJiZ0Lm5leHQodGhpcy5fdmFsdWUpLGV9Z2V0VmFsdWUoKXtsZXR7aGFzRXJyb3I6dCx0aHJvd25FcnJvcjplLF92YWx1ZTppfT10aGlzO2lmKHQpdGhyb3cgZTtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGl9bmV4dCh0KXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPXQpfX0sU189e25vdzooKT0+KFNfLmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9LFJwPWNsYXNzIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IodD0xLzAsZT0xLzAsaT1TXyl7c3VwZXIoKSx0aGlzLl9idWZmZXJTaXplPXQsdGhpcy5fd2luZG93VGltZT1lLHRoaXMuX3RpbWVzdGFtcFByb3ZpZGVyPWksdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ZT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsdCksdGhpcy5fd2luZG93VGltZT1NYXRoLm1heCgxLGUpfW5leHQodCl7bGV0e2lzU3RvcHBlZDplLF9idWZmZXI6aSxfaW5maW5pdGVUaW1lV2luZG93OnIsX3RpbWVzdGFtcFByb3ZpZGVyOm8sX3dpbmRvd1RpbWU6c309dGhpcztlfHwoaS5wdXNoKHQpLCFyJiZpLnB1c2goby5ub3coKStzKSksdGhpcy5fdHJpbUJ1ZmZlcigpLHN1cGVyLm5leHQodCl9X3N1YnNjcmliZSh0KXt0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fdHJpbUJ1ZmZlcigpO2xldCBlPXRoaXMuX2lubmVyU3Vic2NyaWJlKHQpLHtfaW5maW5pdGVUaW1lV2luZG93OmksX2J1ZmZlcjpyfT10aGlzLG89ci5zbGljZSgpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGgmJiF0LmNsb3NlZDtzKz1pPzE6Mil0Lm5leHQob1tzXSk7cmV0dXJuIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXModCksZX1fdHJpbUJ1ZmZlcigpe2xldHtfYnVmZmVyU2l6ZTp0LF90aW1lc3RhbXBQcm92aWRlcjplLF9idWZmZXI6aSxfaW5maW5pdGVUaW1lV2luZG93OnJ9PXRoaXMsbz0ocj8xOjIpKnQ7aWYodDwxLzAmJm88aS5sZW5ndGgmJmkuc3BsaWNlKDAsaS5sZW5ndGgtbyksIXIpe2xldCBzPWUubm93KCksYT0wO2ZvcihsZXQgbD0xO2w8aS5sZW5ndGgmJmlbbF08PXM7bCs9MilhPWw7YSYmaS5zcGxpY2UoMCxhKzEpfX19LGFDPWNsYXNzIGV4dGVuZHMgTW57Y29uc3RydWN0b3IodCxlKXtzdXBlcigpfXNjaGVkdWxlKHQsZT0wKXtyZXR1cm4gdGhpc319LEVfPXtzZXRJbnRlcnZhbChuLHQsLi4uZSl7bGV0e2RlbGVnYXRlOml9PUVfO3JldHVybiBpPy5zZXRJbnRlcnZhbD9pLnNldEludGVydmFsKG4sdCwuLi5lKTpzZXRJbnRlcnZhbChuLHQsLi4uZSl9LGNsZWFySW50ZXJ2YWwobil7bGV0e2RlbGVnYXRlOnR9PUVfO3JldHVybih0Py5jbGVhckludGVydmFsfHxjbGVhckludGVydmFsKShuKX0sZGVsZWdhdGU6dm9pZCAwfSxuYz1jbGFzcyBleHRlbmRzIGFDe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lLHRoaXMucGVuZGluZz0hMX1zY2hlZHVsZSh0LGU9MCl7dmFyIGk7aWYodGhpcy5jbG9zZWQpcmV0dXJuIHRoaXM7dGhpcy5zdGF0ZT10O2xldCByPXRoaXMuaWQsbz10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbnVsbCE9ciYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChvLHIsZSkpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PWUsdGhpcy5pZD1udWxsIT09KGk9dGhpcy5pZCkmJnZvaWQgMCE9PWk/aTp0aGlzLnJlcXVlc3RBc3luY0lkKG8sdGhpcy5pZCxlKSx0aGlzfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBFXy5zZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCx0aGlzKSxpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXtpZihudWxsIT1pJiZ0aGlzLmRlbGF5PT09aSYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJuIGU7bnVsbCE9ZSYmRV8uY2xlYXJJbnRlcnZhbChlKX1leGVjdXRlKHQsZSl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG5ldyBFcnJvcigiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbiIpO3RoaXMucGVuZGluZz0hMTtsZXQgaT10aGlzLl9leGVjdXRlKHQsZSk7aWYoaSlyZXR1cm4gaTshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZSh0LGUpe2xldCByLGk9ITE7dHJ5e3RoaXMud29yayh0KX1jYXRjaChvKXtpPSEwLHI9b3x8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoaSlyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLHJ9dW5zdWJzY3JpYmUoKXtpZighdGhpcy5jbG9zZWQpe2xldHtpZDp0LHNjaGVkdWxlcjplfT10aGlzLHthY3Rpb25zOml9PWU7dGhpcy53b3JrPXRoaXMuc3RhdGU9dGhpcy5zY2hlZHVsZXI9bnVsbCx0aGlzLnBlbmRpbmc9ITEsRHAoaSx0aGlzKSxudWxsIT10JiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGUsdCxudWxsKSksdGhpcy5kZWxheT1udWxsLHN1cGVyLnVuc3Vic2NyaWJlKCl9fX0sSGllPTEsV0E9e307ZnVuY3Rpb24gZTQobil7cmV0dXJuIG4gaW4gV0EmJihkZWxldGUgV0Fbbl0sITApfXZhciB0ND17c2V0SW1tZWRpYXRlKG4pe2xldCB0PUhpZSsrO3JldHVybiBXQVt0XT0hMCxHQXx8KEdBPVByb21pc2UucmVzb2x2ZSgpKSxHQS50aGVuKCgpPT5lNCh0KSYmbigpKSx0fSxjbGVhckltbWVkaWF0ZShuKXtlNChuKX19LHtzZXRJbW1lZGlhdGU6emllLGNsZWFySW1tZWRpYXRlOlVpZX09dDQsVF89e3NldEltbWVkaWF0ZSguLi5uKXtsZXR7ZGVsZWdhdGU6dH09VF87cmV0dXJuKHQ/LnNldEltbWVkaWF0ZXx8emllKSguLi5uKX0sY2xlYXJJbW1lZGlhdGUobil7bGV0e2RlbGVnYXRlOnR9PVRfO3JldHVybih0Py5jbGVhckltbWVkaWF0ZXx8VWllKShuKX0sZGVsZWdhdGU6dm9pZCAwfSxaZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9WmQubm93KXt0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3I9dCx0aGlzLm5vdz1lfXNjaGVkdWxlKHQsZT0wLGkpe3JldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsdCkuc2NoZWR1bGUoaSxlKX19O1pkLm5vdz1TXy5ub3c7dmFyIGljPWNsYXNzIGV4dGVuZHMgWmR7Y29uc3RydWN0b3IodCxlPVpkLm5vdyl7c3VwZXIodCxlKSx0aGlzLmFjdGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKHQpe2xldCBpLHthY3Rpb25zOmV9PXRoaXM7aWYodGhpcy5fYWN0aXZlKWUucHVzaCh0KTtlbHNle3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihpPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKHQ9ZS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaSl7Zm9yKDt0PWUuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IGl9fX19LEFtPW5ldyBjbGFzcyBleHRlbmRzIGlje2ZsdXNoKHQpe3RoaXMuX2FjdGl2ZT0hMDtsZXQgZT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtsZXQgcix7YWN0aW9uczppfT10aGlzO3Q9dHx8aS5zaGlmdCgpO2Rve2lmKHI9dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUoKHQ9aVswXSkmJnQuaWQ9PT1lJiZpLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxyKXtmb3IoOyh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgcn19fShjbGFzcyBleHRlbmRzIG5je2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBudWxsIT09aSYmaT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5hY3Rpb25zLnB1c2godGhpcyksdC5fc2NoZWR1bGVkfHwodC5fc2NoZWR1bGVkPVRfLnNldEltbWVkaWF0ZSh0LmZsdXNoLmJpbmQodCx2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKHQsZSxpPTApe3ZhciByO2lmKG51bGwhPWk/aT4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQodCxlLGkpO2xldHthY3Rpb25zOm99PXQ7bnVsbCE9ZSYmKG51bGw9PT0ocj1vW28ubGVuZ3RoLTFdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pZCkhPT1lJiYoVF8uY2xlYXJJbW1lZGlhdGUoZSksdC5fc2NoZWR1bGVkPXZvaWQgMCl9fSksSmM9bmV3IGljKG5jKSxuND1KYyxxQT1uZXcgY2xhc3MgZXh0ZW5kcyBpY3t9KGNsYXNzIGV4dGVuZHMgbmN7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWV9c2NoZWR1bGUodCxlPTApe3JldHVybiBlPjA/c3VwZXIuc2NoZWR1bGUodCxlKToodGhpcy5kZWxheT1lLHRoaXMuc3RhdGU9dCx0aGlzLnNjaGVkdWxlci5mbHVzaCh0aGlzKSx0aGlzKX1leGVjdXRlKHQsZSl7cmV0dXJuIGU+MHx8dGhpcy5jbG9zZWQ/c3VwZXIuZXhlY3V0ZSh0LGUpOnRoaXMuX2V4ZWN1dGUodCxlKX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9aSYmaT4wfHxudWxsPT1pJiZ0aGlzLmRlbGF5PjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLGkpOih0LmZsdXNoKHRoaXMpLDApfX0pLFlBPW5ldyBjbGFzcyBleHRlbmRzIGlje2ZsdXNoKHQpe3RoaXMuX2FjdGl2ZT0hMDtsZXQgZT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtsZXQgcix7YWN0aW9uczppfT10aGlzO3Q9dHx8aS5zaGlmdCgpO2Rve2lmKHI9dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUoKHQ9aVswXSkmJnQuaWQ9PT1lJiZpLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxyKXtmb3IoOyh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgcn19fShjbGFzcyBleHRlbmRzIG5je2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBudWxsIT09aSYmaT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5hY3Rpb25zLnB1c2godGhpcyksdC5fc2NoZWR1bGVkfHwodC5fc2NoZWR1bGVkPUltLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dC5mbHVzaCh2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKHQsZSxpPTApe3ZhciByO2lmKG51bGwhPWk/aT4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQodCxlLGkpO2xldHthY3Rpb25zOm99PXQ7bnVsbCE9ZSYmKG51bGw9PT0ocj1vW28ubGVuZ3RoLTFdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pZCkhPT1lJiYoSW0uY2FuY2VsQW5pbWF0aW9uRnJhbWUoZSksdC5fc2NoZWR1bGVkPXZvaWQgMCl9fSksSnI9bmV3IEt0KG49Pm4uY29tcGxldGUoKSk7ZnVuY3Rpb24gbUMobil7cmV0dXJuIG4mJl9uKG4uc2NoZWR1bGUpfWZ1bmN0aW9uIFhBKG4pe3JldHVybiBuW24ubGVuZ3RoLTFdfWZ1bmN0aW9uIHJjKG4pe3JldHVybiBfbihYQShuKSk/bi5wb3AoKTp2b2lkIDB9ZnVuY3Rpb24gb2Mobil7cmV0dXJuIG1DKFhBKG4pKT9uLnBvcCgpOnZvaWQgMH12YXIgQTQ9V1YoSTQoKSwxKSx7X19kZWNvcmF0ZTpSNCxfX2F3YWl0ZXI6UDQsX19hd2FpdDpiQyxfX2FzeW5jR2VuZXJhdG9yOk80LF9fYXN5bmNWYWx1ZXM6azR9PUE0LmRlZmF1bHQsUG09bj0+biYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIG47ZnVuY3Rpb24gdkMobil7cmV0dXJuIF9uKG4/LnRoZW4pfWZ1bmN0aW9uIHlDKG4pe3JldHVybiBfbihuW0RtXSl9ZnVuY3Rpb24geEMobil7cmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yJiZfbihuPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBDQyhuKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2Ygbj8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtufSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfXZhciBNQz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIjtmdW5jdGlvbiB3QyhuKXtyZXR1cm4gX24obj8uW01DXSl9ZnVuY3Rpb24gU0Mobil7cmV0dXJuIE80KHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2xldCBlPW4uZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7bGV0e3ZhbHVlOmksZG9uZTpyfT15aWVsZCBiQyhlLnJlYWQoKSk7aWYocilyZXR1cm4geWllbGQgYkModm9pZCAwKTt5aWVsZCB5aWVsZCBiQyhpKX19ZmluYWxseXtlLnJlbGVhc2VMb2NrKCl9fSl9ZnVuY3Rpb24gRUMobil7cmV0dXJuIF9uKG4/LmdldFJlYWRlcil9ZnVuY3Rpb24gaWkobil7aWYobiBpbnN0YW5jZW9mIEt0KXJldHVybiBuO2lmKG51bGwhPW4pe2lmKHlDKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEt0KHQ9PntsZXQgZT1uW0RtXSgpO2lmKF9uKGUuc3Vic2NyaWJlKSlyZXR1cm4gZS5zdWJzY3JpYmUodCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfShuKTtpZihQbShuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBLdCh0PT57Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aCYmIXQuY2xvc2VkO2UrKyl0Lm5leHQobltlXSk7dC5jb21wbGV0ZSgpfSl9KG4pO2lmKHZDKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEt0KHQ9PntuLnRoZW4oZT0+e3QuY2xvc2VkfHwodC5uZXh0KGUpLHQuY29tcGxldGUoKSl9LGU9PnQuZXJyb3IoZSkpLnRoZW4obnVsbCxyQyl9KX0obik7aWYoeEMobikpcmV0dXJuIEY0KG4pO2lmKHdDKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEt0KHQ9Pntmb3IobGV0IGUgb2YgbilpZih0Lm5leHQoZSksdC5jbG9zZWQpcmV0dXJuO3QuY29tcGxldGUoKX0pfShuKTtpZihFQyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEY0KFNDKG4pKX0obil9dGhyb3cgQ0Mobil9ZnVuY3Rpb24gRjQobil7cmV0dXJuIG5ldyBLdCh0PT57KGZ1bmN0aW9uKG4sdCl7dmFyIGUsaSxyLG87cmV0dXJuIFA0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0cnl7Zm9yKGU9azQobik7IShpPXlpZWxkIGUubmV4dCgpKS5kb25lOylpZih0Lm5leHQoaS52YWx1ZSksdC5jbG9zZWQpcmV0dXJufWNhdGNoKHMpe3I9e2Vycm9yOnN9fWZpbmFsbHl7dHJ5e2kmJiFpLmRvbmUmJihvPWUucmV0dXJuKSYmKHlpZWxkIG8uY2FsbChlKSl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fXQuY29tcGxldGUoKX0pfSkobix0KS5jYXRjaChlPT50LmVycm9yKGUpKX0pfWZ1bmN0aW9uIHhzKG4sdCxlLGk9MCxyPSExKXtsZXQgbz10LnNjaGVkdWxlKGZ1bmN0aW9uKCl7ZSgpLHI/bi5hZGQodGhpcy5zY2hlZHVsZShudWxsLGkpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LGkpO2lmKG4uYWRkKG8pLCFyKXJldHVybiBvfWZ1bmN0aW9uIFBwKG4sdD0wKXtyZXR1cm4gcXQoKGUsaSk9PntlLnN1YnNjcmliZShWdChpLHI9PnhzKGksbiwoKT0+aS5uZXh0KHIpLHQpLCgpPT54cyhpLG4sKCk9PmkuY29tcGxldGUoKSx0KSxyPT54cyhpLG4sKCk9PmkuZXJyb3IociksdCkpKX0pfWZ1bmN0aW9uIFRDKG4sdD0wKXtyZXR1cm4gcXQoKGUsaSk9PntpLmFkZChuLnNjaGVkdWxlKCgpPT5lLnN1YnNjcmliZShpKSx0KSl9KX1mdW5jdGlvbiBEQyhuLHQpe2lmKCFuKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IEt0KGU9Pnt4cyhlLHQsKCk9PntsZXQgaT1uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO3hzKGUsdCwoKT0+e2kubmV4dCgpLnRoZW4ocj0+e3IuZG9uZT9lLmNvbXBsZXRlKCk6ZS5uZXh0KHIudmFsdWUpfSl9LDAsITApfSl9KX1mdW5jdGlvbiAkcihuLHQpe3JldHVybiB0P2Z1bmN0aW9uKG4sdCl7aWYobnVsbCE9bil7aWYoeUMobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGlpKG4pLnBpcGUoVEModCksUHAodCkpfShuLHQpO2lmKFBtKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBuZXcgS3QoZT0+e2xldCBpPTA7cmV0dXJuIHQuc2NoZWR1bGUoZnVuY3Rpb24oKXtpPT09bi5sZW5ndGg/ZS5jb21wbGV0ZSgpOihlLm5leHQobltpKytdKSxlLmNsb3NlZHx8dGhpcy5zY2hlZHVsZSgpKX0pfSl9KG4sdCk7aWYodkMobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGlpKG4pLnBpcGUoVEModCksUHAodCkpfShuLHQpO2lmKHhDKG4pKXJldHVybiBEQyhuLHQpO2lmKHdDKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBuZXcgS3QoZT0+e2xldCBpO3JldHVybiB4cyhlLHQsKCk9PntpPW5bTUNdKCkseHMoZSx0LCgpPT57bGV0IHIsbzt0cnl7KHt2YWx1ZTpyLGRvbmU6b309aS5uZXh0KCkpfWNhdGNoKHMpe3JldHVybiB2b2lkIGUuZXJyb3Iocyl9bz9lLmNvbXBsZXRlKCk6ZS5uZXh0KHIpfSwwLCEwKX0pLCgpPT5fbihpPy5yZXR1cm4pJiZpLnJldHVybigpfSl9KG4sdCk7aWYoRUMobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIERDKFNDKG4pLHQpfShuLHQpfXRocm93IENDKG4pfShuLHQpOmlpKG4pfWZ1bmN0aW9uIEh0KC4uLm4pe3JldHVybiAkcihuLG9jKG4pKX1mdW5jdGlvbiBlYShuLHQpe2xldCBlPV9uKG4pP246KCk9Pm4saT1yPT5yLmVycm9yKGUoKSk7cmV0dXJuIG5ldyBLdCh0P3I9PnQuc2NoZWR1bGUoaSwwLHIpOmkpfXZhciB3YT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5raW5kPXQsdGhpcy52YWx1ZT1lLHRoaXMuZXJyb3I9aSx0aGlzLmhhc1ZhbHVlPSJOIj09PXR9b2JzZXJ2ZSh0KXtyZXR1cm4gWkEodGhpcyx0KX1kbyh0LGUsaSl7bGV0e2tpbmQ6cix2YWx1ZTpvLGVycm9yOnN9PXRoaXM7cmV0dXJuIk4iPT09cj90Py4obyk6IkUiPT09cj9lPy4ocyk6aT8uKCl9YWNjZXB0KHQsZSxpKXt2YXIgcjtyZXR1cm4gX24obnVsbD09PShyPXQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm5leHQpP3RoaXMub2JzZXJ2ZSh0KTp0aGlzLmRvKHQsZSxpKX10b09ic2VydmFibGUoKXtsZXR7a2luZDp0LHZhbHVlOmUsZXJyb3I6aX09dGhpcyxyPSJOIj09PXQ/SHQoZSk6IkUiPT09dD9lYSgoKT0+aSk6IkMiPT09dD9KcjowO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uIGtpbmQgJHt0fWApO3JldHVybiByfXN0YXRpYyBjcmVhdGVOZXh0KHQpe3JldHVybiBuZXcgd2EoIk4iLHQpfXN0YXRpYyBjcmVhdGVFcnJvcih0KXtyZXR1cm4gbmV3IHdhKCJFIix2b2lkIDAsdCl9c3RhdGljIGNyZWF0ZUNvbXBsZXRlKCl7cmV0dXJuIHdhLmNvbXBsZXRlTm90aWZpY2F0aW9ufX07ZnVuY3Rpb24gWkEobix0KXt2YXIgZSxpLHI7bGV0e2tpbmQ6byx2YWx1ZTpzLGVycm9yOmF9PW47aWYoInN0cmluZyIhPXR5cGVvZiBvKXRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm90aWZpY2F0aW9uLCBtaXNzaW5nICJraW5kIicpOyJOIj09PW8/bnVsbD09PShlPXQubmV4dCl8fHZvaWQgMD09PWV8fGUuY2FsbCh0LHMpOiJFIj09PW8/bnVsbD09PShpPXQuZXJyb3IpfHx2b2lkIDA9PT1pfHxpLmNhbGwodCxhKTpudWxsPT09KHI9dC5jb21wbGV0ZSl8fHZvaWQgMD09PXJ8fHIuY2FsbCh0KX1mdW5jdGlvbiBEXyhuKXtyZXR1cm4hIW4mJihuIGluc3RhbmNlb2YgS3R8fF9uKG4ubGlmdCkmJl9uKG4uc3Vic2NyaWJlKSl9d2EuY29tcGxldGVOb3RpZmljYXRpb249bmV3IHdhKCJDIik7dmFyIE9tPVNtKG49PmZ1bmN0aW9uKCl7bih0aGlzKSx0aGlzLm5hbWU9IkVtcHR5RXJyb3IiLHRoaXMubWVzc2FnZT0ibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UifSk7ZnVuY3Rpb24gSUMobix0KXtsZXQgZT0ib2JqZWN0Ij09dHlwZW9mIHQ7cmV0dXJuIG5ldyBQcm9taXNlKChpLHIpPT57bGV0IG89bmV3IG1sKHtuZXh0OnM9PntpKHMpLG8udW5zdWJzY3JpYmUoKX0sZXJyb3I6cixjb21wbGV0ZTooKT0+e2U/aSh0LmRlZmF1bHRWYWx1ZSk6cihuZXcgT20pfX0pO24uc3Vic2NyaWJlKG8pfSl9ZnVuY3Rpb24gTihuLHQpe3JldHVybiBxdCgoZSxpKT0+e2xldCByPTA7ZS5zdWJzY3JpYmUoVnQoaSxvPT57aS5uZXh0KG4uY2FsbCh0LG8scisrKSl9KSl9KX12YXJ7aXNBcnJheTpaaWV9PUFycmF5O2Z1bmN0aW9uIEtkKG4pe3JldHVybiBOKHQ9PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFppZSh0KT9uKC4uLnQpOm4odCl9KG4sdCkpfXZhcntpc0FycmF5OkppZX09QXJyYXkse2dldFByb3RvdHlwZU9mOiRpZSxwcm90b3R5cGU6ZXJlLGtleXM6dHJlfT1PYmplY3Q7ZnVuY3Rpb24gQUMobil7aWYoMT09PW4ubGVuZ3RoKXtsZXQgdD1uWzBdO2lmKEppZSh0KSlyZXR1cm57YXJnczp0LGtleXM6bnVsbH07aWYoZnVuY3Rpb24obil7cmV0dXJuIG4mJiJvYmplY3QiPT10eXBlb2YgbiYmJGllKG4pPT09ZXJlfSh0KSl7bGV0IGU9dHJlKHQpO3JldHVybnthcmdzOmUubWFwKGk9PnRbaV0pLGtleXM6ZX19fXJldHVybnthcmdzOm4sa2V5czpudWxsfX1mdW5jdGlvbiBSQyhuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpLHIpPT4oZVtpXT10W3JdLGUpLHt9KX1mdW5jdGlvbiBkbiguLi5uKXtsZXQgdD1vYyhuKSxlPXJjKG4pLHthcmdzOmksa2V5czpyfT1BQyhuKTtpZigwPT09aS5sZW5ndGgpcmV0dXJuICRyKFtdLHQpO2xldCBvPW5ldyBLdChLQShpLHQscj9zPT5SQyhyLHMpOmlzKSk7cmV0dXJuIGU/by5waXBlKEtkKGUpKTpvfWZ1bmN0aW9uIEtBKG4sdCxlPWlzKXtyZXR1cm4gaT0+e2o0KHQsKCk9PntsZXR7bGVuZ3RoOnJ9PW4sbz1uZXcgQXJyYXkocikscz1yLGE9cjtmb3IobGV0IGw9MDtsPHI7bCsrKWo0KHQsKCk9PntsZXQgYz0kcihuW2xdLHQpLGQ9ITE7Yy5zdWJzY3JpYmUoVnQoaSx1PT57b1tsXT11LGR8fChkPSEwLGEtLSksYXx8aS5uZXh0KGUoby5zbGljZSgpKSl9LCgpPT57LS1zfHxpLmNvbXBsZXRlKCl9KSl9LGkpfSxpKX19ZnVuY3Rpb24gajQobix0LGUpe24/eHMoZSxuLHQpOnQoKX1mdW5jdGlvbiBobihuLHQsZT0xLzApe3JldHVybiBfbih0KT9obigoaSxyKT0+TigobyxzKT0+dChpLG8scixzKSkoaWkobihpLHIpKSksZSk6KCJudW1iZXIiPT10eXBlb2YgdCYmKGU9dCkscXQoKGkscik9PmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9W10sYz0wLGQ9MCx1PSExLHA9KCk9Pnt1JiYhbC5sZW5ndGgmJiFjJiZ0LmNvbXBsZXRlKCl9LGY9Yj0+YzxpP20oYik6bC5wdXNoKGIpLG09Yj0+e2MrKztsZXQgTT0hMTtpaShlKGIsZCsrKSkuc3Vic2NyaWJlKFZ0KHQseT0+e3QubmV4dCh5KX0sKCk9PntNPSEwfSx2b2lkIDAsKCk9PntpZihNKXRyeXtmb3IoYy0tO2wubGVuZ3RoJiZjPGk7KXtsZXQgeT1sLnNoaWZ0KCk7bSh5KX1wKCl9Y2F0Y2goeSl7dC5lcnJvcih5KX19KSl9O3JldHVybiBuLnN1YnNjcmliZShWdCh0LGYsKCk9Pnt1PSEwLHAoKX0pKSwoKT0+e319KGkscixuLGUpKSl9ZnVuY3Rpb24gUEMobj0xLzApe3JldHVybiBobihpcyxuKX1mdW5jdGlvbiBKZCguLi5uKXtyZXR1cm4gUEMoMSkoJHIobixvYyhuKSkpfWZ1bmN0aW9uIHRhKG4pe3JldHVybiBuZXcgS3QodD0+e2lpKG4oKSkuc3Vic2NyaWJlKHQpfSl9ZnVuY3Rpb24gY28oLi4ubil7bGV0IHQ9cmMobikse2FyZ3M6ZSxrZXlzOml9PUFDKG4pLHI9bmV3IEt0KG89PntsZXR7bGVuZ3RoOnN9PWU7aWYoIXMpcmV0dXJuIHZvaWQgby5jb21wbGV0ZSgpO2xldCBhPW5ldyBBcnJheShzKSxsPXMsYz1zO2ZvcihsZXQgZD0wO2Q8cztkKyspe2xldCB1PSExO2lpKGVbZF0pLnN1YnNjcmliZShWdChvLHA9Pnt1fHwodT0hMCxjLS0pLGFbZF09cH0sKCk9PmwtLSx2b2lkIDAsKCk9PnsoIWx8fCF1KSYmKGN8fG8ubmV4dChpP1JDKGksYSk6YSksby5jb21wbGV0ZSgpKX0pKX19KTtyZXR1cm4gdD9yLnBpcGUoS2QodCkpOnJ9dmFyIGlyZT1bImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxycmU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLG9yZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24gbWkobix0LGUsaSl7aWYoX24oZSkmJihpPWUsZT12b2lkIDApLGkpcmV0dXJuIG1pKG4sdCxlKS5waXBlKEtkKGkpKTtsZXRbcixvXT1mdW5jdGlvbihuKXtyZXR1cm4gX24obi5hZGRFdmVudExpc3RlbmVyKSYmX24obi5yZW1vdmVFdmVudExpc3RlbmVyKX0obik/cnJlLm1hcChzPT5hPT5uW3NdKHQsYSxlKSk6ZnVuY3Rpb24obil7cmV0dXJuIF9uKG4uYWRkTGlzdGVuZXIpJiZfbihuLnJlbW92ZUxpc3RlbmVyKX0obik/aXJlLm1hcChxNChuLHQpKTpmdW5jdGlvbihuKXtyZXR1cm4gX24obi5vbikmJl9uKG4ub2ZmKX0obik/b3JlLm1hcChxNChuLHQpKTpbXTtpZighciYmUG0obikpcmV0dXJuIGhuKHM9Pm1pKHMsdCxlKSkoaWkobikpO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7cmV0dXJuIG5ldyBLdChzPT57bGV0IGE9KC4uLmwpPT5zLm5leHQoMTxsLmxlbmd0aD9sOmxbMF0pO3JldHVybiByKGEpLCgpPT5vKGEpfSl9ZnVuY3Rpb24gcTQobix0KXtyZXR1cm4gZT0+aT0+bltlXSh0LGkpfWZ1bmN0aW9uIG5hKG49MCx0LGU9bjQpe2xldCBpPS0xO3JldHVybiBudWxsIT10JiYobUModCk/ZT10Omk9dCksbmV3IEt0KHI9PntsZXQgbz1mdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihuKX0obik/K24tZS5ub3coKTpuO288MCYmKG89MCk7bGV0IHM9MDtyZXR1cm4gZS5zY2hlZHVsZShmdW5jdGlvbigpe3IuY2xvc2VkfHwoci5uZXh0KHMrKyksMDw9aT90aGlzLnNjaGVkdWxlKHZvaWQgMCxpKTpyLmNvbXBsZXRlKCkpfSxvKX0pfWZ1bmN0aW9uIHRuKC4uLm4pe2xldCB0PW9jKG4pLGU9ZnVuY3Rpb24obix0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFhBKG4pP24ucG9wKCk6MS8wfShuKSxpPW47cmV0dXJuIGkubGVuZ3RoPzE9PT1pLmxlbmd0aD9paShpWzBdKTpQQyhlKSgkcihpLHQpKTpKcn12YXJ7aXNBcnJheTpjcmV9PUFycmF5O2Z1bmN0aW9uIE9DKG4pe3JldHVybiAxPT09bi5sZW5ndGgmJmNyZShuWzBdKT9uWzBdOm59ZnVuY3Rpb24ga2Uobix0KXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKFZ0KGksbz0+bi5jYWxsKHQsbyxyKyspJiZpLm5leHQobykpKX0pfWZ1bmN0aW9uIHNjKG4sdD1KYyl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpPSExLHI9bnVsbCxvPW51bGwscz0hMSxhPSgpPT57aWYobz8udW5zdWJzY3JpYmUoKSxvPW51bGwsaSl7aT0hMTtsZXQgYz1yO3I9bnVsbCxlLm5leHQoYyl9cyYmZS5jb21wbGV0ZSgpfSxsPSgpPT57bz1udWxsLHMmJmUuY29tcGxldGUoKX07dC5zdWJzY3JpYmUoVnQoZSxjPT57aT0hMCxyPWMsb3x8aWkobigpKS5zdWJzY3JpYmUobz1WdChlLGEsbCkpfSwoKT0+e3M9ITAsKCFpfHwhb3x8by5jbG9zZWQpJiZlLmNvbXBsZXRlKCl9KSl9KX0oKCk9Pm5hKG4sdCkpfWZ1bmN0aW9uIHpyKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBvLGk9bnVsbCxyPSExO2k9dC5zdWJzY3JpYmUoVnQoZSx2b2lkIDAsdm9pZCAwLHM9PntvPWlpKG4ocyx6cihuKSh0KSkpLGk/KGkudW5zdWJzY3JpYmUoKSxpPW51bGwsby5zdWJzY3JpYmUoZSkpOnI9ITB9KSksciYmKGkudW5zdWJzY3JpYmUoKSxpPW51bGwsby5zdWJzY3JpYmUoZSkpfSl9ZnVuY3Rpb24gZVIoLi4ubil7bGV0IHQ9cmMobik7cmV0dXJuIHQ/ZnVuY3Rpb24oLi4ubil7cmV0dXJuIFVBKG4pfShlUiguLi5uKSxLZCh0KSk6cXQoKGUsaSk9PntLQShbZSwuLi5PQyhuKV0pKGkpfSl9ZnVuY3Rpb24gTGkoLi4ubil7cmV0dXJuIGVSKC4uLm4pfWZ1bmN0aW9uIHdyKG4sdD1KYyl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9bnVsbCxvPW51bGwscz1udWxsLGE9KCk9PntpZihyKXtyLnVuc3Vic2NyaWJlKCkscj1udWxsO2xldCBjPW87bz1udWxsLGkubmV4dChjKX19O2Z1bmN0aW9uIGwoKXtsZXQgYz1zK24sZD10Lm5vdygpO2lmKGQ8YylyZXR1cm4gcj10aGlzLnNjaGVkdWxlKHZvaWQgMCxjLWQpLHZvaWQgaS5hZGQocik7YSgpfWUuc3Vic2NyaWJlKFZ0KGksYz0+e289YyxzPXQubm93KCkscnx8KHI9dC5zY2hlZHVsZShsLG4pLGkuYWRkKHIpKX0sKCk9PnthKCksaS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntvPXI9bnVsbH0pKX0pfWZ1bmN0aW9uIFl0KG4pe3JldHVybiBuPD0wPygpPT5KcjpxdCgodCxlKT0+e2xldCBpPTA7dC5zdWJzY3JpYmUoVnQoZSxyPT57KytpPD1uJiYoZS5uZXh0KHIpLG48PWkmJmUuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiBJXygpe3JldHVybiBxdCgobix0KT0+e24uc3Vic2NyaWJlKFZ0KHQsZmwpKX0pfWZ1bmN0aW9uIGttKG4sdCl7cmV0dXJuIHQ/ZT0+SmQodC5waXBlKFl0KDEpLElfKCkpLGUucGlwZShrbShuKSkpOmhuKChlLGkpPT5uKGUsaSkucGlwZShZdCgxKSxmdW5jdGlvbihuKXtyZXR1cm4gTigoKT0+bil9KGUpKSl9ZnVuY3Rpb24gU2Eobix0PUpjKXtsZXQgZT1uYShuLHQpO3JldHVybiBrbSgoKT0+ZSl9ZnVuY3Rpb24gWW4obix0PWlzKXtyZXR1cm4gbj1uPz9kcmUscXQoKGUsaSk9PntsZXQgcixvPSEwO2Uuc3Vic2NyaWJlKFZ0KGkscz0+e2xldCBhPXQocyk7KG98fCFuKHIsYSkpJiYobz0hMSxyPWEsaS5uZXh0KHMpKX0pKX0pfWZ1bmN0aW9uIGRyZShuLHQpe3JldHVybiBuPT09dH1mdW5jdGlvbiBLNChuPXVyZSl7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoVnQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT5pP2UuY29tcGxldGUoKTplLmVycm9yKG4oKSkpKX0pfWZ1bmN0aW9uIHVyZSgpe3JldHVybiBuZXcgT219ZnVuY3Rpb24gRkMobix0KXtyZXR1cm4gdD9lPT5lLnBpcGUoRkMoKGkscik9PmlpKG4oaSxyKSkucGlwZShOKChvLHMpPT50KGksbyxyLHMpKSkpKTpxdCgoZSxpKT0+e2xldCByPTAsbz1udWxsLHM9ITE7ZS5zdWJzY3JpYmUoVnQoaSxhPT57b3x8KG89VnQoaSx2b2lkIDAsKCk9PntvPW51bGwscyYmaS5jb21wbGV0ZSgpfSksaWkobihhLHIrKykpLnN1YnNjcmliZShvKSl9LCgpPT57cz0hMCwhbyYmaS5jb21wbGV0ZSgpfSkpfSl9ZnVuY3Rpb24gTEMobix0LGUsaSl7cmV0dXJuIHF0KChyLG8pPT57bGV0IHM7dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/KHtkdXJhdGlvbjplLGVsZW1lbnQ6cyxjb25uZWN0b3I6aX09dCk6cz10O2xldCBhPW5ldyBNYXAsbD1tPT57YS5mb3JFYWNoKG0pLG0obyl9LGM9bT0+bChiPT5iLmVycm9yKG0pKSxkPTAsdT0hMSxwPW5ldyBNXyhvLG09Pnt0cnl7bGV0IGI9bihtKSxNPWEuZ2V0KGIpO2lmKCFNKXthLnNldChiLE09aT9pKCk6bmV3IEllKTtsZXQgeT1mdW5jdGlvbihtLGIpe2xldCBNPW5ldyBLdCh5PT57ZCsrO2xldCB4PWIuc3Vic2NyaWJlKHkpO3JldHVybigpPT57eC51bnN1YnNjcmliZSgpLDA9PS0tZCYmdSYmcC51bnN1YnNjcmliZSgpfX0pO3JldHVybiBNLmtleT1tLE19KGIsTSk7aWYoby5uZXh0KHkpLGUpe2xldCB4PVZ0KE0sKCk9PntNLmNvbXBsZXRlKCkseD8udW5zdWJzY3JpYmUoKX0sdm9pZCAwLHZvaWQgMCwoKT0+YS5kZWxldGUoYikpO3AuYWRkKGlpKGUoeSkpLnN1YnNjcmliZSh4KSl9fU0ubmV4dChzP3MobSk6bSl9Y2F0Y2goYil7YyhiKX19LCgpPT5sKG09Pm0uY29tcGxldGUoKSksYywoKT0+YS5jbGVhcigpLCgpPT4odT0hMCwwPT09ZCkpO3Iuc3Vic2NyaWJlKHApfSl9ZnVuY3Rpb24gRm0oKXtyZXR1cm4gcXQoKG4sdCk9PntsZXQgZSxpPSExO24uc3Vic2NyaWJlKFZ0KHQscj0+e2xldCBvPWU7ZT1yLGkmJnQubmV4dChbbyxyXSksaT0hMH0pKX0pfWZ1bmN0aW9uIENzKG49e30pe2xldHtjb25uZWN0b3I6dD0oKCk9Pm5ldyBJZSkscmVzZXRPbkVycm9yOmU9ITAscmVzZXRPbkNvbXBsZXRlOmk9ITAscmVzZXRPblJlZkNvdW50WmVybzpyPSEwfT1uO3JldHVybiBvPT57bGV0IHMsYSxsLGM9MCxkPSExLHU9ITEscD0oKT0+e2E/LnVuc3Vic2NyaWJlKCksYT12b2lkIDB9LGY9KCk9PntwKCkscz1sPXZvaWQgMCxkPXU9ITF9LG09KCk9PntsZXQgYj1zO2YoKSxiPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gcXQoKGIsTSk9PntjKyssIXUmJiFkJiZwKCk7bGV0IHk9bD1sPz90KCk7TS5hZGQoKCk9PntjLS0sMD09PWMmJiF1JiYhZCYmKGE9YVIobSxyKSl9KSx5LnN1YnNjcmliZShNKSwhcyYmYz4wJiYocz1uZXcgbWwoe25leHQ6eD0+eS5uZXh0KHgpLGVycm9yOng9Pnt1PSEwLHAoKSxhPWFSKGYsZSx4KSx5LmVycm9yKHgpfSxjb21wbGV0ZTooKT0+e2Q9ITAscCgpLGE9YVIoZixpKSx5LmNvbXBsZXRlKCl9fSksaWkoYikuc3Vic2NyaWJlKHMpKX0pKG8pfX1mdW5jdGlvbiBhUihuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2xldCBpPW5ldyBtbCh7bmV4dDooKT0+e2kudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIHQoLi4uZSkuc3Vic2NyaWJlKGkpfWZ1bmN0aW9uIE1zKG4sdCxlKXtsZXQgaSxyPSExO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/KHtidWZmZXJTaXplOmk9MS8wLHdpbmRvd1RpbWU6dD0xLzAscmVmQ291bnQ6cj0hMSxzY2hlZHVsZXI6ZX09bik6aT1uPz8xLzAsQ3Moe2Nvbm5lY3RvcjooKT0+bmV3IFJwKGksdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86cn0pfWZ1bmN0aW9uIGlhKG4pe3JldHVybiBrZSgodCxlKT0+bjw9ZSl9ZnVuY3Rpb24gcW4oLi4ubil7bGV0IHQ9b2Mobik7cmV0dXJuIHF0KChlLGkpPT57KHQ/SmQobixlLHQpOkpkKG4sZSkpLnN1YnNjcmliZShpKX0pfWZ1bmN0aW9uIEpuKG4sdCl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9bnVsbCxvPTAscz0hMSxhPSgpPT5zJiYhciYmaS5jb21wbGV0ZSgpO2Uuc3Vic2NyaWJlKFZ0KGksbD0+e3I/LnVuc3Vic2NyaWJlKCk7bGV0IGM9MCxkPW8rKztpaShuKGwsZCkpLnN1YnNjcmliZShyPVZ0KGksdT0+aS5uZXh0KHQ/dChsLHUsZCxjKyspOnUpLCgpPT57cj1udWxsLGEoKX0pKX0sKCk9PntzPSEwLGEoKX0pKX0pfWZ1bmN0aW9uIG90KG4pe3JldHVybiBxdCgodCxlKT0+e2lpKG4pLnN1YnNjcmliZShWdChlLCgpPT5lLmNvbXBsZXRlKCksZmwpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9ZnVuY3Rpb24gQV8obix0PSExKXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKFZ0KGksbz0+e2xldCBzPW4obyxyKyspOyhzfHx0KSYmaS5uZXh0KG8pLCFzJiZpLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBOdChuLHQsZSl7bGV0IGk9X24obil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9Om47cmV0dXJuIGk/cXQoKHIsbyk9Pnt2YXIgcztudWxsPT09KHM9aS5zdWJzY3JpYmUpfHx2b2lkIDA9PT1zfHxzLmNhbGwoaSk7bGV0IGE9ITA7ci5zdWJzY3JpYmUoVnQobyxsPT57dmFyIGM7bnVsbD09PShjPWkubmV4dCl8fHZvaWQgMD09PWN8fGMuY2FsbChpLGwpLG8ubmV4dChsKX0sKCk9Pnt2YXIgbDthPSExLG51bGw9PT0obD1pLmNvbXBsZXRlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpLG8uY29tcGxldGUoKX0sbD0+e3ZhciBjO2E9ITEsbnVsbD09PShjPWkuZXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwoaSxsKSxvLmVycm9yKGwpfSwoKT0+e3ZhciBsLGM7YSYmKG51bGw9PT0obD1pLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpKSxudWxsPT09KGM9aS5maW5hbGl6ZSl8fHZvaWQgMD09PWN8fGMuY2FsbChpKX0pKX0pOmlzfXZhciBsUj17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24gYWMobix0PUpjLGU9bFIpe2xldCBpPW5hKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdD1sUil7cmV0dXJuIHF0KChlLGkpPT57bGV0e2xlYWRpbmc6cix0cmFpbGluZzpvfT10LHM9ITEsYT1udWxsLGw9bnVsbCxjPSExLGQ9KCk9PntsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxvJiYoZigpLGMmJmkuY29tcGxldGUoKSl9LHU9KCk9PntsPW51bGwsYyYmaS5jb21wbGV0ZSgpfSxwPW09Pmw9aWkobihtKSkuc3Vic2NyaWJlKFZ0KGksZCx1KSksZj0oKT0+e2lmKHMpe3M9ITE7bGV0IG09YTthPW51bGwsaS5uZXh0KG0pLCFjJiZwKG0pfX07ZS5zdWJzY3JpYmUoVnQoaSxtPT57cz0hMCxhPW0sKCFsfHxsLmNsb3NlZCkmJihyP2YoKTpwKG0pKX0sKCk9PntjPSEwLCghKG8mJnMmJmwpfHxsLmNsb3NlZCkmJmkuY29tcGxldGUoKX0pKX0pfSgoKT0+aSxlKX1mdW5jdGlvbiBCdCguLi5uKXtsZXQgdD1yYyhuKTtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj1uLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPW4ubWFwKCgpPT4hMSksYT0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKWlpKG5bbF0pLnN1YnNjcmliZShWdChpLGM9PntvW2xdPWMsIWEmJiFzW2xdJiYoc1tsXT0hMCwoYT1zLmV2ZXJ5KGlzKSkmJihzPW51bGwpKX0sZmwpKTtlLnN1YnNjcmliZShWdChpLGw9PntpZihhKXtsZXQgYz1bbCwuLi5vXTtpLm5leHQodD90KC4uLmMpOmMpfX0pKX0pfWZ1bmN0aW9uIHRyKG4pe2ZvcihsZXQgdCBpbiBuKWlmKG5bdF09PT10cilyZXR1cm4gdDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uIGNSKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmIW4uaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pfWZ1bmN0aW9uIHBvKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiJbIituLm1hcChwbykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09bilyZXR1cm4iIituO2lmKG4ub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7bi5vdmVycmlkZGVuTmFtZX1gO2lmKG4ubmFtZSlyZXR1cm5gJHtuLm5hbWV9YDtsZXQgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2xldCBlPXQuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWU/dDp0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIEFSKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bj9udWxsPT09dD8iIjp0Om51bGw9PXR8fCIiPT09dD9uOm4rIiAiK3R9dmFyIHByZT10cih7X19mb3J3YXJkX3JlZl9fOnRyfSk7ZnVuY3Rpb24gJG4obil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPSRuLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gcG8odGhpcygpKX0sbn1mdW5jdGlvbiBSaShuKXtyZXR1cm4gWUgobik/bigpOm59ZnVuY3Rpb24gWUgobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uaGFzT3duUHJvcGVydHkocHJlKSYmbi5fX2ZvcndhcmRfcmVmX189PT0kbn1mdW5jdGlvbiBYSChuKXtyZXR1cm4gbiYmISFuLlx1MDI3NXByb3ZpZGVyc312YXIgdGI9Imh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiLHl0PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxlKXtzdXBlcihmdW5jdGlvbihuLHQpe3JldHVybmBORzAke01hdGguYWJzKG4pfSR7dD8iOiAiK3QudHJpbSgpOiIifWB9KHQsZSkpLHRoaXMuY29kZT10fX07ZnVuY3Rpb24gVW4obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP246bnVsbD09bj8iIjpTdHJpbmcobil9ZnVuY3Rpb24gTFAobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5uYW1lfHxuLnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT1uJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi50eXBlP24udHlwZS5uYW1lfHxuLnR5cGUudG9TdHJpbmcoKTpVbihuKX1mdW5jdGlvbiBCUChuLHQpe3Rocm93IG5ldyB5dCgtMjAxLCExKX1mdW5jdGlvbiBRSChuLHQsZSxpKXt0aHJvdyBuZXcgRXJyb3IoYEFTU0VSVElPTiBFUlJPUjogJHtufWArKG51bGw9PWk/IiI6YCBbRXhwZWN0ZWQ9PiAke2V9ICR7aX0gJHt0fSA8PUFjdHVhbF1gKSl9ZnVuY3Rpb24gdWUobil7cmV0dXJue3Rva2VuOm4udG9rZW4scHJvdmlkZWRJbjpuLnByb3ZpZGVkSW58fG51bGwsZmFjdG9yeTpuLmZhY3RvcnksdmFsdWU6dm9pZCAwfX1mdW5jdGlvbiBVKG4pe3JldHVybntwcm92aWRlcnM6bi5wcm92aWRlcnN8fFtdLGltcG9ydHM6bi5pbXBvcnRzfHxbXX19ZnVuY3Rpb24gVlAobil7cmV0dXJuICQ0KG4sSkMpfHwkNChuLFpIKX1mdW5jdGlvbiAkNChuLHQpe3JldHVybiBuLmhhc093blByb3BlcnR5KHQpP25bdF06bnVsbH1mdW5jdGlvbiBlSChuKXtyZXR1cm4gbiYmKG4uaGFzT3duUHJvcGVydHkoUlIpfHxuLmhhc093blByb3BlcnR5KF9yZSkpP25bUlJdOm51bGx9dmFyIFBSLEpDPXRyKHsiXHUwMjc1cHJvdiI6dHJ9KSxSUj10cih7Ilx1MDI3NWluaiI6dHJ9KSxaSD10cih7bmdJbmplY3RhYmxlRGVmOnRyfSksX3JlPXRyKHtuZ0luamVjdG9yRGVmOnRyfSkseGk9KCgpPT57cmV0dXJuKG49eGl8fCh4aT17fSkpW24uRGVmYXVsdD0wXT0iRGVmYXVsdCIsbltuLkhvc3Q9MV09Ikhvc3QiLG5bbi5TZWxmPTJdPSJTZWxmIixuW24uU2tpcFNlbGY9NF09IlNraXBTZWxmIixuW24uT3B0aW9uYWw9OF09Ik9wdGlvbmFsIix4aTt2YXIgbn0pKCk7ZnVuY3Rpb24gRWEobil7bGV0IHQ9UFI7cmV0dXJuIFBSPW4sdH1mdW5jdGlvbiBLSChuLHQsZSl7bGV0IGk9VlAobik7cmV0dXJuIGkmJiJyb290Ij09aS5wcm92aWRlZEluP3ZvaWQgMD09PWkudmFsdWU/aS52YWx1ZT1pLmZhY3RvcnkoKTppLnZhbHVlOmUmeGkuT3B0aW9uYWw/bnVsbDp2b2lkIDAhPT10P3Q6dm9pZCBCUChwbyhuKSl9dmFyIE9fLFVyPSgoKT0+dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZikoKSxqXz17fSxPUj0iX19OR19ESV9GTEFHX18iLCRDPSJuZ1RlbXBUb2tlblBhdGgiLHlyZT0ibmdUb2tlblBhdGgiLHhyZT0vXG4vZ20sQ3JlPSJcdTAyNzUiLHRIPSJfX3NvdXJjZSI7ZnVuY3Rpb24gTm0obil7bGV0IHQ9T187cmV0dXJuIE9fPW4sdH1mdW5jdGlvbiBNcmUobix0PXhpLkRlZmF1bHQpe2lmKHZvaWQgMD09PU9fKXRocm93IG5ldyB5dCgtMjAzLCExKTtyZXR1cm4gbnVsbD09PU9fP0tIKG4sdm9pZCAwLHQpOk9fLmdldChuLHQmeGkuT3B0aW9uYWw/bnVsbDp2b2lkIDAsdCl9ZnVuY3Rpb24gayhuLHQ9eGkuRGVmYXVsdCl7cmV0dXJuKFBSfHxNcmUpKFJpKG4pLHQpfWZ1bmN0aW9uIEpIKG4pe3Rocm93IG5ldyB5dCgyMDIsITEpfWZ1bmN0aW9uIGFpKG4sdD14aS5EZWZhdWx0KXtyZXR1cm4gayhuLHdNKHQpKX1mdW5jdGlvbiB3TShuKXtyZXR1cm4gdHlwZW9mIG4+InUifHwibnVtYmVyIj09dHlwZW9mIG4/bjowfChuLm9wdGlvbmFsJiY4KXwobi5ob3N0JiYxKXwobi5zZWxmJiYyKXwobi5za2lwU2VsZiYmNCl9ZnVuY3Rpb24ga1Iobil7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPVJpKG5bZV0pO2lmKEFycmF5LmlzQXJyYXkoaSkpe2lmKDA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgeXQoOTAwLCExKTtsZXQgcixvPXhpLkRlZmF1bHQ7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspe2xldCBhPWlbc10sbD13cmUoYSk7Im51bWJlciI9PXR5cGVvZiBsPy0xPT09bD9yPWEudG9rZW46b3w9bDpyPWF9dC5wdXNoKGsocixvKSl9ZWxzZSB0LnB1c2goayhpKSl9cmV0dXJuIHR9ZnVuY3Rpb24gbmIobix0KXtyZXR1cm4gbltPUl09dCxuLnByb3RvdHlwZVtPUl09dCxufWZ1bmN0aW9uIHdyZShuKXtyZXR1cm4gbltPUl19ZnVuY3Rpb24gb3Uobil7cmV0dXJue3RvU3RyaW5nOm59LnRvU3RyaW5nKCl9dmFyIGtfPSgoKT0+e3JldHVybihuPWtffHwoa189e30pKVtuLk9uUHVzaD0wXT0iT25QdXNoIixuW24uRGVmYXVsdD0xXT0iRGVmYXVsdCIsa187dmFyIG59KSgpLHJhPSgoKT0+e3JldHVybihuPXJhfHwocmE9e30pKVtuLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsbltuLk5vbmU9Ml09Ik5vbmUiLG5bbi5TaGFkb3dEb209M109IlNoYWRvd0RvbSIscmE7dmFyIG59KSgpLCRjPXt9LFZpPVtdLFNNPXRyKHsiXHUwMjc1Y21wIjp0cn0pLEhQPXRyKHsiXHUwMjc1ZGlyIjp0cn0pLHpQPXRyKHsiXHUwMjc1cGlwZSI6dHJ9KSwkSD10cih7Ilx1MDI3NW1vZCI6dHJ9KSxlZD10cih7Ilx1MDI3NWZhYyI6dHJ9KSxGXz10cih7X19OR19FTEVNRU5UX0lEX186dHJ9KSxUcmU9MDtmdW5jdGlvbiBPKG4pe3JldHVybiBvdSgoKT0+e2xldCB0PXQ1KG4pLGU9ey4uLnQsZGVjbHM6bi5kZWNscyx2YXJzOm4udmFycyx0ZW1wbGF0ZTpuLnRlbXBsYXRlLGNvbnN0czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOm4uY2hhbmdlRGV0ZWN0aW9uPT09a18uT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczp0LnN0YW5kYWxvbmUmJm4uZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3RvcjpudWxsLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8cmEuRW11bGF0ZWQsaWQ6ImMiK1RyZSsrLHN0eWxlczpuLnN0eWxlc3x8VmksXzpudWxsLHNjaGVtYXM6bi5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGx9O241KGUpO2xldCBpPW4uZGVwZW5kZW5jaWVzO3JldHVybiBlLmRpcmVjdGl2ZURlZnM9ZU0oaSwhMSksZS5waXBlRGVmcz1lTShpLCEwKSxlfSl9ZnVuY3Rpb24gaWIobix0LGUpe2xldCBpPW4uXHUwMjc1Y21wO2kuZGlyZWN0aXZlRGVmcz1lTSh0LCExKSxpLnBpcGVEZWZzPWVNKGUsITApfWZ1bmN0aW9uIERyZShuKXtyZXR1cm4gRGEobil8fHR1KG4pfWZ1bmN0aW9uIElyZShuKXtyZXR1cm4gbnVsbCE9PW59ZnVuY3Rpb24gRyhuKXtyZXR1cm4gb3UoKCk9Pih7dHlwZTpuLnR5cGUsYm9vdHN0cmFwOm4uYm9vdHN0cmFwfHxWaSxkZWNsYXJhdGlvbnM6bi5kZWNsYXJhdGlvbnN8fFZpLGltcG9ydHM6bi5pbXBvcnRzfHxWaSxleHBvcnRzOm4uZXhwb3J0c3x8VmksdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCxpZDpuLmlkfHxudWxsfSkpfWZ1bmN0aW9uIG5IKG4sdCl7aWYobnVsbD09bilyZXR1cm4gJGM7bGV0IGU9e307Zm9yKGxldCBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IHI9bltpXSxvPXI7QXJyYXkuaXNBcnJheShyKSYmKG89clsxXSxyPXJbMF0pLGVbcl09aSx0JiYodFtyXT1vKX1yZXR1cm4gZX1mdW5jdGlvbiB3ZShuKXtyZXR1cm4gb3UoKCk9PntsZXQgdD10NShuKTtyZXR1cm4gbjUodCksdH0pfWZ1bmN0aW9uIEttKG4pe3JldHVybnt0eXBlOm4udHlwZSxuYW1lOm4ubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PW4ucHVyZSxzdGFuZGFsb25lOiEwPT09bi5zdGFuZGFsb25lLG9uRGVzdHJveTpuLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95fHxudWxsfX1mdW5jdGlvbiBEYShuKXtyZXR1cm4gbltTTV18fG51bGx9ZnVuY3Rpb24gdHUobil7cmV0dXJuIG5bSFBdfHxudWxsfWZ1bmN0aW9uIG51KG4pe3JldHVybiBuW3pQXXx8bnVsbH1mdW5jdGlvbiBlNShuKXtsZXQgdD1EYShuKXx8dHUobil8fG51KG4pO3JldHVybiBudWxsIT09dCYmdC5zdGFuZGFsb25lfWZ1bmN0aW9uIEdtKG4sdCl7bGV0IGU9blskSF18fG51bGw7aWYoIWUmJiEwPT09dCl0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJHtwbyhuKX0gZG9lcyBub3QgaGF2ZSAnXHUwMjc1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gZX1mdW5jdGlvbiB0NShuKXtsZXQgdD17fTtyZXR1cm57dHlwZTpuLnR5cGUscHJvdmlkZXJzUmVzb2x2ZXI6bnVsbCxmYWN0b3J5Om51bGwsaG9zdEJpbmRpbmdzOm4uaG9zdEJpbmRpbmdzfHxudWxsLGhvc3RWYXJzOm4uaG9zdFZhcnN8fDAsaG9zdEF0dHJzOm4uaG9zdEF0dHJzfHxudWxsLGNvbnRlbnRRdWVyaWVzOm4uY29udGVudFF1ZXJpZXN8fG51bGwsZGVjbGFyZWRJbnB1dHM6dCxleHBvcnRBczpuLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6ITA9PT1uLnN0YW5kYWxvbmUsc2VsZWN0b3JzOm4uc2VsZWN0b3JzfHxWaSx2aWV3UXVlcnk6bi52aWV3UXVlcnl8fG51bGwsZmVhdHVyZXM6bi5mZWF0dXJlc3x8bnVsbCxzZXRJbnB1dDpudWxsLGZpbmRIb3N0RGlyZWN0aXZlRGVmczpudWxsLGhvc3REaXJlY3RpdmVzOm51bGwsaW5wdXRzOm5IKG4uaW5wdXRzLHQpLG91dHB1dHM6bkgobi5vdXRwdXRzKX19ZnVuY3Rpb24gbjUobil7bi5mZWF0dXJlcz8uZm9yRWFjaCh0PT50KG4pKX1mdW5jdGlvbiBlTShuLHQpe2lmKCFuKXJldHVybiBudWxsO2xldCBlPXQ/bnU6RHJlO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4pLm1hcChpPT5lKGkpKS5maWx0ZXIoSXJlKX12YXIgc3U9MCxGbj0xLHJpPTIsR3I9MyxfbD00LEZwPTUsU3M9NixHXz03LEVzPTgsdE09OSxuTT0xMCxvaT0xMSxGUj0xMixXXz0xMyxpSD0xNCxKbT0xNSxibD0xNixyYj0xNyxMbT0xOCxjYz0xOSxFTT0yMCxpNT0yMSxXcj0yMixVUD0xLHI1PTIsalA9NyxpTT04LFdtPTksd3M9MTA7ZnVuY3Rpb24gTnAobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgbltVUF19ZnVuY3Rpb24gbmQobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiEwPT09bltVUF19ZnVuY3Rpb24gR1Aobil7cmV0dXJuIDAhPSg0Jm4uZmxhZ3MpfWZ1bmN0aW9uIFRNKG4pe3JldHVybiBuLmNvbXBvbmVudE9mZnNldD4tMX1mdW5jdGlvbiBETShuKXtyZXR1cm4gMT09KDEmbi5mbGFncyl9ZnVuY3Rpb24gdmwobil7cmV0dXJuISFuLnRlbXBsYXRlfWZ1bmN0aW9uIEFyZShuKXtyZXR1cm4gMCE9KDI1NiZuW3JpXSl9ZnVuY3Rpb24gQnAobix0KXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShlZCk/bltlZF06bnVsbH12YXIgTlI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMucHJldmlvdXNWYWx1ZT10LHRoaXMuY3VycmVudFZhbHVlPWUsdGhpcy5maXJzdENoYW5nZT1pfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19O2Z1bmN0aW9uIEd0KCl7cmV0dXJuIG81fWZ1bmN0aW9uIG81KG4pe3JldHVybiBuLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYobi5zZXRJbnB1dD1QcmUpLFJyZX1mdW5jdGlvbiBScmUoKXtsZXQgbj1hNSh0aGlzKSx0PW4/LmN1cnJlbnQ7aWYodCl7bGV0IGU9bi5wcmV2aW91cztpZihlPT09JGMpbi5wcmV2aW91cz10O2Vsc2UgZm9yKGxldCBpIGluIHQpZVtpXT10W2ldO24uY3VycmVudD1udWxsLHRoaXMubmdPbkNoYW5nZXModCl9fWZ1bmN0aW9uIFByZShuLHQsZSxpKXtsZXQgcj10aGlzLmRlY2xhcmVkSW5wdXRzW2VdLG89YTUobil8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5bczVdPXR9KG4se3ByZXZpb3VzOiRjLGN1cnJlbnQ6bnVsbH0pLHM9by5jdXJyZW50fHwoby5jdXJyZW50PXt9KSxhPW8ucHJldmlvdXMsbD1hW3JdO3Nbcl09bmV3IE5SKGwmJmwuY3VycmVudFZhbHVlLHQsYT09PSRjKSxuW2ldPXR9R3QubmdJbmhlcml0PSEwO3ZhciBzNT0iX19uZ1NpbXBsZUNoYW5nZXNfXyI7ZnVuY3Rpb24gYTUobil7cmV0dXJuIG5bczVdfHxudWxsfXZhciBUYT1mdW5jdGlvbihuLHQsZSl7fSxsNT0ic3ZnIixjNT0ibWF0aCI7ZnVuY3Rpb24gUmEobil7Zm9yKDtBcnJheS5pc0FycmF5KG4pOyluPW5bc3VdO3JldHVybiBufWZ1bmN0aW9uIElNKG4sdCl7cmV0dXJuIFJhKHRbbl0pfWZ1bmN0aW9uIG9hKG4sdCl7cmV0dXJuIFJhKHRbbi5pbmRleF0pfWZ1bmN0aW9uIGQ1KG4sdCl7cmV0dXJuIG4uZGF0YVt0XX1mdW5jdGlvbiAkbShuLHQpe3JldHVybiBuW3RdfWZ1bmN0aW9uIGlkKG4sdCl7bGV0IGU9dFtuXTtyZXR1cm4gTnAoZSk/ZTplW3N1XX1mdW5jdGlvbiByTShuKXtyZXR1cm4gNjQ9PSg2NCZuW3JpXSl9ZnVuY3Rpb24gaXUobix0KXtyZXR1cm4gbnVsbD09dD9udWxsOm5bdF19ZnVuY3Rpb24gdTUobil7bltMbV09MH1mdW5jdGlvbiBXUChuLHQpe25bRnBdKz10O2xldCBlPW4saT1uW0dyXTtmb3IoO251bGwhPT1pJiYoMT09PXQmJjE9PT1lW0ZwXXx8LTE9PT10JiYwPT09ZVtGcF0pOylpW0ZwXSs9dCxlPWksaT1pW0dyXX12YXIgam49e2xGcmFtZTp2NShudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITB9O2Z1bmN0aW9uIHA1KCl7cmV0dXJuIGpuLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBaZSgpe3JldHVybiBqbi5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gRWkoKXtyZXR1cm4gam4ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIFgobil7cmV0dXJuIGpuLmxGcmFtZS5jb250ZXh0TFZpZXc9bixuW0VzXX1mdW5jdGlvbiBRKG4pe3JldHVybiBqbi5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsbn1mdW5jdGlvbiBQbygpe2xldCBuPWY1KCk7Zm9yKDtudWxsIT09biYmNjQ9PT1uLnR5cGU7KW49bi5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gZjUoKXtyZXR1cm4gam4ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBxXygpe2xldCBuPWpuLmxGcmFtZSx0PW4uY3VycmVudFROb2RlO3JldHVybiBuLmlzUGFyZW50P3Q6dC5wYXJlbnR9ZnVuY3Rpb24gZGMobix0KXtsZXQgZT1qbi5sRnJhbWU7ZS5jdXJyZW50VE5vZGU9bixlLmlzUGFyZW50PXR9ZnVuY3Rpb24gcVAoKXtyZXR1cm4gam4ubEZyYW1lLmlzUGFyZW50fWZ1bmN0aW9uIFlQKCl7am4ubEZyYW1lLmlzUGFyZW50PSExfWZ1bmN0aW9uIG9zKCl7bGV0IG49am4ubEZyYW1lLHQ9bi5iaW5kaW5nUm9vdEluZGV4O3JldHVybi0xPT09dCYmKHQ9bi5iaW5kaW5nUm9vdEluZGV4PW4udFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpLHR9ZnVuY3Rpb24gcmQoKXtyZXR1cm4gam4ubEZyYW1lLmJpbmRpbmdJbmRleH1mdW5jdGlvbiBtNShuKXtyZXR1cm4gam4ubEZyYW1lLmJpbmRpbmdJbmRleD1ufWZ1bmN0aW9uIGVoKCl7cmV0dXJuIGpuLmxGcmFtZS5iaW5kaW5nSW5kZXgrK31mdW5jdGlvbiBvZChuKXtsZXQgdD1qbi5sRnJhbWUsZT10LmJpbmRpbmdJbmRleDtyZXR1cm4gdC5iaW5kaW5nSW5kZXg9dC5iaW5kaW5nSW5kZXgrbixlfWZ1bmN0aW9uIGg1KG4pe2puLmxGcmFtZS5pbkkxOG49bn1mdW5jdGlvbiBHcmUobix0KXtsZXQgZT1qbi5sRnJhbWU7ZS5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nUm9vdEluZGV4PW4sTFIodCl9ZnVuY3Rpb24gTFIobil7am4ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleD1ufWZ1bmN0aW9uIFhQKG4pe2xldCB0PWpuLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT10P251bGw6blt0XX1mdW5jdGlvbiBnNSgpe3JldHVybiBqbi5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gUVAobil7am4ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PW59ZnVuY3Rpb24gcXJlKG4pe2xldCB0PW5bRm5dO3JldHVybiAyPT09dC50eXBlP3QuZGVjbFROb2RlOjE9PT10LnR5cGU/bltTc106bnVsbH1mdW5jdGlvbiBfNShuLHQsZSl7aWYoZSZ4aS5Ta2lwU2VsZil7bGV0IHI9dCxvPW47Zm9yKDshKHI9ci5wYXJlbnQsbnVsbCE9PXJ8fGUmeGkuSG9zdHx8KHI9cXJlKG8pLG51bGw9PT1yfHwobz1vW0ptXSwxMCZyLnR5cGUpKSk7KTtpZihudWxsPT09cilyZXR1cm4hMTt0PXIsbj1vfWxldCBpPWpuLmxGcmFtZT1iNSgpO3JldHVybiBpLmN1cnJlbnRUTm9kZT10LGkubFZpZXc9biwhMH1mdW5jdGlvbiBaUChuKXtsZXQgdD1iNSgpLGU9bltGbl07am4ubEZyYW1lPXQsdC5jdXJyZW50VE5vZGU9ZS5maXJzdENoaWxkLHQubFZpZXc9bix0LnRWaWV3PWUsdC5jb250ZXh0TFZpZXc9bix0LmJpbmRpbmdJbmRleD1lLmJpbmRpbmdTdGFydEluZGV4LHQuaW5JMThuPSExfWZ1bmN0aW9uIGI1KCl7bGV0IG49am4ubEZyYW1lLHQ9bnVsbD09PW4/bnVsbDpuLmNoaWxkO3JldHVybiBudWxsPT09dD92NShuKTp0fWZ1bmN0aW9uIHY1KG4pe2xldCB0PXtjdXJyZW50VE5vZGU6bnVsbCxpc1BhcmVudDohMCxsVmlldzpudWxsLHRWaWV3Om51bGwsc2VsZWN0ZWRJbmRleDotMSxjb250ZXh0TFZpZXc6bnVsbCxlbGVtZW50RGVwdGhDb3VudDowLGN1cnJlbnROYW1lc3BhY2U6bnVsbCxjdXJyZW50RGlyZWN0aXZlSW5kZXg6LTEsYmluZGluZ1Jvb3RJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsY3VycmVudFF1ZXJ5SW5kZXg6MCxwYXJlbnQ6bixjaGlsZDpudWxsLGluSTE4bjohMX07cmV0dXJuIG51bGwhPT1uJiYobi5jaGlsZD10KSx0fWZ1bmN0aW9uIHk1KCl7bGV0IG49am4ubEZyYW1lO3JldHVybiBqbi5sRnJhbWU9bi5wYXJlbnQsbi5jdXJyZW50VE5vZGU9bnVsbCxuLmxWaWV3PW51bGwsbn12YXIgeDU9eTU7ZnVuY3Rpb24gS1AoKXtsZXQgbj15NSgpO24uaXNQYXJlbnQ9ITAsbi50Vmlldz1udWxsLG4uc2VsZWN0ZWRJbmRleD0tMSxuLmNvbnRleHRMVmlldz1udWxsLG4uZWxlbWVudERlcHRoQ291bnQ9MCxuLmN1cnJlbnREaXJlY3RpdmVJbmRleD0tMSxuLmN1cnJlbnROYW1lc3BhY2U9bnVsbCxuLmJpbmRpbmdSb290SW5kZXg9LTEsbi5iaW5kaW5nSW5kZXg9LTEsbi5jdXJyZW50UXVlcnlJbmRleD0wfWZ1bmN0aW9uIHNzKCl7cmV0dXJuIGpuLmxGcmFtZS5zZWxlY3RlZEluZGV4fWZ1bmN0aW9uIFZwKG4pe2puLmxGcmFtZS5zZWxlY3RlZEluZGV4PW59ZnVuY3Rpb24ga3IoKXtsZXQgbj1qbi5sRnJhbWU7cmV0dXJuIGQ1KG4udFZpZXcsbi5zZWxlY3RlZEluZGV4KX1mdW5jdGlvbiBObigpe2puLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPWw1fWZ1bmN0aW9uIE9vKCl7am4ubEZyYW1lLmN1cnJlbnROYW1lc3BhY2U9bnVsbH1mdW5jdGlvbiBBTShuLHQpe2ZvcihsZXQgZT10LmRpcmVjdGl2ZVN0YXJ0LGk9dC5kaXJlY3RpdmVFbmQ7ZTxpO2UrKyl7bGV0IG89bi5kYXRhW2VdLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6cyxuZ0FmdGVyQ29udGVudENoZWNrZWQ6YSxuZ0FmdGVyVmlld0luaXQ6bCxuZ0FmdGVyVmlld0NoZWNrZWQ6YyxuZ09uRGVzdHJveTpkfT1vO3MmJihuLmNvbnRlbnRIb29rcz8/KG4uY29udGVudEhvb2tzPVtdKSkucHVzaCgtZSxzKSxhJiYoKG4uY29udGVudEhvb2tzPz8obi5jb250ZW50SG9va3M9W10pKS5wdXNoKGUsYSksKG4uY29udGVudENoZWNrSG9va3M/PyhuLmNvbnRlbnRDaGVja0hvb2tzPVtdKSkucHVzaChlLGEpKSxsJiYobi52aWV3SG9va3M/PyhuLnZpZXdIb29rcz1bXSkpLnB1c2goLWUsbCksYyYmKChuLnZpZXdIb29rcz8/KG4udmlld0hvb2tzPVtdKSkucHVzaChlLGMpLChuLnZpZXdDaGVja0hvb2tzPz8obi52aWV3Q2hlY2tIb29rcz1bXSkpLnB1c2goZSxjKSksbnVsbCE9ZCYmKG4uZGVzdHJveUhvb2tzPz8obi5kZXN0cm95SG9va3M9W10pKS5wdXNoKGUsZCl9fWZ1bmN0aW9uIGpDKG4sdCxlKXtDNShuLHQsMyxlKX1mdW5jdGlvbiBHQyhuLHQsZSxpKXsoMyZuW3JpXSk9PT1lJiZDNShuLHQsZSxpKX1mdW5jdGlvbiBkUihuLHQpe2xldCBlPW5bcmldOygzJmUpPT09dCYmKGUmPTIwNDcsZSs9MSxuW3JpXT1lKX1mdW5jdGlvbiBDNShuLHQsZSxpKXtsZXQgbz1pPz8tMSxzPXQubGVuZ3RoLTEsYT0wO2ZvcihsZXQgbD12b2lkIDAhPT1pPzY1NTM1Jm5bTG1dOjA7bDxzO2wrKylpZigibnVtYmVyIj09dHlwZW9mIHRbbCsxXSl7aWYoYT10W2xdLG51bGwhPWkmJmE+PWkpYnJlYWt9ZWxzZSB0W2xdPDAmJihuW0xtXSs9NjU1MzYpLChhPG98fC0xPT1vKSYmKCRyZShuLGUsdCxsKSxuW0xtXT0oNDI5NDkwMTc2MCZuW0xtXSkrbCsyKSxsKyt9ZnVuY3Rpb24gJHJlKG4sdCxlLGkpe2xldCByPWVbaV08MCxvPWVbaSsxXSxhPW5bcj8tZVtpXTplW2ldXTtpZihyKXtpZihuW3JpXT4+MTE8bltMbV0+PjE2JiYoMyZuW3JpXSk9PT10KXtuW3JpXSs9MjA0OCxUYSg0LGEsbyk7dHJ5e28uY2FsbChhKX1maW5hbGx5e1RhKDUsYSxvKX19fWVsc2V7VGEoNCxhLG8pO3RyeXtvLmNhbGwoYSl9ZmluYWxseXtUYSg1LGEsbyl9fX12YXIgam09LTEsSHA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuZmFjdG9yeT10LHRoaXMucmVzb2x2aW5nPSExLHRoaXMuY2FuU2VlVmlld1Byb3ZpZGVycz1lLHRoaXMuaW5qZWN0SW1wbD1pfX07ZnVuY3Rpb24gQlIobix0LGUpe2xldCBpPTA7Zm9yKDtpPGUubGVuZ3RoOyl7bGV0IHI9ZVtpXTtpZigibnVtYmVyIj09dHlwZW9mIHIpe2lmKDAhPT1yKWJyZWFrO2krKztsZXQgbz1lW2krK10scz1lW2krK10sYT1lW2krK107bi5zZXRBdHRyaWJ1dGUodCxzLGEsbyl9ZWxzZXtsZXQgbz1yLHM9ZVsrK2ldO2lvZShvKT9uLnNldFByb3BlcnR5KHQsbyxzKTpuLnNldEF0dHJpYnV0ZSh0LG8scyksaSsrfX1yZXR1cm4gaX1mdW5jdGlvbiBNNShuKXtyZXR1cm4gMz09PW58fDQ9PT1ufHw2PT09bn1mdW5jdGlvbiBpb2Uobil7cmV0dXJuIDY0PT09bi5jaGFyQ29kZUF0KDApfWZ1bmN0aW9uIFlfKG4sdCl7aWYobnVsbCE9PXQmJjAhPT10Lmxlbmd0aClpZihudWxsPT09bnx8MD09PW4ubGVuZ3RoKW49dC5zbGljZSgpO2Vsc2V7bGV0IGU9LTE7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCByPXRbaV07Im51bWJlciI9PXR5cGVvZiByP2U9cjowPT09ZXx8b0gobixlLHIsbnVsbCwtMT09PWV8fDI9PT1lP3RbKytpXTpudWxsKX19cmV0dXJuIG59ZnVuY3Rpb24gb0gobix0LGUsaSxyKXtsZXQgbz0wLHM9bi5sZW5ndGg7aWYoLTE9PT10KXM9LTE7ZWxzZSBmb3IoO288bi5sZW5ndGg7KXtsZXQgYT1uW28rK107aWYoIm51bWJlciI9PXR5cGVvZiBhKXtpZihhPT09dCl7cz0tMTticmVha31pZihhPnQpe3M9by0xO2JyZWFrfX19Zm9yKDtvPG4ubGVuZ3RoOyl7bGV0IGE9bltvXTtpZigibnVtYmVyIj09dHlwZW9mIGEpYnJlYWs7aWYoYT09PWUpe2lmKG51bGw9PT1pKXJldHVybiB2b2lkKG51bGwhPT1yJiYobltvKzFdPXIpKTtpZihpPT09bltvKzFdKXJldHVybiB2b2lkKG5bbysyXT1yKX1vKyssbnVsbCE9PWkmJm8rKyxudWxsIT09ciYmbysrfS0xIT09cyYmKG4uc3BsaWNlKHMsMCx0KSxvPXMrMSksbi5zcGxpY2UobysrLDAsZSksbnVsbCE9PWkmJm4uc3BsaWNlKG8rKywwLGkpLG51bGwhPT1yJiZuLnNwbGljZShvKyssMCxyKX1mdW5jdGlvbiB3NShuKXtyZXR1cm4gbiE9PWptfWZ1bmN0aW9uIG9NKG4pe3JldHVybiAzMjc2NyZufWZ1bmN0aW9uIHNNKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4+PjE2fShuKSxpPXQ7Zm9yKDtlPjA7KWk9aVtKbV0sZS0tO3JldHVybiBpfXZhciBWUj0hMDtmdW5jdGlvbiBhTShuKXtsZXQgdD1WUjtyZXR1cm4gVlI9bix0fXZhciBTNT0yNTUsRTU9NSxzb2U9MCxsYz17fTtmdW5jdGlvbiBsTShuLHQpe2xldCBlPVQ1KG4sdCk7aWYoLTEhPT1lKXJldHVybiBlO2xldCBpPXRbRm5dO2kuZmlyc3RDcmVhdGVQYXNzJiYobi5pbmplY3RvckluZGV4PXQubGVuZ3RoLHVSKGkuZGF0YSxuKSx1Uih0LG51bGwpLHVSKGkuYmx1ZXByaW50LG51bGwpKTtsZXQgcj1KUChuLHQpLG89bi5pbmplY3RvckluZGV4O2lmKHc1KHIpKXtsZXQgcz1vTShyKSxhPXNNKHIsdCksbD1hW0ZuXS5kYXRhO2ZvcihsZXQgYz0wO2M8ODtjKyspdFtvK2NdPWFbcytjXXxsW3MrY119cmV0dXJuIHRbbys4XT1yLG99ZnVuY3Rpb24gdVIobix0KXtuLnB1c2goMCwwLDAsMCwwLDAsMCwwLHQpfWZ1bmN0aW9uIFQ1KG4sdCl7cmV0dXJuLTE9PT1uLmluamVjdG9ySW5kZXh8fG4ucGFyZW50JiZuLnBhcmVudC5pbmplY3RvckluZGV4PT09bi5pbmplY3RvckluZGV4fHxudWxsPT09dFtuLmluamVjdG9ySW5kZXgrOF0/LTE6bi5pbmplY3RvckluZGV4fWZ1bmN0aW9uIEpQKG4sdCl7aWYobi5wYXJlbnQmJi0xIT09bi5wYXJlbnQuaW5qZWN0b3JJbmRleClyZXR1cm4gbi5wYXJlbnQuaW5qZWN0b3JJbmRleDtsZXQgZT0wLGk9bnVsbCxyPXQ7Zm9yKDtudWxsIT09cjspe2lmKGk9UDUociksbnVsbD09PWkpcmV0dXJuIGptO2lmKGUrKyxyPXJbSm1dLC0xIT09aS5pbmplY3RvckluZGV4KXJldHVybiBpLmluamVjdG9ySW5kZXh8ZTw8MTZ9cmV0dXJuIGptfWZ1bmN0aW9uIEhSKG4sdCxlKXshZnVuY3Rpb24obix0LGUpe2xldCBpOyJzdHJpbmciPT10eXBlb2YgZT9pPWUuY2hhckNvZGVBdCgwKXx8MDplLmhhc093blByb3BlcnR5KEZfKSYmKGk9ZVtGX10pLG51bGw9PWkmJihpPWVbRl9dPXNvZSsrKTtsZXQgcj1pJlM1O3QuZGF0YVtuKyhyPj5FNSldfD0xPDxyfShuLHQsZSl9ZnVuY3Rpb24gRDUobix0LGUpe2lmKGUmeGkuT3B0aW9uYWx8fHZvaWQgMCE9PW4pcmV0dXJuIG47QlAoKX1mdW5jdGlvbiBJNShuLHQsZSxpKXtpZihlJnhpLk9wdGlvbmFsJiZ2b2lkIDA9PT1pJiYoaT1udWxsKSwwPT0oZSYoeGkuU2VsZnx4aS5Ib3N0KSkpe2xldCByPW5bdE1dLG89RWEodm9pZCAwKTt0cnl7cmV0dXJuIHI/ci5nZXQodCxpLGUmeGkuT3B0aW9uYWwpOktIKHQsaSxlJnhpLk9wdGlvbmFsKX1maW5hbGx5e0VhKG8pfX1yZXR1cm4gRDUoaSwwLGUpfWZ1bmN0aW9uIEE1KG4sdCxlLGk9eGkuRGVmYXVsdCxyKXtpZihudWxsIT09bil7aWYoMTAyNCZ0W3JpXSl7bGV0IHM9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1uLHM9dDtmb3IoO251bGwhPT1vJiZudWxsIT09cyYmMTAyNCZzW3JpXSYmISgyNTYmc1tyaV0pOyl7bGV0IGE9UjUobyxzLGUsaXx4aS5TZWxmLGxjKTtpZihhIT09bGMpcmV0dXJuIGE7bGV0IGw9by5wYXJlbnQ7aWYoIWwpe2xldCBjPXNbaTVdO2lmKGMpe2xldCBkPWMuZ2V0KGUsbGMsaSk7aWYoZCE9PWxjKXJldHVybiBkfWw9UDUocykscz1zW0ptXX1vPWx9cmV0dXJuIHJ9KG4sdCxlLGksbGMpO2lmKHMhPT1sYylyZXR1cm4gc31sZXQgbz1SNShuLHQsZSxpLGxjKTtpZihvIT09bGMpcmV0dXJuIG99cmV0dXJuIEk1KHQsZSxpLHIpfWZ1bmN0aW9uIFI1KG4sdCxlLGkscil7bGV0IG89ZnVuY3Rpb24obil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBuLmNoYXJDb2RlQXQoMCl8fDA7bGV0IHQ9bi5oYXNPd25Qcm9wZXJ0eShGXyk/bltGX106dm9pZCAwO3JldHVybiJudW1iZXIiPT10eXBlb2YgdD90Pj0wP3QmUzU6dW9lOnR9KGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBvKXtpZighXzUodCxuLGkpKXJldHVybiBpJnhpLkhvc3Q/RDUociwwLGkpOkk1KHQsZSxpLHIpO3RyeXtsZXQgcz1vKGkpO2lmKG51bGwhPXN8fGkmeGkuT3B0aW9uYWwpcmV0dXJuIHM7QlAoKX1maW5hbGx5e3g1KCl9fWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBvKXtsZXQgcz1udWxsLGE9VDUobix0KSxsPWptLGM9aSZ4aS5Ib3N0P3RbYmxdW1NzXTpudWxsO2ZvcigoLTE9PT1hfHxpJnhpLlNraXBTZWxmKSYmKGw9LTE9PT1hP0pQKG4sdCk6dFthKzhdLGwhPT1qbSYmYUgoaSwhMSk/KHM9dFtGbl0sYT1vTShsKSx0PXNNKGwsdCkpOmE9LTEpOy0xIT09YTspe2xldCBkPXRbRm5dO2lmKHNIKG8sYSxkLmRhdGEpKXtsZXQgdT1jb2UoYSx0LGUscyxpLGMpO2lmKHUhPT1sYylyZXR1cm4gdX1sPXRbYSs4XSxsIT09am0mJmFIKGksdFtGbl0uZGF0YVthKzhdPT09YykmJnNIKG8sYSx0KT8ocz1kLGE9b00obCksdD1zTShsLHQpKTphPS0xfX1yZXR1cm4gcn1mdW5jdGlvbiBjb2Uobix0LGUsaSxyLG8pe2xldCBzPXRbRm5dLGE9cy5kYXRhW24rOF0sZD1XQyhhLHMsZSxudWxsPT1pP1RNKGEpJiZWUjppIT1zJiYwIT0oMyZhLnR5cGUpLHImeGkuSG9zdCYmbz09PWEpO3JldHVybiBudWxsIT09ZD96cCh0LHMsZCxhKTpsY31mdW5jdGlvbiBXQyhuLHQsZSxpLHIpe2xldCBvPW4ucHJvdmlkZXJJbmRleGVzLHM9dC5kYXRhLGE9MTA0ODU3NSZvLGw9bi5kaXJlY3RpdmVTdGFydCxkPW8+PjIwLHA9cj9hK2Q6bi5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBmPWk/YTphK2Q7ZjxwO2YrKyl7bGV0IG09c1tmXTtpZihmPGwmJmU9PT1tfHxmPj1sJiZtLnR5cGU9PT1lKXJldHVybiBmfWlmKHIpe2xldCBmPXNbbF07aWYoZiYmdmwoZikmJmYudHlwZT09PWUpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24genAobix0LGUsaSl7bGV0IHI9bltlXSxvPXQuZGF0YTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEhwfShyKSl7bGV0IHM9cjtzLnJlc29sdmluZyYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgeXQoLTIwMCxgQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZCBmb3IgJHtufWApfShMUChvW2VdKSk7bGV0IGE9YU0ocy5jYW5TZWVWaWV3UHJvdmlkZXJzKTtzLnJlc29sdmluZz0hMDtsZXQgbD1zLmluamVjdEltcGw/RWEocy5pbmplY3RJbXBsKTpudWxsO181KG4saSx4aS5EZWZhdWx0KTt0cnl7cj1uW2VdPXMuZmFjdG9yeSh2b2lkIDAsbyxuLGkpLHQuZmlyc3RDcmVhdGVQYXNzJiZlPj1pLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbihuLHQsZSl7bGV0e25nT25DaGFuZ2VzOmksbmdPbkluaXQ6cixuZ0RvQ2hlY2s6b309dC50eXBlLnByb3RvdHlwZTtpZihpKXtsZXQgcz1vNSh0KTsoZS5wcmVPcmRlckhvb2tzPz8oZS5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChuLHMpLChlLnByZU9yZGVyQ2hlY2tIb29rcz8/KGUucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChuLHMpfXImJihlLnByZU9yZGVySG9va3M/PyhlLnByZU9yZGVySG9va3M9W10pKS5wdXNoKDAtbixyKSxvJiYoKGUucHJlT3JkZXJIb29rcz8/KGUucHJlT3JkZXJIb29rcz1bXSkpLnB1c2gobixvKSwoZS5wcmVPcmRlckNoZWNrSG9va3M/PyhlLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobixvKSl9KGUsb1tlXSx0KX1maW5hbGx5e251bGwhPT1sJiZFYShsKSxhTShhKSxzLnJlc29sdmluZz0hMSx4NSgpfX1yZXR1cm4gcn1mdW5jdGlvbiBzSChuLHQsZSl7cmV0dXJuISEoZVt0KyhuPj5FNSldJjE8PG4pfWZ1bmN0aW9uIGFIKG4sdCl7cmV0dXJuIShuJnhpLlNlbGZ8fG4meGkuSG9zdCYmdCl9dmFyIExwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdE5vZGU9dCx0aGlzLl9sVmlldz1lfWdldCh0LGUsaSl7cmV0dXJuIEE1KHRoaXMuX3ROb2RlLHRoaXMuX2xWaWV3LHQsd00oaSksZSl9fTtmdW5jdGlvbiB1b2UoKXtyZXR1cm4gbmV3IExwKFBvKCksWmUoKSl9ZnVuY3Rpb24gWG4obil7cmV0dXJuIG91KCgpPT57bGV0IHQ9bi5wcm90b3R5cGUuY29uc3RydWN0b3IsZT10W2VkXXx8elIodCksaT1PYmplY3QucHJvdG90eXBlLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO3ImJnIhPT1pOyl7bGV0IG89cltlZF18fHpSKHIpO2lmKG8mJm8hPT1lKXJldHVybiBvO3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpfXJldHVybiBvPT5uZXcgb30pfWZ1bmN0aW9uIHpSKG4pe3JldHVybiBZSChuKT8oKT0+e2xldCB0PXpSKFJpKG4pKTtyZXR1cm4gdCYmdCgpfTpCcChuKX1mdW5jdGlvbiBQNShuKXtsZXQgdD1uW0ZuXSxlPXQudHlwZTtyZXR1cm4gMj09PWU/dC5kZWNsVE5vZGU6MT09PWU/bltTc106bnVsbH1mdW5jdGlvbiB5byhuKXtyZXR1cm4gZnVuY3Rpb24obix0KXtpZigiY2xhc3MiPT09dClyZXR1cm4gbi5jbGFzc2VzO2lmKCJzdHlsZSI9PT10KXJldHVybiBuLnN0eWxlcztsZXQgZT1uLmF0dHJzO2lmKGUpe2xldCBpPWUubGVuZ3RoLHI9MDtmb3IoO3I8aTspe2xldCBvPWVbcl07aWYoTTUobykpYnJlYWs7aWYoMD09PW8pcis9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2Ygbylmb3IocisrO3I8aSYmInN0cmluZyI9PXR5cGVvZiBlW3JdOylyKys7ZWxzZXtpZihvPT09dClyZXR1cm4gZVtyKzFdO3IrPTJ9fX1yZXR1cm4gbnVsbH0oUG8oKSxuKX12YXIgQm09Il9fYW5ub3RhdGlvbnNfXyIsVm09Il9fcGFyYW1ldGVyc19fIixIbT0iX19wcm9wX19tZXRhZGF0YV9fIjtmdW5jdGlvbiBvYihuLHQsZSxpLHIpe3JldHVybiBvdSgoKT0+e2xldCBvPSRQKHQpO2Z1bmN0aW9uIHMoLi4uYSl7aWYodGhpcyBpbnN0YW5jZW9mIHMpcmV0dXJuIG8uY2FsbCh0aGlzLC4uLmEpLHRoaXM7bGV0IGw9bmV3IHMoLi4uYSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiByJiZyKGQsLi4uYSksKGQuaGFzT3duUHJvcGVydHkoQm0pP2RbQm1dOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLEJtLHt2YWx1ZTpbXX0pW0JtXSkucHVzaChsKSxpJiZpKGQpLGR9fXJldHVybiBlJiYocy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkpLHMucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4scy5hbm5vdGF0aW9uQ2xzPXMsc30pfWZ1bmN0aW9uICRQKG4pe3JldHVybiBmdW5jdGlvbiguLi5lKXtpZihuKXtsZXQgaT1uKC4uLmUpO2ZvcihsZXQgciBpbiBpKXRoaXNbcl09aVtyXX19fWZ1bmN0aW9uIHRoKG4sdCxlKXtyZXR1cm4gb3UoKCk9PntsZXQgaT0kUCh0KTtmdW5jdGlvbiByKC4uLm8pe2lmKHRoaXMgaW5zdGFuY2VvZiByKXJldHVybiBpLmFwcGx5KHRoaXMsbyksdGhpcztsZXQgcz1uZXcgciguLi5vKTtyZXR1cm4gYS5hbm5vdGF0aW9uPXMsYTtmdW5jdGlvbiBhKGwsYyxkKXtsZXQgdT1sLmhhc093blByb3BlcnR5KFZtKT9sW1ZtXTpPYmplY3QuZGVmaW5lUHJvcGVydHkobCxWbSx7dmFsdWU6W119KVtWbV07Zm9yKDt1Lmxlbmd0aDw9ZDspdS5wdXNoKG51bGwpO3JldHVybih1W2RdPXVbZF18fFtdKS5wdXNoKHMpLGx9fXJldHVybiBlJiYoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkpLHIucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4sci5hbm5vdGF0aW9uQ2xzPXIscn0pfWZ1bmN0aW9uIGF1KG4sdCxlLGkpe3JldHVybiBvdSgoKT0+e2xldCByPSRQKHQpO2Z1bmN0aW9uIG8oLi4ucyl7aWYodGhpcyBpbnN0YW5jZW9mIG8pcmV0dXJuIHIuYXBwbHkodGhpcyxzKSx0aGlzO2xldCBhPW5ldyBvKC4uLnMpO3JldHVybiBmdW5jdGlvbihjLGQpe2xldCB1PWMuY29uc3RydWN0b3IscD11Lmhhc093blByb3BlcnR5KEhtKT91W0htXTpPYmplY3QuZGVmaW5lUHJvcGVydHkodSxIbSx7dmFsdWU6e319KVtIbV07cFtkXT1wLmhhc093blByb3BlcnR5KGQpJiZwW2RdfHxbXSxwW2RdLnVuc2hpZnQoYSksaSYmaShjLGQsLi4ucyl9fXJldHVybiBlJiYoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkpLG8ucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4sby5hbm5vdGF0aW9uQ2xzPW8sb30pfXZhciBmb2U9dGgoIkF0dHJpYnV0ZSIsbj0+KHthdHRyaWJ1dGVOYW1lOm4sX19OR19FTEVNRU5UX0lEX186KCk9PnlvKG4pfSkpLGllPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fZGVzYz10LHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVjdGlvblRva2VuIix0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1iZXIiPT10eXBlb2YgZT90aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWU6dm9pZCAwIT09ZSYmKHRoaXMuXHUwMjc1cHJvdj11ZSh7dG9rZW46dGhpcyxwcm92aWRlZEluOmUucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6ZS5mYWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3RyaW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX0scW09KG5ldyBpZSgiQW5hbHl6ZUZvckVudHJ5Q29tcG9uZW50cyIpLGNsYXNze30pO2Z1bmN0aW9uIElhKG4pe2xldCB0PVVyLm5nO2lmKHQmJnQuXHUwMjc1Y29tcGlsZXJGYWNhZGUpcmV0dXJuIHQuXHUwMjc1Y29tcGlsZXJGYWNhZGU7dGhyb3cgbmV3IEVycm9yKCJKSVQgY29tcGlsZXIgdW5hdmFpbGFibGUiKX1hdSgiQ29udGVudENoaWxkcmVuIiwobix0PXt9KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiExLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiExLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEwLC4uLnR9KSxxbSksYXUoIkNvbnRlbnRDaGlsZCIsKG4sdD17fSk9Pih7c2VsZWN0b3I6bixmaXJzdDohMCxpc1ZpZXdRdWVyeTohMSxkZXNjZW5kYW50czohMCwuLi50fSkscW0pLGF1KCJWaWV3Q2hpbGRyZW4iLChuLHQ9e30pPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITAsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITAsLi4udH0pLHFtKSxhdSgiVmlld0NoaWxkIiwobix0KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiEwLGRlc2NlbmRhbnRzOiEwLC4uLnR9KSxxbSk7dmFyIG1vZT1GdW5jdGlvbjtmdW5jdGlvbiBSXyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1mdW5jdGlvbiAkZChuKXtyZXR1cm4gbi5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9ZnVuY3Rpb24gZU8obix0KXtuLmZvckVhY2goZT0+QXJyYXkuaXNBcnJheShlKT9lTyhlLHQpOnQoZSkpfWZ1bmN0aW9uIGs1KG4sdCxlKXt0Pj1uLmxlbmd0aD9uLnB1c2goZSk6bi5zcGxpY2UodCwwLGUpfWZ1bmN0aW9uIGNNKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoLTE/bi5wb3AoKTpuLnNwbGljZSh0LDEpWzBdfWZ1bmN0aW9uIE5fKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuO2krKyllLnB1c2godCk7cmV0dXJuIGV9ZnVuY3Rpb24gc2Eobix0LGUpe2xldCBpPXNiKG4sdCk7cmV0dXJuIGk+PTA/blsxfGldPWU6KGk9fmksZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bi5sZW5ndGg7aWYocj09dCluLnB1c2goZSxpKTtlbHNlIGlmKDE9PT1yKW4ucHVzaChpLG5bMF0pLG5bMF09ZTtlbHNle2ZvcihyLS0sbi5wdXNoKG5bci0xXSxuW3JdKTtyPnQ7KW5bcl09bltyLTJdLHItLTtuW3RdPWUsblt0KzFdPWl9fShuLGksdCxlKSksaX1mdW5jdGlvbiBwUihuLHQpe2xldCBlPXNiKG4sdCk7aWYoZT49MClyZXR1cm4gblsxfGVdfWZ1bmN0aW9uIHNiKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT0wLHI9bi5sZW5ndGg+PjE7Zm9yKDtyIT09aTspe2xldCBvPWkrKHItaT4+MSkscz1uW288PDFdO2lmKHQ9PT1zKXJldHVybiBvPDwxO3M+dD9yPW86aT1vKzF9cmV0dXJufihyPDwxKX0obix0KX12YXIgYm9lPS9eZnVuY3Rpb25ccytcUytcKFwpXHMqe1tcc1xTXStcLmFwcGx5XCh0aGlzLFxzKihhcmd1bWVudHN8KD86W14oKV0rXChcW1xdLCk/W14oKV0rXChhcmd1bWVudHNcKS4qKVwpLyx2b2U9L15jbGFzc1xzK1tBLVphLXpcZCRfXSpccypleHRlbmRzXHMrW157XSt7Lyx5b2U9L15jbGFzc1xzK1tBLVphLXpcZCRfXSpccypleHRlbmRzXHMrW157XSt7W1xzXFNdKmNvbnN0cnVjdG9yXHMqXCgvLHhvZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKFwpXHMqe1tefV0qc3VwZXJcKFwuXC5cLmFyZ3VtZW50c1wpLyxVUj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZWZsZWN0PXR8fFVyLlJlZmxlY3R9ZmFjdG9yeSh0KXtyZXR1cm4oLi4uZSk9Pm5ldyB0KC4uLmUpfV96aXBUeXBlc0FuZEFubm90YXRpb25zKHQsZSl7bGV0IGk7aT1OXyh0eXBlb2YgdD4idSI/ZS5sZW5ndGg6dC5sZW5ndGgpO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl09dHlwZW9mIHQ+InUiP1tdOnRbcl0mJnRbcl0hPU9iamVjdD9bdFtyXV06W10sZSYmbnVsbCE9ZVtyXSYmKGlbcl09aVtyXS5jb25jYXQoZVtyXSkpO3JldHVybiBpfV9vd25QYXJhbWV0ZXJzKHQsZSl7bGV0IGk9dC50b1N0cmluZygpO2lmKGJvZS50ZXN0KG49aSl8fHhvZS50ZXN0KG4pfHx2b2UudGVzdChuKSYmIXlvZS50ZXN0KG4pKXJldHVybiBudWxsO3ZhciBuO2lmKHQucGFyYW1ldGVycyYmdC5wYXJhbWV0ZXJzIT09ZS5wYXJhbWV0ZXJzKXJldHVybiB0LnBhcmFtZXRlcnM7bGV0IHI9dC5jdG9yUGFyYW1ldGVycztpZihyJiZyIT09ZS5jdG9yUGFyYW1ldGVycyl7bGV0IGE9ImZ1bmN0aW9uIj09dHlwZW9mIHI/cigpOnIsbD1hLm1hcChkPT5kJiZkLnR5cGUpLGM9YS5tYXAoZD0+ZCYmZlIoZC5kZWNvcmF0b3JzKSk7cmV0dXJuIHRoaXMuX3ppcFR5cGVzQW5kQW5ub3RhdGlvbnMobCxjKX1sZXQgbz10Lmhhc093blByb3BlcnR5KFZtKSYmdFtWbV0scz10aGlzLl9yZWZsZWN0JiZ0aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhJiZ0aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhKCJkZXNpZ246cGFyYW10eXBlcyIsdCk7cmV0dXJuIHN8fG8/dGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhzLG8pOk5fKHQubGVuZ3RoKX1wYXJhbWV0ZXJzKHQpe2lmKCFSXyh0KSlyZXR1cm5bXTtsZXQgZT1CQyh0KSxpPXRoaXMuX293blBhcmFtZXRlcnModCxlKTtyZXR1cm4haSYmZSE9PU9iamVjdCYmKGk9dGhpcy5wYXJhbWV0ZXJzKGUpKSxpfHxbXX1fb3duQW5ub3RhdGlvbnModCxlKXtpZih0LmFubm90YXRpb25zJiZ0LmFubm90YXRpb25zIT09ZS5hbm5vdGF0aW9ucyl7bGV0IGk9dC5hbm5vdGF0aW9ucztyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaSYmaS5hbm5vdGF0aW9ucyYmKGk9aS5hbm5vdGF0aW9ucyksaX1yZXR1cm4gdC5kZWNvcmF0b3JzJiZ0LmRlY29yYXRvcnMhPT1lLmRlY29yYXRvcnM/ZlIodC5kZWNvcmF0b3JzKTp0Lmhhc093blByb3BlcnR5KEJtKT90W0JtXTpudWxsfWFubm90YXRpb25zKHQpe2lmKCFSXyh0KSlyZXR1cm5bXTtsZXQgZT1CQyh0KSxpPXRoaXMuX293bkFubm90YXRpb25zKHQsZSl8fFtdO3JldHVybihlIT09T2JqZWN0P3RoaXMuYW5ub3RhdGlvbnMoZSk6W10pLmNvbmNhdChpKX1fb3duUHJvcE1ldGFkYXRhKHQsZSl7aWYodC5wcm9wTWV0YWRhdGEmJnQucHJvcE1ldGFkYXRhIT09ZS5wcm9wTWV0YWRhdGEpe2xldCBpPXQucHJvcE1ldGFkYXRhO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpLnByb3BNZXRhZGF0YSYmKGk9aS5wcm9wTWV0YWRhdGEpLGl9aWYodC5wcm9wRGVjb3JhdG9ycyYmdC5wcm9wRGVjb3JhdG9ycyE9PWUucHJvcERlY29yYXRvcnMpe2xldCBpPXQucHJvcERlY29yYXRvcnMscj17fTtyZXR1cm4gT2JqZWN0LmtleXMoaSkuZm9yRWFjaChvPT57cltvXT1mUihpW29dKX0pLHJ9cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoSG0pP3RbSG1dOm51bGx9cHJvcE1ldGFkYXRhKHQpe2lmKCFSXyh0KSlyZXR1cm57fTtsZXQgZT1CQyh0KSxpPXt9O2lmKGUhPT1PYmplY3Qpe2xldCBvPXRoaXMucHJvcE1ldGFkYXRhKGUpO09iamVjdC5rZXlzKG8pLmZvckVhY2gocz0+e2lbc109b1tzXX0pfWxldCByPXRoaXMuX293blByb3BNZXRhZGF0YSh0LGUpO3JldHVybiByJiZPYmplY3Qua2V5cyhyKS5mb3JFYWNoKG89PntsZXQgcz1bXTtpLmhhc093blByb3BlcnR5KG8pJiZzLnB1c2goLi4uaVtvXSkscy5wdXNoKC4uLnJbb10pLGlbb109c30pLGl9b3duUHJvcE1ldGFkYXRhKHQpe3JldHVybiBSXyh0KSYmdGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsQkModCkpfHx7fX1oYXNMaWZlY3ljbGVIb29rKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBtb2UmJmUgaW4gdC5wcm90b3R5cGV9fTtmdW5jdGlvbiBmUihuKXtyZXR1cm4gbj9uLm1hcCh0PT5uZXcoMCx0LnR5cGUuYW5ub3RhdGlvbkNscykoLi4udC5hcmdzP3QuYXJnczpbXSkpOltdfWZ1bmN0aW9uIEJDKG4pe2xldCB0PW4ucHJvdG90eXBlP09iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSk6bnVsbDtyZXR1cm4odD90LmNvbnN0cnVjdG9yOm51bGwpfHxPYmplY3R9dmFyIG5oPW5iKHRoKCJJbmplY3QiLG49Pih7dG9rZW46bn0pKSwtMSksVHM9bmIodGgoIk9wdGlvbmFsIiksOCksTW9lPW5iKHRoKCJTZWxmIiksMiksc2Q9bmIodGgoIlNraXBTZWxmIiksNCksd29lPW5iKHRoKCJIb3N0IiksMSksbEg9bnVsbDtmdW5jdGlvbiB0Tygpe3JldHVybiBsSD1sSHx8bmV3IFVSfWZ1bmN0aW9uIFJNKG4pe3JldHVybiBGNSh0TygpLnBhcmFtZXRlcnMobikpfWZ1bmN0aW9uIEY1KG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtsZXQgdD17dG9rZW46bnVsbCxhdHRyaWJ1dGU6bnVsbCxob3N0OiExLG9wdGlvbmFsOiExLHNlbGY6ITEsc2tpcFNlbGY6ITF9O2lmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjApZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aWYodm9pZCAwPT09aSljb250aW51ZTtsZXQgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7aWYoaSBpbnN0YW5jZW9mIFRzfHwiT3B0aW9uYWwiPT09ci5uZ01ldGFkYXRhTmFtZSl0Lm9wdGlvbmFsPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIHNkfHwiU2tpcFNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNraXBTZWxmPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIE1vZXx8IlNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNlbGY9ITA7ZWxzZSBpZihpIGluc3RhbmNlb2Ygd29lfHwiSG9zdCI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuaG9zdD0hMDtlbHNlIGlmKGkgaW5zdGFuY2VvZiBuaCl0LnRva2VuPWkudG9rZW47ZWxzZSBpZihpIGluc3RhbmNlb2YgZm9lKXtpZih2b2lkIDA9PT1pLmF0dHJpYnV0ZU5hbWUpdGhyb3cgbmV3IHl0KDIwNCwhMSk7dC5hdHRyaWJ1dGU9aS5hdHRyaWJ1dGVOYW1lfWVsc2UgdC50b2tlbj1pfWVsc2UgdC50b2tlbj12b2lkIDA9PT1ufHxBcnJheS5pc0FycmF5KG4pJiYwPT09bi5sZW5ndGg/bnVsbDpuO3JldHVybiB0fSh0KSl9dmFyIFhfPW5ldyBNYXAsTjU9bmV3IFNldDtmdW5jdGlvbiBMNShuKXtyZXR1cm4hIShuLnRlbXBsYXRlVXJsJiYhbi5oYXNPd25Qcm9wZXJ0eSgidGVtcGxhdGUiKXx8bi5zdHlsZVVybHMmJm4uc3R5bGVVcmxzLmxlbmd0aCl9dmFyIGNIPW5ldyBNYXAsUG9lPSEwO2Z1bmN0aW9uIEI1KG4sdCl7KGZ1bmN0aW9uKG4sdCxlKXtpZih0JiZ0IT09ZSYmUG9lKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIG1vZHVsZSByZWdpc3RlcmVkIGZvciAke259IC0gJHtwbyh0KX0gdnMgJHtwbyh0Lm5hbWUpfWApfSkodCxjSC5nZXQodCl8fG51bGwsbiksY0guc2V0KHQsbil9dmFyIGpSLEFhPSgoKT0+e3JldHVybihuPUFhfHwoQWE9e30pKVtuLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixuW24uRGFzaENhc2U9Ml09IkRhc2hDYXNlIixBYTt2YXIgbn0pKCksa29lPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csRm9lPS8oPHw+KS8sTm9lPSJcdTIwMGIkMVx1MjAwYiIsVjU9bmV3IE1hcCxCb2U9MCxkSD0iX19uZ0NvbnRleHRfXyI7ZnVuY3Rpb24gdWMobix0KXtOcCh0KT8obltkSF09dFtFTV0sZnVuY3Rpb24obil7VjUuc2V0KG5bRU1dLG4pfSh0KSk6bltkSF09dH1mdW5jdGlvbiBuTyhuLHQpe3JldHVybiBqUihuLHQpfWZ1bmN0aW9uIGlPKG4pe2xldCB0PW5bR3JdO3JldHVybiBuZCh0KT90W0dyXTp0fWZ1bmN0aW9uIHJPKG4pe3JldHVybiBINShuW1dfXSl9ZnVuY3Rpb24gb08obil7cmV0dXJuIEg1KG5bX2xdKX1mdW5jdGlvbiBINShuKXtmb3IoO251bGwhPT1uJiYhbmQobik7KW49bltfbF07cmV0dXJuIG59ZnVuY3Rpb24gem0obix0LGUsaSxyKXtpZihudWxsIT1pKXtsZXQgbyxzPSExO25kKGkpP289aTpOcChpKSYmKHM9ITAsaT1pW3N1XSk7bGV0IGE9UmEoaSk7MD09PW4mJm51bGwhPT1lP251bGw9PXI/cTUodCxlLGEpOlVwKHQsZSxhLHJ8fG51bGwsITApOjE9PT1uJiZudWxsIT09ZT9VcCh0LGUsYSxyfHxudWxsLCEwKToyPT09bj9sTyh0LGEscyk6Mz09PW4mJnQuZGVzdHJveU5vZGUoYSksbnVsbCE9byYmZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1lW2pQXTtvIT09UmEoZSkmJnptKHQsbixpLG8scik7Zm9yKGxldCBhPXdzO2E8ZS5sZW5ndGg7YSsrKXtsZXQgbD1lW2FdO2FiKGxbRm5dLGwsbix0LGksbyl9fSh0LG4sbyxlLHIpfX1mdW5jdGlvbiBzTyhuLHQpe3JldHVybiBuLmNyZWF0ZVRleHQodCl9ZnVuY3Rpb24gejUobix0LGUpe24uc2V0VmFsdWUodCxlKX1mdW5jdGlvbiBqb2Uobix0KXtyZXR1cm4gbi5jcmVhdGVDb21tZW50KGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxhY2Uoa29lLHQ9PnQucmVwbGFjZShGb2UsTm9lKSl9KHQpKX1mdW5jdGlvbiBhTyhuLHQsZSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudCh0LGUpfWZ1bmN0aW9uIFU1KG4sdCl7bGV0IGU9bltXbV0saT1lLmluZGV4T2YodCkscj10W0dyXTs1MTImdFtyaV0mJih0W3JpXSY9LTUxMyxXUChyLC0xKSksZS5zcGxpY2UoaSwxKX1mdW5jdGlvbiBHUihuLHQpe2lmKG4ubGVuZ3RoPD13cylyZXR1cm47bGV0IGU9d3MrdCxpPW5bZV07aWYoaSl7bGV0IHI9aVtyYl07bnVsbCE9PXImJnIhPT1uJiZVNShyLGkpLHQ+MCYmKG5bZS0xXVtfbF09aVtfbF0pO2xldCBvPWNNKG4sd3MrdCk7IWZ1bmN0aW9uKG4sdCl7YWIobix0LHRbb2ldLDIsbnVsbCxudWxsKSx0W3N1XT1udWxsLHRbU3NdPW51bGx9KGlbRm5dLGkpO2xldCBzPW9bY2NdO251bGwhPT1zJiZzLmRldGFjaFZpZXcob1tGbl0pLGlbR3JdPW51bGwsaVtfbF09bnVsbCxpW3JpXSY9LTY1fXJldHVybiBpfWZ1bmN0aW9uIGo1KG4sdCl7aWYoISgxMjgmdFtyaV0pKXtsZXQgZT10W29pXTtlLmRlc3Ryb3lOb2RlJiZhYihuLHQsZSwzLG51bGwsbnVsbCksZnVuY3Rpb24obil7bGV0IHQ9bltXX107aWYoIXQpcmV0dXJuIG1SKG5bRm5dLG4pO2Zvcig7dDspe2xldCBlPW51bGw7aWYoTnAodCkpZT10W1dfXTtlbHNle2xldCBpPXRbd3NdO2kmJihlPWkpfWlmKCFlKXtmb3IoO3QmJiF0W19sXSYmdCE9PW47KU5wKHQpJiZtUih0W0ZuXSx0KSx0PXRbR3JdO251bGw9PT10JiYodD1uKSxOcCh0KSYmbVIodFtGbl0sdCksZT10JiZ0W19sXX10PWV9fSh0KX19ZnVuY3Rpb24gbVIobix0KXtpZighKDEyOCZ0W3JpXSkpe3RbcmldJj0tNjUsdFtyaV18PTEyOCxmdW5jdGlvbihuLHQpe2xldCBlO2lmKG51bGwhPW4mJm51bGwhPShlPW4uZGVzdHJveUhvb2tzKSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpe2xldCByPXRbZVtpXV07aWYoIShyIGluc3RhbmNlb2YgSHApKXtsZXQgbz1lW2krMV07aWYoQXJyYXkuaXNBcnJheShvKSlmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrPTIpe2xldCBhPXJbb1tzXV0sbD1vW3MrMV07VGEoNCxhLGwpO3RyeXtsLmNhbGwoYSl9ZmluYWxseXtUYSg1LGEsbCl9fWVsc2V7VGEoNCxyLG8pO3RyeXtvLmNhbGwocil9ZmluYWxseXtUYSg1LHIsbyl9fX19fShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5jbGVhbnVwLGk9dFtHX10scj0tMTtpZihudWxsIT09ZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoLTE7bys9MilpZigic3RyaW5nIj09dHlwZW9mIGVbb10pe2xldCBzPWVbbyszXTtzPj0wP2lbcj1zXSgpOmlbcj0tc10udW5zdWJzY3JpYmUoKSxvKz0yfWVsc2V7bGV0IHM9aVtyPWVbbysxXV07ZVtvXS5jYWxsKHMpfWlmKG51bGwhPT1pKXtmb3IobGV0IG89cisxO288aS5sZW5ndGg7bysrKSgwLGlbb10pKCk7dFtHX109bnVsbH19KG4sdCksMT09PXRbRm5dLnR5cGUmJnRbb2ldLmRlc3Ryb3koKTtsZXQgZT10W3JiXTtpZihudWxsIT09ZSYmbmQodFtHcl0pKXtlIT09dFtHcl0mJlU1KGUsdCk7bGV0IGk9dFtjY107bnVsbCE9PWkmJmkuZGV0YWNoVmlldyhuKX0hZnVuY3Rpb24obil7VjUuZGVsZXRlKG5bRU1dKX0odCl9fWZ1bmN0aW9uIEc1KG4sdCxlKXtyZXR1cm4gVzUobix0LnBhcmVudCxlKX1mdW5jdGlvbiBXNShuLHQsZSl7bGV0IGk9dDtmb3IoO251bGwhPT1pJiY0MCZpLnR5cGU7KWk9KHQ9aSkucGFyZW50O2lmKG51bGw9PT1pKXJldHVybiBlW3N1XTt7bGV0e2NvbXBvbmVudE9mZnNldDpyfT1pO2lmKHI+LTEpe2xldHtlbmNhcHN1bGF0aW9uOm99PW4uZGF0YVtpLmRpcmVjdGl2ZVN0YXJ0K3JdO2lmKG89PT1yYS5Ob25lfHxvPT09cmEuRW11bGF0ZWQpcmV0dXJuIG51bGx9cmV0dXJuIG9hKGksZSl9fWZ1bmN0aW9uIFVwKG4sdCxlLGkscil7bi5pbnNlcnRCZWZvcmUodCxlLGkscil9ZnVuY3Rpb24gcTUobix0LGUpe24uYXBwZW5kQ2hpbGQodCxlKX1mdW5jdGlvbiB1SChuLHQsZSxpLHIpe251bGwhPT1pP1VwKG4sdCxlLGkscik6cTUobix0LGUpfWZ1bmN0aW9uIFBNKG4sdCl7cmV0dXJuIG4ucGFyZW50Tm9kZSh0KX1mdW5jdGlvbiBZNShuLHQsZSl7cmV0dXJuIFE1KG4sdCxlKX1mdW5jdGlvbiBYNShuLHQsZSl7cmV0dXJuIDQwJm4udHlwZT9vYShuLGUpOm51bGx9dmFyIFdSLFZDLFlSLEhDLFE1PVg1O2Z1bmN0aW9uIFo1KG4sdCl7UTU9bixXUj10fWZ1bmN0aW9uIE9NKG4sdCxlLGkpe2xldCByPUc1KG4saSx0KSxvPXRbb2ldLGE9WTUoaS5wYXJlbnR8fHRbU3NdLGksdCk7aWYobnVsbCE9cilpZihBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKXVIKG8scixlW2xdLGEsITEpO2Vsc2UgdUgobyxyLGUsYSwhMSk7dm9pZCAwIT09V1ImJldSKG8saSx0LGUscil9ZnVuY3Rpb24gcUMobix0KXtpZihudWxsIT09dCl7bGV0IGU9dC50eXBlO2lmKDMmZSlyZXR1cm4gb2EodCxuKTtpZig0JmUpcmV0dXJuIHFSKC0xLG5bdC5pbmRleF0pO2lmKDgmZSl7bGV0IGk9dC5jaGlsZDtpZihudWxsIT09aSlyZXR1cm4gcUMobixpKTt7bGV0IHI9blt0LmluZGV4XTtyZXR1cm4gbmQocik/cVIoLTEscik6UmEocil9fWlmKDMyJmUpcmV0dXJuIG5PKHQsbikoKXx8UmEoblt0LmluZGV4XSk7e2xldCBpPUs1KG4sdCk7cmV0dXJuIG51bGwhPT1pP0FycmF5LmlzQXJyYXkoaSk/aVswXTpxQyhpTyhuW2JsXSksaSk6cUMobix0Lm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBLNShuLHQpe3JldHVybiBudWxsIT09dD9uW2JsXVtTc10ucHJvamVjdGlvblt0LnByb2plY3Rpb25dOm51bGx9ZnVuY3Rpb24gcVIobix0KXtsZXQgZT13cytuKzE7aWYoZTx0Lmxlbmd0aCl7bGV0IGk9dFtlXSxyPWlbRm5dLmZpcnN0Q2hpbGQ7aWYobnVsbCE9PXIpcmV0dXJuIHFDKGkscil9cmV0dXJuIHRbalBdfWZ1bmN0aW9uIGxPKG4sdCxlKXtsZXQgaT1QTShuLHQpO2kmJmZ1bmN0aW9uKG4sdCxlLGkpe24ucmVtb3ZlQ2hpbGQodCxlLGkpfShuLGksdCxlKX1mdW5jdGlvbiBjTyhuLHQsZSxpLHIsbyxzKXtmb3IoO251bGwhPWU7KXtsZXQgYT1pW2UuaW5kZXhdLGw9ZS50eXBlO2lmKHMmJjA9PT10JiYoYSYmdWMoUmEoYSksaSksZS5mbGFnc3w9MiksMzIhPSgzMiZlLmZsYWdzKSlpZig4JmwpY08obix0LGUuY2hpbGQsaSxyLG8sITEpLHptKHQsbixyLGEsbyk7ZWxzZSBpZigzMiZsKXtsZXQgZCxjPW5PKGUsaSk7Zm9yKDtkPWMoKTspem0odCxuLHIsZCxvKTt6bSh0LG4scixhLG8pfWVsc2UgMTYmbD9KNShuLHQsaSxlLHIsbyk6em0odCxuLHIsYSxvKTtlPXM/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9fWZ1bmN0aW9uIGFiKG4sdCxlLGkscixvKXtjTyhlLGksbi5maXJzdENoaWxkLHQscixvLCExKX1mdW5jdGlvbiBKNShuLHQsZSxpLHIsbyl7bGV0IHM9ZVtibF0sbD1zW1NzXS5wcm9qZWN0aW9uW2kucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl6bSh0LG4scixsW2NdLG8pO2Vsc2UgY08obix0LGwsc1tHcl0scixvLCEwKX1mdW5jdGlvbiAkNShuLHQsZSl7IiI9PT1lP24ucmVtb3ZlQXR0cmlidXRlKHQsImNsYXNzIik6bi5zZXRBdHRyaWJ1dGUodCwiY2xhc3MiLGUpfWZ1bmN0aW9uIGV6KG4sdCxlKXtsZXR7bWVyZ2VkQXR0cnM6aSxjbGFzc2VzOnIsc3R5bGVzOm99PWU7bnVsbCE9PWkmJkJSKG4sdCxpKSxudWxsIT09ciYmJDUobix0LHIpLG51bGwhPT1vJiZmdW5jdGlvbihuLHQsZSl7bi5zZXRBdHRyaWJ1dGUodCwic3R5bGUiLGUpfShuLHQsbyl9ZnVuY3Rpb24gdHooKXtpZih2b2lkIDA9PT1WQyYmKFZDPW51bGwsVXIudHJ1c3RlZFR5cGVzKSl0cnl7VkM9VXIudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhUTUw6bj0+bixjcmVhdGVTY3JpcHQ6bj0+bixjcmVhdGVTY3JpcHRVUkw6bj0+bn0pfWNhdGNoe31yZXR1cm4gVkN9ZnVuY3Rpb24gaWgobil7cmV0dXJuIHR6KCk/LmNyZWF0ZUhUTUwobil8fG59ZnVuY3Rpb24gaXooKXtyZXR1cm4gdm9pZCAwIT09WVI/WVI6dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudDp2b2lkIDB9ZnVuY3Rpb24gZE8oKXtpZih2b2lkIDA9PT1IQyYmKEhDPW51bGwsVXIudHJ1c3RlZFR5cGVzKSl0cnl7SEM9VXIudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBIQ31mdW5jdGlvbiBwSChuKXtyZXR1cm4gZE8oKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBmSChuKXtyZXR1cm4gZE8oKT8uY3JlYXRlU2NyaXB0KG4pfHxufWZ1bmN0aW9uIG1IKG4pe3JldHVybiBkTygpPy5jcmVhdGVTY3JpcHRVUkwobil8fG59dmFyIHRkPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT10fXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7dGJ9KWB9fSxYUj1jbGFzcyBleHRlbmRzIHRke2dldFR5cGVOYW1lKCl7cmV0dXJuIkhUTUwifX0sUVI9Y2xhc3MgZXh0ZW5kcyB0ZHtnZXRUeXBlTmFtZSgpe3JldHVybiJTdHlsZSJ9fSxaUj1jbGFzcyBleHRlbmRzIHRke2dldFR5cGVOYW1lKCl7cmV0dXJuIlNjcmlwdCJ9fSxLUj1jbGFzcyBleHRlbmRzIHRke2dldFR5cGVOYW1lKCl7cmV0dXJuIlVSTCJ9fSxKUj1jbGFzcyBleHRlbmRzIHRke2dldFR5cGVOYW1lKCl7cmV0dXJuIlJlc291cmNlVVJMIn19O2Z1bmN0aW9uIERzKG4pe3JldHVybiBuIGluc3RhbmNlb2YgdGQ/bi5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Om59ZnVuY3Rpb24geGwobix0KXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHRkJiZuLmdldFR5cGVOYW1lKCl8fG51bGx9KG4pO2lmKG51bGwhPWUmJmUhPT10KXtpZigiUmVzb3VyY2VVUkwiPT09ZSYmIlVSTCI9PT10KXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYSBzYWZlICR7dH0sIGdvdCBhICR7ZX0gKHNlZSAke3RifSlgKX1yZXR1cm4gZT09PXR9ZnVuY3Rpb24gY3oobil7bGV0IHQ9bmV3IGVQKG4pO3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGloKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyAkUih0KTp0fXZhciAkUj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJvZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtsZXQgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhpaCh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaHtyZXR1cm4gbnVsbH19fSxlUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0Iil9Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtsZXQgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gZS5pbm5lckhUTUw9aWgodCksZX19LGxzZT0vXig/IWphdmFzY3JpcHQ6KSg/OlthLXowLTkrLi1dKzp8W14mOlwvPyNdKig/OltcLz8jXXwkKSkvaTtmdW5jdGlvbiBsYihuKXtyZXR1cm4obj1TdHJpbmcobikpLm1hdGNoKGxzZSk/bjoidW5zYWZlOiIrbn1mdW5jdGlvbiBhZChuKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbi5zcGxpdCgiLCIpKXRbZV09ITA7cmV0dXJuIHR9ZnVuY3Rpb24gY2IoLi4ubil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIG4pZm9yKGxldCBpIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShpKSYmKHRbaV09ITApO3JldHVybiB0fXZhciB6Qyxkej1hZCgiYXJlYSxicixjb2wsaHIsaW1nLHdiciIpLHV6PWFkKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIikscHo9YWQoInJwLHJ0IiksY3NlPWNiKHB6LHV6KSxkc2U9Y2IodXosYWQoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLHVzZT1jYihweixhZCgiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVyZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLHRQPWNiKGR6LGRzZSx1c2UsY3NlKSx1Tz1hZCgiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIikscHNlPWFkKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVmYXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJvbGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSxmc2U9YWQoImFyaWEtYWN0aXZlZGVzY2VuZGFudCxhcmlhLWF0b21pYyxhcmlhLWF1dG9jb21wbGV0ZSxhcmlhLWJ1c3ksYXJpYS1jaGVja2VkLGFyaWEtY29sY291bnQsYXJpYS1jb2xpbmRleCxhcmlhLWNvbHNwYW4sYXJpYS1jb250cm9scyxhcmlhLWN1cnJlbnQsYXJpYS1kZXNjcmliZWRieSxhcmlhLWRldGFpbHMsYXJpYS1kaXNhYmxlZCxhcmlhLWRyb3BlZmZlY3QsYXJpYS1lcnJvcm1lc3NhZ2UsYXJpYS1leHBhbmRlZCxhcmlhLWZsb3d0byxhcmlhLWdyYWJiZWQsYXJpYS1oYXNwb3B1cCxhcmlhLWhpZGRlbixhcmlhLWludmFsaWQsYXJpYS1rZXlzaG9ydGN1dHMsYXJpYS1sYWJlbCxhcmlhLWxhYmVsbGVkYnksYXJpYS1sZXZlbCxhcmlhLWxpdmUsYXJpYS1tb2RhbCxhcmlhLW11bHRpbGluZSxhcmlhLW11bHRpc2VsZWN0YWJsZSxhcmlhLW9yaWVudGF0aW9uLGFyaWEtb3ducyxhcmlhLXBsYWNlaG9sZGVyLGFyaWEtcG9zaW5zZXQsYXJpYS1wcmVzc2VkLGFyaWEtcmVhZG9ubHksYXJpYS1yZWxldmFudCxhcmlhLXJlcXVpcmVkLGFyaWEtcm9sZWRlc2NyaXB0aW9uLGFyaWEtcm93Y291bnQsYXJpYS1yb3dpbmRleCxhcmlhLXJvd3NwYW4sYXJpYS1zZWxlY3RlZCxhcmlhLXNldHNpemUsYXJpYS1zb3J0LGFyaWEtdmFsdWVtYXgsYXJpYS12YWx1ZW1pbixhcmlhLXZhbHVlbm93LGFyaWEtdmFsdWV0ZXh0IiksZno9Y2IodU8scHNlLGZzZSksbXNlPWFkKCJzY3JpcHQsc3R5bGUsdGVtcGxhdGUiKSxuUD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXNhbml0aXplQ2hpbGRyZW4odCl7bGV0IGU9dC5maXJzdENoaWxkLGk9ITA7Zm9yKDtlOylpZihlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/aT10aGlzLnN0YXJ0RWxlbWVudChlKTplLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhlLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsaSYmZS5maXJzdENoaWxkKWU9ZS5maXJzdENoaWxkO2Vsc2UgZm9yKDtlOyl7ZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoZSk7bGV0IHI9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoZSxlLm5leHRTaWJsaW5nKTtpZihyKXtlPXI7YnJlYWt9ZT10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUucGFyZW50Tm9kZSl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudCh0KXtsZXQgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoIXRQLmhhc093blByb3BlcnR5KGUpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwhbXNlLmhhc093blByb3BlcnR5KGUpO3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGUpO2xldCBpPXQuYXR0cmlidXRlcztmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aS5pdGVtKHIpLHM9by5uYW1lLGE9cy50b0xvd2VyQ2FzZSgpO2lmKCFmei5oYXNPd25Qcm9wZXJ0eShhKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IGw9by52YWx1ZTt1T1thXSYmKGw9bGIobCkpLHRoaXMuYnVmLnB1c2goIiAiLHMsJz0iJyxoSChsKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudCh0KXtsZXQgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dFAuaGFzT3duUHJvcGVydHkoZSkmJiFkei5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKHQpe3RoaXMuYnVmLnB1c2goaEgodCkpfWNoZWNrQ2xvYmJlcmVkRWxlbWVudCh0LGUpe2lmKGUmJih0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKT09PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6ICR7dC5vdXRlckhUTUx9YCk7cmV0dXJuIGV9fSxoc2U9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLGdzZT0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gaEgobil7cmV0dXJuIG4ucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoaHNlLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrKDEwMjQqKHQuY2hhckNvZGVBdCgwKS01NTI5NikrKHQuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoZ3NlLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIHBPKG4sdCl7bGV0IGU9bnVsbDt0cnl7ekM9ekN8fGN6KG4pO2xldCBpPXQ/U3RyaW5nKHQpOiIiO2U9ekMuZ2V0SW5lcnRCb2R5RWxlbWVudChpKTtsZXQgcj01LG89aTtkb3tpZigwPT09cil0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7ci0tLGk9byxvPWUuaW5uZXJIVE1MLGU9ekMuZ2V0SW5lcnRCb2R5RWxlbWVudChpKX13aGlsZShpIT09byk7cmV0dXJuIGloKChuZXcgblApLnNhbml0aXplQ2hpbGRyZW4oaVAoZSl8fGUpKX1maW5hbGx5e2lmKGUpe2xldCBpPWlQKGUpfHxlO2Zvcig7aS5maXJzdENoaWxkOylpLnJlbW92ZUNoaWxkKGkuZmlyc3RDaGlsZCl9fX1mdW5jdGlvbiBpUChuKXtyZXR1cm4iY29udGVudCJpbiBuJiZmdW5jdGlvbihuKXtyZXR1cm4gbi5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09bi5ub2RlTmFtZX0obik/bi5jb250ZW50Om51bGx9dmFyIGpyPSgoKT0+e3JldHVybihuPWpyfHwoanI9e30pKVtuLk5PTkU9MF09Ik5PTkUiLG5bbi5IVE1MPTFdPSJIVE1MIixuW24uU1RZTEU9Ml09IlNUWUxFIixuW24uU0NSSVBUPTNdPSJTQ1JJUFQiLG5bbi5VUkw9NF09IlVSTCIsbltuLlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIixqcjt2YXIgbn0pKCk7ZnVuY3Rpb24gZk8obil7bGV0IHQ9ZGIoKTtyZXR1cm4gdD9wSCh0LnNhbml0aXplKGpyLkhUTUwsbil8fCIiKTp4bChuLCJIVE1MIik/cEgoRHMobikpOnBPKGl6KCksVW4obikpfWZ1bmN0aW9uIGthKG4pe2xldCB0PWRiKCk7cmV0dXJuIHQ/dC5zYW5pdGl6ZShqci5VUkwsbil8fCIiOnhsKG4sIlVSTCIpP0RzKG4pOmxiKFVuKG4pKX1mdW5jdGlvbiBteihuKXtsZXQgdD1kYigpO2lmKHQpcmV0dXJuIG1IKHQuc2FuaXRpemUoanIuUkVTT1VSQ0VfVVJMLG4pfHwiIik7aWYoeGwobiwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gbUgoRHMobikpO3Rocm93IG5ldyB5dCg5MDQsITEpfWZ1bmN0aW9uIGRiKCl7bGV0IG49WmUoKTtyZXR1cm4gbiYmbltGUl19dmFyIGtNPW5ldyBpZSgiRU5WSVJPTk1FTlRfSU5JVElBTElaRVIiKSxoej1uZXcgaWUoIklOSkVDVE9SIiwtMSksZ3o9bmV3IGllKCJJTkpFQ1RPUl9ERUZfVFlQRVMiKSxkTT1jbGFzc3tnZXQodCxlPWpfKXtpZihlPT09al8pe2xldCBpPW5ldyBFcnJvcihgTnVsbEluamVjdG9yRXJyb3I6IE5vIHByb3ZpZGVyIGZvciAke3BvKHQpfSFgKTt0aHJvdyBpLm5hbWU9Ik51bGxJbmplY3RvckVycm9yIixpfXJldHVybiBlfX07ZnVuY3Rpb24gd3NlKC4uLm4pe3JldHVybnsiXHUwMjc1cHJvdmlkZXJzIjpfeigwLG4pLCJcdTAyNzVmcm9tTmdNb2R1bGUiOiEwfX1mdW5jdGlvbiBfeihuLC4uLnQpe2xldCByLGU9W10saT1uZXcgU2V0O3JldHVybiBlTyh0LG89PntsZXQgcz1vO3JQKHMsZSxbXSxpKSYmKHJ8fChyPVtdKSxyLnB1c2gocykpfSksdm9pZCAwIT09ciYmYnoocixlKSxlfWZ1bmN0aW9uIGJ6KG4sdCl7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldHtwcm92aWRlcnM6cn09bltlXTttTyhyLG89Pnt0LnB1c2gobyl9KX19ZnVuY3Rpb24gclAobix0LGUsaSl7aWYoIShuPVJpKG4pKSlyZXR1cm4hMTtsZXQgcj1udWxsLG89ZUgobikscz0hbyYmRGEobik7aWYob3x8cyl7aWYocyYmIXMuc3RhbmRhbG9uZSlyZXR1cm4hMTtyPW59ZWxzZXtsZXQgbD1uLm5nTW9kdWxlO2lmKG89ZUgobCksIW8pcmV0dXJuITE7cj1sfWxldCBhPWkuaGFzKHIpO2lmKHMpe2lmKGEpcmV0dXJuITE7aWYoaS5hZGQocikscy5kZXBlbmRlbmNpZXMpe2xldCBsPSJmdW5jdGlvbiI9PXR5cGVvZiBzLmRlcGVuZGVuY2llcz9zLmRlcGVuZGVuY2llcygpOnMuZGVwZW5kZW5jaWVzO2ZvcihsZXQgYyBvZiBsKXJQKGMsdCxlLGkpfX1lbHNle2lmKCFvKXJldHVybiExO3tpZihudWxsIT1vLmltcG9ydHMmJiFhKXtsZXQgYztpLmFkZChyKTt0cnl7ZU8oby5pbXBvcnRzLGQ9PntyUChkLHQsZSxpKSYmKGN8fChjPVtdKSxjLnB1c2goZCkpfSl9ZmluYWxseXt9dm9pZCAwIT09YyYmYnooYyx0KX1pZighYSl7bGV0IGM9QnAocil8fCgoKT0+bmV3IHIpO3QucHVzaCh7cHJvdmlkZTpyLHVzZUZhY3Rvcnk6YyxkZXBzOlZpfSx7cHJvdmlkZTpneix1c2VWYWx1ZTpyLG11bHRpOiEwfSx7cHJvdmlkZTprTSx1c2VWYWx1ZTooKT0+ayhyKSxtdWx0aTohMH0pfWxldCBsPW8ucHJvdmlkZXJzO251bGw9PWx8fGF8fG1PKGwsZD0+e3QucHVzaChkKX0pfX1yZXR1cm4gciE9PW4mJnZvaWQgMCE9PW4ucHJvdmlkZXJzfWZ1bmN0aW9uIG1PKG4sdCl7Zm9yKGxldCBlIG9mIG4pWEgoZSkmJihlPWUuXHUwMjc1cHJvdmlkZXJzKSxBcnJheS5pc0FycmF5KGUpP21PKGUsdCk6dChlKX12YXIgU3NlPXRyKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTp0cn0pO2Z1bmN0aW9uIHZ6KG4pe3JldHVybiBudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuJiZTc2UgaW4gbn1mdW5jdGlvbiBZbShuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn12YXIgaFIsTk09bmV3IGllKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksWUM9e30sSXNlPXt9O2Z1bmN0aW9uIGhPKCl7cmV0dXJuIHZvaWQgMD09PWhSJiYoaFI9bmV3IGRNKSxoUn12YXIgcGM9Y2xhc3N7fSx1TT1jbGFzcyBleHRlbmRzIHBje2dldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWNvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1pLHRoaXMuc2NvcGVzPXIsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxzUCh0LHM9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKHMpKSx0aGlzLnJlY29yZHMuc2V0KGh6LFVtKHZvaWQgMCx0aGlzKSksci5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQocGMsVW0odm9pZCAwLHRoaXMpKTtsZXQgbz10aGlzLnJlY29yZHMuZ2V0KE5NKTtudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIG8udmFsdWUmJnRoaXMuc2NvcGVzLmFkZChvLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChnei5tdWx0aSxWaSx4aS5TZWxmKSl9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO3RyeXtmb3IobGV0IHQgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcyl0Lm5nT25EZXN0cm95KCk7Zm9yKGxldCB0IG9mIHRoaXMuX29uRGVzdHJveUhvb2tzKXQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5sZW5ndGg9MH19b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUhvb2tzLnB1c2godCl9cnVuSW5Db250ZXh0KHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7bGV0IGU9Tm0odGhpcyksaT1FYSh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7Tm0oZSksRWEoaSl9fWdldCh0LGU9al8saT14aS5EZWZhdWx0KXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGk9d00oaSk7bGV0IHI9Tm0odGhpcyksbz1FYSh2b2lkIDApO3RyeXtpZighKGkmeGkuU2tpcFNlbGYpKXtsZXQgYT10aGlzLnJlY29yZHMuZ2V0KHQpO2lmKHZvaWQgMD09PWEpe2xldCBsPSgiZnVuY3Rpb24iPT10eXBlb2Yobj10KXx8Im9iamVjdCI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgaWUpJiZWUCh0KTthPWwmJnRoaXMuaW5qZWN0YWJsZURlZkluU2NvcGUobCk/VW0ob1AodCksWUMpOm51bGwsdGhpcy5yZWNvcmRzLnNldCh0LGEpfWlmKG51bGwhPWEpcmV0dXJuIHRoaXMuaHlkcmF0ZSh0LGEpfXJldHVybihpJnhpLlNlbGY/aE8oKTp0aGlzLnBhcmVudCkuZ2V0KHQsZT1pJnhpLk9wdGlvbmFsJiZlPT09al8/bnVsbDplKX1jYXRjaChzKXtpZigiTnVsbEluamVjdG9yRXJyb3IiPT09cy5uYW1lKXtpZigoc1skQ109c1skQ118fFtdKS51bnNoaWZ0KHBvKHQpKSxyKXRocm93IHM7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW5bJENdO3Rocm93IHRbdEhdJiZyLnVuc2hpZnQodFt0SF0pLG4ubWVzc2FnZT1mdW5jdGlvbihuLHQsZSxpPW51bGwpe249biYmIlxuIj09PW4uY2hhckF0KDApJiZuLmNoYXJBdCgxKT09Q3JlP24uc2xpY2UoMik6bjtsZXQgcj1wbyh0KTtpZihBcnJheS5pc0FycmF5KHQpKXI9dC5tYXAocG8pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCl7bGV0IG89W107Zm9yKGxldCBzIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShzKSl7bGV0IGE9dFtzXTtvLnB1c2gocysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpwbyhhKSkpfXI9YHske28uam9pbigiLCAiKX19YH1yZXR1cm5gJHtlfSR7aT8iKCIraSsiKSI6IiJ9WyR7cn1dOiAke24ucmVwbGFjZSh4cmUsIlxuICAiKX1gfSgiXG4iK24ubWVzc2FnZSxyLGUsaSksblt5cmVdPXIsblskQ109bnVsbCxufShzLHQsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IHN9ZmluYWxseXtFYShvKSxObShyKX12YXIgbn1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtsZXQgdD1ObSh0aGlzKSxlPUVhKHZvaWQgMCk7dHJ5e2xldCBpPXRoaXMuZ2V0KGtNLm11bHRpLFZpLHhpLlNlbGYpO2ZvcihsZXQgciBvZiBpKXIoKX1maW5hbGx5e05tKHQpLEVhKGUpfX10b1N0cmluZygpe2xldCB0PVtdLGU9dGhpcy5yZWNvcmRzO2ZvcihsZXQgaSBvZiBlLmtleXMoKSl0LnB1c2gocG8oaSkpO3JldHVybmBSM0luamVjdG9yWyR7dC5qb2luKCIsICIpfV1gfWFzc2VydE5vdERlc3Ryb3llZCgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgeXQoMjA1LCExKX1wcm9jZXNzUHJvdmlkZXIodCl7bGV0IGU9WW0odD1SaSh0KSk/dDpSaSh0JiZ0LnByb3ZpZGUpLGk9ZnVuY3Rpb24obil7cmV0dXJuIHZ6KG4pP1VtKHZvaWQgMCxuLnVzZVZhbHVlKTpVbSh5eihuKSxZQyl9KHQpO2lmKFltKHQpfHwhMCE9PXQubXVsdGkpdGhpcy5yZWNvcmRzLmdldChlKTtlbHNle2xldCByPXRoaXMucmVjb3Jkcy5nZXQoZSk7cnx8KHI9VW0odm9pZCAwLFlDLCEwKSxyLmZhY3Rvcnk9KCk9PmtSKHIubXVsdGkpLHRoaXMucmVjb3Jkcy5zZXQoZSxyKSksZT10LHIubXVsdGkucHVzaCh0KX10aGlzLnJlY29yZHMuc2V0KGUsaSl9aHlkcmF0ZSh0LGUpe3JldHVybiBlLnZhbHVlPT09WUMmJihlLnZhbHVlPUlzZSxlLnZhbHVlPWUuZmFjdG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGUudmFsdWUmJmUudmFsdWUmJm51bGwhPT0obj1lLnZhbHVlKSYmIm9iamVjdCI9PXR5cGVvZiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5uZ09uRGVzdHJveSYmdGhpcy5fbmdPbkRlc3Ryb3lIb29rcy5hZGQoZS52YWx1ZSksZS52YWx1ZTt2YXIgbn1pbmplY3RhYmxlRGVmSW5TY29wZSh0KXtpZighdC5wcm92aWRlZEluKXJldHVybiExO2xldCBlPVJpKHQucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlPyJhbnkiPT09ZXx8dGhpcy5zY29wZXMuaGFzKGUpOnRoaXMuaW5qZWN0b3JEZWZUeXBlcy5oYXMoZSl9fTtmdW5jdGlvbiBvUChuKXtsZXQgdD1WUChuKSxlPW51bGwhPT10P3QuZmFjdG9yeTpCcChuKTtpZihudWxsIT09ZSlyZXR1cm4gZTtpZihuIGluc3RhbmNlb2YgaWUpdGhyb3cgbmV3IHl0KDIwNCwhMSk7aWYobiBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uLmxlbmd0aDtpZih0PjApdGhyb3cgTl8odCwiPyIpLG5ldyB5dCgyMDQsITEpO2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiBuJiYobltKQ118fG5bWkhdKXx8bnVsbH0obik7cmV0dXJuIG51bGwhPT1lPygpPT5lLmZhY3Rvcnkobik6KCk9Pm5ldyBufShuKTt0aHJvdyBuZXcgeXQoMjA0LCExKX1mdW5jdGlvbiB5eihuLHQsZSl7bGV0IGk7aWYoWW0obikpe2xldCByPVJpKG4pO3JldHVybiBCcChyKXx8b1Aocil9aWYodnoobikpaT0oKT0+Umkobi51c2VWYWx1ZSk7ZWxzZSBpZihmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwhbi51c2VGYWN0b3J5KX0obikpaT0oKT0+bi51c2VGYWN0b3J5KC4uLmtSKG4uZGVwc3x8W10pKTtlbHNlIGlmKGZ1bmN0aW9uKG4pe3JldHVybiEoIW58fCFuLnVzZUV4aXN0aW5nKX0obikpaT0oKT0+ayhSaShuLnVzZUV4aXN0aW5nKSk7ZWxzZXtsZXQgcj1SaShuJiYobi51c2VDbGFzc3x8bi5wcm92aWRlKSk7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiEhbi5kZXBzfShuKSlyZXR1cm4gQnAocil8fG9QKHIpO2k9KCk9Pm5ldyByKC4uLmtSKG4uZGVwcykpfXJldHVybiBpfWZ1bmN0aW9uIFVtKG4sdCxlPSExKXtyZXR1cm57ZmFjdG9yeTpuLHZhbHVlOnQsbXVsdGk6ZT9bXTp2b2lkIDB9fWZ1bmN0aW9uIHNQKG4sdCl7Zm9yKGxldCBlIG9mIG4pQXJyYXkuaXNBcnJheShlKT9zUChlLHQpOmUmJlhIKGUpP3NQKGUuXHUwMjc1cHJvdmlkZXJzLHQpOnQoZSl9dmFyIGFQPWNsYXNze30scE09Y2xhc3N7fSxsUD1jbGFzc3tyZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXt0aHJvdyBmdW5jdGlvbihuKXtsZXQgdD1FcnJvcihgTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICR7cG8obil9LiBEaWQgeW91IGFkZCBpdCB0byBATmdNb2R1bGUuZW50cnlDb21wb25lbnRzP2ApO3JldHVybiB0Lm5nQ29tcG9uZW50PW4sdH0odCl9fSxmbz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5OVUxMPW5ldyBsUCxufSkoKTtmdW5jdGlvbiBMc2UoKXtyZXR1cm4gcmgoUG8oKSxaZSgpKX1mdW5jdGlvbiByaChuLHQpe3JldHVybiBuZXcgTWUob2Eobix0KSl9dmFyIE1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5uYXRpdmVFbGVtZW50PWV9fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPUxzZSxufSkoKTtmdW5jdGlvbiBCc2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBNZT9uLm5hdGl2ZUVsZW1lbnQ6bn12YXIgZmM9Y2xhc3N7fSxtYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24oKXtsZXQgbj1aZSgpLGU9aWQoUG8oKS5pbmRleCxuKTtyZXR1cm4oTnAoZSk/ZTpuKVtvaV19KCksbn0pKCksSHNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLG59KSgpLHlsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19LHpzZT1uZXcgeWwoIjE1LjIuOSIpLGdSPXt9LFVzZT0ibmdPcmlnaW5hbEVycm9yIjtmdW5jdGlvbiBfUihuKXtyZXR1cm4gbltVc2VdfXZhciBycz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1oYW5kbGVFcnJvcih0KXtsZXQgZT10aGlzLl9maW5kT3JpZ2luYWxFcnJvcih0KTt0aGlzLl9jb25zb2xlLmVycm9yKCJFUlJPUiIsdCksZSYmdGhpcy5fY29uc29sZS5lcnJvcigiT1JJR0lOQUwgRVJST1IiLGUpfV9maW5kT3JpZ2luYWxFcnJvcih0KXtsZXQgZT10JiZfUih0KTtmb3IoO2UmJl9SKGUpOyllPV9SKGUpO3JldHVybiBlfHxudWxsfX07ZnVuY3Rpb24gaGMobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudH1mdW5jdGlvbiBYQyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZ1bmN0aW9uP24oKTpufWZ1bmN0aW9uIHh6KG4sdCxlKXtsZXQgaT1uLmxlbmd0aDtmb3IoOzspe2xldCByPW4uaW5kZXhPZih0LGUpO2lmKC0xPT09cilyZXR1cm4gcjtpZigwPT09cnx8bi5jaGFyQ29kZUF0KHItMSk8PTMyKXtsZXQgbz10Lmxlbmd0aDtpZihyK289PT1pfHxuLmNoYXJDb2RlQXQocitvKTw9MzIpcmV0dXJuIHJ9ZT1yKzF9fXZhciBDej0ibmctdGVtcGxhdGUiO2Z1bmN0aW9uIFdzZShuLHQsZSl7bGV0IGk9MCxyPSEwO2Zvcig7aTxuLmxlbmd0aDspe2xldCBvPW5baSsrXTtpZigic3RyaW5nIj09dHlwZW9mIG8mJnIpe2xldCBzPW5baSsrXTtpZihlJiYiY2xhc3MiPT09byYmLTEhPT14eihzLnRvTG93ZXJDYXNlKCksdCwwKSlyZXR1cm4hMH1lbHNle2lmKDE9PT1vKXtmb3IoO2k8bi5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2Yobz1uW2krK10pOylpZihvLnRvTG93ZXJDYXNlKCk9PT10KXJldHVybiEwO3JldHVybiExfSJudW1iZXIiPT10eXBlb2YgbyYmKHI9ITEpfX1yZXR1cm4hMX1mdW5jdGlvbiBNeihuKXtyZXR1cm4gND09PW4udHlwZSYmbi52YWx1ZSE9PUN6fWZ1bmN0aW9uIHFzZShuLHQsZSl7cmV0dXJuIHQ9PT0oNCE9PW4udHlwZXx8ZT9uLnZhbHVlOkN6KX1mdW5jdGlvbiBZc2Uobix0LGUpe2xldCBpPTQscj1uLmF0dHJzfHxbXSxvPWZ1bmN0aW9uKG4pe2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWlmKE01KG5bdF0pKXJldHVybiB0O3JldHVybiBuLmxlbmd0aH0ocikscz0hMTtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyl7bGV0IGw9dFthXTtpZigibnVtYmVyIiE9dHlwZW9mIGwpe2lmKCFzKWlmKDQmaSl7aWYoaT0yfDEmaSwiIiE9PWwmJiFxc2UobixsLGUpfHwiIj09PWwmJjE9PT10Lmxlbmd0aCl7aWYoaGwoaSkpcmV0dXJuITE7cz0hMH19ZWxzZXtsZXQgYz04Jmk/bDp0WysrYV07aWYoOCZpJiZudWxsIT09bi5hdHRycyl7aWYoIVdzZShuLmF0dHJzLGMsZSkpe2lmKGhsKGkpKXJldHVybiExO3M9ITB9Y29udGludWV9bGV0IHU9WHNlKDgmaT8iY2xhc3MiOmwscixNeihuKSxlKTtpZigtMT09PXUpe2lmKGhsKGkpKXJldHVybiExO3M9ITA7Y29udGludWV9aWYoIiIhPT1jKXtsZXQgcDtwPXU+bz8iIjpyW3UrMV0udG9Mb3dlckNhc2UoKTtsZXQgZj04Jmk/cDpudWxsO2lmKGYmJi0xIT09eHooZixjLDApfHwyJmkmJmMhPT1wKXtpZihobChpKSlyZXR1cm4hMTtzPSEwfX19fWVsc2V7aWYoIXMmJiFobChpKSYmIWhsKGwpKXJldHVybiExO2lmKHMmJmhsKGwpKWNvbnRpbnVlO3M9ITEsaT1sfDEmaX19cmV0dXJuIGhsKGkpfHxzfWZ1bmN0aW9uIGhsKG4pe3JldHVybiAwPT0oMSZuKX1mdW5jdGlvbiBYc2Uobix0LGUsaSl7aWYobnVsbD09PXQpcmV0dXJuLTE7bGV0IHI9MDtpZihpfHwhZSl7bGV0IG89ITE7Zm9yKDtyPHQubGVuZ3RoOyl7bGV0IHM9dFtyXTtpZihzPT09bilyZXR1cm4gcjtpZigzPT09c3x8Nj09PXMpbz0hMDtlbHNle2lmKDE9PT1zfHwyPT09cyl7bGV0IGE9dFsrK3JdO2Zvcig7InN0cmluZyI9PXR5cGVvZiBhOylhPXRbKytyXTtjb250aW51ZX1pZig0PT09cylicmVhaztpZigwPT09cyl7cis9NDtjb250aW51ZX19cis9bz8xOjJ9cmV0dXJuLTF9cmV0dXJuIGZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5pbmRleE9mKDQpO2lmKGU+LTEpZm9yKGUrKztlPG4ubGVuZ3RoOyl7bGV0IGk9bltlXTtpZigibnVtYmVyIj09dHlwZW9mIGkpcmV0dXJuLTE7aWYoaT09PXQpcmV0dXJuIGU7ZSsrfXJldHVybi0xfSh0LG4pfWZ1bmN0aW9uIHd6KG4sdCxlPSExKXtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKylpZihZc2Uobix0W2ldLGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEpzZShuLHQpe2U6Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPXRbZV07aWYobi5sZW5ndGg9PT1pLmxlbmd0aCl7Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspaWYobltyXSE9PWlbcl0pY29udGludWUgZTtyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gZ0gobix0KXtyZXR1cm4gbj8iOm5vdCgiK3QudHJpbSgpKyIpIjp0fWZ1bmN0aW9uICRzZShuKXtsZXQgdD1uWzBdLGU9MSxpPTIscj0iIixvPSExO2Zvcig7ZTxuLmxlbmd0aDspe2xldCBzPW5bZV07aWYoInN0cmluZyI9PXR5cGVvZiBzKWlmKDImaSl7bGV0IGE9blsrK2VdO3IrPSJbIitzKyhhLmxlbmd0aD4wPyc9IicrYSsnIic6IiIpKyJdIn1lbHNlIDgmaT9yKz0iLiIrczo0JmkmJihyKz0iICIrcyk7ZWxzZSIiIT09ciYmIWhsKHMpJiYodCs9Z0gobyxyKSxyPSIiKSxpPXMsbz1vfHwhaGwoaSk7ZSsrfXJldHVybiIiIT09ciYmKHQrPWdIKG8scikpLHR9dmFyIEhuPXt9O2Z1bmN0aW9uIHYobil7U3ooRWkoKSxaZSgpLHNzKCkrbiwhMSl9ZnVuY3Rpb24gU3oobix0LGUsaSl7aWYoIWkpaWYoMz09KDMmdFtyaV0pKXtsZXQgbz1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09byYmakModCxvLGUpfWVsc2V7bGV0IG89bi5wcmVPcmRlckhvb2tzO251bGwhPT1vJiZHQyh0LG8sMCxlKX1WcChlKX12YXIgX0g9eyJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjp1ZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlUsIlx1MDI3NVx1MDI3NWluamVjdCI6aywiXHUwMjc1XHUwMjc1aW52YWxpZEZhY3RvcnlEZXAiOkpILHJlc29sdmVGb3J3YXJkUmVmOlJpfTt2YXIgaWFlPXRyKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTp0cn0pO2Z1bmN0aW9uIGJIKG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUNsYXNzfWZ1bmN0aW9uIHZIKG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUZhY3Rvcnl9dmFyIEV6PW9iKCJJbmplY3RhYmxlIix2b2lkIDAsdm9pZCAwLHZvaWQgMCwobix0KT0+ZnVuY3Rpb24obix0KXtsZXQgZT1udWxsLGk9bnVsbDtuLmhhc093blByb3BlcnR5KEpDKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sSkMse2dldDooKT0+KG51bGw9PT1lJiYoZT1JYSgpLmNvbXBpbGVJbmplY3RhYmxlKF9ILGBuZzovLy8ke24ubmFtZX0vXHUwMjc1cHJvdi5qc2AsZnVuY3Rpb24obix0KXtsZXQgZT10fHx7cHJvdmlkZWRJbjpudWxsfSxpPXtuYW1lOm4ubmFtZSx0eXBlOm4sdHlwZUFyZ3VtZW50Q291bnQ6MCxwcm92aWRlZEluOmUucHJvdmlkZWRJbn07cmV0dXJuKGJIKGUpfHx2SChlKSkmJnZvaWQgMCE9PWUuZGVwcyYmKGkuZGVwcz1GNShlLmRlcHMpKSxiSChlKT9pLnVzZUNsYXNzPWUudXNlQ2xhc3M6ZnVuY3Rpb24obil7cmV0dXJuIGlhZSBpbiBufShlKT9pLnVzZVZhbHVlPWUudXNlVmFsdWU6dkgoZSk/aS51c2VGYWN0b3J5PWUudXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VFeGlzdGluZ30oZSkmJihpLnVzZUV4aXN0aW5nPWUudXNlRXhpc3RpbmcpLGl9KG4sdCkpKSxlKX0pLG4uaGFzT3duUHJvcGVydHkoZWQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixlZCx7Z2V0OigpPT57aWYobnVsbD09PWkpe2xldCByPUlhKCk7aT1yLmNvbXBpbGVGYWN0b3J5KF9ILGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTpuLm5hbWUsdHlwZTpuLHR5cGVBcmd1bWVudENvdW50OjAsZGVwczpSTShuKSx0YXJnZXQ6ci5GYWN0b3J5VGFyZ2V0LkluamVjdGFibGV9KX1yZXR1cm4gaX0sY29uZmlndXJhYmxlOiEwfSl9KG4sdCkpO2Z1bmN0aW9uIHlIKG4sdD1udWxsLGU9bnVsbCxpKXtsZXQgcj1UeihuLHQsZSxpKTtyZXR1cm4gci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxyfWZ1bmN0aW9uIFR6KG4sdD1udWxsLGU9bnVsbCxpLHI9bmV3IFNldCl7bGV0IG89W2V8fFZpLHdzZShuKV07cmV0dXJuIGk9aXx8KCJvYmplY3QiPT10eXBlb2Ygbj92b2lkIDA6cG8obikpLG5ldyB1TShvLHR8fGhPKCksaXx8bnVsbCxyKX12YXIgTWk9KCgpPT57Y2xhc3MgbntzdGF0aWMgY3JlYXRlKGUsaSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4geUgoe25hbWU6IiJ9LGksZSwiIik7e2xldCByPWUubmFtZT8/IiI7cmV0dXJuIHlIKHtuYW1lOnJ9LGUucGFyZW50LGUucHJvdmlkZXJzLHIpfX19cmV0dXJuIG4uVEhST1dfSUZfTk9UX0ZPVU5EPWpfLG4uTlVMTD1uZXcgZE0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLHByb3ZpZGVkSW46ImFueSIsZmFjdG9yeTooKT0+ayhoeil9KSxuLl9fTkdfRUxFTUVOVF9JRF9fPS0xLG59KSgpLExfPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7aWYodGhpcy50b2tlbj10LHRoaXMuaWQ9ZSwhdCl0aHJvdyBuZXcgeXQoMjA4LCExKTt0aGlzLmRpc3BsYXlOYW1lPXBvKHRoaXMudG9rZW4pfXN0YXRpYyBnZXQodCl7cmV0dXJuIHhILmdldChSaSh0KSl9c3RhdGljIGdldCBudW1iZXJPZktleXMoKXtyZXR1cm4geEgubnVtYmVyT2ZLZXlzfX0seEg9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fYWxsS2V5cz1uZXcgTWFwfWdldCh0KXtpZih0IGluc3RhbmNlb2YgTF8pcmV0dXJuIHQ7aWYodGhpcy5fYWxsS2V5cy5oYXModCkpcmV0dXJuIHRoaXMuX2FsbEtleXMuZ2V0KHQpO2xldCBlPW5ldyBMXyh0LExfLm51bWJlck9mS2V5cyk7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2V0KHQsZSksZX1nZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2l6ZX19O2Z1bmN0aW9uIEMobix0PXhpLkRlZmF1bHQpe2xldCBlPVplKCk7cmV0dXJuIG51bGw9PT1lP2sobix0KTpBNShQbygpLGUsUmkobiksdCl9ZnVuY3Rpb24gSXMoKXt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQiKX1mdW5jdGlvbiBEeihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgbz1lW2krMV07aWYoLTEhPT1vKXtsZXQgcz1uLmRhdGFbb107UVAoZVtpXSkscy5jb250ZW50UXVlcmllcygyLHRbb10sbyl9fX1mdW5jdGlvbiBMTShuLHQsZSxpLHIsbyxzLGEsbCxjLGQpe2xldCB1PXQuYmx1ZXByaW50LnNsaWNlKCk7cmV0dXJuIHVbc3VdPXIsdVtyaV09NzZ8aSwobnVsbCE9PWR8fG4mJjEwMjQmbltyaV0pJiYodVtyaV18PTEwMjQpLHU1KHUpLHVbR3JdPXVbSm1dPW4sdVtFc109ZSx1W25NXT1zfHxuJiZuW25NXSx1W29pXT1hfHxuJiZuW29pXSx1W0ZSXT1sfHxuJiZuW0ZSXXx8bnVsbCx1W3RNXT1jfHxuJiZuW3RNXXx8bnVsbCx1W1NzXT1vLHVbRU1dPUJvZSsrLHVbaTVdPWQsdVtibF09Mj09dC50eXBlP25bYmxdOnUsdX1mdW5jdGlvbiBvaChuLHQsZSxpLHIpe2xldCBvPW4uZGF0YVt0XTtpZihudWxsPT09bylvPWdPKG4sdCxlLGksciksam4ubEZyYW1lLmluSTE4biYmKG8uZmxhZ3N8PTMyKTtlbHNlIGlmKDY0Jm8udHlwZSl7by50eXBlPWUsby52YWx1ZT1pLG8uYXR0cnM9cjtsZXQgcz1xXygpO28uaW5qZWN0b3JJbmRleD1udWxsPT09cz8tMTpzLmluamVjdG9ySW5kZXh9cmV0dXJuIGRjKG8sITApLG99ZnVuY3Rpb24gZ08obix0LGUsaSxyKXtsZXQgbz1mNSgpLHM9cVAoKSxsPW4uZGF0YVt0XT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJue3R5cGU6ZSxpbmRleDppLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp0P3QuaW5qZWN0b3JJbmRleDotMSxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEsY29tcG9uZW50T2Zmc2V0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczowLHByb3ZpZGVySW5kZXhlczowLHZhbHVlOnIsYXR0cnM6byxtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6dCxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAscz9vOm8mJm8ucGFyZW50LGUsdCxpLHIpO3JldHVybiBudWxsPT09bi5maXJzdENoaWxkJiYobi5maXJzdENoaWxkPWwpLG51bGwhPT1vJiYocz9udWxsPT1vLmNoaWxkJiZudWxsIT09bC5wYXJlbnQmJihvLmNoaWxkPWwpOm51bGw9PT1vLm5leHQmJihvLm5leHQ9bCxsLnByZXY9bykpLGx9ZnVuY3Rpb24gdWIobix0LGUsaSl7aWYoMD09PWUpcmV0dXJuLTE7bGV0IHI9dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxlO28rKyl0LnB1c2goaSksbi5ibHVlcHJpbnQucHVzaChpKSxuLmRhdGEucHVzaChudWxsKTtyZXR1cm4gcn1mdW5jdGlvbiBfTyhuLHQsZSl7WlAodCk7dHJ5e2xldCBpPW4udmlld1F1ZXJ5O251bGwhPT1pJiZwUCgxLGksZSk7bGV0IHI9bi50ZW1wbGF0ZTtudWxsIT09ciYmSXoobix0LHIsMSxlKSxuLmZpcnN0Q3JlYXRlUGFzcyYmKG4uZmlyc3RDcmVhdGVQYXNzPSExKSxuLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZEeihuLHQpLG4uc3RhdGljVmlld1F1ZXJpZXMmJnBQKDIsbi52aWV3UXVlcnksZSk7bGV0IG89bi5jb21wb25lbnRzO251bGwhPT1vJiZmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKVJhZShuLHRbZV0pfSh0LG8pfWNhdGNoKGkpe3Rocm93IG4uZmlyc3RDcmVhdGVQYXNzJiYobi5pbmNvbXBsZXRlRmlyc3RQYXNzPSEwLG4uZmlyc3RDcmVhdGVQYXNzPSExKSxpfWZpbmFsbHl7dFtyaV0mPS01LEtQKCl9fWZ1bmN0aW9uIEJNKG4sdCxlLGkpe2xldCByPXRbcmldO2lmKDEyOCE9KDEyOCZyKSl7WlAodCk7dHJ5e3U1KHQpLG01KG4uYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1lJiZJeihuLHQsZSwyLGkpO2xldCBzPTM9PSgzJnIpO2lmKHMpe2xldCBjPW4ucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1jJiZqQyh0LGMsbnVsbCl9ZWxzZXtsZXQgYz1uLnByZU9yZGVySG9va3M7bnVsbCE9PWMmJkdDKHQsYywwLG51bGwpLGRSKHQsMCl9aWYoZnVuY3Rpb24obil7Zm9yKGxldCB0PXJPKG4pO251bGwhPT10O3Q9b08odCkpe2lmKCF0W3I1XSljb250aW51ZTtsZXQgZT10W1dtXTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9ZVtpXTswPT0oNTEyJnJbcmldKSYmV1AocltHcl0sMSkscltyaV18PTUxMn19fSh0KSxmdW5jdGlvbihuKXtmb3IobGV0IHQ9ck8obik7bnVsbCE9PXQ7dD1vTyh0KSlmb3IobGV0IGU9d3M7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPXRbZV0scj1pW0ZuXTtyTShpKSYmQk0ocixpLHIudGVtcGxhdGUsaVtFc10pfX0odCksbnVsbCE9PW4uY29udGVudFF1ZXJpZXMmJkR6KG4sdCkscyl7bGV0IGM9bi5jb250ZW50Q2hlY2tIb29rcztudWxsIT09YyYmakModCxjKX1lbHNle2xldCBjPW4uY29udGVudEhvb2tzO251bGwhPT1jJiZHQyh0LGMsMSksZFIodCwxKX0hZnVuY3Rpb24obix0KXtsZXQgZT1uLmhvc3RCaW5kaW5nT3BDb2RlcztpZihudWxsIT09ZSl0cnl7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCByPWVbaV07aWYocjwwKVZwKH5yKTtlbHNle2xldCBvPXIscz1lWysraV0sYT1lWysraV07R3JlKHMsbyksYSgyLHRbb10pfX19ZmluYWxseXtWcCgtMSl9fShuLHQpO2xldCBhPW4uY29tcG9uZW50cztudWxsIT09YSYmZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylBYWUobix0W2VdKX0odCxhKTtsZXQgbD1uLnZpZXdRdWVyeTtpZihudWxsIT09bCYmcFAoMixsLGkpLHMpe2xldCBjPW4udmlld0NoZWNrSG9va3M7bnVsbCE9PWMmJmpDKHQsYyl9ZWxzZXtsZXQgYz1uLnZpZXdIb29rcztudWxsIT09YyYmR0ModCxjLDIpLGRSKHQsMil9ITA9PT1uLmZpcnN0VXBkYXRlUGFzcyYmKG4uZmlyc3RVcGRhdGVQYXNzPSExKSx0W3JpXSY9LTQxLDUxMiZ0W3JpXSYmKHRbcmldJj0tNTEzLFdQKHRbR3JdLC0xKSl9ZmluYWxseXtLUCgpfX19ZnVuY3Rpb24gSXoobix0LGUsaSxyKXtsZXQgbz1zcygpLHM9MiZpO3RyeXtWcCgtMSkscyYmdC5sZW5ndGg+V3ImJlN6KG4sdCxXciwhMSksVGEocz8yOjAsciksZShpLHIpfWZpbmFsbHl7VnAobyksVGEocz8zOjEscil9fWZ1bmN0aW9uIGJPKG4sdCxlKXtpZihHUCh0KSl7bGV0IHI9dC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBvPXQuZGlyZWN0aXZlU3RhcnQ7bzxyO28rKyl7bGV0IHM9bi5kYXRhW29dO3MuY29udGVudFF1ZXJpZXMmJnMuY29udGVudFF1ZXJpZXMoMSxlW29dLG8pfX19ZnVuY3Rpb24gdk8obix0LGUpeyFwNSgpfHwoZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9ZS5kaXJlY3RpdmVTdGFydCxvPWUuZGlyZWN0aXZlRW5kO1RNKGUpJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9b2EodCxuKSxyPUF6KGUpLG89bltuTV0scz1WTShuLExNKG4scixudWxsLGUub25QdXNoPzMyOjE2LGksdCxvLG8uY3JlYXRlUmVuZGVyZXIoaSxlKSxudWxsLG51bGwsbnVsbCkpO25bdC5pbmRleF09c30odCxlLG4uZGF0YVtyK2UuY29tcG9uZW50T2Zmc2V0XSksbi5maXJzdENyZWF0ZVBhc3N8fGxNKGUsdCksdWMoaSx0KTtsZXQgcz1lLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBhPXI7YTxvO2ErKyl7bGV0IGw9bi5kYXRhW2FdLGM9enAodCxuLGEsZSk7dWMoYyx0KSxudWxsIT09cyYmRWFlKDAsYS1yLGMsbCwwLHMpLHZsKGwpJiYoaWQoZS5pbmRleCx0KVtFc109enAodCxuLGEsZSkpfX0obix0LGUsb2EoZSx0KSksNjQ9PSg2NCZlLmZsYWdzKSYmT3oobix0LGUpKX1mdW5jdGlvbiB5TyhuLHQsZT1vYSl7bGV0IGk9dC5sb2NhbE5hbWVzO2lmKG51bGwhPT1pKXtsZXQgcj10LmluZGV4KzE7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKz0yKXtsZXQgcz1pW28rMV0sYT0tMT09PXM/ZSh0LG4pOm5bc107bltyKytdPWF9fX1mdW5jdGlvbiBBeihuKXtsZXQgdD1uLnRWaWV3O3JldHVybiBudWxsPT09dHx8dC5pbmNvbXBsZXRlRmlyc3RQYXNzP24udFZpZXc9eE8oMSxudWxsLG4udGVtcGxhdGUsbi5kZWNscyxuLnZhcnMsbi5kaXJlY3RpdmVEZWZzLG4ucGlwZURlZnMsbi52aWV3UXVlcnksbi5zY2hlbWFzLG4uY29uc3RzKTp0fWZ1bmN0aW9uIHhPKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCBkPVdyK2ksdT1kK3IscD1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dDtpKyspZS5wdXNoKGk8bj9udWxsOkhuKTtyZXR1cm4gZX0oZCx1KSxmPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2MoKTpjO3JldHVybiBwW0ZuXT17dHlwZTpuLGJsdWVwcmludDpwLHRlbXBsYXRlOmUscXVlcmllczpudWxsLHZpZXdRdWVyeTphLGRlY2xUTm9kZTp0LGRhdGE6cC5zbGljZSgpLmZpbGwobnVsbCxkKSxiaW5kaW5nU3RhcnRJbmRleDpkLGV4cGFuZG9TdGFydEluZGV4OnUsaG9zdEJpbmRpbmdPcENvZGVzOm51bGwsZmlyc3RDcmVhdGVQYXNzOiEwLGZpcnN0VXBkYXRlUGFzczohMCxzdGF0aWNWaWV3UXVlcmllczohMSxzdGF0aWNDb250ZW50UXVlcmllczohMSxwcmVPcmRlckhvb2tzOm51bGwscHJlT3JkZXJDaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLGNsZWFudXA6bnVsbCxjb250ZW50UXVlcmllczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygbz9vKCk6byxwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIHM/cygpOnMsZmlyc3RDaGlsZDpudWxsLHNjaGVtYXM6bCxjb25zdHM6ZixpbmNvbXBsZXRlRmlyc3RQYXNzOiExfX1mdW5jdGlvbiBSeihuLHQsZSxpKXtsZXQgcj1Oeih0KTtudWxsPT09ZT9yLnB1c2goaSk6KHIucHVzaChlKSxuLmZpcnN0Q3JlYXRlUGFzcyYmTHoobikucHVzaChpLHIubGVuZ3RoLTEpKX1mdW5jdGlvbiBDSChuLHQsZSxpKXtmb3IobGV0IHIgaW4gbilpZihuLmhhc093blByb3BlcnR5KHIpKXtlPW51bGw9PT1lP3t9OmU7bGV0IG89bltyXTtudWxsPT09aT9NSChlLHQscixvKTppLmhhc093blByb3BlcnR5KHIpJiZNSChlLHQsaVtyXSxvKX1yZXR1cm4gZX1mdW5jdGlvbiBNSChuLHQsZSxpKXtuLmhhc093blByb3BlcnR5KGUpP25bZV0ucHVzaCh0LGkpOm5bZV09W3QsaV19ZnVuY3Rpb24gYWEobix0LGUsaSxyLG8scyxhKXtsZXQgZCxsPW9hKHQsZSksYz10LmlucHV0czshYSYmbnVsbCE9YyYmKGQ9Y1tpXSk/KFNPKG4sZSxkLGksciksVE0odCkmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9aWQodCxuKTsxNiZlW3JpXXx8KGVbcmldfD0zMil9KGUsdC5pbmRleCkpOjMmdC50eXBlJiYoaT1mdW5jdGlvbihuKXtyZXR1cm4iY2xhc3MiPT09bj8iY2xhc3NOYW1lIjoiZm9yIj09PW4/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PW4/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09bj8iaW5uZXJIVE1MIjoicmVhZG9ubHkiPT09bj8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1uPyJ0YWJJbmRleCI6bn0oaSkscj1udWxsIT1zP3Mocix0LnZhbHVlfHwiIixpKTpyLG8uc2V0UHJvcGVydHkobCxpLHIpKX1mdW5jdGlvbiBDTyhuLHQsZSxpKXtpZihwNSgpKXtsZXQgcyxhLHI9bnVsbD09PWk/bnVsbDp7IiI6LTF9LG89ZnVuY3Rpb24obix0KXtsZXQgZT1uLmRpcmVjdGl2ZVJlZ2lzdHJ5LGk9bnVsbCxyPW51bGw7aWYoZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IHM9ZVtvXTtpZih3eih0LHMuc2VsZWN0b3JzLCExKSlpZihpfHwoaT1bXSksdmwocykpaWYobnVsbCE9PXMuZmluZEhvc3REaXJlY3RpdmVEZWZzKXtsZXQgYT1bXTtyPXJ8fG5ldyBNYXAscy5maW5kSG9zdERpcmVjdGl2ZURlZnMocyxhLHIpLGkudW5zaGlmdCguLi5hLHMpLGRQKG4sdCxhLmxlbmd0aCl9ZWxzZSBpLnVuc2hpZnQocyksZFAobix0LDApO2Vsc2Ugcj1yfHxuZXcgTWFwLHMuZmluZEhvc3REaXJlY3RpdmVEZWZzPy4ocyxpLHIpLGkucHVzaChzKX1yZXR1cm4gbnVsbD09PWk/bnVsbDpbaSxyXX0obixlKTtudWxsPT09bz9zPWE9bnVsbDpbcyxhXT1vLG51bGwhPT1zJiZQeihuLHQsZSxzLHIsYSksciYmZnVuY3Rpb24obix0LGUpe2lmKHQpe2xldCBpPW4ubG9jYWxOYW1lcz1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrPTIpe2xldCBvPWVbdFtyKzFdXTtpZihudWxsPT1vKXRocm93IG5ldyB5dCgtMzAxLCExKTtpLnB1c2godFtyXSxvKX19fShlLGkscil9ZS5tZXJnZWRBdHRycz1ZXyhlLm1lcmdlZEF0dHJzLGUuYXR0cnMpfWZ1bmN0aW9uIFB6KG4sdCxlLGkscixvKXtmb3IobGV0IGM9MDtjPGkubGVuZ3RoO2MrKylIUihsTShlLHQpLG4saVtjXS50eXBlKTshZnVuY3Rpb24obix0LGUpe24uZmxhZ3N8PTEsbi5kaXJlY3RpdmVTdGFydD10LG4uZGlyZWN0aXZlRW5kPXQrZSxuLnByb3ZpZGVySW5kZXhlcz10fShlLG4uZGF0YS5sZW5ndGgsaS5sZW5ndGgpO2ZvcihsZXQgYz0wO2M8aS5sZW5ndGg7YysrKXtsZXQgZD1pW2NdO2QucHJvdmlkZXJzUmVzb2x2ZXImJmQucHJvdmlkZXJzUmVzb2x2ZXIoZCl9bGV0IHM9ITEsYT0hMSxsPXViKG4sdCxpLmxlbmd0aCxudWxsKTtmb3IobGV0IGM9MDtjPGkubGVuZ3RoO2MrKyl7bGV0IGQ9aVtjXTtlLm1lcmdlZEF0dHJzPVlfKGUubWVyZ2VkQXR0cnMsZC5ob3N0QXR0cnMpLHdhZShuLGUsdCxsLGQpLENhZShsLGQsciksbnVsbCE9PWQuY29udGVudFF1ZXJpZXMmJihlLmZsYWdzfD00KSwobnVsbCE9PWQuaG9zdEJpbmRpbmdzfHxudWxsIT09ZC5ob3N0QXR0cnN8fDAhPT1kLmhvc3RWYXJzKSYmKGUuZmxhZ3N8PTY0KTtsZXQgdT1kLnR5cGUucHJvdG90eXBlOyFzJiYodS5uZ09uQ2hhbmdlc3x8dS5uZ09uSW5pdHx8dS5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJIb29rcz8/KG4ucHJlT3JkZXJIb29rcz1bXSkpLnB1c2goZS5pbmRleCkscz0hMCksIWEmJih1Lm5nT25DaGFuZ2VzfHx1Lm5nRG9DaGVjaykmJigobi5wcmVPcmRlckNoZWNrSG9va3M/PyhuLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2goZS5pbmRleCksYT0hMCksbCsrfSFmdW5jdGlvbihuLHQsZSl7bGV0IHI9dC5kaXJlY3RpdmVFbmQsbz1uLmRhdGEscz10LmF0dHJzLGE9W10sbD1udWxsLGM9bnVsbDtmb3IobGV0IGQ9dC5kaXJlY3RpdmVTdGFydDtkPHI7ZCsrKXtsZXQgdT1vW2RdLHA9ZT9lLmdldCh1KTpudWxsLG09cD9wLm91dHB1dHM6bnVsbDtsPUNIKHUuaW5wdXRzLGQsbCxwP3AuaW5wdXRzOm51bGwpLGM9Q0godS5vdXRwdXRzLGQsYyxtKTtsZXQgYj1udWxsPT09bHx8bnVsbD09PXN8fE16KHQpP251bGw6VGFlKGwsZCxzKTthLnB1c2goYil9bnVsbCE9PWwmJihsLmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYodC5mbGFnc3w9OCksbC5oYXNPd25Qcm9wZXJ0eSgic3R5bGUiKSYmKHQuZmxhZ3N8PTE2KSksdC5pbml0aWFsSW5wdXRzPWEsdC5pbnB1dHM9bCx0Lm91dHB1dHM9Y30obixlLG8pfWZ1bmN0aW9uIE96KG4sdCxlKXtsZXQgaT1lLmRpcmVjdGl2ZVN0YXJ0LHI9ZS5kaXJlY3RpdmVFbmQsbz1lLmluZGV4LHM9am4ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDt0cnl7VnAobyk7Zm9yKGxldCBhPWk7YTxyO2ErKyl7bGV0IGw9bi5kYXRhW2FdLGM9dFthXTtMUihhKSwobnVsbCE9PWwuaG9zdEJpbmRpbmdzfHwwIT09bC5ob3N0VmFyc3x8bnVsbCE9PWwuaG9zdEF0dHJzKSYmdmFlKGwsYyl9fWZpbmFsbHl7VnAoLTEpLExSKHMpfX1mdW5jdGlvbiB2YWUobix0KXtudWxsIT09bi5ob3N0QmluZGluZ3MmJm4uaG9zdEJpbmRpbmdzKDEsdCl9ZnVuY3Rpb24gZFAobix0LGUpe3QuY29tcG9uZW50T2Zmc2V0PWUsKG4uY29tcG9uZW50cz8/KG4uY29tcG9uZW50cz1bXSkpLnB1c2godC5pbmRleCl9ZnVuY3Rpb24gQ2FlKG4sdCxlKXtpZihlKXtpZih0LmV4cG9ydEFzKWZvcihsZXQgaT0wO2k8dC5leHBvcnRBcy5sZW5ndGg7aSsrKWVbdC5leHBvcnRBc1tpXV09bjt2bCh0KSYmKGVbIiJdPW4pfX1mdW5jdGlvbiB3YWUobix0LGUsaSxyKXtuLmRhdGFbaV09cjtsZXQgbz1yLmZhY3Rvcnl8fChyLmZhY3Rvcnk9QnAoci50eXBlKSkscz1uZXcgSHAobyx2bChyKSxDKTtuLmJsdWVwcmludFtpXT1zLGVbaV09cyxmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPXIuaG9zdEJpbmRpbmdzO2lmKG8pe2xldCBzPW4uaG9zdEJpbmRpbmdPcENvZGVzO251bGw9PT1zJiYocz1uLmhvc3RCaW5kaW5nT3BDb2Rlcz1bXSk7bGV0IGE9fnQuaW5kZXg7KGZ1bmN0aW9uKG4pe2xldCB0PW4ubGVuZ3RoO2Zvcig7dD4wOyl7bGV0IGU9blstLXRdO2lmKCJudW1iZXIiPT10eXBlb2YgZSYmZTwwKXJldHVybiBlfXJldHVybiAwfSkocykhPWEmJnMucHVzaChhKSxzLnB1c2goZSxpLG8pfX0obix0LGksdWIobixlLHIuaG9zdFZhcnMsSG4pLHIpfWZ1bmN0aW9uIGdjKG4sdCxlLGkscixvKXtsZXQgcz1vYShuLHQpO01PKHRbb2ldLHMsbyxuLnZhbHVlLGUsaSxyKX1mdW5jdGlvbiBNTyhuLHQsZSxpLHIsbyxzKXtpZihudWxsPT1vKW4ucmVtb3ZlQXR0cmlidXRlKHQscixlKTtlbHNle2xldCBhPW51bGw9PXM/VW4obyk6cyhvLGl8fCIiLHIpO24uc2V0QXR0cmlidXRlKHQscixhLGUpfX1mdW5jdGlvbiBFYWUobix0LGUsaSxyLG8pe2xldCBzPW9bdF07aWYobnVsbCE9PXMpe2xldCBhPWkuc2V0SW5wdXQ7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDspe2xldCBjPXNbbCsrXSxkPXNbbCsrXSx1PXNbbCsrXTtudWxsIT09YT9pLnNldElucHV0KGUsdSxjLGQpOmVbZF09dX19fWZ1bmN0aW9uIFRhZShuLHQsZSl7bGV0IGk9bnVsbCxyPTA7Zm9yKDtyPGUubGVuZ3RoOyl7bGV0IG89ZVtyXTtpZigwIT09bylpZig1IT09byl7aWYoIm51bWJlciI9PXR5cGVvZiBvKWJyZWFrO2lmKG4uaGFzT3duUHJvcGVydHkobykpe251bGw9PT1pJiYoaT1bXSk7bGV0IHM9bltvXTtmb3IobGV0IGE9MDthPHMubGVuZ3RoO2ErPTIpaWYoc1thXT09PXQpe2kucHVzaChvLHNbYSsxXSxlW3IrMV0pO2JyZWFrfX1yKz0yfWVsc2Ugcis9MjtlbHNlIHIrPTR9cmV0dXJuIGl9ZnVuY3Rpb24ga3oobix0LGUsaSl7cmV0dXJuW24sITAsITEsdCxudWxsLDAsaSxlLG51bGwsbnVsbF19ZnVuY3Rpb24gQWFlKG4sdCl7bGV0IGU9aWQodCxuKTtpZihyTShlKSl7bGV0IGk9ZVtGbl07NDgmZVtyaV0/Qk0oaSxlLGkudGVtcGxhdGUsZVtFc10pOmVbRnBdPjAmJnVQKGUpfX1mdW5jdGlvbiB1UChuKXtmb3IobGV0IGk9ck8obik7bnVsbCE9PWk7aT1vTyhpKSlmb3IobGV0IHI9d3M7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07aWYock0obykpaWYoNTEyJm9bcmldKXtsZXQgcz1vW0ZuXTtCTShzLG8scy50ZW1wbGF0ZSxvW0VzXSl9ZWxzZSBvW0ZwXT4wJiZ1UChvKX1sZXQgZT1uW0ZuXS5jb21wb25lbnRzO2lmKG51bGwhPT1lKWZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1pZChlW2ldLG4pO3JNKHIpJiZyW0ZwXT4wJiZ1UChyKX19ZnVuY3Rpb24gUmFlKG4sdCl7bGV0IGU9aWQodCxuKSxpPWVbRm5dOyhmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT10Lmxlbmd0aDtlPG4uYmx1ZXByaW50Lmxlbmd0aDtlKyspdC5wdXNoKG4uYmx1ZXByaW50W2VdKX0pKGksZSksX08oaSxlLGVbRXNdKX1mdW5jdGlvbiBWTShuLHQpe3JldHVybiBuW1dfXT9uW2lIXVtfbF09dDpuW1dfXT10LG5baUhdPXQsdH1mdW5jdGlvbiB3TyhuKXtmb3IoO247KXtuW3JpXXw9MzI7bGV0IHQ9aU8obik7aWYoQXJlKG4pJiYhdClyZXR1cm4gbjtuPXR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRnoobix0LGUsaT0hMCl7bGV0IHI9dFtuTV07ci5iZWdpbiYmci5iZWdpbigpO3RyeXtCTShuLHQsbi50ZW1wbGF0ZSxlKX1jYXRjaChzKXt0aHJvdyBpJiZWeih0LHMpLHN9ZmluYWxseXtyLmVuZCYmci5lbmQoKX19ZnVuY3Rpb24gcFAobix0LGUpe1FQKDApLHQobixlKX1mdW5jdGlvbiBOeihuKXtyZXR1cm4gbltHX118fChuW0dfXT1bXSl9ZnVuY3Rpb24gTHoobil7cmV0dXJuIG4uY2xlYW51cHx8KG4uY2xlYW51cD1bXSl9ZnVuY3Rpb24gQnoobix0LGUpe3JldHVybihudWxsPT09bnx8dmwobikpJiYoZT1mdW5jdGlvbihuKXtmb3IoO0FycmF5LmlzQXJyYXkobik7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bVVBdKXJldHVybiBuO249bltzdV19cmV0dXJuIG51bGx9KGVbdC5pbmRleF0pKSxlW29pXX1mdW5jdGlvbiBWeihuLHQpe2xldCBlPW5bdE1dLGk9ZT9lLmdldChycyxudWxsKTpudWxsO2kmJmkuaGFuZGxlRXJyb3IodCl9ZnVuY3Rpb24gU08obix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoOyl7bGV0IHM9ZVtvKytdLGE9ZVtvKytdLGw9dFtzXSxjPW4uZGF0YVtzXTtudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwscixpLGEpOmxbYV09cn19ZnVuY3Rpb24gbGQobix0LGUpe2xldCBpPUlNKHQsbik7ejUobltvaV0saSxlKX1mdW5jdGlvbiBmTShuLHQsZSl7bGV0IGk9ZT9uLnN0eWxlczpudWxsLHI9ZT9uLmNsYXNzZXM6bnVsbCxvPTA7aWYobnVsbCE9PXQpZm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2xldCBhPXRbc107Im51bWJlciI9PXR5cGVvZiBhP289YToxPT1vP3I9QVIocixhKToyPT1vJiYoaT1BUihpLGErIjogIit0Wysrc10rIjsiKSl9ZT9uLnN0eWxlcz1pOm4uc3R5bGVzV2l0aG91dEhvc3Q9aSxlP24uY2xhc3Nlcz1yOm4uY2xhc3Nlc1dpdGhvdXRIb3N0PXJ9ZnVuY3Rpb24gUUMobix0LGUsaSxyPSExKXtmb3IoO251bGwhPT1lOyl7bGV0IG89dFtlLmluZGV4XTtpZihudWxsIT09byYmaS5wdXNoKFJhKG8pKSxuZChvKSlmb3IobGV0IGE9d3M7YTxvLmxlbmd0aDthKyspe2xldCBsPW9bYV0sYz1sW0ZuXS5maXJzdENoaWxkO251bGwhPT1jJiZRQyhsW0ZuXSxsLGMsaSl9bGV0IHM9ZS50eXBlO2lmKDgmcylRQyhuLHQsZS5jaGlsZCxpKTtlbHNlIGlmKDMyJnMpe2xldCBsLGE9bk8oZSx0KTtmb3IoO2w9YSgpOylpLnB1c2gobCl9ZWxzZSBpZigxNiZzKXtsZXQgYT1LNSh0LGUpO2lmKEFycmF5LmlzQXJyYXkoYSkpaS5wdXNoKC4uLmEpO2Vsc2V7bGV0IGw9aU8odFtibF0pO1FDKGxbRm5dLGwsYSxpLCEwKX19ZT1yP2UucHJvamVjdGlvbk5leHQ6ZS5uZXh0fXJldHVybiBpfXZhciBqcD1jbGFzc3tnZXQgcm9vdE5vZGVzKCl7bGV0IHQ9dGhpcy5fbFZpZXcsZT10W0ZuXTtyZXR1cm4gUUMoZSx0LGUuZmlyc3RDaGlsZCxbXSl9Y29uc3RydWN0b3IodCxlKXt0aGlzLl9sVmlldz10LHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlldz1lLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3W0VzXX1zZXQgY29udGV4dCh0KXt0aGlzLl9sVmlld1tFc109dH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIDEyOD09KDEyOCZ0aGlzLl9sVmlld1tyaV0pfWRlc3Ryb3koKXtpZih0aGlzLl9hcHBSZWYpdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk7ZWxzZSBpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil7bGV0IHQ9dGhpcy5fbFZpZXdbR3JdO2lmKG5kKHQpKXtsZXQgZT10W2lNXSxpPWU/ZS5pbmRleE9mKHRoaXMpOi0xO2k+LTEmJihHUih0LGkpLGNNKGUsaSkpfXRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWo1KHRoaXMuX2xWaWV3W0ZuXSx0aGlzLl9sVmlldyl9b25EZXN0cm95KHQpe1J6KHRoaXMuX2xWaWV3W0ZuXSx0aGlzLl9sVmlldyxudWxsLHQpfW1hcmtGb3JDaGVjaygpe3dPKHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlld3x8dGhpcy5fbFZpZXcpfWRldGFjaCgpe3RoaXMuX2xWaWV3W3JpXSY9LTY1fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbcmldfD02NH1kZXRlY3RDaGFuZ2VzKCl7RnoodGhpcy5fbFZpZXdbRm5dLHRoaXMuX2xWaWV3LHRoaXMuY29udGV4dCl9Y2hlY2tOb0NoYW5nZXMoKXt9YXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyB5dCg5MDIsITEpO3RoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSEwfWRldGFjaEZyb21BcHBSZWYoKXt2YXIgdDt0aGlzLl9hcHBSZWY9bnVsbCxhYih0aGlzLl9sVmlld1tGbl0sdD10aGlzLl9sVmlldyx0W29pXSwyLG51bGwsbnVsbCl9YXR0YWNoVG9BcHBSZWYodCl7aWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpdGhyb3cgbmV3IHl0KDkwMiwhMSk7dGhpcy5fYXBwUmVmPXR9fSxmUD1jbGFzcyBleHRlbmRzIGpwe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX3ZpZXc9dH1kZXRlY3RDaGFuZ2VzKCl7bGV0IHQ9dGhpcy5fdmlldztGeih0W0ZuXSx0LHRbRXNdLCExKX1jaGVja05vQ2hhbmdlcygpe31nZXQgY29udGV4dCgpe3JldHVybiBudWxsfX0sbU09Y2xhc3MgZXh0ZW5kcyBmb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubmdNb2R1bGU9dH1yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXtsZXQgZT1EYSh0KTtyZXR1cm4gbmV3IGhNKGUsdGhpcy5uZ01vZHVsZSl9fTtmdW5jdGlvbiB3SChuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbiluLmhhc093blByb3BlcnR5KGUpJiZ0LnB1c2goe3Byb3BOYW1lOm5bZV0sdGVtcGxhdGVOYW1lOmV9KTtyZXR1cm4gdH12YXIgaE09Y2xhc3MgZXh0ZW5kcyBwTXtnZXQgaW5wdXRzKCl7cmV0dXJuIHdIKHRoaXMuY29tcG9uZW50RGVmLmlucHV0cyl9Z2V0IG91dHB1dHMoKXtyZXR1cm4gd0godGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPXQsdGhpcy5uZ01vZHVsZT1lLHRoaXMuY29tcG9uZW50VHlwZT10LnR5cGUsdGhpcy5zZWxlY3Rvcj10LnNlbGVjdG9ycy5tYXAoJHNlKS5qb2luKCIsIiksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9dC5uZ0NvbnRlbnRTZWxlY3RvcnM/dC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5pc0JvdW5kVG9Nb2R1bGU9ISFlfWNyZWF0ZSh0LGUsaSxyKXtsZXQgbz0ocj1yfHx0aGlzLm5nTW9kdWxlKWluc3RhbmNlb2YgcGM/cjpyPy5pbmplY3RvcjtvJiZudWxsIT09dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yJiYobz10aGlzLmNvbXBvbmVudERlZi5nZXRTdGFuZGFsb25lSW5qZWN0b3Iobyl8fG8pO2xldCBzPW8/bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pbmplY3Rvcj10LHRoaXMucGFyZW50SW5qZWN0b3I9ZX1nZXQodCxlLGkpe2k9d00oaSk7bGV0IHI9dGhpcy5pbmplY3Rvci5nZXQodCxnUixpKTtyZXR1cm4gciE9PWdSfHxlPT09Z1I/cjp0aGlzLnBhcmVudEluamVjdG9yLmdldCh0LGUsaSl9fSh0LG8pOnQsYT1zLmdldChmYyxudWxsKTtpZihudWxsPT09YSl0aHJvdyBuZXcgeXQoNDA3LCExKTtsZXQgYixNLGw9cy5nZXQoSHNlLG51bGwpLGM9YS5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxkPXRoaXMuY29tcG9uZW50RGVmLnNlbGVjdG9yc1swXVswXXx8ImRpdiIsdT1pP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbi5zZWxlY3RSb290RWxlbWVudCh0LGU9PT1yYS5TaGFkb3dEb20pfShjLGksdGhpcy5jb21wb25lbnREZWYuZW5jYXBzdWxhdGlvbik6YU8oYyxkLGZ1bmN0aW9uKG4pe2xldCB0PW4udG9Mb3dlckNhc2UoKTtyZXR1cm4ic3ZnIj09PXQ/bDU6Im1hdGgiPT09dD9jNTpudWxsfShkKSkscD10aGlzLmNvbXBvbmVudERlZi5vblB1c2g/Mjg4OjI3MixmPXhPKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpLG09TE0obnVsbCxmLG51bGwscCxudWxsLG51bGwsYSxjLGwscyxudWxsKTtaUChtKTt0cnl7bGV0IHgseT10aGlzLmNvbXBvbmVudERlZixSPW51bGw7eS5maW5kSG9zdERpcmVjdGl2ZURlZnM/KHg9W10sUj1uZXcgTWFwLHkuZmluZEhvc3REaXJlY3RpdmVEZWZzKHkseCxSKSx4LnB1c2goeSkpOng9W3ldO2xldCBBPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bltGbl0saT1XcjtyZXR1cm4gbltpXT10LG9oKGUsaSwyLCIjaG9zdCIsbnVsbCl9KG0sdSksVj1mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsPXJbRm5dOyFmdW5jdGlvbihuLHQsZSxpKXtmb3IobGV0IHIgb2Ygbil0Lm1lcmdlZEF0dHJzPVlfKHQubWVyZ2VkQXR0cnMsci5ob3N0QXR0cnMpO251bGwhPT10Lm1lcmdlZEF0dHJzJiYoZk0odCx0Lm1lcmdlZEF0dHJzLCEwKSxudWxsIT09ZSYmZXooaSxlLHQpKX0oaSxuLHQscyk7bGV0IGM9by5jcmVhdGVSZW5kZXJlcih0LGUpLGQ9TE0ocixBeihlKSxudWxsLGUub25QdXNoPzMyOjE2LHJbbi5pbmRleF0sbixvLGMsbnVsbCxudWxsLG51bGwpO3JldHVybiBsLmZpcnN0Q3JlYXRlUGFzcyYmZFAobCxuLGkubGVuZ3RoLTEpLFZNKHIsZCkscltuLmluZGV4XT1kfShBLHUseSx4LG0sYSxjKTtNPWQ1KGYsV3IpLHUmJmZ1bmN0aW9uKG4sdCxlLGkpe2lmKGkpQlIobixlLFsibmctdmVyc2lvbiIsenNlLmZ1bGxdKTtlbHNle2xldHthdHRyczpyLGNsYXNzZXM6b309ZnVuY3Rpb24obil7bGV0IHQ9W10sZT1bXSxpPTEscj0yO2Zvcig7aTxuLmxlbmd0aDspe2xldCBvPW5baV07aWYoInN0cmluZyI9PXR5cGVvZiBvKTI9PT1yPyIiIT09byYmdC5wdXNoKG8sblsrK2ldKTo4PT09ciYmZS5wdXNoKG8pO2Vsc2V7aWYoIWhsKHIpKWJyZWFrO3I9b31pKyt9cmV0dXJue2F0dHJzOnQsY2xhc3NlczplfX0odC5zZWxlY3RvcnNbMF0pO3ImJkJSKG4sZSxyKSxvJiZvLmxlbmd0aD4wJiYkNShuLGUsby5qb2luKCIgIikpfX0oYyx5LHUsaSksdm9pZCAwIT09ZSYmZnVuY3Rpb24obix0LGUpe2xldCBpPW4ucHJvamVjdGlvbj1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89ZVtyXTtpLnB1c2gobnVsbCE9bz9BcnJheS5mcm9tKG8pOm51bGwpfX0oTSx0aGlzLm5nQ29udGVudFNlbGVjdG9ycyxlKSxiPWZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgcz1QbygpLGE9cltGbl0sbD1vYShzLHIpO1B6KGEscixzLGUsbnVsbCxpKTtmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKyl1Yyh6cChyLGEscy5kaXJlY3RpdmVTdGFydCtkLHMpLHIpO096KGEscixzKSxsJiZ1YyhsLHIpO2xldCBjPXpwKHIsYSxzLmRpcmVjdGl2ZVN0YXJ0K3MuY29tcG9uZW50T2Zmc2V0LHMpO2lmKG5bRXNdPXJbRXNdPWMsbnVsbCE9PW8pZm9yKGxldCBkIG9mIG8pZChjLHQpO3JldHVybiBiTyhhLHMsbiksY30oVix5LHgsUixtLFtIYWVdKSxfTyhmLG0sbnVsbCl9ZmluYWxseXtLUCgpfXJldHVybiBuZXcgaFAodGhpcy5jb21wb25lbnRUeXBlLGIscmgoTSxtKSxtLE0pfX0saFA9Y2xhc3MgZXh0ZW5kcyBhUHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKCksdGhpcy5sb2NhdGlvbj1pLHRoaXMuX3Jvb3RMVmlldz1yLHRoaXMuX3ROb2RlPW8sdGhpcy5pbnN0YW5jZT1lLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgZlAociksdGhpcy5jb21wb25lbnRUeXBlPXR9c2V0SW5wdXQodCxlKXtsZXQgcixpPXRoaXMuX3ROb2RlLmlucHV0cztpZihudWxsIT09aSYmKHI9aVt0XSkpe2xldCBvPXRoaXMuX3Jvb3RMVmlldztTTyhvW0ZuXSxvLHIsdCxlKSx3TyhpZCh0aGlzLl90Tm9kZS5pbmRleCxvKSl9fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgTHAodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KHQpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KHQpfX07ZnVuY3Rpb24gSGFlKCl7bGV0IG49UG8oKTtBTShaZSgpW0ZuXSxuKX1mdW5jdGlvbiBIeihuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1mdW5jdGlvbiBLZShuKXtsZXQgdD1IeihuLnR5cGUpLGU9ITAsaT1bbl07Zm9yKDt0Oyl7bGV0IHI7aWYodmwobikpcj10Llx1MDI3NWNtcHx8dC5cdTAyNzVkaXI7ZWxzZXtpZih0Llx1MDI3NWNtcCl0aHJvdyBuZXcgeXQoOTAzLCExKTtyPXQuXHUwMjc1ZGlyfWlmKHIpe2lmKGUpe2kucHVzaChyKTtsZXQgcz1uO3MuaW5wdXRzPWJSKG4uaW5wdXRzKSxzLmRlY2xhcmVkSW5wdXRzPWJSKG4uZGVjbGFyZWRJbnB1dHMpLHMub3V0cHV0cz1iUihuLm91dHB1dHMpO2xldCBhPXIuaG9zdEJpbmRpbmdzO2EmJkdhZShuLGEpO2xldCBsPXIudmlld1F1ZXJ5LGM9ci5jb250ZW50UXVlcmllcztpZihsJiZVYWUobixsKSxjJiZqYWUobixjKSxjUihuLmlucHV0cyxyLmlucHV0cyksY1Iobi5kZWNsYXJlZElucHV0cyxyLmRlY2xhcmVkSW5wdXRzKSxjUihuLm91dHB1dHMsci5vdXRwdXRzKSx2bChyKSYmci5kYXRhLmFuaW1hdGlvbil7bGV0IGQ9bi5kYXRhO2QuYW5pbWF0aW9uPShkLmFuaW1hdGlvbnx8W10pLmNvbmNhdChyLmRhdGEuYW5pbWF0aW9uKX19bGV0IG89ci5mZWF0dXJlcztpZihvKWZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKXtsZXQgYT1vW3NdO2EmJmEubmdJbmhlcml0JiZhKG4pLGE9PT1LZSYmKGU9ITEpfX10PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0hZnVuY3Rpb24obil7bGV0IHQ9MCxlPW51bGw7Zm9yKGxldCBpPW4ubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPW5baV07ci5ob3N0VmFycz10Kz1yLmhvc3RWYXJzLHIuaG9zdEF0dHJzPVlfKHIuaG9zdEF0dHJzLGU9WV8oZSxyLmhvc3RBdHRycykpfX0oaSl9ZnVuY3Rpb24gYlIobil7cmV0dXJuIG49PT0kYz97fTpuPT09Vmk/W106bn1mdW5jdGlvbiBVYWUobix0KXtsZXQgZT1uLnZpZXdRdWVyeTtuLnZpZXdRdWVyeT1lPyhpLHIpPT57dChpLHIpLGUoaSxyKX06dH1mdW5jdGlvbiBqYWUobix0KXtsZXQgZT1uLmNvbnRlbnRRdWVyaWVzO24uY29udGVudFF1ZXJpZXM9ZT8oaSxyLG8pPT57dChpLHIsbyksZShpLHIsbyl9OnR9ZnVuY3Rpb24gR2FlKG4sdCl7bGV0IGU9bi5ob3N0QmluZGluZ3M7bi5ob3N0QmluZGluZ3M9ZT8oaSxyKT0+e3QoaSxyKSxlKGkscil9OnR9dmFyIFdhZT1bInByb3ZpZGVyc1Jlc29sdmVyIl0scWFlPVsidGVtcGxhdGUiLCJkZWNscyIsImNvbnN0cyIsInZhcnMiLCJvblB1c2giLCJuZ0NvbnRlbnRTZWxlY3RvcnMiLCJzdHlsZXMiLCJlbmNhcHN1bGF0aW9uIiwic2NoZW1hcyJdO2Z1bmN0aW9uIHp6KG4sdCxlKXtpZihudWxsIT09bi5ob3N0RGlyZWN0aXZlcylmb3IobGV0IGkgb2Ygbi5ob3N0RGlyZWN0aXZlcyl7bGV0IHI9dHUoaS5kaXJlY3RpdmUpO1FhZShyLmRlY2xhcmVkSW5wdXRzLGkuaW5wdXRzKSx6eihyLHQsZSksZS5zZXQocixpKSx0LnB1c2gocil9fWZ1bmN0aW9uIFNIKG4pe2lmKHZvaWQgMD09PW58fDA9PT1uLmxlbmd0aClyZXR1cm4gJGM7bGV0IHQ9e307Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKz0yKXRbbltlXV09bltlKzFdO3JldHVybiB0fWZ1bmN0aW9uIFFhZShuLHQpe2ZvcihsZXQgZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJihuW3RbZV1dPW5bZV0pfWZ1bmN0aW9uIFV6KG4pe3JldHVybiEhRU8obikmJihBcnJheS5pc0FycmF5KG4pfHwhKG4gaW5zdGFuY2VvZiBNYXApJiZTeW1ib2wuaXRlcmF0b3IgaW4gbil9ZnVuY3Rpb24gRU8obil7cmV0dXJuIG51bGwhPT1uJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2Ygbil9ZnVuY3Rpb24gX2Mobix0LGUpe3JldHVybiBuW3RdPWV9ZnVuY3Rpb24gcGIobix0KXtyZXR1cm4gblt0XX1mdW5jdGlvbiBVbyhuLHQsZSl7cmV0dXJuIU9iamVjdC5pcyhuW3RdLGUpJiYoblt0XT1lLCEwKX1mdW5jdGlvbiBHcChuLHQsZSxpKXtsZXQgcj1VbyhuLHQsZSk7cmV0dXJuIFVvKG4sdCsxLGkpfHxyfWZ1bmN0aW9uIEhNKG4sdCxlLGkscil7bGV0IG89R3Aobix0LGUsaSk7cmV0dXJuIFVvKG4sdCsyLHIpfHxvfWZ1bmN0aW9uIFBhKG4sdCxlLGkscixvKXtsZXQgcz1HcChuLHQsZSxpKTtyZXR1cm4gR3Aobix0KzIscixvKXx8c31mdW5jdGlvbiBCZShuLHQsZSxpKXtsZXQgcj1aZSgpO3JldHVybiBVbyhyLGVoKCksdCkmJihFaSgpLGdjKGtyKCkscixuLHQsZSxpKSksQmV9ZnVuY3Rpb24gc2gobix0KXtsZXQgZT0hMSxpPXJkKCk7Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKz0yKWU9VW8obixpKyssdFtvXSl8fGU7aWYobTUoaSksIWUpcmV0dXJuIEhuO2xldCByPXRbMF07Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKz0yKXIrPVVuKHRbb10pK3RbbysxXTtyZXR1cm4gcn1mdW5jdGlvbiBhaChuLHQsZSxpKXtyZXR1cm4gVW8obixlaCgpLGUpP3QrVW4oZSkraTpIbn1mdW5jdGlvbiBsaChuLHQsZSxpLHIsbyl7bGV0IGE9R3AobixyZCgpLGUscik7cmV0dXJuIG9kKDIpLGE/dCtVbihlKStpK1VuKHIpK286SG59ZnVuY3Rpb24gY2gobix0LGUsaSxyLG8scyxhKXtsZXQgYz1ITShuLHJkKCksZSxyLHMpO3JldHVybiBvZCgzKSxjP3QrVW4oZSkraStVbihyKStvK1VuKHMpK2E6SG59ZnVuY3Rpb24gZGgobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9UGEobixyZCgpLGUscixzLGwpO3JldHVybiBvZCg0KSx1P3QrVW4oZSkraStVbihyKStvK1VuKHMpK2ErVW4obCkrYzpIbn1mdW5jdGlvbiB1aChuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSl7bGV0IHA9cmQoKSxmPVBhKG4scCxlLHIscyxsKTtyZXR1cm4gZj1VbyhuLHArNCxkKXx8ZixvZCg1KSxmP3QrVW4oZSkraStVbihyKStvK1VuKHMpK2ErVW4obCkrYytVbihkKSt1OkhufWZ1bmN0aW9uIHBoKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZil7bGV0IG09cmQoKSxiPVBhKG4sbSxlLHIscyxsKTtyZXR1cm4gYj1HcChuLG0rNCxkLHApfHxiLG9kKDYpLGI/dCtVbihlKStpK1VuKHIpK28rVW4ocykrYStVbihsKStjK1VuKGQpK3UrVW4ocCkrZjpIbn1mdW5jdGlvbiBmaChuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiKXtsZXQgTT1yZCgpLHk9UGEobixNLGUscixzLGwpO3JldHVybiB5PUhNKG4sTSs0LGQscCxtKXx8eSxvZCg3KSx5P3QrVW4oZSkraStVbihyKStvK1VuKHMpK2ErVW4obCkrYytVbihkKSt1K1VuKHApK2YrVW4obSkrYjpIbn1mdW5jdGlvbiBtaChuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0seSl7bGV0IHg9cmQoKSxSPVBhKG4seCxlLHIscyxsKTtyZXR1cm4gUj1QYShuLHgrNCxkLHAsbSxNKXx8UixvZCg4KSxSP3QrVW4oZSkraStVbihyKStvK1VuKHMpK2ErVW4obCkrYytVbihkKSt1K1VuKHApK2YrVW4obSkrYitVbihNKSt5OkhufWZ1bmN0aW9uIFMobix0LGUsaSxyLG8scyxhKXtsZXQgbD1aZSgpLGM9RWkoKSxkPW4rV3IsdT1jLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCl7bGV0IGM9dC5jb25zdHMsZD1vaCh0LG4sNCxzfHxudWxsLGl1KGMsYSkpO0NPKHQsZSxkLGl1KGMsbCkpLEFNKHQsZCk7bGV0IHU9ZC50Vmlldz14TygyLGQsaSxyLG8sdC5kaXJlY3RpdmVSZWdpc3RyeSx0LnBpcGVSZWdpc3RyeSxudWxsLHQuc2NoZW1hcyxjKTtyZXR1cm4gbnVsbCE9PXQucXVlcmllcyYmKHQucXVlcmllcy50ZW1wbGF0ZSh0LGQpLHUucXVlcmllcz10LnF1ZXJpZXMuZW1iZWRkZWRUVmlldyhkKSksZH0oZCxjLGwsdCxlLGkscixvLHMpOmMuZGF0YVtkXTtkYyh1LCExKTtsZXQgcD1sW29pXS5jcmVhdGVDb21tZW50KCIiKTtPTShjLGwscCx1KSx1YyhwLGwpLFZNKGwsbFtkXT1reihwLGwscCx1KSksRE0odSkmJnZPKGMsbCx1KSxudWxsIT1zJiZ5TyhsLHUsYSl9ZnVuY3Rpb24gaXQobil7cmV0dXJuICRtKGpuLmxGcmFtZS5jb250ZXh0TFZpZXcsV3Irbil9ZnVuY3Rpb24gXyhuLHQsZSl7bGV0IGk9WmUoKTtyZXR1cm4gVW8oaSxlaCgpLHQpJiZhYShFaSgpLGtyKCksaSxuLHQsaVtvaV0sZSwhMSksX31mdW5jdGlvbiBnUChuLHQsZSxpLHIpe2xldCBzPXI/ImNsYXNzIjoic3R5bGUiO1NPKG4sZSx0LmlucHV0c1tzXSxzLGkpfWZ1bmN0aW9uIGgobix0LGUsaSl7bGV0IHI9WmUoKSxvPUVpKCkscz1XcituLGE9cltvaV0sbD1vLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IHM9dC5jb25zdHMsbD1vaCh0LG4sMixpLGl1KHMscikpO3JldHVybiBDTyh0LGUsbCxpdShzLG8pKSxudWxsIT09bC5hdHRycyYmZk0obCxsLmF0dHJzLCExKSxudWxsIT09bC5tZXJnZWRBdHRycyYmZk0obCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09dC5xdWVyaWVzJiZ0LnF1ZXJpZXMuZWxlbWVudFN0YXJ0KHQsbCksbH0ocyxvLHIsdCxlLGkpOm8uZGF0YVtzXSxjPXJbc109YU8oYSx0LGpuLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlKSxkPURNKGwpO3JldHVybiBkYyhsLCEwKSxleihhLGMsbCksMzIhPSgzMiZsLmZsYWdzKSYmT00obyxyLGMsbCksMD09PWpuLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCYmdWMoYyxyKSxqbi5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQrKyxkJiYodk8obyxyLGwpLGJPKG8sbCxyKSksbnVsbCE9PWkmJnlPKHIsbCksaH1mdW5jdGlvbiBnKCl7bGV0IG49UG8oKTtxUCgpP1lQKCk6KG49bi5wYXJlbnQsZGMobiwhMSkpO2xldCB0PW47am4ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50LS07bGV0IGU9RWkoKTtyZXR1cm4gZS5maXJzdENyZWF0ZVBhc3MmJihBTShlLG4pLEdQKG4pJiZlLnF1ZXJpZXMuZWxlbWVudEVuZChuKSksbnVsbCE9dC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uKG4pe3JldHVybiAwIT0oOCZuLmZsYWdzKX0odCkmJmdQKGUsdCxaZSgpLHQuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxsIT10LnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbihuKXtyZXR1cm4gMCE9KDE2Jm4uZmxhZ3MpfSh0KSYmZ1AoZSx0LFplKCksdC5zdHlsZXNXaXRob3V0SG9zdCwhMSksZ31mdW5jdGlvbiBQKG4sdCxlLGkpe3JldHVybiBoKG4sdCxlLGkpLGcoKSxQfWZ1bmN0aW9uIE90KG4sdCxlKXtsZXQgaT1aZSgpLHI9RWkoKSxvPW4rV3Iscz1yLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPXQuY29uc3RzLHM9aXUobyxpKSxhPW9oKHQsbiw4LCJuZy1jb250YWluZXIiLHMpO3JldHVybiBudWxsIT09cyYmZk0oYSxzLCEwKSxDTyh0LGUsYSxpdShvLHIpKSxudWxsIT09dC5xdWVyaWVzJiZ0LnF1ZXJpZXMuZWxlbWVudFN0YXJ0KHQsYSksYX0obyxyLGksdCxlKTpyLmRhdGFbb107ZGMocywhMCk7bGV0IGE9aVtvXT1pW29pXS5jcmVhdGVDb21tZW50KCIiKTtyZXR1cm4gT00ocixpLGEscyksdWMoYSxpKSxETShzKSYmKHZPKHIsaSxzKSxiTyhyLHMsaSkpLG51bGwhPWUmJnlPKGkscyksT3R9ZnVuY3Rpb24ga3QoKXtsZXQgbj1QbygpLHQ9RWkoKTtyZXR1cm4gcVAoKT9ZUCgpOihuPW4ucGFyZW50LGRjKG4sITEpKSx0LmZpcnN0Q3JlYXRlUGFzcyYmKEFNKHQsbiksR1AobikmJnQucXVlcmllcy5lbGVtZW50RW5kKG4pKSxrdH1mdW5jdGlvbiBsaShuLHQsZSl7cmV0dXJuIE90KG4sdCxlKSxrdCgpLGxpfWZ1bmN0aW9uIGdlKCl7cmV0dXJuIFplKCl9ZnVuY3Rpb24gaGgobil7cmV0dXJuISFuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi50aGVufWZ1bmN0aW9uIFRPKG4pe3JldHVybiEhbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4uc3Vic2NyaWJlfXZhciBETz1UTztmdW5jdGlvbiBJKG4sdCxlLGkpe2xldCByPVplKCksbz1FaSgpLHM9UG8oKTtyZXR1cm4gSnoobyxyLHJbb2ldLHMsbix0LGkpLEl9ZnVuY3Rpb24gek0obix0KXtsZXQgZT1QbygpLGk9WmUoKSxyPUVpKCk7cmV0dXJuIEp6KHIsaSxCeihYUChyLmRhdGEpLGUsaSksZSxuLHQpLHpNfWZ1bmN0aW9uIEp6KG4sdCxlLGkscixvLHMpe2xldCBhPURNKGkpLGM9bi5maXJzdENyZWF0ZVBhc3MmJkx6KG4pLGQ9dFtFc10sdT1Oeih0KSxwPSEwO2lmKDMmaS50eXBlfHxzKXtsZXQgYj1vYShpLHQpLE09cz9zKGIpOmIseT11Lmxlbmd0aCx4PXM/QT0+cyhSYShBW2kuaW5kZXhdKSk6aS5pbmRleCxSPW51bGw7aWYoIXMmJmEmJihSPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW4uY2xlYW51cDtpZihudWxsIT1yKWZvcihsZXQgbz0wO288ci5sZW5ndGgtMTtvKz0yKXtsZXQgcz1yW29dO2lmKHM9PT1lJiZyW28rMV09PT1pKXtsZXQgYT10W0dfXSxsPXJbbysyXTtyZXR1cm4gYS5sZW5ndGg+bD9hW2xdOm51bGx9InN0cmluZyI9PXR5cGVvZiBzJiYobys9Mil9cmV0dXJuIG51bGx9KG4sdCxyLGkuaW5kZXgpKSxudWxsIT09UikoUi5fX25nTGFzdExpc3RlbmVyRm5fX3x8UikuX19uZ05leHRMaXN0ZW5lckZuX189byxSLl9fbmdMYXN0TGlzdGVuZXJGbl9fPW8scD0hMTtlbHNle289VEgoaSx0LGQsbywhMSk7bGV0IEE9ZS5saXN0ZW4oTSxyLG8pO3UucHVzaChvLEEpLGMmJmMucHVzaChyLHgseSx5KzEpfX1lbHNlIG89VEgoaSx0LGQsbywhMSk7bGV0IG0sZj1pLm91dHB1dHM7aWYocCYmbnVsbCE9PWYmJihtPWZbcl0pKXtsZXQgYj1tLmxlbmd0aDtpZihiKWZvcihsZXQgTT0wO008YjtNKz0yKXtsZXQgVj10W21bTV1dW21bTSsxXV0uc3Vic2NyaWJlKG8pLHRlPXUubGVuZ3RoO3UucHVzaChvLFYpLGMmJmMucHVzaChyLGkuaW5kZXgsdGUsLSh0ZSsxKSl9fX1mdW5jdGlvbiBFSChuLHQsZSxpKXt0cnl7cmV0dXJuIFRhKDYsdCxlKSwhMSE9PWUoaSl9Y2F0Y2gocil7cmV0dXJuIFZ6KG4sciksITF9ZmluYWxseXtUYSg3LHQsZSl9fWZ1bmN0aW9uIFRIKG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uIG8ocyl7aWYocz09PUZ1bmN0aW9uKXJldHVybiBpO3dPKG4uY29tcG9uZW50T2Zmc2V0Pi0xP2lkKG4uaW5kZXgsdCk6dCk7bGV0IGw9RUgodCxlLGkscyksYz1vLl9fbmdOZXh0TGlzdGVuZXJGbl9fO2Zvcig7YzspbD1FSCh0LGUsYyxzKSYmbCxjPWMuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIHImJiExPT09bCYmKHMucHJldmVudERlZmF1bHQoKSxzLnJldHVyblZhbHVlPSExKSxsfX1mdW5jdGlvbiB3KG49MSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybihqbi5sRnJhbWUuY29udGV4dExWaWV3PWZ1bmN0aW9uKG4sdCl7Zm9yKDtuPjA7KXQ9dFtKbV0sbi0tO3JldHVybiB0fShuLGpuLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtFc119KG4pfWZ1bmN0aW9uIG5sZShuLHQpe2xldCBlPW51bGwsaT1mdW5jdGlvbihuKXtsZXQgdD1uLmF0dHJzO2lmKG51bGwhPXQpe2xldCBlPXQuaW5kZXhPZig1KTtpZigwPT0oMSZlKSlyZXR1cm4gdFtlKzFdfXJldHVybiBudWxsfShuKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXTtpZigiKiIhPT1vKXtpZihudWxsPT09aT93eihuLG8sITApOkpzZShpLG8pKXJldHVybiByfWVsc2UgZT1yfXJldHVybiBlfWZ1bmN0aW9uIERuKG4pe2xldCB0PVplKClbYmxdW1NzXTtpZighdC5wcm9qZWN0aW9uKXtsZXQgaT10LnByb2plY3Rpb249Tl8obj9uLmxlbmd0aDoxLG51bGwpLHI9aS5zbGljZSgpLG89dC5jaGlsZDtmb3IoO251bGwhPT1vOyl7bGV0IHM9bj9ubGUobyxuKTowO251bGwhPT1zJiYocltzXT9yW3NdLnByb2plY3Rpb25OZXh0PW86aVtzXT1vLHJbc109byksbz1vLm5leHR9fX1mdW5jdGlvbiB6dChuLHQ9MCxlKXtsZXQgaT1aZSgpLHI9RWkoKSxvPW9oKHIsV3IrbiwxNixudWxsLGV8fG51bGwpO251bGw9PT1vLnByb2plY3Rpb24mJihvLnByb2plY3Rpb249dCksWVAoKSwzMiE9KDMyJm8uZmxhZ3MpJiZmdW5jdGlvbihuLHQsZSl7SjUodFtvaV0sMCx0LGUsRzUobixlLHQpLFk1KGUucGFyZW50fHx0W1NzXSxlLHQpKX0ocixpLG8pfWZ1bmN0aW9uIFdpKG4sdCxlKXtyZXR1cm4gZmIobiwiIix0LCIiLGUpLFdpfWZ1bmN0aW9uIGZiKG4sdCxlLGkscil7bGV0IG89WmUoKSxzPWFoKG8sdCxlLGkpO3JldHVybiBzIT09SG4mJmFhKEVpKCksa3IoKSxvLG4scyxvW29pXSxyLCExKSxmYn1mdW5jdGlvbiBVTShuLHQsZSxpLHIsbyxzKXtsZXQgYT1aZSgpLGw9bGgoYSx0LGUsaSxyLG8pO3JldHVybiBsIT09SG4mJmFhKEVpKCksa3IoKSxhLG4sbCxhW29pXSxzLCExKSxVTX1mdW5jdGlvbiBVQyhuLHQpe3JldHVybiBuPDwxN3x0PDwyfWZ1bmN0aW9uIFdwKG4pe3JldHVybiBuPj4xNyYzMjc2N31mdW5jdGlvbiBfUChuKXtyZXR1cm4gMnxufWZ1bmN0aW9uIFhtKG4pe3JldHVybigxMzEwNjgmbik+PjJ9ZnVuY3Rpb24gdlIobix0KXtyZXR1cm4tMTMxMDY5Jm58dDw8Mn1mdW5jdGlvbiBiUChuKXtyZXR1cm4gMXxufWZ1bmN0aW9uIERIKG4sdCxlLGkscil7bGV0IG89bltlKzFdLHM9bnVsbD09PXQsYT1pP1dwKG8pOlhtKG8pLGw9ITE7Zm9yKDswIT09YSYmKCExPT09bHx8cyk7KXtsZXQgZD1uW2ErMV07bGxlKG5bYV0sdCkmJihsPSEwLG5bYSsxXT1pP2JQKGQpOl9QKGQpKSxhPWk/V3AoZCk6WG0oZCl9bCYmKG5bZSsxXT1pP19QKG8pOmJQKG8pKX1mdW5jdGlvbiBsbGUobix0KXtyZXR1cm4gbnVsbD09PW58fG51bGw9PXR8fChBcnJheS5pc0FycmF5KG4pP25bMV06bik9PT10fHwhKCFBcnJheS5pc0FycmF5KG4pfHwic3RyaW5nIiE9dHlwZW9mIHQpJiZzYihuLHQpPj0wfXZhciB1bz17dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVFbmQ6MH07ZnVuY3Rpb24gc1Uobil7cmV0dXJuIG4uc3Vic3RyaW5nKHVvLmtleSx1by5rZXlFbmQpfWZ1bmN0aW9uIGNsZShuKXtyZXR1cm4gbi5zdWJzdHJpbmcodW8udmFsdWUsdW8udmFsdWVFbmQpfWZ1bmN0aW9uIGFVKG4sdCl7bGV0IGU9dW8udGV4dEVuZDtyZXR1cm4gZT09PXQ/LTE6KHQ9dW8ua2V5RW5kPWZ1bmN0aW9uKG4sdCxlKXtmb3IoO3Q8ZSYmbi5jaGFyQ29kZUF0KHQpPjMyOyl0Kys7cmV0dXJuIHR9KG4sdW8ua2V5PXQsZSksUW0obix0LGUpKX1mdW5jdGlvbiBsVShuLHQpe2xldCBlPXVvLnRleHRFbmQsaT11by5rZXk9UW0obix0LGUpO3JldHVybiBlPT09aT8tMTooaT11by5rZXlFbmQ9ZnVuY3Rpb24obix0LGUpe2xldCBpO2Zvcig7dDxlJiYoNDU9PT0oaT1uLmNoYXJDb2RlQXQodCkpfHw5NT09PWl8fCgtMzMmaSk+PTY1JiYoLTMzJmkpPD05MHx8aT49NDgmJmk8PTU3KTspdCsrO3JldHVybiB0fShuLGksZSksaT1JSChuLGksZSksaT11by52YWx1ZT1RbShuLGksZSksaT11by52YWx1ZUVuZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9LTEscj0tMSxvPS0xLHM9dCxhPXM7Zm9yKDtzPGU7KXtsZXQgbD1uLmNoYXJDb2RlQXQocysrKTtpZig1OT09PWwpcmV0dXJuIGE7MzQ9PT1sfHwzOT09PWw/YT1zPUFIKG4sbCxzLGUpOnQ9PT1zLTQmJjg1PT09byYmODI9PT1yJiY3Nj09PWkmJjQwPT09bD9hPXM9QUgobiw0MSxzLGUpOmw+MzImJihhPXMpLG89cixyPWksaT0tMzMmbH1yZXR1cm4gYX0obixpLGUpLElIKG4saSxlKSl9ZnVuY3Rpb24gY1Uobil7dW8ua2V5PTAsdW8ua2V5RW5kPTAsdW8udmFsdWU9MCx1by52YWx1ZUVuZD0wLHVvLnRleHRFbmQ9bi5sZW5ndGh9ZnVuY3Rpb24gUW0obix0LGUpe2Zvcig7dDxlJiZuLmNoYXJDb2RlQXQodCk8PTMyOyl0Kys7cmV0dXJuIHR9ZnVuY3Rpb24gSUgobix0LGUsaSl7cmV0dXJuKHQ9UW0obix0LGUpKTxlJiZ0KyssdH1mdW5jdGlvbiBBSChuLHQsZSxpKXtsZXQgcj0tMSxvPWU7Zm9yKDtvPGk7KXtsZXQgcz1uLmNoYXJDb2RlQXQobysrKTtpZihzPT10JiY5MiE9PXIpcmV0dXJuIG87cj05Mj09cyYmOTI9PT1yPzA6c310aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gVHQobix0LGUpe3JldHVybiBDbChuLHQsZSwhMSksVHR9ZnVuY3Rpb24gbnQobix0KXtyZXR1cm4gQ2wobix0LG51bGwsITApLG50fWZ1bmN0aW9uIEZhKG4pe01sKHBVLGhsZSxuLCExKX1mdW5jdGlvbiBobGUobix0KXtmb3IobGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIGNVKG4pLGxVKG4sUW0obiwwLHVvLnRleHRFbmQpKX0odCk7ZT49MDtlPWxVKHQsZSkpcFUobixzVSh0KSxjbGUodCkpfWZ1bmN0aW9uIEFzKG4pe01sKHhsZSxiYyxuLCEwKX1mdW5jdGlvbiBiYyhuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gY1UobiksYVUobixRbShuLDAsdW8udGV4dEVuZCkpfSh0KTtlPj0wO2U9YVUodCxlKSlzYShuLHNVKHQpLCEwKX1mdW5jdGlvbiBDbChuLHQsZSxpKXtsZXQgcj1aZSgpLG89RWkoKSxzPW9kKDIpO28uZmlyc3RVcGRhdGVQYXNzJiZ1VShvLG4scyxpKSx0IT09SG4mJlVvKHIscyx0KSYmZlUobyxvLmRhdGFbc3MoKV0scixyW29pXSxuLHJbcysxXT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1ufHwiIj09PW58fCgic3RyaW5nIj09dHlwZW9mIHQ/bis9dDoib2JqZWN0Ij09dHlwZW9mIG4mJihuPXBvKERzKG4pKSkpLG59KHQsZSksaSxzKX1mdW5jdGlvbiBNbChuLHQsZSxpKXtsZXQgcj1FaSgpLG89b2QoMik7ci5maXJzdFVwZGF0ZVBhc3MmJnVVKHIsbnVsbCxvLGkpO2xldCBzPVplKCk7aWYoZSE9PUhuJiZVbyhzLG8sZSkpe2xldCBhPXIuZGF0YVtzcygpXTtpZihtVShhLGkpJiYhZFUocixvKSl7bGV0IGw9aT9hLmNsYXNzZXNXaXRob3V0SG9zdDphLnN0eWxlc1dpdGhvdXRIb3N0O251bGwhPT1sJiYoZT1BUihsLGV8fCIiKSksZ1AocixhLHMsZSxpKX1lbHNlIWZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSl7cj09PUhuJiYocj1WaSk7bGV0IGw9MCxjPTAsZD0wPHIubGVuZ3RoP3JbMF06bnVsbCx1PTA8by5sZW5ndGg/b1swXTpudWxsO2Zvcig7bnVsbCE9PWR8fG51bGwhPT11Oyl7bGV0IGIscD1sPHIubGVuZ3RoP3JbbCsxXTp2b2lkIDAsZj1jPG8ubGVuZ3RoP29bYysxXTp2b2lkIDAsbT1udWxsO2Q9PT11PyhsKz0yLGMrPTIscCE9PWYmJihtPXUsYj1mKSk6bnVsbD09PXV8fG51bGwhPT1kJiZkPHU/KGwrPTIsbT1kKTooYys9MixtPXUsYj1mKSxudWxsIT09bSYmZlUobix0LGUsaSxtLGIscyxhKSxkPWw8ci5sZW5ndGg/cltsXTpudWxsLHU9YzxvLmxlbmd0aD9vW2NdOm51bGx9fShyLGEscyxzW29pXSxzW28rMV0sc1tvKzFdPWZ1bmN0aW9uKG4sdCxlKXtpZihudWxsPT1lfHwiIj09PWUpcmV0dXJuIFZpO2xldCBpPVtdLHI9RHMoZSk7aWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyluKGkscltvXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHIpZm9yKGxldCBvIGluIHIpci5oYXNPd25Qcm9wZXJ0eShvKSYmbihpLG8scltvXSk7ZWxzZSJzdHJpbmciPT10eXBlb2YgciYmdChpLHIpO3JldHVybiBpfShuLHQsZSksaSxvKX19ZnVuY3Rpb24gZFUobix0KXtyZXR1cm4gdD49bi5leHBhbmRvU3RhcnRJbmRleH1mdW5jdGlvbiB1VShuLHQsZSxpKXtsZXQgcj1uLmRhdGE7aWYobnVsbD09PXJbZSsxXSl7bGV0IG89cltzcygpXSxzPWRVKG4sZSk7bVUobyxpKSYmbnVsbD09PXQmJiFzJiYodD0hMSksdD1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1YUChuKSxvPWk/dC5yZXNpZHVhbENsYXNzZXM6dC5yZXNpZHVhbFN0eWxlcztpZihudWxsPT09cikwPT09KGk/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncykmJihlPVFfKGU9eVIobnVsbCxuLHQsZSxpKSx0LmF0dHJzLGkpLG89bnVsbCk7ZWxzZXtsZXQgcz10LmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2lmKC0xPT09c3x8bltzXSE9PXIpaWYoZT15UihyLG4sdCxlLGkpLG51bGw9PT1vKXtsZXQgbD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9ZT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzO2lmKDAhPT1YbShpKSlyZXR1cm4gbltXcChpKV19KG4sdCxpKTt2b2lkIDAhPT1sJiZBcnJheS5pc0FycmF5KGwpJiYobD15UihudWxsLG4sdCxsWzFdLGkpLGw9UV8obCx0LmF0dHJzLGkpLGZ1bmN0aW9uKG4sdCxlLGkpe25bV3AoZT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzKV09aX0obix0LGksbCkpfWVsc2Ugbz1mdW5jdGlvbihuLHQsZSl7bGV0IGkscj10LmRpcmVjdGl2ZUVuZDtmb3IobGV0IG89MSt0LmRpcmVjdGl2ZVN0eWxpbmdMYXN0O288cjtvKyspaT1RXyhpLG5bb10uaG9zdEF0dHJzLGUpO3JldHVybiBRXyhpLHQuYXR0cnMsZSl9KG4sdCxpKX1yZXR1cm4gdm9pZCAwIT09byYmKGk/dC5yZXNpZHVhbENsYXNzZXM9bzp0LnJlc2lkdWFsU3R5bGVzPW8pLGV9KHIsbyx0LGkpLGZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgcz1vP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MsYT1XcChzKSxsPVhtKHMpO25baV09ZTtsZXQgZCxjPSExO2lmKEFycmF5LmlzQXJyYXkoZSk/KGQ9ZVsxXSwobnVsbD09PWR8fHNiKGUsZCk+MCkmJihjPSEwKSk6ZD1lLHIpaWYoMCE9PWwpe2xldCBwPVdwKG5bYSsxXSk7bltpKzFdPVVDKHAsYSksMCE9PXAmJihuW3ArMV09dlIobltwKzFdLGkpKSxuW2ErMV09ZnVuY3Rpb24obix0KXtyZXR1cm4gMTMxMDcxJm58dDw8MTd9KG5bYSsxXSxpKX1lbHNlIG5baSsxXT1VQyhhLDApLDAhPT1hJiYoblthKzFdPXZSKG5bYSsxXSxpKSksYT1pO2Vsc2UgbltpKzFdPVVDKGwsMCksMD09PWE/YT1pOm5bbCsxXT12UihuW2wrMV0saSksbD1pO2MmJihuW2krMV09X1AobltpKzFdKSksREgobixkLGksITApLERIKG4sZCxpLCExKSxmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPXI/bi5yZXNpZHVhbENsYXNzZXM6bi5yZXNpZHVhbFN0eWxlcztudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIHQmJnNiKG8sdCk+PTAmJihlW2krMV09YlAoZVtpKzFdKSl9KHQsZCxuLGksbykscz1VQyhhLGwpLG8/dC5jbGFzc0JpbmRpbmdzPXM6dC5zdHlsZUJpbmRpbmdzPXN9KHIsbyx0LGUscyxpKX19ZnVuY3Rpb24geVIobix0LGUsaSxyKXtsZXQgbz1udWxsLHM9ZS5kaXJlY3RpdmVFbmQsYT1lLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2ZvcigtMT09PWE/YT1lLmRpcmVjdGl2ZVN0YXJ0OmErKzthPHMmJihvPXRbYV0saT1RXyhpLG8uaG9zdEF0dHJzLHIpLG8hPT1uKTspYSsrO3JldHVybiBudWxsIT09biYmKGUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q9YSksaX1mdW5jdGlvbiBRXyhuLHQsZSl7bGV0IGk9ZT8xOjIscj0tMTtpZihudWxsIT09dClmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7bGV0IHM9dFtvXTsibnVtYmVyIj09dHlwZW9mIHM/cj1zOnI9PT1pJiYoQXJyYXkuaXNBcnJheShuKXx8KG49dm9pZCAwPT09bj9bXTpbIiIsbl0pLHNhKG4scywhIWV8fHRbKytvXSkpfXJldHVybiB2b2lkIDA9PT1uP251bGw6bn1mdW5jdGlvbiBwVShuLHQsZSl7c2Eobix0LERzKGUpKX1mdW5jdGlvbiB4bGUobix0LGUpe2xldCBpPVN0cmluZyh0KTsiIiE9PWkmJiFpLmluY2x1ZGVzKCIgIikmJnNhKG4saSxlKX1mdW5jdGlvbiBmVShuLHQsZSxpLHIsbyxzLGEpe2lmKCEoMyZ0LnR5cGUpKXJldHVybjtsZXQgbD1uLmRhdGEsYz1sW2ErMV0sZD1mdW5jdGlvbihuKXtyZXR1cm4gMT09KDEmbil9KGMpP1JIKGwsdCxlLHIsWG0oYykscyk6dm9pZCAwO2dNKGQpfHwoZ00obyl8fGZ1bmN0aW9uKG4pe3JldHVybiAyPT0oMiZuKX0oYykmJihvPVJIKGwsbnVsbCxlLHIsYSxzKSksZnVuY3Rpb24obix0LGUsaSxyKXtpZih0KXI/bi5hZGRDbGFzcyhlLGkpOm4ucmVtb3ZlQ2xhc3MoZSxpKTtlbHNle2xldCBvPS0xPT09aS5pbmRleE9mKCItIik/dm9pZCAwOkFhLkRhc2hDYXNlO251bGw9PXI/bi5yZW1vdmVTdHlsZShlLGksbyk6KCJzdHJpbmciPT10eXBlb2YgciYmci5lbmRzV2l0aCgiIWltcG9ydGFudCIpJiYocj1yLnNsaWNlKDAsLTEwKSxvfD1BYS5JbXBvcnRhbnQpLG4uc2V0U3R5bGUoZSxpLHIsbykpfX0oaSxzLElNKHNzKCksZSkscixvKSl9ZnVuY3Rpb24gUkgobix0LGUsaSxyLG8pe2xldCBhLHM9bnVsbD09PXQ7Zm9yKDtyPjA7KXtsZXQgbD1uW3JdLGM9QXJyYXkuaXNBcnJheShsKSxkPWM/bFsxXTpsLHU9bnVsbD09PWQscD1lW3IrMV07cD09PUhuJiYocD11P1ZpOnZvaWQgMCk7bGV0IGY9dT9wUihwLGkpOmQ9PT1pP3A6dm9pZCAwO2lmKGMmJiFnTShmKSYmKGY9cFIobCxpKSksZ00oZikmJihhPWYscykpcmV0dXJuIGE7bGV0IG09bltyKzFdO3I9cz9XcChtKTpYbShtKX1pZihudWxsIT09dCl7bGV0IGw9bz90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO251bGwhPWwmJihhPXBSKGwsaSkpfXJldHVybiBhfWZ1bmN0aW9uIGdNKG4pe3JldHVybiB2b2lkIDAhPT1ufWZ1bmN0aW9uIG1VKG4sdCl7cmV0dXJuIDAhPShuLmZsYWdzJih0Pzg6MTYpKX1mdW5jdGlvbiBUKG4sdD0iIil7bGV0IGU9WmUoKSxpPUVpKCkscj1uK1dyLG89aS5maXJzdENyZWF0ZVBhc3M/b2goaSxyLDEsdCxudWxsKTppLmRhdGFbcl0scz1lW3JdPXNPKGVbb2ldLHQpO09NKGksZSxzLG8pLGRjKG8sITEpfWZ1bmN0aW9uIGJ0KG4pe3JldHVybiBIZSgiIixuLCIiKSxidH1mdW5jdGlvbiBIZShuLHQsZSl7bGV0IGk9WmUoKSxyPWFoKGksbix0LGUpO3JldHVybiByIT09SG4mJmxkKGksc3MoKSxyKSxIZX1mdW5jdGlvbiBsdShuLHQsZSxpLHIpe2xldCBvPVplKCkscz1saChvLG4sdCxlLGkscik7cmV0dXJuIHMhPT1IbiYmbGQobyxzcygpLHMpLGx1fWZ1bmN0aW9uIGpNKG4sdCxlLGkscixvLHMpe2xldCBhPVplKCksbD1jaChhLG4sdCxlLGkscixvLHMpO3JldHVybiBsIT09SG4mJmxkKGEsc3MoKSxsKSxqTX1mdW5jdGlvbiBtYihuLHQsZSl7TWwoc2EsYmMsYWgoWmUoKSxuLHQsZSksITApfWZ1bmN0aW9uIGpvKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBVbyhpLGVoKCksdCkmJmFhKEVpKCksa3IoKSxpLG4sdCxpW29pXSxlLCEwKSxqb31mdW5jdGlvbiBHTShuLHQsZSl7bGV0IGk9WmUoKTtpZihVbyhpLGVoKCksdCkpe2xldCBvPUVpKCkscz1rcigpO2FhKG8scyxpLG4sdCxCeihYUChvLmRhdGEpLHMsaSksZSwhMCl9cmV0dXJuIEdNfXZhciBPcD12b2lkIDAsVWxlPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0sT3BdLFtbIkFNIiwiUE0iXSxPcCxPcF0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sT3AsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLE9wLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsT3AsInsxfSAnYXQnIHswfSIsT3BdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24obil7bGV0IGU9TWF0aC5mbG9vcihNYXRoLmFicyhuKSksaT1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PWk/MTo1fV0seFI9e307ZnVuY3Rpb24gUnMobil7bGV0IHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obiksZT1QSCh0KTtpZihlKXJldHVybiBlO2xldCBpPXQuc3BsaXQoIi0iKVswXTtpZihlPVBIKGkpLGUpcmV0dXJuIGU7aWYoImVuIj09PWkpcmV0dXJuIFVsZTt0aHJvdyBuZXcgeXQoNzAxLCExKX1mdW5jdGlvbiBQSChuKXtyZXR1cm4gbiBpbiB4Unx8KHhSW25dPVVyLm5nJiZVci5uZy5jb21tb24mJlVyLm5nLmNvbW1vbi5sb2NhbGVzJiZVci5uZy5jb21tb24ubG9jYWxlc1tuXSkseFJbbl19dmFyIGdyPSgoKT0+e3JldHVybihuPWdyfHwoZ3I9e30pKVtuLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbltuLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLG5bbi5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLG5bbi5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixuW24uRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixuW24uTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLG5bbi5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixuW24uRXJhcz03XT0iRXJhcyIsbltuLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbltuLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixuW24uRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLG5bbi5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsbltuLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLG5bbi5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbltuLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixuW24uQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixuW24uQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbltuLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbltuLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixuW24uRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsbltuLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixuW24uRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixncjt2YXIgbn0pKCksR2xlPVsiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiXTt2YXIgX009ImVuLVVTIixSVT17bWFya2VyOiJlbGVtZW50In0sUFU9e21hcmtlcjoiSUNVIn0sZ2w9KCgpPT57cmV0dXJuKG49Z2x8fChnbD17fSkpW24uU0hJRlQ9Ml09IlNISUZUIixuW24uQVBQRU5EX0VBR0VSTFk9MV09IkFQUEVORF9FQUdFUkxZIixuW24uQ09NTUVOVD0yXT0iQ09NTUVOVCIsZ2w7dmFyIG59KSgpLE9VPV9NO2Z1bmN0aW9uIGtVKG4sdCxlKXtsZXQgaT10Lmluc2VydEJlZm9yZUluZGV4LHI9QXJyYXkuaXNBcnJheShpKT9pWzBdOmk7cmV0dXJuIG51bGw9PT1yP1g1KG4sMCxlKTpSYShlW3JdKX1mdW5jdGlvbiBGVShuLHQsZSxpLHIpe2xldCBvPXQuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShvKSl7bGV0IHM9aSxhPW51bGw7aWYoMyZ0LnR5cGV8fChhPXMscz1yKSxudWxsIT09cyYmLTE9PT10LmNvbXBvbmVudE9mZnNldClmb3IobGV0IGw9MTtsPG8ubGVuZ3RoO2wrKylVcChuLHMsZVtvW2xdXSxhLCExKX19ZnVuY3Rpb24gTlUobix0KXtpZihuLnB1c2godCksbi5sZW5ndGg+MSlmb3IobGV0IGU9bi5sZW5ndGgtMjtlPj0wO2UtLSl7bGV0IGk9bltlXTtMVShpKXx8UWxlKGksdCkmJm51bGw9PT1abGUoaSkmJktsZShpLHQuaW5kZXgpfX1mdW5jdGlvbiBMVShuKXtyZXR1cm4hKDY0Jm4udHlwZSl9ZnVuY3Rpb24gUWxlKG4sdCl7cmV0dXJuIExVKHQpfHxuLmluZGV4PnQuaW5kZXh9ZnVuY3Rpb24gWmxlKG4pe2xldCB0PW4uaW5zZXJ0QmVmb3JlSW5kZXg7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dFswXTp0fWZ1bmN0aW9uIEtsZShuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7QXJyYXkuaXNBcnJheShlKT9lWzBdPXQ6KFo1KGtVLEZVKSxuLmluc2VydEJlZm9yZUluZGV4PXQpfWZ1bmN0aW9uIEJfKG4sdCl7bGV0IGU9bi5kYXRhW3RdO3JldHVybiBudWxsPT09ZXx8InN0cmluZyI9PXR5cGVvZiBlP251bGw6ZS5oYXNPd25Qcm9wZXJ0eSgiY3VycmVudENhc2VMVmlld0luZGV4Iik/ZTplLnZhbHVlfWZ1bmN0aW9uIGVjZShuLHQsZSl7bGV0IGk9Z08obixlLDY0LG51bGwsbnVsbCk7cmV0dXJuIE5VKHQsaSksaX1mdW5jdGlvbiBXTShuLHQpe2xldCBlPXRbbi5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO3JldHVybiBudWxsPT09ZT9lOmU8MD9+ZTplfWZ1bmN0aW9uIHRjZShuKXtyZXR1cm4gbj4+PjE3fWZ1bmN0aW9uIG5jZShuKXtyZXR1cm4oMTMxMDcwJm4pPj4+MX12YXIgWl89MCxWXz0wO2Z1bmN0aW9uIEJVKG4sdCxlLGkpe2xldCBzLHI9ZVtvaV0sbz1udWxsO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKXtsZXQgbD10W2FdO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7bGV0IGM9dFsrK2FdO251bGw9PT1lW2NdJiYoZVtjXT1zTyhyLGwpKX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgbClzd2l0Y2goMSZsKXtjYXNlIDA6bGV0IGQsdSxjPXRjZShsKTtpZihudWxsPT09byYmKG89YyxzPVBNKHIsaSkpLGM9PT1vPyhkPWksdT1zKTooZD1udWxsLHU9UmEoZVtjXSkpLG51bGwhPT11KXtsZXQgYj1uY2UobCk7VXAocix1LGVbYl0sZCwhMSk7bGV0IHk9Ql8obixiKTtpZihudWxsIT09eSYmIm9iamVjdCI9PXR5cGVvZiB5KXtsZXQgeD1XTSh5LGUpO251bGwhPT14JiZCVShuLHkuY3JlYXRlW3hdLGUsZVt5LmFuY2hvcklkeF0pfX1icmVhaztjYXNlIDE6bGV0IGY9dFsrK2FdLG09dFsrK2FdO01PKHIsSU0obD4+PjEsZSksbnVsbCxudWxsLGYsbSxudWxsKX1lbHNlIHN3aXRjaChsKXtjYXNlIFBVOmxldCBjPXRbKythXSxkPXRbKythXTtudWxsPT09ZVtkXSYmdWMoZVtkXT1qb2UocixjKSxlKTticmVhaztjYXNlIFJVOmxldCB1PXRbKythXSxwPXRbKythXTtudWxsPT09ZVtwXSYmdWMoZVtwXT1hTyhyLHUsbnVsbCksZSl9fX1mdW5jdGlvbiBWVShuLHQsZSxpLHIpe2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgcz1lW29dLGE9ZVsrK29dO2lmKHMmcil7bGV0IGw9IiI7Zm9yKGxldCBjPW8rMTtjPD1vK2E7YysrKXtsZXQgZD1lW2NdO2lmKCJzdHJpbmciPT10eXBlb2YgZClsKz1kO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBkKWlmKGQ8MClsKz1Vbih0W2ktZF0pO2Vsc2V7bGV0IHU9ZD4+PjI7c3dpdGNoKDMmZCl7Y2FzZSAxOmxldCBwPWVbKytjXSxmPWVbKytjXSxtPW4uZGF0YVt1XTsic3RyaW5nIj09dHlwZW9mIG0/TU8odFtvaV0sdFt1XSxudWxsLG0scCxsLGYpOmFhKG4sbSx0LHAsbCx0W29pXSxmLCExKTticmVhaztjYXNlIDA6bGV0IGI9dFt1XTtudWxsIT09YiYmejUodFtvaV0sYixsKTticmVhaztjYXNlIDI6YWNlKG4sQl8obix1KSx0LGwpO2JyZWFrO2Nhc2UgMzpPSChuLEJfKG4sdSksaSx0KX19fX1lbHNle2xldCBsPWVbbysxXTtpZihsPjAmJjM9PSgzJmwpKXtsZXQgZD1CXyhuLGw+Pj4yKTt0W2QuY3VycmVudENhc2VMVmlld0luZGV4XTwwJiZPSChuLGQsaSx0KX19bys9YX19ZnVuY3Rpb24gT0gobix0LGUsaSl7bGV0IHI9aVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF07aWYobnVsbCE9PXIpe2xldCBvPVpfO3I8MCYmKHI9aVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF09fnIsbz0tMSksVlUobixpLHQudXBkYXRlW3JdLGUsbyl9fWZ1bmN0aW9uIGFjZShuLHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuLHQpe2xldCBlPW4uY2FzZXMuaW5kZXhPZih0KTtpZigtMT09PWUpc3dpdGNoKG4udHlwZSl7Y2FzZSAxOntsZXQgaT1mdW5jdGlvbihuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiBScyhuKVtnci5QbHVyYWxDYXNlXX0odCkocGFyc2VJbnQobiwxMCkpLGk9R2xlW2VdO3JldHVybiB2b2lkIDAhPT1pP2k6Im90aGVyIn0odCxPVSk7ZT1uLmNhc2VzLmluZGV4T2YoaSksLTE9PT1lJiYib3RoZXIiIT09aSYmKGU9bi5jYXNlcy5pbmRleE9mKCJvdGhlciIpKTticmVha31jYXNlIDA6ZT1uLmNhc2VzLmluZGV4T2YoIm90aGVyIil9cmV0dXJuLTE9PT1lP251bGw6ZX0odCxpKTtpZihXTSh0LGUpIT09ciYmKEhVKG4sdCxlKSxlW3QuY3VycmVudENhc2VMVmlld0luZGV4XT1udWxsPT09cj9udWxsOn5yLG51bGwhPT1yKSl7bGV0IHM9ZVt0LmFuY2hvcklkeF07cyYmQlUobix0LmNyZWF0ZVtyXSxlLHMpfX1mdW5jdGlvbiBIVShuLHQsZSl7bGV0IGk9V00odCxlKTtpZihudWxsIT09aSl7bGV0IHI9dC5yZW1vdmVbaV07Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107aWYocz4wKXtsZXQgYT1JTShzLGUpO251bGwhPT1hJiZsTyhlW29pXSxhKX1lbHNlIEhVKG4sQl8obix+cyksZSl9fX1mdW5jdGlvbiBjY2UoKXtsZXQgZSxpLG49W10sdD0tMTtmdW5jdGlvbiBvKGEsbCl7dD0wO2xldCBjPVdNKGEsbCk7aT1udWxsIT09Yz9hLnJlbW92ZVtjXTpWaX1mdW5jdGlvbiBzKCl7aWYodDxpLmxlbmd0aCl7bGV0IGE9aVt0KytdO3JldHVybiBhPjA/ZVthXToobi5wdXNoKHQsaSksbyhlW0ZuXS5kYXRhW35hXSxlKSxzKCkpfXJldHVybiAwPT09bi5sZW5ndGg/bnVsbDooaT1uLnBvcCgpLHQ9bi5wb3AoKSxzKCkpfXJldHVybiBmdW5jdGlvbihhLGwpe2ZvcihlPWw7bi5sZW5ndGg7KW4ucG9wKCk7cmV0dXJuIG8oYS52YWx1ZSxsKSxzfX12YXIgYk09L1x1ZmZmZChcZCspOj9cZCpcdWZmZmQvZ2ksZGNlPS8oe1xzKlx1ZmZmZFxkKzo/XGQqXHVmZmZkXHMqLFxzKlxTezZ9XHMqLFtcc1xTXSp9KS9naSx1Y2U9L1x1ZmZmZChcZCspXHVmZmZkLyx6VT0vXlxzKihcdWZmZmRcZCs6P1xkKlx1ZmZmZClccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sSF89Ilx1ZmZmZCIscGNlPS9cdWZmZmRcLz9cKihcZCs6XGQrKVx1ZmZmZC9naSxmY2U9L1x1ZmZmZChcLz9bIypdXGQrKTo/XGQqXHVmZmZkL2dpLG1jZT0vXHVFNTAwL2c7ZnVuY3Rpb24gVVUobix0LGUsaSxyLG8scyl7bGV0IGE9dWIobixpLDEsbnVsbCksbD1hPDxnbC5TSElGVCxjPXFfKCk7dD09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9Z2wuQVBQRU5EX0VBR0VSTFkpLHMmJihsfD1nbC5DT01NRU5ULGZ1bmN0aW9uKG4pe3ZvaWQgMD09PWpSJiYoalI9bigpKX0oY2NlKSksci5wdXNoKGwsbnVsbD09PW8/IiI6byk7bGV0IGQ9Z08obixhLHM/MzI6MSxudWxsPT09bz8iIjpvLG51bGwpO05VKGUsZCk7bGV0IHU9ZC5pbmRleDtyZXR1cm4gZGMoZCwhMSksbnVsbCE9PWMmJnQhPT1jJiZmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PWU/KFo1KGtVLEZVKSxlPW4uaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsdF0pOihmdW5jdGlvbihuLHQsZSl7MSE9biYmUUgoIkV4cGVjdGluZyBhcnJheSBoZXJlIixuLCEwLCI9PSIpfShBcnJheS5pc0FycmF5KGUpKSxlLnB1c2godCkpfShjLHUpLGR9ZnVuY3Rpb24gX2NlKG4sdCxlLGkscixvLHMpe2xldCBhPXMubWF0Y2goYk0pLGw9VVUobix0LGUsbyxpLGE/bnVsbDpzLCExKTthJiZ6XyhyLHMsbC5pbmRleCxudWxsLDAsbnVsbCl9ZnVuY3Rpb24gel8obix0LGUsaSxyLG8pe2xldCBzPW4ubGVuZ3RoLGE9cysxO24ucHVzaChudWxsLG51bGwpO2xldCBsPXMrMixjPXQuc3BsaXQoYk0pLGQ9MDtmb3IobGV0IHU9MDt1PGMubGVuZ3RoO3UrKyl7bGV0IHA9Y1t1XTtpZigxJnUpe2xldCBmPXIrcGFyc2VJbnQocCwxMCk7bi5wdXNoKC0xLWYpLGR8PWpVKGYpfWVsc2UiIiE9PXAmJm4ucHVzaChwKX1yZXR1cm4gbi5wdXNoKGU8PDJ8KGk/MTowKSksaSYmbi5wdXNoKGksbyksbltzXT1kLG5bYV09bi5sZW5ndGgtbCxkfWZ1bmN0aW9uIHZjZShuKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdOyJudW1iZXIiPT10eXBlb2YgaSYmaTwwJiZ0Kyt9cmV0dXJuIHR9ZnVuY3Rpb24galUobil7cmV0dXJuIDE8PE1hdGgubWluKG4sMzEpfWZ1bmN0aW9uIGtIKG4pe2xldCB0LG8sZT0iIixpPTAscj0hMTtmb3IoO251bGwhPT0odD1wY2UuZXhlYyhuKSk7KXI/dFswXT09PWAke0hffS8qJHtvfSR7SF99YCYmKGk9dC5pbmRleCxyPSExKTooZSs9bi5zdWJzdHJpbmcoaSx0LmluZGV4K3RbMF0ubGVuZ3RoKSxvPXRbMV0scj0hMCk7cmV0dXJuIGUrPW4uc2xpY2UoaSksZX1mdW5jdGlvbiBHVShuLHQsZSxpLHIsbyl7bGV0IHM9MCxhPXt0eXBlOnIudHlwZSxjdXJyZW50Q2FzZUxWaWV3SW5kZXg6dWIobix0LDEsbnVsbCksYW5jaG9ySWR4Om8sY2FzZXM6W10sY3JlYXRlOltdLHJlbW92ZTpbXSx1cGRhdGU6W119OyhmdW5jdGlvbihuLHQsZSl7bi5wdXNoKGpVKHQubWFpbkJpbmRpbmcpLDIsLTEtdC5tYWluQmluZGluZyxlPDwyfDIpfSkoZSxyLG8pLGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uLmRhdGFbdF07bnVsbD09PWk/bi5kYXRhW3RdPWU6aS52YWx1ZT1lfShuLG8sYSk7bGV0IGw9ci52YWx1ZXM7Zm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspe2xldCBkPWxbY10sdT1bXTtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl7bGV0IGY9ZFtwXTtpZigic3RyaW5nIiE9dHlwZW9mIGYpe2xldCBtPXUucHVzaChmKS0xO2RbcF09YFx4M2MhLS1cdWZmZmQke219XHVmZmZkLS1ceDNlYH19cz1NY2UobixhLHQsZSxpLHIuY2FzZXNbY10sZC5qb2luKCIiKSx1KXxzfXMmJmZ1bmN0aW9uKG4sdCxlKXtuLnB1c2godCwxLGU8PDJ8Myl9KGUscyxvKX1mdW5jdGlvbiBDY2Uobil7bGV0IHQ9W10sZT1bXSxpPTEscj0wLG89dlAobj1uLnJlcGxhY2UoelUsZnVuY3Rpb24ocyxhLGwpe3JldHVybiBpPSJzZWxlY3QiPT09bD8wOjEscj1wYXJzZUludChhLnNsaWNlKDEpLDEwKSwiIn0pKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoOyl7bGV0IGE9b1tzKytdLnRyaW0oKTsxPT09aSYmKGE9YS5yZXBsYWNlKC9ccyooPzo9KT8oXHcrKVxzKi8sIiQxIikpLGEubGVuZ3RoJiZ0LnB1c2goYSk7bGV0IGw9dlAob1tzKytdKTt0Lmxlbmd0aD5lLmxlbmd0aCYmZS5wdXNoKGwpfXJldHVybnt0eXBlOmksbWFpbkJpbmRpbmc6cixjYXNlczp0LHZhbHVlczplfX1mdW5jdGlvbiB2UChuKXtpZighbilyZXR1cm5bXTtsZXQgbyx0PTAsZT1bXSxpPVtdLHI9L1t7fV0vZztmb3Ioci5sYXN0SW5kZXg9MDtvPXIuZXhlYyhuKTspe2xldCBhPW8uaW5kZXg7aWYoIn0iPT1vWzBdKXtpZihlLnBvcCgpLDA9PWUubGVuZ3RoKXtsZXQgbD1uLnN1YnN0cmluZyh0LGEpO3pVLnRlc3QobCk/aS5wdXNoKENjZShsKSk6aS5wdXNoKGwpLHQ9YSsxfX1lbHNle2lmKDA9PWUubGVuZ3RoKXtsZXQgbD1uLnN1YnN0cmluZyh0LGEpO2kucHVzaChsKSx0PWErMX1lLnB1c2goInsiKX19bGV0IHM9bi5zdWJzdHJpbmcodCk7cmV0dXJuIGkucHVzaChzKSxpfWZ1bmN0aW9uIE1jZShuLHQsZSxpLHIsbyxzLGEpe2xldCBsPVtdLGM9W10sZD1bXTt0LmNhc2VzLnB1c2gobyksdC5jcmVhdGUucHVzaChsKSx0LnJlbW92ZS5wdXNoKGMpLHQudXBkYXRlLnB1c2goZCk7bGV0IHA9Y3ooaXooKSkuZ2V0SW5lcnRCb2R5RWxlbWVudChzKSxmPWlQKHApfHxwO3JldHVybiBmP1dVKG4sdCxlLGksbCxjLGQsZixyLGEsMCk6MH1mdW5jdGlvbiBXVShuLHQsZSxpLHIsbyxzLGEsbCxjLGQpe2xldCB1PTAscD1hLmZpcnN0Q2hpbGQ7Zm9yKDtwOyl7bGV0IGY9dWIobixlLDEsbnVsbCk7c3dpdGNoKHAubm9kZVR5cGUpe2Nhc2UgTm9kZS5FTEVNRU5UX05PREU6bGV0IG09cCxiPW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHRQLmhhc093blByb3BlcnR5KGIpKXtDUihyLFJVLGIsbCxmKSxuLmRhdGFbZl09YjtsZXQgUj1tLmF0dHJpYnV0ZXM7Zm9yKGxldCBBPTA7QTxSLmxlbmd0aDtBKyspe2xldCBWPVIuaXRlbShBKSx0ZT1WLm5hbWUudG9Mb3dlckNhc2UoKTtWLnZhbHVlLm1hdGNoKGJNKT9mei5oYXNPd25Qcm9wZXJ0eSh0ZSkmJnpfKHMsVi52YWx1ZSxmLFYubmFtZSwwLHVPW3RlXT9sYjpudWxsKTpUY2UocixmLFYpfXU9V1Uobix0LGUsaSxyLG8scyxwLGYsYyxkKzEpfHUsRkgobyxmLGQpfWJyZWFrO2Nhc2UgTm9kZS5URVhUX05PREU6bGV0IE09cC50ZXh0Q29udGVudHx8IiIseT1NLm1hdGNoKGJNKTtDUihyLG51bGwseT8iIjpNLGwsZiksRkgobyxmLGQpLHkmJih1PXpfKHMsTSxmLG51bGwsMCxudWxsKXx1KTticmVhaztjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOmxldCB4PXVjZS5leGVjKHAudGV4dENvbnRlbnR8fCIiKTtpZih4KXtsZXQgQT1jW3BhcnNlSW50KHhbMV0sMTApXTtDUihyLFBVLCIiLGwsZiksR1UobixlLGksbCxBLGYpLHdjZShvLGYsZCl9fXA9cC5uZXh0U2libGluZ31yZXR1cm4gdX1mdW5jdGlvbiBGSChuLHQsZSl7MD09PWUmJm4ucHVzaCh0KX1mdW5jdGlvbiB3Y2Uobix0LGUpezA9PT1lJiYobi5wdXNoKH50KSxuLnB1c2godCkpfWZ1bmN0aW9uIENSKG4sdCxlLGkscil7bnVsbCE9PXQmJm4ucHVzaCh0KSxuLnB1c2goZSxyLGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gMHx0PDwxN3xlPDwxfSgwLGkscikpfWZ1bmN0aW9uIFRjZShuLHQsZSl7bi5wdXNoKHQ8PDF8MSxlLm5hbWUsZS52YWx1ZSl9dmFyIE5IPTAsRGNlPS9cWyhcdWZmZmQuKz9cdWZmZmQ/KVxdLyxJY2U9L1xbKFx1ZmZmZC4rP1x1ZmZmZD8pXF18KFx1ZmZmZFwvP1wqXGQrOlxkK1x1ZmZmZCkvZyxBY2U9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxSY2U9L3soW0EtWjAtOV9dKyl9L2csUGNlPS9cdWZmZmRJMThOX0VYUF8oSUNVKF9cZCspPylcdWZmZmQvZyxPY2U9L1wvXCovLGtjZT0vXGQrXDooXGQrKS87ZnVuY3Rpb24gcVUobix0LGU9LTEpe2xldCBpPUVpKCkscj1aZSgpLG89V3IrbixzPWl1KGkuY29uc3RzLHQpLGE9cV8oKTtpLmZpcnN0Q3JlYXRlUGFzcyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPXFfKCksYT1bXSxsPVtdLGM9W1tdXTtyPWZ1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24obil7cmV0dXJuLTE9PT1ufSh0KSlyZXR1cm4ga0gobik7e2xldCBlPW4uaW5kZXhPZihgOiR7dH0ke0hffWApKzIrdC50b1N0cmluZygpLmxlbmd0aCxpPW4uc2VhcmNoKG5ldyBSZWdFeHAoYCR7SF99XFwvXFwqXFxkKzoke3R9JHtIX31gKSk7cmV0dXJuIGtIKG4uc3Vic3RyaW5nKGUsaSkpfX0ocixvKTtsZXQgZD1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKG1jZSwiICIpfShyKS5zcGxpdChmY2UpO2ZvcihsZXQgdT0wO3U8ZC5sZW5ndGg7dSsrKXtsZXQgcD1kW3VdO2lmKDA9PSgxJnUpKXtsZXQgZj12UChwKTtmb3IobGV0IG09MDttPGYubGVuZ3RoO20rKyl7bGV0IGI9ZlttXTtpZigwPT0oMSZtKSkiIiE9PWImJl9jZShuLHMsY1swXSxhLGwsZSxiKTtlbHNle2xldCBNPWI7aWYoIm9iamVjdCIhPXR5cGVvZiBNKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIElDVSBleHByZXNzaW9uIGluICIke3J9IiBtZXNzYWdlLmApO0dVKG4sZSxsLHQsTSxVVShuLHMsY1swXSxlLGEsIiIsITApLmluZGV4KX19fWVsc2V7bGV0IGY9NDc9PT1wLmNoYXJDb2RlQXQoMCksYj0ocC5jaGFyQ29kZUF0KGY/MTowKSxXcitOdW1iZXIucGFyc2VJbnQocC5zdWJzdHJpbmcoZj8yOjEpKSk7aWYoZiljLnNoaWZ0KCksZGMocV8oKSwhMSk7ZWxzZXtsZXQgTT1lY2UobixjWzBdLGIpO2MudW5zaGlmdChbXSksZGMoTSwhMCl9fX1uLmRhdGFbaV09e2NyZWF0ZTphLHVwZGF0ZTpsfX0oaSxudWxsPT09YT8wOmEuaW5kZXgscixvLHMsZSk7bGV0IGw9aS5kYXRhW29dLGQ9VzUoaSxhPT09cltTc10/bnVsbDphLHIpOyhmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uW29pXTtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7bGV0IHM9dFtvKytdLGE9dFtvXSxjPShzJmdsLkFQUEVORF9FQUdFUkxZKT09PWdsLkFQUEVORF9FQUdFUkxZLGQ9cz4+PmdsLlNISUZULHU9bltkXTtudWxsPT09dSYmKHU9bltkXT0ocyZnbC5DT01NRU5UKT09PWdsLkNPTU1FTlQ/ci5jcmVhdGVDb21tZW50KGEpOnNPKHIsYSkpLGMmJm51bGwhPT1lJiZVcChyLGUsdSxpLCExKX19KShyLGwuY3JlYXRlLGQsYSYmOCZhLnR5cGU/clthLmluZGV4XTpudWxsKSxoNSghMCl9ZnVuY3Rpb24gWVUoKXtoNSghMSl9ZnVuY3Rpb24gcU0obix0LGUpe3FVKG4sdCxlKSxZVSgpfWZ1bmN0aW9uIGhiKG4pe3JldHVybiBmdW5jdGlvbihuKXtuJiYoWl98PTE8PE1hdGgubWluKFZfLDMxKSksVl8rK30oVW8oWmUoKSxlaCgpLG4pKSxoYn1mdW5jdGlvbiBZTShuKXshZnVuY3Rpb24obix0LGUpe2lmKFZfPjApe2xldCBpPW4uZGF0YVtlXTtWVShuLHQsQXJyYXkuaXNBcnJheShpKT9pOmkudXBkYXRlLHJkKCktVl8tMSxaXyl9Wl89MCxWXz0wfShFaSgpLFplKCksbitXcil9ZnVuY3Rpb24gWE0obix0PXt9KXtyZXR1cm4gZnVuY3Rpb24obix0PXt9KXtsZXQgZT1uO2lmKERjZS50ZXN0KG4pKXtsZXQgaT17fSxyPVtOSF07ZT1lLnJlcGxhY2UoSWNlLChvLHMsYSk9PntsZXQgbD1zfHxhLGM9aVtsXXx8W107aWYoYy5sZW5ndGh8fChsLnNwbGl0KCJ8IikuZm9yRWFjaChiPT57bGV0IE09Yi5tYXRjaChrY2UpLHk9TT9wYXJzZUludChNWzFdLDEwKTpOSCx4PU9jZS50ZXN0KGIpO2MucHVzaChbeSx4LGJdKX0pLGlbbF09YyksIWMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIHBsYWNlaG9sZGVyIC0gJHtsfWApO2xldCBkPXJbci5sZW5ndGgtMV0sdT0wO2ZvcihsZXQgYj0wO2I8Yy5sZW5ndGg7YisrKWlmKGNbYl1bMF09PT1kKXt1PWI7YnJlYWt9bGV0W3AsZixtXT1jW3VdO3JldHVybiBmP3IucG9wKCk6ZCE9PXAmJnIucHVzaChwKSxjLnNwbGljZSh1LDEpLG19KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoJiYoZT1lLnJlcGxhY2UoQWNlLChpLHIsbyxzLGEsbCk9PnQuaGFzT3duUHJvcGVydHkobyk/YCR7cn0ke3Rbb119JHtsfWA6aSksZT1lLnJlcGxhY2UoUmNlLChpLHIpPT50Lmhhc093blByb3BlcnR5KHIpP3Rbcl06aSksZT1lLnJlcGxhY2UoUGNlLChpLHIpPT57aWYodC5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG89dFtyXTtpZighby5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBpMThuIHBvc3Rwcm9jZXNzOiB1bm1hdGNoZWQgSUNVIC0gJHtpfSB3aXRoIGtleTogJHtyfWApO3JldHVybiBvLnNoaWZ0KCl9cmV0dXJuIGl9KSksZX0obix0KX1mdW5jdGlvbiB5UChuLHQsZSxpLHIpe2lmKG49UmkobiksQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl5UChuW29dLHQsZSxpLHIpO2Vsc2V7bGV0IG89RWkoKSxzPVplKCksYT1ZbShuKT9uOlJpKG4ucHJvdmlkZSksbD15eihuKSxjPVBvKCksZD0xMDQ4NTc1JmMucHJvdmlkZXJJbmRleGVzLHU9Yy5kaXJlY3RpdmVTdGFydCxwPWMucHJvdmlkZXJJbmRleGVzPj4yMDtpZihZbShuKXx8IW4ubXVsdGkpe2xldCBmPW5ldyBIcChsLHIsQyksbT13UihhLHQscj9kOmQrcCx1KTstMT09PW0/KEhSKGxNKGMscyksbyxhKSxNUihvLG4sdC5sZW5ndGgpLHQucHVzaChhKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaChmKSxzLnB1c2goZikpOihlW21dPWYsc1ttXT1mKX1lbHNle2xldCBmPXdSKGEsdCxkK3AsdSksbT13UihhLHQsZCxkK3ApLE09bT49MCYmZVttXTtpZihyJiYhTXx8IXImJiEoZj49MCYmZVtmXSkpe0hSKGxNKGMscyksbyxhKTtsZXQgeT1mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPW5ldyBIcChuLGUsQyk7cmV0dXJuIG8ubXVsdGk9W10sby5pbmRleD10LG8uY29tcG9uZW50UHJvdmlkZXJzPTAsWFUobyxyLGkmJiFlKSxvfShyP1ZjZTpCY2UsZS5sZW5ndGgscixpLGwpOyFyJiZNJiYoZVttXS5wcm92aWRlckZhY3Rvcnk9eSksTVIobyxuLHQubGVuZ3RoLDApLHQucHVzaChhKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaCh5KSxzLnB1c2goeSl9ZWxzZSBNUihvLG4sZj4tMT9mOm0sWFUoZVtyP206Zl0sbCwhciYmaSkpOyFyJiZpJiZNJiZlW21dLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gTVIobix0LGUsaSl7bGV0IHI9WW0odCksbz1mdW5jdGlvbihuKXtyZXR1cm4hIW4udXNlQ2xhc3N9KHQpO2lmKHJ8fG8pe2xldCBsPShvP1JpKHQudXNlQ2xhc3MpOnQpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihsKXtsZXQgYz1uLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKTtpZighciYmdC5tdWx0aSl7bGV0IGQ9Yy5pbmRleE9mKGUpOy0xPT09ZD9jLnB1c2goZSxbaSxsXSk6Y1tkKzFdLnB1c2goaSxsKX1lbHNlIGMucHVzaChlLGwpfX19ZnVuY3Rpb24gWFUobix0LGUpe3JldHVybiBlJiZuLmNvbXBvbmVudFByb3ZpZGVycysrLG4ubXVsdGkucHVzaCh0KS0xfWZ1bmN0aW9uIHdSKG4sdCxlLGkpe2ZvcihsZXQgcj1lO3I8aTtyKyspaWYodFtyXT09PW4pcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gQmNlKG4sdCxlLGkpe3JldHVybiB4UCh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBWY2Uobix0LGUsaSl7bGV0IG8scj10aGlzLm11bHRpO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtsZXQgcz10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsYT16cChlLGVbRm5dLHRoaXMucHJvdmlkZXJGYWN0b3J5LmluZGV4LGkpO289YS5zbGljZSgwLHMpLHhQKHIsbyk7Zm9yKGxldCBsPXM7bDxhLmxlbmd0aDtsKyspby5wdXNoKGFbbF0pfWVsc2Ugbz1bXSx4UChyLG8pO3JldHVybiBvfWZ1bmN0aW9uIHhQKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdC5wdXNoKCgwLG5bZV0pKCkpO3JldHVybiB0fWZ1bmN0aW9uIFF0KG4sdD1bXSl7cmV0dXJuIGU9PntlLnByb3ZpZGVyc1Jlc29sdmVyPShpLHIpPT5mdW5jdGlvbihuLHQsZSl7bGV0IGk9RWkoKTtpZihpLmZpcnN0Q3JlYXRlUGFzcyl7bGV0IHI9dmwobik7eVAoZSxpLmRhdGEsaS5ibHVlcHJpbnQsciwhMCkseVAodCxpLmRhdGEsaS5ibHVlcHJpbnQsciwhMSl9fShpLHI/cihuKTpuLHQpfX12YXIgcnU9Y2xhc3N7fSxDUD1jbGFzc3t9LE1QPWNsYXNzIGV4dGVuZHMgcnV7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10sdGhpcy5kZXN0cm95Q2JzPVtdLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBtTSh0aGlzKTtsZXQgaT1HbSh0KTt0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVhDKGkuYm9vdHN0cmFwKSx0aGlzLl9yM0luamVjdG9yPVR6KHQsZSxbe3Byb3ZpZGU6cnUsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6Zm8sdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxwbyh0KSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpLHRoaXMuX3IzSW5qZWN0b3IucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCksdGhpcy5pbnN0YW5jZT10aGlzLl9yM0luamVjdG9yLmdldCh0KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5fcjNJbmplY3Rvcn1kZXN0cm95KCl7bGV0IHQ9dGhpcy5fcjNJbmplY3RvcjshdC5kZXN0cm95ZWQmJnQuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGU9PmUoKSksdGhpcy5kZXN0cm95Q2JzPW51bGx9b25EZXN0cm95KHQpe3RoaXMuZGVzdHJveUNicy5wdXNoKHQpfX0sd1A9Y2xhc3MgZXh0ZW5kcyBDUHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT10fWNyZWF0ZSh0KXtyZXR1cm4gbmV3IE1QKHRoaXMubW9kdWxlVHlwZSx0KX19LFNQPWNsYXNzIGV4dGVuZHMgcnV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IG1NKHRoaXMpLHRoaXMuaW5zdGFuY2U9bnVsbDtsZXQgcj1uZXcgdU0oWy4uLnQse3Byb3ZpZGU6cnUsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6Zm8sdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxlfHxoTygpLGksbmV3IFNldChbImVudmlyb25tZW50Il0pKTt0aGlzLmluamVjdG9yPXIsci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKX1kZXN0cm95KCl7dGhpcy5pbmplY3Rvci5kZXN0cm95KCl9b25EZXN0cm95KHQpe3RoaXMuaW5qZWN0b3Iub25EZXN0cm95KHQpfX0sVWNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5faW5qZWN0b3I9ZSx0aGlzLmNhY2hlZEluamVjdG9ycz1uZXcgTWFwfWdldE9yQ3JlYXRlU3RhbmRhbG9uZUluamVjdG9yKGUpe2lmKCFlLnN0YW5kYWxvbmUpcmV0dXJuIG51bGw7aWYoIXRoaXMuY2FjaGVkSW5qZWN0b3JzLmhhcyhlLmlkKSl7bGV0IGk9X3ooMCxlLnR5cGUpLHI9aS5sZW5ndGg+MD9mdW5jdGlvbihuLHQsZT1udWxsKXtyZXR1cm4gbmV3IFNQKG4sdCxlKS5pbmplY3Rvcn0oW2ldLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7ZS50eXBlLm5hbWV9XWApOm51bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGUuaWQscil9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChlLmlkKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IobGV0IGUgb2YgdGhpcy5jYWNoZWRJbmplY3RvcnMudmFsdWVzKCkpbnVsbCE9PWUmJmUuZGVzdHJveSgpfWZpbmFsbHl7dGhpcy5jYWNoZWRJbmplY3RvcnMuY2xlYXIoKX19fXJldHVybiBuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4scHJvdmlkZWRJbjoiZW52aXJvbm1lbnQiLGZhY3Rvcnk6KCk9Pm5ldyBuKGsocGMpKX0pLG59KSgpO2Z1bmN0aW9uIElPKG4pe24uZ2V0U3RhbmRhbG9uZUluamVjdG9yPXQ9PnQuZ2V0KFVjZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3Iobil9ZnVuY3Rpb24gY3Uobix0LGUpe2xldCBpPW9zKCkrbixyPVplKCk7cmV0dXJuIHJbaV09PT1Ibj9fYyhyLGksZT90LmNhbGwoZSk6dCgpKTpwYihyLGkpfWZ1bmN0aW9uIEluKG4sdCxlLGkpe3JldHVybiBRVShaZSgpLG9zKCksbix0LGUsaSl9ZnVuY3Rpb24gcXIobix0LGUsaSxyKXtyZXR1cm4gWlUoWmUoKSxvcygpLG4sdCxlLGkscil9ZnVuY3Rpb24gZ2Iobix0LGUsaSxyLG8pe3JldHVybiBLVShaZSgpLG9zKCksbix0LGUsaSxyLG8pfWZ1bmN0aW9uIEFPKG4sdCxlLGkscixvLHMpe3JldHVybiBKVShaZSgpLG9zKCksbix0LGUsaSxyLG8scyl9ZnVuY3Rpb24gUk8obix0LGUsaSxyLG8scyxhKXtsZXQgbD1vcygpK24sYz1aZSgpLGQ9UGEoYyxsLGUsaSxyLG8pO3JldHVybiBVbyhjLGwrNCxzKXx8ZD9fYyhjLGwrNSxhP3QuY2FsbChhLGUsaSxyLG8scyk6dChlLGkscixvLHMpKTpwYihjLGwrNSl9ZnVuY3Rpb24gX2Iobix0KXtsZXQgZT1uW3RdO3JldHVybiBlPT09SG4/dm9pZCAwOmV9ZnVuY3Rpb24gUVUobix0LGUsaSxyLG8pe2xldCBzPXQrZTtyZXR1cm4gVW8obixzLHIpP19jKG4scysxLG8/aS5jYWxsKG8scik6aShyKSk6X2IobixzKzEpfWZ1bmN0aW9uIFpVKG4sdCxlLGkscixvLHMpe2xldCBhPXQrZTtyZXR1cm4gR3AobixhLHIsbyk/X2MobixhKzIscz9pLmNhbGwocyxyLG8pOmkocixvKSk6X2IobixhKzIpfWZ1bmN0aW9uIEtVKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9dCtlO3JldHVybiBITShuLGwscixvLHMpP19jKG4sbCszLGE/aS5jYWxsKGEscixvLHMpOmkocixvLHMpKTpfYihuLGwrMyl9ZnVuY3Rpb24gSlUobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQrZTtyZXR1cm4gUGEobixjLHIsbyxzLGEpP19jKG4sYys0LGw/aS5jYWxsKGwscixvLHMsYSk6aShyLG8scyxhKSk6X2IobixjKzQpfWZ1bmN0aW9uICRVKG4sdCxlLGkscixvKXtsZXQgcz10K2UsYT0hMTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylVbyhuLHMrKyxyW2xdKSYmKGE9ITApO3JldHVybiBhP19jKG4scyxpLmFwcGx5KG8scikpOl9iKG4scyl9ZnVuY3Rpb24gaihuLHQpe2xldCBpLGU9RWkoKSxyPW4rV3I7ZS5maXJzdENyZWF0ZVBhc3M/KGk9ZnVuY3Rpb24obix0KXtpZih0KWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgaT10W2VdO2lmKG49PT1pLm5hbWUpcmV0dXJuIGl9fSh0LGUucGlwZVJlZ2lzdHJ5KSxlLmRhdGFbcl09aSxpLm9uRGVzdHJveSYmKGUuZGVzdHJveUhvb2tzPz8oZS5kZXN0cm95SG9va3M9W10pKS5wdXNoKHIsaS5vbkRlc3Ryb3kpKTppPWUuZGF0YVtyXTtsZXQgbz1pLmZhY3Rvcnl8fChpLmZhY3Rvcnk9QnAoaS50eXBlKSkscz1FYShDKTt0cnl7bGV0IGE9YU0oITEpLGw9bygpO3JldHVybiBhTShhKSxmdW5jdGlvbihuLHQsZSxpKXtlPj1uLmRhdGEubGVuZ3RoJiYobi5kYXRhW2VdPW51bGwsbi5ibHVlcHJpbnRbZV09bnVsbCksdFtlXT1pfShlLFplKCkscixsKSxsfWZpbmFsbHl7RWEocyl9fWZ1bmN0aW9uIFcobix0LGUpe2xldCBpPW4rV3Iscj1aZSgpLG89JG0ocixpKTtyZXR1cm4gYmIocixpKT9RVShyLG9zKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtKGUpfWZ1bmN0aW9uIHFwKG4sdCxlLGkpe2xldCByPW4rV3Isbz1aZSgpLHM9JG0obyxyKTtyZXR1cm4gYmIobyxyKT9aVShvLG9zKCksdCxzLnRyYW5zZm9ybSxlLGkscyk6cy50cmFuc2Zvcm0oZSxpKX1mdW5jdGlvbiBQTyhuLHQsZSxpLHIpe2xldCBvPW4rV3Iscz1aZSgpLGE9JG0ocyxvKTtyZXR1cm4gYmIocyxvKT9LVShzLG9zKCksdCxhLnRyYW5zZm9ybSxlLGkscixhKTphLnRyYW5zZm9ybShlLGkscil9ZnVuY3Rpb24gYmIobix0KXtyZXR1cm4gbltGbl0uZGF0YVt0XS5wdXJlfWZ1bmN0aW9uIFNSKG4pe3JldHVybiB0PT57c2V0VGltZW91dChuLHZvaWQgMCx0KX19dmFyIEY9Y2xhc3MgZXh0ZW5kcyBJZXtjb25zdHJ1Y3Rvcih0PSExKXtzdXBlcigpLHRoaXMuX19pc0FzeW5jPXR9ZW1pdCh0KXtzdXBlci5uZXh0KHQpfXN1YnNjcmliZSh0LGUsaSl7bGV0IHI9dCxvPWV8fCgoKT0+bnVsbCkscz1pO2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCl7bGV0IGw9dDtyPWwubmV4dD8uYmluZChsKSxvPWwuZXJyb3I/LmJpbmQobCkscz1sLmNvbXBsZXRlPy5iaW5kKGwpfXRoaXMuX19pc0FzeW5jJiYobz1TUihvKSxyJiYocj1TUihyKSkscyYmKHM9U1IocykpKTtsZXQgYT1zdXBlci5zdWJzY3JpYmUoe25leHQ6cixlcnJvcjpvLGNvbXBsZXRlOnN9KTtyZXR1cm4gdCBpbnN0YW5jZW9mIE1uJiZ0LmFkZChhKSxhfX07ZnVuY3Rpb24gWmNlKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbU3ltYm9sLml0ZXJhdG9yXSgpfXZhciBPYT1jbGFzc3tnZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzfHwodGhpcy5fY2hhbmdlcz1uZXcgRil9Y29uc3RydWN0b3IodD0hMSl7dGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk9dCx0aGlzLmRpcnR5PSEwLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5fY2hhbmdlc0RldGVjdGVkPSExLHRoaXMuX2NoYW5nZXM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuZmlyc3Q9dm9pZCAwLHRoaXMubGFzdD12b2lkIDA7bGV0IGU9T2EucHJvdG90eXBlO2VbU3ltYm9sLml0ZXJhdG9yXXx8KGVbU3ltYm9sLml0ZXJhdG9yXT1aY2UpfWdldCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0XX1tYXAodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfWZpbHRlcih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9ZmluZCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfXJlZHVjZSh0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfWZvckVhY2godCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfXNvbWUodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9cmVzZXQodCxlKXtsZXQgaT10aGlzO2kuZGlydHk9ITE7bGV0IHI9JGQodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24obix0LGUpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCByPW5baV0sbz10W2ldO2lmKGUmJihyPWUociksbz1lKG8pKSxvIT09cilyZXR1cm4hMX1yZXR1cm4hMH0oaS5fcmVzdWx0cyxyLGUpKSYmKGkuX3Jlc3VsdHM9cixpLmxlbmd0aD1yLmxlbmd0aCxpLmxhc3Q9clt0aGlzLmxlbmd0aC0xXSxpLmZpcnN0PXJbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3RoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX0sU2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189JGNlLG59KSgpLEtjZT1TaSxKY2U9Y2xhc3MgZXh0ZW5kcyBLY2V7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1pfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUpe2xldCBpPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50VmlldyxyPUxNKHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsaSx0LDE2LG51bGwsaS5kZWNsVE5vZGUsbnVsbCxudWxsLG51bGwsbnVsbCxlfHxudWxsKTtyW3JiXT10aGlzLl9kZWNsYXJhdGlvbkxWaWV3W3RoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5pbmRleF07bGV0IHM9dGhpcy5fZGVjbGFyYXRpb25MVmlld1tjY107cmV0dXJuIG51bGwhPT1zJiYocltjY109cy5jcmVhdGVFbWJlZGRlZFZpZXcoaSkpLF9PKGkscix0KSxuZXcganAocil9fTtmdW5jdGlvbiAkY2UoKXtyZXR1cm4gUU0oUG8oKSxaZSgpKX1mdW5jdGlvbiBRTShuLHQpe3JldHVybiA0Jm4udHlwZT9uZXcgSmNlKHQsbixyaChuLHQpKTpudWxsfXZhciBzaT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz1lZGUsbn0pKCk7ZnVuY3Rpb24gZWRlKCl7cmV0dXJuIHRqKFBvKCksWmUoKSl9dmFyIHRkZT1zaSxlaj1jbGFzcyBleHRlbmRzIHRkZXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPXQsdGhpcy5faG9zdFROb2RlPWUsdGhpcy5faG9zdExWaWV3PWl9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gcmgodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBMcCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtsZXQgdD1KUCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KTtpZih3NSh0KSl7bGV0IGU9c00odCx0aGlzLl9ob3N0TFZpZXcpLGk9b00odCk7cmV0dXJuIG5ldyBMcChlW0ZuXS5kYXRhW2krOF0sZSl9cmV0dXJuIG5ldyBMcChudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtsZXQgZT1MSCh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWUmJmVbdF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC13c31jcmVhdGVFbWJlZGRlZFZpZXcodCxlLGkpe2xldCByLG87Im51bWJlciI9PXR5cGVvZiBpP3I9aTpudWxsIT1pJiYocj1pLmluZGV4LG89aS5pbmplY3Rvcik7bGV0IHM9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30sbyk7cmV0dXJuIHRoaXMuaW5zZXJ0KHMsciksc31jcmVhdGVDb21wb25lbnQodCxlLGkscixvKXtsZXQgYSxzPXQmJiFSXyh0KTtpZihzKWE9ZTtlbHNle2xldCB1PWV8fHt9O2E9dS5pbmRleCxpPXUuaW5qZWN0b3Iscj11LnByb2plY3RhYmxlTm9kZXMsbz11LmVudmlyb25tZW50SW5qZWN0b3J8fHUubmdNb2R1bGVSZWZ9bGV0IGw9cz90Om5ldyBoTShEYSh0KSksYz1pfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFvJiZudWxsPT1sLm5nTW9kdWxlKXtsZXQgcD0ocz9jOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChwYyxudWxsKTtwJiYobz1wKX1sZXQgZD1sLmNyZWF0ZShjLHIsdm9pZCAwLG8pO3JldHVybiB0aGlzLmluc2VydChkLmhvc3RWaWV3LGEpLGR9aW5zZXJ0KHQsZSl7bGV0IGk9dC5fbFZpZXcscj1pW0ZuXTtpZihuZChpW0dyXSkpe2xldCBkPXRoaXMuaW5kZXhPZih0KTtpZigtMSE9PWQpdGhpcy5kZXRhY2goZCk7ZWxzZXtsZXQgdT1pW0dyXSxwPW5ldyBlaih1LHVbU3NdLHVbR3JdKTtwLmRldGFjaChwLmluZGV4T2YodCkpfX1sZXQgbz10aGlzLl9hZGp1c3RJbmRleChlKSxzPXRoaXMuX2xDb250YWluZXI7IWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPXdzK2ksbz1lLmxlbmd0aDtpPjAmJihlW3ItMV1bX2xdPXQpLGk8by13cz8odFtfbF09ZVtyXSxrNShlLHdzK2ksdCkpOihlLnB1c2godCksdFtfbF09bnVsbCksdFtHcl09ZTtsZXQgcz10W3JiXTtudWxsIT09cyYmZSE9PXMmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bltXbV07dFtibF0hPT10W0dyXVtHcl1bYmxdJiYobltyNV09ITApLG51bGw9PT1lP25bV21dPVt0XTplLnB1c2godCl9KHMsdCk7bGV0IGE9dFtjY107bnVsbCE9PWEmJmEuaW5zZXJ0VmlldyhuKSx0W3JpXXw9NjR9KHIsaSxzLG8pO2xldCBhPXFSKG8scyksbD1pW29pXSxjPVBNKGwsc1tqUF0pO3JldHVybiBudWxsIT09YyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2lbc3VdPXIsaVtTc109dCxhYihuLGksZSwxLHIsbyl9KHIsc1tTc10sbCxpLGMsYSksdC5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKSxrNShFUihzKSxvLHQpLHR9bW92ZSh0LGUpe3JldHVybiB0aGlzLmluc2VydCh0LGUpfWluZGV4T2YodCl7bGV0IGU9TEgodGhpcy5fbENvbnRhaW5lcik7cmV0dXJuIG51bGwhPT1lP2UuaW5kZXhPZih0KTotMX1yZW1vdmUodCl7bGV0IGU9dGhpcy5fYWRqdXN0SW5kZXgodCwtMSksaT1HUih0aGlzLl9sQ29udGFpbmVyLGUpO2kmJihjTShFUih0aGlzLl9sQ29udGFpbmVyKSxlKSxqNShpW0ZuXSxpKSl9ZGV0YWNoKHQpe2xldCBlPXRoaXMuX2FkanVzdEluZGV4KHQsLTEpLGk9R1IodGhpcy5fbENvbnRhaW5lcixlKTtyZXR1cm4gaSYmbnVsbCE9Y00oRVIodGhpcy5fbENvbnRhaW5lciksZSk/bmV3IGpwKGkpOm51bGx9X2FkanVzdEluZGV4KHQsZT0wKXtyZXR1cm4gdD8/dGhpcy5sZW5ndGgrZX19O2Z1bmN0aW9uIExIKG4pe3JldHVybiBuW2lNXX1mdW5jdGlvbiBFUihuKXtyZXR1cm4gbltpTV18fChuW2lNXT1bXSl9ZnVuY3Rpb24gdGoobix0KXtsZXQgZSxpPXRbbi5pbmRleF07aWYobmQoaSkpZT1pO2Vsc2V7bGV0IHI7aWYoOCZuLnR5cGUpcj1SYShpKTtlbHNle2xldCBvPXRbb2ldO3I9by5jcmVhdGVDb21tZW50KCIiKTtsZXQgcz1vYShuLHQpO1VwKG8sUE0obyxzKSxyLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4ubmV4dFNpYmxpbmcodCl9KG8scyksITEpfXRbbi5pbmRleF09ZT1reihpLHQscixuKSxWTSh0LGUpfXJldHVybiBuZXcgZWooZSxuLHQpfXZhciBLXz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnF1ZXJ5TGlzdD10LHRoaXMubWF0Y2hlcz1udWxsfWNsb25lKCl7cmV0dXJuIG5ldyBLXyh0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpfX0sSl89Y2xhc3N7Y29uc3RydWN0b3IodD1bXSl7dGhpcy5xdWVyaWVzPXR9Y3JlYXRlRW1iZWRkZWRWaWV3KHQpe2xldCBlPXQucXVlcmllcztpZihudWxsIT09ZSl7bGV0IGk9bnVsbCE9PXQuY29udGVudFF1ZXJpZXM/dC5jb250ZW50UXVlcmllc1swXTplLmxlbmd0aCxyPVtdO2ZvcihsZXQgbz0wO288aTtvKyspe2xldCBzPWUuZ2V0QnlJbmRleChvKTtyLnB1c2godGhpcy5xdWVyaWVzW3MuaW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyBKXyhyKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KHQpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl9ZGV0YWNoVmlldyh0KXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspbnVsbCE9PW9qKHQsZSkubWF0Y2hlcyYmdGhpcy5xdWVyaWVzW2VdLnNldERpcnR5KCl9fSx2TT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT1udWxsKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMuZmxhZ3M9ZSx0aGlzLnJlYWQ9aX19LCRfPWNsYXNze2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWVsZW1lbnRTdGFydCh0LGUpe2ZvcihsZXQgaT0wO2k8dGhpcy5xdWVyaWVzLmxlbmd0aDtpKyspdGhpcy5xdWVyaWVzW2ldLmVsZW1lbnRTdGFydCh0LGUpfWVsZW1lbnRFbmQodCl7Zm9yKGxldCBlPTA7ZTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2UrKyl0aGlzLnF1ZXJpZXNbZV0uZWxlbWVudEVuZCh0KX1lbWJlZGRlZFRWaWV3KHQpe2xldCBlPW51bGw7Zm9yKGxldCBpPTA7aTx0aGlzLmxlbmd0aDtpKyspe2xldCByPW51bGwhPT1lP2UubGVuZ3RoOjAsbz10aGlzLmdldEJ5SW5kZXgoaSkuZW1iZWRkZWRUVmlldyh0LHIpO28mJihvLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9aSxudWxsIT09ZT9lLnB1c2gobyk6ZT1bb10pfXJldHVybiBudWxsIT09ZT9uZXcgJF8oZSk6bnVsbH10ZW1wbGF0ZSh0LGUpe2ZvcihsZXQgaT0wO2k8dGhpcy5xdWVyaWVzLmxlbmd0aDtpKyspdGhpcy5xdWVyaWVzW2ldLnRlbXBsYXRlKHQsZSl9Z2V0QnlJbmRleCh0KXtyZXR1cm4gdGhpcy5xdWVyaWVzW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5xdWVyaWVzLmxlbmd0aH10cmFjayh0KXt0aGlzLnF1ZXJpZXMucHVzaCh0KX19LGViPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0tMSl7dGhpcy5tZXRhZGF0YT10LHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PWV9ZWxlbWVudFN0YXJ0KHQsZSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGUpJiZ0aGlzLm1hdGNoVE5vZGUodCxlKX1lbGVtZW50RW5kKHQpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09dC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1wbGF0ZSh0LGUpe3RoaXMuZWxlbWVudFN0YXJ0KHQsZSl9ZW1iZWRkZWRUVmlldyh0LGUpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUodCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtdC5pbmRleCxlKSxuZXcgZWIodGhpcy5tZXRhZGF0YSkpOm51bGx9aXNBcHBseWluZ1RvTm9kZSh0KXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2xldCBlPXRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4LGk9dC5wYXJlbnQ7Zm9yKDtudWxsIT09aSYmOCZpLnR5cGUmJmkuaW5kZXghPT1lOylpPWkucGFyZW50O3JldHVybiBlPT09KG51bGwhPT1pP2kuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKHQsZSl7bGV0IGk9dGhpcy5tZXRhZGF0YS5wcmVkaWNhdGU7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aVtyXTt0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsbmRlKGUsbykpLHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxXQyhlLHQsbywhMSwhMSkpfWVsc2UgaT09PVNpPzQmZS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxXQyhlLHQsaSwhMSwhMSkpfW1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsaSl7aWYobnVsbCE9PWkpe2xldCByPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09cilpZihyPT09TWV8fHI9PT1zaXx8cj09PVNpJiY0JmUudHlwZSl0aGlzLmFkZE1hdGNoKGUuaW5kZXgsLTIpO2Vsc2V7bGV0IG89V0MoZSx0LHIsITEsITEpO251bGwhPT1vJiZ0aGlzLmFkZE1hdGNoKGUuaW5kZXgsbyl9ZWxzZSB0aGlzLmFkZE1hdGNoKGUuaW5kZXgsaSl9fWFkZE1hdGNoKHQsZSl7bnVsbD09PXRoaXMubWF0Y2hlcz90aGlzLm1hdGNoZXM9W3QsZV06dGhpcy5tYXRjaGVzLnB1c2godCxlKX19O2Z1bmN0aW9uIG5kZShuLHQpe2xldCBlPW4ubG9jYWxOYW1lcztpZihudWxsIT09ZSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpaWYoZVtpXT09PXQpcmV0dXJuIGVbaSsxXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiByZGUobix0LGUsaSl7cmV0dXJuLTE9PT1lP2Z1bmN0aW9uKG4sdCl7cmV0dXJuIDExJm4udHlwZT9yaChuLHQpOjQmbi50eXBlP1FNKG4sdCk6bnVsbH0odCxuKTotMj09PWU/ZnVuY3Rpb24obix0LGUpe3JldHVybiBlPT09TWU/cmgodCxuKTplPT09U2k/UU0odCxuKTplPT09c2k/dGoodCxuKTp2b2lkIDB9KG4sdCxpKTp6cChuLG5bRm5dLGUsdCl9ZnVuY3Rpb24gbmoobix0LGUsaSl7bGV0IHI9dFtjY10ucXVlcmllc1tpXTtpZihudWxsPT09ci5tYXRjaGVzKXtsZXQgbz1uLmRhdGEscz1lLm1hdGNoZXMsYT1bXTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTIpe2xldCBjPXNbbF07YS5wdXNoKGM8MD9udWxsOnJkZSh0LG9bY10sc1tsKzFdLGUubWV0YWRhdGEucmVhZCkpfXIubWF0Y2hlcz1hfXJldHVybiByLm1hdGNoZXN9ZnVuY3Rpb24gVFAobix0LGUsaSl7bGV0IHI9bi5xdWVyaWVzLmdldEJ5SW5kZXgoZSksbz1yLm1hdGNoZXM7aWYobnVsbCE9PW8pe2xldCBzPW5qKG4sdCxyLGUpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7bGV0IGw9b1thXTtpZihsPjApaS5wdXNoKHNbYS8yXSk7ZWxzZXtsZXQgYz1vW2ErMV0sZD10Wy1sXTtmb3IobGV0IHU9d3M7dTxkLmxlbmd0aDt1Kyspe2xldCBwPWRbdV07cFtyYl09PT1wW0dyXSYmVFAocFtGbl0scCxjLGkpfWlmKG51bGwhPT1kW1dtXSl7bGV0IHU9ZFtXbV07Zm9yKGxldCBwPTA7cDx1Lmxlbmd0aDtwKyspe2xldCBmPXVbcF07VFAoZltGbl0sZixjLGkpfX19fX1yZXR1cm4gaX1mdW5jdGlvbiBTZShuKXtsZXQgdD1aZSgpLGU9RWkoKSxpPWc1KCk7UVAoaSsxKTtsZXQgcj1vaihlLGkpO2lmKG4uZGlydHkmJmZ1bmN0aW9uKG4pe3JldHVybiA0PT0oNCZuW3JpXSl9KHQpPT09KDI9PSgyJnIubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PXIubWF0Y2hlcyluLnJlc2V0KFtdKTtlbHNle2xldCBvPXIuY3Jvc3Nlc05nVGVtcGxhdGU/VFAoZSx0LGksW10pOm5qKGUsdCxyLGkpO24ucmVzZXQobyxCc2UpLG4ubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gR2Uobix0LGUpe2xldCBpPUVpKCk7aS5maXJzdENyZWF0ZVBhc3MmJihyaihpLG5ldyB2TShuLHQsZSksLTEpLDI9PSgyJnQpJiYoaS5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLGlqKGksWmUoKSx0KX1mdW5jdGlvbiBUaShuLHQsZSxpKXtsZXQgcj1FaSgpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtsZXQgbz1QbygpO3JqKHIsbmV3IHZNKHQsZSxpKSxvLmluZGV4KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXN8fChuLmNvbnRlbnRRdWVyaWVzPVtdKTt0IT09KGUubGVuZ3RoP2VbZS5sZW5ndGgtMV06LTEpJiZlLnB1c2gobi5xdWVyaWVzLmxlbmd0aC0xLHQpfShyLG4pLDI9PSgyJmUpJiYoci5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9aWoocixaZSgpLGUpfWZ1bmN0aW9uIEVlKCl7cmV0dXJuIG49WmUoKSx0PWc1KCksbltjY10ucXVlcmllc1t0XS5xdWVyeUxpc3Q7dmFyIG4sdH1mdW5jdGlvbiBpaihuLHQsZSl7bGV0IGk9bmV3IE9hKDQ9PSg0JmUpKTtSeihuLHQsaSxpLmRlc3Ryb3kpLG51bGw9PT10W2NjXSYmKHRbY2NdPW5ldyBKXyksdFtjY10ucXVlcmllcy5wdXNoKG5ldyBLXyhpKSl9ZnVuY3Rpb24gcmoobix0LGUpe251bGw9PT1uLnF1ZXJpZXMmJihuLnF1ZXJpZXM9bmV3ICRfKSxuLnF1ZXJpZXMudHJhY2sobmV3IGViKHQsZSkpfWZ1bmN0aW9uIG9qKG4sdCl7cmV0dXJuIG4ucXVlcmllcy5nZXRCeUluZGV4KHQpfWZ1bmN0aW9uIFd0KG4sdCl7cmV0dXJuIFFNKG4sdCl9dmFyIGV1PXsiXHUwMjc1XHUwMjc1YXR0cmlidXRlIjpCZSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiBqeihuLHQsZSxpLHIsbyl7bGV0IHM9WmUoKSxhPWFoKHMsdCxlLGkpO3JldHVybiBhIT09SG4mJmdjKGtyKCkscyxuLGEscixvKSxqen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24gR3oobix0LGUsaSxyLG8scyxhKXtsZXQgbD1aZSgpLGM9bGgobCx0LGUsaSxyLG8pO3JldHVybiBjIT09SG4mJmdjKGtyKCksbCxuLGMscyxhKSxHen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyI6ZnVuY3Rpb24gV3oobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IGQ9WmUoKSx1PWNoKGQsdCxlLGkscixvLHMsYSk7cmV0dXJuIHUhPT1IbiYmZ2Moa3IoKSxkLG4sdSxsLGMpLFd6fSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBxeihuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSl7bGV0IHA9WmUoKSxmPWRoKHAsdCxlLGkscixvLHMsYSxsLGMpO3JldHVybiBmIT09SG4mJmdjKGtyKCkscCxuLGYsZCx1KSxxen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24gWXoobix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmKXtsZXQgbT1aZSgpLGI9dWgobSx0LGUsaSxyLG8scyxhLGwsYyxkLHUpO3JldHVybiBiIT09SG4mJmdjKGtyKCksbSxuLGIscCxmKSxZen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiI6ZnVuY3Rpb24gWHoobix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYil7bGV0IE09WmUoKSx5PXBoKE0sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZik7cmV0dXJuIHkhPT1IbiYmZ2Moa3IoKSxNLG4seSxtLGIpLFh6fSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBReihuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0seSl7bGV0IHg9WmUoKSxSPWZoKHgsdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIpO3JldHVybiBSIT09SG4mJmdjKGtyKCkseCxuLFIsTSx5KSxRen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gWnoobix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYixNLHkseCxSKXtsZXQgQT1aZSgpLFY9bWgoQSx0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYixNLHkpO3JldHVybiBWIT09SG4mJmdjKGtyKCksQSxuLFYseCxSKSxaen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViI6ZnVuY3Rpb24gS3oobix0LGUsaSl7bGV0IHI9WmUoKSxvPXNoKHIsdCk7cmV0dXJuIG8hPT1IbiYmZ2Moa3IoKSxyLG4sbyxlLGkpLEt6fSwiXHUwMjc1XHUwMjc1ZGVmaW5lQ29tcG9uZW50IjpPLCJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiOndlLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjp1ZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlUsIlx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIjpHLCJcdTAyNzVcdTAyNzVkZWZpbmVQaXBlIjpLbSwiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0IjpDLCJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5IjpYbiwiXHUwMjc1XHUwMjc1aW5qZWN0IjprLCJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiOnlvLCJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSI6SXMsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpKSCwiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiOld0LCJcdTAyNzVcdTAyNzVyZXNldFZpZXciOlEsIlx1MDI3NVx1MDI3NUhvc3REaXJlY3RpdmVzRmVhdHVyZSI6ZnVuY3Rpb24obil7cmV0dXJuIHQ9Pnt0LmZpbmRIb3N0RGlyZWN0aXZlRGVmcz16eix0Lmhvc3REaXJlY3RpdmVzPShBcnJheS5pc0FycmF5KG4pP246bigpKS5tYXAoZT0+ImZ1bmN0aW9uIj09dHlwZW9mIGU/e2RpcmVjdGl2ZTpSaShlKSxpbnB1dHM6JGMsb3V0cHV0czokY306e2RpcmVjdGl2ZTpSaShlLmRpcmVjdGl2ZSksaW5wdXRzOlNIKGUuaW5wdXRzKSxvdXRwdXRzOlNIKGUub3V0cHV0cyl9KX19LCJcdTAyNzVcdTAyNzVOZ09uQ2hhbmdlc0ZlYXR1cmUiOkd0LCJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIjpRdCwiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbihuKXtsZXQgZSx0PUh6KG4udHlwZSk7ZT12bChuKT90Llx1MDI3NWNtcDp0Llx1MDI3NWRpcjtsZXQgaT1uO2ZvcihsZXQgciBvZiBXYWUpaVtyXT1lW3JdO2lmKHZsKGUpKWZvcihsZXQgciBvZiBxYWUpaVtyXT1lW3JdfSwiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjpLZSwiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiOklPLCJcdTAyNzVcdTAyNzVuZXh0Q29udGV4dCI6dywiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCI6T28sIlx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCI6ZnVuY3Rpb24oKXtqbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT1jNX0sIlx1MDI3NVx1MDI3NW5hbWVzcGFjZVNWRyI6Tm4sIlx1MDI3NVx1MDI3NWVuYWJsZUJpbmRpbmdzIjpmdW5jdGlvbigpe2puLmJpbmRpbmdzRW5hYmxlZD0hMH0sIlx1MDI3NVx1MDI3NWRpc2FibGVCaW5kaW5ncyI6ZnVuY3Rpb24oKXtqbi5iaW5kaW5nc0VuYWJsZWQ9ITF9LCJcdTAyNzVcdTAyNzVlbGVtZW50U3RhcnQiOmgsIlx1MDI3NVx1MDI3NWVsZW1lbnRFbmQiOmcsIlx1MDI3NVx1MDI3NWVsZW1lbnQiOlAsIlx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJTdGFydCI6T3QsIlx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJFbmQiOmt0LCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyIjpsaSwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMCI6Y3UsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjEiOkluLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24yIjpxciwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMyI6Z2IsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjQiOkFPLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb241IjpSTywiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe2xldCBjPW9zKCkrbixkPVplKCksdT1QYShkLGMsZSxpLHIsbyk7cmV0dXJuIEdwKGQsYys0LHMsYSl8fHU/X2MoZCxjKzYsbD90LmNhbGwobCxlLGkscixvLHMsYSk6dChlLGkscixvLHMsYSkpOnBiKGQsYys2KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjciOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCBkPW9zKCkrbix1PVplKCkscD1QYSh1LGQsZSxpLHIsbyk7cmV0dXJuIEhNKHUsZCs0LHMsYSxsKXx8cD9fYyh1LGQrNyxjP3QuY2FsbChjLGUsaSxyLG8scyxhLGwpOnQoZSxpLHIsbyxzLGEsbCkpOnBiKHUsZCs3KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjgiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsZCl7bGV0IHU9b3MoKStuLHA9WmUoKSxmPVBhKHAsdSxlLGkscixvKTtyZXR1cm4gUGEocCx1KzQscyxhLGwsYyl8fGY/X2MocCx1KzgsZD90LmNhbGwoZCxlLGkscixvLHMsYSxsLGMpOnQoZSxpLHIsbyxzLGEsbCxjKSk6cGIocCx1KzgpfSwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uViI6ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuICRVKFplKCksb3MoKSxuLHQsZSxpKX0sIlx1MDI3NVx1MDI3NWdldEN1cnJlbnRWaWV3IjpnZSwiXHUwMjc1XHUwMjc1cmVzdG9yZVZpZXciOlgsIlx1MDI3NVx1MDI3NWxpc3RlbmVyIjpJLCJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uIjp6dCwiXHUwMjc1XHUwMjc1c3ludGhldGljSG9zdFByb3BlcnR5IjpHTSwiXHUwMjc1XHUwMjc1c3ludGhldGljSG9zdExpc3RlbmVyIjp6TSwiXHUwMjc1XHUwMjc1cGlwZUJpbmQxIjpXLCJcdTAyNzVcdTAyNzVwaXBlQmluZDIiOnFwLCJcdTAyNzVcdTAyNzVwaXBlQmluZDMiOlBPLCJcdTAyNzVcdTAyNzVwaXBlQmluZDQiOmZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgcz1uK1dyLGE9WmUoKSxsPSRtKGEscyk7cmV0dXJuIGJiKGEscyk/SlUoYSxvcygpLHQsbC50cmFuc2Zvcm0sZSxpLHIsbyxsKTpsLnRyYW5zZm9ybShlLGkscixvKX0sIlx1MDI3NVx1MDI3NXBpcGVCaW5kViI6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4rV3Iscj1aZSgpLG89JG0ocixpKTtyZXR1cm4gYmIocixpKT8kVShyLG9zKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtLmFwcGx5KG8sZSl9LCJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uRGVmIjpEbiwiXHUwMjc1XHUwMjc1aG9zdFByb3BlcnR5IjpqbywiXHUwMjc1XHUwMjc1cHJvcGVydHkiOl8sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUiOldpLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMSI6ZmIsIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUyIjpVTSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uICR6KG4sdCxlLGkscixvLHMsYSxsKXtsZXQgYz1aZSgpLGQ9Y2goYyx0LGUsaSxyLG8scyxhKTtyZXR1cm4gZCE9PUhuJiZhYShFaSgpLGtyKCksYyxuLGQsY1tvaV0sbCwhMSksJHp9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNCI6ZnVuY3Rpb24gZVUobix0LGUsaSxyLG8scyxhLGwsYyxkKXtsZXQgdT1aZSgpLHA9ZGgodSx0LGUsaSxyLG8scyxhLGwsYyk7cmV0dXJuIHAhPT1IbiYmYWEoRWkoKSxrcigpLHUsbixwLHVbb2ldLGQsITEpLGVVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIHRVKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHApe2xldCBmPVplKCksbT11aChmLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSk7cmV0dXJuIG0hPT1IbiYmYWEoRWkoKSxrcigpLGYsbixtLGZbb2ldLHAsITEpLHRVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIG5VKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtKXtsZXQgYj1aZSgpLE09cGgoYix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmKTtyZXR1cm4gTSE9PUhuJiZhYShFaSgpLGtyKCksYixuLE0sYltvaV0sbSwhMSksblV9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNyI6ZnVuY3Rpb24gaVUobix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYixNKXtsZXQgeT1aZSgpLHg9ZmgoeSx0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYik7cmV0dXJuIHghPT1IbiYmYWEoRWkoKSxrcigpLHksbix4LHlbb2ldLE0sITEpLGlVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIHJVKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIsTSx5LHgpe2xldCBSPVplKCksQT1taChSLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0seSk7cmV0dXJuIEEhPT1IbiYmYWEoRWkoKSxrcigpLFIsbixBLFJbb2ldLHgsITEpLHJVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIG9VKG4sdCxlKXtsZXQgaT1aZSgpLHI9c2goaSx0KTtyZXR1cm4gciE9PUhuJiZhYShFaSgpLGtyKCksaSxuLHIsaVtvaV0sZSwhMSksb1V9LCJcdTAyNzVcdTAyNzVwaXBlIjpqLCJcdTAyNzVcdTAyNzVxdWVyeVJlZnJlc2giOlNlLCJcdTAyNzVcdTAyNzV2aWV3UXVlcnkiOkdlLCJcdTAyNzVcdTAyNzVsb2FkUXVlcnkiOkVlLCJcdTAyNzVcdTAyNzVjb250ZW50UXVlcnkiOlRpLCJcdTAyNzVcdTAyNzVyZWZlcmVuY2UiOml0LCJcdTAyNzVcdTAyNzVjbGFzc01hcCI6QXMsIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUxIjptYiwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uKG4sdCxlLGkscil7TWwoc2EsYmMsbGgoWmUoKSxuLHQsZSxpLHIpLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUzIjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzKXtNbChzYSxiYyxjaChaZSgpLG4sdCxlLGkscixvLHMpLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU0IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCl7TWwoc2EsYmMsZGgoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsZCl7TWwoc2EsYmMsdWgoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLGQpLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU2IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwKXtNbChzYSxiYyxwaChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHApLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU3IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSl7TWwoc2EsYmMsZmgoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIsTSl7TWwoc2EsYmMsbWgoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0pLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGVWIjpmdW5jdGlvbihuKXtNbChzYSxiYyxzaChaZSgpLG4pLCEwKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwIjpGYSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uKG4sdCxlKXtGYShhaChaZSgpLG4sdCxlKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24obix0LGUsaSxyKXtGYShsaChaZSgpLG4sdCxlLGkscikpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMpe0ZhKGNoKFplKCksbix0LGUsaSxyLG8scykpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtGYShkaChaZSgpLG4sdCxlLGkscixvLHMsYSxsKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyxkKXtGYSh1aChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsZCkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHApe0ZhKHBoKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtKXtGYShmaChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYixNKXtGYShtaChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIsTSkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uKG4pe0ZhKHNoKFplKCksbikpfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wIjpUdCwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiB4VShuLHQsZSxpLHIpe3JldHVybiBDbChuLGFoKFplKCksdCxlLGkpLHIsITEpLHhVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGUyIjpmdW5jdGlvbiBDVShuLHQsZSxpLHIsbyxzKXtyZXR1cm4gQ2wobixsaChaZSgpLHQsZSxpLHIsbykscywhMSksQ1V9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uIE1VKG4sdCxlLGkscixvLHMsYSxsKXtyZXR1cm4gQ2wobixjaChaZSgpLHQsZSxpLHIsbyxzLGEpLGwsITEpLE1VfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiB3VShuLHQsZSxpLHIsbyxzLGEsbCxjLGQpe3JldHVybiBDbChuLGRoKFplKCksdCxlLGkscixvLHMsYSxsLGMpLGQsITEpLHdVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU1IjpmdW5jdGlvbiBTVShuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwKXtyZXR1cm4gQ2wobix1aChaZSgpLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSkscCwhMSksU1V9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIEVVKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtKXtyZXR1cm4gQ2wobixwaChaZSgpLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYpLG0sITEpLEVVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBUVShuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0pe3JldHVybiBDbChuLGZoKFplKCksdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIpLE0sITEpLFRVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU4IjpmdW5jdGlvbiBEVShuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0seSx4KXtyZXR1cm4gQ2wobixtaChaZSgpLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0seSkseCwhMSksRFV9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIElVKG4sdCxlKXtyZXR1cm4gQ2wobixzaChaZSgpLHQpLGUsITEpLElVfSwiXHUwMjc1XHUwMjc1Y2xhc3NQcm9wIjpudCwiXHUwMjc1XHUwMjc1YWR2YW5jZSI6diwiXHUwMjc1XHUwMjc1dGVtcGxhdGUiOlMsIlx1MDI3NVx1MDI3NXRleHQiOlQsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZSI6YnQsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTEiOkhlLCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUyIjpsdSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMyI6ak0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGhVKG4sdCxlLGkscixvLHMsYSxsKXtsZXQgYz1aZSgpLGQ9ZGgoYyxuLHQsZSxpLHIsbyxzLGEsbCk7cmV0dXJuIGQhPT1IbiYmbGQoYyxzcygpLGQpLGhVfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNSI6ZnVuY3Rpb24gZ1Uobix0LGUsaSxyLG8scyxhLGwsYyxkKXtsZXQgdT1aZSgpLHA9dWgodSxuLHQsZSxpLHIsbyxzLGEsbCxjLGQpO3JldHVybiBwIT09SG4mJmxkKHUsc3MoKSxwKSxnVX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIF9VKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHApe2xldCBmPVplKCksbT1waChmLG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHApO3JldHVybiBtIT09SG4mJmxkKGYsc3MoKSxtKSxfVX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIGJVKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtKXtsZXQgYj1aZSgpLE09ZmgoYixuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSk7cmV0dXJuIE0hPT1IbiYmbGQoYixzcygpLE0pLGJVfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlOCI6ZnVuY3Rpb24gdlUobix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYixNKXtsZXQgeT1aZSgpLHg9bWgoeSxuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0pO3JldHVybiB4IT09SG4mJmxkKHksc3MoKSx4KSx2VX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIHlVKG4pe2xldCB0PVplKCksZT1zaCh0LG4pO3JldHVybiBlIT09SG4mJmxkKHQsc3MoKSxlKSx5VX0sIlx1MDI3NVx1MDI3NWkxOG4iOnFNLCJcdTAyNzVcdTAyNzVpMThuQXR0cmlidXRlcyI6ZnVuY3Rpb24obix0KXtsZXQgZT1FaSgpLGk9aXUoZS5jb25zdHMsdCk7IWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1QbygpLmluZGV4LG89W107aWYobi5maXJzdENyZWF0ZVBhc3MmJm51bGw9PT1uLmRhdGFbdF0pe2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9Mil7bGV0IGE9ZVtzXSxsPWVbcysxXTtpZigiIiE9PWwpe2lmKGRjZS50ZXN0KGwpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2x9Ii5gKTt6XyhvLGwscixhLHZjZShvKSxudWxsKX19bi5kYXRhW3RdPW99fShlLG4rV3IsaSl9LCJcdTAyNzVcdTAyNzVpMThuRXhwIjpoYiwiXHUwMjc1XHUwMjc1aTE4blN0YXJ0IjpxVSwiXHUwMjc1XHUwMjc1aTE4bkVuZCI6WVUsIlx1MDI3NVx1MDI3NWkxOG5BcHBseSI6WU0sIlx1MDI3NVx1MDI3NWkxOG5Qb3N0cHJvY2VzcyI6WE0sIlx1MDI3NVx1MDI3NXJlc29sdmVXaW5kb3ciOmZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LCJcdTAyNzVcdTAyNzVyZXNvbHZlRG9jdW1lbnQiOmhjLCJcdTAyNzVcdTAyNzVyZXNvbHZlQm9keSI6ZnVuY3Rpb24obil7cmV0dXJuIG4ub3duZXJEb2N1bWVudC5ib2R5fSwiXHUwMjc1XHUwMjc1c2V0Q29tcG9uZW50U2NvcGUiOmliLCJcdTAyNzVcdTAyNzVzZXROZ01vZHVsZVNjb3BlIjpmdW5jdGlvbihuLHQpe3JldHVybiBvdSgoKT0+e2xldCBlPUdtKG4sITApO2UuZGVjbGFyYXRpb25zPXQuZGVjbGFyYXRpb25zfHxWaSxlLmltcG9ydHM9dC5pbXBvcnRzfHxWaSxlLmV4cG9ydHM9dC5leHBvcnRzfHxWaX0pfSwiXHUwMjc1XHUwMjc1cmVnaXN0ZXJOZ01vZHVsZVR5cGUiOkI1LCJcdTAyNzVcdTAyNzVzYW5pdGl6ZUh0bWwiOmZPLCJcdTAyNzVcdTAyNzVzYW5pdGl6ZVN0eWxlIjpmdW5jdGlvbihuKXtsZXQgdD1kYigpO3JldHVybiB0P3Quc2FuaXRpemUoanIuU1RZTEUsbil8fCIiOnhsKG4sIlN0eWxlIik/RHMobik6VW4obil9LCJcdTAyNzVcdTAyNzVzYW5pdGl6ZVJlc291cmNlVXJsIjpteiwiXHUwMjc1XHUwMjc1c2FuaXRpemVTY3JpcHQiOmZ1bmN0aW9uKG4pe2xldCB0PWRiKCk7aWYodClyZXR1cm4gZkgodC5zYW5pdGl6ZShqci5TQ1JJUFQsbil8fCIiKTtpZih4bChuLCJTY3JpcHQiKSlyZXR1cm4gZkgoRHMobikpO3Rocm93IG5ldyB5dCg5MDUsITEpfSwiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmwiOmthLCJcdTAyNzVcdTAyNzVzYW5pdGl6ZVVybE9yUmVzb3VyY2VVcmwiOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4ic3JjIj09PXQmJigiZW1iZWQiPT09bnx8ImZyYW1lIj09PW58fCJpZnJhbWUiPT09bnx8Im1lZGlhIj09PW58fCJzY3JpcHQiPT09bil8fCJocmVmIj09PXQmJigiYmFzZSI9PT1ufHwibGluayI9PT1uKT9tejprYX0odCxlKShuKX0sIlx1MDI3NVx1MDI3NXRydXN0Q29uc3RhbnRIdG1sIjpmdW5jdGlvbihuKXtyZXR1cm4gaWgoblswXSl9LCJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50UmVzb3VyY2VVcmwiOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdHooKT8uY3JlYXRlU2NyaXB0VVJMKG4pfHxufShuWzBdKX0sIlx1MDI3NVx1MDI3NXZhbGlkYXRlSWZyYW1lQXR0cmlidXRlIjpmdW5jdGlvbihuLHQsZSl7bGV0IGk9WmUoKSxyPWtyKCksbz1vYShyLGkpO2lmKDI9PT1yLnR5cGUmJiJpZnJhbWUiPT09dC50b0xvd2VyQ2FzZSgpKXtsZXQgcz1vO3Rocm93IHMuc3JjPSIiLHMuc3JjZG9jPWloKCIiKSxsTyhpW29pXSxzKSxuZXcgeXQoLTkxMCwhMSl9cmV0dXJuIG59LGZvcndhcmRSZWY6JG4scmVzb2x2ZUZvcndhcmRSZWY6Uml9LFBfPW51bGw7ZnVuY3Rpb24gc2oobil7cmV0dXJuISFHbShuKX12YXIgWkM9W10sVFI9ITE7ZnVuY3Rpb24gYWoobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5ldmVyeShhaik6ISFSaShuKX1mdW5jdGlvbiBoZGUobix0KXtsZXQgZT0kZCh0LmRlY2xhcmF0aW9uc3x8VmkpLGk9Wm0obik7ZS5mb3JFYWNoKHI9Pnsocj1SaShyKSkuaGFzT3duUHJvcGVydHkoU00pP2xqKERhKHIpLGkpOiFyLmhhc093blByb3BlcnR5KEhQKSYmIXIuaGFzT3duUHJvcGVydHkoelApJiYoci5uZ1NlbGVjdG9yU2NvcGU9bil9KX1mdW5jdGlvbiBsaihuLHQpe24uZGlyZWN0aXZlRGVmcz0oKT0+QXJyYXkuZnJvbSh0LmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMpLm1hcChlPT5lLmhhc093blByb3BlcnR5KFNNKT9EYShlKTp0dShlKSkuZmlsdGVyKGU9PiEhZSksbi5waXBlRGVmcz0oKT0+QXJyYXkuZnJvbSh0LmNvbXBpbGF0aW9uLnBpcGVzKS5tYXAoZT0+bnUoZSkpLG4uc2NoZW1hcz10LnNjaGVtYXMsbi50Vmlldz1udWxsfWZ1bmN0aW9uIFptKG4pe2lmKHNqKG4pKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1HbShuLCEwKTtpZihudWxsIT09dC50cmFuc2l0aXZlQ29tcGlsZVNjb3BlcylyZXR1cm4gdC50cmFuc2l0aXZlQ29tcGlsZVNjb3BlcztsZXQgZT17c2NoZW1hczp0LnNjaGVtYXN8fG51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXR9fTtyZXR1cm4gWEModC5pbXBvcnRzKS5mb3JFYWNoKGk9PntsZXQgcj1abShpKTtyLmV4cG9ydGVkLmRpcmVjdGl2ZXMuZm9yRWFjaChvPT5lLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKG8pKSxyLmV4cG9ydGVkLnBpcGVzLmZvckVhY2gobz0+ZS5jb21waWxhdGlvbi5waXBlcy5hZGQobykpfSksWEModC5kZWNsYXJhdGlvbnMpLmZvckVhY2goaT0+e251KGkpP2UuY29tcGlsYXRpb24ucGlwZXMuYWRkKGkpOmUuY29tcGlsYXRpb24uZGlyZWN0aXZlcy5hZGQoaSl9KSxYQyh0LmV4cG9ydHMpLmZvckVhY2goaT0+e2xldCByPWk7aWYoc2oocikpe2xldCBvPVptKHIpO28uZXhwb3J0ZWQuZGlyZWN0aXZlcy5mb3JFYWNoKHM9PntlLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKHMpLGUuZXhwb3J0ZWQuZGlyZWN0aXZlcy5hZGQocyl9KSxvLmV4cG9ydGVkLnBpcGVzLmZvckVhY2gocz0+e2UuY29tcGlsYXRpb24ucGlwZXMuYWRkKHMpLGUuZXhwb3J0ZWQucGlwZXMuYWRkKHMpfSl9ZWxzZSBudShyKT9lLmV4cG9ydGVkLnBpcGVzLmFkZChyKTplLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKHIpfSksdC50cmFuc2l0aXZlQ29tcGlsZVNjb3Blcz1lLGV9KG4pO2lmKGU1KG4pKXtpZihudWxsIT09KERhKG4pfHx0dShuKSkpcmV0dXJue3NjaGVtYXM6bnVsbCxjb21waWxhdGlvbjp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXR9LGV4cG9ydGVkOntkaXJlY3RpdmVzOm5ldyBTZXQoW25dKSxwaXBlczpuZXcgU2V0fX07aWYobnVsbCE9PW51KG4pKXJldHVybntzY2hlbWFzOm51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXQoW25dKX19fXRocm93IG5ldyBFcnJvcihgJHtuLm5hbWV9IGRvZXMgbm90IGhhdmUgYSBtb2R1bGUgZGVmIChcdTAyNzVtb2QgcHJvcGVydHkpYCl9ZnVuY3Rpb24gQkgobil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nTW9kdWxlfShuKT9uLm5nTW9kdWxlOm59dmFyIERSPTA7ZnVuY3Rpb24gY2oobix0KXtsZXQgZT1udWxsO3VqKG4sdHx8e30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEhQLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9ZGoobix0fHx7fSk7ZT1JYSgpLmNvbXBpbGVEaXJlY3RpdmUoZXUsaS5zb3VyY2VNYXBVcmwsaS5tZXRhZGF0YSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfWZ1bmN0aW9uIGRqKG4sdCl7bGV0IGU9biYmbi5uYW1lLGk9YG5nOi8vLyR7ZX0vXHUwMjc1ZGlyLmpzYCxyPUlhKCksbz1waihuLHQpO3JldHVybiBvLnR5cGVTb3VyY2VTcGFuPXIuY3JlYXRlUGFyc2VTb3VyY2VTcGFuKCJEaXJlY3RpdmUiLGUsaSksby51c2VzSW5oZXJpdGFuY2UmJmZqKG4pLHttZXRhZGF0YTpvLHNvdXJjZU1hcFVybDppfX1mdW5jdGlvbiB1aihuLHQpe2xldCBlPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZWQse2dldDooKT0+e2lmKG51bGw9PT1lKXtsZXQgaT1kaihuLHQpLHI9SWEoKTtlPXIuY29tcGlsZUZhY3RvcnkoZXUsYG5nOi8vLyR7bi5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOmkubWV0YWRhdGEubmFtZSx0eXBlOmkubWV0YWRhdGEudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6Uk0obiksdGFyZ2V0OnIuRmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9ZnVuY3Rpb24geWRlKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wcm90b3R5cGUpPT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiBwaihuLHQpe2xldCBlPXRPKCksaT1lLm93blByb3BNZXRhZGF0YShuKTtyZXR1cm57bmFtZTpuLm5hbWUsdHlwZTpuLHNlbGVjdG9yOnZvaWQgMCE9PXQuc2VsZWN0b3I/dC5zZWxlY3RvcjpudWxsLGhvc3Q6dC5ob3N0fHwkYyxwcm9wTWV0YWRhdGE6aSxpbnB1dHM6dC5pbnB1dHN8fFZpLG91dHB1dHM6dC5vdXRwdXRzfHxWaSxxdWVyaWVzOlZIKG4saSxtaiksbGlmZWN5Y2xlOnt1c2VzT25DaGFuZ2VzOmUuaGFzTGlmZWN5Y2xlSG9vayhuLCJuZ09uQ2hhbmdlcyIpfSx0eXBlU291cmNlU3BhbjpudWxsLHVzZXNJbmhlcml0YW5jZToheWRlKG4pLGV4cG9ydEFzOk1kZSh0LmV4cG9ydEFzKSxwcm92aWRlcnM6dC5wcm92aWRlcnN8fG51bGwsdmlld1F1ZXJpZXM6VkgobixpLGhqKSxpc1N0YW5kYWxvbmU6ISF0LnN0YW5kYWxvbmUsaG9zdERpcmVjdGl2ZXM6dC5ob3N0RGlyZWN0aXZlcz8ubWFwKHI9PiJmdW5jdGlvbiI9PXR5cGVvZiByP3tkaXJlY3RpdmU6cn06cil8fG51bGx9fWZ1bmN0aW9uIGZqKG4pe2xldCB0PU9iamVjdC5wcm90b3R5cGUsZT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7ZSYmZSE9PXQ7KSF0dShlKSYmIURhKGUpJiZTZGUoZSkmJmNqKGUsbnVsbCksZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9ZnVuY3Rpb24geGRlKG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9faihuKTpSaShuKX1mdW5jdGlvbiBDZGUobix0KXtyZXR1cm57cHJvcGVydHlOYW1lOm4scHJlZGljYXRlOnhkZSh0LnNlbGVjdG9yKSxkZXNjZW5kYW50czp0LmRlc2NlbmRhbnRzLGZpcnN0OnQuZmlyc3QscmVhZDp0LnJlYWQ/dC5yZWFkOm51bGwsc3RhdGljOiEhdC5zdGF0aWMsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ISF0LmVtaXREaXN0aW5jdENoYW5nZXNPbmx5fX1mdW5jdGlvbiBWSChuLHQsZSl7bGV0IGk9W107Zm9yKGxldCByIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG89dFtyXTtvLmZvckVhY2gocz0+e2lmKGUocykpe2lmKCFzLnNlbGVjdG9yKXRocm93IG5ldyBFcnJvcihgQ2FuJ3QgY29uc3RydWN0IGEgcXVlcnkgZm9yIHRoZSBwcm9wZXJ0eSAiJHtyfSIgb2YgIiR7TFAobil9IiBzaW5jZSB0aGUgcXVlcnkgc2VsZWN0b3Igd2Fzbid0IGRlZmluZWQuYCk7aWYoby5zb21lKGdqKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb21iaW5lIEBJbnB1dCBkZWNvcmF0b3JzIHdpdGggcXVlcnkgZGVjb3JhdG9ycyIpO2kucHVzaChDZGUocixzKSl9fSl9cmV0dXJuIGl9ZnVuY3Rpb24gTWRlKG4pe3JldHVybiB2b2lkIDA9PT1uP251bGw6X2oobil9ZnVuY3Rpb24gbWoobil7bGV0IHQ9bi5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iQ29udGVudENoaWxkIj09PXR8fCJDb250ZW50Q2hpbGRyZW4iPT09dH1mdW5jdGlvbiBoaihuKXtsZXQgdD1uLm5nTWV0YWRhdGFOYW1lO3JldHVybiJWaWV3Q2hpbGQiPT09dHx8IlZpZXdDaGlsZHJlbiI9PT10fWZ1bmN0aW9uIGdqKG4pe3JldHVybiJJbnB1dCI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIF9qKG4pe3JldHVybiBuLnNwbGl0KCIsIikubWFwKHQ9PnQudHJpbSgpKX12YXIgd2RlPVsibmdPbkNoYW5nZXMiLCJuZ09uSW5pdCIsIm5nT25EZXN0cm95IiwibmdEb0NoZWNrIiwibmdBZnRlclZpZXdJbml0IiwibmdBZnRlclZpZXdDaGVja2VkIiwibmdBZnRlckNvbnRlbnRJbml0IiwibmdBZnRlckNvbnRlbnRDaGVja2VkIl07ZnVuY3Rpb24gU2RlKG4pe2xldCB0PXRPKCk7aWYod2RlLnNvbWUoaT0+dC5oYXNMaWZlY3ljbGVIb29rKG4saSkpKXJldHVybiEwO2xldCBlPXQucHJvcE1ldGFkYXRhKG4pO2ZvcihsZXQgaSBpbiBlKXtsZXQgcj1lW2ldO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dLGE9cy5uZ01ldGFkYXRhTmFtZTtpZihnaihzKXx8bWoocyl8fGhqKHMpfHwiT3V0cHV0Ij09PWF8fCJIb3N0QmluZGluZyI9PT1hfHwiSG9zdExpc3RlbmVyIj09PWEpcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIEhIKG4sdCl7cmV0dXJue3R5cGU6bixuYW1lOm4ubmFtZSxwaXBlTmFtZTp0Lm5hbWUscHVyZTp2b2lkIDA9PT10LnB1cmV8fHQucHVyZSxpc1N0YW5kYWxvbmU6ISF0LnN0YW5kYWxvbmV9fXZhciBUZGU9b2IoIkRpcmVjdGl2ZSIsKG49e30pPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmNqKG4sdCkpO2Z1bmN0aW9uIHlNKC4uLm4pe31vYigiQ29tcG9uZW50Iiwobj17fSk9Pih7Y2hhbmdlRGV0ZWN0aW9uOmtfLkRlZmF1bHQsLi4ubn0pLFRkZSx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbDsoZnVuY3Rpb24obix0KXtMNSh0KSYmKFhfLnNldChuLHQpLE41LmFkZChuKSl9KShuLHQpLHVqKG4sdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sU00se2dldDooKT0+e2lmKG51bGw9PT1lKXtsZXQgaT1JYSgpO2lmKEw1KHQpKXtsZXQgYz1bYENvbXBvbmVudCAnJHtuLm5hbWV9JyBpcyBub3QgcmVzb2x2ZWQ6YF07dGhyb3cgdC50ZW1wbGF0ZVVybCYmYy5wdXNoKGAgLSB0ZW1wbGF0ZVVybDogJHt0LnRlbXBsYXRlVXJsfWApLHQuc3R5bGVVcmxzJiZ0LnN0eWxlVXJscy5sZW5ndGgmJmMucHVzaChgIC0gc3R5bGVVcmxzOiAke0pTT04uc3RyaW5naWZ5KHQuc3R5bGVVcmxzKX1gKSxjLnB1c2goIkRpZCB5b3UgcnVuIGFuZCB3YWl0IGZvciAncmVzb2x2ZUNvbXBvbmVudFJlc291cmNlcygpJz8iKSxuZXcgRXJyb3IoYy5qb2luKCJcbiIpKX1sZXQgbz10LnByZXNlcnZlV2hpdGVzcGFjZXM7dm9pZCAwPT09byYmKG89bnVsbCE9PVBfJiZ2b2lkIDAhPT1QXy5wcmVzZXJ2ZVdoaXRlc3BhY2VzJiZQXy5wcmVzZXJ2ZVdoaXRlc3BhY2VzKTtsZXQgcz10LmVuY2Fwc3VsYXRpb247dm9pZCAwPT09cyYmKHM9bnVsbCE9PVBfJiZ2b2lkIDAhPT1QXy5kZWZhdWx0RW5jYXBzdWxhdGlvbj9QXy5kZWZhdWx0RW5jYXBzdWxhdGlvbjpyYS5FbXVsYXRlZCk7bGV0IGE9dC50ZW1wbGF0ZVVybHx8YG5nOi8vLyR7bi5uYW1lfS90ZW1wbGF0ZS5odG1sYCxsPXsuLi5waihuLHQpLHR5cGVTb3VyY2VTcGFuOmkuY3JlYXRlUGFyc2VTb3VyY2VTcGFuKCJDb21wb25lbnQiLG4ubmFtZSxhKSx0ZW1wbGF0ZTp0LnRlbXBsYXRlfHwiIixwcmVzZXJ2ZVdoaXRlc3BhY2VzOm8sc3R5bGVzOnQuc3R5bGVzfHxWaSxhbmltYXRpb25zOnQuYW5pbWF0aW9ucyxkZWNsYXJhdGlvbnM6W10sY2hhbmdlRGV0ZWN0aW9uOnQuY2hhbmdlRGV0ZWN0aW9uLGVuY2Fwc3VsYXRpb246cyxpbnRlcnBvbGF0aW9uOnQuaW50ZXJwb2xhdGlvbix2aWV3UHJvdmlkZXJzOnQudmlld1Byb3ZpZGVyc3x8bnVsbH07RFIrKzt0cnl7aWYobC51c2VzSW5oZXJpdGFuY2UmJmZqKG4pLGU9aS5jb21waWxlQ29tcG9uZW50KGV1LGEsbCksdC5zdGFuZGFsb25lKXtsZXQgYz0kZCh0LmltcG9ydHN8fFZpKSx7ZGlyZWN0aXZlRGVmczpkLHBpcGVEZWZzOnV9PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7cmV0dXJue2RpcmVjdGl2ZURlZnM6KCk9PntpZihudWxsPT09ZSl7ZT1bRGEobildO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPVJpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxHbShsKSl7bGV0IGM9Wm0obCk7Zm9yKGxldCBkIG9mIGMuZXhwb3J0ZWQuZGlyZWN0aXZlcyl7bGV0IHU9RGEoZCl8fHR1KGQpO3UmJiFzLmhhcyhkKSYmKHMuYWRkKGQpLGUucHVzaCh1KSl9fWVsc2V7bGV0IGM9RGEobCl8fHR1KGwpO2MmJmUucHVzaChjKX19fXJldHVybiBlfSxwaXBlRGVmczooKT0+e2lmKG51bGw9PT1pKXtpPVtdO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPVJpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxHbShsKSl7bGV0IGM9Wm0obCk7Zm9yKGxldCBkIG9mIGMuZXhwb3J0ZWQucGlwZXMpe2xldCB1PW51KGQpO3UmJiFzLmhhcyhkKSYmKHMuYWRkKGQpLGkucHVzaCh1KSl9fWVsc2V7bGV0IGM9bnUobCk7YyYmaS5wdXNoKGMpfX19cmV0dXJuIGl9fX0obixjKTtlLmRpcmVjdGl2ZURlZnM9ZCxlLnBpcGVEZWZzPXUsZS5kZXBlbmRlbmNpZXM9KCk9PmMubWFwKFJpKX19ZmluYWxseXtEUi0tfWlmKDA9PT1EUiYmZnVuY3Rpb24oKXtpZighVFIpe1RSPSEwO3RyeXtmb3IobGV0IG49WkMubGVuZ3RoLTE7bj49MDtuLS0pe2xldHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX09WkNbbl07ZS5kZWNsYXJhdGlvbnMmJmUuZGVjbGFyYXRpb25zLmV2ZXJ5KGFqKSYmKFpDLnNwbGljZShuLDEpLGhkZSh0LGUpKX19ZmluYWxseXtUUj0hMX19fSgpLGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nU2VsZWN0b3JTY29wZX0obikpe2xldCBjPVptKG4ubmdTZWxlY3RvclNjb3BlKTtsaihlLGMpfWlmKHQuc2NoZW1hcyl7aWYoIXQuc3RhbmRhbG9uZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc2NoZW1hcycgd2FzIHNwZWNpZmllZCBmb3IgdGhlICR7TFAobil9IGJ1dCBpcyBvbmx5IHZhbGlkIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgc3RhbmRhbG9uZS5gKTtlLnNjaGVtYXM9dC5zY2hlbWFzfWVsc2UgdC5zdGFuZGFsb25lJiYoZS5zY2hlbWFzPVtdKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLG9iKCJQaXBlIixuPT4oe3B1cmU6ITAsLi4ubn0pLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZWQse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj1ISChuLHQpLG89SWEoKTtpPW8uY29tcGlsZUZhY3RvcnkoZXUsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOnIubmFtZSx0eXBlOnIudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6Uk0obiksdGFyZ2V0Om8uRmFjdG9yeVRhcmdldC5QaXBlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHpQLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IHI9SEgobix0KTtlPUlhKCkuY29tcGlsZVBpcGUoZXUsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVwaXBlLmpzYCxyKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLGF1KCJJbnB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksYXUoIk91dHB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksYXUoIkhvc3RCaW5kaW5nIixuPT4oe2hvc3RQcm9wZXJ0eU5hbWU6bn0pKSxhdSgiSG9zdExpc3RlbmVyIiwobix0KT0+KHtldmVudE5hbWU6bixhcmdzOnR9KSksb2IoIk5nTW9kdWxlIixuPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdD17fSl7KGZ1bmN0aW9uKG4sdCxlPSExKXtsZXQgaT0kZCh0LmRlY2xhcmF0aW9uc3x8VmkpLHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwkSCx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+KG51bGw9PT1yJiYocj1JYSgpLmNvbXBpbGVOZ01vZHVsZShldSxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NW1vZC5qc2Ase3R5cGU6bixib290c3RyYXA6JGQodC5ib290c3RyYXB8fFZpKS5tYXAoUmkpLGRlY2xhcmF0aW9uczppLm1hcChSaSksaW1wb3J0czokZCh0LmltcG9ydHN8fFZpKS5tYXAoUmkpLm1hcChCSCksZXhwb3J0czokZCh0LmV4cG9ydHN8fFZpKS5tYXAoUmkpLm1hcChCSCksc2NoZW1hczp0LnNjaGVtYXM/JGQodC5zY2hlbWFzKTpudWxsLGlkOnQuaWR8fG51bGx9KSxyLnNjaGVtYXN8fChyLnNjaGVtYXM9W10pKSxyKX0pO2xldCBvPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZWQse2dldDooKT0+e2lmKG51bGw9PT1vKXtsZXQgYT1JYSgpO289YS5jb21waWxlRmFjdG9yeShldSxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bixkZXBzOlJNKG4pLHRhcmdldDphLkZhY3RvcnlUYXJnZXQuTmdNb2R1bGUsdHlwZUFyZ3VtZW50Q291bnQ6MH0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ITF9KTtsZXQgcz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFJSLHtnZXQ6KCk9PntpZihudWxsPT09cyl7bGV0IGE9e25hbWU6bi5uYW1lLHR5cGU6bixwcm92aWRlcnM6dC5wcm92aWRlcnN8fFZpLGltcG9ydHM6Wyh0LmltcG9ydHN8fFZpKS5tYXAoUmkpLCh0LmV4cG9ydHN8fFZpKS5tYXAoUmkpXX07cz1JYSgpLmNvbXBpbGVJbmplY3RvcihldSxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWluai5qc2AsYSl9cmV0dXJuIHN9LGNvbmZpZ3VyYWJsZTohMX0pfSkobix0KSx2b2lkIDAhPT10LmlkJiZCNShuLHQuaWQpLGZ1bmN0aW9uKG4sdCl7WkMucHVzaCh7bW9kdWxlVHlwZTpuLG5nTW9kdWxlOnR9KX0obix0KX0obix0KSk7dmFyIE9PPW5ldyBpZSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxaTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuYXBwSW5pdHM9ZSx0aGlzLnJlc29sdmU9eU0sdGhpcy5yZWplY3Q9eU0sdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoaSxyKT0+e3RoaXMucmVzb2x2ZT1pLHRoaXMucmVqZWN0PXJ9KX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtsZXQgZT1bXSxpPSgpPT57dGhpcy5kb25lPSEwLHRoaXMucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcihsZXQgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLmFwcEluaXRzW3JdKCk7aWYoaGgobykpZS5wdXNoKG8pO2Vsc2UgaWYoRE8obykpe2xldCBzPW5ldyBQcm9taXNlKChhLGwpPT57by5zdWJzY3JpYmUoe2NvbXBsZXRlOmEsZXJyb3I6bH0pfSk7ZS5wdXNoKHMpfX1Qcm9taXNlLmFsbChlKS50aGVuKCgpPT57aSgpfSkuY2F0Y2gocj0+e3RoaXMucmVqZWN0KHIpfSksMD09PWUubGVuZ3RoJiZpKCksdGhpcy5pbml0aWFsaXplZD0hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhPTyw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksWXA9bmV3IGllKCJBcHBJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm5gJHtJUigpfSR7SVIoKX0ke0lSKCl9YH19KTtmdW5jdGlvbiBJUigpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciBrTz1uZXcgaWUoIlBsYXRmb3JtIEluaXRpYWxpemVyIiksdmM9bmV3IGllKCJQbGF0Zm9ybSBJRCIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxoaT0obmV3IGllKCJBcHBsaWNhdGlvbiBQYWNrYWdlcyBSb290IFVSTCIpLG5ldyBpZSgiQW5pbWF0aW9uTW9kdWxlVHlwZSIpKSxjZD1uZXcgaWUoIkxvY2FsZUlkIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+YWkoY2QseGkuT3B0aW9uYWx8eGkuU2tpcFNlbGYpfHx0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8X019KSxQZGU9KG5ldyBpZSgiRGVmYXVsdEN1cnJlbmN5Q29kZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJVU0QifSksbmV3IGllKCJUcmFuc2xhdGlvbnMiKSxuZXcgaWUoIlRyYW5zbGF0aW9uc0Zvcm1hdCIpLG5ldyBpZSgiY29tcGlsZXJPcHRpb25zIiksUHJvbWlzZS5yZXNvbHZlKDApKTtmdW5jdGlvbiBEUChuKXt0eXBlb2YgWm9uZT4idSI/UGRlLnRoZW4oKCk9PntuJiZuLmFwcGx5KG51bGwsbnVsbCl9KTpab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInNjaGVkdWxlTWljcm90YXNrIixuKX12YXIgYXQ9Y2xhc3N7Y29uc3RydWN0b3Ioe2VuYWJsZUxvbmdTdGFja1RyYWNlOnQ9ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjplPSExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmk9ITF9KXtpZih0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEYoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgRighMSksdGhpcy5vblN0YWJsZT1uZXcgRighMSksdGhpcy5vbkVycm9yPW5ldyBGKCExKSx0eXBlb2YgWm9uZT4idSIpdGhyb3cgbmV3IHl0KDkwOCwhMSk7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2xldCByPXRoaXM7ci5fbmVzdGluZz0wLHIuX291dGVyPXIuX2lubmVyPVpvbmUuY3VycmVudCxab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYoci5faW5uZXI9ci5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLHQmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKHIuX2lubmVyPXIuX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjKSksci5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uPSFpJiZlLHIuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb249aSxyLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxyLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbigpe2xldCBuPVVyLnJlcXVlc3RBbmltYXRpb25GcmFtZSx0PVVyLmNhbmNlbEFuaW1hdGlvbkZyYW1lO2lmKHR5cGVvZiBab25lPCJ1IiYmbiYmdCl7bGV0IGU9bltab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZSYmKG49ZSk7bGV0IGk9dFtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07aSYmKHQ9aSl9cmV0dXJue25hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZTpuLG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZyYW1lOnR9fSgpLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZSxmdW5jdGlvbihuKXtsZXQgdD0oKT0+eyFmdW5jdGlvbihuKXtuLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHwtMSE9PW4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkfHwobi5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9bi5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChVciwoKT0+e24uZmFrZVRvcEV2ZW50VGFza3x8KG4uZmFrZVRvcEV2ZW50VGFzaz1ab25lLnJvb3Quc2NoZWR1bGVFdmVudFRhc2soImZha2VUb3BFdmVudFRhc2siLCgpPT57bi5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsSVAobiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMCxGTyhuKSxuLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSx2b2lkIDAsKCk9Pnt9LCgpPT57fSkpLG4uZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0pLElQKG4pKX0obil9O24uX2lubmVyPW4uX2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazooZSxpLHIsbyxzLGEpPT57dHJ5e3JldHVybiB6SChuKSxlLmludm9rZVRhc2socixvLHMsYSl9ZmluYWxseXsobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uJiYiZXZlbnRUYXNrIj09PW8udHlwZXx8bi5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJnQoKSxVSChuKX19LG9uSW52b2tlOihlLGkscixvLHMsYSxsKT0+e3RyeXtyZXR1cm4gekgobiksZS5pbnZva2UocixvLHMsYSxsKX1maW5hbGx5e24uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJnQoKSxVSChuKX19LG9uSGFzVGFzazooZSxpLHIsbyk9PntlLmhhc1Rhc2socixvKSxpPT09ciYmKCJtaWNyb1Rhc2siPT1vLmNoYW5nZT8obi5faGFzUGVuZGluZ01pY3JvdGFza3M9by5taWNyb1Rhc2ssSVAobiksRk8obikpOiJtYWNyb1Rhc2siPT1vLmNoYW5nZSYmKG4uaGFzUGVuZGluZ01hY3JvdGFza3M9by5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjooZSxpLHIsbyk9PihlLmhhbmRsZUVycm9yKHIsbyksbi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vbkVycm9yLmVtaXQobykpLCExKX0pfShyKX1zdGF0aWMgaXNJbkFuZ3VsYXJab25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighYXQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IHl0KDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5ndWxhclpvbmUoKXtpZihhdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgeXQoOTA5LCExKX1ydW4odCxlLGkpe3JldHVybiB0aGlzLl9pbm5lci5ydW4odCxlLGkpfXJ1blRhc2sodCxlLGkscil7bGV0IG89dGhpcy5faW5uZXIscz1vLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIityLHQsa2RlLHlNLHlNKTt0cnl7cmV0dXJuIG8ucnVuVGFzayhzLGUsaSl9ZmluYWxseXtvLmNhbmNlbFRhc2socyl9fXJ1bkd1YXJkZWQodCxlLGkpe3JldHVybiB0aGlzLl9pbm5lci5ydW5HdWFyZGVkKHQsZSxpKX1ydW5PdXRzaWRlQW5ndWxhcih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfX0sa2RlPXt9O2Z1bmN0aW9uIEZPKG4pe2lmKDA9PW4uX25lc3RpbmcmJiFuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhbi5pc1N0YWJsZSl0cnl7bi5fbmVzdGluZysrLG4ub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYobi5fbmVzdGluZy0tLCFuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtuLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLm9uU3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7bi5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIElQKG4pe24uaGFzUGVuZGluZ01pY3JvdGFza3M9ISEobi5faGFzUGVuZGluZ01pY3JvdGFza3N8fChuLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PW4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiB6SChuKXtuLl9uZXN0aW5nKyssbi5pc1N0YWJsZSYmKG4uaXNTdGFibGU9ITEsbi5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIFVIKG4pe24uX25lc3RpbmctLSxGTyhuKX12YXIgTE8sTk89bmV3IGllKCIiKSx2Yj1uZXcgaWUoIiIpLEtNPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX25nWm9uZT1lLHRoaXMucmVnaXN0cnk9aSx0aGlzLl9wZW5kaW5nQ291bnQ9MCx0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fZGlkV29yaz0hMSx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy50YXNrVHJhY2tpbmdab25lPW51bGwsTE98fChmdW5jdGlvbihuKXtMTz1ufShyKSxyLmFkZFRvV2luZG93KGkpKSx0aGlzLl93YXRjaEFuZ3VsYXJFdmVudHMoKSxlLnJ1bigoKT0+e3RoaXMudGFza1RyYWNraW5nWm9uZT10eXBlb2YgWm9uZT4idSI/bnVsbDpab25lLmN1cnJlbnQuZ2V0KCJUYXNrVHJhY2tpbmdab25lIil9KX1fd2F0Y2hBbmd1bGFyRXZlbnRzKCl7dGhpcy5fbmdab25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy5fZGlkV29yaz0hMCx0aGlzLl9pc1pvbmVTdGFibGU9ITF9fSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e2F0LmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxEUCgoKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KX0pfWluY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnQrPTEsdGhpcy5fZGlkV29yaz0hMCx0aGlzLl9wZW5kaW5nQ291bnR9ZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBiZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9aXNTdGFibGUoKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfV9ydW5DYWxsYmFja3NJZlJlYWR5KCl7aWYodGhpcy5pc1N0YWJsZSgpKURQKCgpPT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCBlPXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoZS50aW1lb3V0SWQpLGUuZG9uZUNiKHRoaXMuX2RpZFdvcmspfXRoaXMuX2RpZFdvcms9ITF9KTtlbHNle2xldCBlPXRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCk7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoaT0+IWkudXBkYXRlQ2J8fCFpLnVwZGF0ZUNiKGUpfHwoY2xlYXJUaW1lb3V0KGkudGltZW91dElkKSwhMSkpLHRoaXMuX2RpZFdvcms9ITB9fWdldFBlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLnRhc2tUcmFja2luZ1pvbmU/dGhpcy50YXNrVHJhY2tpbmdab25lLm1hY3JvVGFza3MubWFwKGU9Pih7c291cmNlOmUuc291cmNlLGNyZWF0aW9uTG9jYXRpb246ZS5jcmVhdGlvbkxvY2F0aW9uLGRhdGE6ZS5kYXRhfSkpOltdfWFkZENhbGxiYWNrKGUsaSxyKXtsZXQgbz0tMTtpJiZpPjAmJihvPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihzPT5zLnRpbWVvdXRJZCE9PW8pLGUodGhpcy5fZGlkV29yayx0aGlzLmdldFBlbmRpbmdUYXNrcygpKX0saSkpLHRoaXMuX2NhbGxiYWNrcy5wdXNoKHtkb25lQ2I6ZSx0aW1lb3V0SWQ6byx1cGRhdGVDYjpyfSl9d2hlblN0YWJsZShlLGkscil7aWYociYmIXRoaXMudGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvcGx1Z2lucy90YXNrLXRyYWNraW5nIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayhlLGksciksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfWdldFBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50fXJlZ2lzdGVyQXBwbGljYXRpb24oZSl7dGhpcy5yZWdpc3RyeS5yZWdpc3RlckFwcGxpY2F0aW9uKGUsdGhpcyl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkudW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpfWZpbmRQcm92aWRlcnMoZSxpLHIpe3JldHVybltdfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKGF0KSxrKEpNKSxrKHZiKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksSk09KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FwcGxpY2F0aW9ucz1uZXcgTWFwfXJlZ2lzdGVyQXBwbGljYXRpb24oZSxpKXt0aGlzLl9hcHBsaWNhdGlvbnMuc2V0KGUsaSl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUoZSl9dW5yZWdpc3RlckFsbEFwcGxpY2F0aW9ucygpe3RoaXMuX2FwcGxpY2F0aW9ucy5jbGVhcigpfWdldFRlc3RhYmlsaXR5KGUpe3JldHVybiB0aGlzLl9hcHBsaWNhdGlvbnMuZ2V0KGUpfHxudWxsfWdldEFsbFRlc3RhYmlsaXRpZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfWdldEFsbFJvb3RFbGVtZW50cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy5rZXlzKCkpfWZpbmRUZXN0YWJpbGl0eUluVHJlZShlLGk9ITApe3JldHVybiBMTz8uZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsZSxpKT8/bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpLFVfPW51bGwsYmo9bmV3IGllKCJBbGxvd011bHRpcGxlVG9rZW4iKSx2aj1uZXcgaWUoIlBsYXRmb3JtRGVzdHJveUxpc3RlbmVycyIpLEJkZT1uZXcgaWUoImFwcEJvb3RzdHJhcExpc3RlbmVyIik7ZnVuY3Rpb24gQk8obix0LGU9W10pe2xldCBpPWBQbGF0Zm9ybTogJHt0fWAscj1uZXcgaWUoaSk7cmV0dXJuKG89W10pPT57bGV0IHM9eWooKTtpZighc3x8cy5pbmplY3Rvci5nZXQoYmosITEpKXtsZXQgYT1bLi4uZSwuLi5vLHtwcm92aWRlOnIsdXNlVmFsdWU6ITB9XTtuP24oYSk6ZnVuY3Rpb24obil7aWYoVV8mJiFVXy5nZXQoYmosITEpKXRocm93IG5ldyB5dCg0MDAsITEpO1VfPW47bGV0IHQ9bi5nZXQoeGopOyhmdW5jdGlvbihuKXtsZXQgdD1uLmdldChrTyxudWxsKTt0JiZ0LmZvckVhY2goZT0+ZSgpKX0pKG4pfShmdW5jdGlvbihuPVtdLHQpe3JldHVybiBNaS5jcmVhdGUoe25hbWU6dCxwcm92aWRlcnM6W3twcm92aWRlOk5NLHVzZVZhbHVlOiJwbGF0Zm9ybSJ9LHtwcm92aWRlOnZqLHVzZVZhbHVlOm5ldyBTZXQoWygpPT5VXz1udWxsXSl9LC4uLm5dfSl9KGEsaSkpfXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD15aigpO2lmKCF0KXRocm93IG5ldyB5dCg0MDEsITEpO3JldHVybiB0fSgpfX1mdW5jdGlvbiB5aigpe3JldHVybiBVXz8uZ2V0KHhqKT8/bnVsbH12YXIgeGo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lLHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9Ym9vdHN0cmFwTW9kdWxlRmFjdG9yeShlLGkpe2xldCByPWZ1bmN0aW9uKG4sdCl7bGV0IGU7cmV0dXJuIGU9Im5vb3AiPT09bj9uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEYsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBGLHRoaXMub25TdGFibGU9bmV3IEYsdGhpcy5vbkVycm9yPW5ldyBGfXJ1bih0LGUsaSl7cmV0dXJuIHQuYXBwbHkoZSxpKX1ydW5HdWFyZGVkKHQsZSxpKXtyZXR1cm4gdC5hcHBseShlLGkpfXJ1bk91dHNpZGVBbmd1bGFyKHQpe3JldHVybiB0KCl9cnVuVGFzayh0LGUsaSxyKXtyZXR1cm4gdC5hcHBseShlLGkpfX06KCJ6b25lLmpzIj09PW4/dm9pZCAwOm4pfHxuZXcgYXQodCksZX0oaT8ubmdab25lLGZ1bmN0aW9uKG4pe3JldHVybntlbmFibGVMb25nU3RhY2tUcmFjZTohMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOiEoIW58fCFuLm5nWm9uZUV2ZW50Q29hbGVzY2luZyl8fCExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOiEoIW58fCFuLm5nWm9uZVJ1bkNvYWxlc2NpbmcpfHwhMX19KGkpKSxvPVt7cHJvdmlkZTphdCx1c2VWYWx1ZTpyfV07cmV0dXJuIHIucnVuKCgpPT57bGV0IHM9TWkuY3JlYXRlKHtwcm92aWRlcnM6byxwYXJlbnQ6dGhpcy5pbmplY3RvcixuYW1lOmUubW9kdWxlVHlwZS5uYW1lfSksYT1lLmNyZWF0ZShzKSxsPWEuaW5qZWN0b3IuZ2V0KHJzLG51bGwpO2lmKCFsKXRocm93IG5ldyB5dCg0MDIsITEpO3JldHVybiByLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IGM9ci5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpkPT57bC5oYW5kbGVFcnJvcihkKX19KTthLm9uRGVzdHJveSgoKT0+e0tDKHRoaXMuX21vZHVsZXMsYSksYy51bnN1YnNjcmliZSgpfSl9KSxmdW5jdGlvbihuLHQsZSl7dHJ5e2xldCBpPWUoKTtyZXR1cm4gaGgoaSk/aS5jYXRjaChyPT57dGhyb3cgdC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5oYW5kbGVFcnJvcihyKSkscn0pOml9Y2F0Y2goaSl7dGhyb3cgdC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5oYW5kbGVFcnJvcihpKSksaX19KGwsciwoKT0+e2xldCBjPWEuaW5qZWN0b3IuZ2V0KFpNKTtyZXR1cm4gYy5ydW5Jbml0aWFsaXplcnMoKSxjLmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbihuKXsoZnVuY3Rpb24obix0KXtudWxsPT1uJiZRSCgiRXhwZWN0ZWQgbG9jYWxlSWQgdG8gYmUgZGVmaW5lZCIsbixudWxsLCIhPSIpfSkobiksInN0cmluZyI9PXR5cGVvZiBuJiYoT1U9bi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0oYS5pbmplY3Rvci5nZXQoY2QsX00pfHxfTSksdGhpcy5fbW9kdWxlRG9Cb290c3RyYXAoYSksYSkpfSl9KX1ib290c3RyYXBNb2R1bGUoZSxpPVtdKXtsZXQgcj1Daih7fSxpKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPW5ldyB3UChlKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfSgwLDAsZSkudGhlbihvPT50aGlzLmJvb3RzdHJhcE1vZHVsZUZhY3RvcnkobyxyKSl9X21vZHVsZURvQm9vdHN0cmFwKGUpe2xldCBpPWUuaW5qZWN0b3IuZ2V0KHljKTtpZihlLl9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0aD4wKWUuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChyPT5pLmJvb3RzdHJhcChyKSk7ZWxzZXtpZighZS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyB5dCgtNDAzLCExKTtlLmluc3RhbmNlLm5nRG9Cb290c3RyYXAoaSl9dGhpcy5fbW9kdWxlcy5wdXNoKGUpfW9uRGVzdHJveShlKXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goZSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IHl0KDQwNCwhMSk7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goaT0+aS5kZXN0cm95KCkpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChpPT5pKCkpO2xldCBlPXRoaXMuX2luamVjdG9yLmdldCh2aixudWxsKTtlJiYoZS5mb3JFYWNoKGk9PmkoKSksZS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTWkpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksbn0pKCk7ZnVuY3Rpb24gQ2oobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LnJlZHVjZShDaixuKTp7Li4ubiwuLi50fX12YXIgeWM9KCgpPT57Y2xhc3MgbntnZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3pvbmU9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy50aWNrKCl9KX19KTtsZXQgbz1uZXcgS3QoYT0+e3RoaXMuX3N0YWJsZT10aGlzLl96b25lLmlzU3RhYmxlJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EubmV4dCh0aGlzLl9zdGFibGUpLGEuY29tcGxldGUoKX0pfSkscz1uZXcgS3QoYT0+e2xldCBsO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpPT57YXQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLERQKCgpPT57IXRoaXMuX3N0YWJsZSYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5fc3RhYmxlPSEwLGEubmV4dCghMCkpfSl9KX0pO2xldCBjPXRoaXMuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PnthdC5hc3NlcnRJbkFuZ3VsYXJab25lKCksdGhpcy5fc3RhYmxlJiYodGhpcy5fc3RhYmxlPSExLHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLm5leHQoITEpfSkpfSk7cmV0dXJuKCk9PntsLnVuc3Vic2NyaWJlKCksYy51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9dG4obyxzLnBpcGUoQ3MoKSkpfWJvb3RzdHJhcChlLGkpe2xldCBzLHI9ZSBpbnN0YW5jZW9mIHBNO2lmKCF0aGlzLl9pbmplY3Rvci5nZXQoWk0pLmRvbmUpdGhyb3chciYmZTUoZSksbmV3IHl0KDQwNSxmYWxzZSk7cz1yP2U6dGhpcy5faW5qZWN0b3IuZ2V0KGZvKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlKSx0aGlzLmNvbXBvbmVudFR5cGVzLnB1c2gocy5jb21wb25lbnRUeXBlKTtsZXQgYT1mdW5jdGlvbihuKXtyZXR1cm4gbi5pc0JvdW5kVG9Nb2R1bGV9KHMpP3ZvaWQgMDp0aGlzLl9pbmplY3Rvci5nZXQocnUpLGM9cy5jcmVhdGUoTWkuTlVMTCxbXSxpfHxzLnNlbGVjdG9yLGEpLGQ9Yy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LHU9Yy5pbmplY3Rvci5nZXQoTk8sbnVsbCk7cmV0dXJuIHU/LnJlZ2lzdGVyQXBwbGljYXRpb24oZCksYy5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoYy5ob3N0VmlldyksS0ModGhpcy5jb21wb25lbnRzLGMpLHU/LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihkKX0pLHRoaXMuX2xvYWRDb21wb25lbnQoYyksY310aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IHl0KDEwMSwhMSk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwO2ZvcihsZXQgZSBvZiB0aGlzLl92aWV3cyllLmRldGVjdENoYW5nZXMoKX1jYXRjaChlKXt0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9leGNlcHRpb25IYW5kbGVyLmhhbmRsZUVycm9yKGUpKX1maW5hbGx5e3RoaXMuX3J1bm5pbmdUaWNrPSExfX1hdHRhY2hWaWV3KGUpe2xldCBpPWU7dGhpcy5fdmlld3MucHVzaChpKSxpLmF0dGFjaFRvQXBwUmVmKHRoaXMpfWRldGFjaFZpZXcoZSl7bGV0IGk9ZTtLQyh0aGlzLl92aWV3cyxpKSxpLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChlKXt0aGlzLmF0dGFjaFZpZXcoZS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goZSk7bGV0IGk9dGhpcy5faW5qZWN0b3IuZ2V0KEJkZSxbXSk7aS5wdXNoKC4uLnRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycyksaS5mb3JFYWNoKHI9PnIoZSkpfW5nT25EZXN0cm95KCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl0cnl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGU9PmUoKSksdGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGU9PmUuZGVzdHJveSgpKSx0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShlKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpLCgpPT5LQyh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGUpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IHl0KDQwNiwhMSk7bGV0IGU9dGhpcy5faW5qZWN0b3I7ZS5kZXN0cm95JiYhZS5kZXN0cm95ZWQmJmUuZGVzdHJveSgpfWdldCB2aWV3Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3MubGVuZ3RofXdhcm5JZkRlc3Ryb3llZCgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhhdCksayhwYyksayhycykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIEtDKG4sdCl7bGV0IGU9bi5pbmRleE9mKHQpO2U+LTEmJm4uc3BsaWNlKGUsMSl9dmFyICR0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPVFkZSxufSkoKTtmdW5jdGlvbiBRZGUobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihUTShuKSYmIWUpe2xldCBpPWlkKG4uaW5kZXgsdCk7cmV0dXJuIG5ldyBqcChpLGkpfXJldHVybiA0NyZuLnR5cGU/bmV3IGpwKHRbYmxdLHQpOm51bGx9KFBvKCksWmUoKSwxNj09KDE2Jm4pKX12YXIgeE09Y2xhc3N7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIFV6KHQpfWNyZWF0ZSh0KXtyZXR1cm4gbmV3IFJQKHQpfX0sS2RlPShuLHQpPT50LFJQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxLZGV9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hPcGVyYXRpb24odCl7bGV0IGU9dGhpcy5faXRIZWFkLGk9dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxvPW51bGw7Zm9yKDtlfHxpOyl7bGV0IHM9IWl8fGUmJmUuY3VycmVudEluZGV4PEdIKGkscixvKT9lOmksYT1HSChzLHIsbyksbD1zLmN1cnJlbnRJbmRleDtpZihzPT09aSlyLS0saT1pLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1zLnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7b3x8KG89W10pO2xldCBjPWEtcixkPWwtcjtpZihjIT1kKXtmb3IobGV0IHA9MDtwPGM7cCsrKXtsZXQgZj1wPG8ubGVuZ3RoP29bcF06b1twXT0wLG09ZitwO2Q8PW0mJm08YyYmKG9bcF09ZisxKX1vW3MucHJldmlvdXNJbmRleF09ZC1jfX1hIT09bCYmdChzLGEsbCl9fWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoTW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWZvckVhY2hJZGVudGl0eUNoYW5nZSh0KXtsZXQgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9ZGlmZih0KXtpZihudWxsPT10JiYodD1bXSksIVV6KHQpKXRocm93IG5ldyB5dCg5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgcixvLHMsZT10aGlzLl9pdEhlYWQsaT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IobGV0IGE9MDthPHRoaXMubGVuZ3RoO2ErKylvPXRbYV0scz10aGlzLl90cmFja0J5Rm4oYSxvKSxudWxsIT09ZSYmT2JqZWN0LmlzKGUudHJhY2tCeUlkLHMpPyhpJiYoZT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihlLG8scyxhKSksT2JqZWN0LmlzKGUuaXRlbSxvKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSxvKSk6KGU9dGhpcy5fbWlzbWF0Y2goZSxvLHMsYSksaT0hMCksZT1lLl9uZXh0fWVsc2Ugcj0wLGZ1bmN0aW9uKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0KG5bZV0pO2Vsc2V7bGV0IGksZT1uW1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOyEoaT1lLm5leHQoKSkuZG9uZTspdChpLnZhbHVlKX19KHQsYT0+e3M9dGhpcy5fdHJhY2tCeUZuKHIsYSksbnVsbCE9PWUmJk9iamVjdC5pcyhlLnRyYWNrQnlJZCxzKT8oaSYmKGU9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oZSxhLHMscikpLE9iamVjdC5pcyhlLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGUsYSkpOihlPXRoaXMuX21pc21hdGNoKGUsYSxzLHIpLGk9ITApLGU9ZS5fbmV4dCxyKyt9KSx0aGlzLmxlbmd0aD1yO3JldHVybiB0aGlzLl90cnVuY2F0ZShlKSx0aGlzLmNvbGxlY3Rpb249dCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IHQ7Zm9yKHQ9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0TW92ZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaCh0LGUsaSxyKXtsZXQgbztyZXR1cm4gbnVsbD09PXQ/bz10aGlzLl9pdFRhaWw6KG89dC5fcHJldix0aGlzLl9yZW1vdmUodCkpLG51bGwhPT0odD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChpLG51bGwpKT8oT2JqZWN0LmlzKHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9yZWluc2VydEFmdGVyKHQsbyxyKSk6bnVsbCE9PSh0PW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoaSxyKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fbW92ZUFmdGVyKHQsbyxyKSk6dD10aGlzLl9hZGRBZnRlcihuZXcgUFAoZSxpKSxvLHIpLHR9X3ZlcmlmeVJlaW5zZXJ0aW9uKHQsZSxpLHIpe2xldCBvPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KGksbnVsbCk7cmV0dXJuIG51bGwhPT1vP3Q9dGhpcy5fcmVpbnNlcnRBZnRlcihvLHQuX3ByZXYscik6dC5jdXJyZW50SW5kZXghPXImJih0LmN1cnJlbnRJbmRleD1yLHRoaXMuX2FkZFRvTW92ZXModCxyKSksdH1fdHJ1bmNhdGUodCl7Zm9yKDtudWxsIT09dDspe2xldCBlPXQuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpLHQ9ZX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX1fcmVpbnNlcnRBZnRlcih0LGUsaSl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTtsZXQgcj10Ll9wcmV2UmVtb3ZlZCxvPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09cj90aGlzLl9yZW1vdmFsc0hlYWQ9bzpyLl9uZXh0UmVtb3ZlZD1vLG51bGw9PT1vP3RoaXMuX3JlbW92YWxzVGFpbD1yOm8uX3ByZXZSZW1vdmVkPXIsdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLGkpLHRoaXMuX2FkZFRvTW92ZXModCxpKSx0fV9tb3ZlQWZ0ZXIodCxlLGkpe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLGkpLHRoaXMuX2FkZFRvTW92ZXModCxpKSx0fV9hZGRBZnRlcih0LGUsaSl7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0fV9pbnNlcnRBZnRlcih0LGUsaSl7bGV0IHI9bnVsbD09PWU/dGhpcy5faXRIZWFkOmUuX25leHQ7cmV0dXJuIHQuX25leHQ9cix0Ll9wcmV2PWUsbnVsbD09PXI/dGhpcy5faXRUYWlsPXQ6ci5fcHJldj10LG51bGw9PT1lP3RoaXMuX2l0SGVhZD10OmUuX25leHQ9dCxudWxsPT09dGhpcy5fbGlua2VkUmVjb3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3IENNKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1pLHR9X3JlbW92ZSh0KXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpfV91bmxpbmsodCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKHQpO2xldCBlPXQuX3ByZXYsaT10Ll9uZXh0O3JldHVybiBudWxsPT09ZT90aGlzLl9pdEhlYWQ9aTplLl9uZXh0PWksbnVsbD09PWk/dGhpcy5faXRUYWlsPWU6aS5fcHJldj1lLHR9X2FkZFRvTW92ZXModCxlKXtyZXR1cm4gdC5wcmV2aW91c0luZGV4PT09ZXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD10OnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPXQpLHR9X2FkZFRvUmVtb3ZhbHModCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IENNKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW51bGwsdC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPXQsdC5fcHJldlJlbW92ZWQ9bnVsbCk6KHQuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD10KSx0fV9hZGRJZGVudGl0eUNoYW5nZSh0LGUpe3JldHVybiB0Lml0ZW09ZSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9dCx0fX0sUFA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19LENNPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1wdXQodCl7bGV0IGU9dC50cmFja0J5SWQsaT10aGlzLm1hcC5nZXQoZSk7aXx8KGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQodCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD10LHQuX25leHREdXA9bnVsbCx0Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPXQsdC5fcHJldkR1cD10aGlzLl90YWlsLHQuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPXQpfWdldCh0LGUpe2xldCBpO2ZvcihpPXRoaXMuX2hlYWQ7bnVsbCE9PWk7aT1pLl9uZXh0RHVwKWlmKChudWxsPT09ZXx8ZTw9aS5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoaS50cmFja0J5SWQsdCkpcmV0dXJuIGk7cmV0dXJuIG51bGx9cmVtb3ZlKHQpe2xldCBlPXQuX3ByZXZEdXAsaT10Ll9uZXh0RHVwO3JldHVybiBudWxsPT09ZT90aGlzLl9oZWFkPWk6ZS5fbmV4dER1cD1pLG51bGw9PT1pP3RoaXMuX3RhaWw9ZTppLl9wcmV2RHVwPWUsbnVsbD09PXRoaXMuX2hlYWR9fSx0aGlzLm1hcC5zZXQoZSxpKSksaS5hZGQodCl9Z2V0KHQsZSl7bGV0IHI9dGhpcy5tYXAuZ2V0KHQpO3JldHVybiByP3IuZ2V0KHQsZSk6bnVsbH1yZW1vdmUodCl7bGV0IGU9dC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChlKS5yZW1vdmUodCkmJnRoaXMubWFwLmRlbGV0ZShlKSx0fWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19O2Z1bmN0aW9uIEdIKG4sdCxlKXtsZXQgaT1uLnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWkpcmV0dXJuIGk7bGV0IHI9MDtyZXR1cm4gZSYmaTxlLmxlbmd0aCYmKHI9ZVtpXSksaSt0K3J9dmFyIE1NPWNsYXNze2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWFwfHxFTyh0KX1jcmVhdGUoKXtyZXR1cm4gbmV3IGtQfX0sa1A9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9jaGFuZ2VzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZH1mb3JFYWNoSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9tYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9Zm9yRWFjaENoYW5nZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dENoYW5nZWQpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoUmVtb3ZlZEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX1kaWZmKHQpe2lmKHQpe2lmKCEodCBpbnN0YW5jZW9mIE1hcHx8RU8odCkpKXRocm93IG5ldyB5dCg5MDAsITEpfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgZT10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaCh0LChpLHIpPT57aWYoZSYmZS5rZXk9PT1yKXRoaXMuX21heWJlQWRkVG9DaGFuZ2VzKGUsaSksdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxlPWUuX25leHQ7ZWxzZXtsZXQgbz10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShyLGkpO2U9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoZSxvKX19KSxlKXtlLl9wcmV2JiYoZS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9ZTtmb3IobGV0IGk9ZTtudWxsIT09aTtpPWkuX25leHRSZW1vdmVkKWk9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShpLmtleSksaS5fbmV4dFJlbW92ZWQ9aS5fbmV4dCxpLnByZXZpb3VzVmFsdWU9aS5jdXJyZW50VmFsdWUsaS5jdXJyZW50VmFsdWU9bnVsbCxpLl9wcmV2PW51bGwsaS5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQodCxlKXtpZih0KXtsZXQgaT10Ll9wcmV2O3JldHVybiBlLl9uZXh0PXQsZS5fcHJldj1pLHQuX3ByZXY9ZSxpJiYoaS5fbmV4dD1lKSx0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9ZSksdGhpcy5fYXBwZW5kQWZ0ZXI9dCx0fXJldHVybiB0aGlzLl9hcHBlbmRBZnRlcj8odGhpcy5fYXBwZW5kQWZ0ZXIuX25leHQ9ZSxlLl9wcmV2PXRoaXMuX2FwcGVuZEFmdGVyKTp0aGlzLl9tYXBIZWFkPWUsdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxudWxsfV9nZXRPckNyZWF0ZVJlY29yZEZvcktleSh0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXtsZXQgcj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhyLGUpO2xldCBvPXIuX3ByZXYscz1yLl9uZXh0O3JldHVybiBvJiYoby5fbmV4dD1zKSxzJiYocy5fcHJldj1vKSxyLl9uZXh0PW51bGwsci5fcHJldj1udWxsLHJ9bGV0IGk9bmV3IEZQKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LGkpLGkuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMoaSksaX1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCx0PXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0Q2hhbmdlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXModCxlKXtPYmplY3QuaXMoZSx0LmN1cnJlbnRWYWx1ZSl8fCh0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWUsdC5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0NoYW5nZXModCkpfV9hZGRUb0FkZGl0aW9ucyh0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX1fYWRkVG9DaGFuZ2VzKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX1fZm9yRWFjaCh0LGUpe3QgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKGUpOk9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+ZSh0W2ldLGkpKX19LEZQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMua2V5PXQsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19O2Z1bmN0aW9uIFdIKCl7cmV0dXJuIG5ldyB3bChbbmV3IHhNXSl9dmFyIHdsPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5mYWN0b3JpZXM9ZX1zdGF0aWMgY3JlYXRlKGUsaSl7aWYobnVsbCE9aSl7bGV0IHI9aS5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgbihlKX1zdGF0aWMgZXh0ZW5kKGUpe3JldHVybntwcm92aWRlOm4sdXNlRmFjdG9yeTppPT5uLmNyZWF0ZShlLGl8fFdIKCkpLGRlcHM6W1tuLG5ldyBzZCxuZXcgVHNdXX19ZmluZChlKXtsZXQgaT10aGlzLmZhY3Rvcmllcy5maW5kKHI9PnIuc3VwcG9ydHMoZSkpO2lmKG51bGwhPWkpcmV0dXJuIGk7dGhyb3cgbmV3IHl0KDkwMSwhMSl9fXJldHVybiBuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpXSH0pLG59KSgpO2Z1bmN0aW9uIHFIKCl7cmV0dXJuIG5ldyB4YihbbmV3IE1NXSl9dmFyIHhiPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5mYWN0b3JpZXM9ZX1zdGF0aWMgY3JlYXRlKGUsaSl7aWYoaSl7bGV0IHI9aS5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgbihlKX1zdGF0aWMgZXh0ZW5kKGUpe3JldHVybntwcm92aWRlOm4sdXNlRmFjdG9yeTppPT5uLmNyZWF0ZShlLGl8fHFIKCkpLGRlcHM6W1tuLG5ldyBzZCxuZXcgVHNdXX19ZmluZChlKXtsZXQgaT10aGlzLmZhY3Rvcmllcy5maW5kKHI9PnIuc3VwcG9ydHMoZSkpO2lmKGkpcmV0dXJuIGk7dGhyb3cgbmV3IHl0KDkwMSwhMSl9fXJldHVybiBuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpxSH0pLG59KSgpLEpkZT1bbmV3IE1NXSwkZGU9W25ldyB4TV0sTWo9KG5ldyB3bCgkZGUpLG5ldyB4YihKZGUpLEJPKG51bGwsImNvcmUiLFtdKSksd2o9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoeWMpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gJE0obil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygbj9uOm51bGwhPW4mJiJmYWxzZSIhPT1ufXZhciBldWU9IjoiLGR1PWNsYXNze3N0YXRpYyB6ZXJvKCl7cmV0dXJuIG5ldyBkdShbMF0pfXN0YXRpYyBvbmUoKXtyZXR1cm4gbmV3IGR1KFsxXSl9Y29uc3RydWN0b3IodCl7dGhpcy5kaWdpdHM9dH1jbG9uZSgpe3JldHVybiBuZXcgZHUodGhpcy5kaWdpdHMuc2xpY2UoKSl9YWRkKHQpe2xldCBlPXRoaXMuY2xvbmUoKTtyZXR1cm4gZS5hZGRUb1NlbGYodCksZX1hZGRUb1NlbGYodCl7bGV0IGU9TWF0aC5tYXgodGhpcy5kaWdpdHMubGVuZ3RoLHQuZGlnaXRzLmxlbmd0aCksaT0wO2ZvcihsZXQgcj0wO3I8ZTtyKyspe2xldCBvPWk7cjx0aGlzLmRpZ2l0cy5sZW5ndGgmJihvKz10aGlzLmRpZ2l0c1tyXSkscjx0LmRpZ2l0cy5sZW5ndGgmJihvKz10LmRpZ2l0c1tyXSksbz49MTA/KHRoaXMuZGlnaXRzW3JdPW8tMTAsaT0xKToodGhpcy5kaWdpdHNbcl09byxpPTApfWk+MCYmKHRoaXMuZGlnaXRzW2VdPTEpfXRvU3RyaW5nKCl7bGV0IHQ9IiI7Zm9yKGxldCBlPXRoaXMuZGlnaXRzLmxlbmd0aC0xO2U+PTA7ZS0tKXQrPXRoaXMuZGlnaXRzW2VdO3JldHVybiB0fX0sZXc9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wb3dlck9mVHdvcz1bdF19Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5wb3dlck9mVHdvc1swXX1tdWx0aXBseUJ5KHQpe2xldCBlPWR1Lnplcm8oKTtyZXR1cm4gdGhpcy5tdWx0aXBseUJ5QW5kQWRkVG8odCxlKSxlfW11bHRpcGx5QnlBbmRBZGRUbyh0LGUpe2ZvcihsZXQgaT0wOzAhPT10O3Q+Pj49MSxpKyspaWYoMSZ0KXtsZXQgcj10aGlzLmdldE11bHRpcGxpZWRCeVBvd2VyT2ZUd28oaSk7ZS5hZGRUb1NlbGYocil9fWdldE11bHRpcGxpZWRCeVBvd2VyT2ZUd28odCl7Zm9yKGxldCBlPXRoaXMucG93ZXJPZlR3b3MubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLnBvd2VyT2ZUd29zW2UtMV07dGhpcy5wb3dlck9mVHdvc1tlXT1pLmFkZChpKX1yZXR1cm4gdGhpcy5wb3dlck9mVHdvc1t0XX19O25ldyBjbGFzc3t2aXNpdFRleHQodCxlKXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0LGUpe3JldHVybmBbJHt0LmNoaWxkcmVuLm1hcChpPT5pLnZpc2l0KHRoaXMpKS5qb2luKCIsICIpfV1gfXZpc2l0SWN1KHQsZSl7bGV0IGk9T2JqZWN0LmtleXModC5jYXNlcykubWFwKHI9PmAke3J9IHske3QuY2FzZXNbcl0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LmV4cHJlc3Npb259LCAke3QudHlwZX0sICR7aS5qb2luKCIsICIpfX1gfXZpc2l0VGFnUGxhY2Vob2xkZXIodCxlKXtyZXR1cm4gdC5pc1ZvaWQ/YDxwaCB0YWcgbmFtZT0iJHt0LnN0YXJ0TmFtZX0iLz5gOmA8cGggdGFnIG5hbWU9IiR7dC5zdGFydE5hbWV9Ij4ke3QuY2hpbGRyZW4ubWFwKGk9PmkudmlzaXQodGhpcykpLmpvaW4oIiwgIil9PC9waCBuYW1lPSIke3QuY2xvc2VOYW1lfSI+YH12aXNpdFBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHQudmFsdWU/YDxwaCBuYW1lPSIke3QubmFtZX0iPiR7dC52YWx1ZX08L3BoPmA6YDxwaCBuYW1lPSIke3QubmFtZX0iLz5gfXZpc2l0SWN1UGxhY2Vob2xkZXIodCxlKXtyZXR1cm5gPHBoIGljdSBuYW1lPSIke3QubmFtZX0iPiR7dC52YWx1ZS52aXNpdCh0aGlzKX08L3BoPmB9fSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5iYXNlPXQsdGhpcy5leHBvbmVudHM9W25ldyBldyhkdS5vbmUoKSldfXRvVGhlUG93ZXJPZih0KXtmb3IobGV0IGU9dGhpcy5leHBvbmVudHMubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLmV4cG9uZW50c1tlLTFdLm11bHRpcGx5QnkodGhpcy5iYXNlKTt0aGlzLmV4cG9uZW50c1tlXT1uZXcgZXcoaSl9cmV0dXJuIHRoaXMuZXhwb25lbnRzW3RdfX0oMjU2KTt2YXIgdHc9ZnVuY3Rpb24obiwuLi50KXtpZih0dy50cmFuc2xhdGUpe2xldCBpPXR3LnRyYW5zbGF0ZShuLHQpO249aVswXSx0PWlbMV19bGV0IGU9U2ooblswXSxuLnJhd1swXSk7Zm9yKGxldCBpPTE7aTxuLmxlbmd0aDtpKyspZSs9dFtpLTFdK1NqKG5baV0sbi5yYXdbaV0pO3JldHVybiBlfSxudWU9IjoiO2Z1bmN0aW9uIFNqKG4sdCl7cmV0dXJuIHQuY2hhckF0KDApPT09bnVlP24uc3Vic3RyaW5nKGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTEsaT0xO2U8bi5sZW5ndGg7ZSsrLGkrKylpZigiXFwiPT09dFtpXSlpKys7ZWxzZSBpZihuW2VdPT09ZXVlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW50ZXJtaW5hdGVkICRsb2NhbGl6ZSBtZXRhZGF0YSBibG9jayBpbiAiJHt0fSIuYCl9KG4sdCkrMSk6bn0oKCk9PnR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpc3x8dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCkuJGxvY2FsaXplPXR3O3ZhciBZTz1udWxsO2Z1bmN0aW9uIFRsKCl7cmV0dXJuIFlPfXZhciBkdz1jbGFzc3t9LEx0PW5ldyBpZSgiRG9jdW1lbnRUb2tlbiIpLExqPSgoKT0+e2NsYXNzIG57aGlzdG9yeUdvKGUpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBrKEJqKX0scHJvdmlkZWRJbjoicGxhdGZvcm0ifSksbn0pKCk7bmV3IGllKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpO3ZhciBCaj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTGp7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZSx0aGlzLl9sb2NhdGlvbj13aW5kb3cubG9jYXRpb24sdGhpcy5faGlzdG9yeT13aW5kb3cuaGlzdG9yeX1nZXRCYXNlSHJlZkZyb21ET00oKXtyZXR1cm4gVGwoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfW9uUG9wU3RhdGUoZSl7bGV0IGk9VGwoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBpLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixlLCExKSwoKT0+aS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZSl9b25IYXNoQ2hhbmdlKGUpe2xldCBpPVRsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlLCExKSwoKT0+aS5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoZSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9ZX1wdXNoU3RhdGUoZSxpLHIpe1RqKCk/dGhpcy5faGlzdG9yeS5wdXNoU3RhdGUoZSxpLHIpOnRoaXMuX2xvY2F0aW9uLmhhc2g9cn1yZXBsYWNlU3RhdGUoZSxpLHIpe1RqKCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUoZSxpLHIpOnRoaXMuX2xvY2F0aW9uLmhhc2g9cn1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2hpc3RvcnkuZ28oZSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhMdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgQmooayhMdCkpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtmdW5jdGlvbiBUaigpe3JldHVybiEhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlfWZ1bmN0aW9uIFZqKG4sdCl7aWYoMD09bi5sZW5ndGgpcmV0dXJuIHQ7aWYoMD09dC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9MDtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpJiZlKyssdC5zdGFydHNXaXRoKCIvIikmJmUrKywyPT1lP24rdC5zdWJzdHJpbmcoMSk6MT09ZT9uK3Q6bisiLyIrdH1mdW5jdGlvbiBEaihuKXtsZXQgdD1uLm1hdGNoKC8jfFw/fCQvKSxlPXQmJnQuaW5kZXh8fG4ubGVuZ3RoO3JldHVybiBuLnNsaWNlKDAsZS0oIi8iPT09bltlLTFdPzE6MCkpK24uc2xpY2UoZSl9ZnVuY3Rpb24gWHAobil7cmV0dXJuIG4mJiI/IiE9PW5bMF0/Ij8iK246bn12YXIgSk89KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGFpKHN1ZSl9LHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksb3VlPW5ldyBpZSgiYXBwQmFzZUhyZWYiKSxzdWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEpPe2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWUsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5fYmFzZUhyZWY9aT8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/YWkoTHQpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShlKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShlKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShlKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBWaih0aGlzLl9iYXNlSHJlZixlKX1wYXRoKGU9ITEpe2xldCBpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrWHAodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiByJiZlP2Ake2l9JHtyfWA6aX1wdXNoU3RhdGUoZSxpLHIsbyl7bGV0IHM9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwocitYcChvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoZSxpLHMpfXJlcGxhY2VTdGF0ZShlLGkscixvKXtsZXQgcz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChyK1hwKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShlLGkscyl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGU9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhMaiksayhvdWUsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHdiPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fc3ViamVjdD1uZXcgRix0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1lO2xldCBpPXRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlUGF0aD1mdW5jdGlvbihuKXtpZihuZXcgUmVnRXhwKCJeKGh0dHBzPzopPy8vIikudGVzdChuKSl7bGV0WyxlXT1uLnNwbGl0KC9cL1wvW15cL10rLyk7cmV0dXJuIGV9cmV0dXJuIG59KERqKElqKGkpKSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKHI9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpyLnN0YXRlLHR5cGU6ci50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChlPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGUpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0aEVxdWFsVG8oZSxpPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrWHAoaSkpfW5vcm1hbGl6ZShlKXtyZXR1cm4gbi5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24obix0KXtpZighbnx8IXQuc3RhcnRzV2l0aChuKSlyZXR1cm4gdDtsZXQgZT10LnN1YnN0cmluZyhuLmxlbmd0aCk7cmV0dXJuIiI9PT1lfHxbIi8iLCI7IiwiPyIsIiMiXS5pbmNsdWRlcyhlWzBdKT9lOnR9KHRoaXMuX2Jhc2VQYXRoLElqKGUpKSl9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBlJiYiLyIhPT1lWzBdJiYoZT0iLyIrZSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwoZSl9Z28oZSxpPSIiLHI9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5wdXNoU3RhdGUociwiIixlLGkpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK1hwKGkpKSxyKX1yZXBsYWNlU3RhdGUoZSxpPSIiLHI9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5yZXBsYWNlU3RhdGUociwiIixlLGkpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK1hwKGkpKSxyKX1mb3J3YXJkKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuaGlzdG9yeUdvPy4oZSl9b25VcmxDaGFuZ2UoZSl7cmV0dXJuIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKGUpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbnx8KHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj10aGlzLnN1YnNjcmliZShpPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGkudXJsLGkuc3RhdGUpfSkpLCgpPT57bGV0IGk9dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmluZGV4T2YoZSk7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnNwbGljZShpLDEpLDA9PT10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMubGVuZ3RoJiYodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsKX19X25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhlPSIiLGkpe3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5mb3JFYWNoKHI9PnIoZSxpKSl9c3Vic2NyaWJlKGUsaSxyKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppLGNvbXBsZXRlOnJ9KX19cmV0dXJuIG4ubm9ybWFsaXplUXVlcnlQYXJhbXM9WHAsbi5qb2luV2l0aFNsYXNoPVZqLG4uc3RyaXBUcmFpbGluZ1NsYXNoPURqLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhKTykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgd2IoayhKTykpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIElqKG4pe3JldHVybiBuLnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgbHc9KCgpPT57cmV0dXJuKG49bHd8fChsdz17fSkpW24uRGVjaW1hbD0wXT0iRGVjaW1hbCIsbltuLlBlcmNlbnQ9MV09IlBlcmNlbnQiLG5bbi5DdXJyZW5jeT0yXT0iQ3VycmVuY3kiLG5bbi5TY2llbnRpZmljPTNdPSJTY2llbnRpZmljIixsdzt2YXIgbn0pKCksa289KCgpPT57cmV0dXJuKG49a298fChrbz17fSkpW24uRm9ybWF0PTBdPSJGb3JtYXQiLG5bbi5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixrbzt2YXIgbn0pKCkscWk9KCgpPT57cmV0dXJuKG49cWl8fChxaT17fSkpW24uTmFycm93PTBdPSJOYXJyb3ciLG5bbi5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLG5bbi5XaWRlPTJdPSJXaWRlIixuW24uU2hvcnQ9M109IlNob3J0IixxaTt2YXIgbn0pKCksYXM9KCgpPT57cmV0dXJuKG49YXN8fChhcz17fSkpW24uU2hvcnQ9MF09IlNob3J0IixuW24uTWVkaXVtPTFdPSJNZWRpdW0iLG5bbi5Mb25nPTJdPSJMb25nIixuW24uRnVsbD0zXT0iRnVsbCIsYXM7dmFyIG59KSgpLEdvPSgoKT0+e3JldHVybihuPUdvfHwoR289e30pKVtuLkRlY2ltYWw9MF09IkRlY2ltYWwiLG5bbi5Hcm91cD0xXT0iR3JvdXAiLG5bbi5MaXN0PTJdPSJMaXN0IixuW24uUGVyY2VudFNpZ249M109IlBlcmNlbnRTaWduIixuW24uUGx1c1NpZ249NF09IlBsdXNTaWduIixuW24uTWludXNTaWduPTVdPSJNaW51c1NpZ24iLG5bbi5FeHBvbmVudGlhbD02XT0iRXhwb25lbnRpYWwiLG5bbi5TdXBlcnNjcmlwdGluZ0V4cG9uZW50PTddPSJTdXBlcnNjcmlwdGluZ0V4cG9uZW50IixuW24uUGVyTWlsbGU9OF09IlBlck1pbGxlIixuW24uSW5maW5pdHk9OV09IkluZmluaXR5IixuW24uTmFOPTEwXT0iTmFOIixuW24uVGltZVNlcGFyYXRvcj0xMV09IlRpbWVTZXBhcmF0b3IiLG5bbi5DdXJyZW5jeURlY2ltYWw9MTJdPSJDdXJyZW5jeURlY2ltYWwiLG5bbi5DdXJyZW5jeUdyb3VwPTEzXT0iQ3VycmVuY3lHcm91cCIsR287dmFyIG59KSgpO2Z1bmN0aW9uIG53KG4sdCl7cmV0dXJuIE5hKFJzKG4pW2dyLkRhdGVGb3JtYXRdLHQpfWZ1bmN0aW9uIGl3KG4sdCl7cmV0dXJuIE5hKFJzKG4pW2dyLlRpbWVGb3JtYXRdLHQpfWZ1bmN0aW9uIHJ3KG4sdCl7cmV0dXJuIE5hKFJzKG4pW2dyLkRhdGVUaW1lRm9ybWF0XSx0KX1mdW5jdGlvbiB1ZChuLHQpe2xldCBlPVJzKG4pLGk9ZVtnci5OdW1iZXJTeW1ib2xzXVt0XTtpZih0eXBlb2YgaT4idSIpe2lmKHQ9PT1Hby5DdXJyZW5jeURlY2ltYWwpcmV0dXJuIGVbZ3IuTnVtYmVyU3ltYm9sc11bR28uRGVjaW1hbF07aWYodD09PUdvLkN1cnJlbmN5R3JvdXApcmV0dXJuIGVbZ3IuTnVtYmVyU3ltYm9sc11bR28uR3JvdXBdfXJldHVybiBpfWZ1bmN0aW9uIEhqKG4pe2lmKCFuW2dyLkV4dHJhRGF0YV0pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV4dHJhIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICIke25bZ3IuTG9jYWxlSWRdfSIuIFVzZSAicmVnaXN0ZXJMb2NhbGVEYXRhIiB0byBsb2FkIG5ldyBkYXRhLiBTZWUgdGhlICJJMThuIGd1aWRlIiBvbiBhbmd1bGFyLmlvIHRvIGtub3cgbW9yZS5gKX1mdW5jdGlvbiBOYShuLHQpe2ZvcihsZXQgZT10O2U+LTE7ZS0tKWlmKHR5cGVvZiBuW2VdPCJ1IilyZXR1cm4gbltlXTt0aHJvdyBuZXcgRXJyb3IoIkxvY2FsZSBkYXRhIEFQSTogbG9jYWxlIGRhdGEgdW5kZWZpbmVkIil9ZnVuY3Rpb24gek8obil7bGV0W3QsZV09bi5zcGxpdCgiOiIpO3JldHVybntob3VyczordCxtaW51dGVzOitlfX12YXIgYnVlPS9eKFxkezQsfSktPyhcZFxkKS0/KFxkXGQpKD86VChcZFxkKSg/Ojo/KFxkXGQpKD86Oj8oXGRcZCkoPzpcLihcZCspKT8pPyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkpPyk/JC8sQ2I9e30sdnVlPS8oKD86W15CRUdITE1PU1dZWmFiY2RobXN3eXonXSspfCg/OicoPzpbXiddfCcnKSonKXwoPzpHezEsNX18eXsxLDR9fFl7MSw0fXxNezEsNX18THsxLDV9fHd7MSwyfXxXezF9fGR7MSwyfXxFezEsNn18Y3sxLDZ9fGF7MSw1fXxiezEsNX18QnsxLDV9fGh7MSwyfXxIezEsMn18bXsxLDJ9fHN7MSwyfXxTezEsM318ensxLDR9fFp7MSw1fXxPezEsNH0pKShbXHNcU10qKS8sRWw9KCgpPT57cmV0dXJuKG49RWx8fChFbD17fSkpW24uU2hvcnQ9MF09IlNob3J0IixuW24uU2hvcnRHTVQ9MV09IlNob3J0R01UIixuW24uTG9uZz0yXT0iTG9uZyIsbltuLkV4dGVuZGVkPTNdPSJFeHRlbmRlZCIsRWw7dmFyIG59KSgpLElpPSgoKT0+e3JldHVybihuPUlpfHwoSWk9e30pKVtuLkZ1bGxZZWFyPTBdPSJGdWxsWWVhciIsbltuLk1vbnRoPTFdPSJNb250aCIsbltuLkRhdGU9Ml09IkRhdGUiLG5bbi5Ib3Vycz0zXT0iSG91cnMiLG5bbi5NaW51dGVzPTRdPSJNaW51dGVzIixuW24uU2Vjb25kcz01XT0iU2Vjb25kcyIsbltuLkZyYWN0aW9uYWxTZWNvbmRzPTZdPSJGcmFjdGlvbmFsU2Vjb25kcyIsbltuLkRheT03XT0iRGF5IixJaTt2YXIgbn0pKCksRGk9KCgpPT57cmV0dXJuKG49RGl8fChEaT17fSkpW24uRGF5UGVyaW9kcz0wXT0iRGF5UGVyaW9kcyIsbltuLkRheXM9MV09IkRheXMiLG5bbi5Nb250aHM9Ml09Ik1vbnRocyIsbltuLkVyYXM9M109IkVyYXMiLERpO3ZhciBufSkoKTtmdW5jdGlvbiB5dWUobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obil7aWYoQWoobikpcmV0dXJuIG47aWYoIm51bWJlciI9PXR5cGVvZiBuJiYhaXNOYU4obikpcmV0dXJuIG5ldyBEYXRlKG4pO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7aWYobj1uLnRyaW0oKSwvXihcZHs0fSgtXGR7MSwyfSgtXGR7MSwyfSk/KT8pJC8udGVzdChuKSl7bGV0W3Isbz0xLHM9MV09bi5zcGxpdCgiLSIpLm1hcChhPT4rYSk7cmV0dXJuIHV3KHIsby0xLHMpfWxldCBpLGU9cGFyc2VGbG9hdChuKTtpZighaXNOYU4obi1lKSlyZXR1cm4gbmV3IERhdGUoZSk7aWYoaT1uLm1hdGNoKGJ1ZSkpcmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PW5ldyBEYXRlKDApLGU9MCxpPTAscj1uWzhdP3Quc2V0VVRDRnVsbFllYXI6dC5zZXRGdWxsWWVhcixvPW5bOF0/dC5zZXRVVENIb3Vyczp0LnNldEhvdXJzO25bOV0mJihlPU51bWJlcihuWzldK25bMTBdKSxpPU51bWJlcihuWzldK25bMTFdKSksci5jYWxsKHQsTnVtYmVyKG5bMV0pLE51bWJlcihuWzJdKS0xLE51bWJlcihuWzNdKSk7bGV0IHM9TnVtYmVyKG5bNF18fDApLWUsYT1OdW1iZXIobls1XXx8MCktaSxsPU51bWJlcihuWzZdfHwwKSxjPU1hdGguZmxvb3IoMWUzKnBhcnNlRmxvYXQoIjAuIisobls3XXx8MCkpKTtyZXR1cm4gby5jYWxsKHQscyxhLGwsYyksdH0oaSl9bGV0IHQ9bmV3IERhdGUobik7aWYoIUFqKHQpKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGNvbnZlcnQgIiR7bn0iIGludG8gYSBkYXRlYCk7cmV0dXJuIHR9KG4pO3Q9ZGQoZSx0KXx8dDtsZXQgYSxzPVtdO2Zvcig7dDspe2lmKGE9dnVlLmV4ZWModCksIWEpe3MucHVzaCh0KTticmVha317cz1zLmNvbmNhdChhLnNsaWNlKDEpKTtsZXQgZD1zLnBvcCgpO2lmKCFkKWJyZWFrO3Q9ZH19bGV0IGw9ci5nZXRUaW1lem9uZU9mZnNldCgpO2kmJihsPVVqKGksbCkscj1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybiBmdW5jdGlvbihuLHQpe3JldHVybihuPW5ldyBEYXRlKG4uZ2V0VGltZSgpKSkuc2V0TWludXRlcyhuLmdldE1pbnV0ZXMoKSt0KSxufShuLC0xKihVaih0LHIpLXIpKX0ocixpKSk7bGV0IGM9IiI7cmV0dXJuIHMuZm9yRWFjaChkPT57bGV0IHU9ZnVuY3Rpb24obil7aWYoak9bbl0pcmV0dXJuIGpPW25dO2xldCB0O3N3aXRjaChuKXtjYXNlIkciOmNhc2UiR0ciOmNhc2UiR0dHIjp0PW9yKERpLkVyYXMscWkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiR0dHRyI6dD1vcihEaS5FcmFzLHFpLldpZGUpO2JyZWFrO2Nhc2UiR0dHR0ciOnQ9b3IoRGkuRXJhcyxxaS5OYXJyb3cpO2JyZWFrO2Nhc2UieSI6dD1lbyhJaS5GdWxsWWVhciwxLDAsITEsITApO2JyZWFrO2Nhc2UieXkiOnQ9ZW8oSWkuRnVsbFllYXIsMiwwLCEwLCEwKTticmVhaztjYXNlInl5eSI6dD1lbyhJaS5GdWxsWWVhciwzLDAsITEsITApO2JyZWFrO2Nhc2UieXl5eSI6dD1lbyhJaS5GdWxsWWVhciw0LDAsITEsITApO2JyZWFrO2Nhc2UiWSI6dD1hdygxKTticmVhaztjYXNlIllZIjp0PWF3KDIsITApO2JyZWFrO2Nhc2UiWVlZIjp0PWF3KDMpO2JyZWFrO2Nhc2UiWVlZWSI6dD1hdyg0KTticmVhaztjYXNlIk0iOmNhc2UiTCI6dD1lbyhJaS5Nb250aCwxLDEpO2JyZWFrO2Nhc2UiTU0iOmNhc2UiTEwiOnQ9ZW8oSWkuTW9udGgsMiwxKTticmVhaztjYXNlIk1NTSI6dD1vcihEaS5Nb250aHMscWkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiTU1NTSI6dD1vcihEaS5Nb250aHMscWkuV2lkZSk7YnJlYWs7Y2FzZSJNTU1NTSI6dD1vcihEaS5Nb250aHMscWkuTmFycm93KTticmVhaztjYXNlIkxMTCI6dD1vcihEaS5Nb250aHMscWkuQWJicmV2aWF0ZWQsa28uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJMTExMIjp0PW9yKERpLk1vbnRocyxxaS5XaWRlLGtvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTEwiOnQ9b3IoRGkuTW9udGhzLHFpLk5hcnJvdyxrby5TdGFuZGFsb25lKTticmVhaztjYXNlInciOnQ9VU8oMSk7YnJlYWs7Y2FzZSJ3dyI6dD1VTygyKTticmVhaztjYXNlIlciOnQ9VU8oMSwhMCk7YnJlYWs7Y2FzZSJkIjp0PWVvKElpLkRhdGUsMSk7YnJlYWs7Y2FzZSJkZCI6dD1lbyhJaS5EYXRlLDIpO2JyZWFrO2Nhc2UiYyI6Y2FzZSJjYyI6dD1lbyhJaS5EYXksMSk7YnJlYWs7Y2FzZSJjY2MiOnQ9b3IoRGkuRGF5cyxxaS5BYmJyZXZpYXRlZCxrby5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2MiOnQ9b3IoRGkuRGF5cyxxaS5XaWRlLGtvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2MiOnQ9b3IoRGkuRGF5cyxxaS5OYXJyb3csa28uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjY2MiOnQ9b3IoRGkuRGF5cyxxaS5TaG9ydCxrby5TdGFuZGFsb25lKTticmVhaztjYXNlIkUiOmNhc2UiRUUiOmNhc2UiRUVFIjp0PW9yKERpLkRheXMscWkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiRUVFRSI6dD1vcihEaS5EYXlzLHFpLldpZGUpO2JyZWFrO2Nhc2UiRUVFRUUiOnQ9b3IoRGkuRGF5cyxxaS5OYXJyb3cpO2JyZWFrO2Nhc2UiRUVFRUVFIjp0PW9yKERpLkRheXMscWkuU2hvcnQpO2JyZWFrO2Nhc2UiYSI6Y2FzZSJhYSI6Y2FzZSJhYWEiOnQ9b3IoRGkuRGF5UGVyaW9kcyxxaS5BYmJyZXZpYXRlZCk7YnJlYWs7Y2FzZSJhYWFhIjp0PW9yKERpLkRheVBlcmlvZHMscWkuV2lkZSk7YnJlYWs7Y2FzZSJhYWFhYSI6dD1vcihEaS5EYXlQZXJpb2RzLHFpLk5hcnJvdyk7YnJlYWs7Y2FzZSJiIjpjYXNlImJiIjpjYXNlImJiYiI6dD1vcihEaS5EYXlQZXJpb2RzLHFpLkFiYnJldmlhdGVkLGtvLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYiI6dD1vcihEaS5EYXlQZXJpb2RzLHFpLldpZGUsa28uU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJiYmJiYiI6dD1vcihEaS5EYXlQZXJpb2RzLHFpLk5hcnJvdyxrby5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlIkIiOmNhc2UiQkIiOmNhc2UiQkJCIjp0PW9yKERpLkRheVBlcmlvZHMscWkuQWJicmV2aWF0ZWQsa28uRm9ybWF0LCEwKTticmVhaztjYXNlIkJCQkIiOnQ9b3IoRGkuRGF5UGVyaW9kcyxxaS5XaWRlLGtvLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCQiI6dD1vcihEaS5EYXlQZXJpb2RzLHFpLk5hcnJvdyxrby5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiaCI6dD1lbyhJaS5Ib3VycywxLC0xMik7YnJlYWs7Y2FzZSJoaCI6dD1lbyhJaS5Ib3VycywyLC0xMik7YnJlYWs7Y2FzZSJIIjp0PWVvKElpLkhvdXJzLDEpO2JyZWFrO2Nhc2UiSEgiOnQ9ZW8oSWkuSG91cnMsMik7YnJlYWs7Y2FzZSJtIjp0PWVvKElpLk1pbnV0ZXMsMSk7YnJlYWs7Y2FzZSJtbSI6dD1lbyhJaS5NaW51dGVzLDIpO2JyZWFrO2Nhc2UicyI6dD1lbyhJaS5TZWNvbmRzLDEpO2JyZWFrO2Nhc2Uic3MiOnQ9ZW8oSWkuU2Vjb25kcywyKTticmVhaztjYXNlIlMiOnQ9ZW8oSWkuRnJhY3Rpb25hbFNlY29uZHMsMSk7YnJlYWs7Y2FzZSJTUyI6dD1lbyhJaS5GcmFjdGlvbmFsU2Vjb25kcywyKTticmVhaztjYXNlIlNTUyI6dD1lbyhJaS5GcmFjdGlvbmFsU2Vjb25kcywzKTticmVhaztjYXNlIloiOmNhc2UiWloiOmNhc2UiWlpaIjp0PXN3KEVsLlNob3J0KTticmVhaztjYXNlIlpaWlpaIjp0PXN3KEVsLkV4dGVuZGVkKTticmVhaztjYXNlIk8iOmNhc2UiT08iOmNhc2UiT09PIjpjYXNlInoiOmNhc2UienoiOmNhc2Uienp6Ijp0PXN3KEVsLlNob3J0R01UKTticmVhaztjYXNlIk9PT08iOmNhc2UiWlpaWiI6Y2FzZSJ6enp6Ijp0PXN3KEVsLkxvbmcpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIGpPW25dPXQsdH0oZCk7Yys9dT91KHIsZSxsKToiJyciPT09ZD8iJyI6ZC5yZXBsYWNlKC8oXid8JyQpL2csIiIpLnJlcGxhY2UoLycnL2csIiciKX0pLGN9ZnVuY3Rpb24gdXcobix0LGUpe2xldCBpPW5ldyBEYXRlKDApO3JldHVybiBpLnNldEZ1bGxZZWFyKG4sdCxlKSxpLnNldEhvdXJzKDAsMCwwKSxpfWZ1bmN0aW9uIGRkKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIFJzKG4pW2dyLkxvY2FsZUlkXX0obik7aWYoQ2JbZV09Q2JbZV18fHt9LENiW2VdW3RdKXJldHVybiBDYltlXVt0XTtsZXQgaT0iIjtzd2l0Y2godCl7Y2FzZSJzaG9ydERhdGUiOmk9bncobixhcy5TaG9ydCk7YnJlYWs7Y2FzZSJtZWRpdW1EYXRlIjppPW53KG4sYXMuTWVkaXVtKTticmVhaztjYXNlImxvbmdEYXRlIjppPW53KG4sYXMuTG9uZyk7YnJlYWs7Y2FzZSJmdWxsRGF0ZSI6aT1udyhuLGFzLkZ1bGwpO2JyZWFrO2Nhc2Uic2hvcnRUaW1lIjppPWl3KG4sYXMuU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtVGltZSI6aT1pdyhuLGFzLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nVGltZSI6aT1pdyhuLGFzLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbFRpbWUiOmk9aXcobixhcy5GdWxsKTticmVhaztjYXNlInNob3J0IjpsZXQgcj1kZChuLCJzaG9ydFRpbWUiKSxvPWRkKG4sInNob3J0RGF0ZSIpO2k9b3cocncobixhcy5TaG9ydCksW3Isb10pO2JyZWFrO2Nhc2UibWVkaXVtIjpsZXQgcz1kZChuLCJtZWRpdW1UaW1lIiksYT1kZChuLCJtZWRpdW1EYXRlIik7aT1vdyhydyhuLGFzLk1lZGl1bSksW3MsYV0pO2JyZWFrO2Nhc2UibG9uZyI6bGV0IGw9ZGQobiwibG9uZ1RpbWUiKSxjPWRkKG4sImxvbmdEYXRlIik7aT1vdyhydyhuLGFzLkxvbmcpLFtsLGNdKTticmVhaztjYXNlImZ1bGwiOmxldCBkPWRkKG4sImZ1bGxUaW1lIiksdT1kZChuLCJmdWxsRGF0ZSIpO2k9b3cocncobixhcy5GdWxsKSxbZCx1XSl9cmV0dXJuIGkmJihDYltlXVt0XT1pKSxpfWZ1bmN0aW9uIG93KG4sdCl7cmV0dXJuIHQmJihuPW4ucmVwbGFjZSgvXHsoW159XSspfS9nLGZ1bmN0aW9uKGUsaSl7cmV0dXJuIG51bGwhPXQmJmkgaW4gdD90W2ldOmV9KSksbn1mdW5jdGlvbiBTbChuLHQsZT0iLSIsaSxyKXtsZXQgbz0iIjsobjwwfHxyJiZuPD0wKSYmKHI/bj0xLW46KG49LW4sbz1lKSk7bGV0IHM9U3RyaW5nKG4pO2Zvcig7cy5sZW5ndGg8dDspcz0iMCIrcztyZXR1cm4gaSYmKHM9cy5zbGljZShzLmxlbmd0aC10KSksbytzfWZ1bmN0aW9uIGVvKG4sdCxlPTAsaT0hMSxyPSExKXtyZXR1cm4gZnVuY3Rpb24obyxzKXtsZXQgYT1mdW5jdGlvbihuLHQpe3N3aXRjaChuKXtjYXNlIElpLkZ1bGxZZWFyOnJldHVybiB0LmdldEZ1bGxZZWFyKCk7Y2FzZSBJaS5Nb250aDpyZXR1cm4gdC5nZXRNb250aCgpO2Nhc2UgSWkuRGF0ZTpyZXR1cm4gdC5nZXREYXRlKCk7Y2FzZSBJaS5Ib3VyczpyZXR1cm4gdC5nZXRIb3VycygpO2Nhc2UgSWkuTWludXRlczpyZXR1cm4gdC5nZXRNaW51dGVzKCk7Y2FzZSBJaS5TZWNvbmRzOnJldHVybiB0LmdldFNlY29uZHMoKTtjYXNlIElpLkZyYWN0aW9uYWxTZWNvbmRzOnJldHVybiB0LmdldE1pbGxpc2Vjb25kcygpO2Nhc2UgSWkuRGF5OnJldHVybiB0LmdldERheSgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERhdGVUeXBlIHZhbHVlICIke259Ii5gKX19KG4sbyk7aWYoKGU+MHx8YT4tZSkmJihhKz1lKSxuPT09SWkuSG91cnMpMD09PWEmJi0xMj09PWUmJihhPTEyKTtlbHNlIGlmKG49PT1JaS5GcmFjdGlvbmFsU2Vjb25kcylyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gU2wobiwzKS5zdWJzdHJpbmcoMCx0KX0oYSx0KTtsZXQgbD11ZChzLEdvLk1pbnVzU2lnbik7cmV0dXJuIFNsKGEsdCxsLGkscil9fWZ1bmN0aW9uIG9yKG4sdCxlPWtvLkZvcm1hdCxpPSExKXtyZXR1cm4gZnVuY3Rpb24ocixvKXtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSxyLG8pe3N3aXRjaChlKXtjYXNlIERpLk1vbnRoczpyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPVJzKG4pLG89TmEoW2lbZ3IuTW9udGhzRm9ybWF0XSxpW2dyLk1vbnRoc1N0YW5kYWxvbmVdXSx0KTtyZXR1cm4gTmEobyxlKX0odCxyLGkpW24uZ2V0TW9udGgoKV07Y2FzZSBEaS5EYXlzOnJldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9UnMobiksbz1OYShbaVtnci5EYXlzRm9ybWF0XSxpW2dyLkRheXNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIE5hKG8sZSl9KHQscixpKVtuLmdldERheSgpXTtjYXNlIERpLkRheVBlcmlvZHM6bGV0IHM9bi5nZXRIb3VycygpLGE9bi5nZXRNaW51dGVzKCk7aWYobyl7bGV0IGM9ZnVuY3Rpb24obil7bGV0IHQ9UnMobik7cmV0dXJuIEhqKHQpLCh0W2dyLkV4dHJhRGF0YV1bMl18fFtdKS5tYXAoaT0+InN0cmluZyI9PXR5cGVvZiBpP3pPKGkpOlt6TyhpWzBdKSx6TyhpWzFdKV0pfSh0KSxkPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1ScyhuKTtIaihpKTtsZXQgbz1OYShbaVtnci5FeHRyYURhdGFdWzBdLGlbZ3IuRXh0cmFEYXRhXVsxXV0sdCl8fFtdO3JldHVybiBOYShvLGUpfHxbXX0odCxyLGkpLHU9Yy5maW5kSW5kZXgocD0+e2lmKEFycmF5LmlzQXJyYXkocCkpe2xldFtmLG1dPXAsYj1zPj1mLmhvdXJzJiZhPj1mLm1pbnV0ZXMsTT1zPG0uaG91cnN8fHM9PT1tLmhvdXJzJiZhPG0ubWludXRlcztpZihmLmhvdXJzPG0uaG91cnMpe2lmKGImJk0pcmV0dXJuITB9ZWxzZSBpZihifHxNKXJldHVybiEwfWVsc2UgaWYocC5ob3Vycz09PXMmJnAubWludXRlcz09PWEpcmV0dXJuITA7cmV0dXJuITF9KTtpZigtMSE9PXUpcmV0dXJuIGRbdV19cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1ScyhuKSxvPU5hKFtpW2dyLkRheVBlcmlvZHNGb3JtYXRdLGlbZ3IuRGF5UGVyaW9kc1N0YW5kYWxvbmVdXSx0KTtyZXR1cm4gTmEobyxlKX0odCxyLGkpW3M8MTI/MDoxXTtjYXNlIERpLkVyYXM6cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIE5hKFJzKG4pW2dyLkVyYXNdLHQpfSh0LGkpW24uZ2V0RnVsbFllYXIoKTw9MD8wOjFdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHRyYW5zbGF0aW9uIHR5cGUgJHtlfWApfX0ocixvLG4sdCxlLGkpfX1mdW5jdGlvbiBzdyhuKXtyZXR1cm4gZnVuY3Rpb24odCxlLGkpe2xldCByPS0xKmksbz11ZChlLEdvLk1pbnVzU2lnbikscz1yPjA/TWF0aC5mbG9vcihyLzYwKTpNYXRoLmNlaWwoci82MCk7c3dpdGNoKG4pe2Nhc2UgRWwuU2hvcnQ6cmV0dXJuKHI+PTA/IisiOiIiKStTbChzLDIsbykrU2woTWF0aC5hYnMociU2MCksMixvKTtjYXNlIEVsLlNob3J0R01UOnJldHVybiJHTVQiKyhyPj0wPyIrIjoiIikrU2wocywxLG8pO2Nhc2UgRWwuTG9uZzpyZXR1cm4iR01UIisocj49MD8iKyI6IiIpK1NsKHMsMixvKSsiOiIrU2woTWF0aC5hYnMociU2MCksMixvKTtjYXNlIEVsLkV4dGVuZGVkOnJldHVybiAwPT09aT8iWiI6KHI+PTA/IisiOiIiKStTbChzLDIsbykrIjoiK1NsKE1hdGguYWJzKHIlNjApLDIsbyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gem9uZSB3aWR0aCAiJHtufSJgKX19fXZhciB3dWU9MCxjdz00O2Z1bmN0aW9uIHpqKG4pe3JldHVybiB1dyhuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKyhjdy1uLmdldERheSgpKSl9ZnVuY3Rpb24gVU8obix0PSExKXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcjtpZih0KXtsZXQgbz1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLDEpLmdldERheSgpLTEscz1lLmdldERhdGUoKTtyPTErTWF0aC5mbG9vcigocytvKS83KX1lbHNle2xldCBvPXpqKGUpLHM9ZnVuY3Rpb24obil7bGV0IHQ9dXcobix3dWUsMSkuZ2V0RGF5KCk7cmV0dXJuIHV3KG4sMCwxKyh0PD1jdz9jdzpjdys3KS10KX0oby5nZXRGdWxsWWVhcigpKSxhPW8uZ2V0VGltZSgpLXMuZ2V0VGltZSgpO3I9MStNYXRoLnJvdW5kKGEvNjA0OGU1KX1yZXR1cm4gU2wocixuLHVkKGksR28uTWludXNTaWduKSl9fWZ1bmN0aW9uIGF3KG4sdD0hMSl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7cmV0dXJuIFNsKHpqKGUpLmdldEZ1bGxZZWFyKCksbix1ZChpLEdvLk1pbnVzU2lnbiksdCl9fXZhciBqTz17fTtmdW5jdGlvbiBVaihuLHQpe249bi5yZXBsYWNlKC86L2csIiIpO2xldCBlPURhdGUucGFyc2UoIkphbiAwMSwgMTk3MCAwMDowMDowMCAiK24pLzZlNDtyZXR1cm4gaXNOYU4oZSk/dDplfWZ1bmN0aW9uIEFqKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKG4udmFsdWVPZigpKX12YXIgUnVlPS9eKFxkKyk/XC4oKFxkKykoLShcZCspKT8pPyQvLFJqPTIyLHB3PSIuIixNYj0iMCIsUHVlPSI7IixPdWU9IiwiLEdPPSIjIjtmdW5jdGlvbiAkTyhuLHQsZSl7bGV0IGk9ZnVuY3Rpb24obix0KXtyZXR1cm4gUnMobilbZ3IuTnVtYmVyRm9ybWF0c11bdF19KHQsbHcuRGVjaW1hbCkscj1mdW5jdGlvbihuLHQ9Ii0iKXtsZXQgZT17bWluSW50OjEsbWluRnJhYzowLG1heEZyYWM6MCxwb3NQcmU6IiIscG9zU3VmOiIiLG5lZ1ByZToiIixuZWdTdWY6IiIsZ1NpemU6MCxsZ1NpemU6MH0saT1uLnNwbGl0KFB1ZSkscj1pWzBdLG89aVsxXSxzPS0xIT09ci5pbmRleE9mKHB3KT9yLnNwbGl0KHB3KTpbci5zdWJzdHJpbmcoMCxyLmxhc3RJbmRleE9mKE1iKSsxKSxyLnN1YnN0cmluZyhyLmxhc3RJbmRleE9mKE1iKSsxKV0sYT1zWzBdLGw9c1sxXXx8IiI7ZS5wb3NQcmU9YS5zdWJzdHJpbmcoMCxhLmluZGV4T2YoR08pKTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl7bGV0IHU9bC5jaGFyQXQoZCk7dT09PU1iP2UubWluRnJhYz1lLm1heEZyYWM9ZCsxOnU9PT1HTz9lLm1heEZyYWM9ZCsxOmUucG9zU3VmKz11fWxldCBjPWEuc3BsaXQoT3VlKTtpZihlLmdTaXplPWNbMV0/Y1sxXS5sZW5ndGg6MCxlLmxnU2l6ZT1jWzJdfHxjWzFdPyhjWzJdfHxjWzFdKS5sZW5ndGg6MCxvKXtsZXQgZD1yLmxlbmd0aC1lLnBvc1ByZS5sZW5ndGgtZS5wb3NTdWYubGVuZ3RoLHU9by5pbmRleE9mKEdPKTtlLm5lZ1ByZT1vLnN1YnN0cmluZygwLHUpLnJlcGxhY2UoLycvZywiIiksZS5uZWdTdWY9by5zbGljZSh1K2QpLnJlcGxhY2UoLycvZywiIil9ZWxzZSBlLm5lZ1ByZT10K2UucG9zUHJlLGUubmVnU3VmPWUucG9zU3VmO3JldHVybiBlfShpLHVkKHQsR28uTWludXNTaWduKSk7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscixvLHM9ITEpe2xldCBhPSIiLGw9ITE7aWYoaXNGaW5pdGUobikpe2xldCBjPWZ1bmN0aW9uKG4pe2xldCBpLHIsbyxzLGEsdD1NYXRoLmFicyhuKSsiIixlPTA7Zm9yKChyPXQuaW5kZXhPZihwdykpPi0xJiYodD10LnJlcGxhY2UocHcsIiIpKSwobz10LnNlYXJjaCgvZS9pKSk+MD8ocjwwJiYocj1vKSxyKz0rdC5zbGljZShvKzEpLHQ9dC5zdWJzdHJpbmcoMCxvKSk6cjwwJiYocj10Lmxlbmd0aCksbz0wO3QuY2hhckF0KG8pPT09TWI7bysrKTtpZihvPT09KGE9dC5sZW5ndGgpKWk9WzBdLHI9MTtlbHNle2ZvcihhLS07dC5jaGFyQXQoYSk9PT1NYjspYS0tO2ZvcihyLT1vLGk9W10scz0wO288PWE7bysrLHMrKylpW3NdPU51bWJlcih0LmNoYXJBdChvKSl9cmV0dXJuIHI+UmomJihpPWkuc3BsaWNlKDAsUmotMSksZT1yLTEscj0xKSx7ZGlnaXRzOmksZXhwb25lbnQ6ZSxpbnRlZ2VyTGVuOnJ9fShuKTtzJiYoYz1mdW5jdGlvbihuKXtpZigwPT09bi5kaWdpdHNbMF0pcmV0dXJuIG47bGV0IHQ9bi5kaWdpdHMubGVuZ3RoLW4uaW50ZWdlckxlbjtyZXR1cm4gbi5leHBvbmVudD9uLmV4cG9uZW50Kz0yOigwPT09dD9uLmRpZ2l0cy5wdXNoKDAsMCk6MT09PXQmJm4uZGlnaXRzLnB1c2goMCksbi5pbnRlZ2VyTGVuKz0yKSxufShjKSk7bGV0IGQ9dC5taW5JbnQsdT10Lm1pbkZyYWMscD10Lm1heEZyYWM7aWYobyl7bGV0IHg9by5tYXRjaChSdWUpO2lmKG51bGw9PT14KXRocm93IG5ldyBFcnJvcihgJHtvfSBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvYCk7bGV0IFI9eFsxXSxBPXhbM10sVj14WzVdO251bGwhPVImJihkPVdPKFIpKSxudWxsIT1BJiYodT1XTyhBKSksbnVsbCE9Vj9wPVdPKFYpOm51bGwhPUEmJnU+cCYmKHA9dSl9IWZ1bmN0aW9uKG4sdCxlKXtpZih0PmUpdGhyb3cgbmV3IEVycm9yKGBUaGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGZyYWN0aW9uICgke3R9KSBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bSAoJHtlfSkuYCk7bGV0IGk9bi5kaWdpdHMscj1pLmxlbmd0aC1uLmludGVnZXJMZW4sbz1NYXRoLm1pbihNYXRoLm1heCh0LHIpLGUpLHM9bytuLmludGVnZXJMZW4sYT1pW3NdO2lmKHM+MCl7aS5zcGxpY2UoTWF0aC5tYXgobi5pbnRlZ2VyTGVuLHMpKTtmb3IobGV0IHU9czt1PGkubGVuZ3RoO3UrKylpW3VdPTB9ZWxzZXtyPU1hdGgubWF4KDAsciksbi5pbnRlZ2VyTGVuPTEsaS5sZW5ndGg9TWF0aC5tYXgoMSxzPW8rMSksaVswXT0wO2ZvcihsZXQgdT0xO3U8czt1KyspaVt1XT0wfWlmKGE+PTUpaWYocy0xPDApe2ZvcihsZXQgdT0wO3U+czt1LS0paS51bnNoaWZ0KDApLG4uaW50ZWdlckxlbisrO2kudW5zaGlmdCgxKSxuLmludGVnZXJMZW4rK31lbHNlIGlbcy0xXSsrO2Zvcig7cjxNYXRoLm1heCgwLG8pO3IrKylpLnB1c2goMCk7bGV0IGw9MCE9PW8sYz10K24uaW50ZWdlckxlbixkPWkucmVkdWNlUmlnaHQoZnVuY3Rpb24odSxwLGYsbSl7cmV0dXJuIG1bZl09KHArPXUpPDEwP3A6cC0xMCxsJiYoMD09PW1bZl0mJmY+PWM/bS5wb3AoKTpsPSExKSxwPj0xMD8xOjB9LDApO2QmJihpLnVuc2hpZnQoZCksbi5pbnRlZ2VyTGVuKyspfShjLHUscCk7bGV0IGY9Yy5kaWdpdHMsbT1jLmludGVnZXJMZW4sYj1jLmV4cG9uZW50LE09W107Zm9yKGw9Zi5ldmVyeSh4PT4heCk7bTxkO20rKylmLnVuc2hpZnQoMCk7Zm9yKDttPDA7bSsrKWYudW5zaGlmdCgwKTttPjA/TT1mLnNwbGljZShtLGYubGVuZ3RoKTooTT1mLGY9WzBdKTtsZXQgeT1bXTtmb3IoZi5sZW5ndGg+PXQubGdTaXplJiZ5LnVuc2hpZnQoZi5zcGxpY2UoLXQubGdTaXplLGYubGVuZ3RoKS5qb2luKCIiKSk7Zi5sZW5ndGg+dC5nU2l6ZTspeS51bnNoaWZ0KGYuc3BsaWNlKC10LmdTaXplLGYubGVuZ3RoKS5qb2luKCIiKSk7Zi5sZW5ndGgmJnkudW5zaGlmdChmLmpvaW4oIiIpKSxhPXkuam9pbih1ZChlLGkpKSxNLmxlbmd0aCYmKGErPXVkKGUscikrTS5qb2luKCIiKSksYiYmKGErPXVkKGUsR28uRXhwb25lbnRpYWwpKyIrIitiKX1lbHNlIGE9dWQoZSxHby5JbmZpbml0eSk7cmV0dXJuIGE9bjwwJiYhbD90Lm5lZ1ByZSthK3QubmVnU3VmOnQucG9zUHJlK2ErdC5wb3NTdWYsYX0obixyLHQsR28uR3JvdXAsR28uRGVjaW1hbCxlKX1mdW5jdGlvbiBXTyhuKXtsZXQgdD1wYXJzZUludChuKTtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK24pO3JldHVybiB0fWZ1bmN0aW9uIG13KG4sdCl7dD1lbmNvZGVVUklDb21wb25lbnQodCk7Zm9yKGxldCBlIG9mIG4uc3BsaXQoIjsiKSl7bGV0IGk9ZS5pbmRleE9mKCI9IiksW3Isb109LTE9PWk/W2UsIiJdOltlLnNsaWNlKDAsaSksZS5zbGljZShpKzEpXTtpZihyLnRyaW0oKT09PXQpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChvKX1yZXR1cm4gbnVsbH12YXIgcU89L1xzKy8sUGo9W10seW49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9ZSx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9aSx0aGlzLl9uZ0VsPXIsdGhpcy5fcmVuZGVyZXI9byx0aGlzLmluaXRpYWxDbGFzc2VzPVBqLHRoaXMuc3RhdGVNYXA9bmV3IE1hcH1zZXQga2xhc3MoZSl7dGhpcy5pbml0aWFsQ2xhc3Nlcz1udWxsIT1lP2UudHJpbSgpLnNwbGl0KHFPKTpQan1zZXQgbmdDbGFzcyhlKXt0aGlzLnJhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgZT9lLnRyaW0oKS5zcGxpdChxTyk6ZX1uZ0RvQ2hlY2soKXtmb3IobGV0IGkgb2YgdGhpcy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShpLCEwKTtsZXQgZT10aGlzLnJhd0NsYXNzO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBTZXQpZm9yKGxldCBpIG9mIGUpdGhpcy5fdXBkYXRlU3RhdGUoaSwhMCk7ZWxzZSBpZihudWxsIT1lKWZvcihsZXQgaSBvZiBPYmplY3Qua2V5cyhlKSl0aGlzLl91cGRhdGVTdGF0ZShpLEJvb2xlYW4oZVtpXSkpO3RoaXMuX2FwcGx5U3RhdGVEaWZmKCl9X3VwZGF0ZVN0YXRlKGUsaSl7bGV0IHI9dGhpcy5zdGF0ZU1hcC5nZXQoZSk7dm9pZCAwIT09cj8oci5lbmFibGVkIT09aSYmKHIuY2hhbmdlZD0hMCxyLmVuYWJsZWQ9aSksci50b3VjaGVkPSEwKTp0aGlzLnN0YXRlTWFwLnNldChlLHtlbmFibGVkOmksY2hhbmdlZDohMCx0b3VjaGVkOiEwfSl9X2FwcGx5U3RhdGVEaWZmKCl7Zm9yKGxldCBlIG9mIHRoaXMuc3RhdGVNYXApe2xldCBpPWVbMF0scj1lWzFdO3IuY2hhbmdlZD8odGhpcy5fdG9nZ2xlQ2xhc3MoaSxyLmVuYWJsZWQpLHIuY2hhbmdlZD0hMSk6ci50b3VjaGVkfHwoci5lbmFibGVkJiZ0aGlzLl90b2dnbGVDbGFzcyhpLCExKSx0aGlzLnN0YXRlTWFwLmRlbGV0ZShpKSksci50b3VjaGVkPSExfX1fdG9nZ2xlQ2xhc3MoZSxpKXsoZT1lLnRyaW0oKSkubGVuZ3RoPjAmJmUuc3BsaXQocU8pLmZvckVhY2gocj0+e2k/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHdsKSxDKHhiKSxDKE1lKSxDKG1jKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLG5uPSgoKT0+e2NsYXNzIG57c2V0IG5nRm9yT2YoZSl7dGhpcy5fbmdGb3JPZj1lLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMH1zZXQgbmdGb3JUcmFja0J5KGUpe3RoaXMuX3RyYWNrQnlGbj1lfWdldCBuZ0ZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufWNvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl92aWV3Q29udGFpbmVyPWUsdGhpcy5fdGVtcGxhdGU9aSx0aGlzLl9kaWZmZXJzPXIsdGhpcy5fbmdGb3JPZj1udWxsLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMCx0aGlzLl9kaWZmZXI9bnVsbH1zZXQgbmdGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fdGVtcGxhdGU9ZSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7bGV0IGU9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpKX1pZih0aGlzLl9kaWZmZXIpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2UmJnRoaXMuX2FwcGx5Q2hhbmdlcyhlKX19X2FwcGx5Q2hhbmdlcyhlKXtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyO2UuZm9yRWFjaE9wZXJhdGlvbigocixvLHMpPT57aWYobnVsbD09ci5wcmV2aW91c0luZGV4KWkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9aSx0aGlzLmNvdW50PXJ9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX0oci5pdGVtLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT1zP3ZvaWQgMDpzKTtlbHNlIGlmKG51bGw9PXMpaS5yZW1vdmUobnVsbD09PW8/dm9pZCAwOm8pO2Vsc2UgaWYobnVsbCE9PW8pe2xldCBhPWkuZ2V0KG8pO2kubW92ZShhLHMpLGtqKGEscil9fSk7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyPG87cisrKXtsZXQgYT1pLmdldChyKS5jb250ZXh0O2EuaW5kZXg9cixhLmNvdW50PW8sYS5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9ZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2Uocj0+e2tqKGkuZ2V0KHIuY3VycmVudEluZGV4KSxyKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoc2kpLEMoU2kpLEMod2wpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJuZ0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksbn0pKCk7ZnVuY3Rpb24ga2oobix0KXtuLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX12YXIgRmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl9jb250ZXh0PW5ldyBRTyx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWl9c2V0IG5nSWYoZSl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWUsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihlKXtGaigibmdJZlRoZW4iLGUpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShlKXtGaigibmdJZkVsc2UiLGUpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1lLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfV91cGRhdGVWaWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoc2kpLEMoU2kpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLFFPPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH19O2Z1bmN0aW9uIEZqKG4sdCl7aWYodCYmIXQuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtufSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtwbyh0KX0nLmApfXZhciBmdz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl90ZW1wbGF0ZVJlZj1lLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZSh0KXt0JiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiF0JiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19LHNyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0Vmlld3M9W10sdGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1zZXQgbmdTd2l0Y2goZSl7dGhpcy5fbmdTd2l0Y2g9ZSwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KGUpe3RoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGUpfV9tYXRjaENhc2UoZSl7bGV0IGk9ZT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9dGhpcy5fbGFzdENhc2VzTWF0Y2hlZHx8aSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXgrKyx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9PT10aGlzLl9jYXNlQ291bnQmJih0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoIXRoaXMuX2xhc3RDYXNlc01hdGNoZWQpLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITEpLGl9X3VwZGF0ZURlZmF1bHRDYXNlcyhlKXtpZih0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoPjAmJmUhPT10aGlzLl9kZWZhdWx0VXNlZCl7dGhpcy5fZGVmYXVsdFVzZWQ9ZTtmb3IobGV0IGkgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKWkuZW5mb3JjZVN0YXRlKGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLFNyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMubmdTd2l0Y2g9cixyLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgZncoZSxpKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhzaSksQyhTaSksQyhzciw5KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLHV1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3IuX2FkZERlZmF1bHQobmV3IGZ3KGUsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHNpKSxDKFNpKSxDKHNyLDkpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hEZWZhdWx0IiwiIl1dLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxwdT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ0VsPWUsdGhpcy5fZGlmZmVycz1pLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5fbmdTdHlsZT1udWxsLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ1N0eWxlKGUpe3RoaXMuX25nU3R5bGU9ZSwhdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtsZXQgZT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTtlJiZ0aGlzLl9hcHBseUNoYW5nZXMoZSl9fV9zZXRTdHlsZShlLGkpe2xldFtyLG9dPWUuc3BsaXQoIi4iKSxzPS0xPT09ci5pbmRleE9mKCItIik/dm9pZCAwOkFhLkRhc2hDYXNlO251bGwhPWk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIsbz9gJHtpfSR7b31gOmkscyk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIscyl9X2FwcGx5Q2hhbmdlcyhlKXtlLmZvckVhY2hSZW1vdmVkSXRlbShpPT50aGlzLl9zZXRTdHlsZShpLmtleSxudWxsKSksZS5mb3JFYWNoQWRkZWRJdGVtKGk9PnRoaXMuX3NldFN0eWxlKGkua2V5LGkuY3VycmVudFZhbHVlKSksZS5mb3JFYWNoQ2hhbmdlZEl0ZW0oaT0+dGhpcy5fc2V0U3R5bGUoaS5rZXksaS5jdXJyZW50VmFsdWUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyh4YiksQyhtYykpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxMcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl92aWV3UmVmPW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoZSl7aWYoZS5uZ1RlbXBsYXRlT3V0bGV0fHxlLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7bGV0IGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZpLnJlbW92ZShpLmluZGV4T2YodGhpcy5fdmlld1JlZikpLHRoaXMubmdUZW1wbGF0ZU91dGxldCl7bGV0e25nVGVtcGxhdGVPdXRsZXQ6cixuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpvLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjpzfT10aGlzO3RoaXMuX3ZpZXdSZWY9aS5jcmVhdGVFbWJlZGRlZFZpZXcocixvLHM/e2luamVjdG9yOnN9OnZvaWQgMCl9ZWxzZSB0aGlzLl92aWV3UmVmPW51bGx9ZWxzZSB0aGlzLl92aWV3UmVmJiZlLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiZ0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiYodGhpcy5fdmlld1JlZi5jb250ZXh0PXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHNpKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbR3RdfSksbn0pKCk7ZnVuY3Rpb24gaHcobix0KXtyZXR1cm4gbmV3IHl0KDIxMDAsITEpfXZhciBIdWU9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSxpPT57dGhyb3cgaX0pfWRpc3Bvc2UodCl7fX0senVlPW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppPT57dGhyb3cgaX19KX1kaXNwb3NlKHQpe3QudW5zdWJzY3JpYmUoKX19LGN0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsLHRoaXMuX3JlZj1lfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGUpe3JldHVybiB0aGlzLl9vYmo/ZSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGUpKTp0aGlzLl9sYXRlc3RWYWx1ZTooZSYmdGhpcy5fc3Vic2NyaWJlKGUpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKGUpe3RoaXMuX29iaj1lLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGUpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oZSxpPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShlLGkpKX1fc2VsZWN0U3RyYXRlZ3koZSl7aWYoaGgoZSkpcmV0dXJuIEh1ZTtpZihUTyhlKSlyZXR1cm4genVlO3Rocm93IGh3KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoZSxpKXtlPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9aSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKCR0LDE2KSl9LG4uXHUwMjc1cGlwZT1LbSh7bmFtZToiYXN5bmMiLHR5cGU6bixwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxqdWU9bmV3IGllKCJEQVRFX1BJUEVfREVGQVVMVF9USU1FWk9ORSIpLEd1ZT1uZXcgaWUoIkRBVEVfUElQRV9ERUZBVUxUX09QVElPTlMiKSxnaD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmxvY2FsZT1lLHRoaXMuZGVmYXVsdFRpbWV6b25lPWksdGhpcy5kZWZhdWx0T3B0aW9ucz1yfXRyYW5zZm9ybShlLGkscixvKXtpZihudWxsPT1lfHwiIj09PWV8fGUhPWUpcmV0dXJuIG51bGw7dHJ5e3JldHVybiB5dWUoZSxpPz90aGlzLmRlZmF1bHRPcHRpb25zPy5kYXRlRm9ybWF0Pz8ibWVkaXVtRGF0ZSIsb3x8dGhpcy5sb2NhbGUscj8/dGhpcy5kZWZhdWx0T3B0aW9ucz8udGltZXpvbmU/P3RoaXMuZGVmYXVsdFRpbWV6b25lPz92b2lkIDApfWNhdGNoKHMpe3Rocm93IGh3KCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGNkLDE2KSxDKGp1ZSwyNCksQyhHdWUsMjQpKX0sbi5cdTAyNzVwaXBlPUttKHtuYW1lOiJkYXRlIix0eXBlOm4scHVyZTohMCxzdGFuZGFsb25lOiEwfSksbn0pKCksTGE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9sb2NhbGU9ZX10cmFuc2Zvcm0oZSxpLHIpe2lmKCFmdW5jdGlvbihuKXtyZXR1cm4hKG51bGw9PW58fCIiPT09bnx8biE9bil9KGUpKXJldHVybiBudWxsO3I9cnx8dGhpcy5fbG9jYWxlO3RyeXtsZXQgbz1mdW5jdGlvbihuKXtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFpc05hTihOdW1iZXIobiktcGFyc2VGbG9hdChuKSkpcmV0dXJuIE51bWJlcihuKTtpZigibnVtYmVyIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKGAke259IGlzIG5vdCBhIG51bWJlcmApO3JldHVybiBufShlKTtyZXR1cm4gJE8obyxyLGkpfWNhdGNoKG8pe3Rocm93IGh3KCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGNkLDE2KSl9LG4uXHUwMjc1cGlwZT1LbSh7bmFtZToibnVtYmVyIix0eXBlOm4scHVyZTohMCxzdGFuZGFsb25lOiEwfSksbn0pKCksamo9KCgpPT57Y2xhc3Mgbnt0cmFuc2Zvcm0oZSxpLHIpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7aWYoIXRoaXMuc3VwcG9ydHMoZSkpdGhyb3cgaHcoKTtyZXR1cm4gZS5zbGljZShpLHIpfXN1cHBvcnRzKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8QXJyYXkuaXNBcnJheShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cGlwZT1LbSh7bmFtZToic2xpY2UiLHR5cGU6bixwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxQZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksZWs9ImJyb3dzZXIiO2Z1bmN0aW9uIGd3KG4pe3JldHVybiBuPT09ZWt9bmV3IHlsKCIxNS4yLjkiKTt2YXIgUXA9Y2xhc3N7fTtmdW5jdGlvbiBadWUobil7cmV0dXJuIG4uc3RhcnRzV2l0aCgiLyIpP24uc2xpY2UoMSk6bn12YXIgS3VlPW49Pm4uc3JjLEp1ZT1uZXcgaWUoIkltYWdlTG9hZGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+S3VlfSk7ZnVuY3Rpb24gX3cobix0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciIT10eXBlb2Ygbnx8IiI9PT1uLnRyaW0oKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG5ldyBVUkwobiksITB9Y2F0Y2h7cmV0dXJuITF9fShpKXx8ZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgeXQoMjk1OSwhMSl9KCksaT1mdW5jdGlvbihuKXtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpP24uc2xpY2UoMCwtMSk6bn0oaSksW3twcm92aWRlOkp1ZSx1c2VWYWx1ZTpzPT4oZnVuY3Rpb24obil7cmV0dXJuL15odHRwcz86XC9cLy8udGVzdChuKX0ocy5zcmMpJiZmdW5jdGlvbihuLHQpe3Rocm93IG5ldyB5dCgyOTU5LCExKX0oKSxuKGksey4uLnMsc3JjOlp1ZShzLnNyYyl9KSl9XX19X3coZnVuY3Rpb24obix0KXtsZXQgZT0iZm9ybWF0PWF1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3aWR0aD0ke3Qud2lkdGh9YCksYCR7bn0vY2RuLWNnaS9pbWFnZS8ke2V9LyR7dC5zcmN9YH0pLF93KGZ1bmN0aW9uKG4sdCl7bGV0IGU9ImZfYXV0byxxX2F1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3XyR7dC53aWR0aH1gKSxgJHtufS9pbWFnZS91cGxvYWQvJHtlfS8ke3Quc3JjfWB9KSxfdyhmdW5jdGlvbihuLHQpe2xldCByLHtzcmM6ZSx3aWR0aDppfT10O3JldHVybiByPWk/W24sYHRyOnctJHtpfWAsZV06W24sZV0sci5qb2luKCIvIil9KSxfdyhmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBVUkwoYCR7bn0vJHt0LnNyY31gKTtyZXR1cm4gZS5zZWFyY2hQYXJhbXMuc2V0KCJhdXRvIiwiZm9ybWF0IiksdC53aWR0aCYmZS5zZWFyY2hQYXJhbXMuc2V0KCJ3Iix0LndpZHRoLnRvU3RyaW5nKCkpLGUuaHJlZn0pLG5ldyBpZSgiUFJFQ09OTkVDVF9DSEVDS19CTE9DS0xJU1QiKSxuZXcgaWUoIk5HX09QVElNSVpFRF9QUkVMT0FERURfSU1BR0VTIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3IFNldH0pO3ZhciBidyxvcGU9e2JyZWFrcG9pbnRzOlsxNiwzMiw0OCw2NCw5NiwxMjgsMjU2LDM4NCw2NDAsNzUwLDgyOCwxMDgwLDEyMDAsMTkyMCwyMDQ4LDM4NDBdfSxuaz0obmV3IGllKCJJbWFnZUNvbmZpZyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm9wZX0pLGNsYXNzIGV4dGVuZHMgZHd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9ITB9fSksRGI9Y2xhc3MgZXh0ZW5kcyBua3tzdGF0aWMgbWFrZUN1cnJlbnQoKXt2YXIgbjtuPW5ldyBEYixZT3x8KFlPPW4pfW9uQW5kQ2FuY2VsKHQsZSxpKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsaSwhMSksKCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxpLCExKX19ZGlzcGF0Y2hFdmVudCh0LGUpe3QuZGlzcGF0Y2hFdmVudChlKX1yZW1vdmUodCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFyZ2V0KHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9Z2V0QmFzZUhyZWYodCl7bGV0IGU9KFNiPVNifHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIikpP1NiLmdldEF0dHJpYnV0ZSgiaHJlZiIpOm51bGw7cmV0dXJuIG51bGw9PWU/bnVsbDpmdW5jdGlvbihuKXsoYnc9Ynd8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkuc2V0QXR0cmlidXRlKCJocmVmIixuKTtsZXQgdD1idy5wYXRobmFtZTtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKT90OmAvJHt0fWB9KGUpfXJlc2V0QmFzZUVsZW1lbnQoKXtTYj1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH1nZXRDb29raWUodCl7cmV0dXJuIG13KGRvY3VtZW50LmNvb2tpZSx0KX19LFNiPW51bGwsUWo9bmV3IGllKCJUUkFOU0lUSU9OX0lEIiksZHBlPVt7cHJvdmlkZTpPTyx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4oKT0+e2UuZ2V0KFpNKS5kb25lUHJvbWlzZS50aGVuKCgpPT57bGV0IGk9VGwoKSxyPXQucXVlcnlTZWxlY3RvckFsbChgc3R5bGVbbmctdHJhbnNpdGlvbj0iJHtufSJdYCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspaS5yZW1vdmUocltvXSl9KX19LGRlcHM6W1FqLEx0LE1pXSxtdWx0aTohMH1dLHVwZT0oKCk9PntjbGFzcyBue2J1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdnc9bmV3IGllKCJFdmVudE1hbmFnZXJQbHVnaW5zIikseXc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3pvbmU9aSx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLGUuZm9yRWFjaChyPT57ci5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWUuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoaSkuYWRkRXZlbnRMaXN0ZW5lcihlLGkscil9YWRkR2xvYmFsRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoaSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcihlLGkscil9Z2V0Wm9uZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGUpe2xldCBpPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChlKTtpZihpKXJldHVybiBpO2xldCByPXRoaXMuX3BsdWdpbnM7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107aWYocy5zdXBwb3J0cyhlKSlyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGUscyksc310aHJvdyBuZXcgRXJyb3IoYE5vIGV2ZW50IG1hbmFnZXIgcGx1Z2luIGZvdW5kIGZvciBldmVudCAke2V9YCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsodncpLGsoYXQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx4dz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb2M9dH1hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxpKXtsZXQgcj1UbCgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYyx0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAke3J9IGZvciBldmVudCAke2V9YCk7cmV0dXJuIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLGUsaSl9fSxaaj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy51c2FnZUNvdW50PW5ldyBNYXB9YWRkU3R5bGVzKGUpe2ZvcihsZXQgaSBvZiBlKTE9PT10aGlzLmNoYW5nZVVzYWdlQ291bnQoaSwxKSYmdGhpcy5vblN0eWxlQWRkZWQoaSl9cmVtb3ZlU3R5bGVzKGUpe2ZvcihsZXQgaSBvZiBlKTA9PT10aGlzLmNoYW5nZVVzYWdlQ291bnQoaSwtMSkmJnRoaXMub25TdHlsZVJlbW92ZWQoaSl9b25TdHlsZVJlbW92ZWQoZSl7fW9uU3R5bGVBZGRlZChlKXt9Z2V0QWxsU3R5bGVzKCl7cmV0dXJuIHRoaXMudXNhZ2VDb3VudC5rZXlzKCl9Y2hhbmdlVXNhZ2VDb3VudChlLGkpe2xldCByPXRoaXMudXNhZ2VDb3VudCxvPXIuZ2V0KGUpPz8wO3JldHVybiBvKz1pLG8+MD9yLnNldChlLG8pOnIuZGVsZXRlKGUpLG99bmdPbkRlc3Ryb3koKXtmb3IobGV0IGUgb2YgdGhpcy5nZXRBbGxTdHlsZXMoKSl0aGlzLm9uU3R5bGVSZW1vdmVkKGUpO3RoaXMudXNhZ2VDb3VudC5jbGVhcigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxFYj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWmp7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmRvYz1lLHRoaXMuc3R5bGVSZWY9bmV3IE1hcCx0aGlzLmhvc3ROb2Rlcz1uZXcgU2V0LHRoaXMucmVzZXRIb3N0Tm9kZXMoKX1vblN0eWxlQWRkZWQoZSl7Zm9yKGxldCBpIG9mIHRoaXMuaG9zdE5vZGVzKXRoaXMuYWRkU3R5bGVUb0hvc3QoaSxlKX1vblN0eWxlUmVtb3ZlZChlKXtsZXQgaT10aGlzLnN0eWxlUmVmO2kuZ2V0KGUpPy5mb3JFYWNoKG89Pm8ucmVtb3ZlKCkpLGkuZGVsZXRlKGUpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN0eWxlUmVmLmNsZWFyKCksdGhpcy5yZXNldEhvc3ROb2RlcygpfWFkZEhvc3QoZSl7dGhpcy5ob3N0Tm9kZXMuYWRkKGUpO2ZvcihsZXQgaSBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMuYWRkU3R5bGVUb0hvc3QoZSxpKX1yZW1vdmVIb3N0KGUpe3RoaXMuaG9zdE5vZGVzLmRlbGV0ZShlKX1hZGRTdHlsZVRvSG9zdChlLGkpe2xldCByPXRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ci50ZXh0Q29udGVudD1pLGUuYXBwZW5kQ2hpbGQocik7bGV0IG89dGhpcy5zdHlsZVJlZi5nZXQoaSk7bz9vLnB1c2gocik6dGhpcy5zdHlsZVJlZi5zZXQoaSxbcl0pfXJlc2V0SG9zdE5vZGVzKCl7bGV0IGU9dGhpcy5ob3N0Tm9kZXM7ZS5jbGVhcigpLGUuYWRkKHRoaXMuZG9jLmhlYWQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEx0KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdGs9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoTUwvIn0sb2s9LyVDT01QJS9nLEpqPW5ldyBpZSgiUmVtb3ZlU3R5bGVzT25Db21wRGVzdG9yeSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiExfSk7ZnVuY3Rpb24gJGoobix0KXtyZXR1cm4gdC5mbGF0KDEwMCkubWFwKGU9PmUucmVwbGFjZShvayxuKSl9ZnVuY3Rpb24gV2oobil7cmV0dXJuIHQ9PntpZigiX19uZ1Vud3JhcF9fIj09PXQpcmV0dXJuIG47ITE9PT1uKHQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITEpfX12YXIgVGI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmV2ZW50TWFuYWdlcj1lLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1pLHRoaXMuYXBwSWQ9cix0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Rvcnk9byx0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcCx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgSWIoZSl9Y3JlYXRlUmVuZGVyZXIoZSxpKXtpZighZXx8IWkpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO2xldCByPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJlcihlLGkpO3JldHVybiByIGluc3RhbmNlb2YgQ3c/ci5hcHBseVRvSG9zdChlKTpyIGluc3RhbmNlb2YgQWImJnIuYXBwbHlTdHlsZXMoKSxyfWdldE9yQ3JlYXRlUmVuZGVyZXIoZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyQnlDb21wSWQsbz1yLmdldChpLmlkKTtpZighbyl7bGV0IHM9dGhpcy5ldmVudE1hbmFnZXIsYT10aGlzLnNoYXJlZFN0eWxlc0hvc3QsbD10aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Rvcnk7c3dpdGNoKGkuZW5jYXBzdWxhdGlvbil7Y2FzZSByYS5FbXVsYXRlZDpvPW5ldyBDdyhzLGEsaSx0aGlzLmFwcElkLGwpO2JyZWFrO2Nhc2UgcmEuU2hhZG93RG9tOnJldHVybiBuZXcgcmsocyxhLGUsaSk7ZGVmYXVsdDpvPW5ldyBBYihzLGEsaSxsKX1vLm9uRGVzdHJveT0oKT0+ci5kZWxldGUoaS5pZCksci5zZXQoaS5pZCxvKX1yZXR1cm4gb31uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5jbGVhcigpfWJlZ2luKCl7fWVuZCgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh5dyksayhFYiksayhZcCksayhKaikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEliPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3koKXt9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybiBlP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0a1tlXXx8ZSx0KTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpfWNyZWF0ZUNvbW1lbnQodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodCl9Y3JlYXRlVGV4dCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCl9YXBwZW5kQ2hpbGQodCxlKXsoWWoodCk/dC5jb250ZW50OnQpLmFwcGVuZENoaWxkKGUpfWluc2VydEJlZm9yZSh0LGUsaSl7dCYmKFlqKHQpP3QuY29udGVudDp0KS5pbnNlcnRCZWZvcmUoZSxpKX1yZW1vdmVDaGlsZCh0LGUpe3QmJnQucmVtb3ZlQ2hpbGQoZSl9c2VsZWN0Um9vdEVsZW1lbnQodCxlKXtsZXQgaT0ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0O2lmKCFpKXRocm93IG5ldyBFcnJvcihgVGhlIHNlbGVjdG9yICIke3R9IiBkaWQgbm90IG1hdGNoIGFueSBlbGVtZW50c2ApO3JldHVybiBlfHwoaS50ZXh0Q29udGVudD0iIiksaX1wYXJlbnROb2RlKHQpe3JldHVybiB0LnBhcmVudE5vZGV9bmV4dFNpYmxpbmcodCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9c2V0QXR0cmlidXRlKHQsZSxpLHIpe2lmKHIpe2U9cisiOiIrZTtsZXQgbz10a1tyXTtvP3Quc2V0QXR0cmlidXRlTlMobyxlLGkpOnQuc2V0QXR0cmlidXRlKGUsaSl9ZWxzZSB0LnNldEF0dHJpYnV0ZShlLGkpfXJlbW92ZUF0dHJpYnV0ZSh0LGUsaSl7aWYoaSl7bGV0IHI9dGtbaV07cj90LnJlbW92ZUF0dHJpYnV0ZU5TKHIsZSk6dC5yZW1vdmVBdHRyaWJ1dGUoYCR7aX06JHtlfWApfWVsc2UgdC5yZW1vdmVBdHRyaWJ1dGUoZSl9YWRkQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9cmVtb3ZlQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9c2V0U3R5bGUodCxlLGkscil7ciYoQWEuRGFzaENhc2V8QWEuSW1wb3J0YW50KT90LnN0eWxlLnNldFByb3BlcnR5KGUsaSxyJkFhLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6dC5zdHlsZVtlXT1pfXJlbW92ZVN0eWxlKHQsZSxpKXtpJkFhLkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn1zZXRQcm9wZXJ0eSh0LGUsaSl7dFtlXT1pfXNldFZhbHVlKHQsZSl7dC5ub2RlVmFsdWU9ZX1saXN0ZW4odCxlLGkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90aGlzLmV2ZW50TWFuYWdlci5hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxXaihpKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LGUsV2ooaSkpfX07ZnVuY3Rpb24gWWoobil7cmV0dXJuIlRFTVBMQVRFIj09PW4udGFnTmFtZSYmdm9pZCAwIT09bi5jb250ZW50fSJAIi5jaGFyQ29kZUF0KDApO3ZhciByaz1jbGFzcyBleHRlbmRzIElie2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQpLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMuaG9zdEVsPWksdGhpcy5zaGFkb3dSb290PWkuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7bGV0IG89JGooci5pZCxyLnN0eWxlcyk7Zm9yKGxldCBzIG9mIG8pe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YS50ZXh0Q29udGVudD1zLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChhKX19bm9kZU9yU2hhZG93Um9vdCh0KXtyZXR1cm4gdD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDp0fWFwcGVuZENoaWxkKHQsZSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSxlKX1pbnNlcnRCZWZvcmUodCxlLGkpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUsaSl9cmVtb3ZlQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX0sQWI9Y2xhc3MgZXh0ZW5kcyBJYntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89aS5pZCl7c3VwZXIodCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0b3J5PXIsdGhpcy5yZW5kZXJlclVzYWdlQ291bnQ9MCx0aGlzLnN0eWxlcz0kaihvLGkuc3R5bGVzKX1hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXModGhpcy5zdHlsZXMpLHRoaXMucmVuZGVyZXJVc2FnZUNvdW50Kyt9ZGVzdHJveSgpeyF0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Rvcnl8fCh0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVzKSx0aGlzLnJlbmRlcmVyVXNhZ2VDb3VudC0tLDA9PT10aGlzLnJlbmRlcmVyVXNhZ2VDb3VudCYmdGhpcy5vbkRlc3Ryb3k/LigpKX19LEN3PWNsYXNzIGV4dGVuZHMgQWJ7Y29uc3RydWN0b3IodCxlLGkscixvKXtsZXQgcz1yKyItIitpLmlkO3N1cGVyKHQsZSxpLG8scyksdGhpcy5jb250ZW50QXR0cj0iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2Uob2sscyksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbihuKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2Uob2ssbil9KHMpfWFwcGx5VG9Ib3N0KHQpe3RoaXMuYXBwbHlTdHlsZXMoKSx0aGlzLnNldEF0dHJpYnV0ZSh0LHRoaXMuaG9zdEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQodCxlKXtsZXQgaT1zdXBlci5jcmVhdGVFbGVtZW50KHQsZSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShpLHRoaXMuY29udGVudEF0dHIsIiIpLGl9fSxicGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHh3e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfXN1cHBvcnRzKGUpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoaSxyLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxyKX1yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTHQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxYaj1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hpZnQiXSx2cGU9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LHlwZT17YWx0Om49Pm4uYWx0S2V5LGNvbnRyb2w6bj0+bi5jdHJsS2V5LG1ldGE6bj0+bi5tZXRhS2V5LHNoaWZ0Om49Pm4uc2hpZnRLZXl9LHhwZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgeHd7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9c3VwcG9ydHMoZSl7cmV0dXJuIG51bGwhPW4ucGFyc2VFdmVudE5hbWUoZSl9YWRkRXZlbnRMaXN0ZW5lcihlLGkscil7bGV0IG89bi5wYXJzZUV2ZW50TmFtZShpKSxzPW4uZXZlbnRDYWxsYmFjayhvLmZ1bGxLZXkscix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+VGwoKS5vbkFuZENhbmNlbChlLG8uZG9tRXZlbnROYW1lLHMpKX1zdGF0aWMgcGFyc2VFdmVudE5hbWUoZSl7bGV0IGk9ZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIikscj1pLnNoaWZ0KCk7aWYoMD09PWkubGVuZ3RofHwia2V5ZG93biIhPT1yJiYia2V5dXAiIT09cilyZXR1cm4gbnVsbDtsZXQgbz1uLl9ub3JtYWxpemVLZXkoaS5wb3AoKSkscz0iIixhPWkuaW5kZXhPZigiY29kZSIpO2lmKGE+LTEmJihpLnNwbGljZShhLDEpLHM9ImNvZGUuIiksWGouZm9yRWFjaChjPT57bGV0IGQ9aS5pbmRleE9mKGMpO2Q+LTEmJihpLnNwbGljZShkLDEpLHMrPWMrIi4iKX0pLHMrPW8sMCE9aS5sZW5ndGh8fDA9PT1vLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD17fTtyZXR1cm4gbC5kb21FdmVudE5hbWU9cixsLmZ1bGxLZXk9cyxsfXN0YXRpYyBtYXRjaEV2ZW50RnVsbEtleUNvZGUoZSxpKXtsZXQgcj12cGVbZS5rZXldfHxlLmtleSxvPSIiO3JldHVybiBpLmluZGV4T2YoImNvZGUuIik+LTEmJihyPWUuY29kZSxvPSJjb2RlLiIpLCEobnVsbD09cnx8IXIpJiYocj1yLnRvTG93ZXJDYXNlKCksIiAiPT09cj9yPSJzcGFjZSI6Ii4iPT09ciYmKHI9ImRvdCIpLFhqLmZvckVhY2gocz0+e3MhPT1yJiYoMCx5cGVbc10pKGUpJiYobys9cysiLiIpfSksbys9cixvPT09aSl9c3RhdGljIGV2ZW50Q2FsbGJhY2soZSxpLHIpe3JldHVybiBvPT57bi5tYXRjaEV2ZW50RnVsbEtleUNvZGUobyxlKSYmci5ydW5HdWFyZGVkKCgpPT5pKG8pKX19c3RhdGljIF9ub3JtYWxpemVLZXkoZSl7cmV0dXJuImVzYyI9PT1lPyJlc2NhcGUiOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTHQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxTcGU9W3twcm92aWRlOnZjLHVzZVZhbHVlOmVrfSx7cHJvdmlkZTprTyx1c2VWYWx1ZTpmdW5jdGlvbigpe0RiLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTpMdCx1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG49ZG9jdW1lbnQsWVI9bixkb2N1bWVudDt2YXIgbn0sZGVwczpbXX1dLGFrPUJPKE1qLCJicm93c2VyIixTcGUpLGVHPW5ldyBpZSgiIiksRXBlPVt7cHJvdmlkZTp2Yix1c2VDbGFzczpjbGFzc3thZGRUb1dpbmRvdyh0KXtVci5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGkscj0hMCk9PntsZXQgbz10LmZpbmRUZXN0YWJpbGl0eUluVHJlZShpLHIpO2lmKG51bGw9PW8pdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB0ZXN0YWJpbGl0eSBmb3IgZWxlbWVudC4iKTtyZXR1cm4gb30sVXIuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXM9KCk9PnQuZ2V0QWxsVGVzdGFiaWxpdGllcygpLFVyLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PnQuZ2V0QWxsUm9vdEVsZW1lbnRzKCksVXIuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChVci5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksVXIuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChpPT57bGV0IHI9VXIuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKSxvPXIubGVuZ3RoLHM9ITEsYT1mdW5jdGlvbihsKXtzPXN8fGwsby0tLDA9PW8mJmkocyl9O3IuZm9yRWFjaChmdW5jdGlvbihsKXtsLndoZW5TdGFibGUoYSl9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUsaSl7cmV0dXJuIG51bGw9PWU/bnVsbDp0LmdldFRlc3RhYmlsaXR5KGUpPz8oaT9UbCgpLmlzU2hhZG93Um9vdChlKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6Tk8sdXNlQ2xhc3M6S00sZGVwczpbYXQsSk0sdmJdfSx7cHJvdmlkZTpLTSx1c2VDbGFzczpLTSxkZXBzOlthdCxKTSx2Yl19XSxUcGU9W3twcm92aWRlOk5NLHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6cnMsdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgcnN9LGRlcHM6W119LHtwcm92aWRlOnZ3LHVzZUNsYXNzOmJwZSxtdWx0aTohMCxkZXBzOltMdCxhdCx2Y119LHtwcm92aWRlOnZ3LHVzZUNsYXNzOnhwZSxtdWx0aTohMCxkZXBzOltMdF19LHtwcm92aWRlOlRiLHVzZUNsYXNzOlRiLGRlcHM6W3l3LEViLFlwLEpqXX0se3Byb3ZpZGU6ZmMsdXNlRXhpc3Rpbmc6VGJ9LHtwcm92aWRlOlpqLHVzZUV4aXN0aW5nOkVifSx7cHJvdmlkZTpFYix1c2VDbGFzczpFYixkZXBzOltMdF19LHtwcm92aWRlOnl3LHVzZUNsYXNzOnl3LGRlcHM6W3Z3LGF0XX0se3Byb3ZpZGU6UXAsdXNlQ2xhc3M6dXBlLGRlcHM6W119LFtdXSxNdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTpZcCx1c2VWYWx1ZTplLmFwcElkfSx7cHJvdmlkZTpRaix1c2VFeGlzdGluZzpZcH0sZHBlXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoZUcsMTIpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlsuLi5UcGUsLi4uRXBlXSxpbXBvcnRzOltQZSx3al19KSxufSkoKSxacD0obmV3IGllKCJIYW1tZXJHZXN0dXJlQ29uZmlnIiksbmV3IGllKCJIYW1tZXJMb2FkZXIiKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oZSl7bGV0IGk9bnVsbDtyZXR1cm4gaT1lP25ldyhlfHxuKTprKHRHKSxpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpKSx0Rz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWnB7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZX1zYW5pdGl6ZShlLGkpe2lmKG51bGw9PWkpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UganIuTk9ORTpyZXR1cm4gaTtjYXNlIGpyLkhUTUw6cmV0dXJuIHhsKGksIkhUTUwiKT9EcyhpKTpwTyh0aGlzLl9kb2MsU3RyaW5nKGkpKS50b1N0cmluZygpO2Nhc2UganIuU1RZTEU6cmV0dXJuIHhsKGksIlN0eWxlIik/RHMoaSk6aTtjYXNlIGpyLlNDUklQVDppZih4bChpLCJTY3JpcHQiKSlyZXR1cm4gRHMoaSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iik7Y2FzZSBqci5VUkw6cmV0dXJuIHhsKGksIlVSTCIpP0RzKGkpOmxiKFN0cmluZyhpKSk7Y2FzZSBqci5SRVNPVVJDRV9VUkw6aWYoeGwoaSwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gRHMoaSk7dGhyb3cgbmV3IEVycm9yKGB1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgJHt0Yn0pYCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICR7ZX0gKHNlZSAke3RifSlgKX19YnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgWFIobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRUihuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFNjcmlwdChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBaUihuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFVybChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBLUihuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEpSKG4pfShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhMdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbihlKXtsZXQgaT1udWxsO3JldHVybiBpPWU/bmV3IGU6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyB0RyhuLmdldChMdCkpfShrKE1pKSksaX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxSYj0obmV3IHlsKCIxNS4yLjkiKSxXVihpRygpLDEpLGNsYXNze30pLHd3PWNsYXNze30seGM9IioiO2Z1bmN0aW9uIF9yKG4sdCl7cmV0dXJue3R5cGU6NyxuYW1lOm4sZGVmaW5pdGlvbnM6dCxvcHRpb25zOnt9fX1mdW5jdGlvbiBDaShuLHQ9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6dCx0aW1pbmdzOm59fWZ1bmN0aW9uIE9iKG4sdD1udWxsKXtyZXR1cm57dHlwZTozLHN0ZXBzOm4sb3B0aW9uczp0fX1mdW5jdGlvbiBTdyhuLHQ9bnVsbCl7cmV0dXJue3R5cGU6MixzdGVwczpuLG9wdGlvbnM6dH19ZnVuY3Rpb24gcm4obil7cmV0dXJue3R5cGU6NixzdHlsZXM6bixvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gd2kobix0LGUpe3JldHVybnt0eXBlOjAsbmFtZTpuLHN0eWxlczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24ga2Iobil7cmV0dXJue3R5cGU6NSxzdGVwczpufX1mdW5jdGlvbiBnaShuLHQsZT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6bixhbmltYXRpb246dCxvcHRpb25zOmV9fWZ1bmN0aW9uIEtwKG49bnVsbCl7cmV0dXJue3R5cGU6OSxvcHRpb25zOm59fWZ1bmN0aW9uIEpwKG4sdCxlPW51bGwpe3JldHVybnt0eXBlOjExLHNlbGVjdG9yOm4sYW5pbWF0aW9uOnQsb3B0aW9uczplfX1mdW5jdGlvbiByRyhuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKG4pfXZhciBtdT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9b25TdGFydCh0KXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaCh0KSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9b25Eb25lKHQpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2godCksdGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7ckcoKCk9PnRoaXMuX29uRmluaXNoKCkpfV9vblN0YXJ0KCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25TdGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9c2V0UG9zaXRpb24odCl7dGhpcy5fcG9zaXRpb249dGhpcy50b3RhbFRpbWU/dCp0aGlzLnRvdGFsVGltZToxfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudG90YWxUaW1lP3RoaXMuX3Bvc2l0aW9uL3RoaXMudG90YWxUaW1lOjF9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LFBiPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPXQ7bGV0IGU9MCxpPTAscj0wLG89dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1vP3JHKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaChzPT57cy5vbkRvbmUoKCk9PnsrK2U9PW8mJnRoaXMuX29uRmluaXNoKCl9KSxzLm9uRGVzdHJveSgoKT0+eysraT09byYmdGhpcy5fb25EZXN0cm95KCl9KSxzLm9uU3RhcnQoKCk9PnsrK3I9PW8mJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgocyxhKT0+TWF0aC5tYXgocyxhLnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuaW5pdCgpKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKHQpe2xldCBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goaT0+e2xldCByPWkudG90YWxUaW1lP01hdGgubWluKDEsZS9pLnRvdGFsVGltZSk6MTtpLnNldFBvc2l0aW9uKHIpfSl9Z2V0UG9zaXRpb24oKXtsZXQgdD10aGlzLnBsYXllcnMucmVkdWNlKChlLGkpPT5udWxsPT09ZXx8aS50b3RhbFRpbWU+ZS50b3RhbFRpbWU/aTplLG51bGwpO3JldHVybiBudWxsIT10P3QuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT57dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChpPT5pKCkpLGUubGVuZ3RoPTB9fSxFdz0iISI7ZnVuY3Rpb24gb0cobil7cmV0dXJuIG5ldyB5dCgzZTMsITEpfWZ1bmN0aW9uIElrKCl7cmV0dXJuIHR5cGVvZiBwcm9jZXNzPCJ1IiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChwcm9jZXNzKX1mdW5jdGlvbiBodShuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG11O2Nhc2UgMTpyZXR1cm4gblswXTtkZWZhdWx0OnJldHVybiBuZXcgUGIobil9fWZ1bmN0aW9uIHlHKG4sdCxlLGkscj1uZXcgTWFwLG89bmV3IE1hcCl7bGV0IHM9W10sYT1bXSxsPS0xLGM9bnVsbDtpZihpLmZvckVhY2goZD0+e2xldCB1PWQuZ2V0KCJvZmZzZXQiKSxwPXU9PWwsZj1wJiZjfHxuZXcgTWFwO2QuZm9yRWFjaCgobSxiKT0+e2xldCBNPWIseT1tO2lmKCJvZmZzZXQiIT09Yilzd2l0Y2goTT10Lm5vcm1hbGl6ZVByb3BlcnR5TmFtZShNLHMpLHkpe2Nhc2UgRXc6eT1yLmdldChiKTticmVhaztjYXNlIHhjOnk9by5nZXQoYik7YnJlYWs7ZGVmYXVsdDp5PXQubm9ybWFsaXplU3R5bGVWYWx1ZShiLE0seSxzKX1mLnNldChNLHkpfSkscHx8YS5wdXNoKGYpLGM9ZixsPXV9KSxzLmxlbmd0aCl0aHJvdyBuZXcgeXQoMzUwMiwhMSk7cmV0dXJuIGF9ZnVuY3Rpb24gQWsobix0LGUsaSl7c3dpdGNoKHQpe2Nhc2Uic3RhcnQiOm4ub25TdGFydCgoKT0+aShlJiZjayhlLCJzdGFydCIsbikpKTticmVhaztjYXNlImRvbmUiOm4ub25Eb25lKCgpPT5pKGUmJmNrKGUsImRvbmUiLG4pKSk7YnJlYWs7Y2FzZSJkZXN0cm95IjpuLm9uRGVzdHJveSgoKT0+aShlJiZjayhlLCJkZXN0cm95IixuKSkpfX1mdW5jdGlvbiBjayhuLHQsZSl7bGV0IG89Umsobi5lbGVtZW50LG4udHJpZ2dlck5hbWUsbi5mcm9tU3RhdGUsbi50b1N0YXRlLHR8fG4ucGhhc2VOYW1lLGUudG90YWxUaW1lPz9uLnRvdGFsVGltZSwhIWUuZGlzYWJsZWQpLHM9bi5fZGF0YTtyZXR1cm4gbnVsbCE9cyYmKG8uX2RhdGE9cyksb31mdW5jdGlvbiBSayhuLHQsZSxpLHI9IiIsbz0wLHMpe3JldHVybntlbGVtZW50Om4sdHJpZ2dlck5hbWU6dCxmcm9tU3RhdGU6ZSx0b1N0YXRlOmkscGhhc2VOYW1lOnIsdG90YWxUaW1lOm8sZGlzYWJsZWQ6ISFzfX1mdW5jdGlvbiBjYShuLHQsZSl7bGV0IGk9bi5nZXQodCk7cmV0dXJuIGl8fG4uc2V0KHQsaT1lKSxpfWZ1bmN0aW9uIHNHKG4pe2xldCB0PW4uaW5kZXhPZigiOiIpO3JldHVybltuLnN1YnN0cmluZygxLHQpLG4uc2xpY2UodCsxKV19dmFyIGhrPShuLHQpPT4hMSx4Rz0obix0LGUpPT5bXSxDRz1udWxsO2Z1bmN0aW9uIFBrKG4pe2xldCB0PW4ucGFyZW50Tm9kZXx8bi5ob3N0O3JldHVybiB0PT09Q0c/bnVsbDp0fShJaygpfHx0eXBlb2YgRWxlbWVudDwidSIpJiYodHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiPyhDRz0oKCk9PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkoKSxoaz0obix0KT0+e2Zvcig7dDspe2lmKHQ9PT1uKXJldHVybiEwO3Q9UGsodCl9cmV0dXJuITF9KTpoaz0obix0KT0+bi5jb250YWlucyh0KSx4Rz0obix0LGUpPT57aWYoZSlyZXR1cm4gQXJyYXkuZnJvbShuLnF1ZXJ5U2VsZWN0b3JBbGwodCkpO2xldCBpPW4ucXVlcnlTZWxlY3Rvcih0KTtyZXR1cm4gaT9baV06W119KTt2YXIgJHA9bnVsbCxhRz0hMTt2YXIgTUc9aGssd0c9eEcsT2s9KCgpPT57Y2xhc3Mgbnt2YWxpZGF0ZVN0eWxlUHJvcGVydHkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4peyRwfHwoJHA9KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9keTpudWxsKXx8e30sYUc9ISEkcC5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gJHAuc3R5bGUpO2xldCB0PSEwO3JldHVybiAkcC5zdHlsZSYmIWZ1bmN0aW9uKG4pe3JldHVybiJlYmtpdCI9PW4uc3Vic3RyaW5nKDEsNil9KG4pJiYodD1uIGluICRwLnN0eWxlLCF0JiZhRyYmKHQ9IldlYmtpdCIrbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStuLnNsaWNlKDEpaW4gJHAuc3R5bGUpKSx0fShlKX1tYXRjaGVzRWxlbWVudChlLGkpe3JldHVybiExfWNvbnRhaW5zRWxlbWVudChlLGkpe3JldHVybiBNRyhlLGkpfWdldFBhcmVudEVsZW1lbnQoZSl7cmV0dXJuIFBrKGUpfXF1ZXJ5KGUsaSxyKXtyZXR1cm4gd0coZSxpLHIpfWNvbXB1dGVTdHlsZShlLGkscil7cmV0dXJuIHJ8fCIifWFuaW1hdGUoZSxpLHIsbyxzLGE9W10sbCl7cmV0dXJuIG5ldyBtdShyLG8pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxVYj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5OT09QPW5ldyBPayxufSkoKSx1ZmU9MWUzLEVHPSJuZy1lbnRlciIsZ2s9Im5nLWxlYXZlIixUdz0ibmctdHJpZ2dlciIsUnc9Ii5uZy10cmlnZ2VyIixsRz0ibmctYW5pbWF0aW5nIixfaz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gcGQobil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBuO2xldCB0PW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIXR8fHQubGVuZ3RoPDI/MDpiayhwYXJzZUZsb2F0KHRbMV0pLHRbMl0pfWZ1bmN0aW9uIGJrKG4sdCl7cmV0dXJuInMiPT09dD9uKnVmZTpufWZ1bmN0aW9uIFB3KG4sdCxlKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9uOmZ1bmN0aW9uKG4sdCxlKXtsZXQgcixvPTAscz0iIjtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBhPW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1hKXJldHVybiB0LnB1c2gob0coKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9YmsocGFyc2VGbG9hdChhWzFdKSxhWzJdKTtsZXQgbD1hWzNdO251bGwhPWwmJihvPWJrKHBhcnNlRmxvYXQobCksYVs0XSkpO2xldCBjPWFbNV07YyYmKHM9Yyl9ZWxzZSByPW47aWYoIWUpe2xldCBhPSExLGw9dC5sZW5ndGg7cjwwJiYodC5wdXNoKG5ldyB5dCgzMTAwLCExKSksYT0hMCksbzwwJiYodC5wdXNoKG5ldyB5dCgzMTAxLCExKSksYT0hMCksYSYmdC5zcGxpY2UobCwwLG9HKCkpfXJldHVybntkdXJhdGlvbjpyLGRlbGF5Om8sZWFzaW5nOnN9fShuLHQsZSl9ZnVuY3Rpb24gamIobix0PXt9KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChlPT57dFtlXT1uW2VdfSksdH1mdW5jdGlvbiBURyhuKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGU9Pnt0LnNldChlLG5bZV0pfSksdH1mdW5jdGlvbiBiaChuLHQ9bmV3IE1hcCxlKXtpZihlKWZvcihsZXRbaSxyXW9mIGUpdC5zZXQoaSxyKTtmb3IobGV0W2kscl1vZiBuKXQuc2V0KGkscik7cmV0dXJuIHR9ZnVuY3Rpb24gY0cobix0LGUpe3JldHVybiBlP3QrIjoiK2UrIjsiOiIifWZ1bmN0aW9uIERHKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5zdHlsZS5sZW5ndGg7ZSsrKXtsZXQgaT1uLnN0eWxlLml0ZW0oZSk7dCs9Y0coMCxpLG4uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShpKSl9Zm9yKGxldCBlIGluIG4uc3R5bGUpbi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShlKSYmIWUuc3RhcnRzV2l0aCgiXyIpJiYodCs9Y0coMCxfZmUoZSksbi5zdHlsZVtlXSkpO24uc2V0QXR0cmlidXRlKCJzdHlsZSIsdCl9ZnVuY3Rpb24gQ2Mobix0LGUpe24uc3R5bGUmJih0LmZvckVhY2goKGkscik9PntsZXQgbz1rayhyKTtlJiYhZS5oYXMocikmJmUuc2V0KHIsbi5zdHlsZVtvXSksbi5zdHlsZVtvXT1pfSksSWsoKSYmREcobikpfWZ1bmN0aW9uIHRmKG4sdCl7bi5zdHlsZSYmKHQuZm9yRWFjaCgoZSxpKT0+e2xldCByPWtrKGkpO24uc3R5bGVbcl09IiJ9KSxJaygpJiZERyhuKSl9ZnVuY3Rpb24gRmIobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/MT09bi5sZW5ndGg/blswXTpTdyhuKTpufXZhciB2az1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiBJRyhuKXtsZXQgdD1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBlO2Zvcig7ZT12ay5leGVjKG4pOyl0LnB1c2goZVsxXSk7dmsubGFzdEluZGV4PTB9cmV0dXJuIHR9ZnVuY3Rpb24gTGIobix0LGUpe2xldCBpPW4udG9TdHJpbmcoKSxyPWkucmVwbGFjZSh2aywobyxzKT0+e2xldCBhPXRbc107cmV0dXJuIG51bGw9PWEmJihlLnB1c2gobmV3IHl0KDMwMDMsITEpKSxhPSIiKSxhLnRvU3RyaW5nKCl9KTtyZXR1cm4gcj09aT9uOnJ9ZnVuY3Rpb24gT3cobil7bGV0IHQ9W10sZT1uLm5leHQoKTtmb3IoOyFlLmRvbmU7KXQucHVzaChlLnZhbHVlKSxlPW4ubmV4dCgpO3JldHVybiB0fXZhciBnZmU9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIGtrKG4pe3JldHVybiBuLnJlcGxhY2UoZ2ZlLCguLi50KT0+dFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBfZmUobil7cmV0dXJuIG4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGxhKG4sdCxlKXtzd2l0Y2godC50eXBlKXtjYXNlIDc6cmV0dXJuIG4udmlzaXRUcmlnZ2VyKHQsZSk7Y2FzZSAwOnJldHVybiBuLnZpc2l0U3RhdGUodCxlKTtjYXNlIDE6cmV0dXJuIG4udmlzaXRUcmFuc2l0aW9uKHQsZSk7Y2FzZSAyOnJldHVybiBuLnZpc2l0U2VxdWVuY2UodCxlKTtjYXNlIDM6cmV0dXJuIG4udmlzaXRHcm91cCh0LGUpO2Nhc2UgNDpyZXR1cm4gbi52aXNpdEFuaW1hdGUodCxlKTtjYXNlIDU6cmV0dXJuIG4udmlzaXRLZXlmcmFtZXModCxlKTtjYXNlIDY6cmV0dXJuIG4udmlzaXRTdHlsZSh0LGUpO2Nhc2UgODpyZXR1cm4gbi52aXNpdFJlZmVyZW5jZSh0LGUpO2Nhc2UgOTpyZXR1cm4gbi52aXNpdEFuaW1hdGVDaGlsZCh0LGUpO2Nhc2UgMTA6cmV0dXJuIG4udmlzaXRBbmltYXRlUmVmKHQsZSk7Y2FzZSAxMTpyZXR1cm4gbi52aXNpdFF1ZXJ5KHQsZSk7Y2FzZSAxMjpyZXR1cm4gbi52aXNpdFN0YWdnZXIodCxlKTtkZWZhdWx0OnRocm93IG5ldyB5dCgzMDA0LCExKX19ZnVuY3Rpb24gQUcobix0KXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobilbdF19dmFyIGt3PSIqIjtmdW5jdGlvbiBDZmUobix0KXtsZXQgZT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goaT0+ZnVuY3Rpb24obix0LGUpe2lmKCI6Ij09blswXSl7bGV0IGw9ZnVuY3Rpb24obix0KXtzd2l0Y2gobil7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtjYXNlIjppbmNyZW1lbnQiOnJldHVybihlLGkpPT5wYXJzZUZsb2F0KGkpPnBhcnNlRmxvYXQoZSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oZSxpKT0+cGFyc2VGbG9hdChpKTxwYXJzZUZsb2F0KGUpO2RlZmF1bHQ6cmV0dXJuIHQucHVzaChuZXcgeXQoMzAxNiwhMSkpLCIqID0+ICoifX0obixlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbClyZXR1cm4gdm9pZCB0LnB1c2gobCk7bj1sfWxldCBpPW4ubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIGUucHVzaChuZXcgeXQoMzAxNSwhMSkpLHQ7bGV0IHI9aVsxXSxvPWlbMl0scz1pWzNdO3QucHVzaChkRyhyLHMpKSwiPCI9PW9bMF0mJiEocj09a3cmJnM9PWt3KSYmdC5wdXNoKGRHKHMscikpfShpLGUsdCkpOmUucHVzaChuKSxlfXZhciBEdz1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksSXc9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBkRyhuLHQpe2xldCBlPUR3LmhhcyhuKXx8SXcuaGFzKG4pLGk9RHcuaGFzKHQpfHxJdy5oYXModCk7cmV0dXJuKHIsbyk9PntsZXQgcz1uPT1rd3x8bj09cixhPXQ9PWt3fHx0PT1vO3JldHVybiFzJiZlJiYiYm9vbGVhbiI9PXR5cGVvZiByJiYocz1yP0R3LmhhcyhuKTpJdy5oYXMobikpLCFhJiZpJiYiYm9vbGVhbiI9PXR5cGVvZiBvJiYoYT1vP0R3Lmhhcyh0KTpJdy5oYXModCkpLHMmJmF9fXZhciBTZmU9bmV3IFJlZ0V4cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24ga0cobix0LGUsaSl7cmV0dXJuIG5ldyB5ayhuKS5idWlsZCh0LGUsaSl9dmFyIHlrPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RyaXZlcj10fWJ1aWxkKHQsZSxpKXtsZXQgcj1uZXcgeGsoZSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUociksbGEodGhpcyxGYih0KSxyKX1fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZSh0KXt0LmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLHQuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdC5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLHQuY3VycmVudFRpbWU9MH12aXNpdFRyaWdnZXIodCxlKXtsZXQgaT1lLnF1ZXJ5Q291bnQ9MCxyPWUuZGVwQ291bnQ9MCxvPVtdLHM9W107cmV0dXJuIkAiPT10Lm5hbWUuY2hhckF0KDApJiZlLmVycm9ycy5wdXNoKG5ldyB5dCgzMDA2LCExKSksdC5kZWZpbml0aW9ucy5mb3JFYWNoKGE9PntpZih0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGUpLDA9PWEudHlwZSl7bGV0IGw9YSxjPWwubmFtZTtjLnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGQ9PntsLm5hbWU9ZCxvLnB1c2godGhpcy52aXNpdFN0YXRlKGwsZSkpfSksbC5uYW1lPWN9ZWxzZSBpZigxPT1hLnR5cGUpe2xldCBsPXRoaXMudmlzaXRUcmFuc2l0aW9uKGEsZSk7aSs9bC5xdWVyeUNvdW50LHIrPWwuZGVwQ291bnQscy5wdXNoKGwpfWVsc2UgZS5lcnJvcnMucHVzaChuZXcgeXQoMzAwNywhMSkpfSkse3R5cGU6NyxuYW1lOnQubmFtZSxzdGF0ZXM6byx0cmFuc2l0aW9uczpzLHF1ZXJ5Q291bnQ6aSxkZXBDb3VudDpyLG9wdGlvbnM6bnVsbH19dmlzaXRTdGF0ZSh0LGUpe2xldCBpPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxyPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihpLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7bGV0IG89bmV3IFNldCxzPXJ8fHt9O2kuc3R5bGVzLmZvckVhY2goYT0+e2EgaW5zdGFuY2VvZiBNYXAmJmEuZm9yRWFjaChsPT57SUcobCkuZm9yRWFjaChjPT57cy5oYXNPd25Qcm9wZXJ0eShjKXx8by5hZGQoYyl9KX0pfSksby5zaXplJiYoT3coby52YWx1ZXMoKSksZS5lcnJvcnMucHVzaChuZXcgeXQoMzAwOCwhMSkpKX1yZXR1cm57dHlwZTowLG5hbWU6dC5uYW1lLHN0eWxlOmksb3B0aW9uczpyP3twYXJhbXM6cn06bnVsbH19dmlzaXRUcmFuc2l0aW9uKHQsZSl7ZS5xdWVyeUNvdW50PTAsZS5kZXBDb3VudD0wO2xldCBpPWxhKHRoaXMsRmIodC5hbmltYXRpb24pLGUpO3JldHVybnt0eXBlOjEsbWF0Y2hlcnM6Q2ZlKHQuZXhwcixlLmVycm9ycyksYW5pbWF0aW9uOmkscXVlcnlDb3VudDplLnF1ZXJ5Q291bnQsZGVwQ291bnQ6ZS5kZXBDb3VudCxvcHRpb25zOmVmKHQub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UodCxlKXtyZXR1cm57dHlwZToyLHN0ZXBzOnQuc3RlcHMubWFwKGk9PmxhKHRoaXMsaSxlKSksb3B0aW9uczplZih0Lm9wdGlvbnMpfX12aXNpdEdyb3VwKHQsZSl7bGV0IGk9ZS5jdXJyZW50VGltZSxyPTAsbz10LnN0ZXBzLm1hcChzPT57ZS5jdXJyZW50VGltZT1pO2xldCBhPWxhKHRoaXMscyxlKTtyZXR1cm4gcj1NYXRoLm1heChyLGUuY3VycmVudFRpbWUpLGF9KTtyZXR1cm4gZS5jdXJyZW50VGltZT1yLHt0eXBlOjMsc3RlcHM6byxvcHRpb25zOmVmKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZSh0LGUpe2xldCBpPWZ1bmN0aW9uKG4sdCl7aWYobi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSlyZXR1cm4gbjtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIGRrKFB3KG4sdCkuZHVyYXRpb24sMCwiIik7bGV0IGU9bjtpZihlLnNwbGl0KC9ccysvKS5zb21lKG89PiJ7Ij09by5jaGFyQXQoMCkmJiJ7Ij09by5jaGFyQXQoMSkpKXtsZXQgbz1kaygwLDAsIiIpO3JldHVybiBvLmR5bmFtaWM9ITAsby5zdHJWYWx1ZT1lLG99bGV0IHI9UHcoZSx0KTtyZXR1cm4gZGsoci5kdXJhdGlvbixyLmRlbGF5LHIuZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1pO2xldCByLG89dC5zdHlsZXM/dC5zdHlsZXM6cm4oe30pO2lmKDU9PW8udHlwZSlyPXRoaXMudmlzaXRLZXlmcmFtZXMobyxlKTtlbHNle2xldCBzPXQuc3R5bGVzLGE9ITE7aWYoIXMpe2E9ITA7bGV0IGM9e307aS5lYXNpbmcmJihjLmVhc2luZz1pLmVhc2luZykscz1ybihjKX1lLmN1cnJlbnRUaW1lKz1pLmR1cmF0aW9uK2kuZGVsYXk7bGV0IGw9dGhpcy52aXNpdFN0eWxlKHMsZSk7bC5pc0VtcHR5U3RlcD1hLHI9bH1yZXR1cm4gZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTo0LHRpbWluZ3M6aSxzdHlsZTpyLG9wdGlvbnM6bnVsbH19dmlzaXRTdHlsZSh0LGUpe2xldCBpPXRoaXMuX21ha2VTdHlsZUFzdCh0LGUpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGksZSksaX1fbWFrZVN0eWxlQXN0KHQsZSl7bGV0IGk9W10scj1BcnJheS5pc0FycmF5KHQuc3R5bGVzKT90LnN0eWxlczpbdC5zdHlsZXNdO2ZvcihsZXQgYSBvZiByKSJzdHJpbmciPT10eXBlb2YgYT9hPT09eGM/aS5wdXNoKGEpOmUuZXJyb3JzLnB1c2gobmV3IHl0KDMwMDIsITEpKTppLnB1c2goVEcoYSkpO2xldCBvPSExLHM9bnVsbDtyZXR1cm4gaS5mb3JFYWNoKGE9PntpZihhIGluc3RhbmNlb2YgTWFwJiYoYS5oYXMoImVhc2luZyIpJiYocz1hLmdldCgiZWFzaW5nIiksYS5kZWxldGUoImVhc2luZyIpKSwhbykpZm9yKGxldCBsIG9mIGEudmFsdWVzKCkpaWYobC50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe289ITA7YnJlYWt9fSkse3R5cGU6NixzdHlsZXM6aSxlYXNpbmc6cyxvZmZzZXQ6dC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOm8sb3B0aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdCh0LGUpe2xldCBpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZSxvPWUuY3VycmVudFRpbWU7aSYmbz4wJiYoby09aS5kdXJhdGlvbitpLmRlbGF5KSx0LnN0eWxlcy5mb3JFYWNoKHM9Pnsic3RyaW5nIiE9dHlwZW9mIHMmJnMuZm9yRWFjaCgoYSxsKT0+e2xldCBjPWUuY29sbGVjdGVkU3R5bGVzLmdldChlLmN1cnJlbnRRdWVyeVNlbGVjdG9yKSxkPWMuZ2V0KGwpLHU9ITA7ZCYmKG8hPXImJm8+PWQuc3RhcnRUaW1lJiZyPD1kLmVuZFRpbWUmJihlLmVycm9ycy5wdXNoKG5ldyB5dCgzMDEwLCExKSksdT0hMSksbz1kLnN0YXJ0VGltZSksdSYmYy5zZXQobCx7c3RhcnRUaW1lOm8sZW5kVGltZTpyfSksZS5vcHRpb25zJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9dC5wYXJhbXN8fHt9LHI9SUcobik7ci5sZW5ndGgmJnIuZm9yRWFjaChvPT57aS5oYXNPd25Qcm9wZXJ0eShvKXx8ZS5wdXNoKG5ldyB5dCgzMDAxLCExKSl9KX0oYSxlLm9wdGlvbnMsZS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyh0LGUpe2xldCBpPXt0eXBlOjUsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWUuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBlLmVycm9ycy5wdXNoKG5ldyB5dCgzMDExLCExKSksaTtsZXQgbz0wLHM9W10sYT0hMSxsPSExLGM9MCxkPXQuc3RlcHMubWFwKHk9PntsZXQgeD10aGlzLl9tYWtlU3R5bGVBc3QoeSxlKSxSPW51bGwhPXgub2Zmc2V0P3gub2Zmc2V0OmZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbnVsbDtsZXQgdD1udWxsO2lmKEFycmF5LmlzQXJyYXkobikpbi5mb3JFYWNoKGU9PntpZihlIGluc3RhbmNlb2YgTWFwJiZlLmhhcygib2Zmc2V0Iikpe2xldCBpPWU7dD1wYXJzZUZsb2F0KGkuZ2V0KCJvZmZzZXQiKSksaS5kZWxldGUoIm9mZnNldCIpfX0pO2Vsc2UgaWYobiBpbnN0YW5jZW9mIE1hcCYmbi5oYXMoIm9mZnNldCIpKXtsZXQgZT1uO3Q9cGFyc2VGbG9hdChlLmdldCgib2Zmc2V0IikpLGUuZGVsZXRlKCJvZmZzZXQiKX1yZXR1cm4gdH0oeC5zdHlsZXMpLEE9MDtyZXR1cm4gbnVsbCE9UiYmKG8rKyxBPXgub2Zmc2V0PVIpLGw9bHx8QTwwfHxBPjEsYT1hfHxBPGMsYz1BLHMucHVzaChBKSx4fSk7bCYmZS5lcnJvcnMucHVzaChuZXcgeXQoMzAxMiwhMSkpLGEmJmUuZXJyb3JzLnB1c2gobmV3IHl0KDMyMDAsITEpKTtsZXQgdT10LnN0ZXBzLmxlbmd0aCxwPTA7bz4wJiZvPHU/ZS5lcnJvcnMucHVzaChuZXcgeXQoMzIwMiwhMSkpOjA9PW8mJihwPTEvKHUtMSkpO2xldCBmPXUtMSxtPWUuY3VycmVudFRpbWUsYj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxNPWIuZHVyYXRpb247cmV0dXJuIGQuZm9yRWFjaCgoeSx4KT0+e2xldCBSPXA+MD94PT1mPzE6cCp4OnNbeF0sQT1SKk07ZS5jdXJyZW50VGltZT1tK2IuZGVsYXkrQSxiLmR1cmF0aW9uPUEsdGhpcy5fdmFsaWRhdGVTdHlsZUFzdCh5LGUpLHkub2Zmc2V0PVIsaS5zdHlsZXMucHVzaCh5KX0pLGl9dmlzaXRSZWZlcmVuY2UodCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpsYSh0aGlzLEZiKHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOmVmKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKHQsZSl7cmV0dXJuIGUuZGVwQ291bnQrKyx7dHlwZTo5LG9wdGlvbnM6ZWYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczplZih0Lm9wdGlvbnMpfX12aXNpdFF1ZXJ5KHQsZSl7bGV0IGk9ZS5jdXJyZW50UXVlcnlTZWxlY3RvcixyPXQub3B0aW9uc3x8e307ZS5xdWVyeUNvdW50KyssZS5jdXJyZW50UXVlcnk9dDtsZXRbbyxzXT1mdW5jdGlvbihuKXtsZXQgdD0hIW4uc3BsaXQoL1xzKixccyovKS5maW5kKGU9PiI6c2VsZiI9PWUpO3JldHVybiB0JiYobj1uLnJlcGxhY2UoU2ZlLCIiKSksbj1uLnJlcGxhY2UoL0BcKi9nLFJ3KS5yZXBsYWNlKC9AXHcrL2csZT0+UncrIi0iK2Uuc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyxfayksW24sdF19KHQuc2VsZWN0b3IpO2UuY3VycmVudFF1ZXJ5U2VsZWN0b3I9aS5sZW5ndGg/aSsiICIrbzpvLGNhKGUuY29sbGVjdGVkU3R5bGVzLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7bGV0IGE9bGEodGhpcyxGYih0LmFuaW1hdGlvbiksZSk7cmV0dXJuIGUuY3VycmVudFF1ZXJ5PW51bGwsZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1pLHt0eXBlOjExLHNlbGVjdG9yOm8sbGltaXQ6ci5saW1pdHx8MCxvcHRpb25hbDohIXIub3B0aW9uYWwsaW5jbHVkZVNlbGY6cyxhbmltYXRpb246YSxvcmlnaW5hbFNlbGVjdG9yOnQuc2VsZWN0b3Isb3B0aW9uczplZih0Lm9wdGlvbnMpfX12aXNpdFN0YWdnZXIodCxlKXtlLmN1cnJlbnRRdWVyeXx8ZS5lcnJvcnMucHVzaChuZXcgeXQoMzAxMywhMSkpO2xldCBpPSJmdWxsIj09PXQudGltaW5ncz97ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiZnVsbCJ9OlB3KHQudGltaW5ncyxlLmVycm9ycywhMCk7cmV0dXJue3R5cGU6MTIsYW5pbWF0aW9uOmxhKHRoaXMsRmIodC5hbmltYXRpb24pLGUpLHRpbWluZ3M6aSxvcHRpb25zOm51bGx9fX0seGs9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5lcnJvcnM9dCx0aGlzLnF1ZXJ5Q291bnQ9MCx0aGlzLmRlcENvdW50PTAsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsLHRoaXMuY3VycmVudFF1ZXJ5PW51bGwsdGhpcy5jdXJyZW50UXVlcnlTZWxlY3Rvcj1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdGhpcy5vcHRpb25zPW51bGwsdGhpcy51bnN1cHBvcnRlZENTU1Byb3BlcnRpZXNGb3VuZD1uZXcgU2V0fX07ZnVuY3Rpb24gZWYobil7cmV0dXJuIG4/KG49amIobikpLnBhcmFtcyYmKG4ucGFyYW1zPWZ1bmN0aW9uKG4pe3JldHVybiBuP2piKG4pOm51bGx9KG4ucGFyYW1zKSk6bj17fSxufWZ1bmN0aW9uIGRrKG4sdCxlKXtyZXR1cm57ZHVyYXRpb246bixkZWxheTp0LGVhc2luZzplfX1mdW5jdGlvbiBGayhuLHQsZSxpLHIsbyxzPW51bGwsYT0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50Om4sa2V5ZnJhbWVzOnQscHJlU3R5bGVQcm9wczplLHBvc3RTdHlsZVByb3BzOmksZHVyYXRpb246cixkZWxheTpvLHRvdGFsVGltZTpyK28sZWFzaW5nOnMsc3ViVGltZWxpbmU6YX19dmFyIEJiPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXB9Z2V0KHQpe3JldHVybiB0aGlzLl9tYXAuZ2V0KHQpfHxbXX1hcHBlbmQodCxlKXtsZXQgaT10aGlzLl9tYXAuZ2V0KHQpO2l8fHRoaXMuX21hcC5zZXQodCxpPVtdKSxpLnB1c2goLi4uZSl9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9fSxQZmU9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLGtmZT1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gRkcobix0LGUsaSxyLG89bmV3IE1hcCxzPW5ldyBNYXAsYSxsLGM9W10pe3JldHVybihuZXcgQ2spLmJ1aWxkS2V5ZnJhbWVzKG4sdCxlLGkscixvLHMsYSxsLGMpfXZhciBDaz1jbGFzc3tidWlsZEtleWZyYW1lcyh0LGUsaSxyLG8scyxhLGwsYyxkPVtdKXtjPWN8fG5ldyBCYjtsZXQgdT1uZXcgVmIodCxlLGMscixvLGQsW10pO3Uub3B0aW9ucz1sO2xldCBwPWwuZGVsYXk/cGQobC5kZWxheSk6MDt1LmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKHApLHUuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbc10sbnVsbCx1LmVycm9ycyxsKSxsYSh0aGlzLGksdSk7bGV0IGY9dS50aW1lbGluZXMuZmlsdGVyKG09Pm0uY29udGFpbnNBbmltYXRpb24oKSk7aWYoZi5sZW5ndGgmJmEuc2l6ZSl7bGV0IG07Zm9yKGxldCBiPWYubGVuZ3RoLTE7Yj49MDtiLS0pe2xldCBNPWZbYl07aWYoTS5lbGVtZW50PT09ZSl7bT1NO2JyZWFrfX1tJiYhbS5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpJiZtLnNldFN0eWxlcyhbYV0sbnVsbCx1LmVycm9ycyxsKX1yZXR1cm4gZi5sZW5ndGg/Zi5tYXAobT0+bS5idWlsZEtleWZyYW1lcygpKTpbRmsoZSxbXSxbXSxbXSwwLHAsIiIsITEpXX12aXNpdFRyaWdnZXIodCxlKXt9dmlzaXRTdGF0ZSh0LGUpe312aXNpdFRyYW5zaXRpb24odCxlKXt9dmlzaXRBbmltYXRlQ2hpbGQodCxlKXtsZXQgaT1lLnN1Ykluc3RydWN0aW9ucy5nZXQoZS5lbGVtZW50KTtpZihpKXtsZXQgcj1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKSxvPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHM9dGhpcy5fdmlzaXRTdWJJbnN0cnVjdGlvbnMoaSxyLHIub3B0aW9ucyk7byE9cyYmZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocyl9ZS5wcmV2aW91c05vZGU9dH12aXNpdEFuaW1hdGVSZWYodCxlKXtsZXQgaT1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtpLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLHRoaXMuX2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKFt0Lm9wdGlvbnMsdC5hbmltYXRpb24ub3B0aW9uc10sZSxpKSx0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLGkpLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGkuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxlLnByZXZpb3VzTm9kZT10fV9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyh0LGUsaSl7Zm9yKGxldCByIG9mIHQpe2xldCBvPXI/LmRlbGF5O2lmKG8pe2xldCBzPSJudW1iZXIiPT10eXBlb2Ygbz9vOnBkKExiKG8scj8ucGFyYW1zPz97fSxlLmVycm9ycykpO2kuZGVsYXlOZXh0U3RlcChzKX19fV92aXNpdFN1Ykluc3RydWN0aW9ucyh0LGUsaSl7bGV0IG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscz1udWxsIT1pLmR1cmF0aW9uP3BkKGkuZHVyYXRpb24pOm51bGwsYT1udWxsIT1pLmRlbGF5P3BkKGkuZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1zJiZ0LmZvckVhY2gobD0+e2xldCBjPWUuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKGwscyxhKTtvPU1hdGgubWF4KG8sYy5kdXJhdGlvbitjLmRlbGF5KX0pLG99dmlzaXRSZWZlcmVuY2UodCxlKXtlLnVwZGF0ZU9wdGlvbnModC5vcHRpb25zLCEwKSxsYSh0aGlzLHQuYW5pbWF0aW9uLGUpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRTZXF1ZW5jZSh0LGUpe2xldCBpPWUuc3ViQ29udGV4dENvdW50LHI9ZSxvPXQub3B0aW9ucztpZihvJiYoby5wYXJhbXN8fG8uZGVsYXkpJiYocj1lLmNyZWF0ZVN1YkNvbnRleHQobyksci50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSxudWxsIT1vLmRlbGF5KSl7Nj09ci5wcmV2aW91c05vZGUudHlwZSYmKHIuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLHIucHJldmlvdXNOb2RlPUZ3KTtsZXQgcz1wZChvLmRlbGF5KTtyLmRlbGF5TmV4dFN0ZXAocyl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2gocz0+bGEodGhpcyxzLHIpKSxyLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxyLnN1YkNvbnRleHRDb3VudD5pJiZyLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0R3JvdXAodCxlKXtsZXQgaT1bXSxyPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zJiZ0Lm9wdGlvbnMuZGVsYXk/cGQodC5vcHRpb25zLmRlbGF5KTowO3Quc3RlcHMuZm9yRWFjaChzPT57bGV0IGE9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7byYmYS5kZWxheU5leHRTdGVwKG8pLGxhKHRoaXMscyxhKSxyPU1hdGgubWF4KHIsYS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGkucHVzaChhLmN1cnJlbnRUaW1lbGluZSl9KSxpLmZvckVhY2gocz0+ZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhzKSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUociksZS5wcmV2aW91c05vZGU9dH1fdmlzaXRUaW1pbmcodCxlKXtpZih0LmR5bmFtaWMpe2xldCBpPXQuc3RyVmFsdWU7cmV0dXJuIFB3KGUucGFyYW1zP0xiKGksZS5wYXJhbXMsZS5lcnJvcnMpOmksZS5lcnJvcnMpfXJldHVybntkdXJhdGlvbjp0LmR1cmF0aW9uLGRlbGF5OnQuZGVsYXksZWFzaW5nOnQuZWFzaW5nfX12aXNpdEFuaW1hdGUodCxlKXtsZXQgaT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyh0LnRpbWluZ3MsZSkscj1lLmN1cnJlbnRUaW1lbGluZTtpLmRlbGF5JiYoZS5pbmNyZW1lbnRUaW1lKGkuZGVsYXkpLHIuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2xldCBvPXQuc3R5bGU7NT09by50eXBlP3RoaXMudmlzaXRLZXlmcmFtZXMobyxlKTooZS5pbmNyZW1lbnRUaW1lKGkuZHVyYXRpb24pLHRoaXMudmlzaXRTdHlsZShvLGUpLHIuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsZS5wcmV2aW91c05vZGU9dH12aXNpdFN0eWxlKHQsZSl7bGV0IGk9ZS5jdXJyZW50VGltZWxpbmUscj1lLmN1cnJlbnRBbmltYXRlVGltaW5nczshciYmaS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkmJmkuZm9yd2FyZEZyYW1lKCk7bGV0IG89ciYmci5lYXNpbmd8fHQuZWFzaW5nO3QuaXNFbXB0eVN0ZXA/aS5hcHBseUVtcHR5U3RlcChvKTppLnNldFN0eWxlcyh0LnN0eWxlcyxvLGUuZXJyb3JzLGUub3B0aW9ucyksZS5wcmV2aW91c05vZGU9dH12aXNpdEtleWZyYW1lcyh0LGUpe2xldCBpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24sbz1pLmR1cmF0aW9uLGE9ZS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO2EuZWFzaW5nPWkuZWFzaW5nLHQuc3R5bGVzLmZvckVhY2gobD0+e2EuZm9yd2FyZFRpbWUoKGwub2Zmc2V0fHwwKSpvKSxhLnNldFN0eWxlcyhsLnN0eWxlcyxsLmVhc2luZyxlLmVycm9ycyxlLm9wdGlvbnMpLGEuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCl9KSxlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGEpLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHIrbyksZS5wcmV2aW91c05vZGU9dH12aXNpdFF1ZXJ5KHQsZSl7bGV0IGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscj10Lm9wdGlvbnN8fHt9LG89ci5kZWxheT9wZChyLmRlbGF5KTowO28mJig2PT09ZS5wcmV2aW91c05vZGUudHlwZXx8MD09aSYmZS5jdXJyZW50VGltZWxpbmUuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpKSYmKGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGUucHJldmlvdXNOb2RlPUZ3KTtsZXQgcz1pLGE9ZS5pbnZva2VRdWVyeSh0LnNlbGVjdG9yLHQub3JpZ2luYWxTZWxlY3Rvcix0LmxpbWl0LHQuaW5jbHVkZVNlbGYsISFyLm9wdGlvbmFsLGUuZXJyb3JzKTtlLmN1cnJlbnRRdWVyeVRvdGFsPWEubGVuZ3RoO2xldCBsPW51bGw7YS5mb3JFYWNoKChjLGQpPT57ZS5jdXJyZW50UXVlcnlJbmRleD1kO2xldCB1PWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMsYyk7byYmdS5kZWxheU5leHRTdGVwKG8pLGM9PT1lLmVsZW1lbnQmJihsPXUuY3VycmVudFRpbWVsaW5lKSxsYSh0aGlzLHQuYW5pbWF0aW9uLHUpLHUuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHM9TWF0aC5tYXgocyx1LmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSl9KSxlLmN1cnJlbnRRdWVyeUluZGV4PTAsZS5jdXJyZW50UXVlcnlUb3RhbD0wLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHMpLGwmJihlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGwpLGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3RhZ2dlcih0LGUpe2xldCBpPWUucGFyZW50Q29udGV4dCxyPWUuY3VycmVudFRpbWVsaW5lLG89dC50aW1pbmdzLHM9TWF0aC5hYnMoby5kdXJhdGlvbiksYT1zKihlLmN1cnJlbnRRdWVyeVRvdGFsLTEpLGw9cyplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChvLmR1cmF0aW9uPDA/InJldmVyc2UiOm8uZWFzaW5nKXtjYXNlInJldmVyc2UiOmw9YS1sO2JyZWFrO2Nhc2UiZnVsbCI6bD1pLmN1cnJlbnRTdGFnZ2VyVGltZX1sZXQgZD1lLmN1cnJlbnRUaW1lbGluZTtsJiZkLmRlbGF5TmV4dFN0ZXAobCk7bGV0IHU9ZC5jdXJyZW50VGltZTtsYSh0aGlzLHQuYW5pbWF0aW9uLGUpLGUucHJldmlvdXNOb2RlPXQsaS5jdXJyZW50U3RhZ2dlclRpbWU9ci5jdXJyZW50VGltZS11KyhyLnN0YXJ0VGltZS1pLmN1cnJlbnRUaW1lbGluZS5zdGFydFRpbWUpfX0sRnc9e30sVmI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN1Ykluc3RydWN0aW9ucz1pLHRoaXMuX2VudGVyQ2xhc3NOYW1lPXIsdGhpcy5fbGVhdmVDbGFzc05hbWU9byx0aGlzLmVycm9ycz1zLHRoaXMudGltZWxpbmVzPWEsdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1Gdyx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9ucz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9bHx8bmV3IHZoKHRoaXMuX2RyaXZlcixlLDApLGEucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfXVwZGF0ZU9wdGlvbnModCxlKXtpZighdClyZXR1cm47bGV0IGk9dCxyPXRoaXMub3B0aW9ucztudWxsIT1pLmR1cmF0aW9uJiYoci5kdXJhdGlvbj1wZChpLmR1cmF0aW9uKSksbnVsbCE9aS5kZWxheSYmKHIuZGVsYXk9cGQoaS5kZWxheSkpO2xldCBvPWkucGFyYW1zO2lmKG8pe2xldCBzPXIucGFyYW1zO3N8fChzPXRoaXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKG8pLmZvckVhY2goYT0+eyghZXx8IXMuaGFzT3duUHJvcGVydHkoYSkpJiYoc1thXT1MYihvW2FdLHMsdGhpcy5lcnJvcnMpKX0pfX1fY29weU9wdGlvbnMoKXtsZXQgdD17fTtpZih0aGlzLm9wdGlvbnMpe2xldCBlPXRoaXMub3B0aW9ucy5wYXJhbXM7aWYoZSl7bGV0IGk9dC5wYXJhbXM9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChyPT57aVtyXT1lW3JdfSl9fXJldHVybiB0fWNyZWF0ZVN1YkNvbnRleHQodD1udWxsLGUsaSl7bGV0IHI9ZXx8dGhpcy5lbGVtZW50LG89bmV3IFZiKHRoaXMuX2RyaXZlcixyLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVyQ2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsocixpfHwwKSk7cmV0dXJuIG8ucHJldmlvdXNOb2RlPXRoaXMucHJldmlvdXNOb2RlLG8uY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzLG8ub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLG8udXBkYXRlT3B0aW9ucyh0KSxvLmN1cnJlbnRRdWVyeUluZGV4PXRoaXMuY3VycmVudFF1ZXJ5SW5kZXgsby5jdXJyZW50UXVlcnlUb3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLG8ucGFyZW50Q29udGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50Kyssb310cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUodCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPUZ3LHRoaXMuY3VycmVudFRpbWVsaW5lPXRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LHQpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfWFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZSh0LGUsaSl7bGV0IHI9e2R1cmF0aW9uOmU/P3QuZHVyYXRpb24sZGVsYXk6dGhpcy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUrKGk/PzApK3QuZGVsYXksZWFzaW5nOiIifSxvPW5ldyBNayh0aGlzLl9kcml2ZXIsdC5lbGVtZW50LHQua2V5ZnJhbWVzLHQucHJlU3R5bGVQcm9wcyx0LnBvc3RTdHlsZVByb3BzLHIsdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2gobykscn1pbmNyZW1lbnRUaW1lKHQpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK3QpfWRlbGF5TmV4dFN0ZXAodCl7dD4wJiZ0aGlzLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKHQpfWludm9rZVF1ZXJ5KHQsZSxpLHIsbyxzKXtsZXQgYT1bXTtpZihyJiZhLnB1c2godGhpcy5lbGVtZW50KSx0Lmxlbmd0aD4wKXt0PSh0PXQucmVwbGFjZShQZmUsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSkucmVwbGFjZShrZmUsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgYz10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9aSk7MCE9PWkmJihjPWk8MD9jLnNsaWNlKGMubGVuZ3RoK2ksYy5sZW5ndGgpOmMuc2xpY2UoMCxpKSksYS5wdXNoKC4uLmMpfXJldHVybiFvJiYwPT1hLmxlbmd0aCYmcy5wdXNoKG5ldyB5dCgzMDE0LCExKSksYX19LHZoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPWksdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPXIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZWFzaW5nPW51bGwsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT1uZXcgTWFwLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nU3R5bGVzPW5ldyBNYXAsdGhpcy5fYmFja0ZpbGw9bmV3IE1hcCx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4wfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAodCl7bGV0IGU9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8ZT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK3QpLGUmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz10fWZvcmsodCxlKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgdmgodGhpcy5fZHJpdmVyLHQsZXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUodCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPXQsdGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KHQse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKHQpe3QmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLHQpO2ZvcihsZXRbZSxpXW9mIHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChlLGl8fHhjKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUseGMpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKHQsZSxpLHIpe2UmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGUpO2xldCBvPXImJnIucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKG4sdCl7bGV0IGksZT1uZXcgTWFwO3JldHVybiBuLmZvckVhY2gocj0+e2lmKCIqIj09PXIpe2k9aXx8dC5rZXlzKCk7Zm9yKGxldCBvIG9mIGkpZS5zZXQobyx4Yyl9ZWxzZSBiaChyLGUpfSksZX0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFthLGxdb2Ygcyl7bGV0IGM9TGIobCxvLGkpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGEsYyksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMoYSl8fHRoaXMuX2JhY2tGaWxsLnNldChhLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChhKT8/eGMpLHRoaXMuX3VwZGF0ZVN0eWxlKGEsYyl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgodCxlKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSx0KX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKHQsZSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGUpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFt0LGVdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldCh0LGUpLHRoaXMuX3VwZGF0ZVN0eWxlKHQsZSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7bGV0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXt0Ll9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoZSxpKT0+e2xldCByPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoaSk7KCFyfHxlLnRpbWU+ci50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoaSxlLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtsZXQgdD1uZXcgU2V0LGU9bmV3IFNldCxpPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb24scj1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoYSxsKT0+e2xldCBjPWJoKGEsbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7Yy5mb3JFYWNoKChkLHUpPT57ZD09PUV3P3QuYWRkKHUpOmQ9PT14YyYmZS5hZGQodSl9KSxpfHxjLnNldCgib2Zmc2V0IixsL3RoaXMuZHVyYXRpb24pLHIucHVzaChjKX0pO2xldCBvPXQuc2l6ZT9Pdyh0LnZhbHVlcygpKTpbXSxzPWUuc2l6ZT9PdyhlLnZhbHVlcygpKTpbXTtpZihpKXtsZXQgYT1yWzBdLGw9bmV3IE1hcChhKTthLnNldCgib2Zmc2V0IiwwKSxsLnNldCgib2Zmc2V0IiwxKSxyPVthLGxdfXJldHVybiBGayh0aGlzLmVsZW1lbnQscixvLHMsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9fSxNaz1jbGFzcyBleHRlbmRzIHZoe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGE9ITEpe3N1cGVyKHQsZSxzLmRlbGF5KSx0aGlzLmtleWZyYW1lcz1pLHRoaXMucHJlU3R5bGVQcm9wcz1yLHRoaXMucG9zdFN0eWxlUHJvcHM9byx0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1hLHRoaXMudGltaW5ncz17ZHVyYXRpb246cy5kdXJhdGlvbixkZWxheTpzLmRlbGF5LGVhc2luZzpzLmVhc2luZ319Y29udGFpbnNBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9YnVpbGRLZXlmcmFtZXMoKXtsZXQgdD10aGlzLmtleWZyYW1lcyx7ZGVsYXk6ZSxkdXJhdGlvbjppLGVhc2luZzpyfT10aGlzLnRpbWluZ3M7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJmUpe2xldCBvPVtdLHM9aStlLGE9ZS9zLGw9YmgodFswXSk7bC5zZXQoIm9mZnNldCIsMCksby5wdXNoKGwpO2xldCBjPWJoKHRbMF0pO2Muc2V0KCJvZmZzZXQiLHBHKGEpKSxvLnB1c2goYyk7bGV0IGQ9dC5sZW5ndGgtMTtmb3IobGV0IHU9MTt1PD1kO3UrKyl7bGV0IHA9YmgodFt1XSksZj1wLmdldCgib2Zmc2V0Iik7cC5zZXQoIm9mZnNldCIscEcoKGUrZippKS9zKSksby5wdXNoKHApfWk9cyxlPTAscj0iIix0PW99cmV0dXJuIEZrKHRoaXMuZWxlbWVudCx0LHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLGksZSxyLCEwKX19O2Z1bmN0aW9uIHBHKG4sdD0zKXtsZXQgZT1NYXRoLnBvdygxMCx0LTEpO3JldHVybiBNYXRoLnJvdW5kKG4qZSkvZX12YXIgbmY9Y2xhc3N7fSxOZmU9bmV3IFNldChbIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImxlZnQiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImZvbnRTaXplIiwib3V0bGluZVdpZHRoIiwib3V0bGluZU9mZnNldCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nUmlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwidGV4dEluZGVudCIsInBlcnNwZWN0aXZlIl0pLE53PWNsYXNzIGV4dGVuZHMgbmZ7bm9ybWFsaXplUHJvcGVydHlOYW1lKHQsZSl7cmV0dXJuIGtrKHQpfW5vcm1hbGl6ZVN0eWxlVmFsdWUodCxlLGkscil7bGV0IG89IiIscz1pLnRvU3RyaW5nKCkudHJpbSgpO2lmKE5mZS5oYXMoZSkmJjAhPT1pJiYiMCIhPT1pKWlmKCJudW1iZXIiPT10eXBlb2YgaSlvPSJweCI7ZWxzZXtsZXQgYT1pLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7YSYmMD09YVsxXS5sZW5ndGgmJnIucHVzaChuZXcgeXQoMzAwNSwhMSkpfXJldHVybiBzK299fTtmdW5jdGlvbiBmRyhuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6bix0cmlnZ2VyTmFtZTp0LGlzUmVtb3ZhbFRyYW5zaXRpb246cixmcm9tU3RhdGU6ZSxmcm9tU3R5bGVzOm8sdG9TdGF0ZTppLHRvU3R5bGVzOnMsdGltZWxpbmVzOmEscXVlcmllZEVsZW1lbnRzOmwscHJlU3R5bGVQcm9wczpjLHBvc3RTdHlsZVByb3BzOmQsdG90YWxUaW1lOnUsZXJyb3JzOnB9fXZhciB1az17fSxMdz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPWl9bWF0Y2godCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIG4uc29tZShvPT5vKHQsZSxpLHIpKX0odGhpcy5hc3QubWF0Y2hlcnMsdCxlLGkscil9YnVpbGRTdHlsZXModCxlLGkpe2xldCByPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVybiB2b2lkIDAhPT10JiYocj10aGlzLl9zdGF0ZVN0eWxlcy5nZXQodD8udG9TdHJpbmcoKSl8fHIpLHI/ci5idWlsZFN0eWxlcyhlLGkpOm5ldyBNYXB9YnVpbGQodCxlLGkscixvLHMsYSxsLGMsZCl7bGV0IHU9W10scD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8dWssbT10aGlzLmJ1aWxkU3R5bGVzKGksYSYmYS5wYXJhbXN8fHVrLHUpLGI9bCYmbC5wYXJhbXN8fHVrLE09dGhpcy5idWlsZFN0eWxlcyhyLGIsdSkseT1uZXcgU2V0LHg9bmV3IE1hcCxSPW5ldyBNYXAsQT0idm9pZCI9PT1yLFY9e3BhcmFtczpCZmUoYixwKSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sdGU9ZD9bXTpGRyh0LGUsdGhpcy5hc3QuYW5pbWF0aW9uLG8scyxtLE0sVixjLHUpLEs9MDtpZih0ZS5mb3JFYWNoKFhlPT57Sz1NYXRoLm1heChYZS5kdXJhdGlvbitYZS5kZWxheSxLKX0pLHUubGVuZ3RoKXJldHVybiBmRyhlLHRoaXMuX3RyaWdnZXJOYW1lLGkscixBLG0sTSxbXSxbXSx4LFIsSyx1KTt0ZS5mb3JFYWNoKFhlPT57bGV0IERlPVhlLmVsZW1lbnQsRD1jYSh4LERlLG5ldyBTZXQpO1hlLnByZVN0eWxlUHJvcHMuZm9yRWFjaChjZT0+RC5hZGQoY2UpKTtsZXQgcmU9Y2EoUixEZSxuZXcgU2V0KTtYZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGNlPT5yZS5hZGQoY2UpKSxEZSE9PWUmJnkuYWRkKERlKX0pO2xldCB4ZT1Pdyh5LnZhbHVlcygpKTtyZXR1cm4gZkcoZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsQSxtLE0sdGUseGUseCxSLEspfX07ZnVuY3Rpb24gQmZlKG4sdCl7bGV0IGU9amIodCk7Zm9yKGxldCBpIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShpKSYmbnVsbCE9bltpXSYmKGVbaV09bltpXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbUcobix0LGUpe24uaGFzKHQpP24uaGFzKGUpfHxuLnNldChlLG4uZ2V0KHQpKTpuLmhhcyhlKSYmbi5zZXQodCxuLmdldChlKSl9dmFyIHpmZT1uZXcgQmIsaEc9Im5nLWFuaW1hdGUtcXVldWVkIixwaz0ibmctYW5pbWF0ZS1kaXNhYmxlZCIscWZlPVtdLE5HPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSxZZmU9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LEJhPSJfX25nX3JlbW92ZWQiLEhiPWNsYXNze2dldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc31jb25zdHJ1Y3Rvcih0LGU9IiIpe3RoaXMubmFtZXNwYWNlSWQ9ZTtsZXQgaT10JiZ0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9KGk/dC52YWx1ZTp0KT8/bnVsbCxpKXtsZXQgbz1qYih0KTtkZWxldGUgby52YWx1ZSx0aGlzLm9wdGlvbnM9b31lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9YWJzb3JiT3B0aW9ucyh0KXtsZXQgZT10LnBhcmFtcztpZihlKXtsZXQgaT10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGUpLmZvckVhY2gocj0+e251bGw9PWlbcl0mJihpW3JdPWVbcl0pfSl9fX0sTmI9InZvaWQiLGZrPW5ldyBIYihOYiksemI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLnRyaWdnZXJOYW1lPWUsdGhpcy5lbGVtZW50PWksdGhpcy5fcGxheWVyPW5ldyBtdSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhpcy5fcXVldWVkQ2FsbGJhY2tzPW5ldyBNYXAsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXNldFJlYWxQbGF5ZXIodCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPXQsdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGUsaSk9PntlLmZvckVhY2gocj0+QWsodCxpLHZvaWQgMCxyKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZSh0LnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKHQpe3RoaXMudG90YWxUaW1lPXR9c3luY1BsYXllckV2ZW50cyh0KXtsZXQgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJnQub25TdGFydCgoKT0+ZS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLHQub25Eb25lKCgpPT50aGlzLmZpbmlzaCgpKSx0Lm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KHQsZSl7Y2EodGhpcy5fcXVldWVkQ2FsbGJhY2tzLHQsW10pLnB1c2goZSl9b25Eb25lKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIix0KSx0aGlzLl9wbGF5ZXIub25Eb25lKHQpfW9uU3RhcnQodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0Iix0KSx0aGlzLl9wbGF5ZXIub25TdGFydCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLHQpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kodCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQoKX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMuX3BsYXllci5maW5pc2goKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24odCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbih0KX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJmUudHJpZ2dlckNhbGxiYWNrKHQpfX07ZnVuY3Rpb24gQXcobil7cmV0dXJuIG4mJjE9PT1uLm5vZGVUeXBlfWZ1bmN0aW9uIGdHKG4sdCl7bGV0IGU9bi5zdHlsZS5kaXNwbGF5O3JldHVybiBuLnN0eWxlLmRpc3BsYXk9dD8/Im5vbmUiLGV9ZnVuY3Rpb24gX0cobix0LGUsaSxyKXtsZXQgbz1bXTtlLmZvckVhY2gobD0+by5wdXNoKGdHKGwpKSk7bGV0IHM9W107aS5mb3JFYWNoKChsLGMpPT57bGV0IGQ9bmV3IE1hcDtsLmZvckVhY2godT0+e2xldCBwPXQuY29tcHV0ZVN0eWxlKGMsdSxyKTtkLnNldCh1LHApLCghcHx8MD09cC5sZW5ndGgpJiYoY1tCYV09WWZlLHMucHVzaChjKSl9KSxuLnNldChjLGQpfSk7bGV0IGE9MDtyZXR1cm4gZS5mb3JFYWNoKGw9PmdHKGwsb1thKytdKSksc31mdW5jdGlvbiBiRyhuLHQpe2xldCBlPW5ldyBNYXA7aWYobi5mb3JFYWNoKGE9PmUuc2V0KGEsW10pKSwwPT10Lmxlbmd0aClyZXR1cm4gZTtsZXQgaT0xLHI9bmV3IFNldCh0KSxvPW5ldyBNYXA7ZnVuY3Rpb24gcyhhKXtpZighYSlyZXR1cm4gaTtsZXQgbD1vLmdldChhKTtpZihsKXJldHVybiBsO2xldCBjPWEucGFyZW50Tm9kZTtyZXR1cm4gbD1lLmhhcyhjKT9jOnIuaGFzKGMpP2k6cyhjKSxvLnNldChhLGwpLGx9cmV0dXJuIHQuZm9yRWFjaChhPT57bGV0IGw9cyhhKTtsIT09aSYmZS5nZXQobCkucHVzaChhKX0pLGV9ZnVuY3Rpb24gVmEobix0KXtuLmNsYXNzTGlzdD8uYWRkKHQpfWZ1bmN0aW9uIF9oKG4sdCl7bi5jbGFzc0xpc3Q/LnJlbW92ZSh0KX1mdW5jdGlvbiBLZmUobix0LGUpe2h1KGUpLm9uRG9uZSgoKT0+bi5wcm9jZXNzTGVhdmVOb2RlKHQpKX1mdW5jdGlvbiBMRyhuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdO2kgaW5zdGFuY2VvZiBQYj9MRyhpLnBsYXllcnMsdCk6dC5wdXNoKGkpfX1mdW5jdGlvbiB2RyhuLHQsZSl7bGV0IGk9ZS5nZXQobik7aWYoIWkpcmV0dXJuITE7bGV0IHI9dC5nZXQobik7cmV0dXJuIHI/aS5mb3JFYWNoKG89PnIuYWRkKG8pKTp0LnNldChuLGkpLGUuZGVsZXRlKG4pLCEwfXZhciBndT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5ib2R5Tm9kZT10LHRoaXMuX2RyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9aSx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0ocixvKT0+e30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgY2xhc3N7X29uUmVtb3ZhbENvbXBsZXRlKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfWNvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShyLG8pPT57fX1nZXQgcXVldWVkUGxheWVycygpe2xldCB0PVtdO3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goZT0+e2UucGxheWVycy5mb3JFYWNoKGk9PntpLnF1ZXVlZCYmdC5wdXNoKGkpfSl9KSx0fWNyZWF0ZU5hbWVzcGFjZSh0LGUpe2xldCBpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5pZD10LHRoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLl9lbmdpbmU9aSx0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9bmV3IE1hcCx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrdCxWYShlLHRoaXMuX2hvc3RDbGFzc05hbWUpfWxpc3Rlbih0LGUsaSxyKXtpZighdGhpcy5fdHJpZ2dlcnMuaGFzKGUpKXRocm93IG5ldyB5dCgzMzAyLCExKTtpZihudWxsPT1pfHwwPT1pLmxlbmd0aCl0aHJvdyBuZXcgeXQoMzMwMywhMSk7aWYoInN0YXJ0IiE9KG49aSkmJiJkb25lIiE9bil0aHJvdyBuZXcgeXQoMzQwMCwhMSk7dmFyIG47bGV0IG89Y2EodGhpcy5fZWxlbWVudExpc3RlbmVycyx0LFtdKSxzPXtuYW1lOmUscGhhc2U6aSxjYWxsYmFjazpyfTtvLnB1c2gocyk7bGV0IGE9Y2EodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCx0LG5ldyBNYXApO3JldHVybiBhLmhhcyhlKXx8KFZhKHQsVHcpLFZhKHQsVHcrIi0iK2UpLGEuc2V0KGUsZmspKSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57bGV0IGw9by5pbmRleE9mKHMpO2w+PTAmJm8uc3BsaWNlKGwsMSksdGhpcy5fdHJpZ2dlcnMuaGFzKGUpfHxhLmRlbGV0ZShlKX0pfX1yZWdpc3Rlcih0LGUpe3JldHVybiF0aGlzLl90cmlnZ2Vycy5oYXModCkmJih0aGlzLl90cmlnZ2Vycy5zZXQodCxlKSwhMCl9X2dldFRyaWdnZXIodCl7bGV0IGU9dGhpcy5fdHJpZ2dlcnMuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyB5dCgzNDAxLCExKTtyZXR1cm4gZX10cmlnZ2VyKHQsZSxpLHI9ITApe2xldCBvPXRoaXMuX2dldFRyaWdnZXIoZSkscz1uZXcgemIodGhpcy5pZCxlLHQpLGE9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7YXx8KFZhKHQsVHcpLFZhKHQsVHcrIi0iK2UpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KHQsYT1uZXcgTWFwKSk7bGV0IGw9YS5nZXQoZSksYz1uZXcgSGIoaSx0aGlzLmlkKTtpZighKGkmJmkuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZsJiZjLmFic29yYk9wdGlvbnMobC5vcHRpb25zKSxhLnNldChlLGMpLGx8fChsPWZrKSxjLnZhbHVlIT09TmImJmwudmFsdWU9PT1jLnZhbHVlKXtpZighZnVuY3Rpb24obix0KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPU9iamVjdC5rZXlzKHQpO2lmKGUubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89ZVtyXTtpZighdC5oYXNPd25Qcm9wZXJ0eShvKXx8bltvXSE9PXRbb10pcmV0dXJuITF9cmV0dXJuITB9KGwucGFyYW1zLGMucGFyYW1zKSl7bGV0IGI9W10sTT1vLm1hdGNoU3R5bGVzKGwudmFsdWUsbC5wYXJhbXMsYikseT1vLm1hdGNoU3R5bGVzKGMudmFsdWUsYy5wYXJhbXMsYik7Yi5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKGIpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57dGYodCxNKSxDYyh0LHkpfSl9cmV0dXJufWxldCBwPWNhKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO3AuZm9yRWFjaChiPT57Yi5uYW1lc3BhY2VJZD09dGhpcy5pZCYmYi50cmlnZ2VyTmFtZT09ZSYmYi5xdWV1ZWQmJmIuZGVzdHJveSgpfSk7bGV0IGY9by5tYXRjaFRyYW5zaXRpb24obC52YWx1ZSxjLnZhbHVlLHQsYy5wYXJhbXMpLG09ITE7aWYoIWYpe2lmKCFyKXJldHVybjtmPW8uZmFsbGJhY2tUcmFuc2l0aW9uLG09ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSx0cmFuc2l0aW9uOmYsZnJvbVN0YXRlOmwsdG9TdGF0ZTpjLHBsYXllcjpzLGlzRmFsbGJhY2tUcmFuc2l0aW9uOm19KSxtfHwoVmEodCxoRykscy5vblN0YXJ0KCgpPT57X2godCxoRyl9KSkscy5vbkRvbmUoKCk9PntsZXQgYj10aGlzLnBsYXllcnMuaW5kZXhPZihzKTtiPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGIsMSk7bGV0IE09dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKE0pe2xldCB5PU0uaW5kZXhPZihzKTt5Pj0wJiZNLnNwbGljZSh5LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKHMpLHAucHVzaChzKSxzfWRlcmVnaXN0ZXIodCl7dGhpcy5fdHJpZ2dlcnMuZGVsZXRlKHQpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZm9yRWFjaChlPT5lLmRlbGV0ZSh0KSksdGhpcy5fZWxlbWVudExpc3RlbmVycy5mb3JFYWNoKChlLGkpPT57dGhpcy5fZWxlbWVudExpc3RlbmVycy5zZXQoaSxlLmZpbHRlcihyPT5yLm5hbWUhPXQpKX0pfWNsZWFyRWxlbWVudENhY2hlKHQpe3RoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZGVsZXRlKHQpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZGVsZXRlKHQpO2xldCBlPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiYoZS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpe2xldCBpPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkodCxSdywhMCk7aS5mb3JFYWNoKHI9PntpZihyW0JhXSlyZXR1cm47bGV0IG89dGhpcy5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChyKTtvLnNpemU/by5mb3JFYWNoKHM9PnMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHIsZSwhMSwhMCkpOnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUocil9KSx0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5pLmZvckVhY2gocj0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShyKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsaSxyKXtsZXQgbz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KSxzPW5ldyBNYXA7aWYobyl7bGV0IGE9W107aWYoby5mb3JFYWNoKChsLGMpPT57aWYocy5zZXQoYyxsLnZhbHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoYykpe2xldCBkPXRoaXMudHJpZ2dlcih0LGMsTmIscik7ZCYmYS5wdXNoKGQpfX0pLGEubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCEwLGUscyksaSYmaHUoYSkub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpe2xldCBlPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpLGk9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYoZSYmaSl7bGV0IHI9bmV3IFNldDtlLmZvckVhY2gobz0+e2xldCBzPW8ubmFtZTtpZihyLmhhcyhzKSlyZXR1cm47ci5hZGQocyk7bGV0IGw9dGhpcy5fdHJpZ2dlcnMuZ2V0KHMpLmZhbGxiYWNrVHJhbnNpdGlvbixjPWkuZ2V0KHMpfHxmayxkPW5ldyBIYihOYiksdT1uZXcgemIodGhpcy5pZCxzLHQpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6cyx0cmFuc2l0aW9uOmwsZnJvbVN0YXRlOmMsdG9TdGF0ZTpkLHBsYXllcjp1LGlzRmFsbGJhY2tUcmFuc2l0aW9uOiEwfSl9KX19cmVtb3ZlTm9kZSh0LGUpe2xldCBpPXRoaXMuX2VuZ2luZTtpZih0LmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMCkpcmV0dXJuO2xldCByPSExO2lmKGkudG90YWxBbmltYXRpb25zKXtsZXQgbz1pLnBsYXllcnMubGVuZ3RoP2kucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKG8mJm8ubGVuZ3RoKXI9ITA7ZWxzZXtsZXQgcz10O2Zvcig7cz1zLnBhcmVudE5vZGU7KWlmKGkuc3RhdGVzQnlFbGVtZW50LmdldChzKSl7cj0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpLHIpaS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITEsZSk7ZWxzZXtsZXQgbz10W0JhXTsoIW98fG89PT1ORykmJihpLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUodCkpLGkuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KSxpLl9vblJlbW92YWxDb21wbGV0ZSh0LGUpKX19aW5zZXJ0Tm9kZSh0LGUpe1ZhKHQsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyh0KXtsZXQgZT1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChpPT57bGV0IHI9aS5wbGF5ZXI7aWYoci5kZXN0cm95ZWQpcmV0dXJuO2xldCBvPWkuZWxlbWVudCxzPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO3MmJnMuZm9yRWFjaChhPT57aWYoYS5uYW1lPT1pLnRyaWdnZXJOYW1lKXtsZXQgbD1SayhvLGkudHJpZ2dlck5hbWUsaS5mcm9tU3RhdGUudmFsdWUsaS50b1N0YXRlLnZhbHVlKTtsLl9kYXRhPXQsQWsoaS5wbGF5ZXIsYS5waGFzZSxsLGEuY2FsbGJhY2spfX0pLHIubWFya2VkRm9yRGVzdHJveT90aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e3IuZGVzdHJveSgpfSk6ZS5wdXNoKGkpfSksdGhpcy5fcXVldWU9W10sZS5zb3J0KChpLHIpPT57bGV0IG89aS50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxzPXIudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PW98fDA9PXM/by1zOnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGkuZWxlbWVudCxyLmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KHQpe3RoaXMucGxheWVycy5mb3JFYWNoKGU9PmUuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LHQpfWVsZW1lbnRDb250YWluc0RhdGEodCl7bGV0IGU9ITE7cmV0dXJuIHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuaGFzKHQpJiYoZT0hMCksZT0hIXRoaXMuX3F1ZXVlLmZpbmQoaT0+aS5lbGVtZW50PT09dCl8fGUsZX19KHQsZSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsZSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoaSxlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsaSksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09aX1fYmFsYW5jZU5hbWVzcGFjZUxpc3QodCxlKXtsZXQgaT10aGlzLl9uYW1lc3BhY2VMaXN0LHI9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtpZihpLmxlbmd0aC0xPj0wKXtsZXQgcz0hMSxhPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoZSk7Zm9yKDthOyl7bGV0IGw9ci5nZXQoYSk7aWYobCl7bGV0IGM9aS5pbmRleE9mKGwpO2kuc3BsaWNlKGMrMSwwLHQpLHM9ITA7YnJlYWt9YT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KGEpfXN8fGkudW5zaGlmdCh0KX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gci5zZXQoZSx0KSx0fXJlZ2lzdGVyKHQsZSl7bGV0IGk9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3JldHVybiBpfHwoaT10aGlzLmNyZWF0ZU5hbWVzcGFjZSh0LGUpKSxpfXJlZ2lzdGVyVHJpZ2dlcih0LGUsaSl7bGV0IHI9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3ImJnIucmVnaXN0ZXIoZSxpKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KHQsZSl7aWYoIXQpcmV0dXJuO2xldCBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO3RoaXMuYWZ0ZXJGbHVzaCgoKT0+e3RoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGkuaG9zdEVsZW1lbnQpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07bGV0IHI9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGkpO3I+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKHIsMSl9KSx0aGlzLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+aS5kZXN0cm95KGUpKX1fZmV0Y2hOYW1lc3BhY2UodCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX1mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCl7bGV0IGU9bmV3IFNldCxpPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihpKWZvcihsZXQgciBvZiBpLnZhbHVlcygpKWlmKHIubmFtZXNwYWNlSWQpe2xldCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHIubmFtZXNwYWNlSWQpO28mJmUuYWRkKG8pfXJldHVybiBlfXRyaWdnZXIodCxlLGkscil7aWYoQXcoZSkpe2xldCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2lmKG8pcmV0dXJuIG8udHJpZ2dlcihlLGksciksITB9cmV0dXJuITF9aW5zZXJ0Tm9kZSh0LGUsaSxyKXtpZighQXcoZSkpcmV0dXJuO2xldCBvPWVbQmFdO2lmKG8mJm8uc2V0Rm9yUmVtb3ZhbCl7by5zZXRGb3JSZW1vdmFsPSExLG8uc2V0Rm9yTW92ZT0hMDtsZXQgcz10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTtzPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHMsMSl9aWYodCl7bGV0IHM9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7cyYmcy5pbnNlcnROb2RlKGUsaSl9ciYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpfWNvbGxlY3RFbnRlckVsZW1lbnQodCl7dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLnB1c2godCl9bWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl7ZT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZCh0KSxWYSh0LHBrKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksX2godCxwaykpfXJlbW92ZU5vZGUodCxlLGkscil7aWYoQXcoZSkpe2xldCBvPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtpZihvP28ucmVtb3ZlTm9kZShlLHIpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLHIpLGkpe2xldCBzPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGUpO3MmJnMuaWQhPT10JiZzLnJlbW92ZU5vZGUoZSxyKX19ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShlLHIpfW1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSxpLHIsbyl7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZVtCYV09e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDpyLGhhc0FuaW1hdGlvbjppLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6b319bGlzdGVuKHQsZSxpLHIsbyl7cmV0dXJuIEF3KGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLGkscixvKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24odCxlLGkscixvKXtyZXR1cm4gdC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLHQuZWxlbWVudCx0LmZyb21TdGF0ZS52YWx1ZSx0LnRvU3RhdGUudmFsdWUsaSxyLHQuZnJvbVN0YXRlLm9wdGlvbnMsdC50b1N0YXRlLm9wdGlvbnMsZSxvKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpe2xldCBlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsUncsITApO2UuZm9yRWFjaChpPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChpKSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoZT10aGlzLmRyaXZlci5xdWVyeSh0LF9rLCEwKSxlLmZvckVhY2goaT0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGkpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KHQpe2xldCBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGk9PntpLnF1ZXVlZD9pLm1hcmtlZEZvckRlc3Ryb3k9ITA6aS5kZXN0cm95KCl9KX1maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpe2xldCBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChpPT5pLmZpbmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gaHUodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PnQoKSk7dCgpfSl9cHJvY2Vzc0xlYXZlTm9kZSh0KXtsZXQgZT10W0JhXTtpZihlJiZlLnNldEZvclJlbW92YWwpe2lmKHRbQmFdPU5HLGUubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KTtsZXQgaT10aGlzLl9mZXRjaE5hbWVzcGFjZShlLm5hbWVzcGFjZUlkKTtpJiZpLmNsZWFyRWxlbWVudENhY2hlKHQpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKHQsZS5zZXRGb3JSZW1vdmFsKX10LmNsYXNzTGlzdD8uY29udGFpbnMocGspJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKSx0aGlzLmRyaXZlci5xdWVyeSh0LCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goaT0+e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGksITEpfSl9Zmx1c2godD0tMSl7bGV0IGU9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKGkscik9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGkscikpLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgaT0wO2k8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtpKyspVmEodGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2ldLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2xldCBpPVtdO3RyeXtlPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhpLHQpfWZpbmFsbHl7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXSgpfX1lbHNlIGZvcihsZXQgaT0wO2k8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtpKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tpXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goaT0+aSgpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtsZXQgaT10aGlzLl93aGVuUXVpZXRGbnM7dGhpcy5fd2hlblF1aWV0Rm5zPVtdLGUubGVuZ3RoP2h1KGUpLm9uRG9uZSgoKT0+e2kuZm9yRWFjaChyPT5yKCkpfSk6aS5mb3JFYWNoKHI9PnIoKSl9fXJlcG9ydEVycm9yKHQpe3Rocm93IG5ldyB5dCgzNDAyLCExKX1fZmx1c2hBbmltYXRpb25zKHQsZSl7bGV0IGk9bmV3IEJiLHI9W10sbz1uZXcgTWFwLHM9W10sYT1uZXcgTWFwLGw9bmV3IE1hcCxjPW5ldyBNYXAsZD1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKG5lPT57ZC5hZGQobmUpO2xldCBkZT10aGlzLmRyaXZlci5xdWVyeShuZSwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCk7Zm9yKGxldCBwZT0wO3BlPGRlLmxlbmd0aDtwZSsrKWQuYWRkKGRlW3BlXSl9KTtsZXQgdT10aGlzLmJvZHlOb2RlLHA9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLGY9YkcocCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLG09bmV3IE1hcCxiPTA7Zi5mb3JFYWNoKChuZSxkZSk9PntsZXQgcGU9RUcrYisrO20uc2V0KGRlLHBlKSxuZS5mb3JFYWNoKGplPT5WYShqZSxwZSkpfSk7bGV0IE09W10seT1uZXcgU2V0LHg9bmV3IFNldDtmb3IobGV0IG5lPTA7bmU8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtuZSsrKXtsZXQgZGU9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW25lXSxwZT1kZVtCYV07cGUmJnBlLnNldEZvclJlbW92YWwmJihNLnB1c2goZGUpLHkuYWRkKGRlKSxwZS5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoZGUsIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaChqZT0+eS5hZGQoamUpKTp4LmFkZChkZSkpfWxldCBSPW5ldyBNYXAsQT1iRyhwLEFycmF5LmZyb20oeSkpO0EuZm9yRWFjaCgobmUsZGUpPT57bGV0IHBlPWdrK2IrKztSLnNldChkZSxwZSksbmUuZm9yRWFjaChqZT0+VmEoamUscGUpKX0pLHQucHVzaCgoKT0+e2YuZm9yRWFjaCgobmUsZGUpPT57bGV0IHBlPW0uZ2V0KGRlKTtuZS5mb3JFYWNoKGplPT5faChqZSxwZSkpfSksQS5mb3JFYWNoKChuZSxkZSk9PntsZXQgcGU9Ui5nZXQoZGUpO25lLmZvckVhY2goamU9Pl9oKGplLHBlKSl9KSxNLmZvckVhY2gobmU9Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUobmUpfSl9KTtsZXQgVj1bXSx0ZT1bXTtmb3IobGV0IG5lPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7bmU+PTA7bmUtLSl0aGlzLl9uYW1lc3BhY2VMaXN0W25lXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGUpLmZvckVhY2gocGU9PntsZXQgamU9cGUucGxheWVyLENlPXBlLmVsZW1lbnQ7aWYoVi5wdXNoKGplKSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXtsZXQgd3Q9Q2VbQmFdO2lmKHd0JiZ3dC5zZXRGb3JNb3ZlKXtpZih3dC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiZ3dC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcyhwZS50cmlnZ2VyTmFtZSkpe2xldCBvbj13dC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmdldChwZS50cmlnZ2VyTmFtZSksdmU9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHBlLmVsZW1lbnQpO2lmKHZlJiZ2ZS5oYXMocGUudHJpZ2dlck5hbWUpKXtsZXQgbXQ9dmUuZ2V0KHBlLnRyaWdnZXJOYW1lKTttdC52YWx1ZT1vbix2ZS5zZXQocGUudHJpZ2dlck5hbWUsbXQpfX1yZXR1cm4gdm9pZCBqZS5kZXN0cm95KCl9fWxldCBOZT0hdXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh1LENlKSxsdD1SLmdldChDZSksTXQ9bS5nZXQoQ2UpLHB0PXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24ocGUsaSxNdCxsdCxOZSk7aWYocHQuZXJyb3JzJiZwdC5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIHRlLnB1c2gocHQpO2lmKE5lKXJldHVybiBqZS5vblN0YXJ0KCgpPT50ZihDZSxwdC5mcm9tU3R5bGVzKSksamUub25EZXN0cm95KCgpPT5DYyhDZSxwdC50b1N0eWxlcykpLHZvaWQgci5wdXNoKGplKTtpZihwZS5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gamUub25TdGFydCgoKT0+dGYoQ2UscHQuZnJvbVN0eWxlcykpLGplLm9uRGVzdHJveSgoKT0+Q2MoQ2UscHQudG9TdHlsZXMpKSx2b2lkIHIucHVzaChqZSk7bGV0IE9lPVtdO3B0LnRpbWVsaW5lcy5mb3JFYWNoKHd0PT57d3Quc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITAsdGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh3dC5lbGVtZW50KXx8T2UucHVzaCh3dCl9KSxwdC50aW1lbGluZXM9T2UsaS5hcHBlbmQoQ2UscHQudGltZWxpbmVzKSxzLnB1c2goe2luc3RydWN0aW9uOnB0LHBsYXllcjpqZSxlbGVtZW50OkNlfSkscHQucXVlcmllZEVsZW1lbnRzLmZvckVhY2god3Q9PmNhKGEsd3QsW10pLnB1c2goamUpKSxwdC5wcmVTdHlsZVByb3BzLmZvckVhY2goKHd0LG9uKT0+e2lmKHd0LnNpemUpe2xldCB2ZT1sLmdldChvbik7dmV8fGwuc2V0KG9uLHZlPW5ldyBTZXQpLHd0LmZvckVhY2goKG10LGZ0KT0+dmUuYWRkKGZ0KSl9fSkscHQucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgod3Qsb24pPT57bGV0IHZlPWMuZ2V0KG9uKTt2ZXx8Yy5zZXQob24sdmU9bmV3IFNldCksd3QuZm9yRWFjaCgobXQsZnQpPT52ZS5hZGQoZnQpKX0pfSk7aWYodGUubGVuZ3RoKXtsZXQgbmU9W107dGUuZm9yRWFjaChkZT0+e25lLnB1c2gobmV3IHl0KDM1MDUsITEpKX0pLFYuZm9yRWFjaChkZT0+ZGUuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKG5lKX1sZXQgSz1uZXcgTWFwLHhlPW5ldyBNYXA7cy5mb3JFYWNoKG5lPT57bGV0IGRlPW5lLmVsZW1lbnQ7aS5oYXMoZGUpJiYoeGUuc2V0KGRlLGRlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChuZS5wbGF5ZXIubmFtZXNwYWNlSWQsbmUuaW5zdHJ1Y3Rpb24sSykpfSksci5mb3JFYWNoKG5lPT57bGV0IGRlPW5lLmVsZW1lbnQ7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKGRlLCExLG5lLm5hbWVzcGFjZUlkLG5lLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goamU9PntjYShLLGRlLFtdKS5wdXNoKGplKSxqZS5kZXN0cm95KCl9KX0pO2xldCBYZT1NLmZpbHRlcihuZT0+dkcobmUsbCxjKSksRGU9bmV3IE1hcDtfRyhEZSx0aGlzLmRyaXZlcix4LGMseGMpLmZvckVhY2gobmU9Pnt2RyhuZSxsLGMpJiZYZS5wdXNoKG5lKX0pO2xldCByZT1uZXcgTWFwO2YuZm9yRWFjaCgobmUsZGUpPT57X0cocmUsdGhpcy5kcml2ZXIsbmV3IFNldChuZSksbCxFdyl9KSxYZS5mb3JFYWNoKG5lPT57bGV0IGRlPURlLmdldChuZSkscGU9cmUuZ2V0KG5lKTtEZS5zZXQobmUsbmV3IE1hcChbLi4uQXJyYXkuZnJvbShkZT8uZW50cmllcygpPz9bXSksLi4uQXJyYXkuZnJvbShwZT8uZW50cmllcygpPz9bXSldKSl9KTtsZXQgY2U9W10sZmU9W10sYmU9e307cy5mb3JFYWNoKG5lPT57bGV0e2VsZW1lbnQ6ZGUscGxheWVyOnBlLGluc3RydWN0aW9uOmplfT1uZTtpZihpLmhhcyhkZSkpe2lmKGQuaGFzKGRlKSlyZXR1cm4gcGUub25EZXN0cm95KCgpPT5DYyhkZSxqZS50b1N0eWxlcykpLHBlLmRpc2FibGVkPSEwLHBlLm92ZXJyaWRlVG90YWxUaW1lKGplLnRvdGFsVGltZSksdm9pZCByLnB1c2gocGUpO2xldCBDZT1iZTtpZih4ZS5zaXplPjEpe2xldCBsdD1kZSxNdD1bXTtmb3IoO2x0PWx0LnBhcmVudE5vZGU7KXtsZXQgcHQ9eGUuZ2V0KGx0KTtpZihwdCl7Q2U9cHQ7YnJlYWt9TXQucHVzaChsdCl9TXQuZm9yRWFjaChwdD0+eGUuc2V0KHB0LENlKSl9bGV0IE5lPXRoaXMuX2J1aWxkQW5pbWF0aW9uKHBlLm5hbWVzcGFjZUlkLGplLEssbyxyZSxEZSk7aWYocGUuc2V0UmVhbFBsYXllcihOZSksQ2U9PT1iZSljZS5wdXNoKHBlKTtlbHNle2xldCBsdD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KENlKTtsdCYmbHQubGVuZ3RoJiYocGUucGFyZW50UGxheWVyPWh1KGx0KSksci5wdXNoKHBlKX19ZWxzZSB0ZihkZSxqZS5mcm9tU3R5bGVzKSxwZS5vbkRlc3Ryb3koKCk9PkNjKGRlLGplLnRvU3R5bGVzKSksZmUucHVzaChwZSksZC5oYXMoZGUpJiZyLnB1c2gocGUpfSksZmUuZm9yRWFjaChuZT0+e2xldCBkZT1vLmdldChuZS5lbGVtZW50KTtpZihkZSYmZGUubGVuZ3RoKXtsZXQgcGU9aHUoZGUpO25lLnNldFJlYWxQbGF5ZXIocGUpfX0pLHIuZm9yRWFjaChuZT0+e25lLnBhcmVudFBsYXllcj9uZS5zeW5jUGxheWVyRXZlbnRzKG5lLnBhcmVudFBsYXllcik6bmUuZGVzdHJveSgpfSk7Zm9yKGxldCBuZT0wO25lPE0ubGVuZ3RoO25lKyspe2xldCBkZT1NW25lXSxwZT1kZVtCYV07aWYoX2goZGUsZ2spLHBlJiZwZS5oYXNBbmltYXRpb24pY29udGludWU7bGV0IGplPVtdO2lmKGEuc2l6ZSl7bGV0IE5lPWEuZ2V0KGRlKTtOZSYmTmUubGVuZ3RoJiZqZS5wdXNoKC4uLk5lKTtsZXQgbHQ9dGhpcy5kcml2ZXIucXVlcnkoZGUsX2ssITApO2ZvcihsZXQgTXQ9MDtNdDxsdC5sZW5ndGg7TXQrKyl7bGV0IHB0PWEuZ2V0KGx0W010XSk7cHQmJnB0Lmxlbmd0aCYmamUucHVzaCguLi5wdCl9fWxldCBDZT1qZS5maWx0ZXIoTmU9PiFOZS5kZXN0cm95ZWQpO0NlLmxlbmd0aD9LZmUodGhpcyxkZSxDZSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGRlKX1yZXR1cm4gTS5sZW5ndGg9MCxjZS5mb3JFYWNoKG5lPT57dGhpcy5wbGF5ZXJzLnB1c2gobmUpLG5lLm9uRG9uZSgoKT0+e25lLmRlc3Ryb3koKTtsZXQgZGU9dGhpcy5wbGF5ZXJzLmluZGV4T2YobmUpO3RoaXMucGxheWVycy5zcGxpY2UoZGUsMSl9KSxuZS5wbGF5KCl9KSxjZX1lbGVtZW50Q29udGFpbnNEYXRhKHQsZSl7bGV0IGk9ITEscj1lW0JhXTtyZXR1cm4gciYmci5zZXRGb3JSZW1vdmFsJiYoaT0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8aX1hZnRlckZsdXNoKHQpe3RoaXMuX2ZsdXNoRm5zLnB1c2godCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKHQpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKHQpfV9nZXRQcmV2aW91c1BsYXllcnModCxlLGkscixvKXtsZXQgcz1bXTtpZihlKXtsZXQgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYocz1hKX1lbHNle2xldCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoYSl7bGV0IGw9IW98fG89PU5iO2EuZm9yRWFjaChjPT57Yy5xdWV1ZWR8fCFsJiZjLnRyaWdnZXJOYW1lIT1yfHxzLnB1c2goYyl9KX19cmV0dXJuKGl8fHIpJiYocz1zLmZpbHRlcihhPT4hKGkmJmkhPWEubmFtZXNwYWNlSWR8fHImJnIhPWEudHJpZ2dlck5hbWUpKSksc31fYmVmb3JlQW5pbWF0aW9uQnVpbGQodCxlLGkpe2xldCBvPWUuZWxlbWVudCxzPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZTtmb3IobGV0IGwgb2YgZS50aW1lbGluZXMpe2xldCBjPWwuZWxlbWVudCxkPWMhPT1vLHU9Y2EoaSxjLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYyxkLHMsYSxlLnRvU3RhdGUpLmZvckVhY2goZj0+e2xldCBtPWYuZ2V0UmVhbFBsYXllcigpO20uYmVmb3JlRGVzdHJveSYmbS5iZWZvcmVEZXN0cm95KCksZi5kZXN0cm95KCksdS5wdXNoKGYpfSl9dGYobyxlLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbih0LGUsaSxyLG8scyl7bGV0IGE9ZS50cmlnZ2VyTmFtZSxsPWUuZWxlbWVudCxjPVtdLGQ9bmV3IFNldCx1PW5ldyBTZXQscD1lLnRpbWVsaW5lcy5tYXAobT0+e2xldCBiPW0uZWxlbWVudDtkLmFkZChiKTtsZXQgTT1iW0JhXTtpZihNJiZNLnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgbXUobS5kdXJhdGlvbixtLmRlbGF5KTtsZXQgeT1iIT09bCx4PWZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiBMRyhuLHQpLHR9KChpLmdldChiKXx8cWZlKS5tYXAoSz0+Sy5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoSz0+ISFLLmVsZW1lbnQmJksuZWxlbWVudD09PWIpLFI9by5nZXQoYiksQT1zLmdldChiKSxWPXlHKDAsdGhpcy5fbm9ybWFsaXplciwwLG0ua2V5ZnJhbWVzLFIsQSksdGU9dGhpcy5fYnVpbGRQbGF5ZXIobSxWLHgpO2lmKG0uc3ViVGltZWxpbmUmJnImJnUuYWRkKGIpLHkpe2xldCBLPW5ldyB6Yih0LGEsYik7Sy5zZXRSZWFsUGxheWVyKHRlKSxjLnB1c2goSyl9cmV0dXJuIHRlfSk7Yy5mb3JFYWNoKG09PntjYSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LG0uZWxlbWVudCxbXSkucHVzaChtKSxtLm9uRG9uZSgoKT0+ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZ2V0KHQpO2lmKGkpe2lmKGkubGVuZ3RoKXtsZXQgcj1pLmluZGV4T2YoZSk7aS5zcGxpY2UociwxKX0wPT1pLmxlbmd0aCYmbi5kZWxldGUodCl9cmV0dXJuIGl9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsbS5lbGVtZW50LG0pKX0pLGQuZm9yRWFjaChtPT5WYShtLGxHKSk7bGV0IGY9aHUocCk7cmV0dXJuIGYub25EZXN0cm95KCgpPT57ZC5mb3JFYWNoKG09Pl9oKG0sbEcpKSxDYyhsLGUudG9TdHlsZXMpfSksdS5mb3JFYWNoKG09PntjYShyLG0sW10pLnB1c2goZil9KSxmfV9idWlsZFBsYXllcih0LGUsaSl7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsaSk6bmV3IG11KHQuZHVyYXRpb24sdC5kZWxheSl9fSh0LGUsaSksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMuX2FuaW1hdGlvbnM9bmV3IE1hcCx0aGlzLl9wbGF5ZXJzQnlJZD1uZXcgTWFwLHRoaXMucGxheWVycz1bXX1yZWdpc3Rlcih0LGUpe2xldCBpPVtdLHI9W10sbz1rRyh0aGlzLl9kcml2ZXIsZSxpLHIpO2lmKGkubGVuZ3RoKXRocm93IG5ldyB5dCgzNTAzLCExKTt0aGlzLl9hbmltYXRpb25zLnNldCh0LG8pfV9idWlsZFBsYXllcih0LGUsaSl7bGV0IHI9dC5lbGVtZW50LG89eUcoMCx0aGlzLl9ub3JtYWxpemVyLDAsdC5rZXlmcmFtZXMsZSxpKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUocixvLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxbXSwhMCl9Y3JlYXRlKHQsZSxpPXt9KXtsZXQgcyxyPVtdLG89dGhpcy5fYW5pbWF0aW9ucy5nZXQodCksYT1uZXcgTWFwO2lmKG8/KHM9RkcodGhpcy5fZHJpdmVyLGUsbyxFRyxnayxuZXcgTWFwLG5ldyBNYXAsaSx6ZmUscikscy5mb3JFYWNoKGQ9PntsZXQgdT1jYShhLGQuZWxlbWVudCxuZXcgTWFwKTtkLnBvc3RTdHlsZVByb3BzLmZvckVhY2gocD0+dS5zZXQocCxudWxsKSl9KSk6KHIucHVzaChuZXcgeXQoMzMwMCwhMSkpLHM9W10pLHIubGVuZ3RoKXRocm93IG5ldyB5dCgzNTA0LCExKTthLmZvckVhY2goKGQsdSk9PntkLmZvckVhY2goKHAsZik9PntkLnNldChmLHRoaXMuX2RyaXZlci5jb21wdXRlU3R5bGUodSxmLHhjKSl9KX0pO2xldCBjPWh1KHMubWFwKGQ9PntsZXQgdT1hLmdldChkLmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcihkLG5ldyBNYXAsdSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldCh0LGMpLGMub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kodCkpLHRoaXMucGxheWVycy5wdXNoKGMpLGN9ZGVzdHJveSh0KXtsZXQgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksdGhpcy5fcGxheWVyc0J5SWQuZGVsZXRlKHQpO2xldCBpPXRoaXMucGxheWVycy5pbmRleE9mKGUpO2k+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoaSwxKX1fZ2V0UGxheWVyKHQpe2xldCBlPXRoaXMuX3BsYXllcnNCeUlkLmdldCh0KTtpZighZSl0aHJvdyBuZXcgeXQoMzMwMSwhMSk7cmV0dXJuIGV9bGlzdGVuKHQsZSxpLHIpe2xldCBvPVJrKGUsIiIsIiIsIiIpO3JldHVybiBBayh0aGlzLl9nZXRQbGF5ZXIodCksaSxvLHIpLCgpPT57fX1jb21tYW5kKHQsZSxpLHIpe2lmKCJyZWdpc3RlciI9PWkpcmV0dXJuIHZvaWQgdGhpcy5yZWdpc3Rlcih0LHJbMF0pO2lmKCJjcmVhdGUiPT1pKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKHQsZSxyWzBdfHx7fSk7bGV0IG89dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChpKXtjYXNlInBsYXkiOm8ucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOm8ucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpvLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpvLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6by5maW5pc2goKTticmVhaztjYXNlImluaXQiOm8uaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOm8uc2V0UG9zaXRpb24ocGFyc2VGbG9hdChyWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fX0odCxlLGkpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KHIsbyk9PnRoaXMub25SZW1vdmFsQ29tcGxldGUocixvKX1yZWdpc3RlclRyaWdnZXIodCxlLGkscixvKXtsZXQgcz10KyItIityLGE9dGhpcy5fdHJpZ2dlckNhY2hlW3NdO2lmKCFhKXtsZXQgbD1bXSxjPVtdLGQ9a0codGhpcy5fZHJpdmVyLG8sbCxjKTtpZihsLmxlbmd0aCl0aHJvdyBuZXcgeXQoMzQwNCwhMSk7YT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5uYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPW5ldyBNYXAsZS5zdGF0ZXMuZm9yRWFjaChyPT57bGV0IG89ci5vcHRpb25zJiZyLm9wdGlvbnMucGFyYW1zfHx7fTt0aGlzLnN0YXRlcy5zZXQoci5uYW1lLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zdHlsZXM9dCx0aGlzLmRlZmF1bHRQYXJhbXM9ZSx0aGlzLm5vcm1hbGl6ZXI9aX1idWlsZFN0eWxlcyh0LGUpe2xldCBpPW5ldyBNYXAscj1qYih0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG89PntsZXQgcz10W29dO251bGwhPT1zJiYocltvXT1zKX0pLHRoaXMuc3R5bGVzLnN0eWxlcy5mb3JFYWNoKG89Pnsic3RyaW5nIiE9dHlwZW9mIG8mJm8uZm9yRWFjaCgocyxhKT0+e3MmJihzPUxiKHMscixlKSk7bGV0IGw9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShhLGUpO3M9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVN0eWxlVmFsdWUoYSxsLHMsZSksaS5zZXQoYSxzKX0pfSksaX19KHIuc3R5bGUsbyxpKSl9KSxtRyh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxtRyh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksZS50cmFuc2l0aW9ucy5mb3JFYWNoKHI9Pnt0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgTHcodCxyLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBMdyhuLHt0eXBlOjEsYW5pbWF0aW9uOnt0eXBlOjIsc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKHMsYSk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LHQpfSh0LHRoaXMuc3RhdGVzKX1nZXQgY29udGFpbnNRdWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24odCxlLGkscil7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKHM9PnMubWF0Y2godCxlLGkscikpfHxudWxsfW1hdGNoU3R5bGVzKHQsZSxpKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXModCxlLGkpfX0obix0LGUpfShyLGQsdGhpcy5fbm9ybWFsaXplciksdGhpcy5fdHJpZ2dlckNhY2hlW3NdPWF9dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZSxyLGEpfXJlZ2lzdGVyKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3Rlcih0LGUpfWRlc3Ryb3kodCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmRlc3Ryb3kodCxlKX1vbkluc2VydCh0LGUsaSxyKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUodCxlLGkscil9b25SZW1vdmUodCxlLGkscil7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZW1vdmVOb2RlKHQsZSxyfHwhMSxpKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl9cHJvY2Vzcyh0LGUsaSxyKXtpZigiQCI9PWkuY2hhckF0KDApKXtsZXRbbyxzXT1zRyhpKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5kKG8sZSxzLHIpfWVsc2UgdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS50cmlnZ2VyKHQsZSxpLHIpfWxpc3Rlbih0LGUsaSxyLG8pe2lmKCJAIj09aS5jaGFyQXQoMCkpe2xldFtzLGFdPXNHKGkpO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4ocyxlLGEsbyl9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKHQsZSxpLHIsbyl9Zmx1c2godD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaCh0KX1nZXQgcGxheWVycygpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19LHRtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fc3RhcnRTdHlsZXM9aSx0aGlzLl9lbmRTdHlsZXM9cix0aGlzLl9zdGF0ZT0wO2xldCBvPW4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5nZXQoZSk7b3x8bi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LnNldChlLG89bmV3IE1hcCksdGhpcy5faW5pdGlhbFN0eWxlcz1vfXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZDYyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwyJiYoQ2ModGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJihDYyh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRlPDMmJihuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVsZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYodGYodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX2VuZFN0eWxlcyYmKHRmKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksQ2ModGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0zKX19cmV0dXJuIG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudD1uZXcgV2Vha01hcCxufSkoKTtmdW5jdGlvbiBtayhuKXtsZXQgdD1udWxsO3JldHVybiBuLmZvckVhY2goKGUsaSk9PnsoZnVuY3Rpb24obil7cmV0dXJuImRpc3BsYXkiPT09bnx8InBvc2l0aW9uIj09PW59KShpKSYmKHQ9dHx8bmV3IE1hcCx0LnNldChpLGUpKX0pLHR9dmFyIEJ3PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5vcHRpb25zPWksdGhpcy5fc3BlY2lhbFN0eWxlcz1yLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1cnJlbnRTbmFwc2hvdD1uZXcgTWFwLHRoaXMuX2R1cmF0aW9uPWkuZHVyYXRpb24sdGhpcy5fZGVsYXk9aS5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVyKCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEwO2xldCB0PXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMuX3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LHQsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPXQubGVuZ3RoP3RbdC5sZW5ndGgtMV06bmV3IE1hcCx0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLCgpPT50aGlzLl9vbkZpbmlzaCgpKX1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdCh0KXtsZXQgZT1bXTtyZXR1cm4gdC5mb3JFYWNoKGk9PntlLnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKGkpKX0pLGV9X3RyaWdnZXJXZWJBbmltYXRpb24odCxlLGkpe3JldHVybiB0LmFuaW1hdGUodGhpcy5fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGUpLGkpfW9uU3RhcnQodCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2godCksdGhpcy5fb25TdGFydEZucy5wdXNoKHQpfW9uRG9uZSh0KXt0aGlzLl9vcmlnaW5hbE9uRG9uZUZucy5wdXNoKHQpLHRoaXMuX29uRG9uZUZucy5wdXNoKHQpfW9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX1wbGF5KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLnN0YXJ0KCkpLHRoaXMuZG9tUGxheWVyLnBsYXkoKX1wYXVzZSgpe3RoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLnBhdXNlKCl9ZmluaXNoKCl7dGhpcy5pbml0KCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5maW5pc2goKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfXJlc2V0KCl7dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31fcmVzZXREb21QbGF5ZXJTdGF0ZSgpe3RoaXMuZG9tUGxheWVyJiZ0aGlzLmRvbVBsYXllci5jYW5jZWwoKX1yZXN0YXJ0KCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1zZXRQb3NpdGlvbih0KXt2b2lkIDA9PT10aGlzLmRvbVBsYXllciYmdGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9dCp0aGlzLnRpbWV9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWUvdGhpcy50aW1lfWdldCB0b3RhbFRpbWUoKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259YmVmb3JlRGVzdHJveSgpe2xldCB0PW5ldyBNYXA7dGhpcy5oYXNTdGFydGVkKCkmJnRoaXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoaSxyKT0+eyJvZmZzZXQiIT09ciYmdC5zZXQocix0aGlzLl9maW5pc2hlZD9pOkFHKHRoaXMuZWxlbWVudCxyKSl9KSx0aGlzLmN1cnJlbnRTbmFwc2hvdD10fXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goaT0+aSgpKSxlLmxlbmd0aD0wfX0scm1lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBSYntjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5fbmV4dEFuaW1hdGlvbklkPTAsdGhpcy5fcmVuZGVyZXI9ZS5jcmVhdGVSZW5kZXJlcihpLmJvZHkse2lkOiIwIixlbmNhcHN1bGF0aW9uOnJhLk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KX1idWlsZChlKXtsZXQgaT10aGlzLl9uZXh0QW5pbWF0aW9uSWQudG9TdHJpbmcoKTt0aGlzLl9uZXh0QW5pbWF0aW9uSWQrKztsZXQgcj1BcnJheS5pc0FycmF5KGUpP1N3KGUpOmU7cmV0dXJuIFZHKHRoaXMuX3JlbmRlcmVyLG51bGwsaSwicmVnaXN0ZXIiLFtyXSksbmV3IE5rKGksdGhpcy5fcmVuZGVyZXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKGZjKSxrKEx0KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksTms9Y2xhc3MgZXh0ZW5kcyB3d3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5faWQ9dCx0aGlzLl9yZW5kZXJlcj1lfWNyZWF0ZSh0LGUpe3JldHVybiBuZXcgTGsodGhpcy5faWQsdCxlfHx7fSx0aGlzLl9yZW5kZXJlcil9fSxMaz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmlkPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9cix0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy50b3RhbFRpbWU9MCx0aGlzLl9jb21tYW5kKCJjcmVhdGUiLGkpfV9saXN0ZW4odCxlKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudCxgQEAke3RoaXMuaWR9OiR7dH1gLGUpfV9jb21tYW5kKHQsLi4uZSl7cmV0dXJuIFZHKHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLHQsZSl9b25Eb25lKHQpe3RoaXMuX2xpc3RlbigiZG9uZSIsdCl9b25TdGFydCh0KXt0aGlzLl9saXN0ZW4oInN0YXJ0Iix0KX1vbkRlc3Ryb3kodCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95Iix0KX1pbml0KCl7dGhpcy5fY29tbWFuZCgiaW5pdCIpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0YXJ0ZWQ9ITB9cGF1c2UoKXt0aGlzLl9jb21tYW5kKCJwYXVzZSIpfXJlc3RhcnQoKXt0aGlzLl9jb21tYW5kKCJyZXN0YXJ0Iil9ZmluaXNoKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9ZGVzdHJveSgpe3RoaXMuX2NvbW1hbmQoImRlc3Ryb3kiKX1yZXNldCgpe3RoaXMuX2NvbW1hbmQoInJlc2V0IiksdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbih0KXt0aGlzLl9jb21tYW5kKCJzZXRQb3NpdGlvbiIsdCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZW5naW5lLnBsYXllcnNbK3RoaXMuaWRdPy5nZXRQb3NpdGlvbigpPz8wfX07ZnVuY3Rpb24gVkcobix0LGUsaSxyKXtyZXR1cm4gbi5zZXRQcm9wZXJ0eSh0LGBAQCR7ZX06JHtpfWAscil9dmFyIEhHPSJALmRpc2FibGVkIixvbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPWksdGhpcy5fem9uZT1yLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCx0aGlzLnByb21pc2U9UHJvbWlzZS5yZXNvbHZlKDApLGkub25SZW1vdmFsQ29tcGxldGU9KG8scyk9PntsZXQgYT1zPy5wYXJlbnROb2RlKG8pO2EmJnMucmVtb3ZlQ2hpbGQoYSxvKX19Y3JlYXRlUmVuZGVyZXIoZSxpKXtsZXQgbz10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGUsaSk7aWYoIShlJiZpJiZpLmRhdGEmJmkuZGF0YS5hbmltYXRpb24pKXtsZXQgZD10aGlzLl9yZW5kZXJlckNhY2hlLmdldChvKTtyZXR1cm4gZHx8KGQ9bmV3IHp3KCIiLG8sdGhpcy5lbmdpbmUsKCk9PnRoaXMuX3JlbmRlcmVyQ2FjaGUuZGVsZXRlKG8pKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChvLGQpKSxkfWxldCBzPWkuaWQsYT1pLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7dGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIoYSxlKTtsZXQgbD1kPT57QXJyYXkuaXNBcnJheShkKT9kLmZvckVhY2gobCk6dGhpcy5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKHMsYSxlLGQubmFtZSxkKX07cmV0dXJuIGkuZGF0YS5hbmltYXRpb24uZm9yRWFjaChsKSxuZXcgQmsodGhpcyxhLG8sdGhpcy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5fY2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3RoaXMucHJvbWlzZS50aGVuKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30pfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhlLGkscil7ZT49MCYmZTx0aGlzLl9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bigoKT0+aShyKSk6KDA9PXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5sZW5ndGgmJlByb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgpPT57dGhpcy5fem9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIuZm9yRWFjaChvPT57bGV0W3MsYV09bztzKGEpfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIucHVzaChbaSxyXSkpfWVuZCgpe3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3NjaGVkdWxlQ291bnRUYXNrKCksdGhpcy5lbmdpbmUuZmx1c2godGhpcy5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhmYyksayhndSksayhhdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHp3PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9aSx0aGlzLl9vbkRlc3Ryb3k9cix0aGlzLmRlc3Ryb3lOb2RlPXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGU/bz0+ZS5kZXN0cm95Tm9kZShvKTpudWxsfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95KCl7dGhpcy5lbmdpbmUuZGVzdHJveSh0aGlzLm5hbWVzcGFjZUlkLHRoaXMuZGVsZWdhdGUpLHRoaXMuZGVsZWdhdGUuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveT8uKCl9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQodCxlKX1jcmVhdGVDb21tZW50KHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodCl9Y3JlYXRlVGV4dCh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHQpfWFwcGVuZENoaWxkKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LCExKX1pbnNlcnRCZWZvcmUodCxlLGkscj0hMCl7dGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUodCxlLGkpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LHIpfXJlbW92ZUNoaWxkKHQsZSxpKXt0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGUsdGhpcy5kZWxlZ2F0ZSxpKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQsZSl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpfW5leHRTaWJsaW5nKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpfXNldEF0dHJpYnV0ZSh0LGUsaSxyKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGUsaSxyKX1yZW1vdmVBdHRyaWJ1dGUodCxlLGkpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsZSxpKX1hZGRDbGFzcyh0LGUpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKX1yZW1vdmVDbGFzcyh0LGUpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX1zZXRTdHlsZSh0LGUsaSxyKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxpLHIpfXJlbW92ZVN0eWxlKHQsZSxpKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxpKX1zZXRQcm9wZXJ0eSh0LGUsaSl7IkAiPT1lLmNoYXJBdCgwKSYmZT09SEc/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LCEhaSk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsaSl9c2V0VmFsdWUodCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9bGlzdGVuKHQsZSxpKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLGkpfWRpc2FibGVBbmltYXRpb25zKHQsZSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnModCxlKX19LEJrPWNsYXNzIGV4dGVuZHMgend7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihlLGkscixvKSx0aGlzLmZhY3Rvcnk9dCx0aGlzLm5hbWVzcGFjZUlkPWV9c2V0UHJvcGVydHkodCxlLGkpeyJAIj09ZS5jaGFyQXQoMCk/Ii4iPT1lLmNoYXJBdCgxKSYmZT09SEc/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LGk9dm9pZCAwPT09aXx8ISFpKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsdCxlLnNsaWNlKDEpLGkpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLGkpfWxpc3Rlbih0LGUsaSl7aWYoIkAiPT1lLmNoYXJBdCgwKSl7bGV0IHI9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIG59fSh0KSxvPWUuc2xpY2UoMSkscz0iIjtyZXR1cm4iQCIhPW8uY2hhckF0KDApJiYoW28sc109ZnVuY3Rpb24obil7bGV0IHQ9bi5pbmRleE9mKCIuIik7cmV0dXJuW24uc3Vic3RyaW5nKDAsdCksbi5zbGljZSh0KzEpXX0obykpLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFjZUlkLHIsbyxzLGE9Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGEuX2RhdGF8fC0xLGksYSl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLGkpfX0sbG1lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBndXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLmJvZHksaSxyKX1uZ09uRGVzdHJveSgpe3RoaXMuZmx1c2goKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhMdCksayhVYiksayhuZiksayh5YykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHpHPVt7cHJvdmlkZTpSYix1c2VDbGFzczpybWV9LHtwcm92aWRlOm5mLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE53fX0se3Byb3ZpZGU6Z3UsdXNlQ2xhc3M6bG1lfSx7cHJvdmlkZTpmYyx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IG9tZShuLHQsZSl9LGRlcHM6W1RiLGd1LGF0XX1dLEJHPVt7cHJvdmlkZTpVYix1c2VGYWN0b3J5OigpPT5uZXcgY2xhc3N7dmFsaWRhdGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiEwfXZhbGlkYXRlQW5pbWF0YWJsZVN0eWxlUHJvcGVydHkodCl7cmV0dXJuITB9bWF0Y2hlc0VsZW1lbnQodCxlKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQodCxlKXtyZXR1cm4gTUcodCxlKX1nZXRQYXJlbnRFbGVtZW50KHQpe3JldHVybiBQayh0KX1xdWVyeSh0LGUsaSl7cmV0dXJuIHdHKHQsZSxpKX1jb21wdXRlU3R5bGUodCxlLGkpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX1hbmltYXRlKHQsZSxpLHIsbyxzPVtdKXtsZXQgbD17ZHVyYXRpb246aSxkZWxheTpyLGZpbGw6MD09cj8iYm90aCI6ImZvcndhcmRzIn07byYmKGwuZWFzaW5nPW8pO2xldCBjPW5ldyBNYXAsZD1zLmZpbHRlcihmPT5mIGluc3RhbmNlb2YgQncpOyhmdW5jdGlvbihuLHQpe3JldHVybiAwPT09bnx8MD09PXR9KShpLHIpJiZkLmZvckVhY2goZj0+e2YuY3VycmVudFNuYXBzaG90LmZvckVhY2goKG0sYik9PmMuc2V0KGIsbSkpfSk7bGV0IHU9KG49ZSxuLmxlbmd0aD9uWzBdaW5zdGFuY2VvZiBNYXA/bjpuLm1hcCh0PT5URyh0KSk6W10pLm1hcChmPT5iaChmKSk7dmFyIG47dT1mdW5jdGlvbihuLHQsZSl7aWYoZS5zaXplJiZ0Lmxlbmd0aCl7bGV0IGk9dFswXSxyPVtdO2lmKGUuZm9yRWFjaCgobyxzKT0+e2kuaGFzKHMpfHxyLnB1c2gocyksaS5zZXQocyxvKX0pLHIubGVuZ3RoKWZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dO3IuZm9yRWFjaChhPT5zLnNldChhLEFHKG4sYSkpKX19cmV0dXJuIHR9KHQsdSxjKTtsZXQgcD1mdW5jdGlvbihuLHQpe2xldCBlPW51bGwsaT1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD8oZT1tayh0WzBdKSx0Lmxlbmd0aD4xJiYoaT1tayh0W3QubGVuZ3RoLTFdKSkpOnQgaW5zdGFuY2VvZiBNYXAmJihlPW1rKHQpKSxlfHxpP25ldyB0bWUobixlLGkpOm51bGx9KHQsdSk7cmV0dXJuIG5ldyBCdyh0LHUsbCxwKX19fSx7cHJvdmlkZTpoaSx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi56R10sdW1lPVt7cHJvdmlkZTpVYix1c2VDbGFzczpPa30se3Byb3ZpZGU6aGksdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uekddLFVHPSgoKT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOmUuZGlzYWJsZUFuaW1hdGlvbnM/dW1lOkJHfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpCRyxpbXBvcnRzOltNd119KSxufSkoKSxVaz17fTtmdW5jdGlvbiBfZShuLHQpe2lmKFVrW25dPShVa1tuXXx8MCkrMSwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gVmsobiwoLi4uaSk9Pih7Li4udCguLi5pKSx0eXBlOm59KSk7c3dpdGNoKHQ/dC5fYXM6ImVtcHR5Iil7Y2FzZSJlbXB0eSI6cmV0dXJuIFZrKG4sKCk9Pih7dHlwZTpufSkpO2Nhc2UicHJvcHMiOnJldHVybiBWayhuLGk9Pih7Li4uaSx0eXBlOm59KSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY29uZmlnLiIpfX1mdW5jdGlvbiBWayhuLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidHlwZSIse3ZhbHVlOm4sd3JpdGFibGU6ITF9KX12YXIgcjg9IkBuZ3J4L3N0b3JlL2luaXQiLHhoPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBBaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKHt0eXBlOnI4fSl9bmV4dChlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJcbiAgICAgICAgRGlzcGF0Y2ggZXhwZWN0ZWQgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGEgZnVuY3Rpb24uXG4gICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgY3JlYXRlQWN0aW9uIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvblxuICAgICAgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGFjdGlvbi4gRm9yIGV4YW1wbGUsIHNvbWVBY3Rpb24gc2hvdWxkIGJlIHNvbWVBY3Rpb24oKS4iKTtpZih0eXBlb2YgZT4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWN0aW9ucyBtdXN0IGJlIG9iamVjdHMiKTtpZih0eXBlb2YgZS50eXBlPiJ1Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJBY3Rpb25zIG11c3QgaGF2ZSBhIHR5cGUgcHJvcGVydHkiKTtzdXBlci5uZXh0KGUpfWNvbXBsZXRlKCl7fW5nT25EZXN0cm95KCl7c3VwZXIuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkscG1lPVt4aF0sbzg9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSb290IEd1YXJkIiksakc9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBJbml0aWFsIFN0YXRlIikscWs9bmV3IGllKCJAbmdyeC9zdG9yZSBJbml0aWFsIFN0YXRlIiksczg9bmV3IGllKCJAbmdyeC9zdG9yZSBSZWR1Y2VyIEZhY3RvcnkiKSxHRz1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlZHVjZXIgRmFjdG9yeSBQcm92aWRlciIpLGE4PW5ldyBpZSgiQG5ncngvc3RvcmUgSW5pdGlhbCBSZWR1Y2VycyIpLEhrPW5ldyBpZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBSZWR1Y2VycyIpLFdHPW5ldyBpZSgiQG5ncngvc3RvcmUgU3RvcmUgRmVhdHVyZXMiKSxxRz1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIFJlZHVjZXJzIiksems9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIiksWUc9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIENvbmZpZ3MiKSxsOD1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIEZlYXR1cmVzIiksWEc9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIFRva2VuIiksYzg9bmV3IGllKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFJlZHVjZXJzIiksUUc9bmV3IGllKCJAbmdyeC9zdG9yZSBVc2VyIFByb3ZpZGVkIE1ldGEgUmVkdWNlcnMiKSx5aD1uZXcgaWUoIkBuZ3J4L3N0b3JlIE1ldGEgUmVkdWNlcnMiKSxaRz1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlc29sdmVkIE1ldGEgUmVkdWNlcnMiKSxLRz1uZXcgaWUoIkBuZ3J4L3N0b3JlIFVzZXIgUnVudGltZSBDaGVja3MgQ29uZmlnIiksSkc9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLEdiPW5ldyBpZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUnVudGltZSBDaGVja3MiKSxZaz1uZXcgaWUoIkBuZ3J4L3N0b3JlIENoZWNrIGlmIEFjdGlvbiB0eXBlcyBhcmUgdW5pcXVlIik7ZnVuY3Rpb24gcmYobix0PXt9KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPXt9O2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgcz1lW29dOyJmdW5jdGlvbiI9PXR5cGVvZiBuW3NdJiYoaVtzXT1uW3NdKX1sZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gZnVuY3Rpb24ocyxhKXtzPXZvaWQgMD09PXM/dDpzO2xldCBsPSExLGM9e307Zm9yKGxldCBkPTA7ZDxyLmxlbmd0aDtkKyspe2xldCB1PXJbZF0sZj1zW3VdLG09KDAsaVt1XSkoZixhKTtjW3VdPW0sbD1sfHxtIT09Zn1yZXR1cm4gbD9jOnN9fWZ1bmN0aW9uIGQ4KC4uLm4pe3JldHVybiBmdW5jdGlvbih0KXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIHQ7bGV0IGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gbi5zbGljZSgwLC0xKS5yZWR1Y2VSaWdodCgocixvKT0+byhyKSxlKHQpKX19ZnVuY3Rpb24gdTgobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MCYmKG49ZDguYXBwbHkobnVsbCxbLi4udCxuXSkpLChlLGkpPT57bGV0IHI9bihlKTtyZXR1cm4obyxzKT0+cihvPXZvaWQgMD09PW8/aTpvLHMpfX1uZXcgaWUoIkBuZ3J4L3N0b3JlIFJvb3QgU3RvcmUgUHJvdmlkZXIiKSxuZXcgaWUoIkBuZ3J4L3N0b3JlIEZlYXR1cmUgU3RhdGUgUHJvdmlkZXIiKTt2YXIgV2I9Y2xhc3MgZXh0ZW5kcyBLdHt9LFV3PWNsYXNzIGV4dGVuZHMgeGh7fSxqdz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQWl7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyhyLGkpKSx0aGlzLmRpc3BhdGNoZXI9ZSx0aGlzLmluaXRpYWxTdGF0ZT1pLHRoaXMucmVkdWNlcnM9cix0aGlzLnJlZHVjZXJGYWN0b3J5PW99Z2V0IGN1cnJlbnRSZWR1Y2Vycygpe3JldHVybiB0aGlzLnJlZHVjZXJzfWFkZEZlYXR1cmUoZSl7dGhpcy5hZGRGZWF0dXJlcyhbZV0pfWFkZEZlYXR1cmVzKGUpe2xldCBpPWUucmVkdWNlKChyLHtyZWR1Y2VyczpvLHJlZHVjZXJGYWN0b3J5OnMsbWV0YVJlZHVjZXJzOmEsaW5pdGlhbFN0YXRlOmwsa2V5OmN9KT0+e2xldCBkPSJmdW5jdGlvbiI9PXR5cGVvZiBvP2Z1bmN0aW9uKG4pe2xldCB0PUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjA/ZDgoLi4ubik6ZT0+ZTtyZXR1cm4oZSxpKT0+KGU9dChlKSwocixvKT0+ZShyPXZvaWQgMD09PXI/aTpyLG8pKX0oYSkobyxsKTp1OChzLGEpKG8sbCk7cmV0dXJuIHJbY109ZCxyfSx7fSk7dGhpcy5hZGRSZWR1Y2VycyhpKX1yZW1vdmVGZWF0dXJlKGUpe3RoaXMucmVtb3ZlRmVhdHVyZXMoW2VdKX1yZW1vdmVGZWF0dXJlcyhlKXt0aGlzLnJlbW92ZVJlZHVjZXJzKGUubWFwKGk9Pmkua2V5KSl9YWRkUmVkdWNlcihlLGkpe3RoaXMuYWRkUmVkdWNlcnMoe1tlXTppfSl9YWRkUmVkdWNlcnMoZSl7dGhpcy5yZWR1Y2Vycz17Li4udGhpcy5yZWR1Y2VycywuLi5lfSx0aGlzLnVwZGF0ZVJlZHVjZXJzKE9iamVjdC5rZXlzKGUpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVtb3ZlUmVkdWNlcnMoW2VdKX1yZW1vdmVSZWR1Y2VycyhlKXtlLmZvckVhY2goaT0+e3RoaXMucmVkdWNlcnM9ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKGU9PmUhPT10KS5yZWR1Y2UoKGUsaSk9Pk9iamVjdC5hc3NpZ24oZSx7W2ldOm5baV19KSx7fSl9KHRoaXMucmVkdWNlcnMsaSl9KSx0aGlzLnVwZGF0ZVJlZHVjZXJzKGUpfXVwZGF0ZVJlZHVjZXJzKGUpe3RoaXMubmV4dCh0aGlzLnJlZHVjZXJGYWN0b3J5KHRoaXMucmVkdWNlcnMsdGhpcy5pbml0aWFsU3RhdGUpKSx0aGlzLmRpc3BhdGNoZXIubmV4dCh7dHlwZToiQG5ncngvc3RvcmUvdXBkYXRlLXJlZHVjZXJzIixmZWF0dXJlczplfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoVXcpLGsocWspLGsoYTgpLGsoczgpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxibWU9W2p3LHtwcm92aWRlOldiLHVzZUV4aXN0aW5nOmp3fSx7cHJvdmlkZTpVdyx1c2VFeGlzdGluZzp4aH1dLHFiPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJZXtuZ09uRGVzdHJveSgpe3RoaXMuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHZtZT1bcWJdLEd3PWNsYXNzIGV4dGVuZHMgS3R7fSwkRz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQWl7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyk7bGV0IGM9ZS5waXBlKFBwKHFBKSkucGlwZShCdChpKSkucGlwZShmdW5jdGlvbihuLHQpe3JldHVybiBxdChmdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybihvLHMpPT57bGV0IGE9ZSxsPXQsYz0wO28uc3Vic2NyaWJlKFZ0KHMsZD0+e2xldCB1PWMrKztsPWE/bihsLGQsdSk6KGE9ITAsZCkscy5uZXh0KGwpfSx2b2lkIDApKX19KG4sdCxhcmd1bWVudHMubGVuZ3RoPj0yKSl9KHltZSx7c3RhdGU6b30pKTt0aGlzLnN0YXRlU3Vic2NyaXB0aW9uPWMuc3Vic2NyaWJlKCh7c3RhdGU6ZCxhY3Rpb246dX0pPT57dGhpcy5uZXh0KGQpLHIubmV4dCh1KX0pfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuY29tcGxldGUoKX19cmV0dXJuIG4uSU5JVD1yOCxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoeGgpLGsoV2IpLGsocWIpLGsocWspKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiB5bWUobj17c3RhdGU6dm9pZCAwfSxbdCxlXSl7bGV0e3N0YXRlOml9PW47cmV0dXJue3N0YXRlOmUoaSx0KSxhY3Rpb246dH19dmFyIHhtZT1bJEcse3Byb3ZpZGU6R3csdXNlRXhpc3Rpbmc6JEd9XSxBZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS3R7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5hY3Rpb25zT2JzZXJ2ZXI9aSx0aGlzLnJlZHVjZXJNYW5hZ2VyPXIsdGhpcy5zb3VyY2U9ZX1zZWxlY3QoZSwuLi5pKXtyZXR1cm4gdW4uY2FsbChudWxsLGUsLi4uaSkodGhpcyl9bGlmdChlKXtsZXQgaT1uZXcgbih0aGlzLHRoaXMuYWN0aW9uc09ic2VydmVyLHRoaXMucmVkdWNlck1hbmFnZXIpO3JldHVybiBpLm9wZXJhdG9yPWUsaX1kaXNwYXRjaChlKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5uZXh0KGUpfW5leHQoZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dChlKX1lcnJvcihlKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5lcnJvcihlKX1jb21wbGV0ZSgpe3RoaXMuYWN0aW9uc09ic2VydmVyLmNvbXBsZXRlKCl9YWRkUmVkdWNlcihlLGkpe3RoaXMucmVkdWNlck1hbmFnZXIuYWRkUmVkdWNlcihlLGkpfXJlbW92ZVJlZHVjZXIoZSl7dGhpcy5yZWR1Y2VyTWFuYWdlci5yZW1vdmVSZWR1Y2VyKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEd3KSxrKHhoKSxrKGp3KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQ21lPVtBZV07ZnVuY3Rpb24gdW4obix0LC4uLmUpe3JldHVybiBmdW5jdGlvbihyKXtsZXQgbztpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBzPVt0LC4uLmVdLmZpbHRlcihCb29sZWFuKTtvPXIucGlwZShmdW5jdGlvbiguLi5uKXtsZXQgdD1uLmxlbmd0aDtpZigwPT09dCl0aHJvdyBuZXcgRXJyb3IoImxpc3Qgb2YgcHJvcGVydGllcyBjYW5ub3QgYmUgZW1wdHkuIik7cmV0dXJuIE4oZT0+e2xldCBpPWU7Zm9yKGxldCByPTA7cjx0O3IrKyl7bGV0IG89aT8uW25bcl1dO2lmKCEodHlwZW9mIG88InUiKSlyZXR1cm47aT1vfXJldHVybiBpfSl9KG4sLi4ucykpfWVsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5leHBlY3RlZCB0eXBlICcke3R5cGVvZiBufScgaW4gc2VsZWN0IG9wZXJhdG9yLCBleHBlY3RlZCAnc3RyaW5nJyBvciAnZnVuY3Rpb24nYCk7bz1yLnBpcGUoTihzPT5uKHMsdCkpKX1yZXR1cm4gby5waXBlKFluKCkpfX12YXIgWGs9Imh0dHBzOi8vbmdyeC5pby9ndWlkZS9zdG9yZS9jb25maWd1cmF0aW9uL3J1bnRpbWUtY2hlY2tzIjtmdW5jdGlvbiBlOChuKXtyZXR1cm4gdm9pZCAwPT09bn1mdW5jdGlvbiB0OChuKXtyZXR1cm4gbnVsbD09PW59ZnVuY3Rpb24gcDgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobil9ZnVuY3Rpb24gZjgobil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09bn1mdW5jdGlvbiBqayhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1mdW5jdGlvbiBuOChuLHQpe3JldHVybiBuPT09dH1mdW5jdGlvbiBtOChuLHQ9bjgsZT1uOCl7bGV0IG8saT1udWxsLHI9bnVsbDtyZXR1cm57bWVtb2l6ZWQ6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1vKXJldHVybiBvLnJlc3VsdDtpZighaSlyZXR1cm4gcj1uLmFwcGx5KG51bGwsYXJndW1lbnRzKSxpPWFyZ3VtZW50cyxyO2lmKCFmdW5jdGlvbihuLHQsZSl7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspaWYoIWUobltpXSx0W2ldKSlyZXR1cm4hMDtyZXR1cm4hMX0oYXJndW1lbnRzLGksdCkpcmV0dXJuIHI7bGV0IGQ9bi5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGk9YXJndW1lbnRzLGUocixkKT9yOihyPWQsZCl9LHJlc2V0OmZ1bmN0aW9uKCl7aT1udWxsLHI9bnVsbH0sc2V0UmVzdWx0OmZ1bmN0aW9uKGQpe289e3Jlc3VsdDpkfX0sY2xlYXJSZXN1bHQ6ZnVuY3Rpb24oKXtvPXZvaWQgMH19fWZ1bmN0aW9uIHEoLi4ubil7cmV0dXJuIGZ1bmN0aW9uKG4sdD17c3RhdGVGbjpPbWV9KXtyZXR1cm4gZnVuY3Rpb24oLi4uZSl7bGV0IGk9ZTtpZihBcnJheS5pc0FycmF5KGlbMF0pKXtsZXRbZCwuLi51XT1pO2k9Wy4uLmQsLi4udV19ZWxzZSAxPT09aS5sZW5ndGgmJmZ1bmN0aW9uKG4pe3JldHVybiEhbiYmIm9iamVjdCI9PXR5cGVvZiBuJiZPYmplY3QudmFsdWVzKG4pLmV2ZXJ5KHQ9PiJmdW5jdGlvbiI9PXR5cGVvZiB0KX0oaVswXSkmJihpPWZ1bmN0aW9uKG4pe2xldCB0PU9iamVjdC52YWx1ZXMobiksZT1PYmplY3Qua2V5cyhuKTtyZXR1cm5bLi4udCwoLi4ucik9PmUucmVkdWNlKChvLHMsYSk9Pih7Li4ubyxbc106clthXX0pLHt9KV19KGlbMF0pKTtsZXQgcj1pLnNsaWNlKDAsaS5sZW5ndGgtMSksbz1pW2kubGVuZ3RoLTFdLHM9ci5maWx0ZXIoZD0+ZC5yZWxlYXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgZC5yZWxlYXNlKSxhPW4oZnVuY3Rpb24oLi4uZCl7cmV0dXJuIG8uYXBwbHkobnVsbCxkKX0pLGw9bTgoZnVuY3Rpb24oZCx1KXtyZXR1cm4gdC5zdGF0ZUZuLmFwcGx5KG51bGwsW2Qscix1LGFdKX0pO3JldHVybiBPYmplY3QuYXNzaWduKGwubWVtb2l6ZWQse3JlbGVhc2U6ZnVuY3Rpb24oKXtsLnJlc2V0KCksYS5yZXNldCgpLHMuZm9yRWFjaChkPT5kLnJlbGVhc2UoKSl9LHByb2plY3RvcjphLm1lbW9pemVkLHNldFJlc3VsdDpsLnNldFJlc3VsdCxjbGVhclJlc3VsdDpsLmNsZWFyUmVzdWx0fSl9fShtOCkoLi4ubil9ZnVuY3Rpb24gT21lKG4sdCxlLGkpe2lmKHZvaWQgMD09PWUpe2xldCBvPXQubWFwKHM9PnMobikpO3JldHVybiBpLm1lbW9pemVkLmFwcGx5KG51bGwsbyl9bGV0IHI9dC5tYXAobz0+byhuLGUpKTtyZXR1cm4gaS5tZW1vaXplZC5hcHBseShudWxsLFsuLi5yLGVdKX1mdW5jdGlvbiBFcihuKXtyZXR1cm4gcSh0PT50W25dLHQ9PnQpfWZ1bmN0aW9uIExtZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGllP2FpKG4pOm59ZnVuY3Rpb24gQm1lKG4sdCl7cmV0dXJuIHQubWFwKChlLGkpPT57aWYobltpXWluc3RhbmNlb2YgaWUpe2xldCByPWFpKG5baV0pO3JldHVybntrZXk6ZS5rZXkscmVkdWNlckZhY3Rvcnk6ci5yZWR1Y2VyRmFjdG9yeT9yLnJlZHVjZXJGYWN0b3J5OnJmLG1ldGFSZWR1Y2VyczpyLm1ldGFSZWR1Y2Vycz9yLm1ldGFSZWR1Y2VyczpbXSxpbml0aWFsU3RhdGU6ci5pbml0aWFsU3RhdGV9fXJldHVybiBlfSl9ZnVuY3Rpb24gVm1lKG4pe3JldHVybiBuLm1hcCh0PT50IGluc3RhbmNlb2YgaWU/YWkodCk6dCl9ZnVuY3Rpb24gaDgobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm59ZnVuY3Rpb24gSG1lKG4sdCl7cmV0dXJuIG4uY29uY2F0KHQpfWZ1bmN0aW9uIHptZSgpe2lmKGFpKEFlLHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0pKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSByb290IFN0b3JlIGhhcyBiZWVuIHByb3ZpZGVkIG1vcmUgdGhhbiBvbmNlLiBGZWF0dXJlIG1vZHVsZXMgc2hvdWxkIHByb3ZpZGUgZmVhdHVyZSBzdGF0ZXMgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rpb24gR2sobil7T2JqZWN0LmZyZWV6ZShuKTtsZXQgdD1qayhuKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikuZm9yRWFjaChlPT57aWYoIWUuc3RhcnRzV2l0aCgiXHUwMjc1IikmJmZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHQpfShuLGUpJiYoIXR8fCJjYWxsZXIiIT09ZSYmImNhbGxlZSIhPT1lJiYiYXJndW1lbnRzIiE9PWUpKXtsZXQgaT1uW2VdOyhmOChpKXx8amsoaSkpJiYhT2JqZWN0LmlzRnJvemVuKGkpJiZHayhpKX19KSxufWZ1bmN0aW9uIFdrKG4sdD1bXSl7cmV0dXJuKGU4KG4pfHx0OChuKSkmJjA9PT10Lmxlbmd0aD97cGF0aDpbInJvb3QiXSx2YWx1ZTpufTpPYmplY3Qua2V5cyhuKS5yZWR1Y2UoKGkscik9PntpZihpKXJldHVybiBpO2xldCBvPW5bcl07cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBqayhuKSYmbi5oYXNPd25Qcm9wZXJ0eSgiXHUwMjc1Y21wIil9KG8pP2k6IShlOChvKXx8dDgobyl8fGZ1bmN0aW9uKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbn0obyl8fGZ1bmN0aW9uKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG59KG8pfHxmdW5jdGlvbihuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG59KG8pfHxwOChvKSkmJihmdW5jdGlvbihuKXtpZighZnVuY3Rpb24obil7cmV0dXJuIGY4KG4pJiYhcDgobil9KG4pKXJldHVybiExO2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtyZXR1cm4gdD09PU9iamVjdC5wcm90b3R5cGV8fG51bGw9PT10fShvKT9XayhvLFsuLi50LHJdKTp7cGF0aDpbLi4udCxyXSx2YWx1ZTpvfSl9LCExKX1mdW5jdGlvbiBpOChuLHQpe2lmKCExPT09bilyZXR1cm47bGV0IGU9bi5wYXRoLmpvaW4oIi4iKSxpPW5ldyBFcnJvcihgRGV0ZWN0ZWQgdW5zZXJpYWxpemFibGUgJHt0fSBhdCAiJHtlfSIuICR7WGt9I3N0cmljdCR7dH1zZXJpYWxpemFiaWxpdHlgKTt0aHJvdyBpLnZhbHVlPW4udmFsdWUsaS51bnNlcmlhbGl6YWJsZVBhdGg9ZSxpfWZ1bmN0aW9uIFdtZShuKXtyZXR1cm57c3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6ITEsc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3M6ITF9fWZ1bmN0aW9uIHFtZSh7c3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5Om4sc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6dH0pe3JldHVybiBlPT5ufHx0P2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7dC5hY3Rpb24oaSkmJmk4KFdrKGkpLCJhY3Rpb24iKTtsZXQgcj1uKGUsaSk7cmV0dXJuIHQuc3RhdGUoKSYmaTgoV2sociksInN0YXRlIikscn19KGUse2FjdGlvbjppPT5uJiYhUWsoaSksc3RhdGU6KCk9PnR9KTplfWZ1bmN0aW9uIFltZSh7c3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5Om4sc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6dH0pe3JldHVybiBlPT5ufHx0P2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7bGV0IHI9dC5hY3Rpb24oaSk/R2soaSk6aSxvPW4oZSxyKTtyZXR1cm4gdC5zdGF0ZSgpP0drKG8pOm99fShlLHthY3Rpb246aT0+biYmIVFrKGkpLHN0YXRlOigpPT50fSk6ZX1mdW5jdGlvbiBRayhuKXtyZXR1cm4gbi50eXBlLnN0YXJ0c1dpdGgoIkBuZ3J4Iil9ZnVuY3Rpb24gWG1lKHtzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6bn0pe3JldHVybiB0PT5uP2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7aWYodC5hY3Rpb24oaSkmJiFhdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiAnJHtpLnR5cGV9JyBydW5uaW5nIG91dHNpZGUgTmdab25lLiAke1hrfSNzdHJpY3RhY3Rpb253aXRoaW5uZ3pvbmVgKTtyZXR1cm4gbihlLGkpfX0odCx7YWN0aW9uOmU9Pm4mJiFRayhlKX0pOnR9ZnVuY3Rpb24gUW1lKG4pe3JldHVyblt7cHJvdmlkZTpKRyx1c2VWYWx1ZTpufSx7cHJvdmlkZTpLRyx1c2VGYWN0b3J5OlptZSxkZXBzOltKR119LHtwcm92aWRlOkdiLGRlcHM6W0tHXSx1c2VGYWN0b3J5OldtZX0se3Byb3ZpZGU6eWgsbXVsdGk6ITAsZGVwczpbR2JdLHVzZUZhY3Rvcnk6WW1lfSx7cHJvdmlkZTp5aCxtdWx0aTohMCxkZXBzOltHYl0sdXNlRmFjdG9yeTpxbWV9LHtwcm92aWRlOnloLG11bHRpOiEwLGRlcHM6W0diXSx1c2VGYWN0b3J5OlhtZX1dfWZ1bmN0aW9uIGc4KCl7cmV0dXJuW3twcm92aWRlOllrLG11bHRpOiEwLGRlcHM6W0diXSx1c2VGYWN0b3J5OkttZX1dfWZ1bmN0aW9uIFptZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBLbWUobil7aWYoIW4uc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3MpcmV0dXJuO2xldCB0PU9iamVjdC5lbnRyaWVzKFVrKS5maWx0ZXIoKFssZV0pPT5lPjEpLm1hcCgoW2VdKT0+ZSk7aWYodC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gdHlwZXMgYXJlIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uY2UsICR7dC5tYXAoZT0+YCIke2V9ImApLmpvaW4oIiwgIil9LiAke1hrfSNzdHJpY3RhY3Rpb250eXBldW5pcXVlbmVzc2ApfWZ1bmN0aW9uIEptZShuPXt9LHQ9e30pe3JldHVyblt7cHJvdmlkZTpvOCx1c2VGYWN0b3J5OnptZX0se3Byb3ZpZGU6akcsdXNlVmFsdWU6dC5pbml0aWFsU3RhdGV9LHtwcm92aWRlOnFrLHVzZUZhY3Rvcnk6aDgsZGVwczpbakddfSx7cHJvdmlkZTpIayx1c2VWYWx1ZTpufSx7cHJvdmlkZTpxRyx1c2VFeGlzdGluZzpuIGluc3RhbmNlb2YgaWU/bjpIa30se3Byb3ZpZGU6YTgsZGVwczpbSGssW25ldyBuaChxRyldXSx1c2VGYWN0b3J5OkxtZX0se3Byb3ZpZGU6UUcsdXNlVmFsdWU6dC5tZXRhUmVkdWNlcnM/dC5tZXRhUmVkdWNlcnM6W119LHtwcm92aWRlOlpHLGRlcHM6W3loLFFHXSx1c2VGYWN0b3J5OkhtZX0se3Byb3ZpZGU6R0csdXNlVmFsdWU6dC5yZWR1Y2VyRmFjdG9yeT90LnJlZHVjZXJGYWN0b3J5OnJmfSx7cHJvdmlkZTpzOCxkZXBzOltHRyxaR10sdXNlRmFjdG9yeTp1OH0scG1lLGJtZSx2bWUseG1lLENtZSxRbWUodC5ydW50aW1lQ2hlY2tzKSxnOCgpXX1mdW5jdGlvbiAkbWUobix0LGU9e30pe3JldHVyblt7cHJvdmlkZTpZRyxtdWx0aTohMCx1c2VWYWx1ZTpuIGluc3RhbmNlb2YgT2JqZWN0P3t9OmV9LHtwcm92aWRlOldHLG11bHRpOiEwLHVzZVZhbHVlOntrZXk6biBpbnN0YW5jZW9mIE9iamVjdD9uLm5hbWU6bixyZWR1Y2VyRmFjdG9yeTplIGluc3RhbmNlb2YgaWV8fCFlLnJlZHVjZXJGYWN0b3J5P3JmOmUucmVkdWNlckZhY3RvcnksbWV0YVJlZHVjZXJzOmUgaW5zdGFuY2VvZiBpZXx8IWUubWV0YVJlZHVjZXJzP1tdOmUubWV0YVJlZHVjZXJzLGluaXRpYWxTdGF0ZTplIGluc3RhbmNlb2YgaWV8fCFlLmluaXRpYWxTdGF0ZT92b2lkIDA6ZS5pbml0aWFsU3RhdGV9fSx7cHJvdmlkZTpsOCxkZXBzOltZRyxXR10sdXNlRmFjdG9yeTpCbWV9LHtwcm92aWRlOnprLG11bHRpOiEwLHVzZVZhbHVlOm4gaW5zdGFuY2VvZiBPYmplY3Q/bi5yZWR1Y2VyOnR9LHtwcm92aWRlOlhHLG11bHRpOiEwLHVzZUV4aXN0aW5nOnQgaW5zdGFuY2VvZiBpZT90OnprfSx7cHJvdmlkZTpjOCxtdWx0aTohMCxkZXBzOlt6ayxbbmV3IG5oKFhHKV1dLHVzZUZhY3Rvcnk6Vm1lfSxnOCgpXX12YXIgWWI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhoKSxrKFdiKSxrKHFiKSxrKEFlKSxrKG84LDgpLGsoWWssOCkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxXdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyl7dGhpcy5mZWF0dXJlcz1lLHRoaXMuZmVhdHVyZVJlZHVjZXJzPWksdGhpcy5yZWR1Y2VyTWFuYWdlcj1yO2xldCBhPWUubWFwKChsLGMpPT57bGV0IHU9aS5zaGlmdCgpW2NdO3JldHVybnsuLi5sLHJlZHVjZXJzOnUsaW5pdGlhbFN0YXRlOmg4KGwuaW5pdGlhbFN0YXRlKX19KTtyLmFkZEZlYXR1cmVzKGEpfW5nT25EZXN0cm95KCl7dGhpcy5yZWR1Y2VyTWFuYWdlci5yZW1vdmVGZWF0dXJlcyh0aGlzLmZlYXR1cmVzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhsOCksayhjOCksayhqdyksayhZYiksayhZayw4KSl9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLFRyPSgoKT0+e2NsYXNzIG57c3RhdGljIGZvclJvb3QoZSxpKXtyZXR1cm57bmdNb2R1bGU6WWIscHJvdmlkZXJzOlsuLi5KbWUoZSxpKV19fXN0YXRpYyBmb3JGZWF0dXJlKGUsaSxyPXt9KXtyZXR1cm57bmdNb2R1bGU6V3cscHJvdmlkZXJzOlsuLi4kbWUoZSxpLHIpXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKTtmdW5jdGlvbiB5ZSguLi5uKXtyZXR1cm57cmVkdWNlcjpuLnBvcCgpLHR5cGVzOm4ubWFwKGk9PmkudHlwZSl9fWZ1bmN0aW9uIGJyKG4sLi4udCl7bGV0IGU9bmV3IE1hcDtmb3IobGV0IGkgb2YgdClmb3IobGV0IHIgb2YgaS50eXBlcyl7bGV0IG89ZS5nZXQocik7ZS5zZXQocixvPyhhLGwpPT5pLnJlZHVjZXIobyhhLGwpLGwpOmkucmVkdWNlcil9cmV0dXJuIGZ1bmN0aW9uKGk9bixyKXtsZXQgbz1lLmdldChyLnR5cGUpO3JldHVybiBvP28oaSxyKTppfX12YXIgZWhlPXtkaXNwYXRjaDohMCxmdW5jdGlvbmFsOiExLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6ITB9LFl3PSJfX0BuZ3J4L2VmZmVjdHNfY3JlYXRlX18iO2Z1bmN0aW9uIGFyKG4sdD17fSl7bGV0IGU9dC5mdW5jdGlvbmFsP246bigpLGk9ey4uLmVoZSwuLi50fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsWXcse3ZhbHVlOml9KSxlfWZ1bmN0aW9uIHk4KG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobil9ZnVuY3Rpb24geDgobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gXzgobil7cmV0dXJuIG4uZmlsdGVyKHg4KX1mdW5jdGlvbiByaGUobix0LGUpe2xldCBpPXk4KG4pLmNvbnN0cnVjdG9yLm5hbWUscj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmZpbHRlcihpPT4hKCFuW2ldfHwhbltpXS5oYXNPd25Qcm9wZXJ0eShZdykpJiZuW2ldW1l3XS5oYXNPd25Qcm9wZXJ0eSgiZGlzcGF0Y2giKSkubWFwKGk9Pih7cHJvcGVydHlOYW1lOmksLi4ubltpXVtZd119KSl9KG4pfShuKS5tYXAoKHtwcm9wZXJ0eU5hbWU6byxkaXNwYXRjaDpzLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6YX0pPT57bGV0IGw9ImZ1bmN0aW9uIj09dHlwZW9mIG5bb10/bltvXSgpOm5bb10sYz1hP2UobCx0KTpsO3JldHVybiExPT09cz9jLnBpcGUoSV8oKSk6Yy5waXBlKHF0KChuLHQpPT57bi5zdWJzY3JpYmUoVnQodCxlPT57dC5uZXh0KHdhLmNyZWF0ZU5leHQoZSkpfSwoKT0+e3QubmV4dCh3YS5jcmVhdGVDb21wbGV0ZSgpKSx0LmNvbXBsZXRlKCl9LGU9Pnt0Lm5leHQod2EuY3JlYXRlRXJyb3IoZSkpLHQuY29tcGxldGUoKX0pKX0pKS5waXBlKE4odT0+KHtlZmZlY3Q6bltvXSxub3RpZmljYXRpb246dSxwcm9wZXJ0eU5hbWU6byxzb3VyY2VOYW1lOmksc291cmNlSW5zdGFuY2U6bn0pKSl9KTtyZXR1cm4gdG4oLi4ucil9dmFyIG9oZT0xMDtmdW5jdGlvbiBDOChuLHQsZT1vaGUpe3JldHVybiBuLnBpcGUoenIoaT0+KHQmJnQuaGFuZGxlRXJyb3IoaSksZTw9MT9uOkM4KG4sdCxlLTEpKSkpfXZhciB4bz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSxlJiYodGhpcy5zb3VyY2U9ZSl9bGlmdChlKXtsZXQgaT1uZXcgbjtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLm9wZXJhdG9yPWUsaX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhxYikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGVpKC4uLm4pe3JldHVybiBrZSh0PT5uLnNvbWUoZT0+InN0cmluZyI9PXR5cGVvZiBlP2U9PT10LnR5cGU6ZS50eXBlPT09dC50eXBlKSl9dmFyIE04PW5ldyBpZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEd1YXJkIikscXc9bmV3IGllKCJAbmdyeC9lZmZlY3RzIFVzZXIgUHJvdmlkZWQgRWZmZWN0cyIpLFprPW5ldyBpZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEVmZmVjdHMiKSx3OD1uZXcgaWUoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgUm9vdCBFZmZlY3RzIEluc3RhbmNlcyIpLGI4PW5ldyBpZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBGZWF0dXJlIEVmZmVjdHMiKSxTOD1uZXcgaWUoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgRmVhdHVyZSBFZmZlY3RzIEluc3RhbmNlIEdyb3VwcyIpLHNoZT1uZXcgaWUoIkBuZ3J4L2VmZmVjdHMgRWZmZWN0cyBFcnJvciBIYW5kbGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+Qzh9KSxFOD0iQG5ncngvZWZmZWN0cy9pbml0IjtfZShFOCk7dmFyIHVoZT0ibmdyeE9uSWRlbnRpZnlFZmZlY3RzIixoaGU9Im5ncnhPbkluaXRFZmZlY3RzIjtmdW5jdGlvbiBnaGUobil7cmV0dXJuIEtrKG4saGhlKX1mdW5jdGlvbiBLayhuLHQpe3JldHVybiBuJiZ0IGluIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuW3RdfXZhciBUOD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuZXJyb3JIYW5kbGVyPWUsdGhpcy5lZmZlY3RzRXJyb3JIYW5kbGVyPWl9YWRkRWZmZWN0cyhlKXt0aGlzLm5leHQoZSl9dG9BY3Rpb25zKCl7cmV0dXJuIHRoaXMucGlwZShMQyhlPT5mdW5jdGlvbihuKXtyZXR1cm4iT2JqZWN0IiE9PW4uY29uc3RydWN0b3IubmFtZSYmIkZ1bmN0aW9uIiE9PW4uY29uc3RydWN0b3IubmFtZX0oZSk/eTgoZSk6ZSksaG4oZT0+ZS5waXBlKExDKF9oZSkpKSxobihlPT57bGV0IGk9ZS5waXBlKEZDKG89PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGU9PntsZXQgaT1yaGUoZSxuLHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gS2sobiwibmdyeE9uUnVuRWZmZWN0cyIpfShlKT9lLm5ncnhPblJ1bkVmZmVjdHMoaSk6aX19KHRoaXMuZXJyb3JIYW5kbGVyLHRoaXMuZWZmZWN0c0Vycm9ySGFuZGxlcikobykpLE4obz0+KGZ1bmN0aW9uKG4sdCl7aWYoIk4iPT09bi5ub3RpZmljYXRpb24ua2luZCl7bGV0IGU9bi5ub3RpZmljYXRpb24udmFsdWU7IWZ1bmN0aW9uKG4pe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBuJiZuJiZuLnR5cGUmJiJzdHJpbmciPT10eXBlb2Ygbi50eXBlfShlKSYmdC5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYEVmZmVjdCAke2Z1bmN0aW9uKHtwcm9wZXJ0eU5hbWU6bixzb3VyY2VJbnN0YW5jZTp0LHNvdXJjZU5hbWU6ZX0pe2xldCBpPSJmdW5jdGlvbiI9PXR5cGVvZiB0W25dO3JldHVybmAiJHtlfS4ke1N0cmluZyhuKX0ke2k/IigpIjoiIn0iYH0obil9IGRpc3BhdGNoZWQgYW4gaW52YWxpZCBhY3Rpb246ICR7ZnVuY3Rpb24obil7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuKX1jYXRjaHtyZXR1cm4gbn19KGUpfWApKX19KG8sdGhpcy5lcnJvckhhbmRsZXIpLG8ubm90aWZpY2F0aW9uKSksa2Uobz0+Ik4iPT09by5raW5kJiZudWxsIT1vLnZhbHVlKSxxdCgobix0KT0+e24uc3Vic2NyaWJlKFZ0KHQsZT0+WkEoZSx0KSkpfSkpO3JldHVybiB0bihpLGUucGlwZShZdCgxKSxrZShnaGUpLE4obz0+by5uZ3J4T25Jbml0RWZmZWN0cygpKSkpfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHJzKSxrKHNoZSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIF9oZShuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEtrKG4sdWhlKX0obik/bi5uZ3J4T25JZGVudGlmeUVmZmVjdHMoKToiIn12YXIgRDg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZWZmZWN0U291cmNlcz1lLHRoaXMuc3RvcmU9aSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbH1nZXQgaXNTdGFydGVkKCl7cmV0dXJuISF0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb259c3RhcnQoKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb258fCh0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249dGhpcy5lZmZlY3RTb3VyY2VzLnRvQWN0aW9ucygpLnN1YnNjcmliZSh0aGlzLnN0b3JlKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24mJih0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoVDgpLGsoQWUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxJOD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuc291cmNlcz1lLGkuc3RhcnQoKTtmb3IobGV0IGMgb2YgbyllLmFkZEVmZmVjdHMoYyk7ci5kaXNwYXRjaCh7dHlwZTpFOH0pfWFkZEVmZmVjdHMoZSl7dGhpcy5zb3VyY2VzLmFkZEVmZmVjdHMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoVDgpLGsoRDgpLGsoQWUpLGsodzgpLGsoWWIsOCksayhXdyw4KSxrKE04LDgpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksdmhlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7bGV0IHM9aS5mbGF0KCk7Zm9yKGxldCBhIG9mIHMpZS5hZGRFZmZlY3RzKGEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEk4KSxrKFM4KSxrKFliLDgpLGsoV3csOCkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx0bz0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JGZWF0dXJlKC4uLmUpe2xldCBpPWUuZmxhdCgpLHI9XzgoaSk7cmV0dXJue25nTW9kdWxlOnZoZSxwcm92aWRlcnM6W3Ise3Byb3ZpZGU6YjgsbXVsdGk6ITAsdXNlVmFsdWU6aX0se3Byb3ZpZGU6cXcsbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOlM4LG11bHRpOiEwLHVzZUZhY3Rvcnk6djgsZGVwczpbYjgscXddfV19fXN0YXRpYyBmb3JSb290KC4uLmUpe2xldCBpPWUuZmxhdCgpLHI9XzgoaSk7cmV0dXJue25nTW9kdWxlOkk4LHByb3ZpZGVyczpbcix7cHJvdmlkZTpaayx1c2VWYWx1ZTpbaV19LHtwcm92aWRlOk04LHVzZUZhY3Rvcnk6eWhlfSx7cHJvdmlkZTpxdyxtdWx0aTohMCx1c2VWYWx1ZTpbXX0se3Byb3ZpZGU6dzgsdXNlRmFjdG9yeTp2OCxkZXBzOltaayxxd119XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKTtmdW5jdGlvbiB2OChuLHQpe2xldCBlPVtdO2ZvcihsZXQgaSBvZiBuKWUucHVzaCguLi5pKTtmb3IobGV0IGkgb2YgdCllLnB1c2goLi4uaSk7cmV0dXJuIGUubWFwKGk9Png4KGkpP2FpKGkpOmkpfWZ1bmN0aW9uIHloZSgpe2xldCBuPWFpKEQ4LHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0pLHQ9YWkoWmsse3NlbGY6ITB9KTtpZigoMSE9PXQubGVuZ3RofHwwIT09dFswXS5sZW5ndGgpJiZuKXRocm93IG5ldyBUeXBlRXJyb3IoIkVmZmVjdHNNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCB1c2UgRWZmZWN0c01vZHVsZS5mb3JGZWF0dXJlKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9dmFyIHduPSgoKT0+e3JldHVybihuPXdufHwod249e30pKVtuLlVOS05PV049MF09IlVOS05PV04iLG5bbi5FWFBFUklNRU5UUz0xXT0iRVhQRVJJTUVOVFMiLG5bbi5FWFBFUklNRU5UPTJdPSJFWFBFUklNRU5UIixuW24uQ09NUEFSRV9FWFBFUklNRU5UPTNdPSJDT01QQVJFX0VYUEVSSU1FTlQiLG5bbi5DQVJEPTRdPSJDQVJEIixuW24uTk9UX1NFVD01XT0iTk9UX1NFVCIsd247dmFyIG59KSgpLFh3PSJkZWZhdWx0RXhwZXJpbWVudElkIixDaD0oKCk9PntyZXR1cm4obj1DaHx8KENoPXt9KSlbbi5FWFBFUklNRU5UUz0wXT0iRVhQRVJJTUVOVFMiLG5bbi5EQVNIQk9BUkQ9MV09IkRBU0hCT0FSRCIsQ2g7dmFyIG59KSgpO2Z1bmN0aW9uIE1oKG4pe3JldHVybiBuLnNwbGl0KCIsIikubWFwKHQ9PntsZXQgZT10LmluZGV4T2YoIjoiKTtpZihlPDApdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgY29sb24gZGVsaW1pdGluZyBuYW1lIGFuZCBJRDogJHt0fWApO2xldCBpPXQuc2xpY2UoMCxlKSxyPXQuc2xpY2UoZSsxKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBpZCB0byBiZSBub24tZmFsc3k6ICR7dH1gKTtyZXR1cm57bmFtZTppLGlkOnJ9fSl9ZnVuY3Rpb24gQTgobil7cmV0dXJuIG4ubWFwKCh7YWxpYXM6dCxpZDplfSk9PmAke3R9OiR7ZX1gKS5qb2luKCIsIil9ZnVuY3Rpb24gWGIobix0KXtzd2l0Y2gobil7Y2FzZSB3bi5FWFBFUklNRU5UOnJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZXhwZXJpbWVudElkIik/W3QuZXhwZXJpbWVudElkXTpbWHddO2Nhc2Ugd24uQ0FSRDp7bGV0IGU9dC5leHBlcmltZW50SWRzO3JldHVybiBlLmluZGV4T2YoIiwiKTwwP1tlXTpNaChlKS5tYXAoKHtpZDppfSk9PmkpfWNhc2Ugd24uQ09NUEFSRV9FWFBFUklNRU5UOnJldHVybiBNaCh0LmV4cGVyaW1lbnRJZHMpLm1hcCgoe2lkOml9KT0+aSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gRm8obix0KXtpZighbnx8IXQpcmV0dXJuIG49PT10O2lmKG4ucm91dGVLaW5kIT09dC5yb3V0ZUtpbmQpcmV0dXJuITE7bGV0IGU9WGIobi5yb3V0ZUtpbmQsbi5wYXJhbXMpLGk9WGIodC5yb3V0ZUtpbmQsdC5wYXJhbXMpO2lmKG51bGw9PT1lfHxudWxsPT09aSlyZXR1cm4gZT09PWk7aWYoZS5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMTtsZXQgcj1pLnNvcnQoKTtyZXR1cm4gZS5zb3J0KCkuZXZlcnkoKG8scyk9PnJbc109PT1vKX1mdW5jdGlvbiBKayhuKXtzd2l0Y2gobil7Y2FzZSB3bi5FWFBFUklNRU5UUzpyZXR1cm4gQ2guRVhQRVJJTUVOVFM7Y2FzZSB3bi5FWFBFUklNRU5UOmNhc2Ugd24uQ0FSRDpjYXNlIHduLkNPTVBBUkVfRVhQRVJJTUVOVDpyZXR1cm4gQ2guREFTSEJPQVJEO2Nhc2Ugd24uVU5LTk9XTjpjYXNlIHduLk5PVF9TRVQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFF3KG4sdCxlKXtsZXQgaT1KayhuKTtyZXR1cm4gbnVsbCE9PWkmJiFlLnNvbWUocj0+ci5kZWVwTGlua0dyb3VwPT09aSYmci5uYW1lc3BhY2VJZD09PXQpfXZhciBrOF9nZXRIcmVmPSgpPT53aW5kb3cubG9jYXRpb24uaHJlZixvZj0oKCk9PntjbGFzcyBue2dldEhyZWYoKXtyZXR1cm4gazhfZ2V0SHJlZigpfWdldFNlYXJjaCgpe2xldCBlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksaT1bXTtyZXR1cm4gZS5mb3JFYWNoKChyLG8pPT57aS5wdXNoKHtrZXk6byx2YWx1ZTpyfSl9KSxpfWdldEhhc2goKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhhc2h9Z2V0UGF0aCgpe3JldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9Z2V0SGlzdG9yeVN0YXRlKCl7cmV0dXJuIHdpbmRvdy5oaXN0b3J5LnN0YXRlfXJlcGxhY2VTdGF0ZVVybChlKXt3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUod2luZG93Lmhpc3Rvcnkuc3RhdGUsIiIsZSl9cHVzaFN0YXRlVXJsKGUpe3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCIiLGUpfXJlcGxhY2VTdGF0ZURhdGEoZSl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKGUsIiIpfW9uUG9wU3RhdGUoKXtyZXR1cm4gbWkod2luZG93LCJwb3BzdGF0ZSIpLnBpcGUoTihlPT4oe3BhdGhuYW1lOnRoaXMuZ2V0UGF0aCgpLHN0YXRlOmUuc3RhdGV9KSkpfWdldFJlc29sdmVkUGF0aChlKXtyZXR1cm4gbmV3IFVSTChlLGs4X2dldEhyZWYoKSkucGF0aG5hbWV9Z2V0RnVsbFBhdGgoZSxpLHIpe2xldCBvPXRoaXMuZ2V0UmVzb2x2ZWRQYXRoKGUpLHM9IiI7cmV0dXJuIGkubGVuZ3RoJiYocz0iPyIrZnVuY3Rpb24obil7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IobGV0e2tleTplLHZhbHVlOml9b2Ygbil0LmFwcGVuZChlLGkpO3JldHVybiB0fShpKS50b1N0cmluZygpKSxgJHtvfSR7c30ke3I/dGhpcy5nZXRIYXNoKCk6IiJ9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksc2Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmFwcFJvb3Q9dGhpcy5nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KGUpfWdldEFwcFJvb3RGcm9tTWV0YUVsZW1lbnQoZSl7bGV0IGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCBtZXRhW25hbWU9InRiLXJlbGF0aXZlLXJvb3QiXScpO2lmKCFpKXJldHVybiIvIjtsZXR7cGF0aG5hbWU6cn09bmV3IFVSTChpLmNvbnRlbnQsZS5nZXRIcmVmKCkpO3JldHVybiByLnJlcGxhY2UoL1wvKiQvLCIvIil9Z2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdChlKXtyZXR1cm4gdGhpcy5hcHBSb290LnNsaWNlKDAsLTEpK2V9Z2V0QXBwUm9vdGxlc3NQYXRobmFtZShlKXtyZXR1cm4gZS5zdGFydHNXaXRoKHRoaXMuYXBwUm9vdCk/Ii8iK2Uuc2xpY2UodGhpcy5hcHBSb290Lmxlbmd0aCk6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhvZikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHdoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W29mXX0pLG59KSgpLFNoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3NmXSxpbXBvcnRzOlt3aF19KSxufSkoKSx0Rj1uZXcgaWUoIltBcHAgUm91dGluZ10gRGlydHkgVXBkYXRlcyIpLFp3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz1lfWdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpe3JldHVybiB0aGlzLmRpcnR5VXBkYXRlc1NlbGVjdG9yRmFjdG9yaWVzPz9bXX1zdGF0aWMgcmVnaXN0ZXJEaXJ0eVVwZGF0ZXMoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTp0RixtdWx0aTohMCx1c2VGYWN0b3J5OmV9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsodEYsOCkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxGOD1fZSgiW0FwcCBSb3V0aW5nXSBEaXNjYXJkaW5nIFVuc2F2ZWQgVXBkYXRlcyIpLEVoPV9lKCJbQXBwIFJvdXRpbmddIFN0YXRlIFJlaHlkcmF0ZWQgRnJvbSBVcmwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxLdz1fZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWcgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbkY9X2UoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRpb24gUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVGg9X2UoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRpbmciLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQcz1fZSgiW0FwcCBSb3V0aW5nXSBJbiBBcHAgTmF2aWdhdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksckY9bmV3IGllKCJbQXBwIFJvdXRpbmddIFByb2dyYW1tYXRpY2FsIE5hdmlnYXRpb24gUHJvdmlkZXIiKSxKdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucHJvdmlkZXJzPW5ldyBNYXA7Zm9yKGxldCBpIG9mIGV8fFtdKXtpZih0aGlzLnByb3ZpZGVycy5oYXMoaS5hY3Rpb25DcmVhdG9yLnR5cGUpKXRocm93IG5ldyBSYW5nZUVycm9yKGAiJHtpLmFjdGlvbkNyZWF0b3IudHlwZX0iIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgbmF2LiBNdWx0aXBsZSBuYXZpZ2F0aW9ucyBvbiBzYW1lIGtpY2sgaXMgbm90IGFsbG93ZWQuYCk7dGhpcy5wcm92aWRlcnMuc2V0KGkuYWN0aW9uQ3JlYXRvci50eXBlLGkubGFtYmRhKX19Z2V0TmF2aWdhdGlvbihlKXtsZXQgaT10aGlzLnByb3ZpZGVycy5nZXQoZS50eXBlKTtyZXR1cm4gaT9pKGUpOm51bGx9c3RhdGljIHJlZ2lzdGVyUHJvZ3JhbW1hdGljYWxOYXZpZ2F0aW9uKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6ckYsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHJGLDgpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gUWIobil7cmV0dXJuIG51bGwhPW4ucm91dGVLaW5kfWZ1bmN0aW9uIGFGKG4pe3JldHVybiBCOChuKS5tYXAoZT0+e2xldCBpPWUuc3RhcnRzV2l0aCgiOiIpO3JldHVybiBpP3twYXRoUGFydDplLGlzUGFyYW06ITAscGFyYW1OYW1lOmUuc2xpY2UoMSl9OntwYXRoUGFydDplLGlzUGFyYW06aX19KX12YXIgRGg9Y2xhc3N7c3RhdGljIGdldE1hdGNoZXIodCl7cmV0dXJuIFFiKHQpP25ldyBaYih0KTp2b2lkIDAhPT10LnJlZGlyZWN0aW9uUGF0aD9uZXcgb0YodCk6bmV3IHNGKHQpfWNvbnN0cnVjdG9yKHQpe3RoaXMudmFsaWRhdGVDb25maWcodCksdGhpcy5wYXRoRnJhZ21lbnRzPWFGKHQucGF0aCksdGhpcy5wYXRoTWF0Y2hlcnM9dGhpcy5nZXRQYXRoTWF0Y2hlcnModGhpcy5wYXRoRnJhZ21lbnRzKX12YWxpZGF0ZUNvbmZpZyh7cGF0aDp0fSl7aWYoIXQuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBzaG91bGQgc3RhcnQgd2l0aCAnLycuICR7dH1gKTtsZXQgZT0wO2Zvcig7KGU9dC5pbmRleE9mKCI6IixlKzEpKT49MDspe2lmKCIvIiE9PXRbZS0xXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBjb21lIGFmdGVyICcvJy4gJHt0fWApO2lmKHZvaWQgMD09PXRbZSsxXXx8Ii8iPT09dFtlKzFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IG5hbWUuICR7dH1gKX19Z2V0UGF0aE1hdGNoZXJzKHQpe3JldHVybiB0Lm1hcChlPT57bGV0e3BhdGhQYXJ0Oml9PWU7cmV0dXJuIGUuaXNQYXJhbT9yPT4oe2lzUGFyYW1QYXRoUGFydDohMCxwYXJ0TWF0Y2hlZDohMCxwYXJhbU5hbWU6ZS5wYXJhbU5hbWUscGFyYW1WYWx1ZTpyfSk6cj0+KHtpc1BhcmFtUGF0aFBhcnQ6ITEscGFydE1hdGNoZWQ6cj09PWl9KX0pfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBpPTA7Zm9yKGxldCByIG9mIHRoaXMucGF0aE1hdGNoZXJzKXtsZXQgcz1yKHRbaSsrXSk7aWYoIXMucGFydE1hdGNoZWQpcmV0dXJue3Jlc3VsdDohMX07cy5pc1BhcmFtUGF0aFBhcnQmJihlPXsuLi5lLFtzLnBhcmFtTmFtZV06cy5wYXJhbVZhbHVlfSl9cmV0dXJue3Jlc3VsdDohMCxwYXJhbXM6ZSxwYXRoUGFydHM6dCxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1tYXRjaEJ5UGFyYW1zKHQpe3JldHVybntyZXN1bHQ6ITAscGFyYW1zOnQscGF0aFBhcnRzOnRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucGF0aEZyYWdtZW50cyx0KSxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1yZXByb2plY3RQYXRoQnlQYXJhbXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpZihyLmlzUGFyYW0pe2xldHtwYXJhbU5hbWU6b309cjtpZighZS5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmFpbGVkIHRvIHJlcHJvamVjdCBwYXJhbWV0ZXIuICIke299IiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHByZXNlbnQuYCk7aS5wdXNoKGVbb10pfWVsc2UgaS5wdXNoKHIucGF0aFBhcnQpO3JldHVybiBpfX0sWmI9Y2xhc3MgZXh0ZW5kcyBEaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19LG9GPWNsYXNzIGV4dGVuZHMgRGh7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5yZWRpcmVjdGlvbkZyYWdtZW50cz1hRih0LnJlZGlyZWN0aW9uUGF0aCl9bWF0Y2godCl7bGV0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2xldCBpPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczp2b2lkIDB9fX0sc0Y9Y2xhc3MgZXh0ZW5kcyBEaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH1tYXRjaCh0KXtsZXQgZT1zdXBlci5tYXRjaCh0KTtpZighZS5yZXN1bHQpcmV0dXJuIGU7bGV0e3BhdGhQYXJ0czppLHF1ZXJ5UGFyYW1zOnJ9PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpyfX19LEtiPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0zKXtpZih0aGlzLm1heFJlZGlyZWN0aW9uPWUsZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJtYXhSZWRpcmVjdGlvbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlIG51bWJlciIpO3RoaXMudmFsaWRhdGVSb3V0ZUNvbmZpZ3ModCksdGhpcy5kZWZhdWx0Um91dGVDb25maWc9bnVsbCx0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycz1uZXcgTWFwLHRoaXMuY29uZmlnTWF0Y2hlcnM9W107Zm9yKGxldCBpIG9mIHQpe2xldCByPURoLmdldE1hdGNoZXIoaSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHIpLHIgaW5zdGFuY2VvZiBaYiYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldChyLmRlZmluaXRpb24ucm91dGVLaW5kLHIpLHIuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1yKSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2xldCBlPXQuZmlsdGVyKFFiKSxpPWUuZmlsdGVyKG89Pm8uZGVmYXVsdFJvdXRlKTtpZihpLmxlbmd0aD4xKXtsZXQgbz1pLm1hcCgoe3BhdGg6c30pPT5zKS5qb2luKCIsICIpO3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBkZWZhdWx0Um91dGVzLiAke299YCl9aWYoMT09PWkubGVuZ3RoKXtsZXR7cGF0aDpvfT1pWzBdO2lmKEJvb2xlYW4oYUYobykuZmluZCgoe2lzUGFyYW06YX0pPT5hKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7b31gKX1sZXQgcj1uZXcgU2V0O2ZvcihsZXR7cm91dGVLaW5kOm99b2YgZSl7aWYoci5oYXMobykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE11bHRpcGxlIHJvdXRlIGNvbmZpZ3VyYXRpb24gZm9yIGtpbmQ6ICR7b30uIENvbmZpZ3VyYXRpb25zIHNob3VsZCBoYXZlIHVuaXF1ZSByb3V0ZUtpbmRzYCk7ci5hZGQobyl9fWdlbmVyYXRlQWN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0aW9uR2VuZXJhdG9yP3QuYWN0aW9uR2VuZXJhdG9yKGUpOm51bGx9bWF0Y2godCl7aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCdOYXZpZ2F0aW9uIGhhcyB0byBtYWRlIHdpdGggcGF0aG5hbWUgdGhhdCBzdGFydHMgd2l0aCAiLyInKTtsZXQgbyxlPUI4KHQucGF0aG5hbWUpLGk9MCxyPSExO2Zvcig7Oyl7bGV0IHM9ITE7Zm9yKGxldCBhIG9mIHRoaXMuY29uZmlnTWF0Y2hlcnMpe2xldCBsPWEubWF0Y2goZSk7aWYobC5yZXN1bHQpe3M9ITA7bGV0e3BhcmFtczpjLHBhdGhQYXJ0czpkLGlzUmVkaXJlY3Rpb246dX09bDtpZih1KXtlPWQscj0hMCxvPWwucmVkaXJlY3Rpb25RdWVyeVBhcmFtczticmVha31pZighKGEgaW5zdGFuY2VvZiBaYikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIGNvbmNyZXRlIHJvdXRlIGRlZmluaXRpb24gYG1hdGNoYCByZXR1cm4gcmVkaXJlY3Rpb24iKTtsZXR7ZGVmaW5pdGlvbjpwfT1hLGY9e3JvdXRlS2luZDpwLnJvdXRlS2luZCxwYXJhbXM6YyxwYXRobmFtZTpMOChkKSxkZWVwTGlua1Byb3ZpZGVyOnAuZGVlcExpbmtQcm92aWRlcnx8bnVsbCxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihwLGQpfTtyZXR1cm4gcj97Li4uZixvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6b306ey4uLmYsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExfX19aWYociYmaSsrLCFzfHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2xldHtkZWZpbml0aW9uOnN9PXRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnO3JldHVybntyb3V0ZUtpbmQ6cy5yb3V0ZUtpbmQsZGVlcExpbmtQcm92aWRlcjpzLmRlZXBMaW5rUHJvdmlkZXI/P251bGwscGF0aG5hbWU6cy5wYXRoLHBhcmFtczp7fSxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dm9pZCAwLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKHMsZSl9fXJldHVybiBudWxsfW1hdGNoQnlSb3V0ZUtpbmQodCxlKXtsZXQgaT10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO2xldCByPWkubWF0Y2hCeVBhcmFtcyhlKTtyZXR1cm57cm91dGVLaW5kOnQscGFyYW1zOmUscGF0aG5hbWU6TDgoci5wYXRoUGFydHMpLGRlZXBMaW5rUHJvdmlkZXI6aS5kZWZpbml0aW9uLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGwsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKGkuZGVmaW5pdGlvbixyLnBhdGhQYXJ0cyl9fX07ZnVuY3Rpb24gQjgobil7cmV0dXJuIG4uc3BsaXQoIi8iKS5zbGljZSgxKX1mdW5jdGlvbiBMOChuKXtyZXR1cm4iLyIrbi5qb2luKCIvIil9dmFyIGxGPW5ldyBpZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKSxEbD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCFlKXJldHVybiB2b2lkKHRoaXMucm91dGVDb25maWdzPW5ldyBLYihbXSkpO2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKWZvcihsZXQgbyBvZiByKWkucHVzaChvKTt0aGlzLnJvdXRlQ29uZmlncz1uZXcgS2IoaSksaS5mb3JFYWNoKHI9PntRYihyKSYmdGhpcy5yb3V0ZUtpbmRUb05nQ29tcG9uZW50LnNldChyLnJvdXRlS2luZCxyLm5nQ29tcG9uZW50KX0pfWdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5rZXlzKCl9Z2V0Um91dGVDb25maWdzKCl7cmV0dXJuIHRoaXMucm91dGVDb25maWdzfWdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoZSl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5nZXQoZSl8fG51bGx9c3RhdGljIHJlZ2lzdGVyUm91dGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6bEYsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKGxGLDgpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksJHc9ImFwcF9yb3V0aW5nIixKYj1FcigkdyksTm89cShKYixuPT5uLmFjdGl2ZVJvdXRlKSx6OD1xKEpiLG49Pm4ubmV4dFJvdXRlKSxVOD1xKEpiLG49Pm4uYWN0aXZlTmFtZXNwYWNlSWQpLGo4PXEoSmIsbj0+bi5yZWh5ZHJhdGVkRGVlcExpbmtzKSxHOD1xKEpiLG49Pm4ucmVnaXN0ZXJlZFJvdXRlS2V5cyksSGE9cShObyxuPT5uP24ucm91dGVLaW5kOnduLk5PVF9TRVQpLGRGPXEoTm8sbj0+bj9uLnBhcmFtczp7fSksbHI9cShIYSxkRiwobix0KT0+WGIobix0KSksemE9KHEoSGEsZEYsKG4sdCk9PntpZihuIT09d24uQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1NaChuLmV4cGVyaW1lbnRJZHMpO2ZvcihsZXR7aWQ6aSxuYW1lOnJ9b2YgZSlyJiZ0LnNldChpLHIpO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pLHEoSGEsZEYsKG4sdCk9PntsZXQgZT10O2lmKG4hPT13bi5DT01QQVJFX0VYUEVSSU1FTlQmJihuIT09d24uQ0FSRHx8LTE9PT1lLmV4cGVyaW1lbnRJZHMuaW5kZXhPZigiLCIpKSlyZXR1cm57fTtsZXQgaT1mdW5jdGlvbihuKXtsZXQgdD1uZXcgTWFwLGU9TWgobi5leHBlcmltZW50SWRzKSxpPTA7Zm9yKGxldHtpZDpyLG5hbWU6b31vZiBlKWkrKywhdC5oYXMocikmJnQuc2V0KHIse2FsaWFzVGV4dDpvLGFsaWFzTnVtYmVyOml9KTtyZXR1cm4gdH0oZSk7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhpLmVudHJpZXMoKSl9KSksdUY9X2UoIltBcHAgUm91dGluZ10gRWZmZWN0cyBJbml0IiksbHM9KCgpPT57cmV0dXJuKG49bHN8fChscz17fSkpW24uVU5DSEFOR0VEPTBdPSJVTkNIQU5HRUQiLG5bbi5ORVc9MV09Ik5FVyIsbltuLkZST01fSElTVE9SWT0yXT0iRlJPTV9ISVNUT1JZIixsczt2YXIgbn0pKCksVzg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMubG9jYXRpb249cix0aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5PW8sdGhpcy5yZWdpc3RyeT1zLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZNb2R1bGU9YSx0aGlzLmFwcFJvb3RQcm92aWRlcj1sLHRoaXMub25OYXZpZ2F0aW9uUmVxdWVzdGVkJD10aGlzLmFjdGlvbnMkLnBpcGUoZWkobkYpLE4oYz0+KHtwYXRobmFtZTpjLnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKT90aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KGMucGF0aG5hbWUpOnRoaXMubG9jYXRpb24uZ2V0UmVzb2x2ZWRQYXRoKGMucGF0aG5hbWUpLG9wdGlvbnM6e2Jyb3dzZXJJbml0aWF0ZWQ6ITEscmVwbGFjZVN0YXRlOmMucmVwbGFjZVN0YXRlPz8hMSxuYW1lc3BhY2VVcGRhdGU6e29wdGlvbjpjLnJlc2V0TmFtZXNwYWNlZFN0YXRlP2xzLk5FVzpscy5VTkNIQU5HRUR9fX0pKSksdGhpcy5ib290c3RyYXBSZWR1Y2VycyQ9YXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShlaSh1RiksTigoKT0+S3coe3JvdXRlS2luZHM6bmV3IFNldCh0aGlzLnJlZ2lzdHJ5LmdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCkpfSkpKSksdGhpcy5vbkluaXQkPXRoaXMuYWN0aW9ucyQucGlwZShlaSh1RikpLnBpcGUoU2EoMCksTigoKT0+e2xldCBjPXRoaXMubG9jYXRpb24uZ2V0SGlzdG9yeVN0YXRlKCk/Lm5hbWVzcGFjZUlkLGQ9dm9pZCAwPT09Yz97b3B0aW9uOmxzLk5FV306e29wdGlvbjpscy5GUk9NX0hJU1RPUlksbmFtZXNwYWNlSWQ6Y307cmV0dXJue3BhdGhuYW1lOnRoaXMubG9jYXRpb24uZ2V0UGF0aCgpLG9wdGlvbnM6e2Jyb3dzZXJJbml0aWF0ZWQ6ITAscmVwbGFjZVN0YXRlOiEwLG5hbWVzcGFjZVVwZGF0ZTpkfX19KSksdGhpcy5vblBvcFN0YXRlJD10aGlzLmxvY2F0aW9uLm9uUG9wU3RhdGUoKS5waXBlKE4oYz0+KHtwYXRobmFtZTpjLnBhdGhuYW1lLG9wdGlvbnM6e2Jyb3dzZXJJbml0aWF0ZWQ6ITAscmVwbGFjZVN0YXRlOiEwLG5hbWVzcGFjZVVwZGF0ZTp2b2lkIDA9PT1jLnN0YXRlPy5uYW1lc3BhY2VJZD97b3B0aW9uOmxzLlVOQ0hBTkdFRH06e29wdGlvbjpscy5GUk9NX0hJU1RPUlksbmFtZXNwYWNlSWQ6Yy5zdGF0ZS5uYW1lc3BhY2VJZH19fSkpKSx0aGlzLnVzZXJJbml0TmF2Um91dGUkPXRuKHRoaXMub25OYXZpZ2F0aW9uUmVxdWVzdGVkJCx0aGlzLm9uSW5pdCQsdGhpcy5vblBvcFN0YXRlJCkucGlwZShOKGM9PntpZighYy5wYXRobmFtZS5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKGBbQXBwIHJvdXRpbmddIHBhdGhuYW1lIG11c3Qgc3RhcnQgd2l0aCAnLycuIEdvdDogJHtjLnBhdGhuYW1lfWApO3JldHVybnsuLi5jLHBhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUoYy5wYXRobmFtZSl9fSksTihjPT4oe3JvdXRlTWF0Y2g6dGhpcy5yb3V0ZUNvbmZpZ3MubWF0Y2goYyksb3B0aW9uczpjLm9wdGlvbnN9KSkpLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZSb3V0ZSQ9dGhpcy5hY3Rpb25zJC5waXBlKE4oYz0+dGhpcy5wcm9ncmFtbWF0aWNhbE5hdk1vZHVsZS5nZXROYXZpZ2F0aW9uKGMpKSxrZShjPT5udWxsIT09YyksTihjPT57bGV0IG0sZD1jLHtyZXBsYWNlU3RhdGU6dT0hMSxyZXNldE5hbWVzcGFjZWRTdGF0ZTpwLHJvdXRlS2luZDpmfT1kO3JldHVybiBtPWQucm91dGVLaW5kPT09d24uQ09NUEFSRV9FWFBFUklNRU5UP3tleHBlcmltZW50SWRzOkE4KGQucm91dGVQYXJhbXMuYWxpYXNBbmRFeHBlcmltZW50SWRzKX06ZC5yb3V0ZVBhcmFtcyx7cmVwbGFjZVN0YXRlOnUscm91dGVLaW5kOmYscm91dGVQYXJhbXM6bSxyZXNldE5hbWVzcGFjZWRTdGF0ZTpwfX0pLE4oKHtyZXBsYWNlU3RhdGU6Yyxyb3V0ZUtpbmQ6ZCxyb3V0ZVBhcmFtczp1LHJlc2V0TmFtZXNwYWNlZFN0YXRlOnB9KT0+KHtyb3V0ZU1hdGNoOnRoaXMucm91dGVDb25maWdzP3RoaXMucm91dGVDb25maWdzLm1hdGNoQnlSb3V0ZUtpbmQoZCx1KTpudWxsLG9wdGlvbnM6e3JlcGxhY2VTdGF0ZTpjLGJyb3dzZXJJbml0aWF0ZWQ6ITEsbmFtZXNwYWNlVXBkYXRlOntvcHRpb246cD9scy5ORVc6bHMuVU5DSEFOR0VEfX19KSkpLHRoaXMudmFsaWRhdGVkUm91dGVNYXRjaCQ9dG4odGhpcy51c2VySW5pdE5hdlJvdXRlJCx0aGlzLnByb2dyYW1tYXRpY2FsTmF2Um91dGUkKS5waXBlKGtlKCh7cm91dGVNYXRjaDpjfSk9PkJvb2xlYW4oYykpLE4oKHtyb3V0ZU1hdGNoOmMsb3B0aW9uczpkfSk9Pih7cm91dGVNYXRjaDpjLG9wdGlvbnM6ZH0pKSksdGhpcy5uYXZpZ2F0ZSQ9YXIoKCk9PnRoaXMudmFsaWRhdGVkUm91dGVNYXRjaCQucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChObykpLGhuKChbdSxwXSk9PntsZXQgZj1udWxsIT09cCYmRm8ocCx1LnJvdXRlTWF0Y2gpLG09dGhpcy5kaXJ0eVVwZGF0ZXNSZWdpc3RyeS5nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKTtyZXR1cm4gZnx8IW0ubGVuZ3RoP0h0KHUpOmNvKHRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnkuZ2V0RGlydHlVcGRhdGVzU2VsZWN0b3JzKCkubWFwKGI9PnRoaXMuc3RvcmUuc2VsZWN0KGIpLnBpcGUoWXQoMSkpKSkucGlwZShOKGI9PnZvaWQgMCE9PWJbMF0uZXhwZXJpbWVudElkcyYmYlswXS5leHBlcmltZW50SWRzLmxlbmd0aD4wKSxrZShiPT57aWYoYil7bGV0IE09d2luZG93LmNvbmZpcm0oIllvdSBoYXZlIHVuc2F2ZWQgZWRpdHMsIGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNjYXJkIHRoZW0/Iik7cmV0dXJuIE0mJnRoaXMuc3RvcmUuZGlzcGF0Y2goRjgoKSksTX1yZXR1cm4hMH0pLE4oKCk9PnUpKX0pLEJ0KHRoaXMuc3RvcmUuc2VsZWN0KGo4KSksTnQoKFt7cm91dGVNYXRjaDp1LG9wdGlvbnM6cH0sZl0pPT57aWYoIXAuYnJvd3NlckluaXRpYXRlZHx8IXUuZGVlcExpbmtQcm92aWRlcnx8cC5uYW1lc3BhY2VVcGRhdGUub3B0aW9uPT09bHMuRlJPTV9ISVNUT1JZJiYhUXcodS5yb3V0ZUtpbmQscC5uYW1lc3BhY2VVcGRhdGUubmFtZXNwYWNlSWQsZikpcmV0dXJuO2xldCBtPXUub3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uJiZ1LnJlZGlyZWN0aW9uT25seVF1ZXJ5UGFyYW1zP3UucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dGhpcy5sb2NhdGlvbi5nZXRTZWFyY2goKSxiPXUuZGVlcExpbmtQcm92aWRlci5kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKG0pO3RoaXMuc3RvcmUuZGlzcGF0Y2goRWgoe3JvdXRlS2luZDp1LnJvdXRlS2luZCxwYXJ0aWFsU3RhdGU6Yn0pKX0pLE50KChbe3JvdXRlTWF0Y2g6dX1dKT0+e3UuYWN0aW9uJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKHUuYWN0aW9uKX0pLEpuKChbe3JvdXRlTWF0Y2g6dSxvcHRpb25zOnB9XSk9Pm51bGw9PT11LmRlZXBMaW5rUHJvdmlkZXI/SHQoe3JvdXRlOntyb3V0ZUtpbmQ6dS5yb3V0ZUtpbmQscGFyYW1zOnUucGFyYW1zfSxwYXRobmFtZTp1LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOltdLG9wdGlvbnM6cH0pOnUuZGVlcExpbmtQcm92aWRlci5zZXJpYWxpemVTdGF0ZVRvUXVlcnlQYXJhbXModGhpcy5zdG9yZSkucGlwZShOKChmLG0pPT4oe3JvdXRlOntyb3V0ZUtpbmQ6dS5yb3V0ZUtpbmQscGFyYW1zOnUucGFyYW1zfSxwYXRobmFtZTp1LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOmYsb3B0aW9uczowPT09bT9wOnsuLi5wLG5hbWVzcGFjZVVwZGF0ZTp7b3B0aW9uOmxzLlVOQ0hBTkdFRH0scmVwbGFjZVN0YXRlOiEwfX0pKSkpLE50KCh7cm91dGU6dX0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChUaCh7YWZ0ZXI6dX0pKX0pLHdyKDApKS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KE5vKSksTigoW3UscF0pPT57bGV0IGY9bnVsbD09PXB8fG51bGw9PT11LnJvdXRlfHxGbyhwLHUucm91dGUpO3JldHVybnsuLi51LHByZXNlcnZlSGFzaDpmfX0pLE50KCh7cHJlc2VydmVIYXNoOnUscGF0aG5hbWU6cCxxdWVyeVBhcmFtczpmLG9wdGlvbnM6bX0pPT57KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4ucGF0aG5hbWU9PT10LnBhdGhuYW1lJiZuLnF1ZXJ5UGFyYW1zLmxlbmd0aD09PXQucXVlcnlQYXJhbXMubGVuZ3RoJiZuLnF1ZXJ5UGFyYW1zLmV2ZXJ5KChlLGkpPT57bGV0IHI9dC5xdWVyeVBhcmFtc1tpXTtyZXR1cm4gZS5rZXk9PT1yLmtleSYmZS52YWx1ZT09PXIudmFsdWV9KX0pKHtwYXRobmFtZTpwLHF1ZXJ5UGFyYW1zOmZ9LHtwYXRobmFtZTp0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBcHBSb290bGVzc1BhdGhuYW1lKHRoaXMubG9jYXRpb24uZ2V0UGF0aCgpKSxxdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpfSl8fChtLnJlcGxhY2VTdGF0ZT90aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZVVybCh0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHRoaXMubG9jYXRpb24uZ2V0RnVsbFBhdGgocCxmLHUpKSk6dGhpcy5sb2NhdGlvbi5wdXNoU3RhdGVVcmwodGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdCh0aGlzLmxvY2F0aW9uLmdldEZ1bGxQYXRoKHAsZix1KSkpKX0pKS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KE5vKSx0aGlzLnN0b3JlLnNlbGVjdChVOCkpLE4oKFt7cm91dGU6dSxvcHRpb25zOnB9LGYsbV0pPT57bGV0IGI9ZnVuY3Rpb24obix0LGUpe3JldHVybiB0Lm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1scy5GUk9NX0hJU1RPUlk/dC5uYW1lc3BhY2VVcGRhdGUubmFtZXNwYWNlSWQ6bnVsbD09ZXx8dC5uYW1lc3BhY2VVcGRhdGUub3B0aW9uPT09bHMuTkVXP2Ake0RhdGUubm93KCkudG9TdHJpbmcoKX06JHtmdW5jdGlvbigpe2xldCBuPW5ldyBVaW50OEFycmF5KDMyKTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG4pO2xldCB0PSIiO2ZvcihsZXQgZSBvZiBuKXQrPShlPj40KS50b1N0cmluZygxNik7cmV0dXJuIHR9KCl9YDplfSgwLHAsbSk7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlRGF0YSh7Li4udGhpcy5sb2NhdGlvbi5nZXRIaXN0b3J5U3RhdGUoKSxuYW1lc3BhY2VJZDpifSksUHMoe2JlZm9yZTpmLGFmdGVyOnUsYmVmb3JlTmFtZXNwYWNlSWQ6bSxhZnRlck5hbWVzcGFjZUlkOmJ9KX0pKSksdGhpcy5yb3V0ZUNvbmZpZ3M9cy5nZXRSb3V0ZUNvbmZpZ3MoKX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiB1RigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhvKSxrKEFlKSxrKG9mKSxrKFp3KSxrKERsKSxrKEp3KSxrKHNmKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksU2hlPWJyKHthY3RpdmVSb3V0ZTpudWxsLG5leHRSb3V0ZTpudWxsLGFjdGl2ZU5hbWVzcGFjZUlkOm51bGwscmVoeWRyYXRlZERlZXBMaW5rczpbXSxyZWdpc3RlcmVkUm91dGVLZXlzOm5ldyBTZXR9LHllKFRoLChuLHthZnRlcjp0fSk9Pih7Li4ubixuZXh0Um91dGU6dH0pKSx5ZShQcywobix7YWZ0ZXI6dCxhZnRlck5hbWVzcGFjZUlkOmV9KT0+e2xldCBpPW4ucmVoeWRyYXRlZERlZXBMaW5rcztyZXR1cm4gUXcodC5yb3V0ZUtpbmQsZSxpKSYmKGk9Wy4uLmldLGkucHVzaCh7ZGVlcExpbmtHcm91cDpKayh0LnJvdXRlS2luZCksbmFtZXNwYWNlSWQ6ZX0pKSx7Li4ubixhY3RpdmVSb3V0ZTp0LG5leHRSb3V0ZTpudWxsLGFjdGl2ZU5hbWVzcGFjZUlkOmUscmVoeWRyYXRlZERlZXBMaW5rczppfX0pLHllKEt3LChuLHtyb3V0ZUtpbmRzOnR9KT0+KHsuLi5uLHJlZ2lzdGVyZWRSb3V0ZUtleXM6dH0pKSk7ZnVuY3Rpb24gcTgobix0KXtyZXR1cm4gU2hlKG4sdCl9dmFyIEloPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1p3LEp3XSxpbXBvcnRzOltEbCxUci5mb3JGZWF0dXJlKCR3LHE4KSx0by5mb3JGZWF0dXJlKFtXOF0pLFNoLHdoXX0pLG59KSgpLFk4PSJfX3RhYl9fIixYOD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy50ZlN0b3JhZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtc3RvcmFnZSIpLGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWdsb2JhbHMiKS50Zl9nbG9iYWxzLnNldFVzZUhhc2goITApLHRoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2UubWlncmF0ZUxlZ2FjeVVSTFNjaGVtZSgpfWdldFN0cmluZyhlKXtyZXR1cm4gdGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5nZXRTdHJpbmcoZSl9c2V0U3RyaW5nKGUsaSxyKXt0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLnNldFN0cmluZyhlLGkscil9Z2V0UGx1Z2luSWQoKXtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoWTgpfXNldFBsdWdpbklkKGUsaSl7dGhpcy5zZXRTdHJpbmcoWTgsZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksX3U9Y2xhc3N7fSxPcz0oKCk9PntyZXR1cm4obj1Pc3x8KE9zPXt9KSkuQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLG4uTElHSFQ9ImxpZ2h0IixuLkRBUks9ImRhcmsiLE9zO3ZhciBufSkoKSxJbD1fZSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxwRj1uZXcgaWUoIltQZXJzaXN0ZW50IFNldHRpbmdzXSBHbG9iYWwgU2V0dGluZ3MiKSxLaT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZ2xvYmFsU2V0dGluZ1NlbGVjdG9ycz1bXSxlJiYodGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPWUubWFwKGk9PmkoKSkpfWdldEdsb2JhbFNldHRpbmdTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPz9bXX1zdGF0aWMgZGVmaW5lR2xvYmFsU2V0dGluZyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOnBGLG11bHRpOiEwLHVzZVZhbHVlOmV9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsocEYsOCkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxROD0iX3RiX2dsb2JhbF9zZXR0aW5ncy50aW1lc2VyaWVzIixaOD0iX3RiX2dsb2JhbF9zZXR0aW5ncyIsSzg9Im5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZXN0YW1wIixlUz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx0Uz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxmRj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdFN7dWlUb0JhY2tlbmQoZSl7bGV0IGk9e307cmV0dXJuIHZvaWQgMCE9PWUuaWdub3JlT3V0bGllcnMmJihpLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLHZvaWQgMCE9PWUuc2NhbGFyU21vb3RoaW5nJiYoaS5zY2FsYXJTbW9vdGhpbmc9ZS5zY2FsYXJTbW9vdGhpbmcpLHZvaWQgMCE9PWUudG9vbHRpcFNvcnQmJihpLnRvb2x0aXBTb3J0PWUudG9vbHRpcFNvcnQpLHZvaWQgMCE9PWUuYXV0b1JlbG9hZCYmKGkuYXV0b1JlbG9hZD1lLmF1dG9SZWxvYWQpLHZvaWQgMCE9PWUuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihpLmF1dG9SZWxvYWRQZXJpb2RJbk1zPWUuYXV0b1JlbG9hZFBlcmlvZEluTXMpLHZvaWQgMCE9PWUucGFnZVNpemUmJihpLnBhZ2luYXRpb25TaXplPWUucGFnZVNpemUpLHZvaWQgMCE9PWUudGhlbWVPdmVycmlkZSYmKGkudGhlbWU9ZS50aGVtZU92ZXJyaWRlKSx2b2lkIDAhPT1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMmJihpLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM9ZS5ub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zKSx2b2lkIDAhPT1lLnNpZGVCYXJXaWR0aEluUGVyY2VudCYmKGkuc2lkZUJhcldpZHRoSW5QZXJjZW50PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50KSx2b2lkIDAhPT1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQmJihpLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ9ZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkKSx2b2lkIDAhPT1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgmJihpLnRpbWVTZXJpZXNDYXJkTWluV2lkdGg9ZS50aW1lU2VyaWVzQ2FyZE1pbldpZHRoKSx2b2lkIDAhPT1lLnN0ZXBTZWxlY3RvckVuYWJsZWQmJihpLnN0ZXBTZWxlY3RvckVuYWJsZWQ9ZS5zdGVwU2VsZWN0b3JFbmFibGVkKSx2b2lkIDAhPT1lLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCYmKGkucmFuZ2VTZWxlY3Rpb25FbmFibGVkPWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkKSx2b2lkIDAhPT1lLmxpbmtlZFRpbWVFbmFibGVkJiYoaS5saW5rZWRUaW1lRW5hYmxlZD1lLmxpbmtlZFRpbWVFbmFibGVkKSx2b2lkIDAhPT1lLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMmJihpLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnM9ZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSx2b2lkIDAhPT1lLnJhbmdlU2VsZWN0aW9uSGVhZGVycyYmKGkucmFuZ2VTZWxlY3Rpb25IZWFkZXJzPWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpfWJhY2tlbmRUb1VpKGUpe2xldCBpPXt9O3JldHVybiBlLmhhc093blByb3BlcnR5KCJzY2FsYXJTbW9vdGhpbmciKSYmIm51bWJlciI9PXR5cGVvZiBlLnNjYWxhclNtb290aGluZyYmKGkuc2NhbGFyU21vb3RoaW5nPWUuc2NhbGFyU21vb3RoaW5nKSxlLmhhc093blByb3BlcnR5KCJpZ25vcmVPdXRsaWVycyIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmlnbm9yZU91dGxpZXJzJiYoaS5pZ25vcmVPdXRsaWVycz1lLmlnbm9yZU91dGxpZXJzKSxlLmhhc093blByb3BlcnR5KCJ0b29sdGlwU29ydCIpJiYic3RyaW5nIj09dHlwZW9mIGUudG9vbHRpcFNvcnQmJihpLnRvb2x0aXBTb3J0PWUudG9vbHRpcFNvcnQpLGUuaGFzT3duUHJvcGVydHkoImF1dG9SZWxvYWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5hdXRvUmVsb2FkJiYoaS5hdXRvUmVsb2FkPWUuYXV0b1JlbG9hZCksZS5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZFBlcmlvZEluTXMiKSYmIm51bWJlciI9PXR5cGVvZiBlLmF1dG9SZWxvYWRQZXJpb2RJbk1zJiYoaS5hdXRvUmVsb2FkUGVyaW9kSW5Ncz1lLmF1dG9SZWxvYWRQZXJpb2RJbk1zKSxlLmhhc093blByb3BlcnR5KCJwYWdpbmF0aW9uU2l6ZSIpJiYibnVtYmVyIj09dHlwZW9mIGUucGFnaW5hdGlvblNpemUmJihpLnBhZ2VTaXplPWUucGFnaW5hdGlvblNpemUpLGUuaGFzT3duUHJvcGVydHkoInRoZW1lIikmJiJzdHJpbmciPT10eXBlb2YgZS50aGVtZSYmbmV3IFNldChPYmplY3QudmFsdWVzKE9zKSkuaGFzKGUudGhlbWUpJiYoaS50aGVtZU92ZXJyaWRlPWUudGhlbWUpLGUuaGFzT3duUHJvcGVydHkoIm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMiKSYmIm51bWJlciI9PXR5cGVvZiBlLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMmJihpLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM9ZS5ub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zKSxlLmhhc093blByb3BlcnR5KCJzaWRlQmFyV2lkdGhJblBlcmNlbnQiKSYmIm51bWJlciI9PXR5cGVvZiBlLnNpZGVCYXJXaWR0aEluUGVyY2VudCYmKGkuc2lkZUJhcldpZHRoSW5QZXJjZW50PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50KSxlLmhhc093blByb3BlcnR5KCJ0aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkIikmJiJib29sZWFuIj09dHlwZW9mIGUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCYmKGkudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZD1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQpLGUuaGFzT3duUHJvcGVydHkoInRpbWVTZXJpZXNDYXJkTWluV2lkdGgiKSYmIm51bWJlciI9PXR5cGVvZiBlLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgmJihpLnRpbWVTZXJpZXNDYXJkTWluV2lkdGg9ZS50aW1lU2VyaWVzQ2FyZE1pbldpZHRoKSxlLmhhc093blByb3BlcnR5KCJzdGVwU2VsZWN0b3JFbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUuc3RlcFNlbGVjdG9yRW5hYmxlZCYmKGkuc3RlcFNlbGVjdG9yRW5hYmxlZD1lLnN0ZXBTZWxlY3RvckVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoInJhbmdlU2VsZWN0aW9uRW5hYmxlZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCYmKGkucmFuZ2VTZWxlY3Rpb25FbmFibGVkPWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkKSxlLmhhc093blByb3BlcnR5KCJsaW5rZWRUaW1lRW5hYmxlZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmxpbmtlZFRpbWVFbmFibGVkJiYoaS5saW5rZWRUaW1lRW5hYmxlZD1lLmxpbmtlZFRpbWVFbmFibGVkKSxBcnJheS5pc0FycmF5KGUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycykmJnZvaWQgMCE9PWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVyc1swXS5uYW1lJiYoZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzLmZvckVhY2gocj0+e3IubW92YWJsZT1yLm1vdmFibGU/PyEwLHIuc29ydGFibGU9ci5zb3J0YWJsZT8/ITAsci5yZW1vdmFibGU9ci5yZW1vdmFibGU/PyEwfSksaS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksQXJyYXkuaXNBcnJheShlLnJhbmdlU2VsZWN0aW9uSGVhZGVycykmJnZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzWzBdLm5hbWUmJihlLnJhbmdlU2VsZWN0aW9uSGVhZGVycy5mb3JFYWNoKHI9PntyLm1vdmFibGU9ci5tb3ZhYmxlPz8hMCxyLnNvcnRhYmxlPXIuc29ydGFibGU/PyEwLHIucmVtb3ZhYmxlPXIucmVtb3ZhYmxlPz8hMH0pLGkucmFuZ2VTZWxlY3Rpb25IZWFkZXJzPWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksSjg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbnZlcnRlcj1lfXNldFNldHRpbmdzKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKT90aGlzLmdldFNldHRpbmdzKCkucGlwZShOdChpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFo4LEpTT04uc3RyaW5naWZ5KHRoaXMuY29udmVydGVyLnVpVG9CYWNrZW5kKHsuLi5pLC4uLmV9KSkpLHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShROCksd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEs4KX0pLE4oKCk9Pnt9KSk6SnJ9ZGVzZXJpYWxpemUoZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe3JldHVybnt9fX1nZXRTZXR0aW5ncygpe2xldCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShLOCk7cmV0dXJuIEh0KHsuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKGU/SlNPTi5zdHJpbmdpZnkoe25vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM6TnVtYmVyKGUpfSk6Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFE4KT8/Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFo4KT8/Int9IikpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsodFMpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSwkOD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTplUyx1c2VDbGFzczpKOH0sZkYse3Byb3ZpZGU6dFMsdXNlRXhpc3Rpbmc6ZkZ9XX0pLG59KSgpLG5TPSJwZXJzaXN0ZW50X3NldHRpbmdzIixlNj1xKEVyKG5TKSxuPT5uLnNob3VsZFBlcnNpc3RTZXR0aW5ncyksdDY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuY29uZmlnTW9kdWxlPXIsdGhpcy5kYXRhU291cmNlPW8sdGhpcy5pbml0aWFsaXplQW5kVXBkYXRlU2V0dGluZ3MkPWFyKCgpPT57bGV0IHM9dGhpcy5hY3Rpb25zJC5waXBlKGVpKFRoKSxZdCgxKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChlNikpLGtlKChbLGFdKT0+YSksaG4oKCk9PnRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpKSxOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChJbCh7cGFydGlhbFNldHRpbmdzOmF9KSl9KSxTYSgwKSxobigoKT0+dG4oLi4udGhpcy5jb25maWdNb2R1bGUuZ2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpLm1hcChsPT50aGlzLnN0b3JlLnNlbGVjdChsKS5waXBlKFluKChjLGQpPT57bGV0IHU9T2JqZWN0LnZhbHVlcyhjKSxwPU9iamVjdC52YWx1ZXMoZCk7cmV0dXJuIHUubGVuZ3RoPT09cC5sZW5ndGgmJnUuZXZlcnkoKGYsbSk9PmY9PT1wW21dKX0pLGlhKDEpKSkpKSxDcygpKTtyZXR1cm4gcy5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpPVtdO3JldHVybiB0LnN1YnNjcmliZShWdChlLHI9PmkucHVzaChyKSwoKT0+e2UubmV4dChpKSxlLmNvbXBsZXRlKCl9KSksbi5zdWJzY3JpYmUoVnQoZSwoKT0+e2xldCByPWk7aT1bXSxlLm5leHQocil9LGZsKSksKCk9PntpPW51bGx9fSl9KHMucGlwZSh3cig1MDApKSksaG4oYT0+e2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gSnI7bGV0IGw9e307Zm9yKGxldCBjIG9mIGEpT2JqZWN0LmFzc2lnbihsLGMpO3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2V0U2V0dGluZ3MobCl9KSl9LHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhvKSxrKEFlKSxrKEtpKSxrKGVTKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksUmhlPWJyKHtzaG91bGRQZXJzaXN0U2V0dGluZ3M6ITB9KTtmdW5jdGlvbiBuNihuLHQpe3JldHVybiBSaGUobix0KX12YXIgbUY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbS2ldLGltcG9ydHM6W1RyLmZvckZlYXR1cmUoblMsbjYpLHRvLmZvckZlYXR1cmUoW3Q2XSksJDhdfSksbn0pKCksZXY9Y2xhc3N7fSxvUz1jbGFzc3t9LGRhPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD8oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaChlPT57bGV0IGk9ZS5pbmRleE9mKCI6Iik7aWYoaT4wKXtsZXQgcj1lLnNsaWNlKDAsaSksbz1yLnRvTG93ZXJDYXNlKCkscz1lLnNsaWNlKGkrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLG8pLHRoaXMuaGVhZGVycy5oYXMobyk/dGhpcy5oZWFkZXJzLmdldChvKS5wdXNoKHMpOnRoaXMuaGVhZGVycy5zZXQobyxbc10pfX0pfTooKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLGldKT0+e2xldCByO2lmKHI9InN0cmluZyI9PXR5cGVvZiBpP1tpXToibnVtYmVyIj09dHlwZW9mIGk/W2kudG9TdHJpbmcoKV06aS5tYXAobz0+by50b1N0cmluZygpKSxyLmxlbmd0aD4wKXtsZXQgbz1lLnRvTG93ZXJDYXNlKCk7dGhpcy5oZWFkZXJzLnNldChvLHIpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShlLG8pfX0pfTp0aGlzLmhlYWRlcnM9bmV3IE1hcH1oYXModCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXModC50b0xvd2VyQ2FzZSgpKX1nZXQodCl7dGhpcy5pbml0KCk7bGV0IGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUodCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGRhP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaCh0PT50aGlzLmFwcGx5VXBkYXRlKHQpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKHQpe3QuaW5pdCgpLEFycmF5LmZyb20odC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChlPT57dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVycy5nZXQoZSkpLHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQubm9ybWFsaXplZE5hbWVzLmdldChlKSl9KX1jbG9uZSh0KXtsZXQgZT1uZXcgZGE7cmV0dXJuIGUubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGRhP3RoaXMubGF6eUluaXQ6dGhpcyxlLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbdF0pLGV9YXBwbHlVcGRhdGUodCl7bGV0IGU9dC5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgaT10LnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgaSYmKGk9W2ldKSwwPT09aS5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZSh0Lm5hbWUsZSk7bGV0IHI9KCJhIj09PXQub3A/dGhpcy5oZWFkZXJzLmdldChlKTp2b2lkIDApfHxbXTtyLnB1c2goLi4uaSksdGhpcy5oZWFkZXJzLnNldChlLHIpO2JyZWFrO2Nhc2UiZCI6bGV0IG89dC52YWx1ZTtpZihvKXtsZXQgcz10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCFzKXJldHVybjtzPXMuZmlsdGVyKGE9Pi0xPT09by5pbmRleE9mKGEpKSwwPT09cy5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpKTp0aGlzLmhlYWRlcnMuc2V0KGUscyl9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKX19Zm9yRWFjaCh0KXt0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLmtleXMoKSkuZm9yRWFjaChlPT50KHRoaXMubm9ybWFsaXplZE5hbWVzLmdldChlKSx0aGlzLmhlYWRlcnMuZ2V0KGUpKSl9fSxPaGU9LyUoXGRbYS1mMC05XSkvZ2ksa2hlPXs0MDoiQCIsIjNBIjoiOiIsMjQ6IiQiLCIyQyI6IiwiLCIzQiI6IjsiLCIzRCI6Ij0iLCIzRiI6Ij8iLCIyRiI6Ii8ifTtmdW5jdGlvbiBpNihuKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG4pLnJlcGxhY2UoT2hlLCh0LGUpPT5raGVbZV0/P3QpfWZ1bmN0aW9uIGlTKG4pe3JldHVybmAke259YH12YXIgTWM9Y2xhc3N7Y29uc3RydWN0b3IodD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9dC5lbmNvZGVyfHxuZXcgY2xhc3N7ZW5jb2RlS2V5KHQpe3JldHVybiBpNih0KX1lbmNvZGVWYWx1ZSh0KXtyZXR1cm4gaTYodCl9ZGVjb2RlS2V5KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZGVjb2RlVmFsdWUodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX19LHQuZnJvbVN0cmluZyl7aWYodC5mcm9tT2JqZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bmV3IE1hcDtyZXR1cm4gbi5sZW5ndGg+MCYmbi5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2gocj0+e2xldCBvPXIuaW5kZXhPZigiPSIpLFtzLGFdPS0xPT1vP1t0LmRlY29kZUtleShyKSwiIl06W3QuZGVjb2RlS2V5KHIuc2xpY2UoMCxvKSksdC5kZWNvZGVWYWx1ZShyLnNsaWNlKG8rMSkpXSxsPWUuZ2V0KHMpfHxbXTtsLnB1c2goYSksZS5zZXQocyxsKX0pLGV9KHQuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgdC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKHQuZnJvbU9iamVjdCkuZm9yRWFjaChlPT57bGV0IGk9dC5mcm9tT2JqZWN0W2VdLHI9QXJyYXkuaXNBcnJheShpKT9pLm1hcChpUyk6W2lTKGkpXTt0aGlzLm1hcC5zZXQoZSxyKX0pKTp0aGlzLm1hcD1udWxsfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuaGFzKHQpfWdldCh0KXt0aGlzLmluaXQoKTtsZXQgZT10aGlzLm1hcC5nZXQodCk7cmV0dXJuIGU/ZVswXTpudWxsfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KHQpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImEifSl9YXBwZW5kQWxsKHQpe2xldCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10W2ldO0FycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKG89PntlLnB1c2goe3BhcmFtOmksdmFsdWU6byxvcDoiYSJ9KX0pOmUucHVzaCh7cGFyYW06aSx2YWx1ZTpyLG9wOiJhIn0pfSksdGhpcy5jbG9uZShlKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfWRlbGV0ZSh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKHQ9PntsZXQgZT10aGlzLmVuY29kZXIuZW5jb2RlS2V5KHQpO3JldHVybiB0aGlzLm1hcC5nZXQodCkubWFwKGk9PmUrIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShpKSkuam9pbigiJiIpfSkuZmlsdGVyKHQ9PiIiIT09dCkuam9pbigiJiIpfWNsb25lKHQpe2xldCBlPW5ldyBNYyh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gZS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsZS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQodCksZX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKHQ9PnRoaXMubWFwLnNldCh0LHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQodCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaCh0PT57c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgZT0oImEiPT09dC5vcD90aGlzLm1hcC5nZXQodC5wYXJhbSk6dm9pZCAwKXx8W107ZS5wdXNoKGlTKHQudmFsdWUpKSx0aGlzLm1hcC5zZXQodC5wYXJhbSxlKTticmVhaztjYXNlImQiOmlmKHZvaWQgMD09PXQudmFsdWUpe3RoaXMubWFwLmRlbGV0ZSh0LnBhcmFtKTticmVha317bGV0IGk9dGhpcy5tYXAuZ2V0KHQucGFyYW0pfHxbXSxyPWkuaW5kZXhPZihpUyh0LnZhbHVlKSk7LTEhPT1yJiZpLnNwbGljZShyLDEpLGkubGVuZ3RoPjA/dGhpcy5tYXAuc2V0KHQucGFyYW0saSk6dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pfX19KSx0aGlzLmNsb25lRnJvbT10aGlzLnVwZGF0ZXM9bnVsbCl9fTtmdW5jdGlvbiByNihuKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIG82KG4pe3JldHVybiB0eXBlb2YgQmxvYjwidSImJm4gaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIHM2KG4pe3JldHVybiB0eXBlb2YgRm9ybURhdGE8InUiJiZuIGluc3RhbmNlb2YgRm9ybURhdGF9dmFyIGFmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2xldCBvO2lmKHRoaXMudXJsPWUsdGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9dC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIkRFTEVURSI6Y2FzZSJHRVQiOmNhc2UiSEVBRCI6Y2FzZSJPUFRJT05TIjpjYXNlIkpTT05QIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0odGhpcy5tZXRob2QpfHxyPyh0aGlzLmJvZHk9dm9pZCAwIT09aT9pOm51bGwsbz1yKTpvPWksbyYmKHRoaXMucmVwb3J0UHJvZ3Jlc3M9ISFvLnJlcG9ydFByb2dyZXNzLHRoaXMud2l0aENyZWRlbnRpYWxzPSEhby53aXRoQ3JlZGVudGlhbHMsby5yZXNwb25zZVR5cGUmJih0aGlzLnJlc3BvbnNlVHlwZT1vLnJlc3BvbnNlVHlwZSksby5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPW8uaGVhZGVycyksby5jb250ZXh0JiYodGhpcy5jb250ZXh0PW8uY29udGV4dCksby5wYXJhbXMmJih0aGlzLnBhcmFtcz1vLnBhcmFtcykpLHRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZGEpLHRoaXMuY29udGV4dHx8KHRoaXMuY29udGV4dD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldCh0LGUpe3JldHVybiB0aGlzLm1hcC5zZXQodCxlKSx0aGlzfWdldCh0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHQpfHx0aGlzLm1hcC5zZXQodCx0LmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQodCl9ZGVsZXRlKHQpe3JldHVybiB0aGlzLm1hcC5kZWxldGUodCksdGhpc31oYXModCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0KX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19KSx0aGlzLnBhcmFtcyl7bGV0IHM9dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09cy5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXtsZXQgYT1lLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9ZSsoLTE9PT1hPyI/IjphPGUubGVuZ3RoLTE/IiYiOiIiKStzfX1lbHNlIHRoaXMucGFyYW1zPW5ldyBNYyx0aGlzLnVybFdpdGhQYXJhbXM9ZX1zZXJpYWxpemVCb2R5KCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDpyNih0aGlzLmJvZHkpfHxvNih0aGlzLmJvZHkpfHxzNih0aGlzLmJvZHkpfHx0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1IiYmdGhpcy5ib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfHwic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT90aGlzLmJvZHk6dGhpcy5ib2R5IGluc3RhbmNlb2YgTWM/dGhpcy5ib2R5LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpP0pTT04uc3RyaW5naWZ5KHRoaXMuYm9keSk6dGhpcy5ib2R5LnRvU3RyaW5nKCl9ZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keXx8czYodGhpcy5ib2R5KT9udWxsOm82KHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6cjYodGhpcy5ib2R5KT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5PyJ0ZXh0L3BsYWluIjp0aGlzLmJvZHkgaW5zdGFuY2VvZiBNYz8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5PyJhcHBsaWNhdGlvbi9qc29uIjpudWxsfWNsb25lKHQ9e30pe2xldCBlPXQubWV0aG9kfHx0aGlzLm1ldGhvZCxpPXQudXJsfHx0aGlzLnVybCxyPXQucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxvPXZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LHM9dm9pZCAwIT09dC53aXRoQ3JlZGVudGlhbHM/dC53aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHMsYT12b2lkIDAhPT10LnJlcG9ydFByb2dyZXNzP3QucmVwb3J0UHJvZ3Jlc3M6dGhpcy5yZXBvcnRQcm9ncmVzcyxsPXQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLGM9dC5wYXJhbXN8fHRoaXMucGFyYW1zLGQ9dC5jb250ZXh0Pz90aGlzLmNvbnRleHQ7cmV0dXJuIHZvaWQgMCE9PXQuc2V0SGVhZGVycyYmKGw9T2JqZWN0LmtleXModC5zZXRIZWFkZXJzKS5yZWR1Y2UoKHUscCk9PnUuc2V0KHAsdC5zZXRIZWFkZXJzW3BdKSxsKSksdC5zZXRQYXJhbXMmJihjPU9iamVjdC5rZXlzKHQuc2V0UGFyYW1zKS5yZWR1Y2UoKHUscCk9PnUuc2V0KHAsdC5zZXRQYXJhbXNbcF0pLGMpKSxuZXcgYWYoZSxpLG8se3BhcmFtczpjLGhlYWRlcnM6bCxjb250ZXh0OmQscmVwb3J0UHJvZ3Jlc3M6YSxyZXNwb25zZVR5cGU6cix3aXRoQ3JlZGVudGlhbHM6c30pfX0sYnU9KCgpPT57cmV0dXJuKG49YnV8fChidT17fSkpW24uU2VudD0wXT0iU2VudCIsbltuLlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsbltuLlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIsbltuLkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLG5bbi5SZXNwb25zZT00XT0iUmVzcG9uc2UiLG5bbi5Vc2VyPTVdPSJVc2VyIixidTt2YXIgbn0pKCksdHY9Y2xhc3N7Y29uc3RydWN0b3IodCxlPTIwMCxpPSJPSyIpe3RoaXMuaGVhZGVycz10LmhlYWRlcnN8fG5ldyBkYSx0aGlzLnN0YXR1cz12b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czplLHRoaXMuc3RhdHVzVGV4dD10LnN0YXR1c1RleHR8fGksdGhpcy51cmw9dC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fSxudj1jbGFzcyBleHRlbmRzIHR2e2NvbnN0cnVjdG9yKHQ9e30pe3N1cGVyKHQpLHRoaXMudHlwZT1idS5SZXNwb25zZUhlYWRlcn1jbG9uZSh0PXt9KXtyZXR1cm4gbmV3IG52KHtoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX0sQWg9Y2xhc3MgZXh0ZW5kcyB0dntjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLnR5cGU9YnUuUmVzcG9uc2UsdGhpcy5ib2R5PXZvaWQgMCE9PXQuYm9keT90LmJvZHk6bnVsbH1jbG9uZSh0PXt9KXtyZXR1cm4gbmV3IEFoKHtib2R5OnZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LGhlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fSxBbD1jbGFzcyBleHRlbmRzIHR2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEsdGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke3QudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke3QudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke3Quc3RhdHVzfSAke3Quc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9dC5lcnJvcnx8bnVsbH19O2Z1bmN0aW9uIGhGKG4sdCl7cmV0dXJue2JvZHk6dCxoZWFkZXJzOm4uaGVhZGVycyxjb250ZXh0Om4uY29udGV4dCxvYnNlcnZlOm4ub2JzZXJ2ZSxwYXJhbXM6bi5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6bi5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOm4ud2l0aENyZWRlbnRpYWxzfX12YXIgbGY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmhhbmRsZXI9ZX1yZXF1ZXN0KGUsaSxyPXt9KXtsZXQgbztpZihlIGluc3RhbmNlb2YgYWYpbz1lO2Vsc2V7bGV0IGwsYztsPXIuaGVhZGVycyBpbnN0YW5jZW9mIGRhP3IuaGVhZGVyczpuZXcgZGEoci5oZWFkZXJzKSxyLnBhcmFtcyYmKGM9ci5wYXJhbXMgaW5zdGFuY2VvZiBNYz9yLnBhcmFtczpuZXcgTWMoe2Zyb21PYmplY3Q6ci5wYXJhbXN9KSksbz1uZXcgYWYoZSxpLHZvaWQgMCE9PXIuYm9keT9yLmJvZHk6bnVsbCx7aGVhZGVyczpsLGNvbnRleHQ6ci5jb250ZXh0LHBhcmFtczpjLHJlcG9ydFByb2dyZXNzOnIucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOnIucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOnIud2l0aENyZWRlbnRpYWxzfSl9bGV0IHM9SHQobykucGlwZShmdW5jdGlvbihuLHQpe3JldHVybiBfbih0KT9obihuLHQsMSk6aG4obiwxKX0obD0+dGhpcy5oYW5kbGVyLmhhbmRsZShsKSkpO2lmKGUgaW5zdGFuY2VvZiBhZnx8ImV2ZW50cyI9PT1yLm9ic2VydmUpcmV0dXJuIHM7bGV0IGE9cy5waXBlKGtlKGw9PmwgaW5zdGFuY2VvZiBBaCkpO3N3aXRjaChyLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goby5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBhLnBpcGUoTihsPT57aWYobnVsbCE9PWwuYm9keSYmIShsLmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIGwuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBhLnBpcGUoTihsPT57aWYobnVsbCE9PWwuYm9keSYmIShsLmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIGwuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBhLnBpcGUoTihsPT57aWYobnVsbCE9PWwuYm9keSYmInN0cmluZyIhPXR5cGVvZiBsLmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIGwuYm9keX0pKTtkZWZhdWx0OnJldHVybiBhLnBpcGUoTihsPT5sLmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gYTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtyLm9ic2VydmV9fWApfX1kZWxldGUoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUiLGUsaSl9Z2V0KGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixlLGkpfWhlYWQoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixlLGkpfWpzb25wKGUsaSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGUse3BhcmFtczoobmV3IE1jKS5hcHBlbmQoaSwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGUsaSl9cGF0Y2goZSxpLHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixlLGhGKHIsaSkpfXBvc3QoZSxpLHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGUsaEYocixpKSl9cHV0KGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGUsaEYocixpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoZXYpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBkNihuLHQpe3JldHVybiB0KG4pfWZ1bmN0aW9uIExoZShuLHQpe3JldHVybihlLGkpPT50LmludGVyY2VwdChlLHtoYW5kbGU6cj0+bihyLGkpfSl9dmFyIGJGPW5ldyBpZSgiSFRUUF9JTlRFUkNFUFRPUlMiKSx2Rj1uZXcgaWUoIkhUVFBfSU5URVJDRVBUT1JfRk5TIik7ZnVuY3Rpb24gVmhlKCl7bGV0IG49bnVsbDtyZXR1cm4odCxlKT0+KG51bGw9PT1uJiYobj0oYWkoYkYse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VSaWdodChMaGUsZDYpKSxuKHQsZSkpfXZhciBhNj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZXZ7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuYmFja2VuZD1lLHRoaXMuaW5qZWN0b3I9aSx0aGlzLmNoYWluPW51bGx9aGFuZGxlKGUpe2lmKG51bGw9PT10aGlzLmNoYWluKXtsZXQgaT1BcnJheS5mcm9tKG5ldyBTZXQodGhpcy5pbmplY3Rvci5nZXQodkYpKSk7dGhpcy5jaGFpbj1pLnJlZHVjZVJpZ2h0KChyLG8pPT5mdW5jdGlvbihuLHQsZSl7cmV0dXJuKGkscik9PmUucnVuSW5Db250ZXh0KCgpPT50KGksbz0+bihvLHIpKSl9KHIsbyx0aGlzLmluamVjdG9yKSxkNil9cmV0dXJuIHRoaXMuY2hhaW4oZSxpPT50aGlzLmJhY2tlbmQuaGFuZGxlKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhvUyksayhwYykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEhoZT0vXlwpXF1cfScsP1xuLyxsNj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMueGhyRmFjdG9yeT1lfWhhbmRsZShlKXtpZigiSlNPTlAiPT09ZS5tZXRob2QpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gY29uc3RydWN0IEpzb25wIHJlcXVlc3Qgd2l0aG91dCBIdHRwQ2xpZW50SnNvbnBNb2R1bGUgaW5zdGFsbGVkLiIpO3JldHVybiBuZXcgS3QoaT0+e2xldCByPXRoaXMueGhyRmFjdG9yeS5idWlsZCgpO2lmKHIub3BlbihlLm1ldGhvZCxlLnVybFdpdGhQYXJhbXMpLGUud2l0aENyZWRlbnRpYWxzJiYoci53aXRoQ3JlZGVudGlhbHM9ITApLGUuaGVhZGVycy5mb3JFYWNoKChmLG0pPT5yLnNldFJlcXVlc3RIZWFkZXIoZixtLmpvaW4oIiwiKSkpLGUuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHxyLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFlLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7bGV0IGY9ZS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1mJiZyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZil9aWYoZS5yZXNwb25zZVR5cGUpe2xldCBmPWUucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7ci5yZXNwb25zZVR5cGU9Impzb24iIT09Zj9mOiJ0ZXh0In1sZXQgbz1lLnNlcmlhbGl6ZUJvZHkoKSxzPW51bGwsYT0oKT0+e2lmKG51bGwhPT1zKXJldHVybiBzO2xldCBmPXIuc3RhdHVzVGV4dHx8Ik9LIixtPW5ldyBkYShyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxiPWZ1bmN0aW9uKG4pe3JldHVybiJyZXNwb25zZVVSTCJpbiBuJiZuLnJlc3BvbnNlVVJMP24ucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3Qobi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/bi5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KHIpfHxlLnVybDtyZXR1cm4gcz1uZXcgbnYoe2hlYWRlcnM6bSxzdGF0dXM6ci5zdGF0dXMsc3RhdHVzVGV4dDpmLHVybDpifSksc30sbD0oKT0+e2xldHtoZWFkZXJzOmYsc3RhdHVzOm0sc3RhdHVzVGV4dDpiLHVybDpNfT1hKCkseT1udWxsOzIwNCE9PW0mJih5PXR5cGVvZiByLnJlc3BvbnNlPiJ1Ij9yLnJlc3BvbnNlVGV4dDpyLnJlc3BvbnNlKSwwPT09bSYmKG09eT8yMDA6MCk7bGV0IHg9bT49MjAwJiZtPDMwMDtpZigianNvbiI9PT1lLnJlc3BvbnNlVHlwZSYmInN0cmluZyI9PXR5cGVvZiB5KXtsZXQgUj15O3k9eS5yZXBsYWNlKEhoZSwiIik7dHJ5e3k9IiIhPT15P0pTT04ucGFyc2UoeSk6bnVsbH1jYXRjaChBKXt5PVIseCYmKHg9ITEseT17ZXJyb3I6QSx0ZXh0Onl9KX19eD8oaS5uZXh0KG5ldyBBaCh7Ym9keTp5LGhlYWRlcnM6ZixzdGF0dXM6bSxzdGF0dXNUZXh0OmIsdXJsOk18fHZvaWQgMH0pKSxpLmNvbXBsZXRlKCkpOmkuZXJyb3IobmV3IEFsKHtlcnJvcjp5LGhlYWRlcnM6ZixzdGF0dXM6bSxzdGF0dXNUZXh0OmIsdXJsOk18fHZvaWQgMH0pKX0sYz1mPT57bGV0e3VybDptfT1hKCksYj1uZXcgQWwoe2Vycm9yOmYsc3RhdHVzOnIuc3RhdHVzfHwwLHN0YXR1c1RleHQ6ci5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciIsdXJsOm18fHZvaWQgMH0pO2kuZXJyb3IoYil9LGQ9ITEsdT1mPT57ZHx8KGkubmV4dChhKCkpLGQ9ITApO2xldCBtPXt0eXBlOmJ1LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmYubG9hZGVkfTtmLmxlbmd0aENvbXB1dGFibGUmJihtLnRvdGFsPWYudG90YWwpLCJ0ZXh0Ij09PWUucmVzcG9uc2VUeXBlJiYhIXIucmVzcG9uc2VUZXh0JiYobS5wYXJ0aWFsVGV4dD1yLnJlc3BvbnNlVGV4dCksaS5uZXh0KG0pfSxwPWY9PntsZXQgbT17dHlwZTpidS5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6Zi5sb2FkZWR9O2YubGVuZ3RoQ29tcHV0YWJsZSYmKG0udG90YWw9Zi50b3RhbCksaS5uZXh0KG0pfTtyZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLGUucmVwb3J0UHJvZ3Jlc3MmJihyLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix1KSxudWxsIT09byYmci51cGxvYWQmJnIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5zZW5kKG8pLGkubmV4dCh7dHlwZTpidS5TZW50fSksKCk9PntyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIsYyksZS5yZXBvcnRQcm9ncmVzcyYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHUpLG51bGwhPT1vJiZyLnVwbG9hZCYmci51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnJlYWR5U3RhdGUhPT1yLkRPTkUmJnIuYWJvcnQoKX19KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhRcCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHU2PW5ldyBpZSgiWFNSRl9FTkFCTEVEIiksamhlPW5ldyBpZSgiWFNSRl9DT09LSUVfTkFNRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYU1JGLVRPS0VOIn0pLFdoZT1uZXcgaWUoIlhTUkZfSEVBREVSX05BTUUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWC1YU1JGLVRPS0VOIn0pLHNTPWNsYXNze30scWhlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZG9jPWUsdGhpcy5wbGF0Zm9ybT1pLHRoaXMuY29va2llTmFtZT1yLHRoaXMubGFzdENvb2tpZVN0cmluZz0iIix0aGlzLmxhc3RUb2tlbj1udWxsLHRoaXMucGFyc2VDb3VudD0wfWdldFRva2VuKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO2xldCBlPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGUhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1tdyhlLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWUpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEx0KSxrKHZjKSxrKGpoZSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2Z1bmN0aW9uIFloZShuLHQpe2xldCBlPW4udXJsLnRvTG93ZXJDYXNlKCk7aWYoIWFpKHU2KXx8IkdFVCI9PT1uLm1ldGhvZHx8IkhFQUQiPT09bi5tZXRob2R8fGUuc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxlLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpcmV0dXJuIHQobik7bGV0IGk9YWkoc1MpLmdldFRva2VuKCkscj1haShXaGUpO3JldHVybiBudWxsIT1pJiYhbi5oZWFkZXJzLmhhcyhyKSYmKG49bi5jbG9uZSh7aGVhZGVyczpuLmhlYWRlcnMuc2V0KHIsaSl9KSksdChuKX12YXIgclM9KCgpPT57cmV0dXJuKG49clN8fChyUz17fSkpW24uSW50ZXJjZXB0b3JzPTBdPSJJbnRlcmNlcHRvcnMiLG5bbi5MZWdhY3lJbnRlcmNlcHRvcnM9MV09IkxlZ2FjeUludGVyY2VwdG9ycyIsbltuLkN1c3RvbVhzcmZDb25maWd1cmF0aW9uPTJdPSJDdXN0b21Yc3JmQ29uZmlndXJhdGlvbiIsbltuLk5vWHNyZlByb3RlY3Rpb249M109Ik5vWHNyZlByb3RlY3Rpb24iLG5bbi5Kc29ucFN1cHBvcnQ9NF09Ikpzb25wU3VwcG9ydCIsbltuLlJlcXVlc3RzTWFkZVZpYVBhcmVudD01XT0iUmVxdWVzdHNNYWRlVmlhUGFyZW50IixyUzt2YXIgbn0pKCk7ZnVuY3Rpb24gUWhlKC4uLm4pe2xldCB0PVtsZixsNixhNix7cHJvdmlkZTpldix1c2VFeGlzdGluZzphNn0se3Byb3ZpZGU6b1MsdXNlRXhpc3Rpbmc6bDZ9LHtwcm92aWRlOnZGLHVzZVZhbHVlOlloZSxtdWx0aTohMH0se3Byb3ZpZGU6dTYsdXNlVmFsdWU6ITB9LHtwcm92aWRlOnNTLHVzZUNsYXNzOnFoZX1dO2ZvcihsZXQgZSBvZiBuKXQucHVzaCguLi5lLlx1MDI3NXByb3ZpZGVycyk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybnsiXHUwMjc1cHJvdmlkZXJzIjpufX0odCl9dmFyIGM2PW5ldyBpZSgiTEVHQUNZX0lOVEVSQ0VQVE9SX0ZOIikscDY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUWhlKHsiXHUwMjc1a2luZCI6clMuTGVnYWN5SW50ZXJjZXB0b3JzLCJcdTAyNzVwcm92aWRlcnMiOlt7cHJvdmlkZTpjNix1c2VGYWN0b3J5OlZoZX0se3Byb3ZpZGU6dkYsdXNlRXhpc3Rpbmc6YzYsbXVsdGk6ITB9XX0pXX0pLG59KSgpLGFTPSJmZWF0dXJlIixSaD1FcihhUyksdnU9cShSaCxuPT5uLmlzRmVhdHVyZUZsYWdzTG9hZGVkKSxrcz1xKFJoLG49Pih7Li4ubi5kZWZhdWx0RmxhZ3MsLi4ubi5mbGFnT3ZlcnJpZGVzfSkpLG02PXEoUmgsbj0+bi5kZWZhdWx0RmxhZ3MpLGl2PXEoUmgsbj0+bi5mbGFnT3ZlcnJpZGVzfHx7fSksY2Y9cShSaCxuPT5uLm1ldGFkYXRhKSxQaD1xKFJoLG49PntsZXQgdD17fTtmb3IobGV0IGUgaW4gbi5mbGFnT3ZlcnJpZGVzKXtsZXQgaT1uLm1ldGFkYXRhW2VdO2kmJmkucXVlcnlQYXJhbU92ZXJyaWRlJiZpLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuJiYodFtlXT1uLmZsYWdPdmVycmlkZXNbZV0pfXJldHVybiB0fSksaDY9cShrcyxuPT5uLmlzQXV0b0RhcmtNb2RlQWxsb3dlZCksUmw9cShrcyxuPT5udWxsIT09bi5lbmFibGVEYXJrTW9kZU92ZXJyaWRlP24uZW5hYmxlRGFya01vZGVPdmVycmlkZTpuLmRlZmF1bHRFbmFibGVEYXJrTW9kZSksbFM9cShrcyxuPT5uLmVuYWJsZURhcmtNb2RlT3ZlcnJpZGUpLGc2PXEoa3Msbj0+bi5lbmFibGVkRXhwZXJpbWVudGFsUGx1Z2lucyksXzY9cShrcyxuPT5uLmluQ29sYWIpLGNTPXEoa3Msbj0+bi5tZXRyaWNzSW1hZ2VTdXBwb3J0RW5hYmxlZCkseUY9cShrcyxuPT5uLmZvcmNlU3ZnKSxiNj1xKGtzLG49PnZvaWQgMCE9PW4uc2hvd0ZsYWdzKSxkUz1xKGtzLG49Pm4uZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbiksbWQ9cShrcyxuPT5uLmVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXMpO2Z1bmN0aW9uIEpoZShuLHQpe2lmKCFuKXJldHVybjtsZXQgZT1uIGluc3RhbmNlb2YgRm9ybURhdGE/ZnVuY3Rpb24obil7bGV0IHQ9e307Zm9yKGxldFtlLGldb2Ygbi5lbnRyaWVzKCkpdFtlXT1pO3JldHVybiB0fShuKTpuO3JldHVybiB0P3tbdF06SlNPTi5zdHJpbmdpZnkoZSl9OmV9dmFyICRoZT0iWC1YU1JGLVByb3RlY3RlZCI7ZnVuY3Rpb24geEYobil7bGV0IHQ9bi5oZWFkZXJzfHxuZXcgZGE7cmV0dXJuIHQ9dC5hcHBlbmQoJGhlLCIxIiksey4uLm4saGVhZGVyczp0fX12YXIgVWE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hcHBSb290UHJvdmlkZXI9ZSx0aGlzLmh0dHA9aSx0aGlzLnN0b3JlPXJ9cmVzb2x2ZUFwcFJvb3QoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSk6ZX1nZXQoZSxpPXt9KXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLnJlc29sdmVBcHBSb290KGUpLGkpfXBvc3QoZSxpLHI9e30sbyl7cmV0dXJuIHI9eEYociksdGhpcy5zdG9yZS5zZWxlY3QodnUpLnBpcGUoa2Uocz0+Qm9vbGVhbihzKSksWXQoMSksQnQodGhpcy5zdG9yZS5zZWxlY3QoXzYpKSxobigoWyxzXSk9PntsZXQgYT10aGlzLnJlc29sdmVBcHBSb290KGUpO3JldHVybiBzP3RoaXMuaHR0cC5nZXQoYSx7aGVhZGVyczpyLmhlYWRlcnM/P3t9LHBhcmFtczpKaGUoaSxvKX0pOnRoaXMuaHR0cC5wb3N0KGEsaSxyKX0pKX1wdXQoZSxpLHI9e30pe3JldHVybiB0aGlzLmh0dHAucHV0KHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksaSx4RihyKSl9ZGVsZXRlKGUsaT17fSl7cmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodGhpcy5yZXNvbHZlQXBwUm9vdChlKSx4RihpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoc2YpLGsobGYpLGsoQWUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxPaD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltVYV0saW1wb3J0czpbcDYsU2hdfSksbn0pKCksamE9KCgpPT57cmV0dXJuKG49amF8fChqYT17fSkpLlVOS05PV049IlVOS05PV04iLG4uTk9UX0ZPVU5EPSJOT1RfRk9VTkQiLG4uUEVSTUlTU0lPTl9ERU5JRUQ9IlBFUk1JU1NJT05fREVOSUVEIixqYTt2YXIgbn0pKCksdjY9bmV3IGllKCJUZW5zb3JCb2FyZCBicmFuZCBuYW1lIiksbm89KCgpPT57cmV0dXJuKG49bm98fChubz17fSkpLlNURVA9InN0ZXAiLG4uV0FMTF9USU1FPSJ3YWxsX3RpbWUiLG4uUkVMQVRJVkU9InJlbGF0aXZlIixubzt2YXIgbn0pKCksRHI9KCgpPT57cmV0dXJuKG49RHJ8fChEcj17fSkpLk9GRlNFVD0ib2Zmc2V0IixuLk9WRVJMQVk9Im92ZXJsYXkiLERyO3ZhciBufSkoKTtmdW5jdGlvbiB5NihuKXtsZXQgdD1qYS5VTktOT1dOO3JldHVybiBuIGluc3RhbmNlb2YgQWwmJig0MDQ9PT1uLnN0YXR1cyYmKHQ9amEuTk9UX0ZPVU5EKSw0MDM9PT1uLnN0YXR1cyYmKHQ9amEuUEVSTUlTU0lPTl9ERU5JRUQpKSxlYShuZXcgb3YodCkpfXZhciBvdj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmZhaWx1cmVDb2RlPXR9fSx1Uz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMudGZCYWNrZW5kPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWJhY2tlbmQiKS50Zl9iYWNrZW5kfWZldGNoUGx1Z2luc0xpc3RpbmcoZSl7bGV0IGk9ZnVuY3Rpb24obil7aWYoIW4ubGVuZ3RoKXJldHVybiBudWxsO2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldCBlIG9mIG4pdC5hcHBlbmQoImV4cGVyaW1lbnRhbFBsdWdpbiIsZSk7cmV0dXJuIHR9KGUpLHI9aT9gZGF0YS9wbHVnaW5zX2xpc3Rpbmc/JHtpLnRvU3RyaW5nKCl9YDoiZGF0YS9wbHVnaW5zX2xpc3RpbmciO3JldHVybiB0aGlzLmh0dHAuZ2V0KHIpLnBpcGUoenIoeTYpKX1mZXRjaEVudmlyb25tZW50KCl7cmV0dXJuIGNvKFt0aGlzLmh0dHAuZ2V0KCJkYXRhL2Vudmlyb25tZW50IiksJHIodGhpcy50ZkJhY2tlbmQuZW52aXJvbm1lbnRTdG9yZS5yZWZyZXNoKCkpXSkucGlwZShOKChbcl0pPT5yKSx6cih5NikpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKFVhKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkseDY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbdVNdLGltcG9ydHM6W09oXX0pLG59KSgpLFRlPSgoKT0+e3JldHVybihuPVRlfHwoVGU9e30pKVtuLk5PVF9MT0FERUQ9MF09Ik5PVF9MT0FERUQiLG5bbi5MT0FERUQ9MV09IkxPQURFRCIsbltuLkxPQURJTkc9Ml09IkxPQURJTkciLG5bbi5GQUlMRUQ9M109IkZBSUxFRCIsVGU7dmFyIG59KSgpLHdjPV9lKCJbQ29yZV0gUGx1Z2luIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxwUz1fZSgiW0NvcmVdIFBsdWdpbiBVcmwgSGFzaCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQzY9X2UoIltDb3JlXSBMb2FkZWQiKSxGcz1fZSgiW0NvcmVdIFVzZXIgVHJpZ2dlcmVkIFJlbG9hZCIpLGNzPV9lKCJbQ29yZV0gQXV0byBSZWxvYWQiKSxmUz1fZSgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggUmVxdWVzdGVkIiksZGY9X2UoIltDb3JlXSBQbHVnaW5MaXN0aW5nIEZldGNoIFN1Y2Nlc3NmdWwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxzdj1fZSgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbVM9X2UoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIFJlcXVlc3RlZCIpLGhTPV9lKCJbQ29yZV0gUG9seW1lciBDb21wb25lbnQgUnVucyBGZXRjaCBTdWNjZXNzZnVsIiksZ1M9X2UoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIEZhaWxlZCIpLF9TPV9lKCJbQ29yZV0gRW52aXJvbm1lbnQgRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE02PV9lKCJbQ29yZV0gUnVuIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdzY9X2UoIltDb3JlXSBSdW4gRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtoPV9lKCJbQ29yZV0gU2lkZSBCYXIgV2lkdGggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGJTPV9lKCJbQ29yZV0gUnVucyBUYWJsZSBGdWxsIFNjcmVlbiBUb2dnbGVkIik7ZnVuY3Rpb24gdWYobix0LGUpe2xldCBpPU9iamVjdC5rZXlzKG4pLHI9ey4uLm4sLi4udCxwcml2YXRlTmFtZXNwYWNlZFN0YXRlOnt9fTtyZXR1cm57aW5pdGlhbFN0YXRlOnIscmVkdWNlcnM6YnIocix5ZShQcywoYSx7YmVmb3JlOmwsYWZ0ZXI6YyxiZWZvcmVOYW1lc3BhY2VJZDpkLGFmdGVyTmFtZXNwYWNlSWQ6dX0pPT57bGV0IHA9YTtyZXR1cm4gZCE9PXUmJihwPWZ1bmN0aW9uKGEsbCxjKXtsZXQgZD17Li4uYS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlfTtpZihsKXtsZXQgcD17fTtmb3IobGV0IGYgb2YgaSlwW2ZdPWFbZl07ZD17Li4uZCxbbF06cH19bGV0IHU9e307cmV0dXJuIGEucHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZT8uW2NdP3U9YS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlW2NdOmwmJih1PW4pLHsuLi5hLC4uLnUscHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZTpkfX0oYSxkLHUpKSxlJiYocD1lKHAsbCxjKSkscH0pKX19ZnVuY3Rpb24gcGYoLi4ubil7cmV0dXJuKHQsZSk9PntsZXQgaT10O2ZvcihsZXQgciBvZiBuKWk9cihpLGUpO3JldHVybiBpfX12YXIgbHY9e2FjdGl2ZVBsdWdpbjpudWxsLHBsdWdpbnM6e30sY29yZURhdGFMb2FkU3RhdGU6e3N0YXRlOlRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBsdWdpbnNMaXN0TG9hZGVkOntzdGF0ZTpUZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsLGZhaWx1cmVDb2RlOm51bGx9LGVudmlyb25tZW50OntkYXRhX2xvY2F0aW9uOiIiLHdpbmRvd190aXRsZToiIn0scG9seW1lclJ1bnNMb2FkU3RhdGU6e3N0YXRlOlRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBvbHltZXJJbnRlcm9wUnVuczpbXSxwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0LHNpZGVCYXJXaWR0aEluUGVyY2VudDoyMCxydW5zVGFibGVGdWxsU2NyZWVuOiExfSxuZ2U9YnIobHYseWUod2MscFMsKG4se3BsdWdpbjp0fSk9Pih7Li4ubixhY3RpdmVQbHVnaW46dH0pKSx5ZShmUyxuPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6VGUuTE9BRElOR30scGx1Z2luc0xpc3RMb2FkZWQ6ey4uLm4ucGx1Z2luc0xpc3RMb2FkZWQsc3RhdGU6VGUuTE9BRElOR319KSkseWUoc3YsKG4se2ZhaWx1cmVDb2RlOnR9KT0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOlRlLkZBSUxFRH0scGx1Z2luc0xpc3RMb2FkZWQ6ey4uLm4ucGx1Z2luc0xpc3RMb2FkZWQsc3RhdGU6VGUuRkFJTEVELGZhaWx1cmVDb2RlOnR9fSkpLHllKGRmLChuLHtwbHVnaW5zOnR9KT0+e2xldCBlPU9iamVjdC5rZXlzKHQpLmZpbmQocz0+dFtzXS5lbmFibGVkKXx8bnVsbCxpPW4uYWN0aXZlUGx1Z2lufHxlLHI9RGF0ZS5ub3coKSxvPW4uY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIG4ucG9seW1lclJ1bnNMb2FkU3RhdGUuc3RhdGU9PT1UZS5MT0FERUQmJihvPXtzdGF0ZTpUZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnJ9KSx7Li4ubixhY3RpdmVQbHVnaW46aSxjb3JlRGF0YUxvYWRTdGF0ZTpvLHBsdWdpbnM6dCxwbHVnaW5zTGlzdExvYWRlZDp7c3RhdGU6VGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpyLGZhaWx1cmVDb2RlOm51bGx9fX0pLHllKG1TLG49Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpUZS5MT0FESU5HfSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7Li4ubi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSxzdGF0ZTpUZS5MT0FESU5HfX0pKSx5ZShoUyxuPT57bGV0IHQ9RGF0ZS5ub3coKSxlPW4uY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIG4ucGx1Z2luc0xpc3RMb2FkZWQuc3RhdGU9PT1UZS5MT0FERUQmJihlPXtzdGF0ZTpUZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnR9KSx7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTplLHBvbHltZXJSdW5zTG9hZFN0YXRlOnsuLi5uLnBvbHltZXJSdW5zTG9hZFN0YXRlLHN0YXRlOlRlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6dH19fSkseWUoZ1Msbj0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOlRlLkZBSUxFRH0scG9seW1lclJ1bnNMb2FkU3RhdGU6ey4uLm4ucG9seW1lclJ1bnNMb2FkU3RhdGUsc3RhdGU6VGUuRkFJTEVEfX0pKSx5ZShfUywobix7ZW52aXJvbm1lbnQ6dH0pPT4oey4uLm4sZW52aXJvbm1lbnQ6dH0pKSx5ZSh3Niwobix7cnVuczp0fSk9Pih7Li4ubixwb2x5bWVySW50ZXJvcFJ1bnM6dH0pKSx5ZShNNiwobix7bmV4dFNlbGVjdGlvbjp0fSk9Pih7Li4ubixwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0KHQpfSkpLHllKGtoLChuLHt3aWR0aEluUGVyY2VudDp0fSk9Pih7Li4ubixzaWRlQmFyV2lkdGhJblBlcmNlbnQ6TWF0aC5taW4oTWF0aC5tYXgoMCx0KSwxMDApfSkpLHllKElsLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57bGV0IGU9ey4uLm59LGk9dC5zaWRlQmFyV2lkdGhJblBlcmNlbnQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpJiZpPj0wJiZpPD0xMDAmJihlLnNpZGVCYXJXaWR0aEluUGVyY2VudD1pKSxlfSkseWUoYlMsbj0+KHsuLi5uLHJ1bnNUYWJsZUZ1bGxTY3JlZW46IW4ucnVuc1RhYmxlRnVsbFNjcmVlbn0pKSkse3JlZHVjZXJzOmlnZX09dWYobHYse30pO2Z1bmN0aW9uIFM2KG4sdCl7cmV0dXJuIHBmKG5nZSxpZ2UpKG4sdCl9dmFyIGhkPUVyKCJjb3JlIikseVM9cShoZCxuPT5uLnBsdWdpbnNMaXN0TG9hZGVkKSxFNj1xKGhkLG49Pm4ucG9seW1lclJ1bnNMb2FkU3RhdGUpLFQ2PXEoaGQsbj0+bi5jb3JlRGF0YUxvYWRTdGF0ZS5zdGF0ZSksRmg9cShoZCxuPT5uLmNvcmVEYXRhTG9hZFN0YXRlLmxhc3RMb2FkZWRUaW1lSW5NcyksV289cShoZCxuPT5uLmFjdGl2ZVBsdWdpbiksTmg9cShoZCxuPT5uLnBsdWdpbnMpLHhTPXEoaGQsbj0+bi5lbnZpcm9ubWVudCksQ1M9cShoZCxuPT5uLnNpZGVCYXJXaWR0aEluUGVyY2VudCksTGg9cShoZCxuPT5uLnJ1bnNUYWJsZUZ1bGxTY3JlZW4pLEQ2PW5ldyBTZXQoW3duLkNPTVBBUkVfRVhQRVJJTUVOVCx3bi5FWFBFUklNRU5ULHduLk5PVF9TRVRdKSxJNj0oKCk9PntjbGFzcyBue3JlZnJlc2hQb2x5bWVyUnVucygpe3JldHVybiAkcih0aGlzLnRmQmFja2VuZC5yZWYucnVuc1N0b3JlLnJlZnJlc2goKSl9ZmV0Y2hFbnZpcm9ubWVudCgpe3JldHVybiB0aGlzLndlYmFwcERhdGFTb3VyY2UuZmV0Y2hFbnZpcm9ubWVudCgpLnBpcGUoTnQoZT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goX1Moe2Vudmlyb25tZW50OmV9KSl9KSl9Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy53ZWJhcHBEYXRhU291cmNlPXIsdGhpcy50ZkJhY2tlbmQ9e3JlZjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1iYWNrZW5kIikudGZfYmFja2VuZH0sdGhpcy5vbkRhc2hib2FyZExvYWQkPXRuKHRoaXMuYWN0aW9ucyQucGlwZShlaShDNixQcyksQnQodGhpcy5zdG9yZS5zZWxlY3QoTm8pKSxZbigoWyxvXSxbLHNdKT0+Rm8obyxzKSkpLHRoaXMuYWN0aW9ucyQucGlwZShlaShjcyxGcykpKS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KEhhKSksa2UoKFssb10pPT5ENi5oYXMobykpLGFjKDEsdm9pZCAwLHtsZWFkaW5nOiEwfSkpLHRoaXMuZmV0Y2hXZWJBcHBEYXRhJD1hcigoKT0+e2xldCBvPXRoaXMub25EYXNoYm9hcmRMb2FkJC5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KHlTKSx0aGlzLnN0b3JlLnNlbGVjdChnNikpLGtlKChbLHtzdGF0ZTphfV0pPT5hIT09VGUuTE9BRElORyksTnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goZlMoKSkpLGhuKChbLCxhXSk9PmZ1bmN0aW9uKC4uLm4pe2xldCB0PXJjKG4pLGU9T0Mobik7cmV0dXJuIGUubGVuZ3RoP25ldyBLdChpPT57bGV0IHI9ZS5tYXAoKCk9PltdKSxvPWUubWFwKCgpPT4hMSk7aS5hZGQoKCk9PntyPW89bnVsbH0pO2ZvcihsZXQgcz0wOyFpLmNsb3NlZCYmczxlLmxlbmd0aDtzKyspaWkoZVtzXSkuc3Vic2NyaWJlKFZ0KGksYT0+e2lmKHJbc10ucHVzaChhKSxyLmV2ZXJ5KGw9PmwubGVuZ3RoKSl7bGV0IGw9ci5tYXAoYz0+Yy5zaGlmdCgpKTtpLm5leHQodD90KC4uLmwpOmwpLHIuc29tZSgoYyxkKT0+IWMubGVuZ3RoJiZvW2RdKSYmaS5jb21wbGV0ZSgpfX0sKCk9PntvW3NdPSEwLCFyW3NdLmxlbmd0aCYmaS5jb21wbGV0ZSgpfSkpO3JldHVybigpPT57cj1vPW51bGx9fSk6SnJ9KHRoaXMud2ViYXBwRGF0YVNvdXJjZS5mZXRjaFBsdWdpbnNMaXN0aW5nKGEpLHRoaXMuZmV0Y2hFbnZpcm9ubWVudCgpKS5waXBlKE4oKFtsXSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGRmKHtwbHVnaW5zOmx9KSl9KSx6cihsPT4odGhpcy5zdG9yZS5kaXNwYXRjaChzdihsIGluc3RhbmNlb2Ygb3Y/e2ZhaWx1cmVDb2RlOmwuZmFpbHVyZUNvZGV9OntmYWlsdXJlQ29kZTpqYS5VTktOT1dOfSkpLEpyKSkpKSk7cmV0dXJuIHRuKG8sdGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoTigoWyxhXSk9PmEpLEpuKGE9PmEhPT13bi5DT01QQVJFX0VYUEVSSU1FTlQ/SHQoW10pOnRoaXMuc3RvcmUuc2VsZWN0KHphKS5waXBlKFluKChsLGMpPT57bGV0IGQ9T2JqZWN0LmVudHJpZXMobCksdT1uZXcgTWFwKE9iamVjdC5lbnRyaWVzKGMpKTtpZihkLmxlbmd0aCE9PXUuc2l6ZSlyZXR1cm4hMTtmb3IobGV0W3AsZl1vZiBkKWlmKCF1LmdldChwKXx8dS5nZXQocCkuYWxpYXNUZXh0IT09Zi5hbGlhc1RleHR8fHUuZ2V0KHApLmFsaWFzTnVtYmVyIT09Zi5hbGlhc051bWJlcilyZXR1cm4hMTtyZXR1cm4hMH0pLFNhKDApLGFjKDUwMCx2b2lkIDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KSkpLEJ0KHRoaXMuc3RvcmUuc2VsZWN0KEhhKSx0aGlzLnN0b3JlLnNlbGVjdChFNikpLGtlKChbLGEsbF0pPT5ENi5oYXMoYSkmJmwuc3RhdGUhPT1UZS5MT0FESU5HKSxOdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gobVMoKSl9KSxKbigoKT0+dGhpcy5yZWZyZXNoUG9seW1lclJ1bnMoKSksTnQoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGhTKCkpfSksenIoKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKGdTKCkpLEpyKSkpKX0se2Rpc3BhdGNoOiExfSksdGhpcy5kaXNwYXRjaENoYW5nZVBsdWdpbiQ9YXIoKCk9PnRuKHRoaXMub25EYXNoYm9hcmRMb2FkJCx0aGlzLmFjdGlvbnMkLnBpcGUoZWkoZGYpKSkucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChXbykpLE4oKFssb10pPT5vKSxZbigpLGtlKG89Pm51bGwhPT1vKSxZdCgxKSxOdChvPT57dGhpcy5zdG9yZS5kaXNwYXRjaCh3Yyh7cGx1Z2luOm99KSl9KSkse2Rpc3BhdGNoOiExfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoeG8pLGsoQWUpLGsodVMpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxDRj1uZXcgaWUoIkNvcmUgRmVhdHVyZSBDb25maWciKTtmdW5jdGlvbiBBNihuKXtyZXR1cm57aW5pdGlhbFN0YXRlOnsuLi5sdixhY3RpdmVQbHVnaW46bi5nZXRQbHVnaW5JZCgpfHxudWxsfX19ZnVuY3Rpb24gc2dlKCl7cmV0dXJuIHEoQ1Msbj0+KHtzaWRlQmFyV2lkdGhJblBlcmNlbnQ6bn0pKX12YXIgR2E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6Q0YsZGVwczpbX3VdLHVzZUZhY3Rvcnk6QTZ9XSxpbXBvcnRzOlt0by5mb3JGZWF0dXJlKFtJNl0pLFRyLmZvckZlYXR1cmUoImNvcmUiLFM2LENGKSx4NixLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKHNnZSldfSksbn0pKCksUjY9bmV3IGllKCJbQWxlcnRdIEFjdGlvbi1Uby1BbGVydCBQcm92aWRlciIpLFNjPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5wcm92aWRlcnM9bmV3IE1hcDtmb3IobGV0IGkgb2YgZXx8W10pZm9yKGxldCByIG9mIGkpe2lmKHRoaXMucHJvdmlkZXJzLmhhcyhyLmFjdGlvbkNyZWF0b3IudHlwZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCIke3IuYWN0aW9uQ3JlYXRvci50eXBlfSIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBhbGVydHMuIE11bHRpcGxlIGFsZXJ0cyBmb3IgdGhlIHNhbWUgYWN0aW9uIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChyLmFjdGlvbkNyZWF0b3IudHlwZSxyLmFsZXJ0RnJvbUFjdGlvbil9fWdldEFsZXJ0RnJvbUFjdGlvbihlKXtsZXQgaT10aGlzLnByb3ZpZGVycy5nZXQoZS50eXBlKTtyZXR1cm4gaT9pKGUpOm51bGx9c3RhdGljIHJlZ2lzdGVyQWxlcnRBY3Rpb25zKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6UjYsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKFI2LDgpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksTVM9X2UoIltSdW5zXSBGZXRjaCBSdW5zIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHl1PV9lKCJbUnVuc10gRmV0Y2ggUnVucyBTdWNjZWVkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCaD1fZSgiW1J1bnNdIEZldGNoIFJ1bnMgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY3Y9X2UoIltSdW5zXSBSdW4gU2VsZWN0aW9uIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3Uz1fZSgiW1J1bnNdIFNpbmdsZSBSdW4gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkdj1fZSgiW1J1bnNdIFJ1biBQYWdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU1M9X2UoIltSdW5zXSBSdW4gU2VsZWN0b3IgUGFnaW5hdGlvbiBPcHRpb24gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVTPV9lKCJbUnVuc10gUnVuIFNlbGVjdG9yIFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHV2PV9lKCJbUnVuc10gUnVuIFNlbGVjdG9yIFJlZ2V4IEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVFM9X2UoIltSdW5zXSBSdW4gQ29sb3IgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFZoPV9lKCJbUnVuc10gUnVuIFRhYmxlIFNob3duIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSGg9X2UoIltSdW5zXSBSdW4gR3JvdXAgQnkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLERTPV9lKCJbUnVuc10gUnVucyBUYWJsZSBIZWFkZXIgQWRkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6aD1fZSgiW1J1bnNdIFJ1bnMgVGFibGUgSGVhZGVyIFJlbW92ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJUz1fZSgiW1J1bnNdIFJ1bnMgVGFibGUgSGVhZGVyIE9yZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBUz1fZSgiW1J1bnNdIFJ1bnMgVGFibGUgU29ydGluZyBJbmZvIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxodD0oKCk9PntyZXR1cm4obj1odHx8KGh0PXt9KSkuQ09MT1I9IkNPTE9SIixuLlJFTEFUSVZFX1RJTUU9IlJFTEFUSVZFX1RJTUUiLG4uUlVOPSJSVU4iLG4uU1RFUD0iU1RFUCIsbi5FWFBFUklNRU5UPSJFWFBFUklNRU5UIixuLlRJTUU9IlRJTUUiLG4uVkFMVUU9IlZBTFVFIixuLlNNT09USEVEPSJTTU9PVEhFRCIsbi5WQUxVRV9DSEFOR0U9IlZBTFVFX0NIQU5HRSIsbi5TVEFSVF9TVEVQPSJTVEFSVF9TVEVQIixuLkVORF9TVEVQPSJFTkRfU1RFUCIsbi5TVEFSVF9WQUxVRT0iU1RBUlRfVkFMVUUiLG4uRU5EX1ZBTFVFPSJFTkRfVkFMVUUiLG4uTUlOX1ZBTFVFPSJNSU5fVkFMVUUiLG4uTUFYX1ZBTFVFPSJNQVhfVkFMVUUiLG4uUEVSQ0VOVEFHRV9DSEFOR0U9IlBFUkNFTlRBR0VfQ0hBTkdFIixuLlNURVBfQVRfTUFYPSJTVEVQX0FUX01BWCIsbi5TVEVQX0FUX01JTj0iU1RFUF9BVF9NSU4iLG4uTUVBTj0iTUVBTiIsbi5SQVdfQ0hBTkdFPSJSQVdfQ0hBTkdFIixuLkhQQVJBTT0iSFBBUkFNIixuLk1FVFJJQz0iTUVUUklDIixuLkNVU1RPTT0iQ1VTVE9NIixodDt2YXIgbn0pKCksZ249KCgpPT57cmV0dXJuKG49Z258fChnbj17fSkpW24uRElTQ1JFVEU9MF09IkRJU0NSRVRFIixuW24uSU5URVJWQUw9MV09IklOVEVSVkFMIixnbjt2YXIgbn0pKCksaW89KCgpPT57cmV0dXJuKG49aW98fChpbz17fSkpW24uQVNDRU5ESU5HPTBdPSJBU0NFTkRJTkciLG5bbi5ERVNDRU5ESU5HPTFdPSJERVNDRU5ESU5HIixpbzt2YXIgbn0pKCkscm89KCgpPT57cmV0dXJuKG49cm98fChybz17fSkpW24uU0lOR0xFPTBdPSJTSU5HTEUiLG5bbi5SQU5HRT0xXT0iUkFOR0UiLHJvO3ZhciBufSkoKSxOcz0oKCk9PntyZXR1cm4obj1Oc3x8KE5zPXt9KSkuU1RBVFVTX1VOS05PV049IlNUQVRVU19VTktOT1dOIixuLlNUQVRVU19TVUNDRVNTPSJTVEFUVVNfU1VDQ0VTUyIsbi5TVEFUVVNfRkFJTFVSRT0iU1RBVFVTX0ZBSUxVUkUiLG4uU1RBVFVTX1JVTk5JTkc9IlNUQVRVU19SVU5OSU5HIixOczt2YXIgbn0pKCksUlM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksRWM9e307RkEoRWMse2Rhc2hib2FyZEhwYXJhbUZpbHRlckFkZGVkOigpPT5ERixkYXNoYm9hcmRIcGFyYW1GaWx0ZXJSZW1vdmVkOigpPT5mdixkYXNoYm9hcmRNZXRyaWNGaWx0ZXJBZGRlZDooKT0+SUYsZGFzaGJvYXJkTWV0cmljRmlsdGVyUmVtb3ZlZDooKT0+bXYsaHBhcmFtc0Rpc2NyZXRlSHBhcmFtRmlsdGVyQ2hhbmdlZDooKT0+U0YsaHBhcmFtc0ZldGNoU2Vzc2lvbkdyb3Vwc1N1Y2NlZWRlZDooKT0+cHYsaHBhcmFtc0ludGVydmFsSHBhcmFtRmlsdGVyQ2hhbmdlZDooKT0+RUYsaHBhcmFtc01ldHJpY0ZpbHRlckNoYW5nZWQ6KCk9PlRGfSk7dmFyIFNGPV9lKCJbSHBhcmFtc10gSHBhcmFtcyBEaXNjcmV0ZSBIcGFyYW0gRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxFRj1fZSgiW0hwYXJhbXNdIEhwYXJhbXMgSW50ZXJ2YWwgSHBhcmFtIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVEY9X2UoIltIcGFyYW1zXSBIcGFyYW1zIE1ldHJpYyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHB2PV9lKCJbSHBhcmFtc10gSHBhcmFtcyBGZXRjaCBTZXNzaW9uIEdyb3VwcyBTdWNjZWVkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxERj1fZSgiW0hwYXJhbXNdIERhc2hib2FyZCBIcGFyYW0gRmlsdGVyIEFkZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUY9X2UoIltIcGFyYW1zXSBEYXNoYm9hcmQgTWV0cmljIEZpbHRlciBBZGRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGZ2PV9lKCJbSHBhcmFtc10gRGFzaGJvYXJkIEhwYXJhbSBGaWx0ZXIgUmVtb3ZlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG12PV9lKCJbSHBhcmFtc10gRGFzaGJvYXJkIE1ldHJpYyBGaWx0ZXIgUmVtb3ZlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pO2Z1bmN0aW9uIGZmKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeShbLi4ubl0uc29ydCgpKX1mdW5jdGlvbiBodihuKXtsZXQgdD1uZXcgTWFwLGU9bmV3IE1hcCxpPW5ldyBNYXA7Zm9yKGxldCByIG9mIG4pZm9yKGxldFtvLHNdb2YgcilpZihzLnR5cGU9PT1nbi5ESVNDUkVURSl7bGV0e3Bvc3NpYmxlVmFsdWVzOmEsdmFsdWVzOmx9PWUuZ2V0KG8pfHx7cG9zc2libGVWYWx1ZXM6bmV3IFNldCx2YWx1ZXM6bmV3IFNldH07Zm9yKGxldCBjIG9mIHMuZmlsdGVyVmFsdWVzKWwuYWRkKGMpO2ZvcihsZXQgYyBvZiBzLnBvc3NpYmxlVmFsdWVzKWEuYWRkKGMpO2Uuc2V0KG8se3Bvc3NpYmxlVmFsdWVzOmEsdmFsdWVzOmx9KX1lbHNle2xldCBhPWkuZ2V0KG8pO2kuc2V0KG8se2ZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4ocy5maWx0ZXJMb3dlclZhbHVlLGE/LmZpbHRlckxvd2VyVmFsdWU/PzEvMCksZmlsdGVyVXBwZXJWYWx1ZTpNYXRoLm1heChzLmZpbHRlclVwcGVyVmFsdWUsYT8uZmlsdGVyVXBwZXJWYWx1ZT8/LTEvMCksbWluVmFsdWU6TWF0aC5taW4ocy5taW5WYWx1ZSxhPy5taW5WYWx1ZT8/MS8wKSxtYXhWYWx1ZTpNYXRoLm1heChzLm1heFZhbHVlLGE/Lm1heFZhbHVlPz8tMS8wKX0pfWZvcihsZXRbcix7dmFsdWVzOm8scG9zc2libGVWYWx1ZXM6c31db2YgZSl0LnNldChyLHt0eXBlOmduLkRJU0NSRVRFLGluY2x1ZGVVbmRlZmluZWQ6ITAscG9zc2libGVWYWx1ZXM6Wy4uLnNdLGZpbHRlclZhbHVlczpbLi4ub119KTtmb3IobGV0W3Ise21pblZhbHVlOm8sbWF4VmFsdWU6cyxmaWx0ZXJMb3dlclZhbHVlOmEsZmlsdGVyVXBwZXJWYWx1ZTpsfV1vZiBpKXtpZih0LmhhcyhyKSl7bGV0IGM9dC5nZXQocik7aWYoYy50eXBlPT09Z24uRElTQ1JFVEUmJmMucG9zc2libGVWYWx1ZXMuc29tZShkPT5kKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IGNvbWJpbmUgaHBhcmFtLCAke3J9LCBhcyBpdCBpcyBvZiBtaXhlZCB0eXBlcy5gKX10LnNldChyLHt0eXBlOmduLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6byxtYXhWYWx1ZTpzLGZpbHRlckxvd2VyVmFsdWU6YSxmaWx0ZXJVcHBlclZhbHVlOmx9KX1yZXR1cm4gdH1mdW5jdGlvbiBQUyhuKXtsZXQgdD1uZXcgTWFwO2ZvcihsZXQgZSBvZiBuKWZvcihsZXRbaSxyXW9mIGUpe2xldCBvPXQuZ2V0KGkpO3Quc2V0KGkse3R5cGU6Z24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCwuLi5vLG1pblZhbHVlOk1hdGgubWluKHIubWluVmFsdWUsbz8ubWluVmFsdWU/PzEvMCksbWF4VmFsdWU6TWF0aC5tYXgoci5tYXhWYWx1ZSxvPy5tYXhWYWx1ZT8/LTEvMCksZmlsdGVyTG93ZXJWYWx1ZTpNYXRoLm1pbihyLmZpbHRlckxvd2VyVmFsdWUsbz8uZmlsdGVyTG93ZXJWYWx1ZT8/MS8wKSxmaWx0ZXJVcHBlclZhbHVlOk1hdGgubWF4KHIuZmlsdGVyVXBwZXJWYWx1ZSxvPy5maWx0ZXJVcHBlclZhbHVlPz8tMS8wKX0pfXJldHVybiB0fWZ1bmN0aW9uIEY2KG4pe3JldHVybiBuLmRvbWFpbi50eXBlPT09Z24uRElTQ1JFVEU/e3R5cGU6Z24uRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDohMCxwb3NzaWJsZVZhbHVlczpuLmRvbWFpbi52YWx1ZXMsZmlsdGVyVmFsdWVzOm4uZG9tYWluLnZhbHVlc306e3R5cGU6Z24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpuLmRvbWFpbi5taW5WYWx1ZSxtYXhWYWx1ZTpuLmRvbWFpbi5tYXhWYWx1ZSxmaWx0ZXJMb3dlclZhbHVlOm4uZG9tYWluLm1pblZhbHVlLGZpbHRlclVwcGVyVmFsdWU6bi5kb21haW4ubWF4VmFsdWV9fXZhciBwZ2U9YnIoe3NwZWNzOnt9LGZpbHRlcnM6e30sZGFzaGJvYXJkU3BlY3M6e2hwYXJhbXM6W10sbWV0cmljczpbXX0sZGFzaGJvYXJkU2Vzc2lvbkdyb3VwczpbXSxkYXNoYm9hcmRGaWx0ZXJzOntocGFyYW1zOm5ldyBNYXAsbWV0cmljczpuZXcgTWFwfX0seWUoU0YsKG4sdCk9PntsZXR7ZXhwZXJpbWVudElkczplLGhwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99PXQscz1mZihlKSxhPW4uZmlsdGVyc1tzXT8/e2hwYXJhbXM6bmV3IE1hcH0sbD1hLmhwYXJhbXMuZ2V0KGkpO2lmKGwmJmwudHlwZSE9PWduLkRJU0NSRVRFKXRocm93IG5ldyBSYW5nZUVycm9yKGBOZXcgZGlzY3JldGUgZmlsdGVyIG9mICR7aX0gY29uZmxpY3RzIGV4aXN0aW5nIGZpbHRlciBvZiBgK2duW2wudHlwZV0pO2xldCBjPWh2KGUuZmlsdGVyKGY9PkJvb2xlYW4obi5zcGVjc1tmXSkpLm1hcChmPT5uLnNwZWNzW2ZdLmhwYXJhbS5kZWZhdWx0RmlsdGVycykpLmdldChpKTtpZighYyl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgaHBhcmFtLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtlLmpvaW4oIiwgIil9YCk7aWYoYy50eXBlIT09Z24uRElTQ1JFVEUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0ICR7aX0gd2hlbiBkZWZhdWx0IGZpbHRlciBpcyBub3Qgb2YgZGlzY3JldGUgdHlwZS5gKTtsZXQgZD1uZXcgU2V0KGMucG9zc2libGVWYWx1ZXMpLHU9Wy4uLnJdLmZpbHRlcihmPT4hZC5oYXMoZikpO2lmKHUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTmV3IGZpbHRlciBmb3IgJHtpfSBoYXMgbW9yZSB0aGFuIG9uZSB2YWx1ZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBzcGVjLiBCYWQgdmFsdWVzOiAke3Uuam9pbigiLCAiKX1gKTtsZXQgcD1uZXcgTWFwKGEuaHBhcmFtcyk7cmV0dXJuIHAuc2V0KGksey4uLmwsdHlwZTpnbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOm8scG9zc2libGVWYWx1ZXM6Wy4uLmRdLGZpbHRlclZhbHVlczpyfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFtzXTp7Li4uYSxocGFyYW1zOnB9fX19KSx5ZShFRiwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsaHBhcmFtTmFtZTppLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm8saW5jbHVkZVVuZGVmaW5lZDpzfT10LGE9ZmYoZSksbD1uLmZpbHRlcnNbYV0/P3ttZXRyaWNzOm5ldyBNYXAsaHBhcmFtczpuZXcgTWFwfSxjPWwuaHBhcmFtcy5nZXQoaSk7aWYoYyYmYy50eXBlIT09Z24uSU5URVJWQUwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBpbnRlcnZhbCBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArZ25bYy50eXBlXSk7bGV0IGQ9aHYoZS5maWx0ZXIocD0+Qm9vbGVhbihuLnNwZWNzW3BdKSkubWFwKHA9Pm4uc3BlY3NbcF0uaHBhcmFtLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFkKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYSwgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7ZS5qb2luKCIsICIpfWApO2lmKGQudHlwZSE9PWduLklOVEVSVkFMKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCAke2l9IHdoZW4gZGVmYXVsdCBmaWx0ZXIgaXMgbm90IG9mIGludGVydmFsIHR5cGUuYCk7bGV0IHU9bmV3IE1hcChsLmhwYXJhbXMpO3JldHVybiB1LnNldChpLHsuLi5jLHR5cGU6Z24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDpzLG1pblZhbHVlOmQubWluVmFsdWUsbWF4VmFsdWU6ZC5tYXhWYWx1ZSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFthXTp7Li4ubCxocGFyYW1zOnV9fX19KSx5ZShURiwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsbWV0cmljVGFnOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9PXQsYT1mZihlKSxsPW4uZmlsdGVyc1thXT8/e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGM9UFMoZS5maWx0ZXIocD0+Qm9vbGVhbihuLnNwZWNzW3BdKSkubWFwKHA9Pm4uc3BlY3NbcF0ubWV0cmljLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFjKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBtZXRyaWMsICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke2Uuam9pbigiLCAiKX1gKTtsZXQgZD1sLm1ldHJpY3MuZ2V0KGkpLHU9bmV3IE1hcChsLm1ldHJpY3MpO3JldHVybiB1LnNldChpLHsuLi5kLHR5cGU6Z24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDpzLG1pblZhbHVlOmMubWluVmFsdWUsbWF4VmFsdWU6Yy5tYXhWYWx1ZSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFthXTp7Li4ubCxtZXRyaWNzOnV9fX19KSx5ZSh5dSwobix0KT0+e2lmKDA9PT1PYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLnNwZWNzfSxpPW5ldyBNYXAscj1uZXcgU2V0O2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkpe2xldCBzPW5ldyBNYXAsYT1uZXcgTWFwLGw9bmV3IE1hcCxjPW5ldyBNYXAse3J1bnM6ZCxtZXRhZGF0YTp1fT10Lm5ld1J1bnNBbmRNZXRhZGF0YVtvXTtmb3IobGV0IHAgb2YgZCl7bGV0IGY9dS5ydW5Ub0hwYXJhbXNBbmRNZXRyaWNzW3AuaWRdO2lmKGYpZm9yKGxldCBtIG9mIGYubWV0cmljcyl7bGV0IGI9aS5nZXQobS50YWcpO2kuc2V0KG0udGFnLHttaW46Yj9NYXRoLm1pbihiLm1pbixtLnZhbHVlKTptLnZhbHVlLG1heDpiP01hdGgubWF4KGIubWF4LG0udmFsdWUpOm0udmFsdWV9KX19Zm9yKGxldHtuYW1lOnAsZG9tYWluOmZ9b2YgdS5ocGFyYW1TcGVjcylpZihmLnR5cGU9PT1nbi5ESVNDUkVURSl7bGV0IG09bC5nZXQocCl8fG5ldyBTZXQ7Zm9yKGxldCBiIG9mIGYudmFsdWVzKW0uYWRkKGIpO2wuc2V0KHAsbSl9ZWxzZXtsZXQgbT1jLmdldChwKTtjLnNldChwLHttaW5WYWx1ZTptP01hdGgubWluKGYubWluVmFsdWUsbS5taW5WYWx1ZSk6Zi5taW5WYWx1ZSxtYXhWYWx1ZTptP01hdGgubWF4KGYubWF4VmFsdWUsbS5tYXhWYWx1ZSk6Zi5tYXhWYWx1ZX0pfWZvcihsZXQgcCBvZiB1Lm1ldHJpY1NwZWNzKXIuYWRkKHAudGFnKTtmb3IobGV0W3AsZl1vZiBsKXMuc2V0KHAse3R5cGU6Z24uRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDohMCxwb3NzaWJsZVZhbHVlczpbLi4uZl0sZmlsdGVyVmFsdWVzOlsuLi5mXX0pO2ZvcihsZXRbcCx7bWluVmFsdWU6ZixtYXhWYWx1ZTptfV1vZiBjKXMuc2V0KHAse3R5cGU6Z24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpmLG1heFZhbHVlOm0sZmlsdGVyTG93ZXJWYWx1ZTpmLGZpbHRlclVwcGVyVmFsdWU6bX0pO2ZvcihsZXQgcCBvZiByKXtsZXQgZj1pLmdldChwKSxtPWY/Lm1pbj8/MCxiPWY/Lm1heD8/MDthLnNldChwLHt0eXBlOmduLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6bSxtYXhWYWx1ZTpiLGZpbHRlckxvd2VyVmFsdWU6bSxmaWx0ZXJVcHBlclZhbHVlOmJ9KX1lW29dPXtocGFyYW06ey4uLmVbb10/LmhwYXJhbSxzcGVjczp1LmhwYXJhbVNwZWNzLGRlZmF1bHRGaWx0ZXJzOnN9LG1ldHJpYzp7Li4uZVtvXT8ubWV0cmljLHNwZWNzOnUubWV0cmljU3BlY3MsZGVmYXVsdEZpbHRlcnM6YX19fXJldHVybnsuLi5uLHNwZWNzOmV9fSkseWUocHYsKG4sdCk9Pih7Li4ubixkYXNoYm9hcmRTcGVjczp0LmhwYXJhbXNBbmRNZXRyaWNzU3BlY3MsZGFzaGJvYXJkU2Vzc2lvbkdyb3Vwczp0LnNlc3Npb25Hcm91cHN9KSkseWUoREYsKG4sdCk9PntsZXQgZT1uZXcgTWFwKG4uZGFzaGJvYXJkRmlsdGVycy5ocGFyYW1zKTtyZXR1cm4gZS5zZXQodC5uYW1lLHQuZmlsdGVyKSx7Li4ubixkYXNoYm9hcmRGaWx0ZXJzOnsuLi5uLmRhc2hib2FyZEZpbHRlcnMsaHBhcmFtczplfX19KSx5ZShJRiwobix0KT0+e2xldCBlPW5ldyBNYXAobi5kYXNoYm9hcmRGaWx0ZXJzLm1ldHJpY3MpO3JldHVybiBlLnNldCh0Lm5hbWUsdC5maWx0ZXIpLHsuLi5uLGRhc2hib2FyZEZpbHRlcnM6ey4uLm4uZGFzaGJvYXJkRmlsdGVycyxtZXRyaWNzOmV9fX0pLHllKGZ2LChuLHQpPT57bGV0IGU9bmV3IE1hcChuLmRhc2hib2FyZEZpbHRlcnMuaHBhcmFtcyk7cmV0dXJuIGUuZGVsZXRlKHQubmFtZSksey4uLm4sZGFzaGJvYXJkRmlsdGVyczp7Li4ubi5kYXNoYm9hcmRGaWx0ZXJzLGhwYXJhbXM6ZX19fSkseWUobXYsKG4sdCk9PntsZXQgZT1uZXcgTWFwKG4uZGFzaGJvYXJkRmlsdGVycy5tZXRyaWNzKTtyZXR1cm4gZS5kZWxldGUodC5uYW1lKSx7Li4ubixkYXNoYm9hcmRGaWx0ZXJzOnsuLi5uLmRhc2hib2FyZEZpbHRlcnMsbWV0cmljczplfX19KSk7ZnVuY3Rpb24gTjYobix0KXtyZXR1cm4gcGdlKG4sdCl9dmFyIE9TPSJocGFyYW1zIixMNj0iZGF0YS9wbHVnaW4vaHBhcmFtcyI7ZnVuY3Rpb24gaGdlKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gQm9vbGVhbihuLmRvbWFpbkRpc2NyZXRlKX0obik/e3R5cGU6Z24uRElTQ1JFVEUsdmFsdWVzOm4uZG9tYWluRGlzY3JldGV9OmZ1bmN0aW9uKG4pe3JldHVybiBCb29sZWFuKG4uZG9tYWluSW50ZXJ2YWwpfShuKT97Li4ubi5kb21haW5JbnRlcnZhbCx0eXBlOmduLklOVEVSVkFMfTp7dmFsdWVzOltdLHR5cGU6Z24uRElTQ1JFVEV9fXZhciBrUz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lfWdldFByZWZpeChlKXtyZXR1cm4gZS5sZW5ndGg+MT8iY29tcGFyZSI6ImV4cGVyaW1lbnQifWZvcm1hdEV4cGVyaW1lbnRJZHMoZSl7cmV0dXJuIDE9PT1lLmxlbmd0aD9lWzBdOmUubWFwKChpLHIpPT5gJHtyfToke2l9YCkuam9pbigiLCIpfWZldGNoRXhwZXJpbWVudEluZm8oZSl7bGV0IGk9dGhpcy5mb3JtYXRFeHBlcmltZW50SWRzKGUpO3JldHVybiB0aGlzLmh0dHAucG9zdChgLyR7dGhpcy5nZXRQcmVmaXgoZSl9LyR7aX0vJHtMNn0vZXhwZXJpbWVudGAse2V4cGVyaW1lbnROYW1lOml9LHt9LCJyZXF1ZXN0IikucGlwZShOKHI9Pih7aHBhcmFtczpyLmhwYXJhbUluZm9zLm1hcChvPT57bGV0IHM9ey4uLm8sZG9tYWluOmhnZShvKX07cmV0dXJuIGRlbGV0ZSBzLmRvbWFpbkludGVydmFsLGRlbGV0ZSBzLmRvbWFpbkRpc2NyZXRlLHN9KSxtZXRyaWNzOnIubWV0cmljSW5mb3MubWFwKG89Pih7Li4ubyx0YWc6by5uYW1lLnRhZ30pKX0pKSl9ZmV0Y2hTZXNzaW9uR3JvdXBzKGUsaSl7bGV0IHI9dGhpcy5mb3JtYXRFeHBlcmltZW50SWRzKGUpLG89W107Zm9yKGxldCBhIG9mIGkuaHBhcmFtcylvLnB1c2goe2hwYXJhbTphLm5hbWV9KTtmb3IobGV0IGEgb2YgaS5tZXRyaWNzKW8ucHVzaCh7bWV0cmljOmEubmFtZX0pO2xldCBzPXtleHBlcmltZW50TmFtZTpyLGFsbG93ZWRTdGF0dXNlczpbTnMuU1RBVFVTX0ZBSUxVUkUsTnMuU1RBVFVTX1JVTk5JTkcsTnMuU1RBVFVTX1NVQ0NFU1MsTnMuU1RBVFVTX1VOS05PV05dLGNvbFBhcmFtczpvLHN0YXJ0SW5kZXg6MCxzbGljZVNpemU6MWU2fTtyZXR1cm4gdGhpcy5odHRwLnBvc3QoYC8ke3RoaXMuZ2V0UHJlZml4KGUpfS8ke3J9LyR7TDZ9L3Nlc3Npb25fZ3JvdXBzYCxzLHt9LCJyZXF1ZXN0IikucGlwZShOKGE9PmEuc2Vzc2lvbkdyb3Vwcy5tYXAobD0+KGwuc2Vzc2lvbnM9bC5zZXNzaW9ucy5tYXAoYz0+e2lmKGUubGVuZ3RoPjEpe2xldFssLi4uZF09Yy5uYW1lLnNwbGl0KCIgIiksW3UsLi4ucF09ZC5qb2luKCIgIikuc3BsaXQoIi8iKTtjLm5hbWU9W2VbcGFyc2VJbnQodSldLC4uLnBdLmpvaW4oIi8iKX1lbHNlIGMubmFtZT1bZVswXSxjLm5hbWVdLmpvaW4oIi8iKTtyZXR1cm4gY30pLGwpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKFVhKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQjY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLnJ1blRhYmxlU2hvd24kPXRoaXMuYWN0aW9ucyQucGlwZShlaShWaCksTigoe2V4cGVyaW1lbnRJZHM6b30pPT5vKSxZbigobyxzKT0+by5qb2luKCIiKT09PXMuam9pbigiIikpKSx0aGlzLm5hdmlnYXRlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKGVpKFBzKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChscikpLGtlKChbLG9dKT0+Qm9vbGVhbihvKSksTigoWyxvXSk9Pm8pLFluKChvLHMpPT5vLmpvaW4oIiIpPT09cy5qb2luKCIiKSkpLHRoaXMubG9hZEhwYXJhbXNPblJlbG9hZCQ9dGhpcy5hY3Rpb25zJC5waXBlKGVpKGNzLEZzKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChscikpLGtlKChbLG9dKT0+Qm9vbGVhbihvKSksTigoWyxvXSk9Pm8pKSx0aGlzLmxvYWRIcGFyYW1zRGF0YSQ9YXIoKCk9PnRuKHRoaXMubmF2aWdhdGVkJCx0aGlzLnJ1blRhYmxlU2hvd24kLHRoaXMubG9hZEhwYXJhbXNPblJlbG9hZCQpLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QobWQpLHRoaXMuc3RvcmUuc2VsZWN0KE5vKSksa2UoKFssb10pPT5vKSxrZSgoWywsb10pPT5vPy5yb3V0ZUtpbmQ9PT13bi5FWFBFUklNRU5UfHxvPy5yb3V0ZUtpbmQ9PT13bi5DT01QQVJFX0VYUEVSSU1FTlQpLGFjKDEwKSxKbigoW29dKT0+dGhpcy5sb2FkSHBhcmFtc0ZvckV4cGVyaW1lbnRzKG8pKSxOKG89PnB2KG8pKSkpfWxvYWRIcGFyYW1zRm9yRXhwZXJpbWVudHMoZSl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4cGVyaW1lbnRJbmZvKGUpLnBpcGUoSm4oaT0+dGhpcy5kYXRhU291cmNlLmZldGNoU2Vzc2lvbkdyb3VwcyhlLGkpLnBpcGUoenIocj0+ciBpbnN0YW5jZW9mIEFsJiY0MDA9PT1yLnN0YXR1cz9IdChbXSk6ZWEoKCk9PnIpKSxOKHI9Pih7aHBhcmFtc0FuZE1ldHJpY3NTcGVjczppLHNlc3Npb25Hcm91cHM6cn0pKSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh4byksayhBZSksayhrUykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFY2PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W2tTXSxpbXBvcnRzOltUci5mb3JGZWF0dXJlKE9TLE42KSx0by5mb3JGZWF0dXJlKFtCNl0pXX0pLG59KSgpLEZTPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltWNl19KSxufSkoKSxINj0iZGF0YS9wbHVnaW4vaHBhcmFtcyI7ZnVuY3Rpb24gX2dlKG4sdCl7cmV0dXJuYCR7dH0vJHtufWB9ZnVuY3Rpb24gYmdlKG4pe2xldCB0O3JldHVybiB0PWZ1bmN0aW9uKG4pe3JldHVybiBuLmhhc093blByb3BlcnR5KCJkb21haW5EaXNjcmV0ZSIpfShuKT97dHlwZTpnbi5ESVNDUkVURSx2YWx1ZXM6bi5kb21haW5EaXNjcmV0ZX06ZnVuY3Rpb24obil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImRvbWFpbkludGVydmFsIil9KG4pP3suLi5uLmRvbWFpbkludGVydmFsLHR5cGU6Z24uSU5URVJWQUx9Ont0eXBlOmduLklOVEVSVkFMLG1pblZhbHVlOi0xLzAsbWF4VmFsdWU6MS8wfSx7ZGVzY3JpcHRpb246bi5kZXNjcmlwdGlvbixkaXNwbGF5TmFtZTpuLmRpc3BsYXlOYW1lLG5hbWU6bi5uYW1lLHR5cGU6bi50eXBlLGRvbWFpbjp0fX1mdW5jdGlvbiB2Z2Uobil7cmV0dXJuey4uLm4sdGFnOm4ubmFtZS50YWd9fXZhciB6Nj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lfWZldGNoUnVucyhlKXtyZXR1cm4gdGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtlfS9kYXRhL3J1bnNgKS5waXBlKE4oaT0+aS5tYXAocj0+KHtpZDpfZ2UocixlKSxuYW1lOnIsc3RhcnRUaW1lOjB9KSkpKX1mZXRjaEhwYXJhbXNNZXRhZGF0YShlKXtyZXR1cm4gdGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7ZX0vJHtINn0vZXhwZXJpbWVudGAse2V4cGVyaW1lbnROYW1lOmV9LHt9LCJyZXF1ZXN0IikucGlwZShOKHI9PntsZXQgbz1bXTtmb3IobGV0IGEgb2Ygci5ocGFyYW1JbmZvcylvLnB1c2goe2hwYXJhbTphLm5hbWV9KTtmb3IobGV0IGEgb2Ygci5tZXRyaWNJbmZvcylvLnB1c2goe21ldHJpYzphLm5hbWV9KTtyZXR1cm57ZXhwZXJpbWVudEhwYXJhbXNJbmZvOnIsbGlzdFNlc3Npb25SZXF1ZXN0UGFyYW1zOntleHBlcmltZW50TmFtZTplLGFsbG93ZWRTdGF0dXNlczpbTnMuU1RBVFVTX0ZBSUxVUkUsTnMuU1RBVFVTX1JVTk5JTkcsTnMuU1RBVFVTX1NVQ0NFU1MsTnMuU1RBVFVTX1VOS05PV05dLGNvbFBhcmFtczpvLHN0YXJ0SW5kZXg6MCxzbGljZVNpemU6MWU2fX19KSxobigoe2V4cGVyaW1lbnRIcGFyYW1zSW5mbzpyLGxpc3RTZXNzaW9uUmVxdWVzdFBhcmFtczpvfSk9PnRoaXMuaHR0cC5wb3N0KGAvZXhwZXJpbWVudC8ke2V9LyR7SDZ9L3Nlc3Npb25fZ3JvdXBzYCxvLHt9LCJyZXF1ZXN0IikucGlwZShOKHM9Pih7ZXhwZXJpbWVudEhwYXJhbXNJbmZvOnIsc2Vzc2lvbkdyb3Vwc0xpc3Q6c30pKSkpLE4oKHtleHBlcmltZW50SHBhcmFtc0luZm86cixzZXNzaW9uR3JvdXBzTGlzdDpvfSk9PntsZXQgcz17fTtmb3IobGV0IGEgb2Ygby5zZXNzaW9uR3JvdXBzKXtsZXQgbD1PYmplY3QuZW50cmllcyhhLmhwYXJhbXMpLm1hcChjPT57bGV0W2QsdV09YztyZXR1cm57bmFtZTpkLHZhbHVlOnV9fSk7Zm9yKGxldCBjIG9mIGEuc2Vzc2lvbnMpZm9yKGxldCBkIG9mIGMubWV0cmljVmFsdWVzKXtsZXQgcD1gJHtlfS8ke2QubmFtZS5ncm91cD9gJHtjLm5hbWV9LyR7ZC5uYW1lLmdyb3VwfWA6Yy5uYW1lfWAsZj1zW3BdfHx7bWV0cmljczpbXSxocGFyYW1zOmx9O2YubWV0cmljcy5wdXNoKHt0YWc6ZC5uYW1lLnRhZyx0cmFpbmluZ1N0ZXA6ZC50cmFpbmluZ1N0ZXAsdmFsdWU6ZC52YWx1ZX0pLHNbcF09Zn19cmV0dXJue2hwYXJhbVNwZWNzOnIuaHBhcmFtSW5mb3MubWFwKGJnZSksbWV0cmljU3BlY3M6ci5tZXRyaWNJbmZvcy5tYXAodmdlKSxydW5Ub0hwYXJhbXNBbmRNZXRyaWNzOnN9fSksenIocj0+ciBpbnN0YW5jZW9mIEFsJiY0MDA9PT1yLnN0YXR1cz9IdCh7aHBhcmFtU3BlY3M6W10sbWV0cmljU3BlY3M6W10scnVuVG9IcGFyYW1zQW5kTWV0cmljczp7fX0pOmVhKHIpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoVWEpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxVNj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpSUyx1c2VDbGFzczp6Nn1dfSksbn0pKCksajY9cShFcigiYWxlcnRzIiksbj0+bi5sYXRlc3RBbGVydCksTFM9ImV4cGVyaW1lbnRzIixHNj1xKEVyKExTKSxuPT5uLmRhdGEpLEJTPXEoRzYsKG4sdCk9PntsZXR7ZXhwZXJpbWVudElkOmV9PXQ7cmV0dXJuIG4uZXhwZXJpbWVudE1hcFtlXXx8bnVsbH0pLFc2PXEoRzYsbHIsKG4sdCk9Pih0Pz9bXSkubWFwKGU9Pm4uZXhwZXJpbWVudE1hcFtlXSkuZmlsdGVyKEJvb2xlYW4pLnJlZHVjZSgoZSxpKT0+KGVbaS5pZF09aS5uYW1lLGUpLHt9KSk7ZnVuY3Rpb24gVlMobix0LGUpe3JldHVybiBuPHQ/dDpuPmU/ZTpufWZ1bmN0aW9uIFVoKG4sdCxlKXtsZXQgaT1WUyhuLnN0YXJ0LnN0ZXAsdCxlKSxyPW4uZW5kP1ZTKG4uZW5kLnN0ZXAsdCxlKTpudWxsO3JldHVybntzdGFydFN0ZXA6aSxlbmRTdGVwOnIsY2xpcHBlZDppIT09bi5zdGFydC5zdGVwfHxyIT09KG4uZW5kPy5zdGVwPz9udWxsKX19ZnVuY3Rpb24gSFMobix0KXtsZXQgZT10W24uaWRdO3JldHVybiBlJiZlLnZpc2libGUmJiFCb29sZWFuKGUuYXV4KX1mdW5jdGlvbiBBRihuLHQpe3JldHVybiB0P246e3N0YXJ0Om4uc3RhcnQsZW5kOm51bGx9fWZ1bmN0aW9uIFJGKG4sdCxlKXtyZXR1cm4gQUYoZnVuY3Rpb24obix7bWluU3RlcDp0LG1heFN0ZXA6ZX0pe3JldHVybntzdGFydDp7c3RlcDpWUyhuLnN0YXJ0LnN0ZXAsdCxlKX0sZW5kOm4uZW5kP3tzdGVwOlZTKG4uZW5kLnN0ZXAsdCxlKX06bnVsbH19KG4sdCksZSl9dmFyIHpuPSgoKT0+e3JldHVybihuPXpufHwoem49e30pKS5TQ0FMQVJTPSJzY2FsYXJzIixuLkhJU1RPR1JBTVM9Imhpc3RvZ3JhbXMiLG4uSU1BR0VTPSJpbWFnZXMiLHpuO3ZhciBufSkoKSxQaT0oKCk9PntyZXR1cm4obj1QaXx8KFBpPXt9KSkuU1RFUD0ic3RlcCIsbi5SRUxBVElWRT0icmVsYXRpdmUiLG4uV0FMTF9USU1FPSJ3YWxsdGltZSIsUGk7dmFyIG59KSgpLGd2PSJ0aW1lc2VyaWVzIjtmdW5jdGlvbiBaNihuKXtyZXR1cm4gbj09PXpuLlNDQUxBUlN8fG49PT16bi5ISVNUT0dSQU1TfHxuPT09em4uSU1BR0VTfXZhciB3Z2U9W3puLklNQUdFU107ZnVuY3Rpb24gdWEobil7cmV0dXJuIHdnZS5pbmNsdWRlcyhuKX12YXIgU2dlPVt6bi5ISVNUT0dSQU1TLHpuLklNQUdFU107ZnVuY3Rpb24gcGEobil7cmV0dXJuIFNnZS5pbmNsdWRlcyhuKX1mdW5jdGlvbiBQRihuKXtyZXR1cm4gcGEobi5wbHVnaW4pfXZhciBUYz1jbGFzc3t9O2Z1bmN0aW9uIFVTKG4pe3JldHVybiBuLmhhc093blByb3BlcnR5KCJlcnJvciIpfXZhciBPRj0iZGF0YS9wbHVnaW4vdGltZXNlcmllcyI7ZnVuY3Rpb24gSzYobil7bGV0IHQ9bi5pbmRleE9mKCIvIik7cmV0dXJue3J1bjpuLnN1YnN0cmluZyh0KzEpLGV4cGVyaW1lbnRJZDpuLnN1YnN0cmluZygwLHQpfX1mdW5jdGlvbiAkNihuLHQpe3JldHVybmAke3R9LyR7bn1gfWZ1bmN0aW9uIEo2KG4sdCl7bGV0e3J1blRvU2VyaWVzOmUscnVuOmksLi4ucn09bixvPXsuLi5yfTtyZXR1cm4gZSYmKG8ucnVuVG9TZXJpZXM9a0YoZSx0KSksaSYmKG8ucnVuSWQ9JDYoaSx0KSksb31mdW5jdGlvbiBrRihuLHQpe2xldCBlPXt9O2ZvcihsZXQgaSBpbiBuKW4uaGFzT3duUHJvcGVydHkoaSkmJihlWyQ2KGksdCldPW5baV0pO3JldHVybiBlfXZhciBlVz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5odHRwPWUsdGhpcy5zdG9yZT1pfWZldGNoVGFnTWV0YWRhdGEoZSl7bGV0IGk9ZS5tYXAobz0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtvfS8ke09GfS90YWdzYCkucGlwZShOKGE9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9e307Zm9yKGxldCBpIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcj1pO2lmKHVhKHIpKXtsZXR7dGFnUnVuU2FtcGxlZEluZm86bywuLi5zfT1uW3JdLGE9e307Zm9yKGxldCBsIGluIG8pby5oYXNPd25Qcm9wZXJ0eShsKSYmKGFbbF09a0Yob1tsXSx0KSk7ZVtyXT17Li4ucyx0YWdSdW5TYW1wbGVkSW5mbzphfX1lbHNle2xldHtydW5UYWdJbmZvOm8sLi4uc309bltyXTtlW3JdPXsuLi5zLHJ1blRhZ0luZm86a0Yobyx0KX19fXJldHVybiBlfShhLG8pKSkpLHI9dGhpcy5zdG9yZS5zZWxlY3QodnUpLnBpcGUoa2UoQm9vbGVhbiksWXQoMSksQnQodGhpcy5zdG9yZS5zZWxlY3QoY1MpKSxOKChbLG9dKT0+bykpO3JldHVybiBjbyhpKS5waXBlKEJ0KHIpLE4oKFtvLHNdKT0+e2xldCBhPWZ1bmN0aW9uKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBuKWZvcihsZXQgaSBvZiBPYmplY3QudmFsdWVzKHpuKSlpZih1YShpKSl7dFtpXT10W2ldfHx7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fTtsZXR7dGFnRGVzY3JpcHRpb25zOnIsdGFnUnVuU2FtcGxlZEluZm86b309ZVtpXTt0W2ldLnRhZ0Rlc2NyaXB0aW9ucz17Li4udFtpXS50YWdEZXNjcmlwdGlvbnMsLi4ucn07bGV0IHM9dFtpXS50YWdSdW5TYW1wbGVkSW5mbztmb3IobGV0IGEgb2YgT2JqZWN0LmtleXMobykpe3NbYV09c1thXXx8e307Zm9yKGxldCBsIG9mIE9iamVjdC5rZXlzKG9bYV0pKXNbYV1bbF09b1thXVtsXX19ZWxzZXt0W2ldPXRbaV18fHt0YWdEZXNjcmlwdGlvbnM6e30scnVuVGFnSW5mbzp7fX07bGV0e3RhZ0Rlc2NyaXB0aW9uczpyLHJ1blRhZ0luZm86b309ZVtpXTt0W2ldLnRhZ0Rlc2NyaXB0aW9ucz17Li4udFtpXS50YWdEZXNjcmlwdGlvbnMsLi4ucn0sdFtpXS5ydW5UYWdJbmZvPXsuLi50W2ldLnJ1blRhZ0luZm8sLi4ub319cmV0dXJuIHR9KG8pO3JldHVybiBzfHwoYVt6bi5JTUFHRVNdPXt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319KSxhfSkpfWZldGNoVGltZVNlcmllcyhlKXtsZXQgaT1lLm1hcChyPT57aWYocGEoci5wbHVnaW4pKXtsZXR7cnVuSWQ6bCwuLi5jfT1yLHtydW46ZCxleHBlcmltZW50SWQ6dX09SzYobCkscD17Li4uYyxydW46ZH07cmV0dXJuIHRoaXMuZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QocCx1KS5waXBlKE4oKHtyZXNwb25zZTpmLGV4cGVyaW1lbnRJZDptfSk9Pko2KGYsbSkpKX1sZXR7ZXhwZXJpbWVudElkczpvLC4uLnN9PXI7cmV0dXJuIGNvKG8ubWFwKGw9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QocyxsKSkpLnBpcGUoTihsPT57bGV0e3J1blRvU2VyaWVzOmMsZXJyb3I6ZCwuLi51fT1sWzBdLnJlc3BvbnNlLHA9dTtmb3IobGV0e3Jlc3BvbnNlOmYsZXhwZXJpbWVudElkOm19b2YgbCl7bGV0IGI9SjYoZixtKTtpZihwLmVycm9yKWNvbnRpbnVlO2xldHtydW5Ub1NlcmllczpNLGVycm9yOnl9PWI7aWYoeSlwLmVycm9yPXkscC5ydW5Ub1Nlcmllcz12b2lkIDA7ZWxzZXtwLnJ1blRvU2VyaWVzPXAucnVuVG9TZXJpZXN8fHt9O2ZvcihsZXQgeCBvZiBPYmplY3Qua2V5cyhNKSlwLnJ1blRvU2VyaWVzW3hdPU1beF19fXJldHVybiBwfSkpfSk7cmV0dXJuIGNvKGkpfWZldGNoVGltZVNlcmllc0JhY2tlbmRSZXF1ZXN0KGUsaSl7bGV0IHI9bmV3IEZvcm1EYXRhO3JldHVybiByLmFwcGVuZCgicmVxdWVzdHMiLEpTT04uc3RyaW5naWZ5KFtlXSkpLHRoaXMuaHR0cC5wb3N0KGAvZXhwZXJpbWVudC8ke2l9LyR7T0Z9L3RpbWVTZXJpZXNgLHIpLnBpcGUoTihvPT4oe3Jlc3BvbnNlOm9bMF0sZXhwZXJpbWVudElkOml9KSkpfWltYWdlVXJsKGUpe3JldHVybmAke09GfS9pbWFnZURhdGE/aW1hZ2VJZD0ke2V9YH1kb3dubG9hZFVybChlLGkscixvKXtsZXQgbCx7cnVuOnMsZXhwZXJpbWVudElkOmF9PUs2KHIpO2lmKGUhPT16bi5TQ0FMQVJTKXRocm93IG5ldyBFcnJvcihgTm90IGltcGxlbWVudGVkOiBkb3dubG9hZFVybCBmb3IgJHtlfSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0YCk7aWYobD0ic2NhbGFycy9zY2FsYXJzIiwhYSl0aHJvdyBuZXcgRXJyb3IoImV4cGVyaW1lbnRJZCBpcyBlbXB0eTsgaXQgaXMgcmVxdWlyZWQgdG8gZm9ybSBkb3dubG9hZFVybC4iKTtyZXR1cm5gL2V4cGVyaW1lbnQvJHthfS9kYXRhL3BsdWdpbi9zY2FsYXJzL3NjYWxhcnM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6aSxydW46cyxmb3JtYXQ6b30pfWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoVWEpLGsoQWUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxJZ2U9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSxqUz0oKCk9PntjbGFzcyBue2dldFBhcmFtcygpe3JldHVybiBJZ2V9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF92PSJ0Yl9mZWF0dXJlX2ZsYWdfc3RvcmFnZV9rZXkiLEZGPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5xdWVyeVBhcmFtcz1lfWdldEZlYXR1cmVzKGUsaSl7bGV0IHI9ZT90aGlzLmdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCk6e30sbz1mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKGUsW2kscl0pPT57bGV0IG89ZnVuY3Rpb24obix0KXtsZXQgZT1uLnF1ZXJ5UGFyYW1PdmVycmlkZTtpZighZXx8IXQuaGFzKGUpKXJldHVybiBudWxsO2xldCBpPXQuZ2V0KGUpO3JldHVybiBudWxsPT1pP251bGw6bi5wYXJzZVZhbHVlKGkpfShyLHQpO3JldHVybiBudWxsIT09byYmKGVbaV09byksZX0se30pfShpLHRoaXMucXVlcnlQYXJhbXMuZ2V0UGFyYW1zKCkpO3JldHVybnsuLi5yLC4uLk9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0aGlzLmdldFBlcnNpc3RlbnRGZWF0dXJlRmxhZ3MoKSkuZmlsdGVyKChbYV0pPT5pW2FdKSksLi4ub319cGVyc2lzdEZlYXR1cmVGbGFncyhlKXtsZXQgcj17Li4udGhpcy5nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCksLi4uZX07d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKF92LEpTT04uc3RyaW5naWZ5KHIpKX1yZXNldFBlcnNpc3RlZEZlYXR1cmVGbGFnKGUpe2xldCBpPXRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpO2lmKG51bGwhPWlbZV0pe2lmKGRlbGV0ZSBpW2VdLDA9PT1PYmplY3Qua2V5cyhpKS5sZW5ndGgpcmV0dXJuIHZvaWQgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKF92KTt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oX3YsSlNPTi5zdHJpbmdpZnkoaSkpfX1yZXNldEFsbFBlcnNpc3RlZEZlYXR1cmVGbGFncygpe3dpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShfdil9Z2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpe2xldCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShfdik7cmV0dXJuIG51bGw9PWU/e306SlNPTi5wYXJzZShlKX1nZXRQYXJ0aWFsRmVhdHVyZXNGcm9tTWVkaWFRdWVyeSgpe2xldCBlPXt9O3JldHVybiB3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXMmJihlLmRlZmF1bHRFbmFibGVEYXJrTW9kZT0hMCksZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhqUykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEdTPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGlXPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W0ZGLGpTLHtwcm92aWRlOkdTLHVzZUNsYXNzOkZGfV19KSxufSkoKSxidj1fZSgiW0ZFQVRVUkUgRkxBR10gUGFydGlhbCBGZWF0dXJlIEZsYWdzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFdTPV9lKCJbRkVBVFVSRSBGTEFHXSBFbmFibGUgRGFyayBNb2RlIE92ZXJyaWRlIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxtZj1fZSgiW0ZFQVRVUkUgRkxBR10gU3RvcmUgdGhlIGZlYXR1cmUgZmxhZ3MgaW4gcGVyc2lzdGVudCBsb2NhbFN0b3JhZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx4dT1fZSgiW0ZFQVRVUkUgRkxBR10gUmVzZXQgZmVhdHVyZSBmbGFnIG92ZXJyaWRlcyIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGpoPV9lKCJbRkVBVFVSRSBGTEFHXSBSZXNldCBhbGwgZmVhdHVyZSBmbGFnIG92ZXJyaWRlcyIpLHJXPV9lKCJbRkVBVFVSRSBGTEFHXSBFZmZlY3RzIEluaXQiKSxvVz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuZGF0YVNvdXJjZT1yLHRoaXMudGZGZWF0dXJlRmxhZ3M9e3JlZjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1mZWF0dXJlLWZsYWdzIikudGZfZmVhdHVyZV9mbGFnc30sdGhpcy5nZXRGZWF0dXJlRmxhZ3MkPWFyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoZWkoclcpLExpKHRoaXMuc3RvcmUuc2VsZWN0KGg2KSx0aGlzLnN0b3JlLnNlbGVjdChjZikpLE4oKFssbyxzXSk9PntsZXQgYT10aGlzLmRhdGFTb3VyY2UuZ2V0RmVhdHVyZXMobyxzKTtyZXR1cm4gYnYoe2ZlYXR1cmVzOmF9KX0pKSksdGhpcy51cGRhdGVQb2x5bWVyRmVhdHVyZUZsYWdzJD1hcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKGVpKGJ2KSxCdCh0aGlzLnN0b3JlLnNlbGVjdChrcyksdGhpcy5zdG9yZS5zZWxlY3QoUGgpKSxOdCgoWyxvLHNdKT0+e3RoaXMudGZGZWF0dXJlRmxhZ3MucmVmLnNldEZlYXR1cmVGbGFncyhvLHMpfSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuc3RvcmVGZWF0dXJlRmxhZyQ9YXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShlaShtZiksTnQoKHtmbGFnczpvfSk9Pnt0aGlzLmRhdGFTb3VyY2UucGVyc2lzdEZlYXR1cmVGbGFncyhvKX0pKSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLnJlc2V0RmVhdHVyZUZsYWdPdmVycmlkZXMkPWFyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoZWkoeHUpLE50KCh7ZmxhZ3M6b30pPT57by5mb3JFYWNoKHM9Pnt0aGlzLmRhdGFTb3VyY2UucmVzZXRQZXJzaXN0ZWRGZWF0dXJlRmxhZyhzKX0pfSkpLHtkaXNwYXRjaDohMX0pLHRoaXMucmVzZXRBbGxGZWF0dXJlRmxhZ092ZXJyaWRlcyQ9YXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShlaShqaCksTnQoKCk9Pnt0aGlzLmRhdGFTb3VyY2UucmVzZXRBbGxQZXJzaXN0ZWRGZWF0dXJlRmxhZ3MoKX0pKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiByVygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhvKSxrKEFlKSxrKEdTKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksbFc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9aW50ZXJjZXB0KGUsaSl7cmV0dXJuIHRoaXMuc3RvcmUucGlwZSh1bihQaCksZnVuY3Rpb24obix0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBpPT5pLnBpcGUobj9rZSgocixvKT0+bihyLG8saSkpOmlzLFl0KDEpLGU/ZnVuY3Rpb24obil7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoVnQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT57aXx8ZS5uZXh0KG4pLGUuY29tcGxldGUoKX0pKX0pfSh0KTpLNCgoKT0+bmV3IE9tKSl9KCksSm4ocj0+KGU9ZS5jbG9uZSh7aGVhZGVyczplLmhlYWRlcnMuc2V0KCJYLVRlbnNvckJvYXJkLUZlYXR1cmUtRmxhZ3MiLEpTT04uc3RyaW5naWZ5KHIpKX0pLGkuaGFuZGxlKGUpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEFlKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gR2gobil7cmV0dXJuImZhbHNlIiE9PW59dmFyIG4sTkY9e3NjYWxhcnNCYXRjaFNpemU6e2RlZmF1bHRWYWx1ZTp2b2lkIDAscXVlcnlQYXJhbU92ZXJyaWRlOiJzY2FsYXJzQmF0Y2hTaXplIixwYXJzZVZhbHVlOnBhcnNlSW50fSxlbmFibGVkRXhwZXJpbWVudGFsUGx1Z2luczp7ZGVmYXVsdFZhbHVlOltdLHF1ZXJ5UGFyYW1PdmVycmlkZToiZXhwZXJpbWVudGFsUGx1Z2luIixwYXJzZVZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybiBuP24uc3BsaXQoIiwiKTpbXX19LGZvcmNlU3ZnOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJmb3JjZVNWRyIscGFyc2VWYWx1ZTpHaH0sZW5hYmxlRGFya01vZGVPdmVycmlkZTp7ZGVmYXVsdFZhbHVlOm51bGwscXVlcnlQYXJhbU92ZXJyaWRlOm51bGx9LGRlZmF1bHRFbmFibGVEYXJrTW9kZTp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZGFya01vZGUiLHBhcnNlVmFsdWU6R2h9LGlzQXV0b0RhcmtNb2RlQWxsb3dlZDp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxpbkNvbGFiOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJ0ZW5zb3Jib2FyZENvbGFiIixwYXJzZVZhbHVlOkdofSxtZXRyaWNzSW1hZ2VTdXBwb3J0RW5hYmxlZDp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxzaG93RmxhZ3M6e2RlZmF1bHRWYWx1ZTp2b2lkIDAscXVlcnlQYXJhbU92ZXJyaWRlOiJzaG93RmxhZ3MiLHBhcnNlVmFsdWU6bj0+bn0sZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbjp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbiIscGFyc2VWYWx1ZTpHaH0sZW5hYmxlSHBhcmFtc0luVGltZVNlcmllczp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlSHBhcmFtc0luVGltZVNlcmllcyIscGFyc2VWYWx1ZTpHaH0sZW5hYmxlU3VnZ2VzdGVkQ2FyZHM6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZVN1Z2dlc3RlZENhcmRzIixwYXJzZVZhbHVlOkdofX0sTEY9e2lzRmVhdHVyZUZsYWdzTG9hZGVkOiExLGRlZmF1bHRGbGFnczoobj1ORixPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKHQsW2UsaV0pPT4odFtlXT1pLmRlZmF1bHRWYWx1ZSx0KSx7fSkpLG1ldGFkYXRhOk5GLGZsYWdPdmVycmlkZXM6e319LEJGPW5ldyBpZSgiW0ZlYXR1cmUgRmxhZ10gU3RvcmUgQ29uZmlnIik7ZnVuY3Rpb24gZFcoKXtyZXR1cm57aW5pdGlhbFN0YXRlOkxGfX12YXIgTmdlPWJyKExGLHllKGJ2LChuLHtmZWF0dXJlczp0fSk9Pih7Li4ubixpc0ZlYXR1cmVGbGFnc0xvYWRlZDohMCxmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsLi4udH19KSkseWUoV1MsKG4se2VuYWJsZURhcmtNb2RlOnR9KT0+KHsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcyxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOnR9fSkpLHllKG1mLChuLHQpPT4oey4uLm4sZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLC4uLnQuZmxhZ3N9fSkpLHllKHh1LChuLHQpPT57aWYoIXR8fCF0LmZsYWdzfHwhdC5mbGFncy5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4uZmxhZ092ZXJyaWRlc307cmV0dXJuIHQuZmxhZ3MuZm9yRWFjaChpPT57ZGVsZXRlIGVbaV19KSx7Li4ubixmbGFnT3ZlcnJpZGVzOmV9fSkseWUoamgsbj0+KHsuLi5uLGZsYWdPdmVycmlkZXM6e319KSkseWUoSWwsKG4se3BhcnRpYWxTZXR0aW5nczp0fSk9PntpZighdC50aGVtZU92ZXJyaWRlKXJldHVybiBuO2xldCBlO3N3aXRjaCh0LnRoZW1lT3ZlcnJpZGUpe2Nhc2UgT3MuQlJPV1NFUl9ERUZBVUxUOmU9bnVsbDticmVhaztjYXNlIE9zLkRBUks6ZT0hMDticmVhaztjYXNlIE9zLkxJR0hUOmU9ITF9cmV0dXJuey4uLm4sZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLGVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6ZX19fSkpO2Z1bmN0aW9uIHVXKG4sdCl7cmV0dXJuIE5nZShuLHQpfWZ1bmN0aW9uIExnZSgpe3JldHVybiBxKGxTLG49Pm51bGw9PT1uP3t0aGVtZU92ZXJyaWRlOk9zLkJST1dTRVJfREVGQVVMVH06e3RoZW1lT3ZlcnJpZGU6bj9Pcy5EQVJLOk9zLkxJR0hUfSl9dmFyIFdoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOkJGLHVzZUZhY3Rvcnk6ZFd9LHtwcm92aWRlOmJGLHVzZUNsYXNzOmxXLG11bHRpOiEwfV0saW1wb3J0czpbaVcsVHIuZm9yRmVhdHVyZShhUyx1VyxCRiksdG8uZm9yRmVhdHVyZShbb1ddKSxLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKExnZSldfSksbn0pKCkscVM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6VGMsdXNlQ2xhc3M6ZVd9XSxpbXBvcnRzOltXaCxPaF19KSxufSkoKSxvbz0oKCk9PihmdW5jdGlvbihuKXtuLkRFRkFVTFQ9ImRlZmF1bHQiLG4uQUxQSEFCRVRJQ0FMPSJhbHBoYWJldGljYWwiLG4uQVNDRU5ESU5HPSJhc2NlbmRpbmciLG4uREVTQ0VORElORz0iZGVzY2VuZGluZyIsbi5ORUFSRVNUPSJuZWFyZXN0IixuLk5FQVJFU1RfWT0ibmVhcmVzdF9ZIn0ob298fChvbz17fSkpLG9vKSkoKSxZUz0ibWV0cmljcyIsTHM9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5PVkVSUklERV9BU19FTkFCTEVEPTFdPSJPVkVSUklERV9BU19FTkFCTEVEIixuW24uT1ZFUlJJREVfQVNfRElTQUJMRUQ9Ml09Ik9WRVJSSURFX0FTX0RJU0FCTEVEIn0oTHN8fChMcz17fSkpLExzKSkoKSxYUz17Y2FyZE1pbldpZHRoOm51bGwsdG9vbHRpcFNvcnQ6b28uQUxQSEFCRVRJQ0FMLGlnbm9yZU91dGxpZXJzOiEwLHhBeGlzVHlwZTpQaS5TVEVQLGhpZGVFbXB0eUNhcmRzOiEwLHNjYWxhclNtb290aGluZzouNixzY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYOiExLGltYWdlQnJpZ2h0bmVzc0luTWlsbGk6MWUzLGltYWdlQ29udHJhc3RJbk1pbGxpOjFlMyxpbWFnZVNob3dBY3R1YWxTaXplOiExLGhpc3RvZ3JhbU1vZGU6RHIuT0ZGU0VUfSxCZ2U9LjE7ZnVuY3Rpb24gZ2Qobix0LGUsaSl7cmV0dXJuIG5bdF0uaGFzT3duUHJvcGVydHkoZSk/dWEodCk/blt0XVtlXS5oYXNPd25Qcm9wZXJ0eShpKT9uW3RdW2VdW2ldOm51bGw6blt0XVtlXTpudWxsfWZ1bmN0aW9uIFFTKG4sdCxlLGkpe2lmKHVhKHQpKXtsZXQgcz17Li4ublt0XX0sYT1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5oYXNPd25Qcm9wZXJ0eSh0KT97Li4ublt0XX06e30sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn0ocyxlLGkpO3JldHVybiBzW2VdPWEsc31sZXQgcj17Li4ublt0XX0sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn1mdW5jdGlvbiBWRihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9ZnVuY3Rpb24gWlMobix0LGUpe2xldCBpPXsuLi5lfTtmb3IobGV0IHIgb2YgdClpW3JdPW47cmV0dXJuIGl9ZnVuY3Rpb24gcWgobix0LGUsaSl7aWYodWEodCkpe2xldCBvPW5bdF0udGFnUnVuU2FtcGxlZEluZm87cmV0dXJuIG8uaGFzT3duUHJvcGVydHkoZSk/T2JqZWN0LmtleXMob1tlXSkuZmlsdGVyKGE9Pmk8b1tlXVthXS5tYXhTYW1wbGVzUGVyU3RlcCk6W119bGV0IHI9blt0XS50YWdUb1J1bnM7cmV0dXJuIHIuaGFzT3duUHJvcGVydHkoZSk/cltlXTpbXX1mdW5jdGlvbiB6Z2Uobix0KXtyZXR1cm4gbi5wbHVnaW49PT10LnBsdWdpbiYmbi50YWc9PT10LnRhZyYmbi5zYW1wbGU9PT10LnNhbXBsZSYmKG4ucnVuSWQ9PT10LnJ1bklkfHwhbi5ydW5JZCYmIXQucnVuSWQpfWZ1bmN0aW9uIEhGKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9bmV3IFNldChuKSxjPVtdO2ZvcihsZXQgdSBvZiBuKWZvcihsZXQgcCBvZiB0KWlmKHpnZShlW3BdLHUpKXtjLnB1c2gocCksbC5kZWxldGUodSk7YnJlYWt9aWYoIWMubGVuZ3RoKXJldHVybnt1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpuLGNhcmRNZXRhZGF0YU1hcDplLGNhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkU3RhdGVNYXA6YX07bGV0IGQ9e2NhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkTWV0YWRhdGFNYXA6ZSxjYXJkU3RhdGVNYXA6YX07Zm9yKGxldCB1IG9mIGMpZD16Rih1LGQuY2FyZFRvUGlubmVkQ29weSxkLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxkLnBpbm5lZENhcmRUb09yaWdpbmFsLGQuY2FyZFN0ZXBJbmRleCxkLmNhcmRNZXRhZGF0YU1hcCxhKTtyZXR1cm57Li4uZCx1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpbLi4ubF19fWZ1bmN0aW9uIHpGKG4sdCxlLGkscixvLHMpe2lmKHQuaGFzKG4pKXJldHVybntjYXJkVG9QaW5uZWRDb3B5OnQsY2FyZFRvUGlubmVkQ29weUNhY2hlOmUscGlubmVkQ2FyZFRvT3JpZ2luYWw6aSxjYXJkU3RlcEluZGV4OnIsY2FyZE1ldGFkYXRhTWFwOm8sY2FyZFN0YXRlTWFwOnN9O2xldCBhPW5ldyBNYXAodCksbD1uZXcgTWFwKGUpLGM9bmV3IE1hcChpKSxkPXsuLi5yfSx1PXsuLi5vfSxwPXsuLi5zfSxmPWZ1bmN0aW9uKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh7YmFzZUNhcmRJZDpufSl9KG4pO2Euc2V0KG4sZiksbC5zZXQobixmKSxjLnNldChmLG4pLHIuaGFzT3duUHJvcGVydHkobikmJihkW2ZdPXJbbl0pO2xldCBtPW9bbl07aWYoIW0pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGluIGEgY2FyZCB3aXRob3V0IG1ldGFkYXRhIik7cmV0dXJuIHVbZl09bSxwW25dJiYocFtmXT1wW25dKSx7Y2FyZFRvUGlubmVkQ29weTphLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpsLHBpbm5lZENhcmRUb09yaWdpbmFsOmMsY2FyZFN0ZXBJbmRleDpkLGNhcmRNZXRhZGF0YU1hcDp1LGNhcmRTdGF0ZU1hcDpwfX12YXIgVWdlPXtNQVhfUElOX0NPVU5UOjEwfTtmdW5jdGlvbiBLUyhuKXtyZXR1cm4gbi5waW5uZWRDYXJkVG9PcmlnaW5hbC5zaXplK24udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMubGVuZ3RoPFVnZS5NQVhfUElOX0NPVU5UfWZ1bmN0aW9uIFVGKG4sdCxlLGkpe2xldCByPXsuLi5ufTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChvPT57aWYoIW8uaW5jbHVkZXMoJyJwbHVnaW4iOiJpbWFnZXMiJykpcmV0dXJuO2xldCBzPWpGKG8sdCxlKSxhPW51bGw7aWYobnVsbD09PWkuZW5kKWE9ZnVuY3Rpb24obix0KXtsZXQgZT10LmluZGV4T2Yobik7aWYoLTEhPT1lKXJldHVybntpbmRleDplLGlzQ2xvc2VzdDohMX07Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aC0xO2krKyl7bGV0IHI9dFtpXSxvPXRbaSsxXSxzPShvLXIpKkJnZTtpZihuPHIpcmV0dXJuIG51bGw7aWYoIShuPm8pKXtpZihuLXI8PXMpcmV0dXJue2luZGV4OmksaXNDbG9zZXN0OiEwfTtpZihvLW48PXMpcmV0dXJue2luZGV4OmkrMSxpc0Nsb3Nlc3Q6ITB9fX1yZXR1cm4gbnVsbH0oaS5zdGFydC5zdGVwLHMpO2Vsc2V7bGV0IGM9c1tuW29dLmluZGV4XSxkPWZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuW107aWYobnVsbD09PW4uZW5kKXJldHVybi0xIT09dC5pbmRleE9mKG4uc3RhcnQuc3RlcCk/W24uc3RhcnQuc3RlcF06W107bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpaT49bi5zdGFydC5zdGVwJiZpPD1uLmVuZC5zdGVwJiZlLnB1c2goaSk7cmV0dXJuIGV9KGkscyk7YT1mdW5jdGlvbihuLHQsZSl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsO2xldCBpPW5bMF0scj1uW24ubGVuZ3RoLTFdO3JldHVybiBlPnI/e2luZGV4OnQuaW5kZXhPZihyKSxpc0Nsb3Nlc3Q6ITF9OmU8aT97aW5kZXg6dC5pbmRleE9mKGkpLGlzQ2xvc2VzdDohMX06bnVsbH0oZCxzLGMpfW51bGwhPT1hJiYocltvXT1hKX0pLHJ9ZnVuY3Rpb24gakYobix0LGUpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybltdO2xldHtwbHVnaW46aSx0YWc6cixzYW1wbGU6byxydW5JZDpzfT10W25dO2lmKG51bGw9PT1zKXJldHVybltdO2xldCBhPWdkKGUsaSxyLG8pO3JldHVybiBudWxsIT09YSYmYS5ydW5Ub1Nlcmllcy5oYXNPd25Qcm9wZXJ0eShzKT9hLnJ1blRvU2VyaWVzW3NdLm1hcChsPT5sLnN0ZXApOltdfWZ1bmN0aW9uIEdGKG4pe2xldHtkYXRhTWluTWF4OnQsdXNlclZpZXdCb3g6ZX09bixpPWU/Lng7aWYoIWkpcmV0dXJuIHQ7bGV0IHI9aVswXTxpWzFdP2lbMF06aVsxXSxvPXI9PT1pWzBdP2lbMV06aVswXTtyZXR1cm57bWluU3RlcDpNYXRoLmNlaWwociksbWF4U3RlcDpNYXRoLmZsb29yKG8pfX1mdW5jdGlvbiBKUyhuLHQpe3N3aXRjaChuKXtjYXNlIExzLk9WRVJSSURFX0FTX0VOQUJMRUQ6cmV0dXJuITA7Y2FzZSBMcy5PVkVSUklERV9BU19ESVNBQkxFRDpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiAkUyhuLHQsZSxpKXtyZXR1cm4gZT90OkpTKG5baV0/LnJhbmdlU2VsZWN0aW9uT3ZlcnJpZGUsdCl9ZnVuY3Rpb24gWWgobil7bGV0IHQ9bmV3IE1hcDtyZXR1cm4oLi4uZSk9PntsZXQgaT1KU09OLnN0cmluZ2lmeShlKTtpZih0LmhhcyhpKSlyZXR1cm4gdC5nZXQoaSk7e2xldCByPW4oLi4uZSk7cmV0dXJuIHQuc2V0KGkscikscn19fXZhciBIaT1FcihZUyksdnY9cShIaSxuPT5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlKSxfVz1xKEhpLG49Pm4udGFnTWV0YWRhdGEpLFlnZT1xKEhpLG49Pm4uY2FyZExpc3QpLF9kPXEoSGksKG4sdCk9PntpZighbi5jYXJkTWV0YWRhdGFNYXAuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIFRlLk5PVF9MT0FERUQ7bGV0e3BsdWdpbjplLHRhZzppLHJ1bklkOnIsc2FtcGxlOm99PW4uY2FyZE1ldGFkYXRhTWFwW3RdLHM9Z2Qobi50aW1lU2VyaWVzRGF0YSxlLGksbyk7aWYoIXMpcmV0dXJuIFRlLk5PVF9MT0FERUQ7bGV0IGE9cy5ydW5Ub0xvYWRTdGF0ZTtpZihyKXJldHVybiBhLmhhc093blByb3BlcnR5KHIpP2Fbcl06VGUuTk9UX0xPQURFRDtsZXQgbD1xaChuLnRhZ01ldGFkYXRhLGUsaSxvKTtpZighbC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCBhIGNhcmQgd2hvc2UgdGFnIGhhcyBubyBydW5zIik7cmV0dXJuIGwuZXZlcnkoYz0+YVtjXT09PVRlLkxPQURFRCk/VGUuTE9BREVEOmwuc29tZShjPT5hW2NdPT09VGUuTE9BRElORyk/VGUuTE9BRElORzpUZS5OT1RfTE9BREVEfSksWGdlPVloKG49PnEodD0+dCx0PT57bGV0e3BsdWdpbjplLHRhZzppLHNhbXBsZTpyfT1uLG89Z2QodC50aW1lU2VyaWVzRGF0YSxlLGkscik7cmV0dXJuIG8/by5ydW5Ub1NlcmllczpudWxsfSkpLEN1PXEoSGksKG4sdCk9Pm4uY2FyZE1ldGFkYXRhTWFwLmhhc093blByb3BlcnR5KHQpP1hnZShuLmNhcmRNZXRhZGF0YU1hcFt0XSkobik6bnVsbCksV0Y9cShIaSxuPT5uLmNhcmRNZXRhZGF0YU1hcCksV2E9cShXRiwobix0KT0+bi5oYXNPd25Qcm9wZXJ0eSh0KT9uW3RdOm51bGwpLHFhPXEoSGksbj0+bi5jYXJkU3RhdGVNYXApLFFnZT1xKEhpLG49Pm4udmlzaWJsZUNhcmRNYXApLGJXPXEoUWdlLG49Pm5ldyBTZXQobi52YWx1ZXMoKSkpLGUxPXEoWWdlLFdGLChuLHQpPT5uLmZpbHRlcihlPT50Lmhhc093blByb3BlcnR5KGUpKS5tYXAoZT0+KHtjYXJkSWQ6ZSwuLi50W2VdfSkpKSxxRj1xKEhpLChuLHQpPT5uLmNhcmRTdGVwSW5kZXguaGFzT3duUHJvcGVydHkodCk/bi5jYXJkU3RlcEluZGV4W3RdOm51bGwpLHZXPXEoSGksKG4sdCk9PmpGKHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkpLHlXPXEoSGksbj0+bi5jYXJkVG9QaW5uZWRDb3B5KSxaZ2U9cShIaSxuPT5uLnBpbm5lZENhcmRUb09yaWdpbmFsKSx5dj1xKHlXLFdGLChuLHQpPT5bLi4ubi52YWx1ZXMoKV0uZmlsdGVyKGU9PnQuaGFzT3duUHJvcGVydHkoZSkpLm1hcChlPT4oe2NhcmRJZDplLC4uLnRbZV19KSkpLE11PXEoeVcsWmdlLChuLHQsZSk9Pm4uaGFzKGUpfHx0LmhhcyhlKSkseFc9cShIaSxuPT5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzKSxDVz1xKEhpLG49PktTKG4pKSxQbD1xKEhpLG49Pih7Li4ubi5zZXR0aW5ncywuLi5uLnNldHRpbmdPdmVycmlkZXN9KSksTVc9cShIaSxuPT5uLnNldHRpbmdPdmVycmlkZXMpLFhoPXEoUGwsbj0+bi5jYXJkTWluV2lkdGgpLGhmPXEoUGwsbj0+bi50b29sdGlwU29ydCksZ2Y9cShQbCxuPT5uLmlnbm9yZU91dGxpZXJzKSxPbD1xKFBsLG49Pm4ueEF4aXNUeXBlKSx0MT1xKFBsLG49Pm4uaGlzdG9ncmFtTW9kZSksd1c9cShQbCxuPT5uLmhpZGVFbXB0eUNhcmRzKSxiZD1xKFBsLG49Pm4uc2NhbGFyU21vb3RoaW5nKSxuMT1xKFBsLG49Pm4uc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCksaTE9cShQbCxuPT5uLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpLHIxPXEoUGwsbj0+bi5pbWFnZUNvbnRyYXN0SW5NaWxsaSksbzE9cShQbCxuPT5uLmltYWdlU2hvd0FjdHVhbFNpemUpLGtsPXEoSGksbj0+bi50YWdGaWx0ZXIpLHMxPXEoSGksKG4sdCk9PkJvb2xlYW4obi50YWdHcm91cEV4cGFuZGVkLmdldCh0KSkpLHd1PXEoSGksbj0+bi5saW5rZWRUaW1lRW5hYmxlZCkseHY9cShIaSxuPT5uLnN0ZXBTZWxlY3RvckVuYWJsZWQpLFN1PXEoSGksbj0+bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLFlGPXEoSGksbj0+e2xldHttaW46dCxtYXg6ZX09bi5zdGVwTWluTWF4O3JldHVybnttaW46dD09PTEvMD8wOnQsbWF4OmU9PT0tMS8wPzFlMzplfX0pLFhGPXEoSGksWUYsKG4sdCk9Pm4ubGlua2VkVGltZVNlbGVjdGlvbj9uLmxpbmtlZFRpbWVTZWxlY3Rpb246e3N0YXJ0OntzdGVwOnQubWF4fSxlbmQ6bnVsbH0pLEV1PXEoSGksWEYsKG4sdCk9Pm4ubGlua2VkVGltZUVuYWJsZWQ/dDpudWxsKSxEYz1xKEhpLG49Pm4uZmlsdGVyZWRQbHVnaW5UeXBlcyksYTE9cShIaSxuPT5uLmlzU2V0dGluZ3NQYW5lT3BlbiksbDE9cShIaSxuPT5uLmlzU2xpZGVvdXRNZW51T3BlbiksU1c9cShIaSxuPT5uLnRhYmxlRWRpdG9yU2VsZWN0ZWRUYWIpLGMxPVloKG49PnEocWEsU3Usd3UsKHQsZSxpKT0+JFModCxlLGksbikpKSxFVz1xKHFhLChuLHQpPT57aWYoblt0XSlyZXR1cm4gR0Yoblt0XSl9KSxUVz1xKHFhLChuLHQpPT5uW3RdPy5kYXRhTWluTWF4KSxRRj1xKHFhLChuLHQpPT5uW3RdPy51c2VyVmlld0JveD8/bnVsbCksRFc9cShxYSx4dixTdSx3dSxFdSwobix0LGUsaSxyLG8pPT57bGV0IHM9bltvXTtpZighcylyZXR1cm47bGV0IGE9R0Yocyk7aWYoIWEpcmV0dXJuO2lmKGkmJnIpcmV0dXJuIFJGKHIsYSxlKTtpZighSlMocy5zdGVwU2VsZWN0aW9uT3ZlcnJpZGUsdCkpcmV0dXJuO2xldCBsPUpTKHMucmFuZ2VTZWxlY3Rpb25PdmVycmlkZSxlKSxjPXMudGltZVNlbGVjdGlvbjtyZXR1cm4gY3x8KGM9e3N0YXJ0OntzdGVwOmEubWluU3RlcH0sZW5kOntzdGVwOmEubWF4U3RlcH19KSxsP2MuZW5kfHwoYz17c3RhcnQ6e3N0ZXA6YS5taW5TdGVwfSxlbmQ6Yy5zdGFydH0pOmM9e3N0YXJ0OmMuZW5kPz9jLnN0YXJ0LGVuZDpudWxsfSxSRihjLGEsbCl9KSxDdj1xKEhpLG49Pm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksTXY9cShIaSxuPT5uLnJhbmdlU2VsZWN0aW9uSGVhZGVycyksZDE9WWgobj0+cShjMShuKSxDdixNdiwodCxlLGkpPT50P2k6ZSkpLEFXPUVyKCJub3RpZmljYXRpb24iKSxJYz0ocShBVyxuPT5uLm5vdGlmaWNhdGlvbnMpLHEoQVcsbj0+bi5sYXN0UmVhZFRpbWVzdGFtcEluTXM/Py0xKSwoKCk9PihmdW5jdGlvbihuKXtuW24uRVhQRVJJTUVOVF9OQU1FPTBdPSJFWFBFUklNRU5UX05BTUUiLG5bbi5IUEFSQU09MV09IkhQQVJBTSIsbltuLk1FVFJJQz0yXT0iTUVUUklDIixuW24uUlVOX05BTUU9M109IlJVTl9OQU1FIn0oSWN8fChJYz17fSkpLEljKSkoKSksWWk9KCgpPT4oZnVuY3Rpb24obil7bltuLlJVTj0wXT0iUlVOIixuW24uRVhQRVJJTUVOVD0xXT0iRVhQRVJJTUVOVCIsbltuLlJFR0VYPTJdPSJSRUdFWCJ9KFlpfHwoWWk9e30pKSxZaSkpKCk7ZnVuY3Rpb24gU3Yobix0LGUpe2xldCBpPXt9LHI9W10sbz17bWF0Y2hlczppLG5vbk1hdGNoZXM6cn07c3dpdGNoKG4ua2V5KXtjYXNlIFlpLlJVTjpmb3IobGV0IGEgb2YgdClpW2EuaWRdPVthXTticmVhaztjYXNlIFlpLkVYUEVSSU1FTlQ6Zm9yKGxldCBhIG9mIHQpe2xldCBsPWVbYS5pZF0sYz1pW2xdfHxbXTtjLnB1c2goYSksaVtsXT1jfWJyZWFrO2Nhc2UgWWkuUkVHRVg6aWYoIW4ucmVnZXhTdHJpbmcpYnJlYWs7bGV0IHM7dHJ5e3M9bmV3IFJlZ0V4cChuLnJlZ2V4U3RyaW5nKX1jYXRjaHticmVha31mb3IobGV0IGEgb2YgdCl7bGV0IGw9YS5uYW1lLm1hdGNoKHMpO2lmKGwpe2xldCBkPWwubGVuZ3RoPjE/SlNPTi5zdHJpbmdpZnkobC5zbGljZSgxKSk6InBzZXVkb19ncm91cCIsdT1pW2RdfHxbXTt1LnB1c2goYSksaVtkXT11fWVsc2Ugci5wdXNoKGEpfX1yZXR1cm4gb31mdW5jdGlvbiBwMShuLHQpe3JldHVybiBuPT09WWkuUkVHRVg/e2tleTpuLHJlZ2V4U3RyaW5nOnQ/PyIifTp7a2V5Om59fXZhciBUdT17fTtGQShUdSx7Z2V0RGFzaGJvYXJkRGVmYXVsdEhwYXJhbUZpbHRlcnM6KCk9PktGLGdldERhc2hib2FyZEhwYXJhbUZpbHRlck1hcDooKT0+bTEsZ2V0RGFzaGJvYXJkSHBhcmFtc0FuZE1ldHJpY3NTcGVjczooKT0+ZjEsZ2V0RGFzaGJvYXJkTWV0cmljc0ZpbHRlck1hcDooKT0+aDEsZ2V0RGFzaGJvYXJkU2Vzc2lvbkdyb3VwczooKT0+WkYsZ2V0RXhwZXJpbWVudHNIcGFyYW1zQW5kTWV0cmljc1NwZWNzOigpPT5vMGUsZ2V0SHBhcmFtRmlsdGVyTWFwOigpPT4kZ2UsZ2V0SHBhcmFtRmlsdGVyTWFwRnJvbUV4cGVyaW1lbnRJZHM6KCk9PmUwZSxnZXRNZXRyaWNGaWx0ZXJNYXA6KCk9PmkwZSxnZXRNZXRyaWNGaWx0ZXJNYXBGcm9tRXhwZXJpbWVudElkczooKT0+cjBlfSk7dmFyIGZhPUVyKE9TKTtmdW5jdGlvbiBQVyhuLHQpe2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KSFuLnNwZWNzW2ldfHxlLnB1c2gobi5zcGVjc1tpXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpO3JldHVybiBodihlKX12YXIgS2dlPXEoZmEsUFcpO2Z1bmN0aW9uIE9XKG4sdCxlKXtsZXQgaT1mZihlKTtyZXR1cm4gbmV3IE1hcChbLi4udCwuLi5uLmZpbHRlcnNbaV0/LmhwYXJhbXM/P1tdXSl9dmFyICRnZT1xKGZhLEtnZSxPVyk7ZnVuY3Rpb24gZTBlKG4sdCl7cmV0dXJuIHEoZmEsZnVuY3Rpb24obil7cmV0dXJuIHEoZmEsdD0+UFcodCxuKSl9KG4pLChlLGkpPT5PVyhlLHQ/aTpuZXcgTWFwLG4pKX1mdW5jdGlvbiBrVyhuLHQpe2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KSFuLnNwZWNzW2ldfHxlLnB1c2gobi5zcGVjc1tpXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpO3JldHVybiBQUyhlKX12YXIgdDBlPXEoZmEsa1cpO2Z1bmN0aW9uIEZXKG4sdCxlKXtsZXQgaT1mZihlKTtyZXR1cm4gbmV3IE1hcChbLi4udCwuLi5uLmZpbHRlcnNbaV0/Lm1ldHJpY3M/P1tdXSl9dmFyIGkwZT1xKGZhLHQwZSxGVyk7ZnVuY3Rpb24gcjBlKG4sdCl7cmV0dXJuIHEoZmEsZnVuY3Rpb24obil7cmV0dXJuIHEoZmEsdD0+a1codCxuKSl9KG4pLChlLGkpPT5GVyhlLHQ/aTpuZXcgTWFwLG4pKX12YXIgbzBlPXEoZmEsKG4sdCk9PmZ1bmN0aW9uKC4uLm4pe2xldCB0PW5ldyBNYXAsZT1uZXcgTWFwLGk9bmV3IE1hcCxyPW5ldyBNYXAsbz1bXTtmb3IobGV0IHMgb2Ygbil7Zm9yKGxldCBhIG9mIHMuaHBhcmFtcylpZihlLmhhcyhhLm5hbWUpfHxlLnNldChhLm5hbWUsbmV3IFNldCksZS5nZXQoYS5uYW1lKS5hZGQoYS5kaXNwbGF5TmFtZSksdC5oYXMoYS5uYW1lKSl7bGV0IGw9dC5nZXQoYS5uYW1lKSxjPWE7aWYobC50eXBlIT09Yy50eXBlJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCB0eXBlcyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC50eXBlfSB2cy4gJHtjLnR5cGV9YCksbC5kb21haW4udHlwZT09PWduLklOVEVSVkFMJiZjLmRvbWFpbi50eXBlPT09Z24uSU5URVJWQUwpKGwuZG9tYWluLm1pblZhbHVlIT09Yy5kb21haW4ubWluVmFsdWV8fGwuZG9tYWluLm1heFZhbHVlIT09Yy5kb21haW4ubWF4VmFsdWUpJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCk7ZWxzZSBpZihsLmRvbWFpbi50eXBlPT09Z24uRElTQ1JFVEUmJmMuZG9tYWluLnR5cGU9PT1nbi5ESVNDUkVURSl7bGV0IGQ9bmV3IFNldChbLi4ubC5kb21haW4udmFsdWVzLC4uLmMuZG9tYWluLnZhbHVlc10pOyhsLmRvbWFpbi52YWx1ZXMubGVuZ3RoIT09Yy5kb21haW4udmFsdWVzLmxlbmd0aHx8bC5kb21haW4udmFsdWVzLmxlbmd0aCE9PWQuc2l6ZSkmJm8ucHVzaChgSHBhcmFtLCAke2MubmFtZX0sIGRvbWFpbnMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZG9tYWlufSB2cy4gJHtjLmRvbWFpbn1gKX1lbHNlIG8ucHVzaChgSHBhcmFtLCAke2MubmFtZX0sIGRvbWFpbnMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZG9tYWlufSB2cy4gJHtjLmRvbWFpbn1gKX1lbHNlIHQuc2V0KGEubmFtZSx7Li4uYX0pO2ZvcihsZXQgYSBvZiBzLm1ldHJpY3MpaWYoci5oYXMoYS50YWcpfHxyLnNldChhLnRhZyxuZXcgU2V0KSxyLmdldChhLnRhZykuYWRkKGEuZGlzcGxheU5hbWUpLGkuaGFzKGEudGFnKSl7bGV0IGw9aS5nZXQoYS50YWcpO2wuZGF0YXNldFR5cGUhPT1hLmRhdGFzZXRUeXBlJiZvLnB1c2goYE1ldHJpYywgJHthLnRhZ30sIGRhdGFzZXRUeXBlcyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC5kYXRhc2V0VHlwZX0gdnMuICR7YS5kYXRhc2V0VHlwZX1gKX1lbHNlIGkuc2V0KGEudGFnLHsuLi5hfSl9aWYoby5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBWYWxpZGF0aW9uIGVycm9yOlxuJHtvLmpvaW4oIlxuIil9YCk7cmV0dXJue2hwYXJhbXM6Wy4uLnRdLm1hcCgoW3MsYV0pPT4oey4uLmEsZGlzcGxheU5hbWU6Wy4uLmUuZ2V0KHMpXS5qb2luKCIgb3IgIil9KSksbWV0cmljczpbLi4uaV0ubWFwKChbcyxhXSk9Pih7Li4uYSxkaXNwbGF5TmFtZTpbLi4uci5nZXQocyldLmpvaW4oIiBvciAiKX0pKX19KC4uLnQuZXhwZXJpbWVudElkcy5tYXAoZT0+e2xldCBpPW4uc3BlY3NbZV07cmV0dXJuIGk/e2hwYXJhbXM6aS5ocGFyYW0uc3BlY3MsbWV0cmljczppLm1ldHJpYy5zcGVjc306bnVsbH0pLmZpbHRlcihCb29sZWFuKSkpLGYxPXEoZmEsbj0+bi5kYXNoYm9hcmRTcGVjcyksWkY9cShmYSxuPT5uLmRhc2hib2FyZFNlc3Npb25Hcm91cHMpLEtGPXEoZjEsbj0+bmV3IE1hcChuLmhwYXJhbXMubWFwKGU9PltlLm5hbWUsRjYoZSldKSkpLG0xPXEoZmEsbj0+bi5kYXNoYm9hcmRGaWx0ZXJzLmhwYXJhbXMpLGgxPXEoZmEsbj0+bi5kYXNoYm9hcmRGaWx0ZXJzLm1ldHJpY3MpLE5XPUVyKCJydW5zIiksZHM9cShOVyxuPT5uLmRhdGEpLExXPXEoZHMsbj0+bi5ydW5JZFRvRXhwSWQpLGcxPXEoZHMsKG4sdCk9Pm4ucnVuSWRUb0V4cElkW3QucnVuSWRdPz9udWxsKSxfMT1xKGRzLChuLHQpPT5uLnJ1bk1ldGFkYXRhW3QucnVuSWRdPz9udWxsKSxEdT1xKGRzLChuLHQpPT4obi5ydW5JZHNbdC5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKGk9PkJvb2xlYW4obi5ydW5NZXRhZGF0YVtpXSkpLm1hcChpPT5uLnJ1bk1ldGFkYXRhW2ldKSksczBlPXEoWkYsbHIsZHMsKG4sdCxlKT0+e2lmKCF0KXJldHVybnt9O2xldCBpPVtdO2ZvcihsZXQgYSBvZiB0KWkucHVzaCguLi5lLnJ1bklkc1thXXx8W10pO2xldCByPXt9O2ZvcihsZXQgYSBvZiBuKXtsZXQgbD1PYmplY3QuZW50cmllcyhhLmhwYXJhbXMpLm1hcChjPT57bGV0W2QsdV09YztyZXR1cm57bmFtZTpkLHZhbHVlOnV9fSk7Zm9yKGxldCBjIG9mIGEuc2Vzc2lvbnMpcltjLm5hbWVdPWx9bGV0IG89T2JqZWN0LmtleXMocikuc29ydCgoYSxsKT0+bC5sZW5ndGgtYS5sZW5ndGgpLHM9e307Zm9yKGxldCBhIG9mIGkpZm9yKGxldCBsIG9mIG8paWYoYS5zdGFydHNXaXRoKGwpKXtzW2FdPXtocGFyYW1zOnJbbF0sbWV0cmljczpbXX07YnJlYWt9cmV0dXJuIHN9KSxiMT1xKGRzLGxyLHMwZSwobix0LGUpPT50P3QubWFwKGk9PihuLnJ1bklkc1tpXXx8W10pLmZpbHRlcihyPT5Cb29sZWFuKG4ucnVuTWV0YWRhdGFbcl0pKS5tYXAocj0+e2xldCBvPXsuLi5uLnJ1bk1ldGFkYXRhW3JdLGV4cGVyaW1lbnRJZDppfTtyZXR1cm4gby5ocGFyYW1zPWVbcl0/LmhwYXJhbXM/P251bGwsby5tZXRyaWNzPWVbcl0/Lm1ldHJpY3M/P251bGwsb30pKS5mbGF0KCk6W10pLEJXPXEoZHMsKG4sdCk9Pm4ucnVuSWRzW3QuZXhwZXJpbWVudElkXT8/W10pLFZXPXEoZHMsbj0+bmV3IE1hcChPYmplY3QuZW50cmllcyhuLnJ1bk1ldGFkYXRhKSkpLEV2PXEoZHMsKG4sdCk9Pm4ucnVuc0xvYWRTdGF0ZVt0LmV4cGVyaW1lbnRJZF18fHtsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpUZS5OT1RfTE9BREVEfSksSkY9cShkcyxuPT5udWxsIT09bi51c2VyU2V0R3JvdXBCeUtleT9wMShuLnVzZXJTZXRHcm91cEJ5S2V5LG4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKTpudWxsKSxIVz1xKEpGLGRzLChuLHQpPT5uPz90LmluaXRpYWxHcm91cEJ5KSx2ZD1xKGRzLG49Pm4ucmVnZXhGaWx0ZXIpLFR2PXEoTlcsbj0+bi51aSksJEY9cShUdixuPT5uLnBhZ2luYXRpb25PcHRpb24pLGUyPXEoVHYsbj0+bi5zb3J0KSx6Vz1xKFR2LG49Pm4uc2VsZWN0aW9uU3RhdGUpLFVXPXEoZHMsbj0+bi5ydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeSksalc9cShkcyxuPT5uLmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSksdjE9cShkcyxuPT5uLmNvbG9yR3JvdXBSZWdleFN0cmluZyksR1c9cShUdixuPT5uLnJ1bnNUYWJsZUhlYWRlcnMpLFdXPXEoVHYsbj0+bi5zb3J0aW5nSW5mbykseTE9X2UoIltTZXR0aW5nc10gUmVsb2FkIEVuYWJsZSBUb2dnbGVkIikseDE9X2UoIltTZXR0aW5nc10gUmVsb2FkIFBlcmlvZCBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxDMT1fZSgiW1NldHRpbmdzXSBQYWdlIFNpemUgQ2hhbmdlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQnM9e307RkEoQnMse2dldENvbG9yUGFsZXR0ZTooKT0+YTBlLGdldFBhZ2VTaXplOigpPT5fZixnZXRSZWxvYWRFbmFibGVkOigpPT5JdixnZXRSZWxvYWRQZXJpb2RJbk1zOigpPT5BdixnZXRTZXR0aW5nc0xvYWRTdGF0ZTooKT0+dDJ9KTt2YXIgTTE9InNldHRpbmdzIixYVz17c3RhdGU6VGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpLHNldHRpbmdzOntyZWxvYWRQZXJpb2RJbk1zOjNlNCxyZWxvYWRFbmFibGVkOiExLHBhZ2VTaXplOjEyLGNvbG9yUGFsZXR0ZTp7aWQ6ImRlZmF1bHQiLG5hbWU6IkRlZmFsdCIsY29sb3JzOlt7bmFtZToiU2xhdGUiLGxpZ2h0SGV4OiIjNDI1MDY2IixkYXJrSGV4OiIjOGU5OGEzIn0se25hbWU6IkN5YW4iLGxpZ2h0SGV4OiIjMTJiNWNiIixkYXJrSGV4OiIjMTJiNWNiIn0se25hbWU6IlBpbmsiLGxpZ2h0SGV4OiIjZTUyNTkyIixkYXJrSGV4OiIjZTUyNTkyIn0se25hbWU6IlllbGxvdyIsbGlnaHRIZXg6IiNmOWFiMDAiLGRhcmtIZXg6IiNmOWFiMDAifSx7bmFtZToiUHVycGxlIixsaWdodEhleDoiIzkzMzRlNiIsZGFya0hleDoiIzkzMzRlNiJ9LHtuYW1lOiJMaWdodCBHcmVlbiIsbGlnaHRIZXg6IiM3Y2IzNDIiLGRhcmtIZXg6IiM3Y2IzNDIifSx7bmFtZToiT3JhbmdlIixsaWdodEhleDoiI2U4NzEwYSIsZGFya0hleDoiI2U4NzEwYSJ9XSxpbmFjdGl2ZTp7bmFtZToiR3JheSIsbGlnaHRIZXg6IiNlMGUwZTAiLGRhcmtIZXg6IiMzYjNiM2IifX19fSxEdj1FcihNMSksdDI9cShEdixuPT5uLnN0YXRlKSxJdj1xKER2LG49Pm4uc2V0dGluZ3MucmVsb2FkRW5hYmxlZCksQXY9cShEdixuPT5uLnNldHRpbmdzLnJlbG9hZFBlcmlvZEluTXMpLF9mPXEoRHYsbj0+bi5zZXR0aW5ncy5wYWdlU2l6ZSksYTBlPXEoRHYsbj0+bi5zZXR0aW5ncy5jb2xvclBhbGV0dGUpO2Z1bmN0aW9uIFFoKG4sdCxlKXtpZighdClyZXR1cm4hMDtsZXQgaTt0cnl7aT1uZXcgUmVnRXhwKHQsImkiKX1jYXRjaHtyZXR1cm4hMX1sZXQgcj1bbi5ydW5OYW1lXTtyZXR1cm4gZSYmci5wdXNoKG4uZXhwZXJpbWVudEFsaWFzLmFsaWFzVGV4dCxgJHtuLmV4cGVyaW1lbnRBbGlhcy5hbGlhc1RleHR9LyR7bi5ydW5OYW1lfWApLHIuc29tZShvPT5pLnRlc3QobykpfXZhciBsMGU9cShscix6VyxMVywobix0LGUpPT57aWYoIW4pcmV0dXJuIG5ldyBNYXA7bGV0IGk9bmV3IE1hcDtmb3IobGV0W3Isb11vZiB0LmVudHJpZXMoKSl7bGV0IHM9ZVtyXTtzJiZuLmluZGV4T2Yocyk+PTAmJmkuc2V0KHIsbyl9cmV0dXJuIGl9KSxjMGU9cSh6YSxiMSwobix0KT0+e2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHQpZS5zZXQoaS5pZCx7cnVuTmFtZTppLm5hbWUsZXhwZXJpbWVudEFsaWFzOm5baS5leHBlcmltZW50SWRdfSk7cmV0dXJuIGV9KSxJdT1xKGxyLGwwZSx2ZCxjMGUsSGEsKG4sdCxlLGkscik9PntpZighbilyZXR1cm4gbnVsbDtsZXQgbz1yPT09d24uQ09NUEFSRV9FWFBFUklNRU5ULHM9bmV3IE1hcDtmb3IobGV0W2EsbF1vZiB0LmVudHJpZXMoKSl7bGV0IGM9aS5nZXQoYSk7cy5zZXQoYSxRaChjLGUsbykmJmwpfXJldHVybiBzfSksQXU9cShCcy5nZXRDb2xvclBhbGV0dGUsalcsVVcsUmwsKG4sdCxlLGkpPT57bGV0IHI9e307cmV0dXJuIHQuZm9yRWFjaCgobyxzKT0+e2xldCBhPWk/bi5pbmFjdGl2ZS5kYXJrSGV4Om4uaW5hY3RpdmUubGlnaHRIZXg7aWYoZS5oYXMocykpYT1lLmdldChzKTtlbHNlIGlmKG8+PTApe2xldCBsPW4uY29sb3JzW28lbi5jb2xvcnMubGVuZ3RoXTthPWk/bC5kYXJrSGV4OmwubGlnaHRIZXh9cltzXT1hfSkscn0pLFFXPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5ydW5zRGF0YVNvdXJjZT1yLHRoaXMubG9hZFJ1bnNPblJ1blRhYmxlU2hvd24kPWFyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoZWkoVmgpLGhuKCh7ZXhwZXJpbWVudElkczpvfSk9PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8sYT0+YT09PVRlLkZBSUxFRHx8YT09PVRlLk5PVF9MT0FERUQpLnBpcGUoa2UoYT0+ISFhLmxlbmd0aCksaG4oYT0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KG8sYSkpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQ9dGhpcy5hY3Rpb25zJC5waXBlKGVpKFBzKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChObykpLFluKChbLG9dLFssc10pPT5GbyhvLHMpKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChscikpLGtlKChbLG9dKT0+ISFvKSxOKChbLG9dKT0+byksaG4obz0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxzPT5zPT09VGUuRkFJTEVEfHxzPT09VGUuTk9UX0xPQURFRCkucGlwZShOKHM9Pih7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSkpKSkpLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkPXRoaXMuYWN0aW9ucyQucGlwZShlaShjcyxGcyksQnQodGhpcy5zdG9yZS5zZWxlY3QobHIpKSxrZSgoWyxvXSk9PiEhbyksTigoWyxvXSk9Pm8pLGhuKG89PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8scz0+cyE9PVRlLkxPQURJTkcpLnBpcGUoTihzPT4oe2V4cGVyaW1lbnRJZHM6byxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6c30pKSkpKSx0aGlzLmxvYWRSdW5zT25OYXZpZ2F0aW9uT3JSZWxvYWQkPWFyKCgpPT50bih0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUm91dGVDaGFuZ2UkLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkKS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KE5vKSksa2UoKFssb10pPT5udWxsIT09byYmby5yb3V0ZUtpbmQhPT13bi5DQVJEKSxobigoW3tleHBlcmltZW50SWRzOm8sZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOnN9XSk9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdChvLHMpKSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZW1vdmVIcGFyYW1GaWx0ZXJXaGVuQ29sdW1uSXNSZW1vdmVkJD1hcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKGVpKHpoKSxOdCgoe2hlYWRlcjpvfSk9PntvLnR5cGUhPT1odC5IUEFSQU0/by50eXBlPT09aHQuTUVUUklDJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKG12KHtuYW1lOm8ubmFtZX0pKTp0aGlzLnN0b3JlLmRpc3BhdGNoKGZ2KHtuYW1lOm8ubmFtZX0pKX0pKSx7ZGlzcGF0Y2g6ITF9KX1nZXRSdW5zTGlzdExvYWRTdGF0ZShlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoRXYse2V4cGVyaW1lbnRJZDplfSkucGlwZShZdCgxKSl9Z2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKGUsaSl7cmV0dXJuIGNvKGUubWFwKHI9PnRoaXMuZ2V0UnVuc0xpc3RMb2FkU3RhdGUocikpKS5waXBlKE4ocj0+ZS5maWx0ZXIoKG8scyk9PmkocltzXS5zdGF0ZSkpKSl9ZmV0Y2hBbGxSdW5zTGlzdChlLGkpe3JldHVybiBIdCh7ZXhwZXJpbWVudElkczplLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDppfSkucGlwZShOdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goTVMoe2V4cGVyaW1lbnRJZHM6ZSxyZXF1ZXN0ZWRFeHBlcmltZW50SWRzOml9KSl9KSxobigoKT0+e2xldCByPW5ldyBTZXQoaSk7cmV0dXJuIGNvKGUubWFwKHM9PnIuaGFzKHMpP3RoaXMuZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChzKTp0aGlzLm1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKHMpKSl9KSxOKHI9PntsZXQgbz17fSxzPVtdO2ZvcihsZXQgYSBvZiByKXMucHVzaCguLi5hLnJ1bnMpLGEuZnJvbVJlbW90ZSYmKG9bYS5leHBlcmltZW50SWRdPXtydW5zOmEucnVucyxtZXRhZGF0YTphLm1ldGFkYXRhfSk7cmV0dXJue25ld1J1bnNBbmRNZXRhZGF0YTpvLHJ1bnNGb3JBbGxFeHBlcmltZW50czpzfX0pLE50KCh7bmV3UnVuc0FuZE1ldGFkYXRhOnIscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm99KT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goeXUoe2V4cGVyaW1lbnRJZHM6ZSxuZXdSdW5zQW5kTWV0YWRhdGE6cixydW5zRm9yQWxsRXhwZXJpbWVudHM6b30pKX0pLHpyKHI9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKEJoKHtleHBlcmltZW50SWRzOmUscmVxdWVzdGVkRXhwZXJpbWVudElkczppfSkpLEh0KG51bGwpKSksTigoKT0+bnVsbCkpfW1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKGUpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChFdix7ZXhwZXJpbWVudElkOmV9KS5waXBlKGtlKGk9Pmkuc3RhdGUhPT1UZS5MT0FESU5HKSxZdCgxKSxobihpPT5pLnN0YXRlPT09VGUuRkFJTEVEP2VhKG5ldyBFcnJvcigiUGVuZGluZyByZXF1ZXN0IGZhaWxlZCIpKTpIdChpKSksQnQodGhpcy5zdG9yZS5zZWxlY3QoRHUse2V4cGVyaW1lbnRJZDplfSkpLE4oKFssaV0pPT4oe2Zyb21SZW1vdGU6ITEsZXhwZXJpbWVudElkOmUscnVuczppfSkpKX1mZXRjaFJ1bnNGb3JFeHBlcmltZW50KGUpe3JldHVybiBjbyhbdGhpcy5ydW5zRGF0YVNvdXJjZS5mZXRjaFJ1bnMoZSksdGhpcy5ydW5zRGF0YVNvdXJjZS5mZXRjaEhwYXJhbXNNZXRhZGF0YShlKV0pLnBpcGUoTigoW2kscl0pPT4oe2Zyb21SZW1vdGU6ITAsZXhwZXJpbWVudElkOmUscnVuczppLG1ldGFkYXRhOnJ9KSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhvKSxrKEFlKSxrKFJTKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWWE9KCgpPT4oZnVuY3Rpb24obil7bi5BU0M9ImFzYyIsbi5ERVNDPSJkZXNjIixuLlVOU0VUPSIifShZYXx8KFlhPXt9KSksWWEpKSgpLHtpbml0aWFsU3RhdGU6ZDBlLHJlZHVjZXJzOnUwZX09dWYoe3J1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXAsZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5Om5ldyBNYXAsZ3JvdXBLZXlUb0NvbG9ySWQ6bmV3IE1hcCxpbml0aWFsR3JvdXBCeTp7a2V5OllpLlJVTn0sdXNlclNldEdyb3VwQnlLZXk6bnVsbCxjb2xvckdyb3VwUmVnZXhTdHJpbmc6IiIscmVnZXhGaWx0ZXI6IiJ9LHtydW5JZHM6e30scnVuSWRUb0V4cElkOnt9LHJ1bk1ldGFkYXRhOnt9LHJ1bnNMb2FkU3RhdGU6e319LChuLHQsZSk9PkZvKHQsZSk/bjp7Li4ubixpbml0aWFsR3JvdXBCeTp7a2V5OmUucm91dGVLaW5kPT09d24uQ09NUEFSRV9FWFBFUklNRU5UP1lpLkVYUEVSSU1FTlQ6WWkuUlVOfX0pLHAwZT1icihkMGUseWUoRWgsKG4se3JvdXRlS2luZDp0LHBhcnRpYWxTdGF0ZTplfSk9PntpZih0IT09d24uQ09NUEFSRV9FWFBFUklNRU5UJiZ0IT09d24uRVhQRVJJTUVOVClyZXR1cm4gbjtsZXQgcj1lLnJ1bnMuZ3JvdXBCeSxvPWUucnVucy5yZWdleEZpbHRlcj8/IiI7aWYoIXImJiFvKXJldHVybiBuO2xldHtjb2xvckdyb3VwUmVnZXhTdHJpbmc6cyx1c2VyU2V0R3JvdXBCeUtleTphfT1uO3JldHVybiByJiYocz1yLmtleT09PVlpLlJFR0VYP3IucmVnZXhTdHJpbmc6bi5jb2xvckdyb3VwUmVnZXhTdHJpbmcsYT1yLmtleT8/bnVsbCksey4uLm4sY29sb3JHcm91cFJlZ2V4U3RyaW5nOnMscmVnZXhGaWx0ZXI6byx1c2VyU2V0R3JvdXBCeUtleTphfX0pLHllKE1TLChuLHQpPT57bGV0IGU9ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBpIG9mIHQucmVxdWVzdGVkRXhwZXJpbWVudElkcyllW2ldPWVbaV0/ey4uLmVbaV0sc3RhdGU6VGUuTE9BRElOR306e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOlRlLkxPQURJTkd9O3JldHVybnsuLi5uLHJ1bnNMb2FkU3RhdGU6ZX19KSx5ZSh5dSwobix0KT0+e2xldCBlPXsuLi5uLnJ1bklkc30saT17Li4ubi5ydW5NZXRhZGF0YX0scj17Li4ubi5ydW5JZFRvRXhwSWR9LG89ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKSl7bGV0e3J1bnM6YSxtZXRhZGF0YTpsfT10Lm5ld1J1bnNBbmRNZXRhZGF0YVtzXTtlW3NdPWEubWFwKCh7aWQ6Y30pPT5jKSxvW3NdPXsuLi5vW3NdLGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpLHN0YXRlOlRlLkxPQURFRH07Zm9yKGxldCBjIG9mIGEpe2xldCBkPWwucnVuVG9IcGFyYW1zQW5kTWV0cmljc1tjLmlkXTtpW2MuaWRdPXsuLi5jLGhwYXJhbXM6ZD9kLmhwYXJhbXM6bnVsbCxtZXRyaWNzOmQ/ZC5tZXRyaWNzOm51bGx9LHJbYy5pZF09c319cmV0dXJuey4uLm4scnVuSWRzOmUscnVuSWRUb0V4cElkOnIscnVuTWV0YWRhdGE6aSxydW5zTG9hZFN0YXRlOm99fSkseWUoQmgsKG4sdCk9PntsZXQgZT17Li4ubi5ydW5zTG9hZFN0YXRlfTtmb3IobGV0IGkgb2YgdC5yZXF1ZXN0ZWRFeHBlcmltZW50SWRzKWVbaV09ZVtpXT97Li4uZVtpXSxzdGF0ZTpUZS5GQUlMRUR9OntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpUZS5GQUlMRUR9O3JldHVybnsuLi5uLHJ1bnNMb2FkU3RhdGU6ZX19KSx5ZSh5dSwobix7cnVuc0ZvckFsbEV4cGVyaW1lbnRzOnR9KT0+e2xldCBlPW5ldyBNYXAobi5ncm91cEtleVRvQ29sb3JJZCksaT1uZXcgTWFwKG4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSxyPW4uaW5pdGlhbEdyb3VwQnk7bnVsbCE9PW4udXNlclNldEdyb3VwQnlLZXkmJihyPXAxKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpKTtsZXQgbz1TdihyLHQsbi5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKG8ubWF0Y2hlcykuZm9yRWFjaCgoW3MsYV0pPT57bGV0IGw9ZS5nZXQocyk/P2Uuc2l6ZTtlLnNldChzLGwpO2ZvcihsZXQgYyBvZiBhKWkuc2V0KGMuaWQsbCl9KTtmb3IobGV0IHMgb2Ygby5ub25NYXRjaGVzKWkuc2V0KHMuaWQsLTEpO3JldHVybnsuLi5uLGRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeTppLGdyb3VwS2V5VG9Db2xvcklkOmV9fSkseWUoSGgsKG4se2V4cGVyaW1lbnRJZHM6dCxncm91cEJ5OmV9KT0+e2xldCBpPW5ldyBNYXAscj1uZXcgTWFwKG4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSxzPVN2KGUsdC5mbGF0TWFwKGw9Pm4ucnVuSWRzW2xdKS5tYXAobD0+bi5ydW5NZXRhZGF0YVtsXSksbi5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKHMubWF0Y2hlcykuZm9yRWFjaCgoW2wsY10pPT57bGV0IGQ9aS5nZXQobCk/P2kuc2l6ZTtpLnNldChsLGQpO2ZvcihsZXQgdSBvZiBjKXIuc2V0KHUuaWQsZCl9KTtmb3IobGV0IGwgb2Ygcy5ub25NYXRjaGVzKXIuc2V0KGwuaWQsLTEpO2xldCBhPWUua2V5PT09WWkuUkVHRVg/ZS5yZWdleFN0cmluZzpuLmNvbG9yR3JvdXBSZWdleFN0cmluZztyZXR1cm57Li4ubixjb2xvckdyb3VwUmVnZXhTdHJpbmc6YSx1c2VyU2V0R3JvdXBCeUtleTplLmtleSxkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6cixncm91cEtleVRvQ29sb3JJZDppLHJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXB9fSkseWUoVFMsKG4se3J1bklkOnQsbmV3Q29sb3I6ZX0pPT57bGV0IGk9bmV3IE1hcChuLnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KTtyZXR1cm4gaS5zZXQodCxlKSx7Li4ubixydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTppfX0pLHllKHV2LChuLHQpPT4oey4uLm4scmVnZXhGaWx0ZXI6dC5yZWdleFN0cmluZ30pKSksZjBlPXBmKHAwZSx1MGUpLG0wZT17a2V5Om51bGwsZGlyZWN0aW9uOllhLlVOU0VUfSx7aW5pdGlhbFN0YXRlOmgwZSxyZWR1Y2VyczpnMGV9PXVmKHtwYWdpbmF0aW9uT3B0aW9uOntwYWdlSW5kZXg6MCxwYWdlU2l6ZToxMH0sc29ydDptMGUsc2VsZWN0aW9uU3RhdGU6bmV3IE1hcCxydW5zVGFibGVIZWFkZXJzOlt7dHlwZTpodC5SVU4sbmFtZToicnVuIixkaXNwbGF5TmFtZToiUnVuIixlbmFibGVkOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITAsZmlsdGVyYWJsZTohMX1dLHNvcnRpbmdJbmZvOntuYW1lOiJydW4iLG9yZGVyOmlvLkFTQ0VORElOR319LHt9LChuLHQsZSk9PntpZighRm8odCxlKSl7aWYoZS5yb3V0ZUtpbmQ9PT13bi5DT01QQVJFX0VYUEVSSU1FTlQmJiFuLnJ1bnNUYWJsZUhlYWRlcnMuZmluZChpPT4iZXhwZXJpbWVudEFsaWFzIj09PWkubmFtZSkpe2xldCBpPVsuLi5uLnJ1bnNUYWJsZUhlYWRlcnMse3R5cGU6aHQuQ1VTVE9NLG5hbWU6ImV4cGVyaW1lbnRBbGlhcyIsZGlzcGxheU5hbWU6IkV4cGVyaW1lbnQiLGVuYWJsZWQ6ITAsbW92YWJsZTohMCxzb3J0YWJsZTohMH1dO3JldHVybnsuLi5uLHJ1bnNUYWJsZUhlYWRlcnM6aX19aWYodD8ucm91dGVLaW5kPT09d24uQ09NUEFSRV9FWFBFUklNRU5UJiZlLnJvdXRlS2luZCE9PXduLkNPTVBBUkVfRVhQRVJJTUVOVCl7bGV0IGk9bi5ydW5zVGFibGVIZWFkZXJzLmZpbHRlcihyPT4iZXhwZXJpbWVudEFsaWFzIiE9PXIubmFtZSk7cmV0dXJuey4uLm4scnVuc1RhYmxlSGVhZGVyczppfX19cmV0dXJuIG59KSxfMGU9YnIoaDBlLHllKFNTLChuLHtwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfSk9Pih7Li4ubixwYWdpbmF0aW9uT3B0aW9uOntwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfX0pKSx5ZSh1diwobix0KT0+KHsuLi5uLHBhZ2luYXRpb25PcHRpb246ey4uLm4ucGFnaW5hdGlvbk9wdGlvbixwYWdlSW5kZXg6MH19KSkseWUoRVMsKG4sdCk9Pih7Li4ubixzb3J0OntrZXk6dC5rZXksZGlyZWN0aW9uOnQuZGlyZWN0aW9ufX0pKSx5ZSh5dSwobix0KT0+e2xldCBlPW5ldyBNYXAobi5zZWxlY3Rpb25TdGF0ZSksaT10LnJ1bnNGb3JBbGxFeHBlcmltZW50cy5sZW5ndGg8PTUwMDtmb3IobGV0IHIgb2YgdC5ydW5zRm9yQWxsRXhwZXJpbWVudHMpZS5oYXMoci5pZCl8fGUuc2V0KHIuaWQsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSx5ZShjdiwobix7cnVuSWQ6dH0pPT57bGV0IGU9bmV3IE1hcChuLnNlbGVjdGlvblN0YXRlKTtyZXR1cm4gZS5zZXQodCwhQm9vbGVhbihlLmdldCh0KSkpLHsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSkseWUod1MsKG4se3J1bklkOnR9KT0+e2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIG4uc2VsZWN0aW9uU3RhdGUua2V5cygpKWUuc2V0KGksdD09PWkpO3JldHVybnsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSkseWUoZHYsKG4se3J1bklkczp0fSk9PntsZXQgZT1uZXcgTWFwKG4uc2VsZWN0aW9uU3RhdGUpLGk9IXQuZXZlcnkocj0+Qm9vbGVhbihlLmdldChyKSkpO2ZvcihsZXQgciBvZiB0KWUuc2V0KHIsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSx5ZShEUywobix7aGVhZGVyOnQsaW5kZXg6ZX0pPT57bGV0IGk9Wy4uLm4ucnVuc1RhYmxlSGVhZGVyc107cmV0dXJuIHZvaWQgMD09PWU/aS5wdXNoKHQpOmkuc3BsaWNlKGUsMCx0KSx7Li4ubixydW5zVGFibGVIZWFkZXJzOml9fSkseWUoemgsKG4se2hlYWRlcjp0fSk9PntsZXQgZT1uLnJ1bnNUYWJsZUhlYWRlcnMuZmlsdGVyKCh7bmFtZTppfSk9PmkhPT10Lm5hbWUpO3JldHVybnsuLi5uLHJ1bnNUYWJsZUhlYWRlcnM6ZX19KSx5ZShJUywobix7bmV3SGVhZGVyT3JkZXI6dH0pPT4oey4uLm4scnVuc1RhYmxlSGVhZGVyczp0fSkpLHllKEFTLChuLHtzb3J0aW5nSW5mbzp0fSk9Pih7Li4ubixzb3J0aW5nSW5mbzp0fSkpKSxiMGU9cGYoXzBlLGcwZSk7ZnVuY3Rpb24gWlcobix0KXtyZXR1cm4gcmYoe2RhdGE6ZjBlLHVpOmIwZX0pKG4sdCl9ZnVuY3Rpb24gdjBlKCl7cmV0dXJuW3thY3Rpb25DcmVhdG9yOkJoLGFsZXJ0RnJvbUFjdGlvbjooKT0+KHtsb2NhbGl6ZWRNZXNzYWdlOiJGYWlsZWQgdG8gZmV0Y2ggcnVucyJ9KX1dfXZhciB3MT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbVHIuZm9yRmVhdHVyZSgicnVucyIsWlcpLHRvLmZvckZlYXR1cmUoW1FXXSksVTYsU2MucmVnaXN0ZXJBbGVydEFjdGlvbnModjBlKSxGU119KSxufSkoKSx5ZD0oKCk9PihmdW5jdGlvbihuKXtuLlJVTlNfQ0hBTkdFRD0iZXhwZXJpbWVudGFsLlJ1bnNDaGFuZ2VkIixuLkdFVF9SVU5TPSJleHBlcmltZW50YWwuR2V0UnVucyIsbi5HRVRfVVJMX0RBVEE9ImV4cGVyaW1lbnRhbC5HZXRVUkxQbHVnaW5EYXRhIixuLkRBVEFfUkVMT0FERUQ9ImV4cGVyaW1lbnRhbC5EYXRhUmVsb2FkZWQifSh5ZHx8KHlkPXt9KSkseWQpKSgpLEpXPW5ldyBXZWFrTWFwLFpoPW5ldyBTZXQsbjI9bmV3IE1hcCxFMT1uZXcgTWFwO2Z1bmN0aW9uICRXKG4sdCl7cmV0dXJuIGU9PntsZXQgaT1FMS5nZXQodCkscj1KVy5nZXQoaSl8fG51bGw7cmV0dXJuIG4ocixlKX19d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG49PntpZigiZXhwZXJpbWVudGFsLmJvb3RzdHJhcCIhPT1uLmRhdGEpcmV0dXJuO2xldCB0PW4ucG9ydHNbMF07aWYoIXQpcmV0dXJuO2xldCBlPW4uc291cmNlP24uc291cmNlLmZyYW1lRWxlbWVudDpudWxsOyFlfHxmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBvcnQ9dCx0aGlzLmlkPTAsdGhpcy5yZXNwb25zZVdhaXRzPW5ldyBNYXAsdGhpcy5saXN0ZW5lcnM9bmV3IE1hcCx0aGlzLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZT0+dGhpcy5vbk1lc3NhZ2UoZSkpfWxpc3Rlbih0LGUpe3RoaXMubGlzdGVuZXJzLnNldCh0LGUpfXVubGlzdGVuKHQpe3RoaXMubGlzdGVuZXJzLmRlbGV0ZSh0KX1hc3luYyBvbk1lc3NhZ2UodCl7bGV0IGU9SlNPTi5wYXJzZSh0LmRhdGEpLGk9ZS50eXBlLHI9ZS5pZCxvPWUucGF5bG9hZCxzPWUuZXJyb3I7aWYoZS5pc1JlcGx5KXtpZighdGhpcy5yZXNwb25zZVdhaXRzLmhhcyhyKSlyZXR1cm47bGV0e3Jlc29sdmU6dSxyZWplY3Q6cH09dGhpcy5yZXNwb25zZVdhaXRzLmdldChyKTtyZXR1cm4gdGhpcy5yZXNwb25zZVdhaXRzLmRlbGV0ZShyKSx2b2lkKHM/cChuZXcgRXJyb3IocykpOnUobykpfWxldCBsPW51bGwsYz1udWxsO2lmKHRoaXMubGlzdGVuZXJzLmhhcyhpKSl7bGV0IHU9dGhpcy5saXN0ZW5lcnMuZ2V0KGkpO3RyeXtsPWF3YWl0IHUobyl9Y2F0Y2gocCl7Yz1wfX10aGlzLnBvc3RNZXNzYWdlKHt0eXBlOmksaWQ6cixwYXlsb2FkOmwsZXJyb3I6Yyxpc1JlcGx5OiEwfSl9cG9zdE1lc3NhZ2UodCl7dGhpcy5wb3J0LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHQpKX1zZW5kTWVzc2FnZSh0LGUpe2xldCBpPXRoaXMuaWQrKztyZXR1cm4gdGhpcy5wb3N0TWVzc2FnZSh7dHlwZTp0LGlkOmkscGF5bG9hZDplLGVycm9yOm51bGwsaXNSZXBseTohMX0pLG5ldyBQcm9taXNlKChvLHMpPT57dGhpcy5yZXNwb25zZVdhaXRzLnNldChpLHtyZXNvbHZlOm8scmVqZWN0OnN9KX0pfX0obik7WmguYWRkKGUpLEUxLnNldChlLHQpLG4uc3RhcnQoKTtmb3IobGV0W2kscl1vZiBuMil7bGV0IG89JFcocixlKTtlLmxpc3RlbihpLG8pfX0odCxlKX0pO3ZhciByMixLaD0oKCk9PntjbGFzcyBue2Jyb2FkY2FzdChlLGkpe3JldHVybiBmdW5jdGlvbihuLHQpe2ZvcihsZXQgaSBvZiBaaClFMS5nZXQoaSkuaXNDb25uZWN0ZWR8fChaaC5kZWxldGUoaSksRTEuZGVsZXRlKGkpKTtsZXQgZT1bLi4uWmhdLm1hcChpPT5pLnNlbmRNZXNzYWdlKG4sdCkpO3JldHVybiBQcm9taXNlLmFsbChlKX0oZSxpKX1saXN0ZW4oZSxpKXshZnVuY3Rpb24obix0KXtuMi5zZXQobix0KTtmb3IobGV0IGUgb2YgWmgpe2xldCBpPSRXKHQsZSk7ZS5saXN0ZW4obixpKX19KGUsaSl9dW5saXN0ZW4oZSl7IWZ1bmN0aW9uKG4pe24yLmRlbGV0ZShuKTtmb3IobGV0IHQgb2YgWmgpdC51bmxpc3RlbihuKX0oZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFQxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmlwYz1lLHRoaXMuc3RvcmU9aX1pbml0KCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtc3RvcmFnZSIpO3RoaXMuaXBjLmxpc3Rlbih5ZC5HRVRfVVJMX0RBVEEsaT0+e2lmKCFpKXJldHVybjtsZXQgcj1gcC4ke2kucGx1Z2luTmFtZX0uYCxvPXt9LHM9ZS50Zl9zdG9yYWdlLmdldFVybEhhc2hEaWN0KCk7Zm9yKGxldCBhIGluIHMpYS5zdGFydHNXaXRoKHIpJiYob1thLnN1YnN0cmluZyhyLmxlbmd0aCldPXNbYV0pO3JldHVybiBvfSksdGhpcy5zdG9yZS5zZWxlY3QoRmgpLnBpcGUoa2UoaT0+bnVsbCE9PWkpLFluKCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuaXBjLmJyb2FkY2FzdCh5ZC5EQVRBX1JFTE9BREVELHZvaWQgMCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhLaCksayhBZSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEQxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmlwYz1lLHRoaXMuc3RvcmU9aX1pbml0KCl7bGV0IGU9dGhpcy5zdG9yZS5zZWxlY3QobHIpLnBpcGUoaG4oaT0+aT9kbihpLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdChEdSx7ZXhwZXJpbWVudElkOm99KSkpLnBpcGUoTihvPT5vLmZsYXQoKSksWW4oKG8scyk9Pm8ubGVuZ3RoPT09cy5sZW5ndGgmJm8uZXZlcnkoKGEsbCk9PnNbbF0uaWQ9PT1hLmlkKSksTihvPT5vLm1hcCgoe25hbWU6c30pPT5zKSkpOkh0KFtdKSkpO2Uuc3Vic2NyaWJlKGk9Pnt0aGlzLmlwYy5icm9hZGNhc3QoeWQuUlVOU19DSEFOR0VELGkpfSksdGhpcy5pcGMubGlzdGVuKHlkLkdFVF9SVU5TLCgpPT5lLnBpcGUoWXQoMSkpLnRvUHJvbWlzZSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhLaCksayhBZSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEkxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXtpLmluaXQoKSxlLmluaXQoKX1yZWdpc3RlclBsdWdpbklmcmFtZShlLGkpeyFmdW5jdGlvbihuLHQpe0pXLnNldChuLHtwbHVnaW5OYW1lOnR9KX0oZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhEMSksayhUMSkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W0toLFQxLEQxXSxpbXBvcnRzOltJaCxHYSx3MV19KSxufSkoKSxKaD1fZSgiW0FsZXJ0XSBBbGVydCBSZXBvcnRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG43PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5hbGVydEFjdGlvbk1vZHVsZT1yLHRoaXMucmVwb3J0UmVnaXN0ZXJlZEFjdGlvbkFsZXJ0cyQ9YXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShOdChvPT57bGV0IHM9dGhpcy5hbGVydEFjdGlvbk1vZHVsZS5nZXRBbGVydEZyb21BY3Rpb24obyk7cyYmdGhpcy5zdG9yZS5kaXNwYXRjaChKaChzKSl9KSkse2Rpc3BhdGNoOiExfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoeG8pLGsoQWUpLGsoU2MpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxJMGU9YnIoe2xhdGVzdEFsZXJ0Om51bGx9LHllKEpoLChuLHtsb2NhbGl6ZWRNZXNzYWdlOnQsZm9sbG93dXBBY3Rpb246ZX0pPT57bGV0IGk9e2xvY2FsaXplZE1lc3NhZ2U6dCxjcmVhdGVkOkRhdGUubm93KCl9O3JldHVybiBlJiYoaS5mb2xsb3d1cEFjdGlvbj1lKSx7Li4ubixsYXRlc3RBbGVydDppfX0pKTtmdW5jdGlvbiBpNyhuLHQpe3JldHVybiBJMGUobix0KX10cnl7cjI9dHlwZW9mIEludGw8InUiJiZJbnRsLnY4QnJlYWtJdGVyYXRvcn1jYXRjaHtyMj0hMX12YXIgJGgsUHYsQTEsYmYsaTIsR249KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybUlkPWUsdGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9ndyh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFyMikmJnR5cGVvZiBDU1M8InUiJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lUPXRoaXMuaXNCcm93c2VyJiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEoIk1TU3RyZWFtImluIHdpbmRvdyksdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRSSURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh2YykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHI3PVsiY29sb3IiLCJidXR0b24iLCJjaGVja2JveCIsImRhdGUiLCJkYXRldGltZS1sb2NhbCIsImVtYWlsIiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwibW9udGgiLCJudW1iZXIiLCJwYXNzd29yZCIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInNlYXJjaCIsInN1Ym1pdCIsInRlbCIsInRleHQiLCJ0aW1lIiwidXJsIiwid2VlayJdO2Z1bmN0aW9uIG8yKCl7aWYoJGgpcmV0dXJuICRoO2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gJGg9bmV3IFNldChyNyk7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gJGg9bmV3IFNldChyNy5maWx0ZXIodD0+KG4uc2V0QXR0cmlidXRlKCJ0eXBlIix0KSxuLnR5cGU9PT10KSkpfWZ1bmN0aW9uIHFvKG4pe3JldHVybiBmdW5jdGlvbigpe2lmKG51bGw9PVB2JiZ0eXBlb2Ygd2luZG93PCJ1Iil0cnl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OigpPT5Qdj0hMH0pKX1maW5hbGx5e1B2PVB2fHwhMX1yZXR1cm4gUHZ9KCk/bjohIW4uY2FwdHVyZX1mdW5jdGlvbiBSMSgpe2lmKG51bGw9PWJmKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBFbGVtZW50fHwhRWxlbWVudClyZXR1cm4gYmY9ITE7aWYoInNjcm9sbEJlaGF2aW9yImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSliZj0hMDtlbHNle2xldCBuPUVsZW1lbnQucHJvdG90eXBlLnNjcm9sbFRvO2JmPSEhbiYmIS9ce1xzKlxbbmF0aXZlIGNvZGVcXVxzKlx9Ly50ZXN0KG4udG9TdHJpbmcoKSl9fXJldHVybiBiZn1mdW5jdGlvbiBlZygpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gMDtpZihudWxsPT1BMSl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1uLnN0eWxlO24uZGlyPSJydGwiLHQud2lkdGg9IjFweCIsdC5vdmVyZmxvdz0iYXV0byIsdC52aXNpYmlsaXR5PSJoaWRkZW4iLHQucG9pbnRlckV2ZW50cz0ibm9uZSIsdC5wb3NpdGlvbj0iYWJzb2x1dGUiO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGk9ZS5zdHlsZTtpLndpZHRoPSIycHgiLGkuaGVpZ2h0PSIxcHgiLG4uYXBwZW5kQ2hpbGQoZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChuKSxBMT0wLDA9PT1uLnNjcm9sbExlZnQmJihuLnNjcm9sbExlZnQ9MSxBMT0wPT09bi5zY3JvbGxMZWZ0PzE6Miksbi5yZW1vdmUoKX1yZXR1cm4gQTF9ZnVuY3Rpb24gT3YoKXtsZXQgbj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudD9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGw7Zm9yKDtuJiZuLnNoYWRvd1Jvb3Q7KXtsZXQgdD1uLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtpZih0PT09bilicmVhaztuPXR9cmV0dXJuIG59ZnVuY3Rpb24gbWEobil7cmV0dXJuIG4uY29tcG9zZWRQYXRoP24uY29tcG9zZWRQYXRoKClbMF06bi50YXJnZXR9ZnVuY3Rpb24ga3YoKXtyZXR1cm4gdHlwZW9mIF9fa2FybWFfXzwidSImJiEhX19rYXJtYV9ffHx0eXBlb2YgamFzbWluZTwidSImJiEhamFzbWluZXx8dHlwZW9mIGplc3Q8InUiJiYhIWplc3R8fHR5cGVvZiBNb2NoYTwidSImJiEhTW9jaGF9ZnVuY3Rpb24gdnIobiwuLi50KXtyZXR1cm4gdC5sZW5ndGg/dC5zb21lKGU9Pm5bZV0pOm4uYWx0S2V5fHxuLnNoaWZ0S2V5fHxuLmN0cmxLZXl8fG4ubWV0YUtleX1mdW5jdGlvbiBSdChuKXtyZXR1cm4gbnVsbCE9biYmImZhbHNlIiE9YCR7bn1gfWZ1bmN0aW9uIF9pKG4sdD0wKXtyZXR1cm4gczIobik/TnVtYmVyKG4pOnR9ZnVuY3Rpb24gczIobil7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQobikpJiYhaXNOYU4oTnVtYmVyKG4pKX1mdW5jdGlvbiB0ZyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX1mdW5jdGlvbiBZcihuKXtyZXR1cm4gbnVsbD09bj8iIjoic3RyaW5nIj09dHlwZW9mIG4/bjpgJHtufXB4YH1mdW5jdGlvbiBIcyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIE1lP24ubmF0aXZlRWxlbWVudDpufXZhciBpZyxhNz0oKCk9PntjbGFzcyBue2NyZWF0ZShlKXtyZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI+InUiP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLFAwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PWUsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfW5nT25EZXN0cm95KCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoaSkpfW9ic2VydmUoZSl7bGV0IGk9SHMoZSk7cmV0dXJuIG5ldyBLdChyPT57bGV0IHM9dGhpcy5fb2JzZXJ2ZUVsZW1lbnQoaSkuc3Vic2NyaWJlKHIpO3JldHVybigpPT57cy51bnN1YnNjcmliZSgpLHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoaSl9fSl9X29ic2VydmVFbGVtZW50KGUpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGUpKXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50Kys7ZWxzZXtsZXQgaT1uZXcgSWUscj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUobz0+aS5uZXh0KG8pKTtyJiZyLm9ic2VydmUoZSx7Y2hhcmFjdGVyRGF0YTohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLHRoaXMuX29ic2VydmVkRWxlbWVudHMuc2V0KGUse29ic2VydmVyOnIsc3RyZWFtOmksY291bnQ6MX0pfXJldHVybiB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5zdHJlYW19X3Vub2JzZXJ2ZUVsZW1lbnQoZSl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkmJih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5jb3VudC0tLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50fHx0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoZSkpfV9jbGVhbnVwT2JzZXJ2ZXIoZSl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkpe2xldHtvYnNlcnZlcjppLHN0cmVhbTpyfT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKTtpJiZpLmRpc2Nvbm5lY3QoKSxyLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKGE3KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUDE9KCgpPT57Y2xhc3MgbntnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVJ0KGUpLHRoaXMuX2Rpc2FibGVkP3RoaXMuX3Vuc3Vic2NyaWJlKCk6dGhpcy5fc3Vic2NyaWJlKCl9Z2V0IGRlYm91bmNlKCl7cmV0dXJuIHRoaXMuX2RlYm91bmNlfXNldCBkZWJvdW5jZShlKXt0aGlzLl9kZWJvdW5jZT1faShlKSx0aGlzLl9zdWJzY3JpYmUoKX1jb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY29udGVudE9ic2VydmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuZXZlbnQ9bmV3IEYsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfW5nQWZ0ZXJDb250ZW50SW5pdCgpeyF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2xldCBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/ZS5waXBlKHdyKHRoaXMuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KX1fdW5zdWJzY3JpYmUoKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFAwZSksQyhNZSksQyhhdCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtPYnNlcnZlQ29udGVudCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImRpc2FibGVkIl0sZGVib3VuY2U6ImRlYm91bmNlIn0sb3V0cHV0czp7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0sZXhwb3J0QXM6WyJjZGtPYnNlcnZlQ29udGVudCJdfSksbn0pKCksbmc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbYTddfSksbn0pKCksYzc9bmV3IFNldCxPMGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX21hdGNoTWVkaWE9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ3aW5kb3cubWF0Y2hNZWRpYT93aW5kb3cubWF0Y2hNZWRpYS5iaW5kKHdpbmRvdyk6RjBlfW1hdGNoTWVkaWEoZSl7cmV0dXJuKHRoaXMuX3BsYXRmb3JtLldFQktJVHx8dGhpcy5fcGxhdGZvcm0uQkxJTkspJiZmdW5jdGlvbihuKXtpZighYzcuaGFzKG4pKXRyeXtpZ3x8KChpZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaWcpKSxpZy5zaGVldCYmKGlnLnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke259IHtib2R5eyB9fWAsMCksYzcuYWRkKG4pKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX0oZSksdGhpcy5fbWF0Y2hNZWRpYShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhHbikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIEYwZShuKXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PW58fCIiPT09bixtZWRpYTpuLGFkZExpc3RlbmVyOigpPT57fSxyZW1vdmVMaXN0ZW5lcjooKT0+e319fXZhciBGdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fbWVkaWFNYXRjaGVyPWUsdGhpcy5fem9uZT1pLHRoaXMuX3F1ZXJpZXM9bmV3IE1hcCx0aGlzLl9kZXN0cm95U3ViamVjdD1uZXcgSWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX1pc01hdGNoZWQoZSl7cmV0dXJuIGQ3KHRnKGUpKS5zb21lKHI9PnRoaXMuX3JlZ2lzdGVyUXVlcnkocikubXFsLm1hdGNoZXMpfW9ic2VydmUoZSl7bGV0IG89ZG4oZDcodGcoZSkpLm1hcChzPT50aGlzLl9yZWdpc3RlclF1ZXJ5KHMpLm9ic2VydmFibGUpKTtyZXR1cm4gbz1KZChvLnBpcGUoWXQoMSkpLG8ucGlwZShpYSgxKSx3cigwKSkpLG8ucGlwZShOKHM9PntsZXQgYT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHMuZm9yRWFjaCgoe21hdGNoZXM6bCxxdWVyeTpjfSk9PnthLm1hdGNoZXM9YS5tYXRjaGVzfHxsLGEuYnJlYWtwb2ludHNbY109bH0pLGF9KSl9X3JlZ2lzdGVyUXVlcnkoZSl7aWYodGhpcy5fcXVlcmllcy5oYXMoZSkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KGUpO2xldCBpPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKGUpLG89e29ic2VydmFibGU6bmV3IEt0KHM9PntsZXQgYT1sPT50aGlzLl96b25lLnJ1bigoKT0+cy5uZXh0KGwpKTtyZXR1cm4gaS5hZGRMaXN0ZW5lcihhKSwoKT0+e2kucmVtb3ZlTGlzdGVuZXIoYSl9fSkucGlwZShxbihpKSxOKCh7bWF0Y2hlczpzfSk9Pih7cXVlcnk6ZSxtYXRjaGVzOnN9KSksb3QodGhpcy5fZGVzdHJveVN1YmplY3QpKSxtcWw6aX07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KGUsbyksb319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhPMGUpLGsoYXQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBkNyhuKXtyZXR1cm4gbi5tYXAodD0+dC5zcGxpdCgiLCIpKS5yZWR1Y2UoKHQsZSk9PnQuY29uY2F0KGUpKS5tYXAodD0+dC50cmltKCkpfWZ1bmN0aW9uIEYxKG4sdCl7cmV0dXJuKG4uZ2V0QXR0cmlidXRlKHQpfHwiIikubWF0Y2goL1xTKy9nKXx8W119dmFyIF83PSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZSIsTzE9ImNkay1kZXNjcmliZWRieS1ob3N0IixjMj0wLEwxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX21lc3NhZ2VSZWdpc3RyeT1uZXcgTWFwLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwsdGhpcy5faWQ9IiIrYzIrKyx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX2lkPWFpKFlwKSsiLSIrYzIrK31kZXNjcmliZShlLGkscil7aWYoIXRoaXMuX2NhbkJlRGVzY3JpYmVkKGUsaSkpcmV0dXJuO2xldCBvPWEyKGkscik7InN0cmluZyIhPXR5cGVvZiBpPyhwNyhpLHRoaXMuX2lkKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KG8se21lc3NhZ2VFbGVtZW50OmkscmVmZXJlbmNlQ291bnQ6MH0pKTp0aGlzLl9tZXNzYWdlUmVnaXN0cnkuaGFzKG8pfHx0aGlzLl9jcmVhdGVNZXNzYWdlRWxlbWVudChpLHIpLHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLG8pfHx0aGlzLl9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsbyl9cmVtb3ZlRGVzY3JpcHRpb24oZSxpLHIpe2lmKCFpfHwhdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm47bGV0IG89YTIoaSxyKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZSxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLG8pLCJzdHJpbmciPT10eXBlb2YgaSl7bGV0IHM9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChvKTtzJiYwPT09cy5yZWZlcmVuY2VDb3VudCYmdGhpcy5fZGVsZXRlTWVzc2FnZUVsZW1lbnQobyl9MD09PXRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCYmKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7TzF9PSIke3RoaXMuX2lkfSJdYCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZVtpXSksZVtpXS5yZW1vdmVBdHRyaWJ1dGUoTzEpO3RoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5yZW1vdmUoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcj1udWxsLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5jbGVhcigpfV9jcmVhdGVNZXNzYWdlRWxlbWVudChlLGkpe2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3A3KHIsdGhpcy5faWQpLHIudGV4dENvbnRlbnQ9ZSxpJiZyLnNldEF0dHJpYnV0ZSgicm9sZSIsaSksdGhpcy5fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KGEyKGUsaSkse21lc3NhZ2VFbGVtZW50OnIscmVmZXJlbmNlQ291bnQ6MH0pfV9kZWxldGVNZXNzYWdlRWxlbWVudChlKXt0aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGUpPy5tZXNzYWdlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmRlbGV0ZShlKX1fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKXtpZih0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcilyZXR1cm47bGV0IGU9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLWNvbnRhaW5lciIsaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtlfVtwbGF0Zm9ybT0ic2VydmVyIl1gKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpW29dLnJlbW92ZSgpO2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixyLmNsYXNzTGlzdC5hZGQoZSksci5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdGhpcy5fcGxhdGZvcm0mJiF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnIuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInNlcnZlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksdGhpcy5fbWVzc2FnZXNDb250YWluZXI9cn1fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZSl7bGV0IGk9RjEoZSwiYXJpYS1kZXNjcmliZWRieSIpLmZpbHRlcihyPT4wIT1yLmluZGV4T2YoXzcpKTtlLnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsaS5qb2luKCIgIikpfV9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsaSl7bGV0IHI9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChpKTsoZnVuY3Rpb24obix0LGUpe2xldCBpPUYxKG4sdCk7aS5zb21lKHI9PnIudHJpbSgpPT1lLnRyaW0oKSl8fChpLnB1c2goZS50cmltKCkpLG4uc2V0QXR0cmlidXRlKHQsaS5qb2luKCIgIikpKX0pKGUsImFyaWEtZGVzY3JpYmVkYnkiLHIubWVzc2FnZUVsZW1lbnQuaWQpLGUuc2V0QXR0cmlidXRlKE8xLHRoaXMuX2lkKSxyLnJlZmVyZW5jZUNvdW50Kyt9X3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UoZSxpKXtsZXQgcj10aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGkpO3IucmVmZXJlbmNlQ291bnQtLSxmdW5jdGlvbihuLHQsZSl7bGV0IHI9RjEobix0KS5maWx0ZXIobz0+byE9ZS50cmltKCkpO3IubGVuZ3RoP24uc2V0QXR0cmlidXRlKHQsci5qb2luKCIgIikpOm4ucmVtb3ZlQXR0cmlidXRlKHQpfShlLCJhcmlhLWRlc2NyaWJlZGJ5IixyLm1lc3NhZ2VFbGVtZW50LmlkKSxlLnJlbW92ZUF0dHJpYnV0ZShPMSl9X2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLGkpe2xldCByPUYxKGUsImFyaWEtZGVzY3JpYmVkYnkiKSxvPXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoaSkscz1vJiZvLm1lc3NhZ2VFbGVtZW50LmlkO3JldHVybiEhcyYmLTEhPXIuaW5kZXhPZihzKX1fY2FuQmVEZXNjcmliZWQoZSxpKXtpZighdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm4hMTtpZihpJiYib2JqZWN0Ij09dHlwZW9mIGkpcmV0dXJuITA7bGV0IHI9bnVsbD09aT8iIjpgJHtpfWAudHJpbSgpLG89ZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtyZXR1cm4hKCFyfHxvJiZvLnRyaW0oKT09PXIpfV9pc0VsZW1lbnROb2RlKGUpe3JldHVybiBlLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEx0KSxrKEduKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gYTIobix0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/YCR7dHx8IiJ9LyR7bn1gOm59ZnVuY3Rpb24gcDcobix0KXtuLmlkfHwobi5pZD1gJHtfN30tJHt0fS0ke2MyKyt9YCl9dmFyIE4xPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2l0ZW1zPXQsdGhpcy5fYWN0aXZlSXRlbUluZGV4PS0xLHRoaXMuX2FjdGl2ZUl0ZW09bnVsbCx0aGlzLl93cmFwPSExLHRoaXMuX2xldHRlcktleVN0cmVhbT1uZXcgSWUsdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9W10sdGhpcy5faG9tZUFuZEVuZD0hMSx0aGlzLl9wYWdlVXBBbmREb3duPXtlbmFibGVkOiExLGRlbHRhOjEwfSx0aGlzLl9za2lwUHJlZGljYXRlRm49ZT0+ZS5kaXNhYmxlZCx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgSWUsdGhpcy5jaGFuZ2U9bmV3IEllLHQgaW5zdGFuY2VvZiBPYSYmKHRoaXMuX2l0ZW1DaGFuZ2VzU3Vic2NyaXB0aW9uPXQuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e2lmKHRoaXMuX2FjdGl2ZUl0ZW0pe2xldCByPWUudG9BcnJheSgpLmluZGV4T2YodGhpcy5fYWN0aXZlSXRlbSk7cj4tMSYmciE9PXRoaXMuX2FjdGl2ZUl0ZW1JbmRleCYmKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1yKX19KSl9c2tpcFByZWRpY2F0ZSh0KXtyZXR1cm4gdGhpcy5fc2tpcFByZWRpY2F0ZUZuPXQsdGhpc313aXRoV3JhcCh0PSEwKXtyZXR1cm4gdGhpcy5fd3JhcD10LHRoaXN9d2l0aFZlcnRpY2FsT3JpZW50YXRpb24odD0hMCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsPXQsdGhpc313aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc313aXRoQWxsb3dlZE1vZGlmaWVyS2V5cyh0KXtyZXR1cm4gdGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cz10LHRoaXN9d2l0aFR5cGVBaGVhZCh0PTIwMCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj10aGlzLl9sZXR0ZXJLZXlTdHJlYW0ucGlwZShOdChlPT50aGlzLl9wcmVzc2VkTGV0dGVycy5wdXNoKGUpKSx3cih0KSxrZSgoKT0+dGhpcy5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjApLE4oKCk9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLmpvaW4oIiIpKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLl9nZXRJdGVtc0FycmF5KCk7Zm9yKGxldCByPTE7cjxpLmxlbmd0aCsxO3IrKyl7bGV0IG89KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCtyKSVpLmxlbmd0aCxzPWlbb107aWYoIXRoaXMuX3NraXBQcmVkaWNhdGVGbihzKSYmMD09PXMuZ2V0TGFiZWwoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5pbmRleE9mKGUpKXt0aGlzLnNldEFjdGl2ZUl0ZW0obyk7YnJlYWt9fXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdfSksdGhpc31jYW5jZWxUeXBlYWhlYWQoKXtyZXR1cm4gdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpc313aXRoSG9tZUFuZEVuZCh0PSEwKXtyZXR1cm4gdGhpcy5faG9tZUFuZEVuZD10LHRoaXN9d2l0aFBhZ2VVcERvd24odD0hMCxlPTEwKXtyZXR1cm4gdGhpcy5fcGFnZVVwQW5kRG93bj17ZW5hYmxlZDp0LGRlbHRhOmV9LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtsZXQgZT10aGlzLl9hY3RpdmVJdGVtO3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KSx0aGlzLl9hY3RpdmVJdGVtIT09ZSYmdGhpcy5jaGFuZ2UubmV4dCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgpfW9uS2V5ZG93bih0KXtsZXQgZT10LmtleUNvZGUscj1bImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiXS5ldmVyeShvPT4hdFtvXXx8dGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cy5pbmRleE9mKG8pPi0xKTtzd2l0Y2goZSl7Y2FzZSA5OnJldHVybiB2b2lkIHRoaXMudGFiT3V0Lm5leHQoKTtjYXNlIDQwOmlmKHRoaXMuX3ZlcnRpY2FsJiZyKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzg6aWYodGhpcy5fdmVydGljYWwmJnIpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzk6aWYodGhpcy5faG9yaXpvbnRhbCYmcil7InJ0bCI9PT10aGlzLl9ob3Jpem9udGFsP3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk6dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM3OmlmKHRoaXMuX2hvcml6b250YWwmJnIpeyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldE5leHRJdGVtQWN0aXZlKCk6dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNjppZih0aGlzLl9ob21lQW5kRW5kJiZyKXt0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM1OmlmKHRoaXMuX2hvbWVBbmRFbmQmJnIpe3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzMzppZih0aGlzLl9wYWdlVXBBbmREb3duLmVuYWJsZWQmJnIpe2xldCBvPXRoaXMuX2FjdGl2ZUl0ZW1JbmRleC10aGlzLl9wYWdlVXBBbmREb3duLmRlbHRhO3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KG8+MD9vOjAsMSk7YnJlYWt9cmV0dXJuO2Nhc2UgMzQ6aWYodGhpcy5fcGFnZVVwQW5kRG93bi5lbmFibGVkJiZyKXtsZXQgbz10aGlzLl9hY3RpdmVJdGVtSW5kZXgrdGhpcy5fcGFnZVVwQW5kRG93bi5kZWx0YSxzPXRoaXMuX2dldEl0ZW1zQXJyYXkoKS5sZW5ndGg7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgobzxzP286cy0xLC0xKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCgocnx8dnIodCwic2hpZnRLZXkiKSkmJih0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTcpJiZ0aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX1nZXQgYWN0aXZlSXRlbUluZGV4KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleH1nZXQgYWN0aXZlSXRlbSgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfWlzVHlwaW5nKCl7cmV0dXJuIHRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wfXNldEZpcnN0SXRlbUFjdGl2ZSgpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9c2V0TGFzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9pdGVtcy5sZW5ndGgtMSwtMSl9c2V0TmV4dEl0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MD90aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKDEpfXNldFByZXZpb3VzSXRlbUFjdGl2ZSgpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9dXBkYXRlQWN0aXZlSXRlbSh0KXtsZXQgZT10aGlzLl9nZXRJdGVtc0FycmF5KCksaT0ibnVtYmVyIj09dHlwZW9mIHQ/dDplLmluZGV4T2YodCk7dGhpcy5fYWN0aXZlSXRlbT1lW2ldPz9udWxsLHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1pfWRlc3Ryb3koKXt0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9pdGVtQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW0uY29tcGxldGUoKSx0aGlzLnRhYk91dC5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fcHJlc3NlZExldHRlcnM9W119X3NldEFjdGl2ZUl0ZW1CeURlbHRhKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfV9zZXRBY3RpdmVJbldyYXBNb2RlKHQpe2xldCBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKTtmb3IobGV0IGk9MTtpPD1lLmxlbmd0aDtpKyspe2xldCByPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCppK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbcl0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShyKX19X3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5fYWN0aXZlSXRlbUluZGV4K3QsdCl9X3NldEFjdGl2ZUl0ZW1CeUluZGV4KHQsZSl7bGV0IGk9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2lmKGlbdF0pe2Zvcig7dGhpcy5fc2tpcFByZWRpY2F0ZUZuKGlbdF0pOylpZighaVt0Kz1lXSlyZXR1cm47dGhpcy5zZXRBY3RpdmVJdGVtKHQpfX1fZ2V0SXRlbXNBcnJheSgpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIE9hP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKTp0aGlzLl9pdGVtc319LG9nPWNsYXNzIGV4dGVuZHMgTjF7c2V0QWN0aXZlSXRlbSh0KXt0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRJbmFjdGl2ZVN0eWxlcygpLHN1cGVyLnNldEFjdGl2ZUl0ZW0odCksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uc2V0QWN0aXZlU3R5bGVzKCl9fSxzZz1jbGFzcyBleHRlbmRzIE4xe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcmlnaW49InByb2dyYW0ifXNldEZvY3VzT3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7c3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5mb2N1cyh0aGlzLl9vcmlnaW4pfX0sYWc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lfWlzRGlzYWJsZWQoZSl7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuISEobi5vZmZzZXRXaWR0aHx8bi5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldENsaWVudFJlY3RzJiZuLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0oZSkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eX1pc1RhYmJhYmxlKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7bGV0IGk9ZnVuY3Rpb24obil7dHJ5e3JldHVybiBuLmZyYW1lRWxlbWVudH1jYXRjaHtyZXR1cm4gbnVsbH19KGZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fShlKSk7aWYoaSYmKC0xPT09ZjcoaSl8fCF0aGlzLmlzVmlzaWJsZShpKSkpcmV0dXJuITE7bGV0IHI9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG89ZjcoZSk7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKT8tMSE9PW86ISgiaWZyYW1lIj09PXJ8fCJvYmplY3QiPT09cnx8dGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksZT0iaW5wdXQiPT09dCYmbi50eXBlO3JldHVybiJ0ZXh0Ij09PWV8fCJwYXNzd29yZCI9PT1lfHwic2VsZWN0Ij09PXR8fCJ0ZXh0YXJlYSI9PT10fShlKSkmJigiYXVkaW8iPT09cj8hIWUuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiYtMSE9PW86InZpZGVvIj09PXI/LTEhPT1vJiYobnVsbCE9PW98fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1h8fGUuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKTplLnRhYkluZGV4Pj0wKX1pc0ZvY3VzYWJsZShlLGkpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4hZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiJpbnB1dCI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJiJoaWRkZW4iPT1uLnR5cGV9KG4pJiYoZnVuY3Rpb24obil7bGV0IHQ9bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10fHwic2VsZWN0Ij09PXR8fCJidXR0b24iPT09dHx8InRleHRhcmVhIj09PXR9KG4pfHxmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuImEiPT1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KG4pJiZuLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfShuKXx8bi5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxiNyhuKSl9KGUpJiYhdGhpcy5pc0Rpc2FibGVkKGUpJiYoaT8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEduKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gYjcobil7aWYoIW4uaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx2b2lkIDA9PT1uLnRhYkluZGV4KXJldHVybiExO2xldCB0PW4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3JldHVybiEoIXR8fGlzTmFOKHBhcnNlSW50KHQsMTApKSl9ZnVuY3Rpb24gZjcobil7aWYoIWI3KG4pKXJldHVybiBudWxsO2xldCB0PXBhcnNlSW50KG4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKHQpPy0xOnR9dmFyIE52PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2NoZWNrZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kb2N1bWVudD1yfWNyZWF0ZShlLGk9ITEpe3JldHVybiBuZXcgY2xhc3N7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZCh0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9Y29uc3RydWN0b3IodCxlLGkscixvPSExKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsb3x8dGhpcy5hdHRhY2hBbmNob3JzKCl9ZGVzdHJveSgpe2xldCB0PXRoaXMuX3N0YXJ0QW5jaG9yLGU9dGhpcy5fZW5kQW5jaG9yO3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLHQucmVtb3ZlKCkpLGUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxlLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudCh0KSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHt0fV0sIFtjZGtGb2N1c1JlZ2lvbiR7dH1dLCBbY2RrLWZvY3VzLSR7dH1dYCk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX1mb2N1c0luaXRpYWxFbGVtZW50KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtpZihlKXtpZighdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShlKSl7bGV0IGk9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoZSk7cmV0dXJuIGk/LmZvY3VzKHQpLCEhaX1yZXR1cm4gZS5mb2N1cyh0KSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KHQpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl7bGV0IGU9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWhhc0F0dGFjaGVkKCl7cmV0dXJuIHRoaXMuX2hhc0F0dGFjaGVkfV9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7bGV0IGU9dC5jaGlsZHJlbjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9ZVtpXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW47Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPWVbaV0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2NyZWF0ZUFuY2hvcigpe2xldCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLHQpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHR9X3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsZSl7dD9lLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik6ZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyh0KXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9lbmRBbmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKHQpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT90KCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoWXQoMSkpLnN1YnNjcmliZSh0KX19KGUsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoYWcpLGsoYXQpLGsoTHQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBMdihuKXtyZXR1cm4gMD09PW4uYnV0dG9uc3x8MD09PW4ub2Zmc2V0WCYmMD09PW4ub2Zmc2V0WX1mdW5jdGlvbiBCdihuKXtsZXQgdD1uLnRvdWNoZXMmJm4udG91Y2hlc1swXXx8bi5jaGFuZ2VkVG91Y2hlcyYmbi5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCF0fHwtMSE9PXQuaWRlbnRpZmllcnx8bnVsbCE9dC5yYWRpdXNYJiYxIT09dC5yYWRpdXNYfHxudWxsIT10LnJhZGl1c1kmJjEhPT10LnJhZGl1c1kpfW5ldyBpZSgiRk9DVVNfVFJBUF9JTkVSVF9TVFJBVEVHWSIpO3ZhciBpX2U9bmV3IGllKCJjZGstaW5wdXQtbW9kYWxpdHktZGV0ZWN0b3Itb3B0aW9ucyIpLHJfZT17aWdub3JlS2V5czpbMTgsMTcsMjI0LDkxLDE2XX0scmc9cW8oe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLG9fZT0oKCk9PntjbGFzcyBue2dldCBtb3N0UmVjZW50TW9kYWxpdHkoKXtyZXR1cm4gdGhpcy5fbW9kYWxpdHkudmFsdWV9Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW51bGwsdGhpcy5fbW9kYWxpdHk9bmV3IEFpKG51bGwpLHRoaXMuX2xhc3RUb3VjaE1zPTAsdGhpcy5fb25LZXlkb3duPXM9Pnt0aGlzLl9vcHRpb25zPy5pZ25vcmVLZXlzPy5zb21lKGE9PmE9PT1zLmtleUNvZGUpfHwodGhpcy5fbW9kYWxpdHkubmV4dCgia2V5Ym9hcmQiKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW1hKHMpKX0sdGhpcy5fb25Nb3VzZWRvd249cz0+e0RhdGUubm93KCktdGhpcy5fbGFzdFRvdWNoTXM8NjUwfHwodGhpcy5fbW9kYWxpdHkubmV4dChMdihzKT8ia2V5Ym9hcmQiOiJtb3VzZSIpLHRoaXMuX21vc3RSZWNlbnRUYXJnZXQ9bWEocykpfSx0aGlzLl9vblRvdWNoc3RhcnQ9cz0+e0J2KHMpP3RoaXMuX21vZGFsaXR5Lm5leHQoImtleWJvYXJkIik6KHRoaXMuX2xhc3RUb3VjaE1zPURhdGUubm93KCksdGhpcy5fbW9kYWxpdHkubmV4dCgidG91Y2giKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW1hKHMpKX0sdGhpcy5fb3B0aW9ucz17Li4ucl9lLC4uLm99LHRoaXMubW9kYWxpdHlEZXRlY3RlZD10aGlzLl9tb2RhbGl0eS5waXBlKGlhKDEpKSx0aGlzLm1vZGFsaXR5Q2hhbmdlZD10aGlzLm1vZGFsaXR5RGV0ZWN0ZWQucGlwZShZbigpKSxlLmlzQnJvd3NlciYmaS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlkb3duLHJnKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24scmcpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LHJnKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kYWxpdHkuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleWRvd24scmcpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24scmcpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hzdGFydCxyZykpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEduKSxrKGF0KSxrKEx0KSxrKGlfZSw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksc19lPW5ldyBpZSgibGl2ZUFubm91bmNlckVsZW1lbnQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksbF9lPW5ldyBpZSgiTElWRV9BTk5PVU5DRVJfREVGQVVMVF9PUFRJT05TIiksY19lPTAsVnY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1vLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fbGl2ZUVsZW1lbnQ9ZXx8dGhpcy5fY3JlYXRlTGl2ZUVsZW1lbnQoKX1hbm5vdW5jZShlLC4uLmkpe2xldCBvLHMscj10aGlzLl9kZWZhdWx0T3B0aW9ucztyZXR1cm4gMT09PWkubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGlbMF0/cz1pWzBdOltvLHNdPWksdGhpcy5jbGVhcigpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLG98fChvPXImJnIucG9saXRlbmVzcz9yLnBvbGl0ZW5lc3M6InBvbGl0ZSIpLG51bGw9PXMmJnImJihzPXIuZHVyYXRpb24pLHRoaXMuX2xpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIixvKSx0aGlzLl9saXZlRWxlbWVudC5pZCYmdGhpcy5fZXhwb3NlQW5ub3VuY2VyVG9Nb2RhbHModGhpcy5fbGl2ZUVsZW1lbnQuaWQpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+KHRoaXMuX2N1cnJlbnRQcm9taXNlfHwodGhpcy5fY3VycmVudFByb21pc2U9bmV3IFByb21pc2UoYT0+dGhpcy5fY3VycmVudFJlc29sdmU9YSkpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLHRoaXMuX3ByZXZpb3VzVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9ZSwibnVtYmVyIj09dHlwZW9mIHMmJih0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5jbGVhcigpLHMpKSx0aGlzLl9jdXJyZW50UmVzb2x2ZSgpLHRoaXMuX2N1cnJlbnRQcm9taXNlPXRoaXMuX2N1cnJlbnRSZXNvbHZlPXZvaWQgMH0sMTAwKSx0aGlzLl9jdXJyZW50UHJvbWlzZSkpfWNsZWFyKCl7dGhpcy5fbGl2ZUVsZW1lbnQmJih0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD0iIil9bmdPbkRlc3Ryb3koKXtjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9saXZlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9jdXJyZW50UmVzb2x2ZT8uKCksdGhpcy5fY3VycmVudFByb21pc2U9dGhpcy5fY3VycmVudFJlc29sdmU9dm9pZCAwfV9jcmVhdGVMaXZlRWxlbWVudCgpe2xldCBlPSJjZGstbGl2ZS1hbm5vdW5jZXItZWxlbWVudCIsaT10aGlzLl9kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpLHI9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5yZW1vdmUoKTtyZXR1cm4gci5jbGFzc0xpc3QuYWRkKGUpLHIuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksci5pZD0iY2RrLWxpdmUtYW5ub3VuY2VyLSIrY19lKyssdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKSxyfV9leHBvc2VBbm5vdW5jZXJUb01vZGFscyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdib2R5ID4gLmNkay1vdmVybGF5LWNvbnRhaW5lciBbYXJpYS1tb2RhbD0idHJ1ZSJdJyk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl0scz1vLmdldEF0dHJpYnV0ZSgiYXJpYS1vd25zIik7cz8tMT09PXMuaW5kZXhPZihlKSYmby5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIscysiICIrZSk6by5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHNfZSw4KSxrKGF0KSxrKEx0KSxrKGxfZSw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksZF9lPW5ldyBpZSgiY2RrLWZvY3VzLW1vbml0b3ItZGVmYXVsdC1vcHRpb25zIiksazE9cW8oe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLFhyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvcj1yLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb249ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MCx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudD1uZXcgTWFwLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXI9KCk9Pnt0aGlzLl93aW5kb3dGb2N1c2VkPSEwLHRoaXMuX3dpbmRvd0ZvY3VzVGltZW91dElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl93aW5kb3dGb2N1c2VkPSExKX0sdGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3Rvcj1uZXcgSWUsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj1hPT57Zm9yKGxldCBjPW1hKGEpO2M7Yz1jLnBhcmVudEVsZW1lbnQpImZvY3VzIj09PWEudHlwZT90aGlzLl9vbkZvY3VzKGEsYyk6dGhpcy5fb25CbHVyKGEsYyl9LHRoaXMuX2RvY3VtZW50PW8sdGhpcy5fZGV0ZWN0aW9uTW9kZT1zPy5kZXRlY3Rpb25Nb2RlfHwwfW1vbml0b3IoZSxpPSExKXtsZXQgcj1IcyhlKTtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwxIT09ci5ub2RlVHlwZSlyZXR1cm4gSHQobnVsbCk7bGV0IG89ZnVuY3Rpb24obil7aWYoZnVuY3Rpb24oKXtpZihudWxsPT1pMil7bGV0IG49dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5oZWFkOm51bGw7aTI9ISghbnx8IW4uY3JlYXRlU2hhZG93Um9vdCYmIW4uYXR0YWNoU2hhZG93KX1yZXR1cm4gaTJ9KCkpe2xldCB0PW4uZ2V0Um9vdE5vZGU/bi5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFkb3dSb290JiZ0IGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gdH1yZXR1cm4gbnVsbH0ocil8fHRoaXMuX2dldERvY3VtZW50KCkscz10aGlzLl9lbGVtZW50SW5mby5nZXQocik7aWYocylyZXR1cm4gaSYmKHMuY2hlY2tDaGlsZHJlbj0hMCkscy5zdWJqZWN0O2xldCBhPXtjaGVja0NoaWxkcmVuOmksc3ViamVjdDpuZXcgSWUscm9vdE5vZGU6b307cmV0dXJuIHRoaXMuX2VsZW1lbnRJbmZvLnNldChyLGEpLHRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKGEpLGEuc3ViamVjdH1zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1IcyhlKSxyPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKTtyJiYoci5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUoaSksdGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKHIpKX1mb2N1c1ZpYShlLGkscil7bGV0IG89SHMoZSk7bz09PXRoaXMuX2dldERvY3VtZW50KCkuYWN0aXZlRWxlbWVudD90aGlzLl9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKG8pLmZvckVhY2goKFthLGxdKT0+dGhpcy5fb3JpZ2luQ2hhbmdlZChhLGksbCkpOih0aGlzLl9zZXRPcmlnaW4oaSksImZ1bmN0aW9uIj09dHlwZW9mIG8uZm9jdXMmJm8uZm9jdXMocikpfW5nT25EZXN0cm95KCl7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaCgoZSxpKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhpKSl9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fZ2V0Rm9jdXNPcmlnaW4oZSl7cmV0dXJuIHRoaXMuX29yaWdpbj90aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj90aGlzLl9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKGUpPyJ0b3VjaCI6InByb2dyYW0iOnRoaXMuX29yaWdpbjp0aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOmUmJnRoaXMuX2lzTGFzdEludGVyYWN0aW9uRnJvbUlucHV0TGFiZWwoZSk/Im1vdXNlIjoicHJvZ3JhbSJ9X3Nob3VsZEJlQXR0cmlidXRlZFRvVG91Y2goZSl7cmV0dXJuIDE9PT10aGlzLl9kZXRlY3Rpb25Nb2RlfHwhIWU/LmNvbnRhaW5zKHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5fbW9zdFJlY2VudFRhcmdldCl9X3NldENsYXNzZXMoZSxpKXtlLmNsYXNzTGlzdC50b2dnbGUoImNkay1mb2N1c2VkIiwhIWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1pKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay1rZXlib2FyZC1mb2N1c2VkIiwia2V5Ym9hcmQiPT09aSksZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09aSl9X3NldE9yaWdpbihlLGk9ITEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX29yaWdpbj1lLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSJ0b3VjaCI9PT1lJiZpLDA9PT10aGlzLl9kZXRlY3Rpb25Nb2RlJiYoY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCksdGhpcy5fb3JpZ2luVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuX29yaWdpbj1udWxsLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPzY1MDoxKSl9KX1fb25Gb2N1cyhlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKSxvPW1hKGUpOyFyfHwhci5jaGVja0NoaWxkcmVuJiZpIT09b3x8dGhpcy5fb3JpZ2luQ2hhbmdlZChpLHRoaXMuX2dldEZvY3VzT3JpZ2luKG8pLHIpfV9vbkJsdXIoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSk7IXJ8fHIuY2hlY2tDaGlsZHJlbiYmZS5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmaS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbWl0T3JpZ2luKHIsbnVsbCkpfV9lbWl0T3JpZ2luKGUsaSl7ZS5zdWJqZWN0Lm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9PmUuc3ViamVjdC5uZXh0KGkpKX1fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47bGV0IGk9ZS5yb290Tm9kZSxyPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKXx8MDtyfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGsxKSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsazEpfSksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGkscisxKSwxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmKHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dldFdpbmRvdygpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyKX0pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5tb2RhbGl0eURldGVjdGVkLnBpcGUob3QodGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3RvcikpLnN1YnNjcmliZShvPT57dGhpcy5fc2V0T3JpZ2luKG8sITApfSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcnMoZSl7bGV0IGk9ZS5yb290Tm9kZTtpZih0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5oYXMoaSkpe2xldCByPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKTtyPjE/dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGksci0xKTooaS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixrMSksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGsxKSx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5kZWxldGUoaSkpfS0tdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50fHwodGhpcy5fZ2V0V2luZG93KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXIpLHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubmV4dCgpLGNsZWFyVGltZW91dCh0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCkpfV9vcmlnaW5DaGFuZ2VkKGUsaSxyKXt0aGlzLl9zZXRDbGFzc2VzKGUsaSksdGhpcy5fZW1pdE9yaWdpbihyLGkpLHRoaXMuX2xhc3RGb2N1c09yaWdpbj1pfV9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKChyLG8pPT57KG89PT1lfHxyLmNoZWNrQ2hpbGRyZW4mJm8uY29udGFpbnMoZSkpJiZpLnB1c2goW28scl0pfSksaX1faXNMYXN0SW50ZXJhY3Rpb25Gcm9tSW5wdXRMYWJlbChlKXtsZXR7X21vc3RSZWNlbnRUYXJnZXQ6aSxtb3N0UmVjZW50TW9kYWxpdHk6cn09dGhpcy5faW5wdXRNb2RhbGl0eURldGVjdG9yO2lmKCJtb3VzZSIhPT1yfHwhaXx8aT09PWV8fCJJTlBVVCIhPT1lLm5vZGVOYW1lJiYiVEVYVEFSRUEiIT09ZS5ub2RlTmFtZXx8ZS5kaXNhYmxlZClyZXR1cm4hMTtsZXQgbz1lLmxhYmVscztpZihvKWZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uY29udGFpbnMoaSkpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoYXQpLGsoR24pLGsob19lKSxrKEx0LDgpLGsoZF9lLDgpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx5Nz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2ZvY3VzT3JpZ2luPW51bGwsdGhpcy5jZGtGb2N1c0NoYW5nZT1uZXcgRn1nZXQgZm9jdXNPcmlnaW4oKXtyZXR1cm4gdGhpcy5fZm9jdXNPcmlnaW59bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX21vbml0b3JTdWJzY3JpcHRpb249dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IoZSwxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoImNka01vbml0b3JTdWJ0cmVlRm9jdXMiKSkuc3Vic2NyaWJlKGk9Pnt0aGlzLl9mb2N1c09yaWdpbj1pLHRoaXMuY2RrRm9jdXNDaGFuZ2UuZW1pdChpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24mJnRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyhYcikpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIl0sWyIiLCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIiwiIl1dLG91dHB1dHM6e2Nka0ZvY3VzQ2hhbmdlOiJjZGtGb2N1c0NoYW5nZSJ9LGV4cG9ydEFzOlsiY2RrTW9uaXRvckZvY3VzIl19KSxufSkoKSxtNz0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLGg3PSJjZGstaGlnaC1jb250cmFzdC13aGl0ZS1vbi1ibGFjayIsbDI9ImNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSIsXzI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPWFpKEZ2KS5vYnNlcnZlKCIoZm9yY2VkLWNvbG9yczogYWN0aXZlKSIpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlJiYodGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITEsdGhpcy5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSl9KX1nZXRIaWdoQ29udHJhc3RNb2RlKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gMDtsZXQgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiKDEsMiwzKSIsZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyxyPWkmJmkuZ2V0Q29tcHV0ZWRTdHlsZT9pLmdldENvbXB1dGVkU3R5bGUoZSk6bnVsbCxvPShyJiZyLmJhY2tncm91bmRDb2xvcnx8IiIpLnJlcGxhY2UoLyAvZywiIik7c3dpdGNoKGUucmVtb3ZlKCksbyl7Y2FzZSJyZ2IoMCwwLDApIjpjYXNlInJnYig0NSw1MCw1NCkiOmNhc2UicmdiKDMyLDMyLDMyKSI6cmV0dXJuIDI7Y2FzZSJyZ2IoMjU1LDI1NSwyNTUpIjpjYXNlInJnYigyNTUsMjUwLDIzOSkiOnJldHVybiAxfXJldHVybiAwfW5nT25EZXN0cm95KCl7dGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3Nlcygpe2lmKCF0aGlzLl9oYXNDaGVja2VkSGlnaENvbnRyYXN0TW9kZSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9kb2N1bWVudC5ib2R5KXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdDtlLnJlbW92ZShsMixtNyxoNyksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7bGV0IGk9dGhpcy5nZXRIaWdoQ29udHJhc3RNb2RlKCk7MT09PWk/ZS5hZGQobDIsbTcpOjI9PT1pJiZlLmFkZChsMixoNyl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEduKSxrKEx0KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksbGc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKF8yKSl9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W25nXX0pLG59KSgpLHVfZT1uZXcgaWUoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBhaShMdCl9fSksZl9lPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pLFhpPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgRixlJiYodGhpcy52YWx1ZT1mdW5jdGlvbihuKXtsZXQgdD1uPy50b0xvd2VyQ2FzZSgpfHwiIjtyZXR1cm4iYXV0byI9PT10JiZ0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yPy5sYW5ndWFnZT9mX2UudGVzdChuYXZpZ2F0b3IubGFuZ3VhZ2UpPyJydGwiOiJsdHIiOiJydGwiPT09dD8icnRsIjoibHRyIn0oKGUuYm9keT9lLmJvZHkuZGlyOm51bGwpfHwoZS5kb2N1bWVudEVsZW1lbnQ/ZS5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpfHwibHRyIikpfW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh1X2UsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLE91PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxoX2U9WyJ0ZXh0Il07ZnVuY3Rpb24gZ19lKG4sdCl7aWYoMSZuJiZQKDAsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDYpLDImbil7bGV0IGU9dygpO18oInN0YXRlIixlLnNlbGVjdGVkPyJjaGVja2VkIjoidW5jaGVja2VkIikoImRpc2FibGVkIixlLmRpc2FibGVkKX19ZnVuY3Rpb24gX19lKG4sdCl7MSZuJiZQKDAsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDcpLDImbiYmXygiZGlzYWJsZWQiLHcoKS5kaXNhYmxlZCl9ZnVuY3Rpb24gYl9lKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiw4KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiKCIsZS5ncm91cC5sYWJlbCwiKSIpfX12YXIgdl9lPVtbWyJtYXQtaWNvbiJdXSwiKiJdLHlfZT1bIm1hdC1pY29uIiwiKiJdLEU3PShuZXcgeWwoIjE1LjIuOSIpLCgoKT0+e2NsYXNzIG57fXJldHVybiBuLlNUQU5EQVJEX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkiLG4uREVDRUxFUkFUSU9OX0NVUlZFPSJjdWJpYy1iZXppZXIoMC4wLDAuMCwwLjIsMSkiLG4uQUNDRUxFUkFUSU9OX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwxLDEpIixuLlNIQVJQX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjYsMSkiLG59KSgpKSxUNz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5DT01QTEVYPSIzNzVtcyIsbi5FTlRFUklORz0iMjI1bXMiLG4uRVhJVElORz0iMTk1bXMiLG59KSgpLENfZT1uZXcgaWUoIm1hdC1zYW5pdHktY2hlY2tzIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiEwfX0pLGZuPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3Nhbml0eUNoZWNrcz1pLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMSxlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3N8fCh0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSEwKX1fY2hlY2tJc0VuYWJsZWQoZSl7cmV0dXJuIWt2KCkmJigiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLl9zYW5pdHlDaGVja3M/dGhpcy5fc2FuaXR5Q2hlY2tzOiEhdGhpcy5fc2FuaXR5Q2hlY2tzW2VdKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhfMiksayhDX2UsOCksayhMdCkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltPdSxPdV19KSxufSkoKTtmdW5jdGlvbiBzbyhuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9UnQodCl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZWQ9ITF9fX1mdW5jdGlvbiB6cyhuLHQpe3JldHVybiBjbGFzcyBleHRlbmRzIG57Z2V0IGNvbG9yKCl7cmV0dXJuIHRoaXMuX2NvbG9yfXNldCBjb2xvcihlKXtsZXQgaT1lfHx0aGlzLmRlZmF1bHRDb2xvcjtpIT09dGhpcy5fY29sb3ImJih0aGlzLl9jb2xvciYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYG1hdC0ke3RoaXMuX2NvbG9yfWApLGkmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBtYXQtJHtpfWApLHRoaXMuX2NvbG9yPWkpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuZGVmYXVsdENvbG9yPXQsdGhpcy5jb2xvcj10fX19ZnVuY3Rpb24gdXMobil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntnZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9UnQodCl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX19fWZ1bmN0aW9uIGt1KG4sdD0wKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2dldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPy0xOnRoaXMuX3RhYkluZGV4fXNldCB0YWJJbmRleChlKXt0aGlzLl90YWJJbmRleD1udWxsIT1lP19pKGUpOnRoaXMuZGVmYXVsdFRhYkluZGV4fWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuX3RhYkluZGV4PXQsdGhpcy5kZWZhdWx0VGFiSW5kZXg9dH19fWZ1bmN0aW9uIEIxKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57dXBkYXRlRXJyb3JTdGF0ZSgpe2xldCB0PXRoaXMuZXJyb3JTdGF0ZSxvPSh0aGlzLmVycm9yU3RhdGVNYXRjaGVyfHx0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIpLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbD90aGlzLm5nQ29udHJvbC5jb250cm9sOm51bGwsdGhpcy5fcGFyZW50Rm9ybUdyb3VwfHx0aGlzLl9wYXJlbnRGb3JtKTtvIT09dCYmKHRoaXMuZXJyb3JTdGF0ZT1vLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5lcnJvclN0YXRlPSExfX19ZnVuY3Rpb24gVjEobil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycz1bXSx0aGlzLmluaXRpYWxpemVkPW5ldyBLdChlPT57dGhpcy5faXNJbml0aWFsaXplZD90aGlzLl9ub3RpZnlTdWJzY3JpYmVyKGUpOnRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycy5wdXNoKGUpfSl9X21hcmtJbml0aWFsaXplZCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzLmZvckVhY2godGhpcy5fbm90aWZ5U3Vic2NyaWJlciksdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzPW51bGx9X25vdGlmeVN1YnNjcmliZXIodCl7dC5uZXh0KCksdC5jb21wbGV0ZSgpfX19bmV3IGllKCJNQVRfREFURV9MT0NBTEUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGFpKGNkKX19KSxuZXcgaWUoIm1hdC1kYXRlLWZvcm1hdHMiKTt2YXIgSDE9KCgpPT57Y2xhc3Mgbntpc0Vycm9yU3RhdGUoZSxpKXtyZXR1cm4hIShlJiZlLmludmFsaWQmJihlLnRvdWNoZWR8fGkmJmkuc3VibWl0dGVkKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHg3PXFvKHtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9KSxDNz17ZW50ZXJEdXJhdGlvbjoyMjUsZXhpdER1cmF0aW9uOjE1MH0sTTc9cW8oe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHc3PVsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLFM3PVsibW91c2V1cCIsIm1vdXNlbGVhdmUiLCJ0b3VjaGVuZCIsInRvdWNoY2FuY2VsIl0sdmY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fdGFyZ2V0PXQsdGhpcy5fbmdab25lPWUsdGhpcy5fcGxhdGZvcm09cix0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IE1hcCx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSExLHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1IcyhpKSl9ZmFkZUluUmlwcGxlKHQsZSxpPXt9KXtsZXQgcj10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz17Li4uQzcsLi4uaS5hbmltYXRpb259O2kuY2VudGVyZWQmJih0PXIubGVmdCtyLndpZHRoLzIsZT1yLnRvcCtyLmhlaWdodC8yKTtsZXQgcz1pLnJhZGl1c3x8ZnVuY3Rpb24obix0LGUpe2xldCBpPU1hdGgubWF4KE1hdGguYWJzKG4tZS5sZWZ0KSxNYXRoLmFicyhuLWUucmlnaHQpKSxyPU1hdGgubWF4KE1hdGguYWJzKHQtZS50b3ApLE1hdGguYWJzKHQtZS5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaStyKnIpfSh0LGUsciksYT10LXIubGVmdCxsPWUtci50b3AsYz1vLmVudGVyRHVyYXRpb24sZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm1hdC1yaXBwbGUtZWxlbWVudCIpLGQuc3R5bGUubGVmdD1hLXMrInB4IixkLnN0eWxlLnRvcD1sLXMrInB4IixkLnN0eWxlLmhlaWdodD0yKnMrInB4IixkLnN0eWxlLndpZHRoPTIqcysicHgiLG51bGwhPWkuY29sb3ImJihkLnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmNvbG9yKSxkLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gJHtjfW1zYCx0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGQpO2xldCB1PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGQpLGY9dS50cmFuc2l0aW9uRHVyYXRpb24sbT0ibm9uZSI9PT11LnRyYW5zaXRpb25Qcm9wZXJ0eXx8IjBzIj09PWZ8fCIwcywgMHMiPT09Znx8MD09PXIud2lkdGgmJjA9PT1yLmhlaWdodCxiPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPWksdGhpcy5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3M9cix0aGlzLnN0YXRlPTN9ZmFkZU91dCgpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9fSh0aGlzLGQsaSxtKTtkLnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUzZCgxLCAxLCAxKSIsYi5zdGF0ZT0wLGkucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9Yik7bGV0IE09bnVsbDtyZXR1cm4hbSYmKGN8fG8uZXhpdER1cmF0aW9uKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IHk9KCk9PnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24oYikseD0oKT0+dGhpcy5fZGVzdHJveVJpcHBsZShiKTtkLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHkpLGQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIseCksTT17b25UcmFuc2l0aW9uRW5kOnksb25UcmFuc2l0aW9uQ2FuY2VsOnh9fSksdGhpcy5fYWN0aXZlUmlwcGxlcy5zZXQoYixNKSwobXx8IWMpJiZ0aGlzLl9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKGIpLGJ9ZmFkZU91dFJpcHBsZSh0KXtpZigyPT09dC5zdGF0ZXx8Mz09PXQuc3RhdGUpcmV0dXJuO2xldCBlPXQuZWxlbWVudCxpPXsuLi5DNywuLi50LmNvbmZpZy5hbmltYXRpb259O2Uuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2kuZXhpdER1cmF0aW9ufW1zYCxlLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9MiwodC5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3N8fCFpLmV4aXREdXJhdGlvbikmJnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24odCl9ZmFkZU91dEFsbCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9PnQuZmFkZU91dCgpKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9Pnt0LmNvbmZpZy5wZXJzaXN0ZW50fHx0LmZhZGVPdXQoKX0pfXNldHVwVHJpZ2dlckV2ZW50cyh0KXtsZXQgZT1Icyh0KTshdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwhZXx8ZT09PXRoaXMuX3RyaWdnZXJFbGVtZW50fHwodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsdzcuZm9yRWFjaChpPT57dmYuX2V2ZW50TWFuYWdlci5hZGRIYW5kbGVyKHRoaXMuX25nWm9uZSxpLGUsdGhpcyl9KSl9aGFuZGxlRXZlbnQodCl7Im1vdXNlZG93biI9PT10LnR5cGU/dGhpcy5fb25Nb3VzZWRvd24odCk6InRvdWNoc3RhcnQiPT09dC50eXBlP3RoaXMuX29uVG91Y2hTdGFydCh0KTp0aGlzLl9vblBvaW50ZXJVcCgpLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntTNy5mb3JFYWNoKGU9Pnt0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGUsdGhpcyxNNyl9KX0pLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQ9ITApfV9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKHQpezA9PT10LnN0YXRlP3RoaXMuX3N0YXJ0RmFkZU91dFRyYW5zaXRpb24odCk6Mj09PXQuc3RhdGUmJnRoaXMuX2Rlc3Ryb3lSaXBwbGUodCl9X3N0YXJ0RmFkZU91dFRyYW5zaXRpb24odCl7bGV0IGU9dD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUse3BlcnNpc3RlbnQ6aX09dC5jb25maWc7dC5zdGF0ZT0xLCFpJiYoIWV8fCF0aGlzLl9pc1BvaW50ZXJEb3duKSYmdC5mYWRlT3V0KCl9X2Rlc3Ryb3lSaXBwbGUodCl7bGV0IGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5nZXQodCk/P251bGw7dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCksdGhpcy5fYWN0aXZlUmlwcGxlcy5zaXplfHwodGhpcy5fY29udGFpbmVyUmVjdD1udWxsKSx0PT09dGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZSYmKHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bnVsbCksdC5zdGF0ZT0zLG51bGwhPT1lJiYodC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGUub25UcmFuc2l0aW9uRW5kKSx0LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIsZS5vblRyYW5zaXRpb25DYW5jZWwpKSx0LmVsZW1lbnQucmVtb3ZlKCl9X29uTW91c2Vkb3duKHQpe2xldCBlPUx2KHQpLGk9dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCYmRGF0ZS5ub3coKTx0aGlzLl9sYXN0VG91Y2hTdGFydEV2ZW50KzgwMDshdGhpcy5fdGFyZ2V0LnJpcHBsZURpc2FibGVkJiYhZSYmIWkmJih0aGlzLl9pc1BvaW50ZXJEb3duPSEwLHRoaXMuZmFkZUluUmlwcGxlKHQuY2xpZW50WCx0LmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfV9vblRvdWNoU3RhcnQodCl7aWYoIXRoaXMuX3RhcmdldC5yaXBwbGVEaXNhYmxlZCYmIUJ2KHQpKXt0aGlzLl9sYXN0VG91Y2hTdGFydEV2ZW50PURhdGUubm93KCksdGhpcy5faXNQb2ludGVyRG93bj0hMDtsZXQgZT10LmNoYW5nZWRUb3VjaGVzO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZmFkZUluUmlwcGxlKGVbaV0uY2xpZW50WCxlW2ldLmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZyl9fV9vblBvaW50ZXJVcCgpeyF0aGlzLl9pc1BvaW50ZXJEb3dufHwodGhpcy5faXNQb2ludGVyRG93bj0hMSx0aGlzLl9nZXRBY3RpdmVSaXBwbGVzKCkuZm9yRWFjaCh0PT57IXQuY29uZmlnLnBlcnNpc3RlbnQmJigxPT09dC5zdGF0ZXx8dC5jb25maWcudGVybWluYXRlT25Qb2ludGVyVXAmJjA9PT10LnN0YXRlKSYmdC5mYWRlT3V0KCl9KSl9X2dldEFjdGl2ZVJpcHBsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hY3RpdmVSaXBwbGVzLmtleXMoKSl9X3JlbW92ZVRyaWdnZXJFdmVudHMoKXtsZXQgdD10aGlzLl90cmlnZ2VyRWxlbWVudDt0JiYodzcuZm9yRWFjaChlPT52Zi5fZXZlbnRNYW5hZ2VyLnJlbW92ZUhhbmRsZXIoZSx0LHRoaXMpKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkJiZTNy5mb3JFYWNoKGU9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHRoaXMsTTcpKSl9fTt2Zi5fZXZlbnRNYW5hZ2VyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2V2ZW50cz1uZXcgTWFwLHRoaXMuX2RlbGVnYXRlRXZlbnRIYW5kbGVyPXQ9PntsZXQgZT1tYSh0KTtlJiZ0aGlzLl9ldmVudHMuZ2V0KHQudHlwZSk/LmZvckVhY2goKGkscik9Pnsocj09PWV8fHIuY29udGFpbnMoZSkpJiZpLmZvckVhY2gobz0+by5oYW5kbGVFdmVudCh0KSl9KX19YWRkSGFuZGxlcih0LGUsaSxyKXtsZXQgbz10aGlzLl9ldmVudHMuZ2V0KGUpO2lmKG8pe2xldCBzPW8uZ2V0KGkpO3M/cy5hZGQocik6by5zZXQoaSxuZXcgU2V0KFtyXSkpfWVsc2UgdGhpcy5fZXZlbnRzLnNldChlLG5ldyBNYXAoW1tpLG5ldyBTZXQoW3JdKV1dKSksdC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzLl9kZWxlZ2F0ZUV2ZW50SGFuZGxlcix4Nyl9KX1yZW1vdmVIYW5kbGVyKHQsZSxpKXtsZXQgcj10aGlzLl9ldmVudHMuZ2V0KHQpO2lmKCFyKXJldHVybjtsZXQgbz1yLmdldChlKTshb3x8KG8uZGVsZXRlKGkpLDA9PT1vLnNpemUmJnIuZGVsZXRlKGUpLDA9PT1yLnNpemUmJih0aGlzLl9ldmVudHMuZGVsZXRlKHQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLl9kZWxlZ2F0ZUV2ZW50SGFuZGxlcix4NykpKX19O3ZhciB5Mj1uZXcgaWUoIm1hdC1yaXBwbGUtZ2xvYmFsLW9wdGlvbnMiKSxtbz0oKCk9PntjbGFzcyBue2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7ZSYmdGhpcy5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpLHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCB0cmlnZ2VyKGUpe3RoaXMuX3RyaWdnZXI9ZSx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1jb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9hbmltYXRpb25Nb2RlPXMsdGhpcy5yYWRpdXM9MCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX2dsb2JhbE9wdGlvbnM9b3x8e30sdGhpcy5fcmlwcGxlUmVuZGVyZXI9bmV3IHZmKHRoaXMsaSxlLHIpfW5nT25Jbml0KCl7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9ZmFkZU91dEFsbCgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGwoKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl9Z2V0IHJpcHBsZUNvbmZpZygpe3JldHVybntjZW50ZXJlZDp0aGlzLmNlbnRlcmVkLHJhZGl1czp0aGlzLnJhZGl1cyxjb2xvcjp0aGlzLmNvbG9yLGFuaW1hdGlvbjp7Li4udGhpcy5fZ2xvYmFsT3B0aW9ucy5hbmltYXRpb24sLi4uIk5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGU/e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH06e30sLi4udGhpcy5hbmltYXRpb259LHRlcm1pbmF0ZU9uUG9pbnRlclVwOnRoaXMuX2dsb2JhbE9wdGlvbnMudGVybWluYXRlT25Qb2ludGVyVXB9fWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhIXRoaXMuX2dsb2JhbE9wdGlvbnMuZGlzYWJsZWR9X3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpeyF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLl9yaXBwbGVSZW5kZXJlci5zZXR1cFRyaWdnZXJFdmVudHModGhpcy50cmlnZ2VyKX1sYXVuY2goZSxpPTAscil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZShlLGksey4uLnRoaXMucmlwcGxlQ29uZmlnLC4uLnJ9KTp0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoMCwwLHsuLi50aGlzLnJpcHBsZUNvbmZpZywuLi5lfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoYXQpLEMoR24pLEMoeTIsOCksQyhoaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1yaXBwbGUiLCIiXSxbIiIsIm1hdFJpcHBsZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1yaXBwbGUiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixpLnVuYm91bmRlZCl9LGlucHV0czp7Y29sb3I6WyJtYXRSaXBwbGVDb2xvciIsImNvbG9yIl0sdW5ib3VuZGVkOlsibWF0UmlwcGxlVW5ib3VuZGVkIiwidW5ib3VuZGVkIl0sY2VudGVyZWQ6WyJtYXRSaXBwbGVDZW50ZXJlZCIsImNlbnRlcmVkIl0scmFkaXVzOlsibWF0UmlwcGxlUmFkaXVzIiwicmFkaXVzIl0sYW5pbWF0aW9uOlsibWF0UmlwcGxlQW5pbWF0aW9uIiwiYW5pbWF0aW9uIl0sZGlzYWJsZWQ6WyJtYXRSaXBwbGVEaXNhYmxlZCIsImRpc2FibGVkIl0sdHJpZ2dlcjpbIm1hdFJpcHBsZVRyaWdnZXIiLCJ0cmlnZ2VyIl19LGV4cG9ydEFzOlsibWF0UmlwcGxlIl19KSxufSkoKSxCbD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sZm5dfSksbn0pKCksRV9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fYW5pbWF0aW9uTW9kZT1lLHRoaXMuc3RhdGU9InVuY2hlY2tlZCIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmFwcGVhcmFuY2U9ImZ1bGwifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGhpLDgpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcHNldWRvLWNoZWNrYm94Il1dLGhvc3RBdHRyczpbMSwibWF0LXBzZXVkby1jaGVja2JveCJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSIsImluZGV0ZXJtaW5hdGUiPT09aS5zdGF0ZSkoIm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCIsImNoZWNrZWQiPT09aS5zdGF0ZSkoIm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWwiLCJtaW5pbWFsIj09PWkuYXBwZWFyYW5jZSkoIm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCIsImZ1bGwiPT09aS5hcHBlYXJhbmNlKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKX0saW5wdXRzOntzdGF0ZToic3RhdGUiLGRpc2FibGVkOiJkaXNhYmxlZCIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSJ9LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WycubWF0LXBzZXVkby1jaGVja2JveHtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLGJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7Y29udGVudDoiIjtib3JkZXItYm90dG9tOjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNpdGlvbjpvcGFjaXR5IDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0ubWF0LXBzZXVkby1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtcHNldWRvLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7bGVmdDoxcHg7b3BhY2l0eToxO2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQ6OmFmdGVye2xlZnQ6MXB4O2JvcmRlci1sZWZ0OjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MTtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7Ym9yZGVyOjJweCBzb2xpZH0ubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXBzZXVkby1jaGVja2JveHt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkOjphZnRlcnt3aWR0aDoxNHB4O2hlaWdodDo2cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dG9wOi00LjI0MjY0MDY4NzFweDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDttYXJnaW46YXV0b30ubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7dG9wOjhweDt3aWR0aDoxNnB4fS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkOjphZnRlcnt3aWR0aDoxMHB4O2hlaWdodDo0cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dG9wOi0yLjgyODQyNzEyNDdweDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDttYXJnaW46YXV0b30ubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7dG9wOjZweDt3aWR0aDoxMnB4fSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFRfZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm5dfSksbn0pKCksenY9bmV3IGllKCJNQVRfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQiKSxVdj0oc28oY2xhc3N7fSksbmV3IGllKCJNYXRPcHRncm91cCIpKSxEX2U9MCxIdj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9ITEpe3RoaXMuc291cmNlPXQsdGhpcy5pc1VzZXJJbnB1dD1lfX0sSV9lPSgoKT0+e2NsYXNzIG57Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Lm11bHRpcGxlfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5ncm91cCYmdGhpcy5ncm91cC5kaXNhYmxlZHx8dGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVJ0KGUpfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmRpc2FibGVSaXBwbGUpfWdldCBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yKCl7cmV0dXJuISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IpfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3BhcmVudD1yLHRoaXMuZ3JvdXA9byx0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT0iIix0aGlzLmlkPSJtYXQtb3B0aW9uLSIrRF9lKyssdGhpcy5vblNlbGVjdGlvbkNoYW5nZT1uZXcgRix0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IEllfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfWdldCB2aWV3VmFsdWUoKXtyZXR1cm4odGhpcy5fdGV4dD8ubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX1zZWxlY3QoKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWZvY3VzKGUsaSl7bGV0IHI9dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKTsiZnVuY3Rpb24iPT10eXBlb2Ygci5mb2N1cyYmci5mb2N1cyhpKX1zZXRBY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmV8fCh0aGlzLl9hY3RpdmU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfXNldEluYWN0aXZlU3R5bGVzKCl7dGhpcy5fYWN0aXZlJiYodGhpcy5fYWN0aXZlPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXRMYWJlbCgpe3JldHVybiB0aGlzLnZpZXdWYWx1ZX1faGFuZGxlS2V5ZG93bihlKXsoMTM9PT1lLmtleUNvZGV8fDMyPT09ZS5rZXlDb2RlKSYmIXZyKGUpJiYodGhpcy5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSxlLnByZXZlbnREZWZhdWx0KCkpfV9zZWxlY3RWaWFJbnRlcmFjdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zZWxlY3RlZD0hdGhpcy5tdWx0aXBsZXx8IXRoaXMuX3NlbGVjdGVkLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCghMCkpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdDaGVja2VkKCl7aWYodGhpcy5fc2VsZWN0ZWQpe2xldCBlPXRoaXMudmlld1ZhbHVlO2UhPT10aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlJiYodGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZSYmdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKSx0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPWUpfX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfV9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoZT0hMSl7dGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBIdih0aGlzLGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe0lzKCl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShoX2UsNyksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5fdGV4dD1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e29uU2VsZWN0aW9uQ2hhbmdlOiJvblNlbGVjdGlvbkNoYW5nZSJ9fSksbn0pKCksVXM9KCgpPT57Y2xhc3MgbiBleHRlbmRzIElfZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQygkdCksQyh6diw4KSxDKFV2LDgpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtb3B0aW9uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJvcHRpb24iLDEsIm1hdC1tZGMtb3B0aW9uIiwibWRjLWxpc3QtaXRlbSJdLGhvc3RWYXJzOjExLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJihqbygiaWQiLGkuaWQpLEJlKCJhcmlhLXNlbGVjdGVkIixpLnNlbGVjdGVkKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxudCgibWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQiLGkuc2VsZWN0ZWQpKCJtYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSIsaS5tdWx0aXBsZSkoIm1hdC1tZGMtb3B0aW9uLWFjdGl2ZSIsaS5hY3RpdmUpKCJtZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxleHBvcnRBczpbIm1hdE9wdGlvbiJdLGZlYXR1cmVzOltLZV0sbmdDb250ZW50U2VsZWN0b3JzOnlfZSxkZWNsczo4LHZhcnM6NSxjb25zdHM6W1siY2xhc3MiLCJtYXQtbWRjLW9wdGlvbi1wc2V1ZG8tY2hlY2tib3giLDMsInN0YXRlIiwiZGlzYWJsZWQiLDQsIm5nSWYiXSxbMSwibWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0Il0sWyJ0ZXh0IiwiIl0sWyJjbGFzcyIsIm1hdC1tZGMtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsInN0YXRlIiwiY2hlY2tlZCIsImFwcGVhcmFuY2UiLCJtaW5pbWFsIiwzLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjZGstdmlzdWFsbHktaGlkZGVuIiw0LCJuZ0lmIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtbWRjLW9wdGlvbi1yaXBwbGUiLCJtYXQtbWRjLWZvY3VzLWluZGljYXRvciIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIl0sWzEsIm1hdC1tZGMtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCJdLFsic3RhdGUiLCJjaGVja2VkIiwiYXBwZWFyYW5jZSIsIm1pbmltYWwiLDEsIm1hdC1tZGMtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywiZGlzYWJsZWQiXSxbMSwiY2RrLXZpc3VhbGx5LWhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKHZfZSksUygwLGdfZSwxLDIsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDApLHp0KDEpLGgoMiwic3BhbiIsMSwyKSx6dCg0LDEpLGcoKSxTKDUsX19lLDEsMSwibWF0LXBzZXVkby1jaGVja2JveCIsMyksUyg2LGJfZSwyLDEsInNwYW4iLDQpLFAoNywiZGl2Iiw1KSksMiZlJiYoXygibmdJZiIsaS5tdWx0aXBsZSksdig1KSxfKCJuZ0lmIiwhaS5tdWx0aXBsZSYmaS5zZWxlY3RlZCYmIWkuaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciksdigxKSxfKCJuZ0lmIixpLmdyb3VwJiZpLmdyb3VwLl9pbmVydCksdigxKSxfKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZWR8fGkuZGlzYWJsZVJpcHBsZSkpfSxkZXBlbmRlbmNpZXM6W21vLEZlLEVfZV0sc3R5bGVzOlsnLm1hdC1tZGMtb3B0aW9ue2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHg7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7bWluLWhlaWdodDo0OHB4fS5tYXQtbWRjLW9wdGlvbjpmb2N1c3tvdXRsaW5lOm5vbmV9W2Rpcj1ydGxdIC5tYXQtbWRjLW9wdGlvbiwubWF0LW1kYy1vcHRpb25bZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDoxNnB4fS5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVte2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWR7b3BhY2l0eTouMzg7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1tZGMtb3B0Z3JvdXAgLm1hdC1tZGMtb3B0aW9uOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDozMnB4fVtkaXI9cnRsXSAubWF0LW1kYy1vcHRncm91cCAubWF0LW1kYy1vcHRpb246bm90KC5tYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDozMnB4fS5tYXQtbWRjLW9wdGlvbiAubWF0LWljb24sLm1hdC1tZGMtb3B0aW9uIC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7bWFyZ2luLXJpZ2h0OjE2cHg7ZmxleC1zaHJpbms6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtb3B0aW9uIC5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtb3B0aW9uIC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH0ubWF0LW1kYy1vcHRpb24gLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbHttYXJnaW4tbGVmdDoxNnB4O2ZsZXgtc2hyaW5rOjB9W2Rpcj1ydGxdIC5tYXQtbWRjLW9wdGlvbiAubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFse21hcmdpbi1yaWdodDoxNnB4O21hcmdpbi1sZWZ0OjB9Lm1hdC1tZGMtb3B0aW9uIC5tYXQtbWRjLW9wdGlvbi1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHt3aGl0ZS1zcGFjZTpub3JtYWw7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Zm9udC1mYW1pbHk6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LXRyYW5zZm9ybTppbmhlcml0O21hcmdpbi1yaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LW1kYy1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDphdXRvfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDoxMHB4O2hlaWdodDowO2JvcmRlci1ib3R0b206c29saWQgMTBweDtib3JkZXItcmFkaXVzOjEwcHh9W2Rpcj1ydGxdIC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntyaWdodDphdXRvO2xlZnQ6MTZweH0ubWF0LW1kYy1vcHRpb24tYWN0aXZlIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gejEobix0LGUpe2lmKGUubGVuZ3RoKXtsZXQgaT10LnRvQXJyYXkoKSxyPWUudG9BcnJheSgpLG89MDtmb3IobGV0IHM9MDtzPG4rMTtzKyspaVtzXS5ncm91cCYmaVtzXS5ncm91cD09PXJbb10mJm8rKztyZXR1cm4gb31yZXR1cm4gMH1mdW5jdGlvbiBVMShuLHQsZSxpKXtyZXR1cm4gbjxlP246bit0PmUraT9NYXRoLm1heCgwLG4taSt0KTplfXZhciBjZz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbQmwsUGUsZm4sVF9lXX0pLG59KSgpLEQ3PVsibWF0LWJ1dHRvbiIsIiJdLHgyPVtbWyIiLDgsIm1hdGVyaWFsLWljb25zIiwzLCJpY29uUG9zaXRpb25FbmQiLCIiXSxbIm1hdC1pY29uIiwzLCJpY29uUG9zaXRpb25FbmQiLCIiXSxbIiIsIm1hdEJ1dHRvbkljb24iLCIiLDMsImljb25Qb3NpdGlvbkVuZCIsIiJdXSwiKiIsW1siIiwiaWNvblBvc2l0aW9uRW5kIiwiIiw4LCJtYXRlcmlhbC1pY29ucyJdLFsibWF0LWljb24iLCJpY29uUG9zaXRpb25FbmQiLCIiXSxbIiIsIm1hdEJ1dHRvbkljb24iLCIiLCJpY29uUG9zaXRpb25FbmQiLCIiXV1dLEMyPVsiLm1hdGVyaWFsLWljb25zOm5vdChbaWNvblBvc2l0aW9uRW5kXSksIG1hdC1pY29uOm5vdChbaWNvblBvc2l0aW9uRW5kXSksIFttYXRCdXR0b25JY29uXTpub3QoW2ljb25Qb3NpdGlvbkVuZF0pIiwiKiIsIi5tYXRlcmlhbC1pY29uc1tpY29uUG9zaXRpb25FbmRdLCBtYXQtaWNvbltpY29uUG9zaXRpb25FbmRdLCBbbWF0QnV0dG9uSWNvbl1baWNvblBvc2l0aW9uRW5kXSJdLE0yPSIuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOm5vdCgubWRjLWJ1dHRvbi0tb3V0bGluZWQpLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLWljb24tYnV0dG9ue291dGxpbmU6c29saWQgMXB4fSIsSTc9WyJtYXQtaWNvbi1idXR0b24iLCIiXSxSX2U9WyIqIl0sT19lPVt7c2VsZWN0b3I6Im1hdC1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtYnV0dG9uIiwibWF0LW1kYy1idXR0b24iXX0se3NlbGVjdG9yOiJtYXQtZmxhdC1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtYnV0dG9uIiwibWRjLWJ1dHRvbi0tdW5lbGV2YXRlZCIsIm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24iXX0se3NlbGVjdG9yOiJtYXQtcmFpc2VkLWJ1dHRvbiIsbWRjQ2xhc3NlczpbIm1kYy1idXR0b24iLCJtZGMtYnV0dG9uLS1yYWlzZWQiLCJtYXQtbWRjLXJhaXNlZC1idXR0b24iXX0se3NlbGVjdG9yOiJtYXQtc3Ryb2tlZC1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtYnV0dG9uIiwibWRjLWJ1dHRvbi0tb3V0bGluZWQiLCJtYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiJdfSx7c2VsZWN0b3I6Im1hdC1mYWIiLG1kY0NsYXNzZXM6WyJtZGMtZmFiIiwibWF0LW1kYy1mYWIiXX0se3NlbGVjdG9yOiJtYXQtbWluaS1mYWIiLG1kY0NsYXNzZXM6WyJtZGMtZmFiIiwibWRjLWZhYi0tbWluaSIsIm1hdC1tZGMtbWluaS1mYWIiXX0se3NlbGVjdG9yOiJtYXQtaWNvbi1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtaWNvbi1idXR0b24iLCJtYXQtbWRjLWljb24tYnV0dG9uIl19XSxrX2U9enMoc28odXMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSksdzI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtfZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2FuaW1hdGlvbk1vZGU9byx0aGlzLl9mb2N1c01vbml0b3I9YWkoWHIpLHRoaXMuX2lzRmFiPSExO2xldCBzPWUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7Zm9yKGxldCBhIG9mIE9fZSl0aGlzLl9oYXNIb3N0QXR0cmlidXRlcyhhLnNlbGVjdG9yKSYmYS5tZGNDbGFzc2VzLmZvckVhY2gobD0+e3MuYWRkKGwpfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZil9Zm9jdXMoZT0icHJvZ3JhbSIsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfV9oYXNIb3N0QXR0cmlidXRlcyguLi5lKXtyZXR1cm4gZS5zb21lKGk9PnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5oYXNBdHRyaWJ1dGUoaSkpfV9pc1JpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe0lzKCl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShtbyw1KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLnJpcHBsZT1yLmZpcnN0KX19LGZlYXR1cmVzOltLZV19KSxufSkoKSxBNz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdzJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyksdGhpcy5faGFsdERpc2FibGVkRXZlbnRzPXM9Pnt0aGlzLmRpc2FibGVkJiYocy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX1uZ09uSW5pdCgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX0pfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtJcygpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGZlYXR1cmVzOltLZV19KSxufSkoKSxKaT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdzJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoR24pLEMoYXQpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImJ1dHRvbiIsIm1hdC1idXR0b24iLCIiXSxbImJ1dHRvbiIsIm1hdC1yYWlzZWQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKEJlKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksbnQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC11bnRoZW1lZCIsIWkuY29sb3IpKCJtYXQtbWRjLWJ1dHRvbi1iYXNlIiwhMCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIn0sZXhwb3J0QXM6WyJtYXRCdXR0b24iXSxmZWF0dXJlczpbS2VdLGF0dHJzOkQ3LG5nQ29udGVudFNlbGVjdG9yczpDMixkZWNsczo4LHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtZGMtYnV0dG9uX19sYWJlbCJdLFsxLCJtYXQtbWRjLWZvY3VzLWluZGljYXRvciJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtbWRjLWJ1dHRvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihEbih4MiksUCgwLCJzcGFuIiwwKSx6dCgxKSxoKDIsInNwYW4iLDEpLHp0KDMsMSksZygpLHp0KDQsMiksUCg1LCJzcGFuIiwyKSg2LCJzcGFuIiwzKSg3LCJzcGFuIiw0KSksMiZlJiYobnQoIm1kYy1idXR0b25fX3JpcHBsZSIsIWkuX2lzRmFiKSgibWRjLWZhYl9fcmlwcGxlIixpLl9pc0ZhYiksdig2KSxfKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSl9LGRlcGVuZGVuY2llczpbbW9dLHN0eWxlczpbJy5tZGMtdG91Y2gtdGFyZ2V0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmV9Lm1kYy1lbGV2YXRpb24tb3ZlcmxheXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOmluaGVyaXQ7cG9pbnRlci1ldmVudHM6bm9uZTtvcGFjaXR5OnZhcigtLW1kYy1lbGV2YXRpb24tb3ZlcmxheS1vcGFjaXR5LCAwKTt0cmFuc2l0aW9uOm9wYWNpdHkgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWRjLWJ1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6NjRweDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7bGluZS1oZWlnaHQ6aW5oZXJpdDt1c2VyLXNlbGVjdDpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO292ZXJmbG93OnZpc2libGU7dmVydGljYWwtYWxpZ246bWlkZGxlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX0ubWRjLWJ1dHRvbiAubWRjLWVsZXZhdGlvbi1vdmVybGF5e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowfS5tZGMtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH0ubWRjLWJ1dHRvbjphY3RpdmV7b3V0bGluZTpub25lfS5tZGMtYnV0dG9uOmhvdmVye2N1cnNvcjpwb2ludGVyfS5tZGMtYnV0dG9uOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1kYy1idXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ljb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ljb24sLm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19wcm9ncmVzcy1pbmRpY2F0b3J7Zm9udC1zaXplOjA7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTt0b3A6NTAlO2xlZnQ6NTAlO2xpbmUtaGVpZ2h0OmluaXRpYWx9Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVse3Bvc2l0aW9uOnJlbGF0aXZlfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5ne3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDpjYWxjKFxuICAgICAgMTAwJSArIDRweFxuICAgICk7d2lkdGg6Y2FsYyhcbiAgICAgIDEwMCUgKyA0cHhcbiAgICApO2Rpc3BsYXk6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fZm9jdXMtcmluZ3tib3JkZXItY29sb3I6Q2FudmFzVGV4dH19Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2NvbnRlbnQ6IiI7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6OHB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDpjYWxjKDEwMCUgKyA0cHgpO3dpZHRoOmNhbGMoMTAwJSArIDRweCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWJ1dHRvbi5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1idXR0b25fX2ZvY3VzLXJpbmcsLm1kYy1idXR0b246bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWJ1dHRvbl9fZm9jdXMtcmluZ3tkaXNwbGF5OmJsb2NrfX0ubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjA7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWRjLWJ1dHRvbl9fbGFiZWwrLm1kYy1idXR0b25fX2ljb257bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWRjLWJ1dHRvbl9fbGFiZWwrLm1kYy1idXR0b25fX2ljb24sLm1kYy1idXR0b25fX2xhYmVsKy5tZGMtYnV0dG9uX19pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH1zdmcubWRjLWJ1dHRvbl9faWNvbntmaWxsOmN1cnJlbnRDb2xvcn0ubWRjLWJ1dHRvbi0tdG91Y2h7bWFyZ2luLXRvcDo2cHg7bWFyZ2luLWJvdHRvbTo2cHh9Lm1kYy1idXR0b257cGFkZGluZzowIDhweCAwIDhweH0ubWRjLWJ1dHRvbi0tdW5lbGV2YXRlZHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtwYWRkaW5nOjAgMTZweCAwIDE2cHh9Lm1kYy1idXR0b24tLXVuZWxldmF0ZWQubWRjLWJ1dHRvbi0taWNvbi10cmFpbGluZ3twYWRkaW5nOjAgMTJweCAwIDE2cHh9Lm1kYy1idXR0b24tLXVuZWxldmF0ZWQubWRjLWJ1dHRvbi0taWNvbi1sZWFkaW5ne3BhZGRpbmc6MCAxNnB4IDAgMTJweH0ubWRjLWJ1dHRvbi0tcmFpc2Vke3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO3BhZGRpbmc6MCAxNnB4IDAgMTZweH0ubWRjLWJ1dHRvbi0tcmFpc2VkLm1kYy1idXR0b24tLWljb24tdHJhaWxpbmd7cGFkZGluZzowIDEycHggMCAxNnB4fS5tZGMtYnV0dG9uLS1yYWlzZWQubWRjLWJ1dHRvbi0taWNvbi1sZWFkaW5ne3BhZGRpbmc6MCAxNnB4IDAgMTJweH0ubWRjLWJ1dHRvbi0tb3V0bGluZWR7Ym9yZGVyLXN0eWxlOnNvbGlkO3RyYW5zaXRpb246Ym9yZGVyIDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1idXR0b24tLW91dGxpbmVkIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWJ1dHRvbntoZWlnaHQ6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQsIDM2cHgpO2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy1idXR0b246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtdGV4dC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtdGV4dC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXJhaXNlZC1idXR0b257aGVpZ2h0OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQsIDM2cHgpO2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpO2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3Vze2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tZm9jdXMtY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1ob3Zlci1jb250YWluZXItZWxldmF0aW9uLCAwcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoOmRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1wcmVzc2VkLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpkaXNhYmxlZHtib3gtc2hhZG93OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQsIDM2cHgpO2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSk7cGFkZGluZzowIDE1cHggMCAxNXB4O2JvcmRlci13aWR0aDp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtd2lkdGgsIDFweCl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmRpc2FibGVke2NvbG9yOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b246bm90KDpkaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmRpc2FibGVke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tZGMtYnV0dG9uLS1pY29uLXRyYWlsaW5ne3BhZGRpbmc6MCAxMXB4IDAgMTVweH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWRjLWJ1dHRvbi0taWNvbi1sZWFkaW5ne3BhZGRpbmc6MCAxNXB4IDAgMTFweH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX3JpcHBsZXt0b3A6LTFweDtsZWZ0Oi0xcHg7Ym90dG9tOi0xcHg7cmlnaHQ6LTFweDtib3JkZXItd2lkdGg6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fdG91Y2h7bGVmdDpjYWxjKC0xICogdmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpKTt3aWR0aDpjYWxjKDEwMCUgKyAyICogdmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpKX0ubWF0LW1kYy1idXR0b24sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b257LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LW1kYy1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXJpcHBsZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7b3BhY2l0eTowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yKX0ubWF0LW1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVse3otaW5kZXg6MX0ubWF0LW1kYy1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvciwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvciwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmZvY3VzIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifS5tYXQtbWRjLWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdLC5tYXQtbWRjLXJhaXNlZC1idXR0b25bZGlzYWJsZWRdLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0LC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6MDtyaWdodDowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5tYXQtbWRjLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWJ1dHRvbj4ubWF0LWljb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOnRvcDtmb250LXNpemU6MS4xMjVyZW07aGVpZ2h0OjEuMTI1cmVtO3dpZHRoOjEuMTI1cmVtfVtkaXI9cnRsXSAubWF0LW1kYy1idXR0b24+Lm1hdC1pY29uLC5tYXQtbWRjLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfS5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29ue21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sLm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC1zaXplOjEuMTI1cmVtO2hlaWdodDoxLjEyNXJlbTt3aWR0aDoxLjEyNXJlbTttYXJnaW4tbGVmdDotNHB4O21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbj4ubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbj4ubWF0LWljb24sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxdLC5tYXQtbWRjLXJhaXNlZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxdLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLXJhaXNlZC1idXR0b24+Lm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6LTRweH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0Oi00cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6LTRweDttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle3RvcDotMXB4O2xlZnQ6LTFweDtib3R0b206LTFweDtyaWdodDotMXB4O2JvcmRlci13aWR0aDotMXB4fS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSArIDNweCkgKiAtMSl9JywiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1idXR0b246bm90KC5tZGMtYnV0dG9uLS1vdXRsaW5lZCksLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KC5tZGMtYnV0dG9uLS1vdXRsaW5lZCksLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246bm90KC5tZGMtYnV0dG9uLS1vdXRsaW5lZCksLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1pY29uLWJ1dHRvbntvdXRsaW5lOnNvbGlkIDFweH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxSNz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQTd7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoR24pLEMoYXQpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJtYXQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LXJhaXNlZC1idXR0b24iLCIiXSxbImEiLCJtYXQtZmxhdC1idXR0b24iLCIiXSxbImEiLCJtYXQtc3Ryb2tlZC1idXR0b24iLCIiXV0saG9zdFZhcnM6OSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LXVudGhlbWVkIiwhaS5jb2xvcikoIm1hdC1tZGMtYnV0dG9uLWJhc2UiLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W0tlXSxhdHRyczpENyxuZ0NvbnRlbnRTZWxlY3RvcnM6QzIsZGVjbHM6OCx2YXJzOjYsY29uc3RzOltbMSwibWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUiXSxbMSwibWRjLWJ1dHRvbl9fbGFiZWwiXSxbMSwibWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oeDIpLFAoMCwic3BhbiIsMCksenQoMSksaCgyLCJzcGFuIiwxKSx6dCgzLDEpLGcoKSx6dCg0LDIpLFAoNSwic3BhbiIsMikoNiwic3BhbiIsMykoNywic3BhbiIsNCkpLDImZSYmKG50KCJtZGMtYnV0dG9uX19yaXBwbGUiLCFpLl9pc0ZhYikoIm1kYy1mYWJfX3JpcHBsZSIsaS5faXNGYWIpLHYoNiksXygibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpfSxkZXBlbmRlbmNpZXM6W21vXSxzdHlsZXM6WycubWRjLXRvdWNoLXRhcmdldC13cmFwcGVye2Rpc3BsYXk6aW5saW5lfS5tZGMtZWxldmF0aW9uLW92ZXJsYXl7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTp2YXIoLS1tZGMtZWxldmF0aW9uLW92ZXJsYXktb3BhY2l0eSwgMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1idXR0b257cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjY0cHg7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2xpbmUtaGVpZ2h0OmluaGVyaXQ7dXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtvdmVyZmxvdzp2aXNpYmxlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCl9Lm1kYy1idXR0b24gLm1kYy1lbGV2YXRpb24tb3ZlcmxheXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MH0ubWRjLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9Lm1kYy1idXR0b246YWN0aXZle291dGxpbmU6bm9uZX0ubWRjLWJ1dHRvbjpob3ZlcntjdXJzb3I6cG9pbnRlcn0ubWRjLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtYnV0dG9uW2hpZGRlbl17ZGlzcGxheTpub25lfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19pY29ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19pY29uLC5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH0ubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcHJvZ3Jlc3MtaW5kaWNhdG9ye2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSk7dG9wOjUwJTtsZWZ0OjUwJTtsaW5lLWhlaWdodDppbml0aWFsfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZX0ubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fZm9jdXMtcmluZ3twb2ludGVyLWV2ZW50czpub25lO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYyhcbiAgICAgIDEwMCUgKyA0cHhcbiAgICApO3dpZHRoOmNhbGMoXG4gICAgICAxMDAlICsgNHB4XG4gICAgKTtkaXNwbGF5Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ZvY3VzLXJpbmd7Ym9yZGVyLWNvbG9yOkNhbnZhc1RleHR9fS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntjb250ZW50OiIiO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYygxMDAlICsgNHB4KTt3aWR0aDpjYWxjKDEwMCUgKyA0cHgpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntib3JkZXItY29sb3I6Q2FudmFzVGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5nLC5tZGMtYnV0dG9uOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1idXR0b25fX2ZvY3VzLXJpbmd7ZGlzcGxheTpibG9ja319Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDowO3JpZ2h0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1kYy1idXR0b25fX2xhYmVsKy5tZGMtYnV0dG9uX19pY29ue21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy1idXR0b25fX2xhYmVsKy5tZGMtYnV0dG9uX19pY29uLC5tZGMtYnV0dG9uX19sYWJlbCsubWRjLWJ1dHRvbl9faWNvbltkaXI9cnRsXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9c3ZnLm1kYy1idXR0b25fX2ljb257ZmlsbDpjdXJyZW50Q29sb3J9Lm1kYy1idXR0b24tLXRvdWNoe21hcmdpbi10b3A6NnB4O21hcmdpbi1ib3R0b206NnB4fS5tZGMtYnV0dG9ue3BhZGRpbmc6MCA4cHggMCA4cHh9Lm1kYy1idXR0b24tLXVuZWxldmF0ZWR7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7cGFkZGluZzowIDE2cHggMCAxNnB4fS5tZGMtYnV0dG9uLS11bmVsZXZhdGVkLm1kYy1idXR0b24tLWljb24tdHJhaWxpbmd7cGFkZGluZzowIDEycHggMCAxNnB4fS5tZGMtYnV0dG9uLS11bmVsZXZhdGVkLm1kYy1idXR0b24tLWljb24tbGVhZGluZ3twYWRkaW5nOjAgMTZweCAwIDEycHh9Lm1kYy1idXR0b24tLXJhaXNlZHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtwYWRkaW5nOjAgMTZweCAwIDE2cHh9Lm1kYy1idXR0b24tLXJhaXNlZC5tZGMtYnV0dG9uLS1pY29uLXRyYWlsaW5ne3BhZGRpbmc6MCAxMnB4IDAgMTZweH0ubWRjLWJ1dHRvbi0tcmFpc2VkLm1kYy1idXR0b24tLWljb24tbGVhZGluZ3twYWRkaW5nOjAgMTZweCAwIDEycHh9Lm1kYy1idXR0b24tLW91dGxpbmVke2JvcmRlci1zdHlsZTpzb2xpZDt0cmFuc2l0aW9uOmJvcmRlciAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtYnV0dG9uLS1vdXRsaW5lZCAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy1idXR0b257aGVpZ2h0OnZhcigtLW1kYy10ZXh0LWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy10ZXh0LWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy1idXR0b246ZGlzYWJsZWR7Y29sb3I6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbntoZWlnaHQ6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWhlaWdodCwgMzZweCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246bm90KDpkaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3IsIHRyYW5zcGFyZW50KX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246ZGlzYWJsZWR7Y29sb3I6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1kYy1idXR0b25fX3JpcHBsZXtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKTtib3gtc2hhZG93OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KDpkaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3IsIHRyYW5zcGFyZW50KX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246ZGlzYWJsZWR7Y29sb3I6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLC5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1c3tib3gtc2hhZG93OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWZvY3VzLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24taG92ZXItY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KDpkaXNhYmxlZCk6YWN0aXZle2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tcHJlc3NlZC1jb250YWluZXItZWxldmF0aW9uLCAwcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246ZGlzYWJsZWR7Ym94LXNoYWRvdzp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItZWxldmF0aW9uLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbntoZWlnaHQ6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpO3BhZGRpbmc6MCAxNXB4IDAgMTVweDtib3JkZXItd2lkdGg6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpkaXNhYmxlZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1kaXNhYmxlZC1vdXRsaW5lLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWRjLWJ1dHRvbi0taWNvbi10cmFpbGluZ3twYWRkaW5nOjAgMTFweCAwIDE1cHh9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1kYy1idXR0b24tLWljb24tbGVhZGluZ3twYWRkaW5nOjAgMTVweCAwIDExcHh9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7dG9wOi0xcHg7bGVmdDotMXB4O2JvdHRvbTotMXB4O3JpZ2h0Oi0xcHg7Ym9yZGVyLXdpZHRoOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS13aWR0aCwgMXB4KX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX3RvdWNoe2xlZnQ6Y2FsYygtMSAqIHZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS13aWR0aCwgMXB4KSk7d2lkdGg6Y2FsYygxMDAlICsgMiAqIHZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS13aWR0aCwgMXB4KSl9Lm1hdC1tZGMtYnV0dG9uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLC5tYXQtbWRjLXJhaXNlZC1idXR0b24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXJpcHBsZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtbWRjLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtjb250ZW50OiIiO29wYWNpdHk6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yKX0ubWF0LW1kYy1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcil9Lm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHt6LWluZGV4OjF9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvciwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcnt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LW1kYy1idXR0b246Zm9jdXMgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246Zm9jdXMgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b246Zm9jdXMgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Y29udGVudDoiIn0ubWF0LW1kYy1idXR0b25bZGlzYWJsZWRdLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjA7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWF0LW1kYy1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LW1kYy1idXR0b24+Lm1hdC1pY29ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC1zaXplOjEuMTI1cmVtO2hlaWdodDoxLjEyNXJlbTt3aWR0aDoxLjEyNXJlbX1bZGlyPXJ0bF0gLm1hdC1tZGMtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLC5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb24sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbj4ubWF0LWljb24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uPi5tYXQtaWNvbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZToxLjEyNXJlbTtoZWlnaHQ6MS4xMjVyZW07d2lkdGg6MS4xMjVyZW07bWFyZ2luLWxlZnQ6LTRweDttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLXJhaXNlZC1idXR0b24+Lm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24+Lm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXXttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0Oi00cHh9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbiwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb257bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDotNHB4fVtkaXI9cnRsXSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uW2Rpcj1ydGxdLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0Oi00cHg7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXJpcHBsZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX3JpcHBsZXt0b3A6LTFweDtsZWZ0Oi0xcHg7Ym90dG9tOi0xcHg7cmlnaHQ6LTFweDtib3JkZXItd2lkdGg6LTFweH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgMnB4KSAqIC0xKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAzcHgpICogLTEpfScsTTJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO25ldyBpZSgibWF0LW1kYy1mYWItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntjb2xvcjoiYWNjZW50In19fSk7dmFyICRpPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB3Mntjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyhHbiksQyhhdCksQyhoaSw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl1dLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoQmUoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LXVudGhlbWVkIiwhaS5jb2xvcikoIm1hdC1tZGMtYnV0dG9uLWJhc2UiLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdEJ1dHRvbiJdLGZlYXR1cmVzOltLZV0sYXR0cnM6STcsbmdDb250ZW50U2VsZWN0b3JzOlJfZSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJtYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSIsIm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxlIl0sWzEsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1tZGMtYnV0dG9uLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oKSxQKDAsInNwYW4iLDApLHp0KDEpLFAoMiwic3BhbiIsMSkoMywic3BhbiIsMikoNCwic3BhbiIsMykpLDImZSYmKHYoMyksXygibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZUNlbnRlcmVkIiwhMCkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpfSxkZXBlbmRlbmNpZXM6W21vXSxzdHlsZXM6WycubWRjLWljb24tYnV0dG9ue2ZvbnQtc2l6ZToyNHB4O3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1kYy1pY29uLWJ1dHRvbi5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWRjLWljb24tYnV0dG9uLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1kYy1pY29uLWJ1dHRvbiBzdmcsLm1kYy1pY29uLWJ1dHRvbiBpbWd7d2lkdGg6MjRweDtoZWlnaHQ6MjRweH0ubWRjLWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2ZpbGw6Y3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dXNlci1zZWxlY3Q6bm9uZTt6LWluZGV4OjA7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLWljb24tYnV0dG9uIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmcsLm1kYy1pY29uLWJ1dHRvbjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7ZGlzcGxheTpibG9ja319Lm1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtaWNvbi1idXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tZGlzcGxheS1mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3twb2ludGVyLWV2ZW50czpub25lO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntjb250ZW50OiIiO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYygxMDAlICsgNHB4KTt3aWR0aDpjYWxjKDEwMCUgKyA0cHgpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2ljb24ubWRjLWljb24tYnV0dG9uX19pY29uLS1vbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbi5tZGMtaWNvbi1idXR0b25fX2ljb24tLW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2xpbmt7aGVpZ2h0OjEwMCU7bGVmdDowO291dGxpbmU6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS5tYXQtbWRjLWljb24tYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24tc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCk7d2lkdGg6dmFyKC0tbWRjLWljb24tYnV0dG9uLXN0YXRlLWxheWVyLXNpemUsIDQ4cHgpO2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yLCBpbmhlcml0KTtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowO3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19pY29ue2ZvbnQtc2l6ZTp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmcsLm1hdC1tZGMtaWNvbi1idXR0b24gaW1ne3dpZHRoOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLXNpemUsIDI0cHgpO2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5OnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLW9wYWNpdHksIDAuMzgpfS5tYXQtbWRjLWljb24tYnV0dG9uOmRpc2FibGVke2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLWNvbG9yLCAjMDAwKX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmd7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eToxfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7b3BhY2l0eTowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHt6LWluZGV4OjF9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLWljb24tYnV0dG9uOmZvY3VzIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZXtib3JkZXItcmFkaXVzOjUwJX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtdW50aGVtZWQ6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1czo6YmVmb3JlLC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtd2Fybjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO29wYWNpdHk6MX0nLE0yXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxPNz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQTd7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoR24pLEMoYXQpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJtYXQtaWNvbi1idXR0b24iLCIiXV0saG9zdFZhcnM6OSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LXVudGhlbWVkIiwhaS5jb2xvcikoIm1hdC1tZGMtYnV0dG9uLWJhc2UiLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W0tlXSxhdHRyczpJNyxuZ0NvbnRlbnRTZWxlY3RvcnM6QzIsZGVjbHM6OCx2YXJzOjYsY29uc3RzOltbMSwibWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUiXSxbMSwibWRjLWJ1dHRvbl9fbGFiZWwiXSxbMSwibWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oeDIpLFAoMCwic3BhbiIsMCksenQoMSksaCgyLCJzcGFuIiwxKSx6dCgzLDEpLGcoKSx6dCg0LDIpLFAoNSwic3BhbiIsMikoNiwic3BhbiIsMykoNywic3BhbiIsNCkpLDImZSYmKG50KCJtZGMtYnV0dG9uX19yaXBwbGUiLCFpLl9pc0ZhYikoIm1kYy1mYWJfX3JpcHBsZSIsaS5faXNGYWIpLHYoNiksXygibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpfSxkZXBlbmRlbmNpZXM6W21vXSxzdHlsZXM6WycubWRjLWljb24tYnV0dG9ue2ZvbnQtc2l6ZToyNHB4O3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1kYy1pY29uLWJ1dHRvbi5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWRjLWljb24tYnV0dG9uLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1kYy1pY29uLWJ1dHRvbiBzdmcsLm1kYy1pY29uLWJ1dHRvbiBpbWd7d2lkdGg6MjRweDtoZWlnaHQ6MjRweH0ubWRjLWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2ZpbGw6Y3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dXNlci1zZWxlY3Q6bm9uZTt6LWluZGV4OjA7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLWljb24tYnV0dG9uIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmcsLm1kYy1pY29uLWJ1dHRvbjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7ZGlzcGxheTpibG9ja319Lm1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtaWNvbi1idXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tZGlzcGxheS1mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3twb2ludGVyLWV2ZW50czpub25lO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntjb250ZW50OiIiO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYygxMDAlICsgNHB4KTt3aWR0aDpjYWxjKDEwMCUgKyA0cHgpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2ljb24ubWRjLWljb24tYnV0dG9uX19pY29uLS1vbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbi5tZGMtaWNvbi1idXR0b25fX2ljb24tLW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2xpbmt7aGVpZ2h0OjEwMCU7bGVmdDowO291dGxpbmU6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS5tYXQtbWRjLWljb24tYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24tc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCk7d2lkdGg6dmFyKC0tbWRjLWljb24tYnV0dG9uLXN0YXRlLWxheWVyLXNpemUsIDQ4cHgpO2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yLCBpbmhlcml0KTtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowO3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19pY29ue2ZvbnQtc2l6ZTp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmcsLm1hdC1tZGMtaWNvbi1idXR0b24gaW1ne3dpZHRoOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLXNpemUsIDI0cHgpO2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5OnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLW9wYWNpdHksIDAuMzgpfS5tYXQtbWRjLWljb24tYnV0dG9uOmRpc2FibGVke2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLWNvbG9yLCAjMDAwKX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmd7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eToxfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7b3BhY2l0eTowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHt6LWluZGV4OjF9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLWljb24tYnV0dG9uOmZvY3VzIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZXtib3JkZXItcmFkaXVzOjUwJX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtdW50aGVtZWQ6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1czo6YmVmb3JlLC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtd2Fybjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO29wYWNpdHk6MX0nLE0yXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxjaT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sQmwsZm5dfSksbn0pKCksanY9Y2xhc3N7YXR0YWNoKHQpe3JldHVybiB0aGlzLl9hdHRhY2hlZEhvc3Q9dCx0LmF0dGFjaCh0aGlzKX1kZXRhY2goKXtsZXQgdD10aGlzLl9hdHRhY2hlZEhvc3Q7bnVsbCE9dCYmKHRoaXMuX2F0dGFjaGVkSG9zdD1udWxsLHQuZGV0YWNoKCkpfWdldCBpc0F0dGFjaGVkKCl7cmV0dXJuIG51bGwhPXRoaXMuX2F0dGFjaGVkSG9zdH1zZXRBdHRhY2hlZEhvc3QodCl7dGhpcy5fYXR0YWNoZWRIb3N0PXR9fSxWbD1jbGFzcyBleHRlbmRzIGp2e2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudD10LHRoaXMudmlld0NvbnRhaW5lclJlZj1lLHRoaXMuaW5qZWN0b3I9aSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMucHJvamVjdGFibGVOb2Rlcz1vfX0sWW89Y2xhc3MgZXh0ZW5kcyBqdntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMudGVtcGxhdGVSZWY9dCx0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbnRleHQ9aSx0aGlzLmluamVjdG9yPXJ9Z2V0IG9yaWdpbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9YXR0YWNoKHQsZT10aGlzLmNvbnRleHQpe3JldHVybiB0aGlzLmNvbnRleHQ9ZSxzdXBlci5hdHRhY2godCl9ZGV0YWNoKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsc3VwZXIuZGV0YWNoKCl9fSxTMj1jbGFzcyBleHRlbmRzIGp2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5lbGVtZW50PXQgaW5zdGFuY2VvZiBNZT90Lm5hdGl2ZUVsZW1lbnQ6dH19LEZ1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLmF0dGFjaERvbVBvcnRhbD1udWxsfWhhc0F0dGFjaGVkKCl7cmV0dXJuISF0aGlzLl9hdHRhY2hlZFBvcnRhbH1hdHRhY2godCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBWbD8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KSk6dCBpbnN0YW5jZW9mIFlvPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCkpOnRoaXMuYXR0YWNoRG9tUG9ydGFsJiZ0IGluc3RhbmNlb2YgUzI/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hEb21Qb3J0YWwodCkpOnZvaWQgMH1kZXRhY2goKXt0aGlzLl9hdHRhY2hlZFBvcnRhbCYmKHRoaXMuX2F0dGFjaGVkUG9ydGFsLnNldEF0dGFjaGVkSG9zdChudWxsKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKX1kaXNwb3NlKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9c2V0RGlzcG9zZUZuKHQpe3RoaXMuX2Rpc3Bvc2VGbj10fV9pbnZva2VEaXNwb3NlRm4oKXt0aGlzLl9kaXNwb3NlRm4mJih0aGlzLl9kaXNwb3NlRm4oKSx0aGlzLl9kaXNwb3NlRm49bnVsbCl9fSxHdj1jbGFzcyBleHRlbmRzIEZ1e2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLm91dGxldEVsZW1lbnQ9dCx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl9hcHBSZWY9aSx0aGlzLl9kZWZhdWx0SW5qZWN0b3I9cix0aGlzLmF0dGFjaERvbVBvcnRhbD1zPT57bGV0IGE9cy5lbGVtZW50LGw9dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobCxhKSx0aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQoYSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9cyxzdXBlci5zZXREaXNwb3NlRm4oKCk9PntsLnBhcmVudE5vZGUmJmwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYSxsKX0pfSx0aGlzLl9kb2N1bWVudD1vfWF0dGFjaENvbXBvbmVudFBvcnRhbCh0KXtsZXQgcixpPSh0LmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0LmNvbXBvbmVudCk7cmV0dXJuIHQudmlld0NvbnRhaW5lclJlZj8ocj10LnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGksdC52aWV3Q29udGFpbmVyUmVmLmxlbmd0aCx0LmluamVjdG9yfHx0LnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IsdC5wcm9qZWN0YWJsZU5vZGVzfHx2b2lkIDApLHRoaXMuc2V0RGlzcG9zZUZuKCgpPT5yLmRlc3Ryb3koKSkpOihyPWkuY3JlYXRlKHQuaW5qZWN0b3J8fHRoaXMuX2RlZmF1bHRJbmplY3Rvcnx8TWkuTlVMTCksdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcoci5ob3N0VmlldyksdGhpcy5zZXREaXNwb3NlRm4oKCk9Pnt0aGlzLl9hcHBSZWYudmlld0NvdW50PjAmJnRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHIuaG9zdFZpZXcpLHIuZGVzdHJveSgpfSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShyKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxyfWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe2xldCBlPXQudmlld0NvbnRhaW5lclJlZixpPWUuY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0LHtpbmplY3Rvcjp0LmluamVjdG9yfSk7cmV0dXJuIGkucm9vdE5vZGVzLmZvckVhY2gocj0+dGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHIpKSxpLmRldGVjdENoYW5nZXMoKSx0aGlzLnNldERpc3Bvc2VGbigoKT0+e2xldCByPWUuaW5kZXhPZihpKTstMSE9PXImJmUucmVtb3ZlKHIpfSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxpfWRpc3Bvc2UoKXtzdXBlci5kaXNwb3NlKCksdGhpcy5vdXRsZXRFbGVtZW50LnJlbW92ZSgpfV9nZXRDb21wb25lbnRSb290Tm9kZSh0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19fSxrNz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWW97Y29uc3RydWN0b3IoZSxpKXtzdXBlcihlLGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFNpKSxDKHNpKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka1BvcnRhbCIsIiJdXSxleHBvcnRBczpbImNka1BvcnRhbCJdLGZlYXR1cmVzOltLZV19KSxufSkoKSxwcz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRnV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWUsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1pLHRoaXMuX2lzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5hdHRhY2hlZD1uZXcgRix0aGlzLmF0dGFjaERvbVBvcnRhbD1vPT57bGV0IHM9by5lbGVtZW50LGE9dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO28uc2V0QXR0YWNoZWRIb3N0KHRoaXMpLHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxzKSx0aGlzLl9nZXRSb290Tm9kZSgpLmFwcGVuZENoaWxkKHMpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW8sc3VwZXIuc2V0RGlzcG9zZUZuKCgpPT57YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHMsYSl9KX0sdGhpcy5fZG9jdW1lbnQ9cn1nZXQgcG9ydGFsKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUG9ydGFsfXNldCBwb3J0YWwoZSl7dGhpcy5oYXNBdHRhY2hlZCgpJiYhZSYmIXRoaXMuX2lzSW5pdGlhbGl6ZWR8fCh0aGlzLmhhc0F0dGFjaGVkKCkmJnN1cGVyLmRldGFjaCgpLGUmJnN1cGVyLmF0dGFjaChlKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lfHxudWxsKX1nZXQgYXR0YWNoZWRSZWYoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRSZWZ9bmdPbkluaXQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwfW5nT25EZXN0cm95KCl7c3VwZXIuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaGVkUmVmPXRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGx9YXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2xldCBpPW51bGwhPWUudmlld0NvbnRhaW5lclJlZj9lLnZpZXdDb250YWluZXJSZWY6dGhpcy5fdmlld0NvbnRhaW5lclJlZixvPShlLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlLmNvbXBvbmVudCkscz1pLmNyZWF0ZUNvbXBvbmVudChvLGkubGVuZ3RoLGUuaW5qZWN0b3J8fGkuaW5qZWN0b3IsZS5wcm9qZWN0YWJsZU5vZGVzfHx2b2lkIDApO3JldHVybiBpIT09dGhpcy5fdmlld0NvbnRhaW5lclJlZiYmdGhpcy5fZ2V0Um9vdE5vZGUoKS5hcHBlbmRDaGlsZChzLmhvc3RWaWV3LnJvb3ROb2Rlc1swXSksc3VwZXIuc2V0RGlzcG9zZUZuKCgpPT5zLmRlc3Ryb3koKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1zLHRoaXMuYXR0YWNoZWQuZW1pdChzKSxzfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2xldCBpPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGVSZWYsZS5jb250ZXh0LHtpbmplY3RvcjplLmluamVjdG9yfSk7cmV0dXJuIHN1cGVyLnNldERpc3Bvc2VGbigoKT0+dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9X2dldFJvb3ROb2RlKCl7bGV0IGU9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIGUubm9kZVR5cGU9PT1lLkVMRU1FTlRfTk9ERT9lOmUucGFyZW50Tm9kZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhmbyksQyhzaSksQyhMdCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtQb3J0YWxPdXRsZXQiLCIiXV0saW5wdXRzOntwb3J0YWw6WyJjZGtQb3J0YWxPdXRsZXQiLCJwb3J0YWwiXX0sb3V0cHV0czp7YXR0YWNoZWQ6ImF0dGFjaGVkIn0sZXhwb3J0QXM6WyJjZGtQb3J0YWxPdXRsZXQiXSxmZWF0dXJlczpbS2VdfSksbn0pKCksSGw9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLFd2PWNsYXNze30sRzE9Y2xhc3MgZXh0ZW5kcyBXdntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RhdGE9dH1jb25uZWN0KCl7cmV0dXJuIERfKHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6SHQodGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319LHF2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aWV3Q2FjaGVTaXplPTIwLHRoaXMuX3ZpZXdDYWNoZT1bXX1hcHBseUNoYW5nZXModCxlLGkscixvKXt0LmZvckVhY2hPcGVyYXRpb24oKHMsYSxsKT0+e2xldCBjLGQ7bnVsbD09cy5wcmV2aW91c0luZGV4PyhjPXRoaXMuX2luc2VydFZpZXcoKCk9PmkocyxhLGwpLGwsZSxyKHMpKSxkPWM/MTowKTpudWxsPT1sPyh0aGlzLl9kZXRhY2hBbmRDYWNoZVZpZXcoYSxlKSxkPTMpOihjPXRoaXMuX21vdmVWaWV3KGEsbCxlLHIocykpLGQ9MiksbyYmbyh7Y29udGV4dDpjPy5jb250ZXh0LG9wZXJhdGlvbjpkLHJlY29yZDpzfSl9KX1kZXRhY2goKXtmb3IobGV0IHQgb2YgdGhpcy5fdmlld0NhY2hlKXQuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0Vmlldyh0LGUsaSxyKXtsZXQgbz10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGUsaSk7aWYobylyZXR1cm4gdm9pZChvLmNvbnRleHQuJGltcGxpY2l0PXIpO2xldCBzPXQoKTtyZXR1cm4gaS5jcmVhdGVFbWJlZGRlZFZpZXcocy50ZW1wbGF0ZVJlZixzLmNvbnRleHQscy5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyh0LGUpe2xldCBpPWUuZGV0YWNoKHQpO3RoaXMuX21heWJlQ2FjaGVWaWV3KGksZSl9X21vdmVWaWV3KHQsZSxpLHIpe2xldCBvPWkuZ2V0KHQpO3JldHVybiBpLm1vdmUobyxlKSxvLmNvbnRleHQuJGltcGxpY2l0PXIsb31fbWF5YmVDYWNoZVZpZXcodCxlKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaCh0KTtlbHNle2xldCBpPWUuaW5kZXhPZih0KTstMT09PWk/dC5kZXN0cm95KCk6ZS5yZW1vdmUoaSl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKHQsZSl7bGV0IGk9dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBpJiZlLmluc2VydChpLHQpLGl8fG51bGx9fSxkZz1jbGFzc3tnZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD1BcnJheS5mcm9tKHRoaXMuX3NlbGVjdGlvbi52YWx1ZXMoKSkpLHRoaXMuX3NlbGVjdGVkfWNvbnN0cnVjdG9yKHQ9ITEsZSxpPSEwLHIpe3RoaXMuX211bHRpcGxlPXQsdGhpcy5fZW1pdENoYW5nZXM9aSx0aGlzLmNvbXBhcmVXaXRoPXIsdGhpcy5fc2VsZWN0aW9uPW5ldyBTZXQsdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSx0aGlzLmNoYW5nZWQ9bmV3IEllLGUmJmUubGVuZ3RoJiYodD9lLmZvckVhY2gobz0+dGhpcy5fbWFya1NlbGVjdGVkKG8pKTp0aGlzLl9tYXJrU2VsZWN0ZWQoZVswXSksdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoPTApfXNlbGVjdCguLi50KXt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCksdC5mb3JFYWNoKGk9PnRoaXMuX21hcmtTZWxlY3RlZChpKSk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWRlc2VsZWN0KC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KSx0LmZvckVhY2goaT0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQoaSkpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1zZXRTZWxlY3Rpb24oLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpO2xldCBlPXRoaXMuc2VsZWN0ZWQsaT1uZXcgU2V0KHQpO3QuZm9yRWFjaChvPT50aGlzLl9tYXJrU2VsZWN0ZWQobykpLGUuZmlsdGVyKG89PiFpLmhhcyhvKSkuZm9yRWFjaChvPT50aGlzLl91bm1hcmtTZWxlY3RlZChvKSk7bGV0IHI9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxyfXRvZ2dsZSh0KXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHQpP3RoaXMuZGVzZWxlY3QodCk6dGhpcy5zZWxlY3QodCl9Y2xlYXIodD0hMCl7dGhpcy5fdW5tYXJrQWxsKCk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0JiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWlzU2VsZWN0ZWQodCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbi5oYXModGhpcy5fZ2V0Q29uY3JldGVWYWx1ZSh0KSl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5fc2VsZWN0aW9uLnNpemV9aGFzVmFsdWUoKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9c29ydCh0KXt0aGlzLl9tdWx0aXBsZSYmdGhpcy5zZWxlY3RlZCYmdGhpcy5fc2VsZWN0ZWQuc29ydCh0KX1pc011bHRpcGxlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9zZWxlY3RlZD1udWxsLCh0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGh8fHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKSYmKHRoaXMuY2hhbmdlZC5uZXh0KHtzb3VyY2U6dGhpcyxhZGRlZDp0aGlzLl9zZWxlY3RlZFRvRW1pdCxyZW1vdmVkOnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXR9KSx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdKX1fbWFya1NlbGVjdGVkKHQpe3Q9dGhpcy5fZ2V0Q29uY3JldGVWYWx1ZSh0KSx0aGlzLmlzU2VsZWN0ZWQodCl8fCh0aGlzLl9tdWx0aXBsZXx8dGhpcy5fdW5tYXJrQWxsKCksdGhpcy5pc1NlbGVjdGVkKHQpfHx0aGlzLl9zZWxlY3Rpb24uYWRkKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9zZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX1fdW5tYXJrU2VsZWN0ZWQodCl7dD10aGlzLl9nZXRDb25jcmV0ZVZhbHVlKHQpLHRoaXMuaXNTZWxlY3RlZCh0KSYmKHRoaXMuX3NlbGVjdGlvbi5kZWxldGUodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9X3VubWFya0FsbCgpe3RoaXMuaXNFbXB0eSgpfHx0aGlzLl9zZWxlY3Rpb24uZm9yRWFjaCh0PT50aGlzLl91bm1hcmtTZWxlY3RlZCh0KSl9X3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KXt9X2hhc1F1ZXVlZENoYW5nZXMoKXtyZXR1cm4hKCF0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCYmIXRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aCl9X2dldENvbmNyZXRlVmFsdWUodCl7aWYodGhpcy5jb21wYXJlV2l0aCl7Zm9yKGxldCBlIG9mIHRoaXMuX3NlbGVjdGlvbilpZih0aGlzLmNvbXBhcmVXaXRoKHQsZSkpcmV0dXJuIGU7cmV0dXJuIHR9cmV0dXJuIHR9fSxXMT1uZXcgaWUoIl9WaWV3UmVwZWF0ZXIiKSxOX2U9WyJjb250ZW50V3JhcHBlciJdLExfZT1bIioiXSxCNz1uZXcgaWUoIlZJUlRVQUxfU0NST0xMX1NUUkFURUdZIik7ZnVuY3Rpb24gQl9lKG4pe3JldHVybiBuLl9zY3JvbGxTdHJhdGVneX12YXIgVjc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1TaXplPTIwLHRoaXMuX21pbkJ1ZmZlclB4PTEwMCx0aGlzLl9tYXhCdWZmZXJQeD0yMDAsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBJZSx0aGlzLnNjcm9sbGVkSW5kZXhDaGFuZ2U9dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKFluKCkpLHRoaXMuX3ZpZXdwb3J0PW51bGwsdGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PWl9YXR0YWNoKHQpe3RoaXMuX3ZpZXdwb3J0PXQsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0LGUsaSl7dGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PWksdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRSZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KHQsZSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KHQqdGhpcy5faXRlbVNpemUsZSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXshdGhpcy5fdmlld3BvcnR8fHRoaXMuX3ZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKnRoaXMuX2l0ZW1TaXplKX1fdXBkYXRlUmVuZGVyZWRSYW5nZSgpe2lmKCF0aGlzLl92aWV3cG9ydClyZXR1cm47bGV0IHQ9dGhpcy5fdmlld3BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLGU9e3N0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kfSxpPXRoaXMuX3ZpZXdwb3J0LmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpLG89dGhpcy5fdmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgpLHM9dGhpcy5faXRlbVNpemU+MD9vL3RoaXMuX2l0ZW1TaXplOjA7aWYoZS5lbmQ+cil7bGV0IGw9TWF0aC5jZWlsKGkvdGhpcy5faXRlbVNpemUpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbihzLHItbCkpO3MhPWMmJihzPWMsbz1jKnRoaXMuX2l0ZW1TaXplLGUuc3RhcnQ9TWF0aC5mbG9vcihzKSksZS5lbmQ9TWF0aC5tYXgoMCxNYXRoLm1pbihyLGUuc3RhcnQrbCkpfWxldCBhPW8tZS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihhPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1lLnN0YXJ0KXtsZXQgbD1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LWEpL3RoaXMuX2l0ZW1TaXplKTtlLnN0YXJ0PU1hdGgubWF4KDAsZS5zdGFydC1sKSxlLmVuZD1NYXRoLm1pbihyLE1hdGguY2VpbChzKyhpK3RoaXMuX21pbkJ1ZmZlclB4KS90aGlzLl9pdGVtU2l6ZSkpfWVsc2V7bGV0IGw9ZS5lbmQqdGhpcy5faXRlbVNpemUtKG8raSk7aWYobDx0aGlzLl9taW5CdWZmZXJQeCYmZS5lbmQhPXIpe2xldCBjPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtbCkvdGhpcy5faXRlbVNpemUpO2M+MCYmKGUuZW5kPU1hdGgubWluKHIsZS5lbmQrYyksZS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3Iocy10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRSYW5nZShlKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqZS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IocykpfX0odGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfWdldCBpdGVtU2l6ZSgpe3JldHVybiB0aGlzLl9pdGVtU2l6ZX1zZXQgaXRlbVNpemUoZSl7dGhpcy5faXRlbVNpemU9X2koZSl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX21pbkJ1ZmZlclB4fXNldCBtaW5CdWZmZXJQeChlKXt0aGlzLl9taW5CdWZmZXJQeD1faShlKX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fbWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KGUpe3RoaXMuX21heEJ1ZmZlclB4PV9pKGUpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc2Nyb2xsU3RyYXRlZ3kudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwiaXRlbVNpemUiLCIiXV0saW5wdXRzOntpdGVtU2l6ZToiaXRlbVNpemUiLG1pbkJ1ZmZlclB4OiJtaW5CdWZmZXJQeCIsbWF4QnVmZmVyUHg6Im1heEJ1ZmZlclB4In0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbUXQoW3twcm92aWRlOkI3LHVzZUZhY3Rvcnk6Ql9lLGRlcHM6WyRuKCgpPT5uKV19XSksR3RdfSksbn0pKCksTnU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fbmdab25lPWUsdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9zY3JvbGxlZD1uZXcgSWUsdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwLHRoaXMuX2RvY3VtZW50PXJ9cmVnaXN0ZXIoZSl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyhlKXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldChlLGUuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KGUpKSl9ZGVyZWdpc3RlcihlKXtsZXQgaT10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KGUpO2kmJihpLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZShlKSl9c2Nyb2xsZWQoZT0yMCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgS3QoaT0+e3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbnx8dGhpcy5fYWRkR2xvYmFsTGlzdGVuZXIoKTtsZXQgcj1lPjA/dGhpcy5fc2Nyb2xsZWQucGlwZShzYyhlKSkuc3Vic2NyaWJlKGkpOnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShpKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57ci51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOkh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChlLGkpPT50aGlzLmRlcmVnaXN0ZXIoaSkpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZChlLGkpe2xldCByPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpO3JldHVybiB0aGlzLnNjcm9sbGVkKGkpLnBpcGUoa2Uobz0+IW98fHIuaW5kZXhPZihvKT4tMSkpfWdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhlKXtsZXQgaT1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKHIsbyk9Pnt0aGlzLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KG8sZSkmJmkucHVzaChvKX0pLGl9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGUsaSl7bGV0IHI9SHMoaSksbz1lLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKHI9PW8pcmV0dXJuITB9d2hpbGUocj1yLnBhcmVudEVsZW1lbnQpO3JldHVybiExfV9hZGRHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm1pKHRoaXMuX2dldFdpbmRvdygpLmRvY3VtZW50LCJzY3JvbGwiKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoKSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhhdCksayhHbiksayhMdCw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQ2Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmVsZW1lbnRSZWY9ZSx0aGlzLnNjcm9sbERpc3BhdGNoZXI9aSx0aGlzLm5nWm9uZT1yLHRoaXMuZGlyPW8sdGhpcy5fZGVzdHJveWVkPW5ldyBJZSx0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IEt0KHM9PnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5taSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwic2Nyb2xsIikucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUocykpKX1uZ09uSW5pdCgpe3RoaXMuc2Nyb2xsRGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuc2Nyb2xsRGlzcGF0Y2hlci5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9ZWxlbWVudFNjcm9sbGVkKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZH1nZXRFbGVtZW50UmVmKCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZn1zY3JvbGxUbyhlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxyPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7bnVsbD09ZS5sZWZ0JiYoZS5sZWZ0PXI/ZS5lbmQ6ZS5zdGFydCksbnVsbD09ZS5yaWdodCYmKGUucmlnaHQ9cj9lLnN0YXJ0OmUuZW5kKSxudWxsIT1lLmJvdHRvbSYmKGUudG9wPWkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LWUuYm90dG9tKSxyJiYwIT1lZygpPyhudWxsIT1lLmxlZnQmJihlLnJpZ2h0PWkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aC1lLmxlZnQpLDI9PWVnKCk/ZS5sZWZ0PWUucmlnaHQ6MT09ZWcoKSYmKGUubGVmdD1lLnJpZ2h0Py1lLnJpZ2h0OmUucmlnaHQpKTpudWxsIT1lLnJpZ2h0JiYoZS5sZWZ0PWkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aC1lLnJpZ2h0KSx0aGlzLl9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKX1fYXBwbHlTY3JvbGxUb09wdGlvbnMoZSl7bGV0IGk9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7UjEoKT9pLnNjcm9sbFRvKGUpOihudWxsIT1lLnRvcCYmKGkuc2Nyb2xsVG9wPWUudG9wKSxudWxsIT1lLmxlZnQmJihpLnNjcm9sbExlZnQ9ZS5sZWZ0KSl9bWVhc3VyZVNjcm9sbE9mZnNldChlKXtsZXQgaT0ibGVmdCIscj0icmlnaHQiLG89dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoInRvcCI9PWUpcmV0dXJuIG8uc2Nyb2xsVG9wO2lmKCJib3R0b20iPT1lKXJldHVybiBvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodC1vLnNjcm9sbFRvcDtsZXQgcz10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO3JldHVybiJzdGFydCI9PWU/ZT1zP3I6aToiZW5kIj09ZSYmKGU9cz9pOnIpLHMmJjI9PWVnKCk/ZT09aT9vLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgtby5zY3JvbGxMZWZ0Om8uc2Nyb2xsTGVmdDpzJiYxPT1lZygpP2U9PWk/by5zY3JvbGxMZWZ0K28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aDotby5zY3JvbGxMZWZ0OmU9PWk/by5zY3JvbGxMZWZ0Om8uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoTnUpLEMoYXQpLEMoWGksOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstc2Nyb2xsYWJsZSIsIiJdLFsiIiwiY2RrU2Nyb2xsYWJsZSIsIiJdXSxzdGFuZGFsb25lOiEwfSksbn0pKCksanM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jaGFuZ2U9bmV3IEllLHRoaXMuX2NoYW5nZUxpc3RlbmVyPW89Pnt0aGlzLl9jaGFuZ2UubmV4dChvKX0sdGhpcy5fZG9jdW1lbnQ9cixpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoZS5pc0Jyb3dzZXIpe2xldCBvPXRoaXMuX2dldFdpbmRvdygpO28uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksby5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtsZXQgZT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGV9Z2V0Vmlld3BvcnRSZWN0KCl7bGV0IGU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDplLnRvcCxsZWZ0OmUubGVmdCxib3R0b206ZS50b3ArcixyaWdodDplLmxlZnQraSxoZWlnaHQ6cix3aWR0aDppfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtsZXQgZT10aGlzLl9kb2N1bWVudCxpPXRoaXMuX2dldFdpbmRvdygpLHI9ZS5kb2N1bWVudEVsZW1lbnQsbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LW8udG9wfHxlLmJvZHkuc2Nyb2xsVG9wfHxpLnNjcm9sbFl8fHIuc2Nyb2xsVG9wfHwwLGxlZnQ6LW8ubGVmdHx8ZS5ib2R5LnNjcm9sbExlZnR8fGkuc2Nyb2xsWHx8ci5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoZT0yMCl7cmV0dXJuIGU+MD90aGlzLl9jaGFuZ2UucGlwZShzYyhlKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6ZS5pbm5lcldpZHRoLGhlaWdodDplLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoR24pLGsoYXQpLGsoTHQsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLE43PW5ldyBpZSgiVklSVFVBTF9TQ1JPTExBQkxFIiksel9lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBDZHtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX1tZWFzdXJlVmlld3BvcnRTaXplKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PWU/aS5jbGllbnRXaWR0aDppLmNsaWVudEhlaWdodH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyhOdSksQyhhdCksQyhYaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sZmVhdHVyZXM6W0tlXX0pLG59KSgpLGpfZT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9ZQTpBbSx1Zz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgel9le2dldCBvcmllbnRhdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24oZSl7dGhpcy5fb3JpZW50YXRpb24hPT1lJiYodGhpcy5fb3JpZW50YXRpb249ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkpfWdldCBhcHBlbmRPbmx5KCl7cmV0dXJuIHRoaXMuX2FwcGVuZE9ubHl9c2V0IGFwcGVuZE9ubHkoZSl7dGhpcy5fYXBwZW5kT25seT1SdChlKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKGUsYSxyLHMpLHRoaXMuZWxlbWVudFJlZj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9byx0aGlzLnNjcm9sbGFibGU9Yyx0aGlzLl9wbGF0Zm9ybT1haShHbiksdGhpcy5fZGV0YWNoZWRTdWJqZWN0PW5ldyBJZSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdD1uZXcgSWUsdGhpcy5fb3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLl9hcHBlbmRPbmx5PSExLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgS3QoZD0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUodT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5uZ1pvbmUucnVuKCgpPT5kLm5leHQodSkpKSkpLHRoaXMucmVuZGVyZWRSYW5nZVN0cmVhbT10aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdCx0aGlzLl90b3RhbENvbnRlbnRTaXplPTAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9IiIsdGhpcy5fdG90YWxDb250ZW50SGVpZ2h0PSIiLHRoaXMuX3JlbmRlcmVkUmFuZ2U9e3N0YXJ0OjAsZW5kOjB9LHRoaXMuX2RhdGFMZW5ndGg9MCx0aGlzLl92aWV3cG9ydFNpemU9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1Nbi5FTVBUWSx0aGlzLl92aWV3cG9ydENoYW5nZXM9bC5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoZWNrVmlld3BvcnRTaXplKCl9KSx0aGlzLnNjcm9sbGFibGV8fCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstdmlydHVhbC1zY3JvbGxhYmxlIiksdGhpcy5zY3JvbGxhYmxlPXRoaXMpfW5nT25Jbml0KCl7IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKHFuKG51bGwpLHNjKDAsal9lKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2RldGFjaGVkU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcy51bnN1YnNjcmliZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9YXR0YWNoKGUpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZm9yT2Y9ZSx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUob3QodGhpcy5fZGV0YWNoZWRTdWJqZWN0KSkuc3Vic2NyaWJlKGk9PntsZXQgcj1pLmxlbmd0aDtyIT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9cix0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0Lm5leHQoKX1nZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxPZmZzZXQoZSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19c2V0VG90YWxDb250ZW50U2l6ZShlKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09ZSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGUpeyhmdW5jdGlvbihuLHQpe3JldHVybiBuLnN0YXJ0PT10LnN0YXJ0JiZuLmVuZD09dC5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLGUpfHwodGhpcy5hcHBlbmRPbmx5JiYoZT17c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsZS5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlPWUpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKX1nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT9udWxsOnRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldH1zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoZSxpPSJ0by1zdGFydCIpe2U9dGhpcy5hcHBlbmRPbmx5JiYidG8tc3RhcnQiPT09aT8wOmU7bGV0IG89Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLHM9bz8iWCI6IlkiLGw9YHRyYW5zbGF0ZSR7c30oJHtOdW1iZXIoKG8mJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU/LTE6MSkqZSl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9ZSwidG8tZW5kIj09PWkmJihsKz1gIHRyYW5zbGF0ZSR7c30oLTEwMCUpYCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9bCYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1sLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpfXNjcm9sbFRvT2Zmc2V0KGUsaT0iYXV0byIpe2xldCByPXtiZWhhdmlvcjppfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP3Iuc3RhcnQ9ZTpyLnRvcD1lLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhyKX1zY3JvbGxUb0luZGV4KGUsaT0iYXV0byIpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRvSW5kZXgoZSxpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpO3JldHVybiBpPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9yPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpOnI9PnRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpLE1hdGgubWF4KDAsaShlPz8oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGUpe2xldCBpLHI9ImxlZnQiLG89InJpZ2h0IixzPSJydGwiPT10aGlzLmRpcj8udmFsdWU7aT0ic3RhcnQiPT1lP3M/bzpyOiJlbmQiPT1lP3M/cjpvOmV8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7bGV0IGE9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGkpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtpXS1hfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7bGV0IGU9dGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHR9bWVhc3VyZVJhbmdlU2l6ZShlKXtyZXR1cm4gdGhpcy5fZm9yT2Y/dGhpcy5fZm9yT2YubWVhc3VyZVJhbmdlU2l6ZShlLHRoaXMub3JpZW50YXRpb24pOjB9Y2hlY2tWaWV3cG9ydFNpemUoKXt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpfV9tZWFzdXJlVmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlVmlld3BvcnRTaXplKHRoaXMub3JpZW50YXRpb24pfV9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKGUpe2UmJnRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uLnB1c2goZSksdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nfHwodGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSEwLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSx0aGlzLm5nWm9uZS5ydW4oKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtsZXQgZT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IobGV0IGkgb2YgZSlpKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKCR0KSxDKGF0KSxDKEI3LDgpLEMoWGksOCksQyhOdSksQyhqcyksQyhONyw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UoTl9lLDcpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuX2NvbnRlbnRXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1pLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1pLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6ImFwcGVuZE9ubHkifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbUXQoW3twcm92aWRlOkNkLHVzZUZhY3Rvcnk6KHQsZSk9PnR8fGUsZGVwczpbW25ldyBUcyxuZXcgbmgoTjcpXSxuXX1dKSxLZSxJT10sbmdDb250ZW50U2VsZWN0b3JzOkxfZSxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1sxLCJjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIl0sWyJjb250ZW50V3JhcHBlciIsIiJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtc3BhY2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oKSxoKDAsImRpdiIsMCwxKSx6dCgyKSxnKCksUCgzLCJkaXYiLDIpKSwyJmUmJih2KDMpLFR0KCJ3aWR0aCIsaS5fdG90YWxDb250ZW50V2lkdGgpKCJoZWlnaHQiLGkuX3RvdGFsQ29udGVudEhlaWdodCkpfSxzdHlsZXM6WyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0uY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZXtvdmVyZmxvdzphdXRvO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbjtjb250YWluOnN0cmljdDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y29udGFpbjpjb250ZW50fVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntyaWdodDowO2xlZnQ6YXV0b30uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLWhlaWdodDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi13aWR0aDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7aGVpZ2h0OjFweDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDtmbGV4OjAgMCBhdXRvfVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcnt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBMNyhuLHQsZSl7aWYoIWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiAwO2xldCByPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuImhvcml6b250YWwiPT09bj8ic3RhcnQiPT09dD9yLmxlZnQ6ci5yaWdodDoic3RhcnQiPT09dD9yLnRvcDpyLmJvdHRvbX12YXIgSDc9KCgpPT57Y2xhc3MgbntnZXQgY2RrVmlydHVhbEZvck9mKCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmlydHVhbEZvck9mKGUpe3RoaXMuX2Nka1ZpcnR1YWxGb3JPZj1lLGZ1bmN0aW9uKG4pe3JldHVybiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5jb25uZWN0JiYhKG4gaW5zdGFuY2VvZiB3Xyl9KGUpP3RoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQoZSk6dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChuZXcgRzEoRF8oZSk/ZTpBcnJheS5mcm9tKGV8fFtdKSkpfWdldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoZSl7dGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnk9ZT8oaSxyKT0+ZShpKyh0aGlzLl9yZW5kZXJlZFJhbmdlP3RoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQ6MCkscik6dm9pZCAwfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoZSl7ZSYmKHRoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX3RlbXBsYXRlPWUpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShlKXt0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZT1faShlKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX3RlbXBsYXRlPWksdGhpcy5fZGlmZmVycz1yLHRoaXMuX3ZpZXdSZXBlYXRlcj1vLHRoaXMuX3ZpZXdwb3J0PXMsdGhpcy52aWV3Q2hhbmdlPW5ldyBJZSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcz1uZXcgSWUsdGhpcy5kYXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUocW4obnVsbCksRm0oKSxKbigoW2wsY10pPT50aGlzLl9jaGFuZ2VEYXRhU291cmNlKGwsYykpLE1zKDEpKSx0aGlzLl9kaWZmZXI9bnVsbCx0aGlzLl9uZWVkc1VwZGF0ZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IEllLHRoaXMuZGF0YVN0cmVhbS5zdWJzY3JpYmUobD0+e3RoaXMuX2RhdGE9bCx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShsPT57dGhpcy5fcmVuZGVyZWRSYW5nZT1sLHRoaXMudmlld0NoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZhLnJ1bigoKT0+dGhpcy52aWV3Q2hhbmdlLm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZSkpLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9bWVhc3VyZVJhbmdlU2l6ZShlLGkpe2lmKGUuc3RhcnQ+PWUuZW5kKXJldHVybiAwO2xldCBzLGEscj1lLnN0YXJ0LXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsbz1lLmVuZC1lLnN0YXJ0O2ZvcihsZXQgbD0wO2w8bztsKyspe2xldCBjPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGwrcik7aWYoYyYmYy5yb290Tm9kZXMubGVuZ3RoKXtzPWE9Yy5yb290Tm9kZXNbMF07YnJlYWt9fWZvcihsZXQgbD1vLTE7bD4tMTtsLS0pe2xldCBjPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGwrcik7aWYoYyYmYy5yb290Tm9kZXMubGVuZ3RoKXthPWMucm9vdE5vZGVzW2Mucm9vdE5vZGVzLmxlbmd0aC0xXTticmVha319cmV0dXJuIHMmJmE/TDcoaSwiZW5kIixhKS1MNyhpLCJzdGFydCIscyk6MH1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXImJnRoaXMuX25lZWRzVXBkYXRlKXtsZXQgZT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9yZW5kZXJlZEl0ZW1zKTtlP3RoaXMuX2FwcGx5Q2hhbmdlcyhlKTp0aGlzLl91cGRhdGVDb250ZXh0KCksdGhpcy5fbmVlZHNVcGRhdGU9ITF9fW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3BvcnQuZGV0YWNoKCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dCh2b2lkIDApLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy52aWV3Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl92aWV3UmVwZWF0ZXIuZGV0YWNoKCl9X29uUmVuZGVyZWREYXRhQ2hhbmdlKCl7IXRoaXMuX3JlbmRlcmVkUmFuZ2V8fCh0aGlzLl9yZW5kZXJlZEl0ZW1zPXRoaXMuX2RhdGEuc2xpY2UodGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCx0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCksdGhpcy5fZGlmZmVyfHwodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLl9yZW5kZXJlZEl0ZW1zKS5jcmVhdGUoKGUsaSk9PnRoaXMuY2RrVmlydHVhbEZvclRyYWNrQnk/dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeShlLGkpOmkpKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCl9X2NoYW5nZURhdGFTb3VyY2UoZSxpKXtyZXR1cm4gZSYmZS5kaXNjb25uZWN0KHRoaXMpLHRoaXMuX25lZWRzVXBkYXRlPSEwLGk/aS5jb25uZWN0KHRoaXMpOkh0KCl9X3VwZGF0ZUNvbnRleHQoKXtsZXQgZT10aGlzLl9kYXRhLmxlbmd0aCxpPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7aS0tOyl7bGV0IHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoaSk7ci5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQraSxyLmNvbnRleHQuY291bnQ9ZSx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKHIuY29udGV4dCksci5kZXRlY3RDaGFuZ2VzKCl9fV9hcHBseUNoYW5nZXMoZSl7dGhpcy5fdmlld1JlcGVhdGVyLmFwcGx5Q2hhbmdlcyhlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYsKG8scyxhKT0+dGhpcy5fZ2V0RW1iZWRkZWRWaWV3QXJncyhvLGEpLG89Pm8uaXRlbSksZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2Uobz0+e3RoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KG8uY3VycmVudEluZGV4KS5jb250ZXh0LiRpbXBsaWNpdD1vLml0ZW19KTtsZXQgaT10aGlzLl9kYXRhLmxlbmd0aCxyPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7ci0tOyl7bGV0IG89dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQocik7by5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQrcixvLmNvbnRleHQuY291bnQ9aSx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKG8uY29udGV4dCl9fV91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKGUpe2UuZmlyc3Q9MD09PWUuaW5kZXgsZS5sYXN0PWUuaW5kZXg9PT1lLmNvdW50LTEsZS5ldmVuPWUuaW5kZXglMj09MCxlLm9kZD0hZS5ldmVufV9nZXRFbWJlZGRlZFZpZXdBcmdzKGUsaSl7cmV0dXJue3RlbXBsYXRlUmVmOnRoaXMuX3RlbXBsYXRlLGNvbnRleHQ6eyRpbXBsaWNpdDplLml0ZW0sY2RrVmlydHVhbEZvck9mOnRoaXMuX2Nka1ZpcnR1YWxGb3JPZixpbmRleDotMSxjb3VudDotMSxmaXJzdDohMSxsYXN0OiExLG9kZDohMSxldmVuOiExfSxpbmRleDppfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhzaSksQyhTaSksQyh3bCksQyhXMSksQyh1Zyw0KSxDKGF0KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka1ZpcnR1YWxGb3IiLCIiLCJjZGtWaXJ0dWFsRm9yT2YiLCIiXV0saW5wdXRzOntjZGtWaXJ0dWFsRm9yT2Y6ImNka1ZpcnR1YWxGb3JPZiIsY2RrVmlydHVhbEZvclRyYWNrQnk6ImNka1ZpcnR1YWxGb3JUcmFja0J5IixjZGtWaXJ0dWFsRm9yVGVtcGxhdGU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZSIsY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6VzEsdXNlQ2xhc3M6cXZ9XSldfSksbn0pKCksUGM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLE1kPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltPdSxQYyx1ZyxPdSxQY119KSxufSkoKSx6Nz1SMSgpLHExPWNsYXNze2VuYWJsZSgpe31kaXNhYmxlKCl7fWF0dGFjaCgpe319O2Z1bmN0aW9uIEkyKG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLmJvdHRvbTxlLnRvcHx8bi50b3A+ZS5ib3R0b218fG4ucmlnaHQ8ZS5sZWZ0fHxuLmxlZnQ+ZS5yaWdodCl9ZnVuY3Rpb24gVTcobix0KXtyZXR1cm4gdC5zb21lKGU9Pm4udG9wPGUudG9wfHxuLmJvdHRvbT5lLmJvdHRvbXx8bi5sZWZ0PGUubGVmdHx8bi5yaWdodD5lLnJpZ2h0KX12YXIgeGY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1hdHRhY2godCl7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLmF1dG9DbG9zZSl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtJMihlLFt7d2lkdGg6aSxoZWlnaHQ6cixib3R0b206cixyaWdodDppLHRvcDowLGxlZnQ6MH1dKSYmKHRoaXMuZGlzYWJsZSgpLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCkpKX19KSl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fSxHX2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1pLHRoaXMuX25nWm9uZT1yLHRoaXMubm9vcD0oKT0+bmV3IHExLHRoaXMuY2xvc2U9cz0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPSgpPT57dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKX19YXR0YWNoKHQpe3RoaXMuX292ZXJsYXlSZWY9dH1lbmFibGUoKXtpZih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pcmV0dXJuO2xldCB0PXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCkucGlwZShrZShlPT4hZXx8IXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCkpKTt0aGlzLl9jb25maWcmJnRoaXMuX2NvbmZpZy50aHJlc2hvbGQmJnRoaXMuX2NvbmZpZy50aHJlc2hvbGQ+MT8odGhpcy5faW5pdGlhbFNjcm9sbFBvc2l0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcCx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dC5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3A7TWF0aC5hYnMoZS10aGlzLl9pbml0aWFsU2Nyb2xsUG9zaXRpb24pPnRoaXMuX2NvbmZpZy50aHJlc2hvbGQ/dGhpcy5fZGV0YWNoKCk6dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpOnRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSh0aGlzLl9kZXRhY2gpfWRpc2FibGUoKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9ZGV0YWNoKCl7dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsfX0odGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcixzKSx0aGlzLmJsb2NrPSgpPT5uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzPXt0b3A6IiIsbGVmdDoiIn0sdGhpcy5faXNFbmFibGVkPSExLHRoaXMuX2RvY3VtZW50PWV9YXR0YWNoKCl7fWVuYWJsZSgpe2lmKHRoaXMuX2NhbkJlRW5hYmxlZCgpKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdD10LnN0eWxlLmxlZnR8fCIiLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A9dC5zdHlsZS50b3B8fCIiLHQuc3R5bGUubGVmdD1ZcigtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0KSx0LnN0eWxlLnRvcD1ZcigtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLHRoaXMuX2lzRW5hYmxlZD0hMH19ZGlzYWJsZSgpe2lmKHRoaXMuX2lzRW5hYmxlZCl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9dC5zdHlsZSxyPXRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUsbz1pLnNjcm9sbEJlaGF2aW9yfHwiIixzPXIuc2Nyb2xsQmVoYXZpb3J8fCIiO3RoaXMuX2lzRW5hYmxlZD0hMSxpLmxlZnQ9dGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQsaS50b3A9dGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLnRvcCx0LmNsYXNzTGlzdC5yZW1vdmUoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx6NyYmKGkuc2Nyb2xsQmVoYXZpb3I9ci5zY3JvbGxCZWhhdmlvcj0iYXV0byIpLHdpbmRvdy5zY3JvbGwodGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx6NyYmKGkuc2Nyb2xsQmVoYXZpb3I9byxyLnNjcm9sbEJlaGF2aW9yPXMpfX1fY2FuQmVFbmFibGVkKCl7aWYodGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpfHx0aGlzLl9pc0VuYWJsZWQpcmV0dXJuITE7bGV0IGU9dGhpcy5fZG9jdW1lbnQuYm9keSxpPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJuIGUuc2Nyb2xsSGVpZ2h0PmkuaGVpZ2h0fHxlLnNjcm9sbFdpZHRoPmkud2lkdGh9fSh0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50KSx0aGlzLnJlcG9zaXRpb249cz0+bmV3IHhmKHRoaXMuX3Njcm9sbERpc3BhdGNoZXIsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9uZ1pvbmUscyksdGhpcy5fZG9jdW1lbnQ9b319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhOdSksayhqcyksayhhdCksayhMdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLFFhPWNsYXNze2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMuc2Nyb2xsU3RyYXRlZ3k9bmV3IHExLHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSExLHRoaXMuYmFja2Ryb3BDbGFzcz0iY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCIsdGhpcy5kaXNwb3NlT25OYXZpZ2F0aW9uPSExLHQpe2xldCBlPU9iamVjdC5rZXlzKHQpO2ZvcihsZXQgaSBvZiBlKXZvaWQgMCE9PXRbaV0mJih0aGlzW2ldPXRbaV0pfX19LFk3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fYXR0YWNoZWRPdmVybGF5cz1bXSx0aGlzLl9kb2N1bWVudD1lfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKX1hZGQoZSl7dGhpcy5yZW1vdmUoZSksdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5wdXNoKGUpfXJlbW92ZShlKXtsZXQgaT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmluZGV4T2YoZSk7aT4tMSYmdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5zcGxpY2UoaSwxKSwwPT09dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5sZW5ndGgmJnRoaXMuZGV0YWNoKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTHQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxXX2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFk3e2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoZSksdGhpcy5fbmdab25lPWksdGhpcy5fa2V5ZG93bkxpc3RlbmVyPXI9PntsZXQgbz10aGlzLl9hdHRhY2hlZE92ZXJsYXlzO2ZvcihsZXQgcz1vLmxlbmd0aC0xO3M+LTE7cy0tKWlmKG9bc10uX2tleWRvd25FdmVudHMub2JzZXJ2ZXJzLmxlbmd0aD4wKXtsZXQgYT1vW3NdLl9rZXlkb3duRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5hLm5leHQocikpOmEubmV4dChyKTticmVha319fWFkZChlKXtzdXBlci5hZGQoZSksdGhpcy5faXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMuX2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSk6dGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIpLHRoaXMuX2lzQXR0YWNoZWQ9ITApfWRldGFjaCgpe3RoaXMuX2lzQXR0YWNoZWQmJih0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciksdGhpcy5faXNBdHRhY2hlZD0hMSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTHQpLGsoYXQsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHFfZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWTd7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUpLHRoaXMuX3BsYXRmb3JtPWksdGhpcy5fbmdab25lPXIsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMSx0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyPW89Pnt0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0PW1hKG8pfSx0aGlzLl9jbGlja0xpc3RlbmVyPW89PntsZXQgcz1tYShvKSxhPSJjbGljayI9PT1vLnR5cGUmJnRoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ/dGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldDpzO3RoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ9bnVsbDtsZXQgbD10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNsaWNlKCk7Zm9yKGxldCBjPWwubGVuZ3RoLTE7Yz4tMTtjLS0pe2xldCBkPWxbY107aWYoZC5fb3V0c2lkZVBvaW50ZXJFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aDwxfHwhZC5oYXNBdHRhY2hlZCgpKWNvbnRpbnVlO2lmKGQub3ZlcmxheUVsZW1lbnQuY29udGFpbnMocyl8fGQub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoYSkpYnJlYWs7bGV0IHU9ZC5fb3V0c2lkZVBvaW50ZXJFdmVudHM7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW4oKCk9PnUubmV4dChvKSk6dS5uZXh0KG8pfX19YWRkKGUpe2lmKHN1cGVyLmFkZChlKSwhdGhpcy5faXNBdHRhY2hlZCl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuYm9keTt0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9hZGRFdmVudExpc3RlbmVycyhpKSk6dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoaSksdGhpcy5fcGxhdGZvcm0uSU9TJiYhdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKHRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWU9aS5zdHlsZS5jdXJzb3IsaS5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITApLHRoaXMuX2lzQXR0YWNoZWQ9ITB9fWRldGFjaCgpe2lmKHRoaXMuX2lzQXR0YWNoZWQpe2xldCBlPXRoaXMuX2RvY3VtZW50LmJvZHk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJhdXhjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksdGhpcy5fcGxhdGZvcm0uSU9TJiZ0aGlzLl9jdXJzb3JTdHlsZUlzU2V0JiYoZS5zdHlsZS5jdXJzb3I9dGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZSx0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSExKSx0aGlzLl9pc0F0dGFjaGVkPSExfX1fYWRkRXZlbnRMaXN0ZW5lcnMoZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwhMCksZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5hZGRFdmVudExpc3RlbmVyKCJhdXhjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTHQpLGsoR24pLGsoYXQsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHBnPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2RvY3VtZW50PWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jb250YWluZXJFbGVtZW50Py5yZW1vdmUoKX1nZXRDb250YWluZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckVsZW1lbnR8fHRoaXMuX2NyZWF0ZUNvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnR9X2NyZWF0ZUNvbnRhaW5lcigpe2xldCBlPSJjZGstb3ZlcmxheS1jb250YWluZXIiO2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8a3YoKSl7bGV0IHI9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7ZX1bcGxhdGZvcm09InNlcnZlciJdLCAuJHtlfVtwbGF0Zm9ybT0idGVzdCJdYCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspcltvXS5yZW1vdmUoKX1sZXQgaT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpLmNsYXNzTGlzdC5hZGQoZSksa3YoKT9pLnNldEF0dHJpYnV0ZSgicGxhdGZvcm0iLCJ0ZXN0Iik6dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHxpLnNldEF0dHJpYnV0ZSgicGxhdGZvcm0iLCJzZXJ2ZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9aX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhMdCksayhHbikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLE9jPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLGQ9ITEpe3RoaXMuX3BvcnRhbE91dGxldD10LHRoaXMuX2hvc3Q9ZSx0aGlzLl9wYW5lPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fbmdab25lPW8sdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPXMsdGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9sb2NhdGlvbj1sLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXI9Yyx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ZCx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCx0aGlzLl9iYWNrZHJvcENsaWNrPW5ldyBJZSx0aGlzLl9hdHRhY2htZW50cz1uZXcgSWUsdGhpcy5fZGV0YWNobWVudHM9bmV3IEllLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz1Nbi5FTVBUWSx0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlcj11PT50aGlzLl9iYWNrZHJvcENsaWNrLm5leHQodSksdGhpcy5fYmFja2Ryb3BUcmFuc2l0aW9uZW5kSGFuZGxlcj11PT57dGhpcy5fZGlzcG9zZUJhY2tkcm9wKHUudGFyZ2V0KX0sdGhpcy5fa2V5ZG93bkV2ZW50cz1uZXcgSWUsdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHM9bmV3IEllLHIuc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9zY3JvbGxTdHJhdGVneT1yLnNjcm9sbFN0cmF0ZWd5LHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKSksdGhpcy5fcG9zaXRpb25TdHJhdGVneT1yLnBvc2l0aW9uU3RyYXRlZ3l9Z2V0IG92ZXJsYXlFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3BhbmV9Z2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2hvc3R9YXR0YWNoKHQpeyF0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudCYmdGhpcy5fcHJldmlvdXNIb3N0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpO2xldCBlPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2godCk7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuX3VwZGF0ZVN0YWNraW5nT3JkZXIoKSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKSx0aGlzLl9zY3JvbGxTdHJhdGVneSYmdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoWXQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy51cGRhdGVQb3NpdGlvbigpfSksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMCksdGhpcy5fY29uZmlnLmhhc0JhY2tkcm9wJiZ0aGlzLl9hdHRhY2hCYWNrZHJvcCgpLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MsITApLHRoaXMuX2F0dGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIuYWRkKHRoaXMpLHRoaXMuX2NvbmZpZy5kaXNwb3NlT25OYXZpZ2F0aW9uJiYodGhpcy5fbG9jYXRpb25DaGFuZ2VzPXRoaXMuX2xvY2F0aW9uLnN1YnNjcmliZSgoKT0+dGhpcy5kaXNwb3NlKCkpKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLmFkZCh0aGlzKSwiZnVuY3Rpb24iPT10eXBlb2YgZT8ub25EZXN0cm95JiZlLm9uRGVzdHJveSgoKT0+e3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLmRldGFjaCgpKSl9KSxlfWRldGFjaCgpe2lmKCF0aGlzLmhhc0F0dGFjaGVkKCkpcmV0dXJuO3RoaXMuZGV0YWNoQmFja2Ryb3AoKSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCExKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneSYmdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO2xldCB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKSx0aGlzLl9sb2NhdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0fWRpc3Bvc2UoKXtsZXQgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCksdGhpcy5fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCksdGhpcy5fZGlzcG9zZUJhY2tkcm9wKHRoaXMuX2JhY2tkcm9wRWxlbWVudCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9wb3J0YWxPdXRsZXQuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaG1lbnRzLmNvbXBsZXRlKCksdGhpcy5fYmFja2Ryb3BDbGljay5jb21wbGV0ZSgpLHRoaXMuX2tleWRvd25FdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2hvc3Q/LnJlbW92ZSgpLHRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudD10aGlzLl9wYW5lPXRoaXMuX2hvc3Q9bnVsbCx0JiZ0aGlzLl9kZXRhY2htZW50cy5uZXh0KCksdGhpcy5fZGV0YWNobWVudHMuY29tcGxldGUoKX1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX1iYWNrZHJvcENsaWNrKCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wQ2xpY2t9YXR0YWNobWVudHMoKXtyZXR1cm4gdGhpcy5fYXR0YWNobWVudHN9ZGV0YWNobWVudHMoKXtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHN9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9rZXlkb3duRXZlbnRzfW91dHNpZGVQb2ludGVyRXZlbnRzKCl7cmV0dXJuIHRoaXMuX291dHNpZGVQb2ludGVyRXZlbnRzfWdldENvbmZpZygpe3JldHVybiB0aGlzLl9jb25maWd9dXBkYXRlUG9zaXRpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCl9dXBkYXRlUG9zaXRpb25TdHJhdGVneSh0KXt0IT09dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9dCx0aGlzLmhhc0F0dGFjaGVkKCkmJih0LmF0dGFjaCh0aGlzKSx0aGlzLnVwZGF0ZVBvc2l0aW9uKCkpKX11cGRhdGVTaXplKHQpe3RoaXMuX2NvbmZpZz17Li4udGhpcy5fY29uZmlnLC4uLnR9LHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCl9c2V0RGlyZWN0aW9uKHQpe3RoaXMuX2NvbmZpZz17Li4udGhpcy5fY29uZmlnLGRpcmVjdGlvbjp0fSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCl9YWRkUGFuZWxDbGFzcyh0KXt0aGlzLl9wYW5lJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdCwhMCl9cmVtb3ZlUGFuZWxDbGFzcyh0KXt0aGlzLl9wYW5lJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdCwhMSl9Z2V0RGlyZWN0aW9uKCl7bGV0IHQ9dGhpcy5fY29uZmlnLmRpcmVjdGlvbjtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnZhbHVlOiJsdHIifXVwZGF0ZVNjcm9sbFN0cmF0ZWd5KHQpe3QhPT10aGlzLl9zY3JvbGxTdHJhdGVneSYmKHRoaXMuX2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdC5lbmFibGUoKSkpfV91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCl7dGhpcy5faG9zdC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5nZXREaXJlY3Rpb24oKSl9X3VwZGF0ZUVsZW1lbnRTaXplKCl7aWYoIXRoaXMuX3BhbmUpcmV0dXJuO2xldCB0PXRoaXMuX3BhbmUuc3R5bGU7dC53aWR0aD1Zcih0aGlzLl9jb25maWcud2lkdGgpLHQuaGVpZ2h0PVlyKHRoaXMuX2NvbmZpZy5oZWlnaHQpLHQubWluV2lkdGg9WXIodGhpcy5fY29uZmlnLm1pbldpZHRoKSx0Lm1pbkhlaWdodD1Zcih0aGlzLl9jb25maWcubWluSGVpZ2h0KSx0Lm1heFdpZHRoPVlyKHRoaXMuX2NvbmZpZy5tYXhXaWR0aCksdC5tYXhIZWlnaHQ9WXIodGhpcy5fY29uZmlnLm1heEhlaWdodCl9X3RvZ2dsZVBvaW50ZXJFdmVudHModCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/IiI6Im5vbmUifV9hdHRhY2hCYWNrZHJvcCgpe2xldCB0PSJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIjt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiZ0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktYmFja2Ryb3Atbm9vcC1hbmltYXRpb24iKSx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9iYWNrZHJvcEVsZW1lbnQsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITApLHRoaXMuX2hvc3QucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2hvc3QpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXIpLCF0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQmJnR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU8InUiP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuX2JhY2tkcm9wRWxlbWVudCYmdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQodCl9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpfV91cGRhdGVTdGFja2luZ09yZGVyKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfWRldGFjaEJhY2tkcm9wKCl7bGV0IHQ9dGhpcy5fYmFja2Ryb3BFbGVtZW50O2lmKHQpe2lmKHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZClyZXR1cm4gdm9pZCB0aGlzLl9kaXNwb3NlQmFja2Ryb3AodCk7dC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIiksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLl9iYWNrZHJvcFRyYW5zaXRpb25lbmRIYW5kbGVyKX0pLHQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsdGhpcy5fYmFja2Ryb3BUaW1lb3V0PXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+c2V0VGltZW91dCgoKT0+e3RoaXMuX2Rpc3Bvc2VCYWNrZHJvcCh0KX0sNTAwKSl9fV90b2dnbGVDbGFzc2VzKHQsZSxpKXtsZXQgcj10ZyhlfHxbXSkuZmlsdGVyKG89PiEhbyk7ci5sZW5ndGgmJihpP3QuY2xhc3NMaXN0LmFkZCguLi5yKTp0LmNsYXNzTGlzdC5yZW1vdmUoLi4ucikpfV9kZXRhY2hDb250ZW50V2hlblN0YWJsZSgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCB0PXRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKG90KHRuKHRoaXMuX2F0dGFjaG1lbnRzLHRoaXMuX2RldGFjaG1lbnRzKSkpLnN1YnNjcmliZSgoKT0+eyghdGhpcy5fcGFuZXx8IXRoaXMuX2hvc3R8fDA9PT10aGlzLl9wYW5lLmNoaWxkcmVuLmxlbmd0aCkmJih0aGlzLl9wYW5lJiZ0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCExKSx0aGlzLl9ob3N0JiZ0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5faG9zdC5wYXJlbnRFbGVtZW50LHRoaXMuX2hvc3QucmVtb3ZlKCkpLHQudW5zdWJzY3JpYmUoKSl9KX0pfV9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKXtsZXQgdD10aGlzLl9zY3JvbGxTdHJhdGVneTt0JiYodC5kaXNhYmxlKCksdC5kZXRhY2gmJnQuZGV0YWNoKCkpfV9kaXNwb3NlQmFja2Ryb3AodCl7dCYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRoaXMuX2JhY2tkcm9wVHJhbnNpdGlvbmVuZEhhbmRsZXIpLHQucmVtb3ZlKCksdGhpcy5fYmFja2Ryb3BFbGVtZW50PT09dCYmKHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsKSksdGhpcy5fYmFja2Ryb3BUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX2JhY2tkcm9wVGltZW91dCksdGhpcy5fYmFja2Ryb3BUaW1lb3V0PXZvaWQgMCl9fSxqNz0iY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCIsWV9lPS8oW0EtWmEteiVdKykkLztmdW5jdGlvbiB5ZihuLHQpe2ZvcihsZXQgZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pO3JldHVybiBufWZ1bmN0aW9uIEc3KG4pe2lmKCJudW1iZXIiIT10eXBlb2YgbiYmbnVsbCE9bil7bGV0W3QsZV09bi5zcGxpdChZX2UpO3JldHVybiBlJiYicHgiIT09ZT9udWxsOnBhcnNlRmxvYXQodCl9cmV0dXJuIG58fG51bGx9ZnVuY3Rpb24gVzcobil7cmV0dXJue3RvcDpNYXRoLmZsb29yKG4udG9wKSxyaWdodDpNYXRoLmZsb29yKG4ucmlnaHQpLGJvdHRvbTpNYXRoLmZsb29yKG4uYm90dG9tKSxsZWZ0Ok1hdGguZmxvb3Iobi5sZWZ0KSx3aWR0aDpNYXRoLmZsb29yKG4ud2lkdGgpLGhlaWdodDpNYXRoLmZsb29yKG4uaGVpZ2h0KX19dmFyIHE3PSJjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciIsWF9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl9vdmVybGF5Q29udGFpbmVyPW99Z2xvYmFsKCl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2Nzc1Bvc2l0aW9uPSJzdGF0aWMiLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fYWxpZ25JdGVtcz0iIix0aGlzLl94UG9zaXRpb249IiIsdGhpcy5feE9mZnNldD0iIix0aGlzLl93aWR0aD0iIix0aGlzLl9oZWlnaHQ9IiIsdGhpcy5faXNEaXNwb3NlZD0hMX1hdHRhY2godCl7bGV0IGU9dC5nZXRDb25maWcoKTt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fd2lkdGgmJiFlLndpZHRoJiZ0LnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMuX3dpZHRofSksdGhpcy5faGVpZ2h0JiYhZS5oZWlnaHQmJnQudXBkYXRlU2l6ZSh7aGVpZ2h0OnRoaXMuX2hlaWdodH0pLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChxNyksdGhpcy5faXNEaXNwb3NlZD0hMX10b3AodD0iIil7cmV0dXJuIHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl90b3BPZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LXN0YXJ0Iix0aGlzfWxlZnQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249ImxlZnQiLHRoaXN9Ym90dG9tKHQ9IiIpe3JldHVybiB0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1lbmQiLHRoaXN9cmlnaHQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249InJpZ2h0Iix0aGlzfXN0YXJ0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJzdGFydCIsdGhpc31lbmQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249ImVuZCIsdGhpc313aWR0aCh0PSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe3dpZHRoOnR9KTp0aGlzLl93aWR0aD10LHRoaXN9aGVpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfWNlbnRlckhvcml6b250YWxseSh0PSIiKXtyZXR1cm4gdGhpcy5sZWZ0KHQpLHRoaXMuX3hQb3NpdGlvbj0iY2VudGVyIix0aGlzfWNlbnRlclZlcnRpY2FsbHkodD0iIil7cmV0dXJuIHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc31hcHBseSgpe2lmKCF0aGlzLl9vdmVybGF5UmVmfHwhdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKXJldHVybjtsZXQgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZSxpPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkse3dpZHRoOnIsaGVpZ2h0Om8sbWF4V2lkdGg6cyxtYXhIZWlnaHQ6YX09aSxsPSEoIjEwMCUiIT09ciYmIjEwMHZ3IiE9PXJ8fHMmJiIxMDAlIiE9PXMmJiIxMDB2dyIhPT1zKSxjPSEoIjEwMCUiIT09byYmIjEwMHZoIiE9PW98fGEmJiIxMDAlIiE9PWEmJiIxMDB2aCIhPT1hKSxkPXRoaXMuX3hQb3NpdGlvbix1PXRoaXMuX3hPZmZzZXQscD0icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuZGlyZWN0aW9uLGY9IiIsbT0iIixiPSIiO2w/Yj0iZmxleC1zdGFydCI6ImNlbnRlciI9PT1kPyhiPSJjZW50ZXIiLHA/bT11OmY9dSk6cD8ibGVmdCI9PT1kfHwiZW5kIj09PWQ/KGI9ImZsZXgtZW5kIixmPXUpOigicmlnaHQiPT09ZHx8InN0YXJ0Ij09PWQpJiYoYj0iZmxleC1zdGFydCIsbT11KToibGVmdCI9PT1kfHwic3RhcnQiPT09ZD8oYj0iZmxleC1zdGFydCIsZj11KTooInJpZ2h0Ij09PWR8fCJlbmQiPT09ZCkmJihiPSJmbGV4LWVuZCIsbT11KSx0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD1sPyIwIjpmLHQubWFyZ2luVG9wPWM/IjAiOnRoaXMuX3RvcE9mZnNldCx0Lm1hcmdpbkJvdHRvbT10aGlzLl9ib3R0b21PZmZzZXQsdC5tYXJnaW5SaWdodD1sPyIwIjptLGUuanVzdGlmeUNvbnRlbnQ9YixlLmFsaWduSXRlbXM9Yz8iZmxleC1zdGFydCI6dGhpcy5fYWxpZ25JdGVtc31kaXNwb3NlKCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX292ZXJsYXlSZWYpcmV0dXJuO2xldCB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LGk9ZS5zdHlsZTtlLmNsYXNzTGlzdC5yZW1vdmUocTcpLGkuanVzdGlmeUNvbnRlbnQ9aS5hbGlnbkl0ZW1zPXQubWFyZ2luVG9wPXQubWFyZ2luQm90dG9tPXQubWFyZ2luTGVmdD10Lm1hcmdpblJpZ2h0PXQucG9zaXRpb249IiIsdGhpcy5fb3ZlcmxheVJlZj1udWxsLHRoaXMuX2lzRGlzcG9zZWQ9ITB9fX1mbGV4aWJsZUNvbm5lY3RlZFRvKGUpe3JldHVybiBuZXcgY2xhc3N7Z2V0IHBvc2l0aW9ucygpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnN9Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX292ZXJsYXlDb250YWluZXI9byx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPXt3aWR0aDowLGhlaWdodDowfSx0aGlzLl9pc1B1c2hlZD0hMSx0aGlzLl9jYW5QdXNoPSEwLHRoaXMuX2dyb3dBZnRlck9wZW49ITEsdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPSEwLHRoaXMuX3Bvc2l0aW9uTG9ja2VkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTAsdGhpcy5fc2Nyb2xsYWJsZXM9W10sdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcz1uZXcgSWUsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX29mZnNldFg9MCx0aGlzLl9vZmZzZXRZPTAsdGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcz1bXSx0aGlzLnBvc2l0aW9uQ2hhbmdlcz10aGlzLl9wb3NpdGlvbkNoYW5nZXMsdGhpcy5zZXRPcmlnaW4odCl9YXR0YWNoKHQpe3RoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGo3KSx0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fYm91bmRpbmdCb3g9dC5ob3N0RWxlbWVudCx0aGlzLl9wYW5lPXQub3ZlcmxheUVsZW1lbnQsdGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLl9pc0luaXRpYWxSZW5kZXI9ITAsdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuYXBwbHkoKX0pfWFwcGx5KCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47aWYoIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmdGhpcy5fcG9zaXRpb25Mb2NrZWQmJnRoaXMuX2xhc3RQb3NpdGlvbilyZXR1cm4gdm9pZCB0aGlzLnJlYXBwbHlMYXN0UG9zaXRpb24oKTt0aGlzLl9jbGVhclBhbmVsQ2xhc3NlcygpLHRoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCksdGhpcy5fb3JpZ2luUmVjdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBzLHQ9dGhpcy5fb3JpZ2luUmVjdCxlPXRoaXMuX292ZXJsYXlSZWN0LGk9dGhpcy5fdmlld3BvcnRSZWN0LHI9dGhpcy5fY29udGFpbmVyUmVjdCxvPVtdO2ZvcihsZXQgYSBvZiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpe2xldCBsPXRoaXMuX2dldE9yaWdpblBvaW50KHQscixhKSxjPXRoaXMuX2dldE92ZXJsYXlQb2ludChsLGUsYSksZD10aGlzLl9nZXRPdmVybGF5Rml0KGMsZSxpLGEpO2lmKGQuaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihhLGwpO3RoaXMuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnMoZCxjLGkpP28ucHVzaCh7cG9zaXRpb246YSxvcmlnaW46bCxvdmVybGF5UmVjdDplLGJvdW5kaW5nQm94UmVjdDp0aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QobCxhKX0pOighc3x8cy5vdmVybGF5Rml0LnZpc2libGVBcmVhPGQudmlzaWJsZUFyZWEpJiYocz17b3ZlcmxheUZpdDpkLG92ZXJsYXlQb2ludDpjLG9yaWdpblBvaW50OmwscG9zaXRpb246YSxvdmVybGF5UmVjdDplfSl9aWYoby5sZW5ndGgpe2xldCBhPW51bGwsbD0tMTtmb3IobGV0IGMgb2Ygbyl7bGV0IGQ9Yy5ib3VuZGluZ0JveFJlY3Qud2lkdGgqYy5ib3VuZGluZ0JveFJlY3QuaGVpZ2h0KihjLnBvc2l0aW9uLndlaWdodHx8MSk7ZD5sJiYobD1kLGE9Yyl9cmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihhLnBvc2l0aW9uLGEub3JpZ2luKX1pZih0aGlzLl9jYW5QdXNoKXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMCx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24ocy5wb3NpdGlvbixzLm9yaWdpblBvaW50KTt0aGlzLl9hcHBseVBvc2l0aW9uKHMucG9zaXRpb24scy5vcmlnaW5Qb2ludCl9ZGV0YWNoKCl7dGhpcy5fY2xlYXJQYW5lbENsYXNzZXMoKSx0aGlzLl9sYXN0UG9zaXRpb249bnVsbCx0aGlzLl9wcmV2aW91c1B1c2hBbW91bnQ9bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2JvdW5kaW5nQm94JiZ5Zih0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSx7dG9wOiIiLGxlZnQ6IiIscmlnaHQ6IiIsYm90dG9tOiIiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSksdGhpcy5fcGFuZSYmdGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShqNyksdGhpcy5kZXRhY2goKSx0aGlzLl9wb3NpdGlvbkNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX2JvdW5kaW5nQm94PW51bGwsdGhpcy5faXNEaXNwb3NlZD0hMCl9cmVhcHBseUxhc3RQb3NpdGlvbigpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2xldCB0PXRoaXMuX2xhc3RQb3NpdGlvbjtpZih0KXt0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX2dldE9yaWdpblJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0aGlzLl9jb250YWluZXJSZWN0LHQpO3RoaXMuX2FwcGx5UG9zaXRpb24odCxlKX1lbHNlIHRoaXMuYXBwbHkoKX13aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVzPXQsdGhpc313aXRoUG9zaXRpb25zKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dCwtMT09PXQuaW5kZXhPZih0aGlzLl9sYXN0UG9zaXRpb24pJiYodGhpcy5fbGFzdFBvc2l0aW9uPW51bGwpLHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdGhpc313aXRoVmlld3BvcnRNYXJnaW4odCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0TWFyZ2luPXQsdGhpc313aXRoRmxleGlibGVEaW1lbnNpb25zKHQ9ITApe3JldHVybiB0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9dCx0aGlzfXdpdGhHcm93QWZ0ZXJPcGVuKHQ9ITApe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVuPXQsdGhpc313aXRoUHVzaCh0PSEwKXtyZXR1cm4gdGhpcy5fY2FuUHVzaD10LHRoaXN9d2l0aExvY2tlZFBvc2l0aW9uKHQ9ITApe3JldHVybiB0aGlzLl9wb3NpdGlvbkxvY2tlZD10LHRoaXN9c2V0T3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXdpdGhEZWZhdWx0T2Zmc2V0WCh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9d2l0aERlZmF1bHRPZmZzZXRZKHQpe3JldHVybiB0aGlzLl9vZmZzZXRZPXQsdGhpc313aXRoVHJhbnNmb3JtT3JpZ2luT24odCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yPXQsdGhpc31fZ2V0T3JpZ2luUG9pbnQodCxlLGkpe2xldCByLG87aWYoImNlbnRlciI9PWkub3JpZ2luWClyPXQubGVmdCt0LndpZHRoLzI7ZWxzZXtsZXQgcz10aGlzLl9pc1J0bCgpP3QucmlnaHQ6dC5sZWZ0LGE9dGhpcy5faXNSdGwoKT90LmxlZnQ6dC5yaWdodDtyPSJzdGFydCI9PWkub3JpZ2luWD9zOmF9cmV0dXJuIGUubGVmdDwwJiYoci09ZS5sZWZ0KSxvPSJjZW50ZXIiPT1pLm9yaWdpblk/dC50b3ArdC5oZWlnaHQvMjoidG9wIj09aS5vcmlnaW5ZP3QudG9wOnQuYm90dG9tLGUudG9wPDAmJihvLT1lLnRvcCkse3g6cix5Om99fV9nZXRPdmVybGF5UG9pbnQodCxlLGkpe2xldCByLG87cmV0dXJuIHI9ImNlbnRlciI9PWkub3ZlcmxheVg/LWUud2lkdGgvMjoic3RhcnQiPT09aS5vdmVybGF5WD90aGlzLl9pc1J0bCgpPy1lLndpZHRoOjA6dGhpcy5faXNSdGwoKT8wOi1lLndpZHRoLG89ImNlbnRlciI9PWkub3ZlcmxheVk/LWUuaGVpZ2h0LzI6InRvcCI9PWkub3ZlcmxheVk/MDotZS5oZWlnaHQse3g6dC54K3IseTp0Lnkrb319X2dldE92ZXJsYXlGaXQodCxlLGkscil7bGV0IG89VzcoZSkse3g6cyx5OmF9PXQsbD10aGlzLl9nZXRPZmZzZXQociwieCIpLGM9dGhpcy5fZ2V0T2Zmc2V0KHIsInkiKTtsJiYocys9bCksYyYmKGErPWMpO2xldCBwPTAtYSxmPWErby5oZWlnaHQtaS5oZWlnaHQsbT10aGlzLl9zdWJ0cmFjdE92ZXJmbG93cyhvLndpZHRoLDAtcyxzK28ud2lkdGgtaS53aWR0aCksYj10aGlzLl9zdWJ0cmFjdE92ZXJmbG93cyhvLmhlaWdodCxwLGYpLE09bSpiO3JldHVybnt2aXNpYmxlQXJlYTpNLGlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0Om8ud2lkdGgqby5oZWlnaHQ9PT1NLGZpdHNJblZpZXdwb3J0VmVydGljYWxseTpiPT09by5oZWlnaHQsZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHk6bT09by53aWR0aH19X2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnModCxlLGkpe2lmKHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyl7bGV0IHI9aS5ib3R0b20tZS55LG89aS5yaWdodC1lLngscz1HNyh0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbkhlaWdodCksYT1HNyh0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbldpZHRoKTtyZXR1cm4odC5maXRzSW5WaWV3cG9ydFZlcnRpY2FsbHl8fG51bGwhPXMmJnM8PXIpJiYodC5maXRzSW5WaWV3cG9ydEhvcml6b250YWxseXx8bnVsbCE9YSYmYTw9byl9cmV0dXJuITF9X3B1c2hPdmVybGF5T25TY3JlZW4odCxlLGkpe2lmKHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudCYmdGhpcy5fcG9zaXRpb25Mb2NrZWQpcmV0dXJue3g6dC54K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC54LHk6dC55K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC55fTtsZXQgcj1XNyhlKSxvPXRoaXMuX3ZpZXdwb3J0UmVjdCxzPU1hdGgubWF4KHQueCtyLndpZHRoLW8ud2lkdGgsMCksYT1NYXRoLm1heCh0Lnkrci5oZWlnaHQtby5oZWlnaHQsMCksbD1NYXRoLm1heChvLnRvcC1pLnRvcC10LnksMCksYz1NYXRoLm1heChvLmxlZnQtaS5sZWZ0LXQueCwwKSxkPTAsdT0wO3JldHVybiBkPXIud2lkdGg8PW8ud2lkdGg/Y3x8LXM6dC54PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28ubGVmdC1pLmxlZnQtdC54OjAsdT1yLmhlaWdodDw9by5oZWlnaHQ/bHx8LWE6dC55PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28udG9wLWkudG9wLXQueTowLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD17eDpkLHk6dX0se3g6dC54K2QseTp0LnkrdX19X2FwcGx5UG9zaXRpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHQucGFuZWxDbGFzcyYmdGhpcy5fYWRkUGFuZWxDbGFzc2VzKHQucGFuZWxDbGFzcyksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLm9ic2VydmVycy5sZW5ndGgpe2xldCBpPXRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSxyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfX0odCxpKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChyKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2xldCBpLGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcikscj10Lm92ZXJsYXlZO2k9ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7aX0gJHtyfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2xldCBvLHMsYSxkLHUscCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXM9dC55LG89aS5oZWlnaHQtcyt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlhPWkuaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLG89aS5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2xldCBmPU1hdGgubWluKGkuYm90dG9tLXQueStpLnRvcCx0LnkpLG09dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7bz0yKmYscz10LnktZixvPm0mJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocz10LnktbS8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFyfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmcilwPWkud2lkdGgtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGQ9dC54LXRoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFyfHwiZW5kIj09PWUub3ZlcmxheVgmJnIpdT10LngsZD1pLnJpZ2h0LXQueDtlbHNle2xldCBmPU1hdGgubWluKGkucmlnaHQtdC54K2kubGVmdCx0LngpLG09dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDtkPTIqZix1PXQueC1mLGQ+bSYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJih1PXQueC1tLzIpfXJldHVybnt0b3A6cyxsZWZ0OnUsYm90dG9tOmEscmlnaHQ6cCx3aWR0aDpkLGhlaWdodDpvfX1fc2V0Qm91bmRpbmdCb3hTdHlsZXModCxlKXtsZXQgaT10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTshdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0KSxpLndpZHRoPU1hdGgubWluKGkud2lkdGgsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aCkpO2xldCByPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlyLnRvcD1yLmxlZnQ9IjAiLHIuYm90dG9tPXIucmlnaHQ9ci5tYXhIZWlnaHQ9ci5tYXhXaWR0aD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle2xldCBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LHM9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1ZcihpLmhlaWdodCksci50b3A9WXIoaS50b3ApLHIuYm90dG9tPVlyKGkuYm90dG9tKSxyLndpZHRoPVlyKGkud2lkdGgpLHIubGVmdD1ZcihpLmxlZnQpLHIucmlnaHQ9WXIoaS5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihyLm1heEhlaWdodD1ZcihvKSkscyYmKHIubWF4V2lkdGg9WXIocykpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9aSx5Zih0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxyKX1fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpe3lmKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9X3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKXt5Zih0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiIsdHJhbnNmb3JtOiIifSl9X3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKHQsZSl7bGV0IGk9e30scj10aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCksbz10aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMscz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO2lmKHIpe2xldCBkPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3lmKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsZCkpLHlmKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsZCkpfWVsc2UgaS5wb3NpdGlvbj0ic3RhdGljIjtsZXQgYT0iIixsPXRoaXMuX2dldE9mZnNldChlLCJ4IiksYz10aGlzLl9nZXRPZmZzZXQoZSwieSIpO2wmJihhKz1gdHJhbnNsYXRlWCgke2x9cHgpIGApLGMmJihhKz1gdHJhbnNsYXRlWSgke2N9cHgpYCksaS50cmFuc2Zvcm09YS50cmltKCkscy5tYXhIZWlnaHQmJihyP2kubWF4SGVpZ2h0PVlyKHMubWF4SGVpZ2h0KTpvJiYoaS5tYXhIZWlnaHQ9IiIpKSxzLm1heFdpZHRoJiYocj9pLm1heFdpZHRoPVlyKHMubWF4V2lkdGgpOm8mJihpLm1heFdpZHRoPSIiKSkseWYodGhpcy5fcGFuZS5zdHlsZSxpKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsaSl7bGV0IHI9e3RvcDoiIixib3R0b206IiJ9LG89dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYobz10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKG8sdGhpcy5fb3ZlcmxheVJlY3QsaSkpLCJib3R0b20iPT09dC5vdmVybGF5WT9yLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShvLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOnIudG9wPVlyKG8ueSkscn1fZ2V0RXhhY3RPdmVybGF5WCh0LGUsaSl7bGV0IHMscj17bGVmdDoiIixyaWdodDoiIn0sbz10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihvPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4obyx0aGlzLl9vdmVybGF5UmVjdCxpKSkscz10aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIsInJpZ2h0Ij09PXM/ci5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKG8ueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjpyLmxlZnQ9WXIoby54KSxyfV9nZXRTY3JvbGxWaXNpYmlsaXR5KCl7bGV0IHQ9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXRoaXMuX3Njcm9sbGFibGVzLm1hcChyPT5yLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOlU3KHQsaSksaXNPcmlnaW5PdXRzaWRlVmlldzpJMih0LGkpLGlzT3ZlcmxheUNsaXBwZWQ6VTcoZSxpKSxpc092ZXJsYXlPdXRzaWRlVmlldzpJMihlLGkpfX1fc3VidHJhY3RPdmVyZmxvd3ModCwuLi5lKXtyZXR1cm4gZS5yZWR1Y2UoKGkscik9PmktTWF0aC5tYXgociwwKSx0KX1fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGk9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDppLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0OmkubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDppLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206aS50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19X2lzUnRsKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfV9oYXNFeGFjdFBvc2l0aW9uKCl7cmV0dXJuIXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9uc3x8dGhpcy5faXNQdXNoZWR9X2dldE9mZnNldCh0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX1fdmFsaWRhdGVQb3NpdGlvbnMoKXt9X2FkZFBhbmVsQ2xhc3Nlcyh0KXt0aGlzLl9wYW5lJiZ0Zyh0KS5mb3JFYWNoKGU9PnsiIiE9PWUmJi0xPT09dGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5pbmRleE9mKGUpJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5wdXNoKGUpLHRoaXMuX3BhbmUuY2xhc3NMaXN0LmFkZChlKSl9KX1fY2xlYXJQYW5lbENsYXNzZXMoKXt0aGlzLl9wYW5lJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5mb3JFYWNoKHQ9Pnt0aGlzLl9wYW5lLmNsYXNzTGlzdC5yZW1vdmUodCl9KSx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdKX1fZ2V0T3JpZ2luUmVjdCgpe2xldCB0PXRoaXMuX29yaWdpbjtpZih0IGluc3RhbmNlb2YgTWUpcmV0dXJuIHQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0IGluc3RhbmNlb2YgRWxlbWVudClyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgZT10LndpZHRofHwwLGk9dC5oZWlnaHR8fDA7cmV0dXJue3RvcDp0LnksYm90dG9tOnQueStpLGxlZnQ6dC54LHJpZ2h0OnQueCtlLGhlaWdodDppLHdpZHRoOmV9fX0oZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtLHRoaXMuX292ZXJsYXlDb250YWluZXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKGpzKSxrKEx0KSxrKEduKSxrKHBnKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUV9lPTAsemk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsZCx1LHAsZil7dGhpcy5zY3JvbGxTdHJhdGVnaWVzPWUsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1pLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMuX3Bvc2l0aW9uQnVpbGRlcj1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2luamVjdG9yPWEsdGhpcy5fbmdab25lPWwsdGhpcy5fZG9jdW1lbnQ9Yyx0aGlzLl9kaXJlY3Rpb25hbGl0eT1kLHRoaXMuX2xvY2F0aW9uPXUsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1wLHRoaXMuX2FuaW1hdGlvbnNNb2R1bGVUeXBlPWZ9Y3JlYXRlKGUpe2xldCBpPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCkscj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChpKSxvPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChyKSxzPW5ldyBRYShlKTtyZXR1cm4gcy5kaXJlY3Rpb249cy5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBPYyhvLGkscixzLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbG9jYXRpb24sdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlciwiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uc01vZHVsZVR5cGUpfXBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQnVpbGRlcn1fY3JlYXRlUGFuZUVsZW1lbnQoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGkuaWQ9ImNkay1vdmVybGF5LSIrUV9lKyssaS5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1wYW5lIiksZS5hcHBlbmRDaGlsZChpKSxpfV9jcmVhdGVIb3N0RWxlbWVudCgpe2xldCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZChlKSxlfV9jcmVhdGVQb3J0YWxPdXRsZXQoZSl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoeWMpKSxuZXcgR3YoZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsdGhpcy5fYXBwUmVmLHRoaXMuX2luamVjdG9yLHRoaXMuX2RvY3VtZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhHX2UpLGsocGcpLGsoZm8pLGsoWF9lKSxrKFdfZSksayhNaSksayhhdCksayhMdCksayhYaSksayh3YiksayhxX2UpLGsoaGksOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLFpfZT1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0sWDc9bmV3IGllKCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5Iiksd2Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnRSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstb3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsIm92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIl1dLGV4cG9ydEFzOlsiY2RrT3ZlcmxheU9yaWdpbiJdLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxCdT0oKCk9PntjbGFzcyBue2dldCBvZmZzZXRYKCl7cmV0dXJuIHRoaXMuX29mZnNldFh9c2V0IG9mZnNldFgoZSl7dGhpcy5fb2Zmc2V0WD1lLHRoaXMuX3Bvc2l0aW9uJiZ0aGlzLl91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uKX1nZXQgb2Zmc2V0WSgpe3JldHVybiB0aGlzLl9vZmZzZXRZfXNldCBvZmZzZXRZKGUpe3RoaXMuX29mZnNldFk9ZSx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcChlKXt0aGlzLl9oYXNCYWNrZHJvcD1SdChlKX1nZXQgbG9ja1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2tQb3NpdGlvbn1zZXQgbG9ja1Bvc2l0aW9uKGUpe3RoaXMuX2xvY2tQb3NpdGlvbj1SdChlKX1nZXQgZmxleGlibGVEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX2ZsZXhpYmxlRGltZW5zaW9uc31zZXQgZmxleGlibGVEaW1lbnNpb25zKGUpe3RoaXMuX2ZsZXhpYmxlRGltZW5zaW9ucz1SdChlKX1nZXQgZ3Jvd0FmdGVyT3Blbigpe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVufXNldCBncm93QWZ0ZXJPcGVuKGUpe3RoaXMuX2dyb3dBZnRlck9wZW49UnQoZSl9Z2V0IHB1c2goKXtyZXR1cm4gdGhpcy5fcHVzaH1zZXQgcHVzaChlKXt0aGlzLl9wdXNoPVJ0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2Rpcj1zLHRoaXMuX2hhc0JhY2tkcm9wPSExLHRoaXMuX2xvY2tQb3NpdGlvbj0hMSx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2ZsZXhpYmxlRGltZW5zaW9ucz0hMSx0aGlzLl9wdXNoPSExLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbj1Nbi5FTVBUWSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb249TW4uRU1QVFksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb249TW4uRU1QVFksdGhpcy52aWV3cG9ydE1hcmdpbj0wLHRoaXMub3Blbj0hMSx0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLmJhY2tkcm9wQ2xpY2s9bmV3IEYsdGhpcy5wb3NpdGlvbkNoYW5nZT1uZXcgRix0aGlzLmF0dGFjaD1uZXcgRix0aGlzLmRldGFjaD1uZXcgRix0aGlzLm92ZXJsYXlLZXlkb3duPW5ldyBGLHRoaXMub3ZlcmxheU91dHNpZGVDbGljaz1uZXcgRix0aGlzLl90ZW1wbGF0ZVBvcnRhbD1uZXcgWW8oaSxyKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9byx0aGlzLnNjcm9sbFN0cmF0ZWd5PXRoaXMuX3Njcm9sbFN0cmF0ZWd5RmFjdG9yeSgpfWdldCBvdmVybGF5UmVmKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXI/dGhpcy5fZGlyLnZhbHVlOiJsdHIifW5nT25EZXN0cm95KCl7dGhpcy5fYXR0YWNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpfW5nT25DaGFuZ2VzKGUpe3RoaXMuX3Bvc2l0aW9uJiYodGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbiksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0aGlzLndpZHRoLG1pbldpZHRoOnRoaXMubWluV2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LG1pbkhlaWdodDp0aGlzLm1pbkhlaWdodH0pLGUub3JpZ2luJiZ0aGlzLm9wZW4mJnRoaXMuX3Bvc2l0aW9uLmFwcGx5KCkpLGUub3BlbiYmKHRoaXMub3Blbj90aGlzLl9hdHRhY2hPdmVybGF5KCk6dGhpcy5fZGV0YWNoT3ZlcmxheSgpKX1fY3JlYXRlT3ZlcmxheSgpeyghdGhpcy5wb3NpdGlvbnN8fCF0aGlzLnBvc2l0aW9ucy5sZW5ndGgpJiYodGhpcy5wb3NpdGlvbnM9Wl9lKTtsZXQgZT10aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHRoaXMuX2J1aWxkQ29uZmlnKCkpO3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbj1lLmF0dGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgpPT50aGlzLmF0dGFjaC5lbWl0KCkpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbj1lLmRldGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgpPT50aGlzLmRldGFjaC5lbWl0KCkpLGUua2V5ZG93bkV2ZW50cygpLnN1YnNjcmliZShpPT57dGhpcy5vdmVybGF5S2V5ZG93bi5uZXh0KGkpLDI3PT09aS5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiF2cihpKSYmKGkucHJldmVudERlZmF1bHQoKSx0aGlzLl9kZXRhY2hPdmVybGF5KCkpfSksdGhpcy5fb3ZlcmxheVJlZi5vdXRzaWRlUG9pbnRlckV2ZW50cygpLnN1YnNjcmliZShpPT57dGhpcy5vdmVybGF5T3V0c2lkZUNsaWNrLm5leHQoaSl9KX1fYnVpbGRDb25maWcoKXtsZXQgZT10aGlzLl9wb3NpdGlvbj10aGlzLnBvc2l0aW9uU3RyYXRlZ3l8fHRoaXMuX2NyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKSxpPW5ldyBRYSh7ZGlyZWN0aW9uOnRoaXMuX2Rpcixwb3NpdGlvblN0cmF0ZWd5OmUsc2Nyb2xsU3RyYXRlZ3k6dGhpcy5zY3JvbGxTdHJhdGVneSxoYXNCYWNrZHJvcDp0aGlzLmhhc0JhY2tkcm9wfSk7cmV0dXJuKHRoaXMud2lkdGh8fDA9PT10aGlzLndpZHRoKSYmKGkud2lkdGg9dGhpcy53aWR0aCksKHRoaXMuaGVpZ2h0fHwwPT09dGhpcy5oZWlnaHQpJiYoaS5oZWlnaHQ9dGhpcy5oZWlnaHQpLCh0aGlzLm1pbldpZHRofHwwPT09dGhpcy5taW5XaWR0aCkmJihpLm1pbldpZHRoPXRoaXMubWluV2lkdGgpLCh0aGlzLm1pbkhlaWdodHx8MD09PXRoaXMubWluSGVpZ2h0KSYmKGkubWluSGVpZ2h0PXRoaXMubWluSGVpZ2h0KSx0aGlzLmJhY2tkcm9wQ2xhc3MmJihpLmJhY2tkcm9wQ2xhc3M9dGhpcy5iYWNrZHJvcENsYXNzKSx0aGlzLnBhbmVsQ2xhc3MmJihpLnBhbmVsQ2xhc3M9dGhpcy5wYW5lbENsYXNzKSxpfV91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KGUpe2xldCBpPXRoaXMucG9zaXRpb25zLm1hcChyPT4oe29yaWdpblg6ci5vcmlnaW5YLG9yaWdpblk6ci5vcmlnaW5ZLG92ZXJsYXlYOnIub3ZlcmxheVgsb3ZlcmxheVk6ci5vdmVybGF5WSxvZmZzZXRYOnIub2Zmc2V0WHx8dGhpcy5vZmZzZXRYLG9mZnNldFk6ci5vZmZzZXRZfHx0aGlzLm9mZnNldFkscGFuZWxDbGFzczpyLnBhbmVsQ2xhc3N8fHZvaWQgMH0pKTtyZXR1cm4gZS5zZXRPcmlnaW4odGhpcy5fZ2V0RmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKCkpLndpdGhQb3NpdGlvbnMoaSkud2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0aGlzLmZsZXhpYmxlRGltZW5zaW9ucykud2l0aFB1c2godGhpcy5wdXNoKS53aXRoR3Jvd0FmdGVyT3Blbih0aGlzLmdyb3dBZnRlck9wZW4pLndpdGhWaWV3cG9ydE1hcmdpbih0aGlzLnZpZXdwb3J0TWFyZ2luKS53aXRoTG9ja2VkUG9zaXRpb24odGhpcy5sb2NrUG9zaXRpb24pLndpdGhUcmFuc2Zvcm1PcmlnaW5Pbih0aGlzLnRyYW5zZm9ybU9yaWdpblNlbGVjdG9yKX1fY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpe2xldCBlPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2dldEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbigpKTtyZXR1cm4gdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneShlKSxlfV9nZXRGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oKXtyZXR1cm4gdGhpcy5vcmlnaW4gaW5zdGFuY2VvZiB3ZD90aGlzLm9yaWdpbi5lbGVtZW50UmVmOnRoaXMub3JpZ2lufV9hdHRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLmhhc0JhY2tkcm9wPXRoaXMuaGFzQmFja2Ryb3A6dGhpcy5fY3JlYXRlT3ZlcmxheSgpLHRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKXx8dGhpcy5fb3ZlcmxheVJlZi5hdHRhY2godGhpcy5fdGVtcGxhdGVQb3J0YWwpLHRoaXMuaGFzQmFja2Ryb3A/dGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb249dGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKGU9Pnt0aGlzLmJhY2tkcm9wQ2xpY2suZW1pdChlKX0pOnRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGg+MCYmKHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPXRoaXMuX3Bvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKEFfKCgpPT50aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGg+MCkpLnN1YnNjcmliZShlPT57dGhpcy5wb3NpdGlvbkNoYW5nZS5lbWl0KGUpLDA9PT10aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9KSl9X2RldGFjaE92ZXJsYXkoKXt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh6aSksQyhTaSksQyhzaSksQyhYNyksQyhYaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1jb25uZWN0ZWQtb3ZlcmxheSIsIiJdLFsiIiwiY29ubmVjdGVkLW92ZXJsYXkiLCIiXSxbIiIsImNka0Nvbm5lY3RlZE92ZXJsYXkiLCIiXV0saW5wdXRzOntvcmlnaW46WyJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwib3JpZ2luIl0scG9zaXRpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsInBvc2l0aW9ucyJdLHBvc2l0aW9uU3RyYXRlZ3k6WyJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25TdHJhdGVneSIsInBvc2l0aW9uU3RyYXRlZ3kiXSxvZmZzZXRYOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFgiLCJvZmZzZXRYIl0sb2Zmc2V0WTpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRZIiwib2Zmc2V0WSJdLHdpZHRoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoIiwid2lkdGgiXSxoZWlnaHQ6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGVpZ2h0IiwiaGVpZ2h0Il0sbWluV2lkdGg6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGgiLCJtaW5XaWR0aCJdLG1pbkhlaWdodDpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5IZWlnaHQiLCJtaW5IZWlnaHQiXSxiYWNrZHJvcENsYXNzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJiYWNrZHJvcENsYXNzIl0scGFuZWxDbGFzczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIiwicGFuZWxDbGFzcyJdLHZpZXdwb3J0TWFyZ2luOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVZpZXdwb3J0TWFyZ2luIiwidmlld3BvcnRNYXJnaW4iXSxzY3JvbGxTdHJhdGVneTpbImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsInNjcm9sbFN0cmF0ZWd5Il0sb3BlbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwib3BlbiJdLGRpc2FibGVDbG9zZTpbImNka0Nvbm5lY3RlZE92ZXJsYXlEaXNhYmxlQ2xvc2UiLCJkaXNhYmxlQ2xvc2UiXSx0cmFuc2Zvcm1PcmlnaW5TZWxlY3RvcjpbImNka0Nvbm5lY3RlZE92ZXJsYXlUcmFuc2Zvcm1PcmlnaW5PbiIsInRyYW5zZm9ybU9yaWdpblNlbGVjdG9yIl0saGFzQmFja2Ryb3A6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3AiLCJoYXNCYWNrZHJvcCJdLGxvY2tQb3NpdGlvbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iLCJsb2NrUG9zaXRpb24iXSxmbGV4aWJsZURpbWVuc2lvbnM6WyJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwiZmxleGlibGVEaW1lbnNpb25zIl0sZ3Jvd0FmdGVyT3BlbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwiZ3Jvd0FmdGVyT3BlbiJdLHB1c2g6WyJjZGtDb25uZWN0ZWRPdmVybGF5UHVzaCIsInB1c2giXX0sb3V0cHV0czp7YmFja2Ryb3BDbGljazoiYmFja2Ryb3BDbGljayIscG9zaXRpb25DaGFuZ2U6InBvc2l0aW9uQ2hhbmdlIixhdHRhY2g6ImF0dGFjaCIsZGV0YWNoOiJkZXRhY2giLG92ZXJsYXlLZXlkb3duOiJvdmVybGF5S2V5ZG93biIsb3ZlcmxheU91dHNpZGVDbGljazoib3ZlcmxheU91dHNpZGVDbGljayJ9LGV4cG9ydEFzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheSJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W0d0XX0pLG59KSgpLEpfZT17cHJvdmlkZTpYNyxkZXBzOlt6aV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LENvPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3ppLEpfZV0saW1wb3J0czpbT3UsSGwsTWQsTWRdfSksbn0pKCk7ZnVuY3Rpb24gJF9lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyKSgxLCJidXR0b24iLDMpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmFjdGlvbigpKX0pLFQoMiksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7digyKSxIZSgiICIsZS5kYXRhLmFjdGlvbiwiICIpfX12YXIgZWJlPVsibGFiZWwiXTtmdW5jdGlvbiB0YmUobix0KXt9dmFyIG5iZT1NYXRoLnBvdygyLDMxKS0xLENmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2FmdGVyRGlzbWlzc2VkPW5ldyBJZSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgSWUsdGhpcy5fb25BY3Rpb249bmV3IEllLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExLHRoaXMuY29udGFpbmVySW5zdGFuY2U9dCx0Ll9vbkV4aXQuc3Vic2NyaWJlKCgpPT50aGlzLl9maW5pc2hEaXNtaXNzKCkpfWRpc21pc3MoKXt0aGlzLl9hZnRlckRpc21pc3NlZC5jbG9zZWR8fHRoaXMuY29udGFpbmVySW5zdGFuY2UuZXhpdCgpLGNsZWFyVGltZW91dCh0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCl9ZGlzbWlzc1dpdGhBY3Rpb24oKXt0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fCh0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMCx0aGlzLl9vbkFjdGlvbi5uZXh0KCksdGhpcy5fb25BY3Rpb24uY29tcGxldGUoKSx0aGlzLmRpc21pc3MoKSksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX1jbG9zZVdpdGhBY3Rpb24oKXt0aGlzLmRpc21pc3NXaXRoQWN0aW9uKCl9X2Rpc21pc3NBZnRlcih0KXt0aGlzLl9kdXJhdGlvblRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT50aGlzLmRpc21pc3MoKSxNYXRoLm1pbih0LG5iZSkpfV9vcGVuKCl7dGhpcy5fYWZ0ZXJPcGVuZWQuY2xvc2VkfHwodGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCkpfV9maW5pc2hEaXNtaXNzKCl7dGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb25BY3Rpb24uY2xvc2VkfHx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyRGlzbWlzc2VkLm5leHQoe2Rpc21pc3NlZEJ5QWN0aW9uOnRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9ufSksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY29tcGxldGUoKSx0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMX1hZnRlckRpc21pc3NlZCgpe3JldHVybiB0aGlzLl9hZnRlckRpc21pc3NlZH1hZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9vbkVudGVyfW9uQWN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQWN0aW9ufX0sWTE9bmV3IGllKCJNYXRTbmFja0JhckRhdGEiKSxmZz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn19LGliZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0U25hY2tCYXJMYWJlbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtc25hY2stYmFyLWxhYmVsIiwibWRjLXNuYWNrYmFyX19sYWJlbCJdfSksbn0pKCkscmJlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRTbmFja0JhckFjdGlvbnMiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLXNuYWNrLWJhci1hY3Rpb25zIiwibWRjLXNuYWNrYmFyX19hY3Rpb25zIl19KSxufSkoKSxvYmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFNuYWNrQmFyQWN0aW9uIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1zbmFjay1iYXItYWN0aW9uIiwibWRjLXNuYWNrYmFyX19hY3Rpb24iXX0pLG59KSgpLHNiZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zbmFja0JhclJlZj1lLHRoaXMuZGF0YT1pfWFjdGlvbigpe3RoaXMuc25hY2tCYXJSZWYuZGlzbWlzc1dpdGhBY3Rpb24oKX1nZXQgaGFzQWN0aW9uKCl7cmV0dXJuISF0aGlzLmRhdGEuYWN0aW9ufX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKENmKSxDKFkxKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic2ltcGxlLXNuYWNrLWJhciJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtc2ltcGxlLXNuYWNrLWJhciJdLGV4cG9ydEFzOlsibWF0U25hY2tCYXIiXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sibWF0U25hY2tCYXJMYWJlbCIsIiJdLFsibWF0U25hY2tCYXJBY3Rpb25zIiwiIiw0LCJuZ0lmIl0sWyJtYXRTbmFja0JhckFjdGlvbnMiLCIiXSxbIm1hdC1idXR0b24iLCIiLCJtYXRTbmFja0JhckFjdGlvbiIsIiIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCksVCgxKSxnKCksUygyLCRfZSwzLDEsImRpdiIsMSkpLDImZSYmKHYoMSksSGUoIiAiLGkuZGF0YS5tZXNzYWdlLCJcbiIpLHYoMSksXygibmdJZiIsaS5oYXNBY3Rpb24pKX0sZGVwZW5kZW5jaWVzOltGZSxKaSxpYmUscmJlLG9iZV0sc3R5bGVzOlsiLm1hdC1tZGMtc2ltcGxlLXNuYWNrLWJhcntkaXNwbGF5OmZsZXh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYWJlPXtzbmFja0JhclN0YXRlOl9yKCJzdGF0ZSIsW3dpKCJ2b2lkLCBoaWRkZW4iLHJuKHt0cmFuc2Zvcm06InNjYWxlKDAuOCkiLG9wYWNpdHk6MH0pKSx3aSgidmlzaWJsZSIscm4oe3RyYW5zZm9ybToic2NhbGUoMSkiLG9wYWNpdHk6MX0pKSxnaSgiKiA9PiB2aXNpYmxlIixDaSgiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksZ2koIiogPT4gdm9pZCwgKiA9PiBoaWRkZW4iLENpKCI3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSkiLHJuKHtvcGFjaXR5OjB9KSkpXSl9LGxiZT0wLGNiZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRnV7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nWm9uZT1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX3BsYXRmb3JtPW8sdGhpcy5zbmFja0JhckNvbmZpZz1zLHRoaXMuX2RvY3VtZW50PWFpKEx0KSx0aGlzLl90cmFja2VkTW9kYWxzPW5ldyBTZXQsdGhpcy5fYW5ub3VuY2VEZWxheT0xNTAsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uQW5ub3VuY2U9bmV3IEllLHRoaXMuX29uRXhpdD1uZXcgSWUsdGhpcy5fb25FbnRlcj1uZXcgSWUsdGhpcy5fYW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuX2xpdmVFbGVtZW50SWQ9Im1hdC1zbmFjay1iYXItY29udGFpbmVyLWxpdmUtIitsYmUrKyx0aGlzLmF0dGFjaERvbVBvcnRhbD1hPT57dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgbD10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKGEpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksbH0sdGhpcy5fbGl2ZT0iYXNzZXJ0aXZlIiE9PXMucG9saXRlbmVzc3x8cy5hbm5vdW5jZW1lbnRNZXNzYWdlPyJvZmYiPT09cy5wb2xpdGVuZXNzPyJvZmYiOiJwb2xpdGUiOiJhc3NlcnRpdmUiLHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gmJigicG9saXRlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJzdGF0dXMiKSwiYXNzZXJ0aXZlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJhbGVydCIpKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLGl9b25BbmltYXRpb25FbmQoZSl7bGV0e2Zyb21TdGF0ZTppLHRvU3RhdGU6cn09ZTtpZigoInZvaWQiPT09ciYmInZvaWQiIT09aXx8ImhpZGRlbiI9PT1yKSYmdGhpcy5fY29tcGxldGVFeGl0KCksInZpc2libGUiPT09cil7bGV0IG89dGhpcy5fb25FbnRlcjt0aGlzLl9uZ1pvbmUucnVuKCgpPT57by5uZXh0KCksby5jb21wbGV0ZSgpfSl9fWVudGVyKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fYW5pbWF0aW9uU3RhdGU9InZpc2libGUiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpKX1leGl0KCl7cmV0dXJuIHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25TdGF0ZT0iaGlkZGVuIix0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXQtZXhpdCIsIiIpLGNsZWFyVGltZW91dCh0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZCl9KSx0aGlzLl9vbkV4aXR9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fY2xlYXJGcm9tTW9kYWxzKCksdGhpcy5fY29tcGxldGVFeGl0KCl9X2NvbXBsZXRlRXhpdCgpe3RoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoWXQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9vbkV4aXQubmV4dCgpLHRoaXMuX29uRXhpdC5jb21wbGV0ZSgpfSl9KX1fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPXRoaXMuc25hY2tCYXJDb25maWcucGFuZWxDbGFzcztpJiYoQXJyYXkuaXNBcnJheShpKT9pLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKTplLmNsYXNzTGlzdC5hZGQoaSkpLHRoaXMuX2V4cG9zZVRvTW9kYWxzKCl9X2V4cG9zZVRvTW9kYWxzKCl7bGV0IGU9dGhpcy5fbGl2ZUVsZW1lbnRJZCxpPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2JvZHkgPiAuY2RrLW92ZXJsYXktY29udGFpbmVyIFthcmlhLW1vZGFsPSJ0cnVlIl0nKTtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aVtyXSxzPW8uZ2V0QXR0cmlidXRlKCJhcmlhLW93bnMiKTt0aGlzLl90cmFja2VkTW9kYWxzLmFkZChvKSxzPy0xPT09cy5pbmRleE9mKGUpJiZvLnNldEF0dHJpYnV0ZSgiYXJpYS1vd25zIixzKyIgIitlKTpvLnNldEF0dHJpYnV0ZSgiYXJpYS1vd25zIixlKX19X2NsZWFyRnJvbU1vZGFscygpe3RoaXMuX3RyYWNrZWRNb2RhbHMuZm9yRWFjaChlPT57bGV0IGk9ZS5nZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIpO2lmKGkpe2xldCByPWkucmVwbGFjZSh0aGlzLl9saXZlRWxlbWVudElkLCIiKS50cmltKCk7ci5sZW5ndGg+MD9lLnNldEF0dHJpYnV0ZSgiYXJpYS1vd25zIixyKTplLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1vd25zIil9fSksdGhpcy5fdHJhY2tlZE1vZGFscy5jbGVhcigpfV9hc3NlcnROb3RBdHRhY2hlZCgpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpfV9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpe3RoaXMuX2Fubm91bmNlVGltZW91dElkfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT57bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIlthcmlhLWhpZGRlbl0iKSxpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbYXJpYS1saXZlXSIpO2lmKGUmJmkpe2xldCByPW51bGw7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJihyPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLGUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLGkuYXBwZW5kQ2hpbGQoZSkscj8uZm9jdXMoKSx0aGlzLl9vbkFubm91bmNlLm5leHQoKSx0aGlzLl9vbkFubm91bmNlLmNvbXBsZXRlKCl9fSx0aGlzLl9hbm5vdW5jZURlbGF5KX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGF0KSxDKE1lKSxDKCR0KSxDKEduKSxDKGZnKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShwcyw3KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxmZWF0dXJlczpbS2VdfSksbn0pKCksZGJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjYmV7X2FmdGVyUG9ydGFsQXR0YWNoZWQoKXtzdXBlci5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpO2xldCBlPXRoaXMuX2xhYmVsLm5hdGl2ZUVsZW1lbnQsaT0ibWRjLXNuYWNrYmFyX19sYWJlbCI7ZS5jbGFzc0xpc3QudG9nZ2xlKGksIWUucXVlcnlTZWxlY3RvcihgLiR7aX1gKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtc25hY2stYmFyLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKGViZSw3KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLl9sYWJlbD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWRjLXNuYWNrYmFyIiwibWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIiwibWRjLXNuYWNrYmFyLS1vcGVuIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJnpNKCJAc3RhdGUuZG9uZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25BbmltYXRpb25FbmQobyl9KSwyJmUmJkdNKCJAc3RhdGUiLGkuX2FuaW1hdGlvblN0YXRlKX0sZmVhdHVyZXM6W0tlXSxkZWNsczo2LHZhcnM6Myxjb25zdHM6W1sxLCJtZGMtc25hY2tiYXJfX3N1cmZhY2UiXSxbMSwibWF0LW1kYy1zbmFjay1iYXItbGFiZWwiXSxbImxhYmVsIiwiIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiXSxbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEsMikoMywiZGl2IiwzKSxTKDQsdGJlLDAsMCwibmctdGVtcGxhdGUiLDQpLGcoKSxQKDUsImRpdiIpLGcoKSgpKSwyJmUmJih2KDUpLEJlKCJhcmlhLWxpdmUiLGkuX2xpdmUpKCJyb2xlIixpLl9yb2xlKSgiaWQiLGkuX2xpdmVFbGVtZW50SWQpKX0sZGVwZW5kZW5jaWVzOltwc10sc3R5bGVzOlsnLm1kYy1zbmFja2JhcntkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3BvaW50ZXItZXZlbnRzOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1kYy1zbmFja2Jhci0tb3BlbmluZywubWRjLXNuYWNrYmFyLS1vcGVuLC5tZGMtc25hY2tiYXItLWNsb3Npbmd7ZGlzcGxheTpmbGV4fS5tZGMtc25hY2tiYXItLW9wZW4gLm1kYy1zbmFja2Jhcl9fbGFiZWwsLm1kYy1zbmFja2Jhci0tb3BlbiAubWRjLXNuYWNrYmFyX19hY3Rpb25ze3Zpc2liaWxpdHk6dmlzaWJsZX0ubWRjLXNuYWNrYmFyX19zdXJmYWNle3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6OHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7Ym94LXNpemluZzpib3JkZXItYm94O3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6MH0ubWRjLXNuYWNrYmFyX19zdXJmYWNlOjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtc25hY2tiYXJfX3N1cmZhY2U6OmJlZm9yZXtib3JkZXItY29sb3I6Q2FudmFzVGV4dH19W2Rpcj1ydGxdIC5tZGMtc25hY2tiYXJfX3N1cmZhY2UsLm1kYy1zbmFja2Jhcl9fc3VyZmFjZVtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MH0ubWRjLXNuYWNrYmFyLS1vcGVuIC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvfS5tZGMtc25hY2tiYXItLWNsb3NpbmcgLm1kYy1zbmFja2Jhcl9fc3VyZmFjZXt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1kYy1zbmFja2Jhcl9fbGFiZWx7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDo4cHg7d2lkdGg6MTAwJTtmbGV4LWdyb3c6MTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7dmlzaWJpbGl0eTpoaWRkZW47cGFkZGluZy10b3A6MTRweDtwYWRkaW5nLWJvdHRvbToxNHB4fVtkaXI9cnRsXSAubWRjLXNuYWNrYmFyX19sYWJlbCwubWRjLXNuYWNrYmFyX19sYWJlbFtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MTZweH0ubWRjLXNuYWNrYmFyX19sYWJlbDo6YmVmb3Jle2Rpc3BsYXk6aW5saW5lO2NvbnRlbnQ6YXR0cihkYXRhLW1kYy1zbmFja2Jhci1sYWJlbC10ZXh0KX0ubWRjLXNuYWNrYmFyX19hY3Rpb25ze2Rpc3BsYXk6ZmxleDtmbGV4LXNocmluazowO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7dmlzaWJpbGl0eTpoaWRkZW59Lm1kYy1zbmFja2Jhcl9fYWN0aW9uKy5tZGMtc25hY2tiYXJfX2Rpc21pc3N7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWRjLXNuYWNrYmFyX19hY3Rpb24rLm1kYy1zbmFja2Jhcl9fZGlzbWlzcywubWRjLXNuYWNrYmFyX19hY3Rpb24rLm1kYy1zbmFja2Jhcl9fZGlzbWlzc1tkaXI9cnRsXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lcnttYXJnaW46OHB4O3Bvc2l0aW9uOnN0YXRpY30ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7bWluLXdpZHRoOjM0NHB4fUBtZWRpYShtYXgtd2lkdGg6IDQ4MHB4KSwobWF4LXdpZHRoOiAzNDRweCl7Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19zdXJmYWNle21pbi13aWR0aDoxMDAlfX1AbWVkaWEobWF4LXdpZHRoOiA0ODBweCksKG1heC13aWR0aDogMzQ0cHgpey5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXJ7d2lkdGg6MTAwdnd9fS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fc3VyZmFjZXttYXgtd2lkdGg6NjcycHh9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19zdXJmYWNle2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fZGlzbWlzcyAubWRjLWJ1dHRvbl9faWNvbntmb250LXNpemU6dmFyKC0tbWRjLWljb24tYnV0dG9uLWljb24tc2l6ZSwgdmFyKC0tbWRjLXNuYWNrYmFyLWljb24tc2l6ZSwgMjRweCkpfS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fZGlzbWlzcyBzdmcsLm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19kaXNtaXNzIGltZ3t3aWR0aDp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCB2YXIoLS1tZGMtc25hY2tiYXItaWNvbi1zaXplLCAyNHB4KSk7aGVpZ2h0OnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLXNpemUsIHZhcigtLW1kYy1zbmFja2Jhci1pY29uLXNpemUsIDI0cHgpKX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtc25hY2tiYXItY29udGFpbmVyLWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtc25hY2tiYXItY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19sYWJlbHtmb250LXNpemU6dmFyKC0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1zaXplLCBpbmhlcml0KTtmb250LWZhbWlseTp2YXIoLS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LWZvbnQsIGluaGVyaXQpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtd2VpZ2h0LCBpbmhlcml0KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0LCBpbmhlcml0KX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tYXQtbWRjLWJ1dHRvbi5tYXQtbWRjLXNuYWNrLWJhci1hY3Rpb246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWF0LW1kYy1zbmFjay1iYXItYnV0dG9uLWNvbG9yLCB0cmFuc3BhcmVudCk7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogY3VycmVudENvbG9yfS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1hdC1tZGMtYnV0dG9uLm1hdC1tZGMtc25hY2stYmFyLWFjdGlvbjpub3QoOmRpc2FibGVkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yO29wYWNpdHk6LjF9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19sYWJlbDo6YmVmb3Jle2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1zbmFjay1iYXItaGFuZHNldCwubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyLC5tYXQtbWRjLXNuYWNrLWJhci1sYWJlbHtmbGV4OjEgMSBhdXRvfS5tYXQtbWRjLXNuYWNrLWJhci1oYW5kc2V0IC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7d2lkdGg6MTAwJX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlthYmUuc25hY2tCYXJTdGF0ZV19fSksbn0pKCksTzI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0NvLEhsLFBlLGNpLGZuLGZuXX0pLG59KSgpLFE3PW5ldyBpZSgibWF0LXNuYWNrLWJhci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmZ319KSxwYmU9KCgpPT57Y2xhc3MgbntnZXQgX29wZW5lZFNuYWNrQmFyUmVmKCl7bGV0IGU9dGhpcy5fcGFyZW50U25hY2tCYXI7cmV0dXJuIGU/ZS5fb3BlbmVkU25hY2tCYXJSZWY6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbH1zZXQgX29wZW5lZFNuYWNrQmFyUmVmKGUpe3RoaXMuX3BhcmVudFNuYWNrQmFyP3RoaXMuX3BhcmVudFNuYWNrQmFyLl9vcGVuZWRTbmFja0JhclJlZj1lOnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWw9ZX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2xpdmU9aSx0aGlzLl9pbmplY3Rvcj1yLHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlcj1vLHRoaXMuX3BhcmVudFNuYWNrQmFyPXMsdGhpcy5fZGVmYXVsdENvbmZpZz1hLHRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWw9bnVsbH1vcGVuRnJvbUNvbXBvbmVudChlLGkpe3JldHVybiB0aGlzLl9hdHRhY2goZSxpKX1vcGVuRnJvbVRlbXBsYXRlKGUsaSl7cmV0dXJuIHRoaXMuX2F0dGFjaChlLGkpfW9wZW4oZSxpPSIiLHIpe2xldCBvPXsuLi50aGlzLl9kZWZhdWx0Q29uZmlnLC4uLnJ9O3JldHVybiBvLmRhdGE9e21lc3NhZ2U6ZSxhY3Rpb246aX0sby5hbm5vdW5jZW1lbnRNZXNzYWdlPT09ZSYmKG8uYW5ub3VuY2VtZW50TWVzc2FnZT12b2lkIDApLHRoaXMub3BlbkZyb21Db21wb25lbnQodGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudCxvKX1kaXNtaXNzKCl7dGhpcy5fb3BlbmVkU25hY2tCYXJSZWYmJnRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWwmJnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWwuZGlzbWlzcygpfV9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihlLGkpe2xldCBvPU1pLmNyZWF0ZSh7cGFyZW50OmkmJmkudmlld0NvbnRhaW5lclJlZiYmaS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yfHx0aGlzLl9pbmplY3Rvcixwcm92aWRlcnM6W3twcm92aWRlOmZnLHVzZVZhbHVlOml9XX0pLHM9bmV3IFZsKHRoaXMuc25hY2tCYXJDb250YWluZXJDb21wb25lbnQsaS52aWV3Q29udGFpbmVyUmVmLG8pLGE9ZS5hdHRhY2gocyk7cmV0dXJuIGEuaW5zdGFuY2Uuc25hY2tCYXJDb25maWc9aSxhLmluc3RhbmNlfV9hdHRhY2goZSxpKXtsZXQgcj17Li4ubmV3IGZnLC4uLnRoaXMuX2RlZmF1bHRDb25maWcsLi4uaX0sbz10aGlzLl9jcmVhdGVPdmVybGF5KHIpLHM9dGhpcy5fYXR0YWNoU25hY2tCYXJDb250YWluZXIobyxyKSxhPW5ldyBDZihzLG8pO2lmKGUgaW5zdGFuY2VvZiBTaSl7bGV0IGw9bmV3IFlvKGUsbnVsbCx7JGltcGxpY2l0OnIuZGF0YSxzbmFja0JhclJlZjphfSk7YS5pbnN0YW5jZT1zLmF0dGFjaFRlbXBsYXRlUG9ydGFsKGwpfWVsc2V7bGV0IGw9dGhpcy5fY3JlYXRlSW5qZWN0b3IocixhKSxjPW5ldyBWbChlLHZvaWQgMCxsKSxkPXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGMpO2EuaW5zdGFuY2U9ZC5pbnN0YW5jZX1yZXR1cm4gdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoIihtYXgtd2lkdGg6IDU5OS45OHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiKS5waXBlKG90KG8uZGV0YWNobWVudHMoKSkpLnN1YnNjcmliZShsPT57by5vdmVybGF5RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuaGFuZHNldENzc0NsYXNzLGwubWF0Y2hlcyl9KSxyLmFubm91bmNlbWVudE1lc3NhZ2UmJnMuX29uQW5ub3VuY2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fbGl2ZS5hbm5vdW5jZShyLmFubm91bmNlbWVudE1lc3NhZ2Usci5wb2xpdGVuZXNzKX0pLHRoaXMuX2FuaW1hdGVTbmFja0JhcihhLHIpLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmPWEsdGhpcy5fb3BlbmVkU25hY2tCYXJSZWZ9X2FuaW1hdGVTbmFja0JhcihlLGkpe2UuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vcGVuZWRTbmFja0JhclJlZj09ZSYmKHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmPW51bGwpLGkuYW5ub3VuY2VtZW50TWVzc2FnZSYmdGhpcy5fbGl2ZS5jbGVhcigpfSksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY/KHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmFmdGVyRGlzbWlzc2VkKCkuc3Vic2NyaWJlKCgpPT57ZS5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpfSksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpKTplLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCksaS5kdXJhdGlvbiYmaS5kdXJhdGlvbj4wJiZlLmFmdGVyT3BlbmVkKCkuc3Vic2NyaWJlKCgpPT5lLl9kaXNtaXNzQWZ0ZXIoaS5kdXJhdGlvbikpfV9jcmVhdGVPdmVybGF5KGUpe2xldCBpPW5ldyBRYTtpLmRpcmVjdGlvbj1lLmRpcmVjdGlvbjtsZXQgcj10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCksbz0icnRsIj09PWUuZGlyZWN0aW9uLHM9ImxlZnQiPT09ZS5ob3Jpem9udGFsUG9zaXRpb258fCJzdGFydCI9PT1lLmhvcml6b250YWxQb3NpdGlvbiYmIW98fCJlbmQiPT09ZS5ob3Jpem9udGFsUG9zaXRpb24mJm8sYT0hcyYmImNlbnRlciIhPT1lLmhvcml6b250YWxQb3NpdGlvbjtyZXR1cm4gcz9yLmxlZnQoIjAiKTphP3IucmlnaHQoIjAiKTpyLmNlbnRlckhvcml6b250YWxseSgpLCJ0b3AiPT09ZS52ZXJ0aWNhbFBvc2l0aW9uP3IudG9wKCIwIik6ci5ib3R0b20oIjAiKSxpLnBvc2l0aW9uU3RyYXRlZ3k9cix0aGlzLl9vdmVybGF5LmNyZWF0ZShpKX1fY3JlYXRlSW5qZWN0b3IoZSxpKXtyZXR1cm4gTWkuY3JlYXRlKHtwYXJlbnQ6ZSYmZS52aWV3Q29udGFpbmVyUmVmJiZlLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6Q2YsdXNlVmFsdWU6aX0se3Byb3ZpZGU6WTEsdXNlVmFsdWU6ZS5kYXRhfV19KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh6aSksayhWdiksayhNaSksayhGdiksayhuLDEyKSxrKFE3KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWjc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBiZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7c3VwZXIoZSxpLHIsbyxzLGEpLHRoaXMuc2ltcGxlU25hY2tCYXJDb21wb25lbnQ9c2JlLHRoaXMuc25hY2tCYXJDb250YWluZXJDb21wb25lbnQ9ZGJlLHRoaXMuaGFuZHNldENzc0NsYXNzPSJtYXQtbWRjLXNuYWNrLWJhci1oYW5kc2V0In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh6aSksayhWdiksayhNaSksayhGdiksayhuLDEyKSxrKFE3KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46TzJ9KSxufSkoKSxmYmU9L1tcXF4kLiorPygpW1xde318XS9nLEo3PSJcXHUwMDAwLVxcdTAwMjBcXHUwMDdmLVxcdTAwOWYiLGhiZT1uZXcgUmVnRXhwKCIoPzpbYS16QS1aXVthLXpBLVowLTkrLi1dezIsfTpcXC9cXC98ZGF0YTp8d3d3XFwuKVteXFxzIitKNysnIl17Mix9W15cXHMnK0o3KyJcIicpfVxcXSw6Oy4hP10iLCJndSIpO2Z1bmN0aW9uIGU5KG4pe3JldHVybiBmdW5jdGlvbihuLHQpe3QuZmxhZ3MuaW5jbHVkZXMoImciKXx8KHQ9bmV3IFJlZ0V4cCh0LHQuZmxhZ3MrImciKSk7bGV0IGU9W10saT0wO2ZvcihsZXQgciBvZiBuLm1hdGNoQWxsKHQpKXtsZXQgbz1yLmluZGV4LHM9clswXTtvPmkmJmUucHVzaCh7aW5kZXg6aSx0ZXh0Om4uc3Vic3RyaW5nKGksbyksbWF0Y2hlc1JlZ2V4OiExfSksZS5wdXNoKHtpbmRleDpvLHRleHQ6cyxtYXRjaGVzUmVnZXg6ITB9KSxpPW8rcy5sZW5ndGh9cmV0dXJuIG4ubGVuZ3RoPmkmJmUucHVzaCh7aW5kZXg6aSx0ZXh0Om4uc3Vic3RyaW5nKGksbi5sZW5ndGgpLG1hdGNoZXNSZWdleDohMX0pLGV9KG4saGJlKS5tYXAoKHttYXRjaGVzUmVnZXg6dCx0ZXh0OmV9KT0+KHtpc1VSTDp0LHRleHQ6ZX0pKX1mdW5jdGlvbiBnYmUobix0KXtpZigxJm4mJihPdCgwKSxUKDEpLGt0KCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDt2KDEpLEhlKCIgIixlLnRleHQsIiAiKX19ZnVuY3Rpb24gX2JlKG4sdCl7aWYoMSZuJiYoaCgwLCJhIiw3KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0O1dpKCJocmVmIixlLnRleHQsa2EpLHYoMSksYnQoZS50ZXh0KX19ZnVuY3Rpb24gYmJlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLGdiZSwyLDEsIm5nLWNvbnRhaW5lciIsNSksUygyLF9iZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDYsV3QpLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1pdCgzKTt2KDEpLF8oIm5nSWYiLCFlLmlzVVJMKSgibmdJZkVsc2UiLGkpfX1mdW5jdGlvbiB2YmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDgpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uQWN0aW9uQnV0dG9uQ2xpY2tlZCgpKX0pLFQoMSksZygpfWlmKDImbil7bGV0IGU9dygpO3YoMSksSGUoIiAiLGUuYWxlcnQuZm9sbG93dXBBY3Rpb24ubG9jYWxpemVkTGFiZWwsIiAiKX19dmFyIHQ5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc25hY2tCYXJSZWY9ZSx0aGlzLnVua25vd25EYXRhPWksdGhpcy5zdG9yZT1yLHRoaXMuc3BsaXRCeVVSTD1lOSx0aGlzLmFsZXJ0PWl9YXN5bmMgb25BY3Rpb25CdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCk7bGV0IGU9YXdhaXQgdGhpcy5hbGVydC5mb2xsb3d1cEFjdGlvbi5nZXRGb2xsb3d1cEFjdGlvbigpO3RoaXMuc3RvcmUuZGlzcGF0Y2goZSl9b25DbG9zZUJ1dHRvbkNsaWNrZWQoKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3MoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhDZiksQyhZMSksQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImFsZXJ0LWRpc3BsYXktc25hY2tiYXIiXV0sZGVjbHM6Nix2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBjbG9zZSB0aGUgc25hY2tiYXIgbWVzc2FnZeKQn2VhNGQ5ZmU2MTQyMGEzZmNlODFjZjU0YzRjNjE1ZTNjMTljNjQ2YTbikJ8xNTM2MDg3NTE5NzQzNzA3MzYyOkRpc21pc3NgLFtbMSwibWVzc2FnZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1idXR0b24iLCIiLCJjbGFzcyIsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsImRpc21pc3MtYnV0dG9uIiwzLCJjbGljayJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxpbmtQaWVjZSIsIiJdLFsicmVsIiwibm9yZWZlcnJlciBub29wZW5lciIsInRhcmdldCIsIl9ibGFuayIsMywiaHJlZiJdLFsibWF0LWJ1dHRvbiIsIiIsMSwiZm9sbG93dXAtYnV0dG9uIiwzLCJjbGljayJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCksUygxLGJiZSw0LDIsIm5nLWNvbnRhaW5lciIsMSksZygpLGgoMiwiZGl2IiwyKSxTKDMsdmJlLDIsMSwiYnV0dG9uIiwzKSxoKDQsImJ1dHRvbiIsNCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DbG9zZUJ1dHRvbkNsaWNrZWQoKX0pLFQoNSwiIERpc21pc3MgIiksZygpKCkpLDImZSYmKHYoMSksXygibmdGb3JPZiIsaS5zcGxpdEJ5VVJMKGkuYWxlcnQubG9jYWxpemVkTWVzc2FnZSkpLHYoMiksXygibmdJZiIsaS5hbGVydC5mb2xsb3d1cEFjdGlvbikpfSxkZXBlbmRlbmNpZXM6W25uLEZlLEppXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7YWxpZ24tc2VsZjpjZW50ZXI7bWFyZ2luOjVweCAwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1sZWZ0OmF1dG99YnV0dG9uLm1hdC1tZGMtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG45PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5zbmFja0Jhcj1pLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWV9bmdPbkluaXQoKXt0aGlzLnN0b3JlLnNlbGVjdChqNikucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLGtlKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMuc2hvd0FsZXJ0KGUpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXNob3dBbGVydChlKXt0aGlzLnNuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KHQ5LHtkdXJhdGlvbjo1ZTMsaG9yaXpvbnRhbFBvc2l0aW9uOiJzdGFydCIsdmVydGljYWxQb3NpdGlvbjoiYm90dG9tIixkYXRhOmV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSksQyhaNykpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImFsZXJ0LXNuYWNrYmFyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxYMT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsY2ksTzJdfSksbn0pKCksUTE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1NjLFgxLFRyLmZvckZlYXR1cmUoImFsZXJ0cyIsaTcpLHRvLmZvckZlYXR1cmUoW243XSldfSksbn0pKCk7ZnVuY3Rpb24geGJlKG4sdCl7fXZhciBNZj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucm9sZT0iZGlhbG9nIix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMCx0aGlzLmJhY2tkcm9wQ2xhc3M9IiIsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy53aWR0aD0iIix0aGlzLmhlaWdodD0iIix0aGlzLmRhdGE9bnVsbCx0aGlzLmFyaWFEZXNjcmliZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbD1udWxsLHRoaXMuYXJpYU1vZGFsPSEwLHRoaXMuYXV0b0ZvY3VzPSJmaXJzdC10YWJiYWJsZSIsdGhpcy5yZXN0b3JlRm9jdXM9ITAsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMCx0aGlzLmNsb3NlT25EZXN0cm95PSEwLHRoaXMuY2xvc2VPbk92ZXJsYXlEZXRhY2htZW50cz0hMH19LEYyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGdXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9aSx0aGlzLl9jb25maWc9byx0aGlzLl9pbnRlcmFjdGl2aXR5Q2hlY2tlcj1zLHRoaXMuX25nWm9uZT1hLHRoaXMuX292ZXJsYXlSZWY9bCx0aGlzLl9mb2N1c01vbml0b3I9Yyx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZD1udWxsLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwsdGhpcy5hdHRhY2hEb21Qb3J0YWw9ZD0+e3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpO2xldCB1PXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwoZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnRBdHRhY2hlZCgpLHV9LHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXRoaXMuX2NvbmZpZy5hcmlhTGFiZWxsZWRCeXx8bnVsbCx0aGlzLl9kb2N1bWVudD1yfV9jb250ZW50QXR0YWNoZWQoKXt0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCksdGhpcy5faGFuZGxlQmFja2Ryb3BDbGlja3MoKSx0aGlzLl9jYXB0dXJlSW5pdGlhbEZvY3VzKCl9X2NhcHR1cmVJbml0aWFsRm9jdXMoKXt0aGlzLl90cmFwRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Jlc3RvcmVGb2N1cygpfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9jb250ZW50QXR0YWNoZWQoKSxpfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fY29udGVudEF0dGFjaGVkKCksaX1fcmVjYXB0dXJlRm9jdXMoKXt0aGlzLl9jb250YWluc0ZvY3VzKCl8fHRoaXMuX3RyYXBGb2N1cygpfV9mb3JjZUZvY3VzKGUsaSl7dGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNGb2N1c2FibGUoZSl8fChlLnRhYkluZGV4PS0xLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCByPSgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsciksZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9O2UuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsciksZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHIpfSkpLGUuZm9jdXMoaSl9X2ZvY3VzQnlDc3NTZWxlY3RvcihlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGUpO3ImJnRoaXMuX2ZvcmNlRm9jdXMocixpKX1fdHJhcEZvY3VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3N3aXRjaCh0aGlzLl9jb25maWcuYXV0b0ZvY3VzKXtjYXNlITE6Y2FzZSJkaWFsb2ciOnRoaXMuX2NvbnRhaW5zRm9jdXMoKXx8ZS5mb2N1cygpO2JyZWFrO2Nhc2UhMDpjYXNlImZpcnN0LXRhYmJhYmxlIjp0aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpLnRoZW4oaT0+e2l8fHRoaXMuX2ZvY3VzRGlhbG9nQ29udGFpbmVyKCl9KTticmVhaztjYXNlImZpcnN0LWhlYWRpbmciOnRoaXMuX2ZvY3VzQnlDc3NTZWxlY3RvcignaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgW3JvbGU9ImhlYWRpbmciXScpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fZm9jdXNCeUNzc1NlbGVjdG9yKHRoaXMuX2NvbmZpZy5hdXRvRm9jdXMpfX1fcmVzdG9yZUZvY3VzKCl7bGV0IGU9dGhpcy5fY29uZmlnLnJlc3RvcmVGb2N1cyxpPW51bGw7aWYoInN0cmluZyI9PXR5cGVvZiBlP2k9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKToiYm9vbGVhbiI9PXR5cGVvZiBlP2k9ZT90aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZDpudWxsOmUmJihpPWUpLHRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMmJmkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLmZvY3VzKXtsZXQgcj1PdigpLG89dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Oyghcnx8cj09PXRoaXMuX2RvY3VtZW50LmJvZHl8fHI9PT1vfHxvLmNvbnRhaW5zKHIpKSYmKHRoaXMuX2ZvY3VzTW9uaXRvcj8odGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKGksdGhpcy5fY2xvc2VJbnRlcmFjdGlvblR5cGUpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwpOmkuZm9jdXMoKSl9dGhpcy5fZm9jdXNUcmFwJiZ0aGlzLl9mb2N1c1RyYXAuZGVzdHJveSgpfV9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X2NvbnRhaW5zRm9jdXMoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT1PdigpO3JldHVybiBlPT09aXx8ZS5jb250YWlucyhpKX1faW5pdGlhbGl6ZUZvY3VzVHJhcCgpe3RoaXMuX2ZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX2RvY3VtZW50JiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9T3YoKSl9X2hhbmRsZUJhY2tkcm9wQ2xpY2tzKCl7dGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY29uZmlnLmRpc2FibGVDbG9zZSYmdGhpcy5fcmVjYXB0dXJlRm9jdXMoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKE52KSxDKEx0LDgpLEMoTWYpLEMoYWcpLEMoYXQpLEMoT2MpLEMoWHIpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJjZGstZGlhbG9nLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKHBzLDcpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuX3BvcnRhbE91dGxldD1yLmZpcnN0KX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsImNkay1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJpZCIsaS5fY29uZmlnLmlkfHxudWxsKSgicm9sZSIsaS5fY29uZmlnLnJvbGUpKCJhcmlhLW1vZGFsIixpLl9jb25maWcuYXJpYU1vZGFsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9jb25maWcuYXJpYUxhYmVsP251bGw6aS5fYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWxhYmVsIixpLl9jb25maWcuYXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsaS5fY29uZmlnLmFyaWFEZXNjcmliZWRCeXx8bnVsbCl9LGZlYXR1cmVzOltLZV0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUygwLHhiZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltwc10sc3R5bGVzOlsiLmNkay1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OmluaGVyaXQ7bWF4LWhlaWdodDppbmhlcml0fSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFl2PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5vdmVybGF5UmVmPXQsdGhpcy5jb25maWc9ZSx0aGlzLmNsb3NlZD1uZXcgSWUsdGhpcy5kaXNhYmxlQ2xvc2U9ZS5kaXNhYmxlQ2xvc2UsdGhpcy5iYWNrZHJvcENsaWNrPXQuYmFja2Ryb3BDbGljaygpLHRoaXMua2V5ZG93bkV2ZW50cz10LmtleWRvd25FdmVudHMoKSx0aGlzLm91dHNpZGVQb2ludGVyRXZlbnRzPXQub3V0c2lkZVBvaW50ZXJFdmVudHMoKSx0aGlzLmlkPWUuaWQsdGhpcy5rZXlkb3duRXZlbnRzLnN1YnNjcmliZShpPT57Mjc9PT1pLmtleUNvZGUmJiF0aGlzLmRpc2FibGVDbG9zZSYmIXZyKGkpJiYoaS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2Uodm9pZCAwLHtmb2N1c09yaWdpbjoia2V5Ym9hcmQifSkpfSksdGhpcy5iYWNrZHJvcENsaWNrLnN1YnNjcmliZSgoKT0+e3RoaXMuZGlzYWJsZUNsb3NlfHx0aGlzLmNsb3NlKHZvaWQgMCx7Zm9jdXNPcmlnaW46Im1vdXNlIn0pfSksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPXQuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9PnshMSE9PWUuY2xvc2VPbk92ZXJsYXlEZXRhY2htZW50cyYmdGhpcy5jbG9zZSgpfSl9Y2xvc2UodCxlKXtpZih0aGlzLmNvbnRhaW5lckluc3RhbmNlKXtsZXQgaT10aGlzLmNsb3NlZDt0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9jbG9zZUludGVyYWN0aW9uVHlwZT1lPy5mb2N1c09yaWdpbnx8InByb2dyYW0iLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCksaS5uZXh0KHQpLGkuY29tcGxldGUoKSx0aGlzLmNvbXBvbmVudEluc3RhbmNlPXRoaXMuY29udGFpbmVySW5zdGFuY2U9bnVsbH19dXBkYXRlUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdGhpc311cGRhdGVTaXplKHQ9IiIsZT0iIil7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0LGhlaWdodDplfSksdGhpc31hZGRQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyh0KSx0aGlzfXJlbW92ZVBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi5yZW1vdmVQYW5lbENsYXNzKHQpLHRoaXN9fSxpOT1uZXcgaWUoIkRpYWxvZ1Njcm9sbFN0cmF0ZWd5IiksQ2JlPW5ldyBpZSgiRGlhbG9nRGF0YSIpLE1iZT1uZXcgaWUoIkRlZmF1bHREaWFsb2dDb25maWciKSxTYmU9e3Byb3ZpZGU6aTksZGVwczpbemldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpfX0sRWJlPTAsTjI9KCgpPT57Y2xhc3MgbntnZXQgb3BlbkRpYWxvZ3MoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5vcGVuRGlhbG9nczp0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsfWdldCBhZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLmFmdGVyT3BlbmVkOnRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWx9Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fcGFyZW50RGlhbG9nPW8sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1zLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgSWUsdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbD1uZXcgSWUsdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzPW5ldyBNYXAsdGhpcy5hZnRlckFsbENsb3NlZD10YSgoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUocW4odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWF9b3BlbihlLGkpeyhpPXsuLi50aGlzLl9kZWZhdWx0T3B0aW9uc3x8bmV3IE1mLC4uLml9KS5pZD1pLmlkfHwiY2RrLWRpYWxvZy0iK0ViZSsrLGkuaWQmJnRoaXMuZ2V0RGlhbG9nQnlJZChpLmlkKTtsZXQgbz10aGlzLl9nZXRPdmVybGF5Q29uZmlnKGkpLHM9dGhpcy5fb3ZlcmxheS5jcmVhdGUobyksYT1uZXcgWXYocyxpKSxsPXRoaXMuX2F0dGFjaENvbnRhaW5lcihzLGEsaSk7cmV0dXJuIGEuY29udGFpbmVySW5zdGFuY2U9bCx0aGlzLl9hdHRhY2hEaWFsb2dDb250ZW50KGUsYSxsLGkpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHx0aGlzLl9oaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCksdGhpcy5vcGVuRGlhbG9ncy5wdXNoKGEpLGEuY2xvc2VkLnN1YnNjcmliZSgoKT0+dGhpcy5fcmVtb3ZlT3BlbkRpYWxvZyhhLCEwKSksdGhpcy5hZnRlck9wZW5lZC5uZXh0KGEpLGF9Y2xvc2VBbGwoKXtrMih0aGlzLm9wZW5EaWFsb2dzLGU9PmUuY2xvc2UoKSl9Z2V0RGlhbG9nQnlJZChlKXtyZXR1cm4gdGhpcy5vcGVuRGlhbG9ncy5maW5kKGk9PmkuaWQ9PT1lKX1uZ09uRGVzdHJveSgpe2syKHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWwsZT0+eyExPT09ZS5jb25maWcuY2xvc2VPbkRlc3Ryb3kmJnRoaXMuX3JlbW92ZU9wZW5EaWFsb2coZSwhMSl9KSxrMih0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLGU9PmUuY2xvc2UoKSksdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdfV9nZXRPdmVybGF5Q29uZmlnKGUpe2xldCBpPW5ldyBRYSh7cG9zaXRpb25TdHJhdGVneTplLnBvc2l0aW9uU3RyYXRlZ3l8fHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCksc2Nyb2xsU3RyYXRlZ3k6ZS5zY3JvbGxTdHJhdGVneXx8dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxwYW5lbENsYXNzOmUucGFuZWxDbGFzcyxoYXNCYWNrZHJvcDplLmhhc0JhY2tkcm9wLGRpcmVjdGlvbjplLmRpcmVjdGlvbixtaW5XaWR0aDplLm1pbldpZHRoLG1pbkhlaWdodDplLm1pbkhlaWdodCxtYXhXaWR0aDplLm1heFdpZHRoLG1heEhlaWdodDplLm1heEhlaWdodCx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodCxkaXNwb3NlT25OYXZpZ2F0aW9uOmUuY2xvc2VPbk5hdmlnYXRpb259KTtyZXR1cm4gZS5iYWNrZHJvcENsYXNzJiYoaS5iYWNrZHJvcENsYXNzPWUuYmFja2Ryb3BDbGFzcyksaX1fYXR0YWNoQ29udGFpbmVyKGUsaSxyKXtsZXQgYSxvPXIuaW5qZWN0b3J8fHIudmlld0NvbnRhaW5lclJlZj8uaW5qZWN0b3Iscz1be3Byb3ZpZGU6TWYsdXNlVmFsdWU6cn0se3Byb3ZpZGU6WXYsdXNlVmFsdWU6aX0se3Byb3ZpZGU6T2MsdXNlVmFsdWU6ZX1dO3IuY29udGFpbmVyPyJmdW5jdGlvbiI9PXR5cGVvZiByLmNvbnRhaW5lcj9hPXIuY29udGFpbmVyOihhPXIuY29udGFpbmVyLnR5cGUscy5wdXNoKC4uLnIuY29udGFpbmVyLnByb3ZpZGVycyhyKSkpOmE9RjI7bGV0IGw9bmV3IFZsKGEsci52aWV3Q29udGFpbmVyUmVmLE1pLmNyZWF0ZSh7cGFyZW50Om98fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpzfSksci5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO3JldHVybiBlLmF0dGFjaChsKS5pbnN0YW5jZX1fYXR0YWNoRGlhbG9nQ29udGVudChlLGkscixvKXtpZihlIGluc3RhbmNlb2YgU2kpe2xldCBzPXRoaXMuX2NyZWF0ZUluamVjdG9yKG8saSxyLHZvaWQgMCksYT17JGltcGxpY2l0Om8uZGF0YSxkaWFsb2dSZWY6aX07by50ZW1wbGF0ZUNvbnRleHQmJihhPXsuLi5hLC4uLiJmdW5jdGlvbiI9PXR5cGVvZiBvLnRlbXBsYXRlQ29udGV4dD9vLnRlbXBsYXRlQ29udGV4dCgpOm8udGVtcGxhdGVDb250ZXh0fSksci5hdHRhY2hUZW1wbGF0ZVBvcnRhbChuZXcgWW8oZSxudWxsLGEscykpfWVsc2V7bGV0IHM9dGhpcy5fY3JlYXRlSW5qZWN0b3IobyxpLHIsdGhpcy5faW5qZWN0b3IpLGE9ci5hdHRhY2hDb21wb25lbnRQb3J0YWwobmV3IFZsKGUsby52aWV3Q29udGFpbmVyUmVmLHMsby5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpKTtpLmNvbXBvbmVudEluc3RhbmNlPWEuaW5zdGFuY2V9fV9jcmVhdGVJbmplY3RvcihlLGkscixvKXtsZXQgcz1lLmluamVjdG9yfHxlLnZpZXdDb250YWluZXJSZWY/LmluamVjdG9yLGE9W3twcm92aWRlOkNiZSx1c2VWYWx1ZTplLmRhdGF9LHtwcm92aWRlOll2LHVzZVZhbHVlOml9XTtyZXR1cm4gZS5wcm92aWRlcnMmJigiZnVuY3Rpb24iPT10eXBlb2YgZS5wcm92aWRlcnM/YS5wdXNoKC4uLmUucHJvdmlkZXJzKGksZSxyKSk6YS5wdXNoKC4uLmUucHJvdmlkZXJzKSksZS5kaXJlY3Rpb24mJighc3x8IXMuZ2V0KFhpLG51bGwse29wdGlvbmFsOiEwfSkpJiZhLnB1c2goe3Byb3ZpZGU6WGksdXNlVmFsdWU6e3ZhbHVlOmUuZGlyZWN0aW9uLGNoYW5nZTpIdCgpfX0pLE1pLmNyZWF0ZSh7cGFyZW50OnN8fG8scHJvdmlkZXJzOmF9KX1fcmVtb3ZlT3BlbkRpYWxvZyhlLGkpe2xldCByPXRoaXMub3BlbkRpYWxvZ3MuaW5kZXhPZihlKTtyPi0xJiYodGhpcy5vcGVuRGlhbG9ncy5zcGxpY2UociwxKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8KHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5mb3JFYWNoKChvLHMpPT57bz9zLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLG8pOnMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpfSksdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmNsZWFyKCksaSYmdGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5uZXh0KCkpKX1faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpe2xldCBlPXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpO2lmKGUucGFyZW50RWxlbWVudCl7bGV0IGk9ZS5wYXJlbnRFbGVtZW50LmNoaWxkcmVuO2ZvcihsZXQgcj1pLmxlbmd0aC0xO3I+LTE7ci0tKXtsZXQgbz1pW3JdO28hPT1lJiYiU0NSSVBUIiE9PW8ubm9kZU5hbWUmJiJTVFlMRSIhPT1vLm5vZGVOYW1lJiYhby5oYXNBdHRyaWJ1dGUoImFyaWEtbGl2ZSIpJiYodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLnNldChvLG8uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKSxvLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIikpfX19X2dldEFmdGVyQWxsQ2xvc2VkKCl7bGV0IGU9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiBlP2UuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh6aSksayhNaSksayhNYmUsOCksayhuLDEyKSxrKHBnKSxrKGk5KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gazIobix0KXtsZXQgZT1uLmxlbmd0aDtmb3IoO2UtLTspdChuW2VdKX12YXIgcjk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbTjIsU2JlXSxpbXBvcnRzOltDbyxIbCxsZyxIbF19KSxufSkoKTtmdW5jdGlvbiBUYmUobix0KXt9dmFyIG1nPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yb2xlPSJkaWFsb2ciLHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSEwLHRoaXMuYmFja2Ryb3BDbGFzcz0iIix0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLndpZHRoPSIiLHRoaXMuaGVpZ2h0PSIiLHRoaXMubWF4V2lkdGg9IjgwdnciLHRoaXMuZGF0YT1udWxsLHRoaXMuYXJpYURlc2NyaWJlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWxsZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsPW51bGwsdGhpcy5hcmlhTW9kYWw9ITAsdGhpcy5hdXRvRm9jdXM9ImZpcnN0LXRhYmJhYmxlIix0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLmRlbGF5Rm9jdXNUcmFwPSEwLHRoaXMuY2xvc2VPbk5hdmlnYXRpb249ITB9fSxMMj0ibWRjLWRpYWxvZy0tb3BlbiIsbzk9Im1kYy1kaWFsb2ctLW9wZW5pbmciLHM5PSJtZGMtZGlhbG9nLS1jbG9zaW5nIixBYmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEYye2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSxpLHIsbyxzLGEsbCxjKSx0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQ9bmV3IEZ9X2NhcHR1cmVJbml0aWFsRm9jdXMoKXt0aGlzLl9jb25maWcuZGVsYXlGb2N1c1RyYXB8fHRoaXMuX3RyYXBGb2N1cygpfV9vcGVuQW5pbWF0aW9uRG9uZShlKXt0aGlzLl9jb25maWcuZGVsYXlGb2N1c1RyYXAmJnRoaXMuX3RyYXBGb2N1cygpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToib3BlbmVkIix0b3RhbFRpbWU6ZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKE52KSxDKEx0LDgpLEMobWcpLEMoYWcpLEMoYXQpLEMoT2MpLEMoWHIpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sZmVhdHVyZXM6W0tlXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksYTk9Ii0tbWF0LWRpYWxvZy10cmFuc2l0aW9uLWR1cmF0aW9uIjtmdW5jdGlvbiBsOShuKXtyZXR1cm4gbnVsbD09bj9udWxsOiJudW1iZXIiPT10eXBlb2Ygbj9uOm4uZW5kc1dpdGgoIm1zIik/X2kobi5zdWJzdHJpbmcoMCxuLmxlbmd0aC0yKSk6bi5lbmRzV2l0aCgicyIpPzFlMypfaShuLnN1YnN0cmluZygwLG4ubGVuZ3RoLTEpKToiMCI9PT1uPzA6bnVsbH12YXIgUmJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBBYmV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLGQpe3N1cGVyKGUsaSxyLG8scyxhLGwsZCksdGhpcy5fYW5pbWF0aW9uTW9kZT1jLHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkPSJOb29wQW5pbWF0aW9ucyIhPT10aGlzLl9hbmltYXRpb25Nb2RlLHRoaXMuX2hvc3RFbGVtZW50PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLl9vcGVuQW5pbWF0aW9uRHVyYXRpb249dGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQ/bDkodGhpcy5fY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb24pPz8xNTA6MCx0aGlzLl9jbG9zZUFuaW1hdGlvbkR1cmF0aW9uPXRoaXMuX2FuaW1hdGlvbnNFbmFibGVkP2w5KHRoaXMuX2NvbmZpZy5leGl0QW5pbWF0aW9uRHVyYXRpb24pPz83NTowLHRoaXMuX2FuaW1hdGlvblRpbWVyPW51bGwsdGhpcy5fZmluaXNoRGlhbG9nT3Blbj0oKT0+e3RoaXMuX2NsZWFyQW5pbWF0aW9uQ2xhc3NlcygpLHRoaXMuX29wZW5BbmltYXRpb25Eb25lKHRoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbil9LHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlPSgpPT57dGhpcy5fY2xlYXJBbmltYXRpb25DbGFzc2VzKCksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoe3N0YXRlOiJjbG9zZWQiLHRvdGFsVGltZTp0aGlzLl9jbG9zZUFuaW1hdGlvbkR1cmF0aW9ufSl9fV9jb250ZW50QXR0YWNoZWQoKXtzdXBlci5fY29udGVudEF0dGFjaGVkKCksdGhpcy5fc3RhcnRPcGVuQW5pbWF0aW9uKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLG51bGwhPT10aGlzLl9hbmltYXRpb25UaW1lciYmY2xlYXJUaW1lb3V0KHRoaXMuX2FuaW1hdGlvblRpbWVyKX1fc3RhcnRPcGVuQW5pbWF0aW9uKCl7dGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoe3N0YXRlOiJvcGVuaW5nIix0b3RhbFRpbWU6dGhpcy5fb3BlbkFuaW1hdGlvbkR1cmF0aW9ufSksdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQ/KHRoaXMuX2hvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGE5LGAke3RoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbn1tc2ApLHRoaXMuX3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChvOSxMMikpLHRoaXMuX3dhaXRGb3JBbmltYXRpb25Ub0NvbXBsZXRlKHRoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbix0aGlzLl9maW5pc2hEaWFsb2dPcGVuKSk6KHRoaXMuX2hvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoTDIpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMuX2ZpbmlzaERpYWxvZ09wZW4oKSkpfV9zdGFydEV4aXRBbmltYXRpb24oKXt0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQuZW1pdCh7c3RhdGU6ImNsb3NpbmciLHRvdGFsVGltZTp0aGlzLl9jbG9zZUFuaW1hdGlvbkR1cmF0aW9ufSksdGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShMMiksdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQ/KHRoaXMuX2hvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGE5LGAke3RoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbn1tc2ApLHRoaXMuX3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChzOSkpLHRoaXMuX3dhaXRGb3JBbmltYXRpb25Ub0NvbXBsZXRlKHRoaXMuX2Nsb3NlQW5pbWF0aW9uRHVyYXRpb24sdGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UpKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLl9maW5pc2hEaWFsb2dDbG9zZSgpKX1fY2xlYXJBbmltYXRpb25DbGFzc2VzKCl7dGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShvOSxzOSl9X3dhaXRGb3JBbmltYXRpb25Ub0NvbXBsZXRlKGUsaSl7bnVsbCE9PXRoaXMuX2FuaW1hdGlvblRpbWVyJiZjbGVhclRpbWVvdXQodGhpcy5fYW5pbWF0aW9uVGltZXIpLHRoaXMuX2FuaW1hdGlvblRpbWVyPXNldFRpbWVvdXQoaSxlKX1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOmUoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKE52KSxDKEx0LDgpLEMobWcpLEMoYWcpLEMoYXQpLEMoT2MpLEMoaGksOCksQyhYcikpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsIm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciIsIm1kYy1kaWFsb2ciXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKGpvKCJpZCIsaS5fY29uZmlnLmlkKSxCZSgiYXJpYS1tb2RhbCIsaS5fY29uZmlnLmFyaWFNb2RhbCkoInJvbGUiLGkuX2NvbmZpZy5yb2xlKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9jb25maWcuYXJpYUxhYmVsP251bGw6aS5fYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWxhYmVsIixpLl9jb25maWcuYXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsaS5fY29uZmlnLmFyaWFEZXNjcmliZWRCeXx8bnVsbCksbnQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwhaS5fYW5pbWF0aW9uc0VuYWJsZWQpKX0sZmVhdHVyZXM6W0tlXSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJtZGMtZGlhbG9nX19jb250YWluZXIiXSxbMSwibWF0LW1kYy1kaWFsb2ctc3VyZmFjZSIsIm1kYy1kaWFsb2dfX3N1cmZhY2UiXSxbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFMoMixUYmUsMCwwLCJuZy10ZW1wbGF0ZSIsMiksZygpKCkpfSxkZXBlbmRlbmNpZXM6W3BzXSxzdHlsZXM6WycubWRjLWVsZXZhdGlvbi1vdmVybGF5e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6dmFyKC0tbWRjLWVsZXZhdGlvbi1vdmVybGF5LW9wYWNpdHksIDApO3RyYW5zaXRpb246b3BhY2l0eSAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtZGlhbG9nLC5tZGMtZGlhbG9nX19zY3JpbXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Lm1kYy1kaWFsb2d7ZGlzcGxheTpub25lO3otaW5kZXg6dmFyKC0tbWRjLWRpYWxvZy16LWluZGV4LCA3KX0ubWRjLWRpYWxvZyAubWRjLWRpYWxvZ19fY29udGVudHtwYWRkaW5nOjIwcHggMjRweCAyMHB4IDI0cHh9Lm1kYy1kaWFsb2cgLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWluLXdpZHRoOjI4MHB4fUBtZWRpYShtYXgtd2lkdGg6IDU5MnB4KXsubWRjLWRpYWxvZyAubWRjLWRpYWxvZ19fc3VyZmFjZXttYXgtd2lkdGg6Y2FsYygxMDB2dyAtIDMycHgpfX1AbWVkaWEobWluLXdpZHRoOiA1OTJweCl7Lm1kYy1kaWFsb2cgLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LXdpZHRoOjU2MHB4fX0ubWRjLWRpYWxvZyAubWRjLWRpYWxvZ19fc3VyZmFjZXttYXgtaGVpZ2h0OmNhbGMoMTAwJSAtIDMycHgpfS5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LXdpZHRoOm5vbmV9QG1lZGlhKG1heC13aWR0aDogOTYwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LWhlaWdodDo1NjBweDt3aWR0aDo1NjBweH0ubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDotMTJweH19QG1lZGlhKG1heC13aWR0aDogNzIwcHgpYW5kIChtYXgtd2lkdGg6IDY3MnB4KXsubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNle3dpZHRoOmNhbGMoMTAwdncgLSAxMTJweCl9fUBtZWRpYShtYXgtd2lkdGg6IDcyMHB4KWFuZCAobWluLXdpZHRoOiA2NzJweCl7Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZXt3aWR0aDo1NjBweH19QG1lZGlhKG1heC13aWR0aDogNzIwcHgpYW5kIChtYXgtaGVpZ2h0OiA3MjBweCl7Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZXttYXgtaGVpZ2h0OmNhbGMoMTAwdmggLSAxNjBweCl9fUBtZWRpYShtYXgtd2lkdGg6IDcyMHB4KWFuZCAobWluLWhlaWdodDogNzIwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LWhlaWdodDo1NjBweH19QG1lZGlhKG1heC13aWR0aDogNzIwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2UgLm1kYy1kaWFsb2dfX2Nsb3Nle3JpZ2h0Oi0xMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA3MjBweClhbmQgKG1heC1oZWlnaHQ6IDQwMHB4KSwobWF4LXdpZHRoOiA2MDBweCksKG1pbi13aWR0aDogNzIwcHgpYW5kIChtYXgtaGVpZ2h0OiA0MDBweCl7Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZXtoZWlnaHQ6MTAwJTttYXgtaGVpZ2h0OjEwMHZoO21heC13aWR0aDoxMDB2dzt3aWR0aDoxMDB2dztib3JkZXItcmFkaXVzOjB9Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZSAubWRjLWRpYWxvZ19fY2xvc2V7b3JkZXI6LTE7bGVmdDotMTJweH0ubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZGlhbG9nX19oZWFkZXJ7cGFkZGluZzowIDE2cHggOXB4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2UgLm1kYy1kaWFsb2dfX3RpdGxle21hcmdpbi1sZWZ0OmNhbGMoMTZweCAtIDIgKiAxMnB4KX19QG1lZGlhKG1pbi13aWR0aDogOTYwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7d2lkdGg6Y2FsYygxMDB2dyAtIDQwMHB4KX0ubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDotMTJweH19Lm1kYy1kaWFsb2cubWRjLWRpYWxvZ19fc2NyaW0tLWhpZGRlbiAubWRjLWRpYWxvZ19fc2NyaW17b3BhY2l0eTowfS5tZGMtZGlhbG9nX19zY3JpbXtvcGFjaXR5OjA7ei1pbmRleDotMX0ubWRjLWRpYWxvZ19fY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtZGlhbG9nX19zdXJmYWNle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlO3BvaW50ZXItZXZlbnRzOmF1dG87b3ZlcmZsb3cteTphdXRvfS5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZWxldmF0aW9uLW92ZXJsYXl7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjB9W2Rpcj1ydGxdIC5tZGMtZGlhbG9nX19zdXJmYWNlLC5tZGMtZGlhbG9nX19zdXJmYWNlW2Rpcj1ydGxde3RleHQtYWxpZ246cmlnaHR9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtZGlhbG9nX19zdXJmYWNle291dGxpbmU6MnB4IHNvbGlkIHdpbmRvd1RleHR9fS5tZGMtZGlhbG9nX19zdXJmYWNlOjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtZGlhbG9nX19zdXJmYWNlOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOkNhbnZhc1RleHR9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSxzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSl7Lm1kYy1kaWFsb2dfX3N1cmZhY2U6OmJlZm9yZXtjb250ZW50Om5vbmV9fS5tZGMtZGlhbG9nX190aXRsZXtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MCAwIDFweDtwYWRkaW5nOjAgMjRweCA5cHh9Lm1kYy1kaWFsb2dfX3RpdGxlOjpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MDtoZWlnaHQ6NDBweDtjb250ZW50OiIiO3ZlcnRpY2FsLWFsaWduOjB9W2Rpcj1ydGxdIC5tZGMtZGlhbG9nX190aXRsZSwubWRjLWRpYWxvZ19fdGl0bGVbZGlyPXJ0bF17dGV4dC1hbGlnbjpyaWdodH0ubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGV7bWFyZ2luLWJvdHRvbToxcHg7cGFkZGluZy1ib3R0b206MTVweH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19faGVhZGVye2FsaWduLWl0ZW1zOmJhc2VsaW5lO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjAgMjRweCA5cHg7ei1pbmRleDoxfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19oZWFkZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19faGVhZGVyIC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDotMTJweH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fdGl0bGV7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmc6MDtib3JkZXItYm90dG9tOjB9Lm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4ubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGV7Ym9yZGVyLWJvdHRvbTowO21hcmdpbi1ib3R0b206MH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fY2xvc2V7dG9wOjVweH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbi5tZGMtZGlhbG9nLS1zY3JvbGxhYmxlIC5tZGMtZGlhbG9nX19hY3Rpb25ze2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4ubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fYWN0aW9uc3tib3JkZXItdG9wLWNvbG9yOkNhbnZhc1RleHR9fS5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuLS10aXRsZWxlc3MgLm1kYy1kaWFsb2dfX2Nsb3Nle21hcmdpbi10b3A6NHB4fS5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuLS10aXRsZWxlc3MubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fY2xvc2V7bWFyZ2luLXRvcDowfS5tZGMtZGlhbG9nX19jb250ZW50e2ZsZXgtZ3JvdzoxO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtvdmVyZmxvdzphdXRvfS5tZGMtZGlhbG9nX19jb250ZW50PjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1kYy1kaWFsb2dfX2NvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tZGMtZGlhbG9nX190aXRsZSsubWRjLWRpYWxvZ19fY29udGVudCwubWRjLWRpYWxvZ19faGVhZGVyKy5tZGMtZGlhbG9nX19jb250ZW50e3BhZGRpbmctdG9wOjB9Lm1kYy1kaWFsb2ctLXNjcm9sbGFibGUgLm1kYy1kaWFsb2dfX3RpdGxlKy5tZGMtZGlhbG9nX19jb250ZW50e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1kYy1kaWFsb2dfX2NvbnRlbnQgLm1kYy1kZXByZWNhdGVkLWxpc3Q6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZHtwYWRkaW5nOjZweCAwIDB9Lm1kYy1kaWFsb2ctLXNjcm9sbGFibGUgLm1kYy1kaWFsb2dfX2NvbnRlbnQgLm1kYy1kZXByZWNhdGVkLWxpc3Q6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZHtwYWRkaW5nOjB9Lm1kYy1kaWFsb2dfX2FjdGlvbnN7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjA7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLWhlaWdodDo1MnB4O21hcmdpbjowO3BhZGRpbmc6OHB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1kaWFsb2dfX2FjdGlvbnN7Ym9yZGVyLXRvcC1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWRpYWxvZy0tc3RhY2tlZCAubWRjLWRpYWxvZ19fYWN0aW9uc3tmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1lbmR9Lm1kYy1kaWFsb2dfX2J1dHRvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjA7bWF4LXdpZHRoOjEwMCU7dGV4dC1hbGlnbjpyaWdodH1bZGlyPXJ0bF0gLm1kYy1kaWFsb2dfX2J1dHRvbiwubWRjLWRpYWxvZ19fYnV0dG9uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0ubWRjLWRpYWxvZ19fYnV0dG9uOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtZGlhbG9nX19idXR0b246Zmlyc3QtY2hpbGQsLm1kYy1kaWFsb2dfX2J1dHRvbjpmaXJzdC1jaGlsZFtkaXI9cnRsXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWRjLWRpYWxvZ19fYnV0dG9uLC5tZGMtZGlhbG9nX19idXR0b25bZGlyPXJ0bF17dGV4dC1hbGlnbjpsZWZ0fS5tZGMtZGlhbG9nLS1zdGFja2VkIC5tZGMtZGlhbG9nX19idXR0b246bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLXRvcDoxMnB4fS5tZGMtZGlhbG9nLS1vcGVuLC5tZGMtZGlhbG9nLS1vcGVuaW5nLC5tZGMtZGlhbG9nLS1jbG9zaW5ne2Rpc3BsYXk6ZmxleH0ubWRjLWRpYWxvZy0tb3BlbmluZyAubWRjLWRpYWxvZ19fc2NyaW17dHJhbnNpdGlvbjpvcGFjaXR5IDE1MG1zIGxpbmVhcn0ubWRjLWRpYWxvZy0tb3BlbmluZyAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zaXRpb246b3BhY2l0eSA3NW1zIGxpbmVhcix0cmFuc2Zvcm0gMTUwbXMgMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfS5tZGMtZGlhbG9nLS1jbG9zaW5nIC5tZGMtZGlhbG9nX19zY3JpbSwubWRjLWRpYWxvZy0tY2xvc2luZyAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zaXRpb246b3BhY2l0eSA3NW1zIGxpbmVhcn0ubWRjLWRpYWxvZy0tY2xvc2luZyAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zZm9ybTpub25lfS5tZGMtZGlhbG9nLS1vcGVuIC5tZGMtZGlhbG9nX19zY3JpbXtvcGFjaXR5OjF9Lm1kYy1kaWFsb2ctLW9wZW4gLm1kYy1kaWFsb2dfX2NvbnRhaW5lcnt0cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjF9Lm1kYy1kaWFsb2ctLW9wZW4ubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbS0tc2hvd24gLm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW17b3BhY2l0eToxfS5tZGMtZGlhbG9nLS1vcGVuLm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW0tLWhpZGluZyAubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbXt0cmFuc2l0aW9uOm9wYWNpdHkgNzVtcyBsaW5lYXJ9Lm1kYy1kaWFsb2ctLW9wZW4ubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbS0tc2hvd2luZyAubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbXt0cmFuc2l0aW9uOm9wYWNpdHkgMTUwbXMgbGluZWFyfS5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmlte2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjF9Lm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW0tLXNob3duIC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLS1zaG93aW5nIC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLS1oaWRpbmcgLm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW17ZGlzcGxheTpibG9ja30ubWRjLWRpYWxvZy1zY3JvbGwtbG9ja3tvdmVyZmxvdzpoaWRkZW59Lm1kYy1kaWFsb2ctLW5vLWNvbnRlbnQtcGFkZGluZyAubWRjLWRpYWxvZ19fY29udGVudHtwYWRkaW5nOjB9Lm1kYy1kaWFsb2ctLXNoZWV0IC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDoxMnB4O3RvcDo5cHg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxfS5tZGMtZGlhbG9nX19zY3JpbS0tcmVtb3ZlZHtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtZGlhbG9nX19zY3JpbS0tcmVtb3ZlZCAubWRjLWRpYWxvZ19fc2NyaW0sLm1kYy1kaWFsb2dfX3NjcmltLS1yZW1vdmVkIC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmlte2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1kaWFsb2ctY29udGVudHttYXgtaGVpZ2h0OjY1dmh9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcntwb3NpdGlvbjpzdGF0aWM7ZGlzcGxheTpibG9ja30ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyLC5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIgLm1kYy1kaWFsb2dfX2NvbnRhaW5lciwubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19zdXJmYWNle21heC1oZWlnaHQ6aW5oZXJpdDttaW4taGVpZ2h0OmluaGVyaXQ7bWluLXdpZHRoOmluaGVyaXQ7bWF4LXdpZHRoOmluaGVyaXR9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fc3VyZmFjZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcntvdXRsaW5lOjB9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fc3VyZmFjZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1kaWFsb2ctY29udGFpbmVyLWNvbG9yLCB3aGl0ZSl9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fc3VyZmFjZXtib3gtc2hhZG93OnZhcigtLW1kYy1kaWFsb2ctY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19zdXJmYWNle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLWRpYWxvZy1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1tZWRpdW0sIDRweCkpfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGUsLm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lci5tZGMtZGlhbG9nLS1zY3JvbGxhYmxlIC5tZGMtZGlhbG9nX19hY3Rpb25zLC5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZS5tZGMtZGlhbG9nLXNjcm9sbC1kaXZpZGVyLWZvb3RlciAubWRjLWRpYWxvZ19fYWN0aW9uc3tib3JkZXItY29sb3I6dmFyKC0tbWRjLWRpYWxvZy13aXRoLWRpdmlkZXItZGl2aWRlci1jb2xvciwgYmxhY2spfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtZGlhbG9nLXdpdGgtZGl2aWRlci1kaXZpZGVyLWNvbG9yLCBibGFjayl9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fdGl0bGV7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLWRpYWxvZy1zdWJoZWFkLWZvbnQsICJBcmlhbCIpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy1kaWFsb2ctc3ViaGVhZC1saW5lLWhlaWdodCwgMTRweCk7Zm9udC1zaXplOnZhcigtLW1kYy1kaWFsb2ctc3ViaGVhZC1zaXplLCAxNHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtZGlhbG9nLXN1YmhlYWQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy1kaWFsb2ctc3ViaGVhZC10cmFja2luZywgMXB4KX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX190aXRsZXtjb2xvcjp2YXIoLS1tZGMtZGlhbG9nLXN1YmhlYWQtY29sb3IsIGJsYWNrKX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19jb250ZW50e2ZvbnQtZmFtaWx5OnZhcigtLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWZvbnQsICJBcmlhbCIpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0LCAxNHB4KTtmb250LXNpemU6dmFyKC0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtc2l6ZSwgMTRweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LXRyYWNraW5nLCAxcHgpfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIgLm1kYy1kaWFsb2dfX2NvbnRlbnR7Y29sb3I6dmFyKC0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtY29sb3IsIGJsYWNrKX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS1tYXQtZGlhbG9nLXRyYW5zaXRpb24tZHVyYXRpb24sIDBtcyl9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zaXRpb246bm9uZX0ubWF0LW1kYy1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtbWRjLWRpYWxvZy1hY3Rpb25ze2p1c3RpZnktY29udGVudDpzdGFydH0ubWF0LW1kYy1kaWFsb2ctYWN0aW9ucy5tYXQtbWRjLWRpYWxvZy1hY3Rpb25zLWFsaWduLWNlbnRlciwubWF0LW1kYy1kaWFsb2ctYWN0aW9uc1thbGlnbj1jZW50ZXJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMubWF0LW1kYy1kaWFsb2ctYWN0aW9ucy1hbGlnbi1lbmQsLm1hdC1tZGMtZGlhbG9nLWFjdGlvbnNbYWxpZ249ZW5kXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtbWRjLWRpYWxvZy1hY3Rpb25zIC5tYXQtbWRjLWJ1dHRvbi1iYXNlKy5tYXQtbWRjLWJ1dHRvbi1iYXNle21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLFtkaXI9cnRsXSAubWF0LW1kYy1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9J10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksRWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3JlZj10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlPWksdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IEllLHRoaXMuX2JlZm9yZUNsb3NlZD1uZXcgSWUsdGhpcy5fc3RhdGU9MCx0aGlzLmRpc2FibGVDbG9zZT1lLmRpc2FibGVDbG9zZSx0aGlzLmlkPXQuaWQsaS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoa2Uocj0+Im9wZW5lZCI9PT1yLnN0YXRlKSxZdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCl9KSxpLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShrZShyPT4iY2xvc2VkIj09PXIuc3RhdGUpLFl0KDEpKS5zdWJzY3JpYmUoKCk9PntjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0Lm92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0bih0aGlzLmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHMoKS5waXBlKGtlKHI9PjI3PT09ci5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiF2cihyKSkpKS5zdWJzY3JpYmUocj0+e3RoaXMuZGlzYWJsZUNsb3NlfHwoci5wcmV2ZW50RGVmYXVsdCgpLGQ5KHRoaXMsImtleWRvd24iPT09ci50eXBlPyJrZXlib2FyZCI6Im1vdXNlIikpfSl9Y2xvc2UodCl7dGhpcy5fcmVzdWx0PXQsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKGtlKGU9PiJjbG9zaW5nIj09PWUuc3RhdGUpLFl0KDEpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2JlZm9yZUNsb3NlZC5uZXh0KHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX3JlZi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKSxlLnRvdGFsVGltZSsxMDApfSksdGhpcy5fc3RhdGU9MSx0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fc3RhcnRFeGl0QW5pbWF0aW9uKCl9YWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fYWZ0ZXJPcGVuZWR9YWZ0ZXJDbG9zZWQoKXtyZXR1cm4gdGhpcy5fcmVmLmNsb3NlZH1iZWZvcmVDbG9zZWQoKXtyZXR1cm4gdGhpcy5fYmVmb3JlQ2xvc2VkfWJhY2tkcm9wQ2xpY2soKXtyZXR1cm4gdGhpcy5fcmVmLmJhY2tkcm9wQ2xpY2t9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9yZWYua2V5ZG93bkV2ZW50c311cGRhdGVQb3NpdGlvbih0KXtsZXQgZT10aGlzLl9yZWYuY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3k7cmV0dXJuIHQmJih0LmxlZnR8fHQucmlnaHQpP3QubGVmdD9lLmxlZnQodC5sZWZ0KTplLnJpZ2h0KHQucmlnaHQpOmUuY2VudGVySG9yaXpvbnRhbGx5KCksdCYmKHQudG9wfHx0LmJvdHRvbSk/dC50b3A/ZS50b3AodC50b3ApOmUuYm90dG9tKHQuYm90dG9tKTplLmNlbnRlclZlcnRpY2FsbHkoKSx0aGlzLl9yZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzfXVwZGF0ZVNpemUodD0iIixlPSIiKXtyZXR1cm4gdGhpcy5fcmVmLnVwZGF0ZVNpemUodCxlKSx0aGlzfWFkZFBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX3JlZi5hZGRQYW5lbENsYXNzKHQpLHRoaXN9cmVtb3ZlUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fcmVmLnJlbW92ZVBhbmVsQ2xhc3ModCksdGhpc31nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZX1fZmluaXNoRGlhbG9nQ2xvc2UoKXt0aGlzLl9zdGF0ZT0yLHRoaXMuX3JlZi5jbG9zZSh0aGlzLl9yZXN1bHQse2ZvY3VzT3JpZ2luOnRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlfSksdGhpcy5jb21wb25lbnRJbnN0YW5jZT1udWxsfX07ZnVuY3Rpb24gZDkobix0LGUpe3JldHVybiBuLl9jbG9zZUludGVyYWN0aW9uVHlwZT10LG4uY2xvc2UoZSl9dmFyIFh2PW5ldyBpZSgiTWF0TWRjRGlhbG9nRGF0YSIpLFBiZT1uZXcgaWUoIm1hdC1tZGMtZGlhbG9nLWRlZmF1bHQtb3B0aW9ucyIpLHU5PW5ldyBpZSgibWF0LW1kYy1kaWFsb2ctc2Nyb2xsLXN0cmF0ZWd5Iiksa2JlPXtwcm92aWRlOnU5LGRlcHM6W3ppXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKX19LEZiZT0wLE5iZT0oKCk9PntjbGFzcyBue2dldCBvcGVuRGlhbG9ncygpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLm9wZW5EaWFsb2dzOnRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWx9Z2V0IGFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cuYWZ0ZXJPcGVuZWQ6dGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbH1fZ2V0QWZ0ZXJBbGxDbG9zZWQoKXtsZXQgZT10aGlzLl9wYXJlbnREaWFsb2c7cmV0dXJuIGU/ZS5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyxkLHUpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1yLHRoaXMuX3BhcmVudERpYWxvZz1vLHRoaXMuX2RpYWxvZ1JlZkNvbnN0cnVjdG9yPWwsdGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZT1jLHRoaXMuX2RpYWxvZ0RhdGFUb2tlbj1kLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgSWUsdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbD1uZXcgSWUsdGhpcy5faWRQcmVmaXg9Im1hdC1kaWFsb2ctIix0aGlzLmRpYWxvZ0NvbmZpZ0NsYXNzPW1nLHRoaXMuYWZ0ZXJBbGxDbG9zZWQ9dGEoKCk9PnRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoP3RoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5waXBlKHFuKHZvaWQgMCkpKSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hLHRoaXMuX2RpYWxvZz1pLmdldChOMil9b3BlbihlLGkpe2xldCByOyhpPXsuLi50aGlzLl9kZWZhdWx0T3B0aW9uc3x8bmV3IG1nLC4uLml9KS5pZD1pLmlkfHxgJHt0aGlzLl9pZFByZWZpeH0ke0ZiZSsrfWAsaS5zY3JvbGxTdHJhdGVneT1pLnNjcm9sbFN0cmF0ZWd5fHx0aGlzLl9zY3JvbGxTdHJhdGVneSgpO2xldCBvPXRoaXMuX2RpYWxvZy5vcGVuKGUsey4uLmkscG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLGRpc2FibGVDbG9zZTohMCxjbG9zZU9uRGVzdHJveTohMSxjbG9zZU9uT3ZlcmxheURldGFjaG1lbnRzOiExLGNvbnRhaW5lcjp7dHlwZTp0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLHByb3ZpZGVyczooKT0+W3twcm92aWRlOnRoaXMuZGlhbG9nQ29uZmlnQ2xhc3MsdXNlVmFsdWU6aX0se3Byb3ZpZGU6TWYsdXNlVmFsdWU6aX1dfSx0ZW1wbGF0ZUNvbnRleHQ6KCk9Pih7ZGlhbG9nUmVmOnJ9KSxwcm92aWRlcnM6KHMsYSxsKT0+KHI9bmV3IHRoaXMuX2RpYWxvZ1JlZkNvbnN0cnVjdG9yKHMsaSxsKSxyLnVwZGF0ZVBvc2l0aW9uKGk/LnBvc2l0aW9uKSxbe3Byb3ZpZGU6dGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZSx1c2VWYWx1ZTpsfSx7cHJvdmlkZTp0aGlzLl9kaWFsb2dEYXRhVG9rZW4sdXNlVmFsdWU6YS5kYXRhfSx7cHJvdmlkZTp0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3Rvcix1c2VWYWx1ZTpyfV0pfSk7cmV0dXJuIHIuY29tcG9uZW50SW5zdGFuY2U9by5jb21wb25lbnRJbnN0YW5jZSx0aGlzLm9wZW5EaWFsb2dzLnB1c2gociksdGhpcy5hZnRlck9wZW5lZC5uZXh0KHIpLHIuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCk9PntsZXQgcz10aGlzLm9wZW5EaWFsb2dzLmluZGV4T2Yocik7cz4tMSYmKHRoaXMub3BlbkRpYWxvZ3Muc3BsaWNlKHMsMSksdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGh8fHRoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCkubmV4dCgpKX0pLHJ9Y2xvc2VBbGwoKXt0aGlzLl9jbG9zZURpYWxvZ3ModGhpcy5vcGVuRGlhbG9ncyl9Z2V0RGlhbG9nQnlJZChlKXtyZXR1cm4gdGhpcy5vcGVuRGlhbG9ncy5maW5kKGk9PmkuaWQ9PT1lKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Nsb3NlRGlhbG9ncyh0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsKSx0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpfV9jbG9zZURpYWxvZ3MoZSl7bGV0IGk9ZS5sZW5ndGg7Zm9yKDtpLS07KWVbaV0uY2xvc2UoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe0lzKCl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksemw9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE5iZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKGUsaSxvLGEsbCxzLEVkLFJiZSxYdixjKSx0aGlzLl9pZFByZWZpeD0ibWF0LW1kYy1kaWFsb2ctIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh6aSksayhNaSksayh3Yiw4KSxrKFBiZSw4KSxrKHU5KSxrKG4sMTIpLGsocGcpLGsoaGksOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLExiZT0wLFoxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RpYWxvZz1yLHRoaXMudHlwZT0iYnV0dG9uIn1uZ09uSW5pdCgpe3RoaXMuZGlhbG9nUmVmfHwodGhpcy5kaWFsb2dSZWY9ZjkodGhpcy5fZWxlbWVudFJlZix0aGlzLl9kaWFsb2cub3BlbkRpYWxvZ3MpKX1uZ09uQ2hhbmdlcyhlKXtsZXQgaT1lLl9tYXREaWFsb2dDbG9zZXx8ZS5fbWF0RGlhbG9nQ2xvc2VSZXN1bHQ7aSYmKHRoaXMuZGlhbG9nUmVzdWx0PWkuY3VycmVudFZhbHVlKX1fb25CdXR0b25DbGljayhlKXtkOSh0aGlzLmRpYWxvZ1JlZiwwPT09ZS5zY3JlZW5YJiYwPT09ZS5zY3JlZW5ZPyJrZXlib2FyZCI6Im1vdXNlIix0aGlzLmRpYWxvZ1Jlc3VsdCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoRWQsOCksQyhNZSksQyh6bCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWyIiLCJtYXREaWFsb2dDbG9zZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkJ1dHRvbkNsaWNrKG8pfSksMiZlJiZCZSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWx8fG51bGwpKCJ0eXBlIixpLnR5cGUpfSxpbnB1dHM6e2FyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSx0eXBlOiJ0eXBlIixkaWFsb2dSZXN1bHQ6WyJtYXQtZGlhbG9nLWNsb3NlIiwiZGlhbG9nUmVzdWx0Il0sX21hdERpYWxvZ0Nsb3NlOlsibWF0RGlhbG9nQ2xvc2UiLCJfbWF0RGlhbG9nQ2xvc2UiXX0sZXhwb3J0QXM6WyJtYXREaWFsb2dDbG9zZSJdLGZlYXR1cmVzOltHdF19KSxufSkoKSxwOT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9kaWFsb2dSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fZGlhbG9nPXIsdGhpcy5pZD0ibWF0LW1kYy1kaWFsb2ctdGl0bGUtIitMYmUrK31uZ09uSW5pdCgpe3RoaXMuX2RpYWxvZ1JlZnx8KHRoaXMuX2RpYWxvZ1JlZj1mOSh0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7ZSYmIWUuX2FyaWFMYWJlbGxlZEJ5JiYoZS5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhFZCw4KSxDKE1lKSxDKHpsKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIiIsIm1hdERpYWxvZ1RpdGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1kaWFsb2ctdGl0bGUiLCJtZGMtZGlhbG9nX190aXRsZSJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZqbygiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLG59KSgpLEsxPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNvbnRlbnQiLCIiXSxbIm1hdC1kaWFsb2ctY29udGVudCJdLFsiIiwibWF0RGlhbG9nQ29udGVudCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtZGlhbG9nLWNvbnRlbnQiLCJtZGMtZGlhbG9nX19jb250ZW50Il19KSxufSkoKSxKMT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hbGlnbj0ic3RhcnQifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LWRpYWxvZy1hY3Rpb25zIiwiIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiXSxbIiIsIm1hdERpYWxvZ0FjdGlvbnMiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLWRpYWxvZy1hY3Rpb25zIiwibWRjLWRpYWxvZ19fYWN0aW9ucyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgibWF0LW1kYy1kaWFsb2ctYWN0aW9ucy1hbGlnbi1jZW50ZXIiLCJjZW50ZXIiPT09aS5hbGlnbikoIm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMtYWxpZ24tZW5kIiwiZW5kIj09PWkuYWxpZ24pfSxpbnB1dHM6e2FsaWduOiJhbGlnbiJ9fSksbn0pKCk7ZnVuY3Rpb24gZjkobix0KXtsZXQgZT1uLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2UmJiFlLmNsYXNzTGlzdC5jb250YWlucygibWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIik7KWU9ZS5wYXJlbnRFbGVtZW50O3JldHVybiBlP3QuZmluZChpPT5pLmlkPT09ZS5pZCk6bnVsbH12YXIgaGc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbemwsa2JlXSxpbXBvcnRzOltyOSxDbyxIbCxmbixmbl19KSxufSkoKSxjOT17cGFyYW1zOntlbnRlckFuaW1hdGlvbkR1cmF0aW9uOiIxNTBtcyIsZXhpdEFuaW1hdGlvbkR1cmF0aW9uOiI3NW1zIn19LEJiZT0oX3IoImRpYWxvZ0NvbnRhaW5lciIsW3dpKCJ2b2lkLCBleGl0Iixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMC43KSJ9KSksd2koImVudGVyIixybih7dHJhbnNmb3JtOiJub25lIn0pKSxnaSgiKiA9PiBlbnRlciIsT2IoW0NpKCJ7e2VudGVyQW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIscm4oe3RyYW5zZm9ybToibm9uZSIsb3BhY2l0eToxfSkpLEpwKCJAKiIsS3AoKSx7b3B0aW9uYWw6ITB9KV0pLGM5KSxnaSgiKiA9PiB2b2lkLCAqID0+IGV4aXQiLE9iKFtDaSgie3tleGl0QW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkiLHJuKHtvcGFjaXR5OjB9KSksSnAoIkAqIixLcCgpLHtvcHRpb25hbDohMH0pXSksYzkpXSksWyJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZSIsIiJdKSxWYmU9WyIqIl0sSGJlPVsidGV4dEZpZWxkIl0semJlPVsiaWNvblByZWZpeENvbnRhaW5lciJdLFViZT1bInRleHRQcmVmaXhDb250YWluZXIiXTtmdW5jdGlvbiBqYmUobix0KXsxJm4mJlAoMCwic3BhbiIsMTkpfWZ1bmN0aW9uIEdiZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImxhYmVsIiwxNyksSSgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KDIpLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKSl9KSx6dCgxLDEpLFMoMixqYmUsMSwwLCJzcGFuIiwxOCksZygpfWlmKDImbil7bGV0IGU9dygyKTtfKCJmbG9hdGluZyIsZS5fc2hvdWxkTGFiZWxGbG9hdCgpKSgiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsIWUuX2hhc091dGxpbmUoKSkoImlkIixlLl9sYWJlbElkKSxCZSgiZm9yIixlLl9jb250cm9sLmlkKSgiYXJpYS1vd25zIixlLl9jb250cm9sLmlkKSx2KDIpLF8oIm5nSWYiLCFlLmhpZGVSZXF1aXJlZE1hcmtlciYmZS5fY29udHJvbC5yZXF1aXJlZCl9fWZ1bmN0aW9uIFdiZShuLHQpezEmbiYmUygwLEdiZSwzLDYsImxhYmVsIiwxNiksMiZuJiZfKCJuZ0lmIix3KCkuX2hhc0Zsb2F0aW5nTGFiZWwoKSl9ZnVuY3Rpb24gcWJlKG4sdCl7MSZuJiZQKDAsImRpdiIsMjApfWZ1bmN0aW9uIFliZShuLHQpe31mdW5jdGlvbiBYYmUobix0KXsxJm4mJlMoMCxZYmUsMCwwLCJuZy10ZW1wbGF0ZSIsMjIpLDImbiYmKHcoMiksXygibmdUZW1wbGF0ZU91dGxldCIsaXQoMSkpKX1mdW5jdGlvbiBRYmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMjEpLFMoMSxYYmUsMSwxLCJuZy10ZW1wbGF0ZSIsOSksZygpKSwyJm4pe2xldCBlPXcoKTtfKCJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZU9wZW4iLGUuX3Nob3VsZExhYmVsRmxvYXQoKSkoIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lTGFiZWxXaWR0aCIsZS5fbGFiZWxXaWR0aCksdigxKSxfKCJuZ0lmIiwhZS5fZm9yY2VEaXNwbGF5SW5maXhMYWJlbCgpKX19ZnVuY3Rpb24gWmJlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDIzLDI0KSx6dCgyLDIpLGcoKSl9ZnVuY3Rpb24gS2JlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI1LDI2KSx6dCgyLDMpLGcoKSl9ZnVuY3Rpb24gSmJlKG4sdCl7fWZ1bmN0aW9uICRiZShuLHQpezEmbiYmUygwLEpiZSwwLDAsIm5nLXRlbXBsYXRlIiwyMiksMiZuJiYodygpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGl0KDEpKSl9ZnVuY3Rpb24gZXZlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI3KSx6dCgxLDQpLGcoKSl9ZnVuY3Rpb24gdHZlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI4KSx6dCgxLDUpLGcoKSl9ZnVuY3Rpb24gbnZlKG4sdCl7MSZuJiZQKDAsImRpdiIsMjkpfWZ1bmN0aW9uIGl2ZShuLHQpezEmbiYmKGgoMCwiZGl2IiwzMCksenQoMSw2KSxnKCkpLDImbiYmXygiQHRyYW5zaXRpb25NZXNzYWdlcyIsdygpLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSl9ZnVuY3Rpb24gcnZlKG4sdCl7aWYoMSZuJiYoaCgwLCJtYXQtaGludCIsMzQpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMik7XygiaWQiLGUuX2hpbnRMYWJlbElkKSx2KDEpLGJ0KGUuaGludExhYmVsKX19ZnVuY3Rpb24gb3ZlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDMxKSxTKDEscnZlLDIsMiwibWF0LWhpbnQiLDMyKSx6dCgyLDcpLFAoMywiZGl2IiwzMyksenQoNCw4KSxnKCkpLDImbil7bGV0IGU9dygpO18oIkB0cmFuc2l0aW9uTWVzc2FnZXMiLGUuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKSx2KDEpLF8oIm5nSWYiLGUuaGludExhYmVsKX19dmFyIHN2ZT1bIioiLFtbIm1hdC1sYWJlbCJdXSxbWyIiLCJtYXRQcmVmaXgiLCIiXSxbIiIsIm1hdEljb25QcmVmaXgiLCIiXV0sW1siIiwibWF0VGV4dFByZWZpeCIsIiJdXSxbWyIiLCJtYXRUZXh0U3VmZml4IiwiIl1dLFtbIiIsIm1hdFN1ZmZpeCIsIiJdLFsiIiwibWF0SWNvblN1ZmZpeCIsIiJdXSxbWyJtYXQtZXJyb3IiXSxbIiIsIm1hdEVycm9yIiwiIl1dLFtbIm1hdC1oaW50IiwzLCJhbGlnbiIsImVuZCJdXSxbWyJtYXQtaGludCIsImFsaWduIiwiZW5kIl1dXSxhdmU9WyIqIiwibWF0LWxhYmVsIiwiW21hdFByZWZpeF0sIFttYXRJY29uUHJlZml4XSIsIlttYXRUZXh0UHJlZml4XSIsIlttYXRUZXh0U3VmZml4XSIsIlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0iLCJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLCJtYXQtaGludDpub3QoW2FsaWduPSdlbmQnXSkiLCJtYXQtaGludFthbGlnbj0nZW5kJ10iXSxrYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWxhYmVsIl1dfSksbn0pKCksbHZlPTAsQzk9bmV3IGllKCJNYXRFcnJvciIpLE05PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmlkPSJtYXQtbWRjLWVycm9yLSIrbHZlKyssZXx8aS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHlvKCJhcmlhLWxpdmUiKSxDKE1lKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1lcnJvciJdLFsiIiwibWF0RXJyb3IiLCIiXV0saG9zdEF0dHJzOlsiYXJpYS1hdG9taWMiLCJ0cnVlIiwxLCJtYXQtbWRjLWZvcm0tZmllbGQtZXJyb3IiLCJtYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmpvKCJpZCIsaS5pZCl9LGlucHV0czp7aWQ6ImlkIn0sZmVhdHVyZXM6W1F0KFt7cHJvdmlkZTpDOSx1c2VFeGlzdGluZzpufV0pXX0pLG59KSgpLGN2ZT0wLG05PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsaWduPSJzdGFydCIsdGhpcy5pZD0ibWF0LW1kYy1oaW50LSIrY3ZlKyt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtaGludCJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50IiwibWF0LW1kYy1mb3JtLWZpZWxkLWJvdHRvbS1hbGlnbiJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoam8oImlkIixpLmlkKSxCZSgiYWxpZ24iLG51bGwpLG50KCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1lbmQiLCJlbmQiPT09aS5hbGlnbikpfSxpbnB1dHM6e2FsaWduOiJhbGlnbiIsaWQ6ImlkIn19KSxufSkoKSx3OT1uZXcgaWUoIk1hdFByZWZpeCIpLFM5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9pc1RleHQ9ITF9c2V0IF9pc1RleHRTZWxlY3RvcihlKXt0aGlzLl9pc1RleHQ9ITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRQcmVmaXgiLCIiXSxbIiIsIm1hdEljb25QcmVmaXgiLCIiXSxbIiIsIm1hdFRleHRQcmVmaXgiLCIiXV0saW5wdXRzOntfaXNUZXh0U2VsZWN0b3I6WyJtYXRUZXh0UHJlZml4IiwiX2lzVGV4dFNlbGVjdG9yIl19LGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6dzksdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxkdmU9bmV3IGllKCJNYXRTdWZmaXgiKSxoOT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLmZsb2F0aW5nPSExfWdldFdpZHRoKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKG51bGwhPT1uLm9mZnNldFBhcmVudClyZXR1cm4gbi5zY3JvbGxXaWR0aDtsZXQgZT1uLmNsb25lTm9kZSghMCk7ZS5zdHlsZS5zZXRQcm9wZXJ0eSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLGUuc3R5bGUuc2V0UHJvcGVydHkoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtOTk5OXB4LCAtOTk5OXB4KSIpLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChlKTtsZXQgaT1lLnNjcm9sbFdpZHRoO3JldHVybiBlLnJlbW92ZSgpLGl9KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCl9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbImxhYmVsIiwibWF0Rm9ybUZpZWxkRmxvYXRpbmdMYWJlbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1kYy1mbG9hdGluZy1sYWJlbCIsIm1hdC1tZGMtZmxvYXRpbmctbGFiZWwiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmUiLGkuZmxvYXRpbmcpfSxpbnB1dHM6e2Zsb2F0aW5nOiJmbG9hdGluZyJ9fSksbn0pKCksZzk9Im1kYy1saW5lLXJpcHBsZS0tYWN0aXZlIiwkMT0ibWRjLWxpbmUtcmlwcGxlLS1kZWFjdGl2YXRpbmciLF85PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5faGFuZGxlVHJhbnNpdGlvbkVuZD1yPT57bGV0IG89dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdCxzPW8uY29udGFpbnMoJDEpOyJvcGFjaXR5Ij09PXIucHJvcGVydHlOYW1lJiZzJiZvLnJlbW92ZShnOSwkMSl9LGkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntlLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5faGFuZGxlVHJhbnNpdGlvbkVuZCl9KX1hY3RpdmF0ZSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7ZS5yZW1vdmUoJDEpLGUuYWRkKGc5KX1kZWFjdGl2YXRlKCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJDEpfW5nT25EZXN0cm95KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRoaXMuX2hhbmRsZVRyYW5zaXRpb25FbmQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKGF0KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbImRpdiIsIm1hdEZvcm1GaWVsZExpbmVSaXBwbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtZGMtbGluZS1yaXBwbGUiXX0pLG59KSgpLGI5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fbmdab25lPWksdGhpcy5sYWJlbFdpZHRoPTAsdGhpcy5vcGVuPSExfW5nQWZ0ZXJWaWV3SW5pdCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIubWRjLWZsb2F0aW5nLWxhYmVsIik7ZT8odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIiksImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSYmKGUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPSIwcyIsdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5lLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj0iIil9KSkpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtZGMtbm90Y2hlZC1vdXRsaW5lLS1uby1sYWJlbCIpfV9nZXROb3RjaFdpZHRoKCl7cmV0dXJuIHRoaXMub3Blbj90aGlzLmxhYmVsV2lkdGg+MD9gY2FsYygke3RoaXMubGFiZWxXaWR0aH1weCAqIHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkgKyA5cHgpYDoiMHB4IjpudWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKGF0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZGl2IiwibWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmUiLCIiXV0saG9zdEF0dHJzOlsxLCJtZGMtbm90Y2hlZC1vdXRsaW5lIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJm50KCJtZGMtbm90Y2hlZC1vdXRsaW5lLS1ub3RjaGVkIixpLm9wZW4pfSxpbnB1dHM6e2xhYmVsV2lkdGg6WyJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZUxhYmVsV2lkdGgiLCJsYWJlbFdpZHRoIl0sb3BlbjpbIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lT3BlbiIsIm9wZW4iXX0sYXR0cnM6QmJlLG5nQ29udGVudFNlbGVjdG9yczpWYmUsZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwibWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyJdLFsxLCJtZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCJdLFsxLCJtZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksUCgwLCJkaXYiLDApLGgoMSwiZGl2IiwxKSx6dCgyKSxnKCksUCgzLCJkaXYiLDIpKSwyJmUmJih2KDEpLFR0KCJ3aWR0aCIsaS5fZ2V0Tm90Y2hXaWR0aCgpKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHB2ZT17dHJhbnNpdGlvbk1lc3NhZ2VzOl9yKCJ0cmFuc2l0aW9uTWVzc2FnZXMiLFt3aSgiZW50ZXIiLHJuKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDAlKSJ9KSksZ2koInZvaWQgPT4gZW50ZXIiLFtybih7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlWSgtNXB4KSJ9KSxDaSgiMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikiKV0pXSl9LFF2PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpufSksbn0pKCksU2Y9bmV3IGllKCJNYXRGb3JtRmllbGQiKSxmdmU9bmV3IGllKCJNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMiKSx2OT0wLEthPSgoKT0+e2NsYXNzIG57Z2V0IGhpZGVSZXF1aXJlZE1hcmtlcigpe3JldHVybiB0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXJ9c2V0IGhpZGVSZXF1aXJlZE1hcmtlcihlKXt0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXI9UnQoZSl9Z2V0IGZsb2F0TGFiZWwoKXtyZXR1cm4gdGhpcy5fZmxvYXRMYWJlbHx8dGhpcy5fZGVmYXVsdHM/LmZsb2F0TGFiZWx8fCJhdXRvIn1zZXQgZmxvYXRMYWJlbChlKXtlIT09dGhpcy5fZmxvYXRMYWJlbCYmKHRoaXMuX2Zsb2F0TGFiZWw9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGFwcGVhcmFuY2UoKXtyZXR1cm4gdGhpcy5fYXBwZWFyYW5jZX1zZXQgYXBwZWFyYW5jZShlKXtsZXQgaT10aGlzLl9hcHBlYXJhbmNlO3RoaXMuX2FwcGVhcmFuY2U9ZXx8dGhpcy5fZGVmYXVsdHM/LmFwcGVhcmFuY2V8fCJmaWxsIiwib3V0bGluZSI9PT10aGlzLl9hcHBlYXJhbmNlJiZ0aGlzLl9hcHBlYXJhbmNlIT09aSYmKHRoaXMuX3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCgpLHRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGU9ITApfWdldCBzdWJzY3JpcHRTaXppbmcoKXtyZXR1cm4gdGhpcy5fc3Vic2NyaXB0U2l6aW5nfHx0aGlzLl9kZWZhdWx0cz8uc3Vic2NyaXB0U2l6aW5nfHwiZml4ZWQifXNldCBzdWJzY3JpcHRTaXppbmcoZSl7dGhpcy5fc3Vic2NyaXB0U2l6aW5nPWV8fHRoaXMuX2RlZmF1bHRzPy5zdWJzY3JpcHRTaXppbmd8fCJmaXhlZCJ9Z2V0IGhpbnRMYWJlbCgpe3JldHVybiB0aGlzLl9oaW50TGFiZWx9c2V0IGhpbnRMYWJlbChlKXt0aGlzLl9oaW50TGFiZWw9ZSx0aGlzLl9wcm9jZXNzSGludHMoKX1nZXQgX2NvbnRyb2woKXtyZXR1cm4gdGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sfHx0aGlzLl9mb3JtRmllbGRDb250cm9sfXNldCBfY29udHJvbChlKXt0aGlzLl9leHBsaWNpdEZvcm1GaWVsZENvbnRyb2w9ZX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1vLHRoaXMuX3BsYXRmb3JtPXMsdGhpcy5fZGVmYXVsdHM9YSx0aGlzLl9hbmltYXRpb25Nb2RlPWwsdGhpcy5fZG9jdW1lbnQ9Yyx0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXI9ITEsdGhpcy5jb2xvcj0icHJpbWFyeSIsdGhpcy5fYXBwZWFyYW5jZT0iZmlsbCIsdGhpcy5fc3Vic2NyaXB0U2l6aW5nPW51bGwsdGhpcy5faGludExhYmVsPSIiLHRoaXMuX2hhc0ljb25QcmVmaXg9ITEsdGhpcy5faGFzVGV4dFByZWZpeD0hMSx0aGlzLl9oYXNJY29uU3VmZml4PSExLHRoaXMuX2hhc1RleHRTdWZmaXg9ITEsdGhpcy5fbGFiZWxJZD0ibWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLSIrdjkrKyx0aGlzLl9oaW50TGFiZWxJZD0ibWF0LW1kYy1oaW50LSIrdjkrKyx0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iIix0aGlzLl9sYWJlbFdpZHRoPTAsdGhpcy5fZGVzdHJveWVkPW5ldyBJZSx0aGlzLl9pc0ZvY3VzZWQ9bnVsbCx0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlPSExLGEmJihhLmFwcGVhcmFuY2UmJih0aGlzLmFwcGVhcmFuY2U9YS5hcHBlYXJhbmNlKSx0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXI9Qm9vbGVhbihhPy5oaWRlUmVxdWlyZWRNYXJrZXIpLGEuY29sb3ImJih0aGlzLmNvbG9yPWEuY29sb3IpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl91cGRhdGVGb2N1c1N0YXRlKCksdGhpcy5fcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCksdGhpcy5fZG9jdW1lbnQ/LmZvbnRzPy5yZWFkeT90aGlzLl9kb2N1bWVudC5mb250cy5yZWFkeS50aGVuKCgpPT57dGhpcy5fcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KTpzZXRUaW1lb3V0KCgpPT50aGlzLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKSwxMDApLHRoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSJlbnRlciIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2Fzc2VydEZvcm1GaWVsZENvbnRyb2woKSx0aGlzLl9pbml0aWFsaXplQ29udHJvbCgpLHRoaXMuX2luaXRpYWxpemVTdWJzY3JpcHQoKSx0aGlzLl9pbml0aWFsaXplUHJlZml4QW5kU3VmZml4KCksdGhpcy5faW5pdGlhbGl6ZU91dGxpbmVMYWJlbE9mZnNldFN1YnNjcmlwdGlvbnMoKX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLl9hc3NlcnRGb3JtRmllbGRDb250cm9sKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfWdldExhYmVsSWQoKXtyZXR1cm4gdGhpcy5faGFzRmxvYXRpbmdMYWJlbCgpP3RoaXMuX2xhYmVsSWQ6bnVsbH1nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCl7cmV0dXJuIHRoaXMuX3RleHRGaWVsZHx8dGhpcy5fZWxlbWVudFJlZn1fYW5pbWF0ZUFuZExvY2tMYWJlbCgpe3RoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSYmKHRoaXMuZmxvYXRMYWJlbD0iYWx3YXlzIil9X2luaXRpYWxpemVDb250cm9sKCl7bGV0IGU9dGhpcy5fY29udHJvbDtlLmNvbnRyb2xUeXBlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtJHtlLmNvbnRyb2xUeXBlfWApLGUuc3RhdGVDaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuX3VwZGF0ZUZvY3VzU3RhdGUoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGUubmdDb250cm9sJiZlLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMmJmUubmdDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9jaGVja1ByZWZpeEFuZFN1ZmZpeFR5cGVzKCl7dGhpcy5faGFzSWNvblByZWZpeD0hIXRoaXMuX3ByZWZpeENoaWxkcmVuLmZpbmQoZT0+IWUuX2lzVGV4dCksdGhpcy5faGFzVGV4dFByZWZpeD0hIXRoaXMuX3ByZWZpeENoaWxkcmVuLmZpbmQoZT0+ZS5faXNUZXh0KSx0aGlzLl9oYXNJY29uU3VmZml4PSEhdGhpcy5fc3VmZml4Q2hpbGRyZW4uZmluZChlPT4hZS5faXNUZXh0KSx0aGlzLl9oYXNUZXh0U3VmZml4PSEhdGhpcy5fc3VmZml4Q2hpbGRyZW4uZmluZChlPT5lLl9pc1RleHQpfV9pbml0aWFsaXplUHJlZml4QW5kU3VmZml4KCl7dGhpcy5fY2hlY2tQcmVmaXhBbmRTdWZmaXhUeXBlcygpLHRuKHRoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMsdGhpcy5fc3VmZml4Q2hpbGRyZW4uY2hhbmdlcykuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hlY2tQcmVmaXhBbmRTdWZmaXhUeXBlcygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9X2luaXRpYWxpemVTdWJzY3JpcHQoKXt0aGlzLl9oaW50Q2hpbGRyZW4uY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9wcm9jZXNzSGludHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2Vycm9yQ2hpbGRyZW4uY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX3ZhbGlkYXRlSGludHMoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKX1fYXNzZXJ0Rm9ybUZpZWxkQ29udHJvbCgpe31fdXBkYXRlRm9jdXNTdGF0ZSgpe3RoaXMuX2NvbnRyb2wuZm9jdXNlZCYmIXRoaXMuX2lzRm9jdXNlZD8odGhpcy5faXNGb2N1c2VkPSEwLHRoaXMuX2xpbmVSaXBwbGU/LmFjdGl2YXRlKCkpOiF0aGlzLl9jb250cm9sLmZvY3VzZWQmJih0aGlzLl9pc0ZvY3VzZWR8fG51bGw9PT10aGlzLl9pc0ZvY3VzZWQpJiYodGhpcy5faXNGb2N1c2VkPSExLHRoaXMuX2xpbmVSaXBwbGU/LmRlYWN0aXZhdGUoKSksdGhpcy5fdGV4dEZpZWxkPy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoIm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIix0aGlzLl9jb250cm9sLmZvY3VzZWQpfV9pbml0aWFsaXplT3V0bGluZUxhYmVsT2Zmc2V0U3Vic2NyaXB0aW9ucygpe3RoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlPSEwKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlJiYodGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZT0hMSx0aGlzLl91cGRhdGVPdXRsaW5lTGFiZWxPZmZzZXQoKSl9KX0pLHRoaXMuX2Rpci5jaGFuZ2UucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGU9ITApfV9zaG91bGRBbHdheXNGbG9hdCgpe3JldHVybiJhbHdheXMiPT09dGhpcy5mbG9hdExhYmVsfV9oYXNPdXRsaW5lKCl7cmV0dXJuIm91dGxpbmUiPT09dGhpcy5hcHBlYXJhbmNlfV9mb3JjZURpc3BsYXlJbmZpeExhYmVsKCl7cmV0dXJuIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoJiYhdGhpcy5fc2hvdWxkTGFiZWxGbG9hdCgpfV9oYXNGbG9hdGluZ0xhYmVsKCl7cmV0dXJuISF0aGlzLl9sYWJlbENoaWxkTm9uU3RhdGljfHwhIXRoaXMuX2xhYmVsQ2hpbGRTdGF0aWN9X3Nob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4gdGhpcy5fY29udHJvbC5zaG91bGRMYWJlbEZsb2F0fHx0aGlzLl9zaG91bGRBbHdheXNGbG9hdCgpfV9zaG91bGRGb3J3YXJkKGUpe2xldCBpPXRoaXMuX2NvbnRyb2w/dGhpcy5fY29udHJvbC5uZ0NvbnRyb2w6bnVsbDtyZXR1cm4gaSYmaVtlXX1fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKXtyZXR1cm4gdGhpcy5fZXJyb3JDaGlsZHJlbiYmdGhpcy5fZXJyb3JDaGlsZHJlbi5sZW5ndGg+MCYmdGhpcy5fY29udHJvbC5lcnJvclN0YXRlPyJlcnJvciI6ImhpbnQifV9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKXshdGhpcy5faGFzT3V0bGluZSgpfHwhdGhpcy5fZmxvYXRpbmdMYWJlbHx8KHRoaXMuX2xhYmVsV2lkdGg9dGhpcy5fZmxvYXRpbmdMYWJlbC5nZXRXaWR0aCgpKX1fcHJvY2Vzc0hpbnRzKCl7dGhpcy5fdmFsaWRhdGVIaW50cygpLHRoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpfV92YWxpZGF0ZUhpbnRzKCl7fV9zeW5jRGVzY3JpYmVkQnlJZHMoKXtpZih0aGlzLl9jb250cm9sKXtsZXQgZT1bXTtpZih0aGlzLl9jb250cm9sLnVzZXJBcmlhRGVzY3JpYmVkQnkmJiJzdHJpbmciPT10eXBlb2YgdGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiZlLnB1c2goLi4udGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5LnNwbGl0KCIgIikpLCJoaW50Ij09PXRoaXMuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpe2xldCBpPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChvPT4ic3RhcnQiPT09by5hbGlnbik6bnVsbCxyPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChvPT4iZW5kIj09PW8uYWxpZ24pOm51bGw7aT9lLnB1c2goaS5pZCk6dGhpcy5faGludExhYmVsJiZlLnB1c2godGhpcy5faGludExhYmVsSWQpLHImJmUucHVzaChyLmlkKX1lbHNlIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJmUucHVzaCguLi50aGlzLl9lcnJvckNoaWxkcmVuLm1hcChpPT5pLmlkKSk7dGhpcy5fY29udHJvbC5zZXREZXNjcmliZWRCeUlkcyhlKX19X3VwZGF0ZU91dGxpbmVMYWJlbE9mZnNldCgpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fCF0aGlzLl9oYXNPdXRsaW5lKCl8fCF0aGlzLl9mbG9hdGluZ0xhYmVsKXJldHVybjtsZXQgZT10aGlzLl9mbG9hdGluZ0xhYmVsLmVsZW1lbnQ7aWYoIXRoaXMuX2ljb25QcmVmaXhDb250YWluZXImJiF0aGlzLl90ZXh0UHJlZml4Q29udGFpbmVyKXJldHVybiB2b2lkKGUuc3R5bGUudHJhbnNmb3JtPSIiKTtpZighdGhpcy5faXNBdHRhY2hlZFRvRG9tKCkpcmV0dXJuIHZvaWQodGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZT0hMCk7bGV0IGk9dGhpcy5faWNvblByZWZpeENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCxyPXRoaXMuX3RleHRQcmVmaXhDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsbz1pPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD8/MCxzPXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPz8wO2Uuc3R5bGUudHJhbnNmb3JtPWB2YXIoXG4gICAgICAgIC0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybSxcbiAgICAgICAgdHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKGNhbGMoJHsicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8iLTEiOiIxIn0gKiAoJHtvK3N9cHggKyB2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtb2Zmc2V0LXgsIDBweCkpKSlcbiAgICApYH1faXNBdHRhY2hlZFRvRG9tKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKGUuZ2V0Um9vdE5vZGUpe2xldCBpPWUuZ2V0Um9vdE5vZGUoKTtyZXR1cm4gaSYmaSE9PWV9cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQygkdCksQyhhdCksQyhYaSksQyhHbiksQyhmdmUsOCksQyhoaSw4KSxDKEx0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWZvcm0tZmllbGQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKFRpKHIsa2MsNSksVGkocixrYyw3KSxUaShyLFF2LDUpLFRpKHIsdzksNSksVGkocixkdmUsNSksVGkocixDOSw1KSxUaShyLG05LDUpKSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLl9sYWJlbENoaWxkTm9uU3RhdGljPW8uZmlyc3QpLFNlKG89RWUoKSkmJihpLl9sYWJlbENoaWxkU3RhdGljPW8uZmlyc3QpLFNlKG89RWUoKSkmJihpLl9mb3JtRmllbGRDb250cm9sPW8uZmlyc3QpLFNlKG89RWUoKSkmJihpLl9wcmVmaXhDaGlsZHJlbj1vKSxTZShvPUVlKCkpJiYoaS5fc3VmZml4Q2hpbGRyZW49byksU2Uobz1FZSgpKSYmKGkuX2Vycm9yQ2hpbGRyZW49byksU2Uobz1FZSgpKSYmKGkuX2hpbnRDaGlsZHJlbj1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEdlKEhiZSw1KSxHZSh6YmUsNSksR2UoVWJlLDUpLEdlKGg5LDUpLEdlKGI5LDUpLEdlKF85LDUpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLl90ZXh0RmllbGQ9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX2ljb25QcmVmaXhDb250YWluZXI9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX3RleHRQcmVmaXhDb250YWluZXI9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX2Zsb2F0aW5nTGFiZWw9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX25vdGNoZWRPdXRsaW5lPXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLl9saW5lUmlwcGxlPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLWZvcm0tZmllbGQiXSxob3N0VmFyczo0Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJm50KCJtYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtYWx3YXlzLWZsb2F0IixpLl9zaG91bGRBbHdheXNGbG9hdCgpKSgibWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXByZWZpeCIsaS5faGFzSWNvblByZWZpeCkoIm1hdC1tZGMtZm9ybS1maWVsZC1oYXMtaWNvbi1zdWZmaXgiLGkuX2hhc0ljb25TdWZmaXgpKCJtYXQtZm9ybS1maWVsZC1pbnZhbGlkIixpLl9jb250cm9sLmVycm9yU3RhdGUpKCJtYXQtZm9ybS1maWVsZC1kaXNhYmxlZCIsaS5fY29udHJvbC5kaXNhYmxlZCkoIm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsZWQiLGkuX2NvbnRyb2wuYXV0b2ZpbGxlZCkoIm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIiwiZmlsbCI9PWkuYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSIsIm91dGxpbmUiPT1pLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIixpLl9oYXNGbG9hdGluZ0xhYmVsKCkmJiFpLl9zaG91bGRMYWJlbEZsb2F0KCkpKCJtYXQtZm9jdXNlZCIsaS5fY29udHJvbC5mb2N1c2VkKSgibWF0LXByaW1hcnkiLCJhY2NlbnQiIT09aS5jb2xvciYmIndhcm4iIT09aS5jb2xvcikoIm1hdC1hY2NlbnQiLCJhY2NlbnQiPT09aS5jb2xvcikoIm1hdC13YXJuIiwid2FybiI9PT1pLmNvbG9yKSgibmctdW50b3VjaGVkIixpLl9zaG91bGRGb3J3YXJkKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLGkuX3Nob3VsZEZvcndhcmQoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixpLl9zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpKSgibmctZGlydHkiLGkuX3Nob3VsZEZvcndhcmQoImRpcnR5IikpKCJuZy12YWxpZCIsaS5fc2hvdWxkRm9yd2FyZCgidmFsaWQiKSkoIm5nLWludmFsaWQiLGkuX3Nob3VsZEZvcndhcmQoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLGkuX3Nob3VsZEZvcndhcmQoInBlbmRpbmciKSl9LGlucHV0czp7aGlkZVJlcXVpcmVkTWFya2VyOiJoaWRlUmVxdWlyZWRNYXJrZXIiLGNvbG9yOiJjb2xvciIsZmxvYXRMYWJlbDoiZmxvYXRMYWJlbCIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsc3Vic2NyaXB0U2l6aW5nOiJzdWJzY3JpcHRTaXppbmciLGhpbnRMYWJlbDoiaGludExhYmVsIn0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXSxmZWF0dXJlczpbUXQoW3twcm92aWRlOlNmLHVzZUV4aXN0aW5nOm59XSldLG5nQ29udGVudFNlbGVjdG9yczphdmUsZGVjbHM6MTgsdmFyczoyMyxjb25zdHM6W1sibGFiZWxUZW1wbGF0ZSIsIiJdLFsxLCJtYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciIsIm1kYy10ZXh0LWZpZWxkIiwzLCJjbGljayJdLFsidGV4dEZpZWxkIiwiIl0sWyJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5Iiw0LCJuZ0lmIl0sWzEsIm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4Il0sWyJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZSIsIiIsMywibWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmVPcGVuIiwibWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmVMYWJlbFdpZHRoIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXByZWZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtbWRjLWZvcm0tZmllbGQtdGV4dC1wcmVmaXgiLDQsIm5nSWYiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLWluZml4Il0sWzMsIm5nSWYiXSxbImNsYXNzIiwibWF0LW1kYy1mb3JtLWZpZWxkLXRleHQtc3VmZml4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeCIsNCwibmdJZiJdLFsibWF0Rm9ybUZpZWxkTGluZVJpcHBsZSIsIiIsNCwibmdJZiJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLCJtYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJtYXQtbWRjLWZvcm0tZmllbGQtZXJyb3Itd3JhcHBlciIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsibWF0Rm9ybUZpZWxkRmxvYXRpbmdMYWJlbCIsIiIsMywiZmxvYXRpbmciLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiaWQiLCJjZGtPYnNlcnZlQ29udGVudCIsNCwibmdJZiJdLFsibWF0Rm9ybUZpZWxkRmxvYXRpbmdMYWJlbCIsIiIsMywiZmxvYXRpbmciLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiaWQiLCJjZGtPYnNlcnZlQ29udGVudCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwiY2xhc3MiLCJtYXQtbWRjLWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIG1kYy1mbG9hdGluZy1sYWJlbC0tcmVxdWlyZWQiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LW1kYy1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciIsIm1kYy1mbG9hdGluZy1sYWJlbC0tcmVxdWlyZWQiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLWZvY3VzLW92ZXJsYXkiXSxbIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lIiwiIiwzLCJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZU9wZW4iLCJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZUxhYmVsV2lkdGgiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1wcmVmaXgiXSxbImljb25QcmVmaXhDb250YWluZXIiLCIiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLXRleHQtcHJlZml4Il0sWyJ0ZXh0UHJlZml4Q29udGFpbmVyIiwiIl0sWzEsIm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0LXN1ZmZpeCJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXgiXSxbIm1hdEZvcm1GaWVsZExpbmVSaXBwbGUiLCIiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yLXdyYXBwZXIiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFszLCJpZCIsNCwibmdJZiJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMywiaWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihEbihzdmUpLFMoMCxXYmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLFd0KSxoKDIsImRpdiIsMSwyKSxJKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2NvbnRyb2wub25Db250YWluZXJDbGljayYmaS5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrKG8pfSksUyg0LHFiZSwxLDAsImRpdiIsMyksaCg1LCJkaXYiLDQpLFMoNixRYmUsMiwzLCJkaXYiLDUpLFMoNyxaYmUsMywwLCJkaXYiLDYpLFMoOCxLYmUsMywwLCJkaXYiLDcpLGgoOSwiZGl2Iiw4KSxTKDEwLCRiZSwxLDEsIm5nLXRlbXBsYXRlIiw5KSx6dCgxMSksZygpLFMoMTIsZXZlLDIsMCwiZGl2IiwxMCksUygxMyx0dmUsMiwwLCJkaXYiLDExKSxnKCksUygxNCxudmUsMSwwLCJkaXYiLDEyKSxnKCksaCgxNSwiZGl2IiwxMyksUygxNixpdmUsMiwxLCJkaXYiLDE0KSxTKDE3LG92ZSw1LDIsImRpdiIsMTUpLGcoKSksMiZlJiYodigyKSxudCgibWRjLXRleHQtZmllbGQtLWZpbGxlZCIsIWkuX2hhc091dGxpbmUoKSkoIm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCIsaS5faGFzT3V0bGluZSgpKSgibWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIiwhaS5faGFzRmxvYXRpbmdMYWJlbCgpKSgibWRjLXRleHQtZmllbGQtLWRpc2FibGVkIixpLl9jb250cm9sLmRpc2FibGVkKSgibWRjLXRleHQtZmllbGQtLWludmFsaWQiLGkuX2NvbnRyb2wuZXJyb3JTdGF0ZSksdigyKSxfKCJuZ0lmIiwhaS5faGFzT3V0bGluZSgpJiYhaS5fY29udHJvbC5kaXNhYmxlZCksdigyKSxfKCJuZ0lmIixpLl9oYXNPdXRsaW5lKCkpLHYoMSksXygibmdJZiIsaS5faGFzSWNvblByZWZpeCksdigxKSxfKCJuZ0lmIixpLl9oYXNUZXh0UHJlZml4KSx2KDIpLF8oIm5nSWYiLCFpLl9oYXNPdXRsaW5lKCl8fGkuX2ZvcmNlRGlzcGxheUluZml4TGFiZWwoKSksdigyKSxfKCJuZ0lmIixpLl9oYXNUZXh0U3VmZml4KSx2KDEpLF8oIm5nSWYiLGkuX2hhc0ljb25TdWZmaXgpLHYoMSksXygibmdJZiIsIWkuX2hhc091dGxpbmUoKSksdigxKSxudCgibWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC1keW5hbWljLXNpemUiLCJkeW5hbWljIj09PWkuc3Vic2NyaXB0U2l6aW5nKSxfKCJuZ1N3aXRjaCIsaS5fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLCJlcnJvciIpLHYoMSksXygibmdTd2l0Y2hDYXNlIiwiaGludCIpKX0sZGVwZW5kZW5jaWVzOltGZSxMcixzcixTcixQMSxtOSxoOSxiOSxfOV0sc3R5bGVzOlsnLm1kYy10ZXh0LWZpZWxke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47d2lsbC1jaGFuZ2U6b3BhY2l0eSx0cmFuc2Zvcm0sY29sb3J9Lm1kYy10ZXh0LWZpZWxkIC5tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtdGV4dC1maWVsZF9faW5wdXR7aGVpZ2h0OjI4cHg7d2lkdGg6MTAwJTttaW4td2lkdGg6MDtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjA7YmFja2dyb3VuZDpub25lO2FwcGVhcmFuY2U6bm9uZTtwYWRkaW5nOjB9Lm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX0ubWRjLXRleHQtZmllbGRfX2lucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7ZGlzcGxheTpub25lfS5tZGMtdGV4dC1maWVsZF9faW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS5tZGMtdGV4dC1maWVsZF9faW5wdXQ6aW52YWxpZHtib3gtc2hhZG93Om5vbmV9QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntvcGFjaXR5OjB9fUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTowfX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWwgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXIsLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye29wYWNpdHk6MX19QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjF9fS5tZGMtdGV4dC1maWVsZF9fYWZmaXh7aGVpZ2h0OjI4cHg7b3BhY2l0eTowO3doaXRlLXNwYWNlOm5vd3JhcH0ubWRjLXRleHQtZmllbGQtLWxhYmVsLWZsb2F0aW5nIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgsLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWRjLXRleHQtZmllbGRfX2FmZml4e29wYWNpdHk6MX1Ac3VwcG9ydHMoLXdlYmtpdC1oeXBoZW5zOiBub25lKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXh7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEwMCV9fS5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjJweH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4LC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeFtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MH0ubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjEycHh9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4LC5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4W2Rpcj1ydGxde3BhZGRpbmctbGVmdDoxMnB4O3BhZGRpbmctcmlnaHQ6MH0ubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7cGFkZGluZy1sZWZ0OjEycHg7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXgsLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tc3VmZml4W2Rpcj1ydGxde3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTJweH0ubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtwYWRkaW5nLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXgsLm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXhbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoycHh9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWR7aGVpZ2h0OjU2cHh9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6OmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDo0MHB4O2NvbnRlbnQ6IiI7dmVydGljYWwtYWxpZ246MH0ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVse2xlZnQ6MTZweDtyaWdodDppbml0aWFsfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWxbZGlyPXJ0bF17bGVmdDppbml0aWFsO3JpZ2h0OjE2cHh9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwNiUpIHNjYWxlKDAuNzUpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWRjLXRleHQtZmllbGRfX2lucHV0e2hlaWdodDoxMDAlfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWRjLWZsb2F0aW5nLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWw6OmJlZm9yZXtkaXNwbGF5Om5vbmV9QHN1cHBvcnRzKC13ZWJraXQtaHlwaGVuczogbm9uZSl7Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIC5tZGMtdGV4dC1maWVsZF9fYWZmaXh7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEwMCV9fS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWR7aGVpZ2h0OjU2cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zNy4yNXB4KSBzY2FsZSgxKX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle2ZvbnQtc2l6ZTouNzVyZW19Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXtmb250LXNpemU6MXJlbX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7aGVpZ2h0OjEwMCV9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZ3tib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCl9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZ1tkaXI9cnRsXXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9QHN1cHBvcnRzKHRvcDogbWF4KDAlKSl7Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZ3t3aWR0aDptYXgoMTJweCwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX19QHN1cHBvcnRzKHRvcDogbWF4KDAlKSl7Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIG1heCgxMnB4LCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpKjIpfX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5nLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5nW2Rpcj1ydGxde2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KX1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVke3BhZGRpbmctbGVmdDptYXgoMTZweCwgY2FsYyh2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkgKyA0cHgpKX19QHN1cHBvcnRzKHRvcDogbWF4KDAlKSl7Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZHtwYWRkaW5nLXJpZ2h0Om1heCgxNnB4LCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfX1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZXtwYWRkaW5nLWxlZnQ6bWF4KDE2cHgsIGNhbGModmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpICsgNHB4KSl9fUBzdXBwb3J0cyh0b3A6IG1heCgwJSkpey5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5le3BhZGRpbmctcmlnaHQ6bWF4KDE2cHgsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9fS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29ue3BhZGRpbmctbGVmdDowfUBzdXBwb3J0cyh0b3A6IG1heCgwJSkpey5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29ue3BhZGRpbmctcmlnaHQ6bWF4KDE2cHgsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbiwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbltkaXI9cnRsXXtwYWRkaW5nLXJpZ2h0OjB9QHN1cHBvcnRzKHRvcDogbWF4KDAlKSl7W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uW2Rpcj1ydGxde3BhZGRpbmctbGVmdDptYXgoMTZweCwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX19Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctcmlnaHQ6MH1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy1sZWZ0Om1heCgxNnB4LCBjYWxjKHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSArIDRweCkpfX1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbltkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MH1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXtbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbltkaXI9cnRsXXtwYWRkaW5nLXJpZ2h0Om1heCgxNnB4LCBjYWxjKHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSArIDRweCkpfX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS1ub3RjaGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtwYWRkaW5nLXRvcDoxcHh9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVse2xlZnQ6NHB4O3JpZ2h0OmluaXRpYWx9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbCwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWxbZGlyPXJ0bF17bGVmdDppbml0aWFsO3JpZ2h0OjRweH0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7ZGlzcGxheTpmbGV4O2JvcmRlcjpub25lICFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmV7ei1pbmRleDoxfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWF7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDphdXRvO2hlaWdodDphdXRvO3BhZGRpbmc6MH0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhIC5tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjE5cHh9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSAubWRjLWZsb2F0aW5nLWxhYmVsOm5vdCgubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSl7dHJhbnNmb3JtOm5vbmV9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSAubWRjLXRleHQtZmllbGRfX2lucHV0e2ZsZXgtZ3JvdzoxO2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MS41cmVtO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7cmVzaXplOm5vbmU7cGFkZGluZzowIDE2cHh9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOjpiZWZvcmV7ZGlzcGxheTpub25lfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAuMjVweCkgc2NhbGUoMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7bWFyZ2luLXRvcDoyM3B4O21hcmdpbi1ib3R0b206OXB4fS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWwgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHttYXJnaW4tdG9wOjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4fS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS1ub3RjaGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtwYWRkaW5nLXRvcDowfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNy4yNXB4KSBzY2FsZSgxKX0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXtmb250LXNpemU6Ljc1cmVtfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMjQuNzVweCkgc2NhbGUoMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmUsLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle2ZvbnQtc2l6ZToxcmVtfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7bWFyZ2luLXRvcDoxNnB4O21hcmdpbi1ib3R0b206MTZweH0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVse3RvcDoxOHB4fS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLXdpdGgtaW50ZXJuYWwtY291bnRlciAubWRjLXRleHQtZmllbGRfX2lucHV0e21hcmdpbi1ib3R0b206MnB4fS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLXdpdGgtaW50ZXJuYWwtY291bnRlciAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7YWxpZ24tc2VsZjpmbGV4LWVuZDtwYWRkaW5nOjAgMTZweH0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS13aXRoLWludGVybmFsLWNvdW50ZXIgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyOjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDoxNnB4O2NvbnRlbnQ6IiI7dmVydGljYWwtYWxpZ246LTE2cHh9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0td2l0aC1pbnRlcm5hbC1jb3VudGVyIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcjo6YmVmb3Jle2Rpc3BsYXk6bm9uZX0ubWRjLXRleHQtZmllbGRfX3Jlc2l6ZXJ7YWxpZ24tc2VsZjpzdHJldGNoO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO21heC1oZWlnaHQ6MTAwJTttYXgtd2lkdGg6MTAwJTttaW4taGVpZ2h0OjU2cHg7bWluLXdpZHRoOmZpdC1jb250ZW50O21pbi13aWR0aDotbW96LWF2YWlsYWJsZTttaW4td2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtvdmVyZmxvdzpoaWRkZW47cmVzaXplOmJvdGh9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciAubWRjLXRleHQtZmllbGRfX2lucHV0LC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMXB4KX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMXB4KSB0cmFuc2xhdGVZKC0xcHgpfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplcltkaXI9cnRsXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxcHgpIHRyYW5zbGF0ZVkoLTFweCl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLXRleHQtZmllbGRfX3Jlc2l6ZXIgLm1kYy10ZXh0LWZpZWxkX19pbnB1dCwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMXB4KSB0cmFuc2xhdGVZKDFweCl9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyIC5tZGMtdGV4dC1maWVsZF9faW5wdXQsW2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlciwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciAubWRjLXRleHQtZmllbGRfX2lucHV0W2Rpcj1ydGxdLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcltkaXI9cnRsXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMXB4KSB0cmFuc2xhdGVZKDFweCl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbntwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24sLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbltkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjB9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDQ4cHgpO2xlZnQ6NDhweDtyaWdodDppbml0aWFsfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbCwubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbFtkaXI9cnRsXXtsZWZ0OmluaXRpYWw7cmlnaHQ6NDhweH0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7bWF4LXdpZHRoOmNhbGMoMTAwJSAvIDAuNzUgLSA2NHB4IC8gMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtsZWZ0OjM2cHg7cmlnaHQ6aW5pdGlhbH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbCwubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsW2Rpcj1ydGxde2xlZnQ6aW5pdGlhbDtyaWdodDozNnB4fS5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIDpub3QoLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gNjBweCl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTM3LjI1cHgpIHRyYW5zbGF0ZVgoLTMycHgpIHNjYWxlKDEpfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSwubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZVtkaXI9cnRsXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMzcuMjVweCkgdHJhbnNsYXRlWCgzMnB4KSBzY2FsZSgxKX0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXtmb250LXNpemU6Ljc1cmVtfS5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMzQuNzVweCkgdHJhbnNsYXRlWCgtMzJweCkgc2NhbGUoMC43NSl9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmUsLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmVbZGlyPXJ0bF0sLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlW2Rpcj1ydGxde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zNC43NXB4KSB0cmFuc2xhdGVYKDMycHgpIHNjYWxlKDAuNzUpfS5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXtmb250LXNpemU6MXJlbX0ubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbntwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uLC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uW2Rpcj1ydGxde3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH0ubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDY0cHgpfS5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7bWF4LXdpZHRoOmNhbGMoMTAwJSAvIDAuNzUgLSA2NHB4IC8gMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIDpub3QoLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gNjBweCl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb24ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVse21heC13aWR0aDpjYWxjKDEwMCUgLSA5NnB4KX0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb24ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXttYXgtd2lkdGg6Y2FsYygxMDAlIC8gMC43NSAtIDk2cHggLyAwLjc1KX0ubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmV7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWRjLXRleHQtZmllbGQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5le3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MTZweH0ubWRjLWZvcm0tZmllbGQ+Lm1kYy10ZXh0LWZpZWxkK2xhYmVse2FsaWduLXNlbGY6ZmxleC1zdGFydH0ubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci13aWR0aDoycHh9Lm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHQ6bm90KC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2cpe29wYWNpdHk6MX0ubWRjLXRleHQtZmllbGQtLWZvY3VzZWQubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS1ub3RjaGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtwYWRkaW5nLXRvcDoycHh9Lm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEgLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe3BhZGRpbmctdG9wOjB9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHQtLXZhbGlkYXRpb24tbXNne29wYWNpdHk6MX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2JhY2tncm91bmQtY29sb3I6V2luZG93fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHt6LWluZGV4OjF9fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjdXJzb3I6ZGVmYXVsdH0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGV7ZGlzcGxheTpub25lfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtwb2ludGVyLWV2ZW50czphdXRvfS5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHt0ZXh0LWFsaWduOnJpZ2h0fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQsLm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2lucHV0W2Rpcj1ydGxde3RleHQtYWxpZ246bGVmdH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dCAubWRjLXRleHQtZmllbGRfX2lucHV0LFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9fYWZmaXgsLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2lucHV0LC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHRbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19hZmZpeHtkaXJlY3Rpb246bHRyfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjJweH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXgsLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7cGFkZGluZy1sZWZ0OjEycHg7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZywubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tvcmRlcjoxfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtvcmRlcjoyfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9faW5wdXQsLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2lucHV0e29yZGVyOjN9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4LC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHRbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e29yZGVyOjR9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZywubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7b3JkZXI6NX1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dC5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0Lm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2lucHV0e3RleHQtYWxpZ246cmlnaHR9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0Lm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXh7cGFkZGluZy1yaWdodDoxMnB4fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0Lm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXgsLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dC5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWRbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tc3VmZml4e3BhZGRpbmctbGVmdDoycHh9Lm1kYy1mbG9hdGluZy1sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmxlZnQgdG9wO3RyYW5zZm9ybS1vcmlnaW46bGVmdCB0b3A7bGluZS1oZWlnaHQ6MS4xNXJlbTt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnRleHQ7b3ZlcmZsb3c6aGlkZGVuO3dpbGwtY2hhbmdlOnRyYW5zZm9ybX1bZGlyPXJ0bF0gLm1kYy1mbG9hdGluZy1sYWJlbCwubWRjLWZsb2F0aW5nLWxhYmVsW2Rpcj1ydGxde3JpZ2h0OjA7bGVmdDphdXRvOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpyaWdodCB0b3A7dHJhbnNmb3JtLW9yaWdpbjpyaWdodCB0b3A7dGV4dC1hbGlnbjpyaWdodH0ubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXtjdXJzb3I6YXV0b30ubWRjLWZsb2F0aW5nLWxhYmVsLS1yZXF1aXJlZDpub3QoLm1kYy1mbG9hdGluZy1sYWJlbC0taGlkZS1yZXF1aXJlZC1tYXJrZXIpOjphZnRlcnttYXJnaW4tbGVmdDoxcHg7bWFyZ2luLXJpZ2h0OjBweDtjb250ZW50OiIqIn1bZGlyPXJ0bF0gLm1kYy1mbG9hdGluZy1sYWJlbC0tcmVxdWlyZWQ6bm90KC5tZGMtZmxvYXRpbmctbGFiZWwtLWhpZGUtcmVxdWlyZWQtbWFya2VyKTo6YWZ0ZXIsLm1kYy1mbG9hdGluZy1sYWJlbC0tcmVxdWlyZWQ6bm90KC5tZGMtZmxvYXRpbmctbGFiZWwtLWhpZGUtcmVxdWlyZWQtbWFya2VyKVtkaXI9cnRsXTo6YWZ0ZXJ7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MXB4fS5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDYlKSBzY2FsZSgwLjc1KX0ubWRjLW5vdGNoZWQtb3V0bGluZXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtsZWZ0OjA7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dGV4dC1hbGlnbjpsZWZ0O3BvaW50ZXItZXZlbnRzOm5vbmV9W2Rpcj1ydGxdIC5tZGMtbm90Y2hlZC1vdXRsaW5lLC5tZGMtbm90Y2hlZC1vdXRsaW5lW2Rpcj1ydGxde3RleHQtYWxpZ246cmlnaHR9Lm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7Ym9yZGVyLXRvcDoxcHggc29saWQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQ7cG9pbnRlci1ldmVudHM6bm9uZX0ubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZ3tib3JkZXItbGVmdDoxcHggc29saWQ7Ym9yZGVyLXJpZ2h0Om5vbmU7d2lkdGg6MTJweH1bZGlyPXJ0bF0gLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmdbZGlyPXJ0bF17Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkfS5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDoxcHggc29saWQ7ZmxleC1ncm93OjF9W2Rpcj1ydGxdIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZywubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmdbZGlyPXJ0bF17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkO2JvcmRlci1yaWdodDpub25lfS5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDEycHggKiAyKX0ubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLWZsb2F0aW5nLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO21heC13aWR0aDoxMDAlfS5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RleHQtb3ZlcmZsb3c6Y2xpcH0ubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7bWF4LXdpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWRjLW5vdGNoZWQtb3V0bGluZS0tbm90Y2hlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDo4cHg7Ym9yZGVyLXRvcDpub25lfVtkaXI9cnRsXSAubWRjLW5vdGNoZWQtb3V0bGluZS0tbm90Y2hlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoW2Rpcj1ydGxde3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDowfS5tZGMtbm90Y2hlZC1vdXRsaW5lLS1uby1sYWJlbCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7ZGlzcGxheTpub25lfS5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZSwubWRjLWxpbmUtcmlwcGxlOjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2NvbnRlbnQ6IiJ9Lm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20td2lkdGg6MnB4fS5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXt6LWluZGV4OjF9Lm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7dHJhbnNmb3JtOnNjYWxlWCgwKTtvcGFjaXR5OjA7ei1pbmRleDoyfS5tZGMtbGluZS1yaXBwbGUtLWFjdGl2ZTo6YWZ0ZXJ7dHJhbnNmb3JtOnNjYWxlWCgxKTtvcGFjaXR5OjF9Lm1kYy1saW5lLXJpcHBsZS0tZGVhY3RpdmF0aW5nOjphZnRlcntvcGFjaXR5OjB9Lm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0YXJlYS1jb250cm9se3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtyZXNpemU6dmVydGljYWw7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDphdXRvO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6bm9uZTtvdmVyZmxvdzphdXRvfS5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbHtmb250OmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LXRyYW5zZm9ybTppbmhlcml0O2JvcmRlcjpub25lfS5tYXQtbWRjLWZvcm0tZmllbGQgLm1hdC1tZGMtZmxvYXRpbmctbGFiZWwubWRjLWZsb2F0aW5nLWxhYmVse2xpbmUtaGVpZ2h0Om5vcm1hbDtwb2ludGVyLWV2ZW50czphbGx9Lm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbDpub3QoLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sLm1kYy10ZXh0LWZpZWxkX19pbnB1dCwubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9se2hlaWdodDphdXRvfS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2wubWRjLXRleHQtZmllbGRfX2lucHV0W3R5cGU9Y29sb3Jde2hlaWdodDoyM3B4fS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntoZWlnaHQ6YXV0bztmbGV4OmF1dG99Lm1hdC1tZGMtZm9ybS1maWVsZC1oYXMtaWNvbi1wcmVmaXggLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVye3BhZGRpbmctbGVmdDowOy0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLW9mZnNldC14OiAtMTZweH0ubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXN1ZmZpeCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXN1ZmZpeCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1sZWZ0OjB9W2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQtaGFzLWljb24tcHJlZml4IC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntwYWRkaW5nLXJpZ2h0OjB9Lm1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC1hbHdheXMtZmxvYXQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXJ7dHJhbnNpdGlvbi1kZWxheTo0MG1zO3RyYW5zaXRpb24tZHVyYXRpb246MTEwbXM7b3BhY2l0eToxfS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4IC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse2xlZnQ6YXV0bztyaWdodDphdXRvfS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWF0LW1kYy1mb3JtLWZpZWxkIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7cGFkZGluZy10b3A6MH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6OmJlZm9yZXtjb250ZW50Om5vbmV9Lm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciwubWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3JpZ2h0OjA7cGFkZGluZzowIDE2cHh9Lm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtZHluYW1pYy1zaXplIC5tYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyLC5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LWR5bmFtaWMtc2l6ZSAubWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yLXdyYXBwZXJ7cG9zaXRpb246c3RhdGljfS5tYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTZweH0ubWF0LW1kYy1mb3JtLWZpZWxkLWJvdHRvbS1hbGlnbi5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LWR5bmFtaWMtc2l6ZTo6YmVmb3Jle2NvbnRlbnQ6dW5zZXR9Lm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LWVuZHtvcmRlcjoxfS5tYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVye2Rpc3BsYXk6ZmxleH0ubWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtc3BhY2Vye2ZsZXg6MSAwIDFlbX0ubWF0LW1kYy1mb3JtLWZpZWxkLWVycm9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfXNlbGVjdC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3h9c2VsZWN0Lm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb250ZW50OiIiO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci10b3A6NXB4IHNvbGlkO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjUwJTttYXJnaW4tdG9wOi0yLjVweDtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjB9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbHtwYWRkaW5nLXJpZ2h0OjE1cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2x7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntvdXRsaW5lLWNvbG9yOkdyYXlUZXh0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9jdXNlZCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7b3V0bGluZTpkYXNoZWQgM3B4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZXtib3JkZXI6ZGFzaGVkIDNweH0ubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2xbdHlwZT1kYXRlXSwubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2xbdHlwZT1kYXRldGltZV0sLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sW3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbFt0eXBlPW1vbnRoXSwubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2xbdHlwZT13ZWVrXSwubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2xbdHlwZT10aW1lXXtsaW5lLWhlaWdodDoxfS5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbDo6LXdlYmtpdC1kYXRldGltZS1lZGl0e2xpbmUtaGVpZ2h0OjE7cGFkZGluZzowO21hcmdpbi1ib3R0b206LTJweH0ubWF0LW1kYy1mb3JtLWZpZWxkey0tbWF0LW1kYy1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXNjYWxlOiAwLjc1O2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDowO3RleHQtYWxpZ246bGVmdH1bZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtbWRjLWZvcm0tZmllbGQtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcnt3aWR0aDoxMDAlfS5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1wcmVmaXgsLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHthbGlnbi1zZWxmOmNlbnRlcjtsaW5lLWhlaWdodDowO3BvaW50ZXItZXZlbnRzOmF1dG99Lm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXByZWZpeCxbZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtwYWRkaW5nOjAgNHB4IDAgMH0ubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4LFtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tcHJlZml4e3BhZGRpbmc6MCAwIDAgNHB4fS5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1wcmVmaXg+Lm1hdC1pY29uLC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXg+Lm1hdC1pY29ue3BhZGRpbmc6MTJweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIgLm1hdC1pY29uLC5tYXQtbWRjLWZvcm0tZmllbGQgbGFiZWwgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtY2xpcC1wYXRoOmluc2V0KC05ZW0gLTk5OWVtIC05ZW0gMXB4KTtjbGlwLXBhdGg6aW5zZXQoLTllbSAtOTk5ZW0gLTllbSAxcHgpfVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDotMXB4Oy13ZWJraXQtY2xpcC1wYXRoOmluc2V0KC05ZW0gMXB4IC05ZW0gLTk5OWVtKTtjbGlwLXBhdGg6aW5zZXQoLTllbSAxcHggLTllbSAtOTk5ZW0pfS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2lucHV0e3RyYW5zaXRpb246b3BhY2l0eSAxNTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX1AbWVkaWEgYWxsey5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcnt0cmFuc2l0aW9uOm9wYWNpdHkgNjdtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX19QG1lZGlhIGFsbHsubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpvcGFjaXR5IDY3bXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9fUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXIsLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcnt0cmFuc2l0aW9uLWRlbGF5OjQwbXM7dHJhbnNpdGlvbi1kdXJhdGlvbjoxMTBtc319QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIC5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye3RyYW5zaXRpb24tZGVsYXk6NDBtczt0cmFuc2l0aW9uLWR1cmF0aW9uOjExMG1zfX0ubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkX19hZmZpeHt0cmFuc2l0aW9uOm9wYWNpdHkgMTUwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmV7dHJhbnNpdGlvbi1kdXJhdGlvbjo3NW1zfS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLXNoYWtle2FuaW1hdGlvbjptZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dC1maWVsZC1vdXRsaW5lZCAyNTBtcyAxfUBrZXlmcmFtZXMgbWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHQtZmllbGQtb3V0bGluZWR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gMCUpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX0zMyV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC41LCAwLCAwLjcwMTczMiwgMC40OTU4MTkpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoNCUgLSAwJSkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfTY2JXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjMwMjQzNSwgMC4zODEzNTIsIDAuNTUsIDAuOTU2MzUyKTt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC00JSAtIDAlKSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAwJSkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfX0ubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1zaGFrZXthbmltYXRpb246bWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHRhcmVhLWZpbGxlZCAyNTBtcyAxfUBrZXlmcmFtZXMgbWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHRhcmVhLWZpbGxlZHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAwJSkpIHRyYW5zbGF0ZVkoLTEwLjI1cHgpIHNjYWxlKDAuNzUpfTMzJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjUsIDAsIDAuNzAxNzMyLCAwLjQ5NTgxOSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYyg0JSAtIDAlKSkgdHJhbnNsYXRlWSgtMTAuMjVweCkgc2NhbGUoMC43NSl9NjYle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzAyNDM1LCAwLjM4MTM1MiwgMC41NSwgMC45NTYzNTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTQlIC0gMCUpKSB0cmFuc2xhdGVZKC0xMC4yNXB4KSBzY2FsZSgwLjc1KX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIDAlKSkgdHJhbnNsYXRlWSgtMTAuMjVweCkgc2NhbGUoMC43NSl9fS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1zaGFrZXthbmltYXRpb246bWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHRhcmVhLW91dGxpbmVkIDI1MG1zIDF9QGtleWZyYW1lcyBtZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dGFyZWEtb3V0bGluZWR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gMCUpKSB0cmFuc2xhdGVZKC0yNC43NXB4KSBzY2FsZSgwLjc1KX0zMyV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC41LCAwLCAwLjcwMTczMiwgMC40OTU4MTkpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoNCUgLSAwJSkpIHRyYW5zbGF0ZVkoLTI0Ljc1cHgpIHNjYWxlKDAuNzUpfTY2JXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjMwMjQzNSwgMC4zODEzNTIsIDAuNTUsIDAuOTU2MzUyKTt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC00JSAtIDAlKSkgdHJhbnNsYXRlWSgtMjQuNzVweCkgc2NhbGUoMC43NSl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAwJSkpIHRyYW5zbGF0ZVkoLTI0Ljc1cHgpIHNjYWxlKDAuNzUpfX0ubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tc2hha2V7YW5pbWF0aW9uOm1kYy1mbG9hdGluZy1sYWJlbC1zaGFrZS1mbG9hdC1hYm92ZS10ZXh0LWZpZWxkLW91dGxpbmVkLWxlYWRpbmctaWNvbiAyNTBtcyAxfUBrZXlmcmFtZXMgbWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHQtZmllbGQtb3V0bGluZWQtbGVhZGluZy1pY29uezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIDMycHgpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX0zMyV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC41LCAwLCAwLjcwMTczMiwgMC40OTU4MTkpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoNCUgLSAzMnB4KSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9NjYle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzAyNDM1LCAwLjM4MTM1MiwgMC41NSwgMC45NTYzNTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTQlIC0gMzJweCkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gMzJweCkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfX1bZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLXNoYWtlLC5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZFtkaXI9cnRsXSAubWRjLWZsb2F0aW5nLWxhYmVsLS1zaGFrZXthbmltYXRpb246bWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHQtZmllbGQtb3V0bGluZWQtbGVhZGluZy1pY29uIDI1MG1zIDF9QGtleWZyYW1lcyBtZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dC1maWVsZC1vdXRsaW5lZC1sZWFkaW5nLWljb24tcnRsezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIC0zMnB4KSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9MzMle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNSwgMCwgMC43MDE3MzIsIDAuNDk1ODE5KTt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDQlIC0gLTMycHgpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX02NiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4zMDI0MzUsIDAuMzgxMzUyLCAwLjU1LCAwLjk1NjM1Mik7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygtNCUgLSAtMzJweCkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gLTMycHgpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX19Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtZmxvYXRpbmctbGFiZWx7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMTUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSxjb2xvciAxNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtZmxvYXRpbmctbGFiZWwtLXNoYWtle2FuaW1hdGlvbjptZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtc3RhbmRhcmQgMjUwbXMgMX1Aa2V5ZnJhbWVzIG1kYy1mbG9hdGluZy1sYWJlbC1zaGFrZS1mbG9hdC1hYm92ZS1zdGFuZGFyZHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAwJSkpIHRyYW5zbGF0ZVkoLTEwNiUpIHNjYWxlKDAuNzUpfTMzJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjUsIDAsIDAuNzAxNzMyLCAwLjQ5NTgxOSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYyg0JSAtIDAlKSkgdHJhbnNsYXRlWSgtMTA2JSkgc2NhbGUoMC43NSl9NjYle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzAyNDM1LCAwLjM4MTM1MiwgMC41NSwgMC45NTYzNTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTQlIC0gMCUpKSB0cmFuc2xhdGVZKC0xMDYlKSBzY2FsZSgwLjc1KX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIDAlKSkgdHJhbnNsYXRlWSgtMTA2JSkgc2NhbGUoMC43NSl9fS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcnt0cmFuc2l0aW9uOnRyYW5zZm9ybSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLG9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltwdmUudHJhbnNpdGlvbk1lc3NhZ2VzXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxFZj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sUGUsbmcsZm5dfSksbn0pKCksTzk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3JlbmRlcmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMub25DaGFuZ2U9cj0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9fXNldFByb3BlcnR5KGUsaSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGUsaSl9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuc2V0UHJvcGVydHkoImRpc2FibGVkIixlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhtYyksQyhNZSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpufSksbn0pKCksVGY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE85e31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sZmVhdHVyZXM6W0tlXX0pLG59KSgpLE1vPW5ldyBpZSgiTmdWYWx1ZUFjY2Vzc29yIiksZ3ZlPXtwcm92aWRlOk1vLHVzZUV4aXN0aW5nOiRuKCgpPT5fdmUpLG11bHRpOiEwfSxfdmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFRme3dyaXRlVmFsdWUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQuY2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbUXQoW2d2ZV0pLEtlXX0pLG59KSgpLGJ2ZT17cHJvdmlkZTpNbyx1c2VFeGlzdGluZzokbigoKT0+YmcpLG11bHRpOiEwfSx5dmU9bmV3IGllKCJDb21wb3NpdGlvbkV2ZW50TW9kZSIpLGJnPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBPOXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9cix0aGlzLl9jb21wb3Npbmc9ITEsbnVsbD09dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYodGhpcy5fY29tcG9zaXRpb25Nb2RlPSFmdW5jdGlvbigpe2xldCBuPVRsKCk/VGwoKS5nZXRVc2VyQWdlbnQoKToiIjtyZXR1cm4vYW5kcm9pZCAoXGQrKS8udGVzdChuLnRvTG93ZXJDYXNlKCkpfSgpKX13cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixlPz8iIil9X2hhbmRsZUlucHV0KGUpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJiF0aGlzLl9jb21wb3NpbmcpJiZ0aGlzLm9uQ2hhbmdlKGUpfV9jb21wb3NpdGlvblN0YXJ0KCl7dGhpcy5fY29tcG9zaW5nPSEwfV9jb21wb3NpdGlvbkVuZChlKXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9uQ2hhbmdlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKG1jKSxDKE1lKSxDKHl2ZSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsImZvcm1Db250cm9sIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5nTW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENvbnRyb2wiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUlucHV0KG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSkoImNvbXBvc2l0aW9uc3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2NvbXBvc2l0aW9uU3RhcnQoKX0pKCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2NvbXBvc2l0aW9uRW5kKG8udGFyZ2V0LnZhbHVlKX0pfSxmZWF0dXJlczpbUXQoW2J2ZV0pLEtlXX0pLG59KSgpLHh2ZT0hMTtmdW5jdGlvbiBWdShuKXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2Ygbnx8QXJyYXkuaXNBcnJheShuKSkmJjA9PT1uLmxlbmd0aH1mdW5jdGlvbiBrOShuKXtyZXR1cm4gbnVsbCE9biYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aH12YXIgd289bmV3IGllKCJOZ1ZhbGlkYXRvcnMiKSxIdT1uZXcgaWUoIk5nQXN5bmNWYWxpZGF0b3JzIiksQ3ZlPS9eKD89LnsxLDI1NH0kKSg/PS57MSw2NH1AKVthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcLlthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sVWw9Y2xhc3N7c3RhdGljIG1pbih0KXtyZXR1cm4gRjkodCl9c3RhdGljIG1heCh0KXtyZXR1cm4gTjkodCl9c3RhdGljIHJlcXVpcmVkKHQpe3JldHVybiBMOSh0KX1zdGF0aWMgcmVxdWlyZWRUcnVlKHQpe3JldHVybiBCOSh0KX1zdGF0aWMgZW1haWwodCl7cmV0dXJuIFY5KHQpfXN0YXRpYyBtaW5MZW5ndGgodCl7cmV0dXJuIEg5KHQpfXN0YXRpYyBtYXhMZW5ndGgodCl7cmV0dXJuIHo5KHQpfXN0YXRpYyBwYXR0ZXJuKHQpe3JldHVybiBVOSh0KX1zdGF0aWMgbnVsbFZhbGlkYXRvcih0KXtyZXR1cm4gbnVsbH1zdGF0aWMgY29tcG9zZSh0KXtyZXR1cm4gWDkodCl9c3RhdGljIGNvbXBvc2VBc3luYyh0KXtyZXR1cm4gUTkodCl9fTtmdW5jdGlvbiBGOShuKXtyZXR1cm4gdD0+e2lmKFZ1KHQudmFsdWUpfHxWdShuKSlyZXR1cm4gbnVsbDtsZXQgZT1wYXJzZUZsb2F0KHQudmFsdWUpO3JldHVybiFpc05hTihlKSYmZTxuP3ttaW46e21pbjpuLGFjdHVhbDp0LnZhbHVlfX06bnVsbH19ZnVuY3Rpb24gTjkobil7cmV0dXJuIHQ9PntpZihWdSh0LnZhbHVlKXx8VnUobikpcmV0dXJuIG51bGw7bGV0IGU9cGFyc2VGbG9hdCh0LnZhbHVlKTtyZXR1cm4haXNOYU4oZSkmJmU+bj97bWF4OnttYXg6bixhY3R1YWw6dC52YWx1ZX19Om51bGx9fWZ1bmN0aW9uIEw5KG4pe3JldHVybiBWdShuLnZhbHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gQjkobil7cmV0dXJuITA9PT1uLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBWOShuKXtyZXR1cm4gVnUobi52YWx1ZSl8fEN2ZS50ZXN0KG4udmFsdWUpP251bGw6e2VtYWlsOiEwfX1mdW5jdGlvbiBIOShuKXtyZXR1cm4gdD0+VnUodC52YWx1ZSl8fCFrOSh0LnZhbHVlKT9udWxsOnQudmFsdWUubGVuZ3RoPG4/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6bixhY3R1YWxMZW5ndGg6dC52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIHo5KG4pe3JldHVybiB0PT5rOSh0LnZhbHVlKSYmdC52YWx1ZS5sZW5ndGg+bj97bWF4bGVuZ3RoOntyZXF1aXJlZExlbmd0aDpuLGFjdHVhbExlbmd0aDp0LnZhbHVlLmxlbmd0aH19Om51bGx9ZnVuY3Rpb24gVTkobil7aWYoIW4pcmV0dXJuIHRFO2xldCB0LGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuPyhlPSIiLCJeIiE9PW4uY2hhckF0KDApJiYoZSs9Il4iKSxlKz1uLCIkIiE9PW4uY2hhckF0KG4ubGVuZ3RoLTEpJiYoZSs9IiQiKSx0PW5ldyBSZWdFeHAoZSkpOihlPW4udG9TdHJpbmcoKSx0PW4pLGk9PntpZihWdShpLnZhbHVlKSlyZXR1cm4gbnVsbDtsZXQgcj1pLnZhbHVlO3JldHVybiB0LnRlc3Qocik/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOmUsYWN0dWFsVmFsdWU6cn19fX1mdW5jdGlvbiB0RShuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBqOShuKXtyZXR1cm4gbnVsbCE9bn1mdW5jdGlvbiBHOShuKXtsZXQgdD1oaChuKT8kcihuKTpuO2lmKHh2ZSYmIURPKHQpKXtsZXQgZT0iRXhwZWN0ZWQgYXN5bmMgdmFsaWRhdG9yIHRvIHJldHVybiBQcm9taXNlIG9yIE9ic2VydmFibGUuIjt0aHJvdyJvYmplY3QiPT10eXBlb2YgbiYmKGUrPSIgQXJlIHlvdSB1c2luZyBhIHN5bmNocm9ub3VzIHZhbGlkYXRvciB3aGVyZSBhbiBhc3luYyB2YWxpZGF0b3IgaXMgZXhwZWN0ZWQ/IiksbmV3IHl0KC0xMTAxLGUpfXJldHVybiB0fWZ1bmN0aW9uIFc5KG4pe2xldCB0PXt9O3JldHVybiBuLmZvckVhY2goZT0+e3Q9bnVsbCE9ZT97Li4udCwuLi5lfTp0fSksMD09PU9iamVjdC5rZXlzKHQpLmxlbmd0aD9udWxsOnR9ZnVuY3Rpb24gcTkobix0KXtyZXR1cm4gdC5tYXAoZT0+ZShuKSl9ZnVuY3Rpb24gWTkobil7cmV0dXJuIG4ubWFwKHQ9PmZ1bmN0aW9uKG4pe3JldHVybiFuLnZhbGlkYXRlfSh0KT90OmU9PnQudmFsaWRhdGUoZSkpfWZ1bmN0aW9uIFg5KG4pe2lmKCFuKXJldHVybiBudWxsO2xldCB0PW4uZmlsdGVyKGo5KTtyZXR1cm4gMD09dC5sZW5ndGg/bnVsbDpmdW5jdGlvbihlKXtyZXR1cm4gVzkocTkoZSx0KSl9fWZ1bmN0aW9uIHoyKG4pe3JldHVybiBudWxsIT1uP1g5KFk5KG4pKTpudWxsfWZ1bmN0aW9uIFE5KG4pe2lmKCFuKXJldHVybiBudWxsO2xldCB0PW4uZmlsdGVyKGo5KTtyZXR1cm4gMD09dC5sZW5ndGg/bnVsbDpmdW5jdGlvbihlKXtyZXR1cm4gY28ocTkoZSx0KS5tYXAoRzkpKS5waXBlKE4oVzkpKX19ZnVuY3Rpb24gVTIobil7cmV0dXJuIG51bGwhPW4/UTkoWTkobikpOm51bGx9ZnVuY3Rpb24gRTkobix0KXtyZXR1cm4gbnVsbD09PW4/W3RdOkFycmF5LmlzQXJyYXkobik/Wy4uLm4sdF06W24sdF19ZnVuY3Rpb24gWjkobil7cmV0dXJuIG4uX3Jhd1ZhbGlkYXRvcnN9ZnVuY3Rpb24gSzkobil7cmV0dXJuIG4uX3Jhd0FzeW5jVmFsaWRhdG9yc31mdW5jdGlvbiBCMihuKXtyZXR1cm4gbj9BcnJheS5pc0FycmF5KG4pP246W25dOltdfWZ1bmN0aW9uIG5FKG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5pbmNsdWRlcyh0KTpuPT09dH1mdW5jdGlvbiBUOShuLHQpe2xldCBlPUIyKHQpO3JldHVybiBCMihuKS5mb3JFYWNoKHI9PntuRShlLHIpfHxlLnB1c2gocil9KSxlfWZ1bmN0aW9uIEQ5KG4sdCl7cmV0dXJuIEIyKHQpLmZpbHRlcihlPT4hbkUobixlKSl9dmFyIGlFPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1bXSx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9W10sdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsaWQ6bnVsbH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVsbH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXNhYmxlZDpudWxsfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZW5hYmxlZDpudWxsfWdldCBlcnJvcnMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH1nZXQgcHJpc3RpbmUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wcmlzdGluZTpudWxsfWdldCBkaXJ0eSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9Z2V0IHRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1czpudWxsfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH1nZXQgdmFsdWVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH1fc2V0VmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ejIodGhpcy5fcmF3VmFsaWRhdG9ycyl9X3NldEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dHx8W10sdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPVUyKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufHxudWxsfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm58fG51bGx9X3JlZ2lzdGVyT25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5wdXNoKHQpfV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldCh0KXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldCh0KX1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IodCxlKX1nZXRFcnJvcih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH19LFhvPWNsYXNzIGV4dGVuZHMgaUV7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX0sR3M9Y2xhc3MgZXh0ZW5kcyBpRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcGFyZW50PW51bGwsdGhpcy5uYW1lPW51bGwsdGhpcy52YWx1ZUFjY2Vzc29yPW51bGx9fSxWMj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jZD10fWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdldCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5zdWJtaXR0ZWR9fSxjRT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVjJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoR3MsMikpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm5nLXVudG91Y2hlZCIsaS5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGkuaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGkuaXNQcmlzdGluZSkoIm5nLWRpcnR5IixpLmlzRGlydHkpKCJuZy12YWxpZCIsaS5pc1ZhbGlkKSgibmctaW52YWxpZCIsaS5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixpLmlzUGVuZGluZyl9LGZlYXR1cmVzOltLZV19KSxufSkoKTtmdW5jdGlvbiBKOShuLHQpe3JldHVybiBuP2B3aXRoIG5hbWU6ICcke3R9J2A6YGF0IGluZGV4OiAke3R9YH12YXIgSDI9ITEsWnY9IlZBTElEIixlRT0iSU5WQUxJRCIsX2c9IlBFTkRJTkciLEt2PSJESVNBQkxFRCI7ZnVuY3Rpb24gJDkobil7cmV0dXJuKGRFKG4pP24udmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBlcShuLHQpe3JldHVybihkRSh0KT90LmFzeW5jVmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBkRShuKXtyZXR1cm4gbnVsbCE9biYmIUFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2Ygbn12YXIgckU9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+e30sdGhpcy5fcGFyZW50PW51bGwsdGhpcy5wcmlzdGluZT0hMCx0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fb25EaXNhYmxlZENoYW5nZT1bXSx0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKHQpLHRoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhlKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm59c2V0IHZhbGlkYXRvcih0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49dH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufXNldCBhc3luY1ZhbGlkYXRvcih0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPXR9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09WnZ9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1lRX1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLnN0YXR1cz09X2d9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09S3Z9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXMhPT1Ldn1nZXQgZGlydHkoKXtyZXR1cm4hdGhpcy5wcmlzdGluZX1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIXRoaXMudG91Y2hlZH1nZXQgdXBkYXRlT24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9c2V0VmFsaWRhdG9ycyh0KXt0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKHQpfXNldEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnModCl9YWRkVmFsaWRhdG9ycyh0KXt0aGlzLnNldFZhbGlkYXRvcnMoVDkodCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9YWRkQXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKFQ5KHQsdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSl9cmVtb3ZlVmFsaWRhdG9ycyh0KXt0aGlzLnNldFZhbGlkYXRvcnMoRDkodCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9cmVtb3ZlQXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKEQ5KHQsdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSl9aGFzVmFsaWRhdG9yKHQpe3JldHVybiBuRSh0aGlzLl9yYXdWYWxpZGF0b3JzLHQpfWhhc0FzeW5jVmFsaWRhdG9yKHQpe3JldHVybiBuRSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMsdCl9Y2xlYXJWYWxpZGF0b3JzKCl7dGhpcy52YWxpZGF0b3I9bnVsbH1jbGVhckFzeW5jVmFsaWRhdG9ycygpe3RoaXMuYXN5bmNWYWxpZGF0b3I9bnVsbH1tYXJrQXNUb3VjaGVkKHQ9e30pe3RoaXMudG91Y2hlZD0hMCx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzVG91Y2hlZCh0KX1tYXJrQWxsQXNUb3VjaGVkKCl7dGhpcy5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjohMH0pLHRoaXMuX2ZvckVhY2hDaGlsZCh0PT50Lm1hcmtBbGxBc1RvdWNoZWQoKSl9bWFya0FzVW50b3VjaGVkKHQ9e30pe3RoaXMudG91Y2hlZD0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoZT0+e2UubWFya0FzVW50b3VjaGVkKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfW1hcmtBc0RpcnR5KHQ9e30pe3RoaXMucHJpc3RpbmU9ITEsdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc0RpcnR5KHQpfW1hcmtBc1ByaXN0aW5lKHQ9e30pe3RoaXMucHJpc3RpbmU9ITAsdGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2ZvckVhY2hDaGlsZChlPT57ZS5tYXJrQXNQcmlzdGluZSh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9bWFya0FzUGVuZGluZyh0PXt9KXt0aGlzLnN0YXR1cz1fZywhMSE9PXQuZW1pdEV2ZW50JiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1BlbmRpbmcodCl9ZGlzYWJsZSh0PXt9KXtsZXQgZT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eSh0Lm9ubHlTZWxmKTt0aGlzLnN0YXR1cz1Ldix0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChpPT57aS5kaXNhYmxlKHsuLi50LG9ubHlTZWxmOiEwfSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi50LHNraXBQcmlzdGluZUNoZWNrOmV9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goaT0+aSghMCkpfWVuYWJsZSh0PXt9KXtsZXQgZT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eSh0Lm9ubHlTZWxmKTt0aGlzLnN0YXR1cz1adix0aGlzLl9mb3JFYWNoQ2hpbGQoaT0+e2kuZW5hYmxlKHsuLi50LG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4udCxza2lwUHJpc3RpbmVDaGVjazplfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGk9PmkoITEpKX1fdXBkYXRlQW5jZXN0b3JzKHQpe3RoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KSx0LnNraXBQcmlzdGluZUNoZWNrfHx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudCh0KXt0aGlzLl9wYXJlbnQ9dH1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodD17fSl7dGhpcy5fc2V0SW5pdGlhbFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhpcy5zdGF0dXM9PT1adnx8dGhpcy5zdGF0dXM9PT1fZykmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKHQuZW1pdEV2ZW50KSksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KX1fdXBkYXRlVHJlZVZhbGlkaXR5KHQ9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZChlPT5lLl91cGRhdGVUcmVlVmFsaWRpdHkodCkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/S3Y6WnZ9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRvcih0aGlzKTpudWxsfV9ydW5Bc3luY1ZhbGlkYXRvcih0KXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz1fZyx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7bGV0IGU9RzkodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKGk9Pnt0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5zZXRFcnJvcnMoaSx7ZW1pdEV2ZW50OnR9KX0pfX1fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKXt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24mJih0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEpfXNldEVycm9ycyh0LGU9e30pe3RoaXMuZXJyb3JzPXQsdGhpcy5fdXBkYXRlQ29udHJvbHNFcnJvcnMoITEhPT1lLmVtaXRFdmVudCl9Z2V0KHQpe2xldCBlPXQ7cmV0dXJuIG51bGw9PWV8fChBcnJheS5pc0FycmF5KGUpfHwoZT1lLnNwbGl0KCIuIikpLDA9PT1lLmxlbmd0aCk/bnVsbDplLnJlZHVjZSgoaSxyKT0+aSYmaS5fZmluZChyKSx0aGlzKX1nZXRFcnJvcih0LGUpe2xldCBpPWU/dGhpcy5nZXQoZSk6dGhpcztyZXR1cm4gaSYmaS5lcnJvcnM/aS5lcnJvcnNbdF06bnVsbH1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5nZXRFcnJvcih0LGUpfWdldCByb290KCl7bGV0IHQ9dGhpcztmb3IoO3QuX3BhcmVudDspdD10Ll9wYXJlbnQ7cmV0dXJuIHR9X3VwZGF0ZUNvbnRyb2xzRXJyb3JzKHQpe3RoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLHQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnModCl9X2luaXRPYnNlcnZhYmxlcygpe3RoaXMudmFsdWVDaGFuZ2VzPW5ldyBGLHRoaXMuc3RhdHVzQ2hhbmdlcz1uZXcgRn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9Ldjp0aGlzLmVycm9ycz9lRTp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhfZyk/X2c6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGVFKT9lRTpadn1fYW55Q29udHJvbHNIYXZlU3RhdHVzKHQpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhlPT5lLnN0YXR1cz09PXQpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKHQ9PnQuZGlydHkpfV9hbnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUodD17fSl7dGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9X3VwZGF0ZVRvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh0KX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodCl7dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPXR9X3NldFVwZGF0ZVN0cmF0ZWd5KHQpe2RFKHQpJiZudWxsIT10LnVwZGF0ZU9uJiYodGhpcy5fdXBkYXRlT249dC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5KHQpe3JldHVybiF0JiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQuZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2ZpbmQodCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0LHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/ejIobik6bnx8bnVsbH0odGhpcy5fcmF3VmFsaWRhdG9ycyl9X2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheSh0KT90LnNsaWNlKCk6dCx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/VTIobik6bnx8bnVsbH0odGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX19LG9FPWNsYXNzIGV4dGVuZHMgckV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCQ5KGUpLGVxKGksZSkpLHRoaXMuY29udHJvbHM9dCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9cmVnaXN0ZXJDb250cm9sKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF0/dGhpcy5jb250cm9sc1t0XToodGhpcy5jb250cm9sc1t0XT1lLGUuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksZSl9YWRkQ29udHJvbCh0LGUsaT17fSl7dGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDppLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wodCxlPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9c2V0Q29udHJvbCh0LGUsaT17fSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSxlJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmkuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuY29udHJvbHNbdF0uZW5hYmxlZH1zZXRWYWx1ZSh0LGU9e30peyhmdW5jdGlvbihuLHQsZSl7bi5fZm9yRWFjaENoaWxkKChpLHIpPT57aWYodm9pZCAwPT09ZVtyXSl0aHJvdyBuZXcgeXQoMTAwMixIMj9mdW5jdGlvbihuLHQpe3JldHVybmBNdXN0IHN1cHBseSBhIHZhbHVlIGZvciBmb3JtIGNvbnRyb2wgJHtKOShuLHQpfWB9KHQscik6IiIpfSl9KSh0aGlzLCEwLHQpLE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+eyhmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5jb250cm9scztpZighKHQ/T2JqZWN0LmtleXMoaSk6aSkubGVuZ3RoKXRocm93IG5ldyB5dCgxZTMsSDI/ZnVuY3Rpb24obil7cmV0dXJuYFxuICAgIFRoZXJlIGFyZSBubyBmb3JtIGNvbnRyb2xzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzICR7bj8iZ3JvdXAiOiJhcnJheSJ9IHlldC4gSWYgeW91J3JlIHVzaW5nIG5nTW9kZWwsXG4gICAgeW91IG1heSB3YW50IHRvIGNoZWNrIG5leHQgdGljayAoZS5nLiB1c2Ugc2V0VGltZW91dCkuXG4gIGB9KHQpOiIiKTtpZighaVtlXSl0aHJvdyBuZXcgeXQoMTAwMSxIMj9mdW5jdGlvbihuLHQpe3JldHVybmBDYW5ub3QgZmluZCBmb3JtIGNvbnRyb2wgJHtKOShuLHQpfWB9KHQsZSk6IiIpfSkodGhpcywhMCxpKSx0aGlzLmNvbnRyb2xzW2ldLnNldFZhbHVlKHRbaV0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXtudWxsIT10JiYoT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57bGV0IHI9dGhpcy5jb250cm9sc1tpXTtyJiZyLnBhdGNoVmFsdWUodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSkpfXJlc2V0KHQ9e30sZT17fSl7dGhpcy5fZm9yRWFjaENoaWxkKChpLHIpPT57aS5yZXNldCh0W3JdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGUpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LCh0LGUsaSk9Pih0W2ldPWUuZ2V0UmF3VmFsdWUoKSx0KSl9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtsZXQgdD10aGlzLl9yZWR1Y2VDaGlsZHJlbighMSwoZSxpKT0+ISFpLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCl8fGUpO3JldHVybiB0JiZ0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwfSksdH1fZm9yRWFjaENoaWxkKHQpe09iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmZvckVhY2goZT0+e2xldCBpPXRoaXMuY29udHJvbHNbZV07aSYmdChpLGUpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQodD0+e3Quc2V0UGFyZW50KHRoaXMpLHQuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKHQpe2ZvcihsZXRbZSxpXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY29udHJvbHMpKWlmKHRoaXMuY29udGFpbnMoZSkmJnQoaSkpcmV0dXJuITA7cmV0dXJuITF9X3JlZHVjZVZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LChlLGkscik9PigoaS5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSYmKGVbcl09aS52YWx1ZSksZSkpfV9yZWR1Y2VDaGlsZHJlbih0LGUpe2xldCBpPXQ7cmV0dXJuIHRoaXMuX2ZvckVhY2hDaGlsZCgocixvKT0+e2k9ZShpLHIsbyl9KSxpfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7Zm9yKGxldCB0IG9mIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKWlmKHRoaXMuY29udHJvbHNbdF0uZW5hYmxlZClyZXR1cm4hMTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb250cm9scykubGVuZ3RoPjB8fHRoaXMuZGlzYWJsZWR9X2ZpbmQodCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCk/dGhpcy5jb250cm9sc1t0XTpudWxsfX0sRGY9bmV3IGllKCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmV5fSksZXk9ImFsd2F5cyI7ZnVuY3Rpb24gdUUobix0KXtyZXR1cm5bLi4udC5wYXRoLG5dfWZ1bmN0aW9uICR2KG4sdCxlPWV5KXtqMihuLHQpLHQudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKG4udmFsdWUpLChuLmRpc2FibGVkfHwiYWx3YXlzIj09PWUpJiZ0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZT8uKG4uZGlzYWJsZWQpLGZ1bmN0aW9uKG4sdCl7dC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZT0+e24uX3BlbmRpbmdWYWx1ZT1lLG4uX3BlbmRpbmdDaGFuZ2U9ITAsbi5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09bi51cGRhdGVPbiYmdHEobix0KX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9KGkscik9Pnt0LnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShpKSxyJiZ0LnZpZXdUb01vZGVsVXBkYXRlKGkpfTtuLnJlZ2lzdGVyT25DaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25DaGFuZ2UoZSl9KX0obix0KSxmdW5jdGlvbihuLHQpe3QudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e24uX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PW4udXBkYXRlT24mJm4uX3BlbmRpbmdDaGFuZ2UmJnRxKG4sdCksInN1Ym1pdCIhPT1uLnVwZGF0ZU9uJiZuLm1hcmtBc1RvdWNoZWQoKX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7aWYodC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUpe2xldCBlPWk9Pnt0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZShpKX07bi5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShlKX0pfX0obix0KX1mdW5jdGlvbiBzRShuLHQsZT0hMCl7bGV0IGk9KCk9Pnt9O3QudmFsdWVBY2Nlc3NvciYmKHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGkpLHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChpKSksbEUobix0KSxuJiYodC5faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCksbi5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSl9ZnVuY3Rpb24gYUUobix0KXtuLmZvckVhY2goZT0+e2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKHQpfSl9ZnVuY3Rpb24gajIobix0KXtsZXQgZT1aOShuKTtudWxsIT09dC52YWxpZGF0b3I/bi5zZXRWYWxpZGF0b3JzKEU5KGUsdC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmbi5zZXRWYWxpZGF0b3JzKFtlXSk7bGV0IGk9Szkobik7bnVsbCE9PXQuYXN5bmNWYWxpZGF0b3I/bi5zZXRBc3luY1ZhbGlkYXRvcnMoRTkoaSx0LmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJm4uc2V0QXN5bmNWYWxpZGF0b3JzKFtpXSk7bGV0IHI9KCk9Pm4udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO2FFKHQuX3Jhd1ZhbGlkYXRvcnMsciksYUUodC5fcmF3QXN5bmNWYWxpZGF0b3JzLHIpfWZ1bmN0aW9uIGxFKG4sdCl7bGV0IGU9ITE7aWYobnVsbCE9PW4pe2lmKG51bGwhPT10LnZhbGlkYXRvcil7bGV0IHI9Wjkobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQudmFsaWRhdG9yKTtvLmxlbmd0aCE9PXIubGVuZ3RoJiYoZT0hMCxuLnNldFZhbGlkYXRvcnMobykpfX1pZihudWxsIT09dC5hc3luY1ZhbGlkYXRvcil7bGV0IHI9Szkobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQuYXN5bmNWYWxpZGF0b3IpO28ubGVuZ3RoIT09ci5sZW5ndGgmJihlPSEwLG4uc2V0QXN5bmNWYWxpZGF0b3JzKG8pKX19fWxldCBpPSgpPT57fTtyZXR1cm4gYUUodC5fcmF3VmFsaWRhdG9ycyxpKSxhRSh0Ll9yYXdBc3luY1ZhbGlkYXRvcnMsaSksZX1mdW5jdGlvbiB0cShuLHQpe24uX3BlbmRpbmdEaXJ0eSYmbi5tYXJrQXNEaXJ0eSgpLG4uc2V0VmFsdWUobi5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSx0LnZpZXdUb01vZGVsVXBkYXRlKG4uX3BlbmRpbmdWYWx1ZSksbi5fcGVuZGluZ0NoYW5nZT0hMX1mdW5jdGlvbiBucShuLHQpe2oyKG4sdCl9ZnVuY3Rpb24gRzIobix0KXtpZighbi5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtsZXQgZT1uLm1vZGVsO3JldHVybiEhZS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXModCxlLmN1cnJlbnRWYWx1ZSl9ZnVuY3Rpb24gaXEobix0KXtuLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksdC5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2w7InN1Ym1pdCI9PT1pLnVwZGF0ZU9uJiZpLl9wZW5kaW5nQ2hhbmdlJiYoZS52aWV3VG9Nb2RlbFVwZGF0ZShpLl9wZW5kaW5nVmFsdWUpLGkuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9ZnVuY3Rpb24gVzIobix0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZSxpLHI7cmV0dXJuIEFycmF5LmlzQXJyYXkodCksdC5mb3JFYWNoKG89PntvLmNvbnN0cnVjdG9yPT09Ymc/ZT1vOmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5jb25zdHJ1Y3Rvcik9PT1UZn0obyk/aT1vOnI9b30pLHJ8fGl8fGV8fG51bGx9dmFyIFZ2ZT17cHJvdmlkZTpYbyx1c2VFeGlzdGluZzokbigoKT0+dmcpfSxKdj1Qcm9taXNlLnJlc29sdmUoKSx2Zz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWG97Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1yLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX2RpcmVjdGl2ZXM9bmV3IFNldCx0aGlzLm5nU3VibWl0PW5ldyBGLHRoaXMuZm9ybT1uZXcgb0Uoe30sejIoZSksVTIoaSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbHMoKXtyZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzfWFkZENvbnRyb2woZSl7SnYudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtlLmNvbnRyb2w9aS5yZWdpc3RlckNvbnRyb2woZS5uYW1lLGUuY29udHJvbCksJHYoZS5jb250cm9sLGUsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksZS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuX2RpcmVjdGl2ZXMuYWRkKGUpfSl9Z2V0Q29udHJvbChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXJlbW92ZUNvbnRyb2woZSl7SnYudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtpJiZpLnJlbW92ZUNvbnRyb2woZS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShlKX0pfWFkZEZvcm1Hcm91cChlKXtKdi50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpLHI9bmV3IG9FKHt9KTtucShyLGUpLGkucmVnaXN0ZXJDb250cm9sKGUubmFtZSxyKSxyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVtb3ZlRm9ybUdyb3VwKGUpe0p2LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCk7aSYmaS5yZW1vdmVDb250cm9sKGUubmFtZSl9KX1nZXRGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoZS5wYXRoKX11cGRhdGVNb2RlbChlLGkpe0p2LnRoZW4oKCk9Pnt0aGlzLmZvcm0uZ2V0KGUucGF0aCkuc2V0VmFsdWUoaSl9KX1zZXRWYWx1ZShlKXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZSl9b25TdWJtaXQoZSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGlxKHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoZSksImRpYWxvZyI9PT1lPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oZSl7dGhpcy5mb3JtLnJlc2V0KGUpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKGUpe3JldHVybiBlLnBvcCgpLGUubGVuZ3RoP3RoaXMuZm9ybS5nZXQoZSk6dGhpcy5mb3JtfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHdvLDEwKSxDKEh1LDEwKSxDKERmLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgic3VibWl0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN1Ym1pdChvKX0pKCJyZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2V0KCl9KX0saW5wdXRzOntvcHRpb25zOlsibmdGb3JtT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbUXQoW1Z2ZV0pLEtlXX0pLG59KSgpO2Z1bmN0aW9uIEk5KG4sdCl7bGV0IGU9bi5pbmRleE9mKHQpO2U+LTEmJm4uc3BsaWNlKGUsMSl9ZnVuY3Rpb24gQTkobil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09biYmMj09PU9iamVjdC5rZXlzKG4pLmxlbmd0aCYmInZhbHVlImluIG4mJiJkaXNhYmxlZCJpbiBufXZhciB0eT1jbGFzcyBleHRlbmRzIHJFe2NvbnN0cnVjdG9yKHQ9bnVsbCxlLGkpe3N1cGVyKCQ5KGUpLGVxKGksZSkpLHRoaXMuZGVmYXVsdFZhbHVlPW51bGwsdGhpcy5fb25DaGFuZ2U9W10sdGhpcy5fcGVuZGluZ0NoYW5nZT0hMSx0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KSxkRShlKSYmKGUubm9uTnVsbGFibGV8fGUuaW5pdGlhbFZhbHVlSXNEZWZhdWx0KSYmKHRoaXMuZGVmYXVsdFZhbHVlPUE5KHQpP3QudmFsdWU6dCl9c2V0VmFsdWUodCxlPXt9KXt0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10LHRoaXMuX29uQ2hhbmdlLmxlbmd0aCYmITEhPT1lLmVtaXRNb2RlbFRvVmlld0NoYW5nZSYmdGhpcy5fb25DaGFuZ2UuZm9yRWFjaChpPT5pKHRoaXMudmFsdWUsITEhPT1lLmVtaXRWaWV3VG9Nb2RlbENoYW5nZSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1wYXRjaFZhbHVlKHQsZT17fSl7dGhpcy5zZXRWYWx1ZSh0LGUpfXJlc2V0KHQ9dGhpcy5kZWZhdWx0VmFsdWUsZT17fSl7dGhpcy5fYXBwbHlGb3JtU3RhdGUodCksdGhpcy5tYXJrQXNQcmlzdGluZShlKSx0aGlzLm1hcmtBc1VudG91Y2hlZChlKSx0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUsZSksdGhpcy5fcGVuZGluZ0NoYW5nZT0hMX1fdXBkYXRlVmFsdWUoKXt9X2FueUNvbnRyb2xzKHQpe3JldHVybiExfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25DaGFuZ2UodCl7STkodGhpcy5fb25DaGFuZ2UsdCl9cmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKHQpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaCh0KX1fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7STkodGhpcy5fb25EaXNhYmxlZENoYW5nZSx0KX1fZm9yRWFjaENoaWxkKHQpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKHQpe0E5KHQpPyh0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10LnZhbHVlLHQuZGlzYWJsZWQ/dGhpcy5kaXNhYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KTp0aGlzLmVuYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSkpOnRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXR9fSxycT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWG97bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUdyb3VwKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUdyb3VwKHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtR3JvdXAodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdUUobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfV9jaGVja1BhcmVudFR5cGUoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixmZWF0dXJlczpbS2VdfSksbn0pKCksenZlPXtwcm92aWRlOlhvLHVzZUV4aXN0aW5nOiRuKCgpPT5VdmUpfSxVdmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJxe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpfV9jaGVja1BhcmVudFR5cGUoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoWG8sNSksQyh3bywxMCksQyhIdSwxMCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsR3JvdXAiLCIiXV0saW5wdXRzOntuYW1lOlsibmdNb2RlbEdyb3VwIiwibmFtZSJdfSxleHBvcnRBczpbIm5nTW9kZWxHcm91cCJdLGZlYXR1cmVzOltRdChbenZlXSksS2VdfSksbn0pKCksanZlPXtwcm92aWRlOkdzLHVzZUV4aXN0aW5nOiRuKCgpPT5xMil9LFI5PVByb21pc2UucmVzb2x2ZSgpLHEyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBHc3tjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9YSx0aGlzLmNvbnRyb2w9bmV3IHR5LHRoaXMuX3JlZ2lzdGVyZWQ9ITEsdGhpcy51cGRhdGU9bmV3IEYsdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMociksdGhpcy52YWx1ZUFjY2Vzc29yPVcyKDAsbyl9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5fY2hlY2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5hbWUiaW4gZSl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2ZSkpe2xldCBpPWUubmFtZS5wcmV2aW91c1ZhbHVlO3RoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHtuYW1lOmkscGF0aDp0aGlzLl9nZXRQYXRoKGkpfSl9dGhpcy5fc2V0VXBDb250cm9sKCl9ImlzRGlzYWJsZWQiaW4gZSYmdGhpcy5fdXBkYXRlRGlzYWJsZWQoZSksRzIoZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9pc1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5jb250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpeyR2KHRoaXMuY29udHJvbCx0aGlzLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hlY2tGb3JFcnJvcnMoKXt0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9X2NoZWNrUGFyZW50VHlwZSgpe31fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl9X3VwZGF0ZVZhbHVlKGUpe1I5LnRoZW4oKCk9Pnt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZSx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X3VwZGF0ZURpc2FibGVkKGUpe2xldCBpPWUuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUscj0wIT09aSYmJE0oaSk7UjkudGhlbigoKT0+e3ImJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohciYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoZSl7cmV0dXJuIHRoaXMuX3BhcmVudD91RShlLHRoaXMuX3BhcmVudCk6W2VdfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFhvLDkpLEMod28sMTApLEMoSHUsMTApLEMoTW8sMTApLEMoJHQsOCksQyhEZiw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFtZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1lOiJuYW1lIixpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOlsibmdNb2RlbE9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOltRdChbanZlXSksS2UsR3RdfSksbn0pKCksR3ZlPXtwcm92aWRlOk1vLHVzZUV4aXN0aW5nOiRuKCgpPT5ZMiksbXVsdGk6ITB9LFkyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZnt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixlPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntlKCIiPT1pP251bGw6cGFyc2VGbG9hdChpKSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W1F0KFtHdmVdKSxLZV19KSxufSkoKSxXdmU9e3Byb3ZpZGU6TW8sdXNlRXhpc3Rpbmc6JG4oKCk9Pll2ZSksbXVsdGk6ITB9LG9xPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxxdmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1bXX1hZGQoZSxpKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbZSxpXSl9cmVtb3ZlKGUpe2ZvcihsZXQgaT10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7aT49MDstLWkpaWYodGhpcy5fYWNjZXNzb3JzW2ldWzFdPT09ZSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGksMSl9c2VsZWN0KGUpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGk9Pnt0aGlzLl9pc1NhbWVHcm91cChpLGUpJiZpWzFdIT09ZSYmaVsxXS5maXJlVW5jaGVjayhlLnZhbHVlKX0pfV9pc1NhbWVHcm91cChlLGkpe3JldHVybiEhZVswXS5jb250cm9sJiZlWzBdLl9wYXJlbnQ9PT1pLl9jb250cm9sLl9wYXJlbnQmJmVbMV0ubmFtZT09PWkubmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46b3F9KSxufSkoKSxZdmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFRme2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSksdGhpcy5fcmVnaXN0cnk9cix0aGlzLl9pbmplY3Rvcj1vLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9YWkoRGYse29wdGlvbmFsOiEwfSk/P2V5fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQoR3MpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoZSl7dGhpcy5fc3RhdGU9ZT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fZm49ZSx0aGlzLm9uQ2hhbmdlPSgpPT57ZSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2FibGVkU3RhdGUoZSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkfHxlfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGUpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZpcmVVbmNoZWNrKGUpe3RoaXMud3JpdGVWYWx1ZShlKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKG1jKSxDKE1lKSxDKHF2ZSksQyhNaSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2hhbmdlKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e25hbWU6Im5hbWUiLGZvcm1Db250cm9sTmFtZToiZm9ybUNvbnRyb2xOYW1lIix2YWx1ZToidmFsdWUifSxmZWF0dXJlczpbUXQoW1d2ZV0pLEtlXX0pLG59KSgpLFh2ZT17cHJvdmlkZTpNbyx1c2VFeGlzdGluZzokbigoKT0+UXZlKSxtdWx0aTohMH0sUXZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZnt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixwYXJzZUZsb2F0KGUpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9aT0+e2UoIiI9PWk/bnVsbDpwYXJzZUZsb2F0KGkpKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbUXQoW1h2ZV0pLEtlXX0pLG59KSgpLFgyPW5ldyBpZSgiTmdNb2RlbFdpdGhGb3JtQ29udHJvbFdhcm5pbmciKSxadmU9e3Byb3ZpZGU6R3MsdXNlRXhpc3Rpbmc6JG4oKCk9PlEyKX0sUTI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEdze3NldCBpc0Rpc2FibGVkKGUpe31jb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWc9byx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPXMsdGhpcy51cGRhdGU9bmV3IEYsdGhpcy5fbmdNb2RlbFdhcm5pbmdTZW50PSExLHRoaXMuX3NldFZhbGlkYXRvcnMoZSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKGkpLHRoaXMudmFsdWVBY2Nlc3Nvcj1XMigwLHIpfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2lzQ29udHJvbENoYW5nZWQoZSkpe2xldCBpPWUuZm9ybS5wcmV2aW91c1ZhbHVlO2kmJnNFKGksdGhpcywhMSksJHYodGhpcy5mb3JtLHRoaXMsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksdGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfUcyKGUsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5mb3JtLnNldFZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtJiZzRSh0aGlzLmZvcm0sdGhpcywhMSl9Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfV9pc0NvbnRyb2xDaGFuZ2VkKGUpe3JldHVybiBlLmhhc093blByb3BlcnR5KCJmb3JtIil9fXJldHVybiBuLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh3bywxMCksQyhIdSwxMCksQyhNbywxMCksQyhYMiw4KSxDKERmLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntmb3JtOlsiZm9ybUNvbnRyb2wiLCJmb3JtIl0saXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W1F0KFtadmVdKSxLZSxHdF19KSxufSkoKSxLdmU9e3Byb3ZpZGU6WG8sdXNlRXhpc3Rpbmc6JG4oKCk9PnlnKX0seWc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFhve2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9cix0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9PnRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5kaXJlY3RpdmVzPVtdLHRoaXMuZm9ybT1udWxsLHRoaXMubmdTdWJtaXQ9bmV3IEYsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSl9bmdPbkNoYW5nZXMoZSl7dGhpcy5fY2hlY2tGb3JtUHJlc2VudCgpLGUuaGFzT3duUHJvcGVydHkoImZvcm0iKSYmKHRoaXMuX3VwZGF0ZVZhbGlkYXRvcnMoKSx0aGlzLl91cGRhdGVEb21WYWx1ZSgpLHRoaXMuX3VwZGF0ZVJlZ2lzdHJhdGlvbnMoKSx0aGlzLl9vbGRGb3JtPXRoaXMuZm9ybSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm0mJihsRSh0aGlzLmZvcm0sdGhpcyksdGhpcy5mb3JtLl9vbkNvbGxlY3Rpb25DaGFuZ2U9PT10aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UmJnRoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1hZGRDb250cm9sKGUpe2xldCBpPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTtyZXR1cm4gJHYoaSxlLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5kaXJlY3RpdmVzLnB1c2goZSksaX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXtzRShlLmNvbnRyb2x8fG51bGwsZSwhMSksZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX0odGhpcy5kaXJlY3RpdmVzLGUpfWFkZEZvcm1Hcm91cChlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUdyb3VwKGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfWFkZEZvcm1BcnJheShlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUFycmF5KGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1BcnJheShlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUsaSl7dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCxpcSh0aGlzLmZvcm0sdGhpcy5kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoZSksImRpYWxvZyI9PT1lPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oZSl7dGhpcy5mb3JtLnJlc2V0KGUpLHRoaXMuc3VibWl0dGVkPSExfV91cGRhdGVEb21WYWx1ZSgpe3RoaXMuZGlyZWN0aXZlcy5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2wscj10aGlzLmZvcm0uZ2V0KGUucGF0aCk7aSE9PXImJihzRShpfHxudWxsLGUpLChuPT5uIGluc3RhbmNlb2YgdHkpKHIpJiYoJHYocixlLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGUuY29udHJvbD1yKSl9KSx0aGlzLmZvcm0uX3VwZGF0ZVRyZWVWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X3NldFVwRm9ybUNvbnRhaW5lcihlKXtsZXQgaT10aGlzLmZvcm0uZ2V0KGUucGF0aCk7bnEoaSxlKSxpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jbGVhblVwRm9ybUNvbnRhaW5lcihlKXtpZih0aGlzLmZvcm0pe2xldCBpPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTtpJiZmdW5jdGlvbihuLHQpe3JldHVybiBsRShuLHQpfShpLGUpJiZpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfX1fdXBkYXRlUmVnaXN0cmF0aW9ucygpe3RoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSx0aGlzLl9vbGRGb3JtJiZ0aGlzLl9vbGRGb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pfV91cGRhdGVWYWxpZGF0b3JzKCl7ajIodGhpcy5mb3JtLHRoaXMpLHRoaXMuX29sZEZvcm0mJmxFKHRoaXMuX29sZEZvcm0sdGhpcyl9X2NoZWNrRm9ybVByZXNlbnQoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMod28sMTApLEMoSHUsMTApLEMoRGYsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXAiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJzdWJtaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3VibWl0KG8pfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e2Zvcm06WyJmb3JtR3JvdXAiLCJmb3JtIl19LG91dHB1dHM6e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W1F0KFtLdmVdKSxLZSxHdF19KSxufSkoKSxKdmU9e3Byb3ZpZGU6WG8sdXNlRXhpc3Rpbmc6JG4oKCk9PnNxKX0sc3E9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJxe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpfV9jaGVja1BhcmVudFR5cGUoKXtscSh0aGlzLl9wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFhvLDEzKSxDKHdvLDEwKSxDKEh1LDEwKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUdyb3VwTmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6W1F0KFtKdmVdKSxLZV19KSxufSkoKSwkdmU9e3Byb3ZpZGU6WG8sdXNlRXhpc3Rpbmc6JG4oKCk9PmFxKX0sYXE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFhve2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpfW5nT25Jbml0KCl7dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5mb3JtRGlyZWN0aXZlLmFkZEZvcm1BcnJheSh0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUZvcm1BcnJheSh0aGlzKX1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuZ2V0Rm9ybUFycmF5KHRoaXMpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfWdldCBwYXRoKCl7cmV0dXJuIHVFKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1fY2hlY2tQYXJlbnRUeXBlKCl7bHEodGhpcy5fcGFyZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhYbywxMyksQyh3bywxMCksQyhIdSwxMCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQXJyYXlOYW1lIiwiIl1dLGlucHV0czp7bmFtZTpbImZvcm1BcnJheU5hbWUiLCJuYW1lIl19LGZlYXR1cmVzOltRdChbJHZlXSksS2VdfSksbn0pKCk7ZnVuY3Rpb24gbHEobil7cmV0dXJuIShuIGluc3RhbmNlb2Ygc3F8fG4gaW5zdGFuY2VvZiB5Z3x8biBpbnN0YW5jZW9mIGFxKX12YXIgZXllPXtwcm92aWRlOkdzLHVzZUV4aXN0aW5nOiRuKCgpPT50eWUpfSx0eWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEdze3NldCBpc0Rpc2FibGVkKGUpe31jb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWc9cyx0aGlzLl9hZGRlZD0hMSx0aGlzLnVwZGF0ZT1uZXcgRix0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMociksdGhpcy52YWx1ZUFjY2Vzc29yPVcyKDAsbyl9bmdPbkNoYW5nZXMoZSl7dGhpcy5fYWRkZWR8fHRoaXMuX3NldFVwQ29udHJvbCgpLEcyKGUsdGhpcy52aWV3TW9kZWwpJiYodGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCx0aGlzLmZvcm1EaXJlY3RpdmUudXBkYXRlTW9kZWwodGhpcyx0aGlzLm1vZGVsKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1nZXQgcGF0aCgpe3JldHVybiB1RShudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9X2NoZWNrUGFyZW50VHlwZSgpe31fc2V0VXBDb250cm9sKCl7dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5jb250cm9sPXRoaXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpLHRoaXMuX2FkZGVkPSEwfX1yZXR1cm4gbi5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoWG8sMTMpLEMod28sMTApLEMoSHUsMTApLEMoTW8sMTApLEMoWDIsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUNvbnRyb2xOYW1lIiwibmFtZSJdLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdfSxvdXRwdXRzOnt1cGRhdGU6Im5nTW9kZWxDaGFuZ2UifSxmZWF0dXJlczpbUXQoW2V5ZV0pLEtlLEd0XX0pLG59KSgpLG55ZT17cHJvdmlkZTpNbyx1c2VFeGlzdGluZzokbigoKT0+ZHEpLG11bHRpOiEwfTtmdW5jdGlvbiBjcShuLHQpe3JldHVybiBudWxsPT1uP2Ake3R9YDoodCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodD0iT2JqZWN0IiksYCR7bn06ICR7dH1gLnNsaWNlKDAsNTApKX12YXIgZHE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFRme2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGUpe3RoaXMuX2NvbXBhcmVXaXRoPWV9d3JpdGVWYWx1ZShlKXt0aGlzLnZhbHVlPWU7bGV0IHI9Y3EodGhpcy5fZ2V0T3B0aW9uSWQoZSksZSk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLHIpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57dGhpcy52YWx1ZT10aGlzLl9nZXRPcHRpb25WYWx1ZShpKSxlKHRoaXMudmFsdWUpfX1fcmVnaXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKGUpe2ZvcihsZXQgaSBvZiBBcnJheS5mcm9tKHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoaSksZSkpcmV0dXJuIGk7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGUpe2xldCBpPWZ1bmN0aW9uKG4pe3JldHVybiBuLnNwbGl0KCI6IilbMF19KGUpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGkpP3RoaXMuX29wdGlvbk1hcC5nZXQoaSk6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJmb3JtQ29udHJvbCIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsIm5nTW9kZWwiLCIiLDMsIm11bHRpcGxlIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltRdChbbnllXSksS2VdfSksbn0pKCksdXE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPWksdGhpcy5fc2VsZWN0PXIsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKCkpfXNldCBuZ1ZhbHVlKGUpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLnNldCh0aGlzLmlkLGUpLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShjcSh0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2V0RWxlbWVudFZhbHVlKGUpLHRoaXMuX3NlbGVjdCYmdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKX1fc2V0RWxlbWVudFZhbHVlKGUpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGUpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKG1jKSxDKGRxLDkpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KSxufSkoKSxyeWU9e3Byb3ZpZGU6TW8sdXNlRXhpc3Rpbmc6JG4oKCk9PnBxKSxtdWx0aTohMH07ZnVuY3Rpb24gUDkobix0KXtyZXR1cm4gbnVsbD09bj9gJHt0fWA6KCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9YCcke3R9J2ApLHQmJiJvYmplY3QiPT10eXBlb2YgdCYmKHQ9Ik9iamVjdCIpLGAke259OiAke3R9YC5zbGljZSgwLDUwKSl9dmFyIHBxPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChlKXt0aGlzLl9jb21wYXJlV2l0aD1lfXdyaXRlVmFsdWUoZSl7bGV0IGk7aWYodGhpcy52YWx1ZT1lLEFycmF5LmlzQXJyYXkoZSkpe2xldCByPWUubWFwKG89PnRoaXMuX2dldE9wdGlvbklkKG8pKTtpPShvLHMpPT57by5fc2V0U2VsZWN0ZWQoci5pbmRleE9mKHMudG9TdHJpbmcoKSk+LTEpfX1lbHNlIGk9KHIsbyk9PntyLl9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1hcC5mb3JFYWNoKGkpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57bGV0IHI9W10sbz1pLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1vKXtsZXQgcz1vO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXQgYz10aGlzLl9nZXRPcHRpb25WYWx1ZShzW2FdLnZhbHVlKTtyLnB1c2goYyl9fWVsc2V7bGV0IHM9aS5vcHRpb25zO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXQgbD1zW2FdO2lmKGwuc2VsZWN0ZWQpe2xldCBjPXRoaXMuX2dldE9wdGlvblZhbHVlKGwudmFsdWUpO3IucHVzaChjKX19fXRoaXMudmFsdWU9cixlKHIpfX1fcmVnaXN0ZXJPcHRpb24oZSl7bGV0IGk9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGksZSksaX1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGxldCBpIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChpKS5fdmFsdWUsZSkpcmV0dXJuIGk7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGUpe2xldCBpPWZ1bmN0aW9uKG4pe3JldHVybiBuLnNwbGl0KCI6IilbMF19KGUpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGkpP3RoaXMuX29wdGlvbk1hcC5nZXQoaSkuX3ZhbHVlOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbUXQoW3J5ZV0pLEtlXX0pLG59KSgpLGZxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9yZW5kZXJlcj1pLHRoaXMuX3NlbGVjdD1yLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbih0aGlzKSl9c2V0IG5nVmFsdWUoZSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fdmFsdWU9ZSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoUDkodGhpcy5pZCxlKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKGUpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9ZSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoUDkodGhpcy5pZCxlKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKGUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9X3NldFNlbGVjdGVkKGUpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLGUpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKG1jKSxDKHBxLDkpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KSxufSkoKTtmdW5jdGlvbiBtcShuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG4/bjpwYXJzZUludChuLDEwKX1mdW5jdGlvbiBocShuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG4/bjpwYXJzZUZsb2F0KG4pfXZhciBJZj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPXRFfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuaW5wdXROYW1lIGluIGUpe2xldCBpPXRoaXMubm9ybWFsaXplSW5wdXQoZVt0aGlzLmlucHV0TmFtZV0uY3VycmVudFZhbHVlKTt0aGlzLl9lbmFibGVkPXRoaXMuZW5hYmxlZChpKSx0aGlzLl92YWxpZGF0b3I9dGhpcy5fZW5hYmxlZD90aGlzLmNyZWF0ZVZhbGlkYXRvcihpKTp0RSx0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKX19dmFsaWRhdGUoZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRvcihlKX1yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGUpe3RoaXMuX29uQ2hhbmdlPWV9ZW5hYmxlZChlKXtyZXR1cm4gbnVsbCE9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sZmVhdHVyZXM6W0d0XX0pLG59KSgpLHN5ZT17cHJvdmlkZTp3byx1c2VFeGlzdGluZzokbigoKT0+YXllKSxtdWx0aTohMH0sYXllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1heCIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5ocShlKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5OOShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtYXgiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtYXgiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZCZSgibWF4IixpLl9lbmFibGVkP2kubWF4Om51bGwpfSxpbnB1dHM6e21heDoibWF4In0sZmVhdHVyZXM6W1F0KFtzeWVdKSxLZV19KSxufSkoKSxseWU9e3Byb3ZpZGU6d28sdXNlRXhpc3Rpbmc6JG4oKCk9PmN5ZSksbXVsdGk6ITB9LGN5ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSWZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJtaW4iLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+aHEoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+RjkoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmQmUoIm1pbiIsaS5fZW5hYmxlZD9pLm1pbjpudWxsKX0saW5wdXRzOnttaW46Im1pbiJ9LGZlYXR1cmVzOltRdChbbHllXSksS2VdfSksbn0pKCksZHllPXtwcm92aWRlOndvLHVzZUV4aXN0aW5nOiRuKCgpPT5ncSksbXVsdGk6ITB9LHV5ZT17cHJvdmlkZTp3byx1c2VFeGlzdGluZzokbigoKT0+WjIpLG11bHRpOiEwfSxncT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSWZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJyZXF1aXJlZCIsdGhpcy5ub3JtYWxpemVJbnB1dD0kTSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5MOX1lbmFibGVkKGUpe3JldHVybiBlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJyZXF1aXJlZCIsaS5fZW5hYmxlZD8iIjpudWxsKX0saW5wdXRzOntyZXF1aXJlZDoicmVxdWlyZWQifSxmZWF0dXJlczpbUXQoW2R5ZV0pLEtlXX0pLG59KSgpLFoyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBncXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+Qjl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmQmUoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxmZWF0dXJlczpbUXQoW3V5ZV0pLEtlXX0pLG59KSgpLHB5ZT17cHJvdmlkZTp3byx1c2VFeGlzdGluZzokbigoKT0+ZnllKSxtdWx0aTohMH0sZnllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9ImVtYWlsIix0aGlzLm5vcm1hbGl6ZUlucHV0PSRNLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PlY5fWVuYWJsZWQoZSl7cmV0dXJuIGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZW1haWwiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsImVtYWlsIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsImVtYWlsIiwiIiwibmdNb2RlbCIsIiJdXSxpbnB1dHM6e2VtYWlsOiJlbWFpbCJ9LGZlYXR1cmVzOltRdChbcHllXSksS2VdfSksbn0pKCksbXllPXtwcm92aWRlOndvLHVzZUV4aXN0aW5nOiRuKCgpPT5oeWUpLG11bHRpOiEwfSxoeWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIElme2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWlubGVuZ3RoIix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9Pm1xKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9Pkg5KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1pbmxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1pbmxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJtaW5sZW5ndGgiLGkuX2VuYWJsZWQ/aS5taW5sZW5ndGg6bnVsbCl9LGlucHV0czp7bWlubGVuZ3RoOiJtaW5sZW5ndGgifSxmZWF0dXJlczpbUXQoW215ZV0pLEtlXX0pLG59KSgpLGd5ZT17cHJvdmlkZTp3byx1c2VFeGlzdGluZzokbigoKT0+X3llKSxtdWx0aTohMH0sX3llPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1heGxlbmd0aCIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5tcShlKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT56OShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXhsZW5ndGgiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJtYXhsZW5ndGgiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZCZSgibWF4bGVuZ3RoIixpLl9lbmFibGVkP2kubWF4bGVuZ3RoOm51bGwpfSxpbnB1dHM6e21heGxlbmd0aDoibWF4bGVuZ3RoIn0sZmVhdHVyZXM6W1F0KFtneWVdKSxLZV19KSxufSkoKSxieWU9e3Byb3ZpZGU6d28sdXNlRXhpc3Rpbmc6JG4oKCk9PnZ5ZSksbXVsdGk6ITB9LHZ5ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSWZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJwYXR0ZXJuIix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9PmUsdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+VTkoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicGF0dGVybiIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwicGF0dGVybiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmQmUoInBhdHRlcm4iLGkuX2VuYWJsZWQ/aS5wYXR0ZXJuOm51bGwpfSxpbnB1dHM6e3BhdHRlcm46InBhdHRlcm4ifSxmZWF0dXJlczpbUXQoW2J5ZV0pLEtlXX0pLG59KSgpLF9xPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltvcV19KSxufSkoKSx4Zz0obmV3IHlsKCIxNS4yLjkiKSwoKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6RGYsdXNlVmFsdWU6ZS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/ZXl9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltfcV19KSxufSkoKSksYnE9KCgpPT57Y2xhc3MgbntzdGF0aWMgd2l0aENvbmZpZyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOlgyLHVzZVZhbHVlOmUud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOkRmLHVzZVZhbHVlOmUuY2FsbFNldERpc2FibGVkU3RhdGU/P2V5fV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbX3FdfSksbn0pKCkseXllPVsidHJpZ2dlciJdLHh5ZT1bInBhbmVsIl07ZnVuY3Rpb24gQ3llKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwxMCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksYnQoZS5wbGFjZWhvbGRlcil9fWZ1bmN0aW9uIE15ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMTQpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMik7digxKSxidChlLnRyaWdnZXJWYWx1ZSl9fWZ1bmN0aW9uIHd5ZShuLHQpezEmbiYmenQoMCwwLFsiKm5nU3dpdGNoQ2FzZSIsInRydWUiXSl9ZnVuY3Rpb24gU3llKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiwxMSksUygxLE15ZSwyLDEsInNwYW4iLDEyKSxTKDIsd3llLDEsMCwibmctY29udGVudCIsMTMpLGcoKSksMiZuJiYoXygibmdTd2l0Y2giLCEhdygpLmN1c3RvbVRyaWdnZXIpLHYoMiksXygibmdTd2l0Y2hDYXNlIiwhMCkpfWZ1bmN0aW9uIEV5ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtObigpLE9vKCksaCgwLCJkaXYiLDE1LDE2KSxJKCJAdHJhbnNmb3JtUGFuZWwuZG9uZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5uZXh0KHIudG9TdGF0ZSkpfSkoImtleWRvd24iLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLl9oYW5kbGVLZXlkb3duKHIpKX0pLHp0KDIsMSksZygpfWlmKDImbil7bGV0IGU9dygpO21iKCJtYXQtbWRjLXNlbGVjdC1wYW5lbCBtZGMtbWVudS1zdXJmYWNlIG1kYy1tZW51LXN1cmZhY2UtLW9wZW4gIixlLl9nZXRQYW5lbFRoZW1lKCksIiIpLF8oIm5nQ2xhc3MiLGUucGFuZWxDbGFzcykoIkB0cmFuc2Zvcm1QYW5lbCIsInNob3dpbmciKSxCZSgiaWQiLGUuaWQrIi1wYW5lbCIpKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsZS5tdWx0aXBsZSkoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixlLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCkpfX12YXIgVHllPVtbWyJtYXQtc2VsZWN0LXRyaWdnZXIiXV0sIioiXSxEeWU9WyJtYXQtc2VsZWN0LXRyaWdnZXIiLCIqIl0sSXllPXt0cmFuc2Zvcm1QYW5lbFdyYXA6X3IoInRyYW5zZm9ybVBhbmVsV3JhcCIsW2dpKCIqID0+IHZvaWQiLEpwKCJAdHJhbnNmb3JtUGFuZWwiLFtLcCgpXSx7b3B0aW9uYWw6ITB9KSldKSx0cmFuc2Zvcm1QYW5lbDpfcigidHJhbnNmb3JtUGFuZWwiLFt3aSgidm9pZCIscm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDEsIDAuOCkifSkpLGdpKCJ2b2lkID0+IHNob3dpbmciLENpKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIscm4oe29wYWNpdHk6MSx0cmFuc2Zvcm06InNjYWxlKDEsIDEpIn0pKSksZ2koIiogPT4gdm9pZCIsQ2koIjEwMG1zIGxpbmVhciIscm4oe29wYWNpdHk6MH0pKSldKX0sdnE9MCx5cT1uZXcgaWUoIm1hdC1zZWxlY3Qtc2Nyb2xsLXN0cmF0ZWd5IiksUnllPW5ldyBpZSgiTUFUX1NFTEVDVF9DT05GSUciKSxQeWU9e3Byb3ZpZGU6eXEsZGVwczpbemldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxPeWU9bmV3IGllKCJNYXRTZWxlY3RUcmlnZ2VyIiksa3llPXVzKGt1KHNvKEIxKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkscil7dGhpcy5fZWxlbWVudFJlZj1uLHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9aSx0aGlzLm5nQ29udHJvbD1yLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBJZX19KSkpKSxGeWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGt5ZXtnZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9mb2N1c2VkfHx0aGlzLl9wYW5lbE9wZW59Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLl9wbGFjZWhvbGRlcj1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoVWwucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9UnQoZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9UnQoZSl9Z2V0IGRpc2FibGVPcHRpb25DZW50ZXJpbmcoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZ31zZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyhlKXt0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPVJ0KGUpfWdldCBjb21wYXJlV2l0aCgpe3JldHVybiB0aGlzLl9jb21wYXJlV2l0aH1zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZSx0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7dGhpcy5fYXNzaWduVmFsdWUoZSkmJnRoaXMuX29uQ2hhbmdlKGUpfWdldCB0eXBlYWhlYWREZWJvdW5jZUludGVydmFsKCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWx9c2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoZSl7dGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbD1faShlKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV8fHRoaXMuX3VpZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiKXtzdXBlcihzLG8sbCxjLHUpLHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1hLHRoaXMuX3BhcmVudEZvcm1GaWVsZD1kLHRoaXMuX2xpdmVBbm5vdW5jZXI9bSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1iLHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0oTSx5KT0+TT09PXksdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrdnErKyx0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLl9kZXN0cm95PW5ldyBJZSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl92YWx1ZUlkPSJtYXQtc2VsZWN0LXZhbHVlLSIrdnErKyx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW09bmV3IEllLHRoaXMuX292ZXJsYXlQYW5lbENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5fZm9jdXNlZD0hMSx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtc2VsZWN0Iix0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPz8hMSx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXM9dGEoKCk9PntsZXQgTT10aGlzLm9wdGlvbnM7cmV0dXJuIE0/TS5jaGFuZ2VzLnBpcGUocW4oTSksSm4oKCk9PnRuKC4uLk0ubWFwKHk9Pnkub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFl0KDEpLEpuKCgpPT50aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpKX0pLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBGLHRoaXMuX29wZW5lZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKGtlKE09Pk0pLE4oKCk9Pnt9KSksdGhpcy5fY2xvc2VkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoa2UoTT0+IU0pLE4oKCk9Pnt9KSksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEYsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRix0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyksbnVsbCE9Yj8udHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9Yi50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9Zix0aGlzLl9zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHApfHwwLHRoaXMuaWQ9dGhpcy5pZH1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBkZyh0aGlzLm11bHRpcGxlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksdGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nU3RyZWFtLnBpcGUoWW4oKSxvdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT50aGlzLl9wYW5lbERvbmVBbmltYXRpbmcodGhpcy5wYW5lbE9wZW4pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9pbml0S2V5TWFuYWdlcigpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShvdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGU9PntlLmFkZGVkLmZvckVhY2goaT0+aS5zZWxlY3QoKSksZS5yZW1vdmVkLmZvckVhY2goaT0+aS5kZXNlbGVjdCgpKX0pLHRoaXMub3B0aW9ucy5jaGFuZ2VzLnBpcGUocW4obnVsbCksb3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Jlc2V0T3B0aW9ucygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX0pfW5nRG9DaGVjaygpe2xldCBlPXRoaXMuX2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpLGk9dGhpcy5uZ0NvbnRyb2w7aWYoZSE9PXRoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeSl7bGV0IHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeT1lLGU/ci5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZSk6ci5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpfWkmJih0aGlzLl9wcmV2aW91c0NvbnRyb2whPT1pLmNvbnRyb2wmJih2b2lkIDAhPT10aGlzLl9wcmV2aW91c0NvbnRyb2wmJm51bGwhPT1pLmRpc2FibGVkJiZpLmRpc2FibGVkIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuZGlzYWJsZWQ9aS5kaXNhYmxlZCksdGhpcy5fcHJldmlvdXNDb250cm9sPWkuY29udHJvbCksdGhpcy51cGRhdGVFcnJvclN0YXRlKCkpfW5nT25DaGFuZ2VzKGUpeyhlLmRpc2FibGVkfHxlLnVzZXJBcmlhRGVzY3JpYmVkQnkpJiZ0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksZS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fZGVzdHJveS5uZXh0KCksdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpLHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9dG9nZ2xlKCl7dGhpcy5wYW5lbE9wZW4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfW9wZW4oKXt0aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wYW5lbE9wZW49ITAsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKG51bGwpLHRoaXMuX2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Y2xvc2UoKXt0aGlzLl9wYW5lbE9wZW4mJih0aGlzLl9wYW5lbE9wZW49ITEsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX29uVG91Y2hlZCgpKX13cml0ZVZhbHVlKGUpe3RoaXMuX2Fzc2lnblZhbHVlKGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9wYW5lbE9wZW59Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkfHxbXTp0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF19Z2V0IHRyaWdnZXJWYWx1ZSgpe2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI7aWYodGhpcy5fbXVsdGlwbGUpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLm1hcChpPT5pLnZpZXdWYWx1ZSk7cmV0dXJuIHRoaXMuX2lzUnRsKCkmJmUucmV2ZXJzZSgpLGUuam9pbigiLCAiKX1yZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0udmlld1ZhbHVlfV9pc1J0bCgpe3JldHVybiEhdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZX1faGFuZGxlS2V5ZG93bihlKXt0aGlzLmRpc2FibGVkfHwodGhpcy5wYW5lbE9wZW4/dGhpcy5faGFuZGxlT3BlbktleWRvd24oZSk6dGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihlKSl9X2hhbmRsZUNsb3NlZEtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9NDA9PT1pfHwzOD09PWl8fDM3PT09aXx8Mzk9PT1pLG89MTM9PT1pfHwzMj09PWkscz10aGlzLl9rZXlNYW5hZ2VyO2lmKCFzLmlzVHlwaW5nKCkmJm8mJiF2cihlKXx8KHRoaXMubXVsdGlwbGV8fGUuYWx0S2V5KSYmcillLnByZXZlbnREZWZhdWx0KCksdGhpcy5vcGVuKCk7ZWxzZSBpZighdGhpcy5tdWx0aXBsZSl7bGV0IGE9dGhpcy5zZWxlY3RlZDtzLm9uS2V5ZG93bihlKTtsZXQgbD10aGlzLnNlbGVjdGVkO2wmJmEhPT1sJiZ0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKGwudmlld1ZhbHVlLDFlNCl9fV9oYW5kbGVPcGVuS2V5ZG93bihlKXtsZXQgaT10aGlzLl9rZXlNYW5hZ2VyLHI9ZS5rZXlDb2RlLG89NDA9PT1yfHwzOD09PXIscz1pLmlzVHlwaW5nKCk7aWYobyYmZS5hbHRLZXkpZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKTtlbHNlIGlmKHN8fDEzIT09ciYmMzIhPT1yfHwhaS5hY3RpdmVJdGVtfHx2cihlKSlpZighcyYmdGhpcy5fbXVsdGlwbGUmJjY1PT09ciYmZS5jdHJsS2V5KXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGE9dGhpcy5vcHRpb25zLnNvbWUobD0+IWwuZGlzYWJsZWQmJiFsLnNlbGVjdGVkKTt0aGlzLm9wdGlvbnMuZm9yRWFjaChsPT57bC5kaXNhYmxlZHx8KGE/bC5zZWxlY3QoKTpsLmRlc2VsZWN0KCkpfSl9ZWxzZXtsZXQgYT1pLmFjdGl2ZUl0ZW1JbmRleDtpLm9uS2V5ZG93bihlKSx0aGlzLl9tdWx0aXBsZSYmbyYmZS5zaGlmdEtleSYmaS5hY3RpdmVJdGVtJiZpLmFjdGl2ZUl0ZW1JbmRleCE9PWEmJmkuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1lbHNlIGUucHJldmVudERlZmF1bHQoKSxpLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9X29uRm9jdXMoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fZm9jdXNlZD0hMCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkJsdXIoKXt0aGlzLl9mb2N1c2VkPSExLHRoaXMuX2tleU1hbmFnZXI/LmNhbmNlbFR5cGVhaGVhZCgpLCF0aGlzLmRpc2FibGVkJiYhdGhpcy5wYW5lbE9wZW4mJih0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkF0dGFjaGVkKCl7dGhpcy5fb3ZlcmxheURpci5wb3NpdGlvbkNoYW5nZS5waXBlKFl0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fcG9zaXRpb25pbmdTZXR0bGVkKCl9KX1fZ2V0UGFuZWxUaGVtZSgpe3JldHVybiB0aGlzLl9wYXJlbnRGb3JtRmllbGQ/YG1hdC0ke3RoaXMuX3BhcmVudEZvcm1GaWVsZC5jb2xvcn1gOiIifWdldCBlbXB0eSgpe3JldHVybiF0aGlzLl9zZWxlY3Rpb25Nb2RlbHx8dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpfV9pbml0aWFsaXplU2VsZWN0aW9uKCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMubmdDb250cm9sJiYodGhpcy5fdmFsdWU9dGhpcy5uZ0NvbnRyb2wudmFsdWUpLHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5fdmFsdWUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpe2lmKHRoaXMub3B0aW9ucy5mb3JFYWNoKGk9Pmkuc2V0SW5hY3RpdmVTdHlsZXMoKSksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLm11bHRpcGxlJiZlKUFycmF5LmlzQXJyYXkoZSksZS5mb3JFYWNoKGk9PnRoaXMuX3NlbGVjdE9wdGlvbkJ5VmFsdWUoaSkpLHRoaXMuX3NvcnRWYWx1ZXMoKTtlbHNle2xldCBpPXRoaXMuX3NlbGVjdE9wdGlvbkJ5VmFsdWUoZSk7aT90aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oaSk6dGhpcy5wYW5lbE9wZW58fHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSgtMSl9dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X3NlbGVjdE9wdGlvbkJ5VmFsdWUoZSl7bGV0IGk9dGhpcy5vcHRpb25zLmZpbmQocj0+e2lmKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQocikpcmV0dXJuITE7dHJ5e3JldHVybiBudWxsIT1yLnZhbHVlJiZ0aGlzLl9jb21wYXJlV2l0aChyLnZhbHVlLGUpfWNhdGNoe3JldHVybiExfX0pO3JldHVybiBpJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaSksaX1fYXNzaWduVmFsdWUoZSl7cmV0dXJuISEoZSE9PXRoaXMuX3ZhbHVlfHx0aGlzLl9tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShlKSkmJih0aGlzLm9wdGlvbnMmJnRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy5fdmFsdWU9ZSwhMCl9X2luaXRLZXlNYW5hZ2VyKCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgb2codGhpcy5vcHRpb25zKS53aXRoVHlwZUFoZWFkKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKCkud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9pc1J0bCgpPyJydGwiOiJsdHIiKS53aXRoSG9tZUFuZEVuZCgpLndpdGhQYWdlVXBEb3duKCkud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWyJzaGlmdEtleSJdKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmKCF0aGlzLm11bHRpcGxlJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLmZvY3VzKCksdGhpcy5jbG9zZSgpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX3BhbmVsT3BlbiYmdGhpcy5wYW5lbD90aGlzLl9zY3JvbGxPcHRpb25JbnRvVmlldyh0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCk6IXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfSl9X3Jlc2V0T3B0aW9ucygpe2xldCBlPXRuKHRoaXMub3B0aW9ucy5jaGFuZ2VzLHRoaXMuX2Rlc3Ryb3kpO3RoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcy5waXBlKG90KGUpKS5zdWJzY3JpYmUoaT0+e3RoaXMuX29uU2VsZWN0KGkuc291cmNlLGkuaXNVc2VySW5wdXQpLGkuaXNVc2VySW5wdXQmJiF0aGlzLm11bHRpcGxlJiZ0aGlzLl9wYW5lbE9wZW4mJih0aGlzLmNsb3NlKCksdGhpcy5mb2N1cygpKX0pLHRuKC4uLnRoaXMub3B0aW9ucy5tYXAoaT0+aS5fc3RhdGVDaGFuZ2VzKSkucGlwZShvdChlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9vblNlbGVjdChlLGkpe2xldCByPXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoZSk7bnVsbCE9ZS52YWx1ZXx8dGhpcy5fbXVsdGlwbGU/KHIhPT1lLnNlbGVjdGVkJiYoZS5zZWxlY3RlZD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZSkpLGkmJnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShlKSx0aGlzLm11bHRpcGxlJiYodGhpcy5fc29ydFZhbHVlcygpLGkmJnRoaXMuZm9jdXMoKSkpOihlLmRlc2VsZWN0KCksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSxudWxsIT10aGlzLnZhbHVlJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKGUudmFsdWUpKSxyIT09dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKSYmdGhpcy5fcHJvcGFnYXRlQ2hhbmdlcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1fc29ydFZhbHVlcygpe2lmKHRoaXMubXVsdGlwbGUpe2xldCBlPXRoaXMub3B0aW9ucy50b0FycmF5KCk7dGhpcy5fc2VsZWN0aW9uTW9kZWwuc29ydCgoaSxyKT0+dGhpcy5zb3J0Q29tcGFyYXRvcj90aGlzLnNvcnRDb21wYXJhdG9yKGkscixlKTplLmluZGV4T2YoaSktZS5pbmRleE9mKHIpKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9fV9wcm9wYWdhdGVDaGFuZ2VzKGUpe2xldCBpPW51bGw7aT10aGlzLm11bHRpcGxlP3RoaXMuc2VsZWN0ZWQubWFwKHI9PnIudmFsdWUpOnRoaXMuc2VsZWN0ZWQ/dGhpcy5zZWxlY3RlZC52YWx1ZTplLHRoaXMuX3ZhbHVlPWksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGkpLHRoaXMuX29uQ2hhbmdlKGkpLHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5fZ2V0Q2hhbmdlRXZlbnQoaSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9oaWdobGlnaHRDb3JyZWN0T3B0aW9uKCl7dGhpcy5fa2V5TWFuYWdlciYmKHRoaXMuZW1wdHk/dGhpcy5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0pKX1fY2FuT3Blbigpe3JldHVybiF0aGlzLl9wYW5lbE9wZW4mJiF0aGlzLmRpc2FibGVkJiZ0aGlzLm9wdGlvbnM/Lmxlbmd0aD4wfWZvY3VzKGUpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpe2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2xldCBlPXRoaXMuX3BhcmVudEZvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpO3JldHVybiB0aGlzLmFyaWFMYWJlbGxlZGJ5PyhlP2UrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OmV9X2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCl7cmV0dXJuIHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLmlkOm51bGx9X2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpe2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2xldCBlPXRoaXMuX3BhcmVudEZvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpLGk9KGU/ZSsiICI6IiIpK3RoaXMuX3ZhbHVlSWQ7cmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkYnkmJihpKz0iICIrdGhpcy5hcmlhTGFiZWxsZWRieSksaX1fcGFuZWxEb25lQW5pbWF0aW5nKGUpe3RoaXMub3BlbmVkQ2hhbmdlLmVtaXQoZSl9c2V0RGVzY3JpYmVkQnlJZHMoZSl7ZS5sZW5ndGg/dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZS5qb2luKCIgIikpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiKX1vbkNvbnRhaW5lckNsaWNrKCl7dGhpcy5mb2N1cygpLHRoaXMub3BlbigpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX3BhbmVsT3Blbnx8IXRoaXMuZW1wdHl8fHRoaXMuX2ZvY3VzZWQmJiEhdGhpcy5fcGxhY2Vob2xkZXJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoanMpLEMoJHQpLEMoYXQpLEMoSDEpLEMoTWUpLEMoWGksOCksQyh2Zyw4KSxDKHlnLDgpLEMoU2YsOCksQyhHcywxMCkseW8oInRhYmluZGV4IiksQyh5cSksQyhWdiksQyhSeWUsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEdlKHl5ZSw1KSxHZSh4eWUsNSksR2UoQnUsNSkpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkudHJpZ2dlcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5wYW5lbD1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5fb3ZlcmxheURpcj1yLmZpcnN0KX19LGlucHV0czp7dXNlckFyaWFEZXNjcmliZWRCeTpbImFyaWEtZGVzY3JpYmVkYnkiLCJ1c2VyQXJpYURlc2NyaWJlZEJ5Il0scGFuZWxDbGFzczoicGFuZWxDbGFzcyIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixyZXF1aXJlZDoicmVxdWlyZWQiLG11bHRpcGxlOiJtdWx0aXBsZSIsZGlzYWJsZU9wdGlvbkNlbnRlcmluZzoiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsY29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIix2YWx1ZToidmFsdWUiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sZXJyb3JTdGF0ZU1hdGNoZXI6ImVycm9yU3RhdGVNYXRjaGVyIix0eXBlYWhlYWREZWJvdW5jZUludGVydmFsOiJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIixzb3J0Q29tcGFyYXRvcjoic29ydENvbXBhcmF0b3IiLGlkOiJpZCJ9LG91dHB1dHM6e29wZW5lZENoYW5nZToib3BlbmVkQ2hhbmdlIixfb3BlbmVkU3RyZWFtOiJvcGVuZWQiLF9jbG9zZWRTdHJlYW06ImNsb3NlZCIsc2VsZWN0aW9uQ2hhbmdlOiJzZWxlY3Rpb25DaGFuZ2UiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltLZSxHdF19KSxufSkoKSx6dT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRnlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9wb3NpdGlvbnM9W3tvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJ0b3AifSx7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOiJtYXQtbWRjLXNlbGVjdC1wYW5lbC1hYm92ZSJ9XSx0aGlzLl9oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPz8hMX1nZXQgc2hvdWxkTGFiZWxGbG9hdCgpe3JldHVybiB0aGlzLnBhbmVsT3Blbnx8IXRoaXMuZW1wdHl8fHRoaXMuZm9jdXNlZCYmISF0aGlzLnBsYWNlaG9sZGVyfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMucGFuZWxPcGVuJiYodGhpcy5fb3ZlcmxheVdpZHRoPXRoaXMuX2dldE92ZXJsYXlXaWR0aCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSl9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9wYXJlbnRGb3JtRmllbGQmJih0aGlzLl9wcmVmZXJyZWRPdmVybGF5T3JpZ2luPXRoaXMuX3BhcmVudEZvcm1GaWVsZC5nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCkpfW9wZW4oKXt0aGlzLl9vdmVybGF5V2lkdGg9dGhpcy5fZ2V0T3ZlcmxheVdpZHRoKCksc3VwZXIub3BlbigpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1jbG9zZSgpe3N1cGVyLmNsb3NlKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9zY3JvbGxPcHRpb25JbnRvVmlldyhlKXtsZXQgaT10aGlzLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKGkpe2xldCByPXRoaXMucGFuZWwubmF0aXZlRWxlbWVudCxvPXoxKGUsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxzPWkuX2dldEhvc3RFbGVtZW50KCk7ci5zY3JvbGxUb3A9MD09PWUmJjE9PT1vPzA6VTEocy5vZmZzZXRUb3Ascy5vZmZzZXRIZWlnaHQsci5zY3JvbGxUb3Asci5vZmZzZXRIZWlnaHQpfX1fcG9zaXRpb25pbmdTZXR0bGVkKCl7dGhpcy5fc2Nyb2xsT3B0aW9uSW50b1ZpZXcodGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXh8fDApfV9nZXRDaGFuZ2VFdmVudChlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSh0aGlzLGUpfV9nZXRPdmVybGF5V2lkdGgoKXtyZXR1cm4odGhpcy5fcHJlZmVycmVkT3ZlcmxheU9yaWdpbiBpbnN0YW5jZW9mIHdkP3RoaXMuX3ByZWZlcnJlZE92ZXJsYXlPcmlnaW4uZWxlbWVudFJlZjp0aGlzLl9wcmVmZXJyZWRPdmVybGF5T3JpZ2lufHx0aGlzLl9lbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofWdldCBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yKCl7cmV0dXJuIHRoaXMuX2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3J9c2V0IGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IoZSl7dGhpcy5faGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcj1SdChlKSx0aGlzLl9zeW5jUGFyZW50UHJvcGVydGllcygpfV9zeW5jUGFyZW50UHJvcGVydGllcygpe2lmKHRoaXMub3B0aW9ucylmb3IobGV0IGUgb2YgdGhpcy5vcHRpb25zKWUuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNlbGVjdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoVGkocixPeWUsNSksVGkocixVcyw1KSxUaShyLFV2LDUpKSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLmN1c3RvbVRyaWdnZXI9by5maXJzdCksU2Uobz1FZSgpKSYmKGkub3B0aW9ucz1vKSxTZShvPUVlKCkpJiYoaS5vcHRpb25Hcm91cHM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSIsIm5vbmUiLCJhcmlhLWhhc3BvcHVwIiwibGlzdGJveCIsMSwibWF0LW1kYy1zZWxlY3QiXSxob3N0VmFyczoxOSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVLZXlkb3duKG8pfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25CbHVyKCl9KSwyJmUmJihCZSgiaWQiLGkuaWQpKCJ0YWJpbmRleCIsaS50YWJJbmRleCkoImFyaWEtY29udHJvbHMiLGkucGFuZWxPcGVuP2kuaWQrIi1wYW5lbCI6bnVsbCkoImFyaWEtZXhwYW5kZWQiLGkucGFuZWxPcGVuKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLXJlcXVpcmVkIixpLnJlcXVpcmVkLnRvU3RyaW5nKCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJhcmlhLWludmFsaWQiLGkuZXJyb3JTdGF0ZSkoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsaS5fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKSksbnQoIm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LW1kYy1zZWxlY3QtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgibWF0LW1kYy1zZWxlY3QtcmVxdWlyZWQiLGkucmVxdWlyZWQpKCJtYXQtbWRjLXNlbGVjdC1lbXB0eSIsaS5lbXB0eSkoIm1hdC1tZGMtc2VsZWN0LW11bHRpcGxlIixpLm11bHRpcGxlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgiLGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I6ImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IifSxleHBvcnRBczpbIm1hdFNlbGVjdCJdLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6UXYsdXNlRXhpc3Rpbmc6bn0se3Byb3ZpZGU6enYsdXNlRXhpc3Rpbmc6bn1dKSxLZV0sbmdDb250ZW50U2VsZWN0b3JzOkR5ZSxkZWNsczoxMSx2YXJzOjExLGNvbnN0czpbWyJjZGstb3ZlcmxheS1vcmlnaW4iLCIiLDEsIm1hdC1tZGMtc2VsZWN0LXRyaWdnZXIiLDMsImNsaWNrIl0sWyJmYWxsYmFja092ZXJsYXlPcmlnaW4iLCJjZGtPdmVybGF5T3JpZ2luIiwidHJpZ2dlciIsIiJdLFsxLCJtYXQtbWRjLXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXIgbWF0LW1kYy1zZWxlY3QtbWluLWxpbmUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtbWRjLXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1tZGMtc2VsZWN0LWFycm93LXdyYXBwZXIiXSxbMSwibWF0LW1kYy1zZWxlY3QtYXJyb3ciXSxbInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJoZWlnaHQiLCIyNHB4IiwiZm9jdXNhYmxlIiwiZmFsc2UiXSxbImQiLCJNNyAxMGw1IDUgNS01eiJdLFsiY2RrLWNvbm5lY3RlZC1vdmVybGF5IiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsIiIsImNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcCIsIiIsImNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzIiwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AiLDMsImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCIsImJhY2tkcm9wQ2xpY2siLCJhdHRhY2giLCJkZXRhY2giXSxbMSwibWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtbWRjLXNlbGVjdC1taW4tbGluZSJdLFsxLCJtYXQtbWRjLXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJtYXQtbWRjLXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtbWRjLXNlbGVjdC1taW4tbGluZSJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihEbihUeWUpLGgoMCwiZGl2IiwwLDEpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZSgpfSksaCgzLCJkaXYiLDIpLFMoNCxDeWUsMiwxLCJzcGFuIiwzKSxTKDUsU3llLDMsMiwic3BhbiIsNCksZygpLGgoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpLE5uKCksaCg4LCJzdmciLDcpLFAoOSwicGF0aCIsOCksZygpKCkoKSgpLFMoMTAsRXllLDMsOSwibmctdGVtcGxhdGUiLDkpLEkoImJhY2tkcm9wQ2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xvc2UoKX0pKCJhdHRhY2giLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQXR0YWNoZWQoKX0pKCJkZXRhY2giLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xvc2UoKX0pKSwyJmUpe2xldCByPWl0KDEpO0JlKCJhcmlhLW93bnMiLGkucGFuZWxPcGVuP2kuaWQrIi1wYW5lbCI6bnVsbCksdigzKSxfKCJuZ1N3aXRjaCIsaS5lbXB0eSksQmUoImlkIixpLl92YWx1ZUlkKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsITApLHYoMSksXygibmdTd2l0Y2hDYXNlIiwhMSksdig1KSxfKCJjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcyIsaS5fb3ZlcmxheVBhbmVsQ2xhc3MpKCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLGkuX3Njcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsaS5fcHJlZmVycmVkT3ZlcmxheU9yaWdpbnx8cikoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixpLnBhbmVsT3BlbikoImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLGkuX3Bvc2l0aW9ucykoImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCIsaS5fb3ZlcmxheVdpZHRoKX19LGRlcGVuZGVuY2llczpbeW4sc3IsU3IsdXUsQnUsd2RdLHN0eWxlczpbJy5tZGMtbWVudS1zdXJmYWNle2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOmNhbGMoMTAwdncgLSAzMnB4KTttYXgtd2lkdGg6dmFyKC0tbWRjLW1lbnUtbWF4LXdpZHRoLCBjYWxjKDEwMHZ3IC0gMzJweCkpO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDMycHgpO21heC1oZWlnaHQ6dmFyKC0tbWRjLW1lbnUtbWF4LWhlaWdodCwgY2FsYygxMDB2aCAtIDMycHgpKTttYXJnaW46MDtwYWRkaW5nOjA7dHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7b3BhY2l0eTowO292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLG9wYWNpdHk7ei1pbmRleDo4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLW1lZGl1bSwgNHB4KTt0cmFuc2Zvcm0tb3JpZ2luLWxlZnQ6dG9wIGxlZnQ7dHJhbnNmb3JtLW9yaWdpbi1yaWdodDp0b3AgcmlnaHR9Lm1kYy1tZW51LXN1cmZhY2U6Zm9jdXN7b3V0bGluZTpub25lfS5tZGMtbWVudS1zdXJmYWNlLS1hbmltYXRpbmctb3BlbntkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06c2NhbGUoMC44KTtvcGFjaXR5OjB9Lm1kYy1tZW51LXN1cmZhY2UtLW9wZW57ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX0ubWRjLW1lbnUtc3VyZmFjZS0tYW5pbWF0aW5nLWNsb3NlZHtkaXNwbGF5OmlubGluZS1ibG9jaztvcGFjaXR5OjB9W2Rpcj1ydGxdIC5tZGMtbWVudS1zdXJmYWNlLC5tZGMtbWVudS1zdXJmYWNlW2Rpcj1ydGxde3RyYW5zZm9ybS1vcmlnaW4tbGVmdDp0b3AgcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbi1yaWdodDp0b3AgbGVmdH0ubWRjLW1lbnUtc3VyZmFjZS0tYW5jaG9ye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGV9Lm1kYy1tZW51LXN1cmZhY2UtLWZpeGVke3Bvc2l0aW9uOmZpeGVkfS5tZGMtbWVudS1zdXJmYWNlLS1mdWxsd2lkdGh7d2lkdGg6MTAwJX0ubWF0LW1kYy1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1tZGMtc2VsZWN0LXRyaWdnZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5tYXQtbWRjLXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtbWRjLXNlbGVjdC12YWx1ZXt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LW1kYy1zZWxlY3QtdmFsdWUtdGV4dHt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1tZGMtc2VsZWN0LWFycm93LXdyYXBwZXJ7aGVpZ2h0OjI0cHg7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtbWRjLXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC04cHgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWF0LW1kYy1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2Zvcm06bm9uZX0ubWF0LW1kYy1zZWxlY3QtYXJyb3d7d2lkdGg6MTBweDtoZWlnaHQ6NXB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLXNlbGVjdC1hcnJvdyBzdmd7ZmlsbDpjdXJyZW50Q29sb3I7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtc2VsZWN0LWFycm93IHN2Z3tmaWxsOkNhbnZhc1RleHR9Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtc2VsZWN0LWFycm93IHN2Z3tmaWxsOkdyYXlUZXh0fS5tZGMtbWVudS1zdXJmYWNlLm1hdC1tZGMtc2VsZWN0LXBhbmVse3dpZHRoOjEwMCU7bWF4LWhlaWdodDoyNzVweDtwb3NpdGlvbjpzdGF0aWM7b3V0bGluZTowO21hcmdpbjowO3BhZGRpbmc6OHB4IDA7bGlzdC1zdHlsZS10eXBlOm5vbmV9Lm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1zZWxlY3QtcGFuZWw6Zm9jdXN7b3V0bGluZTpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1vdmVybGF5LXBhbmU6bm90KC5tYXQtbWRjLXNlbGVjdC1wYW5lbC1hYm92ZSkgLm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1zZWxlY3QtcGFuZWx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7dHJhbnNmb3JtLW9yaWdpbjp0b3AgY2VudGVyfS5tYXQtbWRjLXNlbGVjdC1wYW5lbC1hYm92ZSAubWRjLW1lbnUtc3VyZmFjZS5tYXQtbWRjLXNlbGVjdC1wYW5lbHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDt0cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbSBjZW50ZXJ9Lm1hdC1tZGMtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1tZGMtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwwKTstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZTtkaXNwbGF5OmJsb2NrfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMThweCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle21heC13aWR0aDpjYWxjKDEwMCUgLyAwLjc1IC0gMjRweCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gNjBweCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tZGMtdGV4dC1maWVsZC0tbGFiZWwtZmxvYXRpbmcgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe21heC13aWR0aDpjYWxjKDEwMCUgLSAyNHB4KX0ubWF0LW1kYy1zZWxlY3QtbWluLWxpbmU6ZW1wdHk6OmJlZm9yZXtjb250ZW50OiIgIjt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Zpc2liaWxpdHk6aGlkZGVufSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W0l5ZS50cmFuc2Zvcm1QYW5lbF19LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSmE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUHllXSxpbXBvcnRzOltQZSxDbyxjZyxmbixQYyxFZixjZyxmbl19KSxufSkoKTtmdW5jdGlvbiBOeWUobix0KXsxJm4mJihPdCgwKSxoKDEsImRpdiIsMSksVCgyLCIgVGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gRGVmYXVsdCAtIChFbmFibGVkL0Rpc2FibGVkKSBhbmQgKEVuYWJsZWQvRGlzYWJsZWQpICIpLGcoKSxoKDMsImRpdiIsMSksVCg0LCIgT25seSBmbGFncyB3aXRoIG5vbiBkZWZhdWx0IHZhbHVlcyBhcmUgc2VudCB0byB0aGUgYmFja2VuZC4gIiksZygpLGt0KCkpfWZ1bmN0aW9uIEx5ZShuLHQpe2lmKDEmbiYmKE90KDApLGgoMSwiZGl2IiwxKSxUKDIpLGcoKSxrdCgpKSwyJm4pe2xldCBlPXcoKTt2KDIpLEhlKCcgRmVhdHVyZSBGbGFncyBhcmUgZmlsdGVyZWQgdG8gb25seSBzaG93IGZlYXR1cmVzIGNvbnRhaW5pbmcgIicsZS5zaG93RmxhZ3NGaWx0ZXIsJyIgJyl9fWZ1bmN0aW9uIEJ5ZShuLHQpezEmbiYmKGgoMCwic3VwIiwxMSksVCgxLCIxIiksZygpKX1mdW5jdGlvbiBWeWUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIEh5ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1zZWxlY3QiLDEyKSxJKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KCkuZmxhZ0NoYW5nZWQuZW1pdCh7ZmxhZzpvLmZsYWcsc3RhdHVzOnIudmFsdWV9KSl9KSxoKDEsIm1hdC1vcHRpb24iLDEzKSxUKDIpLGcoKSxoKDMsIm1hdC1vcHRpb24iLDE0KSxUKDQsIkVuYWJsZWQiKSxnKCksaCg1LCJtYXQtb3B0aW9uIiwxNSksVCg2LCJEaXNhYmxlZCIpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoKTtfKCJ2YWx1ZSIsZS5zdGF0dXMpLHYoMiksSGUoIiBEZWZhdWx0ICIsaS5mb3JtYXRGbGFnVmFsdWUoZS5kZWZhdWx0VmFsdWUpLCIgIil9fWZ1bmN0aW9uIHp5ZShuLHQpe2lmKDEmbiYmKGgoMCwidGQiKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygpO3YoMSksSGUoIlVuc3VwcG9ydGVkIEJ5IFVJICIsaS5mb3JtYXRGbGFnVmFsdWUoZS52YWx1ZSksIiIpfX1mdW5jdGlvbiBVeWUobix0KXtpZigxJm4mJihPdCgwKSxoKDEsInRyIikoMiwidGQiKSgzLCJkaXYiKSxUKDQpLFMoNSxCeWUsMiwwLCJzdXAiLDcpLGcoKSgpLFMoNixWeWUsMSwwLCJuZy1jb250YWluZXIiLDgpLFMoNyxIeWUsNywyLCJuZy10ZW1wbGF0ZSIsbnVsbCw5LFd0KSxTKDksenllLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMTAsV3QpLGcoKSxrdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9aXQoOCkscj1pdCgxMCksbz13KCk7dig0KSxIZSgiICIsZS5mbGFnLCIgIiksdigxKSxfKCJuZ0lmIixlLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuKSx2KDEpLF8oIm5nSWYiLG8uaXNFZGl0YWJsZShlKSkoIm5nSWZUaGVuIixpKSgibmdJZkVsc2UiLHIpfX1mdW5jdGlvbiBqeWUobix0KXsxJm4mJihoKDAsImRpdiIsMTEpLFQoMSwiIDEuIFNlbnQgdG8gc2VydmVyIHdoZW4gb3ZlcnJpZGRlbiAiKSxnKCkpfXZhciBmRSx4cT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5oYXNGbGFnc1NlbnRUb1NlcnZlcj0hMSx0aGlzLmZsYWdDaGFuZ2VkPW5ldyBGLHRoaXMuYWxsRmxhZ3NSZXNldD1uZXcgRn1zZXJpYWxpemVGbGFnVmFsdWUoZSl7cmV0dXJuITA9PT1lPyJFbmFibGVkIjohMT09PWU/IkRpc2FibGVkIjpudWxsPT1lPyJudWxsIjpBcnJheS5pc0FycmF5KGUpP0pTT04uc3RyaW5naWZ5KGUpOmUudG9TdHJpbmcoKX1pc0VkaXRhYmxlKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGUuZGVmYXVsdFZhbHVlfWZvcm1hdEZsYWdWYWx1ZShlKXtsZXQgaT10aGlzLnNlcmlhbGl6ZUZsYWdWYWx1ZShlKTtyZXR1cm4gMD09PWkubGVuZ3RoPyIiOmAtICR7aX1gfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJmZWF0dXJlLWZsYWctZGlhbG9nLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZlYXR1cmVGbGFnU3RhdHVzZXM6ImZlYXR1cmVGbGFnU3RhdHVzZXMiLGhhc0ZsYWdzU2VudFRvU2VydmVyOiJoYXNGbGFnc1NlbnRUb1NlcnZlciIsc2hvd0ZsYWdzRmlsdGVyOiJzaG93RmxhZ3NGaWx0ZXIifSxvdXRwdXRzOntmbGFnQ2hhbmdlZDoiZmxhZ0NoYW5nZWQiLGFsbEZsYWdzUmVzZXQ6ImFsbEZsYWdzUmVzZXQifSxkZWNsczoxMix2YXJzOjQsY29uc3RzOltbMSwic2Nyb2xsaW5nLXBhZ2UiXSxbMSwibWVzc2FnZSJdLFsxLCJ3YXJuaW5nIl0sWzQsIm5nSWYiXSxbMSwiZmVhdHVyZS1mbGFnLXRhYmxlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsibWF0LWJ1dHRvbiIsIiIsMywiY2xpY2siXSxbImNsYXNzIiwibm90ZS0xIiw0LCJuZ0lmIl0sWzQsIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl0sWyJzZWxlY3RCbG9jayIsIiJdLFsidW5zdXBwb3J0ZWRCbG9jayIsIiJdLFsxLCJub3RlLTEiXSxbMywidmFsdWUiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbInZhbHVlIiwiZGVmYXVsdCJdLFsidmFsdWUiLCJlbmFibGVkIl0sWyJ2YWx1ZSIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDIiLDIpLFQoMywiV0FSTklORzogRVhQRVJJTUVOVEFMIEZFQVRVUkVTIEFIRUFEISIpLGcoKSxUKDQsIiBCeSBlbmFibGluZyB0aGVzZSBmZWF0dXJlcywgeW91IGNvdWxkIHB1dCB0aGUgYXBwbGljYXRpb24gaW4gYW4gdW51c2FibGUgc3RhdGUgb3IgZXhwb3NlIHlvdXJzZWxmIHRvIHVudGVzdGVkIGZlYXR1cmVzIG9yIHBvdGVudGlhbCBidWdzLiAiKSxnKCksUyg1LE55ZSw1LDAsIm5nLWNvbnRhaW5lciIsMyksUyg2LEx5ZSwzLDEsIm5nLWNvbnRhaW5lciIsMyksaCg3LCJ0YWJsZSIsNCksUyg4LFV5ZSwxMSw1LCJuZy1jb250YWluZXIiLDUpLGcoKSxoKDksImJ1dHRvbiIsNiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYWxsRmxhZ3NSZXNldC5lbWl0KCl9KSxUKDEwLCJSZXNldCBBbGwiKSxnKCksUygxMSxqeWUsMiwwLCJkaXYiLDcpLGcoKSksMiZlJiYodig1KSxfKCJuZ0lmIixpLmhhc0ZsYWdzU2VudFRvU2VydmVyKSx2KDEpLF8oIm5nSWYiLGkuc2hvd0ZsYWdzRmlsdGVyKSx2KDIpLF8oIm5nRm9yT2YiLGkuZmVhdHVyZUZsYWdTdGF0dXNlcyksdigzKSxfKCJuZ0lmIixpLmhhc0ZsYWdzU2VudFRvU2VydmVyKSl9LGRlcGVuZGVuY2llczpbbm4sRmUsSmksenUsVXNdLHN0eWxlczpbIi5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjE2cHh9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmNDQzMzZ9Lm5vdGUtMVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmOTgwMH0uc2Nyb2xsaW5nLXBhZ2VbX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6OTB2aH0uZmVhdHVyZS1mbGFnLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfSJdfSksbn0pKCksQ3E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zaG93RmxhZ3NGaWx0ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KGl2KS5waXBlKE4oaT0+aS5zaG93RmxhZ3M/LnRvTG93ZXJDYXNlKCkpKSx0aGlzLmhhc0ZsYWdzU2VudFRvU2VydmVyJD10aGlzLnN0b3JlLnNlbGVjdChjZikucGlwZShOKGk9Pk9iamVjdC52YWx1ZXMoaSkuc29tZShyPT5yLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuKSkpLHRoaXMuZmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChpdikucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChtNiksdGhpcy5zdG9yZS5zZWxlY3QoY2YpLHRoaXMuc2hvd0ZsYWdzRmlsdGVyJCksTigoW2kscixvLHNdKT0+T2JqZWN0LmVudHJpZXMocikuZmlsdGVyKChbYV0pPT4hc3x8YS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHMpKS5tYXAoKFthLGxdKT0+e2xldCBjPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHZvaWQgMD09PXRbbl0/ImRlZmF1bHQiOnRbbl0/ImVuYWJsZWQiOiJkaXNhYmxlZCJ9KGEsaSk7cmV0dXJue2ZsYWc6YSxkZWZhdWx0VmFsdWU6bCxzdGF0dXM6YyxzZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbjpvW2FdLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVufX0pKSl9b25GbGFnQ2hhbmdlZCh7ZmxhZzplLHN0YXR1czppfSl7c3dpdGNoKGkpe2Nhc2UiZGVmYXVsdCI6dGhpcy5zdG9yZS5kaXNwYXRjaCh4dSh7ZmxhZ3M6W2VdfSkpO2JyZWFrO2Nhc2UiZW5hYmxlZCI6dGhpcy5zdG9yZS5kaXNwYXRjaChtZih7ZmxhZ3M6e1tlXTohMH19KSk7YnJlYWs7Y2FzZSJkaXNhYmxlZCI6dGhpcy5zdG9yZS5kaXNwYXRjaChtZih7ZmxhZ3M6e1tlXTohMX19KSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkZsYWcgY2hhbmdlZCB0byBpbnZhbGlkIHN0YXR1cyIpfX1vbkFsbEZsYWdzUmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGpoKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLWRpYWxvZyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJmZWF0dXJlRmxhZ1N0YXR1c2VzIiwiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLCJzaG93RmxhZ3NGaWx0ZXIiLCJmbGFnQ2hhbmdlZCIsImFsbEZsYWdzUmVzZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImZlYXR1cmUtZmxhZy1kaWFsb2ctY29tcG9uZW50IiwwKSxJKCJmbGFnQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GbGFnQ2hhbmdlZChvKX0pKCJhbGxGbGFnc1Jlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uQWxsRmxhZ3NSZXNldCgpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksZygpKSwyJmUmJl8oImZlYXR1cmVGbGFnU3RhdHVzZXMiLFcoMSwzLGkuZmVhdHVyZUZsYWdzJCkpKCJoYXNGbGFnc1NlbnRUb1NlcnZlciIsVygyLDUsaS5oYXNGbGFnc1NlbnRUb1NlcnZlciQpKSgic2hvd0ZsYWdzRmlsdGVyIixXKDMsNyxpLnNob3dGbGFnc0ZpbHRlciQpKX0sZGVwZW5kZW5jaWVzOlt4cSxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksTXE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmRpYWxvZz1pLHRoaXMuZmVhdHVyZUZsYWdEaWFsb2dUeXBlPUNxLHRoaXMuc2hvd0ZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoYjYpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWV9bmdPbkluaXQoKXt0aGlzLnNob3dGZWF0dXJlRmxhZ3MkLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntpZihlKXJldHVybiB0aGlzLmZlYXR1cmVGbGFnc0RpYWxvZz10aGlzLmRpYWxvZy5vcGVuKHRoaXMuZmVhdHVyZUZsYWdEaWFsb2dUeXBlKSx2b2lkIHRoaXMuZmVhdHVyZUZsYWdzRGlhbG9nLmFmdGVyQ2xvc2VkKCkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHh1KHtmbGFnczpbInNob3dGbGFncyJdfSkpLHNldFRpbWVvdXQoKCk9Pnt3aW5kb3cubG9jYXRpb24ucmVsb2FkKCl9LDEpfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoemwpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJmZWF0dXJlLWZsYWctbW9kYWwtdHJpZ2dlciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWHllPVsicm91dGVDb250YWluZXIiXSx3cT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWV9bmdPbkNoYW5nZXMoZSl7bGV0IGk9ZS5hY3RpdmVOZ0NvbXBvbmVudDtpZihpJiYodGhpcy5yb3V0ZUNvbnRhaW5lci5jbGVhcigpLGkuY3VycmVudFZhbHVlKSl7bGV0IHI9dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoaS5jdXJyZW50VmFsdWUpO3RoaXMucm91dGVDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KHIpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhmbykpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInJvdXRlci1vdXRsZXQtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UoWHllLDcsc2kpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkucm91dGVDb250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZU5nQ29tcG9uZW50OiJhY3RpdmVOZ0NvbXBvbmVudCJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvdXRlQ29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZsaSgwLG51bGwsMCl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFNxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWdpc3RyeT1pLHRoaXMuYWN0aXZlTmdDb21wb25lbnQkPWRuKFt0aGlzLnN0b3JlLnNlbGVjdChObyksdGhpcy5zdG9yZS5zZWxlY3QoejgpXSkucGlwZShOKChbcixvXSk9PnImJihudWxsPT09b3x8Rm8ocixvKSk/dGhpcy5yZWdpc3RyeS5nZXROZ0NvbXBvbmVudEJ5Um91dGVLaW5kKHIucm91dGVLaW5kKTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoRGwpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsImFjdGl2ZU5nQ29tcG9uZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJl8oImFjdGl2ZU5nQ29tcG9uZW50IixXKDEsMSxpLmFjdGl2ZU5nQ29tcG9uZW50JCkpfSxkZXBlbmRlbmNpZXM6W3dxLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxFcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2Uuc2VsZWN0KFJsKS5zdWJzY3JpYmUoaT0+e2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiZGFyay1tb2RlIixpKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZGFyay1tb2RlLXN1cHBvcnRlciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxDZz0oKCk9PihmdW5jdGlvbihuKXtuW24uQUNUSVZFX1BMVUdJTj0wXT0iQUNUSVZFX1BMVUdJTiJ9KENnfHwoQ2c9e30pKSxDZykpKCksVHE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZXBMaW5rZXI9ZSx0aGlzLm9uVmFsdWVDaGFuZ2U9bmV3IEYsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZSx0aGlzLm9uSGFzaENoYW5nZT1taSh3aW5kb3csInBvcHN0YXRlIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSl9bmdPbkluaXQoKXt0aGlzLm9uSGFzaENoYW5nZS5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLmRlZXBMaW5rZXIuZ2V0UGx1Z2luSWQoKTtlIT09dGhpcy5hY3RpdmVQbHVnaW5JZCYmdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3Byb3A6Q2cuQUNUSVZFX1BMVUdJTix2YWx1ZTplfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5hY3RpdmVQbHVnaW5JZCl7bGV0IGk9ZS5hY3RpdmVQbHVnaW5JZDt0aGlzLmRlZXBMaW5rZXIuc2V0UGx1Z2luSWQobnVsbD09PWkuY3VycmVudFZhbHVlPyIiOmkuY3VycmVudFZhbHVlLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYXRpb25SZXBsYWNlOm51bGw9PT1pLnByZXZpb3VzVmFsdWV8fGkuZmlyc3RDaGFuZ2V9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoX3UpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJoYXNoLXN0b3JhZ2UtY29tcG9uZW50Il1dLGlucHV0czp7YWN0aXZlUGx1Z2luSWQ6ImFjdGl2ZVBsdWdpbklkIn0sb3V0cHV0czp7b25WYWx1ZUNoYW5nZToib25WYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLERxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUGx1Z2luSWQkPXRoaXMuc3RvcmUucGlwZSh1bihXbykpfW9uVmFsdWVDaGFuZ2VkKGUpe2UucHJvcD09PUNnLkFDVElWRV9QTFVHSU4mJnRoaXMuc3RvcmUuZGlzcGF0Y2gocFMoe3BsdWdpbjplLnZhbHVlfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siaGFzaC1zdG9yYWdlIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbklkIiwib25WYWx1ZUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiaGFzaC1zdG9yYWdlLWNvbXBvbmVudCIsMCksSSgib25WYWx1ZUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WYWx1ZUNoYW5nZWQobyl9KSxqKDEsImFzeW5jIiksZygpKSwyJmUmJl8oImFjdGl2ZVBsdWdpbklkIixXKDEsMSxpLmFjdGl2ZVBsdWdpbklkJCkpfSxkZXBlbmRlbmNpZXM6W1RxLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGV4ZT1bIioiXTtmdW5jdGlvbiBpeShuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1mRSYmKGZFPW51bGwsdHlwZW9mIHdpbmRvdzwidSIpKXtsZXQgbj13aW5kb3c7dm9pZCAwIT09bi50cnVzdGVkVHlwZXMmJihmRT1uLnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjY29tcG9uZW50cyIse2NyZWF0ZUhUTUw6dD0+dH0pKX1yZXR1cm4gZkV9KCk/LmNyZWF0ZUhUTUwobil8fG59ZnVuY3Rpb24gSXEobil7cmV0dXJuIEVycm9yKGBVbmFibGUgdG8gZmluZCBpY29uIHdpdGggdGhlIG5hbWUgIiR7bn0iYCl9ZnVuY3Rpb24gQXEobil7cmV0dXJuIEVycm9yKGBUaGUgVVJMIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgYSByZXNvdXJjZSBVUkwgdmlhIEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBVUkwgd2FzICIke259Ii5gKX1mdW5jdGlvbiBScShuKXtyZXR1cm4gRXJyb3IoYFRoZSBsaXRlcmFsIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgc2FmZSBIVE1MIGJ5IEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBsaXRlcmFsIHdhcyAiJHtufSIuYCl9dmFyIFRkPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnVybD10LHRoaXMuc3ZnVGV4dD1lLHRoaXMub3B0aW9ucz1pfX0sTWc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9odHRwQ2xpZW50PWUsdGhpcy5fc2FuaXRpemVyPWksdGhpcy5fZXJyb3JIYW5kbGVyPW8sdGhpcy5fc3ZnSWNvbkNvbmZpZ3M9bmV3IE1hcCx0aGlzLl9pY29uU2V0Q29uZmlncz1uZXcgTWFwLHRoaXMuX2NhY2hlZEljb25zQnlVcmw9bmV3IE1hcCx0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcz1uZXcgTWFwLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcz1uZXcgTWFwLHRoaXMuX3Jlc29sdmVycz1bXSx0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzPVsibWF0ZXJpYWwtaWNvbnMiLCJtYXQtbGlnYXR1cmUtZm9udCJdLHRoaXMuX2RvY3VtZW50PXJ9YWRkU3ZnSWNvbihlLGkscil7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkluTmFtZXNwYWNlKCIiLGUsaSxyKX1hZGRTdmdJY29uTGl0ZXJhbChlLGkscil7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZSgiIixlLGkscil9YWRkU3ZnSWNvbkluTmFtZXNwYWNlKGUsaSxyLG8pe3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKGUsaSxuZXcgVGQocixudWxsLG8pKX1hZGRTdmdJY29uUmVzb2x2ZXIoZSl7cmV0dXJuIHRoaXMuX3Jlc29sdmVycy5wdXNoKGUpLHRoaXN9YWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZShlLGkscixvKXtsZXQgcz10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoanIuSFRNTCxyKTtpZighcyl0aHJvdyBScShyKTtsZXQgYT1peShzKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyhlLGksbmV3IFRkKCIiLGEsbykpfWFkZFN2Z0ljb25TZXQoZSxpKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoIiIsZSxpKX1hZGRTdmdJY29uU2V0TGl0ZXJhbChlLGkpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoIiIsZSxpKX1hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoZSxpLHIpe3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKGUsbmV3IFRkKGksbnVsbCxyKSl9YWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZShlLGkscil7bGV0IG89dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKGpyLkhUTUwsaSk7aWYoIW8pdGhyb3cgUnEoaSk7bGV0IHM9aXkobyk7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcoZSxuZXcgVGQoIiIscyxyKSl9cmVnaXN0ZXJGb250Q2xhc3NBbGlhcyhlLGk9ZSl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5zZXQoZSxpKSx0aGlzfWNsYXNzTmFtZUZvckZvbnRBbGlhcyhlKXtyZXR1cm4gdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLmdldChlKXx8ZX1zZXREZWZhdWx0Rm9udFNldENsYXNzKC4uLmUpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzPWUsdGhpc31nZXREZWZhdWx0Rm9udFNldENsYXNzKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3N9Z2V0U3ZnSWNvbkZyb21VcmwoZSl7bGV0IGk9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKGpyLlJFU09VUkNFX1VSTCxlKTtpZighaSl0aHJvdyBBcShlKTtsZXQgcj10aGlzLl9jYWNoZWRJY29uc0J5VXJsLmdldChpKTtyZXR1cm4gcj9IdChtRShyKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKG5ldyBUZChlLG51bGwpKS5waXBlKE50KG89PnRoaXMuX2NhY2hlZEljb25zQnlVcmwuc2V0KGksbykpLE4obz0+bUUobykpKX1nZXROYW1lZFN2Z0ljb24oZSxpPSIiKXtsZXQgcj1QcShpLGUpLG89dGhpcy5fc3ZnSWNvbkNvbmZpZ3MuZ2V0KHIpO2lmKG8pcmV0dXJuIHRoaXMuX2dldFN2Z0Zyb21Db25maWcobyk7aWYobz10aGlzLl9nZXRJY29uQ29uZmlnRnJvbVJlc29sdmVycyhpLGUpLG8pcmV0dXJuIHRoaXMuX3N2Z0ljb25Db25maWdzLnNldChyLG8pLHRoaXMuX2dldFN2Z0Zyb21Db25maWcobyk7bGV0IHM9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGkpO3JldHVybiBzP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyhlLHMpOmVhKElxKHIpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Jlc29sdmVycz1bXSx0aGlzLl9zdmdJY29uQ29uZmlncy5jbGVhcigpLHRoaXMuX2ljb25TZXRDb25maWdzLmNsZWFyKCksdGhpcy5fY2FjaGVkSWNvbnNCeVVybC5jbGVhcigpfV9nZXRTdmdGcm9tQ29uZmlnKGUpe3JldHVybiBlLnN2Z1RleHQ/SHQobUUodGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcoZSkpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcoZSkucGlwZShOKGk9Pm1FKGkpKSl9X2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyhlLGkpe2xldCByPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KGUsaSk7cmV0dXJuIHI/SHQocik6Y28oaS5maWx0ZXIocz0+IXMuc3ZnVGV4dCkubWFwKHM9PnRoaXMuX2xvYWRTdmdJY29uU2V0RnJvbUNvbmZpZyhzKS5waXBlKHpyKGE9PntsZXQgYz1gTG9hZGluZyBpY29uIHNldCBVUkw6ICR7dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKGpyLlJFU09VUkNFX1VSTCxzLnVybCl9IGZhaWxlZDogJHthLm1lc3NhZ2V9YDtyZXR1cm4gdGhpcy5fZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKG5ldyBFcnJvcihjKSksSHQobnVsbCl9KSkpKS5waXBlKE4oKCk9PntsZXQgcz10aGlzLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldChlLGkpO2lmKCFzKXRocm93IElxKGUpO3JldHVybiBzfSkpfV9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldChlLGkpe2ZvcihsZXQgcj1pLmxlbmd0aC0xO3I+PTA7ci0tKXtsZXQgbz1pW3JdO2lmKG8uc3ZnVGV4dCYmby5zdmdUZXh0LnRvU3RyaW5nKCkuaW5kZXhPZihlKT4tMSl7bGV0IHM9dGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcobyksYT10aGlzLl9leHRyYWN0U3ZnSWNvbkZyb21TZXQocyxlLG8ub3B0aW9ucyk7aWYoYSlyZXR1cm4gYX19cmV0dXJuIG51bGx9X2xvYWRTdmdJY29uRnJvbUNvbmZpZyhlKXtyZXR1cm4gdGhpcy5fZmV0Y2hJY29uKGUpLnBpcGUoTnQoaT0+ZS5zdmdUZXh0PWkpLE4oKCk9PnRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKGUpKSl9X2xvYWRTdmdJY29uU2V0RnJvbUNvbmZpZyhlKXtyZXR1cm4gZS5zdmdUZXh0P0h0KG51bGwpOnRoaXMuX2ZldGNoSWNvbihlKS5waXBlKE50KGk9PmUuc3ZnVGV4dD1pKSl9X2V4dHJhY3RTdmdJY29uRnJvbVNldChlLGkscil7bGV0IG89ZS5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7aX0iXWApO2lmKCFvKXJldHVybiBudWxsO2xldCBzPW8uY2xvbmVOb2RlKCEwKTtpZihzLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSwic3ZnIj09PXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhzLHIpO2lmKCJzeW1ib2wiPT09cy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKHRoaXMuX3RvU3ZnRWxlbWVudChzKSxyKTtsZXQgYT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhpeSgiPHN2Zz48L3N2Zz4iKSk7cmV0dXJuIGEuYXBwZW5kQ2hpbGQocyksdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhhLHIpfV9zdmdFbGVtZW50RnJvbVN0cmluZyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtpLmlubmVySFRNTD1lO2xldCByPWkucXVlcnlTZWxlY3Rvcigic3ZnIik7aWYoIXIpdGhyb3cgRXJyb3IoIjxzdmc+IHRhZyBub3QgZm91bmQiKTtyZXR1cm4gcn1fdG9TdmdFbGVtZW50KGUpe2xldCBpPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKGl5KCI8c3ZnPjwvc3ZnPiIpKSxyPWUuYXR0cmlidXRlcztmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0e25hbWU6cyx2YWx1ZTphfT1yW29dOyJpZCIhPT1zJiZpLnNldEF0dHJpYnV0ZShzLGEpfWZvcihsZXQgbz0wO288ZS5jaGlsZE5vZGVzLmxlbmd0aDtvKyspZS5jaGlsZE5vZGVzW29dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFJiZpLmFwcGVuZENoaWxkKGUuY2hpbGROb2Rlc1tvXS5jbG9uZU5vZGUoITApKTtyZXR1cm4gaX1fc2V0U3ZnQXR0cmlidXRlcyhlLGkpe3JldHVybiBlLnNldEF0dHJpYnV0ZSgiZml0IiwiIiksZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKSxlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIiksZS5zZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiksZS5zZXRBdHRyaWJ1dGUoImZvY3VzYWJsZSIsImZhbHNlIiksaSYmaS52aWV3Qm94JiZlLnNldEF0dHJpYnV0ZSgidmlld0JveCIsaS52aWV3Qm94KSxlfV9mZXRjaEljb24oZSl7bGV0e3VybDppLG9wdGlvbnM6cn09ZSxvPXI/LndpdGhDcmVkZW50aWFscz8/ITE7aWYoIXRoaXMuX2h0dHBDbGllbnQpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIEh0dHBDbGllbnQgcHJvdmlkZXIgZm9yIHVzZSB3aXRoIEFuZ3VsYXIgTWF0ZXJpYWwgaWNvbnMuIFBsZWFzZSBpbmNsdWRlIHRoZSBIdHRwQ2xpZW50TW9kdWxlIGZyb20gQGFuZ3VsYXIvY29tbW9uL2h0dHAgaW4geW91ciBhcHAgaW1wb3J0cy4iKTtpZihudWxsPT1pKXRocm93IEVycm9yKGBDYW5ub3QgZmV0Y2ggaWNvbiBmcm9tIFVSTCAiJHtpfSIuYCk7bGV0IHM9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKGpyLlJFU09VUkNFX1VSTCxpKTtpZighcyl0aHJvdyBBcShpKTtsZXQgYT10aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5nZXQocyk7aWYoYSlyZXR1cm4gYTtsZXQgbD10aGlzLl9odHRwQ2xpZW50LmdldChzLHtyZXNwb25zZVR5cGU6InRleHQiLHdpdGhDcmVkZW50aWFsczpvfSkucGlwZShOKGM9Pml5KGMpKSxmdW5jdGlvbihuKXtyZXR1cm4gcXQoKHQsZSk9Pnt0cnl7dC5zdWJzY3JpYmUoZSl9ZmluYWxseXtlLmFkZChuKX19KX0oKCk9PnRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmRlbGV0ZShzKSksQ3MoKSk7cmV0dXJuIHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLnNldChzLGwpLGx9X2FkZFN2Z0ljb25Db25maWcoZSxpLHIpe3JldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQoUHEoZSxpKSxyKSx0aGlzfV9hZGRTdmdJY29uU2V0Q29uZmlnKGUsaSl7bGV0IHI9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGUpO3JldHVybiByP3IucHVzaChpKTp0aGlzLl9pY29uU2V0Q29uZmlncy5zZXQoZSxbaV0pLHRoaXN9X3N2Z0VsZW1lbnRGcm9tQ29uZmlnKGUpe2lmKCFlLnN2Z0VsZW1lbnQpe2xldCBpPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKGUuc3ZnVGV4dCk7dGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhpLGUub3B0aW9ucyksZS5zdmdFbGVtZW50PWl9cmV0dXJuIGUuc3ZnRWxlbWVudH1fZ2V0SWNvbkNvbmZpZ0Zyb21SZXNvbHZlcnMoZSxpKXtmb3IobGV0IHI9MDtyPHRoaXMuX3Jlc29sdmVycy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLl9yZXNvbHZlcnNbcl0oaSxlKTtpZihvKXJldHVybiByeGUobyk/bmV3IFRkKG8udXJsLG51bGwsby5vcHRpb25zKTpuZXcgVGQobyxudWxsKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsobGYsOCksayhacCksayhMdCw4KSxrKHJzKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gbUUobil7cmV0dXJuIG4uY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiBQcShuLHQpe3JldHVybiBuKyI6Iit0fWZ1bmN0aW9uIHJ4ZShuKXtyZXR1cm4hKCFuLnVybHx8IW4ub3B0aW9ucyl9bmV3IFRzLG5ldyBzZCxuZXcgVHMsbmV3IFRzO3ZhciBveGU9enMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pLHN4ZT1uZXcgaWUoIk1BVF9JQ09OX0RFRkFVTFRfT1BUSU9OUyIpLGF4ZT1uZXcgaWUoIm1hdC1pY29uLWxvY2F0aW9uIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe2xldCBuPWFpKEx0KSx0PW4/bi5sb2NhdGlvbjpudWxsO3JldHVybntnZXRQYXRobmFtZTooKT0+dD90LnBhdGhuYW1lK3Quc2VhcmNoOiIifX19KSxPcT1bImNsaXAtcGF0aCIsImNvbG9yLXByb2ZpbGUiLCJzcmMiLCJjdXJzb3IiLCJmaWxsIiwiZmlsdGVyIiwibWFya2VyIiwibWFya2VyLXN0YXJ0IiwibWFya2VyLW1pZCIsIm1hcmtlci1lbmQiLCJtYXNrIiwic3Ryb2tlIl0sY3hlPU9xLm1hcChuPT5gWyR7bn1dYCkuam9pbigiLCAiKSxkeGU9L151cmxcKFsnIl0/IyguKj8pWyciXT9cKSQvLEVuPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBveGV7Z2V0IGlubGluZSgpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGlubGluZShlKXt0aGlzLl9pbmxpbmU9UnQoZSl9Z2V0IHN2Z0ljb24oKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbn1zZXQgc3ZnSWNvbihlKXtlIT09dGhpcy5fc3ZnSWNvbiYmKGU/dGhpcy5fdXBkYXRlU3ZnSWNvbihlKTp0aGlzLl9zdmdJY29uJiZ0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9zdmdJY29uPWUpfWdldCBmb250U2V0KCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9c2V0IGZvbnRTZXQoZSl7bGV0IGk9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZShlKTtpIT09dGhpcy5fZm9udFNldCYmKHRoaXMuX2ZvbnRTZXQ9aSx0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKSl9Z2V0IGZvbnRJY29uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufXNldCBmb250SWNvbihlKXtsZXQgaT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKGUpO2khPT10aGlzLl9mb250SWNvbiYmKHRoaXMuX2ZvbnRJY29uPWksdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCkpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlKSx0aGlzLl9pY29uUmVnaXN0cnk9aSx0aGlzLl9sb2NhdGlvbj1vLHRoaXMuX2Vycm9ySGFuZGxlcj1zLHRoaXMuX2lubGluZT0hMSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1bXSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPU1uLkVNUFRZLGEmJihhLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1hLmNvbG9yKSxhLmZvbnRTZXQmJih0aGlzLmZvbnRTZXQ9YS5mb250U2V0KSkscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIil9X3NwbGl0SWNvbk5hbWUoZSl7aWYoIWUpcmV0dXJuWyIiLCIiXTtsZXQgaT1lLnNwbGl0KCI6Iik7c3dpdGNoKGkubGVuZ3RoKXtjYXNlIDE6cmV0dXJuWyIiLGlbMF1dO2Nhc2UgMjpyZXR1cm4gaTtkZWZhdWx0OnRocm93IEVycm9yKGBJbnZhbGlkIGljb24gbmFtZTogIiR7ZX0iYCl9fW5nT25Jbml0KCl7dGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCl9bmdBZnRlclZpZXdDaGVja2VkKCl7bGV0IGU9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzO2lmKGUmJmUuc2l6ZSl7bGV0IGk9dGhpcy5fbG9jYXRpb24uZ2V0UGF0aG5hbWUoKTtpIT09dGhpcy5fcHJldmlvdXNQYXRoJiYodGhpcy5fcHJldmlvdXNQYXRoPWksdGhpcy5fcHJlcGVuZFBhdGhUb1JlZmVyZW5jZXMoaSkpfX1uZ09uRGVzdHJveSgpe3RoaXMuX2N1cnJlbnRJY29uRmV0Y2gudW5zdWJzY3JpYmUoKSx0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMmJnRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcy5jbGVhcigpfV91c2luZ0ZvbnRJY29uKCl7cmV0dXJuIXRoaXMuc3ZnSWNvbn1fc2V0U3ZnRWxlbWVudChlKXt0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKTtsZXQgaT10aGlzLl9sb2NhdGlvbi5nZXRQYXRobmFtZSgpO3RoaXMuX3ByZXZpb3VzUGF0aD1pLHRoaXMuX2NhY2hlQ2hpbGRyZW5XaXRoRXh0ZXJuYWxSZWZlcmVuY2VzKGUpLHRoaXMuX3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGkpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlKX1fY2xlYXJTdmdFbGVtZW50KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9ZS5jaGlsZE5vZGVzLmxlbmd0aDtmb3IodGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzJiZ0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKTtpLS07KXtsZXQgcj1lLmNoaWxkTm9kZXNbaV07KDEhPT1yLm5vZGVUeXBlfHwic3ZnIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkmJnIucmVtb3ZlKCl9fV91cGRhdGVGb250SWNvbkNsYXNzZXMoKXtpZighdGhpcy5fdXNpbmdGb250SWNvbigpKXJldHVybjtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT0odGhpcy5mb250U2V0P3RoaXMuX2ljb25SZWdpc3RyeS5jbGFzc05hbWVGb3JGb250QWxpYXModGhpcy5mb250U2V0KS5zcGxpdCgvICsvKTp0aGlzLl9pY29uUmVnaXN0cnkuZ2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpKS5maWx0ZXIocj0+ci5sZW5ndGg+MCk7dGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MuZm9yRWFjaChyPT5lLmNsYXNzTGlzdC5yZW1vdmUocikpLGkuZm9yRWFjaChyPT5lLmNsYXNzTGlzdC5hZGQocikpLHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzPWksdGhpcy5mb250SWNvbiE9PXRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmIWkuaW5jbHVkZXMoIm1hdC1saWdhdHVyZS1mb250IikmJih0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJmUuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MpLHRoaXMuZm9udEljb24mJmUuY2xhc3NMaXN0LmFkZCh0aGlzLmZvbnRJY29uKSx0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3M9dGhpcy5mb250SWNvbil9X2NsZWFudXBGb250VmFsdWUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2UudHJpbSgpLnNwbGl0KCIgIilbMF06ZX1fcHJlcGVuZFBhdGhUb1JlZmVyZW5jZXMoZSl7bGV0IGk9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzO2kmJmkuZm9yRWFjaCgocixvKT0+e3IuZm9yRWFjaChzPT57by5zZXRBdHRyaWJ1dGUocy5uYW1lLGB1cmwoJyR7ZX0jJHtzLnZhbHVlfScpYCl9KX0pfV9jYWNoZUNoaWxkcmVuV2l0aEV4dGVybmFsUmVmZXJlbmNlcyhlKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3JBbGwoY3hlKSxyPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcz10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXN8fG5ldyBNYXA7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspT3EuZm9yRWFjaChzPT57bGV0IGE9aVtvXSxsPWEuZ2V0QXR0cmlidXRlKHMpLGM9bD9sLm1hdGNoKGR4ZSk6bnVsbDtpZihjKXtsZXQgZD1yLmdldChhKTtkfHwoZD1bXSxyLnNldChhLGQpKSxkLnB1c2goe25hbWU6cyx2YWx1ZTpjWzFdfSl9fSl9X3VwZGF0ZVN2Z0ljb24oZSl7aWYodGhpcy5fc3ZnTmFtZXNwYWNlPW51bGwsdGhpcy5fc3ZnTmFtZT1udWxsLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2gudW5zdWJzY3JpYmUoKSxlKXtsZXRbaSxyXT10aGlzLl9zcGxpdEljb25OYW1lKGUpO2kmJih0aGlzLl9zdmdOYW1lc3BhY2U9aSksciYmKHRoaXMuX3N2Z05hbWU9ciksdGhpcy5fY3VycmVudEljb25GZXRjaD10aGlzLl9pY29uUmVnaXN0cnkuZ2V0TmFtZWRTdmdJY29uKHIsaSkucGlwZShZdCgxKSkuc3Vic2NyaWJlKG89PnRoaXMuX3NldFN2Z0VsZW1lbnQobyksbz0+e3RoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYEVycm9yIHJldHJpZXZpbmcgaWNvbiAke2l9OiR7cn0hICR7by5tZXNzYWdlfWApKX0pfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyhNZykseW8oImFyaWEtaGlkZGVuIiksQyhheGUpLEMocnMpLEMoc3hlLDgpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtaWNvbiJdXSxob3N0QXR0cnM6WyJyb2xlIiwiaW1nIiwxLCJtYXQtaWNvbiIsIm5vdHJhbnNsYXRlIl0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiZGF0YS1tYXQtaWNvbi10eXBlIixpLl91c2luZ0ZvbnRJY29uKCk/ImZvbnQiOiJzdmciKSgiZGF0YS1tYXQtaWNvbi1uYW1lIixpLl9zdmdOYW1lfHxpLmZvbnRJY29uKSgiZGF0YS1tYXQtaWNvbi1uYW1lc3BhY2UiLGkuX3N2Z05hbWVzcGFjZXx8aS5mb250U2V0KSgiZm9udEljb24iLGkuX3VzaW5nRm9udEljb24oKT9pLmZvbnRJY29uOm51bGwpLG50KCJtYXQtaWNvbi1pbmxpbmUiLGkuaW5saW5lKSgibWF0LWljb24tbm8tY29sb3IiLCJwcmltYXJ5IiE9PWkuY29sb3ImJiJhY2NlbnQiIT09aS5jb2xvciYmIndhcm4iIT09aS5jb2xvcikpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsaW5saW5lOiJpbmxpbmUiLHN2Z0ljb246InN2Z0ljb24iLGZvbnRTZXQ6ImZvbnRTZXQiLGZvbnRJY29uOiJmb250SWNvbiJ9LGV4cG9ydEFzOlsibWF0SWNvbiJdLGZlYXR1cmVzOltLZV0sbmdDb250ZW50U2VsZWN0b3JzOmV4ZSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksenQoMCkpfSxzdHlsZXM6WyIubWF0LWljb257LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZpbGw6Y3VycmVudENvbG9yO2hlaWdodDoyNHB4O3dpZHRoOjI0cHg7b3ZlcmZsb3c6aGlkZGVufS5tYXQtaWNvbi5tYXQtaWNvbi1pbmxpbmV7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0fS5tYXQtaWNvbi5tYXQtbGlnYXR1cmUtZm9udFtmb250SWNvbl06OmJlZm9yZXtjb250ZW50OmF0dHIoZm9udEljb24pfVtkaXI9cnRsXSAubWF0LWljb24tcnRsLW1pcnJvcnt0cmFuc2Zvcm06c2NhbGUoLTEsIDEpfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbnttYXJnaW46YXV0b30iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxkaT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sZm5dfSksbn0pKCksdXhlPVsiKiIsW1sibWF0LXRvb2xiYXItcm93Il1dXSxweGU9WyIqIiwibWF0LXRvb2xiYXItcm93Il0sZnhlPXpzKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSxteGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sYmFyLXJvdyJdXSxob3N0QXR0cnM6WzEsIm1hdC10b29sYmFyLXJvdyJdLGV4cG9ydEFzOlsibWF0VG9vbGJhclJvdyJdfSksbn0pKCksa3E9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGZ4ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9kb2N1bWVudD1yfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKSx0aGlzLl90b29sYmFyUm93cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpKSl9X2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoR24pLEMoTHQpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiZUaShyLG14ZSw1KSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLl90b29sYmFyUm93cz1vKX19LGhvc3RBdHRyczpbMSwibWF0LXRvb2xiYXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLGkuX3Rvb2xiYXJSb3dzLmxlbmd0aD4wKSgibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsMD09PWkuX3Rvb2xiYXJSb3dzLmxlbmd0aCl9LGlucHV0czp7Y29sb3I6ImNvbG9yIn0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl0sZmVhdHVyZXM6W0tlXSxuZ0NvbnRlbnRTZWxlY3RvcnM6cHhlLGRlY2xzOjIsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4odXhlKSx6dCgwKSx6dCgxLDEpKX0sc3R5bGVzOlsiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC10b29sYmFyIC5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1hdC11bnRoZW1lZHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiBpbmhlcml0Oy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiBpbmhlcml0fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCV9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRnE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2ZuLGZuXX0pLG59KSgpO2Z1bmN0aW9uIEoyKG4pe3JldHVybiBuLnN0YXRlIT09VGUuTk9UX0xPQURFRCYmbi5zdGF0ZSE9PVRlLkxPQURJTkd9dmFyIGd4ZT1icihYVyx5ZSh5MSxuPT5KMihuKT97Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncyxyZWxvYWRFbmFibGVkOiFuLnNldHRpbmdzLnJlbG9hZEVuYWJsZWR9fTpuKSx5ZSh4MSwobix7cGVyaW9kSW5Nczp0fSk9PntpZighSjIobikpcmV0dXJuIG47bGV0IGU9dD49M2U0P3Q6bi5zZXR0aW5ncy5yZWxvYWRQZXJpb2RJbk1zO3JldHVybnsuLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLHJlbG9hZFBlcmlvZEluTXM6ZX19fSkseWUoQzEsKG4se3NpemU6dH0pPT57aWYoIUoyKG4pKXJldHVybiBuO2xldCBlPXQ+MD90Om4uc2V0dGluZ3MucGFnZVNpemU7cmV0dXJuey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MscGFnZVNpemU6ZX19fSkseWUoSWwsKG4se3BhcnRpYWxTZXR0aW5nczp0fSk9PntsZXQgZT17fTtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQucGFnZVNpemUpJiZ0LnBhZ2VTaXplPjAmJihlLnBhZ2VTaXplPU51bWJlcih0LnBhZ2VTaXplKSksImJvb2xlYW4iPT10eXBlb2YgdC5hdXRvUmVsb2FkJiYoZS5yZWxvYWRFbmFibGVkPXQuYXV0b1JlbG9hZCksTnVtYmVyLmlzRmluaXRlKHQuYXV0b1JlbG9hZFBlcmlvZEluTXMpJiZ0LmF1dG9SZWxvYWRQZXJpb2RJbk1zPjNlNCYmKGUucmVsb2FkUGVyaW9kSW5Ncz1OdW1iZXIodC5hdXRvUmVsb2FkUGVyaW9kSW5NcykpLHsuLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLC4uLmV9fX0pKTtmdW5jdGlvbiBOcShuLHQpe3JldHVybiBneGUobix0KX12YXIgX3hlPVsiaW5wdXQiXSxieGU9WyJsYWJlbCJdLHZ4ZT1bIioiXSx5eGU9bmV3IGllKCJtYXQtY2hlY2tib3gtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntjb2xvcjoiYWNjZW50IixjbGlja0FjdGlvbjoiY2hlY2staW5kZXRlcm1pbmF0ZSJ9fX0pO3ZhciB4eGU9e3Byb3ZpZGU6TW8sdXNlRXhpc3Rpbmc6JG4oKCk9PmhhKSxtdWx0aTohMH0sQ3hlPTAsTHE9e2NvbG9yOiJhY2NlbnQiLGNsaWNrQWN0aW9uOiJjaGVjay1pbmRldGVybWluYXRlIn0sTXhlPWt1KHpzKHVzKHNvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSkpKSx3eGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE14ZXtnZXQgaW5wdXRJZCgpe3JldHVybmAke3RoaXMuaWR8fHRoaXMuX3VuaXF1ZUlkfS1pbnB1dGB9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZChlKXt0aGlzLl9yZXF1aXJlZD1SdChlKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2FuaW1hdGlvbk1vZGU9YSx0aGlzLl9vcHRpb25zPWwsdGhpcy5hcmlhTGFiZWw9IiIsdGhpcy5hcmlhTGFiZWxsZWRieT1udWxsLHRoaXMubGFiZWxQb3NpdGlvbj0iYWZ0ZXIiLHRoaXMubmFtZT1udWxsLHRoaXMuY2hhbmdlPW5ldyBGLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZT1uZXcgRix0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcz0iIix0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT0wLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLl9vcHRpb25zPXRoaXMuX29wdGlvbnN8fExxLHRoaXMuY29sb3I9dGhpcy5kZWZhdWx0Q29sb3I9dGhpcy5fb3B0aW9ucy5jb2xvcnx8THEuY29sb3IsdGhpcy50YWJJbmRleD1wYXJzZUludChzKXx8MCx0aGlzLmlkPXRoaXMuX3VuaXF1ZUlkPWAke2V9JHsrK0N4ZX1gfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3N5bmNJbmRldGVybWluYXRlKHRoaXMuX2luZGV0ZXJtaW5hdGUpfWdldCBjaGVja2VkKCl7cmV0dXJuIHRoaXMuX2NoZWNrZWR9c2V0IGNoZWNrZWQoZSl7bGV0IGk9UnQoZSk7aSE9dGhpcy5jaGVja2VkJiYodGhpcy5fY2hlY2tlZD1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe2xldCBpPVJ0KGUpO2khPT10aGlzLmRpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGluZGV0ZXJtaW5hdGUoKXtyZXR1cm4gdGhpcy5faW5kZXRlcm1pbmF0ZX1zZXQgaW5kZXRlcm1pbmF0ZShlKXtsZXQgaT1lIT10aGlzLl9pbmRldGVybWluYXRlO3RoaXMuX2luZGV0ZXJtaW5hdGU9UnQoZSksaSYmKHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2luZGV0ZXJtaW5hdGU/Mzp0aGlzLmNoZWNrZWQ/MToyKSx0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLl9pbmRldGVybWluYXRlKSksdGhpcy5fc3luY0luZGV0ZXJtaW5hdGUodGhpcy5faW5kZXRlcm1pbmF0ZSl9X2lzUmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLmRpc2FibGVkfV9vbkxhYmVsVGV4dENoYW5nZSgpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX13cml0ZVZhbHVlKGUpe3RoaXMuY2hlY2tlZD0hIWV9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5fb25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9X3RyYW5zaXRpb25DaGVja1N0YXRlKGUpe2xldCBpPXRoaXMuX2N1cnJlbnRDaGVja1N0YXRlLHI9dGhpcy5fZ2V0QW5pbWF0aW9uVGFyZ2V0RWxlbWVudCgpO2lmKGkhPT1lJiZyJiYodGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzJiZyLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzKSx0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3M9dGhpcy5fZ2V0QW5pbWF0aW9uQ2xhc3NGb3JDaGVja1N0YXRlVHJhbnNpdGlvbihpLGUpLHRoaXMuX2N1cnJlbnRDaGVja1N0YXRlPWUsdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzLmxlbmd0aD4wKSl7ci5jbGFzc0xpc3QuYWRkKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyk7bGV0IG89dGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9PntyLmNsYXNzTGlzdC5yZW1vdmUobyl9LDFlMyl9KX19X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy5jaGVja2VkKSx0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KHRoaXMuY2hlY2tlZCkpLHRoaXMuX2lucHV0RWxlbWVudCYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkKX10b2dnbGUoKXt0aGlzLmNoZWNrZWQ9IXRoaXMuY2hlY2tlZCx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMuY2hlY2tlZCl9X2hhbmRsZUlucHV0Q2xpY2soKXtsZXQgZT10aGlzLl9vcHRpb25zPy5jbGlja0FjdGlvbjt0aGlzLmRpc2FibGVkfHwibm9vcCI9PT1lPyF0aGlzLmRpc2FibGVkJiYibm9vcCI9PT1lJiYodGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZD10aGlzLmNoZWNrZWQsdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZT10aGlzLmluZGV0ZXJtaW5hdGUpOih0aGlzLmluZGV0ZXJtaW5hdGUmJiJjaGVjayIhPT1lJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLl9pbmRldGVybWluYXRlKX0pLHRoaXMuX2NoZWNrZWQ9IXRoaXMuX2NoZWNrZWQsdGhpcy5fdHJhbnNpdGlvbkNoZWNrU3RhdGUodGhpcy5fY2hlY2tlZD8xOjIpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKX1fb25JbnRlcmFjdGlvbkV2ZW50KGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9X29uQmx1cigpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfV9nZXRBbmltYXRpb25DbGFzc0ZvckNoZWNrU3RhdGVUcmFuc2l0aW9uKGUsaSl7aWYoIk5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGUpcmV0dXJuIiI7c3dpdGNoKGUpe2Nhc2UgMDppZigxPT09aSlyZXR1cm4gdGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0NoZWNrZWQ7aWYoMz09aSlyZXR1cm4gdGhpcy5fY2hlY2tlZD90aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7YnJlYWs7Y2FzZSAyOnJldHVybiAxPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLnVuY2hlY2tlZFRvQ2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLnVuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZTtjYXNlIDE6cmV0dXJuIDI9PT1pP3RoaXMuX2FuaW1hdGlvbkNsYXNzZXMuY2hlY2tlZFRvVW5jaGVja2VkOnRoaXMuX2FuaW1hdGlvbkNsYXNzZXMuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZTtjYXNlIDM6cmV0dXJuIDE9PT1pP3RoaXMuX2FuaW1hdGlvbkNsYXNzZXMuaW5kZXRlcm1pbmF0ZVRvQ2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLmluZGV0ZXJtaW5hdGVUb1VuY2hlY2tlZH1yZXR1cm4iIn1fc3luY0luZGV0ZXJtaW5hdGUoZSl7bGV0IGk9dGhpcy5faW5wdXRFbGVtZW50O2kmJihpLm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZT1lKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe0lzKCl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UoX3hlLDUpLEdlKGJ4ZSw1KSxHZShtbyw1KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5faW5wdXRFbGVtZW50PXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLl9sYWJlbEVsZW1lbnQ9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkucmlwcGxlPXIuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGFyaWFEZXNjcmliZWRieTpbImFyaWEtZGVzY3JpYmVkYnkiLCJhcmlhRGVzY3JpYmVkYnkiXSxpZDoiaWQiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbGFiZWxQb3NpdGlvbjoibGFiZWxQb3NpdGlvbiIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIixjaGVja2VkOiJjaGVja2VkIixkaXNhYmxlZDoiZGlzYWJsZWQiLGluZGV0ZXJtaW5hdGU6ImluZGV0ZXJtaW5hdGUifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsaW5kZXRlcm1pbmF0ZUNoYW5nZToiaW5kZXRlcm1pbmF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltLZV19KSxufSkoKSxoYT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgd3hle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcigibWF0LW1kYy1jaGVja2JveC0iLGUsaSxyLG8scyxhKSx0aGlzLl9hbmltYXRpb25DbGFzc2VzPXt1bmNoZWNrZWRUb0NoZWNrZWQ6Im1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCIsdW5jaGVja2VkVG9JbmRldGVybWluYXRlOiJtZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUiLGNoZWNrZWRUb1VuY2hlY2tlZDoibWRjLWNoZWNrYm94LS1hbmltLWNoZWNrZWQtdW5jaGVja2VkIixjaGVja2VkVG9JbmRldGVybWluYXRlOiJtZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC1pbmRldGVybWluYXRlIixpbmRldGVybWluYXRlVG9DaGVja2VkOiJtZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIixpbmRldGVybWluYXRlVG9VbmNoZWNrZWQ6Im1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCJ9fWZvY3VzKCl7dGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1fY3JlYXRlQ2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze307cmV0dXJuIGkuc291cmNlPXRoaXMsaS5jaGVja2VkPWUsaX1fZ2V0QW5pbWF0aW9uVGFyZ2V0RWxlbWVudCgpe3JldHVybiB0aGlzLl9pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnR9X29uSW5wdXRDbGljaygpe3N1cGVyLl9oYW5kbGVJbnB1dENsaWNrKCl9X29uVG91Y2hUYXJnZXRDbGljaygpe3N1cGVyLl9oYW5kbGVJbnB1dENsaWNrKCksdGhpcy5kaXNhYmxlZHx8dGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1fcHJldmVudEJ1YmJsaW5nRnJvbUxhYmVsKGUpe2UudGFyZ2V0JiZ0aGlzLl9sYWJlbEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkmJmUuc3RvcFByb3BhZ2F0aW9uKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoJHQpLEMoYXQpLHlvKCJ0YWJpbmRleCIpLEMoaGksOCksQyh5eGUsOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtY2hlY2tib3giXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihqbygiaWQiLGkuaWQpLEJlKCJ0YWJpbmRleCIsbnVsbCkoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpLG50KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtZGMtY2hlY2tib3gtLWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LW1kYy1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1tZGMtY2hlY2tib3gtY2hlY2tlZCIsaS5jaGVja2VkKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdENoZWNrYm94Il0sZmVhdHVyZXM6W1F0KFt4eGVdKSxLZV0sbmdDb250ZW50U2VsZWN0b3JzOnZ4ZSxkZWNsczoxNSx2YXJzOjE5LGNvbnN0czpbWzEsIm1kYy1mb3JtLWZpZWxkIiwzLCJjbGljayJdLFsxLCJtZGMtY2hlY2tib3giXSxbImNoZWNrYm94IiwiIl0sWzEsIm1hdC1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0IiwzLCJjbGljayJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sIiwzLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImRpc2FibGVkIiwiaWQiLCJyZXF1aXJlZCIsInRhYkluZGV4IiwiYmx1ciIsImNsaWNrIiwiY2hhbmdlIl0sWyJpbnB1dCIsIiJdLFsxLCJtZGMtY2hlY2tib3hfX3JpcHBsZSJdLFsxLCJtZGMtY2hlY2tib3hfX2JhY2tncm91bmQiXSxbImZvY3VzYWJsZSIsImZhbHNlIiwidmlld0JveCIsIjAgMCAyNCAyNCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWRjLWNoZWNrYm94X19jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwiZCIsIk0xLjczLDEyLjkxIDguMSwxOS4yOCAyMi43OSw0LjU5IiwxLCJtZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoIl0sWzEsIm1kYy1jaGVja2JveF9fbWl4ZWRtYXJrIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtbWRjLWNoZWNrYm94LXJpcHBsZSIsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIiwzLCJtYXRSaXBwbGVUcmlnZ2VyIiwibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCJdLFszLCJmb3IiXSxbImxhYmVsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoRG4oKSxoKDAsImRpdiIsMCksSSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9wcmV2ZW50QnViYmxpbmdGcm9tTGFiZWwobyl9KSxoKDEsImRpdiIsMSwyKSgzLCJkaXYiLDMpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9vblRvdWNoVGFyZ2V0Q2xpY2soKX0pLGcoKSxoKDQsImlucHV0Iiw0LDUpLEkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQmx1cigpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9vbklucHV0Q2xpY2soKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkludGVyYWN0aW9uRXZlbnQobyl9KSxnKCksUCg2LCJkaXYiLDYpLGgoNywiZGl2Iiw3KSxObigpLGgoOCwic3ZnIiw4KSxQKDksInBhdGgiLDkpLGcoKSxPbygpLFAoMTAsImRpdiIsMTApLGcoKSxQKDExLCJkaXYiLDExKSxnKCksaCgxMiwibGFiZWwiLDEyLDEzKSx6dCgxNCksZygpKCkpLDImZSl7bGV0IHI9aXQoMik7bnQoIm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQiLCJiZWZvcmUiPT1pLmxhYmVsUG9zaXRpb24pLHYoNCksbnQoIm1kYy1jaGVja2JveC0tc2VsZWN0ZWQiLGkuY2hlY2tlZCksXygiY2hlY2tlZCIsaS5jaGVja2VkKSgiaW5kZXRlcm1pbmF0ZSIsaS5pbmRldGVybWluYXRlKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJpZCIsaS5pbnB1dElkKSgicmVxdWlyZWQiLGkucmVxdWlyZWQpKCJ0YWJJbmRleCIsaS50YWJJbmRleCksQmUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpKCJuYW1lIixpLm5hbWUpKCJ2YWx1ZSIsaS52YWx1ZSksdig3KSxfKCJtYXRSaXBwbGVUcmlnZ2VyIixyKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZVJpcHBsZXx8aS5kaXNhYmxlZCkoIm1hdFJpcHBsZUNlbnRlcmVkIiwhMCksdigxKSxfKCJmb3IiLGkuaW5wdXRJZCl9fSxkZXBlbmRlbmNpZXM6W21vXSxzdHlsZXM6WycubWRjLXRvdWNoLXRhcmdldC13cmFwcGVye2Rpc3BsYXk6aW5saW5lfUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoezAlLDUwJXtzdHJva2UtZGFzaG9mZnNldDoyOS43ODMzMzg1fTUwJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MH19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrezAlLDY4LjIle3RyYW5zZm9ybTpzY2FsZVgoMCl9NjguMiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMCwgMSl9MTAwJXt0cmFuc2Zvcm06c2NhbGVYKDEpfX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aHtmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSk7b3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjB9dG97b3BhY2l0eTowO3N0cm9rZS1kYXNob2Zmc2V0Oi0yOS43ODMzMzg1fX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO29wYWNpdHk6MX19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bWRjLWFuaW1hdGlvbi1kZWNlbGVyYXRpb24tY3VydmUtdGltaW5nLWZ1bmN0aW9uO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06cm90YXRlKDMxNWRlZyk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1pbmRldGVybWluYXRlLXVuY2hlY2tlZC1taXhlZG1hcmt7MCV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXI7dHJhbnNmb3JtOnNjYWxlWCgxKTtvcGFjaXR5OjF9MzIuOCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVYKDApO29wYWNpdHk6MH19Lm1kYy1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjAgMCAxOHB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7d2lkdGg6MThweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjpib3R0b219Lm1kYy1jaGVja2JveFtoaWRkZW5de2Rpc3BsYXk6bm9uZX0ubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19mb2N1cy1yaW5nLC5tZGMtY2hlY2tib3g6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWNoZWNrYm94X19mb2N1cy1yaW5ne3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZywubWRjLWNoZWNrYm94Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tib3JkZXItY29sb3I6Q2FudmFzVGV4dH19Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZzo6YWZ0ZXIsLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX2ZvY3VzLXJpbmc6OmFmdGVye2NvbnRlbnQ6IiI7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6OHB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDpjYWxjKDEwMCUgKyA0cHgpO3dpZHRoOmNhbGMoMTAwJSArIDRweCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZzo6YWZ0ZXIsLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpey5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tkaXNwbGF5Om5vbmV9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLWNoZWNrYm94X19taXhlZG1hcmt7bWFyZ2luOjAgMXB4fX0ubWRjLWNoZWNrYm94LS1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7ZGlzcGxheTppbmxpbmUtZmxleDtwb3NpdGlvbjphYnNvbHV0ZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MThweDtoZWlnaHQ6MThweDtib3JkZXI6MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7cG9pbnRlci1ldmVudHM6bm9uZTt3aWxsLWNoYW5nZTpiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSxib3JkZXItY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKX0ubWRjLWNoZWNrYm94X19jaGVja21hcmt7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDE4MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2hlY2tib3gtLXVwZ3JhZGVkIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3tvcGFjaXR5OjF9Lm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGh7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAxODBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDozLjEycHg7c3Ryb2tlLWRhc2hvZmZzZXQ6MjkuNzgzMzM4NTtzdHJva2UtZGFzaGFycmF5OjI5Ljc4MzMzODV9Lm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre3dpZHRoOjEwMCU7aGVpZ2h0OjA7dHJhbnNmb3JtOnNjYWxlWCgwKSByb3RhdGUoMGRlZyk7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpLHRyYW5zZm9ybSA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWRjLWNoZWNrYm94LS1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tZHVyYXRpb246MTgwbXM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXJ9Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19jaGVja21hcmstcGF0aHthbmltYXRpb246bWRjLWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoIDE4MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7YW5pbWF0aW9uOm1kYy1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmsgOTBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOm1kYy1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aCA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLWNoZWNrbWFyayA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFyayA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLWNoZWNrbWFyayA1MDBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tZGMtY2hlY2tib3hfX21peGVkbWFya3thbmltYXRpb246bWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmsgNTAwbXMgbGluZWFyIDBzO3RyYW5zaXRpb246bm9uZX0ubWRjLWNoZWNrYm94LS1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX21peGVkbWFya3thbmltYXRpb246bWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFyayAzMDBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSksYmFja2dyb3VuZC1jb2xvciA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpjaGVja2Vkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGgsLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoLC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luOjA7cGFkZGluZzowO29wYWNpdHk6MDtjdXJzb3I6aW5oZXJpdH0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtY2hlY2tib3gtLXRvdWNoe21hcmdpbjpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkpIC8gMil9Lm1kYy1jaGVja2JveC0tdG91Y2ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0MHB4KSAtIHZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0OHB4KSkgLyAyKTtyaWdodDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkpIC8gMik7bGVmdDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkpIC8gMik7d2lkdGg6dmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQ4cHgpO2hlaWdodDp2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCl9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6Y2hlY2tlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3t0cmFuc2l0aW9uOm9wYWNpdHkgMTgwbXMgMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpLHRyYW5zZm9ybSAxODBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7b3BhY2l0eToxfS5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoLTQ1ZGVnKX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3t0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDkwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSksdHJhbnNmb3JtIDkwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSl9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX21peGVkbWFyaywubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV1+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoMGRlZyk7b3BhY2l0eToxfS5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19jaGVja21hcmssLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLXVwZ3JhZGVkIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoLC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNpdGlvbjpub25lfS5tZGMtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1kYy1mb3JtLWZpZWxkW2hpZGRlbl17ZGlzcGxheTpub25lfS5tZGMtZm9ybS1maWVsZD5sYWJlbHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDphdXRvO3BhZGRpbmctbGVmdDo0cHg7cGFkZGluZy1yaWdodDowO29yZGVyOjB9W2Rpcj1ydGxdIC5tZGMtZm9ybS1maWVsZD5sYWJlbCwubWRjLWZvcm0tZmllbGQ+bGFiZWxbZGlyPXJ0bF17bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkPmxhYmVsLC5tZGMtZm9ybS1maWVsZD5sYWJlbFtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjRweH0ubWRjLWZvcm0tZmllbGQtLW5vd3JhcD5sYWJlbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWx7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjRweDtvcmRlcjotMX1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWwsLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWxbZGlyPXJ0bF17bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6YXV0b31bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWwsLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWxbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjRweDtwYWRkaW5nLXJpZ2h0OjB9Lm1kYy1mb3JtLWZpZWxkLS1zcGFjZS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tZGMtZm9ybS1maWVsZC0tc3BhY2UtYmV0d2Vlbj5sYWJlbHttYXJnaW46MH1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1zcGFjZS1iZXR3ZWVuPmxhYmVsLC5tZGMtZm9ybS1maWVsZC0tc3BhY2UtYmV0d2Vlbj5sYWJlbFtkaXI9cnRsXXttYXJnaW46MH0ubWF0LW1kYy1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94e3BhZGRpbmc6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKTttYXJnaW46Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGlzYWJsZWRdOm5vdCg6Y2hlY2tlZCk6bm90KDppbmRldGVybWluYXRlKTpub3QoW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXSl+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2Rpc2FibGVkXTpjaGVja2Vkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkaXNhYmxlZF06aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdW2Rpc2FibGVkXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19jaGVja21hcmt7Y29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvciwgI2ZmZil9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yLCAjZmZmKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmRpc2FibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2NvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3IsICNmZmYpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZGlzYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3IsICNmZmYpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3IsIHJnYmEoMCwgMCwgMCwgMC41NCkpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLThBMDAwMDAwRkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2ezAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fTUwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX0xMDAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2FuaW1hdGlvbi1uYW1lOm1kYy1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tbmFtZTptZGMtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZC04QTAwMDAwMEZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6Y2hlY2tlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpob3ZlciAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fTUwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX0xMDAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH19Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpob3Zlci5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIubWRjLWNoZWNrYm94LS1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tbmFtZTptZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLUZGMDE4Nzg2RkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2fS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIubWRjLWNoZWNrYm94LS1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmluZGV0ZXJtaW5hdGV+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXTplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpfUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4NnswJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9NTAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4NnswJSw4MCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpfTEwMCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZC5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZC5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoOmRpc2FibGVkKTphY3RpdmUgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjU0KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmluZGV0ZXJtaW5hdGV+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLThBMDAwMDAwRkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2ezAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3IsIHJnYmEoMCwgMCwgMCwgMC41NCkpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9NTAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9MTAwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZS5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KDpkaXNhYmxlZCk6YWN0aXZlLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC04QTAwMDAwMEZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZS5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KDpkaXNhYmxlZCk6YWN0aXZlLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9se3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkpIC8gMik7cmlnaHQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpO3dpZHRoOnZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0MHB4KTtoZWlnaHQ6dmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6bm90KFtkaXNhYmxlZF0pfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtvcGFjaXR5Oi4wNDt0cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNpdGlvbjpvcGFjaXR5IDgwbXMgMCBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSx0cmFuc2Zvcm0gODBtcyAwIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6bm90KFtkaXNhYmxlZF0pOmZvY3Vzfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtvcGFjaXR5Oi4xNn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5key13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0ubWF0LW1kYy1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAqLC5tYXQtbWRjLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlICo6OmJlZm9yZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWNoZWNrYm94IGxhYmVse2N1cnNvcjpwb2ludGVyfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1tZGMtY2hlY2tib3gtZGlzYWJsZWQgbGFiZWx7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1tZGMtY2hlY2tib3ggbGFiZWw6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmZvY3VzOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCBibGFjayl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1jaGVja2JveC5tYXQtbWRjLWNoZWNrYm94LWRpc2FibGVke29wYWNpdHk6LjV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19jaGVja21hcmt7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiBDYW52YXNUZXh0Oy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjogQ2FudmFzVGV4dH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19yaXBwbGV7b3BhY2l0eTowfS5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSwubWRjLWNoZWNrYm94X19yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1jaGVja2JveC1yaXBwbGU6bm90KDplbXB0eSksLm1kYy1jaGVja2JveF9fcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LW1kYy1jaGVja2JveC1yaXBwbGU6OmJlZm9yZXtib3JkZXItcmFkaXVzOjUwJX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpmb2N1c34ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFN4ZT17cHJvdmlkZTp3byx1c2VFeGlzdGluZzokbigoKT0+RXhlKSxtdWx0aTohMH0sRXhlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaMnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOltRdChbU3hlXSksS2VdfSksbn0pKCksQnE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLEZjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltmbixCbCxCcSxmbixCcV19KSxufSkoKSxIcT1xbyh7cGFzc2l2ZTohMH0pLHpxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzPW5ldyBNYXB9bW9uaXRvcihlKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiBKcjtsZXQgaT1IcyhlKSxyPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChpKTtpZihyKXJldHVybiByLnN1YmplY3Q7bGV0IG89bmV3IEllLHM9ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiLGE9bD0+eyJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCIhPT1sLmFuaW1hdGlvbk5hbWV8fGkuY2xhc3NMaXN0LmNvbnRhaW5zKHMpPyJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQiPT09bC5hbmltYXRpb25OYW1lJiZpLmNsYXNzTGlzdC5jb250YWlucyhzKSYmKGkuY2xhc3NMaXN0LnJlbW92ZShzKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT5vLm5leHQoe3RhcmdldDpsLnRhcmdldCxpc0F1dG9maWxsZWQ6ITF9KSkpOihpLmNsYXNzTGlzdC5hZGQocyksdGhpcy5fbmdab25lLnJ1bigoKT0+by5uZXh0KHt0YXJnZXQ6bC50YXJnZXQsaXNBdXRvZmlsbGVkOiEwfSkpKX07cmV0dXJuIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2kuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLGEsSHEpLGkuY2xhc3NMaXN0LmFkZCgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIil9KSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5zZXQoaSx7c3ViamVjdDpvLHVubGlzdGVuOigpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYSxIcSl9fSksb31zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1IcyhlKSxyPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChpKTtyJiYoci51bmxpc3RlbigpLHIuc3ViamVjdC5jb21wbGV0ZSgpLGkuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIiksaS5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZGVsZXRlKGkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vbml0b3JlZEVsZW1lbnRzLmZvckVhY2goKGUsaSk9PnRoaXMuc3RvcE1vbml0b3JpbmcoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEduKSxrKGF0KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksVXE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLER4ZT1uZXcgaWUoIk1BVF9JTlBVVF9WQUxVRV9BQ0NFU1NPUiIpLEl4ZT1bImJ1dHRvbiIsImNoZWNrYm94IiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic3VibWl0Il0sQXhlPTAsUnhlPUIxKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkpe3RoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj1uLHRoaXMuX3BhcmVudEZvcm09dCx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9ZSx0aGlzLm5nQ29udHJvbD1pLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBJZX19KSxVdT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUnhle2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9UnQoZSksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChlKXt0aGlzLl9pZD1lfHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkPz90aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFVsLnJlcXVpcmVkKT8/ITF9c2V0IHJlcXVpcmVkKGUpe3RoaXMuX3JlcXVpcmVkPVJ0KGUpfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX3R5cGV9c2V0IHR5cGUoZSl7dGhpcy5fdHlwZT1lfHwidGV4dCIsdGhpcy5fdmFsaWRhdGVUeXBlKCksIXRoaXMuX2lzVGV4dGFyZWEmJm8yKCkuaGFzKHRoaXMuX3R5cGUpJiYodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnR5cGU9dGhpcy5fdHlwZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX1zZXQgdmFsdWUoZSl7ZSE9PXRoaXMudmFsdWUmJih0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfWdldCByZWFkb25seSgpe3JldHVybiB0aGlzLl9yZWFkb25seX1zZXQgcmVhZG9ubHkoZSl7dGhpcy5fcmVhZG9ubHk9UnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLGQsdSl7c3VwZXIoYSxvLHMsciksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX3BsYXRmb3JtPWksdGhpcy5fYXV0b2ZpbGxNb25pdG9yPWMsdGhpcy5fZm9ybUZpZWxkPXUsdGhpcy5fdWlkPSJtYXQtaW5wdXQtIitBeGUrKyx0aGlzLmZvY3VzZWQ9ITEsdGhpcy5zdGF0ZUNoYW5nZXM9bmV3IEllLHRoaXMuY29udHJvbFR5cGU9Im1hdC1pbnB1dCIsdGhpcy5hdXRvZmlsbGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3R5cGU9InRleHQiLHRoaXMuX3JlYWRvbmx5PSExLHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzPVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIl0uZmlsdGVyKG09Pm8yKCkuaGFzKG0pKSx0aGlzLl9pT1NLZXl1cExpc3RlbmVyPW09PntsZXQgYj1tLnRhcmdldDshYi52YWx1ZSYmMD09PWIuc2VsZWN0aW9uU3RhcnQmJjA9PT1iLnNlbGVjdGlvbkVuZCYmKGIuc2V0U2VsZWN0aW9uUmFuZ2UoMSwxKSxiLnNldFNlbGVjdGlvblJhbmdlKDAsMCkpfTtsZXQgcD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZj1wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yPWx8fHAsdGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT10aGlzLnZhbHVlLHRoaXMuaWQ9dGhpcy5pZCxpLklPUyYmZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2UubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5faU9TS2V5dXBMaXN0ZW5lcil9KSx0aGlzLl9pc1NlcnZlcj0hdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyLHRoaXMuX2lzTmF0aXZlU2VsZWN0PSJzZWxlY3QiPT09Zix0aGlzLl9pc1RleHRhcmVhPSJ0ZXh0YXJlYSI9PT1mLHRoaXMuX2lzSW5Gb3JtRmllbGQ9ISF1LHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYodGhpcy5jb250cm9sVHlwZT1wLm11bHRpcGxlPyJtYXQtbmF0aXZlLXNlbGVjdC1tdWx0aXBsZSI6Im1hdC1uYXRpdmUtc2VsZWN0Iil9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShlPT57dGhpcy5hdXRvZmlsbGVkPWUuaXNBdXRvZmlsbGVkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX1uZ0RvQ2hlY2soKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpLG51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZCYmdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQhPT10aGlzLmRpc2FibGVkJiYodGhpcy5kaXNhYmxlZD10aGlzLm5nQ29udHJvbC5kaXNhYmxlZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpKSx0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKSx0aGlzLl9kaXJ0eUNoZWNrUGxhY2Vob2xkZXIoKX1mb2N1cyhlKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X2ZvY3VzQ2hhbmdlZChlKXtlIT09dGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25JbnB1dCgpe31fZGlydHlDaGVja05hdGl2ZVZhbHVlKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO3RoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUhPT1lJiYodGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X2RpcnR5Q2hlY2tQbGFjZWhvbGRlcigpe2xldCBlPXRoaXMuX2dldFBsYWNlaG9sZGVyKCk7aWYoZSE9PXRoaXMuX3ByZXZpb3VzUGxhY2Vob2xkZXIpe2xldCBpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl9wcmV2aW91c1BsYWNlaG9sZGVyPWUsZT9pLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLGUpOmkucmVtb3ZlQXR0cmlidXRlKCJwbGFjZWhvbGRlciIpfX1fZ2V0UGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnx8bnVsbH1fdmFsaWRhdGVUeXBlKCl7SXhlLmluZGV4T2YodGhpcy5fdHlwZSl9X2lzTmV2ZXJFbXB0eSgpe3JldHVybiB0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcy5pbmRleE9mKHRoaXMuX3R5cGUpPi0xfV9pc0JhZElucHV0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbGlkaXR5O3JldHVybiBlJiZlLmJhZElucHV0fWdldCBlbXB0eSgpe3JldHVybiEodGhpcy5faXNOZXZlckVtcHR5KCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZXx8dGhpcy5faXNCYWRJbnB1dCgpfHx0aGlzLmF1dG9maWxsZWQpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7aWYodGhpcy5faXNOYXRpdmVTZWxlY3Qpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUub3B0aW9uc1swXTtyZXR1cm4gdGhpcy5mb2N1c2VkfHxlLm11bHRpcGxlfHwhdGhpcy5lbXB0eXx8ISEoZS5zZWxlY3RlZEluZGV4Pi0xJiZpJiZpLmxhYmVsKX1yZXR1cm4gdGhpcy5mb2N1c2VkfHwhdGhpcy5lbXB0eX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzZWR8fHRoaXMuZm9jdXMoKX1faXNJbmxpbmVTZWxlY3QoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYoZS5tdWx0aXBsZXx8ZS5zaXplPjEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKEduKSxDKEdzLDEwKSxDKHZnLDgpLEMoeWcsOCksQyhIMSksQyhEeGUsMTApLEMoenEpLEMoYXQpLEMoU2YsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdElucHV0IiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdElucHV0IiwiIl0sWyJzZWxlY3QiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJpbnB1dCIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXSxbInRleHRhcmVhIiwibWF0TmF0aXZlQ29udHJvbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtaW5wdXQtZWxlbWVudCJdLGhvc3RWYXJzOjE4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZCghMCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fZm9jdXNDaGFuZ2VkKCExKX0pKCJpbnB1dCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25JbnB1dCgpfSksMiZlJiYoam8oImlkIixpLmlkKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCksQmUoIm5hbWUiLGkubmFtZXx8bnVsbCkoInJlYWRvbmx5IixpLnJlYWRvbmx5JiYhaS5faXNOYXRpdmVTZWxlY3R8fG51bGwpKCJhcmlhLWludmFsaWQiLGkuZW1wdHkmJmkucmVxdWlyZWQ/bnVsbDppLmVycm9yU3RhdGUpKCJhcmlhLXJlcXVpcmVkIixpLnJlcXVpcmVkKSgiaWQiLGkuaWQpLG50KCJtYXQtaW5wdXQtc2VydmVyIixpLl9pc1NlcnZlcikoIm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0YXJlYS1jb250cm9sIixpLl9pc0luRm9ybUZpZWxkJiZpLl9pc1RleHRhcmVhKSgibWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2wiLGkuX2lzSW5Gb3JtRmllbGQpKCJtZGMtdGV4dC1maWVsZF9faW5wdXQiLGkuX2lzSW5Gb3JtRmllbGQpKCJtYXQtbWRjLW5hdGl2ZS1zZWxlY3QtaW5saW5lIixpLl9pc0lubGluZVNlbGVjdCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDoiaWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsbmFtZToibmFtZSIscmVxdWlyZWQ6InJlcXVpcmVkIix0eXBlOiJ0eXBlIixlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHVzZXJBcmlhRGVzY3JpYmVkQnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwidXNlckFyaWFEZXNjcmliZWRCeSJdLHZhbHVlOiJ2YWx1ZSIscmVhZG9ubHk6InJlYWRvbmx5In0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6UXYsdXNlRXhpc3Rpbmc6bn1dKSxLZSxHdF19KSxufSkoKSwkYT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sRWYsRWYsVXEsZm5dfSksbn0pKCk7ZnVuY3Rpb24gUHhlKG4sdCl7aWYoMSZuJiYoaCgwLCJtYXQtZXJyb3IiKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiIFJlbG9hZCBwZXJpb2QgaGFzIHRvIGJlIG1pbmltdW0gb2YgIixlLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MsIiBzZWNvbmRzLiAiKX19ZnVuY3Rpb24gT3hlKG4sdCl7MSZuJiYoaCgwLCJtYXQtZXJyb3IiKSxUKDEsIiBQYWdlIHNpemUgaGFzIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gIiksZygpKX12YXIganE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucmVsb2FkVG9nZ2xlZD1uZXcgRix0aGlzLnJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkPW5ldyBGLHRoaXMucGFnZVNpemVDaGFuZ2VkPW5ldyBGLHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUz0zMCx0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2w9bmV3IHR5KHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUyxbVWwucmVxdWlyZWQsVWwubWluKHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUyldKSx0aGlzLnBhZ2luYXRpb25Db250cm9sPW5ldyB0eSgxLFtVbC5yZXF1aXJlZCxVbC5taW4oMSksbj0+e2xldCB0PU51bWJlcihuLnZhbHVlKTtyZXR1cm4gTWF0aC5yb3VuZCh0KT09PW4udmFsdWU/bnVsbDp7aW50ZWdlcjp7dmFsdWU6bi52YWx1ZX19fV0pLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWV9bmdPbkluaXQoKXt0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSx3cig1MDApLGtlKCgpPT50aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsaWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsaWQmJnRoaXMucmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQuZW1pdCgxZTMqdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbHVlKX0pLHRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSx3cig1MDApLGtlKCgpPT50aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbGlkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYWdlU2l6ZUNoYW5nZWQuZW1pdCh0aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbHVlKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uQ2hhbmdlcyhlKXtpZihlLnJlbG9hZFBlcmlvZEluTXMpe2xldCBpPWUucmVsb2FkUGVyaW9kSW5NcztpLnByZXZpb3VzVmFsdWUhPT1pLmN1cnJlbnRWYWx1ZSYmdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnNldFZhbHVlKGkuY3VycmVudFZhbHVlLzFlMyl9aWYoZS5yZWxvYWRFbmFibGVkJiYoZS5yZWxvYWRFbmFibGVkLmN1cnJlbnRWYWx1ZT90aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuZW5hYmxlKCk6dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLmRpc2FibGUoKSksZS5wYWdlU2l6ZSl7bGV0IGk9ZS5wYWdlU2l6ZTtpLnByZXZpb3VzVmFsdWUhPT1pLmN1cnJlbnRWYWx1ZSYmdGhpcy5wYWdpbmF0aW9uQ29udHJvbC5zZXRWYWx1ZShpLmN1cnJlbnRWYWx1ZSl9fW9uUmVsb2FkVG9nZ2xlKCl7dGhpcy5yZWxvYWRUb2dnbGVkLmVtaXQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nLWNvbXBvbmVudCJdXSxpbnB1dHM6e3JlbG9hZEVuYWJsZWQ6InJlbG9hZEVuYWJsZWQiLHJlbG9hZFBlcmlvZEluTXM6InJlbG9hZFBlcmlvZEluTXMiLHBhZ2VTaXplOiJwYWdlU2l6ZSJ9LG91dHB1dHM6e3JlbG9hZFRvZ2dsZWQ6InJlbG9hZFRvZ2dsZWQiLHJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkOiJyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCIscGFnZVNpemVDaGFuZ2VkOiJwYWdlU2l6ZUNoYW5nZWQifSxmZWF0dXJlczpbR3RdLGRlY2xzOjE4LHZhcnM6NSxjb25zdHM6W1sxLCJyZWxvYWQtdG9nZ2xlIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbIm1hdElucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMSwicmVsb2FkLXBlcmlvZCIsMywiZm9ybUNvbnRyb2wiXSxbNCwibmdJZiJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwxLCJwYWdlLXNpemUiLDMsImZvcm1Db250cm9sIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJoMyIpLFQoMSwiU2V0dGluZ3MiKSxnKCksaCgyLCJkaXYiKSgzLCJkaXYiLDApKDQsIm1hdC1jaGVja2JveCIsMSksSSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVsb2FkVG9nZ2xlKCl9KSxUKDUsIlJlbG9hZCBkYXRhIiksZygpKCksaCg2LCJkaXYiKSg3LCJtYXQtZm9ybS1maWVsZCIpKDgsIm1hdC1sYWJlbCIpLFQoOSwiUmVsb2FkIFBlcmlvZCAoc2Vjb25kcykiKSxnKCksUCgxMCwiaW5wdXQiLDIpLGcoKSxTKDExLFB4ZSwyLDEsIm1hdC1lcnJvciIsMyksZygpKCksaCgxMiwiZGl2IikoMTMsIm1hdC1mb3JtLWZpZWxkIikoMTQsIm1hdC1sYWJlbCIpLFQoMTUsIlBhZ2luYXRpb24gTGltaXQiKSxnKCksUCgxNiwiaW5wdXQiLDQpLGcoKSxTKDE3LE94ZSwyLDAsIm1hdC1lcnJvciIsMyksZygpKSwyJmUmJih2KDQpLF8oImNoZWNrZWQiLGkucmVsb2FkRW5hYmxlZCksdig2KSxfKCJmb3JtQ29udHJvbCIsaS5yZWxvYWRQZXJpb2RDb250cm9sKSx2KDEpLF8oIm5nSWYiLGkucmVsb2FkUGVyaW9kQ29udHJvbC5oYXNFcnJvcigibWluIil8fGkucmVsb2FkUGVyaW9kQ29udHJvbC5oYXNFcnJvcigicmVxdWlyZWQiKSksdig1KSxfKCJmb3JtQ29udHJvbCIsaS5wYWdpbmF0aW9uQ29udHJvbCksdigxKSxfKCJuZ0lmIixpLnBhZ2luYXRpb25Db250cm9sLmludmFsaWQpKX0sZGVwZW5kZW5jaWVzOltGZSxiZyxZMixjRSxRMixoYSxVdSxLYSxrYyxNOV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICA+IGRpdltfbmdjb250ZW50LSVDT01QJV0ge1xuICBtYXJnaW46IDE2cHg7XG59XG5cbmgzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbWFyZ2luOiAxNnB4O1xufVxuXG4ucmVsb2FkLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufSJdfSksbn0pKCksR3E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChJdiksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChBdiksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoX2YpfW9uUmVsb2FkVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goeTEoKSl9b25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHgxKHtwZXJpb2RJbk1zOmV9KSl9b25QYWdlU2l6ZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChDMSh7c2l6ZTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlbG9hZEVuYWJsZWQiLCJyZWxvYWRQZXJpb2RJbk1zIiwicGFnZVNpemUiLCJyZWxvYWRUb2dnbGVkIiwicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLCJwYWdlU2l6ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiLDApLEkoInJlbG9hZFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGVkKCl9KSgicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQobyl9KSgicGFnZVNpemVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBhZ2VTaXplQ2hhbmdlZChvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGcoKSksMiZlJiZfKCJyZWxvYWRFbmFibGVkIixXKDEsMyxpLnJlbG9hZEVuYWJsZWQkKSkoInJlbG9hZFBlcmlvZEluTXMiLFcoMiw1LGkucmVsb2FkUGVyaW9kSW5NcyQpKSgicGFnZVNpemUiLFcoMyw3LGkucGFnZVNpemUkKSl9LGRlcGVuZGVuY2llczpbanEsY3RdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFdxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kaWFsb2c9ZX1pc0J1dHRvbkRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1UZS5OT1RfTE9BREVEfHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09VGUuTE9BRElOR31vcGVuRGlhbG9nKCl7dGhpcy5kaWFsb2cub3BlbihHcSx7d2lkdGg6IjQwMHB4In0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHpsKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCJdXSxpbnB1dHM6e3NldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSJ9LGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJidXR0b24iLDApLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EaWFsb2coKX0pLFAoMSwibWF0LWljb24iLDEpLGcoKSksMiZlJiZfKCJkaXNhYmxlZCIsaS5pc0J1dHRvbkRpc2FibGVkKCkpfSxkZXBlbmRlbmNpZXM6WyRpLEVuXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxxcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNldHRpbmdzTG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdCh0Mil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1idXR0b24iXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywic2V0dGluZ3NMb2FkU3RhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInNldHRpbmdzLWJ1dHRvbi1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSksMiZlJiZfKCJzZXR0aW5nc0xvYWRTdGF0ZSIsVygxLDEsaS5zZXR0aW5nc0xvYWRTdGF0ZSQpKX0sZGVwZW5kZW5jaWVzOltXcSxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksQnhlPVsibWF0LW1lbnUtaXRlbSIsIiJdO2Z1bmN0aW9uIFZ4ZShuLHQpezEmbiYmKE5uKCksaCgwLCJzdmciLDMpLFAoMSwicG9seWdvbiIsNCksZygpKX12YXIgSHhlPVtbWyJtYXQtaWNvbiJdLFsiIiwibWF0TWVudUl0ZW1JY29uIiwiIl1dLCIqIl0senhlPVsibWF0LWljb24sIFttYXRNZW51SXRlbUljb25dIiwiKiJdO2Z1bmN0aW9uIFV4ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMCksSSgia2V5ZG93biIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuX2hhbmRsZUtleWRvd24ocikpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmNsb3NlZC5lbWl0KCJjbGljayIpKX0pKCJAdHJhbnNmb3JtTWVudS5zdGFydCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuX29uQW5pbWF0aW9uU3RhcnQocikpfSkoIkB0cmFuc2Zvcm1NZW51LmRvbmUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLl9vbkFuaW1hdGlvbkRvbmUocikpfSksaCgxLCJkaXYiLDEpLHp0KDIpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO18oImlkIixlLnBhbmVsSWQpKCJuZ0NsYXNzIixlLl9jbGFzc0xpc3QpKCJAdHJhbnNmb3JtTWVudSIsZS5fcGFuZWxBbmltYXRpb25TdGF0ZSksQmUoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixlLmFyaWFMYWJlbGxlZGJ5fHxudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsZS5hcmlhRGVzY3JpYmVkYnl8fG51bGwpfX12YXIganhlPVsiKiJdLGVOPW5ldyBpZSgiTUFUX01FTlVfUEFORUwiKSxHeGU9dXMoc28oY2xhc3N7fSkpLGpsPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBHeGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX2ZvY3VzTW9uaXRvcj1yLHRoaXMuX3BhcmVudE1lbnU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMucm9sZT0ibWVudWl0ZW0iLHRoaXMuX2hvdmVyZWQ9bmV3IEllLHRoaXMuX2ZvY3VzZWQ9bmV3IEllLHRoaXMuX2hpZ2hsaWdodGVkPSExLHRoaXMuX3RyaWdnZXJzU3VibWVudT0hMSxvPy5hZGRJdGVtPy4odGhpcyl9Zm9jdXMoZSxpKXt0aGlzLl9mb2N1c01vbml0b3ImJmU/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2dldEhvc3RFbGVtZW50KCksZSxpKTp0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKGkpLHRoaXMuX2ZvY3VzZWQubmV4dCh0aGlzKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITEpfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yJiZ0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fcGFyZW50TWVudSYmdGhpcy5fcGFyZW50TWVudS5yZW1vdmVJdGVtJiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0odGhpcyksdGhpcy5faG92ZXJlZC5jb21wbGV0ZSgpLHRoaXMuX2ZvY3VzZWQuY29tcGxldGUoKX1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fV9jaGVja0Rpc2FibGVkKGUpe3RoaXMuZGlzYWJsZWQmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSl9X2hhbmRsZU1vdXNlRW50ZXIoKXt0aGlzLl9ob3ZlcmVkLm5leHQodGhpcyl9Z2V0TGFiZWwoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvbmVOb2RlKCEwKSxpPWUucXVlcnlTZWxlY3RvckFsbCgibWF0LWljb24sIC5tYXRlcmlhbC1pY29ucyIpO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl0ucmVtb3ZlKCk7cmV0dXJuIGUudGV4dENvbnRlbnQ/LnRyaW0oKXx8IiJ9X3NldEhpZ2hsaWdodGVkKGUpe3RoaXMuX2hpZ2hsaWdodGVkPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfV9zZXRUcmlnZ2Vyc1N1Ym1lbnUoZSl7dGhpcy5fdHJpZ2dlcnNTdWJtZW51PWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfV9oYXNGb2N1cygpe3JldHVybiB0aGlzLl9kb2N1bWVudCYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuX2dldEhvc3RFbGVtZW50KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoTHQpLEMoWHIpLEMoZU4sOCksQygkdCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1tZW51LWl0ZW0iLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLW1lbnUtaXRlbSIsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIiwibWRjLWxpc3QtaXRlbSJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2NoZWNrRGlzYWJsZWQobyl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlTW91c2VFbnRlcigpfSksMiZlJiYoQmUoInJvbGUiLGkucm9sZSkoInRhYmluZGV4IixpLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxudCgibWF0LW1kYy1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQiLGkuX2hpZ2hsaWdodGVkKSgibWF0LW1kYy1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyIixpLl90cmlnZ2Vyc1N1Ym1lbnUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLHJvbGU6InJvbGUifSxleHBvcnRBczpbIm1hdE1lbnVJdGVtIl0sZmVhdHVyZXM6W0tlXSxhdHRyczpCeGUsbmdDb250ZW50U2VsZWN0b3JzOnp4ZSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJtZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1tZW51LXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVUcmlnZ2VyIl0sWyJjbGFzcyIsIm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24iLCJ2aWV3Qm94IiwiMCAwIDUgMTAiLCJmb2N1c2FibGUiLCJmYWxzZSIsNCwibmdJZiJdLFsidmlld0JveCIsIjAgMCA1IDEwIiwiZm9jdXNhYmxlIiwiZmFsc2UiLDEsIm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24iXSxbInBvaW50cyIsIjAsMCA1LDUgMCwxMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKEh4ZSksenQoMCksaCgxLCJzcGFuIiwwKSx6dCgyLDEpLGcoKSxQKDMsImRpdiIsMSksUyg0LFZ4ZSwyLDAsInN2ZyIsMikpLDImZSYmKHYoMyksXygibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZVJpcHBsZXx8aS5kaXNhYmxlZCkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpLHYoMSksXygibmdJZiIsaS5fdHJpZ2dlcnNTdWJtZW51KSl9LGRlcGVuZGVuY2llczpbRmUsbW9dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFd4ZT1uZXcgaWUoIk1hdE1lbnVDb250ZW50IiksX0U9e3RyYW5zZm9ybU1lbnU6X3IoInRyYW5zZm9ybU1lbnUiLFt3aSgidm9pZCIscm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDAuOCkifSkpLGdpKCJ2b2lkID0+IGVudGVyIixDaSgiMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLHJuKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSkpLGdpKCIqID0+IHZvaWQiLENpKCIxMDBtcyAyNW1zIGxpbmVhciIscm4oe29wYWNpdHk6MH0pKSldKSxmYWRlSW5JdGVtczpfcigiZmFkZUluSXRlbXMiLFt3aSgic2hvd2luZyIscm4oe29wYWNpdHk6MX0pKSxnaSgidm9pZCA9PiAqIixbcm4oe29wYWNpdHk6MH0pLENpKCI0MDBtcyAxMDBtcyBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSIpXSldKX0scXhlPTAsWHE9bmV3IGllKCJtYXQtbWVudS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue292ZXJsYXBUcmlnZ2VyOiExLHhQb3NpdGlvbjoiYWZ0ZXIiLHlQb3NpdGlvbjoiYmVsb3ciLGJhY2tkcm9wQ2xhc3M6ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIn19fSkscnk9KCgpPT57Y2xhc3MgbntnZXQgeFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3hQb3NpdGlvbn1zZXQgeFBvc2l0aW9uKGUpe3RoaXMuX3hQb3NpdGlvbj1lLHRoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9Z2V0IHlQb3NpdGlvbigpe3JldHVybiB0aGlzLl95UG9zaXRpb259c2V0IHlQb3NpdGlvbihlKXt0aGlzLl95UG9zaXRpb249ZSx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCBvdmVybGFwVHJpZ2dlcigpe3JldHVybiB0aGlzLl9vdmVybGFwVHJpZ2dlcn1zZXQgb3ZlcmxhcFRyaWdnZXIoZSl7dGhpcy5fb3ZlcmxhcFRyaWdnZXI9UnQoZSl9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcChlKXt0aGlzLl9oYXNCYWNrZHJvcD1SdChlKX1zZXQgcGFuZWxDbGFzcyhlKXtsZXQgaT10aGlzLl9wcmV2aW91c1BhbmVsQ2xhc3M7aSYmaS5sZW5ndGgmJmkuc3BsaXQoIiAiKS5mb3JFYWNoKHI9Pnt0aGlzLl9jbGFzc0xpc3Rbcl09ITF9KSx0aGlzLl9wcmV2aW91c1BhbmVsQ2xhc3M9ZSxlJiZlLmxlbmd0aCYmKGUuc3BsaXQoIiAiKS5mb3JFYWNoKHI9Pnt0aGlzLl9jbGFzc0xpc3Rbcl09ITB9KSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIiKX1nZXQgY2xhc3NMaXN0KCl7cmV0dXJuIHRoaXMucGFuZWxDbGFzc31zZXQgY2xhc3NMaXN0KGUpe3RoaXMucGFuZWxDbGFzcz1lfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1yLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPW8sdGhpcy5feFBvc2l0aW9uPXRoaXMuX2RlZmF1bHRPcHRpb25zLnhQb3NpdGlvbix0aGlzLl95UG9zaXRpb249dGhpcy5fZGVmYXVsdE9wdGlvbnMueVBvc2l0aW9uLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcz1uZXcgT2EsdGhpcy5fY2xhc3NMaXN0PXt9LHRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuX2FuaW1hdGlvbkRvbmU9bmV3IEllLHRoaXMub3ZlcmxheVBhbmVsQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxheVBhbmVsQ2xhc3N8fCIiLHRoaXMuYmFja2Ryb3BDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5iYWNrZHJvcENsYXNzLHRoaXMuX292ZXJsYXBUcmlnZ2VyPXRoaXMuX2RlZmF1bHRPcHRpb25zLm92ZXJsYXBUcmlnZ2VyLHRoaXMuX2hhc0JhY2tkcm9wPXRoaXMuX2RlZmF1bHRPcHRpb25zLmhhc0JhY2tkcm9wLHRoaXMuY2xvc2VkPW5ldyBGLHRoaXMuY2xvc2U9dGhpcy5jbG9zZWQsdGhpcy5wYW5lbElkPSJtYXQtbWVudS1wYW5lbC0iK3F4ZSsrfW5nT25Jbml0KCl7dGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpLHRoaXMuX2tleU1hbmFnZXI9bmV3IHNnKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkud2l0aEhvbWVBbmRFbmQoKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCk9PnRoaXMuY2xvc2VkLmVtaXQoInRhYiIpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKHFuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksSm4oZT0+dG4oLi4uZS5tYXAoaT0+aS5fZm9jdXNlZCkpKSkuc3Vic2NyaWJlKGU9PnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLl9rZXlNYW5hZ2VyO2lmKCJlbnRlciI9PT10aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlJiZpLmFjdGl2ZUl0ZW0/Ll9oYXNGb2N1cygpKXtsZXQgcj1lLnRvQXJyYXkoKSxvPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMSxpLmFjdGl2ZUl0ZW1JbmRleHx8MCkpO3Jbb10mJiFyW29dLmRpc2FibGVkP2kuc2V0QWN0aXZlSXRlbShvKTppLnNldE5leHRJdGVtQWN0aXZlKCl9fSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmRlc3Ryb3koKSx0aGlzLmNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfV9ob3ZlcmVkKCl7cmV0dXJuIHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUocW4odGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSxKbihpPT50biguLi5pLm1hcChyPT5yLl9ob3ZlcmVkKSkpKX1hZGRJdGVtKGUpe31yZW1vdmVJdGVtKGUpe31faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGUscj10aGlzLl9rZXlNYW5hZ2VyO3N3aXRjaChpKXtjYXNlIDI3OnZyKGUpfHwoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKSk7YnJlYWs7Y2FzZSAzNzp0aGlzLnBhcmVudE1lbnUmJiJsdHIiPT09dGhpcy5kaXJlY3Rpb24mJnRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKTticmVhaztjYXNlIDM5OnRoaXMucGFyZW50TWVudSYmInJ0bCI9PT10aGlzLmRpcmVjdGlvbiYmdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuKDM4PT09aXx8NDA9PT1pKSYmci5zZXRGb2N1c09yaWdpbigia2V5Ym9hcmQiKSx2b2lkIHIub25LZXlkb3duKGUpfWUuc3RvcFByb3BhZ2F0aW9uKCl9Zm9jdXNGaXJzdEl0ZW0oZT0icHJvZ3JhbSIpe3RoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFl0KDEpKS5zdWJzY3JpYmUoKCk9PntsZXQgaT1udWxsO2lmKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5sZW5ndGgmJihpPXRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5maXJzdC5fZ2V0SG9zdEVsZW1lbnQoKS5jbG9zZXN0KCdbcm9sZT0ibWVudSJdJykpLCFpfHwhaS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSl7bGV0IHI9dGhpcy5fa2V5TWFuYWdlcjtyLnNldEZvY3VzT3JpZ2luKGUpLnNldEZpcnN0SXRlbUFjdGl2ZSgpLCFyLmFjdGl2ZUl0ZW0mJmkmJmkuZm9jdXMoKX19KX1yZXNldEFjdGl2ZUl0ZW0oKXt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfXNldEVsZXZhdGlvbihlKXtsZXQgaT1NYXRoLm1pbih0aGlzLl9iYXNlRWxldmF0aW9uK2UsMjQpLHI9YCR7dGhpcy5fZWxldmF0aW9uUHJlZml4fSR7aX1gLG89T2JqZWN0LmtleXModGhpcy5fY2xhc3NMaXN0KS5maW5kKHM9PnMuc3RhcnRzV2l0aCh0aGlzLl9lbGV2YXRpb25QcmVmaXgpKTsoIW98fG89PT10aGlzLl9wcmV2aW91c0VsZXZhdGlvbikmJih0aGlzLl9wcmV2aW91c0VsZXZhdGlvbiYmKHRoaXMuX2NsYXNzTGlzdFt0aGlzLl9wcmV2aW91c0VsZXZhdGlvbl09ITEpLHRoaXMuX2NsYXNzTGlzdFtyXT0hMCx0aGlzLl9wcmV2aW91c0VsZXZhdGlvbj1yKX1zZXRQb3NpdGlvbkNsYXNzZXMoZT10aGlzLnhQb3NpdGlvbixpPXRoaXMueVBvc2l0aW9uKXtsZXQgcj10aGlzLl9jbGFzc0xpc3Q7clsibWF0LW1lbnUtYmVmb3JlIl09ImJlZm9yZSI9PT1lLHJbIm1hdC1tZW51LWFmdGVyIl09ImFmdGVyIj09PWUsclsibWF0LW1lbnUtYWJvdmUiXT0iYWJvdmUiPT09aSxyWyJtYXQtbWVudS1iZWxvdyJdPSJiZWxvdyI9PT1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX1fc3RhcnRBbmltYXRpb24oKXt0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJlbnRlciJ9X3Jlc2V0QW5pbWF0aW9uKCl7dGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0idm9pZCJ9X29uQW5pbWF0aW9uRG9uZShlKXt0aGlzLl9hbmltYXRpb25Eb25lLm5leHQoZSksdGhpcy5faXNBbmltYXRpbmc9ITF9X29uQW5pbWF0aW9uU3RhcnQoZSl7dGhpcy5faXNBbmltYXRpbmc9ITAsImVudGVyIj09PWUudG9TdGF0ZSYmMD09PXRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4JiYoZS5lbGVtZW50LnNjcm9sbFRvcD0wKX1fdXBkYXRlRGlyZWN0RGVzY2VuZGFudHMoKXt0aGlzLl9hbGxJdGVtcy5jaGFuZ2VzLnBpcGUocW4odGhpcy5fYWxsSXRlbXMpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5yZXNldChlLmZpbHRlcihpPT5pLl9wYXJlbnRNZW51PT09dGhpcykpLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKGF0KSxDKFhxKSxDKCR0KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKFRpKHIsV3hlLDUpLFRpKHIsamwsNSksVGkocixqbCw0KSksMiZlKXtsZXQgbztTZShvPUVlKCkpJiYoaS5sYXp5Q29udGVudD1vLmZpcnN0KSxTZShvPUVlKCkpJiYoaS5fYWxsSXRlbXM9byksU2Uobz1FZSgpKSYmKGkuaXRlbXM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKFNpLDUpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkudGVtcGxhdGVSZWY9ci5maXJzdCl9fSxpbnB1dHM6e2JhY2tkcm9wQ2xhc3M6ImJhY2tkcm9wQ2xhc3MiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sYXJpYURlc2NyaWJlZGJ5OlsiYXJpYS1kZXNjcmliZWRieSIsImFyaWFEZXNjcmliZWRieSJdLHhQb3NpdGlvbjoieFBvc2l0aW9uIix5UG9zaXRpb246InlQb3NpdGlvbiIsb3ZlcmxhcFRyaWdnZXI6Im92ZXJsYXBUcmlnZ2VyIixoYXNCYWNrZHJvcDoiaGFzQmFja2Ryb3AiLHBhbmVsQ2xhc3M6WyJjbGFzcyIsInBhbmVsQ2xhc3MiXSxjbGFzc0xpc3Q6ImNsYXNzTGlzdCJ9LG91dHB1dHM6e2Nsb3NlZDoiY2xvc2VkIixjbG9zZToiY2xvc2UifX0pLG59KSgpLE5jPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyByeXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKSx0aGlzLl9lbGV2YXRpb25QcmVmaXg9Im1hdC1lbGV2YXRpb24teiIsdGhpcy5fYmFzZUVsZXZhdGlvbj04fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKGF0KSxDKFhxKSxDKCR0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LW1lbnUiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsbnVsbCl9LGV4cG9ydEFzOlsibWF0TWVudSJdLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6ZU4sdXNlRXhpc3Rpbmc6bn1dKSxLZV0sbmdDb250ZW50U2VsZWN0b3JzOmp4ZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sidGFiaW5kZXgiLCItMSIsInJvbGUiLCJtZW51IiwxLCJtYXQtbWRjLW1lbnUtcGFuZWwiLCJtZGMtbWVudS1zdXJmYWNlIiwibWRjLW1lbnUtc3VyZmFjZS0tb3BlbiIsIm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljIiwzLCJpZCIsIm5nQ2xhc3MiLCJrZXlkb3duIiwiY2xpY2siXSxbMSwibWF0LW1kYy1tZW51LWNvbnRlbnQiLCJtZGMtbGlzdCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksUygwLFV4ZSwzLDYsIm5nLXRlbXBsYXRlIikpfSxkZXBlbmRlbmNpZXM6W3luXSxzdHlsZXM6WycubWRjLW1lbnUtc3VyZmFjZXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O21heC13aWR0aDp2YXIoLS1tZGMtbWVudS1tYXgtd2lkdGgsIGNhbGMoMTAwdncgLSAzMnB4KSk7bWF4LWhlaWdodDp2YXIoLS1tZGMtbWVudS1tYXgtaGVpZ2h0LCBjYWxjKDEwMHZoIC0gMzJweCkpO21hcmdpbjowO3BhZGRpbmc6MDt0cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdDtvcGFjaXR5OjA7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eTt6LWluZGV4Ojg7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtbWVkaXVtLCA0cHgpO3RyYW5zZm9ybS1vcmlnaW4tbGVmdDp0b3AgbGVmdDt0cmFuc2Zvcm0tb3JpZ2luLXJpZ2h0OnRvcCByaWdodH0ubWRjLW1lbnUtc3VyZmFjZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1kYy1tZW51LXN1cmZhY2UtLWFuaW1hdGluZy1vcGVue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6MH0ubWRjLW1lbnUtc3VyZmFjZS0tb3BlbntkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfS5tZGMtbWVudS1zdXJmYWNlLS1hbmltYXRpbmctY2xvc2Vke2Rpc3BsYXk6aW5saW5lLWJsb2NrO29wYWNpdHk6MH1bZGlyPXJ0bF0gLm1kYy1tZW51LXN1cmZhY2UsLm1kYy1tZW51LXN1cmZhY2VbZGlyPXJ0bF17dHJhbnNmb3JtLW9yaWdpbi1sZWZ0OnRvcCByaWdodDt0cmFuc2Zvcm0tb3JpZ2luLXJpZ2h0OnRvcCBsZWZ0fS5tZGMtbWVudS1zdXJmYWNlLS1hbmNob3J7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLW1lbnUtc3VyZmFjZS0tZml4ZWR7cG9zaXRpb246Zml4ZWR9Lm1kYy1tZW51LXN1cmZhY2UtLWZ1bGx3aWR0aHt3aWR0aDoxMDAlfW1hdC1tZW51e2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1tZW51LWNvbnRlbnR7bWFyZ2luOjA7cGFkZGluZzo4cHggMDtsaXN0LXN0eWxlLXR5cGU6bm9uZX0ubWF0LW1kYy1tZW51LWNvbnRlbnQ6Zm9jdXN7b3V0bGluZTpub25lfS5tYXQtbWRjLW1lbnUtcGFuZWwubmctYW5pbWF0aW5ne3BvaW50ZXItZXZlbnRzOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1tZW51LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtbWRjLW1lbnUtcGFuZWwubWF0LW1kYy1tZW51LXBhbmVse21pbi13aWR0aDoxMTJweDttYXgtd2lkdGg6MjgwcHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1tZW51LWl0ZW17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnQ7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7YmFja2dyb3VuZDpub25lO3RleHQtZGVjb3JhdGlvbjpub25lO21hcmdpbjowO21pbi1oZWlnaHQ6NDhweH0ubWF0LW1kYy1tZW51LWl0ZW06Zm9jdXN7b3V0bGluZTpub25lfVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LWl0ZW0sLm1hdC1tZGMtbWVudS1pdGVtW2Rpcj1ydGxde3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH0ubWF0LW1kYy1tZW51LWl0ZW06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZGMtbWVudS1pdGVtLm1kYy1saXN0LWl0ZW17YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouMzh9Lm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowfS5tYXQtbWRjLW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLW1lbnUtaXRlbXt0ZXh0LWFsaWduOnJpZ2h0fVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LWl0ZW0gLm1hdC1pY29ue21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1tZGMtbWVudS1pdGVtIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7d2hpdGUtc3BhY2U6bm9ybWFsfS5tYXQtbWRjLW1lbnUtaXRlbS5tYXQtbWRjLW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXJ7cGFkZGluZy1yaWdodDozMnB4fVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LWl0ZW0ubWF0LW1kYy1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MzJweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLW1lbnUtaXRlbXttYXJnaW4tdG9wOjFweH0ubWF0LW1kYy1tZW51LXN1Ym1lbnUtaWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6NXB4O2hlaWdodDoxMHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LXN1Ym1lbnUtaWNvbntyaWdodDphdXRvO2xlZnQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSBzY2FsZVgoLTEpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb257ZmlsbDpDYW52YXNUZXh0fS5tYXQtbWRjLW1lbnUtaXRlbSAubWF0LW1kYy1tZW51LXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W19FLnRyYW5zZm9ybU1lbnUsX0UuZmFkZUluSXRlbXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFFxPW5ldyBpZSgibWF0LW1lbnUtc2Nyb2xsLXN0cmF0ZWd5IiksUXhlPXtwcm92aWRlOlFxLGRlcHM6W3ppXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sWXE9cW8oe3Bhc3NpdmU6ITB9KSxaeGU9KCgpPT57Y2xhc3MgbntnZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcigpe3JldHVybiB0aGlzLm1lbnV9c2V0IF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IoZSl7dGhpcy5tZW51PWV9Z2V0IG1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudX1zZXQgbWVudShlKXtlIT09dGhpcy5fbWVudSYmKHRoaXMuX21lbnU9ZSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxlJiYodGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uPWUuY2xvc2Uuc3Vic2NyaWJlKGk9Pnt0aGlzLl9kZXN0cm95TWVudShpKSwoImNsaWNrIj09PWl8fCJ0YWIiPT09aSkmJnRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZC5lbWl0KGkpfSkpLHRoaXMuX21lbnVJdGVtSW5zdGFuY2U/Ll9zZXRUcmlnZ2Vyc1N1Ym1lbnUodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyxkKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZWxlbWVudD1pLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9cix0aGlzLl9tZW51SXRlbUluc3RhbmNlPWEsdGhpcy5fZGlyPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fbmdab25lPWQsdGhpcy5fb3ZlcmxheVJlZj1udWxsLHRoaXMuX21lbnVPcGVuPSExLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbj1Nbi5FTVBUWSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1haSgkdCksdGhpcy5faGFuZGxlVG91Y2hTdGFydD11PT57QnYodSl8fCh0aGlzLl9vcGVuZWRCeT0idG91Y2giKX0sdGhpcy5fb3BlbmVkQnk9dm9pZCAwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMubWVudU9wZW5lZD1uZXcgRix0aGlzLm9uTWVudU9wZW49dGhpcy5tZW51T3BlbmVkLHRoaXMubWVudUNsb3NlZD1uZXcgRix0aGlzLm9uTWVudUNsb3NlPXRoaXMubWVudUNsb3NlZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT1zIGluc3RhbmNlb2Ygcnk/czp2b2lkIDAsaS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsWXEpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2hhbmRsZUhvdmVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKSx0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlVG91Y2hTdGFydCxZcSksdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWdldCBtZW51T3Blbigpe3JldHVybiB0aGlzLl9tZW51T3Blbn1nZXQgZGlyKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9dHJpZ2dlcnNTdWJtZW51KCl7cmV0dXJuISEodGhpcy5fbWVudUl0ZW1JbnN0YW5jZSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51JiZ0aGlzLm1lbnUpfXRvZ2dsZU1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudU9wZW4/dGhpcy5jbG9zZU1lbnUoKTp0aGlzLm9wZW5NZW51KCl9b3Blbk1lbnUoKXtsZXQgZT10aGlzLm1lbnU7aWYodGhpcy5fbWVudU9wZW58fCFlKXJldHVybjtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KGUpLHI9aS5nZXRDb25maWcoKSxvPXIucG9zaXRpb25TdHJhdGVneTt0aGlzLl9zZXRQb3NpdGlvbihlLG8pLHIuaGFzQmFja2Ryb3A9bnVsbD09ZS5oYXNCYWNrZHJvcD8hdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKTplLmhhc0JhY2tkcm9wLGkuYXR0YWNoKHRoaXMuX2dldFBvcnRhbChlKSksZS5sYXp5Q29udGVudCYmZS5sYXp5Q29udGVudC5hdHRhY2godGhpcy5tZW51RGF0YSksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgpPT50aGlzLmNsb3NlTWVudSgpKSx0aGlzLl9pbml0TWVudShlKSxlIGluc3RhbmNlb2YgcnkmJihlLl9zdGFydEFuaW1hdGlvbigpLGUuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUob3QoZS5jbG9zZSkpLnN1YnNjcmliZSgoKT0+e28ud2l0aExvY2tlZFBvc2l0aW9uKCExKS5yZWFwcGx5TGFzdFBvc2l0aW9uKCksby53aXRoTG9ja2VkUG9zaXRpb24oITApfSkpfWNsb3NlTWVudSgpe3RoaXMubWVudT8uY2xvc2UuZW1pdCgpfWZvY3VzKGUsaSl7dGhpcy5fZm9jdXNNb25pdG9yJiZlP3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKX1fZGVzdHJveU1lbnUoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLm1lbnVPcGVuKXJldHVybjtsZXQgaT10aGlzLm1lbnU7dGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMucmVzdG9yZUZvY3VzJiYoImtleWRvd24iPT09ZXx8IXRoaXMuX29wZW5lZEJ5fHwhdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkmJnRoaXMuZm9jdXModGhpcy5fb3BlbmVkQnkpLHRoaXMuX29wZW5lZEJ5PXZvaWQgMCxpIGluc3RhbmNlb2Ygcnk/KGkuX3Jlc2V0QW5pbWF0aW9uKCksaS5sYXp5Q29udGVudD9pLl9hbmltYXRpb25Eb25lLnBpcGUoa2Uocj0+InZvaWQiPT09ci50b1N0YXRlKSxZdCgxKSxvdChpLmxhenlDb250ZW50Ll9hdHRhY2hlZCkpLnN1YnNjcmliZSh7bmV4dDooKT0+aS5sYXp5Q29udGVudC5kZXRhY2goKSxjb21wbGV0ZTooKT0+dGhpcy5fc2V0SXNNZW51T3BlbighMSl9KTp0aGlzLl9zZXRJc01lbnVPcGVuKCExKSk6KHRoaXMuX3NldElzTWVudU9wZW4oITEpLGk/LmxhenlDb250ZW50Py5kZXRhY2goKSl9X2luaXRNZW51KGUpe2UucGFyZW50TWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpP3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudTp2b2lkIDAsZS5kaXJlY3Rpb249dGhpcy5kaXIsdGhpcy5fc2V0TWVudUVsZXZhdGlvbihlKSxlLmZvY3VzRmlyc3RJdGVtKHRoaXMuX29wZW5lZEJ5fHwicHJvZ3JhbSIpLHRoaXMuX3NldElzTWVudU9wZW4oITApfV9zZXRNZW51RWxldmF0aW9uKGUpe2lmKGUuc2V0RWxldmF0aW9uKXtsZXQgaT0wLHI9ZS5wYXJlbnRNZW51O2Zvcig7cjspaSsrLHI9ci5wYXJlbnRNZW51O2Uuc2V0RWxldmF0aW9uKGkpfX1fc2V0SXNNZW51T3BlbihlKXtlIT09dGhpcy5fbWVudU9wZW4mJih0aGlzLl9tZW51T3Blbj1lLHRoaXMuX21lbnVPcGVuP3RoaXMubWVudU9wZW5lZC5lbWl0KCk6dGhpcy5tZW51Q2xvc2VkLmVtaXQoKSx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZ0aGlzLl9tZW51SXRlbUluc3RhbmNlLl9zZXRIaWdobGlnaHRlZChlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2NyZWF0ZU92ZXJsYXkoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWYpe2xldCBpPXRoaXMuX2dldE92ZXJsYXlDb25maWcoZSk7dGhpcy5fc3Vic2NyaWJlVG9Qb3NpdGlvbnMoZSxpLnBvc2l0aW9uU3RyYXRlZ3kpLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUoaSksdGhpcy5fb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKCl9cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9X2dldE92ZXJsYXlDb25maWcoZSl7cmV0dXJuIG5ldyBRYSh7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50KS53aXRoTG9ja2VkUG9zaXRpb24oKS53aXRoR3Jvd0FmdGVyT3BlbigpLndpdGhUcmFuc2Zvcm1PcmlnaW5PbigiLm1hdC1tZW51LXBhbmVsLCAubWF0LW1kYy1tZW51LXBhbmVsIiksYmFja2Ryb3BDbGFzczplLmJhY2tkcm9wQ2xhc3N8fCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIscGFuZWxDbGFzczplLm92ZXJsYXlQYW5lbENsYXNzLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksZGlyZWN0aW9uOnRoaXMuX2Rpcn0pfV9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhlLGkpe2Uuc2V0UG9zaXRpb25DbGFzc2VzJiZpLnBvc2l0aW9uQ2hhbmdlcy5zdWJzY3JpYmUocj0+e2xldCBvPSJzdGFydCI9PT1yLmNvbm5lY3Rpb25QYWlyLm92ZXJsYXlYPyJhZnRlciI6ImJlZm9yZSIscz0idG9wIj09PXIuY29ubmVjdGlvblBhaXIub3ZlcmxheVk/ImJlbG93IjoiYWJvdmUiO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5lLnNldFBvc2l0aW9uQ2xhc3NlcyhvLHMpKTplLnNldFBvc2l0aW9uQ2xhc3NlcyhvLHMpfSl9X3NldFBvc2l0aW9uKGUsaSl7bGV0W3Isb109ImJlZm9yZSI9PT1lLnhQb3NpdGlvbj9bImVuZCIsInN0YXJ0Il06WyJzdGFydCIsImVuZCJdLFtzLGFdPSJhYm92ZSI9PT1lLnlQb3NpdGlvbj9bImJvdHRvbSIsInRvcCJdOlsidG9wIiwiYm90dG9tIl0sW2wsY109W3MsYV0sW2QsdV09W3Isb10scD0wO2lmKHRoaXMudHJpZ2dlcnNTdWJtZW51KCkpe2lmKHU9cj0iYmVmb3JlIj09PWUueFBvc2l0aW9uPyJzdGFydCI6ImVuZCIsbz1kPSJlbmQiPT09cj8ic3RhcnQiOiJlbmQiLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSl7aWYobnVsbD09dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nKXtsZXQgZj10aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuaXRlbXMuZmlyc3Q7dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nPWY/Zi5fZ2V0SG9zdEVsZW1lbnQoKS5vZmZzZXRUb3A6MH1wPSJib3R0b20iPT09cz90aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc6LXRoaXMuX3BhcmVudElubmVyUGFkZGluZ319ZWxzZSBlLm92ZXJsYXBUcmlnZ2VyfHwobD0idG9wIj09PXM/ImJvdHRvbSI6InRvcCIsYz0idG9wIj09PWE/ImJvdHRvbSI6InRvcCIpO2kud2l0aFBvc2l0aW9ucyhbe29yaWdpblg6cixvcmlnaW5ZOmwsb3ZlcmxheVg6ZCxvdmVybGF5WTpzLG9mZnNldFk6cH0se29yaWdpblg6byxvcmlnaW5ZOmwsb3ZlcmxheVg6dSxvdmVybGF5WTpzLG9mZnNldFk6cH0se29yaWdpblg6cixvcmlnaW5ZOmMsb3ZlcmxheVg6ZCxvdmVybGF5WTphLG9mZnNldFk6LXB9LHtvcmlnaW5YOm8sb3JpZ2luWTpjLG92ZXJsYXlYOnUsb3ZlcmxheVk6YSxvZmZzZXRZOi1wfV0pfV9tZW51Q2xvc2luZ0FjdGlvbnMoKXtsZXQgZT10aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSxpPXRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKTtyZXR1cm4gdG4oZSx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU/dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZDpIdCgpLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKS5waXBlKGtlKHM9PnMhPT10aGlzLl9tZW51SXRlbUluc3RhbmNlKSxrZSgoKT0+dGhpcy5fbWVudU9wZW4pKTpIdCgpLGkpfV9oYW5kbGVNb3VzZWRvd24oZSl7THYoZSl8fCh0aGlzLl9vcGVuZWRCeT0wPT09ZS5idXR0b24/Im1vdXNlIjp2b2lkIDAsdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmZS5wcmV2ZW50RGVmYXVsdCgpKX1faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGU7KDEzPT09aXx8MzI9PT1pKSYmKHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIpLHRoaXMudHJpZ2dlcnNTdWJtZW51KCkmJigzOT09PWkmJiJsdHIiPT09dGhpcy5kaXJ8fDM3PT09aSYmInJ0bCI9PT10aGlzLmRpcikmJih0aGlzLl9vcGVuZWRCeT0ia2V5Ym9hcmQiLHRoaXMub3Blbk1lbnUoKSl9X2hhbmRsZUNsaWNrKGUpe3RoaXMudHJpZ2dlcnNTdWJtZW51KCk/KGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vcGVuTWVudSgpKTp0aGlzLnRvZ2dsZU1lbnUoKX1faGFuZGxlSG92ZXIoKXshdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKXx8IXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudXx8KHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoa2UoZT0+ZT09PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UmJiFlLmRpc2FibGVkKSxTYSgwLEFtKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3BlbmVkQnk9Im1vdXNlIix0aGlzLm1lbnUgaW5zdGFuY2VvZiByeSYmdGhpcy5tZW51Ll9pc0FuaW1hdGluZz90aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmUucGlwZShZdCgxKSxTYSgwLEFtKSxvdCh0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5vcGVuTWVudSgpKTp0aGlzLm9wZW5NZW51KCl9KSl9X2dldFBvcnRhbChlKXtyZXR1cm4oIXRoaXMuX3BvcnRhbHx8dGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmIT09ZS50ZW1wbGF0ZVJlZikmJih0aGlzLl9wb3J0YWw9bmV3IFlvKGUudGVtcGxhdGVSZWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZikpLHRoaXMuX3BvcnRhbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh6aSksQyhNZSksQyhzaSksQyhRcSksQyhlTiw4KSxDKGpsLDEwKSxDKFhpLDgpLEMoWHIpLEMoYXQpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVDbGljayhvKX0pKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZWRvd24obyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJkJlKCJhcmlhLWhhc3BvcHVwIixpLm1lbnU/Im1lbnUiOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLm1lbnVPcGVuKSgiYXJpYS1jb250cm9scyIsaS5tZW51T3Blbj9pLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yIl0sbWVudTpbIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudSJdLG1lbnVEYXRhOlsibWF0TWVudVRyaWdnZXJEYXRhIiwibWVudURhdGEiXSxyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifX0pLG59KSgpLExjPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaeGV7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCIiXSxbIiIsIm1hdE1lbnVUcmlnZ2VyRm9yIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1tZW51LXRyaWdnZXIiXSxleHBvcnRBczpbIm1hdE1lbnVUcmlnZ2VyIl0sZmVhdHVyZXM6W0tlXX0pLG59KSgpLGp1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1F4ZV0saW1wb3J0czpbUGUsQmwsZm4sQ28sUGMsZm5dfSksbn0pKCk7ZnVuY3Rpb24gS3hlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBKeGUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uICR4ZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsMTApfXZhciBXcz0oKCk9PihmdW5jdGlvbihuKXtuW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkRBUktfTU9ERV9PTj0xXT0iREFSS19NT0RFX09OIixuW24uREFSS19NT0RFX09GRj0yXT0iREFSS19NT0RFX09GRiJ9KFdzfHwoV3M9e30pKSxXcykpKCksWnE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGFya01vZGVPdmVycmlkZT1Xcyx0aGlzLm9uT3ZlcnJpZGVDaGFuZ2VkPW5ldyBGfWdldEJ1dHRvblRpdGxlKCl7bGV0IGU7c3dpdGNoKHRoaXMuZGFya01vZGVPdmVycmlkZSl7Y2FzZSBXcy5ERUZBVUxUOmU9IkJyb3dzZXIgZGVmYXVsdCI7YnJlYWs7Y2FzZSBXcy5EQVJLX01PREVfT046ZT0iRGFyayBtb2RlIjticmVhaztjYXNlIFdzLkRBUktfTU9ERV9PRkY6ZT0iTGlnaHQgbW9kZSJ9cmV0dXJuYEN1cnJlbnQgbW9kZTogWyR7ZX1dLiBTd2l0Y2ggYmV0d2VlbiBicm93c2VyIGRlZmF1bHQsIGxpZ2h0LCBvciBkYXJrIHRoZW1lLmB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiXV0saW5wdXRzOntkYXJrTW9kZU92ZXJyaWRlOiJkYXJrTW9kZU92ZXJyaWRlIn0sb3V0cHV0czp7b25PdmVycmlkZUNoYW5nZWQ6Im9uT3ZlcnJpZGVDaGFuZ2VkIn0sZGVjbHM6MTUsdmFyczo2LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIiwiTWVudSBmb3IgY2hhbmdpbmcgbGlnaHQgb3IgZGFyayB0aGVtZSIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJuZ1N3aXRjaCIsInRpdGxlIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzdmdJY29uIiwiZGFya19tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJ0aXRsZSIsIlNldCB0aGUgdGhlbWUgdG8gbWF0Y2ggdGhlIGRlZmF1bHQgbW9kZSBpbiB0aGUgYnJvd3Nlci4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBsaWdodCBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBkYXJrIFRlbnNvckJvYXJkIHRoZW1lLiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJicmlnaHRuZXNzXzZfMjRweCJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJidXR0b24iLDApLFMoMSxLeGUsMSwwLCJtYXQtaWNvbiIsMSksUygyLEp4ZSwxLDAsIm1hdC1pY29uIiwyKSxTKDMsJHhlLDEsMCwibWF0LWljb24iLDMpLGcoKSxoKDQsIm1hdC1tZW51IixudWxsLDQpKDYsImJ1dHRvbiIsNSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCl9KSxoKDcsImxhYmVsIiksVCg4LCJCcm93c2VyIGRlZmF1bHQiKSxnKCkoKSxoKDksImJ1dHRvbiIsNiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRil9KSxoKDEwLCJsYWJlbCIpLFQoMTEsIkxpZ2h0IiksZygpKCksaCgxMiwiYnV0dG9uIiw3KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT04pfSksaCgxMywibGFiZWwiKSxUKDE0LCJEYXJrIiksZygpKCkoKSksMiZlJiYoXygibWF0TWVudVRyaWdnZXJGb3IiLGl0KDUpKSgibmdTd2l0Y2giLGkuZGFya01vZGVPdmVycmlkZSkoInRpdGxlIixpLmdldEJ1dHRvblRpdGxlKCkpLHYoMSksXygibmdTd2l0Y2hDYXNlIixpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTikpfSxkZXBlbmRlbmNpZXM6WyRpLEVuLE5jLGpsLExjLHNyLFNyXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxLcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmRhcmtNb2RlT3ZlcnJpZGUkPXRoaXMuc3RvcmUuc2VsZWN0KGxTKS5waXBlKE4oaT0+bnVsbD09PWk/V3MuREVGQVVMVDppP1dzLkRBUktfTU9ERV9PTjpXcy5EQVJLX01PREVfT0ZGKSl9Y2hhbmdlRGFya01vZGUoZSl7bGV0IGk9bnVsbDtzd2l0Y2goZSl7Y2FzZSBXcy5ERUZBVUxUOmk9bnVsbDticmVhaztjYXNlIFdzLkRBUktfTU9ERV9PRkY6aT0hMTticmVhaztjYXNlIFdzLkRBUktfTU9ERV9PTjppPSEwfXRoaXMuc3RvcmUuZGlzcGF0Y2goV1Moe2VuYWJsZURhcmtNb2RlOml9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiZGFya01vZGVPdmVycmlkZSIsIm9uT3ZlcnJpZGVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50IiwwKSxJKCJvbk92ZXJyaWRlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuY2hhbmdlRGFya01vZGUobyl9KSxqKDEsImFzeW5jIiksZygpKSwyJmUmJl8oImRhcmtNb2RlT3ZlcnJpZGUiLFcoMSwxLGkuZGFya01vZGVPdmVycmlkZSQpKX0sZGVwZW5kZW5jaWVzOltacSxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gbkNlKG4sdCl7fXZhciBpQ2U9ZnVuY3Rpb24obil7cmV0dXJue2FuaW1hdGlvbkR1cmF0aW9uOm59fSxyQ2U9ZnVuY3Rpb24obix0KXtyZXR1cm57dmFsdWU6bixwYXJhbXM6dH19O2Z1bmN0aW9uIG9DZShuLHQpezEmbiYmenQoMCl9dmFyIGVZPVsiKiJdLHNDZT1bInRhYkxpc3RDb250YWluZXIiXSxhQ2U9WyJ0YWJMaXN0Il0sbENlPVsidGFiTGlzdElubmVyIl0sY0NlPVsibmV4dFBhZ2luYXRvciJdLGRDZT1bInByZXZpb3VzUGFnaW5hdG9yIl0sdUNlPVsidGFiQm9keVdyYXBwZXIiXSxwQ2U9WyJ0YWJIZWFkZXIiXTtmdW5jdGlvbiBmQ2Uobix0KXt9ZnVuY3Rpb24gbUNlKG4sdCl7MSZuJiZTKDAsZkNlLDAsMCwibmctdGVtcGxhdGUiLDE0KSwyJm4mJl8oImNka1BvcnRhbE91dGxldCIsdygpLiRpbXBsaWNpdC50ZW1wbGF0ZUxhYmVsKX1mdW5jdGlvbiBoQ2Uobix0KXsxJm4mJlQoMCksMiZuJiZidCh3KCkuJGltcGxpY2l0LnRleHRMYWJlbCl9ZnVuY3Rpb24gZ0NlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw2LDcpLEkoImNsaWNrIixmdW5jdGlvbigpe2xldCByPVgoZSksbz1yLiRpbXBsaWNpdCxzPXIuaW5kZXgsYT13KCksbD1pdCgxKTtyZXR1cm4gUShhLl9oYW5kbGVDbGljayhvLGwscykpfSkoImNka0ZvY3VzQ2hhbmdlIixmdW5jdGlvbihyKXtsZXQgcz1YKGUpLmluZGV4O3JldHVybiBRKHcoKS5fdGFiRm9jdXNDaGFuZ2VkKHIscykpfSksUCgyLCJzcGFuIiw4KSgzLCJkaXYiLDkpLGgoNCwic3BhbiIsMTApKDUsInNwYW4iLDExKSxTKDYsbUNlLDEsMSwibmctdGVtcGxhdGUiLDEyKSxTKDcsaENlLDEsMSwibmctdGVtcGxhdGUiLG51bGwsMTMsV3QpLGcoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1pdCgxKSxvPWl0KDgpLHM9dygpO250KCJtZGMtdGFiLS1hY3RpdmUiLHMuc2VsZWN0ZWRJbmRleD09PWkpLF8oImlkIixzLl9nZXRUYWJMYWJlbElkKGkpKSgibmdDbGFzcyIsZS5sYWJlbENsYXNzKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJmaXRJbmtCYXJUb0NvbnRlbnQiLHMuZml0SW5rQmFyVG9Db250ZW50KSxCZSgidGFiSW5kZXgiLHMuX2dldFRhYkluZGV4KGkpKSgiYXJpYS1wb3NpbnNldCIsaSsxKSgiYXJpYS1zZXRzaXplIixzLl90YWJzLmxlbmd0aCkoImFyaWEtY29udHJvbHMiLHMuX2dldFRhYkNvbnRlbnRJZChpKSkoImFyaWEtc2VsZWN0ZWQiLHMuc2VsZWN0ZWRJbmRleD09PWkpKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsIWUuYXJpYUxhYmVsJiZlLmFyaWFMYWJlbGxlZGJ5P2UuYXJpYUxhYmVsbGVkYnk6bnVsbCksdigzKSxfKCJtYXRSaXBwbGVUcmlnZ2VyIixyKSgibWF0UmlwcGxlRGlzYWJsZWQiLGUuZGlzYWJsZWR8fHMuZGlzYWJsZVJpcHBsZSksdigzKSxfKCJuZ0lmIixlLnRlbXBsYXRlTGFiZWwpKCJuZ0lmRWxzZSIsbyl9fWZ1bmN0aW9uIF9DZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC10YWItYm9keSIsMTUpLEkoIl9vbkNlbnRlcmVkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLl9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpKX0pKCJfb25DZW50ZXJpbmciLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLl9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj13KCk7bnQoIm1hdC1tZGMtdGFiLWJvZHktYWN0aXZlIixyLnNlbGVjdGVkSW5kZXg9PT1pKSxfKCJpZCIsci5fZ2V0VGFiQ29udGVudElkKGkpKSgibmdDbGFzcyIsZS5ib2R5Q2xhc3MpKCJjb250ZW50IixlLmNvbnRlbnQpKCJwb3NpdGlvbiIsZS5wb3NpdGlvbikoIm9yaWdpbiIsZS5vcmlnaW4pKCJhbmltYXRpb25EdXJhdGlvbiIsci5hbmltYXRpb25EdXJhdGlvbikoInByZXNlcnZlQ29udGVudCIsci5wcmVzZXJ2ZUNvbnRlbnQpLEJlKCJ0YWJpbmRleCIsbnVsbCE9ci5jb250ZW50VGFiSW5kZXgmJnIuc2VsZWN0ZWRJbmRleD09PWk/ci5jb250ZW50VGFiSW5kZXg6bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsci5fZ2V0VGFiTGFiZWxJZChpKSl9fXZhciBiQ2U9e3RyYW5zbGF0ZVRhYjpfcigidHJhbnNsYXRlVGFiIixbd2koImNlbnRlciwgdm9pZCwgbGVmdC1vcmlnaW4tY2VudGVyLCByaWdodC1vcmlnaW4tY2VudGVyIixybih7dHJhbnNmb3JtOiJub25lIn0pKSx3aSgibGVmdCIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSx3aSgicmlnaHQiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxnaSgiKiA9PiBsZWZ0LCAqID0+IHJpZ2h0LCBsZWZ0ID0+IGNlbnRlciwgcmlnaHQgPT4gY2VudGVyIixDaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpKSxnaSgidm9pZCA9PiBsZWZ0LW9yaWdpbi1jZW50ZXIiLFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxDaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpXSksZ2koInZvaWQgPT4gcmlnaHQtb3JpZ2luLWNlbnRlciIsW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIix2aXNpYmlsaXR5OiJoaWRkZW4ifSksQ2koInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKV0pXSl9LHZDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcHN7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLG8pLHRoaXMuX2hvc3Q9cix0aGlzLl9jZW50ZXJpbmdTdWI9TW4uRU1QVFksdGhpcy5fbGVhdmluZ1N1Yj1Nbi5FTVBUWX1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5fY2VudGVyaW5nU3ViPXRoaXMuX2hvc3QuX2JlZm9yZUNlbnRlcmluZy5waXBlKHFuKHRoaXMuX2hvc3QuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5faG9zdC5fcG9zaXRpb24pKSkuc3Vic2NyaWJlKGU9PntlJiYhdGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmF0dGFjaCh0aGlzLl9ob3N0Ll9jb250ZW50KX0pLHRoaXMuX2xlYXZpbmdTdWI9dGhpcy5faG9zdC5fYWZ0ZXJMZWF2aW5nQ2VudGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hvc3QucHJlc2VydmVDb250ZW50fHx0aGlzLmRldGFjaCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2NlbnRlcmluZ1N1Yi51bnN1YnNjcmliZSgpLHRoaXMuX2xlYXZpbmdTdWIudW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhmbyksQyhzaSksQygkbigoKT0+dFkpKSxDKEx0KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRhYkJvZHlIb3N0IiwiIl1dLGZlYXR1cmVzOltLZV19KSxufSkoKSx5Q2U9KCgpPT57Y2xhc3MgbntzZXQgcG9zaXRpb24oZSl7dGhpcy5fcG9zaXRpb25JbmRleD1lLHRoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKCl9Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kaXI9aSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249TW4uRU1QVFksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGU9bmV3IEllLHRoaXMuX29uQ2VudGVyaW5nPW5ldyBGLHRoaXMuX2JlZm9yZUNlbnRlcmluZz1uZXcgRix0aGlzLl9hZnRlckxlYXZpbmdDZW50ZXI9bmV3IEYsdGhpcy5fb25DZW50ZXJlZD1uZXcgRighMCksdGhpcy5hbmltYXRpb25EdXJhdGlvbj0iNTAwbXMiLHRoaXMucHJlc2VydmVDb250ZW50PSExLGkmJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249aS5jaGFuZ2Uuc3Vic2NyaWJlKG89Pnt0aGlzLl9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZShvKSxyLm1hcmtGb3JDaGVjaygpfSkpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLnBpcGUoWW4oKG8scyk9Pm8uZnJvbVN0YXRlPT09cy5mcm9tU3RhdGUmJm8udG9TdGF0ZT09PXMudG9TdGF0ZSkpLnN1YnNjcmliZShvPT57dGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLnRvU3RhdGUpJiZ0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fb25DZW50ZXJlZC5lbWl0KCksdGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLmZyb21TdGF0ZSkmJiF0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fYWZ0ZXJMZWF2aW5nQ2VudGVyLmVtaXQoKX0pfW5nT25Jbml0KCl7ImNlbnRlciI9PXRoaXMuX3Bvc2l0aW9uJiZudWxsIT10aGlzLm9yaWdpbiYmKHRoaXMuX3Bvc2l0aW9uPXRoaXMuX2NvbXB1dGVQb3NpdGlvbkZyb21PcmlnaW4odGhpcy5vcmlnaW4pKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLmNvbXBsZXRlKCl9X29uVHJhbnNsYXRlVGFiU3RhcnRlZChlKXtsZXQgaT10aGlzLl9pc0NlbnRlclBvc2l0aW9uKGUudG9TdGF0ZSk7dGhpcy5fYmVmb3JlQ2VudGVyaW5nLmVtaXQoaSksaSYmdGhpcy5fb25DZW50ZXJpbmcuZW1pdCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0KX1fZ2V0TGF5b3V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9X2lzQ2VudGVyUG9zaXRpb24oZSl7cmV0dXJuImNlbnRlciI9PWV8fCJsZWZ0LW9yaWdpbi1jZW50ZXIiPT1lfHwicmlnaHQtb3JpZ2luLWNlbnRlciI9PWV9X2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKGU9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpe3RoaXMuX3Bvc2l0aW9uPXRoaXMuX3Bvc2l0aW9uSW5kZXg8MD8ibHRyIj09ZT8ibGVmdCI6InJpZ2h0Ijp0aGlzLl9wb3NpdGlvbkluZGV4PjA/Imx0ciI9PWU/InJpZ2h0IjoibGVmdCI6ImNlbnRlciJ9X2NvbXB1dGVQb3NpdGlvbkZyb21PcmlnaW4oZSl7bGV0IGk9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk7cmV0dXJuImx0ciI9PWkmJmU8PTB8fCJydGwiPT1pJiZlPjA/ImxlZnQtb3JpZ2luLWNlbnRlciI6InJpZ2h0LW9yaWdpbi1jZW50ZXIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKFhpLDgpLEMoJHQpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixpbnB1dHM6e19jb250ZW50OlsiY29udGVudCIsIl9jb250ZW50Il0sb3JpZ2luOiJvcmlnaW4iLGFuaW1hdGlvbkR1cmF0aW9uOiJhbmltYXRpb25EdXJhdGlvbiIscHJlc2VydmVDb250ZW50OiJwcmVzZXJ2ZUNvbnRlbnQiLHBvc2l0aW9uOiJwb3NpdGlvbiJ9LG91dHB1dHM6e19vbkNlbnRlcmluZzoiX29uQ2VudGVyaW5nIixfYmVmb3JlQ2VudGVyaW5nOiJfYmVmb3JlQ2VudGVyaW5nIixfYWZ0ZXJMZWF2aW5nQ2VudGVyOiJfYWZ0ZXJMZWF2aW5nQ2VudGVyIixfb25DZW50ZXJlZDoiX29uQ2VudGVyZWQifX0pLG59KSgpLHRZPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5Q2V7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSxyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyhYaSw4KSxDKCR0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRhYi1ib2R5Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UocHMsNSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5fcG9ydGFsSG9zdD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LW1kYy10YWItYm9keSJdLGZlYXR1cmVzOltLZV0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbImNka1Njcm9sbGFibGUiLCIiLDEsIm1hdC1tZGMtdGFiLWJvZHktY29udGVudCJdLFsiY29udGVudCIsIiJdLFsibWF0VGFiQm9keUhvc3QiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCwxKSxJKCJAdHJhbnNsYXRlVGFiLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25UcmFuc2xhdGVUYWJTdGFydGVkKG8pfSkoIkB0cmFuc2xhdGVUYWIuZG9uZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLm5leHQobyl9KSxTKDIsbkNlLDAsMCwibmctdGVtcGxhdGUiLDIpLGcoKSksMiZlJiZfKCJAdHJhbnNsYXRlVGFiIixxcigzLHJDZSxpLl9wb3NpdGlvbixJbigxLGlDZSxpLmFuaW1hdGlvbkR1cmF0aW9uKSkpfSxkZXBlbmRlbmNpZXM6W3ZDZV0sc3R5bGVzOlsnLm1hdC1tZGMtdGFiLWJvZHl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47b3V0bGluZTowO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LW1kYy10YWItYm9keS5tYXQtbWRjLXRhYi1ib2R5LWFjdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87ei1pbmRleDoxO2ZsZXgtZ3JvdzoxfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtbWRjLXRhYi1ncm91cC1keW5hbWljLWhlaWdodCAubWF0LW1kYy10YWItYm9keS5tYXQtbWRjLXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn0ubWF0LW1kYy10YWItYm9keS1jb250ZW50e2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC1tZGMtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtbWRjLXRhYi1ib2R5LWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtbWRjLXRhYi1ib2R5LWNvbnRlbnRbc3R5bGUqPSJ2aXNpYmlsaXR5OiBoaWRkZW4iXXtkaXNwbGF5Om5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYkNlLnRyYW5zbGF0ZVRhYl19fSksbn0pKCkseENlPW5ldyBpZSgiTWF0VGFiQ29udGVudCIpLENDZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMudGVtcGxhdGU9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhTaSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJDb250ZW50IiwiIl1dLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6eENlLHVzZUV4aXN0aW5nOm59XSldfSksbn0pKCksTUNlPW5ldyBpZSgiTWF0VGFiTGFiZWwiKSxuWT1uZXcgaWUoIk1BVF9UQUIiKSxyTj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgazd7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fY2xvc2VzdFRhYj1yfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFNpKSxDKHNpKSxDKG5ZLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LXRhYi1sYWJlbCIsIiJdLFsiIiwibWF0VGFiTGFiZWwiLCIiXV0sZmVhdHVyZXM6W1F0KFt7cHJvdmlkZTpNQ2UsdXNlRXhpc3Rpbmc6bn1dKSxLZV19KSxufSkoKSx0Tj0ibWRjLXRhYi1pbmRpY2F0b3ItLWFjdGl2ZSIsSnE9Im1kYy10YWItaW5kaWNhdG9yLS1uby10cmFuc2l0aW9uIjtmdW5jdGlvbiBpWShuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX2ZpdFRvQ29udGVudD0hMX1nZXQgZml0SW5rQmFyVG9Db250ZW50KCl7cmV0dXJuIHRoaXMuX2ZpdFRvQ29udGVudH1zZXQgZml0SW5rQmFyVG9Db250ZW50KHQpe2xldCBlPVJ0KHQpO3RoaXMuX2ZpdFRvQ29udGVudCE9PWUmJih0aGlzLl9maXRUb0NvbnRlbnQ9ZSx0aGlzLl9pbmtCYXJFbGVtZW50JiZ0aGlzLl9hcHBlbmRJbmtCYXJFbGVtZW50KCkpfWFjdGl2YXRlSW5rQmFyKHQpe2xldCBlPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKCF0fHwhZS5nZXRCb3VuZGluZ0NsaWVudFJlY3R8fCF0aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudClyZXR1cm4gdm9pZCBlLmNsYXNzTGlzdC5hZGQodE4pO2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10LndpZHRoL2kud2lkdGgsbz10LmxlZnQtaS5sZWZ0O2UuY2xhc3NMaXN0LmFkZChKcSksdGhpcy5faW5rQmFyQ29udGVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZVgoJHtvfXB4KSBzY2FsZVgoJHtyfSlgKSxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGUuY2xhc3NMaXN0LnJlbW92ZShKcSksZS5jbGFzc0xpc3QuYWRkKHROKSx0aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgidHJhbnNmb3JtIiwiIil9ZGVhY3RpdmF0ZUlua0Jhcigpe3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodE4pfW5nT25Jbml0KCl7dGhpcy5fY3JlYXRlSW5rQmFyRWxlbWVudCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW5rQmFyRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5faW5rQmFyRWxlbWVudD10aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudD1udWxsfV9jcmVhdGVJbmtCYXJFbGVtZW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQ7dGhpcy5faW5rQmFyRWxlbWVudD10LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSx0aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudD10LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSx0aGlzLl9pbmtCYXJFbGVtZW50LmNsYXNzTmFtZT0ibWRjLXRhYi1pbmRpY2F0b3IiLHRoaXMuX2lua0JhckNvbnRlbnRFbGVtZW50LmNsYXNzTmFtZT0ibWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQgbWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSIsdGhpcy5faW5rQmFyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudCksdGhpcy5fYXBwZW5kSW5rQmFyRWxlbWVudCgpfV9hcHBlbmRJbmtCYXJFbGVtZW50KCl7KHRoaXMuX2ZpdFRvQ29udGVudD90aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIubWRjLXRhYl9fY29udGVudCIpOnRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5hcHBlbmRDaGlsZCh0aGlzLl9pbmtCYXJFbGVtZW50KX19fW5ldyBpZSgiTWF0SW5rQmFyUG9zaXRpb25lciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gdD0+KHtsZWZ0OnQ/KHQub2Zmc2V0TGVmdHx8MCkrInB4IjoiMCIsd2lkdGg6dD8odC5vZmZzZXRXaWR0aHx8MCkrInB4IjoiMCJ9KX19KTt2YXIgU0NlPXNvKGNsYXNze30pLEVDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgU0Nle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5lbGVtZW50UmVmPWV9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldE9mZnNldExlZnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdH1nZXRPZmZzZXRXaWR0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGZlYXR1cmVzOltLZV19KSxufSkoKSxUQ2U9aVkoRUNlKSxyWT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVENle31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRhYkxhYmVsV3JhcHBlciIsIiJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKEJlKCJhcmlhLWRpc2FibGVkIiwhIWkuZGlzYWJsZWQpLG50KCJtYXQtbWRjLXRhYi1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZml0SW5rQmFyVG9Db250ZW50OiJmaXRJbmtCYXJUb0NvbnRlbnQifSxmZWF0dXJlczpbS2VdfSksbn0pKCksRENlPXNvKGNsYXNze30pLG9ZPW5ldyBpZSgiTUFUX1RBQl9HUk9VUCIpLElDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRENle2dldCBjb250ZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRQb3J0YWx9Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl9jbG9zZXN0VGFiR3JvdXA9aSx0aGlzLnRleHRMYWJlbD0iIix0aGlzLl9jb250ZW50UG9ydGFsPW51bGwsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBJZSx0aGlzLnBvc2l0aW9uPW51bGwsdGhpcy5vcmlnaW49bnVsbCx0aGlzLmlzQWN0aXZlPSExfW5nT25DaGFuZ2VzKGUpeyhlLmhhc093blByb3BlcnR5KCJ0ZXh0TGFiZWwiKXx8ZS5oYXNPd25Qcm9wZXJ0eSgiZGlzYWJsZWQiKSkmJnRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1uZ09uSW5pdCgpe3RoaXMuX2NvbnRlbnRQb3J0YWw9bmV3IFlvKHRoaXMuX2V4cGxpY2l0Q29udGVudHx8dGhpcy5faW1wbGljaXRDb250ZW50LHRoaXMuX3ZpZXdDb250YWluZXJSZWYpfV9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl7ZSYmZS5fY2xvc2VzdFRhYj09PXRoaXMmJih0aGlzLl90ZW1wbGF0ZUxhYmVsPWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHNpKSxDKG9ZLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bix2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKFNpLDcpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuX2ltcGxpY2l0Q29udGVudD1yLmZpcnN0KX19LGlucHV0czp7dGV4dExhYmVsOlsibGFiZWwiLCJ0ZXh0TGFiZWwiXSxhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGxhYmVsQ2xhc3M6ImxhYmVsQ2xhc3MiLGJvZHlDbGFzczoiYm9keUNsYXNzIn0sZmVhdHVyZXM6W0tlLEd0XX0pLG59KSgpLHN5PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJQ2V7Z2V0IHRlbXBsYXRlTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVMYWJlbH1zZXQgdGVtcGxhdGVMYWJlbChlKXt0aGlzLl9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihUaShyLENDZSw3LFNpKSxUaShyLHJOLDUpKSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLl9leHBsaWNpdENvbnRlbnQ9by5maXJzdCksU2Uobz1FZSgpKSYmKGkudGVtcGxhdGVMYWJlbD1vLmZpcnN0KX19LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sZXhwb3J0QXM6WyJtYXRUYWIiXSxmZWF0dXJlczpbUXQoW3twcm92aWRlOm5ZLHVzZUV4aXN0aW5nOm59XSksS2VdLG5nQ29udGVudFNlbGVjdG9yczplWSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksUygwLG9DZSwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSwkcT1xbyh7cGFzc2l2ZTohMH0pLHNZPSgoKT0+e2NsYXNzIG57Z2V0IGRpc2FibGVQYWdpbmF0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVQYWdpbmF0aW9ufXNldCBkaXNhYmxlUGFnaW5hdGlvbihlKXt0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj1SdChlKX1nZXQgc2VsZWN0ZWRJbmRleCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4fXNldCBzZWxlY3RlZEluZGV4KGUpe2U9X2koZSksdGhpcy5fc2VsZWN0ZWRJbmRleCE9ZSYmKHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSEwLHRoaXMuX3NlbGVjdGVkSW5kZXg9ZSx0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oZSkpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3ZpZXdwb3J0UnVsZXI9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9cyx0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX2FuaW1hdGlvbk1vZGU9bCx0aGlzLl9zY3JvbGxEaXN0YW5jZT0wLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgSWUsdGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scz0hMSx0aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9ITAsdGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0hMCx0aGlzLl9zdG9wU2Nyb2xsaW5nPW5ldyBJZSx0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLl9zZWxlY3RlZEluZGV4PTAsdGhpcy5zZWxlY3RGb2N1c2VkSW5kZXg9bmV3IEYsdGhpcy5pbmRleEZvY3VzZWQ9bmV3IEYscy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e21pKGUubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fc3RvcEludGVydmFsKCl9KX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe21pKHRoaXMuX3ByZXZpb3VzUGFnaW5hdG9yLm5hdGl2ZUVsZW1lbnQsInRvdWNoc3RhcnQiLCRxKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiKX0pLG1pKHRoaXMuX25leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIsJHEpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImFmdGVyIil9KX1uZ0FmdGVyQ29udGVudEluaXQoKXtsZXQgZT10aGlzLl9kaXI/dGhpcy5fZGlyLmNoYW5nZTpIdCgibHRyIiksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxNTApLHI9KCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKX07dGhpcy5fa2V5TWFuYWdlcj1uZXcgc2codGhpcy5faXRlbXMpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpLndpdGhIb21lQW5kRW5kKCkud2l0aFdyYXAoKS5za2lwUHJlZGljYXRlKCgpPT4hMSksdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFl0KDEpKS5zdWJzY3JpYmUociksdG4oZSxpLHRoaXMuX2l0ZW1zLmNoYW5nZXMsdGhpcy5faXRlbXNSZXNpemVkKCkpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fbmdab25lLnJ1bigoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9zY3JvbGxEaXN0YW5jZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2UpKSxyKCl9KX0pLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9KSx0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5zdWJzY3JpYmUobz0+e3RoaXMuaW5kZXhGb2N1c2VkLmVtaXQobyksdGhpcy5fc2V0VGFiRm9jdXMobyl9KX1faXRlbXNSZXNpemVkKCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIFJlc2l6ZU9ic2VydmVyP0pyOnRoaXMuX2l0ZW1zLmNoYW5nZXMucGlwZShxbih0aGlzLl9pdGVtcyksSm4oZT0+bmV3IEt0KGk9PnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCByPW5ldyBSZXNpemVPYnNlcnZlcihvPT5pLm5leHQobykpO3JldHVybiBlLmZvckVhY2gobz0+ci5vYnNlcnZlKG8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSksKCk9PntyLmRpc2Nvbm5lY3QoKX19KSkpLGlhKDEpLGtlKGU9PmUuc29tZShpPT5pLmNvbnRlbnRSZWN0LndpZHRoPjAmJmkuY29udGVudFJlY3QuaGVpZ2h0PjApKSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5fdGFiTGFiZWxDb3VudCE9dGhpcy5faXRlbXMubGVuZ3RoJiYodGhpcy51cGRhdGVQYWdpbmF0aW9uKCksdGhpcy5fdGFiTGFiZWxDb3VudD10aGlzLl9pdGVtcy5sZW5ndGgsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkJiYodGhpcy5fc2Nyb2xsVG9MYWJlbCh0aGlzLl9zZWxlY3RlZEluZGV4KSx0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCksdGhpcy5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCksdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZCYmKHRoaXMuX3VwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2tleU1hbmFnZXI/LmRlc3Ryb3koKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3N0b3BTY3JvbGxpbmcuY29tcGxldGUoKX1faGFuZGxlS2V5ZG93bihlKXtpZighdnIoZSkpc3dpdGNoKGUua2V5Q29kZSl7Y2FzZSAxMzpjYXNlIDMyOmlmKHRoaXMuZm9jdXNJbmRleCE9PXRoaXMuc2VsZWN0ZWRJbmRleCl7bGV0IGk9dGhpcy5faXRlbXMuZ2V0KHRoaXMuZm9jdXNJbmRleCk7aSYmIWkuZGlzYWJsZWQmJih0aGlzLnNlbGVjdEZvY3VzZWRJbmRleC5lbWl0KHRoaXMuZm9jdXNJbmRleCksdGhpcy5faXRlbVNlbGVjdGVkKGUpKX1icmVhaztkZWZhdWx0OnRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGUpfX1fb25Db250ZW50Q2hhbmdlcygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtlIT09dGhpcy5fY3VycmVudFRleHRDb250ZW50JiYodGhpcy5fY3VycmVudFRleHRDb250ZW50PWV8fCIiLHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpfWdldCBmb2N1c0luZGV4KCl7cmV0dXJuIHRoaXMuX2tleU1hbmFnZXI/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg6MH1zZXQgZm9jdXNJbmRleChlKXshdGhpcy5faXNWYWxpZEluZGV4KGUpfHx0aGlzLmZvY3VzSW5kZXg9PT1lfHwhdGhpcy5fa2V5TWFuYWdlcnx8dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpfV9pc1ZhbGlkSW5kZXgoZSl7cmV0dXJuIXRoaXMuX2l0ZW1zfHwhIXRoaXMuX2l0ZW1zLnRvQXJyYXkoKVtlXX1fc2V0VGFiRm9jdXMoZSl7aWYodGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scyYmdGhpcy5fc2Nyb2xsVG9MYWJlbChlKSx0aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoKXt0aGlzLl9pdGVtcy50b0FycmF5KClbZV0uZm9jdXMoKTtsZXQgaT10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7aS5zY3JvbGxMZWZ0PSJsdHIiPT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8wOmkuc2Nyb2xsV2lkdGgtaS5vZmZzZXRXaWR0aH19X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJuO2xldCBlPXRoaXMuc2Nyb2xsRGlzdGFuY2UsaT0ibHRyIj09PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPy1lOmU7dGhpcy5fdGFiTGlzdC5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoaSl9cHgpYCwodGhpcy5fcGxhdGZvcm0uVFJJREVOVHx8dGhpcy5fcGxhdGZvcm0uRURHRSkmJih0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdD0wKX1nZXQgc2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2V9c2V0IHNjcm9sbERpc3RhbmNlKGUpe3RoaXMuX3Njcm9sbFRvKGUpfV9zY3JvbGxIZWFkZXIoZSl7cmV0dXJuIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Njcm9sbERpc3RhbmNlKygiYmVmb3JlIj09ZT8tMToxKSp0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgvMyl9X2hhbmRsZVBhZ2luYXRvckNsaWNrKGUpe3RoaXMuX3N0b3BJbnRlcnZhbCgpLHRoaXMuX3Njcm9sbEhlYWRlcihlKX1fc2Nyb2xsVG9MYWJlbChlKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtsZXQgaT10aGlzLl9pdGVtcz90aGlzLl9pdGVtcy50b0FycmF5KClbZV06bnVsbDtpZighaSlyZXR1cm47bGV0IGEsbCxyPXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCx7b2Zmc2V0TGVmdDpvLG9mZnNldFdpZHRoOnN9PWkuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50OyJsdHIiPT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8oYT1vLGw9YStzKToobD10aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aC1vLGE9bC1zKTtsZXQgYz10aGlzLnNjcm9sbERpc3RhbmNlLGQ9dGhpcy5zY3JvbGxEaXN0YW5jZStyO2E8Yz90aGlzLnNjcm9sbERpc3RhbmNlLT1jLWE6bD5kJiYodGhpcy5zY3JvbGxEaXN0YW5jZSs9TWF0aC5taW4obC1kLGEtYykpfV9jaGVja1BhZ2luYXRpb25FbmFibGVkKCl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbil0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPSExO2Vsc2V7bGV0IGU9dGhpcy5fdGFiTGlzdElubmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg+dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO2V8fCh0aGlzLnNjcm9sbERpc3RhbmNlPTApLGUhPT10aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzJiZ0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPWV9fV9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCl7dGhpcy5kaXNhYmxlUGFnaW5hdGlvbj90aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9dGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0hMDoodGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0wPT10aGlzLnNjcm9sbERpc3RhbmNlLHRoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLnNjcm9sbERpc3RhbmNlPT10aGlzLl9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fdGFiTGlzdElubmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGgtdGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwwfV9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKXtsZXQgZT10aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVt0aGlzLnNlbGVjdGVkSW5kZXhdOm51bGwsaT1lP2UuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGw7aT90aGlzLl9pbmtCYXIuYWxpZ25Ub0VsZW1lbnQoaSk6dGhpcy5faW5rQmFyLmhpZGUoKX1fc3RvcEludGVydmFsKCl7dGhpcy5fc3RvcFNjcm9sbGluZy5uZXh0KCl9X2hhbmRsZVBhZ2luYXRvclByZXNzKGUsaSl7aSYmbnVsbCE9aS5idXR0b24mJjAhPT1pLmJ1dHRvbnx8KHRoaXMuX3N0b3BJbnRlcnZhbCgpLG5hKDY1MCwxMDApLnBpcGUob3QodG4odGhpcy5fc3RvcFNjcm9sbGluZyx0aGlzLl9kZXN0cm95ZWQpKSkuc3Vic2NyaWJlKCgpPT57bGV0e21heFNjcm9sbERpc3RhbmNlOnIsZGlzdGFuY2U6b309dGhpcy5fc2Nyb2xsSGVhZGVyKGUpOygwPT09b3x8bz49cikmJnRoaXMuX3N0b3BJbnRlcnZhbCgpfSkpfV9zY3JvbGxUbyhlKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybnttYXhTY3JvbGxEaXN0YW5jZTowLGRpc3RhbmNlOjB9O2xldCBpPXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCk7cmV0dXJuIHRoaXMuX3Njcm9sbERpc3RhbmNlPU1hdGgubWF4KDAsTWF0aC5taW4oaSxlKSksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkPSEwLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx7bWF4U2Nyb2xsRGlzdGFuY2U6aSxkaXN0YW5jZTp0aGlzLl9zY3JvbGxEaXN0YW5jZX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoJHQpLEMoanMpLEMoWGksOCksQyhhdCksQyhHbiksQyhoaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4saW5wdXRzOntkaXNhYmxlUGFnaW5hdGlvbjoiZGlzYWJsZVBhZ2luYXRpb24ifX0pLG59KSgpLFBDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgc1l7Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX1zZXQgZGlzYWJsZVJpcHBsZShlKXt0aGlzLl9kaXNhYmxlUmlwcGxlPVJ0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKGUsaSxyLG8scyxhLGwpLHRoaXMuX2Rpc2FibGVSaXBwbGU9ITF9X2l0ZW1TZWxlY3RlZChlKXtlLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoJHQpLEMoanMpLEMoWGksOCksQyhhdCksQyhHbiksQyhoaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZmVhdHVyZXM6W0tlXX0pLG59KSgpLE9DZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUENle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKGUsaSxyLG8scyxhLGwpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2lua0Jhcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5faXRlbXM9dH1oaWRlKCl7dGhpcy5faXRlbXMuZm9yRWFjaCh0PT50LmRlYWN0aXZhdGVJbmtCYXIoKSl9YWxpZ25Ub0VsZW1lbnQodCl7bGV0IGU9dGhpcy5faXRlbXMuZmluZChyPT5yLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD09PXQpLGk9dGhpcy5fY3VycmVudEl0ZW07aWYoaT8uZGVhY3RpdmF0ZUlua0JhcigpLGUpe2xldCByPWk/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/LigpO2UuYWN0aXZhdGVJbmtCYXIociksdGhpcy5fY3VycmVudEl0ZW09ZX19fSh0aGlzLl9pdGVtcyksc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoJHQpLEMoanMpLEMoWGksOCksQyhhdCksQyhHbiksQyhoaSw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRhYi1oZWFkZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmVGkocixyWSw0KSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLl9pdGVtcz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEdlKHNDZSw3KSxHZShhQ2UsNyksR2UobENlLDcpLEdlKGNDZSw1KSxHZShkQ2UsNSkpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuX3RhYkxpc3RDb250YWluZXI9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX3RhYkxpc3Q9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX3RhYkxpc3RJbm5lcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5fbmV4dFBhZ2luYXRvcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5fcHJldmlvdXNQYWdpbmF0b3I9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtdGFiLWhlYWRlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgibWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCIsaS5fc2hvd1BhZ2luYXRpb25Db250cm9scykoIm1hdC1tZGMtdGFiLWhlYWRlci1ydGwiLCJydGwiPT1pLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9LGlucHV0czp7c2VsZWN0ZWRJbmRleDoic2VsZWN0ZWRJbmRleCJ9LG91dHB1dHM6e3NlbGVjdEZvY3VzZWRJbmRleDoic2VsZWN0Rm9jdXNlZEluZGV4IixpbmRleEZvY3VzZWQ6ImluZGV4Rm9jdXNlZCJ9LGZlYXR1cmVzOltLZV0sbmdDb250ZW50U2VsZWN0b3JzOmVZLGRlY2xzOjEzLHZhcnM6MTAsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJtYXQtcmlwcGxlIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24iLCJtYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiLCJjbGljayIsIm1vdXNlZG93biIsInRvdWNoZW5kIl0sWyJwcmV2aW91c1BhZ2luYXRvciIsIiJdLFsxLCJtYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIl0sWzEsIm1hdC1tZGMtdGFiLWxhYmVsLWNvbnRhaW5lciIsMywia2V5ZG93biJdLFsidGFiTGlzdENvbnRhaW5lciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLDEsIm1hdC1tZGMtdGFiLWxpc3QiLDMsImNka09ic2VydmVDb250ZW50Il0sWyJ0YWJMaXN0IiwiIl0sWzEsIm1hdC1tZGMtdGFiLWxhYmVscyJdLFsidGFiTGlzdElubmVyIiwiIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwibWF0LXJpcHBsZSIsIiIsInRhYmluZGV4IiwiLTEiLDEsIm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiLCJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoZW5kIl0sWyJuZXh0UGFnaW5hdG9yIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oKSxoKDAsImJ1dHRvbiIsMCwxKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImJlZm9yZSIpfSkoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiLG8pfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLFAoMiwiZGl2IiwyKSxnKCksaCgzLCJkaXYiLDMsNCksSSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSxoKDUsImRpdiIsNSw2KSxJKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Db250ZW50Q2hhbmdlcygpfSksaCg3LCJkaXYiLDcsOCksenQoOSksZygpKCkoKSxoKDEwLCJidXR0b24iLDksMTApLEkoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIsbyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvckNsaWNrKCJhZnRlciIpfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLFAoMTIsImRpdiIsMiksZygpKSwyJmUmJihudCgibWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxCZWZvcmUpLF8oIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEJlZm9yZXx8bnVsbCksdigzKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSx2KDcpLG50KCJtYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEFmdGVyKSxfKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEFmdGVyfHxpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEFmdGVyfHxudWxsKSl9LGRlcGVuZGVuY2llczpbbW8sUDFdLHN0eWxlczpbIi5tYXQtbWRjLXRhYi1oZWFkZXJ7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowfS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOjMycHg7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RvdWNoLWFjdGlvbjpub25lO2JveC1zaXppbmc6Y29udGVudC1ib3g7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO291dGxpbmU6MDtwYWRkaW5nOjB9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjEyfS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntkaXNwbGF5OmZsZXh9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LW1kYy10YWItaGVhZGVyLXJ0bCAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1sZWZ0OjRweH0ubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtbWRjLXRhYi1oZWFkZXItcnRsIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbnt0cmFuc2Zvcm06cm90YXRlKC0xMzVkZWcpfS5tYXQtbWRjLXRhYi1oZWFkZXItcnRsIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctcmlnaHQ6NHB4fS5tYXQtbWRjLXRhYi1oZWFkZXItcnRsIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MnB4IDJweCAwIDA7aGVpZ2h0OjhweDt3aWR0aDo4cHh9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVke2JveC1zaGFkb3c6bm9uZTtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntvcGFjaXR5Oi40fS5tYXQtbWRjLXRhYi1saXN0e2ZsZXgtZ3JvdzoxO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246dHJhbnNmb3JtIDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1tZGMtdGFiLWxpc3R7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBzcGFuLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBzcGFuLm1kYy10YWJfX3RleHQtbGFiZWx7dHJhbnNpdGlvbjpub25lfS5tYXQtbWRjLXRhYi1sYWJlbC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Lm1hdC1tZGMtdGFiLWxhYmVsc3tkaXNwbGF5OmZsZXg7ZmxleDoxIDAgYXV0b31bbWF0LWFsaWduLXRhYnM9Y2VudGVyXT4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bbWF0LWFsaWduLXRhYnM9ZW5kXT4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtbWRjLXRhYjo6YmVmb3Jle21hcmdpbjo1cHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy10YWJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpHcmF5VGV4dH0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxhWT1uZXcgaWUoIk1BVF9UQUJTX0NPTkZJRyIpLGtDZT0wLEZDZT16cyh1cyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksInByaW1hcnkiKSxOQ2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZDZXtnZXQgZHluYW1pY0hlaWdodCgpe3JldHVybiB0aGlzLl9keW5hbWljSGVpZ2h0fXNldCBkeW5hbWljSGVpZ2h0KGUpe3RoaXMuX2R5bmFtaWNIZWlnaHQ9UnQoZSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleChlKXt0aGlzLl9pbmRleFRvU2VsZWN0PV9pKGUsbnVsbCl9Z2V0IGFuaW1hdGlvbkR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbkR1cmF0aW9ufXNldCBhbmltYXRpb25EdXJhdGlvbihlKXt0aGlzLl9hbmltYXRpb25EdXJhdGlvbj0vXlxkKyQvLnRlc3QoZSsiIik/ZSsibXMiOmV9Z2V0IGNvbnRlbnRUYWJJbmRleCgpe3JldHVybiB0aGlzLl9jb250ZW50VGFiSW5kZXh9c2V0IGNvbnRlbnRUYWJJbmRleChlKXt0aGlzLl9jb250ZW50VGFiSW5kZXg9X2koZSxudWxsKX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVJ0KGUpfWdldCBwcmVzZXJ2ZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fcHJlc2VydmVDb250ZW50fXNldCBwcmVzZXJ2ZUNvbnRlbnQoZSl7dGhpcy5fcHJlc2VydmVDb250ZW50PVJ0KGUpfWdldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IoZSl7bGV0IGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtpLnJlbW92ZSgibWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kIixgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSxlJiZpLmFkZCgibWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kIixgbWF0LWJhY2tncm91bmQtJHtlfWApLHRoaXMuX2JhY2tncm91bmRDb2xvcj1lfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1vLHRoaXMuX3RhYnM9bmV3IE9hLHRoaXMuX2luZGV4VG9TZWxlY3Q9MCx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwsdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9MCx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX2R5bmFtaWNIZWlnaHQ9ITEsdGhpcy5fc2VsZWN0ZWRJbmRleD1udWxsLHRoaXMuaGVhZGVyUG9zaXRpb249ImFib3ZlIix0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLl9wcmVzZXJ2ZUNvbnRlbnQ9ITEsdGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlPW5ldyBGLHRoaXMuZm9jdXNDaGFuZ2U9bmV3IEYsdGhpcy5hbmltYXRpb25Eb25lPW5ldyBGLHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2U9bmV3IEYoITApLHRoaXMuX2dyb3VwSWQ9a0NlKyssdGhpcy5hbmltYXRpb25EdXJhdGlvbj1yJiZyLmFuaW1hdGlvbkR1cmF0aW9uP3IuYW5pbWF0aW9uRHVyYXRpb246IjUwMG1zIix0aGlzLmRpc2FibGVQYWdpbmF0aW9uPSEoIXJ8fG51bGw9PXIuZGlzYWJsZVBhZ2luYXRpb24pJiZyLmRpc2FibGVQYWdpbmF0aW9uLHRoaXMuZHluYW1pY0hlaWdodD0hKCFyfHxudWxsPT1yLmR5bmFtaWNIZWlnaHQpJiZyLmR5bmFtaWNIZWlnaHQsdGhpcy5jb250ZW50VGFiSW5kZXg9cj8uY29udGVudFRhYkluZGV4Pz9udWxsLHRoaXMucHJlc2VydmVDb250ZW50PSEhcj8ucHJlc2VydmVDb250ZW50fW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZih0aGlzLl9zZWxlY3RlZEluZGV4IT1lKXtsZXQgaT1udWxsPT10aGlzLl9zZWxlY3RlZEluZGV4O2lmKCFpKXt0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoZSkpO2xldCByPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7ci5zdHlsZS5taW5IZWlnaHQ9ci5jbGllbnRIZWlnaHQrInB4In1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fdGFicy5mb3JFYWNoKChyLG8pPT5yLmlzQWN0aXZlPW89PT1lKSxpfHwodGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlLmVtaXQoZSksdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS5taW5IZWlnaHQ9IiIpfSl9dGhpcy5fdGFicy5mb3JFYWNoKChpLHIpPT57aS5wb3NpdGlvbj1yLWUsbnVsbCE9dGhpcy5fc2VsZWN0ZWRJbmRleCYmMD09aS5wb3NpdGlvbiYmIWkub3JpZ2luJiYoaS5vcmlnaW49ZS10aGlzLl9zZWxlY3RlZEluZGV4KX0pLHRoaXMuX3NlbGVjdGVkSW5kZXghPT1lJiYodGhpcy5fc2VsZWN0ZWRJbmRleD1lLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc3Vic2NyaWJlVG9BbGxUYWJDaGFuZ2VzKCksdGhpcy5fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPXRoaXMuX3RhYnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLl9jbGFtcFRhYkluZGV4KHRoaXMuX2luZGV4VG9TZWxlY3QpO2lmKGU9PT10aGlzLl9zZWxlY3RlZEluZGV4KXtsZXQgcixpPXRoaXMuX3RhYnMudG9BcnJheSgpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKWlmKGlbb10uaXNBY3RpdmUpe3RoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fc2VsZWN0ZWRJbmRleD1vLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCxyPWlbb107YnJlYWt9IXImJmlbZV0mJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntpW2VdLmlzQWN0aXZlPSEwLHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudChlKSl9KX10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfV9zdWJzY3JpYmVUb0FsbFRhYkNoYW5nZXMoKXt0aGlzLl9hbGxUYWJzLmNoYW5nZXMucGlwZShxbih0aGlzLl9hbGxUYWJzKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl90YWJzLnJlc2V0KGUuZmlsdGVyKGk9PmkuX2Nsb3Nlc3RUYWJHcm91cD09PXRoaXN8fCFpLl9jbG9zZXN0VGFiR3JvdXApKSx0aGlzLl90YWJzLm5vdGlmeU9uQ2hhbmdlcygpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl90YWJzLmRlc3Ryb3koKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1yZWFsaWduSW5rQmFyKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpfXVwZGF0ZVBhZ2luYXRpb24oKXt0aGlzLl90YWJIZWFkZXImJnRoaXMuX3RhYkhlYWRlci51cGRhdGVQYWdpbmF0aW9uKCl9Zm9jdXNUYWIoZSl7bGV0IGk9dGhpcy5fdGFiSGVhZGVyO2kmJihpLmZvY3VzSW5kZXg9ZSl9X2ZvY3VzQ2hhbmdlZChlKXt0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PWUsdGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KGUpKX1fY3JlYXRlQ2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IGlOO3JldHVybiBpLmluZGV4PWUsdGhpcy5fdGFicyYmdGhpcy5fdGFicy5sZW5ndGgmJihpLnRhYj10aGlzLl90YWJzLnRvQXJyYXkoKVtlXSksaX1fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKXt0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbiYmdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj10biguLi50aGlzLl90YWJzLm1hcChlPT5lLl9zdGF0ZUNoYW5nZXMpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fY2xhbXBUYWJJbmRleChlKXtyZXR1cm4gTWF0aC5taW4odGhpcy5fdGFicy5sZW5ndGgtMSxNYXRoLm1heChlfHwwLDApKX1fZ2V0VGFiTGFiZWxJZChlKXtyZXR1cm5gbWF0LXRhYi1sYWJlbC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9nZXRUYWJDb250ZW50SWQoZSl7cmV0dXJuYG1hdC10YWItY29udGVudC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChlKXtpZighdGhpcy5fZHluYW1pY0hlaWdodHx8IXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KXJldHVybjtsZXQgaT10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O2kuc3R5bGUuaGVpZ2h0PXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KyJweCIsdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQmJihpLnN0eWxlLmhlaWdodD1lKyJweCIpfV9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpe2xldCBlPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9ZS5jbGllbnRIZWlnaHQsZS5zdHlsZS5oZWlnaHQ9IiIsdGhpcy5hbmltYXRpb25Eb25lLmVtaXQoKX1faGFuZGxlQ2xpY2soZSxpLHIpe2kuZm9jdXNJbmRleD1yLGUuZGlzYWJsZWR8fCh0aGlzLnNlbGVjdGVkSW5kZXg9cil9X2dldFRhYkluZGV4KGUpe3JldHVybiBlPT09KHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg/P3RoaXMuc2VsZWN0ZWRJbmRleCk/MDotMX1fdGFiRm9jdXNDaGFuZ2VkKGUsaSl7ZSYmIm1vdXNlIiE9PWUmJiJ0b3VjaCIhPT1lJiYodGhpcy5fdGFiSGVhZGVyLmZvY3VzSW5kZXg9aSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoJHQpLEMoYVksOCksQyhoaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4saW5wdXRzOntkeW5hbWljSGVpZ2h0OiJkeW5hbWljSGVpZ2h0IixzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4IixoZWFkZXJQb3NpdGlvbjoiaGVhZGVyUG9zaXRpb24iLGFuaW1hdGlvbkR1cmF0aW9uOiJhbmltYXRpb25EdXJhdGlvbiIsY29udGVudFRhYkluZGV4OiJjb250ZW50VGFiSW5kZXgiLGRpc2FibGVQYWdpbmF0aW9uOiJkaXNhYmxlUGFnaW5hdGlvbiIscHJlc2VydmVDb250ZW50OiJwcmVzZXJ2ZUNvbnRlbnQiLGJhY2tncm91bmRDb2xvcjoiYmFja2dyb3VuZENvbG9yIn0sb3V0cHV0czp7c2VsZWN0ZWRJbmRleENoYW5nZToic2VsZWN0ZWRJbmRleENoYW5nZSIsZm9jdXNDaGFuZ2U6ImZvY3VzQ2hhbmdlIixhbmltYXRpb25Eb25lOiJhbmltYXRpb25Eb25lIixzZWxlY3RlZFRhYkNoYW5nZToic2VsZWN0ZWRUYWJDaGFuZ2UifSxmZWF0dXJlczpbS2VdfSksbn0pKCksYkU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE5DZXtnZXQgZml0SW5rQmFyVG9Db250ZW50KCl7cmV0dXJuIHRoaXMuX2ZpdElua0JhclRvQ29udGVudH1zZXQgZml0SW5rQmFyVG9Db250ZW50KGUpe3RoaXMuX2ZpdElua0JhclRvQ29udGVudD1SdChlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgc3RyZXRjaFRhYnMoKXtyZXR1cm4gdGhpcy5fc3RyZXRjaFRhYnN9c2V0IHN0cmV0Y2hUYWJzKGUpe3RoaXMuX3N0cmV0Y2hUYWJzPVJ0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pLHRoaXMuX2ZpdElua0JhclRvQ29udGVudD0hMSx0aGlzLl9zdHJldGNoVGFicz0hMCx0aGlzLmZpdElua0JhclRvQ29udGVudD0hKCFyfHxudWxsPT1yLmZpdElua0JhclRvQ29udGVudCkmJnIuZml0SW5rQmFyVG9Db250ZW50fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKCR0KSxDKGFZLDgpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmVGkocixzeSw1KSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLl9hbGxUYWJzPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UodUNlLDUpLEdlKHBDZSw1KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5fdGFiQm9keVdyYXBwZXI9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX3RhYkhlYWRlcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LW1kYy10YWItZ3JvdXAiXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC1tZGMtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IixpLmR5bmFtaWNIZWlnaHQpKCJtYXQtbWRjLXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIiLCJiZWxvdyI9PT1pLmhlYWRlclBvc2l0aW9uKSgibWF0LW1kYy10YWItZ3JvdXAtc3RyZXRjaC10YWJzIixpLnN0cmV0Y2hUYWJzKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGZpdElua0JhclRvQ29udGVudDoiZml0SW5rQmFyVG9Db250ZW50IixzdHJldGNoVGFiczpbIm1hdC1zdHJldGNoLXRhYnMiLCJzdHJldGNoVGFicyJdfSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl0sZmVhdHVyZXM6W1F0KFt7cHJvdmlkZTpvWSx1c2VFeGlzdGluZzpufV0pLEtlXSxkZWNsczo2LHZhcnM6Nyxjb25zdHM6W1szLCJzZWxlY3RlZEluZGV4IiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiaW5kZXhGb2N1c2VkIiwic2VsZWN0Rm9jdXNlZEluZGV4Il0sWyJ0YWJIZWFkZXIiLCIiXSxbImNsYXNzIiwibWRjLXRhYiBtYXQtbWRjLXRhYiBtYXQtbWRjLWZvY3VzLWluZGljYXRvciIsInJvbGUiLCJ0YWIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIiwzLCJpZCIsIm1kYy10YWItLWFjdGl2ZSIsIm5nQ2xhc3MiLCJkaXNhYmxlZCIsImZpdElua0JhclRvQ29udGVudCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXIiXSxbInRhYkJvZHlXcmFwcGVyIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDMsImlkIiwibWF0LW1kYy10YWItYm9keS1hY3RpdmUiLCJuZ0NsYXNzIiwiY29udGVudCIsInBvc2l0aW9uIiwib3JpZ2luIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJwcmVzZXJ2ZUNvbnRlbnQiLCJfb25DZW50ZXJlZCIsIl9vbkNlbnRlcmluZyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwiY2RrTW9uaXRvckVsZW1lbnRGb2N1cyIsIiIsMSwibWRjLXRhYiIsIm1hdC1tZGMtdGFiIiwibWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwibmdDbGFzcyIsImRpc2FibGVkIiwiZml0SW5rQmFyVG9Db250ZW50IiwiY2xpY2siLCJjZGtGb2N1c0NoYW5nZSJdLFsidGFiTm9kZSIsIiJdLFsxLCJtZGMtdGFiX19yaXBwbGUiXSxbIm1hdC1yaXBwbGUiLCIiLDEsIm1hdC1tZGMtdGFiLXJpcHBsZSIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIl0sWzEsIm1kYy10YWJfX2NvbnRlbnQiXSxbMSwibWRjLXRhYl9fdGV4dC1sYWJlbCJdLFszLCJuZ0lmIiwibmdJZkVsc2UiXSxbInRhYlRleHRMYWJlbCIsIiJdLFszLCJjZGtQb3J0YWxPdXRsZXQiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMywiaWQiLCJuZ0NsYXNzIiwiY29udGVudCIsInBvc2l0aW9uIiwib3JpZ2luIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJwcmVzZXJ2ZUNvbnRlbnQiLCJfb25DZW50ZXJlZCIsIl9vbkNlbnRlcmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWF0LXRhYi1oZWFkZXIiLDAsMSksSSgiaW5kZXhGb2N1c2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fZm9jdXNDaGFuZ2VkKG8pfSkoInNlbGVjdEZvY3VzZWRJbmRleCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2VsZWN0ZWRJbmRleD1vfSksUygyLGdDZSw5LDE3LCJkaXYiLDIpLGcoKSxoKDMsImRpdiIsMyw0KSxTKDUsX0NlLDEsMTEsIm1hdC10YWItYm9keSIsNSksZygpKSwyJmUmJihfKCJzZWxlY3RlZEluZGV4IixpLnNlbGVjdGVkSW5kZXh8fDApKCJkaXNhYmxlUmlwcGxlIixpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlUGFnaW5hdGlvbiIsaS5kaXNhYmxlUGFnaW5hdGlvbiksdigyKSxfKCJuZ0Zvck9mIixpLl90YWJzKSx2KDEpLG50KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpLHYoMiksXygibmdGb3JPZiIsaS5fdGFicykpfSxkZXBlbmRlbmNpZXM6W3luLG5uLEZlLHBzLG1vLHk3LHRZLHJZLE9DZV0sc3R5bGVzOlsnLm1kYy10YWJ7bWluLXdpZHRoOjkwcHg7cGFkZGluZy1yaWdodDoyNHB4O3BhZGRpbmctbGVmdDoyNHB4O2Rpc3BsYXk6ZmxleDtmbGV4OjEgMCBhdXRvO2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO3otaW5kZXg6MX0ubWRjLXRhYjo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9Lm1kYy10YWJbaGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy10YWItLW1pbi13aWR0aHtmbGV4OjAgMSBhdXRvfS5tZGMtdGFiX19jb250ZW50e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtdGFiX190ZXh0LWxhYmVse3RyYW5zaXRpb246MTUwbXMgY29sb3IgbGluZWFyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjE7ei1pbmRleDoyfS5tZGMtdGFiX19pY29ue3RyYW5zaXRpb246MTUwbXMgY29sb3IgbGluZWFyO3otaW5kZXg6Mn0ubWRjLXRhYi0tc3RhY2tlZCAubWRjLXRhYl9fY29udGVudHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1kYy10YWItLXN0YWNrZWQgLm1kYy10YWJfX3RleHQtbGFiZWx7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjRweH0ubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX2ljb257dHJhbnNpdGlvbi1kZWxheToxMDBtc30ubWRjLXRhYjpub3QoLm1kYy10YWItLXN0YWNrZWQpIC5tZGMtdGFiX19pY29uKy5tZGMtdGFiX190ZXh0LWxhYmVse3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWRjLXRhYjpub3QoLm1kYy10YWItLXN0YWNrZWQpIC5tZGMtdGFiX19pY29uKy5tZGMtdGFiX190ZXh0LWxhYmVsLC5tZGMtdGFiOm5vdCgubWRjLXRhYi0tc3RhY2tlZCkgLm1kYy10YWJfX2ljb24rLm1kYy10YWJfX3RleHQtbGFiZWxbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDo4cHh9Lm1kYy10YWItaW5kaWNhdG9yIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci10b3Atd2lkdGg6MnB4fS5tZGMtdGFiLWluZGljYXRvciAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLWljb257aGVpZ2h0OjM0cHg7Zm9udC1zaXplOjM0cHh9Lm1kYy10YWItaW5kaWNhdG9ye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxfS5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudHt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQ7b3BhY2l0eTowfS5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2FsaWduLXNlbGY6ZmxleC1lbmQ7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZH0ubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLWljb257YWxpZ24tc2VsZjpjZW50ZXI7bWFyZ2luOjAgYXV0b30ubWRjLXRhYi1pbmRpY2F0b3ItLWFjdGl2ZSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnR7b3BhY2l0eToxfS5tZGMtdGFiLWluZGljYXRvciAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnR7dHJhbnNpdGlvbjoyNTBtcyB0cmFuc2Zvcm0gY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWRjLXRhYi1pbmRpY2F0b3ItLW5vLXRyYW5zaXRpb24gLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50e3RyYW5zaXRpb246bm9uZX0ubWRjLXRhYi1pbmRpY2F0b3ItLWZhZGUgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50e3RyYW5zaXRpb246MTUwbXMgb3BhY2l0eSBsaW5lYXJ9Lm1kYy10YWItaW5kaWNhdG9yLS1hY3RpdmUubWRjLXRhYi1pbmRpY2F0b3ItLWZhZGUgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50e3RyYW5zaXRpb24tZGVsYXk6MTAwbXN9Lm1hdC1tZGMtdGFiLXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbWRjLXRhYnstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy10YWIubWRjLXRhYntoZWlnaHQ6NDhweDtmbGV4LWdyb3c6MH0ubWF0LW1kYy10YWIgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy10YWIgLm1kYy10YWJfX3RleHQtbGFiZWx7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1tZGMtdGFiIC5tZGMtdGFiX19jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3BvaW50ZXItZXZlbnRzOmF1dG99Lm1hdC1tZGMtdGFiOmhvdmVyIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy10YWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudHtvcGFjaXR5Oi4xMn0ubWF0LW1kYy10YWItZ3JvdXAubWF0LW1kYy10YWItZ3JvdXAtc3RyZXRjaC10YWJzPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1hdC1tZGMtdGFie2ZsZXgtZ3JvdzoxfS5tYXQtbWRjLXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtbWRjLXRhYi1ncm91cHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21heC13aWR0aDoxMDAlfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlciwubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlciAubWF0LW1kYy10YWIgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYi1saW5rIC5tZGMtdGFiX190ZXh0LWxhYmVse2NvbG9yOnZhcigtLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtZm9yZWdyb3VuZC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlciAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtZm9yZWdyb3VuZC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtZm9yZWdyb3VuZC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjp2YXIoLS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtbWRjLXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1tZGMtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9Lm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpmbGV4O3RyYW5zaXRpb246aGVpZ2h0IDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LW1kYy10YWItYm9keS13cmFwcGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9J10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksaU49Y2xhc3N7fSxMQ2U9MCxCQ2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHNZe2dldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IoZSl7bGV0IGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtpLnJlbW92ZSgibWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kIixgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSxlJiZpLmFkZCgibWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kIixgbWF0LWJhY2tncm91bmQtJHtlfWApLHRoaXMuX2JhY2tncm91bmRDb2xvcj1lfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVSaXBwbGV9c2V0IGRpc2FibGVSaXBwbGUoZSl7dGhpcy5fZGlzYWJsZVJpcHBsZT1SdChlKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlLG8scyxpLHIsYSxsKSx0aGlzLl9kaXNhYmxlUmlwcGxlPSExLHRoaXMuY29sb3I9InByaW1hcnkifV9pdGVtU2VsZWN0ZWQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faXRlbXMuY2hhbmdlcy5waXBlKHFuKG51bGwpLG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMudXBkYXRlQWN0aXZlTGluaygpfSksc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCl9dXBkYXRlQWN0aXZlTGluaygpe2lmKCF0aGlzLl9pdGVtcylyZXR1cm47bGV0IGU9dGhpcy5faXRlbXMudG9BcnJheSgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKGVbaV0uYWN0aXZlKXJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXg9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx2b2lkKHRoaXMudGFiUGFuZWwmJih0aGlzLnRhYlBhbmVsLl9hY3RpdmVUYWJJZD1lW2ldLmlkKSk7dGhpcy5zZWxlY3RlZEluZGV4PS0xLHRoaXMuX2lua0Jhci5oaWRlKCl9X2dldFJvbGUoKXtyZXR1cm4gdGhpcy50YWJQYW5lbD8idGFibGlzdCI6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgicm9sZSIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKFhpLDgpLEMoYXQpLEMoJHQpLEMoanMpLEMoR24pLEMoaGksOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGlucHV0czp7YmFja2dyb3VuZENvbG9yOiJiYWNrZ3JvdW5kQ29sb3IiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciIsdGFiUGFuZWw6InRhYlBhbmVsIn0sZmVhdHVyZXM6W0tlXX0pLG59KSgpLFZDZT1rdSh1cyhzbyhjbGFzc3t9KSkpLEhDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVkNle2dldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5faXNBY3RpdmV9c2V0IGFjdGl2ZShlKXtsZXQgaT1SdChlKTtpIT09dGhpcy5faXNBY3RpdmUmJih0aGlzLl9pc0FjdGl2ZT1pLHRoaXMuX3RhYk5hdkJhci51cGRhdGVBY3RpdmVMaW5rKCkpfWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHx0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuX3RhYk5hdkJhci5kaXNhYmxlUmlwcGxlfHwhIXRoaXMucmlwcGxlQ29uZmlnLmRpc2FibGVkfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcigpLHRoaXMuX3RhYk5hdkJhcj1lLHRoaXMuZWxlbWVudFJlZj1pLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX2lzQWN0aXZlPSExLHRoaXMuaWQ9Im1hdC10YWItbGluay0iK0xDZSsrLHRoaXMucmlwcGxlQ29uZmlnPXJ8fHt9LHRoaXMudGFiSW5kZXg9cGFyc2VJbnQobyl8fDAsIk5vb3BBbmltYXRpb25zIj09PWEmJih0aGlzLnJpcHBsZUNvbmZpZy5hbmltYXRpb249e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH0pfWZvY3VzKCl7dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYpfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxlbWVudFJlZil9X2hhbmRsZUZvY3VzKCl7dGhpcy5fdGFiTmF2QmFyLmZvY3VzSW5kZXg9dGhpcy5fdGFiTmF2QmFyLl9pdGVtcy50b0FycmF5KCkuaW5kZXhPZih0aGlzKX1faGFuZGxlS2V5ZG93bihlKXt0aGlzLl90YWJOYXZCYXIudGFiUGFuZWwmJjMyPT09ZS5rZXlDb2RlJiZ0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGljaygpfV9nZXRBcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy5fdGFiTmF2QmFyLnRhYlBhbmVsP3RoaXMuX3RhYk5hdkJhci50YWJQYW5lbD8uaWQ6dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJhcmlhLWNvbnRyb2xzIil9X2dldEFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLl90YWJOYXZCYXIudGFiUGFuZWw/dGhpcy5hY3RpdmU/InRydWUiOiJmYWxzZSI6dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIil9X2dldEFyaWFDdXJyZW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5fdGFiTmF2QmFyLnRhYlBhbmVsPyJwYWdlIjpudWxsfV9nZXRSb2xlKCl7cmV0dXJuIHRoaXMuX3RhYk5hdkJhci50YWJQYW5lbD8idGFiIjp0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInJvbGUiKX1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5fdGFiTmF2QmFyLnRhYlBhbmVsP3RoaXMuX2lzQWN0aXZlJiYhdGhpcy5kaXNhYmxlZD8wOi0xOnRoaXMudGFiSW5kZXh9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQkNlKSxDKE1lKSxDKHkyLDgpLHlvKCJ0YWJpbmRleCIpLEMoWHIpLEMoaGksOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGlucHV0czp7YWN0aXZlOiJhY3RpdmUiLGlkOiJpZCJ9LGZlYXR1cmVzOltLZV19KSxufSkoKSx2RT0oaVkoSENlKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsZm4sSGwsQmwsbmcsbGcsZm5dfSksbn0pKCkpO2Z1bmN0aW9uIHpDZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNwYW4iLDUpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKS4kaW1wbGljaXQ7cmV0dXJuIFEodygpLm9uQWN0aXZlUGx1Z2luU2VsZWN0aW9uKHIsby5pZCkpfSksVCgxKSxnKCl9aWYoMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0O0JlKCJkYXRhLXBsdWdpbi1pZCIsZS5pZCksdigxKSxIZSgiICIsZS50YWJfbmFtZSwiICIpfX1mdW5jdGlvbiBVQ2Uobix0KXsxJm4mJihoKDAsIm1hdC10YWIiLDMpLFMoMSx6Q2UsMiwyLCJuZy10ZW1wbGF0ZSIsNCksZygpKSwyJm4mJl8oImRpc2FibGVkIiwhdC4kaW1wbGljaXQuZW5hYmxlZCl9ZnVuY3Rpb24gakNlKG4sdCl7aWYoMSZuJiYoaCgwLCJtYXQtb3B0aW9uIiw5KSxUKDEpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtfKCJ2YWx1ZSIsZS5pZCksQmUoImRhdGEtcGx1Z2luLWlkIixlLmlkKSx2KDEpLEhlKCIgIixlLnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIEdDZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1mb3JtLWZpZWxkIiw2KSgxLCJtYXQtbGFiZWwiKSxUKDIsIkluYWN0aXZlIiksZygpLGgoMywibWF0LXNlbGVjdCIsNyksSSgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkRpc2FibGVkUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZChyKSl9KSxTKDQsakNlLDIsMywibWF0LW9wdGlvbiIsOCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7digzKSxfKCJ2YWx1ZSIsZS5zZWxlY3RlZFBsdWdpbikoImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCEwKSx2KDEpLF8oIm5nRm9yT2YiLGUuZGlzYWJsZWRQbHVnaW5zKX19dmFyIGNZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRn1nZXRBY3RpdmVQbHVnaW5JbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZVBsdWdpbnMuZmluZEluZGV4KCh7aWQ6ZX0pPT5lPT09dGhpcy5zZWxlY3RlZFBsdWdpbil9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdChlLnZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbnM6ImFjdGl2ZVBsdWdpbnMiLGRpc2FibGVkUGx1Z2luczoiZGlzYWJsZWRQbHVnaW5zIixzZWxlY3RlZFBsdWdpbjoic2VsZWN0ZWRQbHVnaW4ifSxvdXRwdXRzOntvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ6Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJ9LGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJtYXQtc3RyZXRjaC10YWJzIiwiZmFsc2UiLCJhbmltYXRpb25EdXJhdGlvbiIsIjEwMG1zIiwxLCJhY3RpdmUtcGx1Z2luLWxpc3QiLDMsInNlbGVjdGVkSW5kZXgiXSxbMywiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIiwic3Vic2NyaXB0U2l6aW5nIiwiZHluYW1pYyIsNCwibmdJZiJdLFszLCJkaXNhYmxlZCJdLFsibWF0LXRhYi1sYWJlbCIsIiJdLFsxLCJwbHVnaW4tbmFtZSIsMywiY2xpY2siXSxbImZsb2F0TGFiZWwiLCJuZXZlciIsInN1YnNjcmlwdFNpemluZyIsImR5bmFtaWMiXSxbMywidmFsdWUiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1hdC10YWItZ3JvdXAiLDApLFMoMSxVQ2UsMiwxLCJtYXQtdGFiIiwxKSxnKCksUygyLEdDZSw1LDMsIm1hdC1mb3JtLWZpZWxkIiwyKSksMiZlJiYoXygic2VsZWN0ZWRJbmRleCIsaS5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSx2KDEpLF8oIm5nRm9yT2YiLGkuYWN0aXZlUGx1Z2lucyksdigxKSxfKCJuZ0lmIixpLmRpc2FibGVkUGx1Z2lucy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W3JOLHN5LGJFLEthLGtjLHp1LFVzLG5uLEZlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmb250LXNpemU6MTRweDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICB7d2lkdGg6MTQ0cHh9W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1kYy10ZXh0LWZpZWxke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtwYWRkaW5nOjAgNHB4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1kYy10ZXh0LWZpZWxke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1bX25naG9zdC0lQ09NUCVdICAgbWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbC5tZGMtZmxvYXRpbmctbGFiZWwubWF0LW1kYy1mbG9hdGluZy1sYWJlbCwgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1tZGMtc2VsZWN0LCBbX25naG9zdC0lQ09NUCVdICAgbWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgICAubWF0LW1kYy1zZWxlY3QtdmFsdWUsIFtfbmdob3N0LSVDT01QJV0gICBtYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjppbmhlcml0fVtfbmdob3N0LSVDT01QJV0gICBtYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOmluaGVyaXR9bWF0LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV0sIG1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmFjdGl2ZS1wbHVnaW4tbGlzdFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24tc2VsZjpzdHJldGNoO2ZsZXg6MSAxIGF1dG87b3ZlcmZsb3c6aGlkZGVufS5wbHVnaW4tbmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjAgMTJweDt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi43fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjppbmhlcml0O29wYWNpdHk6MX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntjb2xvcjppbmhlcml0fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1kaXNhYmxlZHtkaXNwbGF5Om5vbmV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtbWRjLXRhYi1saXN0LCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiLWxhYmVscywgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYiwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWRjLXRhYl9fdGV4dC1sYWJlbHtoZWlnaHQ6MTAwJX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYntsZXR0ZXItc3BhY2luZzouMjVweDttaW4td2lkdGg6NDhweDtwYWRkaW5nOjA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXIgLm1hdC1tZGMtdGFiLWxpc3R7cGFkZGluZzowIDM2cHh9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46Zmlyc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC1tZGMtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LW1kYy10YWItbGFiZWwtY29udGFpbmVye2xlZnQ6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpsYXN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtbWRjLXRhYi1sYWJlbC1jb250YWluZXJ7cmlnaHQ6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Il19KSxufSkoKSxkWT1xKE5oLG49Pk9iamVjdC5rZXlzKG4pLm1hcCh0PT5PYmplY3QuYXNzaWduKHt9LHtpZDp0fSxuW3RdKSkpLHFDZT1xKGRZLG49Pm4uZmlsdGVyKHQ9PiF0LmVuYWJsZWQpKSx1WT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVBsdWdpbiQ9dGhpcy5zdG9yZS5waXBlKHVuKFdvKSksdGhpcy5wbHVnaW5zJD10aGlzLnN0b3JlLnBpcGUodW4oZFkpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKHVuKHFDZSkpfW9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2god2Moe3BsdWdpbjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbnMiLCJkaXNhYmxlZFBsdWdpbnMiLCJzZWxlY3RlZFBsdWdpbiIsIm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsMCksSSgib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblNlbGVjdGlvbkNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGcoKSksMiZlJiZfKCJhY3RpdmVQbHVnaW5zIixXKDEsMyxpLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsVygyLDUsaS5kaXNhYmxlZFBsdWdpbnMkKSkoInNlbGVjdGVkUGx1Z2luIixXKDMsNyxpLmFjdGl2ZVBsdWdpbiQpKX0sZGVwZW5kZW5jaWVzOltjWSxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWENlPXEoTmgsV28sKG4sdCk9PiEoIXR8fCFuW3RdKSYmblt0XS5kaXNhYmxlX3JlbG9hZCkscFk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWREaXNhYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoWENlKSx0aGlzLmlzUmVsb2FkaW5nJD10aGlzLnN0b3JlLnNlbGVjdChUNikucGlwZShMaSh0aGlzLnJlbG9hZERpc2FibGVkJCksTigoW2kscl0pPT4hciYmaT09PVRlLkxPQURJTkcpKSx0aGlzLmxhc3RMb2FkZWRUaW1lSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoRmgpfXRyaWdnZXJSZWxvYWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEZzKCkpfWdldFJlbG9hZFRpdGxlKGUpe3JldHVybiBlP2BMYXN0IFVwZGF0ZWQ6ICR7ZX1gOiJMb2FkaW5nLi4uIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItcmVsb2FkIl1dLGRlY2xzOjYsdmFyczoxMyxjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwxLCJyZWxvYWQtYnV0dG9uIiwzLCJ0aXRsZSIsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJyZWZyZXNoXzI0cHgiLDEsInJlZnJlc2gtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiYnV0dG9uIiwwKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS50cmlnZ2VyUmVsb2FkKCl9KSxqKDEsImFzeW5jIiksaigyLCJkYXRlIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxQKDUsIm1hdC1pY29uIiwxKSxnKCkpLDImZSYmKG50KCJsb2FkaW5nIixXKDEsNCxpLmlzUmVsb2FkaW5nJCkpLF8oInRpdGxlIixpLmdldFJlbG9hZFRpdGxlKHFwKDIsNixXKDMsOSxpLmxhc3RMb2FkZWRUaW1lSW5NcyQpLCJtZWRpdW0iKSkpKCJkaXNhYmxlZCIsVyg0LDExLGkucmVsb2FkRGlzYWJsZWQkKSkpfSxkZXBlbmRlbmNpZXM6WyRpLEVuLGN0LGdoXSxzdHlsZXM6WyIucmVsb2FkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5yZWZyZXNoLWljb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5yZWxvYWQtYnV0dG9uLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYW5pbWF0aW9uOiBfbmdjb250ZW50LSVDT01QJV9yb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIF9uZ2NvbnRlbnQtJUNPTVAlX3JvdGF0ZSB7XG4gICAgICAgIDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICA1MCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgICAgfVxuICAgICAgfSJdfSksbn0pKCksZlk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczo5LHZhcnM6MCxjb25zdHM6W1sxLCJicmFuZCJdLFsxLCJwbHVnaW5zIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIiwicmVsIiwibm9vcGVuZXIgbm9yZWZlcnJlciIsInRhcmdldCIsIl9ibGFuayIsImFyaWEtbGFiZWwiLCJIZWxwIiwxLCJyZWFkbWUiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWF0LXRvb2xiYXIiKSgxLCJzcGFuIiwwKSxUKDIsIlRlbnNvckJvYXJkIiksZygpLFAoMywicGx1Z2luLXNlbGVjdG9yIiwxKSg0LCJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUiKSg1LCJhcHAtaGVhZGVyLXJlbG9hZCIpKDYsInNldHRpbmdzLWJ1dHRvbiIpLGgoNywiYSIsMiksUCg4LCJtYXQtaWNvbiIsMyksZygpKCkpfSxkZXBlbmRlbmNpZXM6W083LEVuLGtxLHFxLEtxLHVZLHBZXSxzdHlsZXM6WyJtYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2hlaWdodDo2NHB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfS5icmFuZFtfbmdjb250ZW50LSVDT01QJV0sIC5yZWFkbWVbX25nY29udGVudC0lQ09NUCVdLCBhcHAtaGVhZGVyLXJlbG9hZFtfbmdjb250ZW50LSVDT01QJV0sIHNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17ZmxleDowIDAgYXV0b30uYnJhbmRbX25nY29udGVudC0lQ09NUCVde2xldHRlci1zcGFjaW5nOi0wLjAyNWVtO21hcmdpbi1sZWZ0OjEwcHg7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5fS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Zm9udC1zaXplOjE0cHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufSJdfSksbn0pKCksSkNlX3NldERvY3VtZW50VGl0bGU9ZnVuY3Rpb24obil7ZG9jdW1lbnQudGl0bGU9bn0sbVk9KCgpPT57Y2xhc3MgbntuZ09uQ2hhbmdlcyhlKXtlLnRpdGxlJiZKQ2Vfc2V0RG9jdW1lbnRUaXRsZShlLnRpdGxlLmN1cnJlbnRWYWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUtY29tcG9uZW50Il1dLGlucHV0czp7dGl0bGU6InRpdGxlIn0sZmVhdHVyZXM6W0d0XSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaFk9IlRlbnNvckJvYXJkIixnWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMuY3VzdG9tQnJhbmROYW1lPWksdGhpcy5nZXRFeHBlcmltZW50SWQkPXRoaXMuc3RvcmUuc2VsZWN0KGxyKS5waXBlKE4ocj0+cj8uWzBdKSksdGhpcy5leHBlcmltZW50TmFtZSQ9dGhpcy5nZXRFeHBlcmltZW50SWQkLnBpcGUoa2UoQm9vbGVhbiksaG4ocj0+dGhpcy5zdG9yZS5zZWxlY3QoQlMse2V4cGVyaW1lbnRJZDpyfSkpLE4ocj0+cj9yLm5hbWU6bnVsbCkpLHRoaXMudGl0bGUkPXRoaXMuc3RvcmUuc2VsZWN0KHhTKS5waXBlKExpKHRoaXMuc3RvcmUuc2VsZWN0KEhhKSx0aGlzLmV4cGVyaW1lbnROYW1lJCksTigoW3IsbyxzXSk9PntsZXQgYT10aGlzLmN1c3RvbUJyYW5kTmFtZXx8aFk7cmV0dXJuIHIud2luZG93X3RpdGxlP3Iud2luZG93X3RpdGxlOm89PT13bi5FWFBFUklNRU5UJiZzP2Ake3N9IC0gJHthfWA6YX0pLHFuKHRoaXMuY3VzdG9tQnJhbmROYW1lfHxoWSksWW4oKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEModjYsOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInBhZ2UtdGl0bGUtY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIikpLDImZSYmXygidGl0bGUiLFcoMSwxLGkudGl0bGUkKSl9LGRlcGVuZGVuY2llczpbbVksY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksX1k9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZSx0aGlzLmdldFBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUodW4oX2YpKSx0aGlzLnBhZ2luYXRlZFZpZXdTdG9yZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1wYWdpbmF0ZWQtdmlldy1zdG9yZSIpLnRmX3BhZ2luYXRlZF92aWV3fW5nT25Jbml0KCl7dGhpcy5nZXRQYWdlU2l6ZSQucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFluKCkpLnN1YnNjcmliZShlPT57dGhpcy5wYWdpbmF0ZWRWaWV3U3RvcmUuc2V0TGltaXQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGJZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52Y1JlZj1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHNpKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItd2ViYXBwIl1dLGRlY2xzOjksdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJhcHAtaGVhZGVyIiksaCgxLCJtYWluIiksUCgyLCJyb3V0ZXItb3V0bGV0IiksZygpLFAoMywiYWxlcnQtc25hY2tiYXIiKSg0LCJoYXNoLXN0b3JhZ2UiKSg1LCJwYWdlLXRpdGxlIikoNiwic2V0dGluZ3MtcG9seW1lci1pbnRlcm9wIikoNywiZGFyay1tb2RlLXN1cHBvcnRlciIpKDgsImZlYXR1cmUtZmxhZy1tb2RhbC10cmlnZ2VyIikpfSxkZXBlbmRlbmNpZXM6W01xLFNxLG45LEVxLERxLGZZLGdZLF9ZXSxzdHlsZXM6WyJodG1sW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLHNhbnMtc2VyaWY7aGVpZ2h0OjEwMCU7bWFyZ2luOjA7cGFkZGluZzowfVtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZDojZjVmNWY1O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9YXBwLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDFweCAzcHggM3B4IHJnYmEoMCwwLDAsLjI1KTtmbGV4OjAgMDt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYXBwLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCAxcHggM3B4IDNweCByZ2JhKDI1NSwyNTUsMjU1LC4xKX1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfSJdfSksbn0pKCksdlk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLFNoLHdoLERsXX0pLG59KSgpLHlZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx4WT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpfdSx1c2VDbGFzczpYOH1dfSksbn0pKCksQ1k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLHhZXX0pLG59KSgpLE1ZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZV19KSxufSkoKSx3WT17aWQ6WHcsbmFtZToiIixzdGFydF90aW1lOjB9LGlNZT1icih7ZXhwZXJpbWVudE1hcDp7W3dZLmlkXTp3WX19KTtmdW5jdGlvbiBTWShuLHQpe3JldHVybiByZih7ZGF0YTppTWV9KShuLHQpfXZhciBFWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbVHIuZm9yRmVhdHVyZShMUyxTWSldfSksbn0pKCksVFk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLGNpLEphXX0pLG59KSgpLERZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxUWV19KSxufSkoKSxJWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUseGcsYnEsY2ksRmMsaGcsZGksJGFdfSksbn0pKCk7ZnVuY3Rpb24gck1lKCl7cmV0dXJuIHEoSXYsbj0+KHthdXRvUmVsb2FkOm59KSl9ZnVuY3Rpb24gb01lKCl7cmV0dXJuIHEoQXYsbj0+KHthdXRvUmVsb2FkUGVyaW9kSW5NczpufSkpfWZ1bmN0aW9uIHNNZSgpe3JldHVybiBxKF9mLG49Pih7cGFnZVNpemU6bn0pKX12YXIgeUU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1RyLmZvckZlYXR1cmUoTTEsTnEpLEtpLmRlZmluZUdsb2JhbFNldHRpbmcock1lKSxLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKG9NZSksS2kuZGVmaW5lR2xvYmFsU2V0dGluZyhzTWUpLElZXX0pLG59KSgpLEFZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltjaSxkaSx2RSxGcSxKYSxqdSxQZSxHYSx5RV19KSxufSkoKSxSWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7bGV0IHI9ZS5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoIi4vaWNvbl9idW5kbGUuc3ZnIik7aS5hZGRTdmdJY29uU2V0KHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKFpwKSxrKE1nKSl9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RpXX0pLG59KSgpLG9OPW5ldyBpZSgiW3BsdWdpbnNdIFBsdWdpbiByZWdpc3RyeSBjb25maWciKSxQWT1uZXcgTWFwLEJjPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYoIWUpcmV0dXJuO2xldCBpPW5ldyBTZXQoZS5tYXAocj0+ci5wbHVnaW5OYW1lKSk7Y29uc29sZS5hc3NlcnQoaS5zaXplPT09ZS5sZW5ndGgsIkNhbm5vdCByZWdpc3RlciB0aGUgc2FtZSBwbHVnaW4gbXVsdGlwbGUgdGltZXMuIik7Zm9yKGxldCByIG9mIGUpe2xldHtwbHVnaW5OYW1lOm8sY29tcG9uZW50Q2xhc3M6c309cjtQWS5zZXQobyxzKX19c3RhdGljIGZvclBsdWdpbihlLGkpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6b04sbXVsdGk6ITAsdXNlVmFsdWU6e3BsdWdpbk5hbWU6ZSxjb21wb25lbnRDbGFzczppfX1dfX1nZXRDb21wb25lbnQoZSl7cmV0dXJuIFBZLmdldChlKXx8bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhvTiw4KSl9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLHhFPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5odHRwPWUsdGhpcy5odHRwUGF0aFByZWZpeD0iZGF0YS9wbHVnaW4vZGVidWdnZXItdjIifWZldGNoUnVucygpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ydW5zIil9ZmV0Y2hFeGVjdXRpb25EaWdlc3RzKGUsaSxyKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZXhlY3V0aW9uL2RpZ2VzdHMiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoRXhlY3V0aW9uRGF0YShlLGkscil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2V4ZWN1dGlvbi9kYXRhIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cyhlLGkscixvKXtpZih2b2lkIDAhPT1vKXRocm93IG5ldyBFcnJvcigidHJhY2VfaWQgaXMgbm90IGltcGxlbWVudGVkIGZvciBmZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cygpIHlldCIpO3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaF9leGVjdXRpb24vZGlnZXN0cyIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hHcmFwaEV4ZWN1dGlvbkRhdGEoZSxpLHIsbyl7aWYodm9pZCAwIT09byl0aHJvdyBuZXcgRXJyb3IoInRyYWNlX2lkIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgZmV0Y2hHcmFwaEV4ZWN1dGlvbkRhdGEoKSB5ZXQiKTtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhfZXhlY3V0aW9uL2RhdGEiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoR3JhcGhPcEluZm8oZSxpLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaHMvb3BfaW5mbyIse3BhcmFtczp7cnVuOmUsZ3JhcGhfaWQ6aSxvcF9uYW1lOnJ9fSl9ZmV0Y2hTb3VyY2VGaWxlTGlzdChlKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvc291cmNlX2ZpbGVzL2xpc3QiLHtwYXJhbXM6e3J1bjplfX0pfWZldGNoU291cmNlRmlsZShlLGkpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zb3VyY2VfZmlsZXMvZmlsZSIse3BhcmFtczp7cnVuOmUsaW5kZXg6U3RyaW5nKGkpfX0pfWZldGNoU3RhY2tGcmFtZXMoZSxpKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvc3RhY2tfZnJhbWVzL3N0YWNrX2ZyYW1lcyIse3BhcmFtczp7cnVuOmUsc3RhY2tfZnJhbWVfaWRzOmkuam9pbigiLCIpfX0pLnBpcGUoTihyPT4oe3N0YWNrX2ZyYW1lczpyLnN0YWNrX2ZyYW1lcy5tYXAobz0+ZnVuY3Rpb24obil7cmV0dXJue2hvc3RfbmFtZTpuWzBdLGZpbGVfcGF0aDpuWzFdLGxpbmVubzpuWzJdLGZ1bmN0aW9uX25hbWU6blszXX19KG8pKX0pKSl9ZmV0Y2hBbGVydHMoZSxpLHIsbyl7bGV0IHM9e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfTtyZXR1cm4gdm9pZCAwIT09byYmKHMuYWxlcnRfdHlwZT1vKSx0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9hbGVydHMiLHtwYXJhbXM6c30pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKFVhKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksT1k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbeEVdLGltcG9ydHM6W09oXX0pLG59KSgpLENFPV9lKCJbRGVidWdnZXJdIERlYnVnZ2VyIExvYWRlZCIpLE1FPV9lKCJbRGVidWdnZXJdIERlYnVnZ2VyIFVubG9hZGVkIiksYXk9X2UoIltEZWJ1Z2dlcl0gQSBOZXcgRGVidWdnZXIgRGF0YSBQb2xsaW5nIEV2ZW50IEJlZ2lucyIpLHdFPV9lKCJbRGVidWdnZXJdIERlYnVnZ2VyIFJ1bnMgUmVxdWVzdGVkIiksU0U9X2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrWT1fZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIFJlcXVlc3QgRmFpbGVkIiksbHk9X2UoIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIFJlcXVlc3RlZCIpLEVFPV9lKCJbRGVidWdnZXJdIE51bWJlciBhbmQgQnJlYWtkb3duIG9mIEFsZXJ0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxURT1fZSgiW0RlYnVnZ2VyXSBBbGVydHMgRGF0YSBvZiBhbiBBbGVydFR5cGUgSXMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU2c9X2UoIltEZWJ1Z2dlcl0gQWxlcnQgVHlwZSBGb2N1cyBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksREU9X2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIFJlcXVlc3RlZCIpLElFPV9lKCJbRGVidWdnZXJdIE51bWJlciBvZiBUb3AtTGV2ZWwgRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBRT1fZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb25EaWdlc3RzIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFJFPV9lKCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRWc9X2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIExlZnR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSxUZz1fZSgiW0RlYnVnZ2VyXSBTY3JvbGwgUmlnaHR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSxEZz1fZSgiW0RlYnVnZ2VyXSBTY3JvbGwgdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSB0byBHaXZlbiBJbmRleCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLElnPV9lKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgQmVpbmcgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBFPV9lKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksT0U9X2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksa0U9X2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRkU9X2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTkU9X2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQWc9X2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBMaXN0IHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUmc9X2UoIltEZWJ1Z2dlcl0gR3JhcGggRXhlY3V0aW9uIGlzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQZz1fZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJcyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTEU9X2UoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSW5mbyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCRT1fZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFZFPV9lKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgUmVxdWVzdGVkLiIpLEhFPV9lKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksT2c9X2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGluZSBJcyBGb2N1c2VkIG9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksekU9X2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVUU9X2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY3k9X2UoIltEZWJ1Z2dlcl0gQSBTZXQgb2YgU3RhY2sgRnJhbWVzIEhhdmUgQmVlbiBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkeT0iZGVidWdnZXIiLFNvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTlNQRUNJRklFRD0wXT0iVU5TUEVDSUZJRUQiLG5bbi5OT19URU5TT1I9MV09Ik5PX1RFTlNPUiIsbltuLkNVUlRfSEVBTFRIPTJdPSJDVVJUX0hFQUxUSCIsbltuLkNPTkNJU0VfSEVBTFRIPTNdPSJDT05DSVNFX0hFQUxUSCIsbltuLkZVTExfSEVBTFRIPTRdPSJGVUxMX0hFQUxUSCIsbltuLlNIQVBFPTVdPSJTSEFQRSIsbltuLkZVTExfTlVNRVJJQ1M9Nl09IkZVTExfTlVNRVJJQ1MiLG5bbi5GVUxMX1RFTlNPUj03XT0iRlVMTF9URU5TT1IiLG5bbi5SRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUz04XT0iUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFMifShTb3x8KFNvPXt9KSksU28pKSgpLFZjPSgoKT0+KGZ1bmN0aW9uKG4pe24uRlVOQ1RJT05fUkVDT01QSUxFX0FMRVJUPSJGdW5jdGlvblJlY29tcGlsZXNBbGVydCIsbi5JTkZfTkFOX0FMRVJUPSJJbmZOYW5BbGVydCIsbi5URU5TT1JfU0hBUEVfQUxFUlQ9IlRlbnNvclNoYXBlQWxlcnQifShWY3x8KFZjPXt9KSksVmMpKSgpLExvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWEVDVVRJT049MF09IkVYRUNVVElPTiIsbltuLkdSQVBIX09QX0NSRUFUSU9OPTFdPSJHUkFQSF9PUF9DUkVBVElPTiJ9KExvfHwoTG89e30pKSxMbykpKCk7ZnVuY3Rpb24ga2cobil7aWYobnVsbD09PW4uY29kZUxvY2F0aW9uRm9jdXNUeXBlKXJldHVybiBudWxsO2xldCB0PVtdO2lmKG4uY29kZUxvY2F0aW9uRm9jdXNUeXBlPT09TG8uRVhFQ1VUSU9OKXtsZXR7Zm9jdXNJbmRleDppLGV4ZWN1dGlvbkRhdGE6cn09bi5leGVjdXRpb25zO2lmKG51bGw9PT1pfHx2b2lkIDA9PT1yW2ldKXJldHVybiBudWxsO3Q9cltpXS5zdGFja19mcmFtZV9pZHN9ZWxzZXtpZihudWxsPT09bi5ncmFwaHMuZm9jdXNlZE9wKXJldHVybiBudWxsO2xldHtncmFwaElkOmksb3BOYW1lOnJ9PW4uZ3JhcGhzLmZvY3VzZWRPcDtpZih2b2lkIDA9PT1uLmdyYXBocy5vcHNbaV18fCFuLmdyYXBocy5vcHNbaV0uaGFzKHIpKXJldHVybiBudWxsO3Q9bi5ncmFwaHMub3BzW2ldLmdldChyKS5zdGFja19mcmFtZV9pZHN9bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpe2lmKG51bGw9PW4uc3RhY2tGcmFtZXNbaV0pcmV0dXJuIG51bGw7ZS5wdXNoKG4uc3RhY2tGcmFtZXNbaV0pfXJldHVybiBlfWZ1bmN0aW9uIHV5KG4sdCl7cmV0dXJuIG4uZmluZEluZGV4KGU9PmUuaG9zdF9uYW1lPT09dC5ob3N0X25hbWUmJmUuZmlsZV9wYXRoPT09dC5maWxlX3BhdGgpfWZ1bmN0aW9uIGFOKG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybiBuLmZpbmRJbmRleChpPT5pLmJlZ2luPT09dCYmaS5lbmQ9PT1lKX1mdW5jdGlvbiBqRShuKXtsZXQgdD1uLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYztpZighbi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSlyZXR1cm4gdDtsZXQgZT1rZyhuKTtpZihudWxsPT09ZSlyZXR1cm4gdDtsZXQgaT1mdW5jdGlvbihuLHQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO2ZvcihsZXQgZT1uLmxlbmd0aC0xO2U+PTA7LS1lKXtsZXQgaT1uW2VdLHtob3N0X25hbWU6cixmaWxlX3BhdGg6b309aTtpZihyPT09dC5ob3N0X25hbWUmJm89PT10LmZpbGVfcGF0aClyZXR1cm4gaX1yZXR1cm4gbnVsbH0oZSx0KTtyZXR1cm4gbnVsbD09PWk/dDppfXZhciBiTWU9YnIoe3J1bnM6e30scnVuc0xvYWRlZDp7c3RhdGU6VGUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sYWN0aXZlUnVuSWQ6bnVsbCxsYXN0RGF0YVBvbGxPbnNldFRpbWVNczotMSxsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczoxLGFsZXJ0czp7YWxlcnRzTG9hZGVkOntzdGF0ZTpUZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxudW1BbGVydHM6MCxhbGVydHNCcmVha2Rvd246e30sYWxlcnRzOnt9LGV4ZWN1dGlvbkluZGljZXM6e30sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOnt9LGZvY3VzVHlwZTpudWxsfSxleGVjdXRpb25zOntudW1FeGVjdXRpb25zTG9hZGVkOntzdGF0ZTpUZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOntsb2FkaW5nUmFuZ2VzOltdLG51bUV4ZWN1dGlvbnM6MCxwYWdlTG9hZGVkU2l6ZXM6e319LGRpc3BsYXlDb3VudDo1MCxwYWdlU2l6ZToxMDAsc2Nyb2xsQmVnaW5JbmRleDowLGZvY3VzSW5kZXg6bnVsbCxleGVjdXRpb25EaWdlc3RzOnt9LGV4ZWN1dGlvbkRhdGE6e319LGdyYXBoRXhlY3V0aW9uczp7bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6VGUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6MTAwLHBhZ2VTaXplOjIwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGdyYXBoRXhlY3V0aW9uRGlnZXN0czp7fSxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6W10sZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YTp7fX0sZ3JhcGhzOntvcHM6e30sbG9hZGluZ09wczp7fSxmb2N1c2VkT3A6bnVsbH0sc3RhY2tGcmFtZXM6e30sY29kZUxvY2F0aW9uRm9jdXNUeXBlOm51bGwsc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU6ITEsc291cmNlQ29kZTp7c291cmNlRmlsZUxpc3RMb2FkZWQ6e3N0YXRlOlRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHNvdXJjZUZpbGVMaXN0OltdLGZpbGVDb250ZW50czpbXSxmb2N1c0xpbmVTcGVjOm51bGx9fSx5ZSh3RSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOlRlLkxPQURJTkd9fSkpLHllKGtZLG49Pih7Li4ubixydW5zTG9hZGVkOnsuLi5uLnJ1bnNMb2FkZWQsc3RhdGU6VGUuRkFJTEVEfX0pKSx5ZShTRSwobix7cnVuczp0fSk9PntsZXQgZT1PYmplY3Qua2V5cyh0KSxpPWUubGVuZ3RoPjAmJm51bGw9PT1uLmFjdGl2ZVJ1bklkO3JldHVybnsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOmk/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLHJ1bnM6dCxydW5zTG9hZGVkOntzdGF0ZTpUZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LGFjdGl2ZVJ1bklkOmUubGVuZ3RoPjA/ZVswXTpudWxsfX0pLHllKGF5LG49Pih7Li4ubixsYXN0RGF0YVBvbGxPbnNldFRpbWVNczpEYXRlLm5vdygpfSkpLHllKGx5LG49Pm51bGw9PT1uLmFjdGl2ZVJ1bklkP246ey4uLm4sYWxlcnRzOnsuLi5uLmFsZXJ0cyxhbGVydHNMb2FkZWQ6ey4uLm4uYWxlcnRzLmFsZXJ0c0xvYWRlZCxzdGF0ZTpUZS5MT0FESU5HfX19KSx5ZShFRSwobix7bnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmV9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCByPXQ+bi5hbGVydHMubnVtQWxlcnRzO3JldHVybnsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOnI/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGFsZXJ0czp7Li4ubi5hbGVydHMsYWxlcnRzTG9hZGVkOnsuLi5uLmFsZXJ0cy5hbGVydHNMb2FkZWQsc3RhdGU6VGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZX19fSkseWUoVEUsKG4se251bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplLGFsZXJ0VHlwZTppLGJlZ2luOnIsYWxlcnRzOm99KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBhPXt9LGw9bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXT9uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW2ldLnNsaWNlKCk6W10sYz1uLmFsZXJ0cy5ncmFwaEV4ZWN1dGlvbkluZGljZXNbaV0/bi5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzW2ldLnNsaWNlKCk6W107Zm9yKGxldCBwPTA7cDxvLmxlbmd0aDsrK3Ape2xldCBmPXIrcCxtPW9bcF07aWYoYVtmXT1tLG0uYWxlcnRfdHlwZT09PVZjLklORl9OQU5fQUxFUlQpe2xldCBiPW07bFtmXT1iLmV4ZWN1dGlvbl9pbmRleCxudWxsIT09Yi5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgmJihjW2ZdPWIuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4KX19dm9pZCAwIT09bi5hbGVydHMuYWxlcnRzW2ldJiZPYmplY3QuYXNzaWduKGEsbi5hbGVydHMuYWxlcnRzW2ldKTtsZXQgZD1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCx1PW4uZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXg7aWYoaT09PVZjLklORl9OQU5fQUxFUlQmJjA9PT1yKXtsZXQgcD1vWzBdO2Q9TWF0aC5tYXgoMCxwLmV4ZWN1dGlvbl9pbmRleC1NYXRoLmZsb29yKG4uZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQvMikpLG51bGwhPT1wLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCYmKHU9cC5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgpfXJldHVybnsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OmR9LGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZm9jdXNJbmRleDp1fSxhbGVydHM6ey4uLm4uYWxlcnRzLGFsZXJ0c0xvYWRlZDp7Li4ubi5hbGVydHMuYWxlcnRzTG9hZGVkLHN0YXRlOlRlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sbnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmUsYWxlcnRzOnsuLi5uLmFsZXJ0cy5hbGVydHMsW2ldOmF9LGV4ZWN1dGlvbkluZGljZXM6ey4uLm4uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXMsW2ldOmx9LGdyYXBoRXhlY3V0aW9uSW5kaWNlczp7Li4ubi5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzLFtpXTpjfX19fSkseWUoU2csKG4se2FsZXJ0VHlwZTp0fSk9PntsZXQgZT17Li4ubixhbGVydHM6ey4uLm4uYWxlcnRzLGZvY3VzVHlwZTpuLmFsZXJ0cy5mb2N1c1R5cGU9PT10P251bGw6dH19LGk9ZS5hbGVydHMuZm9jdXNUeXBlO2lmKG51bGwhPT1pKXtsZXQgcj1lLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW2ldfHxbXTt2b2lkIDAhPT1yWzBdJiYoZS5leGVjdXRpb25zPXsuLi5lLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDpNYXRoLm1heCgwLE51bWJlcihyWzBdKS1NYXRoLmZsb29yKGUuZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQvMikpfSl9cmV0dXJuIGV9KSx5ZShERSxuPT5udWxsPT09bi5hY3RpdmVSdW5JZD9uOnsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpUZS5MT0FESU5HfX19KSx5ZShJRSwobix7bnVtRXhlY3V0aW9uczp0fSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT10Pm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMscj17Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczppP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6VGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxudW1FeGVjdXRpb25zOnR9fX07cmV0dXJuIHQ+MCYmbnVsbD09PW4uZXhlY3V0aW9ucy5mb2N1c0luZGV4JiYoci5leGVjdXRpb25zLmZvY3VzSW5kZXg9MCkscn0pLHllKEFFLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9Wy4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLmxvYWRpbmdSYW5nZXNdO3JldHVybi0xPT09YU4oaSx0LmJlZ2luLHQuZW5kKSYmaS5wdXNoKHtiZWdpbjp0LmJlZ2luLGVuZDp0LmVuZH0pLHsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxsb2FkaW5nUmFuZ2VzOml9fX19KSx5ZShSRSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPVsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5sb2FkaW5nUmFuZ2VzXSxyPWFOKGksdC5iZWdpbix0LmVuZCk7LTEhPT1yJiZpLnNwbGljZShyLDEpO2xldCBvPXsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxudW1FeGVjdXRpb25zOnQubnVtX2RpZ2VzdHMsbG9hZGluZ1JhbmdlczppfSxleGVjdXRpb25EaWdlc3RzOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c319fTtmb3IobGV0IHM9dC5iZWdpbjtzPHQuZW5kOysrcylvLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c1tzXT10LmV4ZWN1dGlvbl9kaWdlc3RzW3MtdC5iZWdpbl07cmV0dXJuIHQuZW5kPnQuYmVnaW4mJihvLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5wYWdlTG9hZGVkU2l6ZXM9ey4uLm8uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLnBhZ2VMb2FkZWRTaXplcyxbdC5iZWdpbi9uLmV4ZWN1dGlvbnMucGFnZVNpemVdOnQuZW5kLXQuYmVnaW59KSxvfSkseWUoRWcsbj0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4O3JldHVybiBlPjAmJmUtLSx7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDplfX19KSx5ZShUZyxuPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXg7cmV0dXJuIGUrbi5leGVjdXRpb25zLmRpc3BsYXlDb3VudCsxPD1uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zJiZlKyssey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6ZX19fSkseWUoRGcsKG4sdCk9PntpZih0LmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZXhlY3V0aW9uIGluZGV4ICgke3QuaW5kZXh9KWApO2xldHtkaXNwbGF5Q291bnQ6ZX09bi5leGVjdXRpb25zLHtudW1FeGVjdXRpb25zOml9PW4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkO2lmKHQuaW5kZXg+TWF0aC5tYXgoMCxpLWUpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gZXhlY3V0aW9uIGluZGV4ICgke3QuaW5kZXh9KSwgd2hpY2ggZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgaW5kZXggKG51bUV4ZWN1dGlvbnM9JHtpfTsgZGlzcGxheUNvdW50PSR7ZX0pYCk7cmV0dXJuey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6dC5pbmRleH19fSkseWUoSWcsKG4sdCk9PntsZXQgZT17Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZm9jdXNJbmRleDpuLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCt0LmRpc3BsYXlJbmRleH0sY29kZUxvY2F0aW9uRm9jdXNUeXBlOkxvLkVYRUNVVElPTixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9akUoZSksZX0pLHllKFBFLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGV4ZWN1dGlvbkRhdGE6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EYXRhfX19O2ZvcihsZXQgcj10LmJlZ2luO3I8dC5lbmQ7KytyKWkuZXhlY3V0aW9ucy5leGVjdXRpb25EYXRhW3JdPXQuZXhlY3V0aW9uc1tyLXQuYmVnaW5dO3JldHVybiBpfSkseWUoT0Usbj0+bnVsbD09PW4uYWN0aXZlUnVuSWQ/bjp7Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6VGUuTE9BRElOR319fSkseWUoa0UsKG4se251bUdyYXBoRXhlY3V0aW9uczp0fSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT10Pm4uZ3JhcGhFeGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyxpPXsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOmU/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpUZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0fX19O3JldHVybiB0PjAmJm51bGw9PT1uLmdyYXBoRXhlY3V0aW9ucy5mb2N1c0luZGV4JiYoaS5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleD0wKSxpfSkseWUoRkUsKG4se3BhZ2VJbmRleDp0fSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT1uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXMuc2xpY2UoKTtyZXR1cm4tMT09PWUuaW5kZXhPZih0KSYmZS5wdXNoKHQpLHsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOmV9fX0pLHllKE5FLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0e3BhZ2VTaXplOmV9PW4uZ3JhcGhFeGVjdXRpb25zLGk9bi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzLnNsaWNlKCkscj17Li4ubi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzfSxvPXsuLi5uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGF9O2ZvcihsZXQgcz10LmJlZ2luO3M8dC5lbmQ7KytzKXtsZXQgYT1NYXRoLmZsb29yKHMvZSk7LTEhPT1pLmluZGV4T2YoYSkmJmkuc3BsaWNlKGkuaW5kZXhPZihhKSwxKSx2b2lkIDA9PT1yW2FdJiYoclthXT0wKSx2b2lkIDA9PT1vW3NdJiZyW2FdKyssb1tzXT10LmdyYXBoX2V4ZWN1dGlvbnNbcy10LmJlZ2luXX1yZXR1cm57Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczppLGdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplczpyLGdyYXBoRXhlY3V0aW9uRGF0YTpvfX19KSx5ZShBZywobix0KT0+e2lmKHQuaW5kZXg8MHx8IU51bWJlci5pc0ludGVnZXIodC5pbmRleCkpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBuZWdhdGl2ZSBvciBub24taW50ZWdlciBncmFwaC1leGVjdXRpb24gaW5kZXggKCR7dC5pbmRleH0pYCk7cmV0dXJuey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OnQuaW5kZXh9fX0pLHllKFJnLChuLHQpPT5MWShuLHQuZ3JhcGhfaWQsdC5vcF9uYW1lLHQuaW5kZXgpKSx5ZShQZywobix0KT0+TFkobix0LmdyYXBoX2lkLHQub3BfbmFtZSkpLHllKExFLChuLHQpPT57bGV0e2dyYXBoX2lkOmUsb3BfbmFtZTppfT10LHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxsb2FkaW5nT3BzOnsuLi5uLmdyYXBocy5sb2FkaW5nT3BzfX19O3JldHVybiB2b2lkIDA9PT1yLmdyYXBocy5sb2FkaW5nT3BzW2VdJiYoci5ncmFwaHMubG9hZGluZ09wc1tlXT1uZXcgTWFwKSxyLmdyYXBocy5sb2FkaW5nT3BzW2VdLmhhcyhpKXx8ci5ncmFwaHMubG9hZGluZ09wc1tlXS5zZXQoaSxUZS5MT0FESU5HKSxyfSkseWUoQkUsKG4sdCk9PntsZXR7Z3JhcGhPcEluZm9SZXNwb25zZTplfT10LHtncmFwaF9pZHM6aX09ZSxyPWlbaS5sZW5ndGgtMV0sbz17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLG9wczp7Li4ubi5ncmFwaHMub3BzLFtyXTpuZXcgTWFwKG4uZ3JhcGhzLm9wc1tyXSl9LGxvYWRpbmdPcHM6ey4uLm4uZ3JhcGhzLmxvYWRpbmdPcHMsW3JdOm5ldyBNYXAobi5ncmFwaHMubG9hZGluZ09wc1tyXSl9fX07Zm9yKGxldCBzIG9mIGUuaW5wdXRzKSFzLmRhdGF8fG8uZ3JhcGhzLm9wc1tyXS5zZXQocy5vcF9uYW1lLHMuZGF0YSk7Zm9yKGxldCBzPTA7czxlLmNvbnN1bWVycy5sZW5ndGg7KytzKWZvcihsZXQgYSBvZiBlLmNvbnN1bWVyc1tzXSkhYS5kYXRhfHxvLmdyYXBocy5vcHNbcl0uc2V0KGEub3BfbmFtZSxhLmRhdGEpO3JldHVybiBvLmdyYXBocy5vcHNbcl0uc2V0KGUub3BfbmFtZSx7Li4uZSxpbnB1dHM6ZS5pbnB1dHMubWFwKHM9Pih7b3BfbmFtZTpzLm9wX25hbWUsb3V0cHV0X3Nsb3Q6cy5vdXRwdXRfc2xvdH0pKSxjb25zdW1lcnM6ZS5jb25zdW1lcnMubWFwKHM9PnMubWFwKGE9Pih7b3BfbmFtZTphLm9wX25hbWUsaW5wdXRfc2xvdDphLmlucHV0X3Nsb3R9KSkpfSksby5ncmFwaHMubG9hZGluZ09wc1tyXS5zZXQoZS5vcF9uYW1lLFRlLkxPQURFRCksb30pLHllKFZFLG49Pih7Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpUZS5MT0FESU5HfX19KSkseWUoSEUsKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpUZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LHNvdXJjZUZpbGVMaXN0OnQuc291cmNlRmlsZXMsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9dC5zb3VyY2VGaWxlcy5sZW5ndGgse2ZpbGVDb250ZW50czpyfT1lLnNvdXJjZUNvZGU7Zm9yKGxldCBvPTA7bzxpOysrbylyW29dPW4uc291cmNlQ29kZS5maWxlQ29udGVudHNbb10/P3tsb2FkU3RhdGU6VGUuTk9UX0xPQURFRCxsaW5lczpudWxsfTtyZXR1cm4gZX0pLHllKE9nLChuLHQpPT57bGV0IGU9a2cobiksaT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZm9jdXNMaW5lU3BlYzp0LnN0YWNrRnJhbWV9fTtyZXR1cm4gbnVsbCE9PWUmJihpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9LTEsaT0tMTtpZihuLmZvckVhY2goKHtmaWxlX3BhdGg6cixsaW5lbm86b30scyk9PntyPT09dC5maWxlX3BhdGgmJihpPXMsbz09PXQubGluZW5vJiYoZT1zKSl9KSwtMT09PWUpdGhyb3cgbmV3IEVycm9yKGBTdGFjayBmcmFtZSAke0pTT04uc3RyaW5naWZ5KHQpfSBpcyBub3QgZm91bmQuYCk7cmV0dXJuIGU9PT1pfShlLHQuc3RhY2tGcmFtZSkpLGl9KSx5ZSh6RSwobix0KT0+e2xldCBlPXsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxmaWxlQ29udGVudHM6bi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfX0saT11eShlLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3QsdCk7aWYoIShpPj0wKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBmb2xsb3dpbmcgZmlsZSBpbiBmaWxlIGxpc3Q6IGhvc3RfbmFtZT0iJHt0Lmhvc3RfbmFtZX0iLCBmaWxlX3BhdGg9IiR7dC5maWxlX3BhdGh9ImApO3JldHVybiBlLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNwbGljZShpLDEsey4uLmUuc291cmNlQ29kZS5maWxlQ29udGVudHNbaV0sbG9hZFN0YXRlOlRlLkxPQURJTkd9KSxlfSkseWUoVUUsKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9dXkoZS5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LHQpO2lmKCEoaT49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7dC5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke3QuZmlsZV9wYXRofSJgKTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UoaSwxLHtsb2FkU3RhdGU6VGUuTE9BREVELGxpbmVzOnQubGluZXN9KSxlfSkseWUoY3ksKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT17Li4ubixzdGFja0ZyYW1lczp7Li4ubi5zdGFja0ZyYW1lcywuLi50LnN0YWNrRnJhbWVzfSxzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gaS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9akUoaSksaX0pKTtmdW5jdGlvbiBMWShuLHQsZSxpKXtsZXQgcj17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLGZvY3VzZWRPcDp7Z3JhcGhJZDp0LG9wTmFtZTplfX0sY29kZUxvY2F0aW9uRm9jdXNUeXBlOkxvLkdSQVBIX09QX0NSRUFUSU9OLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZX19O3JldHVybiByLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYz1qRShyKSx2b2lkIDAhPT1pJiYoci5ncmFwaEV4ZWN1dGlvbnM9ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGZvY3VzSW5kZXg6aX0pLHJ9ZnVuY3Rpb24gQlkobix0KXtyZXR1cm4gYk1lKG4sdCl9dmFyIEVvPUVyKGR5KSxBZj1xKEVvLG49Pm4ucnVucyksbE49cShFbyxuPT5uLnJ1bnNMb2FkZWQpLFFvPXEoRW8sbj0+bi5hY3RpdmVSdW5JZCksVlk9cShFbyxuPT5uLmxhc3REYXRhUG9sbE9uc2V0VGltZU1zLW4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMpLEZnPXEoRW8sbj0+bi5hbGVydHMpLGNOPXEoRmcsbj0+bi5hbGVydHNMb2FkZWQpLEhZPXEoRmcsbj0+bi5udW1BbGVydHMpLEdFPXEoRmcsbj0+bi5mb2N1c1R5cGUpLHpZPXEoRmcsbj0+bnVsbD09PW4uZm9jdXNUeXBlPzA6bi5hbGVydHNCcmVha2Rvd25bbi5mb2N1c1R5cGVdfHwwKSxVWT1xKEZnLG49Pm51bGw9PT1uLmZvY3VzVHlwZXx8dm9pZCAwPT09bi5hbGVydHNbbi5mb2N1c1R5cGVdP251bGw6bi5hbGVydHNbbi5mb2N1c1R5cGVdKSxqWT1xKEZnLG49Pm4uYWxlcnRzQnJlYWtkb3duKSxSZj1xKEVvLG49Pm4uZXhlY3V0aW9ucyksV0U9cShSZixuPT5uLm51bUV4ZWN1dGlvbnNMb2FkZWQpLHB5PXEoUmYsbj0+bi5leGVjdXRpb25EaWdlc3RzTG9hZGVkKSxHdT1xKFJmLG49Pm4uZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSxmeT1xKFJmLG49Pm4uc2Nyb2xsQmVnaW5JbmRleCksTmc9cShSZixuPT5uLnBhZ2VTaXplKSxMZz1xKFJmLG49Pm4uZGlzcGxheUNvdW50KSxHWT1xKFJmLG49PntsZXQgdD1bXTtmb3IobGV0IGU9bi5zY3JvbGxCZWdpbkluZGV4O2U8bi5zY3JvbGxCZWdpbkluZGV4K24uZGlzcGxheUNvdW50OysrZSl0LnB1c2goZSBpbiBuLmV4ZWN1dGlvbkRpZ2VzdHM/bi5leGVjdXRpb25EaWdlc3RzW2VdOm51bGwpO3JldHVybiB0fSksV3U9cShFbyxuPT5uLmdyYXBoRXhlY3V0aW9ucyksV1k9cShXdSxuPT5uLm51bUV4ZWN1dGlvbnNMb2FkZWQpLG15PXEoRW8sbj0+bi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSxxWT1xKFd1LG49Pm4uc2Nyb2xsQmVnaW5JbmRleCksWVk9cShXdSxuPT5uLmRpc3BsYXlDb3VudCksWFk9cShXdSxuPT5uLnBhZ2VTaXplKSxRWT1xKFd1LG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzKSxaWT1xKFd1LG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzKSxkTj1xKFd1LG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhKSx1Tj1xKFd1LG49Pm4uZm9jdXNJbmRleCkscE49cShFbyxuPT5uLmdyYXBocyksZk49cShwTixuPT57bGV0e2ZvY3VzZWRPcDp0LG9wczplfT1uO3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdP251bGw6ZVt0LmdyYXBoSWRdLmdldCh0Lm9wTmFtZSl8fG51bGx9KSxtTj1xKHBOLG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47aWYobnVsbD09PXR8fHZvaWQgMD09PWVbdC5ncmFwaElkXXx8IWVbdC5ncmFwaElkXS5oYXModC5vcE5hbWUpKXJldHVybiBudWxsO3tsZXQgaT1lW3QuZ3JhcGhJZF0se2lucHV0czpyfT1pLmdldCh0Lm9wTmFtZSk7cmV0dXJuIHIubWFwKG89PntsZXQgcz17Li4ub307cmV0dXJuIGkuaGFzKG8ub3BfbmFtZSkmJihzLmRhdGE9aS5nZXQoby5vcF9uYW1lKSksc30pfX0pLEtZPXEodU4sZE4sbU4sKG4sdCxlKT0+e2lmKG51bGw9PT1ufHxudWxsPT09ZSlyZXR1cm4gbnVsbDtsZXQgaT1lLm1hcChhPT4hMSkscj1bXTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHI7bGV0IG89dFtuXS5ncmFwaF9pZCxzPU1hdGgubWF4KDAsbi0yMDApO2ZvcihsZXQgYT1uLTE7YT49czstLWEpaWYodm9pZCAwIT09dFthXSlmb3IobGV0IGw9MDtsPGUubGVuZ3RoJiYoaVtsXXx8dFthXS5ncmFwaF9pZCE9PW98fHRbYV0ub3BfbmFtZSE9PWVbbF0ub3BfbmFtZXx8dFthXS5vdXRwdXRfc2xvdCE9PWVbbF0ub3V0cHV0X3Nsb3R8fChyLnB1c2goYSksaVtsXT0hMCxyLmxlbmd0aCE9PWUubGVuZ3RoKSk7KytsKTtyZXR1cm4gcn0pLEpZPXEocE4sbj0+e2xldHtmb2N1c2VkT3A6dCxvcHM6ZX09bjtpZihudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdfHwhZVt0LmdyYXBoSWRdLmhhcyh0Lm9wTmFtZSkpcmV0dXJuIG51bGw7e2xldCBpPWVbdC5ncmFwaElkXSx7Y29uc3VtZXJzOnJ9PWkuZ2V0KHQub3BOYW1lKTtyZXR1cm4gci5tYXAobz0+by5tYXAocz0+e2xldCBhPXsuLi5zfTtyZXR1cm4gaS5oYXMocy5vcF9uYW1lKSYmKGEuZGF0YT1pLmdldChzLm9wX25hbWUpKSxhfSkpfX0pLCRZPXEoRW8sbj0+e2xldCB0PW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgrbi5leGVjdXRpb25zLmRpc3BsYXlDb3VudCxpPW5ldyBBcnJheShlLXQpLmZpbGwobnVsbCkscj1uLmFsZXJ0cy5mb2N1c1R5cGU7aWYobnVsbD09PXIpcmV0dXJuIGk7bGV0IG89bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tyXTtpZih2b2lkIDA9PT1vKXJldHVybiBpO2ZvcihsZXQgcz10O3M8ZTsrK3Mpby5pbmNsdWRlcyhzKSYmKGlbcy10XT1uLmFsZXJ0cy5mb2N1c1R5cGUpO3JldHVybiBpfSkscUU9cShFbyxuPT5uLmV4ZWN1dGlvbnMpLGhOPXEocUUsbj0+bi5mb2N1c0luZGV4KSxlWD1xKHFFLG49PntpZihudWxsPT09bi5mb2N1c0luZGV4KXJldHVybiBudWxsO2xldHtmb2N1c0luZGV4OnQsc2Nyb2xsQmVnaW5JbmRleDplLGRpc3BsYXlDb3VudDppfT1uO3JldHVybiB0PGV8fHQ+PWUraT9udWxsOnQtZX0pLGdOPXEocUUsbj0+bi5leGVjdXRpb25EYXRhKSx0WD1xKEVvLG49Pm4uZ3JhcGhzLmxvYWRpbmdPcHMpLF9OPXEoRW8sbj0+bi5zdGFja0ZyYW1lcyksUGY9cShxRSxuPT57bGV0e2ZvY3VzSW5kZXg6dCxleGVjdXRpb25EYXRhOmV9PW47cmV0dXJuIG51bGw9PT10fHx2b2lkIDA9PT1lW3RdP251bGw6ZVt0XX0pLGh5PXEoRW8saE4sUGYsZk4sKG4sdCxlLGkpPT57bGV0e2NvZGVMb2NhdGlvbkZvY3VzVHlwZTpyfT1uO3JldHVybiBudWxsPT09cj9udWxsOnI9PT1Mby5FWEVDVVRJT04/bnVsbD09PXR8fG51bGw9PT1lP251bGw6e2NvZGVMb2NhdGlvblR5cGU6TG8uRVhFQ1VUSU9OLG9wVHlwZTplLm9wX3R5cGUsZXhlY3V0aW9uSW5kZXg6dH06bnVsbD09PWk/bnVsbDp7Y29kZUxvY2F0aW9uVHlwZTpMby5HUkFQSF9PUF9DUkVBVElPTixvcFR5cGU6aS5vcF90eXBlLG9wTmFtZTppLm9wX25hbWV9fSksblg9cShFbyxrZyksWUU9cShFbyxuPT5uLnNvdXJjZUNvZGUpLGlYPXEoWUUsbj0+bi5zb3VyY2VGaWxlTGlzdExvYWRlZCksYk49KHEoWUUsbj0+bi5zb3VyY2VGaWxlTGlzdCkscShZRSxuPT57bGV0e3NvdXJjZUZpbGVMaXN0OnQsZm9jdXNMaW5lU3BlYzplfT1uO3JldHVybiBudWxsPT09ZT8tMTp1eSh0LGUpfSkpLFhFPXEoWUUsYk4sKG4sdCk9Pi0xPT09dD9udWxsOm4uZmlsZUNvbnRlbnRzW3RdfHxudWxsKSxRRT1xKEVvLG49Pm4uc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjKSxyWD1xKEVvLG49Pm4uc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUpLG9YPWZ1bmN0aW9uKG4pe3JldHVybltuXX07ZnVuY3Rpb24geU1lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw3KSxJKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1YKGUpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KCkub25Ub2dnbGVGb2N1c1R5cGUuZW1pdChvLnR5cGUpKX0pLGgoMSwiZGl2Iiw4KSxUKDIpLGcoKSxoKDMsImRpdiIsOSksVCg0KSxnKCksUCg1LCJkaXYiKSxnKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTtfKCJuZ0NsYXNzIixJbig0LG9YLGUudHlwZT09PWkuZm9jdXNUeXBlPyJmb2N1cyI6IiIpKSx2KDIpLGJ0KGUuZGlzcGxheU5hbWUpLHYoMiksbHUoIiAiLGUuZGlzcGxheVN5bWJvbCwiOiAiLGUuY291bnQsIiAiKX19dmFyIHNYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm51bUFsZXJ0cz0wLHRoaXMuYWxlcnRzQnJlYWtkb3duPVtdLHRoaXMuZm9jdXNUeXBlPW51bGwsdGhpcy5vblRvZ2dsZUZvY3VzVHlwZT1uZXcgRn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnRzLWNvbXBvbmVudCJdXSxpbnB1dHM6e251bUFsZXJ0czoibnVtQWxlcnRzIixhbGVydHNCcmVha2Rvd246ImFsZXJ0c0JyZWFrZG93biIsZm9jdXNUeXBlOiJmb2N1c1R5cGUifSxvdXRwdXRzOntvblRvZ2dsZUZvY3VzVHlwZToib25Ub2dnbGVGb2N1c1R5cGUifSxkZWNsczoxMCx2YXJzOjUsY29uc3RzOltbMSwiYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJkZWJ1Z2dpbmctdGl0bGUiXSxbMSwibnVtLWFsZXJ0cy1jb250YWluZXIiXSxbMSwibnVtLWFsZXJ0cy1sYWJlbCJdLFsxLCJudW0tYWxlcnRzLXZhbHVlIiwzLCJuZ0NsYXNzIl0sWzEsImFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyIl0sWyJjbGFzcyIsImFsZXJ0cy1icmVha2Rvd24tdHlwZSIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbMSwiYWxlcnQtdHlwZS1uYW1lIl0sWzEsImFsZXJ0LXR5cGUtY291bnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxUKDIsIkRlYnVnZ2luZyIpLGcoKSxoKDMsImRpdiIsMikoNCwiZGl2IiwzKSxUKDUsIkFsZXJ0cyIpLGcoKSxoKDYsImRpdiIsNCksVCg3KSxnKCkoKSxoKDgsImRpdiIsNSksUyg5LHlNZSw2LDYsImRpdiIsNiksZygpKCkpLDImZSYmKHYoNiksXygibmdDbGFzcyIsSW4oMyxvWCxpLm51bUFsZXJ0cz4wPyJub24temVybyI6IiIpKSx2KDEpLEhlKCIgIixpLm51bUFsZXJ0cywiICIpLHYoMiksXygibmdGb3JPZiIsaS5hbGVydHNCcmVha2Rvd24pKX0sZGVwZW5kZW5jaWVzOlt5bixubl0sc3R5bGVzOlsiLmFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZzogMTBweCAxMHB4IDEwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmFsZXJ0cy1icmVha2Rvd24tdHlwZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBib3JkZXItcmFkaXVzOiAwIDEwcHggMTBweCAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDZweCAwIDZweCA1MHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYWxlcnRzLWJyZWFrZG93bi10eXBlLmZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlZTA7XG59XG5cbi5hbGVydHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbn1cblxuLmFsZXJ0LXR5cGUtY291bnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgY29sb3I6ICNmZmY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYWxlcnQtdHlwZS1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uZGVidWdnaW5nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMThweDtcbn1cblxuLm51bS1hbGVydHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBwYWRkaW5nOiAxMHB4IDEwcHggMTBweCAzMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5udW0tYWxlcnRzLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuXG4ubnVtLWFsZXJ0cy12YWx1ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDI0cHg7XG59XG5cbi5udW0tYWxlcnRzLXZhbHVlLm5vbi16ZXJvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmI3ODA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufSJdfSksbn0pKCksQ01lPXtbVmMuRlVOQ1RJT05fUkVDT01QSUxFX0FMRVJUXTp7ZGlzcGxheU5hbWU6IkZ1bmN0aW9uIHJlY29tcGlsZXMiLGRpc3BsYXlTeW1ib2w6IkMifSxbVmMuSU5GX05BTl9BTEVSVF06e2Rpc3BsYXlOYW1lOiJOYU4vXHUyMjFlIixkaXNwbGF5U3ltYm9sOiJcdTIyMWUifSxbVmMuVEVOU09SX1NIQVBFX0FMRVJUXTp7ZGlzcGxheU5hbWU6IlRlbnNvciBzaGFwZSIsZGlzcGxheVN5bWJvbDoiXHUyNWEwIn19LGFYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubnVtQWxlcnRzJD10aGlzLnN0b3JlLnBpcGUodW4oSFkpKSx0aGlzLmFsZXJ0c0JyZWFrZG93biQ9dGhpcy5zdG9yZS5waXBlKHVuKHEoalksaT0+e2xldCByPU9iamVjdC5rZXlzKGkpO3JldHVybiByLnNvcnQoKSxyLm1hcChvPT4oe3R5cGU6bywuLi5DTWVbb10sY291bnQ6aVtvXX0pKX0pKSksdGhpcy5mb2N1c1R5cGUkPXRoaXMuc3RvcmUucGlwZSh1bihHRSkpfW9uVG9nZ2xlRm9jdXNUeXBlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goU2coe2FsZXJ0VHlwZTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItYWxlcnRzIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsIm51bUFsZXJ0cyIsImFsZXJ0c0JyZWFrZG93biIsImZvY3VzVHlwZSIsIm9uVG9nZ2xlRm9jdXNUeXBlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJhbGVydHMtY29tcG9uZW50IiwwKSxJKCJvblRvZ2dsZUZvY3VzVHlwZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Ub2dnbGVGb2N1c1R5cGUobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxnKCkpLDImZSYmXygibnVtQWxlcnRzIixXKDEsMyxpLm51bUFsZXJ0cyQpKSgiYWxlcnRzQnJlYWtkb3duIixXKDIsNSxpLmFsZXJ0c0JyZWFrZG93biQpKSgiZm9jdXNUeXBlIixXKDMsNyxpLmZvY3VzVHlwZSQpKX0sZGVwZW5kZW5jaWVzOltzWCxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZ3k9ezE5OiJmbG9hdDE2IiwxOiJmbG9hdDMyIiwyOiJmbG9hdDY0IiwzOiJpbnQzMiIsNDoidWludDgiLDE3OiJ1aW50MTYiLDIyOiJ1aW50MzIiLDIzOiJ1aW50NjQiLDU6ImludDE2Iiw2OiJpbnQ4Iiw3OiJzdHJpbmciLDg6ImNvbXBsZXg2NCIsMTg6ImNvbXBsZXgxMjgiLDk6ImludDY0IiwxMDoiYm9vbCIsMTE6InFpbnQ4IiwxMjoicXVpbnQ4IiwxNToicWludDE2IiwxNjoicXVpbnQxNiIsMTM6InFpbnQzMiIsMTQ6ImJmbG9hdDE2IiwyMDoicmVzb3VyY2UiLDIxOiJ2YXJpYW50IiwxMTk6ImZsb2F0MTZfcmVmIiwxMDE6ImZsb2F0MzJfcmVmIiwxMDI6ImZsb2F0NjRfcmVmIiwxMDM6ImludDMyX3JlZiIsMTIyOiJ1aW50MzJfcmVmIiwxMDQ6InVpbnQ4X3JlZiIsMTE3OiJ1aW50MTZfcmVmIiwxMDU6ImludDE2X3JlZiIsMTA2OiJpbnQ4X3JlZiIsMTA3OiJzdHJpbmdfcmVmIiwxMDg6ImNvbXBsZXg2NF9yZWYiLDExODoiY29tcGxleDEyOF9yZWYiLDEwOToiaW50NjRfcmVmIiwxMjM6InVpbnQ2NF9yZWYiLDExMDoiYm9vbF9yZWYiLDExMToicWludDhfcmVmIiwxMTI6InF1aW50OF9yZWYiLDExNToicWludDE2X3JlZiIsMTE2OiJxdWludDE2X3JlZiIsMTEzOiJxaW50MzJfcmVmIiwxMTQ6ImJmbG9hdDE2X3JlZiIsMTIwOiJyZXNvdXJjZV9yZWYiLDEyMToidmFyaWFudF9yZWYifTtmdW5jdGlvbiBaRShuKXtsZXR7dGVuc29yRGVidWdNb2RlOnQsYXJyYXk6ZX09bjtzd2l0Y2godCl7Y2FzZSBTby5OT19URU5TT1I6aWYobnVsbCE9PWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkbHkgcmVjZWl2ZWQgbm9uLW51bGwgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHVuZGVyIE5PX1RFTlNPUiBtb2RlIik7cmV0dXJue307Y2FzZSBTby5DVVJUX0hFQUxUSDppZihudWxsPT09ZXx8MiE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ1VSVF9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDIsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtyZXR1cm57aGFzSW5mT3JOYU46Qm9vbGVhbihlWzFdKX07Y2FzZSBTby5DT05DSVNFX0hFQUxUSDp7aWYobnVsbD09PWV8fDUhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIENPTkNJU0VfSEVBTFRIIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCA1LCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7bGV0IGk9e3NpemU6ZVsxXX07cmV0dXJuIGVbMl0+MCYmKGkubnVtTmVnYXRpdmVJbmZzPWVbMl0pLGVbM10+MCYmKGkubnVtUG9zaXRpdmVJbmZzPWVbM10pLGVbNF0+MCYmKGkubnVtTmFOcz1lWzRdKSxpfWNhc2UgU28uU0hBUEU6e2lmKG51bGw9PT1lfHwxMCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgU0hBUEUgbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDEwLCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7bGV0IGk9ZVsyXSxyPWUuc2xpY2UoNCxNYXRoLm1pbig0K2ksZS5sZW5ndGgpKTtyZXR1cm4gci5sZW5ndGg8aSYmKHI9bmV3IEFycmF5KGktci5sZW5ndGgpLmNvbmNhdChyKSkse2R0eXBlOmd5W2VbMV1dLHJhbms6aSxzaXplOmVbM10sc2hhcGU6cn19Y2FzZSBTby5GVUxMX0hFQUxUSDp7aWYobnVsbD09PWV8fDExIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBGVUxMX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMTEsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgcj17ZHR5cGU6Z3lbZVsyXV0scmFuazplWzNdLHNpemU6ZVs0XX07cmV0dXJuIGVbNV0+MCYmKHIubnVtTmVnYXRpdmVJbmZzPWVbNV0pLGVbNl0+MCYmKHIubnVtUG9zaXRpdmVJbmZzPWVbNl0pLGVbN10+MCYmKHIubnVtTmFOcz1lWzddKSxlWzhdPjAmJihyLm51bU5lZ2F0aXZlRmluaXRlcz1lWzhdKSxlWzldPjAmJihyLm51bVplcm9zPWVbOV0pLGVbMTBdPjAmJihyLm51bVBvc2l0aXZlRmluaXRlcz1lWzEwXSkscn1jYXNlIFNvLkZVTExfVEVOU09SOmlmKG51bGwhPT1lKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZGx5IHJlY2VpdmVkIG5vbi1udWxsIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB1bmRlciBGVUxMX1RFTlNPUiBtb2RlIik7cmV0dXJue307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCB0ZW5zb3JEZWJ1Z01vZGU6ICR7dH1gKX19dmFyIHZOPSJbX25naG9zdC0lQ09NUCVdIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgaGVpZ2h0OiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgIG1hcmdpbjogMCAycHg7XG4gICAgcGFkZGluZzogMXB4IDNweDtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gIH0iO2Z1bmN0aW9uIHdNZShuLHQpezEmbiYmUCgwLCJkaXYiLDQpfWZ1bmN0aW9uIFNNZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw3KSgxLCJzcGFuIiw4KSxUKDIsIk5hTiIpLGcoKSxoKDMsInNwYW4iLDkpLFQoNCksZygpKCkpLDImbil7bGV0IGU9dygyKTt2KDQpLEhlKCJceGQ3IixlLm51bU5hTnMsIiIpfX1mdW5jdGlvbiBFTWUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNykoMSwic3BhbiIsOCksVCgyLCItXHUyMjFlIiksZygpLGgoMywic3BhbiIsOSksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoNCksSGUoIlx4ZDciLGUubnVtTmVnYXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gVE1lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDcpKDEsInNwYW4iLDgpLFQoMiwiK1x1MjIxZSIpLGcoKSxoKDMsInNwYW4iLDkpLFQoNCksZygpKCkpLDImbil7bGV0IGU9dygyKTt2KDQpLEhlKCJceGQ3IixlLm51bVBvc2l0aXZlSW5mcywiIil9fWZ1bmN0aW9uIERNZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw3KSgxLCJzcGFuIiwxMCksVCgyLCItIiksZygpLGgoMywic3BhbiIsOSksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoNCksSGUoIlx4ZDciLGUubnVtTmVnYXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gSU1lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxUKDIsIjAiKSxnKCksaCgzLCJzcGFuIiw5KSxUKDQpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7dig0KSxIZSgiXHhkNyIsZS5udW1aZXJvcywiIil9fWZ1bmN0aW9uIEFNZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw3KSgxLCJzcGFuIiwxMCksVCgyLCIrIiksZygpLGgoMywic3BhbiIsOSksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoNCksSGUoIlx4ZDciLGUubnVtUG9zaXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gUk1lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDUpLFMoMSxTTWUsNSwxLCJkaXYiLDYpLFMoMixFTWUsNSwxLCJkaXYiLDYpLFMoMyxUTWUsNSwxLCJkaXYiLDYpLFMoNCxETWUsNSwxLCJkaXYiLDYpLFMoNSxJTWUsNSwxLCJkaXYiLDYpLFMoNixBTWUsNSwxLCJkaXYiLDYpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxfKCJuZ0lmIix2b2lkIDAhPT1lLm51bU5hTnMmJmUubnVtTmFOcz4wKSx2KDEpLF8oIm5nSWYiLHZvaWQgMCE9PWUubnVtTmVnYXRpdmVJbmZzJiZlLm51bU5lZ2F0aXZlSW5mcz4wKSx2KDEpLF8oIm5nSWYiLHZvaWQgMCE9PWUubnVtUG9zaXRpdmVJbmZzJiZlLm51bVBvc2l0aXZlSW5mcz4wKSx2KDEpLF8oIm5nSWYiLHZvaWQgMCE9PWUubnVtTmVnYXRpdmVGaW5pdGVzJiZlLm51bU5lZ2F0aXZlRmluaXRlcz4wKSx2KDEpLF8oIm5nSWYiLHZvaWQgMCE9PWUubnVtWmVyb3MmJmUubnVtWmVyb3M+MCksdigxKSxfKCJuZ0lmIix2b2lkIDAhPT1lLm51bVBvc2l0aXZlRmluaXRlcyYmZS5udW1Qb3NpdGl2ZUZpbml0ZXM+MCl9fXZhciBQTWU9ZnVuY3Rpb24obil7cmV0dXJuWyJjb250YWluZXIiLG5dfTtmdW5jdGlvbiBPTWUobix0KXsxJm4mJlAoMCwiZGVidWctdGVuc29yLWR0eXBlIiw1KSwyJm4mJl8oImR0eXBlIix3KCkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSl9ZnVuY3Rpb24ga01lKG4sdCl7MSZuJiZQKDAsImRlYnVnLXRlbnNvci1yYW5rIiw2KSwyJm4mJl8oInJhbmsiLHcoKS5kZWJ1Z1RlbnNvclZhbHVlLnJhbmspfWZ1bmN0aW9uIEZNZShuLHQpezEmbiYmUCgwLCJkZWJ1Zy10ZW5zb3Itc2hhcGUiLDcpLDImbiYmXygic2hhcGUiLHcoKS5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKX1mdW5jdGlvbiBOTWUobix0KXsxJm4mJlAoMCwiZGVidWctdGVuc29yLWhhcy1pbmYtb3ItbmFuIiw4KSwyJm4mJl8oImhhc0luZk9yTmFOIix3KCkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTil9ZnVuY3Rpb24gTE1lKG4sdCl7aWYoMSZuJiZQKDAsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsOSksMiZuKXtsZXQgZT13KCk7V2koInNpemUiLGUuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSxfKCJudW1OZWdhdGl2ZUluZnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1OZWdhdGl2ZUluZnMpKCJudW1Qb3NpdGl2ZUluZnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1Qb3NpdGl2ZUluZnMpKCJudW1OYU5zIixlLmRlYnVnVGVuc29yVmFsdWUubnVtTmFOcykoIm51bU5lZ2F0aXZlRmluaXRlcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlRmluaXRlcykoIm51bVplcm9zIixlLmRlYnVnVGVuc29yVmFsdWUubnVtWmVyb3MpKCJudW1Qb3NpdGl2ZUZpbml0ZXMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1Qb3NpdGl2ZUZpbml0ZXMpfX12YXIgQk1lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1kdHlwZSJdXSxpbnB1dHM6e2R0eXBlOiJkdHlwZSJ9LGRlY2xzOjEsdmFyczoxLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZUKDApLDImZSYmSGUoIiAiLGkuZHR5cGUsIiAiKX0sc3R5bGVzOlt2Tl19KSxufSkoKSxWTWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXJhbmsiXV0saW5wdXRzOntyYW5rOiJyYW5rIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlQoMCksMiZlJiZIZSgiICIsaS5yYW5rLCJEICIpfSxzdHlsZXM6W3ZOXX0pLG59KSgpLEhNZT0oKCk9PntjbGFzcyBue2dldCBzaGFwZVN0cmluZygpe3JldHVybiJbIit0aGlzLnNoYXBlLm1hcChlPT52b2lkIDA9PT1lPyI/IjpTdHJpbmcoZSkpLmpvaW4oIiwiKSsiXSJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1zaGFwZSJdXSxpbnB1dHM6e3NoYXBlOiJzaGFwZSJ9LGRlY2xzOjEsdmFyczoxLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZUKDApLDImZSYmSGUoIiBzaGFwZToiLGkuc2hhcGVTdHJpbmcsIiAiKX0sc3R5bGVzOlt2Tl19KSxufSkoKSx6TWU9KCgpPT57Y2xhc3MgbntnZXQgYnJlYWtkb3duRXhpc3RzKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMubnVtTmFOc3x8dm9pZCAwIT09dGhpcy5udW1OZWdhdGl2ZUluZnN8fHZvaWQgMCE9PXRoaXMubnVtUG9zaXRpdmVJbmZzfHx2b2lkIDAhPT10aGlzLm51bU5lZ2F0aXZlRmluaXRlc3x8dm9pZCAwIT09dGhpcy5udW1aZXJvc3x8dm9pZCAwIT09dGhpcy5udW1Qb3NpdGl2ZUZpbml0ZXN9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biJdXSxpbnB1dHM6e3NpemU6InNpemUiLG51bU5hTnM6Im51bU5hTnMiLG51bU5lZ2F0aXZlSW5mczoibnVtTmVnYXRpdmVJbmZzIixudW1Qb3NpdGl2ZUluZnM6Im51bVBvc2l0aXZlSW5mcyIsbnVtTmVnYXRpdmVGaW5pdGVzOiJudW1OZWdhdGl2ZUZpbml0ZXMiLG51bVplcm9zOiJudW1aZXJvcyIsbnVtUG9zaXRpdmVGaW5pdGVzOiJudW1Qb3NpdGl2ZUZpbml0ZXMifSxkZWNsczo3LHZhcnM6Myxjb25zdHM6W1sxLCJzaXplIl0sWzEsInNpemUtdmFsdWUiXSxbImNsYXNzIiwiYnJlYWsiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnJlYWtkb3duIiw0LCJuZ0lmIl0sWzEsImJyZWFrIl0sWzEsImJyZWFrZG93biJdLFsiY2xhc3MiLCJjYXRlZ29yeSIsNCwibmdJZiJdLFsxLCJjYXRlZ29yeSJdLFsxLCJjYXRlZ29yeS10YWciLCJpbmZpbml0ZSJdLFsxLCJjYXRlZ29yeS1jb3VudCJdLFsxLCJjYXRlZ29yeS10YWciLCJmaW5pdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwic3BhbiIpLFQoMiwic2l6ZToiKSxnKCksaCgzLCJzcGFuIiwxKSxUKDQpLGcoKSgpLFMoNSx3TWUsMSwwLCJkaXYiLDIpLFMoNixSTWUsNyw2LCJkaXYiLDMpKSwyJmUmJih2KDQpLGJ0KGkuc2l6ZSksdigxKSxfKCJuZ0lmIixpLmJyZWFrZG93bkV4aXN0cyksdigxKSxfKCJuZ0lmIixpLmJyZWFrZG93bkV4aXN0cykpfSxkZXBlbmRlbmNpZXM6W0ZlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgIG1hcmdpbjogMCAycHg7XG4gICAgICAgIHBhZGRpbmc6IDFweDtcbiAgICAgIH1cbiAgICAgIC5icmVha1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgICAgICB3aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBtYXJnaW46IDAgM3B4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmJyZWFrZG93bltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgaGVpZ2h0OiAxMXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTFweDtcbiAgICAgICAgcGFkZGluZzogMnB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmNhdGVnb3J5W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDJweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICBoZWlndGg6IDEwMCU7XG4gICAgICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgICAgIH1cbiAgICAgIC5jYXRlZ29yeS10YWdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICBwYWRkaW5nOiAwIDJweDtcbiAgICAgIH1cbiAgICAgIC5maW5pdGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2FhYTtcbiAgICAgICAgY29sb3I6ICNmZWZlZmU7XG4gICAgICB9XG4gICAgICAuaW5maW5pdGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9Il19KSxufSkoKSxVTWU9KCgpPT57Y2xhc3MgbntnZXQgaW5mb1N0cmluZygpe3JldHVybiB0aGlzLmhhc0luZk9yTmFOPyJIYXMgXHUyMjFlL05hTiI6Ik5vIFx1MjIxZS9OYU4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iXV0saW5wdXRzOntoYXNJbmZPck5hTjoiaGFzSW5mT3JOYU4ifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApLFQoMSksZygpKSwyJmUmJihfKCJuZ0NsYXNzIixJbigyLFBNZSxpLmhhc0luZk9yTmFOPyJoYXMtaW5mLW9yLW5hbiI6IiIpKSx2KDEpLEhlKCIgIixpLmluZm9TdHJpbmcsIiAiKSl9LGRlcGVuZGVuY2llczpbeW5dLHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogIzY2NjY2NjtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmhhcy1pbmYtb3ItbmFuW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfSJdfSksbn0pKCksS0U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXZhbHVlIl1dLGlucHV0czp7ZGVidWdUZW5zb3JWYWx1ZToiZGVidWdUZW5zb3JWYWx1ZSJ9LGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWzMsImR0eXBlIiw0LCJuZ0lmIl0sWzMsInJhbmsiLDQsIm5nSWYiXSxbMywic2hhcGUiLDQsIm5nSWYiXSxbMywiaGFzSW5mT3JOYU4iLDQsIm5nSWYiXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyIsNCwibmdJZiJdLFszLCJkdHlwZSJdLFszLCJyYW5rIl0sWzMsInNoYXBlIl0sWzMsImhhc0luZk9yTmFOIl0sWzMsInNpemUiLCJudW1OZWdhdGl2ZUluZnMiLCJudW1Qb3NpdGl2ZUluZnMiLCJudW1OYU5zIiwibnVtTmVnYXRpdmVGaW5pdGVzIiwibnVtWmVyb3MiLCJudW1Qb3NpdGl2ZUZpbml0ZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsT01lLDEsMSwiZGVidWctdGVuc29yLWR0eXBlIiwwKSxTKDEsa01lLDEsMSwiZGVidWctdGVuc29yLXJhbmsiLDEpLFMoMixGTWUsMSwxLCJkZWJ1Zy10ZW5zb3Itc2hhcGUiLDIpLFMoMyxOTWUsMSwxLCJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLDMpLFMoNCxMTWUsMSw3LCJkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd24iLDQpKSwyJmUmJihfKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuZHR5cGUpLHYoMSksXygibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLnJhbmspLHYoMSksXygibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKSx2KDEpLF8oIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTiksdigxKSxfKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuc2l6ZSkpfSxkZXBlbmRlbmNpZXM6W0ZlLEJNZSxVTWUsek1lLFZNZSxITWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICB9XG4gICAgICBkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgfSJdfSksbn0pKCk7ZnVuY3Rpb24gak1lKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDEyKSxUKDEsIlx1MjViNiIpLGcoKSl9dmFyIEdNZT1mdW5jdGlvbihuLHQpe3JldHVybnt0ZW5zb3JEZWJ1Z01vZGU6bixhcnJheTp0fX07ZnVuY3Rpb24gV01lKG4sdCl7aWYoMSZuJiZQKDAsImRlYnVnLXRlbnNvci12YWx1ZSIsMTcpLDImbil7bGV0IGU9dygyKS4kaW1wbGljaXQsaT13KDIpO18oImRlYnVnVGVuc29yVmFsdWUiLGkucGFyc2VEZWJ1Z1RlbnNvclZhbHVlKHFyKDEsR01lLGkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLnRlbnNvcl9kZWJ1Z19tb2RlLGkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLmRlYnVnX3RlbnNvcl92YWx1ZSkpKX19ZnVuY3Rpb24gcU1lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IikoMSwiZGl2IiwxMykoMiwiYnV0dG9uIiwxNCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KCkuJGltcGxpY2l0LG89dygyKTtyZXR1cm4gUShvLm9uVGVuc29yTmFtZUNsaWNrLmVtaXQoe2luZGV4OnIsZ3JhcGhfaWQ6by5ncmFwaEV4ZWN1dGlvbkRhdGFbcl0uZ3JhcGhfaWQsb3BfbmFtZTpvLmdyYXBoRXhlY3V0aW9uRGF0YVtyXS5vcF9uYW1lfSkpfSksVCgzKSxnKCksaCg0LCJkaXYiLDE1KSxUKDUpLGcoKSgpLFMoNixXTWUsMSw0LCJkZWJ1Zy10ZW5zb3ItdmFsdWUiLDE2KSxnKCl9aWYoMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygyKTt2KDIpLFdpKCJ0aXRsZSIsaS5nZXRUZW5zb3JOYW1lKGUpKSx2KDEpLEhlKCIgIixpLmdldFRlbnNvck5hbWUoZSksIiAiKSx2KDIpLGJ0KGkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLm9wX3R5cGUpLHYoMSksXygibmdJZiIsbnVsbCE9PWkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLmRlYnVnX3RlbnNvcl92YWx1ZSl9fWZ1bmN0aW9uIFlNZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxOCksVCgxLCIgTG9hZGluZy4uLiAiKSxnKCkpfXZhciBYTWU9ZnVuY3Rpb24obil7cmV0dXJueyJpbnB1dC1vZi1mb2N1cyI6bn19O2Z1bmN0aW9uIFFNZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw1KSgxLCJkaXYiLDYpKDIsImRpdiIsNyksUygzLGpNZSwyLDAsImRpdiIsOCksVCg0KSxnKCksUyg1LHFNZSw3LDQsImRpdiIsOSksUyg2LFlNZSwyLDAsIm5nLXRlbXBsYXRlIiwxMCwxMSxXdCksZygpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1pdCg3KSxyPXcoMik7digxKSxfKCJuZ0NsYXNzIixJbig1LFhNZSxyLmlzSW5wdXRPZkZvY3VzKGUpKSksdigyKSxfKCJuZ0lmIixlPT09ci5mb2N1c0luZGV4KSx2KDEpLEhlKCIgIixlLCIgIiksdigxKSxfKCJuZ0lmIixyLmdyYXBoRXhlY3V0aW9uRGF0YVtlXSkoIm5nSWZFbHNlIixpKX19ZnVuY3Rpb24gWk1lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwzKSxJKCJzY3JvbGxlZEluZGV4Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdChyKSl9KSxTKDEsUU1lLDgsNywiZGl2Iiw0KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7digxKSxfKCJjZGtWaXJ0dWFsRm9yT2YiLGUuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKX19dmFyIGNYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uU2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgRix0aGlzLm9uVGVuc29yTmFtZUNsaWNrPW5ldyBGLHRoaXMucGFyc2VEZWJ1Z1RlbnNvclZhbHVlPVpFLHRoaXMuVEVTVF9PTkxZPXtnZXRWaWV3UG9ydDooKT0+dGhpcy52aWV3UG9ydH19bmdPbkNoYW5nZXMoZSl7aWYodGhpcy52aWV3UG9ydCYmZS5mb2N1c0luZGV4JiZudWxsIT09ZS5mb2N1c0luZGV4LmN1cnJlbnRWYWx1ZSl7bGV0IGk9dGhpcy52aWV3UG9ydC5nZXRSZW5kZXJlZFJhbmdlKCkscj1lLmZvY3VzSW5kZXguY3VycmVudFZhbHVlLG89TWF0aC5yb3VuZCgoaS5lbmQtaS5zdGFydCkvMykscz1NYXRoLm1heChyLW8sMCk7dGhpcy52aWV3UG9ydC5zY3JvbGxUb0luZGV4KHMscj49aS5zdGFydCYmcjxpLmVuZD8ic21vb3RoIjp2b2lkIDApfX1nZXRUZW5zb3JOYW1lKGUpe3JldHVybmAke3RoaXMuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLm9wX25hbWV9OiR7dGhpcy5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0ub3V0cHV0X3Nsb3R9YH1pc0lucHV0T2ZGb2N1cyhlKXtyZXR1cm4gbnVsbCE9PXRoaXMuZm9jdXNJbnB1dEluZGljZXMmJnRoaXMuZm9jdXNJbnB1dEluZGljZXMuaW5jbHVkZXMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImdyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UodWcsNSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS52aWV3UG9ydD1yLmZpcnN0KX19LGlucHV0czp7bnVtR3JhcGhFeGVjdXRpb25zOiJudW1HcmFwaEV4ZWN1dGlvbnMiLGdyYXBoRXhlY3V0aW9uRGF0YToiZ3JhcGhFeGVjdXRpb25EYXRhIixncmFwaEV4ZWN1dGlvbkluZGljZXM6ImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsZm9jdXNJbmRleDoiZm9jdXNJbmRleCIsZm9jdXNJbnB1dEluZGljZXM6ImZvY3VzSW5wdXRJbmRpY2VzIn0sb3V0cHV0czp7b25TY3JvbGxlZEluZGV4Q2hhbmdlOiJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLG9uVGVuc29yTmFtZUNsaWNrOiJvblRlbnNvck5hbWVDbGljayJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXIiXSxbMSwiZ3JhcGgtZXhlY3V0aW9ucy10aXRsZSJdLFsiaXRlbVNpemUiLCIzOCIsImNsYXNzIiwiZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydCIsMywic2Nyb2xsZWRJbmRleENoYW5nZSIsNCwibmdJZiJdLFsiaXRlbVNpemUiLCIzOCIsMSwiZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydCIsMywic2Nyb2xsZWRJbmRleENoYW5nZSJdLFsiY2xhc3MiLCJ0ZW5zb3ItY29udGFpbmVyIiw0LCJjZGtWaXJ0dWFsRm9yIiwiY2RrVmlydHVhbEZvck9mIl0sWzEsInRlbnNvci1jb250YWluZXIiXSxbMSwidGVuc29yLWl0ZW0iLDMsIm5nQ2xhc3MiXSxbMSwiZ3JhcGgtZXhlY3V0aW9uLWluZGV4Il0sWyJjbGFzcyIsImdyYXBoLWV4ZWN1dGlvbi1mb2N1cyIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImNsYXNzIiwidGVuc29yLWl0ZW0iXSxbImRhdGFMb2FkaW5nIiwiIl0sWzEsImdyYXBoLWV4ZWN1dGlvbi1mb2N1cyJdLFsxLCJ0ZW5zb3ItbmFtZS1hbmQtb3AtdHlwZSJdLFsxLCJ0ZW5zb3ItbmFtZSIsMywidGl0bGUiLCJjbGljayJdLFsxLCJvcC10eXBlIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiLDQsIm5nSWYiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdLFsxLCJsb2FkaW5nLXNwaW5uZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxUKDIpLGcoKSxTKDMsWk1lLDIsMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwyKSxnKCkpLDImZSYmKHYoMiksSGUoIiBHcmFwaCBFeGVjdXRpb25zICgiLGkubnVtR3JhcGhFeGVjdXRpb25zLCIpICIpLHYoMSksXygibmdJZiIsbnVsbCE9PWkubnVtR3JhcGhFeGVjdXRpb25zJiZpLm51bUdyYXBoRXhlY3V0aW9ucz4wKSl9LGRlcGVuZGVuY2llczpbeW4sRmUsS0UsVjcsSDcsdWddLHN0eWxlczpbJy5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDo4cHg7cGFkZGluZy1sZWZ0OjEwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZ3JhcGgtZXhlY3V0aW9uLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctcmlnaHQ6NHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmdyYXBoLWV4ZWN1dGlvbnMtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCA1cHggM3B4IC0zcHggI2NjYztwYWRkaW5nLWJvdHRvbTo1cHh9LmdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO2ZvbnQtc2l6ZToxMnB4O3dpZHRoOjEwMCU7b3ZlcmZsb3cteDpoaWRkZW59LmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYwOTl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlNjUxMDB9LmxvYWRpbmctc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnQ7ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM0NTVhNjR9LnRlbnNvci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO2hlaWdodDozOHB4O2xpbmUtaGVpZ2h0OjM4cHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Ym9yZGVyOm5vbmU7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHg7bWFyZ2luOjJweCAwIDFweDttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMnB4KTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowIDJweDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LnRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjFweCBzb2xpZCAjYzZjYWQxfS50ZW5zb3ItbmFtZS1hbmQtb3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1yaWdodDo4cHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoyNDBweH1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGRYPSgoKT0+e2NsYXNzIG57b25TY3JvbGxlZEluZGV4Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQWcoe2luZGV4OmV9KSl9b25UZW5zb3JOYW1lQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChSZyhlKSl9Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubnVtR3JhcGhFeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUodW4obXkpKSx0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKHVuKGROKSksdGhpcy5ncmFwaEV4ZWN1dGlvbkluZGljZXMkPXRoaXMuc3RvcmUucGlwZSh1bihxKG15LGk9PjA9PT1pP251bGw6QXJyYXkuZnJvbSh7bGVuZ3RoOml9KS5tYXAoKHIsbyk9Pm8pKSkpLHRoaXMuZm9jdXNJbmRleCQ9dGhpcy5zdG9yZS5waXBlKHVuKHVOKSksdGhpcy5mb2N1c0lucHV0SW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKHVuKEtZKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJudW1HcmFwaEV4ZWN1dGlvbnMiLCJncmFwaEV4ZWN1dGlvbkRhdGEiLCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLCJmb2N1c0luZGV4IiwiZm9jdXNJbnB1dEluZGljZXMiLCJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLCJvblRlbnNvck5hbWVDbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiLDApLEkoIm9uU2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY3JvbGxlZEluZGV4Q2hhbmdlKG8pfSkoIm9uVGVuc29yTmFtZUNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRlbnNvck5hbWVDbGljayhvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksZygpKSwyJmUmJl8oIm51bUdyYXBoRXhlY3V0aW9ucyIsVygxLDUsaS5udW1HcmFwaEV4ZWN1dGlvbnMkKSkoImdyYXBoRXhlY3V0aW9uRGF0YSIsVygyLDcsaS5ncmFwaEV4ZWN1dGlvbkRhdGEkKSkoImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsVygzLDksaS5ncmFwaEV4ZWN1dGlvbkluZGljZXMkKSkoImZvY3VzSW5kZXgiLFcoNCwxMSxpLmZvY3VzSW5kZXgkKSkoImZvY3VzSW5wdXRJbmRpY2VzIixXKDUsMTMsaS5mb2N1c0lucHV0SW5kaWNlcyQpKX0sZGVwZW5kZW5jaWVzOltjWCxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gJE1lKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiksVCgxLCIgT3V0cHV0ICIpLGcoKSl9ZnVuY3Rpb24gZXdlKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiksVCgxLCIgSW5wdXQgIiksZygpKX1mdW5jdGlvbiB0d2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsNikoMSwic3BhbiIsNyksUygyLCRNZSwyLDAsInNwYW4iLDgpLFMoMyxld2UsMiwwLCJzcGFuIiw4KSxnKCksVCg0KSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksXygibmdTd2l0Y2giLGUua2luZCksdigxKSxfKCJuZ1N3aXRjaENhc2UiLCJpbnB1dCIpLHYoMSksXygibmdTd2l0Y2hDYXNlIiwiY29uc3VtZXIiKSx2KDEpLEhlKCIgc2xvdDogIixlLnNsb3QsIiAiKX19ZnVuY3Rpb24gbndlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDkpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLEhlKCIgIixlLm9wRGF0YS5vcF90eXBlLCIgIil9fWZ1bmN0aW9uIGl3ZShuLHQpezEmbiYmKGgoMCwic3BhbiIsMTApLFQoMSwiIChPcCBpbmZvIHVuYXZhaWxhYmxlLikgIiksZygpKX12YXIgcndlPWZ1bmN0aW9uKG4pe3JldHVybltuXX0sdVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25PcE5hbWVDbGljaz1uZXcgRn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZ3JhcGgtb3AiXV0saW5wdXRzOntraW5kOiJraW5kIixvcE5hbWU6Im9wTmFtZSIsc2xvdDoic2xvdCIsb3BEYXRhOiJvcERhdGEifSxvdXRwdXRzOntvbk9wTmFtZUNsaWNrOiJvbk9wTmFtZUNsaWNrIn0sZGVjbHM6OSx2YXJzOjcsY29uc3RzOltbMSwib3AtY29udGFpbmVyIl0sWzEsImlucHV0LXRlbnNvci1uYW1lIl0sWzEsIm9wLW5hbWUiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsiY2xhc3MiLCJzbG90Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wLXR5cGUiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsib3BJbmZvTWlzc2luZyIsIiJdLFsxLCJzbG90Il0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJvcC10eXBlIl0sWzEsIm9wLWluZm8tbWlzc2luZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiYnV0dG9uIiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PcE5hbWVDbGljay5lbWl0KHtvcF9uYW1lOmkub3BOYW1lfSl9KSxoKDMsInNwYW4iKSxUKDQpLGcoKSgpLFMoNSx0d2UsNSw0LCJkaXYiLDMpLGcoKSxTKDYsbndlLDIsMSwiZGl2Iiw0KSxTKDcsaXdlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxXdCksZygpKSwyJmUpe2xldCByPWl0KDgpO3YoMiksXygibmdDbGFzcyIsSW4oNSxyd2UsInNlbGYiPT09aS5raW5kPyJzZWxmLW9wLW5hbWUiOiIiKSksdigyKSxidChpLm9wTmFtZSksdigxKSxfKCJuZ0lmIiwic2VsZiIhPT1pLmtpbmQpLHYoMSksXygibmdJZiIsdm9pZCAwIT09aS5vcERhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLEZlLHNyLFNyXSxzdHlsZXM6Wycub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjFweCAzcHggI2VlZTtjdXJzb3I6cG9pbnRlcjttYXJnaW46MCA1cHggMCAwO3BhZGRpbmc6MnB4IDZweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjIwMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MnB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MXB4IDNweCAjNzU3NTc1fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXI6MnB4IHNvbGlkICNmZmQzYjJ9Lm9wLWluZm8tbWlzc2luZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0ub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtwYWRkaW5nOjA7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3doaXRlLXNwYWNlOnByZS13cmFwfS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjB9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDozcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc2VsZi1vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO3RleHQtZGVjb3JhdGlvbjpub25lfS5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSddfSksbn0pKCk7ZnVuY3Rpb24gc3dlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwxMykoMSwiZGl2IiwxNCksVCgyKSxnKCksaCgzLCJncmFwaC1vcCIsMTUpLEkoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygzKTtyZXR1cm4gUShvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6ci5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4O3YoMiksSGUoIklucHV0IHNsb3QgIixpLCI6IiksdigxKSxfKCJraW5kIiwiaW5wdXQiKSgib3BOYW1lIixlLm9wX25hbWUpKCJzbG90IixlLm91dHB1dF9zbG90KSgib3BEYXRhIixlLmRhdGEpfX1mdW5jdGlvbiBhd2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTEpKDEsImRpdiIpLFMoMixzd2UsNCw1LCJkaXYiLDEyKSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoMiksXygibmdGb3JPZiIsZS5pbnB1dE9wcyl9fWZ1bmN0aW9uIGx3ZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxNiksVCgxLCIgKFRoaXMgb3AgaGFzIG5vIGlucHV0IHRlbnNvci4pICIpLGcoKSl9ZnVuY3Rpb24gY3dlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyMykoMSwiZ3JhcGgtb3AiLDE1KSxJKCJvbk9wTmFtZUNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoNCk7cmV0dXJuIFEoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0O3YoMSksXygia2luZCIsImNvbnN1bWVyIikoIm9wTmFtZSIsZS5vcF9uYW1lKSgic2xvdCIsZS5pbnB1dF9zbG90KSgib3BEYXRhIixlLmRhdGEpfX1mdW5jdGlvbiBkd2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTkpKDEsImRpdiIsMjApLFQoMiksaCgzLCJzcGFuIikscU0oNCwyMSksZygpLFQoNSwiKSAiKSxnKCksUyg2LGN3ZSwyLDQsImRpdiIsMjIpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXg7digyKSxsdSgiIE91dHB1dCBzbG90ICIsaSwiOiAoIixlLmxlbmd0aCwiICIpLHYoMiksaGIoZS5sZW5ndGgpLFlNKDQpLHYoMiksXygibmdGb3JPZiIsZSl9fWZ1bmN0aW9uIHV3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxNykoMSwiZGl2IiksUygyLGR3ZSw3LDQsImRpdiIsMTgpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7digyKSxfKCJuZ0Zvck9mIixlLmNvbnN1bWVyT3BzKX19ZnVuY3Rpb24gcHdlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDI0KSxUKDEpLGgoMiwic3BhbiIpLHFNKDMsMjUpLGcoKSxUKDQsIiBhbmQgbm8gY29uc3VtZXIuKSAiKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLEhlKCIgKFRoaXMgb3AgaGFzICIsZS5vcEluZm8uY29uc3VtZXJzLmxlbmd0aCwiIG91dHB1dCAiKSx2KDIpLGhiKGUub3BJbmZvLmNvbnN1bWVycy5sZW5ndGgpLFlNKDMpfX1mdW5jdGlvbiBmd2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiKSxTKDEsYXdlLDMsMSwiZGl2Iiw0KSxTKDIsbHdlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxXdCksaCg0LCJkaXYiLDYpKDUsImRpdiIsNyksVCg2LCJPcDoiKSxnKCksaCg3LCJncmFwaC1vcCIsOCksSSgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSxnKCkoKSxTKDgsdXdlLDMsMSwiZGl2Iiw5KSxTKDkscHdlLDUsMiwibmctdGVtcGxhdGUiLG51bGwsMTAsV3QpLGcoKX1pZigyJm4pe2xldCBlPWl0KDMpLGk9aXQoMTApLHI9dygpO3YoMSksXygibmdJZiIsci5pbnB1dE9wcy5sZW5ndGg+MCkoIm5nSWZFbHNlIixlKSx2KDYpLF8oImtpbmQiLCJzZWxmIikoIm9wTmFtZSIsci5vcEluZm8ub3BfbmFtZSkoIm9wRGF0YSIsci5vcEluZm8pLHYoMSksXygibmdJZiIsci50b3RhbE51bUNvbnN1bWVycz4wKSgibmdJZkVsc2UiLGkpfX1mdW5jdGlvbiBtd2Uobix0KXsxJm4mJihoKDAsInNwYW4iLDI2KSxUKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLGcoKSl9ZnVuY3Rpb24gaHdlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI3KSxUKDEsIiBObyBncmFwaCBvcCBzZWxlY3RlZC4gQ2xpY2sgYSB0ZW5zb3IgbmFtZSBpbiB0aGUgR3JhcGggRXhlY3V0aW9ucyB0YWJsZSB0byB2aWV3IHRoZSBuZWlnaGJvcmhvb2Qgb2YgdGhlIHRlbnNvcidzIG9wIGluIGl0cyBncmFwaC4gIiksZygpKX12YXIgcFg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25HcmFwaE9wTmF2aWdhdGU9bmV3IEZ9Z2V0IGdyYXBoSWQoKXtyZXR1cm4gdGhpcy5vcEluZm8uZ3JhcGhfaWRzW3RoaXMub3BJbmZvLmdyYXBoX2lkcy5sZW5ndGgtMV19Z2V0IHRvdGFsTnVtQ29uc3VtZXJzKCl7cmV0dXJuIHRoaXMuY29uc3VtZXJPcHMucmVkdWNlKChlLGkpPT5lK2kubGVuZ3RoLDApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1jb21wb25lbnQiXV0saW5wdXRzOntvcEluZm86Im9wSW5mbyIsaW5wdXRPcHM6ImlucHV0T3BzIixjb25zdW1lck9wczoiY29uc3VtZXJPcHMifSxvdXRwdXRzOntvbkdyYXBoT3BOYXZpZ2F0ZToib25HcmFwaE9wTmF2aWdhdGUifSxkZWNsczo5LHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscjtyZXR1cm4gdD0kbG9jYWxpemVgOuKQn2ZlNTVmOWIxOTNlYTIwYWFlNWI1NjM1ZTY4ZDkzODY1MDM4NDc3NDbikJ80OTU1MTMzNzQwODQxMjk5ODUxOntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHtjb25zdW1lcn0gPTEge2NvbnN1bWVyfSBvdGhlciB7Y29uc3VtZXJzfX1gLHQ9WE0odCx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxlPSRsb2NhbGl6ZWA64pCfYmFhNDYwZTJmMmI4NTdlMjYyOTJiMjQ2ZmMxOGFlMGVhOWI1ZTUzN+KQnzU1NTYzNDAzNDM4NTAxNjU1MTY6ICR7dH06SUNVOmAsaT0kbG9jYWxpemVgOuKQnzZhYTc1ZjYyN2UwZGMxNjE1MGVmNDQ4NDY0ZTBjODU3YWFhMGRjMTjikJ81MTU2NzEyOTM1MTUwNTg2ODc4OntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHt0ZW5zb3J9ID0xIHt0ZW5zb3J9IG90aGVyIHt0ZW5zb3JzfX1gLGk9WE0oaSx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxyPSRsb2NhbGl6ZWA64pCfODkzNDc2YzJjNDIxY2VlNDc2NjNjOTczMmZhNDFhNzUwZDNhNzNkZuKQnzI0NjA2NzA1MzczNTE2MjYzNDogJHtpfTpJQ1U6YCxbWzEsImdyYXBoLXN0cnVjdHVyZS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWyJub09wRm9jdXNlZCIsIiJdLFsiY2xhc3MiLCJpbnB1dHMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW5wdXRzIiwiIl0sWzEsInNlbGYtb3AtY29udGFpbmVyIl0sWzEsInNlbGYtb3AtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJvcERhdGEiLCJvbk9wTmFtZUNsaWNrIl0sWyJjbGFzcyIsImNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9Db25zdW1lcnMiLCIiXSxbMSwiaW5wdXRzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJpbnB1dC1vcC1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaW5wdXQtb3Atc2VjdGlvbiJdLFsxLCJpbnB1dC1zbG90LWhlYWRlciJdLFszLCJraW5kIiwib3BOYW1lIiwic2xvdCIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbMSwiaW5wdXRzLWNvbnRhaW5lciIsIm5vLWlucHV0cy1pbmRpY2F0b3IiXSxbMSwiY29uc3VtZXJzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiXSxbMSwic2xvdC1jb25zdW1lcnMtaGVhZGVyIl0sZSxbImNsYXNzIiwiY29uc3VtZXItc2VjdGlvbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnN1bWVyLXNlY3Rpb24iXSxbMSwib3AtY29uc3VtZXJzLWNvbnRhaW5lciJdLHIsWzEsIm9wLWluZm8tbWlzc2luZyJdLFsxLCJuby1vcC1mb2N1c2VkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IikoMSwiZGl2IiksVCgyLCJHcmFwaCBTdHJ1Y3R1cmUiKSxnKCksaCgzLCJkaXYiLDApLFMoNCxmd2UsMTEsNywiZGl2IiwxKSxnKCksUyg1LG13ZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsV3QpLFMoNyxod2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLFd0KSxnKCkpLDImZSl7bGV0IHI9aXQoOCk7dig0KSxfKCJuZ0lmIixudWxsIT1pLm9wSW5mbykoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbbm4sRmUsdVhdLHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV17b3ZlcmZsb3cteTphdXRvfS5jb25zdW1lcnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbTo1cHg7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uY29uc3VtZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazttYXJnaW46NXB4IDB9LmdyYXBoLXN0cnVjdHVyZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O292ZXJmbG93LXk6YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTttYXJnaW4tdG9wOjVweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZy1ib3R0b206MDt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0LW9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo1cHg7cGFkZGluZy1ib3R0b206NXB4fS5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmMDk5O21hcmdpbi1ib3R0b206NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5pbnB1dC10ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5vLW9wLWZvY3VzZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXk7Zm9udC1mYW1pbHk6IlJvYm90byIsQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7d2hpdGUtc3BhY2U6bm9ybWFsfS5zZWxmLW9wLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZDttYXJnaW4tYm90dG9tOjVweH0uc2VsZi1vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtwYWRkaW5nLWJvdHRvbTo1cHh9LnNsb3QtY29uc3VtZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjVweDtwYWRkaW5nLXRvcDo1cHg7dmVydGljYWwtYWxpZ246dG9wfS5zbG90LWNvbnN1bWVycy1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGZYPSgoKT0+e2NsYXNzIG57b25HcmFwaE9wTmF2aWdhdGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChQZyhlKSl9Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMub3BJbmZvJD10aGlzLnN0b3JlLnBpcGUodW4oZk4pKSx0aGlzLmlucHV0T3BzJD10aGlzLnN0b3JlLnBpcGUodW4obU4pKSx0aGlzLmNvbnN1bWVyT3BzJD10aGlzLnN0b3JlLnBpcGUodW4oSlkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWdyYXBoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsIm9wSW5mbyIsImlucHV0T3BzIiwiY29uc3VtZXJPcHMiLCJvbkdyYXBoT3BOYXZpZ2F0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZ3JhcGgtY29tcG9uZW50IiwwKSxJKCJvbkdyYXBoT3BOYXZpZ2F0ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25HcmFwaE9wTmF2aWdhdGUobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxnKCkpLDImZSYmXygib3BJbmZvIixXKDEsMyxpLm9wSW5mbyQpKSgiaW5wdXRPcHMiLFcoMiw1LGkuaW5wdXRPcHMkKSkoImNvbnN1bWVyT3BzIixXKDMsNyxpLmNvbnN1bWVyT3BzJCkpfSxkZXBlbmRlbmNpZXM6W3BYLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxtWD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbmFjdGl2ZS1jb21wb25lbnQiXV0sZGVjbHM6NTQsdmFyczowLGNvbnN0czpbWzEsImNvbnRhaW5lciJdLFsxLCJ0aXRsZSJdLFsxLCJjb2RlIl0sWzEsImFyZyJdLFsxLCJleGhpYml0cy1jb250YWluZXIiXSxbMSwiZXhoaWJpdCJdLFsxLCJzY3JlZW5zaG90Il0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUFveUhwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJaeHBkaHk1Y29YL1l4VmVBdVpoT1JnQzUzZ0hYcjYvaTJKcmVtcXJuKzFXaTZTS3hVd2tFSEdIUUlETy91cy9yL3NQL2h1dFpaZEw2M1hVNnZrdmp6emk1SXZ1UC8rTjl6SDQvRDYrLzFMOStpcjgvTHI3OW8zSTU2UjNmcjdSNXVkem1MeGV2di9BWC9jSTYrZlhYZi82VHV4ZkYvcjZCaGYrakVCMzF0Zm54MEh5ZXZ5OEh2TFhoWVo5dnFpanR4K0h1cjR1dEwvZStJYnk5VGQvRzlibmsvN3RmbnFoTVV1bmNLTVVvNldRL1B1WVB5TkluNytUdisxOWpMd3Y4TnBNS1FYMytmUjFNU2JrcDhmNzY3UDNQMDdRVDVQODExZnUxOW4vOXRVdmt4L24xK3ZwbDdtc1gzUGs2KysvRWNvdnI2ZHZ0NGsvaGNPM0VjV2Z2M0Y3elAveU9GOS83ejM5WHZzODNjeVZHYTFmRWZVbSs2OFowaHNYVTU3ZWoxWCtOUDRXdm03dnorQlA5OU52bHZ6NDdSZC9kaGdoc2lyWGhSeE9tT0VHZTU5MzJBd3hSNHVOenpIdW1ONXJQYlU0NGs1YXA2dy80Y2FXUmpxcHMyNDdtbVBOY29yZnhoTGVmY2U3M3c2ZE81L0FXMlBnWWxycXYvM2ovcWR2L2p0LzNMMWJVeFI4L3paWGpDc3FyaG1HVms0ZmVSZExFTzdYdXBVM3dYLzkrVnArLzBQOEVLcXNZSG5UM0huQTZkZm5FcXVFNzdHVjNqb24zbGY0L0ZuajROcjV1Z0JUeEwwTGd3bUpGZkExcEJKcThDM0dGZ0x6MkZtZ3ljaGp5bkd4QXFHVWVCaGt6Q25WNkZyc1VmZm1aMXA0NzQwbDFxaVh3U1lXb3FSS2JuVldhTEpZT1JmaXArVk9ETTJTU2k2bDFOSktkMldVV1ZQTnRkUmFXeFhJelpaYWJxWFYxbHB2bzgyZWV1NmwxOTU2NzZQUEVVY0NBOHVvbzQwK3hwZ3p1c21OSnRlYXZIL3l5b29ycmJ6S3FxdXR2c2FhbS9EWmVaZGRkOXQ5anoxUFBPa0FFNmVlZHZvWloxcHdCbEpZdG1MVm1uVWJOaSt4ZHRQTnQ5eDYyKzEzM1BsdDFiNVc5Vi8rL0J1ckZyNVdMYjZWMHZ2YXQxWGpWZGZhWDVjSWdwT2lOV1BGWWc2c2VOTUtFTkJSYStaN3lEbHE1YlJtZmtTU29rUUdXYlEyN2dTdEdFdVlMY1J5dzdlMSs3NXkvMmpkWE9uL2FOM2luMWJPYWVuK1AxYk9zWFQvdW02L1diVWpudHR2eFQ1WnFEbjFpZXk3Wlp5NDNJNXgxVExudEpsYVMyWHVGWE1MYVplUVd6MjFybnFCazl2UEx0M0h4cmU2WjVZUG5NTWtITDl5UGFIb1FyMm1mT1B4RTNoZnBkMDEwMkZwazU2eU00NjlUcjY1MzFVWUxaY0cvODQ4TzdSajNMU3N1RmRZNXRvMG5pdWxmWG5rbHZJK25xUXNCd0JkZlc4bWRkOFdvbStzWk9vOTU1Nys0b1lrS0w5bG5qWmpKeUQ1T0hWem02V3VXYzVjWlplVEp5bnZ6Zk80MlljNlJvOFJyU0dTUG5sTVMyM25jUW0xZkkvQ3hhVWVUaTN3ZGRzZ3d0cDM3YnB1eU1YYVliSnJ2MVlBN3VYVGFjYlQ1ZERhM0t6RENtMHlmNVV4TTMzYjVRazloRjFuNGFaM1NSU0VzMjhmeldJNlZtZUl5V3hzNDFxK3JoN1dPQzBhVnpEaXVLL0dQQkVRd1NtSkNPbit4RVJhWTk3TTBFYmJ2aHppdG5heW9MR0VQTUpzdTFwaWtRZmdOY3RsNlhzSTF0Zk5saDF6M0c4b2RwS0Z3Y01odXk2UDRsRVRRT0h1TTQyeTdCN05TQ0lPVDdwOVh5WS9IT1gyUWlLMWZSWnoxSFlFT1hpWWZrck4rYVJsdS9oVmZSK1JtR1J0eVRJN25abW9pY2c3L3VaeUQ4RzlEems2RW9Ob3NhR1BhZ3g1WlJLTmNZWjhXem43aUF2UDliUFpLR1lrSnZjTlBORDFuWWMrUENSd1BZMVF5SER0YXRYYzZyWEN4SmRKYlpPUk1oZVZkTEIrYTB1Um14SVJoY2xrMk9lMGJvY3c3aXlFSitaelZNRHlnZitkeE4yWWVzcnJyL1hUeU5pOVdwbjU5TTAwM1dPTkJTWVZFdmRWNkJhdUhQWktERE5XR3hWWUtiZTRXRWNTY0d3K0U2RWt4c25KMEJNOXRCS1l0NkFiVnoxT0dndWdJZmZ2SEVUNkpGb0w0d1Fjem1DeUs4eldTS01haHdmSHlHR0drcVlHRU5ZQlRuT0RqTXRjWnhGWTJiWVZjQU9RSTJJaHQ3dU5wU1JGOWtSQ2RDWVlQT1RyR3lBL1ZyY3VZbUhjWGErRm5SbHlPWW5adFZEUzNqd09vZHB0U2ZBa3dVOHlOeTZaMVhqQUthQll1Wit3aGJVa0ZBaGFBL1JKRnZvK1FRVmJBekN1YlNjRm95ZGtKcE4vYmlIbUhJSE90d3VodG5kT2UwbUV3UWZMRzhoUjB3Z2xLeFJKMjJKeEUxQ0RmTjRUZXJkYndFREd5UFZXZERzdEFHTzJDOExiNkMvbVJnUExtSmg0Z0tyV3p5U21nZjRGRmxmd2o1Y0pVRkRrS2t3T2tYUG5jWTFaSmdLUEVWYWdHNm5Rb0pTSWRrc3hkOFZRTzFteStTNGttUzJGeEJZRVZOWXVseVFrWTVGUS9pRU1iNmNRanVPc2t4SmlsRmdETW96dzhLWUJHVkU2UmhpeDFoSTl0MjlrWHlkS1lqeXpMbFloSTJ1WXlwR0NnZU0xQVhmZUd5QTA4OU9rcUp0TWVtZjBpMXdITUY2K2YyNGtKTWhGaEVYUWlqZ0NIYkVPNUJ2OHVDLzVJbUlsQmdPTUNtb0NnMlA3VGFpQjNBRUFCVnRSbUpNRkppU3pxR0hBS2E3dUFVT1BCcHAwQm1TUTRnVU5JUk5mWVAxRlZOemMvRDRBZDBHZW9vMHJVdTBDWVJBQlR5cVd1Mms0VUJUdHRYaFdJd1JOckFzeERqSjNyZDFYN2NJS2hXdVRLU0FTZVNCbUgwaVl5dFdOc0FhaGhybWpsU1dWV0NMejJ6SkVPc1k5RlE2cnd2YmViVjhpa0V1a3NsbHlMTkNOc3phQTZLWUozeTJMQWN5MnVSZzB5WmhXbXVpVXhoVUVBTFZaSWxRUGNNVFZHelJQc3ZMb214Q2NGeEFhcldSQ3d0YTFDRW02VFBnUXV4aS9qYTZ2K0FBZUdzUWlxdzE4SXRwWVIwSmVPQ3dXQVVsTFl1cjJLc01JMG80bklOWE41VFNZK2h4WjlYUDVGcGRjQ2xlZ3NFUEhZR0poNFVqMlVsWWcvTnJsR25Nc0ptTWpWTGhaWUVYVGxtSURGVm1XeEpTam96QU94QmNxMllQbFVVNDNONUhVL1lhRnYvL3M5RVVHdGtzbWFyb0FkTzhMQlpFRVp5SWxka0pROVRCclJSOGNVcmJJWG9NUE1rM01TZ096Wm9GRjdCSVhGekZZR3FOWnJCeDZ5TE5lZ0VzaW4vcUd1SUt1amh6UEhUbXlSSENFQnJsbUVqUjhlOVRsa09kbmxhdFpQYXVud3dmam5kdzhJMW9XZEFiN295TWs0OUJlcVhIUEdNbGxFbU9VUnNBTU5FdzM1cWhBbndCeU9jZzhrRE9UbTJ2NFl3VWhnS0hJQktVRnBDRFBDL3F4dFA1NlVHUnNZTDhGQ1E4Z0xUbUlucDh4S1pBdWRNQ0k4c09YZkFPb0FMazhEZytWemphV3AwcEhuQWVSNkNsbTVhVFppNVhURjltL3oxN0VKMW1NY29sNUF4MU1KZUFPd2NxOTRCMlJQUWdKUWhqVUh1Z1ZwQnlNZEFXNEFHV1VPSFB0amdJOC8vS3lYbTNLQXd4dzJRTlFRaHFRTjhGU1gvbm9FYkdXNVdBOTBhN01yWGNMVzJWb1NpSXlDZWt2ckgrVHhLb0V6ZzFpMTBaVzJEcEc4Z3pZZDNkNEkyOG1nWFVoY3FSZGowTmlpWGVRQm1RK1M1b0JxMVNRQ1BQRnZNSUV6RzVGb3JTUitJaEc1QndpT3l0bUU3Q0FySjg3T1RpSU5ZUmx4Szl6MzVtWTk3b1dJZ2ZvWmthZ01TN000SUFKY0M0ZG5wbUJjb3VMNllkSHR0ZWt1Q0JzcXVlQUpPUTJxeW54REhzc3pBRFlUSERCQndobkhwVXZDSWNObVBZSjgyRUlnaEl6U053dmg2Mi9xRnN3aGFlVGtDSTBZQ3hTSFd5WCtyOURUbUtCVGowYjhFQTRzKzRzQ3graGM1K1JhWHZESW9oaFk3cTE1SHhqNEpwS1lXYUd5VUVVeURxc1JreDE2NTNGdU1JV3hYVkZ6RUdaQ0kyVEpYaGRRaHpBVzRDcHVBSHlaUlJvTkFZTC9SZ1AyNUVSZ1hrbzhHZmVpbStVUTBmQUxjS1NqT0NCUWJMdDluN2dhdkNUc2ZEY25qUzE5QVpWaUhuTUZvTWY4eFJCR3FnNUdCRGZnK2w2dzAxSndtNzB1MXRnV0ZXZ1hDUnpKdjJSTlEyR0o5WW5pTG13NTBSckpraU15UVZwMG9KS2tUUXFzczBuSm9ZbTNCVUYvRUM5Nk1ZRVNVTkc4MHp4elJEQWpHdG9PTHVxZFYrRTJFbGQ2b0g1S0tyVGxmRDEyWVZmWHZqMU04OEJrWnNuQ2xqeXhtSXlVRkszeXRvTkxROHFzVStFMXNCNElGZzJ1aDgrUkJJaEQ4a2VSRGh2d1MwdUZBVDJVK2FwaXE4Tm8xZ0RWZ1hycGVVRE0yRkljMENleDlDMHArUEJMNklSVGE0TStkMnJLeWRFeW54Z2pSMENia0VhTUFkVnl3dUpyTHhkczQ3c3hYemlVZ2xtRm40bHdCazdBZEhqYUpzUGJTMnV3R0FOeG9CZTBhR1FGN0JHSEhrVW9pY3hUd2ZSVkVFQkFJb2l2NHBGaWZEdEt3NG40UzBHRTl3SmRWZ1JiRHRuczhCNGlhVEtRSE1YSllJVzZ2SXNUSzdoaXVEQ25RRkpKZ3k5aDdjR1MwRzV4RnZKdnFhRWgzSW1TYmRJbWFxVWFNMXgzNHJjUVBmaUk5Q0h2VWFGanczbXNoS0FneGhINXNIT0FEazBFRlBBcVI1VmhkZlgwdkp4WmdlTUVpNmJxU01mRVM5ZHc3RWI1Q01sUjdrZDdEUElWN0lCRzd0RUNaZndHZzBGSEFjVGZnakE3YkErdDZKTUk0eHRrK25FVGx5L0lJMkRsMDFaTXIwVTRuVURuU2o5UFVIOUtqa1A5VndFSmk1aGdHK090NkFZS3ZpQmJDRE1NdFFtZHN6a3V5b3RkK0V2c1g1UU1JbVA2aVg0V1pLTzlRZWxPMkFaOFR1NU9HdzVVQXloK1FaUmpndVhiaUJOZEVsK0d3NktDNDFFa205aU9aQTgxYTlSMFp5NExpaEFoVzFXRm9Ja3NSdkUreWkxd1Zrek4yUmpCdCt3dGdTU0tndTZHM0d5QWVPN2hDbEhWb2hib1lhaWJKQk5Sd0EyNW83Y1JsZVN1MWMyaGNWbFpnRmcxcDB4bU9TMm5ad05hZ0dJV0JYUUVpV0ZZNjdnc0RMWlRUQzhOVlZCeUg5dUxXRjN5SHdNZlZSZDEwZklsREJEQmFhUzVsQlEvZTdtempRMndMWkMxNzhaMnovK3J2c2Z2bzNnSFppM3lkUlVLTHMyU1JDTWpPRkV2Q3BEeU1rNFR3RHplblRvNEh0NXRCVjVOdWdhVE45OFo0bTI4WWZwQ1dKc2Y4OGtmU2pJNmdUK0lrVENTSUF5dXJic0J0ZzVlRE5sL0dWdHdXcTFEWlYxZ2crZGpoQ3p3enlwTm9OMFFiNStnTFhVdnZRVjJnWDJSVmt0ZVV5RVZwbXFRbnZCSjgrR2ljZCs0VHdidW5RVDJ3RDVCV3R5UkE4TlZCdlBReURqSTlBYXI4YUFSV0FzanR4dkNFVjRFRy9qc1JGSFFrUUNFK2VoMFYvQktrbERYQlhRTU9GWFVWcGdGbVNuWWtadnFtNzhia1NBZEVTbkk2VEp4YmhOUG5ManBnMnNCSmNiTW1nOU0wOWlOenkyN2NCRkhYWlU4Z1I5eDNTcmFzRWlCbGJ3eFNYNEpXMFhrQ25rZUltSXhiTEZIK1RFNUNtWktXVkZHc2NqajNFdTRBZ0RJWUxSMkNVT3BBL0tESzJMWXVZOWV5cXVxeTM0NEY1TEI4T2xTN3lQY1dMSTdpMUVkZ0cxZmxWck9LbUdqTzhwUVdtdjJuaUlOeGd4NDdUUVF3dnpYUHd3SDZKUWlvczQzQis0K0Q3Z0JQQkk2WE5Scm9DSUdmS29xUkljaEVnNGlRQmgvWUpsblBUS0VCbFNDSFlES2h4a2tvVEdqM2hPd1d5UlN3Z3ozbTg1U0JrZkNGQWVoVnMycG9tWHFrejlRRUExK0FJS0Jmek5YY2djalRraE1xOEtDbjRra2hoQVJwWHJEUEM4eUJ5OHhBRk1aQmJPWkpjcWY0ZHd3NWloQ3RFaEpDM3hDUVpQUm92YjUyYUFPdmZuN2ZCSzBWY0JqVkZ3UEoybkl3NXNWN1FYREVKQUVFRW92Z2h5NG1tTk1iSlM0YXJZU3JxcS9uc21TNFg1Z3g4TGVuNkFIN3RNQldiZ3NmZFc5UlBraHNrTmtMdzVZdGNCSmN5MmFxd05UMEd1SGRZRHBUVnhtc3dmQUZRQitva3hJUUx3NDdWMjhKTTF4REdlY0ZGM0dlck95Y1dBQk9NdWlHZ0VFS3BxeUptUWF3Tks2VU9LR21JakVyYVBlRTlHdmJoQ1hUbDNNcEoxTkluZmlvaEEyeTFrUEs0UitZSU00NTFRVHVYZkNIT1ZFWkprUEpQVVdkSUxNR1JCckh5cjdBVjZIVTY0clRwWkttd3ZWSE1TYkhleGVndWJuVU92U09uRXh6RVFZeXQ2OFpMSENTQUxpVytDQkFWTWpzWVpuczZXamJ2SUFVTVdjR015cXdrSGtRZ2VFaXFxdmZDb3dQaVJlY0pUZGVVYmdnTGlPb1FJeVMzVFZGM1FzN0FpdmpPZnM5L1NvbTI0QzBzYUlZZUxvbXpuVlVISEVEa3o1cXg2K2V4NUF4ZXFRL2haZ1pGd3ROa2grY2c2VEdOdFRTVmY4TnkvRWgyb2craERQYitxSnZZblFNdkdjckVFUTdWNEx5ZTl0aHU0YnB4RHdBMmdWVkJCWHBWbk12L2pKMVhyQjgyRFp5RklYaS9CZUJMdUJUV0hZcS9JZWlRVW93TDh4ZGpucUp5QWRBdEYrUUZRc2taalNDVkRyVWkzaEhLekRJRmdzanpDbzhyd2t6M2pxdFRIdUYzRGlXT0U4YXhZSHV5b1NJSlVWSFg1N3JWQVE2MzlVQjFzVE92b1NEakdCazcrNjR2TnRVODBnSTJIR3VoQXhOclZac0VKMG1QTUlCR0tDR3h5cGZkZ0xTN1B0VU9kcWdocHg4WmpvVlIzTjJUaHJLNUNZK09CQ0xvMXZ5LzFSU0V5RGNrVytEZmpCKzlJamZqQWxTOUJ1bDRFbmJ4aTVTR1lReGVHOTdXK3FDeVc5dmFFa3IrOStFOC8vZTFIQmJ2dTY2ZGJUS28rQkZSeHJkdHZaQkI4cHZJTU1ZazZSR2FHcSsyZEZqc3FUb1Zuckkrc1hSZlYxNGlGR0JGenF0MGU2ZE5LbHRqV3JvQkM4RXJOR1FCenVEczBiM0QwMWc1RU9wWHBxcXJONExRclYzZmlDb0tpbzN1Z1JrZ1UwVG9BYzlJclJCRlpzaXpQZ3pNVzh4VFZLckEya0k1OEhzYTZFNWtXcjBzSnNBaHJxQm9DdjBraEpIU1dhb20vRzFsNFN2UG9WY1VKV1h1RkpnRVlHZkJVeE1aZmtoK2ZtOFl6MG9oNExBaGNva0pKUFdtVEVQQ3oxMjZxYW8zWmd5YUVRQnl3ekNJRW5mYTJ0MHBSOEF5YVBMM1NrWFF5Y3JxWG15S1lseU93d3Bmb1k3NUdPYUpBbURFWXZnRmRMeVN1dzk1RldFRlZ0Z3lLeGF6QkxQVDhsbWJFNlNIclMwaGVWWFNnSFltZXNRWXJJYWpKNXZGWVZzYkwvWTZFWVpwNHh1YUtlUkVtYUNaQm55bDg4R2FrWXpEdWM4Nkk4UENBWEJHVmJuaG1LaWc5cXh5em5CbUFQQkhqcUZrVG1zQjVWc2lKMXlReVpjWmhPU2dURUlBV3lIUVZmeG93d2t3RFdFQTBzdTRtd0lYVVRIUENtb0N0cXJSa2tyZ0tMREk1R1dBVHhzdFBocU9YVlpCQzdUaXNRWUIrTjZrRVpSdExLaFJFUnFPL0ZvTWxnUUU4bnBYd3cvc3hOaWdROXE0cXl1d2xtRVltWm5tUkhzbDlNa2RDUytVVnhMMzJFdTYrTUNMM2JDUUhJUWoxUWFYNGhBNXVwSkx4VUVIaUY0YXV6SzAyNmd4RnpqS0RnN1djakRNbjQ3UlpodHNrK3ZGM0NQMkw1Z0NwNFoybG5RazBIaUZmTVREY3E0b3FYY1owcXV3bnZRSTlWTmdYbGtsaHk2RmNaRE9HK3c2YnB5RC9zTHBIbXcvWXlDQ3IyN1kyK0haUCt5TFlJME1IdUNkaWhBdGdFd25aQ1Y1V3hBaEJLS09YQ3BGYVlvRmlYM0tRaXVRL09ZS2VaUVdRUE9wQVdOeDg1WXZiM3VvNVdOSVRnMEY2bVpJd2lxbzFoUWdKU3htTnQwSldGdEV2Y2hUV2tyUHlpMXdEMUhlOGVtTkVSblZ0MjE3cHE0a01aaDRZRXJvZmhCeWw5NlpLVmRjbU1oSUk1UTBxSTV6OHdXQTRlVjYwQzdPWjRNb3J6VVRLemp1Snk1MmFzT1lFN1J3aVJyVEZGQUxFS0psZVZVeU9qY1dmUkNaTVN3NlNNUVBnREYrN2NtSFBYM2NjL3Z6Wi9jMDNYbUhTRTV3L1NOMnZjdVV2cjZwSGpDZHlxa3lrbExDV2MyenNYY0tHSTduZ1FwQURhM0VhR05xVGdsSklBcC9Bc1FOTlVtUFR0cit4Rmp3Kzh2Z1FGUjFRZ05HeTdHWUNRbFJneTB3U3JwKzhnZUlJRER5c29UcDIyRThjVzBmanNjNE5FRzU0ZlRmbFdyVm5KamRWdER0ZEQ3SkxHYWlFdmQ2eWpKc0I3Smloc0hidkdkT2pLaG1rc3lDVEtOVStISFN2NG1Rd3dHbStUWCt5dFdFak5obUpvb0Z4MWdzMWZGR1Q3dUhua05mSnczS2RJR1ZjbUQwdWhNYmNJaWhNaUJuV2E4bUtTcVdOeXVPQm1WZktIQjJETnNaVHR6V0lrUnJYMVA0S3VLeFNMZmVPcmszeUdXbU8zMVB4a2ZqUk5oekQ1ejRCTHdwbUl6dTFWY2ZQQUgycURRTkhRTmxSdXd4UWMzS0pIcWdGY2VHbHF0MlUzaGx3V0RGQmZIaEcxSWdLOXlTanRPd2JBZ21PaDJNMlVMc2tMRlFKaUYvRk9ibDJtVlRVSVl6Ynh1RXlUTE5YcHFQRlZKQVBTdTVXNE9CbHFwS1JGZHJTYWRwSkNVYzRnaWk3M1NuQU1NQ0d4c0dPNTFLODRhb1hEOGZ6NTNhczdQSElTRnhZVkZCU0ZXaEZuaHRHeFpCbU1nVzhkK2lKZ1UwR0I0SGF1ckZmQUFQTXBuSWZRczJQaVhzYVVBYlVyRktBcWNoVWJ4bDNlaFUzVkF3MWRMc2pFTXRaU0VVaUorTVN4emI4T2pQVUNJUEpkR093eXArS2xYeDJmM3JEKzV6YlUwRS9FVno4K1ZYM2VUbXJDd0UxTE13SFNHUzNlVms4OHNjODQvTWJFZHIwZEw1b2llQWVpSm5iU1pwVG1TQkFpSHlwUS9VbVZvMmxlYzBPc29tZ2N1U3hRUzRpdmlnVUhTcS9Cay9VUnVJWkE4Q2l3UUdtYlpFSWhWbzVvbHl1dDBsc0VCQlhTSlRXeVcwcnQ4UWNUZlN6YmFmUzFsRlR5V2lWY0ZSUkNXN1dQdWtjUWxHWWtyUVA1RXdJNlBrQkFJajE0R21HaGp4QVNFT3VDekVLd2o1ZmpRcktoUWtpNmswYmhUdy9kQTZwUUp2RWc5NVRDVDZVTk0rTFdVcnlIS2ovaGhRblRSekFqT0pDWkdRWWE2bUtmREdKQUJONmZXdFBFZk84a3UyQ0xrRTlNT2NnUTVCcFNWUGtXREVMclk2dHpRT3k1THlaNTVIOXY0L1duOC91LzRyV24ralFoVjZBSU41ZWlCRDd2NG1tRGZlZUViQnYyQlkrYS9EYUdwb3p2NjRlZEs1MzBoandONFltTE1nV2FZcHJrTy9ydUpWVSt1enBaSytleWJtOGR1bXk5aENLWkRvNm5pa2g1VHI2d3FuSkROZ1p1QlQxVFhqVjdHQVhkV0FZd3Z1bzFZREFBeW40dVlsbkRiMUwzbFFWWVZHQy9hSWJOeFlDMkxQWCtZQXhSS1BhUmUwbGhMbEt2OU1EUmg2VTJFVzlVb0FBeHV5cWsyR3MwaHUyWjlaU0ZwTlIwVWNzT0pNV3NXVEF3bGpNUUZON0JSSitxV21reTZXaUFmak9QZ1Q0eEFWbStCb0l4b2JoNDlDVENQdnV3QmNHcHgzcUhMc3VMcS9aMVFnSm10WE5jc0ZhRFh2S2FuQVhWUlhVMHptMVNkQlU1c1hUSTBtU3d6S2poMC90WGIwNm5WREV0dkxvVU1aUkZZaEhyMWVsdmZESzR2QnZVTCtOak93Wmw4bEVBNnBMeG1ISTc5dTJld1Z4K2JKanIzcXZIV3ZFSWFsTDhpQjlHMUJ2dGNicFZRZGZvQUorQWZyN0NrRDN2dzdsbnlOWVl2UTNJZnhMeGUySEVQNFI0SWdUTUxJaFhtdFJpMTZPK0dQOGVDeUw5Y1pLVjVRdkQ0OVZxN2FySERpQzBCUEJYcVVjbkVCQ0E3SUEwRm1NV0FodGwzT2hzMnRsUFZ2SGZLcFhFZ0VhdWpvc0pyb1kwdUUyUFZlVlptQk5FQWpFUzB1WFpBV1hDaHNwNVJyVU10eng5QW9kbUNoT1JPWUdhSTh3Vjl4VlFHQitKRGVwL0ppdmpGaHFUTUNEZlJ6SDNSSVdNejJDSEtnWVRRVzhoVGhPRlFXMHNHVG9Eeit4eWwwTmZhQmNVaytiL2k0UURuN1Vaa2RoTlJIU1l6Z1ZHRGZ6K3ZiYTBVZmhVNlhFREJiKzc5cHpqM0hYcmRSVnFWY0RrTFNlNGg2aUdyRXd3SURBWk1QUFVIcDdaU3A4UllqU1hnSmw4bE43bnR5bG81SDBzNEM4dXFud2ZKZ1dGYXR0cVAyTlZHcGdkbjZkWXZBeXdrcjlrdHEzU3lKbmlBT1JvSjJEQTkxalFmRVRKS1J5UXJZOVk3MTRYbEQ0WXAzZFpMVm11bjZwbFEybHN4VHoxWU1HNnJVaXNDN1NYcDE3dnF1dmkxRUFhVW5tVUFvR3hjNlRzL0xaZVF6SzNsUGNienEzRUNmbUZPL2VGay96UXdyOEtjTGRQMDJCUDJXQSs2NjVKekZBa0JiMWRCZ3FHWGFDdHZkRDlMWXdITkFpR01lSG91YlZYNkRkL1F1MkEzU1laZ1QweHVnRm1lMEE2azBZTDJybkhpU0RIOHBTR0dzbi9WV2RtV1duTWlnc2dEZ3ZTZDJDVzVvV1RReG9FdnBGRUJkR1pPSDUzMlFFTW9EZlZIb2xKcXdrTlZXbjFZZER6a0VwRXYvMXFwemVFWUpqYWRkaEVwblZ0NkZPeTJxM1JJWGNBUm1uOW82STJ5RXNaOXl2NThnVmJRL2tHbGxwaG5ZelNaS2x1NWNoR2dyM0s0WG5BUno1Qm1HNk10azJjTll3aVhaUXlBaThPQ0RndUFwRVB0Uk9jTkRPZlRMUlJPQmMrTHJJRFhpQ0pIMGFkSExnempDWmFyQy9nOHIxWEJnc1pneGpQbTVuOWZpTk96TGVEOEhEaTY5ZlM1VkV5R0U4ejRwMXFRbkIzOVh3ZVJQTElRSFA4aFhiMEoxNk5Sd2pWL0Z0bWtwcGlIMVNLbDMxY1FIdnh5Y216QWg0RldiZzRueW55ZzdFK1ZCaGJEUVB3aStHYjhBSXBrZm9yaklENlExV29heUREaFBjWHRSQWhzSTI2V3Z0cDVkWkEwNFZGY2VqcVg5cGtDcHEwNTdOWmRidTlsZnh2cjNKREtzWGlKd3BhZ0dNMmlWSTJrSks1b1dRaDRmMDhBNW9CYVdwQ1dQQzZBQ25xd2hUVm8vcGhtTUJ3U1VkcGRNMVVUdmNYZlg2Qm9ZdmhDU2VBb1NlYzN6MjNIdFZuWFIxdENwcjRuRDBtRFVjRUVhNzR0WEIxalQ3dDQzNGYvelovYzAzL25FSFFQY1JWUkVXVEt1ZThDSExrclNCMVpCQlZhVWlnSzBBS09SNCtvV2hnRHJkOExGSjdFeGZxQU5abzIvcWNBbkN5cXVpRnIyYWtoSEtSSEx5YWlsUjQycEdqZUZhTUhkb0tCd2RZbDRkSE9GRDdUZ3RKKzljQitIaXRWbU85OFIydC9xcVZNZ1BOV3pPOWJ4OFhnZ1J3Y0x4T0RiQUNwOS9rQ0E0Y2lJNTRpQ3pmLzRZZUpycUF0N0k0bDdVMXhZeUQ2ditYM2dMZ3RLbXFUUUxrU28ySlpFSjhTNjZ6a3daNWxpbm4xajhya000TllsUWg3WWxWaW5pKzVxMzZwMktmdlNhUWZiaHFLcll5SjVkeTJjWElkZmt1RW1CVVB2Q2VNdktYVzNZc0JMWWZ1WTlJSGFPT3V5Z0FqWExRWmx4bjAvSEYzQ0djaWQvOFR6WnUyenc1Rm95SityZ1hjMTRaMVE1d1I2cDZGaktWSXNoZHA4MVNETENaS0dGdlhielF5MXorRXVmbkh5a1IvaDkrcjlSV2xtTjhpZ09pMVBaUnFaM2JhdFVCYzRlTEtpNkwwRTFra0FkTzlBWkNCdTNrOUtOeld0N3E2azNsOHhnbXRXbEhkUXVodU80QVdTOEltSXNqcW0rRGtIa3JGdWdUQmVhMHplYnp2ZlhMWEswY3VvTnEvOVdZbnovN1A1dmlmRTlMOXkzeEFqNFJPUS9EaW1EbUFpVEVWNERJbDYzditSSW1ESDVaZE9STWVTWnJuZWUxOU0vbklEQU5yNERhUUw5cTF1TURBdEw0cWwrZGhqZVA4UnJCbkkyWENDejFpUUxwdHBNa0NERWZuTmVMZXNJeXNKdE85eDJjWXhSTzlITWNvM3F0Y2NxNDM0YWNZUGdZbUlEWkJRR0xNRmRXU2h0ditDRUFUWjdIZW5ZR3BCZDUxOUFhUlI4S3dqRFlRdUZBZmJtZ2xHRzc1TzBxMDQ4cU85eXFYWUdHdXN3eVhSWHgwUkl1NkJHV2ZqYkFxRjhjTVFXa0FUcTQ5ZXVkb1pCc1RQY1BodnVOSlBVR1YrN3RXSHBwemIrSGU3RTk1bmdPU1FEbzJ3cjk3NTBLSVhvUWRkbEZVUmlid2ZrM1dCcHFxcVdvVWt3TUJOWXpVR2xpTkljendCckFNdWdNemxOdEFMUzZwRDFLdVlhMU5KS1VISjViTlpONEQ1S051eXRYc1FiTXBPZzB4K1ltbWllYWI3dnVDVDJwVEl6NEdNSm1HM0U0dFgyUE10NVh1OHpDU2lOaHNyME9nVDBObnZGRVVnQTVzaFVwQjNxMG93YTU2dmlxdlZsRjUzQ1BGc05TaVRNK25ESFVDRXJWSlJuSndxekN1cisxVjJjSGV0b2cvMTZDWm9rbXRxcjBpei9xSXp6L2JQN1RYM25kOVdkSDE5N3BSM01KZGF1N3BYUmFZQUp5NytCWGlrVk1tZnNqQWkxUWZ3VXNtWm9uOWxPUUhHb0tGaTBwM0xRWUhWNFNlM1MxQmFyblhmc3RBdnF3a2YvcWxxcFhpL2tJZFpheHVZTXNTYlhCeDVtMGVHS2lVQUNKa2tVUUZ6MVEzQk9MWk9xL2pnU3BXbi9ITnFXSkF2aUFMUlVsWmtZYW1RRi9kV29SRmpoUEdUUjFMYWhSbGtOSFRXRlpqanpIQWNUbFk1R3JWanBScENDbStSNG03ZTkwdzdWSnh6Rzk5RWtaUTlzRlkvQ3BOU21QV2xaQkxkaGtLcnhvUDM5OEFkaXFub1dLN3laWVBIYW53c0pWT0hIZEJmMUl2WWdad3VuUWEyRC9LMUhVSnZVMjV2R2F5bC9iYnhEWGJoN2FZY1F5RmlZa0tGMk9nRldyWEpqVENOY3E2M1JxdGFuVHZRV1p3dzhvcURtNitEUjlnU3U0U0o4SG1UaG9kWU5RV1lvUGRqR0NaWUxDSUpBb2FreVRTWkttM3FuYlUwVWRtWkE2dEFONmo1ZytSRVFHUk5ISE1VK0lDcG1UNzN0aUdxenRxTzJOOW9wVVhLUFVJYWVkWDR0cVdXOWRaOWY0eDNxS2VyZkNaeVE3MEZnQ0MzUm1GeEN4NFZXLzV5cDFsRndTVWhzSS9iV1NTWWpudFhwaSt5ZGIrV205bTZVekZXVlZSd0xNaG5RanhrL2dISlhHeXlwT3UvQ0hFSklrdS9kYVk4TFRZR3Mxb2JLN0MzcXpKdHdqMXpndmUwbEs1NG5nUVU2bVljVzZ0bFhuU3dkUElmT2tMRnNIdTQvRnpPb0dySk93T21JVTFFTDY2aEs0NlBqQmR0UVFIVVAxTTNTeHVMcm4rU0Jub0VJa2xUQWlzc3FIazAxUFlNVzB1T01DUU9wcG5VZ25vakJZQ05tb1QzZXBmWHNDN0JjRzVWbXpCNzRDQUNHRnB3S3BkeWZod3JhMmxISkM4R0U2bFZqdjQ1WVJwRDFuUmxwMGtvdzNJcnFRZHdxTVBTa1l6WHZvSTVMQkRyV2cyQUdqRFRRRmRXc2lZd2p1M2xzeFdzaUtGRitoYlFoanordG5CZVYzbEVRMjdUcGhSVmRxYXRCd1ZUb2dqMks5aUIxK28vazA2bXlyaGFjUHh3NmVKL2RyeS9NOUx1ZDIvRTNyN09lcUp1R2wzT2Vod0dzVklaWXRoSWNxYk5ocFl5a1V3RkVYSzVxR0F5cWRNRTNwaU5qcUZCN3UvTnFNRGJaQnZ4YThOTkQxN3ZML2NrNk1qajFPRWlCYmpWb1Mrc09uWTlVcElXRzZEMUZpS0IrVkFsRXdwcC9kS2Q4SldZai9PRUpMa2xUbmVuRDBsaW9SM1pKdlcxQkZxK1Qvd0ZLVTZwbGpCanlCQnRFN3N2dnVsV0lhL1JwbThBTllVRld2Z1hkRXBrWjhFQzhJZ2ttNHBVTVc4R3Zyak9NWWFzckNBRFEwU0FBRDMyRWJoektwbDVRUUtBbmowMEVHR014OVZ1eTZPcjF3SGxsSFd1OXdONlZLdTlsSUtYcWErVU53SlJqUGRTVHJ6Nm5yYTBTMVVFS1FPVjVaNS9vUkJEUWdwN2d5Tm9pT1dXbHBvUzJwV2hiSllzT1FqdThicWhkbG5PaFg4dFdSN2pzdkZ3N3M2eno2SVMyQ0Z3MUFlZ3ZxV2FUWDZkUndCS2kwT2ZyaVloWnZmbEpoakF4djFxMk9zTE1WODNtcjlPQ3BBUW1jdG9kSlVUZWJSMW5KS202am5Rd3o2Qld5dWJVZHJpbkFxZG1nSHJ4K0pNbEJac2dWL1dBNExxM2ZQeGxGQ1NjZW9KN2YzUUVaL0tkcWpPWEl6cENVNms2bmdwcmFqU0trbjJXZGZvTDJwaXZzcTVOZzJaYkFnejNQSnBrcStxRkVhUWw2ZFVQU1U0djlVbGovT1BWNFF4Ri9sVGZvamI4MEh1R3hvTVRab1NwSjIrcFlIbDhqV0ZMVFdiYzhiVUVPZkpiSjE2QUVTT0psMXBJY0FaM0UwWGExenFmUWo1Q093ZVVLZ1lwTTljWHM0eGVyVkREVmVFZWduTEk2bGRxMGpHZjVGK1BPZ0NLd1BDQVRYenQxOGhLS09rZFNuMEhVT01lQ1JmZVdOS3dKWkZMeGZmUHRIR0lVZTcwQzBPSEhnS0ZyT09IT29YeHJpbTJBTE5ST0dyM1VSZE1mbTM3T2dCVU00YlBmVzdac0RzNmpEdDFJclBLUG8xSU1uRDV3NHJzcWUwcklwMjViNm8ydk9PLytNMnJmakVHaXZTQSs2K09oYkdzQ3l0d0dmUmdEVUdKRmdPR0xSbDhBSGV5M01qdHc4K2xGMXM2andscDQ0YUlhbFhRM0swNkpzUFVraUo4NUp1SFJBT1BqeDZvaXpNQkh5RzJPb1M5UEF5V3NHdlZwODRuSWFnUU5iNDZqM01rK0hCcnlFMUNmYXB3eTlCRXQ0eFlQUVY0a0lKT1B5cFFGQjBQMVc3VGh2a0JabFI4RWxjV0xvUjlrbGJEcWYwQmxuOUNZMzdpZzd0Q1hiQ1l5SmF0VmxsaEU2RkJKNGVaRXgzekcyQUd5eiswVjJJZW9GMEJrVTB1QnpLQW4yTHdPcGFtazNoNFN2RG82S3duWVkyaFZJT0tnRTBLdEttQVhWdFc2VGNEc1dTY2prc09uaHBKb1VLampvUyt2Z2ZVU0hKRUFoNTZYdlZuRDBDMzZWaWdOSXlLRnNBcXJub2RuUmJzNnRYSTFscUdKMGFYekh0T1NzZVhSeWx1dmhNREtlb2FnVlU2NzhqTXVrWG5VTFlSRXNnaXVKajV5Zm1kazlGT1RJMDR5cXN5czdxeHRSUHNKSlNoQXJWU1YwbUZoZVBXcjYyNTZ0N1BxaG52WkUrYkEvdzFxYnRLblNpaUpwQWN5T2tnSXVIdFZEY0pSeWM1TXNHVG1ZWnlGRTl4RERXdUVRb290S1E2ZGJpdlpmTXBiVlRHOFRyWXIrbzFkSnltVytDbEt2UEFIZ1kwSmprcTRMRXVkVTJUcm9yNU9Lc2lWaHlLZXJEUGZuWldSNHlCUk9LQ3Q4SFMxRlErOVFzSU1objhkajlWcWlQUloxQ0h0YW9YcUFVSlQ5UHZxQ0RSZ0hOV2k0VFNyMkpJNnFFRWFoa2RXVlJQMmEveUErOWNEV1FPN2ZITHZwTzRCRS9TTWJzZG1lV1Z0QnNjTUpVSFlhMFRJLzZDMlZPSFgvRHN3T1c0YjRjQk80bzhOa25RcTlOR05wTmEzbC9mS05tZ00yTUExd0Y4VlZLeExBUnRGYWJGZUNQQkNrK1BMMG1LM3U1ZitYNnQxNE5DV0h5MEI2UnFxUHJ4ZFY5MTNNMm54blh2dDhIeTYrM1Y0TVlBanJReW5LL0RqSkx3RVJ0UTYrZjRxOXJpd05KZnk0ZHBaS1VaTVlYMXRUN0dVY3k4WlZXaGEwb0pCcEFrTGNHaXVnNjVERzhJK3QwTkRFdktmK24zVkRTMTM2b1NFZ1JOYllYUCtUNGNIY2dUMWRHaVhzSlFsQmZJM1hjbTBkVE9OUHgrSGNVNlRuM2Vob3JZcHg2TmlTVGYydWtETUp2T1Ztb2ZVSUN2WDdZQlpWYnBWY0VPVWU2MUo0NEN1TXl4bTE3dE9QaHM5QmI2QkFwODlJT0thV3JDMFdaUGwzZ0YxOEE0Uk5kYThCS282MGRQSFMrTjZBRWxzdE8yVndPeldhRFh1UXR2WDIvSTBVU0dLTlBpaWpvQkgxR0VvS0VlR1E4RThSSHhhcVdhUkJqTGtWd1JQTC9xQmE1Tk94dzRmLzArRFpWMmVsRWxBUmFFRW9QTVU5cFBoT0ZkdVYvZlg3VUEyVDBCVzNqOUppaFNMRTFDRjl1dU9xK2wzeFFROUJ0KzV0YXZwakFVMzJnNkUzdWZMNzBIVWJrTVMwVjB4Szcrby9kVHI1Nm9JOWY4R3hSbFRoRStUUzVTcGU4aFFZcHE0T25SdlYzU1FEMC9yRVpRWHd4eGFnN3VuSW9RSkNwZnFLWDY4N3Nmam42ekNXOWE4QXNvZFpkeUdyUWg5WEVkVytjS2NsVGJzazRHQWE2T1dmU01ZdWhYNmFoelg0cDFmQjBnSU1hQUNJdVNuVG1yWkJySGZNejcyVmZsV2RSdnRJd25kWDNqaWZEcWFtTnFLTUFJVE90d0lpS1ZtTitXL1k2Q2ZHZ3ZhZzk2cFBTTTRINlNGeXlEd05VMDUvQ0NBZERXV1pDc0xkd3VjYUhmemhXQ1RxcW9rNlFoTVZqOGhiaEMrcGFqWHlLaEJoQjFXT2diMkxnVm5Gd3E0azZUcXM0dHBuYXRYWlorcFljNjUvVmRzYTVPQzZKbG1PaGNsVWdyYWFjQ2tHbytlVDJqQXhLMzJzOVgwTG1OZEZqTmdSTm5wcHJ5UThkdzFTeWNWQ01zUERKSmtMWEZxWk54T2pMejE2L01jZ2lFOWZlVklSd2o1dFQ5TjlDdXRoamc2dDE0QUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUI4ZkJWeEh0QUFBSUFCSlJFRlVlTnJzblhsOFZPVzkvOS9QbVMwN2tJV3doTVVFQVJFRXBBVzBJbW9ScFlxMWlGV3cva1RGdXJTaVhjQzYwTnFDWGJEMXV0d3FXbXF4cmREMklyZFhzYlRJOVlwTEN5aWlVdGtERVJJZ2V6S1RXYytjOC96K21ITW1KNU1KaXlJazhMeGZyL01LWkNZemt6Tm5Qdm51WC9IOXIxM0FtcTFWUkgxOUdUYnhadVpkK0FHM3oxdEYwUjJyV0R0dkdGRExpaG5qbUxkaEhJcytXTTcwUEtEOEdhNjQ5RkhLTDEzTTltY24wNHFmRmJQR011L04wU3pZc0p3Yml1enZSeWxmc1lDSEZyL0M1ajBCZklWbk1mN21lN2ltYmdGMy9DN0t6R1ViV1RpZUxrazRIT2JBZ1FQVTFOUlFWMWRIWTJNalRVMU5CQUlCV2xwYUNBYURoTU5od3VFdzBXaVVhRFJLTEJZakZvdWg2enE2cmhPUHg1T0hZUmpKcjRaaFlKcW04OS9DTkUyY2g1VFMvaXFrbE5nSElGSy9Ba2dwaGZYU2sxOVR2aWQyN2RwVlhGQlEwTnZuOHhXN1hLNWlUZE9LTkUwckVFTGtBejJBUENGRUhwQU5aQUdaZ05jNlhJQm1QWjRKR0VETU9zSkFDQWhLS2YyQVgwclpKS1Zza0ZMV0c0WlJwK3Q2ZFNRU3FUbDQ4T0RCa1NOSDFsaVBJeDFIdS84TElWSnZzNzhISUlVUTdiNDZEcWxwR2tJSU5FMUxQYVRMNWNMbGNxRnBHdmEvM1c1MzhxdDllRHdlM0c0M2htSFF2WHQzZkQ0ZlBwK1B6TXhNTWpNenljN09KaWNuaDl6Y1hMcDM3MDZQSGowb0xDeWtaOCtlOU9uVGg4ek16R080NnZ5c216dUptemRQWmRYYStReERrWXA5MGJlZXNoV3pHRHZ2VFVZdjJNRHlWbVg2SElpeWJzNVlibDVWeEIycjFqS3ZpNzA3c1ZpTUF3Y09jT2pRSWVycTZtaG9hS0NwcVFtLzM1OFV0RkFvUkNRU0lSS0pIRkhRbkdMbVBFelRGTGJBcFloWkd5R3p4Y2twVXFtQzVmeC9UVTNONEp5Y25FRnV0N3RNMDdSU0ljUkFJY1FBWUFDUTBVbE9jd1RZSjZYOHhEVE5Dc013OXNaaXNUMk5qWTNsQXdZTTJKMGljUEl3Z3RkT0FHM2hFMEswRVRwTjAyU3F5Rm5DbGhRNTUrRVVONWZMaFdFWTVPWGw0ZlY2OFhxOStIdytNakl5eU1qSUlDc3JLeWx3ZVhsNWRPL2VuZno4ZkFvTEMrblZxeGQ5K3ZUQjYvVWVWdEMycm5pUmw5NWN4WXBWbFF4YjhDckxieWhSS3BZR2R5M1FhbGh0WmZIdjFoUGpMQzRjWDNUY0JHenJNM05aVmpLUCtWTkw4Tm5mTFYvQjRuVUI2RHVWUzd1WXFPM2Z2NTlEaHc1UlcxdExmWDA5alkyTitQMStBb0ZBVXREQzRmQmhCVTNYOWFSMWxpcHE2Y1RNdHNwc1liUC9LS1VSc2piLzM3VnJWODgrZmZxTThIZzhJMXd1MTlsQ2lMT0JzeUQ1Vm5SbU1vREJRb2pCdHBCNHZWNXljbkl3VFRNS2JETk5jMnM4SHQ4YURvYy8zcmx6NThmanhvMnJzeXhGS1JNblN0ci9kNHFjbEZJS0llejdKQVhPTUl5azlXWmJjOVloT2hJNXA3Q1pwb21tYVhnOEhqd2VEMTZ2bDNBNGpNL25JeFFLRVF3R2FXbHBJUkFJNFBmN2FXcHFvckd4a1lhR0JtcHJhK25WcXhmOSt2WHIrTE8wNmdsK3Q3NkljVGMveVpOSzFEcTIySVpjY0QyVEp3NmppRm8ycjF2REIxVlFldk5TVnM0ZlQ5NXhlWXBLVnN5YXhydzMvZlFkTlpHSm8wdkF2NVgxcjJ4Z1Q2d3ZWeTVleVpPVGk3ckV5YXF1cm03bmRqWTNOeWZkVHFlZ1JTS1Jkb0oyQkN0TjJHNW5pcUNKRHF5eWRoYlp0ZGRlNjFxeVpNa1hNekl5dnVCeXVjWUlJYzRGQnA5bTEvUXUwelRmMTNWOXM5L3ZmLy9yWC8vNisrdldyVE1kNHBZVU9TR0VtYzZpUzJmTmFab20wMWh4dUZ5dU5pSW5wU1FyS3l2cG5qb0Z6dXYxSnEyM3pNeE1zckt5a3U1cHQyN2Qycm1ueGNYRlNxRStyYkI5LzZhdnNHNzlOdXJJcGJCc05GTnZuc2M5MDRjZEoxR3pxV1g5aTArd2VOazZOcGRYRWFDUTB2R1R1Zm1lZTdoaGRPY1h0ZWJtWnFxcXFwSldXanEzTTEwY1RkZDFZckZZMGtKTEUwY1R6amhhR3N0TXBJbVgyVmFaK043M3Z1ZDYrT0dITC9ENWZPZHBtbmErRU9JOElFZGQxbTFva1ZLdWo4Zmo2d09Cd01hNzdycHIvVi8rOHBkNEdxRXpuYTZyUStTY2NUbVphc21seE4ra2xKS01qSXgyc1RldjE1c1V1STdpYjA3M3RLaW9pRjY5ZXRHM2IxKzZkZXVtM3NYUEdtTlR0S0xyT3Z2MzcyOWpwVFUxTlNXdHRLT0pvNlZMRHRpQ2xtS2RKZDFNaDBXR1U4aWtsRnBEUThPd25KeWNpMXd1MTRWQ2lJbUF1dXFQOGUrVWFacHY2YnIrZG5WMTlkc0RCdzdjYm9sYk82dk9hZEhaMXB2ejMzYUN3U2x5VWtwOFBwOU1sMXhJdGQ3U3hkOXM2NjE3OSs1dHJMZCsvZnJoOFhqVXU2ZUU3Yk54Nk5BaEtpc3IyeVVIbkc2bkxXcTJsV1piYUVjcmFJWmhKTjFNMHpRN0ZMTlFLSFN4MSt1ZHBHbmFKR0NFZW5lT0svK094K092Ky8zK053b0xDOThta2NVMVU4V3VJNUd6a3cyMnV3cmc5WHFURmx4SEFtZGJjTGIxWm91YjB6MU5UUzZVbEpUUXExY3Y5WTRwWVR0MmdzRWcrL2J0NDhDQkExUlhWNmRORGh5cGZDUEY3UlFwaVFHbmRTWlNMTFNrbUlYRDRTbGVyM2VLRUdJSzBGZTlNeWVFS3NNdy9oRUlCTmJtNStldnBiVmNKYTNJT1dOeXRxc0s0SGE3cGJNOHhCYTVJMWx2cWU1cGJtNHVlWGw1OU9qUmc0S0NBb3FMaStuVHB3LzkrL2NuT3p0YnZWdEsySTZPL2Z2M0o2MDBaeXd0WFhJZ05aYVd4a283a3FDSjFKaFpNQmk4eE9melhTV0V1RktKV2FjUXVkVk5UVTJyaTRxS2JFdXVqY2lsV25IMnZ4M3VhVHVCYzd2ZEhRcWMwM3BMVFM2a3h0NUtTa29Pa3oxVktHRURBb0VBbjN6eUNWVlZWVzJzdE9ibTVqWTFhVWRaWkN0czE5TjJOdzlqbldtTmpZM0RjM0p5dnFacDJ0V2dhaTA3S2R0aXNkZ3JCdzRjK0Z0cGFlbFdoOEFaRHBGenh1YmFXSEYyOXRRV09VdllaRHIzTk5WNmM5YSsyWmxUMjNycjI3Y3ZBd1lNSURjM1Y3MURTdGphVzJsMmdpQmR4ck9qRWc1YjFOSUptck5Md0Nsb3RwaXRXclVxWTlLa1NkZTYzZTdwUW9qTDFHWFlkVEJOYzAwb0ZIcjVxYWVlZXVYQkJ4OE1BL0dPUkM2ZHdEbHI0TklKbkMxdUhaV0dwR1pPN2NTQ3N0NlVzQUVRQ29YWXUzZHZ1d1NCYmFXMXRMUWtZMmxINkJ3NG5LQUpwOXZaMU5RMElqczcrenBOMDY0RDFKWFl4ZjhtNnJyKzB2NzkrLzg2YU5DZ2JRNVgxVWgxVlIwQ0o0OGtjQjFsVHUzWVcwNU9UdEo2UzAwc25ISEdHV1JsWmFsMzVuUVZ0b01IRHlaZHo1cWFtallKZ2lQVnBUbEVMYTJnV1FXMWJkek5VQ2cweGV2MXpoQkNYS3N1dVZQU2lsdloxTlQwVW1GaDRldFN5cmdRd2lsd2h0T0NzNFhPR1lkTEZiaU9ZbS9wNnQ1czE3Um56NTVKMTdSMzc5Nm4vWHZpUHAxK1djTXdLQzh2WjkrK2ZSdzhlRERaRXRYYzNJemY3eWNZRENaRkxScU5wdTBlc0FYTkVVZExLMmczM25pamE4bVNKVGU2M2U0YmdRdlV4Ly9VUmRPMGFmbjUrZE5pc2RnN08zZnUvUE10dDl6eTBzYU5HK09XbTJwSUtkdGxWZzNEa0tacFNrM1Q3RmlzZEpZRXhlTng2U3dYc2owRVp5akUvcU5yL3hFT2hVTEpkcTJ5c2pKY0xwY1N0bE9kcHFZbTl1eloweWJyNld5Sk9sS3hiUnEzVXppNkJKS0N0bW5UcHR3UkkwYk1jcmxjTjZGcXprNHY5MGVJTDJWblozL3BYLy82MXpjamtjanlaY3VXL2VXMjIyN3pXOVpidkNPQmsxSktSNkcyVStCa2FndWVzOWY0U0FKWFdscEs5KzdkbFN0NnFsSlpXVWxGUlFXVmxaVnBhOVBTRmRzZXhrcExHMFBidG0xYmo3S3lzbHRjTHRjdHdDRDFNVC85TUF5RHlzcEtCZ3dZWUgrclBCS0ovT0dWVjE3NTgzWFhYZGRvVzNEMlljWGd6SFF4T0dmZG05TTlUUzBMc1l0NjA5VzhsWlNVTUhEZ1FFcEtTcFN3blVwSUtkbTVjeWVmZlBKSnN1RDJjRm5QMUE2Q0R0eE9POHVwU1NuRmh4OSttSGZXV1dmTmRybGNzNEV5OWZGV3d1WVFOcHM5NFhENDkzLzYwNStXMzNycnJjMUhFRGpUMFhTZjJya2cwM1VzZEpRMXRRdDZCd3dZd09EQmc3RzZKWlN3ZFdVQ2dRQzdkKzlPeHROcWFtcVNXVTlud1cwSHJxZEliWVZLc2RLMCtmUG51K2JQbi85Tmw4djFUVlQ5MlFsOFl3OUI5UTVvcUlCd1UrSUF5T3llT1BJSFF2RVF5TzNWbVlUTi9rTzdMUlFLdmZEMXIzOTkyZXJWcTJPV3dOa2laem9Femt5MTNwd0M1L0Y0WkVmOXBzNXBJZm41K2ZUczJaUGV2WHZUdjM5L0JnMGFkTnJVdkoyU3dsWmRYVTE1ZVRuNzkrL240TUdEN1VvNVV1TnB6b0JzT3JmVFRnellXYzVJSkhLOXgrTzVFeGlubE9ZRTBWQUJ1OWNsdmg0TitRTmgwTVRFMTA0aWJBNkIyK2ozKzVkMjc5NzlGU0dFbmlKdzdWeFVSd2VEVExYZVVtdmVVZ3Q2N1pLUTNyMTcwNjlmUDhyS3lrNkxjVWluWFBLZ29xS2lUWkxBbnB2V1VUek5hYVhaZ1ZtbjIrbElER2loVU9nU3I5ZDdsOVh5cERoUmJQa3JWSDE0N0VLNHNRTDZqb0lSWCsxYzFvUVFZN3QxNnpiV01Jd3JhMnBxbHZidTNmdWZUb0ZMVFRMWUNRWnJXSUpNbWQ5bi8vK29rZ3lSU0lSd09NekFnUU9Wc0hXVmVOcU9IVHZZczJkUHNqWEtIalBVVVR5dEE5ZXpuZHZaME5Bd09DOHY3MXRDaUR1VXlweEE0aEhZOEVMQy9meTBWSDJRY0ZmUHZRN2NHWjNxMTlNMDdTdTlldlg2U2l3V1cvTHh4eC8vZnZUbzBlVU9nYlBMUkF6QU5FM1R0UGRiMk5sVHUyWFBLVzZwSW1jbndGTEZMUktKTUdUSWtGTTI3blpLQ0ZzNEhHYkhqaDFVVkZTMDZmZTA2OU02aXFlbFdtbVdxQ1hkemxtelpybWVlKzY1dTEwdTF4eEF6V0UrMFd4WUNvSHE0K1BHdnY5bkdIdFRwL3cxUFI3UDdGR2pSazBKQm9QUFRwZ3c0ZmViTjIrT0FicGx2V20yaXlxbE5PMXg1bFlDU3pxSEs2UUtYTHBTRVdmWXhSYTNZMXNrbzRUdGhORFkyTWpPblR1cHFLaElEb1IwVHVWSVY1OW0vUlZ6aXByVFN0T2tsQ0lVQ2szMitYejNBbDlXQ25PUzNNL2pJV3BPY2R2eVA1M09MWFhRTnlzcjZ5ZnZ2dnZ1eFRVMU5VdDY5Kzc5bGhBaTVuQlBCYTA5cVRMRmduTUtuRXkzRkNpZGUycFhBUXdlUEpnZVBYcWNZc0xtWDhHTVVmUFlrSHNOdi92d1VTWjJvUmRmWFYzZHBwekRibUpQVjNUcktPVVF0bm1leGtyVEtpc3JleFVYRjkrcmFkcDNsTHFjSkJvcWpqMm1kclJ1YWQrUkp6U2g4Q25jMDR0NzllcDFjVFFhL2ZYcnI3Lyt1eWxUcGh5eTNGUE5LWENKWFRUQzdNaDZjN2lxSEkyYk9uanc0Rk1xcWRCbExiYjkrL2V6YTljdVB2bmtrMlE1aDdPVElGMlNJTlZLTXd6RGFhVnBrVWhrdXNmaitRNHdScW5MU1dUWEc2My8xZy94MEkvL3diSUdHRGZqNnl5ZmtBa1lWSDY0aVlkZTNjdjZ5Z2hrWmpONjVBam1UUi9DYUtzSFBMcC9Od3RXYk9HVnZYNENaRkE2dUQ5M1RCL0w5TjNyWU96QVRuOEt2Rjd2dHk2NzdMTHo2K3Zybnkwb0tGZ3RoSEJaN3FudWlMMEpaL3d0amNCMUdIdEx0ZUJzZ2V2eVUwTDg1YXg3WlJudVNhUG1zUWNnOEJJM2w2NWo1a3NiV1ZpMmxSY1hQTVRpTlZ1cGl2cm9PMndpTjg5ZnlDMmo4enJGYXk4dkwyZjM3dDFKVWJQTE9WS2IyRHNTTldmR1UwcXBWVmRYOXlzb0tQaXVFT0l1cFNvbm1jQWhhUHdrK2QrdHIyOWtSVVBLdGZ2eHY1anhiRGxWZUNnZFdJeXZvWllONjljem94N1dmbWNJSmMxN21mUDRPN3dXaHNMaVlvYlJ6SWF0TzVuM2VJeThIN3FZZk5haGsxTG5kcXdJSVVibjUrY3Zqc1ZpdjNubm5YZWV2L2ppaXl1RkVKckRQWTFqdGZMWmswVHN6S2xUM0p4Yno1ekxnK3pZc25PNFF5d1dvNnlzSzlhWmw3Tml6aHdXcmRtRzM1ZUxlK2JNQy9uZHNqZXA4cFp5NlEzWGNHbVJuM1VQeldMK0tqOTlMNXpPSFNYbHZMSnNGUXRuK2NsYnU1VHBKM21wMVBidDI1T0Z0ODZlejhOa1BvV3oxOU5SbDZaSktVVWtFcG5tOFhpK0IzeEJxVXBuaUM5c2IvMTMvUTRXdk5wSUxPVXVXN2ZXRXMzTDVzSXJMbWZwaEJ3STdXYldEOTdoemIzN1dCOGF3dVNLZld6MVpOQjMyRmhXM25vR1JiVHcvS0tYV0ZoUnhhcTlNTG0rb2tzSW00M0g0N2x0NHNTSlkycHJheGNYRlJXdHNXSnZtaVZxdHZWR3duQ1RxZGFiU0luRGtlcWlPamVuMlFJM2RPalFMbmJoUktIb0d1WXZuOHJrdkJXNGI1bDNKYTh0ZTVNcTMyaG16citUaVpUelRIa2RVTXJVZWZPWk55ektwV2N0WnRXZVhQTDhPTFlybjFpa2xIejg4Y2ZzM3IyN3pjSmllMnVVUFprakpVbVFLbXJKZU5yMjdkdTdsNVdWZlYvVHRIbEtUVG9SOVJYV1AyS3MrZXNIYktBSDR3YTJzS0ZDVDk1bC9MVmZZMk82QVZBZUwza2V5QnM1a2JkR3BudHdGM2tlU3p3SGp1OVNwMFVJY1c1aFllRnprVWpraVQvKzhZKy9uVDE3ZHFObHZlbTBqc2d5YkVGenh0N3NRYWRPY1V0ZCs1Z1F1U2hORmUveTV5ZjJVampyUDNsczV0bGRxQnhrR05QbkQ3T050M1F4dGpJbVhqbUtKN1o5d09Jcng3Sm0xSGpHWDNvTk0rK1p6TENUNUlucXVzN0hIMytjN0NaSUxieE5MZWV3MHRtcFdjOWtnaUFZREY3bzgvbm1DaUVtS3lYcFpGZ3RVdEc5bTFpd0tVTGZDeVp5YzN4ZEcyR3pxZjF3RXd2ZWE2WjJieFViNGhsY2VPMG9KanMzMUIzYXpVT3ZWbEZaZjRqMUZScDl4NHpsanNGQVBOcGxUNC9QNTd2bjVwdHZQbnZTcEVuUERodzQ4RjByOWhhelhGTWhoREFTaGxwcjNNM3BtcVpNRWtrSVd6eEMzZDR0dkw1L1B3ZjhKdTZNWGt5ZHZJTVBQNHh6OXRsbmQ4bTFmMm1UQjhQdVhNN2EwU3RZdHV3MTFxMWZ4N0pIWDJQWjc2NWs4ZG9ubVh5Q3hTMFNpYVFWTmJ2d050MCtBb2VsbHVwNmFyRlk3SGFYeTNVZjBFZXBTQ2NrMGd3MDgvenkzVlJsOXVPSnEzdVJ0eUw5WGYxNzk3RnFrei94bjd4dURDdE9xY2Z5MTdKbVV3VjFBTzVzaHAzUkxiRUkvTE1VL0hZQ05FMmJOR0RBZ0dGK3YvOC84L0x5L2d4b2xudWF0Tnh3SkJac2o4ZXkzb1Rsc21LYVVScXJ5cWx0Q3FPajRjM3J5YUJ6aHpQMjNITTRTNnRnNTg2RXEzcjIyV2VUa1pIUnRjNFJnTS95VWFOUndMK2VaK2JNWmRGcmVjeDhjaW12Ymx6TFE2T0F1bldzMm54aVgxd3dHT1Nqano0NmJKMWFTbHhOeEdJeFlmZDhXbWEyWnBxbVZsVlYxU2NlanovbWNybWVVS0xXdWFuOTEwWVdWOEs0cThjeTlUQ1Ryc3V1L2hwN252NEdHKzQ5aTdOQzFTeCs5bCtzQ1RudU1QZzhOajU5RTlzV1hNdzFCVUZlVy9FNmkvWWFwOHBwNnBPYm0vdlRhRFI2LzZwVnEwcWtsQm5XUjlrTGVLU1VMaW1sWmwvL1ZneE4yTjVNSkJJUjRXQXoxUTBob3FZZ28rZ01SbzRZekJrRkdlak5OUnc0Y0lDS2lncDI3dHpKUng5OVJEQVk3R0lXbTYrSXZGd2dzSVlGMDJaUnZuQWhlYlZyV0xWcUhWc3JQMkJ5U1MzcnlnRnZHYU5PWUxJa0VBaTBzZFNjTFZLMm9EbkhkOXV1cDFXZjFpYnJHUXdHSi9oOHZ2dUVFSmNxMmVqa1pCaXMrTDhEQklBTnkxK2lkSG5yVFJ1Vy80VUorNy9DcTVkNXFkVmQ1QlhrVU9SeFVUUjRHTmVVYkdOaFJTMGJxbUZpZmd1VllRTmZYamRLc3NCWDBKK1p3N0o1cVRySTVwMHRjTTdnVStaMGViM2UyVk9tVENuZHUzZnZNMmVjY2NaN1Z0ek5UaXdJSVlSaG1xWnBMM2h1RzNkemlXN2RNbVZMTUVLNGVqY2JhejhodDdBdlpXY09ZcWpEWGJXUHM4OCt1OHRNQjNIam04Zzk4NjlrNjRJMTdDa3ZweXBhd3AxUExzWC8wQUordCs1M0xJNTVLVHpyVXU2WXQ1QmJUbEJUVVhOemMxTFU3R2IyK3ZyNmR1N25ZVEtmeVhoYU5CcjlodHZ0dmg4MS9MRnJrTm1Uc2pQN2NLRWo1RkZiZVlodGZwUGM0bUxHbnlGWXMveGw1bTJGY1RPK3h2SUpPUkJxNElNR0FDK0ZtVkM1L25VdS9aOUdjc2RjekZ1MzlpZVBNT1hWWVVBakw4L2I2WHBHajROcmVzbUFBUU1HTkRRMFBKV2ZuLytLNVpxS0ZOY1VaOXpORmptUEoxTjBMK3dtUGVnRUEzNmFhei9oZzlvcWF1T1hjcUhWMmVEc1VUMzc3TFBwMXExYjE0aXhsVTEva3JYVG5kOGV6NTNQdnNxZEorRUZOVFUxZldwUmN5UUp0RnR1dWNXMWVQSGlIMmlhOWlDbjJXNkhMazNCY0NaZmV5bk9yTTc2My8rWm1lc2pETHRrSW8rZWwwbXRweStGVy9lellmbkxUSG92SDE5MUxkdjhrSHZtRUtiMmdoTFBFTWF0V2MrR1RldVlWRjFFbWQ3TWhtb1Q4dm94YzFnbUZBODk1VTZiRUtLc1I0OGV2d3lGUW4zR2p4Ky81S09QUHRJYzFwdHVpVmt5N2hhUHg5dGtUS1hYSzNNS2VsUFlHMkxCSU81b000Mk55YktSTnNmWlo1L2Q2VWVPZDZvUGZHTmo0eEZGTFozN21ab2tPSFRvVUwrQ2dvTDdoUkN6bFZKME1ZcUhKdWF1SFlhaUwweGtPWnRZc0dZdjYzZFZRMlllNHk0WXdmeXJCeVVtRlJRTTRkbDdYU3hhc1lVMWU2dlpRQVpuRFR1TE82YVBZV28zb0dEZ3FYcjIzSm1abWZQZWUrKzk0dGRmZi8wM2wxOStlYVZ0dVZuV1c5eStZN3FrUXVLTGo4emNBakpsQzgzTjZZWE5GcmZPM0YvYWFRWk5Pa1hOem43YW91YU1xYVd4MU96V0tNMDBUUkVJQkw2UW1abjVnSnFaMW9YWnNMUk45OEZ4cGNjQUdEZnJjM25vb3gwMGVTSXdER1AxenAwN0Z3OGJObXdMRUxXeXBqcVFYQStvYVpvVVFwaldkRjVwN1ZTUXpwSGo5a1RlN3QyN1UxQlFRSzlldlpJREt6dXp1SFVLaTgzcGZxYUsydUhjVDZ2Zk0rbCtoc1BoeTd4ZTc0T295YlpkbXpNdmdvMHZmSDZQZlJyZ2NybW1EQjA2dEtDeXN2THBrcEtTdDZ4RWdtMjVJWVRBbVZTd2cyNnRsbHN5RnNmaGpKL2h3NGQzU3JmMHBBdWJNMUhnRkxYR3hzYTBFenBTM00ra3FFV2owUmx1dC90QjRFeWxERjJjL0lHSktSekhlOEpISjUvczhUbkUzY2IyNmRNbnY2NnU3cW5Dd3NLL1NTbWRTUVVkUjFMQklXRFNjbDNicVZrNmdSTkNNSHo0OEU2WFVEaXB3dVlzNlhERzFHeFJPNXo3NlJTMVdDeDJoOHZsZW9pVDF2Q2xPTzZNdUJyOGg0N2ZUTFllQXhLUGVab2hoQmhVVUZEd1VGTlRVMDczN3QzL3kyRzV0UWxGMmVJV2o4ZlRpbHRIb21ZZkkwYU02RlNsSUNkTjJJTEJZSWVKZ2pSMWFzSzU0OU1wYXJxdXo5VTA3U0VnUTZuQktjYTRXY2RuaW02UEFURG0rdFA1VEJaMTY5WnRma3RMUzNaT1RzN3ZuVzZwVTdUU2ladWRYRWdWdEZSaDB6U05FU05Ha0oyZDNTbCtZZTFrUEttelRlb29zcC9DdVVIS2pxazkvZlRUSGwzWGY2aHAya0lsYXFjbzdnejQwaDBKRi9LenVKL2pacDF5dFd1ZmdvenM3T3dIUXFIUTdWZGVlV1cybzFQQkE3aXRUZ1dYYVpyQ01Bemg2RklnR28wSysvTVlEQWJ4Ky8wME5UVlJYMS9Qb1VPSHFLeXNwTHk4bkk4Ly9waElKTklwZmxuWHd3OC9mRUtmVU5kMS92M3ZmN2NaUGVTMDFGSmlhc0xleUc0bkNxU1U0dDEzMzgzNXlsZSs4aU5OMDM2Z1B2Mm5BY1ZERTdHeFVKUFZTM3FVVnRvNVY1L1FLUjVTU3Z4K2Y2ZXU4Zko0UE9kTm16WU5sOHUxZGQyNmRmRU9wbmZJTklrRGtlcVNPcHJzMnh4RlJVVzRYSzdUUjlpa2xHelpzcVdOcUtYYkpKVTZkc2dwYWp0MjdPZ3hkT2pRSDJxYTlsMzFpVCtOeU93T0phTVNJdWZMU1RoS25neUlXVDJNdWNXUVhaZ1FzaUdUb1BTQ3hNK2NRTHFDc0FHNDNlNng1NTkvdmlndUx0Nyt0Ny85VFhkbVJqc1NONmNBT3V2WlVnWE8vbHBjWEh4U1J4NmQwQmhiUjcyZlR2ZXpvNUlPS2FVb0x5OHY2TisvLzROQ2lMdlZKLzAwSmJkWDRsQU5jcDhKbjg5MysyMjMzYVo1dmQ0bHQ5OStleTIweHM0Y1ZwbGhHSWJ0YWJWSktEamphODQ0bTh2bHd0NWFQM3o0OEZOZjJPekp0eDJOSGpwTThXM1NVbE9pcGxBY1YzRzc3YWFiYmlJYWpUNDNaODZjQnFkbGxrN2NjR1JMT3hLMlZIRTdXWk40VDRncldsNWVudHdtZGZEZ3dRN0hlYWNyNmJCamFwYjdPVWRkam9yT1NsZHhSVlBjMGpFalI0NlVRb2gvdi9ubW00WmxqYlZ6UzFQRXJsMjh6WGtPbk82cHkrVWlQei8vMUxQWTl1L2ZmOVF4dFhSMWFrOC8vYlJuNU1pUkQycWFkby82NkNnVXg1K01qSXpiSDNqZ2dmaW1UWnVlWGIxNk5la3NOOU0wRFdndEJiSEtSZVRoM0ZHWHk0WFZwblhDdDE5OXJzSldYVjJkWEpHWHVuamxjREUxWjUzYTdObXpIOVEwN2Z2cThsTW9Qajh5TXpPL3RXTEZpbGgyZHZadmJVRnppSnZFV3RKcythYkptSnNRUWpyZFVPZGh1Nk8ydUozSXZhV2ZtN0RaRzlxZDdtZEg0N3hUWTJvcHhiY1Bxc3RPb2ZqOHljcksrazRnRUlqazV1YitrYlpaVXBsYXhHdC9YeVNRSGNYWmJLdk5GcmNUMVRUL3VRaGJPQnh1STJyMjRwWG01dWJEdXAvV0tPOWttNVRWVWFCUUtFNFFPVGs1MzJsc2JBejE2TkZqcFdXMVNWSmliSmE0T1MwMklZU1F0cWc1QmM2MjJHeGhPK2VjYzhqTXpPeDZ3aWFsWk1lT0hlMTJGS1JhYXRZMktlY1NZK3lGSzlGb2RJYlYrNms2Q2hTS0UwdEc5KzdkNTFSWFZ3ZUxpNHYvTGhQOVYyMCszL1pYZTJDbFphMjFzZHljRnB2VEpmWDVmSXdjT2ZKenIzRTc3c0xtRkxYVTdLZTk5N09qeWJlbWFZcHdPSHlaTmFWRE5iUXJGQ2VIb3FLaW9ydjI3dDNyUCtPTU0vNlpZcm5aOFRhNzlBT0hvQWxOMDJSSGNUWmIyREl5TWo3M01wRGpLbXdWRlJYczJiT0hxcXFxcEtXVzZuNDZ1Z3BJS2V2UUFvSEFGNng1YW1yMGtFSnhFaEZDRE9yZnYvL3RtemR2YmhvOWV2VEhsdVdXbk5zbWhHaGp0WkdTSVUyTnM3bmRidHh1TjE2dkY2L1hTMFpHQmdNSER1ejh3bFpkWFowVXRlcnE2cVNvMmYyZkR2ZXpUYXVVYzV4M1ptYm1BNmdoa1FwRnAwRFR0QytPR0RGaTlzcVZLeCtkTm0xYWxVUGNwR04yRzZacG1uYW1OSjNWWnNmYW5CbFNlMEx2NTVVcFBTN0NGZ2dFa3BNNnFxdXIyelMxTzJOcTZjbzZwSlRpbGx0dWNWazdDdFE0YjRXaUUrRnl1UzYvNG9vcmFvY09IZnJZOXUzYnpSUnhzek9uMHQ0cWI0dWJNNWxnVzJ6MlY2L1htM1JKczdLeVBwYzVicDlaMktTVTdWcWxuSlphdXFiMjFBem80c1dMZjZBV3J5Z1VuUk92MTN2anUrKytXNU9ibS90N1M5RE1GSEdUcVpsU1RkUGFXRzdwU2o5OFBoK1ptWm1NR2pYcXVDY1RQck93N2R5NWszMzc5aVhMT281bVRWNUtCdlFicWxaTm9lamM1T1RrM0ZOZFhYMm91TGo0NzRDWnhpMXRFM096eWo2UzRuYTRXRnRXVmhaRGhnenBQTUpXV1ZuWnJsYXRnMVlwMG1WQWc4SGdCR3Vac2RyN3FWQjBidHhGUlVWM2JOMjY5ZEN3WWNQZXQ2d3oyMHBybHltTngrT3lvNExkZExHMjdPeHNTa3FPMzBiMlR5MG9UVTFOYVd2Vk9oQTFrYktsWFR0dzRFQWZuODkzSDJvQWpVTFJKUkJDbEEwZVBQaVdGMTk4OGNBTk45eHd3T0dTSmkyNGxQcTJwRXVhVHRpYzRwYVZsVVZPVHM1eEd5RGcvalQ3R3czVFpNKy90MUs1ZXcvVis2dG9PRlJEYzMwOWdhWm1RdjRBa1dDSVNDaEVOQkpCajhTRXJzZUk2M0ZoR3FhUU1pRnNQVDNoZWFKcDM2WHFjbEdjbkUrcEJpNFBhSjdFd0VwdnRqb25SNEhMNWJwNDJyUnBGY0JUdE1iYlROSWtFMUxGelpsSWNMcWt6a1RDeUpFamo4djAzVTlsc1pYdi9ZVEtxb05VMTlUUjBOQklzOTlQUzB1UVVDaE1PQkloRW8wU2pjWFFZN3JRNDNIaWNTTXhObGhLSVNWYXJIcjM3VUtJdTlSbG9qaHBTQlBpVVNBS3NSWUlOVUpHTG1UazJkNlVvZ015TWpKdXJxK3ZyeWdvS1BncllIU1VUQkJDU0R2ZWxtcTVPZDFScDdEbDVPUXdlUERnRXk5c0I2dHIyRmRaeGFIcVd1b2JHbWxxOWhNSXRCQU1oUWlGSTBRaVVhTFJHSHBNSnlGcWNSSXhOU21rbENKWXRlMUNsOHQxbjdvOEZKMUw2QXdJTjRFZWhweWVDWXRPMFNINStmbDNiTjI2dGNLS3Q1a3BoNVJTeW9TMkNlTHhlREk3R28xRzZVamNNak16aytVZnZYdjNQbkhDRmdxRitXUi9KUWNQMVZCYlgwOWpVek1vTWpJQkFBQWdBRWxFUVZUK1FBc3RTVkdMRUkzRmlPa3g5SGhjNlBFNGh0RTZnbWo3aHYvdDd2UDU1Z0o5MUtXaDZKVEVvK0EvbUJBM2wrZHpmN3AxNjlaMW1sLzlvb3N1T3BhNzl3WnVBdmFTaUxHMUVUWkFXaVZkcG1FWXhPTnhHWXZGUkRRYWxmYTJxNWFXbHVTMnErcnFhcXFxcXFpb3FHRG56cDJVbFpXUmtmSHBXOFdQU2RqMjd0dFAxY0ZxYXV0c1VRdlFFblJZYXJFWXNaaU9yc2VGcnNjeERCTkRXaTRvaUxJekJueGZ3R1QxNlZGMGFzdzRoT29UdXhWT0FHVm5mcmEreWZKZDJ3SHc5ZjNpcDM2TWFOVzdBRlNkK2VTeC9OZ2xZVE8yYlZENTkzOUxZcXU4Z1oxSUFDa1FVa2dwTUUxSlhFTFVnR0JjYUNJbU5XSm9Jb0pMaEhDSklHNlhIN2VyQ1krbkRvLzNFQWNYWlhIR0dXZHc1bTBmZmFyZjU2anQ3ZjFWQjZpc09raE5iUjMxalUwMCt3TUVXb0tFd21FaTRVUmNMUmFMRWROMWREMU8zREF3REZOSU14RlhpeHpjT1UzVHRIbnFVNlBvTXBiYjBhNzZPNDNKMUx6ZmVuZmdqeWVRbU1UakE3eVd3ZVNTU0pjRVRTS0ZpUlFHa2pnbU9nWXg0a1JsbklqVUNjc29RVE5Ld0F6VGFBU3BpL3VwcmEybHBxYm1VNyt1b3hLMlFFc0wreXNQY0tpbWx2cjZScHFiL1FSYVdoTEpBcWVvV2RaYXNsN055b0JXNzNpdm44ZmovcDY2REJSZGluQnpJc21nT0x4UDZ1ays2OW1pV2IwN0VEZE5nbVk2eEUyWHBraUtHem9ScVJPU1VWck1DSDRqVEdNOG1IUlBXNHhQdDRENXFGelJUL1pWY2FDNmhycjZCaHFiRTNHMVlEQk15SkVCalNXU0JiYW9ZWm9TS2FXUVNLMGd2OGQzZ1Mrb1MrQVU4dGFhWXdTZTIwSGtYOVVZVmFFdThacGRmYlBKT0s4bnVkOGNndGJOZXhRL0lSTjdTMzI1SiswMWYvTFhKM21HYS9uNTFiMVA5dG5EOS9PYktMaWlqc1l4THhPT3RkNGlFS012elJ2eGRXcjV0ZTJTU2pDRU01a0Ewa1JLQXhNQmFOSVFMaUdrUzJxNGhZWmJ1dkNZVWJ6Q2pjOXdvelUzazVtWlNhVWVZYWpyMkVQeVI3VFk5bGNkcE9yZ0lXcnI2bW13a2dXSkRLaXpzVjF2NjRKYUdkQ0VDN3BydWlydE9QWHdQL0V4d1JWN3U0eW9BUmhWUVlJcjl1Si80dU9qL3lFOXJON3NvOENuZVc1K2IrQlBKamdzTmkvZ0Fkd1NxUUdhQkdGQ1dwYzBLblhDVXJkYzBnaCt2NSttcGlZTzZVMGMwQnVQcjhVV0RJYW9QSENRNnRvNkdocWFrdlZxd1pBdGFqR2lscWpGNDNFUk42d3NxT1dDVm42OHZwZkg0LzZPZXR0UFBTTC9xdW15cnoyNnFmN283eHlQZHNuZnNmb2ZqL0RTM21JSzNINWFHZ080aDAxa2NHQUxlNXI4TkllTEdmK05temkzNlBobWZYdDV1dDBFZkp6T2FwTklDVUthU0ZNQUJsTEdwU2swWVVnM2NhSm91SEVSbGk2OHBoc1JETkxjM0V5dEhpVkh5NkM3SzRzc3pYZDhMTFpFdlZwTnNsN05GclZFRVc0c1VZU2JHQmhwdWFBbXBqUnRGMVFVRnhYZEM0eFJNbkJxSVFNNlprTzB5NzUrb3phTUdkQ1A4cGZ0dWpHMmVPR1grT3JzNzNMcnR5OG5ZK05hNnMrOWd4dnVlSkNaWS8yOHZhN2l1RCtmUUl3Q3BsdFdtdy93U2l2V1ptbU5JR0cxWVZ0dGNXbUlHQVl4YVJDVk9oRVpJeVNqaEVJaFdscGFhSXdIcVkzN3FZbzFIQjlYOUZCMUxRY09WVk5iMTVBbzdXaHBvU1VZSWh3SkU3V0tjR05KYTgyd3V3dnNMS2dJSGRneFdkT0VzdFpPUVVTdXAydi9Bb1pFNitxL3d4SHhrSjJibTFnYWtwbFBkazR4L2ZzbGZ1ZWMzRXppa2MvTnhmN21ILy80eDNQVHVLUjJsbFNrWmtuakdPakVpVWtyVTJycVJDSVJRcUVRVFVhSStuaUFRM296TmJyL3N3bWJIbzliTG1nOURWWnB4eWZ2ck9LdmY5L0EzdVlva1ZnMFVZU3I2OFNqQWRIVTdDZXN0M1lYekpweGpjdm45ZDZiN3JFMy8vUjZTcys3bHhjUHBOeFE5ekl6enB2R1ErK2xjUjMrN3llTXZXa1o1VXBUVGlPeXlQajFMZlRaK1RXeUN4MFg3SVR6eUY5OUM3MTMzazN2ZDY2bnh6Zjd0N21JajNTNzR2T25UNTgrTXdlSTdoa09xODFqaGIwMGFjWGFaRUxZRXVMV0prc2FKMEpDMk1MaGNLSUVKQjZpTGg3Z29ONUlYQnFmWHRpU3BSME5qVFQ1L2JRRWcwUjBBMHcvRmVYVmhHSzZuUVVsYmlSTWRkbGFpS3M5OS9qUDd3YSszT0d6eGo1azBhOWVwL2FvWG1JTGExWjlRTW5VU3loVDE4enBZeFZPbWtDM1MxTWEwMHZIa1AvMENGd2IvMG45VlgrazdwZDF1Tysrbk81Znl6cTYyeFVuQkUzVEpxNCs0d2RUSFZhYnAxWGNwSXVrdUxXNnBEcEc0cEJ4WWxJbkdvMFNpVVFJR2hIOFJvakdlSXZsa2paK09tRnI5Z2M0Y0tnNlVkclIxSnpvQXcyR2lNUk5wQURaY3BDcXhvamRCeXJpaGt5NDExSUtwQlFONVI4TWRybGNjdzc3ckRuWjhNWi9zdWlmTFVkK2hYVnY4OUo3ZzVoNVVTOTF4Wnd1NVBZbjc0RUJHSzlWWWpwQ2VlNUpaK0twM1Vuekk5dUpiVzlFLys4M2Fkbmd3amVwNzFIZHJqaHhkSE5sM2ZUSDR0djdPY1dOdHJWdHdsbmI1clRhWXNTSnhXSkVvMUZDTWthTEdhSFpDRkVmYjZFNjNrVEFDQis3c0ZVZFNIUVhORFEyT1ZxbXdzVGlKcmk3a1o4aENkZlhFZFRqMXVESTVLUVNJWkZhWHA3NDF1WmxQeW1aTm5reXBXTW1NL2FhZVN6Nlo5dkFuM2ZnVmR3ekdWNzY2WE5zUGtJTXV2YU52N1A1QzVjenVmQnc0cmVQelZ2MjRWZlhVeWNUcUI1NEovVEY3U3dERzNzUlJlL2RRTjdZamtiVHVQRGNQWUhNdWswMC8zZmJVcEw0MHYvaTBPVnZFWXVsL0lqUGRWUzNkMFVHWEQzblU5V3dGVjgyajFzdnN3YzNuc21WYysvbUhHdFBzZnVjTy9udU44NDV4a2MwaVA3Z2VRNk1hRnZEZGhqNm5wOHorR3BTRXdsQ3VLeERReE5KcTgxSUpCS0lXNGtFWGRlSnhXS0VaWXlRR1NWZ1JHaUtCNms3b3kvaDMxeEV6OWR2U2g1Ri8zRm11M2tzYmNvOXFtdnJPRlJUUzUwOXRjTnFtUXBIb3NUaUVreEJabEUzWEFlYThEZTdSSmEzdFE4VWlRZ2YySDVKM2FyNWQ4eDZOc1lOUDF2Q3M0Tmg2L0tmTStmK3h6aHIxVUttSmkvd2ZDWi83OXRzdU9iblBQVGNWYng2ZDBlekpnL3h5aXY3R0Q5ckxIbjJ0dzY4ellLZkxtTnpyRC9YM1AxdEpnZWVZODdTRnNwNnQ3RDVxVkU4K3RSTWh2bVVwcHh3dklWay9lSmlza3ZqeEZmK2srWU5SWFQ3eVptd0o0cnJnYkZFdnZNeUxkc05xTnBINU5VbytwNE9ZaVZEeDlKOUdvUnUvUUM5YUZKS0NNTkFPZ1RRTldFY09lT2lSTzdiZDNTM255WWMyRmZCQzgvK3h4SHZOK21Lci9IRjh5ODZxc2YwWFRTUWd1ZW1BaEJhdVkybUg2dzk4czlvbnB2ZTZQZkFPeGZ0LytrbUlHNGRpWDVTcEFuQ05FR0F4QUJwSUlXT0lWM0VFWmF3UldTY2tCbkRKeUprR2w2YW0zYlF3QmVvOTRTVEc2NWlkYU9RN09wWTJBNGNUR1JCbTVxYUNiUWtDbkhEWWFzSTE1QklhYURMREhKOVFqUkd3a1EwajlCTUtVaThPTTNyOWQ2VmQ5NjNXYms4bjdJK09RQk1uSEU1dzVZdDQ0TUttRHJDOFdTRmx6RC83cGVaOUt2SGVQNmFwN2tsWFNINDN0ZDU2ZUFvNXAyZmsvelcrcVhMNFBiSFdkbDdLNHNldUlzWnVkTjU5cm1yS0FQVy8vUmVYdG81azJFamxNNmM4TGpLdFBQSnFuMlQydnRpWlB6aU1vcXU5K1AvMW44VDNnUGlhMWRSY0VVUFdyYlhRZFVlQWovYTA4R2o5Q0Q3SnlNUXIvNmR3SWNHVE9yQW9udmdlZ3BuNUNOOGNlSXIvMEh6MzBMSGNQdXBUNS8rQTduL2tTZU82Mk5HMzZqZ3dPQ25qdm5uU24wOXJ3SCtEZWlBTHFXTUM3dk9UYUtSNkVyQUJPS1lVcE5DeElVaFJUeWVzTnBrbkFodVFtYkNKVzJvckdISGRTOFF6eWhtZUdhL0k3dWkrNnRhWGRCbWY4SUZUZlNCSmtZUjZZWUVhUkNQeDhIbnd5VWtoaDdIcXZMUjd2L2JydXVGRUZmNkNuT28vY2RqVEx2eVNvYWVONW5TeS82RERiRVk2VHpPa3VuZjVwNkJ1M25pcDMrbk1zM3RXMWY5SGY5RlZ6SGVZWUg1dkZDNVl4OWJkKzZtUE9vbEw3Q1B5Z0JBQy81QTRuYkZpVWY2NDRpaUhuaEhGZVByQzJiTWg2Y3c4V1pvZVM1azRNalpMTmYxRThqdCt3bitYKzV6V0Y3dFhTTDl1YjlSZSsxZmFQamhMdVNrU2ZTNHFjY3gzSzQ0a2JpRWR0bW1nVCs1d09HU2VscHIyNUlkQ1poT2w1VEU5RjFkMTVOZENSRVpTM1FsR0dHYWpDQjFldUN3SFFsdWdKaXVjNmk2cHRVRkRiWk93N1hyMWVKbVF0aU1lRnpFRFlISEpZUVJONFZoQ20xb1hxRkxjN252QkNoZjloQ3pYdXJGd2wvOW5xbEQ4dkVGL3M2TXljOTE4UFNEdU9XQnEzaHAxbk1zZW1ONnFxeXg3Qjh4SnY5c0ZFN1BjdlRkUCtESzU1Ynh1NHBCM1B5ckpZeXVmNW01Mzc2THhiUVFIVGlMSjRlb2krbWtDTnZmM3NCZmREN1pNK0xFbm5xVjVtMDl5UHVQYVJUbHVZQnFBbmNkSVp2bExTYjdtd1BRaXFESFAwdXR2Mkp1Qk5EdC8rNGthK2wvVWZ1ck9pdW0ya2k4RHVMYjZ6RFA2a3ZCdEtHNFgvZ1g4V1RNOVFpM0swNG9QVDNkcmgyaDlmN1hGdk9nYmxsdVRwZFVncEFTYVZyaUp1UFNGQ0llbHk2WEN4MHpVUUlpZGNKbWpCWWpRck1XcHNGb29VWnZwc2lkaDBlNDBndmJBYXNYdExHcHlXcHdUOHhZaTlvTjdycE8zQUNrYVk4andoUXVOQkVYcHBUQ2s5L3ZtOEE0YUdIelAzZVROK2FiVEIrU24zaUdRQXVIeXcvNFJzeGkvcFd2Yy9OVHk4aU5lWk1sSGRIM1htYU43eEtXcHJxVnZ2NU12ZnNIVEUyNnRGZng1QXRYRVkyQ1Q4WFdUaUlob2krc0pmcUMvZjhBL2h2M2dkY0ZzYU9vUFlyVjBUSjdPU0dueFQzcWZBcC9ra1h3MXJXRTkvanhQbkE5M1V1MzBURDd3NlJJeVNpSm5Cc3V2QTljZTVqYkZTY3RUSUg0NHJJQmQwOGVzZmVCVlVtWEZHeVgxR3E1UWlSTXAwVDVoNVlZVG9rdVRYUmNSTkVKeXhnKzAwT0xFYkVLZDFzNHBEZlJ6MXZRL2puRGtRaUhhbHBuckxVRWc0bkJrZEZXYTAzWGRlSlNJakdGRVU4dU9oWkNDSEZOV2UrOEZpRyttWGk0SE1vRzVsUDNyMlU4LzgvZGJIM3Y3engwLzFJK2lFRzBRM1hMWWVMZDMrWlNnZ1JhcjNMV3ZiU1JvaXN2WjloUm5qd2xhcDJVVkZIclcwcnV6OC9EVjlqZXhUVDMxQkhmN2pqcW9oQ05KcjVmRjBQZldJY1lONGE4YjViaUx1MkJaOUpZOHE3SUl2N1dua1QxK21GdlY1eE1lcml6cjcwNzU4dTVwRFRJSjF4UnFhVjJKQmlHSVF6RHdGa0NrbWlVanhFMEl3U3M4VWExdXArSTJiNDlUbXRYczVaY25kY3Fhcm9leDdDR2o1aW1hUzFtUVVpRWVHenUyTmxlV3ZWbjlPMC81S0VSaDNqaWU3Y3g3WUVWK0MrYnhjemhPVVRyRDFPelZuZ0o4KzhlMmZxSE5mQTJMLzJ6RjlkYzFsOWRFYWNhZmZ1VE9ha1VYOTlqTDhHUWEvK1AraC91UVh4dEVrVi8vd2FGUHk1RnZycVd4bDlXSDlYdGlwT0hRQXk5cytlbGw5SzJhTGROSDZsZHRHc21oQTNEU0pSLzZOTHVKVTJJVzhoMlNZMFE5VVlMMVhwVCsrZjc1ejllWWxkNVJic0ZMZjRXeXlWdDNUd2xvdEhFTG9PNFlRaHBTbTNyaHYvTkgxeDJ4anR3bkpzQ0Ryek44Ly9NWWVyMFVSU3BhNkpUY21EY3kxMzY5ZmZaY05VeG1Cc0RqdXB1aG1GUVdWbkpnQUVEanZxaHUvRE9ndzU1NDQwMzB2OWhrbkxQSC83d2h6dWVmLzc1T2lBSWhJQ3dFQ0ptdWFpR0VNSzB0bGxKYTlHTHRMZFkyY3RlY25KeTZOYXRHL241K1JRWEYxTlNVc0tnUVlQYTdFaHcxOVczcjFtelZ1Y2xyRFZyMDFROGJtQlkxcHFVQ1hVdEd6amdsdU11YWdCOUx1Q1c2VW84RktjK0V5ZE83RFN2cFhVdDZPZEc2YWhSb3lZOS8venpLKzFZbXhCQ3h5ci9FRUtZUW9qa21qN24zbEY3VzN4T1RnNTVlWG5rNStkVFZGUkU3OTY5NmQrL1A0TUdEYUtzckZXS05Ic3BTekRvcUZtemR4ZllvbWI1dTZacEN0TnFuZHIwZjZ0eVhTN3RGblZwS2hTS282VmJ0MjdYekowN056ZnBqa3Jwc2R6UnBFdWFXTmRwQ211N2xiQkxQeExyQnhLdFZ2YW1LNy9mVDJOakl6VTFOWVJDcmZXS21qMW5MUlFPdDQ3NXR1SnF1cDRVdG5iVzJvaGhRMllCZzlSYmRYcmk2cFYxZXJ4MnphWGU3T09JRUtMc3Z2dnV1NWoyU1FTWGxGSkxUTjZXd2pSTkxHRkwxclRaNG1ZM3lOc3oyK3dWZm9jT0hXcDkyeElkQmdrWE5HS04rVTY0b0RweG82MjFKaTFyN2NhdlgrMXl1VnczcWJmcDlNVTNwcURydnZZdkZCNkRDcXBha2VOTmZuNytWMHRMUzcxcHJEYk50dG9zY1d0bnRkbmlabzgxQ2dhREJBSUJHaHNicWEydEpSSkpMSC9Sbk5hYU13dHFENDgwREFQVE1LM2xMQWxyYmNtVGkyNEVWT1BTYVV6ZVBXZVRkWFYvWEgyenU0NmwxamVMN09sbmtEZG4yTkgva0NkVHZkbkgzMm83KysyMzM1NXdORmJiNFN3M3A5WFczTnpjeG1wekovWVhSTlBHMWhLMUpDYUdaYTFaRnB2bWRydHZWRy9QNlkzV3pVdjMrMGVkNHA5QURidzU2czMrSENndUxyNENlTk1TdHBpVTBpMkVjSk5JSkdneWdiREtQcVJoR0NJZWo4dlVXRnNrRW1sanRkWFYxVkZTVW9MYkt1V3dkNEltbFRGdTFaRVlwb0VwSlZKS0pJalF3UjFUZ0F2VVc2TTQ1Y25zQmtKOC9zOWpHbkJvSzdUVW5EWmJzVFE0YitlcmkwY052dUtPalpiRjVrRktIWUZMU2d3U2hoU21OREdrZ1NGMTRtYVV1QkVtSGcraXh3UEVZazFFb2cyRUl6VzBoQS9RSFB5RStwYmRIUEwvT3lGc3lXTGN1RzJ0R1JpMkcycEtwSmxZemdKU2VEMmVHZXFLVjV6eXVIM2d5L3Y4bnlmVUNKV2JRUStkZHFkNFlOL2lTY0FIU2FzTlBFSVNSMGdYQ0ZNaWhaUmdTaWtOdzhRd1RPS0dpVzRZNkxwQlRJOFQxWFhDa1NqQmNKUkFNRXhUb0lXNnhtYTBhQ1RoZ3VweHZXMFcxSEpEcmFRQlVpS2E5bTRaSVlTNFZsMzFpbFBibkhCQlRzOFQ4MXd0TmFlbHFBRjQzTzZyL3ZlM0Mvc2xMYlpFbkMxbE53S1lVZ29qRVdzVGNTTVIrOWVOT0hvOFRpeW1FNDFaNGhZSzB4d0kwZEFVUUhPV2R5UUxjVzBYMURRVGJtakNXdE95czdPdVUxZTk0cFMzMVBKNkorSnJKNExtQTZmMTZSNDdZc2lGcEd5elFsb1pVb2ttcFJTbWxKaW14TEFUQ2JhNHhRMWk4VGpSbUU0a0dpTVlpUklJaG1nTUJOR1NUZTVPVVV0YWEzYkNBTEhxVDcvTDBEUk5DWnZpMUVTNHdKc051YjBTL3o1Um5PYWI1bk95TXE2WU9XVkNobTIxU1Z2Y0VyUGFCSW1aUmlKaHRVa013eFFKbDlTYS9xSEhpZWx4SXBiVjFoS080QThFMGV3c3FHNjVvSGJTSUdtdFdTVWVreTY2NEZxZ24vb0VLRTROSWRNUzFwazNCN0lMb1hzSmJmYjhuU2k2OEVMbTQwVEpvM052SFpmR0hYVkowS1MwaFkyazFSWTNUT0p4RTkyMjJ2UldxeTBVamhJSWhYSHJ1SW5qeHNCRlhBb01LWVFoQllZbGFKWnFhdTdDMHVrbkpFT2tVQ2hPSzNvV2RMOEVlTnRodGJtRnhJV1FXdUl2a0pSU0lnd3BNVXdwRGRNUWNjT1F0dVdteDFPc3RsQUVyZFVOalNkSGhTUmFwNlI5aU1iR3h1RkNpTXZVVzZCUWREMmliLzZHb1hlOHpOWk8rdnJjTHRjbGE1Y3NTRTBpdUN5ckxUbk9TSnJTS3RnMUxjdXROZFptSnhJU1Zsc0VkN0p1elJJMk05a1RtaEExUU9UazVIeE5YUjRLeFFtazhqV3V1UE1WdHJWKy9NbnRPWkRKMDZjeGYwb0poeTFFYWR6RmkvL3JaL3owTVNkd3lmZ3VIcnJ4S1phbGprYnpuTXZpbGJPWWZJU2YvdUx3d2VPQVQxS3NOaDJCaGlSUitpR1FwbWtsRXF6U0R6dDgxamJXRm1zVnR0YWtnVFhGd3pSdE4xUm9tbmExdXRJVWloT01aeEFMZmp1SEczb0E2RlJ1V3MyY1I1OWlidmFQZVBiQ3d6VHlOMjdqZDh1cXlMdDhER1VudEhIQ3phVVBQc2F6NDQvOUozT3pNeWNCLzAzYk9Kc2JaTnlxa2hhbUZXc3pURk1haVQ1U21ZaTNHZWhHYTZ3dEhJMmhwYnFnOW9IVmlCb01CaThCaHFtclRLRTRxU3BIeVpncDNEeEVaL09XR2lyLzUxZHQzY3ZxTjVnMjdSZjg4citlWWV3RGI3QkgzOFhjMlE4emQ1TjF1MTdOUzQvL2lnblQ1akQwK29YTVdWdWQzRVVTcmR6RVEvYy96TWhwMzJYb2piL2c5aFc3cUxWdVcvLzRnNHo5MForWmUvOHZtSFRqZll5ODR4bWUzMzZNZFhleFNwNlo4MTJ1V0ZxWmVNN0dUZHgrL1lQYy9xYTE0cno2SXhZKzhNalFRZjM2RGJVRXJkVWRsYmhNS1RYRGxDSnVtQ0pxbUJpbXhOUWpIS3p6VXgrenl6L0M3UDd3Mzd5NVA4VHVEVytoMmFLV0xyNEdDSi9QZDVXNnFCU0trNDFPN2ZaM1dMYkR3N0FoK1pSY09JN1JOUit4eWxyUld2ditSMnd0T1pldlhYc25HMzk2RWFXZU0zbDB5Y004T3NiNjhab3Fhb2QvZzFkWC9vcTFzNHRaditSbDFyUUFzUW9XTGZ3TFc0ZmN3TnFWai9IaHp5YmhXNzJFT2F2cms4OWNWeG5tMG52dlkrMGZGckowVEQyTFhuZy9LWHhIaGJlRVcrNjlDUDcrWjE2czlMUHVOeXZaUFB3cUZsNllCN0VLRnZ6b1JUWVB1WTdYLy9yNGVjNDRtN1F5bzRDbUNTRmNBakJOSW9iRU1FRkNNdWFXR0swR3BtSFM4K3h6RTY2b3cvM0VibmEzRGswSWNhVzZxQlNLazZGbHU1bi8vK1l3UHhsajY4dkU2Yk9aUHlrUE9JZHJocXhrOFp1VnpDdk5aOTM2S3NvdXZLN2ptRnJmYzdsalVqRjVRTjZZY3loNytnMXFneERkOFRZcmdpTjRkdWFaaVRIOEpXT1lQLzBkSnF4K24vSXBsd0pRT09KTFRDNU9XSTJqUjVUQSttb3FJYzNZL2ppdlBUS0hVc2QzTHJ6bjV5eWRsSVd2ZEFxUFhyNk5HUXVmSkM5WXdyd254MUVFUkxlOHdZcmdDSjZjZVNiOXZGd0NMRTIxMm9SSWRDSWdoS21CUUVyTWhQVWxUTU9VaVRpYmhpSEJ0RnhTZDZxMVpydWhnQWlIdzFPQXZ1b0tVeWhPZG93dGxUd21mdmxNRnJ5OGpmTHArYnkySTU4cmJ5cytXcTgyNFlMcUVHME1FQzAraXhMSDJMbWludm40R3FzN3RNcDhueXJHNW1IWVZ5OWk5TXN2VXY3bDY1aHUvVTdSUmorQnBncHV2LzU5Z0Q0REJ2UWY4Y2tuKzk1ckcyZERCd1FTSVlRUW1rQ2ExaFJ6MHpTdGpnUXdwVXdLbTVZcWFwYWxCaUM4WHU4VWRYVXBGSjJUb3ZGakdWM3pQc3Yrdm9YTkplT1lXbkxzaitIcmtZbXZ1cHJLV092M2Ftc2FpUFlvUHM2TGxFS3NYN2FhelNVRDhMMjFtaGV0eFdHK25EeHllMzZKNVNzZlkvdkt4OWkrOGorK21HcXhTZG5haVdCS2lTR2xNR1dxSzJvbUZwU2FpZElQelJJMGU2aWJzTXM4TERkVUNadEMwVm5KT1l0cmhqZnc0cktQS0prd2dxU3VlVFB4RWFLeTZjaEJmdCtJaTVqdWZaOUZ5eXFvQmFMVm0xaXdvb3JSVTg0OXJxVWkwUzJ2TVBldGZPWTlPSWRIdit4bjBlTnZVd240aG85bE1odFp0S0lDUDVDaE4xNlVZcTBsVi9SSnBHWmFvbWFDRUVpaUVWM29ScHh3d0U5ZEhLU1pxR3R6cHlZTmJEYzBGQXBkck54UWhhSXprOFhFU1lQd2JmQno1WGpIcVBhU2M3ajUzSGQ0Nk00ZnMrM0JoVHg2dUlmd0RtVGVqNy9PZ2w4dlpkSTBQOUhzZkNaK2RUWlBUdmswbzkvYng5amdMQmE5TUlrUGZyMkJvaG4zY1VPeEIyWk1ZL0k5THpCMzlWa3NuektNaFQrZXhvSmZMMlhDTWo5UmIxNmZ5MlorZThnL2x2M25oeVQ3Um5GSm1SZ1pqaEJDQXlHbGtGNlhJS3BIT1ZnZncrVnk0OU1rcGxYK0lYcjI3RWswR2hXeFdJeDRQQzVNMDlTa2xDNWQxMyttYWRwMzFNV2pVQndkbjJhdktCK3YrbXlXMEtZL01tbDVDY3QvZVJFbHA4aDVESVlpUzNMR1h2c2kwQUlFZ0tDQU1JS29RT2hDWUdoQ21HNlhKcjBlRno2dlIyYjZ2R1Q2ZkdSbCtzak96RUJMellhU3FGL1RORTJicEM1VmhhTHpFbTJzNFBrVjJ5ajU4cm1uaktnQlpHWDZ6a3ZuaW1MTmFjTnVzNUpTSkRvUlRHdUZnWkhzUk5CU2luS1JVb3FHaG9aaHFHVXRDa1huWmMvTFhISHJNN3pVNHlvV1RzazdwWDQxSWNUWnE1LzVVZThPeEUxSWlVQ0NLYTFNcUxPSDFEcmNxUTN2SkhwREwxSlhqa0xSaVNtOWlyVXJUOTNhK1RGbm56a00yRzhMbXdTWGtHZ0kyMktUUW9LVWR1K29kZGhiclpKWlVWcEhGQW1YeTNXaHVuSVVDc1hKb250ZXppakxTa3RPK2tnY3NsV3JwTjAvS3BPVkhZWjFhS2tXMi9lKzl6MlhFR0tpT3JVS2hlSms0WEc3emh0NVpyK1VodmhrbksxMWxCR1dLeXJidXFOYWlodkt3dzgvZkFIUVRaMWFoVUp4RXVuMi9DUGZMWFZhYlRMUkZKL1lGaS9CbXE2THRFUXRPZExJYWJGWkNKL1BkNTQ2cHdxRjRtUlRXdEpyU0h0WEZLM1ZIVTBZWmFaMUdMSTFFYW81eXp4SXpGNDdYNTFTaFVKeHNzbkp6anpIWWJHMUtmdXc5VXBhV1ZKcDdUODJaR0tza1daYmExSktjZTIxMTdxRUVNcGlVeWdVSngyM3kvV0ZBYjN5WFNrV204c1NORTFLQkZoeHRqYnVhR3VNVFFCaXlaSWxYd1J5MUNsVktCU2R3V2hiOXVoOS9aMmlKcTE5b3poVzh5WGliTTZhTm9mRkJwQ1JrZkVGZFM0VkNrVm40Y3dCZmRza0VHZ2JaeU0xemlhbGlTbk5WdVVqVWI4MlJwMUtoVUxSV2VpV216V0Vkc21EdG5FMkhIRTIwMHkwV2JrZFk0cUVFT0pjZFNvVkNrVm53ZU4yRDZkOWpDM1pMNHF6bmkzcGpyWmFiT3phdGFzbk1GaWRTb1ZDMFZrUVFnejY1ZmRtNVhRa2JpUlVMVm5QWnJ1bGRveE45T25UUnpXOUt4U0tUc2VsNTUvYnh4SXlhK0FrR2hKaFQ5V1ZXSlVkVmhlQ2xJN3Nnc2ZqVWNLbVVDZzZIWDJMQy9vN3JMUjJ0V3hZSTR4YXV4QVN3b2FVVXJoY3JyUFZLVlFvRkoyTm5Lek1NeHlpMWtiWXJEaGJ3aU9WQ01zVkZacmRJeXFFVU1LbVVDZzZIUjZQZTFDS3FMa2NGaHV0NHBaSUlOaXVLTllkemxLblVLRlFkRFkwSVlZNHJMVDJKUjlwRWdnYUlHcHFhZ1p6dUhXQkNvVkNjU1NxTnpGM3pvTU1uWG9mYzlicngvT1JmU3NmdjcvUUtXalNtc2RHc3VURFRpQTRMTGFjbkp4QjZsMVJLRTVYL0x4NC95OVlWQWxVdjhHMDc3OUI1VEUvaHM2YUYvN0N1cDVYc2ZhbFgvRGtlRS9ibTdlL3hJUWJsN0ltOXVsZTRkRFNma1drTGRLMU94QVNncWJyQnVHNFpiRzUzZTR5OWVZcUZLY3BMYnQ0czNFZ0Y1WkE3Wlp0UkljUCtoVExZY0xVTnVxVWpCalVacXQ4a3RLTGVITGVGTVo3UDkxTExPeVJWNXpHSFJWdER5a00weFM2QVc0cHBkQTByVlM5dXdyRjZjWlc1dDc2SXV1Q1llcGlIamJmK0JIUllJQ290NUlKTmRleGR0NDViZU5Uc1VwZWZQclBMRjVmUlMyWkREdDNDZ3Z2dW9CaE9aVTg4LzFuZUdKSG5OaU9SWXhkUFpabkYxL0RhT2ZQN2xqTDdZL29QUHFuYnpEK3pkOHdjaG5jVUJwbTNZNXFhbU9aVEx6cE5oNmRWSXl2OFcxbTNQb09lUmRtVXJtOWdkb21LUHZ5TkJiY09LUlBXMHN0R1Y4VEpsSm9nRzdheG1NMDRZb0tJUWFxTjFtaE9OMFl4cU8vZllTVk0vb3lhdVozMmZpSE9keFJNb2o1enp6Q1c2bWlSb2cxanovREU0MWplSGJKWTJ4ZmNpZlhCRmN6Ni9GTjFGTENuYis4ai9uRDNZeTZhUjRiVTBVdEhUVU5NR1VXYTMvN0NHL2RPNUQxUzE1bVRVdXJhOHp3RzFpNStHRTJQak9Ob3ZVdjhwTTNRNzB0eTZ5OXVBRlNDT0YyaWNRZDNON0VEVUtJQWVwTlZpaE9SM1MyN2doUWRrWXh0RlR5UWF3dnczcWtjMWUzc0d4OUp0TnZ1b2hoT1VCT0NUZmNObzY4OTk5aFhlT25lTnFlWjNITmlNVGF3THpTTXltTE5WQWJ0RzhzNXNJeEJRbGg3WEVPZDB6SVplTTdPMG82RURWN3NRc2tCeFZKM05ZTlN0Z1VpdE9NeXRYUE1HTlpKZjZtTUd4NWtIV0VxUXQ2Mkh4ckJUYy8rRDN1ZEFhb212elVVa0JwVDZjNDlhV0VqOWpUQ1BUNERDL0V5ak5FZFNCTkRLNm9PQS8rSGVtWFlyRUpDWnBJbWFacnk1dTJhOWV1WWlCRHZjMEt4ZWxGeVpRN2VldVphWXp2K3lXVy91RVJYcDE1Sm1kZGRUY2JmNXNpYWdEZDh5aWluajAxYmQzSld2SW83Zkg1dnM3S3lnYkl6czM0MmJ4YmNqcTAyRkxRQ2dvS2VxdTNXS0U0VGFtcG9Ka3ZCcUFBQUNBQVNVUkJWTHk0aERLZ2ZFODlKYVhGNmUrWE00S1o0OE9zZU9GdHRyWUFMWlc4dVBRTmFzLzlFaE9QdTdCVnNlcC9LL0FEMGNxM2VlTE5NT01ubk1rWEI1K1I1eEN5MW5xMkZLUnA0dmI1Zk1YcTNWVW9Uay84bFExUU1vWTgvSlJYZWlpYjR1bmdubGxNdnZkT2FwLytNN05tcjhRZnk2UnMvQlNldldzTVJjZjlWZVdTVjdtYWFkZnZvaktXeCtncE4vRG9wRHlhZC9mSTY4QmFhMTFHSlJDR2FVZ1JqVWJ2OUhxOVQ2dTNXS0g0YkJpR1FXVmxKUU1HSEVQSSt1TlY2c1E1YVh5YkdiZSt6NVcvbmNNTktaWmdaWFhkZ241ZnZ2a2RJR0FmQWtJSUlnSVJFd0pERThKMGFacDBhNXBXcE02bVFxSG83R1JsK1BJY2JtZ2JTODA1NVFNa21xWnBCZXFVS1JTS3pvN1g0MjRYWXlOZGpBMXdDeUh5MVNsVEtCU2RnaDRYc0h6bEJXbHZjcnZiQ0Z2N1F5SnNtZFA0YkJVb0NvVkNjVUp3YVZvNlY1UTJWcHRWcUtzQmVlcVVLUlNLem82bWlSelN4ZFprRzNFVEV0Q0VFRXJZRkFwRnAwZUk5c0tXYXJuWlhWVWFrSzFPbVVLaDZQVENsdEFxcC91WnB1dEFKb1V0UzUweWhVTFJCU3kyekJSUmMyaWViQ053R3BDcFRwbENvZWdDWkJ6R0RXMWp0V21rN2FkWEtCU0tUb2UzdlhlYVR0WlF3cVpRS0k2R0VKdFhQTU9FNjcvTDBPKy9Sdm5KRTdaMkNZTjJBaWRiNTRjckZJcFRsUzEvWnRMQ2o0aWlzMjdSUXVadStoUWJwQ3JmNGFGbGZpWS92SkR0djd5VTQ3Y2twWjUxLy9NR2E2cVA2czZ1dzFoczFrWjRNR2x0UzFBb0ZLY29XemRWVURSbUlENnFlRzFQTVJjTzhSejdnelEyVUp2ZGx3dUhIdTljWXdPdnJWak5hMGUzRmt2cjBFcXpUTFhFSm5nUVVrcXAzbnFGNHJQVDJhWjdsUC9Qazh4WVVZVy9TY2ZYUFJPZm5samFVcGpkazV0LzNINllaTzJtbDVuN20zZFlYNlBqNjNrbTAyZDluZm5qQzRpdVg4cUV4eitpTGdpNTJabU1uMzBmejA1cVcvNGFyZHpFZ2wrL3dpczcvRVN6aTVuNDFXa3NuSDRtUmNDNlJmY3hOM3MyRzc5MVp1TE82My9EME4va3MvekhlU3k0ZnkxYm04S1FuVXZaNWJmeDZsY3IweTV6ZWZTMmN5Z0J4UENwMDRBZ2lla2VmcUFGQ0FxSVN0Q0JPQ0ExRXBhYlFxRTR4U2o3Nmh3Mi92WW1wdlk4aDBkLyt3aHYzWHNPZlMrY3pjWS9wSm1RVy9rYXN4NzlpSkpaOC9odzVTOVllMXMrNng1ZndxSTk0QnMvaTQwUGpxT3crN2s4K2FkSDJva2FzUW9XTGZ3TFc0ZmN3TnFWai9IaHp5YmhXNzJFT2F2ckQvOENTeTVsNVI5bU03MTdKbFBuUHNLcnN3WmFON1JmNXZMUVdqK0gxU3FSbUJPZUdNcW1vUUdHdWdRVWlsT1VtaXJLZXc1aW1CZkt0MWRUTnJ4djJydHRYdjBPbGNPbk1HOThBVDQ4RkkyWnlyemhEYXhZWFhIRXA0aHVlWnNWd1JITW01bXcwSHdsWTVnL3ZTK2JWNy8vS1pNTTdaZTVySDlyRy83Mld0VytWOVRDRGNSSXJsTlFLQlNuQmx0NTZJNi9zS2JKVDEwc2syazNyazdzRE0xK2hBbnZUK1BWZVdQYU5JblhOb2JKS3k1d2ZDK0xrcEpjL0pYMVJCbVlzb292UmRnYUEwU0x6MnF6S0xtb1p6Nit4bXBxajhOdmtsam1Fc2FmMEtxalF1TVk3cXhRS0xvS3cxaTQrR0dXZmptZkMrOTZrSTEvbU1YVW5pTVNMbW1LcUFFVTljakVYMTJQUC9rZG5jcWFBSGs5Q2c0cmFnQytIcG40cXF1cGRDaEpiVTBEMFI3RmliSGhuN0dnekZybVFsNTdyWklwWDlzSVcxaGRCQXJGcVVpSThtb29LOG1DeG1yS3ZjV1VkU0F5bzZkOGlaSi9yMlhSSmo5UkVvbUVKOTdQWi9xVWdVZDhGdCtJaTVqdWZaOUZ5eXFvQmFMVm0xaXdvb3JSVTg2bERDZ3B5Y2UvNVNQV04rcEVHeXQ0Zm5XRlE2RTgrTHc2dFRYMVJKUGZTNy9NSlE4aVIvVnJ5NFFyR2xJWGdFSnhLdExBQjVVRm5GVUM3SzJpdHVlZ2p1dlBTaTVsNmR3d2MzL3pDQ01mc2JLaTk4NW1YdWxSUEkxM0lQTisvSFVXL0hvcGs2YjVpV2JuTS9HcnMzbHlTbUk0ZDlubDEzSFBscVhjL3YvV0VlMCtnS2tqOHNsTi9uQmZycGt5a0ZtL2VZUkplKzdrclpuUTBUSVhLV1U0alhYbStMOUFDSWtwVFNta2xCOEFJOVZGb0ZCOE50UXlsK1BBWVphNW1GSnVjWTI0Nm9lMGxuczRGN3BFQlVJWGdyZ21oS2xKS2YzcWJDb1VpczZPbExLbFkydk5ucDJiUUFPVXNDa1VpazZQYWNvV2g0REpkSUptZWFTNHBaUk5RZ2gxMWhRS3hjbm5NTXRjRE1NSUhNWmljK29hbXBTeVFaMU5oVUxSMllrYmhqL0ZZcFBweFUyZ1NTbnIxU2xUS0JTZG5XaE05M2ZnZmtySHVnTUFOTU13NnRRcFV5Z1VuWjFRSkJxZ2ZXeE50bmRFUWROMXZWcWRNb1ZDMGRscDhnYzdja1dUWW1kbkM5eVJTS1FtSnlkSG5UV0ZvaFB4eVlFYWRSSlMrR0Q3bmtESG9pYXRGYU9KUVd6dWd3Y1BIaXdzTEZSblRhSG9SQXpvMDFPZGhCU3E2eHZ0Y2cvVEZqV1I4RDZsN1lJS0lkQTBnVFp5NU1nYWpyWUhTNkZRS0U0T2tibS9XaG82akN2Ni85dDc4L2lvNm52Ly8vVTUyK3hMbHNrZUVoS1dFRVJBSytEdmlsaC82TldxYlM5WVdyUzlTbHUrYVB1cjFHOEwxUXE5dHFCdG9jdEZieXRXcjFoYnNGcWdWV3BSUkJUVUZsY1VOU3lhUkNBUVFzakN6R1NabVhQTzUvZkhuSFB5bVpNelNiQnN3dWYxZUJ3VEFtYVpNL1BNNjcxOTN0VGFDWSsrbzNiMzg4ZU5pNHZyVEJXbDlJQU5aRHJqM0RKRURMQlJTdWsrL3RCeGNYR2RxZEowL2FBTmFobHV6ZHlZYkFTa2FiRHB1djR4ZitpNHVMak9WQ1dUYXJPRFkzTnMrU0FrdmZPQWFwcld5Qjg2TGk2dU0xWHg3cDVtaHhBMGErdUhsS1poc2tGUitONWtMaTZ1TTBFcGJGajZBOHgvVFUzL3NXQWFmbjdIWjFveGhCd2JJU1JkR1FWQU96bzY2dm1EeWNWMVppblI5QllXM1hrM3hsOTNHMnErOWtzczJOekVuREk3TkVEVWJYNGVhM2VmckxOa1c3QnA3U3ZZM25HaVA2K002eGI5Q3J2Vy9STHZMQmdIQlVCRC9iNDJCbVkyMTJhT1V4SHJ2d0lBV2xGUjhSRnduSThaRnhmWHlWUHlReXhaK2lSMlZNM0Erc2QvaHMwTHowZlR3dzlnd2ZiamdWUVBkcnl3RVd2Mm5LelQvMXV3YnMxTDJOWnhjajY3UzVFUlRBZVNpVHUrdjd6RDd0UUlvSU5rOUxTbEN3Z2tIWXFhMW00WGdBbjhHY1hGZGZvVjNmNFNObUFTSHAxN2Z2bzQ3M0ZYWU9uMWIrT2FwOTVENjVUSmlEaWNOTHRwNmYvRmtzTGI4UExjU3V4NDlPZVk5Mnc3b2wwcWtudVdZZnpqQU9RUldIemZYRnlmQTBRM1A0QkpheVZjVjlpT0hRM3RhRlZLY2YzY0c3RjRTdm80NzhTMmh6QitUU0hXci93OGFnRUFIMkxSMXg1RzlMcy94MzBYdHVDUk8rL0Rpa1lWaVZRUHR2N3dCMWdOd0RYOGFqeiswOHV5SHorZW9XNXNYN3NhUzU3YWhmb3VJRmcyQm5QbWZobTNqZ3M2L0Z1Nnh3WTFIWUJPQVFvS0NxUzN2aE5pTEJhbGVqckhoblJsdEU0UUJBNDJMcTR6UUUwTkxVRFZaQU1xYVZXUHJrVHdxUTlSajhucDdVOERhT0xOUDhEck4wZXgrczY3c1c3S1Fxei9RbDcvZjlTcFlzS2kvNHZsWlRKYXR6K0tHZis5R2xVcmJzT05oWU45ZDRYNCtrL3Z3ZGV4RS9ObVBJM3FleGNOYlRjQ0cyYS90UjYzUFFVcy9PblBjWDFaQ25VYmY0K2I3MW1QNm9kdnhwVzJDVTlkMSt2UlA3ZW1BOUNKMlpSTFFUVktJWUdBQ0NJRVFnZ0ZRRlZWcmVOUEp5NnVNME9KTGhVdVJjcGNmZWVUNEVxcEp5NW5WREFDVThyU0s0VWpVNjdHRFFVZjQyL3ZuYUlEdFJVWnJsUVBXanVpaU1LTDJxdS9pYzBQek1JMGg3RjFYVXZ1US8vOEdoT0NFaW9RQUpSQ0ExTThBRUI3ZW5vKzRFOG5McTR6UXk2ZmhFVFNCckV1RlFsWkduVFA1eWRUQUdVNVFMVHoxR3pqZEkyYmdjZS9Pd2E3MWp5QTZWKzVDOVAvYXowMnRLaU9QMXV5TjM3UUJqUU45cFlQUWloSlQ4SlRRdnBHcXVqZXZYczUyTGk0emhCVjF4UUNlejVFWFVaNDJvUm8yVWdqaHlVRFNDRnh3dGFkeDlEVUFnVERualI0RkJtdVZPcWtWUlFUTFMxSWpMNE05LzEwRVY3LzAxMjRiMm9QVnQ2OUdtc2RDaEhSOWdNdEJzQTBCbXJHWlZSRUtRVUZJQkNTdmt6aVRaNDgrU2lBRC9sVGlvdnJESEJzRjF5QjYrWFhzZVNoT3RUSHU5RzYreVVzV051T0s3OHdMcDFmeXlsRmJjRkIvTzNsSmtTUlF1dnU1N0hxZmRYMldUd295NUZSLy9ZdTFDZUJSRHlLS0F2Q0l6dXhhWGMzZ0JUcU56K05WVWNxY2EyWnZCOWVpZXFPWGZqYmU5MEF1bEczK1NWczZyUi9sMEdVNWJSais5dE5pQUtJZG5RUEdZU3QyNS9BTlhjK2dVMHRLUUJlUkFvRGNDWDdnN1EzZ1krT0hkN1pnNnl0SHVsTHB3Q0lBSm1raXdoVzhRQ0FydXY2MjRJZ2pPUlBLeTZ1MHl5bEVnc1h6Y0tTM3p5SmEyYTNBK0ZTWEhuRHJWZyt4V3Y4Z3pMTS8vWmxtUGZmdjhLRTM4c29QZThDWEhsZUFFMFpuMFRHdEp0bTRNcDduc1kxTTU4RXdoV1lmOWYzY0d1TjhkYytMM1k5L2l0TWVxOGQwWnhLWEwvd3hyN0NRZUcvWWVsTkgrSzJleFpoVmRLRENaZGVnQ21sOW0reUVyZk1uWXg1di9rVkp2d2VDSlQrRys2N2J5YW1EYUhYdit3TE4rUEJqdlZZOXYwZjRMWXV3RlZRaWV1L2U2TlI0ZTFyMEtXVWZ1QVVocEowVlZTbjZlUFhBRUtvTEtiZEdpRUVSQlJGV2RkMUNZRGMwOU56cTh2bCtobC9WbkZ4SGI4K1RRdVRvNXNmd0tTblIrQ1orNjRZWW52RzZkSGhveDIvTEw3c1AxOUZla2x5SEpsTGtuc0JraElJVkVLSUxna0NWU1NCS29xY3pyR1psZEZvTlBvMmYzcHljWEdkS2RyZGNHQ2Z6YTJ4T1RaS2pKRXFvekdYa25TT2pRcHNuRHByMXF5M0RTcHljWEZ4blc3RnYvYUQ1UzNJcklSbWdNMjhDQ0dVa0w0VGRDVkNpSEZLT1BTdFc3ZnFsTkx0aEpEcC9ESGw0anA3Rlp4K0szYWY0YTl5VmRQZWFtcnQ3QWMxWTVTS0FzUndiZWFNYUJwcWJCOGJqTGU2cXFyYitXM240dUk2M1lyR3U5OTNDRVBaY0pTbVkxQllibzJZN1I3R0g2aVpaNHZGWXEvemg1U0xpK3QwYSsvSEJ4c0dnaHJKT0RtWFFDQkdINXNnSUNQSEJrRC8xcmUrdFIzQU1mNndjbkZ4blVZZCs4YWlYemRsZ1pwRGpnMlVDQVNDUUtnZ0dJNk5FWDN5eVNkVlhkZGY1bzhyRnhlWGt5ZzkrVjhqcGFxdjFUVWVZc05RTlJOdWZXZXdNZUVuQ0JFZ0VDRmRQQ0NFbUgxdUZJQ2VTcVZlY2JsYzEvSmJ5TVhGQmFTN1lRK25QRGlTVUtDQklKN1FUdXJYYTJ0cjI1a3RES1hwQWdLbDV0UUJDRktVQUZRRXFBaXFpMm13QVZZdm0wNHBwUzB0TGE4TUd6YU0zMDB1TGk3b0ZOZ1JDd0t1QVB4NVFmaDhmaFNlNUsvNTRVZC9yM2VBbWdaQU0xbEZDS0ZFRUNBSUFtUlpocUs0NEhLNTRIYTcwOGNXbVlVRDA3RlZWbGJ1QnZBK3Y2VmNYRnlIVTI3QUZVQmhVUWw4UHY4cENIVnAzZHh2ZnIzTkZvYXFCdFJzUnhhWlBXeUNrVjlMZzA0UUJBRk1uczJDbTZxcVcvZ3Q1ZUxpT3BKUTRBOEVUOW5YNitycWVnM091YlcraW1qYWtCa3RIZ0lFZ2NDQ21paFk3UjVtS0FyamY5U2owZWhML0paeWNaM2JvaFRRcUpEZHFiVnR4OHJ2ZlFXZnUveGlUTC9xUC9ERHZ6Y0RBSnFmL0NZdXZlUmk0L29tL3R3ODlLOVpYLzlSSFRMemE3YkNBWFRMaUJtVEJvSWdnQmhRRXdVUmt1bllHTGhSU3FtZW41Ly9pcDdldmx6S2J5OFgxN2twUW9CNFVzdVNVNHZoNWZzVzQxbDhDeXVlK2crTVZHS0lJUUFBS0o3MU1MWjlJWUZFKzkreDRNWm5qdWRMSHJyMmMxZnR0NFdneG1VUFF5azBWWWNrcDZFbXNvN05zRzlPUzBjMVRkT2U0N2VXaTR2TFdjMzQ0TU1rYXEvK0hFWUdBTGdDQ0xCSDRMcGNjQjNudXVLZW5wNXQyZHdhSWRDUXNYS1BVbDNYcUo1MmJGUVFSSWlDQ0ZIdjdPL1l6TGxSQUhvc0Z0c2NEb2Uvem04Z0Z4Y1hFMzlpNDUzL2lmdDNKSkdNSjRGZlhJdlAvUUtBTWdWMy9ua0pwcnFHOWpsZSsrTXlQUGprZHV5UEt5aWFlQTNtZmYrN3lPOXNmTmNHTmF0d1lMUjU2QVJJQTgzNFRNbDRITzN4T0FSUEJGVmxQb2pFblFhYmVlbTZuZ0czM056Y3pUd2M1ZUxpeWxRZXJ2N3BNN2dhZTdIeWhyblkvL1cvNGQ3cHg3ZUpZZCtUUDhDUC8xNkJPeC9jaEttNWNieTI4bmI4K0h1L1BmVGUxcDgwR3NaS3RZTU5sT29naElJUUtnb2lSS0locVJKNHdpRUVqVFlQVVJRZ2VuSWdwQzJja0RFdnlwUlVkVTNUTnZJYnljWEZkZUswRnh2LytpRnF2L3BkVEMxMkFhNDhUTDdsRzVoNDlPbVg0SmhiNno5S1JVaDZPeFVoQURIQ1VFRVVJWW9pUkVtQ0lJcWk1ZGpNa0JSOSsvdTB6czVPRGpZdUxxNFRxSGEwdC90UlZCem8rNUNyQWdGdjI0NXNZYWdGdDR3MkR3QWdTRU10WFEwVlJSR1NLS2JCWnNLTmdaclZ6eGFKUkY1QmVrczhGeGNYMXdsUUxuSno0empjRnJNK1FudWI5L3ptalFQMmFtaktoQnJKUERIWE9DazMvZit5VUJORkNaSVc2NnVLbW0rWlk0eXNBZFJrTXJtQjN3d3VMcTVQckl3MWdhTnc5UmRIb3U2UjMrTGw1Z1NBTnJ6eTJ3ZGVRdjlKZzR6Q2dYV3dwTUVvUVJSQW9OTkVra0lVQ1hRS1NKSUlpY1lnc1k2TnliVVJwanFxSFRwMDZPK1ZsWlVMK2QzaDR1SWFpcHFmL0NhK2ZGL2ZxdUozYnJ3WTl3T1k5TU5OK01YbkFxaVk5WFA4VjlzUzNEL3ZTdnc0cmtBTGpYalh3YTNaRzNNcFRPTWxDQkJrQlg2dEcvR09JMmpzSkpEOVpSaVhtd001TUJKa3hJZ1I2TzN0Ulc5dkwwa2tFa2lsVWtSVlZhTHJ1a0FwbFpEZXpPcFNWZldQZ2lCY3lXOFpGNWV6UGsxYnFvWXFTb0czWTJFVVZweThyWnlxcXI0NHZLSnNKWUJlOUcyak1xOXVRa2dDUUlvUW9oSkNkRkVVcVNUSlZGRVV1Tnd1Nm5hNzRYRjc0UFY2NGZQN0VRd0VJRWlTWkRxMmpPcW9QUnp0N3U1K21qOTF1YmpPTFJFQ1NFUkhWOWZKMi9IVTNIem9WWWNRTkFWQUpZUmticVV5MkNRSUFrUlJvRlp1VFJJaFNSSmtTWUtzS0gzRkEzc1J3VllkMWUrLy8vNE5BQTd3VzgzRmRXNnBRRW1nSzNaeUR0V21sRGI5MTQ4VzcyTEFscktGb1RyTUk0ck1uUWJXMkZRZnR5UlJTb05ObHFFb1NwOWpZL05zZ2lDQW9hTU9RTHZycnJ0NlVxblVPbjZidWJqT0xSVXBDZEJFSEVlYW0wNjRjNHZINDg4OXYrbTVsSk5iQTRnOXY1YUdtekVYYW9lYUpNdVFGUVV1bHd1U0pLVS9hUHdqS29vaTBUU05Db0lBVGRNbzQ5clVBd2NPL0xXcXF1cTcvRlp6Y1oxYjRlZ0ZnU2lPSkxweHVDMk8yRkVSWGNrVGM0THVLNis4OG5ZV3Q2WUMxQng4VDNPSUd0SjFhSnBHTlUyRnFxYVFTb2xJSmtWSXZTSjZaUWs5THFVUGJFeXVqUTFITTJaSFI0d1lzVXRWMWZXQ0lNemd0NXVMNjl5Q1c2RmJSYUU3QmtxQnpGVXBuMHlKWk9wdmx5MWFkTlRtMUZJQVVnUlFRY3d3RkZRZ29DSUJaQkZRSk1DdEVIZ1V3T3NDdkc0ZzRBVkNmaUEzQ0JUa0FJSXN5N0M1TnRnSDQ0MVJLdzNwU1FRZWpuSnhuZU9RT3hIYTNYamdWUWUzbHRIbWtiRml6emgzVFJUVG9hZ2tpcEFrRWJJa1FwWWtLSW9NdDB1QjErUHVBNXNvaXVaYmFvYWx6SkhoVm5VMFB6OS9DNlgwVlg1N3ViaTRQcWswVGQ4K1llYjh4Z0hjbXRaMy9scmFYSW1FVUZFZ0VBV1JTcUlJVVV6RFRaWWtLTElFdHlMRDQzYkI3M1ZEVUJRRnNpekQ3dHhzRGJ0V0VRR0EydFhWOVFTL05WeGNYSjlVQnc2M3ZqQ0FXMU1OdDZhVDlKWjNLaEJBRUlqaDFBUklrbUE0TlJHS0xNRmx1VFVYQWw1UEg5Z2NpZ2ptaUZYRzdDZ0FiZnIwNmVzb3BYelpDeGNYMTNGTHA3UnU2bGUvLzM0V3QyYk1oL1lWRGRKZ005eWFLRkRUcWFYYk8yeHV6ZU5HTU9DRDRISzVrQVZ1R2E2TkRVZGZmLzExdGJlMzkzRitpN2k0dUk1WFI5bzZuMjFxN1dTaGxqU3VOTlNJZVpKSHVuOU5NUFlhbUMwZWJHNU5rZnJjbXMvdFFzRG5SWTRkYkRhNHNhN05QaGl2cmxtejVra0E5ZncyY1hGeERWV1Uwb1lmM2YrSEhZT0VvZFpKdVFSQTJxMEpFTVYwYmsyU1JNaWlaQlVNWElaYjgzazlDQVc4eUEwSElIZzhIampCelZZaFpVTlNEWUEyZCs3Y2FHOXY3eC80cmVMaTRocXFXanVpR3g1YTkzekN5YTBSSUdVVURUVEFQRWd5N2RoRVVUQ0tCUUprVVlRc0c3azEyWUNheDRXQXo0Tnd3SS84bkZBYWJHNjN1MTg0bXFYOUk2UDFZOE9HRFU4QWFPQzNpNHVMYXdodXJYSFp3MCsrWllNYTY5ajZXanpTUlFNSWhFQzBpZ1pwdDJiT2hDcXlETGRMaHNlbHdPLzFJQlR3SVM4Y1FGRmVEZ1NmendlMzIyMjVOaFp3OXRZUFc2NU4vZktYdjl6UjA5UHpHTDlsWEZ4Y2c3cTE5bU5QLy9LeHAzdHRJYWpwMWxTUXZoVjdwbHNUQlVMVGJpMGRocWFCbGxrSjlYbmNDUGc4eUFtbTNab2tpUkQ4ZmorOFhtK0dhenVlMW84Ly9lbFBqMU5LK1FtN1hGeGNBN20xUFhmLzVvOXZPa0ROZEcwT0xSNUcwVUFValJZUGV6T3VESy9iQmIvUGNHdWhBSXJ5Y3dBQVFpQVFnTS9uZ3owa1plRG0xUHBoVlVpLzhZMXZIT3Z1N3Y0OXYzVmNYRnpaMU56YS92UURUejQzV0c0dG95RlhNTnlhSkFxMEg5UVVHUjZYSzhPdFJYSkRjQnVMVElWd09Beld0UTFRSmMzcTJtYk5tcldHVXZvNnYzMWNYRngyNmJyKzV2UnYvSENIQTlRR2NHdUFLQkJJZ2psZDBEZGg0SkpsdUpWME02N2Y1MEU0NEVOZU9JaWkvRnpyYXdvNU9Ua0lCb09XYTNQS3RiR3VqZGthYjIxcjNyaHhZeklhalQ3S2J5RVhGNWRkRFUySG45blZlRWpGNEpWUUhTQlVTQjhrU1VWQmdDU0pobHRMUTAyUm1mWU9qeHRCbnhjNXdRQUtjc1B3ZXZwMm13cjUrZmtJaDhNSUJBTHdlcjBXM0V6SE5sVFhGZzZITitpNi9uZCtHN200dUV5bFZQWDVrWitidDh2QnFRM3Uxc1JNdHlZYkJRT1AyeGlkOG5rUUR2cVFueE5FVVNRbjQrc0tCUVVGeU0zTlJUQVloTi92dDNKdERoTUpBN2sybFJDU09uTGtDSGR0WEZ4Y2xuYnNxdCtFekdaY0MyeUdXMU9INnRaY1ZudUhNVHJsOXlJM0ZFQkJYaGcranpzVGJDVWxKY2pQejBkT1RnN01Rc0pRY20xbU1ZRjFiY1hGeGY5SXBWSVA4OXZKeGNYVjFkTzdadkxzN3grd1FTMlJ6YTBKUmlYVXlhMHBzZ1NYeTJ6dmNDSGc5MXJ0SFNXUnZINWZXL0I0UENncUtrSmVYaDVDb1ZEV1FvSlRoZFRlMTBZSVNYM3d3UWVQQVRqSWJ5c1gxN2tyQ2h6ODYrWi9ib056d1lCMWF4bDlhMVlsMU83V0ZLTmc0SGFuMnp2OFh1U0ZnaWpLejRISHJmUUhHd0NVbEpRZ0VvbUFMU1I0dlY2NFhDNWtHNUxQbG11Yk9IRmlmWGQzOTRQODFuSnhuYnM2Y3JUanlhL2UrYXNPbTFQTDZ0WklobHNUTTg1WmN5a3lYSW9DcjF1Qnoyc1VERUlCUkhKREtDbkljL3o2QWdBb2lvS2lvaUprS3lUWXFxVFVuRXF3citnelhkdlVxVk1mMDNYOVJYNTd1YmdHa2VJNzYzNGtWZE5lL3N5WGJudGpDRzVOTTl5YWJrNFpTRWJmV3I4cXFIRXlic0NiYnUvSUR3ZFJGTW1GSWt2WndRWUE1ZVhsTUFzSlpranFWRWhnaCtTWkdWS2RkVzA3ZHV4SUhqbHloT2ZhdUxnR1U2amtyUHVSZHU1cGZLYXB0ZE0rWFpBQWtDRE1CaXJEcmVuRU9rU1NXRTVOdG8xTmVUenBrM0hOMHpzSzhzSW9MOHJQK2owSTdCL01rTlIwYlFQMHRsbXVqWmxJWUoxYnFyaTQrT1ZrTXZrYi9zemw0aHBBa1pGbmxXdUx4cnNmdlhEVzdSOGJibzJGV3QvQWUvL3oxcWhJQ0UwUHVJczBmU3F1bk9IVzBoTUdYb1NEZmtSeXNvZWdqbUFyTEN6TUdwSTZqRnRSU1pJeUNnbXNheU9FSkxkczJiS0tVcnFEUDN1NXVMS0lDRUQxcFVCT0JTQjdQdFUvaXE3VGR4LzQwelAyZ29HVld5TkEwZ3hCbWZQV3FHQ0ZvR21vWlp5SzZ4U0M1dWVpTUM4ODRQZlNMMEF0TFMxRmUzczdvdEVvNHZFNGVucDZrRWdra0V3bWtVd21rVXFsb0tvcVZGV0ZwbW5RTkEyNnJvTlowNmRSU2dVQTZ0VlhYMzI0cmEzdHdkemMzSlg4R2N6RmxjMWVpRURKdUUvOWovSGhuajNyNy9qdngrSU9VRXM3TmtMU0JRTkNOQ045UlFWUmhDakxrRnd1U0M0WFpJOEhpdGNMbDk4UGR6QUliemdNZjE0ZWdvV0Z5QjAyREFValJxQjAzRGdnRkJxNll3T0FVQ2dFcDk2MkxJMjdHU0VwSEpwMjgvTHlOcVpTcVlmNHM1ZUw2K3hWUEI1ZlhWTlRzNGNKUVRPZ1JnaGgxK3JwQU5LTnVLSkl6Vll5V1phaEdKdmMzVzQzUEI0UGZENGZBb0VBY25KeWtKK2ZqNUtTRW9RR2dab2oySUIwSWNIc2JXT0g1TFBOa3RxYWRuVkNpTlZwVEFoSnZmcnFxNDlRU3QvbXQ1K0w2K3lUcnV2dlBQcm9veStpZjE2TmhWcktNRHNhSVVRM0pwaXN0WjhtMUV5d2VUd2VlTDFlK1AxK2hNTmg1T1hsb2Fpb0NPWGw1VU16d1U0ZmxHVVpaV1ZsS0N3czdGY2xkVGh4ZDZCQ2dnb2c5ZG5QZnJhcHJhMk5oNk5jWEdlaDl1elpzLzQ3My9sT05Hc0kydGUzWm14MkoxbmRtdW5VUEI0UC9INC9RcUVRY25OelVWaFlpTEt5TXNpeVBLVHZTY3IyRjBWRlJlam82RUEwR2tWWFYxZldYQnViWjlOMW5lcTZibTYxMGlpbHhIQnRRaVFTMmRUYjI3dkM1WExONTA4RkxxNnpROGVPSFh1NHRyWjI3d0J1emRvK1piZzFhb0xOYlBobm5acnAxdngrUDRMQklISnljaENKUkZCU1VvS2lvcUloZjEvU1FIODViTmd3ZEhaMkloYUxvYnU3T3dOdVpnSEJ1S2l1NjhSV1NLQUFkRXFwVlNYOTR4Ly8rTDl6NXN3Wkt3akNkUDZVNE9JQzl1M2I5Nm45M2xWVmZlbWVlKzU1MlFhMVhwdGJ5OGlyQWFDRUVPdHpHQ1lJQUpER1J2cXR3UkhyWThmN1dBMElOcC9QaDdLeU1zdTFkWGQzVzJCTHBWSjIxMFkxVFNPNnJsUGpHOU1OeDJibTI0UnZmdk9iSGRPblQzK3dvcUtpRmtBSmYxcHpuZXVxcUtqNHRIN3J6YSsrK3VxR1ZhdFc5VGlFb0wyd0ZReU12SnB1T0RWcU9EUnE1dExNSWtFNEhFWnViaTRLQ2dwUVZsYUdxcW9xMU5iV0RqbTNOaVN3QWVsQ3dyRmp4eXpYMXR2Ym13RTN0dlhEQ0VkQjA0TFIxMFlvcFdvYXprU29yS3g4SXhxTi9rOGdFTGlYUDYyNXVENmRPbmp3NEI4dnVlU1NKZ05xTE5Ec0lhaHFUaVlSUXF5OG1yMVk0SGE3TGNBRmcwSGs1dVlpRW9tZ3RMVDB1S0VHWkNrZU9QMVdZVnRBMkVGNVd3c0lkUmlTWjhldFVvU1FaREFZZkNLWlRQS1JLeTZ1TTFSMVM2YWlxdXBtckkzMi83dDRQTDY2ckt6c2JXUzJkbGdocUMydlprSE5WZ1dsMmFER3RuWjhVa2M3SkxBRkFvR01GcEJRS09RNGxXQ0RtMWtselJpU054K0k1NTkvL21GZDE3ZndweEFYVjFyUnVyVllNdThhVEIxZmc2cXFHb3lmTkIyekZ6eUNyYTFuenZlb3F1cldsU3RYYm9GekJkU0FHMDFTU2xWS3FhYnJ1cTVwbXE1cE90Vmh1VFdxS0FwRXRRdnQ3VEVrNVhRNEdnZ0VFQXFGTWxvN0FvSEFKL28rcGFIK3cvTHljc2RwQklkY1c3YVFGRWJPVFNXRUpLKzk5dHBEalkyTkQxUlVWRlFRUXFyNTA1cnJYRmJyMWdXWVBXOGRHb0lUY08zMTgzRkRLUkRidFEwYk5pekZuSzJ2WWNVekQrSzZ5T245SGltbERkdTNiMzk2d1lJRk1ZY1F0QmZwSWZja3BXYkJnR2lFcEVlbktOVnBLdEdEaE1lSGdHR0N4R2d6bW84b0NOZWNsd0UxTTcvMlNVTFE0d1liQUF3ZlB0eXhRdW93WmtWMVhTZG1aUU1BMVhXZGJRRWhoQkJoK1BEaGI3YTN0OStmazVQemkrUDlYcmk0emg2cnRoWExGcXhEUTJRbVZxMWZqbWtXd0c3RkxUY3N3WXlacTdCazJWWmN1WHdhWEtmUnJEVTJOcTZaT25WcWs4MnRaWWFnbEtZTEJrVFFSTUhxVjRNa2FPanVTYUUzbnFCQ1hoQXVsd3VpTElBUUVXNXZabXRIYVdrcGhnOGYvaTk5czhMeC9HT3YxNHVLaWdvVUZ4ZG5IRXlaNWRSZEtzdHl2NURVTnBXUXlNM04zZERUMC9Nci91em1PbmU1dGdZYmppcTRkUDVDMFNBeHNnQUFJQUJKUkVGVUJtcHBCU2ZlZ3NVTGJzQ1ZrUVJhYmZtdlphc1hZTWJVR2xTTlg0Q3RhZCtIclEvY2hobFR4Nk9tcWdvMWs2N0J6VXMyb1NuQmZNS3R0MkY4MVhRc1dyc2FpMlpQeC9pYUt0U01uNG9aQzlhaXppR2ZscWpmZ0VXenAyUHNpSXFIcXF1cjMyZWNXaTk3RVVJU1lBK1FUSi9jb1p1TnVMTExCNzhrVUlIcUlIbzc5bjd3QWQ0N2xBUWhjYnkvNlM5NDVLL3ZJeFdKb1BqSVU1Z3phdzV1Ly8yZmNOczFrMUJUTlJWTDZnQnNtb2VhcWtsWXNEM3orOXU2WUR5cWF1WmhFL3ZCcHEzSDc1S0tpNHNIZEcxbU9NcUdwR1lMaUJHYXN2azJBWUF3WmNxVWg5OTg4ODFDV1padjRrOXpybk5OZGEvdFFCSzF1R0tLVTZ3WndiUmJsMkphdjQ5dnc4cGxWYmppK3ZsWVZGV0xha1N4ZGRFTXpGbVR3T1FiNW1QcEJCZGFYMXVIbGF0dXdlem9LbXpPY0hzTldMTm9GYTZkUHgvM3pROGl1bTBWbHExY2lObFJGelkvZUIzNnZvdnRXSFp6SFNvKysva245cmY4ZysxWDZ4ZUNzbEFEb0ZNS1NvekZUK204bWdKL1VTbUt2Vjc0UEJKeXhwWUJ4eHJ3d1dFM3hsNHhIUmVQSG9OeFJVVVk1ZzFCa1JKNGZ2a0tqTG4yUnN5ZldZV0pFUUJOUTNlL0MyYlArV1RoWDNWMU5lTHhlTmIyRHdac0dTRXBwWlRxdW01dkFTRTdkKzRVdG16Wjh0RDA2ZE1MUkZHOG1qL1Z1YzRkSmREYUdnV1VDQ0lzMTZLdGFHV2RGbHdJUm9JTW5Fb3g4NzcxV0Q0dGFQejdUVml4SFpod3k0TjRkT0hFOUwrNy9qcEVXaWRoNGFhL1lmdnlhUXdjRlV4ZS9EanV1OUg0Z2xPbW9Dd3hIVE5YcmNDcXV1dXdzTGJ2YTQ2Lzg0bk5uem15NGZrTjhSNm5YalY3RlZRbEF0R2hVNTFTbmFaU0tWQUlVRVFac2l4VGE3amRsdzQ5SmJrWnU0NTRVVGx1SWk0NXZ3TER5OHBRZlN5OVJxL3Fsc2V4Zm1IdGNZZmVkU3VYWU4zQnFrOEdObEVVVVZWVjFROXM3RFNDYmN5S21JVUVJK2ZHRmhNSUlVUzQ2cXFybXVycTZsYlcxTlRrRVVJbThTYzgxN2tDdGtRaURSRVg4eXJldnVRYTNMRHVhTjhIQWpPeDZ0M2xESnlxTVhsaWtJbFpyOFR5elZmYVBuY1ExV1VSWUhzcm9nbWdqeEl1Uk1vaUdkQ2NPUE02VksxYWllMDdXb0ZhOCs4bXZGV3U3SDE2L3Z6NVVWdE9yY2U0ZW0zOWF1bEdYSWxRVUoxcXVrN1ZaQytPdFNkbzNPVkhVWGtJZVVaclJ5QVFnQlNWSVlvdUJQTUxyV1pjOFYwQ0lJRGF5YldmSUo5WWo2MWJHNEF4Q3o1NXdqNGNEcU95c3RLQ1c3WUtLZXZjVExnWlV3a2doSmpGQklFUVFtcHJhOTlyYW1yNmJVbEpTUzRoWkFSLzBuT2QvVEtCWmdET2VEWFgzbklmVmwyYkFCREZ0bVh6c1dvb29WaTBEbXRYck1DYVRkdFJkekNHcEdYUXF0TklHb2dVWlZVb0ExRGYwQVFnQWtwUjM5UFQ5dWQ3WjE3VllvTmFYd1dVeWFzWnVYTXJyeWJMTGlyTE1tUkJwMnFpRi9HZU9Kb2JQZ0wxVGNia2tyUmprenNVU0pJTDRjSVNWRlpXSWh3Ty80dVBaU3NhV2dGbFl2Vy9Wb2tzS3l1ekJ1Ulp1R1hMdFJsUU00ZS96TEJVTXg0Y0FrQW9LeXQ3K2VqUm8vZm41ZVV0QWhEaFQzeXVzeDFza1VnUVNEYWhxUlZBbWVHMXFxZGdXalVBUk5HNlNobENqcWtPRDh5ZWdlV3RFekZuNFhJc3JDNUQwQVhVcmJ3WkN6Y04xVHRhT25xZ3ZYdjE0Y092TkNKenNMM1hJYStXTXZOcTVqSjFkcnJBN1hiRGsxK0VTaVdGcHIzN2NLVGhNRENoQ2prNU9WRGFYWkFrRC9MTEtsQldWblpDSDlWL3VjVmkxS2hSR2E2TkRVbnRKMzlRU3RsOG0yNE93eHJoS1NHRUVFb3B5Yy9QLzN0blo2Yy9GQW90QnVEbVQzNnVzMW0xbDA1RVlNMVcvRzFURTc3KzlVLzRBdCt4Qm10MkFaZXVlQkNMcitzTFVSUEJJUVowOWUrZ0NVQ2txcXozNE1HRHE2NWU4WFlkK3RvNnpQQ1RkV3Y5UWxCQ3FLNG1rMGlKTG5oOU1oUkZzZkpxM2tBZXl2TVBvTE10aVZRZ2pQejhmTGlPdXFFb1BoUlZqUnJTTHdBZ2tVSGYvb3FnS2dJa201cU9yOTNEU1lRUWpCZ3h3cHBNeU0vUHR5WVQ3R05YWmd1SWJmR3lPWEpsdG9Ba0FTVEM0ZkNmdTdxNmVCc0kxMW12NExSYmNIMXBFdStzV0lCSDZoTDl3cXZXMXVRUTdGWUNVUUNKS1BQL0orcncvSTVXdXhzREVFTjlYVDBidzJMVHFrMDRpREdZTWdvUEdlTlNMTlI2R2JobG5MRm12bjdOZmpXQmdGSTloU1RwS3haNHZWNzRQQ25FNGdTQ1B3OWxoZmtvS2lwQ1JXRUlpcUlnbVNTRC8zeVJDQ0tJb2I2K0tlUG5lNjB1eHZ5amFreWJWZ1hzV25OaW1tSURnUUNxcTZ2N0ZSSTBUY3MySUQ5WU1ZRlFTb25mNzMrc3U3dmI0L0Y0YnVkUGY2NnpOeHFkaUlVUExrTGQ3S1ZZT21NNm5yL3VTbHc2cGhRNDJvRFhObTNBdG9ZQUp0d3lFeE1IdEgzWDRzcjhkVmkzWkRibU5WeUphclJpeDZZTjJIRXdDU0NLUkJRQVUydll0WHcyWmpSY2oyc241T1BvYTJ1dyttOUhFYjcwOWdkL01LbmdIdzZoWnc4eWp5T3lPVFd6RVZlaWJoOFE2MHJTK05FV0pMdUR5QW1uMEJOcnc3NzJOclFuWGFpZVBoVVhHSWRHam5TTlF1aUpMVml6WkFsd3hhVzQ3c1pwS0J2bzV5dGRoVlhMYnNhOGd6TXh3WFVRNzJ6YWdPY2JBRENMNEd0dldZeVpHK2FjdUc3L3dzSkN4MXlicXFwc1AxdEdXTW9XRTR4UG85bkQwbG16WmozODV6Ly9XWEc3M2QvbXJ3Q3VzNVp0dFYvSDQ1dHI4Y2l5RlZpemRTMVdySXNocWVTanFuWWFibGs1SC9PdnJCNjRTaGljaHFXUEw0TnIwUXBzV0wwU1cxMVZtSEw5ZlhoOHd2Tll0TElKQjVuOEhSREFGWXNXbzJ6YkNxeGMwb0NvcXhRanI3MzdrZnBYZjdrVi9hY0tyQkNVRUNRb05WZm9XVkRyYThLVlpTaUtqNWFHS0hxaWNjUjdZMmc5SE1OUlFVRzRzQXBUcDE2T2EvOXRKRXBMUzFGVlZZWHl5Ky9FNGplYnNXekRLcXhvemNlMEc2Y05EUDlIbHlHNllBVTJyVnFPcllFcVRMeHVNWlpOWElHRkd6SWZoK1dQcndSaEQzSTdFZHE5ZXpkMjc5Nk54c1pHSERwMENFZU9IRUY3ZTN2RzBVY0dBQWtEUUdMMHV3a0FSRXFwQkVBRzRLS1V1bi8wb3grRmYvakRIOTdpY3JubThaY0ExNWtxVGRQUTFOUjBacCt4dHZVMmpKK3pGZE5Xdll2N0RJN0VZckhmZi92YjM5Nzhoei84b1lkeFpUMEF1bzIzUFlRUXEyQkFqRzFUN1BscXpOSGUxaGxyNXZ5bmViNWFTVWtKaGc4ZmpwcWFHdFRVMUp6VUgvT0V6MmVPSGozYUNrbnQ3UjlaWEp0NTRpNlFXU20xd3RLZi9PUW5uWkZJNU9HNWMrY0tMcGRyTG44SmNYR2RHTVZpc1Q4c1hyeDRpd0cxSkFPMUhnWnEvVTdEZGFxQXNzVUNuOC9uZUx4M1pXVWxSbzhlZmRKL3JoTU9Oa0lJUm84ZWJZSE4zdnFoYVpwMTVDK1RiOHRXS2JVKzUzZSs4NTAyUlZFZXZ1bW1tOERoeHNWMVlxQzJkT25TelN0V3JPaENacUdBYmNETmxsZlRCVUZnTjB4UmN4R0wvY0JJMDYyWlVHT1BCdi9VZ0EwQVBCNFBSbzBhMWE5cDE5YlAxcStZWUxnMDA3V3hjQ09FRURKdjNyeldSQ0x4dTdsejUrcHV0NXVIcFZ4Y24xREo3dGp2Rnk5ZXZHVUFxTEZPcmQvcVBPUEFTR3AzYXViS3ZGQW9aQjBZV1Z4Y2pJcUtDb3dhTlFvZXo2blpkaS9lZmZmZEorVVRtd2RRbW5Beks2UXMzR3pYWUJpbkFMQng0OFlVSWVUOWl5KytXSlZsbVk5ZWNaMHhvcFFpR28yZWdBNzZrNmpLcTNIRHpUYzg4dlN5LzIvTDczNzN1KzVzVGcwT2t3VnNvY0NFbXN2bG91d0p1UGFWZVdhaFlNeVlNY2pQeno5bFArWkpQUU90c0xDdzN6U0NRNFVVVEo3TnFwUUNnRzFnSG9RUVVFcXhkT2xTdlBYV1d3K3VYYnMyNmZWNmVTc0lGOWNRMWRIUjhlQVZWMXl4OWEyMzNrcG1jMnF3SFVQRVZqOHpLNkI5VHMzYzJzN20xSXFLaWxCUlVZR1JJMGVpc0xEd2xQNmNKLzF3eC9MeThnelh4azRqMkYxYitwY2VKUUNvcXFvbTNEUTJMRFhodG5IalJ2aDh2ditOeFdLOWZyLy9kdkFKQlM2dWdkVGIydHI2VUVGQndUL1EvL1RiZ2FDbUVVSTBvZThJb3F6aFp6QVlSRGljbmlvb0tpckNzR0hEck9iOVU2MVRjbXB0ZFhWMTF1UERtVk4yVFR0djVkcFVWVFgvemhGdUFCQUlCUDdZMGRIUkhRNkhid09mTGVYaWN0TFJnd2NQcmpJbUN0alp6eDViK09rSU5XYkJjUWJVbkZibm1WQXJMeS9IaUJFalVGMTllazc5UDJYSGNkZlUxR1RiaStEbzNFeTRBZW4rb0FIZ1JuTnljdGEzdExSMFJTS1JiL0ZUUWJpNHdCcUYrdnI2K3RValI0NnNHOFNwSmJKQmpjMnBaUXMvbmFCMnNudlZ6Z2l3QWNEWXNXUDd3UzBMMkN5NG1RbTNiSEF6LzF4WVdQaHNZMk5qZE5pd1lmTUVRYmlJUDZXNXpuVnBtdmJXdSsrKysrY0xMN3l3RWYxblB3ZHI2YkNnTmxoT3pZUmFZV0VoeXN2TFVWMWRqYkZqeDU3V24vMlVnbzBRZ3JGangyWjFiUTYvYlZnSDV3ZzM0L05TU2lrZFBuejRQM2JzMk5FNWJ0eTRiNHFpZUJWL2FuT2Q4VHIydTVQeWFWTXBiZk9XYmJ1ZXZtcm0vUzFNK0dtZi9ld2h4cnE4VEtoUmpSQktSWUZRVWFCVWxuVElvZzZYcE1JdHEvQXFLZmpkU1FROUNZUzlQY2p6ZDZFd0ZFZDVYaFRWaFowWVc5NEdFbjM5M0FFYkFNaXliTUZ0RU1mRzV0dXl3WTBhSDZkbWFEcHg0c1FQMXE5ZnYveWFhNjVwVlJUbGEveVZ3M1d1cWJzNytjVERqMjE3ZnY0ZGY0NE9BTFZlQWlSQVlLdCtRaU1FYWFpSmhNcXlBRVVXNFhKSjFPMlc0ZlVvOFBsY0NQamRDSWU4eU12MW82Z3doUExTWEZRUEw4RFltbExJa25qYUg0UFRzdkxPN1haajdOaXhqbmsyMXEyeElTa2hCS2xVS24wVVNQci8wL3JZbHVuY1pzeVljYkNtcHVaWGI3enh4aEcvM3o4ZmZMVWYxN2todGEwOS90RDRmL3V2bHc4MngrMDdDdGp6MUV5bzJad2FkSUdBQ2dLaGtnRTFXUmFRNkV6UXpxQUxZM0xTVUFzR0dLZ1ZoRkJXbW92cTRSR01IVk1DdDFzK0l4NkkwL2FDOS9sOEZ0enNZTE9IcFlRUWF1VFQ3SzBnOWdrRmFzSnQ5KzdkZWlBUWVLeWxwZVZ3SkJLNWhTOWw1anBUdGYyZSszSHowZjhYNy82NjloUHZEYVdVTmpUdU83cW1lc0tpOTVHNVRhcmZlV29NMU5TQm9LWW9JblVwSXFpUVJGS1I0ZmU1RVRDaGx1ZEhVVUd3RDJvMXBmQjVYYWgvOXAvWW5qOE9OMzdHNy9CZHhySDF2bWV3NU9uOWFJcEppSXdiaDhVL21ZNHJTODRpc0FIcGM5ekdqaDNyNk5qWXZCeDcvd2FCRzJXZEd3QmFXRmo0YkYxZDNlRlJvMFo5WFJURnovS1hFZGRaWjlOVWJldjJOeHFlbm5yMUw1eVdHZHVQODA2QTlCM3AzUWMxUWdVQlZKSUVLa3ZFZ0pvTXQxdUFKaEtJTGhjQ0FUZHlXS2RXMWdlMVFNQU5RRVhkYzY5Z1pVbVZJOWhhbjMwR3R6MHRZZWxqdCtPNmtsNXMvZEVhekx2akRXeCs3Q0tVblUxZ0E0QlFLR1RCYlJDbzlZT2JrVzlqejNPemdHYkFUUWVnMTliV3ZyMTY5ZXBETTJiTStOanRkcy9oTHdXdU0xV0paOWRoL0lQQWphTVQyTHF6RGExSkY2YmROaFBMUDU4SEYxcXc3RC9XWVB2b0tyajJ0S0FwbG9CWU5XYjFlU1BWTGIrNTV5OHhaTFp6Mk1OUGErNlRVcVFFUWpRUTZDYlVSQUZVVGVrMG1kUUJRcWdnRTVTVnl2QjZSR2dTME8xMkdWRHpRRHUwSDM5NkxvWk8zWXZ5Qzhmamh6OGVqdXVDKzdIa1A1N0Mya01hWWxpRFNYc3V3ZU1QWDRTK01FbkZqdWNPSWZqdnMzQmRpUVRBajJsenhxSDZLeDlpZSt3aVhKK293N3l2YkVYa1o3ZGk2V2ZPQXJBQjZZMVhBNVdIVGNBUlFzeUxFa0tJbVhNemMyMjZybE8ydjQxMWJqZmVlT01oQVBlM3RiVjluSnViZXd1QVl2NHk0am9qZGVnWWNOY3NiUDZaSDlGWG44SDBPMTdDcHMvT3hIVUJBRWlnVlJtRDlYLzVRblB5NC8xL0xKdHd6OXRiKzVhcUpCbUlzVWQ1SndoQmtsS2tRS0FLSUJvSU5JR0FFb0hvb2tCQVV4clZpSUNjUEJmMVN4VHRyUW0wZElzb0szQkJsUVVvM25UNDZUbjZNVmJ2Q3VLMkg4L0F2TXR6OGZGanorTG1iMjlHNUM5WFlmRmZic1dFMjMrTlpTVTM0T1VGOWhHcVhyVEdWRVJLR0NlWDcwY0V2V2c5Q21ENE1OeHkxNzhqT080c2NXeW1jbkp5TXVER1FLd2YyT3pPRFFCaDVrcjdPVGNBdXVIZWFGNWUzbC9yNnVvK0hqVnExRTJpS0Y3T1gwVmNaNXhLcWpEVENPV0NvNGVoT3ZrR1dtTUFBZ0Fnb21aeXhVdDd0Mys0NFpLcmZ0R0VnYmV6OTlwQ1R4VkloNTZFUUJjRVFnV0JRSklJSlJwQlVnY2xnZ2lYMzRVUnVVRW9YaStDQVFrcFJVRFU3ME54Z1F2MXIzV2gra3VmeDd6TGh5RW43RVhPYlpmaHVxZlhZYzAvcG1QS1lJbWVmcXNiUkFBcVlra0E4R1BpWi8xblR5aHFoOXQ1NTUzWEQyb0RRSTZTdFBybDNDd2IxOWNPWW9hbVdtMXQ3ZHMvKzluUEdyL3puZS9zOG5xOS9NaHhyak5YUmpVaFlXeGo2VWxwRDcveTJOcVhIMzV1VzQ4dG45Wi83eWVRcEVDS1dGQ0REdlJCVFJRSmxTUUNXUktnZUNYcTdra2gydDZOenJZZUJDSzVPTC9Zalp5d2dxUmJSR2NvaVBJeU54cFVMMm92SElHY3NOZE1KcUdxUk1YelIzc3g2TGkyWXYrQUJrQkNRRG54RDlzWjF3WVJEb2VIQkRkN1dHcStieHlOcEp0QVk0b0tPaUhFZEc3NkhYZmNvZDl4eHgzL2UrREFnYjJscGFVM0UwSW04bGNSMTVrcXF0TjNkdTA1c3Y3dVZ4cjNBbzJxUXo0dHc2VVJnaVNvQlRTTkVHaWcwRUZBQlpGUVNTQlVrdEx0SElvaVVna0V2a0kveXYwS2ZMS081bytPNHQybWZFd1k0VWZTSTZFdE53Y2pxdk1RclhnZnIwWjE1anVMbytHb2hFaitZR2RRdUJISmw5QjZLQTRnbFA3UTBUaGE0VVBrSkp4bUpKeUpOekVVQ21IY3VIRVlPWElraGcwYmh1TGlZa1FpRWVUazVHUmI3VWNWUlFHejJvOHlxLzAwNDR6MkZJQWtJU1JCQ0RIUGMrOHVMeS9mdW03ZHVoLzI5dmF1NGk4ZnJqTlJxcTZ0ZnZHSkxmOVRPL2wvZGlOeno2ZjFQR1l1YTBVZU5aMmFjWlphK2hjODI4NGhHSTIzSWxMSGVyQy9UWVhzZFNPVTQwZStYNExpODZHNEtJaDhuNEpBUVQ3R2phbkJGMmNQUjkycUY3RGhrQXFnRnpzZTJZb05HSU1iL2g4SmdBU1hTMEtpN1JoYUUvMDkxSlRMaGlINjNIYXNiVlNCeERGc1d2VU82c2VOd3BSQUdwQTdYbXhBZmVJc2RXeW1Bb0VBeG8wYkIwRVFIQzlDaVAydDVkeFNxWlJaTVdXTENwUUpUVTMzcGdIUXZ2U2xMelVCK0UxVFU5UE9rcEtTbXdnaEUvakxpZXQwUzlmcHV4L1d0NjlmKytHYmU3RHNUWlVKUFpPT0xvMkJHYVY5K3dsSXVqOU5GeWhGU3RkcFQxS0V6eXRDVVNUcWRrbHd1MlhrajFDZ0hJemhuVGZqb0tLTWdvcGhtSDFWR1NyS3ZVZ0VYRGhZV29KQXdJM0E1NytBQjQ4K2d5WC8rV3NzaUVtSWpCNkR4YitaamlsR3lEemwrbkVvdStNcFRQM1BTL0RNRXhlRGJSNE5Ydlh2ZVBEUWMxZzA5OWRZWlBTeDNmZVRpZWxXajZQN3NmSkhXMUgybTF1eCtQeC8vYkU3NFZ1cVRyUjZlM3Z4d1FjZm9MNitIZ2NPSE1EaHc0ZHg5T2hSZEhaMklocU5vcXVyeTlwOGxVZ2t6RjBMaE5sK0JWM1hDYVZVTUM4amF5a0JrQ21saXBISmNBRndyVnExS2pKcjFxenJ2Vjd2LytFdkxhN2owU2ZhVXBWbFZqUWE2M24wZ2Y5OWNkc2RkejhWUjErQmdCMlBZc1BRZE9nSk52UWtPa0gvSW9Fc0NaQmxrYnFVdEx2eXVHVjR2YTZNaVlMOHZBQ0tDa0lvTDh1eHhxVE9sSW1DVDcxanN5Snp0eHZubjM4K1JGSHNkN0h1emViZ3NoVVZLSk43TTRzS090SlZVdzJBT21mT0hHM09uRGtQN2QyNzk2MnFxcW9iUkZHY3hsK3lYS2NzN0ZUMWwzZStmK0NaQ3krNzkyTURVbmFYeHViVWtnUklaa3dSb0s4L3pYQnFWQlNZSW9FaVVrV1I0SGJKY0J0UTgvdGNDQVk4eUFsNWtaL0h6SDVXRldEc21ETmo5dk9zQXh1UUhwd2ZQMzQ4SkVucUJ6YjdXd1oyVkJBRUlnZ0NWRldsekw2RjlONi92dERVcUJRUnpReE5BYWlqUm8xNmZjU0lFVHRmZi8zMTYzSnljbTRDVU1wZmRsd25TNVRpNEpIV1kwOStadHBQM21oS3ozbXlVRXM0WEVrSGw5WVhlcHFUQkdKZmtTRHQxR1M0M1JMY2JnVStiM3IyTXhUd0lCejJJV0pDclN3WEk0WVhZdXlZVXB5Q2hWTG5MdGlBZEh2SGVlZWRCMG1Tamdkdy9TcW1oQkJxaEtaZ25adVpkME42RzcwR1FQM29vNC9VM056YzlSczNibnpqc3NzdSs2TGI3YjZKdndTNVRxaEMvd2RkWFYxci92clh2Mjc3NmxmbmRRemkwZ3lnRVJOb0tlTVhzWFYrR3JPYkFKSWtPZTc4TkUrK3RlLzlaSS96UHAySFJKNVRZRE5WVTFNRFdaYk5DaWlNTldDT0lhb0pOK010WWVBR1BTM3JTQ1N6Z2RmSnZWMTk5ZFdOQUg1YlYxZjM2c2lSSTJkS2t2VHYvQlhKOWE4cWxVbzl2MlBIamsyVEowOCt3QUF0RzlTU0ROUlU5QTJ3bXhHSHRXekZPTWJiZkoxUVJWRmdQeURTaEZwdWJtN0dpcnpUZVp6M09RMDJJTDFEd1d6dk1DOFdjRTZocVhIRHJkQ1VxWnBhcm8wSlRUWEd2VmxQb3RyYTJyY0F2Ti9VMVBSQ2NYSHhsL2hKdlZ5ZlJMcXV2OW5RMFBETXlKRWpkNW0vUEcxQVN6cTR0SlNEUzlPWml4cS8yTE5DemV2MXd1djFJaEFJV0hzL0N3b0tMS2lOSERueXRDeGU0V0JqVkY1ZW5nRTM4MmFhb2FyZHhSbWdzK0NXU3FVb0ljUTg4TkplV05BWndHVzROd0Nwc3JLeUZ5Kzg4TUovUHZ2c3MxZm01ZVY5aVJCU3cxK3VYSVBuMGVpZTV1Ym1wNmRQbjc1ajE2NWRLcE1mWTNOcDdOdWtEV29xODB2WEFwcTVFazhVUmZhWFBYVzVYQmxRTTVldW1Icy9JNUVJU2twS3JHWEdwM3BGM3NuVVNWdVlmQ3BrMm1tbmZKejVkb0J4TEh0YTFKd3JoUUU0R0hDekduMU4yQUhRbTV1YnRlWExsemVrVXFrWExyamdnbWEzMjExQ0NNbmhMOTl6R2x5T0M1TXBwWTJ0cmEyUExWeTQ4RSt6WjgvZWYvVG9VYnNyNjNka045TExWWHJ0K1RSbWNiSFRSbllvaWtJVlJlbVhTMk9CeGk1ZHFhNnVQdVhMakxsakc0Snljbkp3L3ZubncvenR4RXdnWk9UaDJDdVJTRGlHcG94N000ZnJCVnQ0cWdGUWpmQTBCU0IxNzczM0p1Kzk5OTYvTEYyNjlJVnZmL3ZiMDBPaDBFeCtxQ1dYQWJTRzF0YldEY3VXTFh2cmw3LzhaUytURzNQS3BiRmhhQXJwNDRWVVFtQkdDeHBBK2tZRkFVcEFhUHFwU2tCQlFDbW9UZ0ZLQ1hRS2FEcUZwZ09xUnBIU2dKUUdKRldLaEFva1VrQnZpcUFuUmJEN293TUFEcHhWai8ybjJyR1prbVVaaFlXRmpxZUFESEhlMUc3Z3pCTjcyUk5DN05WVHk3MEIwTFpzMlpMNCtjOS92cmU3dS92NUN5NjRvTW5qOGVRU1FncjR5L3ZjYzJ6QllMQ3VwYVhsRDkvNzN2Y2VuejE3ZHVNLy8vblBYZ2VIMW0rbnB5Mm5waEppZ2RESXA2V2ZpNFFJRUFXUmlwSUlTVEp5YWJJTVJVbi9jbmU1M1hDN1BmQjZmZkQ1L0FnRUF3aUZ3c2pKeVVWK3BBREZ4U1VvSHpZTVZkVWpJRW55V1hrdnp2akpnK1BWeHg5L2pJYUdCalExTlZsVENoMGRIWWhHbzRqRll1anU3a1ozZHpkNmUzdVJTQ1NRVENiTlRmV0VYZXFzNnpveEwrTnhNcWNXMk1rRmlWSXFBNUNSUHJ2QXVxcXFxcFJYWG5sbGFtRmg0VFdDSUZ6TVgvWm52NUxKNVBZMzNuampoYTk4NVN2dk56VTFtU05OckVPekZ3Z3lISm94MDh5TVFoSHpseWhsSzU1bW9Zd3RFR1FyRXBqdEhHYjRXVlpXaHFxcUtsUldWcDdWOStLc1czSlNXVmtKajhkakRzZWJlWWVoRkJpb1VVMGxxcXBhNGFuWjkyYTZOU004MVFjSVQ1TUFsSWFHQnFXa3BPUUZBTnYyN3QwN29iS3ljcm9zeTUvbkwvK3pUNGxFNG0rN2QrOStkY0tFQ1kwTXpOaXdNK2tBTlJaMnFnRTFxOXBwZ0kyYXhRSGp1VW1aNTY0Rk5ET254aFlKL0g1L1JrNnR1TGpZeXFtZFRVV0Njd1pzQUZCWVdBaXYxMnNCenUxMmczMFMyT0hXMjl0ckFTNlpUR2JMdlZGS0tXSFBlRFBQZDJPZW1DbkR3Vm1BQTZDTUdqWHFkUUR2dlBEQ0MwOU1talRwVXIvZmZ3MXd3bzk1NXpxMVlXZFRMQlo3N3NVWFgzejdpMS84NHRFc1FIT0NtdW5PckdGMUk0K20yNnVkQnRSZ1Zqek41NnVUU3pPaFppOFVtTzBjWnVOdElCQTRKKzdQV1JlSzJuTWVlL2Z1eGI1OSszRG8wQ0cwdExTZ3ZiM2RHcUNQeCtQV0FMMFptaHBEOUVnbWsxQlYxWFJ2R2VHcHNYaEdvSlFTdzhHWjRhbDVzU0VxRzZyS0FKUWJicmpCdlh6NThza0ZCUVdYUzVMRVQvSDlGRWxWMVJjUEhEanc2dTIzMzc3cnFhZWVTZzBSYUNrNzBBQzJLSkFCTTkyY2QyYkRUdGFseWJJTXRwWERQa2tRRG9lUm01dUx3c0xDakhZTzhtbWRqK0pnYzFaVFV4TSsvdmhqTkRVMW9hV2xCVzF0YlFQbTNjemNXeXFWZ25sS0NBTTRZcXdNSk93MUFPQ2tMSUNUQWNpYk4yOHV2K2lpaXlZSEFvSHB2Qi91alAwRnVhZXpzL09sYmR1MnZmdkZMMzZ4alFHU0U5QlNXWUNtMm9GbUhueHFocHQybDhZQ3pleFBNMTNhUVBtMHZMdzhGQllXb3F5c0RKV1ZsU2dyTy9lQ2czTUNiQURRMmRtWlVWUm9iVzFGUjBjSGpoMDdobGdzWmgxLzFOdmI2MVJZZ0FFMllybzNGbkJNZ1lFRkhGdGtFQTBIWjRkY3h2WGVlKy9WVkZkWFgrenhlQzRIVU1LUmNscGhkcWk3dS91bHVycTZIWk1tVGRxUHZpcjRZRUN6NTg1WVYyY1BPYWw1SUFPVDQyVmRHanZyNlJoNnNrMjM3TXluV1NTdzk5UnhzSjJGMGpRTjlmWDEyTDkvUDVxYm05SGEyb3EydGpZY08zYk1PdHV0cTZ2TE90dXR0N2MzQTI0TzdzME1UODB6M3dZQzNGQWdaMzVNMnIxNzk3aUtpb3FMM0c3M1pSeHlwdzVtUFQwOTJ6NzY2S04zeDQ4ZjMyZ0xGNTJBcGc0Ulp2MkFCbXNQQnlnUkNCUlo3aGQyc2k3TkxCQzRYQzVyM3RQbjh5RVlEQ0lVQ2lFdkx3K1JTTVRLcDFWWFYwTVV4WFAyWHA1VFlEUFYzTnlNZmZ2MjRlREJnemh5NUVoR2FCcVB4eTI0c1lkWHNuQmpBY2NVRndZQ0hESEFKamlFcVpJTmFyTHRZOUxPblR0SFYxVlZUZkI2dlJjVFFzWnlCSjA0NmJwZTE5WFY5ZHFlUFh2cUxycm9JdGFaNlF5WUJnS2F5Z0JOcFpTcVJxWGM2bkUwTjZXeFFETXJuYnF1VTBFUTRYYTcrZ0hOSG5wNlBKNStRK3htNkZsUVVJRFMwbEpVVkZTZ3VKaHZsandud1FZQTNkM2RhR3hzek9oM2EyOXZ4N0ZqeHhDUHh4R1B4eTI0T1lXbVdjSlRDM0FPT1RqQ09MaU1YQndET0NmUVpmemR4bzBiaXkrODhNTGFjRGc4UVpibGkyRnR4dUFhb282bFVxblgydHJhZHY3em4vK3NuekZqUnBzQklIMEFkK1lFTmZhRWpYN0ZBTWFoV2Jrek5vZG1GZ1kwVFljb2l2RDV2T3p3ZXIvUTA0U2EzKy92MThwaGhwN0RodytIMSt2bGQvaGNCcHVwQXdjTzRNQ0JBemgwNkJCYVcxc0hySnF5b2FrdDl6WVk0TUFXR1d5UU01MmNHYWFLZHBnNUFRNkFPSDc4ZVBtUlJ4NnBxcXFxR3UzMys4K1hKT2t6QVB6OGFaMmh1S3FxYjBXajBmZjM3dDNiOEkxdmZLT3BycTZ1MytTSUxYVE1CalFXWnV6L285dUFaamswNDRJZGFHYllxYW9hRlNVSkFiOHZBMmhzYjFxMnFxYzV4RjVlWG43V25NckJ3WFlDRll2RnJOQ1VyWnFhN3MxcHIwSVc5NVlCT0YzWDdWVlVaQWxUN1pBelExVXJMK2NBTnNuMmQySkZSWVc0WnMyYVlTTkhqcXdLaFVLalpWaytqeEF5NGh6TGszMlVUQ1kvNk9qbytHajM3dDM3dnZhMXI3VTBOVFhwTmxmbTVNNnl1VFRyNzh4bWJOdm55SUNaemFHQnJYS2F4Mm14aFlGa1NvVWtTUWlIZ2hrdXpRdzk3UTIzYk5YVEREM1BsZDQwRHJaL3diMnhWVlBUdmNWaXNhdzlidzY1Tnd0d3Buc3pJV2NQVXhuQU9ZV3E5bkJWdEFITzZYM1JmdjNpRjcvd1gzSEZGU1dscGFYRC9INy9jRm1XUndpQ01CcldLdDVQclJLNnJ1OUpKcFAxc1ZoczMvNzkrdzgrOTl4ekxYZmRkVmVQQ1poQllKWU5haG52TTg0c0k4eGtRMDNZNW9tWncwMklwUWlYQUFBR0dVbEVRVlF0bURFdWpUS050a2drVTVBa0dYbTU0YXk5YVlGQUlNT2xtYUVuZDJrY2JFTldWMWNYOXUvZmJ6WDAybnZlc2hVV3NnRk8wN1RCQUdkM2NTYmdpQVBrQkFmSURmYSs2T0FHaGZYcjErZlgxTlJFOHZQekMvMStmNGtzeThXaUtKWVJRc294NkVydlU2WmVTdWtCVGRNT0pwUEo1bmc4M256a3lKSFd1cnE2dGk5Lytjc2RZQTRtR0FSbTJSeWE0L3YyNUQ4TE0vUXRBS0pzTWNCMFp3QWdTVkkvb0xGOWFXeHhvS2MzbVQ3RW9TQy9YNEhBcVRldHBLUUV3NFlOZzgvbjR5OVdEcmJqMStIRGgvc1ZGdXp1emQ3VWEwNHNPTGczcS9lTkJaeW1hU2JZd1BUQ3djSEYyU0ZuQVlxQjNHQ1hZSHRmc0wxdjVmOSsvZXRmKzhlTkd4Y3NLaW9LaGtLaG9OZnJEU3FLRXBRa0tTaUtZbEFRQkQ4aHhFOEk4UkZDUEFZSXpRTUF6TThKQmd6VzJqaEthUStsdEl0U0d0ZDFQYTVwV2t4VjFXZ2lrWWgyZDNmSE9qczdvODNOemJHZE8zZkdGeXhZME0zQWk5cEFSZ2VBbVc1eldOcGdsLzI4dld3d1kwRm11ak5tU3hvRkFFVlJMSmpaV2pneWlnT3lMS083SndsRlVWQlNYR0ExMjlwZEdsc2dLQ29xNGk5T0RyWi9UYWxVeWlvc0hEbHl4TnBuT3RTbTNxRUN6dWJpV0FjM0VPUWNZY2RNUHdnRFFFMTBBSnY5WXIvT1FCY2MzdHJmejBpRE9ielB2aDNvc29QTWZtVnphZjNlTjQ5K2Q0TFlZREF6MzdmdDFJQW9pcUNVd3VWeVpRV2F2ZUlaNytxRnkrVkN4YkRTakdiYmNEaU0vUHg4RkJRVVdBVUNXWmI1aTVLRDdjVHAyTEZqT0hqd1lML2MyMUQ2M295WlUzdDRtaEdtR3U3Tmdwd3h6V0NGcXN4OXN1ZmtpQU9Fc3NGT3lBSXpjUWhnWXdFbk9FQnRJTUFOQkRjNzBPQUFzWUVjbXA3RnJka1QrNE5DakNrQVVGdVlhY0xNS2dRd0ZjNk1IUnVpS0ZKS0tkeHVkd2JRSkVteUhKcTlPQkNOZGNQdDhXRFVpT0g5S3A1RlJVVW9MUzFGS01RN2VqallUcUphV2xveTNCczdralZRYTBnMjk4YTJoNWpWVTV1TEF6TjBiN28zZTA0T0RvNXVVT0RacXJGT1FCc0lic2ZqM0k0SGJNY1Rkam9DanFsT1pnVVlBeThXbm1Celp1YWYyVENUWFE3RUFJMnl1VFJLS2J4ZWIxYVhabS9oNkl4MndldjE0Znp6YXF4ejAweVhkaTRjTDhUQmRnYnB3SUVEbG50ektpN1lxNmRPclNHcFZNcHliamJBUWRkMTRnQTQxc25CRnFyYTNaejl6M1lvWlhWaUR1RXVHUVJzMlZ5YlBTU2xBOEJ0SU1EcFRuOW1vRFNRczdQL1B4bGZpLzJ6TGRTRTNablpnRVp0bFU3cmJEOWQxK0h6K1Fac3RHVm5QTnM2WWdnRWdwZ3lhYUxsMG5pMWs0UHR0Q21aVE9MUW9VUDlpZ3RzZURwWS9tMEE5ellnNU14aUErUGs3RzRPV1J5ZEhVUk8xNkRPakEySFQwYU96YlpVaHc0UmVQWUx0aVBkWVFlWjNaV1p6b3pKbjJXRm1SMXFKdGcwVFVNd0dCeHdhSjF0dEcwNWVnemhjQTZ1dVB3U2xKU1VRRkVVL3VMaVlEdjk2dW5wNlJlZXN0WFRvYlNIMk9GbW0yQndta2UxUTQ1dEhZRkRYZzQyS01IQjJXRUFKemJVZkpvVHpMSTV0cUVXRXV5QXd3QUFneDFjOWp3Wmt5K0RMVzltMzBPYkFUTzJmWU5kMUczUHBXbWFobkE0bkhXKzA2eDJtbUhud2NQdHlJOFU0TEpMK0lyYUV5bUpQd1QvbWp3ZUQ2cXJxMUZVVklURGh3OW5ETld6K1RjVGNIWUhOMUQxMUFGd2xNbkRFUnZncUExMDVrVk5vRkZLemNNRzJWOW9nNExLQ1lZRHdHeW9weG5Tb1VMT1lTMGliQ0VsKzI4ejNtZWNtU1BJSElCRzdVdTNCd01hZTJtYWhweWNuSDViMTltamhjeWg5YUtpSWtDcTV5OGlEcll6Vno2ZkQ5WFYxU2d1THU2WGYyUGJRK3lBczgrZVpta1BjUXBScVFrMVRkT3MvSnNUNkV6QU1hN09oRjAvMTg1QWJEQm9aUVBZSndWYlZzQXhKNy8yMGJnUGRyQTVzZ3lJMmNMTWZpQXpONmpiUTgvQndrNTdEczI4VkZWRmZuNitkYXlRSFdobUhvMFBxM093ZmFyazlYcFJWVldGa3BJU0svL1cxdGFXMGYvbVZFRTlIZ2RuQzA4ejNCeWJnM053Y0hiWW1YQmozMlpBai8yN1U1SENZQjJYN1dQOTRHVjc2d2d4QjZCbDVOQllxTm5EenNFY21qMkg1bmE3a1VxbFVGSlNrdEdQbHBlWFp6WFp1dDF1L2lMaFlQdjB5dTEyVzhjeXN3VUd0b0xLQXU1NGNuQU83czJwVGNRT3VuNEZCOVBaMlFISC9Ka3lSUW5XMWZXam1oUDhodUxVbk03aFp6L0dnc3ZteHV6dUxBTm1iSXRHbHZ5Wlk3ZzVWSWRtejZHWlV3T3BWQXFWbFpYSXljbkptQnFRSlA1U081WDYvd0hGMUZuWjhqMWl4d0FBQUFCSlJVNUVya0pnZ2c9PSJdLFsxLCJkZXNjcmlwdGlvbiJdLFsic3JjIiwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFUWUFBQUUyQ0FZQUFBRHJ2TDZwQUFCTUMzcFVXSFJTWVhjZ2NISnZabWxzWlNCMGVYQmxJR1Y0YVdZQUFIamFyZjFadGlXNWxXVUwva3Nyb2draXFBUm9EaW9aNC9VZ201OXo0aWlOUnRJOUl2eGxtbElMM251dUZNQXUxdG9WcnYzLytYKys2My85ci8vMXZLbWtLK1czbGxiS3pYK3BwUlk2LzZqMzc3OTIvbnp1ZFA0OC84WHk1MS9QdjM3OSt1c2JnYitqbi94OTQrMi92NS9PMS9NL2YrQWY5M2pHdjM3OXFuKytFK3FmQy8zNUJoZitQWUYzOXQvcjd3L0oxOFB2NjAvNmM2RzJmLzhvcmI1L2Y5VHg1MEx6endmUG8vejVuZjU2ck45Zi92L3JYNzd3c2tvcmM2TVl3bzVQdk0rZjZmY0U4ZmU3OC9zOWZ3WSs5L0MxSG1Nc0YzODk4ZjF6TVJia1gxN3ZIMy9mOTk4WDZGOFcrUi8vdXY1OTlmLzYxNzh0ZnVoL3ZoNy9iUzNMbnpXNnkzLzlqU2YvMjlmalg3Y0oveUlPZnoxUitOZHYzQ0hGLzNpZFA3Ky9iOVh2MjcrMzYwaGhTK1dQUkozRmZ2NXhHVDQ0V1BKNGZxenc2K1YzNXQvditkWDRWZTkrVDdaODNmTWUvSnBQZXdLNzhsMVBldGJUbisvWjUrLzVUQjR4aFIxZS9nNWhobmkrVnVNYldwalJmVXIrZXI3d3hoWlhyT3piRFB0aTYxSU1mejNMYys3Ynp2M21VN256ZXZob2VMaVlXLzNmL3JyK2Q5LzhuL3k2dm0rNlJNOWQvMW9ybmlzbzF6eUdPK2VmZklvTmViNC8rNWJQQXYvajE1L3R2LzhtUDRncU81alBNbGRlc04vamQ0bVJuMy9LVmp6N0hQbGM1dStmQ2ozWHUvNWNnQ1hpM3BtSGVTSTdjSmNuNXFjODl4dkMrenlzWTJXRE9rOGVZZ3FESFhoeURvdUhSRjVpQ2RjYmF2RGUvTXo3bk0rR0hFcnd5OWdtTmlMSGdtNVZkcWl6V1NsbDVPZE5GUm5xT2VhVWN5NzV6ZlhLTGZjU1N5cTVsUElXalZ4LzQ1dmUvSmIzZmV2YjNsNWpUVFhYVXQ5YWE2dTloUmF4Z2JtVjlyYmFXdXM5WEowYmRhN1YrWHpuS3lPTU9OTElvNHgzMU5GR240alBURFBQTXQ5Wlo1dDloUlVYWm1LVjlhNjYydXI3dVRhV1lxZWRkOW52cnJ2dC9pRnJYL3pTbDcveXZWLzkydGYvMnJVL3Uvb2Z2LzRIdS9iODJiVndkc3JQdlgvdEdsKzkzdmNmbDNnMEo5azlZOGRDZXRqeDF4MUFvSU43ZHRjbnBlRE91V2QzQ3loRkRqeGtkbSt1OWJoamJHSGFUOGpmODlmZS9YUG4vcS8yN2NyMS8ycmZ3djlwNXk2Mzd2OGZPM2V4ZGYrNWIvL0ZyaTM5M0R3Nzl0TkMxL1NPYUIrZjZhRmUvTDV2L3ZqcmJ4NnA3cDdMNkhuMWtXZGVxYU1pOTc3ZkY0ZnljTm1aWW45M3YxTllPNlV2aHBUZUs5YlFhOFpPNWErTnNkNTdiTmM4c0Radit1cFQ4RnJQZHFuaXpwVTFybjIrYlkvNjFMN2pPOHZIaDNkdVY0bTR5QkV3WllWbHIyRnpFNHhmLzdob1N5ekJ5Ty9xZmMzMDNqUHcxbndYYnh2WTBkeGEvWW8rT283N1lzTy9Pbm1aK0w1ZnFXekQyaG1mSHNZSXZleU1Sd1FJUEx4bG5hT3R0Tk5ZTGZPY3VZWE1wbjdJRXdKVXI0RVJYcFhuQ3FuMVBWL2V1ZWIxZm04cjlldTFqUFkrWDBFb0lxKzVXMThkTzlNeisvSHVaM0NoTjIwOHdYczk3QjR1b3ZZdjU0OHYxUHlsOGQxblQvSGdkY2U2MlUvMnJxZUVvSTVVU3docnR2ZkZ3MVJXWkIzZHVjbzdubDE0elZsSGlqek5ZQWsvMUFJZHdINDlwYWtNbjFMNTdmemwrWlhKbzhWbnQ3ejJxdStlSDF0Y1VKRjVmMzN0d2Q1K01kWTc5ekJTdXRtZDk1bDF6YVVYV3QvZGVjYjhEbDV2ZlVoUFdPTmIrL2xtcnl1OSs3dDRpcXg0N1BjcDczZHZmTUhMejh4UjJteFl5UGQ5NHNhdnpwQnY5Z3VkRDNmSmRhUHJHNmYyN0luRVBTdGNJMDFla2o4aXQrbys5aGZualpjYjNyT2xYZGt5ZGk2dSs5c2pvVm85OFlnN3NJTVlsekpDclNHeC9ST1JhQ24wdlZXbnVUN1dsbHVQK2IwbzNVNEZ1WWozN3JQaWRYZGdDOUM1d2M2OUxoMVh3L1lnRi9uQ1BvVGt4U3BxRm5meC9kdHV3Yi9YTjgvL2YzcGhzNTZuWlRTNzNURTJmWGdZYjNpLzJIZGVJNjFyTEY0bTNQVkxyR0ZpRHpzT0tiY1JlL3RRY09CdVcyTmdtQ2Jid2Y4d1ZteFRiL0Vib1dDcGtLblUzdHd2Zk5OQ013YzdIVkpCcWdlR0I3QUFzcHZJRnpadWJZVGpyZXZMQTJVWmUvS1lOeS9sRFNKcjIrWm10NitOVGoxekZVeGJRMWI3eWx2ZGY3Rkk5K0JSRUtHMVFJeHo4ckUzSEQwc1dJK2V4aHorYnF2MDlhQzAyaWJjNTQ1ZUxjekdNOTJycHJLUnI0YXRpYngxZjduTGcwenNqcWxhcTdRV01GQXBsZHJ2dkxnT3lMOWl4UFljRHlZWlJOWEJWeEdiSWk1ZTZkdFAvbGhXVmd2SlNia2lNYTN4a2JYcUxPbDdFTlFYRlUxeFFpRSszalJyVEJIVittSXdzQVgrTDhUQjVzNCtaOFFmb0x4M1RoZ2w5QmdsMzl3OUxwVDNld0Y2b1E5c2RydmRZdlFUK01YYjgrK1krMTJ3emJIM3Q5NWpZaGZpM2RvM0s0dkNVOTI1WVUxNGhUbEIvckVzbHZ2Q3pNWE5qc3hjbnBSN1RSanE4S1EzSUlNZExxQ0h1d3VMZ3lmSWc0MGFoZWNjdXdGV3h1eGxsWVNIQUVUVW1QSjRja1RVSjJwWHNPOFQzTHJiZk4rdU1MSDNyT1BEc2lEc3ZQbHVHQTNXMFYzRXA3RWsvVVl2THBhNXBNRExEMjFMNHNWUUlDNTJmLzU0WGl4ZndnRU5SR1cvMk4rTVNxTDBmSzQyYm82d2g4MEY5dFc0WTR0NXJyY08xQnpuc0hCeXVES0VEdS9WMGZmWTU1MUtLTS9IdjJ2NVVGOU1PVDh4UDl4RjNEdmp4YUZaRzV1WEU1L0FBS1krc0U2OGJ1VXZURDVlQXVGOGU2cWozQk9GQm1VRE5qRnhlWHdGYlVZaU16N2p3V1d2aFJ0cFhoOW5tOTdhZW1aVjBRaFdGdkhINm1LR2ZlZkJNeU5ocjVMeGZJTW5hL1Y0M3ZXMVdhOUhDeUt3NXhuUkZzeDVMd0ZCd0k2Ni9BOCtHeWVSdElqTlZlVGJCYkRQVzdEUzdGaFQwbDRacEZ1TVVRTktZSGtqdHBSWHkxaFJWaWEvNkQrQ1dWckdrQ00rK0dGMHJRcW52N2xiU1lEUmtqdk9aVnpTZ3c5RzhJWVJac1VBeVZYQzl1SWRtVUpsa0o1VVBrREtoaXYwZ1lnakgwWFA5V0hNY1loTGEzMDlxT1VScFhYano5YUgycmR2K1lIN1F4S2hFQVVRa0dDbUxDYnl4WThoQTdtaU5COHJ6UjgzOXZZdDExc25GMGNKVndlODdiZXlJd3JkTXhZdTgxYmVzTjVUd0lBdmpCcTJyMmM4MkF4NHh3OVIrZmIrOENLOEsrZ0E0SUlSd29oajhZQmxqMjZkN1d2N2d4ME5FTTlDS0VGQktDNkM4RzBXUDdKNkg3NEJ4OUFSaHV2R0NvUjNERnowRER6ajNXTlJGVmtzU0FLUDJwQ0QyWW9jV0JQelljQUJPRHdTOThhVllranc3UkhqdjNqWmpkRkp3Q1ZZSVRkYWVPMWo5TWVHWlAzOUp4ckt6YnAvNzVHZmtBdTdnWVpYRFBlRjdlVWlEU2d4cEVUbFJWdEJGRzk5WE5WYnhlZEdQQ3U3RVNhZVQwY0xhdnhhamdwT3hnMWkwRjhBT3lZVUJYdWZVUEFLZUErMGxnc0F5OUJaeEhoL2d4WExHS0Rlbm5leStxazhENWduZ1RoNUlsWlFnM2E5RS9QTE9wWlBVK2xLN2FjQ0gwWmw2M3NyZWJUMEZxQVcwb2lmSGpqeStRRFlwakdDcXJpaTNUd1hRR3ZQOXVFQUZld0Y2c0dsY0dIVUZDZVBpUk01Z3Qyd1QwL0hGVWo5VURwc1ZQdHV0dkVEZk1PTm5uSTFuQVlxZzNIWkJiREY1b0Fmc1ZxWmpYM0FPTTEzNTJZVmc4NC84WDJRWGN3bC9qR093aWJqYVJIQWRDSHRTRmxjUVVNT21uL1RnaUVDVnNRNG9VQXFjb0JLbEl4anVKVnRkQWlaUDhnRE5BRXVMMkhnbGE1Ym1JTm9LWk1ReDNHV0hoZFhnYVlvOVlPdkJnSytHR04rUEpTV2xueVMxd3NaZ2NYL0ljWjNuZW1hRlRPMVZlOG13Y2REeC91TjBGWFdUY1NSMFV6RUhTL09Wb05YY3BoekF3cnhpWUhMM0N3N05xaVZLN0lIV0xnRy9BTTdJNzFvT1N2MXZLN3lnNTZIaGcvRCtBWXdOZ1FQdVBzaGVlS3Rtcms1cXBVZ1RQdnE2QlF3SVJlY1dBSXpJQWdvUHE4Rk9ZWWFKWWdIZDBIeUoyQ1ZIWi9JRlpqMXczTnZ2QUhmT1Z4K1hWaW14OGpKQ3lYNXg5ZVB2eTUxUFRLRzlmc0FGdVR2SDVuSHB2M3RKNi8vOXovNnJ6OTVuUi9kbytTN1lneDdhdGllQ0pxY1kySk9ZU21JNklQUmhaYUM5TERmQ0duTEVJQ1hIU3Fpa2QvYlh2TklLOWJoeGUyLzgrQUFkTFQrWXlWKzM0QkYrQzJWOTBBWlRORE56YUthenkzblRoY0NPUEZ5b0wrQUhtRnRYaUFyNm9PNkh1VEhQa0prOGdzZDJGMkhrekh1N0tDNEhVQlgvZlBETTErTDdVRzczeFVFZGcvTUFNVU9NczhjdlRXa1plRG1jVzk0dXcrdkpFNkxnTVEzZGpqMERSQWZSam91Y0hEQkdXT0JzWnNOZ2NHQWh4ZTRDS1ptS2JnbmRtMEFjZ0diUEdwTWNXZ1RFcWgxcEx1QmFoTnkzT04xYnk0RnFjR1BiUlpub0Myc0JPYVBqd1RKSUs0K1JGd1lWb2xIR2JBanJMRFJUNGhqYjN1UHZkYW8zMlhvQ3VBcW9GTFAwU3pVRFo0Y1dCQVlOWnRiRW1hdnMvME5HWjA0cHBtZk1NU243RFBVRzJOMGYvbXFjR3VBSmRDZ3ZrcEppaG4zQlB2NEtwNDVENXgrcnR4emRoRllTVktNaENHYSttN3Mwb0kyTDY1OVRUUVNTbGpmSVRwaWpYQ1djVHpwRzlEL1BsZzFlUDZIek1DU3gxZnhkanNISEJaaTFXU1JEMjYrclBGZzJManpCK3dBamVCRElBanZtNTk4S0FSK0FsU0dDUFhDWXQwaS9UZE05TDY5QVY1UVJTSnc2d1JrWHhlcUhmUlVCYnVCdEgxZis0UEhBTzl4WTVqYUVWaGdJZFlzd25nL1hOUDg4RHZvaUJ5eEF0VFp6eXRqL1Jxd0g2eitwTUJ0NWVMbmgxR0tHL3pBNCtYSTNtTjdlQzNlbjMxbmxaOE1Gb3BBOFk0RkRlMEZzYkVmUUUyZUExb0IyVUtxTm9SaXB3UjVZVWVDekF1VThvQ2NNSjZZeEFnOXd0bWh1Q3pYRGVTU29sekZYY2ZEQVhSMW5CbW1KYm8zcGlnd0xlZ2ZzQUdVenU0ME9JQXNtcC9sSGJZdWFjSjlNV1BodVg3OHJPTHRvSmE3djJ3VG9wQjVkNVQxWmxWdVREdTIxVEFHREI2ekNaaUxPTUNobjAyOFhrcW83cnc2SUJ0RWhrNFViUytPQ0hqVFdVejhDWTVCem9Ub1llamhNeDFFQ0JPRlRraTIyTTRIYUFYa2ZEUnNDVDNvN3g0c1BSc3k4S3FHSDlDV0RQRERjMkVuQk1NM2tPY2IyQUJzVHhBbmVqMGVMMkRNV2IzeVhtVWplOXNjQXpDczMreFN5ZTlCaDIvR3Y3RkVPTlpWV1JMamJzOExUT2tiRzdMd2RMT0FqaHJFbW5XL1FOWllpaUJaS3ZuQmlSbzFBYWJBMk8rV0gzWHpoTUxFdkRqWXdyTzNGY01xQUZ4NENlanZaUTN2Y3EzcUhtU2xjSFRNUm9YaUpMNElCSTJTWXZBTnNHM2hqWWFTQXR5SWlnV2k5T29IMVFud3o0MktIQ1lQbU1KVThTQnJ2U0I2bEIvaDRMNmJWY0tKWWM0Q0NpMFpHNVdOQmNITlc3Vzkzd0VoaEc3c0M0SUw5a0hVd2RmNS9NdWRnK096WXBDcWdJMUdZUGtTV05lUTR0d3ZPQmVibnNFdWhpUlFYQVM4WDRDWWdGL0FDNWFOUE9DS3RWdFRtTUR5dWV5b1RsOEdDbUtvYnc0cWNwZTJzbTRMRVF5VkZ3UDZzVGdZRFVRTXRVUmN1VGV5RVJxTUhNd0dhaENsVkd3OEhrcXZpejFselpDTXpUYm1nVEhSaE9QYnI1TTZBYUF2c1JXd0JtejVIU2dkY0NEZjIzSHVyQ0c2L0FFT2NKT2Y0ZllYSEtrQ0FYNDJjdUsvVFVKcEVNYnhaNE5iSWZwWWZvQldRTDVxeU8rRUxYVzhEbDRJSzQyZGwra0JHUGs4SkFLV2lWSzl6NVZnK1RqYXR1N2RxNnJBTnFJRHJHTElJampNYnJtQkt3TmV0OW5ISlAyR29mN2pTZjd4SU5lZkowRVArckdLQm4wRTFYeUszVUZJdjd4T2ZKZTFoZzBYU0RQWUM4VmlkZUpkTko2M0R2M0tNRmRNcnM1QUV0MVFiWDZnMUlKQVk3WmhjNGpBZzZiZmZjbFp2dkxuMW5qeDlQM3o5dGZmN3g4L3dLMW9BeUxLQXAwRjdTdmowZ0c2Qmxta1FjM29tTkUvQmJQSDUydVl0Tnd2VEZxU2loYklmeE5BZzhGYmRERmxzQzhNRFBuK2pPZ202YUN4SUpnanRwVXROY1I5Rm4yMGNDVThVT0N4ZkRmTU5xQVYvd2FpRHMrSVFPSUFqMVJtY2FiNU9TTHpZc1doVk1PYzROL0NHcGR4amRZYm5nSGZjb1JnSEpBbHNQMER0LzV0Zi83cjdibisyaDh0L3dDQjRDenlnLytGMytCWkY2UUhHd2JzeUxWZ09sSTRVY1VicExEbjBVOGo2U2pMdGJDUWErYktDMHpEQmdIbFlkTWIyc2MyYnJ4VWxGc2NvTDZtaUF0K05uQjc2QUFQeHhhRFRGaFlMT1MrSHlEOTB6b3ZLTTNMRTNzNDBFeU1iTkRIdzBsNTZnZUs2MTdpWTkvenFvL3g4cjM3VDFtdXU1UTc3cXJGRXhndnZQdEVHeUcxa3E0VEU0T1h5UnJZdXhPZFRudUFPejVzekY1VjVvOENsSHBOSENIS1hUTHdwd0NURUlRM3duTkJxQkFVS0hkZlQzQnRCMTZONi9POVZRV3VmQ0x5VE93cnVyazBJNGp5UFdEQUtCUm1tTFhwRVNLTW0wd1JVSUhsdUNWYXNtRGVIeXVFMVFVbFNZQ2VWZUhLRzNmMGpBdUVOd3dhR04xSFpoZHFKTlY4eDJkOEdCUU1iT25Rd2hoaVVka05XQS9qOEs5QmxLWHhiNnVFZFNITk1HbURuRHdqa2cxZGdLYU9iMlljN2FOWjZCV3lnS3hsS01xZTBxR3lzWlBHcGtQU25pSlZJMTFHemxwbmxYNTdXeHRPUUFnSHFtaFFkN09yckNFL3paZWtweGhoUStuaXVzREZjWlRnSy9qS1ZSc1cyRFQzL2FwTG9yeHZGMFhZVEFSTXNxT0NPSXFWMnNid3N6TkEwNjVTM0ZCbHZEclBpbndZUUtoNGlucmpiaXJVcU9ua2hpUUtSSSszaVJNVUE3UDdNc3VDZ1kzekI3d2dlUkdva21ZQThFTW82aFZFUWhEdWxjRlArMkExNE92M2JpUWFVaXdJM3puaTh5Rm5IMXF3OGJudkI1VGhKaCtXSEpOVDhKaFR4SmJCSCtyc1BPcTRqUzBYVmcyOE9TZTBjK0FqakFGRFFuR3ZZR040eHNkRmNlR1l6RlpyaWREUUMxNzhMcGRkMGEwNERmZ1JxMmlBazRWUE9HV2VGdyt3WWg5cjUyV0F3NDFQT3JPR0VKaW94dDVmNEp4dDNDRTBicmhrTDNsVTBFMHlBWUFUTytJWFBud3NXbmlYYjZQYUtUem9mdFhuelRkV2dOS2FWOTI0YjFEWWwydENzY0RNQ084TjhYMWdOaXR4dTdxQk94RHUvRDdnSDVNbmNEVXcyTTF0QUF0RDNXbnhNalEwWmNjUTZvQ3R3RHdsdFJpU2dHRCtJM1Jmc1UxUGh0aSswRWgwYmpYRVJ3ZVFWb3NnalNkZkFTMXlZVGRlZUVpbTk2dDEyNWlDRERLK083Z1Vmd3J2aTBhMFFMSWJDM2hYY3pHRkpmcCswUDdrUlpCZ28vT1BJZTBuSmFBekFzVStCaDB5MGczTzNkS0NSemRsNG43TTlRQkpjVk8vbkJKTG5LOGhHRExrZ1JGcGlCdmFiakR4UkkrQkpWSllFRll2RXBrUVVTSGVENUhGdGNNenRMcFFYNlNxWHhpVWtSQUVWZ0YvTnZQaHIxdG5BTGlJUXJXRkhHSjNzUmNMODhicnc5SVN1QWlmZVpzNGVCYVVhRis2U3p3SDJ3U0hob2EycDBZQVBDSnlnMC95RVhiSUw2enc0NEZmU0NBZlFHSzViMGJ1UWY1Z1JSelpCWHBjYnlxRGI0MEoveDc4UmpXNWhLSG5BcW9FUnhqL3VMR3p3TWNuTCtINC9WdmlweHFnV3l3NCtLaWF0OWVjaVhNTnYyaDBxa2JKYndCeG50dWcyOTExeVlhbDBINVkybTV4UFhsR0pRSGx1TVNNWUtLTjBVUldPaEJxcGkrRWJuWE4xcDFydCthU0dneUpBUGlVWmNOaGNTK01jWWpCakVvR1JGU3daUDhQNFJQbi8yM2RNQWg4TUdPckkvQWhvb1daLzk3WGVQYWRKMCtLOFc4bXBkQ3hKZG15eENlYkpHV2ZEVEZoRmZjRzYwTVBCQ2IvZmpzRThzY0Q0NlU0eG4vZS9jRlRZQ25yTUkya1NKdHJTeWNxQWorQmRNU1RoR0xYYTgreFIvTityWWZ4WHArRkxiVmpQMUhSMjlnMVJPTUYvSmYrejl1ZHUwMkRBRnQ0T3V1QkVEd1EzblBodXdCUEY4SmZFM2dmNElRNXg4c1VBd0o0RDN3cWZ0TjBYNnlZaDErdUQ3TVprczh3Ti9LQlFnQlZ4dERXWFB6YlQ2WXZZaWkzQWZ6dlpBbDkxN01nZnkwSCtKZ0hpVGR3UE9DQ3NXMjQxbFp4MVhEaysyS0h4ejNodXJqenJhaUJOYld2a28xK3RoNDhoZGxyLzRlYlhQKzRTejRTQVVqbTNZRUdhTFVMRDhaRDRUQ1l1THNPVDhubjhWL0EvTXQyQUE3bXlmTGhmQzdnYlJ6WTU0eHZlajRVR292c21zNlRqZjNYQi9qYnR2L0xlOFlhUVA0c0RSd0RJd0Zpd29Wa1RmR0o2V0F5Rzl1Q0RVSFpRWmRHa2JxazVlKzdoL1hDK3ZTeEwwZzZXb2xVeXRBTk9PS1hJMllWTVpic2pDZEM1TkZGN0RHODUzMkJ2K0E1SktkWDVDL3F2a3p4S1pENGJ6WUFJaVNNemxXYU5xdUd6amlDRkJGWUJyb3FYOUVHaFpueFJEanc5eTlRV2lhUThTckN1ZkVIbXFPVkU0cUxQOFVsUTVBYjJnUVZLQytXYlV2L2JwT0Z6MUdDWm1Ka1A5aFJkSGMrMTVCY0dNcUJ3dHp4WHVqbU1NOEsxb1RObWh6QmhKWjNjOUc4endhQVJUNHp0WkFoUDMxalBMQW9sejV2bU9tWStJTjlJaERjajJYR3g2ZjY0VzR4bFNiSndDYU5ad1E1cmNMeXN1S3NuUVZsR2FUUjkyWEFjbjBtYmtydlhBVm5oSWlNZW1kWkZUdUM2WjlvMEsvS1pmTHEyMWdZUGphelFkVTh2a1lTdXI0VHhpUHdYaWJSWCtPZDRQUnBUZGtUUGpOVThvcmVzWlhiSUJ2ODMyalpTUVVhNkNycmFld1BxTFlCOGg4MGZ4ZzlqLzBCRUxHemNuMWNTR2RqSnFaa2pDUFNWVUloaURBU3pjcnZZT1k0aHE4SHZFZzc5WWx3dTBNbFByamxoTHNWVEdRR3BVV3I2ZmdaWkMwcktWUEpSNlp3YTl6K1M1Z1NydjJZemxBNFRUVkhscDFWZ1N4Ymh2Q0xhWUg3dTVVajNEc05nQjU3MkxEeUw4eFJQd2hnQnRVQ0xaNTlSZUFsWkNHRHhPUjRvdDIzSVhsSlpJaHZMU3ZEcTFxWTZRU24yRXlBQyt5RE5UUytYdlBKNUQybTZSdDBMQlhUR2NhbzhTMWNURXR1dllOMFZTeXMrY1BIckVPVllJTmdqdlFrQkozNzQyMnhrZGZ6bUhTb2t4M0FXSXhqVzhQUCs4S2p1T01iNElNTGhJQ0lBSEJSYU1UcnRXZ21mZ0F6QUFudkhQY0ZSdkJicUpOcXcrc2hqTE4zSkI4b0JsK3RlTFp2UWVHV2dZNzhHTEpTLy8rNjQ3bWZ5VXo5MHhEaW95VG9kY1R4NExBZy9qSGhic1ZoaVYyREdDQkgrSFNUZ1BuRlU2TUJqOThQeGt1K2ZqWDhOTjVuQW5YYSs1ajZCQ1dDOFhBMlFxQlFqQUx4TGxDV3VGR2tsdkJYSjlsZEFRK2d5WkdLTU9yaVVZQndBNHVERHQ1WVU4Z0NOR3FEQVNyWU8rWDRZTGFRLzJjTjlxMGNIZ2JLUVluQjRQNjVFSmlKUGZwYmprSGNEMEJLdDRub1g4YnZ4eFVqeXB6TDRZcVlHZmpSQi9RQjVKZ2tTKzhEd1MvWDF3Y1lLaTFlQ1NrQ0lnTFNwN2J6T1lrSHhkbTZvQnVqbXcweWd6a3hqM2xqSncycjhQd1krcm9uaGkza29aNXVNVzB5Vjd0TXUzZkxPVUNDU0dRVXRMZWw3UlJuTHdQMzNTRGhTVXpHWDhyKzB2RkhqT1VIdU0zbHBEUitiUDdCdWU0SEJNYjN2NmFSK3IyTTBveHd2TG9CTVRSZUEvcU8wbGFVSE4rYklTbld2U0NrQmk3eGlUeC9SeXl5dFV5Z0YvQkJyZ0NodWs0Qk5VQ0xyNERoNGE1Sk5OSk1la1JVSlBWWFR6ZU56Z0ZhVTQ5dndpSWlnWVloZVN1VXZjUmtyQTV2UFlCSTBiRGNZeFlSUW54Rjg1UHNUckJLUmNxS2pWWU54aGkraDdSQnJ4S0xzVldjU01YWlltQ3hMamk3Y3E5ZkRLQ1VDd3NDclRnTEZrbytQNFFSZ09nQi9qQy9yQStBQTV1QmFPd0Y4QWNDQXFFbUdqYXdKcGdTN2h0R1hTQi9mS0pKQU5sTlJSUld4NkVaTitEZGJqbENONGpCYnFIWFZvcHh6d1MrRW02TXY3MzRCVStIR0ZtT3R3WXc0c0ZPZk1IYUZUZ2pNbTRsandnSm0rM1dtOUVBcXlRZ0dPNFl1Q2hlaEszZDIwcmZ1QUFGdFI1QjRQZFNIN0g0SCtnUEFHN3FxOFBsQSt4cmpNNGlsY3o2V0R0aTZWRzBYTUQ4MmdjdWhHdyt4Z0EvOXVYQnFQUEtyR1JzUTBXQ2txTmd3TEp5RnEyZTlRUFFtenFmM0lScllSTHExYUFQa0lNYmpXOHc5bkxTb3g5V0VYT0g4K0wzeHA0TWpIOTlUZm52Q21mbGZnS2MyMFRXOGI0alh0RVExWG1YOFA2V01Cc1Z3SFpCM1c1ajdvQXRrQ01vQkVTVWdobEJTQkdjVzUveUd2WitrSjU4SVphM0YwTGVZRHdzVUxvYmo5alI3bmJDRWptZnRCYTBJcUI3Vml4aWt0a0xzYWpKVXZQRk9OZXoySlhMNUhkRGk0ZWxBWWNWUVNCQUVhd0t5RzV1RUlxQVFiTEFYbUFMY0I1SXNNVlNaUm85bVplUlFaWnMrZDdvMVJyc2NEUXl0QXllNlRtMm1RYzRvNlYvb28vN00wc3hBYXQ4MFlvanIvZGRNSVdlcmVFU01vZGFjSW8zMXMyeWh3U0EyUEdZaVJ0bkF4UGNsdjRCQ252ZERVOENXTTBJR0VSdHRnc0xiRVJHZUpoN05RK0ZQcUxuR0xaNlNtMEF5dFdFTkkrWFlzWjZBL0JBaFZDajlWaFNjR1B1TUFpQUNKOEg2R0RXTFpyYlJ3YnFRaGJCVCtVK0pka1pzajF3MmhiSVk3QU53QUQ4ZFVZYkZ5M2d5ZU9hV0llTkIvOHNtUUpVMTJyQVFiMk0zQ0lYZ3pIZklSR3N0ZWw2MWpkWG8vaW13WkRxVkpHNE5pK3pmNXQ3ZjRESzl2Wmk2R3MrSUR1WEdBNkFJTnpCTU9YOWpmR3IzTDkzSEpZVkNzbk52N0pxTDA4VTc3UlByU0VnaDBldHByY00yUXdsUE9DZE1LVUdpM0FjaWJWOW1xVU14Z2kzVmVnQXNYNXFReStzTXBUS3pFMHlDbWxwT2xEQVNnWXhpTGNIWW1SRXorb0I2M2JBUVIwRWpzMTdFM0kxdW5VWEQ3dFdVVDBNTURmTTJ6SXpYdTNSam4yOFBqQ2hXU2RvY0EydjBMUmRZTDNCVHNPVmxjTlZlWGJBTjdxMnQ2VVZKb1lBWTcva1BNU2VhL28rMExkREE1QmtOQmMvaEhETEJMSjU3MkpRTm9ZVHVWMnNrZmdJZVFZbnZCVlFQakpFSkJqRGZEQWd3TE0raDZXVEZlakc2a0lGKzR1QUZ4WVpFemI3QXlEdWI3bjJDeFJGYmdBMlpyUmEzTk0wbXBVdmdCM2pJZCswd0hFYWNEdjUwUlBiVDM1NUxHUXhId1Qyb0d0VEo0MU83b3h0NFhkU3JqVjhlS1lFZThDVzNNZ2lXeFdNVnRZcFNlYUtBbDNRNjdRY05nZnJJUTNNNVhJL2tCWldoRXZpK3BOT2FvZk92ckFYdDRXbDc3REt3Mnp1bER1ZWNIczNqSmhlRU9GbE5lU2ZyRVBWMWticlJmamlMMWVMMFRTQ3pKZWc1Y215YWF0VzFBUjVpNldlKzBNSmNEd2cvd2NFQlMvTzJZdjF0bkdNT00vM1JhK240UktUWkR3UVdBQUQyd3pqcjJneGdMVmpTaVZNakFXODB2cnZIdmJmbjFWVGJURHpWeU1SYmhaQzd3d1Faei9EWlpoTGFUeDFtS2c5R0tDbmtLQiswRFEwS1dDWnBneWw1MU8rMEdSQlZqSk5YQWRtQmtJRkE0L3BDbXdDZ0FoUTllaXF6QkFhMWVhbnZ2L3FxZjQ4L2wvSmpUOHZNUEpsMGZ3NjN3SXBIQnVGbUJSYzZZa0NoY090Y3pzeDNtQ1VFb3FibW9GMUhPRDNFekxqd2ZsNjFYZDBQSXJIa1RFQXlkeDhTc2dLbEh0MTAxMnNncnk5N01NTjExcXYrQldvQi9NR0I3TW9zS09xMllQOFQ0dnFCQ2pWTkhJQy9tSnU4c2xnSitTdlllc0FRQmF2SlBQcWtOTU1HSmxZK0c0Y0IzZGtPMEQ2NlViNGZrcFFmbFZzdWs2QW5SVTFyN3NhVHpYYjhhemI2a0U0TEYrWURTZFo4Z1VCWU45Z1Jld1l6bUhqQW5selhIRUN5R1BaNTB3Z25oTVJXc2FlSDJzNWdSMUFWWmJtdzcreGF2bGIxMGtQUUZ4dXFIVGJKdE9NaFVBc3NIK1B4WkxoRzJKOG5xNzhJeG4xMTZNZDBqUk9VOG1GaEV0dVQyejlzMEpsR1Fsby9yaVAwSG8wdjZJMUh2aE1zem01emlBVlV2ajVzMDQ4NHVxWEZ1akd3VGF3dXVXazFZTGxWWGhOaUF0MkJjNkVId1pTbHB3TkNja09BaTRpVy9CejNoSE9CQWErREE3TWYrVEpYT1h4eTZEOWM1WC84MlYrVU9iRm9ZbHNva2I1UVk0TzI4REVBNkJTTU16eXp2SExWb20vaENtd2hwRlp4VkJ1dThRQzY4MWFuQ1JDQXdGalB0RTF5eDRFSVZDYisxZXZMdWRGc3dMTUJpY2ZzUnd3Q0FBbFFCUDZBdmNNbWxhV2gxZEQ5TEZhc29NcktYUTRuQWRFaUlnaWlqQ0EvUDVhZlY1REVjMUE4bmRhWnJDUzJ0d2hmWWJ5QjFDcFRQd0dGMTVHT0lOTzA0UUZhTjVtay8vcHFvME9wLzFMT05QM1d6WVliSTUySnlUUS9ZaWpiTE5rSnBmU3RKUUJTMk1kdnVXeWVSb2RLbTFqOFZ6c21HNWdXTU5Dc2tEdVBXYVMyeHNQQTMwWGlHckcvWElSL0FPWW9nUE4rdUVXMW9WRDdFTGdCYTluOU9lblljdFdqR0tjZy9VVnJVMDQ5ck9hL252SE8xY3ZPMFVQK0RhY0w1UVhzSG4vOUhPZnBIZy9KRk5qbXVJdjRHMkoySEcxL1RVektUVjNEZkNNWnBQWTViYnVDZWUwMUh4dUNDTzZGcXJkVmNiT2NVQzJKSmczZTFtd1pZa01vQjFFamd1d2pCbWtpZ0JhWUdZMDV6SHJmVVJUdjNFcE9YSFczMTU4M0JVZVBPMkNZVDErWDdQa2hGZEFoSThYeFVqaVFuaDNOZ0x6aUVPMi9tRmVGcjd4cWhYa3I3NDl1TTBPb1FRdnNWN0xORW5aQTlxQ0ZiRWFjejFtSGl4bWZNeStWZVB0N09vRE9ZNDYwUEVmcXdNcXYzK3loR0Z3RWJYOCtRQ1crQXZhd2FqdjM0TFpPSEJOMnpVUnUzdExhUkF2WkJiTWhLbXd6Y3NhSThqRGpqZ1JDMTk3ZldmOFFJL3NLeXhDWHZ2bFltejcrbGp4YWkyTHpTUlpQcHZ4MGJmdExpL09BZS8xOXZzRVZYMnVCM0tOMjJ0WW0xMnRBVUhGMFRzd01KNjJ3dzNSUlY1OFdjOWtqdVpUcG1JcGtDNEJTWVRnUG5pYWlkbUwyQ2pRSzFiaUJHYW14ZDVBTHhOMTJpejhlUW1nSk1OS3BsVHZhbTBBVUxzQVk0Vll0aHhabXdKSSs3Uis0S3p2VDVMbHQ3c1hMdFEwbVo0bnZQQlBsaG1iejJaSStBTXJLVjZEWnJIaEZ2MUkwb0hLbVBRblZ3dGo3dGZpL3oydXpEZmJOb0FjNWcrVHZVYXhPa2haSkFBVENMWWx4WHh5V2ZpVytreklyRVZRQWZyYmpCNWFvSDh0Z0FVZ0lTQmQxZVI5WVhkbkxUd0ZHUFMyNThzVldKWUpnaktMSllvNFh3MFZWaFhBL2hwVmczZGNyOTBYY2dKMHFoaVJoOEUrV2lwVExqT0NTTmVvZHhzTmlkZ2JXOGxxdjhaaW80MFZwV05TeG9Qc1h0azZCSHpkKzJCeWdsSEIrU3ZBUWJhQkc0LzEzVWpUOUFYWmQ1TUlzQm1yZE5rSGJIaGtiOENiejlYTVZHMW94eW0zaHNzK1ZtakRDa0I3b0hNd0dyVGlmbm5CdDUzL2krdzh3SWZDNDViN3k4K28ySlFKWXB0MlBVQnFqb3ZFZmlFcTdDbklOdkNEdkFiOGkzMS9DZ3dNZW12NTB3T2hneXNBdm5KRzBBT1lMZDZYajJ6amo3bE1rTmpIbTFkYlFsbExrVjB4RG40YmRoa25tbytrdG1iZUZJbDVQb3NXUkM2UER2SlRFYzQyY21md0Q0N05xc010UjlTc3haUFh0MFVMRk5qRWZiTmFVTUlMNTlNajh1d0tvN3V5clhRRHkxL3lDQ2dTNWl6ZktRMWZCMGJBUTJiYzkyTXMwdG9STTFSdno2ZTFDZE01Z0ZMUnlxcjdtaWhOQXF3SGlTRDJOT09hMGk4M2FtcmY2a28wNTlsTnltUmVmcFpmZFZjQ2MzMExXd2tsK3VVZ3NVVS9hMU9zOVVrblBXbjlaWVQ5M3ljNkZOLy92TmpmN25udWVFd3R5QlpJYWNFdmxvVmRlTEhSb1QvNCtSZjhCYUtHdFJnTkJNdklDYnNCOTlmb2lJbVJiMDZVTlYvdC8vS08vN3doK0FZVHZpeERyU2E4N2M1RmFhM3dTUkhQZ0RCMnVHY0hmZXlvODdyeEF5Y2E5Vm9oZ2FuVXVvU1RQWkFnblNJQ0VZTmVDUVpaUUhsOU5hNlAvN1Q3ZzBjMjNSbGhzUkRmb1Z0S0VkeHhlajh3VWJOWUpJV2hSeWNCZUJsa2JSRXR2aDlZeDdYYy9JQjFRMjNSVjlRT21kUDZOdDhEMHArUi8yVTdGcCtIcEUxNDVFSmI4WkpjRzhaeHdTV1RLZGhmSzlRR1hxSHBGdjFtU0dEaFNzc01NcFNZeDBCaGgybmJVWERMQlhNd1poNEdjUVVSenpCbmNXQkxzWENubVRwLzBVVThjTGF3RDNpQzhEM1JjdGJiTFBSdG4yTlBhTGloU2pRUnFsV1E3RlFiNzl2U25aR3pkMWx6Y292M09oOWZGVUthdHZWNUNSTm5NTXhrcXNFRzY5Z0NYc1VPVHZ2UHJyc2dIYmErbnh3UC95NHo3TzNEQVdYUVFuMHBXNGJjL09xUnBVNTRsOVBSQ3I4d0F3ZW51TnNWMEF0cnVOS2pKNzRQVG40Vm9iRU1BVUV0OGY0YlJKT2ZKNzBXTDVyQXd5aEFLdXZkclptNWJYaTVMTU14N1dyNDlIUGJySHVaM1M1bGlMaXRvV1lkei8vazgzN0JVaGFrSURaQVZsdDgrRUVxTDcwa3pnR2lqVk5ESG4rVVpaMllDczlYc2wwMXRzVzgyVTZ3Yjk4TDY0NzgzZ2FRUm9tb1ZOaXhBOWduYmdtaWd4ZXZ2QnlHTmR2THRhejdlNUM5TzdZS2xGNkdUU2ZTMUsxdVpHdGhNdWltVlhPM3paR1h3QUF0T0cwNDNTNDRXSWkxNEFhQXkraEpUbWlqZGJVTlZGekhmbzdHU3hhOEdnYUNTL0V5a0pwcVlVZTBUdGdRTldzSGVPa2Qzd3FCdzQzVjlySkpBM0UwaEhvSGJQbTh4UXNadHJwdk9TenZrMmE2VUtNeHVqS0FZMEVpWUpCV0JrUGp6SzJjZXBLVkxLQkI4SzFyUU1wQ01kVS9iQi9iL3VCbnc5WUZ2M2hhdEpuRnNva0F4YzNCZVJmM3I5YnVSbmZ0ZHNhaVBuYmRCUXRSY284OEtMeDJRcE10dE9FUnJsb3dYSmFMNWZJcjRsdFc0Q2Y0S3lzUUJGYlR3dlZ4K200TlAwQWZaaEozUkIvSmZvbnRGNjVwRUN5Q1BBTTd5UTZkdklVSklkdU9yZGhXdUc4YlhvNCtkb2pIaVowbGJESTA2WlVUQUNjYWlDM2JDWVVrQTljQUN2TUdsL0pjR0tiSFFrVCtGeUhaRTJDTGJ6c1hodUdoU0o5MXBza2NCdVFlTVBxOXk0NkJ2WmVGRVR4dzA2SGp2TEIrRTdlUXdwa2ZnM0pHYXhYU3hEODZvY01ucVZDYys3SExPZDBYVEhQcVI1TEpLdllIRHhQMTB5Q0dZWUh6S29hZzVBKzFZUVVlcDhkZ1RCMytZZXZHTjdYSTczZGZ0amxBNmNxSk0wRlU2N0JLcDM1cjFldzYxYzhNdnNoNC9ZQ0JxTWxzQUNEbEVXQUF3dTQwODFWOW0ydzduOTcwcy9lMS9Cclg1bTZHbFJxTGdLMnA1b3dlK00zYVVsTkpGTFNhMVlEZUcrd0crVnZHWTc3SDNtQTBrS2Q1Z0ZWZml2WU1Uc3VFT3lLMW95M2hGUU9hZGZqVzJlM2JKQjZvZHdQSnJtSlZTbU9EYjZYUnZjQm5yYkNiblpYdzNXN1ZrQkdLN053STY3UUZvdEUxSzlBZElPTEhOaFY4L3pUaWpFMThiUEpIeUhsKzhET1NadmtiM3FUWitYQnF0WUJHcHcvOE5aN1AweGtIMlhrL0wxaDNYdzZqRU5OKzA1N0pOblFreFlnNkdCblFBWTQzYTJmYStiMTF4VUYyRFhZQVVOcDUzcExWOTNkZjF0V2VkdDFoVzREeFk3NE5Pc01OSUl3ZmJubldoQldQQmdRUWVBUG9GZFpSbXBqelRTa09uU2xVMU5nc1A1QUE2MWd0SzhiSE5FbHJWcGVsL3pCaFJuZHIwaDU4QU5wbldYbC85L1pLWEhqWWVLb1ZyeFd0SVFpMXNCZWdZNmc3b29BT2dUZGZkTk91Tml6OWFjUTlsQjFVYlR2TEJ6RUFoMkM1WHl2VjU3N2ErQldaRG1zUGRidG14Z1BtdHFBWjdaOEJqMTlWOG10MUNBb2dvOXNGMnJibWE2UTVQMTRJMGJqejA0Q2N2Ryt5cHZnQnRYOEZEV1Q1Z0w0MW9HR1ByL3VZcWJxdFM3N05lZWRXT2c3SWZQbjEvcXJ4aDROYzhEbFBISVlEcG9Ib3ozUURLc0pxdXRSZ2pNZUluVld0cHBRTmt0aGlubm41K1Z3NEJUdVJXQXVjckNKcXRCTjErVTVoRW00Y0IyQVBMTjZtM0tnQ3FMNHFVN2NGNFNpSVVVQnpubGUyNnY3cmpyVndwdE92SWp0dXlmZzdzWGpnZURBR3VHM2g2N0NqdU9SaU5RTzBZdXNaMDM3N2hqZGNXQ0tNMU1RczdSYTRLL2NGYUNHYmdxS1RHTFRVWWJGSTlRYkZma2lWN1BDSm9DTkVyL0ZKZk1LS0Y1YWRsMElKMlV0Y29ETkxPbStLYWk1ejZhY0ZIWHNOOWJlYnhYak10T01DOGNMNTdkSHQ5V1Ezd29VVHNjcGpXZXNJVzJQdlFPb0wwN1ZNY3RwbWpwRzBmQVQrRDdSZldlVXdpWUFYZWh4SzBGS0hKdGNMa05tcWVTcXc5djFBbEY0N3lScXV4a2hOTjR4Z2Vid3NPZWlYK05mRFVxNVRwZXRiUGpaajNlV3lsZWt0UDZsRmdzSEh4aExpOXhPMkJVbi9KckxQQXd3aityb0txQjV1R1JkbW5oUjBoSDNvOTRWZi9MYWp2bmdBMXRlNU5tOUplaUpNdC9sSWEvVlEvZmJXZFR1TUJ2Q1Y5T1dnTUVRdWI5dGcrOGJUc3N2UnhnUXc5T24vS0Z6RGZIMDJ3anpzdHVrbnM1cXNYeEJrOFg3N0FQb053WjRpZzQxRHY5QWZxNHJpWmx0ZkVISkkzRGo1aW1aaldEU2d4Wk5QQjhrN2VVd2I2TjVrODNFQzlKN1lKdGJpVGxjMXhMYmpFY1RYQ29ieUxITjJtelY1T3VUT01sSjlYNXoyR0pRVDI0aEFBV01rQ2JMQ0RvQVp0aW9DSm0wMjRRRnZsMk5xRElhRlU0c01qZ2Nvd21aVjkzVXlOTHhVc0RTam4vQTlnTkVlUno1eC9SOCtNalY0amhWd0JFMjI5UWw2SElUUHVRZ1RtdlNnN1RFdWx1T0VrdW9uQUQ1WUhQL1FyVjV6aEF2Q2JEdytBVHhaN2k3RXdqd0NjREFlZWw1bk5mUU9sNzJXTlZ2TEhuVzIzampqNTVRU1NERG1OcGlLcktlNjZnUjBiTGxCK09FcUJnaDVKSk42RTlNQTZkYXdMV014V0ZjZ0JzWTgzRmErTjF3K1pBYmJOTHVXNmJOQ0xDNThWYlpRcWpxSkI1Y0hBZ0syaHcxZ3R5WWt1Z3Y1c1pxa1Q4RU1PajA2U0F5aTRKZ05pOWJnUXhubEFrbkFOQkNMRzFBdjl1aklHUkR4dXdMaS9xSHp4K1kxYVIwUGorMHpQbFVuMnc2a1FPb1RwdlBESkp0WTBYMXR5eGZnbmNYQ09FenRnSXNBSzlIM2ZxclJDN29oY1IvVituNThiTWFCUUwrZUlGbllwMjhyYXdzNkFHb0xxNDhWQW9kZldscjlFdExIUzFoNitKMUY1Z2J2djRpRGRERGJBUzl6U0hZeXNrN29BQkFIckFBVnhjOXo5UkhOSzRNVnl3dHdHTUVVQjI0ZkszU2Z5VWgvWFZONmJ6RDJ4NVhHTDBMQUNseG4ySkpWYTVoYXMwcnJWM1J6NmwzLzdjdkcwSEw5Ynk1NS9mT2EvNzlkOHZxdkh2UC96U1d2Ly8yYnM3eW9JaVEwWUc1dmErS0UwaWY2a0g0TGVUY2NuM0ZJSno4c2crejMrSS9ML0N5SGN4Qit0c01zcGUyK01QZWdudmZmNElCVHUzejkrOWNOSHYwWEwydWRKT1lGTmQ2SW81MVV1ZjFvMTdMTTlBdVhRMXVnWkpnaWZDZFcwTUxuUGord0lod3BoMm84aEhXd1pPOVRGRzFtMUNUb2gwUVR1RFdyTnN2VjNtMFBLZmJ3WE4rK0tCenhySzRab0daVnNEVWVEN3V3d3B3T3ZVR1o0SkhMa25qMFJraHM2T2I2Yk9iN3JIVUdXNVNCWmRoV2d6Vjc5RHNlYXhzVS9PSXgzVlp5Ykl0aGI5dUJIUDBSc0RtZkk1UXNxMzd0K2Zxd3pSbHNpRU5FeFpKOWF2MTVMSVFBRGZNMVRNb0NobXJQN0NmQUFuNkdtZGpFNmJTRDFDOHNhSWZEdEZRQ2pPMFdqanREN3hqT043ekxyakhML1lKeE5TY2c3UURnZHZyTTUydzE1MDdBQ1pwZ0ZPV0hDc091b2cycmVPelA4SDg1MVpyUkJ1cGttZlZuZGFMZjFDZERPNUZLeUkzSjB1L2t0aTRXQzRNSjd0cXdTQ2lDcHNkd2RMRjB5ZGk1ZnZmT1Bwd3pZWkJBOFFrSXlDNGwyeUFDSGlHWXA1MW45bHEzbFg3Y0VrTXB4YlFxeGdkN1RxT0ZKWHF1ejBrZm1kR0VBZHoxY01ySG1Ed3NITjZQaXVUdTlwOUNXTVR4dzJWRDdTUEdaanl1WlJVR0Z5aXAyYXcxOEFNQnAxS0JSMUJFeGZDYlZpQTQ2ME1PdFV3YWhWT2ZHNXpmeGc0bm96YVc0UzRuN1NRTEd1eFVqK0FzYlBOdFJRcStyRDN3NHl2Y2dvcVN3UWE4VGNUeDV6OFZvM3NzaWRadFlNT3hwSC85emZPNkc5WEpmQUJyS09kNisyazZaWXNGS2pmN0J2QzBWdWl6TXNRYVZZQThrRWFpMUUrdi95ZmEzV0JPbU9TTFR6eTdDRS84ZURVVGRJb2pxTW5tODQ0b2djNWliYUJCNXlYc2FmOEZQZ1hRQjVKdXhyVGdDcEs3NUx5T2poOWErOHJZb3duS2YvS3AxRWdXUHljdUVSMWpneHFuV0V5ekJPZENEV3ZZY1U3ZzlUd2gzUlUrTEZWMlROYUZsQ2MyNjh1SHFZSWRkRitESFoyK0g4QUdqSlljdW1tRkRSNThkaE9pZmhWRDRyZ1pOSW1kWEpkUkloTVFvSmlOWEgydnBEbmV6cjU2NFg0cVYwOGpBNmFkV2NXK3JGU2NGS2dERFk1WG04NDhLdG1vMzlkT0k5ZDJMZyt5REw4UW0yMk1VMWI5VDIydGc1ekEzTnpsRG1YUDArQTJzSm1RS0d1ODlycDBxOUFqT09aR0pleTdHTUFnZUpEQk1yRzNSb0RYV2M2RjNmT2t1azl4Mk5yUG1UbGtyUkZZNW5MU2hma3RMckRoZjFnaVVLdzlybzRjYWxoRzdNOHdDZ1FZU2grNkQyMWgvZXhiQ2ZZSll0Yy9jeUFYYUJMLzBFOVMxcENWTHNGYXRXTE96NVJEd1ZhY1VZZjlPZldkSWc2elFRc0FyN2tyZ0lRU3gzVmluTEZZQ2RydlZjbzlmRzNjdUhNRTZzTVhpZ0d0WkFWQWZENlFyejBzNjdTUGFLakdyOVF6WFRhclpYWUJPOEp0UnNDMmQyZmcyYTE4UTFidGVVZ2RDV2RKNFZDQWJYOFkyeGttcnFaTjJQWTBUMlMveUJtN0J1RjdEeDU2TjRza1E4NmlWTVN1MktqRm4vZG9MTEp4TmlObnA2TXBuNVNNYzBDUWJKaHFzTGJ2a043cWFLVDFhODBGOVpuWVBKTTVXalZkbWlIaG5aOXZNZVBud2xNYmlNYlpjbjJQeXdRZTc0a3ZOblE1MnNuK081M1FjVnRZQXNjRWFwNHNjajJ6dzZ4emN6aUYweGpPYXcvUktkQVA5SjZqeXBOWTUyVTMxUWpsUWNTeFRyRWt5M3B1NzIrRjZQUHNXakQ4VHJsN0xTWnJ0eE4ySHJqdGRhZmpEOHcvcnoyanRWSGR5SEoyaGw5dXpuY0tSVUxmVDVrOWhuangyZnV4YlBpWmhnNmM2d1ZkLy9uWGVpcWJIY1ZoNGVkbi93WDZvYklIKytiTFk1UHhkNHZwSFhoMWhpZ2FIclZjMDBMQ25pOVhKbUVMTS90dWJMTGJPM1Izakk4aW5aNitrbk95N3V4a3BGaDRHMkFKQmlvNGQrcEdxODZPTDltUlBkWTJDWmNQVUFwc3hySWo3TkRLWUVrR1BoZGJiVkhyTklyOXZwRnJwdllhY3NDbFlBWlJaQnplWllrUUpwZGZ4dGp3NmdnWHBEU2JjSXhBR2tHV3lRTWNFMGJXR1VkTGlldDJMeUsvcVpyRFIvaXZIdDlqZDRXRGVWdkNzaHl5ZGhlbkZqcVdZdHNEOENDMkdhWTc3YWVQMGJHTUZpZmFBWXh3d0huMjlTVEZ5akkyUXpTdlJhWld0Rm5aQ1dNNENWVWJIeHpYTi9NTkkzMnpOWHhzMVQ0ekcvakJidW5tbGM0d1A3dVRMYUZ3N2hsTDU1N2ozblNNZkF0RFllVXNpejgveTU5NTlPZU1UMFRScTJsQVRFbTRGbzZuSTF5aE8yL3FQVW1KOVN3c216MkdUa2VDN1V3c05zNGpXcnlhTFVhU3o4Q0Y3REdjSnJYTGQ3R3BBZEVjZkJpY0JTYkFlN0NyOTJtQmdKRGd6c3prRE16WXNsckRNa3pZQ2lKdWxHd1lZYWpXS0Y3UjhaTnZTaE5ZWkRML054Y3lzcW42S0EwbHBGdWRuZlo4bmdHZ2IzUk9TdnVnYXhqak1IckFGa0pGNFd1MzAvdk1pZ0tnSDZqcVowc00ybXdyOEdPc3pDNzFZVkwyc2ZZcjVJN1cyNVhpNEZvTWZKLzlzby9Ib1c3UStmS2NXQUsySG5nRkZIbzZjbXJMUzNSaURBYnZVRFU4OEl2QnNzRFRFR2VWUXUvMlh2OSsxNmM1akxLT3YvYzhmWWJtWS95WGovNzZzdjc2OEh1dDk5ZFcvMTkrMm9vMm0yWWNzMkUyMFhtOHVNOTlPOVJnUkl4TGV4elhZbkVGRmc4bnNqNGhweVhiKzFFTllBc1pmeUJCZk1kVXV2bGpPa3V0bWpVQnlpS214Y0ZmcjlXYVZlTDMzZFZxSmRDUVBQcUhqZUtmUk1GcGRCSENHN2RhemFoc01xQUVORWgvbWltNjRjaHBFZ29keHVVMWg4bzR0Z3RiYXhjTUxtVmJ4QnJBUnN2ZWRXY1VtVmQwMUlkd3pFbHNnRmZuV1h3dmJKZzFTaFp4T25vRFZjZHZPNW5GMnVRSFk1ZjRGNVE0ZEllMTJnem5GSVc3Q2cyUkhUNnpiS2kzY3ZlN09tNmt4dGpkVkV3Rk5sYWh0b1J4Vmt5aXFmZmRINU5od0JVd3kwUUhUdkI0MkMyQnA4cjJaMktQQnR1R0dSeU90SUx5eDlNeVBIL1ZNL3V6RUZLSkY5Q2VOdlAzaHkvdE1NZ3NPOHNhdXBQYS9vemsrWDNpei9lZnZ5N1gvMzQ1bkVMOTE3djU3Yi91ZGYxdTl1OFgrM096WVp2Nys0QTV3Vm80R0lDNWZ0WUpldXUwQUpuUVFjRGJudGVmQldubHY3amQvKzNMT1hYcE1tZ0pLbUdsTFRIRkJtbGZJVWFmVW9WWGhoWENYOTd6OWRhSHhjdERhaGxQL05GUkRUZ3QwL1NuZytZM1hYU1YrMDlsSms5d2lza1EwMU95akhNM0R2NENjRWM2VVQ0SDU1bjNodUZhSHhGUTJwRk8yV2h6dUZKQ21VQjNUbHZxanJMVTRSekFQN3M1cVpNTWdQMCsvVFBiWnJldmRSdzM4RHBldTZYdHVCSHMyRDZyMCtkWmZOdEsvenpzNzFGdDFYUFNiOVJsT2k4UWQvUmFaZmZZZkYydVV1dVlaM3pVdkUrelROb0NNajAyUy9Ic3JrNTd5QU5vQlB5NW5hV0tBWWRBUk4xVy9jZmNFNUQvZno0SnBOc2hLZEVaK2RCdWEzdUxJZG9jMFhWbllCUTBKRm4zWkozS1owOTV1OEJMdnF3ZUlyNGlIaTlvbThuRWJ5WlRKM3pNTmlWOFcwTmc3RVpYZEVhTXpaejN3Tm9Laks1b2JNRkptTmIrUCtBU3A1YzBwMDNNRklVV2svZm9qNjIxMVhHNElRR1FNVEh4VkduZzI0ZTlmV1ZjajhQRUJ0cGxGQmlvYU9VOGZqOWhrbk1GYTRyTnkraHloZDEyY1p6U0ZCa2tFQjdvdEk2WXVnMjBsNjFWM1NZQ1BuMU0xWTBuZXV4bTQ0a2l2aWZ3b25EMTNjTnJ0UGdkQ2JyanF0NE9jVmI2TUV0ZnZZenpucTZ6eHlwSFVLajFuZWNnQ2V4S2tIL2IwZFFCR2RaSlllMTRUSStYZURCM0Q4NFhSODRTTFZURWRBQU95RWpseDRJRGNhM3NjOXpGc24rVEpjTTNkU0hDVmdhMHo4dVNRRzdzU0lSL3pDZkhIVG1rQ2NDNUNqemV3WWZnRjRVa0d2QTNiZUhJamZBNndoaDhVUjF1QnIyMFFMSTFnS1V6WCsxcnR1M00rbDdBbzUxcnhyMlg0UkNibzFhUmtiWHhxNlJ3dHgzZmhDMVpqcmJzTnQwNm1yVFpKaDB1eHgrRWhIOEZJSUlDYjhlNkdNazRKWW94T3hrSE1IVWI0clJyYWN2R3JCaDZQV2pEZ24wVERFajhoWVlYNmJNSldyTVlDM0wxOEdKcERJY0JZYmQvTTZET2ZJL2JRVnBPWWdOUVNIWVY3d2VaMzIxZGRhK1RSbmVrS3B3ak8vZDFPRVlrdm80RGRoaitHY0UwbnJ1eXVHYzJGb0RTc3JFNzlacWxXT1djd3ZEdW5PWTRNeXV6Zy9HQmF3cmk0OXptTTRoa2xGL2hub2JVbUlVc0h3UGd6Q3pUU2hpQ0JkRy8wRWhRSE5UVnVUWkNuTGFQVmV2NnVYUTdadjZNZVYrMnpmSVNvaGRyWVZ0M0lJS2xhckJLUU9qRjdqZHNlL0pKSC9reDkrbmpjZHpjdG9LRjFUZVNid0dVbHNpQUZBcjhtQ09icG9ZN3RBY29FQzZQNG5BNmh1VU1wMVJTWkF1MS9aVk12R2N5N2VucmQ5YVZPZW5sK1EvUVFoN3RwSHM2M2hZNVlkZnMzT2UvWmJNaVVtU2dXQzREL012Um1qaUhYNkQzMzRrcjZWSk1YclpTTEZnSzFpc2lzN2tEajQwN09rd2hPQml1UUh2Q3llTTVvVUxzYW5IYVlndWRGdkJ0M1FKN0trVnZUdGlTK0ZsMnM2NWRtMDAxd1JqUDVIbWR2TXVsM3BNYmcwQTUzVzdBT0RxSVk5b0xFZ3pXTEh2Y3NqSzZNekFBOGJvOHJXR2lYc1ZoUGdrRWJsMHdHSUdmZXUzOUErdEg1MjFpRHI1cDgyTXBnaEVicE8xU2JiYVBhZ0l1UHBIbk5LWGNuUC8rQXZkWlVaT1EyUTU5RkhhaDNFdTM3YnlRVkxjUTBLNEpHTnhmWTZzUXlQYzR4WDhiWFNVN05nQjVCOGRRMkJ6Q2wxOVgzY3dvUHRFQ0IxOCtRVTIzU1piM1FsOHcrc1d1SjI5bkhhd1RtQ3Mrb1RrWTM5Nlphbitla1JoZHExMzlheGd5ZlMzeVAyVk1kN292MFZabDI1MjZaZ3NORXE4WXY2ZmRhVGszeHZPRndxL0JIcVlFN0YvUm1oU25POTlHZmZjSm4xeG85d2VOK0R5eUJXenMzTXR6cHNpWG5taVJxWjBrMlJkeXRONi9KSU50NFBubjlLcnJIK09yVEtEQ0dUTmNaN0c1RGljMC9HWHp0T2MxRkN2MStNNjJKZ1pQd1FaOFR0UnhJalFPTWJXckJBczZZTVBmVi9LMFlRN1NaOVExc3owUTRyVTEzcGJPSWsvd1hTRVFLMnByRXR1S3ltcEUwYXpMbWNlbWltNk1xSFBRVVN4Vzg4WHJZYXUxTmRHT3U1NHpNb0IyczhBc1ZySGJHR3hnLy9oSTR3TTJYL3pFYmdXS2R1YnpXbklML3d3NHJYTEdMNy9Bc0FhWUZacGhvOGF0TU5ZRFpYRzJSbEVRUGxCTHV4eTFaVzh5WkhwYlhWeFEvU0JjeXBhL3MvK3NpaTBzRStWenFJbmlzazlTeldCeGMyZzRPajQzMEs4dHkrbnRHSnlXN3o3T3VMVHpGbEtDSlBkamRyR1k4ajBFRmtwNFc4Z1c3UzB2ZGpWYTd2YU9LNVpzbDUvbGx1WmJMVnBIc09wdnN1RnRkR0hnWXZDZEd2Y1puWmRUbkl5UTYzSTlUd0pOWUFpbi9aTzZPeGxkMFVOVU1SMGE0dWtWUnRxR0V3YWhxb2diemdRRDVLRHc0V3d4NEpLalZEd201REswLzFpdENUTTFodWY4VjR3R3JBVHFZRDdFNmdOKzJxa2dIbjZ3OW01TlAyREdIblZQSXpqTE9WOUdjd1ZheGM0c1h1ak1WaXlDWVhTV2wxL09tNjFPbHd6bU1UM0lZMkp0YnE0TWppcFlhUnM3Vzd5U0pjd1dlM2dTVDdkZHhxNlp6d0pCNTc4NzJEZWx6MktVN3FCb1c1Ujl3QVlROFpBSmpicnp2TDdMN3A3SE1qOXIvZTFZemM1dEJrTHdBamR3eEc1ZTRLVGRjZmZuREJSNzI3TnMxK2trZ0tsbEZ0U29INUxvZEhlWVBVNDBPZXI2WG83ZDRvR3FJNVFNNnpsVnhsWk9BRldRaGo5dnFnNmpBc0tNQVo1QkNLOGNxMVdqeDhyWkxmSXRwL0tpQU9PTWREemFuZnA2MGpUZ21BcVFvempVeXFiRktEY280NFRqcjdnZE5aUkFqc2FoOENHYU5SdjM3UFczMHZhY0t1QUV5Uks1UGU4ZUhndlBEWE8vNGJSNG5ua1dGMGlNYStOYnk0QjB6MTJ0ck5tMm56c2tKWmorQjNJNXU5NmhQOWlNZGlZdUE4R3JVME9BQVRycVdmQnI0Y25HK2ZjNlJYK2FmRmJsekFGd2hEbDY1VVNvOGZvc3phbGMxZW5IajUyY0Uvdm5SdkNDa0pyUFNhTGRDYjIydy9NR3dlZ2g3QmRXL3N5RkZZcVpKV3ZsMXJ3NnRON0RFU0FhcUtiOXBJK1R0dU80VGtsalBpTnRlWFVIRVJTN2tzNEc4TXI5eklYVVRPOVR5K0dFdDJLMytQSzRCWUJJZXZGdjBJUExlcGQ1NnRpc3BrQUZzeGwyRzNpVDRjVjB5cDFCeUtjMXJoZWJHQjlyMkVHK2lBWXdydDVuY1AzRmF0ZzZjc1RaZXEwajBGYk1taWRxdi9USmc1Zi9qWjArRVlwZEJ5YkMzcHUvNmNBRk5NaE9ybkFvTzk4WTlVRnA1Nit0KyszaHN4MzgzeTU1M01XLy9CVDdmdjFUcUo3M0RoV2M4WnRmWXJGci8vZEw1cDlYL3R2UDhQUU94NTdyT20yVCswYWRzUnRTYXRERnVqMW1BU2NkMituelg4dEoxckZnWHUvOHBqUE80SFpHbmJPajJqaHZlUDF6WFg3dktFUDlQZS8vN1BtdWYzM0FmenhmQkF5MVZSeW0rOEFUKzJ0YWJqdkl5bXJoUTF5emhXVDNoSGdIZSs4dkovYWw5MCtiMTlFV0RHaG9XSC9rZStVemdqd0Fkb0tSR25iOUhJanpyQytmU2pxTGFDTlE5SmtYWnFaRkIvc3VvOVZuTXZqNDRFZXh2dG5vZkxVa3NaME9pZ2VOeEZuRFJEeTJCMzY2ZktMNkZ1Ti9PTWh6Um9VejFWeWFOTmc3UU8vZVRwNWo5ZTFYckxhaW53cHBpRVVEbmo4TldqcjBmYzE0Q2N2M1hhdlZYNXYwOTF0SUNhN3pVREl3ZHd0T1FBZ1RrUWQvWVdxRFhadllrOWNSQm1VN1IvZ0k2YzBhbVd0NURFenY0VFN6d0NxaXN0WWJCdE4vTm9FTmNVWFZ2d1duckdFZnYzNDdGTlFSY0o0MDhhNXdkWTg2K3V4ZjhBWE9tRnZMVm5mdytKM3Q2ejZPdkhNMmNYVjJKWllFWUx1YUNuZU9IOWluRmlWZmxxUGFUSHhPZkxOMUlOakNid0lFUGJmMGZ2eDY1K0IybUNzc2tvWFJ4ZXBRNCsxR3c5S1JLL3Y3djl1aEl5ZmJ5czlaQldqZm9xTVpyQzJ3V1QyZlV5YUgxWFZPLy84emF1V2NKWlp4cGUwdDhiSVl4a2s1M1FtNU5pVG96VjRqTTdnQThlOVg4Ni95b1FBcU1xK0Rld0wwSlBzRXVBTmMrbkd3OThVS2VKbHQ3UUUzUDRPeHN6ZCtrNGVzeE40aG1DRjNZenJkb3NqOGNadnhXRnp1WEliang1RDBxenZHY3o4bmlLSHZyVGJtWkxQaWJNd1pNbXF6VGdkYW9uUUJSdW5vM2Y0NlhkSnVtbkRuQ2NWdFRxdCt6VkRKSGVNYWhqeUJkZmFtT0VqUUdDOEtnVm0rMjdiY2FscUNPVTVlRURmYThSUEd3aGNvK0tyMXpJYVlRcVRtQ0lPMnh1TkpLZklLbTVReEl1MWRIdGpscVZGRzBJeS9BL0tjTXhWQ2RneUVzUkdXWVkxaUF5dEs0OFFBNTQyYkM3WUxZTnRKNkltWXpkUFdLamltQzEwZGlyZXNLM0RlM2tuSXdXblptTmRZemF0QnhzRkJHQjE5WlFlM2pYek9Gc1dGaFhQZ21BSFdSekRrbE9wcS80NVRCVjdJU2djZTR6bFhPeHJ5Wi9TdXAydkFkeE9BRU40SWJ1RkMvT2NjRFFkY1BMMm1hdU5wSHBaUVlRWHFQblgrc05nejZXZTlEalRCdkw0T0VKbFEvV1dCOTdaSFBEbnUxUW1tQTlLUDZRQUNkdFlEYWNKcHJRZXBnRUpnOUFLSUpUc1haTThITjdsZ0pVOWU2RFk0eTVZK2JMVEhVRFJQV3pLR0hIakd4M0pwUWZaMndCaWtKanRFYm4zT3piYkg3QTdiNEpQUkZkVFc3cmxselpxSnc1RnN0RHZiOThEWlBCT3c1V2p5MzlOVjJEVTczTGVueGxodzRpR3NPem56RnZBeUVCM256TmdEYzN1Y1hDLy9NZ3Zid3FZeS92VFRycitaczV6Ly9xMS8vYzRabW1uYTBJSFl3K0Y0UzlTUXpubHNGakpWcURrZ3k1NDlKMzRqMS9FYzFWTnRRUnVucmdZaFRzbngwSmJjSUFqYjNyTFZGcDdmOGV6RGFjVDFnajBEOG5KMElNWXBiYkpMNVQwWmlQa2pkdUNrLys3ckczUUtDYXM5Tm9jcHNKbzVRSjZxYzJaYXNNRTZ6M040MFd0SU5XRzduajRkNjNwbVROczBkUXBJbXhYL0FHOGUrWWtYRnN5dzhUWTFmbHNOOWo5OHBtS2ZmQndEbXJXT3EwcTFTcThmRUplZUZ4S0FaUTZ2aFl5ZkI5dkJBWmI3MW9LVkFsOHpjT3RKVFhaNVBFNFp4b1JYNnlLQTBtMUQwVzB5ZDZiU2lTTFhYMlRZczI0TVVuaTRubU1oNDVsWWdwTjBydkNKdStWd3JZVjdtVmJvTzlvUjhaaXY0WVBxcUJjd045dDRuai8vNmEvL0RRYTNtZXNjOTJVbTZNaEx2STY0SEdGaDFmNHBTUEhmdmk1OTNicXFmQkQvYTBHRFZZdFdtc0FFZXJ5SzNTZ0E4d3E3M3NYSTJGcWVCd0J5SEE3L2RDWXpiTTA1ZG5Za3hOcUNuaU9ZK1JlZFA1S2hDSVc0TmRyc1dMSVlmOGsxazNOajJWL0RpY01tdkEvVzBJMktuS21yd1ZybjRyRmNGbEk0SWVXazFhLy9OcS91bVhiMllldTRVWWN6a0FvRzRsUVV5UFAwRUtVQldoU000OFB5SmZDK25VeGdCYmZSUUtlZ3JlbjhTNk9aZzgxM3FMZVZMdnM5YzZzdDA5SmFhRS9EbTlGOVF3WVhNS01EVENRUWNMSnVJSEtoaFBtdVRsVi9uQ051QjJIOW5ML0V6MGhMMGpuQXprSG9BLzU5ZzRiZ0ltd2hPM1huQXVwbzVuMC9SMTZCTlp3VU5rMEdkU25lNjd3TFJKQTEzQVpyc0VpR3J6M2lZSUFzYzRjYzgzT21ML3M5U21HM3BtY3VuQnBtMkxWSUJhdmxxWmlJUEk2U0hmSGNTS2crVHN5bXJWR0h1WWpud29BQmNZemRMTlNnVFV3OHJnL28rUzRMOFo3SHR1bmkzTnhzTyszbm9CZ2I3eXdaYm5mQlRCZWpwL0IrVEthbkFWVHJoTE4xRS9HYzNnT2d2SGZGY0g5R0hFQmlXRldMV0lZRDQ3ZERNTG4xNjdsTnNFN2VCRjJ6dkIrSGV0Y0tCbkcwZVA4OHhJN25OR2NUbjJkWVovZm55Q3VQd29IUy9zN0lhcmdvdytYaEhKeUVxN0gvKzNNTXR1ZXdObWUwNEM3UllLUm9mUlVid1NXZFUrUVl6SEp5TGE5aHlBekJCZTE0RWtPdWwzUEhXN1dYd25sdHJPOEh0a2FlbllrbGxQdHpHaU9nRVE3eDA3eFBMTzNRaG5lZHpqbFk1MFQ3YjRQbU94NmxnZi85YjM3VW9IWTk4WVRxSkpYaWFXZkJUbmRXMU1DNFUrNnNuSmJtZTlBZGd2NzhBTldOdEpuZ0c4bE1DVnpkbXdIdEhBRXp6bEdScTZEWW9ER25ERGY3MHhNd3FZS1FuRFg3SENMdHlOSzdmZFhUT3owNTljeDNRZnJyY0R5RGRyTEFMSUQ3RGxENUtydW14SnlJaVpUSHMxODhaUS9rN2FHNHcrSCt3U0ZMOFQ3Qmxwb2R2Z2VLVjU1UGR2QnJUcXF6VzB4bzRQUzY0Y1JGRDBldFFLSzZQQ1BTOFN4ZHN1eXI4azlBaFZVL3ozMGFBVHlmMDdwNGJFbnY3VHFKRjlDbGcyYVZpZWloNVpDOVIrb3ZCN0RCQW9kUTdIQW8vVlFhMjBKbDFROG0wSEdKU04xYkFLTnJuek1ub0dCQi9adU8vQm92YkJzRGFrMmRaNTNZbG92aVBBR2kxUDNCZGViVm9qT2V3NGJKYTVmcC9qcks0MFFLWE16ekxEM2RFZ2tKMnUzYVQvWXpkclBsWUdnd0ZKL0pmNTEzV3IrVCsyK1hkWUgzT2RySEJLNVJUTXUxcW9uaVlEdExZVjJBTnBESUkySi9CQXhrekZZYmN3ZGwyaUNZRWNoVHNXODk4ZkFvd0hsS1psNm5IamhRRTJWemlwNTl5UkNkZld1dHYyakY3ajZObk5PQmRaQ3Zqb1hzdjRraHk5RVA2VitWd29nL01CYnoyNm9IbW9KYVdjRURuVzE1bFgwWDV6eDdDb01UYjA2eDJZdXVCeVVWTTJ3MHhWTnVZckFGclZycDQ2a3RrQWZyR2YvMmlrZUhqZ1pkOXpsQ3B0V0Q2SXNUS29LWml2dmJ4VGtZY1hoZ0FZVFVIdXZYOGRlNWVBNFpodFVVK3R4V2lHREIzOHVXQkNkdzJXdDc2di96TDBiQzR0WlFmMlhwMzUvM3p2aVArRHBrT0dJYllybmxaZjEwSHEvTGcyWFFWQ2ZRVEg0WXhGcXNUNDIvbmhZYzFmcmZYZnJrcllLRDA2OGwrTFp0QVJpTU9GcmRoam1ZeDQ5NTJOQTU2UTYvRmZSWDVvdXR6RVB6RFZ4Q0FZUHRPaWJBTDMyQ2dTZURqWTZiRHg0UGdHTENjczdad0k3QWZEenBHTFY1MDFoMnVLZmJ3ZmJ2OGEzZ1c2aFdIRmM5N1dhbWRPWHlSVnhjelMzb2Y3Y1ZFY09od0NhMUM0N0trNUE5Wm1NYmdCcWVWWHNMdWt5d09ISVhMQ243aTZiY1BxY3RHdE1zUVVwMFRpbHFKNmQ1bzMybUl4OG5WNWFENWhIK2FJTnptUFA2cFNvRmFzSDB0Tk9mMDJEOWxxTjNuZEViNHpyVG1jMnN0VE9ZelVEZjQ0bW96aDdwSnkzem9tdmpOdDFqcVdKeGlxT2xNL3lZODFNcUsvVUFwUjJtV1crUHV3UkhGRHRjQUJrdGdmZGU1eUszUC9OcWVVaVk4TW5Rek5TZEMyU2UrSDR3QUx1ZVNQR011OGJrTWI3WkRCZU91bnFlRk16UU10MTRDbUcrQ3dkV0grY0N2bVUxc0E5NDJuNWJ6MzUxdk1BNlkxdzgwZXh4TGsvK2RWTThmODdWd3NCdFQ2NEJkRjFXVE51UTcvR0FyTE9UL2ZjNUhPWjh0QjYzUEpvbm9Kd0lUc0M3cjRvcmk1NTYrcDFScXg3TW1PRDlWckZBUUowWGpiZXlpTC84VFMwOS8vdUZCTWZtYVFwT2RUUUVacU9EU2Z1VEVUeERVQzlNakdiWmVRZkl5RzBGblFPbUhIYTBUenF0NU44NVB0WmRGYWVzMjBING4vcC82VUtkby9DZHZQM2ZLODNmWnZBV1JITGFCVDNsN1UzNHhWb2RURkE4M3ZKek9Qbjc0ZyszWi9ud285cEtlSWhkM2s2VUN3NTl5MGlRMjQzOFZLTXIwMk5Wc0g4blR2U2UwN1doQ2oxWURjb25ybmhxVFpEa1UzblRuWjU0c3lMb3dMelBJUU9qMlc2SkVFOG5LTnA4YjNHeUliYnlPRGtaaGdEb1NKY05MdGFQV1RtMmh2UGhrc2ZrZ2FFZmg4TUhKNWEvbmdyNjJnemRuTzJwTDNMNnFSV1lucldCdkVIWDM5Zmp3OFR4ai9OOCtSbW5PK0NJZGFaVzdLN29zTTl1L1E0Tyt3WjJPM3I4T2NWeWVBQjJhRHBNNERvaEZBQzUrR1U2MmdGZzViQWdnOVBSVThLRHh4RTUvTXpEVDZ5dGhPeDc4dDN5YURsSWhBS1M4UDAvMG9LY04xTmlnR1pEMTJFNnJjYUoycStORGluODh0SDJiaWZVOFBXY0tTdXRjZVhKUXVkUTdzdGNkUXdaMW0rZWR6aXVZdDNDUWp2UkRldWJLNUl4enhPVHczMldPVEFsb3g4azBldUlLRE9vMXJNU2tXWGRUSUZJMktsUkRKbitDaXcxVE02ZTN0RkRmSzN4N1JhRWJ1TUwyR0hrZFR2MHNUblo2ODlrMDduUElYTWUwcERGYUd4ckd5ZlZoS2tmMjlsbUVtalBTMHltZjh6ai84NDdBdXI5WnJLOEMxT0JlUzJlK1B4cmdiUW1wSjRobmtYRzZRR04xVm5pRmlaaDRxMW1mbXgxeEtmYmpIUTZXS1pudnp6YndWTzRqVGVlZkIydjNlOXdzdWFPbnJSb3pCU1Z3NXo1VEE3QWh2cjFnOWJ2RHlYRHRYbTJXSmFZcHRrU0Fvem1PdEhmRTZsTjRRR2x6cEZHTnBRQTh5d0xIUjYxM2gyaTNKNXFzNEg5V002cmxXQTg1dDNSeXhoMlFHTU1uajJtRHgzUVVCMmNXeXllbHVadExIZ3pjZUV1TzVEV0pDT3N0bDFud2l3MjIvTy95K2U1Z3ZhTlRKZGx0R001a2NQbjlJMDZDT0oyQm9PRFloVE5aRnZyT1FzbExZOXlhaWY1eDI0YVhiSHhxV25lVHZyT1pKd3pSdFhZN1duQVZreGdFdUgxL3RqZGpWTGpBNnRERkpNQmJxOS9oMk1oRHBIU1hFSGVsdG45bU01Uld4N0F4TDdaRzh1NzJyaWhxelljdWJIMmw5VWVyem56Y3pTOURHZW5NN2FwV2ZOd0NsZFc1elhmOTNSOFk1RndtZG5HRzZPQW52c1R6N0hmRitUTmdqVkxTNXI4SXVPNTd6dzhkQ0pqNlJaYllDVkZFaDA2K1EwM2pYM1RJWGd2K1pCZHA5YXd2eDdlaWcyd0VNYUtKcnc2VDJYMGRGcDMrbVhyWVQ4dUNNSEN1WmZsb1IzWXg5SU5aVDN1Z01uVHkwMVlaOTc5NE1udTVaRVlDSUJ6Um9Ta0ZtK0pvTGZGM0dkbTFobG83UkN3dXM4QjMxYTdsUFpkQVMvWjdNMEtUdHdkOXpuc09WblR0RHpCUWpWOXpDdWJFblM0UFBhZWIyZUh3bGI3MTdPbkZmZStMOXVqSFQrRjNtVlAzK3JPQnZEY1AvdFh3bk1PVlBMUUdBOXhxaWJnMkYvSlp2ZkllZyt0d2F6cGY2NXpMQ3JJNWZyL0FwWVRxQThhSmVyWUFBQUJnMmxEUTFCSlEwTWdjSEp2Wm1sc1pRQUFlSng5a1QxSXcwQWN4VjlUcGFJVkJUdUlPR1NvVGhaRVJSeTFDa1dvRUdxRlZoMU1MdjJDSmcxSmlvdWo0RnB3OEdPeDZ1RGlyS3VEcXlBSWZvQTRPVG9wdWtpSi8wc0tMV0k4T083SHUzdVB1M2VBVUM4enplb1lCelRkTmxPSnVKakpyb3FoVjRRZ29CODlDTWpNTXVZa0tRbmY4WFdQQUYvdllqekwvOXlmbzFmTldRd0lpTVN6ekRCdDRnM2k2VTNiNEx4UEhHRkZXU1UrSng0ejZZTEVqMXhYUEg3alhIQlo0SmtSTTUyYUo0NFFpNFUyVnRxWUZVMk5lSW80cW1vNjVRc1pqMVhPVzV5MWNwVTE3OGxmR003cEs4dGNwem1NQkJheEJBa2lGRlJSUWhrMllyVHFwRmhJMFg3Y3h6L2sraVZ5S2VRcWdaRmpBUlZva0YwLytCLzg3dGJLVDA1NFNlRTQwUG5pT0I4alFHZ1hhTlFjNS92WWNSb25RUEFadU5KYi9rb2RtUGtrdmRiU29rZEEzelp3Y2QzU2xEM2djZ2NZZkRKa1UzYWxJRTBobndmZXoraWJzc0RBTGRDOTV2WFczTWZwQTVDbXJwSTN3TUVoTUZxZzdIV2ZkM2UxOS9idm1XWi9QOGE3Y21MdzBYeHZBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINUFjQ0VDUVNSMS9VTVFBQUlBQkpSRUZVZU5yc1hXZDRGRlhidnMvTTFuVFNFd0pKcUVLb1NxK0NTRkVzS0tKK29vQ2dpSXJTdXdndnZTZ2RRU2tXUkgxRlJJb0ZDL0tDZ0NDQ1FpQzBrSkMydThsdXl2YWRjcjRmT3pOc0dvWVNpdXh6WFhOdHNqdTdNM1Btbkh1ZWVqK0VVb3E3VmY3ODgwK01HREVDZi8vOU44TER3OUd6WjAvRXhzYmlxNisrd3Rtelp3RUFHemR1eE96WnM1R2JtNHRISDMwVUxNc2lKQ1FFYTlhc0FRRHMzYnNYSTBlT3hPblRwNUdZbUloR2pScmh0OTkrdzlpeFkyR3oyYkI1ODJZVUZoYmkwVWNmaGR2dGhzUGh3TkdqUjJFeW1RQUFvYUdoU0U1T2hpaUs0SGtlZ2lBb3I0SWdRQlJGMzcrSktJcnczU2lsOGl1aGxFTGVBSkN5cndCQUtTWFM1U3V2WmQ0ajU4NmRpNG1JaUlqVGFyVXhMTXZHTUF3VHhUQk1CQ0VrSEVBTkFDR0VrQkFBZ1FBQ0FPZ0JhS1NOQmNCSXZ5Y0NFQUI0cE0wSndBSEFUaWt0QVZCQ0tTMmlsRm9vcFdaQkVBbzRqak82WEM1VFhsNWVYdlBtelUzUzcxQ2ZyZHovaEpDeW44bnZBUUFsaEpSNzlka293ekFnaElCaG1MSWJaVmtXTE11Q1lSaklmNnRVS3VWVjN0UnFOZFJxTlRRYURUUWFEYlJhTGJSYUxmUjZQZlI2UFFJREF4RVVGSVRnNEdDRWhZV2hSbzBhaUl5TVJIUjBOT0xqNDNINDhHSFVyWDhQL0hKamhOek53SFk5NHZGNGtKdWJDNFBCZ0lLQ0FsZ3NGaFFWRmFHa3BBUTJtdzEydXgwT2h3TXVsd3N1bHd0dXR4c2Vqd2NlandjY3g0SGpPUEE4WDJxVEFjeDNFMFdSeUFCWEJzeEtBWm44ZnhrQUt3Vll2djl2MjdhdGdWNnZyOGV5YkYyR1llb0FTQ0tFSkFKSUJLQzdUWWJaQmVBU3BUU1RVcG9oaXVKRmp1UFNyVmJyaFFFREJweVh3YzBIMkNvRHZISUFTQWloMG5oUkVISjVZQWdwQlh5K0lPY0xlbVhCemhmMGZNRk9wOWREcDlVaU5EUVVNVEV4Q3NDRmhJUWdMQ3dNNGVIaGlJeU1SRVpHQnRxMjd3UzFXdTFmWEg1Z3UzWVpPWElrVnE1Y2VWdWRVM1IwdEZmTnFRRE1aSzFNQmpiNTNzbWFtaTk0K2Y2L2IvL0I2SmpZMktacXRib3B3ekFwaEpBVUFJMEFhTy93VytnR2NGb1V4Vk9DSUp4eXVaeXA2UmZTVXgvcDI2ZEEwaFI5UVUwc0E0Q2dsQ3IvWDBHam80Umh3QkFHREVQQU1ES1lNWlJoMkFwQmpWV3hVS25VVUt0VVVLblYwS2pWRWhnU3FEVWExRXBJUUVCQUFBSURBeEVjSEl5UWtCRFVxRkVET1RrNWFOcXNKUVJCUUV4TWpCK1ovTUIyODhSb05DSTNOeGNta3drRkJRVW9MQ3hFY1hFeHJGWXJiRFliSEE0SG5FNm5vcVdWMWREK1FVc2pzdGxaQnRCOE5iTlMybGhaVUh1NDd5UHM0bmVXdE5icGRLMFlocm1QRUhJdmdBWjMyVzA2SjRyaW43azVXY2MwR3ZXZlk4ZU0rWFB2M3IyaUQ5aUpsUUNlWk1ZU1NnZ29RRUJJWlNESGdHRVpzQXdEaG1GcEtZQlRzVkN4bDdVMmxXeWlxdFVRUlJIQndVR0lpSWlBWHE5SFFFQ0FZcDRhalViVWIzQVBha2dhWEd4TUxDS2pvdnlMemc5czFTZkZ4Y1hJeWNtQndXQkFmbjUraFdhbjArbUUwK21FMisxV3pFNk80K0R4ZU1EemZDbFE4L0dqRVY4L1dnV2FHYW5BWDZab1ptUEhqbVVmZSt6eFR1R1JVZTJEZ29JN0VFTGFBd2p5M3pIQWJyZkJXbEtNVnZmZGE2T1VIdUo1L3BEVmFqMzg2cXV2SHZyaWl5OTRRa2hab0JNck1tM0xhSEcwbEYrT1VjQU5MTXVBWWIwZ3AySlpzTDdnSmdFY3d6QmdpRmN6TCt0L001dk5xRlU3Q2FHaG9WNFROU0lDMGRIUmlJdUxRM0J3aVArRytvSHR4Z25IY2NqS3lpcWxwUlVWRlNsYVdsWDhhR1cxTkZrNzh3ME95SnFaYkdiNmFHUyt2akpDS1dVc0ZrdmpvS0NnKzFtVzdRS1Fya2VPSEFtTlQ2anR2MWtWU0c3T0piUnAzYnJjYytyUTc0ZjNSVVhIN2k4b3lOL2Z2bTNyTkFuVUt0THF4RXBBN3JJbXh6Q1VJVDRhSE11Q2xiVzRjdHFiQ3FJZ0lqSXlRZ2t3NkhRNjZIUTZGQlVWSVM2dUpnS0RBaEVjSElMUTBGQkZlNHVKaVVWd1VCQ3lzekpodDlzcXZkN0F3Q0FrSmRkRlNHam9MUnZ6a3VKaVpGeThjTXZQVTNXM1RYWktLUXdHQTB3bUUzaEJnTTFxclhBL2k4VUNrOGxVU2p1ejIrMktkdVlMWlA4QVloVkdOV1dIdjJUL2dQajR4OHFDbWNQaDZLYlJhSG93RE5NRFFGUGY4M1E2SFg0RXEwU2NqZ3JISnRUdGN2YlZhclY5YTlaTXdLWHN2Sk04ei85aXM5bCtiWnJTYUQ4aEVIeUJqbEphVHFPVC9ITUFJWlNJSWtSQ3dJZ01CTUpRaGhIQXNneGhHQllzejFLZTVhRlNTUm9jcDRJZzhMRFp0TkJvTklwMjczSzVVRkpTQXExT0Q2ZkxxL2s3SE42NVpyTmFVVkpTZ2lKTEFRSURBeEVXRm5aRkxUWGo0Z1UwYTNIdkxSdnppK25uNFhEWS8xR2JydTd6Vk4xdG9IYnMyREdBTUFnTUNrWmdZQkJpWWt2djQzQTRrSk9URGJlSEI4ZUw0QVFSZ2tnaFVpaXZGS1QwUmxGbW82QVVFQ21GS0ZJaUtwRkw3MWJXeEtTVUVpcVptY1Ficm1PY1RtY2ZqVWJUaHhEU0IwRE5hNzNtSDNmL2dJMGIxc05rTWlJK1BoNGZiL29NNTg2ZHhkQWhnNVI5SmsyWmhvY2Vldmh1eGI4bUtwV3FTVmhZMkJ0Wk9YazVnaUQ4WUxmYmYwcHAxT0FueVZ3VktnVTVTaWtGb2Q0QUt3VWhJa1NSUUJCOEFJNWx3Zk1zV0JWUFZid0tvaWpBNFhDQTR6aW8xV3JGWFdHMzI2RXBMbGFBVG5adE9CeDIyT3cyRkppTUNBME5oYzFtUTJSa0pIUTZYYVdnY1N2bG4wRHRacDNuWFFWc0JvTUJJQXlpWStJcU5sMXljNUdYbXd0VHZnbG1zeGxGaFlXS0g4M2hzTU1wbTUxdU56eHVOenljQjV4SDB0WjRIeDhhTDBBUWVNbmNGQ0dLc3NsSkNhVWlLQVVCS0xsc2Nuci8vKzIzQTkwVEUycy9HaDhmMy9kNndNejNlaGJNbjR1WnMrYWdkZXMyS0NrcEFRRFVxMWNmUC83OEt3RGdwYUdEcTIyOE42eGZoOGNlNzRlSWlJaHk1N1ZzeVRzNGNlSnZhRFFhOUhpd0YwYTgraHBZbGdVQVpHZG5ZOFd5SlRoeDhnUzBXaTE2OXV5Rmw0ZVBVRDZ2RHBHT1dmUEV5Uk12YXJYYUY2ZE1uWll6ZE5qTDM5bnQ5dSthTldtMFh3STRvWXpaV2xhTGs0SVBJa1NSZ1NnU3lnZ0NCSVlGS3pCRVlIbUlva2lkVG1jNVlITTRIRkNyTlY1WGhqUy8zRzQzbkU0WEhBNG5DaTBGRXRBNVlMZmJFUkVSZ2NqSVNMOWE3Z2Myd0dUS1IyQlFjTG4zYlRZYnNyT3p2RGxwK2Ztd0ZGcFFYQ1Q3MFM1SE85MHVGOXdlTnp4dWp4ZlVPQTQ4eDRGVEFJMEhMd2NFRkZBVEpUQ1RFMmk5SUNhYm1hZE9uMjBTRUJqWWoyR1l4KzEyVytQOC9IekV4OGZma09zOWszWWFrWkdSNk5peEV3QW9DNEVRQXExV3EveGRYZkxoeHZYbzNLVkxPV0NiOGZZME5HblNGUCtaUFJmRlJVVVlNL3BOMUV5b2lYNzlub1FvaXBnMFlSeTZkWDhBcytiTWc4bG94TGl4b3hBVkZZMytUdzJvbHZPczVKZzFvNktpaC9WL2FzQ3dyQnpENmM0ZDIrMzR6K3k1Mzc0dzhQOU9BUkFrN1UwZ3hLdVlYOWJrS0tXVVVFSUVTaWtob2loU1FrUUlBa05aMXV1T2NMbGNVS2xVVkE0cXFkVnF1Rnd1cU5SMnlhWGg5ZE82UFI3SlhIV2h1S2hRMGVaY0xoY2NEZ2NjRGdlaW9xS2cxK3V2NmJxLzJ2SWwzbHU5RWovOXNoY0E4TXJMdzJDeFdFcTVZeVpObm9JZUQvWUVBSncrZlFxN2R1NUE4K1l0OEdEUFh0VytYaGZNbjR0dmQrMVU1dWpySTk5RS82Y0dJRDA5SFV2ZVhZeVM0aUlFaDRSaTRxVEpxRlhMNjJjK2VPQTNyRm16K3U0Q05sN2dFUmdZVkVaN3lFRnVUaTZNUmlQTVptOEtoMWRMczE3MnA4blJUby9rVS9QSS9qUXZxQWs4RDU3M0RRZ0l2bWthcEhSQUFNeEhIMytpNjl5bDYxTXN5L1luaFBUeWRhcmFTb3F1K3pxUEh6K0dHZE9uS1pyQTQ0OTZ6Y3grVC9USG9NRkRxdlFiaHc0ZXdNb1Z5MkV3NUNFeE1RbGp4bzVIU3BNbXl1ZDdmOTJERFJ2V0lkOWtRa3hzTElZUEg0RjI3VHNBQUVhKy9pcXlMbVVDQUVhLytRWlVLaFlKQ2JXd2N2VWFpS0tJcmwyNzRlRytmYUhWYWhFZEU0TldyVnZqN0prenltS3FFUjZPNXdZT2hFYWpRVUt0V3VqWXFUUFMwazVYMjd5b3dqRWJFVUlheGNiR1RyaVVuYmZiNlhSc256SDlyUjJmZmJiWkNZQ1hORGNaN0JTUWszMXhoRkJRNmpWVEthWFU3WGFENTNraUJSVW96L053dTkxZ1dSVjROUStPdit5ejVhUmdsTFdrUkFsTWVUeWVVZ0FYR1JsWm9mWW1paUlZaGluM053RGs1ZVhoMjEwN1MrMi81djExeXQ5dWx3dERCcitBanAwNkF3QldyMXFKOVBRTGNOanRxRmV2L3RYWitrMmFLSW5zVnpySHN2OWJ6R2E4dCtZRE5FNUpLZldkV2Y5NUc2TkdqVUh6RmkyeGErY09MRisyRklzV3Z3dVh5NG1GQytaaDVlcTFZTzRtWVBNTkZEaWRUcHc1Y3dabno1N0Z4WXZweU03T1FsNWVIdkx6VFFyQUZSY1h3eXFab2phN0hRNjdBMDZIMHlkWHpRMjMyMDNjYmcveEJoRTg0SG1PU0RscFJCUkZSaFJGaGxMS1VrcloxTk5ubTJkY3lwN2RyZnNESjFRcTFRZStvT2FyUFY2dnRHalJFdHUyNzhLYm84YWdaczBFYk51K0M5dTI3Nm95cUYwNGZ4NXZUWnVDRWErOWpsM2Y3Y1pUQTU3R21ORnZ3R1EwQWdBeU16TXdlOVpNVEp3NEJUdS8vUUdQUFBJWXBrNmRESWZrckYreGNqVzJiZDhGQUZpeWJEbTJiZCtGbGF1OUpXZ013K0M1Z2M4akxLeUcxOWw4TVIwSGZ2c05iZHUyVTdUS0ZTdFhRNmZUS3hQOStMRmphTmFzZWJYTmk2czVKaUdrWjBCQTRNb0ZpOTdaWDc5Qmd5bHIzMS9YakZLcWhUZmhXUU5BRFZBVnBWUWwzM2Q1SGtoemduQWNSenlTTnVaeXVZakw1U0l5V0RtZFRqZ2RUampzRHRqc2R0aHNObGlsd0pYTlprTnhjVEVLQ3d0aE5wdGhNcG1RbDVlSHJLd3NYTHAwQ1c2M1d6blBJMGNPWStya2llQTREaGFMQlM4TkhWSktHMXUwY0Q1R3Z2Rm1wV1B5M1hmZm9sUG5Mb28yT095bGw3SDRuU1dvVTdmdVZZOXZTRWdJTkJwTmhaK3RYL2MrTm4rNkNRQnc0c1RmZVBPTjE4czljTXI2eVI5OTdIRTBiOUVTQUhEUFBZMWdsZ0F6THk4UFlXRTFVTE5temJzdkt1bzFTWTNJenNxV25pTDVLQ3kwNE1LRkM5ajl3L2ZvMXUwQnVGeE9PRjJ1eTZhbnBLVmxabVlnckVZTkVFSWc4RHpoZWErRzV2RzRJUWdDWVZVcThCeEhaSkhOemQ2OSsvUlorOEg2Wi9mOWIrOVRIMjdjQUk3alVMZGVQVXlhUEVWWlRMZVQ3Tnk1SFYzdjc2YVlzTDM3UElUdnZ0dUYzYnQvd01EblgwQkVSQ1EyYlB3WXRXcDcxZjlISG4wTVM1ZThnNnlzUzJqWXNHcjFqcWtuVDJMMHFKRnd1Vnk0djF0M2RPbDZmNFg3clhsdkZmUUJBWGpvNGI0MzdmcXJja3hDU0sySThJaFJRY0hCb3pLemNyZVdsQlIvMVRTbDBTOEE0YVhJcWlCcGJZS3ZCZ2VBOGp4UEdZYVI4eGVwbE5kSUdJWUJMNmdvTC9nbWNYdjl0MDZIbzFRK3BLelJlUlJ6MVd1bVJrbEp2YTFhdGNhdmUzN0J6Qm5Ua1pPVGpTZWZmQXJoRWtocy8yWWI2dGF0aDBhTlV5bzF6YmQrOVNVV0xuNVhlYTh5WUxwZWVmYi9CbUwwcURkZ05oZGczLy8raDFsejVpcWZtUzFtVEo4MkJXYUxHVzNhdE1Yb01lT2cxV3JScjkrVHlqNWZmUDRaZXZidURRQ0lqWTJEeFdKR2VucjYzYVd4aWFLSTlQUUxPSFBtaktTbFhVSmVYaDVNSmhQT3BLV0I1M2xjeXJxa1ZCTEllV3BPaHhOT2x4T1VVbmpjSHVKeHUwdHBhRkxhQnFHaXlCQkNHRW9wMCsrSkoxVVhMbDRhUEc3OGhCKzdkTDEvcTlsc2ZtckY4bVY0ZCtreWZQTHBaMUNyMU5qNjFWZTNiWkFsTHE2MG42OTI3U1FZREhrQWdLQ2dJQnc5K2dlR3Z6d1V6ejM3TkFhL01GQVozNnBLU3BNbTJQM1RIbnp4NVZiazVlVmh3L3AxNWZiNStLTVA4ZnZ2aHpCMzdueW9WRGZuR1Z6VlkxSktZU20wSUNnd0NBekRQQkVXVnVQVFM5bDVXOUxPbm4rMmVmTVdla3FwRHBlSkFYdzFPSVpTeWdpQ3dQQThUM2llSnh6SEVaN241Y0FCY2J2Y3hPVnllVk0vSEU0bFYxSU9IdkE4cjFRc2hJYUdRcS9YdzJReUlUYzNGMWxaV1VoUHZ3QktLWVlQSDRFL2ovNEJyVWFyZ0xUUmFNQ083ZDlnMkxDWEtyMjIzL2J2UTFKeUhjVEd4bDNYV1BidTNSdjkrL2RIZkh3OE9uVG9nUDc5KzZOeDQ4YWw5Z2tLQ3NJcnI3eUtMLy83QmJwMTcxN3F3VGgrL0VTODgrNVNiUHIwYzVqTlpueTlkVXVwNzI3NThyOG9NQmZncWFlZUJnRG85WHBNbmpJTjgrZk52bnMwdHFLaUlwdy9meDZzU2d0VHZoRVdzemMveldyMW1wcFpXWmNRR3hlSDNOd2N4TVRFS0U5Q1ExNGVPSTRESVFTVVVzSnhIZ0FFSE1jUlFlQ0IwaldhWlBOblh3UXZXamgvOEpLbHl3Y1JRcG9lUEhnQTgrWXZCQlZGdkRGcXRHS0NOYnpuSHVUbDVkNldZeFVURXdORFhsNnA5M0p5c3RHeXBUZnZhTi8vOXVMVFRaOWd5ZExsU0toVkN3RFFwVlA3aXJTYWNtRG5kcm53M1hmZm9rK2ZoNkRWNlJBWEY0Y2VQUjdFL3YzN3lrM2FIM2YvZ0dVclZ0MjBoTk9yT2VhUkk0ZWhVYXZSb0dGRDMrdnRHQmdZMkhIN3ptOWZkcnZkbjMzOTlWZi9uVEJ1YkFraFJKQjhjYklXcC9qaUJFR2dsRklxaWlJNGpvTWdpSlJsUlFpaVFBUkJvSUpLZ0NCNFFjODNKOUp1dDBPajBVQ24weW5sV2JMLzdmeTU4eWpJTDhDYU5hc3c4UGxCT0hzbURRdm16OFdreVZPeGM4Y09XRzFXdkRMOEpZQjR5UnlHREhvZWE5WitBSzJVUXZMRjU1L2g1VmRHWFBkNGZ2Lzk5d0NBRGgwNklDTWpBN201NWVmN2hRc1hNSC9lSFB4bjFoeHMzTEFPdFJPVDhQRERmU0VJQWxxMHZGY3hoWHYyN0lYRHYvK3VmTy9YUGIvZ3h4OS93THRMbHBlS2xyZHIzd0h0Mm5lNE96UzI3T3hzbkR4NUVsbFpXY2pLdW9TODNEeVlUSmVEQlVhREFZSWdJaWd3Q0VXRmhZb2ZyU0EvSDRJZ0lDUWtsR2kxT2tJcGhTQUloQmQ0SWdnOFlTUUJ3RHo1WlAvd2k1blpZenQxN25Jb0pqWjJjZHJwVTAyenNpNEJBSktTa2hFVkhZM09uYnNvaTN2SGptL1FvOGVEdHk2UUlwazZBRUFseWlRWmhCN3Urd2oyN3QyRHc0ZC9COC96K09XWG41RjY4Z1I2OXZLNkJNMW1Nd2dCR0paRmNYR1I0aU9oWXVrcWxyajRlQnc2ZUJBY3h5RmZvbW5TYUxYNDVPT1A4UG5ubThGeEhJcUtDckZ2My8vUXJGbXp5NmJ3anUzWTl2VldMRjIrVWpHZnF0MzhydUl4M1c0M2ZqOTBFUFBuemNId1YxNUZZR0JnUllEZVJLZlR6WG4yMmVlK1AzOGhZOFRxOTlaR1NScWNsbEtxb1pTcWZUVTR5US9MZU1rUGVNTHhIUEVHRGR6RTdYWVRsOHNOSDU5Y0tlM05icmZES2lYeHlyNjNyS3hMT0hUb0FPclVxWXR1M1IvQXRPa3pvTkZvWWJGWU1IVFlTL2o4aXkzWStORW5XTE4ySFRRYURUWis5SWtDYXFkUG5ZTGI0NmxXbjZhdkhQM2pDQ1pObm9yN3UzWEh1MHRYNEZUcVNWQktVVnhjakJjRy9wK1NvblQ4K0RFa0pTY3JmMy8wNFViTVg3Q293dkVIL3VYcEhwUlNuRDE3RnBtWm1RckZFS3RTbzZTNEJGYWJGUTY3SFE2bkU5azUyUWdJMEV2T1Y0TGk0bUlRaHNEbGNoTzFXZ1VQNTRFb0NnQkFmT2lCR0FEa2h4OS9DYmwwS1hQWWdmMzdoakVNVXhjQU9uYnNqSU1IRHlJd01CQ2RPM2N0Wnc3UG1UTUxEenpRbzFJZlIzVkwyUVRkQmZQbllzSDh1WGl3WnkrOE5YMEc2dGR2Z0xkbnpzSjdxMWZDa0plSDJvbUpXTGo0WGNSSTJjeDlIbm9ZSjArZXdOQWhMNEJsVlhqczhYNm9YNzhCTElXV1VzY1pNMlljRmk5YTZIMFMxNjZOZFJzK2drYWp3WUtGaTdGeXhUSjg4ZmxuVUt2VjZIcC9Od3dhL0NJQVFCQUVMRnJvTlFPZmZicC9hVE54MCtick5vOHFrcW9lYytScnI0SVFJREV4Q1dQSFRWQjhrRmVRdWxxZGJrYmZSeDU5b2NlRFBULytadHZYbjQwYk83cFkxdDRrLzV1aXhYbFRRNGhJS0FYMVZxaFFRUlFoaWdMaGVSNHN5MUs1Y3FVaWlpdjVZV1V3NUtGR2pYQTBhTkFRWjgrZWdjUGh3Sml4NDZxVTJ2UDVaNS9pcVJ1Y1ZuUGd3SUZLUHh2dzlEUEszeEVSRVJnL1lSSUFJRHc4SEM4T0c0YlhYeDBPU29Ia09uWFE3d212YjIzK3ZEbHd1OTBZNVJOb21QclcyMmpRb0NFS0N5MTRlZGpRZjIrdHFOVnF4Zm56NTNIcDBtVS8ybDkvL1FXR1ZjRnVzOEh1azV1V2xuYjZzdlpDS2RScU5kSHBkTEJhclRMdkZwR0lJQW5ETUlSU3lpUWxKYkY3OXU1L21XWFpsMy82NmNmRysvKzNGelArTXhzQWtKNmVqbmx6WnlNb01CQ0RYeHlLNXMxYktPZTFiT203NERnTzQ4WlByRGdpZVM0TlhidDJyZkoxN3QyNzEwOVFXSWxVTnBhM2NNeE9wNTQ0L3RIeTVjczNmL2ZkZHg0SjRCUVRGZDdhVlBtVnlzWDJETU5RUVJBVS9qZVZTa1ZabG9WYXJZWktwVkxJTFdYVE5DbTVqc1QzSnBGWnhzU2daczBFSkNjbmxVdDN1dEZ5OExmL1ZYbmY5aDI3Vk50NS9DczFOcVBSaUFzWExpQXJ5NXZDNFVzRXliQXFyelBXNllUTDdZTGRiZ2ZQODRpT2lRSFBjWEM2WE1SaHQ0TmhXUkJDaUNBSWNpNmFFdVU4ZmViOE15OE0vTDhSUnFPeGJYeDhQUExLK0E3cTFLa0R1ODJHZ29KOE5HMTYyY1RhL09rbW1NMW16Smc1NjRaZHExNGY0RWV3cXh5Yld6aG1qV3JVQ0orL2MrZk9KMHBLU2o0TUN3dmJRUWpoZkFGTzB1S0lWNHNEcFZTZ29sU3JKL25qSUlvaVVhbFUxSmNWUnRiYUFJS2lvaUx3SEs4ays3cmRicmhkTHJoY1RpUWxKbFVySFZKQVFHQ1Z5cW9DQWdLcmRhRC9kY0NXa1pHQjlQUjBaR2RuSzBtQmN0S3QxV29GdzdCS0tvZkg0NEhGYklGS3BZTGI1U1k4ejROS0JlcmV0QTJHaUNKUEJFRWdBSmcyYmRwMmYyZkowbGNEQXdQN1Rwb3lGVk1uVDBTTjhIQ29WQ3dDeWl5V2pwMDZvNlM0U0VrMk5Cb05XUFBlS2lRazFNS1FRZDRvSXNPdzJQalJKOWQxdlN6THdtNjNWZnVUK0U0VHU4MWFhUWtXYzR2R3pHNnpnbFdwUUFocEV4b2Eya1lRaEw0bWsrbkR1TGk0QTRRUWpsTEtFMEprZ0JOQklJSkNoQ2dxQkptaTZNMGFrYW10UkZGVXpGTUEwT24wc0phVWVGTkNlRGtsaEx0Y3llQnl3K2x5b1pZVTlMblJrbHluM2o4V3dnY0VCQ0s1VHIxcUhldC9qU2xLS2NXWk0yZVFucDZPbkp3Y0dJMUdoV1pJcnZmTXlja0JZUmd2SzBlcHNpaWVlTms0ZUYvNklGbExZMDZrcGpVSURnNStqUkR5eXEweW55b0g4a3lZTFJiRXhNYjcwY3hYYXpma0lqSXlBb20xeTFNNlpXUm13bXkrK1dObU5PUWlJaUlDU1ltbHo0bmp1SFdwcWFrZnQyelo4Z0lBRGdBdlJWSVZINXpNSCtmTENlZERjRW5MbXFVeUpaSWNNWlZUUThMRHd4RVZGWVc0dURqVXJsMjdXa3ZxYnFYOEt6UTJ1WW9nSXlOREFUV3oyWXppNG1LZkluWUgzRzQzUkVwOXk2SUl6L1BnQlI2aVFpdEVDUVVsb0pUMGYyb0F1M0RST3lOWmxuMERRTUxOdUphZzRPQ3Iyajh4c1RieTgwMHdHbklSRkJ4eTEydHVkcHNWTnBzVkFzOVhDR29Ba0pTWUNKUHA1bzJaZkU2aUlKUUROUUJRcTlYRFdyUm8wY2R1dDYvdDNMbnp4OGVPSGZQSUFBZHZrTXEzQUYvaGhwTkJqbUVZSXZuZnFFeFI3dHRjUmdZNFg5WmV1ZWRDdzRZTnI3blc5SGFXTzE1akt5d3N4Tm16WjVVOEdWOE90Ykpra0lXRmhmQldDL0RnS3RmU0dBRGszSVdNbmhxTlpoU0FCMjdtb25TN25Xald0T2xWYTZzWE16SmhzWmdoOENKY3JydVRvMDJ2RHdERHNvaU1pRVJpWXExLzFFWXlNeThodjZBQUFpOVUyNWpwOVFGZ1Zhb0tOYldLUkJURlBTYVRhVjFjWE53K1FvaHZnSUdYTkRkQkFqUlJEaTZ3TEV0OXdJeXExZXBTSkphK1BSYmtCakp5ZDZ5a3BDUTBhTkFBTldyVThBUGJiV051R0kybDBqbGsydTZLR0c3ZGJqZnNkanRjTGhjUktZVWdFVUVxV2hxbEJLRE1rYVBIWXFPaW9rY1JRa2JmN09zeEdmTVFGeHVEdUxnNCtPWHVGby9IcytxWFgzN1oyS2RQSDRNVVlKQTFPTUVuY2lxREc1VzFOVmxUVTZ2VlZHNEJXQmJjZkUzUytQaDRKQ1ltb2tHREJ2K3FKakozckNtYWxaV0ZjK2ZPSVRNelUwbm44RzJ1SXRPNitETGRDb0pBUEI2dUl2WU5CZ0J6NGVLbC9pcVZhalNBKzI3bXRUanNOdGlzSlFDb0g5VDhBZ0RRYURTdjllclZxNFBaYkY0YkVSSHhIU0dFbGNDTjg4bC9JMTRsVHhSOUd2NVFINnA1V2xtdVcyVjFwOVVWVlBBRFd4WGt3b1VMT0gvK3ZBSnFjanBIMmVZcVplaTdDY2R4QUtoODArVXVUOHkyYmR0cWhZU0VqTW04ZVA3Vm0zMHR3Y0hCVUtsVWlJK1BRMnhzckg5RisrV3lPVVZJeS9EdzhEVWVqK2VEMzM3N2JVTzNidDJ5Q1NHTWJKcFNTbmxjWmw0V3ZWNEo2aHNwSmI1UjA3THBJVEo5dlMrMXZjZmpRZDFyWVBEd0E5dDFTbHBhbXBKNEszZU5LaXpGZE9zb0MyckVweGVCNGt1RFZEbmdkcnVmVUt2Vll3RzA4aThsdjl5T29sYXJYK3JhdGV0OStmbjVhNktpb25aTHZqZEdBalZaZTVOVFFjcHFiK1hTUXNwV0x2aDJUcE1CN3A1Nzd1eWtiNUtSa1hGSG5LaGNIaVVIQ1h6OWFXVzFOSjlPVWNSYldPenREQ1duY0ZCS3ljOC8veHlXbUpnNGptR1lDZjZsNDVjN3lQZTJiT3ZXcmVzblRacFVDTURqaytBcnlQNDN1V3BCU2dueDliMVIzd29GdWZWZlVGQlFPYitiSEZTNFU5TkJWSW1KaWJmOVNYSWNoOVRVVk1WM1ZsR0hxQXE2UXZsMlUvY0ZOY1p1dDNmUmFyWGpDU0U5L1V2RkwzZVl2RGwrL1BpVVo1NTVabTFTVXRJUkFDd0FPWHBLVUpySkY2SW9naEFpbDJRUm1mK3RySWJtVzJUdmNEaGd0VnBSVkZTRWxKUVVxTlZxdnlsNm84WGxjaUUxTlZVcGtaS3JDWHhiNGlrOUNTVENQVmxUazAxUENkZ1lTaW5qOFhpR3N5dzdFWUEvbzlVdmQ2UXdETk1qTVRHeGNVbEp5Y3FRa0pBdkFEQ1NlU29ubFpjS0xNZ1dEL1VLa2FzWGZQclk0a3JGOVNrcEtaVjJ4YnB0VGRIYk9kM0RicmVYQXJXeTFRUmxHeGJML2pUSi9KVHJQQmxSRkVsdWJtNThkSFQwQkVMSXEvNmw0WmZiMWQxaU1CaGdOSm9nQ0FKc051cy9mb2ZuK1hWSGpoeFpOM255NUZ4SmM1TXJGNVRpZXArOE4waXBJWElTcjVMekpuZW1MMXVsRUIwZGpabzFheUk1T2ZtMkFMZmc0QkN3TElQbzZPZ3JaaERjdGhxYjFXcXRGTlJraGx1NTk2SnZrRUFHTlovSUoyTzMyenRydGRxSmhKQUgvY3ZITDdjcnFCMDdkZ3dVUkttR3FHSlcyYkQ2RFJ2WDZkcnRnZmM2dEd2ekJ3QUczc2lwVElEcXBVWHkva09sdnJkZWpZMVNMME9TMUFkWDN1UWV1b0pJd1FzVUhDL0M3UkdRbUp5QW9LQmJYOWxpdDl1UW0yZEFibDRlN3J2MzNqc0gySXFMaXhWUWs0dlp6V1p6aFpwYUpaRlB4Wi9tZHJzSHFsU3F5UURxK1plUFgyNVhNUmdNb0NEWFZML0tNRXozV3JWcUo1NU1UVnZSSk9XZUhhQ1VvWUJ2M3cxQm9nc1J2YkVBQ3NrQ0JienJoQ29tcVJ4UmxjeFVVYVFRcVJSTnBTSWFObWlJNEpDUVd6cFdnWUZCQ0F3TWdzbVlCNFBCVUdHYTFHM0ZvUHZERHorZ2ZmdjJpSW1KUWRldVhURmh3Z1RzMmJOSFllaW9LQUxxVnZvUGVIMXEwc2FJb3FpYVAzLytsUFQwOUxYZmYvLzliUU5xUE05ajFLaFJpSTZPUm1ob0tJWVBINjUwZC9MTDNTc21VejZDZ3E4TE1PcUdob1V0UG5mKzR2Q0c5elFLQUtDVHVtZkpQUmRZU3NGU0tuZkxFZ2pQYy9Cd25KZXAxK1dXZWl4NHUyTlpyVllVRnhYQllqSERaRFFoSnljSEdSY3ZJdTFNR2txS2kyK0xNUXNNQ29aUjZweFdWdGdaTTJiY0ZpZTVkKzllOU96WkV5a3BLWGpnZ1FlUWxKU0VvcUlpSEQ1OFdJN3NLSUJXMXZ5VXRUUXZ0YkxBcEtTazFQcjg4OC9uZHUzYWRjeUFBUU9Za0pBUWRPblM1YmE0em9rVEoyTGJ0bTM0OU5OUDhleXp6MkxwMHFVNGRlb1VIbnZzTWYvcXZvc2xOemNYTmNJanJ2cDdwMCtsWXQ1VTdNZUhBQUFnQUVsRVFWU2MyZWpWdXc4QU1DcTF1dU96Ly9kY1NLdldiUzU4dmZVckIrQlYzU296ZnlsQWNMbVJ0MlNPMHN1YnBLa1ZGT1RqME1HREtDd3NSRVJFQklLQ2dxSFQ2ZkQxMTE5aC90eloyTFp0S3dvdGhXZ3BtWWI1K2ZsNGE5b1ViTjY4Q1QvLzlCT2FORzJLME5Bd0FNQmZmeDNIdENtVHNIWHJGaHcvOWlkYXQybDdUVjJ3TkJvTnJOWml4RmZnYTd0dFRORzFhOWVpYWRPbWVPYVpaNUNWbFFWQ0NGcTJiSW1DZ2dLY09YTUdLU2twbFNYZWxnb1NQUGpnZzYwYU5XbzBwVnUzYm4zbG0zZTdpTjF1eDZwVnE3QnAweWFGbXVqOTk5OUh6NTQ5c1dEQmdncWIzdnJsN2hDcnRRVFIxMkNHTnJ5bkVkNmUrWjlTNzZuVjZrRmR1blNKL3VYWC82M3BmbitYRTVSU1JrSTN4VFNWc1UwVUJKR1hmRzJBOTlVTGVCS3dnZUpDK2dWd0hBZVdZUkVSRVlHTWpBeFFBSUdCZ2RpNlpRdldmckFlR28wR1k4ZThpU05IRHFOMTZ6Wll2V29GdW5kL0FIMGZlUlIvL0hFRUMrYk54YXIzMW9MbmVjeWJNd3Z6Rnk1R1VsSXkxbjNnN1N2NjBzdkRyMm5jZkhzRjMzYW1hRkZSRWV4Mk8zSnljbkRod29WU1ByWEV4RVFrSmlZcUtSMTJ1eDM1K2Zta3NMQVFOcHVOdUZ3dUlnZ0NJNG9pazVTVTFQdkhIMzljc256NThyNkVFSFRwMGdWSGp4N0ZXMis5aFhidHZBMTUyN1ZyaDltelo2Tjc5KzRJQ0FoQXZYcjE4UDMzMzJQWnNtVklTRWhBYUdnb2hnMGJwaEQzVVVveGI5NDgxSzlmSHhxTkJoRVJFUmcwYUJEc2RqczhIZythTm0yS0J4KzhISlBZdEdrVHRGb3RqaDgvRGdEbzM3OC9Xclh5RmpVY08zWU1UcWV6Rk45YTU4N2VUdHNIRHg3MHIyNi9sQk96Mll5eFkwWmgwUFAvaDhHREJ1TDNROTU1a3AyZGpRSDluOENUL1I3RnFEZEdsdnJPNUluak1XVFE4MzFtLzJmRzFKU1VsQzRBZEtEVXQ1RU1LNG9pSzY4YnBZa014NkdrcEpnWURIbGVRa3FudDNGelpHUWtHalpvQ0kxV2c1S1NFdVRtNWlBekl3TzdmL2dCS1UyYUlDREFTN0phSTZ3Ry9wTG0vVjkvSFVlWEx0NTVIaG9haXJTMDAvQjRQRERrNVVHbjF5TXB5ZHVZSlR3OEhIOGRQM2JEeCsyV2EyeHlvS0JkdTNiNDl0dHZNWGZ1WE1URnhTRWtKQVI2dlI0eTE3dWMwbUUybXdrQXFGUXFRaW1WdTY0elZxdjFXWTFHTTdWdjM3NzFHelpzaUVXTEZvRmhHTFJ2M3g2UFBQSUlwa3lab2h4ei92ejUyTEZqQnpwMTZvUlhYbmtGL2ZyMXcrT1BQNDdUcDAvajFLbFQ2TmF0R3g1NjZDRTg4Y1FUV0xWcUZSWXVYSWpObXplamNlUEdPSDc4T0FZT0hJam16WnRqekpneCtQREREOUd1WFR0ODhza242TjY5TzBhT0hJbVpNMmVpUllzV0NyQVZGaFlDQUhKeWNoUnc5SG02SWlJaUF0bloyZjVWN0pkeThzWG5tOUdzV1RNTUd2d2kwdFBUc1hyVkNyUnQxeDRKQ1FuNDc1YXRPSGZ1TE9iT0xrMDFQMi9CSW1sdEZiVVovdExROEE4LyttVEY0RUhQZnlzcE1rU3lUamtLQ040SE9CR2xmRjRRUXFoS3BTSnV0OXVyeEFHZ29DQ0VnZHZsZ3MxbVE3NHBId0JCWm1ZR0FnSUNjUEZpT2xZc1d3cEJGQkFzK1FtTGk0dWgxZW13WS9zMytPbW4zZEJvTkxEWmJDZ3BLWUZXcTRYSDQ4SEtGY3VRbTV1TG9xS2lHejV1dDFSajgwM3BFRVVSQXdjT1JOMjZkV0V5bVhEcTFDa2NQWG9VcWFtcEtDa3BnZHZ0UmtsSkNaSEFRSW40TUF6REJBY0h2L0xsbDE4dTBtZzA5ZVdHRnpxZERocU5Cb1FRaFZsVWxuNzkrcUZidDI1UXE5VjQ0b2tuNEhLNU1IZnVYQVFIQjZOdDI3Wm8wcVFKVWxOVEFRQkpTVWxZdjM0OSt2VHBnOFRFUkR6MjJHUG8ycldyOHZsOTk5MkhTWk1tWWZ6NDhSZ3laQWlhTkdtQ0NSTXVWMms5ODh3ekdESEMyNlBSNFhCVW1BdWsxV3FsRGxsKzhVdHBhZDJtTFg3KzZVZDg5T0ZHdUYwdUxINW5TWlcrSjRvaVpzNTRHdy8zZmJUZUF6MGVuSFlxN2R3QUFEcHAwMUJLMWFCVUJZQUZLS09rUndHRVpWWGdPQS94dUQwK3JmN3NjSHM4Y0RnY3NCUmFrSjl2UWxGUkVVNzgvUmZHanh1RDU1NS9BZDI2bGFZdW5EZG5Gakl5TG1MeE8wdWgxV3BMS1ROalJyK0p4bzFUTVBLTk42dGwzRzRac1BrbTM4b3BIUzZYQzNYcTFFR3JWcTNRdUhGalJFUkVRQkFFR0kxRzRuYTdKWFlPN3hOSHpsSGpPRzU4U2tyS2d0VFUxQ3AzcVBBdEk1TUhQQ0Vob1pSVFVnYWF2bjM3b25idDJwZzVjeWFlZSs0NXRHalJBdDk5OTUzVU9NTXIwNmRQUjBSRUJQYnMyWU9QUC81WTZYTlFWdlI2UFR3ZVQ3bjMzVzUzcGYwUi9YS1hBMXZyTmxpNWFnMXFKaVRnNDQ4MjR1MjNwbGJwZSt2WHZRK2RUb2VCejc4QUFGSEJ3Y0Z2ZmYzTjlzRUE5Qks0YVFraGFrS0lpbExLQW1COEFuQ0U0M2g0T0E5UklxWk9KemlQRitoS2lvdGhzVmpnY2J0UlhGS0N4eDkvQWdRRUpkWVNoSWFGS2Vabmg0NmRNUEtOVVZDcjFmQjRQQXB6YjBseE1VYVBHWWZlZlI2Q3krVkNtUFNkT3g3WWZNdWtzck96a1pPVGd5MWJ0dURpeFl0S25ockhjZERyOVFnSkNTR0FsLzdiRjlSV3IxNnQ1amh1T3NNd3MwVlIxSlh0T0g1RisxdFYzZ0t2ck5oM3laSWw2TkNoQXpJek05R2hRd2VzWGJzV3ZYdjNMcldQMFdoRVRrNE9LS1g0OWRkZkt6MXVRa0lDWEM1WEtkV2I0emlZeldiVXJGblR2NHI5VWs3bXpaMk53MGNPbzBlUEJ6RjV5alFjT25RUS96VFg5Ky9maDcyLy9vb3BVOS95bmRlNkprMmFUcm4zM251SE4ydldQQkJTT2dpbFZBMHBIUVFBUzBXUjhEeEhCSUVuUEZjNkhZVG5lYmpkYnNXa1ZHczBjRGdjS0NqSXg4V0w2ZGo5dy9kbzFMZ3hBS0JGaTViS2VmNTU5Q2lTa3BLaDBXZ1FHeGVIMExBd2FDVUxhdisrZldqZW9zV2Q3Mk9UQzlwOWF6K0xpb3FRbjU4UGg4T0I1T1JrMytSYkltczRjdnM3QUdUbnpwMUJQWHYybk1vd3pMaWlvaUtjT25VS1E0Y09yZkI0MTh0T3NHVEpFa3llUEJrelo4NVUzc3ZJeUNnVndYenBwWmZRb2tVTDlPdlhENk5IajBiUG5qMHJCS3FXTFZ0Q3I5ZGozNzU5ZU9TUlI2Ukp1QjhNd3lqQkRiLzR4VmNHRG53Qml4Y3Z3T2ViUDRVb2loZ3pkandZaGtGMmRqYkdqSG9ESE9kQmNYRXhCdlIvQXZmZWR4OG1UWjZLbGN1WHd1Vnk0YlVSTHl1L3MzTDFXZ1FIQjJQQm9uZEd2N05vb2FhZ0lIOWRibTZ1L0lTVm82Vzh0TllFYjJNc3dldGlrL2JoZVlGNk9LODVDZ0lFQndVakxpNGVuMjd5ZHBLLzk5NzdFQndjREo3bjhlcHJJekYvM2h4OCtkOHZvTmZyTVhIeUZFV3BtREwxTGN5YU5RT2NoME90V3JVd1lkS1VPeHZZS0tYbHlxVGs2R2R5Y2pMT256K1AxTlJVQkFRRVFCQUV1TjNlcHdRaFJDYlRJeWtwS1RWbXo1NDlOU0lpNGsyMVdvMHBVNllnSkNRRUF3WlUzTDA2S0NnSUJ3OGV4S0ZEaDY0SlBNTER3M0hnd0FIazV1WkNFQVFzWExnUXAwNmRRbE9wTDhINjlldXhaODhlL1AzMzM2aFhyeDQyYmRxRWwxNTZDZDkrK3kwQTRQUFBQMGRoWVNGR2pCaUJ3TUJBREIwNkZLKy8vanFDZzRPaDBXZ3dmUGh3REJreUJPSGg0ZjVWN0pkeVVxdDJiU3hidnFwQzdmKy9XN1pXK0ozUC8vdFZwYjkzenoyTjhNSDZqYSs1M1c3VjVrODNyWnYrMWxTenRMWjhsQUVHbElxQ0tES2x3QzBvS0FnYXJVYTJua0JBVUNNc0RFbEpTWWlJaUVCTVRDd3lNekxBc2l3YU4wNnAxQi9ZdEdrenJIMS9mYldPMjAwMVJhOVUwQjRVRklUWTJGaUlvaWlibzBRR05aWmxDYVdVWExod0llTDc3NzkvS3k0dTdzMEhIbmdBWGJwMGdWYXJ4Zjc5K3l1MTAxOTc3VFVjT0hBQWd3Y1B2cVp6M3JCaEEwcEtTbEMzYmwyMGE5Y09OcHNOa3laTndwOS8vb21zckN5TUdUTUdVNmRPUllNR0RjQXdERDc0NEFQOCtPT1AyTEJoQXdCZ3k1WXRXTC8rOGsxY3ZIZ3hIbnJvSVR6KytPUG8yN2N2N3IvL2ZpeGJ0c3kvZ3YxeVUwV3IxUTUvYnVEQWwrY3RXQlFGUUN0VkthaTl5bzVTcFVCRTBadDU0RzNBN0Ewb3VOM2VLZ1dIdytFMVN5V2ZtOGxrUW01dUxqSXlNbkQyekpsYmVuMDNqZDBqTFMwTmFXbHBTb3M4dVp1VVhDYmx5M3hiSnZtV1VFckptVE5uYXRTcFUrY3RRc2hJLzdRc0xhSW9JaVB6RWl3V0N3UkJnTXQ1ZDVabzZmUjZzQ3lMOEJvUlNFcXFYV2tRUjdZZXZHTm1CczlYMzVqcDlIcW9WQ3BFaEVjZ0thbHk3c085ZS9laWJ2MmJ6MXJyY2JzLzJMVHBrL2Zmbmo3TkFzQkZDSEZEYVJ4REJFSWdFTUlvRFdQVWFoWFVHZzNWYXFTK3BRRUJDQW9NUkxEVXppOGlJaEt4c2JHb1hiczI2dGFyajNyMXFyZWFzYkkrdkRmRkZKVjdGSlRsVTVNN1NSMC9mdHkzUW9ENDJ2M1NGbFN2WHIycEFQN1ZvR1l3R0s2NlU1RGI3Y0ZmZi8wRlZxVkNjRWlvdjYrbzNZYkNva0lVSE0xSGkrWXRvTkdvS3dTMVAvNDRDb1psRVJSYy9XTm10OXRndGxpUVg1Q1AxcTJ1ekVDZmMvUHpHVi9xMXEyN2VISElpMnMvM0xoQldZZGUwOVJiWWdXSWdpaFNVRzh4UEJVRWtRaThRSlZ1OHo0a2xVNkhBM2E3RFZackNZb0tpMkF1S0NpVmNYQWpwZVlWZnJmYWdTMHJLNnRVajRLeTNka2REZ2RxMTY2dGFHb2VqNmRVN2VmcTFhdlZ3NFlObThvd3pKdndTem5KTStTQlZhbjhuZUFsa1prZmpJWmM1T2JsSXFrQ2h1aUxHWmxnV1BhbWpabnZPV1ZtWGtMaUZmcUwxa3hJdUJYRE5uenF0T2w4UmtiRzJsLzMvRktaaGl0Y0JqdVJVaW9TU3N2M1VlQWxabDZQaDRQTDQ4MkJJNFFnL2laSC9hc1YySXhHbzlJaXIyempsUW82U1pHS3VOUWtVQnZuWDdJVmk3bkFqS0NRVVA5QWxKR2c0QkFVRkpnckJEYUx4WUxnV3pCbVFjRWhLREFYWEJIWWJwa1pyOU85OXY0SDZ6ME42aVd2bDdWYU9hQkF2ZEVGS3BiS015RVVJQVFnY2xkNkVFTEFlTWtzd1RBc1dKYUZpbFZCNVRWZkVSVVZkZWNEbTl5aFhXNlJsNStmWHltZGQxbWZtbS95TGNNd1UvM0x0REkvRVNBSXdsMXZmbGFtSlJVWFdTcjg3RmFOV1dCZ0VJb0xMZGYwM1pMaVltUmN2QUM3M1hiRjMwOUtyb3VRMEdzRGJiMWVQenJ0N0FYWFBRM3FicEx3VEpscVBtTW5YbTdmeDFHTzh4QUorRUFZQXNJd0VyQXhZRmtHS3BYQzFndU5Sb1BRME5BN0Y5aWNUbWNwVUN2THAxWUpTYVRjZklWSXZRbGVZUmhtMnBVWDl0VlRLZDl1VWxXcTQ0cUVFTURwOUhPNVZUb1BLK0c1dTVYQmxXdTlYeGZUejhQaHNGOXhIN3ZkaG95TEY5Q3N4YjNYQWI2Qm8wK2VPdU5vMHJqaFZoOVFvMlUwT0JFQUZVV1I4RHhQblU0SFlWbVdNb1NBRUFZTVF5Q1hObm8zRlZScU5UUnFEUm8xYm54VEtNWnZPTEJSU25IbXpCbWxUWjRjL1N5cnFaV0pmc3FOSlJpSjlmWlpsbVdud1Z2NlVlbHhycEZLK2JhVHFsQWRYNnY4dVBzSGJOeXdIaWFURWZIeDhmaDQwMmM0ZCs0c2hnNFpwT3d6YWNvMFBQVFF3MzRrdkkzbG4wRE5keTVkcjFVYUdocjZ4ckcvVHRwYk5tL3l2YSsyVmdiY0FFQ2tsSHA5YXB5SGVIc3JYQVkyaG1YQk1oS3d5VnFiVm9QR2pWT3F2YTNmRFFjMlgxQXIyOHpZYnJkWFNPZnQ2MWR6T3AyOVZDclZWQUJYTk1pdmgwcjVkalNiL29ucStGb2tOemNYQytiUHhjeFpjOUM2ZFJ1VWxKUUFBT3JWcTQ4ZmYvNFZBUERTME1IVmRsMGIxcS9EWTQvM0s4Vm1JcC9Yc2lYdjRNU0p2NkhSYU5EandWNFk4ZXByWUZrV2dKZVNaOFd5SlRoeDhnUzBXaTE2OXV5Rmw0ZVBVRDZ2RHZtblkzYnAxQjVxdFJxRU1FaEtTc0tRb2NQUXNXT25meXVPUmtWRVJMeTZjdVhLa3RkZmYvMUFHYzJORWtLbzlEK1JtMkR4SE9mbEltY0lKUXdCUXlRL202UzVLY0NtMWtDcjBhSmUvZnJWZWdFM05FRTNJeU1ENmVucGxlYXB5ZFJEVW9zOCtMTGZVa29acTlYYVNxUFJUQVh3ajFkOUE2aVVieitBdXdMVjhUVTlaTkpPSXpJeUVoMDdkb0pHbzFIS3dBZ2hTbWVpNm54eWZyaHhQU3dXYzduM1o3dzlEVFVURXZEMU56dngvZ2NiY09qZ0FXemZ2ZzJBTnlkdjBvUnhhTkR3SG16N1ppZFdyRmlOdmIvdXdkZGJ2NnEyODZ6cU1WZXVYb01kdTc3RGtLSERzSGpoZkd6OWFzc3RtU2VFRU54Nzc3M28yYk1uZXZUb2dmajRxM3U0QzRLQTMzN2JqOGtUeHlNN0s2dXlZOVNMaW9vYXZtREJnc2FTNVNUVGpLdVZ1bEpLNVc3MGhPZDU4SnczOWNOVEt2WERqc0tpUXZ6MDQyNnNYZk1lNXMrZmcvMzc5eUZMT203V3BVc1krZnFyZVBhWnB6Qm0xQnNvS2lwVXp1R2pEemZpdVdlZnhqTlA5OGV1blR0dWpjWm1OQm9WVURNYWpRcW95YmxxdmwzYWZUcTBLNkJtTUJocTZmWDZLUURhVnZYbS9OdWM1b0dCUWJCWnI1OVAvdmp4WTVneGZSbzhFczNNNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWc3JtZW9XaXdVMXdzUHgzTUNCMEdnMFNLaFZDeDA3ZFVaYTJ1bHFHL2VyT2FaZXIwZkhqcDJnbmpJTmIwK2ZobDY5Kzl4MFpwYms1R1N3TEl2ZHUzZERxOVdpZS9mdXlNL1BoOFIrVXdxdzVTUmwzNy9mZk9OMTFLeFpFNmRQbjRJZ0NsY0MwTmFKaVluRHhvNGR1K2lkZDk3SmtiVTJINStiSEdBUUJVRUVJYnkzN3BFd2xEQU1DRVBBc0F4eWMzTkJDTUVEUFhvQWxHTEQrbldvVjc4KzlEb2RsaTU1QjQ4OTNnODllanlJTHo3L0RPK3RYb1hKVTZiaHhJbS92WE5zNDBkd3U5MFlQbndZV3Q1N1g1VkIvSVpvYkZhclZXSHE4SzMvbER1M1h5bXRnMUpLWG56eFJUWWlJbUl5SWFSdjFZOVpja01uaTlsc3h1UkpFL0RjczA5ajN0elp0d3pjS3FNNnZocHAwYUlsdG0zZmhUZEhqVUhObWduWXRuMFh0bTNmVldWUXUzRCtQTjZhTmdValhuc2R1NzdiamFjR1BJMHhvOStBU2RJbU16TXpNSHZXVEV5Y09BVTd2LzBCanp6eUdLWk9uYXcwcFZteGNqVzJiZDhGQUZpeWJEbTJiZCtGbGF2WGVDY2N3K0M1Z2M4akxLeUcxeWwrTVIwSGZ2c05iZHQ2NjNnakl5T3hZdVZxNkhSNlpVRWVQM1lNelpvMXI3WXh2NVpqdG03VEZoNk91eVdsUTVHUmtjak56VlY4WGFJb29rYU5HcVgyT1hMa01LWk9uZ2lPNDJDeFdQRFMwQ0d3V0x3UjJYZVhMTVBrS2RPcXBCZ3dETlA3dnZ2dUd4d1RFNk9YdERhZjBpdXdBQmh2UnppUnVGd3U0bks1d0hFZVlqR2JrWmViQzVmVGhlTGlJZ1FHQnFLa3BBUXF0UnFDSUNEMTVBbGtaR1lnTGUyMGN1OGZlcmd2RHY5K0NBQncvdHhadEdqWkVscWREaUdob1dqZnZnUCtPSEw0NXBtaWxOSnlWUVcrbXBwdkJOUzNRN3R2QkhUTm1qV1RDQ0hEYnNSTi8yckxsM2p1MmFmeDdETlBZZjY4T1hDN1hGWDYzdnRyMzhNOTl6VENwNTk5Z2JIakxoTkZtb3hHN055eC9hNXlWTy9jdVIxZDcrK0dqaDA3UWF2Vm9uZWZoM0JQbzBiWXZmc0hBRUJFUkNRMmJQd1lqVk5Td0RBTUhubjBNWEFlRDdLeUxsWDVHS2tuVDZKbmoyNFk5UHh6dUtkUkkzVHBlbitGKzYxNWJ4WDBBUUY0Nk9HK04rMzZxM0pNUWdqQ2E0VERkdjNPK3FzV2pVWURRUkFRRVJHQlRwMDZRUlRGVWtTT0FOQ3FWV3VFUjBSZzVvenBHRHZtVGZSNzRrbUZhT0ZxRzZlb1ZLcm5GeTFhTkJCZUxqZGZrMVFsWVFnalVrb1lob0hINHlFMm13MHVsNHNFQmdiQzdYWkRwVkxCWU1pRDFXcEZkblkyQ2dzdHlNM05SVzVPRGlJam95QW5CUjg2ZUFCV3EzYzg2OVN0aDZOL0hGRW9rbEpUVDhKbXM5MDhZRHQ3OWl3dVhicWtwSFZVcGZkbm1Ram93QnVWcTNiaXhOL1lzdVcvV1B2QmVueTYrUXN3RElQMTY5ZFY2YnZuejUxRGg0NGR5OTM0L1B4ODdOanh6VjBGYkFhREFYRnhwVlgrMnJXVFlERGtBZkN5UEJ3OStnZUd2endVenozN05BYS9NRkRSZEtvcUtVMmFZUGRQZS9ERmwxdVJsNWVIRFJYY3A0OC8raEMvLzM0SWMrZk9yNUJEcnpxa3FzZWtsTUpTYUVIUUxYS0hKQ2NubzFHalJ2anR0OStVb0ZCWjRCMCtmQVQrUFBvSHRCcnRkVDBZOUhvOUJnNGMrS2JCWU9oWmdiL05xN2w1L1cwTUlRU0NJRUN0MWtBUUJPTHh1QkVVRkF4ZUVIRDQ5ME00ZlNvVkRNUEE0WERBWkRLaFY2L2UrT2FicnpGazhQTklUVDJKd0VCdi80VG16VnVnWjY4K0dQbjZDRXlmTmdVQitnRG9BL1EzeDhlV25aMWRMbGZOdDFUS0I5UlFVUVRVYnJkM2xwb1ozNUJaYTdOYUVSUVVqSUNBQURBTWd4ZUh2b1NMRjlPbHhacUhSUXNYSU45a1JHaFlEWXdiUHdHSmlVbjQrZWVmOE44dlBrTm1aaWJtenBrRmpVYUQ1NTU3SGwyNjNvK2xTOTdCc1QrUHdtQXdZUGpMWHI2M3RlK3Z4NGIxNi9Ebm4wZGhOQmlRMHFRSkxxWmZRR1JVTk41NWR5a29wVmk5YWlYKytPTXdPQStIOWgwNjRyWFhSNEpTaW5GalJ1SCtidDN4eUtPUDRjU0p2ekZuOW4rd2J2Mkh0MFYzYlYrSmlZbUJJUyt2MUhzNU9kbG8yZEtiaXJMdmYzdng2YVpQc0dUcGNpVFVxZ1hBR3pXc2FIR1ZCVHUzeTRYdnZ2c1dmZm84QksxT2g3aTRPUFRvOFNEMjc5OVhhcjh0WC80WFArNytBY3RXckxybWhOT3JsYXM1NXBFamg2RlJxOUdnWWNPYmZuK2tza1A4K2VlZkFBQ1daY3RSeTl0c05vd2ZQd1lEbngrRXMyZlNzR0QrWEV5YVBQV2Fna1ZPcHhOYnRteFJBWGpscjcvK01qUnYzdnhQeWRjbVN2NDJKV0pLS1NVTXc4TGpjVk9uMDl1VW5qQU1vcUtpRUJBUUFKMU9oNy8vK2d1aUlNSmlNVU1iRjQvblh4aU1CZzBhNG1KNk9pNWxaaXJIZlc3ZzgzaHU0UE1BZ0plR3ZZaTZkYXRlVUgvTkdsdFJVVkdGdVdxVmdCb3AwNldkeWMzTmpkZHF0Uk54QXp1MHQyN1RGalZyMXNUTHcxN0UxMXUzUUtmVG9YWHJOZ0NBT2JObm9XZlBYdmg0MDJkNC9vVkJtQzVSTEQvd1FBK3NmWDg5YXRhTXg3UzNabUR0KytzVnMyalU2TEdZTUhFS2twS1RzZmI5OWFVNHBOcTJiWWNaTTJjaE16TURIMzJ5R1pjeU0yR3hXR0EwR2hBWUdJQU5Hei9HeDVzMkkvWGtDUncvZmd5RUVFeVpOaDJmYnZvWWFXbW5NWGZPTEV4NzYrMWJCbXJTL2ZCcUg2S29hTklBOEhEZlI3QjM3eDRjUHZ3N2VKN0hMNy84ak5TVEo5Q3pWeS9GSDBrSXdMQXNpb3VMc1BuVFRkTHZsR2FLaVl1UHg2R0RCOEZ4SFBKTkpxODJyTlhpazQ4L3d1ZWZid2JIY1NncUtzUytmZjlEczJiTkxwdkNPN1pqMjlkYnNYVDV5cHZHVTFmVlk3cmRidngrNkNEbXo1dUQ0YSs4ZWtzbzNmUHo4eFdBMG1nMENBc0xLOWNRNWNLRjgramF0UnYrNzdtQm1EWjlCalFhcmVKanV3NnBXNzkrL1JkSGpSb1ZXNUcvalZMS01BekR5RlJqSG84SEhNOFJ6c1BCNDNiRFlYZmd6Smt6aUlxS2d0MWhSMUZSRVFvS0NtQTBHUERISDBld2ZOa1NQUGxVYVY1Rmp1T3c2Wk9QUVlpWHg2MWFOVFpCRUpDZW5xNEVDM3dqb0JXa2RaQXlhUjJFVXNwRVIwZFBJSVE4ZUNOdnVFcWx3b3laczNENlZDcSsvZlpiREg1aElHYk5ub3M2ZGV2aTdKazA5RnpoSmV4cjA2WXQzblc1WURJYUVSMXpiV205V3EwV09yMWVNVnNEQXZUZ09RNnhzWEdJakl6Q3hBbGp3VElzREVhdjM5SHJtNHJBNkRIajhQcXJyK0Q1RndhalNaT210d1RVeWlib0xwZy9Gd3ZtejhXRFBYdmhyZWt6VUw5K0E3dzljeGJlVzcwU2hydzgxRTVNeE1MRjd5SW14cHRmMStlaGgzSHk1QWtNSGZJQ1dGYUZ4eDd2aC9yMUc4QlNwbHhvekpoeFdMeG9JVFp1V0lmYXRXdGozWWFQb05Gb3NHRGhZcXhjc1F4ZmZQNFoxR28xdXQ3ZkRZTUd2NmpNclVVTHZXYmdzMC8zTDIwbWJ0cU0yTmk0R3o0ZVZUM215TmRlQlNGQVltSVN4bzZiY0VQejJJS0RnNnU4YjBaR0JzTEN3dENqUnc4QXdQSGp4OHYxMG1qZXZBV2FOMitockl1eDQ4YmZJUC9yem02dFc3Zk9BTERDUjJzVEFWQkNpRGRHU2tVcTE0dnlQRThad3BBU2F3bmxPUTZob1dHSWpvbUYzVzZIV3FXR1dxM0dybDA3d0RJc25ucjZhYlNYSXV1QWwrSjgrZEozMGJ4NVM4eGZzTGhDYmJPeWNic21ZUE9OZ0ZiR3FWWUcxR1FHQUxsY2FqZ2g1TlViUFVGUG56NEZuVTZIUm8xVDBLaHhDcjc5dGpFKytHQXQ1czFib0poR2lwbkVNS0M0OFZ4MGYvMTFITHQyN3NEU1pTdWcxZWt3WTNycHFqQ0h3d0cxV2cyWHkxbnRBTmFyZHgrNVEzZ3BxVisvQWY2My84cDlURHQyN0ZUcHd0VnF0WmoyMXR1bDNxdW80VzJidHUwcVpIbXRWNzgrbGk1ZldlRnZzeXlMdmZzTzNGU2dyOG94LzJtOGJzUTUyTzIyS2tVcTVhcWI2NVZQUC92aW1yNm5WcXVIYk5pd0llUEZGMS9jQmkvRnJrZ0JLcldTcC9DbWdZaWlLRktCRjhBVERvRUJBVVNyMVZHZFhnZTMyd1dudzF1Tm9GS3IwSzFiZDhUR3hxRldyZHJJeUxpSU9uWHFBZ0E2ZGVxTVRwMDZWM29lZHB1MVVqL29WWnVpZVhsNUNnV1JiMXBIQlJGUStJQ2FvcTNaN2ZZdUxNdE9ySTdKa1hYcEVoYk9ud2U3M1Z0K1lpNG9RR2hvS0xRNkhlbzNhSWdmcGFqZUgzOGNnVnFsUW5UMFAydHJvYUdoS01ndnFMQzdWRVZpTnB1aDErdWgxbWlRbjUvdnpZV1Npb2tOaGp5OHQzb2wzdjlnQXc3Ly9qdU9YRVg0dW5MSGJnRDhjblZqY3l2SHJMSmpSMGRIdzNHRld1ZUFnS3FadkZYZDczcC9LeWdvNkpWMzMzMjNoUkpNa0pyQ3lDYXBuQUlpaWdMaGVRRWN6NFBqUFBCNFpBWmVGeHdPQit3MkcwcUtTN3dNdlBsR0tibS9ha25xZHBzVjBkSFIxdzlzRG9lakZGdkhQd1FMeWlYaHBxV2xoV20xMnZFQXFxVU9xbWV2M3VqY3BTdGVIdllpbm4zbUthU2VQSUhYUjNwcDNLWk9tNDV2ZCszRTRFRURzWEg5T3N6NHo1d3FPVklUYXRWQzIzYnQ4UFNBSi9IQ3dHZGhOQnF1dUgrblRwMmgwK3Z4MUpQOU1IM2FGTlN0Vng5MnV4MDh6MlBtMjlQeDBzdXZvRmJ0MnBqNjF0dFl2SEQrZGZzOTVDZTlYOHBQK3NwS3NKaGJOR1oybXhWc0pScEdYRndjS0JXUmI4eXI4TnlTNjlUN1I5QUtDQWhFY3AwYngxajdEOGVNaTQrUEgvVENDNE5xeU9CR3k0TWJReWtsb2lnUWdlZkJjYnprYi9QQTdYTEI1WFRDN25EQWFyT2l1TGdJRnJNRkpxTVIyVm5aU2wrRnlzYlJaTWdGQ0NvdFA3d3FhdkRVMUZTa3BhVWhNek5UcVFYMU5VVjlLZ3lJckxWSnZqVkdvaUdheFRETWhCc3g2TGVLU3JtNnBUS3E0OHI5TFprd1d5eCtvc2t5WWpUa0lqSXlBb20xeTNPZlpXUm13bXkrK1dObU5PUWlJaUlDU1ZmZ1l6T1pUREFZRE9CNUhsYnI3YzlXNDNLNVZ2WHUzWHM5QUllMHVRQjRDQ0VjQUo0UUloSkNSSWxhWEtZdm9scXRsMW84SUNBQWdZR0JDQTRPUm8wYU5SQVJFWUc0dURqVXJsMGJ5Y25KNVRYRjRHQ29WU3JFeHNaV3FxMWRsWTh0S3lzTDJkblpNSmxNTUp2TkZRWUxQQjVQdWRRT09Wamdjcm1ldUZHZ2RyWE8xanRKcnZhNkVoTnJJei9mQktNaFYyRTV1ZHMxTlp2TkNvSG5Ld1ExQUVoS1RJVEpkUFBHVEQ0blVSQ3VDR3F5U1hxbEJYc2J5bXRaV1ZsbmE5V3F0VmYydHhGQ2xJQUNBSGhaUHdoa2NGT3BWTkJvTk5CcXRkRHI5UXF3aFlhR0lqdzhIRkZSVVlpTGkwT2RPblZRUzBvbnVscXBFckJaclZhbHNxQXNxUG5XZ1BxbWR2aWFvRWFqc1paYXJSNTdxNXl0ZDlLaXZOcEVWRUlJV3JWcWhZc1ptYkJZekNpeVdPQnkzWjBjYlhwOUFCaVdSV1JFSkJJVHI3d2cyclJ1amN6TVM4Z3ZLS2pXTWRQckE4Q3FWUCtvcWQzSlVyTm16Y0ZmZnZubDJhZWVlaW9ibDZPa01yQlJPWkxnSmFma0tjTXdoR1ZaeXJJc1hDNVhLU0pLR2V3Q0FnSVFISnRnME53QUFDQUFTVVJCVkJ5TXNMQ3dhMUppcXJTS1pOUFROd20zZ3NvQ1gxQ1Rxd3NJcFpTSmlJZ1lBNkRWalJ6TTZPaG9HQXpHZngyd3hjZGZmVG9ESVFSMWtwTlFKem5KYjROZXBiYWIrQzhGbTVzcGhKQ1dmZnYySFFCZ0ZRQkI2by9nalpaS3BKVHdFbE5TQ2R6QWNad0NiaXFWcWtKd0N3d01SRWhJQ0pyNGtDOVVWZjR4ZUpDVmxZV2NuQnpGbjFZWnFGM0JCTzFmSGFrZGlyUFZaSURqRG5lZU8rdzJyek1VOUlaeHNmbkZMemRUZERyZGtPenM3TTZReXEwb3BScEl5YnUrZ1FSQkVJZ0ViQXB1eUIydUhCTE5VVW1KTjBxYW41K1BuSndjaGVMb2htbHNkcnU5d253MVg4SklHZGg0bmk5bmdtWm5aOGVxMWVyUjFUV1k5OTU3TDR4R0k0d21FNndseFhja05ianNERTFJcUhtbitWYjg0cGRTRWg4ZlAyamp4bzJwUTRZTUVTUi9tK0JybHBZMVNhWHFCT3BMUkdtMzJ4V3RUUTRzaElTRUlEdzgvS3FxUEs0SWJHWHoxY3BFUG4zejFTb3lRVWxNVE13b0FQZFY1MkRHeE1SY2RTOU92L2pGTDlWaWtyWVlNR0JBL3lGRGhud0FnUGN4U1FYSkpCWGhaZDFWVEZLR1lZaEtwYUl5QzRodllLR29xS2lVcjYxUm8wWlZCN1pNbjZKVFg4blB6OGVaTTJkS01YZVU5YStWRFJ6NGNxeWxwYVgxek1yS0d1Mi8zWDd4eTEwbEwrL1pzK2RvdDI3ZERzdmdCaWxTS2hmTFMwMWc1S3A1aFZQdWN2ZXJ5NlpxV1RPMXFpMzhWSWxoUDVSN2srTUY1Ri9NQW5FYVFOeG1FRTh4Q0djREk5aEJCQmNndUFEQjQ5MUVqbEJSQUNnbDhqYjQvOXF3OWFQM2pQTGZZNy80NWU2VGhHYmkvOVZMcnZIMytZdUZQQUNCQUFKQVpiT1VnUmZOQUNxQ2lqeUY2Q1lRWEJTQ0F4Q3NJSUlPakdBQjRmSkJQTGtnN2t3UTV6bkFsb3I0NUZwUXEvNjU5MFdGd1lPc2JBc01wbUtZTFRZVUZUdGhzN25nY0xyaGRISnd1emw0UER3OEhBK09GOER6SWdTQlFoUXBSRW9KQlpqM2x3MGVDZUFCL3kzMmkxK3VUU2k5YzgrZFpabXVoL2RNZndSeUlNRWJSSkFEQ1N5VmlDbEZrVUlRS0hoZUJNY0w4SEE4UEI0ZWJqY0hwNU9EdyttR3plWkNVYkVUWm9zTkJsTXhMbVZWclZLbm5JK3R1TVNKM0x3aUZCUllVVmprZ05YcWhOM2hCVFdYbTRQYnc4UGpFY0J4QW5oZUpMeEFJUWlVaUpRU1VCREx4WGNic0N6emhuOXErc1V2VnljaUJReVdTSmdLd3lDSUxHeDNkanJpb0FVTEZoeVpPSEhpUmE5SjZnMG1lRTFTaUpJRlNrUkt3QXVFY2dKRFBEeEwzWndLVG84YU5wY2FKVTR0Q20wNkZGajFNQllGSXRzY0JFTnhDUEpLNGxBbmdVTmNlQUVxcTRvc0IydzV1WVV3NVpmQVVtaEhpZFVKbTkwTmg5TURsOHNqZ1JvUGp1UEIrMnByRktBVWhBSk1TSWorTlFBSi9tbnFGNzljSGFnZE8xY2ZZTU1RRkhKbjk4bVZwR1pDN2VUSEowNmN1Qm9BRDIrRVZINFZRUWdGdkczOENDRWdVck5sSXRFZHNTbzFWQ28xVkdvTjFCb3RORm9kdExvQWlDUVF4VFkxOG9vU2tHY093NzMxejFjSWJxVk1VV04rQ1F6R1loUlliQ2dxZHNCcWM4SGg4TURwNHVCeXk2QW15Q1lvNGIwbUtLRWlKWlNDT1BKV2RDZUV2UEp2bW5EanBtM0IvWDNmdVdHL3gvTUNSazMrQXRIMXhpRzA5cHNZUG1vVEhBNlBmMlhmNVdJb2pBVFlNTVRFeHY5cmtzNjFXdTJnUGIvdWE0N0xWT0lhU3VGREplN05uaEJGa1FpQ0FGN2dDYzk1QXdlYzUvL1pPKy93S0tvMml2OW10bVZUSUUxNkNVaEhhVkpFMEFBZlVrUkJCQ3NsSUFncUxZTFNsZDZEOU41RXBTZ0lpaUJLRVpBZWxDSUlVZ1VFRXRKN3NtVm12ajltZDVKTkl5Qk4yZk04KzBCMlpuYnUzcDE1NTIzM0hDc1dxd1dMUThaUDFUNUlKRDR1anVTVUZIUTZBK2dLY3pQZUw5ZHp1eGkyR3hFSlJNY21rNUNnR3JYVU5BdnBHZGJNdkpyRHNObnRzbUMzTzBKUUdVRUJBUkNOUnNQNzdrczBmd3diczVGTlAvek91czk2c1dsMUgzYnUrWk4rZzllNkorWVJSMVI4b2YrY1RpNUF1ZkxsTzJReGJBWlFER1NxVzRuTzFqQkpsZ1hKTG1HMzJ3V2IzWlpaRmJWbVZrVlRVbEpJVEV3a0xqYVd5SnVSZVB2NDN0cXcvWDA5VGcxQjQxSkpURW9qSmRWQ2VwcVZqQXdiRm91aldKRHByU0ZKTXJLc09Bc2NZa2JVdkRjRWdSZmRsMmplU0UyMU1HL3Bic0xHZHlDNGNTV0NHMWRpOGF6T3JGeHprSmhZTi9YUW93cEZBVW5TMzVHbmR1YjBId3dNdmZjcDdUTm5UaE0yYllyR2FlakV4bzNmRU5MbExVSzZkbklSNUltT2ptYmdCd040dTN2WGxpMWF0bXBNRmlweFJWSFVJb0tpaUE3bUh4UkhxNGNrMmJWMkR5ZkZVWWFqNVNNMU5aWGs1Q1NOVWp3eE1RbTdyTSsxMENJQ1dHMTJOUVNOVFNFaEtZM2tGQXRwYVJiU25VYk5XVEN3UzlqdGttQ1haQ1FaeDdJcHhJOC9hcTB6NkhYdlBlZ0w1T25ta3drZDloWEJiY0lJcWpHY0p4cU80ZnV0SjdUdGRadE1aUGpZalZTdFA0cmlsVC9pN1BsSUxCWWJZeVp2cG56TkVYZ1U3VU85cGhQWnNkdFZLTmRtaytnZCtpWGVKZnRUdlBKSGZEcHZlK1lQR0pQTUs1MFg0bGYyQTd4TDl1ZUZWK2R3NFZLVXRyMWoxMFhVYlRJUmdHTy8vMDE2dW8zZ1JwVzA3YzgyVkVYdkQ0WmZkTi9oanlnRUFWTFNoRHM2dG5LVnFvd2FNL2Flam0vK3ZMa3NXN3FFU3hjdmFpU3VBRmV2WG1IRCt2VXNXTFNVWmN0WGN1TEVNWTA4ZGY2OE9UUnI5ajlXZnI2S2Q5OTcvMVVQRDdPSE14ekZVU0VWQkVFSE9JMmJ5dHNtU1VpT1ZVdzJtdzJyTFl1eWZIbzZxU21wSkNhcUlXbDBWQlFKaVZLdU9UWTl3STBiQ1VUSEpCT2ZrRXBTa2xvRlRYTzBkbGlzZHF5YXB5YmhxSUk2dkRVMURQMTQ4RXU5S0tDQys3M0dnbVcvc0hWOVA1bzlWNFhOUC83T0sxMFdjbmpuVUdyWFVCYzd6NWkvazVVTHVtRXk2cWxVb1NnOSszM0JqenYvWU9HbmIxR3BRbEdXZnI2UEYxNmR3L0c5STZsV1JlWHJPbkQ0SXVYS0JuQjB6d2lPbnJoS2ozNmZVOGpIVE0rdWpRa2Q5alVXcTQzd240Y0MwRy93VjRTODl4bjdmMUlabWpxMnEwTjhnbHJldWg2UmdOR29KOEEvODhsc01PZ0k4UGZpMm8wRTl4M3VSZzdFeHNZeWNjSTRZcUtqRUVTUjk5N3JRNE9uRzNMdDJqVUdodmJIWnJQaTYrdkhpcFZmWktZN2huekVqUnZYQVZWMHlkUExpelZyMXdFcXJmK2NXVE5JVEVyRTM4K2Z3VU9IYVZvV0FPdSsvb29ORzlacit3UDBmS2NYUnFPUnNHbFRYTWIyKzRrVFBGVzNMcDZlbnRqdGR2eDgvVGh4L0RqMTZ0WG54SW5qZlBDQlN1amo2K3RicjBTSjRpMHVYYnEwR2JBNVhsb2hRVkVVMlJHU09sWWtTT2gwZHV4Mkd6YWJIcXZOMGFpYm5rNmFTUTFKRXhJU2lJbU53V1RJdmFkTm41NXUxWHJXRXBPeVZFRTFvK2JJcXpseWE0NFExT210Q1NmMmZWeElweE43UFN3WHdsc2Q2OUhzT1pXQThzVldOV2plcENvTGwvL0NvcG1xOW1XYkZrL3lXbnVWYUNRdVBwWFBWaDlnMVpJZXZOUmFWZjJlTnE0amgzNzlpeW16Zm1MbEFsVTV2VmpSUWl5YjB4V1R5VUNsQ2tYNTdmZ1Y1aXplUmMrdWpibDhOWmJTSmYwb1dkd1BUMDhqeStkMjVkcU5lRzA4YjNTb3AvMC9MZDJLaDRjK2x5U3JIb3ZWN3I2TDNjaUJyOWF1cGthTkdvUjBlNXRMbHk0eGY5NGNHanpka0ZLbFN2SDErZzJjUDMrT2llUEh1Und6YWNvMEFCSVRFK2o5VGc4K0dQZ2hvTXIyVFJ3L2x2RVRKMU84ZUhGKytuRXJDK2JQWS9TWXpPTnIxcXFWZzNrNEw0SGx4TVJFUER3OGlJNk9adEtFY1VpeWhJOGpUNWlZbUlqSnc0UHZOMzNIamgzYjhQVDBmTFZIejNmMkxGdTZ4T28wYkk1VkNaSWozNmJJaWlJSWFraXEyQ1c3WUxQckZMMHpKRFdvSVdsNmVqcXBxU2xxU0JvZmowRXZrcDR1WXphN2psRzhFYW1Hb1BHSm1UMXJHZW1aQlFPYnpkbXpsdFZiQTluaHJWV3RYTHduVU8xaHVSRHExSFNsb2FsZXBUaW56dHpRL3E3NGVPWkM4ek5uSTVCbGhZYjF5cnNjMC9qcEN2eHhKbE5YczI3dElFd21nL1ozL2FmSzhlZTVTR1JaWnNpQWxuei80KzhFUGo2UU5xL040YnNmVGxDOVN1N01yR1lQQTFhcmxPTjlpOFdPbDZmUmZSZTdrUVAxNmpkZzU0N3RyUHhzQlphTURNS216eWpRY2JJc00yYjBLTnE4MkpiNjlkVmc2cSsvTG5IdDJ0OE1IenFZN2lGZFdMMzZTNkp1dXVvTFZLcFVtVmM2ZEN6dytFNmYvb09SSTRieVR1OTNhZHJVdFNkLzBvUnhYTDc4RjJIVFoySXltYXAwNjk3amVWd0tDWTRLcVpvU0UxQzlObVJaUXJKTFNIYTdReXRCclpKYUxSWXlMQm1rcDZWcmhZVEV4RVJ1UkNibTlOalVuclVVa2h6ZVdyclRXN000UWxCbno1b2tDNUpkOWRhY3piaG53c2Y0NlhSaXo0ZnBRcEN6YVZ0bVdPem9kSm5GMzZ3R0pMdVZ6L29aV1lWK2pkbmNYYjFlUks4WEVVV1J0aS9VNVBxWktYeS85WGQrM1BrSHc4ZCt5L3hsdXptOFl4aWUyWXhWcVJKK1pHVFlTRWhNdzdld3A1YS9pNDFMcFdSeFgvZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEwxeXk1WWh2RmloVnpDVnYvQ1FvWExreEdSZ1poMDJkU3FGQWhUcHc0VG1GZlgyM2JNNDBhMDZKbEs4MWJMRjY4K0t1OWVyMjdjL0hpaGRZczRhaWRMTHh0TGw2YlhSSjBkcnZpVWlXMVdFalBTQ2MxTlkzazVHVDBPb0dvYUpsaVJRdmg1V25LOU5oaVlwTkpTRXhYZTliU3JWckJ3S1pWUWVWTWIwMVd2VFZuYnUzeGNvKzlEVHorTUYwSTRVY3Z1L3g5Nk1nbGF0ZkluVTIxWXZraTZQVWlCNDljY25uL1FQaEZxbFRLekR1Y3ZlRDZWRHQrOG0rcVZWWUpJWWVNMnNENWkxRjBlZU5wVmkzcHdmNmZQdUxVNlJzY1A1bVRRNnAyamRLWXpRYjJIaml2dmJmdjBBVkVVZURwYkY2akcyNEFUSm80bnZBajRUUnYvanpEaG8vazBLR0RMZy9kM0xCdjMxNzI3TjdOOEJFZnV3Z1dWYWhRZ2FTa0pIN1pzMXZMdDMyLzZUdVhZOCtmUDhmR2pkOFVhR3hQMXFpQjFXckZaREloU1JJSEQreW5aaTFWeTdSV3JkcmFPSS8rOWh0QlFlVXdtVXpsKy9UdDE1eHNSWVRzWHB2czlOclVRa0ptbGRTbUNpOWJNakpJVDFkemJTa3BLY1RFSmhONTA5VnIwOGNucUNzTVVoM2Vtc1ZpVTlkc09VTlFtOE5iazF5OXRkLzJEUGZSNmNTM0g3cWN4SVpmZWFiKzR6emZ0Q29yVmgzZzVPbnJyRnJTSTlkOWZYdzg2TmVyR1lOR3JzZmJ5MFNsQ2tWWi91VitEb1pmWXVyV0Q3WDkvamh6ZzRYTDkvRHUyOEVjL3ZVdjVpemF4ZEk1WFJ4R0w1SStINjVoWHRpYkJQaDdzV0xWQWJ5OVRacGhYUHZORWVJVDBuaXZSekJlWGlaNmRHbE0zOEZyOGZIeHdHalEwenYwUzdwM2VnWi9QeS8zWGV4R0RuVHUzSld3c0Ntc1hiMEtXWllaT09nalJGRjBLUjRrSmlieVdzZFhxUFBVVXd3ZE5vSzVzMmVTa1pGQm4vY3lVOTl6NXkvQ3g4ZUhTVk9tTWZQVDZTeGF1QUJQVDA4R1poTlNQbmIwS0JzMnJLZDkrdzYzSEZ2WnNrRzBiOStCZDN2MVJFSGgyV2VEcVZldlBnRHY5K25INUVrVFdQZjFWNWpOWm9ZTUd3NkFuNzkvaC9hdmROaStjY00zTnNEcU1HNTJWR1VybFcxWGJkcDE1TnBVcnkxcmxkUml0V3E5YlRvUjRoTWtvcUtUS1Y3VVY0dVNoRm1UWCtWR1JEeFJNY25FeDZlU21Ld3VlazlOczJwTHFUSXNrbUMxU3RqdGlpREppcWdvaU5ibytmMTBPakhzWWJvSW5tNCttU2VxbHVEQ1g5RWNPbktKR3RWTE1YMThSNTU5Um0ycHFOdGtJaSszcWNuSWo5cG94MWl0ZGthTy80NHZ2anBFUW1JNnRaNHN6ZmlSYmZsZnNNcjk5T0hJOVp3NUY0R2ZyeWMvLzNJV25VNWthR2dyK3J6VEJGRGJQUVlNL1lydHU4NlFuSkpCblpwbG1EYTJBNDJlVm1YUU9uWmR4T1dyc2Z5NmU3Z2puMllqZE5qWHJQbm1DS0lnMExGZEhXWlBlUU1QRDRQN0xuNkVzZWQ0NWYrazZscHVpSStQbjFqamlhcmZBeWxBS3BBbUNJSUZWZDNLN2xDMWtuVTZuV0l3R2pFWlRZcUhod2tQc3hsUHN5ZGUzbDc0K0JUQ3Q3QXZvZ2dOYTBtVUQzcU1hbFZLVUQ1SXBUVVN4bzk4eVhVWmxjTjdTMDJ6a3A1aEpTUERKbGlzRWphYklraVNMTWd5WXVmWDYray9XOURqTVBEa3cyYllXald2enVpaEx6MnlONGlpZ0NDNHYvdkRNbWNGL2V4SHliQXBpdkpIbzRZTjN2Lzc3NnNwRHVPV0pnaENPbUJCbGV5VFJGR1VSVkZVREFhRG9oSlBlaWdlSGg2WVBjMTRlbnJoN2UxTjRVS0ZFUVNGZWsvS2xDbmxUNlVLeGFqNVJHazhQQXpvVXh5NXRZd01HMVpMMXRVRldSYTVaK3RiV3pxblc1ZUh6YWhsaCtEYisxLzNnMGVlbTBiUklyZS9yRVpTOUZ5T3FreDhraDVKRnNsSWZ6UlZxanpNWm5TaWduOGhPMEZGemlJS2ViZlF5QXBjaWFsTWJJSUpTZGJkc3psVHh5UVRXTmhDMmNmTzN0TElYYjkyN1ZINHFhb3ZXTGo0MlJmYnROcnB5TFhaRkVXeGdXQVhCTFdRSU11eUFDZzJteTNUSU9KWTZTU3JLeFU4VENhMXVUbEZJakVwazlvb3FFd2crdFEwaTRPNUkxdHVUWktSSkZtUUpNV3h5a0I5b1NEcTlib3VELzFUSVdIUkkzRXpwOXY5K1AxQ0tmUUdEM3dLdTNWRlUxTlRpRTlPSWlhaEtqVWZ2NHBKbjVpclVmdjEzQlBvOU9iN01tZXBxU25FSmljUkZmOEU5U3FkeXRlNGxTejFhQkRqRkM5Um9nM3dpOE93V1FHOUlLREgwZGVHcW13bHFNdlFCUVVFUVJRRVJSVFZiZ1JScDhOaXRTS2drSm9ta1p5Y1FYeENHakV4eVpRcTRZZVlubTVUdlRXclN5TXVkcnVFSk1scUpkUkJucVNBa0haemJtdWc4Y000V1lkMkRIM2t3dERJdUNMb0RSNy9LVmFJZndJdkwyK0tGaXVCVHU5QlJGenVpbCtYbzZ1aDA1dnYyNXhsanNuTWxaakt1QUdpS0RiY3MvZEFMVEpKS0EyS291aFFLNlNxTlZNVUZFVldLNlN5TTRyTXVwWlVsU1JJVDdlUmtwcEJZbElhc2ZHcFJFWWxJYVpyUEd0cXo1ck5MbUdYSEViTkdZSm1NbmdJUm9QdVRmZlA4dkFnTnRIMG4yU0YrS2Z3OWlsRVRLSXAxMjF4aWZvSE1tZmVQb1dJU1RDNWZ4d0hTcGN1bmIzMXc4bjhvWE95Zmpob2paQWx0ZjNEN2xna2I3ZlpzRHBhUU5JenJLU21XVWxPeVNBaElZMlkyR1QwRmtzbWVhVFdzNmJtMWdTMWIwMXhXRTZFaENzem54UUU0ZFhiQ2drZjRXVDJ2WjRmU2RZaHlUcTNwNWFIbDVRWUg0c3NneWk2enZlRG1qTjFUSEYzOUpzbkpTWnkrYStMcE9ham9ldmw1VTFRdWNjcFZMandYUm52dlQ2bndXQm91L2FyOVYrOThYckhDMlJTaCtzRlFiQTd3bEZabGV4VEJFbVNGVW1TQk1rdUtVNnZ6VzZ6QVFvV2kweDZ1cFhVVkF1SnllbkV4YVdpVjNOcldaZE55UTV2VFZhTEJnbzQrZGE4dkV5dkYyVEEvekdLNDN2N0ZQY0VuVTZpaUc5Q3ZsVEh1VUVuU285c29hQWdTRTlQZHpGcW9CcVVCemxuNmVscGQvUWcrK3ZTQmRMU1V2UGRKelUxaGN0L1hhUkdyVHAzWmF6MzQ1eTE2OVIrRHJpYUpkZG1kWGh0a3FLb3VUWkZrUlZWeFVweXBUYXkyeEZRc0ZnbE1pdzIxV3RMemlBK01RMTlGdjBDTmE5bXp5d2F5QTVYRUFWaDgxZDlQRVJSZUwwZ1J1MC9SbkY4ejVHYW1rSkVnbCsrVk1kM2l1M2JmbUxGOG1WRVJkMmtSSWtTZlA3bEdzNmZQMGVQN2lIYVBrT0hqK1NGRjlxNGY0aUhHTGN5TUZtdnBYL1RPVDA5dmRxMGU3bjkrdSsrM1dqSnpMVmhFd1JFVUJ5NU5rRlFGQmxKa2hWSmxnUzd1a2dldTkyR0FGaXRNaGtXRytucFZsSlNNMGhLU2tlZm5VRFNuaVczbG5YNVZQT20xVjRGU3Q5cW9Ga3BqdDBvZUlqaTVlWE56VWlabS9GK0ZQT1B2eXVmZStQR0RhWk1uc2lZY1JPb1Y2OCtTVWxKQUZTb1VKSHRPM2NEOEU2UGJ2ZnNleTFmdHBSMkw3Y25JQ0FneDdobXpaak95Wk8vWXpRYWFmNThTOTU3djQvR0tuSHQyalhtekpyQnlWTW5NWmxNdEdqUmtsNjkzOHZCT25FM2NhdHpQdGU0SVFhREFVRVFDUW9Lb251UG5qUnExTmg5OGY1emxCcjU4YWdHMzMyN2NSZmFFaXRGRDBLbVBvSktJYTVremJXcGkrUWxRTUZxazdGWTdHUlliS1NscTdrMjBSbUNTcEtjMmVJaFo3WjQ0R3p4ME9rS3RPVC92MHB4ZkYvQzBueW9qdThFWi84OFEyQmdJSTBhTmNab05CSVlHT2dJeHdSTUpoTW1rOGxsTGVIZHhtY3JsaEVYRjV2ai9kR2pSbEt5VkNrMmZyZVp4VXVXYytqZ0FUWnQrbGIxK0dXWm9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuQWhKa3RpL2Z4L0RobnpFdGIvL3ZpOHBnYkZqUnZIV0c2L1J2VnNYenB3K3JXMzcrK3BWeG84YjA0d3MxVkVjNjBlZERMdVNKQW1TSkFtS0lndVNhdHdFcDdDeUpLa1JwOVZxZC9IYU5NUG0wdDRoT1NtLzFSYVArS3N6bmhBRVd0N3FDL3dUaW1NM1ZNOHRMNnJqMjhIeDQ4ZDR1VzBicGsyZFRHUmtKQyszYmNQTGJkdXc4ck1WQmY2TVF3Y1AwUG10TjJqZUxKZ2UzVVA0NDlRcGwrMTdkdThpcEdzblhtajFQTjI3ZGVIUXdRUGF0bjU5MytmbHRtcG8rOEdBL3J6Y3RnMTkzMzlYTXlMQndVM3BHdElOazhsRWthSkZxVnV2SHVmT25nVWdMaTRPUDM5L09uWHVqTkZvcEZUcDBqUnEvQ3gvL25ubW5zMzc3WnpUYkRiVHFGRmpoZzBmeVpMRkMxMFlaZThYeXBVcmgwNm5ZOXUyYmV6ZHU1ZWFOV3RpTUJoeU5kaTUvWDlBLzc3OHNtYzNaODZjUnBLbDJ6cDM0OGFOMGV2MWVUNGdjdnQ3M2RkZjRlbnB5ZXExWHpONDhGREdqeHVENHJqSVo4Nll6c3Z0WDJtMlp1MjYwbVRUSHdWMGdpQUlvaWc2MTQ0aWF6VUFTWHM1cWRXc0Zqc1pHVGJTMHF5SXpvS0JYU3NZT0xVTXRLS0I0TzNsMGI1Z1Q1STdwemgyUTBWS3F2Q1BjMnkxYXRYbTIwMWJHQkE2a0pJbFMvSHRwaTE4dTJrTElkMjZGK2o0aXhjdThQSEk0YnpYcHk5YnRtN2oxZGRlWitBSC9UWHVyaXRYTGpOKzNCaUdEQm5PNWg5KzRxV1gyakZpeEREUzB0U2svSnk1OC9sMjB4WUFac3lhemJlYnRqQjMva0lBUkZHa1UrY3UrUHFxbnVsZmYxM2l3UDc5Tkdqd05BQ0JnWUhNbVRzZkR3K3pkbk1jUDNhTUdqVnEzck01djVOejFxdmZBS3ZOcGhuays0bkF3RUJ1M0xqaGNDWlVpaTAvUDFkUC84aVJjRVlNRzRMTlppTXVMbzUzZW5RbkxrNFZHLzUweGl5R0RSOTVSdzVJUUVCQW5sNytod05ET1g3c3FHYk1Gc3lmNTdpZXptdS9iOVZxMVRFYWpWeTdwbnFLNTgrZm8wR0RwNmxWdTFhRFhMdzJFUkFWQlVFUUJMWHRROGxhUkhDMGdOaXplbTEyMGpPc2lIWkoxc1JabkdHb3JHU3llS0FvZ2lnS0wvK1RIMkxRd0ZCZTY5aWVrQzV2MGJYem0yelovTDJXMTNpdDR5dTBiL2NpM1VQdTdXS0c3aUZkdUhqeDluUUZ0djMwSTY5MWZJVVhXcmRnOXF5OENmNTI3TmpPNkU5Ry9tZU02K2JObXdodTBwUkdqUnBqTXBsbzFmb0ZxbFN0eWphSGtFZEFRQ0RMVjN4T3RlclZFVVdSbDlxMncyYTE4dmZmVnd0OGpqOU9uYUpGODZhRWRPbEVsYXBWZVM2NFNhNzdMVnd3RDdPbkp5KzB1WDg2UVFVNXB5QUkrUHY1azVKNi8wVjRqRVlqa2lRUkVCQkE0OGFOa1dVWms4bTFQNjV1M1hyNEJ3UXdadlFuREJvNGdQYXZkTURmMzE4Ny9sNmdUOS8rVEp3d25ybHpaclAxaHkxMDZhb1dxQjZ2VUlGZjl1eEJsbVV1WGJyRXpadVJwQ1NyOC9iNDR4WFlzM3NYWGw3ZXpiTVpOWDJtY2N2c2FWTmtSempxMUVlUVZNZE1WWktYc0ZodHBHZllFTE1ZTmExZ0lDdUFvMmlRR2pHM0dYZUJJZmVqSWNOWStjVnE1c3hid09jclYzRHAwaVdOM25ocTJLY1A1UTNlb21VcnZsNi9nVzdkM3VaUlFtUmtKTVdMdStadHlwUUpJakpTWlJYMjl2Ym10OTkrcFhldkhuUjY4M1c2ZGUyY2F5aVNINm8vOFFUYmR1emlxM1ViaUlpSWNGRTRjdUx6bFo5eCtQQWhKazZjbkdmNGM3ZFIwSE1xaWtKY2ZCemVEeWp0VXE1Y09hcFdyY3IrL2Z1MW9sQjJ3OXU3OTNzYy9lMVhURWJUUDNvd21NMW1PbmJzU01lT0hURVlETFJyMTQ2T0hUdnkyR09QdWV6M2VJVUs2ajN6MVJwNjlYNlhRb1hVWFB1cnI3MkJUcStqZTdjdWZQSDVaM2g3ZTJQMlZMM2pRUjhPNXVlZmQvSjI5NjVWdW9hRVZIRVlzNng1TnAyaUtDcFhtM00xZ2l3ak9VTlRXZFk2T2xTdlRjSmlzYUdYc3F3eWNEVGtPc05RQU1GazByZTltejlJNGNLK1BQRmtEUzVlT0UvNThubVRLeVltSmpCNTRnU2lvcUt3MjIxMDZ0eFZZK004YytZME0yZE1KejB0alNKRml6RjAyQWd0TWI1NzE4K3NYdjBsbG93TXFqL3hKQjhNL0ZETFArejZlU2RqUjM5TWVub0dmZnYxMTd5RWI5YXZVNVBYaWtMVFp2K2pXL2NldC93ZVI0NkU4K24wYVlpQ1NNbFNKZkUwZTJyYjhodEQ4MmJCOUIvd0FVdVhMRUpSNFBzdFd4ODZ3MWEwYUZFaUl5SmMzcnQrL1JxMWE2dTlTbnQvMmNPcUw3OWd4c3pabENxdEZzcWZhOXd3MTVzcnU3R3paR1N3ZGVzUHRHNzlBaVlQRDRvWEwwN3o1cyt6Yjk5ZWwvM1dyL3VhN2R0K1l0YWNlWGV0NGZSV3VKMXpIamtTanRGZ29GTGwrNzlFeW1xMVlyZmJPWHBVRGZ0ME9oMFdpOFUxcFpHU3drY2ZEYVJ6bHhET25mMlRLWk1uTW5UWWlEc3FGcVducDdOK3ZWb29hZGV1SFQvODhBTlpGNmRualhCMjcvcVo4Uk1tTVQxc0doTW1UYVpTcGNxWXpXYUdEaHNCUUZKU0VtKzgxb0VTSlVvQ1VLcDBhVDZkTWN0eDMreHErUG5LbFg5a05XeUNJRGpDVVVYSUducXJLVE1KUlJHUUpBVzdYZlhhYkRZN0ZvdGREVVZWYjAwV0hFVURUYWhGVVJSUkVJUzdHZ05FUjBWeDZ1VHZWS2xTTmQvOXpwMDd4LythUDgreUZTdVpNM2NCczJiT3dPcFlHemJxNHhHRWhnN2s4eS9YOE13empWaXlhSUdXcjFtL2ZoMXo1c3huNVJlckFmaGh5MmJ0TTMxOGZGajV4V3BHanhuSC9QbHpBWlZZYi9QbVRTeGN0SlFseXo3anQ5OStZOWZQTy9NZG04VmlZY0s0TVl3YVBaWXZWNitsVE9teTJyWmJqY0Z1dHhNVkZjVzZiNzVsL1RjYkg1anhjblp2QXlpeWpOMXUxNHhRbXhkZllzK2VYWVNISDhadXQvUHp6enY1NDlSSldyUlU2MGV4c2JFSUFvZzZIWW1KQ2F4ZTlhWGpjMXlySHNWTGxPRFF3WVBZYkRhaW8xUkpRcVBKeEJlZnIyVHQydFhZYkRZU0V1TFp1L2NYYXRTb2tSa0tmNytKYnpkdVlPYnN1VnI0ZE0vRDd3S2UwMkt4Y1BqUVFTWlBta0R2ZDkvSHkrditFNFJHUjBkckJzcG9OT0xyNjB0Q2dxdksyY1dMRndnT2JzcGJuVG96OHBQUkdJMG1MY2QycjNEeTVFaytuVEdMNTRLYk1PTGpUL2p0MXlNdTI1T1NrcGcyZFRJdnZ0UTJSemo4OTk5WFdiWjBjYk1zSWFoV1JIQjRiS0lnQ0M3THJGUWFOZGxSSTNETnRlblZTcWlzZVd1eXltRXBBRUo2NUx6V1FNbTc4YVduaDAzRjdHSEdhRExTcDI5L1NwY3BrKy8rTld2V1l2bXlKV3piOWlNNm5SNkxKWVBrNUdRUzR1UHg5dmFoYXJYcUFMelV0aDFObXpVRDRQRGhRMXo3K3lydjluNUhlN0o1ZS90azVoMGM3SjVWcTFYVEV1SGg0WWQ0L3ZtV21NMnFhL3ppaXk4UkhuNllwczMrbCtmWXJsNjl3bU9QRmRHTWM1VnExZGozeTU0Q2pRR2dhMGkzZTVibktBaXlOK2hPbVR5UktaTW44bnlMbG56OHlXZ3FWcXpFcURIaldEQi9McEVSRVpRcFc1YXBZWjlxTW0ydFgyakRxVk1uNmRHOUt6cWRubll2dDZkaXhVckV4YnZlT0FNSGZrall0S21zV0w2VU1tWEtzSFQ1U294R0kxT21oakYzeml5K1dyc0dnOEZBY0pPbWhEakNmVW1TbURaVkRRUGZmTjIxdytqekwxZFRyRmp4dXo0ZkJUMW52ejd2SXdncWMreWdEd2ZmdFQ0MlJRRnZ6NEtYd2k5ZnZveXZyeS9ObXpjSDRQang0MWl0MWh6M3c2MkF1UUFBSUFCSlJFRlVUODJhS2syM1hxOW5VRGFtM0R2RmQ5OTlsM2N1UGNzNWF0V3FUYTFhdGJXL0Z5OWF3TzVkdS9oZjgrZHpGTEg2OTN1ZmxPUVVRcnEvWFdMMDJQRlBObm11MGEvWjhtdzJRYlhrem5CVVVZc0lNb0tnZW15U28xYmd6TFhwSmFmeWxIUDVsSnBiQXhDTVJsM3J1M1h4RFBwd3NFWWJYQkNzWGJNS3U4M09sS25URVFSQmF4OXdoamhPR0F3Ry9QelVKNnpOYWlPNFNWTk5iaXkveEcvV0VDbXJkeTRJZ2xhS3ppKy9rbGV6YUVIR0lHWmY1M09QMExKVmExcTJ5dmtUVnF4WWlWLzJIY3ozMkVhTkd1ZDU0NXBNSmtaK1BNcmx2WGQ2NWVTL3E5L2dhYjVldnlISCt4VXFWbVRtN0xtNWZyWk9wMlBQM2dQMzFkQVg1SnkzbXE5L0FrRUF2YzVPYW1wS2dTcVZpcUp3N05peGYzemVWV3UrdW05ejNLdjNlL1RxbmJ1bSt1dzU4N09tS3VvQng3T0ZvN3BzNGFpZ3lMSWlTWFpFUVVTU0JNZmlna3l2VFpTZFlhaWpHcXFTdVdsaGFHc2VFS0tqWS9EMjhVWVFCSTRmUDBaU1VoS0tvbEM2VEJtU2s1TTVmLzRjQUQvOXVGVVRjcTFYdno0Lzc5eko5ZXVxV096T25UczRlZkwzZk05VHQyNTl0bS9iUm5wNk9qYWJqUisyYkthK296U2RGOHFXRFNJNk9sb3J1VWZjeUpUM3U1TXgvSk1udlRsTGJzK043RWx2enh3OWdROTZ6bkliRTBBUjN3UlNrL01XemZiMExGaklXOUQ5N3VabjNjMXptanc4bW1UejFwdzliYUxqNVNEbFVBUkpraEFFdXlBN284NHNYcHRlQzBNVkJTVkxHSm9XTWJmcDNRcEQ4MEorZ2hTdnZmWTZZOGVNNG9jdFc2aGNwUW9WS2xZa01TR0J3TUJBeG93Yno2ZGgwN0JZTEFRK0ZzaVFvV3Bpc2txVnF2VHJQNENoZ3ovRVpyZFJMcWdjZzRjT3kzY01UOVd0Uzh0V3JYbTNsMW93ZVBhNUpqUnQya3hMaGk1ZHNwaVUxQlJrU1dMZjNyMTA2UnJDUzIzYk1YVDRDRVlNRzRLZnZ6OTZ2VTRySHR6SkdQN0prMTRVNVFJLzZSOGxwS1lrSTRweWpwNUFkYzZrQnpKbnFTbko2RVFwMXo3Rll2NXgzSWoxSnlwU3djdkhMOGZZeXBXdmNNdEY2WjZlWHBRclgrR3VqZmRCbkJNb3NYM0hyc3JQTjI5NmdpdzBSazZqcGhvMkJGbVdIZTRiU0xLZ2RYWTRLNlJDa1VBekZxdGRzRnBsN0pJaXlLcFlpODRXczJDU0tBb2YzTzZvSGlYdTludUJpK2YvSkxoV3dacytMMGRWSmphNWtIdHRiamJjakx4QlFLRWtnaDdMT1plWG95c1RtM1QvNXl5L01UbTl5YWo0UWtUR0IyQ1RqS1Erb3NRdDZlbnBTMXUzYnIwS1ZROGhHVlh3SmQwaCtHSVRCQ1JSRkdTRFhsQ01SaEdUVWErWVBReVl6UVk4elNhOHZFem9uV0dva29YSlExRVVVUlNGNXZjNkNlcEdUbmg3S3JmRjExVW04RHhSOGRXNUdYa0RieDgzTlhocVNqSXBLY25ZYlJtVUNUaVhleW9oOEN4UmNVL2V0emx6amtteXAxTTI4R3krSG5oUi95U0sraWM5NHFJOFNrUGdxeXpocU03QjlxRldSeEVjQytOQmxoVkZWcHQyRlVsUzFBcXBYVUtmclNrWEJZUzR5ek9xY1FkaUxiZWJCSFVqNXcyZzE5bHY2NElXUlptNmxjNXdPYm95Y1lsV0V1TGl5TWg0TkIvMVpyTW5vaWdUVU5oRzJjZk9JUXBLbnRkcHZVb251UkpUbVpnRXl6MmRNN1BaRTUwb0VlQnJvV3pnMlFML3RvOHlPYXNnQ05XM3J1OWJ2SFhIdVg5cHhrMUJoK0RJc1lFZ0tLck5rbVhVYmc1SFpkVDUwcXZVMzluV2hucDdOTG5UUVJYeFRTQWlJY0Z0Mk80QUtTbUpsUFM3ZmNvaVViQlR2c2dmbEMvaWx0KzdIY01SOU5oWmdoNTdPT1QzM0hERlU3V0NxZ0YvT3cyYkFqb2hhd0ZCemJVcGlxTk5UWEtzUm5EMHR5RTZ2RFVCYlcwb2drNFVuN3ZUQVJYemowT1JFb2k2ZVkyMEI3Q083dCtJdE5RVW9pS3VncFJJVWI5L3hzWDJhRC9wSDc0NWN4dTFPNE92cjJjdDFLS0Juc3dDZ2lyMG90R3BLWUtzSURpOE5rR1dsU3dlbTVPZXlPR3hEZXJYVENjSUJQK1RIL0twU3BlNEdlL0R6ZmdBa2hPTnBLUzZmNmk4NE8wRkJwMlZVb0Z4RlBGTmNrK0lHMjRBQnIydVljM3F4UXduL29qVVp3bEhSUVJFQlVVQVFWQVV4eElyeGJHNHdFRzdKc2t5Z3BkWko5anNpaUNwMVZBeCtmcnNwcDVtNDQvdXFYWEREVGNlSkk2ZXVOTG5xZUNKcDhoU0hSVUUwZ0dySUFnMlFVRFdhZFZSSFI0bXZlTGhZY0JzTnFLM1Mxa1d2aXVLY0RNcXNlSDk2b3gzd3cwMzNNalRhelBvS2dOL1pnMUZGUVZSRUZBN09CQ1FaUVc3QklKTlJoRHNhc2dvZ09EaDRTSGE3WFpCVVJSUlVSU2QzVzdmSkFqQzgrNXBkY01OTng0azdIYjdib1BCTURHTHg1WWlDRUlxWUJFRXdTb0lnaVFJZ3F6WDZ4V2owYWc0Nk80VnM5bU02RndYcVNpSzhPcXJyK29FUVdqb25sSTMzSERqUVVPdjE5Y3RXN1pzMXNLQlZrQndPR0t1VkVaWlhvTFJhQlFsU1JJVlJkRWxKaVkyOVBiMjN1V2VVamZjdVA5UUZJWEl5RWh1M294Q2tpUlNVcElmK1RrNWRlcFU3NzU5KzU1MWVteU9WN29nQ0ZiQTd2VGFkRHFkb3Rmck1SZ01pc2xrUXArVnljTER3Nk91Ky9KeXc0MEhZOVNPSFR1R2dxQ3RobkRyOFlLdi8yUGxnUXRrYWZ0d2tFOXFqVFNDSUNBSUFxS29RNi9YbzljYk1oZVdBb0pPcDN2cTMvamxRME5EYWRXcVZZSDJUVWxKUVJBRWR1L2VmY2ZucTFXckZwTW5UNzdUdkFHaG9hRVVLVktFd29VTDA3dDNiMDBFeFkxSEY1R1JrU2dJRkMxV3d0M2NuZ1UrUGo2VnM0V2hvcE40TXF2dFVobUpaTFdmVFpIVkhKdHpuYWdnQ0hYY1UzbHZNV3pZTURadDJzUzZkZXZZdEdrVE8zZnVwRisvZnU2SmVjUVJGUlh0MXVQTkJRYUQ0UWx5NXRpeUdUVUZsVzVOUVZGa0ZGbldkdUQ4K2ZORmdFcnVxYngzU0UxTlpkNjhlWVNGaFJFY0hFeHdjRENMRnk5bTVjcVZ4TVRFdUNmb0VZWWtTWGZrcVowNS9RY0RRL3ZmOC9HZE9YT2FzR2xUMk81UUtuTmk0OFp2Q09ueUZpRmRPN2tJOGtSSFJ6UHdnd0dFZE8xRTN6N3ZjZlhxRlczYmlSUEg2ZmwyTjdxRmRHYjBKeVB6MVdZVkJLSEN5STlIZWVkajNBQUVIQXNObk0yNnpxcW9VS0pFaVNmL0t4ZkpkOTk5Ui8zNjlUR2J6WGg1ZWRHOGVYUE9uWE5sZXZqbGwxK29WcTBhSGg0ZU5HdldqTC8rK2t2Ykpzc3lZOGVPcFhUcDBuaDdlOU9vVVNQMjc5K2Y2N21pbzZONTVaVlg4UFB6dzl2Ym14ZGVlSUVMRnk1bzJ3TURBL253UTVWTjk5aXhZNlNucHhNY25MbXc0OWxubndYZzRNR0Q3cnY3RVVaeThwMnRPcWxjcFNxanhveTlwMk9iUDI4dXk1WXU0ZExGaXk1RzZPclZLMnhZdjU0Rmk1YXliUGxLVHB3NHhwRWo0WTVqNXRDczJmOVkrZmtxdW5WL215bVRKbXFwbUVrVHhqSHlrMUY4dHZKTFNwVXVvMmxtNUlWbm53c3U0VEJrTG9TVGpyQlVXNEdnS2xpcFhwdm0waGtNaHYrRVlmdjk5OTk1NVpWWDZOeTVNMmZPbkdISGpoM2N2SGxUTXk1T3pKbzFpMG1USm5IOCtIRzh2YjFwMXF5WnByd3pjZUpFbGl4WndwSWxTemg1OGlRZE9uU2dlZlBtbk0xRkhEYzBOQlNMeFVKNGVEakhqaDFEbG1WQ1FqTDFCQVlOR3FSeDAxKy9maDJqMFVoQVFFQldWNXVBZ0FDdVhidm12cnZkeUlIWTJGZ0dEUXdscE10YmRBdnB6T0ZENmdQUXFjbmJvWDFiUXZ1N3BqS0dEZmxJOWFLNnZFVzdsMTdnelRkZTFiWmR2SGlSMFA1OTZkNnRDNE0rR01ETm01RXV4Njc3K2l1WC9RRjZ2dE9Mc09rektQLzQ0NjczMm9rVFBGVzNMcDZlS3NtcW42OGZKNDRmMTd5eTU1NVRIK0NGQ3hmbXp6L1BZTFZhaVl5SXdNTnNKaWlvSEFEKy92NmNPSjQvelhueFlzWEtaREZxamp4YjFuQlV5UXhKMVR3YmVsQjcySFE2WGZYL3dvV2dLQXFmZnZvcC9mdXI3bmxRVUJBaElTRXNXTERBWmI5UFB2bUVkdTNhQWJCaXhRcEtsU3JGNXMyYmVlbWxsNWc4ZVRMTGx5L1hDaElEQnc1azE2NWR6Snc1TThmblhMNThtZEtsUzFPeVpFazhQVDFadm55NWk1RWFOaXlUUFRjdExRMFBENDhjWXphWlREbmswOXh3QStDcnRhdXBVYU1HSWQzZTV0S2xTOHlmTjRjR1R6ZlVOSG5QbnovSHhQSGpYSTZaTkdVYW9FcFk5bjZuaDZhL1liVmFtVGgrTE9NblRxWjQ4ZUw4OU9OV0ZzeWZ4K2d4bWNmWHJGVXJoNTVIWHNKRGlZbUplSGg0RUIwZHphUUo0NUJrQ1I5SG5qQXhNUkdUaHdmZmIvcU9IVHUyWVRRYVNVbEpJU2twQ1pQSmhOVnFaZTZjV2R5NGNTT0h3bFoyZUhsN2w4dGkxQndHVGhFZEZBT09YamFjdFFKRlVSUkI3Mnh5RXdUaFAySFlhdGFzU1VCQUFOT25UK2ZNbVRPY1BYdVdYMy85bGFKRlhZdm5qUnRuQ3BVRUJBUlF2bng1L3ZqakQ1NTg4a2xTVTFQcDFxMGJiNytkS1pSc3RWcGRqbkZpeUpBaHZQbm1td1FHQnRLMGFWTmVmUEZGdW5idG11dll6R1p6RGpVaFVDWGRIb1NNbXhzUFArclZiOENjV1RNQWdmcjFHeEEyZlVhQmpwTmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjZ2N0tESmUyZlFLS2xXcVRLVktCZGRLUFgzNkQ0Nk5HRXJvQjRNNCsrZWZYTXlTaHBrMFlSd0JnWUdFVFovSnF4MWVkakdJQXo4WXdJc3Z2a1NIanE4eVl0alFmTTloTUJncVpNdXQ1Y3l4b2FDQVZrRFFaMjZnNm4vaFFqaDQ4Q0RObWpXalNaTW1ORzNhbE5kZWU0M3c4SENXTGwyYTcxTklyOWRqTkJvMXJjMDFhOVpRdmJxcnJjL04yMnJidGkzWHIxL24rKysvNThjZmYyVDQ4T0hNbnorZnc0Y1BheTY2RTZWS2xTSWpJNE9FaEFSOGZYMEJzTmxzeE1iR1VySmtTZmRkN0VaT3cxYXZQblBuTFNUOFNEaWZyMXlCMFdoa3pMZ0p0enh1MmRMRmVIaDQwTGxMNWtQV1pyTlJyRmd4VnF6ODRxNk1yWERod21Sa1pCQTJmU2FGQ2hYaXhJbmpGSFpjMTRVTEYrYVpSbzAxa1hOVmh0S2JRb1VLa1pTWXlJU0pVM2o4OGNjNWUvWlA3VjdJQzRJZ1ZNNlNXOHVhWjh0ZVFGQ2NCUVFSRUtLaW9pb0Jwdi9DaGJCZ3dRTHExNi9QMXExYkdUeDRNQzFhdE9ER2pSczVKUFd5NXN1U2s1TzVlUEVpMWF0WHAzejU4cGhNSmk1Y3VFQ0ZDaFcwMTZKRmk5aXlaVXV1SHR2NTgrZnAwcVVMcTFhdFl2LysvWnc2ZFlyampseERWdFN1WFJ1ejJjemV2Wm1xNS92MjdVTVVSWjUrK21uM1hleEdEa3lhT0o3d0krRTBiLzQ4dzRhUDVOQ2hneTdTa2JsaDM3Njk3Tm05bStFalBuYVJxcXhRb1FKSlNVbjhzbWUzbG0vN2ZwT3JUdWo1OCtmWXVQR2JBbzN0eVJvMXNGcXRtRXdtSkVuaTRJSDkxS3lsYXBuV3FsVmJHK2ZSMzM0aktLZ2NScU9SWXNXTFU5alhGNVBEc2RpM2Q2OTJURDR3TFY2NlBEQVhnNmIxc0FGWlBEWkhqczNiMjd2Q2YrVkM4UGYzWitmT25adzhlWktTSlV1eWJ0MDZsaTFiaHArZm44dCs0OGVQcDNIanh2ajYraElhR2tyRmloVnAzYm8xb2lneWNPQkF4bzRkUzdGaXhXallzQ0hyMTY5bnhvd1piTisrUGNmNXpwNDlTNTgrZlpnM2J4NEJBUUdzV0xFQ2IyOXZxbFJSQlcwbVRacEU3ZHExYWRXcUZWNWVYdlRvMFlPK2Zmdmk0K09EMFdpa2QrL2VkTy9lL2I0cG5ydng3MExuemwwSkM1dkMydFdya0dXWmdZTStRaFRGZkJYZTVzNmVTVVpHQm4zZTY2Vjl6dHo1aS9EeDhXSFNsR25NL0hRNml4WXV3TlBUazRIWmhKU1BIVDNLaGczcmFkKyt3eTNIVnJac0VPM2JkK0RkWGoxUlVIajIyV0JOTy9qOVB2MllQR2tDNjc3K0NyUFp6SkJodzdYSWFQaUlqeGszYmpRMnE0M1NwVXN6ZU9qd1c1NnJRb1dLandIWGMvZllIRG9oR3Jla2dpQ0tvb2ZGWWhtZzErc24vMXQvL05EUVVQNzg4MDkrL1BGSFltTmo2ZG16Snp0MzdzUmdNUERVVTAveHhodHYwTE5uVDY1ZXZZcXZyeTgrUGo1TW5UcVZsU3RYOHZmZmY5T29VU01XTGx4SUdZYzZ2YzFtWTh5WU1YejIyV2ZFeE1SUXVYSmxQdm5rRXpwMDZPQjRHdFhpalRmZVlPalFvVVJIUnpOZ3dBQzJiOTlPY25JeWRlclVZZHEwYVRScTFBaFEyejI2ZGV0R1dGaVlsazhMRFExbHpabzFpS0pJeDQ0ZG1UMTdkcTVocmh1UER2YnMyZU5XZDhzSGNiR3hZVFZyVk4rT3VtYlUrVW9UQkNFRFZTbGVFa1ZSWFROcU1DaUNJQWhtdTkwK1V4VEZYdTdwYzhNTnQyRjdHSkdSbnI2NllvVnlYMlF6YktsWkRKdGRFRVJacHhNVnZjR2c2QjNKdWFCLzZ4ZWVOMjhlZmZ2Mi9VLzhlSkdSa1RtcXR3V0JMTXRjdm5LVnVMZzRKRWtpSS8zUlhIdnFZVGFqMCtudzl3c2dLS2dNK1JHbUtvcmltTE5ZN1BaN04yY2Vaak42dlo0QS93Q0Nnc3JlY3YvcjduN0dYQ0ZKVW5FY1RibFpYNHFpcGhIVjdnNFpXUWJKTGlFSWd1QXB5L0pSb0xKNyt2NTlzRmlzbkRoeEFwMWU3OVlWQlZKVFUwaEpUa0tTN05TcVdRdWowWkNyVWZ2MTE5OFFkYnI3b3l2cUdKTXNTOVNyVzlmdHNkMEJGRVU1WDZaVThRL0lKSjEwRWs4NnFjTHRqbkJVMGV2MWlyTzZVTlk5ZGY5T1JFUkdvTlByM2F3UURuaDVlVk8wV0FsME9qMDNJbTdrdXM5Zmw2OGc2blQzYmM2Y1l4SkZIVmV1WEhWZnRIY0FRUkJLWi9QWXN2L2ZwVmxYUEgvK2ZGSEFuYm4rbHlJMkp0Yk5DcEVMdkgwS0VSTVRtK3UydUxpNEJ6Sm4zajZGaUlsMWt4M2NhVlQveWVneDN1VFo4dUhVYlFGUTBBY0VCQlIzejltLzFUMi9jMWFJUjhGelMweUl5M1hiZzVvekx5OXZFdVBqN3VqWXBNUkVMdjkxa2RSOHRIcTl2THdKS3ZjNGhRb1hmbUR6ZmkvSFdiVkt0VUpBVEM3ZW12T093Tm42b1RlWlRFWHYvZzNucGpndUtIeDhDcUhUaVJRcFVvVGl4Vy92R1NNSWtKN3VKcW5NQytsNUVIZyt5T0xLbmY1ZWYxMjZRRnBhL2dLOXFha3BYUDdySWpWcVBUaGF4WHM1enNlS0ZDbVUzVnR6RkE4RTEzQlVVZlE2bmU2dUdqWTN4Zkh0SXpVMWhSc1JrZHlJaU9DcE9uZjNvdHkrN1NkV0xGOUdWTlJOU3BRb3dlZGZydUg4K1hQMDZKN0pRREowK0VoZWVLR04rNGQ0aUhFclk1SDFXdnF2anJOUW9VS0ZzaGd3WjNPdTRGZ01ueldTRWZTaUtENTJONzlZVm9wak53b2Vvbmg1ZVJOMU00TEl5RWlLRlN0MlZ6NzN4bzBiVEprOGtUSGpKbEN2WG4yU2tsVE9yd29WS3JKOTUyNEEzdW5SN1o1OXIrWExsdEx1NWZZdU5FM09jYzJhTVoyVEozL0hhRFRTL1BtV3ZQZCtINDFWNHRxMWE4eVpOWU9UcDA1aU1wbG8wYUlsdlhxL2w0TjE0bTdpVnVkOHJuRkREQVlEZ2lBU0ZCUkU5eDQ5YWRTb3Nmdml2WTh3bXowS3VScTFIQy9IMGtrRlVSVEZnTHQ1Y2pmRjhUOHdjTjQrM0x4NTg2NTkzdGsvenhBWUdFaWpSbzB4R28wRUJnWTZRbGdCaHdhankxckN1NDNQVml3akxpNW5Bbi8wcUpHVUxGV0tqZDl0WnZHUzVSdzZlSUJObTc0RjFKNjhvWU0vcEZMbEtuejczV2JtekpuUG50MjcyTGpobTNzMnpvS2VjKzc4aFh5L1pTdmRlL1FrYk9wa05ueXovb0ZjSjRJZ1VLZE9IVnEwYUVIejVzMHBVZUwybklpREIvWVQwclVUcjcvNkNqTStEZFBXZE5wc05zS21UU0dreTF0MEQrbkN2bjJaYTVyelk4UzlkNUZNS3B1Kys1YWhnMVhhSllQQm1OMWpFM0VVRHJKR2pGYXJGVkVRaEx1NlNOR2R6UDVubnB0ZGt2N3g1eHcvZm95WDI3WmgydFRKUkVaRzhuTGJOcnpjdGcwclAxdFI0TTg0ZFBBQW5kOTZnK2JOZ3VuUlBZUS9UcDF5MmI1bjl5NUN1bmJpaFZiUDA3MWJGdzRkUEtCdDY5ZjNmVjV1cTRhMkh3em96OHR0MjlEMy9YYzFJeEljM0pTdUlkMHdtVXdVS1ZxVXV2WHFjYzVCU2hBWEY0ZWZ2eitkT25mR2FEUlNxblJwR2pWK2xqLy9QSFBQNXYxMnptazJtMm5VcURIRGhvOWt5ZUtGK2RKYTN5dVVLMWNPblU3SHRtM2IyTHQzTHpWcjFzUmdNT1Jxc0xQL1B5TWpuYWxUSmpGeDBsUldyMTFIVEV3TTIzNzZFWUN0UDJ3aEl5T0RsVitzWnZxTVdjeWUrYW5tNWVmRmlGc1FQUEhFRTlwRE5iOHhadjA3SmlhR2QzcDA1OEtGODlydm9OZnJDK1hocVdrdldaYlI2L1dJZ04vZG5QUTdwVGgyUTBWSzhqOHZ0TlNxVlp0dk4yMWhRT2hBU3BZc3hiZWJ0dkR0cGkyRWRPdGVvT012WHJqQXh5T0g4MTZmdm16WnVvMVhYM3VkZ1IvMEo4cmhUVjY1Y3BueDQ4WXdaTWh3TnYvd0V5KzkxSTRSSTRacGFsdHo1czduMjAwcUU4cU1XYlA1ZHRNVzVzNWZDSUFvaW5UcTNBVmZYL1d5Kyt1dlN4ell2NThHRFZSMms4REFRT2JNblkrSGgxbTcwSThmTzBhTkdqWHYyWnpmeVRucjFXK0ExV2JURFBMOVJHQmdJRGR1M05BOEZGbVdjNUE4SERrU3pvaGhRN0RaYk1URnhmRk9qKzdFeGNVUkVSR0JyNjhmSlV1V1JLZlQwYXBWYXc0ZlBnU29yTGZQUHZ1YzQzY1NNQmlNbkR0M1Z0dVdHeU51QVhOamVaSlZMbHU2V0tNR1Azbnlkd2IwVjFjUitmcjY4c1dxTllSMHkrUkUxT2wwdVlXaXVJYWhxa2NyQXZjOGJodzBNSlRYT3JZbnBNdGJkTzM4SmxzMmY2L2xOVjdyK0FydDI3MUk5NUF1OTNRTTNVTzZjUEhpeGRzNlp0dFBQL0pheDFkNG9YVUxacy9LbStCdng0N3RqUDVrNUgvR3VHN2V2SW5nSmsxcDFLZ3hKcE9KVnExZm9FclZxbXh6Q0hrRUJBU3lmTVhuVkt0ZUhWRVVlYWx0TzJ4V0szLy9YZkRtMHo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMGVmRytmZitDbkZNUUJQejkvRWw1QU1sNm85R0lKRWtFQkFUUXVIRmpaRm5HWkhKbEhhdGJ0eDcrQVFHTUdmMEpnd1lPb1AwckhmRDM5NmRZc2VMRXhjVnk2ZElsN0hZNzRlSGhwS1NvMzhISmlIdnExRW1HRFA0UW84bElZbUtpdHMzSmlEdDN6aXlORWZlZjRzMjNPck5yMTgvTW1UMlRjV05HMDdkZmY2ZDNsaU9uS2dpQ2R6NjVOUmNqcHhjRTRiNGt4RDRhTW94NjllcVRtSmhBcjU1dlU3V2F5bjJXRjczeHc0QVdMVnZSb21VcnZ2NXFMWkdSRVkrTTF4Z1pHVW1GQ2hWZDNpdFRKa2liQTI5dmIzWnMzOGI0OFdOSVNVN0pNNnpJRDlXZmVJSnRPM1lSRVJIQkp4K1BZUG15cGZSOHg1V0g0Zk9WbjNINDhDSG16Sm1QWHErL0w5KzlvT2RVRklXNCtEaThIMURheFJtTzd0Ky9uMXE1OEprSmdrRHYzdS94eHVzZEtWT21yR2FreldZenc0YVBaUEtrOFk3ZnRTeWVack4yM1BmZmJ5STlQWjFKazZjeGUrYW5McCtaRnlOdVhtalZxaFhlM3VyOE9QT0FwMCtmNXZUcDA5byszdDdldlB2dSszd1EybzgzMytwRTVjcDVMeXNUUmRFN256QlVNMm8ybXcwOWNGODVxUXNYOXVXSkoydHc4Y0o1eXBjdm4rZCtpWWtKVEo0NGdhaW9LT3gyRzUwNmQ5WFlPTStjT2MzTUdkTkpUMHVqU05GaURCMDJRb3ZoZCsvNm1kV3J2OFNTa1VIMUo1N2tnNEVmYXZtSFhUL3ZaT3pvajBsUHo2QnZ2LzZhbC9ETituVnE4bHBSYU5yc2YzVHIzdU9XMytQSWtYQStuVDROVVJBcFdhb2tudVpNdHR6OHh0QzhXVEQ5QjN6QTBpV0xVQlQ0ZnN2V2g4NndGUzFhbE1nSVYwTisvZm8xYXRkV1cxSDIvcktIVlY5K3dZeVpzeWxWdWpTZ1ZnMXp1N215R3p0TFJnWmJ0LzVBNjlZdllQTHdvSGp4NGpSdi9yeExvaHBnL2JxdjJiN3RKMmJObVhmZkdrNXY1NXhIam9Sak5CaW9WUG4rTDdHMldxM1k3WGFPSGozcURORnlhR2FrcEtUdzBVY0Q2ZHdsaEhObi8yVEs1SWtNSFRZQ1FSQjR1dUV6UE4zd0dVZnViSzVHUzErNGNHSE1aak5qeDAxQUZFVXNGZ3VGSGZPUUZ5TnVmdmp4UnpWMzk4d3p6M0Q1OG1VdGZIWkplMXk4eU9SSkV4ZzdiZ0lybGkrbFROa2cydVR0S1h0bE0ySlpqSnFRTldSRkJEenY1NDhTSFJYRnFaTy9VNlZLL2t6azU4NmQ0My9ObjJmWmlwWE1tYnVBV1RObllMVmFzVnF0alBwNEJLR2hBL244eXpVODgwd2psaXhhb09WcjFxOWZ4NXc1ODFuNXhXb0FmdGl5V2Z0TUh4OGZWbjZ4bXRGanhqRi8vbHhBSmRiYnZIa1RDeGN0WmNteXovanR0OS9ZOWZQT2ZNZG1zVmlZTUc0TW8wYVA1Y3ZWYXlsVE9uT3A3YTNHWUxmYmlZcUtZdDAzMzdMK200MFB6SGpaN1hhTkJsMlJaZXgydTJhRTJyejRFbnYyN0NJOC9EQjJ1NTJmZjk3Skg2ZE8wcUpsUzBCVlRoSUVFSFU2RWhNVHRCeUpJcnV5RkJjdlVZSkRCdzlpczltSWpvcFN3eWlUaVM4K1g4bmF0YXV4Mld3a0pNU3pkKzh2MUtoUkl6TVUvbjRUMzI3Y3dNelpjKzhiQVdkQnoybXhXRGg4NkNDVEowMmc5N3Z2UHhDdGl1am9hSzJhYlRRYThmWDF6U0dJY3ZIaUJZS0RtL0pXcDg2TS9HUTBScU9KdURqWFZRK0hEeDFreDQ1dFdnOWpyVnExc2R2dGlLSklRa0k4Rnk5ZXBGTEZTdHEyM0JoeC95bCsrL1VJUTRlTm9FblRabnc2Y3c2bi96aVZnKzA2eTRQU25NMm9aWDJHdXBUMzlZRDVmdndZMDhPbVl2WXdZelFaNmRPM1A2VWRwSTU1b1diTldpeGZ0b1J0MjM1RXA5TmpzV1NRbkp4TVFudzgzdDQrVksybTZoRzgxTFlkVFpzMVUzK293NGU0OXZkVjN1MzlUcGFuaWs5bTNzSEI3bG0xV2pVdEVSNGVmb2pubjIrSjJlR092L2ppUzRTSEg2WnBzLy9sT2JhclY2L3cyR05GTk9OY3BWbzE5djJ5cDBCakFPZ2EwdTJ1WEJSM2l1d051bE1tVDJUSzVJazgzNklsSDM4eW1vb1ZLekZxekRnV3pKOUxaRVFFWmNxV1pXcllweFF0cXZiWHRYNmhEYWRPbmFSSDk2N29kSHJhdmR5ZWloVXJFWmR0dWREQWdSOFNObTJxK2lRdVU0YWx5MWRpTkJxWk1qV011WE5tOGRYYU5SZ01Cb0tiTk5XU3hKSWtNVzNxWlBSNlBXKyszdEUxVFB4eU5jV0szZjBWZ0FVOVo3OCs3eU1JS25Qc29BOEgzOVUrTmg4Zm53THZlL255Wlh4OWZUVlp4K1BIaitkSTVOZXNXWXVhTld0cCthcEJXWmh5NCtQajZOV3pCNlZMbDJiaXBDazhWcVNJOXJ1ZU8zZE95M2YzR3hDcWVhNTVNZUlXQkFjT0hNaHoyMnV2djZIOVB5QWdnSThHNXl2czRwRlBHT3F3Y0NLU0pLRUg3c3NkTnVqRHdScHRjRUd3ZHMwcTdEWTdVNlpPUnhBRXJYM0FhWjZkTUJnTStQbXBUMWliMVVad2s2YWEzRmgraWQrc0lWTFdWaTVCRVBKOFltVE5yK1RWTEZxUU1lVEhFM1kzMGJKVmExcTJhcDNqL1lvVksvSEx2dndGbWhzMWFwem5qV3N5bVJqNThTaVg5OTdwMVR2SGZ2VWJQTTNYNnpma2VMOUN4WXJNbkQwMzE4L1c2WFRzMlh2Z3ZocjZncHp6VnZOMU44YVFtcHBTb0ZZcDUrcWVPNFdmbnovcmNva1dzaHZBckFnTURDeXdRdGJkUkVCQWdGWmh6OFZXQ2RudGdTQ0FUcWUyZXp3NDF5RmZkenNHYng5dkJFSGcrUEZqSkNVbG9TZ0twY3VVSVRrNW1mUG5WV1gzbjM3Y1N0aTBLUURVcTErZm4zZnU1UHIxNndEczNMbURreWQvei9jOGRldldaL3UyYmFTbnAyT3oyZmhoeTJicU44aGZXS1ZzMlNDaW82TzFuRUZFbHR6Qm5ZemhuOEJzOXNTTjI1dWJCemxuZVoyN1NKRWlwT1d6cHRyVHMyQWhiMEgzdTFlNHgrTTA1dUtwQ1VvMnI4MFppdW9lMUNUa0owangybXV2TTNiTUtIN1lzb1hLVmFwUW9XSkZFaE1TQ0F3TVpNeTQ4WHdhTmcyTHhVTGdZNEVNR1RwQ0RRbXJWS1ZmL3dFTUhmd2hOcnVOY2tIbEdEeDBXTDVqZUtwdVhWcTJhczI3dmRTQ3diUFBOYUZwVXpXMDNmYlRqeXhkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR083WGsvNVJRbXBLY3A1ZXRmaUE1aXcxSlJsZEhwWFc0c1dMRXhFUlFmVE5DRHk5ZlhLTXJWejVDcmRjWU83cDZVVzU4ZzlXbCtrZWoxT1htOGVXVzk1TlVHNFZkOTBtamg0OVNwRmlibzNNTzBWVTVIWHEzTVpDK011WHJ4QWJGK2RlbTVzTk55TnZFQmdZUU5sY2NybVhyMXdoTnZiK3o5bk55QnNFQkFRUVZEYnYvSEpVVkJTUmtaSFk3WGFTazkyc09OblJwRW1UOWtBYUtvTnVFcG1pTGhZMDdRTkJ2dXZOUVc0UDRwODkwVyszWDZ0czJUSkVSMGNqbnRxUEFBQWdBRWxFUVZSeE0vS0dteHJjTVljcEtjbElkbnV1UmcwZ3FHeFpvcUx1MzV3NXh5UkxVcjVHelJtU0ZuRWs4OTNJRmRuRFRzR1pZeE1FUVYxMUlJcUNvQ2lLaExwRTRhNGdJaUtDeU1pYlBGYlV6Vjk1Kzk3YURVcVVLSDdiN0I2S292RFg1U3ZFeGNVaTJXVXlNaDVOamphejJSTlJweU13SUpDeVpVdmZjb0gvbFN0WGlZNkpRYkpMOTJ6T3pHWlBkSHI5TFQwMU53b0VXUkNFamtCcUZvOHRSUkNFVk1BaUNJSk5FQVM3S0lxS29DaUtGVERjN1hCVUVIVjRlWG5qNmZiY2JvazBoOWdIS0xjVmhycmh4aU1HbXlBSXIyY3hiTWxBc2lBSWFVQkdWc09tQis2NllhdFRwdzQzYjk3a1psUVV5VW1KYmdiZGZPRHQ0NE5CcjZkVXFaTHVFTVFOTi9LSHRhQTdPZzNiWGE4UkZ5MWE5STQwTXQxd3d3MDNDbWpZbEd6L2FoQ0JkUGQ4dWVHR0cvOENaQlRZWTd0eTVZcGJEY1FOTjl4NDZLRW9Tbm91M3BtaU9CUmRuSjFyaXFJbytySmx5NmE2cDh3Tk45eDQyQ0hMY21xVzBGTXpjTm5iUFFSQlFGUVV4VTE1NjRZYmJ2d2JQTGJzekpaS3R2OXJmK3RSZTBIY2NNT05CMy9qdXZWNDg0SGRiay9KWXNDVUxLR29ralVVbFdVWnZhSW9DZmRTcWNnTk45d29tRkZ6Ni9IbUQ0dkZrcHlieCtacXZ6SkQwYmhIYllKS2xTcEZ0V3JWY2hXajhQYjI1clBQUHJ1WFR4MUNRME1wVXFRSWhRc1hwbmZ2M3BvSWlodVBMckxxOGJxWEkrWjU3eVJsODlnVWNtbjFBTld3eFQ2S2szVG16QmttVFpwMDM4ODdiTmd3Tm0zYXhMcDE2OWkwYVJNN2QrNmtYNzkrN3F2MkVZZGJqL2ZXc0ZxdFNWazh0Vnp5YTRMS3JTaUFLRWxTektNNFNlWEtsV1BpeEltY09YUG12cDB6TlRXVmVmUG1FUllXUm5Cd01NSEJ3U3hldkppVksxY1NFeFBqdm5JZllkeXBIdStaMDM4d01MVC9mWEFFVGhNMmJRcmJIVXBsVG16YytBMGhYZDRpcEdzbmxpOWJxcjJmbjhEeWlSUEg2ZmwyTjdxRmRHYjBKeU1Mck0yYW5wNldqR3RUYnJicXFOTmZBOUZtczkxOEZDK2szcjE3VTcxNmRkNTU1NTE4R1hQWHIxL1BrMDgraWRsc3BucjE2aXhkdXRSbCs4OC8vMHlkT25Vd204M1VxMWVQc0xBd0YzSFl3TUJBUHZ4UVpkTTlkdXdZNmVucEJBY0hhOXVmZmZaWkFBNGVQT2krdXg5aDNLa2ViK1VxVlJrMVp1dzlIZHY4ZVhOWnRuUUpseTVlZERGQ1Y2OWVZY1A2OVN4WXRKUmx5MWR5NHNReGpod0pkeHlUdThDeTNXNW4wb1J4alB4a0ZKK3QvSkpTcGN0b21obTNRbEppVWw2aGFJNFZDUHFNakl5b1c2bk4vQmVoMCtsWXNtUUpEUm8wWU5HaVJiejc3cnM1OXRtN2R5K2RPblZpOXV6WnRHclZpcU5IajlLN2QyOTBPaDNkdTNmbjRzV0x0R25UaHI1OSs3Sm16UnArK2VVWCt2ZnY3eUx3TVdqUUlHclhyZzNBOWV2WE1ScU5CQVFFYU5zTkJnTUJBUUZjdTNiTmZYZTdrUU94c2JGTW5EQ09tT2dvQkZIa3ZmZjYwT0RwaGk0a3JiNitmcXhZK1VWbXVtUElSOXk0b1RJNEp5UWs0T25seFpxMTZ3QlZGV3JPckJra0ppWGk3K2ZQNEtIRE5DMExnSFZmZjhXR0RldTEvUUY2dnRNTG85R29NVlU3OGZ1SkV6eFZ0eTZlbnA3WTdYYjhmUDA0Y2Z3NDllclY1OFNKNDN6d3dTREFWV0E1NnVaTlBNeG1nb0xLQWVEdjc4L1BPM2NVYUM1dVJ0MU1Mb0JSVXdEMEVSRVJFWG5Kei8vWDhkUlRUeEVhR3NxUUlVTm8yN2F0cG4zb3hJUUpFK2pSb3dlOWU2dDgvbVhMbHVYU3BVdE1uVHFWN3QyN3MzRGhRcXBVcWNLMGFkUFVwMmZseXB3OGVaTFZxMWU3NU5TY1NFdEx3OFBESThjNFRDWlREdmswTjl3QStHcnRhbXJVcUVGSXQ3ZTVkT2tTOCtmTm9jSFREU2xWcWxTZW1yeVRwcWpYWTJKaUFyM2Y2YUhwYjFpdFZpYU9IOHY0aVpNcFhydzRQLzI0bFFYejV6RjZUT2J4Tld2VnlzRThuSmZ3a0ZOZ09UbzZta2tUeGlISkVqNk9QR0ZXZ2VVZE83WnBBc3RKU1VtWVRDYXNWaXR6NTh6aXhvMGJPUlMyOGc2N1R6dmJQZVM4UERWbk1DcldyRmt6aXR0WWcvVmZ3OWl4WXdrSUNLQnYzNzQ1dHAwNmRZcGx5NWJoN2UydHZVYU9ITW1GQ3hlUUpJbmp4NDlUdjc2clFFMmpSbzN5UEpmWmJNNjFFbXV4V0I2SWpKc2JEei9xMVcvQXpoM2JXZm5aQ2l3WkdRVVdWSkZsbVRHalI5SG14YmJVcjk4QVVLVWhyMTM3bStGREI5TTlwQXVyVjMrcHFiVTVVYWxTWlY3cDBMSEE0enQ5K2c5R2poaktPNzNmcFdsVFYyVzNTUlBHY2ZueVg0Uk5uK21pVkorWW1NakFEd1pRclZwMSt2VWZVTkJUWlV3WVB6WXRuMUJVTTNTQ29EYm9BbHdGS2oyS0Y0Nm5weWNMRnk2a1pjdVdiTnpvcXR4anQ5c1pOR2dRYjcvOWRvN2pSRkZFcjlmbkVBVE9MMTlYcWxRcE1qSXlTRWhJd05mWEYxQlZxMk5qWXlsWjBrMm43a1l1aHExZWZlYk9XMGo0a1hBK1g3a0NvOUhJbUhFVGJubmNzcVdMOGZEd29IT1hydHA3TnB1TllzV0t1WVN0L3dTRkN4Y21JeU9Ec09rektWU29FQ2RPSEtldzQ3ck9TMkM1VUtGQ0pDVW1NbUhpRkI1Ly9ISE9udjFUdXhmeWc2SW9mMmN6WUhJV3p5M24vYWtlbzF4NWxDK2VGaTFhMExselovcjI3YXVKQ0FOVXExYU5reWRQVXFGQ0JlMTE0TUFCWnMyYWhTQUlQUG5ra3h3NWNzVGxzN0wvblJXMWE5ZkdiRGF6ZDIrbTZ2bStmZnNRUlpHbm4zN2FmUmU3a1FPVEpvNG4vRWc0elpzL3o3RGhJemwwNkdDT2gybDI3TnUzbHoyN2R6Tjh4TWN1emFzVktsUWdLU21KWC9iczF2SnQzMi82enVYWTgrZlBzWEhqTndVYTI1TTFhbUMxV2pHWlRFaVN4TUVEKzZsWlM5VXl6VXRndVZqeDRoVDI5Y1hrQ0cvMzdkMnJIWk1mSkVtNm5zMm81ZUd0cWYwZWVrQ1JaZmx5WG9vK2p3cG16SmhCMWFwVlhYSmRRNFlNb1ZXclZvd2VQWnBPblRweCt2UnArdmZ2ejhDQkF3SG8yN2N2czJmUFp1alFvYno5OXRzY09uU0lCUXNXdUlTVmt5Wk5vbmJ0MnJScTFRb3ZMeTk2OU9oQjM3NTk4Zkh4d1dnMDBydDNiN3AzNzM3ZkZNL2QrSGVoYytldWhJVk5ZZTNxVmNpeXpNQkJIeUdLWXI0S2IzTm56eVFqSTRNKzcvWFNQbWZ1L0VYNCtQZ3dhY28wWm40Nm5VVUxGK0RwNmNuQWJEcWl4NDRlWmNPRzliUnYzK0dXWXl0Yk5vajI3VHZ3YnErZUtDZzgrMnl3cGgyY2w4Q3lYcTluK0lpUEdUZHVORGFyamRLbFN6TjQ2SzNGbDIwMlcwUXVIcHVpcXUrNWVtMkNnQ0lJZ3VDZGtaSFJ6MmcwVG54VUxwWlNwVW9SR2hxcXRXRTQ4Y1VYWDlDMWExZFdyRmhCdDI3ZEFGaTFhaFVUSjA3a3dvVUxGQ3RXako0OWV6Snk1RWp0U2ZqVFR6OHhjT0JBTGx5NFFPM2F0V25Rb0FIcjE2L1hkRVVEQXdQcDFxMGJZV0ZoV2o0dE5EU1VOV3ZXSUlvaUhUdDJaUGJzMmJrV0ZkeDRkTEJueng0ZXIxakZQUkY1SUNZbTV0UGFOWi80QlZkYThCUW5MVGdxYmJna2lxS3MwK2xWdzVhVWxOVEcyOXQ3clh2NmJnOG5UNTRrTFMyTkJnMGFhTytOSGoyYUgzNzRnZkR3OFBzMkRsbVd1WHpsS25GeGNVaVNSRWI2bzdsRXk4TnNScWZUNGU4WFFGQlFHVVJSekM5bjQ1aXpXT3oyZXpkbkhtWXplcjJlQVA4QWdvTEt1ZzNiSGVMc24zOE9hLzYvSnFmSktlU1NEamlrOTBSSkZFVlpyOWNwZWtDSmo0Ky8rQ2owc2ttU2ROdnlkdm5kR0JjdVhLQkxseTZzV3JXS1dyVnFjZkxrU2ViTm04Znc0Y1BKalBjTGpzakl5TnVtVTdkWXJKdzRjUUtkWG85UG9jSnUrYjNVRk9JVDRvbjVMWnBhTld0aE5CcHkvZTErL2ZVM1JKME9iNTk3UDJlcHFTbkV4c1VSSFJOTnZicDE4OTMzdXJ1Zk1WY2NPbmdnbHN5Q2dWWTRjREI3T0VKUkJRVUZXWllSQkVId0JJei9aKys3NDV1by8vK2ZkNWRjZHZlbXBZVzJERkdnU0FFL0ZCRi9iQnpnRjBVRlJDeFlrQ0VnSWhRVUZHUXJRZ3NpVTVDbElHSlpBckpreWlwWWhteVEwcWJwYnRPUmNYZS9QMjQwU2ROU29HWG05WGhFYWRaZDNuZjN2TmQ4UGxtVzFRTlF1SmJ3N216cTFLbFl2SGd4MHRMU0VCd2NqTGk0T0l3ZVBicFNiNkU2N1dHSi96N3F4b3NUZXlFc3RMeVhkTzM2RGVUbTVqNFV3V1FmYjIrRU9wSGhjM2xzbGQrL1Eyb0Y5QUV2WTJCMENFVkxBSmdGb1dTR0pFbE9KcE54Sk1xU2NSZGM2M2YzRmg4ZmordlhyOE5rTXVIcTFhc1lNMmJNQXdNMUFNak95bllOVHpzeHJjNE5XVm5PK1IxeWNuSWV5cHBwZFc3SXluYk5CTjlEcXVVaTdGczhiRnM5N0lzSElvT3U2SjJ6TEh2ZXRZU1BsM0hjdlE5UFArbW0wV2pCc2t5RktZbUhzV1lhalJhTWxYRWRuTHMwaThWeUZlWDcxeHo3MkhoMkR3SGNaQVJCY0J6SGNWYXI5WHhGb3hNdWV6U05JSUNTRWhlWFcwVldVZ0hQM2NNc3J0enI4U3JJejhlTjYxZFJWR1NzRkRqRDZvVER6ZDM5b2YyK210aFBvN0h3cGhOQUsrZXhFVVNaN29GTWZLR2twT1NjQzlncTg0NTQybWFEd1FBcnc4QllXRDIwelZxdERqSzVESDYrdmdnTURLejIvZDYxY3dlV0wxc0tneUVEUVVGQldMbHFMUzVmdm9UWS92Mms5NHlObjRDdVhidTVEdklqYk5ldlhVRnhjZVgwUGtWRlJ0eTRmaFdObXpaN292Yno5dTIwMnc2QXhnQmdoYUpCdVljSWJBREFYYnAwNlZ4MGRMVHJES29BMUpLVGt3R0NoRWFyNDJtYkE2cnYrNHVLakVqWFp5QTlQUjNObWxYZlNabVdsb1laMDZmaXk4bGZJenE2QlFvS2VHcWNpSWhJN05xOUR3QXdNUGI5R2x1M1pVdVg0UFh1UGV6WVRNVDltanZuRzZTay9BT2FwdEcrUXljTS9taUlOSHlkbXBxS2hMbHprSEkyQlFxRkFoMDdkc0tIY1lOUmswM2tkOXJtaXpFdlFDNlhneUJJaElXRm9YL3NBTFJ1SGZQQXpzRTdnWVh0dWZRd3JTYjJjLysrdlJrQ2FERWlxTmw3YmJ5WEJsdVZLaEhsV3Jac21RWGdzZ3ZHeXB0ZXJ3Y0lFbjcrZ1RXU205Rm90UER6RHdSQUlEMDl2ZHErOStLL0YrRGo0NFBXcldOQTA3VEVFMGNRQkJRS0JSUUtCV3BTNytMSDVVdVJrMU0rZ1Q5cDRnVFVDZzdHYjc5dndhTEZ5M0QweUdFa0pXMEN3UGZralIwekd2WHFOOENtMzdjZ0lXRUI5dS9iaTk4Mi9scGorMW5WYlNZdVdJak5XN2VqZit3QXpKNDVIUnQvM2VDNk9HcmVxYmd5YzhhMGtzckNVSUlRUWxIWWg2SVEzc0N5TEh1S0pNbEkxM0xhbThHUUNZMVdWK1BiMGVqY1lEQVk3anNrUFgwNkdaTyttQUN6Mll6aTRtSjBmNDBQTTN1ODBSUDkzdTlmcGU4NGV1UXdFaFBtUWE5UFIyaG9HRVo5OGlrYVBmdXM3VjBVeTVZdFFhYkJBUCtBQU1URkRVYXJGLzRIQUJnMjlDUGNFaGhUUjM0OEhESVpoZURnRUNRdVdBaVdaZEcyYlR0MGUrVVZLQlFLK1BuN28zbDBOQzVkdkFpQXIxaDZlbm1oZDU4K29Ha2F3U0VoYUIzVEJ2LytXM05GKzd2WnBrcWxRdXZXTVpESFQ4REVMeWFnVStjdWp4MHpDOE13T0hyMENMWWsvWTRoUTRjak9DUUVBRDhrUC9lN2I1SHl6eG1RSklYWWdSOGlKb1luUXMzTXpNUzBxVk9RblowRm5jNE5ZejRiaTlxMVF5dmREa0VRaUlxS2dvK1BEMWlXeGZuejU1R1dsbGJsL1Z6eDQzTDhzWDNiT1dkaEtBQ1c0emkyTEw5R2NDQUl2a0c5b0VBcUhnQUFaN0ZZa2hVS1JTOFhsTm1ibGJFK2tDcWFScU9Gc1NEdnZyK25hZE1vYkVyYWloMS9iTWZLRlQ5aTlkcWY3K3J6VjY5Y3dlY1Q0akhwcXlsbzNqd2FlL2ZzeHFpUncvSFRxclh3OC9mSHpaczNNR1h5bDVnN2J6NGFOR3lJVGI5dHhQang0N0I1eTNhbzFXb2tKQzZRd3JjNWMrY2hNcktNT0lZa1NmVHUwN2NzSjNQOUdnNGZPb1NQaHZDMFVUNCtQdExuUlcvcWRISXlYdS9lbzhiVy9WNjJHZDJpSmN3V0N5NWR2SWlvWnMwZXlmT1daVm1wOWNqMjN4OFBINHBhdFdyaHdvWHpZR3dxeDl1M2JVVnBhU2xXL0xRR09UazVHUFJoTEJvM2JnSTNOemVKRWZlVlYxL0RpUlBITVdQYVZNei8vb2RLdDErblRoMVFGSVdkTzNkQ29WRGc1WmRmUm1abUppd1dpOU45dFAwN0plVWY3TiszRjdObWYzdmxoVmJSam1Hb2JZNE5Jb0FSQWpocnRWcSszVU5Nd2hVVUZKeHl3Vmg1cTY1Q1FaVzJaVFErOU4rN1pVc1MycjdVRHExYngwQ2hVS0J6bDY1bzBMQWhkZ3A4OTk3ZVBsaTJmQ1dlYWRRSUpFbmkxZGRlaDhWc3hxMWIvMVY1RytmT25rWEg5dTNRcjI5dk5HallFQysyZmNucCt4WitQeDhxdFJwZHU3M3l3SDUvVmJaSkVBUzhQTDFnTERJK2t1ZnM4ZVBITUg3Y1o3QllMTWpKeWNIQTJQN0l5ZUVGNmI2ZE14Zmo0aWVVdTFtZk9YTWFiZHE4S055QUNNamxOQzVkdWlpOTl1S0xQS1c5TFNQdW5XNFlvb2ZHY2Z4RWdLZW5wOTE3bGk1WkpGR0RwNlQ4ZzQrSDh6ZTRLNWN2b1dsVUZHN3hycit0dDhZNENVZkJjWndFY0hJNWJkZWd5NzMxMWx1bndIZjJ1cXdTTzNQbU5EcDFlQmw1ZWJtU2g5T3Y3N3RQVkU0eE1OQytLNzkyN1REbzlYeitUNnZWNHVUSkU0ajdNQmE5MyttRjk5L3JJOTF0cTJxTm5uMFdPLy9jaTUvWGIwUjZlcnFkRUlob0sxZjhpTC8vUG9xcFU2ZFgyeWpjbmF5cTIrUTREam01T2RBK29qMkV6WnRIdzh2YkcxOU8rZ0tmalBvWVBkNzRQNGxCNWs2TXVHZlBwdUN6TWFOQksyams1K2RMcjRtTXVJa0pjeVZHM01xTXBta3dEQU52YjIvRXhNU0FaVms3d2trQWVPZmRQdGk3ZHc4UzVuMkh5VjlPd3RCaHZEQk4zZkFJbkR4eDNEaDB5RWNaRGlHb0hiQUpZRlpPMUlVVWtzY2NBSGIvL3Ywc3gzRkhYZEIxWnlzcEtjR2ExYXVmeU4vbTcrOFB2VU1SNC9idFZJa2IvOEJmKzdGNjFVLzQvUE5KV0wzMjV3cERYWUlneW9HZHFiUVVtMzdiQ0ZNcFQ5b2NHQmlJOXUwNzRNeVowM2J2MjdEK0YremF1UU56dmt0NFlIMVpkN1BONDhlUGdaYkxVYTkrL1lkeWZEcDI3Q2c5SEZtY3hiV1BpeHVNVXlkUFFFRXJxdXp4YnQ2Y2hPWExsbUxhOUZrSWRjaWhWY1NJZTZkd3RHSERoamgwNkpCVWxiYzFyVmFMUVlNK3d2cGZma2E3bDE5Ry9mcjhXRm1USmszUnZrT25rd1pEUm1XZ3hwYk5pWXJCS0svelFNS2VONXkxV3EwdVlLdmlBZHU3WjdmazN0dmF2cjE3OE9IQUQ5Q3Y3N3VZT1dPYWxGTklTMHZEb0E4SG9QYzd2VEJyNW5RcHFmOVE4b1pXcTBTcXliRXNyRmFyQkVMZFhua1YrL2Z2eGJGamY4TnF0V0xQbnQwNGR6WUZIVHQxQXNBTGpCQUVRRklVOHZQenBGQ0NZKzNKVEFPRGduRDB5QkZZTEJaa0dnejhYVnlod0U4clYyRGR1ald3V0N6SXk4dkZnUU4vb1hIanhtV2g4T1lrYlBwdEk3NmJsL2pBZU9xcXVrMlR5WVMvang3QjlHbGZJMjdRUncrbGNKQ1JrWUdkTzNkS0QyZE1Na2FqRVo5K09ncDkrdlpEUUVBQVpreWZXaW03c3hoaWVuaDRZTmJzYitIbDVRV1R5UVIzQWVCRlJ0eGh3MGRBTHBkTGpMaVZtZGxzaHNsa3dzR0RCMkV5bVVCUlZEbHRqNnRYcjJMNnRLL3gxZVN2Y2ZUSVlXemR1a1Y2N2RWWFh6dnJKQXhsYkhOc29tTkdFSVNVcTNOemQ0ZE1LSTl5b2x0WFdGaDR6RVY2ZUdkVHF6WG8yS2tMVnE5YWlTNWR5Z0RxK3ZWcjJMQmhQUklTRmtDaFZHTG1qR25ZdG5VTFh1L2VBM1BuZklQMkhUcWk1NXR2NGRqZlIzSG80SUdIc3UrT0Rib3pway9Gak9sVDBhRmpKM3oreFNSRVJ0YkR4QzhuNC9zRmlkQ25wNk4yYUNobXp2NVc4dGk2ZE8yR3MyZFRFTnYvUFZDVURLOTM3NEhJeUhySXliVUgrVkdqUm1QMnJKbFl2bXdKYXRldWpTWExWb0NtYWN5WU9SdUpDWFB4ODdxMWtNdmxhUHRTTy9SN242ZGZaeGdHczJieVllQTd2ZXk1OTFldVdvT0FnT3B2WXE3cU5vY04rUWdFd1JNc2ZqSjZ6QVB0WTd0YnUzcjFDdHEyYllkM2UvZUIxV3JGM08vbUlDY25wMXhQb2EwMWJScUZjK2ZPZ2lSSjVPWGw0dXJWcTZnbkZINHFZc1N0ekRJek0rM0NYdzhQajNMQ0xTZFBITWZZY2VQeGZQUG1lSzV4RXl4YnVoaGR1M1lEUVJDNGR2M2F0WXBBRFE1VEJ5UkpRU2FqWURZREZFbVZUUjZJSHR0SEgzMTBkTjI2ZGZrQTNGM3dWYm05OFg4OTBhOXZiNGsxRkFEKy92c29VbS85aDBGeEE2VzdsbFpvRlVsSitRY1RCVVdnOElpYTc2cnAxTGtMT25YdVV1NzV5TWg2K090ZzVUcW1yVnZIVkhqaEtoUUtUUGg4b3QxekF6K01LL2UrRmkxYjRaY05HOHM5SHhFWmllL21KVHI5Ym9xaXNQL0E0UWQ2SEt1eXpUdXQxLzJhVGxlOTdVUk5talJGa3lZODViWk1Kc01uRGt5NXpxeEwxMjY0ZE9rUyt2ZmpxOWJEUGg0aGhlUVZNZUpXWmpkdTNJQ0hod2ZhdDI4UEFEaDkrblM1Z3NOYnZkNlcvdTN0N1kxUHg0eVZVbjV4QTJOVG5ZSWFRYkRnT0pZVGpDUkpqaVFKamlCSWFMVmFMamMzaC9mWWJIT2l2L3p5aTNYTm1qVUhTSko4eFFWZEZSdEJFRkNwVkhpalowK3NXbFVtam1FeFc5RDJwWGFTNUpsandya21HMkpkOXZnYVJWRW9LakkrME9GOHg5eG9aUURvNCtOVFpZVXMyL005T1RuNW52Yk5Zckg4cmRmcmJjTlFxd2h1QkE5dW5EUmxRSklnQ0JJa1NZQldLT0R1N3NFWER4eG1ybGlMeFhMUWRhcmRHZGdBb0VmM04zQTc5WmIwZkhTTEZ0aXplN2RFRGI1Nzk1OUlTZmxIY3VlM2I5dktoNE5DR2YxK1RhVlN1dzdHWGE3TncxeXppcmJ0NStlSFltTmhwYW1QcXFaSUhuYUtwanJlbDV1YiswOGxZYWhES0NxTVVwRWtTSUlFU1pKU1ZSUkNJbzRGd0dWa1pMaUFyWXFtVUNyUnAyOVp2cXBCZzRZWU52eGpqQjB6R20vMzZvay9kKzVBY0hBd0FHRDRpRkhZdWVNUDlINm5GN1p0MndxeUdtWWZ4VHU5eSt5dHlGaFk0V3dwK1pEV3JNaFlDS3FDRnBMQXdFQndISXZNakhTbisxYW5ic1Fkd1VDdDFxQk8zWWlIdXU3VnRaK25UcDY0NmdUVXhFZVptQXRCOElVc2tpZ0ROWklFb1ZLcENLdlZTckFzUzNJY1IzRWNKd2VnWUZsMkg0Qm5YWmNJY1BMVUtmZ0gzTC91NTRVTDUxR3JWakRjM055d1o4OXViTisyRmJObWYydjNuZ3o5YlR4L0Y1M3NOMjdjUkhhT2kwSFgwVEwwYWZEeDhVWm83ZkpzdFErTGRaaG45ZlZHbUJNR1hkRU1CZ1AwZWoyc1Zpc0tIMkJqK0tOa0hNZWRiOWV1M1NUd0lpMjI0aTFGQUlvSmdoQTBEZ2lHSUFpV0pFbU9vaWpRTk0zUk5BMkZRZ0VaSDU5S2VSOHBITFZhclh0a01wa0wyQURJcWluL1VWcFNpakdqUi9ISzcxb3RQaHM3cnR3ZFhTNlgzOVYzaG9iV1JtYW1BUm42TkdoMWJpN05BMk1oak1aQ01GYXJVMUFEZ0xEUVVCZ01EMjdOeEgxaUdhWlNVQk5EVWo4L3Y2ZjZHQllXRnY0Tko3azFBSXdZVllxdEhoUkZRUzZYZzZacEtKVktLSlZLcUZRcUVGcXRsckJZTEFURE1BVExzaFRIY1JRQU9pc3I2MlV2TDYrTkxsZ0QwdFBUa2E3UEVCZzRhczRNR2VrSURQQy82eUY0anVOdy9jWk41T1JrZzdHeUtDMTlPc2tuVlNvMVNJcUNqN2NQUWtORDdsaW91WG56UDJSbVpZR3hNalcyWmlxVkdwUk1ka2RQeldWbGR1TEVpVStqbzZPdkFpaEdtY2FCa1NDSUlzR0xNd3Y2Qmd4RlVaeGNMdWNVQ2dXVVNpV25WQ3FoVnF0QnVMbTVFV2F6V1FRMjIzQlV5YkpzTW9CYXJxVUdUcDFLQmtFUTBHaDFVRmZ6SGI2NHlBaGpZUUVBcmxyNTJGem1zc2N3REUwalNYS2tUUmhxQzJ3bEFFb0pnckRSRUtVNG1xWWxZRk9wVkZDcjFYd29TcElreHpDTWJTaktBV0FZaHRsQlVkUUhydVVHbWpXTFFucDZPZ3lHVEJRVzVGWGJzTHBPcDROTUprTlFVQ0FDQWdKY0MrMnlwOXBLU2tyK2duMDExQzRVZGNBb29ZZU54ekNTSkVGUkZDaUtLc3V4aVcwZndsQXBDNEF0TEN6ODA4UER3d1ZzZ2dVR0J0WUlmYmZMWE9ZeTNxNWN1WExHQWRTc0FLd0VRZGkxZWhBT2ZXd2lvSW4vSnNYeXFEaG5aZFBUeG5wNWVmMEo0TFpydVYzbU1wYzlpREMwU1pNbTF3WHdzam84R0Z0UUF3QmI3TElGTjRxaUlHTlpsdU00cm94dDBzWmpBOEJldTNadE8wVlJBMXpMN2pLWHVheUd3OUI5anA2YUE2aUp6TG1jR0YwS1BHOGN3ekJnR0FaV3F4VVdpd1V5aFVJaGtyUkowLzhDMkxFQUdIZDM5KzNlM3Q0dVlIT1p5MXhXbzNiOCtQSGtTc0pRaWRGRDlOQmtNaG5rY2ptRXdnSEV3b0ZXcXdWcEc1dmFjTE5KNGFpdnIrOUJ1RlRpWGVZeWw5VnNHSHF4UllzVy96bUFtZ1VWTUhvNDV0YWtFRlFtNHg4MkZRV0NKRW1PWlZsQ2lHRkZzUVRHYkRadnBtbTZvV3Y1WGVheUdyMjRvZGZya1pGaEFNTXdNQnFmbnNtRHdzTENmYkJ2eXBVZUhNZUpqYmtpd1NSWWx1VXNGZ3RzZEEvQWNad1Vqc3BzUFRiQmErT0lNb1VYRmdDVGxwYTJMU3dzYkl6cjFIT1p5Mm9PMUpLVGs4R0JrS1loL0oraTM3OXp4eDlubkhoclZ2RFRCbmJFa2lSSmNwUk1CbHBPUTZHZ29WQXFvVktxb0ZLcm9GRnJvTlBweWtKUlczQnpERWZyMXExN25tWFpuVS9hWWlZbUprS3BWRDdRYlZxdFZvd1lNUUorZm41d2QzZEhYRndjaW91TFhWZjJVMjU2dlI0Y0NQZ0hCRDExWTNGV3EzVnY3QWZ2WjlzQW04WEJheXNmaG9vRDc3WmhLQ1dEVEM2SFhDNEhLWlBKUkZEamJEdzJ6b2J0Z3dYQUZCY1hKN2xPdi91M2NlUEdJU2twQ2V2WHIwZFNVaEoyNzk2TlljT0d1UmJtS1RlRElSTmFuZHRUK2R2VDA5TU9PUWxCTGFpNGYwMW94aVU1aWhTQVRjYm4xK1F5R2VRMFhSYUtPaFlSQ0lLd2EvMUlTRWpZUEc3Y3VNOEFoTGhPdzN1em9xSWl6SjgvSDZ0V3JVTGJ0cnlVMmFKRmk5Q3hZMGZNbURGRFVtcDMyZE5uRE1QY2s2ZDI0Znc1TEY3MEE3NzlibDZON3QrRkMrZXhkY3RtTkduU0ZCMDZkcEtlLysyM1g3RnA0NjhBUWFCdDIzYjRJSlp2b0toTVlQbk1tZE5JbVBzZHJJd1ZZYUZocWRldVg3L2c0SzFKWWFpSVA0NE51U1JGZ2lRZHZEV2hTa3JUZEpuSFpodUtpdUdvamRmR2pCOC92c1Jpc2Z6NnRKMXdhOWV1UlpNbVRhQlNxVkMzYmwzTW0yZC9BdTNac3dmTm1qV0RTcVZDZEhRMFpzK2ViUWRRUFh2MlJQUG16UUVBeWNuSktDa3BrVUFOQU5xMDRaVzJqeHc1NHJxNm4ySXJMQ3k0cDgvVmI5QVFFNy84cWtiM2JjSDhSQ3hkc2hqWHJsNUZVVkdSOVB4Ly85M0V4ZzBiOFAwUFM3QjAyUXFjT1pPTTQ4ZVBDWi9oQlpaWHJGeU45L3QvZ0JuVHBrcXBtR2xmVDhhRUx5Yml4eFdyNE9QcnQyUHZudDBXWjk0YVFOaFhSRVZ3STBsUXR1TlRBcWpKNUhMSVJkb2lzVHdxdkltaktJcGdHSVlqU1JJTXcwaDVOZ0RXVzdkdWJhcGJ0KzZJcCtWaysrbW5ueEFiRzR0dnZ2a0duVHQzeGw5Ly9ZWGh3NGREclZaandJQUJ1SHIxS3JwMTY0YWhRNGRpN2RxMTB1dTJ5a1U5ZS9aRWJpNnZQM3I3OW0zUU5HMG5xQ0dYeStIdDdZM1UxRlRYMWUyeWNwYWRuWTJwWDA5R1ZxWUJCRWxpOE9BaGFObnFCYVNtcG1MVWlPR3dXTXp3OFBERThoVmw5UFRqUHZzVWFXbjh3RkJlWGg3VUdnM1dybHNQZ0ZlRlNwZzdCL2tGK2ZEeTlNS1lzZU1ra1I0QVdQL0x6OWk0Y1lQMGZnQVlNUEJEMERTTjJiTm0yTzNiUDJmTzRQbm16YUZXcTJHMVd1SHA0WWt6cDA4ak9yb0Z6cHc1alpFalB3RmdMN0JzeU1pQVVxVkNXRmdkMGJNN1ZZRzNaaVVJTWI5R2NBREJFUUJIa0NSSGtTUklrdUtrU0ZNTVF3VnZUYUZRbGdHYlRhN05OaHkxbXgyTmlJaTRZTFZhTjVJaytjYlRjRko5ODgwMytPQ0RENlFjV0dSa0pHN2N1SUhKa3lkandJQUJXTGh3SVJvMGFJQlpzMmJ4ZDgvNjlaR1Nrb0kxYTlaSTMvSDIyMlZpRmNYRnhVNkxGUXFGb3B3c21jdGNCZ0EvcjF1RHhvMGJvOS83SCtEYXRXdFlNRDhCTFZ1OWdPRGdZUHl5WVNNdVg3NkVxVk1tMjMxbTJneitmTXpQejBQY3dGaEpmOE5zTm1QcWxLOHdaZXAwQkFZR1lzY2YyL0g5Z3ZtWTlQak83clFBQUNBQVNVUkJWR1haNTVzMGJWcU9lZmhPQXN1Wm1abVk5dlZrTUN3RG5aQW50QlZZL3ZQUG5aTEFja0ZCQVJRS0JjeG1NK1orOSsyV1pVc1haemw0YXJiZ0pvU2g0UGlIV0RTd1NaL0p5cncxV21qV1ZhbVVJT1Z5T1J5OE5qZ094Z3U5SWd3QUppOHY3NmtKUjgrZlA0OFhYbmpCN3JtWW1Cajg5OTkvTUJxTk9IMzZkRG14MnRhdFcxZjRmU3FWcXB4S0Q4QnJWVDRNZlVxWFBmb1czYUlsZHYrNUN5dCtYQTVUYVdtVkJWVllsc1dYa3lhaTJ5dXZvVVdMbGdCNGFjalUxRnVJSHpzRy9mdjF4Wm8xcTJESXlMRDdYTDE2OWZIRy8vVzhpMnZrSENhTUg0dUJjWVBRcnQzL3N3ZllDZ1NXOC9Qek1Xcmt4L0J3OXpqa3hGdXpMUnBJYkI2MnVUV0tzZ2xEWlJSa01ybU50NmFBU3FXR1RBUTJzV3RYREVjcGl1SUVIVUhiMlZIR3g4ZG5EOE13aHdpQ2FQMmtuMVFxbGNycENTUCtYeWFUbFZNNnIweVVOamc0R0tXbHBjakx5NE9IaHdjQXdHS3hJRHM3RzdWcXVXanZYT1lFMktKYklISCtRaHc3Zmd3clZ5d0hUZFA0Y3ZMWGQvemMwaVdMb0ZRcTBhZnZlOUp6Rm9zRkFRRUJkbUhyL1ppN3V6dEtTMHN4KzV2djRPYm1oak5uVHNOZE9LOUZnZVdPblRwTDNxSldxNFdibXhzSzh2TXhlY3Ewb3krLzFPWjZKZDZhMkx2R2xuVnBDR0VvajFHU1F5YVh5VURMNWFBVkNpaVZLcWcxYXBBMFRVTXU5SDVVRUpMYUZSRUFXSXVLaW41K0drNnFoZzBibGt2cUh6NThHSUdCZ1hCemM4Tnp6ejJINDhlUDI3M3UrTGV0UlVWRlFhVlM0Y0NCTXFIa2d3Y1BnaVJKdEdyVnluVVZ1NnljVFpzNkJjZU9IMFA3OWgwd0xuNENqaDQ5VXU1bTZtZ0hEeDdBL24zN0VELytjenNXNFlpSUNCUVVGT0N2L2Z1a2ZOdm1wTi90UG52NThpWDg5bHZWZ3JMbkdqZUcyV3lHUXFFQXd6QTRjdmdRbWpUbHRVd3JFbGdPQ0F5RXU0Y0g4bkp6ZDFma3JRR0VIWnNIUU5oNGJHVjVOY3JPVzFOQXFWQkNyVlpCcTlGQ0pnSmJSVVVFbTdZUGFSS2hmZnYydng0NWN1UkRnaUFlZTAwRWxtWHh4eDkvbEh1K2JkdTJpSStQUjgrZVBmSHNzOCtpYytmT09IandJT2JNbVlPSkUzbXg0S0ZEaDJMZXZIa1lPM1lzUHZqZ0F4dzllaFRmZi8rOVhWaTVidDA2NU9ibVl2RGd3ZEJvTklpTmpjWFFvVU9oMCtsQTB6VGk0dUxRdjM5L1NUSGJaUzZ6dFQ1OTNzUHMyVE93YnMxcXNDeUxVWjk4Q3BJazdZb0grZm41ZUt2bkcyajIvUE1ZTzI0OEV1ZDloOUxTVWd3Wi9LSDBQWWtMZm9CT3A4TzBHYlB3M2JmZjRJZUYzME90Vm1PVWc0NW84cWxUMkxoeEEzcjArTDg3N2x0b2FCaDY5UGcvRFBwd0FEaHdhTk9tclNRZVhwSEFza3dtdzdqNENlZGZlNlhyMlFxOE5RdEJpS0FtRkEwSThONGFSWUlpS1U0bVZVTGxVdDhhcmFDaFZDbWhGaVlQaUo0OWV5SS9QeCtGaFlVb0tpcENjWEV4U2twS1lES1pDSlBKQkJzOUJKTGpPQmtBT1FCbFVWSFJBSlZLOWZYamZOSWtKaVpXMkJ4Ny9mcDFoSVdGWWRteVpaZ3hZd1p1M0xpQnNMQXdEQjgrSEVPR0RKSGV0MlBIRG93YU5RcFhybHhCVkZRVVdyWnNpUTBiTmtpNm9qMTc5c1NOR3pkdzRzUUpLWjgyWXNRSXJGMjdGaVJKb21mUG5wZzNiOTREbjRCdzJhTmwrL2Z2UjNoa2c2Zml0eG9NaG0rZmoycDhCRHo5dDZocllBUlBCVjVDRUVRcEQzQ0VsVmVob2ppWlRDWXFVSEcyVEI0YXJSWTZuUTZlbnA3dzhmRkZVRkFRd3NMQ1FQVHUzUnQ1ZVhrb0tDaEFVVkVSaW9xS1VGSlNndExTVXBoTUpzSnNOc05xdFpJc3l4STJlZ2owNHNXTHZXSmpZLzhBRVA2MG5vd3BLU2tvTGk1R3k1WXRwZWNtVFpxRWJkdTI0ZGl4WXcvVTY3eHg4ei9rNU9TQVlSaVVsanlkSTFwS2xRb1VSY0hMMHh0aFliVWw4bFJueG5HY3NHYlpzRnByYnMyVUtoVmtNaG04dmJ3UkZoYjYxQU1ieDNIWFBoc3pldUxhTmF1TEFKU2dUTmZBQ0Y1YXJ3U0FXUUEyUnBEV1k0VndrMU1vRmZ4Y3FFb0Z0VVlEblZZTE4zZDNlSGw1dzkvZkQ4SEJJUWlQaUlCTXBWS2hwS1FFTkUzRGJEWkRMcGZEWXJFNFZraHRRMUlHQUROdzRNQ0MzcjE3LzZSVUtpYzlqZ3M4Yk5nd0pDWW0zczhCd3BVclY5QzNiMStzWHIwYVRaczJSVXBLQ3ViUG40LzRlTjd0dnBOS2txUHA5WHI0KzkvZDZMUEpaTWFaTTJkQXlXVFF1Ym03NVBlS2pNak55MFhXeVV3MGJkSVVOQzEzZXV4T25EZ0prcUtnMWRYOG1oVVZHWkdkazRQTXJFeEVDODNhRmRudEo3eWZNVGMzZC9QYU5hdE5OaUdvV1FReUFCWU9ZQWdIYlFQeFB4ekhnV001c0N3TGxtVjVKZytCemNOcXRjQmlzY0JpTnNOc012UEFwbFFxVVZKU1lwZHJrOGxrc0ZxdG9DZ0tETU9BNHppSk5wempPQVlBczNuejVwL2ZmUFBOOXdEVWZkd1dPQ0VoQVFrSkNmZjFIVDE2OUVCOGZEeEdqQmlCdExRMEJBY0g0OU5QUDhYSEgzOHNYVUExYmVuNmRGQXltVXN3V1RDTlJndU5Sb3NNZlJyUzB0TVFGbHJlUzdwKzR5WklpbnBnYTJhN1R6ZHYvb2ZRU21UNGFnVUhQOG5lMnZXbFM1ZWNkQUExbTl4YVdZdEhHYUVrQmJsTTFBM2xxNTZpdDZiVmF1SHU3ZzVQVHkvNCtma2hPRGdZZGNQRDBhalJzeUExR2cyVVNpVVVDZ1ZvbW9adE1VRW9Jb0NpS002bW4wMXMvYkQyNnRVcnQ2U2taT1hUZkNIRng4ZmordlhyTUpsTXVIcjFLc2FNR1ZOcENGVGRscDJWL2RRT1QxZG1XcDBic3JLeW5iNldrNVB6VU5aTXEzTkRWbmJXVTN0TXNyT3preFl2V2xnSys0S0JDRzRTazRkdGl3Y2ZpcEtnWkJSSFVRN051TUtVZ1ZxdGtrRE8yOHNiTXBrTXBGYXJoVnF0aGxLcHhMMjBmcXhidDI0dHgzRXVodDJIY2dlODkrSHBwOEZ6WTFuRzZXc1BhODAwR2kwWUsvT1VucXZjeFc5bXp6cmhCTlRFZkZvNXdSWmU2WjEwbUFmbFI2ZmtBcWlwVkVwb05CcTR1Ym5CdzlNVHZuNitBQUNaVHFlVEtxSkN3Y0F1MXlhVHlUaXIxVW93RE9PMFlUYzJOamIvcmJmZVdxSFJhS1kvNFFjR2VyMGVCb01CVm9hQnNiQjYyRTIxV2gxa2NobjhmSDN2V3RxUElJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTS1NNMEhNVHdhdTVOM2JoaU04d0EySkFoZmxXeTIvb3lBL0h6ZXVYMFZSa2JGU0lBK3JFdzQzZDNka1pHUWtyZnBwUllXNU5UaHB5Q1ZKa3VQNzFtU2NURWJ4b0NhVGc2YkxkQTU0alFNZDc2MTUrMENoNExzTFpCNGVIaWdvS0lEUmFKU3FvV2F6V1FJM3E5VUttVXdHaG1IRXBKM1UweWJrMnF4dnZmWFdtaTFidHJ4QkVFU0xKeFhVa3BPVEFZS0VScXZqMlUyclVkdTRxTWlJZEgwRzB0UFRxMTBKZnRmT0hWaStiQ2tNaGd3RUJRVmg1YXExdUh6NUVtTDc5NVBlTXpaK0FycDI3ZVpDd2tmWkVwT0JxM24zL3ZrcmVTRG1KNE5iMHJGYWR1ZjZ0U3NvTGk2NjQzbDk0L3BWUE51NDZZbDNlcjJaN0FUVW5IcHJrSmh5YllmYzVaREw1SkRUZkRPdVFxR0FVcVdDUnNOUE0zaDY4WGsyMFdTZW5wN0l5OHREWVdHaGJROGJhSnJtcXd3T1hwc042NGVrMXJ4OSszWnpRVUhCais3dTdrOGtzT24xZW9BZzRlZGZNMkxKWW5MWm9FOURlbnA2dFlreXA2V2xZY2IwcWZoeTh0ZUlqbTZCZ2dLZUdpY2lJaEs3ZHU4REFBeU1mYi9HMW0zWjBpVjR2WHNQT3pZVGNiL216dmtHS1NuL2dLWnB0Ty9RQ1lNL0dpSU5YNmVtcGlKaDdoeWtuRTJCUXFGQXg0NmQ4R0hjNEhMRDJkVnBkOXJtaXpFdlFDNlhneUJJaElXRm9YL3NBTFJ1SGZQQXprSGlma0ROQnR5cXkrNEVhcmJnOXQvTm0xdXZYTGxzdllPM3hwVFByVkdRVVJRbmpVN0o1VHdkT0UyWGVXczZMZHc5UE9EdDdXTTNBa242K1BqQXc4TURPcDBPYXJVYUtwVUtDb1ZDeXJVNXk3YzV5N1Y1ZUhoc1psbDIyNU1JYkFaREpqUmFYYzNuWUhSdU1CZ00xZlo5Ri8rOUFCOGZIN1J1SFFPYXBpV2VPSUlnb0ZEd2Q3MjdiVW01Ry90eCtWTGs1SlJQNEUrYU9BRzFnb1B4Mis5YnNHanhNaHc5Y2hoSlNac0E4RDE1WThlTVJyMzZEYkRwOXkxSVNGaUEvZnYyNHJlTk5jZTlVTlZ0Smk1WWlNMWJ0Nk4vN0FETW5qa2RHMy9kNFBJazcyQldxM1ZYbTVnWExqangxQ3IwMWtnN2I2ME0xT1RDUEtoQ3FZUkt4Y3ZzdWJ1NXc4dlRDLzQyM2hvQWtINStmdkR5OG9LYm14dTBXaTNFOWcreFNtb0RiSndOaGJqZGlCWDRhWHlMd1dENDhZazhPSXoxZ1NTYk5Sb3RyRmJyZlgvUDZkUEo2UDVhTjh5YU9SMTZ2UjdkWCt1RzdxOTF3NG9mbDFmNU80NGVPWXcrNzc2TjlpKzNSV3ovZmpoMzlxemQ2L3YzN1VXLzkzcWphK2NPNlA5K1h4dzljbGg2YmRqUWo5RDlOVDYwSGZueGNIUi9yUnVHZmpSSUFwRzJiZHZodlg3dlE2RlF3TS9mSDgyam8zSHA0a1VBZk1YUzA4c0x2ZnYwQVUzVENBNEpRZXVZTnZqMzM1cXJUOTNOTmxVcUZWcTNqc0c0K0FsWXZHaWhIZkhpazJCRlJVVkkrbjBUeG80WlhUMGg2L1hyTzJFL0Uyb0hiQnpIV1RtT1l6aU9ZMW1XNVFoQTh0WktTb3E1VElNQnFiZHVvYUNnb0l5OVE2bUNScU9HUXFIQWd2bUpPSGp3TDZqVWFudGdDd29LZ28rUER6dzlQYUhUNmVEWS9sRkpsYlNjMXhZWUdIallZckVzZWRLQXJib0tCVlhhbHRGNDM5L1J0R2tVTmlWdHhjY2pScUZXcldCc1N0cUtUVWxiMGUvOS9sWDYvTlVyVi9ENWhIZ01IaklVVzdmdnhKdHY5Y0tva2NNbGlwdWJOMjlneXVRdjhkbG44ZGl5YlFkZWZmVjFqQjgvVGhLbFNVaGNnRTFKV3dFQWMrYk93NmFrclVoY3NKQS80VWdTdmZ2MGhZZUhwM0RpWDhQaFE0ZlFzaVZQQXVEajQ0T0V4QVZRS2xVU0VKNU9Ua2JqeGsxcWJNM3ZaWnZSTFZyQ2JMRklnUHc0bWVNUXZmaDNWbFlXQnNiMng1VXJsNnZsUmxKYVdycG0vUGp4dHh4QXplVG9yZkZqVXp5ZU1Bd0RrcVRBc2d3c0Zncy9TUkFlanN5c1RMQWNCNlZDQ1pYUTNuSHMyRkVvbFVxNHVibVgyemFwVXFrUUVCQUFiMjl2dUx1N3c3Yjlvekt2elZsZkcwRVFsblBuenEwRWNOdmxoRCsrdG1WTEV0cSsxQTZ0VzhkQW9WQ2djNWV1YU5Dd0lYYnUzQUVBOFBiMndiTGxLL0ZNbzBZZ1NSS3Z2dlk2TEdZemJ0MzZyOHJiT0hmMkxEcTJiNGQrZlh1alFjT0dlTEh0UzA3ZnQvRDcrVkNwMWVqYTdaVUg5dnVyc2syQ0lPRGw2UVZqa2ZIUk9YQUVvUDBnQ202ai93ZENLWVBxdGZwd0c5Y0doSnZDN20yalI0M0E2ZVJUQUhqRzNPOFh6QWNBZUhoNDRLZlZhOUh2L1ErcVkyOXVIenQyN0s4S1BEWGIzalVXNEhOckZFVnhITWR4RkVXQlpWbE9vVkFJdyswcWVIdDV3V2dzaEVvb0dPVGw1Y0ZzTXVIRkYxK0VYRjUrdW9RRWdLQ2dJUGo2K3NMVDB4TnVibTdRYURSUXE5VlNIc1laQTBoRnViYW9xS2lyeGNYRlB6enBGMy9YemgxUVdQaGtDdHJxOVhvRUJ0cDM1ZGV1SFFhOVBoMEFvTlZxY2ZMa0NjUjlHSXZlNy9UQysrLzFjZW9KVkdhTm5uMFdPLy9jaTUvWGIwUjZlanFXTFMzdjZLOWM4U1ArL3Zzb3BrNmREcGxNOWtCK2UxVzN5WEVjY25Kem9IMkVlZ2lWSFNOQXFPUmdjMHJndmZRMXFOOW9pTkkvcjhMOVUzdnF4Q0ZEaDJQcTExT1FtREFQMjdkdFJkLzMrQXE1ZUcxWGgrWGw1ZjJTbUppWTYrQ3BtWnpuMWppdVRNb1lrTWtvS0pSS21NMW1VQ1NQTmNYRnhTQUlRbkM2RkRoODZCQUdESWlEenMxNW83VU00S2wvQXdJQ2tKT1RVMkhyaDhWaUVXYXlySnpBOXNHeExBdUNJRmlPNHdqYlhGdWJObTFXSGo5K3ZCMUprdTFjL3MvalovNysvdENucDl2ZmZtK25JaXFLYjBVNThOZCtyRjcxRStaOE53L0JJYnhvMllzeEx6ajFhaHpCemxSYWl1M2J0NkZMbDY1UUtKVUlEQXhFKy9ZZGNQRGdBYnYzYlZqL0MzYnQzSUc1Q2ZQaDV1NytRSDczM1d6eitQRmpvT1Z5MUt0Zi80RWZIMFhyRUxqSHZ5ajliZmszRTdtZjdJUzhuamRLdGwyRzlYb3VkTU5iSW5ma0RwaVBwMEg3Z1gwTFVYaEVCRHAyNm95Vks1Wmo1cXh2NE9aMjcxTVljcmtjN2RyWlgrWTdkdXc0TUhyMDZPTlY4TllZQVQ5WXE5WEtDWkVnS0ptTVV5cVVJQWtDTjI1Y2w0WUhlRFlQRFU2ZlRzWkw3VjVHdlFZTjhPL0ZDeFVER3dDRWhJUWdLeXZMYWV1SENHd2l1REVNSXoyRUdWSVdBQ0gydFNVbko1c05Cc09TZ0lDQXB4TFlmdDJ3bnEveWNSemF2ZnovOEg3L1dBQjhtOE5Yazc1QVlXRWhta1pGNGREQkExSXU2a0diYlpHQ1kxbFlyVlpwd3FUYks2OWl5T0E0ZE9qVUNjMmFQWSsvL3RxUGMyZFQ4Tm5ZY1FCNGdSR0NBRWlLUW41K0hyWnUyU0o4ai8xc2JHQlFFSTRlT1lLNmRjT1JsNXNMWHo4LzBBb0ZmbHE1QXZuNWVYaTNkMThVRlJseDRNQmZhTktrTEorMVpYTVNOdjIyRVhNVDVqOHducnFxYnROa011RjA4aW5NbURFTmNZTStlaWlVN3FaRHQyRG90cnI4TWIyZUM3cUpQK1RQK2NGNk13K3FWK3ZCY2prYmNEZ3VPM2Y4Z1gxNzkyREsxOVB3emV4WitIcmFkTlNyZDI4QWJiRllzSE9udlpiNnRXdlh0aFlVRkRoT0Y0Z2VXem1HWElxaVFGSVV3SEZTMzZ4Y0xrZEFZQ0EwR2cxMFdoMysrZWNNL1AwRFFOTUtYTDF5QllVRmhiajQ3d1hrNUdTREpFbkk1WEwwZXZ1ZDhzQW1ocVM1dWJuSXo4K0gwV2hFY1hFeFRDYVRIYmpaZW0wTXczQWN4MEY0U05NSUFDeUJnWUVIVENiVGZKcW1oenhOb0paODZoUzJiRW5Dd2grV2dLSW9mREpxQkVKRHc5RHU1ZitIdVhPK1Fmc09IZEh6emJkdzdPK2pPT1RncFR3b2MyelFuVEY5S21aTW40b09IVHZoOHk4bUlUS3lIaVorT1JuZkwwaUVQajBkdFVORE1YUDJ0NUthVVpldTNYRDJiQXBpKzc4SGlwTGg5ZTQ5RUJsWkR6bTVPWGJiR1RWcU5HYlBtb25seTVhZ2R1M2FXTEpzQldpYXhveVpzNUdZTUJjL3Ixc0x1VnlPdGkrMWsvSTZETU5nMWt3K0RIeW5sejMzL3NwVmF4QVFVUDI5aEZYZDVyQWhINEVnZUlMRlQwYVBlYUI5YkZXeGt1Mlg0ZmJKLzBENXFKSFZleU0wYno0RDk4OWlrRC9qb04zN1VsSlM4TzJjdWZEejk0ZWJ1enRPbmpoK3o4QldiaDlLU240Y04yN2NEUUc4ekk0RkExUXdaUUNBczFnczBHaTFuTnhHdzBBdXA1R1duZ2FaVElZNmRlckN6ODhQMDJmT1JvUDZEZURqNjR1RjM4K0hWcXV6QTdWeXdPYnY3NC9zN0d6azVlVkp3Q2FPV1lrZW00M1g1aGlTMmswakVBUmgzck5uei9KT25UcjlqeUNJcUtjRjJJNGRPNG9PSFRwSnpZS3Z2UElxamgzN0crMWUvbjlJU2ZrSEV3VkZvUENJeUJyZmwwNmR1NkJUNXk3bG5vK01ySWUvRGxhdVk5cTZkVXlGRjY1Q29jQ0V6eWZhUFRmd3c3aHk3MnZSc2hWKzJiQ3gzUE1Sa1pINGJwNXp5aWlLb3JEL3dPRUhlc3lxc3MwN3JkZjltazVYRFgyU0RJZUNtWWVrUDQzTFR3UExUNWQ3MnljMnJMbE5tMGFoYWRQcXVUdzVqanZ6eHg5L09CWU1iSE5yWmltM1JoQ3NRUG5OV2ExV0RnQ1VTaVduMCtta1dkQ2lvbUpjdW5nUi92NEI2TkN4RTgva0lVd1krUGhXUGhwV0xqdGFxMWF0Y3JrMjBXTno4TnFrY0pSbFdWdlZlSWJqT0JLQXRVdVhMdnJzN093ZnZMeThGajVOWHB0dHo2dkFZeWNsbkd1eUlkWmxqNjlSRklXaUl1TWpRV2pnN2UxOVR5bVN0TFMwald2WHJqVTZBVFdUSGFqeG5Hc3NRWUFqU1pLbjlwYnpQV3JpMkpTQ3B1SHQ1WVg2OWVzTHRFUys4UER3Z0krUGo5MWt6cURCemdQQ2N2dzY3dTd1Y05iYlZrSGpMaWZTRzFYVXRPdnQ3YjNkWXJFc2ZscE8wT2JOVzJEWHpwMG9LU21CeFdMQnRxMWIwRUxvMFdyYU5BcmJ0L0Vuek9WTDFkUC9wRktwWGFod2wydnpNTmVzb20zNytmbWgyRmh4bFowTDk3aC9qNm9hdmtNMHRkbyt0MWhhV3JwNjVNaVJGMjFDVUpPRHQyWlhNQ0FJZ2lPRVpuOFpyempGeWVVeVlSYVVsbVpCK1NGM2dTWFgyeHYrL2dHU2R1bGRlV3dBWDBnUXZUWmJxbkJIcjgyMmlDQjZiU3hmQm1PRVNpbEpFQVIxNk5DaFpXM2J0bjJlSUlobVQ5S0ZNK0NEZmlBRTdqVmZYejhrSkM3QTg4MmJvMVBuTGhqMElWOHdhUFBpUzJqWDdtVUF3UEFSby9EbHhNL3g2NGIxQ0krSTRCT21UOUNkL2xHeUltTmhoYTBMNUVOYXN5SmpJYWdLV2tnQ0F3T1JucDZPekl4MHFBV2lCVHNiR2dVdU1mbWVaMGE1Y0E5Z2FQVmxoT3JValpBRzRUbU9PNzFuejU2OVR2SnF0dTBkamtVRGZuUktISnVTeXlDWEM1NGJMWTVObFEyNWUzbDZ3Yy9YcjhveWxVNVhXUzZYSXpnNDJLNklZRXRwSklhaWp1MGZUZ29KVmdDV2R1M2FwV1ptWmk3MDhmRlo5RGhlSkZvbitZOXRmK3lxOFAyOTNuNm5YRElUQVBMeWNqRno5cmR3YzNQRG5qMjdVVkpTVXFWdDNTbHN5TTdKY1FHYmd4bU5oZkR4OVhINm1vK1BON0t6SC95YUdZMkY1UWdCYksxWnMyWXdHQXpRNi9Vb0tzeTM3NVBVQWhoYkcwRHQrOWlEYk9CeWR2VmRGMW9OdEZvTmJ0Njh1ZkhISDM4c3FDZ0VoWU95TzUrVkVaVHZPQTRjeTNJY3k0SmxHVENNbFg5WUxiQmF6TENZUzJFeGw4SlVXZ3hUYVJGdVhyOXk3OEFHQUFFQkFjak56Ylh6MnB6bDJtdzlOb2RDZ3VpMVdRaUNJSDE5ZlhlV2xwYk9WU2dVSHo5dUY0bXNtdTd3cFNXbEdETjZGSy84cnRWSzdSTzJkM1JuWGRTVldXaG9iV1JtR3BDaFQ0Tlc1K2JTUERBV3dtZ3NCR08xSXJTMmN4QUlDdzJGd2ZEZzFremNKNVpoRUJaYU9URDUrZm5aMGU4ODZwYWZuNy9rcFpkZXVsU1J0MFlRaEFoc0RFRVFqTWpjSWFwTzBUUU5sVW9sZUdkbGROOWVYbDd3OVMxVG5XclFvQUVhTm14WTlXdTJzaGRyMTY1ZFlWK2JvOWZHc2l6aFVFZ29WeVZkdFdyVjB2NzkremNpU2JMOTQzU3grUG41SVYyZmNkOFhRRlN6WmxpNHFPSlIycUlpSXdJRDdrN01oU0FJTkcvZUhOZHYzRVJPVGpieWNuSlFXdnAwa2srcVZHcVFGQVVmYngrRWhvWlUrdDRXMGRHNGVmTS9aR1psMWVpYXFWUnFVREladkwyOTd3aHFqNXRacmRaOUV5ZE9QT0FBYXFVaXNBbWdacDlYRTdRTVJDVjN1VnpPeWVWbHhKRzJBT2ZoNFFGdmIyOEVCQVNnZHUyN1d6dmlUb0lqdDI3ZHd2bno1M0h0MmpXa3BxYkNZREFnSnlkSEFqeEhMVklCOUFpV1pRbVdaU21PNHlqd1dxUTB4M0hLR3pkdXRBb05EWjBMNExGU0h6bDFLaGtFUVVDajFVRmR6WGY0NGlJampJVUZBTGhxSjVwMG1jdHF5TklQSFRvME95WW01cFlBWkNYZ05VS0xZSzhQYWl1bHg5aDZhd3FGZ3BQMFFUVzgwTEdIaHdlOHZHekVXZXJXeFRQUFBJT1FrSkM3aTdMdTlJYVFrQkJKVU5reDErYlkraUhLWW5HODJVNGtXSG5uZ2lERHdzS09GeFFVSk9wMHVxbVAwMUZzMWl3SzZlbnBNQmd5VVZpUVZ5MHNIQURmdnlTVHlSQVVGSWlBZ0FEWDVlS3l4OEp1Mzc2OUtpWW1KbFVJTThYUXM5UkpDR29WdkRWcDBGMGlqUlJDVVZ1YWIxRy9RQXhGYTlXcWRkZWdWaVZnNC9NNG9VNXpiVTU2MnNSQ2dtTnZtemh1WlNFSWduSnpjL3ZaWkRMVnBXbDZ3T04wTUFNREE2dU4zZFpsTG50Y3pXZzByZzRPRGo0Ris5WU94eERVWWhPQ3NzNUMwSXBBalZkMTkwRlFVQkJDUTBQdmFSK3JwQk9uMCtrUUVoSmlSMjlreTdnckRxa0svVzEydlcyQzF5YjF0b2tMc1d2WHJpVXN5KzV4blNZdWM5bGpsVmZidjNEaHdqMXdYZ0dWUERZNHpJTUs1SkdjTGFqUkFzVzNHSTdxZEtJb0M1OVhDd2tKdWVlSkRObk5temVyam9JOFZaSFQ3bm54T2ZGMTRTRW04RmloQTU4UXdlMlZWMTVKTzNEZ3dQY2hJU0doQU1KZHA0ekxYUFpvRzhkeDEwNmNPSkgwNmFlZkZqb0pRY3VCbWlDQWJDZW5aNHNmRmVFSUwrUkNnbVZaM0EwKzJRSGIzYmg2dnI2K1RpY1JiQVNXWVVNZlRwaE1KaEFFQVVHNlQyb0JJZmhmUkxacDArWkVUazVPZ3FlbjUreXFoc1V1YzVuTEhvNnpkdTNhdFRWdnZ2bG1xb08zNWl3RXRkcTJkb2pocDhEdktCVU10RnF0WGVncFZqOGpJeVBSdUhGanFOWDNQaUZ5VjJDaVZxc1JHaHBhYm9hMGd2bFJqbVZaUWl3a2NCekhDZ1VGMjZrRTBzdkxhM054Y1hHUVNxVWE0enAzWE9heVI5T3lzN01YaDRlSG43WHgxRXB0SHdSQm1HeEJ6VEVFRlNRR3l1WFZiTUhOVjlEV0RRME52UzlRdTJ0Z0EvZ0Vla1Y4YmM3R3JNVEdYUUhjT0dFcVFjeTNrUURJVnExYUxUbHg0b1MvWEM3djV6cUZYUFlVaDNyUTYvWEl5RENBWVJnWWpZOEdRM05wYWVuUDc3NzdybTIvV3JrUWxPTTRDZFE0am1NRlJseU9aVm1PWVJnN3ZqOHhzaE1mWXBWVW9WQkFyVlpETHBmajBxVkxEeGJZQUNBOFBOenBxSldUYVFSTzZHY1RSNjNFV1ZMYkZoRGluMy8rSWZmczJiTzRmZnYyZmhSRmRYR2Q0aTU3R2tFdE9Ua1pIQWhwR3NML0VkZ3ZpOFh5NTA4clYrekt5Y214T0FFMTJ3a0RmbXlLSUZnQ1lQbDBGSy9lTGpCM2NFb2xMOFNpMFdqNW5qVjNEM2g1ZThIZlB3QzFnb01SWGpkYzB0RzRYN3VuYjZBb0NuWHIxa1Z3Y0REOC9mM2g1ZVZsVnlsVktwVzIrVGRPWkFLeFZiWVMzRlVyK0JZUWMrZk9uVk12WGJxMGtPTzRZNC96Q2JwcDB5WW9sY3FLRXhWV0swYU1HQUUvUHorNHU3c2pMaTVPVW5keTJkTnJlcjBlSEFqNEJ3UTlNbU54TE11ZVBIVHdZTkxFTHlZVU9PVFVTb1JIcVIyb1NYUkVKRmUrQ2xwK3VrRG5wb09IaDZkRVJWUTdOTFJhUU8yZWdRM2dGVzNDd3NJUUZCUUVSMjFTSnlwWG9wcXpYUXVJQTdpWm5ubm1tWlMwdExRRkhNZGRlVkpQNEhIanhpRXBLUW5yMTY5SFVsSVNkdS9laldIRGhybXU3S2ZjRElaTWFIVnVqOHorY0J4MzlkeTVjK3Y3OW5rbnd3SFViQ3VnSmp0UUUzcldTRkthQjRWY0p1Zmt0Q2gwcklCS1pUOWw0T1BqQS8rQUFJU0UxTDR2N1lWcUF6WUFDQTRPUm1ob0tBSURBeVgrdGtyQURiYjliUUovbTBRbExqeE13Y0hCQjNKeWNoSUFaRDVwSjI5UlVSSG16NStQMmJObm8yM2J0bWpidGkwV0xWcUVGU3RXSUNzcnkzVjFQOFhHTU13OWVXb1h6cC9EcUJIRHEzdDNzbTdldkxtNmErY08xMkUvMkc0SGJBUkJXRGlPczRpQ3h4ekhDUnhyRkVlUUpJcUtqTWpOelVHbXdRQUN2TmkwUnEyRzJXVENnYi8rd3BZdG0vSG5ycDN3OXZhdTlzYjMrL2I3NnRXcmg5cTFhMHZnNXVIaFlTZmhad051WWtncTlzT3h6a0pTQUNZZkg1OXQrZm41M3drTFdLUFdxbFVyVEpreUJTKy8vRExVYWpVaUlpTHd4eDkvWU83Y3VRZ09Eb2E3dXpzR0RCZ2dxUzJOR0RFQ25UdDN0dnVPN3QyN1k5Q2dRVTYvdjJmUG5tamV2RGtBSURrNUdTVWxKV2pidHEzMGVwczJiUUFBUjQ0Y2NWM2RUN0VWRmhiYzArZnFOMmlJaVY5K1ZaMjdVcXJYcHk5djA3clZlWlMxZFpUYWhKNjh0MmJYMmtFeUpFbXhITWV4NERqSVpCVE1KaE5VS2pVWEVsSWIvZ0VCU0U5UGgxcXRnVnFqUVVyS1AzamwxVmN4ZXZRWVJFUkU0dkNoUTlXK252ZmRPMFlRQkNJaUlwd3FXam1yam9vdElBQUlBRTZMQ1J6SGtSNGVIdXVOUnFOR285SEUxL1JKTlgzNmRHemV2Qmt4TVRFWU5HZ1FldlRvZ2U3ZHUrUENoUXM0Zi80ODJyVnJoNjVkdStLTk45NjQ2Ky91MmJNbmNuTnpBUUMzYjk4R1RkTjJuRnh5dVJ6ZTN0NUlUVTExWGQwdUsyZloyZG1ZK3ZWa1pHVWFRSkFrQmc4ZWdwYXRYa0JxYWlwR2pSZ09pOFVNRHc5UExGL3hVMW02NDdOUGtaYkdhNWJuNWVWQnJkRmc3YnIxQUlDclY2OGlZZTRjNUJma3c4dlRDMlBHanBORWVnQmcrYktsaTcvNGZQd3BCMUFydFFFM3ZsZ0FXSVJybGlVSXNBUkpjQVJIZ09NNFRpYVRnV1ZaenQzREhRcUZBZ1JCUUorZURyVktEWXFpb0ZhclViOUJRd1RWcW9XaUlpTU9IVHo0TXJuRXdBQUFJQUJKUkVGVTZBRWJ3STljaFllSGx5T2pGTXU4VGdia2JmdmJJSVNrNG1TQ0NHNkVWcXRkV1Z4Y3JGS3BWQ05yOHVUcDBhT0hwSTM0eGh0dllObXlaWmc2ZFNwME9oMWF0bXlKWjU5OUZ1Zk9uYnNuWUh2NzdiZWxmeGNYRnpzdExDZ1VDcGhNSnRkVjdMSnk5dk82TldqY3VESDZ2ZjhCcmwyN2hnWHpFOUN5MVFzSURnN0dMeHMyNHZMbFM1ZzZaYkxkWjZiTm1BVUF5TS9QUTl6QVdJd2NOUm9BWURhYk1YWEtWNWd5ZFRvQ0F3T3g0NC90K0g3QmZFd1NCSWJ5OC9OKytPTHo4WWVkaEo0bGQ4aXJjU3pEaUZSbGtNdHBVWndGUlVWRk1BcHN4a29WSDcxcHRGcjQrdnBpKzdhdHlNL1BSMTVlM3FNSmJBQ3ZjR1ZMSVc3YnRHdmpzZG4ydFVuZ3hwYXA2aklDMEVuZzl0WmJieTFadjM0OXJWUXFhMHpHejNiNlFxRlFTUGxEMFdpYXJoYmdVYWxVTUp2TjVaNDNtVXdQUlovU1pZKytSYmRvaVlTNWN3QVFhTkdpSldaL002ZEtuMk5aRmw5T21vaHVyN3lHRmkxYUFnQ3VYNytHMU5SYmlCL0w5OEt6SEF1Tm9GMVFXRmk0N0oxZWIrMUgrYWtDK3hEVVJrSlBGRHRtR0lhVHkrVWM3NXlBbzJtZUxEWFRZSUJHbzBWMGRBdjgvZmRSdUx0N1FLVlVnbVZaclBoeE9YcjFlaHNObjNrRzQ4ZU5mWFNCRFFEQ3dzTHN0QkVjcHhGc2lDaGg0NjF4QXZpSmt3a1FtdjFBRUFTeFpjc1dZdHEwYVV2aTQrTmxDb1VpcmlaT0hwa1RIdnFLMUtTY1BXK3hXS3EwbmVEZ1lKU1dsaUl2THc4ZUhoN1NaN096czZ2TTVlNnlwd3pZb2xzZ2NmNUNIRHQrREN0WExBZE4wL2h5OHRkMy9OelNKWXVnVkNyUnArOTdkdWRwUUVDQVhkZ0tBRWFqY2NXRStIRjdVMUwrY2V4VGN3UTFPelpjb2RtZW94VUtqcGJMWWJaWVFKRWthSVVDRkVYQjE5Y1hkZXJVaGJ1N0J3aUNRR0JRSUhSYUhSaXJGUk0rbjRqdzhIQmN2UGl2ZEMwOHNzQUdBUFhyMXkrblJlb1lqanA0YlNLOUVXeHlib3lRZ3lNSWdpQysrdXFyUEY5ZjN5VURCdzRrRlFyRndJZDVvdEUwWGM1MXZuVHBVcFU0bzZLaW9xQlNxWERnd0FHOCt1cXJBSUNEQncrQ0pFbTBhdFhLZFJXN3JKeE5tem9GMFMxYW9uMzdEbWdSM1FKdjl1d0JsbVVyN2ZjNmVQQUE5dS9iaDRXTGx0amRpQ01pSWxCUVVJQy85dS9EaTIxZnd0V3JWM0hxNUltZnpwNDl1MmZqeGcwbE5wNWFpY1BEUkJDRVdjaXAyYkhoTWl6THlTZ1paREk1U2twS09IY3ZieWlWU3VoMGJsQW8rUCtYbWtyNUp0eGF3UWdMRFVOQVlDQVVOTTN2NjRFRGFOSzA2YU1QYkFSQm9INzkraEt3T1hwc0RNUFllbXkyNEFaaEZBTkN2czN1TzRjTkc1Wk4wL1NTZnYzNjRXR0NXOHVXTFRGNzltd3NXN1lNelpzM3g2SkZpNUNlbmw3aCs5ZXRXNGZjM0Z3TUhqd1lHbzBHc2JHeEdEcDBLSFE2SFdpYVJseGNIUHIzN3c4dkx5L1hWZXl5Y3RhbnozdVlQWHNHMXExWkRaWmxNZXFUVDBHU3BGM3hJRDgvSDIvMWZBUE5ubjhlWThlTlIrSzg3MUJhV29vaGd6K1V2aWR4d1EvUTZYU1lObU1XdnZ2MkcveXc4SHZRTlAyVGg2Zm5ueHZXLzFJRSswS0JiUU91eVhFT1ZPcFhveWdRRElPU2ttS1VscFp3YXJVYW5sNWVVS2xVcUZlL1BtN2V1SUdqUnc5RHA5T2gxOXZ2SWlRNEJQWHExMGY4K004eGVmSWtXTXdXaElTRVlNelkrRWNmMk1SY1VyMTY5ZXdxcExhNU5pR3ZWcTZZQVB0S3FTMjRFUVJCRUhGeGNaa21rMm5Sd0lFRFdhVlNHZmN3VHJUWFgzOGRJMGVPeE9qUm84R3lMUHIxNjRjQkF3YWd0TlI1WjhxR0RSdHc0OFlOREI0OEdBQXdlL1pzV0sxV2RPL2VIU1JKb21mUG5wZzdkNjdyQ25hWlV3dXBYUnR6NTgxM210YjRaY05HNXpmVFgzNnQ4UHNhTkdpSWhZdVd3R2cwcnBnMWM4YWVaVXNYVndScWtxY21naHBKa2d4UVJob3BveWhPcmxTQ3BoVWMzM3dyaUxLb05YQnpkMGRrWkNUOC9Qd1FGRlFMWVhYcW9HNTRPSlJLSlo1N3JqRitXTFMwUnRmdGpwb0g5Mk1aR1JrNGQrNGNybHk1Z3RUVVZPajFlbVJuWjVmVFN4QkNWMElBUUVKZzRTVTRqaU50TkJQa0hNY3BBQ2duVEpqZ0hoOGZINnRTcVlhNFRuMCtVWHpqNW4vSXlja0J3ekFvTFhrNlI3U1VLaFVvaW9LWHB6ZkN3bXBYR3E1eEhDZXNXVGFzMXBwYk02VktCWmxNQm04dmI0U0ZWVXdSdG4vL2ZvUkhObmdnNjFSWVdMaHNRdnk0dlRiaHB6TlFzMlhzc0lpTUhXSnpQVVhKT0lIZW13YzFwYjI0c2Fkbm1jcFVhRmdZNnRkdkFGOWYzd2QyTHRRb0I1cS92Mys1NFhnbkZWTFk1Tm1rU3Fsd3dkcjJ1SW1GQlV5Wk1nVW5UNTc4WWNPR0RXYTFXbjNQclNBZE9uVEFuMy8rK2NoY21IcTlIdjcrZHpmNmJES1pjZWJNR1ZBeUdYUnU3aTc1dlNJamN2TnlrWFV5RTAyYk5JVllvWE1FdFJNblRvS2tLR2gxTmI5bVJVVkdaT2ZrSURNckU5RkNzM1pGZHJ1Ryt4a0xDZ3ArR0RwazhQNUxseTZhS3dNMWxGVkFKVDFRZ1RoV1VKb2lJSXhPU2F3ZEpDVlFmMU1VNURJWnhQbFF0VklGczhsVTQ3L3RnUUVid0l2QmlPQldXWFZVckpBS3ZXeWMxV29Wd1kyeERVdEZjTnUrZlRzMEdzM1N3c0xDVXExV094S0E4bTczYmRldVhZLzloWnl1VHdjbGs4RS9JQWd1QXpRYUxUUWFMVEwwYVVoTFQwT1lFeUxWNnpkdWdxU29CN1ptdHZ0MDgrWi9DSzFFaHErV1RadFJOVnRwZG5iMjRsWXRteDlHZWZiYmlqdzFLd2lDSVFDR0VEdzFHVVZ4TXBuZ3FZbEQ3V28xdEJvTmRIYWtrWUdvWFRzVWtaR1JDQTBMZStEbndRTmhyUTBQRDY5SVlGa0NPSnU3cVpScnMxcXQ0bXRPd1EwQWREcmRxdHpjM0dJUEQ0L2hBSHlmdGdzNU95c2JXamQzRjZJNW1GYm5ocXlzYktmQWxwT1RBOTFEV0RPdHpnMVoyVm1WQWxzTldaWmVuNzQ4K3Ztb1U3Q2YvWFQwMHV4QkRRS29FU1JIRWlSSGtRSmJCMjFER0NuTWYyb0Z2UUkrQlBWRHJWcDhYdTFoZ05vREF6WSthZG5BS2JBNWVtMmk1eWFDRzhBUENGY0NicHlucCtmR2pJeU1JbDlmMzQ4SWdvaDRXaTVlanJ2MzRlbW53WFBMejh0eCt0ckRXak9OUm92ODNKeDcraXlSbkFsaWZqSnc1ZTY2OURsd1YyK2FzbGEzL20veStUdDRhcVp5b0VZSW9FWVNBZ3V1REhJNXpTbG9rYWxEQURXSkJkY0xiam9kTE9aUzVPVm1Jek5EZzh5TU5LZnJFRlluSEc3dTdvOC9zQUZBbzBhTnlvRmJCY0FtZ1p1WWNLc0kzTVMvL2YzOS83aCsvWHBCN2RxMTQwaVNqSzUrRU9IWlRRMEdBNndNQTJOaDliQ2JhclU2eU9ReStBbTB5SGQxc2hOQVNZbUx5NjBpSzZtQTUrNWhGbGZ1K1hnbEpnTlg3dzdVV0hBbno1WGNXdDg1ZGZaMWxKLzl0Ry9wc011cGxRYzFtUUJxdElMMzFCeUxCYUxJc2RWaWdvZUhSNlhLN1VWRlJ0eTRmaFdObXpaN01vQ05JQWcwYXRTb1FxL05HWmpZZUhCT3dVMzRYbzdqT0s1T25UcUhrNU9UODU1Nzdya0JGRVYxcms1UVMwNU9CZ2dTR3EyT1p6ZXRSbTNqb2lJajB2VVpTRTlQcjNZbCtGMDdkMkQ1c3FVd0dESVFGQlNFbGF2VzR2TGxTNGp0WDhiQ1BqWitBcnAyN2VaQ3drZllpTHNFTlF2SC9IbXc4R0pTbjR5RkdUYmhwK1BzWjRrQWF1WnlPVFU3VUpPREZnU09sUXBCTGsvaldBSDFRMkJRRUl3RmVaV0NtdTA1LzBTRW9xTEo1WElKM083Z3Nkbm0yeW9DTjNId2xoTkQwNmlvcUhNYk4yNmMxYTFidDB5YXB2dFd4ejdyOVhxQUlPSG5Yek5peVdKeTJhQlBRM3A2ZXJWeFU2V2xwV0hHOUtuNGN2TFhpSTV1Z1lJQ25ob25JaUlTdTNidkF3QU1qSDIveG83MXNxVkw4SHIzSG5ac0p1Sit6WjN6RFZKUy9nRk4wMmpmb1JNR2Z6UUVGRVVCQUZKVFU1RXdkdzVTenFaQW9WQ2dZOGRPK0RCdXNQUjZUZGlkdHZsaXpBdVF5K1VnQ0JKaFlXSG9IenNBclZ2SFBKcWVLbXYrZVUzMm9WMWY1UDFXVUFtb2xmUFVCQUxZQ2tDTjcxVlRxa1FSRmwwWnFQbnhiUjFob1dISXo4dXUwZU5VVlNNZnhrYVZTaVVhTldxRThQQndCQWNIUzBMTXRseHVZck9mUXFHUXhGVmxNaGxuSThUTTJISzVDVG1DVWdBbGI3enh4dTBtVFpwOGF6UWF2eEZldnk4ekdES2gwZXBxZkYwME9qY1lESVpxKzc2TC8xNkFqNDhQV3JlT0FVM1Q4UEh4a1R4blFRcXR3cG5ZNnJBZmx5OUZUazUydWVjblRaeUFXc0hCK08zM0xWaTBlQm1PSGptTXBLUk5mUGpFc2hnN1pqVHExVytBVGI5dlFVTENBdXpmdHhlL2JmeTF4dmF6cXR0TVhMQVFtN2R1Ui8vWUFaZzljem8yL3JyaG9WeTAzajkyaDl2by8wbC9leVYwaGJKVEJBQlljNjFGMzdlK052SDNML0oreTNmSXBSVUxqN0xxcHkyb2dXQmdVLzJrS0ZrNVVBTUhaR1ptb3JpNFdNcXArZnI2SWlnd0NLR2hZYWhYdno1b1lWUktQTSthTld1R2poMDdvbjM3OWdnS3Vyc3E5SW9mbDZQM083M3dkcStlMkxwbGM1azNhckZnOXF3WjZOZjNYZlR2MXhjSER4NTQrQjVibVplaVFhTkdqWndOeFpjTFMwV3hWZGhVUzRVVDBuRkNnUlBEMG4vLy9aZlY2WFFyTXpJeTlMNit2b01JZ3JoblVXWXJZMzBneVdhTlJndGp3ZjFUdUp3K25ZeEpYMHlBMld4R2NYRXh1ci9HaDVrOTN1aUpmdS8zcjlKM0hEMXlHSWtKODZEWHB5TTBOQXlqUHZrVWpaNTlWbnA5Lzc2OVdMWnNDVElOQnZnSEJDQXViakJhdmNCZmJNT0dmb1JiLy9GQ3R5TS9IZzZaakVKd2NBZ1NGeXdFeTdKbzI3WWR1cjN5Q2hRS0JmejgvZEU4T2hxWExsNEV3RmNzUGIyODBMdFBIOUEwamVDUUVMU09hWU4vLzcxUVkrdCtOOXRVcVZSbzNUb0c4dmdKbVBqRkJIVHEzT1doTUxObytqU0djVmt5Mkp3U0laemhydjFuemxyendzMnZ6c0plVGNvWm41b1FmaEpXZ0JOQmplVWRCdEttVUNEbmFLRlFrSitmRDBaUW1xSnBHbDVlWlo1YWFCZ1BhbzZTZVhYcTFBRkZVZGk1Y3ljVUNnVmVmdmxsWkdabTJwRkdPTTY5aW4rbnBQekRuMlBMVjhCa01pRXViZ0NpbWoyUG9LQWdiTisyRmFXbHBWangweHJrNU9SZzBJZXhhTnk0aVVRdG5wNmUvbkE4TnRGME9wMVR6ODNUMHhNNm5jNFp4YmlkTUl5b24rRGd1WmtGejYwVVFMRy92LzhmLy83Nzd5U0dZZmJlNjM1V1Y2R2dTdHN5M24vdW9XblRLR3hLMm9xUFI0eENyVnJCMkpTMEZadVN0bFlaMUs1ZXVZTFBKOFJqOEpDaDJMcDlKOTU4cXhkR2pSd09RMFlHQU9EbXpSdVlNdmxMZlBaWlBMWnMyNEZYWDMwZDQ4ZVBrMFJwRWhJWFlGUFNWZ0RBbkxuenNDbHBLeElYTE9SREJKSkU3ejU5NGVIaENZQ24wamw4NkJCYXR1UkpBSHg4ZkpDUXVBQktwVW82MFU4bko2Tng0eVkxdHViM3NzM29GaTFodGxna1FIN1FaamxyZ1BiRDUva2JMMnZkLy9mdGMvTmZ1UGxWQ3V3WmI0c2RIcVVFL3pBRGhBVUV5a0NOeit4d1ZxdUZrOGw1Q3YrOHZIekk1REtvVkNyVUNhdURxR2JQdzh2YkcxcXRGcjYrZnJ5bkZoYUcrdlhxUTZ2Vk9sM1h0TFEweVZsaFdSYWVucDUyNzFtNlpCSFdyRjRGQUVoSitRY2ZEeDhLQUxoeStSS2FSa1ZCb1ZUQ3pkMGRMN3p3UDV3NHp1czhuVGx6R20zYXZDaWNUd1RrY2hxWExwVWRoMWt6cHo5Y1lBTUFkM2QzQ2R4Q1FrTHN3TzBPRk9PMllTa3JoS2JpblVvRXR4SUF4Yzg4ODh5cG4zLytlVXBwYWVseVZ4cjZ6clpsU3hMYXZ0UU9yVnZIUUtGUW9IT1hybWpRc0NGMjd0ekJoMExlUGxpMmZLVWtsZmJxYTYvRFlqYmoxcTMvcXJ5TmMyZlBvbVA3ZHVqWHR6Y2FOR3lJRjl1KzVQUjlDNytmRDVWYWphN2RYbmxndjc4cTJ5UUlBbDZlWGpEV2NCSzh3aHZneWpOUWRZNUFpU2UxT3VIWDVTdTcvVGJtbGdPb09RSmJDUUdVQW9TWmY4QktDS3BTSk1DUklEaWFwam1TSkZGU1hNd1ZGQlRBM2NNZE9xMk9uLzEwYzRPN3V6dFVLaFhjM056NG5Kb0Fhcm9LUkZob21nYkRNUEQyOWtaTVRBeFlscFg0RGtWNzU5MCsyTHQzRHhMbWZZZkpYMDdDMEdHOGZrUGQ4QWljUEhFY1JxTVJCUVVGT0hmdXJIVFR6OC9QaDFLcHhObXpLZmhzekdqUUNocjUrZmtBZ0tUZk55RThQT0xoaGFLMjV1SGhnVWFOR2xWNkVvbi9GeDRjUVJDRXhXTGhiT3NNTE10eXR2MXRZbGdLZ092ZHUzY2FnSVRzN093YlhsNWVnd0RjYzRiK3dvWHppQnNZaTJYTFZ5SWlNaEpMbHl6RzVxUk5rcGRTa1gwMzV4c2NQblFJT1RrNW1EanBTN1I1c2UwakNXeDZ2UjRSRVpGMno5V3VIUWE5bm1jeDBXcTErSFBYVGt5WjhpV01oVWE3TUtLcTF1alpaN0h6ejcxSVQwL0hGNStQeDdLbFN6Qmc0SWQyNzFtNTRrZjgvZmRSSkNRc2NNcVpWeE5XMVcxeUhJZWMzQnhvSDFJUElWZGtTYjg4Zi9lcWhzZUduTUl4aWZ4UkJEWlRCYUduQmVCRXBYYUdBTUVKd0FZS0JDZVh5NkZVcXJpOHZGeFFsQXdCL2dGQzlWTUhOemMzZUhsNVFhL1h3TlBMU3dnL0c5eXhGMDBNUnc4ZE9vU21UdWlKdEZvdEJnMzZDQ05IRE1NNzcvWkcvZnI4dkd5VEprM1JzVk1YREJzNkdPNXU3bENyMUZDcFZkTG5ObTlPUWtsSkNhWk5uNFY1MzMwTEFNakkwR056MHU5SW5QLzlvd0ZzQU9EcDZXa0hiallnVmc3WXhHT0xzaVpld21hdVZBUTZhYTROQUN1UzRubDdlMjg2Zi83OGpYcjE2dldqS09ybGU5MWZ1VnlPdi83YWo0aklTQncrVkRYTzloRWpQOEdJa1o5Z25NQmcrcWlhdjc4LzlBNVVUTGR2cHlJcWltOUZPZkRYZnF4ZTlSUG1mRGNQd1FJUDNZc3hMemk5SVRtQ25hbTBGTnUzYjBPWExsMmhVQ29SR0JpSTl1MDdsRXNBYjFqL0MzYnQzSUc1Q2ZOcnRKSHpYcmQ1L1BneDBISTU2dFd2LzhDUGo1V3g3dnRiZjM1enR4L2pVMUdKT3J0OWdZQ1FldFFBZ2lVSmdpVkFjQ1RIZ2dMSnlVQkNKcE56K2ZsNWNITjNCMk8xd21ESXdMUFBOUzZiS1BEemhWdnFMZmo2K3FGKy9mL2YzcG5IUjFYZSsvL3puR1gyeWI0TXlZU0VrSVJjdHVDbHdyVmlYUzR1VkZzcHVLK1hxcTAvL2ZXNklsYTlyYlYxQlpjcXlxMTZSYXUxZXVVVmJkVWY5ZDY2d3IwZ29sR0pDWVFrSkNRa0lTR1FaU2FabWJNOHZ6L09lVTZlT1psSlFBRkp6UE42SGVaa01wTVp6cHg1bjg5M0wwZnFLTWVJTlp2OTdMUFBBQmp6aU8yZHFCc2FHdkRBL2ZmaW50L2VpN1hQUFl2SmhVVTQyMVRLbDE1Mk9TNjl6RWhzdU9icW4yTHExQkxMeW5PNzNiam50L2RDRUFSRW8xR2twcWJpclRmZlJIK29IOWYrL0pwdjN4UzF3MjNtekprb0tTbEJRVUZCM0ZpLzFOUlV5K2ZtZHJ1WmFVclozRktiV2NyOGJvck5OQjFncHVtcVZhdnVIaGdZZVBMcnZ0ZC9tRDRESDMrOENYVjFPeERnMGpNKzNyd0pLNWJmWXYzODZDT3J2clhvMlloZkRyTzdNUUJRWGJmYVNnSEEyZWY4Q0I5KytENjJiUGtZcXFyaXZmZmV4VmZWMjNER21XY0NNQWFNRUFJSW9vamUzaDdMUjBMMStLRFBwTHc4Yk42MENZcWlvTXVNOWpxY1RyejR4eGZ3eWlzdlExRVU5UFFjd0lZTkgySDI3TmxEcHZDYmY4VWJyMWZpc2NkWEg3VStkUWY3bXRGb0ZCOXYzb1FIN3I4WFA3LzJ1cU1lT09qVEJwKzkvZkhmclQzN2IzZU1abm9PQUlpWTA2UmlBQlJDeklIR0ZMb2dpVlFrQXBVZ1VCa0NIRVNraEFCK2Z3cnk4NE9ZVnY0UGNMbmNjTHZjeU1qSVJFNU9Edkx6OHBHZWxvNjh2THhSb1FZWUVWUW1SQndPQjlMUzBvWTFhZjEwNnllNC9aZDM0cFJUVDhNamp6MkJtcStxNDRLSGlxTGdwUmYvQ0VLQVdiTm1XejVrMVF4azlQUWNRRU5EQThwS3kzRFYxZGZnbFZmWFllMExMeDQ3aW8wM1MyZk9uRGxNc1kyd1VXSXNFRUtzTnVPbWtxTmNncS9PZXJRRDBHKy8vWGI5OXR0di80K1dscGE2L1B6OGZ5R0VISGNvNzlNaHkvQjZQSGp4ank5Z3dVa240YXZxYldQR2gyWlAwSDN3Z2Z2dzRBUDM0ZlF6enNTLy9lcHVsSmFXNGRlLytTM1dQTFVhSGUzdG1GeFlpSWRXUFdKTk0xcjB3N05SWGIwTlZ5MjdBcUlvNGR6RlAwRnBhUm4yMjhxRmJyNzVWcXhhK1pCeEpaNDhHYzgrOXdJY0RnY2VmR2dWVmoveGU3ejZ5cDhoeXpKT1B1VlVYUGt2UHdWZzVDbXVmT2dCU0pLRWl5ODhMOTVNZk9sbEJBS0hQNWZ3WUYvekY5ZGZCMEtBd3NJaTNITHJiVWMxajAwSC9id2hzcmZ5bEpiNzZ0QTRsT0prVTJyV0xjRlFIelVBUmlVQmlBNVFLZ0JVcElSS2dnQlJBMlFpVWlja09OUFNoMm8vZlQ0VUZCUU01YW1aZ1lJZE83WVBpMzRtVzAxTlRVaExTOFBDaFFzQkFKOS8vdm13bVI4WFhEZzA3Q2d6TXhQTGJ4dWFmN0J4NHdZOC90Z2pxS2c0RGc4OHVNcUM1S0lmbm8yNnVqb3N1OUpRYzcrNDRjWmhDbHM2RnI5NHFhbXBtRFZybHRVT2hSQmkzZkw3M0gwVzNBQlFycXBCNTN4d2lVeFRyYUNnNE1QWFhudXQ3cHh6enJuQTVYSXRPOWozcUtncVR2dm5oZmo5WTQvZ2hodHZ4aC9XUEhYTUhjY3p6MXFFTTg5YU5PeiswdEl5ZkxSeDVEbW1KNTY0SU9rWDErbDA0cTUvKzNYY2ZkZjhiSGpmejNuei95bGhNOFNTMGxJODl2anFoSDliRkVWOHVPRi9qK3B4T3BqWEhPMTRmZFBsOXlmUGt4d0loLy8wMnI0UDM3L3JRR1VmWjNyR0VnSE45S2NwQURXZ1JnMmdFUXFkZ0ZJQ1FrVVFLaW9hSkFBeWtReW9RWWJiNHpHU2IvMURQclhzN0J3anBjUE1VL3ZlOXc2K1d0R3EyUG1hYThHQ2s3Qmd3VW5EN3Bja0NiZmN1bnpFNXg2VFlHTWZOQTgzKzVZQWNCYmNGRVdoWm9VQ0gxU2dYS1VDVTI4YUFPMzg4ODl2QmZCa2EydnJsM2w1ZVZjU1FrWnR3cTVyR3I1LzRnSTBOVFhGUlhvRVVZUitCSnQzVHF6eHVVUlJSRGdjaXN1WDFIWDlpMTI3ZGxXZThvTVRkNEJMWnhvQmFqRXlwTkpZZHc2ZEFHYVFnRUFFb1JJRXlCQXNxTGtndytYMHdPUHp3ZWZ6V1Q2MW5CeWpUS3FvTUhHZVdxTGw4WGd4TUJBK3FNY2R5U1VkeXgrMjErdkY3Tm16SVlxaXRZMENPbW9xT0JZeHRRY1ZtRzJxMjAxVEFGb3dHUHhnN2RxMVgxMXd3UVhuZVR5ZW40MzIvakl5TXZCL2YvR3Y2T2Z5M1BMemc5amQzSVJZTEFhcTY2aXRyVUZoWWRFUk8wWnV0MmVDQ29kNGJMN05ZNWJzdFhOeWN0RFJzZGNDV3lqVS8vd2ZYM2orby92dnV6ZGtVMmw4NUpQZmVLaVpaaWQwRTJqVWlId0tWQUtCVEVUcWdBZ0haTGlJRExmREEwOUpEbnhtU2dlREd0LzkxcDZta1d4TktTN0Jyc2I2RWVIbThYZ3hwYmprdXdzMndDaS9zc1BORHJrRUppcFRiL1lxQmNyNTNwaHBxcHVtcVFaQVhiWnNtYlpzMmJKbjZ1cnFQaTB1THI1RUZNVkR5c25JeTh2RHFhZjlNeTYvOUNLa3BLUmFaVXhBZkxySFY5WGI4TVRqdjhmOUR6eUVxU1ZmLzBOT2RLV2ZXRURZSE5LYmFBbmYwakVMaC9vaEpra2htVFJwRXRyYjI5SFIxcnBoZDB2cjIwdVhMRzVLb3RKNG54b0xqTVdHVkpveFJjcTRjQnMxbjRJZ1Vra1NJVWxtaHc2SERBZHJFbW5PS0dEOTFDenpNei9meUZPYlZuNUlxVFlwcWFtb09HN3V0Lzc1SDlHWkI0ZHpVVXF0K1FrdExTM282T2hBVjFjWGVucDYwTnZiaTNBNGpIQTRqRWdrd28vL0k5emdacUxyT3B1bFFBQ3dlUXFpQ1hpWlV1b0E0QURnQk9Bc0tTbHhiZG15NVVlTnUzWmRtUnM0T29NLzkzYnN3ZHhENlBEUjFOU003djM3Snpyb0RqdU9iY2pLeWtSaGdrNFRUYzNONk80KytzZHNiMGNiTWpNelVaU2cwU1NsZEU5blorZC96cGt6NTVPT2pnN0ZCclZvSW9VR0s5cEpWQmlOSVRUVEVxRnNNeXQwSUVrU0pNbWFVd0FuQnphUHh3Ty8zNCswdERSa1pHUWdOemNYK2ZuNW1ESmx5aEd0SmY1T0t6YUx3SVJnNXN5WjdBTWFwdHpzdCtZMkxHSktDS0VtM01Bck4yYWF3cGhHcndGUTYrdnIxWXlNak1vbm4zenlrd1UvT0dWeFJrYm1sVWY2aWk3TDhpRTlwN0J3TXJxNk9yRzNvdzArZjhyRXpJTlFQMEtoZm1pcW1oQnFBRkJVV0lqT3pxTjN6Tmg3MGpVdElkVEM0ZkRMYjd6eHhrZVhYWGJaZ1ZGVVdwUlRhTlpFZGxPbGFTYk1kQTVtUnNkYjJkYksyODMxVWpQYmVXZG5aeU1RQ0dEeTVNa29LU2xCZVhuNW1ENFB4b3hpNDFkRFF3UHE2K3ZSM055TTl2WjI3TnUzRC92MzcwZGZYeDlDb1JEQzRUQUdCd2N0NVdiT1hDRGNHRUJldlFtbWVoTk0wRXNBSkU2OVdRcnUvUTgyVkV3cExsNHFpdUtaUitMLzFibTNIWk1DdVlmY3RvaFNpbDFOemRpL3Z4dWFxaU1TK1c0Mm4zUzdQUkJFRVZtWldTZ3NMQmhWYlRRMzcwYlh2bjNRVk8ySUhUTzMyd05Sa2hJcU5VVlIvcnVxcXVxLzVzK2YzOElCTFJuVUVwbWQ2cERaYVFITm1FMWdBczBvWkk5WGFGNnYxNEphUmtZR3NyS3lNR25TSkJRV0ZxS2twQVJUcDA0ZDgrZkNtQVFiQUxTMHRHRG56cDBXM0RvN08zSGd3QUgwOXZhaXY3OGZBd01EL0dpL1lYRFROSTJZdzV2Wm1EOEdOMmFlc3BGL01nODNBTTVQUHExYWtKT1RlLzdoNnRRN0VBNGgxTjhIZ0I3MlJwTVQ2OWhidXE1dmJXeHNmTHUwdExUV1ZGeDJsUlpMb05LVUJDcE41elpxV2pCSm9lWXgwem44MW55Q2RDUHlhVUt0dExRVUJXWWx5VmhmMGxoOTR3VUZCVENyRG1BV3hWdTNpY3hWMDBTbGdpQVFRUkNnS0FvbGhMQ0dsL2JBZ2hVcEpZUXcwOVE2QVkrZmU5ejdKU1VsbXg1KytPRXpVbEpTemllRWZHM2Q3dmY3SVVrUzh2SW1JUkFJVEh6cngvR2lsTzVvYjIvLzY4S0ZDNnRxYTJzWnpPeSt0SmpOaDhaRHpSWWNzSVlYVTFFVXFTaUsxdmRCbG1YS2V1NHhxSG05WGd0cVJwREFiRHRVV0lpeXNySkRIdjA0QWJZanRISnpjOEdhVVBLQVN3UTF6dmZHWmlFU1JWRkFDR0VKdlpRT0RUWFZiV2toR2dEVm5HK3FtUDQzNWR4enozM3JqanZ1K1BEV1cyODlQUzB0N1h4Q1NQSEUxM2RpSlFEYXJxNnVyci9lZmZmZFc5ZXNXUlBsVE1sWUF0T1QzU3AyczVPZGk4eVh4aWF5MjFXYUxNc1cwT3hRWXdFQ2xzNVJWRlNFc3JLeVllMkV4cndwMnRUVU5PYi9FNUZJQkkyTmpWYTBkTisrZlZhME5CUUtZV0JnQUlPRGc0aEdvNVpaYWhib0VsWXp5Y3hTTG1wS2JLYXBTQ21WbUluSytkOGNBSnkzM0hKTHloVlhYTEV3SlNWbDZUZHBham14eGhYUUd2ZnYzLy9tbWpWclBuMzIyV2NqSEtDVUpFQ0xjYkN6Unp1WlVyT2luY3o4NUt3VXE5czBVMnQ4b0NBMU5SVnBhV25tM004QUNnb0tVRnhjREpmTE5lNk8vWmoxc1NVNGliQmp4dzQwTmpaaXo1NDkyTHQzcndVNEZsUmdnT1A5YnN6M3hnR09tRjE5Q2ZPL0lUNDFSSVFSWEVnRU9NZnk1Y3Y5SzFhc09EVWpJK05jUXNpTWlhLzNkOUtIVnRQWjJmbTNYLzNxVjFYUFBQTk1kQVNnMlRmRk5EdFZEbVlhYjNiYVZacXAxT0tBbGlqeXlZREdVam1LaTRzeGJkcTBNWnZPOFowQkcxdE5UVTFvYkd4RWEydXJwZDRPSERpQXZyNitwRUdGQklHRnVNZ3BVMjhNY2hqS2ZVc0t1T0xpWXNmR2pSdFB5czNOUFZzUWhCTW12dTdqZjJtYXRybWxwZVhkazA0NnFicTF0WlhCaVFlYWNoQkFZOCt6QWdNQUtCL3haQ3FORHhBa0N4S2t4RTFuRHlBWURLSzR1QmhGMzlJZzR3a2YyOWRjUlVWRmZGdWpPQi9jS0FFR2RpVms2bzFxbW1ibHZjSE1kVFBWVzF4d3dlWi9pd0Z3TkRZMk92THk4dDRGOEZGZFhkMmNvcUtpaGJJcy8zamk2ei8rVmpRYWZXdjc5dTMvTTJmT25GMGN6SGlWRmtzQU5TVUowUGpnUUZ5U0xhL1NlTFBUNFhBTTg2Y3gwNU5QNXlnb0tNRFVxVlBIVlpEZ093TTJ3QWdxOEgzYlhDNFgrSlBBRHJkSUpHSUJMaGFMV1pGVEJqY3V1RUQ0a1grc1F3aU1mQ0lWZ0dJcU9BdHdBQnhsWldWYkFIeis3cnZ2dmpwdjNyd2YrSHkrc3dFRUo1QXdwbDBmcmYzOS9lKzgvLzc3bnkxZXZIaGZFcUFsZ3BveWtrSXpMNWg4bEI0c3BzV3RrSlR5QUFBVFRrbEVRVlRtQnVpNlRuVmRoNlpwVmw4eVJWR3NCSFdtNkJ3T0I4TGhNTnh1Ti9yNys5SGIyNHZ0MjdkaisvYnRoK1VZK1AwcEVFWEJTaG1aTUVXUG90K3RycTRPemMzTmFHdHJ3OTY5ZTdGLy8vNFIvVzVtS1ZiQzRBS1gxQXZUTkdXbFdYRkJCcHVKeXB1cU1nREhKWmRjNGxxNWN1WDhuSnljMHlSSk9tMENFMk5ucWFyNmZrdEx5Ly9jZE5OTnRYLzV5MStVZ3dTYWtnQm85cUFBZzVsT2lBQ2p4bE9nZ2loQ0VrV0lyQ1JLa2lFN1pEaGtCNHlwN0taU2M3dmg4WHJoOS9tUmttcU14c3ZLeWtKdUlJQmcwQWdTSEFsL1dwakx3Wng3RE9WZ2ppdXdYWFRSUlhqMTFWZHgvZlhYWS9YcW9YNWZyYTJ0YUdwcXdnMDMzSURQUHZzTTU1NTdMZ29LQ3BMNjNiaUVYcGgrdDVHQ0MyUVV3RWxKQUNjRGtCY3RXbFN3ZHUzYStUazVPUXUvU1Q3Y3hEcWlGOGdkUFQwOUgzejAwVWRmTEY2OHVKdURVaUtnS1VtQXBpWURtdGtqa0RKZkdoRUVpS1l2VFJRTm9FbXlXUm9sT3lBN0hIQ2FVSE83WEhESDVhZ1o2UnhaMmRtbStUbjVxS2lwenIzdHlKc1VPR1p5TWNlZEtTckxNdDU0NHcwODhjUVQxaFVxR0F4Q0VBUlVWMWNETURwMUJnS0JZVDQ0ZXk1Y0xCYURLSXBRRklWbGRaTkU1cW5OQjhjNmhRaW1pU3B4SnFwa252QVcyTmF2WDE4ZkNBU2FBYnkrYmR1MjhxbFRwNTdnZHJ0UEF6QlIxZjd0d3F4dFlHRGdnNXFhbXFwNTgrYnRaajdWZ3dBYXY2bW1RdE1TbVp3TWFJSWdVRXFwbVY5cEpOcUtrZ2hKWkxXZUVtVFpZU2cxRmlSd0dwRlB0eG41OVB1TnlHZEdaZ1p5c25PUmw1ZUh5WVdGMXF6Tkk3MjhQai8yN3QwN0FiWWp0UllzV0lBTkd6Wmd5NVl0bUQ5L3ZuWC94bzBiTVdmT0hHemR1dFVxOWpVbnpjY0JMaHdPVzBHR1NDUmlBYzVVYjlRZVhOQjFuUTh3SkFveWFBQkU4NG90VVVvWjJPeEtUcDQxYTlibkFMNEM4UHoyN2R0bkZSWVdIdTl5dVU2WmdOelJnOW5nNE9CSDlmWDFYMVJVVk96aTFWVVNvS2tIQ2JPRVFPTURBN3F1VTFtV01VeWx4Wm1lVHJqNGRBNnZGN0ZvRkZzLytRUVhYM0lKTWpPemtHT21jeFFWVFlrYlJQeE5WMjF0RGQ1KzYwMVVWTXpCNldjTUw1WDJlbjBJOWZjZU01L2x1QU5iUmtZR1RqMzFWRlJXVnNhQmJkMjZkYmpnZ2d2dzZhZWZJaGdNb3JTMEZCNlBCelUxTmFpc3JFUlBUdy9jYmpmS3k4dVJuNStQd2NGQlNKS0VuVHQzWXQrK2ZkYWdFMG1TYUdabUprUlJKS0ZRQ0pGSWhJcWlDTmF4RndBUlJkRUNuSzdyZ21sMmlHYmtWRFJQZkdhbVNnbEFKNVdYbDI4RjhEbUF0VjkrK2VXMDR1TGlPUjZQNTRTSjNMakR1M1JkcndtSHd4L3YyTEdqNXZqamorZVZtYzZCYVNTZ3FSelE3T1ltaTV6VFpFQmo2UnVxcXNMaGNFQmtIVGtrMDRKZ0tzM2hoTk0xM1BUMHA2Umd6bkhISVJpY2JLUnpGQVNSazNONG81NVBQYmthalkwTkdBaUhoNDFsNU5mUkhDeituUU1iQUN4ZHVoUVBQL3d3SG56d1FRREE0T0FnMXE5Zmo1VXJWMkxGaWhWSVQwL0g3Tm16VVZkWGgrZWZmeDZYWEhJSkNnb0tVRnRiaXpmZmZCT3lMQ01ZREdMMzd0M282dXBDYVdrcFpGbEdUMDhQOXV6Wmc0R0JBYVNtcHRKWUxJWklKRUowWFlmWDY2V2FwaUVTaVVEWGRTcEpFdUdpcU1TOFdnczJNNVd2YU9BM0huVFM3Tm16dnpDVjNLdnIxNitmTkhmdTNPbHBhV2x6WkZrK0FVRHFCSjRPYWZVcWl2SnhkM2YzbDVzMmJXcFlzbVJKTjRZaWtjblVXU0tvOFIwMlZOdHpkVTZoVWI0L0drdXdGU3dmbWhIQkZBU0JPcDB1UGo4TnNzTUJnUkRzM3IwYm1xcENsQ1RNbmpVYitjRWdLQVgrMzl0dlFSQUVwS2RuNEpISEhyZXNrRit1V0k2MnRqMEFnSjZlSG5pOFh2ejVsZGNBR0oxeG52ajlvK2p0NjBWR2VnWnV1LzJYMXBBZUFIanRQMTlGWmVVNjYvRUFjUFUxUDRQRDRjQ3FsUStPbVE5NVhJSnQ4ZUxGdU82NjYxQmRYWTJaTTJkaS9mcjFtRDU5T2dvTEM2M0hlRHdldlB6eXk3ajQ0b3R4N2JYWG9xMnREY0ZnRUtGUUNKczJiVUpGUlFWeWMzUGg5L3VSbFpXRlNDUUNuOCtIZmZ2MlFkTTB1TjF1UkNJUkFLRHA2ZWtRQk1FeVVWVlZoU2lLYk5ZQ2k2SVMwelFWelBzWTRFVHppeUtacWs2MFFZNEhuYlJvMGFKZEFGb0EvTDJpb2tKKzdybm5pb3VMaTZmNWZMN1praVI5RDhCRUsxMmJrRkJWOWRPK3ZyN3F1cnE2eHF1dXVxcTFwcVpHdHlrenpXWTZKZ01hRHpQK09ick4zTFFVbXJraEdkQll6elJDQ0Z3dTF6Q1Z0cWR0RDNLeWN6Qjl4Z3lvcW9ydHRiV1kvMDhuSUQwOUhkLy8vb21JeGFKNDlaVS9ZeG8zMy9UK0IxY2FCTy90d2MrdnVRbzMzWHdyQUdQTzUzMi91d2UvdSs4QlRKbzBDZS84YlQzV1BQVWs3djdOYjYzblZzeVpNNnp6c01QaEdITWYrcmpOWTF1d1lBRmVmLzExekp3NUUrdldyY041NTUwMzdISFYxZFhvNnVwQ1pXVWx1TWxXMEhVZDJkblpjTGxjYUd4c3hNNmRPNjAwRVVWUmtKS1NBcS9YaTRFQm80ZVgzKytIcG1sVVZWVU1EZzRTVlZVaHk3S1ZhMlJHVVZrK0VqWEhhUTFUY0thWmFsVTJjSkJMQkR2cGl5KytrT2JPblZzTllEdUF0d29MQzhXWFgzNTVjbWxwYVhGcWF1bzBXWlpuRWtKS3Zrc1VvNVRXeDJLeHJ3NGNPRkMvZmZ2MjVzc3Z2M3h2YTJ1cmJsTmxpZFJaTXBWbS9ZNGxZOXYrQnU4M2l6TTNlYUJ4Q2VCeFFHTUtqUkFDdDhjOWxNWmhtcDdCWUFGMjF1MUFXMXNiU2twS2NNbGxseUVqM1loNkJnSUJSS05SdU4zdVJDWTJmblAzcjNIMk9UL0d2SG1HUzJiWHJrYTB0cmJnRG5OZ3QwNTFlRzFEVmNyS3BxR3NiTnFZUHcrazhYcUNMMTI2Rkd2WHJzVnR0OTJHdDk5K0cvZmVlKyt3eDZpcWlsdHV1UVUvL2FreDA3Szl2ZDFxT1M2S0l0NTQ0dzI4ODg0N0tDNHV4dVRKa3pGanhneFVWVlZCa2lUNGZENXJpSXZYNjdWU1EyUlpwdEZvRkU2bms1alJVMnFMb0RLd1dWUHNLYVc2ZVIrRG5BQWpSWUF2d0JkdGdCdTIzOXpjTEo1NDRvazdBTlFEZUJlQXVHclZLdC9wcDUrZWw1K2ZQOW5uODAyUlpibEVFSVJwTUhyTGplVVYxWFY5Unl3V2EranY3Mi9ldlh2M25uZmVlV2Z2blhmZU9RZ3VKMndFbUNXRFd0dytwOHppekV5Yk9xTTJvRkcra3d6ZlljWU9OTFlCZ05mampROFFlRHpJeTh2SGpPblRjYUNuQnp2cmRxQzlyUTAzM25RTEp1WGxJUzh2RHp0MzFpVThPUC94N05Od3VWeTQ3UElyclBzVVJVRWdFTURhRjE0Yzl4ZTRjUXUySlV1VzRNWWJiOFRUVHorTnNySXlUSmt5WmRoanBrK2ZqbTNidHFIRUhLWlNVbEtDWjU1NUJoczNic1JWVjEyRlRaczJZZUhDaFZpd1lJR1Y4N1o1ODJhNDNXNzQvWDVycXJYWDY3VWlwdzZIZzVrVmxHOW9xV2thQkVHZ3FxcUNVZ3BSRkNtbGxKaEJCOEtwT0ZaNFR6aklDU2JraEFTUUczSC8xbHR2SFFUUURhQ0dNMzJGeXNyS3JQTHk4dXlzckt4Y244K1hKOHZ5SkZFVWc0U1FBZ0RIU3J1SENLVzBSZE8wUGJGWXJEMFVDclYzZG5aMjFkVFVkRjk0NFlVSE1KU2RyNDhDczJRS0xlRStCelBkRGpNTURRQ2l5ZFJaSXFEWml0YXRqVVhqQWNEbjk4ZVZSdmw4UG16ZCtnbW1UU3ZIcWFlZUJyZmJqWHQvZHcrbWxaZkQ1MHZ1Y2RpNGNRTSsvT0FEL1B2VHo4WWw1WmFVbEtDdnJ3OGZmZmdCZm5EeUtXaG9hRUROVjlYNDBZL1B0UjZ6YzJjZHFxdTM0U2MvV1RvQnRtTnhCWU5CekpzM0QzZmRkUmZ1dlBQT2hJOVpzV0lGempyckxOeDk5OTI0OU5KTFVWTlRnK1hMbCtQbW0yL0dqQmt6a0pXVmhZNk9Edmo5ZmlpS2d2ZmVldytSU0FTeUxDTTlQUjM3OXh1VHozMCtuMVd4d0U1U3Q5c05WVld4Zi85K3FpZ0tmRDRmSkVraWc0T0QwRFNOTWo4R1N4Y1JCSUVWMjRNQmJnVElXWUN5ZFIwWmFlT1RoNFVsUzVZTUFOakQvVjMyR3VUUlJ4LzF6Wm8xS3lVUUNLU2twcWFtZUR5ZUZJZkRrU0pKVW9vb2lpbUNJUGdJSVQ1Q2lKY1E0alpCeUJvQXNOY0NCd1pyYkJ5bGRKQlNHcWFVaG5SZEQybWExcStxYWw4MEd1MGJHQmpvNytucDZXdHZiKy8vOHNzdlE4dVhMeC9nNEVWdElLTWp3RXkzS1N4dHRJMTEwVWdBc2ppWThTQURTNmcxcDZUeDVpYURtYTJ0VUJ6UVdOODBwOU1KU2lsU1UxTnRyYnRUY2RaWlA4Uzc3LzQzR2h2cTRYUTZjZWRkdjRMUDUwTnJheXR1dnZGZm9TZ3g5UGIyNG9Memx1QWY1ODdGN2IrOEU2c2Zmd3lSU0FUWC81K2hDWktybi9vRC9INC83bjl3SlI1NzVHSDg0ZC9Yd09QeDRHYmI0T0dxeno1RFplVzZNUSsyY1ZkNW9Lb3ExcTFiQndCWXVYSWxicnZ0TmpRME5LQzQyT2dCS1VrU1hucnBKVngwMFVVQWdELzk2VSs0Nzc3N1VGOWZqMEFnZ0t1dnZocDMzWFVYQ0NIWXNtVUxycjc2YXRUVzFzTGo4YUM4M0ppdldGVlZoV1hMbHFHMnRoWi8vL3Zmc1hqeFlxdHFZZGV1WFdodWJrWkZSUVVVUmNIT25UdWhxaXFDd1NDYmxvWHU3bTZtMUNBSUFqdXhDZWVMc3lESDloTkFMZzUybkpvVEVvRXN3VDUvbTJqalgyZWtEUWx1N2Z0eGJyQUUrL3p0U0pzZFpQWXRtVW9idHM4Rzl5U0MyR2d3WS91MnhxVUhCVFJlcGZITklIdDZlakJwVWo2OFBpLzhmbk8rcDFuQW5wc2JRSDUrL2lHTndmczJWc1BPN1RqNTVKTW53RFpXVm05dkwvYnMyV1A1Myt6MXBteDRqTDJaSlZkekNtNE1vRlc4ek14VVBzakF5clc0c2kzK2N5STIwTVZCamxJUWdBNkQzU0grbkFoc1BPQ0VCRkFiQ1hBandjME9OQ1NBMkVnS1RVK2kxdXlPL1ZFaFpuczkzbS9HWUdiZGNxYW5mWEEzdFhkdFpqQnp1ZHhJU2ZFUGF3TEpGRnAzZHpjS0poZFp6U0F6TWpPdDRuSy9QMlZNZkUrT0piQ05HMVAwaEJOT3dPYk5tOGRjRUkrL3lLU21wakx6bEhKZEhBalgzWUVRUXVKVUhJeHhnY1R3MDBFQUNFa0VKVW9oMktCSFJnSGFTSEE3Rk9WMktHQTdGTE16R2VDb0RXZ2pBVXkzQXd3Z2xCQlFnSUFRQzJRR3pBUUJBakVoSmdvUStSSW90aG1sVUVOcVRaWWhDQVFDSVZBMURkbXBxY01hUWZyOWZoQkNFQXdHb1drYWZENC9VbE5TNGZWNDBkZmJoNzdldm1QK1JNNFBIbHZOYXNZTjJEWnQyblRVWG9zZjJOemQzUjNYeURJY0RvL1VxZGRTYm9xaVdNck5WRzk4RFNyaEZCemxsQnk3cFRaVGxjRkU1OVVkcjdJSUFVa0VQUTZTbzRGTUdBVm95YUJHRWtCOE5MVkdreWkzWktCamNOSkhlZzV6OXJPWnNwenpQNUVxczhHTVFCRFk3RnFCQ3NMd21ScVNKQmxnazJUSUp0UWNacUt0MCtHQXJ1dVFKQm1abVpsVzVRQnJCQ21LSW9xTHB5TGJuRVV3c1NiQWR0UlhRVUVCY25OejBkYldablhwVFdTZXNvNGhJd0dPM3hqWVJvTWNCemhvbWtZSmt4aERRSXVEalUzaHhVR1BTejBaQmpEVHRCMEpaRWZTeDJiN21TbXBwTUNqaVo3UGRjN0FzSDJEOWdiUUNBRUJBUkVJRlFoQm5Eb3pGQm9WQlFHQ0tFSzBRMDJTSUVuTXAyWkFUWFk0NEpCbE9FeXowNmdxRUNHS0FnS0JnTld1bXpXQ2xHVVowMmZNT09TQjJSTnJBbXlIZFRrY0RoUVZGVm1BNit6c3ROcVE5L1Qwb0wrL2YwVC9XekxBY2Y0M3E0TUlEemt1aWRpQ25HbWVJbjY0UGEvY0NFeEFZUWgySU93N25neFlOcFUzcWorTnNuMDZpbUlqMXMzQlFHNFU0UEUvRytZai8zZHNUbjhBb0xwT0lRZ0NESjRSYXZZL0E3R1VtY0FGQmtUVDdEUnZlWVVtTW9YR0FjMVVhUEhCQVRjOEhzT1hwaW9LSmsrZWJMWHJadE9pb3RIb2lGQWpWVjBnVDFZQjlUMkgvMlF1U1FPOS9qalE0N0lud0RZZUY2VVVIUjBkNk96c2hLcHBoMVRVRzRsRTBOL2ZiNW1qYkV2V3lKSnRsQUk2cFpBa0NVNm5jeVRBUWRNMHZwckJncHdnaUtCVXA3cE9UY0Rwb0JTZ29LejlLZ0JDVFBDWjMzZVlJQndPS2k2Z1JFYTVqZHUzZUhWdy9RenBJU3E1K0RlZjRIZGN6aFpsK2MraUtGclBZZWFscG1rUVJXa1l6QWlmZzJiNHp5eW9qZVpIazAyejArRnd3dUYweEFITjR4bWF2RDRRN2tkcGFTbHljbklRQ0FUZzlYb1A3Z1JiWFFVMDlCeVpFNysrQitUSkt0Qm56NWdBMjNpRVdsVlZGVUFFZUgxK2VMMCs1SDZOMWxLRGc0UG83T3hFZC9jKzlKaVQ2ZnY2K3hBT2hSQU9EMkJ3Y0FDUndRZ2kwUWhpcG5vYkdCeEVKRElJVlZHTXEzcGk4elJ1WTRwTlZWVklrZ1JkcDBTbk9xaXV3d0NjTVJxVlJXVk5BQkRaNFlCdW1ycU1SeXk2TjhRbkFrN05JWWw1eVlNU0IyR0NqZ0kyQWtLU0FpNE9XUEdQNDM0bWhKZWFvSlJhZFpqcy8wZ0lNU3BFSEE3bU82TU1haGJNREQvYWNMTnpSS0N4dGtJdXVOd3V1TjBlZUwwZWVIMCtwSmpwRzJucDZRajM5Nktpb2dJZWorZVF6aXR5cEtER3dXM0NGQjJIcTZPakF5QUNjbksvV2JkUnQ5dU53c0pDQkFLNTZPcnNRdmQrTTdqUTIydVpwd01EWVF3TUdEQ0xScU53ZXp5SXhXTG83K3VGSkVsd3U5MGptcWhNdFdtYUJrVlJJRW55VUpCaENHNUVWWTIvNFhRNnpjZVkvamhSaEs0YjFsczBHaldVaWloaXlKWkZITmdTcEFReGZtQW9ka0VUWGl5U3RhTm1iYURpMVpUMVBHci92Wm5ReklQTkFsZ0NwejhJSWRBMERRNkh3d0lhTXk4QndPbHd4cWRxaUlMMUdWRks0VExyTkYxdUYwUlJ3aGVmVjFsLzErUHhvS1MwRkhtWm1YSHBHM2FGNXZmN2taS2FpdlQwZEdSbVpDSTdKeHV0dTVzT0dXb1Rhd0pzWDN0MWRuYkI2L01mdHIvbmRMb1FMQ2hBWU5Ja00vZXQyMUp3L2YzOUNJVkRHREFWM09CZ0JORm9CQTVaeHVEZ0FIdyszNGcrT0g2THhXS1FaVWRjQWI4Sk9LcUdGQkJDNFBmN1RSVkhDYVU2ZE1wTVZtb01yeUVDWkVuaS9YU2N2MjdJRmNZQnovcUhETzBOZ3g4Yk5HS0RHMVZWMVlJVnBZQ21xU0NFUWhDTWFneEZVVUFFQVpKb3ZDZFZWYURybEJyRjRrTXF6WEw2MnphQkdDYW1wcW5VNVhJTnl6ZGo0T0toRmdxRkVBcUZVRnc4RlM2M0czczdPdERXdGdlelpzMEdVMzNmTzM0ZTB0TFMwTmZYaCtwdFg4THBjR0xHekZsd213ck40L1hBNS9XWkxib05oWmFSa1luczdPekRtbHliK2Z4aUtOV2Q2RnYxdndDQWpDZCtpSUczNmhCNXB6N3BjL3pYSFEvbktVWFlkNEhSanNoNytXeElVOUxSZTgrSEIvMjZveldiUEpiVy93Y2FMdGJ3dU9MVHF3QUFBQUJKUlU1RXJrSmdnZz09Il0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJLb25wVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJaMXRsdVc0cldYL2F4UnZDQksvT1J6eFEydjFESHI0dlRjanMxeFZ0bC83clc2WHF5SXo0c2E5RWdrY25BTUMwTFgvOS8vNnJ2LzZyLzk2U212aFNybTIwa3U1K1YvcXFZZVhQN1Q3NTMvOS9QZTUwL252K1Y4c3YvNzAvUFg3MXg4L0NIeU52dkxuQi9YOStmcThmRC8vNHhkK2Y4WXovdnI5cS8zNlNXaS8zdWpYRDNqam55dndrLzN6K3ZORjh2M3c4LzBuL1hxanZuLytVSHFyZjc3VThldU41cThYbmt2NTlXLzY0N0ordnZqMzZ5L2ZxS3pTeW54UURHSEhKOTduditubkN1TFB2eS8vMXZQZndPdWVHUG56RTl0MXZ2eStKUmJrTDdmMysrdDkvM21CL3JMSXYvOTAvWDMxLy9qVDN4WS92TCsrSC8rMmx1WFhHdDNsWC8vZ3lYLzdmdnpqWThKZnpPR1BLd3AvL2NFWTZaOXY1OWUvMzdmYTkrMmZ1M3RUWVVYTEw0czZpLzM4Zmh0ZU9GanllSDZ0OEUvbDM4eWY2L21uODArNzMzdXk1ZXVlOStDZitmUW5zQ3ZmOWFSblBlL3pQZnQ4bmMva0VsUFlvZkkxaEJuaStWNkxOZlF3by91VS9PZjVRbzA5cnRqWXl4bjJ4ZmFsR1A2NGx1ZDhiaitmTjUvR0o2K0hsNGFITjN2NGxYLzd6L1hmL2ZCLzhzLzFmZE1sZXU3MngxcHhYVUc3NWpMY09mL0xxOWlENS91MWIva3M4TzkvZm0zLy9TZjd3VlRad1h5V3VYR0Q3ejErM21MazV4KzJGYzgrUjE2WCtmcXp5YzlWMTY4M1lJbjQ3TXpGUEpFZHVNc1Q4MU9ldTRaUW40ZDFiR3pReTVXSG1NSmdCNTZjdytJaVE0cXhoS3VHRnZ4c2ZxYys1N1VoaHhMOE50akVSdVJZOEszR0RyMXNWa29aKzZtcFlVTnZqam5sbkV1dXVWMjU1N2ZFa2tvdXBkUWl5TDAxMWxSekxiWFdWbnQ5VzJ5cDVWWmFiYTMxOXZiUUl4aVllK20xdDk3Nys0YnI1WU5lM3V2bDlTL2ZHV0hFa1VZZVpkVFJSaC92eEh4bW1ubVdXV2ViZmI0cnJMaUFpVlZXWFczMTllN24yaURGVGp2dnN1dHV1Ky8zdzlhKytLVXZmK1dyWC92NjkvNnhhNzkyOVovKytSL3Mydk5yMThMWktWOVgvOWcxdm52Vit2c3RIdUVrdTJmc1dFZ1BPMTdkQVF3NnVHZDNlMUlLN3B4N2R2ZUFVK1RBUldiMzVscVBPOFlXcHYyRS9EMS83TjAvZHU0LzJyY3J0LzlvMzhML2JlY3V0KzcveDg1ZGJOMC83OXUvMkxWbG5KdG54MzY4MERXOUk5N0hhOTdBRlgxamZmeTF4QysvOGF2ajI3TnVZZElmLytjL3ZWN3ZaNy8xNFY3THUrcFRjMGlsdld4dUhKM0xHSFBpVjJsRUwyVy9pWmVNSGRMWFdueTVnOW5XTSs4OXJqQm5ITHUySis4NmRzeGZlNEc2Yit5MVY1NEplOXFUejFxMTMydnQ4WEFmTSs5M2pUVkNHbnp1RS9vTXFWNVA0NjBtNjRYMTNYdlhtUVkyc0wrWTcvNThOZTM2OExPWTU3M21IcDN0SFBVZVQ4cGpzMk9BLzhzdVlsVFhUS0xWcythcUw4UWt4MDE0ZmRmTE9uUXVNZVRCbmxiV0o0elNBZlkzei9xTlZOL3dMU3hyZmlYT1hFZTZJRFYxM2l4R2JRbUQ3a1NaM3N2M3NNRmYzU3pHSFB4eHhhL05MOXhjbnY0em9DRjE4cTZ4em9CenpxOWRiZVdTMG1LZFpyNUh1VnNQN1BzY1FIN2ZxNFUxUzF4aHJQdEwrVnNZMEZ6NFFZOTVyeHBxM3lXd0VTbVhxN1NIUGZscTV1YU1OK3U3Mll6TzY5ellmN1A1ejh5cmNUSEFRU3o5dTBjcTF6RGd4YnVVdFFhd3dxMkZ1UEVqREJPempXc1V0amx5S1hQRS9QSUpCY2QvQjUrODQ2aGN5b01oOEd2WEdNZXEvanVMK3hjL202V01XUGFZOGNPcDkyemZGZFlxSGZlT2liRE9QV01iS1V4WHBzYzJWL2JXMWo2MytYd3ZZUC9IVzJNdEliQWhSUHIyZkJlaC9RRjlGbUNDS2ZXNXVjZit4bEF4NG1lWHdYS1g4UlUrdlJSODh5UENZeWZ0VGZlYldudDVUOHg5cm5XMTh1VUppSDNIbk1xTERYNy83Z3ErZnZQaXI2VnZ4L3B4UVRHTnNIdGJvT1Axc29QOHRYd1JBTUs3dVVwUUROOEhGVWJuZm5NQVNjU3MyT1YrNzdOZWJDQWFCUmYvNW85WDc2OWVVaDR1dnRmdmlkL1ovZjAxWGVGbGkyckJXcDVaZ3VheTg0UW1ManhrOC82c0lleUdUMzIwbFRCaHRZU1R4SWNrUFF4My9QYWo1dzVzYW9SbnZQVmpLN2orWTVjZE1LNndCUmN1MWRiZkwvTGhrWGU0TmxHNmw4YU9EdWdTSzFSVCtiQmpYamxITDl0N1h2eWhGWmFraDZmbkcyc0xLUWZ1YjcvUzc3ckc4MTZwakZXZWQvSXBnR3R2QkFLd0dPTi84bHZ6UitCdk5VN3dsTC9PQXo0enB4YjN5Q3pNZmpUSGNXTlUxOE05Vlp6MFRiTTI3aDVIZTlkUkVKbTlsSTdKTGxMQTEwSmdKZitkeVY3L3VUMC9YdkhLR3c0WEpqZk5CUmNpVCtjZXBEVTN4amVCVlR4YU9scER3VEtKcnZVdEd5TnM3eTdsRzREQWdwRGxjdmZSaW12RVJZOUtHSjFWVEhvSFY5UXpWREVCcHBPUXBya1dQclR6eWcxdXdubjQvL2V5aXJFTllKS1Y0cDc1MHpEMkFUdnN5VnBQdjhyVGRMV09OUUpRZk9KdThkQ3V6WHM5aEM4Q1lreEV4TWRQR1J1OGlnUlZJbWtwc2QwRTgvUmlHdnRhL1U0NWdvK2RuY2VuUzhaUUhseXJQeDE4WUo5bTVCY3FjY1pQV3FXK1h3dDdFakluL3NSdmJhSUFjWTM3d0ZyWjVrQkVYdW5leE0vK2VOc3ZpQU95RGRCMTE0Sm9Xa0REQTBaaE1jL2dkMGRxL1Q3c0crKzVRT0ZrVkRXQ0RZSmMyMVhreGVpK0F0QmtRaFBvY0UrQy9pRCtzN0oxUGp2aTl4M0dVeDlEenE0NVhXUGk3dkVSRU1EWXhrSnkrYnpsbkFUK0dybWlNY3F6dU0zYjBBUVJnT2g4SFN3Qi9pTitHU0FyZk85SzhTVThjaHY4elNVaHFtQzY1ZGtwRzhiQUpWWi84NHRuOFRHTGxnRnJJeFcvanprbHNBRXlFYStSRm9zT1FJNmF4U2hvRlB6cS9uYUFPc0MyOW9kWUxRTkNSZFFqWG96QUhjQWlxbWphMGlJY2Y1TjF1elpPQ0laRlNFZXF3RDZVWTBsQ3B0WURqRVNRc1M4aVRTRzRWakNzTkw2dXZaOEpmTVNWaGJFdnZWZEphOThnd2Q3M093aTNrV0NlWHV3OEF5OGY3L0h0WXBDNVUyRWxaOXZJY2JBSy8wT0xzVnZZUHB6dEprQytoT1FidXBkMHB6dXZ0VUltM0w3YkN3VUVTc3o1V2JsQkhPdUhTM1BSbU1LUUpSTFNZREVmc0JIWU5SeStsd3gyOWxzdEJiemlRUnZDeHdkamZkQVVHQ0F4elVXRnhMVmFDT0ZqQTlEZ3hRZmRaSE1KSlJlNnpIQ0N6UlBlSVVoNE41ZlA0c1AxUUhaNDNzME5zVTRwRGFJbWRuQUxCaktuL3Y1Y0ZqZVc0eFV5UkdpK0hYTFlDLzZDeEFLVmNDUDhqaHNocU9abnZ3VG1zRGIybkVEVmlUTVFaZS9haVg3WUtKYXY4SXZReGc1bTk0RjVZRXozQjlvQUc0bUw3OEF3OUtqZzNVUjBkaDRFWjNYZW5OaFozcGRieFdUNzNudGRTMzVCTkFvWWQ0c0R6M2c3THZwSkEvQWFLQlp2Z0JNWDFuMjlXTW1jSGRiUmN5Q1lKU1ZXNVhkNnZmU2VSUGdJOEJ0QzlhdWR3Q2dtdUE2bEkvN2NCL1dRQmtBTVpCSytXTjVRRndxaDVBRlkxYzZQQm0vVWVQbHMzblhpVnJFTXBDQjBubzFEWDFlTUl4dm5lb05KZ2dFTHJjNmFha3ViVlhsWWw0VmxCUUlrYk1yTlRjMGRSY2VrR2dob3FJYzJjK3Q1NG9rVE13QXVRQWJlZTJFMWkxRDZRTVlDMGdDcVNlUllGOHl1bVNLQWpxVXFIaUJJY0E1NUdWRXdzWlJRcERrL3NHK3hJWVNyQ1UwQlIzWnVXZ3BzWWNMNTJEWEF2R3ZLUFVhaUF3SUtsd1dwV0hQelBmd1dWQk5ranRBd1RDT1diNzVnbm90K1FoV3Z3S25ydm5yQ205WUwyelR5UFRVQXpJUUw0REprZEFXWERncWhQa0NZWjIzZUhSd0JhTnhxMkdycU9BZzdlb1BaZ0FoNER1SnFodmRUalROcXNCY0pYVERDUkhSOTJNRHBad2dPTjJFN3c4cEJhd0l6RGxvRDRIb0I1SENMVURKNDlRYldDeFRpQW9uK3lBRHM1ZTJ3aS9LQ25FUVhqSGIzNXg0dkN4ekJVb0lJVzhyV29VV2dyMFFiL0hPTnBCV2ovMWl4VHVCaFkrK3B6NTUwR3lzRVJ0eHc1cDRqSVRkT0loaVVBRUo4QS9JUXJTZVZoWVlKUWpzNzdIMitjQ1F1R1g4a0hCQzhPemlGSEcwaEpjSXNZVk1nTHRndlVxVVNQOVVNRjBRcGp1OHVIeDZzV2duell6SG5VOEhrcitjS3h6ZFNBVHlURFlJa1RyYnVnVEFDUEJXVGZyR3JoRzllTDlIS1A2Sk0rUk5HVUpQKzZ5OTFiaVhCczdpcWdKNEMxQUhMaFFSQ1ZnU2tUSlE5WWtlNExOUVB2SWtkSm9DT2lsSTVDZEdBazlVWGhJNEVLWng4KzhHR090OFhxcGJDeTlvRFU1Q0t5cEsxV2NlRmZVd1l3cmNDb2hYOTNSTXNFSDdvVHNBRTBibThBUWd3Q01QcFViUkIwSTNGTDZRRW5JYTBzTXQzdmRBazMwTmNoS0d5cEhEYUpqWGV0MUliVStxVGk5azlaSmdmOVBnMWpIa0ZFektHRzZLRjc3SWgxd25oUjZqMXBpRGpqU1VPb05JTkZCcHJCeUdPLytCWmVzejc1YzUxRlJUbEJvbGJJT0psL0JwSngxWmVFY3YrakkxM2w0K0N3b0VZOUxLMlJFVmV5SjB2VE4wUFlWTUpGeDJUYXdneGdqT1lpeEh0UElDa0M3Y1lIKzhQNG4xTFRmNjlOMDZ2amdUbVVtaGdDNHVIdzRFbzJDVE9BZ0VENmlCVm53dUdSWS84dGdzMGpIc2hCRkFGRGZjTm1FcjJjeEM0aStCdUtxeXo2Z01uN3FBUXdaTm9qbmMxMVN2bUdIQzh1SEVSWGdrTWJzeEc1TWlHWVFKUWZrdDZBTmUzNFZITm5XY05EaUQxazFaRTQzNXZPekZwNGpBRDRjZkhzaE1Kd2hKZzVUQUZGdWY4MWdBOE1DZURVZHNHSWx5NUp4T2FJeExwMkRzd0Nza01uc0I4THZnQWZKeDlOd29Nd1ByZUlOM052UkM3TWVNWE80YkVUcFlmUHY2Q2cxd0ZpOFYxMXdUcmVnc2IyVWE0WkhNZ0Jhb2VpV3N1RmFOSlhMTThwQk5wOXRFb21NZUlDZUQ3eXJHemw2VmxLVEUvU0RaTFA1RVFnQXZrK05YamwyWkc0QWRsb0JPNFNDVlN3ZmlJSVpWL3YvNUVNelJJaVVlWEptcE9CZDRJWTh6clRSZzhrUVcrelc5WFdHRTBSVEpDeDRlSkVnQWdkd0h5ZkZONVh6RVMxUDQ5c0Z6bzMzb0VRWllsWHkwWjdER0w3M083SWpJY1RjbDZ2UUNJdjA0VWJrWm9maVdQRDFJK0V5U0JlQVBIYmZ6cFhRaUpIUzUwWU02OXcydkwvZ3k2QlBQS1Z2eGFEaGNqRVloUWliMmJnSUFDc3poUFRUZFJxYkcxeUFRV3RKbGhmL2c3M3hYSFM1QUJiS1FzMW82akNPeUFVaW96ZWJBd0VUVmZSZzM2U1lnM0tHM0pOK3ZORzdYd0JOamQ0SEtJK01BUGNha2k1SEJ0RERlais5Z3pqR0tZTU1USmlBQWcyNTM0WEZrTi9DR0doY1ZkRTB2ZUNrNms1YmNpSy8xelFkeUVseVRxSGE3MjVVR1lRREh6dVpHL29ucEI1WXJTZlJDVGZVTkdZZFkzbkhQSVpBSnlELzZjWHp3S0JvblBjU1BBRlpyUGU0WlZ3ampHcU1Yd1NpUjhOUERPeFNDenF2RDVyNWFWZ0lpWVJKTVVSRDVlOGI0cVB2aTdGNU1DNzBjb2J4Z3BrcEFyWWkraEtZcUxwZDhrNGlOMyttSHBrS3FnWnNtNWhIUGtsWGx2K0lxWnRJNDc4VDJFMjI5YnYvN3BRaEFlS1BCekpnRlNZWTZzQ094dEMzaDNBS0lEMmlqZVJsbFcrOEdMSGlSUnV2aGw2VHVjSytKVmhJWU1PVUlPUURVS1pQOExMTWhtbFhCc3lEQWh5andtbDcvK3Rqdlg5M3R6Y05FY0Rqdm1EYmloblJPT2ovYVJma2MyQ3laMUNHRGJrREZ3RnhTcUs1dlVLMTlaRi9ybUlSd1Q3THhUajJaTUZXZjJGaWIvblpNNUtCd29RSGpkM0JaczlnOXovY2RGc1ViYks2OFpLL2x1MUU4d3pPK2g2MEs4d0d6OERWblJlSzhscjBWYXhOZE1MNlJ1OTNHYjZVV1dobmpCZkZPcnBzclVaVmtVaFhHRW9mMzlxMDhtWmtpMVRYK2lMWUFhK1hKOXVLSjltOXRtSFdDRkhicXlaaURXb0xpQWZDekhDQWRZWXFjbXZCRlFEMytEdDJic0dWNEhxUWFuMEtrUTlnNFRPNG1udHlKQ1MvdzNWOElLNkxHeHdqaFlyRkFOZjhwK0lCVXllUkd1Q3RFVE1ZVkE4SlIybTBNQzg5K0IvWDUxdythZ0tPd09rZmRPNXVLV3ltaWdCQXZxTEdnSzRNNTFuOHY0L3V5b2Y3NlFqejBHOXBDeGpTaEM3TVlQd1IrMkZPV05yL0QrY1BUU0c4Q0dWbWdOSlh0L0JWWUcrMFBCaHlHaEJOdzdJVFBCQUdXcVJQL3hxbzBnYVpnWTRQN2VBRGlrQVRWeTdlZUZ0dTZ0OW9KT1FjNEZGUmc2dlByRjFNR2VYVC9FK2dQcXBnOVdodFNGZ0FPK0NJZVozSXNLeEY3UVFlTDFjendqbTNzc0NNaUNlcXZUbzVTNGh6a24yUTF2bkRvNkhWb2tocXNMd1RUQzJBTUQyUmVobnNXQU0zU28yd2Z0aHlaQUdENTM1WG41VmFRbHdtdW13bTBRTk1DRkNEM0NOY3Z1N0RNZURVeU9aajc3aHg3aDVOZ0hVdElzMkRzVmlJYktiQ29hVnAwQ01haDVqQVAzZlRGTGVCVUVsaWdIUCtTU0wvVXVsa3pRM3JmSEhKQU9VQ3g2cXR5MGN5a0FlcnNYa3lVVEdCei9HZ2F2aEdRK1p3UGxIRmluUS8vUU8vREJWL2tIY0dXY0FkblU0RzRnYXpEQjRRN3lsakJicmpkci8zZy9QMkwxa1c5bXNCQVNZNkZZUk0xMzRaS1lEZnNpQVFFdkNTZDhDanNQaTNpZjIwVElSR3M4eE96cmcvM2locUJQV0RDTFlXb01BTnZiN0JiTFNweUcxU0NRUUY1QUdDZHBHeWYvekxtaVRKLzJGYyt1SUZxL1R2bUZyTWRmT0JueHlXVkxXN0R2aVZFaWtlRHhBMVdGbTBYc2hIVUI1ekJyTk1HRTFtNlBNd2hSWUUwenc1blFIZXphRFZqZUlCTnZqQTc1N3A4VTc0UmpMUE9rM1BkNGJ1K2ZVQlJaK3ZUR2N2a2x2OG85SW5CUDZBK3BKSnZoa1ZoQkl4ZFRoQkRlZ3hCUU5xSmtJQWlHai8vNG5UdGo4TisrVkxyZkNiWHc1NFZCQlJPaUd3R0E1Yk5sdkMxdlRPQUpDaXpUY1laMG9nSUI3bU5sWlE0dnRnOGVnWVZRUVM0K2VLYk5kaURjQ2FzREJ6Uk41QkY5TitXSlZ1bUhQUlYrQk1pOFQvbU1mcWw1MUMwYmVmZEVXdyt3cm5rd0F5MEU0d2xoRHh3VGkwRFRXSDR3M0V2b1l6L1pIUlYyQjd3emVJMndOK25yWWtUUHI1UTlpcFhGL3pLTWluai9JZ01CWFd4cHRpWnY3M2pqby9HQ2FXeWZLUUsyYzBFVEw2d05JYm9udXhYREFKbU8zR2tSaHRGdWRyaWFha1ZKODVZMzhTU1pSTWRBdUZ6SVUzeHVYbStlWjE0bWFqMEJ3eWFBL2N3T3NzcW1HRUJTTG4xZ0diZUhtaE5HVVFNQkNVYkt5N2lVMFJWak5jQ1NBbmdFYXJrc21kWEFJVmozQ25TakRKSS94Y3lCVEdRek82SThCNTJSMWR5NGFHZ3VLM2RBR2tCby9XTFZva2Vxc3M5c0R1NHhWeUFQVUdXK3o4UitzZlIxa3NFcG4zT3VBRkEwejRWMGpxbVNlK0tCRWFpLzBvVjFZRmZMQitlRFBZTVd3NlFGd1FkMmpJd2JnTnMzNEZxTEhZTUlSWVR2czhka2orSFIxNEtOTmMyZFQ5Q2JIOHdvOUM5NDZOV00vK0lzc2NuckpLQkRMd0xYTkY1b25tZUJoSVpCbk9ySnpPaVJ6Z002UmhEazM5aUpjMGhvRXgxM3JIQzhXYWJXdlcrY0JUaDdNaVRaL0RyeElSSEtzRGRDZG9OWThSVkhLQUR6OXF6UVE4ZTVJQU5RL08rY2xqNEJHWUI4Ukk0OEFSVG5nckVuM0J5RmpSRGJyUGlGcStVWUFXaENUWmxkb3d3djhjak0yRjQzbDJDKytiNkp0ODFjWHM5bmZZZ29BMFlJUGdMc1FOcDNlZnp0U1RCRzBIQ2I2YUhXTEo1d3VraTdScys4QWJTSFQ0V0RaVVRwalNjWGVZZnBYVDRjV0N4Z05wdTFjNFFWRXNDNWE2eWRwUnY2Z2pvd1BtcThrbkVKTkFEZzRubkJCMU9RcWQwSW5JRFlBc20vcTU4ak1OZzBQZ2pId084OHFuampTK3dKVUI4d0NnN1hJSlZRSFVEUU9MbDJuaDBIbmF6Zm5IeGE3ZFpFK0tYaVpNRWNqd29jM3Y2a0trWDZDQkFMRmgxTXNXV3VBbFQ5OW92cDRBYmZJcFJnMjFnWDZIdmwwbk5KcllzQkgveCttVWd6NW54b0hvZ1ZMR3NTM3lzd2hneGhkU3FMRkU1MGNrc3NCWUJBMStmaU0vT1RRQ1RJRFBqSmRYc1lpRDI5dGIxY1VvUWJ3dVhQZ2NPUXk2QUZjeXRtZzdjbnVSOVdoNnlMdkJHOENSYWJNcEg5UFd3SE81ZFFCNVQ5RjVJNkttTWRreGcvQ1p1WUhhdkpIc043MExZWW82eG1zbXZmbmMwOFlLRnBIQVQ0SUxFc0ZSL1ZOdkVQcy85a2g2d0tPck9oUHpQVzRXRkRmV0R4ZURuc2s4Vk83Z1g2RXdhU1lXYStjVWxSOFh0elNXQXFYQTRYR2NyZXdkM2s3bkVRNzdtUTBPOTNrdCtzL2NWR0pwT2trZjgwMWhhVlFjU0lyaUVPeko1aXhDdzh6R01jZGM3bUJ2VlN2TkVMajlpTkMvTXAyTkVEUzlrZllRTFcwSUVtTkllcUhsNFVqS1Ric3liUXROMTRXSXRZSzM4RHFUSWJXR2NrSm1Rek9KYzZlbnE0YlYxVHpQTGlEalJYN053RVRVb0pPMExhY2htSWZGbkZrcUZHa3dPdHN4ejNTb1VQdmdqZGNBc1V5a2xEd1RBd055N1ZFMCtXTUo2REcrSnNndzF6ZjZzUXVzZk45ZCtmbXNManpHektmbHpLUWNCL1F5OWdKN0QzaWVhMmtxWUFjdUZRQWh6M3k2WW9QMDljZjMwbDNEZUxUMjdZeWd0M3ZvSk9uWTM5aEk1VWdwOEZ5dVFQNnM3N3dpTHhCNEgrZVZqb2dvL2liM3cxaUp1UEJMT0pWMWgyOEl2NVd5STdzYWl1VHJBK0JSaXl2bWF4Z1d5V1dJYlFSZ2doemw1cDVWZ1FtbVhVQXNzaGlWZlBwcG90WnlqejNtYjVaR0t5Z1FRL0FoTUFYMFNlL3M1dFRFSUhFV2NyTldHUE9XMDBIMEhyQzlmSHZXWWlEQmJ2TVhEN3pWbHVTNDkrY1JZczhKQVd2LzZtTFloNS9JemwvMzRZME9WNUVKZHJqVXpHVnEyQXlJcVFMbkZxUDVVUjZCemUzK05wZkFVNCsvV0RYOTltTy9qQlpkVnFPblVHZUVvM2tmZXd5Y1NqWUtrU3pySlkwWURkQU9sdzVLVlQreFBqblp3NlFRdVEzT2tDUWFMUms5am1BY05NMlhJbHdqWVV0djJjU1NTREF6SDhzVzRsK2RvSm5udnVGc3Q0VDZWSnd0ZWdUU1ZzWHEyY1l5OE5SZHdmRjIvUVFnZG1lQWd1bU0zOFJlakpoS1ZIVndsNys5UXBpQWJ6a0lzWUlPaEVNL3RhRXVvR1NNRTlWT3NlcDdMTmc0MElyQVhoWG00RmtySHFucXh0REJ6OUJCNmg5RUhDNEFuSVVqMTlvU1ZqR3dvQ3ZHaWV0ZDBWcnVqQjdDczMwRS9lZkZzVGdUNUNUOFl4UFlMdVVHYmM0Z1Z5SStvdi9OYjZaaXdKWjRNWVdjdzR4V2FWSWp3aG4rTndaQ2ZpbDBqYlFYWW85N3BZZmdnazVBblVKdUtCRG9WWUFIc1lhZ3Jlc0hsK0RpeVc1c2NCZUZod1NhalRHM09GRTh3UDB2YXVhOTFjRWlJZGNLNHB2cWFNTVlMQ0JzQ1gyUDNqSkFETDEwWG1BTWdSQ0RjUmdzdUhmU1dKMmdJdUxndDdJS2UzQ0pDZTEzd2p2amJVQ3A0YXFoTFp5anBaSmpZZVFOTWV1MGtFendxNGR6WjFMZXdJNFpWYmdvUllWUWJQM2RDVzVmMmdRUmNYa3p5SUF3ZHhWL1FNMU1sVVRBZ25TbmJQa3ZCc0REeGN4SWx1THVnRy9rQ05lSkxqcnlJL0lCcFp2VmNqbU0zZ2dreVRJNFZ6TnZteWJjQ0ZyS1N5SU5mUmQ2ZzFCRkVxVDBxWXg0Q2RtM2oxdkJ5dVpDR0psSGF0RHdHUmNGSHJiS1pWWE5HalFleUp2MThlRk03aWdmWExDeXVZZzU1ODJGd1FGdmtMdVRXQmcwSXBhWEovY0l0OHZ4NjBiajB6RzlPN1NkZnJ1U1hqYUU5TTcrM3FjR1Q5bm50Q0xLelZZZzhDYnhQdVVhZmxZMDByR3BpQUZSZ0VCVGdnYWk3QWo1VENWaVgyNTJZOURTWEU3SVp5NUJmaEo1NHhFbTJJMU5FMWg3RUhhd0x3akFJcCtGN3ZCdjVhTGphUHhTZEFoNmN2ck1ManVWODZ6MlJwUmV0OGVnOE1EUGE4Q0hDc0FSalNJQTR4bnRTaFpTUHpNdGV3UGxRQ1dEZ3RsVWlzTWs2VndaTlFMQytCdVJQQThwczhJd0NOUjNyaTF1ZzlvMEp5ZTJ5ZCsyWFZtalU3MENQSVFtRmhrWGd4d20xYUxPN0lQT1ZSckR1OEZESzRnckMwNWI3OGc2UzIvcUwxNzFJWm5tejZ0S3BrZWtxSENzRWlzUGJhTWlDRDd4S1Q4V29ZMEloR0dTTCtZelVSVElSVmc0dncyOWZEajZBczBORUd1MStvOUtQOVB6eVl5M3lRYzMxN3dLV2ROZVFUc29kSUlpTVIxM0YvbENvV3ZLOHlkcnZOYVlFR1hQQ0cwelpQWDk2QXAyWXIxbUJtV0JwMHlsTW1naVp1aXNRR0t3WjMrcDFqUG13Y3FJV0FGQ0JuNERTU0sxSFpQSVduYVEraDRVUHlXVTdTTVAvazBXZ2xkT0h1T3hkVUIzdC9kMGpBdkU0MkIvZlM0TURaTHhENEpscHllN0tOOFdZZ2s0aUFtdjN3S0lncjhkd0NDZllpVzUxMUV6b2VOTnBGOEo0UFNKSFEwRjVreEtQakI4NWpEQW5SQXVONTljSkRZMTVQZ1hCOWhNczg1WUhFR2VCQzJMaHFoZm1EK096N1Nxd3ZoSlQxakUrYzM3MDhXdWU5RWFkVnM0SmhHZEMrVTFoMWt0eTlLT3gxOUN0Q01WWEVwWnRpeWRZMkE0Z20xdnNBN1ZvYXQvazI0ZXpUeGh2RzNpeFh3aThKWk1OeU8yNG5YRVFmMUw1SEwrWWZlVnQ4SW5ETkNPZlFCdXVaVlNqZDAraVp3azhkMnd4QXlNTzJ6NGdmSFpIYk1FaENDdHpIWWdGWVRGdk4wbU5DMVNMMlZpVU91TElIak5yaWt3MWZTd1ppWXQwSDBDb3d1WUhBclJHd1lCRUJzbnZ5bGVhTXVaekhjbDlXZWxxSVN4eXR3MHpIbnJuLzhKWmthWUZISU9NN29zakRUSEQ1WkVSWTBmTVZEdjJOTUhJQTJZaU1oMjE4WUQ1czYyUm5XTW56dGNKMzRLMlE1R0RSSGVybzV3MmFxdnB3RVdJRkhDVDgvT0RQMzRaWEV3d2VaRGkwTENORkUydzdBZWczV0VhQUJQSUkrK2lYQjlDS3lZTktYTnlUU2NpSnVSVEVaeGp3Tll2WmlaWkViaUJabzBrL25DbXozNTk1U0ZQWFZ1QVRZcUVERU1nVzhROHp3NUQvdUFpWTRaWDVWaWdUZG1vUlQ4QWlwYjJnS3k0NFp1YUtDSE1BNml1ZkgwYjdZdkVPWWU5RnoyR2NnTUhPbGlud1RsQ0E1ZDRRYzlOWDNsMDkrUVZEQ1FEeGFyQ29oazVBN3ZLR2ozbUtsdy9IZU9EbG5rOStmZ3B5NXowVjNIQzlZZ1VNdUJXaExWa2pCQmdHZUlRTlY5QURVV1BKaVE1SCtNeFEwVVdjL3p3bmhQZGdIY1hjUlJFQ2lURnJZWGdFcVJ1SFJ2UGl4bGNObmpLaEJJZ3pzbUlRR0p3d2M1Z3N2SHpoaU1QMWdMdjRaWjM4QlRjMzkvWkk1eVJIYWx3VzZHWk1IT1d3TW5hREdPSnRsZnlZSmg2STU0bHJubTlrczFjMUhjazdYMTVpRWFISjNMNFRGMzZ4bXl4a3kzQjdBSld3VjRDUURNK3pCbzhRb0ZLS0NDSVA4cjlkejJrNm9paFpNb3RWZ0ZHdlJSbnpRcDY0NzVtd2xqYU1vaWduUGR2NHV2S2RMUUhLU3VjalVyZjIwdnFTR3kzQWxRSGpBNXBrenVaTk9HMzBIVitQZWpldVQzVHl5Sjd3MDBNRm8yQWNqVTFtLy9rS0FwdjNCZFM5S1N0VkxKZjBpQ0JmK1NsV1Z1TFZaaEN4NTNtRHFBVS9nWWRiUVc3ZWZwdE9XTlhhTTZ2MlRmNHMrU3JVQ21xUWlJRHpncFdXYlhFWnNTeUtEcDJWRzN3R1lUNlpqSzlmNWRWZGhXTnR3Y1pNMFNLb2JuaHZEQjRBd3BGRHZONUgvNEdlSSt6RlNVOTBYV2dnVFNwSGVBa2g1QnQwNWgxZG9tcWxGdHdVaUVQM1lhSHFqVlF2MHlMRm5wVXZlb1pyd2hodisxREI4T3dNc0M1N2l4RHEzMnVsZGl0NGJKRm9LVEZteThTSU9VMnllT3BjTFJ4SjFveXFXWkRWcWtaVzYzM01vaXJkY09CczBjQmp3a09yVDUvdERueUc5U29RalhoSmFWKzJXZThDbUZzM3RYQmJWMmR4aHBXUGVMRjVTbk1ZMVZESGRxTk1zYUY5SjZRSkVoZVhiTmpSU2JobU9OdFU3cko1c0RyaTQvUWtaWGxZaGZoQTVRSDl3M3dWb3ZTekZTRjhDdmxxUW9kWGpNczZsVFpPcTQ4eDFDby9VTTZLR3FUd3ViL05sWE9EeTJhZ1JCaHY1aTNSL2phTlFGYk9yNWQySFVqcjFzVDA5L0VNL3hSWG5hUWpNUkQrMVFqZ1hIQUxudS9Cc09SdHVCRHJWNnltenljZmNwZEwveURHNFpWSmJjL1ZFQ3A5TzI0MlpRRmc1SWRkc1I2TU9JZUVZWWt3NkJpeXJvUXZoSk1ydWp5d3hnQzJ4NlpGYVpVczlrVitjdUdiV0JIYjl5YlB1b3E4VzhlNzdaUkJFY0pFVk9vQ0FKZDAzZDlKOUFLRUhsd1BQMVZGQ0tTK1pnSmhhVUhMdDNqNHNXMXYyd0JSb0pIWVA0dUJ1WG0rL3F6TEUxbDNpazBCdkRwbzEwek5RRFJ2NnljYVBOYVR3R0xoSGdTWVNNYS9DRE5vMlhyVmNZWDNnbmRkRFo1UElNU0lYdXZoZXo1SDB1aG5xSENzeXp3dkp2d04zclBld1NLZjIxUkVWa2Zla0g2Qy8zb0F1d3N6MmdWQ1lTOEVpd3JxWUFMWkpQTzR0MWsyY0JNMWlId0hZUzFYOXpUMTIxQlkxbVkvSGtTdEZ5ZStibXpodGxwMnZlVldiNGIyZVVMd0pRdFE5b3NVakI5ZUNHVUtjQUNiSDlnUWM0YW5JTW5jYUpTbFhBdDIrTHpRR21FeVd2RUhrUFlPVnlFU1k0OUpOZnhwQnpBVzVUQjZoTHZDVVY4RW5Ha3NwR1NEUkp5NEQ3OUZCSlU1VWVJc3R2bWJFdUFlamIydnB1cE5NbHFUWEMxM3h6cWdVNFFGbHZRSjFkT1N1Uy9MSkluRm1FVWxESUFVY0h2VFczVnd6N24zV2xnc2tOZ2lENklmRWV5OVR4VXpxcXRZM3lZdmhBWmNpTitmYmt3cmVURW44UUV3ZUhzd28zTWJnTGNGbWhtaVRnUkFzWUJuQTE1azlBRmZYR253WlZsV2JVa1o4ZnRVOHlLNENXa0txU2V0VTNlQUlJSFFzakFUMVEySjhLZ2pEZlJNaDUyNzUyd3lDQWpQUHRYMGxpVGVOeG9kYWRWM3R0aWhEbzNOSXVtMGpESzVTbmVGSlZ1ODJ0OHlUZGQvbm1yNnQ1a21JREtuQytQSXA0cCszaDdZV2M1YTJvMC9QMmh1di9IYWoveC8vM3I5SnkvRVFMK210QTY3Ym9zM1FkeDQ5aGVzY3VObWV5L3VENldQQ2xEMGdSSTVxcTRKWmNHTXdla0hHcXZVbzFaUHFScEVRK2gzajFIdnRxZnM1ME5Dd0p5elo5K1F6V2w1L3BRMDIrRlFvUmtWL1BNd2JzM1h1a0VMT09wOWloeU4xN0NRNUZudWE4ZldaU21lYUZ0dEFTbFRrWVlyUlE4MUtzSWh2eFdxQVNFQWcxQmRIZ2lpa3BEV3VHRERYd2xoZnJ1bmkvaGI5eWxRdEdUV2c3bnlVMWFSMEt3Wk5nMHJUczAybXZzaFVCREZUTzVhOEUrNEdxajV0TzI3YVZmZjJnb3N0N0hwUzRLMVFaNkE1eHhiaDhwQ1BzeC9WR0xQVDBaNWVraHlqcmI1VUpRbVNpYy9Wd2Fsckx0NnJGSURBUDVoUE5qVUwvT0JtbWxBZnRXQU5KLzhWd0h4cE92ZkNBaDhiMkhmNEF1SVpHRkVCbER1Y3p4dWt5QStyRUo4Z2tTbVRValJ4WTVpNXg1OTI3a1FaQ1d0ZXlqWElFVUd6bXJZR3paL2VmQitFMnFJdy8zZTdHdTBIK1d6eWFMZTE0Wnp4ZUdoMnB1aDV6Z3M0ZDNERDVzN29oMWdGamExSWlHQzBzTDR0Z2JJVXNJVUlWaUp1d2R3N2N5MHpoRG1tS3hsSnd4b1JlalZJeElNVHkva2lJVjh2bUw4QWs2Z1Z3YUZkSCtJWmhEcjUvU1hYY3ZhRHNETGlvSTc5b0ZIR1p0Wkh5dHhOaHdFaklKQzh0YmJWdU8xTEgzOGlvTUtDT0xwTmFWKzNlZDArZzc0UXJUTzlBVW91V1VUR1BhQ1RJdE5pOGVHcTRHSDJLYmNGUEhvWWVoTGtMREpHMVZhTDh1OHh2c2huVHo1Tm1jYTMzZGFTNVROaXNyZ3A4MUxyTU93MkMxNlY0UUxuRGQ1L3RlbkRSbHBYajhWNTZsbXk3clk3aDFnQ2NOT0VINFgvNFFVUGZPd0phOE05dmphSE9SWlNOVk83WlBPL0hoZC9JZHR2S3NubnVGV0FWYjd2NExudERKY1hCbXc5dWhWQ1JjOHJiZlhnTUF5OGVVTXNGdXFrUE1GdFZYekFyQ3NkN0UwSXdSNzFCSVh4TW9qUVNlL3h0dmk0ekRMNTYwUWlJNXJOdTBoeGc5OXdFYU5xMmNDdWNLNW40NkIvbXBBbzJXUEttN2RLVTU3NWxGQkg0VC9GVmMyRnUwcGVid0pvcWVXRlpwRDdFZXRRQnJTWTQzeDZmK0ltQ0NLRnA1dlRZMG81WGtYdkxvcHFnRHp6MnBLWWpNcVMxVUgyTXVQaExwdm5Qd290OUh3b3Bvd0R1TGFPWjE0QlNDMkZLS0JheXhnRFM0TUg4TStKV0ZRb0tkQjV1QkhaWjV5U21KOFptTThYbUxGWUx4c09wb2p0UEhlZk1jUURrTGNMZzlBY1h1bUltU28yYzVYU3oybmFZRmxVU01CQmFPVFFXZXIwRUdLMFdYbnFYK2IrOTVvd3pzRTlia2xKRE1haDh4YzR5YlhTZ1JsN2czZWJEa2FabFRhNXc1UHUwN1pPS1Q2ZDV2d1hhYU5NRDNDT1lyZlBqVStQZFNmdkZIeFhNUVNHc25wdGxMSFhNMnJYbjR0bkVSNm9HbWU2bkV4R3RPYVlEU054VmJ2dW9uWFlOd2dTQUl5MTJONVZMUmFQeE4xWUd4UUxTd3J2S2I0UFFjMXRJMTRUcWZrNzJBR0xtOURIMjZDcVZpWTVwbkNsYy9Gd3NwdjAwZUJOVWZjTi9qelkrRHhYSkxiUW1UWTl4VFBlZGZja0duclR0R1pZRHgwejJrQ2w2bWRuUTZQTU50ZFQ0S25tT0Y1ZjUxTS9TWEQ4NTNXUWZINUI1MFBOanNMNVBwVGZ1Y0h0WC95T3ovWm5aUGJzVFRuait6Tzd4d09RZWVQMUk3aUQ2ZVZldUlVaXhWNWJabi9VTGpJN1owbHFGOExsbUVaaWROdForWXRzd2tTU01XN1p3TEVQSkhoUXVoN0JJQTJ0d1NBblFzbXczTUZ5bTBraVd6VEdzQkdQTjNGTWwzN2tpcnhMUk1JOGJUYVBXMGNGNVFMWHFYWVJ6Qit0cC9jTXRENTN0WTZ2VGF2SXBKWlB4UW9Rb1lyZ0NsN09wV0c0aUtBcmEwQzhkZDBaVTk5aUYwNHQ1b1Vyd2hXTHRoc0FEWVFFb3FkTFEyWmMwL3pSVnRUV3F6YThPQXBZTG9RZGhRdUpOYWdnZ3lHbzRTSWlKNmpIV21CVVBQVXN5VEJSQ1FoWkVHMVY4UkQ4ZnJjVDgrL2ZUTDFnc21pWXZDM2srTWlpbVdQZGowSUZWQ3Q5YTBiMzM4TGdzUHVyV0hSSENyVkUrL2JPSEFUaXI4WGNkeE5UcktpcUlhQVp4ZTQ5bGRxQnBHNWVKajFNbjlJckd1djlTUGRjb0EycmZDeVJXVW9YYjZSRzZMR1BsTFA4MGFCNlZ0RGxpd3YrT2J0TVJxK3ZPUkNhT0ZUSXptOVpYNktyTWRhb0tFMjFCR2hRcjdRclVSaU9EaExFazl1R0NRWWQ3WVJGQ1RCWWZrUUMvUTlzN01TaUFWOThWYTRHTGFFVVd6YnFFdTkyR0hvVTdjWUhDSCtKcWpFQXFxRVpweVl6NUFzKzJud2VqUGFiM0RLUWlKWVJ6MHhQdVZVYnJGclg3YWREU25XTFVmRk5ZajJwZHNsQUpzd2hyTVJIbXMwZWN5Sy9MRDVTUzM5MnBEbmxYUkZ0MzloazhtU0htU01LUU03Wksxb2JUYnAzZ2RKOC8zSFY2ejZCcDBoTC9qZUhaNW9EY0c4TDNZY2k5ejM5NHkxSVQ1clE3Rnd0aU9DV1V5VEpKV0wrQ3lOZUg0VDRtQ2JTRHQwZUthdjhXYW9JL2ozcDBES0pzak1aU1E0aGIyK21DcEFzQ3d6Nm05VloyNURWSnZXWFpzVnJlRXpiTVVQTG5EWjE3MzZHQ1lJaHF6TlhtWVlMM3paeXRMa29ZS3RGWHFTTGMzRUNBREhtbHhya2pDM3VMbEpGcnVzWlU5TExCa1Z1b3NGQjdqU3lXNkNqZlp6ZG9oVndlL3RCT3I3SHRhd294SWVLN1pDTG1ZUGlPNFhxMk11MUtSSzlqaUdUY1BDaDBtZmFvYlpUblhMMTZFTnhmUTkvQW9EWVhmaE5YZzBHL1ZZOGRpdTAvcVMyVHY3cDlFcVdCQzNaWGRWdUFmRXhXS3RHTjdxK1pMdWE5ZWJkUytJYk1pa1djcWtwb1dON09VcGFEU2hTNHo3cWZnYjBOT0QyS1BHTzNRcDQyTjNwb1k5MmRGcENqUUNzTW1aUzhEK3dQdC91aVRadTA2MFlDOVllVnVINFBPKzJ0QkRsQVBXUTdlbm9FTzNoaVg3RzU1cmRGSDFFMWI3WlFVYzNnV3U0b2dmOE5YdHRRbjJDT0duWUljamE5Z1JaUHV3OVJWN3dGQWtsaWVLejljR2VSaWgzYXZJYUhTMDRhaENNaGJhTjMwZVM4Y0JWVHA1TEh2T2lCZ0lMV0xHd0JwcXEvQ2NpWTl3a1o4V2Y5bVhoN01EYjhxTGhCb0haanhWdEQwWkFuamJCbzBDWnhzQXhtRTVDbFNIQmJ1ZisvVG9SR000bHAxaHVCcU44MEZLdHVFQURkUis4bytMcUlxb1FGbmNsa3gzeFY1MlJzckNQdGlqVTZac1VlNVQ5bVVoWlRSeGl5blhFK3kzOHJ6MjArS0VXME5qMlZqQ1l2WThzdjM1TDhOaFdaK0NhNlhMR2trTERnUEIxSnplYlNWMGhSdHZEekdzRWJUdlBpZVBGay9ONHVuUnQrM0pVc3N4d3k0MiswQkdvY292c1k4b0JMQ2RzL0liem1FbnlOTDJ1RWVXMDhraGhWVTNFZnR1QUFUL3RrZXZ5dUVRd2QweXh1SEJJdllSN3R3cUJNQ1QrZmdrRzNyczVnLzhQeEZZSFAwd2pWZVlTekxwOVVYQUF1amo5M0R5QzVyT2o5d0FTRlA3d0M5aVJNSTR0K1ZYSFhPMzhPSjk3alFWaXZLd2MrQ0RMVGxPQVdNMHk5SFdoU0xISmducG5wdDlOdDIyRXU3WEkyZy8yS0pwMnhVZ0pYYXFDcVNQUjdwMk9DZG9LVktqZ2FYaHVleUd4NWt4bnVlcmc3ajN2ZCtwb3cwVFViQjRqeVNCSk9TalpaK2JBTHZNUFVIb2dLSjVpdlB4NzRid2UvTnlIbGg3ZmlaNWdLckE2WUF3blRhZGFwVTJ2NFZmUHhqdVJKVEEzKzBwT3QyMzdOeHA0QnJqOGlJZEpXRWRRbjZJWWc0bXdSNzV0SURXQTY3aStvemNJTnhJN0NKWElBbTBzdkJVb1RtOEFLTzZUbFVRSC9DNlN0MzBwYk5pR2l5RGhaWC9lbFpoSlRHTHg0SUU1eDZ3VTU1VzVSdjVaK21hSnlLWGZUQUJMT3RXY01HUzBaM29Qa1NneFJpd1RsUTNEREU2MWFNTjk2aDZoQVBnajJkcFFEWTFRZGpDRlp1Tlk4bDQ1a2duR2FDREpyVGNSd1ZhVDY0UjQ4Y2tyU3o3ODEvazNHQXpwdkxXQ3dJOVpSdFFaRHpnQmtBZ3I3WVhZNk5Xd1V2bU16cEcxcCtUMVEvTkE3SEhSb0RhUkpMR25nV0gzL0ZEYTN1SkhzUktMVEJDbjVOZHNzOFAzcXpibmd5TDRJSVZBWVh3THNPeHB3bWVPZzBjL2J2K2pJNVFTR1RKemJKTUEycXlOQUR1OUowZ2w4NVFnNXV0dWdXMmZXYUFDRld2UndIOVVoUjhBV0Z6R3IvNkdnUmRDOW1pWjMyWWRTSzhZVURJVTNQRkpwV3dRYnVCVG5FeGZ0UTJUbUJmOXNPcU9CcmtDTU0vcmFPSlJyUEdPSnBGMWcrMDNlSmVHRlN4emhJejhLd2V2NnhIa1RsS0pVbGtVZlZuSjRkNTNna3p0MTdIQXp4RXNIMlF4VjVjYXdxM0tOSWVSOGw0b0FKRkErZ2ZNTHUrWjRvSTRHTEhiTFJwMXJpWVBWRzZrNDVzaWYrZmNiSHg0Mlh6cjRITlFtVHM4YnNpVUptc2wrSDZvWWpkZFBTUmNwWWQzd0xuUG9UY1psSkxtOTMvWllWcnFuek95MVhhWWJiamhiREcrc1luZ09wSm5uK3JpdGYzVEJNcnNJM0hEbm1FWUJxblpVaUNONUVoajdLbndLQjdobXBlcktBelpqN0xXdUFjeDVCZW0wbXNqMEFXbFFwVzIyR1Rta0l5VFp0bFRwRTBETnVLWG10UFUzTmtJV3lneVZOMW8zcWEwN0lDZ0t0c1o1NE9RSUVrS0Zicm1LdDBsazB3ako0cFFoRm90VDIrWGl6RytPeGJyUXRVWURYc3JWbXdobURiTzl1MWdhVnFqU25mWEJHR1V4M1kwckZSOEc4NUVNVlZUUkN0YVNyeWpPcXhoT05NQWJxamZjb2Y5TDNaUmJPa3lZMUxnL1RCcVc3TGZ4OWwxeW5ZdTYwT09ydG05U3Fhbkh1MWRyVlZtMktSWG9udklUdG1iNmNmRkpiU05yR0lxM2pYVDY2d251RWhwcER1ZFlId2Q3WUI5a1c5dHBvSk85dTVRc1BYZUw2dUJJSTlJSW9lak55aEFNc1VFT3diRnNIVzN2ZEpaZUVpUDZNVnVHdFVpQVhNZHpJbkFtZHA0NGRheDcvWFAveXI4b2ZyZjF6L0FINWFPR1FaTzNiTnhSSWRINXVYblJBVFBVaTlaVFhiaW1yekRjc1RkL1RkQWhKcXNsRVhNL0ZrRG5jaGRqdkt4c2s1WVo1RTAvMWM1L1RhT3N6dVNKTFFHc1E3R3kvNTNHM2xhbkR3VGJXSEFsY2ZpdTlSRnBiWmk1MHQzU2lCV0E1WHNFbGFpWlEvSEx5YUVpY1FJL0JPU01iVmI0OVJrdFZRTnNlY21UNUlaTStKYW0rWUp5TFdaTmlGZ1dCaXUzNGQ0N0pjblRBU1RkM09CVlhEVnp4Q2hwSlZodzBzUHFObkM4blBJRkQ5K0g1c25yTjdGU1QyWW9aVk90Z3pyM0pZeHkwbGRCcEI5OERaUVRoSHZZUDFFVjNMZFJNWitLa2R5ZG1FU0xtS3N6WGdudWd4akRvSGxGK0hlRUdRdWhNdWNMc1Z6L1REMTBXcVQ3SlBNSHVBd0d1czVqd2RpUytXalVxcjR5SGFGUFNEMVJCMjRYeTFJZ2tzY0pxMlh6dThJSnlZK2swLzFjbC8wcDZSY2VRNjJBVkx6d0YreTd5SmNud2lXOUJ0V1B5UURPcStBQ0V5dFczOTFqUUxqWm1Bdml4aWtsOU5XN1pzSDBDdVY4ZC9uZUZVTDFqK1RSdTkyTndQN28wOW1SMDdkYmIzWjR0MlJCU2pNNHZWWmMrWlJRRGxSZnpOY2RtUkJiV3hsZk8wUXJXZndYTklXZDRndnV4Y0VqRyszRVU5SkoxQzJ1enB0SEpLUWhTVkNNM2hkNkROdUtYWFp1ZkFBVnN1QUJUZTN4NU9JZ25zZGxxeGx4emdZRjFCMWJXSnhPYVZJYlUyQUYxbDhPbGNtMlVhSlhKOWRiUC83SDdDMEx1cEM5TU5UN2NzaE5XcDlzODlGZzRvS3IvS2ZnQ29oUGlyRVhtYkxkNG11clZpR3llZGFUbzlSYkpQZmZ3YTdtSDdEUEFNUzdGRVhyRTB6c2dSMU5NNE0xbGd5cmVqUkNwNFI2Z3dHV0hWeHZUOHVoTFdxaTJINkJ0SDNqaUpZbHJuaVpzY29wZ3l3WUtZTTYvMzdyemFnUWhPYXVHdXNQZXE4czltdys2MVNpVW8xUVFkdDN2ZW5HTWh5R0tVNFpFbWhBZmsrM0s0Ymt2ZExJalowYWJLOTV5THoyN3dOWXNMKy9QWURrRkRPUE8wOGxTZ2NrZlZSWWQ1UnV2ZFVLU1hjNGxRbEl1QWczaUFONXhDY1NzK1grZ0FTaGpMNmw0SktBcGZmNVRYd1lLakttM3kzRjloTmVQRk84Tzc3R3gweW9WRE5NdkhoVUFBOFBYRng4RW5wMk9BeW50UzhDd2lhMmRGcnlQdkhOWEczMUFUNE5GVzRrRHpsN3lPRURYVWsrYWtBdTV6NmhFOU1Oc3F5WTI2c3lpMXY5MGpWL3piN2hkRTJrM3NQKzJ1TmRtejIyNHo1T0tNS1FHUDZpMFFLa1E0TzBLU3M4S1NVeXpEWitIRU16ZEUxYXBTL2VWYWV6bXZBQ09Id3J5WkMyNFFFSEFBMTEyVzZlSmRrSEE3V2VQNEdYbGtTWHl3NnJiYUFFdVlRenNML2s0SkdTdHN4elFndm14UHNGdDYyV0J1M1M1MFZjaXFHeXJ3Z1diTjJYNndnZDR0Y1dCWDRCYjdKbVFEc0RkeDhTeHNzMTRkVS9DdU1GdVluSzNlanZjc3paWXZRTE56ZzQ3VU8zVWgraHdxRTdlRFo3OW5kcW1kL2JBdnErbXhISlFYL28vTG9wbzduMkZuZkpsSXMxak9YTFBJV3c1Mk5tK2gwcGxlbDFQZ0xJaCtvWUp3QXhUeCtJZ2NMd3AxT2F2RmdHRnl4aFBtWXBSNGkzWEphYU5seDVrMFo0Rlh5cGMrbWV4YWFTZFh4MzVVczNaYXA2TXlXOVdobG1uS2RVWUlXdEQ3aE0rSVlTUDQ4dEFjNVFIUHRuOG1CaWVEZkI2Nm5vNk1XdzZKcUYzT25IM3N4YzI0REI1cDNReU1aellIWGtBOVV3SVI3Wi90RjlxMm01NG1hbitDbG5xMk9tdm1sTTUwQndRa1N3Tk5SVzVIWGpvRXhnaEpSTEpSSFJvL2xhUTRMU1F4ZXJwUjdKREVlKzZHZkhxSks4RWFXT2szTjNSN0taOTlScWZrdnBqZnhEYlE1Tnk4UXordUZ1L3RkSmRLR0Z6TzdKQ2tUWWZ1ZVlScDI4YzBMWHlmWXR5SzJPR05xL09Nbks0UVBUNjR0ekhnc2dFU0lac3dZdFRnYTYvNXM3bVp5bkkwUy9VZEhRc1lzQkhUdVRTZEtCUk12endxRFhDVWlPSTBwR3RHdTBZdE9CMjNnOExFSFlkUnNNVU9RYW04dS9sS0xPekdnWkZLRUtCb0Nna0ttS0VoZXFIb2NGazhiTCtVZmdOTG05dEdNa2RMd1I2eGs5NnpoY05lUjdmdTB4NDVaeGpsSkRzQnUwUitzMmpYLzFOTHpvWml6MWZ6Y2hKejlBRGp6T09ESFNFRDBpTXZ6V001R2NCMlFQZ3UyNGNtNmhrYkNlZEllZGxsazA4K3RTY2tyWE8wVmhOQmJYOTcwVTdKWnY5eldvOGF2SlhOQmFBQ1g5N1hZaVNyZG8xVnRzVkFkWHJOWitvQUxrSkljbTdIZXJJdDdjWFpRZXhOaSt1endSQVBGbVd5bEE1Y2w5ZVpzTEFTZXdEZmdKazdiVGZFdFZuMU90NW8rbEl5dHZkalVmM0tZSUIxNVJDRmJuY0xoS2ZwMlVvRWk1blNpelZsdDZKeC93RmdLOUJuaTlqNE83SEtvKy9IVXZWNmNxM0JvY3IyY3hTMFBJamk0QmF1Nkp3cW9BR2l1ZE83bThxemhwMGRkdzRlRE14QlkzZzhrWStZMXEzT01qdG4vcWZIYzJGZVJETjk3L0RJTVRNaDBQbDR0ZmJyY2ZJSThxemVWZ0RjUVBISjg1ZzVLSTREYWY5aE1jdjErdzk4Tkc3MlJhVU9YQkRUN3k5YWg4dmJyUGVZYUhQSEI1VXpWVE9ZMzNRalVDL3d4TTlCQWFkZS91NE9oU1ZzT2hIcjZVNjdPK2RXMkFvQjFTUEhJeVN5d3dDeXJqZi9paTBKNW0vYkNRUmludkdvZTZ4cGV0S3FlWlRXWjh1djlBWEZEbE5BSEhZMWlEM3M5cHVBQ2ZsTTVRWHg2dVhzOGVkTU1ZQ1BEWUpSc2UrMW5sRTNkczF1YUY2QWtpVG5OY0JpYmlkeHZhNy9HYk5pbHNmeDErMUNONFRUQVdEblViUTljL3ZCWGd4Ym83ME5KMSt6U084dzdXTHhiSGV3WGlldW51b2FYQmYvMWZ1M3ZZZ09vYjJuazRzYzZmWFp4SXc5Z09kRmVFTXhES0NzT1JqcU0xTGIvUDBSOXdoNmpyN3plTFdqOHNxcEt0NzJvaUNXbkxsY0ZZTmdWbWdlVEZoYXRNNkFyaGJ3cCtic1EydUtBSURQQ3Z6KzFNdm84anFIcFhvVjFxSVVELzF3TmNjZGpYYkt5MkVPQ1lXeFBmTW1KaUFycHNXTm52VGZaN3ozR3k2bzJEK2hVUnBLMEw5cXloY3pRNzZKMEt6aEdXN1dYWW9KTzMzeDVzdUZjd1RWNC9nak8ybUtReVQzR1ZudC9Ebkl2UFV6VXVaaHZhUGRPWksvZ2JkT3EvOFFSUTV5UVdVVGw5MmtaZThFYTJuQ0RTOThBWExIMkVYVnBTMTA0VFF2VFJPYk1DTUgrVTVGcDNsNHEyYXV0d0hKQVd0SURyUkdGaGFiUkFoNnpsb3RIbHR1aHdFNHdvYVZjemoyN3pxVnc4WEJEbFByQldCRGRBMUZhUFNReWZxUUdSeU1MUTVYdU4xWURqRXVqb1NkaWRkdDFwUGRXNlp4UDVEVzUzYVk1cjZjRTF5Y2grYzBSTXpaMDVwd0wyQVNvcy9scERNdmRZR2Y2UnlSOGdjNCtUSU56bWRtUzdrSjdjOWp5YkNlYUhjcksycWdzcmtQaWNqMmVOdjhCSm9CQndubTlqd3VjSlpvNmRHUkhpd2dsTVVzdUk4RldaYW5lSTU2MHJ1WmJ6ZzFCRHEwQ3JSdFdwandPcGpOL0M0WEhkd1NJT1d4TkdRNjQ4R3BWK3VLRURJZnJZRzJRcEJPT3gybUpUdk5VWUxXdTZPM3krZVBjTUNpdUwyZCtDQWtMK2lDclVNRURKaC8rZGdrRHhDY3pTQmIzUGxSdkZzREFYME85WlNpT3NuNjdiY25xdG54VkIydVBaSmptMEdiWlkzeGhkcy9zMlFrcTdNV0ljVDNHZU5iWWNoNWIvbVBPMlcxbG1lUFZnN2REaE1KMDJFYmM4cDZJUmJsdVR3MmkwN0E0ejRyZk5SQmprR1ZINTB6YjlZZ3JRN3ZNVlVNdDBKRUo4aEY2aUNiOVNLSVRXaGJTZW1hTHAxSGRwQUt6emlxaCtqQkk4eHp5YnhOVWc0N1RNMlRkV3hFUGh5TXZnN1pjZFpuWEpDOWl3WE1HWDcwZHNmdG9UNlJNdWhhaDdvNUUrQUk0dGN5V0JhRG41bUpQS1YxRG5xNVh5c0VpcjBGblN1S1o3NEhSTFBZclUwZzlzaFhkK08zKzR5Q3c3SWtKd2NmNDJFcTB0TDBQVEUvYk9IQjJlWit5M1ZzYnVPMGh6SHg0YTNacnV4Z09FemJUbTNyNW0rVmRiS3MzK0lsNXpUQ1ZJN3NhTTdObm5uWndmSjVFalJPOWlLQVF3VFpEV0t4V2w5M3d1RmcvNGFkNWNGYXhETzQ3TU9PaWhWd3pzZzhSKy96cWkzcmp6Yk5nZFhSbW1SRWFZMm42UHVGU2pnblNmWVF6b21PZmVRWUJLTE1ydmt6d2M3Tzhad3Z4KzZmNGZZUEJFbmNlQ1ZLejZsV1RhWXJtMjJwY1RSTEVkQTkycXYxTWM1VXVDSGEyLzcyQlJzQkxCMTJBSzZJSHBQTHhyUGY1QnhjQjBiWmVCZnRGTEdVekVjQjVGZGV0VTMyRUJmTDNSeGZpYnE2QVBJVXJiNjAyVDZmS2RLUXZBQXZZNDN0NXEwMnljVjVZT3FnWFB1c0REV3I5VnFOOEpYOTYva2kySVRWVUQ3VVlWb1hvUFRuc2ozL2J0eUNqY1lqK1JxY3l6cU54eTRiZWVYam1NbmJVMldnNHhxS3Ivc2RVWDJLUUswMnJzZXlwN3gzRUorUkNDOWZRS3ZsNUIrUmZHM0huZHNSbEFhM1F3QUltVjFMSnZlZTR1aGxRa1JHNzd3SktaZnNDSzN6T1FmVVp5cW13ekJ0VjBxRU5MWVd1RnltZHFxalZzRHN3ajNzRXV3dE5sbm90Q0t6L1U2ZkhVc21ET2RlR29menMzZWQ1czZuZGFyN0RHUU1XMGxlaUxRK2djTlIyRnhvSFIwQWUrQ0lRTDZIU2NWNER4K1lFMlpla2FrWUZySUtzaWNMYkFaZ0c3VHRSTDdPSTRHc0JIcFEwUTZpOWpFUm5VaDRTbWxOOWNWZnFmeDdRdWVRRGk5NFZRbkVEb29NVHRYYWxTRERHdG5QQ29JUTBWbHNBN1dILzI4OVk1d3M0ZmxyNkhZaWMydFNBS0R3VEh6R0E5QXMxeW51dENvcCtjd0lUL0JSYmF1ZTJSWk9Jbko4cVZ4UG1udE9XSnhKamlKYkJWVnhqdUNRWnFpQ3k3WnJaMCtZUFlsT1JBeUVZUFNpRkx0MS9nVmN4emwzc1RYa09aTzRuTTFvbC9RWkxzUnJQTSsvd25RdUhJRENJanB1Ymx1SnZ6NUJ6Sjc2aEI2M05OS1pYTzhyNnh2ZFk0SmtkNUJKcStLMGJydDh0bU0vU25Xb3NNT0RNREUwNEhKaTNGMkR4NFhQOHJFdjV1OGR3dU5RTHRNUDNUNituS3hiQ2NOK2hpdkRiL09aaWV1QUdRZE9aUDJJRzk1bzFmYzhwTXFTcHRQYnJmSlRnQVlmS0dOdmt2T1J0MDhibVJmMjBXMXRzTFR5UytFcDQzYWM0bk82L1oxSXZ1MHdSN1hFNnV4aS9ObVNhZjYrN1FKODdHaVM1VGl1R0pia2RVckhpcE8yVGpzaFB0dXp0VTFXUEVWa3htc2prR2NzSHRhNHpLOWpwR0F4WERraFpWOVdoTFBRWTBoQ1FmWlluQzl2bnNsR0QwZW5UbzhOTFNzMmVMQ2d0aUVMRmtRUE1CcS9RazNFZEtFU0I5eDNPR0cvT3F6YmMrVTdPL1FNRW1wOW96TTVZWFZPN1FrZTNUa3NJVTRmSXdNOVpJTlptekhxWlJkZXQzNFpXVVUwSFFTYXgwSUFFQjFPakhrUjhmRkMzT1huK1ZVek5iT3dUbk0yZ2VUSTdHWGRuTlBQVnRXajkrMUo4bm1FVHNzZTFUVHNPWW1pcVp6Snp0MUNVamJFa2xsSWdoSnJubWRiRlFkTFhlTThtQ0crQ0NzNzNWczhQVTU5bnRIMEhpd0ZqKzNudVQwck42MkVocWNpcU9lcHNiRlhRV1JDaXd5dTNjZFZDSVBnekhTS2w5VVZoQS83alh5YUZWeDNueUZ4enVjYkV1RkRhZ2VDRWZScHhyS0xHTWNHMWVjOHhvVkZDNVpNcnMvMlVnTEhaOE5kUHNPYXNzWS9IT0FTcEp5OXJRY2RoYy9zY3hoNVdSVDlBbGtlakJJQzJGckhyZkxTUmNDUDh1VVd3bWtuVEU2T1YyRFk0Rk9ySmc2ZHJhZEg4Q3ZYcXhjL25nd0F6TTJuWFpTTnBHdnloR2FDZ3FCS1dKNHdsQk1VWHJNYVBsZkRNOTA1TGJua1hVdTVIQnkxYnQ0aG9JbWNRL1FZbWp4ckg1QWRic1daeUNVNUJzNEhqSG1VTzgvTWhtenJ1TWhrdytBTGh3VG1wSnJyZzFUcEgxODFUTE55TVNBZklZVHJObitFSllSMENvbzl3Zkt3YTV4blJ0Z3dOQ3FSRm5yaTBIbUhQVXJoY3YyaVUxb2NnMi9lSHZObiszQmNaektrZFVveFhnTGtaaGNNbE9xNE0wejc0azFaTTBjcVA3YUdtdlpYZ0htNHBFTngwMzA1VGVGaytlNHpzdlI5YlNnYlUvVk9qRWRzRnd3eTN6YTJuMmVaZk9ZWjRKdXc1bUJ2RzA3eFJNZjdRMnhZUkNkZVdwd1JnOGZqenVEMEVTTFRtOE1qcndvdGRFaGxRK1pEZjE1UFU2RWh6WW5oMzJtRWRjS01GZDNiaWdVbnA4WDcxTkYvdGpsTE0xZ09wQ2pVYUp1SFJIUi9aMDQzR0dDM3lMZjluOG5RblJFTUhpNmZLdjc5eVVCQXRNVUYzMWE0cWJxTGJJUzFVN3R2SE1YaVYrZE9PdExENmhOWUtpRS96dURKT0QrTk1qWjdQczlQMTgvSUgyd0VzTCtjWWdTWHh0aWpFOEVzTlR3dHpxOEEvZDIyeHovMkNIVDJ4T1lXSkNPT0MyRUdYKzQvcXNhSi9RN2JRUUJab1ljR3VsV3UxZW92ck5FNXJ0c3BSNThZYk1VTDdLQTZvL2g5NjVscnVUQk0xTllHTjg4QW5EdGdBOEZobVFqTjZTRG9CZVpEQkxPUEJiRGpIRUx3VmQ1Y2ZZbU90cFVDVFFJMzJtZEkwaGZTWlcxdlA0L1ZJYXBEeGw2azludkxBQk9vS2ZLdU03TkNQTENqdnlLMVJPcWViYzk0N0FoU3Q5L1h1TzJVS0krak1ud0NEalF1Mis0RVBLbFdOTnRuMnZJeXZFa3ZkcVRFcFE0Tmp0MDd6LzBnNE5qQ01CMitEblREbUJEMFRzZjNJVkJ6Z052UTYvWXpobE5hcnJwU2xVR2Z1K2ZGelFIRjg4VWc0OGV0b1dBOGdCL3dNenZNYXpuVi9BN3d0cXJxN3M2VWVuMTJoRjFRdk5kdElWcFlCTWtKMDZzRlRNUlJMN080bGhVMnM4Q0IySFlHYUVxd1QvWGZhWUh5Y01peCtYMzRrTUpNSkIwT25MYzQwclpyS2ZnSHJYRldnNmpOKy91NEhNVDY0Yy9iS0dlV0RRSmpnWXhqNzUwNmhpZ2tERm5GQTRLbWVWdDVERmU4UUJZWTlMZDZJTTVqOEhiVHpQRU4wNjBkOHdVb1BYRWtmaTBQUFFpa1FQN3kyUWpzMm16Qi9GVktsbnZZSHg1OE9BOXMzUHlTVFVmdVI4RjFMQTgzQ1ZpNE13ZEwzMjl3WXBXeDNqNituL0tvYXVNcHJOYnVzbjZlOFRNT2hYWFdQUXI5Y1FkOUxCRHMwVWtuWnBudDA0QTlxS3pZNG9uYThhelRxZGQ1WHM0dzdhYXpRSXdrRkNEcEFCQWd3cm1jcitjMHNwWFp6SXRtdUJzUm9Eb1VHZzJmNURhbllkRTVFZEZJTG1xZGd2Qm1kdER4ZE1OWDFXb052UTl1RVFpYmRhREpQRFhyTFVMYi9EREhlU2JhZXcxand1TmtmdmppeWF0YnRHZEJ1UFhEeU5IN1Y1bmM1OEQrNFBTMUJ3TDVGb2poNlpFNVU3UXh5TjVmSDVQblU4aFlUWjhRVWN5ckJ5S29UZFlCSCs0UHdZbkk1cU1lc3pPeWJTYTFOc3BzTVNDVG5NZCtmVUt5VTM1OElwVVBFd2lPa3JXYi9OVGhZMUNGTlZiazJGUHNPQjNFckpWcWIvSTVLcGFQeUt6TE5aMUFjMG9kbzQ5dXlFRlF4cThRQ2ZlWnhEekVUWjlUMXFXekRuVGNIcUM5ZkZyMGpNMG42T3dGclFsT0RTdjJmU1ZyVnNycGhNVkpVTmRueUNDWTBJRk1JOTZRMkp3ODNqN1BsNHlPV0s4UmVmTEJJWi93dFh4U0hqYVVtK29aNzdRckpXUHhYRTV4VUN3SzFBZXNiS09TVGZHT2ZQbTZSUG5NZ2NWNnpOVVN3eTJzSGlYYU8wdjRTSU1YT2VRU05EeEowdFA0ZmFiYXFmRmgvc3RhSkFJQ3YvWTRienQ5VnhZcEpGVU8wWFl1VHpxNS9ua291L0hBMU94SkxIdjJ2SjIwQjdOcDVyUEdNdkJ4WHl4Rmd2b3REdzZYQitqRmJzKzUrbGlPM0xmUUdlZElwK3Jlc3JHNTd1amMzWTNkT3NZZlkrL2V2b08xNzh2QkVuZXlCQU1pNUVBUjliUWRMdU8wY3ltOXp6UlZyTXNEVHNOZ1JtNTZHL2JRbUNZN1FZUEZ2c0VXM3B3TEpGWjlUa2FXSWpoenhFZnZRV0tjQXUvNGNYalZOZ2ZwV1NGclhXZEJxdnVBaDRvZFh3ZzZmb1hQNVBxd0creG9Cbno2dElSYnRNOGlPYVNwT2ZmVXNibU9rbmpPdUl6cHVmQWN5cmZ3NXNzUnJ5eUpGUFBYczlNd3lHa1R1TTg2ZVRFK1lOYjV6NDRyOGZ6RWRvVFB5QXY0UFU1WG1WMTI0T2dDcTNkdU1MbkliQ3RvKzhnRkFGbWsxRHF6bzN6b25PeUxCZVJtcGFNZVJjRkp6VDZaUHZ1ZWk0MW5TNTdYR3UzZ3VZL1RXUUJUS0hlRlY2OXRUWmtIK3lvbWkyek9jOXVlSGNiblF4LzBGeCtPMWEvM1RDaTExTWhPWUdJSHJMSDdiQ2Vyc3RsREo4ZFZKK2g2ek9mRFBSd2xrcDA1V253S1RQSXVUZDFjSTdwWHp6UHlUNWxlTmx3NjNnSkc5cUFDbEhDUExmdFFpczhDaGpQUHp3NDU2MUVjVnBsZlIvWmUySWxQbllPYXhBd244M2daY0lnb0MvVDZ5VnFEYlBZOG5LZGR6V292K3NOS0I0UFI4L2o0Rnk1cytyQTdhM0Y4b3BaMW15bWNaRngwM051cHQvWXhkUDB0VUg2ODlSMW5XcFdITnV3S011V1IwUU1ITTY3cnUwLzVLZnZ6aFZWT1Z0L1NONURVSjhRNVVNYUhQVmhxTk15VW1PcUx4QitXbVkvM3NZY0llN2EyWFk2WGRpaWliVzQ0Njg5TVpHd2F4dnU1SnlPY3h6anNiZi9UWTE3Zk1qdWJDeUNiem1tNG13ZWI0enFSTy9sWVllaHc4ckdQeTlRdzZINnlzZHNIMStLMjU3QTIyaFpqaDJVeGt4TjloQThNRVplRStEcHJiTmtza2FNUDgrMCtvYzdSVEVmd0xpdkdpSVJlQ25iaDhZSHN2cHN5Y0p3NkVJc2Y1VlBTYzVsV1VMZjZZTHZuSEdEWWVLMGNSSjdBVHg3aUJjeUwzZlJKSXc0L3hQTTlLWDBqN2xyc3V6bG5sbGREeXZpSWhlYzJMWTI1ZlBGTUJ3L0xUcjVnZllSVGh3ZzJ4QWUyMnRrRTZPemhVK0hXY3Y2NG8rUzBvMjFmb01tamU1eEhlNWJ3Rkorck1RRmx4MWg5QkhNZit1UmpIR0JSK2Rlb3FmdjB6NWlZUFg0TUhqa1N4L05xV0dVajJHMkhERHJnS3hOcFlYSGRacFhpUTVrTHVPQ2NzbWJ3UlFJYVh5eXo4RFBmZW9tODZWYy9JNHJxdGF3Zk5lcTBVajJBM2JJNHgwYzMyYm5zUTE3c1FEMVB1YktwR05zdzd6ejJSYlNZUmhXSG5wcXQ0cmN0bXlaOEVvQW14QmI1WnJxYmtCM25NeDViYVh3aXhPY2pIaDNEaVRwc0Z1Z0NsczJ1TXF0d3k3YlNCRG4zc0RoOEVnQlB3UGhUVHlQQjVQbmRuVjdGRXZ2L2VaOHhoN045N0NLTVNDR2ZBRnNKUmg2Ym5UR3JZenE1UFh1c1daMkNHSWZQZDRJRi9yM2hrZFc0dGtkNFBuN3JrWUdicUhMZUVPOEM2ekJZRTJuRVRaT2dUanFSUVRzSUNYZUsyZWVjZHNjNnhMYXVVMVdyQlppdE9nUGJhMjFPRi9TUXp2RzNWa3hndVh0R0I1V2RweUNkVnY3dVdDWVRVeUxzZUM0SFdGcnRZTXRLZEFvUWlzUUo2K056TkN2WThaeVJLdzQ4eFFDaGE4Z2NPS05aVkN1S2drOHBmWHpDUUZYS3J2QTVFOThPMmV6akI2cjl2aWpmNVROL0crSzFPUHk2TzhvU1VuSTdHcjlEZTdGOEkrRHNubVdqOVQyZnh5aUxISW9GZ0krNjhKNTc0U3hPM2E3TDU4UDRiSjBBL3IzcXBTUkIvRXp4ZVJxUmZRSVR4aGlBVnBqRm1EN2NiSnUyOVJqZmt2MHpYdTA3QngrTzV4QytmVzVXUHVtb2Vjb1lFVjhBY3J2MlBMTk1rR2Z3UlZaS1VNU0pzeVVpSGpIRzE5bUhxVHUrM3g2VEhzNnpTYUJld0lmRCtvb1BkQTcySEgrVnV4eldKOW1wQnV0M2pIeTJyUXpGM0Nyb2FtSWZtTHVkTU1DTlFkUnNyL0E1ajVzM3cyQlp2ZXZNQVNrL2xjU09MRHpQSjRXT0wrTkdzUmx5cUR6ZlhqMjFEejQyT1B0b2ljZmtjYlNtZkoyejI0dWxIbzdFNWlxUWloYWtUeCtUR3BEZU16MUMyVWY0ekIzMTVmTlVMUFc1MitOanFaOTcrMXluWUJIVTR5TlRuVFJ6cGplaWMzMEdlZmw1eHRncEgvTEpBc1FZNDd3ZGFXQ1ZBNEpXY1RUcE1OM3R3VFQvc211N1Y4KysrQzdyQURrRTl4N0hDVmh3OG5wZzdJT3BIWFhvOHhwOXFPT3AvdkZoeUw0WWszN1UwOUZCa3piSDNhZ0RCeHV3V3QyNE9rYTFOV0FsajBJUkZENnphWllHZVhyaU9jQzNXSi9scmN1V3UrODg3YXlmcnY3aGdhWGo4cHkrVnlKbWQ1cUhJYzJXcmpqTXdHTWdLQmZVMk5vOHkrVXIwdmkrY1Z1ajgrVjRnMjBCazArc3c0WTlodVhDaVVHT1RYZnFHcFRaSnlGNStqNWZuN3NtZjl2MjR6cXgvd1Q0dXVwVlBISWdOSGdXNUlGdVA3TTl2b1JMZmRWSEQ4R0lBZmZzQWNSOUd2ZVREMEFiQmRtSEEzeVBlZUVYTGRLR200cjdvWjdQWEVmOEJDSnZuUnF2OXhtTlZ0MUdIdzU5aHAxakg4UnRLMVVzaTJGbGZZYnRERDZwd256N3poSEVjNXp6cnFkUURCYW1oU3pwNTVuelphc1p2b0U1TGduazRaVEpzMXZsZkVuVGNYenoxSmRFSDV4bWtpRHlCcTlEOHJGamJJY0ZsL0xPeGZXYmc3UW15aEhXRHdTQno3NC9icWY3bkdPczZ2VTB3UWZOQVJuT3JMdHQ1YWhxNi9jOHhXUGVPVG5jczBXVGZGWXIzUjRwcHpPZ1R6ekJSeTZybkFDRTg4eTBKdzJXTXFtbmkrTjliYWF4ZThDR2ZvbUN3d0xzL2ZnOGV6WVZQQnhrcml0YWdXQ1RnZ2N6UFR2RTM0ZHVKcCtpbUIyd2RTcjFYMnZaQUVGajZEZUF6V0theElkd1B6QTN1M2tpb3VNNkQxSktYNXFlZk10S3VkSmxocHRvMkgxTXdadWR0d1hFcXVlYzh3dWFzV09BckdPKzY3UWppK1crUGg5Lys0cVRGaVcwRGlCNlNOS0cwL2h0ejBXNHdwaTJSbDgzdTVFUzhnUGR5Zlo0UG9pUkdidmlaYm1sTllhV2ZGb2xpTEJZcGpTZmQzWUY0T3VFRkx1WDF2REp1MnZZOHUyRDZ0LzJaV1FJZHU1VW0zd1ZDOVc2YytSdDhiUFpHbWRqeVozWXhCcmJNWHRiN3ZuNkNIRWN3L1A1NnBBVmJLbFpPa0M0NUlyUzlWa01kZHVVWjhORXNOM2t0a04zd2JibDdHQnBRd0MybmcwK25vbzQ4amlhcjhkajdMVUFadjhQUFBmdkVhNk8wVTRBQUFHRGFVTkRVRWxEUXlCd2NtOW1hV3hsQUFCNG5IMlJQVWpEUUJ6RlgxT2xvaFVGTzRnNFpLaE9Ga1JGSExVS1JhZ1Fhb1ZXSFV3dS9ZSW1EVW1LaTZQZ1duRHdZN0hxNE9Lc3E0T3JJQWgrZ0RnNU9pbTZTSW4vU3dvdFlqdzQ3c2U3ZTQrN2Q0QlFMelBONmhnSE5OMDJVNG00bU1tdWlxRlhoQ0NnSHowSXlNd3k1aVFwQ2QveGRZOEFYKzlpUE12LzNKK2pWODFaREFpSXhMUE1NRzNpRGVMcFRkdmd2RThjWVVWWkpUNG5IalBwZ3NTUFhGYzhmdU5jY0ZuZ21SRXpuWm9uamhDTGhUWlcycGdWVFkxNGlqaXFhanJsQ3htUFZjNWJuTFZ5bFRYdnlWOFl6dWtyeTF5bk9Zd0VGckVFQ1NJVVZGRkNHVFppdE9xa1dFalJmdHpIUCtUNkpYSXA1Q3FCa1dNQkZXaVFYVC80SC96dTFzcFBUbmhKNFRqUStlSTRIeU5BYUJkbzFCem4rOWh4R2lkQThCbTQwbHYrU2gyWStTUzkxdEtpUjBEZk5uQngzZEtVUGVCeUJ4aDhNbVJUZHFVZ1RTR2ZCOTdQNkp1eXdNQXQwTDNtOWRiY3gra0RrS2F1a2pmQXdTRXdXcURzZFo5M2Q3WDM5dStaWm44L3hydHlZdkRSZkc4QUFBQUdZa3RIUkFEL0FQOEEvNkM5cDVNQUFBQUpjRWhaY3dBQUN4TUFBQXNUQVFDYW5CZ0FBQUFIZEVsTlJRZmtCd0lSRWcrc2gwT3FBQUFnQUVsRVFWUjQydXhkZDNnVTFkNSt6MnpMcHZlRWtJUmlDQzBRYWdoZE9xR0lOQkZFVWNFR0lvSUZwUGhodVY3QWNtM1gzcEFyS2dvaUlDQWl2WWwwRWtwQ1NPOWxlNXZabWZQOXNUdkQ3R1pEVVVUVS9UM1BQSnZkemN5ZU9YUG1uZmZYQ2FVVWZ2bnRZclBaVUY1ZWp1cnFhdFRXMWtLbjAwR3YxOE5rTXNGc05zTmlzY0JtczhGbXM4SGhjTURoY0lCbFdiQXNDNDdqd0hFY25FNm50UEU4TDczeVBBOUJFT1IvRTBFUUlOOG9wZUlyb1pSQzNBQVE3MWNBb0pRUzk5Q2xWNi9QU0Y1ZVhseFVWRlFUalVZVHAxQW80aGlHaVdFWUpvb1FFZ2tnQWtBb0lTUVVRQkNBUUFCYUFHcjNwZ0RBdUk4bkFPQUJzTzdOQnNBS3dFSXBOUUl3VWtyMWxOSjZTbWtkei9PMUhNZFYyZTMyNm9xS2lvcjA5UFJxOTNHb2JHdnduaERpL1ozNEdRQlFRa2lEVjlsR0dZWUJJUVFNdzBBUUJLalZhakFNQTRaaHFFS2hnRUtoQU1Nd0VQOVdLcFhTcTdpcFZDcW9WQ3FvMVdxbzFXcG9OQnBvTkJwb3RWcG90Vm9FQlFVaE9EZ1lJU0VoQ0E4UFIwUkVCS0tqb3hFYkc0dUVoQVJvdFZyL3pYUWRoZmlCN2JjSnk3SW9MeTlIWldVbGFtdHJVVjlmRDcxZUQ2UFJLQUdhMVdxRjNXNkgzVzYvSXFESndVeStDWUpBUklEekFqTVBJQlBCU1E1UzNvQWxmMTlkWFowYUhCeWNvbFFxYjJFWXBpVWhwRGtocEJtQVpnQUNicEpwdGdNb3BwUVdDWUpReVBOOEFjdXlGM1U2WFg2elpzMHVlQUVjdlF6Z05RQkFFZmdJSVI1QVJ5bWxTcVZTQkRZSjBPUWdKOS9rNE5ZWXdBVUVCQ0FnSUFDQmdZRVN3SVdHaGlJOFBCeVJrWkdJam81R2ZIdzhFaElTb0Zhci9UZVhIOWorSENrcEtVRmxaU1ZxYW1wUVYxY0huVTRIbzlFSWs4a2tBWnJOWnJzc29IRWNKN0V6YjFEekJXWWlLeE9CVGJ4MlBvRE00MzFlWGw1c1FrSkNCNVZLMVVHaFVMUW5oTFFIMEJhQTVxOThEWGllZDVTV2xwNU5Ta282NDNRNno5aHN0cHpjM055Y0hqMTYxTHFab2h6VUJEZFQ4MkIyM2tBbkFwc0lhQ0tidXhMSWlhQ21VQ2lnVXFrdUMzQmFyVllDdUpDUUVJU0doaUlpSWdKUlVWR0lpWWxCZkh3OGtwS1MvRGVaSDlodW5GUlZWVFZRT3cwR2c2UjJ5Z0hOYnJjM0FMUXJzRFFpcXAxZWdFWWFZV1VOR05uRWlSTVZIMzMwVWZlQWdJQnVDb1dpS3lHa0M0RFV2K08xNEhrZXBhV2xhTmFzbWZkWGVZSWdIT000N3JqUmFEeDJ4eDEzSE51OWU3Y2dBenNKOUFnaGdqZWpjd05iQXpiSE1BejFBWEJRS0JUMFN1eE5EbkFpZXhNQlRsUlB3OExDR3FpbmNYRngvcHZPRDJ4L25CZ01CcFNWbFVrc3paZmE2Y3VPeG5FY1dKYVZHSm9QT3hxUjI5RjhNRFBpdzE0bXNqTHl4Qk5QS0pZdVhkcEhvOUgwWkJpbUZ5R2tKNERnZjhJMXVReXdlWXVaVW5ySTZYUWVNcGxNaDJmT25IbG96Wm8xVGg5QUo0akE1Z1kwNnNNdVI3MlpuSmY5alhyYjMwUUdwMWFySllCcnpQNG1WMDlGOXRhMGFWT0VoWVg1YjBJL3NGMC80VGdPSlNVbEhpeE5yOWRMTE8xcTdHaStuQU1pb0hteE0wbk5sREV5eUlHTVVzclUxOWUzQ3c0T3ZsV2hVUFFqaFBRSDhJOWM5ZGNBYkEyZVU0SWc3T1U0Ymw5VlZkVys1czJibjNPRFd3TldKMmQwSW51VC95MDZHT1FnSndKY1k4NkZLOW5mUlBZV0hoN3V3ZDZTa3BLZ1VxbjhONlVmMkg2ZlZGWldvclMwdElGelFLNTJpcUFtc2pTUm9WMHRvUEU4TDZtWmdpQTBDbVpXcTNXQVdxMGV6RERNWUFBZC9GZm5kd0didDJRN25jNGRScU54VjNSMDlENjR2TGlDTjlnMUJuSU13MGpxcWtLaG9GY0xjQ0tERTltYkNHNXk5ZFRidVpDWW1JajQrSGoveGZjRDI3V0x4V0pCY1hFeHlzdkxVVlZWNWRNNWNLWHdEUysxazNnNUJ1VHNqSGd4TkFuTWJEWmJsbHF0emlLRVpBRm82cjh5TjBUS2VKNy8wV1F5YlkrTWpOeU9TK0VxUGtGT3BxNTZxS29paS9QeW9OSXJzVGR2OWRUYnVSQVhGNGVFaEFRa0p5Y2pLQ2pJZjdYOHdIWjFVbEpTSXJFMHVTM05sM1BBMjVibWc2VmRDZENJdDgzTVlyRU0xR2cwdHhGQ1J2bkI3S1lBdVMxNnZYNUxURXlNeU9ROFFNNmJ4Y2xBcmxHQVV5cVZqUUtjbkwxNU94ZThiVytKaVlsKzc2a2YyQzR2SnBNSlJVVkZLQ3NyODJCcEJvUEJJeWJ0S29Oc2lhaDZpdXJtWmRnWm85UHAwb0tEZzhjeURITTdnSGIrSlhsVHlsbVdaVGVXbDVkdmJ0bXk1Umtad1BFeWtLT3kxd1lzVHE2bXVvR05YazF3cnp6MlRmU2NpdXl0YWRPbWFOYXNHVUpDUXZ4WHlBOXNEVm1hNkNEdzVmRnNMSVJEQkRWZmdDYlBFcEFEbWdobW16WnRDaGc4ZVBCRXBWSTVnUkF5ekw4TS96b2lDTUkycTlXNjRhMjMzdHE0YU5FaUd3Q25IT1JrTEU0UTJadTNtdW9WSHVJQmNDSzROUllhNHUwNUZSMExmdmJtQnpZQWdOVnFSVUZCUVFNSGdjalN6R2F6WkV1N1F1YkE1UUNOeU5WT3ZWN2ZJU2dvYUJMRE1KTUErRmZpWC95WnlISGMycEtTa3ZVcEtTbG5aYW9xNzYycXlnQ09YZ25nTGhmWXE5VnFFUndjTExFM2I4ZENpeFl0RUJnWTZMOHkvMVJncTZpb2tGVFA2dXBxRHdmQmxlTFNaS0RtRTlEY0FiVWU2cWJWYXMxU3E5V1RDU0VUL1V2dWI4bmkxdW4xK3JYUjBkRTczQXhPRG5DOEx6VlZGaWJTQU9BYXM3MzVpbnNUVmRQWTJGaEpOVzNTcE1rLy9wb28vMGtueS9NODh2UHpVVnhjaklxS0Npa2x5bUF3d0dnMHdtS3hTS0RtY0RoOFpnK0lnQ2F6by9rRXRMdnZ2bHZ4MFVjZjNhMVVLdThHME1kLysvOTloV0dZY1pHUmtlTjRudDl2c1ZpK0hqeDQ4TnJEaHc4N1JaQ2psRGJ3clBJOFR3VkJvR0xpUGMvelZCNFM1SFE2cVR4Y1NOUVE1S1lROGFFclBvU3RWaXZNWmpOTUpoTnV1ZVVXS0JTS2Z5NWpLeXdzL0VlY3FORm85QWxvb3NkVHJuWmV6bzdtUytXVXNUT3lhZE9ta05hdFc5K3JVQ2ltd1I5ejlvOFVTbW0ydytINGN2MzY5V3NXTEZoZ0pJVHdNaWJYUUUyVnNUaHZCbmRaKzV0Y1BSVURlOFdjMHlaTm1pQTVPUm1ob2FIL1RHRGpPTzV2ZjVKbFpXVW9MQ3lVdko1aUJvRzM2dGxZR0llWDJrbGthVThTcUdWblowZTBiTm55Zm9WQ2NUK0FGUC90N1JjQStYYTdmZFdtVFp1K25qSmxpczVMVGVYZDRDYXBxTzVnWHlyUFFmVldUMzJGaFhpblpFVkhSMHRlMCtiTm02TnAwMzllNU5EZjJzWkdLVVZ1Ymk2S2lvcWtnTnZMZVQyOU13Z2FVVHRGTHlkREtTVW5UNTRNYmR1MjdReUZRakVEd0MzK2U5a3ZQdVNpeldiNy9LdXZ2dnB5K3ZUcGhzc0JIQ0ZFa0NYZGUyY3VVRjhaQzQxNVRjV0EzbWJObWlFMU5SWHViQWsvc1AyVnhXUXk0Y0tGQzVMNldWMWRMWGs5NVFHM2plUjVFdTlVS0M5UEo3Tmt5UkxGa2lWTEhsUW9GQS9DSDMvbWw2dDcwSjYxV3Ewcjc3ampqdFZidG14aDNRQW5xYWd5Z0JQa0hsVHYxQ3lWU2tVYnl6ZVZxNldSa1pHSWpZMlYxTktVbEpSL1RNemIzeExZcXFxcWtKK2ZqNUtTRWxSVVZEUUk1ZkJPWHBmYjFMeFltb2RqUVBSeTJ1MzJPMVVxMVNNQWV2aHZWNy84Qm9BN2JEUWFQd3NQRDk5SUNPRzhBTTZid1ZGWkJnUDFabS9lTVcvZUFiMWlTRWlUSmsyUWxKU0VXMjY1NVI5UkR1bHY1eFV0TEN6RXhZc1hQZUxUNUxtZTNzbnJjcFltT2dya2FxZk1qc1pZcmRhQmFyVjZwanZseVM5KytXMXNncENNc0xDd0RKN25SMVZYVjMvV3BFbVRBM0tBOC9haThqeFAzUUpCRUtoWC9UN3hQWHg1VVVXeml1aEZ0ZHZ0c05sc2FONjh1Ui9ZL2lyMnRQUG56K1BpeFl1Tk9na3VVOW0yQVV1VHE1MzE5Zldwb2FHaHN3Z2hEL3R2Uzc5Y0wyRVlaa1I4ZlB3SWxtVS95c25KK2J4ejU4NzVNb0FUdzBSNEFJSWdDSUxZMzhLOVVURmxUdzV1M2lBbk9zQzh3YzF1dDZOMTY5Wi9XN3ZiM3dMWWJEWWJ6cDgvNytINWxNZW5OV1pQODJacGJsQ1QxTTU3NzcxWDhjRUhIOHhXS0JTUEFVajAzNHArK1NORXBWTE42TlNwVTViRllubS9iOSsrbng4L2Zwd0Z3TG5aR3lPcXFKUlNxUmltMjRGRjVjVVZ2QUhPdTFxekhPQllscFhBN2UvWVNPWXZEMnc2blE2NXVia29MQ3lVQ2tMS3EzTDRLZ2JwZm9ySlFVM08waGhLS2JGYXJVTTFHczNqQUFiNWJ6Mi8zQUJwR2hnWStQeXZ2LzQ2b0xxNitxTW1UWnJzSllTd012V1U0RkpPS3ZWaWNIS0FvNzZhQXZsU1Q4VW9nTlRVVkVSRVJQaUI3V2FScXFvcWozQU9NWW5kVjRWYldTZ0hFZW01RDViR2xKYVd4c2ZGeFQzT01NeGMvNzNtbHo5QlBSMFFIeDgvd09Gdy9IZkhqaDJmWm1WbFZiclZVMFlPY0s0SzVrUm9qTDNKVkZWY2pacWFtcHI2dDNJcS9HV0JyYVNrQkhsNWVTZ3FLcExDT2VUTlZYdzVDYnhaR3MvemNwYkcyTzMyQ1NxVmFtN3B1ZU5keXgzQnlFaHZkVk9kYzMxOVBXcHJhNUdhbXVwSGdMK0E2UFY2Yk5xMENRNkhBNE1HRGJvbWc3MWFyWjQxYk5pd1huVjFkZTlIUlVWdElZUW8zT29wSjdPOUVibjlUUTV3TE1zU2xtVWJ0YjE1TXppTzQxQlRVd096MlF3QWlJaUlRT3ZXclg4MzhTZ29LQUFBeE1mSFg5WDVWMVJVd09Gdy9HN25CdFBvTjZ3ZW55eDdFb1A3WnlJanN6OGVXZmdxeWt6T20yTEI1T2ZuNDh5Wk14NXhhcGZZbWc3RkY4N2cySkZma1oyZGc4TGlNbGhzZGpnY0RpSUNuRHMxaWdpQ3dBaUNvS2lzckV4Mk9wMnZxVlNxL3dIb3V2by84M0RQd25kdWluTTlmUGd3M256elRRREFrU05IOE5wcnIvMnBZL2c5d25FY0JnMGFCSVBCOEtlTjRYckwyYk5uWWJmYkczenVkRG94WWNJRUZCVVZJVEF3RUZhcjlacVBUUWpwSEJrWitSN0xzb3QzN05qUmpGSWFRQ25Wd05XWVdrVXBWVkJLRllJZ0tBUkJZSGllSjA2bms3QXNDNVBKQktQUlNFUXZxRHlQMUdBd1NGV2lLeW9xVUZ4Y2pBc1hMdURRb1VQNCtPT1A4ZmJiYi8vbWRmYlNTeS9oekprekFJQ0NnZ0tzVzdjT0sxYXN3S3BWcTY1cVBXelpzc1huLzE3cmVtZ1UyTFo5OEN4ZS9IUTNSazUvQnYrMzREN2svZmdlSG5uMjR6OTlJWjA3ZHc1bno1NUZmbjYrUjdWYmthMVZGZWNodjZRYXlzQlFoQVFIZ0hOWVNIMjlub2lNemMzVWlDQUlJa3NiRngwZC9SVWhaT2JOK05ULzhzc3ZrWkdSOGJjWWcwcWx3dnZ2di8rYnVpN2REUFBnUytiTW1ZT1NrcElHbitmbDVZRVFna1dMRm1IeTVNbG8xNjdkNzVtM0IvcjM3Ly9mRXlkT1pBSFF3dFVUVmdRM3BSdmdHQkhjM0wwMENNL3pjRGdjeEc2M0V4SGNMQllMVENZVFRwNDhpWUtDQXRUVTFFajlQVmlXeFpneFl6Qnc0TURmTkU2VHlZVGR1M2VqVFpzMkFJRE16RXlzV0xFQ3Q5MTIydzFmRDQwQ1cxRlJFVWhFYzB5Wk5BWWpiNzhYTHk5L0VjTzZKTUVKUUY5NEZIUHZuNENNakV6Y052a2g3RDVYQlFBNHV2NU5ETSs2RjNrMkFIRGl4WWRHNHVGbFg3cDUrVWxNeWhxT2Q3L1lpRGxUYjBkbVJpWSsyMTNvWW1DSHZzYzk0NFlpSTZNWHBqNzZIUEpySFNKdHhOWlBsbVAwZ0w3STdEc1lEeTU0QmFmUG5VTkJRWUhVRHMrN0owRkZlVFhBcUJBYUZBQ1ZXa3ZVU2dXbzRIU0JtdE5KT0k1bG5FNG4wMlBBaVBCdjlwMTVRYVZTZlFtZzI0RnYzOFR3L3IwdzhMWjdjTGpRSktldUhtTlk4dVlhT0c3UVRXTTBHbkgyN0ZuMDZIRXBEdGhxdFdMZXZIbm8zNzgvSG52c01UZ2NydEdZeldZODlkUlRHRHAwS0NaTm1vUlRwMDRCQUw3NDRnczgrdWlqR0RCZ0FCWXZYb3lzckN6TW1UTkhiTHFNdFd2WFl1VElrY2pLeXZMNXBQUTFobDkrK1FYang0L0g0TUdEc1dUSkV0aHNOZ0JBYlcwdFpzK2VqYXlzTEl3ZlB4Ni8vUEtMdE05ZGQ5MkZrU05IWXM2Y09aSzZJOHFubjM2SzRjT0hZOGlRSVhqdHRkZmdIVFR1UFlidnYvOGU3NzMzbnZUOTZkT25zV0RCQW9rcExWdTJERU9IRHNYWXNXT2xNWmpOWmt5ZlBoMnZ2LzQ2aGd3Wmdva1RKNktvcUFnQThNSUxMMkQvL3YzUzhWYXZYbzNWcTFkZjl0cnMyYk1IRXlkT1JHbHBLZWJPbll1SkV5ZGk1ODZkQUlDbm4zNGFUenp4QkNvcUtqQng0a1JNbkRnUkxNdGU5bmpyMTYvSDY2Ky9qaGt6WnFCZnYzNVl1blNwTkEvTGx5L0hxRkdqdWl4Y3VQQ0RYYnQyemYzd3d3K2pLYVVCQURTVVVoV2xWQ2tJZ3BMbmVVYmMzTUJHREFZRGFtdHJVVnRiUzJ3MkczUTZIVTZmUGcyajBZanM3R3hzMjdZTlI0OGVSV1ZsSmNyS3lsQlFVSURpNG1MVTFkVkp2NStYbDRkNzdya0hnaUJJNDUwOWV6YU9IajNxY1E0Yk4yN0VxRkdqd0RETUZkZjI1ZGJEdVhQbk1HSENCQXdZTUFDZmZ2cnBGZGZraFFzWE1IUG1URHp3d0FQbzM3OC9GaTVjQ01oMGM0K3Q4c1FHOUdqZkVwMTZqY0RTVjk3QjZSTFhpVkxlZ0Zrak9xSDdzR240YnRONnpKcHdLMXIzbUlBU084V3VqK2VqUllzK09HbW1vSlRESTROU01HejJXNjc5cXZlaFM0c1dhTm02RTJiTW00OUY4NS9FM253eitMb1RHTkMrSlVZLytDdzJyRitOMFQzYll0VGpybjFPckZ1R2xpM2FZdjdySy9ISzBqbElpb2xDMXJRbk1ILytmRXlmUGgzanhvM0Q0TUdEa1ptWmlZNGRPeUkxTlJVYUJRRlJhaEFaR1VsQ1FrS0lWcXNsYXJXYVVTcVZDdUt5S2FwWHJmbDI4T0lIUi8vWXNtMGZlcXlhbzQ3U1BiUnJTZ3M2OXFHbGRQM2FsWFJZdDFUYWVzVGpsRkpLVDZ4YlJsdTJhRXVmZWV0L2RPMm5LMmlubEpaMDJib1Q5RWJJcWxXcjZOdHZ2eTI5Ly9ISEgybi8vdjFwV1ZrWmRUZ2M5TTQ3NzZScjE2NmxsRks2WU1FQytxOS8vWXNLZ2tBUEh6NU1lL1RvUWExV0szMzk5ZGZwZi83ekgzcmt5QkU2ZE9oUXluRWM3ZFdyRjYydHJhVUhEeDZrSTBlT3BIcTludXIxZWpwa3lCQjY4dVRKeTQ1QnA5UFI3dDI3MDdObnoxS2U1K25DaFF2cEcyKzhRU21sOVAzMzM2ZWZmLzQ1cFpUU1E0Y08wWDc5K2tuN21Vd21halFhYVhwNk9qVVlETkxuNTgrZnAvMzY5YU1XaTRWYUxCWTZaY29VK3NzdnYxeDJERFUxTmJSMzc5NlU0emhLS2FWTGxpeWhhOWFzb1pSUyt2cnJyOU9ubjM2YU9wMU9ldmJzV1pxWm1VbnRkanMxR0F3MEpTV0ZIamh3Z0ZKSzZZb1ZLK2o4K2ZPbGVaMDVjNlowL0dIRGh0SEN3c0tydWtaRGhneWh1Ym01RFQ0L2NlSUVIVE5tekZWZjY0OC8vcGplZHR0dFZLZlRVYlBaVEFjT0hFaC8vZlZYU2ltbE5wdU5HbzFHT21QR0RQcmpqejlTbnVkL0tpd3NuQUNnR1lBbUFLSUlJV0VBZ2dBRU1BeWpKb1FvQ1NFS3RWck5CQVFFRUFBa0xDeU14TWZISXprNUdRRUJBV2pldkRreU16TXhlUEJnakJzM0R0T25UOGY4K2ZQeDBFTVBZZURBZ1RoKy9EaFlsZ1dsRkdQR2pNSE9uVHRCS2NXNWMrZlF0MjlmT0oxT0Q4d1lOMjRjeXNyS0dtREpwNTkraXVlZmY5N2pNN2VxalBUMGRCZ01CdW56anovK0dHUEhqb1haYkVaVlZSVXlNek9SblozdHNlK3FWYXZ3OXR0dlMrOVBuejZOcmwyN29xeXNERmFyRlJNblRteWNzY1dsajhiV3JkL2p2cXdPMlAvTmV4Z3plQWcrK2ZrY2hPSUQySEhXZ0lrUFBvM2JSNDdCb3NmdUJsdDlGTHRQMWw4VkN4bjE2SEo4K09veXZManNaZlJwR1lTQ2c3dFJhR1V3ZmQ0aWpCNHpHVys4K3dGbWp1dnRlZ0o4dndFMExBRjh4Um5rRkJrUW9IRGk5UEdqVXB5YWQwaUh6V1lEVHlrZzhCNnFwOHZyS1RBVVVNeCtZOVBEVXllT1g3bGsvc3loR25zWnR1M09SZjZ2aDFEUEIrREJwNS9CbUhIM1lHQ1hoRXRQb2U4M0FCRkpTRkFZVVdVTFJHSUVnMTI3OXQwUXhyWjI3VnFNR3pmTzQ3TTJiZG9nSVNFQmFyVWEzYnAxUTBWRkJRRGdwNTkrd293Wk0wQUlRZmZ1M1pHY25Jd1RKMDRBZ0ZSMU5TUWtCRXFsRWtGQlFXQlpGcHMzYjBhVEprMndkdTFhckYyN0ZqRXhNVGgwNk5CbHgzRDQ4R0YwNk5BQmJkcTBBY013V0xCZ0FjYVBIdzhBbURGakJoSVNFdkQyMjI5ajU4NmRxS21wa2ZZVGY5ODdJRFF1TGc0cWxRcnZ2UE1PVHA4K2paVXJWelpRTWJ6SEVCMGRqUzVkdW1EMzd0MWdXUmE3ZCsvR3FGR3VaSkFmZnZnQklTRWhXTGx5SlE0Y09BQ0dZWEQrL0hscEREMTc5Z1FBWkdSa29LcktwV2tNSERnUU9UazUwT2wwT0hueUpPTGk0cTVIVzc5cmx1N2R1eU04UEJ4QlFVRm8zNzQ5S2lzckFRQUJBUUVJQ1FtUjZxc3hERE80V2JObWIzenp6VGRUM0twcGdLaWFBaEJWVXdVQVJzeWVJWVFRdHlPTjJPMTI4RHdQdTkwdXFhWjZ2UjUxZFhWU1lMdlJhRVJ1Ymk1T25Ub0Z1OTJPR1RObTRQUFBQd2NBZlBYVlY3am5ubnM4NnIzbDV1WWlKQ1FFQ1FrSlYzV3VqYTBIQU9qY3VUT0Nnb0lRR3h1TFljT0dlVEQveHU2TGhJUUVKQ1FrUUt2VjRxNjc3bW9NMkZoc1cvTVo5aGN5ZUd6eE1temJzeGUzZDFEaGxkZmVkM2xRQUdnMHJ1YXRLdmNyeC9MdWZRWElHR3NEQ2ZlS2wyRTVCd0FGTkJxWGc3WkZlaDlrOWUzc29wd21DemliSGhmT24wZGhZUkhDazFJUkc2SzhYUGNvUWtFSXBZSlVPODNwNUJpZTU1bml2TzBKdlZxMmVDMUFxMzBEUUlKU280WUNBTWV6NEp3OEFBV1Vtb1pPWXJ2TkRpWERvNmF5RXBXVjFlaVNOUVZadmRyZUVGdGllSGo0WmF1aE1nd2pxUXNjeDBHajBVamZhYlhhSzZvL05wc05vYUdoMGpaMjdGajA2ZFBuc21QZ09BNXF0VnA2SHhJU0lwWEZlZTIxMTdCKy9YcjA2TkVESTBhTXVLcnpEQXNMdzhhTkc1R2Ftb3B2dnZrR3c0WU5RMWxaMlJYblllclVxZmoyMjIreGZmdDJEQm8wU0FveXRkbHNpSXlNbE01cDd0eTVQdWRRUG5kS3BSTGp4NC9IOTk5L2ozWHIxdUd1dSs3NjAyMTNoQkJjSVk4N1FhMVd2elJ6NXN4bk5tM2FsQ2lxcGpLQUU0R05jZHVUSVFnQ2NRZm5Fa0VRaU1QaDhIQXE2UFY2NmQ2eVdDd29MQ3lVd0sxdjM3N0l6OC9IdVhQbnNHM2JOa3lhTk1sak1HdldyTUdFQ1JPdSt6eW8xV3JJUzZ0ZHpYMmgwV2dhQXpZbGp2KzRFazh0ZUJaN1QrYWp0TFFRZXJQcnhsRTA2NFpPMFNyOHNPNS9LQ3d0eGFvdk53Q0JMZEd0WXd6aVkrSUExT0dYZzluSVA3a0xGNnI1S3c2OFpaY01SQ2hZYlBwbUhjcEs4L0RZdUV6MHZ1ZEZtRXdtTkVtK0JaYmFLZ2loOGJpbFpUTW9CUllCYWtXRE9EVjN4VnZDc2l3VWhBQlVJQ3pMRVo3bkdVR2d6TkNIWCszWHBIbm1oNW50dzJidTJyZ0c1NHBMOGUycU5iQ1FFR1IwYVkxYk9uUkVJQ3hZdjJvZENzOGZ4Y204T21sOGZYcjNCS2ZYSVNFakN3OC9PQTF0NHNPUWtkSGxEMS9ZYTlhc3dSMTMzSEZOVC9zdFc3WklidmJzN0d4MDdOanhpdnRVVlZWaHpKZ3htREJoQWxxM2J1MnhZSHlOb1hQbnpqaDY5Q2owZXIzMFB4OTg4SUhrdFIwM2JoeTZkKzh1cVFsWGtsMjdkdUhsbDEvR2JiZmRobGRlZVFWdDI3YkZ3WU1IcnpnUDNidDNSMmxwS1ZhdVhJa3BVNlpJbjJka1pJQmxXVXlZTUFFVEpreEFRa0xDVlFXZlRwbzBDZXZYcjhmaHc0ZXZ5WGl1MVdwUlYxZjNwNEJmZW5vNmpoNDlPcU5YcjE0dkZSUVU5UERsV0FDZ0VBU0JFZG1iNkRXbGxNS1hVMEhNMXJIWmJGSUovYnk4UEp3OWV4YVRKazNDbzQ4K2lxRkRoM3BVQ2VFNERydDI3Y0xRb1VPdnkza1ZGaGFDVWdxSHc0SGR1M2VqUTRjT1Yxd1BPcDFPc2pmLzlOTlBqY1d4TVhqc3BmK2lldjVDekJnM0JCd0ZvbHQyd2Nzdno0RlMzUVRMWHY4WFpzNTdIZ1A3cllJNnJDbWVlZVZ0cElVQ0dId25ScVY5ZytVUDM0WlBXL2REaTZaaDBGM2hKRFRKL2ZISzBnZngxTDhYb2UrN0hLS2FkOFZ6QzZmZzlPblRpTzQ0QkptdEwrRG5iejRENitTaDBJYWdaWW9HQVhCNng2aEo4V2xRS0FnUkJDSUlQQUhBREo3NHlOVFgvKy9oWndqUnBpeDQrWFVVUFRJUEkyN3RCMFZBQk81YitocUd0dElDR0lvbER3N0JzeDgralI5WHg2Sjl3cVdxbzhNZmZoNlBsejZCTng2Zmd1VThFTjJxSzE3cVB4bEErQisyWUZtV3haNDlleVNEK05YSTBxVkxNWFBtVEd6YXRBa1ZGUlZZdW5UcEZXL284ZVBINC9UcDA4akt5a0pNVEF3VUNvWGs1bTlzREFrSkNaZzdkeTRtVEppQW1KZ1lBSkRjN2pObXpNRENoUXNSR3h1TDJOaFlDSUlBZzhHQXNMQXdqQnMzRHZYMTlUQ1pUQmcxYWhTQ2dvS3daY3NXWkdabVl2WHExUmd6Wm96cndhbFFTRGZJNWVhQkVJS0pFeWRpeTVZdFNFbTVWTmR6NGNLRmVQVFJSekYyN0ZoUVN0R3VYYnVyOHFhS1BRTmF0V29GcGZMcXd6dW5UcDJLT1hQbW9Ibno1aGc5ZWpTbVRwMTYzZGZEODg4L2p4MDdkcUMydGhiSGpoM0RTeSs5aFBmZmZ4K3RXN2ZHMUtsVE1XclVxSUZ4Y1hITkJnMGE5TmJQUC8rODBaMkdKYS9zekFNQXBWUnd4MjVDb1ZCUWtSQ28xV29hSHg4UHM5bU1VNmRPU1d6eHM4OCtRL3YyN1RGeTVFZ0lnb0EyYmRxZ3VMZ1k5OTU3cjhmNGZ2NzVaL1R0MjllRHlRUEFoZzBiOE5wcnI4RmtNc0hwZE9Mbm4zL0dJNDg4Z2ttVEpqVzZIa1NRR2p0MkxQUjZQWHIwNkNHWkR5NjNIaHdPQis2OTkxNHA5T2FLWll0WWh3bFdCNFB3VUsvTzA0SVQ5WG85Z2tPam9mWllCd0wwOVhvRVIwWmVVL1N2d0RxZ045c0FCamliaytNUnpsRmRYWVhhZWgwY05sdURiQUk1cU1teUNKaHBkMDlWTFAvUGZ4ZEVod2N0Z2tjZ3NtdDgydUJ3YU5TZWhOVm0wUVBLWUdoOXFLU3N3d0tqalVkMCtCOWZhdm5zMmJNNGN1UUk3cjc3N212ZXQ2NnVEcUdob1ZDcFZGZTlqODFtQThkeEhtV2tyelFHbG1WaE5wc1JHUm5aWUlIWmJEYUVoMThiOEp0TUpoQkNFQndjZkYzbXdXQXdRSzFXLys0OHlDbFRwalNJdTl1NGNhT0g1MC9za1hHbGN5NHVMc1lqanp6aThWbjc5dTJ4WXNXSzN6eSttcG9hYUxWYU1BeURmLzNyWDg3RXhNVFgzbnZ2dlk5T25UcGxkNmRrY2U3TjZhN3pKaEJDQkhraFM0MUdBN1ZhVGNYYWJtTHBJN0ZvWlZSVUZPTGo0MkUwR3BHVGs0TlZxMVo1bk91bm4zNktQbjM2b0ZXcjZ4ZlFMaWJyeTBOQkdsc1AyZG5aV0xod0liNzc3anZvOVhwRVJrYmVYUFhZZERvZGNyeEFUWFFTaU0xVzVOMmpaS0FtcjV2R1ZGWldKa1ZGUlQxRENKa0J2L2psYnlxQ0lPRHV1KzlHMDZaTndmTThUcDA2aGErLy9ob2hJU0VyZCt6WThlSHc0Y05MQ1NFT0wzRGp2Y0JOS2owdWdwdThHNVlJYnFXbHBTZ29LTUNzV2JQUXAwOGZ0Ry9mL3FiSkx4V0JiY09HRFpjWS9jMENiSEpRS3lrcDhRQTFlY01WSDB4TlRJMWlCRUVnSnBPcG0xYXJYZWl2bWVhWGZ3cTRaV2RudzI2M0l6MDlYWElnOFR5L0pUYzM5NzEyN2RxZEJ1Q1FzVGVudTdrTTcrNnhJSWlOWStUZ0pwWWNGNzJYWWcyM2xKUVVxV0RselFKdVZxc1ZoWVdGSGtIUU53V3c2ZlY2Wkdkbit3UTFrYW41VWo5bFdRU0VVc3JZYkxaaGFyVjZFZnlWYmYzaUYxQktENWVYbDcrVG1KaTQxd3ZjT0RlNFNjek5YWDY4QWJnMXBwYUs0SmFXbG5iTlpvY2JJWDk2RXJ6QllQREoxSFE2bmM4S0hWN3Fwd1JxRG9kanNsS3BYQVNnbFg5Sis4VXZya3E5Q1FrSmtiVzF0VzlGUjBkdnBwUXl4QlU0UmlpbEhOeE9CY0dkVXVBbU9SUXV4d1AxQVpTK2ZnTnBhV20vS1MzcWJ3dHNKcFBKcDAxTkJMWExxWjl5VUdOWjltR0ZRckVZUUl4L09mdkZMeDdBa3hJVkZiVllyOWNIaDRlSGYrTXVkMFM4TlRZUjNKeE9wMDl3YXd6VXhLMURodzQzVmFNWTVzLzZZWXZGMHFpandFY1RZOUlZcUhFYzk1UkNvVmp1QjdYRzdRLzMzWGZmVFRXbXdzSkMvTlVhZGIvODhzdm8zYnMzaGc0ZEtxVWFUWjQ4R1pNblQ4YjA2ZE92KysvdDM3OGYxN0huYjB4WVdOZ1NzOWw4THdDdExKaFhucWtnWlNrNG5VN2lybHBKUjdRQUFDQUFTVVJCVk5NbUpkRGJiRGFQUU42NnVqb3BlVDQvUHg4NU9UbXdXQ3c0ZS9hc2xOSGhMZlBtelpNeVpScVR6WnMzU3hrT2Z6bGdzOXZ0MStMOUpQSU9VcUpON1oxMzNsRnhIUGNzd3pBdndwVlM0aGNmd3ZNOGpodzVjbE9ONmNVWFg0VEZZcEhlRzQxR3pKNDkrNmFkdzVNblQyTExsaTM0NmFlZnNHM2JOblRxMUFrcWxRcXZ2UElLbm52dXVlcyt2elUxTlZpK2ZQazFoZXo0a29zWEwrSzU1NTRUM3dZRUJRVXRyS3lzZkVpajBRUTFBbTRLUVJDSXZQeVJ1OUt1Qkc0V2l3VkdvN0ZSY0h2aWlTYzhVcTNrY3VyVUthbGdRbU5TV1ZrcEZTZjRTNm1pSE1kZDF2dnBaVk1UY3o0aEw4Znk2NisvQnFlbnB5OWlHT2JKdnlNWUhUaHdBTTJiTjhmKy9mc1JGeGVIdm4zN1NqbDFack1aMjdkdkJ3RDA2ZE1IMGRIUjBuN2w1ZVhZdDI4ZklpTWpNWERnUUo5VkZrNmRPZ1dOUmlNVkVheXRyY1hPblRzUkdCaUlmdjM2ZWFnVFI0OGVSVjVlSHZyMTY0ZmMzRnpjZXV1dGtscXliOTgrbEplWG8zZnYza2hNdk5RT29xeXNEUHYyN1VOb2FDZ0dEaHpva2VZRnVMSWlhbXBxMEw1OWV3QkFUazRPenA0OWk5MjdkMlBidG0wQWdMNTkrMHJ4WjhYRnhUaHc0QUNTazVQUnExY3ZDUWd2WExpQW1KZ1k3TisvSDZtcHFlalNwY3NWeDBBcHhkNjllMUZSVVlHZVBYc2lPVGxaMmljbkp3ZFJVVkVvTFMxRmJtNHUrdlhyaDhURVJPemN1Uk9IRGgxQ1JFUUU5dTNiQjdWYUxjMUQwNlpOWVRLWkdtV2xodzRkUWxKU0VucjE2Z1ZDQ0k0ZE80YlUxRlJvdFZxY1BuMGFuVHAxd29VTEZ4QVlHT2lSWTdsdTNUcU1IVHYyaXV2aCtQSGppSTZPUmxKU0VnQkllYk9EQmczQ3NXUEhjUFRvVWV6YXRVc0tjQjA2ZENpMFd1M2MxcTFicTRjTkcvYlJ5eSsvckhlcmxLTGR6ZWxXUzNsM3FYeFJMWVhENFNDQ0lGQ2owUWkxV28zRXhFUVBWWlFRZ3BLU0VnUUVCSGpZMjhUcjU2dHMwOUdqUjVHYm00dHUzYnA1eE1BSmdvQWRPM2FndnI0ZVE0WU1rWTczeXkrL29FMmJOZ2dMQ3dQTHNqaHc0SUIwTGV4Mk83WnQyd2FsVW9sMjdkcmRXTVpHS2ZVQU5Ya3l1M2ZURlZsdkFnOVFPMy8rZkVSNmV2clN2eXVvQWE0eU9rOCsrU1QwZWoyV0xWc21aUVBvZERyY2R0dHRLQzB0UldGaElVYVBIbzNhMmxvQXdMRmp4ekJwMGlUbzlYcHMzcndaRHp6d1FJUGpidG15QmZQbno1ZkE4T0xGaTVnNGNhS1UvRDFtekJncExXWDE2dFY0K3VtbllUUWFzV2pSSWp6OTlOTWVLc1hYWDM4Tm85R0lLVk9tSURzN0d3QncvUGh4M0gzMzNUQWFqZGk1Y3ljbVQ1N2N3RGF6YnQwNmp3VG11cm82bEphV1FoQUVGQlVWb2Fpb1NMVHpZT2ZPblhqZ2dRZGdzVmp3N3J2dlNvR3NwYVdsbURWckZ0NTQ0dzNvZERyTW1qVUx1M2J0dXVJWTVzMmJoeSsrK0FJbWt3bFRwMDcxS0ZXMGF0VXFUSjgrSGUrKyt5NXljbkpRWCs4cTZsQlNVb0thbWhyWWJEWVVGUldodExUMGl0ZHY1ODZkdU8rKysyQ3hXUERSUng5SmtmSWJOMjdFa1NOSGNQYnNXVHp4eEJNQWdQZmZmOTlEUGFPVTR2dnZ2OGZ0dDk5K3hmVncvdng1UFAvODg5TC9iZDI2Rlo5Ly9qa1loa0YxZFRVcUt5dkJzcXcwcjZLd0xEdkw0WEE4UEhIaXhHZ0FZdkZLRlFDbElBZ0tBQXBLS1dGWlZsSkxUU1lUcXFxcVlMRllVRjFkalp5Y0hBL21WbFZWaGExYnQ2SmR1M2JJeWNrQnBSUm56cHpCK1BIalVWMWRqYzgvLzl4ajdsNTk5Vlc4L3ZycnNGcXRlT1NSUjdCanh3N3B1dzBiTnVEbzBhTTRmZm8weG93Wkk3SDc1Y3VYU3lZTW85R0lKNTk4VWdMQ3FWT25ZdnYyN2NqUHozZGxmelJXdHVpUDJFNmZQbzF2di8wV3I3enlDdWJObTRlcFU2ZGk1TWlSNk5PbkR6cDE2b1RVMUZRa0pTVWhOallXNGVIaEpDZ29pR2cwR2thcFZDb1VDb1d5c0xBd1RoQ0VOK25mWElZUEgwNnpzN01wcFpTV2xwYlNEaDA2VUtmVFNXdHJhK214WThjb3BaU3lMRXRuekpoQnQyelpRaW1sOVA3Nzc2ZWJObTJpN3RMUWRNR0NCVlNuMDFHajBValQwdExvMXExYjZaQWhRMmhWVlpYME82V2xwZlRNbVRQUzhiS3lzdWpwMDZjcHBaVDI3OTlmR2tONWVUbnQzcjA3cFpUUzQ4ZVAweEVqUmxCWE5XcEt2L25tRy9yVVUwOVJTaW45OU5OUDZlelpzNm5UNlpTK3M5bHMwdThKZ2tDenNyS29UcWZ6T04rYW1ocmF0V3ZYQnZNd2VQQmdhUXdXaTRWMjd0eVpPaHdPbXBPVFF3Y05HaVNONFlNUFBxRFBQZmZjWmNkdzVzd1pldXV0dDFLeFIrZXVYYnZvK1BIanBkK2FQMzgrZmY3NTUzMWVqMDJiTnRGWnMyYjUvTTVvTk5LT0hUdDZmRFpxMUNoNitQQmhTaW1sSE1mUm5qMTcwdno4ZlByZGQ5L1JkOTU1aDM3NDRZZDA0TUNCdExLeWtvNGRPOVpqam80Y09kTGd0eHBiRDNhN25XWmtaTkRpNG1KS0thVjMzbmtuM2JGangyVkxKeGtNQnBxV2xrWTVqcU4ydS8yRDJiTm5ad0JvQVNBQlFCU0FVRUpJSU1Nd0dnQktobUVVR28yR0lZU1F3TUJBRWhzYmk0U0VCREFNZzA2ZE9xRlBuejRZT1hJa0prK2VqQ1pObW1ERmloWDQ5dHR2cFJwNUgzLzhzWFQvOSt2WEQvbjUrYWlzckVSR1JnYnNkanNvcFRoNDhDQ21USmtpbFMxYXRHaVJ0TS8wNmRPeGZ2MTZVRW94ZHV4WW5EaHhBcFJTMU5UVW9HdlhycUNVNHBkZmZzR0lFU01nc3N5MzNucnJ4cW1pNTg2ZHc0VUxGeVQxVTk3elU3U3BOUko4S3pHMTVPVGtSWVNRMmZnSGlKaXYyTFJwVXpBTUE2UFJpSkNRRUt4ZXZSb3JWcXhBYUdnb2NuSnlwQ2Q3WVdHaHBGNFNRdkR2Zi84YmdNdnpiTGZiTVgvK2ZQVHMyVlBLN3dSY3BXT2VmLzU1V0N3V0JBY0hvNktpQWp6UFM2eElQSjdjMXBPYm00dnk4bktNSERsU3N1RzFiZXVxZGpKNThtUVVGUlZoMkxCaFNFMU54YlJwMHhBUWNNbjhlZVRJRWFTa3BGeFYzQlBQODhqUHo4ZFRUejNsTVY0eCtWNnIxVXJxZVhCd3NGVEpwTEV4RkJRVW9HM2J0cEo2bnBhV0p0WGpGK1Y2cFFSZHZIaFJVcjJVU2lYYXRHbUR3c0pDcEtlblkrZk9uWEE0SEpnNmRTb09IandJcFZMcE1VZU5KWG43V2c4UkVSR1lPblVxVnExYWhjbVRKNk9tcGdiOSsvZS9xclhsM2g0WU4yNGM5dTdkKzhHSkV5ZnF2YlVyZDg0b0wrYVg4anhQV1pZVisvL0Jack5KYW1oNWVUbGlZMk5SWFYwTmxVb0ZoVUtCMDZkUFMrV2s1T3NvUHo4ZkZvdEZVcmNGUWZCWUUzTHpSV3BxcWtlMUYxOVNWbGJtMFNOVnBWTGRHR0RMejgvM0NXbytLblEwQ09rUWJXb3RXclQ0eDRDYVhJeEdJMWlXUlhCd01MWnMyUUtqMFlndnYzUlZKWDcwMFVlbC80dU9qa1pGUllXVUVMNW56eDUwNzk3ZDVTRmlHR3pldkJuejVzM0RlKys5SitVcnJsNjlHb21KaVZpeVpBa0FlS2cvVVZGUnFLeXM5TENmaVorM2JkdldaNFhadkx3OFBQend3M2oyMldkeDdOZ3hQUGpnZzlpMmJSdWlvcUl1ZTlNU1FqeXFzd0tBUXFGQWVIZzRQdnp3UTZrc2tpaWkrdTFMR2h0RFRFeU14dzFTVmxibUFmTFhVOFRmRXB2dWlML1Z2SGx6VkZaV0lqQXdFSU1HRGNMaXhZczlHcVpZTEJZY1AzNWNlaWhkYVQwQXJpVDhFU05HZ0dWWlRKczJ6Y091Nm10ZXZVV3RWai9RcGswYllkU29VZSsvK09LTGFBemNSQURpT0U0S0JSRWRBWVFRWEx4NEVkMjZkVU50YlMwVUNvWGtRRGgrL0RoNjkrNHRIVTljUTlIUjBkaTBhWk5QTzdCOHpPWGw1Y2pNekJUSEtqM0E1Q2FPcUtpb0J1cjhIdzVzSlNVbFV0TVZiNmJtYlZQekZkTHh6anZ2cU55T2dqbi9KRUI3NzczM01HWEtGS3hhdFFvalJveUFTcVZDYkd5c1ZBK3J1TGdZdTNidGtrcnNUSnMyVGZLazVlYm00cXV2dnNLR0RSdmdkRHFoVnF1UmtKQ0F0OTU2QzdmZmZqdmF0V3VIL3YzN0l5WW1CbHUzYnNXT0hUdHc0c1FKbkRselJyS3hUWm8wQ1FzWExzU0REejdva1lQWHQyOWZ2UExLSzNqMTFWZlJ2MzkvN05peEEwbEpTWmc4ZVRLT0hEbUNiZHUyWWM2Y09haXBxWUZhclphZXZtTGxpT1hMbHpjNDEvRHdjQ2dVQ256MTFWZG8wcVFKMnJWcmg1aVlHRHp3d0FPWU0yY081czJiaDdxNk9telpzZ1gvL2U5L0x6dHZqWTJoYTlldUlJVGc3YmZmUmtaR0JwWXRXOWFnU3NXMWVwczNiTmdBdTkwT2p1UHczWGZmSVRRMEZJTUdEY0w5OTkrUEpVdVc0TWtubjhUZXZYc1JGaGFHdExRMEVFSVFHQmlJdG0zYklqazVHVVZGUlI3OUFEWnYzb3podzRmN3ZObDlyUWZBMVUxcThPREIyTEJoQS9idDh5eUFtcFNVaE9MaVl2end3dzhJQ0FpUUFNSmJGQXJGUXdzWExuVHUzTG56L2YzNzl6ZXdpN3JmODRJZ1NIRnVsRkxpY0Rnb0lRVHlwdU42dlY0Q3R0VFVWTHo3N3J1SWpJeUV6V1pEY1hFeEFLQjE2OVpvM3J3NUZpMWFoUEhqeCtQWXNXT3dXQ3lZTzNldU5BOWR1M2FGeVdUQy92MzdzWGp4WWdCQTE2NWQ4Zm5ubjhQaGNPQ0hIMzZReHBlWm1Zbi8rNy8vdzN2dnZZZFdyVnBoelpvMVVDeGR1dlFQdXptcnFxcHd6dDJqUU43TTJHQXdlQlNJOUU2VGtzZXByVisvZmduRE1BditTYUQyeFJkZllOU29VVGg0OENCYXRHaUJ1WFBuUXFWU0lURXhFWW1KaWRpM2J4L2k0K014WWNJRVJFVkZJVEV4RWExYXRVSlNVcEtyRnBWU2lSZGVlRUh5TENvVUNuVHYzaDFCUVVIbzBhTUh6cHc1Zy9UMGRMUnIxdzRxbFFxSERoMUNXbG9haGc0ZGlvU0VCTVRFeENBakl3TldxeFZIamh4QnQyN2RjT2pRSVV5ZlBoMEtoUUszM1hZYmNuTnpjZlRvVWJScDB3WVRKa3dBd3pCSVQwOUhVRkFRZHU3Y0NZdkZnc1dMRjB1OUt0ZXRXNGNtVFpwSUhqcTVNQXlEWHIxNllkKytmYWlvcUVCYVdocENRME9saXJLaStqWnIxaXlKcVFRR0JuclU2WXFMaTBPTEZpMGFIUU1oQkNOSGprUjJkamFPSHorT2lSTW5ObWd5MHJKbFM4VEd4dnE4SmxGUlVRMDhkOXUzYjRmRllrRzNidDFnTUJqZ2REcVJucDZPOVBSMGhJV0ZZZnYyN1lpS2lzS3p6ejRybGZTSmlJaEF0MjdkRUIwZGplam9hR1JtWmtxZTZPZWVldzZQUC81NGd5ait4dGFEbkR3MGI5NGNBd1lNOE5oUHE5V2lZOGVPMkxObkQzUTZIVHAxNm9TQWdBQW9GQXAwNjlaTityK3dzREIwN05neDQ4NDc3N1MvOU5KTHAyV01UMFE0S3FxY2NpYW5WQ3FKNk5RS0NRbnhxS1JDS1VWa1pDU2FOV3VHRXlkT0lDa3BDVmxaV1VoTFM0TldxMFZXVmhhcXE2dHg4T0JCeE1iRzR0NTc3NVhVN2Q2OWV5TXZMdzlsWldWNDl0bG5KZTkxdDI3ZFVGcGFpcHljSEV5YU5BbXhzYkhvMnJXclZPcnE4T0hEcUtxcVFueDgvQitYSzZyVDZaQ2RuZTNCMXJ5ekNyekRPdVJ4YW1Md3JUdE96UzkrOGNzTkVMUFovTytRa0pEL0FiQzVLNE00QUxDUVZRWVJjMHVWU2lWMU0ySXE1cFdLU2ZNUkVSRlNYbWx5Y2pKU1VsS1FscFoydzVMbS94QlYxR2F6U1IzYUt5b3FVRnRiSzdYSHU1ejZ5Zk04NUdsU0RNTXM5aTgxdi9qbHhrbHdjUEJjblU1bmpZaUlXT2RtWmhUdVdEYXY5Q3ZxSW5YRWxhTkZDR1VZQmd6RGdCQUM4VytsVWdtVlNnVjNjajA2ZHV6NHUydmsvU25BUmluRitmUG5VVmhZNktGK3lxdDBpQjVRZVpGSXQ2dVdFUlBhM2JtZi9vd0N2L2pseGtwQWVIajRZMVZWVlphNHVMaXQxSlZjNm0xdmc3dUhndUIwT2tYUHFBaHlJSVJJZGpaeEV3Rk9vOUVnUFQzZFp4T1hteHJZNUtBbU5qSVdIUVVXaStXeWxXOEZRU0EybTIyWXUwcUhQL2ZUTDM3NWN5UW1KaVptWmtGQmdiRkZpeFlIdkpnYkJVQUZRUkM5bzVBQkdoR0xWNHFiSE5SRVlBc0lDSkNhS3Y4bGdLMndzQkFYTDE1RVdWbVpUMGVCM1c1dmtGVWdDK3RnVENaVE4zYzlOWC9wSWIvNDVVOFVRa2hLY25MeVE4ZVBIOWQzN3R3NXg4M2NSSldVaW4wUlJOWUdtWU5CVkVXOUdadFNxWVJhcllaYXJaYjZtdjVSY3QyOG9sVlZWWkpkcmJ5ODNLZGRyVEVQcUZqT096UTA5Q1ZDeUVEL3N2S0xYMjRLY0dzYUV4TVQycWxUcDlOZmYvMjF6UTFla3FjVVBtcTJ1VlZTOFcvNTU1Qi9Mb2EreUh0Y1hGZkdkajFhaDVuTlpwdzVjMFppYTJJT3FIZWJQSWZENGVFQkZkWFB1KzY2U3dIZ21mcjZlbjg1YjcvNDVlYVM0Wm1abVRVcEtTbXZYYmh3UVpBeE4xZjZnZnNQOXl2Y1dRbkVuVUlIK2VaME9xWE5YVFVFN2RxMSswUEFUZmw3YXo1UlNwR1hsNGZpNG1KVVZGUTBzS3MxVnRMYjdTd2dBSmhseTVZdGNEcWRONlR4aXRoVDBidnF4SlhFWXJFZ01GQUxRaGovVXZmTFA0MjUzYjExNjlicWxKU1V6OTA0SnNqQmpSQVJ4d1RLOHp6aE9JNjZhUnNWdmFSeUZkWGJZOXErZmZ2cjdreFFCZ1VGL3E0RDVPWGxvYmEyQm5xOURtYXpDVmFyQlhhN3BITEtLblE0aVJpZExQZUExdGJXVEhVN0MyNkk4THdUVGllUGF6MXZuVTZIeU1pSWErbzVhVEFZRVJJUzdET1MzQzkrK1N0SlVGRGduUHo4QzVXMzNKS3lGWUEzYzVQK1R4QUVnZWQ1T0oxT0tCUU00VGlPS3BWS2lhSFo3VFpZclJhWXpTYm85VHJVMXRhZ29xTDh1cmJ1QXdEbHRkeW8zbEpXVm9heXNuSlVWOWVndmw0SGc4RUlzN2xCandJM3VFbWdSdHhVbGRUVzF2UU5DQWg0Qmpld0xwenJhU0hndDV5M2FBQzlXakdaVEFnTEM4WHZtV08vK09VbUVXVjhmUHpEeDQ4ZnEremN1Y3N4WDh6Ti9Vb0VRUURQODVUam5HQVl6aXZrUXdtVlNnMjFXZ09OSmdCYWJTQ0Nnb0lSR2hyYUlDZjRkdzIyc1dxWFY1TFM4akljUDNzQk9uZEdnY0Z3S2FuZGJMYkFiTFdCdlFSc0lsc2p2Q0FRS2xDbXFLZ3dJU2dvYUQ2QWxCdExxeGtwenVaYVZXNTVjdThmdGM4ZklmcGplNkJvbG9HUXFCc1RGa2c1TzZ3MTlWQkdSRU9qVlFOd29tTHJKdGhzZ0twcEd5Umx0UGxiM09tL1pWNXRoVG13T0tNUm5STFh5SC9ZVWJYak1DSnY3UWVWbStnN2lrNmo3RmcrQUlMWVFhTVJITXBjeDdGRUlEb2w0V3AzdWFWMTY5YjNyMXk1c256YXRHbmxBTVJBWGZHVmlwNVNudWZoRHRxVlFrQXVlVWN0N3RBUHRic1RsaGJCd1VFSUN3dTdwcVl3anRKY0dJeGF4TFpMYW5CT3ltdFdrNmdWaXo3WWdQMUY1U0IxWlNpdnFVZlh1RkFvTFNaWUxHYVVsSldoc040TXd0a2dDRUNJRXNUcGRNTEpjY1RCT1FuZ3NxdTlrMnQrK3JuNCtDSGtUMWlRbE9LYTFVTXhQKzVhOXZzdCsvd1JVdkxaY2dSTi9neGh2UVAvOE4rcTIvWVpEci95SmJUTldzQlJWb0JtODk5Rm0vNUpVQVVFd25KdU44NGRxRUt6ekhaL0MyRDdMZk5xT0xBR2hmcE14S2FPYkl6bkkvKzl6eERZOTFabzNFU2ZVV3FnMWdiZzR0c3ZRSjErRzBMREc2Nm55dTgvUnNEdGFRaUw4UnhMd2Z0TG9lejFHSkk2UkRiWXgzemlSNVFZT2lNMk5mRmFOSjRCNDhhTks1dzJiZHBiTXRZbXlGZ2I0SXB6ZzFzbHBRekRFSVdDb1E2SEFrcWxheE16RWRUcVMyMytnb09EMGJGang2c21BcGJqbTNIMlZCTGkwNW8xT0tkckJ6YW8wVCt0RFhvMkRVRmhvUnE3OXBaaTd6a2R1a2NvWU5iWDRXS2RGWW5oZ2VEdFFFVjFIVEVybFZBSVRuQ3VDR1ZDQU1aU20vL1F5RGYyek16SlRFWEhHNXhiSURkaS9qWTFsdm5EOXdFRVVEQnc2cXZBMFNBRVJuaDZqU2dFRURDd1Y1VkQwSVFqTVB6U1lyWlhsWUpYaGlJb0t2VFNEcXdkb0FUT3Vtb0ltakFFaEhxbXREaU5kYkFaSFFpTWk0ZEM5ZHRCbUMvZGovMkxWNkxIMm8xbzBpd1VFR3l3MW5OZ0dBM2lCNDlBTUZPTy9BS0xqL2tRNEtpcEJzY3BFSlFRQTgrSEhROWJlUVVFVlRBQ1k4STl2cU1PSzh4VnRkREV4RUd0MWR4azgrcjduQWpQZ1RvRlVLc0JOZ3NRSEJmaE9UNW5EUHArK3htSWJJNjB6ZHFoZWJOMnFQeG9DWUNHYTVjNm5Xai8zQ29RWmNQUHphY09RTmxxT29nUURpaVYwamlvNEVUODdmTVFML3ZzMGpBNFdNc3J3RVRHSVNCUTAyQ3Q4RWJIZlZVVlZZVnhUZUxXQStCOXFhU0NJQWlFRU9wME9zRXdCQTRiSllRdzFLWEJLS0ZVdXRPc1ZHb0VhTlJRT096UUtMVUlEUTExMjlzRTJDckxRUU1pUGE0REFIQzZLbkFrQkVUZ1FKMjhOQi95YzFKZXF6ZWlvcUllYWs2UGtxcEsxTlhWZ3poWjJNd21XTlFxMU9vTUlBb0NjQzY3bW9KUWNDd0xFRXFvcTZZNnNWaE0vWlRPdXZrY28wU3drb0NRR3cxc2x3RHV0ekMyYTludnQrd0RBT2VmbVlpTHVTb3dTaVdFeW9zSXZuMGgrczRkN2ZyU2VBcnIreitEcEdFeHFEeWxBOHc2ZFBqa0p6UkxNdUxRZlZOUlo0MkV5bElHa2pZUnQ3NDZHeW9Hb0U0T2hXL05SN0ZLQVh2QkdjVFBYb0h1ZDdrS0VoYis1MUdjM0ZTQ2lPWVJNRjZvUThaM0d4RXJQZHdkT1Bua1RLZ0d6VUs3ckM1WFhocy9ySWVxK3dRa05IZXJFNHBBQk1ueVJ3Z1ZRSG5CYXo2cXNYUHdlTEF4TGFHQ0FTWmRLUHF1K2hDUk1ScFFVekgyVExrSDl0Q1dVQXM2MkJNR0l1dFZWMGsrL2U3UHNXZlJKd2h0bXdKNzJVVWtQL2tKMmcxc2ZwUE1hK1BuQklHSDhlZVYySDdnS3pDV01xRDFuUmo0eGl3b0FWU3UreTlPZmJrRCttTjFHSHhtTHlLOXNacmpBSGl1Si9ic3o5ajkvRWV3blA0VnJkL2VpN2EzTm5HcFpNYzJZZC9MWDhDU1V3SlM4RGpLUDlFaStyWkgwR1Z5UHdCbE9IRDNrOUFWbmtmSTdZdlIvK2xMcGRydHVYdXdlOVlpTUUxYWdTM01ROXhETDZIYlhYMTlyWldIOXh6SUx1elhLKzJZU3hXbEFrQUVVUzExdTBrSno3SncydTFVU1Fqc09oMzQ2SGczYTFPQzZNdFE5UXVMV3BVZFFlcGdYRlQraUlCM1hrQ2d2UXg1enp3SE5yUVpVSDhSUVVQbm92Y1Q0MEFnNE9KcnMzRnlZeUhDWWpYZ1dBZEltMlQzZkhpZTB6VUJtOVZxbGNJNmFtdnJvSyt2eHZIQ1NzUUZoN3JhYzluc0lMd0FvOUVHbzhOSkZGUUFGU2loREFoRHdJeGJzaUw4a1RVN242cXYweWRNR3o4WUtlby9ReEg5YmNEMmUvYTdaaERsblhCRzlzS29qNTRDTWVYaGg4enhxSmd5QWdueFNoZXZxRGtGUmVabWpGN2VFUUFMSjZ0RTFlbzNVYVhxaDlIZkw0YkNhY0N1SVpuSTJ6TU83UWNrQXJ3VHlyUXNESDV1Q3B6bGU3Rit3QkswR3JjTEVZSFZPUGZoWG1Uc09vV0VPQUJPRmp3amY5Z0lNSnc2QWsxNzNWV2RnK1hDQlFRbjkyejhmNmtBd2VrTmJCSG9zMzQ3MUNFdTZwNzN3aFNjK1dvWCtqNDJIT1lEUDZBK2JEREdmZUVxaE1tenJMUnY0ZWNmb05uVG42SFRHTmZUbldlRks0N3h4czFyNCtjRWdZY1Z5Umo3N1p0UUN3YnNITlFEK1lmdVFKdWVzV2d5Zmc2YWpCK0xIOXBNZEFPWTEvaWRIRUE5Z1UzVGJqQ0dmalVZUis3cUJ0QkxheTJ3NjJnTS9XbzBqdC9mRzZvNzMwTGEwR1Raa1JMUjU4dXZVUEwrWTdoUVQyWEhzK0xJWTNPUXNPQnJkQnpjR29McFBEYjNtNEg2TVhzUkZkSmdyVFJocVdMYXNtWC9MbGl3NEJtQlVnaUVRSURNWTBvcEJRVUV5aWlnMEFaUUZaekVYRnREdGFHQlVDanNJQ3dMYzEwMTRvZVBSR3lMSm9pTGprWnRSUVYyL3VkVkpJMThHY05uRFFHY091d1lPQUNsNDBhaXFmb1FqbjV5QVVNUGIwVjRrSURqOXc5R2xmU2c5RHluYTNMWEZSUVVvS3pNblFOYVg0dURKODdBb1FwQ3NzSUpzOWtPam1VaGNBS2MxRW5BUzRudEVBUVFRYURFa2R6cHlibjkydzJ0THptUFY3Y2Z3YWpVRVloVHdTOCtKTFpQTDFlbm5aQldpR2tEMUo4cVIwSzhlM0ZxVW5ITDZJNlNhVUNwQm5RblR5S3U3NU5RQUlBeURFMTZ0MGYxNmRQQUFKZjlKSzZucTRxcE1xRTdvcUl1b2o3ZmpvZ09rWWp2R1lrakQweEQ4cEIraUI4NERQSHQ1ZmFXUVBULzZkUWZmS1lNcWplK2c5enZkc05tdG9PdExrS0l1NXkwTnEwcm1GTVBZTmNjQitKNmRFWHl5SkVJVXJ2bnAyY3ZIUGpYTERqUGprQlVqMzVJSHREbEpwcFhaYVBuQkFCUm1abFFNd0NZTU1SM2I0WDY3R3lnNTAyUWNHUEtSWFcyRFlxOTMrRFlRWmRxVHAybDBCV1lFZFhSNTFvWk9IdjI3TE1MRmp6enNWc2w1YjNzYmRTTjBKVG5lVEFxQmdMbGljM09VcVZDQWNKeWNBWkdRQ0FzakVZak5Cb05BbXNLVUgrc0NIejBlaHlyL3dVVUFPdDBvRDZuQkJHcU0yRFNNaEFleEFCZ0VOKzNKNnJPTkxhcXJ0WlFXbEtDMHRKU1ZGZFhvYTZ1RmtkT25FS0pRNEhXb1VyWTdhNXFIVlFRSUhBY0dNSkF6UUM4UUFsQUNhV1VtZmI4ZjhaTkhkcm42WjdONHpHeWJ4KzA1d3F4cmREaVI3Qkc2Y1ZsdnRNRzRmZEZrQkQzbFZlaTgwZmIwSHZ4ZEtpNU11d2ZQeFI1eDJwKzgxR0RXamFIc2FENG12YXg3RitKZ3grZlJKZDMvb2VSVzdhZzYvMUQzZG9Nb0V6c2dkSDdma0xLa0U0dzdWcUZIMjUvREt4N3Y2WVB2SXdSWDY1QWVId0F6aSs1QjRmZTMzSFR6T3ZsenNublhvemlKbGwwQXFDS1JQeklMQ1JtWlNFcGF5UjZmTG9XVFc4SmJIU3RCQVlHemlvcEtlNExWeVVlRGFWVURWZjRsb0pTcXFBQVF5bDE5eXJsd1FQZ09CWXM2NENENDhCQmdOVnFoY2xraHNGZ1FGMmREanFPQWR1cUxVaVhMa2pLeWtLWE4vK0hsRjdYRmdweVZjQm1NcGs4ZW9BZVAzVUtaNHdVSGFJMFlPMDIyTzBPc0t3RENnQ1V0Uk9ISzJhTlVFRWdCR0NxcWtxVFFnUFZUeFRWR2x6VFp6ZWd4RUlRSE9DUDcycE1xdmNlY0JrclRIbW9PUWRFZHJ5OFN6NGl2UU9xOXU0RkR3Qk9BeXIyNXlCU1ZtRzI2dUJlbC9HMy9GZlU2Vm9ocWtVQUFCYXNSVUJVUmorMG0vY3NVdnJGd3BndjcrTE5JdWYvNXVEODlxdGpiUW1qeDRIZHR4cGxCUWIzZldLRnBkcHd5ZTBVR1FtMnJBUk91WG1qckF3QnJkSVJIaE1FQ0JhVS9iVDNrcUhhWkFMQzRwQTRhZ0s2djdZVXlwSnpzTHAzWmswbUJOM1NDU24zUG94T0Q5NEcvYm04bTJaZUwzZE9BRkMzYng5WXdYVzh5bC96RU5raDdlcmNkcEhoc0Z5aHNZbTNLRFVhc0hYMVYvZlBJVzBRMjlvR3F5a2NzZDI2SXJaYlY0UzNhQVpWRUhQWnRkSzBhZE43di9sbVRSTVIzQUJJNEFhQW9RTFB1T3h0VHNJVFFIQnloR1U1T0RnbldONEptODBWdE9zQ053NjBhU0RLQ3F0Z2l3aUh0blVxb2xxM2hEb2tFRUdkT29CbUg0YmVJZ0J3b25MdndjYlArMnJPMTVYWTdpNFlXVk9LQTNtVnNMRjI3Q20zUVdEdGdBQWtCQ25ocENBcXh0VzlCdFJWaDQ0Qm1LaW91SG1QanV6ZDdZRnZOK0xva1Jqb2EydVIwTEVuUmlScC9BaldpQ2hxRCtMSGNYZUFyNzZJMEFkZWNOdUJHcGY0T3g5SDNBOTM0b2NSSjZDeWxZR2tQWVJXL1MrcGxkekpMZGc2Y1N2c0JXZlFmTWxiY0RtYXFyRnIyRmp3Q2FsUW94NUc4eTBZT0ZRZWlzR2hjdE0zVU1jT1IrdkJIYTk4RXlYM1I3OS9UOEgrMi9zam9FVUxPRXFMa2ZMU2FuUVk2bkltYUxxTVJLdVdYMkY5dDk3UWRCbUIwUjhzUXRTZ1NWQy9kUmUyVER3S3hsYVBnT2hMRGdEendmL2g1OFZmSXFKTkM5Z0t6aUI2NWdLRXVhZmg3SUk3VUhSUmk1QVlOWFM1MWVqNndlTTN6YndLbHprbkFOQXF5dkhUN2VQQVdNckFkSG9NdDJSRUFkRGg0RDMzUUZmdmdORlFnUVBqUmtPcGJZRSthOStFMk1LNjlkejUyUG5ZT09RdkRVYjdsNzlFcTU0SnlGdnhLUEwyRk1HYVd3MVNjaThLWDlNaWJmbi9rTnpldFZmeVBROWoxeE9Qb095VEVNVGQrVFF5cGc5RzdkWjNjUGp0TFdBckw4TEIvWXJOKzFlaXlYMEwwWGw4VDNSNzgzWHNmbkFxU3Q1TGdaS3JoZG1TZ0NFL2ZZemd5NndWUWtqblVhTkczUUhndnpLVmxIZlRWSUZTU2dXbmt3b0FWU3JWY0RxZDREaU9FSjZubkVCaHQ5dmR3YnV1eWg5UlBRZWdhdnRLYkR6K0UzSWlBeEJsRFVQZkRkOGpKcjR2dWo3UUVqOFBHNDdRV0MxNHFuRTFEQVFhbkJPaEdtblFnUUFBSUFCSlJFRlVWTGlpQ2lvbXVKZVdpdVdJNnFEWEczeDFtWEludUhPRTV3VkNLVlhZN2JhSktwWHFmeTdyTDRkeWd3VWFiUkNpdEgrT2NhMjZ1aG9zeXlFeDhkcW9iWFoyRGxKVFcwbTE2LytvZlFEZzdGT2pZZW02RkIySEpZSVRnaEVVRlhUVis3ckNFa0lRRk5VdzBORlJVd2toSUJUYWtFQVA5Y05XV1FrblZBaU9qOEgxY09kUTFncHplVFZVTWZFSUNMcUtlQjZCaGFtNEV1cllCR2dDbFY1ZldXR3BySVVxSWhZQklaN0hZZzAxY0JnY0NFeEloRUo1azgzclpjNEpBSGhMSFd4bXhpdmM0MllSQWRieVVsQk5CSUtpUXE1NnJaU1ZsYzFOVEV6YUJjQUNWMmx4TzZXVUpZUnc3ckxpdkhkSmNhMVdpOERBUUFRRkJTRWtKQVRoNFdHSWpJeENiR3dzNGtJRDBheFpLM1R1bllua3BFdEJ1R3hkRlp4TU1BSWpnbjRiWTdOWUxDZ3RMVVZWbGJ5Mm1na1dpOVdkRDNvcGJjcnBsSEpCaVNDNGduQkxTMHZpVlNyVjNFdVBTeFVTSXNQaGw2c1RkVVFjMU5lNFQwQmM0OEdXbXBoNG45WUliWHpDZFIwM1VRY2k1RnBxYlRGcWhEUlBidVNyUUlRaysvNU9IUllEZGRoTk9xK1hPU2NBVUFSRklUam9abDE1REFJVGtxOTVyU1FrSkV6NzlOTlBjdTY3NzM0ZUFBOVFpYlhoVW9GS01aZVVLaFFLd3JJc2RXVWtLS0JTS1dHeHFLVE9Zb0dCV2hoWU84cEtTeEVWR1ltZ0lOZUVxYU91ZlAwdWEyTzcxSVRGMVRKUEJEVlhhVzhISEE0V0hPZVJNaVY2UWdtbGxNVEZ4VDBPb0tzZm9xNU5FbWY4SDFKdVRmRlBoSDllLzFKQ0NPbDB4eDEzVEhEYjJUU1VRdTVJWUVSY2tHVWxnT000d25Fc0hBNFdkcnNETnBzTkZvdlZuU1N2UjExZExTb3JLNlhXZlZkdFcyenNpOHJLU3EveTNpYVl6UmJZYkZZUHBzYXluRlJqU1JCNEtjSGRhclVNWlJobXJ2OXlYN3VFdE83bW53VC92UDRsSlRBdzhNSGMzUE5IVTFOYkh3YmdkREczUzdZMlNJbnlVcm9WV0phRFFzRktTZkkybXdwbXM5cWRKSzlEVUZBUVFrTkRFUkVSZ2ZqNCtLdmtuRDZFNHpndkZkUlZXODFtczhKbXM3dTlvS3hVMmx1dWdsSkt5YjMzVGxOb05KckgvWmZaTDM3NTUwbkxsaTJucEtTa3lEMmtLamVKWXVBTy94QUVNUVRFQ2FmVFNUaU9BOHVLck0wT204MEtzOWtNZzhHSSt2cDZWRlZWbzdTMEZGZGJQOUluc0xsQ082cmNLcWhCcXJObXM4bVpHdXZSQWRwZEpaTlFTcGtQUHZoZ05vQkIva3Q4N1ZKZFhZM1MwakwvUlBqbEx5c0toYUwvNGNPL2pCYUJqVktxRXNHTlVxcWdsREx1NnRseWxWVENGWWZEQlc2WDZyWVozQ3BwRlVwS1NuNGJzQmtNQm5mUGdocm9kSHFZVEs2MmVXTExQSG1OTmFlVEkvSXVVd0JJZlgxZHFrS2hlTXgvZWYzaWwzK3VSRVJFVE51eVpYT1NGN2hKc1cwQWlDQUlNdGJHU2F6TlZaRFM3cmEzV1dBeUdhSFQ2VkZiVzRQeThuSVlESVpyQnpaNWh5bFhlVzhMckZaUFVET2F6S2cxbUtBM1dXRmpPYm5EZ0JFNDY2eFhOdXhNWExCdUwvYVdtUzRkMkduSE43c1A0Y212dHVIZjIwK2d5a0g5Vi85Nmk5T0MydFBuWGNHa3YxTXFWcitBZys5dnUrNUQ1Q3QveFk3Wnl6M0dhRGkySGNlV3pNZSsyWE54NXJ1OUVIN1hMd2pRbjlpUDh4KytneE52cm9URDY3dXFyU3R4Y1Baak9QTEtoN0JhWmIva3JNTysrMmZDNUUrR3VWN1M5TlpiYjczZERXd2VRYnNpYS9OMEpIZ3lOeEhjckZZYnpHWUxqRWFYU2xwZFhZMnlxd2hTOWdDMnFxb3FWRlpXdWhMYzNYRnFMaFhVSnJPcjJXR3cyTUVRVnlFUHdja1JweXRtalZnTkZRTm5mN1Q1WVM0cUVTTmIvajk3NXgwZlJaMy8vK2ZNbHV4bTAzczJnU1FraEJZZ0dDRFNJUUtDb0tBQ0l2WUduT1c4czVldkRVODV6M0xxejNZcWxrTlJFYkZncEJjRlJLUUhDTTJRaFBSZU45dG5mbi9zSnRrVVVoQ1UwM2s5ekFPem01bjV6T2Z6bWZlODYrdHQ0S0gzdnVGQXZXc0xmNVQrSFV0emJNd2RNWWpnMmp4dVh2SHpyOXpBQ3RyQWRKUXQxejdhVkhiMHEyUmtYUm1XeXRxelBzVGpMejFMOE1VejhTd2l5dmxpSlg3REp4RTNZeFRaajk5TTVvYmNYM0dGS2pKZmVJWHF6RDFrdnZweGk3bW8zdncyUC96amE2TG5Yb2UyYUNPYjdudTF1Y0pLSFV6TUVDMEgzdCtnN0tPekJKMU9kME5tNXVIQkhscmI2YUtrTGJTMmx2NjJ4cW9FbDBsYVhsNUJjWEV4SlNVbFhSZHNoWVd1Wml6VjFWVXRURkNyMVlMTjFpallKUHk5dFlKV0ZCQUZCTkZWeGk4QVl1SEo3TnVQK01WeS82amVqRW0rZ0xrSkFpdjJGd0JXTmh3dTRkWkpJeGthRThIOFMwZGdQM2FVZzJabDhjOFdpcjVld3Y2WGx1S29POG5oeFl2WnYvaDVxaXFrUmlsRjFwdlBzLzJPTzluNzhoSWFURjE3cGNoMWhSeGEvQWpiNzMyRWdveDhUNmxIOWpzdnNmMk9POW45MHBLV21rK0hndmNJeDlhYWlKdmNwOFhIZzU5NWc0UkxKeEkxY1JhUktTR1lDb3QveFV3RU0vS2o1YVRlZncydEt6Q3pQMXhLN01LSDZURnFHSU1XUFlMOXUvOVM1bUhWUk0yK25PTC92b2RGZWVPZU5mVHUzZnRLV2dZUk5CN21hS1BXMWxSTDZobElzTm1zV0swdFRkTHE2aXJLeXNvb0xDenFtbURMeTNNVnVMZU9ncnBNVUZkYWgwZVQ0K2FBZ1N1Q0sxb3M1cm5IeTZ1bkowU0U0R3lvNTFTZGxjU0lFSTZYVmdGT0hKS01TdVcrbktoQ0pkZHpzdEt1clB4WmdrLy9ZWVNOR1lLb0NTSTRMWTJ3dExIbzlhNzVQdkgwQW83dXFTSCt0bHZSNUc5a3c5MHZka2xiTGxyeEdlb2gwNGlkRU1kUDE4eWp2TUlCT01pNGV3Ni9aRHBKV0RBZkgvTWVOdjcxMzEwNlg5M1BQMkJQSEk3ZmFiSXJpNWN0SWp1M0YvMHVIM1lPWnNoQzlkRTgvUHNuVW4veUdEYXZSQUlpeXFuSmFuYVhpQkVwQklsN0tjNnlLUnZxTEVHdFZsK2NuNTgzbXFiY3RtWmZXMk5ESnplZGVJdEFna3U0MmQzNWJXMmpwS1dsSmVUbDVYY3MyR3cyRzhYRnJsclE2dXBxdHduYTRCRUZQVTE2aDlNcHlMSXMzdkhRWXlxTlJ2TVhzODJHdDFiRnAydldjczJLbjlGcjFOVGFIWUEzSStLRFdQRmpCbVgxRGF6ZHVvOWNXY0JzZFNncmY1YmcyM3NReG1GSmlMb0FJbEpUTWFhbW92TUdLQ043NVM2U0huMmNpT1JrQmk1NkZPZTY1VlRVZDM1Ty82bFgwM2ZLS0tLbTMwYjhNQ2M1R3pLUVMzZHliS09Ub1l2dUlpZ3hrZmk3NzBYY3NZS3FoczdQVjN2eUpJYm9tSGEvYTlpL2dtMnY3U050K1JMOGZNOEZsYm9KbXhsVW1tSzJUQnhMWm5vdWFqMDQ2anpOQmg5OFluVFVaUlVyRytvc0lqSXljblpLU29yT3JiVzFDU1EwbXFYdHBYKzR0TGJHS0dtRDJ5U3Rwcnk4bk9MaUlteTI5bDlDYXBjSld0aWlINmlyL3JPeFpLcFpXMnRNeEhVNm5hNDJkcElrQ0lJZ3ZQTDBZL09CVkwxV1M0UEp5ZFhUTCtFU3A1cTlPemZqcDNIVmhONDJZd3JXdFR1NWZXa1dBL3YwWlh6UUNid1Zkbzl6RDBjMURkWCtlSWU1MVNUdlVQUysxVmdxZ1U3NjFCbzhraUgxeGtqS0s4dHhsTlppdFJTeTY5WWJtOVI5cjZRa3NBS2RVUC9MT09BME5Pa1ZPN1lSY1BGc0FrUFBGVmU4QWEwZW5QWUlKdjYwRDAxSUVEOHNCcld2dnUyZlNrNWwzNXhGaUtJNGJNMmExWk5EUThPK0JlenVId2R1V25GY3lidUN1eTlwazV6eDFOcTBXbGNnUWFkekJSS3FxaHBOMGtKaTJ5bmZVNXZONWlZNklsY3RxR2VUNDViNWFnNkhRM0FMTmNIdWNBbTFqQVA3L1ZRcTFYeUFQcUdCL0hLMEhORnJNS0hBOGVKeUVudTRPaEpwdlFPNDUvS0wzUzZhUWlaczgrWCtVSVZsOHV6dUlBRkJjcmFrSEZNSDRCMVFRME9wRGVLMFlDckRYQmVBTHFnTE9vNkhyOHRjV0lSK3NCRjFtQUV2UXp5alB2NFVRemZmUzM2UmNaZzN0SitIRkRUeFdwSnNvZTBia1NYNTRCMkl6dmZYRkZmcUNPamZnNXJNNCtndUdBYW1ES3BMd3hnUTc5dkNYRzBvTUJFU0Y5bnVHSnhhZnd5QnZzbytPeFBQWjNEdzdFY2VlZmo3WjU5ZGJBUHNzaXc3M0F3Z1RyZlcxcUoxbjlzeWxKdWpwRFozbExUUkpLMmhvc0lWU0FnUEQwZXZiL21DRXB2b2lLb2EyK2MxZURROHRqYldndUp3TlByV0hOaHNEZ0FCV1JiMjFEaHVYYmIvVkgrQTJMNTk2VmVidy9QYlQ3QmwvMTQrelpLWmxld3FIaTQ2bGN0SGUwNnc2ZUF4L3I1MEU0TXVIRXFjSXRmT3NsSVNnNi82QkpudmZVSGV1ZzAwbUFCQ2liMWlHSWVlK1FmRkdmczUrTVJpVkpQbkVPelQrZWxxMW43TTBUWGJLZmoySGJMMmFPZzVzVDlDV0NwOXh0cjQ4ZjduS2Q2ZlFkSG1OZXgrNFowdXBaajRqUmlKa0xrSFV6c2VpTXBOS3ptK2VuZTd4KzI1ZGd6YlgxN1Y1V2tvK3ZZampueStBYWU5bkt3UFBpUjcreUVBZWwxM1BUbHZQRVB1OXpzNThQaXphS1pjUzZoSEViMWNjWUJ5MHlBaStyVFZHZy9jTVlYdm4xMnU3TEV6aENBSWZlKzc3NzVKdEsxRzhFejlhSkcwNjNBMCt2V2JUVktMeFZWTFdsZFg1ODV0SzI4M2tLQ2FPL2Nxajl5MUttcHJhOXBwZW16RlpuT0ZZcDBPUnhON3h5UHZmUmFrOXZaNTNTcHFnNFpIQjRIS2k3UitVUnc0bGtWR3BaTTdMeDNITUhlZlE2Zk53cGJNYlBhWDFESXdhVEFQaklubjkrQU5OWmxNT0owU2ZuNSszVHF1dExTTTRPRGdidlVJUFpOanpuUjhydDNqalhIU2haaU9IcVFodndqRHdBdlJld3NFajVtTXF1d3dlYXUzSU1hT1pQaWpmMEhiaFg0VHdlTW1ZenV3bHBMTVdnWSsvVS9DWS93QWtmQXBNMUNWSGlRdmZRTzFoYlVFanh4TFVGeGs1NVJIK2tqc0dVdXA4UjVEV0srV0xDK1N0UUYxV0N4QmNhMXFBYVZpRHYvemJZeDNQRVpZYk5lWVlhcCsya1JEclphdzRRTVJHa3lJZmowSjdtMUVGM2NCSVZGMlRxV3ZSWWdlemZCSEZxRFZOSSs2NkpQWGFPZzFuY1F4N2ZjOTlSc3dqT0Q0U0VWS25hbk9yTk1aTlJyTitrMmJObHR4MTQ4MlVva0xndERZV2Q2ems1d2dpZ0tpcUhML2lPNE9WeXAzbHlzMVdxMFduYzZMb0tDZ0Z2Umd3amZmZk8zUnk2QlJ1Tlc2bVR3YWszUE5XQ3lOWEdzT3dlbDBpcklzaXphYjlWNlZTdlhzLzlMa251OThiR2M2dnY4VjJMSTJzUEhwSDVuOHdlTmRlckhaTXI1ZzFTTS9NK1BiNXppbkhsbEhCVnV1K0F1RFB2eVVvRUJSa1VMbkNOWFYxZjhLREF4YWlZdXp6U1FJUWdNdUQ2MU5FQVNISUFpU1NxV1NHam5iZERvdldhZlQ0KzJ0eDJBdzRPUGppNStmSDBGQmdZU0doaEVWWlNRdUxvNysvZnNUSHgvZmJJcDZCZ3pjWkpHTkdocDJ1OE90RWpvRmQzcEhVK25VbmoyN2ZWVXExYzNLVWlub0RyVHhFNW5hUmFFR29FMmF3ZVZmTGVhY2g1blV3WXovWnJraTFNNHgvUDM5cjd6Ly92dDhHODFSZDRSVVJhdFNLM2R1R3c2SEsxSnF0enV3MmV3ZVVWSlhibHRqSUtHMHRKU0dodWJRdk9ncWNxOXZaWHEyekZscmoydHQ0TUNCTndJS3VaV0Njd3RSamFoV2hNMGZ5TmNXLytDREQwNXdDN1oyZlcydE9kdmE1clpaV3dRU1hFWHlya0JDMDdacFdlVGVtSy9XTmhMcVp1NFFBT0c2NjY1VnFWU3FHNVJsVXFCQVFYY1JGQlEwbzFldlh0cDJ0RGF4VVd2enFFaG95cDF0RGlSNGtsSTJGc203MGo4c0ZvdExzTG0wTlZlUmV6dEN6Wk9TcUVsYmUvZmRkNjhEQmlwTGRQYmhJdFZUVWdvVS9LRzF0Z0hidG0wZDB4V3RyWDNOclZHNE5SYkp0MHovQUJCYnBuZllXdmpXbkU2bk8yK3RtUmtYRU5WcTlYWEs4cHhMd2VhblRJU0NQelRDdzhPbnVRVmFvOWFtcGhVWlpXTTFRcU1NYXVscnM1MDIvY1BoY0tCdXJBZHQxTllhODlXYUt3eWFmR3U0S2IrbkFxT3JhMnVwc1l0RUJmclFyZ3ZFS1lPcWRRS0FrNktxT2d6ZXZ2aDVxWlRWUFEySzEzeEtWYkVWTWFRWGZhYVA2ZEl4dHZ3amxCU0s5QmplcDh2WHNSY2ZJV3ZOejhoQStNUXJDSW8rVjVxaWhPUm9XMDBxcU5WbnBTdFdpeXRWNVpLenQ0eGVGM1dEQnJ3dW4yTmZiRVFDQWxNdkpxSmYxK2luSzdhdlJ0VjdIQUZoM2wyK1ZNWFdkRXF6eWhGMDRjVFBuY0xaU3VXVUdpb28zTElOcTBuRWVPbWw2SFcvM1g0MW5kaE5yVFdVeUtTWUxoOGppdUtJNDhlUEpic3B4QnVMNCsxdXJjM3BOa2ViTkRhbjA0bkRac0ZVWDQ5VHE0WFFTTHk4dkZyVmtUWnFiU1dJcm5yUTVnb0REMjJ0VGNBQUVMUnEyOVYzL2ZzRHByMzFMWC8vNkV0R3Y3U0NIYVdOOVhaV252dm9DMFkrOVI4U0ZpM0hzMFRWWWFwZy9pc2ZzZUN6elZ6NjRsSStQRkttU0xEVFFPVmxRRk56aEQydmZON2xZeHIyZmN1K0Q5WjJ6eVFRdFdnTUJvby9lWkhDektwemRqK24zbm1ZbFNsRFdabVN6Q2ZHYUQ0Zk1wU1ZLVVBaK01SSHYrcTgrUjh0NXNpR0l5MWZuUVc3K1BtRi8zYnZSS0lhamNGQTVkb1B5Zjd4ZUpjUHkzN2pNWW9PVlhmdlVsNTZ0R0k1KzU5Nm5iTlhhdTlnOTAyWDhNdW1RNWhMeTVIT0lUdkp3WWR1b3JpdzVRVXFOeTBqODh0ZDNUNVhiR3pzUkU5enRGV0VWR2dkU0hBNm5UaGxHV3QxT2ZXVmRVMFZDV2F6cFVscmM5V1JsaUUyVWhKNUNqVjNoWUZuMEFCWmxvWHE2cXFCZ2tvN2U4R3NtV3gvWUI0cjc3Nk9CL3A3c1dqRHdjWkhrc2tqTDJUVmdvdG8vZTVmOWYyUDFQVWN6RGNMTDJmbE5VTjUrYXZ0VkNqME1PMGlkTUtsOUpxY2VucnRyS0tFMmxPRk9OdVpQMmRESFhYNXBiU2g4WlJzbUU3bFlERlptajVTaDhVVFAzc1dnVkcrcDMxZ0d2SlBVVjlTeGEraEJlMTUyM1BNT3JDZldRZFc0ZWNkeUtpMSs1bDFZRDhUbjdxMmVYaVNTN016NWVkZ3FiTjBycUU0SEppT0hhRG1WRG1TdzBHYjlyaVNqYnFjZk95Mkxtd3lRd1M5WnM4aU5QRTByZVVjTmt6NXB6QlZ0TS9jYWkwdHhGelQwTTVhMUZDYms5OWluUUtIcHhFLzR5Sk9GK2lWTENacWMzS3dObGk2T0xzU2tpT2ZzbjBpU1lzZXBQOWZic0Rnb1VBNlRSWFVuY3B2ZDYvSUFBNExkVGs1WFpvbnllR2dldWNXVERVMjE1eTN1L2VLMnpLOXVLOWhiV2haY3FMUmFDN2J1SEZERHcrTnJja2NiZksxdVZzT3VJUWFndWp0RFJvVkRtZGpMYWtIdFZGZERhVTUyUlJrNTZIMlRPOW9McHR5NG5SS1NGS3p4Z2FJQm9QaEtoQko4dWpnM2pQSUgwdEpJLzJRbWlHOW9xQW1wODBVN3NncVpNSkZZd0VJanVsRlA4ZFdkcFk1dVNSY01VbTdZOUx0dkdvTVplWkl2SDBscXJNYlNIMy9FNkw2dUpydTJnNnZaczJzeldpb3dxd2Z4dVJQbmtldkJmT3hMV3llL3lBcVl5TFc3T05FM1A0dmhsOC9yc01yeVhXNWJKazlENHR2TDdSeUpaYW9TVXg3cGJrL2orM1lKcll1V2s3eUcyOFI3UDhyNytySWwzeXk0SE1TZXRWUlZpUmhyM0l3ZXYxYUxKL2V3L0hTa1Z6MDJDekF3cGFSL1lqOU9Kc1l6UTdXL2UxRkxDY09ZamM4UmZWM0FSaEd6bUhNUFhQYzVtZ1dXNjZiaTYydW51cFNQeWF2WDBIQUdWclo5aFByV0hYTjAvajI3b1ZVZmhJcGJqb1h2ZkVnV3JkZ3luNzFYbkxWS2l6Wm1VVGUvUktwMTQ4SEpFNjk4d2k3bC95RWYzd1F0ZmwyUm42NGpQRFlqZ2RSdmZsOU5qLzRMdjc5RTdBVVpCSHo0RklHVEl6cjhKaTg5LzdCNFc5MlVsdFR4RS96NXFKV0J6RHMvWGNKOW9XQzl4N2hwemUyRVJBWFNIV3VqWkdmZlVwa25HdXhDcGZjejRHZEVtTDJMcHdhYjZ6K3ljejg1SituZFEyVXIvc1B1OTllUTEyMm1ZcDdydWFFUVVYUCtVL1JmL0lBQU16N3ZtYjl0Y3VSS241QjZuTU5VOSsrRnhWUXZXTTVQOXo5UFBvK2ZURWQrNFhFZjd6YmRBekE4T0dwWTRGVGJxM05CcklOQkJXeTdKUmxXWlJBbHB4T1dSQkUxR3FYNWlaTE1vTGtiSkgrMFZCeWdyMHJ2aVF5MmtpSjFJQzZ0Vyt0MFZIbjB0YWFUZEJ2di8xV0o0cmlWUzFYM2NSN083T1lNK215VHJhSGxiSTZCeVA4UkY3NGJBM0pvMGNSN2dObHRXWUk5MUhrVmRjTkdZYTh1d2F0citzQktmcmdFZmEvczVLb0YyNXh6WEsxbHFscnY4U2dzN0g3cWxGa2ZyMmZsTm1KN1A3cjM0aCs3RE1HVGV5RFZIZU03OGJlU3NYbFd3bnU0RG1yMzU1T1ZmQVVydmo0TWRmYnVCVTlqTE91bElyOWg3Q2RKWHRLUHJHSHdCYzJrenJjQ0E0TFRxRHdkQ1owOUFpbXJGakI4U2ZtVWhYM2QxSnZiS25kU3FVbUJxNzltbUIva2QxWERTZjMreXdDcHNlZm1Wc2dhZ1NYL3JnVmpSckF3cllwUThuZFBaL2V3MTB2RSszZ1M1bjQxRHdjaFZ2NWFzSmpKTTdhZ2lGN05Udi9jNHlMTjIvQ3oxZWsvSXRuK09uNTk1bitlc2V0UUxLWHZrdmNveCtRUEtNM0lPSHNnaGJWNCtiSDZYSHpLVllsWE0zSUZTc0lhc3hrcnN2ZzUzK3VaL1MycllTSDZjaC8vVzUyUGZjK2w3M1YvSEtxMm5tVVN6YXRJeUJZaDlOaTZkRGZHVEo1QVZNbUwyRHJoRGlpWHYyY1hyMWJwa3liSFVZdS8rWTUxSlljMGdmTnBLemlYaUo4QzlsNSt6OUlXcnFSWGttaDJQTzM4UFhNcDRpYnVCdzNWU0ErUG9acDgrYk5XN0ZzMlRLcnl4eEZJeURiWlJBRndmV2Y0Q0t6eGVsMHlrNm5VNUFsV1JhY1RuY3RxYnNCakNHQTZObXppSXdNcDJmUENOU05VVkNYR2VyMFNQRm82VitiT0hIaWJLQzV6N3hrNS9VdlZ1TklTR1ZCLytDdWVuVXc2RFJvUkVHUlVXZUltdTByeWZ3NEhWTkZIWTdxRXFTK3plOGFROHBvRERvQUxTR2poM0g4d0NHWUFxV0h6S2kyZnM3ZUhTQWpJVHZ5cWNxdUozalE2VjhxK3FRVXhJemIySEszbGZEVUZIcE9tNGJCb3pKTVAzUXVjdzdQUFhzM0ZuTWh2WWE3VFVHMTdsZlZFYXZpa3dqMmR6MTRodWhJNnFxcnovaGNnbWpoeFBPTHlkOTVBTHRWd3B4VFMwQmxEZUFTYk9FalJybUdiQnhHY1BCSktyTXNtSGR2QTIvSWV2bFpWd3YweWhQVUhQVEM2WFllblE1aEkwYnk0ek4zNERoeUNjR3BZK2s1NFlJekhyZmxXQWJtcUdHRWhibWlDQkZqeDFDN05MM0ZHQUltemlUQVhjdXQwdjI2YUVOZ3loQlhkWWd1QWtOSURaWmFjSmJ2b3J6R2k2QXYvMFBWbDRCa1Jxek1wS1lLOU0waUkvcjU1LytWdW16WnNzMk41cWpzTWtjZElEdGxHY25sYjVOa1NYSzIwdGc4b3FSYU04VS9iYUdpcHA0Q2pSZnFSaFBVNld5ZDR0R2NrQXVJYXJWcWxzZjdtazlYcldhckdNZjdVL3ZUZVY2NEY2Rythc3BxbmZ4bHhrVkFBLytwaDFBL3ZTS3BPclk4VzdvcVRxNWp5NlBMR2ZmRmZ3bUxEYWJxNnhmWjhyV3RJd1hQZFJKTkVCSFRwdUxqWHFnZVU2ZmpHKy9kNGJYVTBhbGN1bTA5UlZ1M1V2ak5VdExmV2N2TXpXK2hQVWUzS3VvTnA5bEhVdE8vY2hkNVNRVlBCMVkzaWhiYWU5MW12L29RK2FVcGpGMjJDSjIzbXQzWERVT1c1Tk9md1gwOXI1akJSRTJkNnY1OEtqMXZEbWd4bFBhdUZYWGI4MXlTdHAraXJUOXg3TEhyS2J6dVZVWXRTRHRuMjB2cmMvYWVQMEU4VGRHYmZ6UlJVNmMybGNUMW1EYTdqVnNnTEN3c0Rkald5dGZtbWJBcnUxSS9YSlJHc293Z09KMnlTMmE1M0doVm1ZZEJOakpnU2hyUlBZeUl6Y200enZiU081QmxXYWlxcWt3U0JPSGlSbjlaK3ZyMWZGWVh3anRYcGpTcGxKMXRtWkdKUmpZZnl3YWdMUGNreDlTUnBJWXEvclhUemxod0NPcnlYRXdlY3N0ZVZJUWMyWmZnMkdEQVFkNjZsbzFIVEh1MlVXOEJzRkcrYlJlaEF3ZUJiMS9DK3BocHFBc2diR2dLWVVOVENJaUxRV05vWGpodFNBaDFCUzBicURqcTZzQS9uT2pwc3hqMjBwT284NDdpNmZ1MVpXMWwrMTBQVTFsMzd1YkFLeUNBQmpmOXM3UDRBSlZGTGNtUjFIb0Rsc3J5cy9lZ2h3UmhPdFdTYnJxaG9JQ0FJY1BRZWF0eFZoeWlhR2RMUHJtU0hWdGQ4MVc0aTRxcTNnVEg2UWdaUGhwcjFpSDAvWVkwemJtZk1haFptQm1DMERxS01WVzFsTlMydWpvTThja2szTGlRNVBtWFVYMzB4Qm5maTY3UElIUUZ1eWd0ZFFVaGluL1lpbC95NEYvTnFLUDIxV01yNzFvRVhSVTNqQkJ5c1JwaW0rY2hMZ3BOcTdlaldxMU8yN0JoZlk5MkJKdXEwV0pzbEVlU0pDRUw0TERaV25TMnNwZ2FFUHo5Y1RpdDFKZG5vMjRVYW0yckRKcUNCb0tQajgvbHpjWjBDWXMzWlZHcjh5THRXVmVvWFJ2YWkrMExKd0R3NU5zZmtGNXNvODdtWU1haUpTUU5Ic2FITXdZeGZjd292bnRuRlplOWVaS2FxbHIrZXZrMGdwVVN3Tk1MdHJBUkRKNFp3dW9MUjZBMnBuRHh0NitoSHpZVkkyK3pldVpjdEdJZHVxQ1Fsb0lnU09LSFdaZWpwZ3FMNzBRbXp4Z0V3TkJYWCtiNytkZVM5MVlDYW5zNTlTWWprOVl2YVNMUTdYWExQV3k2K1Q2K2ZGOUgzTjlmSlBuS29kVHYrSWlOLy9jSmdYM2pNR2RuRW5MN1EvaDd2SlNkNVNmSi91d3JZaDViVE5BNVNuOExtWGdGcW4vT0lYM21UNmo5SXRHRnROUnpqSmRmejlGYkgrS2IxYS9nTi81NnhqOTY3YSs2WHZUY0JaeVlONStWSTk4azRwcUhHSG5ITkdLdXVaWDFDeFpRdDNFZ2xoclFKN1JrWGJFZldNMmEyV3V3WkdjUys5ai9JOEFiR0RDVjFKdTJzMzdDT1B6N3hXSStsWTNmcFE4eTlwNUwzVTl5VHdiZmR4RmIwMGFnOG90aFRQb0tnbjNneUVOenlEMnB4emRVUzlYeFVsTGUvdHVaMzR6dklGSWZ1cGp0MHlmakh4OU1kYmFOa1o4cyt0VnJrbkRUUXJiZlBaTmYvQTNFM1AwU0E2Y25kZkNtTUpMNjJrTnN2V2tLSitMN0lsZVZZZ2xLWmZwSGk5b0kyR0hEaHFVQ3VaN0NUWlpsdStDS2tFcXlJTGpOVVFtVmx3N0pWRTlWdGdsYllEamFXQzkwNFVacU0zOGlxL3drSllJT1lmRGd3ZTcrQm1Zc0ZvdGd0VnF4MisyQ3crRVEzQ0ZYbGRQcDJBUDBQeHUyVlVsVlBYcURBVC90NzZPdG5lKzBSWjNEZ1NrL0gxVmdCRHBEVzcrSXM2R09obG9MUGhHaHJjd2RpWWJDZkdTdlFBekJYWk5Fa3EwQlUzRTVtc0F3ZEw2NjMyVzlaSnVKK3RJNnZLTWorTDMwZTJkREhRMmxOWGozakViVnpzdllXbGFNcFBORDc5dlN2SmNzSmt5bEZYaUZSYURWZFcwUDJHcktzTlpZOFRaR296b0xsQ1pPVXcwTkZTYThvNDN0anYyM2NhbllNT1VYSS9xSG9QZHZQNWxabHVXam9xaTZBNmdINm5CUkdwa0JpNEJnRjBUQktRaUNwRmFyWlkxR0kzdDVlYUhUNldTOVhvKzN0N2VMMHNoYmo0OVdUMWpQSGk2TnJka0ViZGJZY0NmSW1VejFhV2RIcUxrY0h1R0JTcm5RcnpRR01FVEhubDc5OS9iRjE5dTMzYm4zTnZiczNtcHB2Zkh0MmZOM3ZWdEJhOEEzMnZDN2prSGw3WXR2QjZrYVhxSHRWeXFJT2dPK1BiczNkcTEvS0ZyL3N6aDJneisrQnYvZmQ4dUtXZ3lkN0NOQkVQb2VQSmpSZCtEQVFmdmJtS1BJVG1Ra1FSQUVTWEpwYlkyQkJNODZVb2NrSTJuVjJHd1d4TWJHTE0yNWE4MytOVUR3OHZLNlRCRW1DaFFvT05lSWo0OGYwY29VYmMzNFFYT1psWVNuN1BJc2tMZGFiWWdldmpYQjdWc1RQQngyb2lBSTA1VXBWNkJBd2JtR1hxOVBvN242b04wV2ZhNGZxWkg1UTJpaHNUVjF0ckkxYW15U1IrREFwYWtCZ3RuY01CV0lVcVpjZ1FJRnZ3R01SNDhlR1VqTDhxcEd4by9HMUROQmtqeUw0NXMxdDJiMmp5YkIxb1p6emVYZTBHcW5LblA5MjZLMHRKVDgvQUpsSWhUOEtSRVRFelBNVTJOem02T3FWdVpvQzY0Mk40VjRDNjFOZEFjTW1sUzd4Z1BkWnFnaTJCUW9VUENiUWFmVGpXK2xyYlZuanJhUVdhMERDWGE3SGRIVERHM1UxQUNob2NFMG9YMHoxTW5Pak1Nc1dybUJlNWR2NHYxOXVSNzBLekpaZVhsOHVtMHZyMjQ4U0szSFVRNXJBOXNQSGVldGpUdFpubG1pck9CdmlFUDNYY0dKSGNYbndVZ2tmcjU2UEFXbi9qaHpheXZOcGJxdzRneVBybVBiWlpkUzJxWERiVlJsSE1KK0ZoaHhhamN0WWNNVFM4L3FQTWdORlpRZXlXM3orYy9YakNVdnAzdm1hRWJHZ1Q0ZVdsc0xqYTN4cHlWWG05UW1RaXEyTWtQeE1FTW50cjgzNi9ocWJ5RjlZbVBFelJLVUFBQWdBRWxFUVZTNHRIOFVtN2RzNFBFZkdrZHU1cjMxZXpoU1hNSmJQMlMyRUd5bGVUbThzemViL2IrYzVJdGppbUQ3TFdFdEs4QnV0cDBISXhHSm5yY1F2OEEva090ZzFTdnNXYkwrakFXOXBTQVBSMWU2VFZQT2pxdHZwTnA4Rmw0dnBrb2F5czR1LzU2VSt3TWIvdnBpbTg4dGVUblk3ZDA3VjY5ZXZaSTlOYmJUbUtONG1xUE5XcHRMc0ttYm82R05UQjR1TTFRVXhmWUZteGpBNGhzbk5mMGEyRkRHWC9ibnd0aFl3SnRuYnA0Sk5UbDhjM0JuU3pHYzBKOFBFdnF6ZXNOYVBxaFRoTTI1UVBYT2RJNHZYNDhkRFFFanA5SC95dkZOU2JxMjRxUHNlK3gxekZaZkV2OTJOeUZHWDhCQzNySVBLZHA3Rkx0ZFRmQ2tXZlNabm9vQVZQK2NUbVdsbm9ZOUc2aXBGSW03NlhhTVNlNGlkVWNkMmUrL1ErSCtrM2pGRDZIL3dwdnc5dTQ0KzlOMDZBZE9yTm9Pb2hidjBhMEViODUrTXBkOGdxbmFpaUYrQ0gwWDN0QTVBK3hweGxDemR3MUZCZjcwdlhRRUFKV2JWMUlsSlJKL1VSSmw2ejZpUVcya2NuTTZGbWN3Q2ZQdklEVFczLzJ3bDNMOG5YZW95Q3JCa0RTTy9yZGNpVmJkcUkyVWNlSzk5eWc3VW9CWHowUVNicjZWQVA5cU1sOStuNG85R2RUVmxiRi9jVFpDWkRLRGIzUjVieHdWV1J4OTkwT3FUOVVTTVBZeStsMlY1azR3dHBIMzBWdWMybm1TZ0xUSmRFVUJxL3grQmFkKzNJL1pWTU9KRnhaVG9CV0puTE9ROEhoLzEvbVd2VXZlanFPb2pRa2t6cC9mVk5qZXNRSll6YkdYbjZVOHU0cklXVGZUYTB5L0pzMHcvL1AzeVB2aEVLcUlSQklYZG42KzNBOWVvdkxnQWVUaVhQWXRYb3lnQ3FUMzN4WTJrU2FZVCt4azk1SlBzWHRGTStDZXUvRnpsN0JZOGpNNDlzN0gxRlU3Q0oxNk5ZbFRoaUlBM3Q3ZUk0RFBXcHVpamVZb3NpUTVKVW5BNlVRbHFtVkpJd2xPdTAwMjFkUmdreVFzWHQ2SWpWTFBuWlNMTENOVVZsYjBwNHZOV282VWxwTm9ERkdreXU4TXVXUW5HK1kvVCtqTWErbHozUlVJNXBvV1JJQW5sMzlGNkNXekNkQmxzL1hCMTVwTW9acENPMUd6cjZQM3ZHa1V2WEk3QjljY0E2Qm1Wem83L3ZZNG1wUnB4RTdvd1k2cnI2V2lSZ0ljWk53OWgxOHluU1FzbUkrUGVROGIvL3J2VGg5UVRYZ3NZV21qS2ZuOFZWcVNiVFN3ODZicmNmYTVtSDd6YjhRL1FNTGE2UnYrOUdQdzZ6dUl3bGZ2NDhUdVFteFpXL25oNGY4UU1DalJwZk9zLzR3ZEQ3eEk0T1M1R0JNZGJMbjJUc3dPbHhXeTg1b1psSm1NSk41Mkl4ejlqQitlVzk1a29mdzA3eklLQ24xSnVHMCs0YjI4cU0ydEJMVXZ3ZVBTOEU4TVF4dmRsN0MwTk1LSEpycHZLWjh0TStmUUVKQkNuOXV1b3Y3Ylo5bjl3WFlBU2o1OWxsMmZIaUx1cGhzUjlxMmtyTER6eW41ZDNFREMwbEpSYTcwSUhKTkdXTnA0ZklKY25JaUZTeDVqMTZjWnhONTBNd0dhazZ5ZmQxK1htSG5yMW4xS1ErU0Z4TThjeWFFN3J5TDNtSXRFTSt1NXY3Qi9WVGF4Tjgwbk5LeVV6ZGM5MU9uNS9JZU9JV1JZRXZoR0VKNldSdGk0QzkwMFR5NnROR2RGT3NaWjE2QXQzY0pQenk5ek9iUks5N051NWkySWd5YlJaOTVsRkw1OEI0YzNaUUd1WmkrclYzOFgyWjZmRFZrV1pBUkJFQVFRYUhLak9lMVduS2pSQkllaURkQ2hibDN3anFzMmRIeFhIcVpUMllkNTg3Q1RkKzdzcDBpVzM5dDcxVkNKdzZGSGI0d21KRDZDa09TVzM4ZGRkeWZSSS9valIxMU54dVVmWUFPMGhETGdyemRSc1g4LzVtb2Ivb1BpS045MUVLYTQraVlFWEh3TmZhYU1Ba1lSdCtJOWNqY2RJMmhVSmNjMk9wbTQ2eTU4TkJCMDk3MWtwVjVMVmNPOUJIZEEvYThON1lreDFNZ3ZiVFE3SzVacUs0RmhZUVFNU0NKNFlITG5RcngwWndkak1ETHl0YWRaYzh0dDVCaHE2ZnZpUndTSE5wY3pSYzViU095WVlUQm1NTGtmRGlCL2J4VXg2dlhrbHZkbjVyMVhvd0w4NzcyRHIyZThqdVhST1lnWnE4a3BUdURLcjI1M01ac2tOOWRHaHFlbVlqOFVRWmsySG1OcU15ZGMxZnJsMUJpbk1mNkdpNUdCUVhmZHlLcEZYekg4eGxIa3JsaEo3NzkramZHQ09Jejk3K2ZFaDFkMmVyL2VQZnZnM2RNWGpVWkhTR29xb1labW9aRzk0aXY2UHZROXhnc2lJUGtKY3BaZVFNR0psNGpyM1hFSmwrYUNTMG0rS2cwQjZEZnpNM0xUZnlBbWZqQkhsdXdpZWRPUGhJYW9rZnZmVCs3U0VSUmxPWWlKUDMxOVYwRFNNSHhWK1FpR3ZCYnowSWplQy8rT2NXZ2dnZlpackhyT1ZWOWU4UG43YU1iZlN2OXBvNUdBZ1F1dVlNZnlkSkxTWEp4MUtTa3AvWUU4VDNOVUVJU21aRjBFUVVBVVpVSEVwWmhwdk5ENWFuQTZyTmdGTDVkZ2ErenUzdmlqVXFuR2RqYlpGVVU1TFBqOEFJdHVtRW1pUWFsbS83MmhpcHZFeUhzeU9IRG5ISDRvdEdLODV1K01lR0J1VTMybFY2Q3I1RjNRYVJFY0RpVEFXWkhKK2hrMzRUMXlLZ0VSL2pRVTF5UDVORk5TZTBlRU52Mi9QalNNNnNvU0hLWGxXQzJGN0xyMXhpWWFIcStrSkxBQzNtY3k4a0NHdmZvTSsxOTltQy8rbmtmQWlNc1k4Y3FUK0hhd3B4eWxSUjJPUWRkblBER0ppemhlTUpqeG8xbzJHTkdITmRKL2EvRTIrdE5RWGsyRHN4aXBNb050Tjl6WVBLb0I4VWlBdGJBWVRVeDh0K2lhNm92emNSemR3NVlibXZzbkJQY2U3anBmYVIxQllXRnVWU3dDUThDdktRZzFZeWsxbzJ1MG1NUkFER0ZncTZ3RE91WkkxSVZGTmJrcGRNWXdHcklxb2FZSXM5bk1vWHR2NVdqVG0rQUNWTmpjOHVYTS9LcnFRSmRUVmFWUklWdXRycEVYRldENjhRaWJiOWpjclBrTmFTNXlDZ2dJU0FZMmVHaHJyaDhCQVZrV0pLZFRrSjJTSUlvcUpFbVNIZVphb2FiVUtodDhmQkYwdHJZYTI3MzMzcXNTQktGRDN1aTZpZ0p1K1dnYmQ4NmR3YmdJYjBXcW5CZFEwL09XQitsNXk0UFlTak5ZTjI0MlJkZk9KZHJZZ2U5bTR3b2NRMjVnN0w5dUIrRDRFN3Z3REZnMkZEYzMzREdYbGVKMVlUanFNQTFlaG5oR2Zmd3BCdlhaR1huZ21GbE1HRE1MMlZMRmpubVRPZjdkSEZKbW41NDFRaDBXMmVFWXlyOTVrZHpxSWNUMytvV2ZYOS9BcUR1YTNjWG00a0lnQmJEUlVGaERaRWdBM3VvSVZKR3BUUGpzdFRhRjlqWmpCUGJjbmRna211akFQU0VJQW5LcjdpaytFZEY0cFlReThiMkgyd3FVY0gvTXBhVkFIRmlLTVZVN3Vpd2dCRkZxMWR0Qmp5NU1qNld3SEhwSGdGU0ZxUlNNWGFCYnNaUVdJTHMxR1V0aEtkNFJRZUFmanQ3Z3o1QzNsaEVlZUFiS1NqZTZ5T2dqamZoZk5KT0pUN2ZQeUtMUmFFWU1IanhJYytCQVJxdEVYVUYwNld1Q2dDemh0TnVSTkdyc1pnc2FuMkIwWWY3b3ZIV29XNW1oUFBua0U2T0IwMWZOMnV1NGMwazZ1dWcrVkJaa3M3UUFWUG9BNWlXN2lseTNIempFeVlweXJFNHpYMjdQSUNFOGtxa0pvVWdOMVN3N2NJckRwNm9wdFVrczNRR3BBL3FSNktkUlpOSlpnQzFyTzBjMkZSQ1pPZ0JIL2s2czJoaDhBam94Y2FKNjBMQW5uWUtmUjBQeExvNTl1dy85OUV1YWd4RnJQK2JvbWtINE9nNlJ2Yy9BK0ZmNklQaEw5QmxyNDhmN24yZmdEUmNqVnhWU3NDZVBJZmZkMWlIN1J0WCs3WmhxckpoTlRpcDNia0Y5eW91UTFCSG9kS1VjL05jS2dzYU5SRXNsOWFWMmdtUENPeHkzRUpaNjJqRTRzN2F6N1I5ckdmWE5ONFQ0bHJGK3loeE9wUGFuOTFDWGhDLzY1QzF5VWlNUXNsZFRZcitRWVJjRW9oV24wdFAzUmJZL3M0UStsNmJpS0R4R1NiYkVCWCtaalhiUVZHSWovczMyLzN1RC9uUEhZc3ZkZ3h3NWlaN3U4L25IOTZYcWc2ODRPVFFJYldnTTBjUDdFVGhwRGo0dlhNN1BiL1ltYmt3aTVxeERWSnZDR0RSdklqRnpybVRicTRzSkNibWRxcS9lb0w2cmNvMFFBbUljbkhoektkYmtTQUpTUnVNYnJDTnUxa3grZXZGSkFud1hVci9wQTJvaXBoSFZ1M1A5MHI0M25YMmZYWXd4b29ZajN4eGx5S2ZqUWUxTHY1c0dzdnV1aDBuKzZ6V283ZVVVYmRwUHdtUDMwQm1CdnlvNkhuM0JNeHo2ZkJYK2dVR0VqeC9WRkh4cEQxR3piK1RBSlg4aG8zOEl4Z0ZHNm83dXhPcVRUTjlMaGpVcGNPKzk5MzZ2bEpTVVF6UTNVMVlKSUNJSUlyTHNSRVpBRkdSWmxwRkZBYnU1Rmx1REJybTZGSlZhclJiY2lia0NJRDcxMUpOWGk2SjRlaCtiWktmS3BpTGNvTUZpZDJDeE83Q0tXb1pIQndGd0xQY1VlVlkxUTJORHdlRkFyZmNsS2N3WDJWclBEOWxsK1BnSDBpL0lHNHZkUVZSNEJCSDYzNWFNeG1ReTRYUkszVzVLWEZwYVJuQndNQ3FWNnB3ZWM2YmpRM0JTdFdzN1JaczJVMXNxTUhEUjA0UWFtN2VqYjc4VURJSHU2SlltZ0xCaC9kSDFIRXhnVUEwNVg2N0JqSkdrMjJaajZKRkFZRnc0TmJ2U2NjUmNoTDVzRDZYSFRReDgrcCtFOS9BRlJNS256RUJWZXBDODlBM1VGdFlTUEhJc1FYR1JIWExtbDYxYlNkWHhmSHlUVWhGckN6RVhsT0J6UVNvNkx6Qm5IYUJvMHliS0R1Y1FmY3VqSkk1TjZGUjdPZDBZeXJkdkpuVDJYekQyalVEUUJoQTVvaThWaHdzSkdSaFB4ZnBQMEkyZGkrUGdKcXJLZkVoNTdnbjhBM1FnZUJGMTJVeHNSN2VUdis0SFRGVjJ3c2FPd3o4cUJBUXZvaStiZ1QxN0ovbHJmOERxQ01BNFlRUTZiOWRUcTQwZFRFaVVRUFhoNDFqTVdzSUg5d2FOSHoxblRLTHU1ODBVYk55SzFhb2xZdXg0Zk1OOE1Rd1lnYStZVCs0M205R05tVTFNU2krQ2hnN0ZxMU5aSkJJK01RMWIxaUhxOC9MUnhTVmpDTkxoZThFNGZPUUNUcTFhajgwUXovQm5IOGJnM2JrcWJSaWVobGZCeitUL25FWEMvYzhTayt3UzFFR2pMOEZIS0NJdi9UdXFzb3J4dTJBMFlmMWlPaWNpOWdvbmFtdy9haklPWVM2c3huOTRDbzNNWkFISkk5QzdEVHZCTjV5d1FRbUloa2hpTHhsQnhaWTFGRzc3Q1ljWVRPVFkwWGdITkZ1QWVyMCs2N25ubmp1QnE5K29IWEFJNEFDY2dDUUlvaXlxUkZrUUJOUmVPbFNTRTZuQmd0b1FpS0RUNlVSUDdqV0h3LzZOSUFpVC9xaWF6Zm5PeDNhbTR6dmJ5SDM5ZHJKTmt4ai93T1YvbUxVL2N2K2xtRktlWk9qY0ZFWEYveCtBdytIWW90Rm9uNldabzYxZUVBUVRZQlVFd1NZSXpSeHRXcTJMbzgzTHk4WFJKcm9UY3BGbFdaZzllNVpLRUlRUnlwUXE4QXFMd3ljaTZBOTFUN3FZUkx4REZKL3cvNHpYV0swZUdoTVQweHc0YU5sTVdXeDBuN21TZFJ0L1hLbHJhczgwajNmZmZYY1lvUFREVTBERTdQdUorSVBkVTl5ZEx5b0wrNzhGbjJYTFB1NDVhdFRvWXpUM1FCRGRhUitOcFZXQ0xNdXlMRGZuNDBxUzFLeXhBZWgwdXFIS1hDcFFvT0I4UWUvZXZYdTVoWnBuMmtlallLT2x4dWJxMVNKSlVzdkNVcFZLcFRnZnppTEN3a0s3RlRnQU1CZ00rUG41S3BPblFBSGc3Ky9mcDVVWktucjhDSzAwTnlUSlJXbWs5cUFwRWdSQnVFQ1p5ck1wMk1LNmZZekJZRkFtVG9FQ056UWFUUkp0Zld5TnhmQk5UQitlUmZHZUdoc25UaHdQQXhLN2VzSHEybHB5SytweG5DNG56OW0ycWF6VmJDYTNyQnF6UTFaV1RJRUNCWjFDRUlTRUYxNTQzcWVsWUpOYm02TkNjejZ1Ui9BQUVJeEdZNWVLM3BIcXVldVZGZXkxYXduM2NsSm8xL1B2NjZjeElrd1BXSG51bzIvNU9xdWNVaW1BTFU5ZFJiVDdzUGRYcnVTTnpEcDZCSGlSVjJWaHdSV1hjT3VBTUdYbEZDaFEwQ0VtVFpwa0JDcG9JcHhFRkFRRUQ4ME5hUGExeWJLRXV0RkcxV2kwWFJOc29vWUZzMmFTMU1PVjFyN3l1MVVzMm5DUTFmT0dBeW9tajd5UVd5ZWFtZmptbmhhSGpVZ2R4VFV6dzlHS2tIOTBENU5YYk9QeUFWZDBVdEdtUUlHQ1B6dWlvcUo2QXBsdVFkYWljeFZ0b3FNdTRTYTZKWjJnVW9rRHVuWVpyeWFoQnRBenlCOUxFOCtNbWlHOW9nald0ODE4N2hzVjNsUnJGeGJraCtpd1k1V1VSVk9nUUVISDhQSHhpZk1RYXExYjhqWGxzcms3V0NGSmt0Q1U1Q1lJd29CdVg5RnU0cjJkV2N4SjdkdU5nMlErMlhxUVljT1RNQ3FrSUFvVUtPZ0VHbzBtb1pWUWErRmphNTJvSzh0eVV3bVlBSFNQVkUyeTgvb1hxM0VrcExLZ2Y5Y055aDAvYitYamNqOWVtRFJBV1RFRkNoUjBDbEVVKzNob2FXNmhKbnVhbzlBaWdPQVNiRUpwYVVraTROWDFTem41ZE5WcXRvcHh2REsxUDExVnZBNW03T0t4bjJwNTU3bzBnaFZTRHdVS0ZIUU5YaXRYZmhIaUlkeEVXYVlGaDZSbkFFR1dYZWtlK1BqNEpIVDlHakxwNjlmeldWMEk3MXlaZ3I2TFV1M0U4UVA4ZlZNQmI5dzBoUmh2eFFaVm9FQkIxOUczYjk5UVRwK2s2eUhVWE9hb0doRFVhblY4bDY5Z0xtSHhwaXhxZFY2a1BldWkrZFdHOW1MN3dna0FQUG4yQjZRWDI2aXpPWml4YUFsSmc0Zng0WXhCL0dmMURnb3JSYTU1K1VQM2lmUzhkOTg4QnVxVlJWT2dRRUhIQ0FrSkRXOXJqcmJVMmp6TVVWa1FCRUh2Y05oZkZrVngvcDloZ241TDJpSUZDaFNjSFpqTjVtWGUzb2FsdU9pTDZvQTZONFdSQmJBTGd1QVFSVkZTcTlXeVJxT1JSUUJCRUdLVnFWT2dRTUg1Q28xR0Urbld5c1RUbUtLZWFSK3VMd1JCaUZHbVRvRUNCZWNyVkNwVjlHbUVtdUFoM0FBWmtKdStWQVNiQWdVS3psc0lndENqbGNZbXlIS0xsQTkzOVFISU1vZ25UaHdQQjNUSzFDbFFvT0E4aHU3Zi8zN0pwM09OeldXT2lzSEJ3WkhLbkNsUW9PQjh4OENCQS8wOEJGbWJkSTlHb1NiTE1xS1hsMWY0bVZ6a1RHaUx6T1lHY3N1cU1kbi9QTFJGc3VSQWtwU2lXQVVLZmkwaUlpTDhUcU90dGY1QnJWS3B1aWZZenBDMjZLT3ZWdkxtVVJQaHZsb0tLMDNjT0dNcUN3Zjl3WlhGd2swc1Q3NGVWWThJWkpzRnI3Z1Voci80RWhHOU95OUJNKzMrbWdQYkhZeTgrMHBsUnl0UUFQajcrN2ZXMkU1bmlncWlLSXFoM1RxN203Wm8rd1B6V0huM2RUelEzNHRGR3c2NnYzVFJGcTFhY0JHdHlhMnZuRHFkN1E5ZHg4bzdyaUw5MnFHOCtzMVBWUHdaVnNNcmtVbDdkalA3NEg3NkRuR3cvZi8rWDR1dkhUVmwxT1lYSTdYUThpVHN4ZG1VSHZ3RnlkRTlqVThHY0Zpb3k4bkJicFBjNTNOOVo2c3FvNzYwcHMweDlwb3lhay9sNDdBcG1xV0M4eGZlM3Q1K3B4RnFUZFRnamFWVmFsRVV1MG1KNWtWU2orYXkwcDVCL2xoS1d0SVdVWlBUNWlpOVIwZFlDVkNyeEE0YjdQN3hvQ1pzZUFxV3pVZHhBaW9zSEh2NkxnNXZ5TU0vVkVOdGJSQVRQbHRDUUdBZE8rZmZSc1dKSEJyS0pOYk4zUVVCU1V4NDkwbThLQ1M5NytVTTM3T1RVQU5VZnJtWWJlc05YUGJHWDEwSzRwTDdPYkJUUXN6ZWhWUGpqZFUvbVptZi9KTzlONlZTSVF4Qk5sWFRjRFNEaUwrL3hZaWJ4d0tRL2NKQzluMlRTMkJzRUxXL2xIUGhxcldFTiswSUMvdi92Z0QxUlhlUk5GM3A4NlBnOTRWV3ErM1V4K2JXMkZBTGduRG16U01iYVlzbVhkYWxQLzlwenk1ZTNaWE55UW9yLzVoM0tVRi9odFdRNmlqZXRJbHFTdzBuWC91Q3VHdWVRZ1ZVYjNpUGpCMGFMdHU0Qmk4MTVMdzhuMzF2cldMQ3c1ZHo0YnNycVBudVZUWi9aV1hLMi9kMzYzSlZPNDl5eWFaMUJBVHJjRm9zVGF1dTZUZVZDUS9Pd0xKN0dWL2V1NHpoTjQ5RlJTbEhsL3pJaFZzeU1JWUREaHZPRm1XOEVqV0g5dUUxc0ZwNXFoVDgvcXFCV3UxSHg3NDFvVm1OZ01BemUyQzdUMXMwc0c4L25qTEdzRzN2SGw3ZHVKK0xiaDNQSDc1MWlWUkw4YXB2RVlxUFVhTWZ5dVFiSmdKUXRuMDdHa1F5Ri84RENiRG5WbEJsUFFUOHVzN3JBUk5uRWhEc3l0NVI2WnF6ZU1LR0RBWkFGeDJOV0YyTkhWQVJSTVNJSUhiZmRnTTlKNDBsSXUxaUlnWkVleXIvakZ1Zm9UeFJDczRMcUZTcWRreFJHUkNFMWc0WkVmRHIvaVhPakxiSVlQQ2hkMlFZTjAwZGpWLytNWDZzK0JORVI5VlJKUC83SmNaK3NvcGVrY2ZZOVZwNjArUWJrbEtKbWpxVkhsT24wbXZoSTR4OS9KYXVTTXJtNVdzbkpLMzFhWjlWUUZDN1YwbHNhUjRQZVhjZG8vN3ZGclQyQXJaZk9aa1RlOHVVSjBqQmVRbFJGSDFvNDF0cldWTGwvZ3hSRUlSdUNyWXpvUzJTS0tveE5mMVdXVnBNbmtOTG9PN1A1R1VUNlhmL0E1UXNlWjdLR29uUVVTT3B6VHlCZjNJS1lVTlRDQnM2R0VOUXMvNnE5alZnTDYra3Blanl4Y3VubG9iQ0JwZld0Mi9Qcnh5VERadEpJbmo0V1ByZjh6Z0pZOE9velNwcDhmM2hKKzdtMkFaRmExUHcrME1RQko5T1ROQW1YalkxZE5NYVBDUGFvcjY4c3ZRenRwdDFoT3BGY2l0TXpKbCtFVVAvWkMwME5iRnA5QjMvTEFmL2s4NjRCMjRsYWNmZHBJK2JURUN2Y09wemZ5SHFqcGRJdVdxRVM3dE5tVW9rTi9MTnVJbG9JbEs0NkxQbjBPRkw3K3Nuc1hQV3hSeExDRWRyRU1IbjE0eW9sQzBYWDQ3VG1JaVdTbXJyNDBtYjNOL2plenZGMzM2T05td0tmU1lPVXA0c0JiKzNZRFBRc3VpOVRhb0h6UkpPS2dDTXY4WEFUQTBtS2l3T2duMTlNV2grSDdMSjg0MjJ5R21xb2FHcURuMllFYlcyYTNOaUxTdEUwZ1dnOS9VK0N5T1FNQmNYNDBDRFQwVG9ueXhTcmVCL0RFV0NJQzRFVExpb2kycUJla0VReklCVkVBUzdJQWhPbFVvbHFZSGZqT3JSNEczQTRLMnNqaWRVQm45OERmN2RPc1lyOUd5K2gwVDBFVVpsSVJUOEwwRFhnUm5xQVZmd1FHRk9WS0JBd2Y4Q1dzdXFkZzBNV1VZUmJBb1VLUGlmRW14dEFnYnRDYmhHL25BRkNoUW9PTitoNmtCamF5SGdHc3NTRkp3REhEcDBHSnZOcGt5RUFnVm5CMkpIV2xwN2Y2aEFnUUlGL3dzUU92a2RRQkNCYmxJNk9ObVpjWmhGS3pkdzcvSk52TDh2bDJhZFJDWXJMNDlQdCszbDFZMEhxVzN2Y0llSjl6Zit4SmI4R21XSk9vS3RtTXgvUFVmZS90emY1ZksvdkhRdjZaZE1Zdm5vRzJnNGg5Y3haNlNUUHYxU1ZnNGZ3dEh2ODMvWEthL1BPb1NwUnRHd3oyTjBXVmFKZ0xON3A2N2pxNzJGOUltTjRkTCtVV3plc29ISGY4aHAzS2E4dDM0UFI0cExlT3VIekhZRjIrb3QyM2pqeHd5MkZOUXF5OVRSUTdiamF3NTlzSlQ5Ly9ueWQ3bCt3ajB2TXUyVDV4R3JLam1YaFcvNlFkT1k5dTBxZWlWNTQ3RCt2clJKSjU1WlFQYk9ZbVh6bmI5d25rWmJhNk8xcVFFYm9PbTZsUnZBNGhzbk5mMGEyRkRHWC9ibnd0aFl3SnRuYnA0Sk5UbDhjM0JubTBOcmk3TlpXdWpEN0RqdmM2b0YvQkdRdDNvTnZlNTlpUHlYUDZiVzlqZjh1aEM3cnQ2Wnp2SGw2N0dqSVdEa05QcGZPYjVweFUxSHRuTnMyVGVZYXlYOEw3eVlmbGRQUklXRnZHVWZVclQzS0hhN211QkpzK2d6UGJYVEpOMks3YXZJWGYwakRWVW1mQWVOb2U5TnMybGtwYXJidTQ3U21pQzhTbjRpZCt0UmZNWmN3ZUM1YVdmOGdpNzViaW5aYTNlQlh4VHh0eXdrTk5iRjJTQTNsSExzN1hjb1AxR0VsekdHWGpjc0pEamF4UUpvT3J5Vkl4K3V4R29WOFJrMGx2NjN6T2h3ZzF1emRuRmsrUVpLanBZanJuZ1R4eDQvL0VaZVNxOXhTVTNuTzdiMEs4eFdMVkZ6YnlRMnRROEFoVis4ZzJ3Y1JPbDNLekZiZlVuODI5MkVHRjFqc09ic0ozUEpKNWlxclJqaWg5QjM0UTNvZFIzZkU1ZzQ4ZnBTZ3FkY1NNNlNwVmdjdnZUNTIvMEVHdzNLQStHMlk3cWpzZjBxM2Z0SWFUbUp4cEF1N0ZFYnozMzdNd3VuRHNOTFNXL3ZaSzZxeUYrWFRlVFVPVVFtbHBEZkJTMUNMdG5KaHZuUEV6cnpXdnBjZHdXQ3VhWkowN0ljV2NPYWVRK2dHM294Zlc2YWcxRFc2RDZvbzZiUVR0VHM2K2c5YnhwRnI5ek93VFhIT3IxV1hWWXVnV25UNmJmZ2VxVE16L2pobVkrYXY5dTNucjMzL1kxVDJWN0V6SnFKMmxGM3hocGY5WWJYK09IWmRLTG0za3hrbkpNdFY5NUVyZnVOZVB6WjI4a3ZES1R2N1F1SkhOSURTNlc3RnRtV3ovZno3c0k3YlE1OWI1bUxIaE9PVHE2akRvb2lMQzBON3hBRFBvTXVKQ3d0RGYrNDhPYTV1LzVSZk5KbWtuREZPSTdlZXozWkI2c0FLUHJtWFhZKzl5R2hsOHdtUUpmTjFnZGZjNSt4Z1owM1hZK3p6OFgwbTM4ai9nRVNWbnZuOXdRbXNsNTdrUi8vN3pYOFIxNU05S2dFTE9WMXl2Tndlc0VtdC9xM2hjWm01Z3lwaTA1bEgrYk53MDdldWJOZnAzLzc4ODRkVlBkSVpteW9sbjNLQW5VSWE4WkdLbnhTQ1RkcWtkTEdjR1R0T3ZxUHViNWpXZGhRaWNPaFIyK01KaVErZ3BEazV1OXlscjVONkhXUDBuK0dTM01LU1I3bS9pYVVBWCs5aVlyOSt6RlgyL0FmRkVmNXJvTXdwVStIMTRxOS9uWnFqK3lucHFBYy82VCtIRnV4RzdpMitXMlprTWFJaDI5REFLSi94VHprTGw5QjNPMHYwV1BFQlRCaUVJVXJCNUgzVXo0RDBxS3hWbGFpaVFyQkw3NHZJUU9TUExaK05WYVRDbDFZQklHRDRnZ2VOS3pUNjZnQ2pSaFRqWlNFNk5Fa0RzR1kyck41N3Q3L0QyRTNQRVN2c2NPUWdiNnpoNUdkdm9tNGdTN0s5cmpyN2lSNlJIL2txS3ZKdVB3RGJJQVdLNVpxSzRGaFlRUU1TQ0o0WUhLWDdzbjFpSnJwYys5enhBOE5WaDZFdHJCMFIyTTdJNnV3b2lpSEJaOGZZTkVOVTBrMGRCSmN0Vlh3ajQzWkRBM1hzUDd3U1U3VzJNa3JMT1pRaFVsWnFuWlF1RzR0R3IyRm82Ky9RVVZlUFdWcjEyTHQ3T0dNbThUSWU4Wno0TTQ1TEIrY3lyWi9mZHJra0RBWEZPQWJGOWZXWVZHUnlkcTBOREpYcktmcTBHRWFpdXVSSEozdEhSTzdyNytZSDUvOUw1WDdEMU9YWFlSa3M3VjRaZm9tSnA2Vm1sTkxaU1hlSVdGTjcyQjlXQ0NXMG5JQStqendBbDU1WC9QdGlLRjhmY20xRko1d0U4MzdKREh5cGRzNCtlUUN2aGlRektZSFhzYnFPUE14bUVvS0tmdnlUYmJjY0NQZjMzQWp2L3hZams5d3Mybm9GZWhpSVJCMFdnU0h3KzNkRG1UWXE4OVEvczdEZkRFd21YVzNQazZkU2VyMG5sd0xHWUp2dkNMVTJyVktaTm5jam5iV25rRWdxM0VWbEhZTGRSVUYzUExSTnU2Y080TnhFVjBvL3BSVmpCMFlTMjd1S1hLQjdIbzc5dEpTVGxURWtoU3MrQTlhdjVUeTEyOGxmTUs5cUF4YVZIMUhFcEQrVHdvT211ZzFzS081VXRQemxnZnBlY3VEMkVveldEZHVOa1hYemlYYUNQb2VVWlJrWndNdE5ldktqU3R3RExtQnNmKzYzV1hlUGJHTFV5MmtwUnJSNFdpeGMrVDhIWnc0SE1HVmUxNUdDOVJ1ZUkzRE96SmRkSCtOYjhzelNDSVMxQ3FrUm52TkRWMVFFQTNscFVCUHdJRzV0QXEvTUpmYnd5djJBaTU4NjJQQVFkYmlCZXgvYXdYR0Z4Y0FFSDdaUXNJdlc0aXpKcDh0MHlhUXMvY0crZ3p2b2xIU3FyK0VJZHhJNU9oN0dISGJtRzdkVCtDWVdVd1lNd3ZaVXNXT2VaTTUvdDBjVW1ZbmRYaFBkREovdG9waWJBNHZmTUlELzZ5Q3plUWh6RHIwY0tobFdhNFZoRzY4WCsxMTNMa2tIVjEwSHlvTHNsbGFBQ3A5QVBPU1hlcjc5Z09IT0ZsUmp0VnA1c3Z0R1NTRVJ6STFJWlQ3Wm94dk9zVXJIK2RUbFRDSXl4TkRGVG5XV292Sy81SEMzSjVNdmUrMnBvQ0JmUEFyOGpkK1Q2K0JsNXhlS2M3YXpwRk5CVVNtRHNDUnZ4T3JOZ2FmQUxmcGVNMThEczk3aXN4NEhXRnh2cFIrbjBIY1hiZmdIZFdEaGozcEZQdzhHb3AzY2V6YmZlaW5lMXpEcHhlaHNVVmt2UEFoRVgwaU1VNmRqQzR3Q20velFiTFc3U0RZWU9Md3F4OERRMzcxZlllbWptRFhmMS9CSUUzQ2Y5Q0ZoTVNGMG5QT0xEWTgrUy9DNHg1Q3lscE5mbEVpRjEvb010bXlQM2dWb2Vjd2ZFTTFWSnpJd3lmNUtyY3BjWWdEeS9ZUVBpWUZvU2FMQnBNdnZsMTB2dnYxVHVEWThuZnhGY2ZpSFRlSTBONFJ4TjZ3Z01NM1BNYlJ5Q2NKNmVsSDlkNGZFSHZQb05lb3VBN09WTXJCZjYwZ2FOeEl0RlJTWDJvbk9NYmxzK3ZvbmpyREwwOWVUMmJwU0daOTl1U2ZWYkRWZDZDdHRSQjJxaWVlZU9KS1FSQVN1KzdZdGxObFV4RnUwR0N4TzdEWUhWaEZMY09qWFIwTWp1V2VJcytxWm1oc0tEZ2NxUFcrSklYNXRqbE5kSGc0c1g2L2ZiY09zaXdBQUNBQVNVUkJWQU42azhtRTB5bmg1OWM5ZnMzUzBqS0NnNE5ScVZUbjlCaHJRU0hxdnNQb2tSemY5SmwzbEJHSFhVTm8vOWdPVkI0blZidTJVN1JwTTdXbEFnTVhQVTJvMFdVbXFVTVRpQmszZ0pLMTZSVC9mQWg5NzFUQ0I4YmkxWE13Z1VFMTVIeTVCak5Ha202YmphRkhBb0Z4alIwWk5SZ3Z2Z2p6c1F3c0pTWUNocWFnOVE3Rm1CcEx3Y292cWNxdHA5OWR0K01kSGtWNGNyUDU2UlVaNzNHT3JzRTNlUXcrWWlXMVdibW9JeFB4and4QTMyc1lvVVlicDc1S3gxUWZ4SkIvTGlJbzFFVkc0NmpNcFdqVFprcCszSWNoZFM3SnQxNkNTZ1JFZ2RxTUhSUnQyVVRsTDFVa1B2ZzAwZjNDdXFabERSdVAybHhNM1M4NTRCZEZZR3dZNnJBRVlzYjBwbmhOT3NVL0hVRHdqY1U0YmpnNmd5dk82dHN2QlVPZ2V4OXJBZ2diNW1LVU5tY2RvR2pUSnNvTzV4Qjl5Nk1ramswQTZQQ2VYTkFTTkd3b1duWDdZelQwSGt6b2dOZy81MHZmNlR6NjlOUC8rQmxYRU1IYStLOGdDSGJBS1FpQ0pBaUNMQWlDTERpZGpvOUVVYnptenpJNXZ5VWYyN25pY0ZPZzRFL3BwTEZZVnVyMTN2K2xMUjliQXkzNDJFUkpsR1c1VXBreUJRb1VuTzl3T0J5MUhpYW5mSHBmbTRBb3kzS0ZNbVVLRkNnNDMyRzFXaHZMbFZvTHREWUNUblE2bmVYS2xDbFFvT0I4UjBORFF4MHRrM0pQR3gwVjdYWjdpVEpsNXdaaFlhSGRDaHdvVUtEZzlLaXVyajZkS2RvazdCb3pQRVNMeFZLcVRObTVFbXhoaW1CVG9PQXNvYWlvcUs2MVFCT0VObVZWc2lDQVdGUlVYSFJHMHJPMmx0eUtlaHluSTJSd3R0SVFKUm1IVTJyNmthUS96NExJN254MHVSM1dsZE1WdXpWOUxpa2JXb0VDZ0l5TWcvWHVSME5xRm01Q080K1BnSHJ3NE1HbGt1UzA0T29BMHpta2V1NTZaUVY3N1ZyQ3Zad1Uydlg4Ky9wcGpBalRBMWFlKytoYnZzNHFwMVFLWU10VFZ6WFZDbjYxYmpXUDdDakF6NTJnTS9yQ1VieHdVZUlmZnpWcTl2REZwSDh6NCtjblNCOXdENU1PcjJwcTVKcS81QjVPMWt5Z24vRUFCNDRrTVBHcHVVMkhiWnVRUk95SGh5aThKNW5RcDNmVHE1OWEyZGtLL3N5dzNILy8vUTBkbUtJdC9HMk5UOHNwb0d0U1J0U3dZTlpNa25xNDB0cFhmcmVLUlJzT3NucmVjRURGNUpFWGN1dEVNeFBmYk51bGZPcUVDYnc0UGtGWklnVUtGSFRQNnBIbHZGWUNUUExRM0ZycWE0S0E2RHBHN2daTnExZVRVQVBvR2VTUHBhbkdUODJRWGxFRTY5dlhMcXFycTloeUpJZnNHc3VmYUVrRVZGNWVnSWhLcjI5UkhDNnF2QkMxSW9KS2hkZ3ExVnpVNjBFRTBVdnY0amxXb09CUERLZlRXZEJLcUxYeXRRbXlJQWcwQmcvVWdDeEpVczRaT2JudEp0N2JtY1djU1pkMStxY2FMeDMya25KVzdTOWg2L0oxVEo4eWhjYzk2R0grc1BDL2dNdTNMZ0hnMHQzTFczeGx2SEV4cmxiRjAyaE54VGpxdTEwQTlQaDRoN0tyRmZ6cFliUFppdHJSMk5wTitSQUVRVllEc3RQcHpPNjJZSlBzdlA3RmFod0pxU3pvM3puTnlyUUphVXh6LzM5WjdtRW12TGVkNnkvb1NheEdXVFFGQ2hSMGpQcjYrcUoyVE5EVCt0bEV0elE4MlUzRmtFOVhyV2FyR01jclUvdDN1OVZWYUhRa1VZNTZUaW44NEFvVUtPZ0NTa3RMeStpQ2o2M1JIQlVCdWFxcUtxdnJsNUJKWDcrZXorcENlT2ZLRlBSaTE0NnByRGMzL1paMTdDUUYrbUQ2K0NnTHBrQ0JnczZSbVpsWjRTSE1wRTVNVVFSQkVMd0JyU1E1aXdHdlRxOWdMbWIwb2krbzFYbmhKYm9jZGRyUVhteGZPQUdBSjkvK2dQUmlHMVZtQi81Nkw1SUdEK1BER1FPNDc1WDMyT1B3d1Y4amtWY3JjZS9zcWN6ckUvS2JUOUJ2eWU2aFFJR0Nzd0tySUlqWDRtcGpVSStMMmFOT0VJUjY5MmMyUVJBY29pZzZWU3BSMW1nMHNpQUlndDR0MkxZQXllZHViQkpsMWZXWW5RTGhBYjU0L1U0SitZcGdVNkRnZnd1U0pHV29WT3BGdU5vWWVBbzJrNGRnYzdvRW0wcldhRFJ5WTQ2QkxFbFNwaWlLNTFDd2lZUUcrQ21ycEVDQmdtN0Jack5sMGRhMzF0ckhKbnVZb1lpQ0lNaUE3SEE0TXBVcFZLQkF3Zm1HdXJxNjNIWUVXcE9QclhVT1cxUHdBSkROWnZOaFpRb1ZLRkJ3dnVIVXFWTUZyUVNhazlPa2ZEUUt1Y2FZcG56OCtBbEZzQ2xRb09DOHc5cTE2MHJjZ3N2cElkVGFwSHMwbWFHaTRLbzhBT1RVMU5SeVNYS2VBSHIvcHFOKzU5SzJuMTF3TmFUTVUxWlVnWUkvT1dSWi91WFJSeDgxdHpaRDNYUkZucHFhaDNBVG00cmdaVUNTSkdtdktJcTkvOGdUNVZXVGk2b3dFNnE3MTVUVzc5UXBSTWNKVUNzc0d3b1UvRmF3MmV5SDJ6VkRaU1FFV1FKQlJwWkJsbVJCbGhHY0lEamtwdUFCZ0d5MzIvZDFmaWtuT3pNT3MyamxCdTVkdm9uMzkrVmlhNWF2Wk9YbDhlbTJ2Ynk2OFNDMXJXM2wvQnllK1hJajk2M1l6RWVaaFgrNlJTcmZ0NW14VDM3UjRyT1QyNzVsK3I5V3QvdjNQNjVad2VqWmQ1RTg2MUgyMW5oODRhaGwwWlAvWU5BVmQzUEo0cTkvMjV0d0ZIUHRUUTh5OUlxRlhQdkdEMTArN0lVbkgrRy9lNnU2ZGFsbC8zbU4wZGYrbmVnWnozQTIyVkMvVzduNi83TjM3bkZSMWZuL2Y1NHpGNFpoR0VZWVlFUkVSRkpEUkVNeUpEVXpjODNNekZ4enk4eTFzakl6MTNWYmExMXovZlUxdDIyN21HdG1kak16MTh6TVRNMVlORFBYeXN6SUM1a1JJUklpSWd6RE1NemxmSDUveklVWndHdnFWczc3OFRnUFpjN2w4em5uOHptdjg3NitQcHpSN0hNM3NLdW9sQk10S0wvbWpaZkpHVFdabm1QL1NjVjVlL0F1OXUwcnh0YU1uMi81aTA4ejUvMXZ6K2hLQmF0ZnArKzQ2YVJkK3dkMjI4NWhGeFViVTZiUDQ0RDkzSkVJSHJmYURyWmloZ2I3MlBDVFRVcEl5RkpUOEFCL1pOUnF0ZTQ2ZGVmcldMT3JuQzZwSGJnaG94MmJ0K1F6YTJ1SmIyY0RMMy80QmZzcmpyQm82NzRRWUR0V2RvRGZ2YnFOdUxiSkRMMDBHZG5sdnVpQXplMm9wL1JvYmNodnNSMHl1T3ZxTHEwY1hjZnNmNzdIelBsUHNudlYvNUVkMDdTbi9MT1BlTGs4Z1oycm4yWDl3emRlMkp0UVcxajJ5dCtaTnlxTEdydnI5RUg5YUNWV3UrZU1tcnIxbnNsc1d6Z0pkYTJWYy9HcTVHOTRqNElEeHppdzV4dXE3Y2VaLy9KYXFrNW5HdHBMR1g3L2k3UzZPSWk5bUJrdkZySnM2YlBzWHZaSExPZnR3ZGN5Y2RKY2lwb1I0MWlycTZtdWQ1M1JsUWFPdkoxdFMvOUNrcXZ1eEVTeFp5R0ZtOWF5cjAwV25mWG5qbzZtcVBqUUQ4MjB0V0FmbTVEODRPWURPRitxaDFBSDI2bWpSOSt5YS9QbUFodHc0bUluMmNUajQ2OE4vTm5HZnBUN2R2OEEvVk1CUGY4M1lRVFVsckQyNjA5RFRsdXhiUmZYRFJySXZibEpGeFdZT1k0ZjVzbVgxMUpjcjJWb3VpN2tDN3pzdGJjb3NpcFlMczBPT1dmbnR2K3c1c3R2S2F4MnMzcmxXMnhUUlRMeHpwdEppYlN6K01WMzJMWDNheHhWR3VZOHQ0ellqcGxNRzlielozR3ZibHNWaTFmbXMvdjdDaFNka2RFMzNjRGdqUGdtY0N2OWhvZm12SWxObjhDVTM0K2dhNXkzME1WKy9EQUwzdGpJbm5JYm1ibDltVHE4RjZkS2cxWWFqck5vMlh2cytQNFlzWW1KakJzOWd1eTIrcE8vMEFPdVl0bkt0Yno4U1NGYmxEVThOUDRtektmd0xHejVZQjM1WHhkanJUL01FODh0UTQvTXJXUEhrTkZHSnYvOXRXelo4eTFsamdhV3ZQUW1lbDBjMCs2K0R0TUpyOWJJMHRjM1VlT3E1cUE5Z2FHZG5LejgvQmpUNzcrZGpEZ051ei8vaEJVRmV5aXZiU0R0MGg1TUhYTTFKZzNzL3U5bVZ1MDhTSW05bmtXTGxtSFJTQXk5NFVieVVnMCtCYjZLSnhjc1pzOVJHRC8ydHd5NHBNMVBHRVE3eTk5WXc2WnZqbURwZUFsVGJ4dUt4UWRVWlVXN2VXTEZSeWh0a2htZUZZOGp0aFBEZTdRTFdIS0wvbDNBclZPZkRySHVWaXgvQjJOcWU5Wi84Q202eEk1TS8vMzFXSHgxbURVbCsxbTIzMG1POWtlV0ZCU1IwT2t5Wms2NENqMHUxcTlleDZvdmZyQzlzV0hya1daYW1nZFFoTmNjOVZPREMwbENLSXFDcmNHRHJkR0Y3SE82Q1VENTZLT1BGQ0hFampONUR2c3JxK2ljZEtyU0tCZDdTMnVKRWNlNWMvRmIzUHJ5Qmo3NG9lWmk4QkF3ZmRwc0R1cTdNR2xZTnN2ZXlRL2FweUk3cHlkZHRVZFpsQithUXBqY0laMGh1ZDB3U1JIazVXWXpKSzg3UmcyQWh0NjlMeU92Y3lJR2N5SkRyc3ltLzZWdFQ5b0Q2NkVEekZuNEpyT2JiWnVLenYzaVpNN3FDcXExQ1l5L1pUaGorN1ZuNm9OL1lYdFZrNWEyNUowdERCbzJoTnlvSHhueWh4ZXhBelFjWmRTRVI2bU02Y3lVVzYraFpOUHJUUC8zMTZkc2E4bjhwMWgvSkpwcGQ5ekkwTzRKVkIxdk9PVTV4UWYycytPSE9wTGo0MG5RT2RqMHlkNFdwbDF6U2V0OEtVTjZYNEpPWTZUL2xka011YkluQ1Rydmk1bmU5VktHNUtTajB4a1llR1UyZ3kvdmNnb2E2a2FXdnZJbWNxZmVsSCs4bk1WN3RlUkdWZkRFdTE4QmNMQ2tncHdyODVnMmRnZ2NLR0RNczVzQVNFcnB4SkFyTTRqVmFPamRPNXNoVjE1R1Nwc202Ris5N2orazllckxzSTZDMFg5NWlaL0NMZkhxTS85Z2ZtRTlFMjhkUnV5UFh6RDRyeXU4NmxGdE1VTW56U2NsOXlwRzl6SXliZlo4Vm44WlpORGJmbURUZ1NqNmRvc09BYlpWYjc3QmpOYy9aL1NvNjRpdDNNbkl1VTJ1azVvZmlwajk1SFBNLzI4Tkk2Ky9pbFNkQ3dkUXNId0pVOTc5anR0K2U5MFhUcGRiYWNVRTladWhpaUtFa1BEcWJZMXVCWTFHVFl4ZUc0aUtCc0RON1hidjBHZzBnMDduSVpSK3Y1Zm45M3A0Y2ZLbHAvb01ZSE81V2IvdkNNK1BHWWF0L0JzbXZMYVJqZytONGRkTURxNVU3R1hGOTNIc2VXa2dGaGxtM3Q2ZlVSLzRIN2RNUnJjTTVNTzc0ZnZROHl6dE8yQnByOE9naVNDblZ3YVpBYTFDUTg4ZUdhakxkMk1vajZSdmRzYXBMVWVObGdSelN4M0NvRG4zTlczNmxFeW1ENi9oczIrK3d5Wk1aQ1E0K0d4Zk5Ybjl2VnJibU50K3krRHNTNkRuSGJ6ODFuMXNPVHlKMUQwRjdFdnN3NnJSVnlBRGMrNGNTc2JUVzVsL1MvZVR0bFY5M0lxK2JReHBxUjNvMlNYdHRQb25HeXpNZStRK1hwNzdERU5tM0FkRjN5T2Z3bXBLNmRpSmxEZzNXbTAwdWRrWklhWm1hcWRMU0kycFJ4Y1JUVjUyeGtrMHRlRHZXUnlEK2wySzgwTXpTcS9MR09DcFo5VVgzby9NcU4vZVJQRzNCeW42c1piTXJxbk1YMWNFRENhaFhRb0o3ZlFZTlZxeXN6UElhYWFZRGh4MkhTUDdaTURsMGN4ZU9JOFNKMlNjVmVWZkRVdlg3MmZtcTQrUWw2SWhyOU00bHZTZnkyNzdyY2dmZjRJemF4RFRoM2l0Z3dsWGYwaGg4RWZ0eHpMS1l4SklhVVVEdnZmTzIrbmZQWWIrS1dOWStKdEZGRDk2RTJtKzQreUdOQmJQSE9NMUVmTUFGSmEvL3pGVEpqL0haUjIxZTFveFF6MkFSNUs4NENZRUlDSDhhN3FvMVNvaUl5SlErM0kvaFBjZ0llcnE2ajZMalkwOTVTTTQ5bU1KOTd6MUZYUHVHRUhucUZQWjFHcjBhaGpXK3pKU2paRmd6S0pQMUhZK0s3Zi9xb0hOV1ZPTHJVMGNadC9qc2NUR0F4ZDJVVEE1UW9mRjNOSTBNZXBQSGQxZHR1QkpacTdkRDhnODhkeDhSbmVKUFBtSGJsYytnMmEreTVCQnVTUkVxYW15ZTNDNG0vdy95V2JmdkpLTldHSmNWTlkwSWxkV1lqMzREU01mUEJRNHJuZkhTMUhncEhSWTk5NS9QNDhzV0VIMnNOZlJKWFprL3YrYnlzQ09KeS9aUyt2VUFZQWhOMTlQRW1EczJ2SENUd3BaalZvR1dhVkMxa2hvWlJYMlJnRTBNSFBLSTJ3UnFRenFab0hqVlRoY3B4ZUJOeHQ5OTYxV29WYTVVY1JaK3hLb3JEVmdNZnRJRWlOTkpFVFpLRDhPNnRvYUxPWW1XditFMkpqUWp6aWd5RklyRjlXUWxPQTdOaWFXQk1sS3BSM1NmRjFPN3BqY3pPL1ZTRVZWSTBNc0pnNlVmRnZjR3FnRis5ZUVkME9TWmJRbzFEYzRzTmtkaFBqWUFHWFNwUHQzckZqeFppMFFjNkw3cnp0Mm1EdVhiV1B5bUJ1NXlxSS9qU2Vtb1dPaUFaZmJIWGdNTG8rRVJ2NTFMMDJualRWaFBINk1LZ1VzTWxSVUhiM3dQcjdxbzZ6LzZQTVd6dmNocGxReTIwYWY5Tnl4azZjemR2SUo3azJqeHVFS0RRYXNlbWNESXlkT1pkNklUb0NMNGkzdmhPd3ZxNm9DektCWXFhalZrUlFiUVhKQ0FnbFpiZGo0MU5nVGFEZ3FaTGVuUlVUUzFMNHpDLzgrQy9Dd2JQNC9tUG5hRnJiUEhuNWF6NlJydHpQTWFKSWxaTVZ6eGdFTW03V1dLcnNnMVhJYXV0eVBlMW40VFJ5bEh6eUlBU2paK2paUGZGRVNkSUFFMHBtdjd1YTAyeWcvM2toeXV6aWFrYytqVlNrNGdvZFFiU0FoeGtaRmxRdFNOR0N2b2JMZVFGSWIwSm5qS2QzV0ZQTXRxemdLUWQ4UlhXSThDY2NyS1ZjZ1RRNTFRNVVmcVlFVUU5UldVeW1NbUlNZ1EyNEJoaEZZekJHVVY5VFVQdnI0TTJVbkFMV1FraXJaVjNFUXFkUFNScXNSR2hWZWpTMUl4TXFWSzkzTGw3L3hzU3pMdzFwM2w5VXgrYVgzMFNWM29mcnc5N3grR0ZTUkptN3Q2YVg1L3VTclBSUWZxNkxSMDhBN254U1NudGlXNjlManViSFhwVXdvK0M4OWpUblVIejdJNTRxRnY3YUwrRlVEbTV5UXdhM3B4NWp4d21ZbVgySGlzVGMraG9TK1hzQ3BQY3EyZlljcFBmQWo5cU5xOHYrN0cxTkNNam1kemkyVms2bFRkeGIvcmZzNXY3ZXM3dDBvZXVrZEZtZnBTVTF1eitBZUhVaHBsOENLclZ2WTJWVmkzOGNmc1A0SEpVUWpYL25HMnd4T0dVM2xwKzlUMnFFZmZkdks2RTBEU1Z2MENOTmVhOGV0VjZSUVdWTE1IbnNiSGhxWjR6MHBxaDBEMmg5anp2TWJHTnpKek1DQmx4T3JobFgvWGdYdHV0TFpyR2JuOTVXa1oxNXovZ1pTbjBoWGRSa0xWbnhFWHRzb2NpN1A0WFMrNXh2ZlhNeVlkUjVzNzgwNDlSSndNZkVrT2I1ajJVZDd5TkU3ZU9LbER3bk5sVGVSMGQ3RG9xVWJxZXhtSmlNcmk3UTJwN1kzQ3plOXplVnpkL0h0Wjg4U3VveFNEUDE3UlBIVW9yY3A3MlVoTDY4UHlRWVQ0NFpleW1QUExpWDJ6djVzVy9VbXV2NVgwMU1QY3I5K0pEODlrK212cFpBVFdjV3JueDRoTjNod2pla003bGpMOXFJRzBqSkNOZnRGTHk4ak0vSTNiRisxa3VSckI1QitVa1ZVNXRiciszSFA4eTk5ZXZENzhtQXoxQjBDYnNLL01xV3ZSbFFvMURzRWtpU2p1RDJvMUdxMUpJUkFDQ0g1dEgvNTRZY2ZUbENyMWEzNzJSUVh4NTBxRXFNME9GeHVIQzQzamJLVzNzbGVNK09iSDBvNTFLZ21KelVlM0c3VWtkRmtKa1JqVGt5aW03NlJEVi8vd0k5S0pBK1A2RWNuZ3hwMnZkbXlqYmJkSWFuN2VabWpqZFhsS0hWSDBldjFaM1JlYlcwdDBkSFJ5UEtaaExKVkRPaVh3NEdkTy9qUC9xUGNjY3N3T3FVa2tkdTVMYmFLVWxaK3ZJZGFLWm9lU1ZHVVZsUmgxNXJJN2hnTWJGcDZaWGNtcWhVTlB5b3VnWnlPOGY4ejBOYVpVeGpjMWNnWFJUOVFyNG1oZDNvaUdkMnpFT1VIZVB1alFxSXU3Y3U5MTNTa1UzcG5VdHA0UDJEWFgzVTUvOG5mekE5U0lnditmQ3VKa1NyUVJISHpiM0w0OXNzdldmZkpWMVE2dFF6c2N4a2Q0dlFCTjhZMUEzTDQ4YnRpU3FvYTZOR2pDOUZxc05kVXNPbVRYZVIvZm9DVTdFSE12aldYaVBPMTZJMms0emY5dTFGOHNKamk4bU9rWFpwQmZHVFFvR2dNOU9tUlNtdnZhM3hTQ2xkMVR3a3lxMVgwNkpGT0pKRGNzUlBKTVZwMEpqT1hYWkxHNE95MnJGdS9sYy9MR25oZ3drMjBpemZUcjF2N3dBdC9WYjllVkpWOHo3ZUhqNUtZa2s1N2s5WVhYT2hJZWtKVVlNN2taSGNoMkRzVWJiWXdvTmNsTkhjazlMM3lDdW9yU3ZqdXgrT2tkZTFHZ2w2aVorL2U2S3UvWitYbUw5RWtaN0xnd1p1STFraWdNWExUb0N3T2ZGMUVqYjQ5L1JJYU9HcnF5ZzNkTFlIN1NoQlZMTmhWejIxOU9nYUNCeXZmZkk4YnhvNWllLzRXR2kwWkxIamdCcUkwVGM5T1p6TFRPejAwU2Faajk1N0VXZys5ODg3MnZZY0FKOUFJT0h6L09nR1hIK0JVc3F5b0pBbTFTa1pSQkU2M0I2Y2lJZWwwT3RudGRrdENDRmtJb1JKQ2FFdEt2dStla3BLeTdZSzhJUmU0cEtyMjI4OXhsKzhqTHU3TUtnOUtTMHRKU2twQ0hhNDhDTXRGS2tYZmZFZHFwMDZvbmNlNTlmZC9aT2pNcHhuZlBjaGo1YXBoMUwxUE1lZloyV1FZWk1ESnFCdkdNWGJSQ2thY0dmMGg3K1J2djIva0grYjlTQ2dIbTAyQ2VpUWFKU1NuSk9HUkpFbFJ5N0xRcW1VUm9kVVFFYUVSL3VDQmtDUUo0WTB2Q0VCSlRlMVlwQ2llUFVCbWVEakRFcGF3QUd6OWNBM2pacGVoU0pFTUhUV0pjZDJidWVFMUpsYTlOQ2ZFTDVqZXRST3haN2hna3lMRXZwRi9tSGVzbVJucXBtVzZoNUI4T1d6K0lLaEtrbEhKRW1wWmxnbnlzd1hBemUxMkY2alY2bDhkc0xralluREhwa0ZDNHBtWnNMVVNJajRWTk9GbHRjSnljY3JFT1M4dzhRelBtZmZhVzJmY1RyMnQvdE1UK05ZOFNKSVgxQ1FFa29Ra3k5NElzMXFMU3FORjFrWWdSK2dDNlI1SWt1UlQycnlJYUxWYXQ4VEd4azc1dFEyT1IyZkNKVWRCd3BucHhvMlZMa1Q4SlJDbUJnOUxXTTZyZkZPNmN4K2hhUjV1d0NOSlVwREdKaUZKc3BCa0ZaSktnNnpSSW10MXlGb2RxZ2g5azhiV0xKOU5NWnZqdHltSzV6RFE3cnplUmZidld2N1d0bnQ0ZE1NU2xvdFFoQkRsbDEvZXU3U1pDZXJmZkpSRlVnaHJyaXpMZ1UybFVxRlN5VjVnazJWWmVEeWVZRk5VQUI2UHgvT0JTcVdhY0Y3dkpNeTdGcGF3aE1VbkRRME5XMXZUMW9LMkVCNDJXWmFGSDhPOHdPWUZON2sxamMyUGpIVjF0dndUZGFER2F1V0hZN1lUc3dONFF0T2ZGVVhCN1FuZGZ2V2lWTE5pOFNJV0xWckUrdTFGdjdyYnF5a3ZZdldLNVN4ZmR5RUM2RTRLVnErbTBuRVJ2TjJPS3RibmYzYkMzZnUyYjZTd05MVFdldmVXTlJSVnRGNGxXbG04azVYTGw3Tm15KzVtODlQSlp3VnJXYjVzR1h0S203aDRQaXRZVDVYemYzUHJCdzkrOTFVelVITUQ3bEF6bEJZYVd4T2dxVkNwMUY1ZzgyOFE0RFlTZ0JJYkc1c1BIQTU5R0RZZWVQcFZybCswamo4c2U0ZStUNjNpdjVYK0F1UkcvcjdzYmZMKzlnTHBjMVpTRmpqSnhVUC9lbzIrODN6YjR5OXo2Y3dsZkZRamZ1VXpWTVpnTUZDNjR5MFdydDd4aSt1OXUyUUxvNmM4MWZwTzZ4NEc1VjNQOXFKU0tpcHJPUCtmS1R0UFRIdVF3b3VBTzJIZE0zOWkvYjRURTZXdFgvd3dxN2VYaGZ5MjhkVy9zKzJBdFNWR2xtd2lkK0NkN0NrdG83STY5T0d0bmZkNzduM2liY3JLSzdEYW0ybzdiSHZXTUgzK3h2K0pHZHFqUjQvdmZlRFYzQXh0S3FYeUZZWUdZNWNYMEpvMnRVK0ZrNXJTUGlRaFNTaENDQVZRUEI3UEJwVktkVmZUdTZyaG5sRWp5R3p2TFJOWnZmNDk1dVIvellaYmV3TXFCdWZsY3RlZ0JnWTkvMFZRbHpVOCtjRHZBMytWRjMzSnlNM0g2V09TZnVXNFptTFlyV1BSVlg5Q1lja0p0SjdLTW1yY09sS2JNNlFvVHNwS3k1QU5acExNb1RXUURsczE1WlZXekVuSkdIWG5LYTlPVVhEVWxMRnArMWU0M1c2UVpkVCs1R1JGd1ZxMGsxTExRT2JObk82ZFdLZDFUVUFHZTAwVmxUWklUVzY2WjZlOWhySUtLMG1wS2VpQ0wrWjJVRkpXaVNYbERKZHVWSnlVbFphamo3VVFhOVNGZEtLeXJCUzMza3hTck9IMEFONWhwY29HbGxndFplVTFKQ1ZibXU3WE4wNDZjeEptUTJnNzFSWGxXSjFxVWxJc0ljOUhBUlM3bGJJcUc4a3BTYUdKdmM1UzVpM1p5Y0xkcjdSNGVCV2xwZWpNTFdtL0ZMZWI2VXMrUWEyV1cxaEp4VHQyWU9oN0M3T21UME9XMVNIbmJOKytnM0ZUTmpONWNHaCs1c0R4azVpYS9RQ2xVNGFRY2dGalpYYTdmY3NKZkd1ZUlQK2FBZ0VmVzhBTTlXdHNhclVLdFZxTjJtZVBFbXlTK3NLakN1Q3BxYW5aRUJjWDF3UnNSSkRadnFrVUtpVTJCc2NSZjZHem1zdlMya0Z0eVVsdjRLMmRleG1XZlRVWGRYeFJzVEYzL0EyOFd1Z21SVjlEbGJFdkc5YzhqMFVIOXJJZERCNTBHN3IwbnNqV01tTDczOCtLeDhZQnNPWFZ2M0RYM1BWa1phWlFldUFBTTVaL3pxZ3N3em52M2hPVGg3Tis1dy9ZRGxReGFNaDFxT1ZFRnE1ZFJtY2RQRFp4Q0p0Mkg2Ym1ZQTFEaGx5SG5Ib1ZHNWZNUENXNGplL2RCbjMvQ1d6TjM0SmVkakJneWdzOE1TR1B0Zk1mWk9xQ3JXUjBObE5VMnNpcmE5YlROODJJclhRN2d3YjlEbDE2Rmc2SGk1b2dqcUV4bVpHTVd0WEFxSzVRczJNSlhhZCtTc1dPRndFNHNHMHBvOGMvU216bkxKeFZKUXlhOWlLengvVEdYcjZMMFNOdW84cVlCbFVIU0IzeEtNdG5qejFwdjhmbnRxWEVuRXZwcnMvb210c0hhL0ZYOUp6NEFnc21EYVJ5M3laR2pya2ZiWElHTlFmM01YRDY4enc1Y1JCUXdjaXNmbFFtZENhV0dnNVVtMWk1L20yeUxEbzJQbk0zajZ3OVFpeU4yS3VLY0diY3lmWVZzd0x2UWtuQktpbzYvNGFRSVhWV01XbkVOV3lyU2NDRUE3ZXRtc0ZEZklwejRUcEdUbnVXb2wzYm1MNzhXNllPU2ZhZFZNV1VrYjlqNThFREZGZktEQm15R1V2dUxTeDc3QzVLdHk1andwelhLTnBWanFIOE50WTlwV1BjckpjWTE5OWJGb214SjRNN2w3T3FvSVJwUTFJdjJDdXhiOS8rTDA5aWhnWnBiS0ZCZ3lZVDFHdUdxdFZxU0U1dWg5bHNscUtqbzZXSWlBaFpyVmFyWkZuV1NKSVVLVW1TVVpLa0JDR1VmVUlvb3NYbXJCUDNQZk9TV0xqM2FPanZOY1dpNTZ3M3hhRld6bkhWSFJKNXM1ZUsvUTJ0WE84Q2JFZU9WSWhEaHc2ZDhYbGZmLzIxYUd4MG5GV2JIejUzajdqK2p5K0gvUGJEQjArS3hGNjNpRnFQSW9Sd2lEOWZmNmw0OElXdFFnaEYvT2U1ZThYVjl5ME1IQnZjN3UyWHhZaFhQcmY2L25hS3hrYjNTZHYrOGFQRm9tMWlva2hzdGozNnhtZW43SGZEMTh0RlRLODdXdDEzL1BPWFJlS1Y5NXpSYzdpalY1UzQ1cjVuaE10Ly9RYTdxUDFxbFVqc2VKWDR2dFo3SDErOE1VUDB1bjJ1RUVJUno5N2RSL3p1OFRYZTlyNWFJV0trUlBIaGo5NXpiK2tXSWQ3YTcrdkxmeGVMeEN2dTlMYmpLaE5YdDQ4WHIzeFM1bXZYTFk0ZHJ4RkNLT0xSbTd1TCs1N045eDFYSlc3czFrNjgrNjM5NUgyK0lsRzh0ZDhwWHZ2ejllTDJmNndSeHo1WklycjlkbzRRd2laK2Yzazc4ZmYzOXdnaEZPR3AzU042dGI5VWZGSHJIYy9hMnFicnZ2Ym42OFR0dnZ2WThQU2RvbDIvZTBXOVVJUm9PQ2g2dFdrblBqN2ExTjViZjd0RjNQancwcEErZlBIR0k2TGp0ZE5FbzFDRWFDZ1ZWN1hUaUVmZkxBdzU1cy9YZHhCUGJ5aHRPVy9mbkNWNjNQRkVxL2YyeCtzN2lPYytMRzkxMytzUDN5aHUrZHZLQy9aZUtvcW5DQmdOREFjR0FibEFOeUJWa3FRRUh4WkZ5cktzVWF2VnFvaUlDRGs2T2xveW04MVNjbkk3MHRQVHljcktvaytmUGx4NzdiV29aVm5sanloSXNpd0xSVkVrWHhEQmI0NTZuRTduZTFxdE5wUjBUWEh4cjdjMzRFNi9nbnN5VHI4OGFkdk8vY1JmMnBXdU9pNXEyYlhyUzNyMnZRYWpES0Jsd09BOEh0dTVHeWIySmJOM2Z3N00vVFBqNVJMNjV2Vmw1TWloK0lta0JnenN5NXk3YnVUQXlPdm9PMmdvUS9OT3pzbG02WDhYNVJWMy9XeDhqbVBHamcyWVhqcWRqaDNiQ2xEMHNHanVYN3pUcXFxSVBidDBLTUN1blhzWU9NRkxHbURLR2tCUDg2a05YdmVCYlh3bTkyWnRYbEtnelZpVEVhaGt5OVlEeEpvL1lNYU1ENzA2amR0QjRlNFNocWQzUGNrVjlSZ01hakFhTUJsaU1SanRPT3cyc081ankyNDdjc0hyek5qcU5SV2Q3bEwySExTUm5hMWp4Nm9uV2JqaVF5cXREbW9xaWtrZGRYUGdpajF6ZTZNSDBDV1JtbEJEVlEzZ3M4cXJxNnN3SllleWdSVHUvcEs4QVhkNnRUcGRNZ1B6MHMrN1Q5TVlhNktxN01JNU5HdHFhcmJRc3RJZ3hCU1ZKRWtKckJzYUVnME44cTJwMVdnMEdxOHAyc3djRlZKVHRxNENlTXJMeTllbnBxWStGQlR5Wk1WN0cvaFk3c2dyMTJWdzJyWEhTaU1yc1NPZ3BBQUFJQUJKUkVGVWR4WXpjc1JGbHVKeGhzWFpDYjNIc0c5M0xnWDVCYXhlK2plZVhMR2RmV3ZuSWdNVG5ueVgvcnUyVWJCbEN6Tkc5V1Azd285NFpNU0pDMFFxZDZ4ZzhMMS9iL0g3dU5tdk1XMUUxb1VQcGhoYmtnOVkwbm94WW9SLzdZWWJHVFU1OXBTUHpPdlY4enJ0RkVWcGV0RlBlcUtlQVVOdm9uZUM5NjhSSTI0a0pUM2w5QVpQOWpGRWVPRVRVRkMwWmdhUHZKRVUyWCs5bTBucnJLZDh5MEltTFBpQy9JM3YwVFhCd1BvbjcyUitSUk1VcWVVVCswV05KaE5XcTdXVlBzZ1hkS1JzVmlzbWsrR0N0YmQxNjhkZk5RTTExMG5NVUJHYXR4YmtXL01CbSt4UGFHc0N0d0JWZUNBNm1wYldhWitpS0p0OHNRdmUvL0JEL2wxbjVzV2JleEY1QnMvNzZBL2Y4SW1uTGNQVERCY1ZybGxpMjFKY1hCTHlsYzNPdm96ZDIvNkRWUUZ3c21YamRuSnllZ1ltbFNFaGxSRzNUbUR4TXc5VHNXOC9EcDhEMldxMWs1N2RuNG5UWnZIUStMN3MyWGZncEcyYnM0ZXpmdDE3ckd1MjNUVzQ2eW43cmRYcFVLcXJmSDA4ZlZuMnhCVG1MczAvcldPeit3Nms2c0JYSkdYMkpqYzNsOXpjWE5KOFFZWHMzSjRVYlBHbWt0UVVibUZYVlZOSFlzMUdTa3U4a2NFZDIzWUVucTA2dlMrOWxjOVlHWWdhS3RUVVdJRUVCdlJQNW1DRk05Qk9ka2JuVm9IMjlGU2FUQVptMkNtMXhnYXVsNW1laHRFZ1UxRmFTa0xYWG5STk1JQmlZKzI2Z3RPK2JFNTJML2J0Q2FXS3o4NitqTzFidG5sWGczT1VrYi85NFBuM2QrM1pRMDUyemdWNVA5eHU5K1lSSTBZY0N3STJGeTBUYzROeTE2U1FaTnhnMzVwR28wYXIxYUpXcTlWK1VQTkZSMlVoU1FyTnpWRzd2V0d0d1JBMW1JWWpQRjd3SFZaZEJBUG43dmUrQVBGcGZITHYxUURNWHZ3cTcxYzRxWE82dVhIT1MyVDJ1SnpYYnZScUJtOS92cDkrdlhwaGtpOHFYQ056K0FUeVhyNkp0SzV2a1RYMFB0WStOWm1VUVJPWnN2eDljbkt1SWtWbnBjclluNDNqdkdiWFp5dG1NL0daajhuc21rSng0VzRtUGZLUzEzVEJ6VVBEZTdCTFNTZko2S1N3eE0zeTlZTlBybTlvOVNRbG45M0xLNmNQWkdydlo4bkp1Z3lqSVpWbEJlL1E5VFF1dFdQVFcreE83OHdqNDA3Tk1HL01Hc0hpU1I4eHNHZDN1bWFtVTFWeWtLNmovc2FyTTBkeDF5Ti9aK1hnM3pGZzY0czQzWUxrSUZOMDNNUzdHVHErSDV1eU9tTXhSeURqVy90Qm5jU2k1ZjlnekxpcldOWTFFNldxakVGVG4yZm1tTjQ4TlA4VnhvNjhuWnpseVZpMERnNldDWlp0M1VyT1dWSGc2Wm4zNmt1TUhuTURhNS9xaXM1WlNhbXRIZms3VjVFMWREem1KNjRuYi9DbjZPeFZXQkxTVHZ1cTZZTkdZcGgyR3djZGorRmYreWRyMUJTR0xiMkduTHhyaVpWZEtPWW1tcCtYWjkvQnkvbkZGTytyUUZkeUU2c2Uwek5qNFhzTXl6S2UvWVMxSDJEakxpUExsNlZma1BmajBLR3lUMW94UVYwbk1FT0ZKTWxCMGRBbVRjMnZyV20xV3FSdTNiclIwTkJBUTBNRGpZME9xYkhSaWN2bGtoUkZrUlZGa1lVUWFrRDdmLy8zbVBIaGh4L2VCclQvSllOTVpXVWxUcWVMNU9RenF4VGJzMmN2blR0Zmd2WWMxNHJXVkpWamRXdEpzWVMrWFU2N2xmTEtha3dKU1pqMDJoYm5WTnRsVXBJdHFIOGxId20zdzBaNVJSV3hsaVFNT20zd0Rzcktxa2hJU1ViYjdGNXRWZVhZTUdJeHQySUJLRTdLUzh2Um1TM0VHa0lkdXRVVnBUalFZN0dZejRHQnAxQlJWZ3E2V0N6QmFUbUtrOUtTY295V1pFejZNMHZKV1Q3ckpuYW5QY3dUNDN1SHRGTlpYb2JPbEhSYXRPNC9SYll2bWNhVHBUbXNublArWFVaQ2lMS2JiaHI1NTNmZmZkZE9FMFdSRGJCSmttVEh5OFBtbENUSkxjdXlJc3V5b3RGb1JFU0Vsb2dJbllpTWpDUXlNcEtvcUNnTUJnTkdvNUhZMkRaSVBYcjB3RzYzMDlEUWdNUGhrQm9iRzNHNVhGSXpqallOb0d0c2REeWkwV2ltaG9FdExHRTVmNkpZaTFtNnFZVHhvd2IrVDlvdldQVXE2VVBHa1dJNC8xOU5xOVg2VWt5TTZRT2dnVkR1dFhwSmtob0FoeVJKTGttU3ZOeHJhclh3QWxzRU9wMFgyUFI2UFZGUlVVUkhSeE1URTBOY1hKelhGUFdib3lxVlNxaFVLc25qOFFoWmx2QjRSSENKbGZ2UW9VTnIwdExTcG9hblhsaCtQVkxEOG9YTHFHN0ZqMmpKN011b0FSZCt6VmJabU1iNFVXbi9zeWN5Y05UNEM5Ylc1czFiZGpYenJaM1F2eWJMa3ZDYm56NnNDakpCMVdpMUdpSWlJb2lNMVBtQlRVV1FyODBYSFpYeHhrWUQwVkVsUGYyUy9XNjNhN1VzeXlQREwwUllmaDFpNHRaSms4T1A0WDhnalkyTjYwYU1HRkZGcUYvTkJiZ2tTUXF3ZVJDb0RRMWw4UWpHTHI5dlRhZUxJREpTajZ6UmFBSUhCS2QrQkJmRyt3SUpIcnlWQ0crSGh5UXNZUW5MVDVXaW9xSlBXdEhXZ29NR250WW9pcHFuZUdnMEdqUWFMVnB0QkRxZERyMCtBR3lhUUxqVXIrS3BWTEpvenZZQmVNem0rQUloeENmaFlRbExXTUp5dHVMeGVIYjA3SG5aOXlmUjFscXdlYWhVVFdhb0Y2dlVxTldhRnRxYXdSQ0ZXcXZWb05GNGJWU1h5NHVBYnJjYmIwV0NncUlvQVhBVFFuZ0FkMzE5L2IvZGluSmxyVXVtWFJ0RDY1RTVqd0JWc3lKM2o0dnk0ellpb2d6RVJZWXB0bi9Pc3J0Z05Uc09WSUl1aVhIamg2TVBQNUt3bkVNNWRLanNQeWZSMXZ5TXVVcG9zYnNxeEFUMTQ1YmZ0NmJUZVFNSjBkSFJxTFZhTFJxTkZyWGEyVW9Rd2QxaW9SZkFrOUlsOCsxTEg1dzdNVEhDazFudWl1VHBjZGZUSnlFU0wyM1JPdDc5cm9wS3hjU1d2OTJDdnlUM3lLRnZHYjlzRzNHV2VJNVhIcVZ6cnp6K09hZ0xjbmlNVzVYeUhUQm5DeXlhOGI5cFg2dlRZNUFybWZyUUc0d0lBMXRZenFFb2lyS3ZYNysrZTFyWDFwcVcxc08vWUlza0NWbVdXZ2thK0UxUXY3WVdpY0VRaGRFWWd4d1JFWUZYYS9PYXBFM2dKdnUwTmptUXJPc0h0dVBsaDl6NUQ5ejA1dW9IYitlaGpBam01SC90NjdLWHR1aTllNjZoK1JyamIyejlsTzU1VjdQczk4TjRkOUsxZkxwNU8xODFYQ1FENmZ2WFdnVmxGYUg3N0RWUVhFcklTdWVLQXJaeTJMb0wzRzdPYVBWdkJlOVVLU2tHdXpPMEE3YnFsdTJmU0RMeWhqQjI5RkJPRlBGM082d1VGNWRnZDdic1hFMWxHU1dsNWJUWXBUZ3BLeW1tdk1vYWZyc3ZZcW1zck54WVZuWTRHTlNjQk5ZTERTbWhVa0sxdGVDZ2dkOEViZExXb3FLODJscWJOaWJraUFnZFdtMkV6d0hYbE1HclVxbUZ2eUloS0lqZ2F3ejM4dVhMVndMZnBjVEc0R2dNcFMyS2kyeVpRR2pRYWxINWw3T1hBTFVXZytyaUdNaitGcGoyRU9RTmd1R0RZSUd2T0czeERPalpINlpNZ0t6ZVVGVHQvZjJoTVRCdU5wUnNnU0ZEWVBBWThPMGkxd3k3ZlJ5RWUxWkF6N0ZON2VRdmdBRmpZSEF1akJrTDJTTzh2ODhZQ1VOR3dzZ3hNQ2diSmkvOGlXYnEybWZvM0xrWFU2YmNROWZPUFZpNW85UzN4OG1URTYraDc5QTdtRHI1OS9UTUhvNS9qNzFzQjMwekxtWDg1RDh4ZnVTMWpKbTVOUHlHWDRRaWhDaWVOZXZSTDA5aGhyWW9lUGVWVFluZzlBNHZzRVVRRWFIekpla2FpSW1KSVRZMkZuVmtwSTZHQnE4NjUzUnFmTDQyZGZNSWFiQko2Z0U4ZDk4OTBYcmI2Qkd2di96cGQ3TkhYenY4bERkMHgzWFg4TURybXhoZnZKZnFZelhjT2ZwYUxybFljbDNkRXRXeGdqMCtabWFIQTRyWHcyTmJvWEFYbU5Td2RpNDg5QlNzZlF5ZVhBa0gxOENJRlpDLzRzeWEycmtOZHU2R0RMTzNuY0NISlJOV3pZR2FIWkE2RVo2WkJHZVZ2NjVVTW0zUy8rT3h0ZDl3YTdhWmZhdG1NMkRhWTR6WXZoaHR6VzRXckxLeXBlcHpVbVZRbk02QXRycGp6VkswQS85RS9zSjd2UkRvZEliZjhvdFFqaDQ5K3Q2TEw3N1kySnEySmttUzN3ejEwRVQvTFVJam9jR2dwaVVpUWt0a3BDNmdyWmxNSnN6bWVPVElTRDA2blk0bVg1dUdaa203d2VrZklha2ZrMmIrMzcvZDZWY1VudzV0MFpiUHZxQlNaK0dlcTdLNTUvSjJ2Skcva3dBLzVhOWRaTUd0UVpxVlRnZmJ0b0FlbURjVFpzeUFqYnRoVCtGUGI2cm5VQytvK2R2eFM1NnZPc2VVQXJwcWIzcjMyVG4vQ2ltMFp6QWcyOXRJeHNCQnFBcy9wMVFCak9uMFQ2OWt6TERibWZ2TUluYVgxUVRBTTdOM2Z3NnNlWnp4azJld1pQazZiSW82L0paZmZOcmE5MDg4OGNRWHpVQXRXR05ya2VMUkhOUmErdFowdmtpb0lWQjFZTEVrSWtkRjZkSHBJdkg2MnJUNG82U2hxUjhxRVFScUN0NElxZnVWK2M4Yy8vdUFqa3RQSFFCb1pPV24zM0xidFZmU0o5WEM5ZjM2MHMxVndxYVMrb3NFMk1Cb2FPa0xTK2tKSTBaNHQzSFRZTlVUWithelU5d3Q5eGxQVVBzY1lNbzVuOUVhT1phbDIvY3lmL290eUJXN0dOejdjcmFXZVRVekx4WFRSNHpJNjh6V3BYOGpiL1JNbFBDN2ZyRnBhMnYvK2MrbkhNMU1VTCsyMXVvU2U4RVlGRnhoNE5YV1d2cld6R1l6YXJVYTJXQXdvTmRIaG1odFRVbTc2dGE0Mm56Z0pua2tTWEt2V2JuaVRTSEUvcFBma2dwRGhJb2ZxbXE5TDZTamxrUDFFZ2JkeGZ2VjdqOEFEaFJDMXh6SXpmVnVLVUYxOEhvaldDdERnd29BQ1VZbzlUSHliUHZzUEhmU1lNYnNMcWVrT3FnWFNabGs2ZmV4WlZjVkFQc0s4bkZuWGU3bEpIUGFzTHIxOUI0NGpCbnpGaklpM1VGUmlWYzNQREVWVTFndUVtM3RtOW16Wis5c0JkU2NRZjYxVmxJOFpFSkxwMEsxTmIwK3NwbTI1bVUrVVVkSEc2bXJxNk8rM283RDBVQmpZeU5PcHhhTnhvWEw1VUt0Vmd1MzJ5MTVQQjZoZU1OelFnZ1VFSW9RZUNaTXVMUDJoVHJMYXp1bVhEY1BUa3hiTlBuNks3bDcxWHQ4c1RPZW1xb3Frckw2TURSbzdZU0xUZEtHd3N5dGtKTUZtZW5lS09iUWgyRHVPQjkrNUhyNWtiT3l3SkFFR3pkQ0xEQmhJdHcxQ0JaMkJiTUJPSi9VZHVwVVpzOGF5cTA5dTZBM3BiRmkrNGRrR2l3OHRlQ3ZqQnJaaCtXWmFlelpWODZDNWU5NzJWMXJDdW1mZXp2bWpDemttaEpxRXNZd0w5ZkwvWHRpS3Fhd1hBenk0NDgvcm4zKytVV244cTJGSk9RRzBSS0pscUFXRVdEMWlJNDIwcVpORytMajQ5SDUvQy9TYTYrOVNtbHBLUlVWUnpoMnJJcWFtbHJxNnF6WWJQV255L3FodmU2NklmcDE2OWF0a2lTcDkwbnZ6dU9pdkxhZWlNaW8vMW1DN3MrTjNjTmhnNHBxc0ZoQWQ1cVhycTRFUlFkbTQvOXVvcm9kTnNvcXFraElUa0VmbktHdE9LbW9LTWV0TnBHY0VFcHhmVElxcHJEOGVrVlJsSjJabWQyZjJyOS92d012aTBlOWI3TUJkaCtMaC9OMFdEd01CaStRbVV3eHhNV1pzVmdTU1VsSjRaSkxMcUZIang3bzlkN1BwYnBObXpiVTFOUlFWMmZEYnErbm9jRkJZMk1FV3EwVGw4c2JJVldyVmNMdDlyTit5SGc4bmtDeUx1RFpzR0dqMDJxMXZob1RFM055WUZOcFNJbzFoVWM2U0hRR1NEMURyU3MyNFgvZmI3WE9RR3BySFplMVdKSlNXejFIcXplU21tb01EL3BGSnNYRnhlL3YzNy9memFram9RcE5xN3Y3dExYbXZyVUlINE9IVjFzekdyM2FXa0pDUWdEVUFHU3oyWXpKWkNJNjJvQmVIMFZrcEk2SWlBaWZyNjExZjF0UTFDS3crSUxKMU9ZOVJWSFdoNGN4TEdFSmkxOWNMdGVIbDF6U2VYOHpRRHVsYjYwMXY1cEdvdzNRRXVuMVVVUkhHM3pwSGVhQWJ5MEFiQWtKaWNUR3htSTB4bUF3Uk9GTi80aWdxU0pCN1VzQlVZa2dDdkdRRWl1OGl5NjRLaXNyWHcwUFpWakNFaGEvZlBubGw1c0lUY1lOQUp0UFczT2ZYRnZUTktzSGJTcDBOeHE5eWJnSkNZbEVSVVdGQWx0U1Vsdk1aak50MnBpSWpvNG1OUDBqSWtocjB6U1BrcmJRMnRxMlRkcnVjcm1XaEljekxHRUpTMzE5L2ZJcnJzZzkxQXpVR2sra3JmbVgxR3RlTnVXbkpEcFJla2RTVXR1V0hwSEl5RWdzRmd0eGNYSEV4TVRnVGYvd0p1MUdSR2g5S1NBQmN6UzR6RW8wcXlGMVM1TGsycnQzNzFMZzhLOXRrREl6dTRWcHdjTVNsdE1VSWNUaE5XdldiRzFOVTJ1bXJZWGtyYlVXQ2ZWWEdQaTUxcHFuZDBSR1JyWUVOb0NrcENUaTQrTnAwNllOUnFPUnFLZ285UHBJSWlMODRLWTViVi9iWlpkbGYyZTMyMThJRDIxWXduTHhTbVZsNWNxeFkyOC8za3hUTzZHMmRpTGZtdGNFMVJJUjRjMVpDdzRZeE1mSGs1U1UxR3I3M25YSXRWb3NGcTlKNmcwa1JLUFg2d09CQkswMklsaHpFNG9RT04wZTRmWW9RaEZOckI5K2RPN2FJM3Zwcy9tRm0wTTRITndPM3Zwb0I5TlhiT0x4L04wY2FSVGgwUTlMV0g2RjRuYTdQODdKeWZuOE5MUzFrS1gxL05VRnZsUVBYeVZVUkZEQUlMZ2UxSXpGMHZhRVZsUWdBYWw5KzJUOGdZU1lHQ01HZ3dGL0hXbXcxcWJSeURqZG9OWm9VS2xVSUFUQzF6ay91QjA2ZU1DNVlNTi9sd1FEMjdMMzEvTjZpWk14ZmJLSXN4NWl3cXJQd2lVMVlRbkxyMUFLQ3d2Zkx5czczTHk2b0JGb0RBWTFINkFwd1RXaFRWSFFKbTB0dEI3VUdBZ1l0RytmZk1JK2hGUU9KaVcxSlQ0K0hwT3BEZEhSWHBNME10SnJralpwYlRyTWJhS0ZJVEtDQ0sxR3FGU3k4R0pid0ZiMlNCS3VnMC9kOTdITDZmeVg5OHFONU84OXdsM1g1cEhUd2NMRUcvcmcrcWFJcnh2Q2t5QXNZZmsxaWRWcWZiVlhyNXdTSDNnRmcxcHd3WHR6dmpXZnRxWnFSVnZUaFZRWW1FeCtFN1R0U2ZzUkFteUppWWxZTEJiTTVqaE1waGlmU2VvRk41MnV5UnoxUlVtRldxMUdCTkdMTkdsdGtodHdiaXNvZUVVSThTVjRjQ3NDbGNyWG5LeENKV3dVVjd2Q015RXNZZm1WaUtJb1h6My8vS0xtQVlPQWIwMlNKQ2V0KzlaOEpxaEdOR2xyVFdWVDNweTFhRXltR014bWI4QWdNVEh4OUlFTm9GMjdkaVFrSlBoeTI0d1lERkdCSW5rL0E0Zy9rQUFLaXBCUWE5UUJJa3BKQ2pCZ3VzZGRON1RpK1BIakw0Q2VQcDFpV2JXOWtLTTJPeDk4L0NVL0NJbUdSbmQ0Tm9RbExMOFMrZmJiYjFmUG1ESEQxZ3FvK1RVMlA2Z0ZwM2kwV0hHcWlibkRYK1FlNVZ2aFBaYUVoQVRhdFR0MU9XUUxZSXVKaVNFcEtRbXpPZDZYMjlaa2tnYURteXhCbmNNamRIbzlHcFdxMWFSZEpNa1ZGMmZlNEhLNVhyejd4aUYwNXdpVFh0L0FwMG9pQTJKVjZIVmhUcTZ3aE9YWElEYWI3WTJ1WFMvOUpzZ0ViV3ltcmJXYWpOc1VNTkNJNXFBV1d1VHVKWkJNU2tvaUppYm1sUDFwRlZuYXQyOVBkWFUxVnF1Vit2cDZYeUY4STA2bkU2ZlRpYU9obmlPMlJvd21FMnFQazhaR0JVVlJFRUlJUlZFVUVCNGhrQ1NRa1NUVko1OTg4dkpWVjEzVmE5cE52OGtHY05lVmMvVzJhUDRVSDE2cEtpeGgrUldZb0x0ZmZmVzF6YTM0MVlKQnpZVTMxOVVqU1pMU1BCbTN5YThXV2pabE1FU0hGTHkzYjkvK3RQclVLckJwTkJxU2s1T3ByYTNGWnF2RGJyZmpjRGk4bEVhT0JyNCtWb2NxTWdwSnVHaHdLOEl0SkVtdFVna2hGRHdlOE5JYVNZb0FOd0xYMVZjUExOdno1YTVGWDNxaUZpZHBGZDc1K0hPeWNudlRNWXhyWVFuTEwxNisrZWFiMVE4ODhJRDFKQ1pvaTJSYzM2cFRMZEk3dkg2MWxsSFF4TVFFa3BPVDBXaE9EelJPeUtkcXNWaWFKZTVHKzJwSkk0bVBpOE9randDVkNrbWxRcEs5cUN2TEtpRkpDQ1JKU0pLdllsL0NKVW1TTS9PeTdFMmxKU1hQcmk4NlRNL2VmWGw2Y09md2pBaExXSDdoVWx0YnV5UWpvOXVCazJocmZtRHorOVo4QVlNQXFJVXc0bnFqb1A1YTBPaVFSTnptaGU1bnJMSDVKU1VsSllqU3lPNmpOR29rUFZueGNiYlpxSyszMDlEUUlCb2JHeVdQeDROYXJjYmo4UWlmQkJaWmxpVEptVmhUK3RLTTMvKytteXpMZzhKVElpeGgrV1dMMiszZTh1aWpzejl1Qm1vT21uTFdUaFFGRFRaQmhaZTFJNWc4VXU4elFVMCtFOVJDU2tyS0dmWHRwQXo0VVZGUkpDY25rNWlZNEV2Y2pjRmdDQzZVYndvbStHdTdWTDVBZ24rcFBvSXFFdTY2Nis3amh3NGRlZ0VvRDArTHNJVGxGeTAvZnZycHArODkrK3l6RGEyWW9JNW1KbWlnd2lBMFlLQVd3WnFhdjhEZFlJZ09MS1BuTjBHYnMzZjhKSTBOdklHRTJ0cmFnTllXOExVNXZkVGhicmNidDl1TngrTkJVWnFDQ0VJSWZPQW1DU0hjZ0NSSmtweWEydkZ6cTdWMlFYUjA5Tnp3M0FoTFdINlpjdmp3NFdWOSsvWXI4NEZYTUtBMU4wSGRRUlVHb21sUmx0QmdnYi9BUFNySzRFdnRhRU44dkRlMTQzUURCbWNFYkFBZE9uVHdSVWh0TkRRMDBOam93T2wwNG5JNWc0RE5qY2ZqRVI2UFJ3b0dPSi9XSnZsTVVwY2tTU3FqTWViZmpZMk9OSzFXZTFkNGlvUWxMTDhzc2Rsc2J5UW50OTlGYUdwSGN4UFVSV2paVkFzVHRJbGpMYmpBUFpTT3FFT0hEbWZWeDlOYWpDMDZPcHIyN2RzSDBSc0ZNKzc2cXhMOHhKU2FVNW1rVHFEeHd3L3pseWlLVWhDZUptRUp5eTlIM0c3M1I0c1dMU3FnOVFob1FHTTdtUW5xQnpXdE5xSlpkWUdCbUJoVGdJNm9mZnYyUkVkSG4xVS9UenREdG4zNzlsaXQza1ZlUXJVMnYwbnF3ZVB4NFBFb0p6SkpFVUpJUHRYVU9XellzUEx2dnk5K3ZrT0gxQTZTUktmd2xBbExXSDdlSW9RbzNyRmp4OW8vL2VtaHVsWk1VQWN0QXdhZUU1dWdYazFOcDR2MHNYYjRPZGE4QmU3SnljbG5aWUtla2NibWw0NGRPOUt1blRjRkpGS3ZCMDBrK3Fpb0lHTEtDTFFhRFpJc0MxbmxYMGsraEcwM0VFaVFKTW5ac1dQYXpwcWE0OC9SY3ZuTWkwYXNwWHRZdjIzUHVibk85bjBYcE0vYjFxK2d6UHB6ZjY2d2Z0dUZhczFPd2ZvdE9IOGhjNlc1ZkxacE5RZXJUL2tLdW91Ly91L3lmdjM2bHpYVDFsb3pRZjJKdUw3cUFxOEpxdEg0dGJWUXY1cS9aS3BObTFqaTQrTnAxeTZKamgwNy9xUjdPaU5nMCt2MWRHaHY1cTFQQ25uOTZ6SStLU2xuMDNlVk5LaTlOcklrUEpSVTEzSE03c1JxZHdpN1MwRldxWVVzUzBLU1VCVGhYWXRVQ09FV0FwY2tTWTJ4c1hIdk5UUTBQUFZMQWFJbkpvOWtXOW01STF5cUxNem5tWlZiZnZKMXlqOWJ4U01MMTE2UWUxcncwTy9aOFRPUGExY1d3ak1yVzNsT08rRGVlZWUycmQwcjUvRmt3VUcwdjVDNTBseGVubk0vMjRwdEp6M20yTEhxRjlONzlOMFRwS2s1Z2pkSmtocURRYTNKQkpXRVNxVVdYbERUaWhQVmdYcnoxY3kwYlp0RWh3NGRRbGFjT3UvQUJ0QzJYWHNtL200TTgzOC9nZ2R1R0VTLzlrYjIxemlKaW9yQ0VCM0RwUjNha1o2VVFMdUVOa2hDd1lXTUxLdUVJb1FBU2NpeXYxQmUrQmtBR25OemM1ZTRYSzdYZmdIK0JRcTNmVWhaalRkb0VpcmVDYXc0YkJRWGwrSU1tcy8ybWlxS2kwdXd1ME1udWFJb3BBNlp6TWI1azF1OWxzTldSVWxaMVpuMTBXNmxwTFNpQmRlZHcxWkRTWEV4Tm9mN0RPN0p1MzVvY1VrcGRtZkxGN1Ntc295SzZwWXZoSzJxdk5WK0swNDdKY1hGVkZudDUzV2NGQVZTaDhERytTMS90NVhEMWwzZ2Rudi9EdG52Z0pJU3NMZWllaWw0N1lxUzR1Yjc3VHo1eEJ0TW1qVDJselZYRkNkbEpTWFlXaG5YNXVOa3Q5di8zYU5IaitCOHRSWW1LQzFUTzN4ckdLaEVNTWRhODJDQm56aXlLVit0UFczYnR2M0pjK0FzcXRBanVLNXZUNzc2U3NadWJ5REZrc0NudGRVWURCRzRYRzRrV2NhR2dzZmpRYTFSQzZGU1Myb1pISTFPWkZrU0VpS1FBaUs4S1NCU1llSFhja0ZCd1l1REJnMUtVS2xVMS8wY1FhMXczVE5NZStaZENnL2EyWDNYZFN3eHFCazI5WjlNSFpZRndLdlRiMlIxVFVjcVA5c01laDNxekp2WnRtUUdUOXc3aUdXN1BhUWw2Tml6cjV6WnI3N04yTDdwZ0lOWjQ0YVRYL2dOdHF6NzJMTnNScUN0UlZOL3c0b0RjYWpkeDZrNldFaks2TWRaTzIvOEtmdFlYYmlHQVlNK1FFYzFGZm84Q3RZL1Q0SVdWczRaeTZ6VjM5TTUxY3pCd2lMR1AvRUdENDNLT2VVOXJWdndJRk9lMmtSR1ZtZktEeFF6ZCswWERFbjM2aVhMWm85bnNmVUkrM2J1WXVyTC8ySDZzRXh3VnpOci9NMnNMRkpJMGR1cE52Um0zZXAvWWRGQnhlNDFEQjcxSjFJeXM3QlZIaVI3L05NOE5YSGdlUm1yV2VNZ3Z4QnNXYkJuV2RQdkQ0MkJiVVZRVWdGRGhnQ3hzSElseEFJN1ZzTDRHWkNlQ1FlS1lPNXlHSlhqUFM5L0FjelpCcnFEWU5WQ2pRbUtmQXROT29yV1UyRFBZVW1hN2hjelY1U2FnNHdjL0JzcURGMlI3UTA0S3Azayt2WTFINmVldC84alA4MzF6WWVIRHg5dUxWZXROUk5VQ2E0RjlhOEpxdEZvUmRNcVU1R0JPdENZR0JPeHNYRWtKaWFTbk55ZVRwM09rYnRkQ09Xc3R1UEhxL2w0OHdmMHYyVTgxOTMvWis2Nzd6NUdqLzR0MTE1N0xWZGNjUVdkTDBsRE5zUVJiMmxMYkd3YlNWS3BKSlZXSzB1eXJKSmtXUU5TQkpJVUpVbVNTWktrUktERHZuMTdoeXVLNTFOdndjTDUyWTRjcVJDSERoMDY2L052NnhFbDN0cnZiUEg3SzMrOFhzVDNHaVYrckhjTElSVFIwR2dYUWlpaXRyWW1jTXozRzU0UUhhNmRHbkxlL3JkbWlXNjN6UTM1N2ZrSHJ4R1gzelpYZUlRaVhJY0xSTHU0SzhRUG5wUDNhLzliczRTbVhUOXhxRUVSUWpqRUgzL1RVZnpwOWM5YTlLRnUveW9SMytWbVVYK0tlNnI5YXBXSWEzZUYySC9NNGYydHNVWWNyL1BlMnkzZFZPS1BMMjRYUWloaTc3OW5pazQzekJCQ0tHTHpjNU5FajVzZkVZMUNFVUs0eGROM1h5bis4T0kyMy9PNVR0enhqN1dCNnpjMk9rNytyQnYzaVQ1dEUwVmlZdWgyOWYzelQydWM5citsaUc2M3RmejkyM2NVMGUyVzBOODhSeFhSS1ZFUm54ejIvdjNqeDRwbzMwOFJMdC8rRDU5VFJHUTdSZXc5NnYyN29hSHAzQzllbXlHNi8rNnhYOVJjZWZmeHNhTGZmZDduMkhoa2grZ1VxUkt2ZkY3ZFlwemNidGZPOTk1Yit3RHdXMkE0TUJqb0MyUURYWUVPa2lRbCt0N2hLRm1XSTFRcWxVYXRWcXNpSWlKa2c4RWd4Y2JHU20zYnRpVXRyU09abWQyNDRvb3J1UGJhYXhrOStyZmNkOTk5L08xdmYrT1ZWMTdtNDQrM2N2eDQ5Vm5qVWZQdHJIbURUTVlvdHV3dEpySmJINGJGZXlndksvTkZTTjAwTnRSenlPckNraGlIeHQySVEzaUVKTW1TSkt1RTEveVdGQ0Y1a0x4cXF3VElraVJKR1JuZHZpNHJPN1F3S1NrcFZwS2s5RjlhSUdEd3lGdXg2TDNXdlU3ci9ZSlhGRzVpOGpPdmNLQ3NHc1ZSUmFXY2Qxclg2cDJYaXd6SVNjbVluZFZZbllEdTVPZWs1VjVOc2c1QVMvK0JlU3pjdVJ2RzVtQXIzY21NZWY5aTk4RUtGTGVObW1valZ1QmtYb3hkT3dwSUhYUXpYV045bmlPdEVaTzJTZEh2bmVkVlo1SlNVckJWZlE3QTFxMmIwZHB6bURYallRQktTK3hVNkFxQlBMTDc5bVBHNUQ5eGI4Vm41UFh0ejZoaGd6anBtbC9hcm13di8vR0NqRnZKZGloWHc1cjVzTlpycFdIZDR5MlA4UmZ5OUJ3S0dXYnYvM1ZCNDFCWmZSU2pNZmtYTlZkMjdmeWMvaU9uZXg5elFnNTlNNHlCZlUzajlPbDNTVzJUM25wMCt2MUhtZ1VLZ2lPZ0ovQ3J5YUpwQlhkL3NLQXBBbW93R0h4cmdyWWhJY0ZiQjVxYW1vckpaRHBuWTNxV3dPWmh4WHNiMkJPZnd4UFhHUGorbXlLY1Bsb2poNzJPVDQ3VzBTNDVtV2pGUVgyOTF6OGdxMVJJc3BvSUxjTGpjZU5VRUVpU2dpOXgxdzl3eWNudFA2NnFPdnBjWEZ6Y1RDRCtsd1JzT3FPaG1iT3BrRkdqL3NwajZ6OWdXSFlLOWwxTHNVejQ4UFFHUmc0YUd2bk1IZENLMzRPcVZERmgrRzBNVy9RaDh3ZG5vcTdjZ2lYenJ6ODVEQzBIOTgvbnJGS0FyTnhyR1RIWTkwMGFjU1BHaEZRQXNrYk1ZRi9PY1BJM0ZiQjAzbjBzM2ZKSDhwKzU5OFFOT0E4eUl1KzNsRFRyYU5kaEQ3RGlzUW5uZk95TXlUQnlSTlBmSThkQVF2QitZK3ZubVkzUjJPeldYOVpja2VYVzNIVEI0MVMxN1BWL3YvSGc5UHUvSjdTdzNkR0tYeTFBOVIyMDJMSHdyd25hTWdKcThBVUx2UHhxYmR0NmszQ1RrNVBQNlhpZUJiQUozdi93US81ZFoyYnA3M3Boa0FXZWhnWWNEZ2NPV3czcmRod2pPUzJkUkJ4WXJiVjR6Rk5pQUFBZ0FFbEVRVlNCVXF1b3lBaFI1eFNTVHExRzhiZ0JTWkVsQ1FGNEN4UzgvalloaEdRMng2K3ZxVGx1aUltSitldXA5WlFMS3dham5xckthdWlhY09xRHE4c29WYWZRdDJjS01yQit6YnU0MForM3ZoWHYyRXlaWXpiSk9pZmJDcmFUTS9ZUDRLNmt0TnBJLzd4TTFNQ085ZXVwVkU1OVQ5bTVBeW1aOHcrS3FxZDR0VGEzbFJxSEFaUGh4UEdtQWYydjVxRnR4V1RQR3V2VnhoUTdWVFhleHF4V0s3SEpHWXlla0VGdWtwdThKNHRPZmpQYVZCYXZmWS9tdm0ydDRhZDkxZlZHc0ZaNnZkeit5WithQjRaU2tGT2h0NDlBb3FycTlDWmUxNTQ1bEQrekFTZTAwRUIvcm5PbGQwNHY1bTNiQ3JkbTRhemN5YllpS3dOOCs2eFdxNk5CaW5ubHdVZiszejZhMGpvY1FFTUlxTFZNN2ZCcmE4SDhhcUsxeWdML0tsTnQyMXBJU2VsQTU4N25udW5ueklHdDRRaVBGM3lIVlJmQndMbjdBVkJGVzNpcWR3cUZoVjl5U05HaVBuS01iK3gxdUJ2c3RORkhZdGJwaURYRlVIL2ttS2h2OUVqQ0k0UktyWlprL01TVUlmV2traEJDTnBuYXZHV3oxVVZGUlVVOThuTUN0Z21UL3NENENWZXgyR1JnekNNdjh0REluaWMrT0dVQVUvSWVwVy91TmFRWkZNd3A4WUVIWHJGakJhT20vd3Q3VlFrbFZUSjkrNzVQNXJBSFdUUmoxRm4zeldMMk1IYlExYWlwcHRJNGxJTFIyYUJWbUQ2aE04TnorOUF6V1krYzFCNkxmT3A3TW1hTjROVVpIekUwcHdjWldaMnBMQzNsc1pXZk1qajl4QWJrZ0lsekdQclpiOG5zZVNVWktTWU9IaWhtOG9MM3VYZVFnYlZQak9leDlVZkpTSTFsWDJFUmp5eDgrNVJUTXlIcHpML2lGVHRnMUhTd1YwRkpGZlR0QzVuRFlKSFAzNTZVQzRPQXJDd3dKTUhHalJCcmh1WHpZVnllTjNoZ0xRZHREdVF2T28wUFhjK2g1TGtmWld1WmswSEoybC9FWEJseTd5eGVIblE5dVFNL1FPMTBZYlEwcWFQTEh2M2RpL2MvczJGWE0xQnpCSUdidHhhMGxXQ0JmNkZqWHdSVXRCWUJqWWt4QmRZdGFOOCtoZlQwVGtpU2RNN2ZVMG1JYzVObmMrVElFZmJ1M2N0MzMzM0hvVU5sSERsU3diRmp4emgrdklhNnVqcnE2NzFGOVBYMURUaGRUc250TGFDWFBCNlBKSVNRZlpzYTBBQmFJWVFPaUxUYjYrK0pqSXo4dzdtNjRjcktTcHhPRjhuSjdTNFlHRmFWbGVEV203SEVHczU3VzI2N2xmSWFCOGxKQ1NHNVBEV1ZaZGd3a0p4d1pocVAyMkdqdkxJYXN5VVp2ZmIwc29Qc05aVlVXZDFZa3BMUUJuMDZIYllxeXF0c1dKSlNUdnRhRjFJVU41U1ZnZEVNcGpNWXFtMUxwaksvTkkrVmMwYi9ndWFLbS9MU2NreEI0M3I4K1BFWFltUGp0alF6UFJzQXUrOWZyOVltU1U3Sm0yUWZBRFpmWllFL1QwMDBBWnFCNkdodi9XZGNYQnlKaVJiYXQwK21VNmRPZE92VzdaU0xzcHl0cUdiUGZ2VGNtR2dHQTVJazBkam9MWTUzdWZ5RjhRcUs0dkdYV1BsRHNUNVFGVTIvQmR1NlhzME5nSysrK21yUHlKRWpVYXZWdmM5RlArdnI2L0Y0Rkl3bmNwcWNCOUViVFJnaXRSZWtMVmtUUVV4MEZNMi9nYm9vSThhb003ZnFaYldXbUpnWU5LclQvNnBxZEZIRXhFU2phb1pkYXEyZU5pYlRHVjNyUW9va1E0d0pkR2M0VkNsWnZXazhYRWJYSGwxUi9XTG1pa3gwMExqVzF0YStQR2pRdFp0Ly9QRkhWeXZBNWszQzlmblZKRWx5TlRNL0E2RG1Oei85Q3h6N0F3VnQyclR4clZuUU5tQitubXUvMmprSUhyUXVxYW1wT0J3T25FNHZyWkhiN1FwUUduazhpZy9rdkdEV0JHcENlSk1sRmNWWFY0b1F3dVYzdXExYjk3NzArT1B6bGp6eXlNUHFpSWlJZTdob3BZYmxDNWRSM1lxQ2JjbnN5NmdCUFFuTC8walVzWXdkTitJWE8xZnE2dXBlZStDQkJ6Wi84Y1VYemZQVW1rRE5Hd0gxYTJvZWZNd2QvZ2hvOHdSY2J3VFVuNnNXdXNKVVdscEhVbE5UeisrUW5Pc0xkdW5TeGNmWjVneWtmL2dMNVAyYW0yOFRRZ2lmMWtaQWxWTVU0V2NDa2Z3K3R6bHo1dFRFeDV1WDNIMzMzWEpFUk1UZEYrZmJZK0xXU1pQRElCS1djenBYNnVycVh2L3JYMmNWdlA3NnNvWWdUYTBoZVBPREdrR1ZCYklzdFJZQkRmalZ2SVNSaHFBYTBJUkFXa2VYTGwzTy83Zm1uS3Z6a2tTWExsMW9iR3owOGJXNS9GeHRBYzJ0S1pGT0JJR2JRQWloK0loQVFreFVTWko0NElFcHg3UmE3Wkk3N3JpRGl4ZmN3aEtXY3lkMWRYV3ZQL2JZWS9uUFB2dHNQYUdCZ29BL3pRZHFJZmxxWGhOVWJoRUI5Uy9FMHB3dzBwdXIxcGJVMUE1MDZkTGx2QVFMemp1d0FVUkdSdEs1YytjZ1dpT3YxdGJrYS9PYXBENnoxQTl1d3FlbCtTT2x3ZUFtU1JMU1BmZmNlN1N4c1hIeDNYZmZyZWgwdW52Q1V6TXNZVGxyVUh2dHIzK2RWWEFTVUd1UXBOQlZwb0tYemd1T2dEWnBhazBKdURFeHhvQmZ6WityMXJselp5SWpJeS9JL1oyejRFRnI0S2JUNlFMZzV2SDR3UzNBMWViWDJ2eWJEOGJGaVhSQkFiQmh3MGFYSkVsNyt2VEpkV3MwbWpNT0tQd3ZnZ2RoQ2N2UFNXcHJhMStlUEhseXdlTEZMOXBQcEtuUlNtVkJFNmpKd3IvQWNXZ0VOS3JGZWdWK245cWxsMTZLMld5K1lQZDRGakYzRDU4VzdtWE82bnordUxLQVY3NzhJY0JEMVZoZncvS1BQbVhHdnpmeGwzZTNVNnhFY2NrbGw5Q2hRd29KNWpnYUZJbkQ5WTNVQ0sxdmRYbDk4T3J5UXFQUm9GS3BoVCtEMlI5MW9ZbkRyUkZ3UFBiWVk3VTMzenpxQmJ2ZC92U0ZuaFFIOSt5azJuR3VydVprMzY3ZDJFNDc0NmFja1RtLzRjQlpFSDlaSzRvcE9nUDJoMjJ2UHNLOVQ2NzUyYitrSTNPZ3FKWG5zVzhYWi9CY1QwZmN6THRyTkZ0SzdEL3B1WjVLS2t1TEtLazhTN0k3OXdHR1pOOU0yVWtPT1g3OCtBdlhYRE1vUDhpbjFrSlRveVVOVVhCaHU0K0dLTlNuRmhtcDl5WGdlcXNLNHVQTldDeHQ2ZEFoaFVzdXVlUzhwWFdjTzJCVDZsaXpxNXd1cVIyNElhTWRtN2ZrTTJ0ckNRQS9GSmZ3ZGIzTTFkMDdreDByZU9DRlZSdzJ0Q1U5UFoxb25ZYjlEUkwxSHNFUlJZUFJhTVJnYUVaUzZRTTN0ZG9QYmw1eXltWUVsWTJBWThPR0RmVlJVWWFYYkRiYjQ3NkJ1U0F5ZSt6VkZKU2NLMTdNU2lZT3ZZa2krK2tEWVdsSk1jNnplR0UvVy9VNDB4ZXNPKzNqYlRWSHFhaXkvZXlCYmZ4VVNHaGxGazhjeWhrODE5TVlxUjFMV1ZHUlJ2OVUvVTk2cnFlU3RmUC93THpWaFdmOW9Td3BMajFSdVp6ajZOR2p6OFhHeG0wSmluNmVEcWg1SkVueStJTUZMYzNQVUxKSWYxV0JuNElvUFQzOUp6SGhYamdmbTJ6aThmSFhCdjVzWXovS2ZidC9nUDZwZE83ZWs4ZTcrL2Vrc212dmZyWitYODFEMloxd3VRWVNrOUNPOXpldXA2RGNnY2trK2N6U1FOb0hQcjlhd05mbWR1TXJKY1VUN0hQenBZUUFFQjF0WEhiOGVMWGRaREpONFR6V2xwYnVYTWZpTlo5U1dPSEUvc3lqN0RiTDVJNjRtMkU1M2pMcGZWdFhzMlQ1KzFqbE5veTVkeXFEc3J3NU9vcTlna1hQekdkSDBXRmlrenN5N3Q1cFpLY1kyWjIvakZWYnZxREVWc09pT1gvRm9wVVpPdTRQNUhVK2RRTHQ3dnlsekYrMW1ZU01xNWcrYlR3bU5iaXRaU3hlOURLN2k3NUgwY2N4ZXNJVUJtZW5nTE9jcCtZK3o4NGR1emhncldUbXpPL1FKZmRpNXIwakFpOUQvc3JGck5yNEJSamFNbXJDSkFiMTlQWGRXYzJTdVkrdzdlQXhoazM0STZQNitrcGYzRlpXTEp6UHBwM2ZrdEQ1Y3FaT214UW82TjYzYlRXTGxyNlBEUzBaQTI1aTJxMkRPUitwdVB1Mnd2Sk4zaG5jTytUWndLb3RVR0tEUlhQQW9vV2g0eURQMS9YdDYyRFpHbkFiWU9JMHlQRlh1VHZnbVFVd1pEQXNYZ0IyQTB5ZkJlbSs0WGgxOFFzTUgvdEMwNzJjNHJuYXF3NndZUDRpOXBUVWtqbm90MHdkTnlSUWNyVmozV0plWGYxZm5Gb2plY052NDY2aHZWR3E5akhuLzdkMzd1RlJsSGY3Lzh6c0ladk5ack1zSVFraGlURmdpQ0hFaUJnUkl5SWlJbEpFUktTSWlKUWlXcXJXb3JWS0tTOHZQenpVSXFVVXJWSThJWjRRRVJFcElxVVVFUkFSTVVhTU1jUVFZZ2doaEdXejJlek96dlA3WS9Zd3V6bUFlS0srUHRjMTE1NW5abWVldWVmK251N3Z3aGZZdGJXQ3VySy9NNnZtbjZRVlhzYU1jWU5Qd05KY0xGLzRDQnRMdjJMSTJJdWprYXloZ29VTEYxTldmYXdoUGpuOXFTY2VmV0EzMGJXZkxUSG1aN3VncG10d0hBVnFrVUJCQW9tSjBhQ21WUlgwK3Zaa2lMNXpZSXNabjlZM2tKdCtWdHNQL01lcE9LSXlLVFVKZ0x5OFBCUkZvVnRLTitKYldraE9SdWRyQ3kxaDhBcURHMEFnMENtNGlTNWRuS3NPSGFwcjd0YXQyMjNmbFNxSVBTT1A0Y050YkgveEVZcEtMbU5JdHBtMERNMVBWNzVoRVNQdWZJMEZpLzZYWkY4bE04WmN4ZEp0NzFPY1ltYnBmVGV5em5jRjgyYU9vNzV5RHcwTmJzaXlrOTZySDhNdEZ0WXNlWkhpSVZlUWI0T3M1Sk5Jb0ZXcVdQWnlPUS9lL2t0V3pMK0R5WE1zcko0M0hsOTlKWTJXYkNiZk5ncGYvVzV1RzMwWlMzZCt5c0FVTzRPR1hvSHMyazFsYlIrR0Q3OEMyUmFwWFh4eDlnM00yMlpud1p4YnNYcHFLTjFYSGdhMkxTOC94OGdsRHpFaGV4c1R4dDVNY2ZXN1pKa1ZIcHh5Qlp2TlZ6RDd6anNvWGZrb0l5WTNzdXZsMlZDM2xSSGovNGNGei82ZGJMdVBiWHMwd2N2T2dHM2Jxc2Zac1BkUXpNMnpLN2ZkTjRPVVRtWm5TallNSHdwVFI4UFlleUV0K04zMFhqRGNBbXVXUVBFUWdzYzFhRjR2ZzZsUHdNSkhnRm9ZUHd3MjdZRXNTeERZNXNHNjdUQjFNdEFJalM3QUFkREErdldWM0RldlVIZmxkSEpjUGRXTUhYd0YrVk1mNHZaUmFTeWIreHRtZWl3c21qNll4dDByR0QzekZaWXZld2lIMnNEdWFzMk1sYTBwREIxK0JkN3lEY2haRnpCOGVCSFc1Qk0zQ1Y0NTd4Y3MzSnZCb3Z0K3licEY5MUtobzJ0enB2Nk0rbk5uZlhIOTliYm5SNDY4SmxUN0dadW5GbHBhT3dLMVVGVkJaK2FuQm1wZFNVdExKVE16azE2OWVwS1hsL2VETWZsdkJHelYrei9oc1U4Q1BEbmo3Rmg3bFdmV2JDVHU3QUZjMlNNdS9HNmZQbjFJVDA4bm9ibVoxRlE2Q2lJRXZ5MEVoS09sSFlJYmFJQ1ltcHEyZnYvKy9hNnNyTXhiWkZrKy85cytVSTYwWHBTazlTTE5aaVMvL3lCSzhpS0hidW5DdnpCeDFxdU1LTWtEK2pOMTZGT3NXTHVMNGlrRGFXeG93SnFWUWs1dUFVV0ZSYm9MTTUrVWJEdDJzNFYrSlNYMFA5a0tHdG5LekxsektNNDJVamozdDZTTWVnN1h2UEhZZXcxaTVxUThkdTdaalZ0TklUL2R6YzdkdFF3Y2tVWC9raEthOXFTVGJNNmxwS1JFQjVMVkxGeThsUVY3dm1SWWxoa29SdmNwQlNOdlpOcW9JVUF4QTJmOW1iMjFrR1haeXNKMUNwc3I3eVhiRFAzdSt3TlA5UG9acFo3WjVMc2JhRktzcEdSazBTODNuWDc5VC94M0xBNG5hV2x0YmlNWVQwRHprck9nSkF0c3hyYUFsNUlOZGpQMEt5SHF1QzU2Qk81NkFnWUg5MnYwMDdCNks5dytOUGdGRDl5N0NJYWt4MnlzcVpKS1Z3YloraUpiMmRiaGNTMWIreXhsR2Rld2N2b29aR0R1dmJlU2Y4K0xMSm8rR0c5REk2ckZSbHBHTmdWWi9RZ2ZJbXN5SlNVbDdGdnRwS2xYVWZSNTZ0aGh3UElWRzVtNTZpQURDNndVejcySEphdi9FUEduSFdyOG9MWFYvY3JJa1RmdXAyM3RwNjVFaWxhSmprSE5ZREFJazhtSTJXelNnVnBzVVh1b1hDb3pYQzcxUTQ1VEJyWWpYMVZ4eXlzZk1mZW0wZVFtNkdlaFlNT21qYng2UEpubE54WkczYTBsU1NJN081dkU0eTR5TTlDWm9tcVVPUnBhajhiZ29EUG1CaElhZVJQaXpEUFAzUGJoaDd1Yit2YnRPOVZnTUF6L3ZnNWlkWFV0Wll0L3g2NW5RLy9Xd3RDaDJ2UHBjLy9PZmJQK2wzNjU5MlBKS0dMUnNxY1lrdmNOb2tOeUN1bEJlbUpKeThEYVZFOGowTFQxYVlaT2ZwVGhZNjRteFc2bXdhM2c5WjBneXVDdXBVWk5JeWVyL1JLZVpJY3pQRTNNWmdWRkFXOWREWTNlR3U0Y2QwM2tlMFhub0hyQjJHc2t6ODdhemF4SlYxQmU0Mlg0MVB0NWZNN2tUblhYYkk0VTB0Sml2aUhidjVNOHBPcGFXRG9MVnVtSWNULzloaHlRbTk2dVl4bEYvanJiK1JKWDZYYkdqUDQwL0Y1eDNrV29RUHJReVR3NHBvS3BJeStrMmlVeitkNUhtVC85VktkcUUzWDFGaktTTmIrZk1TME5aM0EvL1g3L3hvc24zcjdteGhtM0h0S1puM3BRQ3hlMVM3UlI2b2dCTlJNbVUzc05XRUt5M20xQjdmdklWZnZXZ2UzNGtZUDhZdmxXWm95L21rdlNvcDJwNzc3M0gvN3l1Y3pUTjErTXZaM0NPWVBSZ0NPckp6M1BGS2hxSUlhdGhZQXM1RzhMbTZRZGdWc0lEVVhJTkQzMzNINmZyRnIxNnArdXV1cXF3MmF6K2NadlBkb2l5Nmd4WXZsWldSa1VUZjhiOTQ1cWF3VTdjb3Bac3VJTlFHSDVySjh6YThGeXRqMXhaeVIySTZ0dHRQYzdEOTdVVTFPclVKUmp4RnRYZzhlWlFUTHd4TExIR0RQcktSNmMzQS93VWJubXo3RTczbWEvc2FXVElkZFJXZTJqVjliSjFTZWEwekp3Mm5KNWV1MWJZZk5QUDUxR3paakxxQmx6Y2RYdFpuRGg1V3llT3BsaG5aUUVWdTdad3RwdEIySldrMHJ4aUNIWXY0bHpUbTdiMHlBckhjWXNodkVGWHpPVTVzZ214MUpIVFFQMFN1R0V4elVyL1F4U0JxU3lmdVc4ZHJaaFk4cnNoVXladlpENjBsVVVEZnc5VTZZT3A1ZFJQNzlPTmpqbElEM0ZTMDJEQjlLc0tIVjFOS3JRNHZHODlOalNmN3g5eHgxL2NIVUNhbDZkV2FxUGZyWUJ0VWhoZTd4T3FjT3U2MVdRR2l4c3o2RlBuejZZVEtZZlBLajA5WUhOZjV3Wi8zZ1RTMFp2R2cvdTU3bURZSWgzTUtFb2kvM2xlN2oxcmMrNTRkTCtyUDlBaSt5Y2RjYVpERWhQUlBVMHNlS2phajZwYnVLSVQyVnZOeWYydERQSVVLTjliRHBRQ3owWElhdlQ3OWR5MmJSRVh3SVJiQXN6UWlHRUVHUEdYSHN3THk5dndmdnY3NnkzMld4MzhDMG1JdWZuOTJMNW9nVllSaGJRcTNBZytWbE9wdDc1SzRiZjlVdHl6UDlEcmxObTU2YjE1SXk2aDZINWRsWSsvaUJrRHlRM3pjeXVmVlgwNm4rVDNuQWlQMGZoOFFWUFVOOC9nL3dCUThnNWtaOU45Ykpneml4U2JoL0ZpdmwvWnRqRTMyRURzckt6ZVhIdDgrd3FraWxiOXdUcnloWDBLbGU1dVgzWXZlUWxYaHlRakNNdGgrRURDOENZeFowelNyaHJ5cTBzbVBNcnJONGE5alhhbURxdTQxNEVjbG9KZHc3MU1YbjZIR1pOSHdXTk5hemRYc1hjMmJmaks5L01vdlhWRENrcHdsTzlsUVp6RHRuT3p2L084Q216R1g0S3VwRzd0MEtqRjF3KzJMNEpHcXd3Y0hCRUZUZy9CeDVmQVBYOUlYOEE1Q1REN1ROaDZqU3d6ZGVDQ2x2V3crRGJvZDhKQ1hRYXc0YW1zRzE3T1lOSFJXdUh0WGRjODBkT0ltZnVwZHkxSUk4SlEvS3BMOTlEcVR1TmU2YU1vR3JyYWxhVit4amNMNWZhM2J1UXM3SkoxczNPdkY1bjgrQ0tmN0FxdzAxeVJoNkQrblhtTXJZeGNlSnc1cysrbjZ6N2ZzNmFSWThveHhYbHlVdHplLy9uVU5zZUJYcEE4MHFTMUNxRWFDZjVWaDhvTUlhWW1vaVBENW1mTmgxVDAwQXQxS3VnVDU4K1dDeW5oM3ppMTAvUVZmMGM5UmxJVFREaDlTdDQvUXF0c3BuaURDZkhtMXV3Mm15WVJDRDhXVklYSnpsSkZrU3JteTM3RDJOTDZzTFpUaXQrSVpHWG00dlRLRkFVQlZXTmxGdXBxZ2lib2pxeVJvaTlDZEhoM2dsSmtnUWdHaG9hMUFjZWVLRHN0dHR1cmJKYXJUMGxTWExDTjAvUUxSNXlGVXJkUGo2dHFDSytSeDl5MDVQbzJuTUFWeFk1V2ZQcXEyeCt2d3hyWmwrR1hud2VpWEV5bm9aS05xei9KeHMzN3lTclpESnpmajJhT0RsQ0VTNFpjU1VONVh2NGZIODFxYjM2azluMUJCTkRUbVhVc0RONC9wbVZPTS85T1EvZE01NDRHZkl2dUJSUnRZTlgzL2dYQ2YzR01YMTBFVDM3RkpPVnJHVjZKK1djeDRBc2lkMGZmVXFkeDh6RjUybU8zWUpMUjVOcnFlTzFWMS9uNDJvWEZ3KzlndXhVN2RnNE0zcFRrSk1hM3RjK3hSZVRIQzlUTW1vY2xyb1BXYlZxSFo4ZU9FYS9TNFp5VHE4ZUdDU0ZEN2Y5aXczci8wblpWeEovV1BBbzUvVkkvRTRtN3RzdncwY1YwUGRDY0IrRTZobzRkMUFFMkM0WkFRM2w4UGwrU08wRm1WMGg2MXdZMEIxV3ZRbzdQb0swUGpENGZMQVlJcmY1QVFNaHJwM3RaWGZ4TStmcFhVd2JlMG5VKyswZVYxTVMxNDY3aXMvZlhjL2F0elpSM3hySGtLSERPQ1BWam95WDdadmY1cTMxNy9CbFN6Y2Uvc3NEbkprVU9lZVo1NVp3VnR3eFBpd3J4MjEwY241K2RxZkg0ZXlMaG1FLzlBRXZyWHUzTW1mdzFZK3RYL25ZKzgzSGozZWswS0ZQNS9BRkFTMHErVFkyK2hscXZoSWZyNW1maVluMm9BU1JKaFNwQlFwNlVWQlFnTTFtNDNRWjM1b2UyNm1PWThlT1VWcGFTa1hGRnh3NGNJQzZ1anFPSEdtSTBYRnJDUmJXdCtMeitTUi9VTXROVlZWSlZkV1FucHNCTUtEcHVabUVFSEZvYzlSU1Z2WkpVVzV1N2hTRHdYRHBENkhIOXRQNE1Rd1BkNDYra2xFTDMySkl0dlcwMmpORlVmNjlmZnYyTlIwME0rNmdUNEh3QzBGQWx1V0FQdm0yL1R5MVdGMjFVRXFIRnYwc0tDZ2dLU25wdERvbXhoOTZCNUtTa3VqVHA0L085TlNibGxGRVRVL2ZKTkI2SjJpbWFkakpJVUordDZCWnFnSnFmbjZmM2M4Ly8zenRtREhYVkFFM244NlhUL211VGV5dGFtem5FenZEeGc3anAwS3dIMnBZV2JqNjM5LzdWbjBORmF6WnZLZmR6M0tMaDVMak5ENy8rT09QYjdyNzdudU9FNTNPRVd0KzZ0dmsrU1ZKRGtnU3FyNU1xcjJLZ2xDZVdxejVxUmVMUE4xQTdiUUFOZ0NIdzBHZlB2azZVSk4wajFJWTRDUkpDaTFDa2lSSjg3a3BRVUJUVVZVaDlQbHRJWjhiSUc2NDRZWmE0SytmZmJhdnltcE5tQTUwUHgwdm40eThJdXdaN1VRelpTTzJuOURsLzl3dzJqTVlWR0tqSGJ2cUs3Zkh0VHd4TVRzazQ2MVA1OUNib08zMS9nd0FBYTJ5UjFiYkwyalhmR29oOHpNVS9kU1lXZ2pVOHIvVnpsSS9PbUFENk5LbFN6RDNKUUptR29pRm1Kc1VmaDNMM0FCSlZTVVZWQ2tFYW5ybUJxaEI5aVo2OTg1YnZXblRwcXJ1M2ROdU1oZ01RMDYzRTJLMU9iSCtoR0EvamREOXpHd2hKU2JSVDFHVXpUdDI3SGlqcE9UaUdqcnZ6cTZ2SkdpdjhVcW9xWEdiaW9KSThtMUhnWUo4dW5UcGN0b2V0KzlNM2VOVVJueDhQSGE3UGF6ZkZnb2toTEk2T2dnYWRKWXdFN1p0UXdBSGlHZWVlZWF3MVdyZDBhOWZQOCtwS0lUOE5INGFQOVE0ZHV6WTB2dnV1Ly8xVzI2NTVZak85RHhSeldkVU1idE9laWdtbmNPaTY5SWVLejJrOTZuMU9hMUJEVTZENEVFSEo0OVBQaW5qaXkrK29LYm1BSFYxaHpoeTVBaE5UVTI0WEM2YW01dnhlRHp0QkJUOEtFb2dGRkNJRFNvWTBZSUtab0pCQlNEdXdJSHFpM3YwNkRGWmtxUnpmN3BzZmhxbjYxQlZkYzlubjMyMktqKy9UM21RcGNYNjAvUW1hSlRwaVNiakhXSnFJdExRMkVUSFBqVzkrUm5OMUU1SG45cTN4dGlhWEM0T3VmM1lMR1prUFdjS0tOUTJIc01qRE5qTTBSbTZyUzB0SEd4cUppNHVEcFBjTWRHeVdDdzRISTV3VDlMbzZnVEN2cmlZNUdhcEkvSVdTZ0hSbTZhaDE0OCsrdWpCZ29LQ25UazVPWDZqMGZpOWc1dXJ1cFIzUHE3bnJLeVVrLytSdDU1VmEzYlE4K3d6djNIemtOTnBWTzNkeXZwM3RsRFhZaUduUjlmdmZ3ZE84Ymh1WGZzaWNsb0I5cmp2WnJmY2J2ZnpUejY1OU9XUkkwY2VwUDE2VDMwcWgxZnF1T2VucnU3VEhHWnFRdkZodGptdzJ4SklUSXcwWHdsSkQ0VlVPZ29LQ2s2WUpyVjN5em9DWFh1U2FKWkFiZVRGSjU5aDYvdTdxUGZaT0N2eis5TmorL28rTnRYTnIvK3lrdDErTTZseEFXcjk4VHc2NlNvdVRJbW41dk9QdWU3RkhUZ2Rkanl1NDNUdjFaZS9YMWRNb2d4UHJWckZrckxqWkRyaU9IRFV5eTFqUmpDMVQ4Y1hjMkppSW4zNzlrV1daV1RaRUh5TUxKS2tmNHdFRkNSSnd1LzNpMkNGZ2hCQ29LcHFWQ0FocVBHbUNrMDZKSERkZGVOcWdML1YxQnpZbTU2ZWZwTWtTZDlxWjVUMVMyZFJrVDZlR1NQYXByelg3OTNJd2cxR1JwUVVuUHdLUFZYTWYzQXBnOGNNd2ZsZkJGeDcxaXhrVldNQmN5Y1BiZk5aM2JZbkdEVGxPYVpQL2hseWl1YzcyNGZhN1M4emQ3UEM0L2RPK0phT3E4cUtCWDlrVk1GNE1yN2xrTFdxcWg5OS92bm5xL0x5enY1TXg5SmlPN04zeE5JVVNaSUNRcWlxRUFqWmFGSU5CZ09SRXFsSW5scmRvYTh3ZGMwaU1URXhxcUE5VWlhbFZSUWtKQ1IwZmwrbzNzemtXUyt3WmN1SWtJY1FtODNHM2cxUHNiYkN3b2lCZWFjeHNNa21iaGs3bW9KTUxScXlhdDBiek4zNE1XOU5LTWJxVE9mVjM5NUV1dFdFNm5NemFjRnp2RlNleDlROE94ZGVjQkUzakU3RkxFUE52ZzhZdG5JcjEvUVpRMmYzNVlTRUJBb0xDOUZPaUl6QjBCN0lTVUZna3dtS1U2SkZUUDNCb0VLNElUTmhwTk1ZbXlwSlVpaW9vQUtCakl6TXpVODl0ZXlUY2VQR2piVmFyZFBhdlhzMjFWUHZVc25LU29zNmVDcmdkVFhRNEpiSlNvOWNGcXFpVUYzMkFhVytJU2lLZ2l3YmtlWHd4Q1Y3K0F6V2p6UzJ1VmpjamZYNHpFN3Nzb2M2dDB4R2lqMzhtV0x2eDg3dHk5dFVBQ2xLZENtT2JEUkd2cVA2cUttdXdaS2NUckxORXJzNWtGWHFxcXN3T3RKSnRuLzcyZU9xcWxCWDlRbTdhK3p0SEFlRm5kdmVvOS9ZVzdobjVuaGs0OGxOUzhYcm9ycTJrYlNNbUQ2bEtxaUttK3JhSnRLek04SzFxcXFxNHE2dFlNdHViM0FmdERsMHd1UHFkZEhnaGpTbm1acmFKdEl6MHNMZlVSU1ZSUnMvYlZPMHJ5cEtWQ1JULzM4Qm11cXFjY3YyTm4xZVEyb29CL2VYUC8yM2Y2elk4c0QvbStzbUVpRFFsMGZwemREMlRFOVZraVJWVlRYclJLZ2l1cG14Mll3c3k4UlpySmhraUUrdzRYQTR0TVZ1dzJLT0l5MDlnOXpjczRJVkJXWnREdFUya3A2UlJrTk5OYmEwTEt5NlUvWHN3Z2NZTXZsL0l0RjcyY0hJQ1JPeE5MN0wzcW9PN3RGTjlkUzVGTEt5MHFPdUo4WHJwcWEySGtkS09vN1krUm84U28yMTFmZ3N6cWdlcktyUFEzVnR3NmxFUmVNb3lJeHc3aXhuRXQ1RGZnQ2NYU013SlpzVHlMQWJhZkZwRjF0ZWo0aUNab3JUanF6NGFUMlJwazNRTEkyQW15RUc1Q0tzTGNMZ3BCREFTWklraWRERkhnUTRnUzVpMmc1N1UyNitlVXJnNXB1blBGbGUvdGtIT1RrNUV3d0d3eVdoZy9uMGZUOW56dXBLOHROa0t0enByRjczRXZuSlpsWS9jaU96Vmg3QWJqUWdlNm94RjkzQ3VtVXpNVmR2WWZpVS82Vm0zMjZhYkhkVHNjcEo5dUFiV1RwckV1Qmw5cVJSYk56N0dlN0NXeWxkSG14Vjd0NURidGJQS0NqSlkvdmVSZ2IwUzJQZjdyM01XLzB4WTRvY3JIeDRCbyt2MmNHMktpZlZOVzhUSnZjMVd4ZysvdjZnNHFhUDBwMjdXYlQ5S0pQNjJhZ3YyOENZOGIvQ25KRlBVMFVaUTJZK3hpUFROTmFrbEw2SVkveHpUTWs5eHRZYWdhZFJZY1d1SGZUN05xUDQzbkltamZvVlpkV2xWTG0zTVh6M0MxaHlMMmZ0a252QVZjcjRzYitodkx5VUduVVh3N2MvUTlIb08zaGt4c2dUc3I4eE0vNUdmbUVPZTB0cmVlVEZOeGszSUl1bTdVdkptZkFZUlNsV0xGYUZmZTUwTm14OGhWNzJKdTRaZnoxYjkxVlFWYWN5ZlBoNzREeUhsMTkrQkNkMGVGd25EK2hPVmZJQXFuZnZKRy9BaGJncVA2Sm8ydDlaZk5zUXlqY3M1YmFIbjJmdjl1MHMyZFBDMkhEMWs0dTd4djJNWGZVYXRGWHYyODNRV2ErdzdNNFJxSzVLcG8yOWp0MGVKdzVmUFJUOG5MWEw3ZzFXVE5SeGNXci8vNXd4ck9qTkY1YXZxK3FBcGVuTlVGOFEwSHg2bGhhNmFVdGF1RTNFbVF5aVZWRUo5ZjAwRytHcjJvT29CaFB5VjRlUVZMQW1KdEcxcTVORG4veUgxeXM5WkdlazhQd3p5N25sMFpjNTd6d0x5Kys5aHZtYm1yRzdQOFdZY1I0MjVTdnFrNjlrOTh0emdwZEhQUysrWE1ic2UwODJGdWZsaWFjeHZEZ0FBQ0FBU1VSQlZIdHY0cEYxVmVTbW1LbDBKYk5xL1N2a09ZMXNmZm8rSmovOE5nVzU2VlNYbFRMd3RyK3crTTdnZkdqYVJYYmVyWXdkbmNxR1hVZFFYSTNNVy9NUithV1BNUHpoTFJRNUJFMU50ZWc2UnAzQzRqdk9yUXYvd1pKUERyZjVySFovS1JmT2Y0VUQzdGpmQlhoNjVVb212L254MTlxV3FnYjQrT085dlBiYWF5eGE5QmZ1dSsvMy9QS1h2K1M2NjhZeWJOZ3dMcnBvSUVWRlJlVGw5U1k3TzV2dTNidVRuSndzSlNVbFNRa0pWaWt1TGs0Mm1Vd0dnOEZnbEdYWkpNdHluQ1JKVmttU0VpVko2aUpKVWdxUUFlUUFad05GdlhyMUd0RFllT1QvQ2FIV05IKzZTblR0ZnFIWTM2d0lJVlR4dDE5ZEtuNTIvN05DQ0ZXODlxY2JSTGNMSm92akFWVUlmNE80K3V5dTRxa2REVUlJVlFpaGlpZC9lNFc0NWJFdDRkZjY1ZE5YWm9zK044eVB2SGQ4dHppcng2WGlzRkRFemVjbGlYKzgzeWhlZStBRzhhdkhOa1crYzNpTDZOSGpNbkc0bmZVSm9ZcDNIdnUxT1BmcWU3VDlFVzV4OC9rOXhFTnZsZ29oVkJFNFZpck95enhiZkhCTSs2Ny80eFhDWU9naW5ucTNXdnU5M3lOYS9PMnZWd2hWdlAvOGJKR2FtaHF6ZEJkUC9ydTJ3OStFbHJmLytndHgxZStXdGZ2WkczKzZTVno3eHhVblhJY1FxaENCT25GcGp5N2krUS9xaFJDcStPU1YyYUxiaFZORnExREYwZmVlRUliNHM4U093MTRoaENyKy9NdUx4RTBQclEzLzl2UFg1b3MrMTg5dWY3M3RITmViTGtnVnIzenFFOC84N2lweDQ1OVdpeVB2TGhWOXJwdXIrNTFQWE44blFienllZnY3K3RXSEswWHYzaVhpNCtEK1BIWDNWZUxLM3k0VEFhRUtJVHppanN2T0VuOTVwMXFvYXFDbXJ1NmpCVEw4SEJnTGpBYXVBaTRIQmdFWEFFWEJ1WmtEWkVpU2xCS2N1NG1TSkZsbFdZNlRaZGxrTUJpTUpwUEpZSlFsR2NrZ0pka1RKQWtrWjJwM3NyT3pTWFBFWWJLbmN0RkZBN2w4OFBtWUpDaTVlaEwzM2ZkN0hucm9JVjU3N1RVKy9uZ3ZycktWZE90OUxjMUM1Ym5mWGMydkg5dk1sMjg4VE9aVmR5SUM1Wng3NWlVY0NsNmZnZjNyNk5MOU1nNjNjKzIrL2RkYnVPcTN5NkxlKytMTmg4bTg4QWFPK3JYWHIvKy82L25aL1NzUVF1WDRzU1lDb2ZVZTNVN1BydWZ5UmZCNzR1aE96akNaK01NTHU0THI4dExTcXZEcEszT0pQL01LRHJXcUNPSDZCbmxzcXArL3Zmb1dTcThMdUNVLzJxQnNidnlLVzEvK2dQdHZ1SWFNR0lmcWV6di93L01OZGw2WTh2WDBtaVJKb3FDZ0FLUFJpTkZvd0dBd2hobWNMT3NmbzN4eFliK2JKQ2toOWlaVVZRMHJodWpZVzZpL1FpREUzaW9xS2hTbnMrdXF0OTVhOTM3WFE5dEhPd2RjZWxOMlVDbDI2SkRMbVAvRWJtQWlBTVdEQm1HVEFkbko0SUU1N05wZHl1VGlRYWQwYUdXYkhSc3lkb2NkdTgyT3pXYkQ3VGs1bWU3cXJjOHlmVWs1NjdhOG9lMlBxNHpOZXp6SW01N2ozaTBhOC9RcDFaUld1T25YVDZQdzVweEJqQjhZbE9Bd1d1ak1FTzAvWVE1MUUrYjhzTTY2MnIzczllUXpPRmk5bmo5a0tNYkp2NlphaFdUQW5qK1Evc21hQVRwazBNVXNXN3NMR0hHS0c3TmlzeG5CYnNOaGMyS3plL0NlNUxud05aUXlidno5ekgveFh4UUU5MmZUeGkzNGNyTzU3OTdQQUNoM3F4eDVmL3VLRlYrMWJwazQ4Y2FqSjJCcG9ScFBueVJKb1RTT2dDN3FLZlQ1YVQ3Rkw0eHg4WmpqNGpFYlBLTFZEOWF1OGJnUCtlbmFvenQyZXhKMmV5S1o5dDBrZFUyaFI0OE1Fa1FqTHk1ZFRIV0RCMVZ4MDlSb0o5U0J3VzZ6WTNYWWNkbzhJTnV3NGlia0RmVTJOZUN4T3poWm9yOTE4Nyt4SXZQZ3JOOXJITGV5bmxMdkhtQThhbE1GOTk3MUozYVdWZUZWZmRTN0cyaHdRMDVvNVpaOEpvM3RGM3hoeGhMME5XVDN2NEFVTTREdFZJRXR3SXR2dk1WLzVETjU2c3I4S0d1eTFkM0FyYzl1NU5xcnIrS3FyT2hNMDQvM3ZzOGZ0cnY0eDlRUmREMUZaWk84dkR4Q3prK2owWWpCRUFLNmlKbXErZUhDdmpnUmZKU0NFVkdkYnpZSzRGUWR3SVhBTFFBb1YxNDVZait3SlBPeVg3NnJLTXExUnFQeGlwTnhLbi96SVVkczlaTlluYWQyTitPbi9KbkZxLzlGTDRjeHZCK3FPWmxoWTY0bUs3aXEwYU92SlNjM1V1OG9XMjJjckZkdDcrb0ZUSnJ6WEp2MzczMzhuNHdma01LUGI4amhoOGpaT0FsWklhV0oyOGZmUU1uc3B4aFRsQmExdmdGRHIyWmtnUTFGVWQ0KzY2eGVHNlpPSFhkZ2VRVFFPZ0kxdlk5TjBabWVZWDl4cUUrSUxCdUUwU0R3ZWtIMXVrVkRhek1JZ2IvRlMwS0NqVGl6ak1scW8wdVhMamlkRHF4R2lhNnBQZWg1WmxmbS9mSVBYTDlzTTlPSEZXQ3MzMHhhd1I5aS9tMzdjOUppdDJQMnVIQkIyOENMM043Vm9aSlZkREdqUjRkdS9sY3oxWkVCS053MzZXb3NrNTVud3hPRE1GTk5jZkpGMGRQZmFzUFNEbkxKc3ZFYkJBOFF2UG4yMjd4MFBKbG5mMzRlOGJxZFZqeE4zUEhVZWdZT0djYU52YVAvM3VmbEgvR2JUUWRaOG91Um5HSDlaaXI0UFh2MnhHdzJCd0hPaU1rVURYRHRNTGNnd0VsU1JIbzhVcUVRWW0yNndFSkF4OTdDaytqQU8wOStZREk5V1ZwVGMrQ2R0OS9aZUYyLy9sUENTcjA3dDJ6QnJVN0dwamF5ZVZzbG82WkdaS1J0Vmh1TkRmWGY3ZlhucTJmNnVCc1krZUFMRE12WEhYdDdBVVB5UFZTN25Jd2Jya251dUJzYU1OcE83UnprRFp2SzJ2N2oyc3hjWjhxSlEvbFdheUlORFYrM281T1BoVE9uWXgweWcya2pnbmZwOUFJS3JXVnMzdDNBaEg3SmxHM2FpRko0UGxreWVBQlgyVloyTmZnb1RqYXphY3QvNk4vdjk1RjlzTnR3MWRlZzhGMlczYWdzdmVkR2FncC96WklKQTZJK0dUSjBJSzkrWHJOcjB1Q1NOM3VmbGZ0cDZPWVpBMmp0Z0pya2x5UU4rSVFRQVFFQk9aeHdpeG9JcUFMSmdObG9Fa2FqRWVGckJ0a2t6c2hNMXdRaVpTOGZmL1lWUmxzaTZhbGQrZHp0b1Z1M2JqaXRYZzQyQlJpZWNTYjV1UWtjY1hkbDBNQUNqTUQyZGV1b1A4bjdzNXpkajBMZlBzb2FvU1FHMmRLYzNhbmNXQlVsRXo5bzhDWE1tZjhaZWYzdlFic0hLNXBzUGg2cXF6MU1MU25HTEVQVnBqWHNQWVdtWFYvLzNMWWM0b0ZOWCtDeXhERmt2cVlRYXU2V3c3dlRMMlhIaHgreXNlNDRIN3krbG4rOEhtUUhsdy9qL2dHWi9QMnQ5Nmh0bExsaDRUUEJGY1d6Yk9ZRStwNWkvOVRNekV3ZHVKblFrZzJOWVZNMW1zV0ZnVTRJSWFSZ1BhbVFwRUFvVnk0Y1dOQ3h0eERBUmJFM3dKK1JrZmt2MlJqLzNyOC9lWDZZRU9JNklDK0ZTb1lOdWd5anB3Wnp5ZStaTUNCeWRvZU52NFZGNDM1RjBlb0h5QnQyQ3kvT24wcmQ5aGNaTy9OdmVCcXFxR3FRS1NsNWs0S1JkL0Q0akU3MHQ3ejdHRGZzbDlSNlhkVFhWek95NUdMTUdSZXo4Y1g1MUc5NmtlVzc2aWljZXpNdno5Vk83YndWLzJaa3ZwVUhuLzRINDhiL2pEVUw4ckQ0NnFsMjkyRGpycFZrbk1KeE4xdnRaRmhQTGEraC84aEpPQjYvZ1lLaUYzQVdYY09XcDJlZEZMQnRYUGtjanJSUkVXQ1QwMWl3K0ErTUhYTWhLd3B5S0MyclpmR0tOekdqQVpzOXpjNjlJeS9GYWxVcGQyZXc3cEdJUW0zNmdORU01Um9LQzgvRGxuNEI2OWN2d2RuSmNlMXN6SjkyQmV2SzNPeXI5TEIzM0VVc3REcFlzT3BOaXUxN2VYRFJlc2lyb1YvUjM3VHJZT1pmK2VNTkYzMDI5QmV6MXZ5cTc2QVBlejhjVUhSUlRMMGloeStXb1VuZ0Y1b2FoeEtjaDJvRTFDUWh5d2hGRVVKSU1tYXpkajBjYjNZSmMwSnl1QXVjMWVyRVlUeUFxeldPNHVLTGFGajNUMTUrelVXODBZU3phendaUGZQSTdObUxtVk55R1RYZ1Fvb3lyTWpwbWFTZDdQMVB6bURjNkN6V2I5aER5ZmpvYkttQ1VWTVl1T3dhY3ZKZW9YREVyYXhaTUlPY0ViY3phOHZOOUM4OG40SmU2VlJWN21QRVBVOHlmOUlnYnJ0ekFsT0hYOEN5Z2pTODF1NzBPb1djcHRPeTh1RHJqS05IajFKZVhrNVYxWmZVMXRaU1gxOVBZK01SbXBxT0JXV1BRbFVLTFhpOXJYZzhIbncrSDBLb2t0YWhYaUVRQ0VqQi9ndWhhZ1VwV0xFZ0I4SGZDQmlEVlFzbXRNb0ZNeEIzMzMyL1R6emJVbkg1NnNBMTF5Mi9hMmhPZzFjbUkrVjB6QzVUcWF1cEJvdVR0T1FmaDBhSTRuVlRVOWRBU2tZVzFtQytSZFAycGVUTi9JRGFUWCtpcHM1RmVrd2F3UTh4aEJEN0R4OCt2R2JPbkRtN0hudnM4VmFkS2VscngvUU1QZnFERVU5RnQ2aDZYMXF3aW9CZzBtM1FlakdIR2hsanNVUzZzMnVxdDRrNEhFazRuVjFKU2VsS3ZObkMyZWVjUjJHZjNsRWxVazMxTmJpeHRVbEZPZEZ3bGEyaFpNWUdkbTVhZk5LdURhKzdpYnBHRjJscEdWaDBLVHZ1eG5vYVBESlpHY21uMU9YTStOOCt1YnQwNlVKaFlTRnhjWEhFeFpuRGR5dzlnOU16TnlIVVVJY3JJY3QrU1pabEZFVVJnVUFVZXdzVjE4c3g1bWtBVUlMbXFSL3d6NS8vZ0E5NHJmY2c4WTczenVGRGUzUkx1aGJvZWZvZEtabTBqT3dmbGZmTGFMR1JuZDIrWW9Cc3RwR1ZaZnVoQWEzeThPSERieno4OE1NZi9QblBDN3c2Z1BKM0FHaXhnUUZGSHh3SUFwc0lsVVVGNWJ2UlFFM0xUd3RXRTBTQm1zMm1xZDRtSllYNkUyZ2Qyck96cytuZHV6Zng4ZEZta3lNbGcxUEo5ckhuajJMaGpFWnFYU281SjZucmJyRTV5TGExM1pyTm1ZTHRHL0NELzNyR3BwdEVmUGJaWjFSVzd1Zmd3Um9PSFRwRVEwT2t2dFR0ZHVQeGVIQzVqdEhTNGtVSWdjL253K2Z6NGZmN0pVVnBsNzFKUWdnNUNIQ2htbE5Ea0wyWmd1ek5yRi91dm50bTR1OSs5N3RMblU3bjFaSWs5ZUduOGYyeXVLWWF0dXh6TVdSQS9nL0hqVlcxckw2K2Z2M3MyWC84OE1rbm4yenRCTkJpRjM4UTFOb0RORDJvaFZsYUVOUkVNRWNOdmVSUUJOVDAxUVNwOU9pUlFVN09tZlR1M2ZzSGI3cnlYWTBmRGJDRlJsVlZGWldWbGRUVTFGQlhWMGREZzZiRzYzSWQ0L2h4TjBlUEhzWGo4U0NFQ0JiUXQrTHorZkg3L1NGbDNpQnpDMGlxS3FSZzVEUmtvb1pDUWdhZGVkb3V3T1hrNUppM2J2M1B4YW1wcVZmSnNuemhUNUR6NHgrQlFHRDdnUU0xNzF4OGNVbHBUYzFCSlNZdzBCbW82UUV0N0VjTFZROEFRaC94Yk12U1RKak5jZWdWYjYxV2ZkMW5wSkZ4UmtZR09UazVaR2RuLzZqUGhmSEg5b2V5czdPSmo0L0hZb2tuTGk0T3N6a3VIR1F3R2swRUFnRmtXVVlJb1ROVFd6RVlES0U3WVlpOWlVQWdnQ1JKb2J5M2tFa3F4d1lYWXN4VEgyQ3VyS3cwcDZmM2VBZllVbDcrV1ZGMmR2WlFrOGswNnFmTC84YzNXbHRiMSs3YnQrL2RvcUp6OSt2QVRNL1NmTzJBbXI4RFFBdm9VampDWm1jc1N6TWFqVUdXcG9HYXhXTFJ5WGduWUxNbGtwU1VoTk9wbHgzS29tZlBIRkpUVTMvMDU4VDRZL3hUcWFtcFdLM1dJTUJac0ZnaUFCY0lLQmdNQmxSVkRVZFF2VjVqQ056dytYeENsdVgyZkc4aWFKckdSazhEQkp0aW9JWGlUWHFBQTh5NXViMTNBbnZlZVdmalM4WEZGd3l5MlJLdWdsTUtTdjQwVGgvWFI4M3g0OGYvK2E5L2JkNDlldlRvaGc0QXJUMVE4M2ZHMERveU8wTXNyWDNUVSs5UDA0SUVTVWtPbkU0bktTbmQ2TjY5TzFsWlo5Q3JWMDhTRXhQL1Q1eWZVelpGbTF3dWp2bGxlblN4UlJjQUJ4UnFqeDdIRUo5QWFrSjByOHFXRmcvMWJoL0pqaVFTVE5MM01ma29MeS9ueXkrMWlPbWhRL1VjT0ZETjBhTk5xR29BdDF1TG1MYTBSSnJGdExhMjR2Zjc4UG0waGpFNjN4dWg1akZxUUtBS0lRZmJtWVpNMUk1OGNIcFQxUVNZSjB5WVlQblRueDYrSUNVbFpZalJhT3hReFhmUDV0Vlk4b2FSbDNieXpVTnF5NkJDZ1VHRlA2NkpXckZyTTJwR01ibmhZNkdpS0ZGbDVoaURFL0ZFSmNpcXF1cUszNk0rb2I2bUdwL1owU1lpMk5SUVE2TWIwdExUL25Yb1lNMjd2L25OYno1OS9mWFgvU2NKYVA1MkFDM1FBVU5UUS9YT3dRQUIwU3d0MHJ5NHJUOHRvcVBtZEdwQmd2VDBkTTQ0NHd4eWMzTy9VMzlhOWQ2dHVKMkY1R2VjSGhIMzcwMjJhUG5xVlR5MnI1blVSRE8xamMxTXZ2cEtwaGQrdDIwSEpFbWlkKy9lSkNRa0JQTjU0dkg3L1JnTVJsUTFFSlhrRzVrOEJscGJqUmdNUHZ4K3Y5QytMMHVLRWtCUkZLSDRBdmhWRlVrU0t0cE5OYXdXRXN4M013UW5hNGpCR1lPQTVnc0IyNG9WSzFwWHJGanhMMkRyeG8xdlAzWCsrZWRma0ppWU9GU1NwQ2hkbC9WUFAwVHlsQUZmQzlqMmJZTVZqVDh1WUZOZDVVeVordjlZc2YzdDhIc3I1OTNBeEFmWGsreXdoYWZ5STJzK1lueS9Sb3B0NXpKdjMxR0d0OGVKUFdVVXBCVmdIL2N3MjVmT2pBQlh4VmJHamJ1SldtTUdkcVVldWZCbXRqNTlEM2pydVdQQzFaK3Qvc1MzT2NuUS9OSEhuNVlmMFlGU2U0RG03d0RRbEJNQW1tZy9PR0RBYURUcHBZYUlpek1URjJkcHg1K21LZDUyN1pwTWFtb3FHUms5MlAzNll0elhMYUwzZHh3a3NDazFqSm0rbG0xckg4UjhHc3laVTJCc3JaUWVhSW1TTFhxeUtaVzNKaFRUZU9RSTNuaDdsR3pSNE5FM01EWFBUa3Vyai9nNDdTOGYyYitYaTUvL2d2L011b2J2UzA2d3FhbUp5c3I5bEphV1VsdGJTeUFRNE9qUlJvNGQwNElLc2ZsdVFXWGVVTlFVUlZIdysvMVM4L0VBZmpWQW5Ea1NQZFVGR0NRaGtLRk5rTUVRWkhER0dCWVh0WHo4OGQ2OG5qMTdYaGdmSHo5RVZaUjBWY2RDVGdvQVZHMlJqVEdNSlVoaDNJM1E1SU9NdEs4SkxGNm9xb1dNYkFpbEdubWFvSzRSMHJLSWtxNEoxYjVVVjBGeUJsaDFzMXp4UW5VZFpHVzN2YU9xd2M5UzBxTi9BN0J4MFRTV05BNWgxWnp4T21EN09RdHJMbUhyNDlOajFsUkYvMDZBclhMdGc0eGRzZ3QzMldFMlYveWJkQ09BbTBuOWUyS2Y5aEtMcHcwR29MUzByUGJNTTgvWS9OSkQwejc4eGYrK1VCM3lxWjRFb09rWEpjalFBdTJabkFTRlQ0TTF6VEZtcHdHRHdSUnNXbXlpSTlNeklTR0JSSnNWQ1lrdUtlbjB6TTRJQmdreXljN0s0cEZwQTNGTWZwTzdSbVJIeTFnQjdvWmFHcnhtc2pPUzI4eVZ4cnBxRkdzeUtmYm9tNnFucVo2NkppOXA2Um5SVWxING1ENm9ENE1YdnMvNGZqOThnNWZ2VGJZb0JHcWhZMmMweUh5ZmdXYUh3OEU1NXhUUzJ1ckZaREtoS0g3aTR5M0V4Vm1DUVFiTkVkdmNiTUpvYk1Ga011TDFhaXpPNS9QaGIvVnpwTUVnVkZXUkJBcXRyWXFRNUFCbWs0cUVKSHgrRGR4Q1FRWlpEZ2NaQWtKZ0FDbFl4U05DekswTnlQWHRXN2dIK0FSNCtvSUxMdWg3NExNUHo3LzdoWXJCZHc3UFNEK1ovemh0T095cWdPd0pzSHBlNVAxN3g4QWVHVlEzVkpmQzBGbXcrTFlUcisvcG1iQ3FDZXAzQWxZd0ZzRFdwZkR3ZEZpK0IzSlNvTFFNNWp3TkUwdkF2UWN5eHNISVhHaHd3WjQ2MkxJTGN1MVF0eHNHajRhTVF1MmY3OXNNVzVzZ0c5aitNa3krRjNvVlFQayttTDhDeHZZUHd5RXJWcnpPNkVVUGZ5dnpZTTNxTnhnNjRWRzhTNjlsN2ZZR3BwVWs0OTIzbnRVVldleVpmRW10eCtQWlVsSHh4VWZubkhQT2ZqMjc2Z0RRMmdPMjBIdWhvRklnREdpeXJFcENxR3FvSXpnSUpFa1lUU1lNc2lTOExTM0k1Z1M2V09QQTN5d2FqcnJJek03R2F0RkF6V0tKSXk0dTFKSGRTa0tDalhqSnplc3Z2NEUxN1F6aTFHWlNpc2Z4NUp6QjJCcDJNMjc4UFpUdnFjRlllUk1iRmxrWk1QNXU1azBkQmtvanN5ZGZ5OHY3VkxLc0hocHR4YXhkOVRmU0xEQnpSQ2JiUEgweG1nM1VWKzVsOU96bmVIQ3lWcy81NHR3Ym1QVnlKWVc5a3FuWVY4OFRXM2N3SUl5SlprYU51b2dsTDY5bGZMK0pVY2ZjVmJhZUNmYzh5N3psS3loeW5MYkFwaHYrWnBidCtJSnhsN2NOOW4xVjlTbGJqamw1V1ZjenV2MkQ5MW4wL240cWo3UXliOExQdm5mMVY0UEJRTStlUFltTHMrRHp0V0sxSmdTN1hNY0NuSm1XRmkySzJ0cmFxb0diMGNjWjJVYU8xdm1GSytDblM2SVdQUTBFQXFMRkZ3Qkp4V3hTaGFxcWtxSWdDUkNTRkk2aUJnQ0RKS0dBWkFoT2ZHUFFURFcyQTNUR0hUdDI3QUwyL09iS3JLY3UyL3RSNzV5Y25DS3IxWHBoWjdseFN6ZkEyb1d3dEoxeVRGc0JySndMVGRzaGV4b3N2TzNrVHY3MlBiQjNPNlJad1J2c0NqajlZYmduNkVxcFdnK0Q1OExFRGNFN2VoM2NzeE1LSFhEUGNGaTVFZTRiQXcvZkMyTWZoSGtUb0dvRDlOb1l2TWsxd01UYjRkbmRNREFkNnJaQzhWMHdla3R3LzN3VjdDeTFjM3RCMnl1aWRNMWZHRnJ4cWphUjB5NWc5Zko1bldlOHEzV3NYbGZGN0huOThkUmV5dU5yMXpGMTRNU3k4Zy8zN2ZCMGNaVDFqRFBvbVptcVkxbWRBWnFpWTJlS0hzd2tDVFhZbEZob2lndVNrR1JKR01PUlRvbFdiNnRRaFlGNHM0bjRPQk9OVGNkRmdIaU9IV3NoTGFzblNiYjRzRDh0MGozS2lzMm1xZDBlK2JTVWhMNGplZml1Y2ZUb2tVNTZlanBaV1ZtUW04dkdqZU9aTmZac0hKT2ZaK2JJN1BCaDJQejRiTlo0TDJMdnJubVlVVms0N1JJZVhyNk5CVk1IYWlSZ3dEaldQVHdaVC9WR2V2Vy9tMm5qZDVCanFXUEo0czBzMjN1UVFXbUE0c01YWTB3VUZoYXg2OEdkaEJSdndyY21WeDI3ZG4yRTIvZmZFQlU5QmRtaXZubG44ei9wWjdCMTl3Y3NlbWNQbDAwZFRNSVBRRk5UVWxKd09ydVFtSmlJelpZUUZVSFZKdEZ4M0c0elpyT0hsaGFONFlWTTAyYXpEOGx2eEdMeGkyQmdRZks0RlF5bWdEQWF0UjROQVVVVklDUlpEa2RSSlEza2hCeThVT1RnaFdBSW1xbmhzcTEyZ001WVdIak9SMEVtOTlKYmI2M3JmdDU1NStVN0hJNGlrOGwwSVhCU25UVUdCdlgvSEZsZ2FRUTNuRlIyK2JBeEdxZ0JZWG1ZdXIwd1l5R1UxMmdtWkwxdWd0dHlOVkFEeU1xQ1VPL25YYnRoOXRQYTgreUJrQkdjZVZYYm9OWUlxeGZCR2tEMWdhc1Vhb0VzQUZjRGpVWUhqbmJjakRtRHJtUHhuS0RFdDlGMlF0OU80L2ExbEtaZGR1ejhyb0VkOVVYRmU5K1o5TmN2REE5TlBoTHlrWGJDenRvRE5iM0NSclR2REZTQnBHcVBRb1I3YnNpeU1NZ0k3WWFvQ0pDMDNwRUdJeGFMUlJpTlJ0S05jUEJ3QS9iVWJMcDN0ZXNDQkJxbzJXelJxUnpaQ2VmeitxS1ZQTHN5Z1dIRFJwQmJkR0toeHkxYi9vWFowNS9aOS80KzZEYndVR2ZaQzJqQU5tU1FabzVic3daU2JDOWxkNVZDVGw0eVF3WWxjOXU0YXhnMzhqSUdEeC9Gb01Lc3FQWGFuUTVjOVVmYWJNODVZREoxZFpOUGQxTVVUbFcyS0NIQnhsa0pOczY2c29RMzVxNWcyNUZMdUx6ckQ1UDViTFZhNmRPbkQzYTduY1RFUkJJU2JGaXRWcXpXZUpxYU5BYm5kc2RoTmpkak5wdndlazE0dmEwY054c3g0Q2MrUHV4N0U3TGtCMk5BTXBzMUJ1ZHIxUmljTEdzcElvR0FRSktGaEFnSDdLVGdYVjNXbUp6azEvbmlEREVncHdjNlkxQkM2UUN3OFp4ekNrM0xsajJWazVOelptK2J6VlpvTkJyN1EvdDlsY09LTGwrejhNNFNHK1J5dzlpeE1HOGRqT3dIbnQyUU5xV2Q3Y1JzU3phQ1Q0bjRJdlNlWFhzR2pCa2RlVDFtUElRRmtPd083SW9MbHhkaTZaalZrVTVlM2dsMTlOMktvbnpnY3JsS0Z6NytWT1dSRDdmWDJNM0wxUmhtRm9qeGczVUVhSG93MC85RzFmdlBnbzBpVlVsQ0lCQ3lMS01HQWtLV0RhaEtxeERJSk5vVE1adU1IR3RzRUFhVEJsNG1rd21QNXdpeUxPSHpLOWdTYmNUSHRNUUw5ZmwwT3AxMDY1WkNldnFGYkx2bUpqNzc5Rk5XUGZzZ2YzM3RBOHJXek84OEtnd1VEcmljMGNPQ2dndWpyOGFla24xQ3FKano4dnVNM3I2RkxaczJNSEhJK1R5NDdtTW1GRWVrcXR4Tkxtek8wNk9EMWZja1c2VHkxYkVXdWlkcC9LeXh2bzREaXBrdWxoKytuQ016TXhPSHd4RUVPRnNZNE9MamoyS3hhT0NtQlJaYU1KbGFPQlpud29DUGhBUmpxR0tCaERnakxzVXZMSFlEaWk4Z3VZV0N5UndRSmxrbEVBamc5NnRJa2lEWVR5YlU2Rmx2cHNyQkM4UWdTVkk0NktBRHVmYkF6dmpSUjN1TjU1MTNYaW13RDFoN3hobG5HRzRiOVh4V3ErR3NISjh2cWJmSlpDcVFKS25YdDNyQUdxSGFDQ1ZGMms2dlczMVM2bVFNR2dqcjE4Q0lHYkIzUGRRb0VmWm1xd1k1RzRxRFFZMkdCaDJHbVhNcHptMmt0TnhEWWVHSm84TkNpQXBWaUUrT0hxNnIyRnl4NzhzYmI1eDBxS2FtUm8xaFplMnhzNDVZV3Zpem9OS0xFck1PVlFpaFQ5VVFXZ3RjU2NneUJGU0V3V0JBOGZ1RndXUkNWVm94bU9LeHhzY0pneFJBVVNFK1RtdDdKN3hOZkhWTTBLKzRtT3E5SDFEanl1YjhOSWN1NFZZZjlkVHFQYnQyNlVKcWp4NmNmZTZGRE8vbklHM2tjM2cxbDZqR29DMFc2aHNhMEx5WjJoZzg2Rkx1MlZwSnY5a1ROWmFyZW1ob2l0eHFObTNaeE15UlUvQlViMk9ucTRBRjJVYkFoOHV0VWpSd0tFVURoOUpVK2svS3ltdEJCMnhsWmFVVTlXL0xHTjNsbTVneGZ4WDNMRnBNdnYxMEJiWlRraTFLNVMvUHZjUzdMUmE2eGN0OGVhU1pjU012bzMvQ2FRSHVKQ1ltVWxCUVFGSlNrZzdnRXJCYUcybHFpc2RpY1JFWDEweGNuSm5HT0RNbTRjVm1NOUhhcWtWTjB6Sjl1Q3RNMUIvMkkxUkZ5R1lGZTRJaUJaTjdoZGNiUURhcVFoYXFGRXIwMVFVYVFpQVhabkhCdkRnLzBibHhoaGlBYS9QOHl5Ky9OUHp1cnlXZkFSVnhDM2tITUR6eXlKOXNoNW91VDA5MDljaHFiYldkYVJLbVhpRDNSbE1vK2ZvakMyNGZDQ1VESU1jR3lWa25ONG51ZWhoR2o0SDhwWkRiSDdLQ2RxT2NEQ3NXd2FTQld2REFWUXZtL3JEeDhZaFRldXk0SzFpNWZpTVRDa2RGaCtlRitNenI5WDV4L1BqeEw2dXJxdy8rODU4YkR0MS8vLzB0Z0RxaFg3bzRBWmgxQkdxeHo4Tkw4UHhFSmRJRzJ3TUppS1JySUVsQ1FzSm9rSVJmMGRLS2ZLMWVUT1k0TENaVkhHbHljN2pCQzBMQ2FKQXd4OFZqTmNQZWZYWGs5UnRJYWxjN0dZTXY0dTJOTy9Iazl5YTdXM0pRbGNOSnQyN2R3cVZSbVptWmJIcmlMaTVlK0I4SzhyS28zTHVIMis3N0IzcjRIenZ0TjR5ZGRnTWJGOXNaUFBsL1dEQmpCSU9ueldYRXp1c29LTHFJL0N3SEZlV1Z6Rmo4SnRPSGFtUy9hZnZMREJyNkdrMlZwVXg2K0JseUxBQjFqQysrRkhkR1BuWWFxSFRuc21aa1lSUjVXYnZtMzR5ZE82L051ZmZXbC9QTU15OHg4Y0h2RDlpKzExclJaazh6Ujd3S1hSTVRTVERKUHdpSTFkZlg0L1A1eWNqbzBmNCtOamRUWFYwZFR1ZzljaVJVYStvS3l5QzF0R2krdDlaV2J4RGN0SHBUajl1SEloU0VxcVdIaElycVE5VUx3UnBVZ2pXb29VSjdRa0NuZTVTRGdDZnJscENNa2lHbUNmU0puaHRpZncvSXExYTltcHlYbDljdE9ibGJxczJXa0c0eW1ib2JESVlNU1pJeTJ4cDliVWRERFNoV1NQdWFFU0JGQVdvaGF5aVVsMGZzWmxXQm1ocXdKNE1qWWt4N2hSQUhXZy92T2podytCKy9XckgyNmErVXh2ckRaV1ZsUjY2L2Z2eFJJaHA2NGZTSkRzQ3NJNGJXNGZOUThibnU5L29ValhDcVJ1Z3gyQjB0cU5Zc2laQmN2VzZKbEVNWlpBUVMxZ1FibHJoUW5hYzVHUEVNQlFnU3d1M3d1blJ4aEZsYUtEaWdiNFhuODdpb3JXL1VPanBaVHo2THpOTlVUNE5MSVMwOUhYUHc3alJ6ZUNiWk05OW5ZcUdDWW5HU0hKWHVvZEpRVzRzYk0xbnBLZEdwSS92V01uRDZPclp2WG9MMU5DQXJQN29pK0c4S2JLRlJWMWNYTEtRL1JFUERZUm9iRzRNYWJ4R2xFSStuL1lvRnY5OGZ6bjNUVnk0RUFvb1VDS2hoZ0FzRTFDQ3dxYWhxR05UUU1icU9RQzRNVURHcUk1MHRjc3h6T2VaNWFCdlNvNDh1c1BYdDI5ZWVscFptVDBwS3NsdXRWcnZaYkxZYmpVYTd3V0N3eTdKc2t5VEpKa2xTZ2lSSjhVRWdEQWtBR0hUZXRSQXcrR3EzNHB2NUxONXplNHVXYmErSjV2UUp3cjN3bDZvN0VBZ2NWeFRGMWRyYTZ2SjRQTWVibXBwY1gzMzExZkc5ZXo5MjMzMzMzUjRkZUlrWUlCT2RiKy8wNGdBQUM4eEpSRUZVZ0prZXlEcGlhbEZMSjBBV0JXWjZJQU9FTEV0QzY1SW1ZVERJT2tDVE1SaU1zWlVEUkJKdDIxWVFhTW0ybWlKSFlxSTl6TktTazdzRnU3RnJPV3JmNVFnQjI0eWhYMjg3KzdhdHBjRlJURW4rNlNFUC94T3dkWmJONHZkejRNQ0JzSUNsSm9OMGxHUEhYTzJLV0VhcmhmaUNBS2UwQTNBUkZxZDF1bGRENVZyRU1Mak9RSzVkc05PVmQ4bWRnSnFoSFdDTFhmVGI2V3lobmNmWTU5Rk8ycmJQOVkrZExiRkFGcnQweE5MYVBBOUp2N2NIWWljQ3M5RHptSjRhVWV5c0xhQ0ZRQzFTdU42UkdHUlNraDJIb3d2SnlWMXh5RzcrODJFbERtY1hESWJvL3ZUOWg0MW5RTzYzMjExOTM4N05XSHNOSk10cC9xKyt6bjhDdHBNWXg0NGQ0K0RCZzlUVjFYSDRjSWk5UlhUZW1wczlPdk0wVXJVUXFUbU5CcmhBSUJCbHBxcXFHZ1Z5UXFpU3FvcXdxVXE0NGJPUWhFQVBkRkk3SUJRRFVNS2dWVU8weTlJNkF6ZXBBNENUMndHMXpnQ3VNM0NMQlRUYUFiSE9HSnJhQVZ1TGVxMmwya2lkZ2xqUVo2YnJOeHYybTRYQUxHaHFTa2hTTkpqcFFFMkVGR1AwZ0dZMFJoaGFxSHFnYlY2YVRWZm5HZkdsOWVqUmc2U2tKSDRhMzNsVTlQL2VTRXBLSWlrcGlhNWR1MUpiK3hYMTlZZUNPbTlIZ3lWWng0TUY5YzNoZ25xdlYxK1NwV2R2SVJNMUVLVWVvZ2xjQmdnRVZGUlZGVUdRRTZxcVNxRitNMXEvQnFKWVhQQUNqbVYwT2dDU1pFbUtCVHdoQndHeU0wRHJETnkrRG5QN09zRDJkY3pPZGdFdUNFaWRBaGpSemJMRG9LcjNtWVZlQndFdGlwbHBRQ2FIMmo2S0VGT0wxSFlhd3dyT0VaWVdxUjZ3UktWd2hGaGFFbDI2ZENFNU9abVVsRlRTMDd2L241QVgrZ25ZZnVCUld2b0p1Ymxua1pxYXlvRUROZFRWZmNYaHc0YzVjdVJJbEpCbHlEelZLNGJvYTA0MTM1c0djb0ZBR09BSUJBSjZpU1JKeCtCRWhNbUowS09JTVZYUlIxY2piRnhJN1lOU0ZOaEZmYWNkYzFjNkFiQjF4TnBpVFZMUkNiaDFCbkJxZTY5MW9OUVpzNHY5VGRTMjlLOWpURTFrV2RZRkEvU0FaaUNrdWhFTGFBWkRoS0hwaTliYlU3YlZ6TTZJRUdUWHJsMkRMSzA3bVprL0tWcjlCR3cvd01qTXpDQTFOWVhhMnRxd1NtOWI4N1E1R0Z3SUFad3Z4di9XaHIyRkFneEJrRk03QkRrZHdCSE41cVJZb0l0NjNzNW5iWlpnSGwwbnpFeEwwdm91Zld4QjFuV3lUSzZqQmIxcEdmT2E5bGhaaUpucC9HZnRnRm5JN0RSMnd0TDBmalJ6VUJNd1hpY0NHVzEyaHRSdDA5UFRNWnZOUDExZ1B3eXdCZGl4ZHgvL3JQaUtZNHBNd1ZrOXVlSGNNekFEcmMxTnZMcnJNL2JXSGNOZ3NUR3l1SkFMdThja3dpdk5QUFh2anptejk5a016dmp2OVIyWXpXYXlzN05KVFUxdFk1N3FvNmZSL2pjOWcrczRlcW9vQ29xL2xaWldDWXRaaWdJNVhiQ2hQWkFqMGlZVktmWlJWVlVrV1E0SjJNUXlPenBoWXJyWFVralc2MlRCckNQR0Z2V2VDTm5aSjJaeWRBSmdrZDhMSVZSVllERElVVXhNNXk5RG42SVJDMmFod0lDK0NiZWVvWFVXN1l6NDBTeHQvR2loYUdlczJSbmJVS1c5VWJZYnNvcWczWmF3N2lvbVRIbVl4U3VXNE5SZDFiWGxlNUJUOGtsemZEdUE2U2xkeGVDNXU5ajU4dnh2dko0aGMzZXgvUlRXY3pMLzZSVDAySTZ6ZW5jdFJZWFpwSnBWbHIyOWtjK09YOGFEZzdMNXNyS0tqNXRsTHUyYmkvdklRWDc5OTVVc3ZtTWlBN3BFTnZQVzVxMHNlZTlMcnJMMStLOEd0dENJajQrblo4OGMwdEpTcWF1cm83NitQbWllNnYxdklZQnJhU09MMUZIMHRMbmhDSWNiQStSa3BlalRRNFRPRDZjSE9ZUlFoUlp3VUFrR0hzSkFGN3pPSlNFRWtpd2pSY0NPazJGZE1jQjNJakE3MlhLU05xYXBpUHc0Q3FSQzdLb2p0cWNIeFBEejRQOHpHQXpoOTJNQ0FFUWVZOEZNMWpYZDFnT2FJZGlZdTZOb1o3U3NVRWlGUXdPMGlCK3RhOWV1cEtTa2tKYVdGcFdQZHFJeGJRUXNySUQrN1JUTnJWc3lCOHVBOFZHZ0JyRGt2cC9qbVB4V1ZCSDhON3FocHhWdys2UnZudEtoZWwxVVZSOCtwZCtlekgvNitzQW1PM2hnOHVYaGwxMDhoN2wxejVjd0tKdmN2a1U4MERmMFNUYTdQL21VTGZzYkdkQkZPeEN1dXYwOFYydmp1ak90ZUg1azFEY2hJWUdlUFh2U3ZYdjNjUFQwU08xblBQL0NlL1F0S2NIZWNoelhvVW8yZlZKTG43NjVKTFMyQkFNTXNRek95NEV2dnFEcFdETkNFUnc1Y2dSVk1wR1M0b1JBZ0lEaTVmRGhZMWl0Um5ITTVVSkZ4cDdrUUJaK3llVnlvd1MwV0lJcHppSk1SZ2toQkFHL0QxOGdJQUJKbGcxSWhNQk9SVkZVTFNDaHFxQ3hscE1GclRZQXBrWFlwVENsQzZia0k3Y3ZjaWpDM3dtQnJQYjlZRjRZWVlBSzdtMlExV21BSklRcWhOQitMMGt5UnFNaEJIQUVGRDhDQ1VuV29wUWhVQXY0VzFFeG9yUzJFaEJndGRteHhwbkNRTlpPMmdadGZXbnRNelN0NzBBUTBJeng3UG5FU3U0Wk5uWnNTNlJiVGhJM1QzU1EzazN6b3gydFNPTnZ6MWh4eVRCK09nd3RCRHl3Y0JHTXZ4UFNMT0NyaDBlZWhSbDNRZVVtV0xrWnF0encrRnhJTThPSVNUQXdONFFTalN4KzRsL2N0V1ZwK09BMmxXOWp3Yk52c2JtMEhzdnlQOU8wM1VIZTRHdVpPRlJyWmx5NWN5MWJtNUpKcWQzQ2k1cytJWGZJejdsdjhuQXFkMjNnNlpmZm9ycXVrZlRjODVseCszVFM3UnBNckh2NlliWlZITWVhZFg3VWlhell2b2J0alhhOGV6YXd0ZUlJSTZmOGxyRWx1U2R4MWZoWXZXUWVhM1orU2IrUk4zSGIyQkprb0w1OE8wdWZYVVY1OVNHY0diMlpkdnVkNUtWWlQvaWZWRTg5eXhZdlptdnBBYjV4K3YrbjlRM2twcmVUUytNL1RzVVJsVDZwUVZhbStuaG83VTZtWDNrK2NUL09qbCtBVmx5Zms1UERPZWVjUS82NWd6akgwY0NMRzh2SXlrcGp4L28xbURQeXlVeExwVnUzRkpLVHUrSjBPbkU0dW9UTHVleDJPNms5TWtoMUppS1pFMGhMU3lNMXBTc0pWbzBCeE1jWmNMdVBjK1JvTTNhSEU3dk5ndEVjUjV4UkZySXBUdGlUa29RdHdTeDhMYzFnREdhMFd6UTVKczAyTXdtVHlTU01ScU13R2lRUkJBaGhNQnFFMXNSQlVnMEdneXJMY250TElMaUVHdmRHTDVyMm5DSkprcVo0b2RWVmhsL0hMQUZKa2dLeUpBVmtXUTRteVdycmxtVXB2QjJCVUlXR3VtcHd1NnJCWUZBbHRJNU5KcE5SU0toQ0NhakNhRFFLazhra1RDYXpNRWlJZ0NwMGlyTnhpSUJDYTJ1cnNDUWtDcHRaRm03WGNSRVhyL20vSW83OTRIR09qOGRxdFhDOHNaNURodzVSVjFkSGJXMHRCdzhlNUtzamJ1eDJPMGxKU1RnY1hZSitzcTUwNjVaQ2Ftb3E2Y25kZVc5TEJtVU5aM0Q5OVRrMDdzeGxXMTArNTV4ekRrcEZEdGZlYWFWa0xFd2FDWGVOZ1ozMWdCV3lmRERwSGswc2ROWVVjS1dCWFliMFhqQjhPRGpOVUR4RWU1Nmx1K1I4NVp2WUtmZG5RSHFFcDFpU3N4ZzIvQXF5VTJ6MDZuY3h3NGRmUWI5ZUVWbS95cDF2Y3QrMFg3Q3F3c0w0aWRkalZWd0FWRldVMDJ2QWxkeCsxeDFrdWQ5ajJKUjVZY0dDdkg2REtja0s4TWl5TjJLQTdRMW1UTHNidFdBb0U0Wm1NbjNzelZTZmhFUlIwKzVWYkhEMVl2cVVhMWs5K3pvV2I2Z0VvS2F5QW1kK0NYZmVkUWNsS1ljWU51SVczQ2Y2VDZxTEdTTXVabDJObldtMzMvSE5nZ2ZWK3ovaHNVOENQRG5qN0ZpaXlUTnJOaEozOWdDdTdLR1ZKTzdjOFI1Tm1VVU02bWJtdy84RHprdUx4VUoyZGpaM0xYNkJUeSsvbU1jZi80REd6SkhNdnU0UzNDNTlpb2luVFltVzFacUlUYmlvOVBqSnlNaUk5c0VadFJtVGNWWnZFZzFDWjZaYU1NZjdhUFkwbzBqeHlIS0xVREVRRjJkR21NM0VXVlFhV3IyUzBSeEhuQ0Zvc2lxQ0ZxOWZ4TnNTa0lXZ3RhVVpSWURSYUNSaXdZcVFPUm9tV2tFaUZrVytoTkRpcHFvL0FMS01qQ29GQW1Bd0dKR2xqazFRaldSSitIMCtKSU1Sb3h4NUQwQUVBZ1FrQ1lzbExzcWtOSnROQkJTRmdDb3dHbVI4QVVGY25CbEprcEVzRnBRV0Y2NVdTVmdzY1dGenMvVzRoQ2t1aVdTbkExbEs0SGhsTFhKY1BQRkdmYldBUGpBZzAycExKSTVvYzlTYzJBV25zMHVVRDAzZlNNVk9FaWFqZzkvKzBVbS8xRzUwUDU3S3F6VkdMQlpZdWhBbXpvSVJKZHIvbnpvVVZxeUY0aWt3Wmhac0hnRmp4a0JUQ213TXlwcWxaR3VMM1F6OVN0cWFvclhsVlZoeU1xTmtYU3pPREVwS01saWZZc1dSWDB4SlNWdXp6WmgzQlkvUHV4MFpHQjU4YjhqNEdkUlc3R1Z2ZVEwWmhlZFM5K3hiTkFMSlFFNWhNU20rTXVSbGJVM0lncEUzTW0zVUVLQ1lnYlArek41YVRTbTUwNUUraVBuM2pzY0J6SnB4RGZlOHVJcmJoODJrMy9DSlpGZnZZMDlaSmVaZTUyQ3BmSUFLTnhSMThwOWN1MWV6dkRhUG1zMHpzUVAvSDNpeGdKbVFPNXd1QUFBQUFFbEZUa1N1UW1DQyJdLFsxLCJkZXRhaWxzLWNvbnRhaW5lciJdLFsxLCJkZXRhaWxzIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZy9leHBlcmltZW50YWwvZW5hYmxlX2R1bXBfZGVidWdfaW5mbyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9kZWJ1Z2dpbmciLCJ0YXJnZXQiLCJibGFuayIsInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxUKDIsIkRlYnVnZ2VyIFYyIGlzIGluYWN0aXZlIGJlY2F1c2Ugbm8gZGF0YSBpcyBhdmFpbGFibGUuIiksZygpLGgoMywiZGl2IiksVCg0LCJUbyB1c2UgdGhlIGRlYnVnZ2VyLCIpLGcoKSxoKDUsImRpdiIpKDYsIm9sIikoNywibGkiKSxUKDgsIiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBiZWdpbm5pbmcgb2YgeW91ciBwcm9ncmFtOiAiKSxoKDksImRpdiIsMikoMTAsInNwYW4iKSxUKDExLCJ0Zi5kZWJ1Z2dpbmcuZXhwZXJpbWVudGFsLmVuYWJsZV9kdW1wX2RlYnVnX2luZm8oIiksZygpLGgoMTIsInNwYW4iLDMpLFQoMTMsImxvZ2RpciIpLGcoKSxUKDE0LCIsICIpLGgoMTUsInNwYW4iLDMpLFQoMTYsJ3RlbnNvcl9kZWJ1Z19tb2RlPSJGVUxMX0hFQUxUSCInKSxnKCksVCgxNywiLCAiKSxoKDE4LCJzcGFuIiwzKSxUKDE5LCJjaXJjdWxhcl9idWZmZXJfc2l6ZT0tMSIpLGcoKSxoKDIwLCJzcGFuIiksVCgyMSwiKSIpLGcoKSgpKCksaCgyMiwibGkiKSxUKDIzLCJSZS1ydW4gdGhlIHByb2dyYW0uIiksZygpKCkoKSxoKDI0LCJkaXYiLDQpKDI1LCJkaXYiLDUpKDI2LCJkaXYiLDYpLFAoMjcsImltZyIsNyksZygpLGgoMjgsImRpdiIsOCksVCgyOSwiQXV0by1hbGVydHMgZm9yIHByb2JsZW1zIGZvdW5kIiksZygpKCksaCgzMCwiZGl2Iiw1KSgzMSwiZGl2Iiw2KSxQKDMyLCJpbWciLDkpLGcoKSxoKDMzLCJkaXYiLDgpLFQoMzQsIiBJbnRlZ3JhdGVkIGRlYnVnZ2luZyB0byB0cmFjZSBwcm9ibGVtcyB0byB0aGVpciBjYXVzZXMgIiksZygpKCksaCgzNSwiZGl2Iiw1KSgzNiwiZGl2Iiw2KSxQKDM3LCJpbWciLDEwKSxnKCksaCgzOCwiZGl2Iiw4KSxUKDM5LCJMaW5rIGxvZyB0byBjb2RlIiksZygpKCkoKSxoKDQwLCJkaXYiLDExKSg0MSwiZGl2IiwxMiksVCg0MiwiIFRoZSBsb2cgZGlyZWN0b3J5IG11c3QgY29udGFpbiBUZW5zb3JGbG93IERlYnVnZ2VyIChWMikgZGF0YS4gdGYuZGVidWdnaW5nLmV4cGVyaW1lbnRhbC5lbmFibGVfZHVtcF9kZWJ1Z19pbmZvKCkgd2lsbCBjb2xsZWN0IHRlbnNvciBkYXRhLCBncmFwaCBzdHJ1Y3R1cmVzLCB0aGUgYXNzb2NpYXRlZCBzdGFjayB0cmFjZXMsIGFuZCBzb3VyY2UgY29kZSB0byB0aGUgc3BlY2lmaWNlZCBkaXJlY3RvcnkgbG9nZGlyIGFzIHRoZSBpbnN0cnVtZW50ZWQgVGVuc29yRmxvdyBwcm9ncmFtIGV4ZWN1dGVzLiAiKSxnKCksaCg0MywiZGl2IiwxMikoNDQsImRpdiIpLFQoNDUsIiBTZWUgIiksaCg0NiwiYSIsMTMpLFQoNDcsIiBkb2N1bWVudGF0aW9uICIpLGcoKSxUKDQ4LCIgb2YgdGhlIFB5dGhvbiBBUEkgb2YgRGVidWdnZXIgVjIuICIpLGcoKSxoKDQ5LCJkaXYiKSxUKDUwLCIgU2VlICIpLGgoNTEsImEiLDE0KSxUKDUyLCIgaGVyZSAiKSxnKCksVCg1MywiIGZvciBvdGhlciBUZW5zb3JGbG93IGRlYnVnZ2luZyBBUElzLiAiKSxnKCkoKSgpKCkpfSxzdHlsZXM6WyIuYXJnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGNvbG9yOiBsaWdodGJsdWU7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgbWFyZ2luOiAycHg7XG59XG5cbi5jb2RlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBSb2JvdG87XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgcGFkZGluZzogNTBweDtcbn1cblxuLmRldGFpbHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmRldGFpbHNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDEwcHggNjBweDtcbiAgd2lkdGg6IDUwJTtcbn1cblxuLmV4aGliaXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAxMHB4IDYwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiAzMTBweDtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdICAgLmRlc2NyaXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAzMTBweDtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdICAgLnNjcmVlbnNob3RbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMjAwcHg7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4udGl0bGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxMzUlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbWFyZ2luLWJvdHRvbTogMjVweDtcbn0iXX0pLG59KSgpLGhYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItaW5hY3RpdmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoMCwiaW5hY3RpdmUtY29tcG9uZW50Iil9LGRlcGVuZGVuY2llczpbbVhdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLF9YPXtnZXRXaW5kb3c6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93fX07ZnVuY3Rpb24gZ1gobil7bGV0IHQ9X1guZ2V0V2luZG93KCkucmVxdWlyZTtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3QobixlKX0pfXZhciB4Tl9sb2FkTW9uYWNvPWFzeW5jIGZ1bmN0aW9uKCl7bGV0IG49X1guZ2V0V2luZG93KCk7aWYodm9pZCAwPT09bi5tb25hY28pe2lmKCFuLnJlcXVpcmUpdGhyb3cgbmV3IEVycm9yKCJsb2FkTW9uYWNvKCkgZmFpbGVkIGJlY2F1c2UgZnVuY3Rpb24gcmVxdWlyZSgpIGlzIHVuYXZhaWxhYmxlIik7bi5yZXF1aXJlLmNvbmZpZyh7cGF0aHM6e3ZzOiIvdGYtaW1wb3J0cy92cyJ9fSksYXdhaXQgZ1goWyJ2cy9lZGl0b3IvZWRpdG9yLm1haW4iXSksYXdhaXQgZ1goWyJ2cy9weXRob24vcHl0aG9uLmNvbnRyaWJ1dGlvbiJdKX19O2Z1bmN0aW9uIEpFKG4pe3JldHVybiBuPyJ2cy1kYXJrIjoidnMifXZhciBPZj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXM9MTAwLHRoaXMub25SZXNpemU9bmV3IEYsdGhpcy5uZ1Vuc3Vic2NyaWJlJD1uZXcgSWUsdGhpcy5vblJlc2l6ZSQ9bmV3IEllO2xldCBpPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3RoaXMub25SZXNpemUkLm5leHQoKX0pO2kub2JzZXJ2ZShlLm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgpPT57aS51bm9ic2VydmUoZS5uYXRpdmVFbGVtZW50KX0pfW5nT25Jbml0KCl7dGhpcy5vblJlc2l6ZSQucGlwZShpYSgxKSx3cih0aGlzLnJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zKSxvdCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblJlc2l6ZS5lbWl0KCl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZSQuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJkZXRlY3RSZXNpemUiLCIiXV0saW5wdXRzOntyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NczoicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMifSxvdXRwdXRzOntvblJlc2l6ZToib25SZXNpemUifX0pLG59KSgpLE13ZT1bImNvZGVWaWV3ZXJDb250YWluZXIiXSx4WD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMubW9uYWNvPW51bGwsdGhpcy5lZGl0b3I9bnVsbCx0aGlzLmRlY29yYXRpb25zPVtdLHRoaXMuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TPTUwfW9uUmVzaXplKCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmxheW91dCgpfW5nT25DaGFuZ2VzKGUpe2lmKG51bGw9PT10aGlzLm1vbmFjbylyZXR1cm47bGV0IGk9ZS5tb25hY28mJm51bGw9PT10aGlzLmVkaXRvcjtudWxsPT09dGhpcy5lZGl0b3ImJih0aGlzLmVkaXRvcj10aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlKHRoaXMuY29kZVZpZXdlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LHt2YWx1ZToodGhpcy5saW5lcz8/W10pLmpvaW4oIlxuIiksbGFuZ3VhZ2U6InB5dGhvbiIscmVhZE9ubHk6ITAsZm9udFNpemU6MTAsbWluaW1hcDp7ZW5hYmxlZDohMH0sdGhlbWU6SkUodGhpcy51c2VEYXJrTW9kZSl9KSksZS5saW5lcyYmdGhpcy5saW5lcyYmdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGhpcy5saW5lcy5qb2luKCJcbiIpKTtsZXQgcj1pfHxlLmZvY3VzZWRMaW5lbm8/dGhpcy5mb2N1c2VkTGluZW5vOm51bGw7aWYociYmdGhpcy5saW5lcyl7dGhpcy5lZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKHIsdGhpcy5tb25hY28uZWRpdG9yLlNjcm9sbFR5cGUuU21vb3RoKTtsZXQgbz10aGlzLmxpbmVzW3ItMV0ubGVuZ3RoO3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5lZGl0b3IuZGVsdGFEZWNvcmF0aW9ucyh0aGlzLmRlY29yYXRpb25zLFt7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKHIsMSxyLDEpLG9wdGlvbnM6e2lzV2hvbGVMaW5lOiEwLGxpbmVzRGVjb3JhdGlvbnNDbGFzc05hbWU6ImhpZ2hsaWdodC1ndXR0ZXIifX0se3JhbmdlOm5ldyB0aGlzLm1vbmFjby5SYW5nZShyLDEscixvKzEpLG9wdGlvbnM6e2lubGluZUNsYXNzTmFtZToiaGlnaGxpZ2h0LWxpbmUifX1dKX1lLnVzZURhcmtNb2RlJiZ0aGlzLm1vbmFjby5lZGl0b3Iuc2V0VGhlbWUoSkUodGhpcy51c2VEYXJrTW9kZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShNd2UsNyxNZSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5jb2RlVmlld2VyQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLG1vbmFjbzoibW9uYWNvIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxmZWF0dXJlczpbR3RdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLDEsImNvZGUtdmlld2VyLWNvbnRhaW5lciIsMywicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsiY29kZVZpZXdlckNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwLDEpLEkoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzaXplKCl9KSxnKCkpLDImZSYmXygicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLGkuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TKX0sZGVwZW5kZW5jaWVzOltPZl0sc3R5bGVzOlsiLmNvZGUtdmlld2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgIC5oaWdobGlnaHQtZ3V0dGVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC43KTtcbiAgd2lkdGg6IDVweCAhaW1wb3J0YW50O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWxpbmUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTExLCAwLCAwLjMpO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQ1g9KCgpPT57Y2xhc3MgbntuZ09uSW5pdCgpe3RoaXMubW9uYWNvJD0kcih4Tl9sb2FkTW9uYWNvKCkpLnBpcGUoTigoKT0+d2luZG93Lm1vbmFjbykpfWNvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5tb25hY28kPW51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInNvdXJjZS1jb2RlIl1dLGlucHV0czp7bGluZXM6ImxpbmVzIixmb2N1c2VkTGluZW5vOiJmb2N1c2VkTGluZW5vIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxkZWNsczoyLHZhcnM6Nixjb25zdHM6W1szLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJtb25hY28iLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwic291cmNlLWNvZGUtY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIikpLDImZSYmXygibGluZXMiLGkubGluZXMpKCJmb2N1c2VkTGluZW5vIixpLmZvY3VzZWRMaW5lbm8pKCJtb25hY28iLFcoMSw0LGkubW9uYWNvJCkpKCJ1c2VEYXJrTW9kZSIsaS51c2VEYXJrTW9kZSl9LGRlcGVuZGVuY2llczpbeFgsY3RdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Z1bmN0aW9uIEV3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw2KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiICIsZS5mb2N1c2VkU291cmNlTGluZVNwZWMuZmlsZV9wYXRoLCIgIil9fWZ1bmN0aW9uIFR3ZShuLHQpezEmbiYmKGgoMCwiZGl2Iiw3KSxUKDEsIiBObyBmaWxlIHNlbGVjdGVkLiBDbGljayBhIGxpbmUgbnVtYmVyIGluIHRoZSBTdGFjayBUcmFjZSBzZWN0aW9uIHRvIHNob3cgdGhlIHNvdXJjZSBjb2RlLiAiKSxnKCkpfWZ1bmN0aW9uIER3ZShuLHQpe2lmKDEmbiYmUCgwLCJzb3VyY2UtY29kZSIsOCksMiZuKXtsZXQgZT13KCk7XygibGluZXMiLGUuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKSgiZm9jdXNlZExpbmVubyIsZS5mb2N1c2VkU291cmNlTGluZVNwZWMubGluZW5vKSgidXNlRGFya01vZGUiLGUudXNlRGFya01vZGUpfX12YXIgTVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50PW51bGwsdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWM9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWZpbGVzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudDoiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Iixmb2N1c2VkU291cmNlTGluZVNwZWM6ImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic291cmNlLWZpbGVzLWNvbnRhaW5lciJdLFsxLCJoZWFkZXItc2VjdGlvbiJdLFsxLCJ0aXRsZS10YWciXSxbImNsYXNzIiwiZmlsZS1sYWJlbCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ZpbGVTZWxlY3RlZCIsIiJdLFszLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJ1c2VEYXJrTW9kZSIsNCwibmdJZiJdLFsxLCJmaWxlLWxhYmVsIl0sWzEsIm5vLWZpbGUtc2VsZWN0ZWQiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJkaXYiLDIpLFQoMywiU291cmNlIENvZGUiKSxnKCksUyg0LEV3ZSwyLDEsImRpdiIsMyksUyg1LFR3ZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsV3QpLGcoKSxTKDcsRHdlLDEsMywic291cmNlLWNvZGUiLDUpLGcoKSksMiZlKXtsZXQgcj1pdCg2KTt2KDQpLF8oIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VMaW5lU3BlYykoIm5nSWZFbHNlIixyKSx2KDMpLF8oIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCYmbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUxpbmVTcGVjJiZudWxsIT09aS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpfX0sZGVwZW5kZW5jaWVzOltGZSxDWF0sc3R5bGVzOlsnLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MjRweDtwYWRkaW5nLWJvdHRvbTo2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZmlsZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6bm9ybWFsO3doaXRlLXNwYWNlOm5vcm1hbDtvdmVyZmxvdy13cmFwOmFueXdoZXJlO292ZXJmbG93LXk6YXV0bztwYWRkaW5nOjAgMjBweH0ubm8tZmlsZS1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6IzY2NjtwYWRkaW5nOjAgMjBweDt3aGl0ZS1zcGFjZTpub3JtYWx9LnNvdXJjZS1maWxlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjEwMCV9LnRpdGxlLXRhZ1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTAwJTtwYWRkaW5nLWxlZnQ6NnB4O3ZlcnRpY2FsLWFsaWduOnRvcH1zb3VyY2UtY29kZVtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7d2lkdGg6MTAwJX0nXX0pLG59KSgpLHdYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50JD10aGlzLnN0b3JlLnNlbGVjdChYRSksdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWMkPXRoaXMuc3RvcmUuc2VsZWN0KFFFKSx0aGlzLnVzZURhcmtNb2RlJD10aGlzLnN0b3JlLnNlbGVjdChSbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IiwiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInNvdXJjZS1maWxlcy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJl8oImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCIsVygxLDMsaS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkKSkoImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsVygyLDUsaS5mb2N1c2VkU291cmNlTGluZVNwZWMkKSkoInVzZURhcmtNb2RlIixXKDMsNyxpLnVzZURhcmtNb2RlJCkpfSxkZXBlbmRlbmNpZXM6W01YLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxSd2U9WyJzdGFja0ZyYW1lQXJyYXkiXTtmdW5jdGlvbiBQd2Uobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDEzKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDMpO3YoMSksSGUoIiAjIixlLmV4ZWN1dGlvbkluZGV4LCI6ICIpfX1mdW5jdGlvbiBPd2Uobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDE0KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDMpO3YoMSksSGUoIiAiLGUub3BUeXBlLCIgIil9fWZ1bmN0aW9uIGt3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiksVCgxLCIgRWFnZXIgZXhlY3V0aW9uICIpLFMoMixQd2UsMiwxLCJzcGFuIiwxMSksUygzLE93ZSwyLDEsInNwYW4iLDEyKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDIpLF8oIm5nSWYiLG51bGwhPT1lLm9wVHlwZSksdigxKSxfKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBGd2Uobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDE2KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDMpO3YoMSksSGUoJyAiJyxlLm9wTmFtZSwnIiAnKX19ZnVuY3Rpb24gTndlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwxNCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygzKTt2KDEpLEhlKCIgIixlLm9wVHlwZSwiICIpfX1mdW5jdGlvbiBMd2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIpLFQoMSwiIENyZWF0aW9uIG9mIGdyYXBoIG9wICIpLFMoMixGd2UsMiwxLCJzcGFuIiwxNSksUygzLE53ZSwyLDEsInNwYW4iLDEyKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDIpLF8oIm5nSWYiLG51bGwhPT1lLm9wTmFtZSksdigxKSxfKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBCd2Uobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDE3KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpO3YoMSksSGUoIiAoSG9zdCBuYW1lOiAiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5WzBdLmhvc3RfbmFtZSwiKSAiKX19ZnVuY3Rpb24gVndlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDcpKDEsInNwYW4iKSgyLCJzcGFuIiw4KSxTKDMsa3dlLDQsMiwiZGl2Iiw5KSxTKDQsTHdlLDQsMiwiZGl2Iiw5KSxnKCkoKSxoKDUsImRpdiIpLFMoNixCd2UsMiwxLCJzcGFuIiwxMCksZygpKCkpLDImbil7bGV0IGU9dygpO3YoMiksXygibmdTd2l0Y2giLGUuY29kZUxvY2F0aW9uVHlwZSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuQ29kZUxvY2F0aW9uVHlwZS5FWEVDVVRJT04pLHYoMSksXygibmdTd2l0Y2hDYXNlIixlLkNvZGVMb2NhdGlvblR5cGUuR1JBUEhfT1BfQ1JFQVRJT04pLHYoMiksXygibmdJZiIsbnVsbCE9PWUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JiZlLnN0YWNrRnJhbWVzRm9yRGlzcGxheS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEh3ZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxOCksVCgxLCIgQ2xpY2sgYW4gZWFnZXIgZXhlY3V0aW9uIG9yIGdyYXBoIG9wIHRvIHNob3cgaXRzIG9yaWdpbmFsIHN0YWNrIHRyYWNlLiAiKSxnKCkpfWZ1bmN0aW9uIHp3ZShuLHQpezEmbiYmKGgoMCwiZGl2IiwyOCksVCgxLCIgXHUyOTEzICIpLGcoKSl9dmFyIFV3ZT1mdW5jdGlvbihuLHQpe3JldHVybltuLHRdfTtmdW5jdGlvbiBqd2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDIyKSgxLCJkaXYiLDIzKSxUKDIpLGcoKSxoKDMsImRpdiIsMjQpLFMoNCx6d2UsMiwwLCJkaXYiLDI1KSxoKDUsImRpdiIsMjYpLEkoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoMikub25Tb3VyY2VMaW5lQ2xpY2tlZC5lbWl0KG8pKX0pLFQoNiksZygpLGgoNywiZGl2IiwyNyksVCg4KSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO18oIm5nQ2xhc3MiLHFyKDYsVXdlLGUuYmVsb25nc1RvRm9jdXNlZEZpbGU/ImZvY3VzZWQtZmlsZSI6IiIsZS5mb2N1c2VkPyJmb2N1c2VkLXN0YWNrLWZyYW1lIjoiIikpLHYoMSksV2koInRpdGxlIixlLmZpbGVfcGF0aCksdigxKSxIZSgiICIsZS5jb25jaXNlX2ZpbGVfcGF0aCwiICIpLHYoMiksXygibmdJZiIsaS5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSYmZS5mb2N1c2VkKSx2KDIpLEhlKCIgTGluZSAiLGUubGluZW5vLCIgIiksdigyKSxIZSgiICIsZS5mdW5jdGlvbl9uYW1lLCIgIil9fWZ1bmN0aW9uIEd3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxOSwyMCksUygyLGp3ZSw5LDksImRpdiIsMjEpLGcoKSksMiZuKXtsZXQgZT13KCk7digyKSxfKCJuZ0Zvck9mIixlLnN0YWNrRnJhbWVzRm9yRGlzcGxheSl9fWZ1bmN0aW9uIFd3ZShuLHQpe312YXIgU1g9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5PW51bGwsdGhpcy5vblNvdXJjZUxpbmVDbGlja2VkPW5ldyBGLHRoaXMuQ29kZUxvY2F0aW9uVHlwZT1Mb31uZ0FmdGVyVmlld0NoZWNrZWQoKXtpZih2b2lkIDA9PT10aGlzLnN0YWNrRnJhbWVBcnJheSlyZXR1cm47bGV0IGU9dGhpcy5zdGFja0ZyYW1lQXJyYXkubmF0aXZlRWxlbWVudCxpPWUucXVlcnlTZWxlY3RvcigiLmZvY3VzZWQtc3RhY2stZnJhbWUiKTtpZihudWxsIT09aSlyZXR1cm4gdm9pZCB0aGlzLnNjcm9sbFRvRWxlbWVudChlLGkpO2xldCByPWUucXVlcnlTZWxlY3RvcigiLnN0YWNrLWZyYW1lLWNvbnRhaW5lcjpsYXN0LWNoaWxkIik7bnVsbCE9PXImJnRoaXMuc2Nyb2xsVG9FbGVtZW50KGUscil9c2Nyb2xsVG9FbGVtZW50KGUsaSl7ZS5zY3JvbGxUb3A9aS5vZmZzZXRUb3B9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInN0YWNrLXRyYWNlLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKFJ3ZSw1KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLnN0YWNrRnJhbWVBcnJheT1yLmZpcnN0KX19LGlucHV0czp7Y29kZUxvY2F0aW9uVHlwZToiY29kZUxvY2F0aW9uVHlwZSIsb3BUeXBlOiJvcFR5cGUiLG9wTmFtZToib3BOYW1lIixleGVjdXRpb25JbmRleDoiZXhlY3V0aW9uSW5kZXgiLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsc3RhY2tGcmFtZXNGb3JEaXNwbGF5OiJzdGFja0ZyYW1lc0ZvckRpc3BsYXkifSxvdXRwdXRzOntvblNvdXJjZUxpbmVDbGlja2VkOiJvblNvdXJjZUxpbmVDbGlja2VkIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsInN0YWNrLXRyYWNlLWNvbnRhaW5lciJdLFsxLCJzdGFjay10cmFjZS1oZWFkZXIiXSxbMSwic3RhY2stdHJhY2UtdGl0bGUiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtYXV4LWluZm8iLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9TdGFja1RyYWNlIiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWFycmF5Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdTZWN0aW9uIiwiIl0sWzEsInN0YWNrLXRyYWNlLWF1eC1pbmZvIl0sWzEsImNvZGUtbG9jYXRpb24tb3JpZ2luIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtaG9zdC1uYW1lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcC10eXBlIiw0LCJuZ0lmIl0sWzEsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCJdLFsxLCJvcC10eXBlIl0sWyJjbGFzcyIsIm9wLW5hbWUiLDQsIm5nSWYiXSxbMSwib3AtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iLCJuby1zdGFjay10cmFjZSJdLFsxLCJzdGFjay1mcmFtZS1hcnJheSJdLFsic3RhY2tGcmFtZUFycmF5IiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJzdGFjay1mcmFtZS1maWxlLXBhdGgiLDMsInRpdGxlIl0sWzEsInN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbiJdLFsiY2xhc3MiLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciIsInRpdGxlIiwiU3RpY2tpbmcgdG8gdGhlIGJvdHRvbW1vc3QgZnJhbWUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgd2hlbiBuYXZpZ2F0aW5nIGV4ZWN1dGlvbnMgYW5kIGdyYXBoIG9wcy4gVG8gcmVtb3ZlIHRoaXMgc3RpY2tpbmcsIGNsaWNrIGFueSBub24tYm90dG9tbW9zdCBzdGFjayBmcmFtZS4iLDQsIm5nSWYiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vIiwzLCJjbGljayJdLFsxLCJzdGFjay1mcmFtZS1mdW5jdGlvbiJdLFsidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsMSwic3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxUKDMsIiBTdGFjayBUcmFjZSAiKSxnKCksUyg0LFZ3ZSw3LDQsImRpdiIsMyksUyg1LEh3ZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsV3QpLGcoKSxTKDcsR3dlLDMsMSwiZGl2Iiw1KSxTKDgsV3dlLDAsMCwibmctdGVtcGxhdGUiLG51bGwsNixXdCksZygpKSwyJmUpe2xldCByPWl0KDYpLG89aXQoOSk7dig0KSxfKCJuZ0lmIixudWxsIT09aS5jb2RlTG9jYXRpb25UeXBlKSgibmdJZkVsc2UiLHIpLHYoMyksXygibmdJZiIsbnVsbCE9PWkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KSgibmdJZkVsc2UiLG8pfX0sZGVwZW5kZW5jaWVzOlt5bixubixGZSxzcixTcl0sc3R5bGVzOlsnLmZvY3VzZWQtZmlsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uZm9jdXNlZC1zdGFjay1mcmFtZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTEsMCwuMyl9Lm5vLXN0YWNrLXRyYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdyYXA6YW55d2hlcmV9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc3RhY2stZnJhbWUtYXJyYXlbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt3aWR0aDpjYWxjKDEwMCUgLSA4cHgpfS5zdGFjay1mcmFtZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNhMGEwYTB9LnN0YWNrLWZyYW1lLWZpbGUtcGF0aFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjE4MHB4O3dpZHRoOjE4MHB4fS5zdGFjay1mcmFtZS1saW5lbm8tZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGFjay1mcmFtZS1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmctbGVmdDoxMHB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3JtYWw7d2lkdGg6MjAwcHg7d29yZC13cmFwOmFueXdoZXJlfS5zdGFjay1mcmFtZS1saW5lbm9bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDo4MHB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3dpZHRoOjgwcHh9LnN0YWNrLXRyYWNlLWF1eC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjE1cHg7cGFkZGluZy1sZWZ0OjI0cHh9LnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6Y29sdW1uO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDttYXgtaGVpZ2h0OjM2MHB4O292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6aGlkZGVuO3BhZGRpbmctbGVmdDo4cHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnN0YWNrLXRyYWNlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjNweH0uc3RhY2stdHJhY2UtaG9zdC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5zdGFjay10cmFjZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uc3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEycHg7cGFkZGluZy1yaWdodDozcHh9J119KSxufSkoKSxFWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNvZGVMb2NhdGlvblR5cGUkPXRoaXMuc3RvcmUucGlwZSh1bihxKGh5LGk9Pm51bGw9PT1pP251bGw6aS5jb2RlTG9jYXRpb25UeXBlKSkpLHRoaXMub3BUeXBlJD10aGlzLnN0b3JlLnBpcGUodW4ocShoeSxpPT5udWxsPT09aT9udWxsOmkub3BUeXBlKSkpLHRoaXMub3BOYW1lJD10aGlzLnN0b3JlLnBpcGUodW4ocShoeSxpPT5udWxsPT09aXx8aS5jb2RlTG9jYXRpb25UeXBlIT09TG8uR1JBUEhfT1BfQ1JFQVRJT04/bnVsbDppLm9wTmFtZSkpKSx0aGlzLmV4ZWN1dGlvbkluZGV4JD10aGlzLnN0b3JlLnBpcGUodW4ocShoeSxpPT5udWxsPT09aXx8aS5jb2RlTG9jYXRpb25UeXBlIT09TG8uRVhFQ1VUSU9OP251bGw6aS5leGVjdXRpb25JbmRleCkpKSx0aGlzLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJD10aGlzLnN0b3JlLnBpcGUodW4oclgpKSx0aGlzLnN0YWNrRnJhbWVzRm9yRGlzcGxheSQ9dGhpcy5zdG9yZS5waXBlKHVuKHEoblgsUUUsKGkscik9PntpZihudWxsPT09aSlyZXR1cm4gbnVsbDtsZXQgbz1bXTtmb3IobGV0IHMgb2YgaSl7bGV0e2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGxpbmVubzpjLGZ1bmN0aW9uX25hbWU6ZH09cyx1PWwuc3BsaXQoIi8iKSxmPW51bGwhPT1yJiZhPT09ci5ob3N0X25hbWUmJmw9PT1yLmZpbGVfcGF0aDtvLnB1c2goe2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGNvbmNpc2VfZmlsZV9wYXRoOnVbdS5sZW5ndGgtMV0sbGluZW5vOmMsZnVuY3Rpb25fbmFtZTpkLGJlbG9uZ3NUb0ZvY3VzZWRGaWxlOmYsZm9jdXNlZDpmJiZjPT09ci5saW5lbm99KX1yZXR1cm4gb30pKSl9b25Tb3VyY2VMaW5lQ2xpY2tlZChlKXtsZXR7aG9zdF9uYW1lOmksZmlsZV9wYXRoOnIsbGluZW5vOm8sZnVuY3Rpb25fbmFtZTpzfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2goT2coe3N0YWNrRnJhbWU6e2hvc3RfbmFtZTppLGZpbGVfcGF0aDpyLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6c319KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSJdXSxkZWNsczo3LHZhcnM6MTgsY29uc3RzOltbMywiY29kZUxvY2F0aW9uVHlwZSIsIm9wVHlwZSIsIm9wTmFtZSIsImV4ZWN1dGlvbkluZGV4Iiwic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLCJvblNvdXJjZUxpbmVDbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJzdGFjay10cmFjZS1jb21wb25lbnQiLDApLEkoIm9uU291cmNlTGluZUNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU291cmNlTGluZUNsaWNrZWQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxnKCkpLDImZSYmXygiY29kZUxvY2F0aW9uVHlwZSIsVygxLDYsaS5jb2RlTG9jYXRpb25UeXBlJCkpKCJvcFR5cGUiLFcoMiw4LGkub3BUeXBlJCkpKCJvcE5hbWUiLFcoMywxMCxpLm9wTmFtZSQpKSgiZXhlY3V0aW9uSW5kZXgiLFcoNCwxMixpLmV4ZWN1dGlvbkluZGV4JCkpKCJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsVyg1LDE0LGkuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkKSkoInN0YWNrRnJhbWVzRm9yRGlzcGxheSIsVyg2LDE2LGkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JCkpfSxkZXBlbmRlbmNpZXM6W1NYLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxYd2U9ZnVuY3Rpb24obix0KXtyZXR1cm57dGVuc29yRGVidWdNb2RlOm4sYXJyYXk6dH19O2Z1bmN0aW9uIFF3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxMikoMSwiZGl2IiwxMyksVCgyKSxnKCksaCgzLCJkaXYiLDE0KSxQKDQsImRlYnVnLXRlbnNvci12YWx1ZSIsMTUpLGcoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXcoMyk7digyKSxIZSgiT3V0cHV0IHNsb3QgIixpLCI6IiksdigyKSxfKCJkZWJ1Z1RlbnNvclZhbHVlIixyLnBhcnNlRGVidWdUZW5zb3JWYWx1ZShxcigyLFh3ZSxyLnRlbnNvckRlYnVnTW9kZSxlKSkpfX1mdW5jdGlvbiBad2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTApLFMoMSxRd2UsNSw1LCJkaXYiLDExKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLF8oIm5nRm9yT2YiLGUuZGVidWdUZW5zb3JWYWx1ZXMpfX1mdW5jdGlvbiBLd2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIpKDEsImRpdiIpKDIsImRpdiIsMykoMywic3BhbiIsNCksVCg0LCIgT3A6ICIpLGcoKSxoKDUsInNwYW4iLDUpLFQoNiksZygpKCksaCg3LCJkaXYiLDMpKDgsInNwYW4iLDQpLFQoOSwiICMgb2YgaW5wdXQgdGVuc29yczogIiksZygpLGgoMTAsInNwYW4iLDYpLFQoMTEpLGcoKSgpLGgoMTIsImRpdiIsMykoMTMsInNwYW4iLDQpLFQoMTQsIiAjIG9mIG91dHB1dCB0ZW5zb3JzOiAiKSxnKCksaCgxNSwic3BhbiIsNyksVCgxNiksZygpLGgoMTcsInNwYW4iLDgpLFQoMTgpLGcoKSgpLFMoMTksWndlLDIsMSwiZGl2Iiw5KSxnKCkoKSksMiZuKXtsZXQgZT13KCk7dig2KSxIZSgiICIsZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vcF90eXBlLCIgIiksdig1KSxIZSgiICIsbnVsbD09ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5pbnB1dF90ZW5zb3JfaWRzPzA6ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5pbnB1dF90ZW5zb3JfaWRzLmxlbmd0aCwiICIpLHYoNSksSGUoIiAiLG51bGw9PWUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3V0cHV0X3RlbnNvcl9pZHM/MDplLmZvY3VzZWRFeGVjdXRpb25EYXRhLm91dHB1dF90ZW5zb3JfaWRzLmxlbmd0aCwiICIpLHYoMiksSGUoIiAoZGVidWcgbW9kZTogIixlLlRlbnNvckRlYnVnTW9kZVtlLnRlbnNvckRlYnVnTW9kZV0sIikgIiksdigxKSxfKCJuZ0lmIixlLmhhc0RlYnVnVGVuc29yVmFsdWVzKX19ZnVuY3Rpb24gSndlKG4sdCl7fXZhciBUWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy50ZW5zb3JEZWJ1Z01vZGU9U28uVU5TUEVDSUZJRUQsdGhpcy5oYXNEZWJ1Z1RlbnNvclZhbHVlcz0hMSx0aGlzLmRlYnVnVGVuc29yVmFsdWVzPW51bGwsdGhpcy5kZWJ1Z1RlbnNvckR0eXBlcz1udWxsLHRoaXMuVGVuc29yRGVidWdNb2RlPVNvLHRoaXMucGFyc2VEZWJ1Z1RlbnNvclZhbHVlPVpFfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJleGVjdXRpb24tZGF0YS1jb21wb25lbnQiXV0saW5wdXRzOntmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRhdGE6ImZvY3VzZWRFeGVjdXRpb25EYXRhIix0ZW5zb3JEZWJ1Z01vZGU6InRlbnNvckRlYnVnTW9kZSIsaGFzRGVidWdUZW5zb3JWYWx1ZXM6Imhhc0RlYnVnVGVuc29yVmFsdWVzIixkZWJ1Z1RlbnNvclZhbHVlczoiZGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yRHR5cGVzOiJkZWJ1Z1RlbnNvckR0eXBlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsImZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsb2FkaW5nX3NlY3Rpb24iLCIiXSxbMSwiZXhlY3V0aW9uLWRhdGEtZmllbGQiXSxbMSwiZXhlY3V0aW9uLWRhdGEta2V5Il0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwib3AtdHlwZSJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsImlucHV0LXRlbnNvcnMiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvdXRwdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSJdLFsiY2xhc3MiLCJvdXRwdXQtc2xvdHMiLDQsIm5nSWYiXSxbMSwib3V0cHV0LXNsb3RzIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90LWNvbnRhaW5lciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm91dHB1dC1zbG90LWNvbnRhaW5lciJdLFsxLCJvdXRwdXQtc2xvdC1udW1iZXIiXSxbMSwib3V0cHV0LXNsb3QtZGVidWctdGVuc29yLXZhbHVlIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IikoMiwic3BhbiIpLFQoMyksZygpKCksUyg0LEt3ZSwyMCw1LCJkaXYiLDEpLFMoNSxKd2UsMCwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLFd0KSxnKCkpLDImZSl7bGV0IHI9aXQoNik7digzKSxIZSgiIFB5dGhvbiBFeGVjdXRpb24gIyIsaS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgsIiAiKSx2KDEpLF8oIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRFeGVjdXRpb25EYXRhKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltubixGZSxLRV0sc3R5bGVzOlsnLmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICMwMDA7dGV4dC1hbGlnbjpsZWZ0fS5kZWJ1Zy10ZW5zb3ItdmFsdWVzLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmV4ZWN1dGlvbi1kYXRhLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LmV4ZWN1dGlvbi1kYXRhLWtleVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjEyMHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MTIwcHh9LmV4ZWN1dGlvbi1kYXRhLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDoxMHB4fS5mb2N1cy1leGVjdXRpb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmNjODA7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjEycHg7aGVpZ2h0OjEyMHB4O3BhZGRpbmc6NXB4O3dpZHRoOjM2MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5mb2N1cy1leGVjdXRpb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0ub3V0cHV0LXNsb3RzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NjBweDtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvfS5vdXRwdXQtc2xvdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7bWFyZ2luLXRvcDo1cHg7cGFkZGluZzoycHggMDt2ZXJ0aWNhbC1hbGlnbjp0b3B9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vdXRwdXQtc2xvdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Lm91dHB1dC1zbG90LW51bWJlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jaztmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZX0ub3V0cHV0LXNsb3QtZGVidWctdGVuc29yLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO21hcmdpbjozcHggMCAzcHggMzBweH0ub3V0cHV0LXRlbnNvcnNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6NXB4fSddfSksbn0pKCksRFg9IlVua25vd24gZHR5cGUiLElYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRhdGEkPXRoaXMuc3RvcmUucGlwZSh1bihQZikpLHRoaXMudGVuc29yRGVidWdNb2RlJD10aGlzLnN0b3JlLnBpcGUodW4ocShQZixpPT5udWxsPT09aT9Tby5VTlNQRUNJRklFRDppLnRlbnNvcl9kZWJ1Z19tb2RlKSkpLHRoaXMuaGFzRGVidWdUZW5zb3JWYWx1ZXMkPXRoaXMuc3RvcmUucGlwZSh1bihxKFBmLGk9PntpZihudWxsPT09aXx8bnVsbD09PWkuZGVidWdfdGVuc29yX3ZhbHVlcylyZXR1cm4hMTtmb3IobGV0IHIgb2YgaS5kZWJ1Z190ZW5zb3JfdmFsdWVzKWlmKG51bGwhPT1yJiZyLmxlbmd0aD4wKXJldHVybiEwO3JldHVybiExfSkpKSx0aGlzLmRlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUodW4ocShQZixpPT5udWxsPT09aT9udWxsOmkuZGVidWdfdGVuc29yX3ZhbHVlcykpKSx0aGlzLmRlYnVnVGVuc29yRHR5cGVzJD10aGlzLnN0b3JlLnBpcGUodW4ocShQZixpPT57aWYobnVsbD09PWl8fG51bGw9PT1pLmRlYnVnX3RlbnNvcl92YWx1ZXN8fGkudGVuc29yX2RlYnVnX21vZGUhPT1Tby5GVUxMX0hFQUxUSCYmaS50ZW5zb3JfZGVidWdfbW9kZSE9PVNvLlNIQVBFKXJldHVybiBudWxsO2xldCByPVtdO2ZvcihsZXQgbyBvZiBpLmRlYnVnX3RlbnNvcl92YWx1ZXMpaWYobnVsbD09PW8pci5wdXNoKERYKTtlbHNle2xldCBzPVN0cmluZyhpLnRlbnNvcl9kZWJ1Z19tb2RlPT09U28uRlVMTF9IRUFMVEg/b1syXTpvWzFdKTtyLnB1c2goZ3lbc118fERYKX1yZXR1cm4gcn0pKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1leGVjdXRpb24tZGF0YSJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4In0sZGVjbHM6Nix2YXJzOjE2LGNvbnN0czpbWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EYXRhIiwidGVuc29yRGVidWdNb2RlIiwiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvclZhbHVlcyIsImRlYnVnVGVuc29yRHR5cGVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJleGVjdXRpb24tZGF0YS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIikpLDImZSYmXygiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCkoImZvY3VzZWRFeGVjdXRpb25EYXRhIixXKDEsNixpLmZvY3VzZWRFeGVjdXRpb25EYXRhJCkpKCJ0ZW5zb3JEZWJ1Z01vZGUiLFcoMiw4LGkudGVuc29yRGVidWdNb2RlJCkpKCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsVygzLDEwLGkuaGFzRGVidWdUZW5zb3JWYWx1ZXMkKSkoImRlYnVnVGVuc29yVmFsdWVzIixXKDQsMTIsaS5kZWJ1Z1RlbnNvclZhbHVlcyQpKSgiZGVidWdUZW5zb3JEdHlwZXMiLFcoNSwxNCxpLmRlYnVnVGVuc29yRHR5cGVzJCkpfSxkZXBlbmRlbmNpZXM6W1RYLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx0U2U9WyJzbGlkZXJXcmFwcGVyIl0sZWw9cW8oe3Bhc3NpdmU6ITF9KSxzU2U9e3Byb3ZpZGU6TW8sdXNlRXhpc3Rpbmc6JG4oKCk9PkRkKSxtdWx0aTohMH0sYVNlPWt1KHpzKHNvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSwiYWNjZW50IikpLERkPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBhU2V7Z2V0IGludmVydCgpe3JldHVybiB0aGlzLl9pbnZlcnR9c2V0IGludmVydChlKXt0aGlzLl9pbnZlcnQ9UnQoZSl9Z2V0IG1heCgpe3JldHVybiB0aGlzLl9tYXh9c2V0IG1heChlKXt0aGlzLl9tYXg9X2koZSx0aGlzLl9tYXgpLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IG1pbigpe3JldHVybiB0aGlzLl9taW59c2V0IG1pbihlKXt0aGlzLl9taW49X2koZSx0aGlzLl9taW4pLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHN0ZXAoKXtyZXR1cm4gdGhpcy5fc3RlcH1zZXQgc3RlcChlKXt0aGlzLl9zdGVwPV9pKGUsdGhpcy5fc3RlcCksdGhpcy5fc3RlcCUxIT0wJiYodGhpcy5fcm91bmRUb0RlY2ltYWw9dGhpcy5fc3RlcC50b1N0cmluZygpLnNwbGl0KCIuIikucG9wKCkubGVuZ3RoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgdGh1bWJMYWJlbCgpe3JldHVybiB0aGlzLl90aHVtYkxhYmVsfXNldCB0aHVtYkxhYmVsKGUpe3RoaXMuX3RodW1iTGFiZWw9UnQoZSl9Z2V0IHRpY2tJbnRlcnZhbCgpe3JldHVybiB0aGlzLl90aWNrSW50ZXJ2YWx9c2V0IHRpY2tJbnRlcnZhbChlKXt0aGlzLl90aWNrSW50ZXJ2YWw9ImF1dG8iPT09ZT8iYXV0byI6Im51bWJlciI9PXR5cGVvZiBlfHwic3RyaW5nIj09dHlwZW9mIGU/X2koZSx0aGlzLl90aWNrSW50ZXJ2YWwpOjB9Z2V0IHZhbHVlKCl7cmV0dXJuIG51bGw9PT10aGlzLl92YWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5fbWluKSx0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7aWYoZSE9PXRoaXMuX3ZhbHVlKXtsZXQgaT1faShlLDApO3RoaXMuX3JvdW5kVG9EZWNpbWFsJiZpIT09dGhpcy5taW4mJmkhPT10aGlzLm1heCYmKGk9cGFyc2VGbG9hdChpLnRvRml4ZWQodGhpcy5fcm91bmRUb0RlY2ltYWwpKSksdGhpcy5fdmFsdWU9aSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVJ0KGUpfWdldCBkaXNwbGF5VmFsdWUoKXtyZXR1cm4gdGhpcy5kaXNwbGF5V2l0aD90aGlzLmRpc3BsYXlXaXRoKHRoaXMudmFsdWUpOnRoaXMuX3JvdW5kVG9EZWNpbWFsJiZ0aGlzLnZhbHVlJiZ0aGlzLnZhbHVlJTEhPTA/dGhpcy52YWx1ZS50b0ZpeGVkKHRoaXMuX3JvdW5kVG9EZWNpbWFsKTp0aGlzLnZhbHVlfHwwfWZvY3VzKGUpe3RoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoZSl9Ymx1cigpe3RoaXMuX2JsdXJIb3N0RWxlbWVudCgpfWdldCBwZXJjZW50KCl7cmV0dXJuIHRoaXMuX2NsYW1wKHRoaXMuX3BlcmNlbnQpfV9zaG91bGRJbnZlcnRBeGlzKCl7cmV0dXJuIHRoaXMudmVydGljYWw/IXRoaXMuaW52ZXJ0OnRoaXMuaW52ZXJ0fV9pc01pblZhbHVlKCl7cmV0dXJuIDA9PT10aGlzLnBlcmNlbnR9X2dldFRodW1iR2FwKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Nzp0aGlzLl9pc01pblZhbHVlKCkmJiF0aGlzLnRodW1iTGFiZWw/dGhpcy5faXNBY3RpdmU/MTA6NzowfV9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKXtsZXQgaT10aGlzLnZlcnRpY2FsP2AxLCAkezEtdGhpcy5wZXJjZW50fSwgMWA6MS10aGlzLnBlcmNlbnQrIiwgMSwgMSI7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKT8iLSI6IiJ9JHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4KSBzY2FsZTNkKCR7aX0pYH19X2dldFRyYWNrRmlsbFN0eWxlcygpe2xldCBlPXRoaXMucGVyY2VudCxyPXRoaXMudmVydGljYWw/YDEsICR7ZX0sIDFgOmAke2V9LCAxLCAxYDtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpPyIiOiItIn0ke3RoaXMuX2dldFRodW1iR2FwKCl9cHgpIHNjYWxlM2QoJHtyfSlgLGRpc3BsYXk6MD09PWU/Im5vbmUiOiIifX1fZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKXtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/Ii0iOiIifSR7dGhpcy5fdGlja0ludGVydmFsUGVyY2VudC8yKjEwMH0lKWB9fV9nZXRUaWNrc1N0eWxlcygpe2xldCBlPTEwMCp0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50LGE9e2JhY2tncm91bmRTaXplOnRoaXMudmVydGljYWw/YDJweCAke2V9JWA6YCR7ZX0lIDJweGAsdHJhbnNmb3JtOmB0cmFuc2xhdGVaKDApIHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiLSJ9JHtlLzJ9JSkke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiIHJvdGF0ZSgxODBkZWcpIn1gfTtpZih0aGlzLl9pc01pblZhbHVlKCkmJnRoaXMuX2dldFRodW1iR2FwKCkpe2xldCBjLGw9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO2M9dGhpcy52ZXJ0aWNhbD9sPyJCb3R0b20iOiJUb3AiOmw/IlJpZ2h0IjoiTGVmdCIsYVtgcGFkZGluZyR7Y31gXT1gJHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4YH1yZXR1cm4gYX1fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKXtsZXQgZT10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KC0kezEwMCooKCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlKT90aGlzLnBlcmNlbnQ6MS10aGlzLnBlcmNlbnQpfSUpYH19X3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCl7bGV0IGU9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO3JldHVybiJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlfV9nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9hbmltYXRpb25Nb2RlPWMsdGhpcy5faW52ZXJ0PSExLHRoaXMuX21heD0xMDAsdGhpcy5fbWluPTAsdGhpcy5fc3RlcD0xLHRoaXMuX3RodW1iTGFiZWw9ITEsdGhpcy5fdGlja0ludGVydmFsPTAsdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLmNoYW5nZT1uZXcgRix0aGlzLmlucHV0PW5ldyBGLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEYsdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3BlcmNlbnQ9MCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PTAsdGhpcy5fc2xpZGVyRGltZW5zaW9ucz1udWxsLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1Nbi5FTVBUWSx0aGlzLl9wb2ludGVyRG93bj1kPT57dGhpcy5kaXNhYmxlZHx8dGhpcy5faXNTbGlkaW5nfHwhX3koZCkmJjAhPT1kLmJ1dHRvbnx8dGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX3RvdWNoSWQ9X3koZCk/ZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPG4udG91Y2hlcy5sZW5ndGg7ZSsrKXtsZXQgaT1uLnRvdWNoZXNbZV0udGFyZ2V0O2lmKHQ9PT1pfHx0LmNvbnRhaW5zKGkpKXJldHVybiBuLnRvdWNoZXNbZV0uaWRlbnRpZmllcn19KGQsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTp2b2lkIDA7bGV0IHU9UlgoZCx0aGlzLl90b3VjaElkKTtpZih1KXtsZXQgcD10aGlzLnZhbHVlO3RoaXMuX2lzU2xpZGluZz0icG9pbnRlciIsdGhpcy5fbGFzdFBvaW50ZXJFdmVudD1kLHRoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoKSx0aGlzLl9vbk1vdXNlZW50ZXIoKSx0aGlzLl9iaW5kR2xvYmFsRXZlbnRzKGQpLHRoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoKSx0aGlzLl91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbih1KSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD1wLGQuY2FuY2VsYWJsZSYmZC5wcmV2ZW50RGVmYXVsdCgpLHAhPXRoaXMudmFsdWUmJnRoaXMuX2VtaXRJbnB1dEV2ZW50KCl9fSl9LHRoaXMuX3BvaW50ZXJNb3ZlPWQ9PntpZigicG9pbnRlciI9PT10aGlzLl9pc1NsaWRpbmcpe2xldCB1PVJYKGQsdGhpcy5fdG91Y2hJZCk7aWYodSl7ZC5jYW5jZWxhYmxlJiZkLnByZXZlbnREZWZhdWx0KCk7bGV0IHA9dGhpcy52YWx1ZTt0aGlzLl9sYXN0UG9pbnRlckV2ZW50PWQsdGhpcy5fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24odSkscCE9dGhpcy52YWx1ZSYmdGhpcy5fZW1pdElucHV0RXZlbnQoKX19fSx0aGlzLl9wb2ludGVyVXA9ZD0+eyJwb2ludGVyIj09PXRoaXMuX2lzU2xpZGluZyYmKCFfeShkKXx8Im51bWJlciIhPXR5cGVvZiB0aGlzLl90b3VjaElkfHxNTihkLmNoYW5nZWRUb3VjaGVzLHRoaXMuX3RvdWNoSWQpKSYmKGQuY2FuY2VsYWJsZSYmZC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3JlbW92ZUdsb2JhbEV2ZW50cygpLHRoaXMuX2lzU2xpZGluZz1udWxsLHRoaXMuX3RvdWNoSWQ9dm9pZCAwLHRoaXMuX3ZhbHVlT25TbGlkZVN0YXJ0IT10aGlzLnZhbHVlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQ9dGhpcy5fbGFzdFBvaW50ZXJFdmVudD1udWxsKX0sdGhpcy5fd2luZG93Qmx1cj0oKT0+e3RoaXMuX2xhc3RQb2ludGVyRXZlbnQmJnRoaXMuX3BvaW50ZXJVcCh0aGlzLl9sYXN0UG9pbnRlckV2ZW50KX0sdGhpcy5fZG9jdW1lbnQ9bCx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHMpfHwwLGEucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgZD1lLm5hdGl2ZUVsZW1lbnQ7ZC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLGVsKSxkLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLGVsKX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57dGhpcy5faXNBY3RpdmU9ISFlJiYia2V5Ym9hcmQiIT09ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9KSx0aGlzLl9kaXImJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5fZGlyLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sZWwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sZWwpLHRoaXMuX2xhc3RQb2ludGVyRXZlbnQ9bnVsbCx0aGlzLl9yZW1vdmVHbG9iYWxFdmVudHMoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X29uTW91c2VlbnRlcigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zbGlkZXJEaW1lbnNpb25zPXRoaXMuX2dldFNsaWRlckRpbWVuc2lvbnMoKSx0aGlzLl91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCkpfV9vbkZvY3VzKCl7dGhpcy5fc2xpZGVyRGltZW5zaW9ucz10aGlzLl9nZXRTbGlkZXJEaW1lbnNpb25zKCksdGhpcy5fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpfV9vbkJsdXIoKXt0aGlzLm9uVG91Y2hlZCgpfV9vbktleWRvd24oZSl7aWYodGhpcy5kaXNhYmxlZHx8dnIoZSl8fHRoaXMuX2lzU2xpZGluZyYmImtleWJvYXJkIiE9PXRoaXMuX2lzU2xpZGluZylyZXR1cm47bGV0IGk9dGhpcy52YWx1ZTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDMzOnRoaXMuX2luY3JlbWVudCgxMCk7YnJlYWs7Y2FzZSAzNDp0aGlzLl9pbmNyZW1lbnQoLTEwKTticmVhaztjYXNlIDM1OnRoaXMudmFsdWU9dGhpcy5tYXg7YnJlYWs7Y2FzZSAzNjp0aGlzLnZhbHVlPXRoaXMubWluO2JyZWFrO2Nhc2UgMzc6dGhpcy5faW5jcmVtZW50KCJydGwiPT10aGlzLl9nZXREaXJlY3Rpb24oKT8xOi0xKTticmVhaztjYXNlIDM4OnRoaXMuX2luY3JlbWVudCgxKTticmVhaztjYXNlIDM5OnRoaXMuX2luY3JlbWVudCgicnRsIj09dGhpcy5fZ2V0RGlyZWN0aW9uKCk/LTE6MSk7YnJlYWs7Y2FzZSA0MDp0aGlzLl9pbmNyZW1lbnQoLTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWkhPXRoaXMudmFsdWUmJih0aGlzLl9lbWl0SW5wdXRFdmVudCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKSx0aGlzLl9pc1NsaWRpbmc9ImtleWJvYXJkIixlLnByZXZlbnREZWZhdWx0KCl9X29uS2V5dXAoKXsia2V5Ym9hcmQiPT09dGhpcy5faXNTbGlkaW5nJiYodGhpcy5faXNTbGlkaW5nPW51bGwpfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fYmluZEdsb2JhbEV2ZW50cyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudCxyPV95KGUpLHM9cj8idG91Y2hlbmQiOiJtb3VzZXVwIjtpLmFkZEV2ZW50TGlzdGVuZXIocj8idG91Y2htb3ZlIjoibW91c2Vtb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxlbCksaS5hZGRFdmVudExpc3RlbmVyKHMsdGhpcy5fcG9pbnRlclVwLGVsKSxyJiZpLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIix0aGlzLl9wb2ludGVyVXAsZWwpO2xldCBhPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBhPCJ1IiYmYSYmYS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVyKX1fcmVtb3ZlR2xvYmFsRXZlbnRzKCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLGVsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX3BvaW50ZXJVcCxlbCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLGVsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9wb2ludGVyVXAsZWwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMuX3BvaW50ZXJVcCxlbCk7bGV0IGk9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGk8InUiJiZpJiZpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXIpfV9pbmNyZW1lbnQoZSl7bGV0IGk9dGhpcy5fY2xhbXAodGhpcy52YWx1ZXx8MCx0aGlzLm1pbix0aGlzLm1heCk7dGhpcy52YWx1ZT10aGlzLl9jbGFtcChpK3RoaXMuc3RlcCplLHRoaXMubWluLHRoaXMubWF4KX1fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZSl7aWYoIXRoaXMuX3NsaWRlckRpbWVuc2lvbnMpcmV0dXJuO2xldCBzPXRoaXMuX2NsYW1wKCgodGhpcy52ZXJ0aWNhbD9lLnk6ZS54KS0odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLnRvcDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLmxlZnQpKS8odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoKSk7aWYodGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKSYmKHM9MS1zKSwwPT09cyl0aGlzLnZhbHVlPXRoaXMubWluO2Vsc2UgaWYoMT09PXMpdGhpcy52YWx1ZT10aGlzLm1heDtlbHNle2xldCBhPXRoaXMuX2NhbGN1bGF0ZVZhbHVlKHMpLGw9TWF0aC5yb3VuZCgoYS10aGlzLm1pbikvdGhpcy5zdGVwKSp0aGlzLnN0ZXArdGhpcy5taW47dGhpcy52YWx1ZT10aGlzLl9jbGFtcChsLHRoaXMubWluLHRoaXMubWF4KX19X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy52YWx1ZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoKSl9X2VtaXRJbnB1dEV2ZW50KCl7dGhpcy5pbnB1dC5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KCkpfV91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCl7aWYoIXRoaXMudGlja0ludGVydmFsfHwhdGhpcy5fc2xpZGVyRGltZW5zaW9ucylyZXR1cm47bGV0IGU7aWYoImF1dG8iPT10aGlzLnRpY2tJbnRlcnZhbCl7bGV0IGk9dGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoO2U9TWF0aC5jZWlsKDMwLyhpKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pKSkqdGhpcy5zdGVwL2l9ZWxzZSBlPXRoaXMudGlja0ludGVydmFsKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pO3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9QVgoZSk/ZTowfV9jcmVhdGVDaGFuZ2VFdmVudChlPXRoaXMudmFsdWUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLnNvdXJjZT10aGlzLGkudmFsdWU9ZSxpfV9jYWxjdWxhdGVQZXJjZW50YWdlKGUpe2xldCBpPSgoZXx8MCktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbik7cmV0dXJuIEFYKGkpP2k6MH1fY2FsY3VsYXRlVmFsdWUoZSl7cmV0dXJuIHRoaXMubWluK2UqKHRoaXMubWF4LXRoaXMubWluKX1fY2xhbXAoZSxpPTAscj0xKXtyZXR1cm4gTWF0aC5tYXgoaSxNYXRoLm1pbihlLHIpKX1fZ2V0U2xpZGVyRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9zbGlkZXJXcmFwcGVyP3RoaXMuX3NsaWRlcldyYXBwZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTpudWxsfV9mb2N1c0hvc3RFbGVtZW50KGUpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fYmx1ckhvc3RFbGVtZW50KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmJsdXIoKX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKFhyKSxDKCR0KSxDKFhpLDgpLHlvKCJ0YWJpbmRleCIpLEMoYXQpLEMoTHQpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1zbGlkZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZSh0U2UsNSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5fc2xpZGVyV3JhcHBlcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJzbGlkZXIiLDEsIm1hdC1zbGlkZXIiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MjksaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Gb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQmx1cigpfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbktleWRvd24obyl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uS2V5dXAoKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbk1vdXNlZW50ZXIoKX0pKCJzZWxlY3RzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIG8ucHJldmVudERlZmF1bHQoKX0pLDImZSYmKGpvKCJ0YWJJbmRleCIsaS50YWJJbmRleCksQmUoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJhcmlhLXZhbHVlbWF4IixpLm1heCkoImFyaWEtdmFsdWVtaW4iLGkubWluKSgiYXJpYS12YWx1ZW5vdyIsaS52YWx1ZSkoImFyaWEtdmFsdWV0ZXh0IixudWxsPT1pLnZhbHVlVGV4dD9pLmRpc3BsYXlWYWx1ZTppLnZhbHVlVGV4dCkoImFyaWEtb3JpZW50YXRpb24iLGkudmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpLG50KCJtYXQtc2xpZGVyLWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LXNsaWRlci1oYXMtdGlja3MiLGkudGlja0ludGVydmFsKSgibWF0LXNsaWRlci1ob3Jpem9udGFsIiwhaS52ZXJ0aWNhbCkoIm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCIsaS5fc2hvdWxkSW52ZXJ0QXhpcygpKSgibWF0LXNsaWRlci1pbnZlcnQtbW91c2UtY29vcmRzIixpLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpKSgibWF0LXNsaWRlci1zbGlkaW5nIixpLl9pc1NsaWRpbmcpKCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmciLGkudGh1bWJMYWJlbCkoIm1hdC1zbGlkZXItdmVydGljYWwiLGkudmVydGljYWwpKCJtYXQtc2xpZGVyLW1pbi12YWx1ZSIsaS5faXNNaW5WYWx1ZSgpKSgibWF0LXNsaWRlci1oaWRlLWxhc3QtdGljayIsaS5kaXNhYmxlZHx8aS5faXNNaW5WYWx1ZSgpJiZpLl9nZXRUaHVtYkdhcCgpJiZpLl9zaG91bGRJbnZlcnRBeGlzKCkpKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGNvbG9yOiJjb2xvciIsdGFiSW5kZXg6InRhYkluZGV4IixpbnZlcnQ6ImludmVydCIsbWF4OiJtYXgiLG1pbjoibWluIixzdGVwOiJzdGVwIix0aHVtYkxhYmVsOiJ0aHVtYkxhYmVsIix0aWNrSW50ZXJ2YWw6InRpY2tJbnRlcnZhbCIsdmFsdWU6InZhbHVlIixkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLHZhbHVlVGV4dDoidmFsdWVUZXh0Iix2ZXJ0aWNhbDoidmVydGljYWwifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsaW5wdXQ6ImlucHV0Iix2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UifSxleHBvcnRBczpbIm1hdFNsaWRlciJdLGZlYXR1cmVzOltRdChbc1NlXSksS2VdLGRlY2xzOjEzLHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtc2xpZGVyLXdyYXBwZXIiXSxbInNsaWRlcldyYXBwZXIiLCIiXSxbMSwibWF0LXNsaWRlci10cmFjay13cmFwcGVyIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLWZpbGwiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcy1jb250YWluZXIiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcyIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLWZvY3VzLXJpbmciXSxbMSwibWF0LXNsaWRlci10aHVtYiJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwLDEpKDIsImRpdiIsMiksUCgzLCJkaXYiLDMpKDQsImRpdiIsNCksZygpLGgoNSwiZGl2Iiw1KSxQKDYsImRpdiIsNiksZygpLGgoNywiZGl2Iiw3KSxQKDgsImRpdiIsOCkoOSwiZGl2Iiw5KSxoKDEwLCJkaXYiLDEwKSgxMSwic3BhbiIsMTEpLFQoMTIpLGcoKSgpKCkoKSksMiZlJiYodigzKSxfKCJuZ1N0eWxlIixpLl9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKSksdigxKSxfKCJuZ1N0eWxlIixpLl9nZXRUcmFja0ZpbGxTdHlsZXMoKSksdigxKSxfKCJuZ1N0eWxlIixpLl9nZXRUaWNrc0NvbnRhaW5lclN0eWxlcygpKSx2KDEpLF8oIm5nU3R5bGUiLGkuX2dldFRpY2tzU3R5bGVzKCkpLHYoMSksXygibmdTdHlsZSIsaS5fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKSksdig1KSxidChpLmRpc3BsYXlWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W3B1XSxzdHlsZXM6WycubWF0LXNsaWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo4cHg7b3V0bGluZTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpOmFjdGl2ZSwubWF0LXNsaWRlci5tYXQtc2xpZGVyLXNsaWRpbmc6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKXtjdXJzb3I6Z3JhYmJpbmd9Lm1hdC1zbGlkZXItd3JhcHBlcnstd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDpleGFjdDtjb2xvci1hZGp1c3Q6ZXhhY3Q7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVufS5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdGlja3N7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7YmFja2dyb3VuZC1jbGlwOmNvbnRlbnQtYm94O2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMCk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksb3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5nLC5tYXQtc2xpZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3t0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6bm90KC5tYXQtc2xpZGVyLXNsaWRpbmcpIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6bm90KC5tYXQtc2xpZGVyLXNsaWRpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2N1cnNvcjpncmFifS5tYXQtc2xpZGVyLXRodW1ie3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xMHB4O2JvdHRvbTotMTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXI6M3B4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNmb3JtOnNjYWxlKDAuNyk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpub25lO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm9yZGVyLXJhZGl1cyA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt6LWluZGV4OjE7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3RyYW5zaXRpb24tZHVyYXRpb246MG1zfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci13aWR0aDowO2JvcmRlci1zdHlsZTpzb2xpZDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2spIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVyLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2spIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye29wYWNpdHk6MX0ubWF0LXNsaWRlci1oYXMtdGlja3MuY2RrLWZvY3VzZWQ6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci1oYXMtdGlja3M6aG92ZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKSAubWF0LXNsaWRlci10aWNrc3tvcGFjaXR5OjF9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6ZmxleH0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9Lm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1ie3RyYW5zZm9ybTpzY2FsZSgwKX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JvcmRlci1yYWRpdXM6NTAlIDUwJSAwfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstbW91c2UtZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay10b3VjaC1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZSgxKX0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjB9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXdpZHRoOjRweDt0cmFuc2Zvcm06c2NhbGUoMC41KX0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbHtoZWlnaHQ6NDhweDttaW4td2lkdGg6MTI4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVye2hlaWdodDoycHg7dG9wOjIzcHg7bGVmdDo4cHg7cmlnaHQ6OHB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7aGVpZ2h0OjJweDtib3JkZXItbGVmdC13aWR0aDoycHg7cmlnaHQ6MDt0b3A6MH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgwKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7aGVpZ2h0OjJweDt3aWR0aDoxMDAlO3RyYW5zZm9ybTpzY2FsZVgoMSl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7aGVpZ2h0OjA7b3V0bGluZTpzb2xpZCAycHg7dG9wOjFweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2hlaWdodDoycHg7d2lkdGg6MTAwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcnt3aWR0aDoxMDAlO2hlaWdodDowO3RvcDo1MCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RvcDotMTVweDtyaWdodDotMTVweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3JpZ2h0Oi0xNHB4O3RvcDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7dHJhbnNmb3JtOm5vbmV9Lm1hdC1zbGlkZXItdmVydGljYWx7d2lkdGg6NDhweDttaW4taGVpZ2h0OjEyOHB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7d2lkdGg6MnB4O3RvcDo4cHg7Ym90dG9tOjhweDtsZWZ0OjIzcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7d2lkdGg6MnB4O2JvcmRlci10b3Atd2lkdGg6MnB4O2JvdHRvbTowO2xlZnQ6MH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDoxMDAlO3dpZHRoOjJweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoxMDAlO3dpZHRoOjJweDt0cmFuc2Zvcm06c2NhbGVZKDApfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMSl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjJweDtoZWlnaHQ6MTAwJX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcnt3aWR0aDowO291dGxpbmU6c29saWQgMnB4O2xlZnQ6MXB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7Ym90dG9tOi0xNXB4O2xlZnQ6LTE1cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDowO2xlZnQ6NTAlfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iey13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym90dG9tOi0xNHB4O2xlZnQ6LTQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMjZweCkgc2NhbGUoMC4wMSkgcm90YXRlKC00NWRlZyl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2xlZnQ6MDtyaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGlja3MsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVyLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lfSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEFYKG4pe3JldHVybiFpc05hTihuKSYmaXNGaW5pdGUobil9ZnVuY3Rpb24gX3kobil7cmV0dXJuInQiPT09bi50eXBlWzBdfWZ1bmN0aW9uIFJYKG4sdCl7bGV0IGU7cmV0dXJuIGU9X3kobik/Im51bWJlciI9PXR5cGVvZiB0P01OKG4udG91Y2hlcyx0KXx8TU4obi5jaGFuZ2VkVG91Y2hlcyx0KTpuLnRvdWNoZXNbMF18fG4uY2hhbmdlZFRvdWNoZXNbMF06bixlP3t4OmUuY2xpZW50WCx5OmUuY2xpZW50WX06dm9pZCAwfWZ1bmN0aW9uIE1OKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobltlXS5pZGVudGlmaWVyPT09dClyZXR1cm4gbltlXX12YXIgcXU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLGZuLGZuXX0pLG59KSgpO2Z1bmN0aW9uIGNTZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1zbGlkZXIiLDExKSxJKCJpbnB1dCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uU2xpZGVyQ2hhbmdlLmVtaXQoci52YWx1ZSkpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtfKCJtaW4iLDApKCJtYXgiLGUuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQpKCJ2YWx1ZSIsZS5zY3JvbGxCZWdpbkluZGV4KX19ZnVuY3Rpb24gZFNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw2KSgxLCJidXR0b24iLDcpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uTmF2aWdhdGVMZWZ0LmVtaXQoKSl9KSxUKDIsIiA8ICIpLGcoKSxoKDMsImRpdiIsOCksVCg0KSxnKCksaCg1LCJidXR0b24iLDkpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uTmF2aWdhdGVSaWdodC5lbWl0KCkpfSksVCg2LCIgPiAiKSxnKCksUyg3LGNTZSwxLDMsIm1hdC1zbGlkZXIiLDEwKSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7dig0KSxqTSgiICIsZS5zY3JvbGxCZWdpbkluZGV4LCIgfiAiLGUuc2Nyb2xsQmVnaW5JbmRleCtlLmRpc3BsYXlDb3VudC0xLCIgb2YgIixlLm51bUV4ZWN1dGlvbnMsIiAiKSx2KDMpLF8oIm5nSWYiLGUuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQ+MCl9fXZhciB1U2U9ZnVuY3Rpb24obix0LGUpe3JldHVybltuLHQsZV19O2Z1bmN0aW9uIHBTZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMTQpLEkoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPVgoZSkuaW5kZXg7cmV0dXJuIFEodygyKS5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQuZW1pdChvKSl9KSxoKDEsImRpdiIsMTUpLFQoMiksZygpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj13KDIpO3YoMSksV2koInRpdGxlIixlLm9wX3R5cGUpLF8oIm5nQ2xhc3MiLGdiKDMsdVNlLGUuaXNfZ3JhcGg/ImZ1bmMtZ3JhcGgtZXhlY3V0aW9uIjoiIixpPT09ci5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PyJmb2N1c2VkIjoiIixyLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlc1tpXXx8IiIpKSx2KDEpLEhlKCIgIixlLnNob3J0X29wX3R5cGUsIiAiKX19ZnVuY3Rpb24gZlNlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDEyKSxTKDEscFNlLDMsNywiZGl2IiwxMyksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLF8oIm5nRm9yT2YiLGUuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMpfX1mdW5jdGlvbiBtU2Uobix0KXtpZigxJm4mJihPdCgwKSxQKDEsInRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIiwxNiksa3QoKSksMiZuKXtsZXQgZT13KCk7digxKSxfKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGUuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KX19dmFyIFBYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFjdGl2ZVJ1bklkPW51bGwsdGhpcy5sb2FkaW5nTnVtRXhlY3V0aW9ucz0hMSx0aGlzLm51bUV4ZWN1dGlvbnM9MCx0aGlzLnNjcm9sbEJlZ2luSW5kZXg9MCx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0PTAsdGhpcy5wYWdlU2l6ZT0wLHRoaXMuZGlzcGxheUNvdW50PTAsdGhpcy5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cz1bXSx0aGlzLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcz1bXSx0aGlzLmZvY3VzZWRFeGVjdXRpb25JbmRleD1udWxsLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleD1udWxsLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRhdGE9bnVsbCx0aGlzLm9uTmF2aWdhdGVMZWZ0PW5ldyBGLHRoaXMub25OYXZpZ2F0ZVJpZ2h0PW5ldyBGLHRoaXMub25FeGVjdXRpb25EaWdlc3RDbGlja2VkPW5ldyBGLHRoaXMub25TbGlkZXJDaGFuZ2U9bmV3IEZ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRpbWVsaW5lLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVJ1bklkOiJhY3RpdmVSdW5JZCIsbG9hZGluZ051bUV4ZWN1dGlvbnM6ImxvYWRpbmdOdW1FeGVjdXRpb25zIixudW1FeGVjdXRpb25zOiJudW1FeGVjdXRpb25zIixzY3JvbGxCZWdpbkluZGV4OiJzY3JvbGxCZWdpbkluZGV4IixzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdDoic2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQiLHBhZ2VTaXplOiJwYWdlU2l6ZSIsZGlzcGxheUNvdW50OiJkaXNwbGF5Q291bnQiLGRpc3BsYXlFeGVjdXRpb25EaWdlc3RzOiJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzOiJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLGZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4OiJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEifSxvdXRwdXRzOntvbk5hdmlnYXRlTGVmdDoib25OYXZpZ2F0ZUxlZnQiLG9uTmF2aWdhdGVSaWdodDoib25OYXZpZ2F0ZVJpZ2h0IixvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ6Im9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsb25TbGlkZXJDaGFuZ2U6Im9uU2xpZGVyQ2hhbmdlIn0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMSwidGltZWxpbmUtdGl0bGUiXSxbMSwiZXhlY3V0aW9uLWNvdW50Il0sWzEsInRvcC1sZXZlbC1leGVjdXRpb25zIl0sWyJjbGFzcyIsIm5hdmlnYXRpb24tc2VjdGlvbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJleGVjdXRpb24tdGltZWxpbmUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJuYXZpZ2F0aW9uLXNlY3Rpb24iXSxbIm1hdC1idXR0b24iLCIiLDEsIm5hdmlnYXRpb24tYnV0dG9uLWxlZnQiLDMsImNsaWNrIl0sWzEsIm5hdmlnYXRpb24tcG9zaXRpb24taW5mbyJdLFsibWF0LWJ1dHRvbiIsIiIsMSwibmF2aWdhdGlvbi1idXR0b24tcmlnaHQiLDMsImNsaWNrIl0sWyJjbGFzcyIsInRpbWVsaW5lLXNsaWRlciIsInN0ZXAiLCIxIiwzLCJtaW4iLCJtYXgiLCJ2YWx1ZSIsImlucHV0Iiw0LCJuZ0lmIl0sWyJzdGVwIiwiMSIsMSwidGltZWxpbmUtc2xpZGVyIiwzLCJtaW4iLCJtYXgiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImV4ZWN1dGlvbi10aW1lbGluZSJdLFszLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsaWNrIl0sWzEsImV4ZWN1dGlvbi1kaWdlc3QiLDMsIm5nQ2xhc3MiLCJ0aXRsZSJdLFszLCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIpKDEsImRpdiIsMCksVCgyLCIgUHl0aG9uIEV4ZWN1dGlvbiBUaW1lbGluZSAiKSxoKDMsInNwYW4iLDEpLFQoNCksZygpKCksaCg1LCJkaXYiLDIpLFMoNixkU2UsOCw0LCJkaXYiLDMpLFMoNyxmU2UsMiwxLCJkaXYiLDQpLFMoOCxtU2UsMiwxLCJuZy1jb250YWluZXIiLDUpLGcoKSgpKSwyJmUmJih2KDQpLEhlKCIgKCIsaS5udW1FeGVjdXRpb25zLCIpICIpLHYoMiksXygibmdJZiIsaS5udW1FeGVjdXRpb25zKSx2KDEpLF8oIm5nSWYiLGkubnVtRXhlY3V0aW9ucyksdigxKSxfKCJuZ0lmIixudWxsIT09aS5hY3RpdmVSdW5JZCYmbnVsbCE9PWkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KSl9LGRlcGVuZGVuY2llczpbeW4sbm4sRmUsSVgsSmksRGRdLHN0eWxlczpbIi5leGVjdXRpb24tZGlnZXN0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIGNvbG9yOiAjNDI1MDY2O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgaGVpZ2h0OiAxNXB4O1xuICBwYWRkaW5nOiAxcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDEycHg7XG59XG5cbi5leGVjdXRpb24tZGlnZXN0LmZ1bmMtZ3JhcGgtZXhlY3V0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjN2RiZjU7XG4gIGNvbG9yOiAjNGU1NjY0O1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZm9jdXNlZFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkNGIzO1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuSW5mTmFuQWxlcnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgY29sb3I6ICNmZmY7XG59XG5cblxuLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdOmhvdmVyIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5leGVjdXRpb24tdGltZWxpbmVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogZmxleDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG5cbi50aW1lbGluZS1zbGlkZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGxlZnQ6IDM0MHB4OyBcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogNDBweDtcbn1cblxuICAudGltZWxpbmUtc2xpZGVyIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICByaWdodDogLTQwcHg7XG4gIHdpZHRoOiA4MHB4O1xufVxuXG5cbi5uYXZpZ2F0aW9uLXBvc2l0aW9uLWluZm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbWF4LXdpZHRoOiAyMDBweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5uYXZpZ2F0aW9uLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiA0OHB4O1xuICBsaW5lLWhlaWdodDogNDhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTAwJTtcbn0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGdTZT1bIl9fZm9yd2FyZF8iLCJfX2JhY2t3YXJkXyIsIl9faW5mZXJlbmNlXyJdLE9YPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZSh1bihRbykpLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZSh1bihxKFdFLGk9Pmkuc3RhdGU9PVRlLkxPQURJTkcpKSksdGhpcy5zY3JvbGxCZWdpbkluZGV4JD10aGlzLnN0b3JlLnBpcGUodW4oZnkpKSx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0JD10aGlzLnN0b3JlLnBpcGUodW4ocShHdSxMZywoaSxyKT0+TWF0aC5tYXgoMCxpLXIpKSkpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZSh1bihOZykpLHRoaXMuZGlzcGxheUNvdW50JD10aGlzLnN0b3JlLnBpcGUodW4oTGcpKSx0aGlzLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJD10aGlzLnN0b3JlLnBpcGUodW4ocShHWSxpPT5pLm1hcChyPT5mdW5jdGlvbihuLHQ9MSl7aWYoIW4pcmV0dXJue29wX3R5cGU6IihOL0EpIixzaG9ydF9vcF90eXBlOiIuLiIsaXNfZ3JhcGg6ITF9O2xldCBlPWdTZS5maWx0ZXIoaT0+bi5vcF90eXBlLnN0YXJ0c1dpdGgoaSkpO2lmKGUubGVuZ3RoKXtsZXQgaT1uLm9wX3R5cGUuc2xpY2UoZVswXS5sZW5ndGgpO3JldHVybntvcF90eXBlOm4ub3BfdHlwZSxzaG9ydF9vcF90eXBlOmkuc2xpY2UoMCx0KSxpc19ncmFwaDohMH19cmV0dXJue29wX3R5cGU6bi5vcF90eXBlLHNob3J0X29wX3R5cGU6bi5vcF90eXBlLnNsaWNlKDAsdCksaXNfZ3JhcGg6ITF9fShyKSkpKSksdGhpcy5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMkPXRoaXMuc3RvcmUucGlwZSh1bigkWSkpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JD10aGlzLnN0b3JlLnBpcGUodW4oaE4pKSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkPXRoaXMuc3RvcmUucGlwZSh1bihlWCkpLHRoaXMubnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKHVuKEd1KSl9b25OYXZpZ2F0ZUxlZnQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEVnKCkpfW9uTmF2aWdhdGVSaWdodCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goVGcoKSl9b25FeGVjdXRpb25EaWdlc3RDbGlja2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSWcoe2Rpc3BsYXlJbmRleDplfSkpfW9uU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRGcoe2luZGV4OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSJdXSxkZWNsczoxMix2YXJzOjMzLGNvbnN0czpbWzMsImFjdGl2ZVJ1bklkIiwibG9hZGluZ051bUV4ZWN1dGlvbnMiLCJudW1FeGVjdXRpb25zIiwic2Nyb2xsQmVnaW5JbmRleCIsInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IiwicGFnZVNpemUiLCJkaXNwbGF5Q291bnQiLCJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLCJvbk5hdmlnYXRlTGVmdCIsIm9uTmF2aWdhdGVSaWdodCIsIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsIm9uU2xpZGVyQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJ0aW1lbGluZS1jb21wb25lbnQiLDApLEkoIm9uTmF2aWdhdGVMZWZ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVMZWZ0KCl9KSgib25OYXZpZ2F0ZVJpZ2h0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVSaWdodCgpfSkoIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25FeGVjdXRpb25EaWdlc3RDbGlja2VkKG8pfSkoIm9uU2xpZGVyQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNsaWRlckNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksaig5LCJhc3luYyIpLGooMTAsImFzeW5jIiksaigxMSwiYXN5bmMiKSxnKCkpLDImZSYmXygiYWN0aXZlUnVuSWQiLFcoMSwxMSxpLmFjdGl2ZVJ1bklkJCkpKCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsVygyLDEzLGkubG9hZGluZ051bUV4ZWN1dGlvbnMkKSkoIm51bUV4ZWN1dGlvbnMiLFcoMywxNSxpLm51bUV4ZWN1dGlvbnMkKSkoInNjcm9sbEJlZ2luSW5kZXgiLFcoNCwxNyxpLnNjcm9sbEJlZ2luSW5kZXgkKSkoInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixXKDUsMTksaS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQpKSgicGFnZVNpemUiLFcoNiwyMSxpLnBhZ2VTaXplJCkpKCJkaXNwbGF5Q291bnQiLFcoNywyMyxpLmRpc3BsYXlDb3VudCQpKSgiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLFcoOCwyNSxpLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJCkpKCJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLFcoOSwyNyxpLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQpKSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixXKDEwLDI5LGkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCkpKCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4IixXKDExLDMxLGkuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQpKX0sZGVwZW5kZW5jaWVzOltQWCxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gdlNlKG4sdCl7MSZuJiZQKDAsInRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIil9ZnVuY3Rpb24geVNlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDMpLFAoMSwidGYtZGVidWdnZXItdjItYWxlcnRzIiksaCgyLCJkaXYiLDQpLFAoMywidGYtZGVidWdnZXItdjItdGltZWxpbmUiKSg0LCJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaCIpLGcoKSxQKDUsInRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnMiKSxnKCksaCg2LCJkaXYiLDUpLFAoNywidGYtZGVidWdnZXItdjItc291cmNlLWZpbGVzIikoOCwidGYtZGVidWdnZXItdjItc3RhY2stdHJhY2UiKSxnKCkpfXZhciBrWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5ydW5zPXt9LHRoaXMucnVuSWRzPVtdLHRoaXMuYWN0aXZlUnVuSWQ9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWdnZXItY29tcG9uZW50Il1dLGlucHV0czp7cnVuczoicnVucyIscnVuSWRzOiJydW5JZHMiLGFjdGl2ZVJ1bklkOiJhY3RpdmVSdW5JZCJ9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImRlYnVnZ2VyLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImRhdGFBdmFpbGFibGUiLCIiXSxbMSwidG9wLXNlY3Rpb24iXSxbMSwidG9wLWNlbnRlci1zZWN0aW9uIl0sWzEsImJvdHRvbS1zZWN0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoaCgwLCJkaXYiLDApLFMoMSx2U2UsMSwwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIsMSksUygyLHlTZSw5LDAsIm5nLXRlbXBsYXRlIixudWxsLDIsV3QpLGcoKSksMiZlKXtsZXQgcj1pdCgzKTt2KDEpLF8oIm5nSWYiLDA9PT1pLnJ1bklkcy5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W2FYLEZlLGRYLGZYLGhYLHdYLEVYLE9YXSxzdHlsZXM6WyIuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtoZWlnaHQ6MzQlO3BhZGRpbmctdG9wOjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9LmRlYnVnZ2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0udG9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjY2JTtwYWRkaW5nOjZweCAwfXRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMHB4O21pbi13aWR0aDoxNjBweDt3aWR0aDpjYWxjKDE1JSAtIDExcHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fXRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH10Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjcwJX10Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7bWluLXdpZHRoOjU0MHB4O3dpZHRoOjU0MHB4fS50b3AtY2VudGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmF1dG87d2lkdGg6NTUlfXRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEZYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucnVucyQ9dGhpcy5zdG9yZS5waXBlKHVuKEFmKSksdGhpcy5ydW5zSWRzJD10aGlzLnN0b3JlLnBpcGUodW4ocShBZixpPT5PYmplY3Qua2V5cyhpKSkpKSx0aGlzLmFjdGl2ZVJ1bklkJD10aGlzLnN0b3JlLnBpcGUodW4oUW8pKX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQ0UoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1FKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjIiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicnVucyIsInJ1bklkcyIsImFjdGl2ZVJ1bklkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJkZWJ1Z2dlci1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJl8oInJ1bnMiLFcoMSwzLGkucnVucyQpKSgicnVuSWRzIixXKDIsNSxpLnJ1bnNJZHMkKSkoImFjdGl2ZVJ1bklkIixXKDMsNyxpLmFjdGl2ZVJ1bklkJCkpfSxkZXBlbmRlbmNpZXM6W2tYLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXX0pLG59KSgpLHRUPSJkZWJ1Z2dlci12MiI7ZnVuY3Rpb24gd04obix0LGUsaSxyKXtpZihlPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFnZVNpemU6ICR7ZX1gKTtpZih0PmkpdGhyb3cgbmV3IEVycm9yKGBlbmQgaW5kZXggKCR7dH0pIGV4Y2VlZHMgdG90YWwgbnVtYmVyIG9mIGl0ZW1zICgke2l9KWApO2lmKHQtbj5lKXRocm93IG5ldyBFcnJvcigiYmVnaW4tZW5kIHNwYW4gZXhjZWVkcyBwYWdlIHNpemUsIHdoaWNoIGlzIG5vdCBhbGxvd2VkIik7bGV0IG89W10scz1NYXRoLmZsb29yKG4vZSk7KCEocyBpbiByKXx8cltzXTxlJiZzKmUrcltzXTxpKSYmby5wdXNoKHMpO2xldCBhPU1hdGguZmxvb3IoKHQtMSkvZSk7cmV0dXJuIGEhPT1zJiYoIShhIGluIHIpfHxhKmUrclthXTx0JiZ0PGkpJiZvLnB1c2goYSksb312YXIgQlg9KCgpPT57Y2xhc3MgbntvbkRlYnVnZ2VyRGF0YVBvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGVpKENFKSxKbihlPT5mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG4ucGlwZShmdW5jdGlvbihuKXtyZXR1cm4gcXQoKHQsZSk9PntsZXQgaSxvLHI9ITEscz0hMSxhPSExLGw9KCk9PmEmJnMmJihlLmNvbXBsZXRlKCksITApLGQ9KCk9PnthPSExLGk9dC5zdWJzY3JpYmUoVnQoZSx2b2lkIDAsKCk9PnthPSEwLCFsKCkmJihvfHwobz1uZXcgSWUsbihvKS5zdWJzY3JpYmUoVnQoZSwoKT0+e2k/ZCgpOnI9ITB9LCgpPT57cz0hMCxsKCl9KSkpLG8pLm5leHQoKX0pKSxyJiYoaS51bnN1YnNjcmliZSgpLGk9bnVsbCxyPSExLGQoKSl9O2QoKX0pfShpPT5pLnBpcGUoQnQodCksa20oKFsscl0pPT5uYShyKSkpKSxvdChlKSxOKCgpPT57fSkpfShIdChlKSx0aGlzLnN0b3JlLnNlbGVjdChWWSkucGlwZShOKGk9PmZ1bmN0aW9uKG4pe3JldHVybiBuPjZlND82ZTQ6bj40ZTM/bjoyZTN9KGkpKSksdGhpcy5hY3Rpb25zJC5waXBlKGVpKE1FKSkpKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChheSgpKSksTigoKT0+e30pKX1vbkNvcmVSZWxvYWQoKXtyZXR1cm4gdG4odGhpcy5hY3Rpb25zJC5waXBlKGVpKEZzLGNzKSksdGhpcy5hY3Rpb25zJC5waXBlKGVpKHdjKSkucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChsTikpLGtlKChbLGVdKT0+ZS5zdGF0ZT09PVRlLk5PVF9MT0FERUR8fGUuc3RhdGU9PT1UZS5GQUlMRUQmJm51bGw9PT1lLmxhc3RMb2FkZWRUaW1lSW5NcykpKS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFdvKSksa2UoKFssZV0pPT5lPT09dFQpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGF5KCkpKSxOKCgpPT57fSkpfWxvYWREZWJ1Z2dlclJ1bnMoZSl7cmV0dXJuIGUucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChsTikpLGtlKChbLHtzdGF0ZTppfV0pPT5pIT09VGUuTE9BRElORyksTnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2god0UoKSkpLGhuKCgpPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hSdW5zKCkucGlwZShOdChpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChTRSh7cnVuczppfSkpfSksTigoKT0+e30pKSkpfWNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KEFmKSx0aGlzLnN0b3JlLnNlbGVjdChXRSkpLGtlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PVRlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKERFKCkpKSxobigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChJRSh7bnVtRXhlY3V0aW9uczphLm51bV9kaWdlc3RzfSkpfSksTigoKT0+e30pKX0pKX1jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KEFmKSx0aGlzLnN0b3JlLnNlbGVjdChXWSkpLGtlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PVRlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKE9FKCkpKSxobigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKHIsMCwwKS5waXBlKE50KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGtFKHtudW1HcmFwaEV4ZWN1dGlvbnM6YS5udW1fZGlnZXN0c30pKX0pLE4oKCk9Pnt9KSl9KSl9Y3JlYXRlTnVtQWxlcnRzQW5kQnJlYWtkb3duTG9hZGVyKGUpe3JldHVybiBlLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QoQWYpLHRoaXMuc3RvcmUuc2VsZWN0KGNOKSksa2UoKFssaSxyXSk9Pk9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiZyLnN0YXRlIT09VGUuTE9BRElORyksTnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2gobHkoKSkpLGhuKChbLGldKT0+e2xldCByPU9iamVjdC5rZXlzKGkpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hBbGVydHMociwwLDApLnBpcGUoTnQoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goRUUoe251bUFsZXJ0czphLm51bV9hbGVydHMsYWxlcnRzQnJlYWtkb3duOmEuYWxlcnRzX2JyZWFrZG93bn0pKX0pLE4oKCk9Pnt9KSl9KSl9Y3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRldGVjdG9yKGUpe3JldHVybiBlLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QoR3UpLHRoaXMuc3RvcmUuc2VsZWN0KHB5KSksa2UoKFssaSxyXSk9Pmk+MCYmMD09PU9iamVjdC5rZXlzKHIucGFnZUxvYWRlZFNpemVzKS5sZW5ndGgpLE4oKCk9Pnt9KSl9Y3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRpZ2VzdChlKXtyZXR1cm4gZS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KEd1KSx0aGlzLnN0b3JlLnNlbGVjdChRbyksdGhpcy5zdG9yZS5zZWxlY3QoTmcpKSxrZSgoWywsaV0pPT5udWxsIT09aSksTigoWyxpLHIsb10pPT4oe2JlZ2luOjAsZW5kOk1hdGgubWluKGksbykscnVuSWQ6cn0pKSl9b25FeGVjdXRpb25TY3JvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGVpKEVnLFRnLERnKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChRbyksdGhpcy5zdG9yZS5zZWxlY3QoZnkpLHRoaXMuc3RvcmUuc2VsZWN0KEd1KSx0aGlzLnN0b3JlLnNlbGVjdChMZyksdGhpcy5zdG9yZS5zZWxlY3QoTmcpKSxrZSgoW2VdKT0+bnVsbCE9PWUpLE4oKFssZSxpLHIsbyxzXSk9Pih7cnVuSWQ6ZSxiZWdpbjppLGVuZDpNYXRoLm1pbihyLGkrbykscGFnZVNpemU6c30pKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChweSkpLE4oKFtlLGldKT0+KHtwcm9wczplLGxvYWRlZDppLG1pc3NpbmdQYWdlczp3TihlLmJlZ2luLGUuZW5kLGUucGFnZVNpemUsaS5udW1FeGVjdXRpb25zLGkucGFnZUxvYWRlZFNpemVzKX0pKSxrZSgoe21pc3NpbmdQYWdlczplfSk9PmUubGVuZ3RoPjApLE4oKHtwcm9wczplLGxvYWRlZDppLG1pc3NpbmdQYWdlczpyfSk9PntsZXR7cnVuSWQ6byxwYWdlU2l6ZTpzfT1lO3JldHVybntiZWdpbjpyWzBdKnMsZW5kOk1hdGgubWluKGkubnVtRXhlY3V0aW9ucywocltyLmxlbmd0aC0xXSsxKSpzKSxydW5JZDpvfX0pKX1jcmVhdGVFeGVjdXRpb25EaWdlc3RMb2FkZXIoZSl7cmV0dXJuIGUucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChweSkpLGtlKChbe2JlZ2luOmksZW5kOnJ9LG9dKT0+cj5pJiYhZnVuY3Rpb24obix0LGUpe2lmKHQ+PWUpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBiZWdpbiB0byBiZSBsZXNzIHRoYW4gZW5kLCBidXQgZ290IGJlZ2luPSR7dH0sIGVuZD0ke2V9YCk7cmV0dXJuLTEhPT1uLmZpbmRJbmRleChpPT5pLmJlZ2luPj10JiZpLmVuZDw9ZSl9KG8ubG9hZGluZ1JhbmdlcyxpLHIpKSxOdCgoW3tiZWdpbjppLGVuZDpyfV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChBRSh7YmVnaW46aSxlbmQ6cn0pKX0pLGhuKChbe3J1bklkOmksYmVnaW46cixlbmQ6b31dKT0+dGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhpLHIsbykucGlwZShOdChzPT57dGhpcy5zdG9yZS5kaXNwYXRjaChSRShzKSl9KSxOKCgpPT57fSkpKSl9b25FeGVjdXRpb25EaWdlc3RGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShlaShJZyksQnQodGhpcy5zdG9yZS5zZWxlY3QoUW8pLHRoaXMuc3RvcmUuc2VsZWN0KGdOKSx0aGlzLnN0b3JlLnNlbGVjdChmeSkpLE4oKFtlLGkscixvXSk9Pih7YWN0aXZlUnVuSWQ6aSxsb2FkZWRFeGVjdXRpb25EYXRhOnIsZm9jdXNJbmRleDpvK2UuZGlzcGxheUluZGV4fSkpKX1jcmVhdGVFeGVjdXRpb25EYXRhQW5kU3RhY2tGcmFtZXNMb2FkZXIoZSl7cmV0dXJuIGUucGlwZShrZSgoe2FjdGl2ZVJ1bklkOmksbG9hZGVkRXhlY3V0aW9uRGF0YTpyLGZvY3VzSW5kZXg6b30pPT5udWxsIT09aSYmbnVsbCE9PW8mJnZvaWQgMD09PXJbb10pLGhuKCh7YWN0aXZlUnVuSWQ6aSxmb2N1c0luZGV4OnJ9KT0+e2xldCBvPXIscz1vKzE7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRhdGEoaSxvLHMpLnBpcGUoTnQoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goUEUoYSkpfSksTihhPT4oe2V4ZWN1dGlvbkRhdGE6YSxiZWdpbjpvLGVuZDpzfSkpKX0pLE4oKHtleGVjdXRpb25EYXRhOml9KT0+aS5leGVjdXRpb25zWzBdKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChRbyksdGhpcy5zdG9yZS5zZWxlY3QoX04pKSxrZSgoW2kscixvXSk9PntpZihudWxsPT09cilyZXR1cm4hMTtmb3IobGV0IHMgb2YgaS5zdGFja19mcmFtZV9pZHMpaWYodm9pZCAwPT09b1tzXSlyZXR1cm4hMDtyZXR1cm4hMX0pLGhuKChbaSxyXSk9PntsZXQgbz1pLnN0YWNrX2ZyYW1lX2lkcztyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoU3RhY2tGcmFtZXMocixvKS5waXBlKE50KHM9PntsZXQgYT17fTtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoOysrbClhW29bbF1dPXMuc3RhY2tfZnJhbWVzW2xdO3RoaXMuc3RvcmUuZGlzcGF0Y2goY3koe3N0YWNrRnJhbWVzOmF9KSl9KSxOKCgpPT57fSkpfSkpfW9uR3JhcGhFeGVjdXRpb25TY3JvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGVpKEFnKSx3cigxMDApLEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFFvKSx0aGlzLnN0b3JlLnNlbGVjdChteSksdGhpcy5zdG9yZS5zZWxlY3QocVkpKSxrZSgoWyxlLGldKT0+bnVsbCE9PWUmJmk+MCksTigoWyxlLGkscl0pPT4oe3J1bklkOmUsbnVtR3JhcGhFeGVjdXRpb25zOmksc2Nyb2xsQmVnaW5JbmRleDpyfSkpLEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFhZKSx0aGlzLnN0b3JlLnNlbGVjdChZWSksdGhpcy5zdG9yZS5zZWxlY3QoUVkpLHRoaXMuc3RvcmUuc2VsZWN0KFpZKSksTigoW3tydW5JZDplLG51bUdyYXBoRXhlY3V0aW9uczppLHNjcm9sbEJlZ2luSW5kZXg6cn0sbyxzLGEsbF0pPT57bGV0IGM9d04ocixNYXRoLm1pbihyK3MsaSksbyxpLGwpO3JldHVybiBjPWMuZmlsdGVyKGQ9Pi0xPT09YS5pbmRleE9mKGQpKSx7cnVuSWQ6ZSxtaXNzaW5nUGFnZXM6YyxwYWdlU2l6ZTpvLG51bUdyYXBoRXhlY3V0aW9uczppfX0pKX1sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyhlKXtyZXR1cm4gZS5waXBlKGtlKCh7bWlzc2luZ1BhZ2VzOml9KT0+aS5sZW5ndGg+MCksTnQoKHttaXNzaW5nUGFnZXM6aX0pPT57aS5mb3JFYWNoKHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEZFKHtwYWdlSW5kZXg6cn0pKX0pfSksaG4oKHtydW5JZDppLG1pc3NpbmdQYWdlczpyLHBhZ2VTaXplOm8sbnVtR3JhcGhFeGVjdXRpb25zOnN9KT0+e2xldCBhPXJbMF0qbyxsPU1hdGgubWluKChyW3IubGVuZ3RoLTFdKzEpKm8scyk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YShpLGEsbCkucGlwZShOdChjPT57dGhpcy5zdG9yZS5kaXNwYXRjaChORShjKSl9KSxOKCgpPT57fSkpfSkpfWxvYWRHcmFwaE9wSW5mbygpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoZWkoUGcsUmcpLEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFFvKSx0aGlzLnN0b3JlLnNlbGVjdCh0WCkpLGtlKChbZSxpLHJdKT0+e2xldHtncmFwaF9pZDpvLG9wX25hbWU6c309ZTtyZXR1cm4hKG51bGw9PT1pfHx2b2lkIDAhPT1yW29dJiZyW29dLmhhcyhzKSYmKHJbb10uZ2V0KHMpPT09VGUuTE9BRElOR3x8cltvXS5nZXQocyk9PT1UZS5MT0FERUQpKX0pLE50KChbe2dyYXBoX2lkOmUsb3BfbmFtZTppfV0pPT50aGlzLnN0b3JlLmRpc3BhdGNoKExFKHtncmFwaF9pZDplLG9wX25hbWU6aX0pKSksaG4oKFtlLGldKT0+e2xldHtncmFwaF9pZDpyLG9wX25hbWU6b309ZTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoR3JhcGhPcEluZm8oaSxyLG8pLnBpcGUoTnQocz0+dGhpcy5zdG9yZS5kaXNwYXRjaChCRSh7Z3JhcGhPcEluZm9SZXNwb25zZTpzfSkpKSxOKHM9Pih7cnVuSWQ6aSxzdGFja0ZyYW1lSWRzOnMuc3RhY2tfZnJhbWVfaWRzfSkpKX0pKX1sb2FkR3JhcGhPcFN0YWNrRnJhbWVzKGUpe3JldHVybiBlLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QoX04pKSxOKChbe3J1bklkOmksc3RhY2tGcmFtZUlkczpyfSxvXSk9Pih7cnVuSWQ6aSxtaXNzaW5nU3RhY2tGcmFtZUlkczpyLmZpbHRlcihhPT52b2lkIDA9PT1vW2FdKX0pKSxrZSgoe3J1bklkOmksbWlzc2luZ1N0YWNrRnJhbWVJZHM6cn0pPT5udWxsIT09aSYmci5sZW5ndGg+MCksaG4oKHtydW5JZDppLG1pc3NpbmdTdGFja0ZyYW1lSWRzOnJ9KT0+dGhpcy5kYXRhU291cmNlLmZldGNoU3RhY2tGcmFtZXMoaSxyKS5waXBlKE50KG89PntsZXQgcz17fTtmb3IobGV0IGE9MDthPHIubGVuZ3RoOysrYSlzW3JbYV1dPW8uc3RhY2tfZnJhbWVzW2FdO3RoaXMuc3RvcmUuZGlzcGF0Y2goY3koe3N0YWNrRnJhbWVzOnN9KSl9KSxOKCgpPT57fSkpKSl9b25BbGVydFR5cGVGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShlaShTZyksQnQodGhpcy5zdG9yZS5zZWxlY3QoUW8pLHRoaXMuc3RvcmUuc2VsZWN0KEdFKSx0aGlzLnN0b3JlLnNlbGVjdCh6WSksdGhpcy5zdG9yZS5zZWxlY3QoVVkpLHRoaXMuc3RvcmUuc2VsZWN0KGNOKSksa2UoKFssZSxpLHIsbyxzXSk9Pm51bGwhPT1lJiZudWxsIT09aSYmcj4wJiYobnVsbD09PW98fE9iamVjdC5rZXlzKG8pLmxlbmd0aDxyKSYmcy5zdGF0ZSE9PVRlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGx5KCkpKSxobigoWyxlLGldKT0+dGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKGUsMCwtMSxpKSksTnQoKHtudW1fYWxlcnRzOmUsYWxlcnRzX2JyZWFrZG93bjppLGFsZXJ0X3R5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFRFKHtudW1BbGVydHM6ZSxhbGVydHNCcmVha2Rvd246aSxhbGVydFR5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSkpfSkpfWZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGUpe3JldHVybiBlLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QoTmcpLHRoaXMuc3RvcmUuc2VsZWN0KExnKSx0aGlzLnN0b3JlLnNlbGVjdChHdSksdGhpcy5zdG9yZS5zZWxlY3QocHkpLHRoaXMuc3RvcmUuc2VsZWN0KFFvKSksTigoW2kscixvLHMsYSxsXSk9PntsZXQgZD1pLmFsZXJ0c1swXS5leGVjdXRpb25faW5kZXgsdT13TihNYXRoLm1heCgwLGQtTWF0aC5mbG9vcihvLzIpKSxNYXRoLm1pbihkK01hdGguZmxvb3Ioby8yKSxzKSxyLHMsYS5wYWdlTG9hZGVkU2l6ZXMpO3JldHVybiAwPT09dS5sZW5ndGg/e3J1bklkOmwsYmVnaW46MCxlbmQ6MH06e3J1bklkOmwsYmVnaW46dVswXSpyLGVuZDpNYXRoLm1pbihhLm51bUV4ZWN1dGlvbnMsKHVbdS5sZW5ndGgtMV0rMSkqcil9fSkpfWxvYWRTb3VyY2VGaWxlTGlzdChlKXtyZXR1cm4gZS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFFvKSx0aGlzLnN0b3JlLnNlbGVjdChpWCkpLGtlKChbLGkscl0pPT5udWxsIT09aSYmci5zdGF0ZSE9PVRlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKFZFKCkpKSxobigoWyxpXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNvdXJjZUZpbGVMaXN0KGkpLnBpcGUoTnQocj0+e2xldCBvPVtdO3IuZm9yRWFjaCgoW3MsYV0pPT57by5wdXNoKHtob3N0X25hbWU6cyxmaWxlX3BhdGg6YX0pfSksdGhpcy5zdG9yZS5kaXNwYXRjaChIRSh7c291cmNlRmlsZXM6b30pKX0pLE4oKCk9Pnt9KSkpKX1vblNvdXJjZUZpbGVGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShlaShPZyksQnQodGhpcy5zdG9yZS5zZWxlY3QoUW8pLHRoaXMuc3RvcmUuc2VsZWN0KGJOKSx0aGlzLnN0b3JlLnNlbGVjdChYRSkpLE4oKFtlLGkscixvXSk9Pih7cnVuSWQ6aSxzdGFja0ZyYW1lOmUuc3RhY2tGcmFtZSxmaWxlSW5kZXg6cixmaWxlQ29udGVudDpvfSkpLGtlKCh7cnVuSWQ6ZSxmaWxlQ29udGVudDppfSk9Pm51bGwhPT1lJiZudWxsIT09aSYmaS5sb2FkU3RhdGU9PT1UZS5OT1RfTE9BREVEKSxOdCgoe3N0YWNrRnJhbWU6ZX0pPT50aGlzLnN0b3JlLmRpc3BhdGNoKHpFKHtob3N0X25hbWU6ZS5ob3N0X25hbWUsZmlsZV9wYXRoOmUuZmlsZV9wYXRofSkpKSxobigoe2ZpbGVJbmRleDplLHJ1bklkOml9KT0+dGhpcy5kYXRhU291cmNlLmZldGNoU291cmNlRmlsZShpLGUpLnBpcGUoTnQocj0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goVUUocikpfSksTigoKT0+e30pKSkpfWNvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuZGF0YVNvdXJjZT1yLHRoaXMubG9hZERhdGEkPWFyKCgpPT57bGV0IG89dGhpcy5sb2FkRGVidWdnZXJSdW5zKHRuKHRoaXMub25EZWJ1Z2dlckRhdGFQb2xsKCksdGhpcy5vbkNvcmVSZWxvYWQoKSkpLnBpcGUoQ3MoKSkscz10aGlzLmxvYWRTb3VyY2VGaWxlTGlzdChvKSxhPXRoaXMuY3JlYXRlTnVtRXhlY3V0aW9uTG9hZGVyKG8pLGw9dGhpcy5jcmVhdGVOdW1BbGVydHNBbmRCcmVha2Rvd25Mb2FkZXIobyksYz10aGlzLm9uQWxlcnRUeXBlRm9jdXNlZCgpLGQ9dGhpcy5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHNGb3JBbGVydFR5cGVGb2N1cyhjKSx1PXRoaXMuY3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRldGVjdG9yKGEpLnBpcGUoQ3MoKSkscD10aGlzLmNyZWF0ZUV4ZWN1dGlvbkRpZ2VzdExvYWRlcih0bih0aGlzLm9uRXhlY3V0aW9uU2Nyb2xsKCksdGhpcy5jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGlnZXN0KHUpLGQpKSxmPXRoaXMuY3JlYXRlRXhlY3V0aW9uRGF0YUFuZFN0YWNrRnJhbWVzTG9hZGVyKHRuKHRoaXMub25FeGVjdXRpb25EaWdlc3RGb2N1c2VkKCksdS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFFvKSx0aGlzLnN0b3JlLnNlbGVjdChnTikpLE4oKFsseCxSXSk9Pih7YWN0aXZlUnVuSWQ6eCxsb2FkZWRFeGVjdXRpb25EYXRhOlIsZm9jdXNJbmRleDowfSkpKSkpO3JldHVybiB0bihsLHAsZix0aGlzLmNyZWF0ZU51bUdyYXBoRXhlY3V0aW9uTG9hZGVyKG8pLHMsdGhpcy5vblNvdXJjZUZpbGVGb2N1c2VkKCksdGhpcy5sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyh0aGlzLm9uR3JhcGhFeGVjdXRpb25TY3JvbGwoKSksdGhpcy5sb2FkR3JhcGhPcFN0YWNrRnJhbWVzKHRoaXMubG9hZEdyYXBoT3BJbmZvKCkpKS5waXBlKE4oKCk9Pih7fSkpKX0se2Rpc3BhdGNoOiExfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoeG8pLGsoQWUpLGsoeEUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxWWD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGVdfSksbn0pKCksSFg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlXX0pLG59KSgpLG5UPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZV19KSxufSkoKSx6WD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsblQsTWRdfSksbn0pKCksVVg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLFl1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxpVD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsWXVdfSksbn0pKCksalg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLGlUXX0pLG59KSgpLEdYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxpVF19KSxufSkoKSxXWD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsblRdfSksbn0pKCkscVg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLFdYLGNpLHF1XX0pLG59KSgpLFlYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltWWCxQZSxHYSx6WCxIWCxVWCxqWCxHWCxPWSxxWCxUci5mb3JGZWF0dXJlKGR5LEJZKSx0by5mb3JGZWF0dXJlKFtCWF0pLEJjLmZvclBsdWdpbih0VCxGWCldfSksbn0pKCksclQ9X2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIFBhbmUgQ2xvc2VkIiksb1Q9X2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIFBhbmUgVG9nZ2xlZCIpLHNUPV9lKCJbTWV0cmljc10gU2xpZGUgb3V0IHNldHRpbmdzIG1lbnUgdG9nZ2xlZCIpLGFUPV9lKCJbTWV0cmljc10gVXNlciByZXF1ZXN0ZWQgdG8gb3BlbiB0aGUgc2xpZGUgb3V0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxsVD1fZSgiW01ldHJpY3NdIFVzZXIgY2hhbmdlZCB0aGUgdGFiIGluIHRoZSB0YWJsZSBlZGl0b3IiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxjVD1fZSgiW01ldHJpY3NdIFNsaWRlIG91dCBzZXR0aW5ncyBtZW51IGNsb3NlZCIpLGRUPV9lKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgUmVxdWVzdGVkIiksdVQ9X2UoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxwVD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIEZhaWxlZCIpLGZUPV9lKCJbTWV0cmljc10gTWV0cmljcyBDYXJkIFN0YXRlIFVwZGF0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCZz1fZSgiW01ldHJpY3NdIE1ldHJpY3MgQ2FyZCBGdWxsIFNpemUgVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG1UPV9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBDaGFuZ2UgVG9vbHRpcCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGhUPShfZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgVG9nZ2xlIFNob3cgRGF0YSBEb3dubG9hZCIpLF9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJZ25vcmUgT3V0bGllciIpKSxnVD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgWCBBeGlzIFR5cGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfVD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgQ2FyZCBXaWR0aCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGJUPV9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFJlc2V0IENhcmQgV2lkdGgiKSx2VD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgU2NhbGFyIFNtb290aGluZyIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHlUPV9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFBhcnRpdGlvbiBOb24gTW9ub3RvbmljIFggVG9nZ2xlZCIpLHhUPV9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBJbWFnZSBCcmlnaHRuZXNzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQ1Q9X2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIENvbnRyYXN0Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTVQ9X2UoIltNZXRyaWNzXSBJbWFnZSBCcmlnaHRuZXNzIFNldHRpbmcgUmVzZXQiKSx3VD1fZSgiW01ldHJpY3NdIEltYWdlIENvbnRyYXN0IFNldHRpbmcgUmVzZXQiKSxTVD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBUb2dnbGUgSW1hZ2UgU2hvdyBBY3R1YWwgU2l6ZSIpLEVUPV9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBIaXN0b2dyYW0gTW9kZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRUPV9lKCJbTWV0cmljc10gTXVsdGlwbGUgVGltZSBTZXJpZXMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRFQ9X2UoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXF1ZXN0IEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLElUPV9lKCJbTWV0cmljc10gRmV0Y2ggVGltZSBTZXJpZXMgUmVzcG9uc2UgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVmc9X2UoIltNZXRyaWNzXSBDYXJkIFZpc2liaWxpdHkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEFUPV9lKCJbTWV0cmljc10gQ2FyZCBTdGVwIFNsaWRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUlQ9X2UoIltNZXRyaWNzXSBUYWcgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQVD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIEdyb3VwIEV4cGFuc2lvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSGc9X2UoIltNZXRyaWNzXSBDYXJkIFBpbiBTdGF0ZSBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksT1Q9X2UoIltNZXRyaWNzXSBUb2dnbGUgVmlzaWJsZSBQbHVnaW4iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrVD1fZSgiW01ldHJpY3NdIFRvZ2dsZSBTaG93IEFsbCBQbHVnaW5zIiksa2Y9X2UoIltNZXRyaWNzXSBUaW1lIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYnk9X2UoIltNZXRyaWNzXSBDYXJkIFVzZXIgVmlldyBCb3ggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZUPV9lKCJbTWV0cmljc10gTGlua2VkIFRpbWUgRW5hYmxlIFRvZ2dsZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFhYPV9lKCJbTWV0cmljc10gU29ydGluZyBEYXRhIFRhYmxlIEJ5IEhlYWRlciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHpnPV9lKCJbTWV0cmljc10gRGF0YSB0YWJsZSBjb2x1bW5zIGVkaXRlZCBpbiBlZGl0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxVZz1fZSgiW01ldHJpY3NdIERhdGEgdGFibGUgY29sdW1uIHRvZ2dsZWQgaW4gZWRpdCBtZW51IG9yIGRlbGV0ZSBidXR0b24gY2xpY2tlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLElkPV9lKCJbTWV0cmljc10gVGltZSBTZWxlY3RvciBFbmFibGUgVG9nZ2xlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTlQ9X2UoIltNZXRyaWNzXSBSYW5nZSBTZWxlY3Rpb24gVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFFYPV9lKCJbTWV0cmljc10gSGlkZSBFbXB0eSBDYXJkcyBDaGFuZ2VkIik7ZnVuY3Rpb24gdnkobix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpZVtpXT10KG5baV0saSk7cmV0dXJuIGV9dmFyIHFzPSgoKT0+KGZ1bmN0aW9uKG4pe24uTk9ORT0ibm8gYWZmb3JkYW5jZSIsbi5FWFRFTkRFRF9MSU5FPSJleHRlbmRlZExpbmUiLG4uRk9CPSJmb2IiLG4uRk9CX1JFTU9WRUQ9ImZvYlJlbW92ZWQiLG4uRk9CX1RFWFQ9ImZvYlRleHQiLG4uSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFPSJoaXN0b2dyYW1DbGlja1RvUmFuZ2UiLG4uRk9CX0FEREVEPSJmb2JBZGRlZCJ9KHFzfHwocXM9e30pKSxxcykpKCksWXM9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJubyB0b2dnbGUgYWZmb3JkYW5jZSIsbi5GT0JfREVTRUxFQ1Q9ImZvYkRlc2VsZWN0IixuLkNIRUNLX0JPWD0iY2hlY2tCb3gifShZc3x8KFlzPXt9KSksWXMpKSgpLGZzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5IT1JJWk9OVEFMPTBdPSJIT1JJWk9OVEFMIixuW24uVkVSVElDQUw9MV09IlZFUlRJQ0FMIn0oZnN8fChmcz17fSkpLGZzKSkoKTtmdW5jdGlvbiBMVChuKXtsZXQgdD1uZXcgTWFwLGU9bi5zbGljZSgpLnNvcnQoKGkscik9Pnl5KGkudGFnLHIudGFnKSk7Zm9yKGxldCBpIG9mIGUpe2xldCByPUVTZShpLnRhZyk7dC5oYXMocil8fHQuc2V0KHIse2dyb3VwTmFtZTpyLGl0ZW1zOltdfSksdC5nZXQocikuaXRlbXMucHVzaChpKX1yZXR1cm5bLi4udC52YWx1ZXMoKV19ZnVuY3Rpb24gRVNlKG4pe3JldHVybiBuLnNwbGl0KCIvIiwxKVswXX1mdW5jdGlvbiB5eShuLHQpe2xldCBlPTAsaT0wO2Zvcig7Oyl7aWYoZT09PW4ubGVuZ3RoKXJldHVybiBpPT09dC5sZW5ndGg/MDotMTtpZihpPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYoRmYobltlXSkmJkZmKHRbaV0pKXtsZXQgcj1lLG89aTtlPVpYKG4sZSsxKSxpPVpYKHQsaSsxKTtsZXQgcz1OdW1iZXIobi5zbGljZShyLGUpKSxhPU51bWJlcih0LnNsaWNlKG8saSkpO2lmKHM8YSlyZXR1cm4tMTtpZihzPmEpcmV0dXJuIDF9ZWxzZXtpZihTTihuW2VdKSl7aWYoIVNOKHRbaV0pKXJldHVybi0xfWVsc2V7aWYoU04odFtpXSkpcmV0dXJuIDE7aWYobltlXTx0W2ldKXJldHVybi0xO2lmKG5bZV0+dFtpXSlyZXR1cm4gMX1lKyssaSsrfX19ZnVuY3Rpb24gWlgobix0KXtsZXQgZTt2YXIgbzsobz1lfHwoZT17fSkpW28uTkFUVVJBTD0wXT0iTkFUVVJBTCIsb1tvLlJFQUw9MV09IlJFQUwiLG9bby5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixvW28uRVhQT05FTlQ9M109IkVYUE9ORU5UIjtsZXQgaT1lLk5BVFVSQUwscj10O2Zvcig7cjxuLmxlbmd0aDtyKyspaWYoaT09PWUuTkFUVVJBTCl7aWYoIi4iPT09bltyXSlpPWUuUkVBTDtlbHNlIGlmKCJlIj09PW5bcl18fCJFIj09PW5bcl0paT1lLkVYUE9ORU5UX1NJR047ZWxzZSBpZighRmYobltyXSkpYnJlYWt9ZWxzZSBpZihpPT09ZS5SRUFMKXtpZigiZSI9PT1uW3JdfHwiRSI9PT1uW3JdKWk9ZS5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIUZmKG5bcl0pKWJyZWFrfWVsc2UgaWYoaT09PWUuRVhQT05FTlRfU0lHTil7aWYoIUZmKG5bcl0pJiYiKyIhPT1uW3JdJiYiLSIhPT1uW3JdKWJyZWFrO2k9ZS5FWFBPTkVOVH1lbHNlIGlmKGk9PT1lLkVYUE9ORU5UJiYhRmYobltyXSkpYnJlYWs7cmV0dXJuIHJ9ZnVuY3Rpb24gRmYobil7cmV0dXJuIjAiPD1uJiZuPD0iOSJ9ZnVuY3Rpb24gU04obil7cmV0dXJuIi8iPT09bnx8RmYobil9ZnVuY3Rpb24gRU4obix0LGUpe2xldHtwbHVnaW46aSx0YWc6cixydW5JZDpvLHNhbXBsZTpzfT10W25dLGE9Z2QoZSxpLHIscyk7aWYoYSl7aWYobnVsbCE9PW8mJmEucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkobykpe2xldCBjPWEucnVuVG9TZXJpZXNbb10ubGVuZ3RoO3JldHVybiBjPjA/Yy0xOm51bGx9bGV0IGw9T2JqZWN0LnZhbHVlcyhhLnJ1blRvU2VyaWVzKS5tYXAoYz0+Yy5sZW5ndGgpO2lmKGwubGVuZ3RoKXJldHVybiBNYXRoLm1heCguLi5sKS0xfXJldHVybiBudWxsfWZ1bmN0aW9uIERTZShuLHQsZSxpKXtsZXQgcj17Li4udH07Zm9yKGxldCBvIGluIG4pe2lmKCFuLmhhc093blByb3BlcnR5KG8pKWNvbnRpbnVlO2xldCBzPUVOKG8sbixlKTtpZihudWxsPT09cyljb250aW51ZTtsZXQgYT10Lmhhc093blByb3BlcnR5KG8pP3Rbb10uaW5kZXg6bnVsbCxsPUVOKG8sbixpKTsobnVsbCE9PWEmJmE+c3x8bnVsbD09PWF8fG51bGwhPT1hJiZhPT09bCkmJihyW29dPXtpbmRleDpzLGlzQ2xvc2VzdDohMX0pfXJldHVybiByfWZ1bmN0aW9uIEtYKG4pe2xldCB0PXZ5KG4ucnVuVG9Mb2FkU3RhdGUsZT0+ZT09PVRlLkxPQURJTkc/VGUuTE9BRElORzpUZS5OT1RfTE9BREVEKTtyZXR1cm57Li4ubixydW5Ub0xvYWRTdGF0ZTp0fX1mdW5jdGlvbiBKWChuLHQsZSxpKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW24sdCxlfHwiIixpXSl9dmFye2luaXRpYWxTdGF0ZTplUSxyZWR1Y2VyczpJU2V9PXVmKHt0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6VGUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sdGFnTWV0YWRhdGE6e3NjYWxhcnM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGhpc3RvZ3JhbXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGltYWdlczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fX0sY2FyZExpc3Q6W10sY2FyZFRvUGlubmVkQ29weTpuZXcgTWFwLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpuZXcgTWFwLHBpbm5lZENhcmRUb09yaWdpbmFsOm5ldyBNYXAsdW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHM6W10sY2FyZE1ldGFkYXRhTWFwOnt9LGNhcmRTdGF0ZU1hcDp7fSxjYXJkU3RlcEluZGV4Ont9LHRhZ0ZpbHRlcjoiIix0YWdHcm91cEV4cGFuZGVkOm5ldyBNYXAsbGlua2VkVGltZVNlbGVjdGlvbjpudWxsLGxpbmtlZFRpbWVFbmFibGVkOiExLHN0ZXBTZWxlY3RvckVuYWJsZWQ6ITAscmFuZ2VTZWxlY3Rpb25FbmFibGVkOiExLHNpbmdsZVNlbGVjdGlvbkhlYWRlcnM6W3t0eXBlOmh0LlJVTixuYW1lOiJydW4iLGRpc3BsYXlOYW1lOiJSdW4iLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlNNT09USEVELG5hbWU6InNtb290aGVkIixkaXNwbGF5TmFtZToiU21vb3RoZWQiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlZBTFVFLG5hbWU6InZhbHVlIixkaXNwbGF5TmFtZToiVmFsdWUiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlNURVAsbmFtZToic3RlcCIsZGlzcGxheU5hbWU6IlN0ZXAiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlJFTEFUSVZFX1RJTUUsbmFtZToicmVsYXRpdmUiLGRpc3BsYXlOYW1lOiJSZWxhdGl2ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH1dLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpbe3R5cGU6aHQuUlVOLG5hbWU6InJ1biIsZGlzcGxheU5hbWU6IlJ1biIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuTUlOX1ZBTFVFLG5hbWU6Im1pbiIsZGlzcGxheU5hbWU6Ik1pbiIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuTUFYX1ZBTFVFLG5hbWU6Im1heCIsZGlzcGxheU5hbWU6Ik1heCIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuU1RBUlRfVkFMVUUsbmFtZToic3RhcnQiLGRpc3BsYXlOYW1lOiJTdGFydCBWYWx1ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuRU5EX1ZBTFVFLG5hbWU6ImVuZCIsZGlzcGxheU5hbWU6IkVuZCBWYWx1ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuVkFMVUVfQ0hBTkdFLG5hbWU6InZhbHVlQ2hhbmdlIixkaXNwbGF5TmFtZToiVmFsdWUiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlBFUkNFTlRBR0VfQ0hBTkdFLG5hbWU6InBlcmNlbnRhZ2VDaGFuZ2UiLGRpc3BsYXlOYW1lOiIlIixlbmFibGVkOiEwLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTpodC5TVEFSVF9TVEVQLG5hbWU6InN0YXJ0U3RlcCIsZGlzcGxheU5hbWU6IlN0YXJ0IFN0ZXAiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LkVORF9TVEVQLG5hbWU6ImVuZFN0ZXAiLGRpc3BsYXlOYW1lOiJFbmQgU3RlcCIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuU1RFUF9BVF9NQVgsbmFtZToic3RlcEF0TWF4IixkaXNwbGF5TmFtZToiU3RlcCBBdCBNYXgiLGVuYWJsZWQ6ITEscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlNURVBfQVRfTUlOLG5hbWU6InN0ZXBBdE1pbiIsZGlzcGxheU5hbWU6IlN0ZXAgQXQgTWluIixlbmFibGVkOiExLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTpodC5NRUFOLG5hbWU6Im1lYW4iLGRpc3BsYXlOYW1lOiJNZWFuIixlbmFibGVkOiExLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTpodC5SQVdfQ0hBTkdFLG5hbWU6InJhd0NoYW5nZSIsZGlzcGxheU5hbWU6IlJhdyIsZW5hYmxlZDohMSxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH1dLGZpbHRlcmVkUGx1Z2luVHlwZXM6bmV3IFNldCxzdGVwTWluTWF4OnttaW46MS8wLG1heDotMS8wfX0se2lzU2V0dGluZ3NQYW5lT3BlbjohMCxpc1NsaWRlb3V0TWVudU9wZW46ITEsdGFibGVFZGl0b3JTZWxlY3RlZFRhYjpyby5TSU5HTEUsdGltZVNlcmllc0RhdGE6e3NjYWxhcnM6e30saGlzdG9ncmFtczp7fSxpbWFnZXM6e319LHNldHRpbmdzOlhTLHNldHRpbmdPdmVycmlkZXM6e30sdmlzaWJsZUNhcmRNYXA6bmV3IE1hcCxwcmV2aW91c0NhcmRJbnRlcmFjdGlvbnM6e3RhZ0ZpbHRlcnM6W10scGluczpbXSxjbGlja3M6W119LG5ld0NhcmRJbnRlcmFjdGlvbnM6e3RhZ0ZpbHRlcnM6W10scGluczpbXSxjbGlja3M6W119fSwobix0LGUpPT5Gbyh0LGUpP246ey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOlRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRNZXRhZGF0YU1hcDp7fSx2aXNpYmxlQ2FyZE1hcDpuZXcgTWFwfSksVE49ZVEsQVNlPWJyKGVRLHllKEVoLChuLHtyb3V0ZUtpbmQ6dCxwYXJ0aWFsU3RhdGU6ZX0pPT57aWYodCE9PXduLkVYUEVSSU1FTlQmJnQhPT13bi5DT01QQVJFX0VYUEVSSU1FTlQpcmV0dXJuIG47bGV0IGk9bmV3IFNldDtmb3IobGV0IGQgb2Ygbi5waW5uZWRDYXJkVG9PcmlnaW5hbC5rZXlzKCkpe2xldHtwbHVnaW46dSx0YWc6cCxydW5JZDpmLHNhbXBsZTptfT1uLmNhcmRNZXRhZGF0YU1hcFtkXTtpLmFkZChKWCh1LHAsZixtKSl9bGV0IHI9ZSxvPVtdO2ZvcihsZXQgZCBvZlsuLi5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLC4uLnIubWV0cmljcy5waW5uZWRDYXJkc10pe2xldCB1PUpYKGQucGx1Z2luLGQudGFnLGQucnVuSWQsZC5zYW1wbGUpO2kuaGFzKHUpfHwoaS5hZGQodSksby5wdXNoKGQpKX1sZXQgcz1IRihvLG4uY2FyZExpc3Qsbi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkVG9QaW5uZWRDb3B5LG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwsbi5jYXJkU3RlcEluZGV4LG4uY2FyZFN0YXRlTWFwKSxhPXIubWV0cmljcy5zbW9vdGhpbmcsbD1uLnNldHRpbmdPdmVycmlkZXM7aWYoTnVtYmVyLmlzRmluaXRlKGEpJiZudWxsIT09YSl7bGV0IGQ9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihhLnRvUHJlY2lzaW9uKDMpKSkpO2w9ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6ZH19bGV0IGM9ey4uLm4sLi4ucyxzZXR0aW5nT3ZlcnJpZGVzOmx9O3JldHVybiBudWxsIT09ci5tZXRyaWNzLnRhZ0ZpbHRlciYmKGMudGFnRmlsdGVyPXIubWV0cmljcy50YWdGaWx0ZXIpLGN9KSx5ZShJbCwobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3QudG9vbHRpcFNvcnQmJk9iamVjdC52YWx1ZXMob28pLmluY2x1ZGVzKHQudG9vbHRpcFNvcnQpJiYoZS50b29sdGlwU29ydD10LnRvb2x0aXBTb3J0KSwibnVtYmVyIj09dHlwZW9mIHQudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGUuY2FyZE1pbldpZHRoPXQudGltZVNlcmllc0NhcmRNaW5XaWR0aCksImJvb2xlYW4iPT10eXBlb2YgdC5pZ25vcmVPdXRsaWVycyYmKGUuaWdub3JlT3V0bGllcnM9dC5pZ25vcmVPdXRsaWVycyksIm51bWJlciI9PXR5cGVvZiB0LnNjYWxhclNtb290aGluZyYmKGUuc2NhbGFyU21vb3RoaW5nPXQuc2NhbGFyU21vb3RoaW5nKTtsZXQgaT10LnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ/P24uaXNTZXR0aW5nc1BhbmVPcGVuLHI9dC5zdGVwU2VsZWN0b3JFbmFibGVkPz9uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz10LnJhbmdlU2VsZWN0aW9uRW5hYmxlZD8/bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQscz10LmxpbmtlZFRpbWVFbmFibGVkPz9uLmxpbmtlZFRpbWVFbmFibGVkLGE9dC5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPz9uLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsbD10LnJhbmdlU2VsZWN0aW9uSGVhZGVycz8/bi5yYW5nZVNlbGVjdGlvbkhlYWRlcnM7cmV0dXJuey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOmksc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpvLGxpbmtlZFRpbWVFbmFibGVkOnMsc2luZ2xlU2VsZWN0aW9uSGVhZGVyczphLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpsLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLC4uLmV9fX0pLHllKGNzLEZzLG49PntsZXQgdD1uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLnN0YXRlPT09VGUuTE9BRElORz9UZS5MT0FESU5HOlRlLk5PVF9MT0FERUQsZT12eShuLnRpbWVTZXJpZXNEYXRhLChpLHIpPT52eShpLG89PnVhKHIpP3Z5KG8scz0+S1gocykpOktYKG8pKSk7cmV0dXJuey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6dH0sdGltZVNlcmllc0RhdGE6ZX19KSx5ZShkVCxuPT4oey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6VGUuTE9BRElOR319KSkseWUocFQsbj0+KHsuLi5uLHRhZ01ldGFkYXRhTG9hZFN0YXRlOnsuLi5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLHN0YXRlOlRlLkZBSUxFRH19KSkseWUodVQsKG4se3RhZ01ldGFkYXRhOnR9KT0+e2xldCBlPXtzY2FsYXJzOiRYKHQsem4uU0NBTEFSUyksaGlzdG9ncmFtczokWCh0LHpuLkhJU1RPR1JBTVMpLGltYWdlczp0W3puLklNQUdFU119LGk9e30scj1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2YgT2JqZWN0LmtleXMobikpe2xldCByLGk9ZTtpZih1YShpKSl7aWYoIXBhKGkpKXRocm93IG5ldyBFcnJvcigiTXVsdGktcnVuLCBzYW1wbGVkIHBsdWdpbiBzdXBwb3J0IG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTt7bGV0IG89bltpXS50YWdSdW5TYW1wbGVkSW5mbztmb3IobGV0IHMgb2YgT2JqZWN0LmtleXMobykpZm9yKGxldCBhIG9mIE9iamVjdC5rZXlzKG9bc10pKXtsZXR7bWF4U2FtcGxlc1BlclN0ZXA6bH09b1tzXVthXTtmb3IobGV0IGM9MDtjPGw7YysrKXQucHVzaCh7cGx1Z2luOmksdGFnOnMscnVuSWQ6YSxzYW1wbGU6YyxudW1TYW1wbGU6bH0pfX19ZWxzZSBpZihwYShpKSl7cj1uW2ldLnRhZ1RvUnVucztmb3IobGV0IG8gb2YgT2JqZWN0LmtleXMocikpZm9yKGxldCBzIG9mIHJbb10pdC5wdXNoKHtwbHVnaW46aSx0YWc6byxydW5JZDpzfSl9ZWxzZXtyPW5baV0udGFnVG9SdW5zO2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyhyKSl0LnB1c2goe3BsdWdpbjppLHRhZzpvLHJ1bklkOm51bGx9KX19cmV0dXJuIHR9KGUpLG89W107Zm9yKGxldCBmIG9mIHIpe2xldCBtPVZGKGYpO2lbbV09ZixvLnB1c2gobSl9bGV0IHM9bi50YWdHcm91cEV4cGFuZGVkO2lmKDA9PT1uLnRhZ0dyb3VwRXhwYW5kZWQuc2l6ZSl7bGV0IG09TFQoby5tYXAoYj0+KHsuLi5pW2JdLGNhcmRJZDpifSkpLmZpbHRlcihCb29sZWFuKSk7cz1uZXcgTWFwKG4udGFnR3JvdXBFeHBhbmRlZCk7Zm9yKGxldCBiIG9mIG0uc2xpY2UoMCwyKSlzLnNldChiLmdyb3VwTmFtZSwhMCl9bGV0e25leHRDYXJkVG9QaW5uZWRDb3B5OmEsbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOmwscGlubmVkQ2FyZE1ldGFkYXRhTWFwOmN9PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgTWFwLHI9bmV3IE1hcCxvPXt9O3JldHVybiBuLmZvckVhY2goKHMsYSk9PnstMSE9PWUuaW5kZXhPZihhKSYmKGkuc2V0KGEscyksci5zZXQocyxhKSxvW3NdPXRbYV0pfSkse25leHRDYXJkVG9QaW5uZWRDb3B5OmksbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOnIscGlubmVkQ2FyZE1ldGFkYXRhTWFwOm99fShuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxpLG8pLGQ9ey4uLmksLi4uY30sdT1mdW5jdGlvbihuLHQpe2xldCBlPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbaSxyXSk9Pnt0W2ldJiYoZVtpXT1yKX0pLGV9KG4uY2FyZFN0ZXBJbmRleCxkKSxwPUhGKG4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsbyxkLGEsbi5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsbCx1LG4uY2FyZFN0YXRlTWFwKTtyZXR1cm57Li4ubiwuLi5wLHRhZ0dyb3VwRXhwYW5kZWQ6cyx0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6VGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSx0YWdNZXRhZGF0YTplLGNhcmRMaXN0Om99fSkseWUoZlQsKG4se2NhcmRJZDp0LHNldHRpbmdzOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07cmV0dXJuIGlbdF09ey4uLmlbdF0sLi4uZX0sey4uLm4sY2FyZFN0YXRlTWFwOml9fSkseWUoQmcsKG4se2NhcmRJZDp0fSk9PntsZXQgZT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBlW3RdPXsuLi5lW3RdLGZ1bGxXaWR0aDohZVt0XT8uZnVsbFdpZHRoLHRhYmxlRXhwYW5kZWQ6IWVbdF0/LmZ1bGxXaWR0aH0sey4uLm4sY2FyZFN0YXRlTWFwOmV9fSkseWUoUlQsKG4se3RhZ0ZpbHRlcjp0fSk9Pih7Li4ubix0YWdGaWx0ZXI6dH0pKSx5ZShtVCwobix7c29ydDp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsdG9vbHRpcFNvcnQ6dH19KSkseWUoaFQsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLmlnbm9yZU91dGxpZXJzPz9uLnNldHRpbmdzLmlnbm9yZU91dGxpZXJzKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaWdub3JlT3V0bGllcnM6dH19fSkseWUoZ1QsKG4se3hBeGlzVHlwZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMseEF4aXNUeXBlOnR9fSkpLHllKHZULChuLHtzbW9vdGhpbmc6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHNjYWxhclNtb290aGluZzp0fX0pKSx5ZSh5VCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWD8/bi5zZXR0aW5ncy5zY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDp0fX19KSx5ZSh4VCwobix7YnJpZ2h0bmVzc0luTWlsbGk6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlQnJpZ2h0bmVzc0luTWlsbGk6dH19KSkseWUoQ1QsKG4se2NvbnRyYXN0SW5NaWxsaTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VDb250cmFzdEluTWlsbGk6dH19KSkseWUoTVQsbj0+e2xldHtpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSx5ZSh3VCxuPT57bGV0e2ltYWdlQ29udHJhc3RJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSx5ZShTVCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuaW1hZ2VTaG93QWN0dWFsU2l6ZT8/bi5zZXR0aW5ncy5pbWFnZVNob3dBY3R1YWxTaXplKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VTaG93QWN0dWFsU2l6ZTp0fX19KSx5ZShFVCwobix7aGlzdG9ncmFtTW9kZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaGlzdG9ncmFtTW9kZTp0fX0pKSx5ZShfVCwobix7Y2FyZE1pbldpZHRoOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6dH19KSkseWUoYlQsbj0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6bnVsbH19KSkseWUoUVgsbj0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxoaWRlRW1wdHlDYXJkczohbi5zZXR0aW5nT3ZlcnJpZGVzLmhpZGVFbXB0eUNhcmRzfX0pKSx5ZShUVCwobix7cmVxdWVzdHM6dH0pPT57aWYoIXQubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLnRpbWVTZXJpZXNEYXRhfTtmb3IobGV0IGkgb2YgdCl7bGV0e3BsdWdpbjpyLHRhZzpvLHNhbXBsZTpzfT1pO2Vbcl09UVMoZSxyLG8scyk7bGV0IGE9Z2QoZSxyLG8scyksbD1QRihpKT9baS5ydW5JZF06cWgobi50YWdNZXRhZGF0YSxyLG8scyk7YS5ydW5Ub0xvYWRTdGF0ZT1aUyhUZS5MT0FESU5HLGwsYS5ydW5Ub0xvYWRTdGF0ZSl9cmV0dXJuey4uLm4sdGltZVNlcmllc0RhdGE6ZX19KSx5ZShEVCwobix7cmVxdWVzdDp0fSk9PntsZXQgZT17Li4ubi50aW1lU2VyaWVzRGF0YX0se3BsdWdpbjppLHRhZzpyLHNhbXBsZTpvfT10O2VbaV09UVMoZSxpLHIsbyk7bGV0IHM9Z2QoZSxpLHIsbyksYT1QRih0KT9bdC5ydW5JZF06cWgobi50YWdNZXRhZGF0YSxpLHIsbyk7cmV0dXJuIHMucnVuVG9Mb2FkU3RhdGU9WlMoVGUuRkFJTEVELGEscy5ydW5Ub0xvYWRTdGF0ZSksey4uLm4sdGltZVNlcmllc0RhdGE6ZX19KSx5ZShJVCwobix7cmVzcG9uc2U6dH0pPT57bGV0IGU9ey4uLm4uc3RlcE1pbk1heH0saT17Li4ubi5jYXJkU3RhdGVNYXB9LHI9ey4uLm4udGltZVNlcmllc0RhdGF9LHtwbHVnaW46byx0YWc6cyxydW5JZDphLHNhbXBsZTpsfT10O3Jbb109UVMocixvLHMsbCk7bGV0IGM9Z2QocixvLHMsbCk7aWYoVVModCkpe2xldCB1PWE/W2FdOnFoKG4udGFnTWV0YWRhdGEsbyxzLGwpO2MucnVuVG9Mb2FkU3RhdGU9WlMoVGUuRkFJTEVELHUsYy5ydW5Ub0xvYWRTdGF0ZSl9ZWxzZXtsZXQgdT10LnJ1blRvU2VyaWVzO2MucnVuVG9TZXJpZXM9ey4uLmMucnVuVG9TZXJpZXN9LGMucnVuVG9Mb2FkU3RhdGU9ey4uLmMucnVuVG9Mb2FkU3RhdGV9O2ZvcihsZXQgcCBpbiB1KWlmKHUuaGFzT3duUHJvcGVydHkocCkpe2MucnVuVG9TZXJpZXNbcF09dVtwXSxjLnJ1blRvTG9hZFN0YXRlW3BdPVRlLkxPQURFRDtmb3IobGV0IGYgb2YgdVtwXSllLm1pbj1NYXRoLm1pbihlLm1pbixmLnN0ZXApLGUubWF4PU1hdGgubWF4KGUubWF4LGYuc3RlcCl9fWlmKHQucnVuVG9TZXJpZXMmJnQucGx1Z2luPT09em4uU0NBTEFSUyl7bGV0IHU9VkYoe3BsdWdpbjpvLHRhZzpzLHJ1bklkOm51bGx9KSxwPWZ1bmN0aW9uKG4pe2xldCB0PTEvMCxlPS0xLzA7cmV0dXJuIE9iamVjdC52YWx1ZXMobikuZmxhdCgpLmZvckVhY2goaT0+e3Q9TWF0aC5taW4odCxpLnN0ZXApLGU9TWF0aC5tYXgoZSxpLnN0ZXApfSkse21pblN0ZXA6dCxtYXhTdGVwOmV9fShjLnJ1blRvU2VyaWVzKTtpW3VdPXsuLi5pW3VdLGRhdGFNaW5NYXg6cH07bGV0IGY9bi5jYXJkVG9QaW5uZWRDb3B5LmdldCh1KTtmJiYoaVtmXT17Li4uaVtmXSxkYXRhTWluTWF4OnB9KX1yZXR1cm57Li4ubix0aW1lU2VyaWVzRGF0YTpyLGNhcmRTdGVwSW5kZXg6RFNlKG4uY2FyZE1ldGFkYXRhTWFwLG4uY2FyZFN0ZXBJbmRleCxyLG4udGltZVNlcmllc0RhdGEpLHN0ZXBNaW5NYXg6ZSxjYXJkU3RhdGVNYXA6aX19KSx5ZShBVCwobix7Y2FyZElkOnQsc3RlcEluZGV4OmV9KT0+e2xldCBpPUVOKHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkscj1lO3JldHVybiBudWxsPT09aT9yPW51bGw6ZT5pJiYocj1pKSx7Li4ubixjYXJkU3RlcEluZGV4OnsuLi5uLmNhcmRTdGVwSW5kZXgsW3RdOntpbmRleDpyLGlzQ2xvc2VzdDohMX19fX0pLHllKFBULChuLHt0YWdHcm91cDp0fSk9PntsZXQgZT1uZXcgTWFwKG4udGFnR3JvdXBFeHBhbmRlZCk7cmV0dXJuIGUuc2V0KHQsIWUuZ2V0KHQpKSx7Li4ubix0YWdHcm91cEV4cGFuZGVkOmV9fSkseWUoVmcsKG4se2VudGVyZWRDYXJkczp0LGV4aXRlZENhcmRzOmV9KT0+e2lmKCF0Lmxlbmd0aCYmIWUubGVuZ3RoKXJldHVybiBuO2xldCBpPW5ldyBNYXAobi52aXNpYmxlQ2FyZE1hcCk7cmV0dXJuIHQuZm9yRWFjaCgoe2VsZW1lbnRJZDpyLGNhcmRJZDpvfSk9PntsZXQgcz1pLmdldChyKT8/bnVsbDtpZihudWxsIT09cyYmcyE9PW8pdGhyb3cgbmV3IEVycm9yKCJBIERPTSBlbGVtZW50IGNhbm5vdCBiZSByZXVzZWQgZm9yIG1vcmUgdGhhbiAxIHVuaXF1ZSBjYXJkIG1ldGFkYXRhIik7aS5zZXQocixvKX0pLGUuZm9yRWFjaCgoe2VsZW1lbnRJZDpyfSk9PntpLmRlbGV0ZShyKX0pLHsuLi5uLHZpc2libGVDYXJkTWFwOml9fSkseWUoSGcsKG4se2NhcmRJZDp0fSk9PntsZXQgZT1uLnBpbm5lZENhcmRUb09yaWdpbmFsLmhhcyh0KSxpPSFlJiYhbi5jYXJkVG9QaW5uZWRDb3B5Lmhhcyh0KTtpZihpJiYhS1MobikpcmV0dXJuIG47bGV0IHI9bmV3IE1hcChuLmNhcmRUb1Bpbm5lZENvcHkpLG89bmV3IE1hcChuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSkscz1uZXcgTWFwKG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwpLGE9ey4uLm4uY2FyZE1ldGFkYXRhTWFwfSxsPXsuLi5uLmNhcmRTdGVwSW5kZXh9LGM9ey4uLm4uY2FyZFN0YXRlTWFwfTtpZihlKXtsZXQgZD1uLnBpbm5lZENhcmRUb09yaWdpbmFsLmdldCh0KTtyLmRlbGV0ZShkKSxvLmRlbGV0ZShkKSxzLmRlbGV0ZSh0KSxkZWxldGUgYVt0XSxkZWxldGUgbFt0XSxkZWxldGUgY1t0XX1lbHNlIGlmKGkpe2xldCBkPXpGKHQscixvLHMsbCxhLGMpO3I9ZC5jYXJkVG9QaW5uZWRDb3B5LG89ZC5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUscz1kLnBpbm5lZENhcmRUb09yaWdpbmFsLGE9ZC5jYXJkTWV0YWRhdGFNYXAsbD1kLmNhcmRTdGVwSW5kZXgsYz1kLmNhcmRTdGF0ZU1hcH1lbHNle2xldCBkPW4uY2FyZFRvUGlubmVkQ29weS5nZXQodCk7ci5kZWxldGUodCksby5kZWxldGUodCkscy5kZWxldGUoZCksZGVsZXRlIGFbZF0sZGVsZXRlIGxbZF0sZGVsZXRlIGNbdF19cmV0dXJuey4uLm4sY2FyZE1ldGFkYXRhTWFwOmEsY2FyZFN0YXRlTWFwOmMsY2FyZFN0ZXBJbmRleDpsLGNhcmRUb1Bpbm5lZENvcHk6cixjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6byxwaW5uZWRDYXJkVG9PcmlnaW5hbDpzfX0pLHllKEZULG49PntsZXQgdD0hbi5saW5rZWRUaW1lRW5hYmxlZCxlPXsuLi5uLmNhcmRTdGVwSW5kZXh9LGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uLHI9bi5zdGVwU2VsZWN0b3JFbmFibGVkLG89bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ7aWYodCl7bGV0e21heDpzfT1uLnN0ZXBNaW5NYXg7aT1uLmxpbmtlZFRpbWVTZWxlY3Rpb24/P3tzdGFydDp7c3RlcDpzPT09LTEvMD8wOnN9LGVuZDpudWxsfSxlPVVGKG4uY2FyZFN0ZXBJbmRleCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhLGkpLHI9dCxvPUJvb2xlYW4oaS5lbmQpfXJldHVybnsuLi5uLGNhcmRTdGVwSW5kZXg6ZSxsaW5rZWRUaW1lRW5hYmxlZDp0LGxpbmtlZFRpbWVTZWxlY3Rpb246aSxzdGVwU2VsZWN0b3JFbmFibGVkOnIscmFuZ2VTZWxlY3Rpb25FbmFibGVkOm99fSkseWUoTlQsbj0+e2xldCB0PSFuLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCxlPW4uc3RlcFNlbGVjdG9yRW5hYmxlZCxpPW4ubGlua2VkVGltZVNlbGVjdGlvbixyPU9iamVjdC5lbnRyaWVzKG4uY2FyZFN0YXRlTWFwKS5yZWR1Y2UoKG8sW3MsYV0pPT4ob1tzXT17Li4uYSxzdGVwU2VsZWN0aW9uT3ZlcnJpZGU6THMuTk9ORSxyYW5nZVNlbGVjdGlvbk92ZXJyaWRlOkxzLk5PTkV9LG8pLHt9KTtyZXR1cm4gdD8oZT10LGl8fChpPXtzdGFydDp7c3RlcDpuLnN0ZXBNaW5NYXgubWlufSxlbmQ6e3N0ZXA6bi5zdGVwTWluTWF4Lm1heH19KSxpLmVuZHx8KGk9e3N0YXJ0OntzdGVwOm4uc3RlcE1pbk1heC5taW59LGVuZDppLnN0YXJ0fSkpOmkmJihpPXtzdGFydDppLmVuZD8/aS5zdGFydCxlbmQ6bnVsbH0pLHsuLi5uLHN0ZXBTZWxlY3RvckVuYWJsZWQ6ZSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6dCxsaW5rZWRUaW1lU2VsZWN0aW9uOmksY2FyZFN0YXRlTWFwOnJ9fSkseWUoa2YsKG4sdCk9PntsZXR7Y2FyZElkOmUsdGltZVNlbGVjdGlvbjppfT10LHI9aS5zdGFydC5zdGVwLG89aS5lbmQ/LnN0ZXAsYT1uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZDtuLmxpbmtlZFRpbWVFbmFibGVkJiYoYT12b2lkIDAhPT1vKTtsZXQgbD17c3RhcnQ6e3N0ZXA6cn0sZW5kOnZvaWQgMD09PW8/bnVsbDp7c3RlcDpyPm8/cjpvfX0sYz1VRihuLmNhcmRTdGVwSW5kZXgsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSxsKSxkPXsuLi5uLmNhcmRTdGF0ZU1hcH07cmV0dXJuIGUmJihkW2VdPXsuLi5kW2VdLHRpbWVTZWxlY3Rpb246bCxzdGVwU2VsZWN0aW9uT3ZlcnJpZGU6THMuT1ZFUlJJREVfQVNfRU5BQkxFRCxyYW5nZVNlbGVjdGlvbk92ZXJyaWRlOnZvaWQgMD09PWwuZW5kPy5zdGVwP0xzLk9WRVJSSURFX0FTX0RJU0FCTEVEOkxzLk9WRVJSSURFX0FTX0VOQUJMRUR9KSx7Li4ubixsaW5rZWRUaW1lU2VsZWN0aW9uOmwsY2FyZFN0ZXBJbmRleDpjLGNhcmRTdGF0ZU1hcDpkLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDphfX0pLHllKGJ5LChuLHtjYXJkSWQ6dCx1c2VyVmlld0JveDplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLHVzZXJWaWV3Qm94OmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLHllKElkLChuLHthZmZvcmRhbmNlOnQsY2FyZElkOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07aWYoZSl7bGV0e3RpbWVTZWxlY3Rpb246YSwuLi5sfT1pW2VdfHx7fTtpW2VdPXsuLi5sLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpMcy5PVkVSUklERV9BU19ESVNBQkxFRH19ZWxzZSBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGE9PntpW2FdPXsuLi5pW2FdLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpMcy5OT05FfX0pO2lmKCFuLmxpbmtlZFRpbWVFbmFibGVkJiZ0IT09WXMuQ0hFQ0tfQk9YKXJldHVybnsuLi5uLGNhcmRTdGF0ZU1hcDppfTtsZXQgcj0hbi5zdGVwU2VsZWN0b3JFbmFibGVkLG89ciYmbi5saW5rZWRUaW1lRW5hYmxlZCxzPXImJm4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkO3JldHVybnsuLi5uLGxpbmtlZFRpbWVFbmFibGVkOm8sc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpzLGNhcmRTdGF0ZU1hcDppfX0pLHllKGxULChuLHt0YWI6dH0pPT4oey4uLm4sdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLHllKHpnLChuLHtkYXRhVGFibGVNb2RlOnQsaGVhZGVyczplfSk9PntsZXQgaT1bXSxyPVtdO3JldHVybiBlLmZvckVhY2gobz0+e28uZW5hYmxlZD9pLnB1c2gobyk6ci5wdXNoKG8pfSksdD09PXJvLlJBTkdFP3suLi5uLHJhbmdlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX19KSx5ZShVZywobix7ZGF0YVRhYmxlTW9kZTp0LGhlYWRlcjplLGNhcmRJZDppfSk9PntsZXR7Y2FyZFN0YXRlTWFwOnIscmFuZ2VTZWxlY3Rpb25FbmFibGVkOm8sbGlua2VkVGltZUVuYWJsZWQ6c309bixhPWk/JFMocixvLHMsaSk6dD09PXJvLlJBTkdFLGw9YT9uLnJhbmdlU2VsZWN0aW9uSGVhZGVyczpuLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsYz1sLmZpbmRJbmRleChwPT5wLm5hbWU9PT1lLm5hbWUpLGQ9ZnVuY3Rpb24obil7bGV0IHQ9MDtyZXR1cm4gbi5mb3JFYWNoKGU9PntlLmVuYWJsZWQmJnQrK30pLHR9KGwpO2xbY10uZW5hYmxlZCYmZC0tO2xldCB1PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bLi4uZV07cmV0dXJuIGkuc3BsaWNlKG4sMSksaS5zcGxpY2UodCwwLGVbbl0pLGl9KGMsZCxsKTtyZXR1cm4gdVtkXT17Li4udVtkXSxlbmFibGVkOiF1W2RdLmVuYWJsZWR9LGE/ey4uLm4scmFuZ2VTZWxlY3Rpb25IZWFkZXJzOnV9OnsuLi5uLHNpbmdsZVNlbGVjdGlvbkhlYWRlcnM6dX19KSx5ZShPVCwobix7cGx1Z2luOnR9KT0+e2xldCBlPW5ldyBTZXQobi5maWx0ZXJlZFBsdWdpblR5cGVzKTtyZXR1cm4gZS5oYXModCk/ZS5kZWxldGUodCk6ZS5hZGQodCksT2JqZWN0LnZhbHVlcyh6bikuZXZlcnkoaT0+ZS5oYXMoaSkpJiYoZT1uZXcgU2V0KSx7Li4ubixmaWx0ZXJlZFBsdWdpblR5cGVzOmV9fSkseWUoa1Qsbj0+KHsuLi5uLGZpbHRlcmVkUGx1Z2luVHlwZXM6bmV3IFNldH0pKSx5ZShvVCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiFuLmlzU2V0dGluZ3NQYW5lT3Blbn0pKSx5ZShyVCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiExfSkpLHllKHNULG49Pih7Li4ubixpc1NsaWRlb3V0TWVudU9wZW46IW4uaXNTbGlkZW91dE1lbnVPcGVufSkpLHllKGFULChuLHttb2RlOnR9KT0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3BlbjohMCxpc1NldHRpbmdzUGFuZU9wZW46ITAsdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLHllKGNULG49Pih7Li4ubixpc1NsaWRlb3V0TWVudU9wZW46ITF9KSkpO2Z1bmN0aW9uIHRRKG4sdCl7cmV0dXJuIHBmKEFTZSxJU2UpKG4sdCl9ZnVuY3Rpb24gJFgobix0KXtyZXR1cm57dGFnRGVzY3JpcHRpb25zOm5bdF0udGFnRGVzY3JpcHRpb25zLHRhZ1RvUnVuczpSU2Uoblt0XS5ydW5UYWdJbmZvKX19ZnVuY3Rpb24gUlNlKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuKWZvcihsZXQgaSBvZiBuW2VdKXRbaV09Wy4uLnRbaV18fFtdLGVdO3JldHVybiB0fXZhciBrU2U9cShfZCxXYSwobix0LGUpPT50P3suLi50LGxvYWRTdGF0ZTpuLGlkOmV9Om51bGwpLG5RPV9lKCJbTWV0cmljcyBFZmZlY3RzXSBJbml0IiksaVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkPXRoaXMuYWN0aW9ucyQucGlwZShlaShuUSx3YyxkZixQcyksQnQodGhpcy5zdG9yZS5zZWxlY3QoV28pLHRoaXMuc3RvcmUuc2VsZWN0KHZ2KSksa2UoKFssbyxzXSk9Pm89PT1ndiYmcy5zdGF0ZT09PVRlLk5PVF9MT0FERUQpKSx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kPXRoaXMuYWN0aW9ucyQucGlwZShlaShjcyxGcyksQnQodGhpcy5zdG9yZS5zZWxlY3QoV28pKSxrZSgoWyxvXSk9Pm89PT1ndikpLHRoaXMubG9hZFRhZ01ldGFkYXRhJD10bih0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkLHRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQpLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QodnYpLHRoaXMuc3RvcmUuc2VsZWN0KGxyKSksa2UoKFssbyxzXSk9Pm8uc3RhdGUhPT1UZS5MT0FESU5HJiZudWxsIT09cyksYWMoMTApLE50KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChkVCgpKX0pLEpuKChbLCxvXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFRhZ01ldGFkYXRhKG8pLnBpcGUoTnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2godVQoe3RhZ01ldGFkYXRhOnN9KSl9KSx6cigoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2gocFQoKSksSHQobnVsbCkpKSkpKSx0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKGVpKFZnKSxCdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxOKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGU9PT1UZS5OT1RfTE9BREVEKSkpLHRoaXMudmlzaWJsZUNhcmRzUmVsb2FkZWQkPXRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQucGlwZShCdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxOKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGUhPT1UZS5MT0FESU5HKSkpLHRoaXMubG9hZFRpbWVTZXJpZXMkPXRuKHRoaXMudmlzaWJsZUNhcmRzV2l0aG91dERhdGFDaGFuZ2VkJCx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJCkucGlwZShrZShvPT5vLmxlbmd0aD4wKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChscikucGlwZShrZShvPT5udWxsIT09bykpKSxobigoW28sc10pPT50aGlzLmZldGNoVGltZVNlcmllc0ZvckNhcmRzKG8scykpKSx0aGlzLmRhdGFFZmZlY3RzJD1hcigoKT0+dG4odGhpcy5sb2FkVGFnTWV0YWRhdGEkLHRoaXMubG9hZFRpbWVTZXJpZXMkKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBuUSgpfWdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChiVykucGlwZShKbihpPT5pLnNpemU/Y28oWy4uLmldLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdChrU2UsbykucGlwZShZdCgxKSkpKTpIdChbXSkpLE4oaT0+aS5maWx0ZXIoQm9vbGVhbikpKX1mZXRjaFRpbWVTZXJpZXMoZSl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaFRpbWVTZXJpZXMoW2VdKS5waXBlKE50KGk9PntsZXQgcj1pLmZpbHRlcihVUyk7ci5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRpbWUgc2VyaWVzIHJlc3BvbnNlIGNvbnRhaW5lZCBlcnJvcnM6IixyKSx0aGlzLnN0b3JlLmRpc3BhdGNoKElUKHtyZXNwb25zZTppWzBdfSkpfSksenIoKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKERUKHtyZXF1ZXN0OmV9KSksSHQobnVsbCkpKSl9ZmV0Y2hUaW1lU2VyaWVzRm9yQ2FyZHMoZSxpKXtyZXR1cm4gSHQoZS5tYXAobz0+e2xldHtwbHVnaW46cyx0YWc6YSxydW5JZDpsLHNhbXBsZTpjfT1vLGQ9cGEocyk/e3BsdWdpbjpzLHRhZzphLHJ1bklkOmx9OntwbHVnaW46cyx0YWc6YSxleHBlcmltZW50SWRzOml9O3JldHVybiB2b2lkIDAhPT1jJiYoZC5zYW1wbGU9YyksZH0pKS5waXBlKE50KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFRUKHtyZXF1ZXN0czpvfSkpfSksaG4obz0+dG4oLi4uby5tYXAoYT0+dGhpcy5mZXRjaFRpbWVTZXJpZXMoYSkpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhvKSxrKEFlKSxrKFRjKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksRE49bmV3IGllKCJNZXRyaWNzIFN0b3JlIENvbmZpZyIpLElOPW5ldyBpZSgiTWV0cmljcyBJbml0aWFsIFNldHRpbmdzIENvbmZpZyIpO2Z1bmN0aW9uIHJRKG4pe3JldHVybiBuP3tpbml0aWFsU3RhdGU6ey4uLlROLHNldHRpbmdzOm59fTp7aW5pdGlhbFN0YXRlOlROfX12YXIgZ2E9KCgpPT4oZnVuY3Rpb24obil7bltuLkxFRlQ9MV09IkxFRlQiLG5bbi5SSUdIVD0yXT0iUklHSFQiLG5bbi5NSURETEU9NF09Ik1JRERMRSIsbltuLkZPVVJUSD04XT0iRk9VUlRIIixuW24uRklGVEg9MzJdPSJGSUZUSCJ9KGdhfHwoZ2E9e30pKSxnYSkpKCksb1E9MDtmdW5jdGlvbiBGU2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDMpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmV4cGFuZFNpZGViYXIoKSl9KSxQKDEsIm1hdC1pY29uIiw0KSxnKCl9fWZ1bmN0aW9uIE5TZShuLHQpe2lmKDEmbiYmKGgoMCwibmF2Iiw1KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLHp0KDMsMSksZygpKSwyJm4pe2xldCBlPXcoKTtUdCgid2lkdGgiLFcoMSw2LGUud2lkdGgkKSwiJSIpKCJtaW4td2lkdGgiLGUuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYLCJweCIpKCJtYXgtd2lkdGgiLFcoMiw4LGUucnVuc1RhYmxlRnVsbFNjcmVlbiQpPzEwMDoiIiwiJSIpfX1mdW5jdGlvbiBMU2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDYpLEkoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5yZXNpemVHcmFiYmVkKCkpfSksZygpfX12YXIgQlNlPVtbWyIiLCJtYWluIiwiIl1dLFtbIiIsInNpZGViYXIiLCIiXV1dLFZTZT1bIlttYWluXSIsIltzaWRlYmFyXSJdLGFRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJD10aGlzLnN0b3JlLnNlbGVjdChMaCksdGhpcy53aWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoQ1MpLnBpcGUoTGkodGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJCksTigoW3Isb10pPT5vPzEwMDpyKSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZSx0aGlzLnJlc2l6aW5nPSExLHRoaXMuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYPTc1LG1pKGkubmF0aXZlRWxlbWVudCwibW91c2Vtb3ZlIikucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLGtlKCgpPT50aGlzLnJlc2l6aW5nKSkuc3Vic2NyaWJlKHI9PntpZigoci5idXR0b25zJmdhLkxFRlQpIT09Z2EuTEVGVClyZXR1cm4gdm9pZCh0aGlzLnJlc2l6aW5nPSExKTtyLnByZXZlbnREZWZhdWx0KCk7bGV0e3dpZHRoOm99PWkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGtoKHt3aWR0aEluUGVyY2VudDpyLmNsaWVudFg8PXRoaXMuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYPzA6ci5jbGllbnRYL28qMTAwfSkpfSksbWkoaS5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5yZXNpemluZz0hMX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1yZXNpemVHcmFiYmVkKCl7dGhpcy5yZXNpemluZz0hMH1leHBhbmRTaWRlYmFyKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChraCh7d2lkdGhJblBlcmNlbnQ6MjB9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoTWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXNoYm9hcmQtbGF5b3V0Il1dLG5nQ29udGVudFNlbGVjdG9yczpWU2UsZGVjbHM6Nyx2YXJzOjksY29uc3RzOltbImNsYXNzIiwiZXhwYW5kIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiwzLCJ3aWR0aCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwicmVzaXplciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsImV4cGFuZCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il0sWzEsInNpZGViYXIiXSxbMSwicmVzaXplciIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oQlNlKSxTKDAsRlNlLDIsMCwiYnV0dG9uIiwwKSxqKDEsImFzeW5jIiksUygyLE5TZSw0LDEwLCJuYXYiLDEpLGooMywiYXN5bmMiKSxTKDQsTFNlLDEsMCwiZGl2IiwyKSxqKDUsImFzeW5jIiksenQoNikpLDImZSYmKF8oIm5nSWYiLDA9PT1XKDEsMyxpLndpZHRoJCkpLHYoMiksXygibmdJZiIsVygzLDUsaS53aWR0aCQpPjApLHYoMiksXygibmdJZiIsVyg1LDcsaS53aWR0aCQpPjApKX0sZGVwZW5kZW5jaWVzOltGZSxFbixjdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDo4MHZ3fS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNlYmViZWI7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXg6MCAwO2p1c3RpZnktc2VsZjpzdHJldGNofWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NX0uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4fS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDJweDtjdXJzb3I6ZXctcmVzaXplO2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LXNlbGY6c3RyZXRjaH0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlci1jb2xvcjojY2NjO291dGxpbmU6M3B4IHNvbGlkICNjY2M7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye291dGxpbmUtY29sb3I6Izc3Nztib3JkZXItY29sb3I6Izc3N30uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MCAxcHggMCAwO2NvbG9yOmluaGVyaXQ7Y29udGFpbjpjb250ZW50O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LXNlbGY6c3RyZXRjaDtwYWRkaW5nOjB9LmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQU49bmV3IFdlYWtNYXAseHk9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJvb3Q9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMuZGVzdHJveWVkVGFyZ2V0cz1uZXcgV2Vha1NldH1pbml0aWFsaXplKHQpe2lmKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpcmV0dXJuO3RoaXMuaW50ZXJzZWN0aW9uQ2FsbGJhY2s9dDtsZXQgZT17dGhyZXNob2xkOjAscm9vdDp0aGlzLnJvb3Q/P251bGx9O3RoaXMuYnVmZmVyJiYoZS5yb290TWFyZ2luPXRoaXMuYnVmZmVyKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpLGUpfWFkZCh0KXt0aGlzLmVuc3VyZUluaXRpYWxpemVkKCkmJnRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0KX13aWxsRGVzdHJveSh0KXt0aGlzLmVuc3VyZUluaXRpYWxpemVkKCkmJnRoaXMuZGVzdHJveWVkVGFyZ2V0cy5hZGQodCl9ZW5zdXJlSW5pdGlhbGl6ZWQoKXtpZighdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcil0aHJvdyBuZXcgRXJyb3IoIkNhcmRPYnNlcnZlciBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UiKTtyZXR1cm4hMH1vbkNhcmRJbnRlcnNlY3Rpb24odCl7dC5zb3J0KChyLG8pPT5yLnRpbWUtby50aW1lKTtsZXQgZT1uZXcgU2V0LGk9bmV3IFNldDtmb3IobGV0e2lzSW50ZXJzZWN0aW5nOnIsdGFyZ2V0Om99b2YgdClyPyhlLmFkZChvKSxpLmRlbGV0ZShvKSk6KGUuZGVsZXRlKG8pLGkuYWRkKG8pKSx0aGlzLmRlc3Ryb3llZFRhcmdldHMuaGFzKG8pJiYhciYmKHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5kZWxldGUobyksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci51bm9ic2VydmUobykpO3RoaXMuaW50ZXJzZWN0aW9uQ2FsbGJhY2soZSxpKX1vbkNhcmRJbnRlcnNlY3Rpb25Gb3JUZXN0KHQpe3RoaXMub25DYXJkSW50ZXJzZWN0aW9uKHQpfX0sbFE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuc3RvcmU9aX1vbkNhcmRJbnRlcnNlY3Rpb24oZSxpKXtsZXQgcj1bLi4uZV0ubWFwKHM9PntsZXQgYT1BTi5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSksbz1bLi4uaV0ubWFwKHM9PntsZXQgYT1BTi5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSk7dGhpcy5zdG9yZS5kaXNwYXRjaChWZyh7ZW50ZXJlZENhcmRzOnIsZXhpdGVkQ2FyZHM6b30pKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O0FOLnNldChlLHtlbGVtZW50SWQ6KG9RKyssU3ltYm9sKG9RKSksY2FyZElkOnRoaXMuY2FyZElkfSksdGhpcy5jYXJkT2JzZXJ2ZXJ8fCh0aGlzLmNhcmRPYnNlcnZlcj1uZXcgeHkpLHRoaXMuY2FyZE9ic2VydmVyLmluaXRpYWxpemUodGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24uYmluZCh0aGlzKSksdGhpcy5jYXJkT2JzZXJ2ZXIuYWRkKGUpfW5nT25EZXN0cm95KCl7dGhpcy5jYXJkT2JzZXJ2ZXImJnRoaXMuY2FyZE9ic2VydmVyLndpbGxEZXN0cm95KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KX1ob3N0Rm9yVGVzdCgpe3JldHVybiB0aGlzLmhvc3R9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoQWUpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2FyZExhenlMb2FkZXIiLCIiXV0saW5wdXRzOntjYXJkSWQ6WyJjYXJkTGF6eUxvYWRlciIsImNhcmRJZCJdLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn19KSxufSkoKTtmdW5jdGlvbiBVU2Uobix0KXsxJm4mJihPdCgwKSx6dCgxKSxrdCgpKX12YXIgalNlPVsiKiJdLGNRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1pfW5nT25Jbml0KCl7aWYodGhpcy5jdXN0b21pemFibGVDb21wb25lbnQpe2xldCBlPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY3VzdG9taXphYmxlQ29tcG9uZW50LmNvbnN0cnVjdG9yKTt0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhzaSksQyhmbykpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWN1c3RvbWl6YXRpb24iXV0saW5wdXRzOntjdXN0b21pemFibGVDb21wb25lbnQ6ImN1c3RvbWl6YWJsZUNvbXBvbmVudCJ9LG5nQ29udGVudFNlbGVjdG9yczpqU2UsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksUygwLFVTZSwyLDAsIm5nLWNvbnRhaW5lciIsMCkpLDImZSYmXygibmdJZiIsIWkuY3VzdG9taXphYmxlQ29tcG9uZW50KX0sZGVwZW5kZW5jaWVzOltGZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksV1NlPVsiYnV0dG9uIl0scVNlPVsiKiJdLGRRPW5ldyBpZSgiTUFUX0JVVFRPTl9UT0dHTEVfREVGQVVMVF9PUFRJT05TIiksdVE9bmV3IGllKCJNYXRCdXR0b25Ub2dnbGVHcm91cCIpLFlTZT17cHJvdmlkZTpNbyx1c2VFeGlzdGluZzokbigoKT0+Uk4pLG11bHRpOiEwfSxwUT0wLEJUPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSxSTj0oKCk9PntjbGFzcyBue2dldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9c2V0IG5hbWUoZSl7dGhpcy5fbmFtZT1lLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVJ0KGUpfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2UubWFwKGk9PmkudmFsdWUpOmVbMF0/ZVswXS52YWx1ZTp2b2lkIDB9c2V0IHZhbHVlKGUpe3RoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfWdldCBzZWxlY3RlZCgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2U6ZVswXXx8bnVsbH1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKGUpe3RoaXMuX211bHRpcGxlPVJ0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVJ0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1jb25zdHJ1Y3RvcihlLGkpe3RoaXMuX2NoYW5nZURldGVjdG9yPWUsdGhpcy5fdmVydGljYWw9ITEsdGhpcy5fbXVsdGlwbGU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl9uYW1lPSJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC0iK3BRKyssdGhpcy52YWx1ZUNoYW5nZT1uZXcgRix0aGlzLmNoYW5nZT1uZXcgRix0aGlzLmFwcGVhcmFuY2U9aSYmaS5hcHBlYXJhbmNlP2kuYXBwZWFyYW5jZToic3RhbmRhcmQifW5nT25Jbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWw9bmV3IGRnKHRoaXMubXVsdGlwbGUsdm9pZCAwLCExKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4udGhpcy5fYnV0dG9uVG9nZ2xlcy5maWx0ZXIoZT0+ZS5jaGVja2VkKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnZhbHVlPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5fb25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9X2VtaXRDaGFuZ2VFdmVudChlKXtsZXQgaT1uZXcgQlQoZSx0aGlzLnZhbHVlKTt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKGkudmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQoaSl9X3N5bmNCdXR0b25Ub2dnbGUoZSxpLHI9ITEsbz0hMSl7IXRoaXMubXVsdGlwbGUmJnRoaXMuc2VsZWN0ZWQmJiFlLmNoZWNrZWQmJih0aGlzLnNlbGVjdGVkLmNoZWNrZWQ9ITEpLHRoaXMuX3NlbGVjdGlvbk1vZGVsP2k/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGUpOnRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGUpOm89ITAsbz9Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLl91cGRhdGVNb2RlbFZhbHVlKGUscikpOnRoaXMuX3VwZGF0ZU1vZGVsVmFsdWUoZSxyKX1faXNTZWxlY3RlZChlKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoZSl9X2lzUHJlY2hlY2tlZChlKXtyZXR1cm4hKHR5cGVvZiB0aGlzLl9yYXdWYWx1ZT4idSIpJiYodGhpcy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0aGlzLl9yYXdWYWx1ZSk/dGhpcy5fcmF3VmFsdWUuc29tZShpPT5udWxsIT1lLnZhbHVlJiZpPT09ZS52YWx1ZSk6ZS52YWx1ZT09PXRoaXMuX3Jhd1ZhbHVlKX1fc2V0U2VsZWN0aW9uQnlWYWx1ZShlKXt0aGlzLl9yYXdWYWx1ZT1lLHRoaXMuX2J1dHRvblRvZ2dsZXMmJih0aGlzLm11bHRpcGxlJiZlPyhBcnJheS5pc0FycmF5KGUpLHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksZS5mb3JFYWNoKGk9PnRoaXMuX3NlbGVjdFZhbHVlKGkpKSk6KHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksdGhpcy5fc2VsZWN0VmFsdWUoZSkpKX1fY2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMuX2J1dHRvblRvZ2dsZXMuZm9yRWFjaChlPT5lLmNoZWNrZWQ9ITEpfV9zZWxlY3RWYWx1ZShlKXtsZXQgaT10aGlzLl9idXR0b25Ub2dnbGVzLmZpbmQocj0+bnVsbCE9ci52YWx1ZSYmci52YWx1ZT09PWUpO2kmJihpLmNoZWNrZWQ9ITAsdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGkpKX1fdXBkYXRlTW9kZWxWYWx1ZShlLGkpe2kmJnRoaXMuX2VtaXRDaGFuZ2VFdmVudChlKSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSl9X21hcmtCdXR0b25zRm9yQ2hlY2soKXt0aGlzLl9idXR0b25Ub2dnbGVzPy5mb3JFYWNoKGU9PmUuX21hcmtGb3JDaGVjaygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQygkdCksQyhkUSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJlRpKHIsUVNlLDUpLDImZSl7bGV0IG87U2Uobz1FZSgpKSYmKGkuX2J1dHRvblRvZ2dsZXM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JvdXAiLDEsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCksbnQoIm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIixpLnZlcnRpY2FsKSgibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCIsInN0YW5kYXJkIj09PWkuYXBwZWFyYW5jZSkpfSxpbnB1dHM6e2FwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLG5hbWU6Im5hbWUiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCIsdmFsdWU6InZhbHVlIixtdWx0aXBsZToibXVsdGlwbGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsY2hhbmdlOiJjaGFuZ2UifSxleHBvcnRBczpbIm1hdEJ1dHRvblRvZ2dsZUdyb3VwIl0sZmVhdHVyZXM6W1F0KFtZU2Use3Byb3ZpZGU6dVEsdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxYU2U9dXMoY2xhc3N7fSksUVNlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBYU2V7Z2V0IGJ1dHRvbklkKCl7cmV0dXJuYCR7dGhpcy5pZH0tYnV0dG9uYH1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuYXBwZWFyYW5jZTp0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKGUpe3RoaXMuX2FwcGVhcmFuY2U9ZX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX2lzU2VsZWN0ZWQodGhpcyk6dGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZChlKXtsZXQgaT1SdChlKTtpIT09dGhpcy5fY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9aSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiZ0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8dGhpcy5idXR0b25Ub2dnbGVHcm91cCYmdGhpcy5idXR0b25Ub2dnbGVHcm91cC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9UnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9lbGVtZW50UmVmPXIsdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5fY2hlY2tlZD0hMSx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5jaGFuZ2U9bmV3IEY7bGV0IGw9TnVtYmVyKHMpO3RoaXMudGFiSW5kZXg9bHx8MD09PWw/bDpudWxsLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA9ZSx0aGlzLmFwcGVhcmFuY2U9YSYmYS5hcHBlYXJhbmNlP2EuYXBwZWFyYW5jZToic3RhbmRhcmQifW5nT25Jbml0KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLmlkPXRoaXMuaWR8fCJtYXQtYnV0dG9uLXRvZ2dsZS0iK3BRKyssZSYmKGUuX2lzUHJlY2hlY2tlZCh0aGlzKT90aGlzLmNoZWNrZWQ9ITA6ZS5faXNTZWxlY3RlZCh0aGlzKSE9PXRoaXMuX2NoZWNrZWQmJmUuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLmJ1dHRvblRvZ2dsZUdyb3VwO3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSxlJiZlLl9pc1NlbGVjdGVkKHRoaXMpJiZlLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsITEsITEsITApfWZvY3VzKGUpe3RoaXMuX2J1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fb25CdXR0b25DbGljaygpe2xldCBlPSEhdGhpcy5faXNTaW5nbGVTZWxlY3RvcigpfHwhdGhpcy5fY2hlY2tlZDtlIT09dGhpcy5fY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9ZSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiYodGhpcy5idXR0b25Ub2dnbGVHcm91cC5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQsITApLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX29uVG91Y2hlZCgpKSksdGhpcy5jaGFuZ2UuZW1pdChuZXcgQlQodGhpcyx0aGlzLnZhbHVlKSl9X21hcmtGb3JDaGVjaygpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9nZXRCdXR0b25OYW1lKCl7cmV0dXJuIHRoaXMuX2lzU2luZ2xlU2VsZWN0b3IoKT90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLm5hbWU6dGhpcy5uYW1lfHxudWxsfV9pc1NpbmdsZVNlbGVjdG9yKCl7cmV0dXJuIHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJiF0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLm11bHRpcGxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHVRLDgpLEMoJHQpLEMoTWUpLEMoWHIpLHlvKCJ0YWJpbmRleCIpLEMoZFEsOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UoV1NlLDUpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuX2J1dHRvbkVsZW1lbnQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXMoKX0pLDImZSYmKEJlKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiaWQiLGkuaWQpKCJuYW1lIixudWxsKSxudCgibWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSIsIWkuYnV0dG9uVG9nZ2xlR3JvdXApKCJtYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIixpLmNoZWNrZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PT1pLmFwcGVhcmFuY2UpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGlkOiJpZCIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIix0YWJJbmRleDoidGFiSW5kZXgiLGFwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLGNoZWNrZWQ6ImNoZWNrZWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRCdXR0b25Ub2dnbGUiXSxmZWF0dXJlczpbS2VdLG5nQ29udGVudFNlbGVjdG9yczpxU2UsZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKERuKCksaCgwLCJidXR0b24iLDAsMSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2soKX0pLGgoMiwic3BhbiIsMiksenQoMyksZygpKCksUCg0LCJzcGFuIiwzKSg1LCJzcGFuIiw0KSksMiZlKXtsZXQgcj1pdCgxKTtfKCJpZCIsaS5idXR0b25JZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxCZSgidGFiaW5kZXgiLGkuZGlzYWJsZWQ/LTE6aS50YWJJbmRleCkoImFyaWEtcHJlc3NlZCIsaS5jaGVja2VkKSgibmFtZSIsaS5fZ2V0QnV0dG9uTmFtZSgpKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXJpYUxhYmVsbGVkYnkpLHYoNSksXygibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpfX0sZGVwZW5kZW5jaWVzOlttb10sc3R5bGVzOlsiLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCk6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLWJvdHRvbTpzb2xpZCAzNnB4O29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZDpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi42fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVlQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2ZuLEJsLGZuXX0pLG59KSgpLEtTZT1bImRldGVybWluYXRlU3Bpbm5lciJdO2Z1bmN0aW9uIEpTZShuLHQpe2lmKDEmbiYmKE5uKCksaCgwLCJzdmciLDExKSxQKDEsImNpcmNsZSIsMTIpLGcoKSksMiZuKXtsZXQgZT13KCk7QmUoInZpZXdCb3giLGUuX3ZpZXdCb3goKSksdigxKSxUdCgic3Ryb2tlLWRhc2hhcnJheSIsZS5fc3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLCJweCIpKCJzdHJva2UtZGFzaG9mZnNldCIsZS5fc3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLzIsInB4IikoInN0cm9rZS13aWR0aCIsZS5fY2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpLEJlKCJyIixlLl9jaXJjbGVSYWRpdXMoKSl9fXZhciAkU2U9enMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0sInByaW1hcnkiKSxlMWU9bmV3IGllKCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RpYW1ldGVyOmZRfX19KSxmUT0xMDAsdGw9KCgpPT57Y2xhc3MgbiBleHRlbmRzICRTZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5tb2RlPSJtYXQtc3Bpbm5lciI9PT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKT8iaW5kZXRlcm1pbmF0ZSI6ImRldGVybWluYXRlIix0aGlzLl92YWx1ZT0wLHRoaXMuX2RpYW1ldGVyPWZRLHRoaXMuX25vb3BBbmltYXRpb25zPSJOb29wQW5pbWF0aW9ucyI9PT1pJiYhIXImJiFyLl9mb3JjZUFuaW1hdGlvbnMsciYmKHIuY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXIuY29sb3IpLHIuZGlhbWV0ZXImJih0aGlzLmRpYW1ldGVyPXIuZGlhbWV0ZXIpLHIuc3Ryb2tlV2lkdGgmJih0aGlzLnN0cm9rZVdpZHRoPXIuc3Ryb2tlV2lkdGgpKX1nZXQgdmFsdWUoKXtyZXR1cm4iZGV0ZXJtaW5hdGUiPT09dGhpcy5tb2RlP3RoaXMuX3ZhbHVlOjB9c2V0IHZhbHVlKGUpe3RoaXMuX3ZhbHVlPU1hdGgubWF4KDAsTWF0aC5taW4oMTAwLF9pKGUpKSl9Z2V0IGRpYW1ldGVyKCl7cmV0dXJuIHRoaXMuX2RpYW1ldGVyfXNldCBkaWFtZXRlcihlKXt0aGlzLl9kaWFtZXRlcj1faShlKX1nZXQgc3Ryb2tlV2lkdGgoKXtyZXR1cm4gdGhpcy5fc3Ryb2tlV2lkdGg/P3RoaXMuZGlhbWV0ZXIvMTB9c2V0IHN0cm9rZVdpZHRoKGUpe3RoaXMuX3N0cm9rZVdpZHRoPV9pKGUpfV9jaXJjbGVSYWRpdXMoKXtyZXR1cm4odGhpcy5kaWFtZXRlci0xMCkvMn1fdmlld0JveCgpe2xldCBlPTIqdGhpcy5fY2lyY2xlUmFkaXVzKCkrdGhpcy5zdHJva2VXaWR0aDtyZXR1cm5gMCAwICR7ZX0gJHtlfWB9X3N0cm9rZUNpcmN1bWZlcmVuY2UoKXtyZXR1cm4gMipNYXRoLlBJKnRoaXMuX2NpcmNsZVJhZGl1cygpfV9zdHJva2VEYXNoT2Zmc2V0KCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl9zdHJva2VDaXJjdW1mZXJlbmNlKCkqKDEwMC10aGlzLl92YWx1ZSkvMTAwOm51bGx9X2NpcmNsZVN0cm9rZVdpZHRoKCl7cmV0dXJuIHRoaXMuc3Ryb2tlV2lkdGgvdGhpcy5kaWFtZXRlcioxMDB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoaGksOCksQyhlMWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciJdLFsibWF0LXNwaW5uZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShLU2UsNSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5fZGV0ZXJtaW5hdGVDaXJjbGU9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJvZ3Jlc3NiYXIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIiLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3MiXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiYXJpYS12YWx1ZW1pbiIsMCkoImFyaWEtdmFsdWVtYXgiLDEwMCkoImFyaWEtdmFsdWVub3ciLCJkZXRlcm1pbmF0ZSI9PT1pLm1vZGU/aS52YWx1ZTpudWxsKSgibW9kZSIsaS5tb2RlKSxUdCgid2lkdGgiLGkuZGlhbWV0ZXIsInB4IikoImhlaWdodCIsaS5kaWFtZXRlciwicHgiKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLGkuX25vb3BBbmltYXRpb25zKSgibWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIiwiaW5kZXRlcm1pbmF0ZSI9PT1pLm1vZGUpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLG1vZGU6Im1vZGUiLHZhbHVlOiJ2YWx1ZSIsZGlhbWV0ZXI6ImRpYW1ldGVyIixzdHJva2VXaWR0aDoic3Ryb2tlV2lkdGgifSxleHBvcnRBczpbIm1hdFByb2dyZXNzU3Bpbm5lciJdLGZlYXR1cmVzOltLZV0sZGVjbHM6MTQsdmFyczoxMSxjb25zdHM6W1siY2lyY2xlIiwiIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1kYy1jaXJjdWxhci1wcm9ncmVzc19fZGV0ZXJtaW5hdGUtY29udGFpbmVyIl0sWyJkZXRlcm1pbmF0ZVNwaW5uZXIiLCIiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb2N1c2FibGUiLCJmYWxzZSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpYyJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNvbnRhaW5lciJdLFsxLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX3NwaW5uZXItbGF5ZXIiXSxbMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19jaXJjbGUtY2xpcHBlciIsIm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY2lyY2xlLWxlZnQiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2dhcC1wYXRjaCJdLFsxLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1jbGlwcGVyIiwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19jaXJjbGUtcmlnaHQiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb2N1c2FibGUiLCJmYWxzZSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoUygwLEpTZSwyLDgsIm5nLXRlbXBsYXRlIixudWxsLDAsV3QpLGgoMiwiZGl2IiwxLDIpLE5uKCksaCg0LCJzdmciLDMpLFAoNSwiY2lyY2xlIiw0KSxnKCkoKSxPbygpLGgoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpKDgsImRpdiIsNyksbGkoOSw4KSxnKCksaCgxMCwiZGl2Iiw5KSxsaSgxMSw4KSxnKCksaCgxMiwiZGl2IiwxMCksbGkoMTMsOCksZygpKCkoKSksMiZlKXtsZXQgcj1pdCgxKTt2KDQpLEJlKCJ2aWV3Qm94IixpLl92aWV3Qm94KCkpLHYoMSksVHQoInN0cm9rZS1kYXNoYXJyYXkiLGkuX3N0cm9rZUNpcmN1bWZlcmVuY2UoKSwicHgiKSgic3Ryb2tlLWRhc2hvZmZzZXQiLGkuX3N0cm9rZURhc2hPZmZzZXQoKSwicHgiKSgic3Ryb2tlLXdpZHRoIixpLl9jaXJjbGVTdHJva2VXaWR0aCgpLCIlIiksQmUoInIiLGkuX2NpcmNsZVJhZGl1cygpKSx2KDQpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLHIpLHYoMiksXygibmdUZW1wbGF0ZU91dGxldCIsciksdigyKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixyKX19LGRlcGVuZGVuY2llczpbTHJdLHN0eWxlczpbIkBrZXlmcmFtZXMgbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbnRhaW5lci1yb3RhdGV7dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1zcGlubmVyLWxheWVyLXJvdGF0ZXsxMi41JXt0cmFuc2Zvcm06cm90YXRlKDEzNWRlZyl9MjUle3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXt0cmFuc2Zvcm06cm90YXRlKDQwNWRlZyl9NTAle3RyYW5zZm9ybTpyb3RhdGUoNTQwZGVnKX02Mi41JXt0cmFuc2Zvcm06cm90YXRlKDY3NWRlZyl9NzUle3RyYW5zZm9ybTpyb3RhdGUoODEwZGVnKX04Ny41JXt0cmFuc2Zvcm06cm90YXRlKDk0NWRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDEwODBkZWcpfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb2xvci0xLWZhZGUtaW4tb3V0e2Zyb217b3BhY2l0eTouOTl9MjUle29wYWNpdHk6Ljk5fTI2JXtvcGFjaXR5OjB9ODkle29wYWNpdHk6MH05MCV7b3BhY2l0eTouOTl9dG97b3BhY2l0eTouOTl9fUBrZXlmcmFtZXMgbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbG9yLTItZmFkZS1pbi1vdXR7ZnJvbXtvcGFjaXR5OjB9MTUle29wYWNpdHk6MH0yNSV7b3BhY2l0eTouOTl9NTAle29wYWNpdHk6Ljk5fTUxJXtvcGFjaXR5OjB9dG97b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb2xvci0zLWZhZGUtaW4tb3V0e2Zyb217b3BhY2l0eTowfTQwJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6Ljk5fTc1JXtvcGFjaXR5Oi45OX03NiV7b3BhY2l0eTowfXRve29wYWNpdHk6MH19QGtleWZyYW1lcyBtZGMtY2lyY3VsYXItcHJvZ3Jlc3MtY29sb3ItNC1mYWRlLWluLW91dHtmcm9te29wYWNpdHk6MH02NSV7b3BhY2l0eTowfTc1JXtvcGFjaXR5Oi45OX05MCV7b3BhY2l0eTouOTl9dG97b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1sZWZ0LXNwaW57ZnJvbXt0cmFuc2Zvcm06cm90YXRlKDI2NWRlZyl9NTAle3RyYW5zZm9ybTpyb3RhdGUoMTMwZGVnKX10b3t0cmFuc2Zvcm06cm90YXRlKDI2NWRlZyl9fUBrZXlmcmFtZXMgbWRjLWNpcmN1bGFyLXByb2dyZXNzLXJpZ2h0LXNwaW57ZnJvbXt0cmFuc2Zvcm06cm90YXRlKC0yNjVkZWcpfTUwJXt0cmFuc2Zvcm06cm90YXRlKC0xMzBkZWcpfXRve3RyYW5zZm9ybTpyb3RhdGUoLTI2NWRlZyl9fS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3N7ZGlzcGxheTppbmxpbmUtZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXJlY3Rpb246bHRyO2xpbmUtaGVpZ2h0OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDI1MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2RldGVybWluYXRlLWNvbnRhaW5lciwubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljLC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY29udGFpbmVyLC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX3NwaW5uZXItbGF5ZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jb250YWluZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY29udGFpbmVye2ZvbnQtc2l6ZTowO2xldHRlci1zcGFjaW5nOjA7d2hpdGUtc3BhY2U6bm93cmFwO29wYWNpdHk6MH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpYywubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje2ZpbGw6cmdiYSgwLDAsMCwwKX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGV7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCA1MDBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSl9Lm1kYy1jaXJjdWxhci1wcm9ncmVzc19fZ2FwLXBhdGNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6NDcuNSU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjUlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19nYXAtcGF0Y2ggLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tsZWZ0Oi05MDAlO3dpZHRoOjIwMDAlO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19jaXJjbGUtY2xpcHBlcntkaXNwbGF5OmlubGluZS1mbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjUwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Lm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY2lyY2xlLWNsaXBwZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3t3aWR0aDoyMDAlfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1yaWdodCAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje2xlZnQ6LTEwMCV9Lm1kYy1jaXJjdWxhci1wcm9ncmVzcy0taW5kZXRlcm1pbmF0ZSAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jb250YWluZXJ7b3BhY2l0eTowfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jb250YWluZXJ7b3BhY2l0eToxfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jb250YWluZXJ7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb250YWluZXItcm90YXRlIDE1NjguMjM1Mjk0MTE3Nm1zIGxpbmVhciBpbmZpbml0ZX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX3NwaW5uZXItbGF5ZXJ7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1zcGlubmVyLWxheWVyLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RofS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY29sb3ItMXthbmltYXRpb246bWRjLWNpcmN1bGFyLXByb2dyZXNzLXNwaW5uZXItbGF5ZXItcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbG9yLTEtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NvbG9yLTJ7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1zcGlubmVyLWxheWVyLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLG1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb2xvci0yLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGh9Lm1kYy1jaXJjdWxhci1wcm9ncmVzcy0taW5kZXRlcm1pbmF0ZSAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19jb2xvci0ze2FuaW1hdGlvbjptZGMtY2lyY3VsYXItcHJvZ3Jlc3Mtc3Bpbm5lci1sYXllci1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCxtZGMtY2lyY3VsYXItcHJvZ3Jlc3MtY29sb3ItMy1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RofS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY29sb3ItNHthbmltYXRpb246bWRjLWNpcmN1bGFyLXByb2dyZXNzLXNwaW5uZXItbGF5ZXItcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbG9yLTQtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1sZWZ0IC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY2lyY2xlLWdyYXBoaWN7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1sZWZ0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1yaWdodCAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje2FuaW1hdGlvbjptZGMtY2lyY3VsYXItcHJvZ3Jlc3MtcmlnaHQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RofS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWNsb3NlZHtvcGFjaXR5OjB9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lcntkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtsaW5lLWhlaWdodDowfS5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fZGV0ZXJtaW5hdGUtY2lyY2xlLC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tzdHJva2U6dmFyKC0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3IsIHRyYW5zcGFyZW50KX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUsLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje3N0cm9rZTpDYW52YXNUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1mb3VyLWNvbG9yIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NvbG9yLTEgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tzdHJva2U6Q2FudmFzVGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzcy0tZm91ci1jb2xvciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19jb2xvci0yIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY2lyY2xlLWdyYXBoaWN7c3Ryb2tlOkNhbnZhc1RleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWZvdXItY29sb3IgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY29sb3ItMyAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje3N0cm9rZTpDYW52YXNUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1mb3VyLWNvbG9yIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NvbG9yLTQgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tzdHJva2U6Q2FudmFzVGV4dH19Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2RldGVybWluYXRlLWNpcmNsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljLC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fc3Bpbm5lci1sYXllciwubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY29udGFpbmVye2FuaW1hdGlvbjpub25lfS5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jb250YWluZXIgY2lyY2xle3N0cm9rZS1kYXNoYXJyYXk6MCAhaW1wb3J0YW50fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGV7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2U6Q2FudmFzVGV4dH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxubD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsZm5dfSksbn0pKCk7ZnVuY3Rpb24gaTFlKG4sdCl7aWYoMSZuJiYoaCgwLCJiIiksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDt2KDEpLEhlKCIiLGUuZGlzcGxheUFsaWFzLCI6Iil9fWZ1bmN0aW9uIHIxZShuLHQpe2lmKDEmbiYmKGgoMCwibWF0LW9wdGlvbiIsMikoMSwic3BhbiIsMyksUygyLGkxZSwyLDEsImIiLDQpLFQoMyksZygpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7XygidmFsdWUiLGUudmFsdWUpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCksdigxKSxVTSgidGl0bGUiLCIiLGUuZGlzcGxheUFsaWFzLCI6ICIsZS5kaXNwbGF5VGV4dCwiIiksdigxKSxfKCJuZ0lmIixlLmRpc3BsYXlBbGlhcyksdigxKSxIZSgiICIsZS5kaXNwbGF5VGV4dCwiICIpfX12YXIgbVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5vcHRpb25zPVtdLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBGfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kcm9wZG93biJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsb3B0aW9uczoib3B0aW9ucyJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIn0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywidmFsdWUiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIl0sWzEsIm9wdGlvbi1jb250ZW50IiwzLCJ0aXRsZSJdLFs0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJtYXQtc2VsZWN0IiwwKSxJKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG8udmFsdWUpfSksUygxLHIxZSw0LDYsIm1hdC1vcHRpb24iLDEpLGcoKSksMiZlJiYoXygidmFsdWUiLGkudmFsdWUpKCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwhMCksdigxKSxfKCJuZ0Zvck9mIixpLm9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOltubixGZSx6dSxVc10sc3R5bGVzOlsibWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDpub3JtYWx9bWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtbWRjLXNlbGVjdC1hcnJvdy13cmFwcGVye2hlaWdodDoxMnB4fW1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtc3R5bGU6YXV0b30gIC5tYXQtbWRjLXNlbGVjdC1wYW5lbHttYXgtd2lkdGg6NzB2d30gIG1hdC1vcHRpb24ubWF0LW1kYy1vcHRpb257bWluLWhlaWdodDozMnB4O2ZvbnQtc2l6ZToxMnB4fSJdfSksbn0pKCksczFlPWZ1bmN0aW9uKG4pe3JldHVybnsiY29sdW1uLWVkaXQtbWVudS10b2dnbGUiOiEwLCJ0b2dnbGUtb3BlbmVkIjpufX07ZnVuY3Rpb24gYTFlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwzMSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25TbGlkZU91dFRvZ2dsZWQuZW1pdCgpKX0pLFAoMSwibWF0LWljb24iLDMyKSxUKDIsIiBFZGl0IFRhYmxlIENvbHVtbnMgIiksZygpfWlmKDImbil7bGV0IGU9dygpO18oIm5nQ2xhc3MiLEluKDEsczFlLGUuaXNTbGlkZU91dE1lbnVPcGVuKSl9fWZ1bmN0aW9uIGwxZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNlY3Rpb24iLDMzKSgxLCJoMyIsMSksVCgyLCJJbWFnZXMiKSxnKCksaCgzLCJkaXYiLDM0KSg0LCJkaXYiLDM1KSxUKDUsIkJyaWdodG5lc3MiKSxnKCksaCg2LCJkaXYiLDEzKSg3LCJtYXQtc2xpZGVyIiwzNiksSSgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLmVtaXQoci52YWx1ZSkpfSksZygpLGgoOCwiYnV0dG9uIiwzNyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuaW1hZ2VCcmlnaHRuZXNzUmVzZXQuZW1pdCgpKX0pLFAoOSwibWF0LWljb24iLDE2KSxnKCkoKSgpLGgoMTAsImRpdiIsMzgpKDExLCJkaXYiLDM5KSxUKDEyLCJDb250cmFzdCIpLGcoKSxoKDEzLCJkaXYiLDEzKSgxNCwibWF0LXNsaWRlciIsNDApLEkoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQuZW1pdChyLnZhbHVlKSl9KSxnKCksaCgxNSwiYnV0dG9uIiw0MSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuaW1hZ2VDb250cmFzdFJlc2V0LmVtaXQoKSl9KSxQKDE2LCJtYXQtaWNvbiIsMTYpLGcoKSgpKCksaCgxNywiZGl2Iiw0MikoMTgsIm1hdC1jaGVja2JveCIsMjUpLEkoImNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQuZW1pdChyLmNoZWNrZWQpKX0pLFQoMTksIlNob3cgYWN0dWFsIGltYWdlIHNpemUiKSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dygpO3YoNyksXygibWF4IiwyZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpKCJ0aHVtYkxhYmVsIiwhMCkoImRpc3BsYXlXaXRoIixlLmZvcm1hdE1pbGxpVG9aZXJvdGgpLHYoNyksXygibWF4Iiw1ZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQ29udHJhc3RJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsZS5mb3JtYXRNaWxsaVRvWmVyb3RoKSx2KDQpLF8oImNoZWNrZWQiLGUuaW1hZ2VTaG93QWN0dWFsU2l6ZSl9fXZhciBnUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMubG9jYWxlPWUsdGhpcy5saW5rZWRUaW1lVG9nZ2xlZD1uZXcgRix0aGlzLnN0ZXBTZWxlY3RvclRvZ2dsZWQ9bmV3IEYsdGhpcy5yYW5nZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEYsdGhpcy5vblNsaWRlT3V0VG9nZ2xlZD1uZXcgRix0aGlzLlRvb2x0aXBTb3J0RHJvcGRvd25PcHRpb25zPVt7dmFsdWU6b28uQUxQSEFCRVRJQ0FMLGRpc3BsYXlUZXh0OiJBbHBoYWJldGljYWwifSx7dmFsdWU6b28uQVNDRU5ESU5HLGRpc3BsYXlUZXh0OiJBc2NlbmRpbmcifSx7dmFsdWU6b28uREVTQ0VORElORyxkaXNwbGF5VGV4dDoiRGVzY2VuZGluZyJ9LHt2YWx1ZTpvby5ORUFSRVNULGRpc3BsYXlUZXh0OiJOZWFyZXN0IFBpeGVsIn0se3ZhbHVlOm9vLk5FQVJFU1RfWSxkaXNwbGF5VGV4dDoiTmVhcmVzdCBZIn1dLHRoaXMudG9vbHRpcFNvcnRDaGFuZ2VkPW5ldyBGLHRoaXMuaWdub3JlT3V0bGllcnNDaGFuZ2VkPW5ldyBGLHRoaXMuWEF4aXNUeXBlPVBpLHRoaXMuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6UGkuU1RFUCxkaXNwbGF5VGV4dDoiU3RlcCJ9LHt2YWx1ZTpQaS5SRUxBVElWRSxkaXNwbGF5VGV4dDoiUmVsYXRpdmUifSx7dmFsdWU6UGkuV0FMTF9USU1FLGRpc3BsYXlUZXh0OiJXYWxsIn1dLHRoaXMueEF4aXNUeXBlQ2hhbmdlZD1uZXcgRix0aGlzLk1BWF9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRT03MzUsdGhpcy5NSU5fQ0FSRF9XSURUSF9TTElERVJfVkFMVUU9MzM1LHRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQ9bmV3IEYsdGhpcy5jYXJkV2lkdGhDaGFuZ2VkPXRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQucGlwZShzYygyNTApKSx0aGlzLmNhcmRXaWR0aFJlc2V0PW5ldyBGLHRoaXMuSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOkRyLk9GRlNFVCxkaXNwbGF5VGV4dDoiT2Zmc2V0In0se3ZhbHVlOkRyLk9WRVJMQVksZGlzcGxheVRleHQ6Ik92ZXJsYXkifV0sdGhpcy5oaXN0b2dyYW1Nb2RlQ2hhbmdlZD1uZXcgRix0aGlzLk1BWF9TTU9PVEhJTkdfVkFMVUU9Ljk5OSx0aGlzLk1BWF9TTU9PVEhJTkdfU0xJREVSX1ZBTFVFPS45OSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJD1uZXcgRix0aGlzLnNjYWxhclNtb290aGluZ0NoYW5nZWQ9dGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQucGlwZShzYygyNTApKSx0aGlzLnNjYWxhclBhcnRpdGlvblhUb2dnbGVkPW5ldyBGLHRoaXMuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQ9bmV3IEYsdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLnBpcGUoc2MoMjUwKSksdGhpcy5pbWFnZUJyaWdodG5lc3NSZXNldD1uZXcgRix0aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJD1uZXcgRix0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5waXBlKHNjKDI1MCkpLHRoaXMuaW1hZ2VDb250cmFzdFJlc2V0PW5ldyBGLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ9bmV3IEZ9b25TY2FsYXJTbW9vdGhpbmdJbnB1dChlKXtsZXQgaT1lLnRhcmdldDtpZighaS52YWx1ZSlyZXR1cm47bGV0IHI9TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGkudmFsdWUpKSwuOTk5KTtyIT09cGFyc2VGbG9hdChpLnZhbHVlKSYmKGkudmFsdWU9U3RyaW5nKHIpKSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5lbWl0KHIpfWZvcm1hdE1pbGxpVG9aZXJvdGgoZSl7cmV0dXJuICRPKGUvMWUzLHRoaXMubG9jYWxlfHwiZW4tVVMiLCIxLjAtMiIpfWdldExpbmtlZFRpbWVTZWxlY3Rpb25TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkfHxudWxsPT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHxudWxsIT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZD8iIjp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcH1pc0F4aXNUeXBlU3RlcCgpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PVBpLlNURVB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoY2QpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntpc0xpbmtlZFRpbWVFbmFibGVkOiJpc0xpbmtlZFRpbWVFbmFibGVkIixpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQ6ImlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQ6ImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIixpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkOiJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixzdGVwTWluTWF4OiJzdGVwTWluTWF4Iixpc1NsaWRlT3V0TWVudU9wZW46ImlzU2xpZGVPdXRNZW51T3BlbiIsaXNJbWFnZVN1cHBvcnRFbmFibGVkOiJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLHRvb2x0aXBTb3J0OiJ0b29sdGlwU29ydCIsaWdub3JlT3V0bGllcnM6Imlnbm9yZU91dGxpZXJzIix4QXhpc1R5cGU6InhBeGlzVHlwZSIsY2FyZE1pbldpZHRoOiJjYXJkTWluV2lkdGgiLGhpc3RvZ3JhbU1vZGU6Imhpc3RvZ3JhbU1vZGUiLHNjYWxhclNtb290aGluZzoic2NhbGFyU21vb3RoaW5nIixzY2FsYXJQYXJ0aXRpb25YOiJzY2FsYXJQYXJ0aXRpb25YIixpbWFnZUJyaWdodG5lc3NJbk1pbGxpOiJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIixpbWFnZUNvbnRyYXN0SW5NaWxsaToiaW1hZ2VDb250cmFzdEluTWlsbGkiLGltYWdlU2hvd0FjdHVhbFNpemU6ImltYWdlU2hvd0FjdHVhbFNpemUifSxvdXRwdXRzOntsaW5rZWRUaW1lVG9nZ2xlZDoibGlua2VkVGltZVRvZ2dsZWQiLHN0ZXBTZWxlY3RvclRvZ2dsZWQ6InN0ZXBTZWxlY3RvclRvZ2dsZWQiLHJhbmdlU2VsZWN0aW9uVG9nZ2xlZDoicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixvblNsaWRlT3V0VG9nZ2xlZDoib25TbGlkZU91dFRvZ2dsZWQiLHRvb2x0aXBTb3J0Q2hhbmdlZDoidG9vbHRpcFNvcnRDaGFuZ2VkIixpZ25vcmVPdXRsaWVyc0NoYW5nZWQ6Imlnbm9yZU91dGxpZXJzQ2hhbmdlZCIseEF4aXNUeXBlQ2hhbmdlZDoieEF4aXNUeXBlQ2hhbmdlZCIsY2FyZFdpZHRoQ2hhbmdlZDoiY2FyZFdpZHRoQ2hhbmdlZCIsY2FyZFdpZHRoUmVzZXQ6ImNhcmRXaWR0aFJlc2V0IixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6NTQsdmFyczozMCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGk7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgY2FyZCB3aWR0aCBzZXR0aW5n4pCfY2NkYzk2YjAwM2ZiYmE5MGRiN2E2OTU5YjViMjZlM2NjNThmN2Q4MOKQnzUyMjMxMTEwNDc5NjgxMDI0NjY6UmVzZXQgY2FyZCB3aWR0aGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBicmlnaHRuZXNzIHNldHRpbmfikJ9jNDgyYjNhNDdlYTA5NzVmYThiZTAxYWZiM2ZiZWM5Yjc2NjI4YmQ34pCfMTE4OTE2MTg1NzI0MDM3ODM5NTpSZXNldCBicmlnaHRuZXNzYCxpPSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcmVzZXQgdGhlIGltYWdlIGNvbnRyYXN0IHNldHRpbmfikJ9lZDcxMmE4YjkyNzA0MWJlMTUyNTJiMjllYjUyMWViYjEzNzRiYWQ44pCfNTM3MDcwMzM0MjkyMzYxMTk1NTpSZXNldCBjb250cmFzdGAsW1sxLCJnZW5lcmFsIl0sWzEsInNlY3Rpb24tdGl0bGUiXSxbMSwiY29udHJvbC1yb3ciLCJ4LWF4aXMtdHlwZSJdLFsiaWQiLCJ4LWF4aXMtdHlwZS1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWzMsInZhbHVlIiwib3B0aW9ucyIsInNlbGVjdGlvbkNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtc3RlcC1zZWxlY3RvciIsMywidGl0bGUiXSxbMywiY2hlY2tlZCIsImRpc2FibGVkIiwiY2hhbmdlIl0sWzEsImluZGVudCJdLFsxLCJpbmRlbnQiLCJyYW5nZS1zZWxlY3Rpb24iXSxbMSwiY29udHJvbC1yb3ciLCJsaW5rZWQtdGltZSIsImluZGVudCJdLFsibWF0LWJ1dHRvbiIsIiIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93IiwiY2FyZC13aWR0aCJdLFsiaWQiLCJjYXJkLXdpZHRoLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiY2FyZC13aWR0aC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIlJlc2V0IGNhcmQgd2lkdGgiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Il0sWzEsInNjYWxhcnMiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXNtb290aGluZyJdLFsiaWQiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIwIiwic3RlcCIsIjAuMDAxIiwxLCJzbGlkZXItaW5wdXQiLDMsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udHJvbC1yb3ciLCJ0b29sdGlwLXNvcnQiXSxbMSwiY29udHJvbC1uYW1lIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1pZ25vcmUtb3V0bGllcnMiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtcGFydGl0aW9uLXgiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCIsInRpdGxlIiwiTm9uLW1vbm90b25pYyBzdGVwcyBjYW4gb2NjdXIgd2hlbiByZXVzaW5nIGEgbG9nZGlyIHdpdGggbXVsdGlwbGUgc3VtbWFyeSB3cml0ZXJzIGFuZCBvdmVybGFwcGluZyBzdGVwcy4gTGluZSBjaGFydHMsIHdpdGhvdXQgdGhpcyBvcHRpb24gZW5hYmxlZCwgY2FuIGFwcGVhciB6aWcgemFnZ2VkLiBUaGlzIGlzIGNvbW1vbiB3aGVuIHJlc3RhcnRpbmcgZnJvbSBhIGNoZWNrcG9pbnQuXG5cbldoZW4gZW5hYmxlZCwgYSBub24tbW9ub3RvbmljIHRpbWUgc2VyaWVzIGNvbXBvc2VkIG9mIE4gbW9ub3RvbmljIHBpZWNlcyB3aWxsIGJlIHNob3duIGFzIE4gbW9ub3RvbmljIGxpbmVzLiIsMSwiaW5mbyJdLFsxLCJIaXN0b2dyYW1zIl0sWzEsImNvbnRyb2wtcm93IiwiaGlzdG9ncmFtLW1vZGUiXSxbImNsYXNzIiwiaW1hZ2UiLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsic3ZnSWNvbiIsImVkaXRfMjRweCJdLFsxLCJpbWFnZSJdLFsxLCJjb250cm9sLXJvdyIsImltYWdlLWJyaWdodG5lc3MiXSxbImlkIiwiaW1hZ2UtYnJpZ2h0bmVzcy1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJtYXgiLCJtaW4iLCJzdGVwIiwidmFsdWUiLCJ0aHVtYkxhYmVsIiwiZGlzcGxheVdpdGgiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJSZXNldCBicmlnaHRuZXNzIiwxLCJyZXNldC1idXR0b24iLDMsImNsaWNrIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtY29udHJhc3QiXSxbImlkIiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWNvbnN0cmFzdC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImRpc3BsYXlXaXRoIiwiaW5wdXQiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGksInRpdGxlIiwiUmVzZXQgY29udHJhc3QiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1zaG93LWFjdHVhbC1zaXplIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwic2VjdGlvbiIsMCkoMSwiaDMiLDEpLFQoMiwiR2VuZXJhbCIpLGcoKSxoKDMsImRpdiIsMikoNCwiZGl2IiwzKSxUKDUsIkhvcml6b250YWwgQXhpcyIpLGcoKSxoKDYsInRiLWRyb3Bkb3duIiw0KSxJKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnhBeGlzVHlwZUNoYW5nZWQuZW1pdChvKX0pLGcoKSgpLGgoNywiZGl2Iiw1KSg4LCJtYXQtY2hlY2tib3giLDYpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5zdGVwU2VsZWN0b3JUb2dnbGVkLmVtaXQoKX0pLFQoOSwiRW5hYmxlIHN0ZXAgc2VsZWN0aW9uIGFuZCBkYXRhIHRhYmxlICIpLGcoKSxoKDEwLCJzcGFuIiw3KSxUKDExLCIoU2NhbGFycyBvbmx5KSIpLGcoKSxoKDEyLCJkaXYiLDgpKDEzLCJtYXQtY2hlY2tib3giLDYpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5yYW5nZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksVCgxNCwiRW5hYmxlIFJhbmdlIFNlbGVjdGlvbiAiKSxnKCkoKSxoKDE1LCJkaXYiLDkpKDE2LCJtYXQtY2hlY2tib3giLDYpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5saW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCl9KSxUKDE3KSxnKCkoKSxTKDE4LGExZSwzLDMsImJ1dHRvbiIsMTApLGcoKSxoKDE5LCJkaXYiLDExKSgyMCwiZGl2IiwxMiksVCgyMSwiQ2FyZCBXaWR0aCIpLGcoKSxoKDIyLCJkaXYiLDEzKSgyMywibWF0LXNsaWRlciIsMTQpLEkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5jYXJkV2lkdGhTbGlkZXJDaGFuZ2VkJC5lbWl0KG8udmFsdWUpfSksZygpLGgoMjQsImJ1dHRvbiIsMTUpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmNhcmRXaWR0aFJlc2V0LmVtaXQoKX0pLFAoMjUsIm1hdC1pY29uIiwxNiksZygpKCkoKSgpLGgoMjYsInNlY3Rpb24iLDE3KSgyNywiaDMiLDEpLFQoMjgsIlNjYWxhcnMiKSxnKCksaCgyOSwiZGl2IiwxOCkoMzAsImRpdiIsMTkpLFQoMzEsIlNtb290aGluZyIpLGcoKSxoKDMyLCJkaXYiLDEzKSgzMywibWF0LXNsaWRlciIsMjApLEkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLGcoKSxoKDM0LCJpbnB1dCIsMjEpLEkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0lucHV0KG8pfSksZygpKCkoKSxoKDM1LCJkaXYiLDIyKSgzNiwiZGl2IiwyMyksVCgzNywiVG9vbHRpcCBzb3J0aW5nIG1ldGhvZCIpLGcoKSxoKDM4LCJ0Yi1kcm9wZG93biIsNCksSSgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50b29sdGlwU29ydENoYW5nZWQuZW1pdChvKX0pLGcoKSgpLGgoMzksImRpdiIsMjQpKDQwLCJtYXQtY2hlY2tib3giLDI1KSxJKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KG8uY2hlY2tlZCl9KSxUKDQxLCJJZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZyIpLGcoKSgpLGgoNDIsImRpdiIsMjYpKDQzLCJtYXQtY2hlY2tib3giLDI1KSxJKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQuZW1pdCgpfSksVCg0NCwiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksZygpLFAoNDUsIm1hdC1pY29uIiwyNyksZygpKCksaCg0Niwic2VjdGlvbiIsMjgpKDQ3LCJoMyIsMSksVCg0OCwiSGlzdG9ncmFtcyIpLGcoKSxoKDQ5LCJkaXYiLDI5KSg1MCwiZGl2IiwyMyksVCg1MSwiTW9kZSIpLGcoKSxoKDUyLCJ0Yi1kcm9wZG93biIsNCksSSgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KG8pfSksZygpKCkoKSxTKDUzLGwxZSwyMCwxMywic2VjdGlvbiIsMzApKSwyJmUmJih2KDYpLF8oInZhbHVlIixpLnhBeGlzVHlwZSkoIm9wdGlvbnMiLGkuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zKSx2KDEpLF8oInRpdGxlIixpLmlzQXhpc1R5cGVTdGVwKCk/IiI6Ik9ubHkgYXZhaWxhYmxlIHdoZW4gSG9yaXpvbnRhbCBBeGlzIGlzIHNldCB0byBzdGVwIiksdigxKSxfKCJjaGVja2VkIixpLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCkoImRpc2FibGVkIiwhaS5pc0F4aXNUeXBlU3RlcCgpKSx2KDUpLF8oImNoZWNrZWQiLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWkuaXNBeGlzVHlwZVN0ZXAoKSksdigzKSxfKCJjaGVja2VkIixpLmlzTGlua2VkVGltZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWkuaXNBeGlzVHlwZVN0ZXAoKSksdigxKSxIZSgiTGluayBieSBzdGVwICIsaS5nZXRMaW5rZWRUaW1lU2VsZWN0aW9uU3RhcnRTdGVwKCksIiAiKSx2KDEpLF8oIm5nSWYiLGkuaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCksdig1KSxfKCJtYXgiLGkuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFKSgibWluIixpLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRSkoInN0ZXAiLDUwKSgidmFsdWUiLGkuY2FyZE1pbldpZHRoKSgidGh1bWJMYWJlbCIsITEpLHYoMTApLF8oIm1heCIsaS5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixpLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSx2KDEpLF8oIm1heCIsaS5NQVhfU01PT1RISU5HX1ZBTFVFKSgidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSx2KDQpLF8oInZhbHVlIixpLnRvb2x0aXBTb3J0KSgib3B0aW9ucyIsaS5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucyksdigyKSxfKCJjaGVja2VkIixpLmlnbm9yZU91dGxpZXJzKSx2KDMpLF8oImNoZWNrZWQiLGkuc2NhbGFyUGFydGl0aW9uWCksdig5KSxfKCJ2YWx1ZSIsaS5oaXN0b2dyYW1Nb2RlKSgib3B0aW9ucyIsaS5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zKSx2KDEpLF8oIm5nSWYiLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRlcGVuZGVuY2llczpbeW4sRmUsbVEsSmksJGksaGEsRW4sRGRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTJweH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9c2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtwYWRkaW5nOjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDpub3JtYWw7bWFyZ2luOjAgMCAxMnB4IDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2VjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250cm9sLXJvd1tfbmdjb250ZW50LSVDT01QJV06bm90KDpoYXMoICsgLmNvbnRyb2wtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSA+IG1hdC1jaGVja2JveCkpW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206MTJweH0uY29udHJvbC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAucmVzZXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo2cHh9LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjoxcHggc29saWQgIzhlOThhMztib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDoxMnB4O3BhZGRpbmc6MCA0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNDI1MDY2fS5zY2FsYXJzLXNtb290aGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7d2lkdGg6NWVtfS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTVweDttYXJnaW4tbGVmdDo1cHg7d2lkdGg6MTVweDttaW4td2lkdGg6MTVweH1tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0Oi0xMXB4fW1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVse2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEycHg7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3BhZGRpbmctbGVmdDowcHg7d2hpdGUtc3BhY2U6bm93cmFwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1tYXQtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH0uY29sdW1uLWVkaXQtbWVudS10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OjI4cHg7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjEycHh9LmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlLm1hdC1idXR0b24td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlLnRvZ2dsZS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VlZX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29sdW1uLWVkaXQtbWVudS10b2dnbGUudG9nZ2xlLW9wZW5lZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZS50b2dnbGUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9LmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6NnB4fXRiLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfS5jb250cm9sLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuaW5kZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoyOHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksX1E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHh2KSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChTdSksdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdCh3dSksdGhpcy5pc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChkUyksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChYRiksdGhpcy5zdGVwTWluTWF4JD10aGlzLnN0b3JlLnNlbGVjdChZRiksdGhpcy5pc1NsaWRlT3V0TWVudU9wZW4kPXRoaXMuc3RvcmUuc2VsZWN0KGwxKSx0aGlzLmlzSW1hZ2VTdXBwb3J0RW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodnUpLnBpcGUoa2UoQm9vbGVhbiksWXQoMSksQnQodGhpcy5zdG9yZS5zZWxlY3QoY1MpKSxOKChbLGldKT0+aSkpLHRoaXMudG9vbHRpcFNvcnQkPXRoaXMuc3RvcmUuc2VsZWN0KGhmKSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChnZiksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KE9sKSx0aGlzLmNhcmRNaW5XaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoWGgpLHRoaXMuaGlzdG9ncmFtTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QodDEpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChiZCksdGhpcy5zY2FsYXJQYXJ0aXRpb25YJD10aGlzLnN0b3JlLnNlbGVjdChuMSksdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChpMSksdGhpcy5pbWFnZUNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QocjEpLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QobzEpfW9uVG9vbHRpcFNvcnRDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobVQoe3NvcnQ6ZX0pKX1vbklnbm9yZU91dGxpZXJzQ2hhbmdlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goaFQoKSl9b25YQXhpc1R5cGVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZ1Qoe3hBeGlzVHlwZTplfSkpfW9uQ2FyZFdpZHRoQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKF9UKHtjYXJkTWluV2lkdGg6ZX0pKX1vbkNhcmRXaWR0aFJlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChiVCgpKX1vbkhpc3RvZ3JhbU1vZGVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRVQoe2hpc3RvZ3JhbU1vZGU6ZX0pKX1vblNjYWxhclNtb290aGluZ0NoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh2VCh7c21vb3RoaW5nOmV9KSl9b25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goeVQoKSl9b25JbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHhUKHticmlnaHRuZXNzSW5NaWxsaTplfSkpfW9uSW1hZ2VCcmlnaHRuZXNzUmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1UKCkpfW9uSW1hZ2VDb250cmFzdFJlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3VCgpKX1vbkltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKENUKHtjb250cmFzdEluTWlsbGk6ZX0pKX1vbkltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChTVCgpKX1vbkxpbmtlZFRpbWVUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChGVCh7YWZmb3JkYW5jZTpZcy5DSEVDS19CT1h9KSl9b25TdGVwU2VsZWN0b3JUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChJZCh7YWZmb3JkYW5jZTpZcy5DSEVDS19CT1h9KSl9b25SYW5nZVNlbGVjdGlvblRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE5UKHthZmZvcmRhbmNlOllzLkNIRUNLX0JPWH0pKX1vblNsaWRlT3V0VG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goc1QoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyJdXSxkZWNsczoxOSx2YXJzOjU0LGNvbnN0czpbWzMsImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsInRvb2x0aXBTb3J0IiwiaWdub3JlT3V0bGllcnMiLCJ4QXhpc1R5cGUiLCJjYXJkTWluV2lkdGgiLCJoaXN0b2dyYW1Nb2RlIiwic2NhbGFyU21vb3RoaW5nIiwic2NhbGFyUGFydGl0aW9uWCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsImltYWdlU2hvd0FjdHVhbFNpemUiLCJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLCJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsImlzTGlua2VkVGltZUVuYWJsZWQiLCJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwibGlua2VkVGltZVNlbGVjdGlvbiIsInN0ZXBNaW5NYXgiLCJpc1NsaWRlT3V0TWVudU9wZW4iLCJ0b29sdGlwU29ydENoYW5nZWQiLCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLCJ4QXhpc1R5cGVDaGFuZ2VkIiwiY2FyZFdpZHRoQ2hhbmdlZCIsImNhcmRXaWR0aFJlc2V0IiwiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLCJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIiwic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCIsImltYWdlQnJpZ2h0bmVzc1Jlc2V0IiwiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIiwiaW1hZ2VDb250cmFzdFJlc2V0IiwiaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQiLCJsaW5rZWRUaW1lVG9nZ2xlZCIsInN0ZXBTZWxlY3RvclRvZ2dsZWQiLCJyYW5nZVNlbGVjdGlvblRvZ2dsZWQiLCJvblNsaWRlT3V0VG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MtY29tcG9uZW50IiwwKSxJKCJ0b29sdGlwU29ydENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVG9vbHRpcFNvcnRDaGFuZ2VkKG8pfSkoImlnbm9yZU91dGxpZXJzQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbklnbm9yZU91dGxpZXJzQ2hhbmdlZCgpfSkoInhBeGlzVHlwZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uWEF4aXNUeXBlQ2hhbmdlZChvKX0pKCJjYXJkV2lkdGhDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNhcmRXaWR0aENoYW5nZWQobyl9KSgiY2FyZFdpZHRoUmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DYXJkV2lkdGhSZXNldCgpfSkoImhpc3RvZ3JhbU1vZGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkhpc3RvZ3JhbU1vZGVDaGFuZ2VkKG8pfSkoInNjYWxhclNtb290aGluZ0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2NhbGFyU21vb3RoaW5nQ2hhbmdlZChvKX0pKCJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl9KSgiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQobyl9KSgiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JbWFnZUJyaWdodG5lc3NSZXNldCgpfSkoImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25JbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQobyl9KSgiaW1hZ2VDb250cmFzdFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VDb250cmFzdFJlc2V0KCl9KSgiaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCgpfSkoImxpbmtlZFRpbWVUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uTGlua2VkVGltZVRvZ2dsZWQoKX0pKCJzdGVwU2VsZWN0b3JUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZCgpfSkoInJhbmdlU2VsZWN0aW9uVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJhbmdlU2VsZWN0aW9uVG9nZ2xlZCgpfSkoIm9uU2xpZGVPdXRUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2xpZGVPdXRUb2dnbGVkKCl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpLGooOSwiYXN5bmMiKSxqKDEwLCJhc3luYyIpLGooMTEsImFzeW5jIiksaigxMiwiYXN5bmMiKSxqKDEzLCJhc3luYyIpLGooMTQsImFzeW5jIiksaigxNSwiYXN5bmMiKSxqKDE2LCJhc3luYyIpLGooMTcsImFzeW5jIiksaigxOCwiYXN5bmMiKSxnKCkpLDImZSYmXygiaXNJbWFnZVN1cHBvcnRFbmFibGVkIixXKDEsMTgsaS5pc0ltYWdlU3VwcG9ydEVuYWJsZWQkKSkoInRvb2x0aXBTb3J0IixXKDIsMjAsaS50b29sdGlwU29ydCQpKSgiaWdub3JlT3V0bGllcnMiLFcoMywyMixpLmlnbm9yZU91dGxpZXJzJCkpKCJ4QXhpc1R5cGUiLFcoNCwyNCxpLnhBeGlzVHlwZSQpKSgiY2FyZE1pbldpZHRoIixXKDUsMjYsaS5jYXJkTWluV2lkdGgkKSkoImhpc3RvZ3JhbU1vZGUiLFcoNiwyOCxpLmhpc3RvZ3JhbU1vZGUkKSkoInNjYWxhclNtb290aGluZyIsVyg3LDMwLGkuc2NhbGFyU21vb3RoaW5nJCkpKCJzY2FsYXJQYXJ0aXRpb25YIixXKDgsMzIsaS5zY2FsYXJQYXJ0aXRpb25YJCkpKCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIixXKDksMzQsaS5pbWFnZUJyaWdodG5lc3NJbk1pbGxpJCkpKCJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsVygxMCwzNixpLmltYWdlQ29udHJhc3RJbk1pbGxpJCkpKCJpbWFnZVNob3dBY3R1YWxTaXplIixXKDExLDM4LGkuaW1hZ2VTaG93QWN0dWFsU2l6ZSQpKSgiaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkIixXKDEyLDQwLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsVygxMyw0MixpLmlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkJCkpKCJpc0xpbmtlZFRpbWVFbmFibGVkIixXKDE0LDQ0LGkuaXNMaW5rZWRUaW1lRW5hYmxlZCQpKSgiaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsVygxNSw0NixpLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFcoMTYsNDgsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpKCJzdGVwTWluTWF4IixXKDE3LDUwLGkuc3RlcE1pbk1heCQpKSgiaXNTbGlkZU91dE1lbnVPcGVuIixXKDE4LDUyLGkuaXNTbGlkZU91dE1lbnVPcGVuJCkpfSxkZXBlbmRlbmNpZXM6W2dRLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxiUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1yaWdodC1wYW5lIl1dLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKDAsIm1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzIil9LGRlcGVuZGVuY2llczpbX1FdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGgxZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsNCl9ZnVuY3Rpb24gZzFlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw0KX1mdW5jdGlvbiBfMWUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDQpfWZ1bmN0aW9uIGIxZShuLHQpezEmbiYmUCgwLCJkaXYiLDUpfXZhciB6VD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5Db2x1bW5IZWFkZXJUeXBlPWh0fWdldFNwZWNpYWxUeXBlQ2xhc3NlcyhlKXtzd2l0Y2goZSl7Y2FzZSBodC5TVEVQX0FUX01JTjpyZXR1cm4ic3RlcC1hdC1taW4iO2Nhc2UgaHQuU1RFUF9BVF9NQVg6cmV0dXJuInN0ZXAtYXQtbWF4IjtkZWZhdWx0OnJldHVybiIifX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1oZWFkZXIiXV0saW5wdXRzOntoZWFkZXI6ImhlYWRlciJ9LGRlY2xzOjcsdmFyczo2LGNvbnN0czpbWzEsImhlYWRlci1jb250YWluZXIiLDMsIm5nU3dpdGNoIl0sWyJzdmdJY29uIiwiY2hhbmdlX2hpc3RvcnlfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFszLCJuZ0NsYXNzIl0sWyJzdmdJY29uIiwiY2hhbmdlX2hpc3RvcnlfMjRweCJdLFsxLCJleHRyYS1yaWdodC1wYWRkaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApLFMoMSxoMWUsMSwwLCJtYXQtaWNvbiIsMSksUygyLGcxZSwxLDAsIm1hdC1pY29uIiwxKSxTKDMsXzFlLDEsMCwibWF0LWljb24iLDEpLFMoNCxiMWUsMSwwLCJkaXYiLDIpLGgoNSwic3BhbiIsMyksVCg2KSxnKCkoKSksMiZlJiYoXygibmdTd2l0Y2giLGkuaGVhZGVyLnR5cGUpLHYoMSksXygibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuVkFMVUVfQ0hBTkdFKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlBFUkNFTlRBR0VfQ0hBTkdFKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlJBV19DSEFOR0UpLHYoMiksXygibmdDbGFzcyIsaS5nZXRTcGVjaWFsVHlwZUNsYXNzZXMoaS5oZWFkZXIudHlwZSkpLHYoMSksYnQoaS5oZWFkZXIuZGlzcGxheU5hbWUpKX0sZGVwZW5kZW5jaWVzOlt5bixzcixTcix1dSxFbl0sc3R5bGVzOlsiLmhlYWRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmV4dHJhLXJpZ2h0LXBhZGRpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctcmlnaHQ6MXB4fW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O21pbi13aWR0aDoxMnB4O2xpbmUtaGVpZ2h0OjEycHh9LnN0ZXAtYXQtbWluW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6MzdweH0uc3RlcC1hdC1tYXhbX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDo0MHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gdjFlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw4KSxJKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7bGV0IG89WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5kcmFnU3RhcnQobykpfSkoImRyYWdlbmQiLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gUSh3KCkuZHJhZ0VuZChyKSl9KSgiZHJhZ2VudGVyIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0LHM9dygpLmRhdGFUYWJsZU1vZGU7cmV0dXJuIFEodygpLmRyYWdFbnRlcihvLHMpKX0pLGgoMSwibWF0LWNoZWNrYm94Iiw5KSxJKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bGV0IG89WChlKS4kaW1wbGljaXQscz13KCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gUSh3KCkudG9nZ2xlSGVhZGVyKG8scykpfSksUCgyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsMTApLGcoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQ7XygibmdDbGFzcyIsdygyKS5nZXRIaWdobGlnaHRDbGFzc2VzKGUpKSx2KDEpLF8oImNoZWNrZWQiLGUuZW5hYmxlZCksdigxKSxfKCJoZWFkZXIiLGUpfX1mdW5jdGlvbiB5MWUobix0KXsxJm4mJlMoMCx2MWUsMywzLCJkaXYiLDcpLDImbiYmXygibmdGb3JPZiIsdC5oZWFkZXJzKX12YXIgeVE9ZnVuY3Rpb24obix0KXtyZXR1cm57aGVhZGVyczpuLGRhdGFUYWJsZU1vZGU6dH19LFBOPW49PntuLnByZXZlbnREZWZhdWx0KCl9LHgxZT0obix0LGUpPT57bGV0IGk9Wy4uLmVdO3JldHVybiBpLnNwbGljZShuLDEpLGkuc3BsaWNlKHQsMCxlW25dKSxpfSxVVD0obix0KT0+dC5maW5kSW5kZXgoZT0+ZS5uYW1lPT09bi5uYW1lKSxYdT0oKCk9PihmdW5jdGlvbihuKXtuW24uVE9QPTBdPSJUT1AiLG5bbi5CT1RUT009MV09IkJPVFRPTSJ9KFh1fHwoWHU9e30pKSxYdSkpKCkseFE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5EYXRhVGFibGVNb2RlPXJvLHRoaXMuaGlnaGxpZ2h0RWRnZT1YdS5UT1AsdGhpcy5vblNjYWxhclRhYmxlQ29sdW1uRWRpdD1uZXcgRix0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkPW5ldyBGLHRoaXMub25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZD1uZXcgRix0aGlzLm9uVGFiQ2hhbmdlPW5ldyBGfW5nT25EZXN0cm95KCl7dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixQTil9dGFiQ2hhbmdlKGUpe3RoaXMub25UYWJDaGFuZ2UuZW1pdCgwPT09ZS5pbmRleD9yby5TSU5HTEU6cm8uUkFOR0UpfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyPWUsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixQTil9ZHJhZ0VuZChlKXtpZighdGhpcy5kcmFnZ2luZ0hlYWRlcnx8IXRoaXMuaGlnaGxpZ2h0ZWRIZWFkZXIpcmV0dXJuO2xldCBpPXRoaXMuZ2V0SGVhZGVyc0Zvck1vZGUoZSk7dGhpcy5vblNjYWxhclRhYmxlQ29sdW1uRWRpdC5lbWl0KHtkYXRhVGFibGVNb2RlOmUsaGVhZGVyczp4MWUoVVQodGhpcy5kcmFnZ2luZ0hlYWRlcixpKSxVVCh0aGlzLmhpZ2hsaWdodGVkSGVhZGVyLGkpLGkpfSksdGhpcy5kcmFnZ2luZ0hlYWRlcj12b2lkIDAsdGhpcy5oaWdobGlnaHRlZEhlYWRlcj12b2lkIDAsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixQTil9ZHJhZ0VudGVyKGUsaSl7aWYoIXRoaXMuZHJhZ2dpbmdIZWFkZXIpcmV0dXJuO2xldCByPXRoaXMuZ2V0SGVhZGVyc0Zvck1vZGUoaSk7dGhpcy5oaWdobGlnaHRFZGdlPVVUKGUscik8VVQodGhpcy5kcmFnZ2luZ0hlYWRlcixyKT9YdS5UT1A6WHUuQk9UVE9NLHRoaXMuaGlnaGxpZ2h0ZWRIZWFkZXI9ZX10b2dnbGVIZWFkZXIoZSxpKXt0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkLmVtaXQoe2RhdGFUYWJsZU1vZGU6aSxoZWFkZXI6ZX0pfWdldEhpZ2hsaWdodENsYXNzZXMoZSl7cmV0dXJuIGUubmFtZSE9PXRoaXMuaGlnaGxpZ2h0ZWRIZWFkZXI/Lm5hbWU/e306e2hpZ2hsaWdodGVkOiEwLCJoaWdobGlnaHQtdG9wIjp0aGlzLmhpZ2hsaWdodEVkZ2U9PT1YdS5UT1AsImhpZ2hsaWdodC1ib3R0b20iOnRoaXMuaGlnaGxpZ2h0RWRnZT09PVh1LkJPVFRPTX19Z2V0U2VsZWN0ZWRUYWJJbmRleCgpe3JldHVybiB0aGlzLnNlbGVjdGVkVGFiPT09cm8uU0lOR0xFPzA6MX1nZXRIZWFkZXJzRm9yTW9kZShlKXtyZXR1cm4gZT09PXJvLlNJTkdMRT90aGlzLnNpbmdsZUhlYWRlcnM6dGhpcy5yYW5nZUhlYWRlcnN9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e3JhbmdlSGVhZGVyczoicmFuZ2VIZWFkZXJzIixzaW5nbGVIZWFkZXJzOiJzaW5nbGVIZWFkZXJzIixzZWxlY3RlZFRhYjoic2VsZWN0ZWRUYWIifSxvdXRwdXRzOntvblNjYWxhclRhYmxlQ29sdW1uRWRpdDoib25TY2FsYXJUYWJsZUNvbHVtbkVkaXQiLG9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkOiJvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCIsb25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZDoib25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCIsb25UYWJDaGFuZ2U6Im9uVGFiQ2hhbmdlIn0sZGVjbHM6MTEsdmFyczoxMyxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIG9uIGEgYnV0dG9uIHRvIGNsb3NlIHRoZSBjb2x1bW4gZWRpdG9yLuKQn2NiNjE2Y2U5YjQzMjdiNDFlNmJkYjkzNDQ2NjliYTdjNzJlMmM3MGXikJ83MjA1NjM1NzY0NzEzMDM0ODQyOkNsb3NlIGNvbHVtbiBlZGl0b3JgLFtbMSwiZWRpdG9yLWNvbnRyb2xzIl0sWzEsInRhYi1ncm91cCIsMywic2VsZWN0ZWRJbmRleCIsInNlbGVjdGVkVGFiQ2hhbmdlIl0sWzMsImxhYmVsIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJmb290ZXIiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsImNsb3NlLWJ1dHRvbiIsMywiY2xpY2siXSxbImhlYWRlckxpc3QiLCIiXSxbImNsYXNzIiwiaGVhZGVyLWxpc3QtaXRlbSIsImRyYWdnYWJsZSIsInRydWUiLDMsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImRyYWdnYWJsZSIsInRydWUiLDEsImhlYWRlci1saXN0LWl0ZW0iLDMsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbMywiaGVhZGVyIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJtYXQtdGFiLWdyb3VwIiwxKSxJKCJzZWxlY3RlZFRhYkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkudGFiQ2hhbmdlKG8pfSksaCgyLCJtYXQtdGFiIiwyKSxQKDMsIm5nQ29udGV4dCIsMyksZygpLGgoNCwibWF0LXRhYiIsMiksUCg1LCJuZ0NvbnRleHQiLDMpLGcoKSgpKCksaCg2LCJkaXYiLDQpKDcsImJ1dHRvbiIsNSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZC5lbWl0KCl9KSxUKDgsIiBDbG9zZSAiKSxnKCkoKSxTKDkseTFlLDEsMSwibmctdGVtcGxhdGUiLG51bGwsNixXdCkpLDImZSl7bGV0IHI9aXQoMTApO3YoMSksXygic2VsZWN0ZWRJbmRleCIsaS5nZXRTZWxlY3RlZFRhYkluZGV4KCkpLHYoMSksXygibGFiZWwiLCJTaW5nbGUiKSx2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLHIpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIscXIoNyx5USxpLnNpbmdsZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlNJTkdMRSkpLHYoMSksXygibGFiZWwiLCJSYW5nZSIpLHYoMSksXygibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixxcigxMCx5USxpLnJhbmdlSGVhZGVycyxpLkRhdGFUYWJsZU1vZGUuUkFOR0UpKX19LGRlcGVuZGVuY2llczpbeW4sbm4sTHIselQsaGEsc3ksYkUsSmldLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAgIC5tYXQtdGFiLWxhYmVse21pbi13aWR0aDowO3BhZGRpbmc6MCAzMHB4fS5lZGl0b3ItY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMCUgLSA0NXB4KX0udGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjA7aGVpZ2h0OjEwMCV9LmhlYWRlci1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4O2hlaWdodDoyNHB4fS5oaWdobGlnaHRlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfS5oaWdobGlnaHQtYm90dG9tW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZmY5ODAwfS5oaWdobGlnaHQtdG9wW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjJweCBzb2xpZCAjZmY5ODAwfS5mb290ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtwYWRkaW5nOjRweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5mb290ZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NX0uY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO3dpZHRoOjg0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntmbGV4OjF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxDUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNpbmdsZUhlYWRlcnMkPXRoaXMuc3RvcmUuc2VsZWN0KEN2KSx0aGlzLnJhbmdlSGVhZGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoTXYpLHRoaXMuc2VsZWN0ZWRUYWIkPXRoaXMuc3RvcmUuc2VsZWN0KFNXKX1vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFVnKGUpKX1vblNjYWxhclRhYmxlQ29sdW1uRWRpdChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHpnKGUpKX1vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChjVCgpKX1vblRhYkNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxUKHt0YWI6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3IiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywic2luZ2xlSGVhZGVycyIsInJhbmdlSGVhZGVycyIsInNlbGVjdGVkVGFiIiwib25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQiLCJvblNjYWxhclRhYmxlQ29sdW1uRWRpdCIsIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQiLCJvblRhYkNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvci1jb21wb25lbnQiLDApLEkoIm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZChvKX0pKCJvblNjYWxhclRhYmxlQ29sdW1uRWRpdCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY2FsYXJUYWJsZUNvbHVtbkVkaXQobyl9KSgib25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkKCl9KSgib25UYWJDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGFiQ2hhbmdlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksZygpKSwyJmUmJl8oInNpbmdsZUhlYWRlcnMiLFcoMSwzLGkuc2luZ2xlSGVhZGVycyQpKSgicmFuZ2VIZWFkZXJzIixXKDIsNSxpLnJhbmdlSGVhZGVycyQpKSgic2VsZWN0ZWRUYWIiLFcoMyw3LGkuc2VsZWN0ZWRUYWIkKSl9LGRlcGVuZGVuY2llczpbeFEsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFdnPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5PUklHSU5BTD0wXT0iT1JJR0lOQUwiLG5bbi5ERVJJVkVEPTFdPSJERVJJVkVEIn0oV2d8fChXZz17fSkpLFdnKSkoKSx3MWU9cShfVyxJdSwobix0KT0+bmV3IFNldChPYmplY3QuZW50cmllcyhuLnNjYWxhcnMudGFnVG9SdW5zKS5maWx0ZXIoKFssZV0pPT4hdHx8IXQuc2l6ZXx8ZS5zb21lKGk9PnQ/LmdldChpKSkpLm1hcCgoW2VdKT0+ZSkpKSxTMWU9cShlMSxJdSx3Vyx3MWUsKG4sdCxlLGkpPT57bGV0IHI9QXJyYXkuZnJvbSh0Py52YWx1ZXMoKXx8W10pLnNvbWUoQm9vbGVhbik7cmV0dXJuIG4uZmlsdGVyKG89PnBhKG8ucGx1Z2luKT9Cb29sZWFuKHQmJnQuZ2V0KG8ucnVuSWQpKTohZXx8IXJ8fG8ucGx1Z2luIT09em4uU0NBTEFSU3x8aS5oYXMoby50YWcpKX0pLE5mPXEoUzFlLG49Pm4uc29ydCgodCxlKT0+eXkodC50YWcsZS50YWcpKSksalQ9e2ZpbHRlclJ1bkl0ZW1zQnlSZWdleDoobix0LGUpPT50P24uZmlsdGVyKGk9PlFoKHtydW5OYW1lOmkucnVuLm5hbWUsZXhwZXJpbWVudEFsaWFzOmkuZXhwZXJpbWVudEFsaWFzfSx0LGUpKTpuLG1hdGNoRmlsdGVyOihuLHQpPT52b2lkIDA9PT10P24uaW5jbHVkZVVuZGVmaW5lZDpuLnR5cGU9PT1nbi5ESVNDUkVURT9uLmZpbHRlclZhbHVlcy5pbmNsdWRlcyh0KTpuLnR5cGU9PT1nbi5JTlRFUlZBTCYmIm51bWJlciI9PXR5cGVvZiB0JiZuLmZpbHRlckxvd2VyVmFsdWU8PXQmJnQ8PW4uZmlsdGVyVXBwZXJWYWx1ZSxmaWx0ZXJSdW5JdGVtc0J5SHBhcmFtQW5kTWV0cmljRmlsdGVyOihuLHQsZSk9Pm4uZmlsdGVyKCh7aHBhcmFtczppLG1ldHJpY3M6cn0pPT57bGV0IG89Wy4uLnQuZW50cmllcygpXS5ldmVyeSgoW2EsbF0pPT57bGV0IGM9aS5nZXQoYSk7cmV0dXJuIGpULm1hdGNoRmlsdGVyKGwsYyl9KSxzPVsuLi5lLmVudHJpZXMoKV0uZXZlcnkoKFthLGxdKT0+e2xldCBjPXIuZ2V0KGEpO3JldHVybiBqVC5tYXRjaEZpbHRlcihsLGMpfSk7cmV0dXJuIG8mJnN9KX0sTVE9cShLRixtMSxoMSwobix0LGUpPT5uZXcgTWFwKFsuLi5uLC4uLnQsLi4uZV0pKSxFMWU9cShiMSxXNixJdSxBdSx6YSwobix0LGUsaSxyKT0+bi5tYXAobz0+e2xldCBzPW5ldyBNYXA7KG8uaHBhcmFtc3x8W10pLmZvckVhY2gobD0+e3Muc2V0KGwubmFtZSxsLnZhbHVlKX0pO2xldCBhPW5ldyBNYXA7cmV0dXJuKG8ubWV0cmljc3x8W10pLmZvckVhY2gobD0+e2Euc2V0KGwudGFnLGwudmFsdWUpfSkse3J1bjpvLGV4cGVyaW1lbnROYW1lOnRbby5leHBlcmltZW50SWRdfHwiIixleHBlcmltZW50QWxpYXM6cltvLmV4cGVyaW1lbnRJZF0sc2VsZWN0ZWQ6Qm9vbGVhbihlJiZlLmdldChvLmlkKSkscnVuQ29sb3I6aVtvLmlkXSxocGFyYW1zOnMsbWV0cmljczphfX0pKSxPTj1xKHZkLEUxZSxtMSxoMSxIYSwobix0LGUsaSxyKT0+e2xldCBvPWpULmZpbHRlclJ1bkl0ZW1zQnlSZWdleCh0LG4scj09PXduLkNPTVBBUkVfRVhQRVJJTUVOVCk7cmV0dXJuIGpULmZpbHRlclJ1bkl0ZW1zQnlIcGFyYW1BbmRNZXRyaWNGaWx0ZXIobyxlLGkpfSksd1E9cShPTixuPT5uZXcgU2V0KG4ubWFwKCh7cnVuOntpZDp0fX0pPT50KSkpLGtOPXEoZjEsbHIsKHtocGFyYW1zOm59LHQpPT50P24ubWFwKGU9Pih7dHlwZTpodC5IUEFSQU0sbmFtZTplLm5hbWUsZGlzcGxheU5hbWU6ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lLGVuYWJsZWQ6ITEscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITAsZmlsdGVyYWJsZTohMH0pKTpbXSkscWc9KFloKG49PnEoZDEobiksa04sKHQsZSk9PlsuLi50LC4uLmVdKSksKCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5jZGtTY3JvbGxhYmxlPWksdGhpcy5vblZpc2liaWxpdHlDaGFuZ2U9bmV3IEYsdGhpcy5uZ1Vuc3Vic2NyaWJlJD1uZXcgSWUsdGhpcy5vbkV2ZW50JD1uZXcgSWV9bmdPbkluaXQoKXtsZXQgZT17cm9vdDp0aGlzLmNka1Njcm9sbGFibGU/dGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50Om51bGx9O3RoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW4mJihlLnJvb3RNYXJnaW49dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbik7bGV0IGk9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHI9Pnt0aGlzLm9uRXZlbnQkLm5leHQocil9LGUpO2kub2JzZXJ2ZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLm5nVW5zdWJzY3JpYmUkLnN1YnNjcmliZSgoKT0+e2kudW5vYnNlcnZlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpfSksdGhpcy5vbkV2ZW50JC5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUocj0+e2xldCBvPXIuc2xpY2UoLTEpWzBdO3RoaXMub25WaXNpYmlsaXR5Q2hhbmdlLmVtaXQoe3Zpc2libGU6by5pc0ludGVyc2VjdGluZ30pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCl9d2FpdEZvckV2ZW50Rm9yVGVzdE9ubHkoKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+dGhpcy5vbkV2ZW50JC5waXBlKFl0KDEpKS5zdWJzY3JpYmUoKCk9PntlKCl9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoQ2QsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIl1dLGlucHV0czp7aW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW46ImludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luIn0sb3V0cHV0czp7b25WaXNpYmlsaXR5Q2hhbmdlOiJvblZpc2liaWxpdHlDaGFuZ2UifX0pLG59KSgpKSxTUT0iL3NjYWxhcl9zdW1tYXJ5IjtmdW5jdGlvbiBZZyhuLHQpe2xldCBlPW47cmV0dXJuIHQmJm4uc3RhcnRzV2l0aCh0KyIvIikmJihlPW4uc2xpY2UodC5sZW5ndGgrMSkpLGUuZW5kc1dpdGgoU1EpJiYoZT1lLnNsaWNlKDAsLVNRLmxlbmd0aCkpLGV8fG59dmFyIEdUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuaHJlZkF0dHI9dm9pZCAwLHRoaXMuc3JjQXR0cj12b2lkIDAsdGhpcy5pbmNsdWRlRmVhdHVyZUZsYWdzPSEwfWdldFVybFdpdGhGZWF0dXJlRmxhZ3MoZSl7cmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KFBoKS5waXBlKE4oaT0+e2lmKE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wKXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKFtbInRlbnNvckJvYXJkRmVhdHVyZUZsYWdzIixKU09OLnN0cmluZ2lmeShpKV1dKSxvPWUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iO3JldHVybiBlK28rU3RyaW5nKHIpfXJldHVybiBlfSkpfXNldCBocmVmKGUpe2UmJklDKHRoaXMuZ2V0VXJsV2l0aEZlYXR1cmVGbGFncyhlKSkudGhlbihpPT57dGhpcy5ocmVmQXR0cj1pLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfSl9c2V0IHNyYyhlKXtlJiZJQyh0aGlzLmdldFVybFdpdGhGZWF0dXJlRmxhZ3MoZSkpLnRoZW4oaT0+e3RoaXMuc3JjQXR0cj1pLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoJHQpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siYSIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiLCIiXSxbImltZyIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJocmVmIixpLmhyZWZBdHRyLGthKSgic3JjIixpLnNyY0F0dHIsa2EpfSxpbnB1dHM6e2luY2x1ZGVGZWF0dXJlRmxhZ3M6ImluY2x1ZGVGZWF0dXJlRmxhZ3MiLGhyZWY6ImhyZWYiLHNyYzoic3JjIn19KSxufSkoKSxUMWU9WyJtZWFzdXJlciJdLEQxZT1bImlucHV0Il0sVFE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLnN0eWxlPSJkZWZhdWx0Iix0aGlzLnBhdHRlcm5SZWdleD1uZXcgUmVnRXhwKCIuKiIpLHRoaXMuaXNWYWxpZD0hMCx0aGlzLm9uVmFsdWVDaGFuZ2U9bmV3IEYsdGhpcy5ibHVyPW5ldyBGLHRoaXMuZm9jdXM9bmV3IEYsdGhpcy5rZXlkb3duPW5ldyBGLHRoaXMua2V5dXA9bmV3IEYsdGhpcy5pbnRlcm5hbFZhbHVlPSIiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyPXRoaXMudXBkYXRlSW5wdXRXaWR0aC5iaW5kKHRoaXMpfW5nT25Jbml0KCl7ZG9jdW1lbnQuZm9udHMmJmRvY3VtZW50LmZvbnRzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRpbmdkb25lIix0aGlzLmZvbnRDaGFuZ2VMaXN0ZW5lcil9bmdPbkRlc3Ryb3koKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGluZ2RvbmUiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyKX1uZ09uQ2hhbmdlcyhlKXtlLnBhdHRlcm4mJih0aGlzLnBhdHRlcm5SZWdleD1uZXcgUmVnRXhwKHRoaXMucGF0dGVybj8/IiIpKSxlLnZhbHVlJiYodGhpcy5pbnRlcm5hbFZhbHVlPXRoaXMudmFsdWUpLHRoaXMuaXNWYWxpZD10aGlzLnBhdHRlcm5SZWdleC50ZXN0KHRoaXMuaW50ZXJuYWxWYWx1ZSl9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy51cGRhdGVJbnB1dFdpZHRoKCl9b25JbnB1dChlKXtsZXQgaT10aGlzLmludGVybmFsVmFsdWU7dGhpcy5pbnRlcm5hbFZhbHVlPXRoaXMuaW5wdXRFbFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlLHRoaXMuaW50ZXJuYWxWYWx1ZSE9PWkmJih0aGlzLmlzVmFsaWQ9dGhpcy5wYXR0ZXJuUmVnZXgudGVzdCh0aGlzLmludGVybmFsVmFsdWUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpLHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHt2YWx1ZTp0aGlzLmludGVybmFsVmFsdWV9KX11cGRhdGVJbnB1dFdpZHRoKCl7bGV0e3dpZHRoOmV9PXRoaXMubWVhc3VyZXJFbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuaW5wdXRFbFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoPWAke2V9cHhgfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKCR0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siY29udGVudC13cmFwcGluZy1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihHZShUMWUsNyxNZSksR2UoRDFlLDcsTWUpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLm1lYXN1cmVyRWxSZWY9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuaW5wdXRFbFJlZj1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZBcyhpLnN0eWxlKX0saW5wdXRzOnt2YWx1ZToidmFsdWUiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsc3R5bGU6InN0eWxlIixwYXR0ZXJuOiJwYXR0ZXJuIn0sb3V0cHV0czp7b25WYWx1ZUNoYW5nZToib25WYWx1ZUNoYW5nZSIsYmx1cjoiYmx1ciIsZm9jdXM6ImZvY3VzIixrZXlkb3duOiJrZXlkb3duIixrZXl1cDoia2V5dXAifSxmZWF0dXJlczpbR3RdLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1lYXN1cmVyIl0sWyJtZWFzdXJlciIsIiJdLFsiYXV0b2NvbXBsZXRlIiwib2ZmIiwic3BlbGxjaGVjayIsImZhbHNlIiwidHlwZSIsInRleHQiLDMsInZhbHVlIiwicGxhY2Vob2xkZXIiLCJibHVyIiwiZm9jdXMiLCJpbnB1dCIsImtleWRvd24iLCJrZXl1cCJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInNwYW4iKSgxLCJzcGFuIiwwLDEpLFQoMyksZygpLGgoNCwiaW5wdXQiLDIsMyksSSgiYmx1ciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuYmx1ci5lbWl0KG8pfSkoImZvY3VzIixmdW5jdGlvbihvKXtyZXR1cm4gaS5mb2N1cy5lbWl0KG8pfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbklucHV0KG8pfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLmtleWRvd24uZW1pdChvKX0pKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkua2V5dXAuZW1pdChvKX0pLGcoKSgpKSwyJmUmJihudCgiY29udGFpbmVyIiwhMCkoImlzLXZhbGlkIixpLmlzVmFsaWQpLHYoMyksYnQoaS5pbnRlcm5hbFZhbHVlfHxpLnBsYWNlaG9sZGVyKSx2KDEpLF8oInZhbHVlIixpLnZhbHVlKSgicGxhY2Vob2xkZXIiLGkucGxhY2Vob2xkZXIpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O3dpZHRoOm1heC1jb250ZW50fVtfbmdob3N0LSVDT01QJV06Zm9jdXMtd2l0aGluICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNmNTdjMDB9LmRlZmF1bHRbX25naG9zdC0lQ09NUCVdOmhvdmVyICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNlYmViZWJ9LmVycm9yW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06bm90KC5pcy12YWxpZCl7Ym9yZGVyLWNvbG9yOiNlZjlhOWF9LmVycm9yW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCAuZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMtd2l0aGluLCBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06bm90KC5pcy12YWxpZCk6aG92ZXIsIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKTpmb2N1cy13aXRoaW57Ym9yZGVyLWNvbG9yOiNlZjlhOWF9LmhpZ2gtY29udHJhc3RbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNiZGJkYmR9LmhpZ2gtY29udHJhc3RbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Ym9yZGVyLWNvbG9yOiM3NTc1NzV9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO3BhZGRpbmc6MXB4IDJweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dmlzaWJpbGl0eTpoaWRkZW59Lm1lYXN1cmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6MS40O3BhZGRpbmc6MDt3aGl0ZS1zcGFjZTpwcmV9Lm1lYXN1cmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eSwgaW5wdXRbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e3dpZHRoOjJjaH1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXI6MDtjb2xvcjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtZmFtaWx5OmluaGVyaXQ7b3V0bGluZTowfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3twYWRkaW5nLXJpZ2h0OjFjaH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEExZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImNvbnRlbnQtd3JhcHBpbmctaW5wdXQiLDMpLEkoIm9uVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmFsaWFzQ2hhbmdlZC5lbWl0KHIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoKTtGYShlLmlzQWxpYXNOYW1lTGVnYWw/ImhpZ2gtY29udHJhc3QiOiJlcnJvciIpLF8oInZhbHVlIixlLmFsaWFzLmFsaWFzVGV4dCl9fWZ1bmN0aW9uIFIxZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsNCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO250KCJpbGxlZ2FsIiwhZS5pc0FsaWFzTmFtZUxlZ2FsKSxfKCJ0aXRsZSIsZS50aXRsZSksdigxKSxidChlLmFsaWFzLmFsaWFzVGV4dCl9fXZhciBRdT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5pc0FsaWFzTmFtZUxlZ2FsPSEwLHRoaXMuYWxpYXNDaGFuZ2VkPW5ldyBGfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1leHBlcmltZW50LWFsaWFzIl1dLGlucHV0czp7YWxpYXM6ImFsaWFzIixhbGlhc0VkaXRhYmxlOiJhbGlhc0VkaXRhYmxlIix0aXRsZToidGl0bGUiLGlzQWxpYXNOYW1lTGVnYWw6ImlzQWxpYXNOYW1lTGVnYWwifSxvdXRwdXRzOnthbGlhc0NoYW5nZWQ6ImFsaWFzQ2hhbmdlZCJ9LGRlY2xzOjUsdmFyczozLGNvbnN0czpbWzEsImFsaWFzLW51bWJlciJdLFsicGxhY2Vob2xkZXIiLCJBbGlhcyBmb3IgZXhwZXJpbWVudCIsMywic3R5bGUiLCJ2YWx1ZSIsIm9uVmFsdWVDaGFuZ2UiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9FZGl0QWxpYXNOYW1lIiwiIl0sWyJwbGFjZWhvbGRlciIsIkFsaWFzIGZvciBleHBlcmltZW50IiwzLCJ2YWx1ZSIsIm9uVmFsdWVDaGFuZ2UiXSxbMywidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsInNwYW4iLDApLFQoMSksZygpLFMoMixBMWUsMSwzLCJjb250ZW50LXdyYXBwaW5nLWlucHV0IiwxKSxTKDMsUjFlLDIsNCwibmctdGVtcGxhdGUiLG51bGwsMixXdCkpLDImZSl7bGV0IHI9aXQoNCk7digxKSxidChpLmFsaWFzLmFsaWFzTnVtYmVyKSx2KDEpLF8oIm5nSWYiLGkuYWxpYXNFZGl0YWJsZSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbRmUsVFFdLHN0eWxlczpbIi5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Y29sb3I6IzIxMjEyMTtib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MnB4O3BhZGRpbmc6MCAycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpiYXNlbGluZX0iXX0pLG59KSgpO2Z1bmN0aW9uIFAxZShuLHQpezEmbiYmUCgwLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwyKSwyJm4mJl8oImFsaWFzIix3KCkuZXhwZXJpbWVudEFsaWFzKX1mdW5jdGlvbiBPMWUobix0KXsxJm4mJihoKDAsInNwYW4iKSxUKDEsIi8iKSxnKCkpfXZhciBEUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGV4cGVyaW1lbnRBbGlhczoiZXhwZXJpbWVudEFsaWFzIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMywiYWxpYXMiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJhbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFMoMCxQMWUsMSwxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwwKSxTKDEsTzFlLDIsMCwic3BhbiIsMSksaCgyLCJzcGFuIiksVCgzKSxnKCkpLDImZSYmKF8oIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx2KDEpLF8oIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx2KDIpLGJ0KGkubmFtZSkpfSxkZXBlbmRlbmNpZXM6W0ZlLFF1XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9bmdPbkluaXQoKXt0aGlzLm5hbWUkPWRuKFt0aGlzLnN0b3JlLnNlbGVjdChfMSx7cnVuSWQ6dGhpcy5ydW5JZH0pXSkucGlwZShOKChbZV0pPT5mdW5jdGlvbihuLHQsZSl7aWYoIXQpcmV0dXJuIG47bGV0IGk9dD8ubmFtZT8/Ii4uLiI7cmV0dXJuIGl9KHRoaXMucnVuSWQsZSkpKSx0aGlzLmV4cGVyaW1lbnRBbGlhcyQ9ZG4oW3RoaXMuc3RvcmUuc2VsZWN0KGcxLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoemEpXSkucGlwZShOKChbZSxpXSk9PmU/aVtlXTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lIl1dLGlucHV0czp7cnVuSWQ6InJ1bklkIn0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibmFtZSIsImV4cGVyaW1lbnRBbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwiY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJihfKCJuYW1lIixXKDEsMyxpLm5hbWUkKSkoImV4cGVyaW1lbnRBbGlhcyIsVygzLDcsaS5leHBlcmltZW50QWxpYXMkKSksQmUoInRpdGxlIixXKDIsNSxpLm5hbWUkKSkpfSxkZXBlbmRlbmNpZXM6W0RRLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBGMWUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLGJ0KGUuZmlyc3RUZXh0UGFydCgpKX19dmFyIFhnPSgoKT0+e2NsYXNzIG57cGFyc2VWYWx1ZSgpe2xldCBlPXRoaXMudmFsdWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWU/e2ZpcnN0OiIiLHNlY29uZDp0aGlzLnZhbHVlfTp7Zmlyc3Q6dGhpcy52YWx1ZS5zbGljZSgwLGUpLHNlY29uZDp0aGlzLnZhbHVlLnNsaWNlKGUpfX1maXJzdFRleHRQYXJ0KCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZSgpLmZpcnN0fXNlY29uZFRleHRQYXJ0KCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZSgpLnNlY29uZH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItdHJ1bmNhdGVkLXBhdGgiXV0saW5wdXRzOnt2YWx1ZToidmFsdWUifSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1siY2xhc3MiLCJmaXJzdC10ZXh0LXBhcnQiLDQsIm5nSWYiXSxbMSwic2Vjb25kLXRleHQtcGFydCJdLFsxLCJmaXJzdC10ZXh0LXBhcnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsRjFlLDIsMSwic3BhbiIsMCksaCgxLCJzcGFuIiwxKSxUKDIpLGcoKSksMiZlJiYoXygibmdJZiIsaS5maXJzdFRleHRQYXJ0KCkubGVuZ3RoPjApLHYoMiksYnQoaS5zZWNvbmRUZXh0UGFydCgpKSl9LGRlcGVuZGVuY2llczpbRmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgNGNoO21heC13aWR0aDptYXgtY29udGVudH0uZmlyc3QtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlY29uZC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfSJdfSksbn0pKCk7ZnVuY3Rpb24gTjFlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiwyKX1mdW5jdGlvbiBMMWUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDMpfXZhciBRZz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5pc0NsaXBwZWQ9ITEsdGhpcy5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ9ITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyJdXSxpbnB1dHM6e2lzQ2xpcHBlZDoiaXNDbGlwcGVkIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJkYXRhLXZhbHVlIiwiY2xpcHBlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiIsNCwibmdJZiJdLFsiZGF0YS12YWx1ZSIsImNsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkRhdGEgaXMgbm90IGZvdW5kIG9uIHNlbGVjdGVkIHN0ZXAuIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iLDQsIm5nSWYiXSxbImRhdGEtdmFsdWUiLCJjbGlwcGVkIiwic3ZnSWNvbiIsImluZm9fb3V0bGluZV8yNHB4IiwidGl0bGUiLCJMaW5rZWQgc3RlcCBpcyBub3QgZm91bmQgaW4gdGhpcyB2aXN1YWxpemF0aW9uLiBXZSBoaWdobGlnaHRlZCB0aGUgY2xvc2VzdCBzdGVwIGZvciB5b3UuIl0sWyJkYXRhLXZhbHVlIiwiY2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiRGF0YSBpcyBub3QgZm91bmQgb24gc2VsZWN0ZWQgc3RlcC4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFMoMCxOMWUsMSwwLCJtYXQtaWNvbiIsMCksUygxLEwxZSwxLDAsIm1hdC1pY29uIiwxKSksMiZlJiYoXygibmdJZiIsaS5pc0NsaXBwZWQpLHYoMSksXygibmdJZiIsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQpKX0sZGVwZW5kZW5jaWVzOltGZSxFbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojZDMyZjJmO2hlaWdodDoxZW07bGluZS1oZWlnaHQ6MDtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojZDMyZjJmfVtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEIxZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMTkpLFQoMSksaigyLCJudW1iZXIiKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksSGUoIlN0ZXAgIixXKDIsMSxlLnN0ZXBzW2Uuc3RlcEluZGV4XSksIiIpfX1mdW5jdGlvbiBWMWUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDIwKSxUKDEpLGooMiwibnVtYmVyIiksaigzLCJudW1iZXIiKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksbHUoIlNhbXBsZSAiLFcoMiwyLGUuc2FtcGxlKzEpLCIvIixXKDMsNCxlLm51bVNhbXBsZSksIiIpfX1mdW5jdGlvbiBIMWUobix0KXsxJm4mJlAoMCwibWF0LXNwaW5uZXIiLDIxKX1mdW5jdGlvbiB6MWUobix0KXtpZigxJm4mJihoKDAsInNwYW4iKSxQKDEsInNwYW4iLDMwKSgyLCJzcGFuIiwzMSksZygpKSwyJm4pe2xldCBlPXcoMyk7digyKSxUdCgibGVmdCIsZS5zbGlkZXJTdGFydFBvc2l0aW9uKSgid2lkdGgiLGUuc2xpZGVyVHJhY2tXaWR0aCl9fWZ1bmN0aW9uIFUxZShuLHQpe2lmKDEmbiYmUCgwLCJkaXYiLDMyKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygzKTtUdCgibGVmdCIsaS5nZXRMaW5rZWRUaW1lVGlja0xlZnRTdHlsZShlKSkoIm1hcmdpbi1sZWZ0IixpLmdldExpbmtlZFRpbWVUaWNrTWFyZ2luTGVmdFN0eWxlKGUpKX19ZnVuY3Rpb24gajFlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDI3KSxTKDEsejFlLDMsNCwic3BhbiIsMjgpLFMoMixVMWUsMSw0LCJkaXYiLDI5KSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLF8oIm5nSWYiLG51bGwhPT1lLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kU3RlcCksdigxKSxfKCJuZ0Zvck9mIixlLnNlbGVjdGVkU3RlcHMpfX12YXIgRzFlPWZ1bmN0aW9uKG4pe3JldHVybltuXX0sVzFlPWZ1bmN0aW9uKG4pe3JldHVybntmaWx0ZXI6bn19O2Z1bmN0aW9uIHExZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtPdCgwKSxoKDEsImRpdiIsMjIpKDIsIm1hdC1zbGlkZXIiLDIzKSxJKCJpbnB1dCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25TbGlkZXJJbnB1dChyKSl9KSxnKCksUygzLGoxZSwzLDIsImRpdiIsMjQpLGcoKSxoKDQsImRpdiIsMjUpLFAoNSwiaW1nIiwyNiksZygpLGt0KCl9aWYoMiZuKXtsZXQgZT13KCk7digyKSxfKCJuZ0NsYXNzIixJbigxMSxHMWUsZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA/ImhpZGUtc2xpZGVyIjoiIikpKCJkaXNhYmxlZCIsZS5zdGVwcy5sZW5ndGg8PTEpKCJtaW4iLDApKCJtYXgiLGUuc3RlcHMubGVuZ3RoLTEpKCJzdGVwIiwxKSgidGlja0ludGVydmFsIiwxKSgidmFsdWUiLGUuc3RlcEluZGV4KSx2KDEpLF8oIm5nSWYiLGUubGlua2VkVGltZVNlbGVjdGlvbiksdigyKSxmYigiYWx0IiwiSW1hZ2UgYXQgc3RlcCAiLGUuc3RlcHNbZS5zdGVwSW5kZXhdLCIiKSxXaSgic3JjIixlLmltYWdlVXJsLGthKSxfKCJuZ1N0eWxlIixJbigxMyxXMWUsZS5jc3NGaWx0ZXIoKSkpfX1mdW5jdGlvbiBZMWUobix0KXsxJm4mJihoKDAsImRpdiIsMzQpLFQoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLGcoKSl9ZnVuY3Rpb24gWDFlKG4sdCl7aWYoMSZuJiZTKDAsWTFlLDIsMCwiZGl2IiwzMyksMiZuKXtsZXQgZT13KCk7XygibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIFExZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSxBUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5EYXRhTG9hZFN0YXRlPVRlLHRoaXMuc2xpZGVyU3RhcnRQb3NpdGlvbj0iIix0aGlzLnNsaWRlclRyYWNrV2lkdGg9IiIsdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uPW51bGwsdGhpcy5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ9ITEsdGhpcy5vbkFjdHVhbFNpemVUb2dnbGU9bmV3IEYsdGhpcy5zdGVwSW5kZXhDaGFuZ2U9bmV3IEYsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEZ9Y3NzRmlsdGVyKCl7cmV0dXJuYGNvbnRyYXN0KCR7dGhpcy5jb250cmFzdEluTWlsbGkvMTB9JSkgYnJpZ2h0bmVzcygke3RoaXMuYnJpZ2h0bmVzc0luTWlsbGkvMWUzfSlgfW9uU2xpZGVySW5wdXQoZSl7dGhpcy5zdGVwSW5kZXhDaGFuZ2UuZW1pdChlLnZhbHVlKX1jaGFuZ2VEaXN0aW5jdChlKXtyZXR1cm4gZS5jdXJyZW50VmFsdWUhPT1lLnByZXZpb3VzVmFsdWV9bmdPbkNoYW5nZXMoZSl7KGUuc2VsZWN0ZWRTdGVwcyYmdGhpcy5jaGFuZ2VEaXN0aW5jdChlLnNlbGVjdGVkU3RlcHMpfHxlLmxpbmtlZFRpbWVTZWxlY3Rpb24mJnRoaXMuY2hhbmdlRGlzdGluY3QoZS5saW5rZWRUaW1lU2VsZWN0aW9uKSkmJnRoaXMucmVuZGVyUmFuZ2VTbGlkZXIoKX1yZW5kZXJSYW5nZVNsaWRlcigpe2lmKCF0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb258fCF0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kU3RlcClyZXR1cm47bGV0IGU9dGhpcy5zdGVwcy5sZW5ndGgtMSxpPXRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5zdGFydFN0ZXA8dGhpcy5zdGVwc1swXT90aGlzLnN0ZXBzWzBdOnRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5zdGFydFN0ZXAscj10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kU3RlcD50aGlzLnN0ZXBzW2VdP3RoaXMuc3RlcHNbZV06dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXAse3N0YXJ0UG9zaXRpb246byx3aWR0aDpzfT10aGlzLmdldFRyYWNrU3RhcnRQb3NpdGlvbkFuZFdpZHRoKGkscixlKTt0aGlzLnNsaWRlclN0YXJ0UG9zaXRpb249MTAwKm8rIiUiLHRoaXMuc2xpZGVyVHJhY2tXaWR0aD0xMDAqcysiJSJ9Z2V0VHJhY2tTdGFydFBvc2l0aW9uQW5kV2lkdGgoZSxpLHIpe2xldCBvPTEvcixzPTAsYT0wLGw9MDtmb3IoO2w8dGhpcy5zdGVwcy5sZW5ndGgtMTtsKyspe2xldCBjPXRoaXMuc3RlcHNbbF0sZD10aGlzLnN0ZXBzW2wrMV07aWYoYzw9ZSYmZTw9ZCl7cys9KGUtYykvKGQtYyk7YnJlYWt9fWZvcihzPShzK2wpKm87bDx0aGlzLnN0ZXBzLmxlbmd0aC0xO2wrKyl7bGV0IGM9dGhpcy5zdGVwc1tsXSxkPXRoaXMuc3RlcHNbbCsxXTtpZihlPj1jJiZpPD1kKXthPShpLWUpLyhkLWMpO2JyZWFrfWlmKGU+PWMmJmk+PWQpYSs9KGQtZSkvKGQtYyk7ZWxzZXtpZighKGk+PWQpKXthKz0oaS1jKS8oZC1jKTticmVha31hKz0xfX1yZXR1cm4gYSo9bywocz4xfHxzPDApJiYocz0wKSx7c3RhcnRQb3NpdGlvbjpzLHdpZHRoOmF9fWdldExpbmtlZFRpbWVUaWNrTGVmdFN0eWxlKGUpe2lmKC0xPT10aGlzLnN0ZXBzLmluZGV4T2YoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0ZXBJbmRleDogc3RlcEluZGV4IHZhbHVlIGlzIG5vdCBpbmNsdWRlZCBpbiBzdGVwcyIpO3JldHVybiB0aGlzLnN0ZXBzLmluZGV4T2YoZSkvKHRoaXMuc3RlcHMubGVuZ3RoLTEpKjEwMCsiJSJ9Z2V0TGlua2VkVGltZVRpY2tNYXJnaW5MZWZ0U3R5bGUoZSl7aWYoLTE9PXRoaXMuc3RlcHMuaW5kZXhPZihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RlcEluZGV4OiBzdGVwSW5kZXggdmFsdWUgaXMgbm90IGluY2x1ZGVkIGluIHN0ZXBzIik7cmV0dXJuYC0ke3RoaXMuc3RlcHMuaW5kZXhPZihlKS8odGhpcy5zdGVwcy5sZW5ndGgtMSkqMTR9cHhgfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoImFjdHVhbC1zaXplIixpLnNob3dBY3R1YWxTaXplKX0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixzYW1wbGU6InNhbXBsZSIsbnVtU2FtcGxlOiJudW1TYW1wbGUiLGltYWdlVXJsOiJpbWFnZVVybCIsc3RlcEluZGV4OiJzdGVwSW5kZXgiLHN0ZXBzOiJzdGVwcyIsYnJpZ2h0bmVzc0luTWlsbGk6ImJyaWdodG5lc3NJbk1pbGxpIixjb250cmFzdEluTWlsbGk6ImNvbnRyYXN0SW5NaWxsaSIsc2hvd0FjdHVhbFNpemU6InNob3dBY3R1YWxTaXplIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIixhbGxvd1RvZ2dsZUFjdHVhbFNpemU6ImFsbG93VG9nZ2xlQWN0dWFsU2l6ZSIsaXNQaW5uZWQ6ImlzUGlubmVkIixzZWxlY3RlZFN0ZXBzOiJzZWxlY3RlZFN0ZXBzIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uQWN0dWFsU2l6ZVRvZ2dsZToib25BY3R1YWxTaXplVG9nZ2xlIixzdGVwSW5kZXhDaGFuZ2U6InN0ZXBJbmRleENoYW5nZSIsb25QaW5DbGlja2VkOiJvblBpbkNsaWNrZWQifSxmZWF0dXJlczpbR3RdLGRlY2xzOjIxLHZhcnM6MTYsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLGU9JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBhbiBpbWFnZSBjYXJkIHRoYXQgdG9nZ2xlcyBhY3R1YWwgaW1hZ2Ugc2l6ZS7ikJ8zY2EwNWVmM2E2ZTNhMzcwNjVmNWUwZjY5YzVkNWEyMTc4ZDkwNzkx4pCfNzYzNTEwMTkzNjY2NDc4OTE0MDpUb2dnbGUgYWN0dWFsIGltYWdlIHNpemVgLFtbMSwiaGVhZGluZyJdLFsxLCJsaW5lIl0sWzEsInRhZyJdLFsxLCJ0YWctcGF0aCIsMywidGl0bGUiLCJ2YWx1ZSJdLFszLCJpc0NsaXBwZWQiLCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJUb2dnbGUgYWN0dWFsIGltYWdlIHNpemUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJpbWFnZV9zZWFyY2hfMjRweCJdLFsxLCJydW4iXSxbMSwiZG90IiwzLCJuZ1N0eWxlIl0sWzEsInJ1bi10ZXh0IiwzLCJydW5JZCJdLFsxLCJtZXRhZGF0YSJdLFsiY2xhc3MiLCJzdGVwIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNhbXBsZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nIiwiZGlhbWV0ZXIiLCIxOCIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW1hZ2VEYXRhIiwiIl0sWzEsInN0ZXAiXSxbMSwic2FtcGxlIl0sWyJkaWFtZXRlciIsIjE4IiwxLCJsb2FkaW5nIl0sWzEsInNsaWRlci1yb3ciXSxbImNvbG9yIiwicHJpbWFyeSIsMSwic3RlcC1zbGlkZXIiLDMsIm5nQ2xhc3MiLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ0aWNrSW50ZXJ2YWwiLCJ2YWx1ZSIsImlucHV0Il0sWyJjbGFzcyIsImxpbmtlZC10aW1lLXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiaW1nLWNvbnRhaW5lciJdLFszLCJhbHQiLCJzcmMiLCJuZ1N0eWxlIiwiaW5jbHVkZUZlYXR1cmVGbGFncyJdLFsxLCJsaW5rZWQtdGltZS13cmFwcGVyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwibGlua2VkLXRpbWUtdGljayIsMywibGVmdCIsIm1hcmdpbi1sZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwic2xpZGVyLXRyYWNrIl0sWzEsInNsaWRlci10cmFjay1maWxsIl0sWzEsImxpbmtlZC10aW1lLXRpY2siXSxbImNsYXNzIiwiZW1wdHktbWVzc2FnZSIsNCwibmdJZiJdLFsxLCJlbXB0eS1tZXNzYWdlIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsInNwYW4iLDIpLFAoMywidGItdHJ1bmNhdGVkLXBhdGgiLDMpKDQsInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyIsNCksZygpLGgoNSwic3BhbiIsNSkoNiwiYnV0dG9uIiw2KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxQKDcsIm1hdC1pY29uIiw3KSxnKCksaCg4LCJidXR0b24iLDgpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxQKDksIm1hdC1pY29uIiw5KSxnKCkoKSgpLGgoMTAsImRpdiIsMSkoMTEsInNwYW4iLDEwKSxQKDEyLCJzcGFuIiwxMSkoMTMsImNhcmQtcnVuLW5hbWUiLDEyKSxnKCksaCgxNCwiZGl2IiwxMyksUygxNSxCMWUsMywzLCJzcGFuIiwxNCksUygxNixWMWUsNCw2LCJzcGFuIiwxNSksUygxNyxIMWUsMSwwLCJtYXQtc3Bpbm5lciIsMTYpLGcoKSgpKCksUygxOCxxMWUsNiwxNSwibmctY29udGFpbmVyIiwxNyksUygxOSxYMWUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxOCxXdCkpLDImZSl7bGV0IHI9aXQoMjApO3YoMyksV2koInRpdGxlIixpLnRhZyksV2koInZhbHVlIixpLnRpdGxlKSx2KDEpLF8oImlzQ2xpcHBlZCIsaS5saW5rZWRUaW1lU2VsZWN0aW9uJiZpLmxpbmtlZFRpbWVTZWxlY3Rpb24uY2xpcHBlZCkoImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQpLHYoMiksQmUoInRpdGxlIixpLmlzUGlubmVkPyJVbnBpbiBjYXJkIjoiUGluIGNhcmQiKSx2KDEpLF8oInN2Z0ljb24iLGkuaXNQaW5uZWQ/ImtlZXBfMjRweCI6ImtlZXBfb3V0bGluZV8yNHB4IiksdigxKSxfKCJkaXNhYmxlZCIsIWkuYWxsb3dUb2dnbGVBY3R1YWxTaXplKSx2KDQpLF8oIm5nU3R5bGUiLEluKDE0LFExZSxpLnJ1bkNvbG9yU2NhbGUoaS5ydW5JZCkpKSx2KDEpLF8oInJ1bklkIixpLnJ1bklkKSx2KDIpLF8oIm5nSWYiLG51bGwhPT1pLnN0ZXBJbmRleCYmaS5zdGVwSW5kZXg8aS5zdGVwcy5sZW5ndGgpLHYoMSksXygibmdJZiIsaS5udW1TYW1wbGU+MSksdigxKSxfKCJuZ0lmIixpLmxvYWRTdGF0ZT09PWkuRGF0YUxvYWRTdGF0ZS5MT0FESU5HKSx2KDEpLF8oIm5nSWYiLG51bGwhPT1pLnN0ZXBJbmRleCYmaS5zdGVwSW5kZXg8aS5zdGVwcy5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLG5uLEZlLHB1LEdULCRpLEVuLHRsLERkLHFULFhnLFFnLExhXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczozMThweDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV17aGVpZ2h0OmF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubGluZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIG1heC1jb250ZW50fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweH0ubWV0YWRhdGFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXgtd2lkdGg6MTc1cHg7dGV4dC1hbGlnbjplbmR9LnRhZy1wYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnJ1bltfbmdjb250ZW50LSVDT01QJV17YWxpZ24tc2VsZjpiYXNlbGluZTtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kb3RbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbi1yaWdodDo0cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAucnVuLXRleHRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO21heC13aWR0aDoxMjBweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNhbXBsZVtfbmdjb250ZW50LSVDT01QJV0sIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxM3B4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ydW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucnVuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2FtcGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNhbXBsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnN0ZXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc3RlcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO3doaXRlLXNwYWNlOm5vd3JhcDtqdXN0aWZ5LXNlbGY6ZmxleC1lbmQ7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7b3ZlcmZsb3cteTphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfS5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGltZ1tfbmdjb250ZW50LSVDT01QJV17aW1hZ2UtcmVuZGVyaW5nOi1tb3otY3Jpc3AtZWRnZXM7aW1hZ2UtcmVuZGVyaW5nOnBpeGVsYXRlZH0uYWN0dWFsLXNpemVbX25naG9zdC0lQ09NUCVdICAgLmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG87ZmxleDpub25lfVtfbmdob3N0LSVDT01QJV06bm90KC5hY3R1YWwtc2l6ZSkgICBpbWdbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO21heC1oZWlnaHQ6MTAwJTttYXgtd2lkdGg6MTAwJTt3aWR0aDphdXRvO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y29udGFpbn0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RlcC1zbGlkZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MX1bX25naG9zdC0lQ09NUCVdICAgICAubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfVtfbmdob3N0LSVDT01QJV0gICAgIC5oaWRlLXNsaWRlci5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MH0uZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxZW07Zm9udC1zaXplOjEzcHh9LmxpbmtlZC10aW1lLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1cHg7d2lkdGg6MTAwJX0ubGlua2VkLXRpbWUtdGlja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlci1yYWRpdXM6NTAlO2hlaWdodDoxNHB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjE0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmxpbmtlZC10aW1lLXRpY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubGlua2VkLXRpbWUtdGlja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoycHg7dG9wOjZweDtwb3NpdGlvbjphYnNvbHV0ZX0uc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI2KTtsZWZ0OjdweDt3aWR0aDpjYWxjKDEwMCUgLSAxNHB4KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1N2MwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFJRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPWksdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBGLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBGLHRoaXMuYnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGkxKSx0aGlzLmNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QocjEpLHRoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KG8xKSx0aGlzLnNob3dBY3R1YWxTaXplPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3Q9bmV3IEFpKHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZX1vblN0ZXBJbmRleENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChBVCh7Y2FyZElkOnRoaXMuY2FyZElkLHN0ZXBJbmRleDplfSkpfWlzSW1hZ2VDYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09em4uSU1BR0VTfW9uQWN0dWFsU2l6ZVRvZ2dsZSgpe3RoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdC5uZXh0KHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCl9bmdPbkluaXQoKXtkbihbdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0XSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE50KChbbCxjXSk9Pnt0aGlzLnNob3dBY3R1YWxTaXplPWx8fGMsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5zaG93QWN0dWFsU2l6ZSl9KSkuc3Vic2NyaWJlKCgpPT57fSk7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoV2EsdGhpcy5jYXJkSWQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxrZShsPT4hIWwmJnRoaXMuaXNJbWFnZUNhcmRNZXRhZGF0YShsKSksTihsPT5sKSxNcygxKSksbz1kbihbaSx0aGlzLnN0b3JlLnNlbGVjdChDdSx0aGlzLmNhcmRJZCldKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksTigoW2wsY10pPT57bGV0IGQ9bC5ydW5JZDtyZXR1cm4gYyYmYy5oYXNPd25Qcm9wZXJ0eShkKT9jW2RdOltdfSksWW4oKGwsYyk9PmwubGVuZ3RoPT09Yy5sZW5ndGgmJjA9PT1sLmxlbmd0aHx8bD09PWMpLE1zKDEpKTt0aGlzLnN0ZXBJbmRleCQ9dGhpcy5zdG9yZS5zZWxlY3QocUYsdGhpcy5jYXJkSWQpLnBpcGUoTihsPT5sP2wuaW5kZXg6bnVsbCkpLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJD10aGlzLnN0b3JlLnNlbGVjdChxRix0aGlzLmNhcmRJZCkucGlwZShOKGw9PiEhbCYmbC5pc0Nsb3Nlc3QpKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoX2QsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoTihsPT5sLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKE4obD0+WWcobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoTihsPT5sLnJ1bklkKSksdGhpcy5zYW1wbGUkPWkucGlwZShOKGw9Pmwuc2FtcGxlKSksdGhpcy5udW1TYW1wbGUkPWkucGlwZShOKGw9PmwubnVtU2FtcGxlKSksdGhpcy5zdGVwcyQ9dGhpcy5zdG9yZS5zZWxlY3QodlcsdGhpcy5jYXJkSWQpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KE11LHRoaXMuY2FyZElkKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KEV1KS5waXBlKExpKHRoaXMuc3RlcHMkKSxOKChbbCxjXSk9Pmw/VWgobCxNYXRoLm1pbiguLi5jKSxNYXRoLm1heCguLi5jKSk6bnVsbCkpLHRoaXMuc2VsZWN0ZWRTdGVwcyQ9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJC5waXBlKExpKHRoaXMuc3RlcHMkKSxOKChbbCxjXSk9Pmw/bnVsbD09PWwuZW5kU3RlcD8tMSE9PWMuaW5kZXhPZihsLnN0YXJ0U3RlcCk/W2wuc3RhcnRTdGVwXTpbXTpjLmZpbHRlcihkPT5kPj1sLnN0YXJ0U3RlcCYmZDw9bC5lbmRTdGVwKTpbXSkpO2xldCBhPWRuKFtvLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUoTigoW2wsY10pPT5udWxsIT09YyYmbFtjXT9sW2NdOm51bGwpKTt0aGlzLmltYWdlVXJsJD1hLnBpcGUoTihsPT5sP3RoaXMuZGF0YVNvdXJjZS5pbWFnZVVybChsLmltYWdlSWQpOm51bGwpKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoVGMpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxNyx2YXJzOjUwLGNvbnN0czpbWzMsImxvYWRTdGF0ZSIsInRpdGxlIiwidGFnIiwicnVuSWQiLCJzYW1wbGUiLCJudW1TYW1wbGUiLCJpbWFnZVVybCIsInN0ZXBJbmRleCIsInN0ZXBzIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzZWxlY3RlZFN0ZXBzIiwic3RlcEluZGV4Q2hhbmdlIiwib25BY3R1YWxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJpbWFnZS1jYXJkLWNvbXBvbmVudCIsMCksSSgic3RlcEluZGV4Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN0ZXBJbmRleENoYW5nZWQobyl9KSgib25BY3R1YWxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpLGooOSwiYXN5bmMiKSxqKDEwLCJhc3luYyIpLGooMTEsImFzeW5jIiksaigxMiwiYXN5bmMiKSxqKDEzLCJhc3luYyIpLGooMTQsImFzeW5jIiksaigxNSwiYXN5bmMiKSxqKDE2LCJhc3luYyIpLGcoKSksMiZlJiZfKCJsb2FkU3RhdGUiLFcoMSwxOCxpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFcoMiwyMCxpLnRpdGxlJCkpKCJ0YWciLFcoMywyMixpLnRhZyQpKSgicnVuSWQiLFcoNCwyNCxpLnJ1bklkJCkpKCJzYW1wbGUiLFcoNSwyNixpLnNhbXBsZSQpKSgibnVtU2FtcGxlIixXKDYsMjgsaS5udW1TYW1wbGUkKSkoImltYWdlVXJsIixXKDcsMzAsaS5pbWFnZVVybCQpKSgic3RlcEluZGV4IixXKDgsMzIsaS5zdGVwSW5kZXgkKSkoInN0ZXBzIixXKDksMzQsaS5zdGVwcyQpKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixXKDEwLDM2LGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJCkpKCJicmlnaHRuZXNzSW5NaWxsaSIsVygxMSwzOCxpLmJyaWdodG5lc3NJbk1pbGxpJCkpKCJjb250cmFzdEluTWlsbGkiLFcoMTIsNDAsaS5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLGkucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixpLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PVcoMTMsNDIsaS5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQpKSgiaXNQaW5uZWQiLFcoMTQsNDQsaS5pc1Bpbm5lZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxNSw0NixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInNlbGVjdGVkU3RlcHMiLFcoMTYsNDgsaS5zZWxlY3RlZFN0ZXBzJCkpfSxkZXBlbmRlbmNpZXM6W0FRLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUWk9KCgpPT4oZnVuY3Rpb24obil7bltuLlNWRz0wXT0iU1ZHIixuW24uV0VCR0w9MV09IldFQkdMIn0oUWl8fChRaT17fSkpLFFpKSkoKSxucj0oKCk9PihmdW5jdGlvbihuKXtuW24uTElORUFSPTBdPSJMSU5FQVIiLG5bbi5MT0cxMD0xXT0iTE9HMTAiLG5bbi5USU1FPTJdPSJUSU1FIn0obnJ8fChucj17fSkpLG5yKSkoKSxJcj0oKCk9PihmdW5jdGlvbihuKXtuLk5PTkU9Ik5PTkUiLG4uRFJBR19aT09NSU5HPSJEUkFHX1pPT01JTkciLG4uU0NST0xMX1pPT01JTkc9IlNDUk9MTF9aT09NSU5HIixuLlBBTk5JTkc9IlBBTk5JTkcifShJcnx8KElyPXt9KSksSXIpKSgpO2Z1bmN0aW9uICQxZShuLHQpezEmbiYmKGgoMCwic3BhbiIpLFQoMSwic2NhbGFyIiksZygpKX1mdW5jdGlvbiBlRWUobix0KXsxJm4mJihoKDAsInNwYW4iKSxUKDEsImhpc3RvZ3JhbSIpLGcoKSl9ZnVuY3Rpb24gdEVlKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiksVCgxLCJ1bmtub3duIiksZygpKX1mdW5jdGlvbiBuRWUobix0KXtpZigxJm4mJihPdCgwLDEzKSxTKDEsJDFlLDIsMCwic3BhbiIsMTQpLFMoMixlRWUsMiwwLCJzcGFuIiwxNCksUygzLHRFZSwyLDAsInNwYW4iLDE1KSxrdCgpKSwyJm4pe2xldCBlPXcoMik7XygibmdTd2l0Y2giLGUuY2FyZE1ldGFkYXRhLnBsdWdpbiksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5TQ0FMQVJTKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLkhJU1RPR1JBTVMpfX1mdW5jdGlvbiBpRWUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIHJFZShuLHQpe2lmKDEmbiYmKGgoMCwib3B0aW9uIiwxNiksVCgxKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7XygidmFsdWUiLGUuaWQpLHYoMSksYnQoZS5uYW1lKX19ZnVuY3Rpb24gb0VlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO090KDApLGgoMSwiaDIiKSxTKDIsbkVlLDQsMywibmctdGVtcGxhdGUiLG51bGwsMixXdCksaCg0LCJzcGFuIiksVCg1LCJEb3dubG9hZFx4YTAiKSxnKCksUyg2LGlFZSwxLDAsIm5nLWNvbnRhaW5lciIsMyksaCg3LCJzcGFuIiksVCg4LCJceGEwZGF0YSBmb3JceGEwIiksZygpLGgoOSwiY29kZSIsNCksVCgxMCksZygpKCksaCgxMSwibWF0LWRpYWxvZy1jb250ZW50IikoMTIsIm1hdC1mb3JtLWZpZWxkIiw1KSgxMywibWF0LWxhYmVsIiksVCgxNCwiU2VsZWN0IGEgcnVuIHRvIGRvd25sb2FkIGEgZGF0YSBmb3IgYSBzZXJpZXMiKSxnKCksaCgxNSwic2VsZWN0Iiw2KSxJKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnJ1blNlbGVjdGVkLmVtaXQoci50YXJnZXQudmFsdWUpKX0pLGgoMTYsIm9wdGlvbiIsNyksVCgxNywiLSIpLGcoKSxTKDE4LHJFZSwyLDIsIm9wdGlvbiIsOCksZygpKCksaCgxOSwiZGl2Iiw5KSgyMCwic3BhbiIpLFQoMjEsIkRvd25sb2FkIGFzXHUyMDI2IiksZygpLFQoMjIsIlx4YTAiKSxoKDIzLCJhIiwxMCksVCgyNCwiSlNPTiIpLGcoKSxoKDI1LCJhIiwxMCksVCgyNiwiQ1NWIiksZygpKCkoKSxoKDI3LCJtYXQtZGlhbG9nLWFjdGlvbnMiLDExKSgyOCwiYnV0dG9uIiwxMiksVCgyOSwiQ2xvc2UiKSxnKCkoKSxrdCgpfWlmKDImbil7bGV0IGU9aXQoMyksaT13KCk7dig2KSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlKSx2KDMpLF8oInRpdGxlIixpLmNhcmRNZXRhZGF0YS50YWcpLHYoMSksYnQoaS5jYXJkTWV0YWRhdGEudGFnKSx2KDUpLF8oInZhbHVlIixpLnNlbGVjdGVkUnVuSWR8fCIiKSx2KDEpLF8oInZhbHVlIiwiIiksdigyKSxfKCJuZ0Zvck9mIixpLnJ1bnMpLHYoNSksXygiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsSnNvbikoImRvd25sb2FkIixpLmdldERvd25sb2FkTmFtZSgianNvbiIpKSgiaHJlZiIsaS5kb3dubG9hZFVybEpzb24sa2EpLHYoMiksXygiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsQ3N2KSgiZG93bmxvYWQiLGkuZ2V0RG93bmxvYWROYW1lKCJjc3YiKSkoImhyZWYiLGkuZG93bmxvYWRVcmxDc3Ysa2EpfX1mdW5jdGlvbiBzRWUobix0KXsxJm4mJlQoMCwiTG9hZGluZy4uLiIpfXZhciBPUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5ydW5TZWxlY3RlZD1uZXcgRix0aGlzLlBsdWdpblR5cGU9em59Z2V0RG93bmxvYWROYW1lKGUpe2xldCBpPXRoaXMucnVucy5maW5kKHI9PnIuaWQ9PT10aGlzLnNlbGVjdGVkUnVuSWQpO3JldHVybiBpP2Ake2kubmFtZX0uJHtlfWA6IiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRNZXRhZGF0YToiY2FyZE1ldGFkYXRhIixydW5zOiJydW5zIixzZWxlY3RlZFJ1bklkOiJzZWxlY3RlZFJ1bklkIixkb3dubG9hZFVybENzdjoiZG93bmxvYWRVcmxDc3YiLGRvd25sb2FkVXJsSnNvbjoiZG93bmxvYWRVcmxKc29uIn0sb3V0cHV0czp7cnVuU2VsZWN0ZWQ6InJ1blNlbGVjdGVkIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0NhcmRNZXRhZGF0YSIsIiJdLFsiZGF0YU5hbWUiLCIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJ0YWctbmFtZSIsMywidGl0bGUiXSxbImFwcGVhcmFuY2UiLCJmaWxsIiwxLCJydW4tc2VsZWN0b3IiXSxbIm1hdE5hdGl2ZUNvbnRyb2wiLCIiLCJuYW1lIiwicnVuIiwiY2RrRm9jdXNJbml0aWFsIiwiIiwicmVxdWlyZWQiLCIiLDMsInZhbHVlIiwiY2hhbmdlIl0sWyJzZWxlY3RlZCIsIiIsMywidmFsdWUiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkb3dubG9hZC1jb250cm9scyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwzLCJkaXNhYmxlZCIsImRvd25sb2FkIiwiaHJlZiIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiXSxbImFsaWduIiwiZW5kIl0sWyJtYXQtYnV0dG9uIiwiIiwibWF0LWRpYWxvZy1jbG9zZSIsIiJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbNCwiTmdTd2l0Y2hEZWZhdWx0Il0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoUygwLG9FZSwzMCwxMiwibmctY29udGFpbmVyIiwwKSxTKDEsc0VlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMSxXdCkpLDImZSl7bGV0IHI9aXQoMik7XygibmdJZiIsaS5jYXJkTWV0YWRhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W25uLEZlLExyLHNyLFNyLEdULHVxLGZxLFI3LEppLFoxLEsxLEoxLFV1LEthLGtjXSxzdHlsZXM6WyJoMltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEuMjVlbTtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnJ1bi1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW07d2lkdGg6MTAwJX0uZG93bmxvYWQtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtfS5kb3dubG9hZC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46M3B4IDEwcHggM3B4IDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxrUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLnNlbGVjdGVkUnVuSWQkPW5ldyBBaShudWxsKSx0aGlzLmNhcmRNZXRhZGF0YSQ9ZS5zZWxlY3QoV2Esci5jYXJkSWQpLnBpcGUoa2Uobz0+Qm9vbGVhbihvKSkpLHRoaXMuZG93bmxvYWRVcmxDc3YkPWRuKFtlLnNlbGVjdChXYSxyLmNhcmRJZCksdGhpcy5zZWxlY3RlZFJ1bklkJF0pLnBpcGUoTigoW28sc10pPT5vJiZzP2kuZG93bmxvYWRVcmwoby5wbHVnaW4sby50YWcscywiY3N2Iik6bnVsbCkscW4obnVsbCkpLHRoaXMuZG93bmxvYWRVcmxKc29uJD1kbihbZS5zZWxlY3QoV2Esci5jYXJkSWQpLHRoaXMuc2VsZWN0ZWRSdW5JZCRdKS5waXBlKE4oKFtvLHNdKT0+byYmcz9pLmRvd25sb2FkVXJsKG8ucGx1Z2luLG8udGFnLHMsImpzb24iKTpudWxsKSxxbihudWxsKSksdGhpcy5ydW5zJD1kbihbZS5zZWxlY3QoVlcpLGUuc2VsZWN0KEN1LHIuY2FyZElkKV0pLnBpcGUoTigoW28sc10pPT5zP09iamVjdC5rZXlzKHMpLm1hcChhPT5vLmdldChhKSkuZmlsdGVyKEJvb2xlYW4pOltdKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoVGMpLEMoWHYpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZyJdXSxkZWNsczo2LHZhcnM6MTUsY29uc3RzOltbMywiY2FyZE1ldGFkYXRhIiwicnVucyIsInNlbGVjdGVkUnVuSWQiLCJkb3dubG9hZFVybENzdiIsImRvd25sb2FkVXJsSnNvbiIsInJ1blNlbGVjdGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiLDApLEkoInJ1blNlbGVjdGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWxlY3RlZFJ1bklkJC5uZXh0KG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxnKCkpLDImZSYmXygiY2FyZE1ldGFkYXRhIixXKDEsNSxpLmNhcmRNZXRhZGF0YSQpKSgicnVucyIsVygyLDcsaS5ydW5zJCkpKCJzZWxlY3RlZFJ1bklkIixXKDMsOSxpLnNlbGVjdGVkUnVuSWQkKSkoImRvd25sb2FkVXJsQ3N2IixXKDQsMTEsaS5kb3dubG9hZFVybENzdiQpKSgiZG93bmxvYWRVcmxKc29uIixXKDUsMTMsaS5kb3dubG9hZFVybEpzb24kKSl9LGRlcGVuZGVuY2llczpbT1EsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGlsKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIEN5KG4pe3JldHVybiAxPT09bi5sZW5ndGgmJihuPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBpbChuKHQpLGUpfX0obikpLHtsZWZ0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX12YXIgSGM9Q3koaWwpLnJpZ2h0LEJOPU1hdGguc3FydCg1MCksVk49TWF0aC5zcXJ0KDEwKSxITj1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gTXkobix0LGUpe3ZhciBpLG8scyxhLHI9LTE7aWYoZT0rZSwobj0rbik9PSh0PSt0KSYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYobz1uLG49dCx0PW8pLDA9PT0oYT1aZyhuLHQsZSkpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtbisxKSk7KytyPG87KXNbcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKG4tdCsxKSk7KytyPG87KXNbcl09KG4tcikvYTtyZXR1cm4gaSYmcy5yZXZlcnNlKCksc31mdW5jdGlvbiBaZyhuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxvPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KG8+PUJOPzEwOm8+PVZOPzU6bz49SE4/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhvPj1CTj8xMDpvPj1WTj81Om8+PUhOPzI6MSl9ZnVuY3Rpb24gQWQobix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PUJOP3IqPTEwOm8+PVZOP3IqPTU6bz49SE4mJihyKj0yKSx0PG4/LXI6cn12YXIgWFQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEhRKG4pe3JldHVybiBufXZhciBVTj0xLFpUPTIsak49MyxRVD00LHpRPTFlLTY7ZnVuY3Rpb24gX0VlKG4pe3JldHVybiJ0cmFuc2xhdGUoIisobisuNSkrIiwwKSJ9ZnVuY3Rpb24gYkVlKG4pe3JldHVybiJ0cmFuc2xhdGUoMCwiKyhuKy41KSsiKSJ9ZnVuY3Rpb24gdkVlKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4rbih0KX19ZnVuY3Rpb24geUVlKG4pe3ZhciB0PU1hdGgubWF4KDAsbi5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiBuLnJvdW5kKCkmJih0PU1hdGgucm91bmQodCkpLGZ1bmN0aW9uKGUpe3JldHVybituKGUpK3R9fWZ1bmN0aW9uIHhFZSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBVUShuLHQpe3ZhciBlPVtdLGk9bnVsbCxyPW51bGwsbz02LHM9NixhPTMsbD1uPT09VU58fG49PT1RVD8tMToxLGM9bj09PVFUfHxuPT09WlQ/IngiOiJ5IixkPW49PT1VTnx8bj09PWpOP19FZTpiRWU7ZnVuY3Rpb24gdShwKXt2YXIgZj1pPz8odC50aWNrcz90LnRpY2tzLmFwcGx5KHQsZSk6dC5kb21haW4oKSksbT1yPz8odC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdC5hcHBseSh0LGUpOkhRKSxiPU1hdGgubWF4KG8sMCkrYSxNPXQucmFuZ2UoKSx5PStNWzBdKy41LHg9K01bTS5sZW5ndGgtMV0rLjUsUj0odC5iYW5kd2lkdGg/eUVlOnZFZSkodC5jb3B5KCkpLEE9cC5zZWxlY3Rpb24/cC5zZWxlY3Rpb24oKTpwLFY9QS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksdGU9QS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShmLHQpLm9yZGVyKCksSz10ZS5leGl0KCkseGU9dGUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxYZT10ZS5zZWxlY3QoImxpbmUiKSxEZT10ZS5zZWxlY3QoInRleHQiKTtWPVYubWVyZ2UoVi5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksdGU9dGUubWVyZ2UoeGUpLFhlPVhlLm1lcmdlKHhlLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoYysiMiIsbCpvKSksRGU9RGUubWVyZ2UoeGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoYyxsKmIpLmF0dHIoImR5IixuPT09VU4/IjBlbSI6bj09PWpOPyIwLjcxZW0iOiIwLjMyZW0iKSkscCE9PUEmJihWPVYudHJhbnNpdGlvbihwKSx0ZT10ZS50cmFuc2l0aW9uKHApLFhlPVhlLnRyYW5zaXRpb24ocCksRGU9RGUudHJhbnNpdGlvbihwKSxLPUsudHJhbnNpdGlvbihwKS5hdHRyKCJvcGFjaXR5Iix6USkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihEKXtyZXR1cm4gaXNGaW5pdGUoRD1SKEQpKT9kKEQpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLHhlLmF0dHIoIm9wYWNpdHkiLHpRKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEQpe3ZhciByZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBkKHJlJiZpc0Zpbml0ZShyZT1yZShEKSk/cmU6UihEKSl9KSksSy5yZW1vdmUoKSxWLmF0dHIoImQiLG49PT1RVHx8bj09WlQ/cz8iTSIrbCpzKyIsIit5KyJIMC41ViIreCsiSCIrbCpzOiJNMC41LCIreSsiViIreDpzPyJNIit5KyIsIitsKnMrIlYwLjVIIit4KyJWIitsKnM6Ik0iK3krIiwwLjVIIit4KSx0ZS5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEQpe3JldHVybiBkKFIoRCkpfSksWGUuYXR0cihjKyIyIixsKm8pLERlLmF0dHIoYyxsKmIpLnRleHQobSksQS5maWx0ZXIoeEVlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixuPT09WlQ/InN0YXJ0IjpuPT09UVQ/ImVuZCI6Im1pZGRsZSIpLEEuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPVJ9KX1yZXR1cm4gdS5zY2FsZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1wLHUpOnR9LHUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gZT1YVC5jYWxsKGFyZ3VtZW50cyksdX0sdS50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXA/W106WFQuY2FsbChwKSx1KTplLnNsaWNlKCl9LHUudGlja1ZhbHVlcz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT1wP251bGw6WFQuY2FsbChwKSx1KTppJiZpLnNsaWNlKCl9LHUudGlja0Zvcm1hdD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1wLHUpOnJ9LHUudGlja1NpemU9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89cz0rcCx1KTpvfSx1LnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3AsdSk6b30sdS50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStwLHUpOnN9LHUudGlja1BhZGRpbmc9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3AsdSk6YX0sdX12YXIgQ0VlPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIEdRKCl7Zm9yKHZhciBpLG49MCx0PWFyZ3VtZW50cy5sZW5ndGgsZT17fTtuPHQ7KytuKXtpZighKGk9YXJndW1lbnRzW25dKyIiKXx8aSBpbiBlfHwvW1xzLl0vLnRlc3QoaSkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIraSk7ZVtpXT1bXX1yZXR1cm4gbmV3IEtUKGUpfWZ1bmN0aW9uIEtUKG4pe3RoaXMuXz1ufWZ1bmN0aW9uIHdFZShuLHQpe2Zvcih2YXIgcixlPTAsaT1uLmxlbmd0aDtlPGk7KytlKWlmKChyPW5bZV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGpRKG4sdCxlKXtmb3IodmFyIGk9MCxyPW4ubGVuZ3RoO2k8cjsrK2kpaWYobltpXS5uYW1lPT09dCl7bltpXT1DRWUsbj1uLnNsaWNlKDAsaSkuY29uY2F0KG4uc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPWUmJm4ucHVzaCh7bmFtZTp0LHZhbHVlOmV9KSxufUtULnByb3RvdHlwZT1HUS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOktULG9uOmZ1bmN0aW9uKG4sdCl7dmFyIHIsZT10aGlzLl8saT1mdW5jdGlvbihuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfShuKyIiLGUpLG89LTEscz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxzOylpZihyPShuPWlbb10pLnR5cGUpZVtyXT1qUShlW3JdLG4ubmFtZSx0KTtlbHNlIGlmKG51bGw9PXQpZm9yKHIgaW4gZSllW3JdPWpRKGVbcl0sbi5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytvPHM7KWlmKChyPShuPWlbb10pLnR5cGUpJiYocj13RWUoZVtyXSxuLm5hbWUpKSlyZXR1cm4gcn0sY29weTpmdW5jdGlvbigpe3ZhciBuPXt9LHQ9dGhpcy5fO2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXS5zbGljZSgpO3JldHVybiBuZXcgS1Qobil9LGNhbGw6ZnVuY3Rpb24obix0KXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG8sZT1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZVtpXT1hcmd1bWVudHNbaSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2ZvcihpPTAscj0obz10aGlzLl9bbl0pLmxlbmd0aDtpPHI7KytpKW9baV0udmFsdWUuYXBwbHkodCxlKX0sYXBwbHk6ZnVuY3Rpb24obix0LGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKHZhciBpPXRoaXMuX1tuXSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlbcl0udmFsdWUuYXBwbHkodCxlKX19O3ZhciBxTj1HUSxKVD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsWU49e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkpULHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gUmQobil7dmFyIHQ9bis9IiIsZT10LmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PSh0PW4uc2xpY2UoMCxlKSkmJihuPW4uc2xpY2UoZSsxKSksWU4uaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOllOW3RdLGxvY2FsOm59Om59ZnVuY3Rpb24gU0VlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09SlQmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PUpUP3QuY3JlYXRlRWxlbWVudChuKTp0LmNyZWF0ZUVsZW1lbnROUyhlLG4pfX1mdW5jdGlvbiBFRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gJFQobil7dmFyIHQ9UmQobik7cmV0dXJuKHQubG9jYWw/RUVlOlNFZSkodCl9ZnVuY3Rpb24gVEVlKCl7fWZ1bmN0aW9uIExmKG4pe3JldHVybiBudWxsPT1uP1RFZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Iobil9fWZ1bmN0aW9uIERFZSgpe3JldHVybltdfWZ1bmN0aW9uIFN5KG4pe3JldHVybiBudWxsPT1uP0RFZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwobil9fWZ1bmN0aW9uIEV5KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIGVEKG4pe3JldHVybiBuZXcgQXJyYXkobi5sZW5ndGgpfWZ1bmN0aW9uIFR5KG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fVR5LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VHksYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07dmFyIFpRPSIkIjtmdW5jdGlvbiBJRWUobix0LGUsaSxyLG8pe2Zvcih2YXIgYSxzPTAsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO3M8YzsrK3MpKGE9dFtzXSk/KGEuX19kYXRhX189b1tzXSxpW3NdPWEpOmVbc109bmV3IFR5KG4sb1tzXSk7Zm9yKDtzPGw7KytzKShhPXRbc10pJiYocltzXT1hKX1mdW5jdGlvbiBBRWUobix0LGUsaSxyLG8scyl7dmFyIGEsbCxmLGM9e30sZD10Lmxlbmd0aCx1PW8ubGVuZ3RoLHA9bmV3IEFycmF5KGQpO2ZvcihhPTA7YTxkOysrYSkobD10W2FdKSYmKHBbYV09Zj1aUStzLmNhbGwobCxsLl9fZGF0YV9fLGEsdCksZiBpbiBjP3JbYV09bDpjW2ZdPWwpO2ZvcihhPTA7YTx1OysrYSkobD1jW2Y9WlErcy5jYWxsKG4sb1thXSxhLG8pXSk/KGlbYV09bCxsLl9fZGF0YV9fPW9bYV0sY1tmXT1udWxsKTplW2FdPW5ldyBUeShuLG9bYV0pO2ZvcihhPTA7YTxkOysrYSkobD10W2FdKSYmY1twW2FdXT09PWwmJihyW2FdPWwpfWZ1bmN0aW9uIFJFZShuLHQpe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn1mdW5jdGlvbiBQRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIE9FZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9fWZ1bmN0aW9uIGtFZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKG4sdCl9fWZ1bmN0aW9uIEZFZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBORWUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pOnRoaXMuc2V0QXR0cmlidXRlKG4sZSl9fWZ1bmN0aW9uIExFZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGUpfX1mdW5jdGlvbiB0RChuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9ZnVuY3Rpb24gQkVlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9fWZ1bmN0aW9uIFZFZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHQsZSl9fWZ1bmN0aW9uIEhFZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09aT90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpLGUpfX1mdW5jdGlvbiBadShuLHQpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fHREKG4pLmdldENvbXB1dGVkU3R5bGUobixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHpFZShuKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuXX19ZnVuY3Rpb24gVUVlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tuXT10fX1mdW5jdGlvbiBqRWUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX19ZnVuY3Rpb24gcFoobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFhOKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IGZaKG4pfWZ1bmN0aW9uIGZaKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1wWihuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIG1aKG4sdCl7Zm9yKHZhciBlPVhOKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5hZGQodFtpXSl9ZnVuY3Rpb24gaFoobix0KXtmb3IodmFyIGU9WE4obiksaT0tMSxyPXQubGVuZ3RoOysraTxyOyllLnJlbW92ZSh0W2ldKX1mdW5jdGlvbiBHRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7bVoodGhpcyxuKX19ZnVuY3Rpb24gV0VlKG4pe3JldHVybiBmdW5jdGlvbigpe2haKHRoaXMsbil9fWZ1bmN0aW9uIHFFZShuLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9tWjpoWikodGhpcyxuKX19ZnVuY3Rpb24gWUVlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBYRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1ufX1mdW5jdGlvbiBRRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10Pz8iIn19ZnVuY3Rpb24gWkVlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gS0VlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPW59fWZ1bmN0aW9uIEpFZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10Pz8iIn19ZnVuY3Rpb24gJEVlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGVUZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIHRUZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIG5UZSgpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGlUZSgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gclRlKCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mWi5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihuKXt0aGlzLl9uYW1lcy5pbmRleE9mKG4pPDAmJih0aGlzLl9uYW1lcy5wdXNoKG4pLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKG4pO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuKT49MH19O3ZhciBUWj17fSxRTj1udWxsO2Z1bmN0aW9uIG9UZShuLHQsZSl7cmV0dXJuIG49RFoobix0LGUpLGZ1bmN0aW9uKGkpe3ZhciByPWkucmVsYXRlZFRhcmdldDsoIXJ8fHIhPT10aGlzJiYhKDgmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSkpJiZuLmNhbGwodGhpcyxpKX19ZnVuY3Rpb24gRFoobix0LGUpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcj1RTjtRTj1pO3RyeXtuLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQsZSl9ZmluYWxseXtRTj1yfX19ZnVuY3Rpb24gYVRlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZih0KXtmb3IodmFyIG8sZT0wLGk9LTEscj10Lmxlbmd0aDtlPHI7KytlKW89dFtlXSxuLnR5cGUmJm8udHlwZSE9PW4udHlwZXx8by5uYW1lIT09bi5uYW1lP3RbKytpXT1vOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOysraT90Lmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBsVGUobix0LGUpe3ZhciBpPVRaLmhhc093blByb3BlcnR5KG4udHlwZSk/b1RlOkRaO3JldHVybiBmdW5jdGlvbihyLG8scyl7dmFyIGwsYT10aGlzLl9fb24sYz1pKHQsbyxzKTtpZihhKWZvcih2YXIgZD0wLHU9YS5sZW5ndGg7ZDx1OysrZClpZigobD1hW2RdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSx2b2lkKGwudmFsdWU9dCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKG4udHlwZSxjLGUpLGw9e3R5cGU6bi50eXBlLG5hbWU6bi5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOmV9LGE/YS5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIEFaKG4sdCxlKXt2YXIgaT10RChuKSxyPWkuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIHI/cj1uZXcgcih0LGUpOihyPWkuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksZT8oci5pbml0RXZlbnQodCxlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlKSxyLmRldGFpbD1lLmRldGFpbCk6ci5pbml0RXZlbnQodCwhMSwhMSkpLG4uZGlzcGF0Y2hFdmVudChyKX1mdW5jdGlvbiBjVGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQVoodGhpcyxuLHQpfX1mdW5jdGlvbiBkVGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQVoodGhpcyxuLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dHlwZW9mIGRvY3VtZW50PCJ1IiYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoVFo9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBaTj1bbnVsbF07ZnVuY3Rpb24gQnIobix0KXt0aGlzLl9ncm91cHM9bix0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gUFooKXtyZXR1cm4gbmV3IEJyKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sWk4pfUJyLnByb3RvdHlwZT1QWi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkJyLHNlbGVjdDpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49TGYobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsYyxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KHMpLGQ9MDtkPHM7KytkKShsPW9bZF0pJiYoYz1uLmNhbGwobCxsLl9fZGF0YV9fLGQsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLGFbZF09Yyk7cmV0dXJuIG5ldyBCcihpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVN5KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLG89MDtvPGU7KytvKWZvcih2YXIgbCxzPXRbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMscykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBCcihpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPUV5KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBsLG89dFtyXSxzPW8ubGVuZ3RoLGE9aVtyXT1bXSxjPTA7YzxzOysrYykobD1vW2NdKSYmbi5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZhLnB1c2gobCk7cmV0dXJuIG5ldyBCcihpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuIGY9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbih0ZSl7ZlsrK2NdPXRlfSksZjt2YXIgZT10P0FFZTpJRWUsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19KG4pKTtmb3IodmFyIG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciBkPWlbY10sdT1yW2NdLHA9dS5sZW5ndGgsZj1uLmNhbGwoZCxkJiZkLl9fZGF0YV9fLGMsaSksbT1mLmxlbmd0aCxiPWFbY109bmV3IEFycmF5KG0pLE09c1tjXT1uZXcgQXJyYXkobSk7ZShkLHUsYixNLGxbY109bmV3IEFycmF5KHApLGYsdCk7Zm9yKHZhciBBLFYseD0wLFI9MDt4PG07Kyt4KWlmKEE9Ylt4XSl7Zm9yKHg+PVImJihSPXgrMSk7IShWPU1bUl0pJiYrK1I8bTspO0EuX25leHQ9Vnx8bnVsbH19cmV0dXJuKHM9bmV3IEJyKHMsaSkpLl9lbnRlcj1hLHMuX2V4aXQ9bCxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgQnIodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoZUQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCcih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGVEKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24oaSk6aS5hcHBlbmQobisiIiksbnVsbCE9dCYmKHI9dChyKSksbnVsbD09ZT9vLnJlbW92ZSgpOmUobyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCkscz1uZXcgQXJyYXkoaSksYT0wO2E8bzsrK2EpZm9yKHZhciBwLGw9dFthXSxjPWVbYV0sZD1sLmxlbmd0aCx1PXNbYV09bmV3IEFycmF5KGQpLGY9MDtmPGQ7KytmKShwPWxbZl18fGNbZl0pJiYodVtmXT1wKTtmb3IoO2E8aTsrK2Epc1thXT10W2FdO3JldHVybiBuZXcgQnIocyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9LTEsZT1uLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciBzLGk9blt0XSxyPWkubGVuZ3RoLTEsbz1pW3JdOy0tcj49MDspKHM9aVtyXSkmJihvJiY0XnMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxvKSxvPXMpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQodSxwKXtyZXR1cm4gdSYmcD9uKHUuX19kYXRhX18scC5fX2RhdGFfXyk6IXUtIXB9bnx8KG49UkVlKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pe2Zvcih2YXIgYyxzPWVbb10sYT1zLmxlbmd0aCxsPXJbb109bmV3IEFycmF5KGEpLGQ9MDtkPGE7KytkKShjPXNbZF0pJiYobFtkXT1jKTtsLnNvcnQodCl9cmV0dXJuIG5ldyBCcihyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLG4uYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcil7dmFyIHM9aVtyXTtpZihzKXJldHVybiBzfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsaT10Lmxlbmd0aDtlPGk7KytlKWZvcih2YXIgYSxyPXRbZV0sbz0wLHM9ci5sZW5ndGg7bzxzOysrbykoYT1yW29dKSYmbi5jYWxsKGEsYS5fX2RhdGFfXyxvLHIpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKG4sdCl7dmFyIGU9UmQobik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gZS5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUoZSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09dD9lLmxvY2FsP09FZTpQRWU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZS5sb2NhbD9MRWU6TkVlOmUubG9jYWw/RkVlOmtFZSkoZSx0KSl9LHN0eWxlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09dD9CRWU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/SEVlOlZFZSkobix0LGU/PyIiKSk6WnUodGhpcy5ub2RlKCksbil9LHByb3BlcnR5OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PXQ/ekVlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2pFZTpVRWUpKG4sdCkpOnRoaXMubm9kZSgpW25dfSxjbGFzc2VkOmZ1bmN0aW9uKG4sdCl7dmFyIGU9cFoobisiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9WE4odGhpcy5ub2RlKCkpLHI9LTEsbz1lLmxlbmd0aDsrK3I8bzspaWYoIWkuY29udGFpbnMoZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/cUVlOnQ/R0VlOldFZSkoZSx0KSl9LHRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PW4/WUVlOigiZnVuY3Rpb24iPT10eXBlb2Ygbj9RRWU6WEVlKShuKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PW4/WkVlOigiZnVuY3Rpb24iPT10eXBlb2Ygbj9KRWU6S0VlKShuKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goJEVlKX0sbG93ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGVUZSl9LGFwcGVuZDpmdW5jdGlvbihuKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOiRUKG4pO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24obix0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOiRUKG4pLGk9bnVsbD09dD90VGU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMZih0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goblRlKX0sY2xvbmU6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuc2VsZWN0KG4/clRlOmlUZSl9LGRhdHVtOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24obix0LGUpe3ZhciByLHMsaT1mdW5jdGlvbihuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLGk9dC5pbmRleE9mKCIuIik7cmV0dXJuIGk+PTAmJihlPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSkse3R5cGU6dCxuYW1lOmV9fSl9KG4rIiIpLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYT10P2xUZTphVGUsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChhKGlbcl0sdCxlKSk7cmV0dXJuIHRoaXN9dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKWZvcih2YXIgZCxsPTAsYz1hLmxlbmd0aDtsPGM7KytsKWZvcihyPTAsZD1hW2xdO3I8bzsrK3IpaWYoKHM9aVtyXSkudHlwZT09PWQudHlwZSYmcy5uYW1lPT09ZC5uYW1lKXJldHVybiBkLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2RUZTpjVGUpKG4sdCkpfX07dmFyIFBkPVBaO2Z1bmN0aW9uIG5EKG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9uZXcgQnIoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBCcihbW25dXSxaTil9ZnVuY3Rpb24gQmYobix0LGUpe24ucHJvdG90eXBlPXQucHJvdG90eXBlPWUsZS5jb25zdHJ1Y3Rvcj1ufWZ1bmN0aW9uIEtnKG4sdCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIHQpZVtpXT10W2ldO3JldHVybiBlfWZ1bmN0aW9uIEt1KCl7fXZhciByRD0xLy43LEpnPSJcXHMqKFsrLV0/XFxkKylcXHMqIixJeT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixVYz0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsdVRlPS9eIyhbMC05YS1mXXszLDh9KSQvLHBUZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbSmcsSmcsSmddKyJcXCkkIiksZlRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tVYyxVYyxVY10rIlxcKSQiKSxtVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tKZyxKZyxKZyxJeV0rIlxcKSQiKSxoVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tVYyxVYyxVYyxJeV0rIlxcKSQiKSxnVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0l5LFVjLFVjXSsiXFwpJCIpLF9UZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0l5LFVjLFVjLEl5XSsiXFwpJCIpLE9aPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIGtaKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gRlooKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBHbChuKXt2YXIgdCxlO3JldHVybiBuPShuKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD11VGUuZXhlYyhuKSk/KGU9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSw2PT09ZT9OWih0KTozPT09ZT9uZXcgWm8odD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fDI0MCZ0LCgxNSZ0KTw8NHwxNSZ0LDEpOjg9PT1lP2lEKHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKDI1NSZ0KS8yNTUpOjQ9PT1lP2lEKHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXwyNDAmdCwoKDE1JnQpPDw0fDE1JnQpLzI1NSk6bnVsbCk6KHQ9cFRlLmV4ZWMobikpP25ldyBabyh0WzFdLHRbMl0sdFszXSwxKToodD1mVGUuZXhlYyhuKSk/bmV3IFpvKDI1NSp0WzFdLzEwMCwyNTUqdFsyXS8xMDAsMjU1KnRbM10vMTAwLDEpOih0PW1UZS5leGVjKG4pKT9pRCh0WzFdLHRbMl0sdFszXSx0WzRdKToodD1oVGUuZXhlYyhuKSk/aUQoMjU1KnRbMV0vMTAwLDI1NSp0WzJdLzEwMCwyNTUqdFszXS8xMDAsdFs0XSk6KHQ9Z1RlLmV4ZWMobikpP1ZaKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9X1RlLmV4ZWMobikpP1ZaKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6T1ouaGFzT3duUHJvcGVydHkobik/TlooT1pbbl0pOiJ0cmFuc3BhcmVudCI9PT1uP25ldyBabyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIE5aKG4pe3JldHVybiBuZXcgWm8obj4+MTYmMjU1LG4+PjgmMjU1LDI1NSZuLDEpfWZ1bmN0aW9uIGlEKG4sdCxlLGkpe3JldHVybiBpPD0wJiYobj10PWU9TmFOKSxuZXcgWm8obix0LGUsaSl9ZnVuY3Rpb24gJE4obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBLdXx8KG49R2wobikpLG4/bmV3IFpvKChuPW4ucmdiKCkpLnIsbi5nLG4uYixuLm9wYWNpdHkpOm5ldyBab31mdW5jdGlvbiAkZyhuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/JE4obik6bmV3IFpvKG4sdCxlLGk/PzEpfWZ1bmN0aW9uIFpvKG4sdCxlLGkpe3RoaXMucj0rbix0aGlzLmc9K3QsdGhpcy5iPStlLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBMWigpe3JldHVybiIjIitLTih0aGlzLnIpK0tOKHRoaXMuZykrS04odGhpcy5iKX1mdW5jdGlvbiBCWigpe3ZhciBuPXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PShuPWlzTmFOKG4pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PW4/IikiOiIsICIrbisiKSIpfWZ1bmN0aW9uIEtOKG4pe3JldHVybigobj1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKG4pfHwwKSkpPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gVloobix0LGUsaSl7cmV0dXJuIGk8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyB6YyhuLHQsZSxpKX1mdW5jdGlvbiBIWihuKXtpZihuIGluc3RhbmNlb2YgemMpcmV0dXJuIG5ldyB6YyhuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBLdXx8KG49R2wobikpLCFuKXJldHVybiBuZXcgemM7aWYobiBpbnN0YW5jZW9mIHpjKXJldHVybiBuO3ZhciB0PShuPW4ucmdiKCkpLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSksbz1NYXRoLm1heCh0LGUsaSkscz1OYU4sYT1vLXIsbD0obytyKS8yO3JldHVybiBhPyhzPXQ9PT1vPyhlLWkpL2ErNiooZTxpKTplPT09bz8oaS10KS9hKzI6KHQtZSkvYSs0LGEvPWw8LjU/bytyOjItby1yLHMqPTYwKTphPWw+MCYmbDwxPzA6cyxuZXcgemMocyxhLGwsbi5vcGFjaXR5KX1mdW5jdGlvbiBWZihuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/SFoobik6bmV3IHpjKG4sdCxlLGk/PzEpfWZ1bmN0aW9uIHpjKG4sdCxlLGkpe3RoaXMuaD0rbix0aGlzLnM9K3QsdGhpcy5sPStlLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBKTihuLHQsZSl7cmV0dXJuIDI1NSoobjw2MD90KyhlLXQpKm4vNjA6bjwxODA/ZTpuPDI0MD90KyhlLXQpKigyNDAtbikvNjA6dCl9QmYoS3UsR2wse2NvcHk6ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxuKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6a1osZm9ybWF0SGV4OmtaLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBIWih0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOkZaLHRvU3RyaW5nOkZafSksQmYoWm8sJGcsS2coS3Use2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/ckQ6TWF0aC5wb3cockQsbiksbmV3IFpvKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBabyh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkxaLGZvcm1hdEhleDpMWixmb3JtYXRSZ2I6QlosdG9TdHJpbmc6Qlp9KSksQmYoemMsVmYsS2coS3Use2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/ckQ6TWF0aC5wb3cockQsbiksbmV3IHpjKHRoaXMuaCx0aGlzLnMsdGhpcy5sKm4sdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/Ljc6TWF0aC5wb3coLjcsbiksbmV3IHpjKHRoaXMuaCx0aGlzLnMsdGhpcy5sKm4sdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSx0PWlzTmFOKG4pfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGU9dGhpcy5sLGk9ZSsoZTwuNT9lOjEtZSkqdCxyPTIqZS1pO3JldHVybiBuZXcgWm8oSk4obj49MjQwP24tMjQwOm4rMTIwLHIsaSksSk4obixyLGkpLEpOKG48MTIwP24rMjQwOm4tMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBuPXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PShuPWlzTmFOKG4pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT1uPyIpIjoiLCAiK24rIikiKX19KSk7dmFyIHpaPU1hdGguUEkvMTgwLFVaPTE4MC9NYXRoLlBJLGpaPS45NjQyMixHWj0xLFdaPS44MjUyMSxxWj00LzI5LGUwPTYvMjksWVo9MyplMCplMCx2VGU9ZTAqZTAqZTA7ZnVuY3Rpb24gWFoobil7aWYobiBpbnN0YW5jZW9mIGpjKXJldHVybiBuZXcgamMobi5sLG4uYSxuLmIsbi5vcGFjaXR5KTtpZihuIGluc3RhbmNlb2YgT2QpcmV0dXJuIFFaKG4pO24gaW5zdGFuY2VvZiBab3x8KG49JE4obikpO3ZhciBvLHMsdD1pTChuLnIpLGU9aUwobi5nKSxpPWlMKG4uYikscj1lTCgoLjIyMjUwNDUqdCsuNzE2ODc4NiplKy4wNjA2MTY5KmkpL0daKTtyZXR1cm4gdD09PWUmJmU9PT1pP289cz1yOihvPWVMKCguNDM2MDc0Nyp0Ky4zODUwNjQ5KmUrLjE0MzA4MDQqaSkvalopLHM9ZUwoKC4wMTM5MzIyKnQrLjA5NzEwNDUqZSsuNzE0MTczMyppKS9XWikpLG5ldyBqYygxMTYqci0xNiw1MDAqKG8tciksMjAwKihyLXMpLG4ub3BhY2l0eSl9ZnVuY3Rpb24gamMobix0LGUsaSl7dGhpcy5sPStuLHRoaXMuYT0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGVMKG4pe3JldHVybiBuPnZUZT9NYXRoLnBvdyhuLDEvMyk6bi9ZWitxWn1mdW5jdGlvbiB0TChuKXtyZXR1cm4gbj5lMD9uKm4qbjpZWioobi1xWil9ZnVuY3Rpb24gbkwobil7cmV0dXJuIDI1NSoobjw9LjAwMzEzMDg/MTIuOTIqbjoxLjA1NSpNYXRoLnBvdyhuLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBpTChuKXtyZXR1cm4obi89MjU1KTw9LjA0MDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBIZihuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24obil7aWYobiBpbnN0YW5jZW9mIE9kKXJldHVybiBuZXcgT2Qobi5oLG4uYyxuLmwsbi5vcGFjaXR5KTtpZihuIGluc3RhbmNlb2YgamN8fChuPVhaKG4pKSwwPT09bi5hJiYwPT09bi5iKXJldHVybiBuZXcgT2QoTmFOLDA8bi5sJiZuLmw8MTAwPzA6TmFOLG4ubCxuLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIobi5iLG4uYSkqVVo7cmV0dXJuIG5ldyBPZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQobi5hKm4uYStuLmIqbi5iKSxuLmwsbi5vcGFjaXR5KX0obik6bmV3IE9kKG4sdCxlLGk/PzEpfWZ1bmN0aW9uIE9kKG4sdCxlLGkpe3RoaXMuaD0rbix0aGlzLmM9K3QsdGhpcy5sPStlLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBRWihuKXtpZihpc05hTihuLmgpKXJldHVybiBuZXcgamMobi5sLDAsMCxuLm9wYWNpdHkpO3ZhciB0PW4uaCp6WjtyZXR1cm4gbmV3IGpjKG4ubCxNYXRoLmNvcyh0KSpuLmMsTWF0aC5zaW4odCkqbi5jLG4ub3BhY2l0eSl9ZnVuY3Rpb24gb0wobix0LGUsaSxyKXt2YXIgbz1uKm4scz1vKm47cmV0dXJuKCgxLTMqbiszKm8tcykqdCsoNC02Km8rMypzKSplKygxKzMqbiszKm8tMypzKSppK3MqcikvNn1mdW5jdGlvbiB0MChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gSloobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4rZSp0fX1mdW5jdGlvbiBzRChuLHQpe3ZhciBlPXQtbjtyZXR1cm4gZT9KWihuLGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6dDAoaXNOYU4obik/dDpuKX1mdW5jdGlvbiBYcyhuLHQpe3ZhciBlPXQtbjtyZXR1cm4gZT9KWihuLGUpOnQwKGlzTmFOKG4pP3Q6bil9QmYoamMsZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1haKG4pOm5ldyBqYyhuLHQsZSxpPz8xKX0sS2coS3Use2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgamModGhpcy5sKzE4KihuPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGpjKHRoaXMubC0xOCoobj8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgbj0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP246bit0aGlzLmEvNTAwLGU9aXNOYU4odGhpcy5iKT9uOm4tdGhpcy5iLzIwMDtyZXR1cm4gbmV3IFpvKG5MKDMuMTMzODU2MSoodD1qWip0TCh0KSktMS42MTY4NjY3KihuPUdaKnRMKG4pKS0uNDkwNjE0NiooZT1XWip0TChlKSkpLG5MKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSpuKy4wMzM0NTQqZSksbkwoLjA3MTk0NTMqdC0uMjI4OTkxNCpuKzEuNDA1MjQyNyplKSx0aGlzLm9wYWNpdHkpfX0pKSxCZihPZCxIZixLZyhLdSx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBPZCh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobj8/MSksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgT2QodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG4/PzEpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBRWih0aGlzKS5yZ2IoKX19KSk7dmFyIHpmPWZ1bmN0aW9uIG4odCl7dmFyIGU9ZnVuY3Rpb24obil7cmV0dXJuIDE9PShuPStuKT9YczpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZnVuY3Rpb24obix0LGUpe3JldHVybiBuPU1hdGgucG93KG4sZSksdD1NYXRoLnBvdyh0LGUpLW4sZT0xL2UsZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KG4raSp0LGUpfX0odCxlLG4pOnQwKGlzTmFOKHQpP2U6dCl9fSh0KTtmdW5jdGlvbiBpKHIsbyl7dmFyIHM9ZSgocj0kZyhyKSkuciwobz0kZyhvKSkuciksYT1lKHIuZyxvLmcpLGw9ZShyLmIsby5iKSxjPVhzKHIub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gci5yPXMoZCksci5nPWEoZCksci5iPWwoZCksci5vcGFjaXR5PWMoZCkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiBlSyhuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHMsYSxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpO2ZvcihzPTA7czxlOysrcylhPSRnKHRbc10pLGlbc109YS5yfHwwLHJbc109YS5nfHwwLG9bc109YS5ifHwwO3JldHVybiBpPW4oaSkscj1uKHIpLG89bihvKSxhLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gYS5yPWkobCksYS5nPXIobCksYS5iPW8obCksYSsiIn19fWZ1bmN0aW9uIHRLKG4sdCl7dHx8KHQ9W10pO3ZhciByLGU9bj9NYXRoLm1pbih0Lmxlbmd0aCxuLmxlbmd0aCk6MCxpPXQuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1vKSt0W3JdKm87cmV0dXJuIGl9fWZ1bmN0aW9uIGlLKG4sdCl7dmFyIHMsZT10P3QubGVuZ3RoOjAsaT1uP01hdGgubWluKGUsbi5sZW5ndGgpOjAscj1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoZSk7Zm9yKHM9MDtzPGk7KytzKXJbc109VWYobltzXSx0W3NdKTtmb3IoO3M8ZTsrK3Mpb1tzXT10W3NdO3JldHVybiBmdW5jdGlvbihhKXtmb3Iocz0wO3M8aTsrK3Mpb1tzXT1yW3NdKGEpO3JldHVybiBvfX1mdW5jdGlvbiBySyhuLHQpe3ZhciBlPW5ldyBEYXRlO3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oaSl7cmV0dXJuIGUuc2V0VGltZShuKigxLWkpK3QqaSksZX19ZnVuY3Rpb24gQm8obix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBuKigxLWUpK3QqZX19ZnVuY3Rpb24gb0sobix0KXt2YXIgcixlPXt9LGk9e307Zm9yKHIgaW4obnVsbD09PW58fCJvYmplY3QiIT10eXBlb2YgbikmJihuPXt9KSwobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCkmJih0PXt9KSx0KXIgaW4gbj9lW3JdPVVmKG5bcl0sdFtyXSk6aVtyXT10W3JdO3JldHVybiBmdW5jdGlvbihvKXtmb3IociBpbiBlKWlbcl09ZVtyXShvKTtyZXR1cm4gaX19ZUsoZnVuY3Rpb24obil7dmFyIHQ9bi5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9ZTw9MD9lPTA6ZT49MT8oZT0xLHQtMSk6TWF0aC5mbG9vcihlKnQpLHI9bltpXSxvPW5baSsxXTtyZXR1cm4gb0woKGUtaS90KSp0LGk+MD9uW2ktMV06MipyLW8scixvLGk8dC0xP25baSsyXToyKm8tcil9fSksZUsoZnVuY3Rpb24obil7dmFyIHQ9bi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPU1hdGguZmxvb3IoKChlJT0xKTwwPysrZTplKSp0KTtyZXR1cm4gb0woKGUtaS90KSp0LG5bKGkrdC0xKSV0XSxuW2kldF0sblsoaSsxKSV0XSxuWyhpKzIpJXRdKX19KTt2YXIgYUw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHNMPW5ldyBSZWdFeHAoYUwuc291cmNlLCJnIik7ZnVuY3Rpb24gQXkobix0KXt2YXIgaSxyLG8sZT1hTC5sYXN0SW5kZXg9c0wubGFzdEluZGV4PTAscz0tMSxhPVtdLGw9W107Zm9yKG4rPSIiLHQrPSIiOyhpPWFMLmV4ZWMobikpJiYocj1zTC5leGVjKHQpKTspKG89ci5pbmRleCk+ZSYmKG89dC5zbGljZShlLG8pLGFbc10/YVtzXSs9bzphWysrc109byksKGk9aVswXSk9PT0ocj1yWzBdKT9hW3NdP2Fbc10rPXI6YVsrK3NdPXI6KGFbKytzXT1udWxsLGwucHVzaCh7aTpzLHg6Qm8oaSxyKX0pKSxlPXNMLmxhc3RJbmRleDtyZXR1cm4gZTx0Lmxlbmd0aCYmKG89dC5zbGljZShlKSxhW3NdP2Fbc10rPW86YVsrK3NdPW8pLGEubGVuZ3RoPDI/bFswXT9mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4odCkrIiJ9fShsWzBdLngpOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX0odCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1LGQ9MDtkPHQ7KytkKWFbKHU9bFtkXSkuaV09dS54KGMpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gVWYobix0KXt2YXIgaSxlPXR5cGVvZiB0O3JldHVybiBudWxsPT10fHwiYm9vbGVhbiI9PT1lP3QwKHQpOigibnVtYmVyIj09PWU/Qm86InN0cmluZyI9PT1lPyhpPUdsKHQpKT8odD1pLHpmKTpBeTp0IGluc3RhbmNlb2YgR2w/emY6dCBpbnN0YW5jZW9mIERhdGU/cks6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSh0KT90SzpBcnJheS5pc0FycmF5KHQpP2lLOiJmdW5jdGlvbiIhPXR5cGVvZiB0LnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiB0LnRvU3RyaW5nfHxpc05hTih0KT9vSzpCbykobix0KX1mdW5jdGlvbiBsTChuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobiooMS1lKSt0KmUpfX12YXIgUnksZEwsYUssbEQsc0s9MTgwL01hdGguUEksYUQ9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gY0wobix0LGUsaSxyLG8pe3ZhciBzLGEsbDtyZXR1cm4ocz1NYXRoLnNxcnQobipuK3QqdCkpJiYobi89cyx0Lz1zKSwobD1uKmUrdCppKSYmKGUtPW4qbCxpLT10KmwpLChhPU1hdGguc3FydChlKmUraSppKSkmJihlLz1hLGkvPWEsbC89YSksbippPHQqZSYmKG49LW4sdD0tdCxsPS1sLHM9LXMpLHt0cmFuc2xhdGVYOnIsdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsbikqc0ssc2tld1g6TWF0aC5hdGFuKGwpKnNLLHNjYWxlWDpzLHNjYWxlWTphfX1mdW5jdGlvbiBkSyhuLHQsZSxpKXtmdW5jdGlvbiByKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYyxkKXt2YXIgdT1bXSxwPVtdO3JldHVybiBjPW4oYyksZD1uKGQpLGZ1bmN0aW9uKGMsZCx1LHAsZixtKXtpZihjIT09dXx8ZCE9PXApe3ZhciBiPWYucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwsZSk7bS5wdXNoKHtpOmItNCx4OkJvKGMsdSl9LHtpOmItMix4OkJvKGQscCl9KX1lbHNlKHV8fHApJiZmLnB1c2goInRyYW5zbGF0ZSgiK3UrdCtwK2UpfShjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLGQudHJhbnNsYXRlWCxkLnRyYW5zbGF0ZVksdSxwKSxmdW5jdGlvbihjLGQsdSxwKXtjIT09ZD8oYy1kPjE4MD9kKz0zNjA6ZC1jPjE4MCYmKGMrPTM2MCkscC5wdXNoKHtpOnUucHVzaChyKHUpKyJyb3RhdGUoIixudWxsLGkpLTIseDpCbyhjLGQpfSkpOmQmJnUucHVzaChyKHUpKyJyb3RhdGUoIitkK2kpfShjLnJvdGF0ZSxkLnJvdGF0ZSx1LHApLGZ1bmN0aW9uKGMsZCx1LHApe2MhPT1kP3AucHVzaCh7aTp1LnB1c2gocih1KSsic2tld1goIixudWxsLGkpLTIseDpCbyhjLGQpfSk6ZCYmdS5wdXNoKHIodSkrInNrZXdYKCIrZCtpKX0oYy5za2V3WCxkLnNrZXdYLHUscCksZnVuY3Rpb24oYyxkLHUscCxmLG0pe2lmKGMhPT11fHxkIT09cCl7dmFyIGI9Zi5wdXNoKHIoZikrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO20ucHVzaCh7aTpiLTQseDpCbyhjLHUpfSx7aTpiLTIseDpCbyhkLHApfSl9ZWxzZSgxIT09dXx8MSE9PXApJiZmLnB1c2gocihmKSsic2NhbGUoIit1KyIsIitwKyIpIil9KGMuc2NhbGVYLGMuc2NhbGVZLGQuc2NhbGVYLGQuc2NhbGVZLHUscCksYz1kPW51bGwsZnVuY3Rpb24oZil7Zm9yKHZhciBNLG09LTEsYj1wLmxlbmd0aDsrK208YjspdVsoTT1wW21dKS5pXT1NLngoZik7cmV0dXJuIHUuam9pbigiIil9fX12YXIgdUw9ZEsoZnVuY3Rpb24obil7cmV0dXJuIm5vbmUiPT09bj9hRDooUnl8fChSeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxkTD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYUs9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLFJ5LnN0eWxlLnRyYW5zZm9ybT1uLG49YUsuZ2V0Q29tcHV0ZWRTdHlsZShkTC5hcHBlbmRDaGlsZChSeSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksZEwucmVtb3ZlQ2hpbGQoUnkpLGNMKCsobj1uLnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCtuWzFdLCtuWzJdLCtuWzNdLCtuWzRdLCtuWzVdKSl9LCJweCwgIiwicHgpIiwiZGVnKSIpLHBMPWRLKGZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP2FEOihsRHx8KGxEPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGxELnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKSwobj1sRC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9jTCgobj1uLm1hdHJpeCkuYSxuLmIsbi5jLG4uZCxuLmUsbi5mKTphRCl9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gdUsobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD1WZih0KSkuaCwoZT1WZihlKSkuaCkscj1Ycyh0LnMsZS5zKSxvPVhzKHQubCxlLmwpLHM9WHModC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0Lmg9aShhKSx0LnM9cihhKSx0Lmw9byhhKSx0Lm9wYWNpdHk9cyhhKSx0KyIifX19dmFyIGZMPXVLKHNEKTtmdW5jdGlvbiBwSyhuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgaT1uKCh0PUhmKHQpKS5oLChlPUhmKGUpKS5oKSxyPVhzKHQuYyxlLmMpLG89WHModC5sLGUubCkscz1Ycyh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIHQuaD1pKGEpLHQuYz1yKGEpLHQubD1vKGEpLHQub3BhY2l0eT1zKGEpLHQrIiJ9fX11SyhYcyk7dmFyIGNELGt5LG1MPXBLKHNEKSxuMD0ocEsoWHMpLDApLE95PTAsUHk9MCxtSz0xZTMsZEQ9MCxqZj0wLHVEPTAsRnk9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsaEs9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX07ZnVuY3Rpb24gaTAoKXtyZXR1cm4gamZ8fChoSyhEVGUpLGpmPUZ5Lm5vdygpK3VEKX1mdW5jdGlvbiBEVGUoKXtqZj0wfWZ1bmN0aW9uIE55KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBwRChuLHQsZSl7dmFyIGk9bmV3IE55O3JldHVybiBpLnJlc3RhcnQobix0LGUpLGl9ZnVuY3Rpb24gZksoKXtqZj0oZEQ9Rnkubm93KCkpK3VELG4wPU95PTA7dHJ5eyFmdW5jdGlvbigpe2kwKCksKytuMDtmb3IodmFyIHQsbj1jRDtuOykodD1qZi1uLl90aW1lKT49MCYmbi5fY2FsbC5jYWxsKG51bGwsdCksbj1uLl9uZXh0Oy0tbjB9KCl9ZmluYWxseXtuMD0wLGZ1bmN0aW9uKCl7Zm9yKHZhciBuLGUsdD1jRCxpPTEvMDt0Oyl0Ll9jYWxsPyhpPnQuX3RpbWUmJihpPXQuX3RpbWUpLG49dCx0PXQuX25leHQpOihlPXQuX25leHQsdC5fbmV4dD1udWxsLHQ9bj9uLl9uZXh0PWU6Y0Q9ZSk7a3k9bixoTChpKX0oKSxqZj0wfX1mdW5jdGlvbiBJVGUoKXt2YXIgbj1GeS5ub3coKSx0PW4tZEQ7dD5tSyYmKHVELT10LGREPW4pfWZ1bmN0aW9uIGhMKG4pe24wfHwoT3kmJihPeT1jbGVhclRpbWVvdXQoT3kpKSxuLWpmPjI0PyhuPDEvMCYmKE95PXNldFRpbWVvdXQoZkssbi1GeS5ub3coKS11RCkpLFB5JiYoUHk9Y2xlYXJJbnRlcnZhbChQeSkpKTooUHl8fChkRD1GeS5ub3coKSxQeT1zZXRJbnRlcnZhbChJVGUsbUspKSxuMD0xLGhLKGZLKSkpfWZ1bmN0aW9uIGZEKG4sdCxlKXt2YXIgaT1uZXcgTnk7cmV0dXJuIGkucmVzdGFydChmdW5jdGlvbihyKXtpLnN0b3AoKSxuKHIrdCl9LHQ9bnVsbD09dD8wOit0LGUpLGl9TnkucHJvdG90eXBlPXBELnByb3RvdHlwZT17Y29uc3RydWN0b3I6TnkscmVzdGFydDpmdW5jdGlvbihuLHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtlPShudWxsPT1lP2kwKCk6K2UpKyhudWxsPT10PzA6K3QpLCF0aGlzLl9uZXh0JiZreSE9PXRoaXMmJihreT9reS5fbmV4dD10aGlzOmNEPXRoaXMsa3k9dGhpcyksdGhpcy5fY2FsbD1uLHRoaXMuX3RpbWU9ZSxoTCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxoTCgpKX19O3ZhciBSVGU9cU4oInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0IiksUFRlPVtdLGJLPTAsZ0w9MSxoRD0yLG1EPTMsX0s9NCxnRD01LEx5PTY7ZnVuY3Rpb24gSnUobix0LGUsaSxyLG8pe3ZhciBzPW4uX190cmFuc2l0aW9uO2lmKHMpe2lmKGUgaW4gcylyZXR1cm59ZWxzZSBuLl9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24obix0LGUpe3ZhciByLGk9bi5fX3RyYW5zaXRpb247ZnVuY3Rpb24gcyhjKXt2YXIgZCx1LHAsZjtpZihlLnN0YXRlIT09Z0wpcmV0dXJuIGwoKTtmb3IoZCBpbiBpKWlmKChmPWlbZF0pLm5hbWU9PT1lLm5hbWUpe2lmKGYuc3RhdGU9PT1tRClyZXR1cm4gZkQocyk7Zi5zdGF0ZT09PV9LPyhmLnN0YXRlPUx5LGYudGltZXIuc3RvcCgpLGYub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxkZWxldGUgaVtkXSk6K2Q8dCYmKGYuc3RhdGU9THksZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW2RdKX1pZihmRChmdW5jdGlvbigpe2Uuc3RhdGU9PT1tRCYmKGUuc3RhdGU9X0ssZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoYykpfSksZS5zdGF0ZT1oRCxlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09aEQpe2ZvcihlLnN0YXRlPW1ELHI9bmV3IEFycmF5KHA9ZS50d2Vlbi5sZW5ndGgpLGQ9MCx1PS0xO2Q8cDsrK2QpKGY9ZS50d2VlbltkXS52YWx1ZS5jYWxsKG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKyt1XT1mKTtyLmxlbmd0aD11KzF9fWZ1bmN0aW9uIGEoYyl7Zm9yKHZhciBkPWM8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLGMvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChsKSxlLnN0YXRlPWdELDEpLHU9LTEscD1yLmxlbmd0aDsrK3U8cDspclt1XS5jYWxsKG4sZCk7ZS5zdGF0ZT09PWdEJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe2Zvcih2YXIgYyBpbiBlLnN0YXRlPUx5LGUudGltZXIuc3RvcCgpLGRlbGV0ZSBpW3RdLGkpcmV0dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn1pW3RdPWUsZS50aW1lcj1wRChmdW5jdGlvbihjKXtlLnN0YXRlPWdMLGUudGltZXIucmVzdGFydChzLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZzKGMtZS5kZWxheSl9LDAsZS50aW1lKX0obixlLHtuYW1lOnQsaW5kZXg6aSxncm91cDpyLG9uOlJUZSx0d2VlbjpQVGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6Ykt9KX1mdW5jdGlvbiBCeShuLHQpe3ZhciBlPWhvKG4sdCk7aWYoZS5zdGF0ZT5iSyl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIG1zKG4sdCl7dmFyIGU9aG8obix0KTtpZihlLnN0YXRlPm1EKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIGhvKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24ga1RlKG4sdCl7dmFyIGUsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1tcyh0aGlzLG4pLG89ci50d2VlbjtpZihvIT09ZSlmb3IodmFyIHM9MCxhPShpPWU9bykubGVuZ3RoO3M8YTsrK3MpaWYoaVtzXS5uYW1lPT09dCl7KGk9aS5zbGljZSgpKS5zcGxpY2UocywxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIEZUZShuLHQsZSl7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89bXModGhpcyxuKSxzPW8udHdlZW47aWYocyE9PWkpe3I9KGk9cykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfW8udHdlZW49cn19ZnVuY3Rpb24gcjAobix0LGUpe3ZhciBpPW4uX2lkO3JldHVybiBuLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1tcyh0aGlzLGkpOyhyLnZhbHVlfHwoci52YWx1ZT17fSkpW3RdPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24ocil7cmV0dXJuIGhvKHIsaSkudmFsdWVbdF19fWZ1bmN0aW9uIF9EKG4sdCl7dmFyIGU7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgdD9Cbzp0IGluc3RhbmNlb2YgR2w/emY6KGU9R2wodCkpPyh0PWUsemYpOkF5KShuLHQpfWZ1bmN0aW9uIE5UZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKX19ZnVuY3Rpb24gTFRlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQlRlKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZShuKTtyZXR1cm4gcz09PXI/bnVsbDpzPT09aT9vOm89dChpPXMsZSl9fWZ1bmN0aW9uIFZUZShuLHQsZSl7dmFyIGksbyxyPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19ZnVuY3Rpb24gSFRlKG4sdCxlKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbCxhPWUodGhpcyk7cmV0dXJuIG51bGw9PWE/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToocz10aGlzLmdldEF0dHJpYnV0ZShuKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIHpUZShuLHQsZSl7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBzLGwsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOihzPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIEdUZShuLHQpe3ZhciBlLGk7ZnVuY3Rpb24gcigpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09aSYmKGU9KGk9bykmJmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19KG4sbykpLGV9cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBXVGUobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihlPShpPW8pJiZmdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQuY2FsbCh0aGlzLGUpKX19KG4sbykpLGV9cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBxVGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtCeSh0aGlzLG4pLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gWVRlKG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtCeSh0aGlzLG4pLmRlbGF5PXR9fWZ1bmN0aW9uIFhUZShuLHQpe3JldHVybiBmdW5jdGlvbigpe21zKHRoaXMsbikuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBRVGUobix0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe21zKHRoaXMsbikuZHVyYXRpb249dH19dmFyIGVEZT1QZC5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gT0sobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19dmFyIHVEZT0wO2Z1bmN0aW9uIEtvKG4sdCxlLGkpe3RoaXMuX2dyb3Vwcz1uLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPWUsdGhpcy5faWQ9aX1mdW5jdGlvbiBiRCgpe3JldHVybisrdURlfXZhciBvMD1QZC5wcm90b3R5cGU7S28ucHJvdG90eXBlPWZ1bmN0aW9uKG4pe3JldHVybiBQZCgpLnRyYW5zaXRpb24obil9LnByb3RvdHlwZT17Y29uc3RydWN0b3I6S28sc2VsZWN0OmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49TGYobikpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPTA7czxyOysrcylmb3IodmFyIGQsdSxhPWlbc10sbD1hLmxlbmd0aCxjPW9bc109bmV3IEFycmF5KGwpLHA9MDtwPGw7KytwKShkPWFbcF0pJiYodT1uLmNhbGwoZCxkLl9fZGF0YV9fLHAsYSkpJiYoIl9fZGF0YV9fImluIGQmJih1Ll9fZGF0YV9fPWQuX19kYXRhX18pLGNbcF09dSxKdShjW3BdLHQsZSxwLGMsaG8oZCxlKSkpO3JldHVybiBuZXcgS28obyx0aGlzLl9wYXJlbnRzLHQsZSl9LHNlbGVjdEFsbDpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVN5KG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1bXSxzPVtdLGE9MDthPHI7KythKWZvcih2YXIgZCxsPWlbYV0sYz1sLmxlbmd0aCx1PTA7dTxjOysrdSlpZihkPWxbdV0pe2Zvcih2YXIgZixwPW4uY2FsbChkLGQuX19kYXRhX18sdSxsKSxtPWhvKGQsZSksYj0wLE09cC5sZW5ndGg7YjxNOysrYikoZj1wW2JdKSYmSnUoZix0LGUsYixwLG0pO28ucHVzaChwKSxzLnB1c2goZCl9cmV0dXJuIG5ldyBLbyhvLHMsdCxlKX0sZmlsdGVyOmZ1bmN0aW9uKG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1FeShuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgbCxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09W10sYz0wO2M8czsrK2MpKGw9b1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxvKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgS28oaSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbihuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgsbz1NYXRoLm1pbihpLGUubGVuZ3RoKSxzPW5ldyBBcnJheShpKSxhPTA7YTxvOysrYSlmb3IodmFyIHAsbD10W2FdLGM9ZVthXSxkPWwubGVuZ3RoLHU9c1thXT1uZXcgQXJyYXkoZCksZj0wO2Y8ZDsrK2YpKHA9bFtmXXx8Y1tmXSkmJih1W2ZdPXApO2Zvcig7YTxpOysrYSlzW2FdPXRbYV07cmV0dXJuIG5ldyBLbyhzLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgZURlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1iRCgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBsLHM9aVtvXSxhPXMubGVuZ3RoLGM9MDtjPGE7KytjKWlmKGw9c1tjXSl7dmFyIGQ9aG8obCx0KTtKdShsLG4sZSxjLHMse3RpbWU6ZC50aW1lK2QuZGVsYXkrZC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmQuZHVyYXRpb24sZWFzZTpkLmVhc2V9KX1yZXR1cm4gbmV3IEtvKGksdGhpcy5fcGFyZW50cyxuLGUpfSxjYWxsOm8wLmNhbGwsbm9kZXM6bzAubm9kZXMsbm9kZTpvMC5ub2RlLHNpemU6bzAuc2l6ZSxlbXB0eTpvMC5lbXB0eSxlYWNoOm8wLmVhY2gsb246ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2hvKHRoaXMubm9kZSgpLGUpLm9uLm9uKG4pOnRoaXMuZWFjaChmdW5jdGlvbihuLHQsZSl7dmFyIGkscixvPWZ1bmN0aW9uKG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSl9KHQpP0J5Om1zO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPW8odGhpcyxuKSxhPXMub247YSE9PWkmJihyPShpPWEpLmNvcHkoKSkub24odCxlKSxzLm9uPXJ9fShlLG4sdCkpfSxhdHRyOmZ1bmN0aW9uKG4sdCl7dmFyIGU9UmQobiksaT0idHJhbnNmb3JtIj09PWU/cEw6X0Q7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKG4sImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGUubG9jYWw/elRlOkhUZSkoZSxpLHIwKHRoaXMsImF0dHIuIituLHQpKTpudWxsPT10PyhlLmxvY2FsP0xUZTpOVGUpKGUpOihlLmxvY2FsP1ZUZTpCVGUpKGUsaSx0KSl9LGF0dHJUd2VlbjpmdW5jdGlvbihuLHQpe3ZhciBlPSJhdHRyLiIrbjtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9UmQobik7cmV0dXJuIHRoaXMudHdlZW4oZSwoaS5sb2NhbD9HVGU6V1RlKShpLHQpKX0sc3R5bGU6ZnVuY3Rpb24obix0LGUpe3ZhciBpPSJ0cmFuc2Zvcm0iPT0obis9IiIpP3VMOl9EO3JldHVybiBudWxsPT10P3RoaXMuc3R5bGVUd2VlbihuLGZ1bmN0aW9uKG4sdCl7dmFyIGUsaSxyO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVp1KHRoaXMsbikscz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxadSh0aGlzLG4pKTtyZXR1cm4gbz09PXM/bnVsbDpvPT09ZSYmcz09PWk/cjpyPXQoZT1vLGk9cyl9fShuLGkpKS5vbigiZW5kLnN0eWxlLiIrbixPSyhuKSk6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0LGUpe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1adSh0aGlzLG4pLGE9ZSh0aGlzKSxsPWErIiI7cmV0dXJuIG51bGw9PWEmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGw9YT1adSh0aGlzLG4pKSxzPT09bD9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fShuLGkscjAodGhpcywic3R5bGUuIituLHQpKSkuZWFjaChmdW5jdGlvbihuLHQpe3ZhciBlLGkscixhLG89InN0eWxlLiIrdCxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPW1zKHRoaXMsbiksYz1sLm9uLGQ9bnVsbD09bC52YWx1ZVtvXT9hfHwoYT1PSyh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PWQpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKHMscj1kKSxsLm9uPWl9fSh0aGlzLl9pZCxuKSk6dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0LGUpe3ZhciBpLG8scj1lKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPVp1KHRoaXMsbik7cmV0dXJuIHM9PT1yP251bGw6cz09PWk/bzpvPXQoaT1zLGUpfX0obixpLHQpLGUpLm9uKCJlbmQuc3R5bGUuIituLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLGZ1bmN0aW9uKG4sdCxlKXt2YXIgaSxyO2Z1bmN0aW9uIG8oKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PXImJihpPShyPXMpJiZmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19KG4scyxlKSksaX1yZXR1cm4gby5fdmFsdWU9dCxvfShuLHQsZT8/IiIpKX0sdGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX0ocjAodGhpcywidGV4dCIsbikpOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19KG51bGw9PW4/IiI6bisiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24obil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LGZ1bmN0aW9uKG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PW4uY2FsbCh0aGlzLHQpfX0ocikpLHR9cmV0dXJuIGkuX3ZhbHVlPW4saX0obikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbihuLHQpe3ZhciBlPXRoaXMuX2lkO2lmKG4rPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBzLGk9aG8odGhpcy5ub2RlKCksZSkudHdlZW4scj0wLG89aS5sZW5ndGg7cjxvOysrcilpZigocz1pW3JdKS5uYW1lPT09bilyZXR1cm4gcy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT10P2tUZTpGVGUpKGUsbix0KSl9LGRlbGF5OmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/cVRlOllUZSkodCxuKSk6aG8odGhpcy5ub2RlKCksdCkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/WFRlOlFUZSkodCxuKSk6aG8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uKG4sdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe21zKHRoaXMsbikuZWFzZT10fX0odCxuKSk6aG8odGhpcy5ub2RlKCksdCkuZWFzZX0sZW5kOmZ1bmN0aW9uKCl7dmFyIG4sdCxlPXRoaXMsaT1lLl9pZCxyPWUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLHMpe3ZhciBhPXt2YWx1ZTpzfSxsPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0tciYmbygpfX07ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9bXModGhpcyxpKSxkPWMub247ZCE9PW4mJigodD0obj1kKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2goYSksdC5fLmludGVycnVwdC5wdXNoKGEpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX19O3ZhciBiTD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24obil7cmV0dXJuKChuKj0yKTw9MT9uKm4qbjoobi09MikqbipuKzIpLzJ9fTtmdW5jdGlvbiBwRGUobix0KXtmb3IodmFyIGU7IShlPW4uX190cmFuc2l0aW9uKXx8IShlPWVbdF0pOylpZighKG49bi5wYXJlbnROb2RlKSlyZXR1cm4gYkwudGltZT1pMCgpLGJMO3JldHVybiBlfWZ1bmN0aW9uIHZMKG4pe3JldHVybnt0eXBlOm59fVBkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeyFmdW5jdGlvbihuLHQpe3ZhciBpLHIscyxlPW4uX190cmFuc2l0aW9uLG89ITA7aWYoZSl7Zm9yKHMgaW4gdD1udWxsPT10P251bGw6dCsiIixlKShpPWVbc10pLm5hbWU9PT10PyhyPWkuc3RhdGU+aEQmJmkuc3RhdGU8Z0QsaS5zdGF0ZT1MeSxpLnRpbWVyLnN0b3AoKSxpLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18saS5pbmRleCxpLmdyb3VwKSxkZWxldGUgZVtzXSk6bz0hMTtvJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fSh0aGlzLG4pfSl9LFBkLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKG4pe3ZhciB0LGU7biBpbnN0YW5jZW9mIEtvPyh0PW4uX2lkLG49bi5fbmFtZSk6KHQ9YkQoKSwoZT1iTCkudGltZT1pMCgpLG49bnVsbD09bj9udWxsOm4rIiIpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGwscz1pW29dLGE9cy5sZW5ndGgsYz0wO2M8YTsrK2MpKGw9c1tjXSkmJkp1KGwsbix0LGMscyxlfHxwRGUobCx0KSk7cmV0dXJuIG5ldyBLbyhpLHRoaXMuX3BhcmVudHMsbix0KX0sWyJ3IiwiZSJdLm1hcCh2TCksWyJuIiwicyJdLm1hcCh2TCksWyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAodkwpLE1hdGg7dmFyIF9hPSIkIjtmdW5jdGlvbiB5RCgpe31mdW5jdGlvbiBqSyhuLHQpe3ZhciBlPW5ldyB5RDtpZihuIGluc3RhbmNlb2YgeUQpbi5lYWNoKGZ1bmN0aW9uKGEsbCl7ZS5zZXQobCxhKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIG8saT0tMSxyPW4ubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK2k8cjspZS5zZXQoaSxuW2ldKTtlbHNlIGZvcig7KytpPHI7KWUuc2V0KHQobz1uW2ldLGksbiksbyl9ZWxzZSBpZihuKWZvcih2YXIgcyBpbiBuKWUuc2V0KHMsbltzXSk7cmV0dXJuIGV9ZnVuY3Rpb24geEQoKXt9eUQucHJvdG90eXBlPWpLLnByb3RvdHlwZT17Y29uc3RydWN0b3I6eUQsaGFzOmZ1bmN0aW9uKG4pe3JldHVybiBfYStuIGluIHRoaXN9LGdldDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpc1tfYStuXX0sc2V0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXNbX2Erbl09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9X2ErbjtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIG4gaW4gdGhpcyluWzBdPT09X2EmJmRlbGV0ZSB0aGlzW25dfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIG49W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PV9hJiZuLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIG59LHZhbHVlczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1fYSYmbi5wdXNoKHRoaXNbdF0pO3JldHVybiBufSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIG49W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PV9hJiZuLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gbn0sc2l6ZTpmdW5jdGlvbigpe3ZhciBuPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PV9hJiYrK247cmV0dXJuIG59LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpaWYoblswXT09PV9hKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1fYSYmbih0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTt2YXIgV2Y9aksucHJvdG90eXBlO2Z1bmN0aW9uIHFmKG4sdCl7aWYoKGU9KG49dD9uLnRvRXhwb25lbnRpYWwodC0xKTpuLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBlLGk9bi5zbGljZSgwLGUpO3JldHVybltpLmxlbmd0aD4xP2lbMF0raS5zbGljZSgyKTppLCtuLnNsaWNlKGUrMSldfWZ1bmN0aW9uIEdjKG4pe3JldHVybihuPXFmKE1hdGguYWJzKG4pKSk/blsxXTpOYU59eEQucHJvdG90eXBlPWZ1bmN0aW9uKG4sdCl7dmFyIGU9bmV3IHhEO2lmKG4gaW5zdGFuY2VvZiB4RCluLmVhY2goZnVuY3Rpb24obyl7ZS5hZGQobyl9KTtlbHNlIGlmKG4pe3ZhciBpPS0xLHI9bi5sZW5ndGg7aWYobnVsbD09dClmb3IoOysraTxyOyllLmFkZChuW2ldKTtlbHNlIGZvcig7KytpPHI7KWUuYWRkKHQobltpXSxpLG4pKX1yZXR1cm4gZX0ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4RCxoYXM6V2YuaGFzLGFkZDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpc1tfYSsobis9IiIpXT1uLHRoaXN9LHJlbW92ZTpXZi5yZW1vdmUsY2xlYXI6V2YuY2xlYXIsdmFsdWVzOldmLmtleXMsc2l6ZTpXZi5zaXplLGVtcHR5OldmLmVtcHR5LGVhY2g6V2YuZWFjaH0sTWF0aCxNYXRoLnNxcnQoNSk7dmFyIHlMLHhEZT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiAkdShuKXtpZighKHQ9eERlLmV4ZWMobikpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrbik7dmFyIHQ7cmV0dXJuIG5ldyBDRCh7ZmlsbDp0WzFdLGFsaWduOnRbMl0sc2lnbjp0WzNdLHN5bWJvbDp0WzRdLHplcm86dFs1XSx3aWR0aDp0WzZdLGNvbW1hOnRbN10scHJlY2lzaW9uOnRbOF0mJnRbOF0uc2xpY2UoMSksdHJpbTp0WzldLHR5cGU6dFsxMF19KX1mdW5jdGlvbiBDRChuKXt0aGlzLmZpbGw9dm9pZCAwPT09bi5maWxsPyIgIjpuLmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT1uLmFsaWduPyI+IjpuLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1uLnNpZ24/Ii0iOm4uc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1uLnN5bWJvbD8iIjpuLnN5bWJvbCsiIix0aGlzLnplcm89ISFuLnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT1uLndpZHRoP3ZvaWQgMDorbi53aWR0aCx0aGlzLmNvbW1hPSEhbi5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1uLnByZWNpc2lvbj92b2lkIDA6K24ucHJlY2lzaW9uLHRoaXMudHJpbT0hIW4udHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09bi50eXBlPyIiOm4udHlwZSsiIn1mdW5jdGlvbiB4TChuLHQpe3ZhciBlPXFmKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9JHUucHJvdG90eXBlPUNELnByb3RvdHlwZSxDRC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgQ0w9eyIlIjpmdW5jdGlvbihuLHQpe3JldHVybigxMDAqbikudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZChuKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gbisiIn0sZDpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5hYnMobj1NYXRoLnJvdW5kKG4pKT49MWUyMT9uLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6bi50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9GaXhlZCh0KX0sZzpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHhMKDEwMCpuLHQpfSxyOnhMLHM6ZnVuY3Rpb24obix0KXt2YXIgZT1xZihuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdLG89ci0oeUw9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Ioci8zKSkpKSsxLHM9aS5sZW5ndGg7cmV0dXJuIG89PT1zP2k6bz5zP2krbmV3IEFycmF5KG8tcysxKS5qb2luKCIwIik6bz4wP2kuc2xpY2UoMCxvKSsiLiIraS5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStxZihuLE1hdGgubWF4KDAsdCtvLTEpKVswXX0sWDpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZChuKS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBNTChuKXtyZXR1cm4gbn12YXIgTUQsUXIsd0QsS0s9QXJyYXkucHJvdG90eXBlLm1hcCxKSz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBybCgpe3JldHVybiBNYXRoLnJhbmRvbSgpfU1EPWZ1bmN0aW9uKG4pe3ZhciB0PXZvaWQgMD09PW4uZ3JvdXBpbmd8fHZvaWQgMD09PW4udGhvdXNhbmRzP01MOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7Zm9yKHZhciByPWUubGVuZ3RoLG89W10scz0wLGE9blswXSxsPTA7cj4wJiZhPjAmJihsK2ErMT5pJiYoYT1NYXRoLm1heCgxLGktbCkpLG8ucHVzaChlLnN1YnN0cmluZyhyLT1hLHIrYSkpLCEoKGwrPWErMSk+aSkpOylhPW5bcz0ocysxKSVuLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fShLSy5jYWxsKG4uZ3JvdXBpbmcsTnVtYmVyKSxuLnRob3VzYW5kcysiIiksZT12b2lkIDA9PT1uLmN1cnJlbmN5PyIiOm4uY3VycmVuY3lbMF0rIiIsaT12b2lkIDA9PT1uLmN1cnJlbmN5PyIiOm4uY3VycmVuY3lbMV0rIiIscj12b2lkIDA9PT1uLmRlY2ltYWw/Ii4iOm4uZGVjaW1hbCsiIixvPXZvaWQgMD09PW4ubnVtZXJhbHM/TUw6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bK2VdfSl9fShLSy5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSkscz12b2lkIDA9PT1uLnBlcmNlbnQ/IiUiOm4ucGVyY2VudCsiIixhPXZvaWQgMD09PW4ubWludXM/Ii0iOm4ubWludXMrIiIsbD12b2lkIDA9PT1uLm5hbj8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKHUpe3ZhciBwPSh1PSR1KHUpKS5maWxsLGY9dS5hbGlnbixtPXUuc2lnbixiPXUuc3ltYm9sLE09dS56ZXJvLHk9dS53aWR0aCx4PXUuY29tbWEsUj11LnByZWNpc2lvbixBPXUudHJpbSxWPXUudHlwZTsibiI9PT1WPyh4PSEwLFY9ImciKTpDTFtWXXx8KHZvaWQgMD09PVImJihSPTEyKSxBPSEwLFY9ImciKSwoTXx8IjAiPT09cCYmIj0iPT09ZikmJihNPSEwLHA9IjAiLGY9Ij0iKTt2YXIgdGU9IiQiPT09Yj9lOiIjIj09PWImJi9bYm94WF0vLnRlc3QoVik/IjAiK1YudG9Mb3dlckNhc2UoKToiIixLPSIkIj09PWI/aTovWyVwXS8udGVzdChWKT9zOiIiLHhlPUNMW1ZdLFhlPS9bZGVmZ3BycyVdLy50ZXN0KFYpO2Z1bmN0aW9uIERlKEQpe3ZhciBmZSxiZSxuZSxyZT10ZSxjZT1LO2lmKCJjIj09PVYpY2U9eGUoRCkrY2UsRD0iIjtlbHNle3ZhciBkZT0oRD0rRCk8MHx8MS9EPDA7aWYoRD1pc05hTihEKT9sOnhlKE1hdGguYWJzKEQpLFIpLEEmJihEPWZ1bmN0aW9uKG4pe2U6Zm9yKHZhciByLHQ9bi5sZW5ndGgsZT0xLGk9LTE7ZTx0OysrZSlzd2l0Y2gobltlXSl7Y2FzZSIuIjppPXI9ZTticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1lKSxyPWU7YnJlYWs7ZGVmYXVsdDppZighK25bZV0pYnJlYWsgZTtpPjAmJihpPTApfXJldHVybiBpPjA/bi5zbGljZSgwLGkpK24uc2xpY2UocisxKTpufShEKSksZGUmJjA9PStEJiYiKyIhPT1tJiYoZGU9ITEpLHJlPShkZT8iKCI9PT1tP206YToiLSI9PT1tfHwiKCI9PT1tPyIiOm0pK3JlLGNlPSgicyI9PT1WP0pLWzgreUwvM106IiIpK2NlKyhkZSYmIigiPT09bT8iKSI6IiIpLFhlKWZvcihmZT0tMSxiZT1ELmxlbmd0aDsrK2ZlPGJlOylpZig0OD4obmU9RC5jaGFyQ29kZUF0KGZlKSl8fG5lPjU3KXtjZT0oNDY9PT1uZT9yK0Quc2xpY2UoZmUrMSk6RC5zbGljZShmZSkpK2NlLEQ9RC5zbGljZSgwLGZlKTticmVha319eCYmIU0mJihEPXQoRCwxLzApKTt2YXIgcGU9cmUubGVuZ3RoK0QubGVuZ3RoK2NlLmxlbmd0aCxqZT1wZTx5P25ldyBBcnJheSh5LXBlKzEpLmpvaW4ocCk6IiI7c3dpdGNoKHgmJk0mJihEPXQoamUrRCxqZS5sZW5ndGg/eS1jZS5sZW5ndGg6MS8wKSxqZT0iIiksZil7Y2FzZSI8IjpEPXJlK0QrY2UramU7YnJlYWs7Y2FzZSI9IjpEPXJlK2plK0QrY2U7YnJlYWs7Y2FzZSJeIjpEPWplLnNsaWNlKDAscGU9amUubGVuZ3RoPj4xKStyZStEK2NlK2plLnNsaWNlKHBlKTticmVhaztkZWZhdWx0OkQ9amUrcmUrRCtjZX1yZXR1cm4gbyhEKX1yZXR1cm4gUj12b2lkIDA9PT1SPzY6L1tncHJzXS8udGVzdChWKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLFIpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLFIpKSxEZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB1KyIifSxEZX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHUscCl7dmFyIGY9YygoKHU9JHUodSkpLnR5cGU9ImYiLHUpKSxtPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEdjKHApLzMpKSksYj1NYXRoLnBvdygxMCwtbSksTT1KS1s4K20vM107cmV0dXJuIGZ1bmN0aW9uKHkpe3JldHVybiBmKGIqeSkrTX19fX0oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pLFFyPU1ELmZvcm1hdCx3RD1NRC5mb3JtYXRQcmVmaXgsZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkscil7cmV0dXJuIGk9bnVsbD09aT8wOitpLHI9bnVsbD09cj8xOityLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhyPWksaT0wKTpyLT1pLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSpyK2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KHJsKTt2YXIgREw9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkscil7dmFyIG8scztyZXR1cm4gaT1udWxsPT1pPzA6K2kscj1udWxsPT1yPzE6K3IsZnVuY3Rpb24oKXt2YXIgYTtpZihudWxsIT1vKWE9byxvPW51bGw7ZWxzZSBkb3tvPTIqdCgpLTEsYT0yKnQoKS0xLHM9bypvK2EqYX13aGlsZSghc3x8cz4xKTtyZXR1cm4gaStyKmEqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHMpL3MpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShybCksSUw9KGZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZSgpe3ZhciBpPURMLnNvdXJjZSh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGkoKSl9fXJldHVybiBlLnNvdXJjZT1uLGV9KHJsKSxmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAsbz0wO288aTsrK28pcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShybCkpO2Z1bmN0aW9uIFFzKG4sdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShuKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKG4pfXJldHVybiB0aGlzfShmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7dmFyIHI9SUwuc291cmNlKHQpKGkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByKCkvaX19cmV0dXJuIGUuc291cmNlPW4sZX0pKHJsKSxmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShybCk7dmFyIGVKPUFycmF5LnByb3RvdHlwZSx6eT1lSi5tYXAsWWY9ZUouc2xpY2U7ZnVuY3Rpb24gQUwobil7cmV0dXJuK259dmFyIG5KPVswLDFdO2Z1bmN0aW9uIFpzKG4pe3JldHVybiBufWZ1bmN0aW9uIFJMKG4sdCl7cmV0dXJuKHQtPW49K24pP2Z1bmN0aW9uKGUpe3JldHVybihlLW4pL3R9OmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX0oaXNOYU4odCk/TmFOOi41KX1mdW5jdGlvbiBpSihuKXt2YXIgaSx0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiB0PmUmJihpPXQsdD1lLGU9aSksZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxyKSl9fWZ1bmN0aW9uIFREZShuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0sbz10WzBdLHM9dFsxXTtyZXR1cm4gcjxpPyhpPVJMKHIsaSksbz1lKHMsbykpOihpPVJMKGksciksbz1lKG8scykpLGZ1bmN0aW9uKGEpe3JldHVybiBvKGkoYSkpfX1mdW5jdGlvbiBERGUobix0LGUpe3ZhciBpPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9LTE7Zm9yKG5baV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylyW3NdPVJMKG5bc10sbltzKzFdKSxvW3NdPWUodFtzXSx0W3MrMV0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgbD1IYyhuLGEsMSxpKS0xO3JldHVybiBvW2xdKHJbbF0oYSkpfX1mdW5jdGlvbiBlcChuLHQpe3JldHVybiB0LmRvbWFpbihuLmRvbWFpbigpKS5yYW5nZShuLnJhbmdlKCkpLmludGVycG9sYXRlKG4uaW50ZXJwb2xhdGUoKSkuY2xhbXAobi5jbGFtcCgpKS51bmtub3duKG4udW5rbm93bigpKX1mdW5jdGlvbiBVeSgpe3ZhciBpLHIsbyxhLGwsYyxuPW5KLHQ9bkosZT1VZixzPVpzO2Z1bmN0aW9uIGQoKXtyZXR1cm4gYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk+Mj9ERGU6VERlLGw9Yz1udWxsLHV9ZnVuY3Rpb24gdShwKXtyZXR1cm4gaXNOYU4ocD0rcCk/bzoobHx8KGw9YShuLm1hcChpKSx0LGUpKSkoaShzKHApKSl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKHApe3JldHVybiBzKHIoKGN8fChjPWEodCxuLm1hcChpKSxCbykpKShwKSkpfSx1LmRvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj16eS5jYWxsKHAsQUwpLHM9PT1ac3x8KHM9aUoobikpLGQoKSk6bi5zbGljZSgpfSx1LnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVlmLmNhbGwocCksZCgpKTp0LnNsaWNlKCl9LHUucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gdD1ZZi5jYWxsKHApLGU9bEwsZCgpfSx1LmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXA/aUoobik6WnMsdSk6cyE9PVpzfSx1LmludGVycG9sYXRlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXAsZCgpKTplfSx1LnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89cCx1KTpvfSxmdW5jdGlvbihwLGYpe3JldHVybiBpPXAscj1mLGQoKX19ZnVuY3Rpb24gankobix0KXtyZXR1cm4gVXkoKShuLHQpfWZ1bmN0aW9uIFdsKCl7dmFyIG49ankoWnMsWnMpO3JldHVybiBuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZXAobixXbCgpKX0sUXMuYXBwbHkobixhcmd1bWVudHMpLGZ1bmN0aW9uKG4pe3ZhciB0PW4uZG9tYWluO3JldHVybiBuLnRpY2tzPWZ1bmN0aW9uKGUpe3ZhciBpPXQoKTtyZXR1cm4gTXkoaVswXSxpW2kubGVuZ3RoLTFdLGU/PzEwKX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsaSl7dmFyIHI9dCgpO3JldHVybiBmdW5jdGlvbihuLHQsZSxpKXt2YXIgbyxyPUFkKG4sdCxlKTtzd2l0Y2goKGk9JHUoaT8/IixmIikpLnR5cGUpe2Nhc2UicyI6dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpO3JldHVybiBudWxsPT1pLnByZWNpc2lvbiYmIWlzTmFOKG89ZnVuY3Rpb24obix0KXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihHYyh0KS8zKSkpLUdjKE1hdGguYWJzKG4pKSl9KHIscykpJiYoaS5wcmVjaXNpb249byksd0QoaSxzKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsPT1pLnByZWNpc2lvbiYmIWlzTmFOKG89ZnVuY3Rpb24obix0KXtyZXR1cm4gbj1NYXRoLmFicyhuKSx0PU1hdGguYWJzKHQpLW4sTWF0aC5tYXgoMCxHYyh0KS1HYyhuKSkrMX0ocixNYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyh0KSkpKSYmKGkucHJlY2lzaW9uPW8tKCJlIj09PWkudHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsPT1pLnByZWNpc2lvbiYmIWlzTmFOKG89ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubWF4KDAsLUdjKE1hdGguYWJzKG4pKSl9KHIpKSYmKGkucHJlY2lzaW9uPW8tMiooIiUiPT09aS50eXBlKSl9cmV0dXJuIFFyKGkpfShyWzBdLHJbci5sZW5ndGgtMV0sZT8/MTAsaSl9LG4ubmljZT1mdW5jdGlvbihlKXtudWxsPT1lJiYoZT0xMCk7dmFyIGwsaT10KCkscj0wLG89aS5sZW5ndGgtMSxzPWlbcl0sYT1pW29dO3JldHVybiBhPHMmJihsPXMscz1hLGE9bCxsPXIscj1vLG89bCksKGw9WmcocyxhLGUpKT4wP2w9Wmcocz1NYXRoLmZsb29yKHMvbCkqbCxhPU1hdGguY2VpbChhL2wpKmwsZSk6bDwwJiYobD1aZyhzPU1hdGguY2VpbChzKmwpL2wsYT1NYXRoLmZsb29yKGEqbCkvbCxlKSksbD4wPyhpW3JdPU1hdGguZmxvb3Iocy9sKSpsLGlbb109TWF0aC5jZWlsKGEvbCkqbCx0KGkpKTpsPDAmJihpW3JdPU1hdGguY2VpbChzKmwpL2wsaVtvXT1NYXRoLmZsb29yKGEqbCkvbCx0KGkpKSxufSxufShuKX1mdW5jdGlvbiBTRChuLHQpe3ZhciBzLGU9MCxpPShuPW4uc2xpY2UoKSkubGVuZ3RoLTEscj1uW2VdLG89bltpXTtyZXR1cm4gbzxyJiYocz1lLGU9aSxpPXMscz1yLHI9byxvPXMpLG5bZV09dC5mbG9vcihyKSxuW2ldPXQuY2VpbChvKSxufWZ1bmN0aW9uIHJKKG4pe3JldHVybiBNYXRoLmxvZyhuKX1mdW5jdGlvbiBvSihuKXtyZXR1cm4gTWF0aC5leHAobil9ZnVuY3Rpb24gSURlKG4pe3JldHVybi1NYXRoLmxvZygtbil9ZnVuY3Rpb24gQURlKG4pe3JldHVybi1NYXRoLmV4cCgtbil9ZnVuY3Rpb24gUkRlKG4pe3JldHVybiBpc0Zpbml0ZShuKT8rKCIxZSIrbik6bjwwPzA6bn1mdW5jdGlvbiBzSihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLW4oLXQpfX1mdW5jdGlvbiBHeSgpe3ZhciBuPWZ1bmN0aW9uKG4pe3ZhciByLG8sdD1uKHJKLG9KKSxlPXQuZG9tYWluLGk9MTA7ZnVuY3Rpb24gcygpe3JldHVybiByPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09TWF0aC5FP01hdGgubG9nOjEwPT09biYmTWF0aC5sb2cxMHx8Mj09PW4mJk1hdGgubG9nMnx8KG49TWF0aC5sb2cobiksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL259KX0oaSksbz1mdW5jdGlvbihuKXtyZXR1cm4gMTA9PT1uP1JEZTpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX0oaSksZSgpWzBdPDA/KHI9c0oociksbz1zSihvKSxuKElEZSxBRGUpKTpuKHJKLG9KKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2EscygpKTppfSx0LmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShhKSxzKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbihhKXt2YXIgdSxsPWUoKSxjPWxbMF0sZD1sW2wubGVuZ3RoLTFdOyh1PWQ8YykmJihwPWMsYz1kLGQ9cCk7dmFyIG0sYixNLHA9cihjKSxmPXIoZCkseT1udWxsPT1hPzEwOithLHg9W107aWYoIShpJTEpJiZmLXA8eSl7aWYocD1NYXRoLnJvdW5kKHApLTEsZj1NYXRoLnJvdW5kKGYpKzEsYz4wKXtmb3IoO3A8ZjsrK3ApZm9yKGI9MSxtPW8ocCk7YjxpOysrYilpZighKChNPW0qYik8Yykpe2lmKE0+ZClicmVhazt4LnB1c2goTSl9fWVsc2UgZm9yKDtwPGY7KytwKWZvcihiPWktMSxtPW8ocCk7Yj49MTstLWIpaWYoISgoTT1tKmIpPGMpKXtpZihNPmQpYnJlYWs7eC5wdXNoKE0pfX1lbHNlIHg9TXkocCxmLE1hdGgubWluKGYtcCx5KSkubWFwKG8pO3JldHVybiB1P3gucmV2ZXJzZSgpOnh9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihhLGwpe2lmKG51bGw9PWwmJihsPTEwPT09aT8iLjBlIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBsJiYobD1RcihsKSksYT09PTEvMClyZXR1cm4gbDtudWxsPT1hJiYoYT0xMCk7dmFyIGM9TWF0aC5tYXgoMSxpKmEvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciB1PWQvbyhNYXRoLnJvdW5kKHIoZCkpKTtyZXR1cm4gdSppPGktLjUmJih1Kj1pKSx1PD1jP2woZCk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShTRChlKCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBvKE1hdGguZmxvb3IocihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBvKE1hdGguY2VpbChyKGEpKSl9fSkpfSx0fShVeSgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGVwKG4sR3koKSkuYmFzZShuLmJhc2UoKSl9LFFzLmFwcGx5KG4sYXJndW1lbnRzKSxufXZhciBrTD1uZXcgRGF0ZSxGTD1uZXcgRGF0ZTtmdW5jdGlvbiBpcihuLHQsZSxpKXtmdW5jdGlvbiByKG8pe3JldHVybiBuKG89MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiByLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBuKG89bmV3IERhdGUoK28pKSxvfSxyLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIG4obz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksbihvKSxvfSxyLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBzPXIobyksYT1yLmNlaWwobyk7cmV0dXJuIG8tczxhLW8/czphfSxyLm9mZnNldD1mdW5jdGlvbihvLHMpe3JldHVybiB0KG89bmV3IERhdGUoK28pLG51bGw9PXM/MTpNYXRoLmZsb29yKHMpKSxvfSxyLnJhbmdlPWZ1bmN0aW9uKG8scyxhKXt2YXIgYyxsPVtdO2lmKG89ci5jZWlsKG8pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShvPHMmJmE+MCkpcmV0dXJuIGw7ZG97bC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8sYSksbihvKX13aGlsZShjPG8mJm88cyk7cmV0dXJuIGx9LHIuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBpcihmdW5jdGlvbihzKXtpZihzPj1zKWZvcig7bihzKSwhbyhzKTspcy5zZXRUaW1lKHMtMSl9LGZ1bmN0aW9uKHMsYSl7aWYocz49cylpZihhPDApZm9yKDsrK2E8PTA7KWZvcig7dChzLC0xKSwhbyhzKTspO2Vsc2UgZm9yKDstLWE+PTA7KWZvcig7dChzLDEpLCFvKHMpOyk7fSl9LGUmJihyLmNvdW50PWZ1bmN0aW9uKG8scyl7cmV0dXJuIGtMLnNldFRpbWUoK28pLEZMLnNldFRpbWUoK3MpLG4oa0wpLG4oRkwpLE1hdGguZmxvb3IoZShrTCxGTCkpfSxyLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksaXNGaW5pdGUobykmJm8+MD9vPjE/ci5maWx0ZXIoaT9mdW5jdGlvbihzKXtyZXR1cm4gaShzKSVvPT0wfTpmdW5jdGlvbihzKXtyZXR1cm4gci5jb3VudCgwLHMpJW89PTB9KTpyOm51bGx9KSxyfXZhciBFRD1pcihmdW5jdGlvbigpe30sZnVuY3Rpb24obix0KXtuLnNldFRpbWUoK24rdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQtbn0pO0VELmV2ZXJ5PWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGguZmxvb3IobiksaXNGaW5pdGUobikmJm4+MD9uPjE/aXIoZnVuY3Rpb24odCl7dC5zZXRUaW1lKE1hdGguZmxvb3IodC9uKSpuKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpuKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9ufSk6RUQ6bnVsbH07dmFyIFREPUVELGtkPTZlNCxJRD02MDQ4ZTUsbEo9aXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzFlMyp0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS8xZTN9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX0pLEFEPWxKLGRKPWlyKGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktMWUzKm4uZ2V0U2Vjb25kcygpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUoK24rdCprZCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikva2R9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1pbnV0ZXMoKX0pLExMPWRKLHVKPWlyKGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktMWUzKm4uZ2V0U2Vjb25kcygpLW4uZ2V0TWludXRlcygpKmtkKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUoK24rMzZlNSp0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS8zNmU1fSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRIb3VycygpfSksQkw9dUoscEo9aXIoZnVuY3Rpb24obil7bi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbi0odC5nZXRUaW1lem9uZU9mZnNldCgpLW4uZ2V0VGltZXpvbmVPZmZzZXQoKSkqa2QpLzg2NGU1fSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXRlKCktMX0pLHMwPXBKO2Z1bmN0aW9uIFpmKG4pe3JldHVybiBpcihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1uKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmtkKS9JRH0pfXZhciBLZj1aZigwKSxhMD1aZigxKSx0cD0oWmYoMiksWmYoMyksWmYoNCkpLGJKPShaZig1KSxaZig2KSxpcihmdW5jdGlvbihuKXtuLnNldERhdGUoMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSsxMioodC5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKSl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSksVkw9YkosSEw9aXIoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtITC5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gaXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKSYmbj4wP2lyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvbikqbiksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSpuKX0pOm51bGx9O3ZhciBGZD1ITCx2Sj1pcihmdW5jdGlvbihuKXtuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRGF0ZShuLmdldFVUQ0RhdGUoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS84NjRlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRGF0ZSgpLTF9KSxSRD12SjtmdW5jdGlvbiBKZihuKXtyZXR1cm4gaXIoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctbiklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9JRH0pfXZhciBXeT1KZigwKSxsMD1KZigxKSxucD0oSmYoMiksSmYoMyksSmYoNCkpLHpMPShKZig1KSxKZig2KSxpcihmdW5jdGlvbihuKXtuLnNldFVUQ01vbnRoKDAsMSksbi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0Z1bGxZZWFyKG4uZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLW4uZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRnVsbFllYXIoKX0pKTt6TC5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gaXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKSYmbj4wP2lyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvbikqbiksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSpuKX0pOm51bGx9O3ZhciAkZj16TDtmdW5jdGlvbiBVTChuKXtpZigwPD1uLnkmJm4ueTwxMDApe3ZhciB0PW5ldyBEYXRlKC0xLG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCl9ZnVuY3Rpb24gakwobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZShEYXRlLlVUQygtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpO3JldHVybiB0LnNldFVUQ0Z1bGxZZWFyKG4ueSksdH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobi55LG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKSl9ZnVuY3Rpb24gcXkobix0LGUpe3JldHVybnt5Om4sbTp0LGQ6ZSxIOjAsTTowLFM6MCxMOjB9fXZhciBjMCxkMCxTSj17Ii0iOiIiLF86IiAiLDA6IjAifSxUbz0vXlxzKlxkKy8sJERlPS9eJS8sZUllPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBPaShuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiB0SWUobil7cmV0dXJuIG4ucmVwbGFjZShlSWUsIlxcJCYiKX1mdW5jdGlvbiBZeShuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAodEllKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gWHkobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gbkllKG4sdCxlKXt2YXIgaT1Uby5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi53PStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlJZShuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4udT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBySWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb0llKG4sdCxlKXt2YXIgaT1Uby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5WPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNJZShuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uVz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFSihuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSs0KSk7cmV0dXJuIGk/KG4ueT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUSihuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4ueT0raVswXSsoK2lbMF0+Njg/MTkwMDoyZTMpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFJZShuLHQsZSl7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLlo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxJZShuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4ucT0zKmlbMF0tMyxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjSWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLm09aVswXS0xLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERKKG4sdCxlKXt2YXIgaT1Uby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5kPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGRJZShuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJSihuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uSD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1SWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLk09K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcEllKG4sdCxlKXt2YXIgaT1Uby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5TPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGZJZShuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4uTD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBtSWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLkw9TWF0aC5mbG9vcihpWzBdLzFlMyksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaEllKG4sdCxlKXt2YXIgaT0kRGUuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/ZStpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBnSWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIGk/KG4uUT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBfSWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIGk/KG4ucz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBSihuLHQpe3JldHVybiBPaShuLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIGJJZShuLHQpe3JldHVybiBPaShuLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiB2SWUobix0KXtyZXR1cm4gT2kobi5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIHlJZShuLHQpe3JldHVybiBPaSgxK3MwLmNvdW50KEZkKG4pLG4pLHQsMyl9ZnVuY3Rpb24gRkoobix0KXtyZXR1cm4gT2kobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHhJZShuLHQpe3JldHVybiBGSihuLHQpKyIwMDAifWZ1bmN0aW9uIENJZShuLHQpe3JldHVybiBPaShuLmdldE1vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIE1JZShuLHQpe3JldHVybiBPaShuLmdldE1pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHdJZShuLHQpe3JldHVybiBPaShuLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIFNJZShuKXt2YXIgdD1uLmdldERheSgpO3JldHVybiAwPT09dD83OnR9ZnVuY3Rpb24gRUllKG4sdCl7cmV0dXJuIE9pKEtmLmNvdW50KEZkKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBOSihuKXt2YXIgdD1uLmdldERheSgpO3JldHVybiB0Pj00fHwwPT09dD90cChuKTp0cC5jZWlsKG4pfWZ1bmN0aW9uIFRJZShuLHQpe3JldHVybiBuPU5KKG4pLE9pKHRwLmNvdW50KEZkKG4pLG4pKyg0PT09RmQobikuZ2V0RGF5KCkpLHQsMil9ZnVuY3Rpb24gREllKG4pe3JldHVybiBuLmdldERheSgpfWZ1bmN0aW9uIElJZShuLHQpe3JldHVybiBPaShhMC5jb3VudChGZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gQUllKG4sdCl7cmV0dXJuIE9pKG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBSSWUobix0KXtyZXR1cm4gT2koKG49TkoobikpLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gUEllKG4sdCl7cmV0dXJuIE9pKG4uZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBPSWUobix0KXt2YXIgZT1uLmdldERheSgpO3JldHVybiBPaSgobj1lPj00fHwwPT09ZT90cChuKTp0cC5jZWlsKG4pKS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGtJZShuKXt2YXIgdD1uLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKHQ+MD8iLSI6KHQqPS0xLCIrIikpK09pKHQvNjB8MCwiMCIsMikrT2kodCU2MCwiMCIsMil9ZnVuY3Rpb24gUkoobix0KXtyZXR1cm4gT2kobi5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBGSWUobix0KXtyZXR1cm4gT2kobi5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gTkllKG4sdCl7cmV0dXJuIE9pKG4uZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBMSWUobix0KXtyZXR1cm4gT2koMStSRC5jb3VudCgkZihuKSxuKSx0LDMpfWZ1bmN0aW9uIExKKG4sdCl7cmV0dXJuIE9pKG4uZ2V0VVRDTWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBCSWUobix0KXtyZXR1cm4gTEoobix0KSsiMDAwIn1mdW5jdGlvbiBWSWUobix0KXtyZXR1cm4gT2kobi5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBISWUobix0KXtyZXR1cm4gT2kobi5nZXRVVENNaW51dGVzKCksdCwyKX1mdW5jdGlvbiB6SWUobix0KXtyZXR1cm4gT2kobi5nZXRVVENTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBVSWUobil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIGpJZShuLHQpe3JldHVybiBPaShXeS5jb3VudCgkZihuKS0xLG4pLHQsMil9ZnVuY3Rpb24gQkoobil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8MD09PXQ/bnAobik6bnAuY2VpbChuKX1mdW5jdGlvbiBHSWUobix0KXtyZXR1cm4gbj1CSihuKSxPaShucC5jb3VudCgkZihuKSxuKSsoND09PSRmKG4pLmdldFVUQ0RheSgpKSx0LDIpfWZ1bmN0aW9uIFdJZShuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBxSWUobix0KXtyZXR1cm4gT2kobDAuY291bnQoJGYobiktMSxuKSx0LDIpfWZ1bmN0aW9uIFlJZShuLHQpe3JldHVybiBPaShuLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gWEllKG4sdCl7cmV0dXJuIE9pKChuPUJKKG4pKS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFFJZShuLHQpe3JldHVybiBPaShuLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gWkllKG4sdCl7dmFyIGU9bi5nZXRVVENEYXkoKTtyZXR1cm4gT2koKG49ZT49NHx8MD09PWU/bnAobik6bnAuY2VpbChuKSkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBLSWUoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIFBKKCl7cmV0dXJuIiUifWZ1bmN0aW9uIE9KKG4pe3JldHVybitufWZ1bmN0aW9uIGtKKG4pe3JldHVybiBNYXRoLmZsb29yKCtuLzFlMyl9YzA9ZnVuY3Rpb24obil7dmFyIHQ9bi5kYXRlVGltZSxlPW4uZGF0ZSxpPW4udGltZSxyPW4ucGVyaW9kcyxvPW4uZGF5cyxzPW4uc2hvcnREYXlzLGE9bi5tb250aHMsbD1uLnNob3J0TW9udGhzLGM9WXkociksZD1YeShyKSx1PVl5KG8pLHA9WHkobyksZj1ZeShzKSxtPVh5KHMpLGI9WXkoYSksTT1YeShhKSx5PVl5KGwpLHg9WHkobCksUj17YTpmdW5jdGlvbih2ZSl7cmV0dXJuIHNbdmUuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHZlKXtyZXR1cm4gb1t2ZS5nZXREYXkoKV19LGI6ZnVuY3Rpb24odmUpe3JldHVybiBsW3ZlLmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHZlKXtyZXR1cm4gYVt2ZS5nZXRNb250aCgpXX0sYzpudWxsLGQ6QUosZTpBSixmOnhJZSxnOlJJZSxHOk9JZSxIOmJJZSxJOnZJZSxqOnlJZSxMOkZKLG06Q0llLE06TUllLHA6ZnVuY3Rpb24odmUpe3JldHVybiByWysodmUuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih2ZSl7cmV0dXJuIDErfn4odmUuZ2V0TW9udGgoKS8zKX0sUTpPSixzOmtKLFM6d0llLHU6U0llLFU6RUllLFY6VEllLHc6REllLFc6SUllLHg6bnVsbCxYOm51bGwseTpBSWUsWTpQSWUsWjprSWUsIiUiOlBKfSxBPXthOmZ1bmN0aW9uKHZlKXtyZXR1cm4gc1t2ZS5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odmUpe3JldHVybiBvW3ZlLmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih2ZSl7cmV0dXJuIGxbdmUuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odmUpe3JldHVybiBhW3ZlLmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpSSixlOlJKLGY6QkllLGc6WEllLEc6WkllLEg6RkllLEk6TkllLGo6TEllLEw6TEosbTpWSWUsTTpISWUscDpmdW5jdGlvbih2ZSl7cmV0dXJuIHJbKyh2ZS5nZXRVVENIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHZlKXtyZXR1cm4gMSt+fih2ZS5nZXRVVENNb250aCgpLzMpfSxROk9KLHM6a0osUzp6SWUsdTpVSWUsVTpqSWUsVjpHSWUsdzpXSWUsVzpxSWUseDpudWxsLFg6bnVsbCx5OllJZSxZOlFJZSxaOktJZSwiJSI6UEp9LFY9e2E6ZnVuY3Rpb24odmUsbXQsZnQpe3ZhciBvZT1mLmV4ZWMobXQuc2xpY2UoZnQpKTtyZXR1cm4gb2U/KHZlLnc9bVtvZVswXS50b0xvd2VyQ2FzZSgpXSxmdCtvZVswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHZlLG10LGZ0KXt2YXIgb2U9dS5leGVjKG10LnNsaWNlKGZ0KSk7cmV0dXJuIG9lPyh2ZS53PXBbb2VbMF0udG9Mb3dlckNhc2UoKV0sZnQrb2VbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih2ZSxtdCxmdCl7dmFyIG9lPXkuZXhlYyhtdC5zbGljZShmdCkpO3JldHVybiBvZT8odmUubT14W29lWzBdLnRvTG93ZXJDYXNlKCldLGZ0K29lWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odmUsbXQsZnQpe3ZhciBvZT1iLmV4ZWMobXQuc2xpY2UoZnQpKTtyZXR1cm4gb2U/KHZlLm09TVtvZVswXS50b0xvd2VyQ2FzZSgpXSxmdCtvZVswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHZlLG10LGZ0KXtyZXR1cm4geGUodmUsdCxtdCxmdCl9LGQ6REosZTpESixmOm1JZSxnOlRKLEc6RUosSDpJSixJOklKLGo6ZEllLEw6ZkllLG06Y0llLE06dUllLHA6ZnVuY3Rpb24odmUsbXQsZnQpe3ZhciBvZT1jLmV4ZWMobXQuc2xpY2UoZnQpKTtyZXR1cm4gb2U/KHZlLnA9ZFtvZVswXS50b0xvd2VyQ2FzZSgpXSxmdCtvZVswXS5sZW5ndGgpOi0xfSxxOmxJZSxROmdJZSxzOl9JZSxTOnBJZSx1OmlJZSxVOnJJZSxWOm9JZSx3Om5JZSxXOnNJZSx4OmZ1bmN0aW9uKHZlLG10LGZ0KXtyZXR1cm4geGUodmUsZSxtdCxmdCl9LFg6ZnVuY3Rpb24odmUsbXQsZnQpe3JldHVybiB4ZSh2ZSxpLG10LGZ0KX0seTpUSixZOkVKLFo6YUllLCIlIjpoSWV9O2Z1bmN0aW9uIHRlKHZlLG10KXtyZXR1cm4gZnVuY3Rpb24oZnQpe3ZhciB1dCxzbixDbixvZT1bXSxzdD0tMSxZZT0wLF90PXZlLmxlbmd0aDtmb3IoZnQgaW5zdGFuY2VvZiBEYXRlfHwoZnQ9bmV3IERhdGUoK2Z0KSk7KytzdDxfdDspMzc9PT12ZS5jaGFyQ29kZUF0KHN0KSYmKG9lLnB1c2godmUuc2xpY2UoWWUsc3QpKSxudWxsIT0oc249U0pbdXQ9dmUuY2hhckF0KCsrc3QpXSk/dXQ9dmUuY2hhckF0KCsrc3QpOnNuPSJlIj09PXV0PyIgIjoiMCIsKENuPW10W3V0XSkmJih1dD1DbihmdCxzbikpLG9lLnB1c2godXQpLFllPXN0KzEpO3JldHVybiBvZS5wdXNoKHZlLnNsaWNlKFllLHN0KSksb2Uuam9pbigiIil9fWZ1bmN0aW9uIEsodmUsbXQpe3JldHVybiBmdW5jdGlvbihmdCl7dmFyIFllLF90LG9lPXF5KDE5MDAsdm9pZCAwLDEpO2lmKHhlKG9lLHZlLGZ0Kz0iIiwwKSE9ZnQubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIG9lKXJldHVybiBuZXcgRGF0ZShvZS5RKTtpZigicyJpbiBvZSlyZXR1cm4gbmV3IERhdGUoMWUzKm9lLnMrKCJMImluIG9lP29lLkw6MCkpO2lmKG10JiYhKCJaImluIG9lKSYmKG9lLlo9MCksInAiaW4gb2UmJihvZS5IPW9lLkglMTIrMTIqb2UucCksdm9pZCAwPT09b2UubSYmKG9lLm09InEiaW4gb2U/b2UucTowKSwiViJpbiBvZSl7aWYob2UuVjwxfHxvZS5WPjUzKXJldHVybiBudWxsOyJ3ImluIG9lfHwob2Uudz0xKSwiWiJpbiBvZT8oX3Q9KFllPWpMKHF5KG9lLnksMCwxKSkpLmdldFVUQ0RheSgpLFllPV90PjR8fDA9PT1fdD9sMC5jZWlsKFllKTpsMChZZSksWWU9UkQub2Zmc2V0KFllLDcqKG9lLlYtMSkpLG9lLnk9WWUuZ2V0VVRDRnVsbFllYXIoKSxvZS5tPVllLmdldFVUQ01vbnRoKCksb2UuZD1ZZS5nZXRVVENEYXRlKCkrKG9lLncrNiklNyk6KF90PShZZT1VTChxeShvZS55LDAsMSkpKS5nZXREYXkoKSxZZT1fdD40fHwwPT09X3Q/YTAuY2VpbChZZSk6YTAoWWUpLFllPXMwLm9mZnNldChZZSw3KihvZS5WLTEpKSxvZS55PVllLmdldEZ1bGxZZWFyKCksb2UubT1ZZS5nZXRNb250aCgpLG9lLmQ9WWUuZ2V0RGF0ZSgpKyhvZS53KzYpJTcpfWVsc2UoIlciaW4gb2V8fCJVImluIG9lKSYmKCJ3ImluIG9lfHwob2Uudz0idSJpbiBvZT9vZS51JTc6IlciaW4gb2U/MTowKSxfdD0iWiJpbiBvZT9qTChxeShvZS55LDAsMSkpLmdldFVUQ0RheSgpOlVMKHF5KG9lLnksMCwxKSkuZ2V0RGF5KCksb2UubT0wLG9lLmQ9IlciaW4gb2U/KG9lLncrNiklNys3Km9lLlctKF90KzUpJTc6b2Uudys3Km9lLlUtKF90KzYpJTcpO3JldHVybiJaImluIG9lPyhvZS5IKz1vZS5aLzEwMHwwLG9lLk0rPW9lLlolMTAwLGpMKG9lKSk6VUwob2UpfX1mdW5jdGlvbiB4ZSh2ZSxtdCxmdCxvZSl7Zm9yKHZhciB1dCxzbixzdD0wLFllPW10Lmxlbmd0aCxfdD1mdC5sZW5ndGg7c3Q8WWU7KXtpZihvZT49X3QpcmV0dXJuLTE7aWYoMzc9PT0odXQ9bXQuY2hhckNvZGVBdChzdCsrKSkpe2lmKHV0PW10LmNoYXJBdChzdCsrKSwhKHNuPVZbdXQgaW4gU0o/bXQuY2hhckF0KHN0KyspOnV0XSl8fChvZT1zbih2ZSxmdCxvZSkpPDApcmV0dXJuLTF9ZWxzZSBpZih1dCE9ZnQuY2hhckNvZGVBdChvZSsrKSlyZXR1cm4tMX1yZXR1cm4gb2V9cmV0dXJuIFIueD10ZShlLFIpLFIuWD10ZShpLFIpLFIuYz10ZSh0LFIpLEEueD10ZShlLEEpLEEuWD10ZShpLEEpLEEuYz10ZSh0LEEpLHtmb3JtYXQ6ZnVuY3Rpb24odmUpe3ZhciBtdD10ZSh2ZSs9IiIsUik7cmV0dXJuIG10LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHZlfSxtdH0scGFyc2U6ZnVuY3Rpb24odmUpe3ZhciBtdD1LKHZlKz0iIiwhMSk7cmV0dXJuIG10LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHZlfSxtdH0sdXRjRm9ybWF0OmZ1bmN0aW9uKHZlKXt2YXIgbXQ9dGUodmUrPSIiLEEpO3JldHVybiBtdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB2ZX0sbXR9LHV0Y1BhcnNlOmZ1bmN0aW9uKHZlKXt2YXIgbXQ9Syh2ZSs9IiIsITApO3JldHVybiBtdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB2ZX0sbXR9fX0oe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KSxkMD1jMC5mb3JtYXQ7dmFyIFF5PTFlMyxaeT02MCpReSxLeT02MCpaeSxKeT0yNCpLeSxKSWU9NypKeSxVSj0zMCpKeSxxTD0zNjUqSnk7ZnVuY3Rpb24gJEllKG4pe3JldHVybiBuZXcgRGF0ZShuKX1mdW5jdGlvbiBlQWUobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlPytuOituZXcgRGF0ZSgrbil9ZnVuY3Rpb24gWUwobix0LGUsaSxyLG8scyxhLGwpe3ZhciBjPWp5KFpzLFpzKSxkPWMuaW52ZXJ0LHU9Yy5kb21haW4scD1sKCIuJUwiKSxmPWwoIjolUyIpLG09bCgiJUk6JU0iKSxiPWwoIiVJICVwIiksTT1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksUj1sKCIlWSIpLEE9W1tzLDEsUXldLFtzLDUsNSpReV0sW3MsMTUsMTUqUXldLFtzLDMwLDMwKlF5XSxbbywxLFp5XSxbbyw1LDUqWnldLFtvLDE1LDE1Klp5XSxbbywzMCwzMCpaeV0sW3IsMSxLeV0sW3IsMywzKkt5XSxbciw2LDYqS3ldLFtyLDEyLDEyKkt5XSxbaSwxLEp5XSxbaSwyLDIqSnldLFtlLDEsSkllXSxbdCwxLFVKXSxbdCwzLDMqVUpdLFtuLDEscUxdXTtmdW5jdGlvbiBWKEspe3JldHVybihzKEspPEs/cDpvKEspPEs/ZjpyKEspPEs/bTppKEspPEs/Yjp0KEspPEs/ZShLKTxLP006eTpuKEspPEs/eDpSKShLKX1mdW5jdGlvbiB0ZShLLHhlLFhlLERlKXtpZihudWxsPT1LJiYoSz0xMCksIm51bWJlciI9PXR5cGVvZiBLKXt2YXIgRD1NYXRoLmFicyhYZS14ZSkvSyxyZT1DeShmdW5jdGlvbihjZSl7cmV0dXJuIGNlWzJdfSkucmlnaHQoQSxEKTtyZT09PUEubGVuZ3RoPyhEZT1BZCh4ZS9xTCxYZS9xTCxLKSxLPW4pOnJlPyhEZT0ocmU9QVtEL0FbcmUtMV1bMl08QVtyZV1bMl0vRD9yZS0xOnJlXSlbMV0sSz1yZVswXSk6KERlPU1hdGgubWF4KEFkKHhlLFhlLEspLDEpLEs9YSl9cmV0dXJuIG51bGw9PURlP0s6Sy5ldmVyeShEZSl9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKEspe3JldHVybiBuZXcgRGF0ZShkKEspKX0sYy5kb21haW49ZnVuY3Rpb24oSyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dSh6eS5jYWxsKEssZUFlKSk6dSgpLm1hcCgkSWUpfSxjLnRpY2tzPWZ1bmN0aW9uKEsseGUpe3ZhciBjZSxYZT11KCksRGU9WGVbMF0sRD1YZVtYZS5sZW5ndGgtMV0scmU9RDxEZTtyZXR1cm4gcmUmJihjZT1EZSxEZT1ELEQ9Y2UpLGNlPShjZT10ZShLLERlLEQseGUpKT9jZS5yYW5nZShEZSxEKzEpOltdLHJlP2NlLnJldmVyc2UoKTpjZX0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKEsseGUpe3JldHVybiBudWxsPT14ZT9WOmwoeGUpfSxjLm5pY2U9ZnVuY3Rpb24oSyx4ZSl7dmFyIFhlPXUoKTtyZXR1cm4oSz10ZShLLFhlWzBdLFhlW1hlLmxlbmd0aC0xXSx4ZSkpP3UoU0QoWGUsSykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBlcChjLFlMKG4sdCxlLGkscixvLHMsYSxsKSl9LGN9ZnVuY3Rpb24gZW0oKXtyZXR1cm4gUXMuYXBwbHkoWUwoRmQsVkwsS2YsczAsQkwsTEwsQUQsVEQsZDApLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIFhMKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdTAobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1mdW5jdGlvbiAkeShuLHQpe3ZhciBlPXQsaT10LlIscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuUj1pLkwsZS5SJiYoZS5SLlU9ZSksaS5MPWV9ZnVuY3Rpb24gZXgobix0KXt2YXIgZT10LGk9dC5MLHI9ZS5VO3I/ci5MPT09ZT9yLkw9aTpyLlI9aTpuLl89aSxpLlU9cixlLlU9aSxlLkw9aS5SLGUuTCYmKGUuTC5VPWUpLGkuUj1lfWZ1bmN0aW9uIEdKKG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1cm4gbn1YTC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhMLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49R0oodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspZT09PShpPWUuVSkuTD8ocj1pLlIpJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLlImJigkeSh0aGlzLGUpLGU9KG49ZSkuVSksZS5DPSExLGkuQz0hMCxleCh0aGlzLGkpKToocj1pLkwpJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLkwmJihleCh0aGlzLGUpLGU9KG49ZSkuVSksZS5DPSExLGkuQz0hMCwkeSh0aGlzLGkpKSxlPW4uVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKG4pe24uTiYmKG4uTi5QPW4uUCksbi5QJiYobi5QLk49bi5OKSxuLk49bi5QPW51bGw7dmFyIGUsbyxzLHQ9bi5VLGk9bi5MLHI9bi5SO2lmKG89aT9yP0dKKHIpOmk6cix0P3QuTD09PW4/dC5MPW86dC5SPW86dGhpcy5fPW8saSYmcj8ocz1vLkMsby5DPW4uQyxvLkw9aSxpLlU9byxvIT09cj8odD1vLlUsby5VPW4uVSx0Lkw9bj1vLlIsby5SPXIsci5VPW8pOihvLlU9dCx0PW8sbj1vLlIpKToocz1uLkMsbj1vKSxuJiYobi5VPXQpLCFzKXtpZihuJiZuLkMpcmV0dXJuIHZvaWQobi5DPSExKTtkb3tpZihuPT09dGhpcy5fKWJyZWFrO2lmKG49PT10Lkwpe2lmKChlPXQuUikuQyYmKGUuQz0hMSx0LkM9ITAsJHkodGhpcyx0KSxlPXQuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLlJ8fCFlLlIuQykmJihlLkwuQz0hMSxlLkM9ITAsZXgodGhpcyxlKSxlPXQuUiksZS5DPXQuQyx0LkM9ZS5SLkM9ITEsJHkodGhpcyx0KSxuPXRoaXMuXzticmVha319ZWxzZSBpZigoZT10LkwpLkMmJihlLkM9ITEsdC5DPSEwLGV4KHRoaXMsdCksZT10LkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpeyghZS5MfHwhZS5MLkMpJiYoZS5SLkM9ITEsZS5DPSEwLCR5KHRoaXMsZSksZT10LkwpLGUuQz10LkMsdC5DPWUuTC5DPSExLGV4KHRoaXMsdCksbj10aGlzLl87YnJlYWt9ZS5DPSEwLG49dCx0PXQuVX13aGlsZSghbi5DKTtuJiYobi5DPSExKX19fTt2YXIgUUw9WEw7ZnVuY3Rpb24gcDAobix0LGUsaSl7dmFyIHI9W251bGwsbnVsbF0sbz1Eby5wdXNoKHIpLTE7cmV0dXJuIHIubGVmdD1uLHIucmlnaHQ9dCxlJiZ0eChyLG4sdCxlKSxpJiZ0eChyLHQsbixpKSxoc1tuLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxoc1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxyfWZ1bmN0aW9uIGYwKG4sdCxlKXt2YXIgaT1bdCxlXTtyZXR1cm4gaS5sZWZ0PW4saX1mdW5jdGlvbiB0eChuLHQsZSxpKXtuWzBdfHxuWzFdP24ubGVmdD09PWU/blsxXT1pOm5bMF09aTooblswXT1pLG4ubGVmdD10LG4ucmlnaHQ9ZSl9ZnVuY3Rpb24gaUFlKG4sdCxlLGkscil7dmFyIGIsbz1uWzBdLHM9blsxXSxhPW9bMF0sbD1vWzFdLHU9MCxwPTEsZj1zWzBdLWEsbT1zWzFdLWw7aWYoYj10LWEsZnx8IShiPjApKXtpZihiLz1mLGY8MCl7aWYoYjx1KXJldHVybjtiPHAmJihwPWIpfWVsc2UgaWYoZj4wKXtpZihiPnApcmV0dXJuO2I+dSYmKHU9Yil9aWYoYj1pLWEsZnx8IShiPDApKXtpZihiLz1mLGY8MCl7aWYoYj5wKXJldHVybjtiPnUmJih1PWIpfWVsc2UgaWYoZj4wKXtpZihiPHUpcmV0dXJuO2I8cCYmKHA9Yil9aWYoYj1lLWwsbXx8IShiPjApKXtpZihiLz1tLG08MCl7aWYoYjx1KXJldHVybjtiPHAmJihwPWIpfWVsc2UgaWYobT4wKXtpZihiPnApcmV0dXJuO2I+dSYmKHU9Yil9aWYoYj1yLWwsbXx8IShiPDApKXtpZihiLz1tLG08MCl7aWYoYj5wKXJldHVybjtiPnUmJih1PWIpfWVsc2UgaWYobT4wKXtpZihiPHUpcmV0dXJuO2I8cCYmKHA9Yil9cmV0dXJuISh1PjApJiYhKHA8MSl8fCh1PjAmJihuWzBdPVthK3UqZixsK3UqbV0pLHA8MSYmKG5bMV09W2ErcCpmLGwrcCptXSkpLCEwfX19fX1mdW5jdGlvbiByQWUobix0LGUsaSxyKXt2YXIgbz1uWzFdO2lmKG8pcmV0dXJuITA7dmFyIGIsTSxzPW5bMF0sYT1uLmxlZnQsbD1uLnJpZ2h0LGM9YVswXSxkPWFbMV0sdT1sWzBdLHA9bFsxXSxmPShjK3UpLzI7aWYocD09PWQpe2lmKGY8dHx8Zj49aSlyZXR1cm47aWYoYz51KXtpZihzKXtpZihzWzFdPj1yKXJldHVybn1lbHNlIHM9W2YsZV07bz1bZixyXX1lbHNle2lmKHMpe2lmKHNbMV08ZSlyZXR1cm59ZWxzZSBzPVtmLHJdO289W2YsZV19fWVsc2UgaWYoTT0oZCtwKS8yLShiPShjLXUpLyhwLWQpKSpmLGI8LTF8fGI+MSlpZihjPnUpe2lmKHMpe2lmKHNbMV0+PXIpcmV0dXJufWVsc2Ugcz1bKGUtTSkvYixlXTtvPVsoci1NKS9iLHJdfWVsc2V7aWYocyl7aWYoc1sxXTxlKXJldHVybn1lbHNlIHM9WyhyLU0pL2Iscl07bz1bKGUtTSkvYixlXX1lbHNlIGlmKGQ8cCl7aWYocyl7aWYoc1swXT49aSlyZXR1cm59ZWxzZSBzPVt0LGIqdCtNXTtvPVtpLGIqaStNXX1lbHNle2lmKHMpe2lmKHNbMF08dClyZXR1cm59ZWxzZSBzPVtpLGIqaStNXTtvPVt0LGIqdCtNXX1yZXR1cm4gblswXT1zLG5bMV09bywhMH1mdW5jdGlvbiBvQWUobix0KXt2YXIgZT1uLnNpdGUsaT10LmxlZnQscj10LnJpZ2h0O3JldHVybiBlPT09ciYmKHI9aSxpPWUpLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKTooZT09PWk/KGk9dFsxXSxyPXRbMF0pOihpPXRbMF0scj10WzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBaTChuLHQpe3JldHVybiB0WysodC5sZWZ0IT09bi5zaXRlKV19ZnVuY3Rpb24gc0FlKG4sdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1uLnNpdGUpXX12YXIgUEQsUUo9W107ZnVuY3Rpb24gYUFlKCl7dTAodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIHRtKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgaT10LnNpdGUscj1uLnNpdGUsbz1lLnNpdGU7aWYoaSE9PW8pe3ZhciBzPXJbMF0sYT1yWzFdLGw9aVswXS1zLGM9aVsxXS1hLGQ9b1swXS1zLHU9b1sxXS1hLHA9MioobCp1LWMqZCk7aWYoIShwPj0tWkopKXt2YXIgZj1sKmwrYypjLG09ZCpkK3UqdSxiPSh1KmYtYyptKS9wLE09KGwqbS1kKmYpL3AseT1RSi5wb3AoKXx8bmV3IGFBZTt5LmFyYz1uLHkuc2l0ZT1yLHkueD1iK3MseS55PSh5LmN5PU0rYSkrTWF0aC5zcXJ0KGIqYitNKk0pLG4uY2lyY2xlPXk7Zm9yKHZhciB4PW51bGwsUj1tMC5fO1I7KWlmKHkueTxSLnl8fHkueT09PVIueSYmeS54PD1SLngpe2lmKCFSLkwpe3g9Ui5QO2JyZWFrfVI9Ui5MfWVsc2V7aWYoIVIuUil7eD1SO2JyZWFrfVI9Ui5SfW0wLmluc2VydCh4LHkpLHh8fChQRD15KX19fX1mdW5jdGlvbiBubShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoUEQ9dC5OKSxtMC5yZW1vdmUodCksUUoucHVzaCh0KSx1MCh0KSxuLmNpcmNsZT1udWxsKX12YXIgSko9W107ZnVuY3Rpb24gbEFlKCl7dTAodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEtKKG4pe3ZhciB0PUpKLnBvcCgpfHxuZXcgbEFlO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIEtMKG4pe25tKG4pLGltLnJlbW92ZShuKSxKSi5wdXNoKG4pLHUwKG4pfWZ1bmN0aW9uICRKKG4pe3ZhciB0PW4uY2lyY2xlLGU9dC54LGk9dC5jeSxyPVtlLGldLG89bi5QLHM9bi5OLGE9W25dO0tMKG4pO2Zvcih2YXIgbD1vO2wuY2lyY2xlJiZNYXRoLmFicyhlLWwuY2lyY2xlLngpPGVyJiZNYXRoLmFicyhpLWwuY2lyY2xlLmN5KTxlcjspbz1sLlAsYS51bnNoaWZ0KGwpLEtMKGwpLGw9bzthLnVuc2hpZnQobCksbm0obCk7Zm9yKHZhciBjPXM7Yy5jaXJjbGUmJk1hdGguYWJzKGUtYy5jaXJjbGUueCk8ZXImJk1hdGguYWJzKGktYy5jaXJjbGUuY3kpPGVyOylzPWMuTixhLnB1c2goYyksS0woYyksYz1zO2EucHVzaChjKSxubShjKTt2YXIgdSxkPWEubGVuZ3RoO2Zvcih1PTE7dTxkOysrdSl0eCgoYz1hW3VdKS5lZGdlLChsPWFbdS0xXSkuc2l0ZSxjLnNpdGUscik7KGM9YVtkLTFdKS5lZGdlPXAwKChsPWFbMF0pLnNpdGUsYy5zaXRlLG51bGwsciksdG0obCksdG0oYyl9ZnVuY3Rpb24gZSQobil7Zm9yKHZhciBpLHIsbyxzLHQ9blswXSxlPW5bMV0sYT1pbS5fO2E7KWlmKChvPXQkKGEsZSktdCk+ZXIpYT1hLkw7ZWxzZXtpZighKChzPXQtY0FlKGEsZSkpPmVyKSl7bz4tZXI/KGk9YS5QLHI9YSk6cz4tZXI/KGk9YSxyPWEuTik6aT1yPWE7YnJlYWt9aWYoIWEuUil7aT1hO2JyZWFrfWE9YS5SfSFmdW5jdGlvbihuKXtoc1tuLmluZGV4XT17c2l0ZTpuLGhhbGZlZGdlczpbXX19KG4pO3ZhciBsPUtKKG4pO2lmKGltLmluc2VydChpLGwpLGl8fHIpe2lmKGk9PT1yKXJldHVybiBubShpKSxyPUtKKGkuc2l0ZSksaW0uaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1wMChpLnNpdGUsbC5zaXRlKSx0bShpKSx2b2lkIHRtKHIpO2lmKCFyKXJldHVybiB2b2lkKGwuZWRnZT1wMChpLnNpdGUsbC5zaXRlKSk7bm0oaSksbm0ocik7dmFyIGM9aS5zaXRlLGQ9Y1swXSx1PWNbMV0scD1uWzBdLWQsZj1uWzFdLXUsbT1yLnNpdGUsYj1tWzBdLWQsTT1tWzFdLXUseT0yKihwKk0tZipiKSx4PXAqcCtmKmYsUj1iKmIrTSpNLEE9WyhNKngtZipSKS95K2QsKHAqUi1iKngpL3krdV07dHgoci5lZGdlLGMsbSxBKSxsLmVkZ2U9cDAoYyxuLG51bGwsQSksci5lZGdlPXAwKG4sbSxudWxsLEEpLHRtKGkpLHRtKHIpfX1mdW5jdGlvbiB0JChuLHQpe3ZhciBlPW4uc2l0ZSxpPWVbMF0scj1lWzFdLG89ci10O2lmKCFvKXJldHVybiBpO3ZhciBzPW4uUDtpZighcylyZXR1cm4tMS8wO3ZhciBhPShlPXMuc2l0ZSlbMF0sbD1lWzFdLGM9bC10O2lmKCFjKXJldHVybiBhO3ZhciBkPWEtaSx1PTEvby0xL2MscD1kL2M7cmV0dXJuIHU/KC1wK01hdGguc3FydChwKnAtMip1KihkKmQvKC0yKmMpLWwrYy8yK3Itby8yKSkpL3UraTooaSthKS8yfWZ1bmN0aW9uIGNBZShuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiB0JChlLHQpO3ZhciBpPW4uc2l0ZTtyZXR1cm4gaVsxXT09PXQ/aVswXToxLzB9dmFyIGltLGhzLG0wLERvLGVyPTFlLTYsWko9MWUtMTI7ZnVuY3Rpb24gZEFlKG4sdCxlKXtyZXR1cm4oblswXS1lWzBdKSoodFsxXS1uWzFdKS0oblswXS10WzBdKSooZVsxXS1uWzFdKX1mdW5jdGlvbiB1QWUobix0KXtyZXR1cm4gdFsxXS1uWzFdfHx0WzBdLW5bMF19ZnVuY3Rpb24gT0Qobix0KXt2YXIgaSxyLG8sZT1uLnNvcnQodUFlKS5wb3AoKTtmb3IoRG89W10saHM9bmV3IEFycmF5KG4ubGVuZ3RoKSxpbT1uZXcgUUwsbTA9bmV3IFFMOzspaWYobz1QRCxlJiYoIW98fGVbMV08by55fHxlWzFdPT09by55JiZlWzBdPG8ueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJihlJChlKSxpPWVbMF0scj1lWzFdKSxlPW4ucG9wKCk7ZWxzZXtpZighbylicmVhazskSihvLmFyYyl9aWYoZnVuY3Rpb24oKXtmb3IodmFyIGUsaSxyLG8sbj0wLHQ9aHMubGVuZ3RoO248dDsrK24paWYoKGU9aHNbbl0pJiYobz0oaT1lLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIHM9bmV3IEFycmF5KG8pLGE9bmV3IEFycmF5KG8pO2ZvcihyPTA7cjxvOysrcilzW3JdPXIsYVtyXT1vQWUoZSxEb1tpW3JdXSk7Zm9yKHMuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBhW2NdLWFbbF19KSxyPTA7cjxvOysrcilhW3JdPWlbc1tyXV07Zm9yKHI9MDtyPG87KytyKWlbcl09YVtyXX19KCksdCl7dmFyIHM9K3RbMF1bMF0sYT0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07KGZ1bmN0aW9uKG4sdCxlLGkpe2Zvcih2YXIgbyxyPURvLmxlbmd0aDtyLS07KXJBZShvPURvW3JdLG4sdCxlLGkpJiZpQWUobyxuLHQsZSxpKSYmKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+ZXJ8fE1hdGguYWJzKG9bMF1bMV0tb1sxXVsxXSk+ZXIpfHxkZWxldGUgRG9bcl19KShzLGEsbCxjKSxmdW5jdGlvbihuLHQsZSxpKXt2YXIgbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0scj1ocy5sZW5ndGgseT0hMDtmb3Iobz0wO288cjsrK28paWYocz1oc1tvXSl7Zm9yKGE9cy5zaXRlLGw9KGM9cy5oYWxmZWRnZXMpLmxlbmd0aDtsLS07KURvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsZD1jLmxlbmd0aDtsPGQ7KWI9KG09c0FlKHMsRG9bY1tsXV0pKVswXSxNPW1bMV0scD0odT1aTChzLERvW2NbKytsJWRdXSkpWzBdLGY9dVsxXSwoTWF0aC5hYnMoYi1wKT5lcnx8TWF0aC5hYnMoTS1mKT5lcikmJihjLnNwbGljZShsLDAsRG8ucHVzaChmMChhLG0sTWF0aC5hYnMoYi1uKTxlciYmaS1NPmVyP1tuLE1hdGguYWJzKHAtbik8ZXI/ZjppXTpNYXRoLmFicyhNLWkpPGVyJiZlLWI+ZXI/W01hdGguYWJzKGYtaSk8ZXI/cDplLGldOk1hdGguYWJzKGItZSk8ZXImJk0tdD5lcj9bZSxNYXRoLmFicyhwLWUpPGVyP2Y6dF06TWF0aC5hYnMoTS10KTxlciYmYi1uPmVyP1tNYXRoLmFicyhmLXQpPGVyP3A6bix0XTpudWxsKSktMSksKytkKTtkJiYoeT0hMSl9aWYoeSl7dmFyIHgsUixBLFY9MS8wO2ZvcihvPTAseT1udWxsO288cjsrK28pKHM9aHNbb10pJiYoQT0oeD0oYT1zLnNpdGUpWzBdLW4pKngrKFI9YVsxXS10KSpSKTxWJiYoVj1BLHk9cyk7aWYoeSl7dmFyIHRlPVtuLHRdLEs9W24saV0seGU9W2UsaV0sWGU9W2UsdF07eS5oYWxmZWRnZXMucHVzaChEby5wdXNoKGYwKGE9eS5zaXRlLHRlLEspKS0xLERvLnB1c2goZjAoYSxLLHhlKSktMSxEby5wdXNoKGYwKGEseGUsWGUpKS0xLERvLnB1c2goZjAoYSxYZSx0ZSkpLTEpfX1mb3Iobz0wO288cjsrK28pKHM9aHNbb10pJiYocy5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgaHNbb10pfShzLGEsbCxjKX10aGlzLmVkZ2VzPURvLHRoaXMuY2VsbHM9aHMsaW09bTA9RG89aHM9bnVsbH1mdW5jdGlvbiBybShuLHQsZSl7dGhpcy5rPW4sdGhpcy54PXQsdGhpcy55PWV9T0QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPRCxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gWkwodCxuW2ldKX0pO3JldHVybiBlLmRhdGE9dC5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKGE9KG89ZS5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIG8sYSxsLHI9ZS5zaXRlLHM9LTEsYz10W29bYS0xXV0sZD1jLmxlZnQ9PT1yP2MucmlnaHQ6Yy5sZWZ0OysrczxhOylsPWQsZD0oYz10W29bc11dKS5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdCxsJiZkJiZpPGwuaW5kZXgmJmk8ZC5pbmRleCYmZEFlKHIsbCxkKTwwJiZuLnB1c2goW3IuZGF0YSxsLmRhdGEsZC5kYXRhXSl9KSxufSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5yaWdodH0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm57c291cmNlOm4ubGVmdC5kYXRhLHRhcmdldDpuLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24obix0LGUpe2Zvcih2YXIgcixhLGk9dGhpcyxvPWkuX2ZvdW5kfHwwLHM9aS5jZWxscy5sZW5ndGg7IShhPWkuY2VsbHNbb10pOylpZigrK28+PXMpcmV0dXJuIG51bGw7dmFyIGw9bi1hLnNpdGVbMF0sYz10LWEuc2l0ZVsxXSxkPWwqbCtjKmM7ZG97YT1pLmNlbGxzW3I9b10sbz1udWxsLGEuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24odSl7dmFyIHA9aS5lZGdlc1t1XSxmPXAubGVmdDtpZihmIT09YS5zaXRlJiZmfHwoZj1wLnJpZ2h0KSl7dmFyIG09bi1mWzBdLGI9dC1mWzFdLE09bSptK2IqYjtNPGQmJihkPU0sbz1mLmluZGV4KX19KX13aGlsZShudWxsIT09byk7cmV0dXJuIGkuX2ZvdW5kPXIsbnVsbD09ZXx8ZDw9ZSplP2Euc2l0ZTpudWxsfX0scm0ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpybSxzY2FsZTpmdW5jdGlvbihuKXtyZXR1cm4gMT09PW4/dGhpczpuZXcgcm0odGhpcy5rKm4sdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbihuLHQpe3JldHVybiAwPT09biYwPT09dD90aGlzOm5ldyBybSh0aGlzLmssdGhpcy54K3RoaXMuaypuLHRoaXMueSt0aGlzLmsqdCl9LGFwcGx5OmZ1bmN0aW9uKG4pe3JldHVybltuWzBdKnRoaXMuayt0aGlzLngsblsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbihuKXtyZXR1cm4gbip0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24obil7cmV0dXJuWyhuWzBdLXRoaXMueCkvdGhpcy5rLChuWzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbihuKXtyZXR1cm4obi10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbihuKXtyZXR1cm4obi10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24obil7cmV0dXJuIG4uY29weSgpLmRvbWFpbihuLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAobi5pbnZlcnQsbikpfSxyZXNjYWxlWTpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19LG5ldyBybSgxLDAsMCk7dmFyIHMzPTFlNCxhMz0uMDAxLG8kPVFyKCIuMn5lIikscEFlPVFyKCIuNH5yIiksbiQ9UXIoIix+Iik7ZnVuY3Rpb24gaSQobil7aWYoMD09PW4pcmV0dXJuIjAiO2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1zM3x8dDxhMz9vJChuKTpwQWUobil9dmFyIGlwPXtmb3JtYXRUaWNrOmkkLGZvcm1hdFNob3J0OmkkLGZvcm1hdFJlYWRhYmxlKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1zM3x8dDxhMz9vJChuKTpuJChuKX0sZm9ybWF0TG9uZzpuJH0sZkFlPW5ldyBJbnRsLk51bWJlckZvcm1hdCh2b2lkIDAse21heGltdW1GcmFjdGlvbkRpZ2l0czo0fSk7ZnVuY3Rpb24ga0Qobil7cmV0dXJuIGZBZS5mb3JtYXQobil9dmFyIGcwPXtmb3JtYXRUaWNrOmtELGZvcm1hdFNob3J0OmtELGZvcm1hdFJlYWRhYmxlOmtELGZvcm1hdExvbmc6a0R9LG1BZT1RcigiMC4zfnMiKSxoQWU9UXIoIiwuM35mIik7ZnVuY3Rpb24gRkQobil7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PXMzfHx0PGEzP21BZShuKTpoQWUobil9dmFyIGwzPXtmb3JtYXRUaWNrOkZELGZvcm1hdFNob3J0OkZELGZvcm1hdFJlYWRhYmxlOkZELGZvcm1hdExvbmc6RkR9LG4zPTFlMyxpMz02MCpuMyxyMz02MCppMyxvMz0yNCpyMyxyJD0zNjUqbzMsaDA9UXIoIi40fiIpO2Z1bmN0aW9uIE5EKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLnNpZ24obik+MD8iIjoiLSIsZT1NYXRoLmFicyhuKTtyZXR1cm4gdCs9ZTxuMz9gJHtoMChlKX0gbXNgOmU8aTM/YCR7aDAoZS9uMyl9IHNlY2A6ZTxyMz9gJHtoMChlL2kzKX0gbWluYDplPG8zP2Ake2gwKGUvcjMpfSBocmA6ZTxyJD9gJHtoMChlL28zKX0gZGF5YDpgJHtoMChlL3IkKX0geXJgLHR9dmFyIHQzLF8wPXtmb3JtYXRUaWNrOk5ELGZvcm1hdFNob3J0Ok5ELGZvcm1hdFJlYWRhYmxlOk5ELGZvcm1hdExvbmc6TkR9LGdBZT1lbSgpLnRpY2tGb3JtYXQoKSxzJD17Zm9ybWF0VGljazpuPT5nQWUobmV3IERhdGUobikpLGZvcm1hdFNob3J0Om49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHQzLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6bj0+bmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcodDMse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KSxmb3JtYXRMb25nOm49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHQzLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O2Z1bmN0aW9uIHFsKG4pe3N3aXRjaChuKXtjYXNlIG5yLkxJTkVBUjpyZXR1cm4gbmV3IG54O2Nhc2UgbnIuTE9HMTA6cmV0dXJuIG5ldyBjMztjYXNlIG5yLlRJTUU6cmV0dXJuIG5ldyBpeDtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHtufSBub3Qgc3VwcG9ydGVkLmApfX12YXIgbng9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9aXB9dHJhbnNmb3JtKHQsZSxpKXtsZXRbcixvXT10LHM9by1yLFthLGxdPWU7cmV0dXJuIDA9PT1zP2E6KGwtYSkvcyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiAwPT09ZT9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1XbCgpLG89LjA1KihpLWUrTnVtYmVyLkVQU0lMT04pLFtzLGFdPXIuZG9tYWluKFtlLW8saStvXSkubmljZSgpLmRvbWFpbigpO3JldHVybltzLGFdfXRpY2tzKHQsZSl7cmV0dXJuIFdsKCkuZG9tYWluKHQpLnRpY2tzKGUpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sYzM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9aXB9dHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmxvZzEwKHQ+MD90Ok51bWJlci5NSU5fVkFMVUUpfXVudHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmV4cCh0L01hdGguTE9HMTBFKX1mb3J3YXJkKHQsZSxpKXtpZihpPD0wKXJldHVybiBlWzBdO2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLGQ9dGhpcy50cmFuc2Zvcm0obyktbCx1PWEtcztyZXR1cm4gaT10aGlzLnRyYW5zZm9ybShpKSx1LyhkK051bWJlci5FUFNJTE9OKSooaS1sKStzfXJldmVyc2UodCxlLGkpe2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLGQ9dGhpcy50cmFuc2Zvcm0obyktbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShkLyhhLXMrTnVtYmVyLkVQU0lMT04pKihpLXMpK2wpfW5pY2VEb21haW4odCl7bGV0W2UsaV09dDtpZihlPmkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7bGV0IHI9TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxvPU1hdGgubWF4KGksTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIGk8PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqciksMipvXX10aWNrcyh0LGUpe2xldCBpPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLHI9dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0sbz1HeSgpLmRvbWFpbihbaSxyXSkudGlja3MoZSk7cmV0dXJuIG8ubGVuZ3RoP286dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX0saXg9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNjYWxlPWVtKCksdGhpcy5kZWZhdWx0Rm9ybWF0dGVyPXMkfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShlKShpKX1yZXZlcnNlKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkuaW52ZXJ0KGkpLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXRoaXMuc2NhbGUuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bZS5nZXRUaW1lKCksaS5nZXRUaW1lKCldfXRpY2tzKHQsZSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnRpY2tzKGUpLm1hcChpPT5pLmdldFRpbWUoKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxkMz0hMTtpZihzZWxmLmhhc093blByb3BlcnR5KCJXZWJHTDJSZW5kZXJpbmdDb250ZXh0IikmJnNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50Iikpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciIsKCk9PntkMz0hMX0pO2xldCB0PW4uZ2V0Q29udGV4dCgid2ViZ2wyIik7ZDM9Qm9vbGVhbih0KX12YXIgWWxfY29udmVydFJlY3RUb0V4dGVudD1mdW5jdGlvbihuKXtyZXR1cm57eDpbbi54LG4ueCtuLndpZHRoXSx5OltuLnksbi55K24uaGVpZ2h0XX19LFlsX2lzV2ViR2wyU3VwcG9ydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIGQzfSxZbF9pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD1mdW5jdGlvbigpe2lmKCFzZWxmLmhhc093blByb3BlcnR5KCJPZmZzY3JlZW5DYW52YXMiKSlyZXR1cm4hMTtsZXQgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIik7cmV0dXJuIEJvb2xlYW4obil9LFlsX2FyZVBvbHlsaW5lc0VxdWFsPWZ1bmN0aW9uKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKylpZihuW2VdIT09dFtlXSlyZXR1cm4hMTtyZXR1cm4hMH0sYjA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1xbChuci5MSU5FQVIpLHRoaXMueVNjYWxlPXFsKG5yLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtsZXQgaT10LHI9WWxfY29udmVydFJlY3RUb0V4dGVudCh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoci54LFtpLngsaS54K2kud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoci55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W2kueStpLmhlaWdodCxpLnldOltpLnksaS55K2kuaGVpZ2h0XSxlWzFdKV19fTtmdW5jdGlvbiBMRChuLHQsZSxpKXtsZXR7Y29sb3I6cix2aXNpYmxlOm8sb3BhY2l0eTpzfT1pLGE9bjtyZXR1cm4gYXx8bz8oYT1hPz90KCksYT1lKGEpLGEuc3R5bGUuZGlzcGxheT1vPyIiOiJub25lIixhLnN0eWxlLnN0cm9rZT1yLGEuc3R5bGUub3BhY2l0eT1TdHJpbmcocz8/MSksYSk6bnVsbH12YXIgZFY9IjEzNyIsTUFlPTAsYSQ9MSx3QWU9MixqZWU9MSxTQWU9MixteD0zLHl4PTAsZ289MSxxMD0yLHBwPTAsZ3g9MSxsJD0yLGMkPTMsZCQ9NCxFQWU9NSxCMD0xMDAsVEFlPTEwMSxEQWU9MTAyLHUkPTEwMyxwJD0xMDQsSUFlPTIwMCxBQWU9MjAxLFJBZT0yMDIsUEFlPTIwMyxXZWU9MjA0LHFlZT0yMDUsT0FlPTIwNixrQWU9MjA3LEZBZT0yMDgsTkFlPTIwOSxMQWU9MjEwLEJBZT0wLFZBZT0xLEhBZT0yLFozPTMsekFlPTQsVUFlPTUsakFlPTYsR0FlPTcsWUk9MCxXQWU9MSxxQWU9MixmcD0wLFlBZT0xLFhBZT0yLFFBZT0zLFpBZT00LEtBZT01LFd4PTMwMSxxeD0zMDIsSzM9MzAzLEozPTMwNCxYST0zMDYsdVY9MzA3LCQzPTFlMyx5YT0xMDAxLGVCPTEwMDIsX289MTAwMyxmJD0xMDA0LG0kPTEwMDUsJG89MTAwNixKQWU9MTAwNyxRST0xMDA4LG1wPTEwMDksJEFlPTEwMTAsZVJlPTEwMTEseHg9MTAxMix0UmU9MTAxMyxfST0xMDE0LGNtPTEwMTUsVTA9MTAxNixuUmU9MTAxNyxpUmU9MTAxOCxqMD0xMDIwLHJSZT0xMDIxLGdzPTEwMjMsb1JlPTEwMjQsc1JlPTEwMjUsdW09MTAyNixZMD0xMDI3LGFSZT0xMDI4LGxSZT0xMDI5LGNSZT0xMDMwLGRSZT0xMDMxLHVSZT0xMDMzLHUzPTMzNzc2LHAzPTMzNzc3LGYzPTMzNzc4LG0zPTMzNzc5LGgkPTM1ODQwLGckPTM1ODQxLF8kPTM1ODQyLGIkPTM1ODQzLHBSZT0zNjE5Nix2JD0zNzQ5Mix5JD0zNzQ5Nix4JD0zNzgwOCxDJD0zNzgwOSxNJD0zNzgxMCx3JD0zNzgxMSxTJD0zNzgxMixFJD0zNzgxMyxUJD0zNzgxNCxEJD0zNzgxNSxJJD0zNzgxNixBJD0zNzgxNyxSJD0zNzgxOCxQJD0zNzgxOSxPJD0zNzgyMCxrJD0zNzgyMSxGJD0zNjQ5MixWMD0yNDAwLEgwPTI0MDEsX3A9M2UzLEFyPTMwMDEsYlJlPTMyMDEsb189MCx2UmU9MSxDeD0zNTA0NCx4ST0zNTA0OCxOJD0iMzAwIGVzIix0Qj0xMDM1LFVkPWNsYXNze2FkZEV2ZW50TGlzdGVuZXIodCxlKXt2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9e30pO2xldCBpPXRoaXMuX2xpc3RlbmVyczt2b2lkIDA9PT1pW3RdJiYoaVt0XT1bXSksLTE9PT1pW3RdLmluZGV4T2YoZSkmJmlbdF0ucHVzaChlKX1oYXNFdmVudExpc3RlbmVyKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybiExO2xldCBpPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gdm9pZCAwIT09aVt0XSYmLTEhPT1pW3RdLmluZGV4T2YoZSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHZvaWQgMCE9PXIpe2xldCBvPXIuaW5kZXhPZihlKTstMSE9PW8mJnIuc3BsaWNlKG8sMSl9fWRpc3BhdGNoRXZlbnQodCl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZih2b2lkIDAhPT1pKXt0LnRhcmdldD10aGlzO2xldCByPWkuc2xpY2UoMCk7Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXJbb10uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX0sVm89W107Zm9yKGxldCBuPTA7bjwyNTY7bisrKVZvW25dPShuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNik7dmFyIF8zPU1hdGguUEkvMTgwLG5CPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIEpsKCl7bGV0IG49NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsdD00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxlPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGk9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKFZvWzI1NSZuXStWb1tuPj44JjI1NV0rVm9bbj4+MTYmMjU1XStWb1tuPj4yNCYyNTVdKyItIitWb1syNTUmdF0rVm9bdD4+OCYyNTVdKyItIitWb1t0Pj4xNiYxNXw2NF0rVm9bdD4+MjQmMjU1XSsiLSIrVm9bNjMmZXwxMjhdK1ZvW2U+PjgmMjU1XSsiLSIrVm9bZT4+MTYmMjU1XStWb1tlPj4yNCYyNTVdK1ZvWzI1NSZpXStWb1tpPj44JjI1NV0rVm9baT4+MTYmMjU1XStWb1tpPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEtzKG4sdCxlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX1mdW5jdGlvbiBiMyhuLHQsZSl7cmV0dXJuKDEtZSkqbitlKnR9ZnVuY3Rpb24gTCQobil7cmV0dXJuIDA9PShuJm4tMSkmJjAhPT1ufWZ1bmN0aW9uIENSZShuKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4yKSl9dmFyICRlPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzBdKmUrclszXSppK3JbNl0sdGhpcy55PXJbMV0qZStyWzRdKmkrcls3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55O3JldHVybiBlKmUraSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPXRoaXMueC10Lngscz10aGlzLnktdC55O3JldHVybiB0aGlzLng9byppLXMqcit0LngsdGhpcy55PW8qcitzKmkrdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19OyRlLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGJvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixvLHMsYSxsLGMpe2xldCBkPXRoaXMuZWxlbWVudHM7cmV0dXJuIGRbMF09dCxkWzFdPXIsZFsyXT1hLGRbM109ZSxkWzRdPW8sZFs1XT1sLGRbNl09aSxkWzddPXMsZFs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMscz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLGQ9aVs0XSx1PWlbN10scD1pWzJdLGY9aVs1XSxtPWlbOF0sYj1yWzBdLE09clszXSx5PXJbNl0seD1yWzFdLFI9cls0XSxBPXJbN10sVj1yWzJdLHRlPXJbNV0sSz1yWzhdO3JldHVybiBvWzBdPXMqYithKngrbCpWLG9bM109cypNK2EqUitsKnRlLG9bNl09cyp5K2EqQStsKkssb1sxXT1jKmIrZCp4K3UqVixvWzRdPWMqTStkKlIrdSp0ZSxvWzddPWMqeStkKkErdSpLLG9bMl09cCpiK2YqeCttKlYsb1s1XT1wKk0rZipSK20qdGUsb1s4XT1wKnkrZipBK20qSyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVszXSo9dCxlWzZdKj10LGVbMV0qPXQsZVs0XSo9dCxlWzddKj10LGVbMl0qPXQsZVs1XSo9dCxlWzhdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sZD10WzhdO3JldHVybiBlKnMqZC1lKmEqYy1pKm8qZCtpKmEqbCtyKm8qYy1yKnMqbH1pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sZD10WzhdLHU9ZCpzLWEqYyxwPWEqbC1kKm8sZj1jKm8tcypsLG09ZSp1K2kqcCtyKmY7aWYoMD09PW0pcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgYj0xL207cmV0dXJuIHRbMF09dSpiLHRbMV09KHIqYy1kKmkpKmIsdFsyXT0oYSppLXIqcykqYix0WzNdPXAqYix0WzRdPShkKmUtcipsKSpiLHRbNV09KHIqby1hKmUpKmIsdFs2XT1mKmIsdFs3XT0oaSpsLWMqZSkqYix0WzhdPShzKmUtaSpvKSpiLHRoaXN9dHJhbnNwb3NlKCl7bGV0IHQsZT10aGlzLmVsZW1lbnRzO3JldHVybiB0PWVbMV0sZVsxXT1lWzNdLGVbM109dCx0PWVbMl0sZVsyXT1lWzZdLGVbNl09dCx0PWVbNV0sZVs1XT1lWzddLGVbN109dCx0aGlzfWdldE5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCh0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsaSxyLG8scyxhKXtsZXQgbD1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3JldHVybiB0aGlzLnNldChpKmwsaSpjLC1pKihsKnMrYyphKStzK3QsLXIqYyxyKmwsLXIqKC1jKnMrbCphKSthK2UsMCwwLDEpLHRoaXN9c2NhbGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKj10LGlbM10qPXQsaVs2XSo9dCxpWzFdKj1lLGlbNF0qPWUsaVs3XSo9ZSx0aGlzfXJvdGF0ZSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLHI9dGhpcy5lbGVtZW50cyxvPXJbMF0scz1yWzNdLGE9cls2XSxsPXJbMV0sYz1yWzRdLGQ9cls3XTtyZXR1cm4gclswXT1lKm8raSpsLHJbM109ZSpzK2kqYyxyWzZdPWUqYStpKmQsclsxXT0taSpvK2UqbCxyWzRdPS1pKnMrZSpjLHJbN109LWkqYStlKmQsdGhpc310cmFuc2xhdGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKz10KmlbMl0saVszXSs9dCppWzVdLGlbNl0rPXQqaVs4XSxpWzFdKz1lKmlbMl0saVs0XSs9ZSppWzVdLGlbN10rPWUqaVs4XSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZnVuY3Rpb24gUWVlKG4pe2ZvcihsZXQgdD1uLmxlbmd0aC0xO3Q+PTA7LS10KWlmKG5bdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTXgobil7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbil9Ym8ucHJvdG90eXBlLmlzTWF0cml4Mz0hMDt2YXIgQiQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0sWGw9e2g6MCxzOjAsbDowfSxCRD17aDowLHM6MCxsOjB9O2Z1bmN0aW9uIHYzKG4sdCxlKXtyZXR1cm4gZTwwJiYoZSs9MSksZT4xJiYoZS09MSksZTwxLzY/bis2Kih0LW4pKmU6ZTwuNT90OmU8Mi8zP24rNioodC1uKSooMi8zLWUpOm59ZnVuY3Rpb24gRzAobil7cmV0dXJuIG48LjA0MDQ1Py4wNzczOTkzODA4Km46TWF0aC5wb3coLjk0Nzg2NzI5ODYqbisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIHkzKG4pe3JldHVybiBuPC4wMDMxMzA4PzEyLjkyKm46MS4wNTUqTWF0aC5wb3cobiwuNDE2NjYpLS4wNTV9dmFyIGFuPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3JldHVybiB2b2lkIDA9PT1pJiZ2b2lkIDA9PT1yP3RoaXMuc2V0KGUpOnRoaXMuc2V0UkdCKGUsaSxyKX1zZXQoZSl7cmV0dXJuIGUmJmUuaXNDb2xvcj90aGlzLmNvcHkoZSk6Im51bWJlciI9PXR5cGVvZiBlP3RoaXMuc2V0SGV4KGUpOiJzdHJpbmciPT10eXBlb2YgZSYmdGhpcy5zZXRTdHlsZShlKSx0aGlzfXNldFNjYWxhcihlKXtyZXR1cm4gdGhpcy5yPWUsdGhpcy5nPWUsdGhpcy5iPWUsdGhpc31zZXRIZXgoZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSx0aGlzLnI9KGU+PjE2JjI1NSkvMjU1LHRoaXMuZz0oZT4+OCYyNTUpLzI1NSx0aGlzLmI9KDI1NSZlKS8yNTUsdGhpc31zZXRSR0IoZSxpLHIpe3JldHVybiB0aGlzLnI9ZSx0aGlzLmc9aSx0aGlzLmI9cix0aGlzfXNldEhTTChlLGkscil7aWYoZT1mdW5jdGlvbihuLHQpe3JldHVybihuJTErMSklMX0oZSksaT1LcyhpLDAsMSkscj1LcyhyLDAsMSksMD09PWkpdGhpcy5yPXRoaXMuZz10aGlzLmI9cjtlbHNle2xldCBvPXI8PS41P3IqKDEraSk6citpLXIqaSxzPTIqci1vO3RoaXMucj12MyhzLG8sZSsxLzMpLHRoaXMuZz12MyhzLG8sZSksdGhpcy5iPXYzKHMsbyxlLTEvMyl9cmV0dXJuIHRoaXN9c2V0U3R5bGUoZSl7ZnVuY3Rpb24gaShvKXt2b2lkIDAhPT1vJiZwYXJzZUZsb2F0KG8pPDEmJmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAiK2UrIiB3aWxsIGJlIGlnbm9yZWQuIil9bGV0IHI7aWYocj0vXigoPzpyZ2J8aHNsKWE/KVwoKFteXCldKilcKS8uZXhlYyhlKSl7bGV0IG8sYT1yWzJdO3N3aXRjaChyWzFdKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihvPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQob1sxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KG9bMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChvWzNdLDEwKSkvMjU1LGkob1s0XSksdGhpcztpZihvPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQob1sxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KG9bMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChvWzNdLDEwKSkvMTAwLGkob1s0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihvPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXtsZXQgbD1wYXJzZUZsb2F0KG9bMV0pLzM2MCxjPXBhcnNlSW50KG9bMl0sMTApLzEwMCxkPXBhcnNlSW50KG9bM10sMTApLzEwMDtyZXR1cm4gaShvWzRdKSx0aGlzLnNldEhTTChsLGMsZCl9fX1lbHNlIGlmKHI9L15cIyhbQS1GYS1mXGRdKykkLy5leGVjKGUpKXtsZXQgbz1yWzFdLHM9by5sZW5ndGg7aWYoMz09PXMpcmV0dXJuIHRoaXMucj1wYXJzZUludChvLmNoYXJBdCgwKStvLmNoYXJBdCgwKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludChvLmNoYXJBdCgxKStvLmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludChvLmNoYXJBdCgyKStvLmNoYXJBdCgyKSwxNikvMjU1LHRoaXM7aWYoNj09PXMpcmV0dXJuIHRoaXMucj1wYXJzZUludChvLmNoYXJBdCgwKStvLmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludChvLmNoYXJBdCgyKStvLmNoYXJBdCgzKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludChvLmNoYXJBdCg0KStvLmNoYXJBdCg1KSwxNikvMjU1LHRoaXN9cmV0dXJuIGUmJmUubGVuZ3RoPjA/dGhpcy5zZXRDb2xvck5hbWUoZSk6dGhpc31zZXRDb2xvck5hbWUoZSl7bGV0IGk9QiRbZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gdm9pZCAwIT09aT90aGlzLnNldEhleChpKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weShlKXtyZXR1cm4gdGhpcy5yPWUucix0aGlzLmc9ZS5nLHRoaXMuYj1lLmIsdGhpc31jb3B5U1JHQlRvTGluZWFyKGUpe3JldHVybiB0aGlzLnI9RzAoZS5yKSx0aGlzLmc9RzAoZS5nKSx0aGlzLmI9RzAoZS5iKSx0aGlzfWNvcHlMaW5lYXJUb1NSR0IoZSl7cmV0dXJuIHRoaXMucj15MyhlLnIpLHRoaXMuZz15MyhlLmcpLHRoaXMuYj15MyhlLmIpLHRoaXN9Y29udmVydFNSR0JUb0xpbmVhcigpe3JldHVybiB0aGlzLmNvcHlTUkdCVG9MaW5lYXIodGhpcyksdGhpc31jb252ZXJ0TGluZWFyVG9TUkdCKCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvU1JHQih0aGlzKSx0aGlzfWdldEhleCgpe3JldHVybiAyNTUqdGhpcy5yPDwxNl4yNTUqdGhpcy5nPDw4XjI1NSp0aGlzLmI8PDB9Z2V0SGV4U3RyaW5nKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9Z2V0SFNMKGUpe2xldCBsLGMsaT10aGlzLnIscj10aGlzLmcsbz10aGlzLmIscz1NYXRoLm1heChpLHIsbyksYT1NYXRoLm1pbihpLHIsbyksZD0oYStzKS8yO2lmKGE9PT1zKWw9MCxjPTA7ZWxzZXtsZXQgdT1zLWE7c3dpdGNoKGM9ZDw9LjU/dS8ocythKTp1LygyLXMtYSkscyl7Y2FzZSBpOmw9KHItbykvdSsocjxvPzY6MCk7YnJlYWs7Y2FzZSByOmw9KG8taSkvdSsyO2JyZWFrO2Nhc2UgbzpsPShpLXIpL3UrNH1sLz02fXJldHVybiBlLmg9bCxlLnM9YyxlLmw9ZCxlfWdldFN0eWxlKCl7cmV0dXJuInJnYigiKygyNTUqdGhpcy5yfDApKyIsIisoMjU1KnRoaXMuZ3wwKSsiLCIrKDI1NSp0aGlzLmJ8MCkrIikifW9mZnNldEhTTChlLGkscil7cmV0dXJuIHRoaXMuZ2V0SFNMKFhsKSxYbC5oKz1lLFhsLnMrPWksWGwubCs9cix0aGlzLnNldEhTTChYbC5oLFhsLnMsWGwubCksdGhpc31hZGQoZSl7cmV0dXJuIHRoaXMucis9ZS5yLHRoaXMuZys9ZS5nLHRoaXMuYis9ZS5iLHRoaXN9YWRkQ29sb3JzKGUsaSl7cmV0dXJuIHRoaXMucj1lLnIraS5yLHRoaXMuZz1lLmcraS5nLHRoaXMuYj1lLmIraS5iLHRoaXN9YWRkU2NhbGFyKGUpe3JldHVybiB0aGlzLnIrPWUsdGhpcy5nKz1lLHRoaXMuYis9ZSx0aGlzfXN1YihlKXtyZXR1cm4gdGhpcy5yPU1hdGgubWF4KDAsdGhpcy5yLWUuciksdGhpcy5nPU1hdGgubWF4KDAsdGhpcy5nLWUuZyksdGhpcy5iPU1hdGgubWF4KDAsdGhpcy5iLWUuYiksdGhpc31tdWx0aXBseShlKXtyZXR1cm4gdGhpcy5yKj1lLnIsdGhpcy5nKj1lLmcsdGhpcy5iKj1lLmIsdGhpc31tdWx0aXBseVNjYWxhcihlKXtyZXR1cm4gdGhpcy5yKj1lLHRoaXMuZyo9ZSx0aGlzLmIqPWUsdGhpc31sZXJwKGUsaSl7cmV0dXJuIHRoaXMucis9KGUuci10aGlzLnIpKmksdGhpcy5nKz0oZS5nLXRoaXMuZykqaSx0aGlzLmIrPShlLmItdGhpcy5iKSppLHRoaXN9bGVycENvbG9ycyhlLGkscil7cmV0dXJuIHRoaXMucj1lLnIrKGkuci1lLnIpKnIsdGhpcy5nPWUuZysoaS5nLWUuZykqcix0aGlzLmI9ZS5iKyhpLmItZS5iKSpyLHRoaXN9bGVycEhTTChlLGkpe3RoaXMuZ2V0SFNMKFhsKSxlLmdldEhTTChCRCk7bGV0IHI9YjMoWGwuaCxCRC5oLGkpLG89YjMoWGwucyxCRC5zLGkpLHM9YjMoWGwubCxCRC5sLGkpO3JldHVybiB0aGlzLnNldEhTTChyLG8scyksdGhpc31lcXVhbHMoZSl7cmV0dXJuIGUucj09PXRoaXMuciYmZS5nPT09dGhpcy5nJiZlLmI9PT10aGlzLmJ9ZnJvbUFycmF5KGUsaT0wKXtyZXR1cm4gdGhpcy5yPWVbaV0sdGhpcy5nPWVbaSsxXSx0aGlzLmI9ZVtpKzJdLHRoaXN9dG9BcnJheShlPVtdLGk9MCl7cmV0dXJuIGVbaV09dGhpcy5yLGVbaSsxXT10aGlzLmcsZVtpKzJdPXRoaXMuYixlfWZyb21CdWZmZXJBdHRyaWJ1dGUoZSxpKXtyZXR1cm4gdGhpcy5yPWUuZ2V0WChpKSx0aGlzLmc9ZS5nZXRZKGkpLHRoaXMuYj1lLmdldFooaSksITA9PT1lLm5vcm1hbGl6ZWQmJih0aGlzLnIvPTI1NSx0aGlzLmcvPTI1NSx0aGlzLmIvPTI1NSksdGhpc310b0pTT04oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19cmV0dXJuIG4uTkFNRVM9QiQsbn0pKCk7YW4ucHJvdG90eXBlLmlzQ29sb3I9ITAsYW4ucHJvdG90eXBlLnI9MSxhbi5wcm90b3R5cGUuZz0xLGFuLnByb3RvdHlwZS5iPTE7dmFyIHYwLGpkPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PiJ1IilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ZvaWQgMD09PXYwJiYodjA9TXgoImNhbnZhcyIpKSx2MC53aWR0aD10LndpZHRoLHYwLmhlaWdodD10LmhlaWdodDtsZXQgaT12MC5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9djB9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1NeCgiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCksbz1yLmRhdGE7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspb1tzXT0yNTUqRzAob1tzXS8yNTUpO3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1pZih0LmRhdGEpe2xldCBlPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyllW2ldPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/TWF0aC5mbG9vcigyNTUqRzAoZVtpXS8yNTUpKTpHMChlW2ldKTtyZXR1cm57ZGF0YTplLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LE1SZT0wLGxvPWNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IodD1sby5ERUZBVUxUX0lNQUdFLGU9bG8uREVGQVVMVF9NQVBQSU5HLGk9eWEscj15YSxvPSRvLHM9UUksYT1ncyxsPW1wLGM9MSxkPV9wKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOk1SZSsrfSksdGhpcy51dWlkPUpsKCksdGhpcy5uYW1lPSIiLHRoaXMuaW1hZ2U9dCx0aGlzLm1pcG1hcHM9W10sdGhpcy5tYXBwaW5nPWUsdGhpcy53cmFwUz1pLHRoaXMud3JhcFQ9cix0aGlzLm1hZ0ZpbHRlcj1vLHRoaXMubWluRmlsdGVyPXMsdGhpcy5hbmlzb3Ryb3B5PWMsdGhpcy5mb3JtYXQ9YSx0aGlzLmludGVybmFsRm9ybWF0PW51bGwsdGhpcy50eXBlPWwsdGhpcy5vZmZzZXQ9bmV3ICRlKDAsMCksdGhpcy5yZXBlYXQ9bmV3ICRlKDEsMSksdGhpcy5jZW50ZXI9bmV3ICRlKDAsMCksdGhpcy5yb3RhdGlvbj0wLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMCx0aGlzLm1hdHJpeD1uZXcgYm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITAsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITAsdGhpcy51bnBhY2tBbGlnbm1lbnQ9NCx0aGlzLmVuY29kaW5nPWQsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLm9uVXBkYXRlPW51bGwsdGhpcy5pc1JlbmRlclRhcmdldFRleHR1cmU9ITEsdGhpcy5uZWVkc1BNUkVNVXBkYXRlPSExfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueSx0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnksdGhpcy5yb3RhdGlvbix0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnkpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc310b0pTT04odCl7bGV0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0O2lmKCFlJiZ2b2lkIDAhPT10LnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIHQudGV4dHVyZXNbdGhpcy51dWlkXTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7bGV0IHI9dGhpcy5pbWFnZTtpZih2b2lkIDA9PT1yLnV1aWQmJihyLnV1aWQ9SmwoKSksIWUmJnZvaWQgMD09PXQuaW1hZ2VzW3IudXVpZF0pe2xldCBvO2lmKEFycmF5LmlzQXJyYXkocikpe289W107Zm9yKGxldCBzPTAsYT1yLmxlbmd0aDtzPGE7cysrKW8ucHVzaCh4MyhyW3NdLmlzRGF0YVRleHR1cmU/cltzXS5pbWFnZTpyW3NdKSl9ZWxzZSBvPXgzKHIpO3QuaW1hZ2VzW3IudXVpZF09e3V1aWQ6ci51dWlkLHVybDpvfX1pLmltYWdlPXIudXVpZH1yZXR1cm4ie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKDMwMCE9PXRoaXMubWFwcGluZylyZXR1cm4gdDtpZih0LmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCksdC54PDB8fHQueD4xKXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlICQzOnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgeWE6dC54PXQueDwwPzA6MTticmVhaztjYXNlIGVCOnQueD0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpP01hdGguY2VpbCh0LngpLXQueDp0LngtTWF0aC5mbG9vcih0LngpfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSAkMzp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIHlhOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBlQjp0Lnk9MT09PU1hdGguYWJzKE1hdGguZmxvb3IodC55KSUyKT9NYXRoLmNlaWwodC55KS10Lnk6dC55LU1hdGguZmxvb3IodC55KX1yZXR1cm4gdGhpcy5mbGlwWSYmKHQueT0xLXQueSksdH1zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319O2Z1bmN0aW9uIHgzKG4pe3JldHVybiB0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJm4gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZuIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJm4gaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9qZC5nZXREYXRhVVJMKG4pOm4uZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuLmRhdGEpLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LHR5cGU6bi5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9bG8uREVGQVVMVF9JTUFHRT12b2lkIDAsbG8uREVGQVVMVF9NQVBQSU5HPTMwMCxsby5wcm90b3R5cGUuaXNUZXh0dXJlPSEwO3ZhciBaaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXZvaWQgMCE9PXQudz90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10aGlzLncscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbNF0qaStzWzhdKnIrc1sxMl0qbyx0aGlzLnk9c1sxXSplK3NbNV0qaStzWzldKnIrc1sxM10qbyx0aGlzLno9c1syXSplK3NbNl0qaStzWzEwXSpyK3NbMTRdKm8sdGhpcy53PXNbM10qZStzWzddKmkrc1sxMV0qcitzWzE1XSpvLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLG8sbD10LmVsZW1lbnRzLGM9bFswXSxkPWxbNF0sdT1sWzhdLHA9bFsxXSxmPWxbNV0sbT1sWzldLGI9bFsyXSxNPWxbNl0seT1sWzEwXTtpZihNYXRoLmFicyhkLXApPC4wMSYmTWF0aC5hYnModS1iKTwuMDEmJk1hdGguYWJzKG0tTSk8LjAxKXtpZihNYXRoLmFicyhkK3ApPC4xJiZNYXRoLmFicyh1K2IpPC4xJiZNYXRoLmFicyhtK00pPC4xJiZNYXRoLmFicyhjK2YreS0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IFI9KGMrMSkvMixBPShmKzEpLzIsVj0oeSsxKS8yLHRlPShkK3ApLzQsSz0odStiKS80LHhlPShtK00pLzQ7cmV0dXJuIFI+QSYmUj5WP1I8LjAxPyhpPTAscj0uNzA3MTA2NzgxLG89LjcwNzEwNjc4MSk6KGk9TWF0aC5zcXJ0KFIpLHI9dGUvaSxvPUsvaSk6QT5WP0E8LjAxPyhpPS43MDcxMDY3ODEscj0wLG89LjcwNzEwNjc4MSk6KHI9TWF0aC5zcXJ0KEEpLGk9dGUvcixvPXhlL3IpOlY8LjAxPyhpPS43MDcxMDY3ODEscj0uNzA3MTA2NzgxLG89MCk6KG89TWF0aC5zcXJ0KFYpLGk9Sy9vLHI9eGUvbyksdGhpcy5zZXQoaSxyLG8sZSksdGhpc31sZXQgeD1NYXRoLnNxcnQoKE0tbSkqKE0tbSkrKHUtYikqKHUtYikrKHAtZCkqKHAtZCkpO3JldHVybiBNYXRoLmFicyh4KTwuMDAxJiYoeD0xKSx0aGlzLng9KE0tbSkveCx0aGlzLnk9KHUtYikveCx0aGlzLno9KHAtZCkveCx0aGlzLnc9TWF0aC5hY29zKChjK2YreS0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTtaaS5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciBKcz1jbGFzcyBleHRlbmRzIFVke2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IFppKDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgWmkoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBsbyh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09aS5nZW5lcmF0ZU1pcG1hcHMmJmkuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD12b2lkIDAhPT1pLmludGVybmFsRm9ybWF0P2kuaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWkubWluRmlsdGVyP2kubWluRmlsdGVyOiRvLHRoaXMuZGVwdGhCdWZmZXI9dm9pZCAwPT09aS5kZXB0aEJ1ZmZlcnx8aS5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dm9pZCAwIT09aS5zdGVuY2lsQnVmZmVyJiZpLnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09aS5kZXB0aFRleHR1cmU/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LmNvcHkodC52aWV3cG9ydCksdGhpcy50ZXh0dXJlPXQudGV4dHVyZS5jbG9uZSgpLHRoaXMudGV4dHVyZS5pbWFnZT1PYmplY3QuYXNzaWduKHt9LHQudGV4dHVyZS5pbWFnZSksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07SnMucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITAsY2xhc3MgZXh0ZW5kcyBKc3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKTtsZXQgcj10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288aTtvKyspdGhpcy50ZXh0dXJlW29dPXIuY2xvbmUoKX1zZXRTaXplKHQsZSxpPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmRlcHRoPWk7Zm9yKGxldCByPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO3I8bztyKyspdGhpcy50ZXh0dXJlW3JdLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmhlaWdodD1lLHRoaXMudGV4dHVyZVtyXS5pbWFnZS5kZXB0aD1pO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxlKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LGUpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCBlPTAsaT10LnRleHR1cmUubGVuZ3RoO2U8aTtlKyspdGhpcy50ZXh0dXJlW2VdPXQudGV4dHVyZVtlXS5jbG9uZSgpO3JldHVybiB0aGlzfX0ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIHd4PWNsYXNzIGV4dGVuZHMgSnN7Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKHQsZSxpKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PXZvaWQgMD09PWkuaWdub3JlRGVwdGh8fGkuaWdub3JlRGVwdGgsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dm9pZCAwIT09aS51c2VSZW5kZXJUb1RleHR1cmUmJmkudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPSExPT09dGhpcy51c2VSZW5kZXJUb1RleHR1cmV9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07d3gucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgdHM9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixvLHMsYSl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLGQ9aVtyKzJdLHU9aVtyKzNdLHA9b1tzKzBdLGY9b1tzKzFdLG09b1tzKzJdLGI9b1tzKzNdO2lmKDA9PT1hKXJldHVybiB0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09ZCx2b2lkKHRbZSszXT11KTtpZigxPT09YSlyZXR1cm4gdFtlKzBdPXAsdFtlKzFdPWYsdFtlKzJdPW0sdm9pZCh0W2UrM109Yik7aWYodSE9PWJ8fGwhPT1wfHxjIT09Znx8ZCE9PW0pe2xldCBNPTEtYSx5PWwqcCtjKmYrZCptK3UqYix4PXk+PTA/MTotMSxSPTEteSp5O2lmKFI+TnVtYmVyLkVQU0lMT04pe2xldCBWPU1hdGguc3FydChSKSx0ZT1NYXRoLmF0YW4yKFYseSp4KTtNPU1hdGguc2luKE0qdGUpL1YsYT1NYXRoLnNpbihhKnRlKS9WfWxldCBBPWEqeDtpZihsPWwqTStwKkEsYz1jKk0rZipBLGQ9ZCpNK20qQSx1PXUqTStiKkEsTT09PTEtYSl7bGV0IFY9MS9NYXRoLnNxcnQobCpsK2MqYytkKmQrdSp1KTtsKj1WLGMqPVYsZCo9Vix1Kj1WfX10W2VdPWwsdFtlKzFdPWMsdFtlKzJdPWQsdFtlKzNdPXV9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsZSxpLHIsbyxzKXtsZXQgYT1pW3JdLGw9aVtyKzFdLGM9aVtyKzJdLGQ9aVtyKzNdLHU9b1tzXSxwPW9bcysxXSxmPW9bcysyXSxtPW9bcyszXTtyZXR1cm4gdFtlXT1hKm0rZCp1K2wqZi1jKnAsdFtlKzFdPWwqbStkKnArYyp1LWEqZix0W2UrMl09YyptK2QqZithKnAtbCp1LHRbZSszXT1kKm0tYSp1LWwqcC1jKmYsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQsZSl7aWYoIXR8fCF0LmlzRXVsZXIpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxvPXQuX3oscz10Ll9vcmRlcixhPU1hdGguY29zLGw9TWF0aC5zaW4sYz1hKGkvMiksZD1hKHIvMiksdT1hKG8vMikscD1sKGkvMiksZj1sKHIvMiksbT1sKG8vMik7c3dpdGNoKHMpe2Nhc2UiWFlaIjp0aGlzLl94PXAqZCp1K2MqZiptLHRoaXMuX3k9YypmKnUtcCpkKm0sdGhpcy5fej1jKmQqbStwKmYqdSx0aGlzLl93PWMqZCp1LXAqZiptO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PXAqZCp1K2MqZiptLHRoaXMuX3k9YypmKnUtcCpkKm0sdGhpcy5fej1jKmQqbS1wKmYqdSx0aGlzLl93PWMqZCp1K3AqZiptO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PXAqZCp1LWMqZiptLHRoaXMuX3k9YypmKnUrcCpkKm0sdGhpcy5fej1jKmQqbStwKmYqdSx0aGlzLl93PWMqZCp1LXAqZiptO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PXAqZCp1LWMqZiptLHRoaXMuX3k9YypmKnUrcCpkKm0sdGhpcy5fej1jKmQqbS1wKmYqdSx0aGlzLl93PWMqZCp1K3AqZiptO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PXAqZCp1K2MqZiptLHRoaXMuX3k9YypmKnUrcCpkKm0sdGhpcy5fej1jKmQqbS1wKmYqdSx0aGlzLl93PWMqZCp1LXAqZiptO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PXAqZCp1LWMqZiptLHRoaXMuX3k9YypmKnUtcCpkKm0sdGhpcy5fej1jKmQqbStwKmYqdSx0aGlzLl93PWMqZCp1K3AqZiptO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitzKX1yZXR1cm4hMSE9PWUmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxlKXtsZXQgaT1lLzIscj1NYXRoLnNpbihpKTtyZXR1cm4gdGhpcy5feD10Lngqcix0aGlzLl95PXQueSpyLHRoaXMuX3o9dC56KnIsdGhpcy5fdz1NYXRoLmNvcyhpKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGU9dC5lbGVtZW50cyxpPWVbMF0scj1lWzRdLG89ZVs4XSxzPWVbMV0sYT1lWzVdLGw9ZVs5XSxjPWVbMl0sZD1lWzZdLHU9ZVsxMF0scD1pK2ErdTtpZihwPjApe2xldCBmPS41L01hdGguc3FydChwKzEpO3RoaXMuX3c9LjI1L2YsdGhpcy5feD0oZC1sKSpmLHRoaXMuX3k9KG8tYykqZix0aGlzLl96PShzLXIpKmZ9ZWxzZSBpZihpPmEmJmk+dSl7bGV0IGY9MipNYXRoLnNxcnQoMStpLWEtdSk7dGhpcy5fdz0oZC1sKS9mLHRoaXMuX3g9LjI1KmYsdGhpcy5feT0ocitzKS9mLHRoaXMuX3o9KG8rYykvZn1lbHNlIGlmKGE+dSl7bGV0IGY9MipNYXRoLnNxcnQoMSthLWktdSk7dGhpcy5fdz0oby1jKS9mLHRoaXMuX3g9KHIrcykvZix0aGlzLl95PS4yNSpmLHRoaXMuX3o9KGwrZCkvZn1lbHNle2xldCBmPTIqTWF0aC5zcXJ0KDErdS1pLWEpO3RoaXMuX3c9KHMtcikvZix0aGlzLl94PShvK2MpL2YsdGhpcy5feT0obCtkKS9mLHRoaXMuX3o9LjI1KmZ9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LGUpe2xldCBpPXQuZG90KGUpKzE7cmV0dXJuIGk8TnVtYmVyLkVQU0lMT04/KGk9MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1pKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PWkpKToodGhpcy5feD10LnkqZS56LXQueiplLnksdGhpcy5feT10LnoqZS54LXQueCplLnosdGhpcy5fej10LngqZS55LXQueSplLngsdGhpcy5fdz1pKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKEtzKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LGUpe2xldCBpPXRoaXMuYW5nbGVUbyh0KTtpZigwPT09aSlyZXR1cm4gdGhpcztsZXQgcj1NYXRoLm1pbigxLGUvaSk7cmV0dXJuIHRoaXMuc2xlcnAodCxyKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIDA9PT10Pyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtsZXQgaT10Ll94LHI9dC5feSxvPXQuX3oscz10Ll93LGE9ZS5feCxsPWUuX3ksYz1lLl96LGQ9ZS5fdztyZXR1cm4gdGhpcy5feD1pKmQrcyphK3IqYy1vKmwsdGhpcy5feT1yKmQrcypsK28qYS1pKmMsdGhpcy5fej1vKmQrcypjK2kqbC1yKmEsdGhpcy5fdz1zKmQtaSphLXIqbC1vKmMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxlKXtpZigwPT09ZSlyZXR1cm4gdGhpcztpZigxPT09ZSlyZXR1cm4gdGhpcy5jb3B5KHQpO2xldCBpPXRoaXMuX3gscj10aGlzLl95LG89dGhpcy5feixzPXRoaXMuX3csYT1zKnQuX3craSp0Ll94K3IqdC5feStvKnQuX3o7aWYoYTwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LGE9LWEpOnRoaXMuY29weSh0KSxhPj0xKXJldHVybiB0aGlzLl93PXMsdGhpcy5feD1pLHRoaXMuX3k9cix0aGlzLl96PW8sdGhpcztsZXQgbD0xLWEqYTtpZihsPD1OdW1iZXIuRVBTSUxPTil7bGV0IGY9MS1lO3JldHVybiB0aGlzLl93PWYqcytlKnRoaXMuX3csdGhpcy5feD1mKmkrZSp0aGlzLl94LHRoaXMuX3k9ZipyK2UqdGhpcy5feSx0aGlzLl96PWYqbytlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31sZXQgYz1NYXRoLnNxcnQobCksZD1NYXRoLmF0YW4yKGMsYSksdT1NYXRoLnNpbigoMS1lKSpkKS9jLHA9TWF0aC5zaW4oZSpkKS9jO3JldHVybiB0aGlzLl93PXMqdSt0aGlzLl93KnAsdGhpcy5feD1pKnUrdGhpcy5feCpwLHRoaXMuX3k9cip1K3RoaXMuX3kqcCx0aGlzLl96PW8qdSt0aGlzLl96KnAsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnBRdWF0ZXJuaW9ucyh0LGUsaSl7cmV0dXJuIHRoaXMuY29weSh0KS5zbGVycChlLGkpfXJhbmRvbSgpe2xldCB0PU1hdGgucmFuZG9tKCksZT1NYXRoLnNxcnQoMS10KSxpPU1hdGguc3FydCh0KSxyPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLG89MipNYXRoLlBJKk1hdGgucmFuZG9tKCk7cmV0dXJuIHRoaXMuc2V0KGUqTWF0aC5jb3MociksaSpNYXRoLnNpbihvKSxpKk1hdGguY29zKG8pLGUqTWF0aC5zaW4ocikpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy5feD10W2VdLHRoaXMuX3k9dFtlKzFdLHRoaXMuX3o9dFtlKzJdLHRoaXMuX3c9dFtlKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKGUpLHRoaXMuX3k9dC5nZXRZKGUpLHRoaXMuX3o9dC5nZXRaKGUpLHRoaXMuX3c9dC5nZXRXKGUpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3RzLnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7dmFyICQ9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTApe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pfXNldCh0LGUsaSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPXRoaXMueiksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlWZWN0b3JzKHQsZSkpOih0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzKX1tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpc31tdWx0aXBseVZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCplLngsdGhpcy55PXQueSplLnksdGhpcy56PXQueiplLnosdGhpc31hcHBseUV1bGVyKHQpe3JldHVybiB0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKSx0aGlzLmFwcGx5UXVhdGVybmlvbihWJC5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKFYkLnNldEZyb21BeGlzQW5nbGUodCxlKSl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1szXSppK29bNl0qcix0aGlzLnk9b1sxXSplK29bNF0qaStvWzddKnIsdGhpcy56PW9bMl0qZStvWzVdKmkrb1s4XSpyLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzLHM9MS8ob1szXSplK29bN10qaStvWzExXSpyK29bMTVdKTtyZXR1cm4gdGhpcy54PShvWzBdKmUrb1s0XSppK29bOF0qcitvWzEyXSkqcyx0aGlzLnk9KG9bMV0qZStvWzVdKmkrb1s5XSpyK29bMTNdKSpzLHRoaXMuej0ob1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKSpzLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQueCxzPXQueSxhPXQueixsPXQudyxjPWwqZStzKnItYSppLGQ9bCppK2EqZS1vKnIsdT1sKnIrbyppLXMqZSxwPS1vKmUtcyppLWEqcjtyZXR1cm4gdGhpcy54PWMqbCtwKi1vK2QqLWEtdSotcyx0aGlzLnk9ZCpsK3AqLXMrdSotby1jKi1hLHRoaXMuej11KmwrcCotYStjKi1zLWQqLW8sdGhpc31wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkSW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeCl9dW5wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCl9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1s0XSppK29bOF0qcix0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIsdGhpcy56PW9bMl0qZStvWzZdKmkrb1sxMF0qcix0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzLno9dC56KyhlLnotdC56KSppLHRoaXN9Y3Jvc3ModCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKHQsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsdCl9Y3Jvc3NWZWN0b3JzKHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LHM9ZS54LGE9ZS55LGw9ZS56O3JldHVybiB0aGlzLng9cipsLW8qYSx0aGlzLnk9bypzLWkqbCx0aGlzLno9aSphLXIqcyx0aGlzfXByb2plY3RPblZlY3Rvcih0KXtsZXQgZT10Lmxlbmd0aFNxKCk7aWYoMD09PWUpcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtsZXQgaT10LmRvdCh0aGlzKS9lO3JldHVybiB0aGlzLmNvcHkodCkubXVsdGlwbHlTY2FsYXIoaSl9cHJvamVjdE9uUGxhbmUodCl7cmV0dXJuIEMzLmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKEMzKX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihDMy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKDIqdGhpcy5kb3QodCkpKX1hbmdsZVRvKHQpe2xldCBlPU1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqdC5sZW5ndGhTcSgpKTtpZigwPT09ZSlyZXR1cm4gTWF0aC5QSS8yO2xldCBpPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhLcyhpLC0xLDEpKX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7bGV0IGU9dGhpcy54LXQueCxpPXRoaXMueS10Lnkscj10aGlzLnotdC56O3JldHVybiBlKmUraSppK3Iqcn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KStNYXRoLmFicyh0aGlzLnotdC56KX1zZXRGcm9tU3BoZXJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHModC5yYWRpdXMsdC5waGksdC50aGV0YSl9c2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LGUsaSl7bGV0IHI9TWF0aC5zaW4oZSkqdDtyZXR1cm4gdGhpcy54PXIqTWF0aC5zaW4oaSksdGhpcy55PU1hdGguY29zKGUpKnQsdGhpcy56PXIqTWF0aC5jb3MoaSksdGhpc31zZXRGcm9tQ3lsaW5kcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQucmFkaXVzLHQudGhldGEsdC55KX1zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModCxlLGkpe3JldHVybiB0aGlzLng9dCpNYXRoLnNpbihlKSx0aGlzLnk9aSx0aGlzLno9dCpNYXRoLmNvcyhlKSx0aGlzfXNldEZyb21NYXRyaXhQb3NpdGlvbih0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9ZVsxMl0sdGhpcy55PWVbMTNdLHRoaXMuej1lWzE0XSx0aGlzfXNldEZyb21NYXRyaXhTY2FsZSh0KXtsZXQgZT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1pLHRoaXMuej1yLHRoaXN9c2V0RnJvbU1hdHJpeENvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLDQqZSl9c2V0RnJvbU1hdHJpeDNDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cywzKmUpfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXN9cmFuZG9tRGlyZWN0aW9uKCl7bGV0IHQ9MiooTWF0aC5yYW5kb20oKS0uNSksZT1NYXRoLnJhbmRvbSgpKk1hdGguUEkqMixpPU1hdGguc3FydCgxLXQqKjIpO3JldHVybiB0aGlzLng9aSpNYXRoLmNvcyhlKSx0aGlzLnk9aSpNYXRoLnNpbihlKSx0aGlzLno9dCx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56fX07JC5wcm90b3R5cGUuaXNWZWN0b3IzPSEwO3ZhciBDMz1uZXcgJCxWJD1uZXcgdHMseGE9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgJCgxLzAsMS8wLDEvMCksZT1uZXcgJCgtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KGUpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCBlPTEvMCxpPTEvMCxyPTEvMCxvPS0xLzAscz0tMS8wLGE9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgZD10W2xdLHU9dFtsKzFdLHA9dFtsKzJdO2Q8ZSYmKGU9ZCksdTxpJiYoaT11KSxwPHImJihyPXApLGQ+byYmKG89ZCksdT5zJiYocz11KSxwPmEmJihhPXApfXJldHVybiB0aGlzLm1pbi5zZXQoZSxpLHIpLHRoaXMubWF4LnNldChvLHMsYSksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCBlPTEvMCxpPTEvMCxyPTEvMCxvPS0xLzAscz0tMS8wLGE9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IGQ9dC5nZXRYKGwpLHU9dC5nZXRZKGwpLHA9dC5nZXRaKGwpO2Q8ZSYmKGU9ZCksdTxpJiYoaT11KSxwPHImJihyPXApLGQ+byYmKG89ZCksdT5zJiYocz11KSxwPmEmJihhPXApfXJldHVybiB0aGlzLm1pbi5zZXQoZSxpLHIpLHRoaXMubWF4LnNldChvLHMsYSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPW9tLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfXNldEZyb21PYmplY3QodCxlPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQsZSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5taW4uY29weSh0Lm1pbiksdGhpcy5tYXguY29weSh0Lm1heCksdGhpc31tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5taW4ueD10aGlzLm1pbi55PXRoaXMubWluLno9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT10aGlzLm1heC56PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fHx0aGlzLm1heC56PHRoaXMubWluLnp9Z2V0Q2VudGVyKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9ZXhwYW5kQnlPYmplY3QodCxlPSExKXt0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCExKTtsZXQgaT10Lmdlb21ldHJ5O2lmKHZvaWQgMCE9PWkpaWYoZSYmbnVsbCE9aS5hdHRyaWJ1dGVzJiZ2b2lkIDAhPT1pLmF0dHJpYnV0ZXMucG9zaXRpb24pe2xldCBvPWkuYXR0cmlidXRlcy5wb3NpdGlvbjtmb3IobGV0IHM9MCxhPW8uY291bnQ7czxhO3MrKylvbS5mcm9tQnVmZmVyQXR0cmlidXRlKG8scykuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuZXhwYW5kQnlQb2ludChvbSl9ZWxzZSBudWxsPT09aS5ib3VuZGluZ0JveCYmaS5jb21wdXRlQm91bmRpbmdCb3goKSxNMy5jb3B5KGkuYm91bmRpbmdCb3gpLE0zLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKE0zKTtsZXQgcj10LmNoaWxkcmVuO2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKyl0aGlzLmV4cGFuZEJ5T2JqZWN0KHJbb10sZSk7cmV0dXJuIHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55fHx0Lno8dGhpcy5taW4uenx8dC56PnRoaXMubWF4LnopfWNvbnRhaW5zQm94KHQpe3JldHVybiB0aGlzLm1pbi54PD10Lm1pbi54JiZ0Lm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD10Lm1pbi55JiZ0Lm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD10Lm1pbi56JiZ0Lm1heC56PD10aGlzLm1heC56fWdldFBhcmFtZXRlcih0LGUpe3JldHVybiBlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKHQuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueXx8dC5tYXguejx0aGlzLm1pbi56fHx0Lm1pbi56PnRoaXMubWF4LnopfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuY2xhbXBQb2ludCh0LmNlbnRlcixvbSksb20uZGlzdGFuY2VUb1NxdWFyZWQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31pbnRlcnNlY3RzUGxhbmUodCl7bGV0IGUsaTtyZXR1cm4gdC5ub3JtYWwueD4wPyhlPXQubm9ybWFsLngqdGhpcy5taW4ueCxpPXQubm9ybWFsLngqdGhpcy5tYXgueCk6KGU9dC5ub3JtYWwueCp0aGlzLm1heC54LGk9dC5ub3JtYWwueCp0aGlzLm1pbi54KSx0Lm5vcm1hbC55PjA/KGUrPXQubm9ybWFsLnkqdGhpcy5taW4ueSxpKz10Lm5vcm1hbC55KnRoaXMubWF4LnkpOihlKz10Lm5vcm1hbC55KnRoaXMubWF4LnksaSs9dC5ub3JtYWwueSp0aGlzLm1pbi55KSx0Lm5vcm1hbC56PjA/KGUrPXQubm9ybWFsLnoqdGhpcy5taW4ueixpKz10Lm5vcm1hbC56KnRoaXMubWF4LnopOihlKz10Lm5vcm1hbC56KnRoaXMubWF4LnosaSs9dC5ub3JtYWwueip0aGlzLm1pbi56KSxlPD0tdC5jb25zdGFudCYmaT49LXQuY29uc3RhbnR9aW50ZXJzZWN0c1RyaWFuZ2xlKHQpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiExO3RoaXMuZ2V0Q2VudGVyKG94KSxWRC5zdWJWZWN0b3JzKHRoaXMubWF4LG94KSx5MC5zdWJWZWN0b3JzKHQuYSxveCkseDAuc3ViVmVjdG9ycyh0LmIsb3gpLEMwLnN1YlZlY3RvcnModC5jLG94KSxycC5zdWJWZWN0b3JzKHgwLHkwKSxvcC5zdWJWZWN0b3JzKEMwLHgwKSxzbS5zdWJWZWN0b3JzKHkwLEMwKTtsZXQgZT1bMCwtcnAueixycC55LDAsLW9wLnosb3AueSwwLC1zbS56LHNtLnkscnAueiwwLC1ycC54LG9wLnosMCwtb3AueCxzbS56LDAsLXNtLngsLXJwLnkscnAueCwwLC1vcC55LG9wLngsMCwtc20ueSxzbS54LDBdO3JldHVybiEoIXczKGUseTAseDAsQzAsVkQpfHwoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCF3MyhlLHkwLHgwLEMwLFZEKSkpJiYoSEQuY3Jvc3NWZWN0b3JzKHJwLG9wKSxlPVtIRC54LEhELnksSEQuel0sdzMoZSx5MCx4MCxDMCxWRCkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIG9tLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPS41KnRoaXMuZ2V0U2l6ZShvbSkubGVuZ3RoKCksdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfHwoTmRbMF0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksTmRbMV0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksTmRbMl0uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksTmRbM10uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksTmRbNF0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksTmRbNV0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksTmRbNl0uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksTmRbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRGcm9tUG9pbnRzKE5kKSksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fTt4YS5wcm90b3R5cGUuaXNCb3gzPSEwO3ZhciBOZD1bbmV3ICQsbmV3ICQsbmV3ICQsbmV3ICQsbmV3ICQsbmV3ICQsbmV3ICQsbmV3ICRdLG9tPW5ldyAkLE0zPW5ldyB4YSx5MD1uZXcgJCx4MD1uZXcgJCxDMD1uZXcgJCxycD1uZXcgJCxvcD1uZXcgJCxzbT1uZXcgJCxveD1uZXcgJCxWRD1uZXcgJCxIRD1uZXcgJCxhbT1uZXcgJDtmdW5jdGlvbiB3MyhuLHQsZSxpLHIpe2ZvcihsZXQgbz0wLHM9bi5sZW5ndGgtMztvPD1zO28rPTMpe2FtLmZyb21BcnJheShuLG8pO2xldCBhPXIueCpNYXRoLmFicyhhbS54KStyLnkqTWF0aC5hYnMoYW0ueSkrci56Kk1hdGguYWJzKGFtLnopLGw9dC5kb3QoYW0pLGM9ZS5kb3QoYW0pLGQ9aS5kb3QoYW0pO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsZCksTWF0aC5taW4obCxjLGQpKT5hKXJldHVybiExfXJldHVybiEwfXZhciB3UmU9bmV3IHhhLEgkPW5ldyAkLHpEPW5ldyAkLFMzPW5ldyAkLGJwPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1lfXNldCh0LGUpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPWUsdGhpc31zZXRGcm9tUG9pbnRzKHQsZSl7bGV0IGk9dGhpcy5jZW50ZXI7dm9pZCAwIT09ZT9pLmNvcHkoZSk6d1JlLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10Lmxlbmd0aDtvPHM7bysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbb10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7UzMuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1TMy5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPS41KihpLXRoaXMucmFkaXVzKTt0aGlzLmNlbnRlci5hZGQoUzMubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuITA9PT10aGlzLmNlbnRlci5lcXVhbHModC5jZW50ZXIpP3pELnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOnpELnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQoSCQuY29weSh0LmNlbnRlcikuYWRkKHpEKSksdGhpcy5leHBhbmRCeVBvaW50KEgkLmNvcHkodC5jZW50ZXIpLnN1Yih6RCkpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX0sTGQ9bmV3ICQsRTM9bmV3ICQsVUQ9bmV3ICQsc3A9bmV3ICQsVDM9bmV3ICQsakQ9bmV3ICQsRDM9bmV3ICQsdnA9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgJCxlPW5ldyAkKDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LGUpe3JldHVybiBlLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LExkKSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7ZS5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2xldCBpPWUuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gaTwwP2UuY29weSh0aGlzLm9yaWdpbik6ZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihpKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2xldCBlPUxkLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gZTwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihMZC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihlKS5hZGQodGhpcy5vcmlnaW4pLExkLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVNxVG9TZWdtZW50KHQsZSxpLHIpe0UzLmNvcHkodCkuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KSxVRC5jb3B5KGUpLnN1Yih0KS5ub3JtYWxpemUoKSxzcC5jb3B5KHRoaXMub3JpZ2luKS5zdWIoRTMpO2xldCB1LHAsZixtLG89LjUqdC5kaXN0YW5jZVRvKGUpLHM9LXRoaXMuZGlyZWN0aW9uLmRvdChVRCksYT1zcC5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LXNwLmRvdChVRCksYz1zcC5sZW5ndGhTcSgpLGQ9TWF0aC5hYnMoMS1zKnMpO2lmKGQ+MClpZih1PXMqbC1hLHA9cyphLWwsbT1vKmQsdT49MClpZihwPj0tbSlpZihwPD1tKXtsZXQgYj0xL2Q7dSo9YixwKj1iLGY9dSoodStzKnArMiphKStwKihzKnUrcCsyKmwpK2N9ZWxzZSBwPW8sdT1NYXRoLm1heCgwLC0ocypwK2EpKSxmPS11KnUrcCoocCsyKmwpK2M7ZWxzZSBwPS1vLHU9TWF0aC5tYXgoMCwtKHMqcCthKSksZj0tdSp1K3AqKHArMipsKStjO2Vsc2UgcDw9LW0/KHU9TWF0aC5tYXgoMCwtKC1zKm8rYSkpLHA9dT4wPy1vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxmPS11KnUrcCoocCsyKmwpK2MpOnA8PW0/KHU9MCxwPU1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxmPXAqKHArMipsKStjKToodT1NYXRoLm1heCgwLC0ocypvK2EpKSxwPXU+MD9vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxmPS11KnUrcCoocCsyKmwpK2MpO2Vsc2UgcD1zPjA/LW86byx1PU1hdGgubWF4KDAsLShzKnArYSkpLGY9LXUqdStwKihwKzIqbCkrYztyZXR1cm4gaSYmaS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih1KS5hZGQodGhpcy5vcmlnaW4pLHImJnIuY29weShVRCkubXVsdGlwbHlTY2FsYXIocCkuYWRkKEUzKSxmfWludGVyc2VjdFNwaGVyZSh0LGUpe0xkLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2xldCBpPUxkLmRvdCh0aGlzLmRpcmVjdGlvbikscj1MZC5kb3QoTGQpLWkqaSxvPXQucmFkaXVzKnQucmFkaXVzO2lmKHI+bylyZXR1cm4gbnVsbDtsZXQgcz1NYXRoLnNxcnQoby1yKSxhPWktcyxsPWkrcztyZXR1cm4gYTwwJiZsPDA/bnVsbDp0aGlzLmF0KGE8MD9sOmEsZSl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWRpc3RhbmNlVG9QbGFuZSh0KXtsZXQgZT10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA9PT1lKXJldHVybiAwPT09dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPzA6bnVsbDtsZXQgaT0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvZTtyZXR1cm4gaT49MD9pOm51bGx9aW50ZXJzZWN0UGxhbmUodCxlKXtsZXQgaT10aGlzLmRpc3RhbmNlVG9QbGFuZSh0KTtyZXR1cm4gbnVsbD09PWk/bnVsbDp0aGlzLmF0KGksZSl9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCBlPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gMD09PWV8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZTwwfWludGVyc2VjdEJveCh0LGUpe2xldCBpLHIsbyxzLGEsbCxjPTEvdGhpcy5kaXJlY3Rpb24ueCxkPTEvdGhpcy5kaXJlY3Rpb24ueSx1PTEvdGhpcy5kaXJlY3Rpb24ueixwPXRoaXMub3JpZ2luO3JldHVybiBjPj0wPyhpPSh0Lm1pbi54LXAueCkqYyxyPSh0Lm1heC54LXAueCkqYyk6KGk9KHQubWF4LngtcC54KSpjLHI9KHQubWluLngtcC54KSpjKSxkPj0wPyhvPSh0Lm1pbi55LXAueSkqZCxzPSh0Lm1heC55LXAueSkqZCk6KG89KHQubWF4LnktcC55KSpkLHM9KHQubWluLnktcC55KSpkKSxpPnN8fG8+cnx8KChvPml8fGkhPWkpJiYoaT1vKSwoczxyfHxyIT1yKSYmKHI9cyksdT49MD8oYT0odC5taW4uei1wLnopKnUsbD0odC5tYXguei1wLnopKnUpOihhPSh0Lm1heC56LXAueikqdSxsPSh0Lm1pbi56LXAueikqdSksaT5sfHxhPnIpfHwoKGE+aXx8aSE9aSkmJihpPWEpLChsPHJ8fHIhPXIpJiYocj1sKSxyPDApP251bGw6dGhpcy5hdChpPj0wP2k6cixlKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiBudWxsIT09dGhpcy5pbnRlcnNlY3RCb3godCxMZCl9aW50ZXJzZWN0VHJpYW5nbGUodCxlLGkscixvKXtUMy5zdWJWZWN0b3JzKGUsdCksakQuc3ViVmVjdG9ycyhpLHQpLEQzLmNyb3NzVmVjdG9ycyhUMyxqRCk7bGV0IGEscz10aGlzLmRpcmVjdGlvbi5kb3QoRDMpO2lmKHM+MCl7aWYocilyZXR1cm4gbnVsbDthPTF9ZWxzZXtpZighKHM8MCkpcmV0dXJuIG51bGw7YT0tMSxzPS1zfXNwLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9YSp0aGlzLmRpcmVjdGlvbi5kb3QoakQuY3Jvc3NWZWN0b3JzKHNwLGpEKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPWEqdGhpcy5kaXJlY3Rpb24uZG90KFQzLmNyb3NzKHNwKSk7aWYoYzwwfHxsK2M+cylyZXR1cm4gbnVsbDtsZXQgZD0tYSpzcC5kb3QoRDMpO3JldHVybiBkPDA/bnVsbDp0aGlzLmF0KGQvcyxvKX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMub3JpZ2luLmFwcGx5TWF0cml4NCh0KSx0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJnQuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSx4bj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIsTSl7bGV0IHk9dGhpcy5lbGVtZW50cztyZXR1cm4geVswXT10LHlbNF09ZSx5WzhdPWkseVsxMl09cix5WzFdPW8seVs1XT1zLHlbOV09YSx5WzEzXT1sLHlbMl09Yyx5WzZdPWQseVsxMF09dSx5WzE0XT1wLHlbM109Zix5WzddPW0seVsxMV09Yix5WzE1XT1NLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgeG4pLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX1jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSxlWzldPWlbOV0sZVsxMF09aVsxMF0sZVsxMV09aVsxMV0sZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sZVsxNV09aVsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzNdLGVbNl0sMCxlWzFdLGVbNF0sZVs3XSwwLGVbMl0sZVs1XSxlWzhdLDAsMCwwLDAsMSksdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywyKSx0aGlzfW1ha2VCYXNpcyh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQueCxlLngsaS54LDAsdC55LGUueSxpLnksMCx0LnosZS56LGkueiwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdFJvdGF0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzLHI9MS9NMC5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbz0xL00wLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxzPTEvTTAuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPWlbMF0qcixlWzFdPWlbMV0qcixlWzJdPWlbMl0qcixlWzNdPTAsZVs0XT1pWzRdKm8sZVs1XT1pWzVdKm8sZVs2XT1pWzZdKm8sZVs3XT0wLGVbOF09aVs4XSpzLGVbOV09aVs5XSpzLGVbMTBdPWlbMTBdKnMsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LG89dC56LHM9TWF0aC5jb3MoaSksYT1NYXRoLnNpbihpKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4ociksZD1NYXRoLmNvcyhvKSx1PU1hdGguc2luKG8pO2lmKCJYWVoiPT09dC5vcmRlcil7bGV0IHA9cypkLGY9cyp1LG09YSpkLGI9YSp1O2VbMF09bCpkLGVbNF09LWwqdSxlWzhdPWMsZVsxXT1mK20qYyxlWzVdPXAtYipjLGVbOV09LWEqbCxlWzJdPWItcCpjLGVbNl09bStmKmMsZVsxMF09cypsfWVsc2UgaWYoIllYWiI9PT10Lm9yZGVyKXtsZXQgcD1sKmQsZj1sKnUsbT1jKmQsYj1jKnU7ZVswXT1wK2IqYSxlWzRdPW0qYS1mLGVbOF09cypjLGVbMV09cyp1LGVbNV09cypkLGVbOV09LWEsZVsyXT1mKmEtbSxlWzZdPWIrcCphLGVbMTBdPXMqbH1lbHNlIGlmKCJaWFkiPT09dC5vcmRlcil7bGV0IHA9bCpkLGY9bCp1LG09YypkLGI9Yyp1O2VbMF09cC1iKmEsZVs0XT0tcyp1LGVbOF09bStmKmEsZVsxXT1mK20qYSxlWzVdPXMqZCxlWzldPWItcCphLGVbMl09LXMqYyxlWzZdPWEsZVsxMF09cypsfWVsc2UgaWYoIlpZWCI9PT10Lm9yZGVyKXtsZXQgcD1zKmQsZj1zKnUsbT1hKmQsYj1hKnU7ZVswXT1sKmQsZVs0XT1tKmMtZixlWzhdPXAqYytiLGVbMV09bCp1LGVbNV09YipjK3AsZVs5XT1mKmMtbSxlWzJdPS1jLGVbNl09YSpsLGVbMTBdPXMqbH1lbHNlIGlmKCJZWlgiPT09dC5vcmRlcil7bGV0IHA9cypsLGY9cypjLG09YSpsLGI9YSpjO2VbMF09bCpkLGVbNF09Yi1wKnUsZVs4XT1tKnUrZixlWzFdPXUsZVs1XT1zKmQsZVs5XT0tYSpkLGVbMl09LWMqZCxlWzZdPWYqdSttLGVbMTBdPXAtYip1fWVsc2UgaWYoIlhaWSI9PT10Lm9yZGVyKXtsZXQgcD1zKmwsZj1zKmMsbT1hKmwsYj1hKmM7ZVswXT1sKmQsZVs0XT0tdSxlWzhdPWMqZCxlWzFdPXAqdStiLGVbNV09cypkLGVbOV09Zip1LW0sZVsyXT1tKnUtZixlWzZdPWEqZCxlWzEwXT1iKnUrcH1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKFNSZSx0LEVSZSl9bG9va0F0KHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiBiYS5zdWJWZWN0b3JzKHQsZSksMD09PWJhLmxlbmd0aFNxKCkmJihiYS56PTEpLGJhLm5vcm1hbGl6ZSgpLGFwLmNyb3NzVmVjdG9ycyhpLGJhKSwwPT09YXAubGVuZ3RoU3EoKSYmKDE9PT1NYXRoLmFicyhpLnopP2JhLngrPTFlLTQ6YmEueis9MWUtNCxiYS5ub3JtYWxpemUoKSxhcC5jcm9zc1ZlY3RvcnMoaSxiYSkpLGFwLm5vcm1hbGl6ZSgpLEdELmNyb3NzVmVjdG9ycyhiYSxhcCksclswXT1hcC54LHJbNF09R0QueCxyWzhdPWJhLngsclsxXT1hcC55LHJbNV09R0QueSxyWzldPWJhLnksclsyXT1hcC56LHJbNl09R0QueixyWzEwXT1iYS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXModCxlKSk6dGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMscz1pWzBdLGE9aVs0XSxsPWlbOF0sYz1pWzEyXSxkPWlbMV0sdT1pWzVdLHA9aVs5XSxmPWlbMTNdLG09aVsyXSxiPWlbNl0sTT1pWzEwXSx5PWlbMTRdLHg9aVszXSxSPWlbN10sQT1pWzExXSxWPWlbMTVdLHRlPXJbMF0sSz1yWzRdLHhlPXJbOF0sWGU9clsxMl0sRGU9clsxXSxEPXJbNV0scmU9cls5XSxjZT1yWzEzXSxmZT1yWzJdLGJlPXJbNl0sbmU9clsxMF0sZGU9clsxNF0scGU9clszXSxqZT1yWzddLENlPXJbMTFdLE5lPXJbMTVdO3JldHVybiBvWzBdPXMqdGUrYSpEZStsKmZlK2MqcGUsb1s0XT1zKksrYSpEK2wqYmUrYypqZSxvWzhdPXMqeGUrYSpyZStsKm5lK2MqQ2Usb1sxMl09cypYZSthKmNlK2wqZGUrYypOZSxvWzFdPWQqdGUrdSpEZStwKmZlK2YqcGUsb1s1XT1kKksrdSpEK3AqYmUrZipqZSxvWzldPWQqeGUrdSpyZStwKm5lK2YqQ2Usb1sxM109ZCpYZSt1KmNlK3AqZGUrZipOZSxvWzJdPW0qdGUrYipEZStNKmZlK3kqcGUsb1s2XT1tKksrYipEK00qYmUreSpqZSxvWzEwXT1tKnhlK2IqcmUrTSpuZSt5KkNlLG9bMTRdPW0qWGUrYipjZStNKmRlK3kqTmUsb1szXT14KnRlK1IqRGUrQSpmZStWKnBlLG9bN109eCpLK1IqRCtBKmJlK1YqamUsb1sxMV09eCp4ZStSKnJlK0EqbmUrVipDZSxvWzE1XT14KlhlK1IqY2UrQSpkZStWKk5lLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzRdLHI9dFs4XSxvPXRbMTJdLHM9dFsxXSxhPXRbNV0sbD10WzldLGM9dFsxM10sZD10WzJdLHU9dFs2XSxwPXRbMTBdLGY9dFsxNF07cmV0dXJuIHRbM10qKCtvKmwqdS1yKmMqdS1vKmEqcCtpKmMqcCtyKmEqZi1pKmwqZikrdFs3XSooK2UqbCpmLWUqYypwK28qcypwLXIqcypmK3IqYypkLW8qbCpkKSt0WzExXSooK2UqYyp1LWUqYSpmLW8qcyp1K2kqcypmK28qYSpkLWkqYypkKSt0WzE1XSooLXIqYSpkLWUqbCp1K2UqYSpwK3Iqcyp1LWkqcypwK2kqbCpkKX10cmFuc3Bvc2UoKXtsZXQgZSx0PXRoaXMuZWxlbWVudHM7cmV0dXJuIGU9dFsxXSx0WzFdPXRbNF0sdFs0XT1lLGU9dFsyXSx0WzJdPXRbOF0sdFs4XT1lLGU9dFs2XSx0WzZdPXRbOV0sdFs5XT1lLGU9dFszXSx0WzNdPXRbMTJdLHRbMTJdPWUsZT10WzddLHRbN109dFsxM10sdFsxM109ZSxlPXRbMTFdLHRbMTFdPXRbMTRdLHRbMTRdPWUsdGhpc31zZXRQb3NpdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56KTooclsxMl09dCxyWzEzXT1lLHJbMTRdPWkpLHRoaXN9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLGQ9dFs4XSx1PXRbOV0scD10WzEwXSxmPXRbMTFdLG09dFsxMl0sYj10WzEzXSxNPXRbMTRdLHk9dFsxNV0seD11Kk0qYy1iKnAqYytiKmwqZi1hKk0qZi11KmwqeSthKnAqeSxSPW0qcCpjLWQqTSpjLW0qbCpmK3MqTSpmK2QqbCp5LXMqcCp5LEE9ZCpiKmMtbSp1KmMrbSphKmYtcypiKmYtZCphKnkrcyp1KnksVj1tKnUqbC1kKmIqbC1tKmEqcCtzKmIqcCtkKmEqTS1zKnUqTSx0ZT1lKngraSpSK3IqQStvKlY7aWYoMD09PXRlKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgSz0xL3RlO3JldHVybiB0WzBdPXgqSyx0WzFdPShiKnAqby11Kk0qby1iKnIqZitpKk0qZit1KnIqeS1pKnAqeSkqSyx0WzJdPShhKk0qby1iKmwqbytiKnIqYy1pKk0qYy1hKnIqeStpKmwqeSkqSyx0WzNdPSh1Kmwqby1hKnAqby11KnIqYytpKnAqYythKnIqZi1pKmwqZikqSyx0WzRdPVIqSyx0WzVdPShkKk0qby1tKnAqbyttKnIqZi1lKk0qZi1kKnIqeStlKnAqeSkqSyx0WzZdPShtKmwqby1zKk0qby1tKnIqYytlKk0qYytzKnIqeS1lKmwqeSkqSyx0WzddPShzKnAqby1kKmwqbytkKnIqYy1lKnAqYy1zKnIqZitlKmwqZikqSyx0WzhdPUEqSyx0WzldPShtKnUqby1kKmIqby1tKmkqZitlKmIqZitkKmkqeS1lKnUqeSkqSyx0WzEwXT0ocypiKm8tbSphKm8rbSppKmMtZSpiKmMtcyppKnkrZSphKnkpKkssdFsxMV09KGQqYSpvLXMqdSpvLWQqaSpjK2UqdSpjK3MqaSpmLWUqYSpmKSpLLHRbMTJdPVYqSyx0WzEzXT0oZCpiKnItbSp1KnIrbSppKnAtZSpiKnAtZCppKk0rZSp1Kk0pKkssdFsxNF09KG0qYSpyLXMqYipyLW0qaSpsK2UqYipsK3MqaSpNLWUqYSpNKSpLLHRbMTVdPShzKnUqci1kKmEqcitkKmkqbC1lKnUqbC1zKmkqcCtlKmEqcCkqSyx0aGlzfXNjYWxlKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lno7cmV0dXJuIGVbMF0qPWksZVs0XSo9cixlWzhdKj1vLGVbMV0qPWksZVs1XSo9cixlWzldKj1vLGVbMl0qPWksZVs2XSo9cixlWzEwXSo9byxlWzNdKj1pLGVbN10qPXIsZVsxMV0qPW8sdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2xldCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLGksMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCxlLC1pLDAsMCxpLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblkodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLGksMCwwLDEsMCwwLC1pLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1pLDAsMCxpLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPTEtaSxzPXQueCxhPXQueSxsPXQueixjPW8qcyxkPW8qYTtyZXR1cm4gdGhpcy5zZXQoYypzK2ksYyphLXIqbCxjKmwrciphLDAsYyphK3IqbCxkKmEraSxkKmwtcipzLDAsYypsLXIqYSxkKmwrcipzLG8qbCpsK2ksMCwwLDAsMCwxKSx0aGlzfW1ha2VTY2FsZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQsMCwwLDAsMCxlLDAsMCwwLDAsaSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNoZWFyKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5zZXQoMSxpLG8sMCx0LDEscywwLGUsciwxLDAsMCwwLDAsMSksdGhpc31jb21wb3NlKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzLG89ZS5feCxzPWUuX3ksYT1lLl96LGw9ZS5fdyxjPW8rbyxkPXMrcyx1PWErYSxwPW8qYyxmPW8qZCxtPW8qdSxiPXMqZCxNPXMqdSx5PWEqdSx4PWwqYyxSPWwqZCxBPWwqdSxWPWkueCx0ZT1pLnksSz1pLno7cmV0dXJuIHJbMF09KDEtKGIreSkpKlYsclsxXT0oZitBKSpWLHJbMl09KG0tUikqVixyWzNdPTAscls0XT0oZi1BKSp0ZSxyWzVdPSgxLShwK3kpKSp0ZSxyWzZdPShNK3gpKnRlLHJbN109MCxyWzhdPShtK1IpKksscls5XT0oTS14KSpLLHJbMTBdPSgxLShwK2IpKSpLLHJbMTFdPTAsclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnosclsxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxvPU0wLnNldChyWzBdLHJbMV0sclsyXSkubGVuZ3RoKCkscz1NMC5zZXQocls0XSxyWzVdLHJbNl0pLmxlbmd0aCgpLGE9TTAuc2V0KHJbOF0scls5XSxyWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9clsxMl0sdC55PXJbMTNdLHQuej1yWzE0XSxRbC5jb3B5KHRoaXMpO2xldCBjPTEvbyxkPTEvcyx1PTEvYTtyZXR1cm4gUWwuZWxlbWVudHNbMF0qPWMsUWwuZWxlbWVudHNbMV0qPWMsUWwuZWxlbWVudHNbMl0qPWMsUWwuZWxlbWVudHNbNF0qPWQsUWwuZWxlbWVudHNbNV0qPWQsUWwuZWxlbWVudHNbNl0qPWQsUWwuZWxlbWVudHNbOF0qPXUsUWwuZWxlbWVudHNbOV0qPXUsUWwuZWxlbWVudHNbMTBdKj11LGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFFsKSxpLng9byxpLnk9cyxpLno9YSx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsaSxyLG8scyl7dm9pZCAwPT09cyYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IGE9dGhpcy5lbGVtZW50cyxjPTIqby8oaS1yKSxkPShlK3QpLyhlLXQpLHU9KGkrcikvKGktcikscD0tKHMrbykvKHMtbyksZj0tMipzKm8vKHMtbyk7cmV0dXJuIGFbMF09MipvLyhlLXQpLGFbNF09MCxhWzhdPWQsYVsxMl09MCxhWzFdPTAsYVs1XT1jLGFbOV09dSxhWzEzXT0wLGFbMl09MCxhWzZdPTAsYVsxMF09cCxhWzE0XT1mLGFbM109MCxhWzddPTAsYVsxMV09LTEsYVsxNV09MCx0aGlzfW1ha2VPcnRob2dyYXBoaWModCxlLGkscixvLHMpe2xldCBhPXRoaXMuZWxlbWVudHMsbD0xLyhlLXQpLGM9MS8oaS1yKSxkPTEvKHMtbyksdT0oZSt0KSpsLHA9KGkrcikqYyxmPShzK28pKmQ7cmV0dXJuIGFbMF09MipsLGFbNF09MCxhWzhdPTAsYVsxMl09LXUsYVsxXT0wLGFbNV09MipjLGFbOV09MCxhWzEzXT0tcCxhWzJdPTAsYVs2XT0wLGFbMTBdPS0yKmQsYVsxNF09LWYsYVszXT0wLGFbN109MCxhWzExXT0wLGFbMTVdPTEsdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjwxNjtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDE2O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdFtlKzldPWlbOV0sdFtlKzEwXT1pWzEwXSx0W2UrMTFdPWlbMTFdLHRbZSsxMl09aVsxMl0sdFtlKzEzXT1pWzEzXSx0W2UrMTRdPWlbMTRdLHRbZSsxNV09aVsxNV0sdH19O3huLnByb3RvdHlwZS5pc01hdHJpeDQ9ITA7dmFyIE0wPW5ldyAkLFFsPW5ldyB4bixTUmU9bmV3ICQoMCwwLDApLEVSZT1uZXcgJCgxLDEsMSksYXA9bmV3ICQsR0Q9bmV3ICQsYmE9bmV3ICQseiQ9bmV3IHhuLFUkPW5ldyB0cyx5cD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPXlwLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cn1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZT10aGlzLl9vcmRlcixpPSEwKXtsZXQgcj10LmVsZW1lbnRzLG89clswXSxzPXJbNF0sYT1yWzhdLGw9clsxXSxjPXJbNV0sZD1yWzldLHU9clsyXSxwPXJbNl0sZj1yWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKEtzKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLWQsZiksdGhpcy5fej1NYXRoLmF0YW4yKC1zLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKHAsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLUtzKGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoYSxmKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtdSxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihLcyhwLC0xLDEpKSxNYXRoLmFicyhwKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC11LGYpLHRoaXMuX3o9TWF0aC5hdGFuMigtcyxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1Lcyh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKHAsZiksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1zLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oS3MobCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtZCxjKSx0aGlzLl95PU1hdGguYXRhbjIoLXUsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGEsZikpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtS3MocywtMSwxKSksTWF0aC5hYnMocyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihwLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihhLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC1kLGYpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSwhMD09PWkmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4geiQubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoeiQsZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBVJC5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihVJCx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx2b2lkIDAhPT10WzNdJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyAkKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07eXAucHJvdG90eXBlLmlzRXVsZXI9ITAseXAuRGVmYXVsdE9yZGVyPSJYWVoiLHlwLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIENJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayZ0Lm1hc2spfWlzRW5hYmxlZCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayYoMTw8dHwwKSl9fSxUUmU9MCxqJD1uZXcgJCx3MD1uZXcgdHMsQmQ9bmV3IHhuLFdEPW5ldyAkLHN4PW5ldyAkLERSZT1uZXcgJCxJUmU9bmV3IHRzLEckPW5ldyAkKDEsMCwwKSxXJD1uZXcgJCgwLDEsMCkscSQ9bmV3ICQoMCwwLDEpLEFSZT17dHlwZToiYWRkZWQifSxZJD17dHlwZToicmVtb3ZlZCJ9LEJpPWNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOlRSZSsrfSksdGhpcy51dWlkPUpsKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPUJpLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyAkLGU9bmV3IHlwLGk9bmV3IHRzLHI9bmV3ICQoMSwxLDEpO2UuX29uQ2hhbmdlKGZ1bmN0aW9uKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9KSxpLl9vbkNoYW5nZShmdW5jdGlvbigpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTplfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTppfSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgeG59LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGJvfX0pLHRoaXMubWF0cml4PW5ldyB4bix0aGlzLm1hdHJpeFdvcmxkPW5ldyB4bix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9QmkuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBDSSx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxlKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LGUpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxlKXtyZXR1cm4gdzAuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseSh3MCksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LGUpe3JldHVybiB3MC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHcwKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKEckLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKFckLHQpfXJvdGF0ZVoodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHEkLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LGUpe3JldHVybiBqJC5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKGokLm11bHRpcGx5U2NhbGFyKGUpKSx0aGlzfXRyYW5zbGF0ZVgodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKEckLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKFckLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHEkLHQpfWxvY2FsVG9Xb3JsZCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9d29ybGRUb0xvY2FsKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NChCZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpKX1sb29rQXQodCxlLGkpe3QuaXNWZWN0b3IzP1dELmNvcHkodCk6V0Quc2V0KHQsZSxpKTtsZXQgcj10aGlzLnBhcmVudDt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxzeC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCksdGhpcy5pc0NhbWVyYXx8dGhpcy5pc0xpZ2h0P0JkLmxvb2tBdChzeCxXRCx0aGlzLnVwKTpCZC5sb29rQXQoV0Qsc3gsdGhpcy51cCksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChCZCksciYmKEJkLmV4dHJhY3RSb3RhdGlvbihyLm1hdHJpeFdvcmxkKSx3MC5zZXRGcm9tUm90YXRpb25NYXRyaXgoQmQpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh3MC5pbnZlcnQoKSkpfWFkZCh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdGhpcy5hZGQoYXJndW1lbnRzW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4gdD09PXRoaXM/KGNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IGNhbid0IGJlIGFkZGVkIGFzIGEgY2hpbGQgb2YgaXRzZWxmLiIsdCksdGhpcyk6KHQmJnQuaXNPYmplY3QzRD8obnVsbCE9PXQucGFyZW50JiZ0LnBhcmVudC5yZW1vdmUodCksdC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcmVuLnB1c2godCksdC5kaXNwYXRjaEV2ZW50KEFSZSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2ldKTtyZXR1cm4gdGhpc31sZXQgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuLTEhPT1lJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShlLDEpLHQuZGlzcGF0Y2hFdmVudChZJCkpLHRoaXN9cmVtb3ZlRnJvbVBhcmVudCgpe2xldCB0PXRoaXMucGFyZW50O3JldHVybiBudWxsIT09dCYmdC5yZW1vdmUodGhpcyksdGhpc31jbGVhcigpe2ZvcihsZXQgdD0wO3Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7dCsrKXtsZXQgZT10aGlzLmNoaWxkcmVuW3RdO2UucGFyZW50PW51bGwsZS5kaXNwYXRjaEV2ZW50KFkkKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksQmQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksQmQubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChCZCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dGhpcy5jaGlsZHJlbltpXS5nZXRPYmplY3RCeVByb3BlcnR5KHQsZSk7aWYodm9pZCAwIT09cylyZXR1cm4gc319Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShzeCx0LERSZSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShzeCxJUmUsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZighMT09PXRoaXMudmlzaWJsZSlyZXR1cm47dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgZT10aGlzLnBhcmVudDtudWxsIT09ZSYmKHQoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe2xldCBpPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PWkmJmkudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQsaT17fTtlJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0saS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgcj17fTtmdW5jdGlvbiBvKGEsbCl7cmV0dXJuIHZvaWQgMD09PWFbbC51dWlkXSYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHIudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHIubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoci5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKHIucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihyLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoci5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksbnVsbCE9PXRoaXMuaW5zdGFuY2VDb2xvciYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKSx0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/ci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoci5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7ci5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgYT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09YSYmdm9pZCAwIT09YS5zaGFwZXMpe2xldCBsPWEuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsZD1sLmxlbmd0aDtjPGQ7YysrKW8odC5zaGFwZXMsbFtjXSk7ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihyLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsci5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdm9pZCAwIT09dGhpcy5za2VsZXRvbiYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksci5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx2b2lkIDAhPT10aGlzLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBhPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylhLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7ci5tYXRlcmlhbD1hfWVsc2Ugci5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe3IuY2hpbGRyZW49W107Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bYV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtyLmFuaW1hdGlvbnM9W107Zm9yKGxldCBhPTA7YTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2ErKylyLmFuaW1hdGlvbnMucHVzaChvKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbYV0pKX1pZihlKXtsZXQgYT1zKHQuZ2VvbWV0cmllcyksbD1zKHQubWF0ZXJpYWxzKSxjPXModC50ZXh0dXJlcyksZD1zKHQuaW1hZ2VzKSx1PXModC5zaGFwZXMpLHA9cyh0LnNrZWxldG9ucyksZj1zKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksZC5sZW5ndGg+MCYmKGkuaW1hZ2VzPWQpLHUubGVuZ3RoPjAmJihpLnNoYXBlcz11KSxwLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9cCksZi5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1mKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIHMoYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCBkPWFbY107ZGVsZXRlIGQubWV0YWRhdGEsbC5wdXNoKGQpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLCEwPT09ZSlmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl0aGlzLmFkZCh0LmNoaWxkcmVuW2ldLmNsb25lKCkpO3JldHVybiB0aGlzfX07QmkuRGVmYXVsdFVwPW5ldyAkKDAsMSwwKSxCaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMCxCaS5wcm90b3R5cGUuaXNPYmplY3QzRD0hMDt2YXIgWmw9bmV3ICQsVmQ9bmV3ICQsSTM9bmV3ICQsSGQ9bmV3ICQsUzA9bmV3ICQsRTA9bmV3ICQsWCQ9bmV3ICQsQTM9bmV3ICQsUjM9bmV3ICQsUDM9bmV3ICQsVnI9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgJCxlPW5ldyAkLGk9bmV3ICQpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1pfXN0YXRpYyBnZXROb3JtYWwodCxlLGkscil7ci5zdWJWZWN0b3JzKGksZSksWmwuc3ViVmVjdG9ycyh0LGUpLHIuY3Jvc3MoWmwpO2xldCBvPXIubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP3IubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOnIuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQsZSxpLHIsbyl7Wmwuc3ViVmVjdG9ycyhyLGUpLFZkLnN1YlZlY3RvcnMoaSxlKSxJMy5zdWJWZWN0b3JzKHQsZSk7bGV0IHM9WmwuZG90KFpsKSxhPVpsLmRvdChWZCksbD1abC5kb3QoSTMpLGM9VmQuZG90KFZkKSxkPVZkLmRvdChJMyksdT1zKmMtYSphO2lmKDA9PT11KXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IHA9MS91LGY9KGMqbC1hKmQpKnAsbT0ocypkLWEqbCkqcDtyZXR1cm4gby5zZXQoMS1mLW0sbSxmKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixIZCksSGQueD49MCYmSGQueT49MCYmSGQueCtIZC55PD0xfXN0YXRpYyBnZXRVVih0LGUsaSxyLG8scyxhLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsaSxyLEhkKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sSGQueCksbC5hZGRTY2FsZWRWZWN0b3IocyxIZC55KSxsLmFkZFNjYWxlZFZlY3RvcihhLEhkLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxlLGkscil7cmV0dXJuIFpsLnN1YlZlY3RvcnMoaSxlKSxWZC5zdWJWZWN0b3JzKHQsZSksWmwuY3Jvc3MoVmQpLmRvdChyKTwwfXNldCh0LGUsaSl7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KGUpLHRoaXMuYy5jb3B5KGkpLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5jb3B5KHRbZV0pLHRoaXMuYi5jb3B5KHRbaV0pLHRoaXMuYy5jb3B5KHRbcl0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxpKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hLmNvcHkodC5hKSx0aGlzLmIuY29weSh0LmIpLHRoaXMuYy5jb3B5KHQuYyksdGhpc31nZXRBcmVhKCl7cmV0dXJuIFpsLnN1YlZlY3RvcnModGhpcy5jLHRoaXMuYiksVmQuc3ViVmVjdG9ycyh0aGlzLmEsdGhpcy5iKSwuNSpabC5jcm9zcyhWZCkubGVuZ3RoKCl9Z2V0TWlkcG9pbnQodCl7cmV0dXJuIHQuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfWdldE5vcm1hbCh0KXtyZXR1cm4gVnIuZ2V0Tm9ybWFsKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWdldFBsYW5lKHQpe3JldHVybiB0LnNldEZyb21Db3BsYW5hclBvaW50cyh0aGlzLmEsdGhpcy5iLHRoaXMuYyl9Z2V0QmFyeWNvb3JkKHQsZSl7cmV0dXJuIFZyLmdldEJhcnljb29yZCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUpfWdldFVWKHQsZSxpLHIsbyl7cmV0dXJuIFZyLmdldFVWKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSxpLHIsbyl9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gVnIuY29udGFpbnNQb2ludCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1pc0Zyb250RmFjaW5nKHQpe3JldHVybiBWci5pc0Zyb250RmFjaW5nKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1RyaWFuZ2xlKHRoaXMpfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtsZXQgcyxhLGk9dGhpcy5hLHI9dGhpcy5iLG89dGhpcy5jO1MwLnN1YlZlY3RvcnMocixpKSxFMC5zdWJWZWN0b3JzKG8saSksQTMuc3ViVmVjdG9ycyh0LGkpO2xldCBsPVMwLmRvdChBMyksYz1FMC5kb3QoQTMpO2lmKGw8PTAmJmM8PTApcmV0dXJuIGUuY29weShpKTtSMy5zdWJWZWN0b3JzKHQscik7bGV0IGQ9UzAuZG90KFIzKSx1PUUwLmRvdChSMyk7aWYoZD49MCYmdTw9ZClyZXR1cm4gZS5jb3B5KHIpO2xldCBwPWwqdS1kKmM7aWYocDw9MCYmbD49MCYmZDw9MClyZXR1cm4gcz1sLyhsLWQpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoUzAscyk7UDMuc3ViVmVjdG9ycyh0LG8pO2xldCBmPVMwLmRvdChQMyksbT1FMC5kb3QoUDMpO2lmKG0+PTAmJmY8PW0pcmV0dXJuIGUuY29weShvKTtsZXQgYj1mKmMtbCptO2lmKGI8PTAmJmM+PTAmJm08PTApcmV0dXJuIGE9Yy8oYy1tKSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKEUwLGEpO2xldCBNPWQqbS1mKnU7aWYoTTw9MCYmdS1kPj0wJiZmLW0+PTApcmV0dXJuIFgkLnN1YlZlY3RvcnMobyxyKSxhPSh1LWQpLyh1LWQrKGYtbSkpLGUuY29weShyKS5hZGRTY2FsZWRWZWN0b3IoWCQsYSk7bGV0IHk9MS8oTStiK3ApO3JldHVybiBzPWIqeSxhPXAqeSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKFMwLHMpLmFkZFNjYWxlZFZlY3RvcihFMCxhKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxSUmU9MCxBbz1jbGFzcyBleHRlbmRzIFVke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpSUmUrK30pLHRoaXMudXVpZD1KbCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPWd4LHRoaXMuc2lkZT15eCx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9V2VlLHRoaXMuYmxlbmREc3Q9cWVlLHRoaXMuYmxlbmRFcXVhdGlvbj1CMCx0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPVozLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9NTE5LHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPTc2ODAsdGhpcy5zdGVuY2lsWkZhaWw9NzY4MCx0aGlzLnN0ZW5jaWxaUGFzcz03NjgwLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHZvaWQgMCE9PXQpZm9yKGxldCBlIGluIHQpe2xldCBpPXRbZV07aWYodm9pZCAwPT09aSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKCJzaGFkaW5nIj09PWUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PWk7Y29udGludWV9bGV0IHI9dGhpc1tlXTt2b2lkIDAhPT1yP3ImJnIuaXNDb2xvcj9yLnNldChpKTpyJiZyLmlzVmVjdG9yMyYmaSYmaS5pc1ZlY3RvcjM/ci5jb3B5KGkpOnRoaXNbZV09aTpjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK2UrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKX19dG9KU09OKHQpe2xldCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdDtlJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IGk9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZnVuY3Rpb24gcihvKXtsZXQgcz1bXTtmb3IobGV0IGEgaW4gbyl7bGV0IGw9b1thXTtkZWxldGUgbC5tZXRhZGF0YSxzLnB1c2gobCl9cmV0dXJuIHN9aWYoaS51dWlkPXRoaXMudXVpZCxpLnR5cGU9dGhpcy50eXBlLCIiIT09dGhpcy5uYW1lJiYoaS5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYoaS5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKGkucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKGkubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx2b2lkIDAhPT10aGlzLnNoZWVuJiYoaS5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYoaS5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGVlblJvdWdobmVzcyYmKGkuc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYoaS5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiYxIT09dGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYoaS5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnNwZWN1bGFySW50ZW5zaXR5JiYoaS5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYoaS5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihpLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXQmJihpLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MmJihpLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxpLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYoaS5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihpLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihpLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYoaS5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLGkubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihpLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsaS5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihpLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLGkuYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxpLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYoaS5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsaS5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLGkuZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihpLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKGkubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKGkuZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYoaS5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdm9pZCAwIT09dGhpcy5jb21iaW5lJiYoaS5jb21iaW5lPXRoaXMuY29tYmluZSkpLHZvaWQgMCE9PXRoaXMuZW52TWFwSW50ZW5zaXR5JiYoaS5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHZvaWQgMCE9PXRoaXMucmVmbGVjdGl2aXR5JiYoaS5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHZvaWQgMCE9PXRoaXMucmVmcmFjdGlvblJhdGlvJiYoaS5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYoaS5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRyYW5zbWlzc2lvbiYmKGkudHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYoaS50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMudGhpY2tuZXNzJiYoaS50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihpLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlJiYoaS5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdm9pZCAwIT09dGhpcy5hdHRlbnVhdGlvbkNvbG9yJiYoaS5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaXplJiYoaS5zaXplPXRoaXMuc2l6ZSksbnVsbCE9PXRoaXMuc2hhZG93U2lkZSYmKGkuc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHZvaWQgMCE9PXRoaXMuc2l6ZUF0dGVudWF0aW9uJiYoaS5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLHRoaXMuYmxlbmRpbmchPT1neCYmKGkuYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksdGhpcy5zaWRlIT09eXgmJihpLnNpZGU9dGhpcy5zaWRlKSx0aGlzLnZlcnRleENvbG9ycyYmKGkudmVydGV4Q29sb3JzPSEwKSx0aGlzLm9wYWNpdHk8MSYmKGkub3BhY2l0eT10aGlzLm9wYWNpdHkpLCEwPT09dGhpcy50cmFuc3BhcmVudCYmKGkudHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCksaS5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmMsaS5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3QsaS5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZSxpLmNvbG9yV3JpdGU9dGhpcy5jb2xvcldyaXRlLGkuYWxwaGFXcml0ZT10aGlzLmFscGhhV3JpdGUsaS5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsaS5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxpLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsaS5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixpLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxpLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsaS5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsaS5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmMCE9PXRoaXMucm90YXRpb24mJihpLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLCEwPT09dGhpcy5wb2x5Z29uT2Zmc2V0JiYoaS5wb2x5Z29uT2Zmc2V0PSEwKSwwIT09dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yJiYoaS5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksMCE9PXRoaXMucG9seWdvbk9mZnNldFVuaXRzJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiYxIT09dGhpcy5saW5ld2lkdGgmJihpLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdm9pZCAwIT09dGhpcy5kYXNoU2l6ZSYmKGkuZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdm9pZCAwIT09dGhpcy5nYXBTaXplJiYoaS5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdm9pZCAwIT09dGhpcy5zY2FsZSYmKGkuc2NhbGU9dGhpcy5zY2FsZSksITA9PT10aGlzLmRpdGhlcmluZyYmKGkuZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYoaS5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLCEwPT09dGhpcy5hbHBoYVRvQ292ZXJhZ2UmJihpLmFscGhhVG9Db3ZlcmFnZT10aGlzLmFscGhhVG9Db3ZlcmFnZSksITA9PT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSYmKGkucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKSwhMD09PXRoaXMud2lyZWZyYW1lJiYoaS53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPjEmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCksInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWNhcCYmKGkud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApLCJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVqb2luJiYoaS53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKSwhMD09PXRoaXMuZmxhdFNoYWRpbmcmJihpLmZsYXRTaGFkaW5nPXRoaXMuZmxhdFNoYWRpbmcpLCExPT09dGhpcy52aXNpYmxlJiYoaS52aXNpYmxlPSExKSwhMT09PXRoaXMudG9uZU1hcHBlZCYmKGkudG9uZU1hcHBlZD0hMSksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxlKXtsZXQgbz1yKHQudGV4dHVyZXMpLHM9cih0LmltYWdlcyk7by5sZW5ndGg+MCYmKGkudGV4dHVyZXM9bykscy5sZW5ndGg+MCYmKGkuaW1hZ2VzPXMpfXJldHVybiBpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmZvZz10LmZvZyx0aGlzLmJsZW5kaW5nPXQuYmxlbmRpbmcsdGhpcy5zaWRlPXQuc2lkZSx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7bGV0IGU9dC5jbGlwcGluZ1BsYW5lcyxpPW51bGw7aWYobnVsbCE9PWUpe2xldCByPWUubGVuZ3RoO2k9bmV3IEFycmF5KHIpO2ZvcihsZXQgbz0wO28hPT1yOysrbylpW29dPWVbb10uY2xvbmUoKX1yZXR1cm4gdGhpcy5jbGlwcGluZ1BsYW5lcz1pLHRoaXMuY2xpcEludGVyc2VjdGlvbj10LmNsaXBJbnRlcnNlY3Rpb24sdGhpcy5jbGlwU2hhZG93cz10LmNsaXBTaGFkb3dzLHRoaXMuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUsdGhpcy5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSx0aGlzLmFscGhhV3JpdGU9dC5hbHBoYVdyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLmFscGhhVG9Db3ZlcmFnZT10LmFscGhhVG9Db3ZlcmFnZSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fTtBby5wcm90b3R5cGUuaXNNYXRlcmlhbD0hMDt2YXIgcG09Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPVlJLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3BtLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO3ZhciBkcj1uZXcgJCxxRD1uZXcgJGUsUHI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2lmKEFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLm5hbWU9IiIsdGhpcy5hcnJheT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLmNvdW50PXZvaWQgMCE9PXQ/dC5sZW5ndGgvZTowLHRoaXMubm9ybWFsaXplZD0hMD09PWksdGhpcy51c2FnZT1DeCx0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX0sdGhpcy52ZXJzaW9uPTB9b25VcGxvYWRDYWxsYmFjaygpe31zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK31zZXRVc2FnZSh0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuaXRlbVNpemU9dC5pdGVtU2l6ZSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5ub3JtYWxpemVkPXQubm9ybWFsaXplZCx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuaXRlbVNpemUsaSo9ZS5pdGVtU2l6ZTtmb3IobGV0IHI9MCxvPXRoaXMuaXRlbVNpemU7cjxvO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfWNvcHlBcnJheSh0KXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCksdGhpc31jb3B5Q29sb3JzQXJyYXkodCl7bGV0IGU9dGhpcy5hcnJheSxpPTA7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyPG87cisrKXtsZXQgcz10W3JdO3ZvaWQgMD09PXMmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkIixyKSxzPW5ldyBhbiksZVtpKytdPXMucixlW2krK109cy5nLGVbaSsrXT1zLmJ9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjJzQXJyYXkodCl7bGV0IGU9dGhpcy5hcnJheSxpPTA7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyPG87cisrKXtsZXQgcz10W3JdO3ZvaWQgMD09PXMmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yMnNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixyKSxzPW5ldyAkZSksZVtpKytdPXMueCxlW2krK109cy55fXJldHVybiB0aGlzfWNvcHlWZWN0b3Izc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgJCksZVtpKytdPXMueCxlW2krK109cy55LGVbaSsrXT1zLnp9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjRzQXJyYXkodCl7bGV0IGU9dGhpcy5hcnJheSxpPTA7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyPG87cisrKXtsZXQgcz10W3JdO3ZvaWQgMD09PXMmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixyKSxzPW5ldyBaaSksZVtpKytdPXMueCxlW2krK109cy55LGVbaSsrXT1zLnosZVtpKytdPXMud31yZXR1cm4gdGhpc31hcHBseU1hdHJpeDModCl7aWYoMj09PXRoaXMuaXRlbVNpemUpZm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspcUQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLHFELmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZKGUscUQueCxxRC55KTtlbHNlIGlmKDM9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKWRyLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxkci5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWVooZSxkci54LGRyLnksZHIueik7cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKWRyLng9dGhpcy5nZXRYKGUpLGRyLnk9dGhpcy5nZXRZKGUpLGRyLno9dGhpcy5nZXRaKGUpLGRyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihlLGRyLngsZHIueSxkci56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylkci54PXRoaXMuZ2V0WChlKSxkci55PXRoaXMuZ2V0WShlKSxkci56PXRoaXMuZ2V0WihlKSxkci5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLGRyLngsZHIueSxkci56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspZHIueD10aGlzLmdldFgoZSksZHIueT10aGlzLmdldFkoZSksZHIuej10aGlzLmdldFooZSksZHIudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUsZHIueCxkci55LGRyLnopO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31nZXRYKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV19c2V0WCh0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV09ZSx0aGlzfWdldFkodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdfXNldFkodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMV09ZSx0aGlzfWdldFoodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdfXNldFoodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl09ZSx0aGlzfWdldFcodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdfXNldFcodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM109ZSx0aGlzfXNldFhZKHQsZSxpKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzfXNldFhZWih0LGUsaSxyKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzLmFycmF5W3QrMl09cix0aGlzfXNldFhZWlcodCxlLGkscixvKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzLmFycmF5W3QrMl09cix0aGlzLmFycmF5W3QrM109byx0aGlzfW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXJyYXksdGhpcy5pdGVtU2l6ZSkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH07cmV0dXJuIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSx0aGlzLnVzYWdlIT09Q3gmJih0LnVzYWdlPXRoaXMudXNhZ2UpLCgwIT09dGhpcy51cGRhdGVSYW5nZS5vZmZzZXR8fC0xIT09dGhpcy51cGRhdGVSYW5nZS5jb3VudCkmJih0LnVwZGF0ZVJhbmdlPXRoaXMudXBkYXRlUmFuZ2UpLHR9fTtQci5wcm90b3R5cGUuaXNCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIE1JPWNsYXNzIGV4dGVuZHMgUHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxlLGkpfX0sd0k9Y2xhc3MgZXh0ZW5kcyBQcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQzMkFycmF5KHQpLGUsaSl9fTsoY2xhc3MgZXh0ZW5kcyBQcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsaSl9fSkucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgTnI9Y2xhc3MgZXh0ZW5kcyBQcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IEZsb2F0MzJBcnJheSh0KSxlLGkpfX0sUFJlPTAsb2w9bmV3IHhuLE8zPW5ldyBCaSxUMD1uZXcgJCx2YT1uZXcgeGEsYXg9bmV3IHhhLElvPW5ldyAkLFVpPWNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOlBSZSsrfSksdGhpcy51dWlkPUpsKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiB0aGlzLmluZGV4PUFycmF5LmlzQXJyYXkodCk/bmV3KFFlZSh0KT93STpNSSkodCwxKTp0LHRoaXN9Z2V0QXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF19c2V0QXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XT1lLHRoaXN9ZGVsZXRlQXR0cmlidXRlKHQpe3JldHVybiBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW3RdLHRoaXN9aGFzQXR0cmlidXRlKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLmF0dHJpYnV0ZXNbdF19YWRkR3JvdXAodCxlLGk9MCl7dGhpcy5ncm91cHMucHVzaCh7c3RhcnQ6dCxjb3VudDplLG1hdGVyaWFsSW5kZXg6aX0pfWNsZWFyR3JvdXBzKCl7dGhpcy5ncm91cHM9W119c2V0RHJhd1JhbmdlKHQsZSl7dGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dCx0aGlzLmRyYXdSYW5nZS5jb3VudD1lfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09ZSYmKGUuYXBwbHlNYXRyaXg0KHQpLGUubmVlZHNVcGRhdGU9ITApO2xldCBpPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7aWYodm9pZCAwIT09aSl7bGV0IG89KG5ldyBibykuZ2V0Tm9ybWFsTWF0cml4KHQpO2kuYXBwbHlOb3JtYWxNYXRyaXgobyksaS5uZWVkc1VwZGF0ZT0hMH1sZXQgcj10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtyZXR1cm4gdm9pZCAwIT09ciYmKHIudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHIubmVlZHNVcGRhdGU9ITApLG51bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLG51bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiBvbC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLmFwcGx5TWF0cml4NChvbCksdGhpc31yb3RhdGVYKHQpe3JldHVybiBvbC5tYWtlUm90YXRpb25YKHQpLHRoaXMuYXBwbHlNYXRyaXg0KG9sKSx0aGlzfXJvdGF0ZVkodCl7cmV0dXJuIG9sLm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQob2wpLHRoaXN9cm90YXRlWih0KXtyZXR1cm4gb2wubWFrZVJvdGF0aW9uWih0KSx0aGlzLmFwcGx5TWF0cml4NChvbCksdGhpc310cmFuc2xhdGUodCxlLGkpe3JldHVybiBvbC5tYWtlVHJhbnNsYXRpb24odCxlLGkpLHRoaXMuYXBwbHlNYXRyaXg0KG9sKSx0aGlzfXNjYWxlKHQsZSxpKXtyZXR1cm4gb2wubWFrZVNjYWxlKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChvbCksdGhpc31sb29rQXQodCl7cmV0dXJuIE8zLmxvb2tBdCh0KSxPMy51cGRhdGVNYXRyaXgoKSx0aGlzLmFwcGx5TWF0cml4NChPMy5tYXRyaXgpLHRoaXN9Y2VudGVyKCl7cmV0dXJuIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoVDApLm5lZ2F0ZSgpLHRoaXMudHJhbnNsYXRlKFQwLngsVDAueSxUMC56KSx0aGlzfXNldEZyb21Qb2ludHModCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXtsZXQgbz10W2ldO2UucHVzaChvLngsby55LG8uenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IE5yKGUsMykpLHRoaXN9Y29tcHV0ZUJvdW5kaW5nQm94KCl7bnVsbD09PXRoaXMuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PW5ldyB4YSk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXJldHVybiBjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgYm94LiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdm9pZCB0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgJCgtMS8wLC0xLzAsLTEvMCksbmV3ICQoMS8wLDEvMCwxLzApKTtpZih2b2lkIDAhPT10KXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspdmEuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShlW2ldKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhJby5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLHZhLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KElvKSxJby5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LHZhLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KElvKSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludCh2YS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludCh2YS5tYXgpKX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBicCk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXJldHVybiBjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdm9pZCB0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgJCwxLzApO2lmKHQpe2xldCBpPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKHZhLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IG89MCxzPWUubGVuZ3RoO288cztvKyspYXguc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShlW29dKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhJby5hZGRWZWN0b3JzKHZhLm1pbixheC5taW4pLHZhLmV4cGFuZEJ5UG9pbnQoSW8pLElvLmFkZFZlY3RvcnModmEubWF4LGF4Lm1heCksdmEuZXhwYW5kQnlQb2ludChJbykpOih2YS5leHBhbmRCeVBvaW50KGF4Lm1pbiksdmEuZXhwYW5kQnlQb2ludChheC5tYXgpKTt2YS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IG89MCxzPXQuY291bnQ7bzxzO28rKylJby5mcm9tQnVmZmVyQXR0cmlidXRlKHQsbykscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoSW8pKTtpZihlKWZvcihsZXQgbz0wLHM9ZS5sZW5ndGg7bzxzO28rKyl7bGV0IGE9ZVtvXSxsPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBjPTAsZD1hLmNvdW50O2M8ZDtjKyspSW8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLGwmJihUMC5mcm9tQnVmZmVyQXR0cmlidXRlKHQsYyksSW8uYWRkKFQwKSkscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoSW8pKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQociksaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19Y29tcHV0ZVRhbmdlbnRzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZihudWxsPT09dHx8dm9pZCAwPT09ZS5wb3NpdGlvbnx8dm9pZCAwPT09ZS5ub3JtYWx8fHZvaWQgMD09PWUudXYpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7bGV0IGk9dC5hcnJheSxyPWUucG9zaXRpb24uYXJyYXksbz1lLm5vcm1hbC5hcnJheSxzPWUudXYuYXJyYXksYT1yLmxlbmd0aC8zO3ZvaWQgMD09PWUudGFuZ2VudCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBQcihuZXcgRmxvYXQzMkFycmF5KDQqYSksNCkpO2xldCBsPWUudGFuZ2VudC5hcnJheSxjPVtdLGQ9W107Zm9yKGxldCBEZT0wO0RlPGE7RGUrKyljW0RlXT1uZXcgJCxkW0RlXT1uZXcgJDtsZXQgdT1uZXcgJCxwPW5ldyAkLGY9bmV3ICQsbT1uZXcgJGUsYj1uZXcgJGUsTT1uZXcgJGUseT1uZXcgJCx4PW5ldyAkO2Z1bmN0aW9uIFIoRGUsRCxyZSl7dS5mcm9tQXJyYXkociwzKkRlKSxwLmZyb21BcnJheShyLDMqRCksZi5mcm9tQXJyYXkociwzKnJlKSxtLmZyb21BcnJheShzLDIqRGUpLGIuZnJvbUFycmF5KHMsMipEKSxNLmZyb21BcnJheShzLDIqcmUpLHAuc3ViKHUpLGYuc3ViKHUpLGIuc3ViKG0pLE0uc3ViKG0pO2xldCBjZT0xLyhiLngqTS55LU0ueCpiLnkpOyFpc0Zpbml0ZShjZSl8fCh5LmNvcHkocCkubXVsdGlwbHlTY2FsYXIoTS55KS5hZGRTY2FsZWRWZWN0b3IoZiwtYi55KS5tdWx0aXBseVNjYWxhcihjZSkseC5jb3B5KGYpLm11bHRpcGx5U2NhbGFyKGIueCkuYWRkU2NhbGVkVmVjdG9yKHAsLU0ueCkubXVsdGlwbHlTY2FsYXIoY2UpLGNbRGVdLmFkZCh5KSxjW0RdLmFkZCh5KSxjW3JlXS5hZGQoeSksZFtEZV0uYWRkKHgpLGRbRF0uYWRkKHgpLGRbcmVdLmFkZCh4KSl9bGV0IEE9dGhpcy5ncm91cHM7MD09PUEubGVuZ3RoJiYoQT1be3N0YXJ0OjAsY291bnQ6aS5sZW5ndGh9XSk7Zm9yKGxldCBEZT0wLEQ9QS5sZW5ndGg7RGU8RDsrK0RlKXtsZXQgcmU9QVtEZV0sY2U9cmUuc3RhcnQ7Zm9yKGxldCBiZT1jZSxuZT1jZStyZS5jb3VudDtiZTxuZTtiZSs9MylSKGlbYmUrMF0saVtiZSsxXSxpW2JlKzJdKX1sZXQgVj1uZXcgJCx0ZT1uZXcgJCxLPW5ldyAkLHhlPW5ldyAkO2Z1bmN0aW9uIFhlKERlKXtLLmZyb21BcnJheShvLDMqRGUpLHhlLmNvcHkoSyk7bGV0IEQ9Y1tEZV07Vi5jb3B5KEQpLFYuc3ViKEsubXVsdGlwbHlTY2FsYXIoSy5kb3QoRCkpKS5ub3JtYWxpemUoKSx0ZS5jcm9zc1ZlY3RvcnMoeGUsRCk7bGV0IGNlPXRlLmRvdChkW0RlXSk8MD8tMToxO2xbNCpEZV09Vi54LGxbNCpEZSsxXT1WLnksbFs0KkRlKzJdPVYueixsWzQqRGUrM109Y2V9Zm9yKGxldCBEZT0wLEQ9QS5sZW5ndGg7RGU8RDsrK0RlKXtsZXQgcmU9QVtEZV0sY2U9cmUuc3RhcnQ7Zm9yKGxldCBiZT1jZSxuZT1jZStyZS5jb3VudDtiZTxuZTtiZSs9MylYZShpW2JlKzBdKSxYZShpW2JlKzFdKSxYZShpW2JlKzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYodm9pZCAwIT09ZSl7bGV0IGk9dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKHZvaWQgMD09PWkpaT1uZXcgUHIobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLGkpO2Vsc2UgZm9yKGxldCBwPTAsZj1pLmNvdW50O3A8ZjtwKyspaS5zZXRYWVoocCwwLDAsMCk7bGV0IHI9bmV3ICQsbz1uZXcgJCxzPW5ldyAkLGE9bmV3ICQsbD1uZXcgJCxjPW5ldyAkLGQ9bmV3ICQsdT1uZXcgJDtpZih0KWZvcihsZXQgcD0wLGY9dC5jb3VudDtwPGY7cCs9Myl7bGV0IG09dC5nZXRYKHArMCksYj10LmdldFgocCsxKSxNPXQuZ2V0WChwKzIpO3IuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLG0pLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGIpLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLE0pLGQuc3ViVmVjdG9ycyhzLG8pLHUuc3ViVmVjdG9ycyhyLG8pLGQuY3Jvc3ModSksYS5mcm9tQnVmZmVyQXR0cmlidXRlKGksbSksbC5mcm9tQnVmZmVyQXR0cmlidXRlKGksYiksYy5mcm9tQnVmZmVyQXR0cmlidXRlKGksTSksYS5hZGQoZCksbC5hZGQoZCksYy5hZGQoZCksaS5zZXRYWVoobSxhLngsYS55LGEueiksaS5zZXRYWVooYixsLngsbC55LGwueiksaS5zZXRYWVooTSxjLngsYy55LGMueil9ZWxzZSBmb3IobGV0IHA9MCxmPWUuY291bnQ7cDxmO3ArPTMpci5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCswKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxwKzEpLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHArMiksZC5zdWJWZWN0b3JzKHMsbyksdS5zdWJWZWN0b3JzKHIsbyksZC5jcm9zcyh1KSxpLnNldFhZWihwKzAsZC54LGQueSxkLnopLGkuc2V0WFlaKHArMSxkLngsZC55LGQueiksaS5zZXRYWVoocCsyLGQueCxkLnksZC56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxpLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LGUpe2lmKCF0fHwhdC5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgciBpbiBpKXtpZih2b2lkIDA9PT10LmF0dHJpYnV0ZXNbcl0pY29udGludWU7bGV0IHM9aVtyXS5hcnJheSxhPXQuYXR0cmlidXRlc1tyXSxsPWEuYXJyYXksYz1hLml0ZW1TaXplKmUsZD1NYXRoLm1pbihsLmxlbmd0aCxzLmxlbmd0aC1jKTtmb3IobGV0IHU9MCxwPWM7dTxkO3UrKyxwKyspc1twXT1sW3VdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtsZXQgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgZT0wLGk9dC5jb3VudDtlPGk7ZSsrKUlvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxJby5ub3JtYWxpemUoKSx0LnNldFhZWihlLElvLngsSW8ueSxJby56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KGEsbCl7bGV0IGM9YS5hcnJheSxkPWEuaXRlbVNpemUsdT1hLm5vcm1hbGl6ZWQscD1uZXcgYy5jb25zdHJ1Y3RvcihsLmxlbmd0aCpkKSxmPTAsbT0wO2ZvcihsZXQgYj0wLE09bC5sZW5ndGg7YjxNO2IrKyl7Zj1hLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bFtiXSphLmRhdGEuc3RyaWRlK2Eub2Zmc2V0OmxbYl0qZDtmb3IobGV0IHk9MDt5PGQ7eSsrKXBbbSsrXT1jW2YrK119cmV0dXJuIG5ldyBQcihwLGQsdSl9aWYobnVsbD09PXRoaXMuaW5kZXgpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpcztsZXQgZT1uZXcgVWksaT10aGlzLmluZGV4LmFycmF5LHI9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiByKXtsZXQgYz10KHJbYV0saSk7ZS5zZXRBdHRyaWJ1dGUoYSxjKX1sZXQgbz10aGlzLm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGEgaW4gbyl7bGV0IGw9W10sYz1vW2FdO2ZvcihsZXQgZD0wLHU9Yy5sZW5ndGg7ZDx1O2QrKyl7bGV0IGY9dChjW2RdLGkpO2wucHVzaChmKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgcz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPXMubGVuZ3RoO2E8bDthKyspe2xldCBjPXNbYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpdm9pZCAwIT09bFtjXSYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O251bGwhPT1lJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl0LmRhdGEuYXR0cmlidXRlc1tsXT1pW2xdLnRvSlNPTih0LmRhdGEpO2xldCByPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSxkPVtdO2ZvcihsZXQgdT0wLHA9Yy5sZW5ndGg7dTxwO3UrKylkLnB1c2goY1t1XS50b0pTT04odC5kYXRhKSk7ZC5sZW5ndGg+MCYmKHJbbF09ZCxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgcz10aGlzLmdyb3VwcztzLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHMpKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWEmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbDtsZXQgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2xldCBpPXQuaW5kZXg7bnVsbCE9PWkmJnRoaXMuc2V0SW5kZXgoaS5jbG9uZShlKSk7bGV0IHI9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiByKXRoaXMuc2V0QXR0cmlidXRlKGMscltjXS5jbG9uZShlKSk7bGV0IG89dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIG8pe2xldCBkPVtdLHU9b1tjXTtmb3IobGV0IHA9MCxmPXUubGVuZ3RoO3A8ZjtwKyspZC5wdXNoKHVbcF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW2NdPWR9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBzPXQuZ3JvdXBzO2ZvcihsZXQgYz0wLGQ9cy5sZW5ndGg7YzxkO2MrKyl7bGV0IHU9c1tjXTt0aGlzLmFkZEdyb3VwKHUuc3RhcnQsdS5jb3VudCx1Lm1hdGVyaWFsSW5kZXgpfWxldCBhPXQuYm91bmRpbmdCb3g7bnVsbCE9PWEmJih0aGlzLmJvdW5kaW5nQm94PWEuY2xvbmUoKSk7bGV0IGw9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWwuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHZvaWQgMCE9PXQucGFyYW1ldGVycyYmKHRoaXMucGFyYW1ldGVycz1PYmplY3QuYXNzaWduKHt9LHQucGFyYW1ldGVycykpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O1VpLnByb3RvdHlwZS5pc0J1ZmZlckdlb21ldHJ5PSEwO3ZhciBRJD1uZXcgeG4sRDA9bmV3IHZwLGszPW5ldyBicCxscD1uZXcgJCxjcD1uZXcgJCxkcD1uZXcgJCxGMz1uZXcgJCxOMz1uZXcgJCxMMz1uZXcgJCxZRD1uZXcgJCxYRD1uZXcgJCxRRD1uZXcgJCxaRD1uZXcgJGUsS0Q9bmV3ICRlLEpEPW5ldyAkZSxCMz1uZXcgJCwkRD1uZXcgJCxhbz1jbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKHQ9bmV3IFVpLGU9bmV3IHBtKXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaCIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdm9pZCAwIT09dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpKSx2b2lkIDAhPT10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSYmKHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PU9iamVjdC5hc3NpZ24oe30sdC5tb3JwaFRhcmdldERpY3Rpb25hcnkpKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZih2b2lkIDAhPT1yKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspe2xldCBhPXJbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09b319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gudXBkYXRlTW9ycGhUYXJnZXRzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19cmF5Y2FzdCh0LGUpe2xldCBzLGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0ZXJpYWwsbz10aGlzLm1hdHJpeFdvcmxkO2lmKHZvaWQgMCE9PXImJihudWxsPT09aS5ib3VuZGluZ1NwaGVyZSYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxrMy5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLGszLmFwcGx5TWF0cml4NChvKSwhMSE9PXQucmF5LmludGVyc2VjdHNTcGhlcmUoazMpKSYmKFEkLmNvcHkobykuaW52ZXJ0KCksRDAuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KFEkKSxudWxsPT09aS5ib3VuZGluZ0JveHx8ITEhPT1EMC5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpKSlpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixkPWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsdT1pLmF0dHJpYnV0ZXMudXYscD1pLmF0dHJpYnV0ZXMudXYyLGY9aS5ncm91cHMsbT1pLmRyYXdSYW5nZTtpZihudWxsIT09YSlpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgYj0wLE09Zi5sZW5ndGg7YjxNO2IrKyl7bGV0IHk9ZltiXSx4PXJbeS5tYXRlcmlhbEluZGV4XTtmb3IobGV0IFY9TWF0aC5tYXgoeS5zdGFydCxtLnN0YXJ0KSx0ZT1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKHkuc3RhcnQreS5jb3VudCxtLnN0YXJ0K20uY291bnQpKTtWPHRlO1YrPTMpe2xldCBLPWEuZ2V0WChWKSx4ZT1hLmdldFgoVisxKSxYZT1hLmdldFgoVisyKTtzPWVJKHRoaXMseCx0LEQwLGwsYyxkLHUscCxLLHhlLFhlKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcihWLzMpLHMuZmFjZS5tYXRlcmlhbEluZGV4PXkubWF0ZXJpYWxJbmRleCxlLnB1c2gocykpfX1lbHNlIGZvcihsZXQgeT1NYXRoLm1heCgwLG0uc3RhcnQpLHg9TWF0aC5taW4oYS5jb3VudCxtLnN0YXJ0K20uY291bnQpO3k8eDt5Kz0zKXtsZXQgUj1hLmdldFgoeSksQT1hLmdldFgoeSsxKSxWPWEuZ2V0WCh5KzIpO3M9ZUkodGhpcyxyLHQsRDAsbCxjLGQsdSxwLFIsQSxWKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcih5LzMpLGUucHVzaChzKSl9ZWxzZSBpZih2b2lkIDAhPT1sKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBiPTAsTT1mLmxlbmd0aDtiPE07YisrKXtsZXQgeT1mW2JdLHg9clt5Lm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgVj1NYXRoLm1heCh5LnN0YXJ0LG0uc3RhcnQpLHRlPU1hdGgubWluKGwuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LG0uc3RhcnQrbS5jb3VudCkpO1Y8dGU7Vis9MylzPWVJKHRoaXMseCx0LEQwLGwsYyxkLHUscCxWLFYrMSxWKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKFYvMykscy5mYWNlLm1hdGVyaWFsSW5kZXg9eS5tYXRlcmlhbEluZGV4LGUucHVzaChzKSl9ZWxzZSBmb3IobGV0IHk9TWF0aC5tYXgoMCxtLnN0YXJ0KSx4PU1hdGgubWluKGwuY291bnQsbS5zdGFydCttLmNvdW50KTt5PHg7eSs9MylzPWVJKHRoaXMscix0LEQwLGwsYyxkLHUscCx5LHkrMSx5KzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKHkvMyksZS5wdXNoKHMpKX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIGVJKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1KXtscC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksY3AuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGQpLGRwLmZyb21CdWZmZXJBdHRyaWJ1dGUocix1KTtsZXQgcD1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZwKXtZRC5zZXQoMCwwLDApLFhELnNldCgwLDAsMCksUUQuc2V0KDAsMCwwKTtmb3IobGV0IG09MCxiPW8ubGVuZ3RoO208YjttKyspe2xldCBNPXBbbV0seT1vW21dOzAhPT1NJiYoRjMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LGMpLE4zLmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxkKSxMMy5mcm9tQnVmZmVyQXR0cmlidXRlKHksdSkscz8oWUQuYWRkU2NhbGVkVmVjdG9yKEYzLE0pLFhELmFkZFNjYWxlZFZlY3RvcihOMyxNKSxRRC5hZGRTY2FsZWRWZWN0b3IoTDMsTSkpOihZRC5hZGRTY2FsZWRWZWN0b3IoRjMuc3ViKGxwKSxNKSxYRC5hZGRTY2FsZWRWZWN0b3IoTjMuc3ViKGNwKSxNKSxRRC5hZGRTY2FsZWRWZWN0b3IoTDMuc3ViKGRwKSxNKSkpfWxwLmFkZChZRCksY3AuYWRkKFhEKSxkcC5hZGQoUUQpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLGxwKSxuLmJvbmVUcmFuc2Zvcm0oZCxjcCksbi5ib25lVHJhbnNmb3JtKHUsZHApKTtsZXQgZj1mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsO2lmKGw9dC5zaWRlPT09Z28/aS5pbnRlcnNlY3RUcmlhbmdsZShzLG8sciwhMCxhKTppLmludGVyc2VjdFRyaWFuZ2xlKHIsbyxzLHQuc2lkZSE9PXEwLGEpLG51bGw9PT1sKXJldHVybiBudWxsOyRELmNvcHkoYSksJEQuYXBwbHlNYXRyaXg0KG4ubWF0cml4V29ybGQpO2xldCBjPWUucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCREKTtyZXR1cm4gYzxlLm5lYXJ8fGM+ZS5mYXI/bnVsbDp7ZGlzdGFuY2U6Yyxwb2ludDokRC5jbG9uZSgpLG9iamVjdDpufX0obix0LGUsaSxscCxjcCxkcCxCMyk7aWYoZil7YSYmKFpELmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxjKSxLRC5mcm9tQnVmZmVyQXR0cmlidXRlKGEsZCksSkQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHUpLGYudXY9VnIuZ2V0VVYoQjMsbHAsY3AsZHAsWkQsS0QsSkQsbmV3ICRlKSksbCYmKFpELmZyb21CdWZmZXJBdHRyaWJ1dGUobCxjKSxLRC5mcm9tQnVmZmVyQXR0cmlidXRlKGwsZCksSkQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLGYudXYyPVZyLmdldFVWKEIzLGxwLGNwLGRwLFpELEtELEpELG5ldyAkZSkpO2xldCBtPXthOmMsYjpkLGM6dSxub3JtYWw6bmV3ICQsbWF0ZXJpYWxJbmRleDowfTtWci5nZXROb3JtYWwobHAsY3AsZHAsbS5ub3JtYWwpLGYuZmFjZT1tfXJldHVybiBmfWFvLnByb3RvdHlwZS5pc01lc2g9ITA7dmFyIGZtPWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xLG89MSxzPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOmksd2lkdGhTZWdtZW50czpyLGhlaWdodFNlZ21lbnRzOm8sZGVwdGhTZWdtZW50czpzfTtsZXQgYT10aGlzO3I9TWF0aC5mbG9vcihyKSxvPU1hdGguZmxvb3Iobykscz1NYXRoLmZsb29yKHMpO2xldCBsPVtdLGM9W10sZD1bXSx1PVtdLHA9MCxmPTA7ZnVuY3Rpb24gbShiLE0seSx4LFIsQSxWLHRlLEsseGUsWGUpe2xldCBEZT1BL0ssRD1WL3hlLHJlPUEvMixjZT1WLzIsZmU9dGUvMixiZT1LKzEsbmU9eGUrMSxkZT0wLHBlPTAsamU9bmV3ICQ7Zm9yKGxldCBDZT0wO0NlPG5lO0NlKyspe2xldCBOZT1DZSpELWNlO2ZvcihsZXQgbHQ9MDtsdDxiZTtsdCsrKWplW2JdPShsdCpEZS1yZSkqeCxqZVtNXT1OZSpSLGplW3ldPWZlLGMucHVzaChqZS54LGplLnksamUueiksamVbYl09MCxqZVtNXT0wLGplW3ldPXRlPjA/MTotMSxkLnB1c2goamUueCxqZS55LGplLnopLHUucHVzaChsdC9LKSx1LnB1c2goMS1DZS94ZSksZGUrPTF9Zm9yKGxldCBDZT0wO0NlPHhlO0NlKyspZm9yKGxldCBOZT0wO05lPEs7TmUrKyl7bGV0IE10PXArTmUrYmUqKENlKzEpLHB0PXArKE5lKzEpK2JlKihDZSsxKSxPZT1wKyhOZSsxKStiZSpDZTtsLnB1c2gocCtOZStiZSpDZSxNdCxPZSksbC5wdXNoKE10LHB0LE9lKSxwZSs9Nn1hLmFkZEdyb3VwKGYscGUsWGUpLGYrPXBlLHArPWRlfW0oInoiLCJ5IiwieCIsLTEsLTEsaSxlLHQscyxvLDApLG0oInoiLCJ5IiwieCIsMSwtMSxpLGUsLXQscyxvLDEpLG0oIngiLCJ6IiwieSIsMSwxLHQsaSxlLHIscywyKSxtKCJ4IiwieiIsInkiLDEsLTEsdCxpLC1lLHIscywzKSxtKCJ4IiwieSIsInoiLDEsLTEsdCxlLGkscixvLDQpLG0oIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1pLHIsbyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IE5yKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBOcihkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBOcih1LDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBmbSh0LndpZHRoLHQuaGVpZ2h0LHQuZGVwdGgsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5kZXB0aFNlZ21lbnRzKX19O2Z1bmN0aW9uIFgwKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuKXt0W2VdPXt9O2ZvcihsZXQgaSBpbiBuW2VdKXtsZXQgcj1uW2VdW2ldO3RbZV1baV09ciYmKHIuaXNDb2xvcnx8ci5pc01hdHJpeDN8fHIuaXNNYXRyaXg0fHxyLmlzVmVjdG9yMnx8ci5pc1ZlY3RvcjN8fHIuaXNWZWN0b3I0fHxyLmlzVGV4dHVyZXx8ci5pc1F1YXRlcm5pb24pP3IuY2xvbmUoKTpBcnJheS5pc0FycmF5KHIpP3Iuc2xpY2UoKTpyfX1yZXR1cm4gdH1mdW5jdGlvbiBKbyhuKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9WDAobltlXSk7Zm9yKGxldCByIGluIGkpdFtyXT1pW3JdfXJldHVybiB0fXZhciBrUmU9e2Nsb25lOlgwLG1lcmdlOkpvfSxHZD1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFkZXJNYXRlcmlhbCIsdGhpcy5kZWZpbmVzPXt9LHRoaXMudW5pZm9ybXM9e30sdGhpcy52ZXJ0ZXhTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsdGhpcy5mcmFnbWVudFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcbn0iLHRoaXMubGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmxpZ2h0cz0hMSx0aGlzLmNsaXBwaW5nPSExLHRoaXMuZXh0ZW5zaW9ucz17ZGVyaXZhdGl2ZXM6ITEsZnJhZ0RlcHRoOiExLGRyYXdCdWZmZXJzOiExLHNoYWRlclRleHR1cmVMT0Q6ITF9LHRoaXMuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcz17Y29sb3I6WzEsMSwxXSx1djpbMCwwXSx1djI6WzAsMF19LHRoaXMuaW5kZXgwQXR0cmlidXRlTmFtZT12b2lkIDAsdGhpcy51bmlmb3Jtc05lZWRVcGRhdGU9ITEsdGhpcy5nbHNsVmVyc2lvbj1udWxsLHZvaWQgMCE9PXQmJih2b2lkIDAhPT10LmF0dHJpYnV0ZXMmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNoYWRlck1hdGVyaWFsOiBhdHRyaWJ1dGVzIHNob3VsZCBub3cgYmUgZGVmaW5lZCBpbiBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpLHRoaXMuc2V0VmFsdWVzKHQpKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZnJhZ21lbnRTaGFkZXI9dC5mcmFnbWVudFNoYWRlcix0aGlzLnZlcnRleFNoYWRlcj10LnZlcnRleFNoYWRlcix0aGlzLnVuaWZvcm1zPVgwKHQudW5pZm9ybXMpLHRoaXMuZGVmaW5lcz1PYmplY3QuYXNzaWduKHt9LHQuZGVmaW5lcyksdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5saWdodHM9dC5saWdodHMsdGhpcy5jbGlwcGluZz10LmNsaXBwaW5nLHRoaXMuZXh0ZW5zaW9ucz1PYmplY3QuYXNzaWduKHt9LHQuZXh0ZW5zaW9ucyksdGhpcy5nbHNsVmVyc2lvbj10Lmdsc2xWZXJzaW9uLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtlLmdsc2xWZXJzaW9uPXRoaXMuZ2xzbFZlcnNpb24sZS51bmlmb3Jtcz17fTtmb3IobGV0IHIgaW4gdGhpcy51bmlmb3Jtcyl7bGV0IHM9dGhpcy51bmlmb3Jtc1tyXS52YWx1ZTtlLnVuaWZvcm1zW3JdPXMmJnMuaXNUZXh0dXJlP3t0eXBlOiJ0Iix2YWx1ZTpzLnRvSlNPTih0KS51dWlkfTpzJiZzLmlzQ29sb3I/e3R5cGU6ImMiLHZhbHVlOnMuZ2V0SGV4KCl9OnMmJnMuaXNWZWN0b3IyP3t0eXBlOiJ2MiIsdmFsdWU6cy50b0FycmF5KCl9OnMmJnMuaXNWZWN0b3IzP3t0eXBlOiJ2MyIsdmFsdWU6cy50b0FycmF5KCl9OnMmJnMuaXNWZWN0b3I0P3t0eXBlOiJ2NCIsdmFsdWU6cy50b0FycmF5KCl9OnMmJnMuaXNNYXRyaXgzP3t0eXBlOiJtMyIsdmFsdWU6cy50b0FycmF5KCl9OnMmJnMuaXNNYXRyaXg0P3t0eXBlOiJtNCIsdmFsdWU6cy50b0FycmF5KCl9Ont2YWx1ZTpzfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoZS5kZWZpbmVzPXRoaXMuZGVmaW5lcyksZS52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsZS5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBpPXt9O2ZvcihsZXQgciBpbiB0aGlzLmV4dGVuc2lvbnMpITA9PT10aGlzLmV4dGVuc2lvbnNbcl0mJihpW3JdPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJihlLmV4dGVuc2lvbnM9aSksZX19O0dkLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBTeD1jbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IHhuLHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgeG4sdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgeG59Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtZVs4XSwtZVs5XSwtZVsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxlKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtTeC5wcm90b3R5cGUuaXNDYW1lcmE9ITA7dmFyIGVzPWNsYXNzIGV4dGVuZHMgU3h7Y29uc3RydWN0b3IodD01MCxlPTEsaT0uMSxyPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9IlBlcnNwZWN0aXZlQ2FtZXJhIix0aGlzLmZvdj10LHRoaXMuem9vbT0xLHRoaXMubmVhcj1pLHRoaXMuZmFyPXIsdGhpcy5mb2N1cz0xMCx0aGlzLmFzcGVjdD1lLHRoaXMudmlldz1udWxsLHRoaXMuZmlsbUdhdWdlPTM1LHRoaXMuZmlsbU9mZnNldD0wLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMuZm92PXQuZm92LHRoaXMuem9vbT10Lnpvb20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLmZvY3VzPXQuZm9jdXMsdGhpcy5hc3BlY3Q9dC5hc3BlY3QsdGhpcy52aWV3PW51bGw9PT10LnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpcy5maWxtR2F1Z2U9dC5maWxtR2F1Z2UsdGhpcy5maWxtT2Zmc2V0PXQuZmlsbU9mZnNldCx0aGlzfXNldEZvY2FsTGVuZ3RoKHQpe2xldCBlPS41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL3Q7dGhpcy5mb3Y9MipuQipNYXRoLmF0YW4oZSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Z2V0Rm9jYWxMZW5ndGgoKXtsZXQgdD1NYXRoLnRhbiguNSpfMyp0aGlzLmZvdik7cmV0dXJuLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gMipuQipNYXRoLmF0YW4oTWF0aC50YW4oLjUqXzMqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LGUsaSxyLG8scyl7dGhpcy5hc3BlY3Q9dC9lLG51bGw9PT10aGlzLnZpZXcmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPWksdGhpcy52aWV3Lm9mZnNldFk9cix0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PXMsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7bnVsbCE9PXRoaXMudmlldyYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLGU9dCpNYXRoLnRhbiguNSpfMyp0aGlzLmZvdikvdGhpcy56b29tLGk9MiplLHI9dGhpcy5hc3BlY3QqaSxvPS0uNSpyLHM9dGhpcy52aWV3O2lmKG51bGwhPT10aGlzLnZpZXcmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1zLmZ1bGxXaWR0aCxjPXMuZnVsbEhlaWdodDtvKz1zLm9mZnNldFgqci9sLGUtPXMub2Zmc2V0WSppL2Mscio9cy53aWR0aC9sLGkqPXMuaGVpZ2h0L2N9bGV0IGE9dGhpcy5maWxtT2Zmc2V0OzAhPT1hJiYobys9dCphL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUobyxvK3IsZSxlLWksdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuZm92PXRoaXMuZm92LGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixlLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLGUub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCxudWxsIT09dGhpcy52aWV3JiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGUub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxlLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxlfX07ZXMucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIEV4PWNsYXNzIGV4dGVuZHMgQml7Y29uc3RydWN0b3IodCxlLGkpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJDdWJlQ2FtZXJhIiwhMCE9PWkuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7dGhpcy5yZW5kZXJUYXJnZXQ9aTtsZXQgcj1uZXcgZXMoOTAsMSx0LGUpO3IubGF5ZXJzPXRoaXMubGF5ZXJzLHIudXAuc2V0KDAsLTEsMCksci5sb29rQXQobmV3ICQoMSwwLDApKSx0aGlzLmFkZChyKTtsZXQgbz1uZXcgZXMoOTAsMSx0LGUpO28ubGF5ZXJzPXRoaXMubGF5ZXJzLG8udXAuc2V0KDAsLTEsMCksby5sb29rQXQobmV3ICQoLTEsMCwwKSksdGhpcy5hZGQobyk7bGV0IHM9bmV3IGVzKDkwLDEsdCxlKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsMSkscy5sb29rQXQobmV3ICQoMCwxLDApKSx0aGlzLmFkZChzKTtsZXQgYT1uZXcgZXMoOTAsMSx0LGUpO2EubGF5ZXJzPXRoaXMubGF5ZXJzLGEudXAuc2V0KDAsMCwtMSksYS5sb29rQXQobmV3ICQoMCwtMSwwKSksdGhpcy5hZGQoYSk7bGV0IGw9bmV3IGVzKDkwLDEsdCxlKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyAkKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IGVzKDkwLDEsdCxlKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyAkKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LGUpe251bGw9PT10aGlzLnBhcmVudCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBpPXRoaXMucmVuZGVyVGFyZ2V0LFtyLG8scyxhLGwsY109dGhpcy5jaGlsZHJlbixkPXQueHIuZW5hYmxlZCx1PXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBwPWkudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7aS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChpLDApLHQucmVuZGVyKGUsciksdC5zZXRSZW5kZXJUYXJnZXQoaSwxKSx0LnJlbmRlcihlLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KGksMiksdC5yZW5kZXIoZSxzKSx0LnNldFJlbmRlclRhcmdldChpLDMpLHQucmVuZGVyKGUsYSksdC5zZXRSZW5kZXJUYXJnZXQoaSw0KSx0LnJlbmRlcihlLGwpLGkudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9cCx0LnNldFJlbmRlclRhcmdldChpLDUpLHQucmVuZGVyKGUsYyksdC5zZXRSZW5kZXJUYXJnZXQodSksdC54ci5lbmFibGVkPWQsaS50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxRMD1jbGFzcyBleHRlbmRzIGxve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLGQpe3N1cGVyKHQ9dm9pZCAwIT09dD90OltdLGU9dm9pZCAwIT09ZT9lOld4LGkscixvLHMsYSxsLGMsZCksdGhpcy5mbGlwWT0hMX1nZXQgaW1hZ2VzKCl7cmV0dXJuIHRoaXMuaW1hZ2V9c2V0IGltYWdlcyh0KXt0aGlzLmltYWdlPXR9fTtRMC5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZT0hMDt2YXIgU0k9Y2xhc3MgZXh0ZW5kcyBKc3tjb25zdHJ1Y3Rvcih0LGUsaSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xDdWJlUmVuZGVyVGFyZ2V0OiBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApIiksZT1pKSxzdXBlcih0LHQsZSksdGhpcy50ZXh0dXJlPW5ldyBRMCh2b2lkIDAsKGU9ZXx8e30pLm1hcHBpbmcsZS53cmFwUyxlLndyYXBULGUubWFnRmlsdGVyLGUubWluRmlsdGVyLGUuZm9ybWF0LGUudHlwZSxlLmFuaXNvdHJvcHksZS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXZvaWQgMCE9PWUuZ2VuZXJhdGVNaXBtYXBzJiZlLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWUubWluRmlsdGVyP2UubWluRmlsdGVyOiRvfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9Z3MsdGhpcy50ZXh0dXJlLmVuY29kaW5nPWUuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5tYWdGaWx0ZXI7bGV0IGlfdW5pZm9ybXM9e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LGlfdmVydGV4U2hhZGVyPSJcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdHZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdFx0XHRcdFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXG5cdFx0XHRcdH1cblx0XHRcdCIsaV9mcmFnbWVudFNoYWRlcj0iXG5cblx0XHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHQiLHI9bmV3IGZtKDUsNSw1KSxvPW5ldyBHZCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6WDAoaV91bmlmb3JtcyksdmVydGV4U2hhZGVyOmlfdmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmlfZnJhZ21lbnRTaGFkZXIsc2lkZTpnbyxibGVuZGluZzpwcH0pO28udW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7bGV0IHM9bmV3IGFvKHIsbyksYT1lLm1pbkZpbHRlcjtyZXR1cm4gZS5taW5GaWx0ZXI9PT1RSSYmKGUubWluRmlsdGVyPSRvKSxuZXcgRXgoMSwxMCx0aGlzKS51cGRhdGUodCxzKSxlLm1pbkZpbHRlcj1hLHMuZ2VvbWV0cnkuZGlzcG9zZSgpLHMubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IG89dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IHM9MDtzPDY7cysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMscyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQobyl9fTtTSS5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIFYzPW5ldyAkLExSZT1uZXcgJCxCUmU9bmV3IGJvLEtsPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQoMSwwLDApLGU9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxpKSx0aGlzLmNvbnN0YW50PXIsdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsaSl7bGV0IHI9VjMuc3ViVmVjdG9ycyhpLGUpLmNyb3NzKExSZS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoVjMpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKDA9PT1yKXJldHVybiAwPT09dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCk/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IG89LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gbzwwfHxvPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIobykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8QlJlLmdldE5vcm1hbE1hdHJpeCh0KSxyPXRoaXMuY29wbGFuYXJQb2ludChWMykuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKGkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1yLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19O0tsLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciBSMD1uZXcgYnAsdEk9bmV3ICQsWjA9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgS2wsZT1uZXcgS2wsaT1uZXcgS2wscj1uZXcgS2wsbz1uZXcgS2wscz1uZXcgS2wpe3RoaXMucGxhbmVzPVt0LGUsaSxyLG8sc119c2V0KHQsZSxpLHIsbyxzKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShvKSxhWzVdLmNvcHkocyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLG89aVsxXSxzPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sZD1pWzZdLHU9aVs3XSxwPWlbOF0sZj1pWzldLG09aVsxMF0sYj1pWzExXSxNPWlbMTJdLHk9aVsxM10seD1pWzE0XSxSPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLHUtbCxiLXAsUi1NKS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLHUrbCxiK3AsUitNKS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStvLHUrYyxiK2YsUit5KS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1vLHUtYyxiLWYsUi15KS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1zLHUtZCxiLW0sUi14KS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStzLHUrZCxiK20sUit4KS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gbnVsbD09PWUuYm91bmRpbmdTcGhlcmUmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksUjAuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFIwKX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBSMC5jZW50ZXIuc2V0KDAsMCwwKSxSMC5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsUjAuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShSMCl9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgbz0wO288NjtvKyspaWYoZVtvXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYodEkueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LHRJLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSx0SS56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQodEkpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBaZWUoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKG8scyl7ZShvLHMpLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT10JiZudWxsIT09ZSYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7ZT1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe249b319fWZ1bmN0aW9uIFZSZShuLHQpe2xldCBlPXQuaXNXZWJHTDIsaT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9LHJlbW92ZTpmdW5jdGlvbihjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IGQ9aS5nZXQoYyk7ZCYmKG4uZGVsZXRlQnVmZmVyKGQuYnVmZmVyKSxpLmRlbGV0ZShjKSl9LHVwZGF0ZTpmdW5jdGlvbihjLGQpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IHA9aS5nZXQoYyk7cmV0dXJuIHZvaWQoKCFwfHxwLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSkpfWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgdT1pLmdldChjKTt2b2lkIDA9PT11P2kuc2V0KGMsZnVuY3Rpb24oYyxkKXtsZXQgdT1jLmFycmF5LHA9Yy51c2FnZSxmPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKGQsZiksbi5idWZmZXJEYXRhKGQsdSxwKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgbT01MTI2O3JldHVybiB1IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P209NTEyNjp1IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTp1IGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9tPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOm09NTEyMzp1IGluc3RhbmNlb2YgSW50MTZBcnJheT9tPTUxMjI6dSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P209NTEyNTp1IGluc3RhbmNlb2YgSW50MzJBcnJheT9tPTUxMjQ6dSBpbnN0YW5jZW9mIEludDhBcnJheT9tPTUxMjA6KHUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx1IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYobT01MTIxKSx7YnVmZmVyOmYsdHlwZTptLGJ5dGVzUGVyRWxlbWVudDp1LkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX0oYyxkKSk6dS52ZXJzaW9uPGMudmVyc2lvbiYmKGZ1bmN0aW9uKGMsZCx1KXtsZXQgcD1kLmFycmF5LGY9ZC51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIodSxjKSwtMT09PWYuY291bnQ/bi5idWZmZXJTdWJEYXRhKHUsMCxwKTooZT9uLmJ1ZmZlclN1YkRhdGEodSxmLm9mZnNldCpwLkJZVEVTX1BFUl9FTEVNRU5ULHAsZi5vZmZzZXQsZi5jb3VudCk6bi5idWZmZXJTdWJEYXRhKHUsZi5vZmZzZXQqcC5CWVRFU19QRVJfRUxFTUVOVCxwLnN1YmFycmF5KGYub2Zmc2V0LGYub2Zmc2V0K2YuY291bnQpKSxmLmNvdW50PS0xKX0odS5idWZmZXIsYyxkKSx1LnZlcnNpb249Yy52ZXJzaW9uKX19fXZhciBUeD1jbGFzcyBleHRlbmRzIFVpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cn07bGV0IG89dC8yLHM9ZS8yLGE9TWF0aC5mbG9vcihpKSxsPU1hdGguZmxvb3IociksYz1hKzEsZD1sKzEsdT10L2EscD1lL2wsZj1bXSxtPVtdLGI9W10sTT1bXTtmb3IobGV0IHk9MDt5PGQ7eSsrKXtsZXQgeD15KnAtcztmb3IobGV0IFI9MDtSPGM7UisrKW0ucHVzaChSKnUtbywteCwwKSxiLnB1c2goMCwwLDEpLE0ucHVzaChSL2EpLE0ucHVzaCgxLXkvbCl9Zm9yKGxldCB5PTA7eTxsO3krKylmb3IobGV0IHg9MDt4PGE7eCsrKXtsZXQgQT14K2MqKHkrMSksVj14KzErYyooeSsxKSx0ZT14KzErYyp5O2YucHVzaCh4K2MqeSxBLHRlKSxmLnB1c2goQSxWLHRlKX10aGlzLnNldEluZGV4KGYpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IE5yKG0sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBOcihiLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBOcihNLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBUeCh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19LGJpPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuI2VuZGlmIixhbHBoYXRlc3RfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQVRFU1Rcblx0dW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XG5cdHJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7XG59XG5mbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApO1xuXHRmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBWICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDtcblx0Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XG5cdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcblx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1cbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcblx0ZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcblx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxuZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhO1xuXHRmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7XG5cdGZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7XG5cdHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xufVxuZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApO1xufVxudmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XG5cdGZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApO1xuXHRyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dkNvbG9yID0gdmVjNCggMS4wICk7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvciAqPSBjb2xvcjtcbiNlbmRpZlxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG5cdHZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjZcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDdcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxuI2RlZmluZSBFUFNJTE9OIDFlLTZcbiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cbmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxuZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XG5cdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1Mztcblx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApO1xufVxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XG4jZWxzZVxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XG5cdFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcblx0XHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XG5cdH1cbiNlbmRpZlxuc3RydWN0IEluY2lkZW50TGlnaHQge1xuXHR2ZWMzIGNvbG9yO1xuXHR2ZWMzIGRpcmVjdGlvbjtcblx0Ym9vbCB2aXNpYmxlO1xufTtcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XG5cdHZlYzMgZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcblx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcbn07XG5zdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7XG5cdHZlYzMgcG9zaXRpb247XG5cdHZlYzMgbm9ybWFsO1xuXHR2ZWMzIHZpZXdEaXI7XG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn1cbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xuXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XG59XG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xuXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRyZXR1cm4gdmVjMiggdSwgdiApO1xufSIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcblx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXG5cdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXG5cdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcblx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZhY2UgPSAtIDEuMDtcblx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNlO1xuXHR9XG5cdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xuXHRcdHZlYzIgdXY7XG5cdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcblx0fVxuXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xuXHRcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XG5cdFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xuXHRcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XG5cdFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcblx0XHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41O1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0cmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjtcblx0fVxuXHQjZGVmaW5lIHIwIDEuMFxuXHQjZGVmaW5lIHYwIDAuMzM5XG5cdCNkZWZpbmUgbTAgLSAyLjBcblx0I2RlZmluZSByMSAwLjhcblx0I2RlZmluZSB2MSAwLjI3NlxuXHQjZGVmaW5lIG0xIC0gMS4wXG5cdCNkZWZpbmUgcjQgMC40XG5cdCNkZWZpbmUgdjQgMC4wNDZcblx0I2RlZmluZSBtNCAyLjBcblx0I2RlZmluZSByNSAwLjMwNVxuXHQjZGVmaW5lIHY1IDAuMDE2XG5cdCNkZWZpbmUgbTUgMy4wXG5cdCNkZWZpbmUgcjYgMC4yMVxuXHQjZGVmaW5lIHY2IDAuMDAzOFxuXHQjZGVmaW5lIG02IDQuMFxuXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IDAuMDtcblx0XHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcblx0XHRcdG1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7XG5cdFx0XHRtaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkge1xuXHRcdFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcblx0XHRcdG1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7XHRcdH1cblx0XHRyZXR1cm4gbWlwO1xuXHR9XG5cdHZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7XG5cdFx0ZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTtcblx0XHRmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7XG5cdFx0dmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApO1xuXHRcdGlmICggbWlwRiA9PSAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xuXHRcdFx0cmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XG5cdFx0fVxuXHR9XG4jZW5kaWYiLGRlZmF1bHRub3JtYWxfdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XG4jaWZkZWYgRkxJUF9TSURFRFxuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0dHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6InZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XG59IixlbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvRnJhZztcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdFxuI2VuZGlmIixlbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHRcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcblx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT05cblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG5cdHZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApO1xuXHRcdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdmVjMyggMC4wICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0dmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcmVmbGVjdFZlYztcblx0XHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHRcdHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0cmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHZlYzMoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuXHQjZWxzZVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXg7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR9XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLGZvZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIHZGb2dEZXB0aCAqIHZGb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZiIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcbiNlbmRpZlxudmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xuXHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0cmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApO1xuXHQjZWxzZVxuXHRcdHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdCNlbmRpZlxufSIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0dkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWYiLGxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdztcbnVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XG5cdHJldHVybiByZXN1bHQ7XG59XG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG5mbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcblx0I2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcblx0XHRcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuXHQjZWxzZVxuXHRcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCApIHtcblx0XHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdFx0fVxuXHRcdHJldHVybiAxLjA7XG5cdCNlbmRpZlxufVxuZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7XG5cdHJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHRsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0bGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0bGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdGlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkge1xuXHRcdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdFx0bGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247XG5cdFx0XHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xuXHRcdFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGxpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzE7XHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcblx0dW5pZm9ybSBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHRzWyBOVU1fUkVDVF9BUkVBX0xJR0hUUyBdO1xuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIHNreUNvbG9yO1xuXHRcdHZlYzMgZ3JvdW5kQ29sb3I7XG5cdH07XG5cdHVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdO1xuXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XG5cdFx0cmV0dXJuIGlycmFkaWFuY2U7XG5cdH1cbiNlbmRpZiIsbGlnaHRzX3Rvb25fZnJhZ21lbnQ6IlRvb25NYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7IixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbnN0cnVjdCBUb29uTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcbn07XG52b2lkIFJFX0RpcmVjdF9Ub29uKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1Rvb24oIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9Ub29uXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waG9uZ19mcmFnbWVudDoiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xubWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIElPUlxuXHQjaWZkZWYgU1BFQ1VMQVJcblx0XHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7XG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTtcblx0XHQjZW5kaWZcblx0XHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcblx0XHRcdHNwZWN1bGFyQ29sb3JGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckNvbG9yTWFwLCB2VXYgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wO1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApO1xuXHRcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIGlvciAtIDEuMCApIC8gKCBpb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XG5cdCNlbmRpZlxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yO1xuXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcblx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yICo9IHRleHR1cmUyRCggc2hlZW5Db2xvck1hcCwgdlV2ICkucmdiO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApO1xuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBzaGVlblJvdWdobmVzc01hcCwgdlV2ICkuYTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCByb3VnaG5lc3M7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJGOTA7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRcdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcblx0XHR2ZWMzIGNsZWFyY29hdEYwO1xuXHRcdGZsb2F0IGNsZWFyY29hdEY5MDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHR2ZWMzIHNoZWVuQ29sb3I7XG5cdFx0ZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcbnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApO1xuZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcblx0ZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcblx0ZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xuXHRmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcblx0cmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTtcbn1cbnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0dmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xuXHRyZXR1cm4gZmFiO1xufVxudmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0dmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xufVxudm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHR2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XG5cdGZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHR2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTtcblx0XHR2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxuXHRcdFx0dmVjMyggICAgMCwgMSwgICAgMCApLFxuXHRcdFx0dmVjMyggdDEueiwgMCwgdDEudyApXG5cdFx0KTtcblx0XHR2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdFx0dmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHR2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcblx0Y29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9QaHlzaWNhbFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclx0XHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XG59IixsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXG5cdFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdHZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X2VuZDoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHRcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjZW5kaWZcbiNlbmRpZiIsbG9nZGVwdGhidWZfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XG5cdFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XG5cdCNlbHNlXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHNhbXBsZWREaWZmdXNlQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdCNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRVxuXHRcdHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApO1xuXHQjZW5kaWZcblx0ZGlmZnVzZUNvbG9yICo9IHNhbXBsZWREaWZmdXNlQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0ZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZztcbiNlbmRpZiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmXG4jaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XG4jZW5kaWYiLG1vcnBobm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07XG5cdFx0dW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xuXHRcdHVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTtcblx0XHR2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkge1xuXHRcdFx0ZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApO1xuXHRcdFx0ZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcblx0XHRcdHZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTtcblx0XHRcdHJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6O1xuXHRcdH1cblx0I2Vsc2Vcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdFx0I2Vsc2Vcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbmRpZlxuXHRcdH1cblx0I2Vsc2Vcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiJmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDtcbiNpZmRlZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdCNlbmRpZlxuXHRcdCNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKVxuXHRcdFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7Iixub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHQjZW5kaWZcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xuI2VuZGlmIixub3JtYWxfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX3BhcnNfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixub3JtYWxfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdHZlYzMgTiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApO1xuXHRcdHZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7XG5cdFx0dmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcblx0XHR2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xuXHRcdGZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XG5cdFx0ZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xuXHQjZWxzZVxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuI2VuZGlmIixvdXRwdXRfZnJhZ21lbnQ6IiNpZmRlZiBPUEFRVUVcbmRpZmZ1c2VDb2xvci5hID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuZGlmZnVzZUNvbG9yLmEgKj0gdHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XG4jZW5kaWZcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7IixwYWNraW5nOiJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTtcblx0cmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ6IiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5cdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWYiLHByb2plY3RfdmVydGV4OiJ2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcbiNlbmRpZlxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOyIsZGl0aGVyaW5nX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XG5cdFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xuXHRcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XG5cdFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcblx0XHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xuXHR9XG4jZW5kaWYiLHJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0dmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7XG5cdFx0cmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApO1xuXHR9XG5cdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xuXHRcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcblx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xuXHRcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XG5cdFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcblx0XHRcdGZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDtcblx0XHRcdGZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7XG5cdFx0XHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1x0XHRcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1x0XHRcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xuXHRcdH1cblx0XHRyZXR1cm4gb2NjbHVzaW9uO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDIgPSBkeDAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTIgPSBkeTAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTMgPSBkeTEgLyAyLjA7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDE3LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XG5cdFx0XHRmbG9hdCBkeSA9IHRleGVsU2l6ZS55O1xuXHRcdFx0dmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5O1xuXHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xuXHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgZi55IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHRzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArPSBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRyZXR1cm4gc2hhZG93O1xufSIsc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogPSBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLHNraW5uaW5nX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcblx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XG5cdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XG4jZW5kaWYiLHNraW5ub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcblx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG9iamVjdFRhbmdlbnQgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNlbmRpZlxuI2VuZGlmIixzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcbn1cbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XG5cdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xuXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xuXHRyZXR1cm4gYSAvIGI7XG59XG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcdFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxuXHRcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxuXHQpO1xuXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcdFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxuXHRcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxuXHQpO1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xuXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xuXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcblx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcbn1cbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfSIsdHJhbnNtaXNzaW9uX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHRmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcblx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xuXHRmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XG5cdCNlbmRpZlxuXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XG5cdHZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHR2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXG5cdFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuXHRcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxuXHRcdGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0dG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApO1xuXHR0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcbiNlbmRpZiIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcblx0dW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHR1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjtcblx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcblx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDtcblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xuXHRcdHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xuXHRcdHZlYzMgbW9kZWxTY2FsZTtcblx0XHRtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xuXHR9XG5cdGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuXHRcdHJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApO1xuXHR9XG5cdHZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XG5cdFx0ZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApO1xuXHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcblx0XHRpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHJhZGlhbmNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdFx0dmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1x0XHRcdHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XG5cdFx0fVxuXHR9XG5cdHZlYzQgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IsXG5cdFx0Y29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcblx0XHRjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXG5cdFx0Y29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xuXHRcdHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcblx0XHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcblx0XHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XG5cdFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XG5cdFx0dmVjNCB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xuXHRcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0XHR2ZWMzIEYgPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcblx0XHRyZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xuXHR9XG4jZW5kaWYiLHV2X3BhcnNfZnJhZ21lbnQ6IiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIix1dl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHQjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZXG5cdFx0dmVjMiB2VXY7XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZiIsdXZfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG5cdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XG4jZW5kaWYiLHV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF92ZXJ0OiJ2YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xudm9pZCBtYWluKCkge1xuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApO1xufSIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGVwdGhfZnJhZzoiI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdGZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcblx0XHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcblx0I2VuZGlmXG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGRpc3RhbmNlUkdCQV9mcmFnOiIjZGVmaW5lIERJU1RBTkNFXG51bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNhdHVyYXRlKCBkaXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xufSIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2htYXRjYXBfdmVydDoiI2RlZmluZSBNQVRDQVBcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG5vcm1hbF92ZXJ0OiIjZGVmaW5lIE5PUk1BTFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIsbWVzaG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLG1lc2hwaHlzaWNhbF9mcmFnOiIjZGVmaW5lIFNUQU5EQVJEXG4jaWZkZWYgUEhZU0lDQUxcblx0I2RlZmluZSBJT1Jcblx0I2RlZmluZSBTUEVDVUxBUlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgSU9SXG5cdHVuaWZvcm0gZmxvYXQgaW9yO1xuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJcblx0dW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcblx0dW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7XG5cdHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xuXHQjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0ZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7XG5cdFx0b3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHR2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xuXHRcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2h0b29uX3ZlcnQ6IiNkZWZpbmUgVE9PTlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2h0b29uX2ZyYWc6IiNkZWZpbmUgVE9PTlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzcHJpdGVfdmVydDoidW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHR2ZWMyIHNjYWxlO1xuXHRzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcblx0c2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7XG5cdCNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblx0I2VuZGlmXG5cdHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7XG5cdHZlYzIgcm90YXRlZFBvc2l0aW9uO1xuXHRyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0bXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNwcml0ZV9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59In0sSXQ9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IGFuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGJvfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBib30sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3ICRlKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGJvfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyAkZSguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgYm99fX0scWM9e2Jhc2ljOnt1bmlmb3JtczpKbyhbSXQuY29tbW9uLEl0LnNwZWN1bGFybWFwLEl0LmVudm1hcCxJdC5hb21hcCxJdC5saWdodG1hcCxJdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOkpvKFtJdC5jb21tb24sSXQuc3BlY3VsYXJtYXAsSXQuZW52bWFwLEl0LmFvbWFwLEl0LmxpZ2h0bWFwLEl0LmVtaXNzaXZlbWFwLEl0LmZvZyxJdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgYW4oMCl9fV0pLHZlcnRleFNoYWRlcjpiaS5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpKbyhbSXQuY29tbW9uLEl0LnNwZWN1bGFybWFwLEl0LmVudm1hcCxJdC5hb21hcCxJdC5saWdodG1hcCxJdC5lbWlzc2l2ZW1hcCxJdC5idW1wbWFwLEl0Lm5vcm1hbG1hcCxJdC5kaXNwbGFjZW1lbnRtYXAsSXQuZm9nLEl0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBhbigxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6Sm8oW0l0LmNvbW1vbixJdC5lbnZtYXAsSXQuYW9tYXAsSXQubGlnaHRtYXAsSXQuZW1pc3NpdmVtYXAsSXQuYnVtcG1hcCxJdC5ub3JtYWxtYXAsSXQuZGlzcGxhY2VtZW50bWFwLEl0LnJvdWdobmVzc21hcCxJdC5tZXRhbG5lc3NtYXAsSXQuZm9nLEl0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3JtczpKbyhbSXQuY29tbW9uLEl0LmFvbWFwLEl0LmxpZ2h0bWFwLEl0LmVtaXNzaXZlbWFwLEl0LmJ1bXBtYXAsSXQubm9ybWFsbWFwLEl0LmRpc3BsYWNlbWVudG1hcCxJdC5ncmFkaWVudG1hcCxJdC5mb2csSXQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGFuKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpiaS5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOkpvKFtJdC5jb21tb24sSXQuYnVtcG1hcCxJdC5ub3JtYWxtYXAsSXQuZGlzcGxhY2VtZW50bWFwLEl0LmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3JtczpKbyhbSXQucG9pbnRzLEl0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3JtczpKbyhbSXQuY29tbW9uLEl0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpiaS5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6Sm8oW0l0LmNvbW1vbixJdC5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6YmkuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOkpvKFtJdC5jb21tb24sSXQuYnVtcG1hcCxJdC5ub3JtYWxtYXAsSXQuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpKbyhbSXQuc3ByaXRlLEl0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgYm99LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpiaS5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3JtczpKbyhbSXQuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YmkuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOkpvKFtJdC5jb21tb24sSXQuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3ICR9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOkpvKFtJdC5saWdodHMsSXQuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IGFuKDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6Ymkuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6Ymkuc2hhZG93X2ZyYWd9fTtmdW5jdGlvbiBwa2Uobix0LGUsaSxyLG8pe2xldCBsLGMscz1uZXcgYW4oMCksYT0hMD09PXI/MDoxLGQ9bnVsbCx1PTAscD1udWxsO2Z1bmN0aW9uIG0oYixNKXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoYi5yLGIuZyxiLmIsTSxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKGIsTT0xKXtzLnNldChiKSxhPU0sbShzLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oYil7YT1iLG0ocyxhKX0scmVuZGVyOmZ1bmN0aW9uKGIsTSl7bGV0IHk9ITEseD0hMD09PU0uaXNTY2VuZT9NLmJhY2tncm91bmQ6bnVsbDt4JiZ4LmlzVGV4dHVyZSYmKHg9dC5nZXQoeCkpO2xldCBSPW4ueHIsQT1SLmdldFNlc3Npb24mJlIuZ2V0U2Vzc2lvbigpO0EmJiJhZGRpdGl2ZSI9PT1BLmVudmlyb25tZW50QmxlbmRNb2RlJiYoeD1udWxsKSxudWxsPT09eD9tKHMsYSk6eCYmeC5pc0NvbG9yJiYobSh4LDEpLHk9ITApLChuLmF1dG9DbGVhcnx8eSkmJm4uY2xlYXIobi5hdXRvQ2xlYXJDb2xvcixuLmF1dG9DbGVhckRlcHRoLG4uYXV0b0NsZWFyU3RlbmNpbCkseCYmKHguaXNDdWJlVGV4dHVyZXx8eC5tYXBwaW5nPT09WEkpPyh2b2lkIDA9PT1jJiYoYz1uZXcgYW8obmV3IGZtKDEsMSwxKSxuZXcgR2Qoe25hbWU6IkJhY2tncm91bmRDdWJlTWF0ZXJpYWwiLHVuaWZvcm1zOlgwKHFjLmN1YmUudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpxYy5jdWJlLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpxYy5jdWJlLmZyYWdtZW50U2hhZGVyLHNpZGU6Z28sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxjLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKFYsdGUsSyl7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oSy5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksaS51cGRhdGUoYykpLGMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPXgsYy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXguaXNDdWJlVGV4dHVyZSYmITE9PT14LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLChkIT09eHx8dSE9PXgudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYoYy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCxkPXgsdT14LnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxiLnVuc2hpZnQoYyxjLmdlb21ldHJ5LGMubWF0ZXJpYWwsMCwwLG51bGwpKTp4JiZ4LmlzVGV4dHVyZSYmKHZvaWQgMD09PWwmJihsPW5ldyBhbyhuZXcgVHgoMiwyKSxuZXcgR2Qoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6WDAocWMuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOnFjLmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOnFjLmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsc2lkZTp5eCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksbC5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLm1hdGVyaWFsLCJtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy50MkQudmFsdWV9fSksaS51cGRhdGUobCkpLGwubWF0ZXJpYWwudW5pZm9ybXMudDJELnZhbHVlPXgsITA9PT14Lm1hdHJpeEF1dG9VcGRhdGUmJngudXBkYXRlTWF0cml4KCksbC5tYXRlcmlhbC51bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KHgubWF0cml4KSwoZCE9PXh8fHUhPT14LnZlcnNpb258fHAhPT1uLnRvbmVNYXBwaW5nKSYmKGwubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsZD14LHU9eC52ZXJzaW9uLHA9bi50b25lTWFwcGluZyksYi51bnNoaWZ0KGwsbC5nZW9tZXRyeSxsLm1hdGVyaWFsLDAsMCxudWxsKSl9fX1mdW5jdGlvbiBma2Uobix0LGUsaSl7bGV0IHI9bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG89aS5pc1dlYkdMMj9udWxsOnQuZ2V0KCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHM9aS5pc1dlYkdMMnx8bnVsbCE9PW8sYT17fSxsPWIobnVsbCksYz1sO2Z1bmN0aW9uIHAoY2Upe3JldHVybiBpLmlzV2ViR0wyP24uYmluZFZlcnRleEFycmF5KGNlKTpvLmJpbmRWZXJ0ZXhBcnJheU9FUyhjZSl9ZnVuY3Rpb24gZihjZSl7cmV0dXJuIGkuaXNXZWJHTDI/bi5kZWxldGVWZXJ0ZXhBcnJheShjZSk6by5kZWxldGVWZXJ0ZXhBcnJheU9FUyhjZSl9ZnVuY3Rpb24gYihjZSl7bGV0IGZlPVtdLGJlPVtdLG5lPVtdO2ZvcihsZXQgZGU9MDtkZTxyO2RlKyspZmVbZGVdPTAsYmVbZGVdPTAsbmVbZGVdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOmZlLGVuYWJsZWRBdHRyaWJ1dGVzOmJlLGF0dHJpYnV0ZURpdmlzb3JzOm5lLG9iamVjdDpjZSxhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIHgoKXtsZXQgY2U9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgZmU9MCxiZT1jZS5sZW5ndGg7ZmU8YmU7ZmUrKyljZVtmZV09MH1mdW5jdGlvbiBSKGNlKXtBKGNlLDApfWZ1bmN0aW9uIEEoY2UsZmUpe2xldCBuZT1jLmVuYWJsZWRBdHRyaWJ1dGVzLGRlPWMuYXR0cmlidXRlRGl2aXNvcnM7Yy5uZXdBdHRyaWJ1dGVzW2NlXT0xLDA9PT1uZVtjZV0mJihuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGNlKSxuZVtjZV09MSksZGVbY2VdIT09ZmUmJigoaS5pc1dlYkdMMj9uOnQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpW2kuaXNXZWJHTDI/InZlcnRleEF0dHJpYkRpdmlzb3IiOiJ2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiXShjZSxmZSksZGVbY2VdPWZlKX1mdW5jdGlvbiBWKCl7bGV0IGNlPWMubmV3QXR0cmlidXRlcyxmZT1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgYmU9MCxuZT1mZS5sZW5ndGg7YmU8bmU7YmUrKylmZVtiZV0hPT1jZVtiZV0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShiZSksZmVbYmVdPTApfWZ1bmN0aW9uIHRlKGNlLGZlLGJlLG5lLGRlLHBlKXshMCE9PWkuaXNXZWJHTDJ8fDUxMjQhPT1iZSYmNTEyNSE9PWJlP24udmVydGV4QXR0cmliUG9pbnRlcihjZSxmZSxiZSxuZSxkZSxwZSk6bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihjZSxmZSxiZSxkZSxwZSl9ZnVuY3Rpb24gRCgpe3JlKCksYyE9PWwmJihjPWwscChjLm9iamVjdCkpfWZ1bmN0aW9uIHJlKCl7bC5nZW9tZXRyeT1udWxsLGwucHJvZ3JhbT1udWxsLGwud2lyZWZyYW1lPSExfXJldHVybntzZXR1cDpmdW5jdGlvbihjZSxmZSxiZSxuZSxkZSl7bGV0IHBlPSExO2lmKHMpe2xldCBqZT1mdW5jdGlvbihjZSxmZSxiZSl7bGV0IG5lPSEwPT09YmUud2lyZWZyYW1lLGRlPWFbY2UuaWRdO3ZvaWQgMD09PWRlJiYoZGU9e30sYVtjZS5pZF09ZGUpO2xldCBwZT1kZVtmZS5pZF07dm9pZCAwPT09cGUmJihwZT17fSxkZVtmZS5pZF09cGUpO2xldCBqZT1wZVtuZV07cmV0dXJuIHZvaWQgMD09PWplJiYoamU9YihpLmlzV2ViR0wyP24uY3JlYXRlVmVydGV4QXJyYXkoKTpvLmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpLHBlW25lXT1qZSksamV9KG5lLGJlLGZlKTtjIT09amUmJihjPWplLHAoYy5vYmplY3QpKSxwZT1mdW5jdGlvbihjZSxmZSl7bGV0IGJlPWMuYXR0cmlidXRlcyxuZT1jZS5hdHRyaWJ1dGVzLGRlPTA7Zm9yKGxldCBwZSBpbiBuZSl7bGV0IGplPWJlW3BlXSxDZT1uZVtwZV07aWYodm9pZCAwPT09amV8fGplLmF0dHJpYnV0ZSE9PUNlfHxqZS5kYXRhIT09Q2UuZGF0YSlyZXR1cm4hMDtkZSsrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1kZXx8Yy5pbmRleCE9PWZlfShuZSxkZSkscGUmJmZ1bmN0aW9uKGNlLGZlKXtsZXQgYmU9e30sbmU9Y2UuYXR0cmlidXRlcyxkZT0wO2ZvcihsZXQgcGUgaW4gbmUpe2xldCBqZT1uZVtwZV0sQ2U9e307Q2UuYXR0cmlidXRlPWplLGplLmRhdGEmJihDZS5kYXRhPWplLmRhdGEpLGJlW3BlXT1DZSxkZSsrfWMuYXR0cmlidXRlcz1iZSxjLmF0dHJpYnV0ZXNOdW09ZGUsYy5pbmRleD1mZX0obmUsZGUpfWVsc2V7bGV0IGplPSEwPT09ZmUud2lyZWZyYW1lOyhjLmdlb21ldHJ5IT09bmUuaWR8fGMucHJvZ3JhbSE9PWJlLmlkfHxjLndpcmVmcmFtZSE9PWplKSYmKGMuZ2VvbWV0cnk9bmUuaWQsYy5wcm9ncmFtPWJlLmlkLGMud2lyZWZyYW1lPWplLHBlPSEwKX0hMD09PWNlLmlzSW5zdGFuY2VkTWVzaCYmKHBlPSEwKSxudWxsIT09ZGUmJmUudXBkYXRlKGRlLDM0OTYzKSxwZSYmKGZ1bmN0aW9uKGNlLGZlLGJlLG5lKXtpZighMT09PWkuaXNXZWJHTDImJihjZS5pc0luc3RhbmNlZE1lc2h8fG5lLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZudWxsPT09dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlyZXR1cm47eCgpO2xldCBkZT1uZS5hdHRyaWJ1dGVzLHBlPWJlLmdldEF0dHJpYnV0ZXMoKSxqZT1mZS5kZWZhdWx0QXR0cmlidXRlVmFsdWVzO2ZvcihsZXQgQ2UgaW4gcGUpe2xldCBOZT1wZVtDZV07aWYoTmUubG9jYXRpb24+PTApe2xldCBsdD1kZVtDZV07aWYodm9pZCAwPT09bHQmJigiaW5zdGFuY2VNYXRyaXgiPT09Q2UmJmNlLmluc3RhbmNlTWF0cml4JiYobHQ9Y2UuaW5zdGFuY2VNYXRyaXgpLCJpbnN0YW5jZUNvbG9yIj09PUNlJiZjZS5pbnN0YW5jZUNvbG9yJiYobHQ9Y2UuaW5zdGFuY2VDb2xvcikpLHZvaWQgMCE9PWx0KXtsZXQgTXQ9bHQubm9ybWFsaXplZCxwdD1sdC5pdGVtU2l6ZSxPZT1lLmdldChsdCk7aWYodm9pZCAwPT09T2UpY29udGludWU7bGV0IEFuPU9lLmJ1ZmZlcix3dD1PZS50eXBlLG9uPU9lLmJ5dGVzUGVyRWxlbWVudDtpZihsdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgdmU9bHQuZGF0YSxtdD12ZS5zdHJpZGUsZnQ9bHQub2Zmc2V0O2lmKHZlJiZ2ZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IG9lPTA7b2U8TmUubG9jYXRpb25TaXplO29lKyspQShOZS5sb2NhdGlvbitvZSx2ZS5tZXNoUGVyQXR0cmlidXRlKTshMCE9PWNlLmlzSW5zdGFuY2VkTWVzaCYmdm9pZCAwPT09bmUuX21heEluc3RhbmNlQ291bnQmJihuZS5fbWF4SW5zdGFuY2VDb3VudD12ZS5tZXNoUGVyQXR0cmlidXRlKnZlLmNvdW50KX1lbHNlIGZvcihsZXQgb2U9MDtvZTxOZS5sb2NhdGlvblNpemU7b2UrKylSKE5lLmxvY2F0aW9uK29lKTtuLmJpbmRCdWZmZXIoMzQ5NjIsQW4pO2ZvcihsZXQgb2U9MDtvZTxOZS5sb2NhdGlvblNpemU7b2UrKyl0ZShOZS5sb2NhdGlvbitvZSxwdC9OZS5sb2NhdGlvblNpemUsd3QsTXQsbXQqb24sKGZ0K3B0L05lLmxvY2F0aW9uU2l6ZSpvZSkqb24pfWVsc2V7aWYobHQuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUpe2ZvcihsZXQgdmU9MDt2ZTxOZS5sb2NhdGlvblNpemU7dmUrKylBKE5lLmxvY2F0aW9uK3ZlLGx0Lm1lc2hQZXJBdHRyaWJ1dGUpOyEwIT09Y2UuaXNJbnN0YW5jZWRNZXNoJiZ2b2lkIDA9PT1uZS5fbWF4SW5zdGFuY2VDb3VudCYmKG5lLl9tYXhJbnN0YW5jZUNvdW50PWx0Lm1lc2hQZXJBdHRyaWJ1dGUqbHQuY291bnQpfWVsc2UgZm9yKGxldCB2ZT0wO3ZlPE5lLmxvY2F0aW9uU2l6ZTt2ZSsrKVIoTmUubG9jYXRpb24rdmUpO24uYmluZEJ1ZmZlcigzNDk2MixBbik7Zm9yKGxldCB2ZT0wO3ZlPE5lLmxvY2F0aW9uU2l6ZTt2ZSsrKXRlKE5lLmxvY2F0aW9uK3ZlLHB0L05lLmxvY2F0aW9uU2l6ZSx3dCxNdCxwdCpvbixwdC9OZS5sb2NhdGlvblNpemUqdmUqb24pfX1lbHNlIGlmKHZvaWQgMCE9PWplKXtsZXQgTXQ9amVbQ2VdO2lmKHZvaWQgMCE9PU10KXN3aXRjaChNdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdihOZS5sb2NhdGlvbixNdCk7YnJlYWs7Y2FzZSAzOm4udmVydGV4QXR0cmliM2Z2KE5lLmxvY2F0aW9uLE10KTticmVhaztjYXNlIDQ6bi52ZXJ0ZXhBdHRyaWI0ZnYoTmUubG9jYXRpb24sTXQpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoTmUubG9jYXRpb24sTXQpfX19fVYoKX0oY2UsZmUsYmUsbmUpLG51bGwhPT1kZSYmbi5iaW5kQnVmZmVyKDM0OTYzLGUuZ2V0KGRlKS5idWZmZXIpKX0scmVzZXQ6RCxyZXNldERlZmF1bHRTdGF0ZTpyZSxkaXNwb3NlOmZ1bmN0aW9uKCl7RCgpO2ZvcihsZXQgY2UgaW4gYSl7bGV0IGZlPWFbY2VdO2ZvcihsZXQgYmUgaW4gZmUpe2xldCBuZT1mZVtiZV07Zm9yKGxldCBkZSBpbiBuZSlmKG5lW2RlXS5vYmplY3QpLGRlbGV0ZSBuZVtkZV07ZGVsZXRlIGZlW2JlXX1kZWxldGUgYVtjZV19fSxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTpmdW5jdGlvbihjZSl7aWYodm9pZCAwPT09YVtjZS5pZF0pcmV0dXJuO2xldCBmZT1hW2NlLmlkXTtmb3IobGV0IGJlIGluIGZlKXtsZXQgbmU9ZmVbYmVdO2ZvcihsZXQgZGUgaW4gbmUpZihuZVtkZV0ub2JqZWN0KSxkZWxldGUgbmVbZGVdO2RlbGV0ZSBmZVtiZV19ZGVsZXRlIGFbY2UuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uKGNlKXtmb3IobGV0IGZlIGluIGEpe2xldCBiZT1hW2ZlXTtpZih2b2lkIDA9PT1iZVtjZS5pZF0pY29udGludWU7bGV0IG5lPWJlW2NlLmlkXTtmb3IobGV0IGRlIGluIG5lKWYobmVbZGVdLm9iamVjdCksZGVsZXRlIG5lW2RlXTtkZWxldGUgYmVbY2UuaWRdfX0saW5pdEF0dHJpYnV0ZXM6eCxlbmFibGVBdHRyaWJ1dGU6UixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpWfX1mdW5jdGlvbiBta2Uobix0LGUsaSl7bGV0IG8scj1pLmlzV2ViR0wyO3RoaXMuc2V0TW9kZT1mdW5jdGlvbihjKXtvPWN9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKGMsZCl7bi5kcmF3QXJyYXlzKG8sYyxkKSxlLnVwZGF0ZShkLG8sMSl9LHRoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKGMsZCx1KXtpZigwPT09dSlyZXR1cm47bGV0IHAsZjtpZihyKXA9bixmPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKHA9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxmPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT1wKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3BbZl0obyxjLGQsdSksZS51cGRhdGUoZCxvLHUpfX1mdW5jdGlvbiBoa2Uobix0LGUpe2xldCBpO2Z1bmN0aW9uIG8oSyl7aWYoImhpZ2hwIj09PUspe2lmKG4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMzLDM2MzM4KS5wcmVjaXNpb24+MCYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzIsMzYzMzgpLnByZWNpc2lvbj4wKXJldHVybiJoaWdocCI7Sz0ibWVkaXVtcCJ9cmV0dXJuIm1lZGl1bXAiPT09SyYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgcz10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDwidSImJm4gaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQ8InUiJiZuIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQsYT12b2lkIDAhPT1lLnByZWNpc2lvbj9lLnByZWNpc2lvbjoiaGlnaHAiLGw9byhhKTtsIT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLGEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLGE9bCk7bGV0IGM9c3x8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLGQ9ITA9PT1lLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsdT1uLmdldFBhcmFtZXRlcigzNDkzMCkscD1uLmdldFBhcmFtZXRlcigzNTY2MCksZj1uLmdldFBhcmFtZXRlcigzMzc5KSxtPW4uZ2V0UGFyYW1ldGVyKDM0MDc2KSxiPW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSxNPW4uZ2V0UGFyYW1ldGVyKDM2MzQ3KSx5PW4uZ2V0UGFyYW1ldGVyKDM2MzQ4KSx4PW4uZ2V0UGFyYW1ldGVyKDM2MzQ5KSxSPXA+MCxBPXN8fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpO3JldHVybntpc1dlYkdMMjpzLGRyYXdCdWZmZXJzOmMsZ2V0TWF4QW5pc290cm9weTpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PWkpcmV0dXJuIGk7aWYoITA9PT10LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpe2xldCBLPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpPW4uZ2V0UGFyYW1ldGVyKEsuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIGk9MDtyZXR1cm4gaX0sZ2V0TWF4UHJlY2lzaW9uOm8scHJlY2lzaW9uOmEsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpkLG1heFRleHR1cmVzOnUsbWF4VmVydGV4VGV4dHVyZXM6cCxtYXhUZXh0dXJlU2l6ZTpmLG1heEN1YmVtYXBTaXplOm0sbWF4QXR0cmlidXRlczpiLG1heFZlcnRleFVuaWZvcm1zOk0sbWF4VmFyeWluZ3M6eSxtYXhGcmFnbWVudFVuaWZvcm1zOngsdmVydGV4VGV4dHVyZXM6UixmbG9hdEZyYWdtZW50VGV4dHVyZXM6QSxmbG9hdFZlcnRleFRleHR1cmVzOlImJkEsbWF4U2FtcGxlczpzP24uZ2V0UGFyYW1ldGVyKDM2MTgzKTowfX1mdW5jdGlvbiBna2Uobil7bGV0IHQ9dGhpcyxlPW51bGwsaT0wLHI9ITEsbz0hMSxzPW5ldyBLbCxhPW5ldyBibyxsPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTtmdW5jdGlvbiBjKCl7bC52YWx1ZSE9PWUmJihsLnZhbHVlPWUsbC5uZWVkc1VwZGF0ZT1pPjApLHQubnVtUGxhbmVzPWksdC5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiBkKHUscCxmLG0pe2xldCBiPW51bGwhPT11P3UubGVuZ3RoOjAsTT1udWxsO2lmKDAhPT1iKXtpZihNPWwudmFsdWUsITAhPT1tfHxudWxsPT09TSl7bGV0IHk9Zis0KmIseD1wLm1hdHJpeFdvcmxkSW52ZXJzZTthLmdldE5vcm1hbE1hdHJpeCh4KSwobnVsbD09PU18fE0ubGVuZ3RoPHkpJiYoTT1uZXcgRmxvYXQzMkFycmF5KHkpKTtmb3IobGV0IFI9MCxBPWY7UiE9PWI7KytSLEErPTQpcy5jb3B5KHVbUl0pLmFwcGx5TWF0cml4NCh4LGEpLHMubm9ybWFsLnRvQXJyYXkoTSxBKSxNW0ErM109cy5jb25zdGFudH1sLnZhbHVlPU0sbC5uZWVkc1VwZGF0ZT0hMH1yZXR1cm4gdC5udW1QbGFuZXM9Yix0Lm51bUludGVyc2VjdGlvbj0wLE19dGhpcy51bmlmb3JtPWwsdGhpcy5udW1QbGFuZXM9MCx0aGlzLm51bUludGVyc2VjdGlvbj0wLHRoaXMuaW5pdD1mdW5jdGlvbih1LHAsZil7bGV0IG09MCE9PXUubGVuZ3RofHxwfHwwIT09aXx8cjtyZXR1cm4gcj1wLGU9ZCh1LGYsMCksaT11Lmxlbmd0aCxtfSx0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe289ITAsZChudWxsKX0sdGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMSxjKCl9LHRoaXMuc2V0U3RhdGU9ZnVuY3Rpb24odSxwLGYpe2xldCBtPXUuY2xpcHBpbmdQbGFuZXMsYj11LmNsaXBJbnRlcnNlY3Rpb24sTT11LmNsaXBTaGFkb3dzLHk9bi5nZXQodSk7aWYoIXJ8fG51bGw9PT1tfHwwPT09bS5sZW5ndGh8fG8mJiFNKW8/ZChudWxsKTpjKCk7ZWxzZXtsZXQgeD1vPzA6aSxSPTQqeCxBPXkuY2xpcHBpbmdTdGF0ZXx8bnVsbDtsLnZhbHVlPUEsQT1kKG0scCxSLGYpO2ZvcihsZXQgVj0wO1YhPT1SOysrVilBW1ZdPWVbVl07eS5jbGlwcGluZ1N0YXRlPUEsdGhpcy5udW1JbnRlcnNlY3Rpb249Yj90aGlzLm51bVBsYW5lczowLHRoaXMubnVtUGxhbmVzKz14fX19ZnVuY3Rpb24gX2tlKG4pe2xldCB0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGUocyxhKXtyZXR1cm4gYT09PUszP3MubWFwcGluZz1XeDphPT09SjMmJihzLm1hcHBpbmc9cXgpLHN9ZnVuY3Rpb24gcihzKXtsZXQgYT1zLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpO2xldCBsPXQuZ2V0KGEpO3ZvaWQgMCE9PWwmJih0LmRlbGV0ZShhKSxsLmRpc3Bvc2UoKSl9cmV0dXJue2dldDpmdW5jdGlvbihzKXtpZihzJiZzLmlzVGV4dHVyZSYmITE9PT1zLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSl7bGV0IGE9cy5tYXBwaW5nO2lmKGE9PT1LM3x8YT09PUozKXtpZih0LmhhcyhzKSlyZXR1cm4gZSh0LmdldChzKS50ZXh0dXJlLHMubWFwcGluZyk7e2xldCBsPXMuaW1hZ2U7aWYobCYmbC5oZWlnaHQ+MCl7bGV0IGM9bmV3IFNJKGwuaGVpZ2h0LzIpO3JldHVybiBjLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKG4scyksdC5zZXQocyxjKSxzLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpLGUoYy50ZXh0dXJlLHMubWFwcGluZyl9cmV0dXJuIG51bGx9fX1yZXR1cm4gc30sZGlzcG9zZTpmdW5jdGlvbigpe3Q9bmV3IFdlYWtNYXB9fX1xYy5waHlzaWNhbD17dW5pZm9ybXM6Sm8oW3FjLnN0YW5kYXJkLnVuaWZvcm1zLHtjbGVhcmNvYXQ6e3ZhbHVlOjB9LGNsZWFyY29hdE1hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Um91Z2huZXNzOnt2YWx1ZTowfSxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdE5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgJGUoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxzaGVlbjp7dmFsdWU6MH0sc2hlZW5Db2xvcjp7dmFsdWU6bmV3IGFuKDApfSxzaGVlbkNvbG9yTWFwOnt2YWx1ZTpudWxsfSxzaGVlblJvdWdobmVzczp7dmFsdWU6MX0sc2hlZW5Sb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvbjp7dmFsdWU6MH0sdHJhbnNtaXNzaW9uTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp7dmFsdWU6bmV3ICRlfSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IGFuKDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBhbigxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpiaS5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5tZXNocGh5c2ljYWxfZnJhZ307dmFyIG1tPWNsYXNzIGV4dGVuZHMgU3h7Y29uc3RydWN0b3IodD0tMSxlPTEsaT0xLHI9LTEsbz0uMSxzPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1lLHRoaXMudG9wPWksdGhpcy5ib3R0b209cix0aGlzLm5lYXI9byx0aGlzLmZhcj1zLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfXNldFZpZXdPZmZzZXQodCxlLGkscixvLHMpe251bGw9PT10aGlzLnZpZXcmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPWksdGhpcy52aWV3Lm9mZnNldFk9cix0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PXMsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7bnVsbCE9PXRoaXMudmlldyYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLGU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLGk9KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLHI9KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yLG89aS10LHM9aSt0LGE9citlLGw9ci1lO2lmKG51bGwhPT10aGlzLnZpZXcmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgYz0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLGQ9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207bys9Yyp0aGlzLnZpZXcub2Zmc2V0WCxzPW8rYyp0aGlzLnZpZXcud2lkdGgsYS09ZCp0aGlzLnZpZXcub2Zmc2V0WSxsPWEtZCp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKG8scyxhLGwsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxlLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LGUub2JqZWN0LnRvcD10aGlzLnRvcCxlLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLG51bGwhPT10aGlzLnZpZXcmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZX19O21tLnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT0hMDt2YXIgSzA9Y2xhc3MgZXh0ZW5kcyBHZHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn19O0swLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO3ZhciBXMD00LGhwPTgsV2M9TWF0aC5wb3coMixocCksS2VlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxKZWU9aHAtVzArMStLZWUubGVuZ3RoLEgzPW5ldyBtbSx7X2xvZFBsYW5lczpseCxfc2l6ZUxvZHM6WiQsX3NpZ21hczpuSX09YmtlKCksSyQ9bmV3IGFuLHozPW51bGwsbG09KDErTWF0aC5zcXJ0KDUpKS8yLE8wPTEvbG0sSiQ9W25ldyAkKDEsMSwxKSxuZXcgJCgtMSwxLDEpLG5ldyAkKDEsMSwtMSksbmV3ICQoLTEsMSwtMSksbmV3ICQoMCxsbSxPMCksbmV3ICQoMCxsbSwtTzApLG5ldyAkKE8wLDAsbG0pLG5ldyAkKC1PMCwwLGxtKSxuZXcgJChsbSxPMCwwKSxuZXcgJCgtbG0sTzAsMCldLEVJPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9ZnVuY3Rpb24obil7bGV0IHQ9bmV3IEZsb2F0MzJBcnJheSgyMCksZT1uZXcgJCgwLDEsMCk7cmV0dXJuIG5ldyBLMCh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOjIwfSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSBpbnQgc2FtcGxlcztcblx0XHRcdHVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdO1xuXHRcdFx0dW5pZm9ybSBib29sIGxhdGl0dWRpbmFsO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBkVGhldGE7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IG1pcEludDtcblx0XHRcdHVuaWZvcm0gdmVjMyBwb2xlQXhpcztcblxuXHRcdFx0I2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWXG5cdFx0XHQjaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuXG5cdFx0XHR2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHtcblxuXHRcdFx0XHRmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTtcblx0XHRcdFx0Ly8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uXG5cdFx0XHRcdHZlYzMgc2FtcGxlRGlyZWN0aW9uID0gdk91dHB1dERpcmVjdGlvbiAqIGNvc1RoZXRhXG5cdFx0XHRcdFx0KyBjcm9zcyggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogc2luKCB0aGV0YSApXG5cdFx0XHRcdFx0KyBheGlzICogZG90KCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiAoIDEuMCAtIGNvc1RoZXRhICk7XG5cblx0XHRcdFx0cmV0dXJuIGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpcmVjdGlvbiwgbWlwSW50ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdHZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHtcblxuXHRcdFx0XHRcdGF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApO1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7XG5cblx0XHRcdFx0Zm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkge1xuXG5cdFx0XHRcdFx0aWYgKCBpID49IHNhbXBsZXMgKSB7XG5cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZmxvYXQgdGhldGEgPSBkVGhldGEgKiBmbG9hdCggaSApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCAtMS4wICogdGhldGEsIGF4aXMgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggdGhldGEsIGF4aXMgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOnBwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9KCksdGhpcy5fZXF1aXJlY3RTaGFkZXI9bnVsbCx0aGlzLl9jdWJlbWFwU2hhZGVyPW51bGwsdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2JsdXJNYXRlcmlhbCl9ZnJvbVNjZW5lKHQsZT0wLGk9LjEscj0xMDApe3ozPXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBvPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cygpO3JldHVybiB0aGlzLl9zY2VuZVRvQ3ViZVVWKHQsaSxyLG8pLGU+MCYmdGhpcy5fYmx1cihvLDAsMCxlKSx0aGlzLl9hcHBseVBNUkVNKG8pLHRoaXMuX2NsZWFudXAobyksb31mcm9tRXF1aXJlY3Rhbmd1bGFyKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1mcm9tQ3ViZW1hcCh0LGU9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQsZSl9Y29tcGlsZUN1YmVtYXBTaGFkZXIoKXtudWxsPT09dGhpcy5fY3ViZW1hcFNoYWRlciYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9dGVlKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2N1YmVtYXBTaGFkZXIpKX1jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCl7bnVsbD09PXRoaXMuX2VxdWlyZWN0U2hhZGVyJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9ZWVlKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0JiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX2N1YmVtYXBTaGFkZXImJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9lcXVpcmVjdFNoYWRlciYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8bHgubGVuZ3RoO3QrKylseFt0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHozKSx0LnNjaXNzb3JUZXN0PSExLGlJKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LGUpe3ozPXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBpPWV8fHRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsaSksdGhpcy5fYXBwbHlQTVJFTShpKSx0aGlzLl9jbGVhbnVwKGkpLGl9X2FsbG9jYXRlVGFyZ2V0cyh0KXtsZXQgZT17bWFnRmlsdGVyOiRvLG1pbkZpbHRlcjokbyxnZW5lcmF0ZU1pcG1hcHM6ITEsdHlwZTpVMCxmb3JtYXQ6Z3MsZW5jb2Rpbmc6X3AsZGVwdGhCdWZmZXI6ITF9LGk9JCQoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsbnVsbD09PXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0JiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9JCQoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgYW8obHhbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLEgzKX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgYT1uZXcgZXMoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLGQ9dGhpcy5fcmVuZGVyZXIsdT1kLmF1dG9DbGVhcixwPWQudG9uZU1hcHBpbmc7ZC5nZXRDbGVhckNvbG9yKEskKSxkLnRvbmVNYXBwaW5nPWZwLGQuYXV0b0NsZWFyPSExO2xldCBmPW5ldyBwbSh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpnbyxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLG09bmV3IGFvKG5ldyBmbSxmKSxiPSExLE09dC5iYWNrZ3JvdW5kO00/TS5pc0NvbG9yJiYoZi5jb2xvci5jb3B5KE0pLHQuYmFja2dyb3VuZD1udWxsLGI9ITApOihmLmNvbG9yLmNvcHkoSyQpLGI9ITApO2ZvcihsZXQgeT0wO3k8Njt5Kyspe2xldCB4PXklMzswPT09eD8oYS51cC5zZXQoMCxsW3ldLDApLGEubG9va0F0KGNbeV0sMCwwKSk6MT09PXg/KGEudXAuc2V0KDAsMCxsW3ldKSxhLmxvb2tBdCgwLGNbeV0sMCkpOihhLnVwLnNldCgwLGxbeV0sMCksYS5sb29rQXQoMCwwLGNbeV0pKSxpSShyLHgqV2MseT4yP1djOjAsV2MsV2MpLGQuc2V0UmVuZGVyVGFyZ2V0KHIpLGImJmQucmVuZGVyKG0sYSksZC5yZW5kZXIodCxhKX1tLmdlb21ldHJ5LmRpc3Bvc2UoKSxtLm1hdGVyaWFsLmRpc3Bvc2UoKSxkLnRvbmVNYXBwaW5nPXAsZC5hdXRvQ2xlYXI9dSx0LmJhY2tncm91bmQ9TX1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7bGV0IGk9dGhpcy5fcmVuZGVyZXIscj10Lm1hcHBpbmc9PT1XeHx8dC5tYXBwaW5nPT09cXg7cj8obnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPXRlZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9ITE9PT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxKTpudWxsPT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1lZWUoKSk7bGV0IG89cj90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLHM9bmV3IGFvKGx4WzBdLG8pLGE9by51bmlmb3JtczthLmVudk1hcC52YWx1ZT10LHJ8fGEudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksaUkoZSwwLDAsMypXYywyKldjKSxpLnNldFJlbmRlclRhcmdldChlKSxpLnJlbmRlcihzLEgzKX1fYXBwbHlQTVJFTSh0KXtsZXQgZT10aGlzLl9yZW5kZXJlcixpPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgcj0xO3I8SmVlO3IrKyl7bGV0IG89TWF0aC5zcXJ0KG5JW3JdKm5JW3JdLW5JW3ItMV0qbklbci0xXSk7dGhpcy5fYmx1cih0LHItMSxyLG8sSiRbKHItMSklSiQubGVuZ3RoXSl9ZS5hdXRvQ2xlYXI9aX1fYmx1cih0LGUsaSxyLG8pe2xldCBzPXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0O3RoaXMuX2hhbGZCbHVyKHQscyxlLGksciwibGF0aXR1ZGluYWwiLG8pLHRoaXMuX2hhbGZCbHVyKHMsdCxpLGksciwibG9uZ2l0dWRpbmFsIixvKX1faGFsZkJsdXIodCxlLGkscixvLHMsYSl7bGV0IGw9dGhpcy5fcmVuZGVyZXIsYz10aGlzLl9ibHVyTWF0ZXJpYWw7ImxhdGl0dWRpbmFsIiE9PXMmJiJsb25naXR1ZGluYWwiIT09cyYmY29uc29sZS5lcnJvcigiYmx1ciBkaXJlY3Rpb24gbXVzdCBiZSBlaXRoZXIgbGF0aXR1ZGluYWwgb3IgbG9uZ2l0dWRpbmFsISIpO2xldCB1PW5ldyBhbyhseFtyXSxjKSxwPWMudW5pZm9ybXMsZj1aJFtpXS0xLG09aXNGaW5pdGUobyk/TWF0aC5QSS8oMipmKToyKk1hdGguUEkvMzksYj1vL20sTT1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IoMypiKToyMDtNPjIwJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke019IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gMjBgKTtsZXQgeT1bXSx4PTA7Zm9yKGxldCB0ZT0wO3RlPDIwOysrdGUpe2xldCBLPXRlL2IseGU9TWF0aC5leHAoLUsqSy8yKTt5LnB1c2goeGUpLDA9PT10ZT94Kz14ZTp0ZTxNJiYoeCs9Mip4ZSl9Zm9yKGxldCB0ZT0wO3RlPHkubGVuZ3RoO3RlKyspeVt0ZV09eVt0ZV0veDtwLmVudk1hcC52YWx1ZT10LnRleHR1cmUscC5zYW1wbGVzLnZhbHVlPU0scC53ZWlnaHRzLnZhbHVlPXkscC5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09cyxhJiYocC5wb2xlQXhpcy52YWx1ZT1hKSxwLmRUaGV0YS52YWx1ZT1tLHAubWlwSW50LnZhbHVlPWhwLWk7bGV0IFI9WiRbcl07aUkoZSwzKk1hdGgubWF4KDAsV2MtMipSKSwoMD09PXI/MDoyKldjKSsyKlIqKHI+aHAtVzA/ci1ocCtXMDowKSwzKlIsMipSKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcih1LEgzKX19O2Z1bmN0aW9uIGJrZSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPWhwO2ZvcihsZXQgcj0wO3I8SmVlO3IrKyl7bGV0IG89TWF0aC5wb3coMixpKTt0LnB1c2gobyk7bGV0IHM9MS9vO3I+aHAtVzA/cz1LZWVbci1ocCtXMC0xXTowPT09ciYmKHM9MCksZS5wdXNoKHMpO2xldCBhPTEvKG8tMSksbD0tYS8yLGM9MSthLzIsZD1bbCxsLGMsbCxjLGMsbCxsLGMsYyxsLGNdLHU9NixwPTYsZj0zLG09MixiPTEsTT1uZXcgRmxvYXQzMkFycmF5KGYqcCp1KSx5PW5ldyBGbG9hdDMyQXJyYXkobSpwKnUpLHg9bmV3IEZsb2F0MzJBcnJheShiKnAqdSk7Zm9yKGxldCBBPTA7QTx1O0ErKyl7bGV0IFY9QSUzKjIvMy0xLHRlPUE+Mj8wOi0xO00uc2V0KFtWLHRlLDAsVisyLzMsdGUsMCxWKzIvMyx0ZSsxLDAsVix0ZSwwLFYrMi8zLHRlKzEsMCxWLHRlKzEsMF0sZipwKkEpLHkuc2V0KGQsbSpwKkEpLHguc2V0KFtBLEEsQSxBLEEsQV0sYipwKkEpfWxldCBSPW5ldyBVaTtSLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBQcihNLGYpKSxSLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBQcih5LG0pKSxSLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgUHIoeCxiKSksbi5wdXNoKFIpLGk+VzAmJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24gJCQobil7bGV0IHQ9bmV3IEpzKDMqV2MsMypXYyxuKTtyZXR1cm4gdC50ZXh0dXJlLm1hcHBpbmc9WEksdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIGlJKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBlZWUoKXtsZXQgbj1uZXcgJGUoMSwxKTtyZXR1cm4gbmV3IEswKHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTpufX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xuXG5cdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cblx0XHRcdFx0dmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTtcblx0XHRcdFx0dmVjMiB1diA9IGVxdWlyZWN0VXYoIG91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAvIHRleGVsU2l6ZSAtIDAuNSApO1xuXHRcdFx0XHR1diAtPSBmICogdGV4ZWxTaXplO1xuXHRcdFx0XHR2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueCArPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnkgKz0gdGV4ZWxTaXplLnk7XG5cdFx0XHRcdHZlYzMgYnIgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di54IC09IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblxuXHRcdFx0XHR2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApO1xuXHRcdFx0XHR2ZWMzIGJtID0gbWl4KCBibCwgYnIsIGYueCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzpwcCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIHRlZSgpe3JldHVybiBuZXcgSzAoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogdk91dHB1dERpcmVjdGlvbi54LCB2T3V0cHV0RGlyZWN0aW9uLnl6ICkgKTtcblxuXHRcdFx0fVxuXHRcdCIsYmxlbmRpbmc6cHAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiB5a2Uobil7bGV0IHQ9bmV3IFdlYWtNYXAsZT1udWxsO2Z1bmN0aW9uIG8oYSl7bGV0IGw9YS50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTt2b2lkIDAhPT1jJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfXJldHVybntnZXQ6ZnVuY3Rpb24oYSl7aWYoYSYmYS5pc1RleHR1cmUpe2xldCBsPWEubWFwcGluZyxjPWw9PT1LM3x8bD09PUozLGQ9bD09PVd4fHxsPT09cXg7aWYoY3x8ZCl7aWYoYS5pc1JlbmRlclRhcmdldFRleHR1cmUmJiEwPT09YS5uZWVkc1BNUkVNVXBkYXRlKXthLm5lZWRzUE1SRU1VcGRhdGU9ITE7bGV0IHU9dC5nZXQoYSk7cmV0dXJuIG51bGw9PT1lJiYoZT1uZXcgRUkobikpLHU9Yz9lLmZyb21FcXVpcmVjdGFuZ3VsYXIoYSx1KTplLmZyb21DdWJlbWFwKGEsdSksdC5zZXQoYSx1KSx1LnRleHR1cmV9aWYodC5oYXMoYSkpcmV0dXJuIHQuZ2V0KGEpLnRleHR1cmU7e2xldCB1PWEuaW1hZ2U7aWYoYyYmdSYmdS5oZWlnaHQ+MHx8ZCYmdSYmZnVuY3Rpb24oYSl7bGV0IGw9MDtmb3IobGV0IGQ9MDtkPDY7ZCsrKXZvaWQgMCE9PWFbZF0mJmwrKztyZXR1cm4gNj09PWx9KHUpKXtudWxsPT09ZSYmKGU9bmV3IEVJKG4pKTtsZXQgcD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhKTplLmZyb21DdWJlbWFwKGEpO3JldHVybiB0LnNldChhLHApLGEuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbykscC50ZXh0dXJlfXJldHVybiBudWxsfX19cmV0dXJuIGF9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0PW5ldyBXZWFrTWFwLG51bGwhPT1lJiYoZS5kaXNwb3NlKCksZT1udWxsKX19fWZ1bmN0aW9uIHhrZShuKXtsZXQgdD17fTtmdW5jdGlvbiBlKGkpe2lmKHZvaWQgMCE9PXRbaV0pcmV0dXJuIHRbaV07bGV0IHI7c3dpdGNoKGkpe2Nhc2UiV0VCR0xfZGVwdGhfdGV4dHVyZSI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiOnI9bi5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTticmVhaztkZWZhdWx0OnI9bi5nZXRFeHRlbnNpb24oaSl9cmV0dXJuIHRbaV09cixyfXJldHVybntoYXM6ZnVuY3Rpb24oaSl7cmV0dXJuIG51bGwhPT1lKGkpfSxpbml0OmZ1bmN0aW9uKGkpe2kuaXNXZWJHTDI/ZSgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOihlKCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksZSgiT0VTX3RleHR1cmVfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSxlKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSxlKCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksZSgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxlKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpLGUoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLGUoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpLGUoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSxnZXQ6ZnVuY3Rpb24oaSl7bGV0IHI9ZShpKTtyZXR1cm4gbnVsbD09PXImJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitpKyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIikscn19fWZ1bmN0aW9uIENrZShuLHQsZSxpKXtsZXQgcj17fSxvPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHModSl7bGV0IHA9dS50YXJnZXQ7bnVsbCE9PXAuaW5kZXgmJnQucmVtb3ZlKHAuaW5kZXgpO2ZvcihsZXQgbSBpbiBwLmF0dHJpYnV0ZXMpdC5yZW1vdmUocC5hdHRyaWJ1dGVzW21dKTtwLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLGRlbGV0ZSByW3AuaWRdO2xldCBmPW8uZ2V0KHApO2YmJih0LnJlbW92ZShmKSxvLmRlbGV0ZShwKSksaS5yZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeShwKSwhMD09PXAuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSYmZGVsZXRlIHAuX21heEluc3RhbmNlQ291bnQsZS5tZW1vcnkuZ2VvbWV0cmllcy0tfWZ1bmN0aW9uIGModSl7bGV0IHA9W10sZj11LmluZGV4LG09dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGI9MDtpZihudWxsIT09Zil7bGV0IHg9Zi5hcnJheTtiPWYudmVyc2lvbjtmb3IobGV0IFI9MCxBPXgubGVuZ3RoO1I8QTtSKz0zKXtsZXQgVj14W1IrMF0sdGU9eFtSKzFdLEs9eFtSKzJdO3AucHVzaChWLHRlLHRlLEssSyxWKX19ZWxzZXtiPW0udmVyc2lvbjtmb3IobGV0IFI9MCxBPW0uYXJyYXkubGVuZ3RoLzMtMTtSPEE7Uis9Myl7bGV0IFY9UiswLHRlPVIrMSxLPVIrMjtwLnB1c2goVix0ZSx0ZSxLLEssVil9fWxldCBNPW5ldyhRZWUocCk/d0k6TUkpKHAsMSk7TS52ZXJzaW9uPWI7bGV0IHk9by5nZXQodSk7eSYmdC5yZW1vdmUoeSksby5zZXQodSxNKX1yZXR1cm57Z2V0OmZ1bmN0aW9uKHUscCl7cmV0dXJuITA9PT1yW3AuaWRdfHwocC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKSxyW3AuaWRdPSEwLGUubWVtb3J5Lmdlb21ldHJpZXMrKykscH0sdXBkYXRlOmZ1bmN0aW9uKHUpe2xldCBwPXUuYXR0cmlidXRlcztmb3IobGV0IG0gaW4gcCl0LnVwZGF0ZShwW21dLDM0OTYyKTtsZXQgZj11Lm1vcnBoQXR0cmlidXRlcztmb3IobGV0IG0gaW4gZil7bGV0IGI9ZlttXTtmb3IobGV0IE09MCx5PWIubGVuZ3RoO008eTtNKyspdC51cGRhdGUoYltNXSwzNDk2Mil9fSxnZXRXaXJlZnJhbWVBdHRyaWJ1dGU6ZnVuY3Rpb24odSl7bGV0IHA9by5nZXQodSk7aWYocCl7bGV0IGY9dS5pbmRleDtudWxsIT09ZiYmcC52ZXJzaW9uPGYudmVyc2lvbiYmYyh1KX1lbHNlIGModSk7cmV0dXJuIG8uZ2V0KHUpfX19ZnVuY3Rpb24gTWtlKG4sdCxlLGkpe2xldCBvLGEsbCxyPWkuaXNXZWJHTDI7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKHApe289cH0sdGhpcy5zZXRJbmRleD1mdW5jdGlvbihwKXthPXAudHlwZSxsPXAuYnl0ZXNQZXJFbGVtZW50fSx0aGlzLnJlbmRlcj1mdW5jdGlvbihwLGYpe24uZHJhd0VsZW1lbnRzKG8sZixhLHAqbCksZS51cGRhdGUoZixvLDEpfSx0aGlzLnJlbmRlckluc3RhbmNlcz1mdW5jdGlvbihwLGYsbSl7aWYoMD09PW0pcmV0dXJuO2xldCBiLE07aWYociliPW4sTT0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKGI9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxNPSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PWIpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO2JbTV0obyxmLGEscCpsLG0pLGUudXBkYXRlKGYsbyxtKX19ZnVuY3Rpb24gd2tlKG4pe2xldCBlPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07cmV0dXJue21lbW9yeTp7Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LHJlbmRlcjplLHByb2dyYW1zOm51bGwsYXV0b1Jlc2V0OiEwLHJlc2V0OmZ1bmN0aW9uKCl7ZS5mcmFtZSsrLGUuY2FsbHM9MCxlLnRyaWFuZ2xlcz0wLGUucG9pbnRzPTAsZS5saW5lcz0wfSx1cGRhdGU6ZnVuY3Rpb24obyxzLGEpe3N3aXRjaChlLmNhbGxzKysscyl7Y2FzZSA0OmUudHJpYW5nbGVzKz1hKihvLzMpO2JyZWFrO2Nhc2UgMTplLmxpbmVzKz1hKihvLzIpO2JyZWFrO2Nhc2UgMzplLmxpbmVzKz1hKihvLTEpO2JyZWFrO2Nhc2UgMjplLmxpbmVzKz1hKm87YnJlYWs7Y2FzZSAwOmUucG9pbnRzKz1hKm87YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZm86IFVua25vd24gZHJhdyBtb2RlOiIscyl9fX19dmFyIER4PWNsYXNzIGV4dGVuZHMgbG97Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1fbyx0aGlzLm1pbkZpbHRlcj1fbyx0aGlzLndyYXBSPXlhLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2Z1bmN0aW9uIFNrZShuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rpb24gRWtlKG4sdCl7cmV0dXJuIE1hdGguYWJzKHRbMV0pLU1hdGguYWJzKG5bMV0pfWZ1bmN0aW9uIG5lZShuLHQpe2xldCBlPTEsaT10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7aSBpbnN0YW5jZW9mIEludDhBcnJheT9lPTEyNzppIGluc3RhbmNlb2YgSW50MTZBcnJheT9lPTMyNzY3OmkgaW5zdGFuY2VvZiBJbnQzMkFycmF5P2U9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixpKSxuLmRpdmlkZVNjYWxhcihlKX1mdW5jdGlvbiBUa2Uobix0LGUpe2xldCBpPXt9LHI9bmV3IEZsb2F0MzJBcnJheSg4KSxvPW5ldyBXZWFrTWFwLHM9bmV3ICQsYT1bXTtmb3IobGV0IGM9MDtjPDg7YysrKWFbY109W2MsMF07cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihjLGQsdSxwKXtsZXQgZj1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZighMD09PXQuaXNXZWJHTDIpe2xldCBtPWQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCxiPW8uZ2V0KGQpO2lmKHZvaWQgMD09PWJ8fGIuY291bnQhPT1tKXtsZXQgcmU9ZnVuY3Rpb24oKXtEZS5kaXNwb3NlKCksby5kZWxldGUoZCksZC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyZSl9O3ZvaWQgMCE9PWImJmIudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHg9dm9pZCAwIT09ZC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLFI9ZC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sQT1kLm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLHRlPSEwPT09eD8yOjEsSz1kLmF0dHJpYnV0ZXMucG9zaXRpb24uY291bnQqdGUseGU9MTtLPnQubWF4VGV4dHVyZVNpemUmJih4ZT1NYXRoLmNlaWwoSy90Lm1heFRleHR1cmVTaXplKSxLPXQubWF4VGV4dHVyZVNpemUpO2xldCBYZT1uZXcgRmxvYXQzMkFycmF5KEsqeGUqNCptKSxEZT1uZXcgRHgoWGUsSyx4ZSxtKTtEZS5mb3JtYXQ9Z3MsRGUudHlwZT1jbSxEZS5uZWVkc1VwZGF0ZT0hMDtsZXQgRD00KnRlO2ZvcihsZXQgY2U9MDtjZTxtO2NlKyspe2xldCBmZT1SW2NlXSxiZT1BW2NlXSxuZT1LKnhlKjQqY2U7Zm9yKGxldCBkZT0wO2RlPGZlLmNvdW50O2RlKyspe3MuZnJvbUJ1ZmZlckF0dHJpYnV0ZShmZSxkZSksITA9PT1mZS5ub3JtYWxpemVkJiZuZWUocyxmZSk7bGV0IHBlPWRlKkQ7WGVbbmUrcGUrMF09cy54LFhlW25lK3BlKzFdPXMueSxYZVtuZStwZSsyXT1zLnosWGVbbmUrcGUrM109MCwhMD09PXgmJihzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYmUsZGUpLCEwPT09YmUubm9ybWFsaXplZCYmbmVlKHMsYmUpLFhlW25lK3BlKzRdPXMueCxYZVtuZStwZSs1XT1zLnksWGVbbmUrcGUrNl09cy56LFhlW25lK3BlKzddPTApfX1iPXtjb3VudDptLHRleHR1cmU6RGUsc2l6ZTpuZXcgJGUoSyx4ZSl9LG8uc2V0KGQsYiksZC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyZSl9bGV0IE09MDtmb3IobGV0IHg9MDt4PGYubGVuZ3RoO3grKylNKz1mW3hdO2xldCB5PWQubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLU07cC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIseSkscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsZikscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmUiLGIudGV4dHVyZSxlKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLGIuc2l6ZSl9ZWxzZXtsZXQgbT12b2lkIDA9PT1mPzA6Zi5sZW5ndGgsYj1pW2QuaWRdO2lmKHZvaWQgMD09PWJ8fGIubGVuZ3RoIT09bSl7Yj1bXTtmb3IobGV0IEE9MDtBPG07QSsrKWJbQV09W0EsMF07aVtkLmlkXT1ifWZvcihsZXQgQT0wO0E8bTtBKyspe2xldCBWPWJbQV07VlswXT1BLFZbMV09ZltBXX1iLnNvcnQoRWtlKTtmb3IobGV0IEE9MDtBPDg7QSsrKUE8bSYmYltBXVsxXT8oYVtBXVswXT1iW0FdWzBdLGFbQV1bMV09YltBXVsxXSk6KGFbQV1bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYVtBXVsxXT0wKTthLnNvcnQoU2tlKTtsZXQgTT1kLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix5PWQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCx4PTA7Zm9yKGxldCBBPTA7QTw4O0ErKyl7bGV0IFY9YVtBXSx0ZT1WWzBdLEs9VlsxXTt0ZSE9PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSJiZLPyhNJiZkLmdldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0EpIT09TVt0ZV0mJmQuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSxNW3RlXSkseSYmZC5nZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitBKSE9PXlbdGVdJiZkLnNldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EseVt0ZV0pLHJbQV09Syx4Kz1LKTooTSYmITA9PT1kLmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0EpJiZkLmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0EpLHkmJiEwPT09ZC5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitBKSYmZC5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitBKSxyW0FdPTApfWxldCBSPWQubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7cC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsUikscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscil9fX19ZnVuY3Rpb24gRGtlKG4sdCxlLGkpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGEobCl7bGV0IGM9bC50YXJnZXQ7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxlLnJlbW92ZShjLmluc3RhbmNlTWF0cml4KSxudWxsIT09Yy5pbnN0YW5jZUNvbG9yJiZlLnJlbW92ZShjLmluc3RhbmNlQ29sb3IpfXJldHVybnt1cGRhdGU6ZnVuY3Rpb24obCl7bGV0IGM9aS5yZW5kZXIuZnJhbWUsdT10LmdldChsLGwuZ2VvbWV0cnkpO3JldHVybiByLmdldCh1KSE9PWMmJih0LnVwZGF0ZSh1KSxyLnNldCh1LGMpKSxsLmlzSW5zdGFuY2VkTWVzaCYmKCExPT09bC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSYmbC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxlLnVwZGF0ZShsLmluc3RhbmNlTWF0cml4LDM0OTYyKSxudWxsIT09bC5pbnN0YW5jZUNvbG9yJiZlLnVwZGF0ZShsLmluc3RhbmNlQ29sb3IsMzQ5NjIpKSx1fSxkaXNwb3NlOmZ1bmN0aW9uKCl7cj1uZXcgV2Vha01hcH19fUR4LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDt2YXIgVEk9Y2xhc3MgZXh0ZW5kcyBsb3tjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPV9vLHRoaXMubWluRmlsdGVyPV9vLHRoaXMud3JhcFI9eWEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07VEkucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgJGVlPW5ldyBsbyxldGU9bmV3IER4LHR0ZT1uZXcgVEksbnRlPW5ldyBRMCxpZWU9W10scmVlPVtdLG9lZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxzZWU9bmV3IEZsb2F0MzJBcnJheSg5KSxhZWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBzXyhuLHQsZSl7bGV0IGk9blswXTtpZihpPD0wfHxpPjApcmV0dXJuIG47bGV0IHI9dCplLG89aWVlW3JdO2lmKHZvaWQgMD09PW8mJihvPW5ldyBGbG9hdDMyQXJyYXkociksaWVlW3JdPW8pLDAhPT10KXtpLnRvQXJyYXkobywwKTtmb3IobGV0IHM9MSxhPTA7cyE9PXQ7KytzKWErPWUsbltzXS50b0FycmF5KG8sYSl9cmV0dXJuIG99ZnVuY3Rpb24gX3Mobix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKylpZihuW2VdIT09dFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBucyhuLHQpe2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyluW2VdPXRbZV19ZnVuY3Rpb24gWkkobix0KXtsZXQgZT1yZWVbdF07dm9pZCAwPT09ZSYmKGU9bmV3IEludDMyQXJyYXkodCkscmVlW3RdPWUpO2ZvcihsZXQgaT0wO2khPT10OysraSllW2ldPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiBlfWZ1bmN0aW9uIElrZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7ZVswXSE9PXQmJihuLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiBBa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueSkmJihuLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksZVswXT10LngsZVsxXT10LnkpO2Vsc2V7aWYoX3MoZSx0KSlyZXR1cm47bi51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxucyhlLHQpfX1mdW5jdGlvbiBSa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQueikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56KTtlbHNlIGlmKHZvaWQgMCE9PXQucikoZVswXSE9PXQucnx8ZVsxXSE9PXQuZ3x8ZVsyXSE9PXQuYikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLGVbMF09dC5yLGVbMV09dC5nLGVbMl09dC5iKTtlbHNle2lmKF9zKGUsdCkpcmV0dXJuO24udW5pZm9ybTNmdih0aGlzLmFkZHIsdCksbnMoZSx0KX19ZnVuY3Rpb24gUGtlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT10LngpKGVbMF0hPT10Lnh8fGVbMV0hPT10Lnl8fGVbMl0hPT10Lnp8fGVbM10hPT10LncpJiYobi51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksZVswXT10LngsZVsxXT10LnksZVsyXT10LnosZVszXT10LncpO2Vsc2V7aWYoX3MoZSx0KSlyZXR1cm47bi51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxucyhlLHQpfX1mdW5jdGlvbiBPa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfcyhlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLG5zKGUsdCl9ZWxzZXtpZihfcyhlLGkpKXJldHVybjthZWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsYWVlKSxucyhlLGkpfX1mdW5jdGlvbiBra2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfcyhlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLG5zKGUsdCl9ZWxzZXtpZihfcyhlLGkpKXJldHVybjtzZWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsc2VlKSxucyhlLGkpfX1mdW5jdGlvbiBGa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfcyhlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLG5zKGUsdCl9ZWxzZXtpZihfcyhlLGkpKXJldHVybjtvZWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsb2VlKSxucyhlLGkpfX1mdW5jdGlvbiBOa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24gTGtlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtfcyhlLHQpfHwobi51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxucyhlLHQpKX1mdW5jdGlvbiBCa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19zKGUsdCl8fChuLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLG5zKGUsdCkpfWZ1bmN0aW9uIFZrZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7X3MoZSx0KXx8KG4udW5pZm9ybTRpdih0aGlzLmFkZHIsdCksbnMoZSx0KSl9ZnVuY3Rpb24gSGtlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiB6a2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19zKGUsdCl8fChuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxucyhlLHQpKX1mdW5jdGlvbiBVa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19zKGUsdCl8fChuLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxucyhlLHQpKX1mdW5jdGlvbiBqa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19zKGUsdCl8fChuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxucyhlLHQpKX1mdW5jdGlvbiBHa2Uobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2FmZVNldFRleHR1cmUyRCh0fHwkZWUscil9ZnVuY3Rpb24gV2tlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUzRCh0fHx0dGUscil9ZnVuY3Rpb24gcWtlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxudGUscil9ZnVuY3Rpb24gWWtlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUyREFycmF5KHR8fGV0ZSxyKX1mdW5jdGlvbiBRa2Uobix0KXtuLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFprZShuLHQpe2xldCBlPXNfKHQsdGhpcy5zaXplLDIpO24udW5pZm9ybTJmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gS2tlKG4sdCl7bGV0IGU9c18odCx0aGlzLnNpemUsMyk7bi51bmlmb3JtM2Z2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBKa2Uobix0KXtsZXQgZT1zXyh0LHRoaXMuc2l6ZSw0KTtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uICRrZShuLHQpe2xldCBlPXNfKHQsdGhpcy5zaXplLDQpO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gZUZlKG4sdCl7bGV0IGU9c18odCx0aGlzLnNpemUsOSk7bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiB0RmUobix0KXtsZXQgZT1zXyh0LHRoaXMuc2l6ZSwxNik7bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBuRmUobix0KXtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGlGZShuLHQpe24udW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gckZlKG4sdCl7bi51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBvRmUobix0KXtuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHNGZShuLHQpe24udW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGFGZShuLHQpe24udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGxGZShuLHQpe24udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGNGZShuLHQpe24udW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGRGZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1aSShlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2FmZVNldFRleHR1cmUyRCh0W29dfHwkZWUscltvXSl9ZnVuY3Rpb24gdUZlKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVpJKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zZXRUZXh0dXJlM0QodFtvXXx8dHRlLHJbb10pfWZ1bmN0aW9uIHBGZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1aSShlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fG50ZSxyW29dKX1mdW5jdGlvbiBmRmUobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9WkkoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNldFRleHR1cmUyREFycmF5KHRbb118fGV0ZSxyW29dKX1mdW5jdGlvbiBoRmUobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gSWtlO2Nhc2UgMzU2NjQ6cmV0dXJuIEFrZTtjYXNlIDM1NjY1OnJldHVybiBSa2U7Y2FzZSAzNTY2NjpyZXR1cm4gUGtlO2Nhc2UgMzU2NzQ6cmV0dXJuIE9rZTtjYXNlIDM1Njc1OnJldHVybiBra2U7Y2FzZSAzNTY3NjpyZXR1cm4gRmtlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBOa2U7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBMa2U7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBCa2U7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBWa2U7Y2FzZSA1MTI1OnJldHVybiBIa2U7Y2FzZSAzNjI5NDpyZXR1cm4gemtlO2Nhc2UgMzYyOTU6cmV0dXJuIFVrZTtjYXNlIDM2Mjk2OnJldHVybiBqa2U7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBHa2U7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIFdrZTtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBxa2U7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gWWtlfX0odC50eXBlKX1mdW5jdGlvbiBpdGUobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBRa2U7Y2FzZSAzNTY2NDpyZXR1cm4gWmtlO2Nhc2UgMzU2NjU6cmV0dXJuIEtrZTtjYXNlIDM1NjY2OnJldHVybiBKa2U7Y2FzZSAzNTY3NDpyZXR1cm4gJGtlO2Nhc2UgMzU2NzU6cmV0dXJuIGVGZTtjYXNlIDM1Njc2OnJldHVybiB0RmU7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIG5GZTtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIGlGZTtjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIHJGZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIG9GZTtjYXNlIDUxMjU6cmV0dXJuIHNGZTtjYXNlIDM2Mjk0OnJldHVybiBhRmU7Y2FzZSAzNjI5NTpyZXR1cm4gbEZlO2Nhc2UgMzYyOTY6cmV0dXJuIGNGZTtjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIGRGZTtjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gdUZlO2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuIHBGZTtjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBmRmV9fSh0LnR5cGUpfWZ1bmN0aW9uIHJ0ZShuKXt0aGlzLmlkPW4sdGhpcy5zZXE9W10sdGhpcy5tYXA9e319aXRlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihuKXtsZXQgdD10aGlzLmNhY2hlO24gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09bi5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkobi5sZW5ndGgpKSxucyh0LG4pfSxydGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10aGlzLnNlcTtmb3IobGV0IHI9MCxvPWkubGVuZ3RoO3IhPT1vOysrcil7bGV0IHM9aVtyXTtzLnNldFZhbHVlKG4sdFtzLmlkXSxlKX19O3ZhciBVMz0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24gbGVlKG4sdCl7bi5zZXEucHVzaCh0KSxuLm1hcFt0LmlkXT10fWZ1bmN0aW9uIGdGZShuLHQsZSl7bGV0IGk9bi5uYW1lLHI9aS5sZW5ndGg7Zm9yKFUzLmxhc3RJbmRleD0wOzspe2xldCBvPVUzLmV4ZWMoaSksYT1vWzFdLGM9b1szXTtpZigiXSI9PT1vWzJdJiYoYXw9MCksdm9pZCAwPT09Y3x8IlsiPT09YyYmVTMubGFzdEluZGV4KzI9PT1yKXtsZWUoZSx2b2lkIDA9PT1jP25ldyBoRmUoYSxuLHQpOm5ldyBpdGUoYSxuLHQpKTticmVha317bGV0IHU9ZS5tYXBbYV07dm9pZCAwPT09dSYmKHU9bmV3IHJ0ZShhKSxsZWUoZSx1KSksZT11fX19ZnVuY3Rpb24gZ3Aobix0KXt0aGlzLnNlcT1bXSx0aGlzLm1hcD17fTtsZXQgZT1uLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcxOCk7Zm9yKGxldCBpPTA7aTxlOysraSl7bGV0IHI9bi5nZXRBY3RpdmVVbmlmb3JtKHQsaSk7Z0ZlKHIsbi5nZXRVbmlmb3JtTG9jYXRpb24odCxyLm5hbWUpLHRoaXMpfX1mdW5jdGlvbiBjZWUobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfWdwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTt2b2lkIDAhPT1yJiZyLnNldFZhbHVlKG4sZSxpKX0sZ3AucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO3ZvaWQgMCE9PWkmJnRoaXMuc2V0VmFsdWUobixlLGkpfSxncC51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyIT09bzsrK3Ipe2xldCBzPXRbcl0sYT1lW3MuaWRdOyExIT09YS5uZWVkc1VwZGF0ZSYmcy5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fSxncC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IG89bltpXTtvLmlkIGluIHQmJmUucHVzaChvKX1yZXR1cm4gZX07dmFyIF9GZT0wO2Z1bmN0aW9uIGRlZShuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiYiIj09PXI/IiI6ZS50b1VwcGVyQ2FzZSgpKyJcblxuIityKyJcblxuIitmdW5jdGlvbihuKXtsZXQgdD1uLnNwbGl0KCJcbiIpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09ZSsxKyI6ICIrdFtlXTtyZXR1cm4gdC5qb2luKCJcbiIpfShuLmdldFNoYWRlclNvdXJjZSh0KSl9ZnVuY3Rpb24geUZlKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgX3A6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIEFyOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLG4pLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fSh0KTtyZXR1cm4idmVjNCAiK24rIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitlWzBdK2VbMV0rIjsgfSJ9ZnVuY3Rpb24geEZlKG4sdCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgWUFlOmU9IkxpbmVhciI7YnJlYWs7Y2FzZSBYQWU6ZT0iUmVpbmhhcmQiO2JyZWFrO2Nhc2UgUUFlOmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSBaQWU6ZT0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSBLQWU6ZT0iQ3VzdG9tIjticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCB0b25lTWFwcGluZzoiLHQpLGU9IkxpbmVhciJ9cmV0dXJuInZlYzMgIituKyIoIHZlYzMgY29sb3IgKSB7IHJldHVybiAiK2UrIlRvbmVNYXBwaW5nKCBjb2xvciApOyB9In1mdW5jdGlvbiBoeChuKXtyZXR1cm4iIiE9PW59ZnVuY3Rpb24gdWVlKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyx0Lm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csdC5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLHQubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyx0Lm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyx0Lm51bUhlbWlMaWdodHMpLnJlcGxhY2UoL05VTV9ESVJfTElHSFRfU0hBRE9XUy9nLHQubnVtRGlyTGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVF9TSEFET1dTL2csdC5udW1TcG90TGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRfU0hBRE9XUy9nLHQubnVtUG9pbnRMaWdodFNoYWRvd3MpfWZ1bmN0aW9uIHBlZShuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzLXQubnVtQ2xpcEludGVyc2VjdGlvbil9dmFyIFNGZT0vXlsgXHRdKiNpbmNsdWRlICs8KFtcd1xkLi9dKyk+L2dtO2Z1bmN0aW9uIG9CKG4pe3JldHVybiBuLnJlcGxhY2UoU0ZlLEVGZSl9ZnVuY3Rpb24gRUZlKG4sdCl7bGV0IGU9YmlbdF07aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8Iit0KyI+Iik7cmV0dXJuIG9CKGUpfXZhciBURmU9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxERmU9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBmZWUobil7cmV0dXJuIG4ucmVwbGFjZShERmUsb3RlKS5yZXBsYWNlKFRGZSxJRmUpfWZ1bmN0aW9uIElGZShuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksb3RlKDAsdCxlLGkpfWZ1bmN0aW9uIG90ZShuLHQsZSxpKXtsZXQgcj0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChlKTtvKyspcis9aS5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIHJ9ZnVuY3Rpb24gbWVlKG4pe2xldCB0PSJwcmVjaXNpb24gIituLnByZWNpc2lvbisiIGZsb2F0O1xucHJlY2lzaW9uICIrbi5wcmVjaXNpb24rIiBpbnQ7IjtyZXR1cm4iaGlnaHAiPT09bi5wcmVjaXNpb24/dCs9IlxuI2RlZmluZSBISUdIX1BSRUNJU0lPTiI6Im1lZGl1bXAiPT09bi5wcmVjaXNpb24/dCs9IlxuI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OIjoibG93cCI9PT1uLnByZWNpc2lvbiYmKHQrPSJcbiNkZWZpbmUgTE9XX1BSRUNJU0lPTiIpLHR9ZnVuY3Rpb24ga0ZlKG4sdCxlLGkpe2xldCBiLE0scj1uLmdldENvbnRleHQoKSxvPWUuZGVmaW5lcyxzPWUudmVydGV4U2hhZGVyLGE9ZS5mcmFnbWVudFNoYWRlcixsPWZ1bmN0aW9uKG4pe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIG4uc2hhZG93TWFwVHlwZT09PWplZT90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOm4uc2hhZG93TWFwVHlwZT09PVNBZT90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6bi5zaGFkb3dNYXBUeXBlPT09bXgmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fShlKSxjPWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIFd4OmNhc2UgcXg6dD0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSBYSTpjYXNlIHVWOnQ9IkVOVk1BUF9UWVBFX0NVQkVfVVYifXJldHVybiB0fShlKSxkPWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIHF4OmNhc2UgdVY6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiJ9cmV0dXJuIHR9KGUpLHU9ZnVuY3Rpb24obil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIFlJOnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBXQWU6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSBxQWU6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCJ9cmV0dXJuIHR9KGUpLHA9ZS5pc1dlYkdMMj8iIjpmdW5jdGlvbihuKXtyZXR1cm5bbi5leHRlbnNpb25EZXJpdmF0aXZlc3x8bi5lbnZNYXBDdWJlVVZ8fG4uYnVtcE1hcHx8bi50YW5nZW50U3BhY2VOb3JtYWxNYXB8fG4uY2xlYXJjb2F0Tm9ybWFsTWFwfHxuLmZsYXRTaGFkaW5nfHwicGh5c2ljYWwiPT09bi5zaGFkZXJJRD8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLChuLmV4dGVuc2lvbkZyYWdEZXB0aHx8bi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmbi5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZSI6IiIsbi5leHRlbnNpb25EcmF3QnVmZmVycyYmbi5yZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwobi5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxuLmVudk1hcHx8bi50cmFuc21pc3Npb24pJiZuLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIDogZW5hYmxlIjoiIl0uZmlsdGVyKGh4KS5qb2luKCJcbiIpfShlKSxmPWZ1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBpbiBuKXtsZXQgaT1uW2VdOyExIT09aSYmdC5wdXNoKCIjZGVmaW5lICIrZSsiICIraSl9cmV0dXJuIHQuam9pbigiXG4iKX0obyksbT1yLmNyZWF0ZVByb2dyYW0oKSx5PWUuZ2xzbFZlcnNpb24/IiN2ZXJzaW9uICIrZS5nbHNsVmVyc2lvbisiXG4iOiIiO2UuaXNSYXdTaGFkZXJNYXRlcmlhbD8oYj1bZl0uZmlsdGVyKGh4KS5qb2luKCJcbiIpLGIubGVuZ3RoPjAmJihiKz0iXG4iKSxNPVtwLGZdLmZpbHRlcihoeCkuam9pbigiXG4iKSxNLmxlbmd0aD4wJiYoTSs9IlxuIikpOihiPVttZWUoZSksIiNkZWZpbmUgU0hBREVSX05BTUUgIitlLnNoYWRlck5hbWUsZixlLmluc3RhbmNpbmc/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkciOiIiLGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HX0NPTE9SIjoiIixlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBNQVhfQk9ORVMgIitlLm1heEJvbmVzLGUudXNlRm9nJiZlLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixlLnVzZUZvZyYmZS5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixlLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixlLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixlLmVudk1hcD8iI2RlZmluZSAiK2Q6IiIsZS5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLGUuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixlLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsZS5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixlLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixlLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixlLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsZS5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLGUuZGlzcGxhY2VtZW50TWFwJiZlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsZS5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLGUuc3BlY3VsYXJJbnRlbnNpdHlNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQIjoiIixlLnNwZWN1bGFyQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAiOiIiLGUucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLGUubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLGUuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixlLnZlcnRleENvbG9ycz8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLGUudmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsZS52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixlLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsZS51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsZS5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsZS5tb3JwaE5vcm1hbHMmJiExPT09ZS5mbGF0U2hhZGluZz8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixlLm1vcnBoVGFyZ2V0cyYmZS5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfVEVYVFVSRSI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX0NPVU5UICIrZS5tb3JwaFRhcmdldHNDb3VudDoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HIiwiXHRhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIlx0YXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkiLCJcdGF0dHJpYnV0ZSB2ZWM0IGNvbG9yOyIsIiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIiwiXHRhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWYgKCBkZWZpbmVkKCBVU0VfTU9SUEhUQVJHRVRTICkgJiYgISBkZWZpbmVkKCBNT1JQSFRBUkdFVFNfVEVYVFVSRSApICkiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MDsiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MzsiLCJcdCNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTIiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMDsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDI7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMzsiLCJcdCNlbHNlIiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NDsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ1OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDY7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsiLCJcdCNlbmRpZiIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfU0tJTk5JTkciLCJcdGF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCJcdGF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7IiwiI2VuZGlmIiwiXG4iXS5maWx0ZXIoaHgpLmpvaW4oIlxuIiksTT1bcCxtZWUoZSksIiNkZWZpbmUgU0hBREVSX05BTUUgIitlLnNoYWRlck5hbWUsZixlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrZDoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLGUuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixlLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsZS5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixlLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixlLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixlLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixlLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsZS5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsZS5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLGUuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsZS5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLGUudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLGUudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLGUudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLGUuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixlLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixlLnZlcnRleENvbG9yc3x8ZS5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLGUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLGUuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixlLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixlLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixlLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoZS5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxlLmVudk1hcCkmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixlLnRvbmVNYXBwaW5nIT09ZnA/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixlLnRvbmVNYXBwaW5nIT09ZnA/YmkudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixlLnRvbmVNYXBwaW5nIT09ZnA/eEZlKCJ0b25lTWFwcGluZyIsZS50b25lTWFwcGluZyk6IiIsZS5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixlLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixiaS5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCx5RmUoImxpbmVhclRvT3V0cHV0VGV4ZWwiLGUub3V0cHV0RW5jb2RpbmcpLGUuZGVwdGhQYWNraW5nPyIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIitlLmRlcHRoUGFja2luZzoiIiwiXG4iXS5maWx0ZXIoaHgpLmpvaW4oIlxuIikpLHM9b0Iocykscz11ZWUocyxlKSxzPXBlZShzLGUpLGE9b0IoYSksYT11ZWUoYSxlKSxhPXBlZShhLGUpLHM9ZmVlKHMpLGE9ZmVlKGEpLGUuaXNXZWJHTDImJiEwIT09ZS5pc1Jhd1NoYWRlck1hdGVyaWFsJiYoeT0iI3ZlcnNpb24gMzAwIGVzXG4iLGI9WyJwcmVjaXNpb24gbWVkaXVtcCBzYW1wbGVyMkRBcnJheTsiLCIjZGVmaW5lIGF0dHJpYnV0ZSBpbiIsIiNkZWZpbmUgdmFyeWluZyBvdXQiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIl0uam9pbigiXG4iKSsiXG4iK2IsTT1bIiNkZWZpbmUgdmFyeWluZyBpbiIsZS5nbHNsVmVyc2lvbj09PU4kPyIiOiJsYXlvdXQobG9jYXRpb24gPSAwKSBvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7IixlLmdsc2xWZXJzaW9uPT09TiQ/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oIlxuIikrIlxuIitNKTtsZXQgdGUsSyxSPXkrTSthLEE9Y2VlKHIsMzU2MzMseStiK3MpLFY9Y2VlKHIsMzU2MzIsUik7aWYoci5hdHRhY2hTaGFkZXIobSxBKSxyLmF0dGFjaFNoYWRlcihtLFYpLHZvaWQgMCE9PWUuaW5kZXgwQXR0cmlidXRlTmFtZT9yLmJpbmRBdHRyaWJMb2NhdGlvbihtLDAsZS5pbmRleDBBdHRyaWJ1dGVOYW1lKTohMD09PWUubW9ycGhUYXJnZXRzJiZyLmJpbmRBdHRyaWJMb2NhdGlvbihtLDAsInBvc2l0aW9uIiksci5saW5rUHJvZ3JhbShtKSxuLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtsZXQgeGU9ci5nZXRQcm9ncmFtSW5mb0xvZyhtKS50cmltKCksWGU9ci5nZXRTaGFkZXJJbmZvTG9nKEEpLnRyaW0oKSxEZT1yLmdldFNoYWRlckluZm9Mb2coVikudHJpbSgpLEQ9ITAscmU9ITA7aWYoITE9PT1yLmdldFByb2dyYW1QYXJhbWV0ZXIobSwzNTcxNCkpe0Q9ITE7bGV0IGNlPWRlZShyLEEsInZlcnRleCIpLGZlPWRlZShyLFYsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIityLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK3IuZ2V0UHJvZ3JhbVBhcmFtZXRlcihtLDM1NzE1KSsiXG5cblByb2dyYW0gSW5mbyBMb2c6ICIreGUrIlxuIitjZSsiXG4iK2ZlKX1lbHNlIiIhPT14ZT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogUHJvZ3JhbSBJbmZvIExvZzoiLHhlKTooIiI9PT1YZXx8IiI9PT1EZSkmJihyZT0hMSk7cmUmJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTpELHByb2dyYW1Mb2c6eGUsdmVydGV4U2hhZGVyOntsb2c6WGUscHJlZml4OmJ9LGZyYWdtZW50U2hhZGVyOntsb2c6RGUscHJlZml4Ok19fSl9cmV0dXJuIHIuZGVsZXRlU2hhZGVyKEEpLHIuZGVsZXRlU2hhZGVyKFYpLHRoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGUmJih0ZT1uZXcgZ3AocixtKSksdGV9LHRoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1LJiYoSz1mdW5jdGlvbihuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBvPW4uZ2V0QWN0aXZlQXR0cmliKHQscikscz1vLm5hbWUsYT0xOzM1Njc0PT09by50eXBlJiYoYT0yKSwzNTY3NT09PW8udHlwZSYmKGE9MyksMzU2NzY9PT1vLnR5cGUmJihhPTQpLGVbc109e3R5cGU6by50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxzKSxsb2NhdGlvblNpemU6YX19cmV0dXJuIGV9KHIsbSkpLEt9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0obSksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPV9GZSsrLHRoaXMuY2FjaGVLZXk9dCx0aGlzLnVzZWRUaW1lcz0xLHRoaXMucHJvZ3JhbT1tLHRoaXMudmVydGV4U2hhZGVyPUEsdGhpcy5mcmFnbWVudFNoYWRlcj1WLHRoaXN9dmFyIEZGZT0wLHNCPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoaSkscz10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiExPT09cy5oYXMocikmJihzLmFkZChyKSxyLnVzZWRUaW1lcysrKSwhMT09PXMuaGFzKG8pJiYocy5hZGQobyksby51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLDA9PT1pLnVzZWRUaW1lcyYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiExPT09ZS5oYXModCkmJmUuc2V0KHQsbmV3IFNldCksZS5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCBlPXRoaXMuc2hhZGVyQ2FjaGU7aWYoITE9PT1lLmhhcyh0KSl7bGV0IGk9bmV3IGFCO2Uuc2V0KHQsaSl9cmV0dXJuIGUuZ2V0KHQpfX0sYUI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmlkPUZGZSsrLHRoaXMudXNlZFRpbWVzPTB9fTtmdW5jdGlvbiBORmUobix0LGUsaSxyLG8scyl7bGV0IGE9bmV3IENJLGw9bmV3IHNCLGM9W10sZD1yLmlzV2ViR0wyLHU9ci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHA9ci5mbG9hdFZlcnRleFRleHR1cmVzLGY9ci5tYXhWZXJ0ZXhVbmlmb3JtcyxtPXIudmVydGV4VGV4dHVyZXMsYj1yLnByZWNpc2lvbixNPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoidG9vbiIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIixTaGFkb3dNYXRlcmlhbDoic2hhZG93IixTcHJpdGVNYXRlcmlhbDoic3ByaXRlIn07cmV0dXJue2dldFBhcmFtZXRlcnM6ZnVuY3Rpb24oRCxyZSxjZSxmZSxiZSl7bGV0IE5lLGx0LE10LHB0LG5lPWZlLmZvZyxwZT0oRC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2U6dCkuZ2V0KEQuZW52TWFwfHwoRC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2ZlLmVudmlyb25tZW50Om51bGwpKSxqZT1NW0QudHlwZV0sQ2U9YmUuaXNTa2lubmVkTWVzaD9mdW5jdGlvbihEKXtsZXQgY2U9RC5za2VsZXRvbi5ib25lcztpZihwKXJldHVybiAxMDI0O3tsZXQgYmU9TWF0aC5mbG9vcigoZi0yMCkvNCksbmU9TWF0aC5taW4oYmUsY2UubGVuZ3RoKTtyZXR1cm4gbmU8Y2UubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK2NlLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK25lKyIuIiksMCk6bmV9fShiZSk6MDtpZihudWxsIT09RC5wcmVjaXNpb24mJihiPXIuZ2V0TWF4UHJlY2lzaW9uKEQucHJlY2lzaW9uKSxiIT09RC5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixELnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLGIsImluc3RlYWQuIikpLGplKXtsZXQgdmU9cWNbamVdO05lPXZlLnZlcnRleFNoYWRlcixsdD12ZS5mcmFnbWVudFNoYWRlcn1lbHNlIE5lPUQudmVydGV4U2hhZGVyLGx0PUQuZnJhZ21lbnRTaGFkZXIsbC51cGRhdGUoRCksTXQ9bC5nZXRWZXJ0ZXhTaGFkZXJJRChEKSxwdD1sLmdldEZyYWdtZW50U2hhZGVySUQoRCk7bGV0IE9lPW4uZ2V0UmVuZGVyVGFyZ2V0KCksd3Q9RC5jbGVhcmNvYXQ+MDtyZXR1cm57aXNXZWJHTDI6ZCxzaGFkZXJJRDpqZSxzaGFkZXJOYW1lOkQudHlwZSx2ZXJ0ZXhTaGFkZXI6TmUsZnJhZ21lbnRTaGFkZXI6bHQsZGVmaW5lczpELmRlZmluZXMsY3VzdG9tVmVydGV4U2hhZGVySUQ6TXQsY3VzdG9tRnJhZ21lbnRTaGFkZXJJRDpwdCxpc1Jhd1NoYWRlck1hdGVyaWFsOiEwPT09RC5pc1Jhd1NoYWRlck1hdGVyaWFsLGdsc2xWZXJzaW9uOkQuZ2xzbFZlcnNpb24scHJlY2lzaW9uOmIsaW5zdGFuY2luZzohMD09PWJlLmlzSW5zdGFuY2VkTWVzaCxpbnN0YW5jaW5nQ29sb3I6ITA9PT1iZS5pc0luc3RhbmNlZE1lc2gmJm51bGwhPT1iZS5pbnN0YW5jZUNvbG9yLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6bSxvdXRwdXRFbmNvZGluZzpudWxsPT09T2U/bi5vdXRwdXRFbmNvZGluZzohMD09PU9lLmlzWFJSZW5kZXJUYXJnZXQ/T2UudGV4dHVyZS5lbmNvZGluZzpfcCxtYXA6ISFELm1hcCxtYXRjYXA6ISFELm1hdGNhcCxlbnZNYXA6ISFwZSxlbnZNYXBNb2RlOnBlJiZwZS5tYXBwaW5nLGVudk1hcEN1YmVVVjohIXBlJiYocGUubWFwcGluZz09PVhJfHxwZS5tYXBwaW5nPT09dVYpLGxpZ2h0TWFwOiEhRC5saWdodE1hcCxhb01hcDohIUQuYW9NYXAsZW1pc3NpdmVNYXA6ISFELmVtaXNzaXZlTWFwLGJ1bXBNYXA6ISFELmJ1bXBNYXAsbm9ybWFsTWFwOiEhRC5ub3JtYWxNYXAsb2JqZWN0U3BhY2VOb3JtYWxNYXA6RC5ub3JtYWxNYXBUeXBlPT09dlJlLHRhbmdlbnRTcGFjZU5vcm1hbE1hcDpELm5vcm1hbE1hcFR5cGU9PT1vXyxkZWNvZGVWaWRlb1RleHR1cmU6ISFELm1hcCYmITA9PT1ELm1hcC5pc1ZpZGVvVGV4dHVyZSYmRC5tYXAuZW5jb2Rpbmc9PT1BcixjbGVhcmNvYXQ6d3QsY2xlYXJjb2F0TWFwOnd0JiYhIUQuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDp3dCYmISFELmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6d3QmJiEhRC5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEhRC5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEhRC5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEhRC5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISFELnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEhRC5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEhRC5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEhRC5hbHBoYU1hcCxhbHBoYVRlc3Q6RC5hbHBoYVRlc3Q+MCxhbHBoYVdyaXRlOkQuYWxwaGFXcml0ZXx8RC50cmFuc3BhcmVudCxncmFkaWVudE1hcDohIUQuZ3JhZGllbnRNYXAsc2hlZW46RC5zaGVlbj4wLHNoZWVuQ29sb3JNYXA6ISFELnNoZWVuQ29sb3JNYXAsc2hlZW5Sb3VnaG5lc3NNYXA6ISFELnNoZWVuUm91Z2huZXNzTWFwLHRyYW5zbWlzc2lvbjpELnRyYW5zbWlzc2lvbj4wLHRyYW5zbWlzc2lvbk1hcDohIUQudHJhbnNtaXNzaW9uTWFwLHRoaWNrbmVzc01hcDohIUQudGhpY2tuZXNzTWFwLGNvbWJpbmU6RC5jb21iaW5lLHZlcnRleFRhbmdlbnRzOiEhRC5ub3JtYWxNYXAmJiEhYmUuZ2VvbWV0cnkmJiEhYmUuZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczpELnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6ITA9PT1ELnZlcnRleENvbG9ycyYmISFiZS5nZW9tZXRyeSYmISFiZS5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiY0PT09YmUuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSx2ZXJ0ZXhVdnM6ISEoRC5tYXB8fEQuYnVtcE1hcHx8RC5ub3JtYWxNYXB8fEQuc3BlY3VsYXJNYXB8fEQuYWxwaGFNYXB8fEQuZW1pc3NpdmVNYXB8fEQucm91Z2huZXNzTWFwfHxELm1ldGFsbmVzc01hcHx8RC5jbGVhcmNvYXRNYXB8fEQuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHxELmNsZWFyY29hdE5vcm1hbE1hcHx8RC5kaXNwbGFjZW1lbnRNYXB8fEQudHJhbnNtaXNzaW9uTWFwfHxELnRoaWNrbmVzc01hcHx8RC5zcGVjdWxhckludGVuc2l0eU1hcHx8RC5zcGVjdWxhckNvbG9yTWFwfHxELnNoZWVuQ29sb3JNYXB8fEQuc2hlZW5Sb3VnaG5lc3NNYXApLHV2c1ZlcnRleE9ubHk6IShELm1hcHx8RC5idW1wTWFwfHxELm5vcm1hbE1hcHx8RC5zcGVjdWxhck1hcHx8RC5hbHBoYU1hcHx8RC5lbWlzc2l2ZU1hcHx8RC5yb3VnaG5lc3NNYXB8fEQubWV0YWxuZXNzTWFwfHxELmNsZWFyY29hdE5vcm1hbE1hcHx8RC50cmFuc21pc3Npb24+MHx8RC50cmFuc21pc3Npb25NYXB8fEQudGhpY2tuZXNzTWFwfHxELnNwZWN1bGFySW50ZW5zaXR5TWFwfHxELnNwZWN1bGFyQ29sb3JNYXB8fEQuc2hlZW4+MHx8RC5zaGVlbkNvbG9yTWFwfHxELnNoZWVuUm91Z2huZXNzTWFwfHwhRC5kaXNwbGFjZW1lbnRNYXApLGZvZzohIW5lLHVzZUZvZzpELmZvZyxmb2dFeHAyOm5lJiZuZS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISFELmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjpELnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsc2tpbm5pbmc6ITA9PT1iZS5pc1NraW5uZWRNZXNoJiZDZT4wLG1heEJvbmVzOkNlLHVzZVZlcnRleFRleHR1cmU6cCxtb3JwaFRhcmdldHM6ISFiZS5nZW9tZXRyeSYmISFiZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhYmUuZ2VvbWV0cnkmJiEhYmUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxtb3JwaFRhcmdldHNDb3VudDpiZS5nZW9tZXRyeSYmYmUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP2JlLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCxudW1EaXJMaWdodHM6cmUuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOnJlLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOnJlLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOnJlLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOnJlLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpyZS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6cmUucG9pbnRTaGFkb3dNYXAubGVuZ3RoLG51bVNwb3RMaWdodFNoYWRvd3M6cmUuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6cy5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjpzLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6RC5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpuLnNoYWRvd01hcC5lbmFibGVkJiZjZS5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOm4uc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6RC50b25lTWFwcGVkP24udG9uZU1hcHBpbmc6ZnAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6bi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6RC5wcmVtdWx0aXBsaWVkQWxwaGEsZG91YmxlU2lkZWQ6RC5zaWRlPT09cTAsZmxpcFNpZGVkOkQuc2lkZT09PWdvLGRlcHRoUGFja2luZzp2b2lkIDAhPT1ELmRlcHRoUGFja2luZyYmRC5kZXB0aFBhY2tpbmcsaW5kZXgwQXR0cmlidXRlTmFtZTpELmluZGV4MEF0dHJpYnV0ZU5hbWUsZXh0ZW5zaW9uRGVyaXZhdGl2ZXM6RC5leHRlbnNpb25zJiZELmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMsZXh0ZW5zaW9uRnJhZ0RlcHRoOkQuZXh0ZW5zaW9ucyYmRC5leHRlbnNpb25zLmZyYWdEZXB0aCxleHRlbnNpb25EcmF3QnVmZmVyczpELmV4dGVuc2lvbnMmJkQuZXh0ZW5zaW9ucy5kcmF3QnVmZmVycyxleHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EOkQuZXh0ZW5zaW9ucyYmRC5leHRlbnNpb25zLnNoYWRlclRleHR1cmVMT0QscmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg6ZHx8aS5oYXMoIkVYVF9mcmFnX2RlcHRoIikscmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVyczpkfHxpLmhhcygiV0VCR0xfZHJhd19idWZmZXJzIikscmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kOmR8fGkuaGFzKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIiksY3VzdG9tUHJvZ3JhbUNhY2hlS2V5OkQuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl9fSxnZXRQcm9ncmFtQ2FjaGVLZXk6ZnVuY3Rpb24oRCl7bGV0IHJlPVtdO2lmKEQuc2hhZGVySUQ/cmUucHVzaChELnNoYWRlcklEKToocmUucHVzaChELmN1c3RvbVZlcnRleFNoYWRlcklEKSxyZS5wdXNoKEQuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLHZvaWQgMCE9PUQuZGVmaW5lcylmb3IobGV0IGNlIGluIEQuZGVmaW5lcylyZS5wdXNoKGNlKSxyZS5wdXNoKEQuZGVmaW5lc1tjZV0pO3JldHVybiExPT09RC5pc1Jhd1NoYWRlck1hdGVyaWFsJiYoZnVuY3Rpb24oRCxyZSl7RC5wdXNoKHJlLnByZWNpc2lvbiksRC5wdXNoKHJlLm91dHB1dEVuY29kaW5nKSxELnB1c2gocmUuZW52TWFwTW9kZSksRC5wdXNoKHJlLmNvbWJpbmUpLEQucHVzaChyZS52ZXJ0ZXhVdnMpLEQucHVzaChyZS5mb2dFeHAyKSxELnB1c2gocmUuc2l6ZUF0dGVudWF0aW9uKSxELnB1c2gocmUubWF4Qm9uZXMpLEQucHVzaChyZS5tb3JwaFRhcmdldHNDb3VudCksRC5wdXNoKHJlLm51bURpckxpZ2h0cyksRC5wdXNoKHJlLm51bVBvaW50TGlnaHRzKSxELnB1c2gocmUubnVtU3BvdExpZ2h0cyksRC5wdXNoKHJlLm51bUhlbWlMaWdodHMpLEQucHVzaChyZS5udW1SZWN0QXJlYUxpZ2h0cyksRC5wdXNoKHJlLm51bURpckxpZ2h0U2hhZG93cyksRC5wdXNoKHJlLm51bVBvaW50TGlnaHRTaGFkb3dzKSxELnB1c2gocmUubnVtU3BvdExpZ2h0U2hhZG93cyksRC5wdXNoKHJlLnNoYWRvd01hcFR5cGUpLEQucHVzaChyZS50b25lTWFwcGluZyksRC5wdXNoKHJlLm51bUNsaXBwaW5nUGxhbmVzKSxELnB1c2gocmUubnVtQ2xpcEludGVyc2VjdGlvbiksRC5wdXNoKHJlLmFscGhhV3JpdGUpfShyZSxEKSxmdW5jdGlvbihELHJlKXthLmRpc2FibGVBbGwoKSxyZS5pc1dlYkdMMiYmYS5lbmFibGUoMCkscmUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmYS5lbmFibGUoMSkscmUuaW5zdGFuY2luZyYmYS5lbmFibGUoMikscmUuaW5zdGFuY2luZ0NvbG9yJiZhLmVuYWJsZSgzKSxyZS5tYXAmJmEuZW5hYmxlKDQpLHJlLm1hdGNhcCYmYS5lbmFibGUoNSkscmUuZW52TWFwJiZhLmVuYWJsZSg2KSxyZS5lbnZNYXBDdWJlVVYmJmEuZW5hYmxlKDcpLHJlLmxpZ2h0TWFwJiZhLmVuYWJsZSg4KSxyZS5hb01hcCYmYS5lbmFibGUoOSkscmUuZW1pc3NpdmVNYXAmJmEuZW5hYmxlKDEwKSxyZS5idW1wTWFwJiZhLmVuYWJsZSgxMSkscmUubm9ybWFsTWFwJiZhLmVuYWJsZSgxMikscmUub2JqZWN0U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDEzKSxyZS50YW5nZW50U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDE0KSxyZS5jbGVhcmNvYXQmJmEuZW5hYmxlKDE1KSxyZS5jbGVhcmNvYXRNYXAmJmEuZW5hYmxlKDE2KSxyZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDE3KSxyZS5jbGVhcmNvYXROb3JtYWxNYXAmJmEuZW5hYmxlKDE4KSxyZS5kaXNwbGFjZW1lbnRNYXAmJmEuZW5hYmxlKDE5KSxyZS5zcGVjdWxhck1hcCYmYS5lbmFibGUoMjApLHJlLnJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLHJlLm1ldGFsbmVzc01hcCYmYS5lbmFibGUoMjIpLHJlLmdyYWRpZW50TWFwJiZhLmVuYWJsZSgyMykscmUuYWxwaGFNYXAmJmEuZW5hYmxlKDI0KSxyZS5hbHBoYVRlc3QmJmEuZW5hYmxlKDI1KSxyZS52ZXJ0ZXhDb2xvcnMmJmEuZW5hYmxlKDI2KSxyZS52ZXJ0ZXhBbHBoYXMmJmEuZW5hYmxlKDI3KSxyZS52ZXJ0ZXhVdnMmJmEuZW5hYmxlKDI4KSxyZS52ZXJ0ZXhUYW5nZW50cyYmYS5lbmFibGUoMjkpLHJlLnV2c1ZlcnRleE9ubHkmJmEuZW5hYmxlKDMwKSxyZS5mb2cmJmEuZW5hYmxlKDMxKSxELnB1c2goYS5tYXNrKSxhLmRpc2FibGVBbGwoKSxyZS51c2VGb2cmJmEuZW5hYmxlKDApLHJlLmZsYXRTaGFkaW5nJiZhLmVuYWJsZSgxKSxyZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmVuYWJsZSgyKSxyZS5za2lubmluZyYmYS5lbmFibGUoMykscmUudXNlVmVydGV4VGV4dHVyZSYmYS5lbmFibGUoNCkscmUubW9ycGhUYXJnZXRzJiZhLmVuYWJsZSg1KSxyZS5tb3JwaE5vcm1hbHMmJmEuZW5hYmxlKDYpLHJlLnByZW11bHRpcGxpZWRBbHBoYSYmYS5lbmFibGUoNykscmUuc2hhZG93TWFwRW5hYmxlZCYmYS5lbmFibGUoOCkscmUucGh5c2ljYWxseUNvcnJlY3RMaWdodHMmJmEuZW5hYmxlKDkpLHJlLmRvdWJsZVNpZGVkJiZhLmVuYWJsZSgxMCkscmUuZmxpcFNpZGVkJiZhLmVuYWJsZSgxMSkscmUuZGVwdGhQYWNraW5nJiZhLmVuYWJsZSgxMikscmUuZGl0aGVyaW5nJiZhLmVuYWJsZSgxMykscmUuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJmEuZW5hYmxlKDE0KSxyZS5zcGVjdWxhckNvbG9yTWFwJiZhLmVuYWJsZSgxNSkscmUudHJhbnNtaXNzaW9uJiZhLmVuYWJsZSgxNikscmUudHJhbnNtaXNzaW9uTWFwJiZhLmVuYWJsZSgxNykscmUudGhpY2tuZXNzTWFwJiZhLmVuYWJsZSgxOCkscmUuc2hlZW4mJmEuZW5hYmxlKDE5KSxyZS5zaGVlbkNvbG9yTWFwJiZhLmVuYWJsZSgyMCkscmUuc2hlZW5Sb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxyZS5kZWNvZGVWaWRlb1RleHR1cmUmJmEuZW5hYmxlKDIyKSxELnB1c2goYS5tYXNrKX0ocmUsRCkscmUucHVzaChuLm91dHB1dEVuY29kaW5nKSkscmUucHVzaChELmN1c3RvbVByb2dyYW1DYWNoZUtleSkscmUuam9pbigpfSxnZXRVbmlmb3JtczpmdW5jdGlvbihEKXtsZXQgY2UscmU9TVtELnR5cGVdO3JldHVybiBjZT1yZT9rUmUuY2xvbmUocWNbcmVdLnVuaWZvcm1zKTpELnVuaWZvcm1zLGNlfSxhY3F1aXJlUHJvZ3JhbTpmdW5jdGlvbihELHJlKXtsZXQgY2U7Zm9yKGxldCBmZT0wLGJlPWMubGVuZ3RoO2ZlPGJlO2ZlKyspe2xldCBuZT1jW2ZlXTtpZihuZS5jYWNoZUtleT09PXJlKXtjZT1uZSwrK2NlLnVzZWRUaW1lczticmVha319cmV0dXJuIHZvaWQgMD09PWNlJiYoY2U9bmV3IGtGZShuLHJlLEQsbyksYy5wdXNoKGNlKSksY2V9LHJlbGVhc2VQcm9ncmFtOmZ1bmN0aW9uKEQpe2lmKDA9PS0tRC51c2VkVGltZXMpe2xldCByZT1jLmluZGV4T2YoRCk7Y1tyZV09Y1tjLmxlbmd0aC0xXSxjLnBvcCgpLEQuZGVzdHJveSgpfX0scmVsZWFzZVNoYWRlckNhY2hlOmZ1bmN0aW9uKEQpe2wucmVtb3ZlKEQpfSxwcm9ncmFtczpjLGRpc3Bvc2U6ZnVuY3Rpb24oKXtsLmRpc3Bvc2UoKX19fWZ1bmN0aW9uIExGZSgpe2xldCBuPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24obyl7bGV0IHM9bi5nZXQobyk7cmV0dXJuIHZvaWQgMD09PXMmJihzPXt9LG4uc2V0KG8scykpLHN9LHJlbW92ZTpmdW5jdGlvbihvKXtuLmRlbGV0ZShvKX0sdXBkYXRlOmZ1bmN0aW9uKG8scyxhKXtuLmdldChvKVtzXT1hfSxkaXNwb3NlOmZ1bmN0aW9uKCl7bj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIEJGZShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/bi5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOm4ueiE9PXQuej9uLnotdC56Om4uaWQtdC5pZH1mdW5jdGlvbiBoZWUobix0KXtyZXR1cm4gbi5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP24uZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6bi5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/bi5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOm4ueiE9PXQuej90Lnotbi56Om4uaWQtdC5pZH1mdW5jdGlvbiBnZWUoKXtsZXQgbj1bXSx0PTAsZT1bXSxpPVtdLHI9W107ZnVuY3Rpb24gcyh1LHAsZixtLGIsTSl7bGV0IHk9blt0XTtyZXR1cm4gdm9pZCAwPT09eT8oeT17aWQ6dS5pZCxvYmplY3Q6dSxnZW9tZXRyeTpwLG1hdGVyaWFsOmYsZ3JvdXBPcmRlcjptLHJlbmRlck9yZGVyOnUucmVuZGVyT3JkZXIsejpiLGdyb3VwOk19LG5bdF09eSk6KHkuaWQ9dS5pZCx5Lm9iamVjdD11LHkuZ2VvbWV0cnk9cCx5Lm1hdGVyaWFsPWYseS5ncm91cE9yZGVyPW0seS5yZW5kZXJPcmRlcj11LnJlbmRlck9yZGVyLHkuej1iLHkuZ3JvdXA9TSksdCsrLHl9cmV0dXJue29wYXF1ZTplLHRyYW5zbWlzc2l2ZTppLHRyYW5zcGFyZW50OnIsaW5pdDpmdW5jdGlvbigpe3Q9MCxlLmxlbmd0aD0wLGkubGVuZ3RoPTAsci5sZW5ndGg9MH0scHVzaDpmdW5jdGlvbih1LHAsZixtLGIsTSl7bGV0IHk9cyh1LHAsZixtLGIsTSk7Zi50cmFuc21pc3Npb24+MD9pLnB1c2goeSk6ITA9PT1mLnRyYW5zcGFyZW50P3IucHVzaCh5KTplLnB1c2goeSl9LHVuc2hpZnQ6ZnVuY3Rpb24odSxwLGYsbSxiLE0pe2xldCB5PXModSxwLGYsbSxiLE0pO2YudHJhbnNtaXNzaW9uPjA/aS51bnNoaWZ0KHkpOiEwPT09Zi50cmFuc3BhcmVudD9yLnVuc2hpZnQoeSk6ZS51bnNoaWZ0KHkpfSxmaW5pc2g6ZnVuY3Rpb24oKXtmb3IobGV0IHU9dCxwPW4ubGVuZ3RoO3U8cDt1Kyspe2xldCBmPW5bdV07aWYobnVsbD09PWYuaWQpYnJlYWs7Zi5pZD1udWxsLGYub2JqZWN0PW51bGwsZi5nZW9tZXRyeT1udWxsLGYubWF0ZXJpYWw9bnVsbCxmLmdyb3VwPW51bGx9fSxzb3J0OmZ1bmN0aW9uKHUscCl7ZS5sZW5ndGg+MSYmZS5zb3J0KHV8fEJGZSksaS5sZW5ndGg+MSYmaS5zb3J0KHB8fGhlZSksci5sZW5ndGg+MSYmci5zb3J0KHB8fGhlZSl9fX1mdW5jdGlvbiBWRmUoKXtsZXQgbj1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGkscil7bGV0IG87cmV0dXJuITE9PT1uLmhhcyhpKT8obz1uZXcgZ2VlLG4uc2V0KGksW29dKSk6cj49bi5nZXQoaSkubGVuZ3RoPyhvPW5ldyBnZWUsbi5nZXQoaSkucHVzaChvKSk6bz1uLmdldChpKVtyXSxvfSxkaXNwb3NlOmZ1bmN0aW9uKCl7bj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIEhGZSgpe2xldCBuPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09blt0LmlkXSlyZXR1cm4gblt0LmlkXTtsZXQgZTtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgJCxjb2xvcjpuZXcgYW59O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgJCxkaXJlY3Rpb246bmV3ICQsY29sb3I6bmV3IGFuLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgJCxjb2xvcjpuZXcgYW4sZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6ZT17ZGlyZWN0aW9uOm5ldyAkLHNreUNvbG9yOm5ldyBhbixncm91bmRDb2xvcjpuZXcgYW59O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6ZT17Y29sb3I6bmV3IGFuLHBvc2l0aW9uOm5ldyAkLGhhbGZXaWR0aDpuZXcgJCxoYWxmSGVpZ2h0Om5ldyAkfX1yZXR1cm4gblt0LmlkXT1lLGV9fX12YXIgVUZlPTA7ZnVuY3Rpb24gakZlKG4sdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShuLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBHRmUobix0KXtsZXQgZT1uZXcgSEZlLGk9ZnVuY3Rpb24oKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PW5bdC5pZF0pcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpjYXNlIlNwb3RMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyAkZX07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3ICRlLHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfX1yZXR1cm4gblt0LmlkXT1lLGV9fX0oKSxyPXt2ZXJzaW9uOjAsaGFzaDp7ZGlyZWN0aW9uYWxMZW5ndGg6LTEscG9pbnRMZW5ndGg6LTEsc3BvdExlbmd0aDotMSxyZWN0QXJlYUxlbmd0aDotMSxoZW1pTGVuZ3RoOi0xLG51bURpcmVjdGlvbmFsU2hhZG93czotMSxudW1Qb2ludFNoYWRvd3M6LTEsbnVtU3BvdFNoYWRvd3M6LTF9LGFtYmllbnQ6WzAsMCwwXSxwcm9iZTpbXSxkaXJlY3Rpb25hbDpbXSxkaXJlY3Rpb25hbFNoYWRvdzpbXSxkaXJlY3Rpb25hbFNoYWRvd01hcDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDpbXSxzcG90OltdLHNwb3RTaGFkb3c6W10sc3BvdFNoYWRvd01hcDpbXSxzcG90U2hhZG93TWF0cml4OltdLHJlY3RBcmVhOltdLHJlY3RBcmVhTFRDMTpudWxsLHJlY3RBcmVhTFRDMjpudWxsLHBvaW50OltdLHBvaW50U2hhZG93OltdLHBvaW50U2hhZG93TWFwOltdLHBvaW50U2hhZG93TWF0cml4OltdLGhlbWk6W119O2ZvcihsZXQgZD0wO2Q8OTtkKyspci5wcm9iZS5wdXNoKG5ldyAkKTtsZXQgbz1uZXcgJCxzPW5ldyB4bixhPW5ldyB4bjtyZXR1cm57c2V0dXA6ZnVuY3Rpb24oZCx1KXtsZXQgcD0wLGY9MCxtPTA7Zm9yKGxldCBYZT0wO1hlPDk7WGUrKylyLnByb2JlW1hlXS5zZXQoMCwwLDApO2xldCBiPTAsTT0wLHk9MCx4PTAsUj0wLEE9MCxWPTAsdGU9MDtkLnNvcnQoakZlKTtsZXQgSz0hMCE9PXU/TWF0aC5QSToxO2ZvcihsZXQgWGU9MCxEZT1kLmxlbmd0aDtYZTxEZTtYZSsrKXtsZXQgRD1kW1hlXSxyZT1ELmNvbG9yLGNlPUQuaW50ZW5zaXR5LGZlPUQuZGlzdGFuY2UsYmU9RC5zaGFkb3cmJkQuc2hhZG93Lm1hcD9ELnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKEQuaXNBbWJpZW50TGlnaHQpcCs9cmUucipjZSpLLGYrPXJlLmcqY2UqSyxtKz1yZS5iKmNlKks7ZWxzZSBpZihELmlzTGlnaHRQcm9iZSlmb3IobGV0IG5lPTA7bmU8OTtuZSsrKXIucHJvYmVbbmVdLmFkZFNjYWxlZFZlY3RvcihELnNoLmNvZWZmaWNpZW50c1tuZV0sY2UpO2Vsc2UgaWYoRC5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBuZT1lLmdldChEKTtpZihuZS5jb2xvci5jb3B5KEQuY29sb3IpLm11bHRpcGx5U2NhbGFyKEQuaW50ZW5zaXR5KkspLEQuY2FzdFNoYWRvdyl7bGV0IGRlPUQuc2hhZG93LHBlPWkuZ2V0KEQpO3BlLnNoYWRvd0JpYXM9ZGUuYmlhcyxwZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMscGUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyxwZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1tiXT1wZSxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW2JdPWJlLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbYl09RC5zaGFkb3cubWF0cml4LEErK31yLmRpcmVjdGlvbmFsW2JdPW5lLGIrK31lbHNlIGlmKEQuaXNTcG90TGlnaHQpe2xldCBuZT1lLmdldChEKTtpZihuZS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oRC5tYXRyaXhXb3JsZCksbmUuY29sb3IuY29weShyZSkubXVsdGlwbHlTY2FsYXIoY2UqSyksbmUuZGlzdGFuY2U9ZmUsbmUuY29uZUNvcz1NYXRoLmNvcyhELmFuZ2xlKSxuZS5wZW51bWJyYUNvcz1NYXRoLmNvcyhELmFuZ2xlKigxLUQucGVudW1icmEpKSxuZS5kZWNheT1ELmRlY2F5LEQuY2FzdFNoYWRvdyl7bGV0IGRlPUQuc2hhZG93LHBlPWkuZ2V0KEQpO3BlLnNoYWRvd0JpYXM9ZGUuYmlhcyxwZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMscGUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyxwZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUsci5zcG90U2hhZG93W3ldPXBlLHIuc3BvdFNoYWRvd01hcFt5XT1iZSxyLnNwb3RTaGFkb3dNYXRyaXhbeV09RC5zaGFkb3cubWF0cml4LHRlKyt9ci5zcG90W3ldPW5lLHkrK31lbHNlIGlmKEQuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgbmU9ZS5nZXQoRCk7bmUuY29sb3IuY29weShyZSkubXVsdGlwbHlTY2FsYXIoY2UpLG5lLmhhbGZXaWR0aC5zZXQoLjUqRC53aWR0aCwwLDApLG5lLmhhbGZIZWlnaHQuc2V0KDAsLjUqRC5oZWlnaHQsMCksci5yZWN0QXJlYVt4XT1uZSx4Kyt9ZWxzZSBpZihELmlzUG9pbnRMaWdodCl7bGV0IG5lPWUuZ2V0KEQpO2lmKG5lLmNvbG9yLmNvcHkoRC5jb2xvcikubXVsdGlwbHlTY2FsYXIoRC5pbnRlbnNpdHkqSyksbmUuZGlzdGFuY2U9RC5kaXN0YW5jZSxuZS5kZWNheT1ELmRlY2F5LEQuY2FzdFNoYWRvdyl7bGV0IGRlPUQuc2hhZG93LHBlPWkuZ2V0KEQpO3BlLnNoYWRvd0JpYXM9ZGUuYmlhcyxwZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMscGUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyxwZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUscGUuc2hhZG93Q2FtZXJhTmVhcj1kZS5jYW1lcmEubmVhcixwZS5zaGFkb3dDYW1lcmFGYXI9ZGUuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W01dPXBlLHIucG9pbnRTaGFkb3dNYXBbTV09YmUsci5wb2ludFNoYWRvd01hdHJpeFtNXT1ELnNoYWRvdy5tYXRyaXgsVisrfXIucG9pbnRbTV09bmUsTSsrfWVsc2UgaWYoRC5pc0hlbWlzcGhlcmVMaWdodCl7bGV0IG5lPWUuZ2V0KEQpO25lLnNreUNvbG9yLmNvcHkoRC5jb2xvcikubXVsdGlwbHlTY2FsYXIoY2UqSyksbmUuZ3JvdW5kQ29sb3IuY29weShELmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihjZSpLKSxyLmhlbWlbUl09bmUsUisrfX14PjAmJih0LmlzV2ViR0wyfHwhMD09PW4uaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT8oci5yZWN0QXJlYUxUQzE9SXQuTFRDX0ZMT0FUXzEsci5yZWN0QXJlYUxUQzI9SXQuTFRDX0ZMT0FUXzIpOiEwPT09bi5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik/KHIucmVjdEFyZWFMVEMxPUl0LkxUQ19IQUxGXzEsci5yZWN0QXJlYUxUQzI9SXQuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLHIuYW1iaWVudFswXT1wLHIuYW1iaWVudFsxXT1mLHIuYW1iaWVudFsyXT1tO2xldCB4ZT1yLmhhc2g7KHhlLmRpcmVjdGlvbmFsTGVuZ3RoIT09Ynx8eGUucG9pbnRMZW5ndGghPT1NfHx4ZS5zcG90TGVuZ3RoIT09eXx8eGUucmVjdEFyZWFMZW5ndGghPT14fHx4ZS5oZW1pTGVuZ3RoIT09Unx8eGUubnVtRGlyZWN0aW9uYWxTaGFkb3dzIT09QXx8eGUubnVtUG9pbnRTaGFkb3dzIT09Vnx8eGUubnVtU3BvdFNoYWRvd3MhPT10ZSkmJihyLmRpcmVjdGlvbmFsLmxlbmd0aD1iLHIuc3BvdC5sZW5ndGg9eSxyLnJlY3RBcmVhLmxlbmd0aD14LHIucG9pbnQubGVuZ3RoPU0sci5oZW1pLmxlbmd0aD1SLHIuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPUEsci5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9QSxyLnBvaW50U2hhZG93Lmxlbmd0aD1WLHIucG9pbnRTaGFkb3dNYXAubGVuZ3RoPVYsci5zcG90U2hhZG93Lmxlbmd0aD10ZSxyLnNwb3RTaGFkb3dNYXAubGVuZ3RoPXRlLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPUEsci5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9VixyLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPXRlLHhlLmRpcmVjdGlvbmFsTGVuZ3RoPWIseGUucG9pbnRMZW5ndGg9TSx4ZS5zcG90TGVuZ3RoPXkseGUucmVjdEFyZWFMZW5ndGg9eCx4ZS5oZW1pTGVuZ3RoPVIseGUubnVtRGlyZWN0aW9uYWxTaGFkb3dzPUEseGUubnVtUG9pbnRTaGFkb3dzPVYseGUubnVtU3BvdFNoYWRvd3M9dGUsci52ZXJzaW9uPVVGZSsrKX0sc2V0dXBWaWV3OmZ1bmN0aW9uKGQsdSl7bGV0IHA9MCxmPTAsbT0wLGI9MCxNPTAseT11Lm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHg9MCxSPWQubGVuZ3RoO3g8Ujt4Kyspe2xldCBBPWRbeF07aWYoQS5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBWPXIuZGlyZWN0aW9uYWxbcF07Vi5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEudGFyZ2V0Lm1hdHJpeFdvcmxkKSxWLmRpcmVjdGlvbi5zdWIobyksVi5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLHArK31lbHNlIGlmKEEuaXNTcG90TGlnaHQpe2xldCBWPXIuc3BvdFttXTtWLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxWLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxWLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS50YXJnZXQubWF0cml4V29ybGQpLFYuZGlyZWN0aW9uLnN1YihvKSxWLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oeSksbSsrfWVsc2UgaWYoQS5pc1JlY3RBcmVhTGlnaHQpe2xldCBWPXIucmVjdEFyZWFbYl07Vi5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksVi5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSksYS5pZGVudGl0eSgpLHMuY29weShBLm1hdHJpeFdvcmxkKSxzLnByZW11bHRpcGx5KHkpLGEuZXh0cmFjdFJvdGF0aW9uKHMpLFYuaGFsZldpZHRoLnNldCguNSpBLndpZHRoLDAsMCksVi5oYWxmSGVpZ2h0LnNldCgwLC41KkEuaGVpZ2h0LDApLFYuaGFsZldpZHRoLmFwcGx5TWF0cml4NChhKSxWLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KGEpLGIrK31lbHNlIGlmKEEuaXNQb2ludExpZ2h0KXtsZXQgVj1yLnBvaW50W2ZdO1YucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLFYucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLGYrK31lbHNlIGlmKEEuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBWPXIuaGVtaVtNXTtWLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksVi5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLFYuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLE0rK319fSxzdGF0ZTpyfX1mdW5jdGlvbiBfZWUobix0KXtsZXQgZT1uZXcgR0ZlKG4sdCksaT1bXSxyPVtdO3JldHVybntpbml0OmZ1bmN0aW9uKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfSxzdGF0ZTp7bGlnaHRzQXJyYXk6aSxzaGFkb3dzQXJyYXk6cixsaWdodHM6ZX0sc2V0dXBMaWdodHM6ZnVuY3Rpb24odSl7ZS5zZXR1cChpLHUpfSxzZXR1cExpZ2h0c1ZpZXc6ZnVuY3Rpb24odSl7ZS5zZXR1cFZpZXcoaSx1KX0scHVzaExpZ2h0OmZ1bmN0aW9uKHUpe2kucHVzaCh1KX0scHVzaFNoYWRvdzpmdW5jdGlvbih1KXtyLnB1c2godSl9fX1mdW5jdGlvbiBXRmUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKG8scz0wKXtsZXQgYTtyZXR1cm4hMT09PWUuaGFzKG8pPyhhPW5ldyBfZWUobix0KSxlLnNldChvLFthXSkpOnM+PWUuZ2V0KG8pLmxlbmd0aD8oYT1uZXcgX2VlKG4sdCksZS5nZXQobykucHVzaChhKSk6YT1lLmdldChvKVtzXSxhfSxkaXNwb3NlOmZ1bmN0aW9uKCl7ZT1uZXcgV2Vha01hcH19fXZhciBEST1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9MzIwMCx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtESS5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgSUk9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3ICQsdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTtJSS5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgcUZlPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsWUZlPSJ1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzcztcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xudW5pZm9ybSBmbG9hdCByYWRpdXM7XG4jaW5jbHVkZSA8cGFja2luZz5cbnZvaWQgbWFpbigpIHtcblx0Y29uc3QgZmxvYXQgc2FtcGxlcyA9IGZsb2F0KCBWU01fU0FNUExFUyApO1xuXHRmbG9hdCBtZWFuID0gMC4wO1xuXHRmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7XG5cdGZsb2F0IHV2U3RyaWRlID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAyLjAgLyAoIHNhbXBsZXMgLSAxLjAgKTtcblx0ZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7XG5cdGZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkge1xuXHRcdGZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTtcblx0XHQjaWZkZWYgSE9SSVpPTlRBTF9QQVNTXG5cdFx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG5cdFx0XHRtZWFuICs9IGRpc3RyaWJ1dGlvbi54O1xuXHRcdFx0c3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54O1xuXHRcdCNlbHNlXG5cdFx0XHRmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG5cdFx0XHRtZWFuICs9IGRlcHRoO1xuXHRcdFx0c3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7XG5cdFx0I2VuZGlmXG5cdH1cblx0bWVhbiA9IG1lYW4gLyBzYW1wbGVzO1xuXHRzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzO1xuXHRmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTtcblx0Z2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTtcbn0iO2Z1bmN0aW9uIHN0ZShuLHQsZSl7bGV0IGk9bmV3IFowLHI9bmV3ICRlLG89bmV3ICRlLHM9bmV3IFppLGE9bmV3IERJKHtkZXB0aFBhY2tpbmc6YlJlfSksbD1uZXcgSUksYz17fSxkPWUubWF4VGV4dHVyZVNpemUsdT17MDpnbywxOnl4LDI6cTB9LHA9bmV3IEdkKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyAkZX0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOnFGZSxmcmFnbWVudFNoYWRlcjpZRmV9KSxmPXAuY2xvbmUoKTtmLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IG09bmV3IFVpO20uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFByKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgYj1uZXcgYW8obSxwKSxNPXRoaXM7ZnVuY3Rpb24geShBLFYpe2xldCB0ZT10LnVwZGF0ZShiKTtwLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1BLmJsdXJTYW1wbGVzJiYocC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMsZi5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMscC5uZWVkc1VwZGF0ZT0hMCxmLm5lZWRzVXBkYXRlPSEwKSxwLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPUEubWFwLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcFBhc3MpLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChWLG51bGwsdGUscCxiLG51bGwpLGYudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9QS5tYXBQYXNzLnRleHR1cmUsZi51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxmLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcCksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KFYsbnVsbCx0ZSxmLGIsbnVsbCl9ZnVuY3Rpb24geChBLFYsdGUsSyx4ZSxYZSxEZSl7bGV0IEQ9bnVsbCxyZT0hMD09PUsuaXNQb2ludExpZ2h0P0EuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbDpBLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoRD12b2lkIDAhPT1yZT9yZTohMD09PUsuaXNQb2ludExpZ2h0P2w6YSxuLmxvY2FsQ2xpcHBpbmdFbmFibGVkJiYhMD09PXRlLmNsaXBTaGFkb3dzJiYwIT09dGUuY2xpcHBpbmdQbGFuZXMubGVuZ3RofHx0ZS5kaXNwbGFjZW1lbnRNYXAmJjAhPT10ZS5kaXNwbGFjZW1lbnRTY2FsZXx8dGUuYWxwaGFNYXAmJnRlLmFscGhhVGVzdD4wKXtsZXQgY2U9RC51dWlkLGZlPXRlLnV1aWQsYmU9Y1tjZV07dm9pZCAwPT09YmUmJihiZT17fSxjW2NlXT1iZSk7bGV0IG5lPWJlW2ZlXTt2b2lkIDA9PT1uZSYmKG5lPUQuY2xvbmUoKSxiZVtmZV09bmUpLEQ9bmV9cmV0dXJuIEQudmlzaWJsZT10ZS52aXNpYmxlLEQud2lyZWZyYW1lPXRlLndpcmVmcmFtZSxELnNpZGU9RGU9PT1teD9udWxsIT09dGUuc2hhZG93U2lkZT90ZS5zaGFkb3dTaWRlOnRlLnNpZGU6bnVsbCE9PXRlLnNoYWRvd1NpZGU/dGUuc2hhZG93U2lkZTp1W3RlLnNpZGVdLEQuYWxwaGFNYXA9dGUuYWxwaGFNYXAsRC5hbHBoYVRlc3Q9dGUuYWxwaGFUZXN0LEQuY2xpcFNoYWRvd3M9dGUuY2xpcFNoYWRvd3MsRC5jbGlwcGluZ1BsYW5lcz10ZS5jbGlwcGluZ1BsYW5lcyxELmNsaXBJbnRlcnNlY3Rpb249dGUuY2xpcEludGVyc2VjdGlvbixELmRpc3BsYWNlbWVudE1hcD10ZS5kaXNwbGFjZW1lbnRNYXAsRC5kaXNwbGFjZW1lbnRTY2FsZT10ZS5kaXNwbGFjZW1lbnRTY2FsZSxELmRpc3BsYWNlbWVudEJpYXM9dGUuZGlzcGxhY2VtZW50QmlhcyxELndpcmVmcmFtZUxpbmV3aWR0aD10ZS53aXJlZnJhbWVMaW5ld2lkdGgsRC5saW5ld2lkdGg9dGUubGluZXdpZHRoLCEwPT09Sy5pc1BvaW50TGlnaHQmJiEwPT09RC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsJiYoRC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCksRC5uZWFyRGlzdGFuY2U9eGUsRC5mYXJEaXN0YW5jZT1YZSksRH1mdW5jdGlvbiBSKEEsVix0ZSxLLHhlKXtpZighMT09PUEudmlzaWJsZSlyZXR1cm47aWYoQS5sYXllcnMudGVzdChWLmxheWVycykmJihBLmlzTWVzaHx8QS5pc0xpbmV8fEEuaXNQb2ludHMpJiYoQS5jYXN0U2hhZG93fHxBLnJlY2VpdmVTaGFkb3cmJnhlPT09bXgpJiYoIUEuZnJ1c3R1bUN1bGxlZHx8aS5pbnRlcnNlY3RzT2JqZWN0KEEpKSl7QS5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyh0ZS5tYXRyaXhXb3JsZEludmVyc2UsQS5tYXRyaXhXb3JsZCk7bGV0IEQ9dC51cGRhdGUoQSkscmU9QS5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHJlKSl7bGV0IGNlPUQuZ3JvdXBzO2ZvcihsZXQgZmU9MCxiZT1jZS5sZW5ndGg7ZmU8YmU7ZmUrKyl7bGV0IG5lPWNlW2ZlXSxkZT1yZVtuZS5tYXRlcmlhbEluZGV4XTtpZihkZSYmZGUudmlzaWJsZSl7bGV0IHBlPXgoQSwwLGRlLEssdGUubmVhcix0ZS5mYXIseGUpO24ucmVuZGVyQnVmZmVyRGlyZWN0KHRlLG51bGwsRCxwZSxBLG5lKX19fWVsc2UgaWYocmUudmlzaWJsZSl7bGV0IGNlPXgoQSwwLHJlLEssdGUubmVhcix0ZS5mYXIseGUpO24ucmVuZGVyQnVmZmVyRGlyZWN0KHRlLG51bGwsRCxjZSxBLG51bGwpfX1sZXQgRGU9QS5jaGlsZHJlbjtmb3IobGV0IEQ9MCxyZT1EZS5sZW5ndGg7RDxyZTtEKyspUihEZVtEXSxWLHRlLEsseGUpfXRoaXMuZW5hYmxlZD0hMSx0aGlzLmF1dG9VcGRhdGU9ITAsdGhpcy5uZWVkc1VwZGF0ZT0hMSx0aGlzLnR5cGU9amVlLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEEsVix0ZSl7aWYoITE9PT1NLmVuYWJsZWR8fCExPT09TS5hdXRvVXBkYXRlJiYhMT09PU0ubmVlZHNVcGRhdGV8fDA9PT1BLmxlbmd0aClyZXR1cm47bGV0IEs9bi5nZXRSZW5kZXJUYXJnZXQoKSx4ZT1uLmdldEFjdGl2ZUN1YmVGYWNlKCksWGU9bi5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLERlPW4uc3RhdGU7RGUuc2V0QmxlbmRpbmcocHApLERlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoMSwxLDEsMSksRGUuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxEZS5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCBEPTAscmU9QS5sZW5ndGg7RDxyZTtEKyspe2xldCBjZT1BW0RdLGZlPWNlLnNoYWRvdztpZih2b2lkIDA9PT1mZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLGNlLCJoYXMgbm8gc2hhZG93LiIpO2NvbnRpbnVlfWlmKCExPT09ZmUuYXV0b1VwZGF0ZSYmITE9PT1mZS5uZWVkc1VwZGF0ZSljb250aW51ZTtyLmNvcHkoZmUubWFwU2l6ZSk7bGV0IGJlPWZlLmdldEZyYW1lRXh0ZW50cygpO2lmKHIubXVsdGlwbHkoYmUpLG8uY29weShmZS5tYXBTaXplKSwoci54PmR8fHIueT5kKSYmKHIueD5kJiYoby54PU1hdGguZmxvb3IoZC9iZS54KSxyLng9by54KmJlLngsZmUubWFwU2l6ZS54PW8ueCksci55PmQmJihvLnk9TWF0aC5mbG9vcihkL2JlLnkpLHIueT1vLnkqYmUueSxmZS5tYXBTaXplLnk9by55KSksbnVsbD09PWZlLm1hcCYmIWZlLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09bXgpe2xldCBkZT17bWluRmlsdGVyOiRvLG1hZ0ZpbHRlcjokbyxmb3JtYXQ6Z3N9O2ZlLm1hcD1uZXcgSnMoci54LHIueSxkZSksZmUubWFwLnRleHR1cmUubmFtZT1jZS5uYW1lKyIuc2hhZG93TWFwIixmZS5tYXBQYXNzPW5ldyBKcyhyLngsci55LGRlKSxmZS5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfW51bGw9PT1mZS5tYXAmJihmZS5tYXA9bmV3IEpzKHIueCxyLnkse21pbkZpbHRlcjpfbyxtYWdGaWx0ZXI6X28sZm9ybWF0OmdzfSksZmUubWFwLnRleHR1cmUubmFtZT1jZS5uYW1lKyIuc2hhZG93TWFwIixmZS5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxuLnNldFJlbmRlclRhcmdldChmZS5tYXApLG4uY2xlYXIoKTtsZXQgbmU9ZmUuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgZGU9MDtkZTxuZTtkZSsrKXtsZXQgcGU9ZmUuZ2V0Vmlld3BvcnQoZGUpO3Muc2V0KG8ueCpwZS54LG8ueSpwZS55LG8ueCpwZS56LG8ueSpwZS53KSxEZS52aWV3cG9ydChzKSxmZS51cGRhdGVNYXRyaWNlcyhjZSxkZSksaT1mZS5nZXRGcnVzdHVtKCksUihWLHRlLGZlLmNhbWVyYSxjZSx0aGlzLnR5cGUpfSFmZS5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PW14JiZ5KGZlLHRlKSxmZS5uZWVkc1VwZGF0ZT0hMX1NLm5lZWRzVXBkYXRlPSExLG4uc2V0UmVuZGVyVGFyZ2V0KEsseGUsWGUpfX1mdW5jdGlvbiBYRmUobix0LGUpe2xldCBpPWUuaXNXZWJHTDIsYT1uZXcgZnVuY3Rpb24oKXtsZXQgYWU9ITEsSnQ9bmV3IFppLGp0PW51bGwsVG49bmV3IFppKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFdlKXtqdCE9PVdlJiYhYWUmJihuLmNvbG9yTWFzayhXZSxXZSxXZSxXZSksanQ9V2UpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oV2Upe2FlPVdlfSxzZXRDbGVhcjpmdW5jdGlvbihXZSxibix1aSx1cix6byl7ITA9PT16byYmKFdlKj11cixibio9dXIsdWkqPXVyKSxKdC5zZXQoV2UsYm4sdWksdXIpLCExPT09VG4uZXF1YWxzKEp0KSYmKG4uY2xlYXJDb2xvcihXZSxibix1aSx1ciksVG4uY29weShKdCkpfSxyZXNldDpmdW5jdGlvbigpe2FlPSExLGp0PW51bGwsVG4uc2V0KC0xLDAsMCwwKX19fSxsPW5ldyBmdW5jdGlvbigpe2xldCBhZT0hMSxKdD1udWxsLGp0PW51bGwsVG49bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihXZSl7V2U/T2UoMjkyOSk6QW4oMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oV2Upe0p0IT09V2UmJiFhZSYmKG4uZGVwdGhNYXNrKFdlKSxKdD1XZSl9LHNldEZ1bmM6ZnVuY3Rpb24oV2Upe2lmKGp0IT09V2Upe2lmKFdlKXN3aXRjaChXZSl7Y2FzZSBCQWU6bi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIFZBZTpuLmRlcHRoRnVuYyg1MTkpO2JyZWFrO2Nhc2UgSEFlOm4uZGVwdGhGdW5jKDUxMyk7YnJlYWs7Y2FzZSBaMzpuLmRlcHRoRnVuYyg1MTUpO2JyZWFrO2Nhc2UgekFlOm4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSBVQWU6bi5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIGpBZTpuLmRlcHRoRnVuYyg1MTYpO2JyZWFrO2Nhc2UgR0FlOm4uZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpuLmRlcHRoRnVuYyg1MTUpfWVsc2Ugbi5kZXB0aEZ1bmMoNTE1KTtqdD1XZX19LHNldExvY2tlZDpmdW5jdGlvbihXZSl7YWU9V2V9LHNldENsZWFyOmZ1bmN0aW9uKFdlKXtUbiE9PVdlJiYobi5jbGVhckRlcHRoKFdlKSxUbj1XZSl9LHJlc2V0OmZ1bmN0aW9uKCl7YWU9ITEsSnQ9bnVsbCxqdD1udWxsLFRuPW51bGx9fX0sYz1uZXcgZnVuY3Rpb24oKXtsZXQgYWU9ITEsSnQ9bnVsbCxqdD1udWxsLFRuPW51bGwsV2U9bnVsbCxibj1udWxsLHVpPW51bGwsdXI9bnVsbCx6bz1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKENyKXthZXx8KENyP09lKDI5NjApOkFuKDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihDcil7SnQhPT1DciYmIWFlJiYobi5zdGVuY2lsTWFzayhDciksSnQ9Q3IpfSxzZXRGdW5jOmZ1bmN0aW9uKENyLE1hLHZzKXsoanQhPT1Dcnx8VG4hPT1NYXx8V2UhPT12cykmJihuLnN0ZW5jaWxGdW5jKENyLE1hLHZzKSxqdD1DcixUbj1NYSxXZT12cyl9LHNldE9wOmZ1bmN0aW9uKENyLE1hLHZzKXsoYm4hPT1Dcnx8dWkhPT1NYXx8dXIhPT12cykmJihuLnN0ZW5jaWxPcChDcixNYSx2cyksYm49Q3IsdWk9TWEsdXI9dnMpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oQ3Ipe2FlPUNyfSxzZXRDbGVhcjpmdW5jdGlvbihDcil7em8hPT1DciYmKG4uY2xlYXJTdGVuY2lsKENyKSx6bz1Dcil9LHJlc2V0OmZ1bmN0aW9uKCl7YWU9ITEsSnQ9bnVsbCxqdD1udWxsLFRuPW51bGwsV2U9bnVsbCxibj1udWxsLHVpPW51bGwsdXI9bnVsbCx6bz1udWxsfX19LGQ9e30sdT17fSxwPW5ldyBXZWFrTWFwLGY9W10sbT1udWxsLGI9ITEsTT1udWxsLHk9bnVsbCx4PW51bGwsUj1udWxsLEE9bnVsbCxWPW51bGwsdGU9bnVsbCxLPSExLHhlPW51bGwsWGU9bnVsbCxEZT1udWxsLEQ9bnVsbCxyZT1udWxsLGNlPW4uZ2V0UGFyYW1ldGVyKDM1NjYxKSxmZT0hMSxiZT0wLG5lPW4uZ2V0UGFyYW1ldGVyKDc5MzgpOy0xIT09bmUuaW5kZXhPZigiV2ViR0wiKT8oYmU9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMobmUpWzFdKSxmZT1iZT49MSk6LTEhPT1uZS5pbmRleE9mKCJPcGVuR0wgRVMiKSYmKGJlPXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhuZSlbMV0pLGZlPWJlPj0yKTtsZXQgZGU9bnVsbCxwZT17fSxqZT1uLmdldFBhcmFtZXRlcigzMDg4KSxDZT1uLmdldFBhcmFtZXRlcigyOTc4KSxOZT0obmV3IFppKS5mcm9tQXJyYXkoamUpLGx0PShuZXcgWmkpLmZyb21BcnJheShDZSk7ZnVuY3Rpb24gTXQoYWUsSnQsanQpe2xldCBUbj1uZXcgVWludDhBcnJheSg0KSxXZT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKGFlLFdlKSxuLnRleFBhcmFtZXRlcmkoYWUsMTAyNDEsOTcyOCksbi50ZXhQYXJhbWV0ZXJpKGFlLDEwMjQwLDk3MjgpO2ZvcihsZXQgYm49MDtibjxqdDtibisrKW4udGV4SW1hZ2UyRChKdCtibiwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLFRuKTtyZXR1cm4gV2V9bGV0IHB0PXt9O2Z1bmN0aW9uIE9lKGFlKXshMCE9PWRbYWVdJiYobi5lbmFibGUoYWUpLGRbYWVdPSEwKX1mdW5jdGlvbiBBbihhZSl7ITEhPT1kW2FlXSYmKG4uZGlzYWJsZShhZSksZFthZV09ITEpfXB0WzM1NTNdPU10KDM1NTMsMzU1MywxKSxwdFszNDA2N109TXQoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksT2UoMjkyOSksbC5zZXRGdW5jKFozKSxZZSghMSksX3QoYSQpLE9lKDI4ODQpLG9lKHBwKTtsZXQgbXQ9e1tCMF06MzI3NzQsW1RBZV06MzI3NzgsW0RBZV06MzI3Nzl9O2lmKGkpbXRbdSRdPTMyNzc1LG10W3AkXT0zMjc3NjtlbHNle2xldCBhZT10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO251bGwhPT1hZSYmKG10W3UkXT1hZS5NSU5fRVhULG10W3AkXT1hZS5NQVhfRVhUKX1sZXQgZnQ9e1tJQWVdOjAsW0FBZV06MSxbUkFlXTo3NjgsW1dlZV06NzcwLFtMQWVdOjc3NixbRkFlXTo3NzQsW09BZV06NzcyLFtQQWVdOjc2OSxbcWVlXTo3NzEsW05BZV06Nzc1LFtrQWVdOjc3M307ZnVuY3Rpb24gb2UoYWUsSnQsanQsVG4sV2UsYm4sdWksdXIpe2lmKGFlIT09cHApe2lmKCExPT09YiYmKE9lKDMwNDIpLGI9ITApLGFlPT09RUFlKVdlPVdlfHxKdCxibj1ibnx8anQsdWk9dWl8fFRuLChKdCE9PXl8fFdlIT09QSkmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtdFtKdF0sbXRbV2VdKSx5PUp0LEE9V2UpLChqdCE9PXh8fFRuIT09Unx8Ym4hPT1WfHx1aSE9PXRlKSYmKG4uYmxlbmRGdW5jU2VwYXJhdGUoZnRbanRdLGZ0W1RuXSxmdFtibl0sZnRbdWldKSx4PWp0LFI9VG4sVj1ibix0ZT11aSksTT1hZSxLPW51bGw7ZWxzZSBpZihhZSE9PU18fHVyIT09Syl7aWYoKHkhPT1CMHx8QSE9PUIwKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCkseT1CMCxBPUIwKSx1cilzd2l0Y2goYWUpe2Nhc2UgZ3g6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSBsJDpuLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgYyQ6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgZCQ6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OCwwLDc3MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGFlKX1lbHNlIHN3aXRjaChhZSl7Y2FzZSBneDpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgbCQ6bi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgYyQ6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgZCQ6bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixhZSl9eD1udWxsLFI9bnVsbCxWPW51bGwsdGU9bnVsbCxNPWFlLEs9dXJ9fWVsc2UhMD09PWImJihBbigzMDQyKSxiPSExKX1mdW5jdGlvbiBZZShhZSl7eGUhPT1hZSYmKG4uZnJvbnRGYWNlKGFlPzIzMDQ6MjMwNSkseGU9YWUpfWZ1bmN0aW9uIF90KGFlKXthZSE9PU1BZT8oT2UoMjg4NCksYWUhPT1YZSYmbi5jdWxsRmFjZShhZT09PWEkPzEwMjk6YWU9PT13QWU/MTAyODoxMDMyKSk6QW4oMjg4NCksWGU9YWV9ZnVuY3Rpb24gc24oYWUsSnQsanQpe2FlPyhPZSgzMjgyMyksKEQhPT1KdHx8cmUhPT1qdCkmJihuLnBvbHlnb25PZmZzZXQoSnQsanQpLEQ9SnQscmU9anQpKTpBbigzMjgyMyl9ZnVuY3Rpb24gdGkoYWUpe3ZvaWQgMD09PWFlJiYoYWU9MzM5ODQrY2UtMSksZGUhPT1hZSYmKG4uYWN0aXZlVGV4dHVyZShhZSksZGU9YWUpfXJldHVybntidWZmZXJzOntjb2xvcjphLGRlcHRoOmwsc3RlbmNpbDpjfSxlbmFibGU6T2UsZGlzYWJsZTpBbixiaW5kRnJhbWVidWZmZXI6ZnVuY3Rpb24oYWUsSnQpe3JldHVybiB1W2FlXSE9PUp0JiYobi5iaW5kRnJhbWVidWZmZXIoYWUsSnQpLHVbYWVdPUp0LGkmJigzNjAwOT09PWFlJiYodVszNjE2MF09SnQpLDM2MTYwPT09YWUmJih1WzM2MDA5XT1KdCkpLCEwKX0sZHJhd0J1ZmZlcnM6ZnVuY3Rpb24oYWUsSnQpe2xldCBqdD1mLFRuPSExO2lmKGFlKWlmKGp0PXAuZ2V0KEp0KSx2b2lkIDA9PT1qdCYmKGp0PVtdLHAuc2V0KEp0LGp0KSksYWUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyl7bGV0IFdlPWFlLnRleHR1cmU7aWYoanQubGVuZ3RoIT09V2UubGVuZ3RofHwzNjA2NCE9PWp0WzBdKXtmb3IobGV0IGJuPTAsdWk9V2UubGVuZ3RoO2JuPHVpO2JuKyspanRbYm5dPTM2MDY0K2JuO2p0Lmxlbmd0aD1XZS5sZW5ndGgsVG49ITB9fWVsc2UgMzYwNjQhPT1qdFswXSYmKGp0WzBdPTM2MDY0LFRuPSEwKTtlbHNlIDEwMjkhPT1qdFswXSYmKGp0WzBdPTEwMjksVG49ITApO1RuJiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKGp0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChqdCkpfSx1c2VQcm9ncmFtOmZ1bmN0aW9uKGFlKXtyZXR1cm4gbSE9PWFlJiYobi51c2VQcm9ncmFtKGFlKSxtPWFlLCEwKX0sc2V0QmxlbmRpbmc6b2Usc2V0TWF0ZXJpYWw6ZnVuY3Rpb24oYWUsSnQpe2FlLnNpZGU9PT1xMD9BbigyODg0KTpPZSgyODg0KTtsZXQganQ9YWUuc2lkZT09PWdvO0p0JiYoanQ9IWp0KSxZZShqdCksYWUuYmxlbmRpbmc9PT1neCYmITE9PT1hZS50cmFuc3BhcmVudD9vZShwcCk6b2UoYWUuYmxlbmRpbmcsYWUuYmxlbmRFcXVhdGlvbixhZS5ibGVuZFNyYyxhZS5ibGVuZERzdCxhZS5ibGVuZEVxdWF0aW9uQWxwaGEsYWUuYmxlbmRTcmNBbHBoYSxhZS5ibGVuZERzdEFscGhhLGFlLnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKGFlLmRlcHRoRnVuYyksbC5zZXRUZXN0KGFlLmRlcHRoVGVzdCksbC5zZXRNYXNrKGFlLmRlcHRoV3JpdGUpLGEuc2V0TWFzayhhZS5jb2xvcldyaXRlKTtsZXQgVG49YWUuc3RlbmNpbFdyaXRlO2Muc2V0VGVzdChUbiksVG4mJihjLnNldE1hc2soYWUuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKGFlLnN0ZW5jaWxGdW5jLGFlLnN0ZW5jaWxSZWYsYWUuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKGFlLnN0ZW5jaWxGYWlsLGFlLnN0ZW5jaWxaRmFpbCxhZS5zdGVuY2lsWlBhc3MpKSxzbihhZS5wb2x5Z29uT2Zmc2V0LGFlLnBvbHlnb25PZmZzZXRGYWN0b3IsYWUucG9seWdvbk9mZnNldFVuaXRzKSwhMD09PWFlLmFscGhhVG9Db3ZlcmFnZT9PZSgzMjkyNik6QW4oMzI5MjYpfSxzZXRGbGlwU2lkZWQ6WWUsc2V0Q3VsbEZhY2U6X3Qsc2V0TGluZVdpZHRoOmZ1bmN0aW9uKGFlKXthZSE9PURlJiYoZmUmJm4ubGluZVdpZHRoKGFlKSxEZT1hZSl9LHNldFBvbHlnb25PZmZzZXQ6c24sc2V0U2Npc3NvclRlc3Q6ZnVuY3Rpb24oYWUpe2FlP09lKDMwODkpOkFuKDMwODkpfSxhY3RpdmVUZXh0dXJlOnRpLGJpbmRUZXh0dXJlOmZ1bmN0aW9uKGFlLEp0KXtudWxsPT09ZGUmJnRpKCk7bGV0IGp0PXBlW2RlXTt2b2lkIDA9PT1qdCYmKGp0PXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0scGVbZGVdPWp0KSwoanQudHlwZSE9PWFlfHxqdC50ZXh0dXJlIT09SnQpJiYobi5iaW5kVGV4dHVyZShhZSxKdHx8cHRbYWVdKSxqdC50eXBlPWFlLGp0LnRleHR1cmU9SnQpfSx1bmJpbmRUZXh0dXJlOmZ1bmN0aW9uKCl7bGV0IGFlPXBlW2RlXTt2b2lkIDAhPT1hZSYmdm9pZCAwIT09YWUudHlwZSYmKG4uYmluZFRleHR1cmUoYWUudHlwZSxudWxsKSxhZS50eXBlPXZvaWQgMCxhZS50ZXh0dXJlPXZvaWQgMCl9LGNvbXByZXNzZWRUZXhJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24uY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGFlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYWUpfX0sdGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGFlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYWUpfX0sdGV4SW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGFlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYWUpfX0sdGV4U3RvcmFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3RvcmFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChhZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGFlKX19LHRleFN0b3JhZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goYWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhZSl9fSx0ZXhTdWJJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goYWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhZSl9fSx0ZXhTdWJJbWFnZTNEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goYWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhZSl9fSxjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChhZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGFlKX19LHNjaXNzb3I6ZnVuY3Rpb24oYWUpeyExPT09TmUuZXF1YWxzKGFlKSYmKG4uc2Npc3NvcihhZS54LGFlLnksYWUueixhZS53KSxOZS5jb3B5KGFlKSl9LHZpZXdwb3J0OmZ1bmN0aW9uKGFlKXshMT09PWx0LmVxdWFscyhhZSkmJihuLnZpZXdwb3J0KGFlLngsYWUueSxhZS56LGFlLncpLGx0LmNvcHkoYWUpKX0scmVzZXQ6ZnVuY3Rpb24oKXtuLmRpc2FibGUoMzA0Miksbi5kaXNhYmxlKDI4ODQpLG4uZGlzYWJsZSgyOTI5KSxuLmRpc2FibGUoMzI4MjMpLG4uZGlzYWJsZSgzMDg5KSxuLmRpc2FibGUoMjk2MCksbi5kaXNhYmxlKDMyOTI2KSxuLmJsZW5kRXF1YXRpb24oMzI3NzQpLG4uYmxlbmRGdW5jKDEsMCksbi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDAsMSwwKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5jbGVhckNvbG9yKDAsMCwwLDApLG4uZGVwdGhNYXNrKCEwKSxuLmRlcHRoRnVuYyg1MTMpLG4uY2xlYXJEZXB0aCgxKSxuLnN0ZW5jaWxNYXNrKDQyOTQ5NjcyOTUpLG4uc3RlbmNpbEZ1bmMoNTE5LDAsNDI5NDk2NzI5NSksbi5zdGVuY2lsT3AoNzY4MCw3NjgwLDc2ODApLG4uY2xlYXJTdGVuY2lsKDApLG4uY3VsbEZhY2UoMTAyOSksbi5mcm9udEZhY2UoMjMwNSksbi5wb2x5Z29uT2Zmc2V0KDAsMCksbi5hY3RpdmVUZXh0dXJlKDMzOTg0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSwhMD09PWkmJihuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSksbi51c2VQcm9ncmFtKG51bGwpLG4ubGluZVdpZHRoKDEpLG4uc2Npc3NvcigwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxuLnZpZXdwb3J0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGQ9e30sZGU9bnVsbCxwZT17fSx1PXt9LHA9bmV3IFdlYWtNYXAsZj1bXSxtPW51bGwsYj0hMSxNPW51bGwseT1udWxsLHg9bnVsbCxSPW51bGwsQT1udWxsLFY9bnVsbCx0ZT1udWxsLEs9ITEseGU9bnVsbCxYZT1udWxsLERlPW51bGwsRD1udWxsLHJlPW51bGwsTmUuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGx0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX19fWZ1bmN0aW9uIFFGZShuLHQsZSxpLHIsbyxzKXtsZXQgYixhPXIuaXNXZWJHTDIsbD1yLm1heFRleHR1cmVzLGM9ci5tYXhDdWJlbWFwU2l6ZSxkPXIubWF4VGV4dHVyZVNpemUsdT1yLm1heFNhbXBsZXMsZj10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxtPW5ldyBXZWFrTWFwLE09ITE7dHJ5e009dHlwZW9mIE9mZnNjcmVlbkNhbnZhczwidSImJm51bGwhPT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKX1jYXRjaHt9ZnVuY3Rpb24geShaLEwpe3JldHVybiBNP25ldyBPZmZzY3JlZW5DYW52YXMoWixMKTpNeCgiY2FudmFzIil9ZnVuY3Rpb24geChaLEwsVmUsdnQpe2xldCBlbj0xO2lmKChaLndpZHRoPnZ0fHxaLmhlaWdodD52dCkmJihlbj12dC9NYXRoLm1heChaLndpZHRoLFouaGVpZ2h0KSksZW48MXx8ITA9PT1MKXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJlogaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZaIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJlogaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IExlPUw/Q1JlOk1hdGguZmxvb3IsbW49TGUoZW4qWi53aWR0aCksbG49TGUoZW4qWi5oZWlnaHQpO3ZvaWQgMD09PWImJihiPXkobW4sbG4pKTtsZXQgRnQ9VmU/eShtbixsbik6YjtyZXR1cm4gRnQud2lkdGg9bW4sRnQuaGVpZ2h0PWxuLEZ0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKFosMCwwLG1uLGxuKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK1oud2lkdGgrIngiK1ouaGVpZ2h0KyIpIHRvICgiK21uKyJ4IitsbisiKS4iKSxGdH1yZXR1cm4iZGF0YSJpbiBaJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrWi53aWR0aCsieCIrWi5oZWlnaHQrIikuIiksWn1yZXR1cm4gWn1mdW5jdGlvbiBSKFope3JldHVybiBMJChaLndpZHRoKSYmTCQoWi5oZWlnaHQpfWZ1bmN0aW9uIFYoWixMKXtyZXR1cm4gWi5nZW5lcmF0ZU1pcG1hcHMmJkwmJloubWluRmlsdGVyIT09X28mJloubWluRmlsdGVyIT09JG99ZnVuY3Rpb24gdGUoWil7bi5nZW5lcmF0ZU1pcG1hcChaKX1mdW5jdGlvbiBLKFosTCxWZSx2dCxlbj0hMSl7aWYoITE9PT1hKXJldHVybiBMO2lmKG51bGwhPT1aKXtpZih2b2lkIDAhPT1uW1pdKXJldHVybiBuW1pdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIitaKyInIil9bGV0IExlPUw7cmV0dXJuIDY0MDM9PT1MJiYoNTEyNj09PVZlJiYoTGU9MzMzMjYpLDUxMzE9PT1WZSYmKExlPTMzMzI1KSw1MTIxPT09VmUmJihMZT0zMzMyMSkpLDMzMzE5PT09TCYmKDUxMjY9PT1WZSYmKExlPTMzMzI4KSw1MTMxPT09VmUmJihMZT0zMzMyNyksNTEyMT09PVZlJiYoTGU9MzMzMjMpKSw2NDA4PT09TCYmKDUxMjY9PT1WZSYmKExlPTM0ODM2KSw1MTMxPT09VmUmJihMZT0zNDg0MiksNTEyMT09PVZlJiYoTGU9dnQ9PT1BciYmITE9PT1lbj8zNTkwNzozMjg1NiksMzI4MTk9PT1WZSYmKExlPTMyODU0KSwzMjgyMD09PVZlJiYoTGU9MzI4NTUpKSwoMzMzMjU9PT1MZXx8MzMzMjY9PT1MZXx8MzMzMjc9PT1MZXx8MzMzMjg9PT1MZXx8MzQ4NDI9PT1MZXx8MzQ4MzY9PT1MZSkmJnQuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiksTGV9ZnVuY3Rpb24geGUoWixMLFZlKXtyZXR1cm4hMD09PVYoWixWZSl8fFouaXNGcmFtZWJ1ZmZlclRleHR1cmUmJloubWluRmlsdGVyIT09X28mJloubWluRmlsdGVyIT09JG8/TWF0aC5sb2cyKE1hdGgubWF4KEwud2lkdGgsTC5oZWlnaHQpKSsxOnZvaWQgMCE9PVoubWlwbWFwcyYmWi5taXBtYXBzLmxlbmd0aD4wP1oubWlwbWFwcy5sZW5ndGg6Wi5pc0NvbXByZXNzZWRUZXh0dXJlJiZBcnJheS5pc0FycmF5KFouaW1hZ2UpP0wubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiBYZShaKXtyZXR1cm4gWj09PV9vfHxaPT09ZiR8fFo9PT1tJD85NzI4Ojk3Mjl9ZnVuY3Rpb24gRGUoWil7bGV0IEw9Wi50YXJnZXQ7TC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixEZSksZnVuY3Rpb24oWil7bGV0IEw9aS5nZXQoWik7dm9pZCAwIT09TC5fX3dlYmdsSW5pdCYmKG4uZGVsZXRlVGV4dHVyZShMLl9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShaKSl9KEwpLEwuaXNWaWRlb1RleHR1cmUmJm0uZGVsZXRlKEwpLHMubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gRChaKXtsZXQgTD1aLnRhcmdldDtMLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEQpLGZ1bmN0aW9uKFope2xldCBMPVoudGV4dHVyZSxWZT1pLmdldChaKSx2dD1pLmdldChMKTtpZihaKXtpZih2b2lkIDAhPT12dC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZSh2dC5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksWi5kZXB0aFRleHR1cmUmJlouZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxaLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZW49MDtlbjw2O2VuKyspbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXJbZW5dKSxWZS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlcltlbl0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXIpLFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoVmUuX193ZWJnbERlcHRoYnVmZmVyKSxWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJm4uZGVsZXRlRnJhbWVidWZmZXIoVmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihWZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKFouaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGVuPTAsTGU9TC5sZW5ndGg7ZW48TGU7ZW4rKyl7bGV0IG1uPWkuZ2V0KExbZW5dKTttbi5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShtbi5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksaS5yZW1vdmUoTFtlbl0pfWkucmVtb3ZlKEwpLGkucmVtb3ZlKFopfX0oTCl9bGV0IGZlPTA7ZnVuY3Rpb24gZGUoWixMKXtsZXQgVmU9aS5nZXQoWik7aWYoWi5pc1ZpZGVvVGV4dHVyZSYmZnVuY3Rpb24oWil7bGV0IEw9cy5yZW5kZXIuZnJhbWU7bS5nZXQoWikhPT1MJiYobS5zZXQoWixMKSxaLnVwZGF0ZSgpKX0oWiksWi52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVoudmVyc2lvbil7bGV0IHZ0PVouaW1hZ2U7aWYodm9pZCAwPT09dnQpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09dnQuY29tcGxldGUpcmV0dXJuIHZvaWQgT2UoVmUsWixMKTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKX19ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0wpLGUuYmluZFRleHR1cmUoMzU1MyxWZS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gQ2UoWixMKXtsZXQgVmU9aS5nZXQoWik7Wi52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVoudmVyc2lvbj9mdW5jdGlvbihaLEwsVmUpe2lmKDYhPT1MLmltYWdlLmxlbmd0aClyZXR1cm47cHQoWixMKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrVmUpLGUuYmluZFRleHR1cmUoMzQwNjcsWi5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCxMLmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLEwucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LEwudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCB2dD1MJiYoTC5pc0NvbXByZXNzZWRUZXh0dXJlfHxMLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLGVuPUwuaW1hZ2VbMF0mJkwuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxMZT1bXTtmb3IobGV0IFdlPTA7V2U8NjtXZSsrKUxlW1dlXT12dHx8ZW4/ZW4/TC5pbWFnZVtXZV0uaW1hZ2U6TC5pbWFnZVtXZV06eChMLmltYWdlW1dlXSwhMSwhMCxjKSxMZVtXZV09c24oTCxMZVtXZV0pO2xldCBUbixtbj1MZVswXSxsbj1SKG1uKXx8YSxGdD1vLmNvbnZlcnQoTC5mb3JtYXQsTC5lbmNvZGluZyksUHQ9by5jb252ZXJ0KEwudHlwZSksTG49SyhMLmludGVybmFsRm9ybWF0LEZ0LFB0LEwuZW5jb2RpbmcpLGFlPWEmJiEwIT09TC5pc1ZpZGVvVGV4dHVyZSxKdD12b2lkIDA9PT1aLl9fdmVyc2lvbixqdD14ZShMLG1uLGxuKTtpZihNdCgzNDA2NyxMLGxuKSx2dCl7YWUmJkp0JiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxqdCxMbixtbi53aWR0aCxtbi5oZWlnaHQpO2ZvcihsZXQgV2U9MDtXZTw2O1dlKyspe1RuPUxlW1dlXS5taXBtYXBzO2ZvcihsZXQgYm49MDtibjxUbi5sZW5ndGg7Ym4rKyl7bGV0IHVpPVRuW2JuXTtMLmZvcm1hdCE9PWdzP251bGwhPT1GdD9hZT9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1dlLGJuLDAsMCx1aS53aWR0aCx1aS5oZWlnaHQsRnQsdWkuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStXZSxibixMbix1aS53aWR0aCx1aS5oZWlnaHQsMCx1aS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6YWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLGJuLDAsMCx1aS53aWR0aCx1aS5oZWlnaHQsRnQsUHQsdWkuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLGJuLExuLHVpLndpZHRoLHVpLmhlaWdodCwwLEZ0LFB0LHVpLmRhdGEpfX19ZWxzZXtUbj1MLm1pcG1hcHMsYWUmJkp0JiYoVG4ubGVuZ3RoPjAmJmp0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsanQsTG4sTGVbMF0ud2lkdGgsTGVbMF0uaGVpZ2h0KSk7Zm9yKGxldCBXZT0wO1dlPDY7V2UrKylpZihlbil7YWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLDAsMCwwLExlW1dlXS53aWR0aCxMZVtXZV0uaGVpZ2h0LEZ0LFB0LExlW1dlXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrV2UsMCxMbixMZVtXZV0ud2lkdGgsTGVbV2VdLmhlaWdodCwwLEZ0LFB0LExlW1dlXS5kYXRhKTtmb3IobGV0IGJuPTA7Ym48VG4ubGVuZ3RoO2JuKyspe2xldCB1cj1Ubltibl0uaW1hZ2VbV2VdLmltYWdlO2FlP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStXZSxibisxLDAsMCx1ci53aWR0aCx1ci5oZWlnaHQsRnQsUHQsdXIuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLGJuKzEsTG4sdXIud2lkdGgsdXIuaGVpZ2h0LDAsRnQsUHQsdXIuZGF0YSl9fWVsc2V7YWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLDAsMCwwLEZ0LFB0LExlW1dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLDAsTG4sRnQsUHQsTGVbV2VdKTtmb3IobGV0IGJuPTA7Ym48VG4ubGVuZ3RoO2JuKyspe2xldCB1aT1Ubltibl07YWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLGJuKzEsMCwwLEZ0LFB0LHVpLmltYWdlW1dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLGJuKzEsTG4sRnQsUHQsdWkuaW1hZ2VbV2VdKX19fVYoTCxsbikmJnRlKDM0MDY3KSxaLl9fdmVyc2lvbj1MLnZlcnNpb24sTC5vblVwZGF0ZSYmTC5vblVwZGF0ZShMKX0oVmUsWixMKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0wpLGUuYmluZFRleHR1cmUoMzQwNjcsVmUuX193ZWJnbFRleHR1cmUpKX1sZXQgTmU9e1skM106MTA0OTcsW3lhXTozMzA3MSxbZUJdOjMzNjQ4fSxsdD17W19vXTo5NzI4LFtmJF06OTk4NCxbbSRdOjk5ODYsWyRvXTo5NzI5LFtKQWVdOjk5ODUsW1FJXTo5OTg3fTtmdW5jdGlvbiBNdChaLEwsVmUpe2lmKFZlPyhuLnRleFBhcmFtZXRlcmkoWiwxMDI0MixOZVtMLndyYXBTXSksbi50ZXhQYXJhbWV0ZXJpKFosMTAyNDMsTmVbTC53cmFwVF0pLCgzMjg3OT09PVp8fDM1ODY2PT09WikmJm4udGV4UGFyYW1ldGVyaShaLDMyODgyLE5lW0wud3JhcFJdKSxuLnRleFBhcmFtZXRlcmkoWiwxMDI0MCxsdFtMLm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShaLDEwMjQxLGx0W0wubWluRmlsdGVyXSkpOihuLnRleFBhcmFtZXRlcmkoWiwxMDI0MiwzMzA3MSksbi50ZXhQYXJhbWV0ZXJpKFosMTAyNDMsMzMwNzEpLCgzMjg3OT09PVp8fDM1ODY2PT09WikmJm4udGV4UGFyYW1ldGVyaShaLDMyODgyLDMzMDcxKSwoTC53cmFwUyE9PXlhfHxMLndyYXBUIT09eWEpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKFosMTAyNDAsWGUoTC5tYWdGaWx0ZXIpKSxuLnRleFBhcmFtZXRlcmkoWiwxMDI0MSxYZShMLm1pbkZpbHRlcikpLEwubWluRmlsdGVyIT09X28mJkwubWluRmlsdGVyIT09JG8mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKSwhMD09PXQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl7bGV0IHZ0PXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZihMLnR5cGU9PT1jbSYmITE9PT10LmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCExPT09YSYmTC50eXBlPT09VTAmJiExPT09dC5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpcmV0dXJuOyhMLmFuaXNvdHJvcHk+MXx8aS5nZXQoTCkuX19jdXJyZW50QW5pc290cm9weSkmJihuLnRleFBhcmFtZXRlcmYoWix2dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihMLmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldChMKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PUwuYW5pc290cm9weSl9fWZ1bmN0aW9uIHB0KFosTCl7dm9pZCAwPT09Wi5fX3dlYmdsSW5pdCYmKFouX193ZWJnbEluaXQ9ITAsTC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixEZSksWi5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSxzLm1lbW9yeS50ZXh0dXJlcysrKX1mdW5jdGlvbiBPZShaLEwsVmUpe2xldCB2dD0zNTUzO0wuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJih2dD0zNTg2NiksTC5pc0RhdGFUZXh0dXJlM0QmJih2dD0zMjg3OSkscHQoWixMKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrVmUpLGUuYmluZFRleHR1cmUodnQsWi5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCxMLmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLEwucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LEwudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBlbj1mdW5jdGlvbihaKXtyZXR1cm4hYSYmKFoud3JhcFMhPT15YXx8Wi53cmFwVCE9PXlhfHxaLm1pbkZpbHRlciE9PV9vJiZaLm1pbkZpbHRlciE9PSRvKX0oTCkmJiExPT09UihMLmltYWdlKSxMZT14KEwuaW1hZ2UsZW4sITEsZCk7TGU9c24oTCxMZSk7bGV0IG1uPVIoTGUpfHxhLGxuPW8uY29udmVydChMLmZvcm1hdCxMLmVuY29kaW5nKSxGdD1vLmNvbnZlcnQoTC50eXBlKSxQdD1LKEwuaW50ZXJuYWxGb3JtYXQsbG4sRnQsTC5lbmNvZGluZyxMLmlzVmlkZW9UZXh0dXJlKTtNdCh2dCxMLG1uKTtsZXQgTG4sYWU9TC5taXBtYXBzLEp0PWEmJiEwIT09TC5pc1ZpZGVvVGV4dHVyZSxqdD12b2lkIDA9PT1aLl9fdmVyc2lvbixUbj14ZShMLExlLG1uKTtpZihMLmlzRGVwdGhUZXh0dXJlKVB0PTY0MDIsYT9QdD1MLnR5cGU9PT1jbT8zNjAxMjpMLnR5cGU9PT1fST8zMzE5MDpMLnR5cGU9PT1qMD8zNTA1NjozMzE4OTpMLnR5cGU9PT1jbSYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksTC5mb3JtYXQ9PT11bSYmNjQwMj09PVB0JiZMLnR5cGUhPT14eCYmTC50eXBlIT09X0kmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxMLnR5cGU9eHgsRnQ9by5jb252ZXJ0KEwudHlwZSkpLEwuZm9ybWF0PT09WTAmJjY0MDI9PT1QdCYmKFB0PTM0MDQxLEwudHlwZSE9PWowJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLEwudHlwZT1qMCxGdD1vLmNvbnZlcnQoTC50eXBlKSkpLEp0JiZqdD9lLnRleFN0b3JhZ2UyRCgzNTUzLDEsUHQsTGUud2lkdGgsTGUuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLFB0LExlLndpZHRoLExlLmhlaWdodCwwLGxuLEZ0LG51bGwpO2Vsc2UgaWYoTC5pc0RhdGFUZXh0dXJlKWlmKGFlLmxlbmd0aD4wJiZtbil7SnQmJmp0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLFB0LGFlWzBdLndpZHRoLGFlWzBdLmhlaWdodCk7Zm9yKGxldCBXZT0wLGJuPWFlLmxlbmd0aDtXZTxibjtXZSsrKUxuPWFlW1dlXSxKdD9lLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxMbi53aWR0aCxMbi5oZWlnaHQsbG4sRnQsTG4uZGF0YSk6ZS50ZXhJbWFnZTJEKDM1NTMsV2UsUHQsTG4ud2lkdGgsTG4uaGVpZ2h0LDAsbG4sRnQsTG4uZGF0YSk7TC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBKdD8oanQmJmUudGV4U3RvcmFnZTJEKDM1NTMsVG4sUHQsTGUud2lkdGgsTGUuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxMZS53aWR0aCxMZS5oZWlnaHQsbG4sRnQsTGUuZGF0YSkpOmUudGV4SW1hZ2UyRCgzNTUzLDAsUHQsTGUud2lkdGgsTGUuaGVpZ2h0LDAsbG4sRnQsTGUuZGF0YSk7ZWxzZSBpZihMLmlzQ29tcHJlc3NlZFRleHR1cmUpe0p0JiZqdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxUbixQdCxhZVswXS53aWR0aCxhZVswXS5oZWlnaHQpO2ZvcihsZXQgV2U9MCxibj1hZS5sZW5ndGg7V2U8Ym47V2UrKylMbj1hZVtXZV0sTC5mb3JtYXQhPT1ncz9udWxsIT09bG4/SnQ/ZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLFdlLDAsMCxMbi53aWR0aCxMbi5oZWlnaHQsbG4sTG4uZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFdlLFB0LExuLndpZHRoLExuLmhlaWdodCwwLExuLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOkp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFdlLDAsMCxMbi53aWR0aCxMbi5oZWlnaHQsbG4sRnQsTG4uZGF0YSk6ZS50ZXhJbWFnZTJEKDM1NTMsV2UsUHQsTG4ud2lkdGgsTG4uaGVpZ2h0LDAsbG4sRnQsTG4uZGF0YSl9ZWxzZSBpZihMLmlzRGF0YVRleHR1cmUyREFycmF5KUp0PyhqdCYmZS50ZXhTdG9yYWdlM0QoMzU4NjYsVG4sUHQsTGUud2lkdGgsTGUuaGVpZ2h0LExlLmRlcHRoKSxlLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxMZS53aWR0aCxMZS5oZWlnaHQsTGUuZGVwdGgsbG4sRnQsTGUuZGF0YSkpOmUudGV4SW1hZ2UzRCgzNTg2NiwwLFB0LExlLndpZHRoLExlLmhlaWdodCxMZS5kZXB0aCwwLGxuLEZ0LExlLmRhdGEpO2Vsc2UgaWYoTC5pc0RhdGFUZXh0dXJlM0QpSnQ/KGp0JiZlLnRleFN0b3JhZ2UzRCgzMjg3OSxUbixQdCxMZS53aWR0aCxMZS5oZWlnaHQsTGUuZGVwdGgpLGUudGV4U3ViSW1hZ2UzRCgzMjg3OSwwLDAsMCwwLExlLndpZHRoLExlLmhlaWdodCxMZS5kZXB0aCxsbixGdCxMZS5kYXRhKSk6ZS50ZXhJbWFnZTNEKDMyODc5LDAsUHQsTGUud2lkdGgsTGUuaGVpZ2h0LExlLmRlcHRoLDAsbG4sRnQsTGUuZGF0YSk7ZWxzZSBpZihMLmlzRnJhbWVidWZmZXJUZXh0dXJlKUp0JiZqdD9lLnRleFN0b3JhZ2UyRCgzNTUzLFRuLFB0LExlLndpZHRoLExlLmhlaWdodCk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxQdCxMZS53aWR0aCxMZS5oZWlnaHQsMCxsbixGdCxudWxsKTtlbHNlIGlmKGFlLmxlbmd0aD4wJiZtbil7SnQmJmp0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLFB0LGFlWzBdLndpZHRoLGFlWzBdLmhlaWdodCk7Zm9yKGxldCBXZT0wLGJuPWFlLmxlbmd0aDtXZTxibjtXZSsrKUxuPWFlW1dlXSxKdD9lLnRleFN1YkltYWdlMkQoMzU1MyxXZSwwLDAsbG4sRnQsTG4pOmUudGV4SW1hZ2UyRCgzNTUzLFdlLFB0LGxuLEZ0LExuKTtMLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIEp0PyhqdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxUbixQdCxMZS53aWR0aCxMZS5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLGxuLEZ0LExlKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxQdCxsbixGdCxMZSk7VihMLG1uKSYmdGUodnQpLFouX192ZXJzaW9uPUwudmVyc2lvbixMLm9uVXBkYXRlJiZMLm9uVXBkYXRlKEwpfWZ1bmN0aW9uIHd0KFosTCxWZSx2dCxlbil7bGV0IExlPW8uY29udmVydChWZS5mb3JtYXQsVmUuZW5jb2RpbmcpLG1uPW8uY29udmVydChWZS50eXBlKSxsbj1LKFZlLmludGVybmFsRm9ybWF0LExlLG1uLFZlLmVuY29kaW5nKTtpLmdldChMKS5fX2hhc0V4dGVybmFsVGV4dHVyZXN8fCgzMjg3OT09PWVufHwzNTg2Nj09PWVuP2UudGV4SW1hZ2UzRChlbiwwLGxuLEwud2lkdGgsTC5oZWlnaHQsTC5kZXB0aCwwLExlLG1uLG51bGwpOmUudGV4SW1hZ2UyRChlbiwwLGxuLEwud2lkdGgsTC5oZWlnaHQsMCxMZSxtbixudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsWiksTC51c2VSZW5kZXJUb1RleHR1cmU/Zi5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLHZ0LGVuLGkuZ2V0KFZlKS5fX3dlYmdsVGV4dHVyZSwwLF90KEwpKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLHZ0LGVuLGkuZ2V0KFZlKS5fX3dlYmdsVGV4dHVyZSwwKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBvbihaLEwsVmUpe2lmKG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxaKSxMLmRlcHRoQnVmZmVyJiYhTC5zdGVuY2lsQnVmZmVyKXtsZXQgdnQ9MzMxODk7aWYoVmV8fEwudXNlUmVuZGVyVG9UZXh0dXJlKXtsZXQgZW49TC5kZXB0aFRleHR1cmU7ZW4mJmVuLmlzRGVwdGhUZXh0dXJlJiYoZW4udHlwZT09PWNtP3Z0PTM2MDEyOmVuLnR5cGU9PT1fSSYmKHZ0PTMzMTkwKSk7bGV0IExlPV90KEwpO0wudXNlUmVuZGVyVG9UZXh0dXJlP2YucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLExlLHZ0LEwud2lkdGgsTC5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLExlLHZ0LEwud2lkdGgsTC5oZWlnaHQpfWVsc2Ugbi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLHZ0LEwud2lkdGgsTC5oZWlnaHQpO24uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsWil9ZWxzZSBpZihMLmRlcHRoQnVmZmVyJiZMLnN0ZW5jaWxCdWZmZXIpe2xldCB2dD1fdChMKTtWZSYmTC51c2VSZW5kZXJidWZmZXI/bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsdnQsMzUwNTYsTC53aWR0aCxMLmhlaWdodCk6TC51c2VSZW5kZXJUb1RleHR1cmU/Zi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsdnQsMzUwNTYsTC53aWR0aCxMLmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLEwud2lkdGgsTC5oZWlnaHQpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsWil9ZWxzZXtsZXQgdnQ9ITA9PT1MLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM/TC50ZXh0dXJlWzBdOkwudGV4dHVyZSxlbj1vLmNvbnZlcnQodnQuZm9ybWF0LHZ0LmVuY29kaW5nKSxMZT1vLmNvbnZlcnQodnQudHlwZSksbW49Syh2dC5pbnRlcm5hbEZvcm1hdCxlbixMZSx2dC5lbmNvZGluZyksbG49X3QoTCk7VmUmJkwudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGxuLG1uLEwud2lkdGgsTC5oZWlnaHQpOkwudXNlUmVuZGVyVG9UZXh0dXJlP2YucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLGxuLG1uLEwud2lkdGgsTC5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxtbixMLndpZHRoLEwuaGVpZ2h0KX1uLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9ZnVuY3Rpb24gbXQoWil7bGV0IEw9aS5nZXQoWiksVmU9ITA9PT1aLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0O2lmKFouZGVwdGhUZXh0dXJlJiYhTC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKXtpZihWZSl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7IWZ1bmN0aW9uKFosTCl7aWYoTCYmTC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxaKSwhTC5kZXB0aFRleHR1cmV8fCFMLmRlcHRoVGV4dHVyZS5pc0RlcHRoVGV4dHVyZSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIWkuZ2V0KEwuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8TC5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT1MLndpZHRofHxMLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT1MLmhlaWdodCkmJihMLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1MLndpZHRoLEwuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1MLmhlaWdodCxMLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksZGUoTC5kZXB0aFRleHR1cmUsMCk7bGV0IHZ0PWkuZ2V0KEwuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxlbj1fdChMKTtpZihMLmRlcHRoVGV4dHVyZS5mb3JtYXQ9PT11bSlMLnVzZVJlbmRlclRvVGV4dHVyZT9mLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsMzYwOTYsMzU1Myx2dCwwLGVuKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsdnQsMCk7ZWxzZXtpZihMLmRlcHRoVGV4dHVyZS5mb3JtYXQhPT1ZMCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZGVwdGhUZXh0dXJlIGZvcm1hdCIpO0wudXNlUmVuZGVyVG9UZXh0dXJlP2YuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLHZ0LDAsZW4pOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1Myx2dCwwKX19KEwuX193ZWJnbEZyYW1lYnVmZmVyLFopfWVsc2UgaWYoVmUpe0wuX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgdnQ9MDt2dDw2O3Z0KyspZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsTC5fX3dlYmdsRnJhbWVidWZmZXJbdnRdKSxMLl9fd2ViZ2xEZXB0aGJ1ZmZlclt2dF09bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxvbihMLl9fd2ViZ2xEZXB0aGJ1ZmZlclt2dF0sWiwhMSl9ZWxzZSBlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxMLl9fd2ViZ2xGcmFtZWJ1ZmZlciksTC5fX3dlYmdsRGVwdGhidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxvbihMLl9fd2ViZ2xEZXB0aGJ1ZmZlcixaLCExKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBfdChaKXtyZXR1cm4gYSYmKFoudXNlUmVuZGVyYnVmZmVyfHxaLnVzZVJlbmRlclRvVGV4dHVyZSk/TWF0aC5taW4odSxaLnNhbXBsZXMpOjB9ZnVuY3Rpb24gc24oWixMKXtsZXQgVmU9Wi5lbmNvZGluZyx2dD1aLmZvcm1hdCxlbj1aLnR5cGU7cmV0dXJuITA9PT1aLmlzQ29tcHJlc3NlZFRleHR1cmV8fCEwPT09Wi5pc1ZpZGVvVGV4dHVyZXx8Wi5mb3JtYXQ9PT10Qnx8VmUhPT1fcCYmKFZlPT09QXI/ITE9PT1hPyEwPT09dC5oYXMoIkVYVF9zUkdCIikmJnZ0PT09Z3M/KFouZm9ybWF0PXRCLFoubWluRmlsdGVyPSRvLFouZ2VuZXJhdGVNaXBtYXBzPSExKTpMPWpkLnNSR0JUb0xpbmVhcihMKToodnQhPT1nc3x8ZW4hPT1tcCkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogc1JHQiBlbmNvZGVkIHRleHR1cmVzIGhhdmUgdG8gdXNlIFJHQkFGb3JtYXQgYW5kIFVuc2lnbmVkQnl0ZVR5cGUuIik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xUZXh0dXJlczogVW5zdXBwb3J0ZWQgdGV4dHVyZSBlbmNvZGluZzoiLFZlKSksTH1sZXQgQ249ITEsdGk9ITE7dGhpcy5hbGxvY2F0ZVRleHR1cmVVbml0PWZ1bmN0aW9uKCl7bGV0IFo9ZmU7cmV0dXJuIFo+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK1orIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxmZSs9MSxafSx0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPWZ1bmN0aW9uKCl7ZmU9MH0sdGhpcy5zZXRUZXh0dXJlMkQ9ZGUsdGhpcy5zZXRUZXh0dXJlMkRBcnJheT1mdW5jdGlvbihaLEwpe2xldCBWZT1pLmdldChaKTtaLnZlcnNpb24+MCYmVmUuX192ZXJzaW9uIT09Wi52ZXJzaW9uP09lKFZlLFosTCk6KGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtMKSxlLmJpbmRUZXh0dXJlKDM1ODY2LFZlLl9fd2ViZ2xUZXh0dXJlKSl9LHRoaXMuc2V0VGV4dHVyZTNEPWZ1bmN0aW9uKFosTCl7bGV0IFZlPWkuZ2V0KFopO1oudmVyc2lvbj4wJiZWZS5fX3ZlcnNpb24hPT1aLnZlcnNpb24/T2UoVmUsWixMKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0wpLGUuYmluZFRleHR1cmUoMzI4NzksVmUuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlQ3ViZT1DZSx0aGlzLnJlYmluZFRleHR1cmVzPWZ1bmN0aW9uKFosTCxWZSl7bGV0IHZ0PWkuZ2V0KFopO3ZvaWQgMCE9PUwmJnd0KHZ0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcixaLFoudGV4dHVyZSwzNjA2NCwzNTUzKSx2b2lkIDAhPT1WZSYmbXQoWil9LHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oWil7bGV0IEw9Wi50ZXh0dXJlLFZlPWkuZ2V0KFopLHZ0PWkuZ2V0KEwpO1ouYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsRCksITAhPT1aLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMmJih2b2lkIDA9PT12dC5fX3dlYmdsVGV4dHVyZSYmKHZ0Ll9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpKSx2dC5fX3ZlcnNpb249TC52ZXJzaW9uLHMubWVtb3J5LnRleHR1cmVzKyspO2xldCBlbj0hMD09PVouaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQsTGU9ITA9PT1aLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMsbW49TC5pc0RhdGFUZXh0dXJlM0R8fEwuaXNEYXRhVGV4dHVyZTJEQXJyYXksbG49UihaKXx8YTtpZihlbil7VmUuX193ZWJnbEZyYW1lYnVmZmVyPVtdO2ZvcihsZXQgRnQ9MDtGdDw2O0Z0KyspVmUuX193ZWJnbEZyYW1lYnVmZmVyW0Z0XT1uLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBpZihWZS5fX3dlYmdsRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLExlKWlmKHIuZHJhd0J1ZmZlcnMpe2xldCBGdD1aLnRleHR1cmU7Zm9yKGxldCBQdD0wLExuPUZ0Lmxlbmd0aDtQdDxMbjtQdCsrKXtsZXQgYWU9aS5nZXQoRnRbUHRdKTt2b2lkIDA9PT1hZS5fX3dlYmdsVGV4dHVyZSYmKGFlLl9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpLHMubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYoWi51c2VSZW5kZXJidWZmZXIpaWYoYSl7VmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsVmUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtsZXQgRnQ9by5jb252ZXJ0KEwuZm9ybWF0LEwuZW5jb2RpbmcpLFB0PW8uY29udmVydChMLnR5cGUpLExuPUsoTC5pbnRlcm5hbEZvcm1hdCxGdCxQdCxMLmVuY29kaW5nKSxhZT1fdChaKTtuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxhZSxMbixaLndpZHRoLFouaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwNjQsMzYxNjEsVmUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksWi5kZXB0aEJ1ZmZlciYmKFZlLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLG9uKFZlLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcixaLCEwKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtpZihlbil7ZS5iaW5kVGV4dHVyZSgzNDA2Nyx2dC5fX3dlYmdsVGV4dHVyZSksTXQoMzQwNjcsTCxsbik7Zm9yKGxldCBGdD0wO0Z0PDY7RnQrKyl3dChWZS5fX3dlYmdsRnJhbWVidWZmZXJbRnRdLFosTCwzNjA2NCwzNDA2OStGdCk7VihMLGxuKSYmdGUoMzQwNjcpLGUudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoTGUpe2xldCBGdD1aLnRleHR1cmU7Zm9yKGxldCBQdD0wLExuPUZ0Lmxlbmd0aDtQdDxMbjtQdCsrKXtsZXQgYWU9RnRbUHRdLEp0PWkuZ2V0KGFlKTtlLmJpbmRUZXh0dXJlKDM1NTMsSnQuX193ZWJnbFRleHR1cmUpLE10KDM1NTMsYWUsbG4pLHd0KFZlLl9fd2ViZ2xGcmFtZWJ1ZmZlcixaLGFlLDM2MDY0K1B0LDM1NTMpLFYoYWUsbG4pJiZ0ZSgzNTUzKX1lLnVuYmluZFRleHR1cmUoKX1lbHNle2xldCBGdD0zNTUzO21uJiYoYT9GdD1MLmlzRGF0YVRleHR1cmUzRD8zMjg3OTozNTg2Njpjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheSBvbmx5IHN1cHBvcnRlZCB3aXRoIFdlYkdMMi4iKSksZS5iaW5kVGV4dHVyZShGdCx2dC5fX3dlYmdsVGV4dHVyZSksTXQoRnQsTCxsbiksd3QoVmUuX193ZWJnbEZyYW1lYnVmZmVyLFosTCwzNjA2NCxGdCksVihMLGxuKSYmdGUoRnQpLGUudW5iaW5kVGV4dHVyZSgpfVouZGVwdGhCdWZmZXImJm10KFopfSx0aGlzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcD1mdW5jdGlvbihaKXtsZXQgTD1SKFopfHxhLFZlPSEwPT09Wi5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP1oudGV4dHVyZTpbWi50ZXh0dXJlXTtmb3IobGV0IHZ0PTAsZW49VmUubGVuZ3RoO3Z0PGVuO3Z0Kyspe2xldCBMZT1WZVt2dF07aWYoVihMZSxMKSl7bGV0IG1uPVouaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1Myxsbj1pLmdldChMZSkuX193ZWJnbFRleHR1cmU7ZS5iaW5kVGV4dHVyZShtbixsbiksdGUobW4pLGUudW5iaW5kVGV4dHVyZSgpfX19LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oWil7aWYoWi51c2VSZW5kZXJidWZmZXIpaWYoYSl7bGV0IEw9Wi53aWR0aCxWZT1aLmhlaWdodCx2dD0xNjM4NCxlbj1bMzYwNjRdLExlPVouc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5NjtaLmRlcHRoQnVmZmVyJiZlbi5wdXNoKExlKSxaLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5fHwoWi5kZXB0aEJ1ZmZlciYmKHZ0fD0yNTYpLFouc3RlbmNpbEJ1ZmZlciYmKHZ0fD0xMDI0KSk7bGV0IG1uPWkuZ2V0KFopO2UuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG1uLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksbW4uX193ZWJnbEZyYW1lYnVmZmVyKSxaLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYobi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW0xlXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW0xlXSkpLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCxMLFZlLDAsMCxMLFZlLHZ0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGVuKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxtbi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9LHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1tdCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPXd0LHRoaXMuc2FmZVNldFRleHR1cmUyRD1mdW5jdGlvbihaLEwpe1omJlouaXNXZWJHTFJlbmRlclRhcmdldCYmKCExPT09Q24mJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxDbj0hMCksWj1aLnRleHR1cmUpLGRlKFosTCl9LHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKFosTCl7WiYmWi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKCExPT09dGkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksdGk9ITApLFo9Wi50ZXh0dXJlKSxDZShaLEwpfX1mdW5jdGlvbiBaRmUobix0LGUpe2xldCBpPWUuaXNXZWJHTDI7cmV0dXJue2NvbnZlcnQ6ZnVuY3Rpb24obyxzPW51bGwpe2xldCBhO2lmKG89PT1tcClyZXR1cm4gNTEyMTtpZihvPT09blJlKXJldHVybiAzMjgxOTtpZihvPT09aVJlKXJldHVybiAzMjgyMDtpZihvPT09JEFlKXJldHVybiA1MTIwO2lmKG89PT1lUmUpcmV0dXJuIDUxMjI7aWYobz09PXh4KXJldHVybiA1MTIzO2lmKG89PT10UmUpcmV0dXJuIDUxMjQ7aWYobz09PV9JKXJldHVybiA1MTI1O2lmKG89PT1jbSlyZXR1cm4gNTEyNjtpZihvPT09VTApcmV0dXJuIGk/NTEzMTooYT10LmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1hP2EuSEFMRl9GTE9BVF9PRVM6bnVsbCk7aWYobz09PXJSZSlyZXR1cm4gNjQwNjtpZihvPT09Z3MpcmV0dXJuIDY0MDg7aWYobz09PW9SZSlyZXR1cm4gNjQwOTtpZihvPT09c1JlKXJldHVybiA2NDEwO2lmKG89PT11bSlyZXR1cm4gNjQwMjtpZihvPT09WTApcmV0dXJuIDM0MDQxO2lmKG89PT1hUmUpcmV0dXJuIDY0MDM7aWYobz09PXRCKXJldHVybiBhPXQuZ2V0KCJFWFRfc1JHQiIpLG51bGwhPT1hP2EuU1JHQl9BTFBIQV9FWFQ6bnVsbDtpZihvPT09bFJlKXJldHVybiAzNjI0NDtpZihvPT09Y1JlKXJldHVybiAzMzMxOTtpZihvPT09ZFJlKXJldHVybiAzMzMyMDtpZihvPT09dVJlKXJldHVybiAzNjI0OTtpZihvPT09dTN8fG89PT1wM3x8bz09PWYzfHxvPT09bTMpaWYocz09PUFyKXtpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYobz09PXUzKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUO2lmKG89PT1wMylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVDtpZihvPT09ZjMpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ7aWYobz09PW0zKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUfWVsc2V7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZihvPT09dTMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZihvPT09cDMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYobz09PWYzKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKG89PT1tMylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZihvPT09aCR8fG89PT1nJHx8bz09PV8kfHxvPT09YiQpe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKG89PT1oJClyZXR1cm4gYS5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKG89PT1nJClyZXR1cm4gYS5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKG89PT1fJClyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRztpZihvPT09YiQpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYobz09PXBSZSlyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09YT9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZihvPT09diR8fG89PT15JCl7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKG89PT12JClyZXR1cm4gcz09PUFyP2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYobz09PXkkKXJldHVybiBzPT09QXI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9aWYobz09PXgkfHxvPT09QyR8fG89PT1NJHx8bz09PXckfHxvPT09UyR8fG89PT1FJHx8bz09PVQkfHxvPT09RCR8fG89PT1JJHx8bz09PUEkfHxvPT09UiR8fG89PT1QJHx8bz09PU8kfHxvPT09ayQpe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYobz09PXgkKXJldHVybiBzPT09QXI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSO2lmKG89PT1DJClyZXR1cm4gcz09PUFyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtpZihvPT09TSQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYobz09PXckKXJldHVybiBzPT09QXI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSO2lmKG89PT1TJClyZXR1cm4gcz09PUFyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtpZihvPT09RSQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYobz09PVQkKXJldHVybiBzPT09QXI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSO2lmKG89PT1EJClyZXR1cm4gcz09PUFyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtpZihvPT09SSQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZihvPT09QSQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjtpZihvPT09UiQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtpZihvPT09UCQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKG89PT1PJClyZXR1cm4gcz09PUFyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI7aWYobz09PWskKXJldHVybiBzPT09QXI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUn1pZihvPT09RiQpe2lmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZihvPT09RiQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDphLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1yZXR1cm4gbz09PWowP2k/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09YT9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpOnZvaWQgMH19fXZhciBBST1jbGFzcyBleHRlbmRzIGVze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtBSS5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgZG09Y2xhc3MgZXh0ZW5kcyBCaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtkbS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgS0ZlPXt0eXBlOiJtb3ZlIn0sX3g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiBudWxsPT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQ9bmV3IGRtLHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9Z2V0VGFyZ2V0UmF5U3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheT1uZXcgZG0sdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl90YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHk9bmV3ICQpLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyBkbSx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgJCksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiBudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5fZ3JpcCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9oYW5kJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSxudWxsIT09dGhpcy5fZ3JpcCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQsZSxpKXtsZXQgcj1udWxsLG89bnVsbCxzPW51bGwsYT10aGlzLl90YXJnZXRSYXksbD10aGlzLl9ncmlwLGM9dGhpcy5faGFuZDtpZih0JiYidmlzaWJsZS1ibHVycmVkIiE9PWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUpaWYobnVsbCE9PWEmJihyPWUuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLGkpLG51bGwhPT1yJiYoYS5tYXRyaXguZnJvbUFycmF5KHIudHJhbnNmb3JtLm1hdHJpeCksYS5tYXRyaXguZGVjb21wb3NlKGEucG9zaXRpb24sYS5yb3RhdGlvbixhLnNjYWxlKSxyLmxpbmVhclZlbG9jaXR5PyhhLmhhc0xpbmVhclZlbG9jaXR5PSEwLGEubGluZWFyVmVsb2NpdHkuY29weShyLmxpbmVhclZlbG9jaXR5KSk6YS5oYXNMaW5lYXJWZWxvY2l0eT0hMSxyLmFuZ3VsYXJWZWxvY2l0eT8oYS5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsYS5hbmd1bGFyVmVsb2NpdHkuY29weShyLmFuZ3VsYXJWZWxvY2l0eSkpOmEuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudChLRmUpKSksYyYmdC5oYW5kKXtzPSEwO2ZvcihsZXQgYiBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCBNPWUuZ2V0Sm9pbnRQb3NlKGIsaSk7aWYodm9pZCAwPT09Yy5qb2ludHNbYi5qb2ludE5hbWVdKXtsZXQgeD1uZXcgZG07eC5tYXRyaXhBdXRvVXBkYXRlPSExLHgudmlzaWJsZT0hMSxjLmpvaW50c1tiLmpvaW50TmFtZV09eCxjLmFkZCh4KX1sZXQgeT1jLmpvaW50c1tiLmpvaW50TmFtZV07bnVsbCE9PU0mJih5Lm1hdHJpeC5mcm9tQXJyYXkoTS50cmFuc2Zvcm0ubWF0cml4KSx5Lm1hdHJpeC5kZWNvbXBvc2UoeS5wb3NpdGlvbix5LnJvdGF0aW9uLHkuc2NhbGUpLHkuam9pbnRSYWRpdXM9TS5yYWRpdXMpLHkudmlzaWJsZT1udWxsIT09TX1sZXQgcD1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLnBvc2l0aW9uLmRpc3RhbmNlVG8oYy5qb2ludHNbInRodW1iLXRpcCJdLnBvc2l0aW9uKSxmPS4wMixtPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZwPmYrbT8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJnA8PWYtbSYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbnVsbCE9PWwmJnQuZ3JpcFNwYWNlJiYobz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSksbnVsbCE9PW8mJihsLm1hdHJpeC5mcm9tQXJyYXkoby50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLG8ubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KG8ubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLG8uYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KG8uYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gbnVsbCE9PWEmJihhLnZpc2libGU9bnVsbCE9PXIpLG51bGwhPT1sJiYobC52aXNpYmxlPW51bGwhPT1vKSxudWxsIT09YyYmKGMudmlzaWJsZT1udWxsIT09cyksdGhpc319LEl4PWNsYXNzIGV4dGVuZHMgbG97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsZCl7aWYoKGQ9dm9pZCAwIT09ZD9kOnVtKSE9PXVtJiZkIT09WTApdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PWkmJmQ9PT11bSYmKGk9eHgpLHZvaWQgMD09PWkmJmQ9PT1ZMCYmKGk9ajApLHN1cGVyKG51bGwscixvLHMsYSxsLGQsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1hP2E6X28sdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09bD9sOl9vLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTtJeC5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIGxCPWNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLG89MSxzPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLGQ9bnVsbCx1PW51bGwscD1udWxsLGY9ITEsbT1udWxsLGI9ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLE09bnVsbCx5PW51bGwseD1bXSxSPW5ldyBNYXAsQT1uZXcgZXM7QS5sYXllcnMuZW5hYmxlKDEpLEEudmlld3BvcnQ9bmV3IFppO2xldCBWPW5ldyBlcztWLmxheWVycy5lbmFibGUoMiksVi52aWV3cG9ydD1uZXcgWmk7bGV0IHRlPVtBLFZdLEs9bmV3IEFJO0subGF5ZXJzLmVuYWJsZSgxKSxLLmxheWVycy5lbmFibGUoMik7bGV0IHhlPW51bGwsWGU9bnVsbDtmdW5jdGlvbiBEZShDZSl7bGV0IE5lPVIuZ2V0KENlLmlucHV0U291cmNlKTtOZSYmTmUuZGlzcGF0Y2hFdmVudCh7dHlwZTpDZS50eXBlLGRhdGE6Q2UuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBEKCl7Ui5mb3JFYWNoKGZ1bmN0aW9uKENlLE5lKXtDZS5kaXNjb25uZWN0KE5lKX0pLFIuY2xlYXIoKSx4ZT1udWxsLFhlPW51bGwsdC5zZXRSZW5kZXJUYXJnZXQoTSkscD1udWxsLHU9bnVsbCxkPW51bGwscj1udWxsLHk9bnVsbCxqZS5zdG9wKCksaS5pc1ByZXNlbnRpbmc9ITEsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uZW5kIn0pfWZ1bmN0aW9uIHJlKENlKXtsZXQgTmU9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBsdD0wO2x0PHgubGVuZ3RoO2x0KyspUi5zZXQoTmVbbHRdLHhbbHRdKTtmb3IobGV0IGx0PTA7bHQ8Q2UucmVtb3ZlZC5sZW5ndGg7bHQrKyl7bGV0IE10PUNlLnJlbW92ZWRbbHRdLHB0PVIuZ2V0KE10KTtwdCYmKHB0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpNdH0pLFIuZGVsZXRlKE10KSl9Zm9yKGxldCBsdD0wO2x0PENlLmFkZGVkLmxlbmd0aDtsdCsrKXtsZXQgTXQ9Q2UuYWRkZWRbbHRdLHB0PVIuZ2V0KE10KTtwdCYmcHQuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOk10fSl9fXRoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKENlKXtsZXQgTmU9eFtDZV07cmV0dXJuIHZvaWQgMD09PU5lJiYoTmU9bmV3IF94LHhbQ2VdPU5lKSxOZS5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKENlKXtsZXQgTmU9eFtDZV07cmV0dXJuIHZvaWQgMD09PU5lJiYoTmU9bmV3IF94LHhbQ2VdPU5lKSxOZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKENlKXtsZXQgTmU9eFtDZV07cmV0dXJuIHZvaWQgMD09PU5lJiYoTmU9bmV3IF94LHhbQ2VdPU5lKSxOZS5nZXRIYW5kU3BhY2UoKX0sdGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKENlKXtvPUNlLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKENlKXthPUNlLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gc30sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXU/dTpwfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBtfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5zZXRTZXNzaW9uPWFzeW5jIGZ1bmN0aW9uKENlKXtpZihyPUNlLG51bGwhPT1yKXtpZihNPXQuZ2V0UmVuZGVyVGFyZ2V0KCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLERlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixEZSksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLERlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemUiLERlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsRGUpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsRGUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIixEKSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0c291cmNlc2NoYW5nZSIscmUpLCEwIT09Yi54ckNvbXBhdGlibGUmJmF3YWl0IGUubWFrZVhSQ29tcGF0aWJsZSgpLHZvaWQgMD09PXIucmVuZGVyU3RhdGUubGF5ZXJzfHwhMT09PXQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyKXA9bmV3IFhSV2ViR0xMYXllcihyLGUse2FudGlhbGlhczp2b2lkIDAhPT1yLnJlbmRlclN0YXRlLmxheWVyc3x8Yi5hbnRpYWxpYXMsYWxwaGE6Yi5hbHBoYSxkZXB0aDpiLmRlcHRoLHN0ZW5jaWw6Yi5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6b30pLHIudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpwfSkseT1uZXcgSnMocC5mcmFtZWJ1ZmZlcldpZHRoLHAuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDpncyx0eXBlOm1wLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTtlbHNle2Y9Yi5hbnRpYWxpYXM7bGV0IE5lPW51bGwsbHQ9bnVsbCxNdD1udWxsO2IuZGVwdGgmJihNdD1iLnN0ZW5jaWw/MzUwNTY6MzMxOTAsTmU9Yi5zdGVuY2lsP1kwOnVtLGx0PWIuc3RlbmNpbD9qMDp4eCk7bGV0IHB0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09QXI/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6TXQsc2NhbGVGYWN0b3I6b307ZD1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSx1PWQuY3JlYXRlUHJvamVjdGlvbkxheWVyKHB0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W3VdfSkseT1mP25ldyB3eCh1LnRleHR1cmVXaWR0aCx1LnRleHR1cmVIZWlnaHQse2Zvcm1hdDpncyx0eXBlOm1wLGRlcHRoVGV4dHVyZTpuZXcgSXgodS50ZXh0dXJlV2lkdGgsdS50ZXh0dXJlSGVpZ2h0LGx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE5lKSxzdGVuY2lsQnVmZmVyOmIuc3RlbmNpbCxpZ25vcmVEZXB0aDp1Lmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTpuZXcgSnModS50ZXh0dXJlV2lkdGgsdS50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6Z3MsdHlwZTptcCxkZXB0aFRleHR1cmU6bmV3IEl4KHUudGV4dHVyZVdpZHRoLHUudGV4dHVyZUhlaWdodCxsdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxOZSksc3RlbmNpbEJ1ZmZlcjpiLnN0ZW5jaWwsaWdub3JlRGVwdGg6dS5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9eS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLHM9YXdhaXQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksamUuc2V0Q29udGV4dChyKSxqZS5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07bGV0IGNlPW5ldyAkLGZlPW5ldyAkO2Z1bmN0aW9uIG5lKENlLE5lKXtudWxsPT09TmU/Q2UubWF0cml4V29ybGQuY29weShDZS5tYXRyaXgpOkNlLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoTmUubWF0cml4V29ybGQsQ2UubWF0cml4KSxDZS5tYXRyaXhXb3JsZEludmVyc2UuY29weShDZS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dGhpcy51cGRhdGVDYW1lcmE9ZnVuY3Rpb24oQ2Upe2lmKG51bGw9PT1yKXJldHVybjtLLm5lYXI9Vi5uZWFyPUEubmVhcj1DZS5uZWFyLEsuZmFyPVYuZmFyPUEuZmFyPUNlLmZhciwoeGUhPT1LLm5lYXJ8fFhlIT09Sy5mYXIpJiYoci51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOksubmVhcixkZXB0aEZhcjpLLmZhcn0pLHhlPUsubmVhcixYZT1LLmZhcik7bGV0IE5lPUNlLnBhcmVudCxsdD1LLmNhbWVyYXM7bmUoSyxOZSk7Zm9yKGxldCBwdD0wO3B0PGx0Lmxlbmd0aDtwdCsrKW5lKGx0W3B0XSxOZSk7Sy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoSy5wb3NpdGlvbixLLnF1YXRlcm5pb24sSy5zY2FsZSksQ2UucG9zaXRpb24uY29weShLLnBvc2l0aW9uKSxDZS5xdWF0ZXJuaW9uLmNvcHkoSy5xdWF0ZXJuaW9uKSxDZS5zY2FsZS5jb3B5KEsuc2NhbGUpLENlLm1hdHJpeC5jb3B5KEsubWF0cml4KSxDZS5tYXRyaXhXb3JsZC5jb3B5KEsubWF0cml4V29ybGQpO2xldCBNdD1DZS5jaGlsZHJlbjtmb3IobGV0IHB0PTAsT2U9TXQubGVuZ3RoO3B0PE9lO3B0KyspTXRbcHRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTsyPT09bHQubGVuZ3RoP2Z1bmN0aW9uKENlLE5lLGx0KXtjZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oTmUubWF0cml4V29ybGQpLGZlLnNldEZyb21NYXRyaXhQb3NpdGlvbihsdC5tYXRyaXhXb3JsZCk7bGV0IE10PWNlLmRpc3RhbmNlVG8oZmUpLHB0PU5lLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsT2U9bHQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxBbj1wdFsxNF0vKHB0WzEwXS0xKSx3dD1wdFsxNF0vKHB0WzEwXSsxKSxvbj0ocHRbOV0rMSkvcHRbNV0sdmU9KHB0WzldLTEpL3B0WzVdLG10PShwdFs4XS0xKS9wdFswXSxmdD0oT2VbOF0rMSkvT2VbMF0sb2U9QW4qbXQsc3Q9QW4qZnQsWWU9TXQvKC1tdCtmdCksX3Q9WWUqLW10O05lLm1hdHJpeFdvcmxkLmRlY29tcG9zZShDZS5wb3NpdGlvbixDZS5xdWF0ZXJuaW9uLENlLnNjYWxlKSxDZS50cmFuc2xhdGVYKF90KSxDZS50cmFuc2xhdGVaKFllKSxDZS5tYXRyaXhXb3JsZC5jb21wb3NlKENlLnBvc2l0aW9uLENlLnF1YXRlcm5pb24sQ2Uuc2NhbGUpLENlLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KENlLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQgdXQ9QW4rWWUsc249d3QrWWU7Q2UucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUob2UtX3Qsc3QrKE10LV90KSxvbip3dC9zbip1dCx2ZSp3dC9zbip1dCx1dCxzbil9KEssQSxWKTpLLnByb2plY3Rpb25NYXRyaXguY29weShBLnByb2plY3Rpb25NYXRyaXgpfSx0aGlzLmdldENhbWVyYT1mdW5jdGlvbigpe3JldHVybiBLfSx0aGlzLmdldEZvdmVhdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT09dT91LmZpeGVkRm92ZWF0aW9uOm51bGwhPT1wP3AuZml4ZWRGb3ZlYXRpb246dm9pZCAwfSx0aGlzLnNldEZvdmVhdGlvbj1mdW5jdGlvbihDZSl7bnVsbCE9PXUmJih1LmZpeGVkRm92ZWF0aW9uPUNlKSxudWxsIT09cCYmdm9pZCAwIT09cC5maXhlZEZvdmVhdGlvbiYmKHAuZml4ZWRGb3ZlYXRpb249Q2UpfTtsZXQgZGU9bnVsbCxqZT1uZXcgWmVlO2plLnNldEFuaW1hdGlvbkxvb3AoZnVuY3Rpb24oQ2UsTmUpe2lmKGM9TmUuZ2V0Vmlld2VyUG9zZShzKSxtPU5lLG51bGwhPT1jKXtsZXQgTXQ9Yy52aWV3cztudWxsIT09cCYmKHQuc2V0UmVuZGVyVGFyZ2V0RnJhbWVidWZmZXIoeSxwLmZyYW1lYnVmZmVyKSx0LnNldFJlbmRlclRhcmdldCh5KSk7bGV0IHB0PSExO010Lmxlbmd0aCE9PUsuY2FtZXJhcy5sZW5ndGgmJihLLmNhbWVyYXMubGVuZ3RoPTAscHQ9ITApO2ZvcihsZXQgT2U9MDtPZTxNdC5sZW5ndGg7T2UrKyl7bGV0IEFuPU10W09lXSx3dD1udWxsO2lmKG51bGwhPT1wKXd0PXAuZ2V0Vmlld3BvcnQoQW4pO2Vsc2V7bGV0IHZlPWQuZ2V0Vmlld1N1YkltYWdlKHUsQW4pO3d0PXZlLnZpZXdwb3J0LDA9PT1PZSYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoeSx2ZS5jb2xvclRleHR1cmUsdS5pZ25vcmVEZXB0aFZhbHVlcz92b2lkIDA6dmUuZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoeSkpfWxldCBvbj10ZVtPZV07b24ubWF0cml4LmZyb21BcnJheShBbi50cmFuc2Zvcm0ubWF0cml4KSxvbi5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShBbi5wcm9qZWN0aW9uTWF0cml4KSxvbi52aWV3cG9ydC5zZXQod3QueCx3dC55LHd0LndpZHRoLHd0LmhlaWdodCksMD09PU9lJiZLLm1hdHJpeC5jb3B5KG9uLm1hdHJpeCksITA9PT1wdCYmSy5jYW1lcmFzLnB1c2gob24pfX1sZXQgbHQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBNdD0wO010PHgubGVuZ3RoO010KyspeFtNdF0udXBkYXRlKGx0W010XSxOZSxzKTtkZSYmZGUoQ2UsTmUpLG09bnVsbH0pLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihDZSl7ZGU9Q2V9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBKRmUobil7ZnVuY3Rpb24gaSh5LHgpe3kub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseC5jb2xvciYmeS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseC5lbWlzc2l2ZSYmeS5lbWlzc2l2ZS52YWx1ZS5jb3B5KHguZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHguZW1pc3NpdmVJbnRlbnNpdHkpLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguc3BlY3VsYXJNYXAmJih5LnNwZWN1bGFyTWFwLnZhbHVlPXguc3BlY3VsYXJNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IEEsVixSPW4uZ2V0KHgpLmVudk1hcDtSJiYoeS5lbnZNYXAudmFsdWU9Uix5LmZsaXBFbnZNYXAudmFsdWU9Ui5pc0N1YmVUZXh0dXJlJiYhMT09PVIuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEseS5yZWZsZWN0aXZpdHkudmFsdWU9eC5yZWZsZWN0aXZpdHkseS5pb3IudmFsdWU9eC5pb3IseS5yZWZyYWN0aW9uUmF0aW8udmFsdWU9eC5yZWZyYWN0aW9uUmF0aW8pLHgubGlnaHRNYXAmJih5LmxpZ2h0TWFwLnZhbHVlPXgubGlnaHRNYXAseS5saWdodE1hcEludGVuc2l0eS52YWx1ZT14LmxpZ2h0TWFwSW50ZW5zaXR5KSx4LmFvTWFwJiYoeS5hb01hcC52YWx1ZT14LmFvTWFwLHkuYW9NYXBJbnRlbnNpdHkudmFsdWU9eC5hb01hcEludGVuc2l0eSkseC5tYXA/QT14Lm1hcDp4LnNwZWN1bGFyTWFwP0E9eC5zcGVjdWxhck1hcDp4LmRpc3BsYWNlbWVudE1hcD9BPXguZGlzcGxhY2VtZW50TWFwOngubm9ybWFsTWFwP0E9eC5ub3JtYWxNYXA6eC5idW1wTWFwP0E9eC5idW1wTWFwOngucm91Z2huZXNzTWFwP0E9eC5yb3VnaG5lc3NNYXA6eC5tZXRhbG5lc3NNYXA/QT14Lm1ldGFsbmVzc01hcDp4LmFscGhhTWFwP0E9eC5hbHBoYU1hcDp4LmVtaXNzaXZlTWFwP0E9eC5lbWlzc2l2ZU1hcDp4LmNsZWFyY29hdE1hcD9BPXguY2xlYXJjb2F0TWFwOnguY2xlYXJjb2F0Tm9ybWFsTWFwP0E9eC5jbGVhcmNvYXROb3JtYWxNYXA6eC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/QT14LmNsZWFyY29hdFJvdWdobmVzc01hcDp4LnNwZWN1bGFySW50ZW5zaXR5TWFwP0E9eC5zcGVjdWxhckludGVuc2l0eU1hcDp4LnNwZWN1bGFyQ29sb3JNYXA/QT14LnNwZWN1bGFyQ29sb3JNYXA6eC50cmFuc21pc3Npb25NYXA/QT14LnRyYW5zbWlzc2lvbk1hcDp4LnRoaWNrbmVzc01hcD9BPXgudGhpY2tuZXNzTWFwOnguc2hlZW5Db2xvck1hcD9BPXguc2hlZW5Db2xvck1hcDp4LnNoZWVuUm91Z2huZXNzTWFwJiYoQT14LnNoZWVuUm91Z2huZXNzTWFwKSx2b2lkIDAhPT1BJiYoQS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoQT1BLnRleHR1cmUpLCEwPT09QS5tYXRyaXhBdXRvVXBkYXRlJiZBLnVwZGF0ZU1hdHJpeCgpLHkudXZUcmFuc2Zvcm0udmFsdWUuY29weShBLm1hdHJpeCkpLHguYW9NYXA/Vj14LmFvTWFwOngubGlnaHRNYXAmJihWPXgubGlnaHRNYXApLHZvaWQgMCE9PVYmJihWLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihWPVYudGV4dHVyZSksITA9PT1WLm1hdHJpeEF1dG9VcGRhdGUmJlYudXBkYXRlTWF0cml4KCkseS51djJUcmFuc2Zvcm0udmFsdWUuY29weShWLm1hdHJpeCkpfWZ1bmN0aW9uIHUoeSx4KXt5LnJvdWdobmVzcy52YWx1ZT14LnJvdWdobmVzcyx5Lm1ldGFsbmVzcy52YWx1ZT14Lm1ldGFsbmVzcyx4LnJvdWdobmVzc01hcCYmKHkucm91Z2huZXNzTWFwLnZhbHVlPXgucm91Z2huZXNzTWFwKSx4Lm1ldGFsbmVzc01hcCYmKHkubWV0YWxuZXNzTWFwLnZhbHVlPXgubWV0YWxuZXNzTWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWdvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Z28mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpLG4uZ2V0KHgpLmVudk1hcCYmKHkuZW52TWFwSW50ZW5zaXR5LnZhbHVlPXguZW52TWFwSW50ZW5zaXR5KX1yZXR1cm57cmVmcmVzaEZvZ1VuaWZvcm1zOmZ1bmN0aW9uKHkseCl7eS5mb2dDb2xvci52YWx1ZS5jb3B5KHguY29sb3IpLHguaXNGb2c/KHkuZm9nTmVhci52YWx1ZT14Lm5lYXIseS5mb2dGYXIudmFsdWU9eC5mYXIpOnguaXNGb2dFeHAyJiYoeS5mb2dEZW5zaXR5LnZhbHVlPXguZGVuc2l0eSl9LHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOmZ1bmN0aW9uKHkseCxSLEEsVil7eC5pc01lc2hCYXNpY01hdGVyaWFsP2koeSx4KTp4LmlzTWVzaExhbWJlcnRNYXRlcmlhbD8oaSh5LHgpLGZ1bmN0aW9uKHkseCl7eC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCl9KHkseCkpOnguaXNNZXNoVG9vbk1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmdyYWRpZW50TWFwJiYoeS5ncmFkaWVudE1hcC52YWx1ZT14LmdyYWRpZW50TWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWdvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Z28mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfSh5LHgpKTp4LmlzTWVzaFBob25nTWF0ZXJpYWw/KGkoeSx4KSxmdW5jdGlvbih5LHgpe3kuc3BlY3VsYXIudmFsdWUuY29weSh4LnNwZWN1bGFyKSx5LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heCh4LnNoaW5pbmVzcywxZS00KSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWdvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Z28mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfSh5LHgpKTp4LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkoeSx4KSx4LmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZnVuY3Rpb24oeSx4LFIpe3UoeSx4KSx5Lmlvci52YWx1ZT14Lmlvcix4LnNoZWVuPjAmJih5LnNoZWVuQ29sb3IudmFsdWUuY29weSh4LnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHguc2hlZW4pLHkuc2hlZW5Sb3VnaG5lc3MudmFsdWU9eC5zaGVlblJvdWdobmVzcyx4LnNoZWVuQ29sb3JNYXAmJih5LnNoZWVuQ29sb3JNYXAudmFsdWU9eC5zaGVlbkNvbG9yTWFwKSx4LnNoZWVuUm91Z2huZXNzTWFwJiYoeS5zaGVlblJvdWdobmVzc01hcC52YWx1ZT14LnNoZWVuUm91Z2huZXNzTWFwKSkseC5jbGVhcmNvYXQ+MCYmKHkuY2xlYXJjb2F0LnZhbHVlPXguY2xlYXJjb2F0LHkuY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzLHguY2xlYXJjb2F0TWFwJiYoeS5jbGVhcmNvYXRNYXAudmFsdWU9eC5jbGVhcmNvYXRNYXApLHguY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoeS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9eC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHguY2xlYXJjb2F0Tm9ybWFsTWFwJiYoeS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHguY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHkuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXguY2xlYXJjb2F0Tm9ybWFsTWFwLHguc2lkZT09PWdvJiZ5LmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSkseC50cmFuc21pc3Npb24+MCYmKHkudHJhbnNtaXNzaW9uLnZhbHVlPXgudHJhbnNtaXNzaW9uLHkudHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZT1SLnRleHR1cmUseS50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS52YWx1ZS5zZXQoUi53aWR0aCxSLmhlaWdodCkseC50cmFuc21pc3Npb25NYXAmJih5LnRyYW5zbWlzc2lvbk1hcC52YWx1ZT14LnRyYW5zbWlzc2lvbk1hcCkseS50aGlja25lc3MudmFsdWU9eC50aGlja25lc3MseC50aGlja25lc3NNYXAmJih5LnRoaWNrbmVzc01hcC52YWx1ZT14LnRoaWNrbmVzc01hcCkseS5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlPXguYXR0ZW51YXRpb25EaXN0YW5jZSx5LmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weSh4LmF0dGVudWF0aW9uQ29sb3IpKSx5LnNwZWN1bGFySW50ZW5zaXR5LnZhbHVlPXguc3BlY3VsYXJJbnRlbnNpdHkseS5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkoeC5zcGVjdWxhckNvbG9yKSx4LnNwZWN1bGFySW50ZW5zaXR5TWFwJiYoeS5zcGVjdWxhckludGVuc2l0eU1hcC52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5TWFwKSx4LnNwZWN1bGFyQ29sb3JNYXAmJih5LnNwZWN1bGFyQ29sb3JNYXAudmFsdWU9eC5zcGVjdWxhckNvbG9yTWFwKX0oeSx4LFYpOnUoeSx4KSk6eC5pc01lc2hNYXRjYXBNYXRlcmlhbD8oaSh5LHgpLGZ1bmN0aW9uKHkseCl7eC5tYXRjYXAmJih5Lm1hdGNhcC52YWx1ZT14Lm1hdGNhcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1nbyYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PWdvJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX0oeSx4KSk6eC5pc01lc2hEZXB0aE1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX0oeSx4KSk6eC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSx5LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeC5yZWZlcmVuY2VQb3NpdGlvbikseS5uZWFyRGlzdGFuY2UudmFsdWU9eC5uZWFyRGlzdGFuY2UseS5mYXJEaXN0YW5jZS52YWx1ZT14LmZhckRpc3RhbmNlfSh5LHgpKTp4LmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWdvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Z28mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfSh5LHgpKTp4LmlzTGluZUJhc2ljTWF0ZXJpYWw/KGZ1bmN0aW9uKHkseCl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eX0oeSx4KSx4LmlzTGluZURhc2hlZE1hdGVyaWFsJiZmdW5jdGlvbih5LHgpe3kuZGFzaFNpemUudmFsdWU9eC5kYXNoU2l6ZSx5LnRvdGFsU2l6ZS52YWx1ZT14LmRhc2hTaXplK3guZ2FwU2l6ZSx5LnNjYWxlLnZhbHVlPXguc2NhbGV9KHkseCkpOnguaXNQb2ludHNNYXRlcmlhbD9mdW5jdGlvbih5LHgsUixBKXtsZXQgVjt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHkuc2l6ZS52YWx1ZT14LnNpemUqUix5LnNjYWxlLnZhbHVlPS41KkEseC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KSx4Lm1hcD9WPXgubWFwOnguYWxwaGFNYXAmJihWPXguYWxwaGFNYXApLHZvaWQgMCE9PVYmJighMD09PVYubWF0cml4QXV0b1VwZGF0ZSYmVi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoVi5tYXRyaXgpKX0oeSx4LFIsQSk6eC5pc1Nwcml0ZU1hdGVyaWFsP2Z1bmN0aW9uKHkseCl7bGV0IFI7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnJvdGF0aW9uLnZhbHVlPXgucm90YXRpb24seC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KSx4Lm1hcD9SPXgubWFwOnguYWxwaGFNYXAmJihSPXguYWxwaGFNYXApLHZvaWQgMCE9PVImJighMD09PVIubWF0cml4QXV0b1VwZGF0ZSYmUi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoUi5tYXRyaXgpKX0oeSx4KTp4LmlzU2hhZG93TWF0ZXJpYWw/KHkuY29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5KTp4LmlzU2hhZGVyTWF0ZXJpYWwmJih4LnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9fX1mdW5jdGlvbiBqaShuPXt9KXtsZXQgdD12b2lkIDAhPT1uLmNhbnZhcz9uLmNhbnZhczpmdW5jdGlvbigpe2xldCBuPU14KCJjYW52YXMiKTtyZXR1cm4gbi5zdHlsZS5kaXNwbGF5PSJibG9jayIsbn0oKSxlPXZvaWQgMCE9PW4uY29udGV4dD9uLmNvbnRleHQ6bnVsbCxpPXZvaWQgMCE9PW4uYWxwaGEmJm4uYWxwaGEscj12b2lkIDA9PT1uLmRlcHRofHxuLmRlcHRoLG89dm9pZCAwPT09bi5zdGVuY2lsfHxuLnN0ZW5jaWwscz12b2lkIDAhPT1uLmFudGlhbGlhcyYmbi5hbnRpYWxpYXMsYT12b2lkIDA9PT1uLnByZW11bHRpcGxpZWRBbHBoYXx8bi5wcmVtdWx0aXBsaWVkQWxwaGEsbD12b2lkIDAhPT1uLnByZXNlcnZlRHJhd2luZ0J1ZmZlciYmbi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsYz12b2lkIDAhPT1uLnBvd2VyUHJlZmVyZW5jZT9uLnBvd2VyUHJlZmVyZW5jZToiZGVmYXVsdCIsZD12b2lkIDAhPT1uLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQmJm4uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCx1PW51bGwscD1udWxsLGY9W10sbT1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPV9wLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz1mcCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgYj10aGlzLE09ITEseT0wLHg9MCxSPW51bGwsQT0tMSxWPW51bGwsdGU9bmV3IFppLEs9bmV3IFppLHhlPW51bGwsWGU9dC53aWR0aCxEZT10LmhlaWdodCxEPTEscmU9bnVsbCxjZT1udWxsLGZlPW5ldyBaaSgwLDAsWGUsRGUpLGJlPW5ldyBaaSgwLDAsWGUsRGUpLG5lPSExLGRlPW5ldyBaMCxwZT0hMSxqZT0hMSxDZT1udWxsLE5lPW5ldyB4bixsdD1uZXcgJCxNdD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIHB0KCl7cmV0dXJuIG51bGw9PT1SP0Q6MX1sZXQgd3Qsb24sdmUsbXQsZnQsb2Usc3QsWWUsX3QsdXQsc24sQ24sdGksa2ksRmksWixMLFZlLHZ0LGVuLExlLG1uLGxuLE9lPWU7ZnVuY3Rpb24gQW4oRSxIKXtmb3IobGV0IFk9MDtZPEUubGVuZ3RoO1krKyl7bGV0IHNlPXQuZ2V0Q29udGV4dChFW1ldLEgpO2lmKG51bGwhPT1zZSlyZXR1cm4gc2V9cmV0dXJuIG51bGx9dHJ5e2xldCBFPXthbHBoYTohMCxkZXB0aDpyLHN0ZW5jaWw6byxhbnRpYWxpYXM6cyxwcmVtdWx0aXBsaWVkQWxwaGE6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OmR9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7ZFZ9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixMbiwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYWUsITEpLG51bGw9PT1PZSl7bGV0IEg9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKCEwPT09Yi5pc1dlYkdMMVJlbmRlcmVyJiZILnNoaWZ0KCksT2U9QW4oSCxFKSxudWxsPT09T2UpdGhyb3cgQW4oSCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX12b2lkIDA9PT1PZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQmJihPZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKEUpe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrRS5tZXNzYWdlKSxFfWZ1bmN0aW9uIEZ0KCl7d3Q9bmV3IHhrZShPZSksb249bmV3IGhrZShPZSx3dCxuKSx3dC5pbml0KG9uKSxtbj1uZXcgWkZlKE9lLHd0LG9uKSx2ZT1uZXcgWEZlKE9lLHd0LG9uKSxtdD1uZXcgd2tlKE9lKSxmdD1uZXcgTEZlLG9lPW5ldyBRRmUoT2Usd3QsdmUsZnQsb24sbW4sbXQpLHN0PW5ldyBfa2UoYiksWWU9bmV3IHlrZShiKSxfdD1uZXcgVlJlKE9lLG9uKSxsbj1uZXcgZmtlKE9lLHd0LF90LG9uKSx1dD1uZXcgQ2tlKE9lLF90LG10LGxuKSxzbj1uZXcgRGtlKE9lLHV0LF90LG10KSx2dD1uZXcgVGtlKE9lLG9uLG9lKSxaPW5ldyBna2UoZnQpLENuPW5ldyBORmUoYixzdCxZZSx3dCxvbixsbixaKSx0aT1uZXcgSkZlKGZ0KSxraT1uZXcgVkZlLEZpPW5ldyBXRmUod3Qsb24pLFZlPW5ldyBwa2UoYixzdCx2ZSxzbixpLGEpLEw9bmV3IHN0ZShiLHNuLG9uKSxlbj1uZXcgbWtlKE9lLHd0LG10LG9uKSxMZT1uZXcgTWtlKE9lLHd0LG10LG9uKSxtdC5wcm9ncmFtcz1Dbi5wcm9ncmFtcyxiLmNhcGFiaWxpdGllcz1vbixiLmV4dGVuc2lvbnM9d3QsYi5wcm9wZXJ0aWVzPWZ0LGIucmVuZGVyTGlzdHM9a2ksYi5zaGFkb3dNYXA9TCxiLnN0YXRlPXZlLGIuaW5mbz1tdH1GdCgpO2xldCBQdD1uZXcgbEIoYixPZSk7ZnVuY3Rpb24gTG4oRSl7RS5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksTT0hMH1mdW5jdGlvbiBhZSgpe2NvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IFJlc3RvcmVkLiIpLE09ITE7bGV0IEU9bXQuYXV0b1Jlc2V0LEg9TC5lbmFibGVkLFk9TC5hdXRvVXBkYXRlLEo9TC5uZWVkc1VwZGF0ZSxzZT1MLnR5cGU7RnQoKSxtdC5hdXRvUmVzZXQ9RSxMLmVuYWJsZWQ9SCxMLmF1dG9VcGRhdGU9WSxMLm5lZWRzVXBkYXRlPUosTC50eXBlPXNlfWZ1bmN0aW9uIEp0KEUpe2xldCBIPUUudGFyZ2V0O0gucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSnQpLGZ1bmN0aW9uKEUpeyhmdW5jdGlvbihFKXtsZXQgSD1mdC5nZXQoRSkucHJvZ3JhbXM7dm9pZCAwIT09SCYmKEguZm9yRWFjaChmdW5jdGlvbihZKXtDbi5yZWxlYXNlUHJvZ3JhbShZKX0pLEUuaXNTaGFkZXJNYXRlcmlhbCYmQ24ucmVsZWFzZVNoYWRlckNhY2hlKEUpKX0pKEUpLGZ0LnJlbW92ZShFKX0oSCl9dGhpcy54cj1QdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2V9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2UuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7bGV0IEU9d3QuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtFJiZFLmxvc2VDb250ZXh0KCl9LHRoaXMuZm9yY2VDb250ZXh0UmVzdG9yZT1mdW5jdGlvbigpe2xldCBFPXd0LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7RSYmRS5yZXN0b3JlQ29udGV4dCgpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4gRH0sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKEUpe3ZvaWQgMCE9PUUmJihEPUUsdGhpcy5zZXRTaXplKFhlLERlLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihFKXtyZXR1cm4gRS5zZXQoWGUsRGUpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oRSxILFkpe1B0LmlzUHJlc2VudGluZz9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOihYZT1FLERlPUgsdC53aWR0aD1NYXRoLmZsb29yKEUqRCksdC5oZWlnaHQ9TWF0aC5mbG9vcihIKkQpLCExIT09WSYmKHQuc3R5bGUud2lkdGg9RSsicHgiLHQuc3R5bGUuaGVpZ2h0PUgrInB4IiksdGhpcy5zZXRWaWV3cG9ydCgwLDAsRSxIKSl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuc2V0KFhlKkQsRGUqRCkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihFLEgsWSl7WGU9RSxEZT1ILEQ9WSx0LndpZHRoPU1hdGguZmxvb3IoRSpZKSx0LmhlaWdodD1NYXRoLmZsb29yKEgqWSksdGhpcy5zZXRWaWV3cG9ydCgwLDAsRSxIKX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuY29weSh0ZSl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuY29weShmZSl9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oRSxILFksSil7RS5pc1ZlY3RvcjQ/ZmUuc2V0KEUueCxFLnksRS56LEUudyk6ZmUuc2V0KEUsSCxZLEopLHZlLnZpZXdwb3J0KHRlLmNvcHkoZmUpLm11bHRpcGx5U2NhbGFyKEQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuY29weShiZSl9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihFLEgsWSxKKXtFLmlzVmVjdG9yND9iZS5zZXQoRS54LEUueSxFLnosRS53KTpiZS5zZXQoRSxILFksSiksdmUuc2Npc3NvcihLLmNvcHkoYmUpLm11bHRpcGx5U2NhbGFyKEQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5lfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKEUpe3ZlLnNldFNjaXNzb3JUZXN0KG5lPUUpfSx0aGlzLnNldE9wYXF1ZVNvcnQ9ZnVuY3Rpb24oRSl7cmU9RX0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24oRSl7Y2U9RX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKEUpe3JldHVybiBFLmNvcHkoVmUuZ2V0Q2xlYXJDb2xvcigpKX0sdGhpcy5zZXRDbGVhckNvbG9yPWZ1bmN0aW9uKCl7VmUuc2V0Q2xlYXJDb2xvci5hcHBseShWZSxhcmd1bWVudHMpfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gVmUuZ2V0Q2xlYXJBbHBoYSgpfSx0aGlzLnNldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtWZS5zZXRDbGVhckFscGhhLmFwcGx5KFZlLGFyZ3VtZW50cyl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oRSxILFkpe2xldCBKPTA7KHZvaWQgMD09PUV8fEUpJiYoSnw9MTYzODQpLCh2b2lkIDA9PT1IfHxIKSYmKEp8PTI1NiksKHZvaWQgMD09PVl8fFkpJiYoSnw9MTAyNCksT2UuY2xlYXIoSil9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixMbiwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYWUsITEpLGtpLmRpc3Bvc2UoKSxGaS5kaXNwb3NlKCksZnQuZGlzcG9zZSgpLHN0LmRpc3Bvc2UoKSxZZS5kaXNwb3NlKCksc24uZGlzcG9zZSgpLGxuLmRpc3Bvc2UoKSxDbi5kaXNwb3NlKCksUHQuZGlzcG9zZSgpLFB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsdWkpLFB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHVyKSxDZSYmKENlLmRpc3Bvc2UoKSxDZT1udWxsKSx6by5zdG9wKCl9LHRoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKEUsSCxZLEosc2UsemUpe251bGw9PT1IJiYoSD1NdCk7bGV0IGV0PXNlLmlzTWVzaCYmc2UubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHFlPWZ1bmN0aW9uKEUsSCxZLEosc2UpeyEwIT09SC5pc1NjZW5lJiYoSD1NdCksb2UucmVzZXRUZXh0dXJlVW5pdHMoKTtsZXQgemU9SC5mb2cscWU9bnVsbD09PVI/Yi5vdXRwdXRFbmNvZGluZzohMD09PVIuaXNYUlJlbmRlclRhcmdldD9SLnRleHR1cmUuZW5jb2Rpbmc6X3AscnQ9KEouaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ZZTpzdCkuZ2V0KEouZW52TWFwfHwoSi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0guZW52aXJvbm1lbnQ6bnVsbCkpLGR0PSEwPT09Si52ZXJ0ZXhDb2xvcnMmJiEhWS5hdHRyaWJ1dGVzLmNvbG9yJiY0PT09WS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplLFN0PSEhSi5ub3JtYWxNYXAmJiEhWS5hdHRyaWJ1dGVzLnRhbmdlbnQsRHQ9ISFZLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixjbj0hIVkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxHaT1ZLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9ZLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCx2aT1KLnRvbmVNYXBwZWQ/Yi50b25lTWFwcGluZzpmcCxwbj1mdC5nZXQoSiksUG49cC5zdGF0ZS5saWdodHM7ITAhPT1wZXx8ITAhPT1qZSYmRT09PVZ8fFouc2V0U3RhdGUoSixFLEU9PT1WJiZKLmlkPT09QSk7bGV0IEV0PSExO0oudmVyc2lvbj09PXBuLl9fdmVyc2lvbj8ocG4ubmVlZHNMaWdodHMmJnBuLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PVBuLnN0YXRlLnZlcnNpb258fHBuLm91dHB1dEVuY29kaW5nIT09cWV8fHNlLmlzSW5zdGFuY2VkTWVzaCYmITE9PT1wbi5pbnN0YW5jaW5nfHwhc2UuaXNJbnN0YW5jZWRNZXNoJiYhMD09PXBuLmluc3RhbmNpbmd8fHNlLmlzU2tpbm5lZE1lc2gmJiExPT09cG4uc2tpbm5pbmd8fCFzZS5pc1NraW5uZWRNZXNoJiYhMD09PXBuLnNraW5uaW5nfHxwbi5lbnZNYXAhPT1ydHx8Si5mb2cmJnBuLmZvZyE9PXplfHx2b2lkIDAhPT1wbi5udW1DbGlwcGluZ1BsYW5lcyYmKHBuLm51bUNsaXBwaW5nUGxhbmVzIT09Wi5udW1QbGFuZXN8fHBuLm51bUludGVyc2VjdGlvbiE9PVoubnVtSW50ZXJzZWN0aW9uKXx8cG4udmVydGV4QWxwaGFzIT09ZHR8fHBuLnZlcnRleFRhbmdlbnRzIT09U3R8fHBuLm1vcnBoVGFyZ2V0cyE9PUR0fHxwbi5tb3JwaE5vcm1hbHMhPT1jbnx8cG4udG9uZU1hcHBpbmchPT12aXx8ITA9PT1vbi5pc1dlYkdMMiYmcG4ubW9ycGhUYXJnZXRzQ291bnQhPT1HaSkmJihFdD0hMCk6KEV0PSEwLHBuLl9fdmVyc2lvbj1KLnZlcnNpb24pO2xldCBwaT1wbi5jdXJyZW50UHJvZ3JhbTshMD09PUV0JiYocGk9eF8oSixILHNlKSk7bGV0IFFuPSExLFZuPSExLFduPSExLFV0PXBpLmdldFVuaWZvcm1zKCksTmk9cG4udW5pZm9ybXM7aWYodmUudXNlUHJvZ3JhbShwaS5wcm9ncmFtKSYmKFFuPSEwLFZuPSEwLFduPSEwKSxKLmlkIT09QSYmKEE9Si5pZCxWbj0hMCksUW58fFYhPT1FKXtpZihVdC5zZXRWYWx1ZShPZSwicHJvamVjdGlvbk1hdHJpeCIsRS5wcm9qZWN0aW9uTWF0cml4KSxvbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZVdC5zZXRWYWx1ZShPZSwibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2coRS5mYXIrMSkvTWF0aC5MTjIpKSxWIT09RSYmKFY9RSxWbj0hMCxXbj0hMCksSi5pc1NoYWRlck1hdGVyaWFsfHxKLmlzTWVzaFBob25nTWF0ZXJpYWx8fEouaXNNZXNoVG9vbk1hdGVyaWFsfHxKLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fEouZW52TWFwKXtsZXQgdm49VXQubWFwLmNhbWVyYVBvc2l0aW9uO3ZvaWQgMCE9PXZuJiZ2bi5zZXRWYWx1ZShPZSxsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oRS5tYXRyaXhXb3JsZCkpfShKLmlzTWVzaFBob25nTWF0ZXJpYWx8fEouaXNNZXNoVG9vbk1hdGVyaWFsfHxKLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Si5pc01lc2hCYXNpY01hdGVyaWFsfHxKLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fEouaXNTaGFkZXJNYXRlcmlhbCkmJlV0LnNldFZhbHVlKE9lLCJpc09ydGhvZ3JhcGhpYyIsITA9PT1FLmlzT3J0aG9ncmFwaGljQ2FtZXJhKSwoSi5pc01lc2hQaG9uZ01hdGVyaWFsfHxKLmlzTWVzaFRvb25NYXRlcmlhbHx8Si5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEouaXNNZXNoQmFzaWNNYXRlcmlhbHx8Si5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxKLmlzU2hhZGVyTWF0ZXJpYWx8fEouaXNTaGFkb3dNYXRlcmlhbHx8c2UuaXNTa2lubmVkTWVzaCkmJlV0LnNldFZhbHVlKE9lLCJ2aWV3TWF0cml4IixFLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoc2UuaXNTa2lubmVkTWVzaCl7VXQuc2V0T3B0aW9uYWwoT2Usc2UsImJpbmRNYXRyaXgiKSxVdC5zZXRPcHRpb25hbChPZSxzZSwiYmluZE1hdHJpeEludmVyc2UiKTtsZXQgdm49c2Uuc2tlbGV0b247dm4mJihvbi5mbG9hdFZlcnRleFRleHR1cmVzPyhudWxsPT09dm4uYm9uZVRleHR1cmUmJnZuLmNvbXB1dGVCb25lVGV4dHVyZSgpLFV0LnNldFZhbHVlKE9lLCJib25lVGV4dHVyZSIsdm4uYm9uZVRleHR1cmUsb2UpLFV0LnNldFZhbHVlKE9lLCJib25lVGV4dHVyZVNpemUiLHZuLmJvbmVUZXh0dXJlU2l6ZSkpOlV0LnNldE9wdGlvbmFsKE9lLHZuLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFZJiYodm9pZCAwIT09WS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb258fHZvaWQgMCE9PVkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCkmJnZ0LnVwZGF0ZShzZSxZLEoscGkpLChWbnx8cG4ucmVjZWl2ZVNoYWRvdyE9PXNlLnJlY2VpdmVTaGFkb3cpJiYocG4ucmVjZWl2ZVNoYWRvdz1zZS5yZWNlaXZlU2hhZG93LFV0LnNldFZhbHVlKE9lLCJyZWNlaXZlU2hhZG93IixzZS5yZWNlaXZlU2hhZG93KSksVm4mJihVdC5zZXRWYWx1ZShPZSwidG9uZU1hcHBpbmdFeHBvc3VyZSIsYi50b25lTWFwcGluZ0V4cG9zdXJlKSxwbi5uZWVkc0xpZ2h0cyYmZnVuY3Rpb24oRSxIKXtFLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPUgsRS5saWdodFByb2JlLm5lZWRzVXBkYXRlPUgsRS5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT1ILEUuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9SCxFLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPUgsRS5wb2ludExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ILEUuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1ILEUuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ILEUucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGU9SCxFLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9SH0oTmksV24pLHplJiZKLmZvZyYmdGkucmVmcmVzaEZvZ1VuaWZvcm1zKE5pLHplKSx0aS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhOaSxKLEQsRGUsQ2UpLGdwLnVwbG9hZChPZSxwbi51bmlmb3Jtc0xpc3QsTmksb2UpKSxKLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09Si51bmlmb3Jtc05lZWRVcGRhdGUmJihncC51cGxvYWQoT2UscG4udW5pZm9ybXNMaXN0LE5pLG9lKSxKLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSksSi5pc1Nwcml0ZU1hdGVyaWFsJiZVdC5zZXRWYWx1ZShPZSwiY2VudGVyIixzZS5jZW50ZXIpLFV0LnNldFZhbHVlKE9lLCJtb2RlbFZpZXdNYXRyaXgiLHNlLm1vZGVsVmlld01hdHJpeCksVXQuc2V0VmFsdWUoT2UsIm5vcm1hbE1hdHJpeCIsc2Uubm9ybWFsTWF0cml4KSxVdC5zZXRWYWx1ZShPZSwibW9kZWxNYXRyaXgiLHNlLm1hdHJpeFdvcmxkKSxwaX0oRSxILFksSixzZSk7dmUuc2V0TWF0ZXJpYWwoSixldCk7bGV0IHJ0PVkuaW5kZXgsZHQ9WS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGw9PT1ydCl7aWYodm9pZCAwPT09ZHR8fDA9PT1kdC5jb3VudClyZXR1cm59ZWxzZSBpZigwPT09cnQuY291bnQpcmV0dXJuO2xldCBTdD0xOyEwPT09Si53aXJlZnJhbWUmJihydD11dC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoWSksU3Q9MiksbG4uc2V0dXAoc2UsSixxZSxZLHJ0KTtsZXQgRHQsY249ZW47bnVsbCE9PXJ0JiYoRHQ9X3QuZ2V0KHJ0KSxjbj1MZSxjbi5zZXRJbmRleChEdCkpO2xldCBHaT1udWxsIT09cnQ/cnQuY291bnQ6ZHQuY291bnQsdmk9WS5kcmF3UmFuZ2Uuc3RhcnQqU3QscG49WS5kcmF3UmFuZ2UuY291bnQqU3QsUG49bnVsbCE9PXplP3plLnN0YXJ0KlN0OjAsRXQ9bnVsbCE9PXplP3plLmNvdW50KlN0OjEvMCxwaT1NYXRoLm1heCh2aSxQbiksUW49TWF0aC5taW4oR2ksdmkrcG4sUG4rRXQpLTEsVm49TWF0aC5tYXgoMCxRbi1waSsxKTtpZigwIT09Vm4pe2lmKHNlLmlzTWVzaCkhMD09PUoud2lyZWZyYW1lPyh2ZS5zZXRMaW5lV2lkdGgoSi53aXJlZnJhbWVMaW5ld2lkdGgqcHQoKSksY24uc2V0TW9kZSgxKSk6Y24uc2V0TW9kZSg0KTtlbHNlIGlmKHNlLmlzTGluZSl7bGV0IFduPUoubGluZXdpZHRoO3ZvaWQgMD09PVduJiYoV249MSksdmUuc2V0TGluZVdpZHRoKFduKnB0KCkpLGNuLnNldE1vZGUoc2UuaXNMaW5lU2VnbWVudHM/MTpzZS5pc0xpbmVMb29wPzI6Myl9ZWxzZSBzZS5pc1BvaW50cz9jbi5zZXRNb2RlKDApOnNlLmlzU3ByaXRlJiZjbi5zZXRNb2RlKDQpO2lmKHNlLmlzSW5zdGFuY2VkTWVzaCljbi5yZW5kZXJJbnN0YW5jZXMocGksVm4sc2UuY291bnQpO2Vsc2UgaWYoWS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgV249TWF0aC5taW4oWS5pbnN0YW5jZUNvdW50LFkuX21heEluc3RhbmNlQ291bnQpO2NuLnJlbmRlckluc3RhbmNlcyhwaSxWbixXbil9ZWxzZSBjbi5yZW5kZXIocGksVm4pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKEUsSCl7cD1GaS5nZXQoRSkscC5pbml0KCksbS5wdXNoKHApLEUudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKFkpe1kuaXNMaWdodCYmWS5sYXllcnMudGVzdChILmxheWVycykmJihwLnB1c2hMaWdodChZKSxZLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhZKSl9KSxwLnNldHVwTGlnaHRzKGIucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEUudHJhdmVyc2UoZnVuY3Rpb24oWSl7bGV0IEo9WS5tYXRlcmlhbDtpZihKKWlmKEFycmF5LmlzQXJyYXkoSikpZm9yKGxldCBzZT0wO3NlPEoubGVuZ3RoO3NlKyspeF8oSltzZV0sRSxZKTtlbHNlIHhfKEosRSxZKX0pLG0ucG9wKCkscD1udWxsfTtsZXQgV2U9bnVsbDtmdW5jdGlvbiB1aSgpe3pvLnN0b3AoKX1mdW5jdGlvbiB1cigpe3pvLnN0YXJ0KCl9bGV0IHpvPW5ldyBaZWU7ZnVuY3Rpb24gQ3IoRSxILFksSil7aWYoITE9PT1FLnZpc2libGUpcmV0dXJuO2lmKEUubGF5ZXJzLnRlc3QoSC5sYXllcnMpKWlmKEUuaXNHcm91cClZPUUucmVuZGVyT3JkZXI7ZWxzZSBpZihFLmlzTE9EKSEwPT09RS5hdXRvVXBkYXRlJiZFLnVwZGF0ZShIKTtlbHNlIGlmKEUuaXNMaWdodClwLnB1c2hMaWdodChFKSxFLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhFKTtlbHNlIGlmKEUuaXNTcHJpdGUpe2lmKCFFLmZydXN0dW1DdWxsZWR8fGRlLmludGVyc2VjdHNTcHJpdGUoRSkpe0omJmx0LnNldEZyb21NYXRyaXhQb3NpdGlvbihFLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoTmUpO2xldCBldD1zbi51cGRhdGUoRSkscWU9RS5tYXRlcmlhbDtxZS52aXNpYmxlJiZ1LnB1c2goRSxldCxxZSxZLGx0LnosbnVsbCl9fWVsc2UgaWYoKEUuaXNNZXNofHxFLmlzTGluZXx8RS5pc1BvaW50cykmJihFLmlzU2tpbm5lZE1lc2gmJkUuc2tlbGV0b24uZnJhbWUhPT1tdC5yZW5kZXIuZnJhbWUmJihFLnNrZWxldG9uLnVwZGF0ZSgpLEUuc2tlbGV0b24uZnJhbWU9bXQucmVuZGVyLmZyYW1lKSwhRS5mcnVzdHVtQ3VsbGVkfHxkZS5pbnRlcnNlY3RzT2JqZWN0KEUpKSl7SiYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEUubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChOZSk7bGV0IGV0PXNuLnVwZGF0ZShFKSxxZT1FLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkocWUpKXtsZXQgcnQ9ZXQuZ3JvdXBzO2ZvcihsZXQgZHQ9MCxTdD1ydC5sZW5ndGg7ZHQ8U3Q7ZHQrKyl7bGV0IER0PXJ0W2R0XSxjbj1xZVtEdC5tYXRlcmlhbEluZGV4XTtjbiYmY24udmlzaWJsZSYmdS5wdXNoKEUsZXQsY24sWSxsdC56LER0KX19ZWxzZSBxZS52aXNpYmxlJiZ1LnB1c2goRSxldCxxZSxZLGx0LnosbnVsbCl9bGV0IHplPUUuY2hpbGRyZW47Zm9yKGxldCBldD0wLHFlPXplLmxlbmd0aDtldDxxZTtldCsrKUNyKHplW2V0XSxILFksSil9ZnVuY3Rpb24gTWEoRSxILFksSil7bGV0IHNlPUUub3BhcXVlLHplPUUudHJhbnNtaXNzaXZlLGV0PUUudHJhbnNwYXJlbnQ7cC5zZXR1cExpZ2h0c1ZpZXcoWSksemUubGVuZ3RoPjAmJmZ1bmN0aW9uKEUsSCxZKXtudWxsPT09Q2UmJihDZT1uZXcoITA9PT1zJiYhMD09PW9uLmlzV2ViR0wyP3d4OkpzKSgxMDI0LDEwMjQse2dlbmVyYXRlTWlwbWFwczohMCx0eXBlOm51bGwhPT1tbi5jb252ZXJ0KFUwKT9VMDptcCxtaW5GaWx0ZXI6UUksbWFnRmlsdGVyOl9vLHdyYXBTOnlhLHdyYXBUOnlhLHVzZVJlbmRlclRvVGV4dHVyZTp3dC5oYXMoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSkpO2xldCBKPWIuZ2V0UmVuZGVyVGFyZ2V0KCk7Yi5zZXRSZW5kZXJUYXJnZXQoQ2UpLGIuY2xlYXIoKTtsZXQgc2U9Yi50b25lTWFwcGluZztiLnRvbmVNYXBwaW5nPWZwLGRsKEUsSCxZKSxiLnRvbmVNYXBwaW5nPXNlLG9lLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KENlKSxvZS51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoQ2UpLGIuc2V0UmVuZGVyVGFyZ2V0KEopfShzZSxILFkpLEomJnZlLnZpZXdwb3J0KHRlLmNvcHkoSikpLHNlLmxlbmd0aD4wJiZkbChzZSxILFkpLHplLmxlbmd0aD4wJiZkbCh6ZSxILFkpLGV0Lmxlbmd0aD4wJiZkbChldCxILFkpfWZ1bmN0aW9uIGRsKEUsSCxZKXtsZXQgSj0hMD09PUguaXNTY2VuZT9ILm92ZXJyaWRlTWF0ZXJpYWw6bnVsbDtmb3IobGV0IHNlPTAsemU9RS5sZW5ndGg7c2U8emU7c2UrKyl7bGV0IGV0PUVbc2VdLHFlPWV0Lm9iamVjdCxydD1ldC5nZW9tZXRyeSxkdD1udWxsPT09Sj9ldC5tYXRlcmlhbDpKLFN0PWV0Lmdyb3VwO3FlLmxheWVycy50ZXN0KFkubGF5ZXJzKSYmUEEocWUsSCxZLHJ0LGR0LFN0KX19ZnVuY3Rpb24gUEEoRSxILFksSixzZSx6ZSl7RS5vbkJlZm9yZVJlbmRlcihiLEgsWSxKLHNlLHplKSxFLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKFkubWF0cml4V29ybGRJbnZlcnNlLEUubWF0cml4V29ybGQpLEUubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChFLm1vZGVsVmlld01hdHJpeCksc2Uub25CZWZvcmVSZW5kZXIoYixILFksSixFLHplKSwhMD09PXNlLnRyYW5zcGFyZW50JiZzZS5zaWRlPT09cTA/KHNlLnNpZGU9Z28sc2UubmVlZHNVcGRhdGU9ITAsYi5yZW5kZXJCdWZmZXJEaXJlY3QoWSxILEosc2UsRSx6ZSksc2Uuc2lkZT15eCxzZS5uZWVkc1VwZGF0ZT0hMCxiLnJlbmRlckJ1ZmZlckRpcmVjdChZLEgsSixzZSxFLHplKSxzZS5zaWRlPXEwKTpiLnJlbmRlckJ1ZmZlckRpcmVjdChZLEgsSixzZSxFLHplKSxFLm9uQWZ0ZXJSZW5kZXIoYixILFksSixzZSx6ZSl9ZnVuY3Rpb24geF8oRSxILFkpeyEwIT09SC5pc1NjZW5lJiYoSD1NdCk7bGV0IEo9ZnQuZ2V0KEUpLHNlPXAuc3RhdGUubGlnaHRzLGV0PXNlLnN0YXRlLnZlcnNpb24scWU9Q24uZ2V0UGFyYW1ldGVycyhFLHNlLnN0YXRlLHAuc3RhdGUuc2hhZG93c0FycmF5LEgsWSkscnQ9Q24uZ2V0UHJvZ3JhbUNhY2hlS2V5KHFlKSxkdD1KLnByb2dyYW1zO0ouZW52aXJvbm1lbnQ9RS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0guZW52aXJvbm1lbnQ6bnVsbCxKLmZvZz1ILmZvZyxKLmVudk1hcD0oRS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1llOnN0KS5nZXQoRS5lbnZNYXB8fEouZW52aXJvbm1lbnQpLHZvaWQgMD09PWR0JiYoRS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixKdCksZHQ9bmV3IE1hcCxKLnByb2dyYW1zPWR0KTtsZXQgU3Q9ZHQuZ2V0KHJ0KTtpZih2b2lkIDAhPT1TdCl7aWYoSi5jdXJyZW50UHJvZ3JhbT09PVN0JiZKLmxpZ2h0c1N0YXRlVmVyc2lvbj09PWV0KXJldHVybiBlQyhFLHFlKSxTdH1lbHNlIHFlLnVuaWZvcm1zPUNuLmdldFVuaWZvcm1zKEUpLEUub25CdWlsZChZLHFlLGIpLEUub25CZWZvcmVDb21waWxlKHFlLGIpLFN0PUNuLmFjcXVpcmVQcm9ncmFtKHFlLHJ0KSxkdC5zZXQocnQsU3QpLEoudW5pZm9ybXM9cWUudW5pZm9ybXM7bGV0IER0PUoudW5pZm9ybXM7KCFFLmlzU2hhZGVyTWF0ZXJpYWwmJiFFLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fCEwPT09RS5jbGlwcGluZykmJihEdC5jbGlwcGluZ1BsYW5lcz1aLnVuaWZvcm0pLGVDKEUscWUpLEoubmVlZHNMaWdodHM9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxFLmlzTWVzaFRvb25NYXRlcmlhbHx8RS5pc01lc2hQaG9uZ01hdGVyaWFsfHxFLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fEUuaXNTaGFkb3dNYXRlcmlhbHx8RS5pc1NoYWRlck1hdGVyaWFsJiYhMD09PUUubGlnaHRzfShFKSxKLmxpZ2h0c1N0YXRlVmVyc2lvbj1ldCxKLm5lZWRzTGlnaHRzJiYoRHQuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9c2Uuc3RhdGUuYW1iaWVudCxEdC5saWdodFByb2JlLnZhbHVlPXNlLnN0YXRlLnByb2JlLER0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPXNlLnN0YXRlLmRpcmVjdGlvbmFsLER0LmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPXNlLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LER0LnNwb3RMaWdodHMudmFsdWU9c2Uuc3RhdGUuc3BvdCxEdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPXNlLnN0YXRlLnNwb3RTaGFkb3csRHQucmVjdEFyZWFMaWdodHMudmFsdWU9c2Uuc3RhdGUucmVjdEFyZWEsRHQubHRjXzEudmFsdWU9c2Uuc3RhdGUucmVjdEFyZWFMVEMxLER0Lmx0Y18yLnZhbHVlPXNlLnN0YXRlLnJlY3RBcmVhTFRDMixEdC5wb2ludExpZ2h0cy52YWx1ZT1zZS5zdGF0ZS5wb2ludCxEdC5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1zZS5zdGF0ZS5wb2ludFNoYWRvdyxEdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPXNlLnN0YXRlLmhlbWksRHQuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9c2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsRHQuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9c2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsRHQuc3BvdFNoYWRvd01hcC52YWx1ZT1zZS5zdGF0ZS5zcG90U2hhZG93TWFwLER0LnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9c2Uuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxEdC5wb2ludFNoYWRvd01hcC52YWx1ZT1zZS5zdGF0ZS5wb2ludFNoYWRvd01hcCxEdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1zZS5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7bGV0IGNuPVN0LmdldFVuaWZvcm1zKCksR2k9Z3Auc2VxV2l0aFZhbHVlKGNuLnNlcSxEdCk7cmV0dXJuIEouY3VycmVudFByb2dyYW09U3QsSi51bmlmb3Jtc0xpc3Q9R2ksU3R9ZnVuY3Rpb24gZUMoRSxIKXtsZXQgWT1mdC5nZXQoRSk7WS5vdXRwdXRFbmNvZGluZz1ILm91dHB1dEVuY29kaW5nLFkuaW5zdGFuY2luZz1ILmluc3RhbmNpbmcsWS5za2lubmluZz1ILnNraW5uaW5nLFkubW9ycGhUYXJnZXRzPUgubW9ycGhUYXJnZXRzLFkubW9ycGhOb3JtYWxzPUgubW9ycGhOb3JtYWxzLFkubW9ycGhUYXJnZXRzQ291bnQ9SC5tb3JwaFRhcmdldHNDb3VudCxZLm51bUNsaXBwaW5nUGxhbmVzPUgubnVtQ2xpcHBpbmdQbGFuZXMsWS5udW1JbnRlcnNlY3Rpb249SC5udW1DbGlwSW50ZXJzZWN0aW9uLFkudmVydGV4QWxwaGFzPUgudmVydGV4QWxwaGFzLFkudmVydGV4VGFuZ2VudHM9SC52ZXJ0ZXhUYW5nZW50cyxZLnRvbmVNYXBwaW5nPUgudG9uZU1hcHBpbmd9em8uc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihFKXtXZSYmV2UoRSl9KSx0eXBlb2Ygd2luZG93PCJ1IiYmem8uc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihFKXtXZT1FLFB0LnNldEFuaW1hdGlvbkxvb3AoRSksbnVsbD09PUU/em8uc3RvcCgpOnpvLnN0YXJ0KCl9LFB0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsdWkpLFB0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHVyKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihFLEgpe2lmKHZvaWQgMD09PUh8fCEwPT09SC5pc0NhbWVyYSl7aWYoITAhPT1NKXtpZighMD09PUUuYXV0b1VwZGF0ZSYmRS51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1ILnBhcmVudCYmSC51cGRhdGVNYXRyaXhXb3JsZCgpLCEwPT09UHQuZW5hYmxlZCYmITA9PT1QdC5pc1ByZXNlbnRpbmcmJighMD09PVB0LmNhbWVyYUF1dG9VcGRhdGUmJlB0LnVwZGF0ZUNhbWVyYShIKSxIPVB0LmdldENhbWVyYSgpKSwhMD09PUUuaXNTY2VuZSYmRS5vbkJlZm9yZVJlbmRlcihiLEUsSCxSKSxwPUZpLmdldChFLG0ubGVuZ3RoKSxwLmluaXQoKSxtLnB1c2gocCksTmUubXVsdGlwbHlNYXRyaWNlcyhILnByb2plY3Rpb25NYXRyaXgsSC5tYXRyaXhXb3JsZEludmVyc2UpLGRlLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KE5lKSxqZT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLHBlPVouaW5pdCh0aGlzLmNsaXBwaW5nUGxhbmVzLGplLEgpLHU9a2kuZ2V0KEUsZi5sZW5ndGgpLHUuaW5pdCgpLGYucHVzaCh1KSxDcihFLEgsMCxiLnNvcnRPYmplY3RzKSx1LmZpbmlzaCgpLCEwPT09Yi5zb3J0T2JqZWN0cyYmdS5zb3J0KHJlLGNlKSwhMD09PXBlJiZaLmJlZ2luU2hhZG93cygpLEwucmVuZGVyKHAuc3RhdGUuc2hhZG93c0FycmF5LEUsSCksITA9PT1wZSYmWi5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSxWZS5yZW5kZXIodSxFKSxwLnNldHVwTGlnaHRzKGIucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEguaXNBcnJheUNhbWVyYSl7bGV0IEo9SC5jYW1lcmFzO2ZvcihsZXQgc2U9MCx6ZT1KLmxlbmd0aDtzZTx6ZTtzZSsrKXtsZXQgZXQ9SltzZV07TWEodSxFLGV0LGV0LnZpZXdwb3J0KX19ZWxzZSBNYSh1LEUsSCk7bnVsbCE9PVImJihvZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChSKSxvZS51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoUikpLCEwPT09RS5pc1NjZW5lJiZFLm9uQWZ0ZXJSZW5kZXIoYixFLEgpLHZlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksdmUuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSx2ZS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLHZlLnNldFBvbHlnb25PZmZzZXQoITEpLGxuLnJlc2V0RGVmYXVsdFN0YXRlKCksQT0tMSxWPW51bGwsbS5wb3AoKSxwPW0ubGVuZ3RoPjA/bVttLmxlbmd0aC0xXTpudWxsLGYucG9wKCksdT1mLmxlbmd0aD4wP2ZbZi5sZW5ndGgtMV06bnVsbH19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIil9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB4fSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBSfSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKEUsSCxZKXtmdC5nZXQoRS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1ILGZ0LmdldChFLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9WTtsZXQgSj1mdC5nZXQoRSk7Si5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsSi5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJihKLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXI9dm9pZCAwPT09WSxKLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEUudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxFLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxFLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEUsSCl7bGV0IFk9ZnQuZ2V0KEUpO1kuX193ZWJnbEZyYW1lYnVmZmVyPUgsWS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj12b2lkIDA9PT1IfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihFLEg9MCxZPTApe1I9RSx5PUgseD1ZO2xldCBKPSEwO2lmKEUpe2xldCBydD1mdC5nZXQoRSk7dm9pZCAwIT09cnQuX191c2VEZWZhdWx0RnJhbWVidWZmZXI/KHZlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxKPSExKTp2b2lkIDA9PT1ydC5fX3dlYmdsRnJhbWVidWZmZXI/b2Uuc2V0dXBSZW5kZXJUYXJnZXQoRSk6cnQuX19oYXNFeHRlcm5hbFRleHR1cmVzJiZvZS5yZWJpbmRUZXh0dXJlcyhFLGZ0LmdldChFLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGZ0LmdldChFLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBzZT1udWxsLHplPSExLGV0PSExO2lmKEUpe2xldCBydD1FLnRleHR1cmU7KHJ0LmlzRGF0YVRleHR1cmUzRHx8cnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoZXQ9ITApO2xldCBkdD1mdC5nZXQoRSkuX193ZWJnbEZyYW1lYnVmZmVyO0UuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KHNlPWR0W0hdLHplPSEwKTpzZT1FLnVzZVJlbmRlcmJ1ZmZlcj9mdC5nZXQoRSkuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOmR0LHRlLmNvcHkoRS52aWV3cG9ydCksSy5jb3B5KEUuc2Npc3NvcikseGU9RS5zY2lzc29yVGVzdH1lbHNlIHRlLmNvcHkoZmUpLm11bHRpcGx5U2NhbGFyKEQpLmZsb29yKCksSy5jb3B5KGJlKS5tdWx0aXBseVNjYWxhcihEKS5mbG9vcigpLHhlPW5lO2lmKHZlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxzZSkmJm9uLmRyYXdCdWZmZXJzJiZKJiZ2ZS5kcmF3QnVmZmVycyhFLHNlKSx2ZS52aWV3cG9ydCh0ZSksdmUuc2Npc3NvcihLKSx2ZS5zZXRTY2lzc29yVGVzdCh4ZSksemUpe2xldCBydD1mdC5nZXQoRS50ZXh0dXJlKTtPZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStILHJ0Ll9fd2ViZ2xUZXh0dXJlLFkpfWVsc2UgaWYoZXQpe2xldCBydD1mdC5nZXQoRS50ZXh0dXJlKTtPZS5mcmFtZWJ1ZmZlclRleHR1cmVMYXllcigzNjE2MCwzNjA2NCxydC5fX3dlYmdsVGV4dHVyZSxZfHwwLEh8fDApfUE9LTF9LHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihFLEgsWSxKLHNlLHplLGV0KXtpZighRXx8IUUuaXNXZWJHTFJlbmRlclRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7bGV0IHFlPWZ0LmdldChFKS5fX3dlYmdsRnJhbWVidWZmZXI7aWYoRS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmdm9pZCAwIT09ZXQmJihxZT1xZVtldF0pLHFlKXt2ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAscWUpO3RyeXtsZXQgcnQ9RS50ZXh0dXJlLGR0PXJ0LmZvcm1hdCxTdD1ydC50eXBlO2lmKGR0IT09Z3MmJm1uLmNvbnZlcnQoZHQpIT09T2UuZ2V0UGFyYW1ldGVyKDM1NzM5KSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKTtsZXQgRHQ9U3Q9PT1VMCYmKHd0LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil8fG9uLmlzV2ViR0wyJiZ3dC5oYXMoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSk7aWYoIShTdD09PW1wfHxtbi5jb252ZXJ0KFN0KT09PU9lLmdldFBhcmFtZXRlcigzNTczOCl8fFN0PT09Y20mJihvbi5pc1dlYkdMMnx8d3QuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHx3dC5oYXMoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKXx8RHQpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKTszNjA1Mz09PU9lLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApP0g+PTAmJkg8PUUud2lkdGgtSiYmWT49MCYmWTw9RS5oZWlnaHQtc2UmJk9lLnJlYWRQaXhlbHMoSCxZLEosc2UsbW4uY29udmVydChkdCksbW4uY29udmVydChTdCksemUpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2xldCBydD1udWxsIT09Uj9mdC5nZXQoUikuX193ZWJnbEZyYW1lYnVmZmVyOm51bGw7dmUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHJ0KX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbihFLEgsWT0wKXtpZighMCE9PUguaXNGcmFtZWJ1ZmZlclRleHR1cmUpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlKCkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIEZyYW1lYnVmZmVyVGV4dHVyZS4iKTtsZXQgSj1NYXRoLnBvdygyLC1ZKSxzZT1NYXRoLmZsb29yKEguaW1hZ2Uud2lkdGgqSiksemU9TWF0aC5mbG9vcihILmltYWdlLmhlaWdodCpKKTtvZS5zZXRUZXh0dXJlMkQoSCwwKSxPZS5jb3B5VGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLEUueCxFLnksc2UsemUpLHZlLnVuYmluZFRleHR1cmUoKX0sdGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZT1mdW5jdGlvbihFLEgsWSxKPTApe2xldCBzZT1ILmltYWdlLndpZHRoLHplPUguaW1hZ2UuaGVpZ2h0LGV0PW1uLmNvbnZlcnQoWS5mb3JtYXQpLHFlPW1uLmNvbnZlcnQoWS50eXBlKTtvZS5zZXRUZXh0dXJlMkQoWSwwKSxPZS5waXhlbFN0b3JlaSgzNzQ0MCxZLmZsaXBZKSxPZS5waXhlbFN0b3JlaSgzNzQ0MSxZLnByZW11bHRpcGx5QWxwaGEpLE9lLnBpeGVsU3RvcmVpKDMzMTcsWS51bnBhY2tBbGlnbm1lbnQpLEguaXNEYXRhVGV4dHVyZT9PZS50ZXhTdWJJbWFnZTJEKDM1NTMsSixFLngsRS55LHNlLHplLGV0LHFlLEguaW1hZ2UuZGF0YSk6SC5pc0NvbXByZXNzZWRUZXh0dXJlP09lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsSixFLngsRS55LEgubWlwbWFwc1swXS53aWR0aCxILm1pcG1hcHNbMF0uaGVpZ2h0LGV0LEgubWlwbWFwc1swXS5kYXRhKTpPZS50ZXhTdWJJbWFnZTJEKDM1NTMsSixFLngsRS55LGV0LHFlLEguaW1hZ2UpLDA9PT1KJiZZLmdlbmVyYXRlTWlwbWFwcyYmT2UuZ2VuZXJhdGVNaXBtYXAoMzU1MyksdmUudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oRSxILFksSixzZT0wKXtpZihiLmlzV2ViR0wxUmVuZGVyZXIpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7bGV0IFN0LHplPUUubWF4LngtRS5taW4ueCsxLGV0PUUubWF4LnktRS5taW4ueSsxLHFlPUUubWF4LnotRS5taW4ueisxLHJ0PW1uLmNvbnZlcnQoSi5mb3JtYXQpLGR0PW1uLmNvbnZlcnQoSi50eXBlKTtpZihKLmlzRGF0YVRleHR1cmUzRClvZS5zZXRUZXh0dXJlM0QoSiwwKSxTdD0zMjg3OTtlbHNle2lmKCFKLmlzRGF0YVRleHR1cmUyREFycmF5KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBvbmx5IHN1cHBvcnRzIFRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheS4iKTtvZS5zZXRUZXh0dXJlMkRBcnJheShKLDApLFN0PTM1ODY2fU9lLnBpeGVsU3RvcmVpKDM3NDQwLEouZmxpcFkpLE9lLnBpeGVsU3RvcmVpKDM3NDQxLEoucHJlbXVsdGlwbHlBbHBoYSksT2UucGl4ZWxTdG9yZWkoMzMxNyxKLnVucGFja0FsaWdubWVudCk7bGV0IER0PU9lLmdldFBhcmFtZXRlcigzMzE0KSxjbj1PZS5nZXRQYXJhbWV0ZXIoMzI4NzgpLEdpPU9lLmdldFBhcmFtZXRlcigzMzE2KSx2aT1PZS5nZXRQYXJhbWV0ZXIoMzMxNSkscG49T2UuZ2V0UGFyYW1ldGVyKDMyODc3KSxQbj1ZLmlzQ29tcHJlc3NlZFRleHR1cmU/WS5taXBtYXBzWzBdOlkuaW1hZ2U7T2UucGl4ZWxTdG9yZWkoMzMxNCxQbi53aWR0aCksT2UucGl4ZWxTdG9yZWkoMzI4NzgsUG4uaGVpZ2h0KSxPZS5waXhlbFN0b3JlaSgzMzE2LEUubWluLngpLE9lLnBpeGVsU3RvcmVpKDMzMTUsRS5taW4ueSksT2UucGl4ZWxTdG9yZWkoMzI4NzcsRS5taW4ueiksWS5pc0RhdGFUZXh0dXJlfHxZLmlzRGF0YVRleHR1cmUzRD9PZS50ZXhTdWJJbWFnZTNEKFN0LHNlLEgueCxILnksSC56LHplLGV0LHFlLHJ0LGR0LFBuLmRhdGEpOlkuaXNDb21wcmVzc2VkVGV4dHVyZT8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IHVudGVzdGVkIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgc3JjVGV4dHVyZS4iKSxPZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChTdCxzZSxILngsSC55LEgueix6ZSxldCxxZSxydCxQbi5kYXRhKSk6T2UudGV4U3ViSW1hZ2UzRChTdCxzZSxILngsSC55LEgueix6ZSxldCxxZSxydCxkdCxQbiksT2UucGl4ZWxTdG9yZWkoMzMxNCxEdCksT2UucGl4ZWxTdG9yZWkoMzI4NzgsY24pLE9lLnBpeGVsU3RvcmVpKDMzMTYsR2kpLE9lLnBpeGVsU3RvcmVpKDMzMTUsdmkpLE9lLnBpeGVsU3RvcmVpKDMyODc3LHBuKSwwPT09c2UmJkouZ2VuZXJhdGVNaXBtYXBzJiZPZS5nZW5lcmF0ZU1pcG1hcChTdCksdmUudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmluaXRUZXh0dXJlPWZ1bmN0aW9uKEUpe29lLnNldFRleHR1cmUyRChFLDApLHZlLnVuYmluZFRleHR1cmUoKX0sdGhpcy5yZXNldFN0YXRlPWZ1bmN0aW9uKCl7eT0wLHg9MCxSPW51bGwsdmUucmVzZXQoKSxsbi5yZXNldCgpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9amkucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJlcj0hMCxjbGFzcyBleHRlbmRzIGppe30ucHJvdG90eXBlLmlzV2ViR0wxUmVuZGVyZXI9ITA7dmFyIEF4PWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yNWUtNSl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGFuKHQpLHRoaXMuZGVuc2l0eT1lfWNsb25lKCl7cmV0dXJuIG5ldyBBeCh0aGlzLmNvbG9yLHRoaXMuZGVuc2l0eSl9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZ0V4cDIiLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksZGVuc2l0eTp0aGlzLmRlbnNpdHl9fX07QXgucHJvdG90eXBlLmlzRm9nRXhwMj0hMDt2YXIgUng9Y2xhc3N7Y29uc3RydWN0b3IodCxlPTEsaT0xZTMpe3RoaXMubmFtZT0iIix0aGlzLmNvbG9yPW5ldyBhbih0KSx0aGlzLm5lYXI9ZSx0aGlzLmZhcj1pfWNsb25lKCl7cmV0dXJuIG5ldyBSeCh0aGlzLmNvbG9yLHRoaXMubmVhcix0aGlzLmZhcil9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZyIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxuZWFyOnRoaXMubmVhcixmYXI6dGhpcy5mYXJ9fX07UngucHJvdG90eXBlLmlzRm9nPSEwO3ZhciBKMD1jbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNjZW5lIix0aGlzLmJhY2tncm91bmQ9bnVsbCx0aGlzLmVudmlyb25tZW50PW51bGwsdGhpcy5mb2c9bnVsbCx0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9bnVsbCx0aGlzLmF1dG9VcGRhdGU9ITAsdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXzwidSImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLG51bGwhPT10LmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQ9dC5iYWNrZ3JvdW5kLmNsb25lKCkpLG51bGwhPT10LmVudmlyb25tZW50JiYodGhpcy5lbnZpcm9ubWVudD10LmVudmlyb25tZW50LmNsb25lKCkpLG51bGwhPT10LmZvZyYmKHRoaXMuZm9nPXQuZm9nLmNsb25lKCkpLG51bGwhPT10Lm92ZXJyaWRlTWF0ZXJpYWwmJih0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9dC5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCkpLHRoaXMuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIG51bGwhPT10aGlzLmZvZyYmKGUub2JqZWN0LmZvZz10aGlzLmZvZy50b0pTT04oKSksZX19O0owLnByb3RvdHlwZS5pc1NjZW5lPSEwO3ZhciBobT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYXJyYXk9dCx0aGlzLnN0cmlkZT1lLHRoaXMuY291bnQ9dm9pZCAwIT09dD90Lmxlbmd0aC9lOjAsdGhpcy51c2FnZT1DeCx0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX0sdGhpcy52ZXJzaW9uPTAsdGhpcy51dWlkPUpsKCl9b25VcGxvYWRDYWxsYmFjaygpe31zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK31zZXRVc2FnZSh0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5zdHJpZGU9dC5zdHJpZGUsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLnN0cmlkZSxpKj1lLnN0cmlkZTtmb3IobGV0IHI9MCxvPXRoaXMuc3RyaWRlO3I8bztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Y2xvbmUodCl7dm9pZCAwPT09dC5hcnJheUJ1ZmZlcnMmJih0LmFycmF5QnVmZmVycz17fSksdm9pZCAwPT09dGhpcy5hcnJheS5idWZmZXIuX3V1aWQmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1KbCgpKSx2b2lkIDA9PT10LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0mJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09dGhpcy5hcnJheS5zbGljZSgwKS5idWZmZXIpO2xldCBlPW5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSksaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLHRoaXMuc3RyaWRlKTtyZXR1cm4gaS5zZXRVc2FnZSh0aGlzLnVzYWdlKSxpfW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfXRvSlNPTih0KXtyZXR1cm4gdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnMmJih0LmFycmF5QnVmZmVycz17fSksdm9pZCAwPT09dGhpcy5hcnJheS5idWZmZXIuX3V1aWQmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1KbCgpKSx2b2lkIDA9PT10LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0mJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXkuYnVmZmVyKSkpLHt1dWlkOnRoaXMudXVpZCxidWZmZXI6dGhpcy5hcnJheS5idWZmZXIuX3V1aWQsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsc3RyaWRlOnRoaXMuc3RyaWRlfX19O2htLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBacj1uZXcgJCxnbT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMub2Zmc2V0PWksdGhpcy5ub3JtYWxpemVkPSEwPT09cn1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fWdldCBhcnJheSgpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9c2V0IG5lZWRzVXBkYXRlKHQpe3RoaXMuZGF0YS5uZWVkc1VwZGF0ZT10fWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuZGF0YS5jb3VudDtlPGk7ZSsrKVpyLng9dGhpcy5nZXRYKGUpLFpyLnk9dGhpcy5nZXRZKGUpLFpyLno9dGhpcy5nZXRaKGUpLFpyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihlLFpyLngsWnIueSxaci56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylaci54PXRoaXMuZ2V0WChlKSxaci55PXRoaXMuZ2V0WShlKSxaci56PXRoaXMuZ2V0WihlKSxaci5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLFpyLngsWnIueSxaci56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspWnIueD10aGlzLmdldFgoZSksWnIueT10aGlzLmdldFkoZSksWnIuej10aGlzLmdldFooZSksWnIudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUsWnIueCxaci55LFpyLnopO3JldHVybiB0aGlzfXNldFgodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09ZSx0aGlzfXNldFkodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1lLHRoaXN9c2V0Wih0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdPWUsdGhpc31zZXRXKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109ZSx0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdfWdldFkodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19Z2V0Wih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXX1nZXRXKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdfXNldFhZKHQsZSxpKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXN9c2V0WFlaKHQsZSxpLHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzfXNldFhZWlcodCxlLGkscixvKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXMuZGF0YS5hcnJheVt0KzJdPXIsdGhpcy5kYXRhLmFycmF5W3QrM109byx0aGlzfWNsb25lKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5jbG9uZSgpOiBDbG9uaW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHRoaXMuY291bnQ7aSsrKXtsZXQgcj1pKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKyllLnB1c2godGhpcy5kYXRhLmFycmF5W3Irb10pfXJldHVybiBuZXcgUHIobmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IoZSksdGhpcy5pdGVtU2l6ZSx0aGlzLm5vcm1hbGl6ZWQpfXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLmNsb25lKHQpKSxuZXcgZ20odC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdLHRoaXMuaXRlbVNpemUsdGhpcy5vZmZzZXQsdGhpcy5ub3JtYWxpemVkKX10b0pTT04odCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnRvSlNPTigpOiBTZXJpYWxpemluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNvdW50O2krKyl7bGV0IHI9aSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgbz0wO288dGhpcy5pdGVtU2l6ZTtvKyspZS5wdXNoKHRoaXMuZGF0YS5hcnJheVtyK29dKX1yZXR1cm57aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTplLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX1yZXR1cm4gdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnMmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07Z20ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIFJJPWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07UkkucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIGswLGN4PW5ldyAkLEYwPW5ldyAkLE4wPW5ldyAkLEwwPW5ldyAkZSxkeD1uZXcgJGUsYXRlPW5ldyB4bixyST1uZXcgJCx1eD1uZXcgJCxvST1uZXcgJCxiZWU9bmV3ICRlLGozPW5ldyAkZSx2ZWU9bmV3ICRlO2Z1bmN0aW9uIHNJKG4sdCxlLGkscixvKXtMMC5zdWJWZWN0b3JzKG4sZSkuYWRkU2NhbGFyKC41KS5tdWx0aXBseShpKSx2b2lkIDAhPT1yPyhkeC54PW8qTDAueC1yKkwwLnksZHgueT1yKkwwLngrbypMMC55KTpkeC5jb3B5KEwwKSxuLmNvcHkodCksbi54Kz1keC54LG4ueSs9ZHgueSxuLmFwcGx5TWF0cml4NChhdGUpfShjbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLHZvaWQgMD09PWswKXtrMD1uZXcgVWk7bGV0IGU9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksaT1uZXcgaG0oZSw1KTtrMC5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxrMC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZ20oaSwzLDAsITEpKSxrMC5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZ20oaSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PWswLHRoaXMubWF0ZXJpYWw9dm9pZCAwIT09dD90Om5ldyBSSSx0aGlzLmNlbnRlcj1uZXcgJGUoLjUsLjUpfXJheWNhc3QodCxlKXtudWxsPT09dC5jYW1lcmEmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxGMC5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksYXRlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLE4wLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmITE9PT10aGlzLm1hdGVyaWFsLnNpemVBdHRlbnVhdGlvbiYmRjAubXVsdGlwbHlTY2FsYXIoLU4wLnopO2xldCByLG8saT10aGlzLm1hdGVyaWFsLnJvdGF0aW9uOzAhPT1pJiYobz1NYXRoLmNvcyhpKSxyPU1hdGguc2luKGkpKTtsZXQgcz10aGlzLmNlbnRlcjtzSShySS5zZXQoLS41LC0uNSwwKSxOMCxzLEYwLHIsbyksc0kodXguc2V0KC41LC0uNSwwKSxOMCxzLEYwLHIsbyksc0kob0kuc2V0KC41LC41LDApLE4wLHMsRjAscixvKSxiZWUuc2V0KDAsMCksajMuc2V0KDEsMCksdmVlLnNldCgxLDEpO2xldCBhPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKHJJLHV4LG9JLCExLGN4KTtpZihudWxsPT09YSYmKHNJKHV4LnNldCgtLjUsLjUsMCksTjAscyxGMCxyLG8pLGozLnNldCgwLDEpLGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUockksb0ksdXgsITEsY3gpLG51bGw9PT1hKSlyZXR1cm47bGV0IGw9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oY3gpO2w8dC5uZWFyfHxsPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmwscG9pbnQ6Y3guY2xvbmUoKSx1djpWci5nZXRVVihjeCxySSx1eCxvSSxiZWUsajMsdmVlLG5ldyAkZSksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx2b2lkIDAhPT10LmNlbnRlciYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fSkucHJvdG90eXBlLmlzU3ByaXRlPSEwO3ZhciB5ZWU9bmV3ICQseGVlPW5ldyBaaSxDZWU9bmV3IFppLGUyZT1uZXcgJCxNZWU9bmV3IHhuLFBJPWNsYXNzIGV4dGVuZHMgYW97Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IHhuLHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IHhufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxlKXt0aGlzLnNrZWxldG9uPXQsdm9pZCAwPT09ZSYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxlPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KGUpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShlKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgWmksZT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IGk9MCxyPWUuY291bnQ7aTxyO2krKyl7dC54PWUuZ2V0WChpKSx0Lnk9ZS5nZXRZKGkpLHQuej1lLmdldFooaSksdC53PWUuZ2V0VyhpKTtsZXQgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLGUuc2V0WFlaVyhpLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLCJhdHRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKToiZGV0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LGUpe2xldCBpPXRoaXMuc2tlbGV0b24scj10aGlzLmdlb21ldHJ5O3hlZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luSW5kZXgsdCksQ2VlLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsdCkseWVlLmNvcHkoZSkuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksZS5zZXQoMCwwLDApO2ZvcihsZXQgbz0wO288NDtvKyspe2xldCBzPUNlZS5nZXRDb21wb25lbnQobyk7aWYoMCE9PXMpe2xldCBhPXhlZS5nZXRDb21wb25lbnQobyk7TWVlLm11bHRpcGx5TWF0cmljZXMoaS5ib25lc1thXS5tYXRyaXhXb3JsZCxpLmJvbmVJbnZlcnNlc1thXSksZS5hZGRTY2FsZWRWZWN0b3IoZTJlLmNvcHkoeWVlKS5hcHBseU1hdHJpeDQoTWVlKSxzKX19cmV0dXJuIGUuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07UEkucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITAsY2xhc3MgZXh0ZW5kcyBCaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJCb25lIn19LnByb3RvdHlwZS5pc0JvbmU9ITAsY2xhc3MgZXh0ZW5kcyBsb3tjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyLG8scyxhLGwsYz1fbyxkPV9vLHUscCl7c3VwZXIobnVsbCxzLGEsbCxjLGQscixvLHUscCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9ZCx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgUHg9Y2xhc3MgZXh0ZW5kcyBQcntjb25zdHJ1Y3Rvcih0LGUsaSxyPTEpeyJudW1iZXIiPT10eXBlb2YgaSYmKHI9aSxpPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LGUsaSksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXJ9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07UHgucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciB3ZWU9bmV3IHhuLFNlZT1uZXcgeG4sYUk9W10scHg9bmV3IGFvOyhjbGFzcyBleHRlbmRzIGFve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IFB4KG5ldyBGbG9hdDMyQXJyYXkoMTYqaSksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9aSx0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksbnVsbCE9PXQuaW5zdGFuY2VDb2xvciYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwzKnQpfWdldE1hdHJpeEF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX1yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5tYXRyaXhXb3JsZCxyPXRoaXMuY291bnQ7aWYocHguZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSxweC5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLHZvaWQgMCE9PXB4Lm1hdGVyaWFsKWZvcihsZXQgbz0wO288cjtvKyspe3RoaXMuZ2V0TWF0cml4QXQobyx3ZWUpLFNlZS5tdWx0aXBseU1hdHJpY2VzKGksd2VlKSxweC5tYXRyaXhXb3JsZD1TZWUscHgucmF5Y2FzdCh0LGFJKTtmb3IobGV0IHM9MCxhPWFJLmxlbmd0aDtzPGE7cysrKXtsZXQgbD1hSVtzXTtsLmluc3RhbmNlSWQ9byxsLm9iamVjdD10aGlzLGUucHVzaChsKX1hSS5sZW5ndGg9MH19c2V0Q29sb3JBdCh0LGUpe251bGw9PT10aGlzLmluc3RhbmNlQ29sb3ImJih0aGlzLmluc3RhbmNlQ29sb3I9bmV3IFB4KG5ldyBGbG9hdDMyQXJyYXkoMyp0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KSwzKSksZS50b0FycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwzKnQpfXNldE1hdHJpeEF0KHQsZSl7ZS50b0FycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksMTYqdCl9dXBkYXRlTW9ycGhUYXJnZXRzKCl7fWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSkucHJvdG90eXBlLmlzSW5zdGFuY2VkTWVzaD0hMDt2YXIgV2Q9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLmxpbmV3aWR0aD0xLHRoaXMubGluZWNhcD0icm91bmQiLHRoaXMubGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLmxpbmV3aWR0aD10LmxpbmV3aWR0aCx0aGlzLmxpbmVjYXA9dC5saW5lY2FwLHRoaXMubGluZWpvaW49dC5saW5lam9pbix0aGlzfX07V2QucHJvdG90eXBlLmlzTGluZUJhc2ljTWF0ZXJpYWw9ITA7dmFyIEVlZT1uZXcgJCxUZWU9bmV3ICQsRGVlPW5ldyB4bixHMz1uZXcgdnAsbEk9bmV3IGJwLE94PWNsYXNzIGV4dGVuZHMgQml7Y29uc3RydWN0b3IodD1uZXcgVWksZT1uZXcgV2Qpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZihudWxsPT09dC5pbmRleCl7bGV0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLGk9WzBdO2ZvcihsZXQgcj0xLG89ZS5jb3VudDtyPG87cisrKUVlZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsci0xKSxUZWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIpLGlbcl09aVtyLTFdLGlbcl0rPUVlZS5kaXN0YW5jZVRvKFRlZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IE5yKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuTGluZS50aHJlc2hvbGQscz1pLmRyYXdSYW5nZTtpZihudWxsPT09aS5ib3VuZGluZ1NwaGVyZSYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxsSS5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLGxJLmFwcGx5TWF0cml4NChyKSxsSS5yYWRpdXMrPW8sITE9PT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKGxJKSlyZXR1cm47RGVlLmNvcHkocikuaW52ZXJ0KCksRzMuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KERlZSk7bGV0IGE9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPWEqYSxjPW5ldyAkLGQ9bmV3ICQsdT1uZXcgJCxwPW5ldyAkLGY9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgbT1pLmluZGV4LE09aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1tKWZvcihsZXQgUj1NYXRoLm1heCgwLHMuc3RhcnQpLEE9TWF0aC5taW4obS5jb3VudCxzLnN0YXJ0K3MuY291bnQpLTE7UjxBO1IrPWYpe2xldCBWPW0uZ2V0WChSKSx0ZT1tLmdldFgoUisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoTSxWKSxkLmZyb21CdWZmZXJBdHRyaWJ1dGUoTSx0ZSksRzMuZGlzdGFuY2VTcVRvU2VnbWVudChjLGQscCx1KT5sKWNvbnRpbnVlO3AuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCB4ZT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhwKTt4ZTx0Lm5lYXJ8fHhlPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOnhlLHBvaW50OnUuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6UixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX1lbHNlIGZvcihsZXQgUj1NYXRoLm1heCgwLHMuc3RhcnQpLEE9TWF0aC5taW4oTS5jb3VudCxzLnN0YXJ0K3MuY291bnQpLTE7UjxBO1IrPWYpe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShNLFIpLGQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShNLFIrMSksRzMuZGlzdGFuY2VTcVRvU2VnbWVudChjLGQscCx1KT5sKWNvbnRpbnVlO3AuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCB0ZT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhwKTt0ZTx0Lm5lYXJ8fHRlPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOnRlLHBvaW50OnUuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6UixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZih2b2lkIDAhPT1yKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspe2xldCBhPXJbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09b319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX07T3gucHJvdG90eXBlLmlzTGluZT0hMDt2YXIgSWVlPW5ldyAkLEFlZT1uZXcgJCxreD1jbGFzcyBleHRlbmRzIE94e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVTZWdtZW50cyJ9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZihudWxsPT09dC5pbmRleCl7bGV0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLGk9W107Zm9yKGxldCByPTAsbz1lLmNvdW50O3I8bztyKz0yKUllZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksQWVlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKzEpLGlbcl09MD09PXI/MDppW3ItMV0saVtyKzFdPWlbcl0rSWVlLmRpc3RhbmNlVG8oQWVlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgTnIoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fTtreC5wcm90b3R5cGUuaXNMaW5lU2VnbWVudHM9ITAsY2xhc3MgZXh0ZW5kcyBPeHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lTG9vcCJ9fS5wcm90b3R5cGUuaXNMaW5lTG9vcD0hMDt2YXIgT0k9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnNpemU9MSx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07T0kucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7dmFyIFJlZT1uZXcgeG4saEI9bmV3IHZwLGNJPW5ldyBicCxkST1uZXcgJDtmdW5jdGlvbiBQZWUobix0LGUsaSxyLG8scyl7bGV0IGE9aEIuZGlzdGFuY2VTcVRvUG9pbnQobik7aWYoYTxlKXtsZXQgbD1uZXcgJDtoQi5jbG9zZXN0UG9pbnRUb1BvaW50KG4sbCksbC5hcHBseU1hdHJpeDQoaSk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxyLm5lYXJ8fGM+ci5mYXIpcmV0dXJuO28ucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChhKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDpzfSl9fShjbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKHQ9bmV3IFVpLGU9bmV3IE9JKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxzPWkuZHJhd1JhbmdlO2lmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGNJLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksY0kuYXBwbHlNYXRyaXg0KHIpLGNJLnJhZGl1cys9bywhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoY0kpKXJldHVybjtSZWUuY29weShyKS5pbnZlcnQoKSxoQi5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoUmVlKTtsZXQgYT1vLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9YSphO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGM9aS5pbmRleCx1PWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09Yylmb3IobGV0IG09TWF0aC5tYXgoMCxzLnN0YXJ0KSxiPU1hdGgubWluKGMuY291bnQscy5zdGFydCtzLmNvdW50KTttPGI7bSsrKXtsZXQgTT1jLmdldFgobSk7ZEkuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1LE0pLFBlZShkSSxNLGwscix0LGUsdGhpcyl9ZWxzZSBmb3IobGV0IG09TWF0aC5tYXgoMCxzLnN0YXJ0KSxiPU1hdGgubWluKHUuY291bnQscy5zdGFydCtzLmNvdW50KTttPGI7bSsrKWRJLmZyb21CdWZmZXJBdHRyaWJ1dGUodSxtKSxQZWUoZEksbSxsLHIsdCxlLHRoaXMpfWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYodm9pZCAwIT09cil7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXtsZXQgYT1yW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPW99fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX0pLnByb3RvdHlwZS5pc1BvaW50cz0hMCxjbGFzcyBleHRlbmRzIGxve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjKXtzdXBlcih0LGUsaSxyLG8scyxhLGwsYyksdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09cz9zOiRvLHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PW8/bzokbyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgZD10aGlzOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhmdW5jdGlvbiB1KCl7ZC5uZWVkc1VwZGF0ZT0hMCx0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2sodSl9KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09MCYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fS5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBsb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OmV9KSx0aGlzLmZvcm1hdD1pLHRoaXMubWFnRmlsdGVyPV9vLHRoaXMubWluRmlsdGVyPV9vLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBsb3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyxkLHUscCl7c3VwZXIobnVsbCxzLGEsbCxjLGQscixvLHUscCksdGhpcy5pbWFnZT17d2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5taXBtYXBzPXQsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19LnByb3RvdHlwZS5pc0NvbXByZXNzZWRUZXh0dXJlPSEwLGNsYXNzIGV4dGVuZHMgbG97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3N1cGVyKHQsZSxpLHIsbyxzLGEsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX0ucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgJDA9Y2xhc3MgZXh0ZW5kcyBVaXtjb25zdHJ1Y3Rvcih0PTEsZT04LGk9MCxyPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDppLHRoZXRhTGVuZ3RoOnJ9LGU9TWF0aC5tYXgoMyxlKTtsZXQgbz1bXSxzPVtdLGE9W10sbD1bXSxjPW5ldyAkLGQ9bmV3ICRlO3MucHVzaCgwLDAsMCksYS5wdXNoKDAsMCwxKSxsLnB1c2goLjUsLjUpO2ZvcihsZXQgdT0wLHA9Mzt1PD1lO3UrKyxwKz0zKXtsZXQgZj1pK3UvZSpyO2MueD10Kk1hdGguY29zKGYpLGMueT10Kk1hdGguc2luKGYpLHMucHVzaChjLngsYy55LGMueiksYS5wdXNoKDAsMCwxKSxkLng9KHNbcF0vdCsxKS8yLGQueT0oc1twKzFdL3QrMSkvMixsLnB1c2goZC54LGQueSl9Zm9yKGxldCB1PTE7dTw9ZTt1Kyspby5wdXNoKHUsdSsxLDApO3RoaXMuc2V0SW5kZXgobyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTnIocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IE5yKGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IE5yKGwsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3ICQwKHQucmFkaXVzLHQuc2VnbWVudHMsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sJHM9KG5ldyAkLG5ldyAkLG5ldyAkLG5ldyBWcixjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChpLGUpfWdldFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiBlfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50QXQoaS90KSk7cmV0dXJuIGV9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgaSxlPVtdLHI9dGhpcy5nZXRQb2ludCgwKSxvPTA7ZS5wdXNoKDApO2ZvcihsZXQgcz0xO3M8PXQ7cysrKWk9dGhpcy5nZXRQb2ludChzL3QpLG8rPWkuZGlzdGFuY2VUbyhyKSxlLnB1c2gobykscj1pO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1lLGV9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxlKXtsZXQgcyxpPXRoaXMuZ2V0TGVuZ3RocygpLHI9MCxvPWkubGVuZ3RoO3M9ZXx8dCppW28tMV07bGV0IGMsYT0wLGw9by0xO2Zvcig7YTw9bDspaWYocj1NYXRoLmZsb29yKGErKGwtYSkvMiksYz1pW3JdLXMsYzwwKWE9cisxO2Vsc2V7aWYoIShjPjApKXtsPXI7YnJlYWt9bD1yLTF9aWYocj1sLGlbcl09PT1zKXJldHVybiByLyhvLTEpO2xldCBkPWlbcl07cmV0dXJuKHIrKHMtZCkvKGlbcisxXS1kKSkvKG8tMSl9Z2V0VGFuZ2VudCh0LGUpe2xldCByPXQtMWUtNCxvPXQrMWUtNDtyPDAmJihyPTApLG8+MSYmKG89MSk7bGV0IHM9dGhpcy5nZXRQb2ludChyKSxhPXRoaXMuZ2V0UG9pbnQobyksbD1lfHwocy5pc1ZlY3RvcjI/bmV3ICRlOm5ldyAkKTtyZXR1cm4gbC5jb3B5KGEpLnN1YihzKS5ub3JtYWxpemUoKSxsfWdldFRhbmdlbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChpLGUpfWNvbXB1dGVGcmVuZXRGcmFtZXModCxlKXtsZXQgaT1uZXcgJCxyPVtdLG89W10scz1bXSxhPW5ldyAkLGw9bmV3IHhuO2ZvcihsZXQgZj0wO2Y8PXQ7ZisrKXJbZl09dGhpcy5nZXRUYW5nZW50QXQoZi90LG5ldyAkKTtvWzBdPW5ldyAkLHNbMF09bmV3ICQ7bGV0IGM9TnVtYmVyLk1BWF9WQUxVRSxkPU1hdGguYWJzKHJbMF0ueCksdT1NYXRoLmFicyhyWzBdLnkpLHA9TWF0aC5hYnMoclswXS56KTtkPD1jJiYoYz1kLGkuc2V0KDEsMCwwKSksdTw9YyYmKGM9dSxpLnNldCgwLDEsMCkpLHA8PWMmJmkuc2V0KDAsMCwxKSxhLmNyb3NzVmVjdG9ycyhyWzBdLGkpLm5vcm1hbGl6ZSgpLG9bMF0uY3Jvc3NWZWN0b3JzKHJbMF0sYSksc1swXS5jcm9zc1ZlY3RvcnMoclswXSxvWzBdKTtmb3IobGV0IGY9MTtmPD10O2YrKyl7aWYob1tmXT1vW2YtMV0uY2xvbmUoKSxzW2ZdPXNbZi0xXS5jbG9uZSgpLGEuY3Jvc3NWZWN0b3JzKHJbZi0xXSxyW2ZdKSxhLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXthLm5vcm1hbGl6ZSgpO2xldCBtPU1hdGguYWNvcyhLcyhyW2YtMV0uZG90KHJbZl0pLC0xLDEpKTtvW2ZdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoYSxtKSl9c1tmXS5jcm9zc1ZlY3RvcnMocltmXSxvW2ZdKX1pZighMD09PWUpe2xldCBmPU1hdGguYWNvcyhLcyhvWzBdLmRvdChvW3RdKSwtMSwxKSk7Zi89dCxyWzBdLmRvdChhLmNyb3NzVmVjdG9ycyhvWzBdLG9bdF0pKT4wJiYoZj0tZik7Zm9yKGxldCBtPTE7bTw9dDttKyspb1ttXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHJbbV0sZiptKSksc1ttXS5jcm9zc1ZlY3RvcnMoclttXSxvW21dKX1yZXR1cm57dGFuZ2VudHM6cixub3JtYWxzOm8sYmlub3JtYWxzOnN9fWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH1mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319KSxlXz1jbGFzcyBleHRlbmRzICRze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0xLHI9MSxvPTAscz0yKk1hdGguUEksYT0hMSxsPTApe3N1cGVyKCksdGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiLHRoaXMuYVg9dCx0aGlzLmFZPWUsdGhpcy54UmFkaXVzPWksdGhpcy55UmFkaXVzPXIsdGhpcy5hU3RhcnRBbmdsZT1vLHRoaXMuYUVuZEFuZ2xlPXMsdGhpcy5hQ2xvY2t3aXNlPWEsdGhpcy5hUm90YXRpb249bH1nZXRQb2ludCh0LGUpe2xldCBpPWV8fG5ldyAkZSxyPTIqTWF0aC5QSSxvPXRoaXMuYUVuZEFuZ2xlLXRoaXMuYVN0YXJ0QW5nbGUscz1NYXRoLmFicyhvKTxOdW1iZXIuRVBTSUxPTjtmb3IoO288MDspbys9cjtmb3IoO28+cjspby09cjtvPE51bWJlci5FUFNJTE9OJiYobz1zPzA6ciksITA9PT10aGlzLmFDbG9ja3dpc2UmJiFzJiYobz09PXI/bz0tcjpvLT1yKTtsZXQgYT10aGlzLmFTdGFydEFuZ2xlK3QqbyxsPXRoaXMuYVgrdGhpcy54UmFkaXVzKk1hdGguY29zKGEpLGM9dGhpcy5hWSt0aGlzLnlSYWRpdXMqTWF0aC5zaW4oYSk7aWYoMCE9PXRoaXMuYVJvdGF0aW9uKXtsZXQgZD1NYXRoLmNvcyh0aGlzLmFSb3RhdGlvbiksdT1NYXRoLnNpbih0aGlzLmFSb3RhdGlvbikscD1sLXRoaXMuYVgsZj1jLXRoaXMuYVk7bD1wKmQtZip1K3RoaXMuYVgsYz1wKnUrZipkK3RoaXMuYVl9cmV0dXJuIGkuc2V0KGwsYyl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmFYPXQuYVgsdGhpcy5hWT10LmFZLHRoaXMueFJhZGl1cz10LnhSYWRpdXMsdGhpcy55UmFkaXVzPXQueVJhZGl1cyx0aGlzLmFTdGFydEFuZ2xlPXQuYVN0YXJ0QW5nbGUsdGhpcy5hRW5kQW5nbGU9dC5hRW5kQW5nbGUsdGhpcy5hQ2xvY2t3aXNlPXQuYUNsb2Nrd2lzZSx0aGlzLmFSb3RhdGlvbj10LmFSb3RhdGlvbix0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmFYPXRoaXMuYVgsdC5hWT10aGlzLmFZLHQueFJhZGl1cz10aGlzLnhSYWRpdXMsdC55UmFkaXVzPXRoaXMueVJhZGl1cyx0LmFTdGFydEFuZ2xlPXRoaXMuYVN0YXJ0QW5nbGUsdC5hRW5kQW5nbGU9dGhpcy5hRW5kQW5nbGUsdC5hQ2xvY2t3aXNlPXRoaXMuYUNsb2Nrd2lzZSx0LmFSb3RhdGlvbj10aGlzLmFSb3RhdGlvbix0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLmFYPXQuYVgsdGhpcy5hWT10LmFZLHRoaXMueFJhZGl1cz10LnhSYWRpdXMsdGhpcy55UmFkaXVzPXQueVJhZGl1cyx0aGlzLmFTdGFydEFuZ2xlPXQuYVN0YXJ0QW5nbGUsdGhpcy5hRW5kQW5nbGU9dC5hRW5kQW5nbGUsdGhpcy5hQ2xvY2t3aXNlPXQuYUNsb2Nrd2lzZSx0aGlzLmFSb3RhdGlvbj10LmFSb3RhdGlvbix0aGlzfX07ZV8ucHJvdG90eXBlLmlzRWxsaXBzZUN1cnZlPSEwO3ZhciBrST1jbGFzcyBleHRlbmRzIGVfe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzKXtzdXBlcih0LGUsaSxpLHIsbyxzKSx0aGlzLnR5cGU9IkFyY0N1cnZlIn19O2Z1bmN0aW9uIG1WKCl7bGV0IG49MCx0PTAsZT0wLGk9MDtmdW5jdGlvbiByKG8scyxhLGwpe249byx0PWEsZT0tMypvKzMqcy0yKmEtbCxpPTIqby0yKnMrYStsfXJldHVybntpbml0Q2F0bXVsbFJvbTpmdW5jdGlvbihvLHMsYSxsLGMpe3IocyxhLGMqKGEtbyksYyoobC1zKSl9LGluaXROb251bmlmb3JtQ2F0bXVsbFJvbTpmdW5jdGlvbihvLHMsYSxsLGMsZCx1KXtsZXQgcD0ocy1vKS9jLShhLW8pLyhjK2QpKyhhLXMpL2QsZj0oYS1zKS9kLShsLXMpLyhkK3UpKyhsLWEpL3U7cCo9ZCxmKj1kLHIocyxhLHAsZil9LGNhbGM6ZnVuY3Rpb24obyl7bGV0IHM9bypvO3JldHVybiBuK3QqbytlKnMraSoocypvKX19fWtJLnByb3RvdHlwZS5pc0FyY0N1cnZlPSEwO3ZhciB1ST1uZXcgJCxXMz1uZXcgbVYscTM9bmV3IG1WLFkzPW5ldyBtVixGST1jbGFzcyBleHRlbmRzICRze2NvbnN0cnVjdG9yKHQ9W10sZT0hMSxpPSJjZW50cmlwZXRhbCIscj0uNSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhdG11bGxSb21DdXJ2ZTMiLHRoaXMucG9pbnRzPXQsdGhpcy5jbG9zZWQ9ZSx0aGlzLmN1cnZlVHlwZT1pLHRoaXMudGVuc2lvbj1yfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGMsZCxpPWUscj10aGlzLnBvaW50cyxvPXIubGVuZ3RoLHM9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQsYT1NYXRoLmZsb29yKHMpLGw9cy1hO3RoaXMuY2xvc2VkP2ErPWE+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGEpL28pKzEpKm86MD09PWwmJmE9PT1vLTEmJihhPW8tMixsPTEpLHRoaXMuY2xvc2VkfHxhPjA/Yz1yWyhhLTEpJW9dOih1SS5zdWJWZWN0b3JzKHJbMF0sclsxXSkuYWRkKHJbMF0pLGM9dUkpO2xldCB1PXJbYSVvXSxwPXJbKGErMSklb107aWYodGhpcy5jbG9zZWR8fGErMjxvP2Q9clsoYSsyKSVvXToodUkuc3ViVmVjdG9ycyhyW28tMV0scltvLTJdKS5hZGQocltvLTFdKSxkPXVJKSwiY2VudHJpcGV0YWwiPT09dGhpcy5jdXJ2ZVR5cGV8fCJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlKXtsZXQgZj0iY2hvcmRhbCI9PT10aGlzLmN1cnZlVHlwZT8uNTouMjUsbT1NYXRoLnBvdyhjLmRpc3RhbmNlVG9TcXVhcmVkKHUpLGYpLGI9TWF0aC5wb3codS5kaXN0YW5jZVRvU3F1YXJlZChwKSxmKSxNPU1hdGgucG93KHAuZGlzdGFuY2VUb1NxdWFyZWQoZCksZik7YjwxZS00JiYoYj0xKSxtPDFlLTQmJihtPWIpLE08MWUtNCYmKE09YiksVzMuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCx1LngscC54LGQueCxtLGIsTSkscTMuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueSx1LnkscC55LGQueSxtLGIsTSksWTMuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueix1LnoscC56LGQueixtLGIsTSl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMuY3VydmVUeXBlJiYoVzMuaW5pdENhdG11bGxSb20oYy54LHUueCxwLngsZC54LHRoaXMudGVuc2lvbikscTMuaW5pdENhdG11bGxSb20oYy55LHUueSxwLnksZC55LHRoaXMudGVuc2lvbiksWTMuaW5pdENhdG11bGxSb20oYy56LHUueixwLnosZC56LHRoaXMudGVuc2lvbikpO3JldHVybiBpLnNldChXMy5jYWxjKGwpLHEzLmNhbGMobCksWTMuY2FsYyhsKSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0aGlzLnBvaW50cy5wdXNoKHQucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0LnBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2VdLnRvQXJyYXkoKSk7cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgJCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07ZnVuY3Rpb24gT2VlKG4sdCxlLGkscil7bGV0IG89LjUqKGktdCkscz0uNSooci1lKSxhPW4qbjtyZXR1cm4oMiplLTIqaStvK3MpKihuKmEpKygtMyplKzMqaS0yKm8tcykqYStvKm4rZX1mdW5jdGlvbiBieChuLHQsZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIGUqZSp0fShuLHQpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIDIqKDEtbikqbip0fShuLGUpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIG4qbip0fShuLGkpfWZ1bmN0aW9uIHZ4KG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqZSp0fShuLHQpK2Z1bmN0aW9uKG4sdCl7bGV0IGU9MS1uO3JldHVybiAzKmUqZSpuKnR9KG4sZSkrZnVuY3Rpb24obix0KXtyZXR1cm4gMyooMS1uKSpuKm4qdH0obixpKStmdW5jdGlvbihuLHQpe3JldHVybiBuKm4qbip0fShuLHIpfUZJLnByb3RvdHlwZS5pc0NhdG11bGxSb21DdXJ2ZTM9ITA7dmFyIEZ4PWNsYXNzIGV4dGVuZHMgJHN7Y29uc3RydWN0b3IodD1uZXcgJGUsZT1uZXcgJGUsaT1uZXcgJGUscj1uZXcgJGUpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aSx0aGlzLnYzPXJ9Z2V0UG9pbnQodCxlPW5ldyAkZSl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLHM9dGhpcy52MixhPXRoaXMudjM7cmV0dXJuIGkuc2V0KHZ4KHQsci54LG8ueCxzLngsYS54KSx2eCh0LHIueSxvLnkscy55LGEueSkpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07RngucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgTkk9Y2xhc3MgZXh0ZW5kcyAkc3tjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQsaT1uZXcgJCxyPW5ldyAkKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3ICQpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldCh2eCh0LHIueCxvLngscy54LGEueCksdngodCxyLnksby55LHMueSxhLnkpLHZ4KHQsci56LG8ueixzLnosYS56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTtOSS5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgdF89Y2xhc3MgZXh0ZW5kcyAkc3tjb25zdHJ1Y3Rvcih0PW5ldyAkZSxlPW5ldyAkZSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9ZX1nZXRQb2ludCh0LGU9bmV3ICRlKXtsZXQgaT1lO3JldHVybiAxPT09dD9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Z2V0VGFuZ2VudCh0LGUpe2xldCBpPWV8fG5ldyAkZTtyZXR1cm4gaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3RfLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgTng9Y2xhc3MgZXh0ZW5kcyAkc3tjb25zdHJ1Y3Rvcih0PW5ldyAkZSxlPW5ldyAkZSxpPW5ldyAkZSl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3ICRlKXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEscz10aGlzLnYyO3JldHVybiBpLnNldChieCh0LHIueCxvLngscy54KSxieCh0LHIueSxvLnkscy55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTtOeC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDt2YXIgTEk9Y2xhc3MgZXh0ZW5kcyAkc3tjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQsaT1uZXcgJCl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyAkKXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEscz10aGlzLnYyO3JldHVybiBpLnNldChieCh0LHIueCxvLngscy54KSxieCh0LHIueSxvLnkscy55KSxieCh0LHIueixvLnoscy56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTtMSS5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTM9ITA7dmFyIEx4PWNsYXNzIGV4dGVuZHMgJHN7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwbGluZUN1cnZlIix0aGlzLnBvaW50cz10fWdldFBvaW50KHQsZT1uZXcgJGUpe2xldCBpPWUscj10aGlzLnBvaW50cyxvPShyLmxlbmd0aC0xKSp0LHM9TWF0aC5mbG9vcihvKSxhPW8tcyxsPXJbMD09PXM/czpzLTFdLGM9cltzXSxkPXJbcz5yLmxlbmd0aC0yP3IubGVuZ3RoLTE6cysxXSx1PXJbcz5yLmxlbmd0aC0zP3IubGVuZ3RoLTE6cysyXTtyZXR1cm4gaS5zZXQoT2VlKGEsbC54LGMueCxkLngsdS54KSxPZWUoYSxsLnksYy55LGQueSx1LnkpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0LnBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2VdLnRvQXJyYXkoKSk7cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3ICRlKS5mcm9tQXJyYXkocikpfXJldHVybiB0aGlzfX07THgucHJvdG90eXBlLmlzU3BsaW5lQ3VydmU9ITA7dmFyIGx0ZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBcmNDdXJ2ZTprSSxDYXRtdWxsUm9tQ3VydmUzOkZJLEN1YmljQmV6aWVyQ3VydmU6RngsQ3ViaWNCZXppZXJDdXJ2ZTM6TkksRWxsaXBzZUN1cnZlOmVfLExpbmVDdXJ2ZTp0XyxMaW5lQ3VydmUzOmNsYXNzIGV4dGVuZHMgJHN7Y29uc3RydWN0b3IodD1uZXcgJCxlPW5ldyAkKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlMyIsdGhpcy5pc0xpbmVDdXJ2ZTM9ITAsdGhpcy52MT10LHRoaXMudjI9ZX1nZXRQb2ludCh0LGU9bmV3ICQpe2xldCBpPWU7cmV0dXJuIDE9PT10P2kuY29weSh0aGlzLnYyKTooaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksaX1nZXRQb2ludEF0KHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTpOeCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6TEksU3BsaW5lQ3VydmU6THh9KSxDQj1jbGFzcyBleHRlbmRzICRze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3IHRfKGUsdCkpfWdldFBvaW50KHQsZSl7bGV0IGk9dCp0aGlzLmdldExlbmd0aCgpLHI9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxvPTA7Zm9yKDtvPHIubGVuZ3RoOyl7aWYocltvXT49aSl7bGV0IHM9cltvXS1pLGE9dGhpcy5jdXJ2ZXNbb10sbD1hLmdldExlbmd0aCgpO3JldHVybiBhLmdldFBvaW50QXQoMD09PWw/MDoxLXMvbCxlKX1vKyt9cmV0dXJuIG51bGx9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmNhY2hlTGVuZ3Rocz1udWxsLHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCl9Z2V0Q3VydmVMZW5ndGhzKCl7aWYodGhpcy5jYWNoZUxlbmd0aHMmJnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7bGV0IHQ9W10sZT0wO2ZvcihsZXQgaT0wLHI9dGhpcy5jdXJ2ZXMubGVuZ3RoO2k8cjtpKyspZSs9dGhpcy5jdXJ2ZXNbaV0uZ2V0TGVuZ3RoKCksdC5wdXNoKGUpO3JldHVybiB0aGlzLmNhY2hlTGVuZ3Rocz10LHR9Z2V0U3BhY2VkUG9pbnRzKHQ9NDApe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5wdXNoKGVbMF0pLGV9Z2V0UG9pbnRzKHQ9MTIpe2xldCBpLGU9W107Zm9yKGxldCByPTAsbz10aGlzLmN1cnZlcztyPG8ubGVuZ3RoO3IrKyl7bGV0IHM9b1tyXSxsPXMuZ2V0UG9pbnRzKHMmJnMuaXNFbGxpcHNlQ3VydmU/Mip0OnMmJihzLmlzTGluZUN1cnZlfHxzLmlzTGluZUN1cnZlMyk/MTpzJiZzLmlzU3BsaW5lQ3VydmU/dCpzLnBvaW50cy5sZW5ndGg6dCk7Zm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspe2xldCBkPWxbY107aSYmaS5lcXVhbHMoZCl8fChlLnB1c2goZCksaT1kKX19cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZlLmxlbmd0aD4xJiYhZVtlLmxlbmd0aC0xXS5lcXVhbHMoZVswXSkmJmUucHVzaChlWzBdKSxlfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXQuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXRoaXMuY3VydmVzLnB1c2godC5jdXJ2ZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5hdXRvQ2xvc2U9dGhpcy5hdXRvQ2xvc2UsdC5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10aGlzLmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl0LmN1cnZlcy5wdXNoKHRoaXMuY3VydmVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXQuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LmN1cnZlc1tlXTt0aGlzLmN1cnZlcy5wdXNoKChuZXcgbHRlW3IudHlwZV0pLmZyb21KU09OKHIpKX1yZXR1cm4gdGhpc319LEJ4PWNsYXNzIGV4dGVuZHMgQ0J7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBhdGgiLHRoaXMuY3VycmVudFBvaW50PW5ldyAkZSx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IGU9MSxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5saW5lVG8odFtlXS54LHRbZV0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9bGluZVRvKHQsZSl7bGV0IGk9bmV3IHRfKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3ICRlKHQsZSkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKGkpLHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9cXVhZHJhdGljQ3VydmVUbyh0LGUsaSxyKXtsZXQgbz1uZXcgTngodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgJGUodCxlKSxuZXcgJGUoaSxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KGksciksdGhpc31iZXppZXJDdXJ2ZVRvKHQsZSxpLHIsbyxzKXtsZXQgYT1uZXcgRngodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgJGUodCxlKSxuZXcgJGUoaSxyKSxuZXcgJGUobyxzKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goYSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KG8scyksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCBlPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksaT1uZXcgTHgoZSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LGUsaSxyLG8scyl7cmV0dXJuIHRoaXMuYWJzYXJjKHQrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksaSxyLG8scyksdGhpc31hYnNhcmModCxlLGkscixvLHMpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxlLGksaSxyLG8scyksdGhpc31lbGxpcHNlKHQsZSxpLHIsbyxzLGEsbCl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K3RoaXMuY3VycmVudFBvaW50LngsZSt0aGlzLmN1cnJlbnRQb2ludC55LGkscixvLHMsYSxsKSx0aGlzfWFic2VsbGlwc2UodCxlLGkscixvLHMsYSxsKXtsZXQgYz1uZXcgZV8odCxlLGkscixvLHMsYSxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IHU9Yy5nZXRQb2ludCgwKTt1LmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKHUueCx1LnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IGQ9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weShkKSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LHFkPWNsYXNzIGV4dGVuZHMgQnh7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPUpsKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPXRoaXMuaG9sZXMubGVuZ3RoO2k8cjtpKyspZVtpXT10aGlzLmhvbGVzW2ldLmdldFBvaW50cyh0KTtyZXR1cm4gZX1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspdGhpcy5ob2xlcy5wdXNoKHQuaG9sZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl0LmhvbGVzLnB1c2godGhpcy5ob2xlc1tlXS50b0pTT04oKSk7cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2goKG5ldyBCeCkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX07ZnVuY3Rpb24gY3RlKG4sdCxlLGkscil7bGV0IG8scztpZihyPT09ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9MDtmb3IobGV0IG89dCxzPWUtaTtvPGU7bys9aSlyKz0obltzXS1uW29dKSoobltvKzFdK25bcysxXSkscz1vO3JldHVybiByfShuLHQsZSxpKT4wKWZvcihvPXQ7bzxlO28rPWkpcz1rZWUobyxuW29dLG5bbysxXSxzKTtlbHNlIGZvcihvPWUtaTtvPj10O28tPWkpcz1rZWUobyxuW29dLG5bbysxXSxzKTtyZXR1cm4gcyYmS0kocyxzLm5leHQpJiYoengocykscz1zLm5leHQpLHN9ZnVuY3Rpb24geHAobix0KXtpZighbilyZXR1cm4gbjt0fHwodD1uKTtsZXQgaSxlPW47ZG97aWYoaT0hMSxlLnN0ZWluZXJ8fCFLSShlLGUubmV4dCkmJjAhPT1GcihlLnByZXYsZSxlLm5leHQpKWU9ZS5uZXh0O2Vsc2V7aWYoengoZSksZT10PWUucHJldixlPT09ZS5uZXh0KWJyZWFrO2k9ITB9fXdoaWxlKGl8fGUhPT10KTtyZXR1cm4gdH1mdW5jdGlvbiBWeChuLHQsZSxpLHIsbyxzKXtpZighbilyZXR1cm47IXMmJm8mJmZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW47ZG97bnVsbD09PXIueiYmKHIuej1NQihyLngsci55LHQsZSxpKSksci5wcmV2Wj1yLnByZXYsci5uZXh0Wj1yLm5leHQscj1yLm5leHR9d2hpbGUociE9PW4pO3IucHJldloubmV4dFo9bnVsbCxyLnByZXZaPW51bGwsZnVuY3Rpb24obil7bGV0IHQsZSxpLHIsbyxzLGEsbCxjPTE7ZG97Zm9yKGU9bixuPW51bGwsbz1udWxsLHM9MDtlOyl7Zm9yKHMrKyxpPWUsYT0wLHQ9MDt0PGMmJihhKyssaT1pLm5leHRaLGkpO3QrKyk7Zm9yKGw9YzthPjB8fGw+MCYmaTspMCE9PWEmJigwPT09bHx8IWl8fGUuejw9aS56KT8ocj1lLGU9ZS5uZXh0WixhLS0pOihyPWksaT1pLm5leHRaLGwtLSksbz9vLm5leHRaPXI6bj1yLHIucHJldlo9byxvPXI7ZT1pfW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKHM+MSl9KHIpfShuLGkscixvKTtsZXQgbCxjLGE9bjtmb3IoO24ucHJldiE9PW4ubmV4dDspaWYobD1uLnByZXYsYz1uLm5leHQsbz9kMmUobixpLHIsbyk6YzJlKG4pKXQucHVzaChsLmkvZSksdC5wdXNoKG4uaS9lKSx0LnB1c2goYy5pL2UpLHp4KG4pLG49Yy5uZXh0LGE9Yy5uZXh0O2Vsc2UgaWYoKG49Yyk9PT1hKXtzPzE9PT1zP1Z4KG49dTJlKHhwKG4pLHQsZSksdCxlLGkscixvLDIpOjI9PT1zJiZwMmUobix0LGUsaSxyLG8pOlZ4KHhwKG4pLHQsZSxpLHIsbywxKTticmVha319ZnVuY3Rpb24gYzJlKG4pe2xldCB0PW4ucHJldixlPW4saT1uLm5leHQ7aWYoRnIodCxlLGkpPj0wKXJldHVybiExO2xldCByPW4ubmV4dC5uZXh0O2Zvcig7ciE9PW4ucHJldjspe2lmKHowKHQueCx0LnksZS54LGUueSxpLngsaS55LHIueCxyLnkpJiZGcihyLnByZXYscixyLm5leHQpPj0wKXJldHVybiExO3I9ci5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIGQyZShuLHQsZSxpKXtsZXQgcj1uLnByZXYsbz1uLHM9bi5uZXh0O2lmKEZyKHIsbyxzKT49MClyZXR1cm4hMTtsZXQgYz1yLng+by54P3IueD5zLng/ci54OnMueDpvLng+cy54P28ueDpzLngsZD1yLnk+by55P3IueT5zLnk/ci55OnMueTpvLnk+cy55P28ueTpzLnksdT1NQihyLng8by54P3IueDxzLng/ci54OnMueDpvLng8cy54P28ueDpzLngsci55PG8ueT9yLnk8cy55P3IueTpzLnk6by55PHMueT9vLnk6cy55LHQsZSxpKSxwPU1CKGMsZCx0LGUsaSksZj1uLnByZXZaLG09bi5uZXh0Wjtmb3IoO2YmJmYuej49dSYmbSYmbS56PD1wOyl7aWYoZiE9PW4ucHJldiYmZiE9PW4ubmV4dCYmejAoci54LHIueSxvLngsby55LHMueCxzLnksZi54LGYueSkmJkZyKGYucHJldixmLGYubmV4dCk+PTB8fChmPWYucHJldlosbSE9PW4ucHJldiYmbSE9PW4ubmV4dCYmejAoci54LHIueSxvLngsby55LHMueCxzLnksbS54LG0ueSkmJkZyKG0ucHJldixtLG0ubmV4dCk+PTApKXJldHVybiExO209bS5uZXh0Wn1mb3IoO2YmJmYuej49dTspe2lmKGYhPT1uLnByZXYmJmYhPT1uLm5leHQmJnowKHIueCxyLnksby54LG8ueSxzLngscy55LGYueCxmLnkpJiZGcihmLnByZXYsZixmLm5leHQpPj0wKXJldHVybiExO2Y9Zi5wcmV2Wn1mb3IoO20mJm0uejw9cDspe2lmKG0hPT1uLnByZXYmJm0hPT1uLm5leHQmJnowKHIueCxyLnksby54LG8ueSxzLngscy55LG0ueCxtLnkpJiZGcihtLnByZXYsbSxtLm5leHQpPj0wKXJldHVybiExO209bS5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiB1MmUobix0LGUpe2xldCBpPW47ZG97bGV0IHI9aS5wcmV2LG89aS5uZXh0Lm5leHQ7IUtJKHIsbykmJmR0ZShyLGksaS5uZXh0LG8pJiZIeChyLG8pJiZIeChvLHIpJiYodC5wdXNoKHIuaS9lKSx0LnB1c2goaS5pL2UpLHQucHVzaChvLmkvZSksengoaSksengoaS5uZXh0KSxpPW49byksaT1pLm5leHR9d2hpbGUoaSE9PW4pO3JldHVybiB4cChpKX1mdW5jdGlvbiBwMmUobix0LGUsaSxyLG8pe2xldCBzPW47ZG97bGV0IGE9cy5uZXh0Lm5leHQ7Zm9yKDthIT09cy5wcmV2Oyl7aWYocy5pIT09YS5pJiZ4MmUocyxhKSl7bGV0IGw9dXRlKHMsYSk7cmV0dXJuIHM9eHAocyxzLm5leHQpLGw9eHAobCxsLm5leHQpLFZ4KHMsdCxlLGkscixvKSx2b2lkIFZ4KGwsdCxlLGkscixvKX1hPWEubmV4dH1zPXMubmV4dH13aGlsZShzIT09bil9ZnVuY3Rpb24gbTJlKG4sdCl7cmV0dXJuIG4ueC10Lnh9ZnVuY3Rpb24gaDJlKG4sdCl7aWYodD1mdW5jdGlvbihuLHQpe2xldCBzLGU9dCxpPW4ueCxyPW4ueSxvPS0xLzA7ZG97aWYocjw9ZS55JiZyPj1lLm5leHQueSYmZS5uZXh0LnkhPT1lLnkpe2xldCBwPWUueCsoci1lLnkpKihlLm5leHQueC1lLngpLyhlLm5leHQueS1lLnkpO2lmKHA8PWkmJnA+byl7aWYobz1wLHA9PT1pKXtpZihyPT09ZS55KXJldHVybiBlO2lmKHI9PT1lLm5leHQueSlyZXR1cm4gZS5uZXh0fXM9ZS54PGUubmV4dC54P2U6ZS5uZXh0fX1lPWUubmV4dH13aGlsZShlIT09dCk7aWYoIXMpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHM7bGV0IHUsYT1zLGw9cy54LGM9cy55LGQ9MS8wO2U9cztkb3tpPj1lLngmJmUueD49bCYmaSE9PWUueCYmejAocjxjP2k6byxyLGwsYyxyPGM/bzppLHIsZS54LGUueSkmJih1PU1hdGguYWJzKHItZS55KS8oaS1lLngpLEh4KGUsbikmJih1PGR8fHU9PT1kJiYoZS54PnMueHx8ZS54PT09cy54JiZfMmUocyxlKSkpJiYocz1lLGQ9dSkpLGU9ZS5uZXh0fXdoaWxlKGUhPT1hKTtyZXR1cm4gc30obix0KSx0KXtsZXQgZT11dGUodCxuKTt4cCh0LHQubmV4dCkseHAoZSxlLm5leHQpfX1mdW5jdGlvbiBfMmUobix0KXtyZXR1cm4gRnIobi5wcmV2LG4sdC5wcmV2KTwwJiZGcih0Lm5leHQsbixuLm5leHQpPDB9ZnVuY3Rpb24gTUIobix0LGUsaSxyKXtyZXR1cm4obj0xNDMxNjU1NzY1Jigobj04NTg5OTM0NTkmKChuPTI1MjY0NTEzNSYoKG49MTY3MTE5MzUmKChuPTMyNzY3KihuLWUpKnIpfG48PDgpKXxuPDw0KSl8bjw8MikpfG48PDEpKXwodD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LWkpKnIpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKTw8MX1mdW5jdGlvbiB5MmUobil7bGV0IHQ9bixlPW47ZG97KHQueDxlLnh8fHQueD09PWUueCYmdC55PGUueSkmJihlPXQpLHQ9dC5uZXh0fXdoaWxlKHQhPT1uKTtyZXR1cm4gZX1mdW5jdGlvbiB6MChuLHQsZSxpLHIsbyxzLGEpe3JldHVybihyLXMpKih0LWEpLShuLXMpKihvLWEpPj0wJiYobi1zKSooaS1hKS0oZS1zKSoodC1hKT49MCYmKGUtcykqKG8tYSktKHItcykqKGktYSk+PTB9ZnVuY3Rpb24geDJlKG4sdCl7cmV0dXJuIG4ubmV4dC5pIT09dC5pJiZuLnByZXYuaSE9PXQuaSYmIWZ1bmN0aW9uKG4sdCl7bGV0IGU9bjtkb3tpZihlLmkhPT1uLmkmJmUubmV4dC5pIT09bi5pJiZlLmkhPT10LmkmJmUubmV4dC5pIT09dC5pJiZkdGUoZSxlLm5leHQsbix0KSlyZXR1cm4hMDtlPWUubmV4dH13aGlsZShlIT09bik7cmV0dXJuITF9KG4sdCkmJihIeChuLHQpJiZIeCh0LG4pJiZmdW5jdGlvbihuLHQpe2xldCBlPW4saT0hMSxyPShuLngrdC54KS8yLG89KG4ueSt0LnkpLzI7ZG97ZS55Pm8hPWUubmV4dC55Pm8mJmUubmV4dC55IT09ZS55JiZyPChlLm5leHQueC1lLngpKihvLWUueSkvKGUubmV4dC55LWUueSkrZS54JiYoaT0haSksZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiBpfShuLHQpJiYoRnIobi5wcmV2LG4sdC5wcmV2KXx8RnIobix0LnByZXYsdCkpfHxLSShuLHQpJiZGcihuLnByZXYsbixuLm5leHQpPjAmJkZyKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gRnIobix0LGUpe3JldHVybih0Lnktbi55KSooZS54LXQueCktKHQueC1uLngpKihlLnktdC55KX1mdW5jdGlvbiBLSShuLHQpe3JldHVybiBuLng9PT10LngmJm4ueT09PXQueX1mdW5jdGlvbiBkdGUobix0LGUsaSl7bGV0IHI9ZkkoRnIobix0LGUpKSxvPWZJKEZyKG4sdCxpKSkscz1mSShGcihlLGksbikpLGE9ZkkoRnIoZSxpLHQpKTtyZXR1cm4hIShyIT09byYmcyE9PWF8fDA9PT1yJiZwSShuLGUsdCl8fDA9PT1vJiZwSShuLGksdCl8fDA9PT1zJiZwSShlLG4saSl8fDA9PT1hJiZwSShlLHQsaSkpfWZ1bmN0aW9uIHBJKG4sdCxlKXtyZXR1cm4gdC54PD1NYXRoLm1heChuLngsZS54KSYmdC54Pj1NYXRoLm1pbihuLngsZS54KSYmdC55PD1NYXRoLm1heChuLnksZS55KSYmdC55Pj1NYXRoLm1pbihuLnksZS55KX1mdW5jdGlvbiBmSShuKXtyZXR1cm4gbj4wPzE6bjwwPy0xOjB9ZnVuY3Rpb24gSHgobix0KXtyZXR1cm4gRnIobi5wcmV2LG4sbi5uZXh0KTwwP0ZyKG4sdCxuLm5leHQpPj0wJiZGcihuLG4ucHJldix0KT49MDpGcihuLHQsbi5wcmV2KTwwfHxGcihuLG4ubmV4dCx0KTwwfWZ1bmN0aW9uIHV0ZShuLHQpe2xldCBlPW5ldyB3QihuLmksbi54LG4ueSksaT1uZXcgd0IodC5pLHQueCx0LnkpLHI9bi5uZXh0LG89dC5wcmV2O3JldHVybiBuLm5leHQ9dCx0LnByZXY9bixlLm5leHQ9cixyLnByZXY9ZSxpLm5leHQ9ZSxlLnByZXY9aSxvLm5leHQ9aSxpLnByZXY9byxpfWZ1bmN0aW9uIGtlZShuLHQsZSxpKXtsZXQgcj1uZXcgd0Iobix0LGUpO3JldHVybiBpPyhyLm5leHQ9aS5uZXh0LHIucHJldj1pLGkubmV4dC5wcmV2PXIsaS5uZXh0PXIpOihyLnByZXY9cixyLm5leHQ9cikscn1mdW5jdGlvbiB6eChuKXtuLm5leHQucHJldj1uLnByZXYsbi5wcmV2Lm5leHQ9bi5uZXh0LG4ucHJldlomJihuLnByZXZaLm5leHRaPW4ubmV4dFopLG4ubmV4dFomJihuLm5leHRaLnByZXZaPW4ucHJldlopfWZ1bmN0aW9uIHdCKG4sdCxlKXt0aGlzLmk9bix0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX12YXIgWWM9Y2xhc3N7c3RhdGljIGFyZWEodCl7bGV0IGU9dC5sZW5ndGgsaT0wO2ZvcihsZXQgcj1lLTEsbz0wO288ZTtyPW8rKylpKz10W3JdLngqdFtvXS55LXRbb10ueCp0W3JdLnk7cmV0dXJuLjUqaX1zdGF0aWMgaXNDbG9ja1dpc2UodCl7cmV0dXJuIFljLmFyZWEodCk8MH1zdGF0aWMgdHJpYW5ndWxhdGVTaGFwZSh0LGUpe2xldCBpPVtdLHI9W10sbz1bXTtGZWUodCksTmVlKGksdCk7bGV0IHM9dC5sZW5ndGg7ZS5mb3JFYWNoKEZlZSk7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspci5wdXNoKHMpLHMrPWVbbF0ubGVuZ3RoLE5lZShpLGVbbF0pO2xldCBhPWZ1bmN0aW9uKG4sdCxlPTIpe2xldCBhLGwsYyxkLHUscCxmLGk9dCYmdC5sZW5ndGgscj1pP3RbMF0qZTpuLmxlbmd0aCxvPWN0ZShuLDAscixlLCEwKSxzPVtdO2lmKCFvfHxvLm5leHQ9PT1vLnByZXYpcmV0dXJuIHM7aWYoaSYmKG89ZnVuY3Rpb24obix0LGUsaSl7bGV0IG8scyxhLGwsYyxyPVtdO2ZvcihvPTAscz10Lmxlbmd0aDtvPHM7bysrKWE9dFtvXSppLGw9bzxzLTE/dFtvKzFdKmk6bi5sZW5ndGgsYz1jdGUobixhLGwsaSwhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKHkyZShjKSk7Zm9yKHIuc29ydChtMmUpLG89MDtvPHIubGVuZ3RoO28rKyloMmUocltvXSxlKSxlPXhwKGUsZS5uZXh0KTtyZXR1cm4gZX0obix0LG8sZSkpLG4ubGVuZ3RoPjgwKmUpe2E9Yz1uWzBdLGw9ZD1uWzFdO2ZvcihsZXQgbT1lO208cjttKz1lKXU9blttXSxwPW5bbSsxXSx1PGEmJihhPXUpLHA8bCYmKGw9cCksdT5jJiYoYz11KSxwPmQmJihkPXApO2Y9TWF0aC5tYXgoYy1hLGQtbCksZj0wIT09Zj8xL2Y6MH1yZXR1cm4gVngobyxzLGUsYSxsLGYpLHN9KGkscik7Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKz0zKW8ucHVzaChhLnNsaWNlKGwsbCszKSk7cmV0dXJuIG99fTtmdW5jdGlvbiBGZWUobil7bGV0IHQ9bi5sZW5ndGg7dD4yJiZuW3QtMV0uZXF1YWxzKG5bMF0pJiZuLnBvcCgpfWZ1bmN0aW9uIE5lZShuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW4ucHVzaCh0W2VdLngpLG4ucHVzaCh0W2VdLnkpfXZhciBDcD1jbGFzcyBleHRlbmRzIFVpe2NvbnN0cnVjdG9yKHQ9bmV3IHFkKFtuZXcgJGUoLjUsLjUpLG5ldyAkZSgtLjUsLjUpLG5ldyAkZSgtLjUsLS41KSxuZXcgJGUoLjUsLS41KV0pLGU9e30pe3N1cGVyKCksdGhpcy50eXBlPSJFeHRydWRlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsb3B0aW9uczplfSx0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07bGV0IGk9dGhpcyxyPVtdLG89W107Zm9yKGxldCBhPTAsbD10Lmxlbmd0aDthPGw7YSsrKXModFthXSk7ZnVuY3Rpb24gcyhhKXtsZXQgbD1bXSxjPXZvaWQgMCE9PWUuY3VydmVTZWdtZW50cz9lLmN1cnZlU2VnbWVudHM6MTIsZD12b2lkIDAhPT1lLnN0ZXBzP2Uuc3RlcHM6MSx1PXZvaWQgMCE9PWUuZGVwdGg/ZS5kZXB0aDoxLHA9dm9pZCAwPT09ZS5iZXZlbEVuYWJsZWR8fGUuYmV2ZWxFbmFibGVkLGY9dm9pZCAwIT09ZS5iZXZlbFRoaWNrbmVzcz9lLmJldmVsVGhpY2tuZXNzOi4yLG09dm9pZCAwIT09ZS5iZXZlbFNpemU/ZS5iZXZlbFNpemU6Zi0uMSxiPXZvaWQgMCE9PWUuYmV2ZWxPZmZzZXQ/ZS5iZXZlbE9mZnNldDowLE09dm9pZCAwIT09ZS5iZXZlbFNlZ21lbnRzP2UuYmV2ZWxTZWdtZW50czozLHk9ZS5leHRydWRlUGF0aCx4PXZvaWQgMCE9PWUuVVZHZW5lcmF0b3I/ZS5VVkdlbmVyYXRvcjpTMmU7dm9pZCAwIT09ZS5hbW91bnQmJihjb25zb2xlLndhcm4oIlRIUkVFLkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTogYW1vdW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVwdGguIiksdT1lLmFtb3VudCk7bGV0IFIsVix0ZSxLLHhlLEE9ITE7eSYmKFI9eS5nZXRTcGFjZWRQb2ludHMoZCksQT0hMCxwPSExLFY9eS5jb21wdXRlRnJlbmV0RnJhbWVzKGQsITEpLHRlPW5ldyAkLEs9bmV3ICQseGU9bmV3ICQpLHB8fChNPTAsZj0wLG09MCxiPTApO2xldCBYZT1hLmV4dHJhY3RQb2ludHMoYyksRGU9WGUuc2hhcGUsRD1YZS5ob2xlcztpZighWWMuaXNDbG9ja1dpc2UoRGUpKXtEZT1EZS5yZXZlcnNlKCk7Zm9yKGxldCBvZT0wLHN0PUQubGVuZ3RoO29lPHN0O29lKyspe2xldCBZZT1EW29lXTtZYy5pc0Nsb2NrV2lzZShZZSkmJihEW29lXT1ZZS5yZXZlcnNlKCkpfX1sZXQgY2U9WWMudHJpYW5ndWxhdGVTaGFwZShEZSxEKSxmZT1EZTtmb3IobGV0IG9lPTAsc3Q9RC5sZW5ndGg7b2U8c3Q7b2UrKylEZT1EZS5jb25jYXQoRFtvZV0pO2Z1bmN0aW9uIGJlKG9lLHN0LFllKXtyZXR1cm4gc3R8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0Iiksc3QuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihZZSkuYWRkKG9lKX1sZXQgbmU9RGUubGVuZ3RoLGRlPWNlLmxlbmd0aDtmdW5jdGlvbiBwZShvZSxzdCxZZSl7bGV0IF90LHV0LHNuLENuPW9lLngtc3QueCx0aT1vZS55LXN0Lnksa2k9WWUueC1vZS54LEZpPVllLnktb2UueSxaPUNuKkNuK3RpKnRpO2lmKE1hdGguYWJzKENuKkZpLXRpKmtpKT5OdW1iZXIuRVBTSUxPTil7bGV0IFZlPU1hdGguc3FydChaKSx2dD1NYXRoLnNxcnQoa2kqa2krRmkqRmkpLGVuPXN0LngtdGkvVmUsTGU9c3QueStDbi9WZSxGdD0oKFllLngtRmkvdnQtZW4pKkZpLShZZS55K2tpL3Z0LUxlKSpraSkvKENuKkZpLXRpKmtpKTtfdD1lbitDbipGdC1vZS54LHV0PUxlK3RpKkZ0LW9lLnk7bGV0IFB0PV90Kl90K3V0KnV0O2lmKFB0PD0yKXJldHVybiBuZXcgJGUoX3QsdXQpO3NuPU1hdGguc3FydChQdC8yKX1lbHNle2xldCBWZT0hMTtDbj5OdW1iZXIuRVBTSUxPTj9raT5OdW1iZXIuRVBTSUxPTiYmKFZlPSEwKTpDbjwtTnVtYmVyLkVQU0lMT04/a2k8LU51bWJlci5FUFNJTE9OJiYoVmU9ITApOk1hdGguc2lnbih0aSk9PT1NYXRoLnNpZ24oRmkpJiYoVmU9ITApLFZlPyhfdD0tdGksdXQ9Q24sc249TWF0aC5zcXJ0KFopKTooX3Q9Q24sdXQ9dGksc249TWF0aC5zcXJ0KFovMikpfXJldHVybiBuZXcgJGUoX3Qvc24sdXQvc24pfWxldCBqZT1bXTtmb3IobGV0IG9lPTAsc3Q9ZmUubGVuZ3RoLFllPXN0LTEsX3Q9b2UrMTtvZTxzdDtvZSsrLFllKyssX3QrKylZZT09PXN0JiYoWWU9MCksX3Q9PT1zdCYmKF90PTApLGplW29lXT1wZShmZVtvZV0sZmVbWWVdLGZlW190XSk7bGV0IE5lLENlPVtdLGx0PWplLmNvbmNhdCgpO2ZvcihsZXQgb2U9MCxzdD1ELmxlbmd0aDtvZTxzdDtvZSsrKXtsZXQgWWU9RFtvZV07TmU9W107Zm9yKGxldCBfdD0wLHV0PVllLmxlbmd0aCxzbj11dC0xLENuPV90KzE7X3Q8dXQ7X3QrKyxzbisrLENuKyspc249PT11dCYmKHNuPTApLENuPT09dXQmJihDbj0wKSxOZVtfdF09cGUoWWVbX3RdLFllW3NuXSxZZVtDbl0pO0NlLnB1c2goTmUpLGx0PWx0LmNvbmNhdChOZSl9Zm9yKGxldCBvZT0wO29lPE07b2UrKyl7bGV0IHN0PW9lL00sWWU9ZipNYXRoLmNvcyhzdCpNYXRoLlBJLzIpLF90PW0qTWF0aC5zaW4oc3QqTWF0aC5QSS8yKStiO2ZvcihsZXQgdXQ9MCxzbj1mZS5sZW5ndGg7dXQ8c247dXQrKyl7bGV0IENuPWJlKGZlW3V0XSxqZVt1dF0sX3QpO3d0KENuLngsQ24ueSwtWWUpfWZvcihsZXQgdXQ9MCxzbj1ELmxlbmd0aDt1dDxzbjt1dCsrKXtsZXQgQ249RFt1dF07TmU9Q2VbdXRdO2ZvcihsZXQgdGk9MCxraT1Dbi5sZW5ndGg7dGk8a2k7dGkrKyl7bGV0IEZpPWJlKENuW3RpXSxOZVt0aV0sX3QpO3d0KEZpLngsRmkueSwtWWUpfX19bGV0IE10PW0rYjtmb3IobGV0IG9lPTA7b2U8bmU7b2UrKyl7bGV0IHN0PXA/YmUoRGVbb2VdLGx0W29lXSxNdCk6RGVbb2VdO0E/KEsuY29weShWLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHN0LngpLHRlLmNvcHkoVi5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHN0LnkpLHhlLmNvcHkoUlswXSkuYWRkKEspLmFkZCh0ZSksd3QoeGUueCx4ZS55LHhlLnopKTp3dChzdC54LHN0LnksMCl9Zm9yKGxldCBvZT0xO29lPD1kO29lKyspZm9yKGxldCBzdD0wO3N0PG5lO3N0Kyspe2xldCBZZT1wP2JlKERlW3N0XSxsdFtzdF0sTXQpOkRlW3N0XTtBPyhLLmNvcHkoVi5ub3JtYWxzW29lXSkubXVsdGlwbHlTY2FsYXIoWWUueCksdGUuY29weShWLmJpbm9ybWFsc1tvZV0pLm11bHRpcGx5U2NhbGFyKFllLnkpLHhlLmNvcHkoUltvZV0pLmFkZChLKS5hZGQodGUpLHd0KHhlLngseGUueSx4ZS56KSk6d3QoWWUueCxZZS55LHUvZCpvZSl9Zm9yKGxldCBvZT1NLTE7b2U+PTA7b2UtLSl7bGV0IHN0PW9lL00sWWU9ZipNYXRoLmNvcyhzdCpNYXRoLlBJLzIpLF90PW0qTWF0aC5zaW4oc3QqTWF0aC5QSS8yKStiO2ZvcihsZXQgdXQ9MCxzbj1mZS5sZW5ndGg7dXQ8c247dXQrKyl7bGV0IENuPWJlKGZlW3V0XSxqZVt1dF0sX3QpO3d0KENuLngsQ24ueSx1K1llKX1mb3IobGV0IHV0PTAsc249RC5sZW5ndGg7dXQ8c247dXQrKyl7bGV0IENuPURbdXRdO05lPUNlW3V0XTtmb3IobGV0IHRpPTAsa2k9Q24ubGVuZ3RoO3RpPGtpO3RpKyspe2xldCBGaT1iZShDblt0aV0sTmVbdGldLF90KTtBP3d0KEZpLngsRmkueStSW2QtMV0ueSxSW2QtMV0ueCtZZSk6d3QoRmkueCxGaS55LHUrWWUpfX19ZnVuY3Rpb24gQW4ob2Usc3Qpe2xldCBZZT1vZS5sZW5ndGg7Zm9yKDstLVllPj0wOyl7bGV0IF90PVllLHV0PVllLTE7dXQ8MCYmKHV0PW9lLmxlbmd0aC0xKTtmb3IobGV0IHNuPTAsQ249ZCsyKk07c248Q247c24rKyl7bGV0IHRpPW5lKnNuLGtpPW5lKihzbisxKTt2ZShzdCtfdCt0aSxzdCt1dCt0aSxzdCt1dCtraSxzdCtfdCtraSl9fX1mdW5jdGlvbiB3dChvZSxzdCxZZSl7bC5wdXNoKG9lKSxsLnB1c2goc3QpLGwucHVzaChZZSl9ZnVuY3Rpb24gb24ob2Usc3QsWWUpe210KG9lKSxtdChzdCksbXQoWWUpO2xldCBfdD1yLmxlbmd0aC8zLHV0PXguZ2VuZXJhdGVUb3BVVihpLHIsX3QtMyxfdC0yLF90LTEpO2Z0KHV0WzBdKSxmdCh1dFsxXSksZnQodXRbMl0pfWZ1bmN0aW9uIHZlKG9lLHN0LFllLF90KXttdChvZSksbXQoc3QpLG10KF90KSxtdChzdCksbXQoWWUpLG10KF90KTtsZXQgdXQ9ci5sZW5ndGgvMyxzbj14LmdlbmVyYXRlU2lkZVdhbGxVVihpLHIsdXQtNix1dC0zLHV0LTIsdXQtMSk7ZnQoc25bMF0pLGZ0KHNuWzFdKSxmdChzblszXSksZnQoc25bMV0pLGZ0KHNuWzJdKSxmdChzblszXSl9ZnVuY3Rpb24gbXQob2Upe3IucHVzaChsWzMqb2UrMF0pLHIucHVzaChsWzMqb2UrMV0pLHIucHVzaChsWzMqb2UrMl0pfWZ1bmN0aW9uIGZ0KG9lKXtvLnB1c2gob2UueCksby5wdXNoKG9lLnkpfShmdW5jdGlvbigpe2xldCBvZT1yLmxlbmd0aC8zO2lmKHApe2xldCBzdD0wLFllPW5lKnN0O2ZvcihsZXQgX3Q9MDtfdDxkZTtfdCsrKXtsZXQgdXQ9Y2VbX3RdO29uKHV0WzJdK1llLHV0WzFdK1llLHV0WzBdK1llKX1zdD1kKzIqTSxZZT1uZSpzdDtmb3IobGV0IF90PTA7X3Q8ZGU7X3QrKyl7bGV0IHV0PWNlW190XTtvbih1dFswXStZZSx1dFsxXStZZSx1dFsyXStZZSl9fWVsc2V7Zm9yKGxldCBzdD0wO3N0PGRlO3N0Kyspe2xldCBZZT1jZVtzdF07b24oWWVbMl0sWWVbMV0sWWVbMF0pfWZvcihsZXQgc3Q9MDtzdDxkZTtzdCsrKXtsZXQgWWU9Y2Vbc3RdO29uKFllWzBdK25lKmQsWWVbMV0rbmUqZCxZZVsyXStuZSpkKX19aS5hZGRHcm91cChvZSxyLmxlbmd0aC8zLW9lLDApfSkoKSxmdW5jdGlvbigpe2xldCBvZT1yLmxlbmd0aC8zLHN0PTA7QW4oZmUsc3QpLHN0Kz1mZS5sZW5ndGg7Zm9yKGxldCBZZT0wLF90PUQubGVuZ3RoO1llPF90O1llKyspe2xldCB1dD1EW1llXTtBbih1dCxzdCksc3QrPXV0Lmxlbmd0aH1pLmFkZEdyb3VwKG9lLHIubGVuZ3RoLzMtb2UsMSl9KCl9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTnIociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgTnIobywyKSksdGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7aWYoZS5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspZS5zaGFwZXMucHVzaChuW2ldLnV1aWQpO2Vsc2UgZS5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB2b2lkIDAhPT10LmV4dHJ1ZGVQYXRoJiYoZS5vcHRpb25zLmV4dHJ1ZGVQYXRoPXQuZXh0cnVkZVBhdGgudG9KU09OKCkpLGV9KHRoaXMucGFyYW1ldGVycy5zaGFwZXMsdGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnMsdCl9c3RhdGljIGZyb21KU09OKHQsZSl7bGV0IGk9W107Zm9yKGxldCBvPTAscz10LnNoYXBlcy5sZW5ndGg7bzxzO28rKylpLnB1c2goZVt0LnNoYXBlc1tvXV0pO2xldCByPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gdm9pZCAwIT09ciYmKHQub3B0aW9ucy5leHRydWRlUGF0aD0obmV3IGx0ZVtyLnR5cGVdKS5mcm9tSlNPTihyKSksbmV3IENwKGksdC5vcHRpb25zKX19LFMyZT17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBhPXRbMyppXSxsPXRbMyppKzFdLGM9dFszKnJdLGQ9dFszKnIrMV07cmV0dXJuW25ldyAkZSh0WzMqZV0sdFszKmUrMV0pLG5ldyAkZShhLGwpLG5ldyAkZShjLGQpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgcz10WzMqZV0sYT10WzMqZSsxXSxsPXRbMyplKzJdLGM9dFszKmldLGQ9dFszKmkrMV0sdT10WzMqaSsyXSxwPXRbMypyXSxmPXRbMypyKzFdLG09dFszKnIrMl0sYj10WzMqb10sTT10WzMqbysxXSx5PXRbMypvKzJdO3JldHVybiBNYXRoLmFicyhhLWQpPE1hdGguYWJzKHMtYyk/W25ldyAkZShzLDEtbCksbmV3ICRlKGMsMS11KSxuZXcgJGUocCwxLW0pLG5ldyAkZShiLDEteSldOltuZXcgJGUoYSwxLWwpLG5ldyAkZShkLDEtdSksbmV3ICRlKGYsMS1tKSxuZXcgJGUoTSwxLXkpXX19LF9tPWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD1uZXcgcWQoW25ldyAkZSgwLC41KSxuZXcgJGUoLS41LC0uNSksbmV3ICRlKC41LC0uNSldKSxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2xldCBpPVtdLHI9W10sbz1bXSxzPVtdLGE9MCxsPTA7aWYoITE9PT1BcnJheS5pc0FycmF5KHQpKWModCk7ZWxzZSBmb3IobGV0IGQ9MDtkPHQubGVuZ3RoO2QrKyljKHRbZF0pLHRoaXMuYWRkR3JvdXAoYSxsLGQpLGErPWwsbD0wO2Z1bmN0aW9uIGMoZCl7bGV0IHU9ci5sZW5ndGgvMyxwPWQuZXh0cmFjdFBvaW50cyhlKSxmPXAuc2hhcGUsbT1wLmhvbGVzOyExPT09WWMuaXNDbG9ja1dpc2UoZikmJihmPWYucmV2ZXJzZSgpKTtmb3IobGV0IE09MCx5PW0ubGVuZ3RoO008eTtNKyspe2xldCB4PW1bTV07ITA9PT1ZYy5pc0Nsb2NrV2lzZSh4KSYmKG1bTV09eC5yZXZlcnNlKCkpfWxldCBiPVljLnRyaWFuZ3VsYXRlU2hhcGUoZixtKTtmb3IobGV0IE09MCx5PW0ubGVuZ3RoO008eTtNKyspZj1mLmNvbmNhdChtW01dKTtmb3IobGV0IE09MCx5PWYubGVuZ3RoO008eTtNKyspe2xldCB4PWZbTV07ci5wdXNoKHgueCx4LnksMCksby5wdXNoKDAsMCwxKSxzLnB1c2goeC54LHgueSl9Zm9yKGxldCBNPTAseT1iLmxlbmd0aDtNPHk7TSsrKXtsZXQgeD1iW01dO2kucHVzaCh4WzBdK3UseFsxXSt1LHhbMl0rdSksbCs9M319dGhpcy5zZXRJbmRleChpKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBOcihyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgTnIobywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgTnIocywyKSl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspdC5zaGFwZXMucHVzaChuW2VdLnV1aWQpO2Vsc2UgdC5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB0fSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2xldCBpPVtdO2ZvcihsZXQgcj0wLG89dC5zaGFwZXMubGVuZ3RoO3I8bztyKyspaS5wdXNoKGVbdC5zaGFwZXNbcl1dKTtyZXR1cm4gbmV3IF9tKGksdC5jdXJ2ZVNlZ21lbnRzKX19OyhjbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFkb3dNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMCksdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzfX0pLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciBCST1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBhbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9b18sdGhpcy5ub3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtCSS5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIEJJe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD1udWxsLHRoaXMuaW9yPTEuNSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicmVmbGVjdGl2aXR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEtzKDIuNSoodGhpcy5pb3ItMSkvKHRoaXMuaW9yKzEpLDAsMSl9LHNldDpmdW5jdGlvbihlKXt0aGlzLmlvcj0oMSsuNCplKS8oMS0uNCplKX19KSx0aGlzLnNoZWVuQ29sb3I9bmV3IGFuKDApLHRoaXMuc2hlZW5Db2xvck1hcD1udWxsLHRoaXMuc2hlZW5Sb3VnaG5lc3M9MSx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPW51bGwsdGhpcy50cmFuc21pc3Npb25NYXA9bnVsbCx0aGlzLnRoaWNrbmVzcz0wLHRoaXMudGhpY2tuZXNzTWFwPW51bGwsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPTAsdGhpcy5hdHRlbnVhdGlvbkNvbG9yPW5ldyBhbigxLDEsMSksdGhpcy5zcGVjdWxhckludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bnVsbCx0aGlzLnNwZWN1bGFyQ29sb3I9bmV3IGFuKDEsMSwxKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9bnVsbCx0aGlzLl9zaGVlbj0wLHRoaXMuX2NsZWFyY29hdD0wLHRoaXMuX3RyYW5zbWlzc2lvbj0wLHRoaXMuc2V0VmFsdWVzKHQpfWdldCBzaGVlbigpe3JldHVybiB0aGlzLl9zaGVlbn1zZXQgc2hlZW4odCl7dGhpcy5fc2hlZW4+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9zaGVlbj10fWdldCBjbGVhcmNvYXQoKXtyZXR1cm4gdGhpcy5fY2xlYXJjb2F0fXNldCBjbGVhcmNvYXQodCl7dGhpcy5fY2xlYXJjb2F0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fY2xlYXJjb2F0PXR9Z2V0IHRyYW5zbWlzc2lvbigpe3JldHVybiB0aGlzLl90cmFuc21pc3Npb259c2V0IHRyYW5zbWlzc2lvbih0KXt0aGlzLl90cmFuc21pc3Npb24+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl90cmFuc21pc3Npb249dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMuY2xlYXJjb2F0PXQuY2xlYXJjb2F0LHRoaXMuY2xlYXJjb2F0TWFwPXQuY2xlYXJjb2F0TWFwLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXQuY2xlYXJjb2F0Um91Z2huZXNzTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPXQuY2xlYXJjb2F0Tm9ybWFsTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUuY29weSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx0aGlzLmlvcj10Lmlvcix0aGlzLnNoZWVuPXQuc2hlZW4sdGhpcy5zaGVlbkNvbG9yLmNvcHkodC5zaGVlbkNvbG9yKSx0aGlzLnNoZWVuQ29sb3JNYXA9dC5zaGVlbkNvbG9yTWFwLHRoaXMuc2hlZW5Sb3VnaG5lc3M9dC5zaGVlblJvdWdobmVzcyx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPXQuc2hlZW5Sb3VnaG5lc3NNYXAsdGhpcy50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24sdGhpcy50cmFuc21pc3Npb25NYXA9dC50cmFuc21pc3Npb25NYXAsdGhpcy50aGlja25lc3M9dC50aGlja25lc3MsdGhpcy50aGlja25lc3NNYXA9dC50aGlja25lc3NNYXAsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPXQuYXR0ZW51YXRpb25EaXN0YW5jZSx0aGlzLmF0dGVudWF0aW9uQ29sb3IuY29weSh0LmF0dGVudWF0aW9uQ29sb3IpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9dC5zcGVjdWxhckludGVuc2l0eSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPXQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsdGhpcy5zcGVjdWxhckNvbG9yLmNvcHkodC5zcGVjdWxhckNvbG9yKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9dC5zcGVjdWxhckNvbG9yTWFwLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGFuKDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGFuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1vXyx0aGlzLm5vcm1hbFNjYWxlPW5ldyAkZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9WUksdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnNwZWN1bGFyLmNvcHkodC5zcGVjdWxhciksdGhpcy5zaGluaW5lc3M9dC5zaGluaW5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFBob25nTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGFuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1vXyx0aGlzLm5vcm1hbFNjYWxlPW5ldyAkZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1vXyx0aGlzLm5vcm1hbFNjYWxlPW5ldyAkZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoTm9ybWFsTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGFuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1ZSSx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1vXyx0aGlzLm5vcm1hbFNjYWxlPW5ldyAkZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFdke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNjYWxlPXQuc2NhbGUsdGhpcy5kYXNoU2l6ZT10LmRhc2hTaXplLHRoaXMuZ2FwU2l6ZT10LmdhcFNpemUsdGhpc319LnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMDt2YXIgUnI9e2FycmF5U2xpY2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiBSci5pc1R5cGVkQXJyYXkobik/bmV3IG4uY29uc3RydWN0b3Iobi5zdWJhcnJheSh0LHZvaWQgMCE9PWU/ZTpuLmxlbmd0aCkpOm4uc2xpY2UodCxlKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4hbnx8IWUmJm4uY29uc3RydWN0b3I9PT10P246Im51bWJlciI9PXR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UP25ldyB0KG4pOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKG4pe2xldCBlPW4ubGVuZ3RoLGk9bmV3IEFycmF5KGUpO2ZvcihsZXQgcj0wO3IhPT1lOysrcilpW3JdPXI7cmV0dXJuIGkuc29ydChmdW5jdGlvbihyLG8pe3JldHVybiBuW3JdLW5bb119KSxpfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5sZW5ndGgscj1uZXcgbi5jb25zdHJ1Y3RvcihpKTtmb3IobGV0IG89MCxzPTA7cyE9PWk7KytvKXtsZXQgYT1lW29dKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKXJbcysrXT1uW2ErbF19cmV0dXJuIHJ9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTEsbz1uWzBdO2Zvcig7dm9pZCAwIT09byYmdm9pZCAwPT09b1tpXTspbz1uW3IrK107aWYodm9pZCAwPT09bylyZXR1cm47bGV0IHM9b1tpXTtpZih2b2lkIDAhPT1zKWlmKEFycmF5LmlzQXJyYXkocykpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2guYXBwbHkoZSxzKSksbz1uW3IrK119d2hpbGUodm9pZCAwIT09byk7ZWxzZSBpZih2b2lkIDAhPT1zLnRvQXJyYXkpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxzLnRvQXJyYXkoZSxlLmxlbmd0aCkpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2gocykpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pfSxzdWJjbGlwOmZ1bmN0aW9uKG4sdCxlLGkscj0zMCl7bGV0IG89bi5jbG9uZSgpO28ubmFtZT10O2xldCBzPVtdO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9by50cmFja3NbbF0sZD1jLmdldFZhbHVlU2l6ZSgpLHU9W10scD1bXTtmb3IobGV0IGY9MDtmPGMudGltZXMubGVuZ3RoOysrZil7bGV0IG09Yy50aW1lc1tmXSpyO2lmKCEobTxlfHxtPj1pKSl7dS5wdXNoKGMudGltZXNbZl0pO2ZvcihsZXQgYj0wO2I8ZDsrK2IpcC5wdXNoKGMudmFsdWVzW2YqZCtiXSl9fTAhPT11Lmxlbmd0aCYmKGMudGltZXM9UnIuY29udmVydEFycmF5KHUsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9UnIuY29udmVydEFycmF5KHAsYy52YWx1ZXMuY29uc3RydWN0b3IpLHMucHVzaChjKSl9by50cmFja3M9cztsZXQgYT0xLzA7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKWE+by50cmFja3NbbF0udGltZXNbMF0mJihhPW8udHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpby50cmFja3NbbF0uc2hpZnQoLTEqYSk7cmV0dXJuIG8ucmVzZXREdXJhdGlvbigpLG99LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24obix0PTAsZT1uLGk9MzApe2k8PTAmJihpPTMwKTtsZXQgcj1lLnRyYWNrcy5sZW5ndGgsbz10L2k7Zm9yKGxldCBzPTA7czxyOysrcyl7bGV0IGE9ZS50cmFja3Nbc10sbD1hLlZhbHVlVHlwZU5hbWU7aWYoImJvb2wiPT09bHx8InN0cmluZyI9PT1sKWNvbnRpbnVlO2xldCBjPW4udHJhY2tzLmZpbmQoZnVuY3Rpb24oeSl7cmV0dXJuIHkubmFtZT09PWEubmFtZSYmeS5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKHZvaWQgMD09PWMpY29udGludWU7bGV0IGQ9MCx1PWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGQ9dS8zKTtsZXQgcD0wLGY9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYocD1mLzMpO2xldCBiLG09YS50aW1lcy5sZW5ndGgtMTtpZihvPD1hLnRpbWVzWzBdKWI9UnIuYXJyYXlTbGljZShhLnZhbHVlcyxkLHUtZCk7ZWxzZSBpZihvPj1hLnRpbWVzW21dKXtsZXQgeT1tKnUrZDtiPVJyLmFycmF5U2xpY2UoYS52YWx1ZXMseSx5K3UtZCl9ZWxzZXtsZXQgeT1hLmNyZWF0ZUludGVycG9sYW50KCkseD1kLFI9dS1kO3kuZXZhbHVhdGUobyksYj1Sci5hcnJheVNsaWNlKHkucmVzdWx0QnVmZmVyLHgsUil9InF1YXRlcm5pb24iPT09bCYmKG5ldyB0cykuZnJvbUFycmF5KGIpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoYik7bGV0IE09Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCB5PTA7eTxNOysreSl7bGV0IHg9eSpmK3A7aWYoInF1YXRlcm5pb24iPT09bCl0cy5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyx4LGIsMCxjLnZhbHVlcyx4KTtlbHNle2xldCBSPWYtMipwO2ZvcihsZXQgQT0wO0E8UjsrK0EpYy52YWx1ZXNbeCtBXS09YltBXX19fXJldHVybiBuLmJsZW5kTW9kZT0yNTAxLG59fSxYYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9dm9pZCAwIT09cj9yOm5ldyBlLmNvbnN0cnVjdG9yKGkpLHRoaXMuc2FtcGxlVmFsdWVzPWUsdGhpcy52YWx1ZVNpemU9aSx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCBlPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLGk9dGhpcy5fY2FjaGVkSW5kZXgscj1lW2ldLG89ZVtpLTFdO2U6e3Q6e2xldCBzO246e2k6aWYoISh0PHIpKXtmb3IobGV0IGE9aSsyOzspe2lmKHZvaWQgMD09PXIpe2lmKHQ8bylicmVhayBpO3JldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLHQsbyl9aWYoaT09PWEpYnJlYWs7aWYobz1yLHI9ZVsrK2ldLHQ8cilicmVhayB0fXM9ZS5sZW5ndGg7YnJlYWsgbn1pZih0Pj1vKWJyZWFrIGU7e2xldCBhPWVbMV07dDxhJiYoaT0yLG89YSk7Zm9yKGxldCBsPWktMjs7KXtpZih2b2lkIDA9PT1vKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZihpPT09bClicmVhaztpZihyPW8sbz1lWy0taS0xXSx0Pj1vKWJyZWFrIHR9cz1pLGk9MH19Zm9yKDtpPHM7KXtsZXQgYT1pK3M+Pj4xO3Q8ZVthXT9zPWE6aT1hKzF9aWYocj1lW2ldLG89ZVtpLTFdLHZvaWQgMD09PW8pcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKHZvaWQgMD09PXIpcmV0dXJuIGk9ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmFmdGVyRW5kXyhpLTEsbyx0KX10aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyhpLG8scil9cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKGksbyx0LHIpfWdldFNldHRpbmdzXygpe3JldHVybiB0aGlzLnNldHRpbmdzfHx0aGlzLkRlZmF1bHRTZXR0aW5nc199Y29weVNhbXBsZVZhbHVlXyh0KXtsZXQgZT10aGlzLnJlc3VsdEJ1ZmZlcixpPXRoaXMuc2FtcGxlVmFsdWVzLHI9dGhpcy52YWx1ZVNpemUsbz10KnI7Zm9yKGxldCBzPTA7cyE9PXI7KytzKWVbc109aVtvK3NdO3JldHVybiBlfWludGVycG9sYXRlXygpe3Rocm93IG5ldyBFcnJvcigiY2FsbCB0byBhYnN0cmFjdCBtZXRob2QiKX1pbnRlcnZhbENoYW5nZWRfKCl7fX07WGMucHJvdG90eXBlLmJlZm9yZVN0YXJ0Xz1YYy5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXyxYYy5wcm90b3R5cGUuYWZ0ZXJFbmRfPVhjLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3ZhciBPQj1jbGFzcyBleHRlbmRzIFhje2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpLHRoaXMuX3dlaWdodFByZXY9LTAsdGhpcy5fb2Zmc2V0UHJldj0tMCx0aGlzLl93ZWlnaHROZXh0PS0wLHRoaXMuX29mZnNldE5leHQ9LTAsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXtlbmRpbmdTdGFydDpWMCxlbmRpbmdFbmQ6VjB9fWludGVydmFsQ2hhbmdlZF8odCxlLGkpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG89dC0yLHM9dCsxLGE9cltvXSxsPXJbc107aWYodm9pZCAwPT09YSlzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCl7Y2FzZSBIMDpvPXQsYT0yKmUtaTticmVhaztjYXNlIDI0MDI6bz1yLmxlbmd0aC0yLGE9ZStyW29dLXJbbysxXTticmVhaztkZWZhdWx0Om89dCxhPWl9aWYodm9pZCAwPT09bClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgSDA6cz10LGw9MippLWU7YnJlYWs7Y2FzZSAyNDAyOnM9MSxsPWkrclsxXS1yWzBdO2JyZWFrO2RlZmF1bHQ6cz10LTEsbD1lfWxldCBjPS41KihpLWUpLGQ9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhlLWEpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1pKSx0aGlzLl9vZmZzZXRQcmV2PW8qZCx0aGlzLl9vZmZzZXROZXh0PXMqZH1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIscz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9dCphLGM9bC1hLGQ9dGhpcy5fb2Zmc2V0UHJldix1PXRoaXMuX29mZnNldE5leHQscD10aGlzLl93ZWlnaHRQcmV2LGY9dGhpcy5fd2VpZ2h0TmV4dCxtPShpLWUpLyhyLWUpLGI9bSptLE09YiptLHk9LXAqTSsyKnAqYi1wKm0seD0oMStwKSpNKygtMS41LTIqcCkqYisoLS41K3ApKm0rMSxSPSgtMS1mKSpNKygxLjUrZikqYisuNSptLEE9ZipNLWYqYjtmb3IobGV0IFY9MDtWIT09YTsrK1Ypb1tWXT15KnNbZCtWXSt4KnNbYytWXStSKnNbbCtWXStBKnNbdStWXTtyZXR1cm4gb319LFZJPWNsYXNzIGV4dGVuZHMgWGN7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSxkPShpLWUpLyhyLWUpLHU9MS1kO2ZvcihsZXQgcD0wO3AhPT1hOysrcClvW3BdPXNbYytwXSp1K3NbbCtwXSpkO3JldHVybiBvfX0sa0I9Y2xhc3MgZXh0ZW5kcyBYY3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sc2w9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Sci5jb252ZXJ0QXJyYXkoZSx0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Sci5jb252ZXJ0QXJyYXkoaSx0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHJ8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IGksZT10LmNvbnN0cnVjdG9yO2lmKGUudG9KU09OIT09dGhpcy50b0pTT04paT1lLnRvSlNPTih0KTtlbHNle2k9e25hbWU6dC5uYW1lLHRpbWVzOlJyLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6UnIuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IHI9dC5nZXRJbnRlcnBvbGF0aW9uKCk7ciE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihpLmludGVycG9sYXRpb249cil9cmV0dXJuIGkudHlwZT10LlZhbHVlVHlwZU5hbWUsaX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IGtCKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBWSSh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgT0IodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMjMwMDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7bGV0IGk9InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodm9pZCAwPT09dGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7aWYodD09PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO3RoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiIsaSksdGhpc31yZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGFudD1lLHRoaXN9Z2V0SW50ZXJwb2xhdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIDIzMDA7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gMjMwMTtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiAyMzAyfX1nZXRWYWx1ZVNpemUoKXtyZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoL3RoaXMudGltZXMubGVuZ3RofXNoaWZ0KHQpe2lmKDAhPT10KXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0rPXR9cmV0dXJuIHRoaXN9c2NhbGUodCl7aWYoMSE9PXQpe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSo9dH1yZXR1cm4gdGhpc310cmltKHQsZSl7bGV0IGk9dGhpcy50aW1lcyxyPWkubGVuZ3RoLG89MCxzPXItMTtmb3IoO28hPT1yJiZpW29dPHQ7KSsrbztmb3IoOy0xIT09cyYmaVtzXT5lOyktLXM7aWYoKytzLDAhPT1vfHxzIT09cil7bz49cyYmKHM9TWF0aC5tYXgocywxKSxvPXMtMSk7bGV0IGE9dGhpcy5nZXRWYWx1ZVNpemUoKTt0aGlzLnRpbWVzPVJyLmFycmF5U2xpY2UoaSxvLHMpLHRoaXMudmFsdWVzPVJyLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsbyphLHMqYSl9cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMCxlPXRoaXMuZ2V0VmFsdWVTaXplKCk7ZS1NYXRoLmZsb29yKGUpIT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLG89aS5sZW5ndGg7MD09PW8mJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBzPW51bGw7Zm9yKGxldCBhPTA7YSE9PW87YSsrKXtsZXQgbD1pW2FdO2lmKCJudW1iZXIiPT10eXBlb2YgbCYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobnVsbCE9PXMmJnM+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxzKSx0PSExO2JyZWFrfXM9bH1pZih2b2lkIDAhPT1yJiZSci5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PVJyLmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1Sci5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj0yMzAyPT09dGhpcy5nZXRJbnRlcnBvbGF0aW9uKCksbz10Lmxlbmd0aC0xLHM9MTtmb3IobGV0IGE9MTthPG87KythKXtsZXQgbD0hMSxjPXRbYV07aWYoYyE9PXRbYSsxXSYmKDEhPT1hfHxjIT09dFswXSkpaWYocilsPSEwO2Vsc2V7bGV0IHU9YSppLHA9dS1pLGY9dStpO2ZvcihsZXQgbT0wO20hPT1pOysrbSl7bGV0IGI9ZVt1K21dO2lmKGIhPT1lW3ArbV18fGIhPT1lW2YrbV0pe2w9ITA7YnJlYWt9fX1pZihsKXtpZihhIT09cyl7dFtzXT10W2FdO2xldCB1PWEqaSxwPXMqaTtmb3IobGV0IGY9MDtmIT09aTsrK2YpZVtwK2ZdPWVbdStmXX0rK3N9fWlmKG8+MCl7dFtzXT10W29dO2ZvcihsZXQgYT1vKmksbD1zKmksYz0wO2MhPT1pOysrYyllW2wrY109ZVthK2NdOysrc31yZXR1cm4gcyE9PXQubGVuZ3RoPyh0aGlzLnRpbWVzPVJyLmFycmF5U2xpY2UodCwwLHMpLHRoaXMudmFsdWVzPVJyLmFycmF5U2xpY2UoZSwwLHMqaSkpOih0aGlzLnRpbWVzPXQsdGhpcy52YWx1ZXM9ZSksdGhpc31jbG9uZSgpe2xldCB0PVJyLmFycmF5U2xpY2UodGhpcy50aW1lcywwKSxlPVJyLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsMCkscj1uZXcoMCx0aGlzLmNvbnN0cnVjdG9yKSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtzbC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LHNsLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LHNsLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxO3ZhciBNcD1jbGFzcyBleHRlbmRzIHNse307TXAucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiLE1wLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksTXAucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPTIzMDAsTXAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDAsTXAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIEhJPWNsYXNzIGV4dGVuZHMgc2x7fTtISS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0iY29sb3IiO3ZhciBuXz1jbGFzcyBleHRlbmRzIHNse307bl8ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9Im51bWJlciI7dmFyIEZCPWNsYXNzIGV4dGVuZHMgWGN7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPShpLWUpLyhyLWUpLGM9dCphO2ZvcihsZXQgZD1jK2E7YyE9PWQ7Yys9NCl0cy5zbGVycEZsYXQobywwLHMsYy1hLHMsYyxsKTtyZXR1cm4gb319LGJtPWNsYXNzIGV4dGVuZHMgc2x7SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgRkIodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfX07Ym0ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InF1YXRlcm5pb24iLGJtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxLGJtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciB3cD1jbGFzcyBleHRlbmRzIHNse307d3AucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyIsd3AucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheSx3cC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMCx3cC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMCx3cC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgaV89Y2xhc3MgZXh0ZW5kcyBzbHt9O2lfLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciB6ST1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEsaSxyPTI1MDApe3RoaXMubmFtZT10LHRoaXMudHJhY2tzPWksdGhpcy5kdXJhdGlvbj1lLHRoaXMuYmxlbmRNb2RlPXIsdGhpcy51dWlkPUpsKCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1zdGF0aWMgcGFyc2UodCl7bGV0IGU9W10saT10LnRyYWNrcyxyPTEvKHQuZnBzfHwxKTtmb3IobGV0IHM9MCxhPWkubGVuZ3RoO3MhPT1hOysrcyllLnB1c2goSTJlKGlbc10pLnNjYWxlKHIpKTtsZXQgbz1uZXcgdGhpcyh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gby51dWlkPXQudXVpZCxvfXN0YXRpYyB0b0pTT04odCl7bGV0IGU9W10saT10LnRyYWNrcyxyPXtuYW1lOnQubmFtZSxkdXJhdGlvbjp0LmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6dC51dWlkLGJsZW5kTW9kZTp0LmJsZW5kTW9kZX07Zm9yKGxldCBvPTAscz1pLmxlbmd0aDtvIT09czsrK28pZS5wdXNoKHNsLnRvSlNPTihpW29dKSk7cmV0dXJuIHJ9c3RhdGljIENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHQsZSxpLHIpe2xldCBvPWUubGVuZ3RoLHM9W107Zm9yKGxldCBhPTA7YTxvO2ErKyl7bGV0IGw9W10sYz1bXTtsLnB1c2goKGErby0xKSVvLGEsKGErMSklbyksYy5wdXNoKDAsMSwwKTtsZXQgZD1Sci5nZXRLZXlmcmFtZU9yZGVyKGwpO2w9UnIuc29ydGVkQXJyYXkobCwxLGQpLGM9UnIuc29ydGVkQXJyYXkoYywxLGQpLCFyJiYwPT09bFswXSYmKGwucHVzaChvKSxjLnB1c2goY1swXSkpLHMucHVzaChuZXcgbl8oIi5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIitlW2FdLm5hbWUrIl0iLGwsYykuc2NhbGUoMS9pKSl9cmV0dXJuIG5ldyB0aGlzKHQsLTEscyl9c3RhdGljIGZpbmRCeU5hbWUodCxlKXtsZXQgaT10O0FycmF5LmlzQXJyYXkodCl8fChpPXQuZ2VvbWV0cnkmJnQuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8dC5hbmltYXRpb25zKTtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKylpZihpW3JdLm5hbWU9PT1lKXJldHVybiBpW3JdO3JldHVybiBudWxsfXN0YXRpYyBDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlcyh0LGUsaSl7bGV0IHI9e30sbz0vXihbXHctXSo/KShbXGRdKykkLztmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspe2xldCBjPXRbYV0sZD1jLm5hbWUubWF0Y2gobyk7aWYoZCYmZC5sZW5ndGg+MSl7bGV0IHU9ZFsxXSxwPXJbdV07cHx8KHJbdV09cD1bXSkscC5wdXNoKGMpfX1sZXQgcz1bXTtmb3IobGV0IGEgaW4gcilzLnB1c2godGhpcy5DcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZShhLHJbYV0sZSxpKSk7cmV0dXJuIHN9c3RhdGljIHBhcnNlQW5pbWF0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuIiksbnVsbDtsZXQgaT1mdW5jdGlvbih1LHAsZixtLGIpe2lmKDAhPT1mLmxlbmd0aCl7bGV0IE09W10seT1bXTtSci5mbGF0dGVuSlNPTihmLE0seSxtKSwwIT09TS5sZW5ndGgmJmIucHVzaChuZXcgdShwLE0seSkpfX0scj1bXSxvPXQubmFtZXx8ImRlZmF1bHQiLHM9dC5mcHN8fDMwLGE9dC5ibGVuZE1vZGUsbD10Lmxlbmd0aHx8LTEsYz10LmhpZXJhcmNoeXx8W107Zm9yKGxldCB1PTA7dTxjLmxlbmd0aDt1Kyspe2xldCBwPWNbdV0ua2V5cztpZihwJiYwIT09cC5sZW5ndGgpaWYocFswXS5tb3JwaFRhcmdldHMpe2xldCBtLGY9e307Zm9yKG09MDttPHAubGVuZ3RoO20rKylpZihwW21dLm1vcnBoVGFyZ2V0cylmb3IobGV0IGI9MDtiPHBbbV0ubW9ycGhUYXJnZXRzLmxlbmd0aDtiKyspZltwW21dLm1vcnBoVGFyZ2V0c1tiXV09LTE7Zm9yKGxldCBiIGluIGYpe2xldCBNPVtdLHk9W107Zm9yKGxldCB4PTA7eCE9PXBbbV0ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3gpe2xldCBSPXBbbV07TS5wdXNoKFIudGltZSkseS5wdXNoKFIubW9ycGhUYXJnZXQ9PT1iPzE6MCl9ci5wdXNoKG5ldyBuXygiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIrYisiXSIsTSx5KSl9bD1mLmxlbmd0aCooc3x8MSl9ZWxzZXtsZXQgZj0iLmJvbmVzWyIrZVt1XS5uYW1lKyJdIjtpKGlfLGYrIi5wb3NpdGlvbiIscCwicG9zIixyKSxpKGJtLGYrIi5xdWF0ZXJuaW9uIixwLCJyb3QiLHIpLGkoaV8sZisiLnNjYWxlIixwLCJzY2wiLHIpfX1yZXR1cm4gMD09PXIubGVuZ3RoP251bGw6bmV3IHRoaXMobyxsLHIsYSl9cmVzZXREdXJhdGlvbigpe2xldCBlPTA7Zm9yKGxldCBpPTAscj10aGlzLnRyYWNrcy5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz10aGlzLnRyYWNrc1tpXTtlPU1hdGgubWF4KGUsby50aW1lc1tvLnRpbWVzLmxlbmd0aC0xXSl9cmV0dXJuIHRoaXMuZHVyYXRpb249ZSx0aGlzfXRyaW0oKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0udHJpbSgwLHRoaXMuZHVyYXRpb24pO3JldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITA7Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQ9dCYmdGhpcy50cmFja3NbZV0udmFsaWRhdGUoKTtyZXR1cm4gdH1vcHRpbWl6ZSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS5vcHRpbWl6ZSgpO3JldHVybiB0aGlzfWNsb25lKCl7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLnRyYWNrc1tlXS5jbG9uZSgpKTtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5uYW1lLHRoaXMuZHVyYXRpb24sdCx0aGlzLmJsZW5kTW9kZSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9KU09OKHRoaXMpfX07ZnVuY3Rpb24gSTJlKG4pe2lmKHZvaWQgMD09PW4udHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9ZnVuY3Rpb24obil7c3dpdGNoKG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJzY2FsYXIiOmNhc2UiZG91YmxlIjpjYXNlImZsb2F0IjpjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpyZXR1cm4gbl87Y2FzZSJ2ZWN0b3IiOmNhc2UidmVjdG9yMiI6Y2FzZSJ2ZWN0b3IzIjpjYXNlInZlY3RvcjQiOnJldHVybiBpXztjYXNlImNvbG9yIjpyZXR1cm4gSEk7Y2FzZSJxdWF0ZXJuaW9uIjpyZXR1cm4gYm07Y2FzZSJib29sIjpjYXNlImJvb2xlYW4iOnJldHVybiBNcDtjYXNlInN0cmluZyI6cmV0dXJuIHdwfXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrbil9KG4udHlwZSk7aWYodm9pZCAwPT09bi50aW1lcyl7bGV0IGU9W10saT1bXTtSci5mbGF0dGVuSlNPTihuLmtleXMsZSxpLCJ2YWx1ZSIpLG4udGltZXM9ZSxuLnZhbHVlcz1pfXJldHVybiB2b2lkIDAhPT10LnBhcnNlP3QucGFyc2Uobik6bmV3IHQobi5uYW1lLG4udGltZXMsbi52YWx1ZXMsbi5pbnRlcnBvbGF0aW9uKX12YXIgcl89e2VuYWJsZWQ6ITEsZmlsZXM6e30sYWRkOmZ1bmN0aW9uKG4sdCl7ITEhPT10aGlzLmVuYWJsZWQmJih0aGlzLmZpbGVzW25dPXQpfSxnZXQ6ZnVuY3Rpb24obil7aWYoITEhPT10aGlzLmVuYWJsZWQpcmV0dXJuIHRoaXMuZmlsZXNbbl19LHJlbW92ZTpmdW5jdGlvbihuKXtkZWxldGUgdGhpcy5maWxlc1tuXX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmZpbGVzPXt9fX0sQTJlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IGwscj10aGlzLG89ITEscz0wLGE9MCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9aSx0aGlzLml0ZW1TdGFydD1mdW5jdGlvbihkKXthKyssITE9PT1vJiZ2b2lkIDAhPT1yLm9uU3RhcnQmJnIub25TdGFydChkLHMsYSksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKGQpe3MrKyx2b2lkIDAhPT1yLm9uUHJvZ3Jlc3MmJnIub25Qcm9ncmVzcyhkLHMsYSkscz09PWEmJihvPSExLHZvaWQgMCE9PXIub25Mb2FkJiZyLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24oZCl7dm9pZCAwIT09ci5vbkVycm9yJiZyLm9uRXJyb3IoZCl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbihkKXtyZXR1cm4gbD9sKGQpOmR9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24oZCl7cmV0dXJuIGw9ZCx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24oZCx1KXtyZXR1cm4gYy5wdXNoKGQsdSksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKGQpe2xldCB1PWMuaW5kZXhPZihkKTtyZXR1cm4tMSE9PXUmJmMuc3BsaWNlKHUsMiksdGhpc30sdGhpcy5nZXRIYW5kbGVyPWZ1bmN0aW9uKGQpe2ZvcihsZXQgdT0wLHA9Yy5sZW5ndGg7dTxwO3UrPTIpe2xldCBmPWNbdV0sbT1jW3UrMV07aWYoZi5nbG9iYWwmJihmLmxhc3RJbmRleD0wKSxmLnRlc3QoZCkpcmV0dXJuIG19cmV0dXJuIG51bGx9fX0sUWM9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PXQ/dDpBMmUsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQsZSl7bGV0IGk9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXtpLmxvYWQodCxyLGUsbyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0semQ9e30sTEI9Y2xhc3MgZXh0ZW5kcyBRY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3ZvaWQgMD09PXQmJih0PSIiKSx2b2lkIDAhPT10aGlzLnBhdGgmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXJfLmdldCh0KTtpZih2b2lkIDAhPT1vKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntlJiZlKG8pLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxvO2lmKHZvaWQgMCE9PXpkW3RdKXJldHVybiB2b2lkIHpkW3RdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6aSxvbkVycm9yOnJ9KTt6ZFt0XT1bXSx6ZFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7bGV0IHM9bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSksYT10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2gocykudGhlbihjPT57aWYoMjAwPT09Yy5zdGF0dXN8fDA9PT1jLnN0YXR1cyl7aWYoMD09PWMuc3RhdHVzJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPiJ1Inx8dm9pZCAwPT09Yy5ib2R5LmdldFJlYWRlcilyZXR1cm4gYztsZXQgZD16ZFt0XSx1PWMuYm9keS5nZXRSZWFkZXIoKSxwPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiksZj1wP3BhcnNlSW50KHApOjAsbT0wIT09ZixiPTAsTT1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KHkpeyFmdW5jdGlvbiB4KCl7dS5yZWFkKCkudGhlbigoe2RvbmU6Uix2YWx1ZTpBfSk9PntpZihSKXkuY2xvc2UoKTtlbHNle2IrPUEuYnl0ZUxlbmd0aDtsZXQgVj1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOm0sbG9hZGVkOmIsdG90YWw6Zn0pO2ZvcihsZXQgdGU9MCxLPWQubGVuZ3RoO3RlPEs7dGUrKyl7bGV0IHhlPWRbdGVdO3hlLm9uUHJvZ3Jlc3MmJnhlLm9uUHJvZ3Jlc3MoVil9eS5lbnF1ZXVlKEEpLHgoKX19KX0oKX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKE0pfXRocm93IEVycm9yKGBmZXRjaCBmb3IgIiR7Yy51cmx9IiByZXNwb25kZWQgd2l0aCAke2Muc3RhdHVzfTogJHtjLnN0YXR1c1RleHR9YCl9KS50aGVuKGM9Pntzd2l0Y2gobCl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIGMuYXJyYXlCdWZmZXIoKTtjYXNlImJsb2IiOnJldHVybiBjLmJsb2IoKTtjYXNlImRvY3VtZW50IjpyZXR1cm4gYy50ZXh0KCkudGhlbihkPT4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGQsYSkpO2Nhc2UianNvbiI6cmV0dXJuIGMuanNvbigpO2RlZmF1bHQ6aWYodm9pZCAwPT09YSlyZXR1cm4gYy50ZXh0KCk7e2xldCB1PS9jaGFyc2V0PSI/KFteOyJcc10qKSI/L2kuZXhlYyhhKSxwPXUmJnVbMV0/dVsxXS50b0xvd2VyQ2FzZSgpOnZvaWQgMCxmPW5ldyBUZXh0RGVjb2RlcihwKTtyZXR1cm4gYy5hcnJheUJ1ZmZlcigpLnRoZW4obT0+Zi5kZWNvZGUobSkpfX19KS50aGVuKGM9PntyXy5hZGQodCxjKTtsZXQgZD16ZFt0XTtkZWxldGUgemRbdF07Zm9yKGxldCB1PTAscD1kLmxlbmd0aDt1PHA7dSsrKXtsZXQgZj1kW3VdO2Yub25Mb2FkJiZmLm9uTG9hZChjKX19KS5jYXRjaChjPT57bGV0IGQ9emRbdF07aWYodm9pZCAwPT09ZCl0aHJvdyB0aGlzLm1hbmFnZXIuaXRlbUVycm9yKHQpLGM7ZGVsZXRlIHpkW3RdO2ZvcihsZXQgdT0wLHA9ZC5sZW5ndGg7dTxwO3UrKyl7bGV0IGY9ZFt1XTtmLm9uRXJyb3ImJmYub25FcnJvcihjKX10aGlzLm1hbmFnZXIuaXRlbUVycm9yKHQpfSkuZmluYWxseSgoKT0+e3RoaXMubWFuYWdlci5pdGVtRW5kKHQpfSksdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KX1zZXRSZXNwb25zZVR5cGUodCl7cmV0dXJuIHRoaXMucmVzcG9uc2VUeXBlPXQsdGhpc31zZXRNaW1lVHlwZSh0KXtyZXR1cm4gdGhpcy5taW1lVHlwZT10LHRoaXN9fSxVST1jbGFzcyBleHRlbmRzIFFje2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7dm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLHM9cl8uZ2V0KHQpO2lmKHZvaWQgMCE9PXMpcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUocyksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLHM7bGV0IGE9TXgoImltZyIpO2Z1bmN0aW9uIGwoKXtkKCkscl8uYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKHUpe2QoKSxyJiZyKHUpLG8ubWFuYWdlci5pdGVtRXJyb3IodCksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gZCgpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksImRhdGE6IiE9PXQuc3Vic3RyKDAsNSkmJnZvaWQgMCE9PXRoaXMuY3Jvc3NPcmlnaW4mJihhLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLG8ubWFuYWdlci5pdGVtU3RhcnQodCksYS5zcmM9dCxhfX0sQkI9Y2xhc3MgZXh0ZW5kcyBRY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPW5ldyBRMCxzPW5ldyBVSSh0aGlzLm1hbmFnZXIpO3Muc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbikscy5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IGE9MDtmdW5jdGlvbiBsKGMpe3MubG9hZCh0W2NdLGZ1bmN0aW9uKGQpe28uaW1hZ2VzW2NdPWQsYSsrLDY9PT1hJiYoby5uZWVkc1VwZGF0ZT0hMCxlJiZlKG8pKX0sdm9pZCAwLHIpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIG99fSxWQj1jbGFzcyBleHRlbmRzIFFje2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7bGV0IG89bmV3IGxvLHM9bmV3IFVJKHRoaXMubWFuYWdlcik7cmV0dXJuIHMuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbikscy5zZXRQYXRoKHRoaXMucGF0aCkscy5sb2FkKHQsZnVuY3Rpb24oYSl7by5pbWFnZT1hLG8ubmVlZHNVcGRhdGU9ITAsdm9pZCAwIT09ZSYmZShvKX0saSxyKSxvfX0sYWw9Y2xhc3MgZXh0ZW5kcyBCaXtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBhbih0KSx0aGlzLmludGVuc2l0eT1lfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLGUub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx2b2lkIDAhPT10aGlzLmdyb3VuZENvbG9yJiYoZS5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5kaXN0YW5jZSYmKGUub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYW5nbGUmJihlLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx2b2lkIDAhPT10aGlzLmRlY2F5JiYoZS5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdm9pZCAwIT09dGhpcy5wZW51bWJyYSYmKGUub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHZvaWQgMCE9PXRoaXMuc2hhZG93JiYoZS5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxlfX07YWwucHJvdG90eXBlLmlzTGlnaHQ9ITAsY2xhc3MgZXh0ZW5kcyBhbHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxpKSx0aGlzLnR5cGU9IkhlbWlzcGhlcmVMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KEJpLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLmdyb3VuZENvbG9yPW5ldyBhbihlKX1jb3B5KHQpe3JldHVybiBhbC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5ncm91bmRDb2xvci5jb3B5KHQuZ3JvdW5kQ29sb3IpLHRoaXN9fS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHQ9ITA7dmFyIExlZT1uZXcgeG4sQmVlPW5ldyAkLFZlZT1uZXcgJCxVeD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmNhbWVyYT10LHRoaXMuYmlhcz0wLHRoaXMubm9ybWFsQmlhcz0wLHRoaXMucmFkaXVzPTEsdGhpcy5ibHVyU2FtcGxlcz04LHRoaXMubWFwU2l6ZT1uZXcgJGUoNTEyLDUxMiksdGhpcy5tYXA9bnVsbCx0aGlzLm1hcFBhc3M9bnVsbCx0aGlzLm1hdHJpeD1uZXcgeG4sdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy5fZnJ1c3R1bT1uZXcgWjAsdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyAkZSgxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBaaSgwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4O0JlZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksZS5wb3NpdGlvbi5jb3B5KEJlZSksVmVlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQoVmVlKSxlLnVwZGF0ZU1hdHJpeFdvcmxkKCksTGVlLm11bHRpcGx5TWF0cmljZXMoZS5wcm9qZWN0aW9uTWF0cml4LGUubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KExlZSksaS5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksaS5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLGkubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfWdldFZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19Z2V0RnJhbWVFeHRlbnRzKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c31kaXNwb3NlKCl7dGhpcy5tYXAmJnRoaXMubWFwLmRpc3Bvc2UoKSx0aGlzLm1hcFBhc3MmJnRoaXMubWFwUGFzcy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gdGhpcy5jYW1lcmE9dC5jYW1lcmEuY2xvbmUoKSx0aGlzLmJpYXM9dC5iaWFzLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMubWFwU2l6ZS5jb3B5KHQubWFwU2l6ZSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17fTtyZXR1cm4gMCE9PXRoaXMuYmlhcyYmKHQuYmlhcz10aGlzLmJpYXMpLDAhPT10aGlzLm5vcm1hbEJpYXMmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSwxIT09dGhpcy5yYWRpdXMmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksKDUxMiE9PXRoaXMubWFwU2l6ZS54fHw1MTIhPT10aGlzLm1hcFNpemUueSkmJih0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0sakk9Y2xhc3MgZXh0ZW5kcyBVeHtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBlcyg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPTIqbkIqdC5hbmdsZSp0aGlzLmZvY3VzLHI9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQsbz10LmRpc3RhbmNlfHxlLmZhcjsoaSE9PWUuZm92fHxyIT09ZS5hc3BlY3R8fG8hPT1lLmZhcikmJihlLmZvdj1pLGUuYXNwZWN0PXIsZS5mYXI9byxlLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksc3VwZXIudXBkYXRlTWF0cmljZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZvY3VzPXQuZm9jdXMsdGhpc319O2pJLnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIGFse2NvbnN0cnVjdG9yKHQsZSxpPTAscj1NYXRoLlBJLzMsbz0wLHM9MSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KEJpLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgQmksdGhpcy5kaXN0YW5jZT1pLHRoaXMuYW5nbGU9cix0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1zLHRoaXMuc2hhZG93PW5ldyBqSX1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIEhlZT1uZXcgeG4sZng9bmV3ICQsWDM9bmV3ICQsR0k9Y2xhc3MgZXh0ZW5kcyBVeHtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBlcyg5MCwxLC41LDUwMCkpLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgJGUoNCwyKSx0aGlzLl92aWV3cG9ydENvdW50PTYsdGhpcy5fdmlld3BvcnRzPVtuZXcgWmkoMiwxLDEsMSksbmV3IFppKDAsMSwxLDEpLG5ldyBaaSgzLDEsMSwxKSxuZXcgWmkoMSwxLDEsMSksbmV3IFppKDMsMCwxLDEpLG5ldyBaaSgxLDAsMSwxKV0sdGhpcy5fY3ViZURpcmVjdGlvbnM9W25ldyAkKDEsMCwwKSxuZXcgJCgtMSwwLDApLG5ldyAkKDAsMCwxKSxuZXcgJCgwLDAsLTEpLG5ldyAkKDAsMSwwKSxuZXcgJCgwLC0xLDApXSx0aGlzLl9jdWJlVXBzPVtuZXcgJCgwLDEsMCksbmV3ICQoMCwxLDApLG5ldyAkKDAsMSwwKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwwLDEpLG5ldyAkKDAsMCwtMSldfXVwZGF0ZU1hdHJpY2VzKHQsZT0wKXtsZXQgaT10aGlzLmNhbWVyYSxyPXRoaXMubWF0cml4LG89dC5kaXN0YW5jZXx8aS5mYXI7byE9PWkuZmFyJiYoaS5mYXI9byxpLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksZnguc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGkucG9zaXRpb24uY29weShmeCksWDMuY29weShpLnBvc2l0aW9uKSxYMy5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbZV0pLGkudXAuY29weSh0aGlzLl9jdWJlVXBzW2VdKSxpLmxvb2tBdChYMyksaS51cGRhdGVNYXRyaXhXb3JsZCgpLHIubWFrZVRyYW5zbGF0aW9uKC1meC54LC1meC55LC1meC56KSxIZWUubXVsdGlwbHlNYXRyaWNlcyhpLnByb2plY3Rpb25NYXRyaXgsaS5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoSGVlKX19O0dJLnByb3RvdHlwZS5pc1BvaW50TGlnaHRTaGFkb3c9ITAsY2xhc3MgZXh0ZW5kcyBhbHtjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9MSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlBvaW50TGlnaHQiLHRoaXMuZGlzdGFuY2U9aSx0aGlzLmRlY2F5PXIsdGhpcy5zaGFkb3c9bmV3IEdJfWdldCBwb3dlcigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvKDQqTWF0aC5QSSl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0ucHJvdG90eXBlLmlzUG9pbnRMaWdodD0hMDt2YXIgV0k9Y2xhc3MgZXh0ZW5kcyBVeHtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBtbSgtNSw1LDUsLTUsLjUsNTAwKSl9fTtXSS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0U2hhZG93PSEwLGNsYXNzIGV4dGVuZHMgYWx7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KEJpLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgQmksdGhpcy5zaGFkb3c9bmV3IFdJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITAsY2xhc3MgZXh0ZW5kcyBhbHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJBbWJpZW50TGlnaHQifX0ucHJvdG90eXBlLmlzQW1iaWVudExpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgYWx7Y29uc3RydWN0b3IodCxlLGk9MTAscj0xMCl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiLHRoaXMud2lkdGg9aSx0aGlzLmhlaWdodD1yfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSp0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvKHRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC53aWR0aD10aGlzLndpZHRoLGUub2JqZWN0LmhlaWdodD10aGlzLmhlaWdodCxlfX0ucHJvdG90eXBlLmlzUmVjdEFyZWFMaWdodD0hMDt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNvZWZmaWNpZW50cz1bXTtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzLnB1c2gobmV3ICQpfXNldCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmNvcHkodFtlXSk7cmV0dXJuIHRoaXN9emVybygpe2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHNbdF0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc31nZXRBdCh0LGUpe2xldCBpPXQueCxyPXQueSxvPXQueixzPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiBlLmNvcHkoc1swXSkubXVsdGlwbHlTY2FsYXIoLjI4MjA5NSksZS5hZGRTY2FsZWRWZWN0b3Ioc1sxXSwuNDg4NjAzKnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMl0sLjQ4ODYwMypvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzNdLC40ODg2MDMqaSksZS5hZGRTY2FsZWRWZWN0b3Ioc1s0XSxpKnIqMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNV0scipvKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihzWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxlLmFkZFNjYWxlZFZlY3RvcihzWzddLGkqbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s4XSwuNTQ2Mjc0KihpKmktcipyKSksZX1nZXRJcnJhZGlhbmNlQXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lnoscz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KHNbMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMV0sMS4wMjMzMjgqciksZS5hZGRTY2FsZWRWZWN0b3Ioc1syXSwxLjAyMzMyOCpvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzNdLDEuMDIzMzI4KmkpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNF0sLjg1ODA4NippKnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNV0sLjg1ODA4NipyKm8pLGUuYWRkU2NhbGVkVmVjdG9yKHNbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s3XSwuODU4MDg2KmkqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1s4XSwuNDI5MDQzKihpKmktcipyKSksZX1hZGQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5hZGQodC5jb2VmZmljaWVudHNbZV0pO3JldHVybiB0aGlzfWFkZFNjYWxlZFNIKHQsZSl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmNvZWZmaWNpZW50c1tpXS5hZGRTY2FsZWRWZWN0b3IodC5jb2VmZmljaWVudHNbaV0sZSk7cmV0dXJuIHRoaXN9c2NhbGUodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5tdWx0aXBseVNjYWxhcih0KTtyZXR1cm4gdGhpc31sZXJwKHQsZSl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmNvZWZmaWNpZW50c1tpXS5sZXJwKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfWVxdWFscyh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tlXS5lcXVhbHModC5jb2VmZmljaWVudHNbZV0pKXJldHVybiExO3JldHVybiEwfWNvcHkodCl7cmV0dXJuIHRoaXMuc2V0KHQuY29lZmZpY2llbnRzKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS5mcm9tQXJyYXkodCxlKzMqcik7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLnRvQXJyYXkodCxlKzMqcik7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypyLGVbMl09LjQ4ODYwMypvLGVbM109LjQ4ODYwMyppLGVbNF09MS4wOTI1NDgqaSpyLGVbNV09MS4wOTI1NDgqcipvLGVbNl09LjMxNTM5MiooMypvKm8tMSksZVs3XT0xLjA5MjU0OCppKm8sZVs4XT0uNTQ2Mjc0KihpKmktcipyKX19O3FJLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIGp4PWNsYXNzIGV4dGVuZHMgYWx7Y29uc3RydWN0b3IodD1uZXcgcUksZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19O2p4LnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIHFCPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlcjwidSIpcmV0dXJuKG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKHQpO2xldCBlPSIiO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9Y2F0Y2h7cmV0dXJuIGV9fXN0YXRpYyBleHRyYWN0VXJsQmFzZSh0KXtsZXQgZT10Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lPyIuLyI6dC5zdWJzdHIoMCxlKzEpfXN0YXRpYyByZXNvbHZlVVJMKHQsZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0fHwiIj09PXQ/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KGUpJiYvXlwvLy50ZXN0KHQpJiYoZT1lLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OmUrdCl9fTsoY2xhc3MgZXh0ZW5kcyBVaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbnN0YW5jZUNvdW50PTEvMH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VDb3VudD10Lmluc3RhbmNlQ291bnQsdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fSkucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk9ITAsY2xhc3MgZXh0ZW5kcyBRY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA+InUiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPiJ1IiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LGUsaSxyKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLHM9cl8uZ2V0KHQpO2lmKHZvaWQgMCE9PXMpcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUocyksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLHM7bGV0IGE9e307YS5jcmVkZW50aWFscz0iYW5vbnltb3VzIj09PXRoaXMuY3Jvc3NPcmlnaW4/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXtyXy5hZGQodCxsKSxlJiZlKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7ciYmcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19LnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBtSSxRQj1jbGFzcyBleHRlbmRzIFFje2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7bGV0IG89dGhpcyxzPW5ldyBMQih0aGlzLm1hbmFnZXIpO3Muc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihhKXt0cnl7bGV0IGw9YS5zbGljZSgwKTsodm9pZCAwPT09bUkmJihtST1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLG1JKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbihkKXtlKGQpfSl9Y2F0Y2gobCl7cj9yKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LGkscil9fTsoY2xhc3MgZXh0ZW5kcyBqeHtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih2b2lkIDAsaSk7bGV0IHI9KG5ldyBhbikuc2V0KHQpLG89KG5ldyBhbikuc2V0KGUpLHM9bmV3ICQoci5yLHIuZyxyLmIpLGE9bmV3ICQoby5yLG8uZyxvLmIpLGw9TWF0aC5zcXJ0KE1hdGguUEkpLGM9bCpNYXRoLnNxcnQoLjc1KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5jb3B5KHMpLmFkZChhKS5tdWx0aXBseVNjYWxhcihsKSx0aGlzLnNoLmNvZWZmaWNpZW50c1sxXS5jb3B5KHMpLnN1YihhKS5tdWx0aXBseVNjYWxhcihjKX19KS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMCxjbGFzcyBleHRlbmRzIGp4e2NvbnN0cnVjdG9yKHQsZT0xKXtzdXBlcih2b2lkIDAsZSk7bGV0IGk9KG5ldyBhbikuc2V0KHQpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLnNldChpLnIsaS5nLGkuYikubXVsdGlwbHlTY2FsYXIoMipNYXRoLnNxcnQoTWF0aC5QSSkpfX0ucHJvdG90eXBlLmlzQW1iaWVudExpZ2h0UHJvYmU9ITA7dmFyIGVWPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcixvLHM7c3dpdGNoKHRoaXMuYmluZGluZz10LHRoaXMudmFsdWVTaXplPWksZSl7Y2FzZSJxdWF0ZXJuaW9uIjpyPXRoaXMuX3NsZXJwLG89dGhpcy5fc2xlcnBBZGRpdGl2ZSxzPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoNippKSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjpyPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NlbGVjdCxzPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkoNSppKTticmVhaztkZWZhdWx0OnI9dGhpcy5fbGVycCxvPXRoaXMuX2xlcnBBZGRpdGl2ZSxzPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoNSppKX10aGlzLl9taXhCdWZmZXJSZWdpb249cix0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1vLHRoaXMuX3NldElkZW50aXR5PXMsdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LGUpe2xldCBpPXRoaXMuYnVmZmVyLHI9dGhpcy52YWx1ZVNpemUsbz10KnIrcixzPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZigwPT09cyl7Zm9yKGxldCBhPTA7YSE9PXI7KythKWlbbythXT1pW2FdO3M9ZX1lbHNlIHMrPWUsdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGksbywwLGUvcyxyKTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9c31hY2N1bXVsYXRlQWRkaXRpdmUodCl7bGV0IGU9dGhpcy5idWZmZXIsaT10aGlzLnZhbHVlU2l6ZSxyPWkqdGhpcy5fYWRkSW5kZXg7MD09PXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlJiZ0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGUsciwwLHQsaSksdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUrPXR9YXBwbHkodCl7bGV0IGU9dGhpcy52YWx1ZVNpemUsaT10aGlzLmJ1ZmZlcixyPXQqZStlLG89dGhpcy5jdW11bGF0aXZlV2VpZ2h0LHM9dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUsYT10aGlzLmJpbmRpbmc7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCxvPDEmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbihpLHIsZSp0aGlzLl9vcmlnSW5kZXgsMS1vLGUpLHM+MCYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoaSxyLHRoaXMuX2FkZEluZGV4KmUsMSxlKTtmb3IobGV0IGw9ZSxjPWUrZTtsIT09YzsrK2wpaWYoaVtsXSE9PWlbbCtlXSl7YS5zZXRWYWx1ZShpLHIpO2JyZWFrfX1zYXZlT3JpZ2luYWxTdGF0ZSgpe2xldCBlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX29yaWdJbmRleDt0aGlzLmJpbmRpbmcuZ2V0VmFsdWUoZSxyKTtmb3IobGV0IG89aSxzPXI7byE9PXM7KytvKWVbb109ZVtyK28laV07dGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wfXJlc3RvcmVPcmlnaW5hbFN0YXRlKCl7dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLDMqdGhpcy52YWx1ZVNpemUpfV9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpe2xldCB0PXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplLGU9dCt0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IGk9dDtpPGU7aSsrKXRoaXMuYnVmZmVyW2ldPTB9X3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uKCl7dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKSx0aGlzLmJ1ZmZlclt0aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSszXT0xfV9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIoKXtsZXQgdD10aGlzLl9vcmlnSW5kZXgqdGhpcy52YWx1ZVNpemUsZT10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IGk9MDtpPHRoaXMudmFsdWVTaXplO2krKyl0aGlzLmJ1ZmZlcltlK2ldPXRoaXMuYnVmZmVyW3QraV19X3NlbGVjdCh0LGUsaSxyLG8pe2lmKHI+PS41KWZvcihsZXQgcz0wO3MhPT1vOysrcyl0W2Urc109dFtpK3NdfV9zbGVycCh0LGUsaSxyKXt0cy5zbGVycEZsYXQodCxlLHQsZSx0LGkscil9X3NsZXJwQWRkaXRpdmUodCxlLGkscixvKXtsZXQgcz10aGlzLl93b3JrSW5kZXgqbzt0cy5tdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LHMsdCxlLHQsaSksdHMuc2xlcnBGbGF0KHQsZSx0LGUsdCxzLHIpfV9sZXJwKHQsZSxpLHIsbyl7bGV0IHM9MS1yO2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IGw9ZSthO3RbbF09dFtsXSpzK3RbaSthXSpyfX1fbGVycEFkZGl0aXZlKHQsZSxpLHIsbyl7Zm9yKGxldCBzPTA7cyE9PW87KytzKXtsZXQgYT1lK3M7dFthXT10W2FdK3RbaStzXSpyfX19LGhWPSJcXFtcXF1cXC46XFwvIixQMmU9bmV3IFJlZ0V4cCgiWyIraFYrIl0iLCJnIiksZ1Y9IlteIitoVisiXSIsTzJlPSJbXiIraFYucmVwbGFjZSgiXFwuIiwiIikrIl0iLGsyZT0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLGdWKSxGMmU9LyhXQ09EKyk/Ly5zb3VyY2UucmVwbGFjZSgiV0NPRCIsTzJlKSxOMmU9Lyg/OlwuKFdDKykoPzpcWyguKylcXSk/KT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsZ1YpLEwyZT0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsZ1YpLEIyZT1uZXcgUmVnRXhwKCJeIitrMmUrRjJlK04yZStMMmUrIiQiKSxWMmU9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0sdFY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCByPWl8fHhyLnBhcnNlVHJhY2tOYW1lKGUpO3RoaXMuX3RhcmdldEdyb3VwPXQsdGhpcy5fYmluZGluZ3M9dC5zdWJzY3JpYmVfKGUscil9Z2V0VmFsdWUodCxlKXt0aGlzLmJpbmQoKTtsZXQgcj10aGlzLl9iaW5kaW5nc1t0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c19dO3ZvaWQgMCE9PXImJnIuZ2V0VmFsdWUodCxlKX1zZXRWYWx1ZSh0LGUpe2xldCBpPXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbz1pLmxlbmd0aDtyIT09bzsrK3IpaVtyXS5zZXRWYWx1ZSh0LGUpfWJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0uYmluZCgpfXVuYmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgZT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18saT10Lmxlbmd0aDtlIT09aTsrK2UpdFtlXS51bmJpbmQoKX19LHhyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMucGF0aD1pLHRoaXMucGFyc2VkUGF0aD1yfHxuLnBhcnNlVHJhY2tOYW1lKGkpLHRoaXMubm9kZT1uLmZpbmROb2RlKGUsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8ZSx0aGlzLnJvb3ROb2RlPWUsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH1zdGF0aWMgY3JlYXRlKGUsaSxyKXtyZXR1cm4gZSYmZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwP25ldyBuLkNvbXBvc2l0ZShlLGkscik6bmV3IG4oZSxpLHIpfXN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKGUpe3JldHVybiBlLnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKFAyZSwiIil9c3RhdGljIHBhcnNlVHJhY2tOYW1lKGUpe2xldCBpPUIyZS5leGVjKGUpO2lmKCFpKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tOYW1lOiAiK2UpO2xldCByPXtub2RlTmFtZTppWzJdLG9iamVjdE5hbWU6aVszXSxvYmplY3RJbmRleDppWzRdLHByb3BlcnR5TmFtZTppWzVdLHByb3BlcnR5SW5kZXg6aVs2XX0sbz1yLm5vZGVOYW1lJiZyLm5vZGVOYW1lLmxhc3RJbmRleE9mKCIuIik7aWYodm9pZCAwIT09byYmLTEhPT1vKXtsZXQgcz1yLm5vZGVOYW1lLnN1YnN0cmluZyhvKzEpOy0xIT09VjJlLmluZGV4T2YocykmJihyLm5vZGVOYW1lPXIubm9kZU5hbWUuc3Vic3RyaW5nKDAsbyksci5vYmplY3ROYW1lPXMpfWlmKG51bGw9PT1yLnByb3BlcnR5TmFtZXx8MD09PXIucHJvcGVydHlOYW1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrZSk7cmV0dXJuIHJ9c3RhdGljIGZpbmROb2RlKGUsaSl7aWYoIWl8fCIiPT09aXx8Ii4iPT09aXx8LTE9PT1pfHxpPT09ZS5uYW1lfHxpPT09ZS51dWlkKXJldHVybiBlO2lmKGUuc2tlbGV0b24pe2xldCByPWUuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShpKTtpZih2b2lkIDAhPT1yKXJldHVybiByfWlmKGUuY2hpbGRyZW4pe2xldCByPWZ1bmN0aW9uKHMpe2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXQgbD1zW2FdO2lmKGwubmFtZT09PWl8fGwudXVpZD09PWkpcmV0dXJuIGw7bGV0IGM9cihsLmNoaWxkcmVuKTtpZihjKXJldHVybiBjfXJldHVybiBudWxsfSxvPXIoZS5jaGlsZHJlbik7aWYobylyZXR1cm4gb31yZXR1cm4gbnVsbH1fZ2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X3NldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9nZXRWYWx1ZV9kaXJlY3QoZSxpKXtlW2ldPXRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXX1fZ2V0VmFsdWVfYXJyYXkoZSxpKXtsZXQgcj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvIT09czsrK28pZVtpKytdPXJbb119X2dldFZhbHVlX2FycmF5RWxlbWVudChlLGkpe2VbaV09dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF19X2dldFZhbHVlX3RvQXJyYXkoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShlLGkpfV9zZXRWYWx1ZV9kaXJlY3QoZSxpKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09ZVtpXX1fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlKGUsaSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXkoZSxpKXtsZXQgcj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvIT09czsrK28pcltvXT1lW2krK119X3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlKGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKXJbb109ZVtpKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKXJbb109ZVtpKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudChlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbaV19X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09ZVtpXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXkoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsaSl9X3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoZSxpKSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsaSksdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fZ2V0VmFsdWVfdW5ib3VuZChlLGkpe3RoaXMuYmluZCgpLHRoaXMuZ2V0VmFsdWUoZSxpKX1fc2V0VmFsdWVfdW5ib3VuZChlLGkpe3RoaXMuYmluZCgpLHRoaXMuc2V0VmFsdWUoZSxpKX1iaW5kKCl7bGV0IGU9dGhpcy5ub2RlLGk9dGhpcy5wYXJzZWRQYXRoLHI9aS5vYmplY3ROYW1lLG89aS5wcm9wZXJ0eU5hbWUscz1pLnByb3BlcnR5SW5kZXg7aWYoZXx8KGU9bi5maW5kTm9kZSh0aGlzLnJvb3ROb2RlLGkubm9kZU5hbWUpfHx0aGlzLnJvb3ROb2RlLHRoaXMubm9kZT1lKSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5hdmFpbGFibGUsIWUpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7aWYocil7bGV0IGQ9aS5vYmplY3RJbmRleDtzd2l0Y2gocil7Y2FzZSJtYXRlcmlhbHMiOmlmKCFlLm1hdGVyaWFsKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLiIsdGhpcyk7aWYoIWUubWF0ZXJpYWwubWF0ZXJpYWxzKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTtlPWUubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UiYm9uZXMiOmlmKCFlLnNrZWxldG9uKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7ZT1lLnNrZWxldG9uLmJvbmVzO2ZvcihsZXQgdT0wO3U8ZS5sZW5ndGg7dSsrKWlmKGVbdV0ubmFtZT09PWQpe2Q9dTticmVha31icmVhaztkZWZhdWx0OmlmKHZvaWQgMD09PWVbcl0pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gb2JqZWN0TmFtZSBvZiBub2RlIHVuZGVmaW5lZC4iLHRoaXMpO2U9ZVtyXX1pZih2b2lkIDAhPT1kKXtpZih2b2lkIDA9PT1lW2RdKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4iLHRoaXMsZSk7ZT1lW2RdfX1sZXQgYT1lW29dO2lmKHZvaWQgMD09PWEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIHByb3BlcnR5IGZvciB0cmFjazogIitpLm5vZGVOYW1lKyIuIitvKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iLGUpO2xldCBsPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PWUsdm9pZCAwIT09ZS5uZWVkc1VwZGF0ZT9sPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp2b2lkIDAhPT1lLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUmJihsPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgYz10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT1zKXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PW8pe2lmKCFlLmdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7aWYoIWUuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7aWYoIWUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4iLHRoaXMpO3ZvaWQgMCE9PWUubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdJiYocz1lLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXSl9Yz10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudCx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSx0aGlzLnByb3BlcnR5SW5kZXg9c31lbHNlIHZvaWQgMCE9PWEuZnJvbUFycmF5JiZ2b2lkIDAhPT1hLnRvQXJyYXk/KGM9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6QXJyYXkuaXNBcnJheShhKT8oYz10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTp0aGlzLnByb3BlcnR5TmFtZT1vO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW2NdLHRoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tjXVtsXX11bmJpbmQoKXt0aGlzLm5vZGU9bnVsbCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfX1yZXR1cm4gbi5Db21wb3NpdGU9dFYsbn0pKCk7eHIucHJvdG90eXBlLkJpbmRpbmdUeXBlPXtEaXJlY3Q6MCxFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LHhyLnByb3RvdHlwZS5WZXJzaW9uaW5nPXtOb25lOjAsTmVlZHNVcGRhdGU6MSxNYXRyaXhXb3JsZE5lZWRzVXBkYXRlOjJ9LHhyLnByb3RvdHlwZS5HZXR0ZXJCeUJpbmRpbmdUeXBlPVt4ci5wcm90b3R5cGUuX2dldFZhbHVlX2RpcmVjdCx4ci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5LHhyLnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXlFbGVtZW50LHhyLnByb3RvdHlwZS5fZ2V0VmFsdWVfdG9BcnJheV0seHIucHJvdG90eXBlLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nPVtbeHIucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3QseHIucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUseHIucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW3hyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXkseHIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSx4ci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFt4ci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudCx4ci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSx4ci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbeHIucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXkseHIucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUseHIucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV1dLGNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfV9iaW5kQWN0aW9uKHQsZSl7bGV0IGk9dC5fbG9jYWxSb290fHx0aGlzLl9yb290LHI9dC5fY2xpcC50cmFja3Msbz1yLmxlbmd0aCxzPXQuX3Byb3BlcnR5QmluZGluZ3MsYT10Ll9pbnRlcnBvbGFudHMsbD1pLnV1aWQsYz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsZD1jW2xdO3ZvaWQgMD09PWQmJihkPXt9LGNbbF09ZCk7Zm9yKGxldCB1PTA7dSE9PW87Kyt1KXtsZXQgcD1yW3VdLGY9cC5uYW1lLG09ZFtmXTtpZih2b2lkIDAhPT1tKSsrbS5yZWZlcmVuY2VDb3VudCxzW3VdPW07ZWxzZXtpZihtPXNbdV0sdm9pZCAwIT09bSl7bnVsbD09PW0uX2NhY2hlSW5kZXgmJigrK20ucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKG0sbCxmKSk7Y29udGludWV9bT1uZXcgZVYoeHIuY3JlYXRlKGksZixlJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW3VdLmJpbmRpbmcucGFyc2VkUGF0aCkscC5WYWx1ZVR5cGVOYW1lLHAuZ2V0VmFsdWVTaXplKCkpLCsrbS5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcobSxsLGYpLHNbdV09bX1hW3VdLnJlc3VsdEJ1ZmZlcj1tLmJ1ZmZlcn19X2FjdGl2YXRlQWN0aW9uKHQpe2lmKCF0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7aWYobnVsbD09PXQuX2NhY2hlSW5kZXgpe2xldCBpPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQscj10Ll9jbGlwLnV1aWQsbz10aGlzLl9hY3Rpb25zQnlDbGlwW3JdO3RoaXMuX2JpbmRBY3Rpb24odCxvJiZvLmtub3duQWN0aW9uc1swXSksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odCxyLGkpfWxldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09by51c2VDb3VudCsrJiYodGhpcy5fbGVuZEJpbmRpbmcobyksby5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKHQpfX1fZGVhY3RpdmF0ZUFjdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IG89ZVtpXTswPT0tLW8udXNlQ291bnQmJihvLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKG8pKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19X2luaXRNZW1vcnlNYW5hZ2VyKCl7dGhpcy5fYWN0aW9ucz1bXSx0aGlzLl9uQWN0aXZlQWN0aW9ucz0wLHRoaXMuX2FjdGlvbnNCeUNsaXA9e30sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTAsdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9LHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W10sdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDtsZXQgdD10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9iaW5kaW5ncy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQmluZGluZ3N9fSxjb250cm9sSW50ZXJwb2xhbnRzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fY29udHJvbEludGVycG9sYW50cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQ29udHJvbEludGVycG9sYW50c319fX1faXNBY3RpdmVBY3Rpb24odCl7bGV0IGU9dC5fY2FjaGVJbmRleDtyZXR1cm4gbnVsbCE9PWUmJmU8dGhpcy5fbkFjdGl2ZUFjdGlvbnN9X2FkZEluYWN0aXZlQWN0aW9uKHQsZSxpKXtsZXQgcj10aGlzLl9hY3Rpb25zLG89dGhpcy5fYWN0aW9uc0J5Q2xpcCxzPW9bZV07aWYodm9pZCAwPT09cylzPXtrbm93bkFjdGlvbnM6W3RdLGFjdGlvbkJ5Um9vdDp7fX0sdC5fYnlDbGlwQ2FjaGVJbmRleD0wLG9bZV09cztlbHNle2xldCBhPXMua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9YS5sZW5ndGgsYS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9ci5sZW5ndGgsci5wdXNoKHQpLHMuYWN0aW9uQnlSb290W2ldPXR9X3JlbW92ZUluYWN0aXZlQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT1lW2UubGVuZ3RoLTFdLHI9dC5fY2FjaGVJbmRleDtpLl9jYWNoZUluZGV4PXIsZVtyXT1pLGUucG9wKCksdC5fY2FjaGVJbmRleD1udWxsO2xldCBvPXQuX2NsaXAudXVpZCxzPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1zW29dLGw9YS5rbm93bkFjdGlvbnMsYz1sW2wubGVuZ3RoLTFdLGQ9dC5fYnlDbGlwQ2FjaGVJbmRleDtjLl9ieUNsaXBDYWNoZUluZGV4PWQsbFtkXT1jLGwucG9wKCksdC5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGRlbGV0ZSBhLmFjdGlvbkJ5Um9vdFsodC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkXSwwPT09bC5sZW5ndGgmJmRlbGV0ZSBzW29dLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl9X3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl7bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IG89ZVtpXTswPT0tLW8ucmVmZXJlbmNlQ291bnQmJnRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhvKX19X2xlbmRBY3Rpb24odCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQuX2NhY2hlSW5kZXgscj10aGlzLl9uQWN0aXZlQWN0aW9ucysrLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X3Rha2VCYWNrQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9LS10aGlzLl9uQWN0aXZlQWN0aW9ucyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV9hZGRJbmFjdGl2ZUJpbmRpbmcodCxlLGkpe2xldCByPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPXRoaXMuX2JpbmRpbmdzLHM9cltlXTt2b2lkIDA9PT1zJiYocz17fSxyW2VdPXMpLHNbaV09dCx0Ll9jYWNoZUluZGV4PW8ubGVuZ3RoLG8ucHVzaCh0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5iaW5kaW5nLHI9aS5yb290Tm9kZS51dWlkLG89aS5wYXRoLHM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGE9c1tyXSxsPWVbZS5sZW5ndGgtMV0sYz10Ll9jYWNoZUluZGV4O2wuX2NhY2hlSW5kZXg9YyxlW2NdPWwsZS5wb3AoKSxkZWxldGUgYVtvXSwwPT09T2JqZWN0LmtleXMoYSkubGVuZ3RoJiZkZWxldGUgc1tyXX1fbGVuZEJpbmRpbmcodCl7bGV0IGU9dGhpcy5fYmluZGluZ3MsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzKyssbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fdGFrZUJhY2tCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKXtsZXQgdD10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLGU9dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKyxpPXRbZV07cmV0dXJuIHZvaWQgMD09PWkmJihpPW5ldyBWSShuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSxpLl9fY2FjaGVJbmRleD1lLHRbZV09aSksaX1fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCl7bGV0IGU9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxpPXQuX19jYWNoZUluZGV4LHI9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxvPWVbcl07dC5fX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fX2NhY2hlSW5kZXg9aSxlW2ldPW99Y2xpcEFjdGlvbih0LGUsaSl7bGV0IHI9ZXx8dGhpcy5fcm9vdCxvPXIudXVpZCxzPSJzdHJpbmciPT10eXBlb2YgdD96SS5maW5kQnlOYW1lKHIsdCk6dCxhPW51bGwhPT1zP3MudXVpZDp0LGw9dGhpcy5fYWN0aW9uc0J5Q2xpcFthXSxjPW51bGw7aWYodm9pZCAwPT09aSYmKGk9bnVsbCE9PXM/cy5ibGVuZE1vZGU6MjUwMCksdm9pZCAwIT09bCl7bGV0IHU9bC5hY3Rpb25CeVJvb3Rbb107aWYodm9pZCAwIT09dSYmdS5ibGVuZE1vZGU9PT1pKXJldHVybiB1O2M9bC5rbm93bkFjdGlvbnNbMF0sbnVsbD09PXMmJihzPWMuX2NsaXApfWlmKG51bGw9PT1zKXJldHVybiBudWxsO2xldCBkPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT1udWxsLHI9ZS5ibGVuZE1vZGUpe3RoaXMuX21peGVyPXQsdGhpcy5fY2xpcD1lLHRoaXMuX2xvY2FsUm9vdD1pLHRoaXMuYmxlbmRNb2RlPXI7bGV0IG89ZS50cmFja3Mscz1vLmxlbmd0aCxhPW5ldyBBcnJheShzKSxsPXtlbmRpbmdTdGFydDpWMCxlbmRpbmdFbmQ6VjB9O2ZvcihsZXQgYz0wO2MhPT1zOysrYyl7bGV0IGQ9b1tjXS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTthW2NdPWQsZC5zZXR0aW5ncz1sfXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M9bCx0aGlzLl9pbnRlcnBvbGFudHM9YSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzPW5ldyBBcnJheShzKSx0aGlzLl9jYWNoZUluZGV4PW51bGwsdGhpcy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLmxvb3A9MjIwMSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmMCE9PXRoaXMudGltZVNjYWxlJiZudWxsPT09dGhpcy5fc3RhcnRUaW1lJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LGUpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPWUsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LGUsaSl7aWYodC5mYWRlT3V0KGUpLHRoaXMuZmFkZUluKGUpLGkpe2xldCByPXRoaXMuX2NsaXAuZHVyYXRpb24sbz10Ll9jbGlwLmR1cmF0aW9uLGE9ci9vO3Qud2FycCgxLG8vcixlKSx0aGlzLndhcnAoYSwxLGUpfXJldHVybiB0aGlzfWNyb3NzRmFkZVRvKHQsZSxpKXtyZXR1cm4gdC5jcm9zc0ZhZGVGcm9tKHRoaXMsZSxpKX1zdG9wRmFkaW5nKCl7bGV0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIG51bGwhPT10JiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixvPXIudGltZSxzPXRoaXMudGltZVNjYWxlLGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbD09PWEmJihhPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1hKTtsZXQgbD1hLnBhcmFtZXRlclBvc2l0aW9ucyxjPWEuc2FtcGxlVmFsdWVzO3JldHVybiBsWzBdPW8sbFsxXT1vK2ksY1swXT10L3MsY1sxXT1lL3MsdGhpc31zdG9wV2FycGluZygpe2xldCB0PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfWdldE1peGVyKCl7cmV0dXJuIHRoaXMuX21peGVyfWdldENsaXAoKXtyZXR1cm4gdGhpcy5fY2xpcH1nZXRSb290KCl7cmV0dXJuIHRoaXMuX2xvY2FsUm9vdHx8dGhpcy5fbWl4ZXIuX3Jvb3R9X3VwZGF0ZSh0LGUsaSxyKXtpZighdGhpcy5lbmFibGVkKXJldHVybiB2b2lkIHRoaXMuX3VwZGF0ZVdlaWdodCh0KTtsZXQgbz10aGlzLl9zdGFydFRpbWU7aWYobnVsbCE9PW8pe2xldCBsPSh0LW8pKmk7aWYobDwwfHwwPT09aSlyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwsZT1pKmx9ZSo9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2xldCBzPXRoaXMuX3VwZGF0ZVRpbWUoZSksYT10aGlzLl91cGRhdGVXZWlnaHQodCk7aWYoYT4wKXtsZXQgbD10aGlzLl9pbnRlcnBvbGFudHMsYz10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO2lmKDI1MDE9PT10aGlzLmJsZW5kTW9kZSlmb3IobGV0IGQ9MCx1PWwubGVuZ3RoO2QhPT11OysrZClsW2RdLmV2YWx1YXRlKHMpLGNbZF0uYWNjdW11bGF0ZUFkZGl0aXZlKGEpO2Vsc2UgZm9yKGxldCBkPTAsdT1sLmxlbmd0aDtkIT09dTsrK2QpbFtkXS5ldmFsdWF0ZShzKSxjW2RdLmFjY3VtdWxhdGUocixhKX19X3VwZGF0ZVdlaWdodCh0KXtsZXQgZT0wO2lmKHRoaXMuZW5hYmxlZCl7ZT10aGlzLndlaWdodDtsZXQgaT10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtpZihudWxsIT09aSl7bGV0IHI9aS5ldmFsdWF0ZSh0KVswXTtlKj1yLHQ+aS5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BGYWRpbmcoKSwwPT09ciYmKHRoaXMuZW5hYmxlZD0hMSkpfX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PWUsZX1fdXBkYXRlVGltZVNjYWxlKHQpe2xldCBlPTA7aWYoIXRoaXMucGF1c2VkKXtlPXRoaXMudGltZVNjYWxlO2xldCBpPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGwhPT1pJiYoZSo9aS5ldmFsdWF0ZSh0KVswXSx0PmkucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wV2FycGluZygpLDA9PT1lP3RoaXMucGF1c2VkPSEwOnRoaXMudGltZVNjYWxlPWUpKX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPWUsZX1fdXBkYXRlVGltZSh0KXtsZXQgZT10aGlzLl9jbGlwLmR1cmF0aW9uLGk9dGhpcy5sb29wLHI9dGhpcy50aW1lK3Qsbz10aGlzLl9sb29wQ291bnQscz0yMjAyPT09aTtpZigwPT09dClyZXR1cm4tMT09PW8/cjpzJiYxPT0oMSZvKT9lLXI6cjtpZigyMjAwPT09aSl7LTE9PT1vJiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpO2U6e2lmKHI+PWUpcj1lO2Vsc2V7aWYoIShyPDApKXt0aGlzLnRpbWU9cjticmVhayBlfXI9MH10aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ8MD8tMToxfSl9fWVsc2V7aWYoLTE9PT1vJiYodD49MD8obz0wLHRoaXMuX3NldEVuZGluZ3MoITAsMD09PXRoaXMucmVwZXRpdGlvbnMscykpOnRoaXMuX3NldEVuZGluZ3MoMD09PXRoaXMucmVwZXRpdGlvbnMsITAscykpLHI+PWV8fHI8MCl7bGV0IGE9TWF0aC5mbG9vcihyL2UpO3ItPWUqYSxvKz1NYXRoLmFicyhhKTtsZXQgbD10aGlzLnJlcGV0aXRpb25zLW87aWYobDw9MCl0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSxyPXQ+MD9lOjAsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PjA/MTotMX0pO2Vsc2V7aWYoMT09PWwpe2xldCBjPXQ8MDt0aGlzLl9zZXRFbmRpbmdzKGMsIWMscyl9ZWxzZSB0aGlzLl9zZXRFbmRpbmdzKCExLCExLHMpO3RoaXMuX2xvb3BDb3VudD1vLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTphfSl9fWVsc2UgdGhpcy50aW1lPXI7aWYocyYmMT09KDEmbykpcmV0dXJuIGUtcn1yZXR1cm4gcn1fc2V0RW5kaW5ncyh0LGUsaSl7bGV0IHI9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztpPyhyLmVuZGluZ1N0YXJ0PUgwLHIuZW5kaW5nRW5kPUgwKTooci5lbmRpbmdTdGFydD10P3RoaXMuemVyb1Nsb3BlQXRTdGFydD9IMDpWMDoyNDAyLHIuZW5kaW5nRW5kPWU/dGhpcy56ZXJvU2xvcGVBdEVuZD9IMDpWMDoyNDAyKX1fc2NoZWR1bGVGYWRpbmcodCxlLGkpe2xldCByPXRoaXMuX21peGVyLG89ci50aW1lLHM9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bnVsbD09PXMmJihzPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1zKTtsZXQgYT1zLnBhcmFtZXRlclBvc2l0aW9ucyxsPXMuc2FtcGxlVmFsdWVzO3JldHVybiBhWzBdPW8sbFswXT1lLGFbMV09byt0LGxbMV09aSx0aGlzfX0odGhpcyxzLGUsaSk7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24oZCxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbihkLGEsbyksZH1leGlzdGluZ0FjdGlvbih0LGUpe2xldCBpPWV8fHRoaXMuX3Jvb3Qscj1pLnV1aWQsbz0ic3RyaW5nIj09dHlwZW9mIHQ/ekkuZmluZEJ5TmFtZShpLHQpOnQsYT10aGlzLl9hY3Rpb25zQnlDbGlwW28/by51dWlkOnRdO3JldHVybiB2b2lkIDAhPT1hJiZhLmFjdGlvbkJ5Um9vdFtyXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucztmb3IobGV0IGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMtMTtpPj0wOy0taSl0W2ldLnN0b3AoKTtyZXR1cm4gdGhpc311cGRhdGUodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXRoaXMuX25BY3RpdmVBY3Rpb25zLHI9dGhpcy50aW1lKz10Kj10aGlzLnRpbWVTY2FsZSxvPU1hdGguc2lnbih0KSxzPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09aTsrK2MpZVtjXS5fdXBkYXRlKHIsdCxvLHMpO2xldCBhPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylhW2NdLmFwcGx5KHMpO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCBlPTA7ZTx0aGlzLl9hY3Rpb25zLmxlbmd0aDtlKyspdGhpcy5fYWN0aW9uc1tlXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC51dWlkLHI9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPXJbaV07aWYodm9pZCAwIT09byl7bGV0IHM9by5rbm93bkFjdGlvbnM7Zm9yKGxldCBhPTAsbD1zLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXNbYV07dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgZD1jLl9jYWNoZUluZGV4LHU9ZVtlLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLHUuX2NhY2hlSW5kZXg9ZCxlW2RdPXUsZS5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSByW2ldfX11bmNhY2hlUm9vdCh0KXtsZXQgZT10LnV1aWQsaT10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgcyBpbiBpKXtsZXQgbD1pW3NdLmFjdGlvbkJ5Um9vdFtlXTt2b2lkIDAhPT1sJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihsKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihsKSl9bGV0IG89dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lW2VdO2lmKHZvaWQgMCE9PW8pZm9yKGxldCBzIGluIG8pe2xldCBhPW9bc107YS5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhhKX19dW5jYWNoZUFjdGlvbih0LGUpe2xldCBpPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtudWxsIT09aSYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaSksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaSkpfX0ucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIEd4PWNsYXNze2NvbnN0cnVjdG9yKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBHeCh2b2lkIDA9PT10aGlzLnZhbHVlLmNsb25lP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19OyhjbGFzcyBleHRlbmRzIGhte2NvbnN0cnVjdG9yKHQsZSxpPTEpe3N1cGVyKHQsZSksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9Y2xvbmUodCl7bGV0IGU9c3VwZXIuY2xvbmUodCk7cmV0dXJuIGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX10b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI9ITAsZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfX0pLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciB6ZWU9bmV3ICRlLHZtPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICRlKDEvMCwxLzApLGU9bmV3ICRlKC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KGUpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtsZXQgaT16ZWUuY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKGkpLHRoaXMubWF4LmNvcHkodCkuYWRkKGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5taW4uY29weSh0Lm1pbiksdGhpcy5tYXguY29weSh0Lm1heCksdGhpc31tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5taW4ueD10aGlzLm1pbi55PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl9Z2V0Q2VudGVyKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4LnkpfWNvbnRhaW5zQm94KHQpe3JldHVybiB0aGlzLm1pbi54PD10Lm1pbi54JiZ0Lm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD10Lm1pbi55JiZ0Lm1heC55PD10aGlzLm1heC55fWdldFBhcmFtZXRlcih0LGUpe3JldHVybiBlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSkpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4LnkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHplZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07dm0ucHJvdG90eXBlLmlzQm94Mj0hMDt2YXIgdXA9bmV3ICQsZ0k9bmV3IHhuLFEzPW5ldyB4bjtmdW5jdGlvbiBwdGUobil7bGV0IHQ9W107biYmbi5pc0JvbmUmJnQucHVzaChuKTtmb3IobGV0IGU9MDtlPG4uY2hpbGRyZW4ubGVuZ3RoO2UrKyl0LnB1c2guYXBwbHkodCxwdGUobi5jaGlsZHJlbltlXSkpO3JldHVybiB0fXZhciBIMmU9bmV3IEZsb2F0MzJBcnJheSgxKTtmdW5jdGlvbiBfVihuLHQsZSl7aWYoMT09PWUpcmV0dXJuIG5ldyBhbih0KTtsZXQgaT1WZih0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke3R9YCk7cmV0dXJuIG5ldyBhbihmTChpLG4pKDEtZSkpfW5ldyBJbnQzMkFycmF5KEgyZS5idWZmZXIpLCRzLmNyZWF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoJHMucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLmdldFBvaW50PXQsbn0sQngucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKG4pfSxjbGFzcyBleHRlbmRzIGt4e2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxpPTQ0NzM5MjQscj04OTQ3ODQ4KXtpPW5ldyBhbihpKSxyPW5ldyBhbihyKTtsZXQgbz1lLzIscz10L2UsYT10LzIsbD1bXSxjPVtdO2ZvcihsZXQgcD0wLGY9MCxtPS1hO3A8PWU7cCsrLG0rPXMpe2wucHVzaCgtYSwwLG0sYSwwLG0pLGwucHVzaChtLDAsLWEsbSwwLGEpO2xldCBiPXA9PT1vP2k6cjtiLnRvQXJyYXkoYyxmKSxmKz0zLGIudG9BcnJheShjLGYpLGYrPTMsYi50b0FycmF5KGMsZiksZis9MyxiLnRvQXJyYXkoYyxmKSxmKz0zfWxldCBkPW5ldyBVaTtkLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBOcihsLDMpKSxkLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBOcihjLDMpKSxzdXBlcihkLG5ldyBXZCh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJHcmlkSGVscGVyIn19LnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9LGNsYXNzIGV4dGVuZHMga3h7Y29uc3RydWN0b3IodCl7bGV0IGU9cHRlKHQpLGk9bmV3IFVpLHI9W10sbz1bXSxzPW5ldyBhbigwLDAsMSksYT1uZXcgYW4oMCwxLDApO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtsZXQgZD1lW2NdO2QucGFyZW50JiZkLnBhcmVudC5pc0JvbmUmJihyLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMCksby5wdXNoKHMucixzLmcscy5iKSxvLnB1c2goYS5yLGEuZyxhLmIpKX1pLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBOcihyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBOcihvLDMpKSxzdXBlcihpLG5ldyBXZCh7dmVydGV4Q29sb3JzOiEwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITEsdHJhbnNwYXJlbnQ6ITB9KSksdGhpcy50eXBlPSJTa2VsZXRvbkhlbHBlciIsdGhpcy5pc1NrZWxldG9uSGVscGVyPSEwLHRoaXMucm9vdD10LHRoaXMuYm9uZXM9ZSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgZT10aGlzLmJvbmVzLGk9dGhpcy5nZW9tZXRyeSxyPWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO1EzLmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxzPTA7bzxlLmxlbmd0aDtvKyspe2xldCBhPWVbb107YS5wYXJlbnQmJmEucGFyZW50LmlzQm9uZSYmKGdJLm11bHRpcGx5TWF0cmljZXMoUTMsYS5tYXRyaXhXb3JsZCksdXAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGdJKSxyLnNldFhZWihzLHVwLngsdXAueSx1cC56KSxnSS5tdWx0aXBseU1hdHJpY2VzKFEzLGEucGFyZW50Lm1hdHJpeFdvcmxkKSx1cC5zZXRGcm9tTWF0cml4UG9zaXRpb24oZ0kpLHIuc2V0WFlaKHMrMSx1cC54LHVwLnksdXAueikscys9Mil9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITAsc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9LFFjLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIikscUIuZXh0cmFjdFVybEJhc2Uobil9LFFjLkhhbmRsZXJzPXthZGQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4iKX0sZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5nZXQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuZ2V0SGFuZGxlcigpIGluc3RlYWQuIil9fSx2bS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX0sdm0ucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSx2bS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX0sdm0ucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKG4pfSx4YS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX0seGEucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSx4YS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX0seGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUobil9LHhhLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX0sYnAucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LFowLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KG4pfSxiby5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfSxiby5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX0sYm8ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYm8ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX0sYm8ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGJvLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LHhuLnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKG4pfSx4bi5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfSx4bi5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksKG5ldyAkKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9LHhuLnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKG4pfSx4bi5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0seG4ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9LHhuLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSx4bi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx4bi5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4udHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfSx4bi5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9LHhuLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0seG4ucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHhuLnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx4bi5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0seG4ucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx4bi5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSx4bi5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0seG4ucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKG4sdCxlLGkscixvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKG4sdCxpLGUscixvKX0seG4ucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShuKS5pbnZlcnQoKX0sS2wucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShuKX0sdHMucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxuLmFwcGx5UXVhdGVybmlvbih0aGlzKX0sdHMucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX0sdnAucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX0sdnAucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKG4pfSx2cC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfSxWci5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX0sVnIucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQobix0KX0sVnIucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQobil9LFZyLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKG4pfSxWci5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShuKX0sVnIuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxWci5nZXRCYXJ5Y29vcmQobix0LGUsaSxyKX0sVnIubm9ybWFsPWZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksVnIuZ2V0Tm9ybWFsKG4sdCxlLGkpfSxxZC5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhuKX0scWQucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IENwKHRoaXMsbil9LHFkLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IF9tKHRoaXMsbil9LCRlLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUobix0LGUpfSwkZS5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9LCRlLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sJC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX0sJC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX0sJC5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihuKX0sJC5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShuKX0sJC5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LG4pfSwkLnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX0sJC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sJC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9LCQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfSxaaS5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sWmkucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfSxCaS5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKG4pfSxCaS5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX0sQmkucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LG4pfSxCaS5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9LEJpLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpLnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1ufX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSksYW8ucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYW8ucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLDB9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfX19KSxQSS5wcm90b3R5cGUuaW5pdEJvbmVzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tpbm5lZE1lc2g6IGluaXRCb25lcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGVzLnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKG4sdCl7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpLHZvaWQgMCE9PXQmJih0aGlzLmZpbG1HYXVnZT10KSx0aGlzLnNldEZvY2FsTGVuZ3RoKG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhbC5wcm90b3R5cGUse29ubHlTaGFkb3c6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5vbmx5U2hhZG93IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dDYW1lcmFGb3Y6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRm92IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mb3YuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmZvdj1ufX0sc2hhZG93Q2FtZXJhTGVmdDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFMZWZ0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5sZWZ0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5sZWZ0PW59fSxzaGFkb3dDYW1lcmFSaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFSaWdodCBpcyBub3cgLnNoYWRvdy5jYW1lcmEucmlnaHQuIiksdGhpcy5zaGFkb3cuY2FtZXJhLnJpZ2h0PW59fSxzaGFkb3dDYW1lcmFUb3A6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVG9wIGlzIG5vdyAuc2hhZG93LmNhbWVyYS50b3AuIiksdGhpcy5zaGFkb3cuY2FtZXJhLnRvcD1ufX0sc2hhZG93Q2FtZXJhQm90dG9tOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUJvdHRvbSBpcyBub3cgLnNoYWRvdy5jYW1lcmEuYm90dG9tLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5ib3R0b209bn19LHNoYWRvd0NhbWVyYU5lYXI6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTmVhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEubmVhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubmVhcj1ufX0sc2hhZG93Q2FtZXJhRmFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZmFyLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mYXI9bn19LHNoYWRvd0NhbWVyYVZpc2libGU6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFWaXNpYmxlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQ2FtZXJhSGVscGVyKCBsaWdodC5zaGFkb3cuY2FtZXJhICkgaW5zdGVhZC4iKX19LHNoYWRvd0JpYXM6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93QmlhcyBpcyBub3cgLnNoYWRvdy5iaWFzLiIpLHRoaXMuc2hhZG93LmJpYXM9bn19LHNoYWRvd0RhcmtuZXNzOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93RGFya25lc3MgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd01hcFdpZHRoOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcFdpZHRoIGlzIG5vdyAuc2hhZG93Lm1hcFNpemUud2lkdGguIiksdGhpcy5zaGFkb3cubWFwU2l6ZS53aWR0aD1ufX0sc2hhZG93TWFwSGVpZ2h0OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcEhlaWdodCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLmhlaWdodC4iKSx0aGlzLnNoYWRvdy5tYXBTaXplLmhlaWdodD1ufX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhQci5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAubGVuZ3RoIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuY291bnQgaW5zdGVhZC4iKSx0aGlzLmFycmF5Lmxlbmd0aH19LGR5bmFtaWM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmR5bmFtaWMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMudXNhZ2U9PT14SX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKHhJKX19fSksUHIucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UoITA9PT1uP3hJOkN4KSx0aGlzfSxQci5wcm90b3R5cGUuY29weUluZGljZXNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxQci5wcm90b3R5cGUuc2V0QXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycyIpfSxVaS5wcm90b3R5cGUuYWRkSW5kZXg9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEluZGV4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0SW5kZXgoKS4iKSx0aGlzLnNldEluZGV4KG4pfSxVaS5wcm90b3R5cGUuYWRkQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRBdHRyaWJ1dGUoKS4iKSx0JiZ0LmlzQnVmZmVyQXR0cmlidXRlfHx0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/ImluZGV4Ij09PW4/KGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkuYWRkQXR0cmlidXRlOiBVc2UgLnNldEluZGV4KCkgZm9yIGluZGV4IGF0dHJpYnV0ZS4iKSx0aGlzLnNldEluZGV4KHQpLHRoaXMpOnRoaXMuc2V0QXR0cmlidXRlKG4sdCk6KGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBub3cgZXhwZWN0cyAoIG5hbWUsIGF0dHJpYnV0ZSApLiIpLHRoaXMuc2V0QXR0cmlidXRlKG4sbmV3IFByKGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pKSl9LFVpLnByb3RvdHlwZS5hZGREcmF3Q2FsbD1mdW5jdGlvbihuLHQsZSl7dm9pZCAwIT09ZSYmY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIGluZGV4T2Zmc2V0LiIpLGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIGlzIG5vdyAuYWRkR3JvdXAoKS4iKSx0aGlzLmFkZEdyb3VwKG4sdCl9LFVpLnByb3RvdHlwZS5jbGVhckRyYXdDYWxscz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKSx0aGlzLmNsZWFyR3JvdXBzKCl9LFVpLnByb3RvdHlwZS5jb21wdXRlT2Zmc2V0cz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFVpLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5yZW1vdmVBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5kZWxldGVBdHRyaWJ1dGUoKS4iKSx0aGlzLmRlbGV0ZUF0dHJpYnV0ZShuKX0sVWkucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVWkucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLm9mZnNldHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX19KSxobS5wcm90b3R5cGUuc2V0RHluYW1pYz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09bj94STpDeCksdGhpc30saG0ucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycyIpfSxDcC5wcm90b3R5cGUuZ2V0QXJyYXlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sQ3AucHJvdG90eXBlLmFkZFNoYXBlTGlzdD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlTGlzdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LENwLnByb3RvdHlwZS5hZGRTaGFwZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSjAucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZTogLmRpc3Bvc2UoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxHeC5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAub25VcGRhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBby5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxvdmVyZHJhdzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sd3JhcFJHQjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwUkdCIGhhcyBiZWVuIHJlbW92ZWQuIiksbmV3IGFufX0sc2hhZGluZzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIiksdGhpcy5mbGF0U2hhZGluZz0xPT09bn19LHN0ZW5jaWxNYXNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFza30sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2s9bn19LHZlcnRleFRhbmdlbnRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHZC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPW59fX0pLGppLnByb3RvdHlwZS5jbGVhclRhcmdldD1mdW5jdGlvbihuLHQsZSxpKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuIiksdGhpcy5zZXRSZW5kZXJUYXJnZXQobiksdGhpcy5jbGVhcih0LGUsaSl9LGppLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4iKSx0aGlzLnNldEFuaW1hdGlvbkxvb3Aobil9LGppLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9LGppLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuIiksdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfSxqaS5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4iKSx0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb259LGppLnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX0samkucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX0samkucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX0samkucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfSxqaS5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKX0samkucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfSxqaS5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxqaS5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuIiksdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9LGppLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKX0samkucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3Qobil9LGppLnByb3RvdHlwZS5pbml0TWF0ZXJpYWw9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxqaS5wcm90b3R5cGUuYWRkUHJlUGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUHJlUGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGppLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLnNldFRleHR1cmUyRD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGppLnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEFjdGl2ZU1pcE1hcExldmVsKCkgaXMgbm93IC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLiIpLHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoamkucHJvdG90eXBlLHtzaGFkb3dNYXBFbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4iKSx0aGlzLnNoYWRvd01hcC5lbmFibGVkPW59fSxzaGFkb3dNYXBUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4iKSx0aGlzLnNoYWRvd01hcC50eXBlPW59fSxzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LGNvbnRleHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuIiksdGhpcy5nZXRDb250ZXh0KCl9fSx2cjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnZyIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnhyIiksdGhpcy54cn19LGdhbW1hSW5wdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKX19LGdhbW1hT3V0cHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksdGhpcy5vdXRwdXRFbmNvZGluZz0hMD09PW4/QXI6X3B9fSx0b25lTWFwcGluZ1doaXRlUG9pbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKSwxfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LGdhbW1hRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKSwyfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdGUucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEpzLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPW59fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9bn19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9bn19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9bn19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PW59fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PW59fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PW59fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PW59fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1ufX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1ufX19KSxjbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYoITA9PT10aGlzLmlzUGxheWluZylyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiBBdWRpbyBpcyBhbHJlYWR5IHBsYXlpbmcuIik7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3RoaXMuX3N0YXJ0ZWRBdD10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdDtsZXQgZT10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7cmV0dXJuIGUuYnVmZmVyPXRoaXMuYnVmZmVyLGUubG9vcD10aGlzLmxvb3AsZS5sb29wU3RhcnQ9dGhpcy5sb29wU3RhcnQsZS5sb29wRW5kPXRoaXMubG9vcEVuZCxlLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyksZS5zdGFydCh0aGlzLl9zdGFydGVkQXQsdGhpcy5fcHJvZ3Jlc3MrdGhpcy5vZmZzZXQsdGhpcy5kdXJhdGlvbiksdGhpcy5pc1BsYXlpbmc9ITAsdGhpcy5zb3VyY2U9ZSx0aGlzLnNldERldHVuZSh0aGlzLmRldHVuZSksdGhpcy5zZXRQbGF5YmFja1JhdGUodGhpcy5wbGF5YmFja1JhdGUpLHRoaXMuY29ubmVjdCgpfXBhdXNlKCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsITA9PT10aGlzLmxvb3AmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c3RvcCgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLCEwPT09dGhpcy5fY29ubmVjdGVkPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdm9pZCAwIT09dGhpcy5zb3VyY2UuZGV0dW5lKXJldHVybiEwPT09dGhpcy5pc1BsYXlpbmcmJnRoaXMuc291cmNlLmRldHVuZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5kZXR1bmUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXREZXR1bmUoKXtyZXR1cm4gdGhpcy5kZXR1bmV9Z2V0RmlsdGVyKCl7cmV0dXJuIHRoaXMuZ2V0RmlsdGVycygpWzBdfXNldEZpbHRlcih0KXtyZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKHQ/W3RdOltdKX1zZXRQbGF5YmFja1JhdGUodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4hMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sPyhjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpLCExKTp0aGlzLmxvb3B9c2V0TG9vcCh0KXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLmxvb3A9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybihuZXcgUUIpLmxvYWQobixmdW5jdGlvbihpKXt0LnNldEJ1ZmZlcihpKX0pLHRoaXN9LEV4LnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKG4sdCl9LEV4LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKG4sdCxlLGkpfSxqZC5jcm9zc09yaWdpbj12b2lkIDAsamQubG9hZFRleHR1cmU9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgVkI7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfSxqZC5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCByPW5ldyBCQjtyLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBvPXIubG9hZChuLGUsdm9pZCAwLGkpO3JldHVybiB0JiYoby5tYXBwaW5nPXQpLG99LGpkLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX0samQubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX188InUiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJlZ2lzdGVyIix7ZGV0YWlsOntyZXZpc2lvbjpkVn19KSksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuX19USFJFRV9fP2NvbnNvbGUud2FybigiV0FSTklORzogTXVsdGlwbGUgaW5zdGFuY2VzIG9mIFRocmVlLmpzIGJlaW5nIGltcG9ydGVkLiIpOndpbmRvdy5fX1RIUkVFX189ZFYpO3ZhciAkbD0oKCk9PihmdW5jdGlvbihuKXtuW24uQ0lSQ0xFPTBdPSJDSVJDTEUiLG5bbi5MSU5FPTFdPSJMSU5FIixuW24uVFJJQU5HTEU9Ml09IlRSSUFOR0xFIixuW24uVFJBUEVaT0lEPTNdPSJUUkFQRVpPSUQifSgkbHx8KCRsPXt9KSksJGwpKSgpO2Z1bmN0aW9uIG10ZShuLHQpe2xldCBlPXQubGVuZ3RoLzIsaT1uLmF0dHJpYnV0ZXMucG9zaXRpb247KCFpfHxpLmNvdW50IT09MyplKSYmKGk9bmV3IFByKG5ldyBGbG9hdDMyQXJyYXkoMyplKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLGkpKTtsZXQgcj1pLmFycmF5O2ZvcihsZXQgbz0wO288ZTtvKyspclszKm9dPXRbMipvXSxyWzMqbysxXT10WzIqbysxXTtpLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsMyplKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIGh0ZShuLHQsZSl7bGV0IGk9TWF0aC5tYXgodC5sZW5ndGgvMi0xLDApLHI9MippKjMsbz0zKnIscz1uLmF0dHJpYnV0ZXMucG9zaXRpb247KCFzfHxzLmNvdW50IT09cikmJihzPW5ldyBQcihuZXcgRmxvYXQzMkFycmF5KG8pLDMpLG4uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIscykpO2xldCBhPXMuYXJyYXk7Zm9yKGxldCBsPTA7bDxpO2wrKyl7bGV0W2MsZCx1LHBdPVt0WzIqbF0sdFsyKmwrMV0sdFsyKmwrMl0sdFsyKmwrM11dLGY9bmV3ICRlKGMsZCksbT1uZXcgJGUodSxwKSxiPW5ldyAkZSh1LWMscC1kKSxNPW5ldyAkZSgtYi55LGIueCkuc2V0TGVuZ3RoKGUvMikseT1mLmNsb25lKCkuYWRkKE0pLHg9Zi5jbG9uZSgpLnN1YihNKSxSPW0uY2xvbmUoKS5hZGQoTSksQT1tLmNsb25lKCkuc3ViKE0pLFY9W3kueCx5LnksMCx4LngseC55LDAsUi54LFIueSwwLFIueCxSLnksMCx4LngseC55LDAsQS54LEEueSwwXTthLnNldChWLGwqVi5sZW5ndGgpfXMubmVlZHNVcGRhdGU9ITAsbi5zZXREcmF3UmFuZ2UoMCxvKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIEpJKG4sdCxlLGkpe2xldHt2aXNpYmxlOnIsY29sb3I6byxvcGFjaXR5OnN9PWk7aWYoQXJyYXkuaXNBcnJheSh0Lm1hdGVyaWFsKSl0aHJvdyBuZXcgRXJyb3IoIkludmFyaWFudCBlcnJvcjogb25seSBleHBlY3Qgb25lIG1hdGVyaWFsIG9uIGFuIG9iamVjdCIpO2xldCBhPXQubWF0ZXJpYWw7aWYoYS52aXNpYmxlIT09ciYmKGEudmlzaWJsZT1yLGEubmVlZHNVcGRhdGU9ITApLCFyKXJldHVybiExO2xldCBsPV9WKG4sbyxzPz8xKSxjPWUodC5nZW9tZXRyeSk7cmV0dXJuIHQuZ2VvbWV0cnkhPT1jJiYodC5nZW9tZXRyeT1jKSxhLmNvbG9yLmVxdWFscyhsKXx8KGEuY29sb3Iuc2V0KGwpLGEubmVlZHNVcGRhdGU9ITApLCEwfXZhciBlQT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnJhd1Nlcmllc0RhdGE9W10sdGhpcy5zZXJpZXM9W10sdGhpcy5wYWludERpcnR5PSEwLHRoaXMucmVuZGVyQ2FjaGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5wcmV2RnJhbWVDYWNoZT1uZXcgTWFwLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcH1nZXRGcm9tUHJldmlvdXNGcmFtZSh0KXtyZXR1cm4gdGhpcy5wcmV2RnJhbWVDYWNoZS5nZXQodCk/P251bGx9c2V0VG9DdXJyZW50RnJhbWUodCxlKXt0aGlzLmN1cnJGcmFtZUNhY2hlLnNldCh0LGUpfWZpbmFsaXplRnJhbWVBbmRHZXRSZW1vdmVkKCl7bGV0IHQ9W107Zm9yKGxldFtlLGldb2YgdGhpcy5wcmV2RnJhbWVDYWNoZS5lbnRyaWVzKCkpdGhpcy5jdXJyRnJhbWVDYWNoZS5oYXMoZSl8fHQucHVzaChpKTtyZXR1cm4gdGhpcy5wcmV2RnJhbWVDYWNoZT10aGlzLmN1cnJGcmFtZUNhY2hlLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcCx0fX0sdGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj1udWxsLHRoaXMubGF5b3V0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsPXQuZ2V0TWV0YWRhdGFNYXAsdGhpcy5jb29yZGluYXRvcj10LmNvb3JkaW5hdG9yLHRoaXMucmVuZGVyZXI9dC5yZW5kZXJlcix0aGlzLnBhaW50QnJ1c2g9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5yZW5kZXJDYWNoZT10LHRoaXMucmVuZGVyZXI9ZX1zZXRMaW5lKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldFRyaWFuZ2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRDaXJjbGUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVDaXJjbGVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmFwZXpvaWQodCxlLGkscil7bGV0IG89dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyYXBlem9pZE9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSxyKTtvJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQsbyl9fSh0aGlzLnJlbmRlckNhY2hlLHRoaXMucmVuZGVyZXIpfXNldExheW91dFJlY3QodCl7KHRoaXMubGF5b3V0LnghPT10Lnh8fHRoaXMubGF5b3V0LndpZHRoIT09dC53aWR0aHx8dGhpcy5sYXlvdXQueSE9PXQueXx8dGhpcy5sYXlvdXQuaGVpZ2h0IT09dC5oZWlnaHQpJiYodGhpcy5wYWludERpcnR5PSEwKSx0aGlzLmxheW91dD10fWdldExheW91dFJlY3QoKXtyZXR1cm4gdGhpcy5sYXlvdXR9Z2V0TWV0YWRhdGFNYXAoKXtyZXR1cm4gdGhpcy5nZXRNZXRhZGF0YU1hcEltcGwoKX1tYXJrQXNQYWludERpcnR5KCl7dGhpcy5wYWludERpcnR5PSEwfXJlbmRlcigpe2lmKHRoaXMudHJhbnNmb3JtQ29vcmRpbmF0ZXNJZlN0YWxlKCksdGhpcy5wYWludERpcnR5KXt0aGlzLnJlZHJhdygpO2ZvcihsZXQgdCBvZiB0aGlzLnJlbmRlckNhY2hlLmZpbmFsaXplRnJhbWVBbmRHZXRSZW1vdmVkKCkpdGhpcy5yZW5kZXJlci5kZXN0cm95T2JqZWN0KHQpO3RoaXMucGFpbnREaXJ0eT0hMX19aXNDb29yZGluYXRlVXBkYXRlZCgpe3JldHVybiB0aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSE9PXRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXJ9Y2xlYXJDb29yZGluYXRlSWRlbnRpZmllcigpe3RoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbH1zZXREYXRhKHQpe3RoaXMuY2xlYXJDb29yZGluYXRlSWRlbnRpZmllcigpLHRoaXMucmF3U2VyaWVzRGF0YT10fXRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpe2lmKCF0aGlzLmlzQ29vcmRpbmF0ZVVwZGF0ZWQoKSlyZXR1cm47bGV0IHQ9dGhpcy5nZXRMYXlvdXRSZWN0KCk7dGhpcy5zZXJpZXM9bmV3IEFycmF5KHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dGhpcy5yYXdTZXJpZXNEYXRhLmxlbmd0aDtlKyspe2xldCBpPXRoaXMucmF3U2VyaWVzRGF0YVtlXTt0aGlzLnNlcmllc1tlXT17aWQ6aS5pZCxwb2x5bGluZTpuZXcgRmxvYXQzMkFycmF5KDIqaS5wb2ludHMubGVuZ3RoKX07Zm9yKGxldCByPTA7cjxpLnBvaW50cy5sZW5ndGg7cisrKXtsZXRbbyxzXT10aGlzLmNvb3JkaW5hdG9yLnRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxbaS5wb2ludHNbcl0ueCxpLnBvaW50c1tyXS55XSk7dGhpcy5zZXJpZXNbZV0ucG9seWxpbmVbMipyXT1vLHRoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqcisxXT1zfX10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPXRoaXMuY29vcmRpbmF0b3IuZ2V0VXBkYXRlSWRlbnRpZmllcigpLHRoaXMubWFya0FzUGFpbnREaXJ0eSgpfX0sYV89KCgpPT4oZnVuY3Rpb24obil7bltuLk5VTUJFUj0wXT0iTlVNQkVSIixuW24uTkFOPTFdPSJOQU4ifShhX3x8KGFfPXt9KSksYV8pKSgpLHRBPWNsYXNzIGV4dGVuZHMgZUF7cmVjb3JkUGFydGl0aW9uKHQsZSxpKXtyZXR1cm4gdD97dHlwZTphXy5OVU1CRVIscG9seWxpbmU6ZX06e3R5cGU6YV8uTkFOLHBvbHlsaW5lOmUubWFwKChyLG8pPT5pc05hTihyKT9vJTI9PTA/aS54OmkueTpyKX19cGFydGl0aW9uUG9seWxpbmUodCl7bGV0IGU9W10saT0wLHI9ITEsbz10aGlzLmNvb3JkaW5hdG9yLnRyYW5zZm9ybURhdGFUb1VpQ29vcmQodGhpcy5nZXRMYXlvdXRSZWN0KCksWzAsMF0pLHM9e3g6b1swXSx5Om9bMV19LGE9bnVsbDtmb3IobGV0IGw9MDtsPHQubGVuZ3RoO2wrPTIpe2xldCBjPXRbbF0sZD10W2wrMV0sdT1pc05hTihjKXx8aXNOYU4oZCk7dSE9PXImJmkhPT1sJiYoZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSxsKSxudWxsPT09YT97eDpjLHk6ZH06YSkpLGk9bCksdXx8KGE9e3g6Yyx5OmR9KSxyPXV9cmV0dXJuIGkhPT10Lmxlbmd0aC0xJiZlLnB1c2godGhpcy5yZWNvcmRQYXJ0aXRpb24oIXIsdC5zbGljZShpLHQubGVuZ3RoKSxhPz9zKSksZX1yZWRyYXcoKXtmb3IobGV0IHQgb2YgdGhpcy5zZXJpZXMpe2xldCBpPXRoaXMuZ2V0TWV0YWRhdGFNYXAoKVt0LmlkXTtpZighaSljb250aW51ZTtpZih0LnBvbHlsaW5lLmxlbmd0aCUyIT0wKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGhhdmUgb2RkIGxlbmd0aC1lZCBwb2x5bGluZTogJHt0LnBvbHlsaW5lLmxlbmd0aH1gKTtsZXQgcj10aGlzLnBhcnRpdGlvblBvbHlsaW5lKHQucG9seWxpbmUpO2ZvcihsZXRbbyx7dHlwZTpzLHBvbHlsaW5lOmF9XW9mIHIuZW50cmllcygpKWlmKHM9PT1hXy5OVU1CRVIpMj09PWEubGVuZ3RoP3RoaXMucGFpbnRCcnVzaC5zZXRDaXJjbGUoSlNPTi5zdHJpbmdpZnkoWyJjaXJjbGUiLHQuaWQsb10pLHt4OmFbMF0seTphWzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSxyYWRpdXM6NH0pOnRoaXMucGFpbnRCcnVzaC5zZXRMaW5lKEpTT04uc3RyaW5naWZ5KFsibGluZSIsdC5pZCxvXSksYSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSx3aWR0aDoyfSk7ZWxzZSBpZighaS5hdXgpZm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKz0yKXRoaXMucGFpbnRCcnVzaC5zZXRUcmlhbmdsZShKU09OLnN0cmluZ2lmeShbIk5hTiIsdC5pZCxhW2xdLGFbbCsxXV0pLHt4OmFbbF0seTphW2wrMV19LHtjb2xvcjppLmNvbG9yLHZpc2libGU6aS52aXNpYmxlLG9wYWNpdHk6aS5vcGFjaXR5Pz8xLHNpemU6MTJ9KX19fSxuQT1jbGFzcyBleHRlbmRzIGIwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNhbWVyYT1uZXcgbW0oMCwxZTMsMWUzLDAsMCwxMDApfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiExfXNldERvbUNvbnRhaW5lclJlY3QodCl7c3VwZXIuc2V0RG9tQ29udGFpbmVyUmVjdCh0KSx0aGlzLmNhbWVyYS5sZWZ0PXQueCx0aGlzLmNhbWVyYS5yaWdodD10LngrdC53aWR0aCx0aGlzLmNhbWVyYS50b3A9dC55K3QuaGVpZ2h0LHRoaXMuY2FtZXJhLmJvdHRvbT10LnksdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldENhbWVyYSgpe3JldHVybiB0aGlzLmNhbWVyYX19LGlBPWNsYXNze2NvbnN0cnVjdG9yKHQpe3N3aXRjaCh0aGlzLm1ldGFkYXRhTWFwPXt9LHRoaXMuc2hvdWxkUmVwYWludD0hMSx0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUpe2Nhc2UgUWkuU1ZHOnRoaXMuY29vcmRpbmF0b3I9bmV3IGIwLHRoaXMucmVuZGVyZXI9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3ZnPXR9Zmx1c2goKXt9b25SZXNpemUodCl7fWRlc3Ryb3lPYmplY3QodCl7dGhpcy5zdmcucmVtb3ZlQ2hpbGQodC5kb20pfXNldFVzZURhcmtNb2RlKHQpe31jcmVhdGVQYXRoRFN0cmluZyh0KXtpZighdC5sZW5ndGgpcmV0dXJuIiI7bGV0IGU9bmV3IEFycmF5KHQubGVuZ3RoLzIpO2VbMF09YE0ke3RbMF19LCR7dFsxXX1gO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGgvMjtpKyspZVtpXT1gTCR7dFsyKmldfSwke3RbMippKzFdfWA7cmV0dXJuIGUuam9pbigiIil9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXtsZXQgcj1MRCh0Py5kb20sKCk9PntsZXQgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO28uc3R5bGUuZmlsbD0ibm9uZSI7bGV0IHM9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtyZXR1cm4gby5zZXRBdHRyaWJ1dGUoImQiLHMpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKG8pLG99LG89PntpZighdD8uZGF0YXx8IVlsX2FyZVBvbHlsaW5lc0VxdWFsKGUsdD8uZGF0YSkpe2xldCBzPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7by5zZXRBdHRyaWJ1dGUoImQiLHMpfXJldHVybiBvfSxpKTtyZXR1cm4gbnVsbD09PXI/bnVsbDooci5zdHlsZS5zdHJva2VXaWR0aD1TdHJpbmcoaS53aWR0aCkse2RvbTpyLGRhdGE6ZX0pfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLGkpe2xldHtzaXplOnIsY29sb3I6b309aSxzPXIqTWF0aC5zcXJ0KDMpLzIsYT1uZXcgRmxvYXQzMkFycmF5KFtlLngtci8yLGUueStzLzMsZS54K3IvMixlLnkrcy8zLGUueCxlLnktMipzLzNdKSxsPUxEKHQ/LmRvbSwoKT0+e2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7Yy5jbGFzc0xpc3QuYWRkKCJ0cmlhbmdsZSIpLGMuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhhKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChjKSxjfSxjPT57bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhhKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSxjfSxpKTtyZXR1cm4gbnVsbD09PWw/bnVsbDoobC5zdHlsZS5maWxsPW8se2RvbTpsLGRhdGE6YX0pfWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7Y29sb3I6cixyYWRpdXM6b309aSxzPUxEKHQ/LmRvbSwoKT0+e2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtyZXR1cm4gYS5zdHlsZS5maWxsPXIsYS5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksYS5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksYS5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhvKSksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYSksYX0sYT0+KGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcobykpLGEpLGkpO3JldHVybiBudWxsPT09cz9udWxsOntkb206cyxkYXRhOmV9fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOm8sY29sb3I6c309cixhPTIvTWF0aC5zcXJ0KDMpKm8sbD1uZXcgRmxvYXQzMkFycmF5KFtlLngtYS8yLGUueStvLzIsZS54LGUueS1vLzIsaS54LGkueS1vLzIsaS54K2EvMixpLnkrby8yXSksYz1MRCh0Py5kb20sKCk9PntsZXQgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2QuY2xhc3NMaXN0LmFkZCgidHJhcGV6b2lkIiksZC5zdHlsZS5maWxsPSJub25lIjtsZXQgdT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGwpO3JldHVybiBkLnNldEF0dHJpYnV0ZSgiZCIsdSsiWiIpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKGQpLGR9LGQ9PntsZXQgdT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGwpO3JldHVybiBkLnNldEF0dHJpYnV0ZSgiZCIsdSsiWiIpLGR9LHIpO3JldHVybiBudWxsPT09Yz9udWxsOihjLnN0eWxlLmZpbGw9cyx7ZG9tOmMsZGF0YTpsfSl9ZGlzcG9zZSgpe319KHQuY29udGFpbmVyKTticmVhaztjYXNlIFFpLldFQkdMOntsZXQgZT1uZXcgbkE7dGhpcy5jb29yZGluYXRvcj1lLHRoaXMucmVuZGVyZXI9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnNjZW5lPW5ldyBKMCx0aGlzLmJhY2tncm91bmRDb2xvcj0iI2ZmZiIsWWxfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKSYmdCBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcyYmKHQuc3R5bGU9dC5zdHlsZXx8e30pLHImJnQuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsciksdGhpcy5yZW5kZXJlcj1uZXcgamkoe2NhbnZhczp0LGFudGlhbGlhczohMCxhbHBoYTohMH0pLHRoaXMucmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyhpKX1vblJlc2l6ZSh0KXt0aGlzLnJlbmRlcmVyLnNldFNpemUodC53aWR0aCx0LmhlaWdodCl9ZGVzdHJveU9iamVjdCh0KXtsZXQgZT10Lm9iajNkO2lmKHRoaXMuc2NlbmUucmVtb3ZlKGUpLGUgaW5zdGFuY2VvZiBhbyl7ZS5nZW9tZXRyeS5kaXNwb3NlKCk7bGV0IGk9QXJyYXkuaXNBcnJheShlLm1hdGVyaWFsKT9lLm1hdGVyaWFsOltlLm1hdGVyaWFsXTtmb3IobGV0IHIgb2YgaSlyLmRpc3Bvc2UoKX19c2V0VXNlRGFya01vZGUodCl7dGhpcy5iYWNrZ3JvdW5kQ29sb3I9dD8iIzMwMzAzMCI6IiNmZmYifWNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0LGUsaSl7aWYoIXQmJiFpLnZpc2libGUpcmV0dXJuIG51bGw7bGV0e3Zpc2libGU6cix3aWR0aDpvfT1pO2lmKCF0KXtsZXQgZD1fVih0aGlzLmJhY2tncm91bmRDb2xvcixpLmNvbG9yLGkub3BhY2l0eT8/MSksdT1uZXcgVWkscD1uZXcgV2Qoe2NvbG9yOmR9KSxmPW5ldyBhbyh1LHApO3JldHVybiBwLnZpc2libGU9cixodGUodSxlLG8pLHRoaXMuc2NlbmUuYWRkKGYpLHt0eXBlOiRsLkxJTkUsZGF0YTplLG9iajNkOmYsd2lkdGg6b319bGV0e2RhdGE6cyxvYmozZDphLHdpZHRoOmx9PXQ7cmV0dXJuIEpJKHRoaXMuYmFja2dyb3VuZENvbG9yLGEsZD0+KChvIT09bHx8IXN8fCFZbF9hcmVQb2x5bGluZXNFcXVhbChzLGUpKSYmaHRlKGQsZSxvKSxkKSxpKT97dHlwZTokbC5MSU5FLGRhdGE6ZSxvYmozZDphLHdpZHRoOm99OnR9Y3JlYXRlTWVzaCh0LGUpe2lmKCFlLnZpc2libGUpcmV0dXJuIG51bGw7bGV0e3Zpc2libGU6aSxjb2xvcjpyLG9wYWNpdHk6b309ZSxzPV9WKHRoaXMuYmFja2dyb3VuZENvbG9yLHIsbz8/MSksYT1uZXcgcG0oe2NvbG9yOnMsdmlzaWJsZTppfSk7cmV0dXJuIG5ldyBhbyh0LGEpfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLGkpe2xldHtzaXplOnJ9PWksbz1yKk1hdGguc3FydCgzKS8yLHM9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnktby8zLGUueCtyLzIsZS55LW8vMyxlLngsZS55KzIqby8zXSk7aWYoIXQpe2xldCBsPW5ldyBVaTttdGUobCxzKTtsZXQgYz10aGlzLmNyZWF0ZU1lc2gobCxpKTtyZXR1cm4gbnVsbD09PWM/bnVsbDoodGhpcy5zY2VuZS5hZGQoYykse3R5cGU6JGwuVFJJQU5HTEUsZGF0YTplLG9iajNkOmN9KX1yZXR1cm4gSkkodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCxsPT4obXRlKGwscyksbCksaSk/e3R5cGU6JGwuVFJJQU5HTEUsZGF0YTplLG9iajNkOnQub2JqM2R9OnR9Y3JlYXRlT3JVcGRhdGVDaXJjbGVPYmplY3QodCxlLGkpe2xldHtyYWRpdXM6cn09aSxvPW5ldyAkMChpLnJhZGl1cyk7aWYoIXQpe2xldCBhPXRoaXMuY3JlYXRlTWVzaChvLGkpO3JldHVybiBudWxsPT09YT9udWxsOihhLnBvc2l0aW9uLnNldChlLngsZS55LDApLHRoaXMuc2NlbmUuYWRkKGEpLHt0eXBlOiRsLkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6cn0sb2JqM2Q6YX0pfXJldHVybiBKSSh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLCgpPT5vLGkpPyh0Lm9iajNkLnBvc2l0aW9uLnNldChlLngsZS55LDApLHt0eXBlOiRsLkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6cn0sb2JqM2Q6dC5vYmozZH0pOnR9Y3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodCxlLGkscil7aWYoZS55IT09aS55KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnB1dCBlcnJvcjogc3RhcnQueSAhPSBlbmQueS4iKTtsZXR7YWx0aXR1ZGU6b309cixzPTIvTWF0aC5zcXJ0KDMpKm8sYT1uZXcgcWQoW25ldyAkZShlLngtcy8yLGUueS1vLzIpLG5ldyAkZShlLngsZS55K28vMiksbmV3ICRlKGkueCxpLnkrby8yKSxuZXcgJGUoaS54K3MvMixpLnktby8yKV0pO2EuYXV0b0Nsb3NlPSEwO2xldCBsPW5ldyBfbShhKTtpZighdCl7bGV0IGQ9dGhpcy5jcmVhdGVNZXNoKGwscik7cmV0dXJuIG51bGw9PT1kP251bGw6KHRoaXMuc2NlbmUuYWRkKGQpLHt0eXBlOiRsLlRSQVBFWk9JRCxkYXRhOltlLGldLG9iajNkOmR9KX1yZXR1cm4gSkkodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+bCxyKT97dHlwZTokbC5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp0Lm9iajNkfTp0fWZsdXNoKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNvb3JkaW5hdG9yLmdldENhbWVyYSgpKX1kaXNwb3NlKCl7dGhpcy5yZW5kZXJlci5kaXNwb3NlKCl9fSh0LmNvbnRhaW5lcixlLHQuZGV2aWNlUGl4ZWxSYXRpbyx0LmNhbGxiYWNrcy5vbkNvbnRleHRMb3N0KTticmVha319dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0LnVzZURhcmtNb2RlKSx0aGlzLnNlcmllc0xpbmVWaWV3PW5ldyB0QSh7cmVuZGVyZXI6dGhpcy5yZW5kZXJlcixjb29yZGluYXRvcjp0aGlzLmNvb3JkaW5hdG9yLGdldE1ldGFkYXRhTWFwOigpPT50aGlzLm1ldGFkYXRhTWFwfSksdGhpcy5yZXNpemUodC5kb21EaW1lbnNpb24pfWRpc3Bvc2UoKXt9c2V0WFNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFhTY2FsZShxbCh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRZU2NhbGVUeXBlKHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0WVNjYWxlKHFsKHQpKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXJlc2l6ZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldERvbUNvbnRhaW5lclJlY3Qoe3g6MCx5OjAsLi4udH0pLHRoaXMucmVuZGVyZXIub25SZXNpemUoe3g6MCx5OjAsLi4udH0pLHRoaXMuc2VyaWVzTGluZVZpZXcuc2V0TGF5b3V0UmVjdCh7Li4udCx4OjAseTowfSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRNZXRhZGF0YSh0KXtsZXQgZT0hMTtPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbaSxyXSk9PntsZXQgbz10aGlzLm1ldGFkYXRhTWFwW2ldOyghb3x8ci5jb2xvciE9PW8uY29sb3J8fHIudmlzaWJsZSE9PW8udmlzaWJsZXx8ci5vcGFjaXR5IT09by5vcGFjaXR5KSYmKGU9ITApLHRoaXMubWV0YWRhdGFNYXBbaV09cn0pLGUmJnRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0Vmlld0JveCh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFZpZXdCb3hSZWN0KHt4OnQueFswXSx3aWR0aDp0LnhbMV0tdC54WzBdLHk6dC55WzBdLGhlaWdodDp0LnlbMV0tdC55WzBdfSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXREYXRhKHQpe3RoaXMuc2VyaWVzTGluZVZpZXcuc2V0RGF0YSh0KSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFVzZURhcmtNb2RlKHQpe3RoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodCksdGhpcy5zZXJpZXNMaW5lVmlldy5tYXJrQXNQYWludERpcnR5KCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zY2hlZHVsZVJlcGFpbnQoKXt0aGlzLnNob3VsZFJlcGFpbnR8fCh0aGlzLnNob3VsZFJlcGFpbnQ9ITAsKG49PntzZWxmLnJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0pKCgpPT57dGhpcy5yZXBhaW50KCksdGhpcy5zaG91bGRSZXBhaW50PSExfSkpfXJlcGFpbnQoKXt0aGlzLnNlcmllc0xpbmVWaWV3LnJlbmRlcigpLHRoaXMucmVuZGVyZXIuZmx1c2goKSx0aGlzLmNhbGxiYWNrcy5vbkRyYXdFbmQoKX19LENhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TRVJJRVNfREFUQV9VUERBVEVEPTBdPSJTRVJJRVNfREFUQV9VUERBVEVEIixuW24uU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQ9MV09IlNFUklFU19NRVRBREFUQV9DSEFOR0VEIixuW24uU0NBTEVfVVBEQVRFRD0yXT0iU0NBTEVfVVBEQVRFRCIsbltuLlZJRVdfQk9YX1VQREFURUQ9M109IlZJRVdfQk9YX1VQREFURUQiLG5bbi5JTklUPTRdPSJJTklUIixuW24uRE9NX1JFU0laRUQ9NV09IkRPTV9SRVNJWkVEIixuW24uREFSS19NT0RFX1VQREFURUQ9Nl09IkRBUktfTU9ERV9VUERBVEVEIixuW24uRElTUE9TRUQ9N109IkRJU1BPU0VEIn0oQ2F8fChDYT17fSkpLENhKSkoKSxsXz0oKCk9PihmdW5jdGlvbihuKXtuW24uT05fUkVEUkFXX0VORD0wXT0iT05fUkVEUkFXX0VORCIsbltuLk9OX0NPTlRFWFRfTE9TVD0xXT0iT05fQ09OVEVYVF9MT1NUIn0obF98fChsXz17fSkpLGxfKSkoKTtmdW5jdGlvbiBfdGUobil7aWYobi5pbmNsdWRlcygiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCJXb3JrZXIgZmFjdG9yeSBvbmx5IGFsbG93cyBmaWxlIG5hbWUgYW5kIG5vIHJlc291cmNlIHBhdGguIik7cmV0dXJuIG5ldyBXb3JrZXIobil9dmFyIHltPWNsYXNze2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMuY2FsbGJhY2tzPXQuY2FsbGJhY2tzLHQudHlwZSE9PVFpLldFQkdMKXRocm93IG5ldyBSYW5nZUVycm9yKGBDYW5ub3QgdXNlIG5vbiBXRUJHTCByZW5kZXJlciBmb3IgdGhlIG9mZnNjcmVlbiBsaW5lIGNoYXJ0LiBSZWNlaXZlZCAke1FpW3QudHlwZV19IGApO2xldCBlPW5ldyBNZXNzYWdlQ2hhbm5lbDtlLnBvcnQxLm9ubWVzc2FnZT1vPT57dGhpcy5vbk1lc3NhZ2VGcm9tV29ya2VyKG8uZGF0YSl9LHRoaXMudHhNZXNzYWdlUG9ydD1lLnBvcnQxO2xldCBpPXQuY29udGFpbmVyLnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKCk7dGhpcy53b3JrZXJJbnN0YW5jZT15bS53b3JrZXJQb29sLmdldE5leHQoKTtsZXQgcj17dHlwZTpDYS5JTklULGNhbnZhczppLGRldmljZVBpeGVsUmF0aW86d2luZG93LmRldmljZVBpeGVsUmF0aW8sZGltOnQuZG9tRGltZW5zaW9uLHJlbmRlcmVyVHlwZTp0LnR5cGUsdXNlRGFya01vZGU6dC51c2VEYXJrTW9kZX07dGhpcy53b3JrZXJJbnN0YW5jZS5wb3N0TWVzc2FnZShyLFtpLGUucG9ydDJdKX1kaXNwb3NlKCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpDYS5ESVNQT1NFRH0pLHRoaXMud29ya2VySW5zdGFuY2UuZnJlZSgpLHRoaXMudHhNZXNzYWdlUG9ydC5jbG9zZSgpfXNldFhTY2FsZVR5cGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpDYS5TQ0FMRV9VUERBVEVELGF4aXM6IngiLHNjYWxlVHlwZTp0fSl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOkNhLlNDQUxFX1VQREFURUQsYXhpczoieSIsc2NhbGVUeXBlOnR9KX1yZXNpemUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpDYS5ET01fUkVTSVpFRCxkaW06dH0pfXNldE1ldGFkYXRhKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6Q2EuU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQsbWV0YWRhdGE6dH0pfXNldFZpZXdCb3godCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpDYS5WSUVXX0JPWF9VUERBVEVELGV4dGVudDp0fSl9c2V0RGF0YSh0KXtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1uLnJlZHVjZSgobyxzKT0+bytzLnBvaW50cy5sZW5ndGgsMCksZT0wLGk9bmV3IEZsb2F0NjRBcnJheSgyKnQpLHI9W107Zm9yKGxldCBvIG9mIG4pe3IucHVzaCh7aWQ6by5pZCxsZW5ndGg6by5wb2ludHMubGVuZ3RofSk7Zm9yKGxldCBzPTA7czxvLnBvaW50cy5sZW5ndGg7cysrKWlbZSsrXT1vLnBvaW50c1tzXS54LGlbZSsrXT1vLnBvaW50c1tzXS55fXJldHVybntpZHNBbmRMZW5ndGhzOnIsZmxhdHRlbmVkU2VyaWVzOmkuYnVmZmVyfX0odCk7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpDYS5TRVJJRVNfREFUQV9VUERBVEVELGNvbXBhY3REYXRhU2VyaWVzOmV9LFtlLmZsYXR0ZW5lZFNlcmllc10pfXNldFVzZURhcmtNb2RlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6Q2EuREFSS19NT0RFX1VQREFURUQsdXNlRGFya01vZGU6dH0pfXNlbmRNZXNzYWdlKHQsZSl7ZT90aGlzLnR4TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UodCxlKTp0aGlzLnR4TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UodCl9b25NZXNzYWdlRnJvbVdvcmtlcih0KXtzd2l0Y2godC50eXBlKXtjYXNlIGxfLk9OX1JFRFJBV19FTkQ6dGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCk7YnJlYWs7Y2FzZSBsXy5PTl9DT05URVhUX0xPU1Q6dGhpcy5jYWxsYmFja3Mub25Db250ZXh0TG9zdCgpfX19O2Z1bmN0aW9uIFpjKG4sdCl7cmV0dXJuIngiPT09dD9bMCxuLndpZHRoXTpbbi5oZWlnaHQsMF19ZnVuY3Rpb24gWHgobix0KXtsZXQgZT1NYXRoLmZsb29yKG4vNTApO3JldHVybiBNYXRoLm1pbihlLHQpfWZ1bmN0aW9uIG9BKG4sdCxlLGkpe3JldHVybnttYWpvcjpbXSxtaW5vcjpuLnRpY2tzKGksZSkubWFwKG89Pih7dmFsdWU6byx0aWNrRm9ybWF0dGVkU3RyaW5nOnQuZm9ybWF0VGljayhvKX0pKX19eW0ud29ya2VyUG9vbD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlPTEwLGk9X3RlKXt0aGlzLndvcmtlclJlc291cmNlUGF0aD10LHRoaXMubWF4UG9vbFNpemU9ZSx0aGlzLndvcmtlckZhY3Rvcnk9aSx0aGlzLndvcmtlcnM9W119Z2V0TmV4dCgpe2xldCB0O2lmKHRoaXMud29ya2Vycy5ldmVyeSgoe2FjdGl2ZUNvdW50Oml9KT0+aT4wKSYmdGhpcy53b3JrZXJzLmxlbmd0aDx0aGlzLm1heFBvb2xTaXplKXtsZXQgaT10aGlzLndvcmtlckZhY3RvcnkodGhpcy53b3JrZXJSZXNvdXJjZVBhdGgpO3Q9e2FjdGl2ZUNvdW50OjAscG9zdE1lc3NhZ2U6KHIsbyk9PntpLnBvc3RNZXNzYWdlKHIsbyl9LGZyZWU6KCk9Pnt0LmFjdGl2ZUNvdW50PU1hdGgubWF4KHQuYWN0aXZlQ291bnQtMSwwKX19LHRoaXMud29ya2Vycy5wdXNoKHQpfWVsc2V7bGV0IGk9dGhpcy53b3JrZXJzLm1hcCgoe2FjdGl2ZUNvdW50Om99KT0+bykscj1pLmluZGV4T2YoTWF0aC5taW4oLi4uaSkpO3Q9dGhpcy53b3JrZXJzW3JdfXJldHVybiB0LmFjdGl2ZUNvdW50KyssdH19KCJjaGFydF93b3JrZXIuanM/X2ZpbGVfaGFzaD0yYzFlNzFjNSIpO3ZhciB2Vj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO2Z1bmN0aW9uIHh0ZShuKXtmb3IobGV0IHQgb2YgbilpZihTdHJpbmcodCkuaW5jbHVkZXMoImUiKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgUXg9e2dldFN0YW5kYXJkVGlja3M6b0EsZ2V0VGlja3NGb3JUZW1wb3JhbFNjYWxlOmZ1bmN0aW9uKG4sdCxlLGkpe2xldFtyLG9dPWkscz1uLnRpY2tzKGksMik7aWYoby1yPj04NjRlNXx8cy5sZW5ndGg+MilyZXR1cm4gb0Eobix0LGUsaSk7bGV0IGE9bi50aWNrcyhpLGUpO3JldHVybnttYWpvcjpzLm1hcChsPT4oe3N0YXJ0OmwsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFNob3J0KGwpfSkpLG1pbm9yOmEubWFwKGw9Pih7dmFsdWU6bCx0aWNrRm9ybWF0dGVkU3RyaW5nOnQuZm9ybWF0VGljayhsKX0pKX19LGdldFRpY2tzRm9yTGluZWFyU2NhbGU6ZnVuY3Rpb24obix0LGUsaSl7bGV0W3Isb109aSxzPU1hdGguYWJzKG8tcik7aWYocz4uMDAxKXJldHVybiBvQShuLHQsZSxpKTtsZXQgYT1uLnRpY2tzKFtyLG9dLGUpLGw9bi50aWNrcyhbcixvXSwyKTtpZih4dGUoYSl8fHh0ZShsKSlyZXR1cm4gb0Eobix0LGUsaSk7bGV0IGM9W10sZD1mdW5jdGlvbihuKXtsZXQgdD1uLnRvRXhwb25lbnRpYWwoKS5zcGxpdCgiZS0iLDIpO3JldHVybiAyPT09dC5sZW5ndGg/TnVtYmVyKHRbMV0pLTE6MH0ocyk7czwxJiZsLmV2ZXJ5KGY9PntsZXQgbT1NYXRoLmFicyhmKTtyZXR1cm4gbT49MCYmbTwxfSkmJihkKz0xKTtsZXQgdT1uZXcgTWFwO2ZvcihsZXQgZiBvZiBsKXtsZXRbbSxiPSIiXT1TdHJpbmcoZikuc3BsaXQoIi4iLDIpLE09TnVtYmVyKG0rIi4iK2Iuc2xpY2UoMCxkKSk7dS5zZXQoTSx7c3RhcnQ6TSx0aWNrRm9ybWF0dGVkU3RyaW5nOjA9PT1NPyJcdTIwMTQiOnQuZm9ybWF0UmVhZGFibGUoTSl9KX1sZXQgcD0xMCpNYXRoLnBvdygxMCwtZCk7Zm9yKGxldCBmIG9mIGEpZm9yKGxldCBtIG9mWy4uLnUua2V5cygpXS5yZXZlcnNlKCkpe2xldCBiPWYtbTtpZihiPj0wJiZiPHApe2lmKDA9PT1tKWMucHVzaCh7dmFsdWU6Zix0aWNrRm9ybWF0dGVkU3RyaW5nOnQuZm9ybWF0VGljayhmKX0pO2Vsc2V7bGV0IE09U3RyaW5nKGYpLnNsaWNlKFN0cmluZyhtKS5sZW5ndGgpO2MucHVzaCh7dmFsdWU6Zix0aWNrRm9ybWF0dGVkU3RyaW5nOmBcdTIwMjYke018fCIwIn1gfSl9YnJlYWt9fXJldHVybnttYWpvcjpBcnJheS5mcm9tKHUudmFsdWVzKCkpLG1pbm9yOmN9fSxmaWx0ZXJUaWNrc0J5VmlzaWJpbGl0eTpmdW5jdGlvbihuLHQsZSxpLHI9NSl7aWYoIW4ubGVuZ3RofHwhdlYpcmV0dXJuIG47bGV0IG89IngiPT09ZT8xOi0xLHM9bnVsbDtyZXR1cm4gbi5maWx0ZXIoYT0+e2xldCBsPXQoYSk7dlYuZm9udD1pO2xldCBjPXZWLm1lYXN1cmVUZXh0KGEudGlja0Zvcm1hdHRlZFN0cmluZyksZD0ieCI9PT1lP2Mud2lkdGg6Yy5hY3R1YWxCb3VuZGluZ0JveEFzY2VudC1jLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudDtyZXR1cm4gbnVsbD09PXM/IShsK28qZDwwfHwocz1sK28qZCwwKSk6IShvKihzK28qci1sKT4wfHwocz1sK28qZCwwKSl9KX19O2Z1bmN0aW9uIFkyZShuLHQpe2lmKDEmbiYmKE5uKCksaCgwLCJnIiwxNykoMSwidGV4dCIpLFQoMiksZygpLGgoMywidGl0bGUiKSxUKDQpLGcoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO3YoMSksVHQoImZvbnQiLGkuYXhpc0ZvbnQpLEJlKCJ4IixpLnRleHRYUG9zaXRpb24oZS52YWx1ZSkpKCJ5IixpLnRleHRZUG9zaXRpb24oZS52YWx1ZSkpLHYoMSksSGUoIiAiLGUudGlja0Zvcm1hdHRlZFN0cmluZywiICIpLHYoMiksYnQoaS5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKGUudmFsdWUpKX19ZnVuY3Rpb24gWDJlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwyMCkoMSwic3BhbiIpLFQoMiksZygpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9dC5sYXN0LG89dygyKTtUdCgibGVmdCIsby5nZXRNYWpvclhQb3NpdGlvbihlKSwicHgiKSgid2lkdGgiLG8uZ2V0TWFqb3JXaWR0aFN0cmluZyhlLHIsby5tYWpvclRpY2tzW2krMV0pKSgiYm90dG9tIixvLmdldE1ham9yWVBvc2l0aW9uKGUpLCJweCIpKCJoZWlnaHQiLG8uZ2V0TWFqb3JIZWlnaHRTdHJpbmcoZSxyLG8ubWFqb3JUaWNrc1tpKzFdKSkoImZvbnQiLG8uYXhpc0ZvbnQpLG50KCJtYWpvci1sYWJlbCIsITApKCJsYXN0IixyKSxfKCJ0aXRsZSIsby5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKGUuc3RhcnQpKSx2KDIpLGJ0KGUudGlja0Zvcm1hdHRlZFN0cmluZyl9fWZ1bmN0aW9uIFEyZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxOCksUygxLFgyZSwzLDE2LCJzcGFuIiwxOSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLF8oIm5nRm9yT2YiLGUubWFqb3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5TWFqb3JUaWNrKX19dmFyIEN0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2U9bmV3IEYsdGhpcy5lZGl0TWVudU9wZW5lZD0hMSx0aGlzLm1ham9yVGlja3M9W10sdGhpcy5taW5vclRpY2tzPVtdfW5nT25DaGFuZ2VzKCl7bGV0IGU9bnVsbCxyPVh4KCJ4Ij09PXRoaXMuYXhpcz90aGlzLmRvbURpbS53aWR0aDp0aGlzLmRvbURpbS5oZWlnaHQsdGhpcy5ncmlkQ291bnQpO2U9dGhpcy5zY2FsZSBpbnN0YW5jZW9mIG54P1F4LmdldFRpY2tzRm9yTGluZWFyU2NhbGUodGhpcy5zY2FsZSx0aGlzLmdldEZvcm1hdHRlcigpLHIsdGhpcy5heGlzRXh0ZW50KTp0aGlzLnNjYWxlIGluc3RhbmNlb2YgaXg/UXguZ2V0VGlja3NGb3JUZW1wb3JhbFNjYWxlKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxyLHRoaXMuYXhpc0V4dGVudCk6UXguZ2V0U3RhbmRhcmRUaWNrcyh0aGlzLnNjYWxlLHRoaXMuZ2V0Rm9ybWF0dGVyKCkscix0aGlzLmF4aXNFeHRlbnQpLHRoaXMubWFqb3JUaWNrcz1lLm1ham9yLHRoaXMubWlub3JUaWNrcz1ReC5maWx0ZXJUaWNrc0J5VmlzaWJpbGl0eShlLm1pbm9yLG89PnRoaXMuZ2V0RG9tUG9zKG8udmFsdWUpLHRoaXMuYXhpcywiMTFweCBSb2JvdG8sIHNhbnMtc2VyaWYiKX1nZXRGb3JtYXR0ZXIoKXtyZXR1cm4gdGhpcy5jdXN0b21Gb3JtYXR0ZXI/P3RoaXMuc2NhbGUuZGVmYXVsdEZvcm1hdHRlcn10cmFja0J5TWlub3JUaWNrKGUpe3JldHVybiBlLnZhbHVlfXRyYWNrQnlNYWpvclRpY2soZSl7cmV0dXJuIGUuc3RhcnR9Z2V0RG9tUG9zKGUpe3JldHVybiB0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5heGlzRXh0ZW50LFpjKHRoaXMuZG9tRGltLHRoaXMuYXhpcyksZSl9dGV4dFhQb3NpdGlvbihlKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/U3RyaW5nKHRoaXMuZ2V0RG9tUG9zKGUpKToiMTAwJSJ9dGV4dFlQb3NpdGlvbihlKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6U3RyaW5nKHRoaXMuZ2V0RG9tUG9zKGUpKX1nZXRNYWpvclhQb3NpdGlvbihlKXtyZXR1cm4ieSI9PT10aGlzLmF4aXM/MDpNYXRoLm1pbih0aGlzLmRvbURpbS53aWR0aCxNYXRoLm1heCgwLHRoaXMuZ2V0RG9tUG9zKGUuc3RhcnQpKSl9Z2V0TWFqb3JXaWR0aFN0cmluZyhlLGkscil7cmV0dXJuInkiPT09dGhpcy5heGlzPyIiOihpfHwhcj90aGlzLmRvbURpbS53aWR0aDp0aGlzLmdldE1ham9yWFBvc2l0aW9uKHIpKS10aGlzLmdldE1ham9yWFBvc2l0aW9uKGUpKyJweCJ9Z2V0TWFqb3JZUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzPzA6dGhpcy5kb21EaW0uaGVpZ2h0LU1hdGgubWluKHRoaXMuZG9tRGltLmhlaWdodCxNYXRoLm1heCgwLHRoaXMuZ2V0RG9tUG9zKGUuc3RhcnQpKSl9Z2V0TWFqb3JIZWlnaHRTdHJpbmcoZSxpLHIpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8iIjooaXx8IXI/dGhpcy5kb21EaW0uaGVpZ2h0OnRoaXMuZ2V0TWFqb3JZUG9zaXRpb24ocikpLXRoaXMuZ2V0TWFqb3JZUG9zaXRpb24oZSkrInB4In1rZXlkb3duUHJldmVudENsb3NlKGUpeyJFc2NhcGUiIT09ZS5rZXkmJmUuc3RvcFByb3BhZ2F0aW9uKCl9ZXh0ZW50Q2hhbmdlZChlLGkpe2xldCByPU51bWJlcihlKSxvPU51bWJlcihpKTtpZihvPHIpe2xldCBzPXI7cj1vLG89c30hTnVtYmVyLmlzRmluaXRlKHIpfHwhTnVtYmVyLmlzRmluaXRlKG8pfHx0aGlzLm9uVmlld0V4dGVudENoYW5nZS5lbWl0KFtyLG9dKX1vbkF4aXNVcGRhdGVNZW51T3BlbihlLGkscil7ZS52YWx1ZT1TdHJpbmcoclswXSksaS52YWx1ZT1TdHJpbmcoclsxXSksZS5mb2N1cygpfXNldEVkaXRNZW51T3BlbmVkKGUpe3RoaXMuZWRpdE1lbnVPcGVuZWQ9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibGluZS1jaGFydC1heGlzIl1dLGlucHV0czp7YXhpc0V4dGVudDoiYXhpc0V4dGVudCIsYXhpczoiYXhpcyIsc2NhbGU6InNjYWxlIixncmlkQ291bnQ6ImdyaWRDb3VudCIsZG9tRGltOiJkb21EaW0iLGN1c3RvbUZvcm1hdHRlcjoiY3VzdG9tRm9ybWF0dGVyIn0sb3V0cHV0czp7b25WaWV3RXh0ZW50Q2hhbmdlOiJvblZpZXdFeHRlbnRDaGFuZ2UifSxmZWF0dXJlczpbR3RdLGRlY2xzOjI2LHZhcnM6MTEsY29uc3RzOltbMSwibGluZSJdLFsxLCJtaW5vciJdLFsxLCJ0aWNrcyJdLFsiY2xhc3MiLCJtaW5vci10aWNrLWxhYmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ2xpY2sgdG8gbWFudWFsbHkgc2V0IG1pbiAmIG1heCB2YWx1ZXMiLDEsImV4dGVudC1lZGl0LWJ1dHRvbiIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJtZW51T3BlbmVkIiwibWVudUNsb3NlZCJdLFsibWF0TWVudVRyaWdnZXIiLCJtYXRNZW51VHJpZ2dlciJdLFsic3ZnSWNvbiIsImVkaXRfMjRweCJdLFsiY2xhc3MiLCJtYWpvciB0aWNrcyIsNCwibmdJZiJdLFsieFBvc2l0aW9uIiwiYmVmb3JlIiwzLCJ5UG9zaXRpb24iXSxbIm1hbnVhbENvbnRyb2wiLCJtYXRNZW51Il0sWzEsImV4dGVudC1lZGl0LWlucHV0IiwzLCJjbGljayIsImtleWRvd24iXSxbInR5cGUiLCJudW1iZXIiLDMsInZhbHVlIl0sWyJtaW5JbnB1dCIsIiJdLFsibWF4SW5wdXQiLCIiXSxbMSwiZXh0ZW50LWVkaXQtY29udHJvbCIsMywia2V5ZG93biJdLFsibWF0LXJhaXNlZC1idXR0b24iLCIiLCJjb2xvciIsInByaW1hcnkiLDEsImV4dGVudC1lZGl0LWNoYW5nZSIsMywiY2xpY2siXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMSwiZXh0ZW50LWVkaXQtY2FuY2VsIiwzLCJjbGljayJdLFsxLCJtaW5vci10aWNrLWxhYmVsIl0sWzEsIm1ham9yIiwidGlja3MiXSxbMywibWFqb3ItbGFiZWwiLCJsYXN0IiwibGVmdCIsIndpZHRoIiwiYm90dG9tIiwiaGVpZ2h0IiwiZm9udCIsInRpdGxlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMywidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUpe2xldCByPWdlKCk7aCgwLCJkaXYiKSxQKDEsImRpdiIsMCksaCgyLCJkaXYiLDEpLE5uKCksaCgzLCJzdmciLDIpLFMoNCxZMmUsNSw2LCJnIiwzKSxnKCksT28oKSxoKDUsImJ1dHRvbiIsNCw1KSxJKCJtZW51T3BlbmVkIixmdW5jdGlvbigpe1gocik7bGV0IHM9aXQoMTUpLGE9aXQoMjApO3JldHVybiBpLm9uQXhpc1VwZGF0ZU1lbnVPcGVuKHMsYSxpLmF4aXNFeHRlbnQpLFEoaS5zZXRFZGl0TWVudU9wZW5lZCghMCkpfSkoIm1lbnVDbG9zZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2V0RWRpdE1lbnVPcGVuZWQoITEpfSksUCg3LCJtYXQtaWNvbiIsNiksZygpKCksUyg4LFEyZSwyLDIsImRpdiIsNyksZygpLGgoOSwibWF0LW1lbnUiLDgsOSkoMTEsImRpdiIsMTApLEkoImNsaWNrIixmdW5jdGlvbihzKXtyZXR1cm4gcy5zdG9wUHJvcGFnYXRpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksaCgxMiwibGFiZWwiKSxUKDEzLCJtaW4iKSxnKCksUCgxNCwiaW5wdXQiLDExLDEyKSxnKCksaCgxNiwiZGl2IiwxMCksSSgiY2xpY2siLGZ1bmN0aW9uKHMpe3JldHVybiBzLnN0b3BQcm9wYWdhdGlvbigpfSkoImtleWRvd24iLGZ1bmN0aW9uKHMpe3JldHVybiBpLmtleWRvd25QcmV2ZW50Q2xvc2Uocyl9KSxoKDE3LCJsYWJlbCIpLFQoMTgsIm1heCIpLGcoKSxQKDE5LCJpbnB1dCIsMTEsMTMpLGcoKSxoKDIxLCJkaXYiLDE0KSxJKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksaCgyMiwiYnV0dG9uIiwxNSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7WChyKTtsZXQgcz1pdCgxNSksYT1pdCgyMCksbD1pdCg2KTtyZXR1cm4gaS5leHRlbnRDaGFuZ2VkKHMudmFsdWUsYS52YWx1ZSksUShsLmNsb3NlTWVudSgpKX0pLFQoMjMsIiBDaGFuZ2UgIiksZygpLGgoMjQsImJ1dHRvbiIsMTYpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKHIpLFEoaXQoNikuY2xvc2VNZW51KCkpfSksVCgyNSwiIENhbmNlbCAiKSxnKCkoKSgpfWlmKDImZSl7bGV0IHI9aXQoMTApO0FzKGkuYXhpcysiLWF4aXMgYXhpcyIpLHYoNCksXygibmdGb3JPZiIsaS5taW5vclRpY2tzKSgibmdGb3JUcmFja0J5IixpLnRyYWNrQnlNaW5vclRpY2spLHYoMSksbnQoImV4dGVudC1lZGl0LW1lbnUtb3BlbmVkIixpLmVkaXRNZW51T3BlbmVkKSxfKCJtYXRNZW51VHJpZ2dlckZvciIsciksdigzKSxfKCJuZ0lmIixpLm1ham9yVGlja3MubGVuZ3RoKSx2KDEpLF8oInlQb3NpdGlvbiIsInkiPT09aS5heGlzPyJhYm92ZSI6ImJlbG93Iiksdig1KSxfKCJ2YWx1ZSIsaS5heGlzRXh0ZW50WzBdKSx2KDUpLF8oInZhbHVlIixpLmF4aXNFeHRlbnRbMV0pfX0sZGVwZW5kZW5jaWVzOltubixGZSxKaSwkaSxFbixOYyxMY10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO2ZvbnQtc2l6ZToxMXB4O3VzZXItc2VsZWN0Om5vbmV9LmF4aXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHRlbnQtZWRpdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdey0tdGItaWNvbi1zaXplOiAxNnB4O2hlaWdodDoyNHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDt0b3A6NXB4O3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjI0cHg7cGFkZGluZzowfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0sIC5taW5vcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDA7b3ZlcmZsb3c6aGlkZGVufS5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7ZmxleDowIDAgMXB4O2p1c3RpZnktY29udGVudDpzdHJldGNofS50aWNrc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTozcHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTp0ZXh0LWJlZm9yZS1lZGdlO3RleHQtYW5jaG9yOm1pZGRsZX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6NXB4fS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6Y2VudHJhbDt0ZXh0LWFuY2hvcjplbmR9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDo1cHg7ZGlzcGxheTpncmlkO2ZvbnQtc2l6ZToxMnB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczozMHB4IG1pbm1heChhdXRvLCAxMDBweCk7aGVpZ2h0OjMwcHg7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtaW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItcmFkaXVzOjRweDtib3JkZXItc3R5bGU6c29saWQ7Y29sb3I6aW5oZXJpdH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjEuNDttYXJnaW4tbGVmdDo1cHg7cGFkZGluZzowIDEwcHh9LmF4aXNbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4dGVudC1lZGl0LW1lbnUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OnZpc2libGV9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Y29udGFpbjpzdHJpY3R9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3doaXRlLXNwYWNlOm5vd3JhcH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzllOWU5ZTtwYWRkaW5nOjAgNXB4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsLmxhc3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzllOWU5ZTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjVweCAwO3dpZHRoOjEwMCV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBaeChuLHQpe2xldCBlPU1hdGgubWluKEhjKG4ubWFwKCh7eDpvfSk9Pm8pLHQpLG4ubGVuZ3RoLTEpLGk9TWF0aC5tYXgoMCxlLTEpO3JldHVybiBNYXRoLmFicyhuW2ldLngtdCktTWF0aC5hYnMobltlXS54LXQpPD0wP2k6ZX1mdW5jdGlvbiBNdGUobix0LGUsaSxyLG8pe2xldCBzO3N3aXRjaChuLmRlbHRhTW9kZSl7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTDpzPTE7YnJlYWs7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FOnM9ODticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0U6cz0yMDticmVhaztkZWZhdWx0OnM9MSxjb25zb2xlLndhcm4oYFVua25vd24gV2hlZWxFdmVudCBkZWx0YU1vZGU6ICR7bi5kZWx0YU1vZGV9LmApfWxldCBhPW4uZGVsdGFZKnMsbD1hPDA/TWF0aC5tYXgoYSppLC0uOTUpOmEqaSx7d2lkdGg6YyxoZWlnaHQ6ZH09ZSx1PVtyLnJldmVyc2UodC54LFswLGNdLC1uLm9mZnNldFgqbCksci5yZXZlcnNlKHQueCxbMCxjXSxjKyhjLW4ub2Zmc2V0WCkqbCldLHA9W28ucmV2ZXJzZSh0LnksW2QsMF0sLW4ub2Zmc2V0WSpsKSxvLnJldmVyc2UodC55LFtkLDBdLGQrKGQtbi5vZmZzZXRZKSpsKV07cmV0dXJue3g6dVsxXTx1WzBdP1t1WzFdLHVbMF1dOnUseTpwWzFdPHBbMF0/W3BbMV0scFswXV06cH19dmFyIEoyZT1bImRvdHMiXTtmdW5jdGlvbiAkMmUobix0KXtpZigxJm4mJihObigpLFAoMCwiY2lyY2xlIiwxMSkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoMik7QmUoImN4IixpLmdldERvbVgoZS5kYXRhUG9pbnQueCkpKCJjeSIsaS5nZXREb21ZKGUuZGF0YVBvaW50LnkpKSgiZmlsbCIsZS5tZXRhZGF0YS5jb2xvcil9fWZ1bmN0aW9uIGVOZShuLHQpe2lmKDEmbiYmKE5uKCksT3QoMCksUygxLCQyZSwxLDMsImNpcmNsZSIsMTApLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO3YoMSksXygibmdJZiIsaS5zaG91bGRSZW5kZXJUb29sdGlwUG9pbnQoZS5kYXRhUG9pbnQpKX19ZnVuY3Rpb24gdE5lKG4sdCl7aWYoMSZuJiYoTm4oKSxPdCgwKSxTKDEsZU5lLDIsMSwibmctY29udGFpbmVyIiw5KSxrdCgpKSwyJm4pe2xldCBlPXcoKTt2KDEpLF8oIm5nRm9yT2YiLGUuY3Vyc29yZWREYXRhKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlTZXJpZXNOYW1lKX19ZnVuY3Rpb24gbk5lKG4sdCl7aWYoMSZuJiYoTm4oKSxQKDAsInJlY3QiLDEyKSksMiZuKXtsZXQgZT13KCk7QmUoIngiLGUuem9vbUJveEluVWlDb29yZGluYXRlLngpKCJ3aWR0aCIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUud2lkdGgpKCJ5IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS55KSgiaGVpZ2h0IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS5oZWlnaHQpfX12YXIgaU5lPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm57ZGF0YTpuLGN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ6dCxjdXJzb3JMb2NhdGlvbjplfX07ZnVuY3Rpb24gck5lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDE0KSxsaSgxLDE1KSxnKCkpLDImbil7bGV0IGU9dygyKSxpPWl0KDExKTt2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUudG9vbHRpcFRlbXBsYXRlP2UudG9vbHRpcFRlbXBsYXRlOmkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsZ2IoMixpTmUsZS5jdXJzb3JlZERhdGEsZS5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkLGUuY3Vyc29yTG9jYXRpb24pKX19ZnVuY3Rpb24gb05lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO1MoMCxyTmUsMiw2LCJuZy10ZW1wbGF0ZSIsMTMpLEkoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKSl9KX1pZigyJm4pe2xldCBlPXcoKTtfKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixlLnRvb2x0aXBPcmlnaW5FbCkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixlLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQmJmUuc3RhdGUuZ2V0VmFsdWUoKT09PWUuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsZS50b29sdGlwUG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixlLnNjcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsITEpKCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwhMCkoImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwhMCl9fWZ1bmN0aW9uIHNOZShuLHQpe2lmKDEmbiYmKE90KDApLGgoMSwidHIiLDE3KSgyLCJ0ZCIsMTgpLFAoMywic3BhbiIpLGcoKSxoKDQsInRkIiwxOSksVCg1KSxnKCksaCg2LCJ0ZCIpLFQoNyksZygpLGgoOCwidGQiKSxUKDkpLGcoKSgpLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7digzKSxUdCgiYmFja2dyb3VuZC1jb2xvciIsZS5tZXRhZGF0YS5jb2xvciksdigyKSxidChlLm1ldGFkYXRhLmRpc3BsYXlOYW1lKSx2KDIpLGJ0KGUuZGF0YVBvaW50LnkpLHYoMiksYnQoZS5kYXRhUG9pbnQueCl9fWZ1bmN0aW9uIGFOZShuLHQpe2lmKDEmbiYmKGgoMCwidGFibGUiKSgxLCJ0aGVhZCIpKDIsInRyIiksUCgzLCJ0aCIsMTYpLGgoNCwidGgiKSxUKDUsIk5hbWUiKSxnKCksaCg2LCJ0aCIpLFQoNywiWSIpLGcoKSxoKDgsInRoIiksVCg5LCJYIiksZygpKCkoKSxoKDEwLCJ0Ym9keSIpLFMoMTEsc05lLDEwLDUsIm5nLWNvbnRhaW5lciIsOSksZygpKCkpLDImbil7bGV0IGU9dC5kYXRhLGk9dygpO3YoMTEpLF8oIm5nRm9yT2YiLGUpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeVNlcmllc05hbWUpfX1mdW5jdGlvbiBjTmUobil7cmV0dXJuIG4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9dmFyIHd0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuc2Nyb2xsU3RyYXRlZ3k9aSx0aGlzLm9uVmlld0V4dGVudENoYW5nZT1uZXcgRix0aGlzLm9uVmlld0V4dGVudFJlc2V0PW5ldyBGLHRoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlPW5ldyBGLHRoaXMuSW50ZXJhY3Rpb25TdGF0ZT1Jcix0aGlzLnN0YXRlPW5ldyBBaShJci5OT05FKSx0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPSExLHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OjAsd2lkdGg6MCxoZWlnaHQ6MCx5OjB9LHRoaXMudG9vbHRpcFBvc2l0aW9ucz1be29mZnNldFk6NSxvcmlnaW5YOiJzdGFydCIsb3ZlcmxheVg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTo1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WToidG9wIn0se29mZnNldFk6LTE1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRZOi0xNSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRYOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRYOi01LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJ0b3AifV0sdGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkPW51bGwsdGhpcy5jdXJzb3JMb2NhdGlvbj1udWxsLHRoaXMuY3Vyc29yZWREYXRhPVtdLHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSx0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGF0ZS5zdWJzY3JpYmUoZT0+e3RoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlLmVtaXQoZSl9KSksdGhpcy5uZ1Vuc3Vic2NyaWJlLnBpcGUoTigoKT0+e3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9KSksbWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsImRibGNsaWNrIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblZpZXdFeHRlbnRSZXNldC5lbWl0KCksdGhpcy5zdGF0ZS5uZXh0KElyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxtaSh3aW5kb3csImtleWRvd24iLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuc2hvdWxkUGFuKGUpO2khPT10aGlzLnNwZWNpYWxLZXlQcmVzc2VkJiYodGhpcy5zcGVjaWFsS2V5UHJlc3NlZD1pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbWkod2luZG93LCJrZXl1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5zaG91bGRQYW4oZSk7aSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxtaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLnN0YXRlLmdldFZhbHVlKCkscj10aGlzLnNob3VsZFBhbihlKT9Jci5QQU5OSU5HOklyLkRSQUdfWk9PTUlORztpPT09SXIuTk9ORSYmcj09PUlyLkRSQUdfWk9PTUlORyYmKHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDplLm9mZnNldFgsd2lkdGg6MCx5OmUub2Zmc2V0WSxoZWlnaHQ6MH0pLGkhPT1yJiYodGhpcy5zdGF0ZS5uZXh0KHIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPShlLmJ1dHRvbnMmZ2EuTEVGVCk9PT1nYS5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtsZXQgcj10aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZTtpZighaSYmdGhpcy5zdGF0ZS5nZXRWYWx1ZSgpPT09SXIuRFJBR19aT09NSU5HJiZyLndpZHRoPjAmJnIuaGVpZ2h0PjApe2xldCBvPXRoaXMuZ2V0RGF0YVgoci54KSxzPXRoaXMuZ2V0RGF0YVgoci54K3Iud2lkdGgpLGE9dGhpcy5nZXREYXRhWShyLnkrci5oZWlnaHQpLGw9dGhpcy5nZXREYXRhWShyLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W28sc10seTpbYSxsXX19KX10aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1Jci5OT05FJiYodGhpcy5zdGF0ZS5uZXh0KElyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNDdXJzb3JJbnNpZGU9ITAsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxtaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuc3RhdGUubmV4dChJci5OT05FKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSksbWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57c3dpdGNoKHRoaXMuc3RhdGUuZ2V0VmFsdWUoKSl7Y2FzZSBJci5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlLm5leHQoSXIuTk9ORSksdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBJci5OT05FOnRoaXMudXBkYXRlVG9vbHRpcChlKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2UgSXIuUEFOTklORzp7bGV0IGk9LWUubW92ZW1lbnRYLHI9LWUubW92ZW1lbnRZLHt3aWR0aDpvLGhlaWdodDpzfT10aGlzLmRvbURpbSxhPXRoaXMuZ2V0RGF0YVgoaSksbD10aGlzLmdldERhdGFYKG8raSksYz10aGlzLmdldERhdGFZKHMrciksZD10aGlzLmdldERhdGFZKHIpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W2EsbF0seTpbYyxkXX19KTticmVha31jYXNlIElyLkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7bGV0IGk9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueCxlLm9mZnNldFhdLHI9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueSxlLm9mZnNldFldO3RoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4Ok1hdGgubWluKC4uLmkpLHdpZHRoOk1hdGgubWF4KC4uLmkpLU1hdGgubWluKC4uLmkpLHk6TWF0aC5taW4oLi4uciksaGVpZ2h0Ok1hdGgubWF4KC4uLnIpLU1hdGgubWluKC4uLnIpfX10aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfX0pLG1pKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSm4oZT0+e2xldCBpPSFlLmN0cmxLZXkmJiFlLnNoaWZ0S2V5JiZlLmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksaT8oZS5wcmV2ZW50RGVmYXVsdCgpLEh0KGUpKTpuYSgzZTMpLnBpcGUoTnQoKCk9Pnt0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLE4oKCk9Pm51bGwpKX0pLGtlKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6TXRlKGUsdGhpcy52aWV3RXh0ZW50LHRoaXMuZG9tRGltLC4wMSx0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSl9KSx0aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1Jci5TQ1JPTExfWk9PTUlORyYmKHRoaXMuc3RhdGUubmV4dChJci5TQ1JPTExfWk9PTUlORyksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvdWxkUGFuKGUpe2xldCBpPWUuc2hpZnRLZXl8fGUuYWx0S2V5O2lmKGUgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KXJldHVybiBpO2xldCByPShlLmJ1dHRvbnMmZ2EuTEVGVCk9PT1nYS5MRUZULG89KGUuYnV0dG9ucyZnYS5NSURETEUpPT09Z2EuTUlERExFO3JldHVybiEoIXImJiFvKSYmKG8mJiFyfHxpKX10cmFja0J5U2VyaWVzTmFtZShlLGkpe3JldHVybiBpLmlkfWdldERvbVgoZSl7cmV0dXJuIHRoaXMueFNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LngsWmModGhpcy5kb21EaW0sIngiKSxlKX1nZXREYXRhWChlKXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCxaYyh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksWmModGhpcy5kb21EaW0sInkiKSxlKX1nZXREYXRhWShlKXtyZXR1cm4gdGhpcy55U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueSxaYyh0aGlzLmRvbURpbSwieSIpLGUpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludChlKXtyZXR1cm4gbnVsbCE9PWUmJiFpc05hTihlLngpJiYhaXNOYU4oZS55KX11cGRhdGVUb29sdGlwKGUpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKGUub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKGUub2Zmc2V0WSl9LHRoaXMuY3Vyc29yTG9jYXRpb249e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl9b25Ub29sdGlwRGlzcGxheURldGFjaGVkKCl7dGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExfXVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl7bGV0IGU9dGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLmN1cnNvcmVkRGF0YT1bXSx2b2lkKHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSk7dGhpcy5jdXJzb3JlZERhdGE9dGhpcy5pc0N1cnNvckluc2lkZT90aGlzLnNlcmllc0RhdGEubWFwKGk9Pih7c2VyaWVzRGF0dW06aSxtZXRhZGF0YTp0aGlzLnNlcmllc01ldGFkYXRhTWFwW2kuaWRdfSkpLmZpbHRlcigoe21ldGFkYXRhOml9KT0+aSYmaS52aXNpYmxlJiYhQm9vbGVhbihpLmF1eCkpLm1hcCgoe3Nlcmllc0RhdHVtOmksbWV0YWRhdGE6cn0pPT57bGV0IG89WngoaS5wb2ludHMsZS54KSxzPWkucG9pbnRzW29dO3JldHVybntpZDppLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8sZGF0YVBvaW50OnMsZG9tUG9pbnQ6e3g6dGhpcy5nZXREb21YKHMueCkseTp0aGlzLmdldERvbVkocy55KX0sbWV0YWRhdGE6cn19KS5maWx0ZXIoaT0+aSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQygkdCksQyh4ZikpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihHZShKMmUsNyxNZSksR2UoQnUsNSkpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuZG90c0NvbnRhaW5lcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5vdmVybGF5PXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJm50KCJzaG93LXpvb20taW5zdHJ1Y3Rpb24iLGkuc2hvd1pvb21JbnN0cnVjdGlvbil9LGlucHV0czp7c2VyaWVzRGF0YToic2VyaWVzRGF0YSIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseVNjYWxlOiJ5U2NhbGUiLGRvbURpbToiZG9tRGltIix0b29sdGlwT3JpZ2luRWw6InRvb2x0aXBPcmlnaW5FbCIsdG9vbHRpcFRlbXBsYXRlOiJ0b29sdGlwVGVtcGxhdGUiLGRpc2FibGVUb29sdGlwOiJkaXNhYmxlVG9vbHRpcCJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIixvblZpZXdFeHRlbnRSZXNldDoib25WaWV3RXh0ZW50UmVzZXQiLG9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZToib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIn0sZmVhdHVyZXM6W1F0KFt7cHJvdmlkZTp4Zix1c2VGYWN0b3J5OmNOZSxkZXBzOlt6aV19XSksR3RdLGRlY2xzOjEyLHZhcnM6OSxjb25zdHM6W1sxLCJkb3RzIl0sWyJkb3RzIiwiIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiem9vbS1ib3giLDQsIm5nSWYiXSxbMSwiem9vbS1pbnN0cnVjdGlvbiJdLFsxLCJpbnN0cnVjdGlvbi1jb250ZW50Il0sWyJjZGtPdmVybGF5T3JpZ2luIiwiIiwxLCJ0b29sdGlwLW9yaWdpbiJdLFsidG9vbHRpcE9yaWdpbiIsImNka092ZXJsYXlPcmlnaW4iXSxbImRlZmF1bHRUb29sdGlwIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiciIsIjQiLDQsIm5nSWYiXSxbInIiLCI0Il0sWzEsInpvb20tYm94Il0sWyJjZGtDb25uZWN0ZWRPdmVybGF5IiwiIiwzLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IiwiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImRldGFjaCJdLFsxLCJ0b29sdGlwLWNvbnRhaW5lciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2lyY2xlLWhlYWRlciJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMSwibmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE5uKCksaCgwLCJzdmciLDAsMSksUygyLHROZSwyLDIsIm5nLWNvbnRhaW5lciIsMiksUygzLG5OZSwxLDQsInJlY3QiLDMpLGcoKSxPbygpLGgoNCwiZGl2Iiw0KSg1LCJzcGFuIiw1KSxUKDYsIkFsdCArIFNjcm9sbCB0byBab29tIiksZygpKCksUCg3LCJkaXYiLDYsNyksUyg5LG9OZSwxLDcsbnVsbCwyKSxTKDEwLGFOZSwxMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw4LFd0KSksMiZlJiYobnQoInBhbm5hYmxlIixpLnNwZWNpYWxLZXlQcmVzc2VkKSgiZHJhZ2dhYmxlIixpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuTk9ORXx8aS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORykoInBhbm5pbmciLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5QQU5OSU5HKSx2KDIpLF8oIm5nSWYiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSx2KDEpLF8oIm5nSWYiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5EUkFHX1pPT01JTkcpLHYoNiksXygibmdJZiIsIWkuZGlzYWJsZVRvb2x0aXApKX0sZGVwZW5kZW5jaWVzOltubixGZSxMcixCdSx3ZF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7dXNlci1zZWxlY3Q6bm9uZX0uZG90c1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uZG90cy5kcmFnZ2FibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpjcm9zc2hhaXJ9LmRvdHMucGFubmFibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFifS5kb3RzLnBhbm5pbmdbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFiYmluZ30udG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVdID4gc3Bhbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC42KTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDt3aWR0aDoxMHB4fS50b29sdGlwLW9yaWdpbltfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9LnRvb2x0aXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjg1KTtib3JkZXItcmFkaXVzOjRweDtjb2xvcjojZmZmO2NvbnRhaW46cGFpbnQgc3R5bGUgbGF5b3V0O2ZvbnQtc2l6ZTouOWVtO292ZXJmbG93OmF1dG87cGFkZGluZzo1cHg7cG9pbnRlci1ldmVudHM6bm9uZTt3aWR0aDoxMDAlfXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDVweDt0ZXh0LWFsaWduOmxlZnR9dGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nLWJvdHRvbTo1cHh9Lnpvb20tYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsLW9wYWNpdHk6LjAzO2ZpbGw6IzAwMDtzdHJva2U6I2NjY30uem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xlZnQ6MDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDoxMHB4O3RyYW5zaXRpb246b3BhY2l0eSAuNXM7ei1pbmRleDoxfS5pbnN0cnVjdGlvbi1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjYpO2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7cGFkZGluZzo1cHggMTBweDt1c2VyLXNlbGVjdDpub25lfS5zaG93LXpvb20taW5zdHJ1Y3Rpb25bX25naG9zdC0lQ09NUCVdICAgLnpvb20taW5zdHJ1Y3Rpb25bX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHVOZShuLHQpe2lmKDEmbiYmKE5uKCksUCgwLCJsaW5lIiwyKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTtudCgiemVybyIsMD09PWUpLEJlKCJ4MSIsaS5nZXREb21YKGUpKSgieDIiLGkuZ2V0RG9tWChlKSkoInkyIixpLmRvbURpbS5oZWlnaHQpfX1mdW5jdGlvbiBwTmUobix0KXtpZigxJm4mJihObigpLFAoMCwibGluZSIsMykpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCk7bnQoInplcm8iLDA9PT1lKSxCZSgieTEiLGkuZ2V0RG9tWShlKSkoIngyIixpLmRvbURpbS53aWR0aCkoInkyIixpLmdldERvbVkoZSkpfX12YXIgU3RlPSgoKT0+e2NsYXNzIG57Z2V0RG9tWChlKXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCxaYyh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksWmModGhpcy5kb21EaW0sInkiKSxlKX1nZXRYVGlja3MoKXtyZXR1cm4gdGhpcy54U2NhbGUudGlja3ModGhpcy52aWV3RXh0ZW50LngsWHgodGhpcy5kb21EaW0ud2lkdGgsdGhpcy54R3JpZENvdW50KSl9Z2V0WVRpY2tzKCl7cmV0dXJuIHRoaXMueVNjYWxlLnRpY2tzKHRoaXMudmlld0V4dGVudC55LFh4KHRoaXMuZG9tRGltLmhlaWdodCx0aGlzLnlHcmlkQ291bnQpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibGluZS1jaGFydC1ncmlkLXZpZXciXV0saW5wdXRzOnt2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseEdyaWRDb3VudDoieEdyaWRDb3VudCIseVNjYWxlOiJ5U2NhbGUiLHlHcmlkQ291bnQ6InlHcmlkQ291bnQiLGRvbURpbToiZG9tRGltIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInkxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ4MSIsIjAiLDMsInplcm8iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsieTEiLCIwIl0sWyJ4MSIsIjAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihObigpLGgoMCwic3ZnIiksUygxLHVOZSwxLDUsImxpbmUiLDApLFMoMixwTmUsMSw1LCJsaW5lIiwxKSxnKCkpLDImZSYmKHYoMSksXygibmdGb3JPZiIsaS5nZXRYVGlja3MoKSksdigxKSxfKCJuZ0Zvck9mIixpLmdldFlUaWNrcygpKSl9LGRlcGVuZGVuY2llczpbbm5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICBzdmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBzdHJva2U6ICNjY2M7XG4gICAgICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICAgICAgfVxuXG4gICAgICAuemVyb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBzdHJva2U6ICNhYWE7XG4gICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxtTmU9WyJzZXJpZXNWaWV3Il0saE5lPVsieEF4aXMiXSxnTmU9WyJ5QXhpcyJdLF9OZT1bImNoYXJ0RWwiXTtmdW5jdGlvbiBiTmUobix0KXtpZigxJm4mJlAoMCwibGluZS1jaGFydC1ncmlkLXZpZXciLDE2KSwyJm4pe2xldCBlPXcoKTtfKCJ2aWV3RXh0ZW50IixlLnZpZXdCb3gpKCJ4U2NhbGUiLGUueFNjYWxlKSgieVNjYWxlIixlLnlTY2FsZSkoInhHcmlkQ291bnQiLGUuWF9HUklEX0NPVU5UKSgieUdyaWRDb3VudCIsZS5ZX0dSSURfQ09VTlQpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy5tYWluKX19ZnVuY3Rpb24gdk5lKG4sdCl7MSZuJiYoTm4oKSxQKDAsInN2ZyIsbnVsbCwxNykpfWZ1bmN0aW9uIHlOZShuLHQpezEmbiYmUCgwLCJjYW52YXMiLG51bGwsMTcpfWZ1bmN0aW9uIHhOZShuLHQpe2lmKDEmbiYmKE90KDApLFMoMSx2TmUsMiwwLCJzdmciLDUpLFMoMix5TmUsMiwwLCJjYW52YXMiLDUpLGt0KCkpLDImbil7bGV0IGU9dygpO3YoMSksXygibmdJZiIsZS5nZXRSZW5kZXJlclR5cGUoKT09PWUuUmVuZGVyZXJUeXBlLlNWRyksdigxKSxfKCJuZ0lmIixlLmdldFJlbmRlcmVyVHlwZSgpPT09ZS5SZW5kZXJlclR5cGUuV0VCR0wpfX1mdW5jdGlvbiBDTmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXciLDE4KSxJKCJvblZpZXdFeHRlbnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uVmlld0JveENoYW5nZWQocikpfSkoIm9uVmlld0V4dGVudFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLnZpZXdCb3hSZXNldCgpKX0pKCJvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZShyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCksaT1pdCgxKTtfKCJzZXJpZXNEYXRhIixlLnNlcmllc0RhdGEpKCJzZXJpZXNNZXRhZGF0YU1hcCIsZS5zZXJpZXNNZXRhZGF0YU1hcCkoInZpZXdFeHRlbnQiLGUudmlld0JveCkoInhTY2FsZSIsZS54U2NhbGUpKCJ5U2NhbGUiLGUueVNjYWxlKSgidG9vbHRpcE9yaWdpbkVsIixpKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMubWFpbikoInRvb2x0aXBUZW1wbGF0ZSIsZS50b29sdGlwVGVtcGxhdGUpKCJkaXNhYmxlVG9vbHRpcCIsZS5kaXNhYmxlVG9vbHRpcCl9fXZhciBNTmU9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aX19O2Z1bmN0aW9uIHdOZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxOSksbGkoMSwyMCksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUuY3VzdG9tVmlzVGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsQU8oMixNTmUsZS54U2NhbGUsZS55U2NhbGUsZS5kb21EaW1lbnNpb25zLm1haW4sZS52aWV3Qm94KSl9fWZ1bmN0aW9uIFNOZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImxpbmUtY2hhcnQtYXhpcyIsMjEpLEkoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKHIsInkiKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygiYXhpc0V4dGVudCIsZS52aWV3Qm94LnkpKCJjdXN0b21Gb3JtYXR0ZXIiLGUuY3VzdG9tWUZvcm1hdHRlcikoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLnlBeGlzKSgiZ3JpZENvdW50IixlLllfR1JJRF9DT1VOVCkoInNjYWxlIixlLnlTY2FsZSl9fWZ1bmN0aW9uIEVOZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImxpbmUtY2hhcnQtYXhpcyIsMjIpLEkoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKHIsIngiKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygiYXhpc0V4dGVudCIsZS52aWV3Qm94LngpKCJjdXN0b21Gb3JtYXR0ZXIiLGUuY3VzdG9tWEZvcm1hdHRlcikoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLnhBeGlzKSgiZ3JpZENvdW50IixlLlhfR1JJRF9DT1VOVCkoInNjYWxlIixlLnhTY2FsZSl9fWZ1bmN0aW9uIFROZShuLHQpezEmbiYmKGgoMCwiZGl2IiwyMyksUCgxLCJzcGFuIiwyNCksZygpKX12YXIgRE5lPWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aSxpbnRlcmFjdGlvblN0YXRlOnJ9fTtmdW5jdGlvbiBJTmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMjUsMjYpLGxpKDIsMjApLGcoKSksMiZuKXtsZXQgZT13KCk7digyKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFJPKDIsRE5lLGUueFNjYWxlLGUueVNjYWxlLGUuZG9tRGltZW5zaW9ucy5tYWluLGUudmlld0JveCxlLmludGVyYWN0aW9uU3RhdGUpKX19dmFyIEFOZT1mdW5jdGlvbihuLHQpe3JldHVybntjb250YWluZXI6ITAsImRhcmstbW9kZSI6biwibGluZS1vbmx5LW1vZGUiOnQsImxpbmUtY2hhcnQiOiEwfX0seVY9e3g6WzAsMV0seTpbMCwxXX0sY189KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5SZW5kZXJlclR5cGU9UWksdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZT1RaS5XRUJHTCx0aGlzLnhTY2FsZVR5cGU9bnIuTElORUFSLHRoaXMueVNjYWxlVHlwZT1uci5MSU5FQVIsdGhpcy51c2VyVmlld0JveD1udWxsLHRoaXMubGluZU9ubHk9ITEsdGhpcy5kaXNhYmxlVG9vbHRpcD0hMSx0aGlzLnZpZXdCb3hDaGFuZ2VkPW5ldyBGLHRoaXMub25WaWV3Qm94T3ZlcnJpZGRlbj1uZXcgUnAoMSksdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5ZX0dSSURfQ09VTlQ9Nix0aGlzLlhfR1JJRF9DT1VOVD0xMCx0aGlzLnhTY2FsZT1xbCh0aGlzLnhTY2FsZVR5cGUpLHRoaXMueVNjYWxlPXFsKHRoaXMueFNjYWxlVHlwZSksdGhpcy52aWV3Qm94PXlWLHRoaXMuZG9tRGltZW5zaW9ucz17bWFpbjp7d2lkdGg6MCxoZWlnaHQ6MH0seEF4aXM6e3dpZHRoOjAsaGVpZ2h0OjB9LHlBeGlzOnt3aWR0aDowLGhlaWdodDowfX0sdGhpcy5zaG93Q2hhcnRSZW5kZXJlckVsZW1lbnQ9ITAsdGhpcy5pbnRlcmFjdGlvblN0YXRlPUlyLk5PTkUsdGhpcy5saW5lQ2hhcnQ9bnVsbCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMSx0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ITEsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy51c2VyVmlld0JveFVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuc2NhbGVVcGRhdGVkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMX1uZ09uSW5pdCgpe3RoaXMub25WaWV3Qm94T3ZlcnJpZGRlbi5uZXh0KHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbil9bmdPbkNoYW5nZXMoZSl7ZS54U2NhbGVUeXBlJiYodGhpcy54U2NhbGU9cWwodGhpcy54U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksZS55U2NhbGVUeXBlJiYodGhpcy55U2NhbGU9cWwodGhpcy55U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksZS5zZXJpZXNEYXRhJiYodGhpcy5pc0RhdGFVcGRhdGVkPSEwKSxlLmZpeGVkVmlld0JveCYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwKSxlLnNlcmllc01ldGFkYXRhTWFwJiYodGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCksZS51c2VEYXJrTW9kZSYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwKSxlLnVzZXJWaWV3Qm94JiYodGhpcy51c2VyVmlld0JveFVwZGF0ZWQ9ITApLHRoaXMudXNlclZpZXdCb3hVcGRhdGVkP3RoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighIXRoaXMudXNlclZpZXdCb3gpOnRoaXMuc2NhbGVVcGRhdGVkJiZ0aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oITEpLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD10aGlzLmlzVmlld0JveENoYW5nZWR8fHRoaXMudXNlclZpZXdCb3hVcGRhdGVkfHx0aGlzLnNjYWxlVXBkYXRlZHx8IXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy5zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveChlKSx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKX1yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpeyF0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3R8fHRoaXMuZGlzYWJsZVVwZGF0ZXx8KHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSExLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy5zY2FsZVVwZGF0ZWQ9ITAsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITAsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITAsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITAsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMSl9b25WaWV3UmVzaXplKCl7IXRoaXMubGluZUNoYXJ0fHwodGhpcy5yZWFkQW5kVXBkYXRlRG9tRGltZW5zaW9ucygpLHRoaXMubGluZUNoYXJ0LnJlc2l6ZSh0aGlzLmRvbURpbWVuc2lvbnMubWFpbiksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfXNob3VsZFVwZGF0ZURlZmF1bHRWaWV3Qm94KGUpe2lmKGUueFNjYWxlVHlwZXx8ZS55U2NhbGVUeXBlfHxlLmlnbm9yZVlPdXRsaWVyc3x8ZS5zZXJpZXNEYXRhKXJldHVybiEwO2xldCByPWUuc2VyaWVzTWV0YWRhdGFNYXA7aWYocil7bGV0IG89ci5wcmV2aW91c1ZhbHVlO2lmKE9iamVjdC5rZXlzKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApLmxlbmd0aCE9PU9iamVjdC5rZXlzKG8/P3t9KS5sZW5ndGgpcmV0dXJuITA7Zm9yKGxldFtzLGFdb2YgT2JqZWN0LmVudHJpZXModGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpe2xldCBsPW8mJm9bc107aWYoIWx8fGEudmlzaWJsZSE9PWwudmlzaWJsZSlyZXR1cm4hMH19cmV0dXJuITF9b25Db250ZXh0TG9zdCgpe3RoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMCx0aGlzLmxpbmVDaGFydCYmKHRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKSx0aGlzLmxpbmVDaGFydD1udWxsKX10cmlnZ2VyQ29udGV4dExvc3RGb3JUZXN0KCl7dGhpcy5vbkNvbnRleHRMb3N0KCl9Z2V0TGluZUNoYXJ0Rm9yVGVzdCgpe3JldHVybiB0aGlzLmxpbmVDaGFydH1pbml0aWFsaXplQ2hhcnQoKXt0aGlzLmxpbmVDaGFydCYmdGhpcy5saW5lQ2hhcnQuZGlzcG9zZSgpO2xldCBlPXRoaXMuZ2V0UmVuZGVyZXJUeXBlKCksaT17b25EcmF3RW5kOigpPT57fSxvbkNvbnRleHRMb3N0OnRoaXMub25Db250ZXh0TG9zdC5iaW5kKHRoaXMpfSxyPW51bGw7c3dpdGNoKHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSxlKXtjYXNlIFFpLlNWRzpyPXt0eXBlOlFpLlNWRyxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsY2FsbGJhY2tzOmksZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2Nhc2UgUWkuV0VCR0w6cj17dHlwZTpRaS5XRUJHTCxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsZGV2aWNlUGl4ZWxSYXRpbzp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxjYWxsYmFja3M6aSxkb21EaW1lbnNpb246dGhpcy5kb21EaW1lbnNpb25zLm1haW4sdXNlRGFya01vZGU6dGhpcy51c2VEYXJrTW9kZX07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYDxsaW5lLWNoYXJ0PiBkb2VzIG5vdCB5ZXQgc3VwcG9ydCByZW5kZXJlclR5cGU6ICR7ZX1gKX1sZXQgcz1lIT09UWkuU1ZHJiZZbF9pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpP3ltOmlBO3RoaXMubGluZUNoYXJ0PW5ldyBzKHIpfW5nT25EZXN0cm95KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKX1nZXRSZW5kZXJlclR5cGUoKXtyZXR1cm4gZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgUWkuU1ZHOnJldHVybiBRaS5TVkc7Y2FzZSBRaS5XRUJHTDpyZXR1cm4gWWxfaXNXZWJHbDJTdXBwb3J0ZWQoKT9RaS5XRUJHTDpRaS5TVkc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVuZGVyZXJUeXBlOiAke259YCl9fSh0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZSl9cmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKXt0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOnRoaXMuc2VyaWVzVmlldy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHhBeGlzOnt3aWR0aDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueEF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHlBeGlzOnt3aWR0aDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueUF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9fX11cGRhdGVMaW5lQ2hhcnQoKXtpZih0aGlzLnJlY292ZXJSZW5kZXJlcklmTmVlZGVkKCksdGhpcy5saW5lQ2hhcnQmJiF0aGlzLmRpc2FibGVVcGRhdGUpe2lmKHRoaXMuc2NhbGVVcGRhdGVkJiYodGhpcy5zY2FsZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0WFNjYWxlVHlwZSh0aGlzLnhTY2FsZVR5cGUpLHRoaXMubGluZUNoYXJ0LnNldFlTY2FsZVR5cGUodGhpcy55U2NhbGVUeXBlKSksdGhpcy5pc01ldGFkYXRhVXBkYXRlZCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0TWV0YWRhdGEodGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpLHRoaXMuaXNEYXRhVXBkYXRlZCYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXREYXRhKHRoaXMuc2VyaWVzRGF0YSkpLHRoaXMudXNlRGFya01vZGVVcGRhdGVkJiYodGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0VXNlRGFya01vZGUodGhpcy51c2VEYXJrTW9kZSkpLHRoaXMudXNlclZpZXdCb3hVcGRhdGVkJiYodGhpcy51c2VyVmlld0JveFVwZGF0ZWQ9ITEpLHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy51c2VyVmlld0JveCl0aGlzLnZpZXdCb3g9dGhpcy51c2VyVmlld0JveDtlbHNlIGlmKCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuZml4ZWRWaWV3Qm94KXRoaXMudmlld0JveD10aGlzLmZpeGVkVmlld0JveDtlbHNlIGlmKCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuaXNWaWV3Qm94Q2hhbmdlZCl7bGV0IGk9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1udWxsLHM9bnVsbCxhPVtdO2ZvcihsZXR7aWQ6dSxwb2ludHM6cH1vZiBuKXtsZXQgZj10W3VdO2lmKGYmJiFmLmF1eCYmZi52aXNpYmxlKWZvcihsZXQgbT0wO208cC5sZW5ndGg7bSsrKXtsZXR7eDpiLHk6TX09cFttXTtpKGIpJiYobz1udWxsPT09b3x8YjxvP2I6byxzPW51bGw9PT1zfHxiPnM/YjpzKSxyKE0pJiZhLnB1c2goTSl9fWEuc29ydChpbCk7bGV0IGM9YVswXSxkPWFbYS5sZW5ndGgtMV07cmV0dXJuIGUmJmEubGVuZ3RoPjImJihjPWFbTWF0aC5jZWlsKC4wNSooYS5sZW5ndGgtMSkpXSxkPWFbTWF0aC5mbG9vciguOTUqKGEubGVuZ3RoLTEpKV0pLHt4Om51bGwhPT1vJiZudWxsIT09cz9bbyxzXTp2b2lkIDAseTp2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kP1tjLGRdOnZvaWQgMH19KHRoaXMuc2VyaWVzRGF0YSx0aGlzLnNlcmllc01ldGFkYXRhTWFwLHRoaXMuaWdub3JlWU91dGxpZXJzLHRoaXMueFNjYWxlLmlzU2FmZU51bWJlcix0aGlzLnlTY2FsZS5pc1NhZmVOdW1iZXIpO3RoaXMudmlld0JveD17eDp0aGlzLnhTY2FsZS5uaWNlRG9tYWluKGkueD8/eVYueCkseTp0aGlzLnlTY2FsZS5uaWNlRG9tYWluKGkueT8/eVYueSl9fSh0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZHx8dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkKSYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXRWaWV3Qm94KHRoaXMudmlld0JveCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfX1vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OmV9KXt0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQoZSl9dmlld0JveFJlc2V0KCl7dGhpcy52aWV3Qm94Q2hhbmdlZC5lbWl0KG51bGwpfXNldElzVmlld0JveE92ZXJyaWRkZW4oZSl7bGV0IGk9dGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuO3RoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbj1lLGkhPT1lJiZ0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dChlKX1vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UoZSl7dGhpcy5pbnRlcmFjdGlvblN0YXRlPWV9Z2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpe3JldHVybiB0aGlzLm9uVmlld0JveE92ZXJyaWRkZW59b25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKGUsaSl7bGV0IHI9ey4uLnRoaXMudmlld0JveCxbaV06ZX07dGhpcy5vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OnJ9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQygkdCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UobU5lLDcsTWUpLEdlKGhOZSw3LE1lKSxHZShnTmUsNyxNZSksR2UoX05lLDUsTWUpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLnNlcmllc1ZpZXc9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkueEF4aXM9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkueUF4aXM9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuY2hhcnRFbD1yLmZpcnN0KX19LGlucHV0czp7Y3VzdG9tVmlzVGVtcGxhdGU6ImN1c3RvbVZpc1RlbXBsYXRlIixjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZToiY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSIscHJlZmVycmVkUmVuZGVyZXJUeXBlOiJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLHNlcmllc0RhdGE6InNlcmllc0RhdGEiLGZpeGVkVmlld0JveDoiZml4ZWRWaWV3Qm94IixzZXJpZXNNZXRhZGF0YU1hcDoic2VyaWVzTWV0YWRhdGFNYXAiLHhTY2FsZVR5cGU6InhTY2FsZVR5cGUiLHlTY2FsZVR5cGU6InlTY2FsZVR5cGUiLGN1c3RvbVhGb3JtYXR0ZXI6ImN1c3RvbVhGb3JtYXR0ZXIiLGN1c3RvbVlGb3JtYXR0ZXI6ImN1c3RvbVlGb3JtYXR0ZXIiLHRvb2x0aXBUZW1wbGF0ZToidG9vbHRpcFRlbXBsYXRlIix1c2VyVmlld0JveDoidXNlclZpZXdCb3giLGxpbmVPbmx5OiJsaW5lT25seSIsZGlzYWJsZVRvb2x0aXA6ImRpc2FibGVUb29sdGlwIixkaXNhYmxlVXBkYXRlOiJkaXNhYmxlVXBkYXRlIixpZ25vcmVZT3V0bGllcnM6Imlnbm9yZVlPdXRsaWVycyJ9LG91dHB1dHM6e3ZpZXdCb3hDaGFuZ2VkOiJ2aWV3Qm94Q2hhbmdlZCJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6MTYsdmFyczoxMyxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwiY2RrT3ZlcmxheU9yaWdpbiIsIiIsMywibmdDbGFzcyIsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbIm92ZXJsYXlUYXJnZXQiLCJjZGtPdmVybGF5T3JpZ2luIl0sWzEsInNlcmllcy12aWV3Il0sWyJzZXJpZXNWaWV3IiwiIl0sWzMsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4R3JpZENvdW50IiwieUdyaWRDb3VudCIsImRvbURpbSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJkaXNhYmxlVG9vbHRpcCIsIm9uVmlld0V4dGVudENoYW5nZSIsIm9uVmlld0V4dGVudFJlc2V0Iiwib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImN1c3RvbS12aXMiLDQsIm5nSWYiXSxbMSwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFsiYXhpcyIsInkiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsxLCJ4LWF4aXMiXSxbInhBeGlzIiwiIl0sWyJheGlzIiwieCIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRvdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjdXN0b20tdmlzIGN1c3RvbS1jaGFydC1vdmVybGF5LXZpcyIsNCwibmdJZiJdLFszLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwieEdyaWRDb3VudCIsInlHcmlkQ291bnQiLCJkb21EaW0iXSxbImNoYXJ0RWwiLCIiXSxbMywic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInRvb2x0aXBPcmlnaW5FbCIsImRvbURpbSIsInRvb2x0aXBUZW1wbGF0ZSIsImRpc2FibGVUb29sdGlwIiwib25WaWV3RXh0ZW50Q2hhbmdlIiwib25WaWV3RXh0ZW50UmVzZXQiLCJvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UiXSxbMSwiY3VzdG9tLXZpcyJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbImF4aXMiLCJ5IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiXSxbImF4aXMiLCJ4IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiXSxbMSwiZG90Il0sWzEsInJlY3QiXSxbMSwiY3VzdG9tLXZpcyIsImN1c3RvbS1jaGFydC1vdmVybGF5LXZpcyJdLFsiY3VzdG9tQ2hhcnRPdmVybGF5IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDAsMSksSSgib25SZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25WaWV3UmVzaXplKCl9KSxoKDIsImRpdiIsMiwzKSxTKDQsYk5lLDEsNiwibGluZS1jaGFydC1ncmlkLXZpZXciLDQpLFMoNSx4TmUsMywyLCJuZy1jb250YWluZXIiLDUpLFMoNixDTmUsMSw5LCJsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXciLDYpLFMoNyx3TmUsMiw3LCJkaXYiLDcpLGcoKSxoKDgsImRpdiIsOCw5KSxTKDEwLFNOZSwxLDUsImxpbmUtY2hhcnQtYXhpcyIsMTApLGcoKSxoKDExLCJkaXYiLDExLDEyKSxTKDEzLEVOZSwxLDUsImxpbmUtY2hhcnQtYXhpcyIsMTMpLGcoKSxTKDE0LFROZSwyLDAsImRpdiIsMTQpLFMoMTUsSU5lLDMsOCwiZGl2IiwxNSksZygpKSwyJmUmJihfKCJuZ0NsYXNzIixxcigxMCxBTmUsaS51c2VEYXJrTW9kZSxpLmxpbmVPbmx5KSkoInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwwKSx2KDQpLF8oIm5nSWYiLCFpLmxpbmVPbmx5KSx2KDEpLF8oIm5nSWYiLGkuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50KSx2KDEpLF8oIm5nSWYiLCFpLmxpbmVPbmx5KSx2KDEpLF8oIm5nSWYiLGkuY3VzdG9tVmlzVGVtcGxhdGUpLHYoMyksXygibmdJZiIsIWkubGluZU9ubHkpLHYoMyksXygibmdJZiIsIWkubGluZU9ubHkpLHYoMSksXygibmdJZiIsIWkubGluZU9ubHkpLHYoMSksXygibmdJZiIsaS5jdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSkpfSxkZXBlbmRlbmNpZXM6W3luLEZlLExyLHdkLEN0ZSx3dGUsU3RlLE9mXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59W19uZ2hvc3QtJUNPTVAlXSAgICAgLmxpbmUtY2hhcnQ6aGFzKC5ob3Jpem9udGFsLXByb3NwZWN0aXZlLWFyZWE6aG92ZXIpIC54LWF4aXMgLmV4dGVudC1lZGl0LWJ1dHRvbnt2aXNpYmlsaXR5OnZpc2libGV9W19uZ2hvc3QtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfS5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6aW5oZXJpdDtkaXNwbGF5OmdyaWQ7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7Z3JpZC10ZW1wbGF0ZS1hcmVhczoieWF4aXMgc2VyaWVzIiAiZG90IHhheGlzIiAiLiBjdXN0b21DaGFydE92ZXJsYXkiO2dyaWQtdGVtcGxhdGUtY29sdW1uczo1MHB4IDFmcjtncmlkLWF1dG8tcm93czoxZnIgMzBweCAwcHh9LmNvbnRhaW5lci5kYXJrLW1vZGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmNvbnRhaW5lci5saW5lLW9ubHktbW9kZVtfbmdjb250ZW50LSVDT01QJV17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjAgMWZyO2dyaWQtYXV0by1yb3dzOjFmciAwfS5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNlcmllcztwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNhbnZhc1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBzdmdbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1ncmlkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAuY3VzdG9tLXZpc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7bGVmdDowO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlOy13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWF4aXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp4YXhpcztwb3NpdGlvbjpyZWxhdGl2ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eWF4aXN9LmRvdFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtkaXNwbGF5OmZsZXg7Z3JpZC1hcmVhOmRvdDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmRvdFtfbmdjb250ZW50LSVDT01QJV0gICAucmVjdFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjFweDt3aWR0aDoxcHg7YmFja2dyb3VuZC1jb2xvcjojYWFhfS5jdXN0b20tY2hhcnQtb3ZlcmxheS12aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpjdXN0b21DaGFydE92ZXJsYXk7Z3JpZC1yb3ctZW5kOjI7Z3JpZC1yb3ctc3RhcnQ6MX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFJOZShuLHQpezEmbiYmbGkoMCl9dmFyIFR0ZT1mdW5jdGlvbihuKXtyZXR1cm57JGltcGxpY2l0Om59fTtmdW5jdGlvbiBQTmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNCksUygxLFJOZSwxLDAsIm5nLWNvbnRhaW5lciIsNSksVCgyKSxnKCkpLDImbil7bGV0IGU9dygpLGk9aXQoNik7digxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLEluKDMsVHRlLGUuZGF0dW0pKSx2KDEpLEhlKCIgIixlLmdldEZvcm1hdHRlZERhdGFGb3JDb2x1bW4oKSwiICIpfX1mdW5jdGlvbiBPTmUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIGtOZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw0KSxTKDEsT05lLDEsMCwibmctY29udGFpbmVyIiw1KSxUKDIpLGcoKSksMiZuKXtsZXQgZT13KCksaT1pdCg2KTt2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSW4oMyxUdGUsZS5kYXR1bSkpLHYoMSksSGUoIiAiLGUuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbigpLCIgIil9fWZ1bmN0aW9uIEZOZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw2KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiICIsZS5nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKCksIiAiKX19ZnVuY3Rpb24gTk5lKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw5KX1mdW5jdGlvbiBMTmUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDEwKX1mdW5jdGlvbiBCTmUobix0KXtpZigxJm4mJihTKDAsTk5lLDEsMCwibWF0LWljb24iLDcpLFMoMSxMTmUsMSwwLCJtYXQtaWNvbiIsOCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7XygibmdJZiIsZT49MCksdigxKSxfKCJuZ0lmIixlPDApfX12YXIgVk5lPVsiKiJdLGRfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRleHRNZW51T3BlbmVkPW5ldyBGLHRoaXMuQ29sdW1uSGVhZGVyVHlwZT1odH1nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKCl7aWYodm9pZCAwPT09dGhpcy5kYXR1bSlyZXR1cm4iIjtzd2l0Y2godGhpcy5oZWFkZXIudHlwZSl7Y2FzZSBodC5SVU46cmV0dXJuIHRoaXMuZGF0dW07Y2FzZSBodC5WQUxVRTpjYXNlIGh0LlNURVA6Y2FzZSBodC5TTU9PVEhFRDpjYXNlIGh0LlNUQVJUX1NURVA6Y2FzZSBodC5FTkRfU1RFUDpjYXNlIGh0LlNUQVJUX1ZBTFVFOmNhc2UgaHQuRU5EX1ZBTFVFOmNhc2UgaHQuTUlOX1ZBTFVFOmNhc2UgaHQuTUFYX1ZBTFVFOmNhc2UgaHQuU1RFUF9BVF9NQVg6Y2FzZSBodC5TVEVQX0FUX01JTjpjYXNlIGh0Lk1FQU46Y2FzZSBodC5IUEFSQU06cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmRhdHVtP2cwLmZvcm1hdFNob3J0KHRoaXMuZGF0dW0pOnRoaXMuZGF0dW07Y2FzZSBodC5USU1FOnJldHVybiBuZXcgRGF0ZSh0aGlzLmRhdHVtKS50b0lTT1N0cmluZygpO2Nhc2UgaHQuUkVMQVRJVkVfVElNRTpyZXR1cm4gXzAuZm9ybWF0UmVhZGFibGUodGhpcy5kYXR1bSk7Y2FzZSBodC5WQUxVRV9DSEFOR0U6cmV0dXJuIGcwLmZvcm1hdFNob3J0KE1hdGguYWJzKHRoaXMuZGF0dW0pKTtjYXNlIGh0LlBFUkNFTlRBR0VfQ0hBTkdFOnJldHVybiBNYXRoLnJvdW5kKDEwMCp0aGlzLmRhdHVtKS50b1N0cmluZygpKyIlIjtjYXNlIGh0LlJBV19DSEFOR0U6cmV0dXJuIGlwLmZvcm1hdFNob3J0KE1hdGguYWJzKHRoaXMuZGF0dW0pKTtkZWZhdWx0OnJldHVybiIifX1vbkNvbnRleHRNZW51T3BlbmVkKGUpe3RoaXMuY29udGV4dE1lbnVPcGVuZWQuZW1pdChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1jb250ZW50LWNlbGwiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJjb250ZXh0bWVudSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Db250ZXh0TWVudU9wZW5lZChvKX0pfSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIixkYXR1bToiZGF0dW0ifSxvdXRwdXRzOntjb250ZXh0TWVudU9wZW5lZDoiY29udGV4dE1lbnVPcGVuZWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6Vk5lLGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsImNlbGwiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjZWxsIGV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsiYXJyb3ciLCIiXSxbMSwiY2VsbCJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2VsbCIsImV4dHJhLXJpZ2h0LXBhZGRpbmciXSxbInN2Z0ljb24iLCJhcnJvd191cHdhcmRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X2Rvd253YXJkXzI0cHgiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd191cHdhcmRfMjRweCJdLFsic3ZnSWNvbiIsImFycm93X2Rvd253YXJkXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihEbigpLE90KDAsMCksUygxLFBOZSwzLDUsImRpdiIsMSksUygyLGtOZSwzLDUsImRpdiIsMSksUygzLEZOZSwyLDEsImRpdiIsMiksenQoNCksa3QoKSxTKDUsQk5lLDIsMiwibmctdGVtcGxhdGUiLG51bGwsMyxXdCkpLDImZSYmKF8oIm5nU3dpdGNoIixpLmhlYWRlci50eXBlKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlZBTFVFX0NIQU5HRSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuQ29sdW1uSGVhZGVyVHlwZS5QRVJDRU5UQUdFX0NIQU5HRSkpfSxkZXBlbmRlbmNpZXM6W0ZlLExyLHNyLFNyLHV1LEVuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtY2VsbH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0gICAgIHBhdGh7ZmlsbDp1bnNldH0uZXh0cmEtcmlnaHQtcGFkZGluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxcHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxITmU9WyIqIl0sc0E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1jb250ZW50LXJvdyJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6SE5lLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oKSx6dCgwKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB6TmUobix0KXtpZigxJm4mJlAoMCwibWF0LWljb24iLDcpLDImbil7bGV0IGU9dygyKTtfKCJuZ0NsYXNzIixlLmhlYWRlci5uYW1lPT09ZS5zb3J0aW5nSW5mby5uYW1lPyJzaG93Ijoic2hvdy1vbi1ob3ZlciIpfX1mdW5jdGlvbiBVTmUobix0KXtpZigxJm4mJlAoMCwibWF0LWljb24iLDgpLDImbil7bGV0IGU9dygyKTtfKCJuZ0NsYXNzIixlLmhlYWRlci5uYW1lPT09ZS5zb3J0aW5nSW5mby5uYW1lPyJzaG93Ijoic2hvdy1vbi1ob3ZlciIpfX1mdW5jdGlvbiBqTmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDQpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKTtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKSxRKG8uaGVhZGVyQ2xpY2tlZEhhbmRsZXIoKSl9KSxTKDEsek5lLDEsMSwibWF0LWljb24iLDUpLFMoMixVTmUsMSwxLCJtYXQtaWNvbiIsNiksZygpfWlmKDImbil7bGV0IGU9dygpO3YoMSksXygibmdJZiIsZS5zb3J0aW5nSW5mby5vcmRlcj09PWUuU29ydGluZ09yZGVyLkFTQ0VORElOR3x8ZS5oZWFkZXIubmFtZSE9PWUuc29ydGluZ0luZm8ubmFtZSksdigxKSxfKCJuZ0lmIixlLnNvcnRpbmdJbmZvLm9yZGVyPT09ZS5Tb3J0aW5nT3JkZXIuREVTQ0VORElORyYmZS5oZWFkZXIubmFtZT09PWUuc29ydGluZ0luZm8ubmFtZSl9fWZ1bmN0aW9uIEdOZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsOSksSSgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQ29udGV4dE1lbnVPcGVuZWQocikpfSksUCgxLCJtYXQtaWNvbiIsMTApLGcoKX19dmFyIFdOZT1bIioiXSx1Xz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5ocGFyYW1zRW5hYmxlZD0hMSx0aGlzLmRpc2FibGVDb250ZXh0TWVudT0hMSx0aGlzLmRyYWdTdGFydD1uZXcgRix0aGlzLmRyYWdFbmQ9bmV3IEYsdGhpcy5kcmFnRW50ZXI9bmV3IEYsdGhpcy5oZWFkZXJDbGlja2VkPW5ldyBGLHRoaXMuY29udGV4dE1lbnVPcGVuZWQ9bmV3IEYsdGhpcy5oaWdobGlnaHRTdHlsZSQ9bmV3IEFpKHt9KSx0aGlzLlNvcnRpbmdPcmRlcj1pb31vbkNvbnRleHRNZW51T3BlbmVkKGUpe3RoaXMuZGlzYWJsZUNvbnRleHRNZW51fHx0aGlzLmNvbnRleHRNZW51T3BlbmVkLmVtaXQoZSl9aGVhZGVyQ2xpY2tlZEhhbmRsZXIoKXt0aGlzLmhlYWRlci5zb3J0YWJsZSYmdGhpcy5oZWFkZXJDbGlja2VkLmVtaXQodGhpcy5oZWFkZXIubmFtZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJjb250ZXh0bWVudSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Db250ZXh0TWVudU9wZW5lZChvKX0pfSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIixzb3J0aW5nSW5mbzoic29ydGluZ0luZm8iLGhwYXJhbXNFbmFibGVkOiJocGFyYW1zRW5hYmxlZCIsZGlzYWJsZUNvbnRleHRNZW51OiJkaXNhYmxlQ29udGV4dE1lbnUifSxvdXRwdXRzOntkcmFnU3RhcnQ6ImRyYWdTdGFydCIsZHJhZ0VuZDoiZHJhZ0VuZCIsZHJhZ0VudGVyOiJkcmFnRW50ZXIiLGhlYWRlckNsaWNrZWQ6ImhlYWRlckNsaWNrZWQiLGNvbnRleHRNZW51T3BlbmVkOiJjb250ZXh0TWVudU9wZW5lZCJ9LG5nQ29udGVudFNlbGVjdG9yczpXTmUsZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbMSwiY2VsbCIsMywiZHJhZ2dhYmxlIiwibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLCJjbGljayJdLFszLCJoZWFkZXIiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImNsYXNzIiwic29ydGluZy1pY29uLWNvbnRhaW5lciIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImNsYXNzIiwiY29udGV4dC1tZW51LWNvbnRhaW5lciBzaG93LW9uLWhvdmVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwxLCJzb3J0aW5nLWljb24tY29udGFpbmVyIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4IiwzLCJuZ0NsYXNzIl0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCIsMywibmdDbGFzcyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwxLCJjb250ZXh0LW1lbnUtY29udGFpbmVyIiwic2hvdy1vbi1ob3ZlciIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJtb3JlX3ZlcnRfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksaCgwLCJkaXYiLDApLEkoImRyYWdzdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5kcmFnU3RhcnQuZW1pdChpLmhlYWRlcil9KSgiZHJhZ2VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5kcmFnRW5kLmVtaXQoKX0pKCJkcmFnZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZHJhZ0VudGVyLmVtaXQoaS5oZWFkZXIpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmhlYWRlckNsaWNrZWRIYW5kbGVyKCl9KSxqKDEsImFzeW5jIiksenQoMiksUCgzLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsMSksUyg0LGpOZSwzLDIsImJ1dHRvbiIsMiksUyg1LEdOZSwyLDAsImJ1dHRvbiIsMyksZygpKSwyJmUmJihfKCJkcmFnZ2FibGUiLGkuaGVhZGVyLm1vdmFibGUpKCJuZ0NsYXNzIixXKDEsNSxpLmhpZ2hsaWdodFN0eWxlJCkpLHYoMyksXygiaGVhZGVyIixpLmhlYWRlciksdigxKSxfKCJuZ0lmIixpLmhlYWRlci5zb3J0YWJsZSksdigxKSxfKCJuZ0lmIiwoaS5oZWFkZXIucmVtb3ZhYmxlfHxpLmhlYWRlci5zb3J0YWJsZSkmJiFpLmRpc2FibGVDb250ZXh0TWVudSkpfSxkZXBlbmRlbmNpZXM6W3luLEZlLEVuLCRpLHpULGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtY2VsbDt2ZXJ0aWNhbC1hbGlnbjpib3R0b219W19uZ2hvc3QtJUNPTVAlXTpob3ZlciAgIC5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi4zfVtfbmdob3N0LSVDT01QJV0gICAuc2hvdy1vbi1ob3Zlcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3BhY2l0eToxfVtfbmdob3N0LSVDT01QJV0gICAuc2hvdy1vbi1ob3Zlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3BhY2l0eToxfS5jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2xpbmUtaGVpZ2h0OjF9LmNlbGxbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbi5zb3J0aW5nLWljb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNlbGxbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbi5jb250ZXh0LW1lbnUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNnB4O2hlaWdodDoxNnB4Oy0tdGItaWNvbi1zaXplOiAxMnB4O2JvcmRlci1yYWRpdXM6NXB4O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NHB4fS5jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zb3J0aW5nLWljb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgcGF0aHtmaWxsOnVuc2V0fS5zaG93W19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LnNob3ctb24taG92ZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uaGlnaGxpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LmhpZ2hsaWdodC1ib3JkZXItcmlnaHRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoycHggc29saWQgI2ZmOTgwMH0uaGlnaGxpZ2h0LWJvcmRlci1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoycHggc29saWQgI2ZmOTgwMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHFOZT1bImNvbnRlbnQiXTtmdW5jdGlvbiBZTmUobix0KXsxJm4mJihPdCgwKSx6dCgxKSxrdCgpKX12YXIgWE5lPVsiKiJdLFJ0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMudmlld1JlZj1lLHRoaXMub25PcGVuPW5ldyBGLHRoaXMub25DbG9zZT1uZXcgRix0aGlzLnZpc2libGUkPW5ldyBBaSghMSksdGhpcy5jYW5DbG9zZT0hMCx0aGlzLmNsaWNrTGlzdGVuZXI9dGhpcy5tYXliZUNsb3NlLmJpbmQodGhpcyl9bmdPbkluaXQoKXt0aGlzLnZpc2libGUkLnN1YnNjcmliZShlPT57d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY2FuQ2xvc2U9ITAsZT8odGhpcy5lbnN1cmVDb250ZW50SXNXaXRoaW5XaW5kb3coKSx0aGlzLm9uT3Blbi5lbWl0KCkpOnRoaXMub25DbG9zZS5lbWl0KCl9KX0pfW9wZW5BdFBvc2l0aW9uKGUpe2xldCBpPXRoaXMudmlld1JlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQscj1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDswIT09ciYmKGkuc3R5bGUudG9wPS0xKnIraS5vZmZzZXRUb3ArInB4IiksdGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdD1lLngrInB4Iix0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5zdHlsZS50b3A9ZS55KyJweCIsdGhpcy5jYW5DbG9zZT0hMSx0aGlzLnZpc2libGUkLm5leHQoITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmNsaWNrTGlzdGVuZXIpfWVuc3VyZUNvbnRlbnRJc1dpdGhpbldpbmRvdygpe2lmKCF0aGlzLmNvbnRlbnQpcmV0dXJuO2xldCBlPXRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UubGVmdDwwJiYodGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdD0wKSxlLmxlZnQrZS53aWR0aD53aW5kb3cuaW5uZXJXaWR0aCYmKHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQ9d2luZG93LmlubmVyV2lkdGgtZS53aWR0aCsicHgiKSxlLnRvcDwwJiYodGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wPTApLGUudG9wK2UuaGVpZ2h0PndpbmRvdy5pbm5lckhlaWdodCYmKHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcD13aW5kb3cuaW5uZXJIZWlnaHQtZS5oZWlnaHQrInB4Iil9bWF5YmVDbG9zZSgpeyF0aGlzLmNhbkNsb3NlfHx0aGlzLmNsb3NlKCl9Y2xvc2UoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbGlja0xpc3RlbmVyKSx0aGlzLnZpc2libGUkLm5leHQoITEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHNpKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siY3VzdG9tLW1vZGFsIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UocU5lLDUpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuY29udGVudD1yLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgia2V5ZG93bi5lc2NhcGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm1heWJlQ2xvc2Uobyl9LDAsaGMpfSxvdXRwdXRzOntvbk9wZW46Im9uT3BlbiIsb25DbG9zZToib25DbG9zZSJ9LG5nQ29udGVudFNlbGVjdG9yczpYTmUsZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMSwiY29udGVudCIsMywiY2xpY2siXSxbImNvbnRlbnQiLCIiXSxbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksaCgwLCJkaXYiLDAsMSksSSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBvLnN0b3BQcm9wYWdhdGlvbigpfSksUygyLFlOZSwyLDAsIm5nLWNvbnRhaW5lciIsMiksaigzLCJhc3luYyIpLGcoKSksMiZlJiYodigyKSxfKCJuZ0lmIixXKDMsMSxpLnZpc2libGUkKSkpfSxkZXBlbmRlbmNpZXM6W0ZlLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB6LWluZGV4OiA5MDAxO1xuICAgICAgfVxuXG4gICAgICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB9Il19KSxufSkoKSxaTmU9WyJzZWFyY2giXSxLTmU9WyJjb2x1bW5MaXN0Il0sSk5lPWZ1bmN0aW9uKG4pe3JldHVybntzZWxlY3RlZDpufX07ZnVuY3Rpb24gJE5lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiw4KSxJKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1YKGUpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KCkuc2VsZWN0Q29sdW1uKG8pKX0pLGooMSwiYXN5bmMiKSxUKDIpLGcoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXcoKTtfKCJuZ0NsYXNzIixJbig0LEpOZSxpPT09VygxLDIsci5zZWxlY3RlZEluZGV4JCkpKSx2KDIpLEhlKCIgIixlLmRpc3BsYXlOYW1lLCIgIil9fXZhciBhQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5zZWxlY3RhYmxlQ29sdW1ucz1bXSx0aGlzLmNvbHVtblNlbGVjdGVkPW5ldyBGLHRoaXMuc2VhcmNoSW5wdXQ9IiIsdGhpcy5zZWxlY3RlZEluZGV4JD1uZXcgQWkoMCksdGhpcy5pc0FjdGl2ZT0hMX1uZ09uSW5pdCgpe3RoaXMuc2VsZWN0ZWRJbmRleCQuc3Vic2NyaWJlKCgpPT57aWYoIXRoaXMuY29sdW1uTGlzdClyZXR1cm47bGV0IGU9dGhpcy5jb2x1bW5MaXN0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiYnV0dG9uLnNlbGVjdGVkIik7aWYoIWUpcmV0dXJuO2xldCBpPXRoaXMuY29sdW1uTGlzdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxyPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LG89dGhpcy5jb2x1bW5MaXN0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO3RoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKSpyPG8mJih0aGlzLmNvbHVtbkxpc3QubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9dGhpcy5zZWxlY3RlZEluZGV4JC5nZXRWYWx1ZSgpKnIpLCh0aGlzLnNlbGVjdGVkSW5kZXgkLmdldFZhbHVlKCkrMSkqcj5vK2kmJih0aGlzLmNvbHVtbkxpc3QubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9KHRoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKSsxKSpyLWkpfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zZWFyY2hJbnB1dD0iIix0aGlzLnNlYXJjaEZpZWxkLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLnNlbGVjdGVkSW5kZXgkLm5leHQoMCl9Zm9jdXMoKXt0aGlzLnNlYXJjaEZpZWxkPy5uYXRpdmVFbGVtZW50LmZvY3VzKCl9Z2V0RmlsdGVyZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuc2VsZWN0YWJsZUNvbHVtbnMuZmlsdGVyKGU9PmUubmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKHRoaXMuc2VhcmNoSW5wdXQudG9Mb3dlckNhc2UoKSl8fGUuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCh0aGlzLnNlYXJjaElucHV0LnRvTG93ZXJDYXNlKCkpKX1zZWFyY2hJbnB1dENoYW5nZWQoKXt0aGlzLnNlbGVjdGVkSW5kZXgkLm5leHQoTWF0aC5taW4odGhpcy5zZWxlY3RlZEluZGV4JC5nZXRWYWx1ZSgpLHRoaXMuc2VsZWN0YWJsZUNvbHVtbnMubGVuZ3RoLTEpKX1zZWxlY3RDb2x1bW4oZSl7dGhpcy5zZWxlY3RlZEluZGV4JC5uZXh0KDApLHRoaXMuY29sdW1uU2VsZWN0ZWQuZW1pdChlKX1hY3RpdmF0ZSgpe3RoaXMuaXNBY3RpdmU9ITB9ZGVhY3RpdmF0ZSgpe3RoaXMuaXNBY3RpdmU9ITF9b25VcEFycm93KCl7IXRoaXMuaXNBY3RpdmV8fHRoaXMuc2VsZWN0ZWRJbmRleCQubmV4dChNYXRoLm1heCh0aGlzLnNlbGVjdGVkSW5kZXgkLmdldFZhbHVlKCktMSwwKSl9b25Eb3duQXJyb3coKXshdGhpcy5pc0FjdGl2ZXx8dGhpcy5zZWxlY3RlZEluZGV4JC5uZXh0KE1hdGgubWluKHRoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKSsxLHRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkubGVuZ3RoLTEpKX1vbkVudGVyUHJlc3NlZCgpeyF0aGlzLmlzQWN0aXZlfHx0aGlzLnNlbGVjdENvbHVtbih0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpW3RoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKV0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXRhLXRhYmxlLWNvbHVtbi1zZWxlY3Rvci1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UoWk5lLDUpLEdlKEtOZSw1KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5zZWFyY2hGaWVsZD1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5jb2x1bW5MaXN0PXIuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJrZXlkb3duLmFycm93dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVXBBcnJvdyhvKX0sMCxoYykoImtleWRvd24uYXJyb3dkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkRvd25BcnJvdyhvKX0sITEsaGMpKCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkVudGVyUHJlc3NlZChvKX0sITEsaGMpfSxpbnB1dHM6e3NlbGVjdGFibGVDb2x1bW5zOiJzZWxlY3RhYmxlQ29sdW1ucyJ9LG91dHB1dHM6e2NvbHVtblNlbGVjdGVkOiJjb2x1bW5TZWxlY3RlZCJ9LGRlY2xzOjEwLHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50cyJdLFsxLCJzZWFyY2gtYXJlYSJdLFsibWF0UHJlZml4IiwiIiwic3ZnSWNvbiIsInNlYXJjaF8yNHB4IiwxLCJzZWFyY2gtaWNvbiJdLFsibWF0SW5wdXQiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJzZWFyY2giLCIiXSxbMSwiY29sdW1uLWxpc3QiXSxbImNvbHVtbkxpc3QiLCIiXSxbIm1hdC1idXR0b24iLCIiLCJjbGFzcyIsImNvbHVtbi1idXR0b24iLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJjb2x1bW4tYnV0dG9uIiwzLCJuZ0NsYXNzIiwiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwibWF0LWZvcm0tZmllbGQiLDEpLFAoMiwibWF0LWljb24iLDIpLGgoMywibWF0LWxhYmVsIiksVCg0LCJTZWFyY2giKSxnKCksaCg1LCJpbnB1dCIsMyw0KSxJKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWFyY2hJbnB1dD1vfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2VhcmNoSW5wdXRDaGFuZ2VkKCl9KSxnKCkoKSxoKDcsImRpdiIsNSw2KSxTKDksJE5lLDMsNiwiYnV0dG9uIiw3KSxnKCkoKSksMiZlJiYodig1KSxfKCJuZ01vZGVsIixpLnNlYXJjaElucHV0KSx2KDQpLF8oIm5nRm9yT2YiLGkuZ2V0RmlsdGVyZWRDb2x1bW5zKCkpKX0sZGVwZW5kZW5jaWVzOlt5bixubixFbixVdSxLYSxrYyxTOSxKaSxiZyxjRSxxMixjdF0sc3R5bGVzOlsiLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZzo4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZDtib3gtc2hhZG93OjBweCA0cHggNHB4IHJnYmEoMCwwLDAsLjI1KTtib3JkZXItY29sb3I6I2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWFyY2gtYXJlYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTo0cHh9LmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tbGlzdFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO21heC1oZWlnaHQ6MzAwcHg7b3ZlcmZsb3cteTphdXRvfS5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17ZmxleC1zaHJpbms6MDtoZWlnaHQ6NDhweDtqdXN0aWZ5LWNvbnRlbnQ6bGVmdDt3aWR0aDoxMDAlfS5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbi5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbi5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbi5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdExlPVsicGFuZWwiXTtmdW5jdGlvbiBuTGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMCwxKSx6dCgyKSxnKCkpLDImbil7bGV0IGU9dC5pZCxpPXcoKTtfKCJpZCIsaS5pZCkoIm5nQ2xhc3MiLGkuX2NsYXNzTGlzdCkoIkBwYW5lbEFuaW1hdGlvbiIsaS5pc09wZW4/InZpc2libGUiOiJoaWRkZW4iKSxCZSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuX2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoZSkpfX12YXIgaUxlPVsiKiJdLHJMZT1fcigicGFuZWxBbmltYXRpb24iLFt3aSgidm9pZCwgaGlkZGVuIixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGVZKDAuOCkifSkpLGdpKCI6ZW50ZXIsIGhpZGRlbiA9PiB2aXNpYmxlIixbT2IoW0NpKCIwLjAzcyBsaW5lYXIiLHJuKHtvcGFjaXR5OjF9KSksQ2koIjAuMTJzIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixybih7dHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpXSldKSxnaSgiOmxlYXZlLCB2aXNpYmxlID0+IGhpZGRlbiIsW0NpKCIwLjA3NXMgbGluZWFyIixybih7b3BhY2l0eTowfSkpXSldKSxvTGU9MCxzTGU9dXMoY2xhc3N7fSksUHRlPW5ldyBpZSgibWF0LWF1dG9jb21wbGV0ZS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2F1dG9BY3RpdmVGaXJzdE9wdGlvbjohMSxhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiExLGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I6ITF9fX0pLGxMZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgc0xle2dldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVuJiZ0aGlzLnNob3dQYW5lbH1fc2V0Q29sb3IoZSl7dGhpcy5fY29sb3I9ZSx0aGlzLl9zZXRUaGVtZUNsYXNzZXModGhpcy5fY2xhc3NMaXN0KX1nZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbn1zZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKGUpe3RoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj1SdChlKX1nZXQgYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbigpe3JldHVybiB0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9ufXNldCBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uKGUpe3RoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb249UnQoZSl9c2V0IGNsYXNzTGlzdChlKXt0aGlzLl9jbGFzc0xpc3Q9ZSYmZS5sZW5ndGg/ZnVuY3Rpb24obix0PS9ccysvKXtsZXQgZT1bXTtpZihudWxsIT1uKXtsZXQgaT1BcnJheS5pc0FycmF5KG4pP246YCR7bn1gLnNwbGl0KHQpO2ZvcihsZXQgciBvZiBpKXtsZXQgbz1gJHtyfWAudHJpbSgpO28mJmUucHVzaChvKX19cmV0dXJuIGV9KGUpLnJlZHVjZSgoaSxyKT0+KGlbcl09ITAsaSkse30pOnt9LHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fc2V0VGhlbWVDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZT0iIn1jb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RlZmF1bHRzPXIsdGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcz1Nbi5FTVBUWSx0aGlzLnNob3dQYW5lbD0hMSx0aGlzLl9pc09wZW49ITEsdGhpcy5kaXNwbGF5V2l0aD1udWxsLHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj0hIXRoaXMuX2RlZmF1bHRzLmF1dG9BY3RpdmVGaXJzdE9wdGlvbix0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9uPSEhdGhpcy5fZGVmYXVsdHMuYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbix0aGlzLm9wdGlvblNlbGVjdGVkPW5ldyBGLHRoaXMub3BlbmVkPW5ldyBGLHRoaXMuY2xvc2VkPW5ldyBGLHRoaXMub3B0aW9uQWN0aXZhdGVkPW5ldyBGLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLmlkPSJtYXQtYXV0b2NvbXBsZXRlLSIrb0xlKyssdGhpcy5pbmVydEdyb3Vwcz1vPy5TQUZBUkl8fCExfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IG9nKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPXRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5pc09wZW4mJnRoaXMub3B0aW9uQWN0aXZhdGVkLmVtaXQoe3NvdXJjZTp0aGlzLG9wdGlvbjp0aGlzLm9wdGlvbnMudG9BcnJheSgpW2VdfHxudWxsfSl9KSx0aGlzLl9zZXRWaXNpYmlsaXR5KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpfV9zZXRTY3JvbGxUb3AoZSl7dGhpcy5wYW5lbCYmKHRoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9ZSl9X2dldFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLnBhbmVsP3RoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A6MH1fc2V0VmlzaWJpbGl0eSgpe3RoaXMuc2hvd1BhbmVsPSEhdGhpcy5vcHRpb25zLmxlbmd0aCx0aGlzLl9zZXRWaXNpYmlsaXR5Q2xhc3Nlcyh0aGlzLl9jbGFzc0xpc3QpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9lbWl0U2VsZWN0RXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLm9wdGlvbj1lfX0odGhpcyxlKTt0aGlzLm9wdGlvblNlbGVjdGVkLmVtaXQoaSl9X2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoZSl7cmV0dXJuIHRoaXMuYXJpYUxhYmVsP251bGw6dGhpcy5hcmlhTGFiZWxsZWRieT8oZT9lKyIgIjoiIikrdGhpcy5hcmlhTGFiZWxsZWRieTplfV9zZXRWaXNpYmlsaXR5Q2xhc3NlcyhlKXtlW3RoaXMuX3Zpc2libGVDbGFzc109dGhpcy5zaG93UGFuZWwsZVt0aGlzLl9oaWRkZW5DbGFzc109IXRoaXMuc2hvd1BhbmVsfV9zZXRUaGVtZUNsYXNzZXMoZSl7ZVsibWF0LXByaW1hcnkiXT0icHJpbWFyeSI9PT10aGlzLl9jb2xvcixlWyJtYXQtd2FybiJdPSJ3YXJuIj09PXRoaXMuX2NvbG9yLGVbIm1hdC1hY2NlbnQiXT0iYWNjZW50Ij09PXRoaXMuX2NvbG9yfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKCR0KSxDKE1lKSxDKFB0ZSksQyhHbikpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEdlKFNpLDcpLEdlKHRMZSw1KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS50ZW1wbGF0ZT1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5wYW5lbD1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLGF1dG9BY3RpdmVGaXJzdE9wdGlvbjoiYXV0b0FjdGl2ZUZpcnN0T3B0aW9uIixhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiJhdXRvU2VsZWN0QWN0aXZlT3B0aW9uIixwYW5lbFdpZHRoOiJwYW5lbFdpZHRoIixjbGFzc0xpc3Q6WyJjbGFzcyIsImNsYXNzTGlzdCJdfSxvdXRwdXRzOntvcHRpb25TZWxlY3RlZDoib3B0aW9uU2VsZWN0ZWQiLG9wZW5lZDoib3BlbmVkIixjbG9zZWQ6ImNsb3NlZCIsb3B0aW9uQWN0aXZhdGVkOiJvcHRpb25BY3RpdmF0ZWQifSxmZWF0dXJlczpbS2VdfSksbn0pKCksT3RlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsTGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Zpc2libGVDbGFzcz0ibWF0LW1kYy1hdXRvY29tcGxldGUtdmlzaWJsZSIsdGhpcy5faGlkZGVuQ2xhc3M9Im1hdC1tZGMtYXV0b2NvbXBsZXRlLWhpZGRlbiIsdGhpcy5faGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcj10aGlzLl9kZWZhdWx0cy5oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPz8hMX1nZXQgaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcigpe3JldHVybiB0aGlzLl9oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yfXNldCBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yKGUpe3RoaXMuX2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I9UnQoZSksdGhpcy5fc3luY1BhcmVudFByb3BlcnRpZXMoKX1fc3luY1BhcmVudFByb3BlcnRpZXMoKXtpZih0aGlzLm9wdGlvbnMpZm9yKGxldCBlIG9mIHRoaXMub3B0aW9ucyllLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1hdXRvY29tcGxldGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKFRpKHIsVXYsNSksVGkocixVcyw1KSksMiZlKXtsZXQgbztTZShvPUVlKCkpJiYoaS5vcHRpb25Hcm91cHM9byksU2Uobz1FZSgpKSYmKGkub3B0aW9ucz1vKX19LGhvc3RBdHRyczpbMSwibWF0LW1kYy1hdXRvY29tcGxldGUiXSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I6ImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IifSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZSJdLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6enYsdXNlRXhpc3Rpbmc6bn1dKSxLZV0sbmdDb250ZW50U2VsZWN0b3JzOmlMZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sicm9sZSIsImxpc3Rib3giLDEsIm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVsIiwibWRjLW1lbnUtc3VyZmFjZSIsIm1kYy1tZW51LXN1cmZhY2UtLW9wZW4iLDMsImlkIiwibmdDbGFzcyJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihEbigpLFMoMCxuTGUsMyw1LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOlt5bl0sc3R5bGVzOlsiLm1kYy1tZW51LXN1cmZhY2V7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXgtd2lkdGg6Y2FsYygxMDB2dyAtIDMycHgpO21heC13aWR0aDp2YXIoLS1tZGMtbWVudS1tYXgtd2lkdGgsIGNhbGMoMTAwdncgLSAzMnB4KSk7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gMzJweCk7bWF4LWhlaWdodDp2YXIoLS1tZGMtbWVudS1tYXgtaGVpZ2h0LCBjYWxjKDEwMHZoIC0gMzJweCkpO21hcmdpbjowO3BhZGRpbmc6MDt0cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdDtvcGFjaXR5OjA7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eTt6LWluZGV4Ojg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtbWVkaXVtLCA0cHgpO3RyYW5zZm9ybS1vcmlnaW4tbGVmdDp0b3AgbGVmdDt0cmFuc2Zvcm0tb3JpZ2luLXJpZ2h0OnRvcCByaWdodH0ubWRjLW1lbnUtc3VyZmFjZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1kYy1tZW51LXN1cmZhY2UtLWFuaW1hdGluZy1vcGVue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6MH0ubWRjLW1lbnUtc3VyZmFjZS0tb3BlbntkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfS5tZGMtbWVudS1zdXJmYWNlLS1hbmltYXRpbmctY2xvc2Vke2Rpc3BsYXk6aW5saW5lLWJsb2NrO29wYWNpdHk6MH1bZGlyPXJ0bF0gLm1kYy1tZW51LXN1cmZhY2UsLm1kYy1tZW51LXN1cmZhY2VbZGlyPXJ0bF17dHJhbnNmb3JtLW9yaWdpbi1sZWZ0OnRvcCByaWdodDt0cmFuc2Zvcm0tb3JpZ2luLXJpZ2h0OnRvcCBsZWZ0fS5tZGMtbWVudS1zdXJmYWNlLS1hbmNob3J7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLW1lbnUtc3VyZmFjZS0tZml4ZWR7cG9zaXRpb246Zml4ZWR9Lm1kYy1tZW51LXN1cmZhY2UtLWZ1bGx3aWR0aHt3aWR0aDoxMDAlfS5tZGMtbWVudS1zdXJmYWNlLm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVse3dpZHRoOjEwMCU7bWF4LWhlaWdodDoyNTZweDtwb3NpdGlvbjpzdGF0aWM7dmlzaWJpbGl0eTpoaWRkZW47dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgdG9wO21hcmdpbjowO3BhZGRpbmc6OHB4IDA7bGlzdC1zdHlsZS10eXBlOm5vbmV9Lm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWw6Zm9jdXN7b3V0bGluZTpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1vdmVybGF5LXBhbmU6bm90KC5tYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSkgLm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVsLWFib3ZlIC5tZGMtbWVudS1zdXJmYWNlLm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVse2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGJvdHRvbX0ubWRjLW1lbnUtc3VyZmFjZS5tYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtbWRjLWF1dG9jb21wbGV0ZS12aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0ubWRjLW1lbnUtc3VyZmFjZS5tYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtbWRjLWF1dG9jb21wbGV0ZS1oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59bWF0LWF1dG9jb21wbGV0ZXtkaXNwbGF5Om5vbmV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbckxlXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxjTGU9e3Byb3ZpZGU6TW8sdXNlRXhpc3Rpbmc6JG4oKCk9Pkt4KSxtdWx0aTohMH0sa3RlPW5ldyBpZSgibWF0LWF1dG9jb21wbGV0ZS1zY3JvbGwtc3RyYXRlZ3kiKSx1TGU9e3Byb3ZpZGU6a3RlLGRlcHM6W3ppXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0scExlPSgoKT0+e2NsYXNzIG57Z2V0IGF1dG9jb21wbGV0ZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfXNldCBhdXRvY29tcGxldGVEaXNhYmxlZChlKXt0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZD1SdChlKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsZCx1LHApe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9vdmVybGF5PWksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1yLHRoaXMuX3pvbmU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuX2Rpcj1sLHRoaXMuX2Zvcm1GaWVsZD1jLHRoaXMuX2RvY3VtZW50PWQsdGhpcy5fdmlld3BvcnRSdWxlcj11LHRoaXMuX2RlZmF1bHRzPXAsdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSExLHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPSExLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj1Nbi5FTVBUWSx0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITAsdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbT1uZXcgSWUsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXI9KCk9Pnt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudHx8dGhpcy5wYW5lbE9wZW59LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMucG9zaXRpb249ImF1dG8iLHRoaXMuYXV0b2NvbXBsZXRlQXR0cmlidXRlPSJvZmYiLHRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLm9wdGlvblNlbGVjdGlvbnM9dGEoKCk9PntsZXQgZj10aGlzLmF1dG9jb21wbGV0ZT90aGlzLmF1dG9jb21wbGV0ZS5vcHRpb25zOm51bGw7cmV0dXJuIGY/Zi5jaGFuZ2VzLnBpcGUocW4oZiksSm4oKCk9PnRuKC4uLmYubWFwKG09Pm0ub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX3pvbmUub25TdGFibGUucGlwZShZdCgxKSxKbigoKT0+dGhpcy5vcHRpb25TZWxlY3Rpb25zKSl9KSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfW5nQWZ0ZXJWaWV3SW5pdCgpe2xldCBlPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBlPCJ1IiYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+ZS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVySGFuZGxlcikpfW5nT25DaGFuZ2VzKGUpe2UucG9zaXRpb24mJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJih0aGlzLl9zZXRTdHJhdGVneVBvc2l0aW9ucyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5KSx0aGlzLnBhbmVsT3BlbiYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpKX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBlPCJ1IiYmZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVySGFuZGxlciksdGhpcy5fdmlld3BvcnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jb21wb25lbnREZXN0cm95ZWQ9ITAsdGhpcy5fZGVzdHJveVBhbmVsKCksdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbS5jb21wbGV0ZSgpfWdldCBwYW5lbE9wZW4oKXtyZXR1cm4gdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiZ0aGlzLmF1dG9jb21wbGV0ZS5zaG93UGFuZWx9b3BlblBhbmVsKCl7dGhpcy5fYXR0YWNoT3ZlcmxheSgpLHRoaXMuX2Zsb2F0TGFiZWwoKX1jbG9zZVBhbmVsKCl7dGhpcy5fcmVzZXRMYWJlbCgpLHRoaXMuX292ZXJsYXlBdHRhY2hlZCYmKHRoaXMucGFuZWxPcGVuJiZ0aGlzLl96b25lLnJ1bigoKT0+e3RoaXMuYXV0b2NvbXBsZXRlLmNsb3NlZC5lbWl0KCl9KSx0aGlzLmF1dG9jb21wbGV0ZS5faXNPcGVuPXRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPW51bGwsdGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiYodGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKSx0aGlzLl9jb21wb25lbnREZXN0cm95ZWR8fHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlUG9zaXRpb24oKXt0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX1nZXQgcGFuZWxDbG9zaW5nQWN0aW9ucygpe3JldHVybiB0bih0aGlzLm9wdGlvblNlbGVjdGlvbnMsdGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIudGFiT3V0LnBpcGUoa2UoKCk9PnRoaXMuX292ZXJsYXlBdHRhY2hlZCkpLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW0sdGhpcy5fZ2V0T3V0c2lkZUNsaWNrU3RyZWFtKCksdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkucGlwZShrZSgoKT0+dGhpcy5fb3ZlcmxheUF0dGFjaGVkKSk6SHQoKSkucGlwZShOKGU9PmUgaW5zdGFuY2VvZiBIdj9lOm51bGwpKX1nZXQgYWN0aXZlT3B0aW9uKCl7cmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlJiZ0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlcj90aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtOm51bGx9X2dldE91dHNpZGVDbGlja1N0cmVhbSgpe3JldHVybiB0bihtaSh0aGlzLl9kb2N1bWVudCwiY2xpY2siKSxtaSh0aGlzLl9kb2N1bWVudCwiYXV4Y2xpY2siKSxtaSh0aGlzLl9kb2N1bWVudCwidG91Y2hlbmQiKSkucGlwZShrZShlPT57bGV0IGk9bWEoZSkscj10aGlzLl9mb3JtRmllbGQ/dGhpcy5fZm9ybUZpZWxkLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbCxvPXRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbDtyZXR1cm4gdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiZpIT09dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50JiZ0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50JiYoIXJ8fCFyLmNvbnRhaW5zKGkpKSYmKCFvfHwhby5jb250YWlucyhpKSkmJiEhdGhpcy5fb3ZlcmxheVJlZiYmIXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoaSl9KSl9d3JpdGVWYWx1ZShlKXtQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbigoKT0+dGhpcy5fYXNzaWduT3B0aW9uVmFsdWUoZSkpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5kaXNhYmxlZD1lfV9oYW5kbGVLZXlkb3duKGUpe2xldCBpPWUua2V5Q29kZSxyPXZyKGUpO2lmKDI3PT09aSYmIXImJmUucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZU9wdGlvbiYmMTM9PT1pJiZ0aGlzLnBhbmVsT3BlbiYmIXIpdGhpcy5hY3RpdmVPcHRpb24uX3NlbGVjdFZpYUludGVyYWN0aW9uKCksdGhpcy5fcmVzZXRBY3RpdmVJdGVtKCksZS5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYodGhpcy5hdXRvY29tcGxldGUpe2xldCBvPXRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0scz0zOD09PWl8fDQwPT09aTs5PT09aXx8cyYmIXImJnRoaXMucGFuZWxPcGVuP3RoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLm9uS2V5ZG93bihlKTpzJiZ0aGlzLl9jYW5PcGVuKCkmJnRoaXMub3BlblBhbmVsKCksKHN8fHRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0hPT1vKSYmKHRoaXMuX3Njcm9sbFRvT3B0aW9uKHRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCksdGhpcy5hdXRvY29tcGxldGUuYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbiYmdGhpcy5hY3RpdmVPcHRpb24mJih0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9ufHwodGhpcy5fdmFsdWVCZWZvcmVBdXRvU2VsZWN0aW9uPXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSksdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj10aGlzLmFjdGl2ZU9wdGlvbix0aGlzLl9hc3NpZ25PcHRpb25WYWx1ZSh0aGlzLmFjdGl2ZU9wdGlvbi52YWx1ZSkpKX19X2hhbmRsZUlucHV0KGUpe2xldCBpPWUudGFyZ2V0LHI9aS52YWx1ZTsibnVtYmVyIj09PWkudHlwZSYmKHI9IiI9PXI/bnVsbDpwYXJzZUZsb2F0KHIpKSx0aGlzLl9wcmV2aW91c1ZhbHVlIT09ciYmKHRoaXMuX3ByZXZpb3VzVmFsdWU9cix0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPW51bGwsdGhpcy5fb25DaGFuZ2UociksdGhpcy5fY2FuT3BlbigpJiZ0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ZS50YXJnZXQmJnRoaXMub3BlblBhbmVsKCkpfV9oYW5kbGVGb2N1cygpe3RoaXMuX2Nhbk9wZW5Pbk5leHRGb2N1cz90aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wcmV2aW91c1ZhbHVlPXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSx0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCghMCkpOnRoaXMuX2Nhbk9wZW5Pbk5leHRGb2N1cz0hMH1faGFuZGxlQ2xpY2soKXt0aGlzLl9jYW5PcGVuKCkmJiF0aGlzLnBhbmVsT3BlbiYmdGhpcy5vcGVuUGFuZWwoKX1fZmxvYXRMYWJlbChlPSExKXt0aGlzLl9mb3JtRmllbGQmJiJhdXRvIj09PXRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsJiYoZT90aGlzLl9mb3JtRmllbGQuX2FuaW1hdGVBbmRMb2NrTGFiZWwoKTp0aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbD0iYWx3YXlzIix0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWw9ITApfV9yZXNldExhYmVsKCl7dGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsJiYodGhpcy5fZm9ybUZpZWxkJiYodGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWw9ImF1dG8iKSx0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWw9ITEpfV9zdWJzY3JpYmVUb0Nsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIHRuKHRoaXMuX3pvbmUub25TdGFibGUucGlwZShZdCgxKSksdGhpcy5hdXRvY29tcGxldGUub3B0aW9ucy5jaGFuZ2VzLnBpcGUoTnQoKCk9PnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucmVhcHBseUxhc3RQb3NpdGlvbigpKSxTYSgwKSkpLnBpcGUoSm4oKCk9Pih0aGlzLl96b25lLnJ1bigoKT0+e2xldCByPXRoaXMucGFuZWxPcGVuO3RoaXMuX3Jlc2V0QWN0aXZlSXRlbSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9zZXRWaXNpYmlsaXR5KCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksciE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW4/dGhpcy5hdXRvY29tcGxldGUub3BlbmVkLmVtaXQoKTp0aGlzLmF1dG9jb21wbGV0ZS5jbG9zZWQuZW1pdCgpKX0pLHRoaXMucGFuZWxDbG9zaW5nQWN0aW9ucykpLFl0KDEpKS5zdWJzY3JpYmUocj0+dGhpcy5fc2V0VmFsdWVBbmRDbG9zZShyKSl9X2Rlc3Ryb3lQYW5lbCgpe3RoaXMuX292ZXJsYXlSZWYmJih0aGlzLmNsb3NlUGFuZWwoKSx0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl9vdmVybGF5UmVmPW51bGwpfV9hc3NpZ25PcHRpb25WYWx1ZShlKXtsZXQgaT10aGlzLmF1dG9jb21wbGV0ZSYmdGhpcy5hdXRvY29tcGxldGUuZGlzcGxheVdpdGg/dGhpcy5hdXRvY29tcGxldGUuZGlzcGxheVdpdGgoZSk6ZTt0aGlzLl91cGRhdGVOYXRpdmVJbnB1dFZhbHVlKGk/PyIiKX1fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZShlKXt0aGlzLl9mb3JtRmllbGQ/dGhpcy5fZm9ybUZpZWxkLl9jb250cm9sLnZhbHVlPWU6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlPWUsdGhpcy5fcHJldmlvdXNWYWx1ZT1lfV9zZXRWYWx1ZUFuZENsb3NlKGUpe2xldCBpPWU/ZS5zb3VyY2U6dGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbjtpJiYodGhpcy5fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKGkpLHRoaXMuX2Fzc2lnbk9wdGlvblZhbHVlKGkudmFsdWUpLHRoaXMuX29uQ2hhbmdlKGkudmFsdWUpLHRoaXMuYXV0b2NvbXBsZXRlLl9lbWl0U2VsZWN0RXZlbnQoaSksdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCkpLHRoaXMuY2xvc2VQYW5lbCgpfV9jbGVhclByZXZpb3VzU2VsZWN0ZWRPcHRpb24oZSl7dGhpcy5hdXRvY29tcGxldGUub3B0aW9ucy5mb3JFYWNoKGk9PntpIT09ZSYmaS5zZWxlY3RlZCYmaS5kZXNlbGVjdCgpfSl9X2F0dGFjaE92ZXJsYXkoKXtsZXQgZT10aGlzLl9vdmVybGF5UmVmO2U/KHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuc2V0T3JpZ2luKHRoaXMuX2dldENvbm5lY3RlZEVsZW1lbnQoKSksZS51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl9nZXRQYW5lbFdpZHRoKCl9KSk6KHRoaXMuX3BvcnRhbD1uZXcgWW8odGhpcy5hdXRvY29tcGxldGUudGVtcGxhdGUsdGhpcy5fdmlld0NvbnRhaW5lclJlZix7aWQ6dGhpcy5fZm9ybUZpZWxkPy5nZXRMYWJlbElkKCl9KSxlPXRoaXMuX292ZXJsYXkuY3JlYXRlKHRoaXMuX2dldE92ZXJsYXlDb25maWcoKSksdGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2hhbmRsZU92ZXJsYXlFdmVudHMoZSksdGhpcy5fdmlld3BvcnRTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmZSYmZS51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl9nZXRQYW5lbFdpZHRoKCl9KX0pKSxlJiYhZS5oYXNBdHRhY2hlZCgpJiYoZS5hdHRhY2godGhpcy5fcG9ydGFsKSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbj10aGlzLl9zdWJzY3JpYmVUb0Nsb3NpbmdBY3Rpb25zKCkpO2xldCBpPXRoaXMucGFuZWxPcGVuO3RoaXMuYXV0b2NvbXBsZXRlLl9zZXRWaXNpYmlsaXR5KCksdGhpcy5hdXRvY29tcGxldGUuX2lzT3Blbj10aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITAsdGhpcy5hdXRvY29tcGxldGUuX3NldENvbG9yKHRoaXMuX2Zvcm1GaWVsZD8uY29sb3IpLHRoaXMucGFuZWxPcGVuJiZpIT09dGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCl9X2dldE92ZXJsYXlDb25maWcoKXtyZXR1cm4gbmV3IFFhKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksd2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpLGRpcmVjdGlvbjp0aGlzLl9kaXI/P3ZvaWQgMCxwYW5lbENsYXNzOnRoaXMuX2RlZmF1bHRzPy5vdmVybGF5UGFuZWxDbGFzc30pfV9nZXRPdmVybGF5UG9zaXRpb24oKXtsZXQgZT10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhQdXNoKCExKTtyZXR1cm4gdGhpcy5fc2V0U3RyYXRlZ3lQb3NpdGlvbnMoZSksdGhpcy5fcG9zaXRpb25TdHJhdGVneT1lLGV9X3NldFN0cmF0ZWd5UG9zaXRpb25zKGUpe2xldCBzLGk9W3tvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJ0b3AifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0scj10aGlzLl9hYm92ZUNsYXNzLG89W3tvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20iLHBhbmVsQ2xhc3M6cn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOnJ9XTtzPSJhYm92ZSI9PT10aGlzLnBvc2l0aW9uP286ImJlbG93Ij09PXRoaXMucG9zaXRpb24/aTpbLi4uaSwuLi5vXSxlLndpdGhQb3NpdGlvbnMocyl9X2dldENvbm5lY3RlZEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5jb25uZWN0ZWRUbz90aGlzLmNvbm5lY3RlZFRvLmVsZW1lbnRSZWY6dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCk6dGhpcy5fZWxlbWVudH1fZ2V0UGFuZWxXaWR0aCgpe3JldHVybiB0aGlzLmF1dG9jb21wbGV0ZS5wYW5lbFdpZHRofHx0aGlzLl9nZXRIb3N0V2lkdGgoKX1fZ2V0SG9zdFdpZHRoKCl7cmV0dXJuIHRoaXMuX2dldENvbm5lY3RlZEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofV9yZXNldEFjdGl2ZUl0ZW0oKXtsZXQgZT10aGlzLmF1dG9jb21wbGV0ZTtlLmF1dG9BY3RpdmVGaXJzdE9wdGlvbj9lLl9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpOmUuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSl9X2Nhbk9wZW4oKXtsZXQgZT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIWUucmVhZE9ubHkmJiFlLmRpc2FibGVkJiYhdGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWR9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudD8uZGVmYXVsdFZpZXd8fHdpbmRvd31fc2Nyb2xsVG9PcHRpb24oZSl7bGV0IGk9dGhpcy5hdXRvY29tcGxldGUscj16MShlLGkub3B0aW9ucyxpLm9wdGlvbkdyb3Vwcyk7aWYoMD09PWUmJjE9PT1yKWkuX3NldFNjcm9sbFRvcCgwKTtlbHNlIGlmKGkucGFuZWwpe2xldCBvPWkub3B0aW9ucy50b0FycmF5KClbZV07aWYobyl7bGV0IHM9by5fZ2V0SG9zdEVsZW1lbnQoKSxhPVUxKHMub2Zmc2V0VG9wLHMub2Zmc2V0SGVpZ2h0LGkuX2dldFNjcm9sbFRvcCgpLGkucGFuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpO2kuX3NldFNjcm9sbFRvcChhKX19fV9oYW5kbGVPdmVybGF5RXZlbnRzKGUpe2Uua2V5ZG93bkV2ZW50cygpLnN1YnNjcmliZShpPT57KDI3PT09aS5rZXlDb2RlJiYhdnIoaSl8fDM4PT09aS5rZXlDb2RlJiZ2cihpLCJhbHRLZXkiKSkmJih0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uJiYodGhpcy5fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZSh0aGlzLl92YWx1ZUJlZm9yZUF1dG9TZWxlY3Rpb24/PyIiKSx0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPW51bGwpLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW0ubmV4dCgpLHRoaXMuX3Jlc2V0QWN0aXZlSXRlbSgpLGkuc3RvcFByb3BhZ2F0aW9uKCksaS5wcmV2ZW50RGVmYXVsdCgpKX0pLGUub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyh6aSksQyhzaSksQyhhdCksQygkdCksQyhrdGUpLEMoWGksOCksQyhTZiw5KSxDKEx0LDgpLEMoanMpLEMoUHRlLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixpbnB1dHM6e2F1dG9jb21wbGV0ZTpbIm1hdEF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZSJdLHBvc2l0aW9uOlsibWF0QXV0b2NvbXBsZXRlUG9zaXRpb24iLCJwb3NpdGlvbiJdLGNvbm5lY3RlZFRvOlsibWF0QXV0b2NvbXBsZXRlQ29ubmVjdGVkVG8iLCJjb25uZWN0ZWRUbyJdLGF1dG9jb21wbGV0ZUF0dHJpYnV0ZTpbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZUF0dHJpYnV0ZSJdLGF1dG9jb21wbGV0ZURpc2FibGVkOlsibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJhdXRvY29tcGxldGVEaXNhYmxlZCJdfSxmZWF0dXJlczpbR3RdfSksbn0pKCksS3g9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBMZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fYWJvdmVDbGFzcz0ibWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwibWF0QXV0b2NvbXBsZXRlIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtYXV0b2NvbXBsZXRlLXRyaWdnZXIiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiZm9jdXNpbiIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vblRvdWNoZWQoKX0pKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUlucHV0KG8pfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVLZXlkb3duKG8pfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVDbGljaygpfSksMiZlJiZCZSgiYXV0b2NvbXBsZXRlIixpLmF1dG9jb21wbGV0ZUF0dHJpYnV0ZSkoInJvbGUiLGkuYXV0b2NvbXBsZXRlRGlzYWJsZWQ/bnVsbDoiY29tYm9ib3giKSgiYXJpYS1hdXRvY29tcGxldGUiLGkuYXV0b2NvbXBsZXRlRGlzYWJsZWQ/bnVsbDoibGlzdCIpKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLGkucGFuZWxPcGVuJiZpLmFjdGl2ZU9wdGlvbj9pLmFjdGl2ZU9wdGlvbi5pZDpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOmkucGFuZWxPcGVuLnRvU3RyaW5nKCkpKCJhcmlhLW93bnMiLGkuYXV0b2NvbXBsZXRlRGlzYWJsZWR8fCFpLnBhbmVsT3Blbnx8bnVsbD09aS5hdXRvY29tcGxldGU/bnVsbDppLmF1dG9jb21wbGV0ZS5pZCkoImFyaWEtaGFzcG9wdXAiLGkuYXV0b2NvbXBsZXRlRGlzYWJsZWQ/bnVsbDoibGlzdGJveCIpfSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXIiXSxmZWF0dXJlczpbUXQoW2NMZV0pLEtlXX0pLG59KSgpLGxBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3VMZV0saW1wb3J0czpbQ28sY2csZm4sUGUsUGMsY2csZm5dfSksbn0pKCksU3A9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIn1vbklucHV0S2V5VXAoZSl7IkVudGVyIj09PWUua2V5JiZ0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIuY2xvc2VQYW5lbCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1maWx0ZXItaW5wdXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShLeCw1KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLmF1dG9jb21wbGV0ZVRyaWdnZXI9ci5maXJzdCl9fSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsbWF0QXV0b2NvbXBsZXRlOiJtYXRBdXRvY29tcGxldGUiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWyJzdmdJY29uIiwic2VhcmNoXzI0cHgiXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJwbGFjZWhvbGRlciIsIm1hdEF1dG9jb21wbGV0ZSIsIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwidmFsdWUiLCJrZXl1cCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwibWF0LWljb24iLDApLGgoMSwiaW5wdXQiLDEpLEkoImtleXVwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbklucHV0S2V5VXAobyl9KSxnKCkpLDImZSYmKHYoMSksXygicGxhY2Vob2xkZXIiLGkucGxhY2Vob2xkZXIpKCJtYXRBdXRvY29tcGxldGUiLGkubWF0QXV0b2NvbXBsZXRlKSgibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCFpLm1hdEF1dG9jb21wbGV0ZSkoInZhbHVlIixpLnZhbHVlKSl9LGRlcGVuZGVuY2llczpbS3gsRW5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxM3B4fW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yO2NvbG9yOmN1cnJlbnRDb2xvcjtmb250OmluaGVyaXQ7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6MDtmbGV4LWdyb3c6MX0iXX0pLG59KSgpLGZMZT1bImNvbnRhaW5lciJdO2Z1bmN0aW9uIG1MZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1zbGlkZXIiLDQpLEkoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5oYW5kbGVTaW5nbGVTbGlkZXJDaGFuZ2Uoci52YWx1ZSkpfSksZygpfWlmKDImbil7bGV0IGU9dygpO18oImRpc2FibGVkIiwhZS5lbmFibGVkKSgibWluIixlLm1pbikoIm1heCIsZS5tYXgpKCJzdGVwIiwxKSgidmFsdWUiLGUubG93ZXJWYWx1ZSl9fWZ1bmN0aW9uIGhMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNwYW4iLDYsNyksUCgyLCJzcGFuIiw4KSgzLCJzcGFuIiw5KSxoKDQsInNwYW4iLDEwKSxJKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygyKTtyZXR1cm4gUShvLmhhbmRsZU1vdXNlRG93bihyLG8uUG9zaXRpb24uTEVGVCkpfSksZygpLGgoNSwic3BhbiIsMTApLEkoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KDIpO3JldHVybiBRKG8uaGFuZGxlTW91c2VEb3duKHIsby5Qb3NpdGlvbi5SSUdIVCkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT13KDIpO3YoMyksVHQoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLmxvd2VyVmFsdWUpKSgid2lkdGgiLGUuZ2V0VHJhY2tXaWR0aCgpKSx2KDEpLFR0KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS5sb3dlclZhbHVlKSksbnQoImFjdGl2ZSIsZS5pc1RodW1iQWN0aXZlKGUuUG9zaXRpb24uTEVGVCkpLHYoMSksVHQoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLnVwcGVyVmFsdWUpKSxudCgiYWN0aXZlIixlLmlzVGh1bWJBY3RpdmUoZS5Qb3NpdGlvbi5SSUdIVCkpfX1mdW5jdGlvbiBnTGUobix0KXtpZigxJm4mJlMoMCxoTGUsNiwxMiwic3BhbiIsNSksMiZuKXtsZXQgZT13KCk7XygibmdJZiIsZS5taW4hPT1lLm1heCl9fXZhciBsbD0oKCk9PihmdW5jdGlvbihuKXtuW24uTk9ORT0wXT0iTk9ORSIsbltuLkxFRlQ9MV09IkxFRlQiLG5bbi5SSUdIVD0yXT0iUklHSFQifShsbHx8KGxsPXt9KSksbGwpKSgpLGRBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMudGlja0NvdW50PTIwLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnJldHVybkludGVnZXJzPSExLHRoaXMucmFuZ2VWYWx1ZXNDaGFuZ2VkPW5ldyBGLHRoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkPW5ldyBGLHRoaXMuUG9zaXRpb249bGwsdGhpcy5hY3RpdmVUaHVtYj1sbC5OT05FLHRoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iPTAsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZX1nZXRUaHVtYlBvc2l0aW9uKGUpe2xldCBpPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKGUpLHI9dGhpcy5tYXgtdGhpcy5taW47cmV0dXJuIHI8PTA/IjUwJSI6KGktdGhpcy5taW4pL3IqMTAwKyIlIn1nZXRUcmFja1dpZHRoKCl7aWYobnVsbD09PXRoaXMudXBwZXJWYWx1ZSlyZXR1cm4iMCUiO2xldCBlPXRoaXMubWF4LXRoaXMubWluO3JldHVybiBlPD0wPyIwJSI6KHRoaXMuZ2V0Q2xpcHBlZFZhbHVlKHRoaXMudXBwZXJWYWx1ZSktdGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5sb3dlclZhbHVlKSkvZSoxMDArIiUifWdldENsaXBwZWRWYWx1ZShlKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZSx0aGlzLm1pbiksdGhpcy5tYXgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uSW5pdCgpe21pKGRvY3VtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaGFuZGxlTW91c2VNb3ZlKGUpfSksbWkoZG9jdW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaGFuZGxlTW91c2VPdXQoZSl9KX1oYW5kbGVNb3VzZURvd24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZVRodW1iPWksdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI9Ni1lLm9mZnNldFh9Y2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudChlKXtsZXQgYSx7bGVmdDppLHJpZ2h0OnJ9PXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1lLmNsaWVudFgtaSt0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYjtpZihudWxsIT09dGhpcy50aWNrQ291bnQmJnRoaXMudGlja0NvdW50PjApe2xldCBjPShyLWkpL3RoaXMudGlja0NvdW50O2E9TWF0aC5yb3VuZChzL2MpKmMvKHItaSl9ZWxzZSBhPXMvKHItaSk7bGV0IGw9dGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5taW4rKHRoaXMubWF4LXRoaXMubWluKSphKTtyZXR1cm4gdGhpcy5yZXR1cm5JbnRlZ2Vycz9NYXRoLnJvdW5kKGwpOk51bWJlcihsLnRvRml4ZWQoMTApKX1oYW5kbGVNb3VzZU1vdmUoZSl7aWYodGhpcy5hY3RpdmVUaHVtYj09PWxsLk5PTkV8fG51bGw9PT10aGlzLnVwcGVyVmFsdWUpcmV0dXJuO2xldCBpPXRoaXMuY2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudChlKSxyPVt0aGlzLmxvd2VyVmFsdWUsdGhpcy51cHBlclZhbHVlXTt0aGlzLmFjdGl2ZVRodW1iPT09bGwuTEVGVD8oaT50aGlzLnVwcGVyVmFsdWUmJih0aGlzLmFjdGl2ZVRodW1iPWxsLlJJR0hUKSxyPVtpLHRoaXMudXBwZXJWYWx1ZV0pOihpPHRoaXMubG93ZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9bGwuTEVGVCkscj1bdGhpcy5sb3dlclZhbHVlLGldKSx0aGlzLm1heWJlTm90aWZ5TmV4dFJhbmdlVmFsdWVzKHIsIlNMSURFUiIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9bWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoZSxpKXtsZXRbcixvXT1lLnNvcnQoKHMsYSk9PnMtYSk7KHRoaXMubG93ZXJWYWx1ZSE9PXJ8fHRoaXMudXBwZXJWYWx1ZSE9PW8pJiZ0aGlzLnJhbmdlVmFsdWVzQ2hhbmdlZC5lbWl0KHtsb3dlclZhbHVlOnIsdXBwZXJWYWx1ZTpvLHNvdXJjZTppfSl9aGFuZGxlTW91c2VPdXQoZSl7dGhpcy5hY3RpdmVUaHVtYiE9PWxsLk5PTkUmJih0aGlzLmFjdGl2ZVRodW1iPWxsLk5PTkUsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9aGFuZGxlU2luZ2xlU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOmUsc291cmNlOiJTTElERVIifSl9aGFuZGxlSW5wdXRDaGFuZ2UoZSxpKXtsZXQgcj1lLnRhcmdldCxvPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKE51bWJlcihyLnZhbHVlKSk7aXNOYU4obyl8fChpPT09bGwuTEVGVD9udWxsPT09dGhpcy51cHBlclZhbHVlP3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOm8sc291cmNlOiJURVhUIn0pOnRoaXMubWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoW28sdGhpcy51cHBlclZhbHVlXSwiVEVYVCIpOiIiPT09ci52YWx1ZT90aGlzLnNpbmdsZVZhbHVlQ2hhbmdlZC5lbWl0KHt2YWx1ZTp0aGlzLmxvd2VyVmFsdWUsc291cmNlOiJURVhUX0RFTEVURUQifSk6dGhpcy5tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhbdGhpcy5sb3dlclZhbHVlLG9dLCJURVhUIikpfWlzVGh1bWJBY3RpdmUoZSl7cmV0dXJuIHRoaXMuYWN0aXZlVGh1bWI9PT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKCR0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItcmFuZ2UtaW5wdXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShmTGUsNSxNZSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5jb250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e21pbjoibWluIixtYXg6Im1heCIsbG93ZXJWYWx1ZToibG93ZXJWYWx1ZSIsdXBwZXJWYWx1ZToidXBwZXJWYWx1ZSIsdGlja0NvdW50OiJ0aWNrQ291bnQiLGVuYWJsZWQ6ImVuYWJsZWQiLHJldHVybkludGVnZXJzOiJyZXR1cm5JbnRlZ2VycyJ9LG91dHB1dHM6e3JhbmdlVmFsdWVzQ2hhbmdlZDoicmFuZ2VWYWx1ZXNDaGFuZ2VkIixzaW5nbGVWYWx1ZUNoYW5nZWQ6InNpbmdsZVZhbHVlQ2hhbmdlZCJ9LGRlY2xzOjUsdmFyczo2LGNvbnN0czpbWyJ0eXBlIiwibnVtYmVyIiwxLCJsb3dlci1pbnB1dCIsMywiZGlzYWJsZWQiLCJ2YWx1ZSIsImNoYW5nZSJdLFsidHlwZSIsIm51bWJlciIsMSwidXBwZXItaW5wdXQiLDMsImRpc2FibGVkIiwidmFsdWUiLCJjaGFuZ2UiXSxbImNsYXNzIiwic2luZ2xlLXNsaWRlciIsImNvbG9yIiwicHJpbWFyeSIsMywiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidmFsdWUiLCJpbnB1dCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJyYW5nZSIsIiJdLFsiY29sb3IiLCJwcmltYXJ5IiwxLCJzaW5nbGUtc2xpZGVyIiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsImlucHV0Il0sWyJjbGFzcyIsImNvbnRhaW5lciIsNCwibmdJZiJdLFsxLCJjb250YWluZXIiXSxbImNvbnRhaW5lciIsIiJdLFsxLCJzbGlkZXItdHJhY2siXSxbMSwic2xpZGVyLXRyYWNrLWZpbGwiXSxbMSwidGh1bWIiLDMsIm1vdXNlZG93biJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiaW5wdXQiLDApLEkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXRDaGFuZ2UobyxpLlBvc2l0aW9uLkxFRlQpfSksZygpLGgoMSwiaW5wdXQiLDEpLEkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXRDaGFuZ2UobyxpLlBvc2l0aW9uLlJJR0hUKX0pLGcoKSxTKDIsbUxlLDEsNSwibWF0LXNsaWRlciIsMiksUygzLGdMZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDMsV3QpKSwyJmUpe2xldCByPWl0KDQpO18oImRpc2FibGVkIiwhaS5lbmFibGVkKSgidmFsdWUiLGkubG93ZXJWYWx1ZSksdigxKSxfKCJkaXNhYmxlZCIsIWkuZW5hYmxlZCkoInZhbHVlIixudWxsIT09aS51cHBlclZhbHVlP2kudXBwZXJWYWx1ZToiIiksdigxKSxfKCJuZ0lmIixudWxsPT09aS51cHBlclZhbHVlKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltGZSxEZF0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZ3JpZDtncmlkLWdhcDoxMHB4O2dyaWQtdGVtcGxhdGUtYXJlYXM6Imxvd2VyLWlucHV0IHVwcGVyLWlucHV0IiAic2xpZGVyIHNsaWRlciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Zm9udC1zaXplOjA7bWluLXdpZHRoOjEwMHB4O3BhZGRpbmc6NnB4fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfS5sb3dlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmxvd2VyLWlucHV0fS51cHBlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnVwcGVyLWlucHV0O2p1c3RpZnktc2VsZjpmbGV4LWVuZH0uc2luZ2xlLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcjtwYWRkaW5nOjBweH0uc2luZ2xlLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtc2xpZGVyLXdyYXBwZXJ7dG9wOjVweDtsZWZ0OjBweDtyaWdodDowcHh9ICAuc2luZ2xlLXNsaWRlci5tYXQtc2xpZGVyLWhvcml6b250YWx7aGVpZ2h0OjEycHh9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcjthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjYpO2hlaWdodDoycHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoycHh9LnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2FkaG93OjAgMCAwIDFweCByZ2JhKDAsMCwwLC4yNik7Ym9yZGVyLXJhZGl1czoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMnB4O21hcmdpbi1sZWZ0Oi02cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2U7d2lkdGg6MTJweDt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2FkaG93OjAgMCAwIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4zKX0udGh1bWJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpncmFifS50aHVtYltfbmdjb250ZW50LSVDT01QJV06YWN0aXZle2N1cnNvcjpncmFiYmluZ30udGh1bWIuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06c2NhbGUoMS4yKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1N2MwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGJMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInRiLWZpbHRlci1pbnB1dCIsOSksSSgia2V5dXAiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5kaXNjcmV0ZVZhbHVlS2V5VXAocikpfSksZygpfTImbiYmXygidmFsdWUiLHcoMikuZGlzY3JldGVWYWx1ZUZpbHRlcil9ZnVuY3Rpb24gdkxlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDEwKSxUKDEsIiBObyBNYXRjaGluZyBWYWx1ZXMgIiksZygpKX1mdW5jdGlvbiB5TGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDEzKSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxoKDEsIm1hdC1jaGVja2JveCIsMyksSSgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoMykuZGlzY3JldGVGaWx0ZXJDaGFuZ2VkLmVtaXQobykpfSksaCgyLCJzcGFuIiksVCgzKSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDMpO3YoMSksXygiY2hlY2tlZCIsaS5maWx0ZXIuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKGUpKSx2KDIpLGJ0KGUpfX1mdW5jdGlvbiB4TGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTEpLFMoMSx5TGUsNCwyLCJkaXYiLDEyKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLF8oIm5nRm9yT2YiLGUuZ2V0UG9zc2libGVWYWx1ZXMoKSl9fWZ1bmN0aW9uIENMZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpLFMoMixiTGUsMSwxLCJ0Yi1maWx0ZXItaW5wdXQiLDYpLGcoKSxTKDMsdkxlLDIsMCwiZGl2Iiw3KSxTKDQseExlLDIsMSwiZGl2Iiw4KSxnKCkpLDImbil7bGV0IGU9dygpO3YoMiksXygibmdJZiIsZS5maWx0ZXIucG9zc2libGVWYWx1ZXMpLHYoMSksXygibmdJZiIsIWUuZ2V0UG9zc2libGVWYWx1ZXMoKS5sZW5ndGgpLHYoMSksXygibmdJZiIsZS5nZXRQb3NzaWJsZVZhbHVlcygpLmxlbmd0aCl9fWZ1bmN0aW9uIE1MZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMTQpLEkoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGgoMSwidGItcmFuZ2UtaW5wdXQiLDE1KSxJKCJyYW5nZVZhbHVlc0NoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmludGVydmFsRmlsdGVyQ2hhbmdlZC5lbWl0KHIpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO3YoMSksXygibWluIixlLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsZS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixlLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fXZhciBMdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRG9tYWluVHlwZT1nbix0aGlzLmRpc2NyZXRlVmFsdWVGaWx0ZXI9IiIsdGhpcy5kaXNjcmV0ZUZpbHRlckNoYW5nZWQ9bmV3IEYsdGhpcy5pbnRlcnZhbEZpbHRlckNoYW5nZWQ9bmV3IEYsdGhpcy5pbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZD1uZXcgRn1nZXRQb3NzaWJsZVZhbHVlcygpe2xldCBlPXRoaXMuZmlsdGVyLnBvc3NpYmxlVmFsdWVzPz9bXTtyZXR1cm4gdGhpcy5kaXNjcmV0ZVZhbHVlRmlsdGVyP2UuZmlsdGVyKGk9PmkudG9TdHJpbmcoKS5tYXRjaCh0aGlzLmRpc2NyZXRlVmFsdWVGaWx0ZXIpKTplfWRpc2NyZXRlVmFsdWVLZXlVcChlKXt0aGlzLmRpc2NyZXRlVmFsdWVGaWx0ZXI9ZS50YXJnZXQudmFsdWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUtZmlsdGVyIl1dLGlucHV0czp7ZmlsdGVyOiJmaWx0ZXIifSxvdXRwdXRzOntkaXNjcmV0ZUZpbHRlckNoYW5nZWQ6ImRpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsaW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkOiJpbnRlcnZhbEZpbHRlckNoYW5nZWQiLGluY2x1ZGVVbmRlZmluZWRUb2dnbGVkOiJpbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCJ9LGRlY2xzOjUsdmFyczozLGNvbnN0czpbWzEsImZpbHRlci1kaWFsb2ciXSxbImNsYXNzIiwiZmlsdGVyLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJmaWx0ZXItY29udGFpbmVyIiwiZGlzYWJsZVJpcHBsZSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJmaWx0ZXItY29udGFpbmVyIl0sWzEsImlucHV0LWNvbnRhaW5lciJdLFsicGxhY2Vob2xkZXIiLCJGaWx0ZXIgRGlzY3JldGUgVmFsdWVzIChyZWdleCkiLDMsInZhbHVlIiwia2V5dXAiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tbWF0Y2hlcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJkaXNjcmV0ZS1maWx0ZXJzLWNvbnRhaW5lciIsNCwibmdJZiJdLFsicGxhY2Vob2xkZXIiLCJGaWx0ZXIgRGlzY3JldGUgVmFsdWVzIChyZWdleCkiLDMsInZhbHVlIiwia2V5dXAiXSxbMSwibm8tbWF0Y2hlcyJdLFsxLCJkaXNjcmV0ZS1maWx0ZXJzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJkaXNjcmV0ZS12YWx1ZSIsMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JJbmRleCIsIm5nRm9yT2YiXSxbMSwiZGlzY3JldGUtdmFsdWUiLDMsImNsaWNrIl0sWyJkaXNhYmxlUmlwcGxlIiwiIiwxLCJmaWx0ZXItY29udGFpbmVyIiwzLCJjbGljayJdLFsxLCJyYW5nZS1pbnB1dCIsMywibWluIiwibWF4IiwibG93ZXJWYWx1ZSIsInVwcGVyVmFsdWUiLCJyYW5nZVZhbHVlc0NoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCksUygxLENMZSw1LDMsImRpdiIsMSksUygyLE1MZSwyLDQsImRpdiIsMiksaCgzLCJtYXQtY2hlY2tib3giLDMpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5pbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZC5lbWl0KCl9KSxUKDQsIkluY2x1ZGUgVW5kZWZpbmVkIiksZygpKCkpLDImZSYmKHYoMSksXygibmdJZiIsaS5maWx0ZXIudHlwZT09PWkuRG9tYWluVHlwZS5ESVNDUkVURSksdigxKSxfKCJuZ0lmIixpLmZpbHRlci50eXBlPT09aS5Eb21haW5UeXBlLklOVEVSVkFMKSx2KDEpLF8oImNoZWNrZWQiLGkuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQpKX0sZGVwZW5kZW5jaWVzOltubixGZSxoYSxTcCxkQV0sc3R5bGVzOlsiLmZpbHRlci1kaWFsb2dbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTZweCA4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZDtib3gtc2hhZG93OjBweCA0cHggNHB4IHJnYmEoMCwwLDAsLjI1KTtib3JkZXItY29sb3I6I2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1kaWFsb2dbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLWRpYWxvZ1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTU7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfS5pbnB1dC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206OHB4fS5kaXNjcmV0ZS1maWx0ZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDozMDBweDtvdmVyZmxvdy15OmF1dG99Lm5vLW1hdGNoZXNbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6OHB4IDEycHh9LmZpbHRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjhweDttYXJnaW4tYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b20tY29sb3I6IzU1NX0ucmFuZ2UtaW5wdXRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6NHB4IDhweDt3aWR0aDoyMDBweH0uZGlzY3JldGUtdmFsdWVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbn0uZGlzY3JldGUtdmFsdWVbX25nY29udGVudC0lQ09NUCVdICAgICBtYXQtY2hlY2tib3gsIC5kaXNjcmV0ZS12YWx1ZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tZGMtZm9ybS1maWVsZCwgLmRpc2NyZXRlLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWx7d2lkdGg6MTAwJX0iXX0pLG59KSgpLFNMZT1bImNvbHVtblNlbGVjdG9yTW9kYWwiXSxFTGU9WyJjb250ZXh0TWVudSJdLFRMZT1bImZpbHRlck1vZGFsIl07ZnVuY3Rpb24gRExlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDE0KSxUKDEsIiBObyBBY3Rpb25zIEF2YWlsYWJsZSAiKSxnKCkpfWZ1bmN0aW9uIElMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsMTUpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmNvbnRleHRNZW51UmVtb3ZlQ29sdW1uKCkpfSksUCgxLCJtYXQtaWNvbiIsMTYpLFQoMiwiUmVtb3ZlICIpLGcoKX19ZnVuY3Rpb24gQUxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwxNyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KCk7cmV0dXJuIFEoci5zb3J0QnlIZWFkZXIobnVsbD09ci5jb250ZXh0TWVudUhlYWRlcj9udWxsOnIuY29udGV4dE1lbnVIZWFkZXIubmFtZSkpfSksUCgxLCJtYXQtaWNvbiIsMTgpLFQoMiwiU29ydCBEZXNjZW5kaW5nICIpLGcoKX19ZnVuY3Rpb24gUkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwxNyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KCk7cmV0dXJuIFEoci5zb3J0QnlIZWFkZXIobnVsbD09ci5jb250ZXh0TWVudUhlYWRlcj9udWxsOnIuY29udGV4dE1lbnVIZWFkZXIubmFtZSkpfSksUCgxLCJtYXQtaWNvbiIsMTkpLFQoMiwiU29ydCBBc2NlbmRpbmcgIiksZygpfX1mdW5jdGlvbiBQTGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDE1KSxJKCJjbGljayIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5vcGVuRmlsdGVyTWVudShyLG8uY29udGV4dE1lbnVIZWFkZXIpKX0pLFAoMSwibWF0LWljb24iLDIwKSxUKDIsIiBGaWx0ZXIgIiksZygpfX1mdW5jdGlvbiBPTGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDE1KSxJKCJjbGljayIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5vcGVuQ29sdW1uU2VsZWN0b3Iocix7aW5zZXJ0VG86by5TaWRlLkxFRlQsaXNTdWJNZW51OiEwfSkpfSksUCgxLCJtYXQtaWNvbiIsMjEpLFQoMiwiSW5zZXJ0IENvbHVtbiBMZWZ0ICIpLGcoKX19ZnVuY3Rpb24ga0xlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwxNSksSSgiY2xpY2siLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpO3JldHVybiBRKG8ub3BlbkNvbHVtblNlbGVjdG9yKHIse2luc2VydFRvOm8uU2lkZS5SSUdIVCxpc1N1Yk1lbnU6ITB9KSl9KSxQKDEsIm1hdC1pY29uIiwyMSksVCgyLCJJbnNlcnQgQ29sdW1uIFJpZ2h0ICIpLGcoKX19ZnVuY3Rpb24gRkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiY3VzdG9tLW1vZGFsIiwyMiwyMyksSSgib25PcGVuIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmZvY3VzQ29sdW1uU2VsZWN0b3IoKSl9KSgib25DbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkNvbHVtblNlbGVjdG9yQ2xvc2VkKCkpfSksaCgyLCJ0Yi1kYXRhLXRhYmxlLWNvbHVtbi1zZWxlY3Rvci1jb21wb25lbnQiLDI0KSxJKCJjb2x1bW5TZWxlY3RlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25Db2x1bW5BZGRlZChyKSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTt2KDIpLF8oInNlbGVjdGFibGVDb2x1bW5zIixlLnNlbGVjdGFibGVDb2x1bW5zKX19ZnVuY3Rpb24gTkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwidGItZGF0YS10YWJsZS1maWx0ZXIiLDI1KSxJKCJpbnRlcnZhbEZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmludGVydmFsRmlsdGVyQ2hhbmdlZChyKSl9KSgiZGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5kaXNjcmV0ZUZpbHRlckNoYW5nZWQocikpfSkoImluY2x1ZGVVbmRlZmluZWRUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKCkpfSksZygpfTImbiYmXygiZmlsdGVyIix3KCkuZ2V0Q3VycmVudENvbHVtbkZpbHRlcigpKX1mdW5jdGlvbiBMTGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDI2KSgxLCJidXR0b24iLDI3KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub3BlbkNvbHVtblNlbGVjdG9yKHIpKX0pLFAoMiwibWF0LWljb24iLDIxKSxnKCkoKX19ZnVuY3Rpb24gQkxlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI4KSxQKDEsIm1hdC1zcGlubmVyIiwyOSksZygpKX12YXIgVkxlPVtbWyIiLCJoZWFkZXIiLCIiXV0sW1siIiwiY29udGVudCIsIiJdXV0sSExlPVsiW2hlYWRlcl0iLCJbY29udGVudF0iXSxlYz0oKCk9PihmdW5jdGlvbihuKXtuW24uUklHSFQ9MF09IlJJR0hUIixuW24uTEVGVD0xXT0iTEVGVCJ9KGVjfHwoZWM9e30pKSxlYykpKCksQ1Y9ZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpfSx1QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMuaGVhZGVyQ2VsbFN1YnNjcmlwdGlvbnM9W10sdGhpcy5jb250ZW50Q2VsbFN1YnNjcmlwdGlvbnM9W10sdGhpcy5jb250ZXh0TWVudUhlYWRlcj12b2lkIDAsdGhpcy5pbnNlcnRDb2x1bW5Ubz12b2lkIDAsdGhpcy5maWx0ZXJDb2x1bW49dm9pZCAwLHRoaXMuc29ydERhdGFCeT1uZXcgRix0aGlzLm9yZGVyQ29sdW1ucz1uZXcgRix0aGlzLnJlbW92ZUNvbHVtbj1uZXcgRix0aGlzLmFkZENvbHVtbj1uZXcgRix0aGlzLmFkZEZpbHRlcj1uZXcgRix0aGlzLkNvbHVtbkhlYWRlcnM9aHQsdGhpcy5Tb3J0aW5nT3JkZXI9aW8sdGhpcy5TaWRlPWVjLHRoaXMuaGlnaGxpZ2h0U2lkZT1lYy5SSUdIVH1uZ09uRGVzdHJveSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixDViksdGhpcy5oZWFkZXJDZWxsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PntlLnVuc3Vic2NyaWJlKCl9KX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN5bmNIZWFkZXJzKCksdGhpcy5oZWFkZXJDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnN5bmNIZWFkZXJzLmJpbmQodGhpcykpLHRoaXMuc3luY0NvbnRlbnQoKSx0aGlzLmNvbnRlbnRDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnN5bmNDb250ZW50LmJpbmQodGhpcykpfXN5bmNIZWFkZXJzKCl7dGhpcy5oZWFkZXJDZWxsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PntlLnVuc3Vic2NyaWJlKCl9KSx0aGlzLmhlYWRlckNlbGxTdWJzY3JpcHRpb25zPVtdLHRoaXMuaGVhZGVyQ2VsbHMuZm9yRWFjaChlPT57dGhpcy5oZWFkZXJDZWxsU3Vic2NyaXB0aW9ucy5wdXNoKGUuZHJhZ1N0YXJ0LnN1YnNjcmliZSh0aGlzLmRyYWdTdGFydC5iaW5kKHRoaXMpKSxlLmRyYWdFbnRlci5zdWJzY3JpYmUodGhpcy5kcmFnRW50ZXIuYmluZCh0aGlzKSksZS5kcmFnRW5kLnN1YnNjcmliZSh0aGlzLmRyYWdFbmQuYmluZCh0aGlzKSksZS5oZWFkZXJDbGlja2VkLnN1YnNjcmliZSh0aGlzLnNvcnRCeUhlYWRlci5iaW5kKHRoaXMpKSxlLmNvbnRleHRNZW51T3BlbmVkLnN1YnNjcmliZSh0aGlzLm9wZW5Db250ZXh0TWVudS5iaW5kKHRoaXMsZS5oZWFkZXIpKSl9KX1zeW5jQ29udGVudCgpe3RoaXMuY29udGVudENlbGxTdWJzY3JpcHRpb25zLmZvckVhY2goZT0+e2UudW5zdWJzY3JpYmUoKX0pLHRoaXMuY29udGVudENlbGxTdWJzY3JpcHRpb25zPXRoaXMuY29udGVudENlbGxzLm1hcChlPT5bZS5jb250ZXh0TWVudU9wZW5lZC5zdWJzY3JpYmUodGhpcy5vcGVuQ29udGV4dE1lbnUuYmluZCh0aGlzLGUuaGVhZGVyKSldKS5mbGF0KCl9c29ydEJ5SGVhZGVyKGUpe3RoaXMuc29ydERhdGFCeS5lbWl0KHRoaXMuc29ydGluZ0luZm8ubmFtZSE9PWV8fHRoaXMuc29ydGluZ0luZm8ub3JkZXIhPT1pby5BU0NFTkRJTkc/e25hbWU6ZSxvcmRlcjppby5BU0NFTkRJTkd9OntuYW1lOmUsb3JkZXI6aW8uREVTQ0VORElOR30pfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyTmFtZT1lLm5hbWUsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLENWKX1kcmFnRW5kKCl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJOYW1lfHwhdGhpcy5oaWdobGlnaHRlZENvbHVtbk5hbWV8fCh0aGlzLm9yZGVyQ29sdW1ucy5lbWl0KHRoaXMubW92ZUhlYWRlcih0aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoTmFtZSh0aGlzLmRyYWdnaW5nSGVhZGVyTmFtZSksdGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aE5hbWUodGhpcy5oaWdobGlnaHRlZENvbHVtbk5hbWUpKSksdGhpcy5kcmFnZ2luZ0hlYWRlck5hbWU9dm9pZCAwLHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5OYW1lPXZvaWQgMCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsQ1YpLHRoaXMuaGVhZGVyQ2VsbHMuZm9yRWFjaChlPT57ZS5oaWdobGlnaHRTdHlsZSQubmV4dCh7fSl9KSl9ZHJhZ0VudGVyKGUpeyF0aGlzLmRyYWdnaW5nSGVhZGVyTmFtZXx8KHRoaXMuaGlnaGxpZ2h0U2lkZT10aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoTmFtZShlLm5hbWUpPHRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhOYW1lKHRoaXMuZHJhZ2dpbmdIZWFkZXJOYW1lKT9lYy5MRUZUOmVjLlJJR0hULHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5OYW1lPWUubmFtZSx0aGlzLmhlYWRlckNlbGxzLmZvckVhY2goaT0+e2kuaGlnaGxpZ2h0U3R5bGUkLm5leHQodGhpcy5nZXRIZWFkZXJIaWdobGlnaHRTdHlsZShpLmhlYWRlci5uYW1lKSl9KSl9bW92ZUhlYWRlcihlLGkpe2xldCByPVsuLi50aGlzLmhlYWRlcnNdO3JldHVybiByLnNwbGljZShlLDEpLHIuc3BsaWNlKGksMCx0aGlzLmhlYWRlcnNbZV0pLHJ9Z2V0SGVhZGVySGlnaGxpZ2h0U3R5bGUoZSl7cmV0dXJuIGUhPT10aGlzLmhpZ2hsaWdodGVkQ29sdW1uTmFtZT97fTp7aGlnaGxpZ2h0OiEwLCJoaWdobGlnaHQtYm9yZGVyLXJpZ2h0Ijp0aGlzLmhpZ2hsaWdodFNpZGU9PT1lYy5SSUdIVCwiaGlnaGxpZ2h0LWJvcmRlci1sZWZ0Ijp0aGlzLmhpZ2hsaWdodFNpZGU9PT1lYy5MRUZUfX1nZXRJbmRleE9mSGVhZGVyV2l0aE5hbWUoZSl7cmV0dXJuIHRoaXMuaGVhZGVycy5maW5kSW5kZXgoaT0+ZT09PWkubmFtZSl9Zm9jdXNDb2x1bW5TZWxlY3Rvcigpe3RoaXMuY29sdW1uU2VsZWN0b3IuZm9jdXMoKX1vcGVuQ29udGV4dE1lbnUoZSxpKXtpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSx0aGlzLmNvbHVtblNlbGVjdG9yTW9kYWw/LmNsb3NlKCksdGhpcy5maWx0ZXJNb2RhbD8uY2xvc2UoKSx0aGlzLmNvbnRleHRNZW51SGVhZGVyPWUsdGhpcy5jb250ZXh0TWVudS5vcGVuQXRQb3NpdGlvbih7eDppLmNsaWVudFgseTppLmNsaWVudFl9KX1vbkNvbnRleHRNZW51Q2xvc2VkKCl7dGhpcy5jb250ZXh0TWVudUhlYWRlcj12b2lkIDB9b3BlbkNvbHVtblNlbGVjdG9yKGUsaSl7aT8uaXNTdWJNZW51JiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsdGVyTW9kYWw/LmNsb3NlKCksdGhpcy5pbnNlcnRDb2x1bW5Ubz1pPy5pbnNlcnRUbztsZXQgcj1lLnRhcmdldC5jbG9zZXN0KCJidXR0b24iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLmNvbHVtblNlbGVjdG9yTW9kYWwub3BlbkF0UG9zaXRpb24oe3g6ci54K3Iud2lkdGgseTpyLnl9KSx0aGlzLmNvbHVtblNlbGVjdG9yLmFjdGl2YXRlKCl9b25Db2x1bW5TZWxlY3RvckNsb3NlZCgpe3RoaXMuaW5zZXJ0Q29sdW1uVG89dm9pZCAwLHRoaXMuY29sdW1uU2VsZWN0b3IuZGVhY3RpdmF0ZSgpfWNhbkNvbnRleHRNZW51UmVtb3ZlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29udGV4dE1lbnVIZWFkZXI/LnJlbW92YWJsZX1jYW5Db250ZXh0TWVudUluc2VydCgpe3JldHVybiB0aGlzLnNlbGVjdGFibGVDb2x1bW5zJiZ0aGlzLnNlbGVjdGFibGVDb2x1bW5zLmxlbmd0aCYmdGhpcy5jb250ZXh0TWVudUhlYWRlcj8ubW92YWJsZX1pc0NvbnRleHRNZW51RW1wdHkoKXtyZXR1cm4hKHRoaXMuY29udGV4dE1lbnVIZWFkZXI/LnJlbW92YWJsZXx8dGhpcy5jb250ZXh0TWVudUhlYWRlcj8uc29ydGFibGV8fHRoaXMuY2FuQ29udGV4dE1lbnVJbnNlcnQoKXx8dGhpcy5jb250ZXh0TWVudUhlYWRlcj8uZmlsdGVyYWJsZSl9Y29udGV4dE1lbnVSZW1vdmVDb2x1bW4oKXt2b2lkIDAhPT10aGlzLmNvbnRleHRNZW51SGVhZGVyJiYodGhpcy5yZW1vdmVDb2x1bW4uZW1pdCh0aGlzLmNvbnRleHRNZW51SGVhZGVyKSx0aGlzLmNvbnRleHRNZW51LmNsb3NlKCksdGhpcy5maWx0ZXJNb2RhbD8uY2xvc2UoKSl9Z2V0SW5zZXJ0SW5kZXgoKXtpZih2b2lkIDA9PT10aGlzLmNvbnRleHRNZW51SGVhZGVyfHx2b2lkIDA9PT10aGlzLmluc2VydENvbHVtblRvKXJldHVybjtsZXQgZT10aGlzLmhlYWRlcnMuaW5kZXhPZih0aGlzLmNvbnRleHRNZW51SGVhZGVyKTtyZXR1cm4gdGhpcy5pbnNlcnRDb2x1bW5Ubz09PWVjLkxFRlQ/ZTp0aGlzLmluc2VydENvbHVtblRvPT09ZWMuUklHSFQ/TWF0aC5taW4oZSsxLHRoaXMuaGVhZGVycy5sZW5ndGgpOmV9b25Db2x1bW5BZGRlZChlKXt0aGlzLmFkZENvbHVtbi5lbWl0KHtoZWFkZXI6ZSxpbmRleDp0aGlzLmdldEluc2VydEluZGV4KCl9KX1vcGVuRmlsdGVyTWVudShlLGkpe3RoaXMuZmlsdGVyQ29sdW1uPWk7bGV0IHI9ZS50YXJnZXQuY2xvc2VzdCgiYnV0dG9uIikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNvbHVtblNlbGVjdG9yTW9kYWw/LmNsb3NlKCksdGhpcy5maWx0ZXJNb2RhbC5vcGVuQXRQb3NpdGlvbih7eDpyLngrci53aWR0aCx5OnIueX0pfWdldEN1cnJlbnRDb2x1bW5GaWx0ZXIoKXtpZih0aGlzLmZpbHRlckNvbHVtbilyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXJzLmdldCh0aGlzLmZpbHRlckNvbHVtbi5uYW1lKX1vbkZpbHRlckNsb3NlZCgpe3RoaXMuZmlsdGVyQ29sdW1uPXZvaWQgMH1pbnRlcnZhbEZpbHRlckNoYW5nZWQoZSl7aWYoIXRoaXMuZmlsdGVyQ29sdW1uKXJldHVybjtsZXQgaT10aGlzLmdldEN1cnJlbnRDb2x1bW5GaWx0ZXIoKTshaXx8dGhpcy5hZGRGaWx0ZXIuZW1pdCh7aGVhZGVyOnRoaXMuZmlsdGVyQ29sdW1uLHZhbHVlOnsuLi5pLGZpbHRlckxvd2VyVmFsdWU6ZS5sb3dlclZhbHVlLGZpbHRlclVwcGVyVmFsdWU6ZS51cHBlclZhbHVlfX0pfWRpc2NyZXRlRmlsdGVyQ2hhbmdlZChlKXtpZighdGhpcy5maWx0ZXJDb2x1bW4pcmV0dXJuO2xldCBpPXRoaXMuZ2V0Q3VycmVudENvbHVtbkZpbHRlcigpO2lmKCFpKXJldHVybjtsZXQgcj1uZXcgU2V0KFsuLi5pLmZpbHRlclZhbHVlc10pO3IuaGFzKGUpP3IuZGVsZXRlKGUpOnIuYWRkKGUpLHRoaXMuYWRkRmlsdGVyLmVtaXQoe2hlYWRlcjp0aGlzLmZpbHRlckNvbHVtbix2YWx1ZTp7Li4uaSxmaWx0ZXJWYWx1ZXM6QXJyYXkuZnJvbShyKX19KX1pbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCgpe2lmKCF0aGlzLmZpbHRlckNvbHVtbilyZXR1cm47bGV0IGU9dGhpcy5nZXRDdXJyZW50Q29sdW1uRmlsdGVyKCk7IWV8fHRoaXMuYWRkRmlsdGVyLmVtaXQoe2hlYWRlcjp0aGlzLmZpbHRlckNvbHVtbix2YWx1ZTp7Li4uZSxpbmNsdWRlVW5kZWZpbmVkOiFlLmluY2x1ZGVVbmRlZmluZWR9fSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKFRpKHIsdV8sNCksVGkocixkXyw1KSksMiZlKXtsZXQgbztTZShvPUVlKCkpJiYoaS5oZWFkZXJDZWxscz1vKSxTZShvPUVlKCkpJiYoaS5jb250ZW50Q2VsbHM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihHZShTTGUsNSksR2UoYUEsNSksR2UoRUxlLDUpLEdlKFRMZSw1KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5jb2x1bW5TZWxlY3Rvck1vZGFsPXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLmNvbHVtblNlbGVjdG9yPXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLmNvbnRleHRNZW51PXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLmZpbHRlck1vZGFsPXIuZmlyc3QpfX0saW5wdXRzOntoZWFkZXJzOiJoZWFkZXJzIixzb3J0aW5nSW5mbzoic29ydGluZ0luZm8iLGNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkOiJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsc2VsZWN0YWJsZUNvbHVtbnM6InNlbGVjdGFibGVDb2x1bW5zIixjb2x1bW5GaWx0ZXJzOiJjb2x1bW5GaWx0ZXJzIixsb2FkaW5nOiJsb2FkaW5nIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMiLHJlbW92ZUNvbHVtbjoicmVtb3ZlQ29sdW1uIixhZGRDb2x1bW46ImFkZENvbHVtbiIsYWRkRmlsdGVyOiJhZGRGaWx0ZXIifSxuZ0NvbnRlbnRTZWxlY3RvcnM6SExlLGRlY2xzOjIwLHZhcnM6MTEsY29uc3RzOltbMywib25DbG9zZSJdLFsiY29udGV4dE1lbnUiLCIiXSxbMSwiY29udGV4dC1tZW51Il0sWyJjbGFzcyIsIm5vLWFjdGlvbnMtbWVzc2FnZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250ZXh0LW1lbnUtYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udGV4dC1tZW51LWJ1dHRvbiBzb3J0LWJ1dHRvbiIsIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiY2xhc3MiLCJjb250ZXh0LW1lbnUtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFszLCJvbk9wZW4iLCJvbkNsb3NlIiw0LCJuZ0lmIl0sWyJmaWx0ZXJNb2RhbCIsIiJdLFszLCJmaWx0ZXIiLCJpbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJkaXNjcmV0ZUZpbHRlckNoYW5nZWQiLCJpbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCIsNCwibmdJZiJdLFsxLCJkYXRhLXRhYmxlIl0sWzEsImhlYWRlciJdLFsiY2xhc3MiLCJhZGQtYnV0dG9uLWNlbGwiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZyIsNCwibmdJZiJdLFsxLCJuby1hY3Rpb25zLW1lc3NhZ2UiXSxbIm1hdC1idXR0b24iLCIiLDEsImNvbnRleHQtbWVudS1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdLFsibWF0LWJ1dHRvbiIsIiIsMSwiY29udGV4dC1tZW51LWJ1dHRvbiIsInNvcnQtYnV0dG9uIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImFycm93X2Rvd253YXJkXzI0cHgiXSxbInN2Z0ljb24iLCJhcnJvd191cHdhcmRfMjRweCJdLFsic3ZnSWNvbiIsImZpbHRlcl9hbHRfMjRweCJdLFsic3ZnSWNvbiIsImFkZF8yNHB4Il0sWzMsIm9uT3BlbiIsIm9uQ2xvc2UiXSxbImNvbHVtblNlbGVjdG9yTW9kYWwiLCIiXSxbMywic2VsZWN0YWJsZUNvbHVtbnMiLCJjb2x1bW5TZWxlY3RlZCJdLFszLCJmaWx0ZXIiLCJpbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJkaXNjcmV0ZUZpbHRlckNoYW5nZWQiLCJpbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCJdLFsxLCJhZGQtYnV0dG9uLWNlbGwiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQWRkIENvbHVtbiIsMSwiYWRkLWNvbHVtbi1idG4iLDMsImNsaWNrIl0sWzEsImxvYWRpbmciXSxbIm1vZGUiLCJpbmRldGVybWluYXRlIiwiZGlhbWV0ZXIiLCIyOCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKFZMZSksaCgwLCJjdXN0b20tbW9kYWwiLDAsMSksSSgib25DbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNvbnRleHRNZW51Q2xvc2VkKCl9KSxoKDIsImRpdiIsMiksUygzLERMZSwyLDAsImRpdiIsMyksUyg0LElMZSwzLDAsImJ1dHRvbiIsNCksUyg1LEFMZSwzLDAsImJ1dHRvbiIsNSksUyg2LFJMZSwzLDAsImJ1dHRvbiIsNSksUyg3LFBMZSwzLDAsImJ1dHRvbiIsNCksUyg4LE9MZSwzLDAsImJ1dHRvbiIsNiksUyg5LGtMZSwzLDAsImJ1dHRvbiIsNiksZygpKCksUygxMCxGTGUsMywxLCJjdXN0b20tbW9kYWwiLDcpLGgoMTEsImN1c3RvbS1tb2RhbCIsMCw4KSxJKCJvbkNsb3NlIixmdW5jdGlvbigpe3JldHVybiBpLm9uRmlsdGVyQ2xvc2VkKCl9KSxTKDEzLE5MZSwxLDEsInRiLWRhdGEtdGFibGUtZmlsdGVyIiw5KSxnKCksaCgxNCwiZGl2IiwxMCkoMTUsImRpdiIsMTEpLHp0KDE2KSxTKDE3LExMZSwzLDAsImRpdiIsMTIpLGcoKSx6dCgxOCwxKSxnKCksUygxOSxCTGUsMiwwLCJkaXYiLDEzKSksMiZlJiYodigzKSxfKCJuZ0lmIixpLmlzQ29udGV4dE1lbnVFbXB0eSgpKSx2KDEpLF8oIm5nSWYiLG51bGw9PWkuY29udGV4dE1lbnVIZWFkZXI/bnVsbDppLmNvbnRleHRNZW51SGVhZGVyLnJlbW92YWJsZSksdigxKSxfKCJuZ0lmIiwobnVsbD09aS5jb250ZXh0TWVudUhlYWRlcj9udWxsOmkuY29udGV4dE1lbnVIZWFkZXIuc29ydGFibGUpJiZpLnNvcnRpbmdJbmZvLm9yZGVyPT09aS5Tb3J0aW5nT3JkZXIuQVNDRU5ESU5HJiZpLnNvcnRpbmdJbmZvLm5hbWU9PT0obnVsbD09aS5jb250ZXh0TWVudUhlYWRlcj9udWxsOmkuY29udGV4dE1lbnVIZWFkZXIubmFtZSkpLHYoMSksXygibmdJZiIsKG51bGw9PWkuY29udGV4dE1lbnVIZWFkZXI/bnVsbDppLmNvbnRleHRNZW51SGVhZGVyLnNvcnRhYmxlKSYmKGkuc29ydGluZ0luZm8ub3JkZXIhPT1pLlNvcnRpbmdPcmRlci5BU0NFTkRJTkd8fGkuc29ydGluZ0luZm8ubmFtZSE9PShudWxsPT1pLmNvbnRleHRNZW51SGVhZGVyP251bGw6aS5jb250ZXh0TWVudUhlYWRlci5uYW1lKSkpLHYoMSksXygibmdJZiIsbnVsbD09aS5jb250ZXh0TWVudUhlYWRlcj9udWxsOmkuY29udGV4dE1lbnVIZWFkZXIuZmlsdGVyYWJsZSksdigxKSxfKCJuZ0lmIixpLmNhbkNvbnRleHRNZW51SW5zZXJ0KCkpLHYoMSksXygibmdJZiIsaS5jYW5Db250ZXh0TWVudUluc2VydCgpKSx2KDEpLF8oIm5nSWYiLGkuc2VsZWN0YWJsZUNvbHVtbnMmJmkuc2VsZWN0YWJsZUNvbHVtbnMubGVuZ3RoKSx2KDMpLF8oIm5nSWYiLGkuZ2V0Q3VycmVudENvbHVtbkZpbHRlcigpKSx2KDQpLF8oIm5nSWYiLGkuc2VsZWN0YWJsZUNvbHVtbnMmJmkuc2VsZWN0YWJsZUNvbHVtbnMubGVuZ3RoKSx2KDIpLF8oIm5nSWYiLGkubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W0ZlLEVuLEppLCRpLHRsLFJ0ZSxhQSxMdGVdLHN0eWxlczpbIi5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweDtkaXNwbGF5OnRhYmxlO3dpZHRoOjEwMCV9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp0YWJsZS1yb3c7ei1pbmRleDoxfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpzdGlja3k7dGV4dC1hbGlnbjpsZWZ0O3RvcDowO2ZvbnQtd2VpZ2h0OmJvbGQ7dmVydGljYWwtYWxpZ246Ym90dG9tfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmFkZC1idXR0b24tY2VsbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp0YWJsZS1jZWxsO3dpZHRoOjQwcHh9LmNvbnRleHQtbWVudVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZDtib3gtc2hhZG93OjBweCA0cHggNHB4IHJnYmEoMCwwLDAsLjI1KTtib3JkZXItY29sb3I6I2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRleHQtbWVudVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZXh0LW1lbnVbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1O2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uY29udGV4dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZXh0LW1lbnUtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtqdXN0aWZ5LWNvbnRlbnQ6bGVmdDt3aWR0aDoxMDAlO3RleHQtd3JhcDpub3dyYXB9LmNvbnRleHQtbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAubm8tYWN0aW9ucy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjhweDt0ZXh0LXdyYXA6bm93cmFwfS5jb250ZXh0LW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLnNvcnQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgcGF0aHtmaWxsOnVuc2V0fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gekxlKG4sdCl7aWYoMSZuJiZQKDAsInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDUpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoKTtfKCJoZWFkZXIiLGUpKCJzb3J0aW5nSW5mbyIsaS5zb3J0aW5nSW5mbykoImhwYXJhbXNFbmFibGVkIixpLmhwYXJhbXNFbmFibGVkKX19ZnVuY3Rpb24gVUxlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLHpMZSwxLDMsInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDQpLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCk7digxKSxfKCJuZ0lmIixlLmVuYWJsZWQmJihlLnR5cGUhPT1pLkNvbHVtbkhlYWRlclR5cGUuU01PT1RIRUR8fGkuc21vb3RoaW5nRW5hYmxlZCkpfX1mdW5jdGlvbiBqTGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsOSksUCgxLCJzcGFuIiksZygpKSwyJm4pe2xldCBlPXcoMykuJGltcGxpY2l0O3YoMSksVHQoImJhY2tncm91bmQtY29sb3IiLGUuY29sb3IpfX1mdW5jdGlvbiBHTGUobix0KXtpZigxJm4mJihoKDAsInRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsIiw3KSxTKDEsakxlLDIsMiwiZGl2Iiw4KSxnKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoKS4kaW1wbGljaXQscj13KCk7XygiaGVhZGVyIixlKSgiZGF0dW0iLGlbZS5uYW1lXSksdigxKSxfKCJuZ0lmIixlLnR5cGU9PT1yLkNvbHVtbkhlYWRlclR5cGUuQ09MT1IpfX1mdW5jdGlvbiBXTGUobix0KXtpZigxJm4mJihPdCgwKSxTKDEsR0xlLDIsMywidGItZGF0YS10YWJsZS1jb250ZW50LWNlbGwiLDYpLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO3YoMSksXygibmdJZiIsZS5lbmFibGVkJiYoZS50eXBlIT09aS5Db2x1bW5IZWFkZXJUeXBlLlNNT09USEVEfHxpLnNtb290aGluZ0VuYWJsZWQpKX19ZnVuY3Rpb24gcUxlKG4sdCl7aWYoMSZuJiYoT3QoMCksaCgxLCJ0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtcm93IiksUygyLFdMZSwyLDEsIm5nLWNvbnRhaW5lciIsMiksZygpLGt0KCkpLDImbil7bGV0IGU9dygpO3YoMiksXygibmdGb3JPZiIsZS5nZXRIZWFkZXJzKCkpfX12YXIgSHRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnNvcnREYXRhQnk9bmV3IEYsdGhpcy5lZGl0Q29sdW1uSGVhZGVycz1uZXcgRix0aGlzLnJlbW92ZUNvbHVtbj1uZXcgRix0aGlzLkNvbHVtbkhlYWRlclR5cGU9aHR9Z2V0SGVhZGVycygpe3JldHVyblt7bmFtZToiY29sb3IiLGRpc3BsYXlOYW1lOiIiLHR5cGU6aHQuQ09MT1IsZW5hYmxlZDohMH1dLmNvbmNhdCh0aGlzLmNvbHVtbkhlYWRlcnMpfWdldE1pblBvaW50SW5SYW5nZShlLGkscil7bGV0IG89ZVtpXS55LHM9ZVtpXTtmb3IobGV0IGE9aTthPD1yO2ErKylvPmVbYV0ueSYmKG89ZVthXS55LHM9ZVthXSk7cmV0dXJuIHN9Z2V0TWF4UG9pbnRJblJhbmdlKGUsaSxyKXtsZXQgbz1lW2ldLnkscz1lW2ldO2ZvcihsZXQgYT1pO2E8PXI7YSsrKW88ZVthXS55JiYobz1lW2FdLnkscz1lW2FdKTtyZXR1cm4gc31nZXRNZWFuKGUsaSxyKXtsZXQgbz0wO2ZvcihsZXQgcz1pO3M8PXI7cysrKW8rPWVbc10udmFsdWU7cmV0dXJuIG8vKHItaSsxKX1nZXRUaW1lU2VsZWN0aW9uVGFibGVEYXRhKCl7aWYoIXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbilyZXR1cm5bXTtsZXQgZT10aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxpPXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAscj10aGlzLmRhdGFTZXJpZXMuZmlsdGVyKHM9PkhTKHMsdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubWFwKHM9PntsZXQgYT10aGlzLmNoYXJ0TWV0YWRhdGFNYXBbcy5pZF0sbD1aeChzLnBvaW50cyxlKSxjPXMucG9pbnRzW2xdLGQ9bnVsbCx1PW51bGw7bnVsbCE9aSYmKHU9Wngocy5wb2ludHMsaSksZD1zLnBvaW50c1t1XSk7bGV0IHA9e2lkOnMuaWQsY29sb3I6YS5jb2xvcn07Zm9yKGxldCBmIG9mIHRoaXMuY29sdW1uSGVhZGVycylzd2l0Y2goZi50eXBlKXtjYXNlIGh0LlJVTjpsZXQgbT0iIjthLmFsaWFzJiYobT1gJHthLmFsaWFzLmFsaWFzTnVtYmVyfSAke2EuYWxpYXMuYWxpYXNUZXh0fS9gKSxwW2YubmFtZV09YCR7bX0ke2EuZGlzcGxheU5hbWV9YDtjb250aW51ZTtjYXNlIGh0LlNURVA6cFtmLm5hbWVdPWMuc3RlcDtjb250aW51ZTtjYXNlIGh0LlZBTFVFOnBbZi5uYW1lXT1jLnZhbHVlO2NvbnRpbnVlO2Nhc2UgaHQuUkVMQVRJVkVfVElNRTpwW2YubmFtZV09Yy5yZWxhdGl2ZVRpbWVJbk1zO2NvbnRpbnVlO2Nhc2UgaHQuU01PT1RIRUQ6cFtmLm5hbWVdPWMueTtjb250aW51ZTtjYXNlIGh0LlZBTFVFX0NIQU5HRTppZighZCljb250aW51ZTtwW2YubmFtZV09ZC55LWMueTtjb250aW51ZTtjYXNlIGh0LlNUQVJUX1NURVA6cFtmLm5hbWVdPWMuc3RlcDtjb250aW51ZTtjYXNlIGh0LkVORF9TVEVQOmlmKCFkKWNvbnRpbnVlO3BbZi5uYW1lXT1kLnN0ZXA7Y29udGludWU7Y2FzZSBodC5TVEFSVF9WQUxVRTpwW2YubmFtZV09Yy55O2NvbnRpbnVlO2Nhc2UgaHQuRU5EX1ZBTFVFOmlmKCFkKWNvbnRpbnVlO3BbZi5uYW1lXT1kLnk7Y29udGludWU7Y2FzZSBodC5NSU5fVkFMVUU6aWYoIXUpY29udGludWU7cFtmLm5hbWVdPXRoaXMuZ2V0TWluUG9pbnRJblJhbmdlKHMucG9pbnRzLGwsdSkueTtjb250aW51ZTtjYXNlIGh0Lk1BWF9WQUxVRTppZighdSljb250aW51ZTtwW2YubmFtZV09dGhpcy5nZXRNYXhQb2ludEluUmFuZ2Uocy5wb2ludHMsbCx1KS55O2NvbnRpbnVlO2Nhc2UgaHQuUEVSQ0VOVEFHRV9DSEFOR0U6aWYoIWQpY29udGludWU7cFtmLm5hbWVdPShkLnktYy55KS9jLnk7Y29udGludWU7Y2FzZSBodC5TVEVQX0FUX01BWDppZighdSljb250aW51ZTtwW2YubmFtZV09dGhpcy5nZXRNYXhQb2ludEluUmFuZ2Uocy5wb2ludHMsbCx1KS5zdGVwO2NvbnRpbnVlO2Nhc2UgaHQuU1RFUF9BVF9NSU46aWYoIXUpY29udGludWU7cFtmLm5hbWVdPXRoaXMuZ2V0TWluUG9pbnRJblJhbmdlKHMucG9pbnRzLGwsdSkuc3RlcDtjb250aW51ZTtjYXNlIGh0Lk1FQU46aWYoIXUpY29udGludWU7cFtmLm5hbWVdPXRoaXMuZ2V0TWVhbihzLnBvaW50cyxsLHUpO2NvbnRpbnVlO2Nhc2UgaHQuUkFXX0NIQU5HRTppZighZCljb250aW51ZTtwW2YubmFtZV09ZC52YWx1ZS1jLnZhbHVlO2NvbnRpbnVlO2RlZmF1bHQ6Y29udGludWV9cmV0dXJuIHB9KSxvPXRoaXMuY29sdW1uSGVhZGVycy5maW5kKHM9PnMubmFtZT09PXRoaXMuc29ydGluZ0luZm8ubmFtZSk7cmV0dXJuIHZvaWQgMCE9PW8mJnIuc29ydCgocyxhKT0+e2lmKCFvKXJldHVybiAwO2xldCBsPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShzLG8pLGM9dGhpcy5nZXRTb3J0YWJsZVZhbHVlKGEsbyk7cmV0dXJuIGw8Yz90aGlzLnNvcnRpbmdJbmZvLm9yZGVyPT09aW8uQVNDRU5ESU5HPy0xOjE6bD5jP3RoaXMuc29ydGluZ0luZm8ub3JkZXI9PT1pby5BU0NFTkRJTkc/MTotMTowfSkscn1nZXRTb3J0YWJsZVZhbHVlKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiJvYmplY3QiPT10eXBlb2Ygbnx8TnVtYmVyLmlzTmFOKG4pfHwiTmFOIj09PW58fG51bGw9PW4/LTEvMDpufShpLnR5cGU9PT1odC5SVU4/dGhpcy5jaGFydE1ldGFkYXRhTWFwW2UuaWRdLmRpc3BsYXlOYW1lOmVbaS5uYW1lXSl9b3JkZXJDb2x1bW5zKGUpe3RoaXMuZWRpdENvbHVtbkhlYWRlcnMuZW1pdCh7aGVhZGVyczplLGRhdGFUYWJsZU1vZGU6dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9yby5SQU5HRTpyby5TSU5HTEV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic2NhbGFyLWNhcmQtZGF0YS10YWJsZSJdXSxpbnB1dHM6e2NoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLHN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb246InN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLGNvbHVtbkhlYWRlcnM6ImNvbHVtbkhlYWRlcnMiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIixocGFyYW1zRW5hYmxlZDoiaHBhcmFtc0VuYWJsZWQifSxvdXRwdXRzOntzb3J0RGF0YUJ5OiJzb3J0RGF0YUJ5IixlZGl0Q29sdW1uSGVhZGVyczoiZWRpdENvbHVtbkhlYWRlcnMiLHJlbW92ZUNvbHVtbjoicmVtb3ZlQ29sdW1uIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiaGVhZGVycyIsInNvcnRpbmdJbmZvIiwiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJzb3J0RGF0YUJ5Iiwib3JkZXJDb2x1bW5zIiwicmVtb3ZlQ29sdW1uIl0sWyJoZWFkZXIiLCIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjb250ZW50IiwiIl0sWyJkaXNhYmxlQ29udGV4dE1lbnUiLCJ0cnVlIiwzLCJoZWFkZXIiLCJzb3J0aW5nSW5mbyIsImhwYXJhbXNFbmFibGVkIiw0LCJuZ0lmIl0sWyJkaXNhYmxlQ29udGV4dE1lbnUiLCJ0cnVlIiwzLCJoZWFkZXIiLCJzb3J0aW5nSW5mbyIsImhwYXJhbXNFbmFibGVkIl0sWzMsImhlYWRlciIsImRhdHVtIiw0LCJuZ0lmIl0sWzMsImhlYWRlciIsImRhdHVtIl0sWyJjbGFzcyIsInJvdy1jaXJjbGUiLDQsIm5nSWYiXSxbMSwicm93LWNpcmNsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwidGItZGF0YS10YWJsZSIsMCksSSgic29ydERhdGFCeSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc29ydERhdGFCeS5lbWl0KG8pfSkoIm9yZGVyQ29sdW1ucyIsZnVuY3Rpb24obyl7cmV0dXJuIGkub3JkZXJDb2x1bW5zKG8pfSkoInJlbW92ZUNvbHVtbiIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVtb3ZlQ29sdW1uLmVtaXQobyl9KSxPdCgxLDEpLFMoMixVTGUsMiwxLCJuZy1jb250YWluZXIiLDIpLGt0KCksT3QoMywzKSxTKDQscUxlLDMsMSwibmctY29udGFpbmVyIiwyKSxrdCgpLGcoKSksMiZlJiYoXygiaGVhZGVycyIsaS5jb2x1bW5IZWFkZXJzKSgic29ydGluZ0luZm8iLGkuc29ydGluZ0luZm8pKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCksdigyKSxfKCJuZ0Zvck9mIixpLmdldEhlYWRlcnMoKSksdigyKSxfKCJuZ0Zvck9mIixpLmdldFRpbWVTZWxlY3Rpb25UYWJsZURhdGEoKSkpfSxkZXBlbmRlbmNpZXM6W25uLEZlLGRfLHNBLHVBLHVfXSxzdHlsZXM6WyJ0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6NHB4fS5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTt2YXIgWExlPVsic3RlcFNwYW4iXTtmdW5jdGlvbiBRTGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDQpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLFAoMSwibWF0LWljb24iLDUpLGcoKX19ZnVuY3Rpb24gWkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiw0KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5mb2JSZW1vdmVkLmVtaXQoKSl9KSxQKDEsIm1hdC1pY29uIiw2KSxnKCl9fXZhciBLTGU9ZnVuY3Rpb24obix0KXtyZXR1cm57Zm9iOiEwLHVucmVtb3ZhYmxlOm4scHJvc3BlY3RpdmU6dH19LHp0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hbGxvd1JlbW92YWw9ITAsdGhpcy5pc1Byb3NwZWN0aXZlPSExLHRoaXMuc3RlcENoYW5nZWQ9bmV3IEYsdGhpcy5mb2JSZW1vdmVkPW5ldyBGfW5nT25DaGFuZ2VzKGUpe2Uuc3RlcCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuc3RlcFNwYW4ubmF0aXZlRWxlbWVudCYmdGhpcy5zdGVwU3Bhbi5uYXRpdmVFbGVtZW50LmJsdXIoKX12YWxpZGF0ZVN0ZXAoZSl7bGV0IGk9U3RyaW5nLmZyb21DaGFyQ29kZShlLndoaWNoKTsoIiAiPT09ZS5rZXl8fGlzTmFOKE51bWJlcihpKSkpJiZlLnByZXZlbnREZWZhdWx0KCl9c3RlcFR5cGVkKGUpe2UucHJldmVudERlZmF1bHQoKTtsZXQgaT1lLnRhcmdldC5pbm5lclRleHQ7dGhpcy5zdGVwQ2hhbmdlZC5lbWl0KCIiIT09aT9OdW1iZXIoaSk6bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtZm9iIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UoWExlLDcsTWUpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuc3RlcFNwYW49ci5maXJzdCl9fSxpbnB1dHM6e3N0ZXA6InN0ZXAiLGFsbG93UmVtb3ZhbDoiYWxsb3dSZW1vdmFsIixpc1Byb3NwZWN0aXZlOiJpc1Byb3NwZWN0aXZlIn0sb3V0cHV0czp7c3RlcENoYW5nZWQ6InN0ZXBDaGFuZ2VkIixmb2JSZW1vdmVkOiJmb2JSZW1vdmVkIn0sZmVhdHVyZXM6W0d0XSxkZWNsczo1LHZhcnM6Nyxjb25zdHM6W1szLCJuZ0NsYXNzIl0sWyJjb250ZW50ZWRpdGFibGUiLCIiLCJyb2xlIiwidGV4dGJveCIsImFyaWEtbGFiZWwiLCJFZGl0IHN0ZXAiLDMsImlubmVySFRNTCIsImJsdXIiLCJrZXlwcmVzcyIsImtleWRvd24uZW50ZXIiLCJrZXlkb3duLnNoaWZ0LmVudGVyIl0sWyJzdGVwU3BhbiIsIiJdLFsiYXJpYS1sYWJlbCIsIkRlc2VsZWN0IGZvYiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImFyaWEtbGFiZWwiLCJEZXNlbGVjdCBmb2IiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdLFsic3ZnSWNvbiIsImtlZXBfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJzcGFuIiwxLDIpLEkoImJsdXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnN0ZXBUeXBlZChvKX0pKCJrZXlwcmVzcyIsZnVuY3Rpb24obyl7cmV0dXJuIGkudmFsaWRhdGVTdGVwKG8pfSkoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnN0ZXBUeXBlZChvKX0pKCJrZXlkb3duLnNoaWZ0LmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gby5wcmV2ZW50RGVmYXVsdCgpfSksZygpLFMoMyxRTGUsMiwwLCJidXR0b24iLDMpLFMoNCxaTGUsMiwwLCJidXR0b24iLDMpLGcoKSksMiZlJiYoXygibmdDbGFzcyIscXIoNCxLTGUsIWkuYWxsb3dSZW1vdmFsLGkuaXNQcm9zcGVjdGl2ZSkpLHYoMSksXygiaW5uZXJIVE1MIixpLnN0ZXAsZk8pLHYoMiksXygibmdJZiIsaS5hbGxvd1JlbW92YWwpLHYoMSksXygibmdJZiIsaS5pc1Byb3NwZWN0aXZlKSl9LGRlcGVuZGVuY2llczpbeW4sRmUsRW5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmZvYltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Ym9yZGVyLXJhZGl1czoyNXB4O3BhZGRpbmc6MnB4IDJweCAycHggNHB4O2ZvbnQtc2l6ZToxMXB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOm1pbi1jb250ZW50fS5mb2JbX25nY29udGVudC0lQ09NUCVdID4gLnByb3NwZWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLXRvcDoxcHh9LmZvYltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOmdyYWJ9LmZvYltfbmdjb250ZW50LSVDT01QJV06aG92ZXIucHJvc3BlY3RpdmV7Y3Vyc29yOnBvaW50ZXJ9LmZvYltfbmdjb250ZW50LSVDT01QJV06YWN0aXZle2N1cnNvcjpncmFiYmluZ30uZm9iLnVucmVtb3ZhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCA0cHh9LmZvYi5wcm9zcGVjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MXB4IGRhc2hlZCAjOWU5ZTllO2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjE3cHh9c3Bhbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtkaXNwbGF5OmlubGluZS1ibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1idXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjJweDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7Zm9udC1zaXplOjExcHg7d2lkdGg6MTFweDtoZWlnaHQ6MTFweDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Y29sb3I6aW5oZXJpdH1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoxMTAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzllOWU5ZTtjb2xvcjojZWVlO2N1cnNvcjpwb2ludGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNlMGUwZTB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSwkTGU9WyJzdGFydEZvYldyYXBwZXIiXSxlM2U9WyJlbmRGb2JXcmFwcGVyIl0sdDNlPVsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIl07ZnVuY3Rpb24gbjNlKG4sdCl7MSZuJiZQKDAsImRpdiIsNil9ZnVuY3Rpb24gaTNlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDIsMyksUygyLG4zZSwxLDAsImRpdiIsNCksUCgzLCJjYXJkLWZvYiIsNSksZygpKSwyJm4pe2xldCBlPXcoKTtUdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKSksdigyKSxfKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHYoMSksXygibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoImFsbG93UmVtb3ZhbCIsITEpKCJpc1Byb3NwZWN0aXZlIiwhMCkoInN0ZXAiLGUucHJvc3BlY3RpdmVTdGVwKX19ZnVuY3Rpb24gcjNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwxMCksSSgibW91c2Vkb3duIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMik7cmV0dXJuIFEoby5zdGFydERyYWcoby5Gb2IuU1RBUlQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5FWFRFTkRFRF9MSU5FLHIpKX0pLGcoKX19ZnVuY3Rpb24gbzNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyLDcpLFMoMixyM2UsMSwwLCJkaXYiLDgpLGgoMywiY2FyZC1mb2IiLDkpLEkoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5zdGFydERyYWcoby5Gb2IuU1RBUlQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5GT0IscikpfSkoInN0ZXBDaGFuZ2VkIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKTtyZXR1cm4gUShvLnN0ZXBUeXBlZChvLkZvYi5TVEFSVCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKTtyZXR1cm4gUShyLm9uRm9iUmVtb3ZlZChyLkZvYi5TVEFSVCkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7VHQoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeEZvclN0YXJ0Rm9iKCkpLHYoMiksXygibmdJZiIsZS5zaG93RXh0ZW5kZWRMaW5lKSx2KDEpLF8oImFsbG93UmVtb3ZhbCIsISFlLmFsbG93Rm9iUmVtb3ZhbHx8ZS50aW1lU2VsZWN0aW9uLmVuZCkoIm5nQ2xhc3MiLGUuaXNWZXJ0aWNhbCgpPyJ2ZXJ0aWNhbC1mb2IiOiJob3Jpem9udGFsLWZvYiIpKCJzdGVwIixlLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCl9fWZ1bmN0aW9uIHMzZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMTApLEkoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KDIpO3JldHVybiBRKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkVYVEVOREVEX0xJTkUscikpfSksZygpfX1mdW5jdGlvbiBhM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDIsMTEpLFMoMixzM2UsMSwwLCJkaXYiLDgpLGgoMywiY2FyZC1mb2IiLDEyKSxJKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpO3JldHVybiBRKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkZPQixyKSl9KSgic3RlcENoYW5nZWQiLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpO3JldHVybiBRKG8uc3RlcFR5cGVkKG8uRm9iLkVORCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKTtyZXR1cm4gUShyLm9uRm9iUmVtb3ZlZChyLkZvYi5FTkQpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO1R0KCJ0cmFuc2Zvcm0iLGUuZ2V0Q3NzVHJhbnNsYXRlUHhGb3JFbmRGb2IoKSksdigyKSxfKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHYoMSksXygibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoInN0ZXAiLGUudGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9fXZhciBPcj0oKCk9PihmdW5jdGlvbihuKXtuW24uTk9ORT0wXT0iTk9ORSIsbltuLlNUQVJUPTFdPSJTVEFSVCIsbltuLkVORD0yXT0iRU5EIn0oT3J8fChPcj17fSkpLE9yKSkoKSxsM2U9e3N0YXJ0Ok9yLlNUQVJULGVuZDpPci5FTkR9LHBBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5yb290PWUsdGhpcy5zaG93RXh0ZW5kZWRMaW5lPSExLHRoaXMucHJvc3BlY3RpdmVTdGVwPW51bGwsdGhpcy5wcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb249bnVsbCx0aGlzLmFsbG93Rm9iUmVtb3ZhbD0hMCx0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEYsdGhpcy5vblRpbWVTZWxlY3Rpb25Ub2dnbGVkPW5ldyBGLHRoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkPW5ldyBGLHRoaXMuaGFzRm9iTW92ZWQ9ITEsdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9T3IuTk9ORSx0aGlzLmFmZm9yZGFuY2U9cXMuTk9ORSx0aGlzLm1vdXNlTGlzdGVuZXI9dGhpcy5tb3VzZU1vdmUuYmluZCh0aGlzKSx0aGlzLnN0b3BMaXN0ZW5lcj10aGlzLnN0b3BEcmFnLmJpbmQodGhpcyksdGhpcy5Gb2I9T3IsdGhpcy5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZT1xc31nZXRDc3NUcmFuc2xhdGVQeEZvclN0YXJ0Rm9iKCl7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PWZzLlZFUlRJQ0FMP2B0cmFuc2xhdGUoMHB4LCAke3RoaXMuc3RhcnRTdGVwQXhpc1Bvc2l0aW9ufXB4KWA6YHRyYW5zbGF0ZSgke3RoaXMuc3RhcnRTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1nZXRDc3NUcmFuc2xhdGVQeEZvckVuZEZvYigpe3JldHVybiBudWxsPT09dGhpcy5lbmRTdGVwQXhpc1Bvc2l0aW9uPyIiOnRoaXMuYXhpc0RpcmVjdGlvbj09PWZzLlZFUlRJQ0FMP2B0cmFuc2xhdGUoMHB4LCAke3RoaXMuZW5kU3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLmVuZFN0ZXBBeGlzUG9zaXRpb259cHgsIDBweClgfWdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKXtyZXR1cm4gbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwPyIiOnRoaXMuYXhpc0RpcmVjdGlvbj09PWZzLlZFUlRJQ0FMP2B0cmFuc2xhdGUoMHB4LCAke3RoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9ufXB4KWA6YHRyYW5zbGF0ZSgke3RoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1zdG9wRXZlbnRQcm9wYWdhdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKX1zdGFydERyYWcoZSxpLHIpe2khPT1xcy5GT0ImJnRoaXMuc3RvcEV2ZW50UHJvcGFnYXRpb24ociksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLm1vdXNlTGlzdGVuZXIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuc3RvcExpc3RlbmVyKSx0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj1lLHRoaXMuYWZmb3JkYW5jZT1pfXN0b3BEcmFnKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLm1vdXNlTGlzdGVuZXIpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuc3RvcExpc3RlbmVyKSx0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj1Pci5OT05FLHRoaXMuaGFzRm9iTW92ZWQmJnRoaXMudGltZVNlbGVjdGlvbiYmdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246dGhpcy50aW1lU2VsZWN0aW9uLGFmZm9yZGFuY2U6dGhpcy5hZmZvcmRhbmNlfSksdGhpcy5hZmZvcmRhbmNlPXFzLk5PTkUsdGhpcy5oYXNGb2JNb3ZlZD0hMX1pc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PWZzLlZFUlRJQ0FMfXNob3VsZFN3YXBGb2JzKGUpe3JldHVybiEoIXRoaXMudGltZVNlbGVjdGlvbnx8IXRoaXMudGltZVNlbGVjdGlvbi5lbmQpJiYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Pci5FTkQ/ZTx0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcDp0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj09PU9yLlNUQVJUJiZlPnRoaXMudGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9Z2V0TmV3VGltZVNlbGVjdGlvbihlLGkpe2xldCByPXsuLi5pfTtpZighdGhpcy50aW1lU2VsZWN0aW9uKXJldHVybiByO2lmKCF0aGlzLnRpbWVTZWxlY3Rpb24uZW5kKXJldHVybiByLnN0YXJ0PXtzdGVwOmV9LHI7aWYodGhpcy5zaG91bGRTd2FwRm9icyhlKSl7bGV0W28sc109dGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Pci5FTkQ/WyJlbmQiLCJzdGFydCJdOlsic3RhcnQiLCJlbmQiXTtyZXR1cm4gdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9bDNlW3NdLHJbb109dGhpcy50aW1lU2VsZWN0aW9uW3NdLHJbc109e3N0ZXA6ZX0scn1yZXR1cm4gdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Pci5FTkQ/KHIuZW5kPXtzdGVwOmV9LHIpOihyLnN0YXJ0PXtzdGVwOmV9LHIpfWdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKXtsZXQgaT1udWxsLHI9dGhpcy5nZXRNb3VzZVBvc2l0aW9uRnJvbUV2ZW50KGUpLG89dGhpcy5heGlzRGlyZWN0aW9uPT09ZnMuVkVSVElDQUw/ZS5tb3ZlbWVudFk6ZS5tb3ZlbWVudFg7cmV0dXJuIHRoaXMuaXNNb3ZpbmdIaWdoZXIocixvKT9pPXRoaXMuY2FyZEZvYkhlbHBlci5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbihyKTp0aGlzLmlzTW92aW5nTG93ZXIocixvKSYmKGk9dGhpcy5jYXJkRm9iSGVscGVyLmdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb24ocikpLG51bGw9PT1pP251bGw6aX1tb3VzZU1vdmUoZSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Pci5OT05FKXJldHVybjtsZXQgaT10aGlzLmdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKTtpZihudWxsPT09aXx8IXRoaXMudGltZVNlbGVjdGlvbilyZXR1cm47bGV0IHI9dGhpcy5nZXROZXdUaW1lU2VsZWN0aW9uKGksdGhpcy50aW1lU2VsZWN0aW9uKTt0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7dGltZVNlbGVjdGlvbjpyfSksdGhpcy5oYXNGb2JNb3ZlZD0hMH1tb3VzZU92ZXJQcm9zcGVjdGl2ZUZvYkFyZWEoZSl7aWYobnVsbCE9dGhpcy50aW1lU2VsZWN0aW9uPy5lbmQpcmV0dXJuO2xldCBpPXRoaXMuZ2V0TmV3U3RlcEZyb21Nb3VzZUV2ZW50KGUpO251bGwhPT1pJiZ0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KGkpfWlzTW92aW5nTG93ZXIoZSxpKXtpZih0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj09PU9yLk5PTkUmJm51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcClyZXR1cm4hMDtsZXQgcj10aGlzLmdldEN1cnJlbnRGb2JTdGVwKCk7cmV0dXJuIHZvaWQgMCE9PXImJmU8dGhpcy5nZXREcmFnZ2luZ0ZvYkNlbnRlcigpJiZpPDAmJnI+dGhpcy5sb3dlc3RTdGVwfWlzTW92aW5nSGlnaGVyKGUsaSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Pci5OT05FJiZudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXApcmV0dXJuITA7bGV0IHI9dGhpcy5nZXRDdXJyZW50Rm9iU3RlcCgpO3JldHVybiB2b2lkIDAhPT1yJiZlPnRoaXMuZ2V0RHJhZ2dpbmdGb2JDZW50ZXIoKSYmaT4wJiZyPHRoaXMuaGlnaGVzdFN0ZXB9Z2V0RHJhZ2dpbmdGb2JDZW50ZXIoKXtsZXQgZT10aGlzLmdldEN1cnJlbnRGb2IoKT8ubmF0aXZlRWxlbWVudDtpZighZSlyZXR1cm4gMDtsZXQgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxyPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09ZnMuVkVSVElDQUw/aS10aGlzLnJvb3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A6ci10aGlzLnJvb3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fWdldEN1cnJlbnRGb2IoKXtzd2l0Y2godGhpcy5jdXJyZW50RHJhZ2dpbmdGb2Ipe2Nhc2UgT3IuU1RBUlQ6cmV0dXJuIHRoaXMuc3RhcnRGb2JXcmFwcGVyO2Nhc2UgT3IuRU5EOnJldHVybiB0aGlzLmVuZEZvYldyYXBwZXI7Y2FzZSBPci5OT05FOnJldHVybiB0aGlzLnByb3NwZWN0aXZlRm9iV3JhcHBlcn19Z2V0Q3VycmVudEZvYlN0ZXAoKXtzd2l0Y2godGhpcy5jdXJyZW50RHJhZ2dpbmdGb2Ipe2Nhc2UgT3IuU1RBUlQ6cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj8uc3RhcnQuc3RlcDtjYXNlIE9yLkVORDpyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQ/LnN0ZXA7Y2FzZSBPci5OT05FOnJldHVybiB0aGlzLnByb3NwZWN0aXZlU3RlcD8/dm9pZCAwfX1nZXRNb3VzZVBvc2l0aW9uRnJvbUV2ZW50KGUpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1mcy5WRVJUSUNBTD9lLmNsaWVudFktdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOmUuY2xpZW50WC10aGlzLnJvb3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fXN0ZXBUeXBlZChlLGkpe2lmKG51bGw9PT1pKXJldHVybiB2b2lkKG51bGwhPT10aGlzLnRpbWVTZWxlY3Rpb24uZW5kJiZ0aGlzLm9uRm9iUmVtb3ZlZChlKSk7bGV0IHI9ey4uLnRoaXMudGltZVNlbGVjdGlvbn07ZT09PU9yLlNUQVJUP3Iuc3RhcnQ9e3N0ZXA6aX06ZT09PU9yLkVORCYmKHIuZW5kPXtzdGVwOml9KSxudWxsIT09ci5lbmQmJnIuc3RhcnQuc3RlcD5yLmVuZC5zdGVwJiYocj17c3RhcnQ6ci5lbmQsZW5kOnIuc3RhcnR9KSx0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7dGltZVNlbGVjdGlvbjpyLGFmZm9yZGFuY2U6cXMuRk9CX1RFWFR9KX1wcm9zcGVjdGl2ZUZvYkNsaWNrZWQoZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTtsZXQgaT10aGlzLmdldFByb3NwZWN0aXZlVGltZVNlbGVjdGlvbigpOyFpfHwodGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6cXMuRk9CX0FEREVELHRpbWVTZWxlY3Rpb246aX0pLHRoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkLmVtaXQobnVsbCkpfWdldFByb3NwZWN0aXZlVGltZVNlbGVjdGlvbigpe2lmKHRoaXMucHJvc3BlY3RpdmVTdGVwKXJldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/e3N0YXJ0OntzdGVwOk1hdGgubWluKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwLHRoaXMucHJvc3BlY3RpdmVTdGVwKX0sZW5kOntzdGVwOk1hdGgubWF4KHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwLHRoaXMucHJvc3BlY3RpdmVTdGVwKX19OntzdGFydDp7c3RlcDp0aGlzLnByb3NwZWN0aXZlU3RlcH0sZW5kOm51bGx9fW9uRm9iUmVtb3ZlZChlKXtlIT09T3IuRU5EP251bGw9PT10aGlzLnRpbWVTZWxlY3Rpb24uZW5kP3RoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZC5lbWl0KCk6dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6cXMuRk9CX1JFTU9WRUQsdGltZVNlbGVjdGlvbjp7c3RhcnQ6dGhpcy50aW1lU2VsZWN0aW9uLmVuZCxlbmQ6bnVsbH19KTp0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7YWZmb3JkYW5jZTpxcy5GT0JfUkVNT1ZFRCx0aW1lU2VsZWN0aW9uOnsuLi50aGlzLnRpbWVTZWxlY3Rpb24sZW5kOm51bGx9fSl9b25Qcm9zcGVjdGl2ZUFyZWFNb3VzZUxlYXZlKCl7dGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQuZW1pdChudWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtZm9iLWNvbnRyb2xsZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UoJExlLDUpLEdlKGUzZSw1KSxHZSh0M2UsNSkpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuc3RhcnRGb2JXcmFwcGVyPXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLmVuZEZvYldyYXBwZXI9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkucHJvc3BlY3RpdmVGb2JXcmFwcGVyPXIuZmlyc3QpfX0saW5wdXRzOntheGlzRGlyZWN0aW9uOiJheGlzRGlyZWN0aW9uIix0aW1lU2VsZWN0aW9uOiJ0aW1lU2VsZWN0aW9uIixjYXJkRm9iSGVscGVyOiJjYXJkRm9iSGVscGVyIixzdGFydFN0ZXBBeGlzUG9zaXRpb246InN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsZW5kU3RlcEF4aXNQb3NpdGlvbjoiZW5kU3RlcEF4aXNQb3NpdGlvbiIsaGlnaGVzdFN0ZXA6ImhpZ2hlc3RTdGVwIixsb3dlc3RTdGVwOiJsb3dlc3RTdGVwIixzaG93RXh0ZW5kZWRMaW5lOiJzaG93RXh0ZW5kZWRMaW5lIixwcm9zcGVjdGl2ZVN0ZXA6InByb3NwZWN0aXZlU3RlcCIscHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uOiJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLGFsbG93Rm9iUmVtb3ZhbDoiYWxsb3dGb2JSZW1vdmFsIn0sb3V0cHV0czp7b25UaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25UaW1lU2VsZWN0aW9uVG9nZ2xlZDoib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCIsb25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkOiJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQifSxkZWNsczo2LHZhcnM6NCxjb25zdHM6W1siY2xhc3MiLCJ0aW1lLWZvYi13cmFwcGVyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwicHJvc3BlY3RpdmUtZm9iLWFyZWEiLDMsIm5nQ2xhc3MiLCJtb3VzZW1vdmUiLCJjbGljayIsIm1vdXNlbGVhdmUiXSxbMSwidGltZS1mb2Itd3JhcHBlciJdLFsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIiwiIl0sWyJjbGFzcyIsImV4dGVuZGVkLWxpbmUiLDQsIm5nSWYiXSxbMywibmdDbGFzcyIsImFsbG93UmVtb3ZhbCIsImlzUHJvc3BlY3RpdmUiLCJzdGVwIl0sWzEsImV4dGVuZGVkLWxpbmUiXSxbInN0YXJ0Rm9iV3JhcHBlciIsIiJdLFsiY2xhc3MiLCJleHRlbmRlZC1saW5lIiwzLCJtb3VzZWRvd24iLDQsIm5nSWYiXSxbMSwic3RhcnRGb2IiLDMsImFsbG93UmVtb3ZhbCIsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl0sWzEsImV4dGVuZGVkLWxpbmUiLDMsIm1vdXNlZG93biJdLFsiZW5kRm9iV3JhcHBlciIsIiJdLFsxLCJlbmRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiKSxPdCgxKSxTKDIsaTNlLDQsNywiZGl2IiwwKSxoKDMsImRpdiIsMSksSSgibW91c2Vtb3ZlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5tb3VzZU92ZXJQcm9zcGVjdGl2ZUZvYkFyZWEobyl9KSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLnByb3NwZWN0aXZlRm9iQ2xpY2tlZChvKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBpLm9uUHJvc3BlY3RpdmVBcmVhTW91c2VMZWF2ZSgpfSksZygpLGt0KCksUyg0LG8zZSw0LDYsImRpdiIsMCksUyg1LGEzZSw0LDUsImRpdiIsMCksZygpKSwyJmUmJih2KDIpLF8oIm5nSWYiLG51bGwhPT1pLnByb3NwZWN0aXZlU3RlcCksdigxKSxfKCJuZ0NsYXNzIixpLmlzVmVydGljYWwoKT8idmVydGljYWwtcHJvc3BlY3RpdmUtYXJlYSI6Imhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYSIpLHYoMSksXygibmdJZiIsaS50aW1lU2VsZWN0aW9uKSx2KDEpLF8oIm5nSWYiLGkudGltZVNlbGVjdGlvbiYmaS50aW1lU2VsZWN0aW9uLmVuZCkpfSxkZXBlbmRlbmNpZXM6W3luLEZlLHp0ZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphbGx9LnRpbWUtZm9iLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjB9LnZlcnRpY2FsLWZvYltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lmhvcml6b250YWwtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0uZXh0ZW5kZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItd2lkdGg6MCAxcHg7aGVpZ2h0OmNhbGMoMTAwJSAtIDMwcHgpfS5leHRlbmRlZC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMThweCwgI2NjYyAxOXB4LCAjY2NjIDIxcHgsIHRyYW5zcGFyZW50IDIycHgpO2JvcmRlcjowO2N1cnNvcjpldy1yZXNpemU7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowIDIwcHh9Lmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjMwcHg7d2lkdGg6Y2FsYygxMDAlIC0gNzRweCl9LnByb3NwZWN0aXZlLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxNVj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNhYmxlSW50ZXJhY3Rpb249ITEsdGhpcy5hbGxvd0ZvYlJlbW92YWw9ITAsdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBGLHRoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZD1uZXcgRix0aGlzLmF4aXNEaXJlY3Rpb249ZnMuSE9SSVpPTlRBTCx0aGlzLmNhcmRGb2JIZWxwZXI9e2dldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uOnRoaXMuZ2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb24uYmluZCh0aGlzKSxnZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uOnRoaXMuZ2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpfSx0aGlzLnByb3NwZWN0aXZlU3RlcD1udWxsfWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uP3RoaXMuc2NhbGUuZm9yd2FyZCh0aGlzLm1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kLFswLHRoaXMuYXhpc1NpemVdLHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKToiIn1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/LmVuZD90aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnRpbWVTZWxlY3Rpb24/LmVuZC5zdGVwPz90aGlzLm1pbk1heFN0ZXAubWF4U3RlcCk6bnVsbH1nZXRBeGlzUG9zaXRpb25Gcm9tUHJvc3BlY3RpdmVTdGVwKCl7cmV0dXJuIG51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcD9udWxsOnRoaXMuc2NhbGUuZm9yd2FyZCh0aGlzLm1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kLFswLHRoaXMuYXhpc1NpemVdLHRoaXMucHJvc3BlY3RpdmVTdGVwKX1vblByb3NwZWN0aXZlU3RlcENoYW5nZWQoZSl7dGhpcy5wcm9zcGVjdGl2ZVN0ZXA9ZX1nZXRIaWdoZXN0U3RlcCgpe3JldHVybiB0aGlzLm1pbk1heFN0ZXAubWF4U3RlcH1nZXRMb3dlc3RTdGVwKCl7cmV0dXJuIHRoaXMubWluTWF4U3RlcC5taW5TdGVwfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe3JldHVybiB0aGlzLmdldFN0ZXBBdE1vdXNlUG9zdGlvbihlKX1nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe3JldHVybiB0aGlzLmdldFN0ZXBBdE1vdXNlUG9zdGlvbihlKX1nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl7bGV0IGk9TWF0aC5yb3VuZCh0aGlzLnNjYWxlLnJldmVyc2UodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSxlKSk7cmV0dXJuIGk+dGhpcy5nZXRIaWdoZXN0U3RlcCgpP3RoaXMuZ2V0SGlnaGVzdFN0ZXAoKTppPHRoaXMuZ2V0TG93ZXN0U3RlcCgpP3RoaXMuZ2V0TG93ZXN0U3RlcCgpOml9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIl1dLGlucHV0czp7dGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsc2NhbGU6InNjYWxlIixtaW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZDoibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLG1pbk1heFN0ZXA6Im1pbk1heFN0ZXAiLGF4aXNTaXplOiJheGlzU2l6ZSIsZGlzYWJsZUludGVyYWN0aW9uOiJkaXNhYmxlSW50ZXJhY3Rpb24iLGFsbG93Rm9iUmVtb3ZhbDoiYWxsb3dGb2JSZW1vdmFsIn0sb3V0cHV0czp7b25UaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25UaW1lU2VsZWN0aW9uVG9nZ2xlZDoib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJ9LGRlY2xzOjEsdmFyczoxMyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJwcm9zcGVjdGl2ZVN0ZXAiLCJjYXJkRm9iSGVscGVyIiwic2hvd0V4dGVuZGVkTGluZSIsImFsbG93Rm9iUmVtb3ZhbCIsIm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJjYXJkLWZvYi1jb250cm9sbGVyIiwwKSxJKCJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZChvKX0pKCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQobyl9KSgib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uVG9nZ2xlZC5lbWl0KG8pfSksZygpKSwyJmUmJihUdCgicG9pbnRlci1ldmVudHMiLGkuZGlzYWJsZUludGVyYWN0aW9uPyJub25lIjoiYWxsIiksXygiYXhpc0RpcmVjdGlvbiIsaS5heGlzRGlyZWN0aW9uKSgidGltZVNlbGVjdGlvbiIsaS50aW1lU2VsZWN0aW9uKSgic3RhcnRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKSkoImVuZFN0ZXBBeGlzUG9zaXRpb24iLGkuZ2V0QXhpc1Bvc2l0aW9uRnJvbUVuZFN0ZXAoKSkoInByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tUHJvc3BlY3RpdmVTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJwcm9zcGVjdGl2ZVN0ZXAiLGkucHJvc3BlY3RpdmVTdGVwKSgiY2FyZEZvYkhlbHBlciIsaS5jYXJkRm9iSGVscGVyKSgic2hvd0V4dGVuZGVkTGluZSIsITApKCJhbGxvd0ZvYlJlbW92YWwiLGkuYWxsb3dGb2JSZW1vdmFsKSl9LGRlcGVuZGVuY2llczpbcEFdLHN0eWxlczpbInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIC50aW1lLWZvYi13cmFwcGVye2hlaWdodDoxMDAlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYzNlPVsiZGF0YVRhYmxlQ29udGFpbmVyIl07ZnVuY3Rpb24gZDNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwyNyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub3BlblRhYmxlRWRpdE1lbnUoKSl9KSxQKDEsIm1hdC1pY29uIiwyOCksaCgyLCJzcGFuIiksVCgzLCJFZGl0IFRhYmxlIENvbHVtbnMiKSxnKCkoKX19ZnVuY3Rpb24gdTNlKG4sdCl7MSZuJiZQKDAsIm1hdC1zcGlubmVyIiwyOSl9ZnVuY3Rpb24gcDNlKG4sdCl7MSZuJiYoaCgwLCJ0aCIpLFQoMSwiU21vb3RoZWQiKSxnKCkpfWZ1bmN0aW9uIGYzZShuLHQpe2lmKDEmbiYmKE90KDApLFAoMSwidGItZXhwZXJpbWVudC1hbGlhcyIsMzUpLFQoMiwiLyIpLGt0KCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDt2KDEpLF8oImFsaWFzIixlLm1ldGFkYXRhLmFsaWFzKX19ZnVuY3Rpb24gbTNlKG4sdCl7aWYoMSZuJiYoaCgwLCJ0ZCIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KDIpO3YoMSksSGUoIiAiLGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQueSksIiAiKX19ZnVuY3Rpb24gaDNlKG4sdCl7aWYoMSZuJiYoT3QoMCksaCgxLCJ0ciIsMzMpKDIsInRkIiwzNCksUCgzLCJzcGFuIiksZygpLGgoNCwidGQiLDIpLFMoNSxmM2UsMywxLCJuZy1jb250YWluZXIiLDI0KSxUKDYpLGcoKSxTKDcsbTNlLDIsMSwidGQiLDI0KSxoKDgsInRkIiksVCg5KSxnKCksaCgxMCwidGQiKSxUKDExKSxnKCksaCgxMiwidGQiKSxUKDEzKSxqKDE0LCJkYXRlIiksZygpLGgoMTUsInRkIiksVCgxNiksZygpKCksa3QoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMik7digxKSxudCgiY2xvc2VzdCIsZS5tZXRhZGF0YS5jbG9zZXN0KSx2KDIpLFR0KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx2KDIpLF8oIm5nSWYiLGUubWV0YWRhdGEuYWxpYXMpLHYoMSksSGUoIiIsZS5tZXRhZGF0YS5kaXNwbGF5TmFtZSwiICIpLHYoMSksXygibmdJZiIsaS5zbW9vdGhpbmdFbmFibGVkKSx2KDIpLGJ0KGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQudmFsdWUpKSx2KDIpLGJ0KGkuc3RlcEZvcm1hdHRlci5mb3JtYXRTaG9ydChlLmRhdGFQb2ludC5zdGVwKSksdigyKSxidChxcCgxNCwxMSxlLmRhdGFQb2ludC53YWxsVGltZSwic2hvcnQiKSksdigzKSxIZSgiICIsaS5yZWxhdGl2ZVhGb3JtYXR0ZXIuZm9ybWF0UmVhZGFibGUoZS5kYXRhUG9pbnQucmVsYXRpdmVUaW1lSW5NcyksIiAiKX19ZnVuY3Rpb24gZzNlKG4sdCl7aWYoMSZuJiYoaCgwLCJ0YWJsZSIsMzApKDEsInRoZWFkIikoMiwidHIiKSxQKDMsInRoIiwzMSksaCg0LCJ0aCIpLFQoNSwiUnVuIiksZygpLFMoNixwM2UsMiwwLCJ0aCIsMjQpLGgoNywidGgiKSxUKDgsIlZhbHVlIiksZygpLGgoOSwidGgiKSxUKDEwLCJTdGVwIiksZygpLGgoMTEsInRoIiksVCgxMiwiVGltZSIpLGcoKSxoKDEzLCJ0aCIpLFQoMTQsIlJlbGF0aXZlIiksZygpKCkoKSxoKDE1LCJ0Ym9keSIpLFMoMTYsaDNlLDE3LDE0LCJuZy1jb250YWluZXIiLDMyKSxnKCkoKSksMiZuKXtsZXQgZT10LmRhdGEsaT10LmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQscj10LmN1cnNvckxvY2F0aW9uLG89dygpO3YoNiksXygibmdJZiIsby5zbW9vdGhpbmdFbmFibGVkKSx2KDEwKSxfKCJuZ0Zvck9mIixvLmdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEoZSxpLHIpKSgibmdGb3JUcmFja0J5IixvLnRyYWNrQnlUb29sdGlwRGF0dW0pfX1mdW5jdGlvbiBfM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDQxKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoMikudG9nZ2xlVGFibGVFeHBhbmRlZCgpKX0pLFAoMSwibWF0LWljb24iLDkpLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygidGl0bGUiLGUuc2hvdWxkRXhwYW5kVGFibGUoKT8iRXhwYW5kIFRhYmxlIjoiQ29sbGFwc2UgVGFibGUiKSx2KDEpLF8oInN2Z0ljb24iLGUuc2hvdWxkRXhwYW5kVGFibGUoKT8iZXhwYW5kX21vcmVfMjRweCI6ImV4cGFuZF9sZXNzXzI0cHgiKX19dmFyIGIzZT1mdW5jdGlvbihuKXtyZXR1cm57ImRhdGEtdGFibGUtY29udGFpbmVyIjohMCxleHBhbmRlZDpufX07ZnVuY3Rpb24gdjNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO090KDApLGgoMSwiZGl2IiwzNiwzNykoMywic2NhbGFyLWNhcmQtZGF0YS10YWJsZSIsMzgpLEkoInNvcnREYXRhQnkiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnNvcnREYXRhQnkocikpfSkoImVkaXRDb2x1bW5IZWFkZXJzIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5lZGl0Q29sdW1uSGVhZGVycy5lbWl0KHIpKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnJlbW92ZUNvbHVtbi5lbWl0KHIpKX0pLGcoKSgpLGgoNCwiZGl2IiwzOSksUyg1LF8zZSwyLDIsImJ1dHRvbiIsNDApLGcoKSxrdCgpfWlmKDImbil7bGV0IGU9dygpO3YoMSksXygibmdDbGFzcyIsSW4oMTAsYjNlLGUuY2FyZFN0YXRlLnRhYmxlRXhwYW5kZWQpKSx2KDIpLF8oImNoYXJ0TWV0YWRhdGFNYXAiLGUuY2hhcnRNZXRhZGF0YU1hcCkoImRhdGFTZXJpZXMiLGUuZGF0YVNlcmllcykoInN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLGUuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbikoImNvbHVtbkhlYWRlcnMiLGUuY29sdW1uSGVhZGVycykoInNvcnRpbmdJbmZvIixlLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGUuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpKCJzbW9vdGhpbmdFbmFibGVkIixlLnNtb290aGluZ0VuYWJsZWQpKCJocGFyYW1zRW5hYmxlZCIsZS5ocGFyYW1zRW5hYmxlZCksdigyKSxfKCJuZ0lmIixlLmNhbkV4cGFuZFRhYmxlKCkpfX12YXIgeTNlPWZ1bmN0aW9uKG4pe3JldHVyblswLG5dfSx4M2U9ZnVuY3Rpb24oKXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxlbmQ6ITAscmFuZ2U6ITB9fTtmdW5jdGlvbiBDM2Uobix0KXtpZigxJm4mJlAoMCwiZGl2IiwzNiksMiZuKXtsZXQgZT13KDIpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPXcoKTtUdCgibGVmdCIsby5mb3J3YXJkKGkueCxJbigzLHkzZSxyLndpZHRoKSxudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kP251bGw6cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSsicHgiKSxfKCJuZ0NsYXNzIixjdSg1LHgzZSkpfX12YXIgTTNlPWZ1bmN0aW9uKG4pe3JldHVybltuLDBdfSx3M2U9ZnVuY3Rpb24obil7cmV0dXJueyJvdXQtb2Ytc2VsZWN0ZWQtdGltZSI6ITAsc3RhcnQ6ITAscmFuZ2U6bn19O2Z1bmN0aW9uIFMzZShuLHQpe2lmKDEmbiYmKE90KDApLFAoMSwiZGl2IiwzNiksUygyLEMzZSwxLDYsImRpdiIsNDIpLGt0KCkpLDImbil7bGV0IGU9dygpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPXcoKTt2KDEpLFR0KCJyaWdodCIsby5mb3J3YXJkKGkueCxJbig0LE0zZSxyLndpZHRoKSxzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCkrInB4IiksXygibmdDbGFzcyIsSW4oNix3M2UsIShudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kfHwhcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSkpLHYoMSksXygibmdJZiIsbnVsbD09cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9udWxsOnMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9fWZ1bmN0aW9uIEUzZShuLHQpezEmbiYmUygwLFMzZSwzLDgsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmXygibmdJZiIsdygpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pfWZ1bmN0aW9uIFQzZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtPdCgwKSxoKDEsInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIiw0MyksSSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChyKSl9KSgib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoMikub25Gb2JSZW1vdmVkKCkpfSksZygpLGt0KCl9aWYoMiZuKXtsZXQgZT13KCksaT1lLmludGVyYWN0aW9uU3RhdGUscj1lLnhTY2FsZSxvPWUudmlld0V4dGVudCxzPWUuZG9tRGltZW5zaW9uLGE9dygpO3YoMSksXygiZGlzYWJsZUludGVyYWN0aW9uIiwiTk9ORSIhPT1pKSgidGltZVNlbGVjdGlvbiIsYS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKSgic2NhbGUiLHIpKCJtaW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCIsby54KSgibWluTWF4U3RlcCIsYS5taW5NYXhTdGVwKSgiYXhpc1NpemUiLHMud2lkdGgpfX1mdW5jdGlvbiBEM2Uobix0KXsxJm4mJlMoMCxUM2UsMiw2LCJuZy1jb250YWluZXIiLDI0KSwyJm4mJl8oIm5nSWYiLHcoKS5zaG93Rm9iQ29udHJvbGxlcigpKX12YXIgR3RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnJlZj1lLHRoaXMuZGlhbG9nPWksdGhpcy5EYXRhTG9hZFN0YXRlPVRlLHRoaXMuUmVuZGVyZXJUeXBlPVFpLHRoaXMuU2NhbGVUeXBlPW5yLHRoaXMub25GdWxsU2l6ZVRvZ2dsZT1uZXcgRix0aGlzLm9uUGluQ2xpY2tlZD1uZXcgRix0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEYsdGhpcy5vblN0ZXBTZWxlY3RvclRvZ2dsZWQ9bmV3IEYsdGhpcy5vbkRhdGFUYWJsZVNvcnRpbmc9bmV3IEYsdGhpcy5lZGl0Q29sdW1uSGVhZGVycz1uZXcgRix0aGlzLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlPW5ldyBGLHRoaXMucmVtb3ZlQ29sdW1uPW5ldyBGLHRoaXMub25MaW5lQ2hhcnRab29tPW5ldyBGLHRoaXMub25DYXJkU3RhdGVDaGFuZ2VkPW5ldyBGLHRoaXMuc29ydGluZ0luZm89e25hbWU6InJ1biIsb3JkZXI6aW8uQVNDRU5ESU5HfSx0aGlzLnlTY2FsZVR5cGU9bnIuTElORUFSLHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbj0hMSx0aGlzLnJlbGF0aXZlWEZvcm1hdHRlcj1fMCx0aGlzLnZhbHVlRm9ybWF0dGVyPWlwLHRoaXMuc3RlcEZvcm1hdHRlcj1nMH10b2dnbGVZU2NhbGVUeXBlKCl7dGhpcy55U2NhbGVUeXBlPXRoaXMueVNjYWxlVHlwZT09PW5yLkxJTkVBUj9uci5MT0cxMDpuci5MSU5FQVJ9c29ydERhdGFCeShlKXt0aGlzLnNvcnRpbmdJbmZvPWUsdGhpcy5vbkRhdGFUYWJsZVNvcnRpbmcuZW1pdChlKX1yZXNldERvbWFpbigpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC52aWV3Qm94UmVzZXQoKX10cmFja0J5VG9vbHRpcERhdHVtKGUsaSl7cmV0dXJuIGkuaWR9Z2V0Q3VzdG9tWEZvcm1hdHRlcigpe3N3aXRjaCh0aGlzLnhBeGlzVHlwZSl7Y2FzZSBQaS5SRUxBVElWRTpyZXR1cm4gXzA7Y2FzZSBQaS5TVEVQOnJldHVybiBsMztkZWZhdWx0OnJldHVybn19Z2V0Q3Vyc29yQXdhcmVUb29sdGlwRGF0YShlLGkscil7bGV0IG89ZS5tYXAobD0+KHsuLi5sLG1ldGFkYXRhOnsuLi5sLm1ldGFkYXRhLGNsb3Nlc3Q6ITEsZGlzdFRvQ3Vyc29yUGl4ZWxzOk1hdGguaHlwb3QobC5kb21Qb2ludC54LXIueCxsLmRvbVBvaW50Lnktci55KSxkaXN0VG9DdXJzb3JYOmwuZGF0YVBvaW50LngtaS54LGRpc3RUb0N1cnNvclk6bC5kYXRhUG9pbnQueS1pLnl9fSkpLHM9MS8wLGE9MDtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoO2wrKylzPm9bbF0ubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzJiYocz1vW2xdLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscyxhPWwpO3N3aXRjaChvLmxlbmd0aCYmKG9bYV0ubWV0YWRhdGEuY2xvc2VzdD0hMCksdGhpcy50b29sdGlwU29ydCl7Y2FzZSBvby5BU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5kYXRhUG9pbnQueS1jLmRhdGFQb2ludC55KTtjYXNlIG9vLkRFU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+Yy5kYXRhUG9pbnQueS1sLmRhdGFQb2ludC55KTtjYXNlIG9vLk5FQVJFU1Q6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMtYy5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMpO2Nhc2Ugb28uTkVBUkVTVF9ZOnJldHVybiBvLnNvcnQoKGwsYyk9PmwubWV0YWRhdGEuZGlzdFRvQ3Vyc29yWS1jLm1ldGFkYXRhLmRpc3RUb0N1cnNvclkpO2Nhc2Ugb28uREVGQVVMVDpjYXNlIG9vLkFMUEhBQkVUSUNBTDpyZXR1cm4gby5zb3J0KChsLGMpPT5sLm1ldGFkYXRhLmRpc3BsYXlOYW1lPGMubWV0YWRhdGEuZGlzcGxheU5hbWU/LTE6bC5tZXRhZGF0YS5kaXNwbGF5TmFtZT5jLm1ldGFkYXRhLmRpc3BsYXlOYW1lPzE6MCl9fW9wZW5EYXRhRG93bmxvYWREaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50LHtkYXRhOntjYXJkSWQ6dGhpcy5jYXJkSWR9fSl9b25Gb2JSZW1vdmVkKCl7dGhpcy5vblN0ZXBTZWxlY3RvclRvZ2dsZWQuZW1pdChZcy5GT0JfREVTRUxFQ1QpfXNob3dEYXRhVGFibGUoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1QaS5TVEVQJiZ0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb259c2hvd0ZvYkNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1QaS5TVEVQJiZ0aGlzLm1pbk1heFN0ZXB9Y2FuRXhwYW5kVGFibGUoKXtyZXR1cm4gdGhpcy5kYXRhU2VyaWVzLmZpbHRlcihpPT5IUyhpLHRoaXMuY2hhcnRNZXRhZGF0YU1hcCkpLmxlbmd0aD4zfXNob3VsZEV4cGFuZFRhYmxlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5kYXRhVGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0fHwhdGhpcy5jYXJkU3RhdGU/LnRhYmxlRXhwYW5kZWQpfXRvZ2dsZVRhYmxlRXhwYW5kZWQoKXt0aGlzLm9uQ2FyZFN0YXRlQ2hhbmdlZC5lbWl0KHsuLi50aGlzLmNhcmRTdGF0ZSx0YWJsZUV4cGFuZGVkOnRoaXMuc2hvdWxkRXhwYW5kVGFibGUoKX0pLHRoaXMuZGF0YVRhYmxlQ29udGFpbmVyJiYodGhpcy5kYXRhVGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQ9IiIpfW9wZW5UYWJsZUVkaXRNZW51KCl7dGhpcy5vcGVuVGFibGVFZGl0TWVudVRvTW9kZS5lbWl0KHRoaXMucmFuZ2VFbmFibGVkP3JvLlJBTkdFOnJvLlNJTkdMRSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoemwpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UoY18sNSksR2UoYzNlLDUpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLmxpbmVDaGFydD1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5kYXRhVGFibGVDb250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixjaGFydE1ldGFkYXRhTWFwOiJjaGFydE1ldGFkYXRhTWFwIixjYXJkU3RhdGU6ImNhcmRTdGF0ZSIsRGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLGlnbm9yZU91dGxpZXJzOiJpZ25vcmVPdXRsaWVycyIsaXNDYXJkVmlzaWJsZToiaXNDYXJkVmlzaWJsZSIsaXNQaW5uZWQ6ImlzUGlubmVkIixsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsc2hvd0Z1bGxXaWR0aDoic2hvd0Z1bGxXaWR0aCIsc21vb3RoaW5nRW5hYmxlZDoic21vb3RoaW5nRW5hYmxlZCIsdGFnOiJ0YWciLHRpdGxlOiJ0aXRsZSIsdG9vbHRpcFNvcnQ6InRvb2x0aXBTb3J0Iix4QXhpc1R5cGU6InhBeGlzVHlwZSIseFNjYWxlVHlwZToieFNjYWxlVHlwZSIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIixmb3JjZVN2ZzoiZm9yY2VTdmciLGNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkOiJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbjoic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsbWluTWF4U3RlcDoibWluTWF4U3RlcCIsdXNlclZpZXdCb3g6InVzZXJWaWV3Qm94Iixjb2x1bW5IZWFkZXJzOiJjb2x1bW5IZWFkZXJzIixyYW5nZUVuYWJsZWQ6InJhbmdlRW5hYmxlZCIsaHBhcmFtc0VuYWJsZWQ6ImhwYXJhbXNFbmFibGVkIn0sb3V0cHV0czp7b25GdWxsU2l6ZVRvZ2dsZToib25GdWxsU2l6ZVRvZ2dsZSIsb25QaW5DbGlja2VkOiJvblBpbkNsaWNrZWQiLG9uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uU3RlcFNlbGVjdG9yVG9nZ2xlZDoib25TdGVwU2VsZWN0b3JUb2dnbGVkIixvbkRhdGFUYWJsZVNvcnRpbmc6Im9uRGF0YVRhYmxlU29ydGluZyIsZWRpdENvbHVtbkhlYWRlcnM6ImVkaXRDb2x1bW5IZWFkZXJzIixvcGVuVGFibGVFZGl0TWVudVRvTW9kZToib3BlblRhYmxlRWRpdE1lbnVUb01vZGUiLHJlbW92ZUNvbHVtbjoicmVtb3ZlQ29sdW1uIixvbkxpbmVDaGFydFpvb206Im9uTGluZUNoYXJ0Wm9vbSIsb25DYXJkU3RhdGVDaGFuZ2VkOiJvbkNhcmRTdGF0ZUNoYW5nZWQifSxkZWNsczozOCx2YXJzOjI5LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGUsaSxyLG8scztyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgcmVzZXRzIGxpbmUgY2hhcnQgZG9tYWluIHRvIHRoZSBkYXRh4pCfZTY4YTU1Mjk0MWFiNDI3YTk5ZTc0MzdlMDg0NDNmMzBhYzcxY2NkNuKQnzM4MzA2NDY1MjEwNTgyNjg1NTg6Rml0IGxpbmUgY2hhcnQgZG9tYWlucyB0byBkYXRhYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsaT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGxpbmUgY2hhcnQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxyPSRsb2NhbGl6ZWA6QW4gb3ZlcmZsb3cgbWVudSBidXR0b24gdGhhdCBvcGVucyBtb3JlIGxpbmUgY2hhcnQgb3B0aW9uc+KQn2IyNjBmYWI5NDZhMzA3N2NlMjBmZDI4ZTMzNjk3OWY1ODY3MjBlOGTikJ84NzgwNTM3NDAyMTAzMzY0MzU6TW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnNgLG89JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgbG9nIHNjYWxlIG9uIHktYXhpcyBvbiBhIGxpbmUgY2hhcnTikJ9mZTkxZjk2YWI5YjNiYWNhNWE0ODkxM2YyYjBmYWU4NDQ4M2Q5M2Uz4pCfMzM3NDY0NTYyMDYzODg4MzkyNjpUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSBvbiBsaW5lIGNoYXJ0YCxzPSRsb2NhbGl6ZWA6RXhwYW5kIFRhYmxl4pCfOWU1OWZmNTBiZmNiNDc5MjcyZTJiMTAzZTFlOWIxMTUxOGUyZTRjZeKQnzYzNzQ4ODAzNDEzOTMwMjA2MTA6RXhwYW5kIFRhYmxlYCxbWzEsImFsd2F5cy12aXNpYmxlIl0sWzEsImhlYWRpbmciXSxbMSwibmFtZSJdLFsxLCJ0YWciLDMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImRpc2FibGVkIiwidGl0bGUiLCJjbGljayJdLFsic3ZnSWNvbiIsInNldHRpbmdzX292ZXJzY2FuXzI0cHgiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsaSwidGl0bGUiLCJUb2dnbGUgZnVsbCBzaXplIG1vZGUiLDMsImNsaWNrIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixyLCJ0aXRsZSIsIk1vcmUgbGluZSBjaGFydCBvcHRpb25zIiwzLCJtYXRNZW51VHJpZ2dlckZvciJdLFsic3ZnSWNvbiIsIm1vcmVfdmVydF8yNHB4Il0sWyJtZW51IiwibWF0TWVudSJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLG8sMywiY2xpY2siXSxbInN2Z0ljb24iLCJsaW5lX3dlaWdodF8yNHB4Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gZGlhbG9nIHRvIGRvd25sb2FkIGRhdGEiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZ2V0X2FwcF8yNHB4Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSB0byBlZGl0IGRhdGEgdGFibGUgY29sdW1ucyIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2hhcnQtY29udGFpbmVyIl0sWyJjaGFydENvbnRhaW5lciIsIiJdLFsiZGlhbWV0ZXIiLCIxOCIsNCwibmdJZiJdLFszLCJkaXNhYmxlVXBkYXRlIiwicHJlZmVycmVkUmVuZGVyZXJUeXBlIiwic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwieFNjYWxlVHlwZSIsInlTY2FsZVR5cGUiLCJjdXN0b21YRm9ybWF0dGVyIiwiaWdub3JlWU91dGxpZXJzIiwidG9vbHRpcFRlbXBsYXRlIiwidXNlRGFya01vZGUiLCJ1c2VyVmlld0JveCIsImN1c3RvbVZpc1RlbXBsYXRlIiwiY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUiLCJvblZpZXdCb3hPdmVycmlkZGVuIiwidmlld0JveENoYW5nZWQiXSxbInRvb2x0aXAiLCIiXSxbNCwibmdJZiJdLFsibGluZUNoYXJ0Q3VzdG9tVmlzIiwiIl0sWyJsaW5lQ2hhcnRDdXN0b21YQXhpc1ZpcyIsIiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUgdG8gZWRpdCBkYXRhIHRhYmxlIGNvbHVtbnMiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWyJkaWFtZXRlciIsIjE4Il0sWzEsInRvb2x0aXAiXSxbMSwiY2lyY2xlLWhlYWRlciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwidG9vbHRpcC1yb3ciXSxbMSwidG9vbHRpcC1yb3ctY2lyY2xlIl0sWzMsImFsaWFzIl0sWzMsIm5nQ2xhc3MiXSxbImRhdGFUYWJsZUNvbnRhaW5lciIsIiJdLFszLCJjaGFydE1ldGFkYXRhTWFwIiwiZGF0YVNlcmllcyIsInN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLCJjb2x1bW5IZWFkZXJzIiwic29ydGluZ0luZm8iLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsInNtb290aGluZ0VuYWJsZWQiLCJocGFyYW1zRW5hYmxlZCIsInNvcnREYXRhQnkiLCJlZGl0Q29sdW1uSGVhZGVycyIsInJlbW92ZUNvbHVtbiJdLFsxLCJib3R0b20tYXJlYSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiY2xhc3MiLCJleHBhbmQtYnV0dG9uIiwiYXJpYS1sYWJlbCIscywzLCJ0aXRsZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixzLDEsImV4cGFuZC1idXR0b24iLDMsInRpdGxlIiwiY2xpY2siXSxbMywibmdDbGFzcyIsImxlZnQiLDQsIm5nSWYiXSxbMywiZGlzYWJsZUludGVyYWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInNjYWxlIiwibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLCJtaW5NYXhTdGVwIiwiYXhpc1NpemUiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxQKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLGcoKSxoKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzZXREb21haW4oKX0pLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksUCg5LCJtYXQtaWNvbiIsNyksZygpLGgoMTAsImJ1dHRvbiIsOCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksUCgxMSwibWF0LWljb24iLDkpLGcoKSxoKDEyLCJidXR0b24iLDEwKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pLFAoMTMsIm1hdC1pY29uIiw5KSxnKCksaCgxNCwiYnV0dG9uIiwxMSksUCgxNSwibWF0LWljb24iLDEyKSxnKCksaCgxNiwibWF0LW1lbnUiLG51bGwsMTMpKDE4LCJidXR0b24iLDE0KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVZU2NhbGVUeXBlKCl9KSxQKDE5LCJtYXQtaWNvbiIsMTUpLGgoMjAsInNwYW4iKSxUKDIxLCJUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSIpLGcoKSgpLGgoMjIsImJ1dHRvbiIsMTYpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EYXRhRG93bmxvYWREaWFsb2coKX0pLFAoMjMsIm1hdC1pY29uIiwxNyksaCgyNCwic3BhbiIpLFQoMjUsIkRvd25sb2FkIGRhdGEiKSxnKCkoKSxTKDI2LGQzZSw0LDAsImJ1dHRvbiIsMTgpLGcoKSgpKCksaCgyNywiZGl2IiwxOSwyMCksUygyOSx1M2UsMSwwLCJtYXQtc3Bpbm5lciIsMjEpLGgoMzAsImxpbmUtY2hhcnQiLDIyKSxJKCJvblZpZXdCb3hPdmVycmlkZGVuIixmdW5jdGlvbihvKXtyZXR1cm4gaS5pc1ZpZXdCb3hPdmVycmlkZGVuPW99KSgidmlld0JveENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGluZUNoYXJ0Wm9vbS5lbWl0KG8pfSksZygpLFMoMzEsZzNlLDE3LDMsIm5nLXRlbXBsYXRlIixudWxsLDIzLFd0KSxnKCkoKSxTKDMzLHYzZSw2LDEyLCJuZy1jb250YWluZXIiLDI0KSxTKDM0LEUzZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI1LFd0KSxTKDM2LEQzZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI2LFd0KSksMiZlKXtsZXQgcj1pdCgxNyksbz1pdCgzMikscz1pdCgzNSksYT1pdCgzNyk7digzKSxXaSgidGl0bGUiLGkudGFnKSxXaSgidmFsdWUiLGkudGl0bGUpLHYoMSksXygiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSx2KDIpLF8oImRpc2FibGVkIiwhaS5saW5lQ2hhcnR8fCFXKDcsMjUsaS5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKSkoInRpdGxlIixpLmxpbmVDaGFydCYmVyg4LDI3LGkubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSk/IkxpbmUgY2hhcnQgaXMgYWxyZWFkeSBmaXR0ZWQgdG8gZGF0YS4gV2hlbiBkYXRhIHVwZGF0ZXMsIHRoZSBsaW5lIGNoYXJ0IHdpbGwgYXV0byBmaXQgdG8gaXRzIGRvbWFpbi4iOiJGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGEiKSx2KDQpLEJlKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIiksdigxKSxfKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHYoMiksXygic3ZnSWNvbiIsaS5zaG93RnVsbFdpZHRoPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLHYoMSksXygibWF0TWVudVRyaWdnZXJGb3IiLHIpLHYoMTIpLF8oIm5nSWYiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpLHYoMyksXygibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORyksdigxKSxfKCJkaXNhYmxlVXBkYXRlIiwhaS5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIixpLmZvcmNlU3ZnP2kuUmVuZGVyZXJUeXBlLlNWRzppLlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLGkuZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIixpLmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIixpLnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIixpLnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIixpLmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsaS5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsbykoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKSgidXNlclZpZXdCb3giLGkudXNlclZpZXdCb3gpKCJjdXN0b21WaXNUZW1wbGF0ZSIscykoImN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlIixhKSx2KDMpLF8oIm5nSWYiLGkuc2hvd0RhdGFUYWJsZSgpKX19LGRlcGVuZGVuY2llczpbeW4sbm4sRmUsUXUsY18sJGksRW4sTmMsamwsTGMsdGwsSHRlLE1WLFhnLFFnLGN0LGdoXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO3BhZGRpbmc6MTZweDtwYWRkaW5nLXRvcDo0cHh9W19uZ2hvc3QtJUNPTVAlXTpoYXMoLmV4cGFuZC1idXR0b24pe3BhZGRpbmc6NHB4IDE2cHggMH0uYWx3YXlzLXZpc2libGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1iYXNpczoyOThweH0uYWx3YXlzLXZpc2libGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6aGFzKC5leHBhbmQtYnV0dG9uKSl7ZmxleC1ncm93OjF9LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjE0cHg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbTo0cHg7cG9zaXRpb246cmVsYXRpdmV9LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgLm5hbWVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z2FwOjVweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byBhdXRvfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxLjJlbTtsaW5lLWhlaWdodDowfS50YWdbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbn0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47cmVzaXplOnZlcnRpY2FsfS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgbWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjExcHg7dG9wOjExcHh9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXNwYWNpbmc6NHB4O2ZvbnQtc2l6ZToxM3B4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xvc2VzdFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojZmZmO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm91dC1vZi1zZWxlY3RlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZX0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodC13aWR0aDoycHg7bWFyZ2luLWxlZnQ6LTFweH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnQucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuZW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdC13aWR0aDoycHg7bWFyZ2luLXJpZ2h0Oi0xcHg7cmlnaHQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5kYXRhLXRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMHB4O21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDo1MGVtO292ZXJmbG93OmF1dG87cmVzaXplOnZlcnRpY2FsfS5kYXRhLXRhYmxlLWNvbnRhaW5lci5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmF1dG99LmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0uYm90dG9tLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBBM2Uobix0KXtyZXR1cm4gbi5sZW5ndGg9PT10Lmxlbmd0aCYmbi5ldmVyeSgoZSxpKT0+e2xldCByPXRbaV0sbz1lLnBvaW50cyxzPXIucG9pbnRzO3JldHVybiBlLnJ1bklkPT09ci5ydW5JZCYmby5sZW5ndGg9PT1zLmxlbmd0aCYmby5ldmVyeSgoYSxsKT0+e2xldCBjPXNbbF07cmV0dXJuIGEueD09PWMueCYmYS55PT09Yy55fSl9KX12YXIgV3RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50PWtRLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBGLHRoaXMuaXNWaXNpYmxlPSExLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KFJsKSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChnZiksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoaGYpLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChPbCksdGhpcy5mb3JjZVN2ZyQ9dGhpcy5zdG9yZS5zZWxlY3QoeUYpLHRoaXMuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGRTKSx0aGlzLnhTY2FsZVR5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KE9sKS5waXBlKE4oaT0+e3N3aXRjaChpKXtjYXNlIFBpLlNURVA6Y2FzZSBQaS5SRUxBVElWRTpyZXR1cm4gbnIuTElORUFSO2Nhc2UgUGkuV0FMTF9USU1FOnJldHVybiBuci5USU1FO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHhBeGlzVHlwZSBmb3IgbGluZSBjaGFydC4gJHtpfWApfX0pKSx0aGlzLnNjYWxhclNtb290aGluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoYmQpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoYmQpLnBpcGUoTihpPT5pPjApKSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KHFhKS5waXBlKE4oaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWV9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzVmlzaWJsZT1lfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PXpuLlNDQUxBUlN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQmcoe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFdhLHRoaXMuY2FyZElkKS5waXBlKGtlKGw9PiEhbCYmdGhpcy5pc1NjYWxhckNhcmRNZXRhZGF0YShsKSksTihsPT5sKSk7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsbF0pfWxldCBhPXRoaXMuc3RvcmUuc2VsZWN0KEN1LHRoaXMuY2FyZElkKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksa2UobD0+Qm9vbGVhbihsKSksTihsPT5sKSxNcygxKSkucGlwZShMaSh0aGlzLnN0b3JlLnNlbGVjdChPbCkpLE4oKFtsLGNdKT0+T2JqZWN0LmtleXMobCkubWFwKHA9Pih7cnVuSWQ6cCxwb2ludHM6dGhpcy5zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGxbcF0sYyl9KSkpLFluKEEzZSkpLnBpcGUoTGkodGhpcy5zdG9yZS5zZWxlY3QobjEpKSxvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE4oKFtsLGNdKT0+Yz9mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2Ygbil7bGV0IGk9W10scj1OdW1iZXIuaXNGaW5pdGUoZS5wb2ludHNbMF0/LngpP2UucG9pbnRzWzBdLng6LTEvMCxvPVtdO2ZvcihsZXQgcyBvZiBlLnBvaW50cylOdW1iZXIuaXNGaW5pdGUocy54KT8ocy54PHImJihpLnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtlLnJ1bklkLGkubGVuZ3RoXSkscnVuSWQ6ZS5ydW5JZCxwb2ludHM6b30pLG89W10pLG8ucHVzaChzKSxyPXMueCk6by5wdXNoKHMpO2kucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW2UucnVuSWQsaS5sZW5ndGhdKSxydW5JZDplLnJ1bklkLHBvaW50czpvfSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspdC5wdXNoKHsuLi5pW3NdLHBhcnRpdGlvbkluZGV4OnMscGFydGl0aW9uU2l6ZTppLmxlbmd0aH0pfXJldHVybiB0fShsKTpsLm1hcChkPT4oey4uLmQsc2VyaWVzSWQ6ZC5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSksTihsPT5sLm1hcChjPT57bGV0IGQ9Yy5wb2ludHNbMF0/LndhbGxUaW1lO3JldHVybnsuLi5jLHBvaW50czpjLnBvaW50cy5tYXAodT0+KHsuLi51LHJlbGF0aXZlVGltZUluTXM6dS53YWxsVGltZS1kfSkpfX0pKSxMaSh0aGlzLnN0b3JlLnNlbGVjdChPbCkpLE4oKFtsLGNdKT0+bC5tYXAoZD0+KHsuLi5kLHBvaW50czpkLnBvaW50cy5tYXAodT0+e2xldCBwO3N3aXRjaChjKXtjYXNlIFBpLlJFTEFUSVZFOnA9dS5yZWxhdGl2ZVRpbWVJbk1zO2JyZWFrO2Nhc2UgUGkuV0FMTF9USU1FOnA9dS53YWxsVGltZTticmVhaztkZWZhdWx0OnA9dS5zdGVwfXJldHVybnsuLi51LHg6cH19KX0pKSksTXMoMSkpO3RoaXMudXNlclZpZXdCb3gkPXRoaXMuc3RvcmUuc2VsZWN0KFFGLHRoaXMuY2FyZElkKSx0aGlzLm1pbk1heFN0ZXBzJD1kbihbdGhpcy5zdG9yZS5zZWxlY3QoRVcsdGhpcy5jYXJkSWQpLHRoaXMuc3RvcmUuc2VsZWN0KFRXLHRoaXMuY2FyZElkKV0pLnBpcGUoTigoW2wsY10pPT57aWYobCYmYylyZXR1cm57bWluU3RlcDpNYXRoLm1heChsPy5taW5TdGVwLGM/Lm1pblN0ZXApLG1heFN0ZXA6TWF0aC5taW4obD8ubWF4U3RlcCxjPy5tYXhTdGVwKX19KSksdGhpcy5kYXRhU2VyaWVzJD1hLnBpcGUoTGkodGhpcy5zdG9yZS5zZWxlY3QoYmQpKSxKbigoW2wsY10pPT57bGV0IGQ9bC5tYXAoKHtzZXJpZXNJZDp1LHBvaW50czpwfSk9Pih7aWQ6dSxwb2ludHM6cH0pKTtyZXR1cm4gYzw9MD9IdChkKTokcihhc3luYyBmdW5jdGlvbihuLHQpe051bWJlci5pc0Zpbml0ZSh0KXx8KHQ9MCksdD1NYXRoLm1heCgwLE1hdGgubWluKHQsMSkpO2xldCBlPVtdO2ZvcihsZXQgaSBvZiBuKXtsZXQgcj1pLnBvaW50c1swXT8ueTtpZihpLnBvaW50cy5ldmVyeShjPT5jLnk9PXIpKXtlLnB1c2goaSk7Y29udGludWV9bGV0IHM9aS5wb2ludHMubGVuZ3RoPjA/MDpOYU4sYT0wLGw9aS5wb2ludHMubWFwKGM9PntsZXQgZD1jLnk7aWYoTnVtYmVyLmlzRmluaXRlKGQpKXtzPXMqdCsoMS10KSpkLGErKztsZXQgdT0xPT09dD8xOjEtTWF0aC5wb3codCxhKTtyZXR1cm57eDpjLngseTpzL3V9fXJldHVybnt4OmMueCx5OmR9fSk7ZS5wdXNoKHtpZDppLmlkLHBvaW50czpsfSl9cmV0dXJuIGV9KGQsYykpLnBpcGUoTih1PT57bGV0IHA9ZC5tYXAoKGYsbSk9Pih7aWQ6cyhmLmlkKSxwb2ludHM6dVttXS5wb2ludHMubWFwKCh7eTpifSxNKT0+KHsuLi5mLnBvaW50c1tNXSx5OmJ9KSl9KSk7cmV0dXJuWy4uLmQsLi4ucF19KSl9KSxxbihbXSkpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQ9ZG4oW3RoaXMubWluTWF4U3RlcHMkLHRoaXMuc3RvcmUuc2VsZWN0KHd1KSx0aGlzLnN0b3JlLnNlbGVjdChFdSksdGhpcy5zdG9yZS5zZWxlY3QoT2wpXSkucGlwZShOKChbbCxjLGQsdV0pPT5sJiZjJiZ1PT09UGkuU1RFUCYmZD9VaChkLGwubWluU3RlcCxsLm1heFN0ZXApOm51bGwpKSx0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KERXLHRoaXMuY2FyZElkKSx0aGlzLmNvbHVtbkhlYWRlcnMkPXRoaXMuc3RvcmUuc2VsZWN0KGQxKHRoaXMuY2FyZElkKSksdGhpcy5jaGFydE1ldGFkYXRhTWFwJD1hLnBpcGUoSm4obD0+ZG4obC5tYXAoYz0+dGhpcy5nZXRSdW5EaXNwbGF5TmFtZUFuZEFsaWFzKGMucnVuSWQpLnBpcGUoTihkPT4oey4uLmMsLi4uZH0pKSkpKSksTGkodGhpcy5zdG9yZS5zZWxlY3QoSXUpLHRoaXMuc3RvcmUuc2VsZWN0KG1kKSx0aGlzLnN0b3JlLnNlbGVjdCh3USksdGhpcy5zdG9yZS5zZWxlY3QoQXUpLHRoaXMuc3RvcmUuc2VsZWN0KGJkKSksd3IoMCksTigoW2wsYyxkLHUscCxmXSk9PntsZXQgbT17fSxiPWY+MDtmb3IobGV0IE0gb2YgbCl7bGV0e3Nlcmllc0lkOnkscnVuSWQ6eCxkaXNwbGF5TmFtZTpSLGFsaWFzOkEscGFydGl0aW9uSW5kZXg6VixwYXJ0aXRpb25TaXplOnRlfT1NO21beV09e3R5cGU6V2cuT1JJR0lOQUwsaWQ6eSxhbGlhczpBLGRpc3BsYXlOYW1lOnRlPjE/YCR7Un06ICR7Vn1gOlIsdmlzaWJsZTpCb29sZWFuKGMmJmMuZ2V0KHgpJiYoIWR8fHUuaGFzKHgpKSksY29sb3I6cFt4XT8/IiNmZmYiLGF1eDohMSxvcGFjaXR5OjF9fWlmKCFiKXJldHVybiBtO2ZvcihsZXRbTSx5XW9mIE9iamVjdC5lbnRyaWVzKG0pKXtsZXQgeD1zKE0pO21beF09ey4uLnksaWQ6eCx0eXBlOldnLkRFUklWRUQsYXV4OiExLG9yaWdpbmFsU2VyaWVzSWQ6TX0seS5hdXg9ITAseS5vcGFjaXR5PS4yNX1yZXR1cm4gbX0pLHFuKHt9KSksdGhpcy5sb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KF9kLHRoaXMuY2FyZElkKSx0aGlzLnRhZyQ9aS5waXBlKE4obD0+bC50YWcpKSx0aGlzLmNhcmRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QocWEpLnBpcGUoTihsPT5sW3RoaXMuY2FyZElkXXx8e30pKSx0aGlzLnRpdGxlJD10aGlzLnRhZyQucGlwZShOKGw9PllnKGwsdGhpcy5ncm91cE5hbWUpKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoTXUsdGhpcy5jYXJkSWQpLHRoaXMucmFuZ2VFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChjMSh0aGlzLmNhcmRJZCkpLHRoaXMuaHBhcmFtc0VuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KG1kKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0UnVuRGlzcGxheU5hbWVBbmRBbGlhcyhlKXtyZXR1cm4gZG4oW3RoaXMuc3RvcmUuc2VsZWN0KGcxLHtydW5JZDplfSksdGhpcy5zdG9yZS5zZWxlY3QoemEpLHRoaXMuc3RvcmUuc2VsZWN0KF8xLHtydW5JZDplfSldKS5waXBlKE4oKFtpLHIsb10pPT57bGV0IHM9bnVsbCE9PWk/cltpXT8/bnVsbDpudWxsO3JldHVybntkaXNwbGF5TmFtZTpvfHxzP28/Lm5hbWU/PyIuLi4iOmUsYWxpYXM6c319KSl9c3RlcFNlcmllc1RvTGluZVNlcmllcyhlLGkpe2xldCByPWk9PT1QaS5TVEVQO3JldHVybiBlLm1hcChvPT57bGV0IHM9MWUzKm8ud2FsbFRpbWU7cmV0dXJuey4uLm8seDpyP28uc3RlcDpzLHk6by52YWx1ZSx3YWxsVGltZTpzLHJlbGF0aXZlVGltZUluTXM6MH19KX1vbkRhdGFUYWJsZVNvcnRpbmcoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChYWChlKSl9b25DYXJkU3RhdGVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZlQoe2NhcmRJZDp0aGlzLmNhcmRJZCxzZXR0aW5nczplfSkpfW9uVGltZVNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChrZih7Li4uZSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSl9b25TdGVwU2VsZWN0b3JUb2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSWQoe2FmZm9yZGFuY2U6ZSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSl9b25MaW5lQ2hhcnRab29tKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYnkoe3VzZXJWaWV3Qm94OmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfWVkaXRDb2x1bW5IZWFkZXJzKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goemcoZSkpfW9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYVQoe21vZGU6ZX0pKX1vblJlbW92ZUNvbHVtbihlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFVnKHtoZWFkZXI6ZSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZCJdXSxpbnB1dHM6e0RhdGFEb3dubG9hZENvbXBvbmVudDoiRGF0YURvd25sb2FkQ29tcG9uZW50IixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUifSxvdXRwdXRzOntwaW5TdGF0ZUNoYW5nZWQ6InBpblN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjI0LHZhcnM6NzIsY29uc3RzOltbIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLDMsImNhcmRJZCIsImNoYXJ0TWV0YWRhdGFNYXAiLCJEYXRhRG93bmxvYWRDb21wb25lbnQiLCJkYXRhU2VyaWVzIiwiaWdub3JlT3V0bGllcnMiLCJpc0NhcmRWaXNpYmxlIiwiaXNQaW5uZWQiLCJsb2FkU3RhdGUiLCJzaG93RnVsbFdpZHRoIiwic21vb3RoaW5nRW5hYmxlZCIsInRhZyIsInRpdGxlIiwiY2FyZFN0YXRlIiwidG9vbHRpcFNvcnQiLCJ4QXhpc1R5cGUiLCJ4U2NhbGVUeXBlIiwidXNlRGFya01vZGUiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImZvcmNlU3ZnIiwiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJtaW5NYXhTdGVwIiwidXNlclZpZXdCb3giLCJjb2x1bW5IZWFkZXJzIiwicmFuZ2VFbmFibGVkIiwiaHBhcmFtc0VuYWJsZWQiLCJvbkZ1bGxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIiwib25WaXNpYmlsaXR5Q2hhbmdlIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uU3RlcFNlbGVjdG9yVG9nZ2xlZCIsIm9uRGF0YVRhYmxlU29ydGluZyIsIm9uTGluZUNoYXJ0Wm9vbSIsImVkaXRDb2x1bW5IZWFkZXJzIiwib25DYXJkU3RhdGVDaGFuZ2VkIiwib3BlblRhYmxlRWRpdE1lbnVUb01vZGUiLCJyZW1vdmVDb2x1bW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInNjYWxhci1jYXJkLWNvbXBvbmVudCIsMCksSSgib25GdWxsU2l6ZVRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlKCl9KSgib25QaW5DbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5waW5TdGF0ZUNoYW5nZWQuZW1pdChvKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pKCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoIm9uU3RlcFNlbGVjdG9yVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdGVwU2VsZWN0b3JUb2dnbGVkKG8pfSkoIm9uRGF0YVRhYmxlU29ydGluZyIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25EYXRhVGFibGVTb3J0aW5nKG8pfSkoIm9uTGluZUNoYXJ0Wm9vbSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25MaW5lQ2hhcnRab29tKG8pfSkoImVkaXRDb2x1bW5IZWFkZXJzIixmdW5jdGlvbihvKXtyZXR1cm4gaS5lZGl0Q29sdW1uSGVhZGVycyhvKX0pKCJvbkNhcmRTdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2FyZFN0YXRlQ2hhbmdlZChvKX0pKCJvcGVuVGFibGVFZGl0TWVudVRvTW9kZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub3BlblRhYmxlRWRpdE1lbnVUb01vZGUobyl9KSgicmVtb3ZlQ29sdW1uIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlbW92ZUNvbHVtbihvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksaig5LCJhc3luYyIpLGooMTAsImFzeW5jIiksaigxMSwiYXN5bmMiKSxqKDEyLCJhc3luYyIpLGooMTMsImFzeW5jIiksaigxNCwiYXN5bmMiKSxqKDE1LCJhc3luYyIpLGooMTYsImFzeW5jIiksaigxNywiYXN5bmMiKSxqKDE4LCJhc3luYyIpLGooMTksImFzeW5jIiksaigyMCwiYXN5bmMiKSxqKDIxLCJhc3luYyIpLGooMjIsImFzeW5jIiksaigyMywiYXN5bmMiKSxnKCkpLDImZSYmXygiY2FyZElkIixpLmNhcmRJZCkoImNoYXJ0TWV0YWRhdGFNYXAiLFcoMSwyNixpLmNoYXJ0TWV0YWRhdGFNYXAkKSkoIkRhdGFEb3dubG9hZENvbXBvbmVudCIsaS5EYXRhRG93bmxvYWRDb21wb25lbnQpKCJkYXRhU2VyaWVzIixXKDIsMjgsaS5kYXRhU2VyaWVzJCkpKCJpZ25vcmVPdXRsaWVycyIsVygzLDMwLGkuaWdub3JlT3V0bGllcnMkKSkoImlzQ2FyZFZpc2libGUiLGkuaXNWaXNpYmxlKSgiaXNQaW5uZWQiLFcoNCwzMixpLmlzUGlubmVkJCkpKCJsb2FkU3RhdGUiLFcoNSwzNCxpLmxvYWRTdGF0ZSQpKSgic2hvd0Z1bGxXaWR0aCIsVyg2LDM2LGkuc2hvd0Z1bGxXaWR0aCQpKSgic21vb3RoaW5nRW5hYmxlZCIsVyg3LDM4LGkuc21vb3RoaW5nRW5hYmxlZCQpKSgidGFnIixXKDgsNDAsaS50YWckKSkoInRpdGxlIixXKDksNDIsaS50aXRsZSQpKSgiY2FyZFN0YXRlIixXKDEwLDQ0LGkuY2FyZFN0YXRlJCkpKCJ0b29sdGlwU29ydCIsVygxMSw0NixpLnRvb2x0aXBTb3J0JCkpKCJ4QXhpc1R5cGUiLFcoMTIsNDgsaS54QXhpc1R5cGUkKSkoInhTY2FsZVR5cGUiLFcoMTMsNTAsaS54U2NhbGVUeXBlJCkpKCJ1c2VEYXJrTW9kZSIsVygxNCw1MixpLnVzZURhcmtNb2RlJCkpKCJsaW5rZWRUaW1lU2VsZWN0aW9uIixXKDE1LDU0LGkubGlua2VkVGltZVNlbGVjdGlvbiQpKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsVygxNiw1NixpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoImZvcmNlU3ZnIixXKDE3LDU4LGkuZm9yY2VTdmckKSkoImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixXKDE4LDYwLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkKSkoIm1pbk1heFN0ZXAiLFcoMTksNjIsaS5taW5NYXhTdGVwcyQpKSgidXNlclZpZXdCb3giLFcoMjAsNjQsaS51c2VyVmlld0JveCQpKSgiY29sdW1uSGVhZGVycyIsVygyMSw2NixpLmNvbHVtbkhlYWRlcnMkKSkoInJhbmdlRW5hYmxlZCIsVygyMiw2OCxpLnJhbmdlRW5hYmxlZCQpKSgiaHBhcmFtc0VuYWJsZWQiLFcoMjMsNzAsaS5ocGFyYW1zRW5hYmxlZCQpKX0sZGVwZW5kZW5jaWVzOltxZyxHdGUsY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTzNlKG4sdCxlKXtsZXQgaT1bXSx7bGVmdDpyLHJpZ2h0Om99PXQscz0oby1yKS9lLGE9MCxsPTA7Zm9yKGxldCBjPTA7YzxlO2MrKyl7bGV0IGQ9citjKnMsdT1kK3MscD1jPT09ZS0xLGY9bDtmb3IobD0wO2E8bi5sZW5ndGg7KXtsZXQgbT1uW2FdLGI9azNlKG0sZCx1LCFwKTtpZihmKz1iLmN1cnIsbCs9Yi5uZXh0LG0ueCttLmR4PnUpYnJlYWs7YSsrfWkucHVzaCh7eDpkLGR4OnMseTpmfSl9cmV0dXJuIGl9ZnVuY3Rpb24gazNlKG4sdCxlLGkpe2xldCByPW4ueCxvPW4ueCtuLmR4O2lmKHI+ZXx8bzx0KXJldHVybntjdXJyOjAsbmV4dDowfTtpZigwPT09bi5keClyZXR1cm4gaSYmbz49ZT97Y3VycjowLG5leHQ6bi55fTp7Y3VycjpuLnksbmV4dDowfTtsZXQgcz1NYXRoLm1pbihvLGUpLU1hdGgubWF4KHIsdCk7cmV0dXJue2N1cnI6bi55KnMvbi5keCxuZXh0OjB9fXZhciBGM2U9MWU0LE4zZT0uMDAxLEwzZT1RcigiLjJ+cyIpLEIzZT1RcigiLjR+ciIpLFYzZT1RcigiLjJ+ZSIpO2Z1bmN0aW9uIFl0ZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PUYzZT9MM2Uobik6dDxOM2U/VjNlKG4pOkIzZShuKX12YXIgSDNlPVsibWFpbiJdLHozZT1bInhBeGlzIl0sVTNlPVsieUF4aXMiXSxqM2U9WyJjb250ZW50Il0sRzNlPVsiaGlzdG9ncmFtcyJdO2Z1bmN0aW9uIFczZShuLHQpe2lmKDEmbiYmKE5uKCksaCgwLCJnIikoMSwidGV4dCIpLFQoMiksZygpKCkpLDImbil7bGV0IGU9dygpO1R0KCJ0cmFuc2Zvcm0iLGUuZ2V0Q3NzVHJhbnNsYXRlUHgoZS50b29sdGlwRGF0YS54QXhpcy5wb3NpdGlvbiw5KSksdigyKSxidChlLnRvb2x0aXBEYXRhLnhBeGlzLmxhYmVsKX19ZnVuY3Rpb24gcTNlKG4sdCl7aWYoMSZuJiYoTm4oKSxoKDAsImciKSgxLCJ0ZXh0IiksVCgyKSxnKCkoKSksMiZuKXtsZXQgZT13KCk7VHQoInRyYW5zZm9ybSIsZS5nZXRHcm91cFRyYW5zZm9ybShlLnRvb2x0aXBEYXRhLmNsb3Nlc3REYXR1bSkpLHYoMSksQmUoInkiLGUudG9vbHRpcERhdGEueUF4aXMucG9zaXRpb24pLHYoMSksSGUoIiAiLGUudG9vbHRpcERhdGEueUF4aXMubGFiZWwsIiAiKX19ZnVuY3Rpb24gWTNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO05uKCksT28oKSxPdCgwKSxoKDEsImhpc3RvZ3JhbS1jYXJkLWZvYi1jb250cm9sbGVyIiwxNiksSSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uTGlua2VkVGltZVRvZ2dsZWQuZW1pdCgpKX0pLGcoKSxrdCgpfWlmKDImbil7bGV0IGU9dygpO3YoMSksXygidGltZVNlbGVjdGlvbiIsZS50aW1lU2VsZWN0aW9uKSgic3RlcHMiLGUuZ2V0U3RlcHMoKSkoInRlbXBvcmFsU2NhbGUiLGUuc2NhbGVzLnRlbXBvcmFsU2NhbGUpfX1mdW5jdGlvbiBYM2Uobix0KXtpZigxJm4mJihObigpLGgoMCwiZyIpLFAoMSwibGluZSIsMTcpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtUdCgidHJhbnNmb3JtIix3KCkuZ2V0Q3NzVHJhbnNsYXRlUHgoMCxlKSl9fWZ1bmN0aW9uIFEzZShuLHQpezEmbiYmKE5uKCksUCgwLCJsaW5lIiwyMSkpfWZ1bmN0aW9uIFozZShuLHQpe2lmKDEmbiYmKE5uKCksUCgwLCJjaXJjbGUiLDIyKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygpO1R0KCJ0cmFuc2Zvcm0iLGkuZ2V0Q3NzVHJhbnNsYXRlUHgoaS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoaS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoZSxpLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS54LGkuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGkuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGUsaS50b29sdGlwRGF0YS54UG9zaXRpb25JbkJpbkNvb3JkKSkueSkpfX1mdW5jdGlvbiBLM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7Tm4oKSxoKDAsImciLDE4KSxJKCJtb3VzZWVudGVyIixmdW5jdGlvbihyKXtsZXQgcz1YKGUpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KCkudXBkYXRlQ29sb3JPbkhvdmVyKHIscywhMCkpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKHIpe2xldCBzPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoKS51cGRhdGVDb2xvck9uSG92ZXIocixzLCExKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygpLm9uTGlua2VkVGltZVJhbmdlQ2hhbmdlZChvKSl9KSxTKDEsUTNlLDEsMCwibGluZSIsMTkpLFAoMiwicGF0aCIpLFMoMyxaM2UsMSwyLCJjaXJjbGUiLDIwKSxnKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTtUdCgidHJhbnNmb3JtIixpLmdldEdyb3VwVHJhbnNmb3JtKGUpKSgiY29sb3IiLGkuZ2V0SGlzdG9ncmFtRmlsbChlKSksbnQoImhpc3RvZ3JhbSIsITApKCJuby1jb2xvciIsIWkuaXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGUpKSx2KDEpLF8oIm5nSWYiLGkubW9kZT09PWkuSGlzdG9ncmFtTW9kZS5PRkZTRVQpLHYoMSksQmUoImQiLGkuZ2V0SGlzdG9ncmFtUGF0aChlKSksdigxKSxfKCJuZ0lmIixpLnRvb2x0aXBEYXRhKX19ZnVuY3Rpb24gSjNlKG4sdCl7aWYoMSZuJiYoTm4oKSxQKDAsImNpcmNsZSIsMjIpKSwyJm4pe2xldCBlPXcoMik7QmUoImN4IixlLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLngpKCJjeSIsZS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoZS50b29sdGlwRGF0YS5jbG9zZXN0QmluKS55KX19ZnVuY3Rpb24gJDNlKG4sdCl7aWYoMSZuJiYoTm4oKSxoKDAsImciLDQpKDEsImciKSxQKDIsInBhdGgiKSxTKDMsSjNlLDEsMiwiY2lyY2xlIiwyMyksZygpLGgoNCwiZyIsMjQpKDUsInRleHQiLDI1KSxUKDYpLGcoKSgpKCkpLDImbil7bGV0IGU9dygpO3YoMSksVHQoInRyYW5zZm9ybSIsZS5nZXRHcm91cFRyYW5zZm9ybShlLnRvb2x0aXBEYXRhLmNsb3Nlc3REYXR1bSkpLHYoMSksQmUoImQiLGUuZ2V0SGlzdG9ncmFtUGF0aChlLnRvb2x0aXBEYXRhLmNsb3Nlc3REYXR1bSkpLHYoMSksXygibmdJZiIsZS50b29sdGlwRGF0YS5jbG9zZXN0QmluKSx2KDEpLFR0KCJ0cmFuc2Zvcm0iLGUuZ2V0Q3NzVHJhbnNsYXRlUHgoZS50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi54LGUudG9vbHRpcERhdGEudmFsdWUucG9zaXRpb24ueSkpLHYoMiksYnQoZS50b29sdGlwRGF0YS52YWx1ZS5sYWJlbCl9fXZhciBmQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLm1vZGU9RHIuT0ZGU0VULHRoaXMudGltZVByb3BlcnR5PW5vLlNURVAsdGhpcy50aW1lU2VsZWN0aW9uPW51bGwsdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBGLHRoaXMub25MaW5rZWRUaW1lVG9nZ2xlZD1uZXcgRix0aGlzLkhpc3RvZ3JhbU1vZGU9RHIsdGhpcy5UaW1lUHJvcGVydHk9bm8sdGhpcy50b29sdGlwRGF0YT1udWxsLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWUsdGhpcy5sYXlvdXQ9e2hpc3RvZ3JhbUhlaWdodDowLGNvbnRlbnRDbGllbnRSZWN0OntoZWlnaHQ6MCx3aWR0aDowfX0sdGhpcy5zY2FsZXM9bnVsbCx0aGlzLmZvcm1hdHRlcnM9e2Jpbk51bWJlcjpZdGUsY291bnQ6UXIoIi4zbiIpLHdhbGxUaW1lOmQwKCIlbS8lZCAlWCIpLHN0ZXA6UXIoIi4wZiIpLHJlbGF0aXZlOmk9PlFyKCIuMXIiKShpLzM2ZTUpKyJoIn0sdGhpcy5kb21WaXNpYmxlPSExfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ0FmdGVyVmlld0luaXQoKXttaSh0aGlzLm1haW4ubmF0aXZlRWxlbWVudCwibW91c2Vtb3ZlIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PnRoaXMub25Nb3VzZU1vdmUoZSkpfWdldENzc1RyYW5zbGF0ZVB4KGUsaSl7cmV0dXJuYHRyYW5zbGF0ZSgke2V9cHgsICR7aX1weClgfWdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShlLGkpe2lmKCFlLmJpbnMubGVuZ3RoKXJldHVybnt4OjAsZHg6MCx5OjB9O2xldCByPWUuYmluc1swXSxvPWUuYmlucy5zbGljZSgtMSlbMF07cmV0dXJuIGk8ci54P3I6aT49by54K28uZHg/bzplLmJpbnMuZmluZChhPT5hLng8PWkmJmk8YS54K2EuZHgpfWdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlKXtyZXR1cm4gdGhpcy5zY2FsZXM/e3g6dGhpcy5zY2FsZXMuYmluU2NhbGUoSngoZSkpLHk6dGhpcy5zY2FsZXMuY291bnRTY2FsZShlLnkpfTp7eDowLHk6MH19Z2V0SGlzdG9ncmFtUGF0aChlKXtpZighdGhpcy5zY2FsZXN8fCFlLmJpbnMubGVuZ3RoKXJldHVybiIiO2xldCBpPXRoaXMuc2NhbGVzLmJpblNjYWxlLHI9dGhpcy5zY2FsZXMuY291bnRTY2FsZSxvPWUuYmluc1swXSxzPWUuYmlucy5zbGljZSgtMSlbMF0sYT1bYE0ke2koSngobykpfSwke3IoMCl9YF07Zm9yKGxldCBsIG9mIGUuYmlucylhLnB1c2goYEwke2koSngobCkpfSwke3IobC55KX1gKTtyZXR1cm4gYS5wdXNoKGBMJHtpKEp4KHMpKX0sJHtyKDApfWApLGEuam9pbigiIil9dHJhY2tCeVdhbGxUaW1lKGUpe3JldHVybiBlLndhbGxUaW1lfWdldEdyb3VwVHJhbnNmb3JtKGUpe3JldHVybiB0aGlzLnNjYWxlcyYmdGhpcy5tb2RlIT09RHIuT1ZFUkxBWT90aGlzLmdldENzc1RyYW5zbGF0ZVB4KDAsdGhpcy5zY2FsZXMudGVtcG9yYWxTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZShlKSkpOiIifWdldFN0ZXBzKCl7cmV0dXJuIHRoaXMuZGF0YS5tYXAoZT0+ZS5zdGVwKX1pc1RpbWVTZWxlY3Rpb25FbmFibGVkKGUpe3JldHVybiBCb29sZWFuKHRoaXMubW9kZT09PURyLk9GRlNFVCYmdGhpcy50aW1lUHJvcGVydHk9PT1uby5TVEVQJiZ0aGlzLnNjYWxlcyYmZSl9aXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGUpe3JldHVybiF0aGlzLmlzVGltZVNlbGVjdGlvbkVuYWJsZWQodGhpcy50aW1lU2VsZWN0aW9uKXx8KG51bGw9PT10aGlzLnRpbWVTZWxlY3Rpb24uZW5kP3RoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwPT09ZS5zdGVwOnRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwPD1lLnN0ZXAmJnRoaXMudGltZVNlbGVjdGlvbi5lbmQuc3RlcD49ZS5zdGVwKX1nZXRIaXN0b2dyYW1GaWxsKGUpe3JldHVybiB0aGlzLnNjYWxlcz90aGlzLnNjYWxlcy5kM0NvbG9yU2NhbGUodGhpcy5nZXRUaW1lVmFsdWUoZSkpOiIifXVwZGF0ZUNvbG9yT25Ib3ZlcihlLGkscil7IXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pfHx0aGlzLmlzRGF0dW1JblRpbWVTZWxlY3Rpb25SYW5nZShpKXx8KHI/ZS50YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgibm8tY29sb3IiKTplLnRhcmdldC5jbGFzc0xpc3QuYWRkKCJuby1jb2xvciIpKX1nZXRHcmlkVGlja1lMb2NzKCl7aWYoIXRoaXMuc2NhbGVzfHx0aGlzLm1vZGU9PT1Eci5PRkZTRVQpcmV0dXJuW107bGV0IGU9dGhpcy5zY2FsZXMuY291bnRTY2FsZTtyZXR1cm4gZS50aWNrcygpLm1hcChpPT5lKGkpKX1vblJlc2l6ZSgpe3RoaXMudXBkYXRlQ2xpZW50UmVjdHMoKSx0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmRvbVZpc2libGU9ZSxlJiYodGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKSl9b25MaW5rZWRUaW1lUmFuZ2VDaGFuZ2VkKGUpe2lmKCF0aGlzLmlzVGltZVNlbGVjdGlvbkVuYWJsZWQodGhpcy50aW1lU2VsZWN0aW9uKSlyZXR1cm47bGV0IGk9dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXAscj10aGlzLnRpbWVTZWxlY3Rpb24uZW5kPy5zdGVwLG89ZS5zdGVwPGk/ZS5zdGVwOmkscz1yO3M9dm9pZCAwPT09cz9lLnN0ZXA+aT9lLnN0ZXA6aTplLnN0ZXA+cz9lLnN0ZXA6cywobyE9PWl8fHMhPT1yKSYmbyE9PXMmJnRoaXMub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOntzdGFydDp7c3RlcDpvfSxlbmQ6e3N0ZXA6c319LGFmZm9yZGFuY2U6cXMuSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFfSl9Z2V0VGltZVZhbHVlKGUpe3N3aXRjaCh0aGlzLnRpbWVQcm9wZXJ0eSl7Y2FzZSBuby5XQUxMX1RJTUU6cmV0dXJuIGUud2FsbFRpbWU7Y2FzZSBuby5TVEVQOnJldHVybiBlLnN0ZXA7Y2FzZSBuby5SRUxBVElWRTpyZXR1cm4gZS53YWxsVGltZS10aGlzLmRhdGFbMF0ud2FsbFRpbWV9fXVwZGF0ZUNsaWVudFJlY3RzKCl7dGhpcy5jb250ZW50JiYodGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Q9dGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LmhlaWdodC8yLjUpfXVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl7IXRoaXMuZG9tVmlzaWJsZXx8KHRoaXMuc2NhbGVzPXRoaXMuY29tcHV0ZVNjYWxlcyh0aGlzLmRhdGEpLHRoaXMucmVuZGVyWEF4aXMoKSx0aGlzLnJlbmRlcllBeGlzKCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfWNvbXB1dGVTY2FsZXMoZSl7bGV0e3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LHttaW46byxtYXg6c309WHRlKGUseT0+ZnVuY3Rpb24obix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUsaSk9Pk1hdGgubWluKGUsaS54KSwxLzApfSh5LmJpbnMpLHk9PndWKHkuYmlucywoe3g6eCxkeDpSfSk9PngrUikpLGE9d1YoZSx5PT53Vih5LmJpbnMsKHt5Onh9KT0+eCkpLGw9V2woKS5kb21haW4oW28sc10pLm5pY2UoKSxjPXRoaXMubW9kZSE9PURyLk9WRVJMQVkmJnRoaXMudGltZVByb3BlcnR5PT1uby5XQUxMX1RJTUU/ZW0oKTpXbCgpLGQ9ZS5tYXAoeT0+dGhpcy5nZXRUaW1lVmFsdWUoeSkpLHttaW46dSxtYXg6cH09WHRlKGQseT0+eSksZj1bdSxwXTtjLmRvbWFpbihmKTtsZXQgbT1XbCgpO20uZG9tYWluKFswLGFdKTtsZXQgYj1IZih0aGlzLmNvbG9yfHwiIzAwMCIpLE09V2woKTtyZXR1cm4gTS5kb21haW4oZiksbC5yYW5nZShbMCxpXSksTS5yYW5nZShbYi5icmlnaHRlcigpLGIuZGFya2VyKCldKSxNLmludGVycG9sYXRlKG1MKSx0aGlzLm1vZGU9PT1Eci5PVkVSTEFZPyhjLnJhbmdlKFtyLHJdKSxtLnJhbmdlKFtyLDBdKSk6KGMucmFuZ2UoW3ItKHRoaXMubW9kZT09PURyLk9GRlNFVD9yLXRoaXMubGF5b3V0Lmhpc3RvZ3JhbUhlaWdodDowKSxyXSksbS5yYW5nZShbMCwtdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0XSkpLHtiaW5TY2FsZTpsLGQzQ29sb3JTY2FsZTpNLGNvdW50U2NhbGU6bSx0ZW1wb3JhbFNjYWxlOmN9fXJlbmRlclhBeGlzKCl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXR7d2lkdGg6ZX09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QsaT1mdW5jdGlvbihuKXtyZXR1cm4gVVEoak4sbil9KHRoaXMuc2NhbGVzLmJpblNjYWxlKS50aWNrcyhNYXRoLm1heCgyLGUvMjApKTtpLnRpY2tGb3JtYXQodGhpcy5mb3JtYXR0ZXJzLmJpbk51bWJlciksaShuRCh0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQpKX1nZXRZQXhpc0Zvcm1hdHRlcigpe2lmKHRoaXMubW9kZT09PURyLk9WRVJMQVkpcmV0dXJuIHRoaXMuZm9ybWF0dGVycy5jb3VudDtzd2l0Y2godGhpcy50aW1lUHJvcGVydHkpe2Nhc2Ugbm8uV0FMTF9USU1FOnJldHVybiB0aGlzLmZvcm1hdHRlcnMud2FsbFRpbWU7Y2FzZSBuby5TVEVQOnJldHVybiB0aGlzLmZvcm1hdHRlcnMuc3RlcDtjYXNlIG5vLlJFTEFUSVZFOnJldHVybiB0aGlzLmZvcm1hdHRlcnMucmVsYXRpdmU7ZGVmYXVsdDp0aHJvdyBSYW5nZUVycm9yKGBZIGF4aXMgZm9ybWF0dGVyIGZvciAke3RoaXMudGltZVByb3BlcnR5fSBtdXN0IGJlIGltcGxlbWVudGVkYCl9fWdldE1heFRpY2tzKGUpe2xldHtoZWlnaHQ6aX09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qscj1pLzE1O2lmKHRoaXMudGltZVByb3BlcnR5PT09bm8uU1RFUCl7bGV0W28sc109ZS5kb21haW4oKSxhPU1hdGgubWF4KHMtbysxLDEpO3JldHVybiBNYXRoLm1pbihhLHIpfXJldHVybiByfXJlbmRlcllBeGlzKCl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXQgZT10aGlzLm1vZGU9PT1Eci5PVkVSTEFZP3RoaXMuc2NhbGVzLmNvdW50U2NhbGU6dGhpcy5zY2FsZXMudGVtcG9yYWxTY2FsZSxpPXRoaXMuZ2V0TWF4VGlja3MoZSkscj1mdW5jdGlvbihuKXtyZXR1cm4gVVEoWlQsbil9KGUpLnRpY2tzKE1hdGgubWF4KDIsaSkpO3IudGlja0Zvcm1hdCh0aGlzLmdldFlBeGlzRm9ybWF0dGVyKCkpLHIobkQodGhpcy55QXhpcy5uYXRpdmVFbGVtZW50KSl9ZmluZENsb3Nlc3REYXR1bUluZGV4KGUpe2xldCBpPWUudGFyZ2V0LHI9aTtmb3IoO2kmJmkhPT10aGlzLmhpc3RvZ3JhbXMubmF0aXZlRWxlbWVudDspcj1pLGk9aS5wYXJlbnRFbGVtZW50O3JldHVybiBpP0FycmF5LmZyb20oaS5jaGlsZHJlbikuaW5kZXhPZihyKTotMX1vbk1vdXNlTW92ZUZvclRlc3RPbmx5KGUpe3JldHVybiB0aGlzLm9uTW91c2VNb3ZlKGUpfW9uTW91c2VNb3ZlKGUpe2lmKCF0aGlzLnNjYWxlcylyZXR1cm47bGV0IGk9ZS5vZmZzZXRYLHI9ZS5vZmZzZXRZLG89dGhpcy5maW5kQ2xvc2VzdERhdHVtSW5kZXgoZSk7aWYobzwwKXJldHVybjtsZXQgcz10aGlzLnNjYWxlcy5iaW5TY2FsZS5pbnZlcnQoaSksYT10aGlzLmRhdGFbb10sbD10aGlzLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShhLHMpO3RoaXMudG9vbHRpcERhdGE9e3ZhbHVlOntwb3NpdGlvbjp7eDppLHk6cn0sbGFiZWw6dGhpcy5tb2RlPT09RHIuT0ZGU0VUP3RoaXMuZm9ybWF0dGVycy5jb3VudChsLnkpOmBTdGVwOiAke3RoaXMuZm9ybWF0dGVycy5zdGVwKGEuc3RlcCl9YH0seEF4aXM6e3Bvc2l0aW9uOnRoaXMuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGwpLngsbGFiZWw6dGhpcy5mb3JtYXR0ZXJzLmJpbk51bWJlcihKeChsKSl9LHlBeGlzOntwb3NpdGlvbjp0aGlzLnNjYWxlcy5jb3VudFNjYWxlKHRoaXMubW9kZT09PURyLk9GRlNFVD8wOmwueSksbGFiZWw6dGhpcy5tb2RlPT09RHIuT0ZGU0VUP3RoaXMuZ2V0WUF4aXNGb3JtYXR0ZXIoKSh0aGlzLmdldFRpbWVWYWx1ZShhKSk6dGhpcy5mb3JtYXR0ZXJzLmJpbk51bWJlcihsLnkpfSx4UG9zaXRpb25JbkJpbkNvb3JkOnMsY2xvc2VzdERhdHVtOmEsY2xvc2VzdEJpbjpsfSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQygkdCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWhpc3RvZ3JhbSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihHZShIM2UsNSksR2UoejNlLDUpLEdlKFUzZSw1KSxHZShqM2UsNSksR2UoRzNlLDUpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLm1haW49ci5maXJzdCksU2Uocj1FZSgpKSYmKGkueEF4aXM9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkueUF4aXM9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuY29udGVudD1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5oaXN0b2dyYW1zPXIuZmlyc3QpfX0saW5wdXRzOnttb2RlOiJtb2RlIix0aW1lUHJvcGVydHk6InRpbWVQcm9wZXJ0eSIsY29sb3I6ImNvbG9yIixkYXRhOiJkYXRhIix0aW1lU2VsZWN0aW9uOiJ0aW1lU2VsZWN0aW9uIn0sb3V0cHV0czp7b25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25MaW5rZWRUaW1lVG9nZ2xlZDoib25MaW5rZWRUaW1lVG9nZ2xlZCJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6MjIsdmFyczoxNSxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsMywib25SZXNpemUiLCJvblZpc2liaWxpdHlDaGFuZ2UiXSxbIm1haW4iLCIiXSxbMSwiYXhpcyIsIngtYXhpcyJdLFsieEF4aXMiLCIiXSxbMSwidG9vbHRpcCJdLFszLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwiYXhpcyIsInktYXhpcyJdLFsieUF4aXMiLCIiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50Il0sWyJjb250ZW50IiwiIl0sWzEsImdyaWQiXSxbMywidHJhbnNmb3JtIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImhpc3RvZ3JhbXMiLCIiXSxbMywidHJhbnNmb3JtIiwiaGlzdG9ncmFtIiwibm8tY29sb3IiLCJjb2xvciIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiY2xhc3MiLCJ0b29sdGlwIiw0LCJuZ0lmIl0sWzEsImhpc3RvZ3JhbS1jYXJkLWZvYiIsMywidGltZVNlbGVjdGlvbiIsInN0ZXBzIiwidGVtcG9yYWxTY2FsZSIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIl0sWyJ4MiIsIjEwMCUiLDEsInRpY2siXSxbMywibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJjbGljayJdLFsiY2xhc3MiLCJiYXNlbGluZSIsIngyIiwiMTAwJSIsNCwibmdJZiJdLFsiciIsIjIiLDMsInRyYW5zZm9ybSIsNCwibmdJZiJdLFsieDIiLCIxMDAlIiwxLCJiYXNlbGluZSJdLFsiciIsIjIiXSxbInIiLCIyIiw0LCJuZ0lmIl0sWzEsInZhbHVlLWxhYmVsIl0sWyJ4IiwiMyIsInkiLCItMyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwLDEpLEkoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzaXplKCl9KSgib25WaXNpYmlsaXR5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblZpc2liaWxpdHlDaGFuZ2Uobyl9KSxObigpLGgoMiwic3ZnIiwyKSxQKDMsImciLG51bGwsMyksaCg1LCJnIiw0KSxTKDYsVzNlLDMsMywiZyIsNSksZygpKCksT28oKSxoKDcsImRpdiIsNiksTm4oKSxoKDgsInN2ZyIpLFAoOSwiZyIsbnVsbCw3KSxoKDExLCJnIiw0KSxTKDEyLHEzZSwzLDQsImciLDUpLGcoKSgpLFMoMTMsWTNlLDIsMywibmctY29udGFpbmVyIiw4KSxnKCksaCgxNCwic3ZnIiw5LDEwKSgxNiwiZyIsMTEpLFMoMTcsWDNlLDIsMiwiZyIsMTIpLGcoKSxoKDE4LCJnIixudWxsLDEzKSxTKDIwLEszZSw0LDExLCJnIiwxNCksZygpLFMoMjEsJDNlLDcsNywiZyIsMTUpLGcoKSgpKSwyJmUmJihBcygibWFpbiAiK2kubW9kZSsiICIraS50aW1lUHJvcGVydHkpLHYoNiksXygibmdJZiIsaS50b29sdGlwRGF0YSksdig1KSxUdCgidHJhbnNmb3JtIixpLmdldENzc1RyYW5zbGF0ZVB4KDksMCkpLHYoMSksXygibmdJZiIsaS50b29sdGlwRGF0YSksdigxKSxfKCJuZ0lmIixpLmlzVGltZVNlbGVjdGlvbkVuYWJsZWQoaS50aW1lU2VsZWN0aW9uKSksdig0KSxfKCJuZ0Zvck9mIixpLmdldEdyaWRUaWNrWUxvY3MoKSksdigxKSxudCgiaGlzdG9ncmFtcyIsITApKCJsaW5rZWQtdGltZS1zaW5nbGUtc3RlcCIsaS50aW1lU2VsZWN0aW9uJiYhaS50aW1lU2VsZWN0aW9uLmVuZCksdigyKSxfKCJuZ0Zvck9mIixpLmRhdGEpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeVdhbGxUaW1lKSx2KDEpLF8oIm5nSWYiLGkudG9vbHRpcERhdGEpKX0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXSwgLm1haW5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxMHB4fS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1hcmVhczoiY29udGVudCB5LWF4aXMiICJ4LWF4aXMgLiI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciA1MHB4O2dyaWQtdGVtcGxhdGUtcm93czoxZnIgMzBweH0ubWFpbi53YWxsX3RpbWVbX25nY29udGVudC0lQ09NUCVde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgNzVweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0sIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxMHB4fS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZmlsbDpjdXJyZW50Q29sb3J9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOmlkZW9ncmFwaGljO3RleHQtYW5jaG9yOnN0YXJ0fS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICB7Y29sb3I6IzYxNjE2MTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgIHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5kb21haW4sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgdGV4dHtkaXNwbGF5Om5vbmV9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljazpudGgtY2hpbGQoMm4rMSkgdGV4dHtkaXNwbGF5OmluaXRpYWx9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOnZpc2libGVQYWludGVkfXN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIHN2Z1tfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZX1zdmdbX25nY29udGVudC0lQ09NUCVdICAgZ1tfbmdjb250ZW50LSVDT01QJV17d2lsbC1jaGFuZ2U6dHJhbnNmb3JtfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp4LWF4aXN9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6aGFuZ2luZzt0ZXh0LWFuY2hvcjptaWRkbGV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnktYXhpcztvdmVyZmxvdzpjbGlwIHZpc2libGV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6bWlkZGxlO3RleHQtYW5jaG9yOnN0YXJ0fS5oaXN0b2dyYW0tY2FyZC1mb2JbX25nY29udGVudC0lQ09NUCVde2xlZnQ6OXB4O3Bvc2l0aW9uOmFic29sdXRlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5le3N0cm9rZTojZGRkfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5le3N0cm9rZTojNTU1fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6Y29udGVudDtvdmVyZmxvdzp2aXNpYmxlO3otaW5kZXg6MX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtZGFzaGFycmF5OjJ9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17ZmlsbDpjdXJyZW50Q29sb3I7c3Ryb2tlLW9wYWNpdHk6LjY7c3Ryb2tlLXdpZHRoOjFweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2ZpbHRlcjpkcm9wLXNoYWRvdygwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC42KSk7c3Ryb2tlOiNmZmY7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLW9wYWNpdHk6LjE7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2U6Y3VycmVudENvbG9yO3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2U6Y3VycmVudENvbG9yO2ZpbGw6cmdiYSgwLDAsMCwwKX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjIxLDIyMSwyMjEsLjQpICFpbXBvcnRhbnR9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS1vcGFjaXR5Oi4yfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSg1MSw1MSw1MSwuNCkgIWltcG9ydGFudH0ub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojZmZmfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Lm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtcy5saW5rZWQtdGltZS1zaW5nbGUtc3RlcFtfbmdjb250ZW50LSVDT01QJV0gICBbX25nY29udGVudC0lQ09NUCVdOm5vdCgubm8tY29sb3IpICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiMwMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtcy5saW5rZWQtdGltZS1zaW5nbGUtc3RlcFtfbmdjb250ZW50LSVDT01QJV0gICBbX25nY29udGVudC0lQ09NUCVdOm5vdCgubm8tY29sb3IpICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXMubGlua2VkLXRpbWUtc2luZ2xlLXN0ZXBbX25nY29udGVudC0lQ09NUCVdICAgW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLm5vLWNvbG9yKSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojZmZmfS5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5le2Rpc3BsYXk6bm9uZX0ub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsLW9wYWNpdHk6MDtzdHJva2U6Y3VycmVudENvbG9yfS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9Lm1haW5bX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW5bX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB3VihuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpKT0+TWF0aC5tYXgoZSx0KGkpKSwtMS8wKX1mdW5jdGlvbiBYdGUobix0LGUpe2V8fChlPXQpO2xldCBpPTEvMCxyPS0xLzA7Zm9yKGxldCBvIG9mIG4paT1NYXRoLm1pbihpLHQobykpLHI9TWF0aC5tYXgocixlKG8pKTtyZXR1cm57bWluOmksbWF4OnJ9fWZ1bmN0aW9uIEp4KG4pe3JldHVybiBuLngrLjUqbi5keH1mdW5jdGlvbiBuQmUobix0KXsxJm4mJihoKDAsInNwYW4iLDE0KSxQKDEsIm1hdC1zcGlubmVyIiwxNSksZygpKX1mdW5jdGlvbiBpQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJ0Yi1oaXN0b2dyYW0iLDE2KSxJKCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQocikpfSkoIm9uTGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksZygpfWlmKDImbil7bGV0IGU9dygpO18oImRhdGEiLGUuZGF0YSkoIm1vZGUiLGUubW9kZSkoInRpbWVQcm9wZXJ0eSIsZS50aW1lUHJvcGVydHkoZS54QXhpc1R5cGUpKSgiY29sb3IiLGUucnVuQ29sb3JTY2FsZShlLnJ1bklkKSkoInRpbWVTZWxlY3Rpb24iLGUuY29udmVydFRvVGltZVNlbGVjdGlvbihlLmxpbmtlZFRpbWVTZWxlY3Rpb24pKX19ZnVuY3Rpb24gckJlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDE4KSxUKDEsIiBEYXRhIGZhaWxlZCB0byBsb2FkLiAiKSxnKCkpfWZ1bmN0aW9uIG9CZShuLHQpe2lmKDEmbiYmUygwLHJCZSwyLDAsImRpdiIsMTcpLDImbil7bGV0IGU9dygpO18oIm5nSWYiLGUubG9hZFN0YXRlPT09ZS5EYXRhTG9hZFN0YXRlLkZBSUxFRCl9fXZhciBzQmU9ZnVuY3Rpb24obil7cmV0dXJue2JhY2tncm91bmRDb2xvcjpufX0sUXRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkRhdGFMb2FkU3RhdGU9VGUsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBGLHRoaXMub25QaW5DbGlja2VkPW5ldyBGLHRoaXMub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRix0aGlzLm9uTGlua2VkVGltZVRvZ2dsZWQ9bmV3IEZ9dGltZVByb3BlcnR5KGUpe3N3aXRjaChlKXtjYXNlIFBpLlNURVA6cmV0dXJuIG5vLlNURVA7Y2FzZSBQaS5XQUxMX1RJTUU6cmV0dXJuIG5vLldBTExfVElNRTtjYXNlIFBpLlJFTEFUSVZFOnJldHVybiBuby5SRUxBVElWRTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCB4QXhpc1R5cGUgZm9yIGhpc3RvZ3JhbSB0aW1lIHByb3BlcnR5LiIpfX1jb252ZXJ0VG9UaW1lU2VsZWN0aW9uKGUpe3JldHVybiBudWxsPT09ZT9udWxsOntzdGFydDp7c3RlcDplLnN0YXJ0U3RlcH0sZW5kOmUuZW5kU3RlcD97c3RlcDplLmVuZFN0ZXB9Om51bGx9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1jb21wb25lbnQiXV0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixkYXRhOiJkYXRhIixtb2RlOiJtb2RlIix4QXhpc1R5cGU6InhBeGlzVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsc2hvd0Z1bGxXaWR0aDoic2hvd0Z1bGxXaWR0aCIsaXNQaW5uZWQ6ImlzUGlubmVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIixvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZGVjbHM6MTYsdmFyczoxNCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGEgaGlzdG9ncmFtIGNhcmQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxbWzEsImhlYWRpbmciXSxbMSwidGFnIl0sWzMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsInJ1biJdLFsxLCJkb3QiLDMsIm5nU3R5bGUiXSxbMSwicnVuLXRleHQiLDMsInJ1bklkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzMsImRhdGEiLCJtb2RlIiwidGltZVByb3BlcnR5IiwiY29sb3IiLCJ0aW1lU2VsZWN0aW9uIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9EYXRhIiwiIl0sWzEsInNwaW5uZXIiXSxbImRpYW1ldGVyIiwiMTgiXSxbMywiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvciIsInRpbWVTZWxlY3Rpb24iLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoaCgwLCJkaXYiLDApKDEsImRpdiIsMSksUCgyLCJ0Yi10cnVuY2F0ZWQtcGF0aCIsMikoMywidmlzLWxpbmtlZC10aW1lLXNlbGVjdGlvbi13YXJuaW5nIiwzKSxnKCksaCg0LCJkaXYiLDQpLFAoNSwic3BhbiIsNSkoNiwiY2FyZC1ydW4tbmFtZSIsNiksZygpLGgoNywic3BhbiIsNykoOCwiYnV0dG9uIiw4KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxQKDksIm1hdC1pY29uIiw5KSxnKCksaCgxMCwiYnV0dG9uIiwxMCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxQKDExLCJtYXQtaWNvbiIsOSksZygpKCksUygxMixuQmUsMiwwLCJzcGFuIiwxMSksZygpLFMoMTMsaUJlLDEsNSwidGItaGlzdG9ncmFtIiwxMiksUygxNCxvQmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMyxXdCkpLDImZSl7bGV0IHI9aXQoMTUpO3YoMiksXygidGl0bGUiLGkudGFnKSgidmFsdWUiLGkudGl0bGUpLHYoMSksXygiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCksdigyKSxfKCJuZ1N0eWxlIixJbigxMixzQmUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSksdigxKSxfKCJydW5JZCIsaS5ydW5JZCksdigyKSxCZSgidGl0bGUiLGkuaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLHYoMSksXygic3ZnSWNvbiIsaS5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSx2KDIpLF8oInN2Z0ljb24iLGkuc2hvd0Z1bGxXaWR0aD8iZnVsbHNjcmVlbl9leGl0XzI0cHgiOiJmdWxsc2NyZWVuXzI0cHgiKSx2KDEpLF8oIm5nSWYiLGkubG9hZFN0YXRlPT09aS5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLHYoMSksXygibmdJZiIsaS5kYXRhJiZpLmRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltGZSxwdSxmQSwkaSxFbix0bCxxVCxYZyxRZ10sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJ0YWcgY29udHJvbHMiICJydW4gc3Bpbm5lciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206NHB4fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweDtncmlkLWFyZWE6dGFnO292ZXJmbG93OmhpZGRlbn0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWRbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjB9LnJ1bltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnJ1bjtkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtc2l6ZToxM3B4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7Z3JpZC1hcmVhOmNvbnRyb2xzO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Z3JpZC1hcmVhOnNwaW5uZXI7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17dG9wOjA7cmlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZX10Yi1oaXN0b2dyYW1bX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFp0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRix0aGlzLm1vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KHQxKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoT2wpLHRoaXMuc2hvd0Z1bGxXaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QocWEpLnBpcGUoTihpPT5pW3RoaXMuY2FyZElkXT8uZnVsbFdpZHRoKSl9aXNIaXN0b2dyYW1DYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09em4uSElTVE9HUkFNU31vbkZ1bGxTaXplVG9nZ2xlKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChCZyh7Y2FyZElkOnRoaXMuY2FyZElkfSkpfW5nT25Jbml0KCl7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoV2EsdGhpcy5jYXJkSWQpLnBpcGUoa2Uobz0+ISFvJiZ0aGlzLmlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKG8pKSxOKG89Pm8pKSxyPWRuKFtpLHRoaXMuc3RvcmUuc2VsZWN0KEN1LHRoaXMuY2FyZElkKV0pO3RoaXMuZGF0YSQ9ci5waXBlKE4oKFtvLHNdKT0+e2xldCBhPW8ucnVuSWQ7cmV0dXJuIHMmJnMuaGFzT3duUHJvcGVydHkoYSk/ZnVuY3Rpb24obix0PTMwKXtpZighbi5sZW5ndGh8fHQ8MSlyZXR1cm5bXTtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1udWxsLGU9bnVsbDtmb3IobGV0e2JpbnM6aX1vZiBuKXtpZighaS5sZW5ndGgpY29udGludWU7bGV0IHI9aVtpLmxlbmd0aC0xXSxvPWlbMF0ueCxzPXIueCtyLmR4OyhudWxsPT09dHx8bzx0KSYmKHQ9byksKG51bGw9PT1lfHxzPmUpJiYoZT1zKX1yZXR1cm4gbnVsbD09PXR8fG51bGw9PT1lP251bGw6e2xlZnQ6dCxyaWdodDplfX0obik7cmV0dXJuIGUmJmUubGVmdD09PWUucmlnaHQmJihlLnJpZ2h0PTEuMSplLnJpZ2h0KzEsZS5sZWZ0PWUubGVmdC8xLjEtMSksbi5tYXAoaT0+KHtzdGVwOmkuc3RlcCx3YWxsVGltZTppLndhbGxUaW1lLGJpbnM6ZT9PM2UoaS5iaW5zLGUsdCk6W119KSl9KHNbYV0ubWFwKGQ9PntsZXR7d2FsbFRpbWU6dSxzdGVwOnB9PWQ7cmV0dXJue3dhbGxUaW1lOnUsc3RlcDpwLGJpbnM6ZC5iaW5zLm1hcChtPT4oe3g6bS5taW4sZHg6bS5tYXgtbS5taW4seTptLmNvdW50fSkpfX0pKTpbXX0pKSx0aGlzLnN0ZXBzJD10aGlzLmRhdGEkLnBpcGUoTihvPT5vLm1hcChzPT5zLnN0ZXApKSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD1kbihbdGhpcy5zdG9yZS5zZWxlY3QoRXUpLHRoaXMuc3RlcHMkLHRoaXMuc3RvcmUuc2VsZWN0KFN1KV0pLnBpcGUoTigoW28scyxhXSk9PntpZighbylyZXR1cm4gbnVsbDtsZXQgbD0xLzAsYz0tMS8wO2ZvcihsZXQgcCBvZiBzKWw9TWF0aC5taW4ocCxsKSxjPU1hdGgubWF4KHAsYyk7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7aWYobnVsbCE9PW4uZW5kU3RlcClyZXR1cm4gbjtsZXQgZT1mdW5jdGlvbihuLHQpe2xldCBlPTEvMCxpPW51bGw7Zm9yKGxldCByIG9mIHQpe2xldCBvPU1hdGguYWJzKG4tcik7bzxlJiYoZT1vLGk9cil9cmV0dXJuIGl9KG4uc3RhcnRTdGVwLHQpO3JldHVybiBudWxsIT09ZT97Li4ubixzdGFydFN0ZXA6ZX06bn0oVWgoQUYobyxhKSxsLGMpLHMpfSkpLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJD1kbihbdGhpcy5zdG9yZS5zZWxlY3QoRXUpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiRdKS5waXBlKE4oKFtvLHNdKT0+byYmcyYmIXMuY2xpcHBlZCYmbnVsbD09PW8uZW5kJiZvLnN0YXJ0LnN0ZXAhPT1zLnN0YXJ0U3RlcCkpLHRoaXMubG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChfZCx0aGlzLmNhcmRJZCksdGhpcy50YWckPWkucGlwZShOKG89Pm8udGFnKSksdGhpcy50aXRsZSQ9dGhpcy50YWckLnBpcGUoTihvPT5ZZyhvLHRoaXMuZ3JvdXBOYW1lKSkpLHRoaXMucnVuSWQkPWkucGlwZShOKG89Pm8ucnVuSWQpKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdChNdSx0aGlzLmNhcmRJZCl9b25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGtmKGUpKX1vbkxpbmtlZFRpbWVUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChJZCh7YWZmb3JkYW5jZTpZcy5GT0JfREVTRUxFQ1R9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZCJdXSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e3BpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MTIsdmFyczozNCxjb25zdHM6W1szLCJsb2FkU3RhdGUiLCJ0aXRsZSIsInRhZyIsInJ1bklkIiwiZGF0YSIsIm1vZGUiLCJ4QXhpc1R5cGUiLCJydW5Db2xvclNjYWxlIiwic2hvd0Z1bGxXaWR0aCIsImlzUGlubmVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwibGlua2VkVGltZVNlbGVjdGlvbiIsIm9uRnVsbFNpemVUb2dnbGUiLCJvblBpbkNsaWNrZWQiLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50IiwwKSxJKCJvbkZ1bGxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uRnVsbFNpemVUb2dnbGUoKX0pKCJvblBpbkNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnBpblN0YXRlQ2hhbmdlZC5lbWl0KG8pfSkoIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQobyl9KSgib25MaW5rZWRUaW1lVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVUb2dnbGVkKCl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpLGooOSwiYXN5bmMiKSxqKDEwLCJhc3luYyIpLGooMTEsImFzeW5jIiksZygpKSwyJmUmJl8oImxvYWRTdGF0ZSIsVygxLDEyLGkubG9hZFN0YXRlJCkpKCJ0aXRsZSIsVygyLDE0LGkudGl0bGUkKSkoInRhZyIsVygzLDE2LGkudGFnJCkpKCJydW5JZCIsVyg0LDE4LGkucnVuSWQkKSkoImRhdGEiLFcoNSwyMCxpLmRhdGEkKSkoIm1vZGUiLFcoNiwyMixpLm1vZGUkKSkoInhBeGlzVHlwZSIsVyg3LDI0LGkueEF4aXNUeXBlJCkpKCJydW5Db2xvclNjYWxlIixpLnJ1bkNvbG9yU2NhbGUpKCJzaG93RnVsbFdpZHRoIixXKDgsMjYsaS5zaG93RnVsbFdpZHRoJCkpKCJpc1Bpbm5lZCIsVyg5LDI4LGkuaXNQaW5uZWQkKSkoImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsVygxMCwzMCxpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxMSwzMixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSl9LGRlcGVuZGVuY2llczpbUXRlLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gY0JlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiaW1hZ2UtY2FyZCIsNiksSSgiZnVsbFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uRnVsbFdpZHRoQ2hhbmdlZChyKSl9KSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiBkQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzY2FsYXItY2FyZCIsNyksSSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpfX1mdW5jdGlvbiB1QmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJoaXN0b2dyYW0tY2FyZCIsOCksSSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiBwQmUobix0KXtpZigxJm4mJihoKDAsImRpdiIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMik7digxKSxIZSgiUGxhY2Vob2xkZXIgZXJyb3IgZm9yOiAiLGUuY2FyZElkLCIiKX19ZnVuY3Rpb24gZkJlKG4sdCl7aWYoMSZuJiYoT3QoMCwxKSxTKDEsY0JlLDEsMywiaW1hZ2UtY2FyZCIsMiksUygyLGRCZSwxLDIsInNjYWxhci1jYXJkIiwzKSxTKDMsdUJlLDEsMywiaGlzdG9ncmFtLWNhcmQiLDQpLFMoNCxwQmUsMiwxLCJkaXYiLDUpLGt0KCkpLDImbil7bGV0IGU9dygpO18oIm5nU3dpdGNoIixlLnBsdWdpblR5cGUpLHYoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSU1BR0VTKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLlNDQUxBUlMpLHYoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9fXZhciBLdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT16bix0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEYsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRix0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRn1vbkZ1bGxXaWR0aENoYW5nZWQoZSl7dGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQoZSl9b25GdWxsSGVpZ2h0Q2hhbmdlZChlKXt0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQoZSl9b25QaW5TdGF0ZUNoYW5nZWQoKXt0aGlzLnBpblN0YXRlQ2hhbmdlZC5lbWl0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0V2ZXJWaXNpYmxlOiJpc0V2ZXJWaXNpYmxlIixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHBsdWdpblR5cGU6InBsdWdpblR5cGUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBpblN0YXRlQ2hhbmdlZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZTKDAsZkJlLDUsNCwibmctY29udGFpbmVyIiwwKSwyJmUmJl8oIm5nSWYiLGkuaXNFdmVyVmlzaWJsZSl9LGRlcGVuZGVuY2llczpbRmUsc3IsU3IsdXUsUlEsV3RlLFp0ZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSnRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuaXNFdmVyVmlzaWJsZT0hMSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEYsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRix0aGlzLnJ1bkNvbG9yU2NhbGUkPXRoaXMuc3RvcmUuc2VsZWN0KEF1KS5waXBlKGFjKDM1MCx2b2lkIDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KSxOKGk9PnI9PmkuaGFzT3duUHJvcGVydHkocik/aVtyXToiI2ZmZiIpKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuaXNFdmVyVmlzaWJsZT10aGlzLmlzRXZlclZpc2libGV8fGV9b25GdWxsV2lkdGhDaGFuZ2VkKGUpe3RoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSl7dGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KGUpfW9uUGluU3RhdGVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5zZWxlY3QoTXUsdGhpcy5jYXJkSWQpLnBpcGUoWXQoMSksQnQodGhpcy5zdG9yZS5zZWxlY3QoQ1cpKSkuc3Vic2NyaWJlKChbZSxpXSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEhnKHtjYXJkSWQ6dGhpcy5jYXJkSWQsY2FuQ3JlYXRlTmV3UGluczppLHdhc1Bpbm5lZDplfSkpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXZpZXciXV0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHBsdWdpblR5cGU6InBsdWdpblR5cGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQifSxkZWNsczoyLHZhcnM6Nyxjb25zdHM6W1sib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsImludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luIiwiMjAwcHggMjAwcHggMjAwcHggMjAwcHgiLDMsImlzRXZlclZpc2libGUiLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwbHVnaW5UeXBlIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsIm9uVmlzaWJpbGl0eUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiY2FyZC12aWV3LWNvbXBvbmVudCIsMCksSSgiZnVsbFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GdWxsV2lkdGhDaGFuZ2VkKG8pfSkoImZ1bGxIZWlnaHRDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkZ1bGxIZWlnaHRDaGFuZ2VkKG8pfSkoInBpblN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpblN0YXRlQ2hhbmdlZCgpfSkoIm9uVmlzaWJpbGl0eUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WaXNpYmlsaXR5Q2hhbmdlKG8pfSksaigxLCJhc3luYyIpLGcoKSksMiZlJiZfKCJpc0V2ZXJWaXNpYmxlIixpLmlzRXZlclZpc2libGUpKCJjYXJkSWQiLGkuY2FyZElkKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSkoInBsdWdpblR5cGUiLGkucGx1Z2luVHlwZSkoInJ1bkNvbG9yU2NhbGUiLFcoMSw1LGkucnVuQ29sb3JTY2FsZSQpKX0sZGVwZW5kZW5jaWVzOltxZyxLdGUsY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBfQmUobix0KXsxJm4mJmxpKDApfXZhciBiQmU9ZnVuY3Rpb24obix0KXtyZXR1cm57ImZ1bGwtd2lkdGgiOm4sImZ1bGwtaGVpZ2h0Ijp0fX07ZnVuY3Rpb24gdkJlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw1KSgxLCJjYXJkLXZpZXciLDYpLEkoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKHIpe2xldCBzPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoMikub25GdWxsV2lkdGhDaGFuZ2VkKHMuY2FyZElkLHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7bGV0IHM9WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5vbkZ1bGxIZWlnaHRDaGFuZ2VkKHMuY2FyZElkLHIpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO18oIm5nQ2xhc3MiLHFyKDYsYkJlLGkuY2FyZHNBdEZ1bGxXaWR0aC5oYXMoZS5jYXJkSWQpfHwobnVsbD09aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdP251bGw6aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdLmZ1bGxXaWR0aCksaS5jYXJkc0F0RnVsbEhlaWdodC5oYXMoZS5jYXJkSWQpfHwobnVsbD09aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdP251bGw6aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdLnRhYmxlRXhwYW5kZWQpKSksdigxKSxfKCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSkoInBsdWdpblR5cGUiLGUucGx1Z2luKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikoImNhcmRMYXp5TG9hZGVyIixlLmNhcmRJZCl9fWZ1bmN0aW9uIHlCZShuLHQpezEmbiYmbGkoMCl9dmFyIHhCZT1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITF9fSxDQmU9ZnVuY3Rpb24oKXtyZXR1cm57aXNCb3R0b21Db250cm9sOiEwfX07ZnVuY3Rpb24gTUJlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiKSxTKDEsX0JlLDEsMCwibmctY29udGFpbmVyIiwyKSxoKDIsImRpdiIsMyksUygzLHZCZSwyLDksImRpdiIsNCksZygpLFMoNCx5QmUsMSwwLCJuZy1jb250YWluZXIiLDIpLGcoKSksMiZuKXtsZXQgZT13KCksaT1pdCgyKTt2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsY3UoOCx4QmUpKSx2KDEpLFR0KCJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLGUuZ3JpZFRlbXBsYXRlQ29sdW1uKSx2KDEpLF8oIm5nRm9yT2YiLGUuY2FyZElkc1dpdGhNZXRhZGF0YSkoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5Q2FyZHMpLHYoMSksXygibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixjdSg5LENCZSkpfX1mdW5jdGlvbiB3QmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDEyKSxJKCJjbGljayIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KDMpO3JldHVybiBRKG8uaGFuZGxlUGFnZUNoYW5nZShvLnBhZ2VJbmRleC0xLHIudGFyZ2V0KSl9KSxUKDEsIiBQcmV2aW91cyAiKSxnKCl9MiZuJiZfKCJkaXNhYmxlZCIsMD09PXcoMykucGFnZUluZGV4KX1mdW5jdGlvbiBTQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzcGFuIiwxNSkoMSwiaW5wdXQiLDE2KSxJKCJpbnB1dCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodyg0KS5vblBhZ2luYXRpb25JbnB1dENoYW5nZShyKSl9KSxnKCksVCgyKSxnKCl9aWYoMiZuKXtsZXQgZT13KDQpO3YoMSksXygidmFsdWUiLGUucGFnZUluZGV4KzEpKCJtYXgiLGUubnVtUGFnZXMpLHYoMSksSGUoIiBvZiAiLGUubnVtUGFnZXMsIiIpfX1mdW5jdGlvbiBFQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzcGFuIiksUygxLFNCZSwzLDMsInNwYW4iLDEzKSxoKDIsImJ1dHRvbiIsMTQpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMyk7cmV0dXJuIFEoby5oYW5kbGVQYWdlQ2hhbmdlKG8ucGFnZUluZGV4KzEsci50YXJnZXQpKX0pLFQoMywiIE5leHQgIiksZygpKCl9aWYoMiZuKXtsZXQgZT13KDIpLmlzQm90dG9tQ29udHJvbCxpPXcoKTt2KDEpLF8oIm5nSWYiLGkuc2hvd1BhZ2luYXRpb25JbnB1dChlKSksdigxKSxfKCJkaXNhYmxlZCIsaS5wYWdlSW5kZXgrMT49aS5udW1QYWdlcyl9fWZ1bmN0aW9uIFRCZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw4KSgxLCJzcGFuIiw5KSxTKDIsd0JlLDIsMSwiYnV0dG9uIiwxMCksZygpLGgoMywic3BhbiIsMTEpLFMoNCxFQmUsNCwyLCJzcGFuIiwwKSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoMiksXygibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSx2KDIpLF8oIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25Db250cm9scyl9fWZ1bmN0aW9uIERCZShuLHQpezEmbiYmUygwLFRCZSw1LDIsImRpdiIsNyksMiZuJiZfKCJuZ0lmIix3KCkuc2hvd1BhZ2luYXRpb25Db250cm9scyl9dmFyICR0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2RrU2Nyb2xsYWJsZT1lLHRoaXMuUGx1Z2luVHlwZT16bix0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj0iIix0aGlzLmNhcmRzQXRGdWxsV2lkdGg9bmV3IFNldCx0aGlzLmNhcmRzQXRGdWxsSGVpZ2h0PW5ldyBTZXQsdGhpcy5wYWdlSW5kZXhDaGFuZ2VkPW5ldyBGfW5nT25Jbml0KCl7dGhpcy5pc0NhcmRXaWR0aFZhbGlkKHRoaXMuY2FyZE1pbldpZHRoKSYmKHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPWByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoJHt0aGlzLmNhcmRNaW5XaWR0aH1weCwgMWZyKSlgKX1uZ09uQ2hhbmdlcyhlKXtpZihlLmNhcmRNaW5XaWR0aCl7bGV0IGk9ZS5jYXJkTWluV2lkdGguY3VycmVudFZhbHVlO3RoaXMuaXNDYXJkV2lkdGhWYWxpZChpKT8odGhpcy5jYXJkTWluV2lkdGg9aSx0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj1gcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KCR7dGhpcy5jYXJkTWluV2lkdGh9cHgsIDFmcikpYCk6dGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49IiJ9fWlzQ2FyZFdpZHRoVmFsaWQoZSl7cmV0dXJuIGUmJmU+PTMzNSYmZTw9NzM1fXNob3dQYWdpbmF0aW9uSW5wdXQoZSl7cmV0dXJuIGV9aGFuZGxlUGFnZUNoYW5nZShlLGkpe2xldCByPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNjcm9sbFRvS2VlcFRhcmdldFBvc2l0aW9uKGkscil9LDApLHRoaXMucGFnZUluZGV4Q2hhbmdlZC5lbWl0KGUpfXNjcm9sbFRvS2VlcFRhcmdldFBvc2l0aW9uKGUsaSl7bGV0IHI9dGhpcy5jZGtTY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtyJiZyLnNjcm9sbFRvKDAsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtaStyLnNjcm9sbFRvcCl9dHJhY2tCeUNhcmRzKGUsaSl7cmV0dXJuIGkuY2FyZElkfW9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKGUpe2xldCBpPWUudGFyZ2V0O2lmKCJpbnB1dCI9PT1lLnR5cGUmJiIiPT09aS52YWx1ZSlyZXR1cm47bGV0IHI9TnVtYmVyKGkudmFsdWUpLTEsbz1NYXRoLm1pbihNYXRoLm1heCgwLHIpLHRoaXMubnVtUGFnZXMtMSk7aS52YWx1ZSE9PVN0cmluZyhvKzEpJiYoaS52YWx1ZT1TdHJpbmcobysxKSksdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKG8saSl9b25GdWxsV2lkdGhDaGFuZ2VkKGUsaSl7aT90aGlzLmNhcmRzQXRGdWxsV2lkdGguYWRkKGUpOnRoaXMuY2FyZHNBdEZ1bGxXaWR0aC5kZWxldGUoZSl9b25GdWxsSGVpZ2h0Q2hhbmdlZChlLGkpe2k/dGhpcy5jYXJkc0F0RnVsbEhlaWdodC5hZGQoZSk6dGhpcy5jYXJkc0F0RnVsbEhlaWdodC5kZWxldGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQ2QsOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudCJdXSxpbnB1dHM6e2lzR3JvdXBFeHBhbmRlZDoiaXNHcm91cEV4cGFuZGVkIixwYWdlSW5kZXg6InBhZ2VJbmRleCIsbnVtUGFnZXM6Im51bVBhZ2VzIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixjYXJkTWluV2lkdGg6ImNhcmRNaW5XaWR0aCIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLHNob3dQYWdpbmF0aW9uQ29udHJvbHM6InNob3dQYWdpbmF0aW9uQ29udHJvbHMiLGNhcmRTdGF0ZU1hcDoiY2FyZFN0YXRlTWFwIn0sb3V0cHV0czp7cGFnZUluZGV4Q2hhbmdlZDoicGFnZUluZGV4Q2hhbmdlZCJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6Myx2YXJzOjEsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgc2V0cyBhIGdyb3VwIHRvIHRoZSBwcmV2aW91cyBwYWdlLuKQnzU3NWU3ODJmZDI3ZjJlZTcwYTAzNGE3NzVlZmU5YWQxNjI0NzIyNTDikJ8zNjI5OTYwNTQ0ODc1MzYwMDQ2OlByZXZpb3VzIHBhZ2VgLGU9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgbmV4dCBwYWdlLuKQn2NlM2NlZmIxY2QwMDk5YWE1MDAzZGRhMTZlYzllYjIxZmQ4YmE3ODnikJ8zMzM3MzAxNjk0MjEwMjg3NTk1Ok5leHQgcGFnZWAsW1s0LCJuZ0lmIl0sWyJncm91cENvbnRyb2xzIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjYXJkLWdyaWQiXSxbImNsYXNzIiwiY2FyZC1zcGFjZSIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsImNhcmQtc3BhY2UiLDMsIm5nQ2xhc3MiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsImNhcmRPYnNlcnZlciIsImNhcmRMYXp5TG9hZGVyIiwiZnVsbFdpZHRoQ2hhbmdlZCIsImZ1bGxIZWlnaHRDaGFuZ2VkIl0sWyJjbGFzcyIsImdyb3VwLWNvbnRyb2xzIiw0LCJuZ0lmIl0sWzEsImdyb3VwLWNvbnRyb2xzIl0sWzEsInByZXYtY29udGFpbmVyIl0sWyJjbGFzcyIsInByZXYgcGFnaW5hdGlvbi1idXR0b24iLCJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImlucHV0LWFuZC1uZXh0LWNvbnRhaW5lciJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwicHJldiIsInBhZ2luYXRpb24tYnV0dG9uIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJjbGFzcyIsInBhZ2luYXRpb24taW5wdXQiLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsIm5leHQiLCJwYWdpbmF0aW9uLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJwYWdpbmF0aW9uLWlucHV0Il0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsMywidmFsdWUiLCJtYXgiLCJpbnB1dCIsImNoYW5nZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsTUJlLDUsMTAsImRpdiIsMCksUygxLERCZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDEsV3QpKSwyJmUmJl8oIm5nSWYiLGkuaXNHcm91cEV4cGFuZGVkKX0sZGVwZW5kZW5jaWVzOltsUSxKdGUseW4sbm4sRmUsTHIsSmldLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29udGFpbjpjb250ZW50fS5jYXJkLWdyaWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDMzNXB4LCAxZnIpKTtnYXA6MTZweDtwYWRkaW5nOjE2cHh9LmNhcmQtc3BhY2UuZnVsbC13aWR0aFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1jb2x1bW4tc3RhcnQ6MTtncmlkLWNvbHVtbi1lbmQ6LTF9LmNhcmQtc3BhY2UuZnVsbC1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6NDgwcHh9LmNhcmQtc3BhY2UuZnVsbC1oZWlnaHRbX25nY29udGVudC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX1jYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGFpbjpsYXlvdXQgcGFpbnQ7ZGlzcGxheTpibG9jazttaW4taGVpZ2h0OjMyMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6Y2VudGVyO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1vZi10eXBle3BhZGRpbmctdG9wOjE2cHh9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LW9mLXR5cGV7cGFkZGluZy1ib3R0b206MTZweH0ucHJldi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktc2VsZjpmbGV4LXN0YXJ0fS5pbnB1dC1hbmQtbmV4dC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktc2VsZjpmbGV4LWVuZH0ucGFnaW5hdGlvbi1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjE2cHh9LnBhZ2luYXRpb24taW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdH0ucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHBfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZ3JvdXBOYW1lPW51bGwsdGhpcy5ncm91cE5hbWUkPW5ldyBBaShudWxsKSx0aGlzLnBhZ2VJbmRleCQ9bmV3IEFpKDApLHRoaXMuaXRlbXMkPW5ldyBBaShbXSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZSx0aGlzLmNhcmRTdGF0ZU1hcCQ9dGhpcy5zdG9yZS5zZWxlY3QocWEpLHRoaXMubnVtUGFnZXMkPWRuKFt0aGlzLml0ZW1zJCx0aGlzLnN0b3JlLnNlbGVjdChCcy5nZXRQYWdlU2l6ZSldKS5waXBlKE4oKFtpLHJdKT0+TWF0aC5jZWlsKGkubGVuZ3RoL3IpKSksdGhpcy5pc0dyb3VwRXhwYW5kZWQkPXRoaXMuZ3JvdXBOYW1lJC5waXBlKEpuKGk9Pm51bGwhPT1pP3RoaXMuc3RvcmUuc2VsZWN0KHMxLGkpOkh0KCEwKSkpLHRoaXMuc2hvd1BhZ2luYXRpb25Db250cm9scyQ9dGhpcy5udW1QYWdlcyQucGlwZShOKGk9Pmk+MSkpLHRoaXMubm9ybWFsaXplZFBhZ2VJbmRleCQ9ZG4oW3RoaXMucGFnZUluZGV4JCx0aGlzLm51bVBhZ2VzJF0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxOdCgoW2kscl0pPT57MCE9PXImJihpPj1yP3RoaXMucGFnZUluZGV4JC5uZXh0KHItMSk6aTwwJiZ0aGlzLnBhZ2VJbmRleCQubmV4dCgwKSl9KSxOKChbaSxyXSk9Pk1hdGgubWluKE1hdGgubWF4KGksMCksci0xKSksTXMoMSkpLHRoaXMucGFnZWRJdGVtcyQ9ZG4oW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KEJzLmdldFBhZ2VTaXplKSx0aGlzLm5vcm1hbGl6ZWRQYWdlSW5kZXgkLHRoaXMuaXNHcm91cEV4cGFuZGVkJF0pLnBpcGUoTigoW2kscixvLHNdKT0+aS5zbGljZShyKm8scipvKyhzP3I6MCkpKSksdGhpcy5jYXJkTWluV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KFhoKX1uZ09uQ2hhbmdlcyhlKXtlLmNhcmRJZHNXaXRoTWV0YWRhdGEmJnRoaXMuaXRlbXMkLm5leHQodGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhKSxlLmdyb3VwTmFtZSYmdGhpcy5ncm91cE5hbWUkLm5leHQodGhpcy5ncm91cE5hbWUpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1vblBhZ2VJbmRleENoYW5nZWQoZSl7dGhpcy5wYWdlSW5kZXgkLm5leHQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZCJdXSxpbnB1dHM6e2dyb3VwTmFtZToiZ3JvdXBOYW1lIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6OCx2YXJzOjIyLGNvbnN0czpbWzMsImlzR3JvdXBFeHBhbmRlZCIsInBhZ2VJbmRleCIsIm51bVBhZ2VzIiwic2hvd1BhZ2luYXRpb25Db250cm9scyIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkTWluV2lkdGgiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkU3RhdGVNYXAiLCJwYWdlSW5kZXhDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiLDApLEkoInBhZ2VJbmRleENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGFnZUluZGV4Q2hhbmdlZChvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxnKCkpLDImZSYmXygiaXNHcm91cEV4cGFuZGVkIixXKDEsOCxpLmlzR3JvdXBFeHBhbmRlZCQpKSgicGFnZUluZGV4IixXKDIsMTAsaS5ub3JtYWxpemVkUGFnZUluZGV4JCkpKCJudW1QYWdlcyIsVygzLDEyLGkubnVtUGFnZXMkKSkoInNob3dQYWdpbmF0aW9uQ29udHJvbHMiLFcoNCwxNCxpLnNob3dQYWdpbmF0aW9uQ29udHJvbHMkKSkoImNhcmRJZHNXaXRoTWV0YWRhdGEiLFcoNSwxNixpLnBhZ2VkSXRlbXMkKSkoImNhcmRNaW5XaWR0aCIsVyg2LDE4LGkuY2FyZE1pbldpZHRoJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSgiY2FyZFN0YXRlTWFwIixXKDcsMjAsaS5jYXJkU3RhdGVNYXAkKSl9LGRlcGVuZGVuY2llczpbJHRlLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBQQmUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDcpLFQoMSksaigyLCJudW1iZXIiKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksSGUoIiIsVygyLDEsZS5udW1iZXJPZkNhcmRzKSwiIGNhcmRzIil9fWZ1bmN0aW9uIE9CZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsOCl9ZnVuY3Rpb24ga0JlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw5KX12YXIgZW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmdyb3VwRXhwYW5zaW9uVG9nZ2xlZD1uZXcgRn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXItY29tcG9uZW50Il1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLG51bWJlck9mQ2FyZHM6Im51bWJlck9mQ2FyZHMiLGlzR3JvdXBFeHBhbmRlZDoiaXNHcm91cEV4cGFuZGVkIn0sb3V0cHV0czp7Z3JvdXBFeHBhbnNpb25Ub2dnbGVkOiJncm91cEV4cGFuc2lvblRvZ2dsZWQifSxkZWNsczo5LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgYWxsb3dzIHVzZXIgdG8gZXhwYW5kIGEgdGFnIGdyb3VwLuKQn2ZmYWExMTQ3MWI4NzhhNmRmZmUyZTY4YzZmMzcwNjRhOWUwNzQ4NTPikJ81Mzg2MDU0MzI1Mjc0Nzc5MjU4OkV4cGFuZCBncm91cGAsW1siYXJpYS1sYWJlbCIsdCwxLCJncm91cC10b29sYmFyIiwzLCJjbGljayJdLFsxLCJncm91cC10aXRsZS13cmFwcGVyIl0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIiwzLCJ0aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzEsImV4cGFuZC1ncm91cC1pY29uIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJleHBhbmRNb3JlIiwiIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Il0sWyJzdmdJY29uIiwiZXhwYW5kX21vcmVfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImJ1dHRvbiIsMCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkLmVtaXQoKX0pLGgoMSwic3BhbiIsMSkoMiwic3BhbiIsMiksVCgzKSxnKCksUyg0LFBCZSwzLDMsInNwYW4iLDMpLGcoKSxoKDUsInNwYW4iLDQpLFMoNixPQmUsMSwwLCJtYXQtaWNvbiIsNSksUyg3LGtCZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDYsV3QpLGcoKSgpKSwyJmUpe2xldCByPWl0KDgpO3YoMiksV2koInRpdGxlIixpLmdyb3VwTmFtZSksdigxKSxidChpLmdyb3VwTmFtZSksdigxKSxfKCJuZ0lmIixpLm51bWJlck9mQ2FyZHM+MSksdigyKSxfKCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbRmUsRW4sTGFdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9W19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2NvbG9yOiMyMTIxMjE7dG9wOi0xcHg7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7Zm9udDppbmhlcml0fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5jYXJkLWdyb3VwOmZpcnN0LW9mLXR5cGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MH1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM2MTYxNjF9Lmdyb3VwLXRpdGxlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO3RleHQtYWxpZ246bGVmdH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZ3JvdXBOYW1lPW51bGwsdGhpcy5pc0dyb3VwRXhwYW5kZWQkPUh0KCExKX1uZ09uSW5pdCgpe3RoaXMuaXNHcm91cEV4cGFuZGVkJD1udWxsIT09dGhpcy5ncm91cE5hbWU/dGhpcy5zdG9yZS5zZWxlY3QoczEsdGhpcy5ncm91cE5hbWUpOkh0KCExKX1vbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpe2lmKG51bGw9PT10aGlzLmdyb3VwTmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiBleHBhbnNpb24gY2Fubm90IGJlIHRvZ2dsZWQgd2hlbiBncm91cE5hbWUgaXMgbnVsbCIpO3RoaXMuc3RvcmUuZGlzcGF0Y2goUFQoe3RhZ0dyb3VwOnRoaXMuZ3JvdXBOYW1lfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXIiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsbnVtYmVyT2ZDYXJkczoibnVtYmVyT2ZDYXJkcyJ9LGRlY2xzOjIsdmFyczo1LGNvbnN0czpbWzMsIm51bWJlck9mQ2FyZHMiLCJpc0dyb3VwRXhwYW5kZWQiLCJncm91cE5hbWUiLCJncm91cEV4cGFuc2lvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1ldHJpY3MtY2FyZC1ncm91cC10b29sYmFyLWNvbXBvbmVudCIsMCksSSgiZ3JvdXBFeHBhbnNpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl9KSxqKDEsImFzeW5jIiksZygpKSwyJmUmJl8oIm51bWJlck9mQ2FyZHMiLGkubnVtYmVyT2ZDYXJkcykoImlzR3JvdXBFeHBhbmRlZCIsVygxLDMsaS5pc0dyb3VwRXhwYW5kZWQkKSkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpfSxkZXBlbmRlbmNpZXM6W2VuZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTEJlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDEpLFAoMSwibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXIiLDIpKDIsIm1ldHJpY3MtY2FyZC1ncmlkIiwzKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCk7digxKSxfKCJudW1iZXJPZkNhcmRzIixlLml0ZW1zLmxlbmd0aCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpLHYoMSksXygiY2FyZElkc1dpdGhNZXRhZGF0YSIsZS5pdGVtcykoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKX19dmFyIG5uZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5QbHVnaW5UeXBlPXpufXRyYWNrQnlHcm91cChlLGkpe3JldHVybiBpLmdyb3VwTmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQiXV0saW5wdXRzOntjYXJkR3JvdXBzOiJjYXJkR3JvdXBzIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjEsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsImNhcmQtZ3JvdXAiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLWdyb3VwIl0sWzMsIm51bWJlck9mQ2FyZHMiLCJncm91cE5hbWUiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsImdyb3VwTmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUygwLExCZSwzLDUsImRpdiIsMCksMiZlJiZfKCJuZ0Zvck9mIixpLmNhcmRHcm91cHMpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeUdyb3VwKX0sZGVwZW5kZW5jaWVzOltubixwXyx0bmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxpbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jYXJkR3JvdXBzJD10aGlzLnN0b3JlLnNlbGVjdChOZikucGlwZShMaSh0aGlzLnN0b3JlLnNlbGVjdChEYykpLE4oKFtpLHJdKT0+ci5zaXplP2kuZmlsdGVyKG89PnIuaGFzKG8ucGx1Z2luKSk6aSksTihpPT5MVChpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwcyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbMywiY2FyZEdyb3VwcyIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwibWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSksMiZlJiZfKCJjYXJkR3JvdXBzIixXKDEsMixpLmNhcmRHcm91cHMkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W25uZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gSEJlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksSGUoIiBhbmQgIixlLmdldFBsdWdpblR5cGVGaWx0ZXJTdHJpbmcoZS5wbHVnaW5UeXBlcyksIiB2aXN1YWxpemF0aW9uIGZpbHRlciIpfX12YXIgcm5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9em4sdGhpcy5saXN0Rm9ybWF0dGVyPW5ldyBJbnRsLkxpc3RGb3JtYXQodm9pZCAwLHtzdHlsZToibG9uZyIsdHlwZToiZGlzanVuY3Rpb24ifSl9Z2V0UGx1Z2luVHlwZUZpbHRlclN0cmluZyhlKXtsZXQgaT1bLi4uZV0ubWFwKHI9Pntzd2l0Y2gocil7Y2FzZSB6bi5TQ0FMQVJTOnJldHVybiJzY2FsYXIiO2Nhc2Ugem4uSU1BR0VTOnJldHVybiJpbWFnZSI7Y2FzZSB6bi5ISVNUT0dSQU1TOnJldHVybiJoaXN0b2dyYW0iO2RlZmF1bHQ6dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBsZWFzZSBpbXBsZW1lbnQgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgcGx1Z2luIHR5cGU6ICR7cn1gKX19KTtyZXR1cm4gdGhpcy5saXN0Rm9ybWF0dGVyLmZvcm1hdChpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1lbXB0eS10YWctbWF0Y2gtY29tcG9uZW50Il1dLGlucHV0czp7cGx1Z2luVHlwZXM6InBsdWdpblR5cGVzIix0YWdGaWx0ZXJSZWdleDoidGFnRmlsdGVyUmVnZXgiLHRhZ0NvdW50czoidGFnQ291bnRzIn0sZGVjbHM6Nix2YXJzOjUsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFQoMCwiTm8gbWF0Y2hlcyBmb3IgdGFnIGZpbHRlciAiKSxoKDEsImNvZGUiKSxUKDIpLGcoKSxTKDMsSEJlLDIsMSwic3BhbiIsMCksVCg0KSxqKDUsIm51bWJlciIpKSwyJmUmJih2KDIpLEhlKCIvIixpLnRhZ0ZpbHRlclJlZ2V4LCIvIiksdigxKSxfKCJuZ0lmIixpLnBsdWdpblR5cGVzLnNpemUpLHYoMSksSGUoIiBvdXQgb2YgIixXKDUsMyxpLnRhZ0NvdW50cyksIiB0YWdzLiIpKX0sZGVwZW5kZW5jaWVzOltGZSxMYV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksb25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucGx1Z2luVHlwZXMkPXRoaXMuc3RvcmUuc2VsZWN0KERjKSx0aGlzLnRhZ0ZpbHRlclJlZ2V4JD10aGlzLnN0b3JlLnNlbGVjdChrbCksdGhpcy50YWdDb3VudHMkPXRoaXMuc3RvcmUuc2VsZWN0KE5mKS5waXBlKE4oaT0+bmV3IFNldChpLm1hcCgoe3RhZzpyfSk9PnIpKS5zaXplKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJwbHVnaW5UeXBlcyIsInRhZ0ZpbHRlclJlZ2V4IiwidGFnQ291bnRzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaC1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJl8oInBsdWdpblR5cGVzIixXKDEsMyxpLnBsdWdpblR5cGVzJCkpKCJ0YWdGaWx0ZXJSZWdleCIsVygyLDUsaS50YWdGaWx0ZXJSZWdleCQpKSgidGFnQ291bnRzIixXKDMsNyxpLnRhZ0NvdW50cyQpKX0sZGVwZW5kZW5jaWVzOltybmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGpCZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsNiksVCgxKSxqKDIsIm51bWJlciIpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiIixXKDIsMSxlLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoKSwiIGNhcmRzIil9fWZ1bmN0aW9uIEdCZShuLHQpezEmbiYmUCgwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCIsNyl9dmFyIHNuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7aXNFbXB0eU1hdGNoOiJpc0VtcHR5TWF0Y2giLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIn0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwiZ3JvdXAtdG9vbGJhciJdLFsxLCJncm91cC10ZXh0Il0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbImNsYXNzIiwid2FybiIsNCwibmdJZiJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbMSwid2FybiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJzcGFuIiwxKSgyLCJzcGFuIiwyKSxUKDMsIlRhZ3MgbWF0Y2hpbmcgZmlsdGVyIiksZygpLFMoNCxqQmUsMywzLCJzcGFuIiwzKSxnKCkoKSxTKDUsR0JlLDEsMCwibWV0cmljcy1lbXB0eS10YWctbWF0Y2giLDQpLFAoNiwibWV0cmljcy1jYXJkLWdyaWQiLDUpKSwyJmUmJih2KDQpLF8oIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGg+MSksdigxKSxfKCJuZ0lmIixpLmlzRW1wdHlNYXRjaCksdigxKSxfKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSl9LGRlcGVuZGVuY2llczpbRmUscF8sb25lLExhXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1tZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweDtmb250LXN0eWxlOml0YWxpYztwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkPXRoaXMuc3RvcmUuc2VsZWN0KE5mKS5waXBlKExpKHRoaXMuc3RvcmUuc2VsZWN0KERjKSksTigoW2kscl0pPT5yLnNpemU/aS5maWx0ZXIobz0+ci5oYXMoby5wbHVnaW4pKTppKSxMaSh0aGlzLnN0b3JlLnNlbGVjdChrbCkpLHdyKDIwMCksTigoW2kscl0pPT57dHJ5e3JldHVybntjYXJkTGlzdDppLHJlZ2V4Om5ldyBSZWdFeHAociwiaSIpfX1jYXRjaHtyZXR1cm57Y2FyZExpc3Q6aSxyZWdleDpudWxsfX19KSxrZSgoe3JlZ2V4Oml9KT0+bnVsbCE9PWkpLE4oKHtjYXJkTGlzdDppLHJlZ2V4OnJ9KT0+aS5maWx0ZXIoKHt0YWc6b30pPT5yLnRlc3QobykpKSxZbigoaSxyKT0+aS5sZW5ndGg9PT1yLmxlbmd0aCYmaS5ldmVyeSgobyxzKT0+by5jYXJkSWQ9PT1yW3NdLmNhcmRJZCkpLENzKCkscW4oW10pKSx0aGlzLmlzRW1wdHlNYXRjaCQ9dGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJC5waXBlKExpKHRoaXMuc3RvcmUuc2VsZWN0KE5mKSksTigoW2kscl0pPT5Cb29sZWFuKHIubGVuZ3RoKSYmMD09PWkubGVuZ3RoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWZpbHRlcmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzMsImlzRW1wdHlNYXRjaCIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIikpLDImZSYmXygiaXNFbXB0eU1hdGNoIixXKDEsMyxpLmlzRW1wdHlNYXRjaCQpKSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsVygyLDUsaS5jYXJkSWRzV2l0aE1ldGFkYXRhJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKX0sZGVwZW5kZW5jaWVzOltzbmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFhCZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsNyl9ZnVuY3Rpb24gUUJlKG4sdCl7aWYoMSZuJiYoaCgwLCJtYXQtb3B0aW9uIiw4KSxUKDEpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtfKCJ2YWx1ZSIsZSksQmUoInRpdGxlIixlKSx2KDEpLGJ0KGUpfX1mdW5jdGlvbiBaQmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsOSkoMSwiZW0iKSxUKDIpLGooMywibnVtYmVyIiksZygpKCkpLDImbil7bGV0IGU9dygpO3YoMiksSGUoImFuZCAiLFcoMywxLGUuY29tcGxldGlvbnMubGVuZ3RoLTI1KSwiIG1vcmUgdGFncyBtYXRjaGVkIil9fXZhciBsbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlPW5ldyBGfW9uQ29tcGxldGlvbkFjY2VwdGVkKGUpe3RoaXMub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShmYmUsIlxcJCYiKX0oZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXRhZy1maWx0ZXItY29tcG9uZW50Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgidmFsaWQiLGkuaXNSZWdleEZpbHRlclZhbGlkKX0saW5wdXRzOntyZWdleEZpbHRlclZhbHVlOiJyZWdleEZpbHRlclZhbHVlIixpc1JlZ2V4RmlsdGVyVmFsaWQ6ImlzUmVnZXhGaWx0ZXJWYWxpZCIsY29tcGxldGlvbnM6ImNvbXBsZXRpb25zIn0sb3V0cHV0czp7b25SZWdleEZpbHRlclZhbHVlQ2hhbmdlOiJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UifSxkZWNsczo3LHZhcnM6NSxjb25zdHM6W1sxLCJ0YWctZmlsdGVyIl0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciB0YWdzIChyZWdleCkiLDMsInZhbHVlIiwibWF0QXV0b2NvbXBsZXRlIiwiaW5wdXQiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwiY2xhc3MiLCJlcnJvci1pY29uIiwidGl0bGUiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiw0LCJuZ0lmIl0sWzEsInRhZy1vcHRpb25zIiwzLCJvcHRpb25TZWxlY3RlZCJdLFsiZmlsdGVyTWF0Y2hlcyIsIm1hdEF1dG9jb21wbGV0ZSJdLFsiY2xhc3MiLCJvcHRpb24iLDMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiYW5kLW1vcmUiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwidGl0bGUiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiwxLCJlcnJvci1pY29uIl0sWzEsIm9wdGlvbiIsMywidmFsdWUiXSxbMSwiYW5kLW1vcmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwidGItZmlsdGVyLWlucHV0IiwxKSxJKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoby50YXJnZXQudmFsdWUpfSksZygpLFMoMixYQmUsMSwwLCJtYXQtaWNvbiIsMiksZygpLGgoMywibWF0LWF1dG9jb21wbGV0ZSIsMyw0KSxJKCJvcHRpb25TZWxlY3RlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Db21wbGV0aW9uQWNjZXB0ZWQoby5vcHRpb24udmFsdWUpfSksUyg1LFFCZSwyLDMsIm1hdC1vcHRpb24iLDUpLFMoNixaQmUsNCwzLCJkaXYiLDYpLGcoKSksMiZlKXtsZXQgcj1pdCg0KTt2KDEpLF8oInZhbHVlIixpLnJlZ2V4RmlsdGVyVmFsdWUpKCJtYXRBdXRvY29tcGxldGUiLHIpLHYoMSksXygibmdJZiIsIWkuaXNSZWdleEZpbHRlclZhbGlkKSx2KDMpLF8oIm5nRm9yT2YiLG51bGw9PWkuY29tcGxldGlvbnM/bnVsbDppLmNvbXBsZXRpb25zLnNsaWNlKDAsMjUpKSx2KDEpLF8oIm5nSWYiLChudWxsPT1pLmNvbXBsZXRpb25zP251bGw6aS5jb21wbGV0aW9ucy5sZW5ndGgpPjI1KX19LGRlcGVuZGVuY2llczpbbm4sRmUsU3AsT3RlLFVzLEVuLExhXSxzdHlsZXM6WyIudGFnLWZpbHRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfXRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9W19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojMjEyMTIxfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojZmZmfVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCl7Y29sb3I6I2M2MjgyOH1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgLmVycm9yLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjNjI4Mjg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0gIC50YWctb3B0aW9ucyAub3B0aW9uLCAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtbGluZS1jbGFtcDozO2Rpc3BsYXk6LXdlYmtpdC1ib3g7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS40O3BhZGRpbmc6OHB4IDE2cHh9ICAudGFnLW9wdGlvbnMgLmFuZC1tb3Jle2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgICAudGFnLW9wdGlvbnMgLmFuZC1tb3JlLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxjbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy50YWdGaWx0ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KGtsKSx0aGlzLmlzVGFnRmlsdGVyUmVnZXhWYWxpZCQ9dGhpcy50YWdGaWx0ZXIkLnBpcGUoTihpPT57dHJ5e3JldHVybiBuZXcgUmVnRXhwKGkpLCEwfWNhdGNoe3JldHVybiExfX0pKSx0aGlzLmNvbXBsZXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChlMSkucGlwZShMaSh0aGlzLnN0b3JlLnNlbGVjdChEYykpLE4oKFtpLHJdKT0+aS5maWx0ZXIoKHtwbHVnaW46b30pPT4hci5zaXplfHxyLmhhcyhvKSkubWFwKCh7dGFnOm99KT0+bykpLE4oaT0+Wy4uLm5ldyBTZXQoaSldKSxOKGk9Pmkuc29ydCh5eSkpLExpKHRoaXMuc3RvcmUuc2VsZWN0KGtsKSksTigoW2kscl0pPT57dHJ5e3JldHVybltpLG5ldyBSZWdFeHAociwiaSIpXX1jYXRjaHtyZXR1cm5baSxudWxsXX19KSxrZSgoWyxpXSk9Pm51bGwhPT1pKSxOKChbaSxyXSk9PmkuZmlsdGVyKG89PnIudGVzdChvKSkpKX1vblRhZ0ZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFJUKHt0YWdGaWx0ZXI6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlciJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJyZWdleEZpbHRlclZhbHVlIiwiaXNSZWdleEZpbHRlclZhbGlkIiwiY29tcGxldGlvbnMiLCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiLDApLEkoIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UYWdGaWx0ZXJDaGFuZ2Uobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxnKCkpLDImZSYmXygicmVnZXhGaWx0ZXJWYWx1ZSIsVygxLDMsaS50YWdGaWx0ZXIkKSkoImlzUmVnZXhGaWx0ZXJWYWxpZCIsVygyLDUsaS5pc1RhZ0ZpbHRlclJlZ2V4VmFsaWQkKSkoImNvbXBsZXRpb25zIixXKDMsNyxpLmNvbXBsZXRpb25zJCkpfSxkZXBlbmRlbmNpZXM6W2xuZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gJEJlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiw4KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiIixlLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoLCIgY2FyZHMiKX19ZnVuY3Rpb24gZVZlKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiw5KSxUKDEsIk5ldyBjYXJkIHBpbm5lZCIpLGcoKSksMiZuJiZCZSgiZGF0YS1pZCIsdC4kaW1wbGljaXQpfWZ1bmN0aW9uIHRWZShuLHQpe2lmKDEmbiYmUCgwLCJtZXRyaWNzLWNhcmQtZ3JpZCIsMTApLDImbil7bGV0IGU9dygpO18oImNhcmRJZHNXaXRoTWV0YWRhdGEiLGUuY2FyZElkc1dpdGhNZXRhZGF0YSkoImNhcmRPYnNlcnZlciIsZS5jYXJkT2JzZXJ2ZXIpfX1mdW5jdGlvbiBuVmUobix0KXsxJm4mJihoKDAsImRpdiIsMTEpLFQoMSwiUGluIGNhcmRzIGZvciBhIHF1aWNrIHZpZXcgYW5kIGNvbXBhcmlzb24iKSxnKCkpfXZhciBkbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1waW5uZWQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsbmV3Q2FyZFBpbm5lZElkczoibmV3Q2FyZFBpbm5lZElkcyJ9LGRlY2xzOjEwLHZhcnM6NCxjb25zdHM6W1sxLCJncm91cC10b29sYmFyIl0sWyJzdmdJY29uIiwia2VlcF8yNHB4Il0sWzEsImdyb3VwLXRleHQiXSxbImFyaWEtcm9sZSIsImhlYWRpbmciLCJhcmlhLWxldmVsIiwiMyIsMSwiZ3JvdXAtdGl0bGUiXSxbImNsYXNzIiwiZ3JvdXAtY2FyZC1jb3VudCIsNCwibmdJZiJdLFsiY2xhc3MiLCJuZXctY2FyZC1waW5uZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImVtcHR5UGlubmVkVmlldyIsIiJdLFsxLCJncm91cC1jYXJkLWNvdW50Il0sWzEsIm5ldy1jYXJkLXBpbm5lZCJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCksUCgxLCJtYXQtaWNvbiIsMSksaCgyLCJzcGFuIiwyKSgzLCJzcGFuIiwzKSxUKDQsIlBpbm5lZCIpLGcoKSxTKDUsJEJlLDIsMSwic3BhbiIsNCksUyg2LGVWZSwyLDEsInNwYW4iLDUpLGcoKSgpLFMoNyx0VmUsMSwyLCJtZXRyaWNzLWNhcmQtZ3JpZCIsNiksUyg4LG5WZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDcsV3QpKSwyJmUpe2xldCByPWl0KDkpO3YoNSksXygibmdJZiIsaS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aD4xKSx2KDEpLF8oIm5nRm9yT2YiLGkubmV3Q2FyZFBpbm5lZElkcyksdigxKSxfKCJuZ0lmIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltubixGZSxFbixwX10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmbGV4Om5vbmU7bWFyZ2luLXJpZ2h0OjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXAtdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2dhcDo2cHh9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtc3R5bGU6aXRhbGljO3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlcn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0ubmV3LWNhcmQtcGlubmVkW19uZ2NvbnRlbnQtJUNPTVAlXXthbmltYXRpb246X25nY29udGVudC0lQ09NUCVfcGlubmVkLXZpZXctZmFkZS1vdXQgM3MgbGluZWFyO2JhY2tncm91bmQ6I2Y0NDMzNjtib3JkZXItcmFkaXVzOjVweDtjb2xvcjojZmZmO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxM3B4O29wYWNpdHk6MDtwYWRkaW5nOjNweCA1cHh9QGtleWZyYW1lcyBfbmdjb250ZW50LSVDT01QJV9waW5uZWQtdmlldy1mYWRlLW91dHtmcm9te29wYWNpdHk6MX02NiV7b3BhY2l0eTouOTl9dG97b3BhY2l0eTowfX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHVuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkPXRoaXMuc3RvcmUuc2VsZWN0KHl2KS5waXBlKHFuKFtdKSksdGhpcy5uZXdDYXJkUGlubmVkSWRzJD10aGlzLnN0b3JlLnNlbGVjdCh5dikucGlwZShpYSgxKSxOKGk9PmkubWFwKHI9PnIuY2FyZElkKSksRm0oKSxOKChbaSxyXSk9PntsZXQgbz1uZXcgU2V0KGkpLHM9bmV3IFNldChyKTtmb3IobGV0IGEgb2YgcylpZighby5oYXMoYSkpcmV0dXJuIERhdGUubm93KCk7cmV0dXJuIG51bGx9KSxxbihudWxsKSxGbSgpLE4oKFtpLHJdKT0+bnVsbD09PWkmJm51bGw9PT1yP251bGw6bnVsbD09PXI/W2ldOltyXSksa2UoaT0+bnVsbCE9PWkpLE4oaT0+W2lbMF1dKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwibmV3Q2FyZFBpbm5lZElkcyIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwibWV0cmljcy1waW5uZWQtdmlldy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIikpLDImZSYmXygiY2FyZElkc1dpdGhNZXRhZGF0YSIsVygxLDMsaS5jYXJkSWRzV2l0aE1ldGFkYXRhJCkpKCJuZXdDYXJkUGlubmVkSWRzIixXKDIsNSxpLm5ld0NhcmRQaW5uZWRJZHMkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W2RuZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gb1ZlKG4sdCl7MSZuJiZQKDAsIm1ldHJpY3MtZmlsdGVyZWQtdmlldyIsMTMpLDImbiYmXygiY2FyZE9ic2VydmVyIix3KCkuY2FyZE9ic2VydmVyKX1mdW5jdGlvbiBzVmUobix0KXsxJm4mJihoKDAsImRpdiIsMTcpLFAoMSwibWF0LXNwaW5uZXIiLDE4KSxnKCkpfXZhciBhVmU9ZnVuY3Rpb24obil7cmV0dXJueyJzbGlkZS1vdXQtbWVudS1leHBhbmRlZCI6bn19O2Z1bmN0aW9uIGxWZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxOSksUCgxLCJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yIiksZygpKSwyJm4pe2xldCBlPXcoKTtfKCJuZ0NsYXNzIixJbigxLGFWZSxlLnNsaWRlT3V0TWVudU9wZW4pKX19ZnVuY3Rpb24gY1ZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyMCkoMSwiZGl2IiwyMSkoMiwiaDIiLDIyKSxUKDMsIlNldHRpbmdzIiksZygpLGgoNCwiYnV0dG9uIiwyMyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZC5lbWl0KCkpfSksUCg1LCJtYXQtaWNvbiIsMjQpLGcoKSgpLFAoNiwibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSIpLGcoKX19dmFyIGRWZT1mdW5jdGlvbihuKXtyZXR1cm57Y2hlY2tlZDpuLCJzZXR0aW5ncy1idXR0b24iOiEwfX0sdVZlPW5ldyBpZSgiQ3VzdG9taXphYmxlIFNoYXJlIEJ1dHRvbiIpLHBuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5ob3N0PWUsdGhpcy5jdXN0b21TaGFyZUJ1dHRvbj1pLHRoaXMub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQ9bmV3IEYsdGhpcy5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkPW5ldyBGLHRoaXMub25QbHVnaW5UeXBlVG9nZ2xlZD1uZXcgRix0aGlzLm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQ9bmV3IEYsdGhpcy5QbHVnaW5UeXBlPXpuLHRoaXMuY2FyZE9ic2VydmVyPW5ldyB4eSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwiNjAwcHggMHB4IDYwMHB4IDBweCIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKHVWZSw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1tYWluLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7c2hvd0ZpbHRlcmVkVmlldzoic2hvd0ZpbHRlcmVkVmlldyIsaXNTaWRlcGFuZU9wZW46ImlzU2lkZXBhbmVPcGVuIixmaWx0ZXJlZFBsdWdpblR5cGVzOiJmaWx0ZXJlZFBsdWdpblR5cGVzIixpbml0aWFsVGFnc0xvYWRpbmc6ImluaXRpYWxUYWdzTG9hZGluZyIsc2xpZGVPdXRNZW51T3Blbjoic2xpZGVPdXRNZW51T3BlbiJ9LG91dHB1dHM6e29uU2V0dGluZ3NCdXR0b25DbGlja2VkOiJvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCIsb25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZDoib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsb25QbHVnaW5UeXBlVG9nZ2xlZDoib25QbHVnaW5UeXBlVG9nZ2xlZCIsb25QbHVnaW5UeXBlQWxsVG9nZ2xlZDoib25QbHVnaW5UeXBlQWxsVG9nZ2xlZCJ9LGRlY2xzOjI0LHZhcnM6MjMsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIG9uIGEgdG9vbGJhciBidXR0b24gdG8gdG9nZ2xlIHRoZSBzZXR0aW5ncyBzaWRlIHBhbmUu4pCfZDM1MTZkYjZiYmU2ODYwYTU1YmVhYjY2ZTQ5NjlkYWM2MjViOGQ3MuKQnzc2NTkyODU0NDU1ODA4Mzg5MjU6VG9nZ2xlIHNldHRpbmdzIHNpZGUgcGFuZWAsZT0kbG9jYWxpemVgOkxhYmVsIG9uIGEgYnV0dG9uIHRvIGNsb3NlIHRoZSBzZXR0aW5ncyBzaWRlIHBhbmUu4pCfMDQ1MjFkYzBiNmE2NWNmNWMzODI5NDRjOWE4YjRiODQ0YTNlOTU5OOKQnzgxNTY3NjY5OTc3NDcxNjU4NzE6Q2xvc2Ugc2lkZSBwYW5lYCxbWzEsInRvb2xiYXIiXSxbIm11bHRpcGxlIiwiIiwiYXBwZWFyYW5jZSIsInN0YW5kYXJkIiwxLCJmaWx0ZXItdmlldyJdLFsibWF0LWJ1dHRvbiIsIiIsInJvbGUiLCJjaGVja2JveCIsImRhdGEtdmFsdWUiLCJhbGwiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwic2NhbGFycyIsMSwiZmlsdGVyLXZpZXctYnV0dG9uIiwzLCJjbGljayJdLFsibWF0LWJ1dHRvbiIsIiIsInJvbGUiLCJjaGVja2JveCIsImRhdGEtdmFsdWUiLCJpbWFnZSIsMSwiZmlsdGVyLXZpZXctYnV0dG9uIiwzLCJjbGljayJdLFsibWF0LWJ1dHRvbiIsIiIsInJvbGUiLCJjaGVja2JveCIsImRhdGEtdmFsdWUiLCJoaXN0b2dyYW0iLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbMywiY3VzdG9taXphYmxlQ29tcG9uZW50Il0sWzEsInJpZ2h0LWl0ZW1zIl0sWyJtYXQtc3Ryb2tlZC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsIm5nQ2xhc3MiLCJjbGljayJdLFsic3ZnSWNvbiIsInNldHRpbmdzXzI0cHgiXSxbMSwic3BsaXQtY29udGVudCJdLFsiY2RrU2Nyb2xsYWJsZSIsIiJdLFszLCJjYXJkT2JzZXJ2ZXIiLDQsIm5nSWYiXSxbMywiY2FyZE9ic2VydmVyIl0sWyJjbGFzcyIsImxvYWRpbmctY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNsaWRlLW91dC1tZW51IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpZGViYXIiLDQsIm5nSWYiXSxbMSwibG9hZGluZy1jb250YWluZXIiXSxbImRpYW1ldGVyIiwiMzYiXSxbMSwic2xpZGUtb3V0LW1lbnUiLDMsIm5nQ2xhc3MiXSxbMSwic2lkZWJhciJdLFsxLCJoZWFkZXIiXSxbMSwidGl0bGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjbG9zZV8yNHB4Il1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSxQKDEsIm1ldHJpY3MtdGFnLWZpbHRlciIpLGgoMiwibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiLDEpKDMsImJ1dHRvbiIsMiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlQWxsVG9nZ2xlZC5lbWl0KCl9KSxUKDQsIiBBbGwgIiksZygpLGgoNSwiYnV0dG9uIiwzKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVUb2dnbGVkLmVtaXQoaS5QbHVnaW5UeXBlLlNDQUxBUlMpfSksVCg2LCIgU2NhbGFycyAiKSxnKCksaCg3LCJidXR0b24iLDQpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChpLlBsdWdpblR5cGUuSU1BR0VTKX0pLFQoOCwiIEltYWdlICIpLGcoKSxoKDksImJ1dHRvbiIsNSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlVG9nZ2xlZC5lbWl0KGkuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX0pLFQoMTAsIiBIaXN0b2dyYW0gIiksZygpKCksUCgxMSwidGItY3VzdG9taXphdGlvbiIsNiksaCgxMiwiZGl2Iiw3KSgxMywiYnV0dG9uIiw4KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNldHRpbmdzQnV0dG9uQ2xpY2tlZC5lbWl0KCl9KSxQKDE0LCJtYXQtaWNvbiIsOSksVCgxNSwiIFNldHRpbmdzICIpLGcoKSgpKCksaCgxNiwiZGl2IiwxMCkoMTcsImRpdiIsMTEpLFMoMTgsb1ZlLDEsMSwibWV0cmljcy1maWx0ZXJlZC12aWV3IiwxMiksUCgxOSwibWV0cmljcy1waW5uZWQtdmlldyIsMTMpLFMoMjAsc1ZlLDIsMCwiZGl2IiwxNCksUCgyMSwibWV0cmljcy1jYXJkLWdyb3VwcyIsMTMpLGcoKSxTKDIyLGxWZSwyLDMsImRpdiIsMTUpLFMoMjMsY1ZlLDcsMCwiZGl2IiwxNiksZygpKSwyJmUmJih2KDMpLEJlKCJhcmlhLWNoZWNrZWQiLDA9PT1pLmZpbHRlcmVkUGx1Z2luVHlwZXMuc2l6ZSksdigyKSxCZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5TQ0FMQVJTKSksdigyKSxCZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5JTUFHRVMpKSx2KDIpLEJlKCJhcmlhLWNoZWNrZWQiLGkuZmlsdGVyZWRQbHVnaW5UeXBlcy5oYXMoaS5QbHVnaW5UeXBlLkhJU1RPR1JBTVMpKSx2KDIpLF8oImN1c3RvbWl6YWJsZUNvbXBvbmVudCIsaS5jdXN0b21TaGFyZUJ1dHRvbiksdigyKSxfKCJuZ0NsYXNzIixJbigyMSxkVmUsaS5pc1NpZGVwYW5lT3BlbikpLEJlKCJhcmlhLXByZXNzZWQiLGkuaXNTaWRlcGFuZU9wZW4pLHYoNCksbnQoIm1haW4iLCEwKSgiZmlsdGVyLXZpZXciLGkuc2hvd0ZpbHRlcmVkVmlldyksdigxKSxfKCJuZ0lmIixpLnNob3dGaWx0ZXJlZFZpZXcpLHYoMSksVHQoImRpc3BsYXkiLGkuc2hvd0ZpbHRlcmVkVmlldz8ibm9uZSI6IiIpLF8oImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpLHYoMSksXygibmdJZiIsaS5pbml0aWFsVGFnc0xvYWRpbmcpLHYoMSksVHQoImRpc3BsYXkiLGkuc2hvd0ZpbHRlcmVkVmlldz8ibm9uZSI6IiIpLF8oImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpLHYoMSksXygibmdJZiIsaS5pc1NpZGVwYW5lT3BlbiksdigxKSxfKCJuZ0lmIixpLmlzU2lkZXBhbmVPcGVuKSl9LGRlcGVuZGVuY2llczpbeW4sRmUsY1EsQ2QsSmksJGksUk4sRW4sdGwsYlEsQ1EsaW5lLGFuZSxjbmUsdW5lXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZmxleDpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXRhZy1maWx0ZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDEwMHB4fS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yaWdodC1pdGVtc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7bWFyZ2luLWxlZnQ6MTZweDtwYWRkaW5nLWxlZnQ6MTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fW1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo0cHg7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtoZWlnaHQ6MjVweDtsaW5lLWhlaWdodDoyNXB4O21pbi13aWR0aDp1bnNldDtwYWRkaW5nOjAgMTJweH0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSArIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSArIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblthcmlhLWNoZWNrZWQ9dHJ1ZV1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW2FyaWEtY2hlY2tlZD10cnVlXVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bYXJpYS1jaGVja2VkPXRydWVdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjF9LnNwbGl0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtvdmVyZmxvdy15OmF1dG87ZmxleDoxfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2JhY2tncm91bmQtY29sb3I6I2ZmZjtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLHNjcm9sbC1wb3NpdGlvbn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY2Zjc7ZmxleDoxIDE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzYTNhM2F9Lm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1waW5uZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLWZpbHRlcmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLWZpbHRlcmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1waW5uZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Lm1haW4uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbn0ubWFpbi5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLWZpbHRlcmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46Y29udGVudDtvdmVyZmxvdzphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259LmxvYWRpbmctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjIwcHggMH0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7ZmxleDowIDAgMjUwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0MnB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6aW5saW5lLWZsZXh9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b24uY2hlY2tlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlci1jb2xvcjojZTBlMGUwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b24uY2hlY2tlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1idXR0b24td3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjRweH0uc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtoZWlnaHQ6Y2FsYygxMDAlIC0gNDlweCk7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NTBweDt0b3A6NDlweDt0cmFuc2l0aW9uOmFsbCAuNzVzIGVhc2U7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MjAwcHg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uc2xpZGUtb3V0LW1lbnUtZXhwYW5kZWRbX25nY29udGVudC0lQ09NUCVde3JpZ2h0OjI1MHB4O3Zpc2liaWxpdHk6dmlzaWJsZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGZuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmlzU2lkZXBhbmVPcGVuJD10aGlzLnN0b3JlLnNlbGVjdChhMSksdGhpcy5pbml0aWFsVGFnc0xvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KHZ2KS5waXBlKEFfKGk9Pm51bGw9PT1pLmxhc3RMb2FkZWRUaW1lSW5NcywhMCksTihpPT5pLnN0YXRlPT09VGUuTE9BRElORyYmbnVsbD09PWkubGFzdExvYWRlZFRpbWVJbk1zKSksdGhpcy5zaG93RmlsdGVyZWRWaWV3JD10aGlzLnN0b3JlLnNlbGVjdChrbCkucGlwZShOKGk9PmkubGVuZ3RoPjApKSx0aGlzLmZpbHRlcmVkUGx1Z2luVHlwZXMkPXRoaXMuc3RvcmUuc2VsZWN0KERjKSx0aGlzLmlzU2xpZGVvdXRNZW51T3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QobDEpfW9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChvVCgpKX1vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChyVCgpKX1vblBsdWdpblZpc2liaWxpdHlUb2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT1Qoe3BsdWdpbjplfSkpfW9uU2hvd0FsbFBsdWdpbnMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGtUKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1tYWluLXZpZXciXV0sZGVjbHM6Nix2YXJzOjE1LGNvbnN0czpbWzMsInNob3dGaWx0ZXJlZFZpZXciLCJpc1NpZGVwYW5lT3BlbiIsImluaXRpYWxUYWdzTG9hZGluZyIsImZpbHRlcmVkUGx1Z2luVHlwZXMiLCJzbGlkZU91dE1lbnVPcGVuIiwib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLCJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIiwib25QbHVnaW5UeXBlVG9nZ2xlZCIsIm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCIsMCksSSgib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQoKX0pKCJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQoKX0pKCJvblBsdWdpblR5cGVUb2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblZpc2liaWxpdHlUb2dnbGVkKG8pfSkoIm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TaG93QWxsUGx1Z2lucygpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxnKCkpLDImZSYmXygic2hvd0ZpbHRlcmVkVmlldyIsVygxLDUsaS5zaG93RmlsdGVyZWRWaWV3JCkpKCJpc1NpZGVwYW5lT3BlbiIsVygyLDcsaS5pc1NpZGVwYW5lT3BlbiQpKSgiaW5pdGlhbFRhZ3NMb2FkaW5nIixXKDMsOSxpLmluaXRpYWxUYWdzTG9hZGluZyQpKSgiZmlsdGVyZWRQbHVnaW5UeXBlcyIsVyg0LDExLGkuZmlsdGVyZWRQbHVnaW5UeXBlcyQpKSgic2xpZGVPdXRNZW51T3BlbiIsVyg1LDEzLGkuaXNTbGlkZW91dE1lbnVPcGVuJCkpfSxkZXBlbmRlbmNpZXM6W3BuZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYnM9KCgpPT4oZnVuY3Rpb24obil7bi5DSEVDS0JPWD0iY2hlY2tib3giLG4uUlVOX05BTUU9InJ1bl9uYW1lIixuLkVYUEVSSU1FTlRfTkFNRT0iZXhwZXJpbWVudF9uYW1lIixuLlJVTl9DT0xPUj0icnVuX2NvbG9yIn0oYnN8fChicz17fSkpLGJzKSkoKSxFcD0oKCk9PihmdW5jdGlvbihuKXtuW24uQkVGT1JFPTBdPSJCRUZPUkUiLG5bbi5BRlRFUj0xXT0iQUZURVIifShFcHx8KEVwPXt9KSksRXApKSgpLG1uZT1uZXcgU2V0KFsic3RyaW5nIiwibnVtYmVyIl0pLG1WZT17aW5zZXJ0VW5kZWZpbmVkOkVwLkFGVEVSfTtmdW5jdGlvbiBobmUobil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBpc05hTihuKT92b2lkIDA6bjtpZighaXNOYU4ocGFyc2VJbnQobikpKXJldHVybiBwYXJzZUludChuKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylpZihpc05hTihwYXJzZUludChuW3RdKSkpcmV0dXJuIDA9PT10P3ZvaWQgMDpwYXJzZUludChuLnNsaWNlKDAsdCkpfXZhciBoVmU9WyJkaWFsb2dQb3B1cCJdLGdWZT1bImh1ZVNsaWRlciJdLF9WZT1bImFscGhhU2xpZGVyIl07ZnVuY3Rpb24gYlZlKG4sdCl7aWYoMSZuJiZQKDAsImRpdiIpLDImbil7bGV0IGU9dygpO21iKCJhcnJvdyBhcnJvdy0iLGUuY3BVc2VQb3NpdGlvbiwiIiksVHQoInRvcCIsZS5hcnJvd1RvcCwicHgiKX19ZnVuY3Rpb24gdlZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyOCksSSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQ29sb3JDaGFuZ2UocikpfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkRyYWdTdGFydCgic2F0dXJhdGlvbi1saWdodG5lc3MiKSl9KSgiZHJhZ0VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkRyYWdFbmQoInNhdHVyYXRpb24tbGlnaHRuZXNzIikpfSksUCgxLCJkaXYiLDE0KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7VHQoImJhY2tncm91bmQtY29sb3IiLGUuaHVlU2xpZGVyQ29sb3IpLF8oInJnWCIsMSkoInJnWSIsMSksdigxKSxUdCgidG9wIixudWxsPT1lLnNsaWRlcj9udWxsOmUuc2xpZGVyLnYsInB4IikoImxlZnQiLG51bGw9PWUuc2xpZGVyP251bGw6ZS5zbGlkZXIucywicHgiKX19ZnVuY3Rpb24geVZlKG4sdCl7MSZuJiYoTm4oKSxoKDAsInN2ZyIsMjkpLFAoMSwicGF0aCIsMzApKDIsInBhdGgiLDMxKSxnKCkpfWZ1bmN0aW9uIHhWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsMzIpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKTtyZXR1cm4gUShvLm9uQWRkUHJlc2V0Q29sb3IocixvLnNlbGVjdGVkQ29sb3IpKX0pLFQoMSksZygpfWlmKDImbil7bGV0IGU9dygpO0FzKGUuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSxfKCJkaXNhYmxlZCIsZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGg+PWUuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgpLHYoMSksSGUoIiAiLGUuY3BBZGRDb2xvckJ1dHRvblRleHQsIiAiKX19ZnVuY3Rpb24gQ1ZlKG4sdCl7MSZuJiZQKDAsImRpdiIsMzMpfWZ1bmN0aW9uIE1WZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImlucHV0IiwzOSksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQWxwaGFJbnB1dChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO18oInJnIiwxKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0LmEpfX1mdW5jdGlvbiB3VmUobix0KXsxJm4mJihoKDAsImRpdiIpLFQoMSwiQSIpLGcoKSl9ZnVuY3Rpb24gU1ZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwzNCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDM2KSxJKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQ3lhbklucHV0KHIpKX0pLGcoKSxoKDMsImlucHV0IiwzNiksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbk1hZ2VudGFJbnB1dChyKSl9KSxnKCksaCg0LCJpbnB1dCIsMzYpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25ZZWxsb3dJbnB1dChyKSl9KSxnKCksaCg1LCJpbnB1dCIsMzYpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25CbGFja0lucHV0KHIpKX0pLGcoKSxTKDYsTVZlLDEsMiwiaW5wdXQiLDM3KSxnKCksaCg3LCJkaXYiLDM1KSg4LCJkaXYiKSxUKDksIkMiKSxnKCksaCgxMCwiZGl2IiksVCgxMSwiTSIpLGcoKSxoKDEyLCJkaXYiKSxUKDEzLCJZIiksZygpLGgoMTQsImRpdiIpLFQoMTUsIksiKSxnKCksUygxNix3VmUsMiwwLCJkaXYiLDM4KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtUdCgiZGlzcGxheSIsMyE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSx2KDIpLF8oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQuYyksdigxKSxfKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0Lm0pLHYoMSksXygicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC55KSx2KDEpLF8oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQuayksdigxKSxfKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCksdigxMCksXygibmdJZiIsImRpc2FibGVkIiE9PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBFVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJpbnB1dCIsMzkpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFscGhhSW5wdXQocikpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtfKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gVFZlKG4sdCl7MSZuJiYoaCgwLCJkaXYiKSxUKDEsIkEiKSxnKCkpfWZ1bmN0aW9uIERWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNDApKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MSksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkh1ZUlucHV0KHIpKX0pLGcoKSxoKDMsImlucHV0IiwzNiksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblNhdHVyYXRpb25JbnB1dChyKSl9KSxnKCksaCg0LCJpbnB1dCIsMzYpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25MaWdodG5lc3NJbnB1dChyKSl9KSxnKCksUyg1LEVWZSwxLDIsImlucHV0IiwzNyksZygpLGgoNiwiZGl2IiwzNSkoNywiZGl2IiksVCg4LCJIIiksZygpLGgoOSwiZGl2IiksVCgxMCwiUyIpLGcoKSxoKDExLCJkaXYiKSxUKDEyLCJMIiksZygpLFMoMTMsVFZlLDIsMCwiZGl2IiwzOCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7VHQoImRpc3BsYXkiLDIhPT1lLmZvcm1hdD8ibm9uZSI6ImJsb2NrIiksdigyKSxfKCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmgpLHYoMSksXygicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5zKSx2KDEpLF8oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQubCksdigxKSxfKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCksdig4KSxfKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIElWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImlucHV0IiwzOSksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQWxwaGFJbnB1dChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO18oInJnIiwxKSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmEpfX1mdW5jdGlvbiBBVmUobix0KXsxJm4mJihoKDAsImRpdiIpLFQoMSwiQSIpLGcoKSl9ZnVuY3Rpb24gUlZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw0MikoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQzKSxJKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uUmVkSW5wdXQocikpfSksZygpLGgoMywiaW5wdXQiLDQzKSxJKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uR3JlZW5JbnB1dChyKSl9KSxnKCksaCg0LCJpbnB1dCIsNDMpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25CbHVlSW5wdXQocikpfSksZygpLFMoNSxJVmUsMSwyLCJpbnB1dCIsMzcpLGcoKSxoKDYsImRpdiIsMzUpKDcsImRpdiIpLFQoOCwiUiIpLGcoKSxoKDksImRpdiIpLFQoMTAsIkciKSxnKCksaCgxMSwiZGl2IiksVCgxMiwiQiIpLGcoKSxTKDEzLEFWZSwyLDAsImRpdiIsMzgpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO1R0KCJkaXNwbGF5IiwxIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLHYoMiksXygicmciLDI1NSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5yKSx2KDEpLF8oInJnIiwyNTUpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQuZyksdigxKSxfKCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmIpLHYoMSksXygibmdJZiIsImRpc2FibGVkIiE9PWUuY3BBbHBoYUNoYW5uZWwpLHYoOCksXygibmdJZiIsImRpc2FibGVkIiE9PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBQVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJpbnB1dCIsMzkpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFscGhhSW5wdXQocikpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtfKCJyZyIsMSkoInZhbHVlIixlLmhleEFscGhhKX19ZnVuY3Rpb24gT1ZlKG4sdCl7MSZuJiYoaCgwLCJkaXYiKSxUKDEsIkEiKSxnKCkpfWZ1bmN0aW9uIGtWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNDQpKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0NSksSSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkhleElucHV0KG51bGwpKX0pKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uSGV4SW5wdXQocikpfSksZygpLFMoMyxQVmUsMSwyLCJpbnB1dCIsMzcpLGcoKSxoKDQsImRpdiIsMzUpKDUsImRpdiIpLFQoNiwiSGV4IiksZygpLFMoNyxPVmUsMiwwLCJkaXYiLDM4KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtUdCgiZGlzcGxheSIsMCE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSxudCgiaGV4LWFscGhhIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpLHYoMiksXygidmFsdWUiLGUuaGV4VGV4dCksdigxKSxfKCJuZ0lmIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpLHYoNCksXygibmdJZiIsImZvcmNlZCI9PT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gRlZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiaW5wdXQiLDM5KSxJKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BbHBoYUlucHV0KHIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQuYSl9fWZ1bmN0aW9uIE5WZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNDYpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblZhbHVlSW5wdXQocikpfSksZygpLFMoMyxGVmUsMSwyLCJpbnB1dCIsMzcpLGcoKSxoKDQsImRpdiIsMzUpKDUsImRpdiIpLFQoNiwiViIpLGcoKSxoKDcsImRpdiIpLFQoOCwiQSIpLGcoKSgpKCl9aWYoMiZuKXtsZXQgZT13KCk7digyKSxfKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmwpLHYoMSksXygibmdJZiIsImRpc2FibGVkIiE9PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBMVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDQ3KSgxLCJzcGFuIiw0OCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25Gb3JtYXRUb2dnbGUoLTEpKX0pLGcoKSxoKDIsInNwYW4iLDQ4KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkZvcm1hdFRvZ2dsZSgxKSl9KSxnKCkoKX19ZnVuY3Rpb24gQlZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwic3BhbiIsNTUpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKS4kaW1wbGljaXQ7cmV0dXJuIFEodygzKS5vblJlbW92ZVByZXNldENvbG9yKHIsbykpfSksZygpfTImbiYmQXModyg0KS5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3MpfWZ1bmN0aW9uIFZWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNTMpLEkoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoMykuc2V0Q29sb3JGcm9tU3RyaW5nKG8pKX0pLFMoMSxCVmUsMSwzLCJzcGFuIiw1NCksZygpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDMpO1R0KCJiYWNrZ3JvdW5kLWNvbG9yIixlKSx2KDEpLF8oIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uIEhWZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiksUygxLFZWZSwyLDMsImRpdiIsNTIpLGcoKSksMiZuKXtsZXQgZT13KDIpO0FzKGUuY3BQcmVzZXRDb2xvcnNDbGFzcyksdigxKSxfKCJuZ0Zvck9mIixlLmNwUHJlc2V0Q29sb3JzKX19ZnVuY3Rpb24gelZlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpO0FzKGUuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcyksdigxKSxidChlLmNwUHJlc2V0RW1wdHlNZXNzYWdlKX19ZnVuY3Rpb24gVVZlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDQ5KSxQKDEsImhyIiksaCgyLCJkaXYiLDUwKSxUKDMpLGcoKSxTKDQsSFZlLDIsNCwiZGl2Iiw1MSksUyg1LHpWZSwyLDQsImRpdiIsNTEpLGcoKSksMiZuKXtsZXQgZT13KCk7digzKSxidChlLmNwUHJlc2V0TGFiZWwpLHYoMSksXygibmdJZiIsbnVsbD09ZS5jcFByZXNldENvbG9ycz9udWxsOmUuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKSx2KDEpLF8oIm5nSWYiLCEobnVsbCE9ZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZlLmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiBqVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDU4KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQ2FuY2VsQ29sb3IocikpfSksVCgxKSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO0FzKGUuY3BDYW5jZWxCdXR0b25DbGFzcyksdigxKSxidChlLmNwQ2FuY2VsQnV0dG9uVGV4dCl9fWZ1bmN0aW9uIEdWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsNTgpLEkoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BY2NlcHRDb2xvcihyKSl9KSxUKDEpLGcoKX1pZigyJm4pe2xldCBlPXcoMik7QXMoZS5jcE9LQnV0dG9uQ2xhc3MpLHYoMSksYnQoZS5jcE9LQnV0dG9uVGV4dCl9fWZ1bmN0aW9uIFdWZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw1NiksUygxLGpWZSwyLDQsImJ1dHRvbiIsNTcpLFMoMixHVmUsMiw0LCJidXR0b24iLDU3KSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksXygibmdJZiIsZS5jcENhbmNlbEJ1dHRvbiksdigxKSxfKCJuZ0lmIixlLmNwT0tCdXR0b24pfX1mdW5jdGlvbiBxVmUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIFlWZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw1OSksUygxLHFWZSwxLDAsIm5nLWNvbnRhaW5lciIsNjApLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmNwRXh0cmFUZW1wbGF0ZSl9fXZhciBIbz0oKCk9PihmdW5jdGlvbihuKXtuW24uSEVYPTBdPSJIRVgiLG5bbi5SR0JBPTFdPSJSR0JBIixuW24uSFNMQT0yXT0iSFNMQSIsbltuLkNNWUs9M109IkNNWUsifShIb3x8KEhvPXt9KSksSG8pKSgpLHRjPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMucj10LHRoaXMuZz1lLHRoaXMuYj1pLHRoaXMuYT1yfX0sZl89Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy52PWksdGhpcy5hPXJ9fSxZZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLmw9aSx0aGlzLmE9cn19LHhtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbz0xKXt0aGlzLmM9dCx0aGlzLm09ZSx0aGlzLnk9aSx0aGlzLms9cix0aGlzLmE9b319LFpWZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5uZXdWYWx1ZT1uZXcgRn1pbnB1dENoYW5nZShlKXtsZXQgaT1lLnRhcmdldC52YWx1ZTtpZih2b2lkIDA9PT10aGlzLnJnKXRoaXMubmV3VmFsdWUuZW1pdChpKTtlbHNle2xldCByPXBhcnNlRmxvYXQoaSk7dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OnIscmc6dGhpcy5yZ30pfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsInRleHQiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaW5wdXRDaGFuZ2Uobyl9KX0saW5wdXRzOntyZzoicmciLHRleHQ6InRleHQifSxvdXRwdXRzOntuZXdWYWx1ZToibmV3VmFsdWUifX0pLG59KSgpLEtWZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZWxSZWY9ZSx0aGlzLmRyYWdFbmQ9bmV3IEYsdGhpcy5kcmFnU3RhcnQ9bmV3IEYsdGhpcy5uZXdWYWx1ZT1uZXcgRix0aGlzLmxpc3RlbmVyTW92ZT1pPT50aGlzLm1vdmUoaSksdGhpcy5saXN0ZW5lclN0b3A9KCk9PnRoaXMuc3RvcCgpfW1vdXNlRG93bihlKXt0aGlzLnN0YXJ0KGUpfXRvdWNoU3RhcnQoZSl7dGhpcy5zdGFydChlKX1tb3ZlKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLnNldEN1cnNvcihlKX1zdGFydChlKXt0aGlzLnNldEN1cnNvcihlKSxlLnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ1N0YXJ0LmVtaXQoKX1zdG9wKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksdGhpcy5kcmFnRW5kLmVtaXQoKX1nZXRYKGUpe2xldCBpPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4odm9pZCAwIT09ZS5wYWdlWD9lLnBhZ2VYOmUudG91Y2hlc1swXS5wYWdlWCktaS5sZWZ0LXdpbmRvdy5wYWdlWE9mZnNldH1nZXRZKGUpe2xldCBpPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4odm9pZCAwIT09ZS5wYWdlWT9lLnBhZ2VZOmUudG91Y2hlc1swXS5wYWdlWSktaS50b3Atd2luZG93LnBhZ2VZT2Zmc2V0fXNldEN1cnNvcihlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgscj10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0LG89TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmdldFgoZSksaSkpLHM9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmdldFkoZSkscikpO3ZvaWQgMCE9PXRoaXMucmdYJiZ2b2lkIDAhPT10aGlzLnJnWT90aGlzLm5ld1ZhbHVlLmVtaXQoe3M6by9pLHY6MS1zL3IscmdYOnRoaXMucmdYLHJnWTp0aGlzLnJnWX0pOnZvaWQgMD09PXRoaXMucmdYJiZ2b2lkIDAhPT10aGlzLnJnWT90aGlzLm5ld1ZhbHVlLmVtaXQoe3Y6cy9yLHJnWTp0aGlzLnJnWX0pOnZvaWQgMCE9PXRoaXMucmdYJiZ2b2lkIDA9PT10aGlzLnJnWSYmdGhpcy5uZXdWYWx1ZS5lbWl0KHt2Om8vaSxyZ1g6dGhpcy5yZ1h9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJzbGlkZXIiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLm1vdXNlRG93bihvKX0pKCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS50b3VjaFN0YXJ0KG8pfSl9LGlucHV0czp7cmdYOiJyZ1giLHJnWToicmdZIixzbGlkZXI6InNsaWRlciJ9LG91dHB1dHM6e2RyYWdFbmQ6ImRyYWdFbmQiLGRyYWdTdGFydDoiZHJhZ1N0YXJ0IixuZXdWYWx1ZToibmV3VmFsdWUifX0pLG59KSgpLG1BPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0saEE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy52PWksdGhpcy5hPXJ9fSxFVj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmU9bnVsbH1zZXRBY3RpdmUoZSl7dGhpcy5hY3RpdmUmJnRoaXMuYWN0aXZlIT09ZSYmImlubGluZSIhPT10aGlzLmFjdGl2ZS5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuYWN0aXZlLmNsb3NlRGlhbG9nKCksdGhpcy5hY3RpdmU9ZX1oc3ZhMmhzbGEoZSl7bGV0IGk9ZS5oLHI9ZS5zLG89ZS52LHM9ZS5hO2lmKDA9PT1vKXJldHVybiBuZXcgWWQoaSwwLDAscyk7aWYoMD09PXImJjE9PT1vKXJldHVybiBuZXcgWWQoaSwxLDEscyk7e2xldCBhPW8qKDItcikvMjtyZXR1cm4gbmV3IFlkKGksbypyLygxLU1hdGguYWJzKDIqYS0xKSksYSxzKX19aHNsYTJoc3ZhKGUpe2xldCBpPU1hdGgubWluKGUuaCwxKSxyPU1hdGgubWluKGUucywxKSxvPU1hdGgubWluKGUubCwxKSxzPU1hdGgubWluKGUuYSwxKTtpZigwPT09bylyZXR1cm4gbmV3IGZfKGksMCwwLHMpO3tsZXQgYT1vK3IqKDEtTWF0aC5hYnMoMipvLTEpKS8yO3JldHVybiBuZXcgZl8oaSwyKihhLW8pL2EsYSxzKX19aHN2YVRvUmdiYShlKXtsZXQgaSxyLG8scz1lLmgsYT1lLnMsbD1lLnYsYz1lLmEsZD1NYXRoLmZsb29yKDYqcyksdT02KnMtZCxwPWwqKDEtYSksZj1sKigxLXUqYSksbT1sKigxLSgxLXUpKmEpO3N3aXRjaChkJTYpe2Nhc2UgMDppPWwscj1tLG89cDticmVhaztjYXNlIDE6aT1mLHI9bCxvPXA7YnJlYWs7Y2FzZSAyOmk9cCxyPWwsbz1tO2JyZWFrO2Nhc2UgMzppPXAscj1mLG89bDticmVhaztjYXNlIDQ6aT1tLHI9cCxvPWw7YnJlYWs7Y2FzZSA1Omk9bCxyPXAsbz1mO2JyZWFrO2RlZmF1bHQ6aT0wLHI9MCxvPTB9cmV0dXJuIG5ldyB0YyhpLHIsbyxjKX1jbXlrVG9SZ2IoZSl7cmV0dXJuIG5ldyB0YygoMS1lLmMpKigxLWUuayksKDEtZS5tKSooMS1lLmspLCgxLWUueSkqKDEtZS5rKSxlLmEpfXJnYmFUb0NteWsoZSl7bGV0IGk9MS1NYXRoLm1heChlLnIsZS5nLGUuYik7cmV0dXJuIDE9PT1pP25ldyB4bSgwLDAsMCwxLGUuYSk6bmV3IHhtKCgxLWUuci1pKS8oMS1pKSwoMS1lLmctaSkvKDEtaSksKDEtZS5iLWkpLygxLWkpLGksZS5hKX1yZ2JhVG9Ic3ZhKGUpe2xldCBpLHIsbz1NYXRoLm1pbihlLnIsMSkscz1NYXRoLm1pbihlLmcsMSksYT1NYXRoLm1pbihlLmIsMSksbD1NYXRoLm1pbihlLmEsMSksYz1NYXRoLm1heChvLHMsYSksZD1NYXRoLm1pbihvLHMsYSksdT1jLHA9Yy1kO2lmKHI9MD09PWM/MDpwL2MsYz09PWQpaT0wO2Vsc2V7c3dpdGNoKGMpe2Nhc2UgbzppPShzLWEpL3ArKHM8YT82OjApO2JyZWFrO2Nhc2UgczppPShhLW8pL3ArMjticmVhaztjYXNlIGE6aT0oby1zKS9wKzQ7YnJlYWs7ZGVmYXVsdDppPTB9aS89Nn1yZXR1cm4gbmV3IGZfKGkscix1LGwpfXJnYmFUb0hleChlLGkpe2xldCByPSIjIisoMTY3NzcyMTZ8ZS5yPDwxNnxlLmc8PDh8ZS5iKS50b1N0cmluZygxNikuc3Vic3RyKDEpO3JldHVybiBpJiYocis9KDI1NnxNYXRoLnJvdW5kKDI1NSplLmEpKS50b1N0cmluZygxNikuc3Vic3RyKDEpKSxyfW5vcm1hbGl6ZUNNWUsoZSl7cmV0dXJuIG5ldyB4bShlLmMvMTAwLGUubS8xMDAsZS55LzEwMCxlLmsvMTAwLGUuYSl9ZGVub3JtYWxpemVDTVlLKGUpe3JldHVybiBuZXcgeG0oTWF0aC5mbG9vcigxMDAqZS5jKSxNYXRoLmZsb29yKDEwMCplLm0pLE1hdGguZmxvb3IoMTAwKmUueSksTWF0aC5mbG9vcigxMDAqZS5rKSxlLmEpfWRlbm9ybWFsaXplUkdCQShlKXtyZXR1cm4gbmV3IHRjKE1hdGgucm91bmQoMjU1KmUuciksTWF0aC5yb3VuZCgyNTUqZS5nKSxNYXRoLnJvdW5kKDI1NSplLmIpLGUuYSl9c3RyaW5nVG9Ic3ZhKGU9IiIsaT0hMSl7bGV0IHI9bnVsbDtlPShlfHwiIikudG9Mb3dlckNhc2UoKTtsZXQgbz1be3JlOi8ocmdiKWE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqJT8sXHMqKFxkezEsM30pXHMqJT8oPzosXHMqKFxkKyg/OlwuXGQrKT8pXHMqKT9cKS8scGFyc2U6ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyB0YyhwYXJzZUludChzWzJdLDEwKS8yNTUscGFyc2VJbnQoc1szXSwxMCkvMjU1LHBhcnNlSW50KHNbNF0sMTApLzI1NSxpc05hTihwYXJzZUZsb2F0KHNbNV0pKT8xOnBhcnNlRmxvYXQoc1s1XSkpfX0se3JlOi8oaHNsKWE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pJVxzKixccyooXGR7MSwzfSklXHMqKD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgWWQocGFyc2VJbnQoc1syXSwxMCkvMzYwLHBhcnNlSW50KHNbM10sMTApLzEwMCxwYXJzZUludChzWzRdLDEwKS8xMDAsaXNOYU4ocGFyc2VGbG9hdChzWzVdKSk/MTpwYXJzZUZsb2F0KHNbNV0pKX19XTtvLnB1c2goaT97cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pPyQvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgdGMocGFyc2VJbnQoc1sxXSwxNikvMjU1LHBhcnNlSW50KHNbMl0sMTYpLzI1NSxwYXJzZUludChzWzNdLDE2KS8yNTUscGFyc2VJbnQoc1s0XXx8IkZGIiwxNikvMjU1KX19OntyZTovIyhbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KSQvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgdGMocGFyc2VJbnQoc1sxXSwxNikvMjU1LHBhcnNlSW50KHNbMl0sMTYpLzI1NSxwYXJzZUludChzWzNdLDE2KS8yNTUsMSl9fSksby5wdXNoKHtyZTovIyhbYS1mQS1GMC05XSkoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKSQvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgdGMocGFyc2VJbnQoc1sxXStzWzFdLDE2KS8yNTUscGFyc2VJbnQoc1syXStzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXStzWzNdLDE2KS8yNTUsMSl9fSk7Zm9yKGxldCBzIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShzKSl7bGV0IGE9b1tzXSxsPWEucmUuZXhlYyhlKSxjPWwmJmEucGFyc2UobCk7aWYoYylyZXR1cm4gYyBpbnN0YW5jZW9mIHRjP3I9dGhpcy5yZ2JhVG9Ic3ZhKGMpOmMgaW5zdGFuY2VvZiBZZCYmKHI9dGhpcy5oc2xhMmhzdmEoYykpLHJ9cmV0dXJuIHJ9b3V0cHV0Rm9ybWF0KGUsaSxyKXtzd2l0Y2goImF1dG8iPT09aSYmKGk9ZS5hPDE/InJnYmEiOiJoZXgiKSxpKXtjYXNlImhzbGEiOmxldCBvPXRoaXMuaHN2YTJoc2xhKGUpLHM9bmV3IFlkKE1hdGgucm91bmQoMzYwKm8uaCksTWF0aC5yb3VuZCgxMDAqby5zKSxNYXRoLnJvdW5kKDEwMCpvLmwpLE1hdGgucm91bmQoMTAwKm8uYSkvMTAwKTtyZXR1cm4gZS5hPDF8fCJhbHdheXMiPT09cj8iaHNsYSgiK3MuaCsiLCIrcy5zKyIlLCIrcy5sKyIlLCIrcy5hKyIpIjoiaHNsKCIrcy5oKyIsIitzLnMrIiUsIitzLmwrIiUpIjtjYXNlInJnYmEiOmxldCBhPXRoaXMuZGVub3JtYWxpemVSR0JBKHRoaXMuaHN2YVRvUmdiYShlKSk7cmV0dXJuIGUuYTwxfHwiYWx3YXlzIj09PXI/InJnYmEoIithLnIrIiwiK2EuZysiLCIrYS5iKyIsIitNYXRoLnJvdW5kKDEwMCphLmEpLzEwMCsiKSI6InJnYigiK2EucisiLCIrYS5nKyIsIithLmIrIikiO2RlZmF1bHQ6bGV0IGw9ImFsd2F5cyI9PT1yfHwiZm9yY2VkIj09PXI7cmV0dXJuIHRoaXMucmdiYVRvSGV4KHRoaXMuZGVub3JtYWxpemVSR0JBKHRoaXMuaHN2YVRvUmdiYShlKSksbCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxfbmU9dHlwZW9mIHdpbmRvdzwidSImJiJvbnRvdWNoc3RhcnQiaW4gd2luZG93LEpWZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLm5nWm9uZT1lLHRoaXMuZWxSZWY9aSx0aGlzLmNkUmVmPXIsdGhpcy5kb2N1bWVudD1vLHRoaXMucGxhdGZvcm1JZD1zLHRoaXMuc2VydmljZT1hLHRoaXMuaXNJRTEwPSExLHRoaXMuZGlhbG9nQXJyb3dTaXplPTEwLHRoaXMuZGlhbG9nQXJyb3dPZmZzZXQ9MTUsdGhpcy5kaWFsb2dJbnB1dEZpZWxkcz1bSG8uSEVYLEhvLlJHQkEsSG8uSFNMQSxIby5DTVlLXSx0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyPSExLHRoaXMuZXllRHJvcHBlclN1cHBvcnRlZD1ndyh0aGlzLnBsYXRmb3JtSWQpJiYiRXllRHJvcHBlciJpbiB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3fWhhbmRsZUVzYyhlKXt0aGlzLnNob3cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5vbkNhbmNlbENvbG9yKGUpfWhhbmRsZUVudGVyKGUpe3RoaXMuc2hvdyYmInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLm9uQWNjZXB0Q29sb3IoZSl9bmdPbkluaXQoKXt0aGlzLnNsaWRlcj1uZXcgbUEoMCwwLDAsMCksdGhpcy5zbGlkZXJEaW1NYXg9bmV3IGhBKHRoaXMuaHVlU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCx0aGlzLmNwV2lkdGgsMTMwLHRoaXMuYWxwaGFTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwKSx0aGlzLmZvcm1hdD10aGlzLmNwQ215a0VuYWJsZWQ/SG8uQ01ZSzoicmdiYSI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0P0hvLlJHQkE6ImhzbGEiPT09dGhpcy5jcE91dHB1dEZvcm1hdD9Iby5IU0xBOkhvLkhFWCx0aGlzLmxpc3RlbmVyTW91c2VEb3duPXI9Pnt0aGlzLm9uTW91c2VEb3duKHIpfSx0aGlzLmxpc3RlbmVyUmVzaXplPSgpPT57dGhpcy5vblJlc2l6ZSgpfSx0aGlzLm9wZW5EaWFsb2codGhpcy5pbml0aWFsQ29sb3IsITEpfW5nT25EZXN0cm95KCl7dGhpcy5jbG9zZURpYWxvZygpfW5nQWZ0ZXJWaWV3SW5pdCgpezIzMD09PXRoaXMuY3BXaWR0aCYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheXx8KHRoaXMuc2xpZGVyRGltTWF4PW5ldyBoQSh0aGlzLmh1ZVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDAsdGhpcy5jcFdpZHRoLDEzMCx0aGlzLmFscGhhU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCksdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSksdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCkpfW9wZW5EaWFsb2coZSxpPSEwKXt0aGlzLnNlcnZpY2Uuc2V0QWN0aXZlKHRoaXMpLHRoaXMud2lkdGh8fCh0aGlzLmNwV2lkdGg9dGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpLHRoaXMuaGVpZ2h0fHwodGhpcy5oZWlnaHQ9MzIwKSx0aGlzLnNldEluaXRpYWxDb2xvcihlKSx0aGlzLnNldENvbG9yRnJvbVN0cmluZyhlLGkpLHRoaXMub3BlbkNvbG9yUGlja2VyKCl9Y2xvc2VEaWFsb2coKXt0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKX1zZXR1cERpYWxvZyhlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIsTSx5LHgsUixBLFYsdGUsSyx4ZSxYZSxEZSxELHJlLGNlLGZlLGJlLG5lLGRlLHBlLGplLENlLE5lLGx0LE10KXt0aGlzLnNldEluaXRpYWxDb2xvcihyKSx0aGlzLnNldENvbG9yTW9kZShjKSx0aGlzLmlzSUUxMD0xMD09PWZ1bmN0aW9uKCl7bGV0IG49IiI7dHlwZW9mIG5hdmlnYXRvcjwidSImJihuPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7bGV0IHQ9bi5pbmRleE9mKCJtc2llICIpO3JldHVybiB0PjAmJnBhcnNlSW50KG4uc3Vic3RyaW5nKHQrNSxuLmluZGV4T2YoIi4iLHQpKSwxMCl9KCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZT1lLHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZj1pLHRoaXMuY3BEaXNhYmxlSW5wdXQ9Zix0aGlzLmNwQ215a0VuYWJsZWQ9ZCx0aGlzLmNwQWxwaGFDaGFubmVsPXUsdGhpcy5jcE91dHB1dEZvcm1hdD1wLHRoaXMuY3BEaWFsb2dEaXNwbGF5PWEsdGhpcy5jcElnbm9yZWRFbGVtZW50cz1tLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPWIsdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlPU0sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj15LHRoaXMud2lkdGg9dGhpcy5jcFdpZHRoPXBhcnNlSW50KG8sMTApLHRoaXMuaGVpZ2h0PXRoaXMuY3BIZWlnaHQ9cGFyc2VJbnQocywxMCksdGhpcy5jcFBvc2l0aW9uPXgsdGhpcy5jcFBvc2l0aW9uT2Zmc2V0PXBhcnNlSW50KFIsMTApLHRoaXMuY3BPS0J1dHRvbj1ELHRoaXMuY3BPS0J1dHRvblRleHQ9Y2UsdGhpcy5jcE9LQnV0dG9uQ2xhc3M9cmUsdGhpcy5jcENhbmNlbEJ1dHRvbj1mZSx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dD1uZSx0aGlzLmNwQ2FuY2VsQnV0dG9uQ2xhc3M9YmUsdGhpcy5jcEV5ZURyb3BwZXI9TmUsdGhpcy5mYWxsYmFja0NvbG9yPWx8fCIjZmZmIix0aGlzLnNldFByZXNldENvbmZpZyhWLHRlKSx0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9Syx0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoPXhlLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2U9WGUsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzPURlLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj1kZSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PWplLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPXBlLHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzPUNlLHRoaXMuY3BUcmlnZ2VyRWxlbWVudD1sdCx0aGlzLmNwRXh0cmFUZW1wbGF0ZT1NdCxBfHwodGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaW5saW5lIj09PWEmJih0aGlzLmRpYWxvZ0Fycm93U2l6ZT0wLHRoaXMuZGlhbG9nQXJyb3dPZmZzZXQ9MCksImhleCI9PT1wJiYiYWx3YXlzIiE9PXUmJiJmb3JjZWQiIT09dSYmKHRoaXMuY3BBbHBoYUNoYW5uZWw9ImRpc2FibGVkIil9c2V0Q29sb3JNb2RlKGUpe3N3aXRjaChlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSl7Y2FzZSIxIjpjYXNlIkMiOmNhc2UiQ09MT1IiOmRlZmF1bHQ6dGhpcy5jcENvbG9yTW9kZT0xO2JyZWFrO2Nhc2UiMiI6Y2FzZSJHIjpjYXNlIkdSQVlTQ0FMRSI6dGhpcy5jcENvbG9yTW9kZT0yO2JyZWFrO2Nhc2UiMyI6Y2FzZSJQIjpjYXNlIlBSRVNFVFMiOnRoaXMuY3BDb2xvck1vZGU9M319c2V0SW5pdGlhbENvbG9yKGUpe3RoaXMuaW5pdGlhbENvbG9yPWV9c2V0UHJlc2V0Q29uZmlnKGUsaSl7dGhpcy5jcFByZXNldExhYmVsPWUsdGhpcy5jcFByZXNldENvbG9ycz1pfXNldENvbG9yRnJvbVN0cmluZyhlLGk9ITAscj0hMCl7bGV0IG87ImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWw/KG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCEwKSwhbyYmIXRoaXMuaHN2YSYmKG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCExKSkpOm89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCExKSwhbyYmIXRoaXMuaHN2YSYmKG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YSh0aGlzLmZhbGxiYWNrQ29sb3IsITEpKSxvJiYodGhpcy5oc3ZhPW8sdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLCJoZXgiPT09dGhpcy5jcE91dHB1dEZvcm1hdCYmImRpc2FibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJih0aGlzLmhzdmEuYT0xKSx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKGkscikpfW9uUmVzaXplKCl7ImZpeGVkIj09PXRoaXMucG9zaXRpb24/dGhpcy5zZXREaWFsb2dQb3NpdGlvbigpOiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfW9uRHJhZ0VuZChlKXt0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckRyYWdFbmQoe3NsaWRlcjplLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkRyYWdTdGFydChlKXt0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckRyYWdTdGFydCh7c2xpZGVyOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uTW91c2VEb3duKGUpe3RoaXMuc2hvdyYmIXRoaXMuaXNJRTEwJiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJmUudGFyZ2V0IT09dGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQmJiF0aGlzLmlzRGVzY2VuZGFudCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsZS50YXJnZXQpJiYhdGhpcy5pc0Rlc2NlbmRhbnQodGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZS50YXJnZXQpJiYwPT09dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIoaT0+aT09PWUudGFyZ2V0KS5sZW5ndGgmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlP3RoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKToodGhpcy5oc3ZhPW51bGwsdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsITEpLHRoaXMuY3BDbXlrRW5hYmxlZCYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNoYW5nZWQodGhpcy5pbml0aWFsQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpKSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfSl9b25BY2NlcHRDb2xvcihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub3V0cHV0Q29sb3ImJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfW9uQ2FuY2VsQ29sb3IoZSl7dGhpcy5oc3ZhPW51bGwsZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2FuY2VsZWQoKSx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMCksInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciwhMCksdGhpcy5jbG9zZUNvbG9yUGlja2VyKCkpfW9uRXllRHJvcHBlcigpe3RoaXMuZXllRHJvcHBlclN1cHBvcnRlZCYmKG5ldyB3aW5kb3cuRXllRHJvcHBlcikub3BlbigpLnRoZW4oaT0+e3RoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKGkuc1JHQkhleCwhMCl9KX1vbkZvcm1hdFRvZ2dsZShlKXtsZXQgaT10aGlzLmRpYWxvZ0lucHV0RmllbGRzLmxlbmd0aC0odGhpcy5jcENteWtFbmFibGVkPzA6MSkscj0oKHRoaXMuZGlhbG9nSW5wdXRGaWVsZHMuaW5kZXhPZih0aGlzLmZvcm1hdCkrZSklaStpKSVpO3RoaXMuZm9ybWF0PXRoaXMuZGlhbG9nSW5wdXRGaWVsZHNbcl19b25Db2xvckNoYW5nZShlKXt0aGlzLmhzdmEucz1lLnMvZS5yZ1gsdGhpcy5oc3ZhLnY9ZS52L2UucmdZLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoibGlnaHRuZXNzIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InNhdHVyYXRpb24iLHZhbHVlOnRoaXMuaHN2YS5zLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUNoYW5nZShlKXt0aGlzLmhzdmEuaD1lLnYvZS5yZ1gsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiaHVlIix2YWx1ZTp0aGlzLmhzdmEuaCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25WYWx1ZUNoYW5nZShlKXt0aGlzLmhzdmEudj1lLnYvZS5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJ2YWx1ZSIsdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFDaGFuZ2UoZSl7dGhpcy5oc3ZhLmE9ZS52L2UucmdYLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiYWxwaGEiLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkhleElucHV0KGUpe2lmKG51bGw9PT1lKXRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKTtlbHNle2UmJiIjIiE9PWVbMF0mJihlPSIjIitlKTtsZXQgaT0vXiMoW2EtZjAtOV17M318W2EtZjAtOV17Nn0pJC9naTsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJihpPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fXxbYS1mMC05XXs4fSkkL2dpKTtsZXQgcj1pLnRlc3QoZSk7ciYmKGUubGVuZ3RoPDUmJihlPSIjIitlLnN1YnN0cmluZygxKS5zcGxpdCgiIikubWFwKG89Pm8rbykuam9pbigiIikpLCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKGUrPU1hdGgucm91bmQoMjU1KnRoaXMuaHN2YS5hKS50b1N0cmluZygxNikpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKGUsITAsITEpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImhleCIsdmFsaWQ6cix2YWx1ZTplLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX19b25SZWRJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLnI9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoicmVkIix2YWxpZDpyLHZhbHVlOmkucixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25CbHVlSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5iPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImJsdWUiLHZhbGlkOnIsdmFsdWU6aS5iLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkdyZWVuSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5nPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImdyZWVuIix2YWxpZDpyLHZhbHVlOmkuZyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25IdWVJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS5oPWUudi9lLnJnLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaHVlIix2YWxpZDppLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlSW5wdXQoZSl7bGV0IGk9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO2kmJih0aGlzLmhzdmEudj1lLnYvZS5yZyx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoidmFsdWUiLHZhbGlkOmksdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS5hPWUudi9lLnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJhbHBoYSIsdmFsaWQ6aSx2YWx1ZTp0aGlzLmhzdmEuYSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25MaWdodG5lc3NJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSkscj0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7ciYmKGkubD1lLnYvZS5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLmhzbGEyaHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImxpZ2h0bmVzcyIsdmFsaWQ6cix2YWx1ZTppLmwsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uU2F0dXJhdGlvbklucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5zPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoic2F0dXJhdGlvbiIsdmFsaWQ6cix2YWx1ZTppLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQ3lhbklucHV0KGUpeyFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZyYmKHRoaXMuY215ay5jPWUudix0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExLCEwLCEwKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJjeWFuIix2YWxpZDohMCx2YWx1ZTp0aGlzLmNteWsuYyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25NYWdlbnRhSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLm09ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6Im1hZ2VudGEiLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5tLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblllbGxvd0lucHV0KGUpeyFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZyYmKHRoaXMuY215ay55PWUudix0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExLCEwLCEwKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ5ZWxsb3ciLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay55LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsYWNrSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLms9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImJsYWNrIix2YWxpZDohMCx2YWx1ZTp0aGlzLmNteWsuayxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BZGRQcmVzZXRDb2xvcihlLGkpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIocj0+cj09PWkpLmxlbmd0aHx8KHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5jb25jYXQoaSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5wcmVzZXRDb2xvcnNDaGFuZ2VkKHRoaXMuY3BQcmVzZXRDb2xvcnMpKX1vblJlbW92ZVByZXNldENvbG9yKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzPXRoaXMuY3BQcmVzZXRDb2xvcnMuZmlsdGVyKHI9PnIhPT1pKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycyl9b3BlbkNvbG9yUGlja2VyKCl7dGhpcy5zaG93fHwodGhpcy5zaG93PSEwLHRoaXMuaGlkZGVuPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmhpZGRlbj0hMSx0aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCksdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCl9LDApLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc3RhdGVDaGFuZ2VkKCEwKSx0aGlzLmlzSUUxMHx8dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntfbmU/ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5saXN0ZW5lck1vdXNlRG93bik6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmxpc3RlbmVyTW91c2VEb3duKX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpKX1jbG9zZUNvbG9yUGlja2VyKCl7dGhpcy5zaG93JiYodGhpcy5zaG93PSExLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc3RhdGVDaGFuZ2VkKCExKSx0aGlzLmlzSUUxMHx8KF9uZT9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKTpkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMubGlzdGVuZXJNb3VzZURvd24pKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLmxpc3RlbmVyUmVzaXplKSx0aGlzLmNkUmVmLmRlc3Ryb3llZHx8dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCkpfXVwZGF0ZUNvbG9yUGlja2VyKGU9ITAsaT0hMCxyPSExKXtpZih0aGlzLnNsaWRlckRpbU1heCl7Mj09PXRoaXMuY3BDb2xvck1vZGUmJih0aGlzLmhzdmEucz0wKTtsZXQgbyxzLGEsbD10aGlzLm91dHB1dENvbG9yO2lmKHM9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLHRoaXMuY3BDbXlrRW5hYmxlZD8ocj8oYT10aGlzLnNlcnZpY2UuY215a1RvUmdiKHRoaXMuc2VydmljZS5ub3JtYWxpemVDTVlLKHRoaXMuY215aykpLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShhKSk6KGE9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSx0aGlzLmNteWs9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplQ01ZSyh0aGlzLnNlcnZpY2UucmdiYVRvQ215ayhhKSkpLGE9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQShhKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgpOmE9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpKSxvPXRoaXMuc2VydmljZS5kZW5vcm1hbGl6ZVJHQkEodGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEobmV3IGZfKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgsMSwxLDEpKSksaSYmKHRoaXMuaHNsYVRleHQ9bmV3IFlkKE1hdGgucm91bmQoMzYwKnMuaCksTWF0aC5yb3VuZCgxMDAqcy5zKSxNYXRoLnJvdW5kKDEwMCpzLmwpLE1hdGgucm91bmQoMTAwKnMuYSkvMTAwKSx0aGlzLnJnYmFUZXh0PW5ldyB0YyhhLnIsYS5nLGEuYixNYXRoLnJvdW5kKDEwMCphLmEpLzEwMCksdGhpcy5jcENteWtFbmFibGVkJiYodGhpcy5jbXlrVGV4dD1uZXcgeG0odGhpcy5jbXlrLmMsdGhpcy5jbXlrLm0sdGhpcy5jbXlrLnksdGhpcy5jbXlrLmssTWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMCkpLHRoaXMuaGV4VGV4dD10aGlzLnNlcnZpY2UucmdiYVRvSGV4KGEsImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsKSx0aGlzLmhleEFscGhhPXRoaXMucmdiYVRleHQuYSksImF1dG8iPT09dGhpcy5jcE91dHB1dEZvcm1hdCYmdGhpcy5mb3JtYXQhPT1Iby5SR0JBJiZ0aGlzLmZvcm1hdCE9PUhvLkNNWUsmJnRoaXMuZm9ybWF0IT09SG8uSFNMQSYmdGhpcy5oc3ZhLmE8MSYmKHRoaXMuZm9ybWF0PXRoaXMuaHN2YS5hPDE/SG8uUkdCQTpIby5IRVgpLHRoaXMuaHVlU2xpZGVyQ29sb3I9InJnYigiK28ucisiLCIrby5nKyIsIitvLmIrIikiLHRoaXMuYWxwaGFTbGlkZXJDb2xvcj0icmdiKCIrYS5yKyIsIithLmcrIiwiK2EuYisiKSIsdGhpcy5vdXRwdXRDb2xvcj10aGlzLnNlcnZpY2Uub3V0cHV0Rm9ybWF0KHRoaXMuaHN2YSx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuc2VsZWN0ZWRDb2xvcj10aGlzLnNlcnZpY2Uub3V0cHV0Rm9ybWF0KHRoaXMuaHN2YSwicmdiYSIsbnVsbCksdGhpcy5mb3JtYXQhPT1Iby5DTVlLKXRoaXMuY215a0NvbG9yPSIiO2Vsc2UgaWYoImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZW5hYmxlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpe2xldCBjPU1hdGgucm91bmQoMTAwKnRoaXMuY215ay5hKS8xMDA7dGhpcy5jbXlrQ29sb3I9YGNteWthKCR7dGhpcy5jbXlrLmN9LCR7dGhpcy5jbXlrLm19LCR7dGhpcy5jbXlrLnl9LCR7dGhpcy5jbXlrLmt9LCR7Y30pYH1lbHNlIHRoaXMuY215a0NvbG9yPWBjbXlrKCR7dGhpcy5jbXlrLmN9LCR7dGhpcy5jbXlrLm19LCR7dGhpcy5jbXlrLnl9LCR7dGhpcy5jbXlrLmt9KWA7dGhpcy5zbGlkZXI9bmV3IG1BKCh0aGlzLnNsaWRlckh8fHRoaXMuaHN2YS5oKSp0aGlzLnNsaWRlckRpbU1heC5oLTgsdGhpcy5oc3ZhLnMqdGhpcy5zbGlkZXJEaW1NYXgucy04LCgxLXRoaXMuaHN2YS52KSp0aGlzLnNsaWRlckRpbU1heC52LTgsdGhpcy5oc3ZhLmEqdGhpcy5zbGlkZXJEaW1NYXguYS04KSxlJiZsIT09dGhpcy5vdXRwdXRDb2xvciYmKHRoaXMuY3BDbXlrRW5hYmxlZCYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNoYW5nZWQodGhpcy5vdXRwdXRDb2xvcikpfX1zZXREaWFsb2dQb3NpdGlvbigpe2lmKCJpbmxpbmUiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkpdGhpcy5wb3NpdGlvbj0icmVsYXRpdmUiO2Vsc2V7bGV0IHIsZT0ic3RhdGljIixpPSIiLG89bnVsbCxzPW51bGwsYT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLGw9dGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O2Zvcig7bnVsbCE9PWEmJiJIVE1MIiE9PWEudGFnTmFtZTspe2lmKHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYSksZT1yLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIiksaT1yLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLCJzdGF0aWMiIT09ZSYmbnVsbD09PW8mJihvPWEpLGkmJiJub25lIiE9PWkmJm51bGw9PT1zJiYocz1hKSwiZml4ZWQiPT09ZSl7bz1zO2JyZWFrfWE9YS5wYXJlbnROb2RlfWxldCBjPXRoaXMuY3JlYXRlRGlhbG9nQm94KHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJmaXhlZCIhPT1lKTtpZih0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyfHwiZml4ZWQiPT09ZSYmKCFvfHxvIGluc3RhbmNlb2YgSFRNTFVua25vd25FbGVtZW50KSl0aGlzLnRvcD1jLnRvcCx0aGlzLmxlZnQ9Yy5sZWZ0O2Vsc2V7bnVsbD09PW8mJihvPWEpO2xldCB1PXRoaXMuY3JlYXRlRGlhbG9nQm94KG8sImZpeGVkIiE9PWUpO3RoaXMudG9wPWMudG9wLXUudG9wLHRoaXMubGVmdD1jLmxlZnQtdS5sZWZ0fSJmaXhlZCI9PT1lJiYodGhpcy5wb3NpdGlvbj0iZml4ZWQiKTtsZXQgZD10aGlzLmNwUG9zaXRpb247ImF1dG8iPT09dGhpcy5jcFBvc2l0aW9uJiYoZD1mdW5jdGlvbihuLHQpe2xldCBlPSJyaWdodCIsaT0iYm90dG9tIix7aGVpZ2h0OnIsd2lkdGg6b309bix7dG9wOnMsbGVmdDphfT10LGw9cyt0LmhlaWdodCxjPWErdC53aWR0aCxkPXMtcjwwLHU9bCtyPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpLHA9YS1vPDAsZj1jK28+KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpO3JldHVybiB1JiYoaT0idG9wIiksZCYmKGk9ImJvdHRvbSIpLHAmJihlPSJyaWdodCIpLGYmJihlPSJsZWZ0IiksZCYmdSYmcCYmZj9bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLnJlZHVjZSgoTSx5KT0+bltNXT5uW3ldP006eSk6cCYmZj9kPyJib3R0b20iOnV8fHM+bD8idG9wIjoiYm90dG9tIjpkJiZ1P3A/InJpZ2h0IjpmfHxhPmM/ImxlZnQiOiJyaWdodCI6YCR7aX0tJHtlfWB9KHRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY3BUcmlnZ2VyRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSksInRvcCI9PT1kPyh0aGlzLmFycm93VG9wPWwtMSx0aGlzLnRvcC09bCt0aGlzLmRpYWxvZ0Fycm93U2l6ZSx0aGlzLmxlZnQrPXRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAqYy53aWR0aC10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToiYm90dG9tIj09PWQ/KHRoaXMudG9wKz1jLmhlaWdodCt0aGlzLmRpYWxvZ0Fycm93U2l6ZSx0aGlzLmxlZnQrPXRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAqYy53aWR0aC10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToidG9wLWxlZnQiPT09ZHx8ImxlZnQtdG9wIj09PWQ/KHRoaXMudG9wLT1sLWMuaGVpZ2h0K2MuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAsdGhpcy5sZWZ0LT10aGlzLmNwV2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMi10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToidG9wLXJpZ2h0Ij09PWR8fCJyaWdodC10b3AiPT09ZD8odGhpcy50b3AtPWwtYy5oZWlnaHQrYy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQrPWMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMi10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToibGVmdCI9PT1kfHwiYm90dG9tLWxlZnQiPT09ZHx8ImxlZnQtYm90dG9tIj09PWQ/KHRoaXMudG9wKz1jLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQsdGhpcy5sZWZ0LT10aGlzLmNwV2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMik6KHRoaXMudG9wKz1jLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQsdGhpcy5sZWZ0Kz1jLndpZHRoK3RoaXMuZGlhbG9nQXJyb3dTaXplLTIpLHRoaXMuY3BVc2VQb3NpdGlvbj1kfX1pc0Rlc2NlbmRhbnQoZSxpKXtsZXQgcj1pLnBhcmVudE5vZGU7Zm9yKDtudWxsIT09cjspe2lmKHI9PT1lKXJldHVybiEwO3I9ci5wYXJlbnROb2RlfXJldHVybiExfWNyZWF0ZURpYWxvZ0JveChlLGkpe2xldHt0b3A6cixsZWZ0Om99PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDpyKyhpP3dpbmRvdy5wYWdlWU9mZnNldDowKSxsZWZ0Om8rKGk/d2luZG93LnBhZ2VYT2Zmc2V0OjApLHdpZHRoOmUub2Zmc2V0V2lkdGgsaGVpZ2h0OmUub2Zmc2V0SGVpZ2h0fX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhhdCksQyhNZSksQygkdCksQyhMdCksQyh2YyksQyhFVikpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImNvbG9yLXBpY2tlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihHZShoVmUsNyksR2UoZ1ZlLDcpLEdlKF9WZSw3KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5kaWFsb2dFbGVtZW50PXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLmh1ZVNsaWRlcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5hbHBoYVNsaWRlcj1yLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgia2V5dXAuZXNjIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVFc2Mobyl9LDAsaGMpKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlRW50ZXIobyl9LCExLGhjKX0sZGVjbHM6MzAsdmFyczo1MSxjb25zdHM6W1sxLCJjb2xvci1waWNrZXIiLDMsImNsaWNrIl0sWyJkaWFsb2dQb3B1cCIsIiJdLFszLCJjbGFzcyIsInRvcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwiYmFja2dyb3VuZC1jb2xvciIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCIsNCwibmdJZiJdLFsxLCJodWUtYWxwaGEiLCJib3giXSxbMSwibGVmdCJdLFsxLCJzZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5kIl0sWzEsInNlbGVjdGVkLWNvbG9yIiwzLCJjbGljayJdLFsiY2xhc3MiLCJleWVkcm9wcGVyLWljb24iLCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaGVpZ2h0IiwiMjRweCIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJmaWxsIiwiIzAwMDAwMCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMywiY2xhc3MiLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInJpZ2h0Il0sWyJzdHlsZSIsImhlaWdodDogMTZweDsiLDQsIm5nSWYiXSxbMSwiaHVlIiwzLCJzbGlkZXIiLCJyZ1giLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbImh1ZVNsaWRlciIsIiJdLFsxLCJjdXJzb3IiXSxbMSwidmFsdWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsidmFsdWVTbGlkZXIiLCIiXSxbMSwiYWxwaGEiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiYWxwaGFTbGlkZXIiLCIiXSxbImNsYXNzIiwiY215ay10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImhzbGEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJyZ2JhLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaGV4LXRleHQiLDMsImhleC1hbHBoYSIsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwidmFsdWUtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0eXBlLXBvbGljeSIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtYXJlYSIsNCwibmdJZiJdLFsiY2xhc3MiLCJidXR0b24tYXJlYSIsNCwibmdJZiJdLFsiY2xhc3MiLCJleHRyYS10ZW1wbGF0ZSIsNCwibmdJZiJdLFsxLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaGVpZ2h0IiwiMjRweCIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJmaWxsIiwiIzAwMDAwMCIsMSwiZXllZHJvcHBlci1pY29uIl0sWyJkIiwiTTAgMGgyNHYyNEgwVjB6IiwiZmlsbCIsIm5vbmUiXSxbImQiLCJNMTcuNjYgNS40MWwuOTIuOTItMi42OSAyLjY5LS45Mi0uOTIgMi42OS0yLjY5TTE3LjY3IDNjLS4yNiAwLS41MS4xLS43MS4yOWwtMy4xMiAzLjEyLTEuOTMtMS45MS0xLjQxIDEuNDEgMS40MiAxLjQyTDMgMTYuMjVWMjFoNC43NWw4LjkyLTguOTIgMS40MiAxLjQyIDEuNDEtMS40MS0xLjkyLTEuOTIgMy4xMi0zLjEyYy40LS40LjQtMS4wMy4wMS0xLjQybC0yLjM0LTIuMzRjLS4yLS4xOS0uNDUtLjI5LS43LS4yOXpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiXSxbInR5cGUiLCJidXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMiwiaGVpZ2h0IiwiMTZweCJdLFsxLCJjbXlrLXRleHQiXSxbMSwiYm94Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIxMDAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaHNsYS10ZXh0Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIzNjAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJyZ2JhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjI1NSIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsImhleC10ZXh0Il0sWzMsInRleHQiLCJ2YWx1ZSIsImJsdXIiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInZhbHVlLXRleHQiXSxbMSwidHlwZS1wb2xpY3kiXSxbMSwidHlwZS1wb2xpY3ktYXJyb3ciLDMsImNsaWNrIl0sWzEsInByZXNldC1hcmVhIl0sWzEsInByZXNldC1sYWJlbCJdLFszLCJjbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtY29sb3IiLDMsImJhY2tncm91bmRDb2xvciIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwicHJlc2V0LWNvbG9yIiwzLCJjbGljayJdLFszLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImJ1dHRvbi1hcmVhIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayJdLFsxLCJleHRyYS10ZW1wbGF0ZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDAsMSksSSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBvLnN0b3BQcm9wYWdhdGlvbigpfSksUygyLGJWZSwxLDUsImRpdiIsMiksUygzLHZWZSwyLDgsImRpdiIsMyksaCg0LCJkaXYiLDQpKDUsImRpdiIsNSksUCg2LCJkaXYiLDYpLGgoNywiZGl2Iiw3KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlciYmaS5vbkV5ZURyb3BwZXIoKX0pLFMoOCx5VmUsMywwLCJzdmciLDgpLGcoKSxTKDkseFZlLDIsNSwiYnV0dG9uIiw5KSxnKCksaCgxMCwiZGl2IiwxMCksUygxMSxDVmUsMSwwLCJkaXYiLDExKSxoKDEyLCJkaXYiLDEyLDEzKSxJKCJuZXdWYWx1ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IdWVDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJodWUiKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ0VuZCgiaHVlIil9KSxQKDE0LCJkaXYiLDE0KSxnKCksaCgxNSwiZGl2IiwxNSwxNiksSSgibmV3VmFsdWUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmFsdWVDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJ2YWx1ZSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJ2YWx1ZSIpfSksUCgxNywiZGl2IiwxNCksZygpLGgoMTgsImRpdiIsMTcsMTgpLEkoIm5ld1ZhbHVlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkFscGhhQ2hhbmdlKG8pfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkRyYWdTdGFydCgiYWxwaGEiKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ0VuZCgiYWxwaGEiKX0pLFAoMjAsImRpdiIsMTQpLGcoKSgpKCksUygyMSxTVmUsMTcsMTIsImRpdiIsMTkpLFMoMjIsRFZlLDE0LDEwLCJkaXYiLDIwKSxTKDIzLFJWZSwxNCwxMCwiZGl2IiwyMSksUygyNCxrVmUsOCw3LCJkaXYiLDIyKSxTKDI1LE5WZSw5LDMsImRpdiIsMjMpLFMoMjYsTFZlLDMsMCwiZGl2IiwyNCksUygyNyxVVmUsNiwzLCJkaXYiLDI1KSxTKDI4LFdWZSwzLDIsImRpdiIsMjYpLFMoMjksWVZlLDIsMSwiZGl2IiwyNyksZygpKSwyJmUmJihUdCgiZGlzcGxheSIsaS5zaG93PyJibG9jayI6Im5vbmUiKSgidmlzaWJpbGl0eSIsaS5oaWRkZW4/ImhpZGRlbiI6InZpc2libGUiKSgidG9wIixpLnRvcCwicHgiKSgibGVmdCIsaS5sZWZ0LCJweCIpKCJwb3NpdGlvbiIsaS5wb3NpdGlvbikoImhlaWdodCIsaS5jcEhlaWdodCwicHgiKSgid2lkdGgiLGkuY3BXaWR0aCwicHgiKSxudCgib3BlbiIsaS5zaG93KSx2KDIpLF8oIm5nSWYiLCJwb3B1cCI9PT1pLmNwRGlhbG9nRGlzcGxheSksdigxKSxfKCJuZ0lmIiwxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx2KDQpLFR0KCJiYWNrZ3JvdW5kLWNvbG9yIixpLnNlbGVjdGVkQ29sb3IpKCJjdXJzb3IiLGkuZXllRHJvcHBlclN1cHBvcnRlZCYmaS5jcEV5ZURyb3BwZXI/InBvaW50ZXIiOm51bGwpLHYoMSksXygibmdJZiIsaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlciksdigxKSxfKCJuZ0lmIixpLmNwQWRkQ29sb3JCdXR0b24pLHYoMiksXygibmdJZiIsImRpc2FibGVkIj09PWkuY3BBbHBoYUNoYW5uZWwpLHYoMSksVHQoImRpc3BsYXkiLDE9PT0oaS5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLF8oInJnWCIsMSksdigyKSxUdCgibGVmdCIsbnVsbD09aS5zbGlkZXI/bnVsbDppLnNsaWRlci5oLCJweCIpLHYoMSksVHQoImRpc3BsYXkiLDI9PT0oaS5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLF8oInJnWCIsMSksdigyKSxUdCgicmlnaHQiLG51bGw9PWkuc2xpZGVyP251bGw6aS5zbGlkZXIudiwicHgiKSx2KDEpLFR0KCJkaXNwbGF5IiwiZGlzYWJsZWQiPT09aS5jcEFscGhhQ2hhbm5lbD8ibm9uZSI6ImJsb2NrIikoImJhY2tncm91bmQtY29sb3IiLGkuYWxwaGFTbGlkZXJDb2xvciksXygicmdYIiwxKSx2KDIpLFR0KCJsZWZ0IixudWxsPT1pLnNsaWRlcj9udWxsOmkuc2xpZGVyLmEsInB4IiksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMj09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwobnVsbD09aS5jcFByZXNldENvbG9ycz9udWxsOmkuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKXx8aS5jcEFkZENvbG9yQnV0dG9uKSx2KDEpLF8oIm5nSWYiLGkuY3BPS0J1dHRvbnx8aS5jcENhbmNlbEJ1dHRvbiksdigxKSxfKCJuZ0lmIixpLmNwRXh0cmFUZW1wbGF0ZSkpfSxkZXBlbmRlbmNpZXM6W25uLEZlLExyLFpWZSxLVmVdLHN0eWxlczpbJy5jb2xvci1waWNrZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3dpZHRoOjIzMHB4O2hlaWdodDphdXRvO2JvcmRlcjojNzc3IHNvbGlkIDFweDtjdXJzb3I6ZGVmYXVsdDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmNvbG9yLXBpY2tlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtmb250LXNpemU6MTFweH0uY29sb3ItcGlja2VyIGlucHV0e3dpZHRoOjA7aGVpZ2h0OjI2cHg7bWluLXdpZHRoOjA7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzAwMH0uY29sb3ItcGlja2VyIGlucHV0OmludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXVpLWludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXN1Ym1pdC1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0uY29sb3ItcGlja2VyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmNvbG9yLXBpY2tlciAuYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OTk5OTk7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItc3R5bGU6c29saWR9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctdG9we2xlZnQ6OHB4O2JvcmRlci13aWR0aDoxMHB4IDVweDtib3JkZXItY29sb3I6Izc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b217dG9wOi0yMHB4O2xlZnQ6OHB4O2JvcmRlci13aWR0aDoxMHB4IDVweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApICM3NzcgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LXRvcHtyaWdodDotMjFweDtib3R0b206OHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3N30uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtcmlnaHQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctcmlnaHQtdG9we2JvdHRvbTo4cHg7bGVmdDotMjBweDtib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCl9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LWJvdHRvbSwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tbGVmdHt0b3A6OHB4O3JpZ2h0Oi0yMXB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3N30uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC1ib3R0b20sLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctYm90dG9tLXJpZ2h0e3RvcDo4cHg7bGVmdDotMjBweDtib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCl9LmNvbG9yLXBpY2tlciAuY3Vyc29ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Ym9yZGVyOiMyMjIgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpkZWZhdWx0fS5jb2xvci1waWNrZXIgLmJveHtkaXNwbGF5OmZsZXg7cGFkZGluZzo0cHggOHB4fS5jb2xvci1waWNrZXIgLmxlZnR7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoxNnB4IDhweH0uY29sb3ItcGlja2VyIC5yaWdodHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MTJweCA4cHh9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWF7cGFkZGluZzowIDE2cHggMTZweDt0ZXh0LWFsaWduOnJpZ2h0fS5jb2xvci1waWNrZXIgLmJ1dHRvbi1hcmVhIGJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWF7cGFkZGluZzo0cHggMTVweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYSAucHJlc2V0LWxhYmVse292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlO3BhZGRpbmc6NHB4O2ZvbnQtc2l6ZToxMXB4O3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjojNTU1fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtY29sb3J7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MThweDtoZWlnaHQ6MThweDttYXJnaW46NHB4IDZweCA4cHg7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4O2JvcmRlci1yYWRpdXM6MjUlO2N1cnNvcjpwb2ludGVyfS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtZW1wdHktbWVzc2FnZXttaW4taGVpZ2h0OjE4cHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo4cHg7Zm9udC1zdHlsZTppdGFsaWM7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuaGV4LXRleHR7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCA4cHg7Zm9udC1zaXplOjExcHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveHtwYWRkaW5nOjAgMjRweCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmhleC10ZXh0IC5ib3ggZGl2e2Zsb2F0OmxlZnQ7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNTU1O2NsZWFyOmxlZnR9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBpbnB1dHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MXB4O2JvcmRlcjojYTlhOWE5IHNvbGlkIDFweH0uY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBkaXY6Zmlyc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaGV4LWFscGhhIC5ib3ggaW5wdXQ6Zmlyc3QtY2hpbGR7ZmxleC1ncm93OjM7bWFyZ2luLXJpZ2h0OjhweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0e3dpZHRoOjEwMCU7cGFkZGluZzo0cHggOHB4O2ZvbnQtc2l6ZToxMXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94e3BhZGRpbmc6MCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBkaXZ7ZmxleDoxIDEgYXV0bzttYXJnaW4tcmlnaHQ6OHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTV9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dHtmbG9hdDpsZWZ0O2ZsZXg6MTtwYWRkaW5nOjFweDttYXJnaW46MCA4cHggMCAwO2JvcmRlcjojYTlhOWE5IHNvbGlkIDFweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uY29sb3ItcGlja2VyIC5odWUtYWxwaGF7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206M3B4fS5jb2xvci1waWNrZXIgLmh1ZXtkaXJlY3Rpb246bHRyO3dpZHRoOjEwMCU7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tVRldiQ0NBQUFBRnhKUkVGVWFON3Qwa0VLZzBBUUFNRTJ4ODMvbjJxdTVxQ2dEMWlEaENvWWRwbmJRQzliYlkxcVZPL2p2YzZrM2FkOTFzNy83RjEvY3NnUHJ1anVRMTdCRFlTRnNCQVd3Z0poSVN5RUJjSkNXQWdMaElXd0VCWUlpMmY3QXIvMVRDZ0ZIMlg5QUFBQUFFbEZUa1N1UW1DQyl9LmNvbG9yLXBpY2tlciAudmFsdWV7ZGlyZWN0aW9uOnJ0bDt3aWR0aDoxMDAlO2hlaWdodDoxNnB4O21hcmdpbi1ib3R0b206MTZweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUNUa2xFUVZSNDJ1M1NZVWNyQUJoQTRVMlNrbVJKTW1XU0prbEtKaVdaWnBLVUpKc2tLVW1hVEZJbUtaT1V6TXlTcEdSbWxpUk5KaWxKU3BLU0pFdG1TcElwbVdtU2RPNzM2LzZEK3g3T1AzZ1VDb1dDdjFjcWxTUWxKWkdjbkV4S1NncXBxYW1rcGFXUm5wNU9Sa1lHbVptWnFGUXFzckt5eU03T0ppY25oOXpjWE5ScU5YbDVlZVRuNTZQUmFDZ29LS0N3c0pDaW9pSzBXaTNGeGNXVWxKUlFXbHBLV1ZrWjVlWGxWRlJVVUZsWmlVNm5vNnFxaXVycWFtcHFhcWl0cmFXdXJnNjlYazk5ZlQwR2d3R2owVWhEUXdPTmpZMDBOVFhSM054TVMwc0xyYTJ0dExXMTBkN2Vqc2xrd213MjA5SFJRV2RuSjExZFhYUjNkOVBUMDBOdmJ5OTlmWDMwOS9jek1EREE0T0FnRm91Rm9hRWhyRllydzhQRGpJeU1NRG82eXRqWUdEYWJqZkh4Y1NZbUpwaWNuR1JxYWdxNzNjNzA5RFF6TXpQTXpzNHlOemZIL1B3OERvY0RwOU9KeStYQzdYYXpzTERBNHVJaVMwdExMQzh2czdLeXd1cnFLbXRyYTNnOEhyeGVMejZmRDcvZnovcjZPaHNiRzJ4dWJySzF0Y1gyOWphQlFJQ2RuUjJDd1NDN3U3dnM3ZTJ4djcvUHdjRUJoNGVISEIwZGNYeDh6TW5KQ2FlbnA1eWRuWEYrZnM3RnhRV1hsNWRjWFYxeGZYM056YzBOdDdlMzNOM2RFUXFGdUwrLzUrSGhnWEE0VENRUzRmSHhrYWVuSjU2Zm4zbDVlZUgxOVpWb05NcmIyeHZ2Nys5OGZId1FpOFdJeCtOOGZuNlNTQ1Q0K3ZyaSsvdWJuNThmZm45LytWY0tnU1d3QkpiQUVsZ0NTMkFKTElFbHNBU1d3QkpZQWt0Z0NTeUJKYkFFbHNBU1dBSkxZQWtzZ1NXd0JKYkFFbGdDUzJBSkxJRWxzUDQvV0g4QW1KNVo2akhTNGg4QUFBQUFTVVZPUks1Q1lJST0pfS5jb2xvci1waWNrZXIgLmFscGhhe2RpcmVjdGlvbjpsdHI7d2lkdGg6MTAwJTtoZWlnaHQ6MTZweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0QUlXRHdZUWxaTWEzZ0FBQVdWSlJFRlVhTjd0bUVHTzZqQVFSQ3NPQXJIZ0JweUFKWUdqY0dvY3hBbTRBMklIcG1vV0UwZUJIK2V6bUZsTnZVMDZzaEozVzZWRWVsV01VUUFJSUY5ZjZxWnBpbXNBMUxZdFMydUY1MS91MjdZVkFGWlZSVWtFb0dIZFBWL3NJY2JJRUlJa1VkSS85WGE3bmV5djYxK1NXRlVWQVZDU2N0MDBUV24yZnY2dTMrRWNmZDN0WHp5LzArbkVVdStTUGpvL2txenJtaVFwU2NONnY5OFhld2ZBOC9sTWtpTEoyV3hHU1VvcGNUNmZNNlUwTlg5L2ZyZmJqZXYxV3RmcmxaZkxoWWZEUVFIRy9BSU9sbkd3aklObEhDeGpIQ3pqWUptL1RKV2RDd3F1SlhzZUZGekd3RE5OZWlLTU9KVE84eFFkRFFhZUIyOStLOWVmZUxhQm85Sjd2ZHZ0SmoxUmpGRmpmaXY3cXY5NXRqeC83bGVTUWdoOTNlMWZmTWVJcDZPK1lRamhvL043OTF0MVhWT1NTSTdOLy9LKzQvR294V0xCeCtQQjUvT3A1WExKKy8zT2xKSldxeFUzbTgzb3Z2NWlHZjhLallObEhDeGpIQ3pqWUJrSHk1Z2Y1Z3VzdlFVN1UzN2pUQUFBQUFCSlJVNUVya0pnZ2c9PSl9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3l7cG9zaXRpb246YWJzb2x1dGU7dG9wOjIxOHB4O3JpZ2h0OjEycHg7d2lkdGg6MTZweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kLXNpemU6OHB4IDE2cHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCSUFBQUFnQ0FZQUFBQWZmQ2p4QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFDZXdBQUFuc0IwMUNPM0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSUFTVVJCVkVpSjdaWTlheFJSRklhZnN4TVN0ckxRSnBBZ3BCRmhpK0M5dzFZU28wMEk2UlovZzl2WnBCZi9RT3I0R3lSZ2tTS05TckFhZHNacVFHd0NrdUFXeVJaSnN5U3d2aFo3Ti92aHpyZ2JMSDNMZDg1OTdqbHp6NTB6Sm9reXhYSDhEcURWYXIwcWk2djhCYkl0cVNHcEVjZnhkbG1zRldYa3ZYOEFmQVZXZzNVS1BFblQ5R0t1ak16c0FGZ1pzVmFDTjFWVFFkNzdYVW5yZ0Uxa3YrNjkzNTI2OFdScHpybkhadllSV0M3WXZDM3BSWlpsM3dvenF0VnFpeUg5SWdqQXNwa2QxR3ExeFVKUXRWcmRCOVpLSUFPdGhkZy9RYzY1TFVrN3dOSU1vQ1ZKTzg2NXJZRmhrcWpYNi9kN3ZWNEdQSndCTXFvZlVSUzVKRWs2RllCZXIvZWVZYi9NbzlXd0ZuUE92UWJlQXZmdUFBSzRCTjRzQUp0QUcvZ0pJRWxtTnVpSnliYTNFR05tWmlQZVp1RVZtVmVsbC9ZLzZOK0N6RG4zQVhoRU9PbzdIdi8zQmVBejhJelFrTVBuSmJ1UHgxd0MreVlKNy8wbllJUDVTLzBGSEtkcCtyd0NFRVhSUy9yZjVIbDFHdGIyTTBpU3BDT3BDWnpQQVRtWDFFeVNwSE1MQXNpeTdNak1Eb0hyR1NEWFpuYVlaZG5Sd0JoN0o5MXV0d21jekFBNkNiRzNHZ1BsZVg0anFVSC9hMUNrdHFSR251YzNoU0NBTUIzMmdLc3BrQ3RnYjNLQ1FNbWtqZVA0V05KVGhyTk5admFsMVdwdFRJc3Y3SnRRNHRtSWRSYThxU29FcFdsNllXWk5vQU4wekt4Wk5QZWhwTFNCWnYydCtRMENKOWxMbkFSUUxBQUFBQUJKUlU1RXJrSmdnZz09KTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3kgLnR5cGUtcG9saWN5LWFycm93e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6NTAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9ye3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNnB4O2xlZnQ6OHB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyOjFweCBzb2xpZCAjYTlhOWE5O2JvcmRlci1yYWRpdXM6NTAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmR7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNnQUFBQW9DQVlBQUFDTS9yaHRBQUFBaDBsRVFWUllSKzJXMFFsQU1RZ0Q2MHpkZndPZHFhOFRtSS93UU1yNUswSTViWkxJekxPYTJudDM3VlZWYmQrZER4NW9iZ0NDM0tCTHdKMmZmNFBuVmlka2YrdWNJaHc4MEhRYUNMbzNETUgzQ1JLM2lGc21BV1ZsNmhQTkR3dDhFdk5FNXErWXVFWGNNZ2tvblZNNlNkeUNvRXZBblo4djFIang4MTdNaWxteFNVQjVyZExKRHljWmdVQVpVY2gvQUFBQUFFbEZUa1N1UW1DQyl9LmNvbG9yLXBpY2tlciAuc2F0dXJhdGlvbi1saWdodG5lc3N7ZGlyZWN0aW9uOmx0cjt3aWR0aDoxMDAlO2hlaWdodDoxMzBweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9uO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFPWUFBQUNDQ0FZQUFBQlNEN1QzQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tzUFdSNmxnQUFJQUJKUkVGVWVOcnRuVnVUNDdnUnJBSE4rUC8vT3IvNjFZNXdPTlo3bVoxdTNYQWVMTWpKWkdaVmdkS3NmYzV4UjNTMFJJSVVXK0NIekNwYzJNY1lvN1hHdjNleDdVaVpkNTdyanl6enYrdiszM1gvUi8rM3IvZjd2UjM4NlkrVHZLTmNmL3dkaFRMUGN2OXFVMndaZDc0dXRoMHQxODIxamtJWkxQY3NJLzZuV2E0WHZ1dHF1VTBaODVtbng4MFMvWnpncG5Mbk90SE50Ny9vZngxVEtYY1NOek4vN3FiTVEzanU3ck5RbU1ZWWQvNHMyajlhYStQK2dHYU1jWnJiMU0vdGRydmY3L2Qydjk5UDkvdDkzTy8zY2J2ZHh1MTJHOWZyZFZ3dWwzRStuOGMvLy9uUCsyKy8vWGI2NmFlZnhsLy8rdGZ4NXovLzJZSzVBbDJyZ3ZmNFVzYnBkR3JCNTJiQXZBclhwdXpqbWlxQVZTR3o1ZURtR1lYemhiQVptQ3JubXpkZHBVVSs4WTFkQU9ZZVhDdERVd1Z3VjdZQ0dINnVBbXlNY1o5bDV2a1VhQlBHTVVaNy9KNXcvNzkyL2Z2djlYcTkzMjYzZHIvZlR4UEVDZU1FOG5LNWpNL1B6L0hUVHovZHYzMzdkdnJsbDEvR1AvN3hqL0czdi8xdC9PVXZmd2tWc3dvbmdqZE9wOVB6SDNVM0Qzem1XR25aVlhuNGpDcXM3d0MyQktQNC84dEF6a1pzb1d4NlhycWVIWnltdnA0QUJDQkpoVFF3S2ZEVDhnenJaQ0lxaTVBaGlBQ2pCZkVCMnJQOC9YNjNNTTdmNi9WNnY5L3Y3WGE3YllDODNXN2pjcmxzVkhJcTVmZnYzMCsvL2ZiYitPV1hYOFpQUC8wMC92NzN2NCtmZi83NUpTdmJldStiTDJXTU1hRmJBbHBCTk04NVFYK2N0NnFvU3FrUEF3dVFsQlZLcUdORlNVT0FBM0JtdTdnQzVoTk9kMTVuU3d2QU9VVzdDNGdpVUNWOFNnbjVMOWhORklxVHNwMEd4STB5c2lveWpBamtZL3RHSlZFcHorZnorT1dYWCs3ZnYzOC8vZjc3NytQYnQyL2oxMTkvSFQvLy9QUDQ5ZGRmeDhmSFJ3cm1UalY3NzlFWHUycHgyeGhqd3RkSlpRY0FXUUlQTFBJU3NNSmFTd2lEOGd6SUtyd1N5QVRFNWo1bkFiUjVjMWRCVXdCbHNFV1cwaDZMcWlZc3FGUEFReEN5Ulozd09TQVJ4bWxYTVg1azY0cFFmdnYyN2Y3NStkaytQajVPSHg4ZjQvdjM3K1BidDIvanQ5OStHOSsrZlJzZkh4L2pjcm1VRkxPMzFnWURXYmx4UklzL1RxZlQ3b3VzeEpzQXhYQTJHYzdUQTlYZGdmZG9IYkZzajc2WDIrMVdBcmdJMWFnZUd3QTNxdXBxb0hzbWNiSTZGdTkzcXVnZ0ZhOWQ3TGVEdGdLZkFGSEJKK05FQnlJa2NKNUtlcnZkVG1oaEdjZ0pKU1o1dm4vL2ZqK2Z6KzE4UHA4K1B6L0g1K2ZubUdEKy92dnY0L3YzNytQajQyTjhmbjZPMisxV3M3SmpqUDZ3cmFNSTVFNFJaOHgydlY1VFN3a3F1b3RWNy9kN1R6NkhGV3NEL3FOY2R3MENRM3EvMzIxYzY4NlR3RFZJZGJ1eTczek5sZGhTSGI4STJrbFp6bm0rSW5CUzRVNm4wMzAyYUJGc0xoSERBS0pWSlZnbGZJOWpodnU1M1c1M3NMQU5ZTnhBaURBNk1DZVVIeDhmOSt2MTJpNlhTN3RjTHFjWlc1N1A1eWVZOC9mejgzT2N6K2Zuc1NtWVV5a25XRUc4NVdCc3Q5c3R6U0x5TWRmcjlRaTA4aVkxNVVaMExsREdMaFIzbzV6SzJqN09QVVREMEUrblUzdGs3WGIvMTZORmJobG9BTXVZMXpqTFVPTzNCS2VJRGUrWjhzMy9KNGdGbzRUTTVqUG11UmcyOGZvVUtLVlN3bzE2VGdBNW5weXdjV0xIZ1lsL1B6OC83My82MDUvYWI3LzkxbTYzVzd0Y0xpZTBzWmo0bWFvNWdUeWZ6ODhFMGYxK2o4RWNZendUUEVHMmNxanlmSE5GME04ZnVxRWlhT1ZuUnpaWlFOaDVmd1F5SGcvSERHZkpvODlRMXpiL3F1dTVYQzY3NzNJMlhLZlRxZC92OStkM3d1cVd2YS9ZVGRVZEVWM2ZoSXYvVml5cHM2WUUzeDNyNDNLNWJKUVM2NnpheFZHRnN2ZCsvL2o0YUYrL2ZtM2Z2Mzl2dDl1dGZmMzZ0ZjMrKysvdGRydWR2bjM3WnVOTEJhYUNNZ1V6QytyWlJpRm93eFV1Skk4WU1xY0NwOU9wcTV2YWdhWVU2bEdKQTFYUXFlamNodzZDajBHdzVuWUJyR3cwMUEyTzIwNm4wNEJHb3VOTnlUZnAvRndFbGhVZXk2blhySUt3N1FRV2RkeHVOMmxkTDVmTDgzOWdTUEY4YWh1L0p2Qk80OENQU3VxTWY4VnA5L1A1M0w1OCtkTHU5M3M3bjgvdGZyOC8zOS92OS9iNStUa2hQSjNQNTZtUTQzNi9qKy9mdisvaVNnYnplcjArQVp4LzUrODhidjZPTWRhNlM1ejZrZDIxZllDOWR4djdjSUpKMmQ5QU9TMzBmUE16eUhpVE04QjRERjZYVWxZSHA0S1FXM1crMXQ3N01OQjF2R0h4V3E3WGE3dmY3OCt5NS9ONUErSDFldDI5eHVQNWRiWXR5YVJ1NEFrc2JQcTY5MzZmalJ6WFJ4QmJQci9iK2IxOCtmS2xqVEhhQkJCZm44L24wLzErSDErK2ZCbm44em0wc0I4Zkg1dTRjcjVHdUJoTVZrMEVFbjlSc2N0Z1ZoTStpeGxKdE1BMjNSOEI2eXlzQXN0Qk9nRlhJS0tDTUlnVG9NcU5FdTJmWU1IN3p0YzczMmRRS2tDajF5dEFadFkwS3g4cElyOEdHSitBVDNWKzJIaXJobCsrZkJtWHkyV3o3M3crYjE3UDhwK2ZuOC90VXdHVmxlVmtUeVViNjhEa2ZheVdZNHp4TlJpaFU0RXBMSlBaVnJLK3U3SjQvbWdmS3FlTFc5WDJSRVdsSXRMMWRpeW5iRERiMytqWGdZalFxbjBycnhXYytOa0lMUDdGN3hJYk12eDd2VjUzeDQweG5sYldKRjEyWlNhZy9OMHBXNnQrWnptT016SGphakt3RGZvbmQ3OHpZVGRmcTE4dXA5N3pyMnE4djNJaW9CcHJSdEJsMEVaOW9nNVdCUkdPZE9IaklqWEY3VW90RmJnT1duWHpJSnl6WXZqRzVJWWdzbU1PeEhrejhPc01TclZOV2VxNVQ4RGFPY2JFdjFPZDVyYnM5YU83WXZNZXQ2M0VrRisrZk1FeHErTVJsNC9MNWJMWk4vK2V6K2ZuWjZLYXp1TXFYU1FWTzVzcEpYZmxIQUl6ZXMveEpzZWNrUkppRE1vZzlkNlZmUnJxWE1yNktwVlYyN2pSd0phY0dvdk9BTTF6TWRRTW53SzFBdWJLNjNrZENDaHZJMUM3ZzB6OW5mL0QrWHplMlZqOEg3R3g0UDlkdVFsc1lDcnF5TjhYcUczSG0vMTBPajNqdy9uK2NybHN0dU0ralBtbXhUMmRUdVB6ODNQenQycG4xWHNFSFgvYm5QYVZxVm1oMHh3T3QwbzZYTExBSGVQVVUyMDN3SGZjcnNwQ3dtVjNUcnlCNXMwTXNlZWc5N3gvQnd6Q2pCbGJCK3BSQVBsYTBCVlF1VDZWNlFIZEJsajNkMEtHMTQ3YitEcXhRZVV5bURPNDNXNGRRYXIrVElqd21BZDB6OC9oNjV2ZjAveUx2M1BiNVhMcHJ1L3lkRG85czdFVDBJK1BqNmRLSzlWVUVJZUtXUVdQQU9ySjhMS2Q0dkUrdDkxWTNlN1VGbFdhdGcyVndKbmIrSFBtdHZtL3NmSzU5L09hV0YzeC9lUDFVUEh2QTVERFlEcFlYZmIwZHJ2MVYyRGtCa3h0dy90RVdWVmxYV2RDOXBGWXM1L2pmaDlkUy8xNnZXN3M2bFRHK1RmcXN4U0pIeGtYWHEvWGRyMWV1NExzZkQ2UDN2c1QzTjc3RGtMK3pQbTVqU2RLTDR6UjNBeFFkNnJIa0xrWWxTb3dzcnE3em56dTZ3U3dkc01KT1htQTVmQmNqeHRnTUdCWUhscjV6b2todHNNQ1RnWExRT1c0WEM2ZEV5RU1wckw4bUFRelhSZ2R1aXgyeVp6b3J4a1lzRG4zaEIxVmVNTEdzWHNWdGdsMnBXOFMzc3ZrMHZ3N1I0aE5hSHZ2NGNBQ2w1SEZ6d0lIMEtjNnp1NFhqRFBSL2pwQVZ4V3pPMVhrMkREYjN2VGN4ZUdVMWlXWkhrbUlEV3ppV0t2aXJDSjREcmF2czZJSi9HRzZjVHFXZFhEeStmQXJRRFZWa0xxa1ZqQW9aSUlUZG1tSXFYd3FhOTVOMytNR1lvWlFkUlZOTzUzWTF4UmtoTzE2dlk3ZXU1MDdDYTlsSm5iR3B4T2VtUWhTdy9BUXNtbXA1elU5QmlVOEc2d3ZYNzZNNi9VNlBqNCtkbzBCejRDcGdpa25UVWVEcXdsS0JtZzN1NE9WanJaMUErckFjZ2FlaldxNmVKQ3ZDWUZET05Td09nSFg0RVFSdzhseGJ6RE9kRUs2Z1ozSGsxYis4ZzJvMUpGdEtYeXYvZkVkVFh1V2pXWGRBWmlCcDZBRGVEckNGaWltN0I2WkZuZWVJN0d2bS9QTWtVRFg2N1c3eEk4YjBENy92OGRBOXFmTjVvYUNmNzRXWmpIMG1mMWNtZlkxWTBKVUZtVnJUV3U4dXprTmNMdEVqN3U1RlhCVGtmQzZHT0E1cThZTXhPOEtWdkY2c0FWR2RjclVic0tPRGNRS2tMTU9NZG1seHVtNjQyWXJQbTI2QWxoWlcxWUIxUityckdzd0U4VGFZQVdlVU14ZGYrV2p3U3ZaMkVmM3l0T3lmbjUrUHBWUEFhcU9uNDNNdE5CcXZtamp4YmpNNGxaalpZNGdxTk1JNWt0YVcvc1lLTndTKzlsRlF6R2lobU1DS1BhNytaMFY2RWIwR1Jtb2J0cFg4SmxqV3U1Rk1MTjVqYTZoRzlrd1FnWnFmNSsxTkg1VXh6a0ZSZUNkV2hKOFhkbEdVa3hPN0hSbFlSbTRtVk80M1c3dGVyMTJUUEpFdy9ybUVOM0w1U0tISVdaZzlteitwVW9LT1lxNWJKVEpkWDJnbWUxVWN4TVpRRmFFUUlsSGN0MzJNK1kxQnpHa0d1emZpeUFOOXordWdwbFoxc3ltQ3JEQ1lZa0d4RFRwSTlSekJ5MHJIeWVEVUMxbldhZVVhRDluNHhrTnlZTUJEWnR6WjNCKytmSmxZMjFYRkRPY0FSSmxhYk95aVMzdUNwTEk5anJaakNEa2FWdmNDQ2p3b2duS1NoV2R6WFpXbFpNdlZUZ0Q4THBxbENMcnFnYmNCK3FZd3JnS1lwVDBjY0NxYkt5Q1ZhbGtFYWJuL0Z5bm9nQ3JQS2ZxZjUxeEo3c0dCMlpYY1pteG9TT3p0angzMDBEWmk3YTAvMkFJUjBVbEJhZzlTdUR3NktjQXpsYUI3dkhadldwaks5MGR5cnE2Ykt5RFVaUWJSMEIwNWJpTFFrSEljU1VtZ0lLK1N3dXFnSENub2lvMlJRVTF5aitCbkJ5OXBwaFZLTEd5QzdaekZLMXB4V0srRThJaFZDV0xOL3VMdG5VVTRheW9ZTG9hQU56OEZkdGFTdlk0cFYwQkVXMmxzNjFjenFsbEJLcFR5S2dNQWhyWjFjZGMxUlJPdFBtdldOa2RjS1o3Wkt4YVdqaVBMSk1wcDdPWkt4QStycUcvb0pManhmMHBuSmxxTG9EWm8zZ3lVMG1LR3lzMnRhS2Vjai9kMUMrckpTcGxCcWxUeUFxZ1IrRDhLaktsbVJMMmd0VWNBZEN0c0wraWpDTlQxb3FxcWtIMk9IRWJHNXNERm5VZzVBYSt5TG91MlZVMXB0ajFTMlpRcXYxT1JaTjlJV3pSZmdhUkJ4S29CRThVV3lxbEpGdHJJYzBBeE5qU2plZDk5Q1RZL1hEZlN6Q3o1TTBJWm9WRXNXblBGTlRzbDhvb1ZDMVR6YkdncUZaTkRTZ1Z3S0srMXNHRE1LcXhaQ1dHVk1EeXNpRXIxalZTUUpVWXdqNWlIT2xUaGRIdDQ0U1FnOUNOK25sOEQ5ME5NSWdBZGdyNDZKcVJpUjlJOHZSZEZ2YnIxN20veXhVTUtqTkxNaVZVQUR3dTJDV0doaGkrRjU1VFdNOU05Y29nem1zMWRuTTR1T0YvTEFFWVdkY3FuTTd5Rm15cTNJZndtT1JPZDdZMWlGV3RPam9ZOFRvNDFtVFY1SXlzZ0ZGdVJ6c2JXRkdiTklJSkNEdjFkT280bFpHN2pXQndSRnRWVEt1V3llQ0J5SktPYW44b1ozZXA5WGRkTmwwdER1YXl3THo5Y1hQWWVEQUEwU3BrQk85c2JWY1RPVldsZFB2NHV5ekVrenhIdGp2b25Ib1NrRkVXTm9vMWQ4RGhjUXB1dGQycHBOb240QnpvQWlKMWhCRlFnMGRWdGRiR0hIRFFXdXNobU5FUXVrTE0yUU8xRzJZOGJnVFhxRmhjQkpqN0VqUGdjUHRzOFVTOHFQcFBCL2RYem5PaDVaNDM4dHpINWVjNlFnck9LclJSZktteXNCbVVEQitQaFlhYk1sVlBFUitHQ1NJVFR6cjdhbTJ0QXJIM2JnY0V6UEptK2NyNWpKNE5uSE5GRFZyRlhjSTVMZTlrNUpudytiZWRiVitGZlJ6WklIYU9PYU9zTFkwLzdVR3M1OERqckd3S01JTUZJR3pPRVcxL2pHc2RBdENONmhFQUk0aEJlOVlYZVJST0JTVlBBVlBBcXZJTTVieDVoVktXQU1QNnpCUnkzaWVzY3JpZFZkRkJpbkJ4WERuRzJHUlkyWGJDdnAxbGh2R3RPOUJ4dTVoOTA4WFF1NDJsblNBck1GZGl6TWltOHV3UkN4UEdubk9TOGx3cG5iT2lEcVRBanNyUk4vUGNvQVNjQ2JhQUNxVk00MHlsbmpqVEJzK2J3V2xBRzIzL1VLYmRraXdLV0lRUEd6V2FjenBvU2x4UEVqODIyY05Xa3BTN0Z5enNEcnFwZmdwRzNqYWh3MnZnYmFTUUF4dUxXWll0N0p6eU5lOEpvWnBOQWN2REZPZHcwd3FZVDlBSzFyWnovRGRiU2xMUHAwcnlJeGdRSmxLOUFabEVxN0lPWHBvaGc5UElockNuZzg4SnNPeGlWNFpXQVlmZzRzaWt4LzhreTJaOWw4NjJ1cXdyZnNjSUg4K3VnVG1WR3lpZGRlVllVZ0VNbjRHWnpnMTRFd0lzaDlzeDJjS0tpV1hSZXVPRTVnekdPUWdkbFJLVlZkbGV2cWIyNzlYcTBRbnN0czJWRGFCTzBjb2V6c3J1V3RIQXB1NnNLRzRJQmhOMGFHVTJrTHJNS0dSVE4zSG1iQ0R3S1YxNHp2a01FREc0UWZaVnNwVmxhTlUybWhjNVRFWjNOMWgvenFUaGV1THBXMDVaV1RHVmpiM2Ribk5teEtaQm5OOEpxaWRhVkxLQU95QVJOTFMrTUI1NFoyK1ZhcW9NTEtyb1ZCbG5nZWZuVFBBY29ITldDU3ZsZkE4Q0kwSEVtQk5CbkJsWHlNcnpVN0E3V1ZtOTRQUHFRMmdtcUt4K1dER3NudmlsbWNTT0JKcU9LMW5ZeUFJenVBeWVzcTNVZFNLM0tmV2NZS0Q5NUhtZllPVTNxc2VyMkN0WUVVQStGcGZxZE52Z1BCWlVCaERyR09OUlZsUXNoOHJMY2FVQ3lrSEcwT09Vd1RsTEJyc2g1c29FTUdlemkxRTRIUlZ0MWljcDV3WkVGWGRpYkNrRzhZOHZYNzVzYk80RTBpb205eitoalNpT2Z5M0RocFhJdHBWaEUrVUdRZHZvV2p0Q2htckdIZjRZQXpLZ0JObkd0dUp4RkNlR2RoVUFmUUxMSzhrQllBUDZndkZKWmFqTUczWGt5Y3k4S3VDMHE0RXl5bXd0d2R4ZHYyTTBtSUJ0SzBMS25mNjQwajAwQXVxNGdVa2RXR2xoczIycUpjNmRaQ3NMMTlveG5sVEpHNFNZVlJJR3BEOFRQRkJ1TTZPRWxiUzFwbGRpZDRtR0F5TjZaSXVwYkM1YlhKTjlmZHBiVGhTeExVYUk4SUcxWElZQnhXM1RqczZLUW9zS2N4ZnhjUW1kbndSR00xMEduRmNDeTJYWXVuTE15QWtkZ2s0bWVQaWN6c0x5Z3RoY0J1dDZnb09xUzdZVkZYQURMamFvc0I2czZvZmNaV0FaU0lSWXFTVWtpell3dHRZYWIzdlVPUTl3MkhSeElJZzhXd1JWZUU2OHhpNFV0TDN6UnBoeHBsend1WnJjcVlDcTFJM2pQSTVkbkpJeWdFb2hNYlBxVkpTenJ3enhCSlRzNXpOK1JlVVNneGlrUFFWRjNKVkJlTlF4YkhFTnJFTU52RWRGWlZWOWxIOStPUkdFc05aUXB5VE5jNEMzQUc3WEY0bmd6cStEck8yemJ1YWFPWGdkYUZjZGtFb3RvU0ZCVlgycUowQzhPV1plRzRLR2xwZ2hBMFhmVE9QQ3FWMnFxd1EyNlFXZkYyUE1MaEkydzFsVkFhMmFQc1lkMHphMjVNUVJ3Z2NaTjZ1UURDaStaeGlENFhFTTJrWnhPVDQxRm5abmFSbGNwWm91emxScXFkYlFWV29wUW9TQjU4UlY1MGxCTnJIaS9Bd1hTNUxyd0RWbHBZM0ZjM0J5aVlHYzUyVHJpc3Q2a09YZHdJbkFRdEpwcDVRY2h5YXF1WU9WN1N1K2Z4Vk1hVjNkYzBSRTJTNm1VWTBnTHQycE1jWXFyS0lROXcybDFncFFVTXRRWWNtbWJ0NURUTnhkaG5VQ2pRcXRiSzlTVVN6dnJDMG1taGhFMWUyRlMyK294eXB5L1pBU3V0a210angzdmNCQzI0UFg2NW5icWtCQ1JoZmpTOWtJWVBuZWU4Y01hZ1ZPaEkvM1QxZkFtZHRBV1pzQ3N3VEpDa1FWTmEwcVdLU0tQT3BIQVVoRDlEcmJWY3lvWWt3cWh2aDE3dllBYXlYTFF5S0dZZHhsVURGcDQ5NHJCWFJqWWdPMTdERFlldE5JVWovZXpwNlMwbG5scEV3c1dtSk1rT3dzS1hlWktFQWpJSG4wRVFKSVNhUkJjTzZVTUlOejdwL2JFampudzRmdCt4bUR2a3N4WDRHMnJJcmlzN3FhZUt3QUZNUDJPaTduNGNyaXVad3RwU1V3cGZMeFNuT1JTcklxdXNjNVpGYVh5c3FSV2ppWjJEeUFXRUlMMzV0VlNvUUVsRkFDak9lR0dTRTdBSEVRZ2RvL0xTdkNPZ0dCdmt4c21EYnZsUzNGcDV2aGFCMlRBR3FSS3JLS01yaExWcGFHekVWalowT1F4RGhhQ1RBK1F5UlIxZDE1YVF6ckpudEwzUmlic2lwakc2amxnTDR5cWJTMHNOWWcxZTg0dmhiQlZyRWxLNjRDVWNXWVhEZkt4aHBJdXhpVkpaVXhzYk15L3VSQktUTlJRNGtRM0xkUllMUzBySmpSUGxUUHFZNmdkSnNFRGMrYVFYQW4rSGdzTlVDYlJ1RjBPajB6d25BN2JXRGtiaE81RW5zMDBxZVFoUzFsYUJNbDVNL2NBYXhzTEY4ckt5cWwrVGY3RUxMRUd1L2l4aWltZEN2bzBUamZwakt3YWdnZW40ZWg1djdMb2tMS2JMdXl2SGhjWkc4ZGhHckVEeDdIZzkzWnBwSkY3cUJxTzNpVnZlWEVEUU5Jbnplb2U4WXE2ZVBhWkJaMkp2aU0zVzJVQUdvdGVrUkNBR3E0RWtGMVgzRE9uUjExeVJzQkwxdFJhMFBWY1ppTkZYWjJjMzRGc2t2b21JblFRNmx6cEpvWmJKeGs0M053S0pGQnF1SlNzckJ5SHlkeEtPblR4UUFTQm1TM2orSk1uc0hTbGEzRWM2SzlWV29KVm45emZqd09NN2hxWUFBcUpRd0UyYTNuQTQ4SjJRR2VnUmtwWk5pdlNZK3lzM0VrS2Q0b0pJd3N2SUhsM2NXZ0x0NWs0Tkg2T210TFdkcHVyT2t3RU11cFljN2VNdERSaE9jSTJ1aTVKaFZJelh6THl0by9HQVB1Wm95bzh3a29kdVZnSmdsQ3Q3T2hHYmdJRDRNcTRzaSs2M3pVUzFGdUZGWEZscXlhajJlbUhsTE1jQnFZdTBGTXVSMjhCYkI3bE94Uk1TaUNRWEZoQ0t1d2toWitwWURpR1NnYnNLS1Y4TWlTUnN1SFNJV005cmtsUmlJbFpadXFYanNRSzhvb1lKTWdxM0pLV1ZraEhiaHNWeEZVenRoT1dQa1lpamNieDU0SUtzU2RUK3VMcjNjckdLeW9ZZ0ZpR1I5aUJrNGtmbG9VWCtKSWxRUlFxYWJtcGduaHF0cFFwYjZSVlExV0g1RG5yUzRoRW9HWnFhZXJRMmRoRmJ6OFhlUHhTaG1EYm83MGVJU2pvb3JPMnZLOFNKWEk0U1VtRVU0eldLRHpVRHRXVFl3N3hYbGJTVEVqNEZSZzd6S25Lb0dSQUx2MEdzOVRnYzFCcEN5d0daUlFBdHFWejJ4ckJjQU16RXBmWndGU2EyRzVXMFFCRmpTTWFwV0FFRmEzSGNHTjdDeER6RUN5SWtKOTdxd3JxV05UV1ZvODc2UFBzalBrajJ3dmdyb001bExaS01FVEtWcWwvQ3ZuV1ZGaUZhL1N6SlVRd2tvWnNyNjdZNnZsU1JWMy8ydG1OVE9ZM3ZuYXhZd011b1BLcWR6UjF3N0lxSHltbFB4YUFUaGZVN0tvMlpYWWo0QVlKSEwra05kS3dSUVlFU1RSYTVmc1VaL3JWQzFUTVR5V1Z5WW9xTnR1emFIc015djJ0dm9hcnhkZnF3WWdVMWF4Rm8vY25xbDFGR3NxSyt1QVJPVjhCWDRHVThXY1pUQVRpMnE3UWN5aTBPMFYrR2hXQk1OUlVrbjhIMVNzV1ZFNUJ5M0dpMEVDcVVlSm9CZkF0RGE0YW1rZFhHMzdBR1A1R2dlYjg0cDdVYXpwb0tSemRGemVROEhrb0hHeHByS3kvSHBtNXQxMnA0N0o2eFRZREV6N3VJTkVYU3V4WVh2RnNrWUFjK3lTeEg5c2Y1ZnRLelU2SWJ3VkJjVUdnNWU1Rk1DRVhTRXJaUjB3R2F5VjE5d29NOWd1UGpUcUpkVlRxUjR1RTRuSm5MbGRXVmtFQ0NaTGQyVkxGK3h0YW1leDdJcGlyaVNEVXB2cnBuOWxyd0dNQ0h5cHBNSCtwczZMSUxzdUZHVWoxWEVPWGlxYnFTSFBVS25DbHBXVjY4a3F0VVJWTkRZNFROYW9jeWtvWWVUVTVuZ0dFUWEvUzFEbm5FNEFlWE1jS2pIUEFtRlZqQ0JFTmFleUxWTkhmcjNweDh4VXN0Sjk0aElwZkg0SEtFL2VEYUFySzZsU3lWVkZiZHQxZ3hUSVZrM3BwcFZsRlhpNHBFaFZCVE9icXVvaFU4NU1MWG4xaWFodlVrSEpqU0NNYzAxdExGdmVWVkJ4MERvZE02amZ0Q3U3RE90SXpZeHJjMHFwMUpHUDJheVlGejJHYjZIdk1yTzhjbkd0VjZHam0zdUltU2ZEMkdwV0s2dW93YlpHTXhGS1FDbzFwT010Y01YRnBSc3QraFhHb0FvbUYzc1NUQkdnVGdsYkJLV3dzUTN0WnFhWVNwMFoxQ2ltUkRXRmNDSlVQWUowMEJJNUZrS1lOb2lmdVF4bU44OFNXVlhXTE1hVXFxcWdDMEJtUUpSNnNrM3U5TkNmNmpZTFh4QWZxc1lFZ1ZMQWhSWTJBdGd0ZmxaTkZtRnloeGRyTGtBZFdsazREODhNMml4SHllcElkaE1IckcvaVIxWkd0cTBNR3BiRGJSUFlPWGVTWTFNNk55NFpzdHZHU2t0SytYYkZQQVRqMkQzNzFzYVBFc0FNWGhYcnNaMGttL1hTdGtoaE15QmZzYTZ1WEZaZTJWQ2UrWU1yMStHS2d3clF5TllxMVZSckIrRWl6QW93Nk5zZE5LY3lWRWtZZU03M3lzNnE0a0FIcDZCaUZrbFRrSXJWQzVvWVY3dXp3T0dDejRVSjBTdHEybFdNSnk0d3RiK1JldEw2dFpGaWNuSm1CdzVVakN2WFhNWlZKWDJNUWtiZitYTjVFV2Q3OFZ6OC9KRXNNWlRCaUtOenNtMWluTFJVUTc0SDROaWRhcUk2OGo1c0FGZ3hjUnZlQzdpZUxKWGZRWXhqWloyQ3NpV0Zld1pYSm1CSWxaMXRkdHJYNGhTdWF0ZUtzby9SWk90T0tXMm5tcTFvVHplSzZkUldBV3UyTlJWYjRocTBTWG0xR3Z0dWdIcmJyNUlYcW1Ta3RnNUN1REUyTVNsUHdzWTVrTkUyV3AzQXFpWmJXVkxBeGlCRisyaUJaYnVOajZNQjZyc01MQzdGeWFzYVlEeW83S2tvUHlFdHczcEVNWGZQdnhBSmkyakFRUWdqcnowckxJWlNXWmxJb05od2Q1eEs0QVI5bVlOaldBYUxybnVJbUplQlZOOXpCT1JPYlZ2YnIrbVRUZkZTRUpMU1JuSG83aEVKb0lpOE1GcWp4bXZnbUY1VVJaejR6TEZnWlo4Q3R1Mlg3Z2dWY2NLbTlnVnhJc09IcXhYZ05NS25GV1pZbmYxZEJuT2hheVhxMTdRd0ZsV1cwOWVOS3lWSkZtWHFhT05HQTVhQ2VnTWJKM1VVa0dZMWljM25LV2dqcThxZlZZR1FHMWdSdDZyczYyYTZIaXFxVU9xZGVzSzVObVg0bkdvZkpvaUUxZDBkRjlsVlZrdlQxL2tFRWFhQ29ZT3dGcGNWY29MTSs3NjY5UHhDOXJXcWt0SDBzV1VZbGQwVkNwdUJaL3N0VlJjR2d5OVdYMitVMVF0aGk5U3pBcVN4elpzeStPaUZ6QllueVNHVjZHa3U0NHJEOEJDT1pCVjNCdkQ1K0FLUkhOd01Fc0I2RXpIbkpwa1RBZWlVbEVHa2NFQ2VCNkdEWlRwNVlFSlRsdmRya254WWpUbGxNa2ZOdFh3RGpNN3VWaks1SlhVVW40M3JycXBLMmp5dGF4SFcwTTVHOERDOHJ0SE1ZczdLU2dkdVZRTUdUWUZxRnZWUzZya0Qzc0RKNDZhZmRZRndvcTExQU9LQ0JMaHZ3b1VnYzhJR0FOeWNSNmtuWnJkSlBkc3V4bnlqZmQzRm92VGxSTWRFZHRPbDVDTVY1RUhzWFFCaXM3VE93dklEWmFHajJWbnBiaDdjcEs2M1Z3WUVNTHdxYmp6eWw2OTlzYXdGRmtGMXlxalVVMzFIZkM2c1cxWkZWRnVYVlhWZ3o5a2VFYXcweXMxbFdmbSthelFBUVNXQStoS1lWZnNaalBuY0FjVUI5b0lheXkvVVpYUk5ja0RHamk3N0dzV2J2Qm82dFByV1BxT3lWa0JVcStJTmVxcHpOZFlzL3UwaWZoNXFtcHFJVyszM0pWU1Vjd1k3MEtMNFU5bFlkVTZsanRTbHM3bG1maTlnM1l6ZVFmVmthR0ZhVjNPRENuYUQyTjh3c0VERmtsRTNSek0zWmdoZFlrV0hzc3pxNzBGSWVjbktrVmt0OGV6TXpScTlia0d1S29qUkxCVlNvZDNZMXlQcUtnWVc3SlJRVFBWeXk1eElZTGpPZ3hnVDUyUktKVVkxZE9ySWlSZDRmdXRReC9BNUFjU21FanowdkZXcmtMenZiV0F1OUhPV2JHZ3hGazFWTlRwbkJLazZUZ3dpc0kvSGN4WVhQMXVBV083MlVMRmxCVHErYVN1MlZUVXM2aHJ4TTJDRitoRW9yMVZJQTlabUZVYWFiMWxTU2dac1ZzNHN4ekhsVkxvSkhyOUg0RGhPTlRrSTFYQzAvd2lZMk5vV0FHNVJsbkhGbnE2b0xjY3BRZGRNdUovTzE3SlZBNU9ITGkwQnFDenRxN1kxKyt1Y0NkOThxTEk4TUlIQlYvY0tqeFFUbWUzaEZCUzNNeUNxbkRzdXltMm84MEhqdkZGVHRyVVJtTmFHSnNtVmFoSW1qVHNVWEt0UVpUQVZzN012djgvK2Z6VXJaQVhjTEo2TTRrb2U2WFAwYjZTbVdXTkR6eVVwUThibCtMdFd4NHR1cVozNmNSWVYzeXVWeFBOd3ZJaXFpUUNTbXU3c3JnVHpSNm5reWhwQ2FyWHdGeTF2R2Q1aVAyY1kwNmxGcjVOamhoZzFZNitOQjI4ZnRiSzgzczhyZjdrTEpiS3dERlBiTGcyNWEwQWRaSkVpcXI1cGhpeEtNRGxSVXRjc3NxMWhyaUxxR29IK3plTmdWbTlPZW1qc0VUVjhKZEYwTkhua0lGeFdZMU9CNFlycDdydFdKN05nQUFBUFhrbEVRVlEzb05zNW5wbHlWZjh1MkZvTHUxSnJIdmVhWldRanFBa3NodEZhMmd6c1NHM1pwa2J2ZzNIYWZGOXNsUFBsbGRqRmxLODBHeXNtOE1yNE1QaG5lTldFTlBHakFJcG1pbFRQQVRkVFJUWGxDQllIWUFRdVB3QTM2eElwV3RHTjRxM1kyTWhpR3NVcHVTU25sRUpSRDhQb3JDN0NGWVZ3K0Y1MXFUaGdhYnhzVHhXekNHWTBaU3NiM2xmcUF5ME9QTmpOeTh4aVFRS3NIWUZRMkhCWlZ2VmJCdXEzbTFvV0thanFhb25zTTZ1WlVyNkNqWFdOWjBsNUUzaDNqVVJtYTZrUDNNSklpeTFMbStrYWhRcTQxTjJpWmphNXNqdGxMWU5aSFpySDZxVUdtNHZNYkRwNlJ3MkNGbXZ1eUZrckJjQ3lNdEZxQmFFQ21zSG9LOUJaMkxBL2xKY1JxU2FEcW5hV2JyWmRHYXozRExnSXZCbG40d29HenRieUpHcXNsd3hraGhIclRqVFlGWEN0T29LUzh1TGRvZlZkQWJPeWxHVTZubFlwWFdadHM0blhCcTZXeEppdE1Ob2tIVUpuYm5KcGxRbSthR3BZMmE1R01WMlFEMWhSdWJCUEZLZHVtZjVPSGtMSHowRjlsdUU1a2pCalJhMG5GRTVDVUdxSHczMk1talo2eGtnSU5WblNuWjFWWlN0SzJxS2xSYUxsUWdLN3VUcTdKRlhKd00rM1NPRUt5aFpOSSt0SjBJNXFNWXk5azJxSkQ3ZFZXZHFLWGEwQ0tOUjBDY2pnK0IySVl1MmZjQlpKWmtNRmdNMTFyMFg5MndpbGdoRkdnelZuZXhscUI3eEw5bVMyOVNpWVVWWTJuWE9aak5CUnN5RHNRUFJXVzVoclo0WGNkQzRIVldSYmpnSnI0c0ZvZks1U3pqUTdyaEkxVWViZFBkRWJqNnNxSXZUWlFaNXZhMDhyQUJzQVcwVXhlV3l0QWs3QTJLSjlacHh6Q2lvQjI0WEZ0WUFlWFl4cjZhblNxaExncHBFcVdiR3dMdW5UZ3JWK0lqV2xMMjlsamFBbDRFUU1Hc0VycDRhcGVaaXF1d1JYTFhBcU9DZXJ1MzJtbXlkYzZvV1RTV3BGQUdkemVUQjhSVEhWTUV0bE05MENiYlFDWWhQanEzZWdZcjFGR2RZSVFqaXVER1o1elovQXpvYktHT3lMeHRpNmM0Und0djJhbnlXbExJQ25sTGh4SlJYdDZBNWViREJXRk5PTmJ4V1oyZDAybW51NFM5WUVDcGVwcFYxelNXUkJXeEhZelZJdjFDWFNvdXdxcVgzakJCQkRaZFlRYnBUUVc0WlFsUzhyNWtINHN1U1JtZzIrKzNKTjEweDFQYUFtRWttdFlsRWRlR3BKRU02a091Q3FDUjIyb1N1amo1SVYySGRUMHpqNXByTEtUalhGQVBqZFFseXE3eElCeEFRUDV5TWN6RzRWeEFLdzBuNmlsWjJRQmNlMnBMdWxrdXh4cW5vSXpGZmdxeXFqaWw5UzFWTndCckZtZXllb3BzOHlPalpVeWJaZGZTOEN1YVRJSnVtenM1dE9EYU50THBGRFEvUGNKR3dlTGhtZUwxbkIwS3FpVURTY3NpVVZEODlEaTNIdHJLdFNVTHczUkxpeWdaRCs3c0Y4SlRPYmdZc3JHdkROVUZSR2wxaXkwTGwxWWtVYzJhSllNb2c5MjBJOHFXNllEQ2cxTXFrMEpISkZLWGtiZ2JScmVJK3FwWU5PWkhyVmNEVWJhN3Bqc3BoU0pOdEs2dXBnUk5BVm9PUzBtdWdCZU40YklaZ0hodVBaL3MxRU5hWDZLc1ZyK1lOcmgxTmI3aXBSMFBFNXpiTlJlZ0NickhSVXc2WWYwN2RMQkpsMWY4S0I5YXMyVjFuTnFBc2w2MkxCQmhlaHdhbGVya0htQjFKRklFWktTRXVzZGw1SlFqMW5KbEhYU0NGMzQyZ0o5Q1lHclhlbGtuSklYcVZQOHNEK3F0cGxDUjNYSDJxZktxMHlnTXArS25Wa0t4TmxaOG0yWWtJbFZNaUNuWFV3bDdxem5CS1N2UXozbTNQdDZvUWJYTzViNUZpeENoL2ZIeFVRVy9BRWNLNnpDTnFLUW5MOXN5d3FtS3V3dnFTWXpUL2FQVk5OcFZ5aHZSVzIxYXFjaUNzamRXdkJ3SUxVdmg1VnlDemJXb0MxcEpqSjY4MENXc2wrdWRLQjZUNVJ3RzFtbG9obmxwYmc0N2l6NVU5aGEwRkd0bVJMRllCdE85OXk5N0FwMHorWkRUQW9nNmtTTFpzTUhnL0lGa2tncDZDcHZVMlUwY1lWU2RubWtqd0JkT21YYnhUV05XenVJYmlwTWlvVnhFY2taRW9haFNPaXkyTTNLMGpjQzFMaFZEd2FxRzBadmtjV3FDbnJHNEdJeHlrcnFsYldkdzZMUXlCYVpSOEhtTFJJaFFXc0hzd0Q0MlpYVkxOa2Y5bCtGbFcwSFZRMmx3RnNDL1oxRmR6bFFSMEthUGZvK0ZkZnUrL2R3VlJJQ3UxQ0dSN0FFSWlBaGMrQVpVRjBrT0JhUHhtVXFnNGk2NHZRblU0bkZEWUo5TnorMWZWWHZlSDlxbXIra1BJTHg4b0tjUlYvQkZieGJFMEpNVDBrU0Q0dzZML2xOWThvY3NxYWdWZFUzQTNNanhoeGNHdXF6c1BINGlycGFvdzFxNk95clZqdnA5TnBjNTlFOTFMbGRib1lWekpXZGltV2ZBVzJTTkVLY0RhWDJGbUJMTEEvdUt4bG1oaDYxM0lzMVVSUUFwYktmdHR3eEwwMnE2T254NXBReFNiUG9qQWcrdjVoQW5ONkxIVlJEWElzdkt0UmppUzBxSlV5WlRBWFZiQUs4MkVsRkpXYVFkVm9xVUMxVW50N0JWYVRRdWRNNlN1cWV4alFKTjQrMGljYXh2L3V0Ykt2ODNFVGJUOEg4Z2pjT0t4T0ptYlVhNk9PVlhodDNkRlk2ckh2OVhvTnpGTGNlRUExbzgrcEttMExBSFBIWjJyWUtqRnEwaGZaRml4c3FISmdEM2VENW4rVTBrYjFtRmpYa24ybHZNU1NPc05FL0NkSUFLRjBTeXRxNnVyT0hVTjVnd2c0R1pvc2dibWdnTTV1Y3JhMnFyUzJJZzFjYmlCQmN4WXpnelVETkxDdkw4R2JaWE5wNk9SeTNMbVMrS2s4M3pSSUFLNkExaW9LYTJJOU5hcEl1aVVGZGZDOTc2NlBGWlV0cVVyNktiV2srelpVMWEvWnJJWEV6dHJqVE9mejdod0t6aUNlWElhcmFIdGJaSU16KzJwR2dhekNtdzRxV0FGdkVkaG9kWXAwWHEwcFY3RzFZV1lXYk80cWhHcTQyK1o4Qll0ckxXdmx1TlBwWkFlYUZGUzF2dWJQZ2JneHNxY3BuQWFzekJvdkthRm9EUThCR3RqZlVPbDROQUcybm1RVjA0ZmVKZ3VtdlgyZnNyUUVXWmdoTDBKblZkWWtuM0RPWkllUk44NlJxUFdDbXN2R1ZxRU1Sbnd4UUF4d1M4RU1ZbzNJem1ZMitCQ2NMcDRNS2l1eXVoSW1hbWxiWkZjTm9ObDd0cCtSSGQxOFpqUUlSS3lYZEZSaE45OC9oeUtxd1hXTm83TzF3aWFYb0hOMTA4UkVaWldFcTZncm5JZmp6ZWc4amRSZjFYRUw0a2tYYTViQmpLeG9LYWxqQmplSGxWeFE0R2F5Y3BXNGxET0FLdG5UeEhBdE9mek90WndIQU03c3FWWGtWNnl1NmthcDFuSGtYS3FXRi80WEhxamVuTktxQmpwUjNsMWNoM0VqZzErRXNnZFFoc2RHMEI0Rk05c1dBVldwdUF5aXdUUGxlWnh0OVZ5WlZTMnFYZlJlV3FUQWlscHI5QXBvV1RqeHltaXQ3TndWNEpUcmlaeU9BOUIwazdIRmZVTG91cm1LWUhWblJRdnFHTDVITUhkcUZjUjJxV3BtY0s2ZVR3eDJkaXBXcnZpRGlscitmS1dxM09XUldkSEt3QTRldTh3amNoYmVSekZpbHFqalpOM3VmQ3Bma0owL3NjVnBuWWs2TDBQSTc3bHhkV0NaODdXaVdtN0IvQUdxdVFTbnVqR0tzQjhDSm1pSnE4cTFwS0lWV3lxT2lUSzY2cjE4Qk44cjc0L0FFNzFmZEMzeVBTMk14ZE9wbkUxdGxWeEQ5Sm1WT29nZ04rcjRQakFYVkZQYTNFZzVqVkpHRlZVR05vbEgyMEdWclVCN0JPeVNXcTZXcVlRZFdSOTJwY0ZNWU13Y2tiU2dDS0NxRDY3RGlpV3UxZzhNUUM5QnlmY0ZxVzFMK2pMNzE0cU5DdXpub1N4dDBkYTJndFdOMUc4RjBCSzBOTjBudWltZWxVRjlkSWRBZmpPNDRVVDNDalFMb1VlTEhKRlRPM2dtcFJ1SUlPdndCUUNicU5lbzNxdFo5aUY2eFZLMTNHUmxvNHpxaW1xK0NHZFRpUjF1Ulk4b3FnRTAyaFpCYTc5a1pYUE1xdXhSSEtsYTJzYVpXTjRtUnFaVWowdkxDS2hraktucU9RSE51U1pWSm9LdkFxUzF3cEVxdXZXREMxQjJ5cHdyQ1BzUk1FUFZUT0RNTEpNRHY2cWVLWHdpMkpZVjVTcTRxS3l2Z0dzSENMaXVqMmpSNTlWOGdNcVNKMkZKWlJYRUhWUkhqM3NGUHJjdDZPcHFsVzFHcGF0UWR0MEd2d2ZNNm42M0luc0dWRmhKR2FCcWdxcUlWNklzWGxsWmd5U1BxNFIzYm50M3dpNWN2K2NOMnlxUUxXMVQ5NUtZVnNXV3RLazRjQjlXNTNXUVFmbFFZUjZXbDRIYUpaanZWRTBENXl2cStSS2daQ3M1cWRCRVA1c0Q5NGNBdlFMbFNnTmFTTUF0SHg4OEJ1TlE0MXpkRnNYMzB6S2JjczBNTEQvaWhrcFF6bDB3aVRxS0xUZmJLbUNteVlJQ25LMEliYWllQzRDRzlpU3lMUTdjSU1HUXdhdTZUS29xNjBBcGwzV040MExacGNhMUNLS0s5VlF5eUlFbjh3MEY4RjZDTDJoOG8zaXhHd0M3czdFV3pDT3FtY0FwWXhZRDRqc0F6VlMwc2wydDk4cEE3dnJLb3BoQ1ZTb25iWXBnSDZtdlNuMjRwVEJWNHNkdFYzQnRNcTVrODJ5K0lBRHZVSjB1QWxrQ1ZUeElhUG0rVU51L3FrVjRGMVR6SFhDR3JYSUFxSXRCS3lwcUs5OVZ0QU9WczY0TzRPYlg3cEhMVkNwWUhjUm13dkxSN1R2WUFLQkJONThMR1Z6RHVGeitoUWJXZ25jUXlDWkFrK1Zic1BTb3VmOTMyNjFpWmdtZkNwd1JiQXZxbVNxcmlVMlB3aGphb095WXF0SWVnVlhWaVRzbXl0YTZiR3lTcFkzZ3lScnBJeUFlYVdERHh0cHNYd0t5YWxNREtOUDdZQlhNcUVza1VzaTJ1QzhGTkFQeEFLVFZmVDFvNlZ6TTBFMGpGKzFyV2NVdUh2ZHlnN3Znb0ZwbFg4SHB2SHBNQ09NUlVQSHpaa0luc3FsRktOWC9FSU81MkUwU3hTek93b2IyVm1STFc1RDFYSVUwcmJnTTFBeldneUM3ZmU4Rzd4VUFLL3RhRUJhdDdsdXF0eVA3RW1zYUpRT2o1Rittcm5aZkN1WUNmQlVBV3dTaHlkNnBNWS92QUhHMVVxT1lwYkkvZ3k1VDBDTUttK1VPM2dGdUM4NWRnZkRWZWd1UERmSVRySUJMc0xyY2dkaDNDRmdGWmphS0o0SXYzRjhBTkVxdnV4UjF0VktPZ0xvQ2Exanhib0JBa2o2djdqL2ljRmJBN2Y0cmZSblFETFJWaUcxM2kwdnFCUXJZVnFCYkFEWlQwWnBpSG9TenZRcG9wS0lGUzNzRTFIZkJXbEhYZDBIN0xuQXJxdm91Z010bGpIQmdabmgzRW96L0JLakxNTDRaMkFxMCtoRUpyOWphVlVCYnZOekNJVWlyb0M3QVdtbUZ3NG81QUszTXRCNVZ5cFpNU0ZnczA1SnlHVndsd0Jxc0VHQUFhMlpVMUNqVWV4WEdzRTRyS3JpaWxCdkZ6T0tLbzNBdUFyb0U2UUZRVTN1OFlwTlh3UzVrKzFUWnQ1VXJ3b3VONEtpVUV3K2szWldEcDFSWEhOUnFYYjIxVHMzOTk0NXlaU2czVm5aRk5ROUNGM1hlWnlyNURnQlhLaXdDTWEyTXhlVERZWGdQMUZzZjlRTktaYzBrODFSSmszcjZFUTNyQ21CVnlMTDc1RWpaMXBJVkRIb0Z0aU9BSG9CMEJkVFZ5bHFCc0tLS1MrQWVCWEpWTFkrQ1hBU3VHdk8vQXVxN0d1RWpEZkdLZzFvS2Exei9kbW1pOUk5U1VHTmhsMEF0ZnVsSEFhd29Zcm5Ta21OWEFWdUdFaHJFVlh2VUYrQTVDdDJQcU5PakRldHluYTRDbWVVb2xtZVhMTjRBcTdDNVNqMTBRN3lqZ2wrdDZDTnhTUkhtSTVYK0Nwd3JlWUIzUWZkcW5hNHEyMUtkQnVjNEdvWnNuNDlaT09pVmlud0hxSzlXemp2Z2V3ZUVoMkFVNSt2dHhaOUNkOVdxa2g0OVYxOEU1b2o2dlZ5bjBSU3RBeUdJTzVlZFhSS2Q1QjBWR1ZYcTJ5cjN4WXArNVV0K0M0UUo0UDFOMzM5cFFNalJlamo0dmIvRGNyNnJRYzNPLzByam10WnBlWUNCaUNIZkNlbVJiTmhiSy9wTlVQYzN3Zkt5NWYyRDdPbEwzL3VQaHZlL29VNFQwRjhmK1ZOTTJ2eW9pdjBqSytLSFFmZEhxKzBibmN6NG96NzMvK1k2TGJLdzFvLzVCN2VPZjFSbC8wZHU5Qjl0bi85YnZyZi9qK3YwaDZ0dG4ydHAvci80ODE5eTQvenY1MzkxdXZ6emZ3RGlmejZwaFQxTVBnQUFBQUJKUlU1RXJrSmdnZz09KX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNze3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lO3BhZGRpbmc6MDttYXJnaW46M3B4IC0zcHg7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzczpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6Izk5OX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVkOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3N7cG9zaXRpb246YWJzb2x1dGU7dG9wOi01cHg7cmlnaHQ6LTVweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6MXB4IDFweCA1cHggIzMzM30uY29sb3ItcGlja2VyIC5jcC1yZW1vdmUtY29sb3ItYnV0dG9uLWNsYXNzOmJlZm9yZXtjb250ZW50OiJ4Ijtwb3NpdGlvbjpyZWxhdGl2ZTtib3R0b206My41cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEwcHh9LmNvbG9yLXBpY2tlciAuZXllZHJvcHBlci1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2ZpbGw6I2ZmZjttaXgtYmxlbmQtbW9kZTpleGNsdXNpb259XG4nXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxnQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLmluamVjdG9yPWUsdGhpcy5jZnI9aSx0aGlzLmFwcFJlZj1yLHRoaXMudmNSZWY9byx0aGlzLmVsUmVmPXMsdGhpcy5fc2VydmljZT1hLHRoaXMuZGlhbG9nQ3JlYXRlZD0hMSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwV2lkdGg9IjIzMHB4Iix0aGlzLmNwSGVpZ2h0PSJhdXRvIix0aGlzLmNwVG9nZ2xlPSExLHRoaXMuY3BEaXNhYmxlZD0hMSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPVtdLHRoaXMuY3BGYWxsYmFja0NvbG9yPSIiLHRoaXMuY3BDb2xvck1vZGU9ImNvbG9yIix0aGlzLmNwQ215a0VuYWJsZWQ9ITEsdGhpcy5jcE91dHB1dEZvcm1hdD0iYXV0byIsdGhpcy5jcEFscGhhQ2hhbm5lbD0iZW5hYmxlZCIsdGhpcy5jcERpc2FibGVJbnB1dD0hMSx0aGlzLmNwRGlhbG9nRGlzcGxheT0icG9wdXAiLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5jcFBvc2l0aW9uPSJhdXRvIix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9IjAlIix0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c9ITEsdGhpcy5jcE9LQnV0dG9uPSExLHRoaXMuY3BPS0J1dHRvblRleHQ9Ik9LIix0aGlzLmNwT0tCdXR0b25DbGFzcz0iY3Atb2stYnV0dG9uLWNsYXNzIix0aGlzLmNwQ2FuY2VsQnV0dG9uPSExLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PSJDYW5jZWwiLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz0iY3AtY2FuY2VsLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcEV5ZURyb3BwZXI9ITEsdGhpcy5jcFByZXNldExhYmVsPSJQcmVzZXQgY29sb3JzIix0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9ImNwLXByZXNldC1jb2xvcnMtY2xhc3MiLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Nix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPSJObyBjb2xvcnMgYWRkZWQiLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcz0icHJlc2V0LWVtcHR5LW1lc3NhZ2UiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj0hMSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PSJBZGQgY29sb3IiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPSJjcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz0iY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcElucHV0Q2hhbmdlPW5ldyBGKCEwKSx0aGlzLmNwVG9nZ2xlQ2hhbmdlPW5ldyBGKCEwKSx0aGlzLmNwU2xpZGVyQ2hhbmdlPW5ldyBGKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ0VuZD1uZXcgRighMCksdGhpcy5jcFNsaWRlckRyYWdTdGFydD1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlck9wZW49bmV3IEYoITApLHRoaXMuY29sb3JQaWNrZXJDbG9zZT1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlckNhbmNlbD1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlclNlbGVjdD1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlckNoYW5nZT1uZXcgRighMSksdGhpcy5jcENteWtDb2xvckNoYW5nZT1uZXcgRighMCksdGhpcy5jcFByZXNldENvbG9yc0NoYW5nZT1uZXcgRighMCl9aGFuZGxlQ2xpY2soKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVGb2N1cygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUlucHV0KGUpe3RoaXMuaW5wdXRDaGFuZ2UoZSl9bmdPbkRlc3Ryb3koKXtudWxsIT10aGlzLmNtcFJlZiYmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYmJnRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLHRoaXMuY21wUmVmLmRlc3Ryb3koKSx0aGlzLmNtcFJlZj1udWxsLHRoaXMuZGlhbG9nPW51bGwpfW5nT25DaGFuZ2VzKGUpe2UuY3BUb2dnbGUmJiF0aGlzLmNwRGlzYWJsZWQmJihlLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZT90aGlzLm9wZW5EaWFsb2coKTplLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZXx8dGhpcy5jbG9zZURpYWxvZygpKSxlLmNvbG9yUGlja2VyJiYodGhpcy5kaWFsb2cmJiF0aGlzLmlnbm9yZUNoYW5nZXMmJigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5zZXRJbml0aWFsQ29sb3IoZS5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUpLHRoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyhlLmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSwhMSksdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSksKGUuY3BQcmVzZXRMYWJlbHx8ZS5jcFByZXNldENvbG9ycykmJnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zZXRQcmVzZXRDb25maWcodGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5EaWFsb2coKXtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQpdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLm9wZW5EaWFsb2codGhpcy5jb2xvclBpY2tlcik7ZWxzZXtsZXQgZT10aGlzLnZjUmVmO2lmKHRoaXMuZGlhbG9nQ3JlYXRlZD0hMCx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSl7bGV0IG89dGhpcy5pbmplY3Rvci5nZXQodGhpcy5hcHBSZWYuY29tcG9uZW50VHlwZXNbMF0sTWkuTlVMTCk7byE9PU1pLk5VTEw/ZT1vLnZjUmVmfHxvLnZpZXdDb250YWluZXJSZWZ8fHRoaXMudmNSZWY6dGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMH1sZXQgaT10aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShKVmUpO2lmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYpdGhpcy5jbXBSZWY9aS5jcmVhdGUodGhpcy5pbmplY3RvciksdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNtcFJlZi5ob3N0VmlldyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNtcFJlZi5ob3N0Vmlldy5yb290Tm9kZXNbMF0pO2Vsc2V7bGV0IHI9TWkuY3JlYXRlKHtwcm92aWRlcnM6W10scGFyZW50OmUuaW5qZWN0b3J9KTt0aGlzLmNtcFJlZj1lLmNyZWF0ZUNvbXBvbmVudChpLDAscixbXSl9dGhpcy5jbXBSZWYuaW5zdGFuY2Uuc2V0dXBEaWFsb2codGhpcyx0aGlzLmVsUmVmLHRoaXMuY29sb3JQaWNrZXIsdGhpcy5jcFdpZHRoLHRoaXMuY3BIZWlnaHQsdGhpcy5jcERpYWxvZ0Rpc3BsYXksdGhpcy5jcEZhbGxiYWNrQ29sb3IsdGhpcy5jcENvbG9yTW9kZSx0aGlzLmNwQ215a0VuYWJsZWQsdGhpcy5jcEFscGhhQ2hhbm5lbCx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BEaXNhYmxlSW5wdXQsdGhpcy5jcElnbm9yZWRFbGVtZW50cyx0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUsdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyLHRoaXMuY3BQb3NpdGlvbix0aGlzLmNwUG9zaXRpb25PZmZzZXQsdGhpcy5jcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93LHRoaXMuY3BQcmVzZXRMYWJlbCx0aGlzLmNwUHJlc2V0Q29sb3JzLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcyx0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2UsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzLHRoaXMuY3BPS0J1dHRvbix0aGlzLmNwT0tCdXR0b25DbGFzcyx0aGlzLmNwT0tCdXR0b25UZXh0LHRoaXMuY3BDYW5jZWxCdXR0b24sdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0LHRoaXMuY3BBZGRDb2xvckJ1dHRvbix0aGlzLmNwQWRkQ29sb3JCdXR0b25DbGFzcyx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0LHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BFeWVEcm9wcGVyLHRoaXMuZWxSZWYsdGhpcy5jcEV4dHJhVGVtcGxhdGUpLHRoaXMuZGlhbG9nPXRoaXMuY21wUmVmLmluc3RhbmNlLHRoaXMudmNSZWYhPT1lJiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9fWNsb3NlRGlhbG9nKCl7dGhpcy5kaWFsb2cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuY2xvc2VEaWFsb2coKX1jbXlrQ2hhbmdlZChlKXt0aGlzLmNwQ215a0NvbG9yQ2hhbmdlLmVtaXQoZSl9c3RhdGVDaGFuZ2VkKGUpe3RoaXMuY3BUb2dnbGVDaGFuZ2UuZW1pdChlKSxlP3RoaXMuY29sb3JQaWNrZXJPcGVuLmVtaXQodGhpcy5jb2xvclBpY2tlcik6dGhpcy5jb2xvclBpY2tlckNsb3NlLmVtaXQodGhpcy5jb2xvclBpY2tlcil9Y29sb3JDaGFuZ2VkKGUsaT0hMCl7dGhpcy5pZ25vcmVDaGFuZ2VzPWksdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KGUpfWNvbG9yU2VsZWN0ZWQoZSl7dGhpcy5jb2xvclBpY2tlclNlbGVjdC5lbWl0KGUpfWNvbG9yQ2FuY2VsZWQoKXt0aGlzLmNvbG9yUGlja2VyQ2FuY2VsLmVtaXQoKX1pbnB1dEZvY3VzKCl7bGV0IGU9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LGk9dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIocj0+cj09PWUpOyF0aGlzLmNwRGlzYWJsZWQmJiFpLmxlbmd0aCYmKHR5cGVvZiBkb2N1bWVudDwidSImJmU9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50P3RoaXMub3BlbkRpYWxvZygpOnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zaG93P3RoaXMuY2xvc2VEaWFsb2coKTp0aGlzLm9wZW5EaWFsb2coKSl9aW5wdXRDaGFuZ2UoZSl7dGhpcy5kaWFsb2c/dGhpcy5kaWFsb2cuc2V0Q29sb3JGcm9tU3RyaW5nKGUudGFyZ2V0LnZhbHVlLCEwKToodGhpcy5jb2xvclBpY2tlcj1lLnRhcmdldC52YWx1ZSx0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQodGhpcy5jb2xvclBpY2tlcikpfWlucHV0Q2hhbmdlZChlKXt0aGlzLmNwSW5wdXRDaGFuZ2UuZW1pdChlKX1zbGlkZXJDaGFuZ2VkKGUpe3RoaXMuY3BTbGlkZXJDaGFuZ2UuZW1pdChlKX1zbGlkZXJEcmFnRW5kKGUpe3RoaXMuY3BTbGlkZXJEcmFnRW5kLmVtaXQoZSl9c2xpZGVyRHJhZ1N0YXJ0KGUpe3RoaXMuY3BTbGlkZXJEcmFnU3RhcnQuZW1pdChlKX1wcmVzZXRDb2xvcnNDaGFuZ2VkKGUpe3RoaXMuY3BQcmVzZXRDb2xvcnNDaGFuZ2UuZW1pdChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNaSksQyhmbyksQyh5YyksQyhzaSksQyhNZSksQyhFVikpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjb2xvclBpY2tlciIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUNsaWNrKCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXMoKX0pKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXQobyl9KX0saW5wdXRzOntjb2xvclBpY2tlcjoiY29sb3JQaWNrZXIiLGNwV2lkdGg6ImNwV2lkdGgiLGNwSGVpZ2h0OiJjcEhlaWdodCIsY3BUb2dnbGU6ImNwVG9nZ2xlIixjcERpc2FibGVkOiJjcERpc2FibGVkIixjcElnbm9yZWRFbGVtZW50czoiY3BJZ25vcmVkRWxlbWVudHMiLGNwRmFsbGJhY2tDb2xvcjoiY3BGYWxsYmFja0NvbG9yIixjcENvbG9yTW9kZToiY3BDb2xvck1vZGUiLGNwQ215a0VuYWJsZWQ6ImNwQ215a0VuYWJsZWQiLGNwT3V0cHV0Rm9ybWF0OiJjcE91dHB1dEZvcm1hdCIsY3BBbHBoYUNoYW5uZWw6ImNwQWxwaGFDaGFubmVsIixjcERpc2FibGVJbnB1dDoiY3BEaXNhYmxlSW5wdXQiLGNwRGlhbG9nRGlzcGxheToiY3BEaWFsb2dEaXNwbGF5IixjcFNhdmVDbGlja091dHNpZGU6ImNwU2F2ZUNsaWNrT3V0c2lkZSIsY3BDbG9zZUNsaWNrT3V0c2lkZToiY3BDbG9zZUNsaWNrT3V0c2lkZSIsY3BVc2VSb290Vmlld0NvbnRhaW5lcjoiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsY3BQb3NpdGlvbjoiY3BQb3NpdGlvbiIsY3BQb3NpdGlvbk9mZnNldDoiY3BQb3NpdGlvbk9mZnNldCIsY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzoiY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyIsY3BPS0J1dHRvbjoiY3BPS0J1dHRvbiIsY3BPS0J1dHRvblRleHQ6ImNwT0tCdXR0b25UZXh0IixjcE9LQnV0dG9uQ2xhc3M6ImNwT0tCdXR0b25DbGFzcyIsY3BDYW5jZWxCdXR0b246ImNwQ2FuY2VsQnV0dG9uIixjcENhbmNlbEJ1dHRvblRleHQ6ImNwQ2FuY2VsQnV0dG9uVGV4dCIsY3BDYW5jZWxCdXR0b25DbGFzczoiY3BDYW5jZWxCdXR0b25DbGFzcyIsY3BFeWVEcm9wcGVyOiJjcEV5ZURyb3BwZXIiLGNwUHJlc2V0TGFiZWw6ImNwUHJlc2V0TGFiZWwiLGNwUHJlc2V0Q29sb3JzOiJjcFByZXNldENvbG9ycyIsY3BQcmVzZXRDb2xvcnNDbGFzczoiY3BQcmVzZXRDb2xvcnNDbGFzcyIsY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6ImNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoIixjcFByZXNldEVtcHR5TWVzc2FnZToiY3BQcmVzZXRFbXB0eU1lc3NhZ2UiLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6ImNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MiLGNwQWRkQ29sb3JCdXR0b246ImNwQWRkQ29sb3JCdXR0b24iLGNwQWRkQ29sb3JCdXR0b25UZXh0OiJjcEFkZENvbG9yQnV0dG9uVGV4dCIsY3BBZGRDb2xvckJ1dHRvbkNsYXNzOiJjcEFkZENvbG9yQnV0dG9uQ2xhc3MiLGNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzczoiY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzIixjcEV4dHJhVGVtcGxhdGU6ImNwRXh0cmFUZW1wbGF0ZSJ9LG91dHB1dHM6e2NwSW5wdXRDaGFuZ2U6ImNwSW5wdXRDaGFuZ2UiLGNwVG9nZ2xlQ2hhbmdlOiJjcFRvZ2dsZUNoYW5nZSIsY3BTbGlkZXJDaGFuZ2U6ImNwU2xpZGVyQ2hhbmdlIixjcFNsaWRlckRyYWdFbmQ6ImNwU2xpZGVyRHJhZ0VuZCIsY3BTbGlkZXJEcmFnU3RhcnQ6ImNwU2xpZGVyRHJhZ1N0YXJ0Iixjb2xvclBpY2tlck9wZW46ImNvbG9yUGlja2VyT3BlbiIsY29sb3JQaWNrZXJDbG9zZToiY29sb3JQaWNrZXJDbG9zZSIsY29sb3JQaWNrZXJDYW5jZWw6ImNvbG9yUGlja2VyQ2FuY2VsIixjb2xvclBpY2tlclNlbGVjdDoiY29sb3JQaWNrZXJTZWxlY3QiLGNvbG9yUGlja2VyQ2hhbmdlOiJjb2xvclBpY2tlckNoYW5nZSIsY3BDbXlrQ29sb3JDaGFuZ2U6ImNwQ215a0NvbG9yQ2hhbmdlIixjcFByZXNldENvbG9yc0NoYW5nZToiY3BQcmVzZXRDb2xvcnNDaGFuZ2UifSxleHBvcnRBczpbIm5neENvbG9yUGlja2VyIl0sZmVhdHVyZXM6W0d0XX0pLG59KSgpLGJuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltFVl0saW1wb3J0czpbUGVdfSksbn0pKCksZTRlPVsicmVnZXhTdHJpbmdJbnB1dCJdO2Z1bmN0aW9uIHQ0ZShuLHQpe2lmKDEmbiYmKE90KDApLGgoMSwibGkiLDIyKSxUKDIpLGcoKSxrdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3YoMSksXygidGl0bGUiLGUubmFtZSksdigxKSxidChlLm5hbWUpfX1mdW5jdGlvbiBuNGUobix0KXtpZigxJm4mJihoKDAsImxpIiwyMykoMSwiZW0iKSxUKDIpLGooMywibnVtYmVyIiksZygpKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDt2KDIpLEhlKCJhbmQgIixXKDMsMSxlLnJ1bnMubGVuZ3RoLTUpLCIgbW9yZSIpfX1mdW5jdGlvbiBpNGUobix0KXsxJm4mJihoKDAsImxpIiwyNCkoMSwiZW0iKSxUKDIsIk5vIHJ1bnMgYXJlIGluIHRoZSBncm91cCIpLGcoKSgpKX12YXIgcjRlPWZ1bmN0aW9uKG4pe3JldHVybntib3JkZXJDb2xvcjpufX0sbzRlPWZ1bmN0aW9uKG4pe3JldHVybntiYWNrZ3JvdW5kQ29sb3I6bn19O2Z1bmN0aW9uIHM0ZShuLHQpe2lmKDEmbiYmKGgoMCwidWwiLDE2KSgxLCJsaSIpKDIsImxhYmVsIiksUCgzLCJzcGFuIiwxNyksaCg0LCJjb2RlIiwxOCksVCg1KSxnKCkoKSxoKDYsInVsIiksUyg3LHQ0ZSwzLDIsIm5nLWNvbnRhaW5lciIsMTkpLGooOCwic2xpY2UiKSxTKDksbjRlLDQsMywibGkiLDIwKSxTKDEwLGk0ZSwzLDAsImxpIiwyMSksZygpKCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtfKCJuZ1N0eWxlIixJbigxMSxyNGUsZS5jb2xvcikpLHYoMyksXygibmdTdHlsZSIsSW4oMTMsbzRlLGUuY29sb3IpKSx2KDEpLF8oInRpdGxlIixlLmdyb3VwSWQpLHYoMSksYnQoZS5ncm91cElkKSx2KDIpLF8oIm5nRm9yT2YiLFBPKDgsNyxlLnJ1bnMsMCw1KSksdigyKSxfKCJuZ0lmIixlLnJ1bnMubGVuZ3RoPjUpLHYoMSksXygibmdJZiIsMD09PWUucnVucy5sZW5ndGgpfX1mdW5jdGlvbiBhNGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTQpLFMoMSxzNGUsMTEsMTUsInVsIiwxNSksZygpKSwyJm4pe2xldCBlPXcoMik7digxKSxfKCJuZ0Zvck9mIixlLmNvbG9yUnVuUGFpckxpc3QpfX1mdW5jdGlvbiBsNGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMjUpLFQoMSwiIFRoZXJlIGFyZSBubyBydW5zIG1hdGNoaW5nIHRoZSByZWdleCwgIiksaCgyLCJjb2RlIiksVCgzKSxnKCksVCg0LCIuIFBsZWFzZSBjaGVjayBpZiB5b3VyIHJlZ2V4IHN0cmluZyBpcyBjb3JyZWN0LiAiKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDMpLEhlKCIvIixlLnJlZ2V4U3RyaW5nLCIvIil9fWZ1bmN0aW9uIGM0ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxMCkoMSwiaDQiKSxUKDIsIkNvbG9yIGdyb3VwIHByZXZpZXciKSxnKCksaCgzLCJkaXYiLDExKSxTKDQsYTRlLDIsMSwiZGl2IiwxMiksUyg1LGw0ZSw1LDEsIm5nLXRlbXBsYXRlIixudWxsLDEzLFd0KSxnKCkoKSksMiZuKXtsZXQgZT1pdCg2KSxpPXcoKTt2KDQpLF8oIm5nSWYiLGkuY29sb3JSdW5QYWlyTGlzdC5sZW5ndGgpKCJuZ0lmRWxzZSIsZSl9fXZhciB5bmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5ob3N0RWxSZWY9aSx0aGlzLm9uU2F2ZT1uZXcgRix0aGlzLnJlZ2V4SW5wdXRPbkNoYW5nZT1uZXcgRix0aGlzLnRpbWVPdXRJZD0wfXJlc2V0Rm9jdXMoKXt0aGlzLmhvc3RFbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0aGlzLnJlZ2V4U3RyaW5nSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRW50ZXIoZSl7dGhpcy5vblNhdmVDbGljayhlKSx0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpfW9uU2F2ZUNsaWNrKGUpe3RoaXMub25TYXZlLmVtaXQoZSl9ZmlsbEV4YW1wbGUoZSl7dGhpcy5yZWdleFN0cmluZz1lLHRoaXMucmVnZXhJbnB1dENoYW5nZShlKX1yZWdleElucHV0Q2hhbmdlKGUpe3RoaXMucmVnZXhJbnB1dE9uQ2hhbmdlLmVtaXQoZSl9aGFuZGxlRm9jdXNPdXQoKXtjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0SWQpLHRoaXMudGltZU91dElkPXNldFRpbWVvdXQodGhpcy5yZXNldEZvY3VzLmJpbmQodGhpcyksMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoRWQpLEMoTWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShlNGUsNyksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5yZWdleFN0cmluZ0lucHV0PXIuZmlyc3QpfX0saW5wdXRzOntyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLGNvbG9yUnVuUGFpckxpc3Q6ImNvbG9yUnVuUGFpckxpc3QifSxvdXRwdXRzOntvblNhdmU6Im9uU2F2ZSIscmVnZXhJbnB1dE9uQ2hhbmdlOiJyZWdleElucHV0T25DaGFuZ2UifSxkZWNsczozMCx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpDb2xvciBSdW5zIGJ5IFJlZ2V4IFF1ZXJ54pCfMTVlZDlmNmZkMmQ0OTA2YTQ4MDNmYzEyNTVkZTNjNWRiMmM1NjUzMOKQnzkwODg5ODUxMTM5NjAzMTI4MDg6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeWAsW1sxLCJyZWdleC1lZGl0LWRpYWxvZyIsMywiZm9jdXNvdXQiXSxbIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIm1hdElucHV0IiwiIiwiYXJpYS1sYWJlbCIsdCwiY2RrRm9jdXNJbml0aWFsIiwiIiwzLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJpbnB1dCJdLFsicmVnZXhTdHJpbmdJbnB1dCIsIiJdLFsxLCJleGFtcGxlLWRldGFpbHMiXSxbMywiY2xpY2siXSxbImNsYXNzIiwiZ3JvdXAtY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiLCIiLCJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwibWF0LWRpYWxvZy1jbG9zZSIsIiIsMSwic2F2ZS1idXR0b24iLDMsImNsaWNrIl0sWzEsImdyb3VwLWNvbnRhaW5lciJdLFsxLCJncm91cGluZy1wcmV2aWV3Il0sWyJjbGFzcyIsIm1hdGNoLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eSIsIiJdLFsxLCJtYXRjaC1jb250YWluZXIiXSxbImNsYXNzIiwiZ3JvdXAiLDMsIm5nU3R5bGUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJncm91cCIsMywibmdTdHlsZSJdLFsxLCJjb2xvci1zd2F0Y2giLDMsIm5nU3R5bGUiXSxbMSwiZ3JvdXAtaWQiLDMsInRpdGxlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb3JlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLW1hdGNoIiw0LCJuZ0lmIl0sWzMsInRpdGxlIl0sWzEsIm1vcmUiXSxbMSwibm8tbWF0Y2giXSxbMSwid2FybmluZyJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUpe2xldCByPWdlKCk7aCgwLCJkaXYiLDApLEkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUZvY3VzT3V0KCl9KSxoKDEsImgxIiwxKSxUKDIsIkNvbG9yIHJ1bnMgYnkgcmVnZXgiKSxnKCksaCgzLCJtYXQtZGlhbG9nLWNvbnRlbnQiKSg0LCJwIiksVCg1LCJFbnRlciBhIHJlZ2V4IHdpdGggY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhZ2FpbnN0IHJ1biBuYW1lczoiKSxnKCksaCg2LCJtYXQtZm9ybS1maWVsZCIpKDcsImlucHV0IiwyLDMpLEkoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKHMpe3JldHVybiBpLm9uRW50ZXIocy50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihzKXtyZXR1cm4gaS5yZWdleElucHV0Q2hhbmdlKHMudGFyZ2V0LnZhbHVlKX0pLGcoKSgpKCksaCg5LCJkaXYiLDQpKDEwLCJwIiksVCgxMSwnIEVhY2ggbWF0Y2hpbmcgcnVuIHdpbGwgYmUgYXNzaWduZWQgYSBjb2xvciBiYXNlZCBvbiB0aGUgImtleSIgZm9ybWVkIGJ5IGl0cyBtYXRjaGVzIHRvIHRoZSBjYXB0dXJpbmcgZ3JvdXBzLiAnKSxQKDEyLCJiciIpLGgoMTMsImJ1dHRvbiIsNSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZmlsbEV4YW1wbGUoIih0cmFpbnxldmFsKSIpfSksVCgxNCwiIFRyeSAiKSxoKDE1LCJjb2RlIiksVCgxNiwiKHRyYWlufGV2YWwpIiksZygpKCksVCgxNywiIHRvIGFzc2lnbiBhbGwgcnVucyBjb250YWluaW5nICIpLGgoMTgsImNvZGUiKSxUKDE5LCJ0cmFpbiIpLGcoKSxUKDIwLCIgdG8gb25lIGNvbG9yIGFuZCBhbGwgcnVucyBjb250YWluaW5nICIpLGgoMjEsImNvZGUiKSxUKDIyLCJldmFsIiksZygpLFQoMjMsIiB0byBhbm90aGVyIGNvbG9yLiAiKSxnKCkoKSxTKDI0LGM0ZSw3LDIsImRpdiIsNiksaCgyNSwiZGl2Iiw3KSgyNiwiYnV0dG9uIiw4KSxUKDI3LCJDYW5jZWwiKSxnKCksaCgyOCwiYnV0dG9uIiw5KSxJKCJjbGljayIsZnVuY3Rpb24oKXtYKHIpO2xldCBzPWl0KDgpO3JldHVybiBRKGkub25TYXZlQ2xpY2socy52YWx1ZSkpfSksVCgyOSwiIFNhdmUgIiksZygpKCkoKX0yJmUmJih2KDcpLFdpKCJ2YWx1ZSIsaS5yZWdleFN0cmluZyksdigxNyksXygibmdJZiIsaS5yZWdleFN0cmluZykpfSxkZXBlbmRlbmNpZXM6W25uLEZlLHB1LEthLEppLFoxLHA5LEsxLEoxLFV1LGpqLExhXSxzdHlsZXM6WyIuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjE2cHh9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjojMTk3NmQyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM0MmE1ZjV9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6IzdiMWZhMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTZweH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjE2cHh9Lmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6LjllbX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjttYXgtaGVpZ2h0OjUwdmg7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lm1hdGNoLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtkaXNwbGF5OmdyaWQ7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLCBtaW5tYXgoNTAlLCAxZnIpKX0uY29sb3Itc3dhdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3gtc2hhZG93OjAgMCAycHggIzAwMDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTVweDt3aWR0aDoxNXB4fXVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaXN0LXN0eWxlLXR5cGU6bm9uZTtwYWRkaW5nOjB9bWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czozcHg7bWFyZ2luOjA7cGFkZGluZzoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dhcDoxMHB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczptYXgtY29udGVudCBhdXRvO3BhZGRpbmc6MTZweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgLmdyb3VwLWlkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6Ljk1ZW07b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW19Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTttYXJnaW4tdG9wOjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnNhdmUtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc3RvcmU9ZSx0aGlzLmRpYWxvZ1JlZj1pLHRoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckPW5ldyBJZSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGEoKCk9PnRuKHRoaXMuc3RvcmUuc2VsZWN0KHYxKS5waXBlKFl0KDEpKSx0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJCkpLnBpcGUocW4oIiIpKSx0aGlzLmNvbG9yUnVuUGFpckxpc3QkPXRhKCgpPT50aGlzLmdyb3VwQnlSZWdleFN0cmluZyQucGlwZSh3cig1MDApLGtlKG89Pnt0cnl7bGV0IHM9bmV3IFJlZ0V4cChvKTtyZXR1cm4gQm9vbGVhbihzKX1jYXRjaHtyZXR1cm4hMX19KSxMaSh0aGlzLmFsbFJ1bnMkLHRoaXMucnVuSWRUb0VpZCQsdGhpcy5zdG9yZS5zZWxlY3QoQnMuZ2V0Q29sb3JQYWxldHRlKSx0aGlzLnN0b3JlLnNlbGVjdChSbCkpLE4oKFtvLHMsYSxsLGNdKT0+e2xldCB1PVN2KHtrZXk6WWkuUkVHRVgscmVnZXhTdHJpbmc6b30scyxhKSxwPW5ldyBNYXAsZj1bXTtmb3IobGV0W20sYl1vZiBPYmplY3QuZW50cmllcyh1Lm1hdGNoZXMpKXtsZXQgTT1wLmdldChtKTtpZighTSl7bGV0IHk9bC5jb2xvcnNbcC5zaXplJWwuY29sb3JzLmxlbmd0aF07TT1jP3kuZGFya0hleDp5LmxpZ2h0SGV4LHAuc2V0KG0sTSl9Zi5wdXNoKHtncm91cElkOm0sY29sb3I6TSxydW5zOmJ9KX1yZXR1cm4gZn0pKSkucGlwZShxbihbXSkpLHRoaXMuZXhwZXJpbWVudElkcz1yLmV4cGVyaW1lbnRJZHMsdGhpcy5ydW5JZFRvRWlkJD1kbih0aGlzLmV4cGVyaW1lbnRJZHMubWFwKG89PnRoaXMuc3RvcmUuc2VsZWN0KEJXLHtleHBlcmltZW50SWQ6b30pLnBpcGUoTihzPT4oe2V4cGVyaW1lbnRJZDpvLHJ1bklkczpzfSkpKSkpLnBpcGUoTihvPT57bGV0IHM9e307Zm9yKGxldHtydW5JZHM6YSxleHBlcmltZW50SWQ6bH1vZiBvKWZvcihsZXQgYyBvZiBhKXNbY109bDtyZXR1cm4gc30pKSx0aGlzLmFsbFJ1bnMkPWRuKHRoaXMuZXhwZXJpbWVudElkcy5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoRHUse2V4cGVyaW1lbnRJZDpvfSkpKS5waXBlKE4obz0+by5mbGF0KCkpKX1vblJlZ2V4SW5wdXRPbkNoYW5nZShlKXt0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJC5uZXh0KGUpfW9uU2F2ZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEhoKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OntrZXk6WWkuUkVHRVgscmVnZXhTdHJpbmc6ZX19KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoRWQpLEMoWHYpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJyZWdleC1lZGl0LWRpYWxvZyJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJyZWdleFN0cmluZyIsImNvbG9yUnVuUGFpckxpc3QiLCJvblNhdmUiLCJyZWdleElucHV0T25DaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInJlZ2V4LWVkaXQtZGlhbG9nLWNvbXBvbmVudCIsMCksSSgib25TYXZlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNhdmUobyl9KSgicmVnZXhJbnB1dE9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4SW5wdXRPbkNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksZygpKSwyJmUmJl8oInJlZ2V4U3RyaW5nIixXKDEsMixpLmdyb3VwQnlSZWdleFN0cmluZyQpKSgiY29sb3JSdW5QYWlyTGlzdCIsVygyLDQsaS5jb2xvclJ1blBhaXJMaXN0JCkpfSxkZXBlbmRlbmNpZXM6W3luZSxjdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSwgcmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfSJdfSksbn0pKCk7ZnVuY3Rpb24gcDRlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiwxNCl9ZnVuY3Rpb24gZjRlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwxMyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KCk7cmV0dXJuIFEoci5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OnIuR3JvdXBCeUtleS5FWFBFUklNRU5UfSkpfSksUygxLHA0ZSwxLDAsIm1hdC1pY29uIiw3KSxoKDIsInNwYW4iKSxUKDMsIkV4cGVyaW1lbnQiKSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtCZSgiYXJpYS1jaGVja2VkIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCksdigxKSxfKCJuZ0lmIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCl9fWZ1bmN0aW9uIG00ZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGg0ZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGc0ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLGJ0KGUucmVnZXhTdHJpbmcpfX1mdW5jdGlvbiBfNGUobix0KXsxJm4mJihoKDAsInNwYW4iLDE1KSxUKDEsIihub25lIHNldCkiKSxnKCkpfXZhciBDbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpYWxvZz1lLHRoaXMuR3JvdXBCeUtleT1ZaSx0aGlzLm9uR3JvdXBCeUNoYW5nZT1uZXcgRn1vblJlZ2V4U3RyaW5nRWRpdCgpe3RoaXMuZGlhbG9nLm9wZW4oeG5lLHttYXhIZWlnaHQ6Ijk1dmgiLG1heFdpZHRoOiI4MHZ3IixkYXRhOntleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc319KX1vbkdyb3VwQnlSZWdleENsaWNrKCl7dGhpcy5yZWdleFN0cmluZz90aGlzLm9uR3JvdXBCeUNoYW5nZS5lbWl0KHtrZXk6WWkuUkVHRVgscmVnZXhTdHJpbmc6dGhpcy5yZWdleFN0cmluZ30pOnRoaXMub25SZWdleFN0cmluZ0VkaXQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh6bCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50Il1dLGlucHV0czp7c2hvd0V4cGVyaW1lbnRzR3JvdXBCeToic2hvd0V4cGVyaW1lbnRzR3JvdXBCeSIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIscmVnZXhTdHJpbmc6InJlZ2V4U3RyaW5nIixzZWxlY3RlZEdyb3VwQnk6InNlbGVjdGVkR3JvdXBCeSJ9LG91dHB1dHM6e29uR3JvdXBCeUNoYW5nZToib25Hcm91cEJ5Q2hhbmdlIn0sZGVjbHM6MTksdmFyczo4LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNvbG9yIHJ1bnMgYnkuLi4iLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIl0sWyJzdmdJY29uIiwicGFsZXR0ZV8yNHB4Il0sWzEsInJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSJdLFsiZ3JvdXBCeU1lbnUiLCJtYXRNZW51Il0sWzEsImxhYmVsIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJydW4iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZG9uZV8yNHB4Iiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwicmVnZXgiLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtIiwiZGF0YS12YWx1ZSIsInJlZ2V4LWVkaXQiLDEsImRpc3BsYXktcmVnZXgtc3RyaW5nIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImVkaXRfMjRweCJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vbmUtc2V0LXN0cmluZyIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsImV4cGVyaW1lbnQiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZG9uZV8yNHB4Il0sWzEsIm5vbmUtc2V0LXN0cmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiYnV0dG9uIiwwKSxQKDEsIm1hdC1pY29uIiwxKSxnKCksaCgyLCJtYXQtbWVudSIsMiwzKSg0LCJkaXYiLDQpLFQoNSwiQ29sb3IgcnVucyBieSIpLGcoKSxTKDYsZjRlLDQsMiwiYnV0dG9uIiw1KSxoKDcsImJ1dHRvbiIsNiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTppLkdyb3VwQnlLZXkuUlVOfSl9KSxTKDgsbTRlLDEsMCwibWF0LWljb24iLDcpLGgoOSwic3BhbiIpLFQoMTAsIlJ1biIpLGcoKSgpLGgoMTEsImJ1dHRvbiIsOCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEJ5UmVnZXhDbGljaygpfSksUygxMixoNGUsMSwwLCJtYXQtaWNvbiIsNyksaCgxMywic3BhbiIpLFQoMTQsIlJlZ2V4IiksZygpKCksaCgxNSwiYnV0dG9uIiw5KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlZ2V4U3RyaW5nRWRpdCgpfSksUCgxNiwibWF0LWljb24iLDEwKSxTKDE3LGc0ZSwyLDEsInNwYW4iLDExKSxTKDE4LF80ZSwyLDAsInNwYW4iLDEyKSxnKCkoKSksMiZlJiYoXygibWF0TWVudVRyaWdnZXJGb3IiLGl0KDMpKSx2KDYpLF8oIm5nSWYiLGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSksdigxKSxCZSgiYXJpYS1jaGVja2VkIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUlVOKSx2KDEpLF8oIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SVU4pLHYoMyksQmUoImFyaWEtY2hlY2tlZCIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYKSx2KDEpLF8oIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SRUdFWCksdig1KSxfKCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSx2KDEpLF8oIm5nSWYiLCFpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbRmUsJGksRW4sTmMsamwsTGNdLHN0eWxlczpbIi5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnl7Zm9udC1zaXplOjE2cHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5sYWJlbHtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtO21hcmdpbjoxMHB4IDA7cGFkZGluZzowIDE2cHg7cG9pbnRlci1ldmVudHM6bm9uZX0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgbWF0LWljb257aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5ne3BhZGRpbmctbGVmdDo0MHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZywgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksX0E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zaG93RXhwZXJpbWVudHNHcm91cEJ5JD10aGlzLnN0b3JlLnNlbGVjdChHOCkucGlwZShOKGk9PmkuaGFzKHduLkNPTVBBUkVfRVhQRVJJTUVOVCkpKSx0aGlzLnNlbGVjdGVkR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoSFcpLHRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJD10aGlzLnN0b3JlLnNlbGVjdCh2MSl9b25Hcm91cEJ5Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSGgoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iXV0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIn0sZGVjbHM6NCx2YXJzOjEwLGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwic2VsZWN0ZWRHcm91cEJ5Iiwic2hvd0V4cGVyaW1lbnRzR3JvdXBCeSIsImV4cGVyaW1lbnRJZHMiLCJvbkdyb3VwQnlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50IiwwKSxJKCJvbkdyb3VwQnlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uR3JvdXBCeUNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGcoKSksMiZlJiZfKCJyZWdleFN0cmluZyIsVygxLDQsaS5ncm91cEJ5UmVnZXhTdHJpbmckKSkoInNlbGVjdGVkR3JvdXBCeSIsVygyLDYsaS5zZWxlY3RlZEdyb3VwQnkkKSkoInNob3dFeHBlcmltZW50c0dyb3VwQnkiLFcoMyw4LGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQpKSgiZXhwZXJpbWVudElkcyIsaS5leHBlcmltZW50SWRzKX0sZGVwZW5kZW5jaWVzOltDbmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHY0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIpKDEsIm1hdC1jaGVja2JveCIsMTUpLEkoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMykuaGFuZGxlU2VsZWN0QWxsKHIpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygzKTt2KDEpLF8oImNoZWNrZWQiLGUuYWxsUm93c1NlbGVjdGVkKCkpKCJpbmRldGVybWluYXRlIiwhZS5hbGxSb3dzU2VsZWN0ZWQoKSYmZS5zb21lUm93c1NlbGVjdGVkKCkpfX1mdW5jdGlvbiB5NGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDE2KSxQKDEsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iLDE3KSxnKCkpLDImbil7bGV0IGU9dygzKTt2KDEpLF8oImV4cGVyaW1lbnRJZHMiLGUuZXhwZXJpbWVudElkcyl9fXZhciB3bmU9ZnVuY3Rpb24obil7cmV0dXJuW25dfTtmdW5jdGlvbiB4NGUobix0KXtpZigxJm4mJihoKDAsInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDExKSxPdCgxLDEyKSxTKDIsdjRlLDIsMiwiZGl2IiwxMyksUygzLHk0ZSwyLDEsInNwYW4iLDE0KSxrdCgpLGcoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygpO18oImhlYWRlciIsZSkoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgiaHBhcmFtc0VuYWJsZWQiLCEwKSgibmdDbGFzcyIsSW4oNyx3bmUsInRhYmxlLWNvbHVtbi0iK2UubmFtZSkpLHYoMSksXygibmdTd2l0Y2giLGUubmFtZSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLCJzZWxlY3RlZCIpLHYoMSksXygibmdTd2l0Y2hDYXNlIiwiY29sb3IiKX19ZnVuY3Rpb24gQzRlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLHg0ZSw0LDksInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDEwKSxrdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3YoMSksXygibmdJZiIsZS5lbmFibGVkKX19ZnVuY3Rpb24gTTRlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwic3BhbiIsMjEpKDEsImJ1dHRvbiIsMjIpLEkoImNvbG9yUGlja2VyQ2hhbmdlIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMykuJGltcGxpY2l0O3JldHVybiBRKHcoKS5vblJ1bkNvbG9yQ2hhbmdlLmVtaXQoe3J1bklkOm8uaWQsbmV3Q29sb3I6cn0pKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygzKS4kaW1wbGljaXQ7digxKSxUdCgiYmFja2dyb3VuZCIsZS5jb2xvciksXygiY29sb3JQaWNrZXIiLGUuY29sb3IpKCJjcERpYWxvZ0Rpc3BsYXkiLCJwb3B1cCIpKCJjcFBvc2l0aW9uT2Zmc2V0IiwtMjApKCJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIiwhMCkoImNwT3V0cHV0Rm9ybWF0IiwiaGV4Iil9fWZ1bmN0aW9uIHc0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIpKDEsIm1hdC1jaGVja2JveCIsMjMpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMykuJGltcGxpY2l0O3JldHVybiBRKHcoKS5zZWxlY3Rpb25DbGljayhyLG8uaWQpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygzKS4kaW1wbGljaXQ7digxKSxfKCJjaGVja2VkIixlLnNlbGVjdGVkKX19ZnVuY3Rpb24gUzRlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiksUCgxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwyNCksZygpKSwyJm4pe2xldCBlPXcoMykuJGltcGxpY2l0O3YoMSksXygiYWxpYXMiLGUuZXhwZXJpbWVudEFsaWFzKX19ZnVuY3Rpb24gRTRlKG4sdCl7aWYoMSZuJiYoaCgwLCJ0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbCIsMTkpLE90KDEsMTIpLFMoMixNNGUsMiw3LCJzcGFuIiwyMCksUygzLHc0ZSwyLDEsImRpdiIsMTMpLFMoNCxTNGUsMiwxLCJzcGFuIiwxMyksa3QoKSxnKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoKS4kaW1wbGljaXQ7XygiaGVhZGVyIixlKSgiZGF0dW0iLGlbZS5uYW1lXSkoIm5nQ2xhc3MiLEluKDcsd25lLCJ0YWJsZS1jb2x1bW4tIitlLm5hbWUpKSx2KDEpLF8oIm5nU3dpdGNoIixlLm5hbWUpLHYoMSksXygibmdTd2l0Y2hDYXNlIiwiY29sb3IiKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsInNlbGVjdGVkIiksdigxKSxfKCJuZ1N3aXRjaENhc2UiLCJleHBlcmltZW50QWxpYXMiKX19ZnVuY3Rpb24gVDRlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLEU0ZSw1LDksInRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsIiwxOCksa3QoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt2KDEpLF8oIm5nSWYiLGUuZW5hYmxlZCl9fWZ1bmN0aW9uIEQ0ZShuLHQpe2lmKDEmbiYmKE90KDApLGgoMSwidGItZGF0YS10YWJsZS1jb250ZW50LXJvdyIpLFMoMixUNGUsMiwxLCJuZy1jb250YWluZXIiLDUpLGcoKSxrdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO3YoMSksQmUoImRhdGEtaWQiLGUuaWQpLHYoMSksXygibmdGb3JPZiIsaS5nZXRIZWFkZXJzKCkpfX12YXIgSTRlPWZ1bmN0aW9uKG4pe3JldHVybnsiZnVsbC1zY3JlZW4iOm59fSxTbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuQ29sdW1uSGVhZGVyVHlwZT1odCx0aGlzLnNvcnREYXRhQnk9bmV3IEYsdGhpcy5vcmRlckNvbHVtbnM9bmV3IEYsdGhpcy5vblNlbGVjdGlvblRvZ2dsZT1uZXcgRix0aGlzLm9uQWxsU2VsZWN0aW9uVG9nZ2xlPW5ldyBGLHRoaXMub25SZWdleEZpbHRlckNoYW5nZT1uZXcgRix0aGlzLnRvZ2dsZUZ1bGxTY3JlZW49bmV3IEYsdGhpcy5vblJ1bkNvbG9yQ2hhbmdlPW5ldyBGLHRoaXMuYWRkQ29sdW1uPW5ldyBGLHRoaXMucmVtb3ZlQ29sdW1uPW5ldyBGLHRoaXMub25TZWxlY3Rpb25EYmxDbGljaz1uZXcgRix0aGlzLmFkZEZpbHRlcj1uZXcgRix0aGlzLmJlZm9yZUNvbHVtbnM9W3tuYW1lOiJzZWxlY3RlZCIsZGlzcGxheU5hbWU6IiIsdHlwZTpodC5DVVNUT00sZW5hYmxlZDohMH1dLHRoaXMuYWZ0ZXJDb2x1bW5zPVt7bmFtZToiY29sb3IiLGRpc3BsYXlOYW1lOiIiLHR5cGU6aHQuQ09MT1IsZW5hYmxlZDohMH1dfWdldEhlYWRlcnMoKXtyZXR1cm5bXS5jb25jYXQodGhpcy5iZWZvcmVDb2x1bW5zLHRoaXMuaGVhZGVycyx0aGlzLmFmdGVyQ29sdW1ucyl9c2VsZWN0aW9uQ2xpY2soZSxpKXtlLnByZXZlbnREZWZhdWx0KCksMT09PWUuZGV0YWlsJiZ0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQoaSksMj09PWUuZGV0YWlsJiZ0aGlzLm9uU2VsZWN0aW9uRGJsQ2xpY2suZW1pdChpKX1hbGxSb3dzU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5kYXRhPy5ldmVyeShlPT5lLnNlbGVjdGVkKX1zb21lUm93c1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMuZGF0YT8uc29tZShlPT5lLnNlbGVjdGVkKX1oYW5kbGVTZWxlY3RBbGwoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMub25BbGxTZWxlY3Rpb25Ub2dnbGUuZW1pdCh0aGlzLmRhdGE/Lm1hcChpPT5pLmlkKSl9b25GaWx0ZXJLZXlVcChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtZGF0YS10YWJsZSJdXSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLGRhdGE6ImRhdGEiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIscmVnZXhGaWx0ZXI6InJlZ2V4RmlsdGVyIixpc0Z1bGxTY3JlZW46ImlzRnVsbFNjcmVlbiIsc2VsZWN0YWJsZUNvbHVtbnM6InNlbGVjdGFibGVDb2x1bW5zIixsb2FkaW5nOiJsb2FkaW5nIixjb2x1bW5GaWx0ZXJzOiJjb2x1bW5GaWx0ZXJzIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMiLG9uU2VsZWN0aW9uVG9nZ2xlOiJvblNlbGVjdGlvblRvZ2dsZSIsb25BbGxTZWxlY3Rpb25Ub2dnbGU6Im9uQWxsU2VsZWN0aW9uVG9nZ2xlIixvblJlZ2V4RmlsdGVyQ2hhbmdlOiJvblJlZ2V4RmlsdGVyQ2hhbmdlIix0b2dnbGVGdWxsU2NyZWVuOiJ0b2dnbGVGdWxsU2NyZWVuIixvblJ1bkNvbG9yQ2hhbmdlOiJvblJ1bkNvbG9yQ2hhbmdlIixhZGRDb2x1bW46ImFkZENvbHVtbiIscmVtb3ZlQ29sdW1uOiJyZW1vdmVDb2x1bW4iLG9uU2VsZWN0aW9uRGJsQ2xpY2s6Im9uU2VsZWN0aW9uRGJsQ2xpY2siLGFkZEZpbHRlcjoiYWRkRmlsdGVyIn0sZGVjbHM6MTEsdmFyczoxNCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsInZhbHVlIiwia2V5dXAiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWzMsImhlYWRlcnMiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic2VsZWN0YWJsZUNvbHVtbnMiLCJjb2x1bW5GaWx0ZXJzIiwibG9hZGluZyIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiLCJhZGRDb2x1bW4iLCJyZW1vdmVDb2x1bW4iLCJhZGRGaWx0ZXIiXSxbImhlYWRlciIsIiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNvbnRlbnQiLCIiXSxbMSwiZnVsbC1zY3JlZW4tdG9nZ2xlIiwzLCJuZ0NsYXNzIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJmdWxsLXNjcmVlbi1idG4iLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsxLCJleHBhbmQtY29sbGFwc2UtaWNvbiIsMywic3ZnSWNvbiJdLFszLCJoZWFkZXIiLCJzb3J0aW5nSW5mbyIsImhwYXJhbXNFbmFibGVkIiwibmdDbGFzcyIsNCwibmdJZiJdLFszLCJoZWFkZXIiLCJzb3J0aW5nSW5mbyIsImhwYXJhbXNFbmFibGVkIiwibmdDbGFzcyJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZ3JvdXAtbWVudS1jb250YWluZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNsaWNrIl0sWzEsImdyb3VwLW1lbnUtY29udGFpbmVyIl0sWzMsImV4cGVyaW1lbnRJZHMiXSxbMywiaGVhZGVyIiwiZGF0dW0iLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWzMsImhlYWRlciIsImRhdHVtIiwibmdDbGFzcyJdLFsiY2xhc3MiLCJjb2xvci1jb250YWluZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJjb2xvci1jb250YWluZXIiXSxbMSwicnVuLWNvbG9yLXN3YXRjaCIsMywiY29sb3JQaWNrZXIiLCJjcERpYWxvZ0Rpc3BsYXkiLCJjcFBvc2l0aW9uT2Zmc2V0IiwiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsImNwT3V0cHV0Rm9ybWF0IiwiY29sb3JQaWNrZXJDaGFuZ2UiXSxbMywiY2hlY2tlZCIsImNsaWNrIl0sWzMsImFsaWFzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApKDEsInRiLWZpbHRlci1pbnB1dCIsMSksSSgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmlsdGVyS2V5VXAobyl9KSxnKCkoKSxoKDIsImRpdiIsMikoMywidGItZGF0YS10YWJsZSIsMyksSSgic29ydERhdGFCeSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc29ydERhdGFCeS5lbWl0KG8pfSkoIm9yZGVyQ29sdW1ucyIsZnVuY3Rpb24obyl7cmV0dXJuIGkub3JkZXJDb2x1bW5zLmVtaXQobyl9KSgiYWRkQ29sdW1uIixmdW5jdGlvbihvKXtyZXR1cm4gaS5hZGRDb2x1bW4uZW1pdChvKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbW92ZUNvbHVtbi5lbWl0KG8pfSkoImFkZEZpbHRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuYWRkRmlsdGVyLmVtaXQobyl9KSxPdCg0LDQpLFMoNSxDNGUsMiwxLCJuZy1jb250YWluZXIiLDUpLGt0KCksT3QoNiw2KSxTKDcsRDRlLDMsMiwibmctY29udGFpbmVyIiw1KSxrdCgpLGcoKSgpLGgoOCwiZGl2Iiw3KSg5LCJidXR0b24iLDgpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZUZ1bGxTY3JlZW4uZW1pdCgpfSksUCgxMCwibWF0LWljb24iLDkpLGcoKSgpKSwyJmUmJih2KDEpLFdpKCJ2YWx1ZSIsaS5yZWdleEZpbHRlciksdigyKSxfKCJoZWFkZXJzIixpLmhlYWRlcnMpKCJzb3J0aW5nSW5mbyIsaS5zb3J0aW5nSW5mbykoImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwhMCkoInNlbGVjdGFibGVDb2x1bW5zIixpLnNlbGVjdGFibGVDb2x1bW5zKSgiY29sdW1uRmlsdGVycyIsaS5jb2x1bW5GaWx0ZXJzKSgibG9hZGluZyIsaS5sb2FkaW5nKSx2KDIpLF8oIm5nRm9yT2YiLGkuZ2V0SGVhZGVycygpKSx2KDIpLF8oIm5nRm9yT2YiLGkuZGF0YSksdigxKSxfKCJuZ0NsYXNzIixJbigxMixJNGUsaS5pc0Z1bGxTY3JlZW4pKSx2KDEpLF8oIm5nQ2xhc3MiLGkuaXNGdWxsU2NyZWVuPyJjb2xsYXBzZSI6ImV4cGFuZCIpLHYoMSksXygic3ZnSWNvbiIsaS5pc0Z1bGxTY3JlZW4/ImFycm93X2JhY2tfMjRweCI6ImFycm93X2ZvcndhcmRfMjRweCIpKX0sZGVwZW5kZW5jaWVzOltnQSx5bixubixGZSxzcixTcixkXyxzQSx1QSx1XyxRdSxTcCxKaSxoYSxFbixfQV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV17b3ZlcmZsb3cteTphdXRvO3dpZHRoOjEwMCV9LmNvbG9yLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6MTAwJX0ucnVuLWNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O291dGxpbmU6bm9uZX0uZ3JvdXAtbWVudS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9dGItZGF0YS10YWJsZS1jb250ZW50LXJvd1tfbmdjb250ZW50LSVDT01QJV0sIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo0OHB4fXRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGItZGF0YS10YWJsZS1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIDRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fXRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxkLCB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgdGItZGF0YS10YWJsZS1jb250ZW50LWNlbGxbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGQsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fXRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGItZGF0YS10YWJsZS1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1vZi10eXBlLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LW9mLXR5cGV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fS50YWJsZS1jb2x1bW4tc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVdLCAudGFibGUtY29sdW1uLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo0MHB4fS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MTAwJTtsZWZ0OmNhbGMoMTAwJSArIDJweCk7dG9wOjA7ei1pbmRleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmZ1bGwtc2NyZWVuLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3BhY2l0eTouOH0uZnVsbC1zY3JlZW4tdG9nZ2xlLmZ1bGwtc2NyZWVuW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OnVuc2V0O3JpZ2h0OjB9LmZ1bGwtc2NyZWVuLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuZnVsbC1zY3JlZW4tYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmdyYXk7cGFkZGluZzowO21pbi13aWR0aDoxNnB4O3dpZHRoOjE2cHh9LmZ1bGwtc2NyZWVuLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuZnVsbC1zY3JlZW4tYnRuLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czowIDE2cHggMTZweCAwfS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmZ1bGwtc2NyZWVuLWJ0bi5jb2xsYXBzZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxNnB4IDAgMCAxNnB4fS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmZ1bGwtc2NyZWVuLWJ0bltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kLWNvbGxhcHNlLWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4O3dpZHRoOjE2cHh9LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6NDhweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgdGItZmlsdGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWxlZnQ6MTZweDtmbGV4LWdyb3c6MX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy14OmF1dG99Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxSNGU9WyJ0b29sdGlwIl0sRG5lPW5ldyBpZSgibWF0LXRvb2x0aXAtc2Nyb2xsLXN0cmF0ZWd5IiksazRlPXtwcm92aWRlOkRuZSxkZXBzOlt6aV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oe3Njcm9sbFRocm90dGxlOjIwfSl9fSxONGU9bmV3IGllKCJtYXQtdG9vbHRpcC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue3Nob3dEZWxheTowLGhpZGVEZWxheTowLHRvdWNoZW5kSGlkZURlbGF5OjE1MDB9fX0pLEVuZT0idG9vbHRpcC1wYW5lbCIsVG5lPXFvKHtwYXNzaXZlOiEwfSksVTRlPSgoKT0+e2NsYXNzIG57Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihlKXtlIT09dGhpcy5fcG9zaXRpb24mJih0aGlzLl9wb3NpdGlvbj1lLHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl90b29sdGlwSW5zdGFuY2U/LnNob3coMCksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpKSl9Z2V0IHBvc2l0aW9uQXRPcmlnaW4oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25BdE9yaWdpbn1zZXQgcG9zaXRpb25BdE9yaWdpbihlKXt0aGlzLl9wb3NpdGlvbkF0T3JpZ2luPVJ0KGUpLHRoaXMuX2RldGFjaCgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVJ0KGUpLHRoaXMuX2Rpc2FibGVkP3RoaXMuaGlkZSgwKTp0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCl9Z2V0IHNob3dEZWxheSgpe3JldHVybiB0aGlzLl9zaG93RGVsYXl9c2V0IHNob3dEZWxheShlKXt0aGlzLl9zaG93RGVsYXk9X2koZSl9Z2V0IGhpZGVEZWxheSgpe3JldHVybiB0aGlzLl9oaWRlRGVsYXl9c2V0IGhpZGVEZWxheShlKXt0aGlzLl9oaWRlRGVsYXk9X2koZSksdGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tb3VzZUxlYXZlSGlkZURlbGF5PXRoaXMuX2hpZGVEZWxheSl9Z2V0IG1lc3NhZ2UoKXtyZXR1cm4gdGhpcy5fbWVzc2FnZX1zZXQgbWVzc2FnZShlKXt0aGlzLl9hcmlhRGVzY3JpYmVyLnJlbW92ZURlc2NyaXB0aW9uKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLl9tZXNzYWdlLCJ0b29sdGlwIiksdGhpcy5fbWVzc2FnZT1udWxsIT1lP1N0cmluZyhlKS50cmltKCk6IiIsIXRoaXMuX21lc3NhZ2UmJnRoaXMuX2lzVG9vbHRpcFZpc2libGUoKT90aGlzLmhpZGUoMCk6KHRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKSx0aGlzLl91cGRhdGVUb29sdGlwTWVzc2FnZSgpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9hcmlhRGVzY3JpYmVyLmRlc2NyaWJlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKX0pfSkpfWdldCB0b29sdGlwQ2xhc3MoKXtyZXR1cm4gdGhpcy5fdG9vbHRpcENsYXNzfXNldCB0b29sdGlwQ2xhc3MoZSl7dGhpcy5fdG9vbHRpcENsYXNzPWUsdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl9zZXRUb29sdGlwQ2xhc3ModGhpcy5fdG9vbHRpcENsYXNzKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsZCx1LHAsZil7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXIsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1vLHRoaXMuX25nWm9uZT1zLHRoaXMuX3BsYXRmb3JtPWEsdGhpcy5fYXJpYURlc2NyaWJlcj1sLHRoaXMuX2ZvY3VzTW9uaXRvcj1jLHRoaXMuX2Rpcj11LHRoaXMuX2RlZmF1bHRPcHRpb25zPXAsdGhpcy5fcG9zaXRpb249ImJlbG93Iix0aGlzLl9wb3NpdGlvbkF0T3JpZ2luPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3ZpZXdJbml0aWFsaXplZD0hMSx0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTgsdGhpcy5fY3NzQ2xhc3NQcmVmaXg9Im1hdCIsdGhpcy5fc2hvd0RlbGF5PXRoaXMuX2RlZmF1bHRPcHRpb25zLnNob3dEZWxheSx0aGlzLl9oaWRlRGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGlkZURlbGF5LHRoaXMudG91Y2hHZXN0dXJlcz0iYXV0byIsdGhpcy5fbWVzc2FnZT0iIix0aGlzLl9wYXNzaXZlTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD1uZXcgSWUsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9ZCx0aGlzLl9kb2N1bWVudD1mLHAmJihwLnBvc2l0aW9uJiYodGhpcy5wb3NpdGlvbj1wLnBvc2l0aW9uKSxwLnBvc2l0aW9uQXRPcmlnaW4mJih0aGlzLnBvc2l0aW9uQXRPcmlnaW49cC5wb3NpdGlvbkF0T3JpZ2luKSxwLnRvdWNoR2VzdHVyZXMmJih0aGlzLnRvdWNoR2VzdHVyZXM9cC50b3VjaEdlc3R1cmVzKSksdS5jaGFuZ2UucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3ZpZXdJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZikucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZT0+e2U/ImtleWJvYXJkIj09PWUmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuc2hvdygpKTp0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpfSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGwpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMuZm9yRWFjaCgoW2kscl0pPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscixUbmUpfSksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGg9MCx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24oZSx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcoZSl9c2hvdyhlPXRoaXMuc2hvd0RlbGF5LGkpe2lmKHRoaXMuZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSlyZXR1cm4gdm9pZCB0aGlzLl90b29sdGlwSW5zdGFuY2U/Ll9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpO2xldCByPXRoaXMuX2NyZWF0ZU92ZXJsYXkoaSk7dGhpcy5fZGV0YWNoKCksdGhpcy5fcG9ydGFsPXRoaXMuX3BvcnRhbHx8bmV3IFZsKHRoaXMuX3Rvb2x0aXBDb21wb25lbnQsdGhpcy5fdmlld0NvbnRhaW5lclJlZik7bGV0IG89dGhpcy5fdG9vbHRpcEluc3RhbmNlPXIuYXR0YWNoKHRoaXMuX3BvcnRhbCkuaW5zdGFuY2U7by5fdHJpZ2dlckVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LG8uX21vdXNlTGVhdmVIaWRlRGVsYXk9dGhpcy5faGlkZURlbGF5LG8uYWZ0ZXJIaWRkZW4oKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fZGV0YWNoKCkpLHRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksby5zaG93KGUpfWhpZGUoZT10aGlzLmhpZGVEZWxheSl7bGV0IGk9dGhpcy5fdG9vbHRpcEluc3RhbmNlO2kmJihpLmlzVmlzaWJsZSgpP2kuaGlkZShlKTooaS5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKSx0aGlzLl9kZXRhY2goKSkpfXRvZ2dsZShlKXt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KHZvaWQgMCxlKX1faXNUb29sdGlwVmlzaWJsZSgpe3JldHVybiEhdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCl9X2NyZWF0ZU92ZXJsYXkoZSl7aWYodGhpcy5fb3ZlcmxheVJlZil7bGV0IG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5wb3NpdGlvblN0cmF0ZWd5O2lmKCghdGhpcy5wb3NpdGlvbkF0T3JpZ2lufHwhZSkmJm8uX29yaWdpbiBpbnN0YW5jZW9mIE1lKXJldHVybiB0aGlzLl9vdmVybGF5UmVmO3RoaXMuX2RldGFjaCgpfWxldCBpPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuX2VsZW1lbnRSZWYpLHI9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5wb3NpdGlvbkF0T3JpZ2luJiZlfHx0aGlzLl9lbGVtZW50UmVmKS53aXRoVHJhbnNmb3JtT3JpZ2luT24oYC4ke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS10b29sdGlwYCkud2l0aEZsZXhpYmxlRGltZW5zaW9ucyghMSkud2l0aFZpZXdwb3J0TWFyZ2luKHRoaXMuX3ZpZXdwb3J0TWFyZ2luKS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnMoaSk7cmV0dXJuIHIucG9zaXRpb25DaGFuZ2VzLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKG89Pnt0aGlzLl91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhvLmNvbm5lY3Rpb25QYWlyKSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJm8uc2Nyb2xsYWJsZVZpZXdQcm9wZXJ0aWVzLmlzT3ZlcmxheUNsaXBwZWQmJnRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKSYmdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKX0pLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUoe2RpcmVjdGlvbjp0aGlzLl9kaXIscG9zaXRpb25TdHJhdGVneTpyLHBhbmVsQ2xhc3M6YCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LSR7RW5lfWAsc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKX0pLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKHRoaXMuX292ZXJsYXlSZWYpLHRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fZGV0YWNoKCkpLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fdG9vbHRpcEluc3RhbmNlPy5faGFuZGxlQm9keUludGVyYWN0aW9uKCkpLHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKG89Pnt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJjI3PT09by5rZXlDb2RlJiYhdnIobykmJihvLnByZXZlbnREZWZhdWx0KCksby5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpKX0pLHRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlVG9vbHRpcEludGVyYWN0aXZpdHkmJnRoaXMuX292ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyhgJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcC1wYW5lbC1ub24taW50ZXJhY3RpdmVgKSx0aGlzLl9vdmVybGF5UmVmfV9kZXRhY2goKXt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGx9X3VwZGF0ZVBvc2l0aW9uKGUpe2xldCBpPWUuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSxyPXRoaXMuX2dldE9yaWdpbigpLG89dGhpcy5fZ2V0T3ZlcmxheVBvc2l0aW9uKCk7aS53aXRoUG9zaXRpb25zKFt0aGlzLl9hZGRPZmZzZXQoey4uLnIubWFpbiwuLi5vLm1haW59KSx0aGlzLl9hZGRPZmZzZXQoey4uLnIuZmFsbGJhY2ssLi4uby5mYWxsYmFja30pXSl9X2FkZE9mZnNldChlKXtyZXR1cm4gZX1fZ2V0T3JpZ2luKCl7bGV0IHIsZT0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlLGk9dGhpcy5wb3NpdGlvbjsiYWJvdmUiPT1pfHwiYmVsb3ciPT1pP3I9e29yaWdpblg6ImNlbnRlciIsb3JpZ2luWToiYWJvdmUiPT1pPyJ0b3AiOiJib3R0b20ifToiYmVmb3JlIj09aXx8ImxlZnQiPT1pJiZlfHwicmlnaHQiPT1pJiYhZT9yPXtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiY2VudGVyIn06KCJhZnRlciI9PWl8fCJyaWdodCI9PWkmJmV8fCJsZWZ0Ij09aSYmIWUpJiYocj17b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJjZW50ZXIifSk7bGV0e3g6byx5OnN9PXRoaXMuX2ludmVydFBvc2l0aW9uKHIub3JpZ2luWCxyLm9yaWdpblkpO3JldHVybnttYWluOnIsZmFsbGJhY2s6e29yaWdpblg6byxvcmlnaW5ZOnN9fX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IHIsZT0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlLGk9dGhpcy5wb3NpdGlvbjsiYWJvdmUiPT1pP3I9e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJib3R0b20ifToiYmVsb3ciPT1pP3I9e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJ0b3AifToiYmVmb3JlIj09aXx8ImxlZnQiPT1pJiZlfHwicmlnaHQiPT1pJiYhZT9yPXtvdmVybGF5WDoiZW5kIixvdmVybGF5WToiY2VudGVyIn06KCJhZnRlciI9PWl8fCJyaWdodCI9PWkmJmV8fCJsZWZ0Ij09aSYmIWUpJiYocj17b3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiY2VudGVyIn0pO2xldHt4Om8seTpzfT10aGlzLl9pbnZlcnRQb3NpdGlvbihyLm92ZXJsYXlYLHIub3ZlcmxheVkpO3JldHVybnttYWluOnIsZmFsbGJhY2s6e292ZXJsYXlYOm8sb3ZlcmxheVk6c319fV91cGRhdGVUb29sdGlwTWVzc2FnZSgpe3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5tZXNzYWdlPXRoaXMubWVzc2FnZSx0aGlzLl90b29sdGlwSW5zdGFuY2UuX21hcmtGb3JDaGVjaygpLHRoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoWXQoMSksb3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSl9X3NldFRvb2x0aXBDbGFzcyhlKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UudG9vbHRpcENsYXNzPWUsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSl9X2ludmVydFBvc2l0aW9uKGUsaSl7cmV0dXJuImFib3ZlIj09PXRoaXMucG9zaXRpb258fCJiZWxvdyI9PT10aGlzLnBvc2l0aW9uPyJ0b3AiPT09aT9pPSJib3R0b20iOiJib3R0b20iPT09aSYmKGk9InRvcCIpOiJlbmQiPT09ZT9lPSJzdGFydCI6InN0YXJ0Ij09PWUmJihlPSJlbmQiKSx7eDplLHk6aX19X3VwZGF0ZUN1cnJlbnRQb3NpdGlvbkNsYXNzKGUpe2xldCBzLHtvdmVybGF5WTppLG9yaWdpblg6cixvcmlnaW5ZOm99PWU7aWYocz0iY2VudGVyIj09PWk/dGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8iZW5kIj09PXI/ImxlZnQiOiJyaWdodCI6InN0YXJ0Ij09PXI/ImxlZnQiOiJyaWdodCI6ImJvdHRvbSI9PT1pJiYidG9wIj09PW8/ImFib3ZlIjoiYmVsb3ciLHMhPT10aGlzLl9jdXJyZW50UG9zaXRpb24pe2xldCBhPXRoaXMuX292ZXJsYXlSZWY7aWYoYSl7bGV0IGw9YCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LSR7RW5lfS1gO2EucmVtb3ZlUGFuZWxDbGFzcyhsK3RoaXMuX2N1cnJlbnRQb3NpdGlvbiksYS5hZGRQYW5lbENsYXNzKGwrcyl9dGhpcy5fY3VycmVudFBvc2l0aW9uPXN9fV9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCl7dGhpcy5fZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fCF0aGlzLl92aWV3SW5pdGlhbGl6ZWR8fHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMubGVuZ3RofHwodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCk/dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFsibW91c2VlbnRlciIsZT0+e2xldCBpO3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLHZvaWQgMCE9PWUueCYmdm9pZCAwIT09ZS55JiYoaT1lKSx0aGlzLnNob3codm9pZCAwLGkpfV0pOiJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzJiYodGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goWyJ0b3VjaHN0YXJ0IixlPT57bGV0IGk9ZS50YXJnZXRUb3VjaGVzPy5bMF0scj1pP3t4OmkuY2xpZW50WCx5OmkuY2xpZW50WX06dm9pZCAwO3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLGNsZWFyVGltZW91dCh0aGlzLl90b3VjaHN0YXJ0VGltZW91dCksdGhpcy5fdG91Y2hzdGFydFRpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5zaG93KHZvaWQgMCxyKSw1MDApfV0pKSx0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycykpfV9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKXtpZih0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkKXJldHVybjt0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSEwO2xldCBlPVtdO2lmKHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpKWUucHVzaChbIm1vdXNlbGVhdmUiLGk9PntsZXQgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHwhdGhpcy5fb3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQuY29udGFpbnMocikpJiZ0aGlzLmhpZGUoKX1dLFsid2hlZWwiLGk9PnRoaXMuX3doZWVsTGlzdGVuZXIoaSldKTtlbHNlIGlmKCJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzKXt0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpO2xldCBpPSgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnMudG91Y2hlbmRIaWRlRGVsYXkpfTtlLnB1c2goWyJ0b3VjaGVuZCIsaV0sWyJ0b3VjaGNhbmNlbCIsaV0pfXRoaXMuX2FkZExpc3RlbmVycyhlKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4uZSl9X2FkZExpc3RlbmVycyhlKXtlLmZvckVhY2goKFtpLHJdKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGkscixUbmUpfSl9X3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpe3JldHVybiF0aGlzLl9wbGF0Zm9ybS5JT1MmJiF0aGlzLl9wbGF0Zm9ybS5BTkRST0lEfV93aGVlbExpc3RlbmVyKGUpe2lmKHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLmNsaWVudFgsZS5jbGllbnRZKSxyPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpIT09ciYmIXIuY29udGFpbnMoaSkmJnRoaXMuaGlkZSgpfX1fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKXtsZXQgZT10aGlzLnRvdWNoR2VzdHVyZXM7aWYoIm9mZiIhPT1lKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQscj1pLnN0eWxlOygib24iPT09ZXx8IklOUFVUIiE9PWkubm9kZU5hbWUmJiJURVhUQVJFQSIhPT1pLm5vZGVOYW1lKSYmKHIudXNlclNlbGVjdD1yLm1zVXNlclNlbGVjdD1yLndlYmtpdFVzZXJTZWxlY3Q9ci5Nb3pVc2VyU2VsZWN0PSJub25lIiksKCJvbiI9PT1lfHwhaS5kcmFnZ2FibGUpJiYoci53ZWJraXRVc2VyRHJhZz0ibm9uZSIpLHIudG91Y2hBY3Rpb249Im5vbmUiLHIud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtJcygpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGlucHV0czp7cG9zaXRpb246WyJtYXRUb29sdGlwUG9zaXRpb24iLCJwb3NpdGlvbiJdLHBvc2l0aW9uQXRPcmlnaW46WyJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsInBvc2l0aW9uQXRPcmlnaW4iXSxkaXNhYmxlZDpbIm1hdFRvb2x0aXBEaXNhYmxlZCIsImRpc2FibGVkIl0sc2hvd0RlbGF5OlsibWF0VG9vbHRpcFNob3dEZWxheSIsInNob3dEZWxheSJdLGhpZGVEZWxheTpbIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJoaWRlRGVsYXkiXSx0b3VjaEdlc3R1cmVzOlsibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJ0b3VjaEdlc3R1cmVzIl0sbWVzc2FnZTpbIm1hdFRvb2x0aXAiLCJtZXNzYWdlIl0sdG9vbHRpcENsYXNzOlsibWF0VG9vbHRpcENsYXNzIiwidG9vbHRpcENsYXNzIl19fSksbn0pKCksSW5lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBVNGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYpe3N1cGVyKGUsaSxyLG8scyxhLGwsYyxkLHUscCxmKSx0aGlzLl90b29sdGlwQ29tcG9uZW50PUc0ZSx0aGlzLl9jc3NDbGFzc1ByZWZpeD0ibWF0LW1kYyIsdGhpcy5fdmlld3BvcnRNYXJnaW49OH1fYWRkT2Zmc2V0KGUpe2xldCByPSF0aGlzLl9kaXJ8fCJsdHIiPT10aGlzLl9kaXIudmFsdWU7cmV0dXJuInRvcCI9PT1lLm9yaWdpblk/ZS5vZmZzZXRZPS04OiJib3R0b20iPT09ZS5vcmlnaW5ZP2Uub2Zmc2V0WT04OiJzdGFydCI9PT1lLm9yaWdpblg/ZS5vZmZzZXRYPXI/LTg6ODoiZW5kIj09PWUub3JpZ2luWCYmKGUub2Zmc2V0WD1yPzg6LTgpLGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoemkpLEMoTWUpLEMoTnUpLEMoc2kpLEMoYXQpLEMoR24pLEMoTDEpLEMoWHIpLEMoRG5lKSxDKFhpLDgpLEMoTjRlLDgpLEMoTHQpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0VG9vbHRpcCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtdG9vbHRpcC10cmlnZ2VyIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl0sZmVhdHVyZXM6W0tlXX0pLG59KSgpLGo0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITEsdGhpcy5faXNWaXNpYmxlPSExLHRoaXMuX29uSGlkZT1uZXcgSWUsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSJOb29wQW5pbWF0aW9ucyI9PT1pfXNob3coZSl7Y2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX3Nob3dUaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX3RvZ2dsZVZpc2liaWxpdHkoITApLHRoaXMuX3Nob3dUaW1lb3V0SWQ9dm9pZCAwfSxlKX1oaWRlKGUpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSx0aGlzLl9oaWRlVGltZW91dElkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVWaXNpYmlsaXR5KCExKSx0aGlzLl9oaWRlVGltZW91dElkPXZvaWQgMH0sZSl9YWZ0ZXJIaWRkZW4oKXtyZXR1cm4gdGhpcy5fb25IaWRlfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl9pc1Zpc2libGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX29uSGlkZS5jb21wbGV0ZSgpLHRoaXMuX3RyaWdnZXJFbGVtZW50PW51bGx9X2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbiYmdGhpcy5oaWRlKDApfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1faGFuZGxlTW91c2VMZWF2ZSh7cmVsYXRlZFRhcmdldDplfSl7KCFlfHwhdGhpcy5fdHJpZ2dlckVsZW1lbnQuY29udGFpbnMoZSkpJiYodGhpcy5pc1Zpc2libGUoKT90aGlzLmhpZGUodGhpcy5fbW91c2VMZWF2ZUhpZGVEZWxheSk6dGhpcy5fZmluYWxpemVBbmltYXRpb24oITEpKX1fb25TaG93KCl7fV9oYW5kbGVBbmltYXRpb25FbmQoe2FuaW1hdGlvbk5hbWU6ZX0peyhlPT09dGhpcy5fc2hvd0FuaW1hdGlvbnx8ZT09PXRoaXMuX2hpZGVBbmltYXRpb24pJiZ0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlPT09dGhpcy5fc2hvd0FuaW1hdGlvbil9X2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9zaG93VGltZW91dElkPXRoaXMuX2hpZGVUaW1lb3V0SWQ9dm9pZCAwfV9maW5hbGl6ZUFuaW1hdGlvbihlKXtlP3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMDp0aGlzLmlzVmlzaWJsZSgpfHx0aGlzLl9vbkhpZGUubmV4dCgpfV90b2dnbGVWaXNpYmlsaXR5KGUpe2xldCBpPXRoaXMuX3Rvb2x0aXAubmF0aXZlRWxlbWVudCxyPXRoaXMuX3Nob3dBbmltYXRpb24sbz10aGlzLl9oaWRlQW5pbWF0aW9uO2lmKGkuY2xhc3NMaXN0LnJlbW92ZShlP286ciksaS5jbGFzc0xpc3QuYWRkKGU/cjpvKSx0aGlzLl9pc1Zpc2libGU9ZSxlJiYhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSl7bGV0IHM9Z2V0Q29tcHV0ZWRTdHlsZShpKTsoIjBzIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLWR1cmF0aW9uIil8fCJub25lIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLW5hbWUiKSkmJih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ITApfWUmJnRoaXMuX29uU2hvdygpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmKGkuY2xhc3NMaXN0LmFkZCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiKSx0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoJHQpLEMoaGksOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpufSksbn0pKCksRzRlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBqNGV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsciksdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2lzTXVsdGlsaW5lPSExLHRoaXMuX3Nob3dBbmltYXRpb249Im1hdC1tZGMtdG9vbHRpcC1zaG93Iix0aGlzLl9oaWRlQW5pbWF0aW9uPSJtYXQtbWRjLXRvb2x0aXAtaGlkZSJ9X29uU2hvdygpe3RoaXMuX2lzTXVsdGlsaW5lPXRoaXMuX2lzVG9vbHRpcE11bHRpbGluZSgpLHRoaXMuX21hcmtGb3JDaGVjaygpfV9pc1Rvb2x0aXBNdWx0aWxpbmUoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGUuaGVpZ2h0PjI0JiZlLndpZHRoPj0yMDB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoJHQpLEMoTWUpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sdGlwLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKFI0ZSw3KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLl90b29sdGlwPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsiYXJpYS1oaWRkZW4iLCJ0cnVlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZUxlYXZlKG8pfSksMiZlJiZUdCgiem9vbSIsaS5pc1Zpc2libGUoKT8xOm51bGwpfSxmZWF0dXJlczpbS2VdLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzEsIm1kYy10b29sdGlwIiwibWRjLXRvb2x0aXAtLXNob3duIiwibWF0LW1kYy10b29sdGlwIiwzLCJuZ0NsYXNzIiwiYW5pbWF0aW9uZW5kIl0sWyJ0b29sdGlwIiwiIl0sWzEsIm1kYy10b29sdGlwX19zdXJmYWNlIiwibWRjLXRvb2x0aXBfX3N1cmZhY2UtYW5pbWF0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDAsMSksSSgiYW5pbWF0aW9uZW5kIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlQW5pbWF0aW9uRW5kKG8pfSksaCgyLCJkaXYiLDIpLFQoMyksZygpKCkpLDImZSYmKG50KCJtZGMtdG9vbHRpcC0tbXVsdGlsaW5lIixpLl9pc011bHRpbGluZSksXygibmdDbGFzcyIsaS50b29sdGlwQ2xhc3MpLHYoMyksYnQoaS5tZXNzYWdlKSl9LGRlcGVuZGVuY2llczpbeW5dLHN0eWxlczpbJy5tZGMtdG9vbHRpcF9fc3VyZmFjZXt3b3JkLWJyZWFrOnZhcigtLW1kYy10b29sdGlwLXdvcmQtYnJlYWssIG5vcm1hbCk7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX0ubWRjLXRvb2x0aXB7cG9zaXRpb246Zml4ZWQ7ZGlzcGxheTpub25lO3otaW5kZXg6OX0ubWRjLXRvb2x0aXAtd3JhcHBlci0tcmljaHtwb3NpdGlvbjpyZWxhdGl2ZX0ubWRjLXRvb2x0aXAtLXNob3duLC5tZGMtdG9vbHRpcC0tc2hvd2luZywubWRjLXRvb2x0aXAtLWhpZGV7ZGlzcGxheTppbmxpbmUtZmxleH0ubWRjLXRvb2x0aXAtLXNob3duLm1kYy10b29sdGlwLS1yaWNoLC5tZGMtdG9vbHRpcC0tc2hvd2luZy5tZGMtdG9vbHRpcC0tcmljaCwubWRjLXRvb2x0aXAtLWhpZGUubWRjLXRvb2x0aXAtLXJpY2h7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGVmdDotMzIwcHg7cG9zaXRpb246YWJzb2x1dGV9Lm1kYy10b29sdGlwX19zdXJmYWNle2xpbmUtaGVpZ2h0OjE2cHg7cGFkZGluZzo0cHggOHB4O21pbi13aWR0aDo0MHB4O21heC13aWR0aDoyMDBweDttaW4taGVpZ2h0OjI0cHg7bWF4LWhlaWdodDo0MHZoO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXJ9Lm1kYy10b29sdGlwX19zdXJmYWNlOjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtdG9vbHRpcF9fc3VyZmFjZTo6YmVmb3Jle2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLXRvb2x0aXAtLXJpY2ggLm1kYy10b29sdGlwX19zdXJmYWNle2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4taGVpZ2h0OjI0cHg7bWluLXdpZHRoOjQwcHg7bWF4LXdpZHRoOjMyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tZGMtdG9vbHRpcC0tbXVsdGlsaW5lIC5tZGMtdG9vbHRpcF9fc3VyZmFjZXt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tZGMtdG9vbHRpcC0tbXVsdGlsaW5lIC5tZGMtdG9vbHRpcF9fc3VyZmFjZSwubWRjLXRvb2x0aXAtLW11bHRpbGluZSAubWRjLXRvb2x0aXBfX3N1cmZhY2VbZGlyPXJ0bF17dGV4dC1hbGlnbjpyaWdodH0ubWRjLXRvb2x0aXBfX3N1cmZhY2UgLm1kYy10b29sdGlwX190aXRsZXttYXJnaW46MCA4cHh9Lm1kYy10b29sdGlwX19zdXJmYWNlIC5tZGMtdG9vbHRpcF9fY29udGVudHttYXgtd2lkdGg6Y2FsYygyMDBweCAtICgyICogOHB4KSk7bWFyZ2luOjhweDt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tZGMtdG9vbHRpcF9fc3VyZmFjZSAubWRjLXRvb2x0aXBfX2NvbnRlbnQsLm1kYy10b29sdGlwX19zdXJmYWNlIC5tZGMtdG9vbHRpcF9fY29udGVudFtkaXI9cnRsXXt0ZXh0LWFsaWduOnJpZ2h0fS5tZGMtdG9vbHRpcC0tcmljaCAubWRjLXRvb2x0aXBfX3N1cmZhY2UgLm1kYy10b29sdGlwX19jb250ZW50e21heC13aWR0aDpjYWxjKDMyMHB4IC0gKDIgKiA4cHgpKTthbGlnbi1zZWxmOnN0cmV0Y2h9Lm1kYy10b29sdGlwX19zdXJmYWNlIC5tZGMtdG9vbHRpcF9fY29udGVudC1saW5re3RleHQtZGVjb3JhdGlvbjpub25lfS5tZGMtdG9vbHRpcC0tcmljaC1hY3Rpb25zLC5tZGMtdG9vbHRpcF9fY29udGVudCwubWRjLXRvb2x0aXBfX3RpdGxle3otaW5kZXg6MX0ubWRjLXRvb2x0aXBfX3N1cmZhY2UtYW5pbWF0aW9ue29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMC44KTt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eX0ubWRjLXRvb2x0aXAtLXNob3duIC5tZGMtdG9vbHRpcF9fc3VyZmFjZS1hbmltYXRpb257dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX0ubWRjLXRvb2x0aXAtLWhpZGUgLm1kYy10b29sdGlwX19zdXJmYWNlLWFuaW1hdGlvbnt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLXRvcCwubWRjLXRvb2x0aXBfX2NhcmV0LXN1cmZhY2UtYm90dG9te3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoyNHB4O3dpZHRoOjI0cHg7dHJhbnNmb3JtOnJvdGF0ZSgzNWRlZykgc2tld1koMjBkZWcpIHNjYWxlWCgwLjkzOTY5MjYyMDgpfS5tZGMtdG9vbHRpcF9fY2FyZXQtc3VyZmFjZS10b3AgLm1kYy1lbGV2YXRpb24tb3ZlcmxheSwubWRjLXRvb2x0aXBfX2NhcmV0LXN1cmZhY2UtYm90dG9tIC5tZGMtZWxldmF0aW9uLW92ZXJsYXl7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjB9Lm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLWJvdHRvbXtvdXRsaW5lOjFweCBzb2xpZCByZ2JhKDAsMCwwLDApO3otaW5kZXg6LTF9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLWJvdHRvbXtvdXRsaW5lLWNvbG9yOkNhbnZhc1RleHR9fS5tZGMtdG9vbHRpcF9fc3VyZmFjZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1jb2xvciwgI2ZmZil9Lm1kYy10b29sdGlwX19zdXJmYWNle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tZGMtdG9vbHRpcF9fY2FyZXQtc3VyZmFjZS10b3AsLm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLWJvdHRvbXtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWRjLXRvb2x0aXBfX3N1cmZhY2V7Y29sb3I6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LWNvbG9yLCAjMDAwKX0ubWRjLXRvb2x0aXBfX3N1cmZhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LWZvbnQsIGluaGVyaXQpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtc2l6ZSwgaW5oZXJpdCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXdlaWdodCwgaW5oZXJpdCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXRyYWNraW5nLCBpbmhlcml0KX0ubWF0LW1kYy10b29sdGlwe3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTpzY2FsZSgwKX0ubWF0LW1kYy10b29sdGlwOjpiZWZvcmV7Y29udGVudDoiIjt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4Oi0xO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLXRvb2x0aXAtcGFuZWwtYmVsb3cgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle3RvcDotOHB4fS5tYXQtbWRjLXRvb2x0aXAtcGFuZWwtYWJvdmUgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle2JvdHRvbTotOHB4fS5tYXQtbWRjLXRvb2x0aXAtcGFuZWwtcmlnaHQgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle2xlZnQ6LThweH0ubWF0LW1kYy10b29sdGlwLXBhbmVsLWxlZnQgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle3JpZ2h0Oi04cHh9Lm1hdC1tZGMtdG9vbHRpcC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXthbmltYXRpb246bm9uZTt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1hdC1tZGMtdG9vbHRpcC1wYW5lbC1ub24taW50ZXJhY3RpdmV7cG9pbnRlci1ldmVudHM6bm9uZX1Aa2V5ZnJhbWVzIG1hdC1tZGMtdG9vbHRpcC1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMC44KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgbWF0LW1kYy10b29sdGlwLWhpZGV7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMC44KX19Lm1hdC1tZGMtdG9vbHRpcC1zaG93e2FuaW1hdGlvbjptYXQtbWRjLXRvb2x0aXAtc2hvdyAxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSBmb3J3YXJkc30ubWF0LW1kYy10b29sdGlwLWhpZGV7YW5pbWF0aW9uOm1hdC1tZGMtdG9vbHRpcC1oaWRlIDc1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSkgZm9yd2FyZHN9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQW5lPShfcigic3RhdGUiLFt3aSgiaW5pdGlhbCwgdm9pZCwgaGlkZGVuIixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMC44KSJ9KSksd2koInZpc2libGUiLHJuKHt0cmFuc2Zvcm06InNjYWxlKDEpIn0pKSxnaSgiKiA9PiB2aXNpYmxlIixDaSgiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksZ2koIiogPT4gaGlkZGVuIixDaSgiNzVtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKSIpKV0pLCgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W2s0ZV0saW1wb3J0czpbbGcsUGUsQ28sZm4sZm4sUGNdfSksbn0pKCkpO2Z1bmN0aW9uIHE0ZShuLHQpe2lmKDEmbiYmKGgoMCwibWF0LW9wdGlvbiIsMTkpLFQoMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O18oInZhbHVlIixlKSx2KDEpLEhlKCIgIixlLCIgIil9fWZ1bmN0aW9uIFk0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1mb3JtLWZpZWxkIiwxNikoMSwibWF0LXNlbGVjdCIsMTcpLEkoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLl9jaGFuZ2VQYWdlU2l6ZShyLnZhbHVlKSl9KSxTKDIscTRlLDIsMiwibWF0LW9wdGlvbiIsMTgpLGcoKSgpfWlmKDImbil7bGV0IGU9dygyKTtfKCJhcHBlYXJhbmNlIixlLl9mb3JtRmllbGRBcHBlYXJhbmNlKSgiY29sb3IiLGUuY29sb3IpLHYoMSksXygidmFsdWUiLGUucGFnZVNpemUpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCkoImFyaWEtbGFiZWxsZWRieSIsZS5fcGFnZVNpemVMYWJlbElkKSgicGFuZWxDbGFzcyIsZS5zZWxlY3RDb25maWcucGFuZWxDbGFzc3x8IiIpKCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixlLnNlbGVjdENvbmZpZy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKSx2KDEpLF8oIm5nRm9yT2YiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIFg0ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwyMCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLGJ0KGUucGFnZVNpemUpfX1mdW5jdGlvbiBRNGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLFQoMiksZygpLFMoMyxZNGUsMyw4LCJtYXQtZm9ybS1maWVsZCIsMTQpLFMoNCxYNGUsMiwxLCJkaXYiLDE1KSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksV2koImlkIixlLl9wYWdlU2l6ZUxhYmVsSWQpLHYoMSksSGUoIiAiLGUuX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwsIiAiKSx2KDEpLF8oIm5nSWYiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSksdigxKSxfKCJuZ0lmIixlLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoPD0xKX19ZnVuY3Rpb24gWjRlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwyMSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuZmlyc3RQYWdlKCkpfSksTm4oKSxoKDEsInN2ZyIsNyksUCgyLCJwYXRoIiwyMiksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7XygibWF0VG9vbHRpcCIsZS5faW50bC5maXJzdFBhZ2VMYWJlbCkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsZS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixlLl9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSxCZSgiYXJpYS1sYWJlbCIsZS5faW50bC5maXJzdFBhZ2VMYWJlbCl9fWZ1bmN0aW9uIEs0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtObigpLE9vKCksaCgwLCJidXR0b24iLDIzKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5sYXN0UGFnZSgpKX0pLE5uKCksaCgxLCJzdmciLDcpLFAoMiwicGF0aCIsMjQpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO18oIm1hdFRvb2x0aXAiLGUuX2ludGwubGFzdFBhZ2VMYWJlbCkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsZS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSgibWF0VG9vbHRpcFBvc2l0aW9uIiwiYWJvdmUiKSgiZGlzYWJsZWQiLGUuX25leHRCdXR0b25zRGlzYWJsZWQoKSksQmUoImFyaWEtbGFiZWwiLGUuX2ludGwubGFzdFBhZ2VMYWJlbCl9fXZhciBDbT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5jaGFuZ2VzPW5ldyBJZSx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJJdGVtcyBwZXIgcGFnZToiLHRoaXMubmV4dFBhZ2VMYWJlbD0iTmV4dCBwYWdlIix0aGlzLnByZXZpb3VzUGFnZUxhYmVsPSJQcmV2aW91cyBwYWdlIix0aGlzLmZpcnN0UGFnZUxhYmVsPSJGaXJzdCBwYWdlIix0aGlzLmxhc3RQYWdlTGFiZWw9Ikxhc3QgcGFnZSIsdGhpcy5nZXRSYW5nZUxhYmVsPShlLGkscik9PntpZigwPT1yfHwwPT1pKXJldHVybmAwIG9mICR7cn1gO2xldCBvPWUqaTtyZXR1cm5gJHtvKzF9IFx1MjAxMyAke288KHI9TWF0aC5tYXgociwwKSk/TWF0aC5taW4obytpLHIpOm8raX0gb2YgJHtyfWB9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSwkNGU9e3Byb3ZpZGU6Q20sZGVwczpbW25ldyBUcyxuZXcgc2QsQ21dXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybiBufHxuZXcgQ219fSx0SGU9bmV3IGllKCJNQVRfUEFHSU5BVE9SX0RFRkFVTFRfT1BUSU9OUyIpLG5IZT1zbyhWMShjbGFzc3t9KSksaUhlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBuSGV7Z2V0IHBhZ2VJbmRleCgpe3JldHVybiB0aGlzLl9wYWdlSW5kZXh9c2V0IHBhZ2VJbmRleChlKXt0aGlzLl9wYWdlSW5kZXg9TWF0aC5tYXgoX2koZSksMCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sZW5ndGh9c2V0IGxlbmd0aChlKXt0aGlzLl9sZW5ndGg9X2koZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplfXNldCBwYWdlU2l6ZShlKXt0aGlzLl9wYWdlU2l6ZT1NYXRoLm1heChfaShlKSwwKSx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKX1nZXQgcGFnZVNpemVPcHRpb25zKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9uc31zZXQgcGFnZVNpemVPcHRpb25zKGUpe3RoaXMuX3BhZ2VTaXplT3B0aW9ucz0oZXx8W10pLm1hcChpPT5faShpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZShlKXt0aGlzLl9oaWRlUGFnZVNpemU9UnQoZSl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyhlKXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1SdChlKX1jb25zdHJ1Y3RvcihlLGkscil7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYWdlSW5kZXg9MCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9W10sdGhpcy5faGlkZVBhZ2VTaXplPSExLHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zPSExLHRoaXMuc2VsZWN0Q29uZmlnPXt9LHRoaXMucGFnZT1uZXcgRix0aGlzLl9pbnRsQ2hhbmdlcz1lLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSkscil7bGV0e3BhZ2VTaXplOm8scGFnZVNpemVPcHRpb25zOnMsaGlkZVBhZ2VTaXplOmEsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6bH09cjtudWxsIT1vJiYodGhpcy5fcGFnZVNpemU9byksbnVsbCE9cyYmKHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1zKSxudWxsIT1hJiYodGhpcy5faGlkZVBhZ2VTaXplPWEpLG51bGwhPWwmJih0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1sKX19bmdPbkluaXQoKXt0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKSx0aGlzLl9tYXJrSW5pdGlhbGl6ZWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2ludGxDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9bmV4dFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD10aGlzLnBhZ2VJbmRleCsxLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9cHJldmlvdXNQYWdlKCl7aWYoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpcmV0dXJuO2xldCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMucGFnZUluZGV4LTEsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1maXJzdFBhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9MCx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWxhc3RQYWdlKCl7aWYoIXRoaXMuaGFzTmV4dFBhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9dGhpcy5nZXROdW1iZXJPZlBhZ2VzKCktMSx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWhhc1ByZXZpb3VzUGFnZSgpe3JldHVybiB0aGlzLnBhZ2VJbmRleD49MSYmMCE9dGhpcy5wYWdlU2l6ZX1oYXNOZXh0UGFnZSgpe2xldCBlPXRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpLTE7cmV0dXJuIHRoaXMucGFnZUluZGV4PGUmJjAhPXRoaXMucGFnZVNpemV9Z2V0TnVtYmVyT2ZQYWdlcygpe3JldHVybiB0aGlzLnBhZ2VTaXplP01hdGguY2VpbCh0aGlzLmxlbmd0aC90aGlzLnBhZ2VTaXplKTowfV9jaGFuZ2VQYWdlU2l6ZShlKXtsZXQgcj10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD1NYXRoLmZsb29yKHRoaXMucGFnZUluZGV4KnRoaXMucGFnZVNpemUvZSl8fDAsdGhpcy5wYWdlU2l6ZT1lLHRoaXMuX2VtaXRQYWdlRXZlbnQocil9X25leHRCdXR0b25zRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMuaGFzTmV4dFBhZ2UoKX1fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMuaGFzUHJldmlvdXNQYWdlKCl9X3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpeyF0aGlzLl9pbml0aWFsaXplZHx8KHRoaXMucGFnZVNpemV8fCh0aGlzLl9wYWdlU2l6ZT0wIT10aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGg/dGhpcy5wYWdlU2l6ZU9wdGlvbnNbMF06NTApLHRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucz10aGlzLnBhZ2VTaXplT3B0aW9ucy5zbGljZSgpLC0xPT09dGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLmluZGV4T2YodGhpcy5wYWdlU2l6ZSkmJnRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5wdXNoKHRoaXMucGFnZVNpemUpLHRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5zb3J0KChlLGkpPT5lLWkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZW1pdFBhZ2VFdmVudChlKXt0aGlzLnBhZ2UuZW1pdCh7cHJldmlvdXNQYWdlSW5kZXg6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxsZW5ndGg6dGhpcy5sZW5ndGh9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe0lzKCl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4saW5wdXRzOntjb2xvcjoiY29sb3IiLHBhZ2VJbmRleDoicGFnZUluZGV4IixsZW5ndGg6Imxlbmd0aCIscGFnZVNpemU6InBhZ2VTaXplIixwYWdlU2l6ZU9wdGlvbnM6InBhZ2VTaXplT3B0aW9ucyIsaGlkZVBhZ2VTaXplOiJoaWRlUGFnZVNpemUiLHNob3dGaXJzdExhc3RCdXR0b25zOiJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsc2VsZWN0Q29uZmlnOiJzZWxlY3RDb25maWcifSxvdXRwdXRzOntwYWdlOiJwYWdlIn0sZmVhdHVyZXM6W0tlXX0pLG59KSgpLHJIZT0wLGJBPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBpSGV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSxyKSx0aGlzLl9wYWdlU2l6ZUxhYmVsSWQ9Im1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLWxhYmVsLSIrckhlKyssdGhpcy5fZm9ybUZpZWxkQXBwZWFyYW5jZT1yPy5mb3JtRmllbGRBcHBlYXJhbmNlfHwib3V0bGluZSJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQ20pLEMoJHQpLEModEhlLDgpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcGFnaW5hdG9yIl1dLGhvc3RBdHRyczpbInJvbGUiLCJncm91cCIsMSwibWF0LW1kYy1wYWdpbmF0b3IiXSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LGV4cG9ydEFzOlsibWF0UGFnaW5hdG9yIl0sZmVhdHVyZXM6W0tlXSxkZWNsczoxNCx2YXJzOjE0LGNvbnN0czpbWzEsIm1hdC1tZGMtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtbWRjLXBhZ2luYXRvci1jb250YWluZXIiXSxbImNsYXNzIiwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplIiw0LCJuZ0lmIl0sWzEsIm1hdC1tZGMtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbImFyaWEtbGl2ZSIsInBvbGl0ZSIsMSwibWF0LW1kYy1wYWdpbmF0b3ItcmFuZ2UtbGFiZWwiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1tZGMtcGFnaW5hdG9yLW5hdmlnYXRpb24tZmlyc3QiLDMsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwUG9zaXRpb24iLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtbWRjLXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtbWRjLXBhZ2luYXRvci1pY29uIl0sWyJkIiwiTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtbWRjLXBhZ2luYXRvci1uYXZpZ2F0aW9uLW5leHQiLDMsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwUG9zaXRpb24iLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJkIiwiTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LW1kYy1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemUiXSxbMSwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplLWxhYmVsIiwzLCJpZCJdLFsiY2xhc3MiLCJtYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0IiwzLCJhcHBlYXJhbmNlIiwiY29sb3IiLDQsIm5nSWYiXSxbImNsYXNzIiwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplLXZhbHVlIiw0LCJuZ0lmIl0sWzEsIm1hdC1tZGMtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFsiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsIiIsMywidmFsdWUiLCJkaXNhYmxlZCIsImFyaWEtbGFiZWxsZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplLXZhbHVlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtbWRjLXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xOC40MSAxNi41OUwxMy44MiAxMmw0LjU5LTQuNTlMMTcgNmwtNiA2IDYgNnpNNiA2aDJ2MTJINnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1tZGMtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApKDEsImRpdiIsMSksUygyLFE0ZSw1LDQsImRpdiIsMiksaCgzLCJkaXYiLDMpKDQsImRpdiIsNCksVCg1KSxnKCksUyg2LFo0ZSwzLDUsImJ1dHRvbiIsNSksaCg3LCJidXR0b24iLDYpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnByZXZpb3VzUGFnZSgpfSksTm4oKSxoKDgsInN2ZyIsNyksUCg5LCJwYXRoIiw4KSxnKCkoKSxPbygpLGgoMTAsImJ1dHRvbiIsOSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dFBhZ2UoKX0pLE5uKCksaCgxMSwic3ZnIiw3KSxQKDEyLCJwYXRoIiwxMCksZygpKCksUygxMyxLNGUsMyw1LCJidXR0b24iLDExKSxnKCkoKSgpKSwyJmUmJih2KDIpLF8oIm5nSWYiLCFpLmhpZGVQYWdlU2l6ZSksdigzKSxIZSgiICIsaS5faW50bC5nZXRSYW5nZUxhYmVsKGkucGFnZUluZGV4LGkucGFnZVNpemUsaS5sZW5ndGgpLCIgIiksdigxKSxfKCJuZ0lmIixpLnNob3dGaXJzdExhc3RCdXR0b25zKSx2KDEpLF8oIm1hdFRvb2x0aXAiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGkuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksQmUoImFyaWEtbGFiZWwiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLHYoMyksXygibWF0VG9vbHRpcCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixpLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSxCZSgiYXJpYS1sYWJlbCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSx2KDMpLF8oIm5nSWYiLGkuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMpKX0sZGVwZW5kZW5jaWVzOltubixGZSwkaSxLYSx6dSxVcyxJbmVdLHN0eWxlczpbIi5tYXQtbWRjLXBhZ2luYXRvcntkaXNwbGF5OmJsb2NrfS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtc2VsZWN0e2xpbmUtaGVpZ2h0OjEuNX0ubWF0LW1kYy1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleH0ubWF0LW1kYy1wYWdpbmF0b3ItY29udGFpbmVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MCA4cHg7ZmxleC13cmFwOndyYXAtcmV2ZXJzZTt3aWR0aDoxMDAlfS5tYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemUtbGFiZWx7bWFyZ2luOjAgNHB4fS5tYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0e21hcmdpbjowIDRweDt3aWR0aDo4NHB4fS5tYXQtbWRjLXBhZ2luYXRvci1yYW5nZS1sYWJlbHttYXJnaW46MCAzMnB4IDAgMjRweH0ubWF0LW1kYy1wYWdpbmF0b3ItcmFuZ2UtYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtbWRjLXBhZ2luYXRvci1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjI4cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXBhZ2luYXRvci1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItaWNvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXBhZ2luYXRvci1pY29ue2ZpbGw6Y3VycmVudENvbG9yO2ZpbGw6Q2FudmFzVGV4dH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXBhZ2luYXRvci1yYW5nZS1hY3Rpb25zIC5tYXQtbWRjLWljb24tYnV0dG9ue291dGxpbmU6c29saWQgMXB4fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFJuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlskNGVdLGltcG9ydHM6W1BlLGNpLEphLEFuZV19KSxufSkoKSxzSGU9WyJtYXQtc29ydC1oZWFkZXIiLCIiXTtmdW5jdGlvbiBhSGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDMpLEkoIkBhcnJvd1Bvc2l0aW9uLnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSEwKX0pKCJAYXJyb3dQb3NpdGlvbi5kb25lIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSExKX0pLFAoMSwiZGl2Iiw0KSxoKDIsImRpdiIsNSksUCgzLCJkaXYiLDYpKDQsImRpdiIsNykoNSwiZGl2Iiw4KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtfKCJAYXJyb3dPcGFjaXR5IixlLl9nZXRBcnJvd1ZpZXdTdGF0ZSgpKSgiQGFycm93UG9zaXRpb24iLGUuX2dldEFycm93Vmlld1N0YXRlKCkpKCJAYWxsb3dDaGlsZHJlbiIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKSx2KDIpLF8oIkBpbmRpY2F0b3IiLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSksdigxKSxfKCJAbGVmdFBvaW50ZXIiLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSksdigxKSxfKCJAcmlnaHRQb2ludGVyIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpfX12YXIgbEhlPVsiKiJdLFBuZT1uZXcgaWUoIk1BVF9TT1JUX0RFRkFVTFRfT1BUSU9OUyIpLGNIZT1WMShzbyhjbGFzc3t9KSksJHg9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGNIZXtnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn1zZXQgZGlyZWN0aW9uKGUpe3RoaXMuX2RpcmVjdGlvbj1lfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIoZSl7dGhpcy5fZGlzYWJsZUNsZWFyPVJ0KGUpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZGVmYXVsdE9wdGlvbnM9ZSx0aGlzLnNvcnRhYmxlcz1uZXcgTWFwLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcgSWUsdGhpcy5zdGFydD0iYXNjIix0aGlzLl9kaXJlY3Rpb249IiIsdGhpcy5zb3J0Q2hhbmdlPW5ldyBGfXJlZ2lzdGVyKGUpe3RoaXMuc29ydGFibGVzLnNldChlLmlkLGUpfWRlcmVnaXN0ZXIoZSl7dGhpcy5zb3J0YWJsZXMuZGVsZXRlKGUuaWQpfXNvcnQoZSl7dGhpcy5hY3RpdmUhPWUuaWQ/KHRoaXMuYWN0aXZlPWUuaWQsdGhpcy5kaXJlY3Rpb249ZS5zdGFydD9lLnN0YXJ0OnRoaXMuc3RhcnQpOnRoaXMuZGlyZWN0aW9uPXRoaXMuZ2V0TmV4dFNvcnREaXJlY3Rpb24oZSksdGhpcy5zb3J0Q2hhbmdlLmVtaXQoe2FjdGl2ZTp0aGlzLmFjdGl2ZSxkaXJlY3Rpb246dGhpcy5kaXJlY3Rpb259KX1nZXROZXh0U29ydERpcmVjdGlvbihlKXtpZighZSlyZXR1cm4iIjtsZXQgcj1mdW5jdGlvbihuLHQpe2xldCBlPVsiYXNjIiwiZGVzYyJdO3JldHVybiJkZXNjIj09biYmZS5yZXZlcnNlKCksdHx8ZS5wdXNoKCIiKSxlfShlLnN0YXJ0fHx0aGlzLnN0YXJ0LGU/LmRpc2FibGVDbGVhcj8/dGhpcy5kaXNhYmxlQ2xlYXI/PyEhdGhpcy5fZGVmYXVsdE9wdGlvbnM/LmRpc2FibGVDbGVhciksbz1yLmluZGV4T2YodGhpcy5kaXJlY3Rpb24pKzE7cmV0dXJuIG8+PXIubGVuZ3RoJiYobz0wKSxyW29dfW5nT25Jbml0KCl7dGhpcy5fbWFya0luaXRpYWxpemVkKCl9bmdPbkNoYW5nZXMoKXt0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoUG5lLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0U29ydCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0Il0saW5wdXRzOntkaXNhYmxlZDpbIm1hdFNvcnREaXNhYmxlZCIsImRpc2FibGVkIl0sYWN0aXZlOlsibWF0U29ydEFjdGl2ZSIsImFjdGl2ZSJdLHN0YXJ0OlsibWF0U29ydFN0YXJ0Iiwic3RhcnQiXSxkaXJlY3Rpb246WyJtYXRTb3J0RGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZGlzYWJsZUNsZWFyOlsibWF0U29ydERpc2FibGVDbGVhciIsImRpc2FibGVDbGVhciJdfSxvdXRwdXRzOntzb3J0Q2hhbmdlOiJtYXRTb3J0Q2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRTb3J0Il0sZmVhdHVyZXM6W0tlLEd0XX0pLG59KSgpLFRwPVQ3LkVOVEVSSU5HKyIgIitFNy5TVEFOREFSRF9DVVJWRSxtXz17aW5kaWNhdG9yOl9yKCJpbmRpY2F0b3IiLFt3aSgiYWN0aXZlLWFzYywgYXNjIixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDBweCkifSkpLHdpKCJhY3RpdmUtZGVzYywgZGVzYyIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgxMHB4KSJ9KSksZ2koImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixDaShUcCkpXSksbGVmdFBvaW50ZXI6X3IoImxlZnRQb2ludGVyIixbd2koImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKC00NWRlZykifSkpLHdpKCJhY3RpdmUtZGVzYywgZGVzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKDQ1ZGVnKSJ9KSksZ2koImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixDaShUcCkpXSkscmlnaHRQb2ludGVyOl9yKCJyaWdodFBvaW50ZXIiLFt3aSgiYWN0aXZlLWFzYywgYXNjIixybih7dHJhbnNmb3JtOiJyb3RhdGUoNDVkZWcpIn0pKSx3aSgiYWN0aXZlLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSgtNDVkZWcpIn0pKSxnaSgiYWN0aXZlLWFzYyA8PT4gYWN0aXZlLWRlc2MiLENpKFRwKSldKSxhcnJvd09wYWNpdHk6X3IoImFycm93T3BhY2l0eSIsW3dpKCJkZXNjLXRvLWFjdGl2ZSwgYXNjLXRvLWFjdGl2ZSwgYWN0aXZlIixybih7b3BhY2l0eToxfSkpLHdpKCJkZXNjLXRvLWhpbnQsIGFzYy10by1oaW50LCBoaW50Iixybih7b3BhY2l0eTouNTR9KSksd2koImhpbnQtdG8tZGVzYywgYWN0aXZlLXRvLWRlc2MsIGRlc2MsIGhpbnQtdG8tYXNjLCBhY3RpdmUtdG8tYXNjLCBhc2MsIHZvaWQiLHJuKHtvcGFjaXR5OjB9KSksZ2koIiogPT4gYXNjLCAqID0+IGRlc2MsICogPT4gYWN0aXZlLCAqID0+IGhpbnQsICogPT4gdm9pZCIsQ2koIjBtcyIpKSxnaSgiKiA8PT4gKiIsQ2koVHApKV0pLGFycm93UG9zaXRpb246X3IoImFycm93UG9zaXRpb24iLFtnaSgiKiA9PiBkZXNjLXRvLWhpbnQsICogPT4gZGVzYy10by1hY3RpdmUiLENpKFRwLGtiKFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSldKSkpLGdpKCIqID0+IGhpbnQtdG8tZGVzYywgKiA9PiBhY3RpdmUtdG8tZGVzYyIsQ2koVHAsa2IoW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSkscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgyNSUpIn0pXSkpKSxnaSgiKiA9PiBhc2MtdG8taGludCwgKiA9PiBhc2MtdG8tYWN0aXZlIixDaShUcCxrYihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgyNSUpIn0pLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSldKSkpLGdpKCIqID0+IGhpbnQtdG8tYXNjLCAqID0+IGFjdGl2ZS10by1hc2MiLENpKFRwLGtiKFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSldKSkpLHdpKCJkZXNjLXRvLWhpbnQsIGFzYy10by1oaW50LCBoaW50LCBkZXNjLXRvLWFjdGl2ZSwgYXNjLXRvLWFjdGl2ZSwgYWN0aXZlIixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pKSx3aSgiaGludC10by1kZXNjLCBhY3RpdmUtdG8tZGVzYywgZGVzYyIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KSksd2koImhpbnQtdG8tYXNjLCBhY3RpdmUtdG8tYXNjLCBhc2MiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KSldKSxhbGxvd0NoaWxkcmVuOl9yKCJhbGxvd0NoaWxkcmVuIixbZ2koIiogPD0+ICoiLFtKcCgiQCoiLEtwKCkse29wdGlvbmFsOiEwfSldKV0pfSx2QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5jaGFuZ2VzPW5ldyBJZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscEhlPXtwcm92aWRlOnZBLGRlcHM6W1tuZXcgVHMsbmV3IHNkLHZBXV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4gbnx8bmV3IHZBfX0sZkhlPXNvKGNsYXNze30pLE9uZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZkhle2dldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9ufXNldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl7dGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIoZSl7dGhpcy5fZGlzYWJsZUNsZWFyPVJ0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9zb3J0PXIsdGhpcy5fY29sdW1uRGVmPW8sdGhpcy5fZm9jdXNNb25pdG9yPXMsdGhpcy5fZWxlbWVudFJlZj1hLHRoaXMuX2FyaWFEZXNjcmliZXI9bCx0aGlzLl9zaG93SW5kaWNhdG9ySGludD0hMSx0aGlzLl92aWV3U3RhdGU9e30sdGhpcy5fYXJyb3dEaXJlY3Rpb249IiIsdGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLmFycm93UG9zaXRpb249ImFmdGVyIix0aGlzLl9zb3J0QWN0aW9uRGVzY3JpcHRpb249IlNvcnQiLGM/LmFycm93UG9zaXRpb24mJih0aGlzLmFycm93UG9zaXRpb249Yz8uYXJyb3dQb3NpdGlvbiksdGhpcy5faGFuZGxlU3RhdGVDaGFuZ2VzKCl9bmdPbkluaXQoKXshdGhpcy5pZCYmdGhpcy5fY29sdW1uRGVmJiYodGhpcy5pZD10aGlzLl9jb2x1bW5EZWYubmFtZSksdGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe3RvU3RhdGU6dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlIjp0aGlzLl9hcnJvd0RpcmVjdGlvbn0pLHRoaXMuX3NvcnQucmVnaXN0ZXIodGhpcyksdGhpcy5fc29ydEJ1dHRvbj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIiKSx0aGlzLl91cGRhdGVTb3J0QWN0aW9uRGVzY3JpcHRpb24odGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoZT0+e2xldCBpPSEhZTtpIT09dGhpcy5fc2hvd0luZGljYXRvckhpbnQmJih0aGlzLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZShpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9zb3J0LmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fcmVyZW5kZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fc2V0SW5kaWNhdG9ySGludFZpc2libGUoZSl7dGhpcy5faXNEaXNhYmxlZCgpJiZlfHwodGhpcy5fc2hvd0luZGljYXRvckhpbnQ9ZSx0aGlzLl9pc1NvcnRlZCgpfHwodGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUodGhpcy5fc2hvd0luZGljYXRvckhpbnQ/e2Zyb21TdGF0ZTp0aGlzLl9hcnJvd0RpcmVjdGlvbix0b1N0YXRlOiJoaW50In06e2Zyb21TdGF0ZToiaGludCIsdG9TdGF0ZTp0aGlzLl9hcnJvd0RpcmVjdGlvbn0pKSl9X3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZShlKXt0aGlzLl92aWV3U3RhdGU9ZXx8e30sdGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbiYmKHRoaXMuX3ZpZXdTdGF0ZT17dG9TdGF0ZTplLnRvU3RhdGV9KX1fdG9nZ2xlT25JbnRlcmFjdGlvbigpe3RoaXMuX3NvcnQuc29ydCh0aGlzKSwoImhpbnQiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGV8fCJhY3RpdmUiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGUpJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCl9X2hhbmRsZUNsaWNrKCl7dGhpcy5faXNEaXNhYmxlZCgpfHx0aGlzLl9zb3J0LnNvcnQodGhpcyl9X2hhbmRsZUtleWRvd24oZSl7IXRoaXMuX2lzRGlzYWJsZWQoKSYmKDMyPT09ZS5rZXlDb2RlfHwxMz09PWUua2V5Q29kZSkmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fdG9nZ2xlT25JbnRlcmFjdGlvbigpKX1faXNTb3J0ZWQoKXtyZXR1cm4gdGhpcy5fc29ydC5hY3RpdmU9PXRoaXMuaWQmJigiYXNjIj09PXRoaXMuX3NvcnQuZGlyZWN0aW9ufHwiZGVzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbil9X2dldEFycm93RGlyZWN0aW9uU3RhdGUoKXtyZXR1cm5gJHt0aGlzLl9pc1NvcnRlZCgpPyJhY3RpdmUtIjoiIn0ke3RoaXMuX2Fycm93RGlyZWN0aW9ufWB9X2dldEFycm93Vmlld1N0YXRlKCl7bGV0IGU9dGhpcy5fdmlld1N0YXRlLmZyb21TdGF0ZTtyZXR1cm4oZT9gJHtlfS10by1gOiIiKSt0aGlzLl92aWV3U3RhdGUudG9TdGF0ZX1fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKXt0aGlzLl9hcnJvd0RpcmVjdGlvbj10aGlzLl9pc1NvcnRlZCgpP3RoaXMuX3NvcnQuZGlyZWN0aW9uOnRoaXMuc3RhcnR8fHRoaXMuX3NvcnQuc3RhcnR9X2lzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fc29ydC5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlZH1fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKXtyZXR1cm4gdGhpcy5faXNTb3J0ZWQoKT8iYXNjIj09dGhpcy5fc29ydC5kaXJlY3Rpb24/ImFzY2VuZGluZyI6ImRlc2NlbmRpbmciOiJub25lIn1fcmVuZGVyQXJyb3coKXtyZXR1cm4hdGhpcy5faXNEaXNhYmxlZCgpfHx0aGlzLl9pc1NvcnRlZCgpfV91cGRhdGVTb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl7dGhpcy5fc29ydEJ1dHRvbiYmKHRoaXMuX2FyaWFEZXNjcmliZXI/LnJlbW92ZURlc2NyaXB0aW9uKHRoaXMuX3NvcnRCdXR0b24sdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uKSx0aGlzLl9hcmlhRGVzY3JpYmVyPy5kZXNjcmliZSh0aGlzLl9zb3J0QnV0dG9uLGUpKSx0aGlzLl9zb3J0QWN0aW9uRGVzY3JpcHRpb249ZX1faGFuZGxlU3RhdGVDaGFuZ2VzKCl7dGhpcy5fcmVyZW5kZXJTdWJzY3JpcHRpb249dG4odGhpcy5fc29ydC5zb3J0Q2hhbmdlLHRoaXMuX3NvcnQuX3N0YXRlQ2hhbmdlcyx0aGlzLl9pbnRsLmNoYW5nZXMpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2lzU29ydGVkKCkmJih0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpLCgiaGludCI9PT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZXx8ImFjdGl2ZSI9PT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZSkmJih0aGlzLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSEwKSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZTp0aGlzLl9hcnJvd0RpcmVjdGlvbix0b1N0YXRlOiJhY3RpdmUifSksdGhpcy5fc2hvd0luZGljYXRvckhpbnQ9ITEpLCF0aGlzLl9pc1NvcnRlZCgpJiZ0aGlzLl92aWV3U3RhdGUmJiJhY3RpdmUiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGUmJih0aGlzLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSExLHRoaXMuX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZSh7ZnJvbVN0YXRlOiJhY3RpdmUiLHRvU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh2QSksQygkdCksQygkeCw4KSxDKCJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiIsOCksQyhYciksQyhNZSksQyhMMSw4KSxDKFBuZSw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LXNvcnQtaGVhZGVyIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXNvcnQtaGVhZGVyIl0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVDbGljaygpfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVLZXlkb3duKG8pfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3NldEluZGljYXRvckhpbnRWaXNpYmxlKCEwKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBpLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSghMSl9KSwyJmUmJihCZSgiYXJpYS1zb3J0IixpLl9nZXRBcmlhU29ydEF0dHJpYnV0ZSgpKSxudCgibWF0LXNvcnQtaGVhZGVyLWRpc2FibGVkIixpLl9pc0Rpc2FibGVkKCkpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGlkOlsibWF0LXNvcnQtaGVhZGVyIiwiaWQiXSxhcnJvd1Bvc2l0aW9uOiJhcnJvd1Bvc2l0aW9uIixzdGFydDoic3RhcnQiLHNvcnRBY3Rpb25EZXNjcmlwdGlvbjoic29ydEFjdGlvbkRlc2NyaXB0aW9uIixkaXNhYmxlQ2xlYXI6ImRpc2FibGVDbGVhciJ9LGV4cG9ydEFzOlsibWF0U29ydEhlYWRlciJdLGZlYXR1cmVzOltLZV0sYXR0cnM6c0hlLG5nQ29udGVudFNlbGVjdG9yczpsSGUsZGVjbHM6NCx2YXJzOjcsY29uc3RzOltbMSwibWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lciIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxbMSwibWF0LXNvcnQtaGVhZGVyLWNvbnRlbnQiXSxbImNsYXNzIiwibWF0LXNvcnQtaGVhZGVyLWFycm93Iiw0LCJuZ0lmIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1hcnJvdyJdLFsxLCJtYXQtc29ydC1oZWFkZXItc3RlbSJdLFsxLCJtYXQtc29ydC1oZWFkZXItaW5kaWNhdG9yIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQiXSxbMSwibWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHQiXSxbMSwibWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbWlkZGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oKSxoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSx6dCgyKSxnKCksUygzLGFIZSw2LDYsImRpdiIsMiksZygpKSwyJmUmJihudCgibWF0LXNvcnQtaGVhZGVyLXNvcnRlZCIsaS5faXNTb3J0ZWQoKSkoIm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUiLCJiZWZvcmUiPT09aS5hcnJvd1Bvc2l0aW9uKSxCZSgidGFiaW5kZXgiLGkuX2lzRGlzYWJsZWQoKT9udWxsOjApKCJyb2xlIixpLl9pc0Rpc2FibGVkKCk/bnVsbDoiYnV0dG9uIiksdigzKSxfKCJuZ0lmIixpLl9yZW5kZXJBcnJvdygpKSl9LGRlcGVuZGVuY2llczpbRmVdLHN0eWxlczpbIi5tYXQtc29ydC1oZWFkZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO291dGxpbmU6MH1bbWF0LXNvcnQtaGVhZGVyXS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcixbbWF0LXNvcnQtaGVhZGVyXS5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc29ydC1oZWFkZXItY29udGFpbmVye2JvcmRlci1ib3R0b206c29saWQgMXB4IGN1cnJlbnRDb2xvcn0ubWF0LXNvcnQtaGVhZGVyLWRpc2FibGVkIC5tYXQtc29ydC1oZWFkZXItY29udGFpbmVye2N1cnNvcjpkZWZhdWx0fS5tYXQtc29ydC1oZWFkZXItY29udGFpbmVyOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSArIDJweCkgKiAtMSl9Lm1hdC1zb3J0LWhlYWRlci1jb250ZW50e3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmV7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3toZWlnaHQ6MTJweDt3aWR0aDoxMnB4O21pbi13aWR0aDoxMnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtvcGFjaXR5OjB9Lm1hdC1zb3J0LWhlYWRlci1hcnJvdyxbZGlyPXJ0bF0gLm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUgLm1hdC1zb3J0LWhlYWRlci1hcnJvd3ttYXJnaW46MCAwIDAgNnB4fS5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIC5tYXQtc29ydC1oZWFkZXItYXJyb3csW2Rpcj1ydGxdIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7bWFyZ2luOjAgNnB4IDAgMH0ubWF0LXNvcnQtaGVhZGVyLXN0ZW17YmFja2dyb3VuZDpjdXJyZW50Q29sb3I7aGVpZ2h0OjEwcHg7d2lkdGg6MnB4O21hcmdpbjphdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXN0ZW17d2lkdGg6MDtib3JkZXItbGVmdDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1pbmRpY2F0b3J7d2lkdGg6MTAwJTtoZWlnaHQ6MnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGV7bWFyZ2luOmF1dG87aGVpZ2h0OjJweDt3aWR0aDoycHg7YmFja2dyb3VuZDpjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbWlkZGxle3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHg7Ym9yZGVyLWxlZnQ6c29saWQgMnB4fS5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0LC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodHtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjt3aWR0aDo2cHg7aGVpZ2h0OjJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0LC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6c29saWQgNnB4O2JvcmRlci10b3A6c29saWQgMnB4fS5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0e3RyYW5zZm9ybS1vcmlnaW46cmlnaHQ7bGVmdDowfS5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodHt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQ7cmlnaHQ6MH0iXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlttXy5pbmRpY2F0b3IsbV8ubGVmdFBvaW50ZXIsbV8ucmlnaHRQb2ludGVyLG1fLmFycm93T3BhY2l0eSxtXy5hcnJvd1Bvc2l0aW9uLG1fLmFsbG93Q2hpbGRyZW5dfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGtuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltwSGVdLGltcG9ydHM6W1BlLGZuXX0pLG59KSgpO2Z1bmN0aW9uIEFWKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Z2V0IHN0aWNreSgpe3JldHVybiB0aGlzLl9zdGlja3l9c2V0IHN0aWNreSh0KXtsZXQgZT10aGlzLl9zdGlja3k7dGhpcy5fc3RpY2t5PVJ0KHQpLHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ZSE9PXRoaXMuX3N0aWNreX1oYXNTdGlja3lDaGFuZ2VkKCl7bGV0IHQ9dGhpcy5faGFzU3RpY2t5Q2hhbmdlZDtyZXR1cm4gdGhpcy5faGFzU3RpY2t5Q2hhbmdlZD0hMSx0fXJlc2V0U3RpY2t5Q2hhbmdlZCgpe3RoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITF9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fc3RpY2t5PSExLHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITF9fX12YXIgUlY9bmV3IGllKCJDREtfVEFCTEUiKSxGbmU9KG5ldyBpZSgidGV4dC1jb2x1bW4tb3B0aW9ucyIpLEFWKGNsYXNze30pLG5ldyBpZSgiX0NPQUxFU0NFRF9TVFlMRV9TQ0hFRFVMRVIiKSwoKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy50ZW1wbGF0ZT1lLHRoaXMuX2RpZmZlcnM9aX1uZ09uQ2hhbmdlcyhlKXtpZighdGhpcy5fY29sdW1uc0RpZmZlcil7bGV0IGk9ZS5jb2x1bW5zJiZlLmNvbHVtbnMuY3VycmVudFZhbHVlfHxbXTt0aGlzLl9jb2x1bW5zRGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChpKS5jcmVhdGUoKSx0aGlzLl9jb2x1bW5zRGlmZmVyLmRpZmYoaSl9fWdldENvbHVtbnNEaWZmKCl7cmV0dXJuIHRoaXMuX2NvbHVtbnNEaWZmZXIuZGlmZih0aGlzLmNvbHVtbnMpfWV4dHJhY3RDZWxsVGVtcGxhdGUoZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBObmU/ZS5oZWFkZXJDZWxsLnRlbXBsYXRlOnRoaXMgaW5zdGFuY2VvZiBMbmU/ZS5mb290ZXJDZWxsLnRlbXBsYXRlOmUuY2VsbC50ZW1wbGF0ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhTaSksQyh3bCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGZlYXR1cmVzOltHdF19KSxufSkoKSksZ0hlPUFWKGNsYXNzIGV4dGVuZHMgRm5le30pLE5uZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZ0hle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkpLHRoaXMuX3RhYmxlPXJ9bmdPbkNoYW5nZXMoZSl7c3VwZXIubmdPbkNoYW5nZXMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoU2kpLEMod2wpLEMoUlYsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtIZWFkZXJSb3dEZWYiLCIiXV0saW5wdXRzOntjb2x1bW5zOlsiY2RrSGVhZGVyUm93RGVmIiwiY29sdW1ucyJdLHN0aWNreTpbImNka0hlYWRlclJvd0RlZlN0aWNreSIsInN0aWNreSJdfSxmZWF0dXJlczpbS2UsR3RdfSksbn0pKCksX0hlPUFWKGNsYXNzIGV4dGVuZHMgRm5le30pLExuZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgX0hle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkpLHRoaXMuX3RhYmxlPXJ9bmdPbkNoYW5nZXMoZSl7c3VwZXIubmdPbkNoYW5nZXMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoU2kpLEMod2wpLEMoUlYsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtGb290ZXJSb3dEZWYiLCIiXV0saW5wdXRzOntjb2x1bW5zOlsiY2RrRm9vdGVyUm93RGVmIiwiY29sdW1ucyJdLHN0aWNreTpbImNka0Zvb3RlclJvd0RlZlN0aWNreSIsInN0aWNreSJdfSxmZWF0dXJlczpbS2UsR3RdfSksbn0pKCksQm5lPShuZXcgaWUoIkNES19TUEwiKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbTWRdfSksbn0pKCkpLFZuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sQm5lLGZuXX0pLG59KSgpLFBWPWNsYXNzIGV4dGVuZHMgV3Z7Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5fZGF0YS52YWx1ZX1zZXQgZGF0YSh0KXt0PUFycmF5LmlzQXJyYXkodCk/dDpbXSx0aGlzLl9kYXRhLm5leHQodCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fZmlsdGVyRGF0YSh0KX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMuX2ZpbHRlci52YWx1ZX1zZXQgZmlsdGVyKHQpe3RoaXMuX2ZpbHRlci5uZXh0KHQpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb258fHRoaXMuX2ZpbHRlckRhdGEodGhpcy5kYXRhKX1nZXQgc29ydCgpe3JldHVybiB0aGlzLl9zb3J0fXNldCBzb3J0KHQpe3RoaXMuX3NvcnQ9dCx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1nZXQgcGFnaW5hdG9yKCl7cmV0dXJuIHRoaXMuX3BhZ2luYXRvcn1zZXQgcGFnaW5hdG9yKHQpe3RoaXMuX3BhZ2luYXRvcj10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWNvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5fcmVuZGVyRGF0YT1uZXcgQWkoW10pLHRoaXMuX2ZpbHRlcj1uZXcgQWkoIiIpLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXM9bmV3IEllLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbCx0aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3I9KGUsaSk9PntsZXQgcj1lW2ldO2lmKHMyKHIpKXtsZXQgbz1OdW1iZXIocik7cmV0dXJuIG88OTAwNzE5OTI1NDc0MDk5MT9vOnJ9cmV0dXJuIHJ9LHRoaXMuc29ydERhdGE9KGUsaSk9PntsZXQgcj1pLmFjdGl2ZSxvPWkuZGlyZWN0aW9uO3JldHVybiByJiYiIiE9bz9lLnNvcnQoKHMsYSk9PntsZXQgbD10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IocyxyKSxjPXRoaXMuc29ydGluZ0RhdGFBY2Nlc3NvcihhLHIpLGQ9dHlwZW9mIGwsdT10eXBlb2YgYztkIT09dSYmKCJudW1iZXIiPT09ZCYmKGwrPSIiKSwibnVtYmVyIj09PXUmJihjKz0iIikpO2xldCBwPTA7cmV0dXJuIG51bGwhPWwmJm51bGwhPWM/bD5jP3A9MTpsPGMmJihwPS0xKTpudWxsIT1sP3A9MTpudWxsIT1jJiYocD0tMSkscCooImFzYyI9PW8/MTotMSl9KTplfSx0aGlzLmZpbHRlclByZWRpY2F0ZT0oZSxpKT0+e2xldCByPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgocyxhKT0+cytlW2FdKyJcdTI1ZWMiLCIiKS50b0xvd2VyQ2FzZSgpLG89aS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9ci5pbmRleE9mKG8pfSx0aGlzLl9kYXRhPW5ldyBBaSh0KSx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl7bGV0IHQ9dGhpcy5fc29ydD90bih0aGlzLl9zb3J0LnNvcnRDaGFuZ2UsdGhpcy5fc29ydC5pbml0aWFsaXplZCk6SHQobnVsbCksZT10aGlzLl9wYWdpbmF0b3I/dG4odGhpcy5fcGFnaW5hdG9yLnBhZ2UsdGhpcy5faW50ZXJuYWxQYWdlQ2hhbmdlcyx0aGlzLl9wYWdpbmF0b3IuaW5pdGlhbGl6ZWQpOkh0KG51bGwpLHI9ZG4oW3RoaXMuX2RhdGEsdGhpcy5fZmlsdGVyXSkucGlwZShOKChbYV0pPT50aGlzLl9maWx0ZXJEYXRhKGEpKSksbz1kbihbcix0XSkucGlwZShOKChbYV0pPT50aGlzLl9vcmRlckRhdGEoYSkpKSxzPWRuKFtvLGVdKS5waXBlKE4oKFthXSk9PnRoaXMuX3BhZ2VEYXRhKGEpKSk7dGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPXMuc3Vic2NyaWJlKGE9PnRoaXMuX3JlbmRlckRhdGEubmV4dChhKSl9X2ZpbHRlckRhdGEodCl7cmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhPW51bGw9PXRoaXMuZmlsdGVyfHwiIj09PXRoaXMuZmlsdGVyP3Q6dC5maWx0ZXIoZT0+dGhpcy5maWx0ZXJQcmVkaWNhdGUoZSx0aGlzLmZpbHRlcikpLHRoaXMucGFnaW5hdG9yJiZ0aGlzLl91cGRhdGVQYWdpbmF0b3IodGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoKSx0aGlzLmZpbHRlcmVkRGF0YX1fb3JkZXJEYXRhKHQpe3JldHVybiB0aGlzLnNvcnQ/dGhpcy5zb3J0RGF0YSh0LnNsaWNlKCksdGhpcy5zb3J0KTp0fV9wYWdlRGF0YSh0KXtpZighdGhpcy5wYWdpbmF0b3IpcmV0dXJuIHQ7bGV0IGU9dGhpcy5wYWdpbmF0b3IucGFnZUluZGV4KnRoaXMucGFnaW5hdG9yLnBhZ2VTaXplO3JldHVybiB0LnNsaWNlKGUsZSt0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSl9X3VwZGF0ZVBhZ2luYXRvcih0KXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57bGV0IGU9dGhpcy5wYWdpbmF0b3I7aWYoZSYmKGUubGVuZ3RoPXQsZS5wYWdlSW5kZXg+MCkpe2xldCBpPU1hdGguY2VpbChlLmxlbmd0aC9lLnBhZ2VTaXplKS0xfHwwLHI9TWF0aC5taW4oZS5wYWdlSW5kZXgsaSk7ciE9PWUucGFnZUluZGV4JiYoZS5wYWdlSW5kZXg9cix0aGlzLl9pbnRlcm5hbFBhZ2VDaGFuZ2VzLm5leHQoKSl9fSl9Y29ubmVjdCgpe3JldHVybiB0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKSx0aGlzLl9yZW5kZXJEYXRhfWRpc2Nvbm5lY3QoKXt0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbH19LHlBPWNsYXNzIGV4dGVuZHMgUFZ7fSx5SGU9WyJmaWx0ZXIiXTtmdW5jdGlvbiB4SGUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIENIZShuLHQpezEmbiYmbGkoMCl9dmFyIE1IZT1mdW5jdGlvbihuKXtyZXR1cm57aXRlbTpufX07ZnVuY3Rpb24gd0hlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLENIZSwxLDAsIm5nLWNvbnRhaW5lciIsMTIpLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7dygpO2xldCBpPWl0KDE0KTt2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSW4oMixNSGUsZSkpfX1mdW5jdGlvbiBTSGUobix0KXsxJm4mJihoKDAsImRpdiIsMTMpLFAoMSwibWF0LXNwaW5uZXIiLDE0KSxnKCkpfWZ1bmN0aW9uIEVIZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxNSksVCgxLCJObyBSdW5zIiksZygpKX1mdW5jdGlvbiBUSGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTUpKDEsInNwYW4iKSxUKDIsJ05vIHJ1bnMgbWF0Y2ggIicpLGgoMywiY29kZSIpLFQoNCksZygpLFQoNSwnIicpLGcoKSgpKSwyJm4pe2xldCBlPXcoKTt2KDQpLGJ0KGUucmVnZXhGaWx0ZXIpfX12YXIgREhlPWZ1bmN0aW9uKCl7cmV0dXJuWzUsMTAsMjBdfTtmdW5jdGlvbiBJSGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJtYXQtcGFnaW5hdG9yIiwxNiksSSgicGFnZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25QYWdpbmF0aW9uQ2hhbmdlLmVtaXQocikpfSksZygpfWlmKDImbil7bGV0IGU9dygpO18oInBhZ2VTaXplT3B0aW9ucyIsY3UoNCxESGUpKSgicGFnZUluZGV4IixlLnBhZ2luYXRpb25PcHRpb24ucGFnZUluZGV4KSgicGFnZVNpemUiLGUucGFnaW5hdGlvbk9wdGlvbi5wYWdlU2l6ZSkoImxlbmd0aCIsZS5maWx0ZXJlZEl0ZW1zTGVuZ3RoKX19ZnVuY3Rpb24gQUhlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwibWF0LWNoZWNrYm94IiwyNiksSSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygzKS5oYW5kbGVQYWdlVG9nZ2xlKCkpfSksZygpfWlmKDImbil7bGV0IGU9dygzKTtfKCJjaGVja2VkIixlLmFsbFBhZ2VJdGVtc1NlbGVjdGVkKCkpKCJpbmRldGVybWluYXRlIiwhZS5hbGxQYWdlSXRlbXNTZWxlY3RlZCgpJiZlLnNvbWVQYWdlSXRlbXNTZWxlY3RlZCgpKX19dmFyIEhuZT1mdW5jdGlvbihuKXtyZXR1cm57dHlwZTpufX07ZnVuY3Rpb24gUkhlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwyNyksVCgxLCJFeHBlcmltZW50IiksZygpKSwyJm4pe2xldCBlPXcoMyk7XygibWF0LXNvcnQtaGVhZGVyIixJbigxLEhuZSxlLlNvcnRUeXBlLkVYUEVSSU1FTlRfTkFNRSkpfX1mdW5jdGlvbiBQSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDI3KSxUKDEsIlJ1biIpLGcoKSksMiZuKXtsZXQgZT13KDMpO18oIm1hdC1zb3J0LWhlYWRlciIsSW4oMSxIbmUsZS5Tb3J0VHlwZS5SVU5fTkFNRSkpfX1mdW5jdGlvbiBPSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iKSxQKDEsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iLDI4KSxnKCkpLDImbil7bGV0IGU9dygzKTt2KDEpLF8oImV4cGVyaW1lbnRJZHMiLGUuZXhwZXJpbWVudElkcyl9fXZhciB6bmU9ZnVuY3Rpb24obil7cmV0dXJuWyJjb2x1bW4iLG5dfTtmdW5jdGlvbiBrSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDIxKSxPdCgxLDIyKSxTKDIsQUhlLDEsMiwibWF0LWNoZWNrYm94IiwyMyksUygzLFJIZSwyLDMsInNwYW4iLDI0KSxTKDQsUEhlLDIsMywic3BhbiIsMjQpLFMoNSxPSGUsMiwxLCJzcGFuIiwyNSksa3QoKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO18oIm5nQ2xhc3MiLEluKDYsem5lLCJ0Yi1jb2x1bW4tIitlKSksdigxKSxfKCJuZ1N3aXRjaCIsZSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLkNIRUNLQk9YKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uRVhQRVJJTUVOVF9OQU1FKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uUlVOX05BTUUpLHYoMSksXygibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fQ09MT1IpfX1mdW5jdGlvbiBGSGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7T3QoMCksaCgxLCJkaXYiLDM3KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxoKDIsInRiLXJhbmdlLWlucHV0IiwzOCksSSgicmFuZ2VWYWx1ZXNDaGFuZ2VkIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMikuJGltcGxpY2l0O3JldHVybiBRKHcoMikuaGFuZGxlSHBhcmFtSW50ZXJ2YWxDaGFuZ2VkKG8scikpfSksZygpKCksa3QoKX1pZigyJm4pe2xldCBlPXcoMikuJGltcGxpY2l0O3YoMiksXygibWluIixlLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsZS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixlLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fWZ1bmN0aW9uIE5IZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNDApLEkoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGgoMSwibWF0LWNoZWNrYm94IiwzNiksSSgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0LHM9dygzKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5oYW5kbGVIcGFyYW1EaXNjcmV0ZUNoYW5nZWQocyxvKSl9KSxoKDIsInNwYW4iKSxUKDMpLGcoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMykuJGltcGxpY2l0O3YoMSksXygiY2hlY2tlZCIsaS5maWx0ZXIuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKGUpKSx2KDIpLGJ0KGUpfX1mdW5jdGlvbiBMSGUobix0KXtpZigxJm4mJihPdCgwKSxTKDEsTkhlLDQsMiwiZGl2IiwzOSksa3QoKSksMiZuKXtsZXQgZT13KDIpLiRpbXBsaWNpdDt2KDEpLF8oIm5nRm9yT2YiLGUuZmlsdGVyLnBvc3NpYmxlVmFsdWVzKX19ZnVuY3Rpb24gQkhlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO090KDApLGgoMSwiYnV0dG9uIiwzMiksSSgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksUCgyLCJtYXQtaWNvbiIsMzMpLGcoKSxoKDMsIm1hdC1tZW51IixudWxsLDM0KSg1LCJkaXYiLDM1KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxoKDYsIm1hdC1jaGVja2JveCIsMzYpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5oYW5kbGVIcGFyYW1JbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZChyKSl9KSxoKDcsInNwYW4iKSxUKDgsIihzaG93IGVtcHR5IHZhbHVlKSIpLGcoKSgpKCksUyg5LEZIZSwzLDQsIm5nLWNvbnRhaW5lciIsMzEpLFMoMTAsTEhlLDIsMSwibmctY29udGFpbmVyIiwzMSksZygpLGt0KCl9aWYoMiZuKXtsZXQgZT1pdCg0KSxpPXcoKS4kaW1wbGljaXQscj13KDIpO3YoMSksXygibWF0TWVudVRyaWdnZXJGb3IiLGUpLEJlKCJhcmlhLWxhYmVsIiwiRmlsdGVyIGhwYXJhbSAiKyhpLmRpc3BsYXlOYW1lfHxpLm5hbWUpKSx2KDUpLF8oImNoZWNrZWQiLGkuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQpLHYoMyksXygibmdJZiIsaS5maWx0ZXIudHlwZT09PXIuRG9tYWluVHlwZS5JTlRFUlZBTCksdigxKSxfKCJuZ0lmIixpLmZpbHRlci50eXBlPT09ci5Eb21haW5UeXBlLkRJU0NSRVRFKX19dmFyIFZIZT1mdW5jdGlvbihuLHQpe3JldHVybnt0eXBlOm4sbmFtZTp0fX07ZnVuY3Rpb24gSEhlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwyOSkoMSwic3BhbiIsMzApLFQoMiksZygpLFMoMyxCSGUsMTEsNSwibmctY29udGFpbmVyIiwzMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygyKTtfKCJtYXQtc29ydC1oZWFkZXIiLHFyKDMsVkhlLGkuU29ydFR5cGUuSFBBUkFNLGUubmFtZSkpLHYoMiksYnQoZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSx2KDEpLF8oIm5nSWYiLGUuZmlsdGVyKX19ZnVuY3Rpb24gekhlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO090KDApLGgoMSwiYnV0dG9uIiwzMiksSSgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksUCgyLCJtYXQtaWNvbiIsMzMpLGcoKSxoKDMsIm1hdC1tZW51IixudWxsLDM0KSg1LCJkaXYiLDM1KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxoKDYsIm1hdC1jaGVja2JveCIsMzYpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5oYW5kbGVNZXRyaWNJbmNsdWRlVW5kZWZpbmVkQ2hhbmdlZChyKSl9KSxoKDcsInNwYW4iKSxUKDgsIihzaG93IGVtcHR5IHZhbHVlKSIpLGcoKSgpKCksaCg5LCJkaXYiLDM3KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxoKDEwLCJ0Yi1yYW5nZS1pbnB1dCIsMzgpLEkoInJhbmdlVmFsdWVzQ2hhbmdlZCIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCkuJGltcGxpY2l0O3JldHVybiBRKHcoMikuaGFuZGxlTWV0cmljRmlsdGVyQ2hhbmdlZChvLHIpKX0pLGcoKSgpKCksa3QoKX1pZigyJm4pe2xldCBlPWl0KDQpLGk9dygpLiRpbXBsaWNpdDt2KDEpLF8oIm1hdE1lbnVUcmlnZ2VyRm9yIixlKSxCZSgiYXJpYS1sYWJlbCIsIkZpbHRlciBtZXRyaWMgIisoaS5kaXNwbGF5TmFtZXx8aS50YWcpKSx2KDUpLF8oImNoZWNrZWQiLGkuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQpLHYoNCksXygibWluIixpLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsaS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixpLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsaS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fXZhciBVSGU9ZnVuY3Rpb24obix0KXtyZXR1cm57dHlwZTpuLHRhZzp0fX07ZnVuY3Rpb24gakhlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwyOSkoMSwic3BhbiIsMzApLFQoMiksZygpLFMoMyx6SGUsMTEsNywibmctY29udGFpbmVyIiwzMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygyKTtfKCJtYXQtc29ydC1oZWFkZXIiLHFyKDMsVUhlLGkuU29ydFR5cGUuTUVUUklDLGUudGFnKSksdigyKSxidChlLmRpc3BsYXlOYW1lfHxlLnRhZyksdigxKSxfKCJuZ0lmIixlLmZpbHRlcil9fWZ1bmN0aW9uIEdIZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMTcpKDEsImRpdiIsMTgpLEkoIm1hdFNvcnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmhhbmRsZVNvcnRDaGFuZ2UocikpfSksUygyLGtIZSw2LDgsInNwYW4iLDE5KSxTKDMsSEhlLDQsNiwic3BhbiIsMjApLFMoNCxqSGUsNCw2LCJzcGFuIiwyMCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7digxKSxfKCJtYXRTb3J0QWN0aXZlIixlLnNvcnRPcHRpb24uY29sdW1uKSx2KDEpLF8oIm5nRm9yT2YiLGUuY29sdW1ucyksdigxKSxfKCJuZ0Zvck9mIixlLmhwYXJhbUNvbHVtbnMpKCJuZ0ZvclRyYWNrQnkiLGUudHJhY2tCeUhwYXJhbUNvbHVtbiksdigxKSxfKCJuZ0Zvck9mIixlLm1ldHJpY0NvbHVtbnMpKCJuZ0ZvclRyYWNrQnkiLGUudHJhY2tCeU1ldHJpY0NvbHVtbil9fWZ1bmN0aW9uIFdIZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNwYW4iKSgxLCJtYXQtY2hlY2tib3giLDQ3KSxJKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KDIpLml0ZW07cmV0dXJuIFEodygpLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQocikpfSkoImRibGNsaWNrIixmdW5jdGlvbigpe1goZSk7bGV0IHI9dygyKS5pdGVtO3JldHVybiBRKHcoKS5vblNlbGVjdGlvbkRibENsaWNrLmVtaXQoci5ydW4uaWQpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygyKS5pdGVtO3YoMSksXygiY2hlY2tlZCIsZS5zZWxlY3RlZCl9fWZ1bmN0aW9uIHFIZShuLHQpe2lmKDEmbiYmUCgwLCJ0Yi1leHBlcmltZW50LWFsaWFzIiw0OCksMiZuKXtsZXQgZT13KDIpLml0ZW07XygiYWxpYXMiLGUuZXhwZXJpbWVudEFsaWFzKSgidGl0bGUiLGUuZXhwZXJpbWVudE5hbWUpfX1mdW5jdGlvbiBZSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDMwKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpLml0ZW07digxKSxidChlLnJ1bi5uYW1lKX19dmFyIFhIZT1mdW5jdGlvbihuKXtyZXR1cm57InJ1bi1jb2xvci1zd2F0Y2giOiEwLCJuby1jb2xvciI6bn19O2Z1bmN0aW9uIFFIZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNwYW4iKSgxLCJidXR0b24iLDQ5KSxJKCJjb2xvclBpY2tlckNoYW5nZSIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KDIpLml0ZW07cmV0dXJuIFEodygpLm9uUnVuQ29sb3JDaGFuZ2UuZW1pdCh7cnVuSWQ6by5ydW4uaWQsbmV3Q29sb3I6cn0pKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygyKS5pdGVtO3YoMSksVHQoImJhY2tncm91bmQiLGUucnVuQ29sb3IpLF8oIm5nQ2xhc3MiLEluKDgsWEhlLCFlLnJ1bkNvbG9yKSkoImNvbG9yUGlja2VyIixlLnJ1bkNvbG9yKSgiY3BEaWFsb2dEaXNwbGF5IiwicG9wdXAiKSgiY3BQb3NpdGlvbk9mZnNldCIsLTIwKSgiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsITApKCJjcE91dHB1dEZvcm1hdCIsImhleCIpfX1mdW5jdGlvbiBaSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDQ0KSxPdCgxLDIyKSxTKDIsV0hlLDIsMSwic3BhbiIsMjUpLFMoMyxxSGUsMSwyLCJ0Yi1leHBlcmltZW50LWFsaWFzIiw0NSksUyg0LFlIZSwyLDEsInNwYW4iLDQ2KSxTKDUsUUhlLDIsMTAsInNwYW4iLDI1KSxrdCgpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMik7XygibmdDbGFzcyIsSW4oNix6bmUsInRiLWNvbHVtbi0iK2UpKSx2KDEpLF8oIm5nU3dpdGNoIixlKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uQ0hFQ0tCT1gpLHYoMSksXygibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLHYoMSksXygibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9DT0xPUil9fWZ1bmN0aW9uIEtIZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsNTApLFQoMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpLml0ZW07digxKSxidChpLmhwYXJhbXMuZ2V0KGUubmFtZSkpfX1mdW5jdGlvbiBKSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDUwKSxUKDEpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKS5pdGVtO3YoMSksYnQoaS5tZXRyaWNzLmdldChlLnRhZykpfX1mdW5jdGlvbiAkSGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNDEpLFMoMSxaSGUsNiw4LCJzcGFuIiw0MiksUygyLEtIZSwyLDEsInNwYW4iLDQzKSxTKDMsSkhlLDIsMSwic3BhbiIsNDMpLGcoKSksMiZuKXtsZXQgZT10Lml0ZW0saT13KCk7QmUoImRhdGEtaWQiLGUucnVuLmlkKSx2KDEpLF8oIm5nRm9yT2YiLGkuY29sdW1ucyksdigxKSxfKCJuZ0Zvck9mIixpLmhwYXJhbUNvbHVtbnMpLHYoMSksXygibmdGb3JPZiIsaS5tZXRyaWNDb2x1bW5zKX19dmFyIGU1ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQ217Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9IlNob3cgcnVuczoifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksVW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmRhdGFTb3VyY2U9bmV3IHlBLHRoaXMuRG9tYWluVHlwZT1nbix0aGlzLlJ1bnNUYWJsZUNvbHVtbj1icyx0aGlzLlNvcnRUeXBlPUljLHRoaXMub25SZWdleEZpbHRlckNoYW5nZT1uZXcgRix0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlPW5ldyBGLHRoaXMub25TZWxlY3Rpb25EYmxDbGljaz1uZXcgRix0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZT1uZXcgRix0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZT1uZXcgRix0aGlzLm9uU29ydENoYW5nZT1uZXcgRix0aGlzLm9uUnVuQ29sb3JDaGFuZ2U9bmV3IEYsdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZD1uZXcgRix0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkPW5ldyBGLHRoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkPW5ldyBGfW5nT25DaGFuZ2VzKCl7dGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5wYWdlSXRlbXN9Z2V0SHBhcmFtQ29sdW1uSWQoZSl7cmV0dXJuYGg6JHtlLm5hbWV9YH1nZXRNZXRyaWNDb2x1bW5JZChlKXtyZXR1cm5gbToke2UudGFnfWB9Z2V0Q29sdW1uSWRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1ucywuLi50aGlzLmhwYXJhbUNvbHVtbnMubWFwKHRoaXMuZ2V0SHBhcmFtQ29sdW1uSWQpLC4uLnRoaXMubWV0cmljQ29sdW1ucy5tYXAodGhpcy5nZXRNZXRyaWNDb2x1bW5JZCldfWFsbFBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5wYWdlSXRlbXMubGVuZ3RoKSYmdGhpcy5wYWdlSXRlbXMuZXZlcnkoZT0+ZS5zZWxlY3RlZCl9c29tZVBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMucGFnZUl0ZW1zLnNvbWUoZT0+ZS5zZWxlY3RlZCl9aGFuZGxlUGFnZVRvZ2dsZSgpe3RoaXMub25QYWdlU2VsZWN0aW9uVG9nZ2xlLmVtaXQoe2l0ZW1zOnRoaXMucGFnZUl0ZW1zfSl9aGFuZGxlU29ydENoYW5nZShlKXtsZXQgaTtzd2l0Y2goZS5kaXJlY3Rpb24pe2Nhc2UiYXNjIjppPVlhLkFTQzticmVhaztjYXNlImRlc2MiOmk9WWEuREVTQzticmVhaztkZWZhdWx0Omk9WWEuVU5TRVR9dGhpcy5vblNvcnRDaGFuZ2UuZW1pdCh7a2V5OmUuYWN0aXZlLGRpcmVjdGlvbjppfSl9b25GaWx0ZXJLZXlVcChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9dGFibGVUcmFja0J5KGUsaSl7cmV0dXJuIGkucnVuLmlkfWhhbmRsZUhwYXJhbUluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKGUpe2xldHtuYW1lOmksZmlsdGVyOnJ9PWU7aWYoIXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3IudHlwZT09PWduLkRJU0NSRVRFP3RoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTppLGluY2x1ZGVVbmRlZmluZWQ6IXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJWYWx1ZXM6ci5maWx0ZXJWYWx1ZXN9KTp0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOiFyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTpyLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTpyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQoZSxpKXtsZXR7bmFtZTpyLGZpbHRlcjpvfT1lO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6cixpbmNsdWRlVW5kZWZpbmVkOm8uaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfWhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChlLGkpe2xldHtuYW1lOnIsZmlsdGVyOm99PWU7aWYoIW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO2lmKG8udHlwZSE9PWduLkRJU0NSRVRFKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGV4cGVjdGVkIGRpc2NyZXRlIGRvbWFpbiBmb3IgJHtyfWApO2xldCBzPW5ldyBTZXQoWy4uLm8uZmlsdGVyVmFsdWVzXSk7cy5oYXMoaSk/cy5kZWxldGUoaSk6cy5hZGQoaSksdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZC5lbWl0KHtocGFyYW1OYW1lOnIsaW5jbHVkZVVuZGVmaW5lZDpvLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOlsuLi5zXX0pfWhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKGUpe2lmKCFlLmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTplLnRhZyxpbmNsdWRlVW5kZWZpbmVkOiFlLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6ZS5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKGUsaSl7aWYoIWUuZmlsdGVyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOmUudGFnLGluY2x1ZGVVbmRlZmluZWQ6ZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfXRyYWNrQnlIcGFyYW1Db2x1bW4oZSl7cmV0dXJuIGUubmFtZX10cmFja0J5TWV0cmljQ29sdW1uKGUpe3JldHVybiBlLnRhZ319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy10YWJsZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UoeUhlLDcsTWUpLEdlKGJBLDcpLEdlKCR4LDcpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLmZpbHRlcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5wYWdpbmF0b3I9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuc29ydD1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgiZmxleC1sYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpfSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dFeHBlcmltZW50TmFtZToic2hvd0V4cGVyaW1lbnROYW1lIixjb2x1bW5zOiJjb2x1bW5zIixocGFyYW1Db2x1bW5zOiJocGFyYW1Db2x1bW5zIixtZXRyaWNDb2x1bW5zOiJtZXRyaWNDb2x1bW5zIixhbGxJdGVtc0xlbmd0aDoiYWxsSXRlbXNMZW5ndGgiLGZpbHRlcmVkSXRlbXNMZW5ndGg6ImZpbHRlcmVkSXRlbXNMZW5ndGgiLHVzZUZsZXhpYmxlTGF5b3V0OiJ1c2VGbGV4aWJsZUxheW91dCIsdXNlUGFnaW5hdGlvbjoidXNlUGFnaW5hdGlvbiIscGFnZUl0ZW1zOiJwYWdlSXRlbXMiLGxvYWRpbmc6ImxvYWRpbmciLG51bVNlbGVjdGVkSXRlbXM6Im51bVNlbGVjdGVkSXRlbXMiLHNvcnRPcHRpb246InNvcnRPcHRpb24iLHBhZ2luYXRpb25PcHRpb246InBhZ2luYXRpb25PcHRpb24iLHJlZ2V4RmlsdGVyOiJyZWdleEZpbHRlciJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJDaGFuZ2UiLG9uU2VsZWN0aW9uVG9nZ2xlOiJvblNlbGVjdGlvblRvZ2dsZSIsb25TZWxlY3Rpb25EYmxDbGljazoib25TZWxlY3Rpb25EYmxDbGljayIsb25QYWdlU2VsZWN0aW9uVG9nZ2xlOiJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLG9uUGFnaW5hdGlvbkNoYW5nZToib25QYWdpbmF0aW9uQ2hhbmdlIixvblNvcnRDaGFuZ2U6Im9uU29ydENoYW5nZSIsb25SdW5Db2xvckNoYW5nZToib25SdW5Db2xvckNoYW5nZSIsb25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQ6Im9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZDoib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLG9uTWV0cmljRmlsdGVyQ2hhbmdlZDoib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIn0sZmVhdHVyZXM6W1F0KFt7cHJvdmlkZTpDbSx1c2VDbGFzczplNWV9XSksR3RdLGRlY2xzOjE1LHZhcnM6OCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsInZhbHVlIiwia2V5dXAiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJyb2xlIiwidGFibGUiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJyb3dzIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiY2xhc3MiLCJsb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXJ1bnMiLDQsIm5nSWYiXSxbInNob3dGaXJzdExhc3RCdXR0b25zIiwiIiwzLCJwYWdlU2l6ZU9wdGlvbnMiLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsImxlbmd0aCIsInBhZ2UiLDQsIm5nSWYiXSxbImhlYWRlciIsIiJdLFsicm93IiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJsb2FkaW5nIl0sWyJtb2RlIiwiaW5kZXRlcm1pbmF0ZSIsImRpYW1ldGVyIiwiMjgiXSxbMSwibm8tcnVucyJdLFsic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiLCIiLDMsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VJbmRleCIsInBhZ2VTaXplIiwibGVuZ3RoIiwicGFnZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJoZWFkZXIiXSxbIm1hdFNvcnQiLCIiLCJyb2xlIiwicm93IiwzLCJtYXRTb3J0QWN0aXZlIiwibWF0U29ydENoYW5nZSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nU3dpdGNoIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywibWF0LXNvcnQtaGVhZGVyIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIl0sWzMsIm1hdC1zb3J0LWhlYWRlciJdLFszLCJleHBlcmltZW50SWRzIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciJdLFsxLCJuYW1lIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJjbGljayJdLFsic3ZnSWNvbiIsImZpbHRlcl9hbHRfMjRweCJdLFsiZmlsdGVyTWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsImRpc2FibGVSaXBwbGUiLCIiLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsiZGlzYWJsZVJpcHBsZSIsIiIsIm1hdC1tZW51LWl0ZW0iLCIiLDEsInJhbmdlLWlucHV0LWNvbnRhaW5lciIsMywiY2xpY2siXSxbMywibWluIiwibWF4IiwibG93ZXJWYWx1ZSIsInVwcGVyVmFsdWUiLCJyYW5nZVZhbHVlc0NoYW5nZWQiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJjbGFzcyIsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsInJvbGUiLCJtZW51aXRlbWNoZWNrYm94IiwzLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbInJvbGUiLCJyb3ciXSxbInJvbGUiLCJjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjZWxsIiwiY2xhc3MiLCJjb2x1bW4iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNlbGwiLDMsIm5nQ2xhc3MiXSxbMywiYWxpYXMiLCJ0aXRsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsIm5hbWUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsidGl0bGUiLCJDbGljayB0byB0b2dnbGUgcnVuIHNlbGVjdGlvbiBvciBkb3VibGUgY2xpY2sgdG8gc2VsZWN0IG9ubHkgdGhpcyBydW4uIiwzLCJjaGVja2VkIiwiY2hhbmdlIiwiZGJsY2xpY2siXSxbMywiYWxpYXMiLCJ0aXRsZSJdLFszLCJuZ0NsYXNzIiwiY29sb3JQaWNrZXIiLCJjcERpYWxvZ0Rpc3BsYXkiLCJjcFBvc2l0aW9uT2Zmc2V0IiwiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsImNwT3V0cHV0Rm9ybWF0IiwiY29sb3JQaWNrZXJDaGFuZ2UiXSxbInJvbGUiLCJjZWxsIiwxLCJjb2x1bW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwidGItZmlsdGVyLWlucHV0IiwxKSxJKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GaWx0ZXJLZXlVcChvKX0pLGcoKSgpLGgoMiwiZGl2IiwyKSgzLCJkaXYiLDMpLFMoNCx4SGUsMSwwLCJuZy1jb250YWluZXIiLDQpLGgoNSwiZGl2Iiw1KSxTKDYsd0hlLDIsNCwibmctY29udGFpbmVyIiw2KSxnKCkoKSxTKDcsU0hlLDIsMCwiZGl2Iiw3KSxTKDgsRUhlLDIsMCwiZGl2Iiw4KSxTKDksVEhlLDYsMSwiZGl2Iiw4KSxnKCksUygxMCxJSGUsMSw1LCJtYXQtcGFnaW5hdG9yIiw5KSxTKDExLEdIZSw1LDYsIm5nLXRlbXBsYXRlIixudWxsLDEwLFd0KSxTKDEzLCRIZSw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDExLFd0KSksMiZlKXtsZXQgcj1pdCgxMik7digxKSxXaSgidmFsdWUiLGkucmVnZXhGaWx0ZXIpLHYoMyksXygibmdUZW1wbGF0ZU91dGxldCIsciksdigyKSxfKCJuZ0Zvck9mIixpLnBhZ2VJdGVtcykoIm5nRm9yVHJhY2tCeSIsaS50YWJsZVRyYWNrQnkpLHYoMSksXygibmdJZiIsaS5sb2FkaW5nKSx2KDEpLF8oIm5nSWYiLCFpLmxvYWRpbmcmJjA9PT1pLmFsbEl0ZW1zTGVuZ3RoKSx2KDEpLF8oIm5nSWYiLCFpLmxvYWRpbmcmJmkuYWxsSXRlbXNMZW5ndGg+MCYmMD09PWkuZmlsdGVyZWRJdGVtc0xlbmd0aCksdigxKSxfKCJuZ0lmIixpLnVzZVBhZ2luYXRpb24pfX0sZGVwZW5kZW5jaWVzOltnQSx5bixubixGZSxMcixzcixTcixRdSxTcCwkaSxoYSxFbixOYyxqbCxMYyxiQSx0bCwkeCxPbmUsZEEsX0FdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXNpemU6MTNweDtvdmVyZmxvdzpoaWRkZW59LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmxheW91dCBwYWludDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259LmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmctYm90dG9tOjEycHh9Ym9keS5kYXJrLW1vZGUgICAuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6dGFibGUtcm93O2hlaWdodDo0M3B4fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MjRweH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MjRweH1bcm9sZT1yb3dncm91cF1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtcm93LWdyb3VwfVtyb2xlPXJvd2dyb3VwXS5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtaGVhZGVyLWdyb3VwfS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnNlbGVjdC1hbGxbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEycHg7cGFkZGluZy10b3A6MTJweH0uc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpsZWZ0fS5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo1MDA7cGFkZGluZzowIDRweH0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4IDAgMjFweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9LnRiLWNvbHVtbi1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0sIC50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4fS50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ucnVuLWNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O291dGxpbmU6bm9uZX0ucnVuLWNvbG9yLXN3YXRjaC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNjNmNhZDE7Ym9yZGVyLXdpZHRoOjJweH0ucmFuZ2UtaW5wdXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6YXV0b31bX25naG9zdC0lQ09NUCVdICAgICBtYXQtcGFnaW5hdG9yIG1hdC1mb3JtLWZpZWxke21hcmdpbjowfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWx7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcn0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OjB9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbCAubWF0LWNoZWNrYm94LWxhYmVse292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBuNWUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJydW5zLXRhYmxlLWNvbXBvbmVudCIsMiksSSgib25TZWxlY3Rpb25Ub2dnbGUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uUnVuSXRlbVNlbGVjdGlvblRvZ2dsZShyKSl9KSgib25TZWxlY3Rpb25EYmxDbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5TZWxlY3Rpb25EYmxDbGljayhyKSl9KSgib25QYWdlU2VsZWN0aW9uVG9nZ2xlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblBhZ2VTZWxlY3Rpb25Ub2dnbGUocikpfSkoIm9uUGFnaW5hdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25QYWdpbmF0aW9uQ2hhbmdlKHIpKX0pKCJvblJlZ2V4RmlsdGVyQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblJlZ2V4RmlsdGVyQ2hhbmdlKHIpKX0pKCJvblNvcnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uU29ydENoYW5nZShyKSl9KSgib25SdW5Db2xvckNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5Db2xvckNoYW5nZShyKSl9KSgib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkKHIpKX0pKCJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQocikpfSkoIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25NZXRyaWNGaWx0ZXJDaGFuZ2VkKHIpKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksaig5LCJhc3luYyIpLGooMTAsImFzeW5jIiksZygpfWlmKDImbil7bGV0IGU9dygpO18oImV4cGVyaW1lbnRJZHMiLGUuZXhwZXJpbWVudElkcykoInVzZUZsZXhpYmxlTGF5b3V0IixlLnVzZUZsZXhpYmxlTGF5b3V0KSgibnVtU2VsZWN0ZWRJdGVtcyIsVygxLDE1LGUubnVtU2VsZWN0ZWRJdGVtcyQpKSgiY29sdW1ucyIsZS5jb2x1bW5zKSgiaHBhcmFtQ29sdW1ucyIsVygyLDE3LGUuaHBhcmFtQ29sdW1ucyQpKSgibWV0cmljQ29sdW1ucyIsVygzLDE5LGUubWV0cmljQ29sdW1ucyQpKSgic2hvd0V4cGVyaW1lbnROYW1lIixlLmlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCkpKCJwYWdlSXRlbXMiLFcoNCwyMSxlLnBhZ2VJdGVtcyQpKSgiZmlsdGVyZWRJdGVtc0xlbmd0aCIsVyg1LDIzLGUuZmlsdGVyZWRJdGVtc0xlbmd0aCQpKSgiYWxsSXRlbXNMZW5ndGgiLFcoNiwyNSxlLmFsbEl0ZW1zTGVuZ3RoJCkpKCJsb2FkaW5nIixXKDcsMjcsZS5sb2FkaW5nJCkpKCJwYWdpbmF0aW9uT3B0aW9uIixXKDgsMjksZS5wYWdpbmF0aW9uT3B0aW9uJCkpKCJyZWdleEZpbHRlciIsVyg5LDMxLGUucmVnZXhGaWx0ZXIkKSkoInNvcnRPcHRpb24iLFcoMTAsMzMsZS5zb3J0T3B0aW9uJCkpKCJ1c2VQYWdpbmF0aW9uIixlLnVzZVBhZ2luYXRpb24pfX1mdW5jdGlvbiBpNWUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJydW5zLWRhdGEtdGFibGUiLDMpLEkoInNvcnREYXRhQnkiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnNvcnREYXRhQnkocikpfSkoIm9yZGVyQ29sdW1ucyIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub3JkZXJDb2x1bW5zKHIpKX0pKCJvblNlbGVjdGlvblRvZ2dsZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5TZWxlY3Rpb25Ub2dnbGUocikpfSkoIm9uQWxsU2VsZWN0aW9uVG9nZ2xlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFsbFNlbGVjdGlvblRvZ2dsZShyKSl9KSgib25SdW5Db2xvckNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5Db2xvckNoYW5nZShyKSl9KSgib25SZWdleEZpbHRlckNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SZWdleEZpbHRlckNoYW5nZShyKSl9KSgib25TZWxlY3Rpb25EYmxDbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5TZWxlY3Rpb25EYmxDbGljayhyKSl9KSgidG9nZ2xlRnVsbFNjcmVlbiIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS50b2dnbGVGdWxsU2NyZWVuKCkpfSkoImFkZENvbHVtbiIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuYWRkQ29sdW1uKHIpKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnJlbW92ZUNvbHVtbihyKSl9KSgiYWRkRmlsdGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5hZGRIcGFyYW1GaWx0ZXIocikpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygiaGVhZGVycyIsVygxLDksZS5ydW5zQ29sdW1ucyQpKSgiZGF0YSIsVygyLDExLGUuc29ydGVkUnVuc1RhYmxlRGF0YSQpKSgic2VsZWN0YWJsZUNvbHVtbnMiLFcoMywxMyxlLnNlbGVjdGFibGVDb2x1bW5zJCkpKCJjb2x1bW5GaWx0ZXJzIixXKDQsMTUsZS5jb2x1bW5GaWx0ZXJzJCkpKCJzb3J0aW5nSW5mbyIsVyg1LDE3LGUuc29ydGluZ0luZm8kKSkoImV4cGVyaW1lbnRJZHMiLGUuZXhwZXJpbWVudElkcykoInJlZ2V4RmlsdGVyIixXKDYsMTksZS5yZWdleEZpbHRlciQpKSgiaXNGdWxsU2NyZWVuIixXKDcsMjEsZS5ydW5zVGFibGVGdWxsU2NyZWVuJCkpKCJsb2FkaW5nIixXKDgsMjMsZS5sb2FkaW5nJCkpfX12YXIgcjVlPXEoRXYsbj0+bi5zdGF0ZT09PVRlLkxPQURJTkcpO2Z1bmN0aW9uIGpuZShuLHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgSWMuRVhQRVJJTUVOVF9OQU1FOnJldHVybltuLmV4cGVyaW1lbnRBbGlhcyxuLnJ1bi5uYW1lLG4ucnVuLmlkXTtjYXNlIEljLlJVTl9OQU1FOnJldHVybltuLnJ1bi5uYW1lLG4uZXhwZXJpbWVudEFsaWFzLG4ucnVuLmlkXTtjYXNlIEljLkhQQVJBTTpyZXR1cm5bbi5ocGFyYW1zLmdldCh0Lm5hbWUpLG4ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2Nhc2UgSWMuTUVUUklDOnJldHVybltuLm1ldHJpY3MuZ2V0KHQudGFnKSxuLnJ1bi5uYW1lLG4uZXhwZXJpbWVudEFsaWFzLG4ucnVuLmlkXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZDogJHt0fWApfX1mdW5jdGlvbiBHbmUobix0KXtyZXR1cm4gdm9pZCAwPT09dD9uLmluY2x1ZGVVbmRlZmluZWQ6bi50eXBlPT09Z24uRElTQ1JFVEU/bi5maWx0ZXJWYWx1ZXMuaW5jbHVkZXModCk6bi50eXBlPT09Z24uSU5URVJWQUwmJm4uZmlsdGVyTG93ZXJWYWx1ZTw9dCYmdDw9bi5maWx0ZXJVcHBlclZhbHVlfXZhciBXbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zb3J0ZWRSdW5zVGFibGVEYXRhJD1IdChbXSksdGhpcy5sb2FkaW5nJD1udWxsLHRoaXMuc29ydGluZ0luZm8kPXRoaXMuc3RvcmUuc2VsZWN0KFdXKSx0aGlzLmhwYXJhbUNvbHVtbnMkPUh0KFtdKSx0aGlzLm1ldHJpY0NvbHVtbnMkPUh0KFtdKSx0aGlzLnVzZUZsZXhpYmxlTGF5b3V0PSExLHRoaXMudXNlUGFnaW5hdGlvbj0hMSx0aGlzLmNvbHVtbnM9W2JzLlJVTl9OQU1FXSx0aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcz0hMSx0aGlzLmZvcmNlTGVnYWN5VGFibGU9ITEsdGhpcy5zb3J0T3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChlMiksdGhpcy5wYWdpbmF0aW9uT3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdCgkRiksdGhpcy5yZWdleEZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QodmQpLHRoaXMuaHBhcmFtc0VuYWJsZWQ9bmV3IEFpKCExKSx0aGlzLnJ1bnNDb2x1bW5zJD10aGlzLnN0b3JlLnNlbGVjdChHVyksdGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJD10aGlzLnN0b3JlLnNlbGVjdChMaCksdGhpcy5zZWxlY3RhYmxlQ29sdW1ucyQ9dGhpcy5zdG9yZS5zZWxlY3Qoa04pLnBpcGUoTGkodGhpcy5ydW5zQ29sdW1ucyQpLE4oKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQoci5tYXAoKHtuYW1lOnN9KT0+cykpO3JldHVybiBpLmZpbHRlcihzPT4hby5oYXMocy5uYW1lKSl9KSksdGhpcy5jb2x1bW5GaWx0ZXJzJD10aGlzLnN0b3JlLnNlbGVjdChNUSksdGhpcy5hbGxSdW5zVGFibGVEYXRhJD10aGlzLnN0b3JlLnNlbGVjdChPTikucGlwZShOKGk9PmkubWFwKHI9Pih7Li4uT2JqZWN0LmZyb21FbnRyaWVzKHIuaHBhcmFtcy5lbnRyaWVzKCkpLGlkOnIucnVuLmlkLHJ1bjpyLnJ1bi5uYW1lLGV4cGVyaW1lbnRBbGlhczpyLmV4cGVyaW1lbnRBbGlhcyxzZWxlY3RlZDpyLnNlbGVjdGVkLGNvbG9yOnIucnVuQ29sb3J9KSkpKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEllfWlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5zb21lKGU9PmU9PT1icy5FWFBFUklNRU5UX05BTUUpfW5nT25Jbml0KCl7dGhpcy5zdG9yZS5zZWxlY3QobWQpLnN1YnNjcmliZShzPT57dGhpcy5ocGFyYW1zRW5hYmxlZC5uZXh0KHMpfSk7bGV0IGU9dGhpcy5leHBlcmltZW50SWRzLm1hcChzPT50aGlzLmdldFJ1blRhYmxlSXRlbXNGb3JFeHBlcmltZW50KHMpKTt0aGlzLnNvcnRlZFJ1bnNUYWJsZURhdGEkPWRuKFt0aGlzLmFsbFJ1bnNUYWJsZURhdGEkLHRoaXMuc29ydGluZ0luZm8kXSkucGlwZShOKChbcyxhXSk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9Wy4uLm5dO3JldHVybiBlLnNvcnQoKHIsbyk9PntsZXQgcz1yW3QubmFtZV0sYT1vW3QubmFtZV07aWYoImV4cGVyaW1lbnRBbGlhcyI9PT10Lm5hbWUmJihzPXMuYWxpYXNOdW1iZXIsYT1hLmFsaWFzTnVtYmVyKSxzPT09YSlyZXR1cm4gMDtpZih2b2lkIDA9PT1zfHx2b2lkIDA9PT1hKXJldHVybiBpKHMsYSk7aWYobW5lLmhhcyh0eXBlb2YgcykmJm1uZS5oYXModHlwZW9mIGEpKXtsZXQgbD1obmUocyksYz1obmUoYSk7aWYoKHZvaWQgMD09PWx8fHZvaWQgMD09PWMpJiZsIT09YylyZXR1cm4gaShsLGMse2luc2VydFVuZGVmaW5lZDpFcC5CRUZPUkV9KTtpZih2b2lkIDAhPT1sJiZ2b2lkIDAhPT1jKXJldHVybiBsPT09Yz9pKHMudG9TdHJpbmcoKS5zbGljZShsLnRvU3RyaW5nKCkubGVuZ3RoKXx8dm9pZCAwLGEudG9TdHJpbmcoKS5zbGljZShjLnRvU3RyaW5nKCkubGVuZ3RoKXx8dm9pZCAwLHtpbnNlcnRVbmRlZmluZWQ6RXAuQkVGT1JFfSk6aShsLGMpfXJldHVybiBpKHMsYSl9KSxlO2Z1bmN0aW9uIGkocixvLHtpbnNlcnRVbmRlZmluZWQ6c309bVZlKXtyZXR1cm4gcj09PW8/MDp2b2lkIDA9PT1yP3M9PT1FcC5BRlRFUj8xOi0xOnZvaWQgMD09PW8/cz09PUVwLkFGVEVSPy0xOjE6cjxvPT0odC5vcmRlcj09PWlvLkFTQ0VORElORyk/LTE6MX19KHMsYSkpKTtsZXQgaT1kbihlKS5waXBlKE4ocz0+W10uY29uY2F0KC4uLnMpKSk7dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkPWkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE1zKDEpKSx0aGlzLmFsbEl0ZW1zTGVuZ3RoJD10aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQucGlwZShOKHM9PnMubGVuZ3RoKSk7bGV0IHI9dGhpcy5nZXRGaWx0ZXJlZEl0ZW1zJCh0aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxNcygxKSk7dGhpcy5maWx0ZXJlZEl0ZW1zTGVuZ3RoJD1yLnBpcGUoTihzPT5zLmxlbmd0aCkpLHRoaXMucGFnZUl0ZW1zJD10aGlzLnNvcnRlZEFuZFNsaWNlZEl0ZW1zJChyKSx0aGlzLm51bVNlbGVjdGVkSXRlbXMkPXRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJC5waXBlKE4ocz0+cy5yZWR1Y2UoKGEsbCk9PmErTnVtYmVyKGwuc2VsZWN0ZWQpLDApKSk7bGV0IG89dGhpcy5leHBlcmltZW50SWRzLm1hcChzPT50aGlzLnN0b3JlLnNlbGVjdChyNWUse2V4cGVyaW1lbnRJZDpzfSkpO2lmKHRoaXMubG9hZGluZyQ9ZG4obykucGlwZShOKHM9PnMuc29tZShhPT5hKSkpLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKXtsZXQgcz10aGlzLnN0b3JlLnNlbGVjdChUdS5nZXRFeHBlcmltZW50c0hwYXJhbXNBbmRNZXRyaWNzU3BlY3Mse2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfSk7dGhpcy5ocGFyYW1Db2x1bW5zJD1kbihbdGhpcy5zdG9yZS5zZWxlY3QoVHUuZ2V0SHBhcmFtRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoTigoW2Ese2hwYXJhbXM6bH1dKT0+bC5tYXAoKHtuYW1lOmMsZGlzcGxheU5hbWU6ZH0pPT57bGV0IHA9YS5nZXQoYyk7aWYoIXApdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogYSBmaWx0ZXIgZm9yICR7Y30gbXVzdCBleGlzdCB3aGVuIHRoZSBocGFyYW0gZXhpc3RzYCk7cmV0dXJue2Rpc3BsYXlOYW1lOmQsbmFtZTpjLGZpbHRlcjpwfX0pKSksdGhpcy5tZXRyaWNDb2x1bW5zJD1kbihbdGhpcy5zdG9yZS5zZWxlY3QoVHUuZ2V0TWV0cmljRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoTigoW2Ese21ldHJpY3M6bH1dKT0+bC5tYXAoKHt0YWc6YyxkaXNwbGF5TmFtZTpkfSk9PntsZXQgdT1hLmdldChjKTtpZighdSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGZpbHRlciBmb3IgJHtjfSBtdXN0IGV4aXN0IHdoZW4gdGhlIG1ldHJpYyBleGlzdHNgKTtyZXR1cm57ZGlzcGxheU5hbWU6ZCx0YWc6YyxmaWx0ZXI6dX19KSkpfXRoaXMuY29sdW1ucy5pbmNsdWRlcyhicy5DSEVDS0JPWCkmJnRoaXMuc3RvcmUuc2VsZWN0KE5vKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksWW4oKGEsbCk9PkZvKGEsbCkpLEpuKCgpPT5pLnBpcGUoa2UoYT0+YS5sZW5ndGg+NTAwKSxZdCgxKSkpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEpoKHtsb2NhbGl6ZWRNZXNzYWdlOiJUaGUgbnVtYmVyIG9mIHJ1bnMgZXhjZWVkcyA1MDAuIE5ldyBydW5zIGFyZSB1bnNlbGVjdGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiJ9KSl9KSx0aGlzLnN0b3JlLmRpc3BhdGNoKFZoKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0RmlsdGVyZWRJdGVtcyQoZSl7cmV0dXJuIGRuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KHZkKV0pLnBpcGUoTigoW2kscl0pPT57aWYoIXIpcmV0dXJuIGk7bGV0IG89dGhpcy5jb2x1bW5zLmluY2x1ZGVzKGJzLkVYUEVSSU1FTlRfTkFNRSk7cmV0dXJuIGkuZmlsdGVyKHM9PlFoKHtydW5OYW1lOnMucnVuLm5hbWUsZXhwZXJpbWVudEFsaWFzOnMuZXhwZXJpbWVudEFsaWFzfSxyLG8pKX0pLEpuKGk9PnRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzP2RuKHRoaXMuc3RvcmUuc2VsZWN0KFR1LmdldEhwYXJhbUZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpLHRoaXMuc3RvcmUuc2VsZWN0KFR1LmdldE1ldHJpY0ZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpKS5waXBlKE4oKFtyLG9dKT0+aS5maWx0ZXIoKHtocGFyYW1zOnMsbWV0cmljczphfSk9PlsuLi5yLmVudHJpZXMoKV0uZXZlcnkoKFtjLGRdKT0+R25lKGQscy5nZXQoYykpKSYmWy4uLm8uZW50cmllcygpXS5ldmVyeSgoW2MsZF0pPT5HbmUoZCxhLmdldChjKSkpKSkpOkh0KGkpKSl9c29ydGVkQW5kU2xpY2VkSXRlbXMkKGUpe2xldCBpPWRuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KGUyKV0pLnBpcGUoTigoW28sc10pPT5mdW5jdGlvbihuLHQpe2xldCBlPXQua2V5LGk9Wy4uLm5dO3JldHVybiBudWxsPT09ZXx8dC5kaXJlY3Rpb249PT1ZYS5VTlNFVHx8aS5zb3J0KChyLG8pPT57bGV0IHM9am5lKHIsZSksYT1qbmUobyxlKTtpZihzLmxlbmd0aCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGdpdmVuIHNvcnQgc2hvdWxkIHJlc3VsdCBpbiBzYW1lIG51bWJlciBvZiBpdGVtczogJHt0fWApO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdLGQ9YVtsXTtpZihjIT09ZCl7aWYodm9pZCAwPT09Y3x8dm9pZCAwPT09ZClyZXR1cm4gdm9pZCAwPT09ZD8tMToxO2lmKHR5cGVvZiBjIT10eXBlb2YgZCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb21wYXJlIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXM6ICR7dHlwZW9mIGN9IHZzLiAke3R5cGVvZiBkfWApO3JldHVybiBjPGQ9PSh0LmRpcmVjdGlvbj09PVlhLkFTQyk/LTE6MX19cmV0dXJuIDB9KSxpfShvLHMpKSk7cmV0dXJuIGRuKFtpLHRoaXMuc3RvcmUuc2VsZWN0KCRGKV0pLnBpcGUoTigoW28sc10pPT57aWYoIXRoaXMudXNlUGFnaW5hdGlvbilyZXR1cm4gby5zbGljZSgpO2xldHtwYWdlU2l6ZTphLHBhZ2VJbmRleDpsfT1zO3JldHVybiBvLnNsaWNlKGwqYSwobCsxKSphKX0pLHFuKFtdKSl9c29ydERhdGFCeShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEFTKHtzb3J0aW5nSW5mbzplfSkpfWdldFJ1blRhYmxlSXRlbXNGb3JFeHBlcmltZW50KGUpe3JldHVybiBkbihbdGhpcy5zdG9yZS5zZWxlY3QoRHUse2V4cGVyaW1lbnRJZDplfSksdGhpcy5zdG9yZS5zZWxlY3QoQlMse2V4cGVyaW1lbnRJZDplfSksdGhpcy5zdG9yZS5zZWxlY3QoSXUpLHRoaXMuc3RvcmUuc2VsZWN0KEF1KSx0aGlzLnN0b3JlLnNlbGVjdCh6YSldKS5waXBlKE4oKFtpLHIsbyxzLGFdKT0+aS5tYXAobD0+e2xldCBjPW5ldyBNYXA7KGwuaHBhcmFtc3x8W10pLmZvckVhY2godT0+e2Muc2V0KHUubmFtZSx1LnZhbHVlKX0pO2xldCBkPW5ldyBNYXA7cmV0dXJuKGwubWV0cmljc3x8W10pLmZvckVhY2godT0+e2Quc2V0KHUudGFnLHUudmFsdWUpfSkse3J1bjpsLGV4cGVyaW1lbnROYW1lOnI/Lm5hbWV8fCIiLGV4cGVyaW1lbnRBbGlhczphW2VdLHNlbGVjdGVkOkJvb2xlYW4obyYmby5nZXQobC5pZCkpLHJ1bkNvbG9yOnNbbC5pZF0saHBhcmFtczpjLG1ldHJpY3M6ZH19KSkpfW9uUnVuSXRlbVNlbGVjdGlvblRvZ2dsZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGN2KHtydW5JZDplLnJ1bi5pZH0pKX1vblJ1blNlbGVjdGlvblRvZ2dsZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGN2KHtydW5JZDplfSkpfW9uUnVuU2VsZWN0aW9uRGJsQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3Uyh7cnVuSWQ6ZX0pKX1vbkFsbFNlbGVjdGlvblRvZ2dsZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGR2KHtydW5JZHM6ZX0pKX1vblBhZ2VTZWxlY3Rpb25Ub2dnbGUoZSl7bGV0e2l0ZW1zOml9PWUscj1pLm1hcCgoe3J1bjpvfSk9Pm8uaWQpO3RoaXMuc3RvcmUuZGlzcGF0Y2goZHYoe3J1bklkczpyfSkpfW9uUGFnaW5hdGlvbkNoYW5nZShlKXtpZighdGhpcy51c2VQYWdpbmF0aW9uKXRocm93IG5ldyBFcnJvcigiUGFnaW5hdGlvbiBldmVudHMgY2Fubm90IGJlIGRpc3BhdGNoZWQgd2hlbiBwYWdpbmF0aW9uIGlzIGRpc2FibGVkIik7bGV0e3BhZ2VJbmRleDppLHBhZ2VTaXplOnJ9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChTUyh7cGFnZUluZGV4OmkscGFnZVNpemU6cn0pKX1vblNvcnRDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChFUyhlKSl9b25SZWdleEZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHV2KHtyZWdleFN0cmluZzplfSkpfW9uUnVuQ29sb3JDaGFuZ2Uoe3J1bklkOmUsbmV3Q29sb3I6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2goVFMoe3J1bklkOmUsbmV3Q29sb3I6aX0pKX1vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZChlKXtsZXR7aHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKEVjLmhwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99KSl9b25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKEVjLmhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c30pKX1vbk1ldHJpY0ZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKEVjLmhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxtZXRyaWNUYWc6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c30pKX10b2dnbGVGdWxsU2NyZWVuKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChiUygpKX1hZGRDb2x1bW4oe2hlYWRlcjplLGluZGV4Oml9KXtlLmVuYWJsZWQ9ITAsdGhpcy5zdG9yZS5kaXNwYXRjaChEUyh7aGVhZGVyOnsuLi5lLGVuYWJsZWQ6ITB9LGluZGV4Oml9KSl9cmVtb3ZlQ29sdW1uKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goemgoe2hlYWRlcjplfSkpfW9yZGVyQ29sdW1ucyhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKElTKHtuZXdIZWFkZXJPcmRlcjplfSkpfXVzZURhdGFUYWJsZSgpe3JldHVybiB0aGlzLmhwYXJhbXNFbmFibGVkLnZhbHVlJiYhdGhpcy5mb3JjZUxlZ2FjeVRhYmxlfWFkZEhwYXJhbUZpbHRlcihlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEVjLmRhc2hib2FyZEhwYXJhbUZpbHRlckFkZGVkKHtuYW1lOmUuaGVhZGVyLm5hbWUsZmlsdGVyOmUudmFsdWV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXRhYmxlIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgiZmxleC1sYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpfSxpbnB1dHM6e3VzZUZsZXhpYmxlTGF5b3V0OiJ1c2VGbGV4aWJsZUxheW91dCIsdXNlUGFnaW5hdGlvbjoidXNlUGFnaW5hdGlvbiIsY29sdW1uczoiY29sdW1ucyIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGZvcmNlTGVnYWN5VGFibGU6ImZvcmNlTGVnYWN5VGFibGUifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwidXNlRmxleGlibGVMYXlvdXQiLCJudW1TZWxlY3RlZEl0ZW1zIiwiY29sdW1ucyIsImhwYXJhbUNvbHVtbnMiLCJtZXRyaWNDb2x1bW5zIiwic2hvd0V4cGVyaW1lbnROYW1lIiwicGFnZUl0ZW1zIiwiZmlsdGVyZWRJdGVtc0xlbmd0aCIsImFsbEl0ZW1zTGVuZ3RoIiwibG9hZGluZyIsInBhZ2luYXRpb25PcHRpb24iLCJyZWdleEZpbHRlciIsInNvcnRPcHRpb24iLCJ1c2VQYWdpbmF0aW9uIiwib25TZWxlY3Rpb25Ub2dnbGUiLCJvblNlbGVjdGlvbkRibENsaWNrIiwib25QYWdlU2VsZWN0aW9uVG9nZ2xlIiwib25QYWdpbmF0aW9uQ2hhbmdlIiwib25SZWdleEZpbHRlckNoYW5nZSIsIm9uU29ydENoYW5nZSIsIm9uUnVuQ29sb3JDaGFuZ2UiLCJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsIm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIiwib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIiw0LCJuZ0lmIl0sWzMsImhlYWRlcnMiLCJkYXRhIiwic2VsZWN0YWJsZUNvbHVtbnMiLCJjb2x1bW5GaWx0ZXJzIiwic29ydGluZ0luZm8iLCJleHBlcmltZW50SWRzIiwicmVnZXhGaWx0ZXIiLCJpc0Z1bGxTY3JlZW4iLCJsb2FkaW5nIiwic29ydERhdGFCeSIsIm9yZGVyQ29sdW1ucyIsIm9uU2VsZWN0aW9uVG9nZ2xlIiwib25BbGxTZWxlY3Rpb25Ub2dnbGUiLCJvblJ1bkNvbG9yQ2hhbmdlIiwib25SZWdleEZpbHRlckNoYW5nZSIsIm9uU2VsZWN0aW9uRGJsQ2xpY2siLCJ0b2dnbGVGdWxsU2NyZWVuIiwiYWRkQ29sdW1uIiwicmVtb3ZlQ29sdW1uIiwiYWRkRmlsdGVyIiw0LCJuZ0lmIl0sWzMsImV4cGVyaW1lbnRJZHMiLCJ1c2VGbGV4aWJsZUxheW91dCIsIm51bVNlbGVjdGVkSXRlbXMiLCJjb2x1bW5zIiwiaHBhcmFtQ29sdW1ucyIsIm1ldHJpY0NvbHVtbnMiLCJzaG93RXhwZXJpbWVudE5hbWUiLCJwYWdlSXRlbXMiLCJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIiwiYWxsSXRlbXNMZW5ndGgiLCJsb2FkaW5nIiwicGFnaW5hdGlvbk9wdGlvbiIsInJlZ2V4RmlsdGVyIiwic29ydE9wdGlvbiIsInVzZVBhZ2luYXRpb24iLCJvblNlbGVjdGlvblRvZ2dsZSIsIm9uU2VsZWN0aW9uRGJsQ2xpY2siLCJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLCJvblBhZ2luYXRpb25DaGFuZ2UiLCJvblJlZ2V4RmlsdGVyQ2hhbmdlIiwib25Tb3J0Q2hhbmdlIiwib25SdW5Db2xvckNoYW5nZSIsIm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIiwib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLCJvbk1ldHJpY0ZpbHRlckNoYW5nZWQiXSxbMywiaGVhZGVycyIsImRhdGEiLCJzZWxlY3RhYmxlQ29sdW1ucyIsImNvbHVtbkZpbHRlcnMiLCJzb3J0aW5nSW5mbyIsImV4cGVyaW1lbnRJZHMiLCJyZWdleEZpbHRlciIsImlzRnVsbFNjcmVlbiIsImxvYWRpbmciLCJzb3J0RGF0YUJ5Iiwib3JkZXJDb2x1bW5zIiwib25TZWxlY3Rpb25Ub2dnbGUiLCJvbkFsbFNlbGVjdGlvblRvZ2dsZSIsIm9uUnVuQ29sb3JDaGFuZ2UiLCJvblJlZ2V4RmlsdGVyQ2hhbmdlIiwib25TZWxlY3Rpb25EYmxDbGljayIsInRvZ2dsZUZ1bGxTY3JlZW4iLCJhZGRDb2x1bW4iLCJyZW1vdmVDb2x1bW4iLCJhZGRGaWx0ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsbjVlLDExLDM1LCJydW5zLXRhYmxlLWNvbXBvbmVudCIsMCksUygxLGk1ZSw5LDI1LCJydW5zLWRhdGEtdGFibGUiLDEpKSwyJmUmJihfKCJuZ0lmIiwhaS51c2VEYXRhVGFibGUoKSksdigxKSxfKCJuZ0lmIixpLnVzZURhdGFUYWJsZSgpKSl9LGRlcGVuZGVuY2llczpbRmUsU25lLFVuZSxjdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cblxuICAgICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIC5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICAgPiBydW5zLXRhYmxlLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgICA+IHRiLWRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHFuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dIcGFyYW1zQW5kTWV0cmljczoic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixjb2x1bW5zOiJjb2x1bW5zIn0sZGVjbHM6MSx2YXJzOjQsY29uc3RzOltbMywidXNlRmxleGlibGVMYXlvdXQiLCJjb2x1bW5zIiwiZXhwZXJpbWVudElkcyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUCgwLCJydW5zLXRhYmxlIiwwKSwyJmUmJl8oInVzZUZsZXhpYmxlTGF5b3V0IiwhMCkoImNvbHVtbnMiLGkuY29sdW1ucykoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcykoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W1duZV0sc3R5bGVzOlsicnVucy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxZbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5leHBlcmltZW50SWRzJD10aGlzLnN0b3JlLnNlbGVjdChscikucGlwZShOKGk9Pmk/P1tdKSksdGhpcy5jb2x1bW5zJD10aGlzLnN0b3JlLnNlbGVjdChscikucGlwZShOKGk9Plticy5DSEVDS0JPWCxicy5SVU5fTkFNRSxpJiZpLmxlbmd0aD4xP2JzLkVYUEVSSU1FTlRfTkFNRTpudWxsLGJzLlJVTl9DT0xPUl0uZmlsdGVyKHI9Pm51bGwhPT1yKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1zZWxlY3RvciJdXSxpbnB1dHM6e3Nob3dIcGFyYW1zQW5kTWV0cmljczoic2hvd0hwYXJhbXNBbmRNZXRyaWNzIn0sZGVjbHM6Myx2YXJzOjcsY29uc3RzOltbMywiZXhwZXJpbWVudElkcyIsImNvbHVtbnMiLCJzaG93SHBhcmFtc0FuZE1ldHJpY3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInJ1bnMtc2VsZWN0b3ItY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpKSwyJmUmJl8oImV4cGVyaW1lbnRJZHMiLFcoMSwzLGkuZXhwZXJpbWVudElkcyQpKSgiY29sdW1ucyIsVygyLDUsaS5jb2x1bW5zJCkpKCJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGkuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKX0sZGVwZW5kZW5jaWVzOltxbmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGM1ZShuLHQpezEmbiYmUCgwLCJtZXRyaWNzLW1haW4tdmlldyIsMil9dmFyIFhuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcyQ9dGhpcy5zdG9yZS5zZWxlY3QobWQpLHRoaXMucnVuc1RhYmxlRnVsbFNjcmVlbiQ9dGhpcy5zdG9yZS5zZWxlY3QoTGgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQiXV0sZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbInNpZGViYXIiLCIiLDMsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdLFsibWFpbiIsIiIsNCwibmdJZiJdLFsibWFpbiIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwidGItZGFzaGJvYXJkLWxheW91dCIpLFAoMSwicnVucy1zZWxlY3RvciIsMCksaigyLCJhc3luYyIpLFMoMyxjNWUsMSwwLCJtZXRyaWNzLW1haW4tdmlldyIsMSksaig0LCJhc3luYyIpLGcoKSksMiZlJiYodigxKSxfKCJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLFcoMiwyLGkuc2hvd0hwYXJhbXNBbmRNZXRyaWNzJCkpLHYoMiksXygibmdJZiIsIVcoNCw0LGkucnVuc1RhYmxlRnVsbFNjcmVlbiQpKSl9LGRlcGVuZGVuY2llczpbRmUsYVEsZm5lLFluZSxjdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpzdHJldGNoO292ZXJmbG93OmhpZGRlbn0ubm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI0NSwxNTcsLjg1KTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZlYjNiO2NvbG9yOiMyMTIxMjE7ZGlzcGxheTpibG9jaztmbGV4OjAgMH10Yi1kYXNoYm9hcmQtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMTtvdmVyZmxvdzpoaWRkZW59bmF2W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6bm9uZTt3aWR0aDozNDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBuYXZbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBuYXZbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtib3JkZXItcmlnaHQtY29sb3I6IzU1NX1tZXRyaWNzLW1haW4tdmlld1tfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxPVj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsZGksY2ldfSksbn0pKCkseEE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlXX0pLG59KSgpLENBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxkaV19KSxufSkoKSxRbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLGRpLCRhLGNpLHhnXX0pLG59KSgpLFpuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGVdfSksbn0pKCksaF89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLHF1XX0pLG59KSgpLGdfPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxsQSxkaV19KSxufSkoKSxLbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLEZjLGdfLGhfXX0pLG59KSgpLE1BPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxkaSxjaSxubCxDQSxabmUsUW5lLEtuZV19KSxufSkoKSxKbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLF9fPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxKbmVdfSksbn0pKCksJG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltibmUsUGUsTUEsX18sZ18sRWYsY2ksRmMsaGcsJGEsZGksanUsUm5lLG5sLGtuZSxWbmUsaF8sUTFdfSksbn0pKCksZWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSwkbmVdfSksbn0pKCksYl89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLHdBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxkaV19KSxufSkoKSx0aWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRix0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEYsdGhpcy5heGlzRGlyZWN0aW9uPWZzLlZFUlRJQ0FMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9fWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50ZW1wb3JhbFNjYWxlKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD9udWxsOnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGgtMV19Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLnN0ZXBzWzBdfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe2xldCBpPTA7Zm9yKDtlPnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnN0ZXBzW2ldKSYmaTx0aGlzLnN0ZXBzLmxlbmd0aC0xOylpKys7cmV0dXJuIHRoaXMuc3RlcHNbaV19Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtsZXQgaT10aGlzLnN0ZXBzLmxlbmd0aC0xO2Zvcig7ZTx0aGlzLnRlbXBvcmFsU2NhbGUodGhpcy5zdGVwc1tpXSkmJmk+MDspaS0tO3JldHVybiB0aGlzLnN0ZXBzW2ldfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3N0ZXBzOiJzdGVwcyIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsdGVtcG9yYWxTY2FsZToidGVtcG9yYWxTY2FsZSJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6Nyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJjYXJkRm9iSGVscGVyIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLEkoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksZygpKSwyJmUmJl8oImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpfSxkZXBlbmRlbmNpZXM6W3BBXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxuaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3dBLFBlLFl1LGJfXX0pLG59KSgpO2liKGZBLFtubixGZSxPZixxZyx0aWVdLFtdKTt2YXIgdl89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlXX0pLG59KSgpLFNBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxfX119KSxufSkoKSx5Xz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsZGldfSksbn0pKCksaWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxuaWUsY2ksZGksbmwsU0Esdl8seV9dfSksbn0pKCksRUE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLHJpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsRUEsY2ksZGksbmwscXUsU0Esdl8seV9dfSksbn0pKCksb2llPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxDbyxjaSxkaSwkYSxqdV19KSxufSkoKSxUQT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsQ28sb2llLFl1XX0pLG59KSgpLHNpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsRUEseGcsY2ksaGcsJGEsSmEscVNdfSksbn0pKCksYWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxNQV19KSxufSkoKSxsaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3dBLFBlLFRBXX0pLG59KSgpLGNpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsc2llLF9fLGJfLFRBLGNpLGRpLGp1LG5sLFl1LGFpZSxsaWUsdl8seV9dfSksbn0pKCksZGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxyaWUsY2llLGlpZSxiX119KSxufSkoKSx1aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLEphXX0pLG59KSgpLERBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSx1aWUsY2ksVlQsRmMsZGksSmEscXUsV2gsaF9dfSksbn0pKCkscGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxDQSxGYyx2RSxkaSxjaV19KSxufSkoKSxmaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RpZSxQZSx4QSxnXyxsQSxjaSxWVCxkaSwkYSxubCxEQSxwaWUsTWRdfSksbn0pKCksbWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSx4QSxPVixmaWUsZGksREEsZWllXX0pLG59KSgpLHA1ZT0iTWF4IHBpbiBsaW1pdCBleGNlZWRlZC4gUmVtb3ZlIGV4aXN0aW5nIHBpbnMgYmVmb3JlIGFkZGluZyBtb3JlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQyNDIiO2Z1bmN0aW9uIGY1ZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpIZyxhbGVydEZyb21BY3Rpb246bj0+e2xldHt3YXNQaW5uZWQ6dCxjYW5DcmVhdGVOZXdQaW5zOmV9PW47cmV0dXJuIHR8fGU/bnVsbDp7bG9jYWxpemVkTWVzc2FnZTpwNWV9fX1dfWZ1bmN0aW9uIG01ZSgpe3JldHVybiBxKGJkLG49Pih7c2NhbGFyU21vb3RoaW5nOm59KSl9ZnVuY3Rpb24gaDVlKCl7cmV0dXJuIHEoZ2Ysbj0+KHtpZ25vcmVPdXRsaWVyczpufSkpfWZ1bmN0aW9uIGc1ZSgpe3JldHVybiBxKGhmLG49Pih7dG9vbHRpcFNvcnQ6U3RyaW5nKG4pfSkpfWZ1bmN0aW9uIF81ZSgpe3JldHVybiBxKGExLG49Pih7dGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZDpufSkpfWZ1bmN0aW9uIGI1ZSgpe3JldHVybiBxKFhoLG49Pih7dGltZVNlcmllc0NhcmRNaW5XaWR0aDpufSkpfWZ1bmN0aW9uIHY1ZSgpe3JldHVybiBxKHh2LG49Pih7c3RlcFNlbGVjdG9yRW5hYmxlZDpufSkpfWZ1bmN0aW9uIHk1ZSgpe3JldHVybiBxKFN1LG49Pih7cmFuZ2VTZWxlY3Rpb25FbmFibGVkOm59KSl9ZnVuY3Rpb24geDVlKCl7cmV0dXJuIHEod3Usbj0+KHtsaW5rZWRUaW1lRW5hYmxlZDpufSkpfWZ1bmN0aW9uIEM1ZSgpe3JldHVybiBxKEN2LG49Pih7c2luZ2xlU2VsZWN0aW9uSGVhZGVyczpufSkpfWZ1bmN0aW9uIE01ZSgpe3JldHVybiBxKE12LG49Pih7cmFuZ2VTZWxlY3Rpb25IZWFkZXJzOm59KSl9dmFyIGhpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpETix1c2VGYWN0b3J5OnJRLGRlcHM6W0lOXX0se3Byb3ZpZGU6SU4sdXNlVmFsdWU6WFN9XSxpbXBvcnRzOltQZSxJaCxHYSxCYy5mb3JQbHVnaW4oZ3YsWG5lKSxxUyxtaWUsVHIuZm9yRmVhdHVyZShZUyx0USxETiksdG8uZm9yRmVhdHVyZShbaVFdKSxTYy5yZWdpc3RlckFsZXJ0QWN0aW9ucyhmNWUpLEtpLmRlZmluZUdsb2JhbFNldHRpbmcobTVlKSxLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKGg1ZSksS2kuZGVmaW5lR2xvYmFsU2V0dGluZyhnNWUpLEtpLmRlZmluZUdsb2JhbFNldHRpbmcoXzVlKSxLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKGI1ZSksS2kuZGVmaW5lR2xvYmFsU2V0dGluZyh2NWUpLEtpLmRlZmluZUdsb2JhbFNldHRpbmcoeTVlKSxLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKHg1ZSksS2kuZGVmaW5lR2xvYmFsU2V0dGluZyhDNWUpLEtpLmRlZmluZUdsb2JhbFNldHRpbmcoTTVlKV19KSxufSkoKSxnaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1lYLGhpZV19KSxufSkoKSxYZD0oKCk9PihmdW5jdGlvbihuKXtuLkNVU1RPTV9FTEVNRU5UPSJDVVNUT01fRUxFTUVOVCIsbi5JRlJBTUU9IklGUkFNRSIsbi5OR19DT01QT05FTlQ9Ik5HX0NPTVBPTkVOVCIsbi5OT05FPSJOT05FIn0oWGR8fChYZD17fSkpLFhkKSkoKSx3NWU9WyJwbHVnaW5Db250YWluZXIiXSxTNWU9WyJuZ1BsdWdpbkNvbnRhaW5lciJdO2Z1bmN0aW9uIEU1ZShuLHQpezEmbiYmbGkoMCl9ZnVuY3Rpb24gVDVlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLEU1ZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksa3QoKSksMiZuKXtsZXQgZT13KDIpLGk9aXQoNik7digxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU/ZS5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOmkpfX1mdW5jdGlvbiBENWUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIEk1ZShuLHQpe2lmKDEmbiYmKE90KDApLFMoMSxENWUsMSwwLCJuZy1jb250YWluZXIiLDkpLGt0KCkpLDImbil7bGV0IGU9dygyKSxpPWl0KDYpO3YoMSksXygibmdUZW1wbGF0ZU91dGxldCIsZS5lbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU/ZS5lbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6aSl9fWZ1bmN0aW9uIEE1ZShuLHQpezEmbiYmbGkoMCl9ZnVuY3Rpb24gUjVlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLEE1ZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksa3QoKSksMiZuKXtsZXQgZT13KDIpLGk9aXQoNik7digxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZTppKX19ZnVuY3Rpb24gUDVlKG4sdCl7aWYoMSZuJiYoT3QoMCksaCgxLCJoMyIsMTApLFQoMiwiIFRoZXJlXHUyMDE5cyBubyBkYXNoYm9hcmQgYnkgdGhlIG5hbWUgb2YgXHUyMDFjIiksaCgzLCJjb2RlIiksVCg0KSxnKCksVCg1LCJcdTIwMWQuICIpLGcoKSxoKDYsInAiKSxUKDcsIllvdSBjYW4gc2VsZWN0IGEgZGFzaGJvYXJkIGZyb20gdGhlIGxpc3QgYWJvdmUuIiksZygpLGgoOCwicCIpLGxpKDksMTEpLGcoKSxrdCgpKSwyJm4pe2xldCBlPXcoMiksaT1pdCg4KTt2KDQpLGJ0KGUuYWN0aXZlUGx1Z2luSWQpLHYoNSksXygibmdUZW1wbGF0ZU91dGxldCIsaSl9fWZ1bmN0aW9uIE81ZShuLHQpe2lmKDEmbiYmKE90KDApLGgoMSwiaDMiLDEyKSxUKDIsIiBObyBkYXNoYm9hcmRzIGFyZSBhY3RpdmUgZm9yIHRoZSBjdXJyZW50IGRhdGEgc2V0LiAiKSxnKCksaCgzLCJwIiksVCg0LCJQcm9iYWJsZSBjYXVzZXM6IiksZygpLGgoNSwidWwiKSg2LCJsaSIpLFQoNywiWW91IGhhdmVuXHUyMDE5dCB3cml0dGVuIGFueSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuIiksZygpLGgoOCwibGkiKSxUKDksIlRlbnNvckJvYXJkIGNhblx1MjAxOXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLiIpLGcoKSgpLFQoMTAsIiBJZiB5b3VcdTIwMTlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUgIiksaCgxMSwiYSIsMTMpLFQoMTIsIlJFQURNRSIpLGcoKSxUKDEzLCIgYW5kIHBlcmhhcHMgdGhlICIpLGgoMTQsImEiLDE0KSxUKDE1LCJUZW5zb3JCb2FyZCB0dXRvcmlhbCIpLGcoKSxUKDE2LCIuICIpLGgoMTcsInAiKSxUKDE4LCIgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUgIiksaCgxOSwiYSIsMTUpLFQoMjAsInRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXMiKSxnKCksVCgyMSwiIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLiAiKSxnKCksaCgyMiwicCIpLGxpKDIzLDExKSxnKCksa3QoKSksMiZuKXt3KDIpO2xldCBlPWl0KDgpO3YoMjMpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiBrNWUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNikoMSwiZGl2Iiw3KSxTKDIsVDVlLDIsMSwibmctY29udGFpbmVyIiw4KSxTKDMsSTVlLDIsMSwibmctY29udGFpbmVyIiw4KSxTKDQsUjVlLDIsMSwibmctY29udGFpbmVyIiw4KSxTKDUsUDVlLDEwLDIsIm5nLWNvbnRhaW5lciIsOCksUyg2LE81ZSwyNCwxLCJuZy1jb250YWluZXIiLDgpLGcoKSgpKSwyJm4pe2xldCBlPXcoKTtfKCJuZ1N3aXRjaCIsZS5wbHVnaW5Mb2FkU3RhdGUpLHYoMiksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQpLHYoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV04pLHYoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5VTktOT1dOX1BMVUdJTl9JRCksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLk5PX0VOQUJMRURfUExVR0lOUyl9fWZ1bmN0aW9uIEY1ZShuLHQpe2lmKDEmbiYmKGgoMCwiaDMiLDE2KSxUKDEsIkRhdGEgY291bGQgbm90IGJlIGxvYWRlZC4iKSxnKCksaCgyLCJwIiksVCgzLCJUaGUgVGVuc29yQm9hcmQgc2VydmVyIG1heSBiZSBkb3duIG9yIGluYWNjZXNzaWJsZS4iKSxnKCksaCg0LCJwIiksbGkoNSwxMSksZygpKSwyJm4pe3coKTtsZXQgZT1pdCg4KTt2KDUpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiBONWUobix0KXtpZigxJm4mJihoKDAsInAiLDE5KSgxLCJpIiksVCgyLCJMb2cgZGlyZWN0b3J5OiAiKSxoKDMsInNwYW4iKSxUKDQpLGcoKSgpKCkpLDImbil7bGV0IGU9dygyKTt2KDQpLGJ0KGUuZGF0YUxvY2F0aW9uKX19ZnVuY3Rpb24gTDVlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwxNyksVCgxKSxqKDIsImRhdGUiKSxnKCksUygzLE41ZSw1LDEsInAiLDE4KSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiTGFzdCByZWxvYWQ6ICIscXAoMiwyLGUubGFzdFVwZGF0ZWQsIm1lZGl1bSIpLCIiKSx2KDIpLF8oIm5nSWYiLGUuZGF0YUxvY2F0aW9uKX19dmFyIEI1ZT1mdW5jdGlvbihuKXtyZXR1cm57cGx1Z2luczohMCwiaXMtZmlyc3QtcGFydHktcGx1Z2luIjpufX0sY2w9KCgpPT4oZnVuY3Rpb24obil7bltuLkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EPTBdPSJFTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCIsbltuLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQ9MV09IkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQiLG5bbi5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV049Ml09IkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTiIsbltuLk5PX0VOQUJMRURfUExVR0lOUz0zXT0iTk9fRU5BQkxFRF9QTFVHSU5TIixuW24uVU5LTk9XTl9QTFVHSU5fSUQ9NF09IlVOS05PV05fUExVR0lOX0lEIixuW24uTE9BREVEPTVdPSJMT0FERUQiLG5bbi5MT0FESU5HPTZdPSJMT0FESU5HIn0oY2x8fChjbD17fSkpLGNsKSkoKSxfaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLnBsdWdpblJlZ2lzdHJ5PWksdGhpcy5wbHVnaW5BcGlIb3N0PXIsdGhpcy5QbHVnaW5Mb2FkU3RhdGU9Y2wsdGhpcy5Mb2FkaW5nTWVjaGFuaXNtVHlwZT1YZCx0aGlzLnBsdWdpbkluc3RhbmNlcz1uZXcgTWFwfW5nT25DaGFuZ2VzKGUpe2lmKCF0aGlzLmlzRmVhdHVyZUZsYWdzTG9hZGVkfHwhdGhpcy5hY3RpdmVLbm93blBsdWdpbnx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PVRlLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1UZS5MT0FESU5HKXJldHVybjtsZXQgaT1Cb29sZWFuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4mJiF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXModGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCkpO2lmKGUuYWN0aXZlS25vd25QbHVnaW58fGUuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fGUuc2V0dGluZ3NMb2FkU3RhdGUpe2xldCByPWUuYWN0aXZlS25vd25QbHVnaW4/LnByZXZpb3VzVmFsdWU7aWYociYmci5pZCE9PXRoaXMuYWN0aXZlS25vd25QbHVnaW4uaWQmJnRoaXMuaGlkZVBsdWdpbihyKSxpKXtsZXQgbz10aGlzLmNyZWF0ZVBsdWdpbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luKTtvJiZ0aGlzLnBsdWdpbkluc3RhbmNlcy5zZXQodGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCxvKX1lbHNlIHRoaXMuc2hvd1BsdWdpbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luKX0oaXx8ZS5sYXN0VXBkYXRlZCkmJnRoaXMucmVsb2FkKHRoaXMuYWN0aXZlS25vd25QbHVnaW4saSl9aGlkZVBsdWdpbihlKXtpZighdGhpcy5wbHVnaW5JbnN0YW5jZXMuaGFzKGUuaWQpKXJldHVybjtsZXQgaT10aGlzLnBsdWdpbkluc3RhbmNlcy5nZXQoZS5pZCk7T2JqZWN0LmFzc2lnbihpLnN0eWxlLHttYXhIZWlnaHQ6MCxvdmVyZmxvdzoiaGlkZGVuIix2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSJ9KX1zaG93UGx1Z2luKGUpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXMoZS5pZCkpcmV0dXJuO2xldCBpPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtPYmplY3QuYXNzaWduKGkuc3R5bGUse21heEhlaWdodDpudWxsLG92ZXJmbG93Om51bGwsdmlzaWJpbGl0eTpudWxsLHBvc2l0aW9uOm51bGx9KX1jcmVhdGVQbHVnaW4oZSl7bGV0IGk9bnVsbDtzd2l0Y2goZS5sb2FkaW5nX21lY2hhbmlzbS50eXBlKXtjYXNlIFhkLkNVU1RPTV9FTEVNRU5UOmk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlLmxvYWRpbmdfbWVjaGFuaXNtLmVsZW1lbnRfbmFtZSksaS5yZWxvYWRPblJlYWR5PSExLGkuZmVhdHVyZUZsYWdzPXRoaXMuZmVhdHVyZUZsYWdzLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGkpO2JyZWFrO2Nhc2UgWGQuSUZSQU1FOmlmKCF0aGlzLnBsdWdpbkFwaUhvc3QpdGhyb3cgRXJyb3IoYElGUkFNRS1iYXNlZCBwbHVnaW5zIG5vdCBzdXBwb3J0ZWQ6ICR7ZS5pZH1gKTtpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLGkuc2V0QXR0cmlidXRlKCJzcmMiLGBkYXRhL3BsdWdpbl9lbnRyeS5odG1sP25hbWU9JHtlLmlkfWApLHRoaXMucGx1Z2luQXBpSG9zdC5yZWdpc3RlclBsdWdpbklmcmFtZShpLGUuaWQpLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGkpO2JyZWFrO2Nhc2UgWGQuTkdfQ09NUE9ORU5UOmxldCByPXRoaXMucGx1Z2luUmVnaXN0cnkuZ2V0Q29tcG9uZW50KGUuaWQpO2lmKHIpe2xldCBvPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHIpO2k9dGhpcy5uZ1BsdWdpbkNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQobykubG9jYXRpb24ubmF0aXZlRWxlbWVudH1lbHNlIGNvbnNvbGUuZXJyb3IoYE5vIHJlZ2lzdGVyZWQgQW5ndWxhciBjb21wb25lbnQgZm9yIHBsdWdpbjogJHtlLmlkfWApO2JyZWFrO2Nhc2UgWGQuTk9ORTpicmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgcGx1Z2luIil9cmV0dXJuIGl9cmVsb2FkKGUsaSl7aWYoIWkmJmUuZGlzYWJsZV9yZWxvYWQpcmV0dXJuO2xldCByPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtyJiZyLnJlbG9hZCYmci5yZWxvYWQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhmbyksQyhCYyksQyhJMSw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2lucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UodzVlLDcsTWUpLEdlKFM1ZSw3LHNpKSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5wbHVnaW5zQ29udGFpbmVyPXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLm5nUGx1Z2luQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnthY3RpdmVQbHVnaW5JZDoiYWN0aXZlUGx1Z2luSWQiLGFjdGl2ZUtub3duUGx1Z2luOiJhY3RpdmVLbm93blBsdWdpbiIscGx1Z2luTG9hZFN0YXRlOiJwbHVnaW5Mb2FkU3RhdGUiLGRhdGFMb2NhdGlvbjoiZGF0YUxvY2F0aW9uIixpc0ZlYXR1cmVGbGFnc0xvYWRlZDoiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLHNldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSIsZmVhdHVyZUZsYWdzOiJmZWF0dXJlRmxhZ3MiLGxhc3RVcGRhdGVkOiJsYXN0VXBkYXRlZCIsZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIn0sZmVhdHVyZXM6W0d0XSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1szLCJuZ0NsYXNzIl0sWyJwbHVnaW5Db250YWluZXIiLCIiXSxbIm5nUGx1Z2luQ29udGFpbmVyIiwiIl0sWyJjbGFzcyIsIndhcm5pbmciLDMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJlbnZpcm9ubWVudEZhaWx1cmVEZWZhdWx0VGVtcGxhdGUiLCIiXSxbImRhdGVBbmREYXRhTG9jYXRpb24iLCIiXSxbMSwid2FybmluZyIsMywibmdTd2l0Y2giXSxbMSwid2FybmluZy1tZXNzYWdlIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsInVua25vd24tcGx1Z2luIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwibm8tYWN0aXZlLXBsdWdpbiJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiXSxbImhyZWYiLCJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIl0sWzEsImVudmlyb25tZW50LW5vdC1sb2FkZWQiXSxbMSwibGFzdC1yZWxvYWQtdGltZSJdLFsiY2xhc3MiLCJkYXRhLWxvY2F0aW9uIiw0LCJuZ0lmIl0sWzEsImRhdGEtbG9jYXRpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCwxKSxsaSgyLG51bGwsMiksZygpLFMoNCxrNWUsNyw2LCJkaXYiLDMpLFMoNSxGNWUsNiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LFd0KSxTKDcsTDVlLDQsNSwibmctdGVtcGxhdGUiLG51bGwsNSxXdCkpLDImZSYmKF8oIm5nQ2xhc3MiLEluKDIsQjVlLChudWxsPT1pLmFjdGl2ZUtub3duUGx1Z2luP251bGw6aS5hY3RpdmVLbm93blBsdWdpbi5sb2FkaW5nX21lY2hhbmlzbS50eXBlKSE9PWkuTG9hZGluZ01lY2hhbmlzbVR5cGUuSUZSQU1FKSksdig0KSxfKCJuZ0lmIixpLnBsdWdpbkxvYWRTdGF0ZSE9PWkuUGx1Z2luTG9hZFN0YXRlLkxPQURFRCYmaS5wbHVnaW5Mb2FkU3RhdGUhPT1pLlBsdWdpbkxvYWRTdGF0ZS5MT0FESU5HKSl9LGRlcGVuZGVuY2llczpbeW4sRmUsTHIsc3IsU3IsZ2hdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjE7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucGx1Z2lucy5pcy1maXJzdC1wYXJ0eS1wbHVnaW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0ud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZmZmO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMwMzAzMH0ud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO21hcmdpbjo4MHB4IGF1dG8gMDttYXgtd2lkdGg6NTQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Lmxhc3QtcmVsb2FkLXRpbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc3R5bGU6aXRhbGljfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaWZyYW1le2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFY1ZT1xKE5oLFdvLChuLHQpPT50JiZuW3RdP09iamVjdC5hc3NpZ24oe2lkOnR9LG5bdF0pOm51bGwpLElBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlS25vd25QbHVnaW4kPXRoaXMuc3RvcmUuc2VsZWN0KFY1ZSksdGhpcy5hY3RpdmVQbHVnaW5JZCQ9dGhpcy5zdG9yZS5zZWxlY3QoV28pLHRoaXMucGx1Z2luTG9hZFN0YXRlJD1kbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luJCx0aGlzLmFjdGl2ZVBsdWdpbklkJCx0aGlzLnN0b3JlLnNlbGVjdCh5UykpLnBpcGUoTigoW2kscixvXSk9Pm51bGwhPT1vLmZhaWx1cmVDb2RlP28uZmFpbHVyZUNvZGU9PT1qYS5OT1RfRk9VTkQ/Y2wuRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ6by5mYWlsdXJlQ29kZT09PWphLlBFUk1JU1NJT05fREVOSUVEP2NsLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQ6Y2wuRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOOm51bGwhPT1pP2NsLkxPQURFRDpudWxsPT09by5sYXN0TG9hZGVkVGltZUluTXMmJm8uc3RhdGU9PT1UZS5MT0FESU5HP2NsLkxPQURJTkc6cj9jbC5VTktOT1dOX1BMVUdJTl9JRDpjbC5OT19FTkFCTEVEX1BMVUdJTlMpKSx0aGlzLmxhc3RMb2FkZWRUaW1lSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoRmgpLHRoaXMuZGF0YUxvY2F0aW9uJD10aGlzLnN0b3JlLnNlbGVjdCh4UykucGlwZShOKGk9PmkuZGF0YV9sb2NhdGlvbikpLHRoaXMuaXNGZWF0dXJlRmxhZ3NMb2FkZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHZ1KSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3Qoa3MpLHRoaXMuc2V0dGluZ3NMb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KEJzLmdldFNldHRpbmdzTG9hZFN0YXRlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInBsdWdpbnMiXV0saW5wdXRzOntlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxkZWNsczo5LHZhcnM6MjcsY29uc3RzOltbMywiYWN0aXZlS25vd25QbHVnaW4iLCJhY3RpdmVQbHVnaW5JZCIsImRhdGFMb2NhdGlvbiIsImxhc3RVcGRhdGVkIiwicGx1Z2luTG9hZFN0YXRlIiwiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLCJzZXR0aW5nc0xvYWRTdGF0ZSIsImZlYXR1cmVGbGFncyIsImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInBsdWdpbnMtY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpKSwyJmUmJl8oImFjdGl2ZUtub3duUGx1Z2luIixXKDEsMTEsaS5hY3RpdmVLbm93blBsdWdpbiQpKSgiYWN0aXZlUGx1Z2luSWQiLFcoMiwxMyxpLmFjdGl2ZVBsdWdpbklkJCkpKCJkYXRhTG9jYXRpb24iLFcoMywxNSxpLmRhdGFMb2NhdGlvbiQpKSgibGFzdFVwZGF0ZWQiLFcoNCwxNyxpLmxhc3RMb2FkZWRUaW1lSW5NcyQpKSgicGx1Z2luTG9hZFN0YXRlIixXKDUsMTksaS5wbHVnaW5Mb2FkU3RhdGUkKSkoImlzRmVhdHVyZUZsYWdzTG9hZGVkIixXKDYsMjEsaS5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQpKSgic2V0dGluZ3NMb2FkU3RhdGUiLFcoNywyMyxpLnNldHRpbmdzTG9hZFN0YXRlJCkpKCJmZWF0dXJlRmxhZ3MiLFcoOCwyNSxpLmZlYXR1cmVGbGFncyQpKSgiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsaS5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSkoImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSIsaS5lbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUpfSxzdHlsZXM6WyJwbHVnaW5zLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0geyBoZWlnaHQ6IDEwMCU7IH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEFBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltHYSxQZSxCY119KSxufSkoKTtpYihJQSxbX2llXSxbY3RdKTt2YXIgYmllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kb2N1bWVudD1pLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlPXRoaXMub25WaXNpYmlsaXR5Q2hhbmdlSW1wbC5iaW5kKHRoaXMpLHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5waXBlKHVuKEJzLmdldFJlbG9hZEVuYWJsZWQpKSx0aGlzLnJlbG9hZFBlcmlvZEluTXMkPXRoaXMuc3RvcmUucGlwZSh1bihCcy5nZXRSZWxvYWRQZXJpb2RJbk1zKSksdGhpcy5yZWxvYWRUaW1lcklkPW51bGwsdGhpcy5taXNzZWRBdXRvUmVsb2FkPSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWV9bmdPbkluaXQoKXt0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSxkbih0aGlzLnJlbG9hZEVuYWJsZWQkLnBpcGUoWW4oKSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJC5waXBlKFluKCkpKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5jYW5jZWxMb2FkKCksZSYmdGhpcy5sb2FkKGkpfSl9b25WaXNpYmlsaXR5Q2hhbmdlSW1wbCgpeyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZ0aGlzLm1pc3NlZEF1dG9SZWxvYWQmJih0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5zdG9yZS5kaXNwYXRjaChjcygpKSl9bG9hZChlKXt0aGlzLnJlbG9hZFRpbWVySWQ9c2V0VGltZW91dCgoKT0+eyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlP3RoaXMuc3RvcmUuZGlzcGF0Y2goY3MoKSk6dGhpcy5taXNzZWRBdXRvUmVsb2FkPSEwLHRoaXMubG9hZChlKX0sZSl9Y2FuY2VsTG9hZCgpe251bGwhPT10aGlzLnJlbG9hZFRpbWVySWQmJmNsZWFyVGltZW91dCh0aGlzLnJlbG9hZFRpbWVySWQpLHRoaXMucmVsb2FkVGltZXJJZD1udWxsfW5nT25EZXN0cm95KCl7dGhpcy5jYW5jZWxMb2FkKCksdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZSksdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSksQyhMdCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlbG9hZGVyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx2aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGVuc29yYm9hcmQtd3JhcHBlci1jb21wb25lbnQiXV0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbMSwicGx1Z2lucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUCgwLCJwbHVnaW5zIiwwKSgxLCJyZWxvYWRlciIpfSxkZXBlbmRlbmNpZXM6W0lBLGJpZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZmxleDogMSAxO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGtWPSJzbW9vdGhpbmciLEZWPSJydW5Db2xvckdyb3VwIixOVj0idGFnRmlsdGVyIixMVj0icnVuRmlsdGVyIixCVj0icmVnZXg6IixSQT1jbGFzcyBleHRlbmRzIHlpZXtnZXRNZXRyaWNzUGlubmVkQ2FyZHModCl7cmV0dXJuIGRuKFt0LnNlbGVjdCh5diksdC5zZWxlY3QoeFcpXSkucGlwZShOKChbZSxpXSk9PntpZighZS5sZW5ndGgmJiFpLmxlbmd0aClyZXR1cm5bXTtsZXQgbz1bLi4uZS5tYXAoKHtwbHVnaW46cyx0YWc6YSxzYW1wbGU6bCxydW5JZDpjfSk9PntsZXQgZD17cGx1Z2luOnMsdGFnOmF9O3JldHVybiBwYShzKSYmKGQucnVuSWQ9YyksdWEocykmJihkLnNhbXBsZT1sKSxkfSksLi4uaV07cmV0dXJuW3trZXk6InBpbm5lZENhcmRzIix2YWx1ZTpKU09OLnN0cmluZ2lmeShvKX1dfSkpfXNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0KXtyZXR1cm4gZG4oW3RoaXMuZ2V0TWV0cmljc1Bpbm5lZENhcmRzKHQpLHQuc2VsZWN0KGtsKS5waXBlKE4oZT0+ZT9be2tleTpOVix2YWx1ZTplfV06W10pKSxkbihbdC5zZWxlY3QoaXYpLHQuc2VsZWN0KGNmKV0pLnBpcGUoTigoW2UsaV0pPT5mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QuZW50cmllcyhuKS5tYXAoKFtlLGldKT0+e2lmKHZvaWQgMD09PWkpcmV0dXJue307bGV0IHI9dFtlXTtyZXR1cm4gciYmci5xdWVyeVBhcmFtT3ZlcnJpZGU/e2tleTpyLnF1ZXJ5UGFyYW1PdmVycmlkZSx2YWx1ZTppPy50b1N0cmluZygpfTp7fX0pLmZpbHRlcigoe2tleTplLHZhbHVlOml9KT0+ZSYmdm9pZCAwIT09aSl9KGUsaSkpKSx0LnNlbGVjdChNVykucGlwZShOKGU9Pk51bWJlci5pc0Zpbml0ZShlLnNjYWxhclNtb290aGluZyk/W3trZXk6a1YsdmFsdWU6U3RyaW5nKGUuc2NhbGFyU21vb3RoaW5nKX1dOltdKSksdC5zZWxlY3QoSkYpLnBpcGUoTihlPT57aWYoIWUpcmV0dXJuW107bGV0IGk7c3dpdGNoKGUua2V5KXtjYXNlIFlpLkVYUEVSSU1FTlQ6aT0iZXhwZXJpbWVudCI7YnJlYWs7Y2FzZSBZaS5SVU46aT0icnVuIjticmVhaztjYXNlIFlpLlJFR0VYOmk9YCR7QlZ9JHtlLnJlZ2V4U3RyaW5nfWA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcigiU2VyaWFsaXphdGlvbiBub3QgaW1wbGVtZW50ZWQiKX1yZXR1cm5be2tleTpGVix2YWx1ZTppfV19KSksdC5zZWxlY3QodmQpLnBpcGUoTihlPT5lP1t7a2V5OkxWLHZhbHVlOmV9XTpbXSkpXSkucGlwZShOKGU9PmUuZmxhdCgpKSl9ZGVzZXJpYWxpemVRdWVyeVBhcmFtcyh0KXtsZXQgZT1udWxsLGk9bnVsbCxyPW51bGwsbz1udWxsLHM9bnVsbDtmb3IobGV0e2tleTphLHZhbHVlOmx9b2YgdClzd2l0Y2goYSl7Y2FzZSJwaW5uZWRDYXJkcyI6ZT1VNWUobCk7YnJlYWs7Y2FzZSBrVjppPU51bWJlcihsKTticmVhaztjYXNlIEZWOnN3aXRjaChsKXtjYXNlImV4cGVyaW1lbnQiOm89e2tleTpZaS5FWFBFUklNRU5UfTticmVhaztjYXNlInJ1biI6bz17a2V5OllpLlJVTn19aWYobC5zdGFydHNXaXRoKEJWKSl7bGV0IGM9bC5zbGljZShCVi5sZW5ndGgpO289e2tleTpZaS5SRUdFWCxyZWdleFN0cmluZzpjfX1icmVhaztjYXNlIE5WOnI9bDticmVhaztjYXNlIExWOnM9bH1yZXR1cm57bWV0cmljczp7cGlubmVkQ2FyZHM6ZXx8W10sc21vb3RoaW5nOmksdGFnRmlsdGVyOnJ9LHJ1bnM6e2dyb3VwQnk6byxyZWdleEZpbHRlcjpzfX19fTtmdW5jdGlvbiBVNWUobil7bGV0IHQ7dHJ5e3Q9SlNPTi5wYXJzZShuKX1jYXRjaHtyZXR1cm4gbnVsbH1pZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbnVsbDtsZXQgZT1bXTtmb3IobGV0IGkgb2YgdCl7bGV0IG89InN0cmluZyI9PXR5cGVvZiBpLnJ1bklkLHM9Im51bWJlciI9PXR5cGVvZiBpLnNhbXBsZTtpZighKCJzdHJpbmciPT10eXBlb2YgaS5wbHVnaW4mJiJzdHJpbmciPT10eXBlb2YgaS50YWcmJihvfHx0eXBlb2YgaS5ydW5JZD4idSIpJiYoc3x8dHlwZW9mIGkuc2FtcGxlPiJ1IikmJlo2KGkucGx1Z2luKSYmaS50YWcpKWNvbnRpbnVlO2lmKHBhKGkucGx1Z2luKSl7aWYoIWkucnVuSWQpY29udGludWV9ZWxzZSBpZihpLnJ1bklkKWNvbnRpbnVlO2lmKHMmJighdWEoaS5wbHVnaW4pfHwhTnVtYmVyLmlzSW50ZWdlcihpLnNhbXBsZSl8fGkuc2FtcGxlPDApKWNvbnRpbnVlO2xldCBkPXtwbHVnaW46aS5wbHVnaW4sdGFnOmkudGFnfTtvJiYoZC5ydW5JZD1pLnJ1bklkKSxzJiYoZC5zYW1wbGU9aS5zYW1wbGUpLGUucHVzaChkKX1yZXR1cm4gZX1mdW5jdGlvbiBDaWUoKXtyZXR1cm5be3JvdXRlS2luZDp3bi5FWFBFUklNRU5ULHBhdGg6Ii8iLG5nQ29tcG9uZW50OnZpZSxkZWZhdWx0Um91dGU6ITAsZGVlcExpbmtQcm92aWRlcjpuZXcgUkF9XX1mdW5jdGlvbiBNaWUoKXtyZXR1cm4gbj0+KHQsZSk9Pm4odCxlKX1SQT1SNChbRXooKV0sUkEpO3ZhciB3aWU9bmV3IGllKCJSb290IHJlZHVjZXJzIHRva2VuIix7ZmFjdG9yeTooKT0+KHt9KX0pLFNpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTp5aCx1c2VGYWN0b3J5Ok1pZSxtdWx0aTohMH1dLGltcG9ydHM6W1RyLmZvclJvb3Qod2llLHtydW50aW1lQ2hlY2tzOntzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExfX0pLHRvLmZvclJvb3QoW10pXX0pLG59KSgpLEVpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksVGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxBQSxFaWVdfSksbn0pKCksVlY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bixib290c3RyYXA6W2JZXX0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1doLERZLE13LFVHLEloLHZZLERsLnJlZ2lzdGVyUm91dGVzKENpZSksUTEsWDEseVksVGllLEdhLEVZLENZLEFZLEZTLFJZLE1ZLG1GLEkxLEFBLHcxLHlFLFNpZSxnaWVdfSksbn0pKCk7ImxvYWRpbmciIT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9haygpLmJvb3RzdHJhcE1vZHVsZShWVik6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCgpPT57YWsoKS5ib290c3RyYXBNb2R1bGUoVlYpfSl9KSgpOwovKiogdmltOiBldDp0cz00OnN3PTQ6c3RzPTQKICogQGxpY2Vuc2UgUmVxdWlyZUpTIDIuMy42IENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSwgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvYmxvYi9tYXN0ZXIvTElDRU5TRQogKi8KLy9Ob3QgdXNpbmcgc3RyaWN0OiB1bmV2ZW4gc3RyaWN0IHN1cHBvcnQgaW4gYnJvd3NlcnMsICMzOTIsIGFuZCBjYXVzZXMKLy9wcm9ibGVtcyB3aXRoIHJlcXVpcmVqcy5leGVjKCkvdHJhbnNwaWxlciBwbHVnaW5zIHRoYXQgbWF5IG5vdCBiZSBzdHJpY3QuCi8qanNsaW50IHJlZ2V4cDogdHJ1ZSwgbm9tZW46IHRydWUsIHNsb3BweTogdHJ1ZSAqLwovKmdsb2JhbCB3aW5kb3csIG5hdmlnYXRvciwgZG9jdW1lbnQsIGltcG9ydFNjcmlwdHMsIHNldFRpbWVvdXQsIG9wZXJhICovCgp2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CihmdW5jdGlvbiAoZ2xvYmFsLCBzZXRUaW1lb3V0KSB7CiAgICB2YXIgcmVxLCBzLCBoZWFkLCBiYXNlRWxlbWVudCwgZGF0YU1haW4sIHNyYywKICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCwgY3VycmVudGx5QWRkaW5nU2NyaXB0LCBtYWluU2NyaXB0LCBzdWJQYXRoLAogICAgICAgIHZlcnNpb24gPSAnMi4zLjYnLAogICAgICAgIGNvbW1lbnRSZWdFeHAgPSAvXC9cKltcc1xTXSo/XCpcL3woW146Iic9XXxeKVwvXC8uKiQvbWcsCiAgICAgICAgY2pzUmVxdWlyZVJlZ0V4cCA9IC9bXi5dXHMqcmVxdWlyZVxzKlwoXHMqWyInXShbXiciXHNdKylbIiddXHMqXCkvZywKICAgICAgICBqc1N1ZmZpeFJlZ0V4cCA9IC9cLmpzJC8sCiAgICAgICAgY3VyckRpclJlZ0V4cCA9IC9eXC5cLy8sCiAgICAgICAgb3AgPSBPYmplY3QucHJvdG90eXBlLAogICAgICAgIG9zdHJpbmcgPSBvcC50b1N0cmluZywKICAgICAgICBoYXNPd24gPSBvcC5oYXNPd25Qcm9wZXJ0eSwKICAgICAgICBpc0Jyb3dzZXIgPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQpLAogICAgICAgIGlzV2ViV29ya2VyID0gIWlzQnJvd3NlciAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgLy9QUzMgaW5kaWNhdGVzIGxvYWRlZCBhbmQgY29tcGxldGUsIGJ1dCBuZWVkIHRvIHdhaXQgZm9yIGNvbXBsZXRlCiAgICAgICAgLy9zcGVjaWZpY2FsbHkuIFNlcXVlbmNlIGlzICdsb2FkaW5nJywgJ2xvYWRlZCcsIGV4ZWN1dGlvbiwKICAgICAgICAvLyB0aGVuICdjb21wbGV0ZScuIFRoZSBVQSBjaGVjayBpcyB1bmZvcnR1bmF0ZSwgYnV0IG5vdCBzdXJlIGhvdwogICAgICAgIC8vdG8gZmVhdHVyZSB0ZXN0IHcvbyBjYXVzaW5nIHBlcmYgaXNzdWVzLgogICAgICAgIHJlYWR5UmVnRXhwID0gaXNCcm93c2VyICYmIG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ1BMQVlTVEFUSU9OIDMnID8KICAgICAgICAgICAgICAgICAgICAgIC9eY29tcGxldGUkLyA6IC9eKGNvbXBsZXRlfGxvYWRlZCkkLywKICAgICAgICBkZWZDb250ZXh0TmFtZSA9ICdfJywKICAgICAgICAvL09oIHRoZSB0cmFnZWR5LCBkZXRlY3Rpbmcgb3BlcmEuIFNlZSB0aGUgdXNhZ2Ugb2YgaXNPcGVyYSBmb3IgcmVhc29uLgogICAgICAgIGlzT3BlcmEgPSB0eXBlb2Ygb3BlcmEgIT09ICd1bmRlZmluZWQnICYmIG9wZXJhLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE9wZXJhXScsCiAgICAgICAgY29udGV4dHMgPSB7fSwKICAgICAgICBjZmcgPSB7fSwKICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdLAogICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7CgogICAgLy9Db3VsZCBtYXRjaCBzb21ldGhpbmcgbGlrZSAnKS8vY29tbWVudCcsIGRvIG5vdCBsb3NlIHRoZSBwcmVmaXggdG8gY29tbWVudC4KICAgIGZ1bmN0aW9uIGNvbW1lbnRSZXBsYWNlKG1hdGNoLCBzaW5nbGVQcmVmaXgpIHsKICAgICAgICByZXR1cm4gc2luZ2xlUHJlZml4IHx8ICcnOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaXQpIHsKICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0FycmF5KGl0KSB7CiAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEFycmF5XSc7CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5LiBJZiB0aGUgZnVuYyByZXR1cm5zCiAgICAgKiBhIHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoKGFyeSwgZnVuYykgewogICAgICAgIGlmIChhcnkpIHsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkgYmFja3dhcmRzLiBJZiB0aGUgZnVuYwogICAgICogcmV0dXJucyBhIHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoUmV2ZXJzZShhcnksIGZ1bmMpIHsKICAgICAgICBpZiAoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpOwogICAgICAgICAgICBmb3IgKGkgPSBhcnkubGVuZ3RoIC0gMTsgaSA+IC0xOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBoYXNQcm9wKG9iaiwgcHJvcCkgewogICAgICAgIHJldHVybiBoYXNPd24uY2FsbChvYmosIHByb3ApOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE93bihvYmosIHByb3ApIHsKICAgICAgICByZXR1cm4gaGFzUHJvcChvYmosIHByb3ApICYmIG9ialtwcm9wXTsKICAgIH0KCiAgICAvKioKICAgICAqIEN5Y2xlcyBvdmVyIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0IGFuZCBjYWxscyBhIGZ1bmN0aW9uIGZvciBlYWNoCiAgICAgKiBwcm9wZXJ0eSB2YWx1ZS4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB0cnV0aHkgdmFsdWUsIHRoZW4gdGhlCiAgICAgKiBpdGVyYXRpb24gaXMgc3RvcHBlZC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaFByb3Aob2JqLCBmdW5jKSB7CiAgICAgICAgdmFyIHByb3A7CiAgICAgICAgZm9yIChwcm9wIGluIG9iaikgewogICAgICAgICAgICBpZiAoaGFzUHJvcChvYmosIHByb3ApKSB7CiAgICAgICAgICAgICAgICBpZiAoZnVuYyhvYmpbcHJvcF0sIHByb3ApKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTaW1wbGUgZnVuY3Rpb24gdG8gbWl4IGluIHByb3BlcnRpZXMgZnJvbSBzb3VyY2UgaW50byB0YXJnZXQsCiAgICAgKiBidXQgb25seSBpZiB0YXJnZXQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgcHJvcGVydHkgb2YgdGhlIHNhbWUgbmFtZS4KICAgICAqLwogICAgZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBzb3VyY2UsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pIHsKICAgICAgICBpZiAoc291cmNlKSB7CiAgICAgICAgICAgIGVhY2hQcm9wKHNvdXJjZSwgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2UgfHwgIWhhc1Byb3AodGFyZ2V0LCBwcm9wKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChkZWVwU3RyaW5nTWl4aW4gJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAhaXNBcnJheSh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhcmdldFtwcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4odGFyZ2V0W3Byb3BdLCB2YWx1ZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KCiAgICAvL1NpbWlsYXIgdG8gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIGJ1dCB0aGUgJ3RoaXMnIG9iamVjdCBpcyBzcGVjaWZpZWQKICAgIC8vZmlyc3QsIHNpbmNlIGl0IGlzIGVhc2llciB0byByZWFkL2ZpZ3VyZSBvdXQgd2hhdCAndGhpcycgd2lsbCBiZS4KICAgIGZ1bmN0aW9uIGJpbmQob2JqLCBmbikgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShvYmosIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBzY3JpcHRzKCkgewogICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVmYXVsdE9uRXJyb3IoZXJyKSB7CiAgICAgICAgdGhyb3cgZXJyOwogICAgfQoKICAgIC8vQWxsb3cgZ2V0dGluZyBhIGdsb2JhbCB0aGF0IGlzIGV4cHJlc3NlZCBpbgogICAgLy9kb3Qgbm90YXRpb24sIGxpa2UgJ2EuYi5jJy4KICAgIGZ1bmN0aW9uIGdldEdsb2JhbCh2YWx1ZSkgewogICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0KICAgICAgICB2YXIgZyA9IGdsb2JhbDsKICAgICAgICBlYWNoKHZhbHVlLnNwbGl0KCcuJyksIGZ1bmN0aW9uIChwYXJ0KSB7CiAgICAgICAgICAgIGcgPSBnW3BhcnRdOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBnOwogICAgfQoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhbiBlcnJvciB3aXRoIGEgcG9pbnRlciB0byBhbiBVUkwgd2l0aCBtb3JlIGluZm9ybWF0aW9uLgogICAgICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBlcnJvciBJRCB0aGF0IG1hcHMgdG8gYW4gSUQgb24gYSB3ZWIgcGFnZS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIGh1bWFuIHJlYWRhYmxlIGVycm9yLgogICAgICogQHBhcmFtIHtFcnJvcn0gW2Vycl0gdGhlIG9yaWdpbmFsIGVycm9yLCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgKgogICAgICogQHJldHVybnMge0Vycm9yfQogICAgICovCiAgICBmdW5jdGlvbiBtYWtlRXJyb3IoaWQsIG1zZywgZXJyLCByZXF1aXJlTW9kdWxlcykgewogICAgICAgIHZhciBlID0gbmV3IEVycm9yKG1zZyArICdcbmh0dHBzOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sIycgKyBpZCk7CiAgICAgICAgZS5yZXF1aXJlVHlwZSA9IGlkOwogICAgICAgIGUucmVxdWlyZU1vZHVsZXMgPSByZXF1aXJlTW9kdWxlczsKICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgIGUub3JpZ2luYWxFcnJvciA9IGVycjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGU7CiAgICB9CgogICAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgLy9JZiBhIGRlZmluZSBpcyBhbHJlYWR5IGluIHBsYXkgdmlhIGFub3RoZXIgQU1EIGxvYWRlciwKICAgICAgICAvL2RvIG5vdCBvdmVyd3JpdGUuCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICh0eXBlb2YgcmVxdWlyZWpzICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlcXVpcmVqcykpIHsKICAgICAgICAgICAgLy9EbyBub3Qgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIHJlcXVpcmVqcyBpbnN0YW5jZS4KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjZmcgPSByZXF1aXJlanM7CiAgICAgICAgcmVxdWlyZWpzID0gdW5kZWZpbmVkOwogICAgfQoKICAgIC8vQWxsb3cgZm9yIGEgcmVxdWlyZSBjb25maWcgb2JqZWN0CiAgICBpZiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnICYmICFpc0Z1bmN0aW9uKHJlcXVpcmUpKSB7CiAgICAgICAgLy9hc3N1bWUgaXQgaXMgYSBjb25maWcgb2JqZWN0LgogICAgICAgIGNmZyA9IHJlcXVpcmU7CiAgICAgICAgcmVxdWlyZSA9IHVuZGVmaW5lZDsKICAgIH0KCiAgICBmdW5jdGlvbiBuZXdDb250ZXh0KGNvbnRleHROYW1lKSB7CiAgICAgICAgdmFyIGluQ2hlY2tMb2FkZWQsIE1vZHVsZSwgY29udGV4dCwgaGFuZGxlcnMsCiAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkLAogICAgICAgICAgICBjb25maWcgPSB7CiAgICAgICAgICAgICAgICAvL0RlZmF1bHRzLiBEbyBub3Qgc2V0IGEgZGVmYXVsdCBmb3IgbWFwCiAgICAgICAgICAgICAgICAvL2NvbmZpZyB0byBzcGVlZCB1cCBub3JtYWxpemUoKSwgd2hpY2gKICAgICAgICAgICAgICAgIC8vd2lsbCBydW4gZmFzdGVyIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCiAgICAgICAgICAgICAgICB3YWl0U2Vjb25kczogNywKICAgICAgICAgICAgICAgIGJhc2VVcmw6ICcuLycsCiAgICAgICAgICAgICAgICBwYXRoczoge30sCiAgICAgICAgICAgICAgICBidW5kbGVzOiB7fSwKICAgICAgICAgICAgICAgIHBrZ3M6IHt9LAogICAgICAgICAgICAgICAgc2hpbToge30sCiAgICAgICAgICAgICAgICBjb25maWc6IHt9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2lzdHJ5ID0ge30sCiAgICAgICAgICAgIC8vcmVnaXN0cnkgb2YganVzdCBlbmFibGVkIG1vZHVsZXMsIHRvIHNwZWVkCiAgICAgICAgICAgIC8vY3ljbGUgYnJlYWtpbmcgY29kZSB3aGVuIGxvdHMgb2YgbW9kdWxlcwogICAgICAgICAgICAvL2FyZSByZWdpc3RlcmVkLCBidXQgbm90IGFjdGl2YXRlZC4KICAgICAgICAgICAgZW5hYmxlZFJlZ2lzdHJ5ID0ge30sCiAgICAgICAgICAgIHVuZGVmRXZlbnRzID0ge30sCiAgICAgICAgICAgIGRlZlF1ZXVlID0gW10sCiAgICAgICAgICAgIGRlZmluZWQgPSB7fSwKICAgICAgICAgICAgdXJsRmV0Y2hlZCA9IHt9LAogICAgICAgICAgICBidW5kbGVzTWFwID0ge30sCiAgICAgICAgICAgIHJlcXVpcmVDb3VudGVyID0gMSwKICAgICAgICAgICAgdW5ub3JtYWxpemVkQ291bnRlciA9IDE7CgogICAgICAgIC8qKgogICAgICAgICAqIFRyaW1zIHRoZSAuIGFuZCAuLiBmcm9tIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCiAgICAgICAgICogSXQgd2lsbCBrZWVwIGEgbGVhZGluZyBwYXRoIHNlZ21lbnQgaWYgYSAuLiB3aWxsIGJlY29tZQogICAgICAgICAqIHRoZSBmaXJzdCBwYXRoIHNlZ21lbnQsIHRvIGhlbHAgd2l0aCBtb2R1bGUgbmFtZSBsb29rdXBzLAogICAgICAgICAqIHdoaWNoIGFjdCBsaWtlIHBhdGhzLCBidXQgY2FuIGJlIHJlbWFwcGVkLiBCdXQgdGhlIGVuZCByZXN1bHQsCiAgICAgICAgICogYWxsIHBhdGhzIHRoYXQgdXNlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGxvb2sgbm9ybWFsaXplZC4KICAgICAgICAgKiBOT1RFOiB0aGlzIG1ldGhvZCBNT0RJRklFUyB0aGUgaW5wdXQgYXJyYXkuCiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJ5IHRoZSBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHRyaW1Eb3RzKGFyeSkgewogICAgICAgICAgICB2YXIgaSwgcGFydDsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGFydCA9IGFyeVtpXTsKICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHsKICAgICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgIGkgLT0gMTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgIC8vIElmIGF0IHRoZSBzdGFydCwgb3IgcHJldmlvdXMgdmFsdWUgaXMgc3RpbGwgLi4sCiAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGVtIHNvIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoIGl0IG1heQogICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIHdvcmsgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoLCBldmVuIHRob3VnaAogICAgICAgICAgICAgICAgICAgIC8vIGFzIGFuIElEIGl0IGlzIGxlc3MgdGhhbiBpZGVhbC4gSW4gbGFyZ2VyIHBvaW50CiAgICAgICAgICAgICAgICAgICAgLy8gcmVsZWFzZXMsIG1heSBiZSBiZXR0ZXIgdG8ganVzdCBraWNrIG91dCBhbiBlcnJvci4KICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCAoaSA9PT0gMSAmJiBhcnlbMl0gPT09ICcuLicpIHx8IGFyeVtpIC0gMV0gPT09ICcuLicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGkgLSAxLCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaSAtPSAyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogR2l2ZW4gYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSwgbGlrZSAuL3NvbWV0aGluZywgbm9ybWFsaXplIGl0IHRvCiAgICAgICAgICogYSByZWFsIG5hbWUgdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEgcGF0aC4KICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgcmVsYXRpdmUgbmFtZQogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlTmFtZSBhIHJlYWwgbmFtZSB0aGF0IHRoZSBuYW1lIGFyZyBpcyByZWxhdGl2ZQogICAgICAgICAqIHRvLgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gYXBwbHlNYXAgYXBwbHkgdGhlIG1hcCBjb25maWcgdG8gdGhlIHZhbHVlLiBTaG91bGQKICAgICAgICAgKiBvbmx5IGJlIGRvbmUgaWYgdGhpcyBub3JtYWxpemF0aW9uIGlzIGZvciBhIGRlcGVuZGVuY3kgSUQuCiAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1lCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIGJhc2VOYW1lLCBhcHBseU1hcCkgewogICAgICAgICAgICB2YXIgcGtnTWFpbiwgbWFwVmFsdWUsIG5hbWVQYXJ0cywgaSwgaiwgbmFtZVNlZ21lbnQsIGxhc3RJbmRleCwKICAgICAgICAgICAgICAgIGZvdW5kTWFwLCBmb3VuZEksIGZvdW5kU3Rhck1hcCwgc3RhckksIG5vcm1hbGl6ZWRCYXNlUGFydHMsCiAgICAgICAgICAgICAgICBiYXNlUGFydHMgPSAoYmFzZU5hbWUgJiYgYmFzZU5hbWUuc3BsaXQoJy8nKSksCiAgICAgICAgICAgICAgICBtYXAgPSBjb25maWcubWFwLAogICAgICAgICAgICAgICAgc3Rhck1hcCA9IG1hcCAmJiBtYXBbJyonXTsKCiAgICAgICAgICAgIC8vQWRqdXN0IGFueSByZWxhdGl2ZSBwYXRocy4KICAgICAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBuYW1lLmxlbmd0aCAtIDE7CgogICAgICAgICAgICAgICAgLy8gSWYgd2FudGluZyBub2RlIElEIGNvbXBhdGliaWxpdHksIHN0cmlwIC5qcyBmcm9tIGVuZAogICAgICAgICAgICAgICAgLy8gb2YgSURzLiBIYXZlIHRvIGRvIHRoaXMgaGVyZSwgYW5kIG5vdCBpbiBuYW1lVG9VcmwKICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugbm9kZSBhbGxvd3MgZWl0aGVyIC5qcyBvciBub24gLmpzIHRvIG1hcAogICAgICAgICAgICAgICAgLy8gdG8gc2FtZSBmaWxlLgogICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5ub2RlSWRDb21wYXQgJiYganNTdWZmaXhSZWdFeHAudGVzdChuYW1lW2xhc3RJbmRleF0pKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZVtsYXN0SW5kZXhdID0gbmFtZVtsYXN0SW5kZXhdLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTdGFydHMgd2l0aCBhICcuJyBzbyBuZWVkIHRoZSBiYXNlTmFtZQogICAgICAgICAgICAgICAgaWYgKG5hbWVbMF0uY2hhckF0KDApID09PSAnLicgJiYgYmFzZVBhcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgLy9Db252ZXJ0IGJhc2VOYW1lIHRvIGFycmF5LCBhbmQgbG9wIG9mZiB0aGUgbGFzdCBwYXJ0LAogICAgICAgICAgICAgICAgICAgIC8vc28gdGhhdCAuIG1hdGNoZXMgdGhhdCAnZGlyZWN0b3J5JyBhbmQgbm90IG5hbWUgb2YgdGhlIGJhc2VOYW1lJ3MKICAgICAgICAgICAgICAgICAgICAvL21vZHVsZS4gRm9yIGluc3RhbmNlLCBiYXNlTmFtZSBvZiAnb25lL3R3by90aHJlZScsIG1hcHMgdG8KICAgICAgICAgICAgICAgICAgICAvLydvbmUvdHdvL3RocmVlLmpzJywgYnV0IHdlIHdhbnQgdGhlIGRpcmVjdG9yeSwgJ29uZS90d28nIGZvcgogICAgICAgICAgICAgICAgICAgIC8vdGhpcyBub3JtYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRCYXNlUGFydHMgPSBiYXNlUGFydHMuc2xpY2UoMCwgYmFzZVBhcnRzLmxlbmd0aCAtIDEpOwogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVkQmFzZVBhcnRzLmNvbmNhdChuYW1lKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0cmltRG90cyhuYW1lKTsKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLmpvaW4oJy8nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9BcHBseSBtYXAgY29uZmlnIGlmIGF2YWlsYWJsZS4KICAgICAgICAgICAgaWYgKGFwcGx5TWFwICYmIG1hcCAmJiAoYmFzZVBhcnRzIHx8IHN0YXJNYXApKSB7CiAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7CgogICAgICAgICAgICAgICAgb3V0ZXJMb29wOiBmb3IgKGkgPSBuYW1lUGFydHMubGVuZ3RoOyBpID4gMDsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZVNlZ21lbnQgPSBuYW1lUGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZVBhcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgbG9uZ2VzdCBiYXNlTmFtZSBzZWdtZW50IG1hdGNoIGluIHRoZSBjb25maWcuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU28sIGRvIGpvaW5zIG9uIHRoZSBiaWdnZXN0IHRvIHNtYWxsZXN0IGxlbmd0aHMgb2YgYmFzZVBhcnRzLgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBiYXNlUGFydHMubGVuZ3RoOyBqID4gMDsgaiAtPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93bihtYXAsIGJhc2VQYXJ0cy5zbGljZSgwLCBqKS5qb2luKCcvJykpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmFzZU5hbWUgc2VnbWVudCBoYXMgY29uZmlnLCBmaW5kIGlmIGl0IGhhcyBvbmUgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcFZhbHVlLCBuYW1lU2VnbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWF0Y2gsIHVwZGF0ZSBuYW1lIHRvIHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gbWFwVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyTG9vcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgZm9yIGEgc3RhciBtYXAgbWF0Y2gsIGJ1dCBqdXN0IGhvbGQgb24gdG8gaXQsCiAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhIHNob3J0ZXIgc2VnbWVudCBtYXRjaCBsYXRlciBpbiBhIG1hdGNoaW5nCiAgICAgICAgICAgICAgICAgICAgLy9jb25maWcsIHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFwLgogICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTdGFyTWFwICYmIHN0YXJNYXAgJiYgZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFN0YXJNYXAgPSBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICBzdGFySSA9IGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghZm91bmRNYXAgJiYgZm91bmRTdGFyTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBmb3VuZFN0YXJNYXA7CiAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gc3Rhckk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGZvdW5kTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZVBhcnRzLnNwbGljZSgwLCBmb3VuZEksIGZvdW5kTWFwKTsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZVBhcnRzLmpvaW4oJy8nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gSWYgdGhlIG5hbWUgcG9pbnRzIHRvIGEgcGFja2FnZSdzIG5hbWUsIHVzZQogICAgICAgICAgICAvLyB0aGUgcGFja2FnZSBtYWluIGluc3RlYWQuCiAgICAgICAgICAgIHBrZ01haW4gPSBnZXRPd24oY29uZmlnLnBrZ3MsIG5hbWUpOwoKICAgICAgICAgICAgcmV0dXJuIHBrZ01haW4gPyBwa2dNYWluIDogbmFtZTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJlbW92ZVNjcmlwdChuYW1lKSB7CiAgICAgICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICAgICAgICAgIGVhY2goc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0Tm9kZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykgPT09IG5hbWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JykgPT09IGNvbnRleHQuY29udGV4dE5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdE5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaGFzUGF0aEZhbGxiYWNrKGlkKSB7CiAgICAgICAgICAgIHZhciBwYXRoQ29uZmlnID0gZ2V0T3duKGNvbmZpZy5wYXRocywgaWQpOwogICAgICAgICAgICBpZiAocGF0aENvbmZpZyAmJiBpc0FycmF5KHBhdGhDb25maWcpICYmIHBhdGhDb25maWcubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgLy9Qb3Agb2ZmIHRoZSBmaXJzdCBhcnJheSB2YWx1ZSwgc2luY2UgaXQgZmFpbGVkLCBhbmQKICAgICAgICAgICAgICAgIC8vcmV0cnkKICAgICAgICAgICAgICAgIHBhdGhDb25maWcuc2hpZnQoKTsKICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZS51bmRlZihpZCk7CgogICAgICAgICAgICAgICAgLy9DdXN0b20gcmVxdWlyZSB0aGF0IGRvZXMgbm90IGRvIG1hcCB0cmFuc2xhdGlvbiwgc2luY2UKICAgICAgICAgICAgICAgIC8vSUQgaXMgImFic29sdXRlIiwgYWxyZWFkeSBtYXBwZWQvcmVzb2x2ZWQuCiAgICAgICAgICAgICAgICBjb250ZXh0Lm1ha2VSZXF1aXJlKG51bGwsIHsKICAgICAgICAgICAgICAgICAgICBza2lwTWFwOiB0cnVlCiAgICAgICAgICAgICAgICB9KShbaWRdKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9UdXJucyBhIHBsdWdpbiFyZXNvdXJjZSB0byBbcGx1Z2luLCByZXNvdXJjZV0KICAgICAgICAvL3dpdGggdGhlIHBsdWdpbiBiZWluZyB1bmRlZmluZWQgaWYgdGhlIG5hbWUKICAgICAgICAvL2RpZCBub3QgaGF2ZSBhIHBsdWdpbiBwcmVmaXguCiAgICAgICAgZnVuY3Rpb24gc3BsaXRQcmVmaXgobmFtZSkgewogICAgICAgICAgICB2YXIgcHJlZml4LAogICAgICAgICAgICAgICAgaW5kZXggPSBuYW1lID8gbmFtZS5pbmRleE9mKCchJykgOiAtMTsKICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEsIG5hbWUubGVuZ3RoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gW3ByZWZpeCwgbmFtZV07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbW9kdWxlIG1hcHBpbmcgdGhhdCBpbmNsdWRlcyBwbHVnaW4gcHJlZml4LCBtb2R1bGUKICAgICAgICAgKiBuYW1lLCBhbmQgcGF0aC4gSWYgcGFyZW50TW9kdWxlTWFwIGlzIHByb3ZpZGVkIGl0IHdpbGwKICAgICAgICAgKiBhbHNvIG5vcm1hbGl6ZSB0aGUgbmFtZSB2aWEgcmVxdWlyZS5ub3JtYWxpemUoKQogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG1vZHVsZSBuYW1lCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IFtwYXJlbnRNb2R1bGVNYXBdIHBhcmVudCBtb2R1bGUgbWFwCiAgICAgICAgICogZm9yIHRoZSBtb2R1bGUgbmFtZSwgdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIG5hbWVzLgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNOb3JtYWxpemVkOiBpcyB0aGUgSUQgYWxyZWFkeSBub3JtYWxpemVkLgogICAgICAgICAqIFRoaXMgaXMgdHJ1ZSBpZiB0aGlzIGNhbGwgaXMgZG9uZSBmb3IgYSBkZWZpbmUoKSBtb2R1bGUgSUQuCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcDogYXBwbHkgdGhlIG1hcCBjb25maWcgdG8gdGhlIElELgogICAgICAgICAqIFNob3VsZCBvbmx5IGJlIHRydWUgaWYgdGhpcyBtYXAgaXMgZm9yIGEgZGVwZW5kZW5jeS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gbWFrZU1vZHVsZU1hcChuYW1lLCBwYXJlbnRNb2R1bGVNYXAsIGlzTm9ybWFsaXplZCwgYXBwbHlNYXApIHsKICAgICAgICAgICAgdmFyIHVybCwgcGx1Z2luTW9kdWxlLCBzdWZmaXgsIG5hbWVQYXJ0cywKICAgICAgICAgICAgICAgIHByZWZpeCA9IG51bGwsCiAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gcGFyZW50TW9kdWxlTWFwID8gcGFyZW50TW9kdWxlTWFwLm5hbWUgOiBudWxsLAogICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lID0gbmFtZSwKICAgICAgICAgICAgICAgIGlzRGVmaW5lID0gdHJ1ZSwKICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gJyc7CgogICAgICAgICAgICAvL0lmIG5vIG5hbWUsIHRoZW4gaXQgbWVhbnMgaXQgaXMgYSByZXF1aXJlIGNhbGwsIGdlbmVyYXRlIGFuCiAgICAgICAgICAgIC8vaW50ZXJuYWwgbmFtZS4KICAgICAgICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgICAgICAgICBpc0RlZmluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgbmFtZSA9ICdfQHInICsgKHJlcXVpcmVDb3VudGVyICs9IDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChuYW1lKTsKICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOwogICAgICAgICAgICBuYW1lID0gbmFtZVBhcnRzWzFdOwoKICAgICAgICAgICAgaWYgKHByZWZpeCkgewogICAgICAgICAgICAgICAgcHJlZml4ID0gbm9ybWFsaXplKHByZWZpeCwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwogICAgICAgICAgICAgICAgcGx1Z2luTW9kdWxlID0gZ2V0T3duKGRlZmluZWQsIHByZWZpeCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vQWNjb3VudCBmb3IgcmVsYXRpdmUgcGF0aHMgaWYgdGhlcmUgaXMgYSBiYXNlIG5hbWUuCiAgICAgICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICAgICAgICBpZiAocHJlZml4KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwbHVnaW5Nb2R1bGUgJiYgcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvL1BsdWdpbiBpcyBsb2FkZWQsIHVzZSBpdHMgbm9ybWFsaXplIG1ldGhvZC4KICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmVzdGVkIHBsdWdpbiByZWZlcmVuY2VzLCB0aGVuIGRvIG5vdCB0cnkgdG8KICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplLCBhcyBpdCB3aWxsIG5vdCBub3JtYWxpemUgY29ycmVjdGx5LiBUaGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBsYWNlcyBhIHJlc3RyaWN0aW9uIG9uIHJlc291cmNlSWRzLCBhbmQgdGhlIGxvbmdlcgogICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXJtIHNvbHV0aW9uIGlzIG5vdCB0byBub3JtYWxpemUgdW50aWwgcGx1Z2lucyBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZGVkIGFuZCBhbGwgbm9ybWFsaXphdGlvbnMgdG8gYWxsb3cgZm9yIGFzeW5jCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWRpbmcgb2YgYSBsb2FkZXIgcGx1Z2luLiBCdXQgZm9yIG5vdywgZml4ZXMgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbW1vbiB1c2VzLiBEZXRhaWxzIGluICMxMTMxCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZS5pbmRleE9mKCchJykgPT09IC0xID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9BIHJlZ3VsYXIgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKCiAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemVkIG5hbWUgbWF5IGJlIGEgcGx1Z2luIElEIGR1ZSB0byBtYXAgY29uZmlnCiAgICAgICAgICAgICAgICAgICAgLy9hcHBsaWNhdGlvbiBpbiBub3JtYWxpemUuIFRoZSBtYXAgY29uZmlnIHZhbHVlcyBtdXN0CiAgICAgICAgICAgICAgICAgICAgLy9hbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIHNvIGRvIG5vdCBuZWVkIHRvIHJlZG8gdGhhdCBwYXJ0LgogICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5vcm1hbGl6ZWROYW1lKTsKICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lUGFydHNbMV07CiAgICAgICAgICAgICAgICAgICAgaXNOb3JtYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgdXJsID0gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplZE5hbWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0lmIHRoZSBpZCBpcyBhIHBsdWdpbiBpZCB0aGF0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGlmIGl0IG5lZWRzCiAgICAgICAgICAgIC8vbm9ybWFsaXphdGlvbiwgc3RhbXAgaXQgd2l0aCBhIHVuaXF1ZSBJRCBzbyB0d28gbWF0Y2hpbmcgcmVsYXRpdmUKICAgICAgICAgICAgLy9pZHMgdGhhdCBtYXkgY29uZmxpY3QgY2FuIGJlIHNlcGFyYXRlLgogICAgICAgICAgICBzdWZmaXggPSBwcmVmaXggJiYgIXBsdWdpbk1vZHVsZSAmJiAhaXNOb3JtYWxpemVkID8KICAgICAgICAgICAgICAgICAgICAgJ191bm5vcm1hbGl6ZWQnICsgKHVubm9ybWFsaXplZENvdW50ZXIgKz0gMSkgOgogICAgICAgICAgICAgICAgICAgICAnJzsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeCwKICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLAogICAgICAgICAgICAgICAgcGFyZW50TWFwOiBwYXJlbnRNb2R1bGVNYXAsCiAgICAgICAgICAgICAgICB1bm5vcm1hbGl6ZWQ6ICEhc3VmZml4LAogICAgICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IG9yaWdpbmFsTmFtZSwKICAgICAgICAgICAgICAgIGlzRGVmaW5lOiBpc0RlZmluZSwKICAgICAgICAgICAgICAgIGlkOiAocHJlZml4ID8KICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgJyEnICsgbm9ybWFsaXplZE5hbWUgOgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSkgKyBzdWZmaXgKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGdldE1vZHVsZShkZXBNYXApIHsKICAgICAgICAgICAgdmFyIGlkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICBpZiAoIW1vZCkgewogICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdID0gbmV3IGNvbnRleHQuTW9kdWxlKGRlcE1hcCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBtb2Q7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBvbihkZXBNYXAsIG5hbWUsIGZuKSB7CiAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgaWYgKGhhc1Byb3AoZGVmaW5lZCwgaWQpICYmCiAgICAgICAgICAgICAgICAgICAgKCFtb2QgfHwgbW9kLmRlZmluZUVtaXRDb21wbGV0ZSkpIHsKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICBmbihkZWZpbmVkW2lkXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBtb2QgPSBnZXRNb2R1bGUoZGVwTWFwKTsKICAgICAgICAgICAgICAgIGlmIChtb2QuZXJyb3IgJiYgbmFtZSA9PT0gJ2Vycm9yJykgewogICAgICAgICAgICAgICAgICAgIGZuKG1vZC5lcnJvcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIG1vZC5vbihuYW1lLCBmbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZXJyLCBlcnJiYWNrKSB7CiAgICAgICAgICAgIHZhciBpZHMgPSBlcnIucmVxdWlyZU1vZHVsZXMsCiAgICAgICAgICAgICAgICBub3RpZmllZCA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKICAgICAgICAgICAgICAgIGVycmJhY2soZXJyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVhY2goaWRzLCBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL1NldCBlcnJvciBvbiBtb2R1bGUsIHNvIGl0IHNraXBzIHRpbWVvdXQgY2hlY2tzLgogICAgICAgICAgICAgICAgICAgICAgICBtb2QuZXJyb3IgPSBlcnI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKCFub3RpZmllZCkgewogICAgICAgICAgICAgICAgICAgIHJlcS5vbkVycm9yKGVycik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEludGVybmFsIG1ldGhvZCB0byB0cmFuc2ZlciBnbG9iYWxRdWV1ZSBpdGVtcyB0byB0aGlzIGNvbnRleHQncwogICAgICAgICAqIGRlZlF1ZXVlLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHRha2VHbG9iYWxRdWV1ZSgpIHsKICAgICAgICAgICAgLy9QdXNoIGFsbCB0aGUgZ2xvYmFsRGVmUXVldWUgaXRlbXMgaW50byB0aGUgY29udGV4dCdzIGRlZlF1ZXVlCiAgICAgICAgICAgIGlmIChnbG9iYWxEZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGVhY2goZ2xvYmFsRGVmUXVldWUsIGZ1bmN0aW9uKHF1ZXVlSXRlbSkgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IHF1ZXVlSXRlbVswXTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW2lkXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRlZlF1ZXVlLnB1c2gocXVldWVJdGVtKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaGFuZGxlcnMgPSB7CiAgICAgICAgICAgICdyZXF1aXJlJzogZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgaWYgKG1vZC5yZXF1aXJlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5yZXF1aXJlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZShtb2QubWFwKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdleHBvcnRzJzogZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgbW9kLnVzaW5nRXhwb3J0cyA9IHRydWU7CiAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGRlZmluZWRbbW9kLm1hcC5pZF0gPSBtb2QuZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QuZXhwb3J0cyA9IGRlZmluZWRbbW9kLm1hcC5pZF0gPSB7fSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAnbW9kdWxlJzogZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgaWYgKG1vZC5tb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLm1vZHVsZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QubW9kdWxlID0gewogICAgICAgICAgICAgICAgICAgICAgICBpZDogbW9kLm1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiBtb2QubWFwLnVybCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0T3duKGNvbmZpZy5jb25maWcsIG1vZC5tYXAuaWQpIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzOiBtb2QuZXhwb3J0cyB8fCAobW9kLmV4cG9ydHMgPSB7fSkKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIGNsZWFuUmVnaXN0cnkoaWQpIHsKICAgICAgICAgICAgLy9DbGVhbiB1cCBtYWNoaW5lcnkgdXNlZCBmb3Igd2FpdGluZyBtb2R1bGVzLgogICAgICAgICAgICBkZWxldGUgcmVnaXN0cnlbaWRdOwogICAgICAgICAgICBkZWxldGUgZW5hYmxlZFJlZ2lzdHJ5W2lkXTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGJyZWFrQ3ljbGUobW9kLCB0cmFjZWQsIHByb2Nlc3NlZCkgewogICAgICAgICAgICB2YXIgaWQgPSBtb2QubWFwLmlkOwoKICAgICAgICAgICAgaWYgKG1vZC5lcnJvcikgewogICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgbW9kLmVycm9yKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRyYWNlZFtpZF0gPSB0cnVlOwogICAgICAgICAgICAgICAgZWFjaChtb2QuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCwgaSkgewogICAgICAgICAgICAgICAgICAgIHZhciBkZXBJZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBJZCk7CgogICAgICAgICAgICAgICAgICAgIC8vT25seSBmb3JjZSB0aGluZ3MgdGhhdCBoYXZlIG5vdCBjb21wbGV0ZWQKICAgICAgICAgICAgICAgICAgICAvL2JlaW5nIGRlZmluZWQsIHNvIHN0aWxsIGluIHRoZSByZWdpc3RyeSwKICAgICAgICAgICAgICAgICAgICAvL2FuZCBvbmx5IGlmIGl0IGhhcyBub3QgYmVlbiBtYXRjaGVkIHVwCiAgICAgICAgICAgICAgICAgICAgLy9pbiB0aGUgbW9kdWxlIGFscmVhZHkuCiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcCAmJiAhbW9kLmRlcE1hdGNoZWRbaV0gJiYgIXByb2Nlc3NlZFtkZXBJZF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldE93bih0cmFjZWQsIGRlcElkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmRlZmluZURlcChpLCBkZWZpbmVkW2RlcElkXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuY2hlY2soKTsgLy9wYXNzIGZhbHNlPwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShkZXAsIHRyYWNlZCwgcHJvY2Vzc2VkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcHJvY2Vzc2VkW2lkXSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKCkgewogICAgICAgICAgICB2YXIgZXJyLCB1c2luZ1BhdGhGYWxsYmFjaywKICAgICAgICAgICAgICAgIHdhaXRJbnRlcnZhbCA9IGNvbmZpZy53YWl0U2Vjb25kcyAqIDEwMDAsCiAgICAgICAgICAgICAgICAvL0l0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgdGhlIHdhaXQgaW50ZXJ2YWwgYnkgdXNpbmcgd2FpdFNlY29uZHMgb2YgMC4KICAgICAgICAgICAgICAgIGV4cGlyZWQgPSB3YWl0SW50ZXJ2YWwgJiYgKGNvbnRleHQuc3RhcnRUaW1lICsgd2FpdEludGVydmFsKSA8IG5ldyBEYXRlKCkuZ2V0VGltZSgpLAogICAgICAgICAgICAgICAgbm9Mb2FkcyA9IFtdLAogICAgICAgICAgICAgICAgcmVxQ2FsbHMgPSBbXSwKICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IGZhbHNlLAogICAgICAgICAgICAgICAgbmVlZEN5Y2xlQ2hlY2sgPSB0cnVlOwoKICAgICAgICAgICAgLy9EbyBub3QgYm90aGVyIGlmIHRoaXMgY2FsbCB3YXMgYSByZXN1bHQgb2YgYSBjeWNsZSBicmVhay4KICAgICAgICAgICAgaWYgKGluQ2hlY2tMb2FkZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9IHRydWU7CgogICAgICAgICAgICAvL0ZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIGFsbCB0aGUgbW9kdWxlcy4KICAgICAgICAgICAgZWFjaFByb3AoZW5hYmxlZFJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICB2YXIgbWFwID0gbW9kLm1hcCwKICAgICAgICAgICAgICAgICAgICBtb2RJZCA9IG1hcC5pZDsKCiAgICAgICAgICAgICAgICAvL1NraXAgdGhpbmdzIHRoYXQgYXJlIG5vdCBlbmFibGVkIG9yIGluIGVycm9yIHN0YXRlLgogICAgICAgICAgICAgICAgaWYgKCFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIW1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgIHJlcUNhbGxzLnB1c2gobW9kKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIW1vZC5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1vZHVsZSBzaG91bGQgYmUgZXhlY3V0ZWQsIGFuZCBpdCBoYXMgbm90CiAgICAgICAgICAgICAgICAgICAgLy9iZWVuIGluaXRlZCBhbmQgdGltZSBpcyB1cCwgcmVtZW1iZXIgaXQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVkICYmIGV4cGlyZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2RJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nUGF0aEZhbGxiYWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0xvYWRzLnB1c2gobW9kSWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KG1vZElkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1vZC5pbml0ZWQgJiYgbW9kLmZldGNoZWQgJiYgbWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFwLnByZWZpeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ObyByZWFzb24gdG8ga2VlcCBsb29raW5nIGZvciB1bmZpbmlzaGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvYWRpbmcuIElmIHRoZSBvbmx5IHN0aWxsTG9hZGluZyBpcyBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3BsdWdpbiByZXNvdXJjZSB0aG91Z2gsIGtlZXAgZ29pbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2JlY2F1c2UgaXQgbWF5IGJlIHRoYXQgYSBwbHVnaW4gcmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaXMgd2FpdGluZyBvbiBhIG5vbi1wbHVnaW4gY3ljbGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5lZWRDeWNsZUNoZWNrID0gZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGlmIChleHBpcmVkICYmIG5vTG9hZHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAvL0lmIHdhaXQgdGltZSBleHBpcmVkLCB0aHJvdyBlcnJvciBvZiB1bmxvYWRlZCBtb2R1bGVzLgogICAgICAgICAgICAgICAgZXJyID0gbWFrZUVycm9yKCd0aW1lb3V0JywgJ0xvYWQgdGltZW91dCBmb3IgbW9kdWxlczogJyArIG5vTG9hZHMsIG51bGwsIG5vTG9hZHMpOwogICAgICAgICAgICAgICAgZXJyLmNvbnRleHROYW1lID0gY29udGV4dC5jb250ZXh0TmFtZTsKICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKGVycik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vTm90IGV4cGlyZWQsIGNoZWNrIGZvciBhIGN5Y2xlLgogICAgICAgICAgICBpZiAobmVlZEN5Y2xlQ2hlY2spIHsKICAgICAgICAgICAgICAgIGVhY2gocmVxQ2FsbHMsIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKG1vZCwge30sIHt9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0lmIHN0aWxsIHdhaXRpbmcgb24gbG9hZHMsIGFuZCB0aGUgd2FpdGluZyBsb2FkIGlzIHNvbWV0aGluZwogICAgICAgICAgICAvL290aGVyIHRoYW4gYSBwbHVnaW4gcmVzb3VyY2UsIG9yIHRoZXJlIGFyZSBzdGlsbCBvdXRzdGFuZGluZwogICAgICAgICAgICAvL3NjcmlwdHMsIHRoZW4ganVzdCB0cnkgYmFjayBsYXRlci4KICAgICAgICAgICAgaWYgKCghZXhwaXJlZCB8fCB1c2luZ1BhdGhGYWxsYmFjaykgJiYgc3RpbGxMb2FkaW5nKSB7CiAgICAgICAgICAgICAgICAvL1NvbWV0aGluZyBpcyBzdGlsbCB3YWl0aW5nIHRvIGxvYWQuIFdhaXQgZm9yIGl0LCBidXQgb25seQogICAgICAgICAgICAgICAgLy9pZiBhIHRpbWVvdXQgaXMgbm90IGFscmVhZHkgaW4gZWZmZWN0LgogICAgICAgICAgICAgICAgaWYgKChpc0Jyb3dzZXIgfHwgaXNXZWJXb3JrZXIpICYmICFjaGVja0xvYWRlZFRpbWVvdXRJZCkgewogICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgICAgICAgICB9LCA1MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGluQ2hlY2tMb2FkZWQgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIE1vZHVsZSA9IGZ1bmN0aW9uIChtYXApIHsKICAgICAgICAgICAgdGhpcy5ldmVudHMgPSBnZXRPd24odW5kZWZFdmVudHMsIG1hcC5pZCkgfHwge307CiAgICAgICAgICAgIHRoaXMubWFwID0gbWFwOwogICAgICAgICAgICB0aGlzLnNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1hcC5pZCk7CiAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0cyA9IFtdOwogICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXTsKICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkID0gW107CiAgICAgICAgICAgIHRoaXMucGx1Z2luTWFwcyA9IHt9OwogICAgICAgICAgICB0aGlzLmRlcENvdW50ID0gMDsKCiAgICAgICAgICAgIC8qIHRoaXMuZXhwb3J0cyB0aGlzLmZhY3RvcnkKICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW10sCiAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCwgdGhpcy5mZXRjaGVkCiAgICAgICAgICAgICovCiAgICAgICAgfTsKCiAgICAgICAgTW9kdWxlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKGRlcE1hcHMsIGZhY3RvcnksIGVycmJhY2ssIG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIC8vRG8gbm90IGRvIG1vcmUgaW5pdHMgaWYgYWxyZWFkeSBkb25lLiBDYW4gaGFwcGVuIGlmIHRoZXJlCiAgICAgICAgICAgICAgICAvL2FyZSBtdWx0aXBsZSBkZWZpbmUgY2FsbHMgZm9yIHRoZSBzYW1lIG1vZHVsZS4gVGhhdCBpcyBub3QKICAgICAgICAgICAgICAgIC8vYSBub3JtYWwsIGNvbW1vbiBjYXNlLCBidXQgaXQgaXMgYWxzbyBub3QgdW5leHBlY3RlZC4KICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRlZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5OwoKICAgICAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZWdpc3RlciBmb3IgZXJyb3JzIG9uIHRoaXMgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgIHRoaXMub24oJ2Vycm9yJywgZXJyYmFjayk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiBubyBlcnJiYWNrIGFscmVhZHksIGJ1dCB0aGVyZSBhcmUgZXJyb3IgbGlzdGVuZXJzCiAgICAgICAgICAgICAgICAgICAgLy9vbiB0aGlzIG1vZHVsZSwgc2V0IHVwIGFuIGVycmJhY2sgdG8gcGFzcyB0byB0aGUgZGVwcy4KICAgICAgICAgICAgICAgICAgICBlcnJiYWNrID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vRG8gYSBjb3B5IG9mIHRoZSBkZXBlbmRlbmN5IGFycmF5LCBzbyB0aGF0CiAgICAgICAgICAgICAgICAvL3NvdXJjZSBpbnB1dHMgYXJlIG5vdCBtb2RpZmllZC4gRm9yIGV4YW1wbGUKICAgICAgICAgICAgICAgIC8vInNoaW0iIGRlcHMgYXJlIHBhc3NlZCBpbiBoZXJlIGRpcmVjdGx5LCBhbmQKICAgICAgICAgICAgICAgIC8vZG9pbmcgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIG9mIHRoZSBkZXBNYXBzIGFycmF5CiAgICAgICAgICAgICAgICAvL3dvdWxkIGFmZmVjdCB0aGF0IGNvbmZpZy4KICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IGRlcE1hcHMgJiYgZGVwTWFwcy5zbGljZSgwKTsKCiAgICAgICAgICAgICAgICB0aGlzLmVycmJhY2sgPSBlcnJiYWNrOwoKICAgICAgICAgICAgICAgIC8vSW5kaWNhdGUgdGhpcyBtb2R1bGUgaGFzIGJlIGluaXRpYWxpemVkCiAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgdGhpcy5pZ25vcmUgPSBvcHRpb25zLmlnbm9yZTsKCiAgICAgICAgICAgICAgICAvL0NvdWxkIGhhdmUgb3B0aW9uIHRvIGluaXQgdGhpcyBtb2R1bGUgaW4gZW5hYmxlZCBtb2RlLAogICAgICAgICAgICAgICAgLy9vciBjb3VsZCBoYXZlIGJlZW4gcHJldmlvdXNseSBtYXJrZWQgYXMgZW5hYmxlZC4gSG93ZXZlciwKICAgICAgICAgICAgICAgIC8vdGhlIGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHVudGlsIGluaXQgaXMgY2FsbGVkLiBTbwogICAgICAgICAgICAgICAgLy9pZiBlbmFibGVkIHByZXZpb3VzbHksIG5vdyB0cmlnZ2VyIGRlcGVuZGVuY2llcyBhcyBlbmFibGVkLgogICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCB8fCB0aGlzLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAvL0VuYWJsZSB0aGlzIG1vZHVsZSBhbmQgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICAgICAgICAgIC8vV2lsbCBjYWxsIHRoaXMuY2hlY2soKQogICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGRlZmluZURlcDogZnVuY3Rpb24gKGksIGRlcEV4cG9ydHMpIHsKICAgICAgICAgICAgICAgIC8vQmVjYXVzZSBvZiBjeWNsZXMsIGRlZmluZWQgY2FsbGJhY2sgZm9yIGEgZ2l2ZW4KICAgICAgICAgICAgICAgIC8vZXhwb3J0IGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGVwTWF0Y2hlZFtpXSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZFtpXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCAtPSAxOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0c1tpXSA9IGRlcEV4cG9ydHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBmZXRjaDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuZmV0Y2hlZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgY29udGV4dC5zdGFydFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOwoKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLm1hcDsKCiAgICAgICAgICAgICAgICAvL0lmIHRoZSBtYW5hZ2VyIGlzIGZvciBhIHBsdWdpbiBtYW5hZ2VkIHJlc291cmNlLAogICAgICAgICAgICAgICAgLy9hc2sgdGhlIHBsdWdpbiB0byBsb2FkIGl0IG5vdy4KICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoaW0pIHsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ha2VSZXF1aXJlKHRoaXMubWFwLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUKICAgICAgICAgICAgICAgICAgICB9KSh0aGlzLnNoaW0uZGVwcyB8fCBbXSwgYmluZCh0aGlzLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXAucHJlZml4ID8gdGhpcy5jYWxsUGx1Z2luKCkgOiB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vUmVndWxhciBkZXBlbmRlbmN5LgogICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXAucHJlZml4ID8gdGhpcy5jYWxsUGx1Z2luKCkgOiB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLm1hcC51cmw7CgogICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICBpZiAoIXVybEZldGNoZWRbdXJsXSkgewogICAgICAgICAgICAgICAgICAgIHVybEZldGNoZWRbdXJsXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2FkKHRoaXMubWFwLmlkLCB1cmwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENoZWNrcyBpZiB0aGUgbW9kdWxlIGlzIHJlYWR5IHRvIGRlZmluZSBpdHNlbGYsIGFuZCBpZiBzbywKICAgICAgICAgICAgICogZGVmaW5lIGl0LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2hlY2s6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8IHRoaXMuZW5hYmxpbmcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGVyciwgY2pzTW9kdWxlLAogICAgICAgICAgICAgICAgICAgIGlkID0gdGhpcy5tYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgZGVwRXhwb3J0cyA9IHRoaXMuZGVwRXhwb3J0cywKICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gdGhpcy5leHBvcnRzLAogICAgICAgICAgICAgICAgICAgIGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7CgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRlZCkgewogICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZmV0Y2ggaWYgbm90IGFscmVhZHkgaW4gdGhlIGRlZlF1ZXVlLgogICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChjb250ZXh0LmRlZlF1ZXVlTWFwLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzLmVycm9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGVmaW5pbmcpIHsKICAgICAgICAgICAgICAgICAgICAvL1RoZSBmYWN0b3J5IGNvdWxkIHRyaWdnZXIgYW5vdGhlciByZXF1aXJlIGNhbGwKICAgICAgICAgICAgICAgICAgICAvL3RoYXQgd291bGQgcmVzdWx0IGluIGNoZWNraW5nIHRoaXMgbW9kdWxlIHRvCiAgICAgICAgICAgICAgICAgICAgLy9kZWZpbmUgaXRzZWxmIGFnYWluLiBJZiBhbHJlYWR5IGluIHRoZSBwcm9jZXNzCiAgICAgICAgICAgICAgICAgICAgLy9vZiBkb2luZyB0aGF0LCBza2lwIHRoaXMgd29yay4KICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVwQ291bnQgPCAxICYmICF0aGlzLmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZmFjdG9yeSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlcmUgaXMgYW4gZXJyb3IgbGlzdGVuZXIsIGZhdm9yIHBhc3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhhdCBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yLiBIb3dldmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmx5IGRvIGl0IGZvciBkZWZpbmUoKSdkICBtb2R1bGVzLiByZXF1aXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VycmJhY2tzIHNob3VsZCBub3QgYmUgY2FsbGVkIGZvciBmYWlsdXJlcyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGVpciBjYWxsYmFja3MgKCM2OTkpLiBIb3dldmVyIGlmIGEgZ2xvYmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29uRXJyb3IgaXMgc2V0LCB1c2UgdGhhdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5ldmVudHMuZXJyb3IgJiYgdGhpcy5tYXAuaXNEZWZpbmUpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IgIT09IGRlZmF1bHRPbkVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhdm9yIHJldHVybiB2YWx1ZSBvdmVyIGV4cG9ydHMuIElmIG5vZGUvY2pzIGluIHBsYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHdpbGwgbm90IGhhdmUgYSByZXR1cm4gdmFsdWUgYW55d2F5LiBGYXZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kdWxlLmV4cG9ydHMgYXNzaWdubWVudCBvdmVyIGV4cG9ydHMgb2JqZWN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVmaW5lICYmIGV4cG9ydHMgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZSA9IHRoaXMubW9kdWxlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjanNNb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNqc01vZHVsZS5leHBvcnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51c2luZ0V4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9leHBvcnRzIGFscmVhZHkgc2V0IHRoZSBkZWZpbmVkIHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gdGhpcy5leHBvcnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNYXAgPSB0aGlzLm1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSB0aGlzLm1hcC5pc0RlZmluZSA/IFt0aGlzLm1hcC5pZF0gOiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlVHlwZSA9IHRoaXMubWFwLmlzRGVmaW5lID8gJ2RlZmluZScgOiAncmVxdWlyZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoKHRoaXMuZXJyb3IgPSBlcnIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBsaXRlcmFsIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gZmFjdG9yeTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBvcnRzID0gZXhwb3J0czsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiAhdGhpcy5pZ25vcmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWRbaWRdID0gZXhwb3J0czsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLm9uUmVzb3VyY2VMb2FkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc0xvYWRNYXBzID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh0aGlzLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzTG9hZE1hcHMucHVzaChkZXBNYXAubm9ybWFsaXplZE1hcCB8fCBkZXBNYXApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5vblJlc291cmNlTG9hZChjb250ZXh0LCB0aGlzLm1hcCwgcmVzTG9hZE1hcHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHVwCiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vRmluaXNoZWQgdGhlIGRlZmluZSBzdGFnZS4gQWxsb3cgY2FsbGluZyBjaGVjayBhZ2FpbgogICAgICAgICAgICAgICAgICAgIC8vdG8gYWxsb3cgZGVmaW5lIG5vdGlmaWNhdGlvbnMgYmVsb3cgaW4gdGhlIGNhc2Ugb2YgYQogICAgICAgICAgICAgICAgICAgIC8vY3ljbGUuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZpbmVkICYmICF0aGlzLmRlZmluZUVtaXR0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVFbWl0dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWZpbmVkJywgdGhpcy5leHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVFbWl0Q29tcGxldGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBjYWxsUGx1Z2luOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXAsCiAgICAgICAgICAgICAgICAgICAgaWQgPSBtYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgLy9NYXAgYWxyZWFkeSBub3JtYWxpemVkIHRoZSBwcmVmaXguCiAgICAgICAgICAgICAgICAgICAgcGx1Z2luTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4KTsKCiAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAogICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCiAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChwbHVnaW5NYXApOwoKICAgICAgICAgICAgICAgIG9uKHBsdWdpbk1hcCwgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW4pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZCwgbm9ybWFsaXplZE1hcCwgbm9ybWFsaXplZE1vZCwKICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgdGhpcy5tYXAuaWQpLAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5tYXAubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHRoaXMubWFwLnBhcmVudE1hcCA/IHRoaXMubWFwLnBhcmVudE1hcC5uYW1lIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZShtYXAucGFyZW50TWFwLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL0lmIGN1cnJlbnQgbWFwIGlzIG5vdCBub3JtYWxpemVkLCB3YWl0IGZvciB0aGF0CiAgICAgICAgICAgICAgICAgICAgLy9ub3JtYWxpemVkIG5hbWUgdG8gbG9hZCBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcuCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLnVubm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgSUQgaWYgdGhlIHBsdWdpbiBhbGxvd3MgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4ubm9ybWFsaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGx1Z2luLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmVmaXggYW5kIG5hbWUgc2hvdWxkIGFscmVhZHkgYmUgbm9ybWFsaXplZCwgbm8gbmVlZAogICAgICAgICAgICAgICAgICAgICAgICAvL2ZvciBhcHBseWluZyBtYXAgY29uZmlnIGFnYWluIGVpdGhlci4KICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCArICchJyArIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnBhcmVudE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG9uKG5vcm1hbGl6ZWRNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAubm9ybWFsaXplZE1hcCA9IG5vcm1hbGl6ZWRNYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSwgbnVsbCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmU6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2QgPSBnZXRPd24ocmVnaXN0cnksIG5vcm1hbGl6ZWRNYXAuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZE1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gobm9ybWFsaXplZE1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZC5vbignZXJyb3InLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZC5lbmFibGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9JZiBhIHBhdGhzIGNvbmZpZywgdGhlbiBqdXN0IGxvYWQgdGhhdCBmaWxlIGluc3RlYWQgdG8KICAgICAgICAgICAgICAgICAgICAvL3Jlc29sdmUgdGhlIHBsdWdpbiwgYXMgaXQgaXMgYnVpbHQgaW50byB0aGF0IHBhdGhzIGxheWVyLgogICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGVJZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC51cmwgPSBjb250ZXh0Lm5hbWVUb1VybChidW5kbGVJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBsb2FkID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSwgbnVsbCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgbG9hZC5lcnJvciA9IGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTW9kdWxlcyA9IFtpZF07CgogICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSB0ZW1wIHVubm9ybWFsaXplZCBtb2R1bGVzIGZvciB0aGlzIG1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IHdpbGwgbmV2ZXIgYmUgcmVzb2x2ZWQgb3RoZXJ3aXNlIG5vdy4KICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlkLmluZGV4T2YoaWQgKyAnX3Vubm9ybWFsaXplZCcpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShtb2QubWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vQWxsb3cgcGx1Z2lucyB0byBsb2FkIG90aGVyIGNvZGUgd2l0aG91dCBoYXZpbmcgdG8ga25vdyB0aGUKICAgICAgICAgICAgICAgICAgICAvL2NvbnRleHQgb3IgaG93IHRvICdjb21wbGV0ZScgdGhlIGxvYWQuCiAgICAgICAgICAgICAgICAgICAgbG9hZC5mcm9tVGV4dCA9IGJpbmQodGhpcywgZnVuY3Rpb24gKHRleHQsIHRleHRBbHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLypqc2xpbnQgZXZpbDogdHJ1ZSAqLwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IG1hcC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTWFwID0gbWFrZU1vZHVsZU1hcChtb2R1bGVOYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ludGVyYWN0aXZlID0gdXNlSW50ZXJhY3RpdmU7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0FzIG9mIDIuMS4wLCBzdXBwb3J0IGp1c3QgcGFzc2luZyB0aGUgdGV4dCwgdG8gcmVpbmZvcmNlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZnJvbVRleHQgb25seSBiZWluZyBjYWxsZWQgb25jZSBwZXIgcmVzb3VyY2UuIFN0aWxsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc3VwcG9ydCBvbGQgc3R5bGUgb2YgcGFzc2luZyBtb2R1bGVOYW1lIGJ1dCBkaXNjYXJkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhhdCBtb2R1bGVOYW1lIGluIGZhdm9yIG9mIHRoZSBpbnRlcm5hbCByZWYuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0QWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dEFsdDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9UdXJuIG9mZiBpbnRlcmFjdGl2ZSBzY3JpcHQgbWF0Y2hpbmcgZm9yIElFIGZvciBhbnkgZGVmaW5lCiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FsbHMgaW4gdGhlIHRleHQsIHRoZW4gdHVybiBpdCBiYWNrIG9uIGF0IHRoZSBlbmQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9QcmltZSB0aGUgc3lzdGVtIGJ5IGNyZWF0aW5nIGEgbW9kdWxlIGluc3RhbmNlIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAvL2l0LgogICAgICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUobW9kdWxlTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vVHJhbnNmZXIgYW55IGNvbmZpZyB0byB0aGlzIG90aGVyIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Byb3AoY29uZmlnLmNvbmZpZywgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY29uZmlnW21vZHVsZU5hbWVdID0gY29uZmlnLmNvbmZpZ1tpZF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEuZXhlYyh0ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdmcm9tdGV4dGV2YWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbVRleHQgZXZhbCBmb3IgJyArIGlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZhaWxlZDogJyArIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhlIHBsdWdpbgogICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKG1vZHVsZU1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N1cHBvcnQgYW5vbnltb3VzIG1vZHVsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9CaW5kIHRoZSB2YWx1ZSBvZiB0aGF0IG1vZHVsZSB0byB0aGUgdmFsdWUgZm9yIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXNvdXJjZSBJRC4KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlKFttb2R1bGVOYW1lXSwgbG9hZCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vVXNlIHBhcmVudE5hbWUgaGVyZSBzaW5jZSB0aGUgcGx1Z2luJ3MgbmFtZSBpcyBub3QgcmVsaWFibGUsCiAgICAgICAgICAgICAgICAgICAgLy9jb3VsZCBiZSBzb21lIHdlaXJkIHN0cmluZyB3aXRoIG5vIHBhdGggdGhhdCBhY3R1YWxseSB3YW50cyB0bwogICAgICAgICAgICAgICAgICAgIC8vcmVmZXJlbmNlIHRoZSBwYXJlbnROYW1lJ3MgcGF0aC4KICAgICAgICAgICAgICAgICAgICBwbHVnaW4ubG9hZChtYXAubmFtZSwgbG9jYWxSZXF1aXJlLCBsb2FkLCBjb25maWcpOwogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHNbcGx1Z2luTWFwLmlkXSA9IHBsdWdpbk1hcDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgZW5hYmxlZFJlZ2lzdHJ5W3RoaXMubWFwLmlkXSA9IHRoaXM7CiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIC8vU2V0IGZsYWcgbWVudGlvbmluZyB0aGF0IHRoZSBtb2R1bGUgaXMgZW5hYmxpbmcsCiAgICAgICAgICAgICAgICAvL3NvIHRoYXQgaW1tZWRpYXRlIGNhbGxzIHRvIHRoZSBkZWZpbmVkIGNhbGxiYWNrcwogICAgICAgICAgICAgICAgLy9mb3IgZGVwZW5kZW5jaWVzIGRvIG5vdCB0cmlnZ2VyIGluYWR2ZXJ0ZW50IGxvYWQKICAgICAgICAgICAgICAgIC8vd2l0aCB0aGUgZGVwQ291bnQgc3RpbGwgYmVpbmcgemVyby4KICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxpbmcgPSB0cnVlOwoKICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggZGVwZW5kZW5jeQogICAgICAgICAgICAgICAgZWFjaCh0aGlzLmRlcE1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcE1hcCwgaSkgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbW9kLCBoYW5kbGVyOwoKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlcE1hcCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9EZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIGRlcE1hcAogICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCB3aXJlZCB1cCB0byB0aGlzIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICAgICAgZGVwTWFwID0gbWFrZU1vZHVsZU1hcChkZXBNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWFwLmlzRGVmaW5lID8gdGhpcy5tYXAgOiB0aGlzLm1hcC5wYXJlbnRNYXApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLnNraXBNYXApOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHNbaV0gPSBkZXBNYXA7CgogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gZ2V0T3duKGhhbmRsZXJzLCBkZXBNYXAuaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0c1tpXSA9IGhhbmRsZXIodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgKz0gMTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51bmRlZmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVEZXAoaSwgZGVwRXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCB0aGlzLmVycmJhY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gZGlyZWN0IGVycmJhY2sgb24gdGhpcyBtb2R1bGUsIGJ1dCBzb21ldGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2UgaXMgbGlzdGVuaW5nIGZvciBlcnJvcnMsIHNvIGJlIHN1cmUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSB0aGUgZXJyb3IgY29ycmVjdGx5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZXJyb3InLCBiaW5kKHRoaXMsIGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZCA9IGRlcE1hcC5pZDsKICAgICAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF07CgogICAgICAgICAgICAgICAgICAgIC8vU2tpcCBzcGVjaWFsIG1vZHVsZXMgbGlrZSAncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScKICAgICAgICAgICAgICAgICAgICAvL0Fsc28sIGRvbid0IGNhbGwgZW5hYmxlIGlmIGl0IGlzIGFscmVhZHkgZW5hYmxlZCwKICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGFudCBpbiBjaXJjdWxhciBkZXBlbmRlbmN5IGNhc2VzLgogICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChoYW5kbGVycywgaWQpICYmIG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUoZGVwTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBwbHVnaW4gdGhhdCBpcyB1c2VkIGluCiAgICAgICAgICAgICAgICAvL2EgZGVwZW5kZW5jeQogICAgICAgICAgICAgICAgZWFjaFByb3AodGhpcy5wbHVnaW5NYXBzLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW5NYXApIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBwbHVnaW5NYXAuaWQpOwogICAgICAgICAgICAgICAgICAgIGlmIChtb2QgJiYgIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxpbmcgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBvbjogZnVuY3Rpb24gKG5hbWUsIGNiKSB7CiAgICAgICAgICAgICAgICB2YXIgY2JzID0gdGhpcy5ldmVudHNbbmFtZV07CiAgICAgICAgICAgICAgICBpZiAoIWNicykgewogICAgICAgICAgICAgICAgICAgIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdID0gW107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYnMucHVzaChjYik7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBlbWl0OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7CiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZXZlbnRzW25hbWVdLCBmdW5jdGlvbiAoY2IpIHsKICAgICAgICAgICAgICAgICAgICBjYihldnQpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2Vycm9yJykgewogICAgICAgICAgICAgICAgICAgIC8vTm93IHRoYXQgdGhlIGVycm9yIGhhbmRsZXIgd2FzIHRyaWdnZXJlZCwgcmVtb3ZlCiAgICAgICAgICAgICAgICAgICAgLy90aGUgbGlzdGVuZXJzLCBzaW5jZSB0aGlzIGJyb2tlbiBNb2R1bGUgaW5zdGFuY2UKICAgICAgICAgICAgICAgICAgICAvL2NhbiBzdGF5IGFyb3VuZCBmb3IgYSB3aGlsZSBpbiB0aGUgcmVnaXN0cnkuCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRzW25hbWVdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gY2FsbEdldE1vZHVsZShhcmdzKSB7CiAgICAgICAgICAgIC8vU2tpcCBtb2R1bGVzIGFscmVhZHkgZGVmaW5lZC4KICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGFyZ3NbMF0pKSB7CiAgICAgICAgICAgICAgICBnZXRNb2R1bGUobWFrZU1vZHVsZU1hcChhcmdzWzBdLCBudWxsLCB0cnVlKSkuaW5pdChhcmdzWzFdLCBhcmdzWzJdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIobm9kZSwgZnVuYywgbmFtZSwgaWVOYW1lKSB7CiAgICAgICAgICAgIC8vRmF2b3IgZGV0YWNoRXZlbnQgYmVjYXVzZSBvZiBJRTkKICAgICAgICAgICAgLy9pc3N1ZSwgc2VlIGF0dGFjaEV2ZW50L2FkZEV2ZW50TGlzdGVuZXIgY29tbWVudCBlbHNld2hlcmUKICAgICAgICAgICAgLy9pbiB0aGlzIGZpbGUuCiAgICAgICAgICAgIGlmIChub2RlLmRldGFjaEV2ZW50ICYmICFpc09wZXJhKSB7CiAgICAgICAgICAgICAgICAvL1Byb2JhYmx5IElFLiBJZiBub3QgaXQgd2lsbCB0aHJvdyBhbiBlcnJvciwgd2hpY2ggd2lsbCBiZQogICAgICAgICAgICAgICAgLy91c2VmdWwgdG8ga25vdy4KICAgICAgICAgICAgICAgIGlmIChpZU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICBub2RlLmRldGFjaEV2ZW50KGllTmFtZSwgZnVuYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgZnVuYywgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHaXZlbiBhbiBldmVudCBmcm9tIGEgc2NyaXB0IG5vZGUsIGdldCB0aGUgcmVxdWlyZWpzIGluZm8gZnJvbSBpdCwKICAgICAgICAgKiBhbmQgdGhlbiByZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlIG5vZGUuCiAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0CiAgICAgICAgICogQHJldHVybnMge09iamVjdH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRTY3JpcHREYXRhKGV2dCkgewogICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90CiAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAogICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNlLgogICAgICAgICAgICB2YXIgbm9kZSA9IGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50OwoKICAgICAgICAgICAgLy9SZW1vdmUgdGhlIGxpc3RlbmVycyBvbmNlIGhlcmUuCiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRMb2FkLCAnbG9hZCcsICdvbnJlYWR5c3RhdGVjaGFuZ2UnKTsKICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdEVycm9yLCAnZXJyb3InKTsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBub2RlOiBub2RlLAogICAgICAgICAgICAgICAgaWQ6IG5vZGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpbnRha2VEZWZpbmVzKCkgewogICAgICAgICAgICB2YXIgYXJnczsKCiAgICAgICAgICAgIC8vQW55IGRlZmluZWQgbW9kdWxlcyBpbiB0aGUgZ2xvYmFsIHF1ZXVlLCBpbnRha2UgdGhlbSBub3cuCiAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgLy9NYWtlIHN1cmUgYW55IHJlbWFpbmluZyBkZWZRdWV1ZSBpdGVtcyBnZXQgcHJvcGVybHkgcHJvY2Vzc2VkLgogICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsKICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdtaXNtYXRjaCcsICdNaXNtYXRjaGVkIGFub255bW91cyBkZWZpbmUoKSBtb2R1bGU6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9hcmdzIGFyZSBpZCwgZGVwcywgZmFjdG9yeS4gU2hvdWxkIGJlIG5vcm1hbGl6ZWQgYnkgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9kZWZpbmUoKSBmdW5jdGlvbi4KICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsKICAgICAgICB9CgogICAgICAgIGNvbnRleHQgPSB7CiAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLAogICAgICAgICAgICBjb250ZXh0TmFtZTogY29udGV4dE5hbWUsCiAgICAgICAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeSwKICAgICAgICAgICAgZGVmaW5lZDogZGVmaW5lZCwKICAgICAgICAgICAgdXJsRmV0Y2hlZDogdXJsRmV0Y2hlZCwKICAgICAgICAgICAgZGVmUXVldWU6IGRlZlF1ZXVlLAogICAgICAgICAgICBkZWZRdWV1ZU1hcDoge30sCiAgICAgICAgICAgIE1vZHVsZTogTW9kdWxlLAogICAgICAgICAgICBtYWtlTW9kdWxlTWFwOiBtYWtlTW9kdWxlTWFwLAogICAgICAgICAgICBuZXh0VGljazogcmVxLm5leHRUaWNrLAogICAgICAgICAgICBvbkVycm9yOiBvbkVycm9yLAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIFNldCBhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250ZXh0LgogICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIGNvbmZpZyBvYmplY3QgdG8gaW50ZWdyYXRlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY29uZmlndXJlOiBmdW5jdGlvbiAoY2ZnKSB7CiAgICAgICAgICAgICAgICAvL01ha2Ugc3VyZSB0aGUgYmFzZVVybCBlbmRzIGluIGEgc2xhc2guCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmJhc2VVcmwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY2ZnLmJhc2VVcmwuY2hhckF0KGNmZy5iYXNlVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLmJhc2VVcmwgKz0gJy8nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IG9sZCBzdHlsZSB1cmxBcmdzIHN0cmluZyB0byBhIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjZmcudXJsQXJncyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdXJsQXJncyA9IGNmZy51cmxBcmdzOwogICAgICAgICAgICAgICAgICAgIGNmZy51cmxBcmdzID0gZnVuY3Rpb24oaWQsIHVybCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHVybEFyZ3M7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1NhdmUgb2ZmIHRoZSBwYXRocyBzaW5jZSB0aGV5IHJlcXVpcmUgc3BlY2lhbCBwcm9jZXNzaW5nLAogICAgICAgICAgICAgICAgLy90aGV5IGFyZSBhZGRpdGl2ZS4KICAgICAgICAgICAgICAgIHZhciBzaGltID0gY29uZmlnLnNoaW0sCiAgICAgICAgICAgICAgICAgICAgb2JqcyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXM6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbWFwOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgICAgIGlmIChvYmpzW3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlnW3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtaXhpbihjb25maWdbcHJvcF0sIHZhbHVlLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbcHJvcF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL1JldmVyc2UgbWFwIHRoZSBidW5kbGVzCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmJ1bmRsZXMpIHsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuYnVuZGxlcywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godmFsdWUsIGZ1bmN0aW9uICh2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gcHJvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXNNYXBbdl0gPSBwcm9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL01lcmdlIHNoaW0KICAgICAgICAgICAgICAgIGlmIChjZmcuc2hpbSkgewogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5zaGltLCBmdW5jdGlvbiAodmFsdWUsIGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzOiB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlLmV4cG9ydHMgfHwgdmFsdWUuaW5pdCkgJiYgIXZhbHVlLmV4cG9ydHNGbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwb3J0c0ZuID0gY29udGV4dC5tYWtlU2hpbUV4cG9ydHModmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW1baWRdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNoaW0gPSBzaGltOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vQWRqdXN0IHBhY2thZ2VzIGlmIG5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgIGlmIChjZmcucGFja2FnZXMpIHsKICAgICAgICAgICAgICAgICAgICBlYWNoKGNmZy5wYWNrYWdlcywgZnVuY3Rpb24gKHBrZ09iaikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24sIG5hbWU7CgogICAgICAgICAgICAgICAgICAgICAgICBwa2dPYmogPSB0eXBlb2YgcGtnT2JqID09PSAnc3RyaW5nJyA/IHtuYW1lOiBwa2dPYmp9IDogcGtnT2JqOwoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBrZ09iai5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBrZ09iai5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucGF0aHNbbmFtZV0gPSBwa2dPYmoubG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2F2ZSBwb2ludGVyIHRvIG1haW4gbW9kdWxlIElEIGZvciBwa2cgbmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgbGVhZGluZyBkb3QgaW4gbWFpbiwgc28gbWFpbiBwYXRocyBhcmUgbm9ybWFsaXplZCwKICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgcmVtb3ZlIGFueSB0cmFpbGluZyAuanMsIHNpbmNlIGRpZmZlcmVudCBwYWNrYWdlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZW52cyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9uczogc29tZSB1c2UgYSBtb2R1bGUgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zb21lIHVzZSBhIGZpbGUgbmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBrZ3NbbmFtZV0gPSBwa2dPYmoubmFtZSArICcvJyArIChwa2dPYmoubWFpbiB8fCAnbWFpbicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjdXJyRGlyUmVnRXhwLCAnJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBhcmUgYW55ICJ3YWl0aW5nIHRvIGV4ZWN1dGUiIG1vZHVsZXMgaW4gdGhlIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgLy91cGRhdGUgdGhlIG1hcHMgZm9yIHRoZW0sIHNpbmNlIHRoZWlyIGluZm8sIGxpa2UgVVJMcyB0byBsb2FkLAogICAgICAgICAgICAgICAgLy9tYXkgaGF2ZSBjaGFuZ2VkLgogICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QsIGlkKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiBtb2R1bGUgYWxyZWFkeSBoYXMgaW5pdCBjYWxsZWQsIHNpbmNlIGl0IGlzIHRvbwogICAgICAgICAgICAgICAgICAgIC8vbGF0ZSB0byBtb2RpZnkgdGhlbSwgYW5kIGlnbm9yZSB1bm5vcm1hbGl6ZWQgb25lcwogICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSBhcmUgdHJhbnNpZW50LgogICAgICAgICAgICAgICAgICAgIGlmICghbW9kLmluaXRlZCAmJiAhbW9kLm1hcC51bm5vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbW9kLm1hcCA9IG1ha2VNb2R1bGVNYXAoaWQsIG51bGwsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vSWYgYSBkZXBzIGFycmF5IG9yIGEgY29uZmlnIGNhbGxiYWNrIGlzIHNwZWNpZmllZCwgdGhlbiBjYWxsCiAgICAgICAgICAgICAgICAvL3JlcXVpcmUgd2l0aCB0aG9zZSBhcmdzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHJlcXVpcmUgaXMgZGVmaW5lZCBhcyBhCiAgICAgICAgICAgICAgICAvL2NvbmZpZyBvYmplY3QgYmVmb3JlIHJlcXVpcmUuanMgaXMgbG9hZGVkLgogICAgICAgICAgICAgICAgaWYgKGNmZy5kZXBzIHx8IGNmZy5jYWxsYmFjaykgewogICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZShjZmcuZGVwcyB8fCBbXSwgY2ZnLmNhbGxiYWNrKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG1ha2VTaGltRXhwb3J0czogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV0OwogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbml0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHZhbHVlLmluaXQuYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0IHx8ICh2YWx1ZS5leHBvcnRzICYmIGdldEdsb2JhbCh2YWx1ZS5leHBvcnRzKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZm47CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBtYWtlUmVxdWlyZTogZnVuY3Rpb24gKHJlbE1hcCwgb3B0aW9ucykgewogICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9jYWxSZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCBtYXAsIHJlcXVpcmVNb2Q7CgogICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJsZUJ1aWxkQ2FsbGJhY2sgJiYgY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suX19yZXF1aXJlSnNCdWlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlcHMgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JbnZhbGlkIGNhbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcigncmVxdWlyZWFyZ3MnLCAnSW52YWxpZCByZXF1aXJlIGNhbGwnKSwgZXJyYmFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgcmVxdWlyZXxleHBvcnRzfG1vZHVsZSBhcmUgcmVxdWVzdGVkLCBnZXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFsdWUgZm9yIHRoZW0gZnJvbSB0aGUgc3BlY2lhbCBoYW5kbGVycy4gQ2F2ZWF0OgogICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgb25seSB3b3JrcyB3aGlsZSBtb2R1bGUgaXMgYmVpbmcgZGVmaW5lZC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbE1hcCAmJiBoYXNQcm9wKGhhbmRsZXJzLCBkZXBzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJzW2RlcHNdKHJlZ2lzdHJ5W3JlbE1hcC5pZF0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N5bmNocm9ub3VzIGFjY2VzcyB0byBvbmUgbW9kdWxlLiBJZiByZXF1aXJlLmdldCBpcwogICAgICAgICAgICAgICAgICAgICAgICAvL2F2YWlsYWJsZSAoYXMgaW4gdGhlIE5vZGUgYWRhcHRlciksIHByZWZlciB0aGF0LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmdldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcS5nZXQoY29udGV4dCwgZGVwcywgcmVsTWFwLCBsb2NhbFJlcXVpcmUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29udGFpbnMgLiBvciAuLgogICAgICAgICAgICAgICAgICAgICAgICBtYXAgPSBtYWtlTW9kdWxlTWFwKGRlcHMsIHJlbE1hcCwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbm90bG9hZGVkJywgJ01vZHVsZSBuYW1lICInICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0IGZvciBjb250ZXh0OiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHROYW1lICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxNYXAgPyAnJyA6ICcuIFVzZSByZXF1aXJlKFtdKScpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZWRbaWRdOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9HcmFiIGRlZmluZXMgd2FpdGluZyBpbiB0aGUgZ2xvYmFsIHF1ZXVlLgogICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKCiAgICAgICAgICAgICAgICAgICAgLy9NYXJrIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFzIG5lZWRpbmcgdG8gYmUgbG9hZGVkLgogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL1NvbWUgZGVmaW5lcyBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVxdWlyZSBjYWxsLCBjb2xsZWN0IHRoZW0uCiAgICAgICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2QgPSBnZXRNb2R1bGUobWFrZU1vZHVsZU1hcChudWxsLCByZWxNYXApKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3RvcmUgaWYgbWFwIGNvbmZpZyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGlzIHJlcXVpcmUKICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxsIGZvciBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2Quc2tpcE1hcCA9IG9wdGlvbnMuc2tpcE1hcDsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2QuaW5pdChkZXBzLCBjYWxsYmFjaywgZXJyYmFjaywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbWl4aW4obG9jYWxSZXF1aXJlLCB7CiAgICAgICAgICAgICAgICAgICAgaXNCcm93c2VyOiBpc0Jyb3dzZXIsCgogICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgKyAuZXh0ZW5zaW9uIGludG8gYW4gVVJMIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICogKlJlcXVpcmVzKiB0aGUgdXNlIG9mIGEgbW9kdWxlIG5hbWUuIEl0IGRvZXMgbm90IHN1cHBvcnQgdXNpbmcKICAgICAgICAgICAgICAgICAgICAgKiBwbGFpbiBVUkxzIGxpa2UgbmFtZVRvVXJsLgogICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIHRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZVBsdXNFeHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbW9kdWxlTmFtZVBsdXNFeHQubGFzdEluZGV4T2YoJy4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zcGxpdCgnLycpWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWxhdGl2ZSA9IHNlZ21lbnQgPT09ICcuJyB8fCBzZWdtZW50ID09PSAnLi4nOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9IYXZlIGEgZmlsZSBleHRlbnNpb24gYWxpYXMsIGFuZCBpdCBpcyBub3QgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZG90cyBmcm9tIGEgcmVsYXRpdmUgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSAmJiAoIWlzUmVsYXRpdmUgfHwgaW5kZXggPiAxKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3Vic3RyaW5nKGluZGV4LCBtb2R1bGVOYW1lUGx1c0V4dC5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZVBsdXNFeHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoMCwgaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplKG1vZHVsZU5hbWVQbHVzRXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxNYXAgJiYgcmVsTWFwLmlkLCB0cnVlKSwgZXh0LCAgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgZGVmaW5lZDogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFsc2UsIHRydWUpLmlkKTsKICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQ6IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFsc2UsIHRydWUpLmlkOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChkZWZpbmVkLCBpZCkgfHwgaGFzUHJvcChyZWdpc3RyeSwgaWQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vT25seSBhbGxvdyB1bmRlZiBvbiB0b3AgbGV2ZWwgcmVxdWlyZSBjYWxscwogICAgICAgICAgICAgICAgaWYgKCFyZWxNYXApIHsKICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUudW5kZWYgPSBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9CaW5kIGFueSB3YWl0aW5nIGRlZmluZSgpIGNhbGxzIHRvIHRoaXMgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgLy9maXggZm9yICM0MDgKICAgICAgICAgICAgICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCB0cnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbW9kLnVuZGVmZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQoaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRlZmluZWRbaWRdOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdXJsRmV0Y2hlZFttYXAudXJsXTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVuZGVmRXZlbnRzW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gcXVldWVkIGRlZmluZXMgdG9vLiBHbyBiYWNrd2FyZHMKICAgICAgICAgICAgICAgICAgICAgICAgLy9pbiBhcnJheSBzbyB0aGF0IHRoZSBzcGxpY2VzIGRvIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAvL21lc3MgdXAgdGhlIGl0ZXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFJldmVyc2UoZGVmUXVldWUsIGZ1bmN0aW9uKGFyZ3MsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZlF1ZXVlLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LmRlZlF1ZXVlTWFwW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSG9sZCBvbiB0byBsaXN0ZW5lcnMgaW4gY2FzZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlIHdpbGwgYmUgYXR0ZW1wdGVkIHRvIGJlIHJlbG9hZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3VzaW5nIGEgZGlmZmVyZW50IGNvbmZpZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXZlbnRzLmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZkV2ZW50c1tpZF0gPSBtb2QuZXZlbnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENhbGxlZCB0byBlbmFibGUgYSBtb2R1bGUgaWYgaXQgaXMgc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5CiAgICAgICAgICAgICAqIGF3YWl0aW5nIGVuYWJsZW1lbnQuIEEgc2Vjb25kIGFyZywgcGFyZW50LCB0aGUgcGFyZW50IG1vZHVsZSwKICAgICAgICAgICAgICogaXMgcGFzc2VkIGluIGZvciBjb250ZXh0LCB3aGVuIHRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkKICAgICAgICAgICAgICogdGhlIG9wdGltaXplci4gTm90IHNob3duIGhlcmUgdG8ga2VlcCBjb2RlIGNvbXBhY3QuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uIChkZXBNYXApIHsKICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGRlcE1hcC5pZCk7CiAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKGRlcE1hcCkuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHVzZWQgYnkgZW52aXJvbm1lbnQgYWRhcHRlcnMgdG8gY29tcGxldGUgYSBsb2FkIGV2ZW50LgogICAgICAgICAgICAgKiBBIGxvYWQgZXZlbnQgY291bGQgYmUgYSBzY3JpcHQgbG9hZCBvciBqdXN0IGEgbG9hZCBwYXNzIGZyb20gYSBzeW5jaHJvbm91cwogICAgICAgICAgICAgKiBsb2FkIGNhbGwuCiAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gcG90ZW50aWFsbHkgY29tcGxldGUuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjb21wbGV0ZUxvYWQ6IGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7CiAgICAgICAgICAgICAgICB2YXIgZm91bmQsIGFyZ3MsIG1vZCwKICAgICAgICAgICAgICAgICAgICBzaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtb2R1bGVOYW1lKSB8fCB7fSwKICAgICAgICAgICAgICAgICAgICBzaEV4cG9ydHMgPSBzaGltLmV4cG9ydHM7CgogICAgICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBtb2R1bGVOYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFscmVhZHkgZm91bmQgYW4gYW5vbnltb3VzIG1vZHVsZSBhbmQgYm91bmQgaXQKICAgICAgICAgICAgICAgICAgICAgICAgLy90byB0aGlzIG5hbWUsIHRoZW4gdGhpcyBpcyBzb21lIG90aGVyIGFub24gbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vd2FpdGluZyBmb3IgaXRzIGNvbXBsZXRlTG9hZCB0byBmaXJlLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbMF0gPT09IG1vZHVsZU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Gb3VuZCBtYXRjaGluZyBkZWZpbmUgY2FsbCBmb3IgdGhpcyBzY3JpcHQhCiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwID0ge307CgogICAgICAgICAgICAgICAgLy9EbyB0aGlzIGFmdGVyIHRoZSBjeWNsZSBvZiBjYWxsR2V0TW9kdWxlIGluIGNhc2UgdGhlIHJlc3VsdAogICAgICAgICAgICAgICAgLy9vZiB0aG9zZSBjYWxscy9pbml0IGNhbGxzIGNoYW5nZXMgdGhlIHJlZ2lzdHJ5LgogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kICYmICFoYXNQcm9wKGRlZmluZWQsIG1vZHVsZU5hbWUpICYmIG1vZCAmJiAhbW9kLmluaXRlZCkgewogICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuZW5mb3JjZURlZmluZSAmJiAoIXNoRXhwb3J0cyB8fCAhZ2V0R2xvYmFsKHNoRXhwb3J0cykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kdWxlTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbm9kZWZpbmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm8gZGVmaW5lIGNhbGwgZm9yICcgKyBtb2R1bGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vQSBzY3JpcHQgdGhhdCBkb2VzIG5vdCBjYWxsIGRlZmluZSgpLCBzbyBqdXN0IHNpbXVsYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlIGNhbGwgZm9yIGl0LgogICAgICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKFttb2R1bGVOYW1lLCAoc2hpbS5kZXBzIHx8IFtdKSwgc2hpbS5leHBvcnRzRm5dKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lIHRvIGEgZmlsZSBwYXRoLiBTdXBwb3J0cyBjYXNlcyB3aGVyZQogICAgICAgICAgICAgKiBtb2R1bGVOYW1lIG1heSBhY3R1YWxseSBiZSBqdXN0IGFuIFVSTC4KICAgICAgICAgICAgICogTm90ZSB0aGF0IGl0ICoqZG9lcyBub3QqKiBjYWxsIG5vcm1hbGl6ZSBvbiB0aGUgbW9kdWxlTmFtZSwKICAgICAgICAgICAgICogaXQgaXMgYXNzdW1lZCB0byBoYXZlIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLiBUaGlzIGlzIGFuCiAgICAgICAgICAgICAqIGludGVybmFsIEFQSSwgbm90IGEgcHVibGljIG9uZS4gVXNlIHRvVXJsIGZvciB0aGUgcHVibGljIEFQSS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG5hbWVUb1VybDogZnVuY3Rpb24gKG1vZHVsZU5hbWUsIGV4dCwgc2tpcEV4dCkgewogICAgICAgICAgICAgICAgdmFyIHBhdGhzLCBzeW1zLCBpLCBwYXJlbnRNb2R1bGUsIHVybCwKICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoLCBidW5kbGVJZCwKICAgICAgICAgICAgICAgICAgICBwa2dNYWluID0gZ2V0T3duKGNvbmZpZy5wa2dzLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAocGtnTWFpbikgewogICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgPSBwa2dNYWluOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGJ1bmRsZUlkID0gZ2V0T3duKGJ1bmRsZXNNYXAsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChidW5kbGVJZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChidW5kbGVJZCwgZXh0LCBza2lwRXh0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0lmIGEgY29sb24gaXMgaW4gdGhlIFVSTCwgaXQgaW5kaWNhdGVzIGEgcHJvdG9jb2wgaXMgdXNlZCBhbmQgaXQgaXMganVzdAogICAgICAgICAgICAgICAgLy9hbiBVUkwgdG8gYSBmaWxlLCBvciBpZiBpdCBzdGFydHMgd2l0aCBhIHNsYXNoLCBjb250YWlucyBhIHF1ZXJ5IGFyZyAoaS5lLiA/KQogICAgICAgICAgICAgICAgLy9vciBlbmRzIHdpdGggLmpzLCB0aGVuIGFzc3VtZSB0aGUgdXNlciBtZWFudCB0byB1c2UgYW4gdXJsIGFuZCBub3QgYSBtb2R1bGUgaWQuCiAgICAgICAgICAgICAgICAvL1RoZSBzbGFzaCBpcyBpbXBvcnRhbnQgZm9yIHByb3RvY29sLWxlc3MgVVJMcyBhcyB3ZWxsIGFzIGZ1bGwgcGF0aHMuCiAgICAgICAgICAgICAgICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobW9kdWxlTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBwbGFpbiBwYXRoLCBub3QgbW9kdWxlIG5hbWUgbG9va3VwLCBzbyBqdXN0IHJldHVybiBpdC4KICAgICAgICAgICAgICAgICAgICAvL0FkZCBleHRlbnNpb24gaWYgaXQgaXMgaW5jbHVkZWQuIFRoaXMgaXMgYSBiaXQgd29ua3ksIG9ubHkgbm9uLS5qcyB0aGluZ3MgcGFzcwogICAgICAgICAgICAgICAgICAgIC8vYW4gZXh0ZW5zaW9uLCB0aGlzIG1ldGhvZCBwcm9iYWJseSBuZWVkcyB0byBiZSByZXdvcmtlZC4KICAgICAgICAgICAgICAgICAgICB1cmwgPSBtb2R1bGVOYW1lICsgKGV4dCB8fCAnJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vQSBtb2R1bGUgdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBwYXRoLgogICAgICAgICAgICAgICAgICAgIHBhdGhzID0gY29uZmlnLnBhdGhzOwoKICAgICAgICAgICAgICAgICAgICBzeW1zID0gbW9kdWxlTmFtZS5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgICAgIC8vRm9yIGVhY2ggbW9kdWxlIG5hbWUgc2VnbWVudCwgc2VlIGlmIHRoZXJlIGlzIGEgcGF0aAogICAgICAgICAgICAgICAgICAgIC8vcmVnaXN0ZXJlZCBmb3IgaXQuIFN0YXJ0IHdpdGggbW9zdCBzcGVjaWZpYyBuYW1lCiAgICAgICAgICAgICAgICAgICAgLy9hbmQgd29yayB1cCBmcm9tIGl0LgogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHN5bXMubGVuZ3RoOyBpID4gMDsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZHVsZSA9IHN5bXMuc2xpY2UoMCwgaSkuam9pbignLycpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCA9IGdldE93bihwYXRocywgcGFyZW50TW9kdWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFBhdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYW4gYXJyYXksIGl0IG1lYW5zIHRoZXJlIGFyZSBhIGZldyBjaG9pY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9DaG9vc2UgdGhlIG9uZSB0aGF0IGlzIGRlc2lyZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHBhcmVudFBhdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCA9IHBhcmVudFBhdGhbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zLnNwbGljZSgwLCBpLCBwYXJlbnRQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0pvaW4gdGhlIHBhdGggcGFydHMgdG9nZXRoZXIsIHRoZW4gZmlndXJlIG91dCBpZiBiYXNlVXJsIGlzIG5lZWRlZC4KICAgICAgICAgICAgICAgICAgICB1cmwgPSBzeW1zLmpvaW4oJy8nKTsKICAgICAgICAgICAgICAgICAgICB1cmwgKz0gKGV4dCB8fCAoL15kYXRhXDp8XmJsb2JcOnxcPy8udGVzdCh1cmwpIHx8IHNraXBFeHQgPyAnJyA6ICcuanMnKSk7CiAgICAgICAgICAgICAgICAgICAgdXJsID0gKHVybC5jaGFyQXQoMCkgPT09ICcvJyB8fCB1cmwubWF0Y2goL15bXHdcK1wuXC1dKzovKSA/ICcnIDogY29uZmlnLmJhc2VVcmwpICsgdXJsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsQXJncyAmJiAhL15ibG9iXDovLnRlc3QodXJsKSA/CiAgICAgICAgICAgICAgICAgICAgICAgdXJsICsgY29uZmlnLnVybEFyZ3MobW9kdWxlTmFtZSwgdXJsKSA6IHVybDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8vRGVsZWdhdGVzIHRvIHJlcS5sb2FkLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8KICAgICAgICAgICAgLy9hbGxvdyBvdmVycmlkaW5nIGluIHRoZSBvcHRpbWl6ZXIuCiAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChpZCwgdXJsKSB7CiAgICAgICAgICAgICAgICByZXEubG9hZChjb250ZXh0LCBpZCwgdXJsKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBFeGVjdXRlcyBhIG1vZHVsZSBjYWxsYmFjayBmdW5jdGlvbi4gQnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uCiAgICAgICAgICAgICAqIHNvbGVseSB0byBhbGxvdyB0aGUgYnVpbGQgc3lzdGVtIHRvIHNlcXVlbmNlIHRoZSBmaWxlcyBpbiB0aGUgYnVpbHQKICAgICAgICAgICAgICogbGF5ZXIgaW4gdGhlIHJpZ2h0IHNlcXVlbmNlLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcHJpdmF0ZQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZXhlY0NiOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGFyZ3MsIGV4cG9ydHMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseShleHBvcnRzLCBhcmdzKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBjYWxsYmFjayBmb3Igc2NyaXB0IGxvYWRzLCB1c2VkIHRvIGNoZWNrIHN0YXR1cyBvZiBsb2FkaW5nLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQgdGhlIGV2ZW50IGZyb20gdGhlIGJyb3dzZXIgZm9yIHRoZSBzY3JpcHQKICAgICAgICAgICAgICogdGhhdCB3YXMgbG9hZGVkLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb25TY3JpcHRMb2FkOiBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90CiAgICAgICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKICAgICAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCiAgICAgICAgICAgICAgICBpZiAoZXZ0LnR5cGUgPT09ICdsb2FkJyB8fAogICAgICAgICAgICAgICAgICAgICAgICAocmVhZHlSZWdFeHAudGVzdCgoZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQpLnJlYWR5U3RhdGUpKSkgewogICAgICAgICAgICAgICAgICAgIC8vUmVzZXQgaW50ZXJhY3RpdmUgc2NyaXB0IHNvIGEgc2NyaXB0IG5vZGUgaXMgbm90IGhlbGQgb250byBmb3IKICAgICAgICAgICAgICAgICAgICAvL3RvIGxvbmcuCiAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVTY3JpcHQgPSBudWxsOwoKICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb3V0IHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgYW5kIHRoZSBjb250ZXh0LgogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwogICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKGRhdGEuaWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENhbGxiYWNrIGZvciBzY3JpcHQgZXJyb3JzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb25TY3JpcHRFcnJvcjogZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CiAgICAgICAgICAgICAgICBpZiAoIWhhc1BhdGhGYWxsYmFjayhkYXRhLmlkKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRzID0gW107CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKCdfQHInKSAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWx1ZS5kZXBNYXBzLCBmdW5jdGlvbihkZXBNYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwTWFwLmlkID09PSBkYXRhLmlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudHMucHVzaChrZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignc2NyaXB0ZXJyb3InLCAnU2NyaXB0IGVycm9yIGZvciAiJyArIGRhdGEuaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyZW50cy5sZW5ndGggPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiwgbmVlZGVkIGJ5OiAnICsgcGFyZW50cy5qb2luKCcsICcpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyInKSwgZXZ0LCBbZGF0YS5pZF0pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGNvbnRleHQucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUoKTsKICAgICAgICByZXR1cm4gY29udGV4dDsKICAgIH0KCiAgICAvKioKICAgICAqIE1haW4gZW50cnkgcG9pbnQuCiAgICAgKgogICAgICogSWYgdGhlIG9ubHkgYXJndW1lbnQgdG8gcmVxdWlyZSBpcyBhIHN0cmluZywgdGhlbiB0aGUgbW9kdWxlIHRoYXQKICAgICAqIGlzIHJlcHJlc2VudGVkIGJ5IHRoYXQgc3RyaW5nIGlzIGZldGNoZWQgZm9yIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0LgogICAgICoKICAgICAqIElmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhlbiBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gYXJyYXkKICAgICAqIG9mIGRlcGVuZGVuY3kgc3RyaW5nIG5hbWVzIHRvIGZldGNoLiBBbiBvcHRpb25hbCBmdW5jdGlvbiBjYWxsYmFjayBjYW4KICAgICAqIGJlIHNwZWNpZmllZCB0byBleGVjdXRlIHdoZW4gYWxsIG9mIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlLgogICAgICoKICAgICAqIE1ha2UgYSBsb2NhbCByZXEgdmFyaWFibGUgdG8gaGVscCBDYWphIGNvbXBsaWFuY2UgKGl0IGFzc3VtZXMgdGhpbmdzCiAgICAgKiBvbiBhIHJlcXVpcmUgdGhhdCBhcmUgbm90IHN0YW5kYXJkaXplZCksIGFuZCB0byBnaXZlIGEgc2hvcnQKICAgICAqIG5hbWUgZm9yIG1pbmlmaWNhdGlvbi9sb2NhbCBzY29wZSB1c2UuCiAgICAgKi8KICAgIHJlcSA9IHJlcXVpcmVqcyA9IGZ1bmN0aW9uIChkZXBzLCBjYWxsYmFjaywgZXJyYmFjaywgb3B0aW9uYWwpIHsKCiAgICAgICAgLy9GaW5kIHRoZSByaWdodCBjb250ZXh0LCB1c2UgZGVmYXVsdAogICAgICAgIHZhciBjb250ZXh0LCBjb25maWcsCiAgICAgICAgICAgIGNvbnRleHROYW1lID0gZGVmQ29udGV4dE5hbWU7CgogICAgICAgIC8vIERldGVybWluZSBpZiBoYXZlIGNvbmZpZyBvYmplY3QgaW4gdGhlIGNhbGwuCiAgICAgICAgaWYgKCFpc0FycmF5KGRlcHMpICYmIHR5cGVvZiBkZXBzICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICAvLyBkZXBzIGlzIGEgY29uZmlnIG9iamVjdAogICAgICAgICAgICBjb25maWcgPSBkZXBzOwogICAgICAgICAgICBpZiAoaXNBcnJheShjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgIC8vIEFkanVzdCBhcmdzIGlmIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIGRlcHMgPSBjYWxsYmFjazsKICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZXJyYmFjazsKICAgICAgICAgICAgICAgIGVycmJhY2sgPSBvcHRpb25hbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRlcHMgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuY29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0TmFtZSA9IGNvbmZpZy5jb250ZXh0OwogICAgICAgIH0KCiAgICAgICAgY29udGV4dCA9IGdldE93bihjb250ZXh0cywgY29udGV4dE5hbWUpOwogICAgICAgIGlmICghY29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dHNbY29udGV4dE5hbWVdID0gcmVxLnMubmV3Q29udGV4dChjb250ZXh0TmFtZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnKSB7CiAgICAgICAgICAgIGNvbnRleHQuY29uZmlndXJlKGNvbmZpZyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gY29udGV4dC5yZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBTdXBwb3J0IHJlcXVpcmUuY29uZmlnKCkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29vcGVyYXRlIHdpdGggb3RoZXIKICAgICAqIEFNRCBsb2FkZXJzIG9uIGdsb2JhbGx5IGFncmVlZCBuYW1lcy4KICAgICAqLwogICAgcmVxLmNvbmZpZyA9IGZ1bmN0aW9uIChjb25maWcpIHsKICAgICAgICByZXR1cm4gcmVxKGNvbmZpZyk7CiAgICB9OwoKICAgIC8qKgogICAgICogRXhlY3V0ZSBzb21ldGhpbmcgYWZ0ZXIgdGhlIGN1cnJlbnQgdGljawogICAgICogb2YgdGhlIGV2ZW50IGxvb3AuIE92ZXJyaWRlIGZvciBvdGhlciBlbnZzCiAgICAgKiB0aGF0IGhhdmUgYSBiZXR0ZXIgc29sdXRpb24gdGhhbiBzZXRUaW1lb3V0LgogICAgICogQHBhcmFtICB7RnVuY3Rpb259IGZuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgbGF0ZXIuCiAgICAgKi8KICAgIHJlcS5uZXh0VGljayA9IHR5cGVvZiBzZXRUaW1lb3V0ICE9PSAndW5kZWZpbmVkJyA/IGZ1bmN0aW9uIChmbikgewogICAgICAgIHNldFRpbWVvdXQoZm4sIDQpOwogICAgfSA6IGZ1bmN0aW9uIChmbikgeyBmbigpOyB9OwoKICAgIC8qKgogICAgICogRXhwb3J0IHJlcXVpcmUgYXMgYSBnbG9iYWwsIGJ1dCBvbmx5IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCiAgICAgKi8KICAgIGlmICghcmVxdWlyZSkgewogICAgICAgIHJlcXVpcmUgPSByZXE7CiAgICB9CgogICAgcmVxLnZlcnNpb24gPSB2ZXJzaW9uOwoKICAgIC8vVXNlZCB0byBmaWx0ZXIgb3V0IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBhbHJlYWR5IHBhdGhzLgogICAgcmVxLmpzRXh0UmVnRXhwID0gL15cL3w6fFw/fFwuanMkLzsKICAgIHJlcS5pc0Jyb3dzZXIgPSBpc0Jyb3dzZXI7CiAgICBzID0gcmVxLnMgPSB7CiAgICAgICAgY29udGV4dHM6IGNvbnRleHRzLAogICAgICAgIG5ld0NvbnRleHQ6IG5ld0NvbnRleHQKICAgIH07CgogICAgLy9DcmVhdGUgZGVmYXVsdCBjb250ZXh0LgogICAgcmVxKHt9KTsKCiAgICAvL0V4cG9ydHMgc29tZSBjb250ZXh0LXNlbnNpdGl2ZSBtZXRob2RzIG9uIGdsb2JhbCByZXF1aXJlLgogICAgZWFjaChbCiAgICAgICAgJ3RvVXJsJywKICAgICAgICAndW5kZWYnLAogICAgICAgICdkZWZpbmVkJywKICAgICAgICAnc3BlY2lmaWVkJwogICAgXSwgZnVuY3Rpb24gKHByb3ApIHsKICAgICAgICAvL1JlZmVyZW5jZSBmcm9tIGNvbnRleHRzIGluc3RlYWQgb2YgZWFybHkgYmluZGluZyB0byBkZWZhdWx0IGNvbnRleHQsCiAgICAgICAgLy9zbyB0aGF0IGR1cmluZyBidWlsZHMsIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgY29udGV4dAogICAgICAgIC8vd2l0aCBpdHMgY29uZmlnIGdldHMgdXNlZC4KICAgICAgICByZXFbcHJvcF0gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBjdHggPSBjb250ZXh0c1tkZWZDb250ZXh0TmFtZV07CiAgICAgICAgICAgIHJldHVybiBjdHgucmVxdWlyZVtwcm9wXS5hcHBseShjdHgsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgIH0pOwoKICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICBoZWFkID0gcy5oZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTsKICAgICAgICAvL0lmIEJBU0UgdGFnIGlzIGluIHBsYXksIHVzaW5nIGFwcGVuZENoaWxkIGlzIGEgcHJvYmxlbSBmb3IgSUU2LgogICAgICAgIC8vV2hlbiB0aGF0IGJyb3dzZXIgZGllcywgdGhpcyBjYW4gYmUgcmVtb3ZlZC4gRGV0YWlscyBpbiB0aGlzIGpRdWVyeSBidWc6CiAgICAgICAgLy9odHRwOi8vZGV2LmpxdWVyeS5jb20vdGlja2V0LzI3MDkKICAgICAgICBiYXNlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdiYXNlJylbMF07CiAgICAgICAgaWYgKGJhc2VFbGVtZW50KSB7CiAgICAgICAgICAgIGhlYWQgPSBzLmhlYWQgPSBiYXNlRWxlbWVudC5wYXJlbnROb2RlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEFueSBlcnJvcnMgdGhhdCByZXF1aXJlIGV4cGxpY2l0bHkgZ2VuZXJhdGVzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMKICAgICAqIGZ1bmN0aW9uLiBJbnRlcmNlcHQvb3ZlcnJpZGUgaXQgaWYgeW91IHdhbnQgY3VzdG9tIGVycm9yIGhhbmRsaW5nLgogICAgICogQHBhcmFtIHtFcnJvcn0gZXJyIHRoZSBlcnJvciBvYmplY3QuCiAgICAgKi8KICAgIHJlcS5vbkVycm9yID0gZGVmYXVsdE9uRXJyb3I7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIHRoZSBub2RlIGZvciB0aGUgbG9hZCBjb21tYW5kLiBPbmx5IHVzZWQgaW4gYnJvd3NlciBlbnZzLgogICAgICovCiAgICByZXEuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChjb25maWcsIG1vZHVsZU5hbWUsIHVybCkgewogICAgICAgIHZhciBub2RlID0gY29uZmlnLnhodG1sID8KICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdodG1sOnNjcmlwdCcpIDoKICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIG5vZGUudHlwZSA9IGNvbmZpZy5zY3JpcHRUeXBlIHx8ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIG5vZGUuY2hhcnNldCA9ICd1dGYtOCc7CiAgICAgICAgbm9kZS5hc3luYyA9IHRydWU7CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICB9OwoKICAgIC8qKgogICAgICogRG9lcyB0aGUgcmVxdWVzdCB0byBsb2FkIGEgbW9kdWxlIGZvciB0aGUgYnJvd3NlciBjYXNlLgogICAgICogTWFrZSB0aGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYWxsb3cgb3RoZXIgZW52aXJvbm1lbnRzCiAgICAgKiB0byBvdmVycmlkZSBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCB0aGUgcmVxdWlyZSBjb250ZXh0IHRvIGZpbmQgc3RhdGUuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLgogICAgICogQHBhcmFtIHtPYmplY3R9IHVybCB0aGUgVVJMIHRvIHRoZSBtb2R1bGUuCiAgICAgKi8KICAgIHJlcS5sb2FkID0gZnVuY3Rpb24gKGNvbnRleHQsIG1vZHVsZU5hbWUsIHVybCkgewogICAgICAgIHZhciBjb25maWcgPSAoY29udGV4dCAmJiBjb250ZXh0LmNvbmZpZykgfHwge30sCiAgICAgICAgICAgIG5vZGU7CiAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICAvL0luIHRoZSBicm93c2VyIHNvIHVzZSBhIHNjcmlwdCB0YWcKICAgICAgICAgICAgbm9kZSA9IHJlcS5jcmVhdGVOb2RlKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKCiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JywgY29udGV4dC5jb250ZXh0TmFtZSk7CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgIC8vU2V0IHVwIGxvYWQgbGlzdGVuZXIuIFRlc3QgYXR0YWNoRXZlbnQgZmlyc3QgYmVjYXVzZSBJRTkgaGFzCiAgICAgICAgICAgIC8vYSBzdWJ0bGUgaXNzdWUgaW4gaXRzIGFkZEV2ZW50TGlzdGVuZXIgYW5kIHNjcmlwdCBvbmxvYWQgZmlyaW5ncwogICAgICAgICAgICAvL3RoYXQgZG8gbm90IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBhbGwgb3RoZXIgYnJvd3NlcnMgd2l0aAogICAgICAgICAgICAvL2FkZEV2ZW50TGlzdGVuZXIgc3VwcG9ydCwgd2hpY2ggZmlyZSB0aGUgb25sb2FkIGV2ZW50IGZvciBhCiAgICAgICAgICAgIC8vc2NyaXB0IHJpZ2h0IGFmdGVyIHRoZSBzY3JpcHQgZXhlY3V0aW9uLiBTZWU6CiAgICAgICAgICAgIC8vaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy82NDgwNTcvc2NyaXB0LW9ubG9hZC1ldmVudC1pcy1ub3QtZmlyZWQtaW1tZWRpYXRlbHktYWZ0ZXItc2NyaXB0LWV4ZWN1dGlvbgogICAgICAgICAgICAvL1VORk9SVFVOQVRFTFkgT3BlcmEgaW1wbGVtZW50cyBhdHRhY2hFdmVudCBidXQgZG9lcyBub3QgZm9sbG93IHRoZSBzY3JpcHQKICAgICAgICAgICAgLy9zY3JpcHQgZXhlY3V0aW9uIG1vZGUuCiAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaEV2ZW50ICYmCiAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBpZiBub2RlLmF0dGFjaEV2ZW50IGlzIGFydGlmaWNpYWxseSBhZGRlZCBieSBjdXN0b20gc2NyaXB0IG9yCiAgICAgICAgICAgICAgICAgICAgLy9uYXRpdmVseSBzdXBwb3J0ZWQgYnkgYnJvd3NlcgogICAgICAgICAgICAgICAgICAgIC8vcmVhZCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMTg3CiAgICAgICAgICAgICAgICAgICAgLy9pZiB3ZSBjYW4gTk9UIGZpbmQgW25hdGl2ZSBjb2RlXSB0aGVuIGl0IG11c3QgTk9UIG5hdGl2ZWx5IHN1cHBvcnRlZC4KICAgICAgICAgICAgICAgICAgICAvL2luIElFOCwgbm9kZS5hdHRhY2hFdmVudCBkb2VzIG5vdCBoYXZlIHRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAvL05vdGUgdGhlIHRlc3QgZm9yICJbbmF0aXZlIGNvZGUiIHdpdGggbm8gY2xvc2luZyBicmFjZSwgc2VlOgogICAgICAgICAgICAgICAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvaXNzdWVzLzI3MwogICAgICAgICAgICAgICAgICAgICEobm9kZS5hdHRhY2hFdmVudC50b1N0cmluZyAmJiBub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nKCkuaW5kZXhPZignW25hdGl2ZSBjb2RlJykgPCAwKSAmJgogICAgICAgICAgICAgICAgICAgICFpc09wZXJhKSB7CiAgICAgICAgICAgICAgICAvL1Byb2JhYmx5IElFLiBJRSAoYXQgbGVhc3QgNi04KSBkbyBub3QgZmlyZQogICAgICAgICAgICAgICAgLy9zY3JpcHQgb25sb2FkIHJpZ2h0IGFmdGVyIGV4ZWN1dGluZyB0aGUgc2NyaXB0LCBzbwogICAgICAgICAgICAgICAgLy93ZSBjYW5ub3QgdGllIHRoZSBhbm9ueW1vdXMgZGVmaW5lIGNhbGwgdG8gYSBuYW1lLgogICAgICAgICAgICAgICAgLy9Ib3dldmVyLCBJRSByZXBvcnRzIHRoZSBzY3JpcHQgYXMgYmVpbmcgaW4gJ2ludGVyYWN0aXZlJwogICAgICAgICAgICAgICAgLy9yZWFkeVN0YXRlIGF0IHRoZSB0aW1lIG9mIHRoZSBkZWZpbmUgY2FsbC4KICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBub2RlLmF0dGFjaEV2ZW50KCdvbnJlYWR5c3RhdGVjaGFuZ2UnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCk7CiAgICAgICAgICAgICAgICAvL0l0IHdvdWxkIGJlIGdyZWF0IHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIGhlcmUgdG8gY2F0Y2gKICAgICAgICAgICAgICAgIC8vNDA0cyBpbiBJRTkrLiBIb3dldmVyLCBvbnJlYWR5c3RhdGVjaGFuZ2Ugd2lsbCBmaXJlIGJlZm9yZQogICAgICAgICAgICAgICAgLy90aGUgZXJyb3IgaGFuZGxlciwgc28gdGhhdCBkb2VzIG5vdCBoZWxwLiBJZiBhZGRFdmVudExpc3RlbmVyCiAgICAgICAgICAgICAgICAvL2lzIHVzZWQsIHRoZW4gSUUgd2lsbCBmaXJlIGVycm9yIGJlZm9yZSBsb2FkLCBidXQgd2UgY2Fubm90CiAgICAgICAgICAgICAgICAvL3VzZSB0aGF0IHBhdGh3YXkgZ2l2ZW4gdGhlIGNvbm5lY3QubWljcm9zb2Z0LmNvbSBpc3N1ZQogICAgICAgICAgICAgICAgLy9tZW50aW9uZWQgYWJvdmUgYWJvdXQgbm90IGRvaW5nIHRoZSAnc2NyaXB0IGV4ZWN1dGUsCiAgICAgICAgICAgICAgICAvL3RoZW4gZmlyZSB0aGUgc2NyaXB0IGxvYWQgZXZlbnQgbGlzdGVuZXIgYmVmb3JlIGV4ZWN1dGUKICAgICAgICAgICAgICAgIC8vbmV4dCBzY3JpcHQnIHRoYXQgb3RoZXIgYnJvd3NlcnMgZG8uCiAgICAgICAgICAgICAgICAvL0Jlc3QgaG9wZTogSUUxMCBmaXhlcyB0aGUgaXNzdWVzLAogICAgICAgICAgICAgICAgLy9hbmQgdGhlbiBkZXN0cm95cyBhbGwgaW5zdGFsbHMgb2YgSUUgNi05LgogICAgICAgICAgICAgICAgLy9ub2RlLmF0dGFjaEV2ZW50KCdvbmVycm9yJywgY29udGV4dC5vblNjcmlwdEVycm9yKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNvbnRleHQub25TY3JpcHRMb2FkLCBmYWxzZSk7CiAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgY29udGV4dC5vblNjcmlwdEVycm9yLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbm9kZS5zcmMgPSB1cmw7CgogICAgICAgICAgICAvL0NhbGxpbmcgb25Ob2RlQ3JlYXRlZCBhZnRlciBhbGwgcHJvcGVydGllcyBvbiB0aGUgbm9kZSBoYXZlIGJlZW4KICAgICAgICAgICAgLy9zZXQsIGJ1dCBiZWZvcmUgaXQgaXMgcGxhY2VkIGluIHRoZSBET00uCiAgICAgICAgICAgIGlmIChjb25maWcub25Ob2RlQ3JlYXRlZCkgewogICAgICAgICAgICAgICAgY29uZmlnLm9uTm9kZUNyZWF0ZWQobm9kZSwgY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0ZvciBzb21lIGNhY2hlIGNhc2VzIGluIElFIDYtOCwgdGhlIHNjcmlwdCBleGVjdXRlcyBiZWZvcmUgdGhlIGVuZAogICAgICAgICAgICAvL29mIHRoZSBhcHBlbmRDaGlsZCBleGVjdXRpb24sIHNvIHRvIHRpZSBhbiBhbm9ueW1vdXMgZGVmaW5lCiAgICAgICAgICAgIC8vY2FsbCB0byB0aGUgbW9kdWxlIG5hbWUgKHdoaWNoIGlzIHN0b3JlZCBvbiB0aGUgbm9kZSksIGhvbGQgb24KICAgICAgICAgICAgLy90byBhIHJlZmVyZW5jZSB0byB0aGlzIG5vZGUsIGJ1dCBjbGVhciBhZnRlciB0aGUgRE9NIGluc2VydGlvbi4KICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbm9kZTsKICAgICAgICAgICAgaWYgKGJhc2VFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZShub2RlLCBiYXNlRWxlbWVudCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9IG51bGw7CgogICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICB9IGVsc2UgaWYgKGlzV2ViV29ya2VyKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAvL0luIGEgd2ViIHdvcmtlciwgdXNlIGltcG9ydFNjcmlwdHMuIFRoaXMgaXMgbm90IGEgdmVyeQogICAgICAgICAgICAgICAgLy9lZmZpY2llbnQgdXNlIG9mIGltcG9ydFNjcmlwdHMsIGltcG9ydFNjcmlwdHMgd2lsbCBibG9jayB1bnRpbAogICAgICAgICAgICAgICAgLy9pdHMgc2NyaXB0IGlzIGRvd25sb2FkZWQgYW5kIGV2YWx1YXRlZC4gSG93ZXZlciwgaWYgd2ViIHdvcmtlcnMKICAgICAgICAgICAgICAgIC8vYXJlIGluIHBsYXksIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGEgYnVpbGQgaGFzIGJlZW4gZG9uZSBzbwogICAgICAgICAgICAgICAgLy90aGF0IG9ubHkgb25lIHNjcmlwdCBuZWVkcyB0byBiZSBsb2FkZWQgYW55d2F5LiBUaGlzIG1heSBuZWVkCiAgICAgICAgICAgICAgICAvL3RvIGJlIHJlZXZhbHVhdGVkIGlmIG90aGVyIHVzZSBjYXNlcyBiZWNvbWUgY29tbW9uLgoKICAgICAgICAgICAgICAgIC8vIFBvc3QgYSB0YXNrIHRvIHRoZSBldmVudCBsb29wIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIFdlYktpdAogICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIHdvcmtlciBnZXRzIGdhcmJhZ2UtY29sbGVjdGVkIGFmdGVyIGNhbGxpbmcKICAgICAgICAgICAgICAgIC8vIGltcG9ydFNjcmlwdHMoKTogaHR0cHM6Ly93ZWJraXQub3JnL2IvMTUzMzE3CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge30sIDApOwogICAgICAgICAgICAgICAgaW1wb3J0U2NyaXB0cyh1cmwpOwoKICAgICAgICAgICAgICAgIC8vQWNjb3VudCBmb3IgYW5vbnltb3VzIG1vZHVsZXMKICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKG1vZHVsZU5hbWUpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IobWFrZUVycm9yKCdpbXBvcnRzY3JpcHRzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0U2NyaXB0cyBmYWlsZWQgZm9yICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lICsgJyBhdCAnICsgdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKICAgIGZ1bmN0aW9uIGdldEludGVyYWN0aXZlU2NyaXB0KCkgewogICAgICAgIGlmIChpbnRlcmFjdGl2ZVNjcmlwdCAmJiBpbnRlcmFjdGl2ZVNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CiAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKICAgICAgICB9CgogICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewogICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoaW50ZXJhY3RpdmVTY3JpcHQgPSBzY3JpcHQpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OwogICAgfQoKICAgIC8vTG9vayBmb3IgYSBkYXRhLW1haW4gc2NyaXB0IGF0dHJpYnV0ZSwgd2hpY2ggY291bGQgYWxzbyBhZGp1c3QgdGhlIGJhc2VVcmwuCiAgICBpZiAoaXNCcm93c2VyICYmICFjZmcuc2tpcERhdGFNYWluKSB7CiAgICAgICAgLy9GaWd1cmUgb3V0IGJhc2VVcmwuIEdldCBpdCBmcm9tIHRoZSBzY3JpcHQgdGFnIHdpdGggcmVxdWlyZS5qcyBpbiBpdC4KICAgICAgICBlYWNoUmV2ZXJzZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKICAgICAgICAgICAgLy9TZXQgdGhlICdoZWFkJyB3aGVyZSB3ZSBjYW4gYXBwZW5kIGNoaWxkcmVuIGJ5CiAgICAgICAgICAgIC8vdXNpbmcgdGhlIHNjcmlwdCdzIHBhcmVudC4KICAgICAgICAgICAgaWYgKCFoZWFkKSB7CiAgICAgICAgICAgICAgICBoZWFkID0gc2NyaXB0LnBhcmVudE5vZGU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vTG9vayBmb3IgYSBkYXRhLW1haW4gYXR0cmlidXRlIHRvIHNldCBtYWluIHNjcmlwdCBmb3IgdGhlIHBhZ2UKICAgICAgICAgICAgLy90byBsb2FkLiBJZiBpdCBpcyB0aGVyZSwgdGhlIHBhdGggdG8gZGF0YSBtYWluIGJlY29tZXMgdGhlCiAgICAgICAgICAgIC8vYmFzZVVybCwgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0LgogICAgICAgICAgICBkYXRhTWFpbiA9IHNjcmlwdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFpbicpOwogICAgICAgICAgICBpZiAoZGF0YU1haW4pIHsKICAgICAgICAgICAgICAgIC8vUHJlc2VydmUgZGF0YU1haW4gaW4gY2FzZSBpdCBpcyBhIHBhdGggKGkuZS4gY29udGFpbnMgJz8nKQogICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwoKICAgICAgICAgICAgICAgIC8vU2V0IGZpbmFsIGJhc2VVcmwgaWYgdGhlcmUgaXMgbm90IGFscmVhZHkgYW4gZXhwbGljaXQgb25lLAogICAgICAgICAgICAgICAgLy9idXQgb25seSBkbyBzbyBpZiB0aGUgZGF0YS1tYWluIHZhbHVlIGlzIG5vdCBhIGxvYWRlciBwbHVnaW4KICAgICAgICAgICAgICAgIC8vbW9kdWxlIElELgogICAgICAgICAgICAgICAgaWYgKCFjZmcuYmFzZVVybCAmJiBtYWluU2NyaXB0LmluZGV4T2YoJyEnKSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb2ZmIHRoZSBkaXJlY3Rvcnkgb2YgZGF0YS1tYWluIGZvciB1c2UgYXMgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9iYXNlVXJsLgogICAgICAgICAgICAgICAgICAgIHNyYyA9IG1haW5TY3JpcHQuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gc3JjLnBvcCgpOwogICAgICAgICAgICAgICAgICAgIHN1YlBhdGggPSBzcmMubGVuZ3RoID8gc3JjLmpvaW4oJy8nKSAgKyAnLycgOiAnLi8nOwoKICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCA9IHN1YlBhdGg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9TdHJpcCBvZmYgYW55IHRyYWlsaW5nIC5qcyBzaW5jZSBtYWluU2NyaXB0IGlzIG5vdwogICAgICAgICAgICAgICAgLy9saWtlIGEgbW9kdWxlIG5hbWUuCiAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gbWFpblNjcmlwdC5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CgogICAgICAgICAgICAgICAgLy9JZiBtYWluU2NyaXB0IGlzIHN0aWxsIGEgcGF0aCwgZmFsbCBiYWNrIHRvIGRhdGFNYWluCiAgICAgICAgICAgICAgICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobWFpblNjcmlwdCkpIHsKICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9QdXQgdGhlIGRhdGEtbWFpbiBzY3JpcHQgaW4gdGhlIGZpbGVzIHRvIGxvYWQuCiAgICAgICAgICAgICAgICBjZmcuZGVwcyA9IGNmZy5kZXBzID8gY2ZnLmRlcHMuY29uY2F0KG1haW5TY3JpcHQpIDogW21haW5TY3JpcHRdOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGRlZmluaXRpb25zIG9mIG1vZHVsZXMuIERpZmZlcnMgZnJvbQogICAgICogcmVxdWlyZSgpIGluIHRoYXQgYSBzdHJpbmcgZm9yIHRoZSBtb2R1bGUgc2hvdWxkIGJlIHRoZSBmaXJzdCBhcmd1bWVudCwKICAgICAqIGFuZCB0aGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZCBzaG91bGQKICAgICAqIHJldHVybiBhIHZhbHVlIHRvIGRlZmluZSB0aGUgbW9kdWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGFyZ3VtZW50J3MKICAgICAqIG5hbWUuCiAgICAgKi8KICAgIGRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBkZXBzLCBjYWxsYmFjaykgewogICAgICAgIHZhciBub2RlLCBjb250ZXh0OwoKICAgICAgICAvL0FsbG93IGZvciBhbm9ueW1vdXMgbW9kdWxlcwogICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgLy9BZGp1c3QgYXJncyBhcHByb3ByaWF0ZWx5CiAgICAgICAgICAgIGNhbGxiYWNrID0gZGVwczsKICAgICAgICAgICAgZGVwcyA9IG5hbWU7CiAgICAgICAgICAgIG5hbWUgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy9UaGlzIG1vZHVsZSBtYXkgbm90IGhhdmUgZGVwZW5kZW5jaWVzCiAgICAgICAgaWYgKCFpc0FycmF5KGRlcHMpKSB7CiAgICAgICAgICAgIGNhbGxiYWNrID0gZGVwczsKICAgICAgICAgICAgZGVwcyA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvL0lmIG5vIG5hbWUsIGFuZCBjYWxsYmFjayBpcyBhIGZ1bmN0aW9uLCB0aGVuIGZpZ3VyZSBvdXQgaWYgaXQgYQogICAgICAgIC8vQ29tbW9uSlMgdGhpbmcgd2l0aCBkZXBlbmRlbmNpZXMuCiAgICAgICAgaWYgKCFkZXBzICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgIGRlcHMgPSBbXTsKICAgICAgICAgICAgLy9SZW1vdmUgY29tbWVudHMgZnJvbSB0aGUgY2FsbGJhY2sgc3RyaW5nLAogICAgICAgICAgICAvL2xvb2sgZm9yIHJlcXVpcmUgY2FsbHMsIGFuZCBwdWxsIHRoZW0gaW50byB0aGUgZGVwZW5kZW5jaWVzLAogICAgICAgICAgICAvL2J1dCBvbmx5IGlmIHRoZXJlIGFyZSBmdW5jdGlvbiBhcmdzLgogICAgICAgICAgICBpZiAoY2FsbGJhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY29tbWVudFJlZ0V4cCwgY29tbWVudFJlcGxhY2UpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY2pzUmVxdWlyZVJlZ0V4cCwgZnVuY3Rpb24gKG1hdGNoLCBkZXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9NYXkgYmUgYSBDb21tb25KUyB0aGluZyBldmVuIHdpdGhvdXQgcmVxdWlyZSBjYWxscywgYnV0IHN0aWxsCiAgICAgICAgICAgICAgICAvL2NvdWxkIHVzZSBleHBvcnRzLCBhbmQgbW9kdWxlLiBBdm9pZCBkb2luZyBleHBvcnRzIGFuZCBtb2R1bGUKICAgICAgICAgICAgICAgIC8vd29yayB0aG91Z2ggaWYgaXQganVzdCBuZWVkcyByZXF1aXJlLgogICAgICAgICAgICAgICAgLy9SRVFVSVJFUyB0aGUgZnVuY3Rpb24gdG8gZXhwZWN0IHRoZSBDb21tb25KUyB2YXJpYWJsZXMgaW4gdGhlCiAgICAgICAgICAgICAgICAvL29yZGVyIGxpc3RlZCBiZWxvdy4KICAgICAgICAgICAgICAgIGRlcHMgPSAoY2FsbGJhY2subGVuZ3RoID09PSAxID8gWydyZXF1aXJlJ10gOiBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnXSkuY29uY2F0KGRlcHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL0lmIGluIElFIDYtOCBhbmQgaGl0IGFuIGFub255bW91cyBkZWZpbmUoKSBjYWxsLCBkbyB0aGUgaW50ZXJhY3RpdmUKICAgICAgICAvL3dvcmsuCiAgICAgICAgaWYgKHVzZUludGVyYWN0aXZlKSB7CiAgICAgICAgICAgIG5vZGUgPSBjdXJyZW50bHlBZGRpbmdTY3JpcHQgfHwgZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKTsKICAgICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgICAgIGlmICghbmFtZSkgewogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dHNbbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vQWx3YXlzIHNhdmUgb2ZmIGV2YWx1YXRpbmcgdGhlIGRlZiBjYWxsIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGhhbmRsZXIuCiAgICAgICAgLy9UaGlzIGFsbG93cyBtdWx0aXBsZSBtb2R1bGVzIHRvIGJlIGluIGEgZmlsZSB3aXRob3V0IHByZW1hdHVyZWx5CiAgICAgICAgLy90cmFjaW5nIGRlcGVuZGVuY2llcywgYW5kIGFsbG93cyBmb3IgYW5vbnltb3VzIG1vZHVsZSBzdXBwb3J0LAogICAgICAgIC8vd2hlcmUgdGhlIG1vZHVsZSBuYW1lIGlzIG5vdCBrbm93biB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBldmVudAogICAgICAgIC8vb2NjdXJzLiBJZiBubyBjb250ZXh0LCB1c2UgdGhlIGdsb2JhbCBxdWV1ZSwgYW5kIGdldCBpdCBwcm9jZXNzZWQKICAgICAgICAvL2luIHRoZSBvbnNjcmlwdCBsb2FkIGNhbGxiYWNrLgogICAgICAgIGlmIChjb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWUucHVzaChbbmFtZSwgZGVwcywgY2FsbGJhY2tdKTsKICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcFtuYW1lXSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2xvYmFsRGVmUXVldWUucHVzaChbbmFtZSwgZGVwcywgY2FsbGJhY2tdKTsKICAgICAgICB9CiAgICB9OwoKICAgIGRlZmluZS5hbWQgPSB7CiAgICAgICAgalF1ZXJ5OiB0cnVlCiAgICB9OwoKICAgIC8qKgogICAgICogRXhlY3V0ZXMgdGhlIHRleHQuIE5vcm1hbGx5IGp1c3QgdXNlcyBldmFsLCBidXQgY2FuIGJlIG1vZGlmaWVkCiAgICAgKiB0byB1c2UgYSBiZXR0ZXIsIGVudmlyb25tZW50LXNwZWNpZmljIGNhbGwuIE9ubHkgdXNlZCBmb3IgdHJhbnNwaWxpbmcKICAgICAqIGxvYWRlciBwbHVnaW5zLCBub3QgZm9yIHBsYWluIEpTIG1vZHVsZXMuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCB0aGUgdGV4dCB0byBleGVjdXRlL2V2YWx1YXRlLgogICAgICovCiAgICByZXEuZXhlYyA9IGZ1bmN0aW9uICh0ZXh0KSB7CiAgICAgICAgLypqc2xpbnQgZXZpbDogdHJ1ZSAqLwogICAgICAgIHJldHVybiBldmFsKHRleHQpOwogICAgfTsKCiAgICAvL1NldCB1cCB3aXRoIGNvbmZpZyBpbmZvLgogICAgcmVxKGNmZyk7Cn0odGhpcywgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IHNldFRpbWVvdXQpKSk7Cgo=", + "ok": true, + "headers": [ + [ + "content-type", + "text/javascript; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/icon_bundle.svg": { + "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYWRkXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImFycm93X2JhY2tfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImFycm93X2Rvd253YXJkXzI0cHgiPjxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik0yMCAxMmwtMS40MS0xLjQxTDEzIDE2LjE3VjRoLTJ2MTIuMTdsLTUuNTgtNS41OUw0IDEybDggOCA4LTh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYXJyb3dfZm9yd2FyZF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDRsLTEuNDEgMS40MUwxNi4xNyAxMUg0djJoMTIuMTdsLTUuNTggNS41OUwxMiAyMGw4LTh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfdXB3YXJkXzI0cHgiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYnJpZ2h0bmVzc182XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4VjZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYnVnX3JlcG9ydF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjYW5jZWxfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoYW5nZV9oaXN0b3J5XzI0cHgiPjxwYXRoIGQ9Ik0xMiA3Ljc3TDE4LjM5IDE4SDUuNjFMMTIgNy43N00xMiA0TDIgMjBoMjBMMTIgNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjaGV2cm9uX2xlZnRfMjRweCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hldnJvbl9yaWdodF8yNHB4Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2xlYXJfMjRweCI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJjbG9zZV8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjb250ZW50X2NvcHlfMjRweCI+PHBhdGggZD0iTTE2IDFINGMtMS4xIDAtMiAuOS0yIDJ2MTRoMlYzaDEyVjF6bTMgNEg4Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDExYzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTZIOFY3aDExdjE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJkYXJrX21vZGVfMjRweCI+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PHBhdGggZD0iTTEyLDNjLTQuOTcsMC05LDQuMDMtOSw5czQuMDMsOSw5LDlzOS00LjAzLDktOWMwLTAuNDYtMC4wNC0wLjkyLTAuMS0xLjM2Yy0wLjk4LDEuMzctMi41OCwyLjI2LTQuNCwyLjI2IGMtMi45OCwwLTUuNC0yLjQyLTUuNC01LjRjMC0xLjgxLDAuODktMy40MiwyLjI2LTQuNEMxMi45MiwzLjA0LDEyLjQ2LDMsMTIsM0wxMiwzeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImRvbmVfMjRweCI+PHBhdGggZD0iTTkgMTYuMkw0LjggMTJsLTEuNCAxLjRMOSAxOSAyMSA3bC0xLjQtMS40TDkgMTYuMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJkcmFnX2luZGljYXRvcl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTEgMThjMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yIC45LTIgMi0yIDIgLjkgMiAyem0tMi04Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMC02Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNiA0YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJlZGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImVycm9yXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImV4cGFuZF9sZXNzXzI0cHgiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJleHBhbmRfbW9yZV8yNHB4Ij48cGF0aCBkPSJNMTYuNTkgOC41OUwxMiAxMy4xNyA3LjQxIDguNTkgNiAxMGw2IDYgNi02eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmaWx0ZXJfYWx0XzI0cHgiPjxnPjxwYXRoIGQ9Ik0wLDBoMjQgTTI0LDI0SDAiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNC4yNSw1LjYxQzYuMjcsOC4yLDEwLDEzLDEwLDEzdjZjMCwwLjU1LDAuNDUsMSwxLDFoMmMwLjU1LDAsMS0wLjQ1LDEtMXYtNmMwLDAsMy43Mi00LjgsNS43NC03LjM5IEMyMC4yNSw0Ljk1LDE5Ljc4LDQsMTguOTUsNEg1LjA0QzQuMjEsNCwzLjc0LDQuOTUsNC4yNSw1LjYxeiIvPjxwYXRoIGQ9Ik0wLDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJmbGFnXzI0cHgiPjxwYXRoIGQ9Ik0xNC40IDZMMTQgNEg1djE3aDJ2LTdoNS42bC40IDJoN1Y2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZ1bGxzY3JlZW5fMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDE0SDV2NWg1di0ySDd2LTN6bS0yLTRoMlY3aDNWNUg1djV6bTEyIDdoLTN2Mmg1di01aC0ydjN6TTE0IDV2MmgzdjNoMlY1aC01eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZ1bGxzY3JlZW5fZXhpdF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTUgMTZoM3YzaDJ2LTVINXYyem0zLThINXYyaDVWNUg4djN6bTYgMTFoMnYtM2gzdi0yaC01djV6bTItMTFWNWgtMnY1aDVWOGgtM3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJnZXRfYXBwXzI0cHgiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZ3JvdXBfd29ya18yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNOCAxNy41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXpNOS41IDhjMC0xLjM4IDEuMTItMi41IDIuNS0yLjVzMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41UzkuNSA5LjM4IDkuNSA4em02LjUgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJoZWxwX291dGxpbmVfMjRweCI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iaW1hZ2Vfc2VhcmNoXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTggMTN2N0g0VjZoNS4wMmMuMDUtLjcxLjIyLTEuMzguNDgtMkg0Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi01bC0yLTJ6bS0xLjUgNWgtMTFsMi43NS0zLjUzIDEuOTYgMi4zNiAyLjc1LTMuNTR6bTIuOC05LjExYy40NC0uNy43LTEuNTEuNy0yLjM5QzIwIDQuMDEgMTcuOTkgMiAxNS41IDJTMTEgNC4wMSAxMSA2LjVzMi4wMSA0LjUgNC40OSA0LjVjLjg4IDAgMS43LS4yNiAyLjM5LS43TDIxIDEzLjQyIDIyLjQyIDEyIDE5LjMgOC44OXpNMTUuNSA5QzE0LjEyIDkgMTMgNy44OCAxMyA2LjVTMTQuMTIgNCAxNS41IDQgMTggNS4xMiAxOCA2LjUgMTYuODggOSAxNS41IDl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iaW5mb19vdXRsaW5lXzI0cHgiPjxwYXRoIGQ9Ik0xMSAxN2gydi02aC0ydjZ6bTEtMTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4ek0xMSA5aDJWN2gtMnYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJrZWVwXzI0cHgiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48cGF0aCBkPSJNMTYsOVY0bDEsMGMwLjU1LDAsMS0wLjQ1LDEtMXYwYzAtMC41NS0wLjQ1LTEtMS0xSDdDNi40NSwyLDYsMi40NSw2LDN2MCBjMCwwLjU1LDAuNDUsMSwxLDFsMSwwdjVjMCwxLjY2LTEuMzQsMy0zLDNoMHYyaDUuOTd2N2wxLDFsMS0xdi03SDE5di0yaDBDMTcuMzQsMTIsMTYsMTAuNjYsMTYsOXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ia2VlcF9vdXRsaW5lXzI0cHgiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48cGF0aCBkPSJNMTQsNHY1YzAsMS4xMiwwLjM3LDIuMTYsMSwzSDljMC42NS0wLjg2LDEtMS45LDEtM1Y0SDE0IE0xNywySDdDNi40NSwyLDYsMi40NSw2LDNjMCwwLjU1LDAuNDUsMSwxLDFjMCwwLDAsMCwwLDBsMSwwdjUgYzAsMS42Ni0xLjM0LDMtMywzdjJoNS45N3Y3bDEsMWwxLTF2LTdIMTl2LTJjMCwwLDAsMCwwLDBjLTEuNjYsMC0zLTEuMzQtMy0zVjRsMSwwYzAsMCwwLDAsMCwwYzAuNTUsMCwxLTAuNDUsMS0xIEMxOCwyLjQ1LDE3LjU1LDIsMTcsMkwxNywyeiIvPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibGlnaHRfbW9kZV8yNHB4Ij48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48cGF0aCBkPSJNMTIsN2MtMi43NiwwLTUsMi4yNC01LDVzMi4yNCw1LDUsNXM1LTIuMjQsNS01UzE0Ljc2LDcsMTIsN0wxMiw3eiBNMiwxM2wyLDBjMC41NSwwLDEtMC40NSwxLTFzLTAuNDUtMS0xLTFsLTIsMCBjLTAuNTUsMC0xLDAuNDUtMSwxUzEuNDUsMTMsMiwxM3ogTTIwLDEzbDIsMGMwLjU1LDAsMS0wLjQ1LDEtMXMtMC40NS0xLTEtMWwtMiwwYy0wLjU1LDAtMSwwLjQ1LTEsMVMxOS40NSwxMywyMCwxM3ogTTExLDJ2MiBjMCwwLjU1LDAuNDUsMSwxLDFzMS0wLjQ1LDEtMVYyYzAtMC41NS0wLjQ1LTEtMS0xUzExLDEuNDUsMTEsMnogTTExLDIwdjJjMCwwLjU1LDAuNDUsMSwxLDFzMS0wLjQ1LDEtMXYtMmMwLTAuNTUtMC40NS0xLTEtMSBDMTEuNDUsMTksMTEsMTkuNDUsMTEsMjB6IE01Ljk5LDQuNThjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwYy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MWwxLjA2LDEuMDYgYzAuMzksMC4zOSwxLjAzLDAuMzksMS40MSwwczAuMzktMS4wMywwLTEuNDFMNS45OSw0LjU4eiBNMTguMzYsMTYuOTVjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwYy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MSBsMS4wNiwxLjA2YzAuMzksMC4zOSwxLjAzLDAuMzksMS40MSwwYzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxTDE4LjM2LDE2Ljk1eiBNMTkuNDIsNS45OWMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MSBjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwbC0xLjA2LDEuMDZjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxczEuMDMsMC4zOSwxLjQxLDBMMTkuNDIsNS45OXogTTcuMDUsMTguMzYgYzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxYy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGwtMS4wNiwxLjA2Yy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MXMxLjAzLDAuMzksMS40MSwwTDcuMDUsMTguMzZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImxpbmVfd2VpZ2h0XzI0cHgiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIgeD0iMCIvPjwvZz48Zz48Zz48Zz48cGF0aCBkPSJNMywxN2gxOHYtMkgzVjE3eiBNMywyMGgxOHYtMUgzVjIweiBNMywxM2gxOHYtM0gzVjEzeiBNMyw0djRoMThWNEgzeiIvPjwvZz48L2c+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Im1vcmVfdmVydF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDhjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Im5vdGlmaWNhdGlvbnNfbm9uZV8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDIyYzEuMSAwIDItLjkgMi0yaC00YzAgMS4xLjkgMiAyIDJ6bTYtNnYtNWMwLTMuMDctMS42My01LjY0LTQuNS02LjMyVjRjMC0uODMtLjY3LTEuNS0xLjUtMS41cy0xLjUuNjctMS41IDEuNXYuNjhDNy42NCA1LjM2IDYgNy45MiA2IDExdjVsLTIgMnYxaDE2di0xbC0yLTJ6bS0yIDFIOHYtNmMwLTIuNDggMS41MS00LjUgNC00LjVzNCAyLjAyIDQgNC41djZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0icGFsZXR0ZV8yNHB4Ij48cGF0aCBkPSJNMTIgM2MtNC45NyAwLTkgNC4wMy05IDlzNC4wMyA5IDkgOWMuODMgMCAxLjUtLjY3IDEuNS0xLjUgMC0uMzktLjE1LS43NC0uMzktMS4wMS0uMjMtLjI2LS4zOC0uNjEtLjM4LS45OSAwLS44My42Ny0xLjUgMS41LTEuNUgxNmMyLjc2IDAgNS0yLjI0IDUtNSAwLTQuNDItNC4wMy04LTktOHptLTUuNSA5Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTNS42NyA5IDYuNSA5IDggOS42NyA4IDEwLjUgNy4zMyAxMiA2LjUgMTJ6bTMtNEM4LjY3IDggOCA3LjMzIDggNi41UzguNjcgNSA5LjUgNXMxLjUuNjcgMS41IDEuNVMxMC4zMyA4IDkuNSA4em01IDBjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxMy42NyA1IDE0LjUgNXMxLjUuNjcgMS41IDEuNVMxNS4zMyA4IDE0LjUgOHptMyA0Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTYuNjcgOSAxNy41IDlzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InJlZnJlc2hfMjRweCI+PHBhdGggZD0iTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InNlYXJjaF8yNHB4Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJzZXR0aW5nc18yNHB4Ij48cGF0aCBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVDMTQuNDYgMi4xOCAxNC4yNSAyIDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE0IDEyYzAtMS4xLS45LTItMi0ycy0yIC45LTIgMiAuOSAyIDIgMiAyLS45IDItMnptLTItOWMtNC45NyAwLTkgNC4wMy05IDlIMGw0IDQgNC00SDVjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjUxIDAtMi45MS0uNDktNC4wNi0xLjNsLTEuNDIgMS40NEM4LjA0IDIwLjMgOS45NCAyMSAxMiAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJzZXR0aW5nc19vdmVyc2Nhbl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyLjAxIDUuNUwxMCA4aDRsLTEuOTktMi41ek0xOCAxMHY0bDIuNS0xLjk5TDE4IDEwek02IDEwbC0yLjUgMi4wMUw2IDE0di00em04IDZoLTRsMi4wMSAyLjVMMTQgMTZ6bTctMTNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OWgxOHYxNC4wMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJ2aXNpYmlsaXR5X29mZl8yNHB4Ij48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0id2FybmluZ18yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiLz48L3N2Zz48L2RlZnM+PC9zdmc+Cg==", + "ok": true, + "headers": [ + [ + "content-type", + "image/svg+xml; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": { + "data": "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", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugins_listing": { + "data": "eyJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJUaW1lIFNlcmllcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogdHJ1ZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImdyYXBocyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtZ3JhcGgtZGFzaGJvYXJkIn19LCAiZGlzdHJpYnV0aW9ucyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImRpc3RyaWJ1dGlvbnMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQifX0sICJoaXN0b2dyYW1zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiaGlzdG9ncmFtcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaGlzdG9ncmFtLWRhc2hib2FyZCJ9fSwgInRleHQiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJ0ZXh0IiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi10ZXh0LWRhc2hib2FyZCJ9fSwgInByX2N1cnZlcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlBSIEN1cnZlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHItY3VydmUtZGFzaGJvYXJkIn19LCAicHJvZmlsZV9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlByb2ZpbGUiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIn19LCAiaHBhcmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhwYXJhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhwYXJhbXMtZGFzaGJvYXJkIn19LCAibWVzaCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIm1lc2giLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogIm1lc2gtZGFzaGJvYXJkIn19LCAid2l0X3JlZGlyZWN0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiV2hhdC1JZiBUb29sIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi13aXQtcmVkaXJlY3QtZGFzaGJvYXJkIn19LCAicHJvamVjdG9yIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJwcm9qZWN0b3IiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi9wcm9qZWN0b3IvaW5kZXguanMifX19", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/environment": { + "data": "eyJ2ZXJzaW9uIjogIjIuMTUuMSIsICJkYXRhX2xvY2F0aW9uIjogImxvZ3MvZml0IiwgIndpbmRvd190aXRsZSI6ICIiLCAiZXhwZXJpbWVudF9uYW1lIjogIiIsICJleHBlcmltZW50X2Rlc2NyaXB0aW9uIjogIiIsICJjcmVhdGlvbl90aW1lIjogMC4wLCAiZGVidWciOiB7ImRhdGFfcHJvdmlkZXIiOiAiR3JwY0RhdGFQcm92aWRlcihhZGRyPSdsb2NhbGhvc3Q6NDU5ODknKSIsICJmbGFncyI6IHsibG9nZGlyIjogImxvZ3MvZml0IiwgImxvZ2Rpcl9zcGVjIjogIiIsICJob3N0IjogbnVsbCwgImJpbmRfYWxsIjogZmFsc2UsICJwb3J0IjogbnVsbCwgInJldXNlX3BvcnQiOiBmYWxzZSwgImxvYWRfZmFzdCI6ICJhdXRvIiwgImV4dHJhX2RhdGFfc2VydmVyX2ZsYWdzIjogIiIsICJncnBjX2NyZWRzX3R5cGUiOiAibG9jYWwiLCAiZ3JwY19kYXRhX3Byb3ZpZGVyIjogIiIsICJwdXJnZV9vcnBoYW5lZF9kYXRhIjogdHJ1ZSwgImRiIjogIiIsICJkYl9pbXBvcnQiOiBmYWxzZSwgImluc3BlY3QiOiBmYWxzZSwgInZlcnNpb25fdGIiOiBmYWxzZSwgInRhZyI6ICIiLCAiZXZlbnRfZmlsZSI6ICIiLCAicGF0aF9wcmVmaXgiOiAiIiwgIndpbmRvd190aXRsZSI6ICIiLCAibWF4X3JlbG9hZF90aHJlYWRzIjogMSwgInJlbG9hZF9pbnRlcnZhbCI6IDUuMCwgInJlbG9hZF90YXNrIjogImF1dG8iLCAicmVsb2FkX211bHRpZmlsZSI6IG51bGwsICJyZWxvYWRfbXVsdGlmaWxlX2luYWN0aXZlX3NlY3MiOiA4NjQwMCwgImdlbmVyaWNfZGF0YSI6ICJhdXRvIiwgInNhbXBsZXNfcGVyX3BsdWdpbiI6IHt9LCAiZGV0ZWN0X2ZpbGVfcmVwbGFjZW1lbnQiOiBudWxsLCAiX190ZW5zb3Jib2FyZF9zdWJjb21tYW5kIjogInNlcnZlIn19fQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/runs": { + "data": "WyIxMF9wZXJjZW50X2ZlYXR1cmVfZXh0cmFjdC8yMDI0MDExNC0xMzM4MDgvdHJhaW4iLCAiMTBfcGVyY2VudF9mZWF0dXJlX2V4dHJhY3QvMjAyNDAxMTQtMTMzODA4L3ZhbGlkYXRpb24iLCAiMV9wZXJjZW50X2RhdGFfYXVnLzIwMjQwMTE0LTEzMzkxMy90cmFpbiIsICIxX3BlcmNlbnRfZGF0YV9hdWcvMjAyNDAxMTQtMTMzOTEzL3ZhbGlkYXRpb24iLCAiMTBfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzQwMDkvdHJhaW4iLCAiMTBfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzQwMDkvdmFsaWRhdGlvbiIsICIxMF9wZXJjZW50X2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDMxMS90cmFpbiIsICIxMF9wZXJjZW50X2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDMxMS92YWxpZGF0aW9uIiwgImZ1bGxfMTBfY2xhc3Nlc19maW5lX3R1bmVfbGFzdF8xMC8yMDI0MDExNC0xMzQ2MTIvdHJhaW4iLCAiZnVsbF8xMF9jbGFzc2VzX2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDYxMi92YWxpZGF0aW9uIl0=", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/experiment?request=%7B%22experimentName%22:%22defaultExperimentId%22%7D": { + "data": "ewogICJuYW1lIjogIiIsCiAgImRlc2NyaXB0aW9uIjogIiIsCiAgInVzZXIiOiAiIiwKICAidGltZUNyZWF0ZWRTZWNzIjogMC4wLAogICJocGFyYW1JbmZvcyI6IFtdLAogICJtZXRyaWNJbmZvcyI6IFtdCn0=", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/runs": { + "data": "WyIxMF9wZXJjZW50X2ZlYXR1cmVfZXh0cmFjdC8yMDI0MDExNC0xMzM4MDgvdHJhaW4iLCAiMTBfcGVyY2VudF9mZWF0dXJlX2V4dHJhY3QvMjAyNDAxMTQtMTMzODA4L3ZhbGlkYXRpb24iLCAiMV9wZXJjZW50X2RhdGFfYXVnLzIwMjQwMTE0LTEzMzkxMy90cmFpbiIsICIxX3BlcmNlbnRfZGF0YV9hdWcvMjAyNDAxMTQtMTMzOTEzL3ZhbGlkYXRpb24iLCAiMTBfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzQwMDkvdHJhaW4iLCAiMTBfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzQwMDkvdmFsaWRhdGlvbiIsICIxMF9wZXJjZW50X2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDMxMS90cmFpbiIsICIxMF9wZXJjZW50X2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDMxMS92YWxpZGF0aW9uIiwgImZ1bGxfMTBfY2xhc3Nlc19maW5lX3R1bmVfbGFzdF8xMC8yMDI0MDExNC0xMzQ2MTIvdHJhaW4iLCAiZnVsbF8xMF9jbGFzc2VzX2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDYxMi92YWxpZGF0aW9uIl0=", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/session_groups?request=%7B%22experimentName%22:%22defaultExperimentId%22,%22allowedStatuses%22:%5B%22STATUS_FAILURE%22,%22STATUS_RUNNING%22,%22STATUS_SUCCESS%22,%22STATUS_UNKNOWN%22%5D,%22colParams%22:%5B%5D,%22startIndex%22:0,%22sliceSize%22:1000000%7D": { + "data": "ewogICJzZXNzaW9uR3JvdXBzIjogW10sCiAgInRvdGFsU2l6ZSI6IDAKfQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/tags": { + "data": "eyJzY2FsYXJzIjogeyJydW5UYWdJbmZvIjogeyIxMF9wZXJjZW50X2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDMxMS92YWxpZGF0aW9uIjogWyJlcG9jaF9hY2N1cmFjeSIsICJlcG9jaF9sb3NzIiwgImV2YWx1YXRpb25fYWNjdXJhY3lfdnNfaXRlcmF0aW9ucyIsICJldmFsdWF0aW9uX2xvc3NfdnNfaXRlcmF0aW9ucyJdLCAiMTBfcGVyY2VudF9mZWF0dXJlX2V4dHJhY3QvMjAyNDAxMTQtMTMzODA4L3RyYWluIjogWyJlcG9jaF9hY2N1cmFjeSIsICJlcG9jaF9sb3NzIl0sICIxMF9wZXJjZW50X2ZlYXR1cmVfZXh0cmFjdC8yMDI0MDExNC0xMzM4MDgvdmFsaWRhdGlvbiI6IFsiZXBvY2hfYWNjdXJhY3kiLCAiZXBvY2hfbG9zcyIsICJldmFsdWF0aW9uX2FjY3VyYWN5X3ZzX2l0ZXJhdGlvbnMiLCAiZXZhbHVhdGlvbl9sb3NzX3ZzX2l0ZXJhdGlvbnMiXSwgIjFfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzM5MTMvdHJhaW4iOiBbImVwb2NoX2FjY3VyYWN5IiwgImVwb2NoX2xvc3MiXSwgIjFfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzM5MTMvdmFsaWRhdGlvbiI6IFsiZXBvY2hfYWNjdXJhY3kiLCAiZXBvY2hfbG9zcyIsICJldmFsdWF0aW9uX2FjY3VyYWN5X3ZzX2l0ZXJhdGlvbnMiLCAiZXZhbHVhdGlvbl9sb3NzX3ZzX2l0ZXJhdGlvbnMiXSwgImZ1bGxfMTBfY2xhc3Nlc19maW5lX3R1bmVfbGFzdF8xMC8yMDI0MDExNC0xMzQ2MTIvdmFsaWRhdGlvbiI6IFsiZXBvY2hfYWNjdXJhY3kiLCAiZXBvY2hfbG9zcyIsICJldmFsdWF0aW9uX2FjY3VyYWN5X3ZzX2l0ZXJhdGlvbnMiLCAiZXZhbHVhdGlvbl9sb3NzX3ZzX2l0ZXJhdGlvbnMiXSwgIjEwX3BlcmNlbnRfZGF0YV9hdWcvMjAyNDAxMTQtMTM0MDA5L3ZhbGlkYXRpb24iOiBbImVwb2NoX2FjY3VyYWN5IiwgImVwb2NoX2xvc3MiLCAiZXZhbHVhdGlvbl9hY2N1cmFjeV92c19pdGVyYXRpb25zIiwgImV2YWx1YXRpb25fbG9zc192c19pdGVyYXRpb25zIl0sICJmdWxsXzEwX2NsYXNzZXNfZmluZV90dW5lX2xhc3RfMTAvMjAyNDAxMTQtMTM0NjEyL3RyYWluIjogWyJlcG9jaF9hY2N1cmFjeSIsICJlcG9jaF9sb3NzIl0sICIxMF9wZXJjZW50X2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDMxMS90cmFpbiI6IFsiZXBvY2hfYWNjdXJhY3kiLCAiZXBvY2hfbG9zcyJdLCAiMTBfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzQwMDkvdHJhaW4iOiBbImVwb2NoX2FjY3VyYWN5IiwgImVwb2NoX2xvc3MiXX0sICJ0YWdEZXNjcmlwdGlvbnMiOiB7fX0sICJoaXN0b2dyYW1zIjogeyJydW5UYWdJbmZvIjoge30sICJ0YWdEZXNjcmlwdGlvbnMiOiB7fX0sICJpbWFnZXMiOiB7InRhZ0Rlc2NyaXB0aW9ucyI6IHt9LCAidGFnUnVuU2FtcGxlZEluZm8iOiB7fX19", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2": { + "data": "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", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": { + "data": "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", + "ok": true, + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22epoch_accuracy%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImVwb2NoX2FjY3VyYWN5IiwgInJ1blRvU2VyaWVzIjogeyIxMF9wZXJjZW50X2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDMxMS92YWxpZGF0aW9uIjogW3sid2FsbFRpbWUiOiAxNzA1MjM5ODI1Ljc5ODI3OCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjg2Njc3NjI4NzU1NTY5NDZ9LCB7IndhbGxUaW1lIjogMTcwNTIzOTg0Ni4xNDMyODgsICJzdGVwIjogNSwgInZhbHVlIjogMC44NzV9LCB7IndhbGxUaW1lIjogMTcwNTIzOTg2MC44OTMzNzMsICJzdGVwIjogNiwgInZhbHVlIjogMC44NjUxMzE1NTY5ODc3NjI1fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk4NzcuMDUyOTExLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuODc5OTM0MTkxNzAzNzk2NH0sIHsid2FsbFRpbWUiOiAxNzA1MjM5ODkyLjU0NTQ1MywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjg3NjY0NDczMDU2NzkzMjF9LCB7IndhbGxUaW1lIjogMTcwNTIzOTkwOC43MjM3NTcsICJzdGVwIjogOSwgInZhbHVlIjogMC44NzY2NDQ3MzA1Njc5MzIxfV0sICIxMF9wZXJjZW50X2ZlYXR1cmVfZXh0cmFjdC8yMDI0MDExNC0xMzM4MDgvdHJhaW4iOiBbeyJ3YWxsVGltZSI6IDE3MDUyMzk1MDkuMzU2ODgyLCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNDEyMDAwMDAwNDc2ODM3MTZ9LCB7IndhbGxUaW1lIjogMTcwNTIzOTUxOS4zMzk4MDMsICJzdGVwIjogMSwgInZhbHVlIjogMC43NDI2NjY2NjE3MzkzNDk0fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk1MjUuOTc4MjgxLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuODE5OTk5OTkyODQ3NDQyNn0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTMwLjYwODcwMywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjg0Mzk5OTk4MTg4MDE4OH0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTM0LjEzNjM0NSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjg2NjY2NjY3NDYxMzk1MjZ9XSwgIjEwX3BlcmNlbnRfZmVhdHVyZV9leHRyYWN0LzIwMjQwMTE0LTEzMzgwOC92YWxpZGF0aW9uIjogW3sid2FsbFRpbWUiOiAxNzA1MjM5NTA5LjM1ODQzNSwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjcyMjAzOTQ2MTEzNTg2NDN9LCB7IndhbGxUaW1lIjogMTcwNTIzOTUxOS4zNDE0MTIsICJzdGVwIjogMSwgInZhbHVlIjogMC44MjQwMTMxNzM1ODAxNjk3fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk1MjUuOTc5ODY0LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuODM1NTI2Mjg3NTU1Njk0Nn0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTMwLjYxMDg2NywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjgzODgxNTgwODI5NjIwMzZ9LCB7IndhbGxUaW1lIjogMTcwNTIzOTUzNC4xMzc5MywgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjg2ODQyMTA3NzcyODI3MTV9XSwgIjFfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzM5MTMvdHJhaW4iOiBbeyJ3YWxsVGltZSI6IDE3MDUyMzk1NjkuNDE1ODY1LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuMTE0Mjg1NzE0OTI0MzM1NDh9LCB7IndhbGxUaW1lIjogMTcwNTIzOTU3Ny44OTE1ODcsICJzdGVwIjogMSwgInZhbHVlIjogMC4yMTQyODU3MTY0MTQ0NTE2fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk1ODIuNjQ4MjE1LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuMzE0Mjg1NzI1MzU1MTQ4M30sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTg3LjA1NDEwNCwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjU1NzE0Mjg1MzczNjg3NzR9LCB7IndhbGxUaW1lIjogMTcwNTIzOTU5NC4wNzc2MjUsICJzdGVwIjogNCwgInZhbHVlIjogMC41NzE0Mjg1OTY5NzM0MTkyfV0sICIxX3BlcmNlbnRfZGF0YV9hdWcvMjAyNDAxMTQtMTMzOTEzL3ZhbGlkYXRpb24iOiBbeyJ3YWxsVGltZSI6IDE3MDUyMzk1NjkuNDE3NDA0LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuMTkwNzg5NDc2MDM3MDI1NDV9LCB7IndhbGxUaW1lIjogMTcwNTIzOTU3Ny44OTM1MzYsICJzdGVwIjogMSwgInZhbHVlIjogMC4yNTk4Njg0MTMyMDk5MTUxNn0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTgyLjY1MDU5OSwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjMzNTUyNjMxNzM1ODAxNjk3fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk1ODcuMDU1NTg3LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuMzY2Nzc2MzE3MzU4MDE2OTd9LCB7IndhbGxUaW1lIjogMTcwNTIzOTU5NC4wNzkzMjMsICJzdGVwIjogNCwgInZhbHVlIjogMC40MTQ0NzM2ODI2NDE5ODMwM31dLCAiZnVsbF8xMF9jbGFzc2VzX2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDYxMi92YWxpZGF0aW9uIjogW3sid2FsbFRpbWUiOiAxNzA1MjQwMTAzLjY1MDYyNSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjg3NjY0NDczMDU2NzkzMjF9LCB7IndhbGxUaW1lIjogMTcwNTI0MDIwMy4wOTY4MjYsICJzdGVwIjogNSwgInZhbHVlIjogMC44OTgwMjYyODc1NTU2OTQ2fSwgeyJ3YWxsVGltZSI6IDE3MDUyNDAzMzQuMzY4MjIyLCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuOTA3ODk0NzMwNTY3OTMyMX0sIHsid2FsbFRpbWUiOiAxNzA1MjQwNDA5Ljk1NjcxNCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjkxMTE4NDE5MTcwMzc5NjR9LCB7IndhbGxUaW1lIjogMTcwNTI0MDQ3Ni43MzczMjIsICJzdGVwIjogOCwgInZhbHVlIjogMC45MDQ2MDUyNjk0MzIwNjc5fSwgeyJ3YWxsVGltZSI6IDE3MDUyNDA1MzkuNjk2Njk1LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuOTAxMzE1ODA4Mjk2MjAzNn1dLCAiMTBfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzQwMDkvdmFsaWRhdGlvbiI6IFt7IndhbGxUaW1lIjogMTcwNTIzOTY0OC42NDk5NjQsICJzdGVwIjogMCwgInZhbHVlIjogMC42NzI2OTczNjUyODM5NjYxfSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk2NzUuMDU0ODcxLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNzg5NDczNzEyNDQ0MzA1NH0sIHsid2FsbFRpbWUiOiAxNzA1MjM5Njk2Ljc5MDgxMiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjgyODk0NzM2NTI4Mzk2NjF9LCB7IndhbGxUaW1lIjogMTcwNTIzOTcxNy42OTA0MywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjgzNTUyNjI4NzU1NTY5NDZ9LCB7IndhbGxUaW1lIjogMTcwNTIzOTc1OS4xNTMxMTcsICJzdGVwIjogNCwgInZhbHVlIjogMC44NTE5NzM3MTI0NDQzMDU0fV0sICJmdWxsXzEwX2NsYXNzZXNfZmluZV90dW5lX2xhc3RfMTAvMjAyNDAxMTQtMTM0NjEyL3RyYWluIjogW3sid2FsbFRpbWUiOiAxNzA1MjQwMTAzLjY0OTE5MywgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjc3NjQwMDAyOTY1OTI3MTJ9LCB7IndhbGxUaW1lIjogMTcwNTI0MDIwMy4wOTQ5NTUsICJzdGVwIjogNSwgInZhbHVlIjogMC44MDU3MzMzMjMwOTcyMjl9LCB7IndhbGxUaW1lIjogMTcwNTI0MDMzNC4zNjY3MTQsICJzdGVwIjogNiwgInZhbHVlIjogMC44MjgwMDAwMDkwNTk5MDZ9LCB7IndhbGxUaW1lIjogMTcwNTI0MDQwOS45NTUxODcsICJzdGVwIjogNywgInZhbHVlIjogMC44Mzg4MDAwMTMwNjUzMzgxfSwgeyJ3YWxsVGltZSI6IDE3MDUyNDA0NzYuNzM1NjI1LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuODQ5MzMzMzQ1ODkwMDQ1Mn0sIHsid2FsbFRpbWUiOiAxNzA1MjQwNTM5LjY5NDgxNywgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjg1NTA2NjY1NzA2NjM0NTJ9XSwgIjEwX3BlcmNlbnRfZmluZV90dW5lX2xhc3RfMTAvMjAyNDAxMTQtMTM0MzExL3RyYWluIjogW3sid2FsbFRpbWUiOiAxNzA1MjM5ODI1Ljc5NjgwMSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjgwNjY2NjY3MjIyOTc2Njh9LCB7IndhbGxUaW1lIjogMTcwNTIzOTg0Ni4xNDE4NzcsICJzdGVwIjogNSwgInZhbHVlIjogMC44MTczMzMzNDA2NDQ4MzY0fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk4NjAuODkxNzg5LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuODI0MDAwMDAwOTUzNjc0M30sIHsid2FsbFRpbWUiOiAxNzA1MjM5ODc3LjA1MTU2MSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjg0MTMzMzMyOTY3NzU4MTh9LCB7IndhbGxUaW1lIjogMTcwNTIzOTg5Mi41NDM5OTYsICJzdGVwIjogOCwgInZhbHVlIjogMC44NTczMzMzNjIxMDI1MDg1fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk5MDguNzIxOTcxLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuODUxOTk5OTk4MDkyNjUxNH1dLCAiMTBfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzQwMDkvdHJhaW4iOiBbeyJ3YWxsVGltZSI6IDE3MDUyMzk2NDguNjQ4MzkyLCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuMzQxMzMzMzI5Njc3NTgxOH0sIHsid2FsbFRpbWUiOiAxNzA1MjM5Njc1LjA1MzI3NSwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY0NTMzMzM0OTcwNDc0MjR9LCB7IndhbGxUaW1lIjogMTcwNTIzOTY5Ni43ODkzMjQsICJzdGVwIjogMiwgInZhbHVlIjogMC43NDkzMzMzMjIwNDgxODczfSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk3MTcuNjg4NDE3LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNzcwNjY2NjU4ODc4MzI2NH0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NzU5LjE1MTYwNCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjc5NjAwMDAwMzgxNDY5NzN9XX19XQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22epoch_loss%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImVwb2NoX2xvc3MiLCAicnVuVG9TZXJpZXMiOiB7IjEwX3BlcmNlbnRfZmluZV90dW5lX2xhc3RfMTAvMjAyNDAxMTQtMTM0MzExL3ZhbGlkYXRpb24iOiBbeyJ3YWxsVGltZSI6IDE3MDUyMzk4MjUuNzk3NjMxLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNDYwNzcwODQ1NDEzMjA4fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk4NDYuMTQyNjU3LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDE0ODA5OTQyMjQ1NDgzNH0sIHsid2FsbFRpbWUiOiAxNzA1MjM5ODYwLjg5MjY3OSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQxNzg0MDcxOTIyMzAyMjQ2fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk4NzcuMDUyMjY5LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzk4MDQwODYwODkxMzQyMTZ9LCB7IndhbGxUaW1lIjogMTcwNTIzOTg5Mi41NDQ3OTEsICJzdGVwIjogOCwgInZhbHVlIjogMC40MTQxOTY1ODA2NDg0MjIyNH0sIHsid2FsbFRpbWUiOiAxNzA1MjM5OTA4LjcyMjk2NywgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjM5MDI2MzQwODQyMjQ3MDF9XSwgIjEwX3BlcmNlbnRfZmVhdHVyZV9leHRyYWN0LzIwMjQwMTE0LTEzMzgwOC90cmFpbiI6IFt7IndhbGxUaW1lIjogMTcwNTIzOTUwOS4zNTU3NDQsICJzdGVwIjogMCwgInZhbHVlIjogMS45MjgxNTgwNDQ4MTUwNjM1fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk1MTkuMzM3ODYzLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDEuMTY0MDU2Nzc3OTU0MTAxNn0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTI1Ljk3NzA4OCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjg1MDcxNDI2NjMwMDIwMTR9LCB7IndhbGxUaW1lIjogMTcwNTIzOTUzMC42MDcyMDYsICJzdGVwIjogMywgInZhbHVlIjogMC42ODc5MzI2NzAxMTY0MjQ2fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk1MzQuMTM1Mjk5LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTk1NTQ3MTM5NjQ0NjIyOH1dLCAiMTBfcGVyY2VudF9mZWF0dXJlX2V4dHJhY3QvMjAyNDAxMTQtMTMzODA4L3ZhbGlkYXRpb24iOiBbeyJ3YWxsVGltZSI6IDE3MDUyMzk1MDkuMzU3NzU0LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDEuMzQ1NTk1NzE3NDMwMTE0N30sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTE5LjM0MDczOCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjg4NDkxODYzMDEyMzEzODR9LCB7IndhbGxUaW1lIjogMTcwNTIzOTUyNS45NzkxODIsICJzdGVwIjogMiwgInZhbHVlIjogMC43MzM0NTM1NzE3OTY0MTcyfSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk1MzAuNjA5NjYyLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjM1MDQ1NTI4NDExODY1Mn0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTM0LjEzNzIyMiwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjU1MDc5NzA0NTIzMDg2NTV9XSwgIjFfcGVyY2VudF9kYXRhX2F1Zy8yMDI0MDExNC0xMzM5MTMvdHJhaW4iOiBbeyJ3YWxsVGltZSI6IDE3MDUyMzk1NjkuNDE0ODM0LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDIuNDQ3MzIzMzIyMjk2MTQyNn0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTc3Ljg5MDQwMiwgInN0ZXAiOiAxLCAidmFsdWUiOiAyLjIwMzg5MTI3NzMxMzIzMjR9LCB7IndhbGxUaW1lIjogMTcwNTIzOTU4Mi42NDY2NjcsICJzdGVwIjogMiwgInZhbHVlIjogMi4wMjA3MzQzMTAxNTAxNDY1fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk1ODcuMDUzMDc3LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDEuODM1NzE1NjUxNTEyMTQ2fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk1OTQuMDc2MzU5LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDEuNjU4NTU5OTE4NDAzNjI1NX1dLCAiMV9wZXJjZW50X2RhdGFfYXVnLzIwMjQwMTE0LTEzMzkxMy92YWxpZGF0aW9uIjogW3sid2FsbFRpbWUiOiAxNzA1MjM5NTY5LjQxNjcwOCwgInN0ZXAiOiAwLCAidmFsdWUiOiAyLjI3NzQ5NDQzMDU0MTk5Mn0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTc3Ljg5MjUzMSwgInN0ZXAiOiAxLCAidmFsdWUiOiAyLjE1NDI0NzUyMjM1NDEyNn0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NTgyLjY0OTM2NSwgInN0ZXAiOiAyLCAidmFsdWUiOiAyLjAxNzI2OTEzNDUyMTQ4NDR9LCB7IndhbGxUaW1lIjogMTcwNTIzOTU4Ny4wNTQ4OTcsICJzdGVwIjogMywgInZhbHVlIjogMS45NTIzNTQwNzM1MjQ0NzV9LCB7IndhbGxUaW1lIjogMTcwNTIzOTU5NC4wNzg1ODQsICJzdGVwIjogNCwgInZhbHVlIjogMS44NDQzNDQ0OTY3MjY5ODk3fV0sICJmdWxsXzEwX2NsYXNzZXNfZmluZV90dW5lX2xhc3RfMTAvMjAyNDAxMTQtMTM0NjEyL3ZhbGlkYXRpb24iOiBbeyJ3YWxsVGltZSI6IDE3MDUyNDAxMDMuNjQ5OTU5LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuMzU0NTA5NTAyNjQ5MzA3MjV9LCB7IndhbGxUaW1lIjogMTcwNTI0MDIwMy4wOTU5NTcsICJzdGVwIjogNSwgInZhbHVlIjogMC4yOTMyMzk5ODA5MzYwNTA0fSwgeyJ3YWxsVGltZSI6IDE3MDUyNDAzMzQuMzY3NTU4LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuMjgxNDYzNjUyODQ5MTk3NH0sIHsid2FsbFRpbWUiOiAxNzA1MjQwNDA5Ljk1NjAwMiwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjI2Mjk3NDE0MzAyODI1OTN9LCB7IndhbGxUaW1lIjogMTcwNTI0MDQ3Ni43MzY1ODIsICJzdGVwIjogOCwgInZhbHVlIjogMC4yNzI1NzMyMDI4NDg0MzQ0NX0sIHsid2FsbFRpbWUiOiAxNzA1MjQwNTM5LjY5NTk1NSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjI2ODYyODk1NDg4NzM5MDE0fV0sICIxMF9wZXJjZW50X2RhdGFfYXVnLzIwMjQwMTE0LTEzNDAwOS92YWxpZGF0aW9uIjogW3sid2FsbFRpbWUiOiAxNzA1MjM5NjQ4LjY0OTI2OSwgInN0ZXAiOiAwLCAidmFsdWUiOiAxLjQ0MjY4NDQxMjAwMjU2MzV9LCB7IndhbGxUaW1lIjogMTcwNTIzOTY3NS4wNTQxNywgInN0ZXAiOiAxLCAidmFsdWUiOiAxLjAxOTc2ODU5NTY5NTQ5NTZ9LCB7IndhbGxUaW1lIjogMTcwNTIzOTY5Ni43OTAxNjksICJzdGVwIjogMiwgInZhbHVlIjogMC44MDk4MDA3NDQwNTY3MDE3fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk3MTcuNjg5NTgsICJzdGVwIjogMywgInZhbHVlIjogMC42OTA3ODc0OTQxODI1ODY3fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk3NTkuMTUyNDA5LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjIwNDc4OTg3NjkzNzg2Nn1dLCAiZnVsbF8xMF9jbGFzc2VzX2ZpbmVfdHVuZV9sYXN0XzEwLzIwMjQwMTE0LTEzNDYxMi90cmFpbiI6IFt7IndhbGxUaW1lIjogMTcwNTI0MDEwMy42NDgwOTEsICJzdGVwIjogNCwgInZhbHVlIjogMC43MDgxOTk2MjAyNDY4ODcyfSwgeyJ3YWxsVGltZSI6IDE3MDUyNDAyMDMuMDkzNzExLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTk0OTkwNjExMDc2MzU1fSwgeyJ3YWxsVGltZSI6IDE3MDUyNDAzMzQuMzY1NjQ0LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNTM5MTg3NjEwMTQ5MzgzNX0sIHsid2FsbFRpbWUiOiAxNzA1MjQwNDA5Ljk1Mzk2MSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQ5NjExMzM1OTkyODEzMTF9LCB7IndhbGxUaW1lIjogMTcwNTI0MDQ3Ni43MzQ0MzYsICJzdGVwIjogOCwgInZhbHVlIjogMC40NjY2NjY5OTY0NzkwMzQ0fSwgeyJ3YWxsVGltZSI6IDE3MDUyNDA1MzkuNjkzNzQ3LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDQ0MTk0NzkzNzAxMTcxOX1dLCAiMTBfcGVyY2VudF9maW5lX3R1bmVfbGFzdF8xMC8yMDI0MDExNC0xMzQzMTEvdHJhaW4iOiBbeyJ3YWxsVGltZSI6IDE3MDUyMzk4MjUuNzk1NzgzLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNzA3NDk1ODY4MjA2MDI0Mn0sIHsid2FsbFRpbWUiOiAxNzA1MjM5ODQ2LjE0MDkzOCwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjYxMzE1NDExMzI5MjY5NDF9LCB7IndhbGxUaW1lIjogMTcwNTIzOTg2MC44OTA2ODUsICJzdGVwIjogNiwgInZhbHVlIjogMC41NTQ2ODk5NDM3OTA0MzU4fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk4NzcuMDUwNjAzLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNTAyODA1ODI5MDQ4MTU2N30sIHsid2FsbFRpbWUiOiAxNzA1MjM5ODkyLjU0Mjk2LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNDc1NTQ1NjQ0NzYwMTMxODR9LCB7IndhbGxUaW1lIjogMTcwNTIzOTkwOC43MjA3MjcsICJzdGVwIjogOSwgInZhbHVlIjogMC40NDUzOTM0NDMxMDc2MDV9XSwgIjEwX3BlcmNlbnRfZGF0YV9hdWcvMjAyNDAxMTQtMTM0MDA5L3RyYWluIjogW3sid2FsbFRpbWUiOiAxNzA1MjM5NjQ4LjY0NzI4OCwgInN0ZXAiOiAwLCAidmFsdWUiOiAxLjk5MzYzNjM2OTcwNTIwMDJ9LCB7IndhbGxUaW1lIjogMTcwNTIzOTY3NS4wNTIxNzMsICJzdGVwIjogMSwgInZhbHVlIjogMS4zODQyNTQ2OTM5ODQ5ODU0fSwgeyJ3YWxsVGltZSI6IDE3MDUyMzk2OTYuNzg4MjE1LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDEuMDk1MjYyNDA4MjU2NTMwOH0sIHsid2FsbFRpbWUiOiAxNzA1MjM5NzE3LjY4NDQzOSwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjkzNjMwNDM5MDQzMDQ1MDR9LCB7IndhbGxUaW1lIjogMTcwNTIzOTc1OS4xNTA1MDcsICJzdGVwIjogNCwgInZhbHVlIjogMC44Mjc4Nzc5Mzg3NDc0MDZ9XX19XQ==", + "ok": true, + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "status": 200, + "status_text": "" + }, + "https://localhost:6006/chart_worker.js?_file_hash=2c1e71c5": { + "data": "KCgpPT57dmFyIEgwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWMD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgRzA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGFmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIFcwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscTA9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgY2Y9TWF0aC5wb3csbGY9KG4sdCxlKT0+dCBpbiBuP0gwKG4sdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pOm5bdF09ZSxObz0obix0KT0+e2Zvcih2YXIgZSBpbiB0fHwodD17fSkpVzAuY2FsbCh0LGUpJiZsZihuLGUsdFtlXSk7aWYoYWYpZm9yKHZhciBlIG9mIGFmKHQpKXEwLmNhbGwodCxlKSYmbGYobixlLHRbZV0pO3JldHVybiBufSx1Zj0obix0KT0+VjAobixHMCh0KSk7dmFyIGhmPShuLHQsZSk9Pm5ldyBQcm9taXNlKChpLHIpPT57dmFyIHM9bD0+e3RyeXthKGUubmV4dChsKSl9Y2F0Y2goYyl7cihjKX19LG89bD0+e3RyeXthKGUudGhyb3cobCkpfWNhdGNoKGMpe3IoYyl9fSxhPWw9PmwuZG9uZT9pKGwudmFsdWUpOlByb21pc2UucmVzb2x2ZShsLnZhbHVlKS50aGVuKHMsbyk7YSgoZT1lLmFwcGx5KG4sdCkpLm5leHQoKSl9KTt2YXIgb247KGZ1bmN0aW9uKG4pe25bbi5MSU5FQVI9MF09IkxJTkVBUiIsbltuLkxPRzEwPTFdPSJMT0cxMCIsbltuLlRJTUU9Ml09IlRJTUUifSkob258fChvbj17fSkpO2Z1bmN0aW9uIGFuKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIGlzKG4pe3JldHVybiBuLmxlbmd0aD09PTEmJihuPVgwKG4pKSx7bGVmdDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPDA/aT1zKzE6cj1zfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPjA/cj1zOmk9cysxfXJldHVybiBpfX19ZnVuY3Rpb24gWDAobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFuKG4odCksZSl9fXZhciBmZj1pcyhhbiksZGY9ZmYucmlnaHQsWTA9ZmYubGVmdCxCbj1kZjt2YXIgcGY9QXJyYXkucHJvdG90eXBlLEowPXBmLnNsaWNlLCQwPXBmLm1hcDt2YXIga2w9TWF0aC5zcXJ0KDUwKSxIbD1NYXRoLnNxcnQoMTApLFZsPU1hdGguc3FydCgyKTtmdW5jdGlvbiBycyhuLHQsZSl7dmFyIGkscj0tMSxzLG8sYTtpZih0PSt0LG49K24sZT0rZSxuPT09dCYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYocz1uLG49dCx0PXMpLChhPUppKG4sdCxlKSk9PT0wfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKHQtbisxKSk7KytyPHM7KW9bcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKG4tdCsxKSk7KytyPHM7KW9bcl09KG4tcikvYTtyZXR1cm4gaSYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBKaShuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxzPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KHM+PWtsPzEwOnM+PUhsPzU6cz49Vmw/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhzPj1rbD8xMDpzPj1IbD81OnM+PVZsPzI6MSl9ZnVuY3Rpb24gX24obix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSkscz1pL3I7cmV0dXJuIHM+PWtsP3IqPTEwOnM+PUhsP3IqPTU6cz49VmwmJihyKj0yKSx0PG4/LXI6cn12YXIgZXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBueD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB5Zigpe2Zvcih2YXIgbj0wLHQ9YXJndW1lbnRzLmxlbmd0aCxlPXt9LGk7bjx0Oysrbil7aWYoIShpPWFyZ3VtZW50c1tuXSsiIil8fGkgaW4gZXx8L1tccy5dLy50ZXN0KGkpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2kpO2VbaV09W119cmV0dXJuIG5ldyB6byhlKX1mdW5jdGlvbiB6byhuKXt0aGlzLl89bn1mdW5jdGlvbiBpeChuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfXpvLnByb3RvdHlwZT15Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnpvLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5fLGk9aXgobisiIixlKSxyLHM9LTEsbz1pLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytzPG87KWlmKChyPShuPWlbc10pLnR5cGUpJiYocj1yeChlW3JdLG4ubmFtZSkpKXJldHVybiByO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK3M8bzspaWYocj0obj1pW3NdKS50eXBlKWVbcl09eGYoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihyIGluIGUpZVtyXT14ZihlW3JdLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBuPXt9LHQ9dGhpcy5fO2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXS5zbGljZSgpO3JldHVybiBuZXcgem8obil9LGNhbGw6ZnVuY3Rpb24obix0KXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBlPW5ldyBBcnJheShyKSxpPTAscixzO2k8cjsrK2kpZVtpXT1hcmd1bWVudHNbaSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2ZvcihzPXRoaXMuX1tuXSxpPTAscj1zLmxlbmd0aDtpPHI7KytpKXNbaV0udmFsdWUuYXBwbHkodCxlKX0sYXBwbHk6ZnVuY3Rpb24obix0LGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKHZhciBpPXRoaXMuX1tuXSxyPTAscz1pLmxlbmd0aDtyPHM7KytyKWlbcl0udmFsdWUuYXBwbHkodCxlKX19O2Z1bmN0aW9uIHJ4KG4sdCl7Zm9yKHZhciBlPTAsaT1uLmxlbmd0aCxyO2U8aTsrK2UpaWYoKHI9bltlXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24geGYobix0LGUpe2Zvcih2YXIgaT0wLHI9bi5sZW5ndGg7aTxyOysraSlpZihuW2ldLm5hbWU9PT10KXtuW2ldPW54LG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBlIT1udWxsJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn12YXIgV2w9eWY7dmFyIFVvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixxbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6VW8seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiB3bihuKXt2YXIgdD1uKz0iIixlPXQuaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYodD1uLnNsaWNlKDAsZSkpIT09InhtbG5zIiYmKG49bi5zbGljZShlKzEpKSxxbC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6cWxbdF0sbG9jYWw6bn06bn1mdW5jdGlvbiBzeChuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PVVvJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Vbz90LmNyZWF0ZUVsZW1lbnQobik6dC5jcmVhdGVFbGVtZW50TlMoZSxuKX19ZnVuY3Rpb24gb3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQm8obil7dmFyIHQ9d24obik7cmV0dXJuKHQubG9jYWw/b3g6c3gpKHQpfWZ1bmN0aW9uIGF4KCl7fWZ1bmN0aW9uIGRpKG4pe3JldHVybiBuPT1udWxsP2F4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihuKX19ZnVuY3Rpb24gdmYobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPWRpKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBzPXRbcl0sbz1zLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KG8pLGwsYyx1PTA7dTxvOysrdSkobD1zW3VdKSYmKGM9bi5jYWxsKGwsbC5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxhW3VdPWMpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBseCgpe3JldHVybltdfWZ1bmN0aW9uIG9zKG4pe3JldHVybiBuPT1udWxsP2x4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChuKX19ZnVuY3Rpb24gX2Yobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgbz10W3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBjZShpLHIpfWZ1bmN0aW9uIGFzKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIHdmKG4pe3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1hcyhuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgcz10W3JdLG89cy5sZW5ndGgsYT1pW3JdPVtdLGwsYz0wO2M8bzsrK2MpKGw9c1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxzKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPbyhuKXtyZXR1cm4gbmV3IEFycmF5KG4ubGVuZ3RoKX1mdW5jdGlvbiBNZigpe3JldHVybiBuZXcgY2UodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoT28pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGxzKG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWxzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bHMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07ZnVuY3Rpb24gYmYobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fXZhciBTZj0iJCI7ZnVuY3Rpb24gY3gobix0LGUsaSxyLHMpe2Zvcih2YXIgbz0wLGEsbD10Lmxlbmd0aCxjPXMubGVuZ3RoO288YzsrK28pKGE9dFtvXSk/KGEuX19kYXRhX189c1tvXSxpW29dPWEpOmVbb109bmV3IGxzKG4sc1tvXSk7Zm9yKDtvPGw7KytvKShhPXRbb10pJiYocltvXT1hKX1mdW5jdGlvbiB1eChuLHQsZSxpLHIscyxvKXt2YXIgYSxsLGM9e30sdT10Lmxlbmd0aCxoPXMubGVuZ3RoLGY9bmV3IEFycmF5KHUpLGQ7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYoZlthXT1kPVNmK28uY2FsbChsLGwuX19kYXRhX18sYSx0KSxkIGluIGM/clthXT1sOmNbZF09bCk7Zm9yKGE9MDthPGg7KythKWQ9U2Yrby5jYWxsKG4sc1thXSxhLHMpLChsPWNbZF0pPyhpW2FdPWwsbC5fX2RhdGFfXz1zW2FdLGNbZF09bnVsbCk6ZVthXT1uZXcgbHMobixzW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbZlthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBFZihuLHQpe2lmKCFuKXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oTCl7ZFsrK2NdPUx9KSxkO3ZhciBlPXQ/dXg6Y3gsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1iZihuKSk7Zm9yKHZhciBzPXIubGVuZ3RoLG89bmV3IEFycmF5KHMpLGE9bmV3IEFycmF5KHMpLGw9bmV3IEFycmF5KHMpLGM9MDtjPHM7KytjKXt2YXIgdT1pW2NdLGg9cltjXSxmPWgubGVuZ3RoLGQ9bi5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLGkpLGc9ZC5sZW5ndGgseD1hW2NdPW5ldyBBcnJheShnKSx2PW9bY109bmV3IEFycmF5KGcpLG09bFtjXT1uZXcgQXJyYXkoZik7ZSh1LGgseCx2LG0sZCx0KTtmb3IodmFyIHA9MCxiPTAsXyxTO3A8ZzsrK3ApaWYoXz14W3BdKXtmb3IocD49YiYmKGI9cCsxKTshKFM9dltiXSkmJisrYjxnOyk7Xy5fbmV4dD1TfHxudWxsfX1yZXR1cm4gbz1uZXcgY2UobyxpKSxvLl9lbnRlcj1hLG8uX2V4aXQ9bCxvfWZ1bmN0aW9uIFRmKCl7cmV0dXJuIG5ldyBjZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE9vKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBBZihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxzPXRoaXMuZXhpdCgpO3JldHVybiBpPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oaSk6aS5hcHBlbmQobisiIiksdCE9bnVsbCYmKHI9dChyKSksZT09bnVsbD9zLnJlbW92ZSgpOmUocyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn1mdW5jdGlvbiBDZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgY2Uobyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBSZigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0tMSxlPW4ubGVuZ3RoOysrdDxlOylmb3IodmFyIGk9blt0XSxyPWkubGVuZ3RoLTEscz1pW3JdLG87LS1yPj0wOykobz1pW3JdKSYmKHMmJm8uY29tcGFyZURvY3VtZW50UG9zaXRpb24ocyleNCYmcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHMpLHM9byk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gTGYobil7bnx8KG49aHgpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9uKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKXtmb3IodmFyIG89ZVtzXSxhPW8ubGVuZ3RoLGw9cltzXT1uZXcgQXJyYXkoYSksYyx1PTA7dTxhOysrdSkoYz1vW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgY2Uocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGh4KG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIFBmKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIERmKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59ZnVuY3Rpb24gSWYoKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLHM9aS5sZW5ndGg7cjxzOysrcil7dmFyIG89aVtyXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIE5mKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn1mdW5jdGlvbiBGZigpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6ZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciByPXRbZV0scz0wLG89ci5sZW5ndGgsYTtzPG87KytzKShhPXJbc10pJiZuLmNhbGwoYSxhLl9fZGF0YV9fLHMscik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGR4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gcHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBteChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBneChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX19ZnVuY3Rpb24geHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gVWYobix0KXt2YXIgZT13bihuKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTppLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2UubG9jYWw/ZHg6Zng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZS5sb2NhbD94eDpneDplLmxvY2FsP214OnB4KShlLHQpKX1mdW5jdGlvbiBrbyhuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9ZnVuY3Rpb24geXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gdngobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBfeChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aT09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpLGUpfX1mdW5jdGlvbiBCZihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/eXg6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/X3g6dngpKG4sdCxlPT1udWxsPyIiOmUpKTpPbih0aGlzLm5vZGUoKSxuKX1mdW5jdGlvbiBPbihuLHQpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fGtvKG4pLmdldENvbXB1dGVkU3R5bGUobixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHd4KG4pe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW25dfX1mdW5jdGlvbiBNeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gYngobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX19ZnVuY3Rpb24gT2Yobix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD93eDp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ieDpNeCkobix0KSk6dGhpcy5ub2RlKClbbl19ZnVuY3Rpb24ga2Yobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFhsKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IEhmKG4pfWZ1bmN0aW9uIEhmKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1rZihuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfUhmLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dDwwJiYodGhpcy5fbmFtZXMucHVzaChuKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihuKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2Yobik+PTB9fTtmdW5jdGlvbiBWZihuLHQpe2Zvcih2YXIgZT1YbChuKSxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWUuYWRkKHRbaV0pfWZ1bmN0aW9uIEdmKG4sdCl7Zm9yKHZhciBlPVhsKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gU3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7VmYodGhpcyxuKX19ZnVuY3Rpb24gRXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7R2YodGhpcyxuKX19ZnVuY3Rpb24gVHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VmY6R2YpKHRoaXMsbil9fWZ1bmN0aW9uIFdmKG4sdCl7dmFyIGU9a2YobisiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9WGwodGhpcy5ub2RlKCkpLHI9LTEscz1lLmxlbmd0aDsrK3I8czspaWYoIWkuY29udGFpbnMoZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/VHg6dD9TeDpFeCkoZSx0KSl9ZnVuY3Rpb24gQXgoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEN4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gUngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHFmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChuPT1udWxsP0F4Oih0eXBlb2Ygbj09ImZ1bmN0aW9uIj9SeDpDeCkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIEx4KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gRHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBYZihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobj09bnVsbD9MeDoodHlwZW9mIG49PSJmdW5jdGlvbiI/RHg6UHgpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9ZnVuY3Rpb24gSXgoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWWYoKXtyZXR1cm4gdGhpcy5lYWNoKEl4KX1mdW5jdGlvbiBOeCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFpmKCl7cmV0dXJuIHRoaXMuZWFjaChOeCl9ZnVuY3Rpb24gSmYobil7dmFyIHQ9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBGeCgpe3JldHVybiBudWxsfWZ1bmN0aW9uICRmKG4sdCl7dmFyIGU9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKSxpPXQ9PW51bGw/Rng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpkaSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gengoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBLZigpe3JldHVybiB0aGlzLmVhY2goengpfWZ1bmN0aW9uIFV4KCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBCeCgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gUWYobil7cmV0dXJuIHRoaXMuc2VsZWN0KG4/Qng6VXgpfWZ1bmN0aW9uIGpmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZWQ9e30sWWw9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYodGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4gdGR8fChlZD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHRkO2Z1bmN0aW9uIE94KG4sdCxlKXtyZXR1cm4gbj1uZChuLHQsZSksZnVuY3Rpb24oaSl7dmFyIHI9aS5yZWxhdGVkVGFyZ2V0Oyghcnx8ciE9PXRoaXMmJiEoci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJm4uY2FsbCh0aGlzLGkpfX1mdW5jdGlvbiBuZChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPVlsO1lsPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e1lsPXJ9fX1mdW5jdGlvbiBreChuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLGk9dC5pbmRleE9mKCIuIik7cmV0dXJuIGk+PTAmJihlPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSkse3R5cGU6dCxuYW1lOmV9fSl9ZnVuY3Rpb24gSHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciBlPTAsaT0tMSxyPXQubGVuZ3RoLHM7ZTxyOysrZSlzPXRbZV0sKCFuLnR5cGV8fHMudHlwZT09PW4udHlwZSkmJnMubmFtZT09PW4ubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKTp0WysraV09czsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gVngobix0LGUpe3ZhciBpPWVkLmhhc093blByb3BlcnR5KG4udHlwZSk/T3g6bmQ7cmV0dXJuIGZ1bmN0aW9uKHIscyxvKXt2YXIgYT10aGlzLl9fb24sbCxjPWkodCxzLG8pO2lmKGEpe2Zvcih2YXIgdT0wLGg9YS5sZW5ndGg7dTxoOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIobi50eXBlLGMsZSksbD17dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6ZX0sYT9hLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gaWQobix0LGUpe3ZhciBpPWt4KG4rIiIpLHIscz1pLmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKXtmb3IodmFyIGw9MCxjPWEubGVuZ3RoLHU7bDxjOysrbClmb3Iocj0wLHU9YVtsXTtyPHM7KytyKWlmKChvPWlbcl0pLnR5cGU9PT11LnR5cGUmJm8ubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKGE9dD9WeDpIeCxlPT1udWxsJiYoZT0hMSkscj0wO3I8czsrK3IpdGhpcy5lYWNoKGEoaVtyXSx0LGUpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiByZChuLHQsZSl7dmFyIGk9a28obikscj1pLkN1c3RvbUV2ZW50O3R5cGVvZiByPT0iZnVuY3Rpb24iP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gR3gobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcmQodGhpcyxuLHQpfX1mdW5jdGlvbiBXeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiByZCh0aGlzLG4sdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBzZChuLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1d4Okd4KShuLHQpKX12YXIgcXg9W251bGxdO2Z1bmN0aW9uIGNlKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG9kKCl7cmV0dXJuIG5ldyBjZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHF4KX1jZS5wcm90b3R5cGU9b2QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjZSxzZWxlY3Q6dmYsc2VsZWN0QWxsOl9mLGZpbHRlcjp3ZixkYXRhOkVmLGVudGVyOk1mLGV4aXQ6VGYsam9pbjpBZixtZXJnZTpDZixvcmRlcjpSZixzb3J0OkxmLGNhbGw6UGYsbm9kZXM6RGYsbm9kZTpJZixzaXplOk5mLGVtcHR5OkZmLGVhY2g6emYsYXR0cjpVZixzdHlsZTpCZixwcm9wZXJ0eTpPZixjbGFzc2VkOldmLHRleHQ6cWYsaHRtbDpYZixyYWlzZTpZZixsb3dlcjpaZixhcHBlbmQ6SmYsaW5zZXJ0OiRmLHJlbW92ZTpLZixjbG9uZTpRZixkYXR1bTpqZixvbjppZCxkaXNwYXRjaDpzZH07dmFyIE1uPW9kO2Z1bmN0aW9uIEhvKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiBabChuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBocygpe312YXIgY3M9LjcsR289MS9jcywkaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsdXM9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsY249IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFh4PS9eIyhbMC05YS1mXXszLDh9KSQvLFl4PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1skaSwkaSwkaV0rIlxcKSQiKSxaeD1uZXcgUmVnRXhwKCJecmdiXFwoIitbY24sY24sY25dKyJcXCkkIiksSng9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skaSwkaSwkaSx1c10rIlxcKSQiKSwkeD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2NuLGNuLGNuLHVzXSsiXFwpJCIpLEt4PW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t1cyxjbixjbl0rIlxcKSQiKSxReD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3VzLGNuLGNuLHVzXSsiXFwpJCIpLGFkPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0hvKGhzLEplLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmxkLGZvcm1hdEhleDpsZCxmb3JtYXRIc2w6angsZm9ybWF0UmdiOmNkLHRvU3RyaW5nOmNkfSk7ZnVuY3Rpb24gbGQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBqeCgpe3JldHVybiBwZCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBjZCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEplKG4pe3ZhciB0LGU7cmV0dXJuIG49KG4rIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVh4LmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksZT09PTY/dWQodCk6ZT09PTM/bmV3IFVlKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTplPT09OD9Wbyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTplPT09ND9Wbyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVl4LmV4ZWMobikpP25ldyBVZSh0WzFdLHRbMl0sdFszXSwxKToodD1aeC5leGVjKG4pKT9uZXcgVWUodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SnguZXhlYyhuKSk/Vm8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9JHguZXhlYyhuKSk/Vm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9S3guZXhlYyhuKSk/ZGQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1ReC5leGVjKG4pKT9kZCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFkLmhhc093blByb3BlcnR5KG4pP3VkKGFkW25dKTpuPT09InRyYW5zcGFyZW50Ij9uZXcgVWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB1ZChuKXtyZXR1cm4gbmV3IFVlKG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NSwxKX1mdW5jdGlvbiBWbyhuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IFVlKG4sdCxlLGkpfWZ1bmN0aW9uIHR5KG4pe3JldHVybiBuIGluc3RhbmNlb2YgaHN8fChuPUplKG4pKSxuPyhuPW4ucmdiKCksbmV3IFVlKG4ucixuLmcsbi5iLG4ub3BhY2l0eSkpOm5ldyBVZX1mdW5jdGlvbiBLaShuLHQsZSxpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dHkobik6bmV3IFVlKG4sdCxlLGk9PW51bGw/MTppKX1mdW5jdGlvbiBVZShuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9SG8oVWUsS2ksWmwoaHMse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW49PW51bGw/R286TWF0aC5wb3coR28sbiksbmV3IFVlKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBVZSh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmhkLGZvcm1hdEhleDpoZCxmb3JtYXRSZ2I6ZmQsdG9TdHJpbmc6ZmR9KSk7ZnVuY3Rpb24gaGQoKXtyZXR1cm4iIyIrSmwodGhpcy5yKStKbCh0aGlzLmcpK0psKHRoaXMuYil9ZnVuY3Rpb24gZmQoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhuPT09MT8iKSI6IiwgIituKyIpIil9ZnVuY3Rpb24gSmwobil7cmV0dXJuIG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpLChuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gZGQobix0LGUsaSl7cmV0dXJuIGk8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyBsbihuLHQsZSxpKX1mdW5jdGlvbiBwZChuKXtpZihuIGluc3RhbmNlb2YgbG4pcmV0dXJuIG5ldyBsbihuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBoc3x8KG49SmUobikpLCFuKXJldHVybiBuZXcgbG47aWYobiBpbnN0YW5jZW9mIGxuKXJldHVybiBuO249bi5yZ2IoKTt2YXIgdD1uLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSkscz1NYXRoLm1heCh0LGUsaSksbz1OYU4sYT1zLXIsbD0ocytyKS8yO3JldHVybiBhPyh0PT09cz9vPShlLWkpL2ErKGU8aSkqNjplPT09cz9vPShpLXQpL2ErMjpvPSh0LWUpL2ErNCxhLz1sPC41P3MrcjoyLXMtcixvKj02MCk6YT1sPjAmJmw8MT8wOm8sbmV3IGxuKG8sYSxsLG4ub3BhY2l0eSl9ZnVuY3Rpb24gcGkobix0LGUsaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BkKG4pOm5ldyBsbihuLHQsZSxpPT1udWxsPzE6aSl9ZnVuY3Rpb24gbG4obix0LGUsaSl7dGhpcy5oPStuLHRoaXMucz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfUhvKGxuLHBpLFpsKGhzLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP0dvOk1hdGgucG93KEdvLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IFVlKCRsKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLCRsKG4scixpKSwkbChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisobj09PTE/IikiOiIsICIrbisiKSIpfX0pKTtmdW5jdGlvbiAkbChuLHQsZSl7cmV0dXJuKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpKjI1NX1mdW5jdGlvbiBLbChuLHQsZSxpLHIpe3ZhciBzPW4qbixvPXMqbjtyZXR1cm4oKDEtMypuKzMqcy1vKSp0Kyg0LTYqcyszKm8pKmUrKDErMypuKzMqcy0zKm8pKmkrbypyKS82fWZ1bmN0aW9uIG1kKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0scz1uW2krMV0sbz1pPjA/bltpLTFdOjIqci1zLGE9aTx0LTE/bltpKzJdOjIqcy1yO3JldHVybiBLbCgoZS1pL3QpKnQsbyxyLHMsYSl9fWZ1bmN0aW9uIGdkKG4pe3ZhciB0PW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqdCkscj1uWyhpK3QtMSkldF0scz1uW2kldF0sbz1uWyhpKzEpJXRdLGE9blsoaSsyKSV0XTtyZXR1cm4gS2woKGUtaS90KSp0LHIscyxvLGEpfX1mdW5jdGlvbiBRaShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24geGQobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4rZSp0fX1mdW5jdGlvbiBleShuLHQsZSl7cmV0dXJuIG49TWF0aC5wb3cobixlKSx0PU1hdGgucG93KHQsZSktbixlPTEvZSxmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3cobitpKnQsZSl9fWZ1bmN0aW9uIHlkKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpRaShpc05hTihuKT90Om4pfWZ1bmN0aW9uIHZkKG4pe3JldHVybihuPStuKT09MT9ibjpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZXkodCxlLG4pOlFpKGlzTmFOKHQpP2U6dCl9fWZ1bmN0aW9uIGJuKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZSk6UWkoaXNOYU4obik/dDpuKX12YXIgbWk9ZnVuY3Rpb24gbih0KXt2YXIgZT12ZCh0KTtmdW5jdGlvbiBpKHIscyl7dmFyIG89ZSgocj1LaShyKSkuciwocz1LaShzKSkuciksYT1lKHIuZyxzLmcpLGw9ZShyLmIscy5iKSxjPWJuKHIub3BhY2l0eSxzLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gci5yPW8odSksci5nPWEodSksci5iPWwodSksci5vcGFjaXR5PWModSkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiBfZChuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbyxhO2ZvcihvPTA7bzxlOysrbylhPUtpKHRbb10pLGlbb109YS5yfHwwLHJbb109YS5nfHwwLHNbb109YS5ifHwwO3JldHVybiBpPW4oaSkscj1uKHIpLHM9bihzKSxhLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gYS5yPWkobCksYS5nPXIobCksYS5iPXMobCksYSsiIn19fXZhciBueT1fZChtZCksaXk9X2QoZ2QpO2Z1bmN0aW9uIHdkKG4sdCl7dHx8KHQ9W10pO3ZhciBlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCkscjtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1zKSt0W3JdKnM7cmV0dXJuIGl9fWZ1bmN0aW9uIE1kKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBiZChuLHQpe3ZhciBlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShlKSxvO2ZvcihvPTA7bzxpOysrbylyW29dPWdpKG5bb10sdFtvXSk7Zm9yKDtvPGU7KytvKXNbb109dFtvXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG89MDtvPGk7KytvKXNbb109cltvXShhKTtyZXR1cm4gc319ZnVuY3Rpb24gU2Qobix0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBlLnNldFRpbWUobiooMS1pKSt0KmkpLGV9fWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIEVkKG4sdCl7dmFyIGU9e30saT17fSxyOyhuPT09bnVsbHx8dHlwZW9mIG4hPSJvYmplY3QiKSYmKG49e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihyIGluIHQpciBpbiBuP2Vbcl09Z2kobltyXSx0W3JdKTppW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihyIGluIGUpaVtyXT1lW3JdKHMpO3JldHVybiBpfX12YXIgamw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFFsPW5ldyBSZWdFeHAoamwuc291cmNlLCJnIik7ZnVuY3Rpb24gcnkobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHN5KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19ZnVuY3Rpb24gZnMobix0KXt2YXIgZT1qbC5sYXN0SW5kZXg9UWwubGFzdEluZGV4PTAsaSxyLHMsbz0tMSxhPVtdLGw9W107Zm9yKG49bisiIix0PXQrIiI7KGk9amwuZXhlYyhuKSkmJihyPVFsLmV4ZWModCkpOykocz1yLmluZGV4KT5lJiYocz10LnNsaWNlKGUscyksYVtvXT9hW29dKz1zOmFbKytvXT1zKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbb10/YVtvXSs9cjphWysrb109cjooYVsrK29dPW51bGwsbC5wdXNoKHtpOm8seDp5ZShpLHIpfSkpLGU9UWwubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYocz10LnNsaWNlKGUpLGFbb10/YVtvXSs9czphWysrb109cyksYS5sZW5ndGg8Mj9sWzBdP3N5KGxbMF0ueCk6cnkodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KWFbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gZ2kobix0KXt2YXIgZT10eXBlb2YgdCxpO3JldHVybiB0PT1udWxsfHxlPT09ImJvb2xlYW4iP1FpKHQpOihlPT09Im51bWJlciI/eWU6ZT09PSJzdHJpbmciPyhpPUplKHQpKT8odD1pLG1pKTpmczp0IGluc3RhbmNlb2YgSmU/bWk6dCBpbnN0YW5jZW9mIERhdGU/U2Q6TWQodCk/d2Q6QXJyYXkuaXNBcnJheSh0KT9iZDp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/RWQ6eWUpKG4sdCl9ZnVuY3Rpb24gdGMobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4qKDEtZSkrdCplKX19dmFyIFRkPTE4MC9NYXRoLlBJLFdvPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGVjKG4sdCxlLGkscixzKXt2YXIgbyxhLGw7cmV0dXJuKG89TWF0aC5zcXJ0KG4qbit0KnQpKSYmKG4vPW8sdC89byksKGw9biplK3QqaSkmJihlLT1uKmwsaS09dCpsKSwoYT1NYXRoLnNxcnQoZSplK2kqaSkpJiYoZS89YSxpLz1hLGwvPWEpLG4qaTx0KmUmJihuPS1uLHQ9LXQsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6cyxyb3RhdGU6TWF0aC5hdGFuMih0LG4pKlRkLHNrZXdYOk1hdGguYXRhbihsKSpUZCxzY2FsZVg6byxzY2FsZVk6YX19dmFyIGRzLG5jLEFkLHFvO2Z1bmN0aW9uIENkKG4pe3JldHVybiBuPT09Im5vbmUiP1dvOihkc3x8KGRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLG5jPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZD1kb2N1bWVudC5kZWZhdWx0VmlldyksZHMuc3R5bGUudHJhbnNmb3JtPW4sbj1BZC5nZXRDb21wdXRlZFN0eWxlKG5jLmFwcGVuZENoaWxkKGRzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxuYy5yZW1vdmVDaGlsZChkcyksbj1uLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksZWMoK25bMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX1mdW5jdGlvbiBSZChuKXtyZXR1cm4gbj09bnVsbD9XbzoocW98fChxbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxxby5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbiksKG49cW8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KG49bi5tYXRyaXgsZWMobi5hLG4uYixuLmMsbi5kLG4uZSxuLmYpKTpXbyl9ZnVuY3Rpb24gTGQobix0LGUsaSl7ZnVuY3Rpb24gcihjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gcyhjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLGUpO2cucHVzaCh7aTp4LTQseDp5ZShjLGgpfSx7aTp4LTIseDp5ZSh1LGYpfSl9ZWxzZShofHxmKSYmZC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZitlKX1mdW5jdGlvbiBvKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKHIoaCkrInJvdGF0ZSgiLG51bGwsaSktMix4OnllKGMsdSl9KSk6dSYmaC5wdXNoKHIoaCkrInJvdGF0ZSgiK3UraSl9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKHIoaCkrInNrZXdYKCIsbnVsbCxpKS0yLHg6eWUoYyx1KX0pOnUmJmgucHVzaChyKGgpKyJza2V3WCgiK3UraSl9ZnVuY3Rpb24gbChjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2gocihkKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zy5wdXNoKHtpOngtNCx4OnllKGMsaCl9LHtpOngtMix4OnllKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJmQucHVzaChyKGQpKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPW4oYyksdT1uKHUpLHMoYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksbyhjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLGEoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKGQpe2Zvcih2YXIgZz0tMSx4PWYubGVuZ3RoLHY7KytnPHg7KWhbKHY9ZltnXSkuaV09di54KGQpO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGljPUxkKENkLCJweCwgIiwicHgpIiwiZGVnKSIpLHJjPUxkKFJkLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gUGQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD1waSh0KSkuaCwoZT1waShlKSkuaCkscj1ibih0LnMsZS5zKSxzPWJuKHQubCxlLmwpLG89Ym4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0Lmg9aShhKSx0LnM9cihhKSx0Lmw9cyhhKSx0Lm9wYWNpdHk9byhhKSx0KyIifX19dmFyIHNjPVBkKHlkKSxveT1QZChibik7dmFyIGppPTAsbXM9MCxwcz0wLElkPTFlMyxYbyxncyxZbz0wLHhpPTAsWm89MCx4cz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxOZD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTtmdW5jdGlvbiB0cigpe3JldHVybiB4aXx8KE5kKGF5KSx4aT14cy5ub3coKStabyl9ZnVuY3Rpb24gYXkoKXt4aT0wfWZ1bmN0aW9uIHlzKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH15cy5wcm90b3R5cGU9Sm8ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5cyxyZXN0YXJ0OmZ1bmN0aW9uKG4sdCxlKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KGU9PW51bGw/dHIoKTorZSkrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmdzIT09dGhpcyYmKGdzP2dzLl9uZXh0PXRoaXM6WG89dGhpcyxncz10aGlzKSx0aGlzLl9jYWxsPW4sdGhpcy5fdGltZT1lLG9jKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLG9jKCkpfX07ZnVuY3Rpb24gSm8obix0LGUpe3ZhciBpPW5ldyB5cztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIEZkKCl7dHIoKSwrK2ppO2Zvcih2YXIgbj1Ybyx0O247KSh0PXhpLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1qaX1mdW5jdGlvbiBEZCgpe3hpPShZbz14cy5ub3coKSkrWm8samk9bXM9MDt0cnl7RmQoKX1maW5hbGx5e2ppPTAsY3koKSx4aT0wfX1mdW5jdGlvbiBseSgpe3ZhciBuPXhzLm5vdygpLHQ9bi1Zbzt0PklkJiYoWm8tPXQsWW89bil9ZnVuY3Rpb24gY3koKXtmb3IodmFyIG4sdD1YbyxlLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpYbz1lKTtncz1uLG9jKGkpfWZ1bmN0aW9uIG9jKG4pe2lmKCFqaSl7bXMmJihtcz1jbGVhclRpbWVvdXQobXMpKTt2YXIgdD1uLXhpO3Q+MjQ/KG48MS8wJiYobXM9c2V0VGltZW91dChEZCxuLXhzLm5vdygpLVpvKSkscHMmJihwcz1jbGVhckludGVydmFsKHBzKSkpOihwc3x8KFlvPXhzLm5vdygpLHBzPXNldEludGVydmFsKGx5LElkKSksamk9MSxOZChEZCkpfX1mdW5jdGlvbiAkbyhuLHQsZSl7dmFyIGk9bmV3IHlzO3JldHVybiB0PXQ9PW51bGw/MDordCxpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0LGUpLGl9dmFyIHV5PVdsKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGh5PVtdLFVkPTAsYWM9MSxRbz0yLEtvPTMsemQ9NCxqbz01LHZzPTY7ZnVuY3Rpb24ga24obix0LGUsaSxyLHMpe3ZhciBvPW4uX190cmFuc2l0aW9uO2lmKCFvKW4uX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZSBpbiBvKXJldHVybjtmeShuLGUse25hbWU6dCxpbmRleDppLGdyb3VwOnIsb246dXksdHdlZW46aHksdGltZTpzLnRpbWUsZGVsYXk6cy5kZWxheSxkdXJhdGlvbjpzLmR1cmF0aW9uLGVhc2U6cy5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VWR9KX1mdW5jdGlvbiBfcyhuLHQpe3ZhciBlPXVlKG4sdCk7aWYoZS5zdGF0ZT5VZCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEFlKG4sdCl7dmFyIGU9dWUobix0KTtpZihlLnN0YXRlPktvKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIHVlKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gZnkobix0LGUpe3ZhciBpPW4uX190cmFuc2l0aW9uLHI7aVt0XT1lLGUudGltZXI9Sm8ocywwLGUudGltZSk7ZnVuY3Rpb24gcyhjKXtlLnN0YXRlPWFjLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZvKGMtZS5kZWxheSl9ZnVuY3Rpb24gbyhjKXt2YXIgdSxoLGYsZDtpZihlLnN0YXRlIT09YWMpcmV0dXJuIGwoKTtmb3IodSBpbiBpKWlmKGQ9aVt1XSxkLm5hbWU9PT1lLm5hbWUpe2lmKGQuc3RhdGU9PT1LbylyZXR1cm4gJG8obyk7ZC5zdGF0ZT09PXpkPyhkLnN0YXRlPXZzLGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8dCYmKGQuc3RhdGU9dnMsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZigkbyhmdW5jdGlvbigpe2Uuc3RhdGU9PT1LbyYmKGUuc3RhdGU9emQsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoYykpfSksZS5zdGF0ZT1RbyxlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09UW8pe2ZvcihlLnN0YXRlPUtvLHI9bmV3IEFycmF5KGY9ZS50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKGQ9ZS50d2Vlblt1XS52YWx1ZS5jYWxsKG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytoXT1kKTtyLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIGEoYyl7Zm9yKHZhciB1PWM8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLGMvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChsKSxlLnN0YXRlPWpvLDEpLGg9LTEsZj1yLmxlbmd0aDsrK2g8ZjspcltoXS5jYWxsKG4sdSk7ZS5zdGF0ZT09PWpvJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe2Uuc3RhdGU9dnMsZS50aW1lci5zdG9wKCksZGVsZXRlIGlbdF07Zm9yKHZhciBjIGluIGkpcmV0dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gd3Mobix0KXt2YXIgZT1uLl9fdHJhbnNpdGlvbixpLHIscz0hMCxvO2lmKCEhZSl7dD10PT1udWxsP251bGw6dCsiIjtmb3IobyBpbiBlKXtpZigoaT1lW29dKS5uYW1lIT09dCl7cz0hMTtjb250aW51ZX1yPWkuc3RhdGU+UW8mJmkuc3RhdGU8am8saS5zdGF0ZT12cyxpLnRpbWVyLnN0b3AoKSxpLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18saS5pbmRleCxpLmdyb3VwKSxkZWxldGUgZVtvXX1zJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIEJkKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3cyh0aGlzLG4pfSl9ZnVuY3Rpb24gZHkobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsbikscz1yLnR3ZWVuO2lmKHMhPT1lKXtpPWU9cztmb3IodmFyIG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoaVtvXS5uYW1lPT09dCl7aT1pLnNsaWNlKCksaS5zcGxpY2UobywxKTticmVha319ci50d2Vlbj1pfX1mdW5jdGlvbiBweShuLHQsZSl7dmFyIGkscjtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9QWUodGhpcyxuKSxvPXMudHdlZW47aWYobyE9PWkpe3I9KGk9bykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfXMudHdlZW49cn19ZnVuY3Rpb24gT2Qobix0KXt2YXIgZT10aGlzLl9pZDtpZihuKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT11ZSh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAscz1pLmxlbmd0aCxvO3I8czsrK3IpaWYoKG89aVtyXSkubmFtZT09PW4pcmV0dXJuIG8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9keTpweSkoZSxuLHQpKX1mdW5jdGlvbiBlcihuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gdWUocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24gdGEobix0KXt2YXIgZTtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3llOnQgaW5zdGFuY2VvZiBKZT9taTooZT1KZSh0KSk/KHQ9ZSxtaSk6ZnMpKG4sdCl9ZnVuY3Rpb24gbXkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGd5KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24geHkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBvPT09cj9udWxsOm89PT1pP3M6cz10KGk9byxlKX19ZnVuY3Rpb24geXkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09aT9zOnM9dChpPW8sZSl9fWZ1bmN0aW9uIHZ5KG4sdCxlKXt2YXIgaSxyLHM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8sYT1lKHRoaXMpLGw7cmV0dXJuIGE9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToobz10aGlzLmdldEF0dHJpYnV0ZShuKSxsPWErIiIsbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpKX19ZnVuY3Rpb24gX3kobix0LGUpe3ZhciBpLHIscztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxhPWUodGhpcyksbDtyZXR1cm4gYT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKToobz10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCksbD1hKyIiLG89PT1sP251bGw6bz09PWkmJmw9PT1yP3M6KHI9bCxzPXQoaT1vLGEpKSl9fWZ1bmN0aW9uIGtkKG4sdCl7dmFyIGU9d24obiksaT1lPT09InRyYW5zZm9ybSI/cmM6dGE7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKG4sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KGUubG9jYWw/X3k6dnkpKGUsaSxlcih0aGlzLCJhdHRyLiIrbix0KSk6dD09bnVsbD8oZS5sb2NhbD9neTpteSkoZSk6KGUubG9jYWw/eXk6eHkpKGUsaSx0KSl9ZnVuY3Rpb24gd3kobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUobix0LmNhbGwodGhpcyxlKSl9fWZ1bmN0aW9uIE15KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gYnkobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZNeShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gU3kobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZ3eShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gSGQobix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBpPXduKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/Ynk6U3kpKGksdCkpfWZ1bmN0aW9uIEV5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7X3ModGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFR5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtfcyh0aGlzLG4pLmRlbGF5PXR9fWZ1bmN0aW9uIFZkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/RXk6VHkpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIEF5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7QWUodGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEN5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtBZSh0aGlzLG4pLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIEdkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/QXk6Q3kpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufWZ1bmN0aW9uIFJ5KG4sdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0FlKHRoaXMsbikuZWFzZT10fX1mdW5jdGlvbiBXZChuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goUnkodCxuKSk6dWUodGhpcy5ub2RlKCksdCkuZWFzZX1mdW5jdGlvbiBxZChuKXt0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmKG49YXMobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIHM9dFtyXSxvPXMubGVuZ3RoLGE9aVtyXT1bXSxsLGM9MDtjPG87KytjKShsPXNbY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMscykmJmEucHVzaChsKTtyZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYZChuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgd2Uobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIEx5KG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fHQ9PT0ic3RhcnQifSl9ZnVuY3Rpb24gUHkobix0LGUpe3ZhciBpLHIscz1MeSh0KT9fczpBZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1zKHRoaXMsbiksYT1vLm9uO2EhPT1pJiYocj0oaT1hKS5jb3B5KCkpLm9uKHQsZSksby5vbj1yfX1mdW5jdGlvbiBZZChuLHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dWUodGhpcy5ub2RlKCksZSkub24ub24obik6dGhpcy5lYWNoKFB5KGUsbix0KSl9ZnVuY3Rpb24gRHkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFpkKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLER5KHRoaXMuX2lkKSl9ZnVuY3Rpb24gSmQobil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1kaShuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKWZvcih2YXIgYT1pW29dLGw9YS5sZW5ndGgsYz1zW29dPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9YVtmXSkmJihoPW4uY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLGtuKGNbZl0sdCxlLGYsYyx1ZSh1LGUpKSk7cmV0dXJuIG5ldyB3ZShzLHRoaXMuX3BhcmVudHMsdCxlKX1mdW5jdGlvbiAkZChuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz1bXSxvPVtdLGE9MDthPHI7KythKWZvcih2YXIgbD1pW2FdLGM9bC5sZW5ndGgsdSxoPTA7aDxjOysraClpZih1PWxbaF0pe2Zvcih2YXIgZj1uLmNhbGwodSx1Ll9fZGF0YV9fLGgsbCksZCxnPXVlKHUsZSkseD0wLHY9Zi5sZW5ndGg7eDx2OysreCkoZD1mW3hdKSYma24oZCx0LGUseCxmLGcpO3MucHVzaChmKSxvLnB1c2godSl9cmV0dXJuIG5ldyB3ZShzLG8sdCxlKX12YXIgSXk9TW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEtkKCl7cmV0dXJuIG5ldyBJeSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTnkobix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9T24odGhpcyxuKSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLE9uKHRoaXMsbikpO3JldHVybiBzPT09bz9udWxsOnM9PT1lJiZvPT09aT9yOnI9dChlPXMsaT1vKX19ZnVuY3Rpb24gUWQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gRnkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbik7cmV0dXJuIG89PT1yP251bGw6bz09PWk/czpzPXQoaT1vLGUpfX1mdW5jdGlvbiB6eShuLHQsZSl7dmFyIGkscixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbiksYT1lKHRoaXMpLGw9YSsiIjtyZXR1cm4gYT09bnVsbCYmKGw9YT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxPbih0aGlzLG4pKSksbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpfX1mdW5jdGlvbiBVeShuLHQpe3ZhciBlLGkscixzPSJzdHlsZS4iK3Qsbz0iZW5kLiIrcyxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUFlKHRoaXMsbiksYz1sLm9uLHU9bC52YWx1ZVtzXT09bnVsbD9hfHwoYT1RZCh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PXUpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKG8scj11KSxsLm9uPWl9fWZ1bmN0aW9uIGpkKG4sdCxlKXt2YXIgaT0obis9IiIpPT0idHJhbnNmb3JtIj9pYzp0YTtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4obixOeShuLGkpKS5vbigiZW5kLnN0eWxlLiIrbixRZChuKSk6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKG4senkobixpLGVyKHRoaXMsInN0eWxlLiIrbix0KSkpLmVhY2goVXkodGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLEZ5KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX1mdW5jdGlvbiBCeShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19ZnVuY3Rpb24gT3kobix0LGUpe3ZhciBpLHI7ZnVuY3Rpb24gcygpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJkJ5KG4sbyxlKSksaX1yZXR1cm4gcy5fdmFsdWU9dCxzfWZ1bmN0aW9uIHRwKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLE95KG4sdCxlPT1udWxsPyIiOmUpKX1mdW5jdGlvbiBreShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIEh5KG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGVwKG4pe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2Ygbj09ImZ1bmN0aW9uIj9IeShlcih0aGlzLCJ0ZXh0IixuKSk6a3kobj09bnVsbD8iIjpuKyIiKSl9ZnVuY3Rpb24gVnkobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIEd5KG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJlZ5KHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9ZnVuY3Rpb24gbnAobil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobj09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LEd5KG4pKX1mdW5jdGlvbiBpcCgpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1lYSgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz0wO3M8cjsrK3MpZm9yKHZhciBvPWlbc10sYT1vLmxlbmd0aCxsLGM9MDtjPGE7KytjKWlmKGw9b1tjXSl7dmFyIHU9dWUobCx0KTtrbihsLG4sZSxjLG8se3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyxuLGUpfWZ1bmN0aW9uIHJwKCl7dmFyIG4sdCxlPXRoaXMsaT1lLl9pZCxyPWUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLG8pe3ZhciBhPXt2YWx1ZTpvfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0tcj09PTAmJnMoKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPUFlKHRoaXMsaSksdT1jLm9uO3UhPT1uJiYodD0obj11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKGEpLHQuXy5pbnRlcnJ1cHQucHVzaChhKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFd5PTA7ZnVuY3Rpb24gd2Uobix0LGUsaSl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1pfWZ1bmN0aW9uIGxjKG4pe3JldHVybiBNbigpLnRyYW5zaXRpb24obil9ZnVuY3Rpb24gZWEoKXtyZXR1cm4rK1d5fXZhciBucj1Nbi5wcm90b3R5cGU7d2UucHJvdG90eXBlPWxjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d2Usc2VsZWN0OkpkLHNlbGVjdEFsbDokZCxmaWx0ZXI6cWQsbWVyZ2U6WGQsc2VsZWN0aW9uOktkLHRyYW5zaXRpb246aXAsY2FsbDpuci5jYWxsLG5vZGVzOm5yLm5vZGVzLG5vZGU6bnIubm9kZSxzaXplOm5yLnNpemUsZW1wdHk6bnIuZW1wdHksZWFjaDpuci5lYWNoLG9uOllkLGF0dHI6a2QsYXR0clR3ZWVuOkhkLHN0eWxlOmpkLHN0eWxlVHdlZW46dHAsdGV4dDplcCx0ZXh0VHdlZW46bnAscmVtb3ZlOlpkLHR3ZWVuOk9kLGRlbGF5OlZkLGR1cmF0aW9uOkdkLGVhc2U6V2QsZW5kOnJwfTtmdW5jdGlvbiBuYShuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn12YXIgY2M9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOm5hfTtmdW5jdGlvbiBxeShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBjYy50aW1lPXRyKCksY2M7cmV0dXJuIGV9ZnVuY3Rpb24gc3Aobil7dmFyIHQsZTtuIGluc3RhbmNlb2Ygd2U/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1lYSgpLChlPWNjKS50aW1lPXRyKCksbj1uPT1udWxsP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9MDtzPHI7KytzKWZvcih2YXIgbz1pW3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYma24obCxuLHQsYyxvLGV8fHF5KGwsdCkpO3JldHVybiBuZXcgd2UoaSx0aGlzLl9wYXJlbnRzLG4sdCl9TW4ucHJvdG90eXBlLmludGVycnVwdD1CZDtNbi5wcm90b3R5cGUudHJhbnNpdGlvbj1zcDtmdW5jdGlvbiBvcChuKXtyZXR1cm5bK25bMF0sK25bMV1dfWZ1bmN0aW9uIFh5KG4pe3JldHVybltvcChuWzBdKSxvcChuWzFdKV19dmFyIEdQPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAodWMpLGlucHV0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PW51bGw/bnVsbDpbWytuWzBdLHRbMF1bMV1dLFsrblsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbiYmW25bMF1bMF0sblsxXVswXV19fSxXUD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuLHQpe3JldHVybiBuPT1udWxsP251bGw6W1t0WzBdWzBdLCtuWzBdXSxbdFsxXVswXSwrblsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG4mJltuWzBdWzFdLG5bMV1bMV1dfX0scVA9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbD9udWxsOlh5KG4pfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG59fTtmdW5jdGlvbiB1YyhuKXtyZXR1cm57dHlwZTpufX12YXIgYXA9TWF0aC5QSSxZeT1hcC8yLFp5PWFwKjI7dmFyIEp5PUFycmF5LnByb3RvdHlwZS5zbGljZTt2YXIgQmU9IiQiO2Z1bmN0aW9uIGlhKCl7fWlhLnByb3RvdHlwZT1scC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlhLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gQmUrbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbQmUrbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW0JlK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PUJlK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUJlJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1CZSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbHAobix0KXt2YXIgZT1uZXcgaWE7aWYobiBpbnN0YW5jZW9mIGlhKW4uZWFjaChmdW5jdGlvbihhLGwpe2Uuc2V0KGwsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBpPS0xLHI9bi5sZW5ndGgscztpZih0PT1udWxsKWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KHM9bltpXSxpLG4pLHMpfWVsc2UgaWYobilmb3IodmFyIG8gaW4gbillLnNldChvLG5bb10pO3JldHVybiBlfXZhciB5aT1scDtmdW5jdGlvbiByYSgpe312YXIgdmk9eWkucHJvdG90eXBlO3JhLnByb3RvdHlwZT0keS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJhLGhhczp2aS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiBuKz0iIix0aGlzW0JlK25dPW4sdGhpc30scmVtb3ZlOnZpLnJlbW92ZSxjbGVhcjp2aS5jbGVhcix2YWx1ZXM6dmkua2V5cyxzaXplOnZpLnNpemUsZW1wdHk6dmkuZW1wdHksZWFjaDp2aS5lYWNofTtmdW5jdGlvbiAkeShuLHQpe3ZhciBlPW5ldyByYTtpZihuIGluc3RhbmNlb2YgcmEpbi5lYWNoKGZ1bmN0aW9uKHMpe2UuYWRkKHMpfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9dmFyIEt5PUFycmF5LnByb3RvdHlwZSxjcD1LeS5zbGljZTt2YXIgVEk9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIGhwKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBfaShuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiB1bihuKXtyZXR1cm4gbj1faShNYXRoLmFicyhuKSksbj9uWzFdOk5hTn1mdW5jdGlvbiBmcChuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxzPVtdLG89MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxzLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW289KG8rMSklbi5sZW5ndGhdO3JldHVybiBzLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiBkcChuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19dmFyIHR2PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEhuKG4pe2lmKCEodD10di5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgc2Eoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9SG4ucHJvdG90eXBlPXNhLnByb3RvdHlwZTtmdW5jdGlvbiBzYShuKXt0aGlzLmZpbGw9bi5maWxsPT09dm9pZCAwPyIgIjpuLmZpbGwrIiIsdGhpcy5hbGlnbj1uLmFsaWduPT09dm9pZCAwPyI+IjpuLmFsaWduKyIiLHRoaXMuc2lnbj1uLnNpZ249PT12b2lkIDA/Ii0iOm4uc2lnbisiIix0aGlzLnN5bWJvbD1uLnN5bWJvbD09PXZvaWQgMD8iIjpuLnN5bWJvbCsiIix0aGlzLnplcm89ISFuLnplcm8sdGhpcy53aWR0aD1uLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorbi53aWR0aCx0aGlzLmNvbW1hPSEhbi5jb21tYSx0aGlzLnByZWNpc2lvbj1uLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K24ucHJlY2lzaW9uLHRoaXMudHJpbT0hIW4udHJpbSx0aGlzLnR5cGU9bi50eXBlPT09dm9pZCAwPyIiOm4udHlwZSsiIn1zYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBwcChuKXt0OmZvcih2YXIgdD1uLmxlbmd0aCxlPTEsaT0tMSxyO2U8dDsrK2Upc3dpdGNoKG5bZV0pe2Nhc2UiLiI6aT1yPWU7YnJlYWs7Y2FzZSIwIjppPT09MCYmKGk9ZSkscj1lO2JyZWFrO2RlZmF1bHQ6aWYoIStuW2VdKWJyZWFrIHQ7aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP24uc2xpY2UoMCxpKStuLnNsaWNlKHIrMSk6bn12YXIgaGM7ZnVuY3Rpb24gbXAobix0KXt2YXIgZT1faShuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdLHM9ci0oaGM9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSozKSsxLG89aS5sZW5ndGg7cmV0dXJuIHM9PT1vP2k6cz5vP2krbmV3IEFycmF5KHMtbysxKS5qb2luKCIwIik6cz4wP2kuc2xpY2UoMCxzKSsiLiIraS5zbGljZShzKToiMC4iK25ldyBBcnJheSgxLXMpLmpvaW4oIjAiKStfaShuLE1hdGgubWF4KDAsdCtzLTEpKVswXX1mdW5jdGlvbiBmYyhuLHQpe3ZhciBlPV9pKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIGRjPXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4obioxMDApLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6aHAsZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gZmMobioxMDAsdCl9LHI6ZmMsczptcCxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIHBjKG4pe3JldHVybiBufXZhciBncD1BcnJheS5wcm90b3R5cGUubWFwLHhwPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHlwKG4pe3ZhciB0PW4uZ3JvdXBpbmc9PT12b2lkIDB8fG4udGhvdXNhbmRzPT09dm9pZCAwP3BjOmZwKGdwLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVswXSsiIixpPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVsxXSsiIixyPW4uZGVjaW1hbD09PXZvaWQgMD8iLiI6bi5kZWNpbWFsKyIiLHM9bi5udW1lcmFscz09PXZvaWQgMD9wYzpkcChncC5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSksbz1uLnBlcmNlbnQ9PT12b2lkIDA/IiUiOm4ucGVyY2VudCsiIixhPW4ubWludXM9PT12b2lkIDA/Ii0iOm4ubWludXMrIiIsbD1uLm5hbj09PXZvaWQgMD8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGgpe2g9SG4oaCk7dmFyIGY9aC5maWxsLGQ9aC5hbGlnbixnPWguc2lnbix4PWguc3ltYm9sLHY9aC56ZXJvLG09aC53aWR0aCxwPWguY29tbWEsYj1oLnByZWNpc2lvbixfPWgudHJpbSxTPWgudHlwZTtTPT09Im4iPyhwPSEwLFM9ImciKTpkY1tTXXx8KGI9PT12b2lkIDAmJihiPTEyKSxfPSEwLFM9ImciKSwodnx8Zj09PSIwIiYmZD09PSI9IikmJih2PSEwLGY9IjAiLGQ9Ij0iKTt2YXIgTD14PT09IiQiP2U6eD09PSIjIiYmL1tib3hYXS8udGVzdChTKT8iMCIrUy50b0xvd2VyQ2FzZSgpOiIiLEE9eD09PSIkIj9pOi9bJXBdLy50ZXN0KFMpP286IiIsSD1kY1tTXSx0dD0vW2RlZmdwcnMlXS8udGVzdChTKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KFMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIFgoeSl7dmFyIFI9TCxEPUEsRix6LE47aWYoUz09PSJjIilEPUgoeSkrRCx5PSIiO2Vsc2V7eT0reTt2YXIgVj15PDB8fDEveTwwO2lmKHk9aXNOYU4oeSk/bDpIKE1hdGguYWJzKHkpLGIpLF8mJih5PXBwKHkpKSxWJiYreT09MCYmZyE9PSIrIiYmKFY9ITEpLFI9KFY/Zz09PSIoIj9nOmE6Zz09PSItInx8Zz09PSIoIj8iIjpnKStSLEQ9KFM9PT0icyI/eHBbOCtoYy8zXToiIikrRCsoViYmZz09PSIoIj8iKSI6IiIpLHR0KXtmb3IoRj0tMSx6PXkubGVuZ3RoOysrRjx6OylpZihOPXkuY2hhckNvZGVBdChGKSw0OD5OfHxOPjU3KXtEPShOPT09NDY/cit5LnNsaWNlKEYrMSk6eS5zbGljZShGKSkrRCx5PXkuc2xpY2UoMCxGKTticmVha319fXAmJiF2JiYoeT10KHksMS8wKSk7dmFyIFE9Ui5sZW5ndGgreS5sZW5ndGgrRC5sZW5ndGgsYXQ9UTxtP25ldyBBcnJheShtLVErMSkuam9pbihmKToiIjtzd2l0Y2gocCYmdiYmKHk9dChhdCt5LGF0Lmxlbmd0aD9tLUQubGVuZ3RoOjEvMCksYXQ9IiIpLGQpe2Nhc2UiPCI6eT1SK3krRCthdDticmVhaztjYXNlIj0iOnk9UithdCt5K0Q7YnJlYWs7Y2FzZSJeIjp5PWF0LnNsaWNlKDAsUT1hdC5sZW5ndGg+PjEpK1IreStEK2F0LnNsaWNlKFEpO2JyZWFrO2RlZmF1bHQ6eT1hdCtSK3krRDticmVha31yZXR1cm4gcyh5KX1yZXR1cm4gWC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBoKyIifSxYfWZ1bmN0aW9uIHUoaCxmKXt2YXIgZD1jKChoPUhuKGgpLGgudHlwZT0iZiIsaCkpLGc9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHVuKGYpLzMpKSkqMyx4PU1hdGgucG93KDEwLC1nKSx2PXhwWzgrZy8zXTtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIGQoeCptKSt2fX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OnV9fXZhciBvYSxPZSxhYTttYyh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSk7ZnVuY3Rpb24gbWMobil7cmV0dXJuIG9hPXlwKG4pLE9lPW9hLmZvcm1hdCxhYT1vYS5mb3JtYXRQcmVmaXgsb2F9ZnVuY3Rpb24gZ2Mobil7cmV0dXJuIE1hdGgubWF4KDAsLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geGMobix0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodW4odCkvMykpKSozLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geWMobix0KXtyZXR1cm4gbj1NYXRoLmFicyhuKSx0PU1hdGguYWJzKHQpLW4sTWF0aC5tYXgoMCx1bih0KS11bihuKSkrMX1mdW5jdGlvbiBXZSgpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciBldj1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXtyZXR1cm4gaT1pPT1udWxsPzA6K2kscj1yPT1udWxsPzE6K3IsYXJndW1lbnRzLmxlbmd0aD09PTE/KHI9aSxpPTApOnItPWksZnVuY3Rpb24oKXtyZXR1cm4gdCgpKnIraX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciB2Yz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXt2YXIgcyxvO3JldHVybiBpPWk9PW51bGw/MDoraSxyPXI9PW51bGw/MTorcixmdW5jdGlvbigpe3ZhciBhO2lmKHMhPW51bGwpYT1zLHM9bnVsbDtlbHNlIGRvIHM9dCgpKjItMSxhPXQoKSoyLTEsbz1zKnMrYSphO3doaWxlKCFvfHxvPjEpO3JldHVybiBpK3IqYSpNYXRoLnNxcnQoLTIqTWF0aC5sb2cobykvbyl9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTt2YXIgbnY9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKCl7dmFyIGk9dmMuc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoaSgpKX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciBfYz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAscz0wO3M8aTsrK3Mpcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIGl2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXt2YXIgcj1fYy5zb3VyY2UodCkoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIHJ2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS10KCkpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTtmdW5jdGlvbiBQZShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKTticmVha31yZXR1cm4gdGhpc312YXIgdnA9QXJyYXkucHJvdG90eXBlLGJzPXZwLm1hcCx3aT12cC5zbGljZTtmdW5jdGlvbiBfcChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gd2Mobil7cmV0dXJuK259dmFyIHdwPVswLDFdO2Z1bmN0aW9uIERlKG4pe3JldHVybiBufWZ1bmN0aW9uIE1jKG4sdCl7cmV0dXJuKHQtPW49K24pP2Z1bmN0aW9uKGUpe3JldHVybihlLW4pL3R9Ol9wKGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24gTXAobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV0saTtyZXR1cm4gdD5lJiYoaT10LHQ9ZSxlPWkpLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUscikpfX1mdW5jdGlvbiBvdihuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0scz10WzBdLG89dFsxXTtyZXR1cm4gcjxpPyhpPU1jKHIsaSkscz1lKG8scykpOihpPU1jKGkscikscz1lKHMsbykpLGZ1bmN0aW9uKGEpe3JldHVybiBzKGkoYSkpfX1mdW5jdGlvbiBhdihuLHQsZSl7dmFyIGk9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTEscj1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSksbz0tMTtmb3IobltpXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPGk7KXJbb109TWMobltvXSxuW28rMV0pLHNbb109ZSh0W29dLHRbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsPUJuKG4sYSwxLGkpLTE7cmV0dXJuIHNbbF0ocltsXShhKSl9fWZ1bmN0aW9uIFZuKG4sdCl7cmV0dXJuIHQuZG9tYWluKG4uZG9tYWluKCkpLnJhbmdlKG4ucmFuZ2UoKSkuaW50ZXJwb2xhdGUobi5pbnRlcnBvbGF0ZSgpKS5jbGFtcChuLmNsYW1wKCkpLnVua25vd24obi51bmtub3duKCkpfWZ1bmN0aW9uIFNzKCl7dmFyIG49d3AsdD13cCxlPWdpLGkscixzLG89RGUsYSxsLGM7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP2F2Om92LGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/czoobHx8KGw9YShuLm1hcChpKSx0LGUpKSkoaShvKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBvKHIoKGN8fChjPWEodCxuLm1hcChpKSx5ZSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1icy5jYWxsKGYsd2MpLG89PT1EZXx8KG89TXAobikpLHUoKSk6bi5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXdpLmNhbGwoZiksdSgpKTp0LnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbihmKXtyZXR1cm4gdD13aS5jYWxsKGYpLGU9dGMsdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWY/TXAobik6RGUsaCk6byE9PURlfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWYsdSgpKTplfSxoLnVua25vd249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZixoKTpzfSxmdW5jdGlvbihmLGQpe3JldHVybiBpPWYscj1kLHUoKX19ZnVuY3Rpb24gRXMobix0KXtyZXR1cm4gU3MoKShuLHQpfWZ1bmN0aW9uIGJjKG4sdCxlLGkpe3ZhciByPV9uKG4sdCxlKSxzO3N3aXRjaChpPUhuKGk9PW51bGw/IixmIjppKSxpLnR5cGUpe2Nhc2UicyI6e3ZhciBvPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gaS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXhjKHIsbykpJiYoaS5wcmVjaXNpb249cyksYWEoaSxvKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7aS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXljKHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e2kucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4ocz1nYyhyKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gT2UoaSl9ZnVuY3Rpb24gTWkobil7dmFyIHQ9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24oZSl7dmFyIGk9dCgpO3JldHVybiBycyhpWzBdLGlbaS5sZW5ndGgtMV0sZT09bnVsbD8xMDplKX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsaSl7dmFyIHI9dCgpO3JldHVybiBiYyhyWzBdLHJbci5sZW5ndGgtMV0sZT09bnVsbD8xMDplLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7ZT09bnVsbCYmKGU9MTApO3ZhciBpPXQoKSxyPTAscz1pLmxlbmd0aC0xLG89aVtyXSxhPWlbc10sbDtyZXR1cm4gYTxvJiYobD1vLG89YSxhPWwsbD1yLHI9cyxzPWwpLGw9SmkobyxhLGUpLGw+MD8obz1NYXRoLmZsb29yKG8vbCkqbCxhPU1hdGguY2VpbChhL2wpKmwsbD1KaShvLGEsZSkpOmw8MCYmKG89TWF0aC5jZWlsKG8qbCkvbCxhPU1hdGguZmxvb3IoYSpsKS9sLGw9SmkobyxhLGUpKSxsPjA/KGlbcl09TWF0aC5mbG9vcihvL2wpKmwsaVtzXT1NYXRoLmNlaWwoYS9sKSpsLHQoaSkpOmw8MCYmKGlbcl09TWF0aC5jZWlsKG8qbCkvbCxpW3NdPU1hdGguZmxvb3IoYSpsKS9sLHQoaSkpLG59LG59ZnVuY3Rpb24gaXIoKXt2YXIgbj1FcyhEZSxEZSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLGlyKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksTWkobil9ZnVuY3Rpb24gbGEobix0KXtuPW4uc2xpY2UoKTt2YXIgZT0wLGk9bi5sZW5ndGgtMSxyPW5bZV0scz1uW2ldLG87cmV0dXJuIHM8ciYmKG89ZSxlPWksaT1vLG89cixyPXMscz1vKSxuW2VdPXQuZmxvb3IociksbltpXT10LmNlaWwocyksbn1mdW5jdGlvbiBicChuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gU3Aobil7cmV0dXJuIE1hdGguZXhwKG4pfWZ1bmN0aW9uIGx2KG4pe3JldHVybi1NYXRoLmxvZygtbil9ZnVuY3Rpb24gY3Yobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiB1dihuKXtyZXR1cm4gaXNGaW5pdGUobik/KygiMWUiK24pOm48MD8wOm59ZnVuY3Rpb24gaHYobil7cmV0dXJuIG49PT0xMD91djpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX1mdW5jdGlvbiBmdihuKXtyZXR1cm4gbj09PU1hdGguRT9NYXRoLmxvZzpuPT09MTAmJk1hdGgubG9nMTB8fG49PT0yJiZNYXRoLmxvZzJ8fChuPU1hdGgubG9nKG4pLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9ufSl9ZnVuY3Rpb24gRXAobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1uKC10KX19ZnVuY3Rpb24gU2Mobil7dmFyIHQ9bihicCxTcCksZT10LmRvbWFpbixpPTEwLHIscztmdW5jdGlvbiBvKCl7cmV0dXJuIHI9ZnYoaSkscz1odihpKSxlKClbMF08MD8ocj1FcChyKSxzPUVwKHMpLG4obHYsY3YpKTpuKGJwLFNwKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2EsbygpKTppfSx0LmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShhKSxvKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbihhKXt2YXIgbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXSxoOyhoPXU8YykmJihmPWMsYz11LHU9Zik7dmFyIGY9cihjKSxkPXIodSksZyx4LHYsbT1hPT1udWxsPzEwOithLHA9W107aWYoIShpJTEpJiZkLWY8bSl7aWYoZj1NYXRoLnJvdW5kKGYpLTEsZD1NYXRoLnJvdW5kKGQpKzEsYz4wKXtmb3IoO2Y8ZDsrK2YpZm9yKHg9MSxnPXMoZik7eDxpOysreClpZih2PWcqeCwhKHY8Yykpe2lmKHY+dSlicmVhaztwLnB1c2godil9fWVsc2UgZm9yKDtmPGQ7KytmKWZvcih4PWktMSxnPXMoZik7eD49MTstLXgpaWYodj1nKngsISh2PGMpKXtpZih2PnUpYnJlYWs7cC5wdXNoKHYpfX1lbHNlIHA9cnMoZixkLE1hdGgubWluKGQtZixtKSkubWFwKHMpO3JldHVybiBoP3AucmV2ZXJzZSgpOnB9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihhLGwpe2lmKGw9PW51bGwmJihsPWk9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBsIT0iZnVuY3Rpb24iJiYobD1PZShsKSksYT09PTEvMClyZXR1cm4gbDthPT1udWxsJiYoYT0xMCk7dmFyIGM9TWF0aC5tYXgoMSxpKmEvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBoPXUvcyhNYXRoLnJvdW5kKHIodSkpKTtyZXR1cm4gaCppPGktLjUmJihoKj1pKSxoPD1jP2wodSk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShsYShlKCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguZmxvb3IocihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguY2VpbChyKGEpKSl9fSkpfSx0fWZ1bmN0aW9uIFRzKCl7dmFyIG49U2MoU3MoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLFRzKCkpLmJhc2Uobi5iYXNlKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksbn12YXIgRWM9bmV3IERhdGUsVGM9bmV3IERhdGU7ZnVuY3Rpb24gWXQobix0LGUsaSl7ZnVuY3Rpb24gcihzKXtyZXR1cm4gbihzPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtzKSksc31yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihzKXtyZXR1cm4gbihzPW5ldyBEYXRlKCtzKSksc30sci5jZWlsPWZ1bmN0aW9uKHMpe3JldHVybiBuKHM9bmV3IERhdGUocy0xKSksdChzLDEpLG4ocyksc30sci5yb3VuZD1mdW5jdGlvbihzKXt2YXIgbz1yKHMpLGE9ci5jZWlsKHMpO3JldHVybiBzLW88YS1zP286YX0sci5vZmZzZXQ9ZnVuY3Rpb24ocyxvKXtyZXR1cm4gdChzPW5ldyBEYXRlKCtzKSxvPT1udWxsPzE6TWF0aC5mbG9vcihvKSksc30sci5yYW5nZT1mdW5jdGlvbihzLG8sYSl7dmFyIGw9W10sYztpZihzPXIuY2VpbChzKSxhPWE9PW51bGw/MTpNYXRoLmZsb29yKGEpLCEoczxvKXx8IShhPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtzKSksdChzLGEpLG4ocyk7d2hpbGUoYzxzJiZzPG8pO3JldHVybiBsfSxyLmZpbHRlcj1mdW5jdGlvbihzKXtyZXR1cm4gWXQoZnVuY3Rpb24obyl7aWYobz49bylmb3IoO24obyksIXMobyk7KW8uc2V0VGltZShvLTEpfSxmdW5jdGlvbihvLGEpe2lmKG8+PW8paWYoYTwwKWZvcig7KythPD0wOylmb3IoO3QobywtMSksIXMobyk7KTtlbHNlIGZvcig7LS1hPj0wOylmb3IoO3QobywxKSwhcyhvKTspO30pfSxlJiYoci5jb3VudD1mdW5jdGlvbihzLG8pe3JldHVybiBFYy5zZXRUaW1lKCtzKSxUYy5zZXRUaW1lKCtvKSxuKEVjKSxuKFRjKSxNYXRoLmZsb29yKGUoRWMsVGMpKX0sci5ldmVyeT1mdW5jdGlvbihzKXtyZXR1cm4gcz1NYXRoLmZsb29yKHMpLCFpc0Zpbml0ZShzKXx8IShzPjApP251bGw6cz4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24obyl7cmV0dXJuIGkobyklcz09PTB9OmZ1bmN0aW9uKG8pe3JldHVybiByLmNvdW50KDAsbyklcz09PTB9KTpyfSkscn12YXIgY2E9WXQoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LW59KTtjYS5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLCFpc0Zpbml0ZShuKXx8IShuPjApP251bGw6bj4xP1l0KGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbikqbil9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2Uqbil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbn0pOmNhfTt2YXIgdWE9Y2EsVHA9Y2EucmFuZ2U7dmFyIGJpPTFlMyxTbj02ZTQsQWM9MzZlNSxoYT04NjRlNSxmYT02MDQ4ZTU7dmFyIEFwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KmJpKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9iaX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDU2Vjb25kcygpfSksZGE9QXAsQ3A9QXAucmFuZ2U7dmFyIFJwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlNuKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9Tbn0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksQ2M9UnAsZHY9UnAucmFuZ2U7dmFyIExwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmktbi5nZXRNaW51dGVzKCkqU24pfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KkFjKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9BY30sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLFJjPUxwLHB2PUxwLnJhbmdlO3ZhciBQcD1ZdChmdW5jdGlvbihuKXtuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktbi5nZXRUaW1lem9uZU9mZnNldCgpKSpTbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSkscnI9UHAsbXY9UHAucmFuZ2U7ZnVuY3Rpb24gU2kobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LW4pJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqU24pL2ZhfSl9dmFyIEVpPVNpKDApLHNyPVNpKDEpLERwPVNpKDIpLElwPVNpKDMpLEduPVNpKDQpLE5wPVNpKDUpLEZwPVNpKDYpLHpwPUVpLnJhbmdlLGd2PXNyLnJhbmdlLHh2PURwLnJhbmdlLHl2PUlwLnJhbmdlLHZ2PUduLnJhbmdlLF92PU5wLnJhbmdlLHd2PUZwLnJhbmdlO3ZhciBVcD1ZdChmdW5jdGlvbihuKXtuLnNldERhdGUoMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSsodC5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSxMYz1VcCxNdj1VcC5yYW5nZTt2YXIgUGM9WXQoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtQYy5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4haXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKXx8IShuPjApP251bGw6WXQoZnVuY3Rpb24odCl7dC5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0RnVsbFllYXIoKS9uKSpuKSx0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKm4pfSl9O3ZhciBFbj1QYyxidj1QYy5yYW5nZTt2YXIgQnA9WXQoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSkscGE9QnAsU3Y9QnAucmFuZ2U7ZnVuY3Rpb24gVGkobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LW4pJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvZmF9KX12YXIgQXM9VGkoMCksb3I9VGkoMSksT3A9VGkoMiksa3A9VGkoMyksV249VGkoNCksSHA9VGkoNSksVnA9VGkoNiksR3A9QXMucmFuZ2UsRXY9b3IucmFuZ2UsVHY9T3AucmFuZ2UsQXY9a3AucmFuZ2UsQ3Y9V24ucmFuZ2UsUnY9SHAucmFuZ2UsTHY9VnAucmFuZ2U7dmFyIERjPVl0KGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSk7RGMuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIWlzRmluaXRlKG49TWF0aC5mbG9vcihuKSl8fCEobj4wKT9udWxsOll0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvbikqbiksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSpuKX0pfTt2YXIgQWk9RGMsUHY9RGMucmFuZ2U7ZnVuY3Rpb24gSWMobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpfWZ1bmN0aW9uIE5jKG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpfWZ1bmN0aW9uIENzKG4sdCxlKXtyZXR1cm57eTpuLG06dCxkOmUsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBGYyhuKXt2YXIgdD1uLmRhdGVUaW1lLGU9bi5kYXRlLGk9bi50aW1lLHI9bi5wZXJpb2RzLHM9bi5kYXlzLG89bi5zaG9ydERheXMsYT1uLm1vbnRocyxsPW4uc2hvcnRNb250aHMsYz1ScyhyKSx1PUxzKHIpLGg9UnMocyksZj1McyhzKSxkPVJzKG8pLGc9THMobykseD1ScyhhKSx2PUxzKGEpLG09UnMobCkscD1McyhsKSxiPXthOlYsQTpRLGI6YXQsQjpHLGM6bnVsbCxkOkpwLGU6SnAsZjp0XyxnOnVfLEc6Zl8sSDpLdixJOlF2LGo6anYsTDp0bSxtOmVfLE06bl8scDokLHE6bHQsUTpRcCxzOmpwLFM6aV8sdTpyXyxVOnNfLFY6b18sdzphXyxXOmxfLHg6bnVsbCxYOm51bGwseTpjXyxZOmhfLFo6ZF8sIiUiOktwfSxfPXthOmR0LEE6eHQsYjprLEI6RnQsYzpudWxsLGQ6JHAsZTokcCxmOnhfLGc6QV8sRzpSXyxIOnBfLEk6bV8sajpnXyxMOm5tLG06eV8sTTp2XyxwOm10LHE6U3QsUTpRcCxzOmpwLFM6X18sdTp3XyxVOk1fLFY6Yl8sdzpTXyxXOkVfLHg6bnVsbCxYOm51bGwseTpUXyxZOkNfLFo6TF8sIiUiOktwfSxTPXthOlgsQTp5LGI6UixCOkQsYzpGLGQ6WXAsZTpZcCxmOll2LGc6WHAsRzpxcCxIOlpwLEk6WnAsajpHdixMOlh2LG06VnYsTTpXdixwOnR0LHE6SHYsUTpKdixzOiR2LFM6cXYsdTp6dixVOlV2LFY6QnYsdzpGdixXOk92LHg6eixYOk4seTpYcCxZOnFwLFo6a3YsIiUiOlp2fTtiLng9TChlLGIpLGIuWD1MKGksYiksYi5jPUwodCxiKSxfLng9TChlLF8pLF8uWD1MKGksXyksXy5jPUwodCxfKTtmdW5jdGlvbiBMKEIsc3Qpe3JldHVybiBmdW5jdGlvbihudCl7dmFyIEM9W10saj0tMSxKPTAsaXQ9Qi5sZW5ndGgsZXQsdnQsYnQ7Zm9yKG50IGluc3RhbmNlb2YgRGF0ZXx8KG50PW5ldyBEYXRlKCtudCkpOysrajxpdDspQi5jaGFyQ29kZUF0KGopPT09MzcmJihDLnB1c2goQi5zbGljZShKLGopKSwodnQ9V3BbZXQ9Qi5jaGFyQXQoKytqKV0pIT1udWxsP2V0PUIuY2hhckF0KCsraik6dnQ9ZXQ9PT0iZSI/IiAiOiIwIiwoYnQ9c3RbZXRdKSYmKGV0PWJ0KG50LHZ0KSksQy5wdXNoKGV0KSxKPWorMSk7cmV0dXJuIEMucHVzaChCLnNsaWNlKEosaikpLEMuam9pbigiIil9fWZ1bmN0aW9uIEEoQixzdCl7cmV0dXJuIGZ1bmN0aW9uKG50KXt2YXIgQz1DcygxOTAwLHZvaWQgMCwxKSxqPUgoQyxCLG50Kz0iIiwwKSxKLGl0O2lmKGohPW50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBDKXJldHVybiBuZXcgRGF0ZShDLlEpO2lmKCJzImluIEMpcmV0dXJuIG5ldyBEYXRlKEMucyoxZTMrKCJMImluIEM/Qy5MOjApKTtpZihzdCYmISgiWiJpbiBDKSYmKEMuWj0wKSwicCJpbiBDJiYoQy5IPUMuSCUxMitDLnAqMTIpLEMubT09PXZvaWQgMCYmKEMubT0icSJpbiBDP0MucTowKSwiViJpbiBDKXtpZihDLlY8MXx8Qy5WPjUzKXJldHVybiBudWxsOyJ3ImluIEN8fChDLnc9MSksIloiaW4gQz8oSj1OYyhDcyhDLnksMCwxKSksaXQ9Si5nZXRVVENEYXkoKSxKPWl0PjR8fGl0PT09MD9vci5jZWlsKEopOm9yKEopLEo9cGEub2Zmc2V0KEosKEMuVi0xKSo3KSxDLnk9Si5nZXRVVENGdWxsWWVhcigpLEMubT1KLmdldFVUQ01vbnRoKCksQy5kPUouZ2V0VVRDRGF0ZSgpKyhDLncrNiklNyk6KEo9SWMoQ3MoQy55LDAsMSkpLGl0PUouZ2V0RGF5KCksSj1pdD40fHxpdD09PTA/c3IuY2VpbChKKTpzcihKKSxKPXJyLm9mZnNldChKLChDLlYtMSkqNyksQy55PUouZ2V0RnVsbFllYXIoKSxDLm09Si5nZXRNb250aCgpLEMuZD1KLmdldERhdGUoKSsoQy53KzYpJTcpfWVsc2UoIlciaW4gQ3x8IlUiaW4gQykmJigidyJpbiBDfHwoQy53PSJ1ImluIEM/Qy51JTc6IlciaW4gQz8xOjApLGl0PSJaImluIEM/TmMoQ3MoQy55LDAsMSkpLmdldFVUQ0RheSgpOkljKENzKEMueSwwLDEpKS5nZXREYXkoKSxDLm09MCxDLmQ9IlciaW4gQz8oQy53KzYpJTcrQy5XKjctKGl0KzUpJTc6Qy53K0MuVSo3LShpdCs2KSU3KTtyZXR1cm4iWiJpbiBDPyhDLkgrPUMuWi8xMDB8MCxDLk0rPUMuWiUxMDAsTmMoQykpOkljKEMpfX1mdW5jdGlvbiBIKEIsc3QsbnQsQyl7Zm9yKHZhciBqPTAsSj1zdC5sZW5ndGgsaXQ9bnQubGVuZ3RoLGV0LHZ0O2o8Sjspe2lmKEM+PWl0KXJldHVybi0xO2lmKGV0PXN0LmNoYXJDb2RlQXQoaisrKSxldD09PTM3KXtpZihldD1zdC5jaGFyQXQoaisrKSx2dD1TW2V0IGluIFdwP3N0LmNoYXJBdChqKyspOmV0XSwhdnR8fChDPXZ0KEIsbnQsQykpPDApcmV0dXJuLTF9ZWxzZSBpZihldCE9bnQuY2hhckNvZGVBdChDKyspKXJldHVybi0xfXJldHVybiBDfWZ1bmN0aW9uIHR0KEIsc3QsbnQpe3ZhciBDPWMuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnA9dVtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYKEIsc3QsbnQpe3ZhciBDPWQuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9Z1tDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KEIsc3QsbnQpe3ZhciBDPWguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9ZltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKEIsc3QsbnQpe3ZhciBDPW0uZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09cFtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKEIsc3QsbnQpe3ZhciBDPXguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09dltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKEIsc3QsbnQpe3JldHVybiBIKEIsdCxzdCxudCl9ZnVuY3Rpb24geihCLHN0LG50KXtyZXR1cm4gSChCLGUsc3QsbnQpfWZ1bmN0aW9uIE4oQixzdCxudCl7cmV0dXJuIEgoQixpLHN0LG50KX1mdW5jdGlvbiBWKEIpe3JldHVybiBvW0IuZ2V0RGF5KCldfWZ1bmN0aW9uIFEoQil7cmV0dXJuIHNbQi5nZXREYXkoKV19ZnVuY3Rpb24gYXQoQil7cmV0dXJuIGxbQi5nZXRNb250aCgpXX1mdW5jdGlvbiBHKEIpe3JldHVybiBhW0IuZ2V0TW9udGgoKV19ZnVuY3Rpb24gJChCKXtyZXR1cm4gclsrKEIuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBsdChCKXtyZXR1cm4gMSt+fihCLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gZHQoQil7cmV0dXJuIG9bQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24geHQoQil7cmV0dXJuIHNbQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24gayhCKXtyZXR1cm4gbFtCLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEZ0KEIpe3JldHVybiBhW0IuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbXQoQil7cmV0dXJuIHJbKyhCLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gU3QoQil7cmV0dXJuIDErfn4oQi5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsYik7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSxwYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMSk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsXyk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNQYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMCk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fX19dmFyIFdwPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHBlPS9eXHMqXGQrLyxEdj0vXiUvLEl2PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBCdChuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLHM9ci5sZW5ndGg7cmV0dXJuIGkrKHM8ZT9uZXcgQXJyYXkoZS1zKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBOdihuKXtyZXR1cm4gbi5yZXBsYWNlKEl2LCJcXCQmIil9ZnVuY3Rpb24gUnMobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKE52KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gTHMobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gRnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24genYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVXYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlY9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT3Yobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcXAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrdihuLHQsZSl7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLlo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEh2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPWlbMF0qMy0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5tPWlbMF0tMSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZcChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBacChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uSD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uTT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4uTD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadihuLHQsZSl7dmFyIGk9RHYuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/ZStpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBKdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gaT8obi5RPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnAobix0KXtyZXR1cm4gQnQobi5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBLdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBRdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24ganYobix0KXtyZXR1cm4gQnQoMStyci5jb3VudChFbihuKSxuKSx0LDMpfWZ1bmN0aW9uIHRtKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiB0XyhuLHQpe3JldHVybiB0bShuLHQpKyIwMDAifWZ1bmN0aW9uIGVfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gbl8obix0KXtyZXR1cm4gQnQobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBpXyhuLHQpe3JldHVybiBCdChuLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHJfKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBzXyhuLHQpe3JldHVybiBCdChFaS5jb3VudChFbihuKS0xLG4pLHQsMil9ZnVuY3Rpb24gZW0obil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/R24obik6R24uY2VpbChuKX1mdW5jdGlvbiBvXyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KEduLmNvdW50KEVuKG4pLG4pKyhFbihuKS5nZXREYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gYV8obil7cmV0dXJuIG4uZ2V0RGF5KCl9ZnVuY3Rpb24gbF8obix0KXtyZXR1cm4gQnQoc3IuY291bnQoRW4obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGNfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB1XyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBoXyhuLHQpe3JldHVybiBCdChuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gZl8obix0KXt2YXIgZT1uLmdldERheSgpO3JldHVybiBuPWU+PTR8fGU9PT0wP0duKG4pOkduLmNlaWwobiksQnQobi5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGRfKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnQodC82MHwwLCIwIiwyKStCdCh0JTYwLCIwIiwyKX1mdW5jdGlvbiAkcChuLHQpe3JldHVybiBCdChuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHBfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIG1fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBnXyhuLHQpe3JldHVybiBCdCgxK3BhLmNvdW50KEFpKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbm0obix0KXtyZXR1cm4gQnQobi5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHhfKG4sdCl7cmV0dXJuIG5tKG4sdCkrIjAwMCJ9ZnVuY3Rpb24geV8obix0KXtyZXR1cm4gQnQobi5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiB2XyhuLHQpe3JldHVybiBCdChuLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIF9fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gd18obil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1fKG4sdCl7cmV0dXJuIEJ0KEFzLmNvdW50KEFpKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBpbShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHx0PT09MD9XbihuKTpXbi5jZWlsKG4pfWZ1bmN0aW9uIGJfKG4sdCl7cmV0dXJuIG49aW0obiksQnQoV24uY291bnQoQWkobiksbikrKEFpKG4pLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBTXyhuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBFXyhuLHQpe3JldHVybiBCdChvci5jb3VudChBaShuKS0xLG4pLHQsMil9ZnVuY3Rpb24gVF8obix0KXtyZXR1cm4gQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEFfKG4sdCl7cmV0dXJuIG49aW0obiksQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIENfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBSXyhuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIG49ZT49NHx8ZT09PTA/V24obik6V24uY2VpbChuKSxCdChuLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gTF8oKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEtwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFFwKG4pe3JldHVybitufWZ1bmN0aW9uIGpwKG4pe3JldHVybiBNYXRoLmZsb29yKCtuLzFlMyl9dmFyIGFyLG1hLHJtLHNtLG9tO3pjKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gemMobil7cmV0dXJuIGFyPUZjKG4pLG1hPWFyLmZvcm1hdCxybT1hci5wYXJzZSxzbT1hci51dGNGb3JtYXQsb209YXIudXRjUGFyc2UsYXJ9dmFyIFBzPTFlMyxEcz1Qcyo2MCxJcz1Ecyo2MCxOcz1JcyoyNCxQXz1Ocyo3LGFtPU5zKjMwLFVjPU5zKjM2NTtmdW5jdGlvbiBEXyhuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24gSV8obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlPytuOituZXcgRGF0ZSgrbil9ZnVuY3Rpb24gQmMobix0LGUsaSxyLHMsbyxhLGwpe3ZhciBjPUVzKERlLERlKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxkPWwoIjolUyIpLGc9bCgiJUk6JU0iKSx4PWwoIiVJICVwIiksdj1sKCIlYSAlZCIpLG09bCgiJWIgJWQiKSxwPWwoIiVCIiksYj1sKCIlWSIpLF89W1tvLDEsUHNdLFtvLDUsNSpQc10sW28sMTUsMTUqUHNdLFtvLDMwLDMwKlBzXSxbcywxLERzXSxbcyw1LDUqRHNdLFtzLDE1LDE1KkRzXSxbcywzMCwzMCpEc10sW3IsMSxJc10sW3IsMywzKklzXSxbciw2LDYqSXNdLFtyLDEyLDEyKklzXSxbaSwxLE5zXSxbaSwyLDIqTnNdLFtlLDEsUF9dLFt0LDEsYW1dLFt0LDMsMyphbV0sW24sMSxVY11dO2Z1bmN0aW9uIFMoQSl7cmV0dXJuKG8oQSk8QT9mOnMoQSk8QT9kOnIoQSk8QT9nOmkoQSk8QT94OnQoQSk8QT9lKEEpPEE/djptOm4oQSk8QT9wOmIpKEEpfWZ1bmN0aW9uIEwoQSxILHR0LFgpe2lmKEE9PW51bGwmJihBPTEwKSx0eXBlb2YgQT09Im51bWJlciIpe3ZhciB5PU1hdGguYWJzKHR0LUgpL0EsUj1pcyhmdW5jdGlvbihEKXtyZXR1cm4gRFsyXX0pLnJpZ2h0KF8seSk7Uj09PV8ubGVuZ3RoPyhYPV9uKEgvVWMsdHQvVWMsQSksQT1uKTpSPyhSPV9beS9fW1ItMV1bMl08X1tSXVsyXS95P1ItMTpSXSxYPVJbMV0sQT1SWzBdKTooWD1NYXRoLm1heChfbihILHR0LEEpLDEpLEE9YSl9cmV0dXJuIFg9PW51bGw/QTpBLmV2ZXJ5KFgpfXJldHVybiBjLmludmVydD1mdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUodShBKSl9LGMuZG9tYWluPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goYnMuY2FsbChBLElfKSk6aCgpLm1hcChEXyl9LGMudGlja3M9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpLFg9dHRbMF0seT10dFt0dC5sZW5ndGgtMV0sUj15PFgsRDtyZXR1cm4gUiYmKEQ9WCxYPXkseT1EKSxEPUwoQSxYLHksSCksRD1EP0QucmFuZ2UoWCx5KzEpOltdLFI/RC5yZXZlcnNlKCk6RH0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKEEsSCl7cmV0dXJuIEg9PW51bGw/UzpsKEgpfSxjLm5pY2U9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpO3JldHVybihBPUwoQSx0dFswXSx0dFt0dC5sZW5ndGgtMV0sSCkpP2gobGEodHQsQSkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBWbihjLEJjKG4sdCxlLGkscixzLG8sYSxsKSl9LGN9ZnVuY3Rpb24gRnMoKXtyZXR1cm4gUGUuYXBwbHkoQmMoRW4sTGMsRWkscnIsUmMsQ2MsZGEsdWEsbWEpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE9jKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gbHIobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1PYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9jLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y20odGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspaT1lLlUsZT09PWkuTD8ocj1pLlIsciYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoenModGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxpLkM9ITAsVXModGhpcyxpKSkpOihyPWkuTCxyJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLkwmJihVcyh0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLGkuQz0hMCx6cyh0aGlzLGkpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0PW4uVSxlLGk9bi5MLHI9bi5SLHMsbztpZihpP3I/cz1jbShyKTpzPWk6cz1yLHQ/dC5MPT09bj90Lkw9czp0LlI9czp0aGlzLl89cyxpJiZyPyhvPXMuQyxzLkM9bi5DLHMuTD1pLGkuVT1zLHMhPT1yPyh0PXMuVSxzLlU9bi5VLG49cy5SLHQuTD1uLHMuUj1yLHIuVT1zKToocy5VPXQsdD1zLG49cy5SKSk6KG89bi5DLG49cyksbiYmKG4uVT10KSwhbyl7aWYobiYmbi5DKXtuLkM9ITE7cmV0dXJufWRve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoZT10LlIsZS5DJiYoZS5DPSExLHQuQz0hMCx6cyh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCxVcyh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSx6cyh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9dC5MLGUuQyYmKGUuQz0hMSx0LkM9ITAsVXModGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsenModGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsVXModGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O2Z1bmN0aW9uIHpzKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiBVcyhuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY20obil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufXZhciBrYz1PYztmdW5jdGlvbiBjcihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxzPW1lLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJkJzKHIsbix0LGUpLGkmJkJzKHIsdCxuLGkpLENlW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLENlW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLHJ9ZnVuY3Rpb24gdXIobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIEJzKG4sdCxlLGkpeyFuWzBdJiYhblsxXT8oblswXT1pLG4ubGVmdD10LG4ucmlnaHQ9ZSk6bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pfWZ1bmN0aW9uIHpfKG4sdCxlLGkscil7dmFyIHM9blswXSxvPW5bMV0sYT1zWzBdLGw9c1sxXSxjPW9bMF0sdT1vWzFdLGg9MCxmPTEsZD1jLWEsZz11LWwseDtpZih4PXQtYSwhKCFkJiZ4PjApKXtpZih4Lz1kLGQ8MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWVsc2UgaWYoZD4wKXtpZih4PmYpcmV0dXJuO3g+aCYmKGg9eCl9aWYoeD1pLWEsISghZCYmeDwwKSl7aWYoeC89ZCxkPDApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1lbHNlIGlmKGQ+MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWlmKHg9ZS1sLCEoIWcmJng+MCkpe2lmKHgvPWcsZzwwKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9ZWxzZSBpZihnPjApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1pZih4PXItbCwhKCFnJiZ4PDApKXtpZih4Lz1nLGc8MCl7aWYoeD5mKXJldHVybjt4PmgmJihoPXgpfWVsc2UgaWYoZz4wKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihuWzBdPVthK2gqZCxsK2gqZ10pLGY8MSYmKG5bMV09W2ErZipkLGwrZipnXSkpLCEwfX19fX1mdW5jdGlvbiBVXyhuLHQsZSxpLHIpe3ZhciBzPW5bMV07aWYocylyZXR1cm4hMDt2YXIgbz1uWzBdLGE9bi5sZWZ0LGw9bi5yaWdodCxjPWFbMF0sdT1hWzFdLGg9bFswXSxmPWxbMV0sZD0oYytoKS8yLGc9KHUrZikvMix4LHY7aWYoZj09PXUpe2lmKGQ8dHx8ZD49aSlyZXR1cm47aWYoYz5oKXtpZighbylvPVtkLGVdO2Vsc2UgaWYob1sxXT49cilyZXR1cm47cz1bZCxyXX1lbHNle2lmKCFvKW89W2Qscl07ZWxzZSBpZihvWzFdPGUpcmV0dXJuO3M9W2QsZV19fWVsc2UgaWYoeD0oYy1oKS8oZi11KSx2PWcteCpkLHg8LTF8fHg+MSlpZihjPmgpe2lmKCFvKW89WyhlLXYpL3gsZV07ZWxzZSBpZihvWzFdPj1yKXJldHVybjtzPVsoci12KS94LHJdfWVsc2V7aWYoIW8pbz1bKHItdikveCxyXTtlbHNlIGlmKG9bMV08ZSlyZXR1cm47cz1bKGUtdikveCxlXX1lbHNlIGlmKHU8Zil7aWYoIW8pbz1bdCx4KnQrdl07ZWxzZSBpZihvWzBdPj1pKXJldHVybjtzPVtpLHgqaSt2XX1lbHNle2lmKCFvKW89W2kseCppK3ZdO2Vsc2UgaWYob1swXTx0KXJldHVybjtzPVt0LHgqdCt2XX1yZXR1cm4gblswXT1vLG5bMV09cywhMH1mdW5jdGlvbiB1bShuLHQsZSxpKXtmb3IodmFyIHI9bWUubGVuZ3RoLHM7ci0tOykoIVVfKHM9bWVbcl0sbix0LGUsaSl8fCF6XyhzLG4sdCxlLGkpfHwhKE1hdGguYWJzKHNbMF1bMF0tc1sxXVswXSk+WHR8fE1hdGguYWJzKHNbMF1bMV0tc1sxXVsxXSk+WHQpKSYmZGVsZXRlIG1lW3JdfWZ1bmN0aW9uIGhtKG4pe3JldHVybiBDZVtuLmluZGV4XT17c2l0ZTpuLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gQl8obix0KXt2YXIgZT1uLnNpdGUsaT10LmxlZnQscj10LnJpZ2h0O3JldHVybiBlPT09ciYmKHI9aSxpPWUpLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKTooZT09PWk/KGk9dFsxXSxyPXRbMF0pOihpPXRbMF0scj10WzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBIYyhuLHQpe3JldHVybiB0WysodC5sZWZ0IT09bi5zaXRlKV19ZnVuY3Rpb24gT18obix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfWZ1bmN0aW9uIGZtKCl7Zm9yKHZhciBuPTAsdD1DZS5sZW5ndGgsZSxpLHIscztuPHQ7KytuKWlmKChlPUNlW25dKSYmKHM9KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBvPW5ldyBBcnJheShzKSxhPW5ldyBBcnJheShzKTtmb3Iocj0wO3I8czsrK3Ipb1tyXT1yLGFbcl09Ql8oZSxtZVtpW3JdXSk7Zm9yKG8uc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBhW2NdLWFbbF19KSxyPTA7cjxzOysrcilhW3JdPWlbb1tyXV07Zm9yKHI9MDtyPHM7KytyKWlbcl09YVtyXX19ZnVuY3Rpb24gZG0obix0LGUsaSl7dmFyIHI9Q2UubGVuZ3RoLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2LG09ITA7Zm9yKHM9MDtzPHI7KytzKWlmKG89Q2Vbc10pe2ZvcihhPW8uc2l0ZSxjPW8uaGFsZmVkZ2VzLGw9Yy5sZW5ndGg7bC0tOyltZVtjW2xdXXx8Yy5zcGxpY2UobCwxKTtmb3IobD0wLHU9Yy5sZW5ndGg7bDx1OylnPU9fKG8sbWVbY1tsXV0pLHg9Z1swXSx2PWdbMV0saD1IYyhvLG1lW2NbKytsJXVdXSksZj1oWzBdLGQ9aFsxXSwoTWF0aC5hYnMoeC1mKT5YdHx8TWF0aC5hYnModi1kKT5YdCkmJihjLnNwbGljZShsLDAsbWUucHVzaCh1cihhLGcsTWF0aC5hYnMoeC1uKTxYdCYmaS12Plh0P1tuLE1hdGguYWJzKGYtbik8WHQ/ZDppXTpNYXRoLmFicyh2LWkpPFh0JiZlLXg+WHQ/W01hdGguYWJzKGQtaSk8WHQ/ZjplLGldOk1hdGguYWJzKHgtZSk8WHQmJnYtdD5YdD9bZSxNYXRoLmFicyhmLWUpPFh0P2Q6dF06TWF0aC5hYnModi10KTxYdCYmeC1uPlh0P1tNYXRoLmFicyhkLXQpPFh0P2Y6bix0XTpudWxsKSktMSksKyt1KTt1JiYobT0hMSl9aWYobSl7dmFyIHAsYixfLFM9MS8wO2ZvcihzPTAsbT1udWxsO3M8cjsrK3MpKG89Q2Vbc10pJiYoYT1vLnNpdGUscD1hWzBdLW4sYj1hWzFdLXQsXz1wKnArYipiLF88UyYmKFM9XyxtPW8pKTtpZihtKXt2YXIgTD1bbix0XSxBPVtuLGldLEg9W2UsaV0sdHQ9W2UsdF07bS5oYWxmZWRnZXMucHVzaChtZS5wdXNoKHVyKGE9bS5zaXRlLEwsQSkpLTEsbWUucHVzaCh1cihhLEEsSCkpLTEsbWUucHVzaCh1cihhLEgsdHQpKS0xLG1lLnB1c2godXIoYSx0dCxMKSktMSl9fWZvcihzPTA7czxyOysrcykobz1DZVtzXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBDZVtzXSl9dmFyIHBtPVtdLGdhO2Z1bmN0aW9uIGtfKCl7bHIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIENpKG4pe3ZhciB0PW4uUCxlPW4uTjtpZighKCF0fHwhZSkpe3ZhciBpPXQuc2l0ZSxyPW4uc2l0ZSxzPWUuc2l0ZTtpZihpIT09cyl7dmFyIG89clswXSxhPXJbMV0sbD1pWzBdLW8sYz1pWzFdLWEsdT1zWzBdLW8saD1zWzFdLWEsZj0yKihsKmgtYyp1KTtpZighKGY+PS1tbSkpe3ZhciBkPWwqbCtjKmMsZz11KnUraCpoLHg9KGgqZC1jKmcpL2Ysdj0obCpnLXUqZCkvZixtPXBtLnBvcCgpfHxuZXcga187bS5hcmM9bixtLnNpdGU9cixtLng9eCtvLG0ueT0obS5jeT12K2EpK01hdGguc3FydCh4Kngrdip2KSxuLmNpcmNsZT1tO2Zvcih2YXIgcD1udWxsLGI9aHIuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3A9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7cD1iO2JyZWFrfWhyLmluc2VydChwLG0pLHB8fChnYT1tKX19fX1mdW5jdGlvbiBSaShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoZ2E9dC5OKSxoci5yZW1vdmUodCkscG0ucHVzaCh0KSxscih0KSxuLmNpcmNsZT1udWxsKX12YXIgeG09W107ZnVuY3Rpb24gSF8oKXtscih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gZ20obil7dmFyIHQ9eG0ucG9wKCl8fG5ldyBIXztyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBWYyhuKXtSaShuKSxMaS5yZW1vdmUobikseG0ucHVzaChuKSxscihuKX1mdW5jdGlvbiB5bShuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxpPXQuY3kscj1bZSxpXSxzPW4uUCxvPW4uTixhPVtuXTtWYyhuKTtmb3IodmFyIGw9cztsLmNpcmNsZSYmTWF0aC5hYnMoZS1sLmNpcmNsZS54KTxYdCYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8WHQ7KXM9bC5QLGEudW5zaGlmdChsKSxWYyhsKSxsPXM7YS51bnNoaWZ0KGwpLFJpKGwpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPFh0JiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTxYdDspbz1jLk4sYS5wdXNoKGMpLFZjKGMpLGM9bzthLnB1c2goYyksUmkoYyk7dmFyIHU9YS5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1hW2hdLGw9YVtoLTFdLEJzKGMuZWRnZSxsLnNpdGUsYy5zaXRlLHIpO2w9YVswXSxjPWFbdS0xXSxjLmVkZ2U9Y3IobC5zaXRlLGMuc2l0ZSxudWxsLHIpLENpKGwpLENpKGMpfWZ1bmN0aW9uIHZtKG4pe2Zvcih2YXIgdD1uWzBdLGU9blsxXSxpLHIscyxvLGE9TGkuXzthOylpZihzPV9tKGEsZSktdCxzPlh0KWE9YS5MO2Vsc2UgaWYobz10LVZfKGEsZSksbz5YdCl7aWYoIWEuUil7aT1hO2JyZWFrfWE9YS5SfWVsc2V7cz4tWHQ/KGk9YS5QLHI9YSk6bz4tWHQ/KGk9YSxyPWEuTik6aT1yPWE7YnJlYWt9aG0obik7dmFyIGw9Z20obik7aWYoTGkuaW5zZXJ0KGksbCksISghaSYmIXIpKXtpZihpPT09cil7UmkoaSkscj1nbShpLnNpdGUpLExpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSksQ2koaSksQ2kocik7cmV0dXJufWlmKCFyKXtsLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSk7cmV0dXJufVJpKGkpLFJpKHIpO3ZhciBjPWkuc2l0ZSx1PWNbMF0saD1jWzFdLGY9blswXS11LGQ9blsxXS1oLGc9ci5zaXRlLHg9Z1swXS11LHY9Z1sxXS1oLG09MiooZip2LWQqeCkscD1mKmYrZCpkLGI9eCp4K3YqdixfPVsodipwLWQqYikvbSt1LChmKmIteCpwKS9tK2hdO0JzKHIuZWRnZSxjLGcsXyksbC5lZGdlPWNyKGMsbixudWxsLF8pLHIuZWRnZT1jcihuLGcsbnVsbCxfKSxDaShpKSxDaShyKX19ZnVuY3Rpb24gX20obix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxzPXItdDtpZighcylyZXR1cm4gaTt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIgYT1lWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksaD0xL3MtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMityLXMvMikpKS9oK2k6KGkrYSkvMn1mdW5jdGlvbiBWXyhuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBfbShlLHQpO3ZhciBpPW4uc2l0ZTtyZXR1cm4gaVsxXT09PXQ/aVswXToxLzB9dmFyIFh0PTFlLTYsbW09MWUtMTIsTGksQ2UsaHIsbWU7ZnVuY3Rpb24gR18obix0LGUpe3JldHVybihuWzBdLWVbMF0pKih0WzFdLW5bMV0pLShuWzBdLXRbMF0pKihlWzFdLW5bMV0pfWZ1bmN0aW9uIFdfKG4sdCl7cmV0dXJuIHRbMV0tblsxXXx8dFswXS1uWzBdfWZ1bmN0aW9uIHhhKG4sdCl7dmFyIGU9bi5zb3J0KFdfKS5wb3AoKSxpLHIscztmb3IobWU9W10sQ2U9bmV3IEFycmF5KG4ubGVuZ3RoKSxMaT1uZXcga2MsaHI9bmV3IGtjOzspaWYocz1nYSxlJiYoIXN8fGVbMV08cy55fHxlWzFdPT09cy55JiZlWzBdPHMueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih2bShlKSxpPWVbMF0scj1lWzFdKSxlPW4ucG9wKCk7ZWxzZSBpZihzKXltKHMuYXJjKTtlbHNlIGJyZWFrO2lmKGZtKCksdCl7dmFyIG89K3RbMF1bMF0sYT0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dW0obyxhLGwsYyksZG0obyxhLGwsYyl9dGhpcy5lZGdlcz1tZSx0aGlzLmNlbGxzPUNlLExpPWhyPW1lPUNlPW51bGx9eGEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4YSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gSGModCxuW2ldKX0pO3JldHVybiBlLmRhdGE9dC5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKCEhKGE9KHM9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpZm9yKHZhciByPWUuc2l0ZSxzLG89LTEsYSxsLGM9dFtzW2EtMV1dLHU9Yy5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdDsrK288YTspbD11LGM9dFtzW29dXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQsbCYmdSYmaTxsLmluZGV4JiZpPHUuaW5kZXgmJkdfKHIsbCx1KTwwJiZuLnB1c2goW3IuZGF0YSxsLmRhdGEsdS5kYXRhXSl9KSxufSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5yaWdodH0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm57c291cmNlOm4ubGVmdC5kYXRhLHRhcmdldDpuLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24obix0LGUpe2Zvcih2YXIgaT10aGlzLHIscz1pLl9mb3VuZHx8MCxvPWkuY2VsbHMubGVuZ3RoLGE7IShhPWkuY2VsbHNbc10pOylpZigrK3M+PW8pcmV0dXJuIG51bGw7dmFyIGw9bi1hLnNpdGVbMF0sYz10LWEuc2l0ZVsxXSx1PWwqbCtjKmM7ZG8gYT1pLmNlbGxzW3I9c10scz1udWxsLGEuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIGY9aS5lZGdlc1toXSxkPWYubGVmdDtpZighKChkPT09YS5zaXRlfHwhZCkmJiEoZD1mLnJpZ2h0KSkpe3ZhciBnPW4tZFswXSx4PXQtZFsxXSx2PWcqZyt4Kng7djx1JiYodT12LHM9ZC5pbmRleCl9fSk7d2hpbGUocyE9PW51bGwpO3JldHVybiBpLl9mb3VuZD1yLGU9PW51bGx8fHU8PWUqZT9hLnNpdGU6bnVsbH19O2Z1bmN0aW9uIFBpKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1QaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBpLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09MT90aGlzOm5ldyBQaSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PT0wJnQ9PT0wP3RoaXM6bmV3IFBpKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIEdjPW5ldyBQaSgxLDAsMCk7V2MucHJvdG90eXBlPVBpLnByb3RvdHlwZTtmdW5jdGlvbiBXYyhuKXtmb3IoOyFuLl9fem9vbTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIEdjO3JldHVybiBuLl9fem9vbX12YXIgYm09MWU0LFNtPS4wMDEsRW09T2UoIi4yfmUiKSxxXz1PZSgiLjR+ciIpLHdtPU9lKCIsfiIpO2Z1bmN0aW9uIE1tKG4pe2lmKG49PT0wKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49Ym18fHQ8U20/RW0obik6cV8obil9dmFyIFhjPXtmb3JtYXRUaWNrOk1tLGZvcm1hdFNob3J0Ok1tLGZvcm1hdFJlYWRhYmxlKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1ibXx8dDxTbT9FbShuKTp3bShuKX0sZm9ybWF0TG9uZzp3bX0sc2s9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjR9KTt2YXIgb2s9T2UoIjAuM35zIiksYWs9T2UoIiwuM35mIik7dmFyIFhfPTFlMyxZXz02MCpYXyxaXz02MCpZXyxKXz0yNCpaXyxsaz0zNjUqSl8sY2s9T2UoIi40fiIpO3ZhciAkXz1GcygpLnRpY2tGb3JtYXQoKSxxYyxUbT17Zm9ybWF0VGljayhuKXtyZXR1cm4gJF8obmV3IERhdGUobikpfSxmb3JtYXRTaG9ydChuKXtyZXR1cm4gbmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcocWMse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0sZm9ybWF0UmVhZGFibGUobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSl9LGZvcm1hdExvbmcobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTtmdW5jdGlvbiBmcihuKXtzd2l0Y2gobil7Y2FzZSBvbi5MSU5FQVI6cmV0dXJuIG5ldyBZYztjYXNlIG9uLkxPRzEwOnJldHVybiBuZXcgWmM7Y2FzZSBvbi5USU1FOnJldHVybiBuZXcgSmM7ZGVmYXVsdDpsZXQgdD1uO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgS189LjA1LFljPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPVhjfXRyYW5zZm9ybSh0LGUsaSl7bGV0W3Isc109dCxvPXMtcixbYSxsXT1lLGM9bC1hO3JldHVybiBvPT09MD9hOmMvbyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiBlPT09MD9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1pcigpLHM9KGktZStOdW1iZXIuRVBTSUxPTikqS18sW28sYV09ci5kb21haW4oW2UtcyxpK3NdKS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW28sYV19dGlja3ModCxlKXtyZXR1cm4gaXIoKS5kb21haW4odCkudGlja3MoZSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxaYz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1YY310cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLGkpe2lmKGk8PTApcmV0dXJuIGVbMF07bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vO3JldHVybiBpPXRoaXMudHJhbnNmb3JtKGkpLGgvKHUrTnVtYmVyLkVQU0lMT04pKihpLWwpK299cmV2ZXJzZSh0LGUsaSl7bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKGktbykrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoZT5pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCByPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSkscz1NYXRoLm1heChpLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBpPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLHIqLjUpLHMqMl19dGlja3ModCxlKXtsZXQgaT10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxyPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLHM9VHMoKS5kb21haW4oW2kscl0pLnRpY2tzKGUpO3JldHVybiBzLmxlbmd0aD9zOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LEpjPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1GcygpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1UbX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX07ZnVuY3Rpb24gUV8obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fXZhciAkYz0hMTtpZihzZWxmLmhhc093blByb3BlcnR5KCJXZWJHTDJSZW5kZXJpbmdDb250ZXh0IikmJnNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50Iikpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciIsKCk9PnskYz0hMX0pO2xldCB0PW4uZ2V0Q29udGV4dCgid2ViZ2wyIik7JGM9Qm9vbGVhbih0KX1mdW5jdGlvbiBqXygpe3JldHVybiAkY31mdW5jdGlvbiB0dygpe2lmKCFzZWxmLmhhc093blByb3BlcnR5KCJPZmZzY3JlZW5DYW52YXMiKSlyZXR1cm4hMTtsZXQgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIik7cmV0dXJuIEJvb2xlYW4obil9ZnVuY3Rpb24gZXcobix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG53KG4sdCl7cmV0dXJuIG4ueFswXT09PXQueFswXSYmbi54WzFdPT09dC54WzFdJiZuLnlbMF09PT10LnlbMF0mJm4ueVsxXT09PXQueVsxXX12YXIgRGk9e2NvbnZlcnRSZWN0VG9FeHRlbnQ6UV8saXNXZWJHbDJTdXBwb3J0ZWQ6al8saXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dHcsYXJlUG9seWxpbmVzRXF1YWw6ZXcsYXJlRXh0ZW50c0VxdWFsOm53fTt2YXIgZHI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1mcihvbi5MSU5FQVIpLHRoaXMueVNjYWxlPWZyKG9uLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtsZXQgaT10LHI9RGkuY29udmVydFJlY3RUb0V4dGVudCh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoci54LFtpLngsaS54K2kud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoci55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W2kueStpLmhlaWdodCxpLnldOltpLnksaS55K2kuaGVpZ2h0XSxlWzFdKV19fTt2YXIgVG47KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KShUbnx8KFRuPXt9KSk7ZnVuY3Rpb24geWEobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpzLG9wYWNpdHk6b309aSxhPW47cmV0dXJuIWEmJiFzP251bGw6KGE9YSE9bnVsbD9hOnQoKSxhPWUoYSksYS5zdHlsZS5kaXNwbGF5PXM/IiI6Im5vbmUiLGEuc3R5bGUuc3Ryb2tlPXIsYS5zdHlsZS5vcGFjaXR5PVN0cmluZyhvIT1udWxsP286MSksYSl9dmFyIE9zPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3ZnPXR9Zmx1c2goKXt9b25SZXNpemUodCl7fWRlc3Ryb3lPYmplY3QodCl7dGhpcy5zdmcucmVtb3ZlQ2hpbGQodC5kb20pfXNldFVzZURhcmtNb2RlKHQpe31jcmVhdGVQYXRoRFN0cmluZyh0KXtpZighdC5sZW5ndGgpcmV0dXJuIiI7bGV0IGU9bmV3IEFycmF5KHQubGVuZ3RoLzIpO2VbMF09YE0ke3RbMF19LCR7dFsxXX1gO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGgvMjtpKyspZVtpXT1gTCR7dFtpKjJdfSwke3RbaSoyKzFdfWA7cmV0dXJuIGUuam9pbigiIil9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXtsZXQgcj15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7cy5zdHlsZS5maWxsPSJub25lIjtsZXQgbz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO3JldHVybiBzLnNldEF0dHJpYnV0ZSgiZCIsbyksdGhpcy5zdmcuYXBwZW5kQ2hpbGQocyksc30scz0+e2lmKCEodCE9bnVsbCYmdC5kYXRhKXx8IURpLmFyZVBvbHlsaW5lc0VxdWFsKGUsdD09bnVsbD92b2lkIDA6dC5kYXRhKSl7bGV0IG89dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtzLnNldEF0dHJpYnV0ZSgiZCIsbyl9cmV0dXJuIHN9LGkpO3JldHVybiByPT09bnVsbD9udWxsOihyLnN0eWxlLnN0cm9rZVdpZHRoPVN0cmluZyhpLndpZHRoKSx7ZG9tOnIsZGF0YTplfSl9Y3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0LGUsaSl7bGV0e3NpemU6cixjb2xvcjpzfT1pLG89cipNYXRoLnNxcnQoMykvMixhPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55K28vMyxlLngrci8yLGUueStvLzMsZS54LGUueS1vKjIvM10pLGw9eWEodD09bnVsbD92b2lkIDA6dC5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIGw9PT1udWxsP251bGw6KGwuc3R5bGUuZmlsbD1zLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOnN9PWksbz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtyZXR1cm4gYS5zdHlsZS5maWxsPXIsYS5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksYS5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksYS5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhzKSksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYSksYX0sYT0+KGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcocykpLGEpLGkpO3JldHVybiBvPT09bnVsbD9udWxsOntkb206byxkYXRhOmV9fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnMsY29sb3I6b309cixhPTIvTWF0aC5zcXJ0KDMpKnMsbD1uZXcgRmxvYXQzMkFycmF5KFtlLngtYS8yLGUueStzLzIsZS54LGUueS1zLzIsaS54LGkueS1zLzIsaS54K2EvMixpLnkrcy8yXSksYz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dS5jbGFzc0xpc3QuYWRkKCJ0cmFwZXpvaWQiKSx1LnN0eWxlLmZpbGw9Im5vbmUiO2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQodSksdX0sdT0+e2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdX0scik7cmV0dXJuIGM9PT1udWxsP251bGw6KGMuc3R5bGUuZmlsbD1vLHtkb206YyxkYXRhOmx9KX1kaXNwb3NlKCl7fX07dmFyICRoPSIxMzciO3ZhciBpdz0wLEFtPTEscnc9Mjt2YXIgbDA9MSxzdz0yLEpzPTMsZW89MCxoZT0xLEhyPTIsYzA9MTt2YXIgam49MCxLcz0xLENtPTIsUm09MyxMbT00LG93PTUsSXI9MTAwLGF3PTEwMSxsdz0xMDIsUG09MTAzLERtPTEwNCxjdz0yMDAsdXc9MjAxLGh3PTIwMixmdz0yMDMsdTA9MjA0LGgwPTIwNSxkdz0yMDYscHc9MjA3LG13PTIwOCxndz0yMDkseHc9MjEwLHl3PTAsdnc9MSxfdz0yLHp1PTMsd3c9NCxNdz01LGJ3PTYsU3c9NyxDbD0wLEV3PTEsVHc9Mix0aT0wLEF3PTEsQ3c9MixSdz0zLEx3PTQsUHc9NSxmMD0zMDAsQW89MzAxLENvPTMwMixVdT0zMDMsQnU9MzA0LFJsPTMwNixLaD0zMDcsT3U9MWUzLFZlPTEwMDEsa3U9MTAwMixmZT0xMDAzLEltPTEwMDQ7dmFyIE5tPTEwMDU7dmFyIGJlPTEwMDYsRHc9MTAwNzt2YXIgTGw9MTAwODt2YXIgZWk9MTAwOSxJdz0xMDEwLE53PTEwMTEsbm89MTAxMixGdz0xMDEzLFFhPTEwMTQsVWk9MTAxNSxVcj0xMDE2LHp3PTEwMTcsVXc9MTAxOCxCcj0xMDIwLEJ3PTEwMjEsUmU9MTAyMyxPdz0xMDI0LGt3PTEwMjUsT2k9MTAyNixWcj0xMDI3LEh3PTEwMjgsVnc9MTAyOSxHdz0xMDMwLFd3PTEwMzEscXc9MTAzMyxLYz0zMzc3NixRYz0zMzc3NyxqYz0zMzc3OCx0dT0zMzc3OSxGbT0zNTg0MCx6bT0zNTg0MSxVbT0zNTg0MixCbT0zNTg0MyxYdz0zNjE5NixPbT0zNzQ5MixrbT0zNzQ5NixIbT0zNzgwOCxWbT0zNzgwOSxHbT0zNzgxMCxXbT0zNzgxMSxxbT0zNzgxMixYbT0zNzgxMyxZbT0zNzgxNCxabT0zNzgxNSxKbT0zNzgxNiwkbT0zNzgxNyxLbT0zNzgxOCxRbT0zNzgxOSxqbT0zNzgyMCx0Zz0zNzgyMSxlZz0zNjQ5MixZdz0yMjAwLFp3PTIyMDEsSnc9MjIwMixqYT0yMzAwLHRsPTIzMDEsZXU9MjMwMixOcj0yNDAwLEZyPTI0MDEsZWw9MjQwMixRaD0yNTAwLGQwPTI1MDEsJHc9MDt2YXIgcmk9M2UzLCR0PTMwMDEsS3c9MzIwMCxRdz0zMjAxLHRzPTAsanc9MTt2YXIgbnU9NzY4MDt2YXIgdE09NTE5LGlvPTM1MDQ0LG5sPTM1MDQ4O3ZhciBuZz0iMzAwIGVzIixIdT0xMDM1LEluPWNsYXNze2FkZEV2ZW50TGlzdGVuZXIodCxlKXt0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDAmJih0aGlzLl9saXN0ZW5lcnM9e30pO2xldCBpPXRoaXMuX2xpc3RlbmVycztpW3RdPT09dm9pZCAwJiYoaVt0XT1bXSksaVt0XS5pbmRleE9mKGUpPT09LTEmJmlbdF0ucHVzaChlKX1oYXNFdmVudExpc3RlbmVyKHQsZSl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybiExO2xldCBpPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gaVt0XSE9PXZvaWQgMCYmaVt0XS5pbmRleE9mKGUpIT09LTF9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHIhPT12b2lkIDApe2xldCBzPXIuaW5kZXhPZihlKTtzIT09LTEmJnIuc3BsaWNlKHMsMSl9fWRpc3BhdGNoRXZlbnQodCl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZihpIT09dm9pZCAwKXt0LnRhcmdldD10aGlzO2xldCByPWkuc2xpY2UoMCk7Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXJbc10uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX0sdmU9W107Zm9yKGxldCBuPTA7bjwyNTY7bisrKXZlW25dPShuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNik7dmFyIGl1PU1hdGguUEkvMTgwLFZ1PTE4MC9NYXRoLlBJO2Z1bmN0aW9uIHRuKCl7bGV0IG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxlPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLGk9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKHZlW24mMjU1XSt2ZVtuPj44JjI1NV0rdmVbbj4+MTYmMjU1XSt2ZVtuPj4yNCYyNTVdKyItIit2ZVt0JjI1NV0rdmVbdD4+OCYyNTVdKyItIit2ZVt0Pj4xNiYxNXw2NF0rdmVbdD4+MjQmMjU1XSsiLSIrdmVbZSY2M3wxMjhdK3ZlW2U+PjgmMjU1XSsiLSIrdmVbZT4+MTYmMjU1XSt2ZVtlPj4yNCYyNTVdK3ZlW2kmMjU1XSt2ZVtpPj44JjI1NV0rdmVbaT4+MTYmMjU1XSt2ZVtpPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEllKG4sdCxlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX1mdW5jdGlvbiBlTShuLHQpe3JldHVybihuJXQrdCkldH1mdW5jdGlvbiBydShuLHQsZSl7cmV0dXJuKDEtZSkqbitlKnR9ZnVuY3Rpb24gaWcobil7cmV0dXJuKG4mbi0xKT09PTAmJm4hPT0wfWZ1bmN0aW9uIG5NKG4pe3JldHVybiBNYXRoLnBvdygyLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjIpKX12YXIgSz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLng9dCx0aGlzLnk9ZX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LGUpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbM10qaStyWzZdLHRoaXMueT1yWzFdKmUrcls0XSppK3JbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgZT10aGlzLngtdC54LGk9dGhpcy55LXQueTtyZXR1cm4gZSplK2kqaX1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSkscz10aGlzLngtdC54LG89dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PXMqaS1vKnIrdC54LHRoaXMueT1zKnIrbyppK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fTtLLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGRlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixzLG8sYSxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPXIsdVsyXT1hLHVbM109ZSx1WzRdPXMsdVs1XT1sLHVbNl09aSx1WzddPW8sdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxzPXRoaXMuZWxlbWVudHMsbz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLHU9aVs0XSxoPWlbN10sZj1pWzJdLGQ9aVs1XSxnPWlbOF0seD1yWzBdLHY9clszXSxtPXJbNl0scD1yWzFdLGI9cls0XSxfPXJbN10sUz1yWzJdLEw9cls1XSxBPXJbOF07cmV0dXJuIHNbMF09byp4K2EqcCtsKlMsc1szXT1vKnYrYSpiK2wqTCxzWzZdPW8qbSthKl8rbCpBLHNbMV09Yyp4K3UqcCtoKlMsc1s0XT1jKnYrdSpiK2gqTCxzWzddPWMqbSt1Kl8raCpBLHNbMl09Zip4K2QqcCtnKlMsc1s1XT1mKnYrZCpiK2cqTCxzWzhdPWYqbStkKl8rZypBLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzNdKj10LGVbNl0qPXQsZVsxXSo9dCxlWzRdKj10LGVbN10qPXQsZVsyXSo9dCxlWzVdKj10LGVbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIGUqbyp1LWUqYSpjLWkqcyp1K2kqYSpsK3IqcypjLXIqbypsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11Km8tYSpjLGY9YSpsLXUqcyxkPWMqcy1vKmwsZz1lKmgraSpmK3IqZDtpZihnPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCB4PTEvZztyZXR1cm4gdFswXT1oKngsdFsxXT0ocipjLXUqaSkqeCx0WzJdPShhKmktcipvKSp4LHRbM109Zip4LHRbNF09KHUqZS1yKmwpKngsdFs1XT0ocipzLWEqZSkqeCx0WzZdPWQqeCx0WzddPShpKmwtYyplKSp4LHRbOF09KG8qZS1pKnMpKngsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9ZVsxXSxlWzFdPWVbM10sZVszXT10LHQ9ZVsyXSxlWzJdPWVbNl0sZVs2XT10LHQ9ZVs1XSxlWzVdPWVbN10sZVs3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzNdLHRbMl09ZVs2XSx0WzNdPWVbMV0sdFs0XT1lWzRdLHRbNV09ZVs3XSx0WzZdPWVbMl0sdFs3XT1lWzVdLHRbOF09ZVs4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQsZSxpLHIscyxvLGEpe2xldCBsPU1hdGguY29zKHMpLGM9TWF0aC5zaW4ocyk7cmV0dXJuIHRoaXMuc2V0KGkqbCxpKmMsLWkqKGwqbytjKmEpK28rdCwtcipjLHIqbCwtciooLWMqbytsKmEpK2ErZSwwLDAsMSksdGhpc31zY2FsZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0qPXQsaVszXSo9dCxpWzZdKj10LGlbMV0qPWUsaVs0XSo9ZSxpWzddKj1lLHRoaXN9cm90YXRlKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCkscj10aGlzLmVsZW1lbnRzLHM9clswXSxvPXJbM10sYT1yWzZdLGw9clsxXSxjPXJbNF0sdT1yWzddO3JldHVybiByWzBdPWUqcytpKmwsclszXT1lKm8raSpjLHJbNl09ZSphK2kqdSxyWzFdPS1pKnMrZSpsLHJbNF09LWkqbytlKmMscls3XT0taSphK2UqdSx0aGlzfXRyYW5zbGF0ZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0rPXQqaVsyXSxpWzNdKz10KmlbNV0saVs2XSs9dCppWzhdLGlbMV0rPWUqaVsyXSxpWzRdKz1lKmlbNV0saVs3XSs9ZSppWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZGUucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBwMChuKXtmb3IobGV0IHQ9bi5sZW5ndGgtMTt0Pj0wOy0tdClpZihuW3RdPjY1NTM1KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHJvKG4pe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG4pfXZhciBtMD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSwkZT17aDowLHM6MCxsOjB9LHZhPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gc3Uobix0LGUpe3JldHVybiBlPDAmJihlKz0xKSxlPjEmJihlLT0xKSxlPDEvNj9uKyh0LW4pKjYqZTplPDEvMj90OmU8Mi8zP24rKHQtbikqNiooMi8zLWUpOm59ZnVuY3Rpb24gT3Iobil7cmV0dXJuIG48LjA0MDQ1P24qLjA3NzM5OTM4MDg6TWF0aC5wb3cobiouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIG91KG4pe3JldHVybiBuPC4wMDMxMzA4P24qMTIuOTI6MS4wNTUqTWF0aC5wb3cobiwuNDE2NjYpLS4wNTV9dmFyIGZ0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtyZXR1cm4gZT09PXZvaWQgMCYmaT09PXZvaWQgMD90aGlzLnNldCh0KTp0aGlzLnNldFJHQih0LGUsaSl9c2V0KHQpe3JldHVybiB0JiZ0LmlzQ29sb3I/dGhpcy5jb3B5KHQpOnR5cGVvZiB0PT0ibnVtYmVyIj90aGlzLnNldEhleCh0KTp0eXBlb2YgdD09InN0cmluZyImJnRoaXMuc2V0U3R5bGUodCksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMucj10LHRoaXMuZz10LHRoaXMuYj10LHRoaXN9c2V0SGV4KHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksdGhpcy5yPSh0Pj4xNiYyNTUpLzI1NSx0aGlzLmc9KHQ+PjgmMjU1KS8yNTUsdGhpcy5iPSh0JjI1NSkvMjU1LHRoaXN9c2V0UkdCKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPWksdGhpc31zZXRIU0wodCxlLGkpe2lmKHQ9ZU0odCwxKSxlPUllKGUsMCwxKSxpPUllKGksMCwxKSxlPT09MCl0aGlzLnI9dGhpcy5nPXRoaXMuYj1pO2Vsc2V7bGV0IHI9aTw9LjU/aSooMStlKTppK2UtaSplLHM9MippLXI7dGhpcy5yPXN1KHMscix0KzEvMyksdGhpcy5nPXN1KHMscix0KSx0aGlzLmI9c3UocyxyLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiBlKHIpe3IhPT12b2lkIDAmJnBhcnNlRmxvYXQocik8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgaTtpZihpPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgcixzPWlbMV0sbz1pWzJdO3N3aXRjaChzKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihyPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQoclsxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KHJbMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChyWzNdLDEwKSkvMjU1LGUocls0XSksdGhpcztpZihyPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoclsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KHJbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChyWzNdLDEwKSkvMTAwLGUocls0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihyPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKG8pKXtsZXQgYT1wYXJzZUZsb2F0KHJbMV0pLzM2MCxsPXBhcnNlSW50KHJbMl0sMTApLzEwMCxjPXBhcnNlSW50KHJbM10sMTApLzEwMDtyZXR1cm4gZShyWzRdKSx0aGlzLnNldEhTTChhLGwsYyl9YnJlYWt9fWVsc2UgaWYoaT0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWModCkpe2xldCByPWlbMV0scz1yLmxlbmd0aDtpZihzPT09MylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDEpK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZihzPT09NilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDQpK3IuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtsZXQgZT1tMFt0LnRvTG93ZXJDYXNlKCldO3JldHVybiBlIT09dm9pZCAwP3RoaXMuc2V0SGV4KGUpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1Pcih0LnIpLHRoaXMuZz1Pcih0LmcpLHRoaXMuYj1Pcih0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPW91KHQuciksdGhpcy5nPW91KHQuZyksdGhpcy5iPW91KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IGU9dGhpcy5yLGk9dGhpcy5nLHI9dGhpcy5iLHM9TWF0aC5tYXgoZSxpLHIpLG89TWF0aC5taW4oZSxpLHIpLGEsbCxjPShvK3MpLzI7aWYobz09PXMpYT0wLGw9MDtlbHNle2xldCB1PXMtbztzd2l0Y2gobD1jPD0uNT91LyhzK28pOnUvKDItcy1vKSxzKXtjYXNlIGU6YT0oaS1yKS91KyhpPHI/NjowKTticmVhaztjYXNlIGk6YT0oci1lKS91KzI7YnJlYWs7Y2FzZSByOmE9KGUtaSkvdSs0O2JyZWFrfWEvPTZ9cmV0dXJuIHQuaD1hLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQsZSxpKXtyZXR1cm4gdGhpcy5nZXRIU0woJGUpLCRlLmgrPXQsJGUucys9ZSwkZS5sKz1pLHRoaXMuc2V0SFNMKCRlLmgsJGUucywkZS5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxlKXtyZXR1cm4gdGhpcy5yPXQucitlLnIsdGhpcy5nPXQuZytlLmcsdGhpcy5iPXQuYitlLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxlKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqZSx0aGlzLmcrPSh0LmctdGhpcy5nKSplLHRoaXMuYis9KHQuYi10aGlzLmIpKmUsdGhpc31sZXJwQ29sb3JzKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQucisoZS5yLXQucikqaSx0aGlzLmc9dC5nKyhlLmctdC5nKSppLHRoaXMuYj10LmIrKGUuYi10LmIpKmksdGhpc31sZXJwSFNMKHQsZSl7dGhpcy5nZXRIU0woJGUpLHQuZ2V0SFNMKHZhKTtsZXQgaT1ydSgkZS5oLHZhLmgsZSkscj1ydSgkZS5zLHZhLnMsZSkscz1ydSgkZS5sLHZhLmwsZSk7cmV0dXJuIHRoaXMuc2V0SFNMKGkscixzKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLnI9dFtlXSx0aGlzLmc9dFtlKzFdLHRoaXMuYj10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLnIsdFtlKzFdPXRoaXMuZyx0W2UrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLnI9dC5nZXRYKGUpLHRoaXMuZz10LmdldFkoZSksdGhpcy5iPXQuZ2V0WihlKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07ZnQuTkFNRVM9bTA7ZnQucHJvdG90eXBlLmlzQ29sb3I9ITA7ZnQucHJvdG90eXBlLnI9MTtmdC5wcm90b3R5cGUuZz0xO2Z0LnByb3RvdHlwZS5iPTE7dmFyIHByLE5uPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PT0idW5kZWZpbmVkIilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ByPT09dm9pZCAwJiYocHI9cm8oImNhbnZhcyIpKSxwci53aWR0aD10LndpZHRoLHByLmhlaWdodD10LmhlaWdodDtsZXQgaT1wci5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9cHJ9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1ybygiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCkscz1yLmRhdGE7Zm9yKGxldCBvPTA7bzxzLmxlbmd0aDtvKyspc1tvXT1PcihzW29dLzI1NSkqMjU1O3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1lbHNlIGlmKHQuZGF0YSl7bGV0IGU9dC5kYXRhLnNsaWNlKDApO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/ZVtpXT1NYXRoLmZsb29yKE9yKGVbaV0vMjU1KSoyNTUpOmVbaV09T3IoZVtpXSk7cmV0dXJue2RhdGE6ZSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LGlNPTAsYWU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0PWFlLkRFRkFVTFRfSU1BR0UsZT1hZS5ERUZBVUxUX01BUFBJTkcsaT1WZSxyPVZlLHM9YmUsbz1MbCxhPVJlLGw9ZWksYz0xLHU9cmkpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1lLHRoaXMud3JhcFM9aSx0aGlzLndyYXBUPXIsdGhpcy5tYWdGaWx0ZXI9cyx0aGlzLm1pbkZpbHRlcj1vLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PWEsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBLKDAsMCksdGhpcy5yZXBlYXQ9bmV3IEsoMSwxKSx0aGlzLmNlbnRlcj1uZXcgSygwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGRlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgZT10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIWUmJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgcj10aGlzLmltYWdlO2lmKHIudXVpZD09PXZvaWQgMCYmKHIudXVpZD10bigpKSwhZSYmdC5pbWFnZXNbci51dWlkXT09PXZvaWQgMCl7bGV0IHM7aWYoQXJyYXkuaXNBcnJheShyKSl7cz1bXTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspcltvXS5pc0RhdGFUZXh0dXJlP3MucHVzaChhdShyW29dLmltYWdlKSk6cy5wdXNoKGF1KHJbb10pKX1lbHNlIHM9YXUocik7dC5pbWFnZXNbci51dWlkXT17dXVpZDpyLnV1aWQsdXJsOnN9fWkuaW1hZ2U9ci51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PWYwKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgT3U6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBWZTp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2Uga3U6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBPdTp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIFZlOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBrdTpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTthZS5ERUZBVUxUX0lNQUdFPXZvaWQgMDthZS5ERUZBVUxUX01BUFBJTkc9ZjA7YWUucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBhdShuKXtyZXR1cm4gdHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmbiBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXA/Tm4uZ2V0RGF0YVVSTChuKTpuLmRhdGE/e2RhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobi5kYXRhKSx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCx0eXBlOm4uZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfXZhciBXdD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXQudyE9PXZvaWQgMD90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10aGlzLncsbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qaStvWzhdKnIrb1sxMl0qcyx0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIrb1sxM10qcyx0aGlzLno9b1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKnMsdGhpcy53PW9bM10qZStvWzddKmkrb1sxMV0qcitvWzE1XSpzLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLHMsbD10LmVsZW1lbnRzLGM9bFswXSx1PWxbNF0saD1sWzhdLGY9bFsxXSxkPWxbNV0sZz1sWzldLHg9bFsyXSx2PWxbNl0sbT1sWzEwXTtpZihNYXRoLmFicyh1LWYpPC4wMSYmTWF0aC5hYnMoaC14KTwuMDEmJk1hdGguYWJzKGctdik8LjAxKXtpZihNYXRoLmFicyh1K2YpPC4xJiZNYXRoLmFicyhoK3gpPC4xJiZNYXRoLmFicyhnK3YpPC4xJiZNYXRoLmFicyhjK2QrbS0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IGI9KGMrMSkvMixfPShkKzEpLzIsUz0obSsxKS8yLEw9KHUrZikvNCxBPShoK3gpLzQsSD0oZyt2KS80O3JldHVybiBiPl8mJmI+Uz9iPC4wMT8oaT0wLHI9LjcwNzEwNjc4MSxzPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChiKSxyPUwvaSxzPUEvaSk6Xz5TP188LjAxPyhpPS43MDcxMDY3ODEscj0wLHM9LjcwNzEwNjc4MSk6KHI9TWF0aC5zcXJ0KF8pLGk9TC9yLHM9SC9yKTpTPC4wMT8oaT0uNzA3MTA2NzgxLHI9LjcwNzEwNjc4MSxzPTApOihzPU1hdGguc3FydChTKSxpPUEvcyxyPUgvcyksdGhpcy5zZXQoaSxyLHMsZSksdGhpc31sZXQgcD1NYXRoLnNxcnQoKHYtZykqKHYtZykrKGgteCkqKGgteCkrKGYtdSkqKGYtdSkpO3JldHVybiBNYXRoLmFicyhwKTwuMDAxJiYocD0xKSx0aGlzLng9KHYtZykvcCx0aGlzLnk9KGgteCkvcCx0aGlzLno9KGYtdSkvcCx0aGlzLnc9TWF0aC5hY29zKChjK2QrbS0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTtXdC5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciBOZT1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IFd0KDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgV3QoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBhZSh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9aS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/aS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0PWkuaW50ZXJuYWxGb3JtYXQhPT12b2lkIDA/aS5pbnRlcm5hbEZvcm1hdDpudWxsLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9aS5taW5GaWx0ZXIhPT12b2lkIDA/aS5taW5GaWx0ZXI6YmUsdGhpcy5kZXB0aEJ1ZmZlcj1pLmRlcHRoQnVmZmVyIT09dm9pZCAwP2kuZGVwdGhCdWZmZXI6ITAsdGhpcy5zdGVuY2lsQnVmZmVyPWkuc3RlbmNpbEJ1ZmZlciE9PXZvaWQgMD9pLnN0ZW5jaWxCdWZmZXI6ITEsdGhpcy5kZXB0aFRleHR1cmU9aS5kZXB0aFRleHR1cmUhPT12b2lkIDA/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5jb3B5KHQudmlld3BvcnQpLHRoaXMudGV4dHVyZT10LnRleHR1cmUuY2xvbmUoKSx0aGlzLnRleHR1cmUuaW1hZ2U9T2JqZWN0LmFzc2lnbih7fSx0LnRleHR1cmUuaW1hZ2UpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O05lLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0PSEwO3ZhciBHdT1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpO2xldCByPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCBzPTA7czxpO3MrKyl0aGlzLnRleHR1cmVbc109ci5jbG9uZSgpfXNldFNpemUodCxlLGk9MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aTtmb3IobGV0IHI9MCxzPXRoaXMudGV4dHVyZS5sZW5ndGg7cjxzO3IrKyl0aGlzLnRleHR1cmVbcl0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmRlcHRoPWk7dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxpPXQudGV4dHVyZS5sZW5ndGg7ZTxpO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fTtHdS5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDt2YXIgc289Y2xhc3MgZXh0ZW5kcyBOZXtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIodCxlLGkpLHRoaXMuc2FtcGxlcz00LHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHk9aS5pZ25vcmVEZXB0aCE9PXZvaWQgMD9pLmlnbm9yZURlcHRoOiEwLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPWkudXNlUmVuZGVyVG9UZXh0dXJlIT09dm9pZCAwP2kudXNlUmVuZGVyVG9UZXh0dXJlOiExLHRoaXMudXNlUmVuZGVyYnVmZmVyPXRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPT09ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07c28ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgRWU9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixzLG8sYSl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLHU9aVtyKzJdLGg9aVtyKzNdLGY9c1tvKzBdLGQ9c1tvKzFdLGc9c1tvKzJdLHg9c1tvKzNdO2lmKGE9PT0wKXt0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aDtyZXR1cm59aWYoYT09PTEpe3RbZSswXT1mLHRbZSsxXT1kLHRbZSsyXT1nLHRbZSszXT14O3JldHVybn1pZihoIT09eHx8bCE9PWZ8fGMhPT1kfHx1IT09Zyl7bGV0IHY9MS1hLG09bCpmK2MqZCt1KmcraCp4LHA9bT49MD8xOi0xLGI9MS1tKm07aWYoYj5OdW1iZXIuRVBTSUxPTil7bGV0IFM9TWF0aC5zcXJ0KGIpLEw9TWF0aC5hdGFuMihTLG0qcCk7dj1NYXRoLnNpbih2KkwpL1MsYT1NYXRoLnNpbihhKkwpL1N9bGV0IF89YSpwO2lmKGw9bCp2K2YqXyxjPWMqditkKl8sdT11KnYrZypfLGg9aCp2K3gqXyx2PT09MS1hKXtsZXQgUz0xL01hdGguc3FydChsKmwrYypjK3UqdStoKmgpO2wqPVMsYyo9Uyx1Kj1TLGgqPVN9fXRbZV09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aH1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscixzLG8pe2xldCBhPWlbcl0sbD1pW3IrMV0sYz1pW3IrMl0sdT1pW3IrM10saD1zW29dLGY9c1tvKzFdLGQ9c1tvKzJdLGc9c1tvKzNdO3JldHVybiB0W2VdPWEqZyt1KmgrbCpkLWMqZix0W2UrMV09bCpnK3UqZitjKmgtYSpkLHRbZSsyXT1jKmcrdSpkK2EqZi1sKmgsdFtlKzNdPXUqZy1hKmgtbCpmLWMqZCx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighKHQmJnQuaXNFdWxlcikpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxzPXQuX3osbz10Ll9vcmRlcixhPU1hdGguY29zLGw9TWF0aC5zaW4sYz1hKGkvMiksdT1hKHIvMiksaD1hKHMvMiksZj1sKGkvMiksZD1sKHIvMiksZz1sKHMvMik7c3dpdGNoKG8pe2Nhc2UiWFlaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitvKX1yZXR1cm4gZSE9PSExJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tQXhpc0FuZ2xlKHQsZSl7bGV0IGk9ZS8yLHI9TWF0aC5zaW4oaSk7cmV0dXJuIHRoaXMuX3g9dC54KnIsdGhpcy5feT10Lnkqcix0aGlzLl96PXQueipyLHRoaXMuX3c9TWF0aC5jb3MoaSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlPXQuZWxlbWVudHMsaT1lWzBdLHI9ZVs0XSxzPWVbOF0sbz1lWzFdLGE9ZVs1XSxsPWVbOV0sYz1lWzJdLHU9ZVs2XSxoPWVbMTBdLGY9aSthK2g7aWYoZj4wKXtsZXQgZD0uNS9NYXRoLnNxcnQoZisxKTt0aGlzLl93PS4yNS9kLHRoaXMuX3g9KHUtbCkqZCx0aGlzLl95PShzLWMpKmQsdGhpcy5fej0oby1yKSpkfWVsc2UgaWYoaT5hJiZpPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDEraS1hLWgpO3RoaXMuX3c9KHUtbCkvZCx0aGlzLl94PS4yNSpkLHRoaXMuX3k9KHIrbykvZCx0aGlzLl96PShzK2MpL2R9ZWxzZSBpZihhPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDErYS1pLWgpO3RoaXMuX3c9KHMtYykvZCx0aGlzLl94PShyK28pL2QsdGhpcy5feT0uMjUqZCx0aGlzLl96PShsK3UpL2R9ZWxzZXtsZXQgZD0yKk1hdGguc3FydCgxK2gtaS1hKTt0aGlzLl93PShvLXIpL2QsdGhpcy5feD0ocytjKS9kLHRoaXMuX3k9KGwrdSkvZCx0aGlzLl96PS4yNSpkfXJldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tVW5pdFZlY3RvcnModCxlKXtsZXQgaT10LmRvdChlKSsxO3JldHVybiBpPE51bWJlci5FUFNJTE9OPyhpPTAsTWF0aC5hYnModC54KT5NYXRoLmFicyh0LnopPyh0aGlzLl94PS10LnksdGhpcy5feT10LngsdGhpcy5fej0wLHRoaXMuX3c9aSk6KHRoaXMuX3g9MCx0aGlzLl95PS10LnosdGhpcy5fej10LnksdGhpcy5fdz1pKSk6KHRoaXMuX3g9dC55KmUuei10LnoqZS55LHRoaXMuX3k9dC56KmUueC10LngqZS56LHRoaXMuX3o9dC54KmUueS10LnkqZS54LHRoaXMuX3c9aSksdGhpcy5ub3JtYWxpemUoKX1hbmdsZVRvKHQpe3JldHVybiAyKk1hdGguYWNvcyhNYXRoLmFicyhJZSh0aGlzLmRvdCh0KSwtMSwxKSkpfXJvdGF0ZVRvd2FyZHModCxlKXtsZXQgaT10aGlzLmFuZ2xlVG8odCk7aWYoaT09PTApcmV0dXJuIHRoaXM7bGV0IHI9TWF0aC5taW4oMSxlL2kpO3JldHVybiB0aGlzLnNsZXJwKHQsciksdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgwLDAsMCwxKX1pbnZlcnQoKXtyZXR1cm4gdGhpcy5jb25qdWdhdGUoKX1jb25qdWdhdGUoKXtyZXR1cm4gdGhpcy5feCo9LTEsdGhpcy5feSo9LTEsdGhpcy5feio9LTEsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLl94KnQuX3grdGhpcy5feSp0Ll95K3RoaXMuX3oqdC5feit0aGlzLl93KnQuX3d9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93KX1ub3JtYWxpemUoKXtsZXQgdD10aGlzLmxlbmd0aCgpO3JldHVybiB0PT09MD8odGhpcy5feD0wLHRoaXMuX3k9MCx0aGlzLl96PTAsdGhpcy5fdz0xKToodD0xL3QsdGhpcy5feD10aGlzLl94KnQsdGhpcy5feT10aGlzLl95KnQsdGhpcy5fej10aGlzLl96KnQsdGhpcy5fdz10aGlzLl93KnQpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlRdWF0ZXJuaW9ucyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsZSkpOnRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCx0aGlzKX1tdWx0aXBseVF1YXRlcm5pb25zKHQsZSl7bGV0IGk9dC5feCxyPXQuX3kscz10Ll96LG89dC5fdyxhPWUuX3gsbD1lLl95LGM9ZS5feix1PWUuX3c7cmV0dXJuIHRoaXMuX3g9aSp1K28qYStyKmMtcypsLHRoaXMuX3k9cip1K28qbCtzKmEtaSpjLHRoaXMuX3o9cyp1K28qYytpKmwtciphLHRoaXMuX3c9byp1LWkqYS1yKmwtcypjLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwKHQsZSl7aWYoZT09PTApcmV0dXJuIHRoaXM7aWYoZT09PTEpcmV0dXJuIHRoaXMuY29weSh0KTtsZXQgaT10aGlzLl94LHI9dGhpcy5feSxzPXRoaXMuX3osbz10aGlzLl93LGE9byp0Ll93K2kqdC5feCtyKnQuX3krcyp0Ll96O2lmKGE8MD8odGhpcy5fdz0tdC5fdyx0aGlzLl94PS10Ll94LHRoaXMuX3k9LXQuX3ksdGhpcy5fej0tdC5feixhPS1hKTp0aGlzLmNvcHkodCksYT49MSlyZXR1cm4gdGhpcy5fdz1vLHRoaXMuX3g9aSx0aGlzLl95PXIsdGhpcy5fej1zLHRoaXM7bGV0IGw9MS1hKmE7aWYobDw9TnVtYmVyLkVQU0lMT04pe2xldCBkPTEtZTtyZXR1cm4gdGhpcy5fdz1kKm8rZSp0aGlzLl93LHRoaXMuX3g9ZCppK2UqdGhpcy5feCx0aGlzLl95PWQqcitlKnRoaXMuX3ksdGhpcy5fej1kKnMrZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bGV0IGM9TWF0aC5zcXJ0KGwpLHU9TWF0aC5hdGFuMihjLGEpLGg9TWF0aC5zaW4oKDEtZSkqdSkvYyxmPU1hdGguc2luKGUqdSkvYztyZXR1cm4gdGhpcy5fdz1vKmgrdGhpcy5fdypmLHRoaXMuX3g9aSpoK3RoaXMuX3gqZix0aGlzLl95PXIqaCt0aGlzLl95KmYsdGhpcy5fej1zKmgrdGhpcy5feipmLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwUXVhdGVybmlvbnModCxlLGkpe3JldHVybiB0aGlzLmNvcHkodCkuc2xlcnAoZSxpKX1yYW5kb20oKXtsZXQgdD1NYXRoLnJhbmRvbSgpLGU9TWF0aC5zcXJ0KDEtdCksaT1NYXRoLnNxcnQodCkscj0yKk1hdGguUEkqTWF0aC5yYW5kb20oKSxzPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpO3JldHVybiB0aGlzLnNldChlKk1hdGguY29zKHIpLGkqTWF0aC5zaW4ocyksaSpNYXRoLmNvcyhzKSxlKk1hdGguc2luKHIpKX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX3c9PT10aGlzLl93fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMuX3g9dFtlXSx0aGlzLl95PXRbZSsxXSx0aGlzLl96PXRbZSsyXSx0aGlzLl93PXRbZSszXSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl93LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLl94PXQuZ2V0WChlKSx0aGlzLl95PXQuZ2V0WShlKSx0aGlzLl96PXQuZ2V0WihlKSx0aGlzLl93PXQuZ2V0VyhlKSx0aGlzfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTtFZS5wcm90b3R5cGUuaXNRdWF0ZXJuaW9uPSEwO3ZhciBUPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aX1zZXQodCxlLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyh0LGUpKToodGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcyl9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIiksdGhpcy5hcHBseVF1YXRlcm5pb24ocmcuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihyZy5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbM10qaStzWzZdKnIsdGhpcy55PXNbMV0qZStzWzRdKmkrc1s3XSpyLHRoaXMuej1zWzJdKmUrc1s1XSppK3NbOF0qcix0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LHM9dC5lbGVtZW50cyxvPTEvKHNbM10qZStzWzddKmkrc1sxMV0qcitzWzE1XSk7cmV0dXJuIHRoaXMueD0oc1swXSplK3NbNF0qaStzWzhdKnIrc1sxMl0pKm8sdGhpcy55PShzWzFdKmUrc1s1XSppK3NbOV0qcitzWzEzXSkqbyx0aGlzLno9KHNbMl0qZStzWzZdKmkrc1sxMF0qcitzWzE0XSkqbyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10Lngsbz10LnksYT10LnosbD10LncsYz1sKmUrbypyLWEqaSx1PWwqaSthKmUtcypyLGg9bCpyK3MqaS1vKmUsZj0tcyplLW8qaS1hKnI7cmV0dXJuIHRoaXMueD1jKmwrZiotcyt1Ki1hLWgqLW8sdGhpcy55PXUqbCtmKi1vK2gqLXMtYyotYSx0aGlzLno9aCpsK2YqLWErYyotby11Ki1zLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbNF0qaStzWzhdKnIsdGhpcy55PXNbMV0qZStzWzVdKmkrc1s5XSpyLHRoaXMuej1zWzJdKmUrc1s2XSppK3NbMTBdKnIsdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPWUueCxhPWUueSxsPWUuejtyZXR1cm4gdGhpcy54PXIqbC1zKmEsdGhpcy55PXMqby1pKmwsdGhpcy56PWkqYS1yKm8sdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IGU9dC5sZW5ndGhTcSgpO2lmKGU9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IGk9dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKGkpfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBsdS5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihsdSl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIobHUuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoZT09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoSWUoaSwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHI9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStyKnJ9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2xldCByPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1yKk1hdGguc2luKGkpLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1yKk1hdGguY29zKGkpLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PWksdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxyPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cix0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxlKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsZSozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiBpIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLGU9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsaT1NYXRoLnNxcnQoMS1jZih0LDIpKTtyZXR1cm4gdGhpcy54PWkqTWF0aC5jb3MoZSksdGhpcy55PWkqTWF0aC5zaW4oZSksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O1QucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgbHU9bmV3IFQscmc9bmV3IEVlLEdlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQoMS8wLDEvMCwxLzApLGU9bmV3IFQoLTEvMCwtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10Lmxlbmd0aDtsPGM7bCs9Myl7bGV0IHU9dFtsXSxoPXRbbCsxXSxmPXRbbCsyXTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10LmNvdW50O2w8YztsKyspe2xldCB1PXQuZ2V0WChsKSxoPXQuZ2V0WShsKSxmPXQuZ2V0WihsKTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtsZXQgaT1JaS5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIoaSksdGhpcy5tYXguY29weSh0KS5hZGQoaSksdGhpc31zZXRGcm9tT2JqZWN0KHQsZT0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LGUpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYoaSE9PXZvaWQgMClpZihlJiZpLmF0dHJpYnV0ZXMhPW51bGwmJmkuYXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMCl7bGV0IHM9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgbz0wLGE9cy5jb3VudDtvPGE7bysrKUlpLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxvKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KElpKX1lbHNlIGkuYm91bmRpbmdCb3g9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLGN1LmNvcHkoaS5ib3VuZGluZ0JveCksY3UuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oY3UpO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltzXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLElpKSxJaS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoa3MpLF9hLnN1YlZlY3RvcnModGhpcy5tYXgsa3MpLG1yLnN1YlZlY3RvcnModC5hLGtzKSxnci5zdWJWZWN0b3JzKHQuYixrcykseHIuc3ViVmVjdG9ycyh0LmMsa3MpLHFuLnN1YlZlY3RvcnMoZ3IsbXIpLFhuLnN1YlZlY3RvcnMoeHIsZ3IpLE5pLnN1YlZlY3RvcnMobXIseHIpO2xldCBlPVswLC1xbi56LHFuLnksMCwtWG4ueixYbi55LDAsLU5pLnosTmkueSxxbi56LDAsLXFuLngsWG4ueiwwLC1Ybi54LE5pLnosMCwtTmkueCwtcW4ueSxxbi54LDAsLVhuLnksWG4ueCwwLC1OaS55LE5pLngsMF07cmV0dXJuIXV1KGUsbXIsZ3IseHIsX2EpfHwoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCF1dShlLG1yLGdyLHhyLF9hKSk/ITE6KHdhLmNyb3NzVmVjdG9ycyhxbixYbiksZT1bd2EueCx3YS55LHdhLnpdLHV1KGUsbXIsZ3IseHIsX2EpKX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBJaS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz10aGlzLmdldFNpemUoSWkpLmxlbmd0aCgpKi41LHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzOihBblswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBblsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoQW4pLHRoaXMpfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0dlLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIEFuPVtuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVF0sSWk9bmV3IFQsY3U9bmV3IEdlLG1yPW5ldyBULGdyPW5ldyBULHhyPW5ldyBULHFuPW5ldyBULFhuPW5ldyBULE5pPW5ldyBULGtzPW5ldyBULF9hPW5ldyBULHdhPW5ldyBULEZpPW5ldyBUO2Z1bmN0aW9uIHV1KG4sdCxlLGkscil7Zm9yKGxldCBzPTAsbz1uLmxlbmd0aC0zO3M8PW87cys9Myl7RmkuZnJvbUFycmF5KG4scyk7bGV0IGE9ci54Kk1hdGguYWJzKEZpLngpK3IueSpNYXRoLmFicyhGaS55KStyLnoqTWF0aC5hYnMoRmkueiksbD10LmRvdChGaSksYz1lLmRvdChGaSksdT1pLmRvdChGaSk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KGwsYyx1KSxNYXRoLm1pbihsLGMsdSkpPmEpcmV0dXJuITF9cmV0dXJuITB9dmFyIHJNPW5ldyBHZSxzZz1uZXcgVCxNYT1uZXcgVCxodT1uZXcgVCxzaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9LTEpe3RoaXMuY2VudGVyPXQsdGhpcy5yYWRpdXM9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0KSx0aGlzLnJhZGl1cz1lLHRoaXN9c2V0RnJvbVBvaW50cyh0LGUpe2xldCBpPXRoaXMuY2VudGVyO2UhPT12b2lkIDA/aS5jb3B5KGUpOnJNLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBzPTAsbz10Lmxlbmd0aDtzPG87cysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbc10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7aHUuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1odS5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPShpLXRoaXMucmFkaXVzKSouNTt0aGlzLmNlbnRlci5hZGQoaHUubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik9PT0hMD9NYS5zZXQoMCwwLDEpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKTpNYS5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KHNnLmNvcHkodC5jZW50ZXIpLmFkZChNYSkpLHRoaXMuZXhwYW5kQnlQb2ludChzZy5jb3B5KHQuY2VudGVyKS5zdWIoTWEpKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxDbj1uZXcgVCxmdT1uZXcgVCxiYT1uZXcgVCxZbj1uZXcgVCxkdT1uZXcgVCxTYT1uZXcgVCxwdT1uZXcgVCxvaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsQ24pKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtlLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbik7bGV0IGk9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBpPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7bGV0IGU9Q24uc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KENuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGUpLmFkZCh0aGlzLm9yaWdpbiksQ24uZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLGkscil7ZnUuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLGJhLmNvcHkoZSkuc3ViKHQpLm5vcm1hbGl6ZSgpLFluLmNvcHkodGhpcy5vcmlnaW4pLnN1YihmdSk7bGV0IHM9dC5kaXN0YW5jZVRvKGUpKi41LG89LXRoaXMuZGlyZWN0aW9uLmRvdChiYSksYT1Zbi5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LVluLmRvdChiYSksYz1Zbi5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1vKm8pLGgsZixkLGc7aWYodT4wKWlmKGg9bypsLWEsZj1vKmEtbCxnPXMqdSxoPj0wKWlmKGY+PS1nKWlmKGY8PWcpe2xldCB4PTEvdTtoKj14LGYqPXgsZD1oKihoK28qZisyKmEpK2YqKG8qaCtmKzIqbCkrY31lbHNlIGY9cyxoPU1hdGgubWF4KDAsLShvKmYrYSkpLGQ9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LXMsaD1NYXRoLm1heCgwLC0obypmK2EpKSxkPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZz8oaD1NYXRoLm1heCgwLC0oLW8qcythKSksZj1oPjA/LXM6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk6Zjw9Zz8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShvKnMrYSkpLGY9aD4wP3M6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPW8+MD8tczpzLGg9TWF0aC5tYXgoMCwtKG8qZithKSksZD0taCpoK2YqKGYrMipsKStjO3JldHVybiBpJiZpLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksciYmci5jb3B5KGJhKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoZnUpLGR9aW50ZXJzZWN0U3BoZXJlKHQsZSl7Q24uc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLm9yaWdpbik7bGV0IGk9Q24uZG90KHRoaXMuZGlyZWN0aW9uKSxyPUNuLmRvdChDbiktaSppLHM9dC5yYWRpdXMqdC5yYWRpdXM7aWYocj5zKXJldHVybiBudWxsO2xldCBvPU1hdGguc3FydChzLXIpLGE9aS1vLGw9aStvO3JldHVybiBhPDAmJmw8MD9udWxsOmE8MD90aGlzLmF0KGwsZSk6dGhpcy5hdChhLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7bGV0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZihlPT09MClyZXR1cm4gdC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPT09MD8wOm51bGw7bGV0IGk9LSh0aGlzLm9yaWdpbi5kb3QodC5ub3JtYWwpK3QuY29uc3RhbnQpL2U7cmV0dXJuIGk+PTA/aTpudWxsfWludGVyc2VjdFBsYW5lKHQsZSl7bGV0IGk9dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIGk9PT1udWxsP251bGw6dGhpcy5hdChpLGUpfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIGU9PT0wfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgaSxyLHMsbyxhLGwsYz0xL3RoaXMuZGlyZWN0aW9uLngsdT0xL3RoaXMuZGlyZWN0aW9uLnksaD0xL3RoaXMuZGlyZWN0aW9uLnosZj10aGlzLm9yaWdpbjtyZXR1cm4gYz49MD8oaT0odC5taW4ueC1mLngpKmMscj0odC5tYXgueC1mLngpKmMpOihpPSh0Lm1heC54LWYueCkqYyxyPSh0Lm1pbi54LWYueCkqYyksdT49MD8ocz0odC5taW4ueS1mLnkpKnUsbz0odC5tYXgueS1mLnkpKnUpOihzPSh0Lm1heC55LWYueSkqdSxvPSh0Lm1pbi55LWYueSkqdSksaT5vfHxzPnJ8fCgocz5pfHxpIT09aSkmJihpPXMpLChvPHJ8fHIhPT1yKSYmKHI9byksaD49MD8oYT0odC5taW4uei1mLnopKmgsbD0odC5tYXguei1mLnopKmgpOihhPSh0Lm1heC56LWYueikqaCxsPSh0Lm1pbi56LWYueikqaCksaT5sfHxhPnIpfHwoKGE+aXx8aSE9PWkpJiYoaT1hKSwobDxyfHxyIT09cikmJihyPWwpLHI8MCk/bnVsbDp0aGlzLmF0KGk+PTA/aTpyLGUpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHRoaXMuaW50ZXJzZWN0Qm94KHQsQ24pIT09bnVsbH1pbnRlcnNlY3RUcmlhbmdsZSh0LGUsaSxyLHMpe2R1LnN1YlZlY3RvcnMoZSx0KSxTYS5zdWJWZWN0b3JzKGksdCkscHUuY3Jvc3NWZWN0b3JzKGR1LFNhKTtsZXQgbz10aGlzLmRpcmVjdGlvbi5kb3QocHUpLGE7aWYobz4wKXtpZihyKXJldHVybiBudWxsO2E9MX1lbHNlIGlmKG88MClhPS0xLG89LW87ZWxzZSByZXR1cm4gbnVsbDtZbi5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPWEqdGhpcy5kaXJlY3Rpb24uZG90KFNhLmNyb3NzVmVjdG9ycyhZbixTYSkpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1hKnRoaXMuZGlyZWN0aW9uLmRvdChkdS5jcm9zcyhZbikpO2lmKGM8MHx8bCtjPm8pcmV0dXJuIG51bGw7bGV0IHU9LWEqWW4uZG90KHB1KTtyZXR1cm4gdTwwP251bGw6dGhpcy5hdCh1L28scyl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LHd0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2KXtsZXQgbT10aGlzLmVsZW1lbnRzO3JldHVybiBtWzBdPXQsbVs0XT1lLG1bOF09aSxtWzEyXT1yLG1bMV09cyxtWzVdPW8sbVs5XT1hLG1bMTNdPWwsbVsyXT1jLG1bNl09dSxtWzEwXT1oLG1bMTRdPWYsbVszXT1kLG1bN109ZyxtWzExXT14LG1bMTVdPXYsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB3dCgpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX1jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSxlWzldPWlbOV0sZVsxMF09aVsxMF0sZVsxMV09aVsxMV0sZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sZVsxNV09aVsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzNdLGVbNl0sMCxlWzFdLGVbNF0sZVs3XSwwLGVbMl0sZVs1XSxlWzhdLDAsMCwwLDAsMSksdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywyKSx0aGlzfW1ha2VCYXNpcyh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQueCxlLngsaS54LDAsdC55LGUueSxpLnksMCx0LnosZS56LGkueiwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdFJvdGF0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzLHI9MS95ci5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCkscz0xL3lyLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxvPTEveXIuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPWlbMF0qcixlWzFdPWlbMV0qcixlWzJdPWlbMl0qcixlWzNdPTAsZVs0XT1pWzRdKnMsZVs1XT1pWzVdKnMsZVs2XT1pWzZdKnMsZVs3XT0wLGVbOF09aVs4XSpvLGVbOV09aVs5XSpvLGVbMTBdPWlbMTBdKm8sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LHM9dC56LG89TWF0aC5jb3MoaSksYT1NYXRoLnNpbihpKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4ociksdT1NYXRoLmNvcyhzKSxoPU1hdGguc2luKHMpO2lmKHQub3JkZXI9PT0iWFlaIil7bGV0IGY9byp1LGQ9bypoLGc9YSp1LHg9YSpoO2VbMF09bCp1LGVbNF09LWwqaCxlWzhdPWMsZVsxXT1kK2cqYyxlWzVdPWYteCpjLGVbOV09LWEqbCxlWzJdPXgtZipjLGVbNl09ZytkKmMsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJZWFoiKXtsZXQgZj1sKnUsZD1sKmgsZz1jKnUseD1jKmg7ZVswXT1mK3gqYSxlWzRdPWcqYS1kLGVbOF09bypjLGVbMV09bypoLGVbNV09byp1LGVbOV09LWEsZVsyXT1kKmEtZyxlWzZdPXgrZiphLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWlhZIil7bGV0IGY9bCp1LGQ9bCpoLGc9Yyp1LHg9YypoO2VbMF09Zi14KmEsZVs0XT0tbypoLGVbOF09ZytkKmEsZVsxXT1kK2cqYSxlWzVdPW8qdSxlWzldPXgtZiphLGVbMl09LW8qYyxlWzZdPWEsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJaWVgiKXtsZXQgZj1vKnUsZD1vKmgsZz1hKnUseD1hKmg7ZVswXT1sKnUsZVs0XT1nKmMtZCxlWzhdPWYqYyt4LGVbMV09bCpoLGVbNV09eCpjK2YsZVs5XT1kKmMtZyxlWzJdPS1jLGVbNl09YSpsLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWVpYIil7bGV0IGY9bypsLGQ9bypjLGc9YSpsLHg9YSpjO2VbMF09bCp1LGVbNF09eC1mKmgsZVs4XT1nKmgrZCxlWzFdPWgsZVs1XT1vKnUsZVs5XT0tYSp1LGVbMl09LWMqdSxlWzZdPWQqaCtnLGVbMTBdPWYteCpofWVsc2UgaWYodC5vcmRlcj09PSJYWlkiKXtsZXQgZj1vKmwsZD1vKmMsZz1hKmwseD1hKmM7ZVswXT1sKnUsZVs0XT0taCxlWzhdPWMqdSxlWzFdPWYqaCt4LGVbNV09byp1LGVbOV09ZCpoLWcsZVsyXT1nKmgtZCxlWzZdPWEqdSxlWzEwXT14KmgrZn1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKHNNLHQsb00pfWxvb2tBdCh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4ga2Uuc3ViVmVjdG9ycyh0LGUpLGtlLmxlbmd0aFNxKCk9PT0wJiYoa2Uuej0xKSxrZS5ub3JtYWxpemUoKSxabi5jcm9zc1ZlY3RvcnMoaSxrZSksWm4ubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhpLnopPT09MT9rZS54Kz0xZS00OmtlLnorPTFlLTQsa2Uubm9ybWFsaXplKCksWm4uY3Jvc3NWZWN0b3JzKGksa2UpKSxabi5ub3JtYWxpemUoKSxFYS5jcm9zc1ZlY3RvcnMoa2UsWm4pLHJbMF09Wm4ueCxyWzRdPUVhLngscls4XT1rZS54LHJbMV09Wm4ueSxyWzVdPUVhLnkscls5XT1rZS55LHJbMl09Wm4ueixyWzZdPUVhLnosclsxMF09a2Uueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7bGV0IGk9dC5lbGVtZW50cyxyPWUuZWxlbWVudHMscz10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbNF0sbD1pWzhdLGM9aVsxMl0sdT1pWzFdLGg9aVs1XSxmPWlbOV0sZD1pWzEzXSxnPWlbMl0seD1pWzZdLHY9aVsxMF0sbT1pWzE0XSxwPWlbM10sYj1pWzddLF89aVsxMV0sUz1pWzE1XSxMPXJbMF0sQT1yWzRdLEg9cls4XSx0dD1yWzEyXSxYPXJbMV0seT1yWzVdLFI9cls5XSxEPXJbMTNdLEY9clsyXSx6PXJbNl0sTj1yWzEwXSxWPXJbMTRdLFE9clszXSxhdD1yWzddLEc9clsxMV0sJD1yWzE1XTtyZXR1cm4gc1swXT1vKkwrYSpYK2wqRitjKlEsc1s0XT1vKkErYSp5K2wqeitjKmF0LHNbOF09bypIK2EqUitsKk4rYypHLHNbMTJdPW8qdHQrYSpEK2wqVitjKiQsc1sxXT11KkwraCpYK2YqRitkKlEsc1s1XT11KkEraCp5K2YqeitkKmF0LHNbOV09dSpIK2gqUitmKk4rZCpHLHNbMTNdPXUqdHQraCpEK2YqVitkKiQsc1syXT1nKkwreCpYK3YqRittKlEsc1s2XT1nKkEreCp5K3YqeittKmF0LHNbMTBdPWcqSCt4KlIrdipOK20qRyxzWzE0XT1nKnR0K3gqRCt2KlYrbSokLHNbM109cCpMK2IqWCtfKkYrUypRLHNbN109cCpBK2IqeStfKnorUyphdCxzWzExXT1wKkgrYipSK18qTitTKkcsc1sxNV09cCp0dCtiKkQrXypWK1MqJCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVs0XSo9dCxlWzhdKj10LGVbMTJdKj10LGVbMV0qPXQsZVs1XSo9dCxlWzldKj10LGVbMTNdKj10LGVbMl0qPXQsZVs2XSo9dCxlWzEwXSo9dCxlWzE0XSo9dCxlWzNdKj10LGVbN10qPXQsZVsxMV0qPXQsZVsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFs0XSxyPXRbOF0scz10WzEyXSxvPXRbMV0sYT10WzVdLGw9dFs5XSxjPXRbMTNdLHU9dFsyXSxoPXRbNl0sZj10WzEwXSxkPXRbMTRdLGc9dFszXSx4PXRbN10sdj10WzExXSxtPXRbMTVdO3JldHVybiBnKigrcypsKmgtcipjKmgtcyphKmYraSpjKmYrciphKmQtaSpsKmQpK3gqKCtlKmwqZC1lKmMqZitzKm8qZi1yKm8qZCtyKmMqdS1zKmwqdSkrdiooK2UqYypoLWUqYSpkLXMqbypoK2kqbypkK3MqYSp1LWkqYyp1KSttKigtciphKnUtZSpsKmgrZSphKmYrcipvKmgtaSpvKmYraSpsKnUpfXRyYW5zcG9zZSgpe2xldCB0PXRoaXMuZWxlbWVudHMsZTtyZXR1cm4gZT10WzFdLHRbMV09dFs0XSx0WzRdPWUsZT10WzJdLHRbMl09dFs4XSx0WzhdPWUsZT10WzZdLHRbNl09dFs5XSx0WzldPWUsZT10WzNdLHRbM109dFsxMl0sdFsxMl09ZSxlPXRbN10sdFs3XT10WzEzXSx0WzEzXT1lLGU9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09ZSx0aGlzfXNldFBvc2l0aW9uKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0LmlzVmVjdG9yMz8oclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnopOihyWzEyXT10LHJbMTNdPWUsclsxNF09aSksdGhpc31pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLHM9dFszXSxvPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dFs5XSxmPXRbMTBdLGQ9dFsxMV0sZz10WzEyXSx4PXRbMTNdLHY9dFsxNF0sbT10WzE1XSxwPWgqdipjLXgqZipjK3gqbCpkLWEqdipkLWgqbCptK2EqZiptLGI9ZypmKmMtdSp2KmMtZypsKmQrbyp2KmQrdSpsKm0tbypmKm0sXz11KngqYy1nKmgqYytnKmEqZC1vKngqZC11KmEqbStvKmgqbSxTPWcqaCpsLXUqeCpsLWcqYSpmK28qeCpmK3UqYSp2LW8qaCp2LEw9ZSpwK2kqYityKl8rcypTO2lmKEw9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgQT0xL0w7cmV0dXJuIHRbMF09cCpBLHRbMV09KHgqZipzLWgqdipzLXgqcipkK2kqdipkK2gqciptLWkqZiptKSpBLHRbMl09KGEqdipzLXgqbCpzK3gqcipjLWkqdipjLWEqciptK2kqbCptKSpBLHRbM109KGgqbCpzLWEqZipzLWgqcipjK2kqZipjK2EqcipkLWkqbCpkKSpBLHRbNF09YipBLHRbNV09KHUqdipzLWcqZipzK2cqcipkLWUqdipkLXUqciptK2UqZiptKSpBLHRbNl09KGcqbCpzLW8qdipzLWcqcipjK2UqdipjK28qciptLWUqbCptKSpBLHRbN109KG8qZipzLXUqbCpzK3UqcipjLWUqZipjLW8qcipkK2UqbCpkKSpBLHRbOF09XypBLHRbOV09KGcqaCpzLXUqeCpzLWcqaSpkK2UqeCpkK3UqaSptLWUqaCptKSpBLHRbMTBdPShvKngqcy1nKmEqcytnKmkqYy1lKngqYy1vKmkqbStlKmEqbSkqQSx0WzExXT0odSphKnMtbypoKnMtdSppKmMrZSpoKmMrbyppKmQtZSphKmQpKkEsdFsxMl09UypBLHRbMTNdPSh1Kngqci1nKmgqcitnKmkqZi1lKngqZi11KmkqditlKmgqdikqQSx0WzE0XT0oZyphKnItbyp4KnItZyppKmwrZSp4KmwrbyppKnYtZSphKnYpKkEsdFsxNV09KG8qaCpyLXUqYSpyK3UqaSpsLWUqaCpsLW8qaSpmK2UqYSpmKSpBLHRoaXN9c2NhbGUodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQueCxyPXQueSxzPXQuejtyZXR1cm4gZVswXSo9aSxlWzRdKj1yLGVbOF0qPXMsZVsxXSo9aSxlWzVdKj1yLGVbOV0qPXMsZVsyXSo9aSxlWzZdKj1yLGVbMTBdKj1zLGVbM10qPWksZVs3XSo9cixlWzExXSo9cyx0aGlzfWdldE1heFNjYWxlT25BeGlzKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLGk9dFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0scj10WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgoZSxpLHIpKX1tYWtlVHJhbnNsYXRpb24odCxlLGkpe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLGUsMCwwLDEsaSwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLGUsLWksMCwwLGksZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLDAsaSwwLDAsMSwwLDAsLWksMCxlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25aKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsLWksMCwwLGksZSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxlKXtsZXQgaT1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpLHM9MS1pLG89dC54LGE9dC55LGw9dC56LGM9cypvLHU9cyphO3JldHVybiB0aGlzLnNldChjKm8raSxjKmEtcipsLGMqbCtyKmEsMCxjKmErcipsLHUqYStpLHUqbC1yKm8sMCxjKmwtciphLHUqbCtyKm8scypsKmwraSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLGUsMCwwLDAsMCxpLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxlLGkscixzLG8pe3JldHVybiB0aGlzLnNldCgxLGkscywwLHQsMSxvLDAsZSxyLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz1lLl94LG89ZS5feSxhPWUuX3osbD1lLl93LGM9cytzLHU9bytvLGg9YSthLGY9cypjLGQ9cyp1LGc9cypoLHg9byp1LHY9bypoLG09YSpoLHA9bCpjLGI9bCp1LF89bCpoLFM9aS54LEw9aS55LEE9aS56O3JldHVybiByWzBdPSgxLSh4K20pKSpTLHJbMV09KGQrXykqUyxyWzJdPShnLWIpKlMsclszXT0wLHJbNF09KGQtXykqTCxyWzVdPSgxLShmK20pKSpMLHJbNl09KHYrcCkqTCxyWzddPTAscls4XT0oZytiKSpBLHJbOV09KHYtcCkqQSxyWzEwXT0oMS0oZit4KSkqQSxyWzExXT0wLHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56LHJbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz15ci5zZXQoclswXSxyWzFdLHJbMl0pLmxlbmd0aCgpLG89eXIuc2V0KHJbNF0scls1XSxyWzZdKS5sZW5ndGgoKSxhPXlyLnNldChyWzhdLHJbOV0sclsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYocz0tcyksdC54PXJbMTJdLHQueT1yWzEzXSx0Lno9clsxNF0sS2UuY29weSh0aGlzKTtsZXQgYz0xL3MsdT0xL28saD0xL2E7cmV0dXJuIEtlLmVsZW1lbnRzWzBdKj1jLEtlLmVsZW1lbnRzWzFdKj1jLEtlLmVsZW1lbnRzWzJdKj1jLEtlLmVsZW1lbnRzWzRdKj11LEtlLmVsZW1lbnRzWzVdKj11LEtlLmVsZW1lbnRzWzZdKj11LEtlLmVsZW1lbnRzWzhdKj1oLEtlLmVsZW1lbnRzWzldKj1oLEtlLmVsZW1lbnRzWzEwXSo9aCxlLnNldEZyb21Sb3RhdGlvbk1hdHJpeChLZSksaS54PXMsaS55PW8saS56PWEsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLGkscixzLG8pe289PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBhPXRoaXMuZWxlbWVudHMsbD0yKnMvKGUtdCksYz0yKnMvKGktciksdT0oZSt0KS8oZS10KSxoPShpK3IpLyhpLXIpLGY9LShvK3MpLyhvLXMpLGQ9LTIqbypzLyhvLXMpO3JldHVybiBhWzBdPWwsYVs0XT0wLGFbOF09dSxhWzEyXT0wLGFbMV09MCxhWzVdPWMsYVs5XT1oLGFbMTNdPTAsYVsyXT0wLGFbNl09MCxhWzEwXT1mLGFbMTRdPWQsYVszXT0wLGFbN109MCxhWzExXT0tMSxhWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5lbGVtZW50cyxsPTEvKGUtdCksYz0xLyhpLXIpLHU9MS8oby1zKSxoPShlK3QpKmwsZj0oaStyKSpjLGQ9KG8rcykqdTtyZXR1cm4gYVswXT0yKmwsYVs0XT0wLGFbOF09MCxhWzEyXT0taCxhWzFdPTAsYVs1XT0yKmMsYVs5XT0wLGFbMTNdPS1mLGFbMl09MCxhWzZdPTAsYVsxMF09LTIqdSxhWzE0XT0tZCxhWzNdPTAsYVs3XT0wLGFbMTFdPTAsYVsxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDE2O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8MTY7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0W2UrOV09aVs5XSx0W2UrMTBdPWlbMTBdLHRbZSsxMV09aVsxMV0sdFtlKzEyXT1pWzEyXSx0W2UrMTNdPWlbMTNdLHRbZSsxNF09aVsxNF0sdFtlKzE1XT1pWzE1XSx0fX07d3QucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgeXI9bmV3IFQsS2U9bmV3IHd0LHNNPW5ldyBUKDAsMCwwKSxvTT1uZXcgVCgxLDEsMSksWm49bmV3IFQsRWE9bmV3IFQsa2U9bmV3IFQsb2c9bmV3IHd0LGFnPW5ldyBFZSxhaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPWFpLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cn1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZT10aGlzLl9vcmRlcixpPSEwKXtsZXQgcj10LmVsZW1lbnRzLHM9clswXSxvPXJbNF0sYT1yWzhdLGw9clsxXSxjPXJbNV0sdT1yWzldLGg9clsyXSxmPXJbNl0sZD1yWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKEllKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsZCksdGhpcy5fej1NYXRoLmF0YW4yKC1vLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLUllKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoYSxkKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxzKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihJZShmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLGQpLHRoaXMuX3o9TWF0aC5hdGFuMigtbyxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxzKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1JZShoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYsZCksdGhpcy5fej1NYXRoLmF0YW4yKGwscykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1vLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oSWUobCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgscykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGEsZCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtSWUobywtMSwxKSksTWF0aC5hYnMobyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihhLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKC11LGQpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSxpPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4gb2cubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgob2csZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBhZy5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhZyx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx0WzNdIT09dm9pZCAwJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyBUKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07YWkucHJvdG90eXBlLmlzRXVsZXI9ITA7YWkuRGVmYXVsdE9yZGVyPSJYWVoiO2FpLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIGlsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4odGhpcy5tYXNrJnQubWFzaykhPT0wfWlzRW5hYmxlZCh0KXtyZXR1cm4odGhpcy5tYXNrJigxPDx0fDApKSE9PTB9fSxhTT0wLGxnPW5ldyBULHZyPW5ldyBFZSxSbj1uZXcgd3QsVGE9bmV3IFQsSHM9bmV3IFQsbE09bmV3IFQsY009bmV3IEVlLGNnPW5ldyBUKDEsMCwwKSx1Zz1uZXcgVCgwLDEsMCksaGc9bmV3IFQoMCwwLDEpLHVNPXt0eXBlOiJhZGRlZCJ9LGZnPXt0eXBlOiJyZW1vdmVkIn0sa3Q9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6YU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1rdC5EZWZhdWx0VXAuY2xvbmUoKTtsZXQgdD1uZXcgVCxlPW5ldyBhaSxpPW5ldyBFZSxyPW5ldyBUKDEsMSwxKTtmdW5jdGlvbiBzKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9ZnVuY3Rpb24gbygpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfWUuX29uQ2hhbmdlKHMpLGkuX29uQ2hhbmdlKG8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZX0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnJ9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IHd0fSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBkZX19KSx0aGlzLm1hdHJpeD1uZXcgd3QsdGhpcy5tYXRyaXhXb3JsZD1uZXcgd3QsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPWt0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgaWwsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVJlbmRlcigpe31vbkFmdGVyUmVuZGVyKCl7fWFwcGx5TWF0cml4NCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXgucHJlbXVsdGlwbHkodCksdGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKHQsZSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxlKX1zZXRSb3RhdGlvbkZyb21FdWxlcih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHQsITApfXNldFJvdGF0aW9uRnJvbU1hdHJpeCh0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfXNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9cm90YXRlT25BeGlzKHQsZSl7cmV0dXJuIHZyLnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkodnIpLHRoaXN9cm90YXRlT25Xb3JsZEF4aXModCxlKXtyZXR1cm4gdnIuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh2ciksdGhpc31yb3RhdGVYKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhjZyx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh1Zyx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhoZyx0KX10cmFuc2xhdGVPbkF4aXModCxlKXtyZXR1cm4gbGcuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZChsZy5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhjZyx0KX10cmFuc2xhdGVZKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1Zyx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhoZyx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoUm4uY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9UYS5jb3B5KHQpOlRhLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksSHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9Sbi5sb29rQXQoSHMsVGEsdGhpcy51cCk6Um4ubG9va0F0KFRhLEhzLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoUm4pLHImJihSbi5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCksdnIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJuKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodnIuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KHQucGFyZW50IT09bnVsbCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudCh1TSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2ldKTtyZXR1cm4gdGhpc31sZXQgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuIGUhPT0tMSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoZmcpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IGU9dGhpcy5jaGlsZHJlblt0XTtlLnBhcmVudD1udWxsLGUuZGlzcGF0Y2hFdmVudChmZyl9cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPTAsdGhpc31hdHRhY2godCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdC5wYXJlbnQhPT1udWxsJiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQoUm4pLHRoaXMuYWRkKHQpLHQudXBkYXRlV29ybGRNYXRyaXgoITEsITApLHRoaXN9Z2V0T2JqZWN0QnlJZCh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsdCl9Z2V0T2JqZWN0QnlOYW1lKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoIm5hbWUiLHQpfWdldE9iamVjdEJ5UHJvcGVydHkodCxlKXtpZih0aGlzW3RdPT09ZSlyZXR1cm4gdGhpcztmb3IobGV0IGk9MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k8cjtpKyspe2xldCBvPXRoaXMuY2hpbGRyZW5baV0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG99fWdldFdvcmxkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfWdldFdvcmxkUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoSHMsdCxsTSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShIcyxjTSx0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KGVbOF0sZVs5XSxlWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCBlPXRoaXMucGFyZW50O2UhPT1udWxsJiYodChlKSxlLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7bGV0IGk9dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZpIT09bnVsbCYmaS51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksZT09PSEwKXtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgcz0wLG89ci5sZW5ndGg7czxvO3MrKylyW3NdLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCBlPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixpPXt9O2UmJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxpLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCByPXt9O3IudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKHIubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoci5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKHIucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihyLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoci5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBzKGEsbCl7cmV0dXJuIGFbbC51dWlkXT09PXZvaWQgMCYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9yLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihyLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihyLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtyLmdlb21ldHJ5PXModC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBhPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihhIT09dm9pZCAwJiZhLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9YS5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107cyh0LnNoYXBlcyxoKX1lbHNlIHModC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKHIuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxyLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYocyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxyLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IGE9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKWEucHVzaChzKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtyLm1hdGVyaWFsPWF9ZWxzZSByLm1hdGVyaWFsPXModC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7ci5jaGlsZHJlbj1bXTtmb3IobGV0IGE9MDthPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ErKylyLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlblthXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe3IuYW5pbWF0aW9ucz1bXTtmb3IobGV0IGE9MDthPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7YSsrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbYV07ci5hbmltYXRpb25zLnB1c2gocyh0LmFuaW1hdGlvbnMsbCkpfX1pZihlKXtsZXQgYT1vKHQuZ2VvbWV0cmllcyksbD1vKHQubWF0ZXJpYWxzKSxjPW8odC50ZXh0dXJlcyksdT1vKHQuaW1hZ2VzKSxoPW8odC5zaGFwZXMpLGY9byh0LnNrZWxldG9ucyksZD1vKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihpLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9ZiksZC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1kKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIG8oYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LGU9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxlPT09ITApZm9yKGxldCBpPTA7aTx0LmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCByPXQuY2hpbGRyZW5baV07dGhpcy5hZGQoci5jbG9uZSgpKX1yZXR1cm4gdGhpc319O2t0LkRlZmF1bHRVcD1uZXcgVCgwLDEsMCk7a3QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7a3QucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIFFlPW5ldyBULExuPW5ldyBULG11PW5ldyBULFBuPW5ldyBULF9yPW5ldyBULHdyPW5ldyBULGRnPW5ldyBULGd1PW5ldyBULHh1PW5ldyBULHl1PW5ldyBULHJlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCxpPW5ldyBUKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9aX1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxpLHIpe3Iuc3ViVmVjdG9ycyhpLGUpLFFlLnN1YlZlY3RvcnModCxlKSxyLmNyb3NzKFFlKTtsZXQgcz1yLmxlbmd0aFNxKCk7cmV0dXJuIHM+MD9yLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KHMpKTpyLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsaSxyLHMpe1FlLnN1YlZlY3RvcnMocixlKSxMbi5zdWJWZWN0b3JzKGksZSksbXUuc3ViVmVjdG9ycyh0LGUpO2xldCBvPVFlLmRvdChRZSksYT1RZS5kb3QoTG4pLGw9UWUuZG90KG11KSxjPUxuLmRvdChMbiksdT1Mbi5kb3QobXUpLGg9bypjLWEqYTtpZihoPT09MClyZXR1cm4gcy5zZXQoLTIsLTEsLTEpO2xldCBmPTEvaCxkPShjKmwtYSp1KSpmLGc9KG8qdS1hKmwpKmY7cmV0dXJuIHMuc2V0KDEtZC1nLGcsZCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLGkscil7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsUG4pLFBuLng+PTAmJlBuLnk+PTAmJlBuLngrUG4ueTw9MX1zdGF0aWMgZ2V0VVYodCxlLGkscixzLG8sYSxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixQbiksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihzLFBuLngpLGwuYWRkU2NhbGVkVmVjdG9yKG8sUG4ueSksbC5hZGRTY2FsZWRWZWN0b3IoYSxQbi56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxpLHIpe3JldHVybiBRZS5zdWJWZWN0b3JzKGksZSksTG4uc3ViVmVjdG9ycyh0LGUpLFFlLmNyb3NzKExuKS5kb3Qocik8MH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShpKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W2ldKSx0aGlzLmMuY29weSh0W3JdKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsaSksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gUWUuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxMbi5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLFFlLmNyb3NzKExuKS5sZW5ndGgoKSouNX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiByZS5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxlKXtyZXR1cm4gcmUuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLGkscixzKXtyZXR1cm4gcmUuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlLGkscixzKX1jb250YWluc1BvaW50KHQpe3JldHVybiByZS5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIHJlLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2xldCBpPXRoaXMuYSxyPXRoaXMuYixzPXRoaXMuYyxvLGE7X3Iuc3ViVmVjdG9ycyhyLGkpLHdyLnN1YlZlY3RvcnMocyxpKSxndS5zdWJWZWN0b3JzKHQsaSk7bGV0IGw9X3IuZG90KGd1KSxjPXdyLmRvdChndSk7aWYobDw9MCYmYzw9MClyZXR1cm4gZS5jb3B5KGkpO3h1LnN1YlZlY3RvcnModCxyKTtsZXQgdT1fci5kb3QoeHUpLGg9d3IuZG90KHh1KTtpZih1Pj0wJiZoPD11KXJldHVybiBlLmNvcHkocik7bGV0IGY9bCpoLXUqYztpZihmPD0wJiZsPj0wJiZ1PD0wKXJldHVybiBvPWwvKGwtdSksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihfcixvKTt5dS5zdWJWZWN0b3JzKHQscyk7bGV0IGQ9X3IuZG90KHl1KSxnPXdyLmRvdCh5dSk7aWYoZz49MCYmZDw9ZylyZXR1cm4gZS5jb3B5KHMpO2xldCB4PWQqYy1sKmc7aWYoeDw9MCYmYz49MCYmZzw9MClyZXR1cm4gYT1jLyhjLWcpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3Iod3IsYSk7bGV0IHY9dSpnLWQqaDtpZih2PD0wJiZoLXU+PTAmJmQtZz49MClyZXR1cm4gZGcuc3ViVmVjdG9ycyhzLHIpLGE9KGgtdSkvKGgtdSsoZC1nKSksZS5jb3B5KHIpLmFkZFNjYWxlZFZlY3RvcihkZyxhKTtsZXQgbT0xLyh2K3grZik7cmV0dXJuIG89eCptLGE9ZiptLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoX3IsbykuYWRkU2NhbGVkVmVjdG9yKHdyLGEpfWVxdWFscyh0KXtyZXR1cm4gdC5hLmVxdWFscyh0aGlzLmEpJiZ0LmIuZXF1YWxzKHRoaXMuYikmJnQuYy5lcXVhbHModGhpcy5jKX19LGhNPTAseGU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aE0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPUtzLHRoaXMuc2lkZT1lbyx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9dTAsdGhpcy5ibGVuZERzdD1oMCx0aGlzLmJsZW5kRXF1YXRpb249SXIsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz16dSx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPXRNLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW51LHRoaXMuc3RlbmNpbFpGYWlsPW51LHRoaXMuc3RlbmNpbFpQYXNzPW51LHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCBlIGluIHQpe2xldCBpPXRbZV07aWYoaT09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKGU9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9aT09PWMwO2NvbnRpbnVlfWxldCByPXRoaXNbZV07aWYocj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIik7Y29udGludWV9ciYmci5pc0NvbG9yP3Iuc2V0KGkpOnImJnIuaXNWZWN0b3IzJiZpJiZpLmlzVmVjdG9yMz9yLmNvcHkoaSk6dGhpc1tlXT1pfX10b0pTT04odCl7bGV0IGU9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciO2UmJih0PXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIixnZW5lcmF0b3I6Ik1hdGVyaWFsLnRvSlNPTiJ9fTtpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJihpLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLmlzQ29sb3ImJihpLmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCkpLHRoaXMucm91Z2huZXNzIT09dm9pZCAwJiYoaS5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3MpLHRoaXMubWV0YWxuZXNzIT09dm9pZCAwJiYoaS5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpLHRoaXMuc2hlZW4hPT12b2lkIDAmJihpLnNoZWVuPXRoaXMuc2hlZW4pLHRoaXMuc2hlZW5Db2xvciYmdGhpcy5zaGVlbkNvbG9yLmlzQ29sb3ImJihpLnNoZWVuQ29sb3I9dGhpcy5zaGVlbkNvbG9yLmdldEhleCgpKSx0aGlzLnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10aGlzLnNoZWVuUm91Z2huZXNzKSx0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihpLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJnRoaXMuZW1pc3NpdmVJbnRlbnNpdHkhPT0xJiYoaS5lbWlzc2l2ZUludGVuc2l0eT10aGlzLmVtaXNzaXZlSW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyJiZ0aGlzLnNwZWN1bGFyLmlzQ29sb3ImJihpLnNwZWN1bGFyPXRoaXMuc3BlY3VsYXIuZ2V0SGV4KCkpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHkhPT12b2lkIDAmJihpLnNwZWN1bGFySW50ZW5zaXR5PXRoaXMuc3BlY3VsYXJJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXJDb2xvciYmdGhpcy5zcGVjdWxhckNvbG9yLmlzQ29sb3ImJihpLnNwZWN1bGFyQ29sb3I9dGhpcy5zcGVjdWxhckNvbG9yLmdldEhleCgpKSx0aGlzLnNoaW5pbmVzcyE9PXZvaWQgMCYmKGkuc2hpbmluZXNzPXRoaXMuc2hpbmluZXNzKSx0aGlzLmNsZWFyY29hdCE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0PXRoaXMuY2xlYXJjb2F0KSx0aGlzLmNsZWFyY29hdFJvdWdobmVzcyE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzKSx0aGlzLmNsZWFyY29hdE1hcCYmdGhpcy5jbGVhcmNvYXRNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXRNYXA9dGhpcy5jbGVhcmNvYXRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZ0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD10aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAmJnRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Tm9ybWFsTWFwPXRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihpLm1hcD10aGlzLm1hcC50b0pTT04odCkudXVpZCksdGhpcy5tYXRjYXAmJnRoaXMubWF0Y2FwLmlzVGV4dHVyZSYmKGkubWF0Y2FwPXRoaXMubWF0Y2FwLnRvSlNPTih0KS51dWlkKSx0aGlzLmFscGhhTWFwJiZ0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSYmKGkuYWxwaGFNYXA9dGhpcy5hbHBoYU1hcC50b0pTT04odCkudXVpZCksdGhpcy5saWdodE1hcCYmdGhpcy5saWdodE1hcC5pc1RleHR1cmUmJihpLmxpZ2h0TWFwPXRoaXMubGlnaHRNYXAudG9KU09OKHQpLnV1aWQsaS5saWdodE1hcEludGVuc2l0eT10aGlzLmxpZ2h0TWFwSW50ZW5zaXR5KSx0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKGkuYW9NYXA9dGhpcy5hb01hcC50b0pTT04odCkudXVpZCxpLmFvTWFwSW50ZW5zaXR5PXRoaXMuYW9NYXBJbnRlbnNpdHkpLHRoaXMuYnVtcE1hcCYmdGhpcy5idW1wTWFwLmlzVGV4dHVyZSYmKGkuYnVtcE1hcD10aGlzLmJ1bXBNYXAudG9KU09OKHQpLnV1aWQsaS5idW1wU2NhbGU9dGhpcy5idW1wU2NhbGUpLHRoaXMubm9ybWFsTWFwJiZ0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUmJihpLm5vcm1hbE1hcD10aGlzLm5vcm1hbE1hcC50b0pTT04odCkudXVpZCxpLm5vcm1hbE1hcFR5cGU9dGhpcy5ub3JtYWxNYXBUeXBlLGkubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihpLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04odCkudXVpZCxpLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsaS5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50QmlhcyksdGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYoaS5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyTWFwJiZ0aGlzLnNwZWN1bGFyTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJNYXA9dGhpcy5zcGVjdWxhck1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCYmdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFySW50ZW5zaXR5TWFwPXRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJDb2xvck1hcCYmdGhpcy5zcGVjdWxhckNvbG9yTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJDb2xvck1hcD10aGlzLnNwZWN1bGFyQ29sb3JNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihpLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04odCkudXVpZCx0aGlzLmNvbWJpbmUhPT12b2lkIDAmJihpLmNvbWJpbmU9dGhpcy5jb21iaW5lKSksdGhpcy5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSksdGhpcy5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSksdGhpcy5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10aGlzLnJlZnJhY3Rpb25SYXRpbyksdGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihpLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dGhpcy50cmFuc21pc3Npb24pLHRoaXMudHJhbnNtaXNzaW9uTWFwJiZ0aGlzLnRyYW5zbWlzc2lvbk1hcC5pc1RleHR1cmUmJihpLnRyYW5zbWlzc2lvbk1hcD10aGlzLnRyYW5zbWlzc2lvbk1hcC50b0pTT04odCkudXVpZCksdGhpcy50aGlja25lc3MhPT12b2lkIDAmJihpLnRoaWNrbmVzcz10aGlzLnRoaWNrbmVzcyksdGhpcy50aGlja25lc3NNYXAmJnRoaXMudGhpY2tuZXNzTWFwLmlzVGV4dHVyZSYmKGkudGhpY2tuZXNzTWFwPXRoaXMudGhpY2tuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uRGlzdGFuY2U9dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlKSx0aGlzLmF0dGVudWF0aW9uQ29sb3IhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uQ29sb3I9dGhpcy5hdHRlbnVhdGlvbkNvbG9yLmdldEhleCgpKSx0aGlzLnNpemUhPT12b2lkIDAmJihpLnNpemU9dGhpcy5zaXplKSx0aGlzLnNoYWRvd1NpZGUhPT1udWxsJiYoaS5zaGFkb3dTaWRlPXRoaXMuc2hhZG93U2lkZSksdGhpcy5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10aGlzLnNpemVBdHRlbnVhdGlvbiksdGhpcy5ibGVuZGluZyE9PUtzJiYoaS5ibGVuZGluZz10aGlzLmJsZW5kaW5nKSx0aGlzLnNpZGUhPT1lbyYmKGkuc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYoaS5vcGFjaXR5PXRoaXMub3BhY2l0eSksdGhpcy50cmFuc3BhcmVudD09PSEwJiYoaS50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxpLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxpLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxpLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLGkuY29sb3JXcml0ZT10aGlzLmNvbG9yV3JpdGUsaS5hbHBoYVdyaXRlPXRoaXMuYWxwaGFXcml0ZSxpLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxpLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLGkuc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxpLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLGkuc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLGkuc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxpLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxpLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiZ0aGlzLnJvdGF0aW9uIT09MCYmKGkucm90YXRpb249dGhpcy5yb3RhdGlvbiksdGhpcy5wb2x5Z29uT2Zmc2V0PT09ITAmJihpLnBvbHlnb25PZmZzZXQ9ITApLHRoaXMucG9seWdvbk9mZnNldEZhY3RvciE9PTAmJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSx0aGlzLnBvbHlnb25PZmZzZXRVbml0cyE9PTAmJihpLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJnRoaXMubGluZXdpZHRoIT09MSYmKGkubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx0aGlzLmRhc2hTaXplIT09dm9pZCAwJiYoaS5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx0aGlzLmdhcFNpemUhPT12b2lkIDAmJihpLmdhcFNpemU9dGhpcy5nYXBTaXplKSx0aGlzLnNjYWxlIT09dm9pZCAwJiYoaS5zY2FsZT10aGlzLnNjYWxlKSx0aGlzLmRpdGhlcmluZz09PSEwJiYoaS5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihpLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksdGhpcy5hbHBoYVRvQ292ZXJhZ2U9PT0hMCYmKGkuYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT09PSEwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLHRoaXMud2lyZWZyYW1lPT09ITAmJihpLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSx0aGlzLndpcmVmcmFtZUxpbmVjYXAhPT0icm91bmQiJiYoaS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksdGhpcy53aXJlZnJhbWVMaW5lam9pbiE9PSJyb3VuZCImJihpLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLHRoaXMuZmxhdFNoYWRpbmc9PT0hMCYmKGkuZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMudG9uZU1hcHBlZD09PSExJiYoaS50b25lTWFwcGVkPSExKSxKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpO2Z1bmN0aW9uIHIocyl7bGV0IG89W107Zm9yKGxldCBhIGluIHMpe2xldCBsPXNbYV07ZGVsZXRlIGwubWV0YWRhdGEsby5wdXNoKGwpfXJldHVybiBvfWlmKGUpe2xldCBzPXIodC50ZXh0dXJlcyksbz1yKHQuaW1hZ2VzKTtzLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1zKSxvLmxlbmd0aD4wJiYoaS5pbWFnZXM9byl9cmV0dXJuIGl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmZvZz10LmZvZyx0aGlzLmJsZW5kaW5nPXQuYmxlbmRpbmcsdGhpcy5zaWRlPXQuc2lkZSx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7bGV0IGU9dC5jbGlwcGluZ1BsYW5lcyxpPW51bGw7aWYoZSE9PW51bGwpe2xldCByPWUubGVuZ3RoO2k9bmV3IEFycmF5KHIpO2ZvcihsZXQgcz0wO3MhPT1yOysrcylpW3NdPWVbc10uY2xvbmUoKX1yZXR1cm4gdGhpcy5jbGlwcGluZ1BsYW5lcz1pLHRoaXMuY2xpcEludGVyc2VjdGlvbj10LmNsaXBJbnRlcnNlY3Rpb24sdGhpcy5jbGlwU2hhZG93cz10LmNsaXBTaGFkb3dzLHRoaXMuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUsdGhpcy5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSx0aGlzLmFscGhhV3JpdGU9dC5hbHBoYVdyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLmFscGhhVG9Db3ZlcmFnZT10LmFscGhhVG9Db3ZlcmFnZSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt4ZS5wcm90b3R5cGUuaXNNYXRlcmlhbD0hMDt2YXIga2k9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUNsLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O2tpLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO3ZhciBKdD1uZXcgVCxBYT1uZXcgSyxRdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9lOjAsdGhpcy5ub3JtYWxpemVkPWk9PT0hMCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MH1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LGUsaSl7dCo9dGhpcy5pdGVtU2l6ZSxpKj1lLml0ZW1TaXplO2ZvcihsZXQgcj0wLHM9dGhpcy5pdGVtU2l6ZTtyPHM7cisrKXRoaXMuYXJyYXlbdCtyXT1lLmFycmF5W2krcl07cmV0dXJuIHRoaXN9Y29weUFycmF5KHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfWNvcHlDb2xvcnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IGZ0KSxlW2krK109by5yLGVbaSsrXT1vLmcsZVtpKytdPW8uYn1yZXR1cm4gdGhpc31jb3B5VmVjdG9yMnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IEspLGVbaSsrXT1vLngsZVtpKytdPW8ueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IFQpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgV3QpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56LGVbaSsrXT1vLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUFhLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxBYS5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLEFhLngsQWEueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksSnQuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsSnQueCxKdC55LEp0LnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC54PXRoaXMuZ2V0WChlKSxKdC55PXRoaXMuZ2V0WShlKSxKdC56PXRoaXMuZ2V0WihlKSxKdC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspSnQueD10aGlzLmdldFgoZSksSnQueT10aGlzLmdldFkoZSksSnQuej10aGlzLmdldFooZSksSnQuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUp0Lng9dGhpcy5nZXRYKGUpLEp0Lnk9dGhpcy5nZXRZKGUpLEp0Lno9dGhpcy5nZXRaKGUpLEp0LnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLEp0LngsSnQueSxKdC56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIscyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPXMsdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1pbyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O1F0LnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgcmw9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsaSl9fTt2YXIgc2w9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQzMkFycmF5KHQpLGUsaSl9fSxXdT1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19O1d1LnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGVlPWNsYXNzIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19O3ZhciBmTT0wLHFlPW5ldyB3dCx2dT1uZXcga3QsTXI9bmV3IFQsSGU9bmV3IEdlLFZzPW5ldyBHZSxnZT1uZXcgVCxIdD1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpmTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KHAwKHQpP3NsOnJsKSh0LDEpOnRoaXMuaW5kZXg9dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdIT09dm9pZCAwfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO2UhPT12b2lkIDAmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKGkhPT12b2lkIDApe2xldCBzPW5ldyBkZSgpLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KHMpLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHIhPT12b2lkIDAmJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSx0aGlzLmJvdW5kaW5nQm94IT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nU3BoZXJlIT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31yb3RhdGVZKHQpe3JldHVybiBxZS5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KHFlKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIHFlLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4gcWUubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIHFlLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9bG9va0F0KHQpe3JldHVybiB2dS5sb29rQXQodCksdnUudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQodnUubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKE1yKS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShNci54LE1yLnksTXIueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dFtpXTtlLnB1c2gocy54LHMueSxzLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe3RoaXMuYm91bmRpbmdCb3g9PT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1uZXcgR2UpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdCb3guc2V0KG5ldyBUKC0xLzAsLTEvMCwtMS8wKSxuZXcgVCgxLzAsMS8wLDEvMCkpO3JldHVybn1pZih0IT09dm9pZCAwKXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspe2xldCBzPWVbaV07SGUuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShzKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLEhlLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSxnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LEhlLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5tYXgpKX19ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe3RoaXMuYm91bmRpbmdTcGhlcmU9PT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgc2kpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KG5ldyBULDEvMCk7cmV0dXJufWlmKHQpe2xldCBpPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKEhlLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHM9MCxvPWUubGVuZ3RoO3M8bztzKyspe2xldCBhPWVbc107VnMuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShhKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKEhlLm1pbixWcy5taW4pLEhlLmV4cGFuZEJ5UG9pbnQoZ2UpLGdlLmFkZFZlY3RvcnMoSGUubWF4LFZzLm1heCksSGUuZXhwYW5kQnlQb2ludChnZSkpOihIZS5leHBhbmRCeVBvaW50KFZzLm1pbiksSGUuZXhwYW5kQnlQb2ludChWcy5tYXgpKX1IZS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IHM9MCxvPXQuY291bnQ7czxvO3MrKylnZS5mcm9tQnVmZmVyQXR0cmlidXRlKHQscykscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKTtpZihlKWZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVtzXSxsPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBjPTAsdT1hLmNvdW50O2M8dTtjKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLGwmJihNci5mcm9tQnVmZmVyQXR0cmlidXRlKHQsYyksZ2UuYWRkKE1yKSkscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQociksaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19Y29tcHV0ZVRhbmdlbnRzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZih0PT09bnVsbHx8ZS5wb3NpdGlvbj09PXZvaWQgMHx8ZS5ub3JtYWw9PT12b2lkIDB8fGUudXY9PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO3JldHVybn1sZXQgaT10LmFycmF5LHI9ZS5wb3NpdGlvbi5hcnJheSxzPWUubm9ybWFsLmFycmF5LG89ZS51di5hcnJheSxhPXIubGVuZ3RoLzM7ZS50YW5nZW50PT09dm9pZCAwJiZ0aGlzLnNldEF0dHJpYnV0ZSgidGFuZ2VudCIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoNCphKSw0KSk7bGV0IGw9ZS50YW5nZW50LmFycmF5LGM9W10sdT1bXTtmb3IobGV0IFg9MDtYPGE7WCsrKWNbWF09bmV3IFQsdVtYXT1uZXcgVDtsZXQgaD1uZXcgVCxmPW5ldyBULGQ9bmV3IFQsZz1uZXcgSyx4PW5ldyBLLHY9bmV3IEssbT1uZXcgVCxwPW5ldyBUO2Z1bmN0aW9uIGIoWCx5LFIpe2guZnJvbUFycmF5KHIsWCozKSxmLmZyb21BcnJheShyLHkqMyksZC5mcm9tQXJyYXkocixSKjMpLGcuZnJvbUFycmF5KG8sWCoyKSx4LmZyb21BcnJheShvLHkqMiksdi5mcm9tQXJyYXkobyxSKjIpLGYuc3ViKGgpLGQuc3ViKGgpLHguc3ViKGcpLHYuc3ViKGcpO2xldCBEPTEvKHgueCp2Lnktdi54KngueSk7IWlzRmluaXRlKEQpfHwobS5jb3B5KGYpLm11bHRpcGx5U2NhbGFyKHYueSkuYWRkU2NhbGVkVmVjdG9yKGQsLXgueSkubXVsdGlwbHlTY2FsYXIoRCkscC5jb3B5KGQpLm11bHRpcGx5U2NhbGFyKHgueCkuYWRkU2NhbGVkVmVjdG9yKGYsLXYueCkubXVsdGlwbHlTY2FsYXIoRCksY1tYXS5hZGQobSksY1t5XS5hZGQobSksY1tSXS5hZGQobSksdVtYXS5hZGQocCksdVt5XS5hZGQocCksdVtSXS5hZGQocCkpfWxldCBfPXRoaXMuZ3JvdXBzO18ubGVuZ3RoPT09MCYmKF89W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKWIoaVt6KzBdLGlbeisxXSxpW3orMl0pfWxldCBTPW5ldyBULEw9bmV3IFQsQT1uZXcgVCxIPW5ldyBUO2Z1bmN0aW9uIHR0KFgpe0EuZnJvbUFycmF5KHMsWCozKSxILmNvcHkoQSk7bGV0IHk9Y1tYXTtTLmNvcHkoeSksUy5zdWIoQS5tdWx0aXBseVNjYWxhcihBLmRvdCh5KSkpLm5vcm1hbGl6ZSgpLEwuY3Jvc3NWZWN0b3JzKEgseSk7bGV0IEQ9TC5kb3QodVtYXSk8MD8tMToxO2xbWCo0XT1TLngsbFtYKjQrMV09Uy55LGxbWCo0KzJdPVMueixsW1gqNCszXT1EfWZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKXR0KGlbeiswXSksdHQoaVt6KzFdKSx0dChpW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihlIT09dm9pZCAwKXtsZXQgaT10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYoaT09PXZvaWQgMClpPW5ldyBRdChuZXcgRmxvYXQzMkFycmF5KGUuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsaSk7ZWxzZSBmb3IobGV0IGY9MCxkPWkuY291bnQ7ZjxkO2YrKylpLnNldFhZWihmLDAsMCwwKTtsZXQgcj1uZXcgVCxzPW5ldyBULG89bmV3IFQsYT1uZXcgVCxsPW5ldyBULGM9bmV3IFQsdT1uZXcgVCxoPW5ldyBUO2lmKHQpZm9yKGxldCBmPTAsZD10LmNvdW50O2Y8ZDtmKz0zKXtsZXQgZz10LmdldFgoZiswKSx4PXQuZ2V0WChmKzEpLHY9dC5nZXRYKGYrMik7ci5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZykscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUseCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdiksdS5zdWJWZWN0b3JzKG8scyksaC5zdWJWZWN0b3JzKHIscyksdS5jcm9zcyhoKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxnKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx4KSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx2KSxhLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxpLnNldFhZWihnLGEueCxhLnksYS56KSxpLnNldFhZWih4LGwueCxsLnksbC56KSxpLnNldFhZWih2LGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLGQ9ZS5jb3VudDtmPGQ7Zis9MylyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxmKzApLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYrMSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZisyKSx1LnN1YlZlY3RvcnMobyxzKSxoLnN1YlZlY3RvcnMocixzKSx1LmNyb3NzKGgpLGkuc2V0WFlaKGYrMCx1LngsdS55LHUueiksaS5zZXRYWVooZisxLHUueCx1LnksdS56KSxpLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLGkubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQsZSl7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59ZT09PXZvaWQgMCYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCByIGluIGkpe2lmKHQuYXR0cmlidXRlc1tyXT09PXZvaWQgMCljb250aW51ZTtsZXQgbz1pW3JdLmFycmF5LGE9dC5hdHRyaWJ1dGVzW3JdLGw9YS5hcnJheSxjPWEuaXRlbVNpemUqZSx1PU1hdGgubWluKGwubGVuZ3RoLG8ubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylvW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLGdlLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKGUsZ2UueCxnZS55LGdlLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQoYSxsKXtsZXQgYz1hLmFycmF5LHU9YS5pdGVtU2l6ZSxoPWEubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLGQ9MCxnPTA7Zm9yKGxldCB4PTAsdj1sLmxlbmd0aDt4PHY7eCsrKXthLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/ZD1sW3hdKmEuZGF0YS5zdHJpZGUrYS5vZmZzZXQ6ZD1sW3hdKnU7Zm9yKGxldCBtPTA7bTx1O20rKylmW2crK109Y1tkKytdfXJldHVybiBuZXcgUXQoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IGU9bmV3IEh0LGk9dGhpcy5pbmRleC5hcnJheSxyPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGEgaW4gcil7bGV0IGw9clthXSxjPXQobCxpKTtlLnNldEF0dHJpYnV0ZShhLGMpfWxldCBzPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiBzKXtsZXQgbD1bXSxjPXNbYV07Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLGQ9dChmLGkpO2wucHVzaChkKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPW8ubGVuZ3RoO2E8bDthKyspe2xldCBjPW9bYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O2UhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl7bGV0IGM9aVtsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCByPXt9LHM9ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IGQ9Y1toXTt1LnB1c2goZC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKHJbbF09dSxzPSEwKX1zJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgbz10aGlzLmdyb3VwcztvLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG8pKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gYSE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IGU9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgaT10LmluZGV4O2khPT1udWxsJiZ0aGlzLnNldEluZGV4KGkuY2xvbmUoZSkpO2xldCByPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gcil7bGV0IHU9cltjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUoZSkpfWxldCBzPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBzKXtsZXQgdT1bXSxoPXNbY107Zm9yKGxldCBmPTAsZD1oLmxlbmd0aDtmPGQ7ZisrKXUucHVzaChoW2ZdLmNsb25lKGUpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PW8ubGVuZ3RoO2M8dTtjKyspe2xldCBoPW9bY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgYT10LmJvdW5kaW5nQm94O2EhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1hLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtIdC5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgcGc9bmV3IHd0LGJyPW5ldyBvaSxfdT1uZXcgc2ksSm49bmV3IFQsJG49bmV3IFQsS249bmV3IFQsd3U9bmV3IFQsTXU9bmV3IFQsYnU9bmV3IFQsQ2E9bmV3IFQsUmE9bmV3IFQsTGE9bmV3IFQsUGE9bmV3IEssRGE9bmV3IEssSWE9bmV3IEssU3U9bmV3IFQsTmE9bmV3IFQsb2U9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0PW5ldyBIdCxlPW5ldyBraSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYociE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXtsZXQgYT1yW3NdLm5hbWV8fFN0cmluZyhzKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPXN9fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0cztlIT09dm9pZCAwJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRlcmlhbCxzPXRoaXMubWF0cml4V29ybGQ7aWYocj09PXZvaWQgMHx8KGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLF91LmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksX3UuYXBwbHlNYXRyaXg0KHMpLHQucmF5LmludGVyc2VjdHNTcGhlcmUoX3UpPT09ITEpfHwocGcuY29weShzKS5pbnZlcnQoKSxici5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQocGcpLGkuYm91bmRpbmdCb3ghPT1udWxsJiZici5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpPT09ITEpKXJldHVybjtsZXQgbztpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsaD1pLmF0dHJpYnV0ZXMudXYsZj1pLmF0dHJpYnV0ZXMudXYyLGQ9aS5ncm91cHMsZz1pLmRyYXdSYW5nZTtpZihhIT09bnVsbClpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgeD0wLHY9ZC5sZW5ndGg7eDx2O3grKyl7bGV0IG09ZFt4XSxwPXJbbS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KG0uc3RhcnQsZy5zdGFydCksXz1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKG0uc3RhcnQrbS5jb3VudCxnLnN0YXJ0K2cuY291bnQpKTtmb3IobGV0IFM9YixMPV87UzxMO1MrPTMpe2xldCBBPWEuZ2V0WChTKSxIPWEuZ2V0WChTKzEpLHR0PWEuZ2V0WChTKzIpO289RmEodGhpcyxwLHQsYnIsbCxjLHUsaCxmLEEsSCx0dCksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IoUy8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1tLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX19ZWxzZXtsZXQgeD1NYXRoLm1heCgwLGcuc3RhcnQpLHY9TWF0aC5taW4oYS5jb3VudCxnLnN0YXJ0K2cuY291bnQpO2ZvcihsZXQgbT14LHA9djttPHA7bSs9Myl7bGV0IGI9YS5nZXRYKG0pLF89YS5nZXRYKG0rMSksUz1hLmdldFgobSsyKTtvPUZhKHRoaXMscix0LGJyLGwsYyx1LGgsZixiLF8sUyksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IobS8zKSxlLnB1c2gobykpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IHg9MCx2PWQubGVuZ3RoO3g8djt4Kyspe2xldCBtPWRbeF0scD1yW20ubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heChtLnN0YXJ0LGcuc3RhcnQpLF89TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbihtLnN0YXJ0K20uY291bnQsZy5zdGFydCtnLmNvdW50KSk7Zm9yKGxldCBTPWIsTD1fO1M8TDtTKz0zKXtsZXQgQT1TLEg9UysxLHR0PVMrMjtvPUZhKHRoaXMscCx0LGJyLGwsYyx1LGgsZixBLEgsdHQpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKFMvMyksby5mYWNlLm1hdGVyaWFsSW5kZXg9bS5tYXRlcmlhbEluZGV4LGUucHVzaChvKSl9fWVsc2V7bGV0IHg9TWF0aC5tYXgoMCxnLnN0YXJ0KSx2PU1hdGgubWluKGwuY291bnQsZy5zdGFydCtnLmNvdW50KTtmb3IobGV0IG09eCxwPXY7bTxwO20rPTMpe2xldCBiPW0sXz1tKzEsUz1tKzI7bz1GYSh0aGlzLHIsdCxicixsLGMsdSxoLGYsYixfLFMpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG0vMyksZS5wdXNoKG8pKX19fWVsc2UgaS5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX07b2UucHJvdG90eXBlLmlzTWVzaD0hMDtmdW5jdGlvbiBkTShuLHQsZSxpLHIscyxvLGEpe2xldCBsO2lmKHQuc2lkZT09PWhlP2w9aS5pbnRlcnNlY3RUcmlhbmdsZShvLHMsciwhMCxhKTpsPWkuaW50ZXJzZWN0VHJpYW5nbGUocixzLG8sdC5zaWRlIT09SHIsYSksbD09PW51bGwpcmV0dXJuIG51bGw7TmEuY29weShhKSxOYS5hcHBseU1hdHJpeDQobi5tYXRyaXhXb3JsZCk7bGV0IGM9ZS5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTmEpO3JldHVybiBjPGUubmVhcnx8Yz5lLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50Ok5hLmNsb25lKCksb2JqZWN0Om59fWZ1bmN0aW9uIEZhKG4sdCxlLGkscixzLG8sYSxsLGMsdSxoKXtKbi5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksJG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLEtuLmZyb21CdWZmZXJBdHRyaWJ1dGUocixoKTtsZXQgZj1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihzJiZmKXtDYS5zZXQoMCwwLDApLFJhLnNldCgwLDAsMCksTGEuc2V0KDAsMCwwKTtmb3IobGV0IGc9MCx4PXMubGVuZ3RoO2c8eDtnKyspe2xldCB2PWZbZ10sbT1zW2ddO3YhPT0wJiYod3UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLGMpLE11LmZyb21CdWZmZXJBdHRyaWJ1dGUobSx1KSxidS5mcm9tQnVmZmVyQXR0cmlidXRlKG0saCksbz8oQ2EuYWRkU2NhbGVkVmVjdG9yKHd1LHYpLFJhLmFkZFNjYWxlZFZlY3RvcihNdSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUsdikpOihDYS5hZGRTY2FsZWRWZWN0b3Iod3Uuc3ViKEpuKSx2KSxSYS5hZGRTY2FsZWRWZWN0b3IoTXUuc3ViKCRuKSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUuc3ViKEtuKSx2KSkpfUpuLmFkZChDYSksJG4uYWRkKFJhKSxLbi5hZGQoTGEpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLEpuKSxuLmJvbmVUcmFuc2Zvcm0odSwkbiksbi5ib25lVHJhbnNmb3JtKGgsS24pKTtsZXQgZD1kTShuLHQsZSxpLEpuLCRuLEtuLFN1KTtpZihkKXthJiYoUGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLERhLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxJYS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsaCksZC51dj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpLGwmJihQYS5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksRGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLElhLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxkLnV2Mj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpO2xldCBnPXthOmMsYjp1LGM6aCxub3JtYWw6bmV3IFQsbWF0ZXJpYWxJbmRleDowfTtyZS5nZXROb3JtYWwoSm4sJG4sS24sZy5ub3JtYWwpLGQuZmFjZT1nfXJldHVybiBkfXZhciBIaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxzPTEsbz0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpzLGRlcHRoU2VnbWVudHM6b307bGV0IGE9dGhpcztyPU1hdGguZmxvb3Iocikscz1NYXRoLmZsb29yKHMpLG89TWF0aC5mbG9vcihvKTtsZXQgbD1bXSxjPVtdLHU9W10saD1bXSxmPTAsZD0wO2coInoiLCJ5IiwieCIsLTEsLTEsaSxlLHQsbyxzLDApLGcoInoiLCJ5IiwieCIsMSwtMSxpLGUsLXQsbyxzLDEpLGcoIngiLCJ6IiwieSIsMSwxLHQsaSxlLHIsbywyKSxnKCJ4IiwieiIsInkiLDEsLTEsdCxpLC1lLHIsbywzKSxnKCJ4IiwieSIsInoiLDEsLTEsdCxlLGkscixzLDQpLGcoIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1pLHIscyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBlZSh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShoLDIpKTtmdW5jdGlvbiBnKHgsdixtLHAsYixfLFMsTCxBLEgsdHQpe2xldCBYPV8vQSx5PVMvSCxSPV8vMixEPVMvMixGPUwvMix6PUErMSxOPUgrMSxWPTAsUT0wLGF0PW5ldyBUO2ZvcihsZXQgRz0wO0c8TjtHKyspe2xldCAkPUcqeS1EO2ZvcihsZXQgbHQ9MDtsdDx6O2x0Kyspe2xldCBkdD1sdCpYLVI7YXRbeF09ZHQqcCxhdFt2XT0kKmIsYXRbbV09RixjLnB1c2goYXQueCxhdC55LGF0LnopLGF0W3hdPTAsYXRbdl09MCxhdFttXT1MPjA/MTotMSx1LnB1c2goYXQueCxhdC55LGF0LnopLGgucHVzaChsdC9BKSxoLnB1c2goMS1HL0gpLFYrPTF9fWZvcihsZXQgRz0wO0c8SDtHKyspZm9yKGxldCAkPTA7JDxBOyQrKyl7bGV0IGx0PWYrJCt6KkcsZHQ9ZiskK3oqKEcrMSkseHQ9ZisoJCsxKSt6KihHKzEpLGs9ZisoJCsxKSt6Kkc7bC5wdXNoKGx0LGR0LGspLGwucHVzaChkdCx4dCxrKSxRKz02fWEuYWRkR3JvdXAoZCxRLHR0KSxkKz1RLGYrPVZ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEhpKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gR3Iobil7bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe3RbZV09e307Zm9yKGxldCBpIGluIG5bZV0pe2xldCByPW5bZV1baV07ciYmKHIuaXNDb2xvcnx8ci5pc01hdHJpeDN8fHIuaXNNYXRyaXg0fHxyLmlzVmVjdG9yMnx8ci5pc1ZlY3RvcjN8fHIuaXNWZWN0b3I0fHxyLmlzVGV4dHVyZXx8ci5pc1F1YXRlcm5pb24pP3RbZV1baV09ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/dFtlXVtpXT1yLnNsaWNlKCk6dFtlXVtpXT1yfX1yZXR1cm4gdH1mdW5jdGlvbiBNZShuKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9R3IobltlXSk7Zm9yKGxldCByIGluIGkpdFtyXT1pW3JdfXJldHVybiB0fXZhciBwTT17Y2xvbmU6R3IsbWVyZ2U6TWV9LG1NPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLGdNPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsRm49Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPW1NLHRoaXMuZnJhZ21lbnRTaGFkZXI9Z00sdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdCE9PXZvaWQgMCYmKHQuYXR0cmlidXRlcyE9PXZvaWQgMCYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9R3IodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2ZvcihsZXQgciBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgbz10aGlzLnVuaWZvcm1zW3JdLnZhbHVlO28mJm8uaXNUZXh0dXJlP2UudW5pZm9ybXNbcl09e3R5cGU6InQiLHZhbHVlOm8udG9KU09OKHQpLnV1aWR9Om8mJm8uaXNDb2xvcj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJjIix2YWx1ZTpvLmdldEhleCgpfTpvJiZvLmlzVmVjdG9yMj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJ2MiIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3IzP2UudW5pZm9ybXNbcl09e3R5cGU6InYzIix2YWx1ZTpvLnRvQXJyYXkoKX06byYmby5pc1ZlY3RvcjQ/ZS51bmlmb3Jtc1tyXT17dHlwZToidjQiLHZhbHVlOm8udG9BcnJheSgpfTpvJiZvLmlzTWF0cml4Mz9lLnVuaWZvcm1zW3JdPXt0eXBlOiJtMyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXg0P2UudW5pZm9ybXNbcl09e3R5cGU6Im00Iix2YWx1ZTpvLnRvQXJyYXkoKX06ZS51bmlmb3Jtc1tyXT17dmFsdWU6b319T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgaT17fTtmb3IobGV0IHIgaW4gdGhpcy5leHRlbnNpb25zKXRoaXMuZXh0ZW5zaW9uc1tyXT09PSEwJiYoaVtyXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPWkpLGV9fTtGbi5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgb289Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyB3dCx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IHd0LHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IHd0fWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O29vLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgU2U9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PTUwLGU9MSxpPS4xLHI9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPWksdGhpcy5mYXI9cix0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj1WdSoyKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKGl1Ki41KnRoaXMuZm92KTtyZXR1cm4gLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gVnUqMipNYXRoLmF0YW4oTWF0aC50YW4oaXUqLjUqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy5hc3BlY3Q9dC9lLHRoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPWksdGhpcy52aWV3Lm9mZnNldFk9cix0aGlzLnZpZXcud2lkdGg9cyx0aGlzLnZpZXcuaGVpZ2h0PW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLGU9dCpNYXRoLnRhbihpdSouNSp0aGlzLmZvdikvdGhpcy56b29tLGk9MiplLHI9dGhpcy5hc3BlY3QqaSxzPS0uNSpyLG89dGhpcy52aWV3O2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1vLmZ1bGxXaWR0aCxjPW8uZnVsbEhlaWdodDtzKz1vLm9mZnNldFgqci9sLGUtPW8ub2Zmc2V0WSppL2Mscio9by53aWR0aC9sLGkqPW8uaGVpZ2h0L2N9bGV0IGE9dGhpcy5maWxtT2Zmc2V0O2EhPT0wJiYocys9dCphL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUocyxzK3IsZSxlLWksdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuZm92PXRoaXMuZm92LGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixlLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLGUub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCx0aGlzLnZpZXchPT1udWxsJiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGUub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxlLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxlfX07U2UucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIFNyPTkwLEVyPTEsYW89Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLGkuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7cmV0dXJufXRoaXMucmVuZGVyVGFyZ2V0PWk7bGV0IHI9bmV3IFNlKFNyLEVyLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwtMSwwKSxyLmxvb2tBdChuZXcgVCgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBzPW5ldyBTZShTcixFcix0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsLTEsMCkscy5sb29rQXQobmV3IFQoLTEsMCwwKSksdGhpcy5hZGQocyk7bGV0IG89bmV3IFNlKFNyLEVyLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwwLDEpLG8ubG9va0F0KG5ldyBUKDAsMSwwKSksdGhpcy5hZGQobyk7bGV0IGE9bmV3IFNlKFNyLEVyLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLC0xKSxhLmxvb2tBdChuZXcgVCgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgU2UoU3IsRXIsdCxlKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBUKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFNlKFNyLEVyLHQsZSk7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgVCgwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxlKXt0aGlzLnBhcmVudD09PW51bGwmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgaT10aGlzLnJlbmRlclRhcmdldCxbcixzLG8sYSxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsaD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgZj1pLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2kudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQoaSwwKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMSksdC5yZW5kZXIoZSxzKSx0LnNldFJlbmRlclRhcmdldChpLDIpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQoaSwzKSx0LnJlbmRlcihlLGEpLHQuc2V0UmVuZGVyVGFyZ2V0KGksNCksdC5yZW5kZXIoZSxsKSxpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWYsdC5zZXRSZW5kZXJUYXJnZXQoaSw1KSx0LnJlbmRlcihlLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGgpLHQueHIuZW5hYmxlZD11LGkudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sV3I9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyxhLGwsYyx1KXt0PXQhPT12b2lkIDA/dDpbXSxlPWUhPT12b2lkIDA/ZTpBbyxzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O1dyLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBvbD1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxlPWkpLHN1cGVyKHQsdCxlKSxlPWV8fHt9LHRoaXMudGV4dHVyZT1uZXcgV3Iodm9pZCAwLGUubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/ZS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlciE9PXZvaWQgMD9lLm1pbkZpbHRlcjpiZX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGUpe3RoaXMudGV4dHVyZS50eXBlPWUudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PVJlLHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2xldCBpPXt1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmAKCgkJCQl2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwoKCQkJCXZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CgoJCQkJCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwoKCQkJCX0KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgoJCQkJCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkJCQkJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoKCQkJCX0KCQkJYCxmcmFnbWVudFNoYWRlcjpgCgoJCQkJdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0OwoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJI2luY2x1ZGUgPGNvbW1vbj4KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCgkJCQkJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoKCQkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCgkJCQl9CgkJCWB9LHI9bmV3IEhpKDUsNSw1KSxzPW5ldyBGbih7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6R3IoaS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmkudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmkuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxibGVuZGluZzpqbn0pO3MudW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7bGV0IG89bmV3IG9lKHIscyksYT1lLm1pbkZpbHRlcjtyZXR1cm4gZS5taW5GaWx0ZXI9PT1MbCYmKGUubWluRmlsdGVyPWJlKSxuZXcgYW8oMSwxMCx0aGlzKS51cGRhdGUodCxvKSxlLm1pbkZpbHRlcj1hLG8uZ2VvbWV0cnkuZGlzcG9zZSgpLG8ubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IHM9dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IG89MDtvPDY7bysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsbyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQocyl9fTtvbC5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIEV1PW5ldyBULHhNPW5ldyBULHlNPW5ldyBkZSxqZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBUKDEsMCwwKSxlPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9ZSx0aGlzfXNldENvbXBvbmVudHModCxlLGkscil7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LGUsaSksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1lLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxlLGkpe2xldCByPUV1LnN1YlZlY3RvcnMoaSxlKS5jcm9zcyh4TS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoRXUpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKHI9PT0wKXJldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT09PTA/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IHM9LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gczwwfHxzPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIocykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8eU0uZ2V0Tm9ybWFsTWF0cml4KHQpLHI9dGhpcy5jb3BsYW5hclBvaW50KEV1KS5hcHBseU1hdHJpeDQodCkscz10aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoaSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuY29uc3RhbnQ9LXIuZG90KHMpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNvbnN0YW50LT10LmRvdCh0aGlzLm5vcm1hbCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJnQuY29uc3RhbnQ9PT10aGlzLmNvbnN0YW50fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2plLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciBUcj1uZXcgc2ksemE9bmV3IFQscXI9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgamUsZT1uZXcgamUsaT1uZXcgamUscj1uZXcgamUscz1uZXcgamUsbz1uZXcgamUpe3RoaXMucGxhbmVzPVt0LGUsaSxyLHMsb119c2V0KHQsZSxpLHIscyxvKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShzKSxhWzVdLmNvcHkobyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLHM9aVsxXSxvPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGg9aVs3XSxmPWlbOF0sZD1pWzldLGc9aVsxMF0seD1pWzExXSx2PWlbMTJdLG09aVsxM10scD1pWzE0XSxiPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGgtbCx4LWYsYi12KS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGgrbCx4K2YsYit2KS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStzLGgrYyx4K2QsYittKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1zLGgtYyx4LWQsYi1tKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1vLGgtdSx4LWcsYi1wKS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStvLGgrdSx4K2csYitwKS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gZS5ib3VuZGluZ1NwaGVyZT09PW51bGwmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksVHIuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFRyKX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBUci5jZW50ZXIuc2V0KDAsMCwwKSxUci5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsVHIuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShUcil9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgcz0wO3M8NjtzKyspaWYoZVtzXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoemEueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LHphLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSx6YS56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoemEpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07ZnVuY3Rpb24gZzAoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKHMsbyl7ZShzLG8pLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7dCE9PSEwJiZlIT09bnVsbCYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24ocyl7ZT1zfSxzZXRDb250ZXh0OmZ1bmN0aW9uKHMpe249c319fWZ1bmN0aW9uIHZNKG4sdCl7bGV0IGU9dC5pc1dlYkdMMixpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxkPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsZCksbi5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZz01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2c9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9nPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmc9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9nPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2c9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9nPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9nPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZz01MTIxKSx7YnVmZmVyOmQsdHlwZTpnLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBzKGMsdSxoKXtsZXQgZj11LmFycmF5LGQ9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoaCxjKSxkLmNvdW50PT09LTE/bi5idWZmZXJTdWJEYXRhKGgsMCxmKTooZT9uLmJ1ZmZlclN1YkRhdGEoaCxkLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYsZC5vZmZzZXQsZC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGgsZC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KGQub2Zmc2V0LGQub2Zmc2V0K2QuY291bnQpKSxkLmNvdW50PS0xKX1mdW5jdGlvbiBvKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9ZnVuY3Rpb24gYShjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9aS5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1pLmdldChjKTtoPT09dm9pZCAwP2kuc2V0KGMscihjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYocyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6byxyZW1vdmU6YSx1cGRhdGU6bH19dmFyIGxvPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLHdpZHRoU2VnbWVudHM6aSxoZWlnaHRTZWdtZW50czpyfTtsZXQgcz10LzIsbz1lLzIsYT1NYXRoLmZsb29yKGkpLGw9TWF0aC5mbG9vcihyKSxjPWErMSx1PWwrMSxoPXQvYSxmPWUvbCxkPVtdLGc9W10seD1bXSx2PVtdO2ZvcihsZXQgbT0wO208dTttKyspe2xldCBwPW0qZi1vO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBfPWIqaC1zO2cucHVzaChfLC1wLDApLHgucHVzaCgwLDAsMSksdi5wdXNoKGIvYSksdi5wdXNoKDEtbS9sKX19Zm9yKGxldCBtPTA7bTxsO20rKylmb3IobGV0IHA9MDtwPGE7cCsrKXtsZXQgYj1wK2MqbSxfPXArYyoobSsxKSxTPXArMStjKihtKzEpLEw9cCsxK2MqbTtkLnB1c2goYixfLEwpLGQucHVzaChfLFMsTCl9dGhpcy5zZXRJbmRleChkKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShnLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoeCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUodiwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgbG8odC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSxfTT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZzsKI2VuZGlmYCx3TT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsTU09YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCxiTT1gI2lmZGVmIFVTRV9BTFBIQVRFU1QKCXVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0OwojZW5kaWZgLFNNPWAjaWZkZWYgVVNFX0FPTUFQCglmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjsKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKQoJCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsRU09YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxUTT0idmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7IixBTT1gdmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTsKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApOwojZW5kaWZgLENNPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxSTT1gI2lmZGVmIFVTRV9CVU1QTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBidW1wTWFwOwoJdW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7Cgl2ZWMyIGRIZHh5X2Z3ZCgpIHsKCQl2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7CgkJdmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApOwoJCWZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDsKCQlmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDsKCQlmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDsKCQlyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTsKCX0KCXZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZOID0gc3VyZl9ub3JtOwoJCXZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTsKCQl2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7CgkJZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247CgkJdmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApOwoJfQojZW5kaWZgLExNPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZlYzQgcGxhbmU7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdOwoJCWlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTCgkJYm9vbCBjbGlwcGVkID0gdHJ1ZTsKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkgewoJCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJCWNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCQlpZiAoIGNsaXBwZWQgKSBkaXNjYXJkOwoJI2VuZGlmCiNlbmRpZmAsUE09YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxETT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjsKI2VuZGlmYCxJTT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmYCxOTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsRk09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkKCXZhcnlpbmcgdmVjMyB2Q29sb3I7CiNlbmRpZmAsek09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxVTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsQk09YCNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMKI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODYKI2RlZmluZSBQSV9IQUxGIDEuNTcwNzk2MzI2Nzk0ODk2NgojZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3CiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNQojZGVmaW5lIEVQU0lMT04gMWUtNgojaWZuZGVmIHNhdHVyYXRlCiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKQojZW5kaWYKI2RlZmluZSB3aGl0ZUNvbXBsZW1lbnQoIGEgKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKQpmbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9CmZsb2F0IHBvdzMoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4KngqeDsgfQpmbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9CmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfQpmbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfQpoaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkgewoJY29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzOwoJaGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7CglyZXR1cm4gZnJhY3QoIHNpbiggc24gKSAqIGMgKTsKfQojaWZkZWYgSElHSF9QUkVDSVNJT04KCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9CiNlbHNlCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7CgkJZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTsKCQlyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7Cgl9CiNlbmRpZgpzdHJ1Y3QgSW5jaWRlbnRMaWdodCB7Cgl2ZWMzIGNvbG9yOwoJdmVjMyBkaXJlY3Rpb247Cglib29sIHZpc2libGU7Cn07CnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7Cgl2ZWMzIGRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGRpcmVjdFNwZWN1bGFyOwoJdmVjMyBpbmRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGluZGlyZWN0U3BlY3VsYXI7Cn07CnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHsKCXZlYzMgcG9zaXRpb247Cgl2ZWMzIG5vcm1hbDsKCXZlYzMgdmlld0RpcjsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCXZlYzMgY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKfTsKdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwp9CnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBkaXIsIDAuMCApICogbWF0cml4ICkueHl6ICk7Cn0KbWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7CgltYXQzIHRtcDsKCXRtcFsgMCBdID0gdmVjMyggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApOwoJdG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7Cgl0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTsKCXJldHVybiB0bXA7Cn0KZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsKCXZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTsKCXJldHVybiBkb3QoIHdlaWdodHMsIGNvbG9yLnJnYiApOwp9CmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkgewoJcmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wOwp9CnZlYzIgZXF1aXJlY3RVdiggaW4gdmVjMyBkaXIgKSB7CglmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTsKCWZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTsKCXJldHVybiB2ZWMyKCB1LCB2ICk7Cn1gLE9NPWAjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVgoJI2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wCgkjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjAKCSNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wCgkjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wCglmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHsKCQl2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7CgkJZmxvYXQgZmFjZSA9IC0gMS4wOwoJCWlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0gZWxzZSB7CgkJCWlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApCgkJCQlmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7CgkJCWVsc2UKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDsKCQl9CgkJcmV0dXJuIGZhY2U7Cgl9Cgl2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHsKCQl2ZWMyIHV2OwoJCWlmICggZmFjZSA9PSAwLjAgKSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfQoJCXJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7Cgl9Cgl2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkgewoJCWZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7CgkJbWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApOwoJCWZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7CgkJZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTsKCQl2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41OwoJCWlmICggZmFjZSA+IDIuMCApIHsKCQkJdXYueSArPSBmYWNlU2l6ZTsKCQkJZmFjZSAtPSAzLjA7CgkJfQoJCXV2LnggKz0gZmFjZSAqIGZhY2VTaXplOwoJCWlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkgewoJCQl1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTsKCQl9CgkJdXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7CgkJdXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTsKCQl1diAqPSB0ZXhlbFNpemU7CgkJcmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjsKCX0KCSNkZWZpbmUgcjAgMS4wCgkjZGVmaW5lIHYwIDAuMzM5CgkjZGVmaW5lIG0wIC0gMi4wCgkjZGVmaW5lIHIxIDAuOAoJI2RlZmluZSB2MSAwLjI3NgoJI2RlZmluZSBtMSAtIDEuMAoJI2RlZmluZSByNCAwLjQKCSNkZWZpbmUgdjQgMC4wNDYKCSNkZWZpbmUgbTQgMi4wCgkjZGVmaW5lIHI1IDAuMzA1CgkjZGVmaW5lIHY1IDAuMDE2CgkjZGVmaW5lIG01IDMuMAoJI2RlZmluZSByNiAwLjIxCgkjZGVmaW5lIHY2IDAuMDAzOAoJI2RlZmluZSBtNiA0LjAKCWZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7CgkJZmxvYXQgbWlwID0gMC4wOwoJCWlmICggcm91Z2huZXNzID49IHIxICkgewoJCQltaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkgewoJCQltaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkgewoJCQltaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkgewoJCQltaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7CgkJfSBlbHNlIHsKCQkJbWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7CQl9CgkJcmV0dXJuIG1pcDsKCX0KCXZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7CgkJZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTsKCQlmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7CgkJdmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApOwoJCWlmICggbWlwRiA9PSAwLjAgKSB7CgkJCXJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApOwoJCX0gZWxzZSB7CgkJCXZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTsKCQkJcmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7CgkJfQoJfQojZW5kaWZgLGtNPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxITT1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7CiNlbmRpZmAsVk09YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApOwojZW5kaWZgLEdNPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxXTT1gI2lmZGVmIFVTRV9FTUlTU0lWRU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7CiNlbmRpZmAscU09ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsWE09YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLFlNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZlYzMgY2FtZXJhVG9GcmFnOwoJCWlmICggaXNPcnRob2dyYXBoaWMgKSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCQkjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTgoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZWxzZQoJCXZlYzMgcmVmbGVjdFZlYyA9IHZSZWZsZWN0OwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIDAuMCApOwoJI2Vsc2UKCQl2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYICkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKQoJCW91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTsKCSNlbmRpZgojZW5kaWZgLFpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7Cgl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoJI2Vsc2UKCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkjZW5kaWYKCQojZW5kaWZgLEpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLCRNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQkKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbmRpZgojZW5kaWZgLEtNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7CgkjZWxzZQoJCXZlYzMgY2FtZXJhVG9WZXJ0ZXg7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUU09YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxqTT1gI2lmZGVmIFVTRV9GT0cKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwojZW5kaWZgLHRiPWAjaWZkZWYgVVNFX0ZPRwoJI2lmZGVmIEZPR19FWFAyCgkJZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogdkZvZ0RlcHRoICogdkZvZ0RlcHRoICk7CgkjZWxzZQoJCWZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7CgkjZW5kaWYKCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTsKI2VuZGlmYCxlYj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxuYj1gI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7CiNlbmRpZgp2ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7CglmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApOwoJdmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTsKCSNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCQlyZXR1cm4gdmVjMyggdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yICk7CgkjZWxzZQoJCXJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7CgkjZW5kaWYKfWAsaWI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTsKCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCWxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTsKI2VuZGlmYCxyYj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHNiPWB2ZWMzIGRpZmZ1c2UgPSB2ZWMzKCAxLjAgKTsKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTsKR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7CmJhY2tHZW9tZXRyeS5wb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uOwpiYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDsKYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyOwp2TGlnaHRGcm9udCA9IHZlYzMoIDAuMCApOwp2SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7Cgl2SW5kaXJlY3RCYWNrID0gdmVjMyggMC4wICk7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwpmbG9hdCBkb3ROTDsKdmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CnZJbmRpcmVjdEZyb250ICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJdkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwojZW5kaWYKI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJdkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWZgLG9iPWB1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdzsKdW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yOwp1bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdOwp2ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkgewoJZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKCXZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApOwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApOwoJcmV0dXJuIHJlc3VsdDsKfQp2ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7Cgl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTsKCXJldHVybiBpcnJhZGlhbmNlOwp9CnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7CgkjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKQoJCWZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTsKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkgewoJCQlkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTsKCQl9CgkJcmV0dXJuIGRpc3RhbmNlRmFsbG9mZjsKCSNlbHNlCgkJaWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkgewoJCQlyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApOwoJCX0KCQlyZXR1cm4gMS4wOwoJI2VuZGlmCn0KZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7CglyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7Cn0KI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJc3RydWN0IERpcmVjdGlvbmFsTGlnaHQgewoJCXZlYzMgZGlyZWN0aW9uOwoJCXZlYzMgY29sb3I7Cgl9OwoJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdOwoJdm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQlsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7CgkJbGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247CgkJbGlnaHQudmlzaWJsZSA9IHRydWU7Cgl9CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCXN0cnVjdCBQb2ludExpZ2h0IHsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgY29sb3I7CgkJZmxvYXQgZGlzdGFuY2U7CgkJZmxvYXQgZGVjYXk7Cgl9OwoJdW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07Cgl2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJbGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yOwoJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTsKCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJfQojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCXN0cnVjdCBTcG90TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCQlmbG9hdCBjb25lQ29zOwoJCWZsb2F0IHBlbnVtYnJhQ29zOwoJfTsKCXVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdOwoJdm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQl2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApOwoJCWlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkgewoJCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJCWxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uOwoJCQlsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApOwoJCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJCX0gZWxzZSB7CgkJCWxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7CgkJCWxpZ2h0LnZpc2libGUgPSBmYWxzZTsKCQl9Cgl9CiNlbmRpZgojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCglzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7CgkJdmVjMyBjb2xvcjsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodDsKCX07Cgl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTsJdW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7Cgl1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07CiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJc3RydWN0IEhlbWlzcGhlcmVMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBza3lDb2xvcjsKCQl2ZWMzIGdyb3VuZENvbG9yOwoJfTsKCXVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdOwoJdmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQlmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTsKCQl2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApOwoJCXJldHVybiBpcnJhZGlhbmNlOwoJfQojZW5kaWZgLGFiPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLGxiPWBUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7Cm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7YCxjYj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBUb29uTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cn07CnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9Ub29uCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbgojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCx1Yj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLGhiPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKCXZlYzMgc3BlY3VsYXJDb2xvcjsKCWZsb2F0IHNwZWN1bGFyU2hpbmluZXNzOwoJZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDsKfTsKdm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9CbGlublBob25nCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZwojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCxmYj1gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7CnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTsKZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTsKI2lmZGVmIElPUgoJI2lmZGVmIFNQRUNVTEFSCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTsKCQl2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yOwoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQkJc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTsKCQkjZW5kaWYKCQkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQkJc3BlY3VsYXJDb2xvckZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFyQ29sb3JNYXAsIHZVdiApLnJnYjsKCQkjZW5kaWYKCQltYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7CgkjZWxzZQoJCWZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wOwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApOwoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwoJI2VuZGlmCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggaW9yIC0gMS4wICkgLyAoIGlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwojZWxzZQoJbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTsKCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCW1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCQltYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTsKCSNlbmRpZgoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApOwltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgltYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCW1hdGVyaWFsLnNoZWVuQ29sb3IgKj0gdGV4dHVyZTJEKCBzaGVlbkNvbG9yTWFwLCB2VXYgKS5yZ2I7CgkjZW5kaWYKCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTsKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQltYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIHNoZWVuUm91Z2huZXNzTWFwLCB2VXYgKS5hOwoJI2VuZGlmCiNlbmRpZmAsZGI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxwYj1gCkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uOwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCWdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVBvaW50TGlnaHQgcG9pbnRMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKQoJCXBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVNwb3RMaWdodCBzcG90TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdOwoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTICkKCQlzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCURpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKQoJCWRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhICkKCVJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkgewoJCXJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdOwoJCVJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKQoJdmVjMyBpYmxJcnJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJaXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CgkjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwICkKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCQlpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJfQoJCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXZlYzMgcmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmYCxtYj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCQkjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMKCQkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJCSNlbmRpZgoJCWlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwoJI2VuZGlmCgkjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgojZW5kaWZgLGdiPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAseGI9YCNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUICkKCWdsX0ZyYWdEZXB0aEVYVCA9IHZJc1BlcnNwZWN0aXZlID09IDAuMCA/IGdsX0ZyYWdDb29yZC56IDogbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTsKI2VuZGlmYCx5Yj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKI2VuZGlmYCx2Yj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsX2I9YCNpZmRlZiBVU0VfTE9HREVQVEhCVUYKCSNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUCgkJdkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7CgkJdklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7CgkjZWxzZQoJCWlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkgewoJCQlnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7CgkJCWdsX1Bvc2l0aW9uLnogKj0gZ2xfUG9zaXRpb24udzsKCQl9CgkjZW5kaWYKI2VuZGlmYCx3Yj1gI2lmZGVmIFVTRV9NQVAKCXZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTsKCSNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRQoJCXNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApOwoJI2VuZGlmCglkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjsKI2VuZGlmYCxNYj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCxiYj1gI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKQoJdmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdXYgKS5nOwojZW5kaWZgLFNiPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsRWI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxUYj1gI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDsKI2VuZGlmYCxBYj1gI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMKCW9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJfQoJI2Vsc2UKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkjZW5kaWYKI2VuZGlmYCxDYj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUmI9YCNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTCgl0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDEgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZWxzZQoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDIgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZW5kaWYKCQl9CgkjZWxzZQoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdOwoJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTsKCQkjZW5kaWYKCSNlbmRpZgojZW5kaWZgLExiPWBmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDsKI2lmZGVmIEZMQVRfU0hBREVECgl2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTsKCXZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7CiNlbHNlCgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTsKCQl2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCQliaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCSNlbmRpZgoJCSNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKQoJCQltYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZgp2ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO2AsUGI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsRGI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsSWI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsTmI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLEZiPWAjaWZkZWYgVVNFX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlOwojZW5kaWYKI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUAoJdW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsKI2VuZGlmCiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApCgl2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4sIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTsKCQl2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApOwoJCXZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7CgkJdmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTsKCQl2ZWMzIE4gPSBzdXJmX25vcm07CgkJdmVjMyBxMXBlcnAgPSBjcm9zcyggcTEsIE4gKTsKCQl2ZWMzIHEwcGVycCA9IGNyb3NzKCBOLCBxMCApOwoJCXZlYzMgVCA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7CgkJdmVjMyBCID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTsKCQlmbG9hdCBkZXQgPSBtYXgoIGRvdCggVCwgVCApLCBkb3QoIEIsIEIgKSApOwoJCWZsb2F0IHNjYWxlID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApOwoJCXJldHVybiBub3JtYWxpemUoIFQgKiAoIG1hcE4ueCAqIHNjYWxlICkgKyBCICogKCBtYXBOLnkgKiBzY2FsZSApICsgTiAqIG1hcE4ueiApOwoJfQojZW5kaWZgLHpiPWAjaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDsKI2VuZGlmYCxVYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxCYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Um91Z2huZXNzTWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgY2xlYXJjb2F0Tm9ybWFsU2NhbGU7CiNlbmRpZmAsT2I9YCNpZmRlZiBPUEFRVUUKZGlmZnVzZUNvbG9yLmEgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgpkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTsKI2VuZGlmCmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7YCxrYj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxIYj1gI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEEKCWdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7CiNlbmRpZmAsVmI9YHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uOwojZW5kaWYKbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247CmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247YCxHYj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFdiPWAjaWZkZWYgRElUSEVSSU5HCgl2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHsKCQlmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7CgkJdmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTsKCQlkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApOwoJCXJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7Cgl9CiNlbmRpZmAscWI9YGZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzczsKI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7Cglyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZzsKI2VuZGlmYCxYYj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCxZYj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCWZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7CgkJcmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7Cgl9Cgl2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHsKCQlyZXR1cm4gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7Cgl9CglmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXsKCQlmbG9hdCBvY2NsdXNpb24gPSAxLjA7CgkJdmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTsKCQlmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApOwoJCWlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7CgkJCWZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDsKCQkJZmxvYXQgdmFyaWFuY2UgPSBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTsKCQkJZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTsJCQlzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTsJCQlvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTsKCQl9CgkJcmV0dXJuIG9jY2x1c2lvbjsKCX0KCWZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7CgkJZmxvYXQgc2hhZG93ID0gMS4wOwoJCXNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53OwoJCXNoYWRvd0Nvb3JkLnogKz0gc2hhZG93QmlhczsKCQlidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7CgkJYm9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApOwoJCWJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTsKCQlib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApOwoJCWlmICggZnJ1c3R1bVRlc3QgKSB7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDIgPSBkeDAgLyAyLjA7CgkJCWZsb2F0IGR5MiA9IGR5MCAvIDIuMDsKCQkJZmxvYXQgZHgzID0gZHgxIC8gMi4wOwoJCQlmbG9hdCBkeTMgPSBkeTEgLyAyLjA7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApCgkJCSkgKiAoIDEuMCAvIDE3LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeCA9IHRleGVsU2l6ZS54OwoJCQlmbG9hdCBkeSA9IHRleGVsU2l6ZS55OwoJCQl2ZWMyIHV2ID0gc2hhZG93Q29vcmQueHk7CgkJCXZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTsKCQkJdXYgLT0gZiAqIHRleGVsU2l6ZTsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCBkeSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIGYueSApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXNoYWRvdyA9IFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbHNlCgkJCXNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZW5kaWYKCQl9CgkJcmV0dXJuIHNoYWRvdzsKCX0KCXZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHsKCQl2ZWMzIGFic1YgPSBhYnMoIHYgKTsKCQlmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTsKCQlhYnNWICo9IHNjYWxlVG9DdWJlOwoJCXYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTsKCQl2ZWMyIHBsYW5hciA9IHYueHk7CgkJZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTsKCQlmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7CgkJaWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkgewoJCQlpZiAoIHYueiA+IDAuMCApCgkJCQlwbGFuYXIueCA9IDQuMCAtIHYueDsKCQl9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWCA9IHNpZ24oIHYueCApOwoJCQlwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7CgkJfSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTsKCQkJcGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDsKCQkJcGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDsKCQl9CgkJcmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApOwoJfQoJZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7CgkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTsKCQl2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejsKCQlmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApOwkJZHAgKz0gc2hhZG93QmlhczsKCQl2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApOwoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTsKCQkJcmV0dXJuICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7CgkJI2VuZGlmCgl9CiNlbmRpZmAsWmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCiNlbmRpZmAsSmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCwkYj1gZmxvYXQgZ2V0U2hhZG93TWFzaygpIHsKCWZsb2F0IHNoYWRvdyA9IDEuMDsKCSNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNlbmRpZgoJcmV0dXJuIHNoYWRvdzsKfWAsS2I9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApOwoJbWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7CgltYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTsKCW1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApOwojZW5kaWZgLFFiPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxqYj1gI2lmZGVmIFVTRV9TS0lOTklORwoJdmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCXZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApOwoJc2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7Cglza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTsKCXNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56OwoJc2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7Cgl0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6OwojZW5kaWZgLHQxPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgltYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7Cglza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDsKCW9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6OwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJb2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNlbmRpZgojZW5kaWZgLGUxPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLG4xPWAjaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDsKI2VuZGlmYCxpMT1gI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApCglnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxyMT1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHMxPWAjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJZmxvYXQgdHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7CglmbG9hdCB0cmFuc21pc3Npb25GYWN0b3IgPSB0cmFuc21pc3Npb247CglmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7CgkjZW5kaWYKCXZlYzMgcG9zID0gdldvcmxkUG9zaXRpb247Cgl2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7Cgl2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzQgdHJhbnNtaXNzaW9uID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbigKCQluLCB2LCByb3VnaG5lc3NGYWN0b3IsIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsCgkJcG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgaW9yLCB0aGlja25lc3NGYWN0b3IsCgkJYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJdG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApOwoJdHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIHRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgdHJhbnNtaXNzaW9uRmFjdG9yICk7CiNlbmRpZmAsbzE9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjsKCXVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzOwoJdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJdW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7CgkjZW5kaWYKCXVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTsKCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7Cgl1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCXZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7CgkJdmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7CgkJdmVjMyBtb2RlbFNjYWxlOwoJCW1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDIgXS54eXogKSApOwoJCXJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7Cgl9CglmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTsKCX0KCXZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7CgkJZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApOwoJCSNpZmRlZiBURVhUVVJFX0xPRF9FWFQKCQkJcmV0dXJuIHRleHR1cmUyRExvZEVYVCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTsKCQkjZW5kaWYKCX0KCXZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQlpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkgewoJCQlyZXR1cm4gcmFkaWFuY2U7CgkJfSBlbHNlIHsKCQkJdmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTsKCQkJdmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApOwkJCXJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7CgkJfQoJfQoJdmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwKCQljb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiB2ZWMzIHBvc2l0aW9uLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4LAoJCWNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywKCQljb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7CgkJdmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApOwoJCXZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5OwoJCXZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTsKCQl2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudzsKCQlyZWZyYWN0aW9uQ29vcmRzICs9IDEuMDsKCQlyZWZyYWN0aW9uQ29vcmRzIC89IDIuMDsKCQl2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7CgkJdmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJCXZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApOwoJCXJldHVybiB2ZWM0KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7Cgl9CiNlbmRpZmAsYTE9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCxsMT1gI2lmZGVmIFVTRV9VVgoJI2lmZGVmIFVWU19WRVJURVhfT05MWQoJCXZlYzIgdlV2OwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJI2VuZGlmCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZmAsYzE9YCNpZmRlZiBVU0VfVVYKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CiNlbmRpZmAsdTE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAsaDE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJYXR0cmlidXRlIHZlYzIgdXYyOwoJdmFyeWluZyB2ZWMyIHZVdjI7Cgl1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtOwojZW5kaWZgLGYxPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7CiNlbmRpZmAsZDE9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAscDE9YHZhcnlpbmcgdmVjMiB2VXY7CnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKdm9pZCBtYWluKCkgewoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7Cn1gLG0xPWB1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7CnZhcnlpbmcgdmVjMiB2VXY7CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLGcxPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCx4MT1gI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7Cgl2ZWMzIHZSZWZsZWN0ID0gdldvcmxkRGlyZWN0aW9uOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCWdsX0ZyYWdDb2xvciA9IGVudkNvbG9yOwoJZ2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLHkxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7Cn1gLHYxPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCxfMT1gI2RlZmluZSBESVNUQU5DRQp2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7Cn1gLHcxPWAjZGVmaW5lIERJU1RBTkNFCnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjsKdW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7CnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7CnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluICgpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7CglkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7CglkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApOwp9YCxNMT1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLGIxPWB1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCXZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAsUzE9YHVuaWZvcm0gZmxvYXQgc2NhbGU7CmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJdkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlOwoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEUxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxUMT1gI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HICkKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsQTE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJI2lmZGVmIFVTRV9MSUdIVE1BUAoJCXZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiOwoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQzE9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxSMT1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gKCBnbF9Gcm9udEZhY2luZyApID8gdkluZGlyZWN0RnJvbnQgOiB2SW5kaXJlY3RCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdkluZGlyZWN0RnJvbnQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTsKCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsTDE9YCNkZWZpbmUgTUFUQ0FQCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKfWAsUDE9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxEMT1gI2RlZmluZSBOT1JNQUwKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWYKfWAsSTE9YCNkZWZpbmUgTk9STUFMCnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7Cn1gLE4xPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEYxPWAjZGVmaW5lIFBIT05HCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gdmVjMyBzcGVjdWxhcjsKdW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsejE9YCNkZWZpbmUgU1RBTkRBUkQKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4PgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLFUxPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQjE9YCNkZWZpbmUgVE9PTgp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsTzE9YCNkZWZpbmUgVE9PTgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxrMT1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEgxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+Cn1gLFYxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEcxPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsVzE9YHVuaWZvcm0gZmxvYXQgcm90YXRpb247CnVuaWZvcm0gdmVjMiBjZW50ZXI7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7Cgl2ZWMyIHNjYWxlOwoJc2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7CglzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTsKCSNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTgoJCWJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTsKCQlpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejsKCSNlbmRpZgoJdmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTsKCXZlYzIgcm90YXRlZFBvc2l0aW9uOwoJcm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJcm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJbXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHExPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsUHQ9e2FscGhhbWFwX2ZyYWdtZW50Ol9NLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6d00sYWxwaGF0ZXN0X2ZyYWdtZW50Ok1NLGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50OmJNLGFvbWFwX2ZyYWdtZW50OlNNLGFvbWFwX3BhcnNfZnJhZ21lbnQ6RU0sYmVnaW5fdmVydGV4OlRNLGJlZ2lubm9ybWFsX3ZlcnRleDpBTSxic2RmczpDTSxidW1wbWFwX3BhcnNfZnJhZ21lbnQ6Uk0sY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OkxNLGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OlBNLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDpETSxjbGlwcGluZ19wbGFuZXNfdmVydGV4OklNLGNvbG9yX2ZyYWdtZW50Ok5NLGNvbG9yX3BhcnNfZnJhZ21lbnQ6Rk0sY29sb3JfcGFyc192ZXJ0ZXg6ek0sY29sb3JfdmVydGV4OlVNLGNvbW1vbjpCTSxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6T00sZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6a00sZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OkhNLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6Vk0sZW1pc3NpdmVtYXBfZnJhZ21lbnQ6R00sZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDpXTSxlbmNvZGluZ3NfZnJhZ21lbnQ6cU0sZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6WE0sZW52bWFwX2ZyYWdtZW50OllNLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpaTSxlbnZtYXBfcGFyc19mcmFnbWVudDpKTSxlbnZtYXBfcGFyc192ZXJ0ZXg6JE0sZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6YWIsZW52bWFwX3ZlcnRleDpLTSxmb2dfdmVydGV4OlFNLGZvZ19wYXJzX3ZlcnRleDpqTSxmb2dfZnJhZ21lbnQ6dGIsZm9nX3BhcnNfZnJhZ21lbnQ6ZWIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDpuYixsaWdodG1hcF9mcmFnbWVudDppYixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OnJiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpzYixsaWdodHNfcGFyc19iZWdpbjpvYixsaWdodHNfdG9vbl9mcmFnbWVudDpsYixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmNiLGxpZ2h0c19waG9uZ19mcmFnbWVudDp1YixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDpoYixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6ZmIsbGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6ZGIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOnBiLGxpZ2h0c19mcmFnbWVudF9tYXBzOm1iLGxpZ2h0c19mcmFnbWVudF9lbmQ6Z2IsbG9nZGVwdGhidWZfZnJhZ21lbnQ6eGIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDp5Yixsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDp2Yixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6X2IsbWFwX2ZyYWdtZW50OndiLG1hcF9wYXJzX2ZyYWdtZW50Ok1iLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDpiYixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpTYixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6RWIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6VGIsbW9ycGhub3JtYWxfdmVydGV4OkFiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OkNiLG1vcnBodGFyZ2V0X3ZlcnRleDpSYixub3JtYWxfZnJhZ21lbnRfYmVnaW46TGIsbm9ybWFsX2ZyYWdtZW50X21hcHM6UGIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6RGIsbm9ybWFsX3BhcnNfdmVydGV4OkliLG5vcm1hbF92ZXJ0ZXg6TmIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6RmIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjp6YixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6VWIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6QmIsb3V0cHV0X2ZyYWdtZW50Ok9iLHBhY2tpbmc6a2IscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDpIYixwcm9qZWN0X3ZlcnRleDpWYixkaXRoZXJpbmdfZnJhZ21lbnQ6R2IsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6V2Iscm91Z2huZXNzbWFwX2ZyYWdtZW50OnFiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OlhiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OlliLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpaYixzaGFkb3dtYXBfdmVydGV4OkpiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDokYixza2luYmFzZV92ZXJ0ZXg6S2Isc2tpbm5pbmdfcGFyc192ZXJ0ZXg6UWIsc2tpbm5pbmdfdmVydGV4OmpiLHNraW5ub3JtYWxfdmVydGV4OnQxLHNwZWN1bGFybWFwX2ZyYWdtZW50OmUxLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6bjEsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6aTEsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDpyMSx0cmFuc21pc3Npb25fZnJhZ21lbnQ6czEsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bzEsdXZfcGFyc19mcmFnbWVudDphMSx1dl9wYXJzX3ZlcnRleDpsMSx1dl92ZXJ0ZXg6YzEsdXYyX3BhcnNfZnJhZ21lbnQ6dTEsdXYyX3BhcnNfdmVydGV4OmgxLHV2Ml92ZXJ0ZXg6ZjEsd29ybGRwb3NfdmVydGV4OmQxLGJhY2tncm91bmRfdmVydDpwMSxiYWNrZ3JvdW5kX2ZyYWc6bTEsY3ViZV92ZXJ0OmcxLGN1YmVfZnJhZzp4MSxkZXB0aF92ZXJ0OnkxLGRlcHRoX2ZyYWc6djEsZGlzdGFuY2VSR0JBX3ZlcnQ6XzEsZGlzdGFuY2VSR0JBX2ZyYWc6dzEsZXF1aXJlY3RfdmVydDpNMSxlcXVpcmVjdF9mcmFnOmIxLGxpbmVkYXNoZWRfdmVydDpTMSxsaW5lZGFzaGVkX2ZyYWc6RTEsbWVzaGJhc2ljX3ZlcnQ6VDEsbWVzaGJhc2ljX2ZyYWc6QTEsbWVzaGxhbWJlcnRfdmVydDpDMSxtZXNobGFtYmVydF9mcmFnOlIxLG1lc2htYXRjYXBfdmVydDpMMSxtZXNobWF0Y2FwX2ZyYWc6UDEsbWVzaG5vcm1hbF92ZXJ0OkQxLG1lc2hub3JtYWxfZnJhZzpJMSxtZXNocGhvbmdfdmVydDpOMSxtZXNocGhvbmdfZnJhZzpGMSxtZXNocGh5c2ljYWxfdmVydDp6MSxtZXNocGh5c2ljYWxfZnJhZzpVMSxtZXNodG9vbl92ZXJ0OkIxLG1lc2h0b29uX2ZyYWc6TzEscG9pbnRzX3ZlcnQ6azEscG9pbnRzX2ZyYWc6SDEsc2hhZG93X3ZlcnQ6VjEsc2hhZG93X2ZyYWc6RzEsc3ByaXRlX3ZlcnQ6VzEsc3ByaXRlX2ZyYWc6cTF9LG90PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgZGV9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9fSxzcGVjdWxhcm1hcDp7c3BlY3VsYXJNYXA6e3ZhbHVlOm51bGx9fSxlbnZtYXA6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9LHJlZmxlY3Rpdml0eTp7dmFsdWU6MX0saW9yOnt2YWx1ZToxLjV9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fX0sYW9tYXA6e2FvTWFwOnt2YWx1ZTpudWxsfSxhb01hcEludGVuc2l0eTp7dmFsdWU6MX19LGxpZ2h0bWFwOntsaWdodE1hcDp7dmFsdWU6bnVsbH0sbGlnaHRNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxlbWlzc2l2ZW1hcDp7ZW1pc3NpdmVNYXA6e3ZhbHVlOm51bGx9fSxidW1wbWFwOntidW1wTWFwOnt2YWx1ZTpudWxsfSxidW1wU2NhbGU6e3ZhbHVlOjF9fSxub3JtYWxtYXA6e25vcm1hbE1hcDp7dmFsdWU6bnVsbH0sbm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBLKC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX19fSxmbj17YmFzaWM6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmZvZ10pLHZlcnRleFNoYWRlcjpQdC5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5zcGVjdWxhcm1hcCxvdC5lbnZtYXAsb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuZm9nLG90LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBmdCgwKX19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmVtaXNzaXZlbWFwLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IGZ0KDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmVudm1hcCxvdC5hb21hcCxvdC5saWdodG1hcCxvdC5lbWlzc2l2ZW1hcCxvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3Qucm91Z2huZXNzbWFwLG90Lm1ldGFsbmVzc21hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuYnVtcG1hcCxvdC5ub3JtYWxtYXAsb3QuZGlzcGxhY2VtZW50bWFwLG90LmdyYWRpZW50bWFwLG90LmZvZyxvdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgZnQoMCl9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0Lm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3QuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOk1lKFtvdC5wb2ludHMsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOlB0LmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpQdC5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOk1lKFtvdC5zcHJpdGUsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOlB0LmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOk1lKFtvdC5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpQdC5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgVH0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6TWUoW290LmxpZ2h0cyxvdC5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgZnQoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5zaGFkb3dfZnJhZ319O2ZuLnBoeXNpY2FsPXt1bmlmb3JtczpNZShbZm4uc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOjB9LHNoZWVuQ29sb3I6e3ZhbHVlOm5ldyBmdCgwKX0sc2hlZW5Db2xvck1hcDp7dmFsdWU6bnVsbH0sc2hlZW5Sb3VnaG5lc3M6e3ZhbHVlOjF9LHNoZWVuUm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb246e3ZhbHVlOjB9LHRyYW5zbWlzc2lvbk1hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uU2FtcGxlclNpemU6e3ZhbHVlOm5ldyBLfSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBmdCgxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfZnJhZ307ZnVuY3Rpb24gWDEobix0LGUsaSxyLHMpe2xldCBvPW5ldyBmdCgwKSxhPXI9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIGQoeCx2KXtsZXQgbT0hMSxwPXYuaXNTY2VuZT09PSEwP3YuYmFja2dyb3VuZDpudWxsO3AmJnAuaXNUZXh0dXJlJiYocD10LmdldChwKSk7bGV0IGI9bi54cixfPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7XyYmXy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJihwPW51bGwpLHA9PT1udWxsP2cobyxhKTpwJiZwLmlzQ29sb3ImJihnKHAsMSksbT0hMCksKG4uYXV0b0NsZWFyfHxtKSYmbi5jbGVhcihuLmF1dG9DbGVhckNvbG9yLG4uYXV0b0NsZWFyRGVwdGgsbi5hdXRvQ2xlYXJTdGVuY2lsKSxwJiYocC5pc0N1YmVUZXh0dXJlfHxwLm1hcHBpbmc9PT1SbCk/KGM9PT12b2lkIDAmJihjPW5ldyBvZShuZXcgSGkoMSwxLDEpLG5ldyBGbih7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6R3IoZm4uY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmZuLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmZuLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oUyxMLEEpe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKEEubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLGkudXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT1wLGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT1wLmlzQ3ViZVRleHR1cmUmJnAuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXB8fGghPT1wLnZlcnNpb258fGYhPT1uLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT1wLGg9cC52ZXJzaW9uLGY9bi50b25lTWFwcGluZykseC51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6cCYmcC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgb2UobmV3IGxvKDIsMiksbmV3IEZuKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOkdyKGZuLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpmbi5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpmbi5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6ZW8sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGkudXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT1wLHAubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZwLnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weShwLm1hdHJpeCksKHUhPT1wfHxoIT09cC52ZXJzaW9ufHxmIT09bi50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9cCxoPXAudmVyc2lvbixmPW4udG9uZU1hcHBpbmcpLHgudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGcoeCx2KXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoeC5yLHguZyx4LmIsdixzKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBvfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKHgsdj0xKXtvLnNldCh4KSxhPXYsZyhvLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oeCl7YT14LGcobyxhKX0scmVuZGVyOmR9fWZ1bmN0aW9uIFkxKG4sdCxlLGkpe2xldCByPW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSxzPWkuaXNXZWJHTDI/bnVsbDp0LmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxvPWkuaXNXZWJHTDJ8fHMhPT1udWxsLGE9e30sbD14KG51bGwpLGM9bDtmdW5jdGlvbiB1KEQsRix6LE4sVil7bGV0IFE9ITE7aWYobyl7bGV0IGF0PWcoTix6LEYpO2MhPT1hdCYmKGM9YXQsZihjLm9iamVjdCkpLFE9dihOLFYpLFEmJm0oTixWKX1lbHNle2xldCBhdD1GLndpcmVmcmFtZT09PSEwOyhjLmdlb21ldHJ5IT09Ti5pZHx8Yy5wcm9ncmFtIT09ei5pZHx8Yy53aXJlZnJhbWUhPT1hdCkmJihjLmdlb21ldHJ5PU4uaWQsYy5wcm9ncmFtPXouaWQsYy53aXJlZnJhbWU9YXQsUT0hMCl9RC5pc0luc3RhbmNlZE1lc2g9PT0hMCYmKFE9ITApLFYhPT1udWxsJiZlLnVwZGF0ZShWLDM0OTYzKSxRJiYoQShELEYseixOKSxWIT09bnVsbCYmbi5iaW5kQnVmZmVyKDM0OTYzLGUuZ2V0KFYpLmJ1ZmZlcikpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6cy5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpfWZ1bmN0aW9uIGYoRCl7cmV0dXJuIGkuaXNXZWJHTDI/bi5iaW5kVmVydGV4QXJyYXkoRCk6cy5iaW5kVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZChEKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmRlbGV0ZVZlcnRleEFycmF5KEQpOnMuZGVsZXRlVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZyhELEYseil7bGV0IE49ei53aXJlZnJhbWU9PT0hMCxWPWFbRC5pZF07Vj09PXZvaWQgMCYmKFY9e30sYVtELmlkXT1WKTtsZXQgUT1WW0YuaWRdO1E9PT12b2lkIDAmJihRPXt9LFZbRi5pZF09USk7bGV0IGF0PVFbTl07cmV0dXJuIGF0PT09dm9pZCAwJiYoYXQ9eChoKCkpLFFbTl09YXQpLGF0fWZ1bmN0aW9uIHgoRCl7bGV0IEY9W10sej1bXSxOPVtdO2ZvcihsZXQgVj0wO1Y8cjtWKyspRltWXT0wLHpbVl09MCxOW1ZdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOkYsZW5hYmxlZEF0dHJpYnV0ZXM6eixhdHRyaWJ1dGVEaXZpc29yczpOLG9iamVjdDpELGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24gdihELEYpe2xldCB6PWMuYXR0cmlidXRlcyxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD16W1FdLEc9TltRXTtpZihhdD09PXZvaWQgMHx8YXQuYXR0cmlidXRlIT09R3x8YXQuZGF0YSE9PUcuZGF0YSlyZXR1cm4hMDtWKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PVZ8fGMuaW5kZXghPT1GfWZ1bmN0aW9uIG0oRCxGKXtsZXQgej17fSxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD1OW1FdLEc9e307Ry5hdHRyaWJ1dGU9YXQsYXQuZGF0YSYmKEcuZGF0YT1hdC5kYXRhKSx6W1FdPUcsVisrfWMuYXR0cmlidXRlcz16LGMuYXR0cmlidXRlc051bT1WLGMuaW5kZXg9Rn1mdW5jdGlvbiBwKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKylEW0ZdPTB9ZnVuY3Rpb24gYihEKXtfKEQsMCl9ZnVuY3Rpb24gXyhELEYpe2xldCB6PWMubmV3QXR0cmlidXRlcyxOPWMuZW5hYmxlZEF0dHJpYnV0ZXMsVj1jLmF0dHJpYnV0ZURpdmlzb3JzO3pbRF09MSxOW0RdPT09MCYmKG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoRCksTltEXT0xKSxWW0RdIT09RiYmKChpLmlzV2ViR0wyP246dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKEQsRiksVltEXT1GKX1mdW5jdGlvbiBTKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzLEY9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IHo9MCxOPUYubGVuZ3RoO3o8Tjt6KyspRlt6XSE9PURbel0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh6KSxGW3pdPTApfWZ1bmN0aW9uIEwoRCxGLHosTixWLFEpe2kuaXNXZWJHTDI9PT0hMCYmKHo9PT01MTI0fHx6PT09NTEyNSk/bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihELEYseixWLFEpOm4udmVydGV4QXR0cmliUG9pbnRlcihELEYseixOLFYsUSl9ZnVuY3Rpb24gQShELEYseixOKXtpZihpLmlzV2ViR0wyPT09ITEmJihELmlzSW5zdGFuY2VkTWVzaHx8Ti5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmdC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKT09PW51bGwpcmV0dXJuO3AoKTtsZXQgVj1OLmF0dHJpYnV0ZXMsUT16LmdldEF0dHJpYnV0ZXMoKSxhdD1GLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGxldCBHIGluIFEpe2xldCAkPVFbR107aWYoJC5sb2NhdGlvbj49MCl7bGV0IGx0PVZbR107aWYobHQ9PT12b2lkIDAmJihHPT09Imluc3RhbmNlTWF0cml4IiYmRC5pbnN0YW5jZU1hdHJpeCYmKGx0PUQuaW5zdGFuY2VNYXRyaXgpLEc9PT0iaW5zdGFuY2VDb2xvciImJkQuaW5zdGFuY2VDb2xvciYmKGx0PUQuaW5zdGFuY2VDb2xvcikpLGx0IT09dm9pZCAwKXtsZXQgZHQ9bHQubm9ybWFsaXplZCx4dD1sdC5pdGVtU2l6ZSxrPWUuZ2V0KGx0KTtpZihrPT09dm9pZCAwKWNvbnRpbnVlO2xldCBGdD1rLmJ1ZmZlcixtdD1rLnR5cGUsU3Q9ay5ieXRlc1BlckVsZW1lbnQ7aWYobHQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IEI9bHQuZGF0YSxzdD1CLnN0cmlkZSxudD1sdC5vZmZzZXQ7aWYoQiYmQi5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IEM9MDtDPCQubG9jYXRpb25TaXplO0MrKylfKCQubG9jYXRpb24rQyxCLm1lc2hQZXJBdHRyaWJ1dGUpO0QuaXNJbnN0YW5jZWRNZXNoIT09ITAmJk4uX21heEluc3RhbmNlQ291bnQ9PT12b2lkIDAmJihOLl9tYXhJbnN0YW5jZUNvdW50PUIubWVzaFBlckF0dHJpYnV0ZSpCLmNvdW50KX1lbHNlIGZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKWIoJC5sb2NhdGlvbitDKTtuLmJpbmRCdWZmZXIoMzQ5NjIsRnQpO2ZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKUwoJC5sb2NhdGlvbitDLHh0LyQubG9jYXRpb25TaXplLG10LGR0LHN0KlN0LChudCt4dC8kLmxvY2F0aW9uU2l6ZSpDKSpTdCl9ZWxzZXtpZihsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSl7Zm9yKGxldCBCPTA7QjwkLmxvY2F0aW9uU2l6ZTtCKyspXygkLmxvY2F0aW9uK0IsbHQubWVzaFBlckF0dHJpYnV0ZSk7RC5pc0luc3RhbmNlZE1lc2ghPT0hMCYmTi5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKE4uX21heEluc3RhbmNlQ291bnQ9bHQubWVzaFBlckF0dHJpYnV0ZSpsdC5jb3VudCl9ZWxzZSBmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKyliKCQubG9jYXRpb24rQik7bi5iaW5kQnVmZmVyKDM0OTYyLEZ0KTtmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKylMKCQubG9jYXRpb24rQix4dC8kLmxvY2F0aW9uU2l6ZSxtdCxkdCx4dCpTdCx4dC8kLmxvY2F0aW9uU2l6ZSpCKlN0KX19ZWxzZSBpZihhdCE9PXZvaWQgMCl7bGV0IGR0PWF0W0ddO2lmKGR0IT09dm9pZCAwKXN3aXRjaChkdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdigkLmxvY2F0aW9uLGR0KTticmVhaztjYXNlIDM6bi52ZXJ0ZXhBdHRyaWIzZnYoJC5sb2NhdGlvbixkdCk7YnJlYWs7Y2FzZSA0Om4udmVydGV4QXR0cmliNGZ2KCQubG9jYXRpb24sZHQpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoJC5sb2NhdGlvbixkdCl9fX19UygpfWZ1bmN0aW9uIEgoKXt5KCk7Zm9yKGxldCBEIGluIGEpe2xldCBGPWFbRF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRF19fWZ1bmN0aW9uIHR0KEQpe2lmKGFbRC5pZF09PT12b2lkIDApcmV0dXJuO2xldCBGPWFbRC5pZF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRC5pZF19ZnVuY3Rpb24gWChEKXtmb3IobGV0IEYgaW4gYSl7bGV0IHo9YVtGXTtpZih6W0QuaWRdPT09dm9pZCAwKWNvbnRpbnVlO2xldCBOPXpbRC5pZF07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIHpbRC5pZF19fWZ1bmN0aW9uIHkoKXtSKCksYyE9PWwmJihjPWwsZihjLm9iamVjdCkpfWZ1bmN0aW9uIFIoKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOnUscmVzZXQ6eSxyZXNldERlZmF1bHRTdGF0ZTpSLGRpc3Bvc2U6SCxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTp0dCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOlgsaW5pdEF0dHJpYnV0ZXM6cCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpTfX1mdW5jdGlvbiBaMShuLHQsZSxpKXtsZXQgcj1pLmlzV2ViR0wyLHM7ZnVuY3Rpb24gbyhjKXtzPWN9ZnVuY3Rpb24gYShjLHUpe24uZHJhd0FycmF5cyhzLGMsdSksZS51cGRhdGUodSxzLDEpfWZ1bmN0aW9uIGwoYyx1LGgpe2lmKGg9PT0wKXJldHVybjtsZXQgZixkO2lmKHIpZj1uLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYoZj10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsZj09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1mW2RdKHMsYyx1LGgpLGUudXBkYXRlKHUscyxoKX10aGlzLnNldE1vZGU9byx0aGlzLnJlbmRlcj1hLHRoaXMucmVuZGVySW5zdGFuY2VzPWx9ZnVuY3Rpb24gSjEobix0LGUpe2xldCBpO2Z1bmN0aW9uIHIoKXtpZihpIT09dm9pZCAwKXJldHVybiBpO2lmKHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgQT10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aT1uLmdldFBhcmFtZXRlcihBLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBpPTA7cmV0dXJuIGl9ZnVuY3Rpb24gcyhBKXtpZihBPT09ImhpZ2hwIil7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtBPSJtZWRpdW1wIn1yZXR1cm4gQT09PSJtZWRpdW1wIiYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgbz10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQsYT1lLnByZWNpc2lvbiE9PXZvaWQgMD9lLnByZWNpc2lvbjoiaGlnaHAiLGw9cyhhKTtsIT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLGEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLGE9bCk7bGV0IGM9b3x8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHU9ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPT09ITAsaD1uLmdldFBhcmFtZXRlcigzNDkzMCksZj1uLmdldFBhcmFtZXRlcigzNTY2MCksZD1uLmdldFBhcmFtZXRlcigzMzc5KSxnPW4uZ2V0UGFyYW1ldGVyKDM0MDc2KSx4PW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSx2PW4uZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtPW4uZ2V0UGFyYW1ldGVyKDM2MzQ4KSxwPW4uZ2V0UGFyYW1ldGVyKDM2MzQ5KSxiPWY+MCxfPW98fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpLFM9YiYmXyxMPW8/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjA7cmV0dXJue2lzV2ViR0wyOm8sZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OnIsZ2V0TWF4UHJlY2lzaW9uOnMscHJlY2lzaW9uOmEsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjp1LG1heFRleHR1cmVzOmgsbWF4VmVydGV4VGV4dHVyZXM6ZixtYXhUZXh0dXJlU2l6ZTpkLG1heEN1YmVtYXBTaXplOmcsbWF4QXR0cmlidXRlczp4LG1heFZlcnRleFVuaWZvcm1zOnYsbWF4VmFyeWluZ3M6bSxtYXhGcmFnbWVudFVuaWZvcm1zOnAsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6XyxmbG9hdFZlcnRleFRleHR1cmVzOlMsbWF4U2FtcGxlczpMfX1mdW5jdGlvbiAkMShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxzPSExLG89bmV3IGplLGE9bmV3IGRlLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLGQpe2xldCBnPWgubGVuZ3RoIT09MHx8Znx8aSE9PTB8fHI7cmV0dXJuIHI9ZixlPXUoaCxkLDApLGk9aC5sZW5ndGgsZ30sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtzPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe3M9ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixkKXtsZXQgZz1oLmNsaXBwaW5nUGxhbmVzLHg9aC5jbGlwSW50ZXJzZWN0aW9uLHY9aC5jbGlwU2hhZG93cyxtPW4uZ2V0KGgpO2lmKCFyfHxnPT09bnVsbHx8Zy5sZW5ndGg9PT0wfHxzJiYhdilzP3UobnVsbCk6YygpO2Vsc2V7bGV0IHA9cz8wOmksYj1wKjQsXz1tLmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1fLF89dShnLGYsYixkKTtmb3IobGV0IFM9MDtTIT09YjsrK1MpX1tTXT1lW1NdO20uY2xpcHBpbmdTdGF0ZT1fLHRoaXMubnVtSW50ZXJzZWN0aW9uPXg/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9cH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLGQsZyl7bGV0IHg9aCE9PW51bGw/aC5sZW5ndGg6MCx2PW51bGw7aWYoeCE9PTApe2lmKHY9bC52YWx1ZSxnIT09ITB8fHY9PT1udWxsKXtsZXQgbT1kK3gqNCxwPWYubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KHApLCh2PT09bnVsbHx8di5sZW5ndGg8bSkmJih2PW5ldyBGbG9hdDMyQXJyYXkobSkpO2ZvcihsZXQgYj0wLF89ZDtiIT09eDsrK2IsXys9NClvLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHAsYSksby5ub3JtYWwudG9BcnJheSh2LF8pLHZbXyszXT1vLmNvbnN0YW50fWwudmFsdWU9dixsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz14LHQubnVtSW50ZXJzZWN0aW9uPTAsdn19ZnVuY3Rpb24gSzEobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShvLGEpe3JldHVybiBhPT09VXU/by5tYXBwaW5nPUFvOmE9PT1CdSYmKG8ubWFwcGluZz1Dbyksb31mdW5jdGlvbiBpKG8pe2lmKG8mJm8uaXNUZXh0dXJlJiZvLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExKXtsZXQgYT1vLm1hcHBpbmc7aWYoYT09PVV1fHxhPT09QnUpaWYodC5oYXMobykpe2xldCBsPXQuZ2V0KG8pLnRleHR1cmU7cmV0dXJuIGUobCxvLm1hcHBpbmcpfWVsc2V7bGV0IGw9by5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgb2wobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixvKSx0LnNldChvLGMpLG8uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUsby5tYXBwaW5nKX1lbHNlIHJldHVybiBudWxsfX1yZXR1cm4gb31mdW5jdGlvbiByKG8pe2xldCBhPW8udGFyZ2V0O2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscik7bGV0IGw9dC5nZXQoYSk7bCE9PXZvaWQgMCYmKHQuZGVsZXRlKGEpLGwuZGlzcG9zZSgpKX1mdW5jdGlvbiBzKCl7dD1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OmksZGlzcG9zZTpzfX12YXIgVmk9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxzPS4xLG89MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1zLHRoaXMuZmFyPW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1zLHRoaXMudmlldy5oZWlnaHQ9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIscz1pLXQsbz1pK3QsYT1yK2UsbD1yLWU7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtzKz1jKnRoaXMudmlldy5vZmZzZXRYLG89cytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMocyxvLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsdGhpcy52aWV3IT09bnVsbCYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07VmkucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciBYcj1jbGFzcyBleHRlbmRzIEZue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07WHIucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIGtyPTQsbmk9OCxobj1NYXRoLnBvdygyLG5pKSx4MD1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0seTA9bmkta3IrMSt4MC5sZW5ndGgsQXI9MjAsVHU9bmV3IFZpLHtfbG9kUGxhbmVzOkdzLF9zaXplTG9kczptZyxfc2lnbWFzOlVhfT1RMSgpLGdnPW5ldyBmdCxBdT1udWxsLHppPSgxK01hdGguc3FydCg1KSkvMixDcj0xL3ppLHhnPVtuZXcgVCgxLDEsMSksbmV3IFQoLTEsMSwxKSxuZXcgVCgxLDEsLTEpLG5ldyBUKC0xLDEsLTEpLG5ldyBUKDAsemksQ3IpLG5ldyBUKDAsemksLUNyKSxuZXcgVChDciwwLHppKSxuZXcgVCgtQ3IsMCx6aSksbmV3IFQoemksQ3IsMCksbmV3IFQoLXppLENyLDApXSxhbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPWoxKEFyKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxlPTAsaT0uMSxyPTEwMCl7QXU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IHM9dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxpLHIscyksZT4wJiZ0aGlzLl9ibHVyKHMsMCwwLGUpLHRoaXMuX2FwcGx5UE1SRU0ocyksdGhpcy5fY2xlYW51cChzKSxzfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWZyb21DdWJlbWFwKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1fZygpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe3RoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQhPT1udWxsJiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fY3ViZW1hcFNoYWRlciE9PW51bGwmJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyIT09bnVsbCYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8R3MubGVuZ3RoO3QrKylHc1t0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KEF1KSx0LnNjaXNzb3JUZXN0PSExLEJhKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LGUpe0F1PXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBpPWV8fHRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsaSksdGhpcy5fYXBwbHlQTVJFTShpKSx0aGlzLl9jbGVhbnVwKGkpLGl9X2FsbG9jYXRlVGFyZ2V0cyh0KXtsZXQgZT17bWFnRmlsdGVyOmJlLG1pbkZpbHRlcjpiZSxnZW5lcmF0ZU1pcG1hcHM6ITEsdHlwZTpVcixmb3JtYXQ6UmUsZW5jb2Rpbmc6cmksZGVwdGhCdWZmZXI6ITF9LGk9eWcoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9PT1udWxsJiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9eWcoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgb2UoR3NbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLFR1KX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgYT1uZXcgU2UoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLHU9dGhpcy5fcmVuZGVyZXIsaD11LmF1dG9DbGVhcixmPXUudG9uZU1hcHBpbmc7dS5nZXRDbGVhckNvbG9yKGdnKSx1LnRvbmVNYXBwaW5nPXRpLHUuYXV0b0NsZWFyPSExO2xldCBkPW5ldyBraSh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpoZSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGc9bmV3IG9lKG5ldyBIaSxkKSx4PSExLHY9dC5iYWNrZ3JvdW5kO3Y/di5pc0NvbG9yJiYoZC5jb2xvci5jb3B5KHYpLHQuYmFja2dyb3VuZD1udWxsLHg9ITApOihkLmNvbG9yLmNvcHkoZ2cpLHg9ITApO2ZvcihsZXQgbT0wO208NjttKyspe2xldCBwPW0lMztwPT09MD8oYS51cC5zZXQoMCxsW21dLDApLGEubG9va0F0KGNbbV0sMCwwKSk6cD09PTE/KGEudXAuc2V0KDAsMCxsW21dKSxhLmxvb2tBdCgwLGNbbV0sMCkpOihhLnVwLnNldCgwLGxbbV0sMCksYS5sb29rQXQoMCwwLGNbbV0pKSxCYShyLHAqaG4sbT4yP2huOjAsaG4saG4pLHUuc2V0UmVuZGVyVGFyZ2V0KHIpLHgmJnUucmVuZGVyKGcsYSksdS5yZW5kZXIodCxhKX1nLmdlb21ldHJ5LmRpc3Bvc2UoKSxnLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9dn1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7bGV0IGk9dGhpcy5fcmVuZGVyZXIscj10Lm1hcHBpbmc9PT1Bb3x8dC5tYXBwaW5nPT09Q287cj8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPV9nKCkpLHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEpOnRoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCkpO2xldCBzPXI/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixvPW5ldyBvZShHc1swXSxzKSxhPXMudW5pZm9ybXM7YS5lbnZNYXAudmFsdWU9dCxyfHxhLnRleGVsU2l6ZS52YWx1ZS5zZXQoMS90LmltYWdlLndpZHRoLDEvdC5pbWFnZS5oZWlnaHQpLEJhKGUsMCwwLDMqaG4sMipobiksaS5zZXRSZW5kZXJUYXJnZXQoZSksaS5yZW5kZXIobyxUdSl9X2FwcGx5UE1SRU0odCl7bGV0IGU9dGhpcy5fcmVuZGVyZXIsaT1lLmF1dG9DbGVhcjtlLmF1dG9DbGVhcj0hMTtmb3IobGV0IHI9MTtyPHkwO3IrKyl7bGV0IHM9TWF0aC5zcXJ0KFVhW3JdKlVhW3JdLVVhW3ItMV0qVWFbci0xXSksbz14Z1soci0xKSV4Zy5sZW5ndGhdO3RoaXMuX2JsdXIodCxyLTEscixzLG8pfWUuYXV0b0NsZWFyPWl9X2JsdXIodCxlLGkscixzKXtsZXQgbz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LG8sZSxpLHIsImxhdGl0dWRpbmFsIixzKSx0aGlzLl9oYWxmQmx1cihvLHQsaSxpLHIsImxvbmdpdHVkaW5hbCIscyl9X2hhbGZCbHVyKHQsZSxpLHIscyxvLGEpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO28hPT0ibGF0aXR1ZGluYWwiJiZvIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IG9lKEdzW3JdLGMpLGY9Yy51bmlmb3JtcyxkPW1nW2ldLTEsZz1pc0Zpbml0ZShzKT9NYXRoLlBJLygyKmQpOjIqTWF0aC5QSS8oMipBci0xKSx4PXMvZyx2PWlzRmluaXRlKHMpPzErTWF0aC5mbG9vcih1KngpOkFyO3Y+QXImJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke3N9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7dn0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAke0FyfWApO2xldCBtPVtdLHA9MDtmb3IobGV0IEw9MDtMPEFyOysrTCl7bGV0IEE9TC94LEg9TWF0aC5leHAoLUEqQS8yKTttLnB1c2goSCksTD09PTA/cCs9SDpMPHYmJihwKz0yKkgpfWZvcihsZXQgTD0wO0w8bS5sZW5ndGg7TCsrKW1bTF09bVtMXS9wO2YuZW52TWFwLnZhbHVlPXQudGV4dHVyZSxmLnNhbXBsZXMudmFsdWU9dixmLndlaWdodHMudmFsdWU9bSxmLmxhdGl0dWRpbmFsLnZhbHVlPW89PT0ibGF0aXR1ZGluYWwiLGEmJihmLnBvbGVBeGlzLnZhbHVlPWEpLGYuZFRoZXRhLnZhbHVlPWcsZi5taXBJbnQudmFsdWU9bmktaTtsZXQgYj1tZ1tyXSxfPTMqTWF0aC5tYXgoMCxobi0yKmIpLFM9KHI9PT0wPzA6MipobikrMipiKihyPm5pLWtyP3Itbmkra3I6MCk7QmEoZSxfLFMsMypiLDIqYiksbC5zZXRSZW5kZXJUYXJnZXQoZSksbC5yZW5kZXIoaCxUdSl9fTtmdW5jdGlvbiBRMSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPW5pO2ZvcihsZXQgcj0wO3I8eTA7cisrKXtsZXQgcz1NYXRoLnBvdygyLGkpO3QucHVzaChzKTtsZXQgbz0xL3M7cj5uaS1rcj9vPXgwW3Itbmkra3ItMV06cj09PTAmJihvPTApLGUucHVzaChvKTtsZXQgYT0xLyhzLTEpLGw9LWEvMixjPTErYS8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LGQ9MyxnPTIseD0xLHY9bmV3IEZsb2F0MzJBcnJheShkKmYqaCksbT1uZXcgRmxvYXQzMkFycmF5KGcqZipoKSxwPW5ldyBGbG9hdDMyQXJyYXkoeCpmKmgpO2ZvcihsZXQgXz0wO188aDtfKyspe2xldCBTPV8lMyoyLzMtMSxMPV8+Mj8wOi0xLEE9W1MsTCwwLFMrMi8zLEwsMCxTKzIvMyxMKzEsMCxTLEwsMCxTKzIvMyxMKzEsMCxTLEwrMSwwXTt2LnNldChBLGQqZipfKSxtLnNldCh1LGcqZipfKTtsZXQgSD1bXyxfLF8sXyxfLF9dO3Auc2V0KEgseCpmKl8pfWxldCBiPW5ldyBIdDtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBRdCh2LGQpKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBRdChtLGcpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgUXQocCx4KSksbi5wdXNoKGIpLGk+a3ImJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24geWcobil7bGV0IHQ9bmV3IE5lKDMqaG4sMypobixuKTtyZXR1cm4gdC50ZXh0dXJlLm1hcHBpbmc9UmwsdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIEJhKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBqMShuKXtsZXQgdD1uZXcgRmxvYXQzMkFycmF5KG4pLGU9bmV3IFQoMCwxLDApO3JldHVybiBuZXcgWHIoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bn0sdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sc2FtcGxlczp7dmFsdWU6MX0sd2VpZ2h0czp7dmFsdWU6dH0sbGF0aXR1ZGluYWw6e3ZhbHVlOiExfSxkVGhldGE6e3ZhbHVlOjB9LG1pcEludDp7dmFsdWU6MH0scG9sZUF4aXM6e3ZhbHVlOmV9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gaW50IHNhbXBsZXM7CgkJCXVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdOwoJCQl1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7CgkJCXVuaWZvcm0gZmxvYXQgZFRoZXRhOwoJCQl1bmlmb3JtIGZsb2F0IG1pcEludDsKCQkJdW5pZm9ybSB2ZWMzIHBvbGVBeGlzOwoKCQkJI2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWCgkJCSNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CgoJCQl2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHsKCgkJCQlmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTsKCQkJCS8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvbgoJCQkJdmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGEKCQkJCQkrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhICkKCQkJCQkrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTsKCgkJCQlyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTsKCgkJCX0KCgkJCXZvaWQgbWFpbigpIHsKCgkJCQl2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJaWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7CgoJCQkJCWF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTsKCgkJCQl9CgoJCQkJYXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApOwoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApOwoKCQkJCWZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHsKCgkJCQkJaWYgKCBpID49IHNhbXBsZXMgKSB7CgoJCQkJCQlicmVhazsKCgkJCQkJfQoKCQkJCQlmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApOwoJCQkJCWdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApOwoKCQkJCX0KCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gdmcoKXtsZXQgbj1uZXcgSygxLDEpO3JldHVybiBuZXcgWHIoe25hbWU6IkVxdWlyZWN0YW5ndWxhclRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSx0ZXhlbFNpemU6e3ZhbHVlOm59fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7CgoJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoKCQkJCXZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7CgkJCQl2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJdmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7CgkJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQkJdmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54ICs9IHRleGVsU2l6ZS54OwoJCQkJdmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di55ICs9IHRleGVsU2l6ZS55OwoJCQkJdmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54IC09IHRleGVsU2l6ZS54OwoJCQkJdmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgoJCQkJdmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTsKCQkJCXZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6am4sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBfZygpe3JldHVybiBuZXcgWHIoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwOwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDsKCgkJCXZvaWQgbWFpbigpIHsKCgkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogdk91dHB1dERpcmVjdGlvbi54LCB2T3V0cHV0RGlyZWN0aW9uLnl6ICkgKTsKCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gamgoKXtyZXR1cm5gCgoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDsKCgkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCS8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb24KCQl2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHsKCgkJCXV2ID0gMi4wICogdXYgLSAxLjA7CgoJCQl2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTsKCgkJCWlmICggZmFjZSA9PSAwLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgoJCQkJZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OwoJCQkJZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7CgoJCQkJZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6CgoJCQl9CgoJCQlyZXR1cm4gZGlyZWN0aW9uOwoKCQl9CgoJCXZvaWQgbWFpbigpIHsKCgkJCXZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7CgoJCX0KCWB9ZnVuY3Rpb24gdFMobil7bGV0IHQ9bmV3IFdlYWtNYXAsZT1udWxsO2Z1bmN0aW9uIGkoYSl7aWYoYSYmYS5pc1RleHR1cmUpe2xldCBsPWEubWFwcGluZyxjPWw9PT1VdXx8bD09PUJ1LHU9bD09PUFvfHxsPT09Q287aWYoY3x8dSlpZihhLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmYS5uZWVkc1BNUkVNVXBkYXRlPT09ITApe2EubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChhKTtyZXR1cm4gZT09PW51bGwmJihlPW5ldyBhbChuKSksaD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhLGgpOmUuZnJvbUN1YmVtYXAoYSxoKSx0LnNldChhLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKGEpKXJldHVybiB0LmdldChhKS50ZXh0dXJlO3tsZXQgaD1hLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJnIoaCkpe2U9PT1udWxsJiYoZT1uZXcgYWwobikpO2xldCBmPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEpOmUuZnJvbUN1YmVtYXAoYSk7cmV0dXJuIHQuc2V0KGEsZiksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBhfWZ1bmN0aW9uIHIoYSl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylhW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIHMoYSl7bGV0IGw9YS50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIG8oKXt0PW5ldyBXZWFrTWFwLGUhPT1udWxsJiYoZS5kaXNwb3NlKCksZT1udWxsKX1yZXR1cm57Z2V0OmksZGlzcG9zZTpvfX1mdW5jdGlvbiBlUyhuKXtsZXQgdD17fTtmdW5jdGlvbiBlKGkpe2lmKHRbaV0hPT12b2lkIDApcmV0dXJuIHRbaV07bGV0IHI7c3dpdGNoKGkpe2Nhc2UiV0VCR0xfZGVwdGhfdGV4dHVyZSI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiOnI9bi5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTticmVhaztkZWZhdWx0OnI9bi5nZXRFeHRlbnNpb24oaSl9cmV0dXJuIHRbaV09cixyfXJldHVybntoYXM6ZnVuY3Rpb24oaSl7cmV0dXJuIGUoaSkhPT1udWxsfSxpbml0OmZ1bmN0aW9uKGkpe2kuaXNXZWJHTDI/ZSgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOihlKCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksZSgiT0VTX3RleHR1cmVfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSxlKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSxlKCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksZSgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxlKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpLGUoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLGUoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpLGUoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSxnZXQ6ZnVuY3Rpb24oaSl7bGV0IHI9ZShpKTtyZXR1cm4gcj09PW51bGwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitpKyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIikscn19fWZ1bmN0aW9uIG5TKG4sdCxlLGkpe2xldCByPXt9LHM9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbyhoKXtsZXQgZj1oLnRhcmdldDtmLmluZGV4IT09bnVsbCYmdC5yZW1vdmUoZi5pbmRleCk7Zm9yKGxldCBnIGluIGYuYXR0cmlidXRlcyl0LnJlbW92ZShmLmF0dHJpYnV0ZXNbZ10pO2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksZGVsZXRlIHJbZi5pZF07bGV0IGQ9cy5nZXQoZik7ZCYmKHQucmVtb3ZlKGQpLHMuZGVsZXRlKGYpKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KGYpLGYuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT09PSEwJiZkZWxldGUgZi5fbWF4SW5zdGFuY2VDb3VudCxlLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gYShoLGYpe3JldHVybiByW2YuaWRdPT09ITB8fChmLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHJbZi5pZF09ITAsZS5tZW1vcnkuZ2VvbWV0cmllcysrKSxmfWZ1bmN0aW9uIGwoaCl7bGV0IGY9aC5hdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBmKXQudXBkYXRlKGZbZ10sMzQ5NjIpO2xldCBkPWgubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBkKXtsZXQgeD1kW2ddO2ZvcihsZXQgdj0wLG09eC5sZW5ndGg7djxtO3YrKyl0LnVwZGF0ZSh4W3ZdLDM0OTYyKX19ZnVuY3Rpb24gYyhoKXtsZXQgZj1bXSxkPWguaW5kZXgsZz1oLmF0dHJpYnV0ZXMucG9zaXRpb24seD0wO2lmKGQhPT1udWxsKXtsZXQgcD1kLmFycmF5O3g9ZC52ZXJzaW9uO2ZvcihsZXQgYj0wLF89cC5sZW5ndGg7YjxfO2IrPTMpe2xldCBTPXBbYiswXSxMPXBbYisxXSxBPXBbYisyXTtmLnB1c2goUyxMLEwsQSxBLFMpfX1lbHNle2xldCBwPWcuYXJyYXk7eD1nLnZlcnNpb247Zm9yKGxldCBiPTAsXz1wLmxlbmd0aC8zLTE7YjxfO2IrPTMpe2xldCBTPWIrMCxMPWIrMSxBPWIrMjtmLnB1c2goUyxMLEwsQSxBLFMpfX1sZXQgdj1uZXcocDAoZik/c2w6cmwpKGYsMSk7di52ZXJzaW9uPXg7bGV0IG09cy5nZXQoaCk7bSYmdC5yZW1vdmUobSkscy5zZXQoaCx2KX1mdW5jdGlvbiB1KGgpe2xldCBmPXMuZ2V0KGgpO2lmKGYpe2xldCBkPWguaW5kZXg7ZCE9PW51bGwmJmYudmVyc2lvbjxkLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBzLmdldChoKX1yZXR1cm57Z2V0OmEsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIGlTKG4sdCxlLGkpe2xldCByPWkuaXNXZWJHTDIscztmdW5jdGlvbiBvKGYpe3M9Zn1sZXQgYSxsO2Z1bmN0aW9uIGMoZil7YT1mLnR5cGUsbD1mLmJ5dGVzUGVyRWxlbWVudH1mdW5jdGlvbiB1KGYsZCl7bi5kcmF3RWxlbWVudHMocyxkLGEsZipsKSxlLnVwZGF0ZShkLHMsMSl9ZnVuY3Rpb24gaChmLGQsZyl7aWYoZz09PTApcmV0dXJuO2xldCB4LHY7aWYocil4PW4sdj0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKHg9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSx2PSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIseD09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59eFt2XShzLGQsYSxmKmwsZyksZS51cGRhdGUoZCxzLGcpfXRoaXMuc2V0TW9kZT1vLHRoaXMuc2V0SW5kZXg9Yyx0aGlzLnJlbmRlcj11LHRoaXMucmVuZGVySW5zdGFuY2VzPWh9ZnVuY3Rpb24gclMobil7bGV0IHQ9e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxlPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07ZnVuY3Rpb24gaShzLG8sYSl7c3dpdGNoKGUuY2FsbHMrKyxvKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWEqKHMvMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWEqKHMvMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWEqKHMtMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWEqczticmVhaztjYXNlIDA6ZS5wb2ludHMrPWEqczticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixvKTticmVha319ZnVuY3Rpb24gcigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH1yZXR1cm57bWVtb3J5OnQscmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6cix1cGRhdGU6aX19dmFyIGNvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2NvLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtmdW5jdGlvbiBzUyhuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rpb24gb1Mobix0KXtyZXR1cm4gTWF0aC5hYnModFsxXSktTWF0aC5hYnMoblsxXSl9ZnVuY3Rpb24gd2cobix0KXtsZXQgZT0xLGk9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O2kgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZT0xMjc6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZT0zMjc2NzppIGluc3RhbmNlb2YgSW50MzJBcnJheT9lPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsaSksbi5kaXZpZGVTY2FsYXIoZSl9ZnVuY3Rpb24gYVMobix0LGUpe2xldCBpPXt9LHI9bmV3IEZsb2F0MzJBcnJheSg4KSxzPW5ldyBXZWFrTWFwLG89bmV3IFQsYT1bXTtmb3IobGV0IGM9MDtjPDg7YysrKWFbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgZD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBnPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCx4PXMuZ2V0KHUpO2lmKHg9PT12b2lkIDB8fHguY291bnQhPT1nKXtsZXQgUj1mdW5jdGlvbigpe1guZGlzcG9zZSgpLHMuZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsUil9O3ghPT12b2lkIDAmJngudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHA9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sXz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLFM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LEw9cD09PSEwPzI6MSxBPVMqTCxIPTE7QT50Lm1heFRleHR1cmVTaXplJiYoSD1NYXRoLmNlaWwoQS90Lm1heFRleHR1cmVTaXplKSxBPXQubWF4VGV4dHVyZVNpemUpO2xldCB0dD1uZXcgRmxvYXQzMkFycmF5KEEqSCo0KmcpLFg9bmV3IGNvKHR0LEEsSCxnKTtYLmZvcm1hdD1SZSxYLnR5cGU9VWksWC5uZWVkc1VwZGF0ZT0hMDtsZXQgeT1MKjQ7Zm9yKGxldCBEPTA7RDxnO0QrKyl7bGV0IEY9YltEXSx6PV9bRF0sTj1BKkgqNCpEO2ZvcihsZXQgVj0wO1Y8Ri5jb3VudDtWKyspe28uZnJvbUJ1ZmZlckF0dHJpYnV0ZShGLFYpLEYubm9ybWFsaXplZD09PSEwJiZ3ZyhvLEYpO2xldCBRPVYqeTt0dFtOK1ErMF09by54LHR0W04rUSsxXT1vLnksdHRbTitRKzJdPW8ueix0dFtOK1ErM109MCxwPT09ITAmJihvLmZyb21CdWZmZXJBdHRyaWJ1dGUoeixWKSx6Lm5vcm1hbGl6ZWQ9PT0hMCYmd2cobyx6KSx0dFtOK1ErNF09by54LHR0W04rUSs1XT1vLnksdHRbTitRKzZdPW8ueix0dFtOK1ErN109MCl9fXg9e2NvdW50OmcsdGV4dHVyZTpYLHNpemU6bmV3IEsoQSxIKX0scy5zZXQodSx4KSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFIpfWxldCB2PTA7Zm9yKGxldCBwPTA7cDxkLmxlbmd0aDtwKyspdis9ZFtwXTtsZXQgbT11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS12O2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLG0pLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGQpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlIix4LnRleHR1cmUsZSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIix4LnNpemUpfWVsc2V7bGV0IGc9ZD09PXZvaWQgMD8wOmQubGVuZ3RoLHg9aVt1LmlkXTtpZih4PT09dm9pZCAwfHx4Lmxlbmd0aCE9PWcpe3g9W107Zm9yKGxldCBfPTA7XzxnO18rKyl4W19dPVtfLDBdO2lbdS5pZF09eH1mb3IobGV0IF89MDtfPGc7XysrKXtsZXQgUz14W19dO1NbMF09XyxTWzFdPWRbX119eC5zb3J0KG9TKTtmb3IobGV0IF89MDtfPDg7XysrKV88ZyYmeFtfXVsxXT8oYVtfXVswXT14W19dWzBdLGFbX11bMV09eFtfXVsxXSk6KGFbX11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYVtfXVsxXT0wKTthLnNvcnQoc1MpO2xldCB2PXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG09dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHA9MDtmb3IobGV0IF89MDtfPDg7XysrKXtsZXQgUz1hW19dLEw9U1swXSxBPVNbMV07TCE9PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSJiZBPyh2JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pIT09dltMXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitfLHZbTF0pLG0mJnUuZ2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrXykhPT1tW0xdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18sbVtMXSkscltfXT1BLHArPUEpOih2JiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrXyksbSYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitfKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18pLHJbX109MCl9bGV0IGI9dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtcDtmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixiKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixyKX19cmV0dXJue3VwZGF0ZTpsfX1mdW5jdGlvbiBsUyhuLHQsZSxpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBzKGwpe2xldCBjPWkucmVuZGVyLmZyYW1lLHU9bC5nZW9tZXRyeSxoPXQuZ2V0KGwsdSk7cmV0dXJuIHIuZ2V0KGgpIT09YyYmKHQudXBkYXRlKGgpLHIuc2V0KGgsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYobC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKT09PSExJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLGwuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGh9ZnVuY3Rpb24gbygpe3I9bmV3IFdlYWtNYXB9ZnVuY3Rpb24gYShsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLGMuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpzLGRpc3Bvc2U6b319dmFyIGxsPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2xsLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIHYwPW5ldyBhZSxfMD1uZXcgY28sdzA9bmV3IGxsLE0wPW5ldyBXcixNZz1bXSxiZz1bXSxTZz1uZXcgRmxvYXQzMkFycmF5KDE2KSxFZz1uZXcgRmxvYXQzMkFycmF5KDkpLFRnPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gZXMobix0LGUpe2xldCBpPW5bMF07aWYoaTw9MHx8aT4wKXJldHVybiBuO2xldCByPXQqZSxzPU1nW3JdO2lmKHM9PT12b2lkIDAmJihzPW5ldyBGbG9hdDMyQXJyYXkociksTWdbcl09cyksdCE9PTApe2kudG9BcnJheShzLDApO2ZvcihsZXQgbz0xLGE9MDtvIT09dDsrK28pYSs9ZSxuW29dLnRvQXJyYXkocyxhKX1yZXR1cm4gc31mdW5jdGlvbiBMZShuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFRlKG4sdCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW5bZV09dFtlXX1mdW5jdGlvbiBQbChuLHQpe2xldCBlPWJnW3RdO2U9PT12b2lkIDAmJihlPW5ldyBJbnQzMkFycmF5KHQpLGJnW3RdPWUpO2ZvcihsZXQgaT0wO2khPT10OysraSllW2ldPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiBlfWZ1bmN0aW9uIGNTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFmKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHVTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKGVbMF0hPT10Lnh8fGVbMV0hPT10LnkpJiYobi51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLGVbMF09dC54LGVbMV09dC55KTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTJmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gaFMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQueikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoZVswXSE9PXQucnx8ZVsxXSE9PXQuZ3x8ZVsyXSE9PXQuYikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLGVbMF09dC5yLGVbMV09dC5nLGVbMl09dC5iKTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTNmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gZlMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQuenx8ZVszXSE9PXQudykmJihuLnVuaWZvcm00Zih0aGlzLmFkZHIsdC54LHQueSx0LnosdC53KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlWzNdPXQudyk7ZWxzZXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLHQpLFRlKGUsdCl9fWZ1bmN0aW9uIGRTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47VGcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsVGcpLFRlKGUsaSl9fWZ1bmN0aW9uIHBTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47RWcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRWcpLFRlKGUsaSl9fWZ1bmN0aW9uIG1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47U2cuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsU2cpLFRlKGUsaSl9fWZ1bmN0aW9uIGdTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHhTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiB5UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTNpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gdlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIF9TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiB3UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIE1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gYlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiBTUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZTJEKHR8fHYwLHIpfWZ1bmN0aW9uIEVTKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUzRCh0fHx3MCxyKX1mdW5jdGlvbiBUUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZUN1YmUodHx8TTAscil9ZnVuY3Rpb24gQVMobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTJEQXJyYXkodHx8XzAscil9ZnVuY3Rpb24gQ1Mobil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gY1M7Y2FzZSAzNTY2NDpyZXR1cm4gdVM7Y2FzZSAzNTY2NTpyZXR1cm4gaFM7Y2FzZSAzNTY2NjpyZXR1cm4gZlM7Y2FzZSAzNTY3NDpyZXR1cm4gZFM7Y2FzZSAzNTY3NTpyZXR1cm4gcFM7Y2FzZSAzNTY3NjpyZXR1cm4gbVM7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGdTO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4geFM7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB5UztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIHZTO2Nhc2UgNTEyNTpyZXR1cm4gX1M7Y2FzZSAzNjI5NDpyZXR1cm4gd1M7Y2FzZSAzNjI5NTpyZXR1cm4gTVM7Y2FzZSAzNjI5NjpyZXR1cm4gYlM7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBTUztjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gRVM7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gVFM7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gQVN9fWZ1bmN0aW9uIFJTKG4sdCl7bi51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBMUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDIpO24udW5pZm9ybTJmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gUFMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSwzKTtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIERTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsNCk7bi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBJUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDQpO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gTlMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSw5KTtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIEZTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsMTYpO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gelMobix0KXtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFVTKG4sdCl7bi51bmlmb3JtMml2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCUyhuLHQpe24udW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gT1Mobix0KXtuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGtTKG4sdCl7bi51bmlmb3JtMXVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gSFMobix0KXtuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWUyhuLHQpe24udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEdTKG4sdCl7bi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gV1Mobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNhZmVTZXRUZXh0dXJlMkQodFtzXXx8djAscltzXSl9ZnVuY3Rpb24gcVMobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNldFRleHR1cmUzRCh0W3NdfHx3MCxyW3NdKX1mdW5jdGlvbiBYUyhuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1QbChlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBzPTA7cyE9PWk7KytzKWUuc2FmZVNldFRleHR1cmVDdWJlKHRbc118fE0wLHJbc10pfWZ1bmN0aW9uIFlTKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVBsKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IHM9MDtzIT09aTsrK3MpZS5zZXRUZXh0dXJlMkRBcnJheSh0W3NdfHxfMCxyW3NdKX1mdW5jdGlvbiBaUyhuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBSUztjYXNlIDM1NjY0OnJldHVybiBMUztjYXNlIDM1NjY1OnJldHVybiBQUztjYXNlIDM1NjY2OnJldHVybiBEUztjYXNlIDM1Njc0OnJldHVybiBJUztjYXNlIDM1Njc1OnJldHVybiBOUztjYXNlIDM1Njc2OnJldHVybiBGUztjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gelM7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBVUztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIEJTO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gT1M7Y2FzZSA1MTI1OnJldHVybiBrUztjYXNlIDM2Mjk0OnJldHVybiBIUztjYXNlIDM2Mjk1OnJldHVybiBWUztjYXNlIDM2Mjk2OnJldHVybiBHUztjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFdTO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBxUztjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBYUztjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBZU319ZnVuY3Rpb24gSlMobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9Q1ModC50eXBlKX1mdW5jdGlvbiBiMChuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPVpTKHQudHlwZSl9YjAucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuY2FjaGU7biBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmdC5sZW5ndGghPT1uLmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpLFRlKHQsbil9O2Z1bmN0aW9uIFMwKG4pe3RoaXMuaWQ9bix0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1TMC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKXtsZXQgbz1pW3JdO28uc2V0VmFsdWUobix0W28uaWRdLGUpfX07dmFyIEN1PS8oXHcrKShcXSk/KFxbfFwuKT8vZztmdW5jdGlvbiBBZyhuLHQpe24uc2VxLnB1c2godCksbi5tYXBbdC5pZF09dH1mdW5jdGlvbiAkUyhuLHQsZSl7bGV0IGk9bi5uYW1lLHI9aS5sZW5ndGg7Zm9yKEN1Lmxhc3RJbmRleD0wOzspe2xldCBzPUN1LmV4ZWMoaSksbz1DdS5sYXN0SW5kZXgsYT1zWzFdLGw9c1syXT09PSJdIixjPXNbM107aWYobCYmKGE9YXwwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZvKzI9PT1yKXtBZyhlLGM9PT12b2lkIDA/bmV3IEpTKGEsbix0KTpuZXcgYjAoYSxuLHQpKTticmVha31lbHNle2xldCBoPWUubWFwW2FdO2g9PT12b2lkIDAmJihoPW5ldyBTMChhKSxBZyhlLGgpKSxlPWh9fX1mdW5jdGlvbiBpaShuLHQpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2xldCBlPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzE4KTtmb3IobGV0IGk9MDtpPGU7KytpKXtsZXQgcj1uLmdldEFjdGl2ZVVuaWZvcm0odCxpKSxzPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHQsci5uYW1lKTskUyhyLHMsdGhpcyl9fWlpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTtyIT09dm9pZCAwJiZyLnNldFZhbHVlKG4sZSxpKX07aWkucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO2khPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUobixlLGkpfTtpaS51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAscz10Lmxlbmd0aDtyIT09czsrK3Ipe2xldCBvPXRbcl0sYT1lW28uaWRdO2EubmVlZHNVcGRhdGUhPT0hMSYmby5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fTtpaS5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9bltpXTtzLmlkIGluIHQmJmUucHVzaChzKX1yZXR1cm4gZX07ZnVuY3Rpb24gQ2cobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfXZhciBLUz0wO2Z1bmN0aW9uIFFTKG4pe2xldCB0PW4uc3BsaXQoYApgKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPWUrMSsiOiAiK3RbZV07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGpTKG4pe3N3aXRjaChuKXtjYXNlIHJpOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSAkdDpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6IixuKSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX1mdW5jdGlvbiBSZyhuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiZyPT09IiI/IiI6ZS50b1VwcGVyQ2FzZSgpK2AKCmArcitgCgpgK1FTKG4uZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiB0RShuLHQpe2xldCBlPWpTKHQpO3JldHVybiJ2ZWM0ICIrbisiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK2VbMF0rZVsxXSsiOyB9In1mdW5jdGlvbiBlRShuLHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIEF3OmU9IkxpbmVhciI7YnJlYWs7Y2FzZSBDdzplPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSBSdzplPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgTHc6ZT0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSBQdzplPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCksZT0iTGluZWFyIn1yZXR1cm4idmVjMyAiK24rIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIG5FKG4pe3JldHVybltuLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxuLmVudk1hcEN1YmVVVnx8bi5idW1wTWFwfHxuLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8bi5jbGVhcmNvYXROb3JtYWxNYXB8fG4uZmxhdFNoYWRpbmd8fG4uc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKG4uZXh0ZW5zaW9uRnJhZ0RlcHRofHxuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixuLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwfHxuLnRyYW5zbWlzc2lvbikmJm4ucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoJHMpLmpvaW4oYApgKX1mdW5jdGlvbiBpRShuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTtpIT09ITEmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiByRShuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBzPW4uZ2V0QWN0aXZlQXR0cmliKHQsciksbz1zLm5hbWUsYT0xO3MudHlwZT09PTM1Njc0JiYoYT0yKSxzLnR5cGU9PT0zNTY3NSYmKGE9Mykscy50eXBlPT09MzU2NzYmJihhPTQpLGVbb109e3R5cGU6cy50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxvKSxsb2NhdGlvblNpemU6YX19cmV0dXJuIGV9ZnVuY3Rpb24gJHMobil7cmV0dXJuIG4hPT0iIn1mdW5jdGlvbiBMZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBQZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzLXQubnVtQ2xpcEludGVyc2VjdGlvbil9dmFyIHNFPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gcXUobil7cmV0dXJuIG4ucmVwbGFjZShzRSxvRSl9ZnVuY3Rpb24gb0Uobix0KXtsZXQgZT1QdFt0XTtpZihlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gcXUoZSl9dmFyIGFFPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csbEU9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBEZyhuKXtyZXR1cm4gbi5yZXBsYWNlKGxFLEUwKS5yZXBsYWNlKGFFLGNFKX1mdW5jdGlvbiBjRShuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksRTAobix0LGUsaSl9ZnVuY3Rpb24gRTAobix0LGUsaSl7bGV0IHI9IiI7Zm9yKGxldCBzPXBhcnNlSW50KHQpO3M8cGFyc2VJbnQoZSk7cysrKXIrPWkucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK3MrIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLHMpO3JldHVybiByfWZ1bmN0aW9uIElnKG4pe2xldCB0PSJwcmVjaXNpb24gIituLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtuLnByZWNpc2lvbisiIGludDsiO3JldHVybiBuLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDpuLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6bi5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gdUUobil7bGV0IHQ9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gbi5zaGFkb3dNYXBUeXBlPT09bDA/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjpuLnNoYWRvd01hcFR5cGU9PT1zdz90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6bi5zaGFkb3dNYXBUeXBlPT09SnMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIGhFKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIEFvOmNhc2UgQ286dD0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSBSbDpjYXNlIEtoOnQ9IkVOVk1BUF9UWVBFX0NVQkVfVVYiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGZFKG4pe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIENvOmNhc2UgS2g6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZEUobil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIENsOnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBFdzp0PSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIFR3OnQ9IkVOVk1BUF9CTEVORElOR19BREQiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIHBFKG4sdCxlLGkpe2xldCByPW4uZ2V0Q29udGV4dCgpLHM9ZS5kZWZpbmVzLG89ZS52ZXJ0ZXhTaGFkZXIsYT1lLmZyYWdtZW50U2hhZGVyLGw9dUUoZSksYz1oRShlKSx1PWZFKGUpLGg9ZEUoZSksZj1lLmlzV2ViR0wyPyIiOm5FKGUpLGQ9aUUocyksZz1yLmNyZWF0ZVByb2dyYW0oKSx4LHYsbT1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rYApgOiIiO2UuaXNSYXdTaGFkZXJNYXRlcmlhbD8oeD1bZF0uZmlsdGVyKCRzKS5qb2luKGAKYCkseC5sZW5ndGg+MCYmKHgrPWAKYCksdj1bZixkXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2Lmxlbmd0aD4wJiYodis9YApgKSk6KHg9W0lnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiZlLmZsYXRTaGFkaW5nPT09ITE/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIglhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCIJYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiCWF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiCWF0dHJpYnV0ZSB2ZWM0IGNvbG9yOyIsIiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIiwiCWF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZiAoIGRlZmluZWQoIFVTRV9NT1JQSFRBUkdFVFMgKSAmJiAhIGRlZmluZWQoIE1PUlBIVEFSR0VUU19URVhUVVJFICkgKSIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiCSNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDI7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiCSNlbHNlIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDY7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiCSNlbmRpZiIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfU0tJTk5JTkciLCIJYXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIglhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsYApgXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2PVtmLElnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitoOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsZS50b25lTWFwcGluZyE9PXRpPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsZS50b25lTWFwcGluZyE9PXRpP1B0LnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsZS50b25lTWFwcGluZyE9PXRpP2VFKCJ0b25lTWFwcGluZyIsZS50b25lTWFwcGluZyk6IiIsZS5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixlLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixQdC5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCx0RSgibGluZWFyVG9PdXRwdXRUZXhlbCIsZS5vdXRwdXRFbmNvZGluZyksZS5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2UuZGVwdGhQYWNraW5nOiIiLGAKYF0uZmlsdGVyKCRzKS5qb2luKGAKYCkpLG89cXUobyksbz1MZyhvLGUpLG89UGcobyxlKSxhPXF1KGEpLGE9TGcoYSxlKSxhPVBnKGEsZSksbz1EZyhvKSxhPURnKGEpLGUuaXNXZWJHTDImJmUuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYobT1gI3ZlcnNpb24gMzAwIGVzCmAseD1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK3gsdj1bIiNkZWZpbmUgdmFyeWluZyBpbiIsZS5nbHNsVmVyc2lvbj09PW5nPyIiOiJsYXlvdXQobG9jYXRpb24gPSAwKSBvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7IixlLmdsc2xWZXJzaW9uPT09bmc/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oYApgKStgCmArdik7bGV0IHA9bSt4K28sYj1tK3YrYSxfPUNnKHIsMzU2MzMscCksUz1DZyhyLDM1NjMyLGIpO2lmKHIuYXR0YWNoU2hhZGVyKGcsXyksci5hdHRhY2hTaGFkZXIoZyxTKSxlLmluZGV4MEF0dHJpYnV0ZU5hbWUhPT12b2lkIDA/ci5iaW5kQXR0cmliTG9jYXRpb24oZywwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ZS5tb3JwaFRhcmdldHM9PT0hMCYmci5iaW5kQXR0cmliTG9jYXRpb24oZywwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZyksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IEg9ci5nZXRQcm9ncmFtSW5mb0xvZyhnKS50cmltKCksdHQ9ci5nZXRTaGFkZXJJbmZvTG9nKF8pLnRyaW0oKSxYPXIuZ2V0U2hhZGVySW5mb0xvZyhTKS50cmltKCkseT0hMCxSPSEwO2lmKHIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE0KT09PSExKXt5PSExO2xldCBEPVJnKHIsXywidmVydGV4IiksRj1SZyhyLFMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIityLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK3IuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE1KStgCgpQcm9ncmFtIEluZm8gTG9nOiBgK0grYApgK0QrYApgK0YpfWVsc2UgSCE9PSIiP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsSCk6KHR0PT09IiJ8fFg9PT0iIikmJihSPSExKTtSJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6eSxwcm9ncmFtTG9nOkgsdmVydGV4U2hhZGVyOntsb2c6dHQscHJlZml4Onh9LGZyYWdtZW50U2hhZGVyOntsb2c6WCxwcmVmaXg6dn19KX1yLmRlbGV0ZVNoYWRlcihfKSxyLmRlbGV0ZVNoYWRlcihTKTtsZXQgTDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIEw9PT12b2lkIDAmJihMPW5ldyBpaShyLGcpKSxMfTtsZXQgQTtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEE9PT12b2lkIDAmJihBPXJFKHIsZykpLEF9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0oZyksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPUtTKyssdGhpcy5jYWNoZUtleT10LHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPWcsdGhpcy52ZXJ0ZXhTaGFkZXI9Xyx0aGlzLmZyYWdtZW50U2hhZGVyPVMsdGhpc312YXIgbUU9MCxYdT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hhZGVyQ2FjaGU9bmV3IE1hcCx0aGlzLm1hdGVyaWFsQ2FjaGU9bmV3IE1hcH11cGRhdGUodCl7bGV0IGU9dC52ZXJ0ZXhTaGFkZXIsaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoZSkscz10aGlzLl9nZXRTaGFkZXJTdGFnZShpKSxvPXRoaXMuX2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCk7cmV0dXJuIG8uaGFzKHIpPT09ITEmJihvLmFkZChyKSxyLnVzZWRUaW1lcysrKSxvLmhhcyhzKT09PSExJiYoby5hZGQocykscy51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLGkudXNlZFRpbWVzPT09MCYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiBlLmhhcyh0KT09PSExJiZlLnNldCh0LG5ldyBTZXQpLGUuZ2V0KHQpfV9nZXRTaGFkZXJTdGFnZSh0KXtsZXQgZT10aGlzLnNoYWRlckNhY2hlO2lmKGUuaGFzKHQpPT09ITEpe2xldCBpPW5ldyBZdTtlLnNldCh0LGkpfXJldHVybiBlLmdldCh0KX19LFl1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1tRSsrLHRoaXMudXNlZFRpbWVzPTB9fTtmdW5jdGlvbiBnRShuLHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgaWwsbD1uZXcgWHUsYz1bXSx1PXIuaXNXZWJHTDIsaD1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1yLmZsb2F0VmVydGV4VGV4dHVyZXMsZD1yLm1heFZlcnRleFVuaWZvcm1zLGc9ci52ZXJ0ZXhUZXh0dXJlcyx4PXIucHJlY2lzaW9uLHY9e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiBtKHkpe2xldCBEPXkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigoZC0yMCkvNCksTj1NYXRoLm1pbih6LEQubGVuZ3RoKTtyZXR1cm4gTjxELmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitELmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK04rIi4iKSwwKTpOfX1mdW5jdGlvbiBwKHksUixELEYseil7bGV0IE49Ri5mb2csVj15LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFE9KHkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lOnQpLmdldCh5LmVudk1hcHx8ViksYXQ9dlt5LnR5cGVdLEc9ei5pc1NraW5uZWRNZXNoP20oeik6MDt5LnByZWNpc2lvbiE9PW51bGwmJih4PXIuZ2V0TWF4UHJlY2lzaW9uKHkucHJlY2lzaW9uKSx4IT09eS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6Iix5LnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLHgsImluc3RlYWQuIikpO2xldCAkLGx0LGR0LHh0O2lmKGF0KXtsZXQgQj1mblthdF07JD1CLnZlcnRleFNoYWRlcixsdD1CLmZyYWdtZW50U2hhZGVyfWVsc2UgJD15LnZlcnRleFNoYWRlcixsdD15LmZyYWdtZW50U2hhZGVyLGwudXBkYXRlKHkpLGR0PWwuZ2V0VmVydGV4U2hhZGVySUQoeSkseHQ9bC5nZXRGcmFnbWVudFNoYWRlcklEKHkpO2xldCBrPW4uZ2V0UmVuZGVyVGFyZ2V0KCksRnQ9eS5hbHBoYVRlc3Q+MCxtdD15LmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOmF0LHNoYWRlck5hbWU6eS50eXBlLHZlcnRleFNoYWRlcjokLGZyYWdtZW50U2hhZGVyOmx0LGRlZmluZXM6eS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmR0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6eHQsaXNSYXdTaGFkZXJNYXRlcmlhbDp5LmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjp5Lmdsc2xWZXJzaW9uLHByZWNpc2lvbjp4LGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmcsb3V0cHV0RW5jb2Rpbmc6az09PW51bGw/bi5vdXRwdXRFbmNvZGluZzprLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9rLnRleHR1cmUuZW5jb2Rpbmc6cmksbWFwOiEheS5tYXAsbWF0Y2FwOiEheS5tYXRjYXAsZW52TWFwOiEhUSxlbnZNYXBNb2RlOlEmJlEubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFRJiYoUS5tYXBwaW5nPT09Umx8fFEubWFwcGluZz09PUtoKSxsaWdodE1hcDohIXkubGlnaHRNYXAsYW9NYXA6ISF5LmFvTWFwLGVtaXNzaXZlTWFwOiEheS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEheS5idW1wTWFwLG5vcm1hbE1hcDohIXkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOnkubm9ybWFsTWFwVHlwZT09PWp3LHRhbmdlbnRTcGFjZU5vcm1hbE1hcDp5Lm5vcm1hbE1hcFR5cGU9PT10cyxkZWNvZGVWaWRlb1RleHR1cmU6ISF5Lm1hcCYmeS5tYXAuaXNWaWRlb1RleHR1cmU9PT0hMCYmeS5tYXAuZW5jb2Rpbmc9PT0kdCxjbGVhcmNvYXQ6bXQsY2xlYXJjb2F0TWFwOm10JiYhIXkuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDptdCYmISF5LmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6bXQmJiEheS5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEheS5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEheS5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEheS5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISF5LnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEheS5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEheS5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEheS5hbHBoYU1hcCxhbHBoYVRlc3Q6RnQsYWxwaGFXcml0ZTp5LmFscGhhV3JpdGV8fHkudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISF5LmdyYWRpZW50TWFwLHNoZWVuOnkuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEheS5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEheS5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246eS50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISF5LnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISF5LnRoaWNrbmVzc01hcCxjb21iaW5lOnkuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIXkubm9ybWFsTWFwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQsdmVydGV4Q29sb3JzOnkudmVydGV4Q29sb3JzLHZlcnRleEFscGhhczp5LnZlcnRleENvbG9ycz09PSEwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiZ6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemU9PT00LHZlcnRleFV2czohIXkubWFwfHwhIXkuYnVtcE1hcHx8ISF5Lm5vcm1hbE1hcHx8ISF5LnNwZWN1bGFyTWFwfHwhIXkuYWxwaGFNYXB8fCEheS5lbWlzc2l2ZU1hcHx8ISF5LnJvdWdobmVzc01hcHx8ISF5Lm1ldGFsbmVzc01hcHx8ISF5LmNsZWFyY29hdE1hcHx8ISF5LmNsZWFyY29hdFJvdWdobmVzc01hcHx8ISF5LmNsZWFyY29hdE5vcm1hbE1hcHx8ISF5LmRpc3BsYWNlbWVudE1hcHx8ISF5LnRyYW5zbWlzc2lvbk1hcHx8ISF5LnRoaWNrbmVzc01hcHx8ISF5LnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIXkuc3BlY3VsYXJDb2xvck1hcHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCx1dnNWZXJ0ZXhPbmx5OiEoISF5Lm1hcHx8ISF5LmJ1bXBNYXB8fCEheS5ub3JtYWxNYXB8fCEheS5zcGVjdWxhck1hcHx8ISF5LmFscGhhTWFwfHwhIXkuZW1pc3NpdmVNYXB8fCEheS5yb3VnaG5lc3NNYXB8fCEheS5tZXRhbG5lc3NNYXB8fCEheS5jbGVhcmNvYXROb3JtYWxNYXB8fHkudHJhbnNtaXNzaW9uPjB8fCEheS50cmFuc21pc3Npb25NYXB8fCEheS50aGlja25lc3NNYXB8fCEheS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISF5LnNwZWN1bGFyQ29sb3JNYXB8fHkuc2hlZW4+MHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCkmJiEheS5kaXNwbGFjZW1lbnRNYXAsZm9nOiEhTix1c2VGb2c6eS5mb2csZm9nRXhwMjpOJiZOLmlzRm9nRXhwMixmbGF0U2hhZGluZzohIXkuZmxhdFNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOnkuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6aCxza2lubmluZzp6LmlzU2tpbm5lZE1lc2g9PT0hMCYmRz4wLG1heEJvbmVzOkcsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpSLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpSLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOlIuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6Ui5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpSLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpSLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpSLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOlIuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6by5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjpvLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6eS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpuLnNoYWRvd01hcC5lbmFibGVkJiZELmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6bi5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzp5LnRvbmVNYXBwZWQ/bi50b25lTWFwcGluZzp0aSxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czpuLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTp5LnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDp5LnNpZGU9PT1IcixmbGlwU2lkZWQ6eS5zaWRlPT09aGUsZGVwdGhQYWNraW5nOnkuZGVwdGhQYWNraW5nIT09dm9pZCAwP3kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6eS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOnkuZXh0ZW5zaW9ucyYmeS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6eS5leHRlbnNpb25zJiZ5LmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTp5LmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKHkpe2xldCBSPVtdO2lmKHkuc2hhZGVySUQ/Ui5wdXNoKHkuc2hhZGVySUQpOihSLnB1c2goeS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksUi5wdXNoKHkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLHkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IEQgaW4geS5kZWZpbmVzKVIucHVzaChEKSxSLnB1c2goeS5kZWZpbmVzW0RdKTtyZXR1cm4geS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihfKFIseSksUyhSLHkpLFIucHVzaChuLm91dHB1dEVuY29kaW5nKSksUi5wdXNoKHkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxSLmpvaW4oKX1mdW5jdGlvbiBfKHksUil7eS5wdXNoKFIucHJlY2lzaW9uKSx5LnB1c2goUi5vdXRwdXRFbmNvZGluZykseS5wdXNoKFIuZW52TWFwTW9kZSkseS5wdXNoKFIuY29tYmluZSkseS5wdXNoKFIudmVydGV4VXZzKSx5LnB1c2goUi5mb2dFeHAyKSx5LnB1c2goUi5zaXplQXR0ZW51YXRpb24pLHkucHVzaChSLm1heEJvbmVzKSx5LnB1c2goUi5tb3JwaFRhcmdldHNDb3VudCkseS5wdXNoKFIubnVtRGlyTGlnaHRzKSx5LnB1c2goUi5udW1Qb2ludExpZ2h0cykseS5wdXNoKFIubnVtU3BvdExpZ2h0cykseS5wdXNoKFIubnVtSGVtaUxpZ2h0cykseS5wdXNoKFIubnVtUmVjdEFyZWFMaWdodHMpLHkucHVzaChSLm51bURpckxpZ2h0U2hhZG93cykseS5wdXNoKFIubnVtUG9pbnRMaWdodFNoYWRvd3MpLHkucHVzaChSLm51bVNwb3RMaWdodFNoYWRvd3MpLHkucHVzaChSLnNoYWRvd01hcFR5cGUpLHkucHVzaChSLnRvbmVNYXBwaW5nKSx5LnB1c2goUi5udW1DbGlwcGluZ1BsYW5lcykseS5wdXNoKFIubnVtQ2xpcEludGVyc2VjdGlvbikseS5wdXNoKFIuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gUyh5LFIpe2EuZGlzYWJsZUFsbCgpLFIuaXNXZWJHTDImJmEuZW5hYmxlKDApLFIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmYS5lbmFibGUoMSksUi5pbnN0YW5jaW5nJiZhLmVuYWJsZSgyKSxSLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksUi5tYXAmJmEuZW5hYmxlKDQpLFIubWF0Y2FwJiZhLmVuYWJsZSg1KSxSLmVudk1hcCYmYS5lbmFibGUoNiksUi5lbnZNYXBDdWJlVVYmJmEuZW5hYmxlKDcpLFIubGlnaHRNYXAmJmEuZW5hYmxlKDgpLFIuYW9NYXAmJmEuZW5hYmxlKDkpLFIuZW1pc3NpdmVNYXAmJmEuZW5hYmxlKDEwKSxSLmJ1bXBNYXAmJmEuZW5hYmxlKDExKSxSLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLFIub2JqZWN0U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDEzKSxSLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmYS5lbmFibGUoMTQpLFIuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksUi5jbGVhcmNvYXRNYXAmJmEuZW5hYmxlKDE2KSxSLmNsZWFyY29hdFJvdWdobmVzc01hcCYmYS5lbmFibGUoMTcpLFIuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksUi5kaXNwbGFjZW1lbnRNYXAmJmEuZW5hYmxlKDE5KSxSLnNwZWN1bGFyTWFwJiZhLmVuYWJsZSgyMCksUi5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxSLm1ldGFsbmVzc01hcCYmYS5lbmFibGUoMjIpLFIuZ3JhZGllbnRNYXAmJmEuZW5hYmxlKDIzKSxSLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksUi5hbHBoYVRlc3QmJmEuZW5hYmxlKDI1KSxSLnZlcnRleENvbG9ycyYmYS5lbmFibGUoMjYpLFIudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksUi52ZXJ0ZXhVdnMmJmEuZW5hYmxlKDI4KSxSLnZlcnRleFRhbmdlbnRzJiZhLmVuYWJsZSgyOSksUi51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksUi5mb2cmJmEuZW5hYmxlKDMxKSx5LnB1c2goYS5tYXNrKSxhLmRpc2FibGVBbGwoKSxSLnVzZUZvZyYmYS5lbmFibGUoMCksUi5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksUi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmVuYWJsZSgyKSxSLnNraW5uaW5nJiZhLmVuYWJsZSgzKSxSLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLFIubW9ycGhUYXJnZXRzJiZhLmVuYWJsZSg1KSxSLm1vcnBoTm9ybWFscyYmYS5lbmFibGUoNiksUi5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLFIuc2hhZG93TWFwRW5hYmxlZCYmYS5lbmFibGUoOCksUi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmYS5lbmFibGUoOSksUi5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLFIuZmxpcFNpZGVkJiZhLmVuYWJsZSgxMSksUi5kZXB0aFBhY2tpbmcmJmEuZW5hYmxlKDEyKSxSLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLFIuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJmEuZW5hYmxlKDE0KSxSLnNwZWN1bGFyQ29sb3JNYXAmJmEuZW5hYmxlKDE1KSxSLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLFIudHJhbnNtaXNzaW9uTWFwJiZhLmVuYWJsZSgxNyksUi50aGlja25lc3NNYXAmJmEuZW5hYmxlKDE4KSxSLnNoZWVuJiZhLmVuYWJsZSgxOSksUi5zaGVlbkNvbG9yTWFwJiZhLmVuYWJsZSgyMCksUi5zaGVlblJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLFIuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMikseS5wdXNoKGEubWFzayl9ZnVuY3Rpb24gTCh5KXtsZXQgUj12W3kudHlwZV0sRDtpZihSKXtsZXQgRj1mbltSXTtEPXBNLmNsb25lKEYudW5pZm9ybXMpfWVsc2UgRD15LnVuaWZvcm1zO3JldHVybiBEfWZ1bmN0aW9uIEEoeSxSKXtsZXQgRDtmb3IobGV0IEY9MCx6PWMubGVuZ3RoO0Y8ejtGKyspe2xldCBOPWNbRl07aWYoTi5jYWNoZUtleT09PVIpe0Q9TiwrK0QudXNlZFRpbWVzO2JyZWFrfX1yZXR1cm4gRD09PXZvaWQgMCYmKEQ9bmV3IHBFKG4sUix5LHMpLGMucHVzaChEKSksRH1mdW5jdGlvbiBIKHkpe2lmKC0teS51c2VkVGltZXM9PT0wKXtsZXQgUj1jLmluZGV4T2YoeSk7Y1tSXT1jW2MubGVuZ3RoLTFdLGMucG9wKCkseS5kZXN0cm95KCl9fWZ1bmN0aW9uIHR0KHkpe2wucmVtb3ZlKHkpfWZ1bmN0aW9uIFgoKXtsLmRpc3Bvc2UoKX1yZXR1cm57Z2V0UGFyYW1ldGVyczpwLGdldFByb2dyYW1DYWNoZUtleTpiLGdldFVuaWZvcm1zOkwsYWNxdWlyZVByb2dyYW06QSxyZWxlYXNlUHJvZ3JhbTpILHJlbGVhc2VTaGFkZXJDYWNoZTp0dCxwcm9ncmFtczpjLGRpc3Bvc2U6WH19ZnVuY3Rpb24geEUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KHMpe2xldCBvPW4uZ2V0KHMpO3JldHVybiBvPT09dm9pZCAwJiYobz17fSxuLnNldChzLG8pKSxvfWZ1bmN0aW9uIGUocyl7bi5kZWxldGUocyl9ZnVuY3Rpb24gaShzLG8sYSl7bi5nZXQocylbb109YX1mdW5jdGlvbiByKCl7bj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQscmVtb3ZlOmUsdXBkYXRlOmksZGlzcG9zZTpyfX1mdW5jdGlvbiB5RShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/bi5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOm4ueiE9PXQuej9uLnotdC56Om4uaWQtdC5pZH1mdW5jdGlvbiBOZyhuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi56IT09dC56P3Quei1uLno6bi5pZC10LmlkfWZ1bmN0aW9uIEZnKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIHMoKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9ZnVuY3Rpb24gbyhoLGYsZCxnLHgsdil7bGV0IG09blt0XTtyZXR1cm4gbT09PXZvaWQgMD8obT17aWQ6aC5pZCxvYmplY3Q6aCxnZW9tZXRyeTpmLG1hdGVyaWFsOmQsZ3JvdXBPcmRlcjpnLHJlbmRlck9yZGVyOmgucmVuZGVyT3JkZXIsejp4LGdyb3VwOnZ9LG5bdF09bSk6KG0uaWQ9aC5pZCxtLm9iamVjdD1oLG0uZ2VvbWV0cnk9ZixtLm1hdGVyaWFsPWQsbS5ncm91cE9yZGVyPWcsbS5yZW5kZXJPcmRlcj1oLnJlbmRlck9yZGVyLG0uej14LG0uZ3JvdXA9diksdCsrLG19ZnVuY3Rpb24gYShoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnB1c2gobSk6ZC50cmFuc3BhcmVudD09PSEwP3IucHVzaChtKTplLnB1c2gobSl9ZnVuY3Rpb24gbChoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnVuc2hpZnQobSk6ZC50cmFuc3BhcmVudD09PSEwP3IudW5zaGlmdChtKTplLnVuc2hpZnQobSl9ZnVuY3Rpb24gYyhoLGYpe2UubGVuZ3RoPjEmJmUuc29ydChofHx5RSksaS5sZW5ndGg+MSYmaS5zb3J0KGZ8fE5nKSxyLmxlbmd0aD4xJiZyLnNvcnQoZnx8TmcpfWZ1bmN0aW9uIHUoKXtmb3IobGV0IGg9dCxmPW4ubGVuZ3RoO2g8ZjtoKyspe2xldCBkPW5baF07aWYoZC5pZD09PW51bGwpYnJlYWs7ZC5pZD1udWxsLGQub2JqZWN0PW51bGwsZC5nZW9tZXRyeT1udWxsLGQubWF0ZXJpYWw9bnVsbCxkLmdyb3VwPW51bGx9fXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6cyxwdXNoOmEsdW5zaGlmdDpsLGZpbmlzaDp1LHNvcnQ6Y319ZnVuY3Rpb24gdkUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KGkscil7bGV0IHM7cmV0dXJuIG4uaGFzKGkpPT09ITE/KHM9bmV3IEZnLG4uc2V0KGksW3NdKSk6cj49bi5nZXQoaSkubGVuZ3RoPyhzPW5ldyBGZyxuLmdldChpKS5wdXNoKHMpKTpzPW4uZ2V0KGkpW3JdLHN9ZnVuY3Rpb24gZSgpe249bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LGRpc3Bvc2U6ZX19ZnVuY3Rpb24gX0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3IFQsY29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsZGlyZWN0aW9uOm5ldyBULGNvbG9yOm5ldyBmdCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsY29sb3I6bmV3IGZ0LGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgVCxza3lDb2xvcjpuZXcgZnQsZ3JvdW5kQ29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBmdCxwb3NpdGlvbjpuZXcgVCxoYWxmV2lkdGg6bmV3IFQsaGFsZkhlaWdodDpuZXcgVH07YnJlYWt9cmV0dXJuIG5bdC5pZF09ZSxlfX19ZnVuY3Rpb24gd0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBLLHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gblt0LmlkXT1lLGV9fX12YXIgTUU9MDtmdW5jdGlvbiBiRShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gU0Uobix0KXtsZXQgZT1uZXcgX0UsaT13RSgpLHI9e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB1PTA7dTw5O3UrKylyLnByb2JlLnB1c2gobmV3IFQpO2xldCBzPW5ldyBULG89bmV3IHd0LGE9bmV3IHd0O2Z1bmN0aW9uIGwodSxoKXtsZXQgZj0wLGQ9MCxnPTA7Zm9yKGxldCB0dD0wO3R0PDk7dHQrKylyLnByb2JlW3R0XS5zZXQoMCwwLDApO2xldCB4PTAsdj0wLG09MCxwPTAsYj0wLF89MCxTPTAsTD0wO3Uuc29ydChiRSk7bGV0IEE9aCE9PSEwP01hdGguUEk6MTtmb3IobGV0IHR0PTAsWD11Lmxlbmd0aDt0dDxYO3R0Kyspe2xldCB5PXVbdHRdLFI9eS5jb2xvcixEPXkuaW50ZW5zaXR5LEY9eS5kaXN0YW5jZSx6PXkuc2hhZG93JiZ5LnNoYWRvdy5tYXA/eS5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZih5LmlzQW1iaWVudExpZ2h0KWYrPVIucipEKkEsZCs9Ui5nKkQqQSxnKz1SLmIqRCpBO2Vsc2UgaWYoeS5pc0xpZ2h0UHJvYmUpZm9yKGxldCBOPTA7Tjw5O04rKylyLnByb2JlW05dLmFkZFNjYWxlZFZlY3Rvcih5LnNoLmNvZWZmaWNpZW50c1tOXSxEKTtlbHNlIGlmKHkuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLmNvbG9yLmNvcHkoeS5jb2xvcikubXVsdGlwbHlTY2FsYXIoeS5pbnRlbnNpdHkqQSkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLHIuZGlyZWN0aW9uYWxTaGFkb3dbeF09USxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW3hdPXosci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeFt4XT15LnNoYWRvdy5tYXRyaXgsXysrfXIuZGlyZWN0aW9uYWxbeF09Tix4Kyt9ZWxzZSBpZih5LmlzU3BvdExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbih5Lm1hdHJpeFdvcmxkKSxOLmNvbG9yLmNvcHkoUikubXVsdGlwbHlTY2FsYXIoRCpBKSxOLmRpc3RhbmNlPUYsTi5jb25lQ29zPU1hdGguY29zKHkuYW5nbGUpLE4ucGVudW1icmFDb3M9TWF0aC5jb3MoeS5hbmdsZSooMS15LnBlbnVtYnJhKSksTi5kZWNheT15LmRlY2F5LHkuY2FzdFNoYWRvdyl7bGV0IFY9eS5zaGFkb3csUT1pLmdldCh5KTtRLnNoYWRvd0JpYXM9Vi5iaWFzLFEuc2hhZG93Tm9ybWFsQmlhcz1WLm5vcm1hbEJpYXMsUS5zaGFkb3dSYWRpdXM9Vi5yYWRpdXMsUS5zaGFkb3dNYXBTaXplPVYubWFwU2l6ZSxyLnNwb3RTaGFkb3dbbV09USxyLnNwb3RTaGFkb3dNYXBbbV09eixyLnNwb3RTaGFkb3dNYXRyaXhbbV09eS5zaGFkb3cubWF0cml4LEwrK31yLnNwb3RbbV09TixtKyt9ZWxzZSBpZih5LmlzUmVjdEFyZWFMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5jb2xvci5jb3B5KFIpLm11bHRpcGx5U2NhbGFyKEQpLE4uaGFsZldpZHRoLnNldCh5LndpZHRoKi41LDAsMCksTi5oYWxmSGVpZ2h0LnNldCgwLHkuaGVpZ2h0Ki41LDApLHIucmVjdEFyZWFbcF09TixwKyt9ZWxzZSBpZih5LmlzUG9pbnRMaWdodCl7bGV0IE49ZS5nZXQoeSk7aWYoTi5jb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKHkuaW50ZW5zaXR5KkEpLE4uZGlzdGFuY2U9eS5kaXN0YW5jZSxOLmRlY2F5PXkuZGVjYXkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLFEuc2hhZG93Q2FtZXJhTmVhcj1WLmNhbWVyYS5uZWFyLFEuc2hhZG93Q2FtZXJhRmFyPVYuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W3ZdPVEsci5wb2ludFNoYWRvd01hcFt2XT16LHIucG9pbnRTaGFkb3dNYXRyaXhbdl09eS5zaGFkb3cubWF0cml4LFMrK31yLnBvaW50W3ZdPU4sdisrfWVsc2UgaWYoeS5pc0hlbWlzcGhlcmVMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5za3lDb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksTi5ncm91bmRDb2xvci5jb3B5KHkuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksci5oZW1pW2JdPU4sYisrfX1wPjAmJih0LmlzV2ViR0wyfHxuLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMD8oci5yZWN0QXJlYUxUQzE9b3QuTFRDX0ZMT0FUXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0ZMT0FUXzIpOm4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITA/KHIucmVjdEFyZWFMVEMxPW90LkxUQ19IQUxGXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLHIuYW1iaWVudFswXT1mLHIuYW1iaWVudFsxXT1kLHIuYW1iaWVudFsyXT1nO2xldCBIPXIuaGFzaDsoSC5kaXJlY3Rpb25hbExlbmd0aCE9PXh8fEgucG9pbnRMZW5ndGghPT12fHxILnNwb3RMZW5ndGghPT1tfHxILnJlY3RBcmVhTGVuZ3RoIT09cHx8SC5oZW1pTGVuZ3RoIT09Ynx8SC5udW1EaXJlY3Rpb25hbFNoYWRvd3MhPT1ffHxILm51bVBvaW50U2hhZG93cyE9PVN8fEgubnVtU3BvdFNoYWRvd3MhPT1MKSYmKHIuZGlyZWN0aW9uYWwubGVuZ3RoPXgsci5zcG90Lmxlbmd0aD1tLHIucmVjdEFyZWEubGVuZ3RoPXAsci5wb2ludC5sZW5ndGg9dixyLmhlbWkubGVuZ3RoPWIsci5kaXJlY3Rpb25hbFNoYWRvdy5sZW5ndGg9XyxyLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aD1fLHIucG9pbnRTaGFkb3cubGVuZ3RoPVMsci5wb2ludFNoYWRvd01hcC5sZW5ndGg9UyxyLnNwb3RTaGFkb3cubGVuZ3RoPUwsci5zcG90U2hhZG93TWFwLmxlbmd0aD1MLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPV8sci5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9UyxyLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPUwsSC5kaXJlY3Rpb25hbExlbmd0aD14LEgucG9pbnRMZW5ndGg9dixILnNwb3RMZW5ndGg9bSxILnJlY3RBcmVhTGVuZ3RoPXAsSC5oZW1pTGVuZ3RoPWIsSC5udW1EaXJlY3Rpb25hbFNoYWRvd3M9XyxILm51bVBvaW50U2hhZG93cz1TLEgubnVtU3BvdFNoYWRvd3M9TCxyLnZlcnNpb249TUUrKyl9ZnVuY3Rpb24gYyh1LGgpe2xldCBmPTAsZD0wLGc9MCx4PTAsdj0wLG09aC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCBwPTAsYj11Lmxlbmd0aDtwPGI7cCsrKXtsZXQgXz11W3BdO2lmKF8uaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgUz1yLmRpcmVjdGlvbmFsW2ZdO1MuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxzLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLnRhcmdldC5tYXRyaXhXb3JsZCksUy5kaXJlY3Rpb24uc3ViKHMpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxmKyt9ZWxzZSBpZihfLmlzU3BvdExpZ2h0KXtsZXQgUz1yLnNwb3RbZ107Uy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCksUy5wb3NpdGlvbi5hcHBseU1hdHJpeDQobSksUy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8udGFyZ2V0Lm1hdHJpeFdvcmxkKSxTLmRpcmVjdGlvbi5zdWIocyksUy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKG0pLGcrK31lbHNlIGlmKF8uaXNSZWN0QXJlYUxpZ2h0KXtsZXQgUz1yLnJlY3RBcmVhW3hdO1MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMucG9zaXRpb24uYXBwbHlNYXRyaXg0KG0pLGEuaWRlbnRpdHkoKSxvLmNvcHkoXy5tYXRyaXhXb3JsZCksby5wcmVtdWx0aXBseShtKSxhLmV4dHJhY3RSb3RhdGlvbihvKSxTLmhhbGZXaWR0aC5zZXQoXy53aWR0aCouNSwwLDApLFMuaGFsZkhlaWdodC5zZXQoMCxfLmhlaWdodCouNSwwKSxTLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoYSksUy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChhKSx4Kyt9ZWxzZSBpZihfLmlzUG9pbnRMaWdodCl7bGV0IFM9ci5wb2ludFtkXTtTLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxTLnBvc2l0aW9uLmFwcGx5TWF0cml4NChtKSxkKyt9ZWxzZSBpZihfLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgUz1yLmhlbWlbdl07Uy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxTLmRpcmVjdGlvbi5ub3JtYWxpemUoKSx2Kyt9fX1yZXR1cm57c2V0dXA6bCxzZXR1cFZpZXc6YyxzdGF0ZTpyfX1mdW5jdGlvbiB6ZyhuLHQpe2xldCBlPW5ldyBTRShuLHQpLGk9W10scj1bXTtmdW5jdGlvbiBzKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfWZ1bmN0aW9uIG8oaCl7aS5wdXNoKGgpfWZ1bmN0aW9uIGEoaCl7ci5wdXNoKGgpfWZ1bmN0aW9uIGwoaCl7ZS5zZXR1cChpLGgpfWZ1bmN0aW9uIGMoaCl7ZS5zZXR1cFZpZXcoaSxoKX1yZXR1cm57aW5pdDpzLHN0YXRlOntsaWdodHNBcnJheTppLHNoYWRvd3NBcnJheTpyLGxpZ2h0czplfSxzZXR1cExpZ2h0czpsLHNldHVwTGlnaHRzVmlldzpjLHB1c2hMaWdodDpvLHB1c2hTaGFkb3c6YX19ZnVuY3Rpb24gRUUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBpKHMsbz0wKXtsZXQgYTtyZXR1cm4gZS5oYXMocyk9PT0hMT8oYT1uZXcgemcobix0KSxlLnNldChzLFthXSkpOm8+PWUuZ2V0KHMpLmxlbmd0aD8oYT1uZXcgemcobix0KSxlLmdldChzKS5wdXNoKGEpKTphPWUuZ2V0KHMpW29dLGF9ZnVuY3Rpb24gcigpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDppLGRpc3Bvc2U6cn19dmFyIGNsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIix0aGlzLmRlcHRoUGFja2luZz1Ldyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtjbC5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgdWw9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IFQsdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTt1bC5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgVEU9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxBRT1gdW5pZm9ybSBzYW1wbGVyMkQgc2hhZG93X3Bhc3M7CnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKI2luY2x1ZGUgPHBhY2tpbmc+CnZvaWQgbWFpbigpIHsKCWNvbnN0IGZsb2F0IHNhbXBsZXMgPSBmbG9hdCggVlNNX1NBTVBMRVMgKTsKCWZsb2F0IG1lYW4gPSAwLjA7CglmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7CglmbG9hdCB1dlN0cmlkZSA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogMi4wIC8gKCBzYW1wbGVzIC0gMS4wICk7CglmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDsKCWZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkgewoJCWZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTsKCQkjaWZkZWYgSE9SSVpPTlRBTF9QQVNTCgkJCXZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkaXN0cmlidXRpb24ueDsKCQkJc3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54OwoJCSNlbHNlCgkJCWZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkZXB0aDsKCQkJc3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7CgkJI2VuZGlmCgl9CgltZWFuID0gbWVhbiAvIHNhbXBsZXM7CglzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzOwoJZmxvYXQgc3RkX2RldiA9IHNxcnQoIHNxdWFyZWRfbWVhbiAtIG1lYW4gKiBtZWFuICk7CglnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApOwp9YDtmdW5jdGlvbiBUMChuLHQsZSl7bGV0IGk9bmV3IHFyLHI9bmV3IEsscz1uZXcgSyxvPW5ldyBXdCxhPW5ldyBjbCh7ZGVwdGhQYWNraW5nOlF3fSksbD1uZXcgdWwsYz17fSx1PWUubWF4VGV4dHVyZVNpemUsaD17MDpoZSwxOmVvLDI6SHJ9LGY9bmV3IEZuKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBLfSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6VEUsZnJhZ21lbnRTaGFkZXI6QUV9KSxkPWYuY2xvbmUoKTtkLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGc9bmV3IEh0O2cuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgeD1uZXcgb2UoZyxmKSx2PXRoaXM7dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT1sMCx0aGlzLnJlbmRlcj1mdW5jdGlvbihfLFMsTCl7aWYodi5lbmFibGVkPT09ITF8fHYuYXV0b1VwZGF0ZT09PSExJiZ2Lm5lZWRzVXBkYXRlPT09ITF8fF8ubGVuZ3RoPT09MClyZXR1cm47bGV0IEE9bi5nZXRSZW5kZXJUYXJnZXQoKSxIPW4uZ2V0QWN0aXZlQ3ViZUZhY2UoKSx0dD1uLmdldEFjdGl2ZU1pcG1hcExldmVsKCksWD1uLnN0YXRlO1guc2V0QmxlbmRpbmcoam4pLFguYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxYLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksWC5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCB5PTAsUj1fLmxlbmd0aDt5PFI7eSsrKXtsZXQgRD1fW3ldLEY9RC5zaGFkb3c7aWYoRj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLEQsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoRi5hdXRvVXBkYXRlPT09ITEmJkYubmVlZHNVcGRhdGU9PT0hMSljb250aW51ZTtyLmNvcHkoRi5tYXBTaXplKTtsZXQgej1GLmdldEZyYW1lRXh0ZW50cygpO2lmKHIubXVsdGlwbHkoeikscy5jb3B5KEYubWFwU2l6ZSksKHIueD51fHxyLnk+dSkmJihyLng+dSYmKHMueD1NYXRoLmZsb29yKHUvei54KSxyLng9cy54KnoueCxGLm1hcFNpemUueD1zLngpLHIueT51JiYocy55PU1hdGguZmxvb3IodS96LnkpLHIueT1zLnkqei55LEYubWFwU2l6ZS55PXMueSkpLEYubWFwPT09bnVsbCYmIUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1Kcyl7bGV0IFY9e21pbkZpbHRlcjpiZSxtYWdGaWx0ZXI6YmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLm1hcFBhc3M9bmV3IE5lKHIueCxyLnksViksRi5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWlmKEYubWFwPT09bnVsbCl7bGV0IFY9e21pbkZpbHRlcjpmZSxtYWdGaWx0ZXI6ZmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9bi5zZXRSZW5kZXJUYXJnZXQoRi5tYXApLG4uY2xlYXIoKTtsZXQgTj1GLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IFY9MDtWPE47VisrKXtsZXQgUT1GLmdldFZpZXdwb3J0KFYpO28uc2V0KHMueCpRLngscy55KlEueSxzLngqUS56LHMueSpRLncpLFgudmlld3BvcnQobyksRi51cGRhdGVNYXRyaWNlcyhELFYpLGk9Ri5nZXRGcnVzdHVtKCksYihTLEwsRi5jYW1lcmEsRCx0aGlzLnR5cGUpfSFGLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09SnMmJm0oRixMKSxGLm5lZWRzVXBkYXRlPSExfXYubmVlZHNVcGRhdGU9ITEsbi5zZXRSZW5kZXJUYXJnZXQoQSxILHR0KX07ZnVuY3Rpb24gbShfLFMpe2xldCBMPXQudXBkYXRlKHgpO2YuZGVmaW5lcy5WU01fU0FNUExFUyE9PV8uYmx1clNhbXBsZXMmJihmLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxkLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxmLm5lZWRzVXBkYXRlPSEwLGQubmVlZHNVcGRhdGU9ITApLGYudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Xy5tYXAudGV4dHVyZSxmLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Xy5tYXBTaXplLGYudW5pZm9ybXMucmFkaXVzLnZhbHVlPV8ucmFkaXVzLG4uc2V0UmVuZGVyVGFyZ2V0KF8ubWFwUGFzcyksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KFMsbnVsbCxMLGYseCxudWxsKSxkLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPV8ubWFwUGFzcy50ZXh0dXJlLGQudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1fLm1hcFNpemUsZC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Xy5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoXy5tYXApLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChTLG51bGwsTCxkLHgsbnVsbCl9ZnVuY3Rpb24gcChfLFMsTCxBLEgsdHQsWCl7bGV0IHk9bnVsbCxSPUEuaXNQb2ludExpZ2h0PT09ITA/Xy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOl8uY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihSIT09dm9pZCAwP3k9Ujp5PUEuaXNQb2ludExpZ2h0PT09ITA/bDphLG4ubG9jYWxDbGlwcGluZ0VuYWJsZWQmJkwuY2xpcFNoYWRvd3M9PT0hMCYmTC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxMLmRpc3BsYWNlbWVudE1hcCYmTC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fEwuYWxwaGFNYXAmJkwuYWxwaGFUZXN0PjApe2xldCBEPXkudXVpZCxGPUwudXVpZCx6PWNbRF07ej09PXZvaWQgMCYmKHo9e30sY1tEXT16KTtsZXQgTj16W0ZdO049PT12b2lkIDAmJihOPXkuY2xvbmUoKSx6W0ZdPU4pLHk9Tn1yZXR1cm4geS52aXNpYmxlPUwudmlzaWJsZSx5LndpcmVmcmFtZT1MLndpcmVmcmFtZSxYPT09SnM/eS5zaWRlPUwuc2hhZG93U2lkZSE9PW51bGw/TC5zaGFkb3dTaWRlOkwuc2lkZTp5LnNpZGU9TC5zaGFkb3dTaWRlIT09bnVsbD9MLnNoYWRvd1NpZGU6aFtMLnNpZGVdLHkuYWxwaGFNYXA9TC5hbHBoYU1hcCx5LmFscGhhVGVzdD1MLmFscGhhVGVzdCx5LmNsaXBTaGFkb3dzPUwuY2xpcFNoYWRvd3MseS5jbGlwcGluZ1BsYW5lcz1MLmNsaXBwaW5nUGxhbmVzLHkuY2xpcEludGVyc2VjdGlvbj1MLmNsaXBJbnRlcnNlY3Rpb24seS5kaXNwbGFjZW1lbnRNYXA9TC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZT1MLmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcz1MLmRpc3BsYWNlbWVudEJpYXMseS53aXJlZnJhbWVMaW5ld2lkdGg9TC53aXJlZnJhbWVMaW5ld2lkdGgseS5saW5ld2lkdGg9TC5saW5ld2lkdGgsQS5pc1BvaW50TGlnaHQ9PT0hMCYmeS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJih5LnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSx5Lm5lYXJEaXN0YW5jZT1ILHkuZmFyRGlzdGFuY2U9dHQpLHl9ZnVuY3Rpb24gYihfLFMsTCxBLEgpe2lmKF8udmlzaWJsZT09PSExKXJldHVybjtpZihfLmxheWVycy50ZXN0KFMubGF5ZXJzKSYmKF8uaXNNZXNofHxfLmlzTGluZXx8Xy5pc1BvaW50cykmJihfLmNhc3RTaGFkb3d8fF8ucmVjZWl2ZVNoYWRvdyYmSD09PUpzKSYmKCFfLmZydXN0dW1DdWxsZWR8fGkuaW50ZXJzZWN0c09iamVjdChfKSkpe18ubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoTC5tYXRyaXhXb3JsZEludmVyc2UsXy5tYXRyaXhXb3JsZCk7bGV0IHk9dC51cGRhdGUoXyksUj1fLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoUikpe2xldCBEPXkuZ3JvdXBzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKyl7bGV0IE49RFtGXSxWPVJbTi5tYXRlcmlhbEluZGV4XTtpZihWJiZWLnZpc2libGUpe2xldCBRPXAoXyx5LFYsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksUSxfLE4pfX19ZWxzZSBpZihSLnZpc2libGUpe2xldCBEPXAoXyx5LFIsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksRCxfLG51bGwpfX1sZXQgWD1fLmNoaWxkcmVuO2ZvcihsZXQgeT0wLFI9WC5sZW5ndGg7eTxSO3krKyliKFhbeV0sUyxMLEEsSCl9fWZ1bmN0aW9uIENFKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyO2Z1bmN0aW9uIHIoKXtsZXQgUD0hMSxwdD1uZXcgV3QsaHQ9bnVsbCxFdD1uZXcgV3QoMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24oWSl7aHQhPT1ZJiYhUCYmKG4uY29sb3JNYXNrKFksWSxZLFkpLGh0PVkpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWSl7UD1ZfSxzZXRDbGVhcjpmdW5jdGlvbihZLE10LER0LGp0LHplKXt6ZT09PSEwJiYoWSo9anQsTXQqPWp0LER0Kj1qdCkscHQuc2V0KFksTXQsRHQsanQpLEV0LmVxdWFscyhwdCk9PT0hMSYmKG4uY2xlYXJDb2xvcihZLE10LER0LGp0KSxFdC5jb3B5KHB0KSl9LHJlc2V0OmZ1bmN0aW9uKCl7UD0hMSxodD1udWxsLEV0LnNldCgtMSwwLDAsMCl9fX1mdW5jdGlvbiBzKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oWSl7WT9rKDI5MjkpOkZ0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFkpe3B0IT09WSYmIVAmJihuLmRlcHRoTWFzayhZKSxwdD1ZKX0sc2V0RnVuYzpmdW5jdGlvbihZKXtpZihodCE9PVkpe2lmKFkpc3dpdGNoKFkpe2Nhc2UgeXc6bi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIHZ3Om4uZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSBfdzpuLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgenU6bi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIHd3Om4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSBNdzpuLmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgYnc6bi5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIFN3Om4uZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpuLmRlcHRoRnVuYyg1MTUpfWVsc2Ugbi5kZXB0aEZ1bmMoNTE1KTtodD1ZfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFkpe1A9WX0sc2V0Q2xlYXI6ZnVuY3Rpb24oWSl7RXQhPT1ZJiYobi5jbGVhckRlcHRoKFkpLEV0PVkpfSxyZXNldDpmdW5jdGlvbigpe1A9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGx9fX1mdW5jdGlvbiBvKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGwsWT1udWxsLE10PW51bGwsRHQ9bnVsbCxqdD1udWxsLHplPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24obmUpe1B8fChuZT9rKDI5NjApOkZ0KDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihuZSl7cHQhPT1uZSYmIVAmJihuLnN0ZW5jaWxNYXNrKG5lKSxwdD1uZSl9LHNldEZ1bmM6ZnVuY3Rpb24obmUsZW4seW4peyhodCE9PW5lfHxFdCE9PWVufHxZIT09eW4pJiYobi5zdGVuY2lsRnVuYyhuZSxlbix5biksaHQ9bmUsRXQ9ZW4sWT15bil9LHNldE9wOmZ1bmN0aW9uKG5lLGVuLHluKXsoTXQhPT1uZXx8RHQhPT1lbnx8anQhPT15bikmJihuLnN0ZW5jaWxPcChuZSxlbix5biksTXQ9bmUsRHQ9ZW4sanQ9eW4pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24obmUpe1A9bmV9LHNldENsZWFyOmZ1bmN0aW9uKG5lKXt6ZSE9PW5lJiYobi5jbGVhclN0ZW5jaWwobmUpLHplPW5lKX0scmVzZXQ6ZnVuY3Rpb24oKXtQPSExLHB0PW51bGwsaHQ9bnVsbCxFdD1udWxsLFk9bnVsbCxNdD1udWxsLER0PW51bGwsanQ9bnVsbCx6ZT1udWxsfX19bGV0IGE9bmV3IHIsbD1uZXcgcyxjPW5ldyBvLHU9e30saD17fSxmPW5ldyBXZWFrTWFwLGQ9W10sZz1udWxsLHg9ITEsdj1udWxsLG09bnVsbCxwPW51bGwsYj1udWxsLF89bnVsbCxTPW51bGwsTD1udWxsLEE9ITEsSD1udWxsLHR0PW51bGwsWD1udWxsLHk9bnVsbCxSPW51bGwsRD1uLmdldFBhcmFtZXRlcigzNTY2MSksRj0hMSx6PTAsTj1uLmdldFBhcmFtZXRlcig3OTM4KTtOLmluZGV4T2YoIldlYkdMIikhPT0tMT8oej1wYXJzZUZsb2F0KC9eV2ViR0wgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0xKTpOLmluZGV4T2YoIk9wZW5HTCBFUyIpIT09LTEmJih6PXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0yKTtsZXQgVj1udWxsLFE9e30sYXQ9bi5nZXRQYXJhbWV0ZXIoMzA4OCksRz1uLmdldFBhcmFtZXRlcigyOTc4KSwkPW5ldyBXdCgpLmZyb21BcnJheShhdCksbHQ9bmV3IFd0KCkuZnJvbUFycmF5KEcpO2Z1bmN0aW9uIGR0KFAscHQsaHQpe2xldCBFdD1uZXcgVWludDhBcnJheSg0KSxZPW4uY3JlYXRlVGV4dHVyZSgpO24uYmluZFRleHR1cmUoUCxZKSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MSw5NzI4KSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MCw5NzI4KTtmb3IobGV0IE10PTA7TXQ8aHQ7TXQrKyluLnRleEltYWdlMkQocHQrTXQsMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxFdCk7cmV0dXJuIFl9bGV0IHh0PXt9O3h0WzM1NTNdPWR0KDM1NTMsMzU1MywxKSx4dFszNDA2N109ZHQoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksaygyOTI5KSxsLnNldEZ1bmMoenUpLEooITEpLGl0KEFtKSxrKDI4ODQpLEMoam4pO2Z1bmN0aW9uIGsoUCl7dVtQXSE9PSEwJiYobi5lbmFibGUoUCksdVtQXT0hMCl9ZnVuY3Rpb24gRnQoUCl7dVtQXSE9PSExJiYobi5kaXNhYmxlKFApLHVbUF09ITEpfWZ1bmN0aW9uIG10KFAscHQpe3JldHVybiBoW1BdIT09cHQ/KG4uYmluZEZyYW1lYnVmZmVyKFAscHQpLGhbUF09cHQsaSYmKFA9PT0zNjAwOSYmKGhbMzYxNjBdPXB0KSxQPT09MzYxNjAmJihoWzM2MDA5XT1wdCkpLCEwKTohMX1mdW5jdGlvbiBTdChQLHB0KXtsZXQgaHQ9ZCxFdD0hMTtpZihQKWlmKGh0PWYuZ2V0KHB0KSxodD09PXZvaWQgMCYmKGh0PVtdLGYuc2V0KHB0LGh0KSksUC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgWT1QLnRleHR1cmU7aWYoaHQubGVuZ3RoIT09WS5sZW5ndGh8fGh0WzBdIT09MzYwNjQpe2ZvcihsZXQgTXQ9MCxEdD1ZLmxlbmd0aDtNdDxEdDtNdCsrKWh0W010XT0zNjA2NCtNdDtodC5sZW5ndGg9WS5sZW5ndGgsRXQ9ITB9fWVsc2UgaHRbMF0hPT0zNjA2NCYmKGh0WzBdPTM2MDY0LEV0PSEwKTtlbHNlIGh0WzBdIT09MTAyOSYmKGh0WzBdPTEwMjksRXQ9ITApO0V0JiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKGh0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChodCkpfWZ1bmN0aW9uIEIoUCl7cmV0dXJuIGchPT1QPyhuLnVzZVByb2dyYW0oUCksZz1QLCEwKTohMX1sZXQgc3Q9e1tJcl06MzI3NzQsW2F3XTozMjc3OCxbbHddOjMyNzc5fTtpZihpKXN0W1BtXT0zMjc3NSxzdFtEbV09MzI3NzY7ZWxzZXtsZXQgUD10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO1AhPT1udWxsJiYoc3RbUG1dPVAuTUlOX0VYVCxzdFtEbV09UC5NQVhfRVhUKX1sZXQgbnQ9e1tjd106MCxbdXddOjEsW2h3XTo3NjgsW3UwXTo3NzAsW3h3XTo3NzYsW213XTo3NzQsW2R3XTo3NzIsW2Z3XTo3NjksW2gwXTo3NzEsW2d3XTo3NzUsW3B3XTo3NzN9O2Z1bmN0aW9uIEMoUCxwdCxodCxFdCxZLE10LER0LGp0KXtpZihQPT09am4pe3g9PT0hMCYmKEZ0KDMwNDIpLHg9ITEpO3JldHVybn1pZih4PT09ITEmJihrKDMwNDIpLHg9ITApLFAhPT1vdyl7aWYoUCE9PXZ8fGp0IT09QSl7aWYoKG0hPT1Jcnx8XyE9PUlyKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksbT1JcixfPUlyKSxqdClzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIENtOm4uYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBSbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSBMbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsUCk7YnJlYWt9ZWxzZSBzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgQ206bi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgUm06bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgTG06bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixQKTticmVha31wPW51bGwsYj1udWxsLFM9bnVsbCxMPW51bGwsdj1QLEE9anR9cmV0dXJufVk9WXx8cHQsTXQ9TXR8fGh0LER0PUR0fHxFdCwocHQhPT1tfHxZIT09XykmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShzdFtwdF0sc3RbWV0pLG09cHQsXz1ZKSwoaHQhPT1wfHxFdCE9PWJ8fE10IT09U3x8RHQhPT1MKSYmKG4uYmxlbmRGdW5jU2VwYXJhdGUobnRbaHRdLG50W0V0XSxudFtNdF0sbnRbRHRdKSxwPWh0LGI9RXQsUz1NdCxMPUR0KSx2PVAsQT1udWxsfWZ1bmN0aW9uIGooUCxwdCl7UC5zaWRlPT09SHI/RnQoMjg4NCk6aygyODg0KTtsZXQgaHQ9UC5zaWRlPT09aGU7cHQmJihodD0haHQpLEooaHQpLFAuYmxlbmRpbmc9PT1LcyYmUC50cmFuc3BhcmVudD09PSExP0Moam4pOkMoUC5ibGVuZGluZyxQLmJsZW5kRXF1YXRpb24sUC5ibGVuZFNyYyxQLmJsZW5kRHN0LFAuYmxlbmRFcXVhdGlvbkFscGhhLFAuYmxlbmRTcmNBbHBoYSxQLmJsZW5kRHN0QWxwaGEsUC5wcmVtdWx0aXBsaWVkQWxwaGEpLGwuc2V0RnVuYyhQLmRlcHRoRnVuYyksbC5zZXRUZXN0KFAuZGVwdGhUZXN0KSxsLnNldE1hc2soUC5kZXB0aFdyaXRlKSxhLnNldE1hc2soUC5jb2xvcldyaXRlKTtsZXQgRXQ9UC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KEV0KSxFdCYmKGMuc2V0TWFzayhQLnN0ZW5jaWxXcml0ZU1hc2spLGMuc2V0RnVuYyhQLnN0ZW5jaWxGdW5jLFAuc3RlbmNpbFJlZixQLnN0ZW5jaWxGdW5jTWFzayksYy5zZXRPcChQLnN0ZW5jaWxGYWlsLFAuc3RlbmNpbFpGYWlsLFAuc3RlbmNpbFpQYXNzKSksdnQoUC5wb2x5Z29uT2Zmc2V0LFAucG9seWdvbk9mZnNldEZhY3RvcixQLnBvbHlnb25PZmZzZXRVbml0cyksUC5hbHBoYVRvQ292ZXJhZ2U9PT0hMD9rKDMyOTI2KTpGdCgzMjkyNil9ZnVuY3Rpb24gSihQKXtIIT09UCYmKFA/bi5mcm9udEZhY2UoMjMwNCk6bi5mcm9udEZhY2UoMjMwNSksSD1QKX1mdW5jdGlvbiBpdChQKXtQIT09aXc/KGsoMjg4NCksUCE9PXR0JiYoUD09PUFtP24uY3VsbEZhY2UoMTAyOSk6UD09PXJ3P24uY3VsbEZhY2UoMTAyOCk6bi5jdWxsRmFjZSgxMDMyKSkpOkZ0KDI4ODQpLHR0PVB9ZnVuY3Rpb24gZXQoUCl7UCE9PVgmJihGJiZuLmxpbmVXaWR0aChQKSxYPVApfWZ1bmN0aW9uIHZ0KFAscHQsaHQpe1A/KGsoMzI4MjMpLCh5IT09cHR8fFIhPT1odCkmJihuLnBvbHlnb25PZmZzZXQocHQsaHQpLHk9cHQsUj1odCkpOkZ0KDMyODIzKX1mdW5jdGlvbiBidChQKXtQP2soMzA4OSk6RnQoMzA4OSl9ZnVuY3Rpb24gSXQoUCl7UD09PXZvaWQgMCYmKFA9MzM5ODQrRC0xKSxWIT09UCYmKG4uYWN0aXZlVGV4dHVyZShQKSxWPVApfWZ1bmN0aW9uIFp0KFAscHQpe1Y9PT1udWxsJiZJdCgpO2xldCBodD1RW1ZdO2h0PT09dm9pZCAwJiYoaHQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxRW1ZdPWh0KSwoaHQudHlwZSE9PVB8fGh0LnRleHR1cmUhPT1wdCkmJihuLmJpbmRUZXh0dXJlKFAscHR8fHh0W1BdKSxodC50eXBlPVAsaHQudGV4dHVyZT1wdCl9ZnVuY3Rpb24gcXQoKXtsZXQgUD1RW1ZdO1AhPT12b2lkIDAmJlAudHlwZSE9PXZvaWQgMCYmKG4uYmluZFRleHR1cmUoUC50eXBlLG51bGwpLFAudHlwZT12b2lkIDAsUC50ZXh0dXJlPXZvaWQgMCl9ZnVuY3Rpb24gRSgpe3RyeXtuLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHcoKXt0cnl7bi50ZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHEoKXt0cnl7bi50ZXhTdWJJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHJ0KCl7dHJ5e24uY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gZ3QoKXt0cnl7bi50ZXhTdG9yYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gVygpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiBfdCgpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24geXQoKXt0cnl7bi50ZXhJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHV0KFApeyQuZXF1YWxzKFApPT09ITEmJihuLnNjaXNzb3IoUC54LFAueSxQLnosUC53KSwkLmNvcHkoUCkpfWZ1bmN0aW9uIGN0KFApe2x0LmVxdWFscyhQKT09PSExJiYobi52aWV3cG9ydChQLngsUC55LFAueixQLncpLGx0LmNvcHkoUCkpfWZ1bmN0aW9uIEF0KCl7bi5kaXNhYmxlKDMwNDIpLG4uZGlzYWJsZSgyODg0KSxuLmRpc2FibGUoMjkyOSksbi5kaXNhYmxlKDMyODIzKSxuLmRpc2FibGUoMzA4OSksbi5kaXNhYmxlKDI5NjApLG4uZGlzYWJsZSgzMjkyNiksbi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxuLmJsZW5kRnVuYygxLDApLG4uYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksbi5jb2xvck1hc2soITAsITAsITAsITApLG4uY2xlYXJDb2xvcigwLDAsMCwwKSxuLmRlcHRoTWFzayghMCksbi5kZXB0aEZ1bmMoNTEzKSxuLmNsZWFyRGVwdGgoMSksbi5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxuLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLG4uc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxuLmNsZWFyU3RlbmNpbCgwKSxuLmN1bGxGYWNlKDEwMjkpLG4uZnJvbnRGYWNlKDIzMDUpLG4ucG9seWdvbk9mZnNldCgwLDApLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCksbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksaT09PSEwJiYobi5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksbi5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLG4udXNlUHJvZ3JhbShudWxsKSxuLmxpbmVXaWR0aCgxKSxuLnNjaXNzb3IoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbi52aWV3cG9ydCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSx1PXt9LFY9bnVsbCxRPXt9LGg9e30sZj1uZXcgV2Vha01hcCxkPVtdLGc9bnVsbCx4PSExLHY9bnVsbCxtPW51bGwscD1udWxsLGI9bnVsbCxfPW51bGwsUz1udWxsLEw9bnVsbCxBPSExLEg9bnVsbCx0dD1udWxsLFg9bnVsbCx5PW51bGwsUj1udWxsLCQuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGx0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6YSxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmssZGlzYWJsZTpGdCxiaW5kRnJhbWVidWZmZXI6bXQsZHJhd0J1ZmZlcnM6U3QsdXNlUHJvZ3JhbTpCLHNldEJsZW5kaW5nOkMsc2V0TWF0ZXJpYWw6aixzZXRGbGlwU2lkZWQ6SixzZXRDdWxsRmFjZTppdCxzZXRMaW5lV2lkdGg6ZXQsc2V0UG9seWdvbk9mZnNldDp2dCxzZXRTY2lzc29yVGVzdDpidCxhY3RpdmVUZXh0dXJlOkl0LGJpbmRUZXh0dXJlOlp0LHVuYmluZFRleHR1cmU6cXQsY29tcHJlc3NlZFRleEltYWdlMkQ6RSx0ZXhJbWFnZTJEOl90LHRleEltYWdlM0Q6eXQsdGV4U3RvcmFnZTJEOmd0LHRleFN0b3JhZ2UzRDpXLHRleFN1YkltYWdlMkQ6dyx0ZXhTdWJJbWFnZTNEOnEsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6cnQsc2Npc3Nvcjp1dCx2aWV3cG9ydDpjdCxyZXNldDpBdH19ZnVuY3Rpb24gUkUobix0LGUsaSxyLHMsbyl7bGV0IGE9ci5pc1dlYkdMMixsPXIubWF4VGV4dHVyZXMsYz1yLm1heEN1YmVtYXBTaXplLHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXIubWF4U2FtcGxlcyxkPXQuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKT90LmdldCgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik6dm9pZCAwLGc9bmV3IFdlYWtNYXAseCx2PSExO3RyeXt2PXR5cGVvZiBPZmZzY3JlZW5DYW52YXMhPSJ1bmRlZmluZWQiJiZuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSE9PW51bGx9Y2F0Y2goRSl7fWZ1bmN0aW9uIG0oRSx3KXtyZXR1cm4gdj9uZXcgT2Zmc2NyZWVuQ2FudmFzKEUsdyk6cm8oImNhbnZhcyIpfWZ1bmN0aW9uIHAoRSx3LHEscnQpe2xldCBndD0xO2lmKChFLndpZHRoPnJ0fHxFLmhlaWdodD5ydCkmJihndD1ydC9NYXRoLm1heChFLndpZHRoLEUuaGVpZ2h0KSksZ3Q8MXx8dz09PSEwKWlmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJkUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgVz13P25NOk1hdGguZmxvb3IsX3Q9VyhndCpFLndpZHRoKSx5dD1XKGd0KkUuaGVpZ2h0KTt4PT09dm9pZCAwJiYoeD1tKF90LHl0KSk7bGV0IHV0PXE/bShfdCx5dCk6eDtyZXR1cm4gdXQud2lkdGg9X3QsdXQuaGVpZ2h0PXl0LHV0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKEUsMCwwLF90LHl0KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK0Uud2lkdGgrIngiK0UuaGVpZ2h0KyIpIHRvICgiK190KyJ4Iit5dCsiKS4iKSx1dH1lbHNlIHJldHVybiJkYXRhImluIEUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIitFLndpZHRoKyJ4IitFLmhlaWdodCsiKS4iKSxFO3JldHVybiBFfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIGlnKEUud2lkdGgpJiZpZyhFLmhlaWdodCl9ZnVuY3Rpb24gXyhFKXtyZXR1cm4gYT8hMTpFLndyYXBTIT09VmV8fEUud3JhcFQhPT1WZXx8RS5taW5GaWx0ZXIhPT1mZSYmRS5taW5GaWx0ZXIhPT1iZX1mdW5jdGlvbiBTKEUsdyl7cmV0dXJuIEUuZ2VuZXJhdGVNaXBtYXBzJiZ3JiZFLm1pbkZpbHRlciE9PWZlJiZFLm1pbkZpbHRlciE9PWJlfWZ1bmN0aW9uIEwoRSl7bi5nZW5lcmF0ZU1pcG1hcChFKX1mdW5jdGlvbiBBKEUsdyxxLHJ0LGd0PSExKXtpZihhPT09ITEpcmV0dXJuIHc7aWYoRSE9PW51bGwpe2lmKG5bRV0hPT12b2lkIDApcmV0dXJuIG5bRV07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK0UrIiciKX1sZXQgVz13O3JldHVybiB3PT09NjQwMyYmKHE9PT01MTI2JiYoVz0zMzMyNikscT09PTUxMzEmJihXPTMzMzI1KSxxPT09NTEyMSYmKFc9MzMzMjEpKSx3PT09MzMzMTkmJihxPT09NTEyNiYmKFc9MzMzMjgpLHE9PT01MTMxJiYoVz0zMzMyNykscT09PTUxMjEmJihXPTMzMzIzKSksdz09PTY0MDgmJihxPT09NTEyNiYmKFc9MzQ4MzYpLHE9PT01MTMxJiYoVz0zNDg0MikscT09PTUxMjEmJihXPXJ0PT09JHQmJmd0PT09ITE/MzU5MDc6MzI4NTYpLHE9PT0zMjgxOSYmKFc9MzI4NTQpLHE9PT0zMjgyMCYmKFc9MzI4NTUpKSwoVz09PTMzMzI1fHxXPT09MzMzMjZ8fFc9PT0zMzMyN3x8Vz09PTMzMzI4fHxXPT09MzQ4NDJ8fFc9PT0zNDgzNikmJnQuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiksV31mdW5jdGlvbiBIKEUsdyxxKXtyZXR1cm4gUyhFLHEpPT09ITB8fEUuaXNGcmFtZWJ1ZmZlclRleHR1cmUmJkUubWluRmlsdGVyIT09ZmUmJkUubWluRmlsdGVyIT09YmU/TWF0aC5sb2cyKE1hdGgubWF4KHcud2lkdGgsdy5oZWlnaHQpKSsxOkUubWlwbWFwcyE9PXZvaWQgMCYmRS5taXBtYXBzLmxlbmd0aD4wP0UubWlwbWFwcy5sZW5ndGg6RS5pc0NvbXByZXNzZWRUZXh0dXJlJiZBcnJheS5pc0FycmF5KEUuaW1hZ2UpP3cubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiB0dChFKXtyZXR1cm4gRT09PWZlfHxFPT09SW18fEU9PT1ObT85NzI4Ojk3Mjl9ZnVuY3Rpb24gWChFKXtsZXQgdz1FLnRhcmdldDt3LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFgpLFIodyksdy5pc1ZpZGVvVGV4dHVyZSYmZy5kZWxldGUodyksby5tZW1vcnkudGV4dHVyZXMtLX1mdW5jdGlvbiB5KEUpe2xldCB3PUUudGFyZ2V0O3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseSksRCh3KX1mdW5jdGlvbiBSKEUpe2xldCB3PWkuZ2V0KEUpO3cuX193ZWJnbEluaXQhPT12b2lkIDAmJihuLmRlbGV0ZVRleHR1cmUody5fX3dlYmdsVGV4dHVyZSksaS5yZW1vdmUoRSkpfWZ1bmN0aW9uIEQoRSl7bGV0IHc9RS50ZXh0dXJlLHE9aS5nZXQoRSkscnQ9aS5nZXQodyk7aWYoISFFKXtpZihydC5fX3dlYmdsVGV4dHVyZSE9PXZvaWQgMCYmKG4uZGVsZXRlVGV4dHVyZShydC5fX3dlYmdsVGV4dHVyZSksby5tZW1vcnkudGV4dHVyZXMtLSksRS5kZXB0aFRleHR1cmUmJkUuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZ3Q9MDtndDw2O2d0Kyspbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcltndF0pLHEuX193ZWJnbERlcHRoYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihxLl9fd2ViZ2xEZXB0aGJ1ZmZlcltndF0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcikscS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbERlcHRoYnVmZmVyKSxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcikscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIocS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGd0PTAsVz13Lmxlbmd0aDtndDxXO2d0Kyspe2xldCBfdD1pLmdldCh3W2d0XSk7X3QuX193ZWJnbFRleHR1cmUmJihuLmRlbGV0ZVRleHR1cmUoX3QuX193ZWJnbFRleHR1cmUpLG8ubWVtb3J5LnRleHR1cmVzLS0pLGkucmVtb3ZlKHdbZ3RdKX1pLnJlbW92ZSh3KSxpLnJlbW92ZShFKX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIE4oKXtsZXQgRT1GO3JldHVybiBFPj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIitFKyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSxFfWZ1bmN0aW9uIFYoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLmlzVmlkZW9UZXh0dXJlJiZldChFKSxFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2xldCBydD1FLmltYWdlO2lmKHJ0PT09dm9pZCAwKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkIik7ZWxzZSBpZihydC5jb21wbGV0ZT09PSExKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgaW5jb21wbGV0ZSIpO2Vsc2V7ayhxLEUsdyk7cmV0dXJufX1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTUzLHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIFEoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2socSxFLHcpO3JldHVybn1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTg2NixxLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBhdChFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7ayhxLEUsdyk7cmV0dXJufWUuYWN0aXZlVGV4dHVyZSgzMzk4NCt3KSxlLmJpbmRUZXh0dXJlKDMyODc5LHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIEcoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe0Z0KHEsRSx3KTtyZXR1cm59ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K3cpLGUuYmluZFRleHR1cmUoMzQwNjcscS5fX3dlYmdsVGV4dHVyZSl9bGV0ICQ9e1tPdV06MTA0OTcsW1ZlXTozMzA3MSxba3VdOjMzNjQ4fSxsdD17W2ZlXTo5NzI4LFtJbV06OTk4NCxbTm1dOjk5ODYsW2JlXTo5NzI5LFtEd106OTk4NSxbTGxdOjk5ODd9O2Z1bmN0aW9uIGR0KEUsdyxxKXtpZihxPyhuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwkW3cud3JhcFNdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MywkW3cud3JhcFRdKSwoRT09PTMyODc5fHxFPT09MzU4NjYpJiZuLnRleFBhcmFtZXRlcmkoRSwzMjg4MiwkW3cud3JhcFJdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MCxsdFt3Lm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShFLDEwMjQxLGx0W3cubWluRmlsdGVyXSkpOihuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwzMzA3MSksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDMsMzMwNzEpLChFPT09MzI4Nzl8fEU9PT0zNTg2NikmJm4udGV4UGFyYW1ldGVyaShFLDMyODgyLDMzMDcxKSwody53cmFwUyE9PVZlfHx3LndyYXBUIT09VmUpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDAsdHQody5tYWdGaWx0ZXIpKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MSx0dCh3Lm1pbkZpbHRlcikpLHcubWluRmlsdGVyIT09ZmUmJncubWluRmlsdGVyIT09YmUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKSx0LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik9PT0hMCl7bGV0IHJ0PXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZih3LnR5cGU9PT1VaSYmdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITF8fGE9PT0hMSYmdy50eXBlPT09VXImJnQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITEpcmV0dXJuOyh3LmFuaXNvdHJvcHk+MXx8aS5nZXQodykuX19jdXJyZW50QW5pc290cm9weSkmJihuLnRleFBhcmFtZXRlcmYoRSxydC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbih3LmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldCh3KS5fX2N1cnJlbnRBbmlzb3Ryb3B5PXcuYW5pc290cm9weSl9fWZ1bmN0aW9uIHh0KEUsdyl7RS5fX3dlYmdsSW5pdD09PXZvaWQgMCYmKEUuX193ZWJnbEluaXQ9ITAsdy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixYKSxFLl9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpLG8ubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGsoRSx3LHEpe2xldCBydD0zNTUzO3cuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJihydD0zNTg2Niksdy5pc0RhdGFUZXh0dXJlM0QmJihydD0zMjg3OSkseHQoRSx3KSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrcSksZS5iaW5kVGV4dHVyZShydCxFLl9fd2ViZ2xUZXh0dXJlKSxuLnBpeGVsU3RvcmVpKDM3NDQwLHcuZmxpcFkpLG4ucGl4ZWxTdG9yZWkoMzc0NDEsdy5wcmVtdWx0aXBseUFscGhhKSxuLnBpeGVsU3RvcmVpKDMzMTcsdy51bnBhY2tBbGlnbm1lbnQpLG4ucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGd0PV8odykmJmIody5pbWFnZSk9PT0hMSxXPXAody5pbWFnZSxndCwhMSx1KTtXPXZ0KHcsVyk7bGV0IF90PWIoVyl8fGEseXQ9cy5jb252ZXJ0KHcuZm9ybWF0LHcuZW5jb2RpbmcpLHV0PXMuY29udmVydCh3LnR5cGUpLGN0PUEody5pbnRlcm5hbEZvcm1hdCx5dCx1dCx3LmVuY29kaW5nLHcuaXNWaWRlb1RleHR1cmUpO2R0KHJ0LHcsX3QpO2xldCBBdCxQPXcubWlwbWFwcyxwdD1hJiZ3LmlzVmlkZW9UZXh0dXJlIT09ITAsaHQ9RS5fX3ZlcnNpb249PT12b2lkIDAsRXQ9SCh3LFcsX3QpO2lmKHcuaXNEZXB0aFRleHR1cmUpY3Q9NjQwMixhP3cudHlwZT09PVVpP2N0PTM2MDEyOncudHlwZT09PVFhP2N0PTMzMTkwOncudHlwZT09PUJyP2N0PTM1MDU2OmN0PTMzMTg5OncudHlwZT09PVVpJiZjb25zb2xlLmVycm9yKCJXZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCBkZXB0aCB0ZXh0dXJlIHJlcXVpcmVzIFdlYkdMMi4iKSx3LmZvcm1hdD09PU9pJiZjdD09PTY0MDImJncudHlwZSE9PW5vJiZ3LnR5cGUhPT1RYSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLHcudHlwZT1ubyx1dD1zLmNvbnZlcnQody50eXBlKSksdy5mb3JtYXQ9PT1WciYmY3Q9PT02NDAyJiYoY3Q9MzQwNDEsdy50eXBlIT09QnImJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksdy50eXBlPUJyLHV0PXMuY29udmVydCh3LnR5cGUpKSkscHQmJmh0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxjdCxXLndpZHRoLFcuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxudWxsKTtlbHNlIGlmKHcuaXNEYXRhVGV4dHVyZSlpZihQLmxlbmd0aD4wJiZfdCl7cHQmJmh0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFBbMF0ud2lkdGgsUFswXS5oZWlnaHQpO2ZvcihsZXQgWT0wLE10PVAubGVuZ3RoO1k8TXQ7WSsrKUF0PVBbWV0scHQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LHV0LEF0LmRhdGEpOmUudGV4SW1hZ2UyRCgzNTUzLFksY3QsQXQud2lkdGgsQXQuaGVpZ2h0LDAseXQsdXQsQXQuZGF0YSk7dy5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBwdD8oaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsVy53aWR0aCxXLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsVy53aWR0aCxXLmhlaWdodCx5dCx1dCxXLmRhdGEpKTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxXLmRhdGEpO2Vsc2UgaWYody5pc0NvbXByZXNzZWRUZXh0dXJlKXtwdCYmaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsUFswXS53aWR0aCxQWzBdLmhlaWdodCk7Zm9yKGxldCBZPTAsTXQ9UC5sZW5ndGg7WTxNdDtZKyspQXQ9UFtZXSx3LmZvcm1hdCE9PVJlP3l0IT09bnVsbD9wdD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsWSwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LEF0LmRhdGEpOmUuY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLEF0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLEF0LndpZHRoLEF0LmhlaWdodCx5dCx1dCxBdC5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLHl0LHV0LEF0LmRhdGEpfWVsc2UgaWYody5pc0RhdGFUZXh0dXJlMkRBcnJheSlwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDM1ODY2LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDM1ODY2LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzNTg2NiwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRGF0YVRleHR1cmUzRClwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDMyODc5LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzMjg3OSwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRnJhbWVidWZmZXJUZXh0dXJlKXB0JiZodD9lLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFcud2lkdGgsVy5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsY3QsVy53aWR0aCxXLmhlaWdodCwwLHl0LHV0LG51bGwpO2Vsc2UgaWYoUC5sZW5ndGg+MCYmX3Qpe3B0JiZodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxQWzBdLndpZHRoLFBbMF0uaGVpZ2h0KTtmb3IobGV0IFk9MCxNdD1QLmxlbmd0aDtZPE10O1krKylBdD1QW1ldLHB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLHl0LHV0LEF0KTplLnRleEltYWdlMkQoMzU1MyxZLGN0LHl0LHV0LEF0KTt3LmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHB0PyhodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxXLndpZHRoLFcuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCx5dCx1dCxXKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxjdCx5dCx1dCxXKTtTKHcsX3QpJiZMKHJ0KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBGdChFLHcscSl7aWYody5pbWFnZS5sZW5ndGghPT02KXJldHVybjt4dChFLHcpLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtxKSxlLmJpbmRUZXh0dXJlKDM0MDY3LEUuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsdy5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSx3LnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyx3LnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgcnQ9dyYmKHcuaXNDb21wcmVzc2VkVGV4dHVyZXx8dy5pbWFnZVswXS5pc0NvbXByZXNzZWRUZXh0dXJlKSxndD13LmltYWdlWzBdJiZ3LmltYWdlWzBdLmlzRGF0YVRleHR1cmUsVz1bXTtmb3IobGV0IFk9MDtZPDY7WSsrKSFydCYmIWd0P1dbWV09cCh3LmltYWdlW1ldLCExLCEwLGMpOldbWV09Z3Q/dy5pbWFnZVtZXS5pbWFnZTp3LmltYWdlW1ldLFdbWV09dnQodyxXW1ldKTtsZXQgX3Q9V1swXSx5dD1iKF90KXx8YSx1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9YSYmdy5pc1ZpZGVvVGV4dHVyZSE9PSEwLHB0PUUuX192ZXJzaW9uPT09dm9pZCAwLGh0PUgodyxfdCx5dCk7ZHQoMzQwNjcsdyx5dCk7bGV0IEV0O2lmKHJ0KXtQJiZwdCYmZS50ZXhTdG9yYWdlMkQoMzQwNjcsaHQsQXQsX3Qud2lkdGgsX3QuaGVpZ2h0KTtmb3IobGV0IFk9MDtZPDY7WSsrKXtFdD1XW1ldLm1pcG1hcHM7Zm9yKGxldCBNdD0wO010PEV0Lmxlbmd0aDtNdCsrKXtsZXQgRHQ9RXRbTXRdO3cuZm9ybWF0IT09UmU/dXQhPT1udWxsP1A/ZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsRHQuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStZLE10LEF0LER0LndpZHRoLER0LmhlaWdodCwwLER0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnNldFRleHR1cmVDdWJlKCkiKTpQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsY3QsRHQuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQsQXQsRHQud2lkdGgsRHQuaGVpZ2h0LDAsdXQsY3QsRHQuZGF0YSl9fX1lbHNle0V0PXcubWlwbWFwcyxQJiZwdCYmKEV0Lmxlbmd0aD4wJiZodCsrLGUudGV4U3RvcmFnZTJEKDM0MDY3LGh0LEF0LFdbMF0ud2lkdGgsV1swXS5oZWlnaHQpKTtmb3IobGV0IFk9MDtZPDY7WSsrKWlmKGd0KXtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLDAsMCwwLFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsdXQsY3QsV1tZXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSwwLEF0LFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsMCx1dCxjdCxXW1ldLmRhdGEpO2ZvcihsZXQgTXQ9MDtNdDxFdC5sZW5ndGg7TXQrKyl7bGV0IGp0PUV0W010XS5pbWFnZVtZXS5pbWFnZTtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10KzEsMCwwLGp0LndpZHRoLGp0LmhlaWdodCx1dCxjdCxqdC5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSxNdCsxLEF0LGp0LndpZHRoLGp0LmhlaWdodCwwLHV0LGN0LGp0LmRhdGEpfX1lbHNle1A/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksMCwwLDAsdXQsY3QsV1tZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksMCxBdCx1dCxjdCxXW1ldKTtmb3IobGV0IE10PTA7TXQ8RXQubGVuZ3RoO010Kyspe2xldCBEdD1FdFtNdF07UD9lLnRleFN1YkltYWdlMkQoMzQwNjkrWSxNdCsxLDAsMCx1dCxjdCxEdC5pbWFnZVtZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQrMSxBdCx1dCxjdCxEdC5pbWFnZVtZXSl9fX1TKHcseXQpJiZMKDM0MDY3KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBtdChFLHcscSxydCxndCl7bGV0IFc9cy5jb252ZXJ0KHEuZm9ybWF0LHEuZW5jb2RpbmcpLF90PXMuY29udmVydChxLnR5cGUpLHl0PUEocS5pbnRlcm5hbEZvcm1hdCxXLF90LHEuZW5jb2RpbmcpO2kuZ2V0KHcpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGd0PT09MzI4Nzl8fGd0PT09MzU4NjY/ZS50ZXhJbWFnZTNEKGd0LDAseXQsdy53aWR0aCx3LmhlaWdodCx3LmRlcHRoLDAsVyxfdCxudWxsKTplLnRleEltYWdlMkQoZ3QsMCx5dCx3LndpZHRoLHcuaGVpZ2h0LDAsVyxfdCxudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRSksdy51c2VSZW5kZXJUb1RleHR1cmU/ZC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLHJ0LGd0LGkuZ2V0KHEpLl9fd2ViZ2xUZXh0dXJlLDAsaXQodykpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAscnQsZ3QsaS5nZXQocSkuX193ZWJnbFRleHR1cmUsMCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gU3QoRSx3LHEpe2lmKG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxFKSx3LmRlcHRoQnVmZmVyJiYhdy5zdGVuY2lsQnVmZmVyKXtsZXQgcnQ9MzMxODk7aWYocXx8dy51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBndD13LmRlcHRoVGV4dHVyZTtndCYmZ3QuaXNEZXB0aFRleHR1cmUmJihndC50eXBlPT09VWk/cnQ9MzYwMTI6Z3QudHlwZT09PVFhJiYocnQ9MzMxOTApKTtsZXQgVz1pdCh3KTt3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxXLHJ0LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLFcscnQsdy53aWR0aCx3LmhlaWdodCl9ZWxzZSBuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEscnQsdy53aWR0aCx3LmhlaWdodCk7bi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxFKX1lbHNlIGlmKHcuZGVwdGhCdWZmZXImJncuc3RlbmNpbEJ1ZmZlcil7bGV0IHJ0PWl0KHcpO3EmJncudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOncudXNlUmVuZGVyVG9UZXh0dXJlP2QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSx3LndpZHRoLHcuaGVpZ2h0KSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLEUpfWVsc2V7bGV0IHJ0PXcuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwP3cudGV4dHVyZVswXTp3LnRleHR1cmUsZ3Q9cy5jb252ZXJ0KHJ0LmZvcm1hdCxydC5lbmNvZGluZyksVz1zLmNvbnZlcnQocnQudHlwZSksX3Q9QShydC5pbnRlcm5hbEZvcm1hdCxndCxXLHJ0LmVuY29kaW5nKSx5dD1pdCh3KTtxJiZ3LnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTp3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsX3Qsdy53aWR0aCx3LmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIEIoRSx3KXtpZih3JiZ3LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXRocm93IG5ldyBFcnJvcigiRGVwdGggVGV4dHVyZSB3aXRoIGN1YmUgcmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEUpLCEody5kZXB0aFRleHR1cmUmJncuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIWkuZ2V0KHcuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8dy5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT13LndpZHRofHx3LmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT13LmhlaWdodCkmJih3LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD13LndpZHRoLHcuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD13LmhlaWdodCx3LmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksVih3LmRlcHRoVGV4dHVyZSwwKTtsZXQgcnQ9aS5nZXQody5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGd0PWl0KHcpO2lmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PU9pKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzNjA5NiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MyxydCwwKTtlbHNlIGlmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PVZyKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MyxydCwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iil9ZnVuY3Rpb24gc3QoRSl7bGV0IHc9aS5nZXQoRSkscT1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYoRS5kZXB0aFRleHR1cmUmJiF3Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIpe2lmKHEpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpO0Iody5fX3dlYmdsRnJhbWVidWZmZXIsRSl9ZWxzZSBpZihxKXt3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IHJ0PTA7cnQ8NjtydCsrKWUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHcuX193ZWJnbEZyYW1lYnVmZmVyW3J0XSksdy5fX3dlYmdsRGVwdGhidWZmZXJbcnRdPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXJbcnRdLEUsITEpfWVsc2UgZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdy5fX3dlYmdsRnJhbWVidWZmZXIpLHcuX193ZWJnbERlcHRoYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXIsRSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gbnQoRSx3LHEpe2xldCBydD1pLmdldChFKTt3IT09dm9pZCAwJiZtdChydC5fX3dlYmdsRnJhbWVidWZmZXIsRSxFLnRleHR1cmUsMzYwNjQsMzU1MykscSE9PXZvaWQgMCYmc3QoRSl9ZnVuY3Rpb24gQyhFKXtsZXQgdz1FLnRleHR1cmUscT1pLmdldChFKSxydD1pLmdldCh3KTtFLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHkpLEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyE9PSEwJiYocnQuX193ZWJnbFRleHR1cmU9PT12b2lkIDAmJihydC5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSkscnQuX192ZXJzaW9uPXcudmVyc2lvbixvLm1lbW9yeS50ZXh0dXJlcysrKTtsZXQgZ3Q9RS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwLFc9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITAsX3Q9dy5pc0RhdGFUZXh0dXJlM0R8fHcuaXNEYXRhVGV4dHVyZTJEQXJyYXkseXQ9YihFKXx8YTtpZihndCl7cS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCB1dD0wO3V0PDY7dXQrKylxLl9fd2ViZ2xGcmFtZWJ1ZmZlclt1dF09bi5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYocS5fX3dlYmdsRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLFcpaWYoci5kcmF3QnVmZmVycyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPWkuZ2V0KHV0W2N0XSk7UC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKFAuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCksby5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihFLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCkscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCB1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9aXQoRSk7bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsUCxBdCxFLndpZHRoLEUuaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksbi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLEUuZGVwdGhCdWZmZXImJihxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLFN0KHEuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLEUsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKGd0KXtlLmJpbmRUZXh0dXJlKDM0MDY3LHJ0Ll9fd2ViZ2xUZXh0dXJlKSxkdCgzNDA2Nyx3LHl0KTtmb3IobGV0IHV0PTA7dXQ8Njt1dCsrKW10KHEuX193ZWJnbEZyYW1lYnVmZmVyW3V0XSxFLHcsMzYwNjQsMzQwNjkrdXQpO1Modyx5dCkmJkwoMzQwNjcpLGUudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPXV0W2N0XSxwdD1pLmdldChQKTtlLmJpbmRUZXh0dXJlKDM1NTMscHQuX193ZWJnbFRleHR1cmUpLGR0KDM1NTMsUCx5dCksbXQocS5fX3dlYmdsRnJhbWVidWZmZXIsRSxQLDM2MDY0K2N0LDM1NTMpLFMoUCx5dCkmJkwoMzU1Myl9ZS51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgdXQ9MzU1MztfdCYmKGE/dXQ9dy5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLGUuYmluZFRleHR1cmUodXQscnQuX193ZWJnbFRleHR1cmUpLGR0KHV0LHcseXQpLG10KHEuX193ZWJnbEZyYW1lYnVmZmVyLEUsdywzNjA2NCx1dCksUyh3LHl0KSYmTCh1dCksZS51bmJpbmRUZXh0dXJlKCl9RS5kZXB0aEJ1ZmZlciYmc3QoRSl9ZnVuY3Rpb24gaihFKXtsZXQgdz1iKEUpfHxhLHE9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/RS50ZXh0dXJlOltFLnRleHR1cmVdO2ZvcihsZXQgcnQ9MCxndD1xLmxlbmd0aDtydDxndDtydCsrKXtsZXQgVz1xW3J0XTtpZihTKFcsdykpe2xldCBfdD1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PzM0MDY3OjM1NTMseXQ9aS5nZXQoVykuX193ZWJnbFRleHR1cmU7ZS5iaW5kVGV4dHVyZShfdCx5dCksTChfdCksZS51bmJpbmRUZXh0dXJlKCl9fX1mdW5jdGlvbiBKKEUpe2lmKEUudXNlUmVuZGVyYnVmZmVyKWlmKGEpe2xldCB3PUUud2lkdGgscT1FLmhlaWdodCxydD0xNjM4NCxndD1bMzYwNjRdLFc9RS5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O0UuZGVwdGhCdWZmZXImJmd0LnB1c2goVyksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weXx8KEUuZGVwdGhCdWZmZXImJihydHw9MjU2KSxFLnN0ZW5jaWxCdWZmZXImJihydHw9MTAyNCkpO2xldCBfdD1pLmdldChFKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LF90Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSYmKG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LFtXXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1ddKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLHcscSwwLDAsdyxxLHJ0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGd0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gaXQoRSl7cmV0dXJuIGEmJihFLnVzZVJlbmRlcmJ1ZmZlcnx8RS51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsRS5zYW1wbGVzKTowfWZ1bmN0aW9uIGV0KEUpe2xldCB3PW8ucmVuZGVyLmZyYW1lO2cuZ2V0KEUpIT09dyYmKGcuc2V0KEUsdyksRS51cGRhdGUoKSl9ZnVuY3Rpb24gdnQoRSx3KXtsZXQgcT1FLmVuY29kaW5nLHJ0PUUuZm9ybWF0LGd0PUUudHlwZTtyZXR1cm4gRS5pc0NvbXByZXNzZWRUZXh0dXJlPT09ITB8fEUuaXNWaWRlb1RleHR1cmU9PT0hMHx8RS5mb3JtYXQ9PT1IdXx8cSE9PXJpJiYocT09PSR0P2E9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiZydD09PVJlPyhFLmZvcm1hdD1IdSxFLm1pbkZpbHRlcj1iZSxFLmdlbmVyYXRlTWlwbWFwcz0hMSk6dz1Obi5zUkdCVG9MaW5lYXIodyk6KHJ0IT09UmV8fGd0IT09ZWkpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixxKSksd31sZXQgYnQ9ITEsSXQ9ITE7ZnVuY3Rpb24gWnQoRSx3KXtFJiZFLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihidD09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQ6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksYnQ9ITApLEU9RS50ZXh0dXJlKSxWKEUsdyl9ZnVuY3Rpb24gcXQoRSx3KXtFJiZFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoSXQ9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxJdD0hMCksRT1FLnRleHR1cmUpLEcoRSx3KX10aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9Tix0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPXosdGhpcy5zZXRUZXh0dXJlMkQ9Vix0aGlzLnNldFRleHR1cmUyREFycmF5PVEsdGhpcy5zZXRUZXh0dXJlM0Q9YXQsdGhpcy5zZXRUZXh0dXJlQ3ViZT1HLHRoaXMucmViaW5kVGV4dHVyZXM9bnQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1DLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWosdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1KLHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1zdCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPW10LHRoaXMuc2FmZVNldFRleHR1cmUyRD1adCx0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1xdH1mdW5jdGlvbiBMRShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtmdW5jdGlvbiByKHMsbz1udWxsKXtsZXQgYTtpZihzPT09ZWkpcmV0dXJuIDUxMjE7aWYocz09PXp3KXJldHVybiAzMjgxOTtpZihzPT09VXcpcmV0dXJuIDMyODIwO2lmKHM9PT1JdylyZXR1cm4gNTEyMDtpZihzPT09TncpcmV0dXJuIDUxMjI7aWYocz09PW5vKXJldHVybiA1MTIzO2lmKHM9PT1GdylyZXR1cm4gNTEyNDtpZihzPT09UWEpcmV0dXJuIDUxMjU7aWYocz09PVVpKXJldHVybiA1MTI2O2lmKHM9PT1VcilyZXR1cm4gaT81MTMxOihhPXQuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksYSE9PW51bGw/YS5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZihzPT09QncpcmV0dXJuIDY0MDY7aWYocz09PVJlKXJldHVybiA2NDA4O2lmKHM9PT1PdylyZXR1cm4gNjQwOTtpZihzPT09a3cpcmV0dXJuIDY0MTA7aWYocz09PU9pKXJldHVybiA2NDAyO2lmKHM9PT1WcilyZXR1cm4gMzQwNDE7aWYocz09PUh3KXJldHVybiA2NDAzO2lmKHM9PT1IdSlyZXR1cm4gYT10LmdldCgiRVhUX3NSR0IiKSxhIT09bnVsbD9hLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYocz09PVZ3KXJldHVybiAzNjI0NDtpZihzPT09R3cpcmV0dXJuIDMzMzE5O2lmKHM9PT1XdylyZXR1cm4gMzMzMjA7aWYocz09PXF3KXJldHVybiAzNjI0OTtpZihzPT09S2N8fHM9PT1RY3x8cz09PWpjfHxzPT09dHUpaWYobz09PSR0KWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2IiKSxhIT09bnVsbCl7aWYocz09PUtjKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUO2lmKHM9PT1RYylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVDtpZihzPT09amMpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ7aWYocz09PXR1KXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7ZWxzZSBpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLGEhPT1udWxsKXtpZihzPT09S2MpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZihzPT09UWMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYocz09PWpjKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKHM9PT10dSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2lmKHM9PT1GbXx8cz09PXptfHxzPT09VW18fHM9PT1CbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxhIT09bnVsbCl7aWYocz09PUZtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYocz09PXptKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYocz09PVVtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKHM9PT1CbSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKHM9PT1YdylyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxhIT09bnVsbD9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZihzPT09T218fHM9PT1rbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksYSE9PW51bGwpe2lmKHM9PT1PbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYocz09PWttKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09SG18fHM9PT1WbXx8cz09PUdtfHxzPT09V218fHM9PT1xbXx8cz09PVhtfHxzPT09WW18fHM9PT1abXx8cz09PUptfHxzPT09JG18fHM9PT1LbXx8cz09PVFtfHxzPT09am18fHM9PT10ZylpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YyIpLGEhPT1udWxsKXtpZihzPT09SG0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7aWYocz09PVZtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKHM9PT1HbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjtpZihzPT09V20pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7aWYocz09PXFtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKHM9PT1YbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjtpZihzPT09WW0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7aWYocz09PVptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKHM9PT1KbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSO2lmKHM9PT0kbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO2lmKHM9PT1LbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKHM9PT1RbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI7aWYocz09PWptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtpZihzPT09dGcpcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYocz09PWVnKWlmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxhIT09bnVsbCl7aWYocz09PWVnKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6YS5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09QnIpcmV0dXJuIGk/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxhIT09bnVsbD9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpfXJldHVybntjb252ZXJ0OnJ9fXZhciBobD1jbGFzcyBleHRlbmRzIFNle2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtobC5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgQmk9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtCaS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgUEU9e3R5cGU6Im1vdmUifSxRcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgQmksdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBCaSx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgVCksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IEJpLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBUKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxlLGkpe2xldCByPW51bGwscz1udWxsLG89bnVsbCxhPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJmUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihhIT09bnVsbCYmKHI9ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsaSksciE9PW51bGwmJihhLm1hdHJpeC5mcm9tQXJyYXkoci50cmFuc2Zvcm0ubWF0cml4KSxhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnJvdGF0aW9uLGEuc2NhbGUpLHIubGluZWFyVmVsb2NpdHk/KGEuaGFzTGluZWFyVmVsb2NpdHk9ITAsYS5saW5lYXJWZWxvY2l0eS5jb3B5KHIubGluZWFyVmVsb2NpdHkpKTphLmhhc0xpbmVhclZlbG9jaXR5PSExLHIuYW5ndWxhclZlbG9jaXR5PyhhLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxhLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHIuYW5ndWxhclZlbG9jaXR5KSk6YS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KFBFKSkpLGMmJnQuaGFuZCl7bz0hMDtmb3IobGV0IHggb2YgdC5oYW5kLnZhbHVlcygpKXtsZXQgdj1lLmdldEpvaW50UG9zZSh4LGkpO2lmKGMuam9pbnRzW3guam9pbnROYW1lXT09PXZvaWQgMCl7bGV0IHA9bmV3IEJpO3AubWF0cml4QXV0b1VwZGF0ZT0hMSxwLnZpc2libGU9ITEsYy5qb2ludHNbeC5qb2ludE5hbWVdPXAsYy5hZGQocCl9bGV0IG09Yy5qb2ludHNbeC5qb2ludE5hbWVdO3YhPT1udWxsJiYobS5tYXRyaXguZnJvbUFycmF5KHYudHJhbnNmb3JtLm1hdHJpeCksbS5tYXRyaXguZGVjb21wb3NlKG0ucG9zaXRpb24sbS5yb3RhdGlvbixtLnNjYWxlKSxtLmpvaW50UmFkaXVzPXYucmFkaXVzKSxtLnZpc2libGU9diE9PW51bGx9bGV0IHU9Yy5qb2ludHNbImluZGV4LWZpbmdlci10aXAiXSxoPWMuam9pbnRzWyJ0aHVtYi10aXAiXSxmPXUucG9zaXRpb24uZGlzdGFuY2VUbyhoLnBvc2l0aW9uKSxkPS4wMixnPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPmQrZz8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJmY8PWQtZyYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbCE9PW51bGwmJnQuZ3JpcFNwYWNlJiYocz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSkscyE9PW51bGwmJihsLm1hdHJpeC5mcm9tQXJyYXkocy50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLHMubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KHMubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLHMuYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHMuYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gYSE9PW51bGwmJihhLnZpc2libGU9ciE9PW51bGwpLGwhPT1udWxsJiYobC52aXNpYmxlPXMhPT1udWxsKSxjIT09bnVsbCYmKGMudmlzaWJsZT1vIT09bnVsbCksdGhpc319LHVvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMsdSl7aWYodT11IT09dm9pZCAwP3U6T2ksdSE9PU9pJiZ1IT09VnIpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO2k9PT12b2lkIDAmJnU9PT1PaSYmKGk9bm8pLGk9PT12b2lkIDAmJnU9PT1WciYmKGk9QnIpLHN1cGVyKG51bGwscixzLG8sYSxsLHUsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj1hIT09dm9pZCAwP2E6ZmUsdGhpcy5taW5GaWx0ZXI9bCE9PXZvaWQgMD9sOmZlLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTt1by5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIFp1PWNsYXNzIGV4dGVuZHMgSW57Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLHM9MSxvPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxoPW51bGwsZj1udWxsLGQ9ITEsZz1udWxsLHg9ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLHY9bnVsbCxtPW51bGwscD1bXSxiPW5ldyBNYXAsXz1uZXcgU2U7Xy5sYXllcnMuZW5hYmxlKDEpLF8udmlld3BvcnQ9bmV3IFd0O2xldCBTPW5ldyBTZTtTLmxheWVycy5lbmFibGUoMiksUy52aWV3cG9ydD1uZXcgV3Q7bGV0IEw9W18sU10sQT1uZXcgaGw7QS5sYXllcnMuZW5hYmxlKDEpLEEubGF5ZXJzLmVuYWJsZSgyKTtsZXQgSD1udWxsLHR0PW51bGw7dGhpcy5jYW1lcmFBdXRvVXBkYXRlPSEwLHRoaXMuZW5hYmxlZD0hMSx0aGlzLmlzUHJlc2VudGluZz0hMSx0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24oRyl7bGV0ICQ9cFtHXTtyZXR1cm4gJD09PXZvaWQgMCYmKCQ9bmV3IFFzLHBbR109JCksJC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKEcpe2xldCAkPXBbR107cmV0dXJuICQ9PT12b2lkIDAmJigkPW5ldyBRcyxwW0ddPSQpLCQuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbihHKXtsZXQgJD1wW0ddO3JldHVybiAkPT09dm9pZCAwJiYoJD1uZXcgUXMscFtHXT0kKSwkLmdldEhhbmRTcGFjZSgpfTtmdW5jdGlvbiBYKEcpe2xldCAkPWIuZ2V0KEcuaW5wdXRTb3VyY2UpOyQmJiQuZGlzcGF0Y2hFdmVudCh7dHlwZTpHLnR5cGUsZGF0YTpHLmlucHV0U291cmNlfSl9ZnVuY3Rpb24geSgpe2IuZm9yRWFjaChmdW5jdGlvbihHLCQpe0cuZGlzY29ubmVjdCgkKX0pLGIuY2xlYXIoKSxIPW51bGwsdHQ9bnVsbCx0LnNldFJlbmRlclRhcmdldCh2KSxmPW51bGwsaD1udWxsLHU9bnVsbCxyPW51bGwsbT1udWxsLGF0LnN0b3AoKSxpLmlzUHJlc2VudGluZz0hMSxpLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKEcpe3M9RyxpLmlzUHJlc2VudGluZz09PSEwJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSBmcmFtZWJ1ZmZlciBzY2FsZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLnNldFJlZmVyZW5jZVNwYWNlVHlwZT1mdW5jdGlvbihHKXthPUcsaS5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBvfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGd9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiByfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oRyl7cmV0dXJuIGhmKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtpZihyPUcsciE9PW51bGwpe2lmKHY9dC5nZXRSZW5kZXJUYXJnZXQoKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJlbmQiLHkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIixSKSx4LnhyQ29tcGF0aWJsZSE9PSEwJiYoeWllbGQgZS5tYWtlWFJDb21wYXRpYmxlKCkpLHIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwfHx0LmNhcGFiaWxpdGllcy5pc1dlYkdMMj09PSExKXtsZXQgJD17YW50aWFsaWFzOnIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP3guYW50aWFsaWFzOiEwLGFscGhhOnguYWxwaGEsZGVwdGg6eC5kZXB0aCxzdGVuY2lsOnguc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOnN9O2Y9bmV3IFhSV2ViR0xMYXllcihyLGUsJCksci51cGRhdGVSZW5kZXJTdGF0ZSh7YmFzZUxheWVyOmZ9KSxtPW5ldyBOZShmLmZyYW1lYnVmZmVyV2lkdGgsZi5mcmFtZWJ1ZmZlckhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pfWVsc2V7ZD14LmFudGlhbGlhcztsZXQgJD1udWxsLGx0PW51bGwsZHQ9bnVsbDt4LmRlcHRoJiYoZHQ9eC5zdGVuY2lsPzM1MDU2OjMzMTkwLCQ9eC5zdGVuY2lsP1ZyOk9pLGx0PXguc3RlbmNpbD9Ccjpubyk7bGV0IHh0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09JHQ/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6ZHQsc2NhbGVGYWN0b3I6c307dT1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKHh0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSksZD9tPW5ldyBzbyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpSZSx0eXBlOmVpLGRlcHRoVGV4dHVyZTpuZXcgdW8oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LGx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCQpLHN0ZW5jaWxCdWZmZXI6eC5zdGVuY2lsLGlnbm9yZURlcHRoOmguaWdub3JlRGVwdGhWYWx1ZXMsdXNlUmVuZGVyVG9UZXh0dXJlOmwsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pOm09bmV3IE5lKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZGVwdGhUZXh0dXJlOm5ldyB1byhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQsbHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsJCksc3RlbmNpbEJ1ZmZlcjp4LnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9bS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLG89eWllbGQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksYXQuc2V0Q29udGV4dChyKSxhdC5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX0pfTtmdW5jdGlvbiBSKEcpe2xldCAkPXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgbHQ9MDtsdDxwLmxlbmd0aDtsdCsrKWIuc2V0KCRbbHRdLHBbbHRdKTtmb3IobGV0IGx0PTA7bHQ8Ry5yZW1vdmVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5yZW1vdmVkW2x0XSx4dD1iLmdldChkdCk7eHQmJih4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6ZHR9KSxiLmRlbGV0ZShkdCkpfWZvcihsZXQgbHQ9MDtsdDxHLmFkZGVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5hZGRlZFtsdF0seHQ9Yi5nZXQoZHQpO3h0JiZ4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6ZHR9KX19bGV0IEQ9bmV3IFQsRj1uZXcgVDtmdW5jdGlvbiB6KEcsJCxsdCl7RC5zZXRGcm9tTWF0cml4UG9zaXRpb24oJC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24obHQubWF0cml4V29ybGQpO2xldCBkdD1ELmRpc3RhbmNlVG8oRikseHQ9JC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLGs9bHQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxGdD14dFsxNF0vKHh0WzEwXS0xKSxtdD14dFsxNF0vKHh0WzEwXSsxKSxTdD0oeHRbOV0rMSkveHRbNV0sQj0oeHRbOV0tMSkveHRbNV0sc3Q9KHh0WzhdLTEpL3h0WzBdLG50PShrWzhdKzEpL2tbMF0sQz1GdCpzdCxqPUZ0Km50LEo9ZHQvKC1zdCtudCksaXQ9Siotc3Q7JC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoRy5wb3NpdGlvbixHLnF1YXRlcm5pb24sRy5zY2FsZSksRy50cmFuc2xhdGVYKGl0KSxHLnRyYW5zbGF0ZVooSiksRy5tYXRyaXhXb3JsZC5jb21wb3NlKEcucG9zaXRpb24sRy5xdWF0ZXJuaW9uLEcuc2NhbGUpLEcubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoRy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGV0PUZ0K0osdnQ9bXQrSixidD1DLWl0LEl0PWorKGR0LWl0KSxadD1TdCptdC92dCpldCxxdD1CKm10L3Z0KmV0O0cucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoYnQsSXQsWnQscXQsZXQsdnQpfWZ1bmN0aW9uIE4oRywkKXskPT09bnVsbD9HLm1hdHJpeFdvcmxkLmNvcHkoRy5tYXRyaXgpOkcubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcygkLm1hdHJpeFdvcmxkLEcubWF0cml4KSxHLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KEcubWF0cml4V29ybGQpLmludmVydCgpfXRoaXMudXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKEcpe2lmKHI9PT1udWxsKXJldHVybjtBLm5lYXI9Uy5uZWFyPV8ubmVhcj1HLm5lYXIsQS5mYXI9Uy5mYXI9Xy5mYXI9Ry5mYXIsKEghPT1BLm5lYXJ8fHR0IT09QS5mYXIpJiYoci51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOkEubmVhcixkZXB0aEZhcjpBLmZhcn0pLEg9QS5uZWFyLHR0PUEuZmFyKTtsZXQgJD1HLnBhcmVudCxsdD1BLmNhbWVyYXM7TihBLCQpO2ZvcihsZXQgeHQ9MDt4dDxsdC5sZW5ndGg7eHQrKylOKGx0W3h0XSwkKTtBLm1hdHJpeFdvcmxkLmRlY29tcG9zZShBLnBvc2l0aW9uLEEucXVhdGVybmlvbixBLnNjYWxlKSxHLnBvc2l0aW9uLmNvcHkoQS5wb3NpdGlvbiksRy5xdWF0ZXJuaW9uLmNvcHkoQS5xdWF0ZXJuaW9uKSxHLnNjYWxlLmNvcHkoQS5zY2FsZSksRy5tYXRyaXguY29weShBLm1hdHJpeCksRy5tYXRyaXhXb3JsZC5jb3B5KEEubWF0cml4V29ybGQpO2xldCBkdD1HLmNoaWxkcmVuO2ZvcihsZXQgeHQ9MCxrPWR0Lmxlbmd0aDt4dDxrO3h0KyspZHRbeHRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtsdC5sZW5ndGg9PT0yP3ooQSxfLFMpOkEucHJvamVjdGlvbk1hdHJpeC5jb3B5KF8ucHJvamVjdGlvbk1hdHJpeCl9LHRoaXMuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIEF9LHRoaXMuZ2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKCl7aWYoaCE9PW51bGwpcmV0dXJuIGguZml4ZWRGb3ZlYXRpb247aWYoZiE9PW51bGwpcmV0dXJuIGYuZml4ZWRGb3ZlYXRpb259LHRoaXMuc2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKEcpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1HKSxmIT09bnVsbCYmZi5maXhlZEZvdmVhdGlvbiE9PXZvaWQgMCYmKGYuZml4ZWRGb3ZlYXRpb249Ryl9O2xldCBWPW51bGw7ZnVuY3Rpb24gUShHLCQpe2lmKGM9JC5nZXRWaWV3ZXJQb3NlKG8pLGc9JCxjIT09bnVsbCl7bGV0IGR0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKG0sZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQobSkpO2xldCB4dD0hMTtkdC5sZW5ndGghPT1BLmNhbWVyYXMubGVuZ3RoJiYoQS5jYW1lcmFzLmxlbmd0aD0wLHh0PSEwKTtmb3IobGV0IGs9MDtrPGR0Lmxlbmd0aDtrKyspe2xldCBGdD1kdFtrXSxtdD1udWxsO2lmKGYhPT1udWxsKW10PWYuZ2V0Vmlld3BvcnQoRnQpO2Vsc2V7bGV0IEI9dS5nZXRWaWV3U3ViSW1hZ2UoaCxGdCk7bXQ9Qi52aWV3cG9ydCxrPT09MCYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMobSxCLmNvbG9yVGV4dHVyZSxoLmlnbm9yZURlcHRoVmFsdWVzP3ZvaWQgMDpCLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KG0pKX1sZXQgU3Q9TFtrXTtTdC5tYXRyaXguZnJvbUFycmF5KEZ0LnRyYW5zZm9ybS5tYXRyaXgpLFN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEZ0LnByb2plY3Rpb25NYXRyaXgpLFN0LnZpZXdwb3J0LnNldChtdC54LG10LnksbXQud2lkdGgsbXQuaGVpZ2h0KSxrPT09MCYmQS5tYXRyaXguY29weShTdC5tYXRyaXgpLHh0PT09ITAmJkEuY2FtZXJhcy5wdXNoKFN0KX19bGV0IGx0PXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgZHQ9MDtkdDxwLmxlbmd0aDtkdCsrKXtsZXQgeHQ9cFtkdF0saz1sdFtkdF07eHQudXBkYXRlKGssJCxvKX1WJiZWKEcsJCksZz1udWxsfWxldCBhdD1uZXcgZzA7YXQuc2V0QW5pbWF0aW9uTG9vcChRKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oRyl7Vj1HfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gREUobil7ZnVuY3Rpb24gdChtLHApe20uZm9nQ29sb3IudmFsdWUuY29weShwLmNvbG9yKSxwLmlzRm9nPyhtLmZvZ05lYXIudmFsdWU9cC5uZWFyLG0uZm9nRmFyLnZhbHVlPXAuZmFyKTpwLmlzRm9nRXhwMiYmKG0uZm9nRGVuc2l0eS52YWx1ZT1wLmRlbnNpdHkpfWZ1bmN0aW9uIGUobSxwLGIsXyxTKXtwLmlzTWVzaEJhc2ljTWF0ZXJpYWw/aShtLHApOnAuaXNNZXNoTGFtYmVydE1hdGVyaWFsPyhpKG0scCksbChtLHApKTpwLmlzTWVzaFRvb25NYXRlcmlhbD8oaShtLHApLHUobSxwKSk6cC5pc01lc2hQaG9uZ01hdGVyaWFsPyhpKG0scCksYyhtLHApKTpwLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkobSxwKSxwLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZihtLHAsUyk6aChtLHApKTpwLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKG0scCksZChtLHApKTpwLmlzTWVzaERlcHRoTWF0ZXJpYWw/KGkobSxwKSxnKG0scCkpOnAuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oaShtLHApLHgobSxwKSk6cC5pc01lc2hOb3JtYWxNYXRlcmlhbD8oaShtLHApLHYobSxwKSk6cC5pc0xpbmVCYXNpY01hdGVyaWFsPyhyKG0scCkscC5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmcyhtLHApKTpwLmlzUG9pbnRzTWF0ZXJpYWw/byhtLHAsYixfKTpwLmlzU3ByaXRlTWF0ZXJpYWw/YShtLHApOnAuaXNTaGFkb3dNYXRlcmlhbD8obS5jb2xvci52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHkpOnAuaXNTaGFkZXJNYXRlcmlhbCYmKHAudW5pZm9ybXNOZWVkVXBkYXRlPSExKX1mdW5jdGlvbiBpKG0scCl7bS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eSxwLmNvbG9yJiZtLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxwLmVtaXNzaXZlJiZtLmVtaXNzaXZlLnZhbHVlLmNvcHkocC5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIocC5lbWlzc2l2ZUludGVuc2l0eSkscC5tYXAmJihtLm1hcC52YWx1ZT1wLm1hcCkscC5hbHBoYU1hcCYmKG0uYWxwaGFNYXAudmFsdWU9cC5hbHBoYU1hcCkscC5zcGVjdWxhck1hcCYmKG0uc3BlY3VsYXJNYXAudmFsdWU9cC5zcGVjdWxhck1hcCkscC5hbHBoYVRlc3Q+MCYmKG0uYWxwaGFUZXN0LnZhbHVlPXAuYWxwaGFUZXN0KTtsZXQgYj1uLmdldChwKS5lbnZNYXA7YiYmKG0uZW52TWFwLnZhbHVlPWIsbS5mbGlwRW52TWFwLnZhbHVlPWIuaXNDdWJlVGV4dHVyZSYmYi5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxLG0ucmVmbGVjdGl2aXR5LnZhbHVlPXAucmVmbGVjdGl2aXR5LG0uaW9yLnZhbHVlPXAuaW9yLG0ucmVmcmFjdGlvblJhdGlvLnZhbHVlPXAucmVmcmFjdGlvblJhdGlvKSxwLmxpZ2h0TWFwJiYobS5saWdodE1hcC52YWx1ZT1wLmxpZ2h0TWFwLG0ubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9cC5saWdodE1hcEludGVuc2l0eSkscC5hb01hcCYmKG0uYW9NYXAudmFsdWU9cC5hb01hcCxtLmFvTWFwSW50ZW5zaXR5LnZhbHVlPXAuYW9NYXBJbnRlbnNpdHkpO2xldCBfO3AubWFwP189cC5tYXA6cC5zcGVjdWxhck1hcD9fPXAuc3BlY3VsYXJNYXA6cC5kaXNwbGFjZW1lbnRNYXA/Xz1wLmRpc3BsYWNlbWVudE1hcDpwLm5vcm1hbE1hcD9fPXAubm9ybWFsTWFwOnAuYnVtcE1hcD9fPXAuYnVtcE1hcDpwLnJvdWdobmVzc01hcD9fPXAucm91Z2huZXNzTWFwOnAubWV0YWxuZXNzTWFwP189cC5tZXRhbG5lc3NNYXA6cC5hbHBoYU1hcD9fPXAuYWxwaGFNYXA6cC5lbWlzc2l2ZU1hcD9fPXAuZW1pc3NpdmVNYXA6cC5jbGVhcmNvYXRNYXA/Xz1wLmNsZWFyY29hdE1hcDpwLmNsZWFyY29hdE5vcm1hbE1hcD9fPXAuY2xlYXJjb2F0Tm9ybWFsTWFwOnAuY2xlYXJjb2F0Um91Z2huZXNzTWFwP189cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA6cC5zcGVjdWxhckludGVuc2l0eU1hcD9fPXAuc3BlY3VsYXJJbnRlbnNpdHlNYXA6cC5zcGVjdWxhckNvbG9yTWFwP189cC5zcGVjdWxhckNvbG9yTWFwOnAudHJhbnNtaXNzaW9uTWFwP189cC50cmFuc21pc3Npb25NYXA6cC50aGlja25lc3NNYXA/Xz1wLnRoaWNrbmVzc01hcDpwLnNoZWVuQ29sb3JNYXA/Xz1wLnNoZWVuQ29sb3JNYXA6cC5zaGVlblJvdWdobmVzc01hcCYmKF89cC5zaGVlblJvdWdobmVzc01hcCksXyE9PXZvaWQgMCYmKF8uaXNXZWJHTFJlbmRlclRhcmdldCYmKF89Xy50ZXh0dXJlKSxfLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmXy51cGRhdGVNYXRyaXgoKSxtLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoXy5tYXRyaXgpKTtsZXQgUztwLmFvTWFwP1M9cC5hb01hcDpwLmxpZ2h0TWFwJiYoUz1wLmxpZ2h0TWFwKSxTIT09dm9pZCAwJiYoUy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoUz1TLnRleHR1cmUpLFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoUy5tYXRyaXgpKX1mdW5jdGlvbiByKG0scCl7bS5kaWZmdXNlLnZhbHVlLmNvcHkocC5jb2xvciksbS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eX1mdW5jdGlvbiBzKG0scCl7bS5kYXNoU2l6ZS52YWx1ZT1wLmRhc2hTaXplLG0udG90YWxTaXplLnZhbHVlPXAuZGFzaFNpemUrcC5nYXBTaXplLG0uc2NhbGUudmFsdWU9cC5zY2FsZX1mdW5jdGlvbiBvKG0scCxiLF8pe20uZGlmZnVzZS52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHksbS5zaXplLnZhbHVlPXAuc2l6ZSpiLG0uc2NhbGUudmFsdWU9XyouNSxwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBTO3AubWFwP1M9cC5tYXA6cC5hbHBoYU1hcCYmKFM9cC5hbHBoYU1hcCksUyE9PXZvaWQgMCYmKFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpfWZ1bmN0aW9uIGEobSxwKXttLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxtLm9wYWNpdHkudmFsdWU9cC5vcGFjaXR5LG0ucm90YXRpb24udmFsdWU9cC5yb3RhdGlvbixwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBiO3AubWFwP2I9cC5tYXA6cC5hbHBoYU1hcCYmKGI9cC5hbHBoYU1hcCksYiE9PXZvaWQgMCYmKGIubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZiLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShiLm1hdHJpeCkpfWZ1bmN0aW9uIGwobSxwKXtwLmVtaXNzaXZlTWFwJiYobS5lbWlzc2l2ZU1hcC52YWx1ZT1wLmVtaXNzaXZlTWFwKX1mdW5jdGlvbiBjKG0scCl7bS5zcGVjdWxhci52YWx1ZS5jb3B5KHAuc3BlY3VsYXIpLG0uc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KHAuc2hpbmluZXNzLDFlLTQpLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gdShtLHApe3AuZ3JhZGllbnRNYXAmJihtLmdyYWRpZW50TWFwLnZhbHVlPXAuZ3JhZGllbnRNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gaChtLHApe20ucm91Z2huZXNzLnZhbHVlPXAucm91Z2huZXNzLG0ubWV0YWxuZXNzLnZhbHVlPXAubWV0YWxuZXNzLHAucm91Z2huZXNzTWFwJiYobS5yb3VnaG5lc3NNYXAudmFsdWU9cC5yb3VnaG5lc3NNYXApLHAubWV0YWxuZXNzTWFwJiYobS5tZXRhbG5lc3NNYXAudmFsdWU9cC5tZXRhbG5lc3NNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyksbi5nZXQocCkuZW52TWFwJiYobS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9cC5lbnZNYXBJbnRlbnNpdHkpfWZ1bmN0aW9uIGYobSxwLGIpe2gobSxwKSxtLmlvci52YWx1ZT1wLmlvcixwLnNoZWVuPjAmJihtLnNoZWVuQ29sb3IudmFsdWUuY29weShwLnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHAuc2hlZW4pLG0uc2hlZW5Sb3VnaG5lc3MudmFsdWU9cC5zaGVlblJvdWdobmVzcyxwLnNoZWVuQ29sb3JNYXAmJihtLnNoZWVuQ29sb3JNYXAudmFsdWU9cC5zaGVlbkNvbG9yTWFwKSxwLnNoZWVuUm91Z2huZXNzTWFwJiYobS5zaGVlblJvdWdobmVzc01hcC52YWx1ZT1wLnNoZWVuUm91Z2huZXNzTWFwKSkscC5jbGVhcmNvYXQ+MCYmKG0uY2xlYXJjb2F0LnZhbHVlPXAuY2xlYXJjb2F0LG0uY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXAuY2xlYXJjb2F0Um91Z2huZXNzLHAuY2xlYXJjb2F0TWFwJiYobS5jbGVhcmNvYXRNYXAudmFsdWU9cC5jbGVhcmNvYXRNYXApLHAuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYobS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHAuY2xlYXJjb2F0Tm9ybWFsTWFwJiYobS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLG0uY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXAuY2xlYXJjb2F0Tm9ybWFsTWFwLHAuc2lkZT09PWhlJiZtLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSkscC50cmFuc21pc3Npb24+MCYmKG0udHJhbnNtaXNzaW9uLnZhbHVlPXAudHJhbnNtaXNzaW9uLG0udHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZT1iLnRleHR1cmUsbS50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS52YWx1ZS5zZXQoYi53aWR0aCxiLmhlaWdodCkscC50cmFuc21pc3Npb25NYXAmJihtLnRyYW5zbWlzc2lvbk1hcC52YWx1ZT1wLnRyYW5zbWlzc2lvbk1hcCksbS50aGlja25lc3MudmFsdWU9cC50aGlja25lc3MscC50aGlja25lc3NNYXAmJihtLnRoaWNrbmVzc01hcC52YWx1ZT1wLnRoaWNrbmVzc01hcCksbS5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlPXAuYXR0ZW51YXRpb25EaXN0YW5jZSxtLmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weShwLmF0dGVudWF0aW9uQ29sb3IpKSxtLnNwZWN1bGFySW50ZW5zaXR5LnZhbHVlPXAuc3BlY3VsYXJJbnRlbnNpdHksbS5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkocC5zcGVjdWxhckNvbG9yKSxwLnNwZWN1bGFySW50ZW5zaXR5TWFwJiYobS5zcGVjdWxhckludGVuc2l0eU1hcC52YWx1ZT1wLnNwZWN1bGFySW50ZW5zaXR5TWFwKSxwLnNwZWN1bGFyQ29sb3JNYXAmJihtLnNwZWN1bGFyQ29sb3JNYXAudmFsdWU9cC5zcGVjdWxhckNvbG9yTWFwKX1mdW5jdGlvbiBkKG0scCl7cC5tYXRjYXAmJihtLm1hdGNhcC52YWx1ZT1wLm1hdGNhcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBnKG0scCl7cC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24geChtLHApe3AuZGlzcGxhY2VtZW50TWFwJiYobS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9cC5kaXNwbGFjZW1lbnRNYXAsbS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1wLmRpc3BsYWNlbWVudFNjYWxlLG0uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1wLmRpc3BsYWNlbWVudEJpYXMpLG0ucmVmZXJlbmNlUG9zaXRpb24udmFsdWUuY29weShwLnJlZmVyZW5jZVBvc2l0aW9uKSxtLm5lYXJEaXN0YW5jZS52YWx1ZT1wLm5lYXJEaXN0YW5jZSxtLmZhckRpc3RhbmNlLnZhbHVlPXAuZmFyRGlzdGFuY2V9ZnVuY3Rpb24gdihtLHApe3AuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3Jtczp0LHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOmV9fWZ1bmN0aW9uIElFKCl7bGV0IG49cm8oImNhbnZhcyIpO3JldHVybiBuLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixufWZ1bmN0aW9uIFZ0KG49e30pe2xldCB0PW4uY2FudmFzIT09dm9pZCAwP24uY2FudmFzOklFKCksZT1uLmNvbnRleHQhPT12b2lkIDA/bi5jb250ZXh0Om51bGwsaT1uLmFscGhhIT09dm9pZCAwP24uYWxwaGE6ITEscj1uLmRlcHRoIT09dm9pZCAwP24uZGVwdGg6ITAscz1uLnN0ZW5jaWwhPT12b2lkIDA/bi5zdGVuY2lsOiEwLG89bi5hbnRpYWxpYXMhPT12b2lkIDA/bi5hbnRpYWxpYXM6ITEsYT1uLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9uLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPW4ucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP24ucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9bi5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP24uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLGQ9W10sZz1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPXJpLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz10aSx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgeD10aGlzLHY9ITEsbT0wLHA9MCxiPW51bGwsXz0tMSxTPW51bGwsTD1uZXcgV3QsQT1uZXcgV3QsSD1udWxsLHR0PXQud2lkdGgsWD10LmhlaWdodCx5PTEsUj1udWxsLEQ9bnVsbCxGPW5ldyBXdCgwLDAsdHQsWCksej1uZXcgV3QoMCwwLHR0LFgpLE49ITEsVj1uZXcgcXIsUT0hMSxhdD0hMSxHPW51bGwsJD1uZXcgd3QsbHQ9bmV3IFQsZHQ9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiB4dCgpe3JldHVybiBiPT09bnVsbD95OjF9bGV0IGs9ZTtmdW5jdGlvbiBGdChNLEkpe2ZvcihsZXQgTz0wO088TS5sZW5ndGg7TysrKXtsZXQgVT1NW09dLFo9dC5nZXRDb250ZXh0KFUsSSk7aWYoWiE9PW51bGwpcmV0dXJuIFp9cmV0dXJuIG51bGx9dHJ5e2xldCBNPXthbHBoYTohMCxkZXB0aDpyLHN0ZW5jaWw6cyxhbnRpYWxpYXM6byxwcmVtdWx0aXBsaWVkQWxwaGE6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7JGh9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixBdCwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsUCwhMSksaz09PW51bGwpe2xldCBJPVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZih4LmlzV2ViR0wxUmVuZGVyZXI9PT0hMCYmSS5zaGlmdCgpLGs9RnQoSSxNKSxrPT09bnVsbCl0aHJvdyBGdChJKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfWsuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PT09dm9pZCAwJiYoay5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKE0pe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrTS5tZXNzYWdlKSxNfWxldCBtdCxTdCxCLHN0LG50LEMsaixKLGl0LGV0LHZ0LGJ0LEl0LFp0LHF0LEUsdyxxLHJ0LGd0LFcsX3QseXQ7ZnVuY3Rpb24gdXQoKXttdD1uZXcgZVMoayksU3Q9bmV3IEoxKGssbXQsbiksbXQuaW5pdChTdCksX3Q9bmV3IExFKGssbXQsU3QpLEI9bmV3IENFKGssbXQsU3QpLHN0PW5ldyByUyhrKSxudD1uZXcgeEUsQz1uZXcgUkUoayxtdCxCLG50LFN0LF90LHN0KSxqPW5ldyBLMSh4KSxKPW5ldyB0Uyh4KSxpdD1uZXcgdk0oayxTdCkseXQ9bmV3IFkxKGssbXQsaXQsU3QpLGV0PW5ldyBuUyhrLGl0LHN0LHl0KSx2dD1uZXcgbFMoayxldCxpdCxzdCkscnQ9bmV3IGFTKGssU3QsQyksRT1uZXcgJDEobnQpLGJ0PW5ldyBnRSh4LGosSixtdCxTdCx5dCxFKSxJdD1uZXcgREUobnQpLFp0PW5ldyB2RSxxdD1uZXcgRUUobXQsU3QpLHE9bmV3IFgxKHgsaixCLHZ0LGksYSksdz1uZXcgVDAoeCx2dCxTdCksZ3Q9bmV3IFoxKGssbXQsc3QsU3QpLFc9bmV3IGlTKGssbXQsc3QsU3QpLHN0LnByb2dyYW1zPWJ0LnByb2dyYW1zLHguY2FwYWJpbGl0aWVzPVN0LHguZXh0ZW5zaW9ucz1tdCx4LnByb3BlcnRpZXM9bnQseC5yZW5kZXJMaXN0cz1adCx4LnNoYWRvd01hcD13LHguc3RhdGU9Qix4LmluZm89c3R9dXQoKTtsZXQgY3Q9bmV3IFp1KHgsayk7dGhpcy54cj1jdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBrLmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBNPW10LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7TSYmTS5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgTT1tdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO00mJk0ucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIHl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihNKXtNIT09dm9pZCAwJiYoeT1NLHRoaXMuc2V0U2l6ZSh0dCxYLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihNKXtyZXR1cm4gTS5zZXQodHQsWCl9LHRoaXMuc2V0U2l6ZT1mdW5jdGlvbihNLEksTyl7aWYoY3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn10dD1NLFg9SSx0LndpZHRoPU1hdGguZmxvb3IoTSp5KSx0LmhlaWdodD1NYXRoLmZsb29yKEkqeSksTyE9PSExJiYodC5zdHlsZS53aWR0aD1NKyJweCIsdC5zdHlsZS5oZWlnaHQ9SSsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKE0pe3JldHVybiBNLnNldCh0dCp5LFgqeSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihNLEksTyl7dHQ9TSxYPUkseT1PLHQud2lkdGg9TWF0aC5mbG9vcihNKk8pLHQuaGVpZ2h0PU1hdGguZmxvb3IoSSpPKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihNKXtyZXR1cm4gTS5jb3B5KEwpfSx0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoRil9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oTSxJLE8sVSl7TS5pc1ZlY3RvcjQ/Ri5zZXQoTS54LE0ueSxNLnosTS53KTpGLnNldChNLEksTyxVKSxCLnZpZXdwb3J0KEwuY29weShGKS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoeil9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihNLEksTyxVKXtNLmlzVmVjdG9yND96LnNldChNLngsTS55LE0ueixNLncpOnouc2V0KE0sSSxPLFUpLEIuc2Npc3NvcihBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gTn0sdGhpcy5zZXRTY2lzc29yVGVzdD1mdW5jdGlvbihNKXtCLnNldFNjaXNzb3JUZXN0KE49TSl9LHRoaXMuc2V0T3BhcXVlU29ydD1mdW5jdGlvbihNKXtSPU19LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKE0pe0Q9TX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkocS5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtxLnNldENsZWFyQ29sb3IuYXBwbHkocSxhcmd1bWVudHMpfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gcS5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3Euc2V0Q2xlYXJBbHBoYS5hcHBseShxLGFyZ3VtZW50cyl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oTSxJLE8pe2xldCBVPTA7KE09PT12b2lkIDB8fE0pJiYoVXw9MTYzODQpLChJPT09dm9pZCAwfHxJKSYmKFV8PTI1NiksKE89PT12b2lkIDB8fE8pJiYoVXw9MTAyNCksay5jbGVhcihVKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEF0LCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixQLCExKSxadC5kaXNwb3NlKCkscXQuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxqLmRpc3Bvc2UoKSxKLmRpc3Bvc2UoKSx2dC5kaXNwb3NlKCkseXQuZGlzcG9zZSgpLGJ0LmRpc3Bvc2UoKSxjdC5kaXNwb3NlKCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0IixEdCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIsanQpLEcmJihHLmRpc3Bvc2UoKSxHPW51bGwpLHplLnN0b3AoKX07ZnVuY3Rpb24gQXQoTSl7TS5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksdj0hMH1mdW5jdGlvbiBQKCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksdj0hMTtsZXQgTT1zdC5hdXRvUmVzZXQsST13LmVuYWJsZWQsTz13LmF1dG9VcGRhdGUsVT13Lm5lZWRzVXBkYXRlLFo9dy50eXBlO3V0KCksc3QuYXV0b1Jlc2V0PU0sdy5lbmFibGVkPUksdy5hdXRvVXBkYXRlPU8sdy5uZWVkc1VwZGF0ZT1VLHcudHlwZT1afWZ1bmN0aW9uIHB0KE0pe2xldCBJPU0udGFyZ2V0O0kucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLGh0KEkpfWZ1bmN0aW9uIGh0KE0pe0V0KE0pLG50LnJlbW92ZShNKX1mdW5jdGlvbiBFdChNKXtsZXQgST1udC5nZXQoTSkucHJvZ3JhbXM7SSE9PXZvaWQgMCYmKEkuZm9yRWFjaChmdW5jdGlvbihPKXtidC5yZWxlYXNlUHJvZ3JhbShPKX0pLE0uaXNTaGFkZXJNYXRlcmlhbCYmYnQucmVsZWFzZVNoYWRlckNhY2hlKE0pKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihNLEksTyxVLFosVHQpe0k9PT1udWxsJiYoST1kdCk7bGV0IEN0PVouaXNNZXNoJiZaLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxMdD1CMChNLEksTyxVLFopO0Iuc2V0TWF0ZXJpYWwoVSxDdCk7bGV0IFJ0PU8uaW5kZXgsR3Q9Ty5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKFJ0PT09bnVsbCl7aWYoR3Q9PT12b2lkIDB8fEd0LmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihSdC5jb3VudD09PTApcmV0dXJuO2xldCB6dD0xO1Uud2lyZWZyYW1lPT09ITAmJihSdD1ldC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoTyksenQ9MikseXQuc2V0dXAoWixVLEx0LE8sUnQpO2xldCBVdCxpZT1ndDtSdCE9PW51bGwmJihVdD1pdC5nZXQoUnQpLGllPVcsaWUuc2V0SW5kZXgoVXQpKTtsZXQgZmk9UnQhPT1udWxsP1J0LmNvdW50Okd0LmNvdW50LFppPU8uZHJhd1JhbmdlLnN0YXJ0Knp0LE90PU8uZHJhd1JhbmdlLmNvdW50Knp0LG5uPVR0IT09bnVsbD9UdC5zdGFydCp6dDowLGxlPVR0IT09bnVsbD9UdC5jb3VudCp6dDoxLzAscm49TWF0aC5tYXgoWmksbm4pLElvPU1hdGgubWluKGZpLFppK090LG5uK2xlKS0xLHNuPU1hdGgubWF4KDAsSW8tcm4rMSk7aWYoc24hPT0wKXtpZihaLmlzTWVzaClVLndpcmVmcmFtZT09PSEwPyhCLnNldExpbmVXaWR0aChVLndpcmVmcmFtZUxpbmV3aWR0aCp4dCgpKSxpZS5zZXRNb2RlKDEpKTppZS5zZXRNb2RlKDQpO2Vsc2UgaWYoWi5pc0xpbmUpe2xldCB2bj1VLmxpbmV3aWR0aDt2bj09PXZvaWQgMCYmKHZuPTEpLEIuc2V0TGluZVdpZHRoKHZuKnh0KCkpLFouaXNMaW5lU2VnbWVudHM/aWUuc2V0TW9kZSgxKTpaLmlzTGluZUxvb3A/aWUuc2V0TW9kZSgyKTppZS5zZXRNb2RlKDMpfWVsc2UgWi5pc1BvaW50cz9pZS5zZXRNb2RlKDApOlouaXNTcHJpdGUmJmllLnNldE1vZGUoNCk7aWYoWi5pc0luc3RhbmNlZE1lc2gpaWUucmVuZGVySW5zdGFuY2VzKHJuLHNuLFouY291bnQpO2Vsc2UgaWYoTy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgdm49TWF0aC5taW4oTy5pbnN0YW5jZUNvdW50LE8uX21heEluc3RhbmNlQ291bnQpO2llLnJlbmRlckluc3RhbmNlcyhybixzbix2bil9ZWxzZSBpZS5yZW5kZXIocm4sc24pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKE0sSSl7Zj1xdC5nZXQoTSksZi5pbml0KCksZy5wdXNoKGYpLE0udHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKE8pe08uaXNMaWdodCYmTy5sYXllcnMudGVzdChJLmxheWVycykmJihmLnB1c2hMaWdodChPKSxPLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhPKSl9KSxmLnNldHVwTGlnaHRzKHgucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLE0udHJhdmVyc2UoZnVuY3Rpb24oTyl7bGV0IFU9Ty5tYXRlcmlhbDtpZihVKWlmKEFycmF5LmlzQXJyYXkoVSkpZm9yKGxldCBaPTA7WjxVLmxlbmd0aDtaKyspe2xldCBUdD1VW1pdO09sKFR0LE0sTyl9ZWxzZSBPbChVLE0sTyl9KSxnLnBvcCgpLGY9bnVsbH07bGV0IFk9bnVsbDtmdW5jdGlvbiBNdChNKXtZJiZZKE0pfWZ1bmN0aW9uIER0KCl7emUuc3RvcCgpfWZ1bmN0aW9uIGp0KCl7emUuc3RhcnQoKX1sZXQgemU9bmV3IGcwO3plLnNldEFuaW1hdGlvbkxvb3AoTXQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ6ZS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKE0pe1k9TSxjdC5zZXRBbmltYXRpb25Mb29wKE0pLE09PT1udWxsP3plLnN0b3AoKTp6ZS5zdGFydCgpfSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLER0KSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixqdCksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oTSxJKXtpZihJIT09dm9pZCAwJiZJLmlzQ2FtZXJhIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4iKTtyZXR1cm59aWYodj09PSEwKXJldHVybjtNLmF1dG9VcGRhdGU9PT0hMCYmTS51cGRhdGVNYXRyaXhXb3JsZCgpLEkucGFyZW50PT09bnVsbCYmSS51cGRhdGVNYXRyaXhXb3JsZCgpLGN0LmVuYWJsZWQ9PT0hMCYmY3QuaXNQcmVzZW50aW5nPT09ITAmJihjdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJmN0LnVwZGF0ZUNhbWVyYShJKSxJPWN0LmdldENhbWVyYSgpKSxNLmlzU2NlbmU9PT0hMCYmTS5vbkJlZm9yZVJlbmRlcih4LE0sSSxiKSxmPXF0LmdldChNLGcubGVuZ3RoKSxmLmluaXQoKSxnLnB1c2goZiksJC5tdWx0aXBseU1hdHJpY2VzKEkucHJvamVjdGlvbk1hdHJpeCxJLm1hdHJpeFdvcmxkSW52ZXJzZSksVi5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgkKSxhdD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLFE9RS5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsYXQsSSksaD1adC5nZXQoTSxkLmxlbmd0aCksaC5pbml0KCksZC5wdXNoKGgpLG5lKE0sSSwwLHguc29ydE9iamVjdHMpLGguZmluaXNoKCkseC5zb3J0T2JqZWN0cz09PSEwJiZoLnNvcnQoUixEKSxRPT09ITAmJkUuYmVnaW5TaGFkb3dzKCk7bGV0IE89Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYody5yZW5kZXIoTyxNLEkpLFE9PT0hMCYmRS5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxxLnJlbmRlcihoLE0pLGYuc2V0dXBMaWdodHMoeC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyksSS5pc0FycmF5Q2FtZXJhKXtsZXQgVT1JLmNhbWVyYXM7Zm9yKGxldCBaPTAsVHQ9VS5sZW5ndGg7WjxUdDtaKyspe2xldCBDdD1VW1pdO2VuKGgsTSxDdCxDdC52aWV3cG9ydCl9fWVsc2UgZW4oaCxNLEkpO2IhPT1udWxsJiYoQy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChiKSxDLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChiKSksTS5pc1NjZW5lPT09ITAmJk0ub25BZnRlclJlbmRlcih4LE0sSSksQi5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLEIuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxCLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksQi5zZXRQb2x5Z29uT2Zmc2V0KCExKSx5dC5yZXNldERlZmF1bHRTdGF0ZSgpLF89LTEsUz1udWxsLGcucG9wKCksZy5sZW5ndGg+MD9mPWdbZy5sZW5ndGgtMV06Zj1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9oPWRbZC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBuZShNLEksTyxVKXtpZihNLnZpc2libGU9PT0hMSlyZXR1cm47aWYoTS5sYXllcnMudGVzdChJLmxheWVycykpe2lmKE0uaXNHcm91cClPPU0ucmVuZGVyT3JkZXI7ZWxzZSBpZihNLmlzTE9EKU0uYXV0b1VwZGF0ZT09PSEwJiZNLnVwZGF0ZShJKTtlbHNlIGlmKE0uaXNMaWdodClmLnB1c2hMaWdodChNKSxNLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhNKTtlbHNlIGlmKE0uaXNTcHJpdGUpe2lmKCFNLmZydXN0dW1DdWxsZWR8fFYuaW50ZXJzZWN0c1Nwcml0ZShNKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7THQudmlzaWJsZSYmaC5wdXNoKE0sQ3QsTHQsTyxsdC56LG51bGwpfX1lbHNlIGlmKChNLmlzTWVzaHx8TS5pc0xpbmV8fE0uaXNQb2ludHMpJiYoTS5pc1NraW5uZWRNZXNoJiZNLnNrZWxldG9uLmZyYW1lIT09c3QucmVuZGVyLmZyYW1lJiYoTS5za2VsZXRvbi51cGRhdGUoKSxNLnNrZWxldG9uLmZyYW1lPXN0LnJlbmRlci5mcmFtZSksIU0uZnJ1c3R1bUN1bGxlZHx8Vi5pbnRlcnNlY3RzT2JqZWN0KE0pKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMdCkpe2xldCBSdD1DdC5ncm91cHM7Zm9yKGxldCBHdD0wLHp0PVJ0Lmxlbmd0aDtHdDx6dDtHdCsrKXtsZXQgVXQ9UnRbR3RdLGllPUx0W1V0Lm1hdGVyaWFsSW5kZXhdO2llJiZpZS52aXNpYmxlJiZoLnB1c2goTSxDdCxpZSxPLGx0LnosVXQpfX1lbHNlIEx0LnZpc2libGUmJmgucHVzaChNLEN0LEx0LE8sbHQueixudWxsKX19bGV0IFR0PU0uY2hpbGRyZW47Zm9yKGxldCBDdD0wLEx0PVR0Lmxlbmd0aDtDdDxMdDtDdCsrKW5lKFR0W0N0XSxJLE8sVSl9ZnVuY3Rpb24gZW4oTSxJLE8sVSl7bGV0IFo9TS5vcGFxdWUsVHQ9TS50cmFuc21pc3NpdmUsQ3Q9TS50cmFuc3BhcmVudDtmLnNldHVwTGlnaHRzVmlldyhPKSxUdC5sZW5ndGg+MCYmeW4oWixJLE8pLFUmJkIudmlld3BvcnQoTC5jb3B5KFUpKSxaLmxlbmd0aD4wJiZEbyhaLEksTyksVHQubGVuZ3RoPjAmJkRvKFR0LEksTyksQ3QubGVuZ3RoPjAmJkRvKEN0LEksTyl9ZnVuY3Rpb24geW4oTSxJLE8pe2lmKEc9PT1udWxsKXtsZXQgQ3Q9bz09PSEwJiZTdC5pc1dlYkdMMj09PSEwP3NvOk5lO0c9bmV3IEN0KDEwMjQsMTAyNCx7Z2VuZXJhdGVNaXBtYXBzOiEwLHR5cGU6X3QuY29udmVydChVcikhPT1udWxsP1VyOmVpLG1pbkZpbHRlcjpMbCxtYWdGaWx0ZXI6ZmUsd3JhcFM6VmUsd3JhcFQ6VmUsdXNlUmVuZGVyVG9UZXh0dXJlOm10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KX1sZXQgVT14LmdldFJlbmRlclRhcmdldCgpO3guc2V0UmVuZGVyVGFyZ2V0KEcpLHguY2xlYXIoKTtsZXQgWj14LnRvbmVNYXBwaW5nO3gudG9uZU1hcHBpbmc9dGksRG8oTSxJLE8pLHgudG9uZU1hcHBpbmc9WixDLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KEcpLEMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEcpLHguc2V0UmVuZGVyVGFyZ2V0KFUpfWZ1bmN0aW9uIERvKE0sSSxPKXtsZXQgVT1JLmlzU2NlbmU9PT0hMD9JLm92ZXJyaWRlTWF0ZXJpYWw6bnVsbDtmb3IobGV0IFo9MCxUdD1NLmxlbmd0aDtaPFR0O1orKyl7bGV0IEN0PU1bWl0sTHQ9Q3Qub2JqZWN0LFJ0PUN0Lmdlb21ldHJ5LEd0PVU9PT1udWxsP0N0Lm1hdGVyaWFsOlUsenQ9Q3QuZ3JvdXA7THQubGF5ZXJzLnRlc3QoTy5sYXllcnMpJiZVMChMdCxJLE8sUnQsR3QsenQpfX1mdW5jdGlvbiBVMChNLEksTyxVLFosVHQpe00ub25CZWZvcmVSZW5kZXIoeCxJLE8sVSxaLFR0KSxNLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKE8ubWF0cml4V29ybGRJbnZlcnNlLE0ubWF0cml4V29ybGQpLE0ubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChNLm1vZGVsVmlld01hdHJpeCksWi5vbkJlZm9yZVJlbmRlcih4LEksTyxVLE0sVHQpLFoudHJhbnNwYXJlbnQ9PT0hMCYmWi5zaWRlPT09SHI/KFouc2lkZT1oZSxaLm5lZWRzVXBkYXRlPSEwLHgucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksWi5zaWRlPWVvLFoubmVlZHNVcGRhdGU9ITAseC5yZW5kZXJCdWZmZXJEaXJlY3QoTyxJLFUsWixNLFR0KSxaLnNpZGU9SHIpOngucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksTS5vbkFmdGVyUmVuZGVyKHgsSSxPLFUsWixUdCl9ZnVuY3Rpb24gT2woTSxJLE8pe0kuaXNTY2VuZSE9PSEwJiYoST1kdCk7bGV0IFU9bnQuZ2V0KE0pLFo9Zi5zdGF0ZS5saWdodHMsVHQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXksQ3Q9Wi5zdGF0ZS52ZXJzaW9uLEx0PWJ0LmdldFBhcmFtZXRlcnMoTSxaLnN0YXRlLFR0LEksTyksUnQ9YnQuZ2V0UHJvZ3JhbUNhY2hlS2V5KEx0KSxHdD1VLnByb2dyYW1zO1UuZW52aXJvbm1lbnQ9TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0kuZW52aXJvbm1lbnQ6bnVsbCxVLmZvZz1JLmZvZyxVLmVudk1hcD0oTS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0o6aikuZ2V0KE0uZW52TWFwfHxVLmVudmlyb25tZW50KSxHdD09PXZvaWQgMCYmKE0uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLEd0PW5ldyBNYXAsVS5wcm9ncmFtcz1HdCk7bGV0IHp0PUd0LmdldChSdCk7aWYoenQhPT12b2lkIDApe2lmKFUuY3VycmVudFByb2dyYW09PT16dCYmVS5saWdodHNTdGF0ZVZlcnNpb249PT1DdClyZXR1cm4gb2YoTSxMdCksenR9ZWxzZSBMdC51bmlmb3Jtcz1idC5nZXRVbmlmb3JtcyhNKSxNLm9uQnVpbGQoTyxMdCx4KSxNLm9uQmVmb3JlQ29tcGlsZShMdCx4KSx6dD1idC5hY3F1aXJlUHJvZ3JhbShMdCxSdCksR3Quc2V0KFJ0LHp0KSxVLnVuaWZvcm1zPUx0LnVuaWZvcm1zO2xldCBVdD1VLnVuaWZvcm1zOyghTS5pc1NoYWRlck1hdGVyaWFsJiYhTS5pc1Jhd1NoYWRlck1hdGVyaWFsfHxNLmNsaXBwaW5nPT09ITApJiYoVXQuY2xpcHBpbmdQbGFuZXM9RS51bmlmb3JtKSxvZihNLEx0KSxVLm5lZWRzTGlnaHRzPWswKE0pLFUubGlnaHRzU3RhdGVWZXJzaW9uPUN0LFUubmVlZHNMaWdodHMmJihVdC5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1aLnN0YXRlLmFtYmllbnQsVXQubGlnaHRQcm9iZS52YWx1ZT1aLnN0YXRlLnByb2JlLFV0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWwsVXQuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdyxVdC5zcG90TGlnaHRzLnZhbHVlPVouc3RhdGUuc3BvdCxVdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPVouc3RhdGUuc3BvdFNoYWRvdyxVdC5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1aLnN0YXRlLnJlY3RBcmVhLFV0Lmx0Y18xLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMxLFV0Lmx0Y18yLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMyLFV0LnBvaW50TGlnaHRzLnZhbHVlPVouc3RhdGUucG9pbnQsVXQucG9pbnRMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvdyxVdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPVouc3RhdGUuaGVtaSxVdC5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLFV0LmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsVXQuc3BvdFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXAsVXQuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsVXQucG9pbnRTaGFkb3dNYXAudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvd01hcCxVdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgaWU9enQuZ2V0VW5pZm9ybXMoKSxmaT1paS5zZXFXaXRoVmFsdWUoaWUuc2VxLFV0KTtyZXR1cm4gVS5jdXJyZW50UHJvZ3JhbT16dCxVLnVuaWZvcm1zTGlzdD1maSx6dH1mdW5jdGlvbiBvZihNLEkpe2xldCBPPW50LmdldChNKTtPLm91dHB1dEVuY29kaW5nPUkub3V0cHV0RW5jb2RpbmcsTy5pbnN0YW5jaW5nPUkuaW5zdGFuY2luZyxPLnNraW5uaW5nPUkuc2tpbm5pbmcsTy5tb3JwaFRhcmdldHM9SS5tb3JwaFRhcmdldHMsTy5tb3JwaE5vcm1hbHM9SS5tb3JwaE5vcm1hbHMsTy5tb3JwaFRhcmdldHNDb3VudD1JLm1vcnBoVGFyZ2V0c0NvdW50LE8ubnVtQ2xpcHBpbmdQbGFuZXM9SS5udW1DbGlwcGluZ1BsYW5lcyxPLm51bUludGVyc2VjdGlvbj1JLm51bUNsaXBJbnRlcnNlY3Rpb24sTy52ZXJ0ZXhBbHBoYXM9SS52ZXJ0ZXhBbHBoYXMsTy52ZXJ0ZXhUYW5nZW50cz1JLnZlcnRleFRhbmdlbnRzLE8udG9uZU1hcHBpbmc9SS50b25lTWFwcGluZ31mdW5jdGlvbiBCMChNLEksTyxVLFope0kuaXNTY2VuZSE9PSEwJiYoST1kdCksQy5yZXNldFRleHR1cmVVbml0cygpO2xldCBUdD1JLmZvZyxDdD1VLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SS5lbnZpcm9ubWVudDpudWxsLEx0PWI9PT1udWxsP3gub3V0cHV0RW5jb2Rpbmc6Yi5pc1hSUmVuZGVyVGFyZ2V0PT09ITA/Yi50ZXh0dXJlLmVuY29kaW5nOnJpLFJ0PShVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SjpqKS5nZXQoVS5lbnZNYXB8fEN0KSxHdD1VLnZlcnRleENvbG9ycz09PSEwJiYhIU8uYXR0cmlidXRlcy5jb2xvciYmTy5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx6dD0hIVUubm9ybWFsTWFwJiYhIU8uYXR0cmlidXRlcy50YW5nZW50LFV0PSEhTy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24saWU9ISFPLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsZmk9Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsWmk9VS50b25lTWFwcGVkP3gudG9uZU1hcHBpbmc6dGksT3Q9bnQuZ2V0KFUpLG5uPWYuc3RhdGUubGlnaHRzO2lmKFE9PT0hMCYmKGF0PT09ITB8fE0hPT1TKSl7bGV0IFplPU09PT1TJiZVLmlkPT09XztFLnNldFN0YXRlKFUsTSxaZSl9bGV0IGxlPSExO1UudmVyc2lvbj09PU90Ll9fdmVyc2lvbj8oT3QubmVlZHNMaWdodHMmJk90LmxpZ2h0c1N0YXRlVmVyc2lvbiE9PW5uLnN0YXRlLnZlcnNpb258fE90Lm91dHB1dEVuY29kaW5nIT09THR8fFouaXNJbnN0YW5jZWRNZXNoJiZPdC5pbnN0YW5jaW5nPT09ITF8fCFaLmlzSW5zdGFuY2VkTWVzaCYmT3QuaW5zdGFuY2luZz09PSEwfHxaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITF8fCFaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITB8fE90LmVudk1hcCE9PVJ0fHxVLmZvZyYmT3QuZm9nIT09VHR8fE90Lm51bUNsaXBwaW5nUGxhbmVzIT09dm9pZCAwJiYoT3QubnVtQ2xpcHBpbmdQbGFuZXMhPT1FLm51bVBsYW5lc3x8T3QubnVtSW50ZXJzZWN0aW9uIT09RS5udW1JbnRlcnNlY3Rpb24pfHxPdC52ZXJ0ZXhBbHBoYXMhPT1HdHx8T3QudmVydGV4VGFuZ2VudHMhPT16dHx8T3QubW9ycGhUYXJnZXRzIT09VXR8fE90Lm1vcnBoTm9ybWFscyE9PWllfHxPdC50b25lTWFwcGluZyE9PVppfHxTdC5pc1dlYkdMMj09PSEwJiZPdC5tb3JwaFRhcmdldHNDb3VudCE9PWZpKSYmKGxlPSEwKToobGU9ITAsT3QuX192ZXJzaW9uPVUudmVyc2lvbik7bGV0IHJuPU90LmN1cnJlbnRQcm9ncmFtO2xlPT09ITAmJihybj1PbChVLEksWikpO2xldCBJbz0hMSxzbj0hMSx2bj0hMSxfZT1ybi5nZXRVbmlmb3JtcygpLG5zPU90LnVuaWZvcm1zO2lmKEIudXNlUHJvZ3JhbShybi5wcm9ncmFtKSYmKElvPSEwLHNuPSEwLHZuPSEwKSxVLmlkIT09XyYmKF89VS5pZCxzbj0hMCksSW98fFMhPT1NKXtpZihfZS5zZXRWYWx1ZShrLCJwcm9qZWN0aW9uTWF0cml4IixNLnByb2plY3Rpb25NYXRyaXgpLFN0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJl9lLnNldFZhbHVlKGssImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKE0uZmFyKzEpL01hdGguTE4yKSksUyE9PU0mJihTPU0sc249ITAsdm49ITApLFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc01lc2hQaG9uZ01hdGVyaWFsfHxVLmlzTWVzaFRvb25NYXRlcmlhbHx8VS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxVLmVudk1hcCl7bGV0IFplPV9lLm1hcC5jYW1lcmFQb3NpdGlvbjtaZSE9PXZvaWQgMCYmWmUuc2V0VmFsdWUoayxsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oTS5tYXRyaXhXb3JsZCkpfShVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbCkmJl9lLnNldFZhbHVlKGssImlzT3J0aG9ncmFwaGljIixNLmlzT3J0aG9ncmFwaGljQ2FtZXJhPT09ITApLChVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc1NoYWRvd01hdGVyaWFsfHxaLmlzU2tpbm5lZE1lc2gpJiZfZS5zZXRWYWx1ZShrLCJ2aWV3TWF0cml4IixNLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoWi5pc1NraW5uZWRNZXNoKXtfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXgiKSxfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IFplPVouc2tlbGV0b247WmUmJihTdC5mbG9hdFZlcnRleFRleHR1cmVzPyhaZS5ib25lVGV4dHVyZT09PW51bGwmJlplLmNvbXB1dGVCb25lVGV4dHVyZSgpLF9lLnNldFZhbHVlKGssImJvbmVUZXh0dXJlIixaZS5ib25lVGV4dHVyZSxDKSxfZS5zZXRWYWx1ZShrLCJib25lVGV4dHVyZVNpemUiLFplLmJvbmVUZXh0dXJlU2l6ZSkpOl9lLnNldE9wdGlvbmFsKGssWmUsImJvbmVNYXRyaWNlcyIpKX1yZXR1cm4hIU8mJihPLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8Ty5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwKSYmcnQudXBkYXRlKFosTyxVLHJuKSwoc258fE90LnJlY2VpdmVTaGFkb3chPT1aLnJlY2VpdmVTaGFkb3cpJiYoT3QucmVjZWl2ZVNoYWRvdz1aLnJlY2VpdmVTaGFkb3csX2Uuc2V0VmFsdWUoaywicmVjZWl2ZVNoYWRvdyIsWi5yZWNlaXZlU2hhZG93KSksc24mJihfZS5zZXRWYWx1ZShrLCJ0b25lTWFwcGluZ0V4cG9zdXJlIix4LnRvbmVNYXBwaW5nRXhwb3N1cmUpLE90Lm5lZWRzTGlnaHRzJiZPMChucyx2biksVHQmJlUuZm9nJiZJdC5yZWZyZXNoRm9nVW5pZm9ybXMobnMsVHQpLEl0LnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKG5zLFUseSxYLEcpLGlpLnVwbG9hZChrLE90LnVuaWZvcm1zTGlzdCxucyxDKSksVS5pc1NoYWRlck1hdGVyaWFsJiZVLnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoaWkudXBsb2FkKGssT3QudW5pZm9ybXNMaXN0LG5zLEMpLFUudW5pZm9ybXNOZWVkVXBkYXRlPSExKSxVLmlzU3ByaXRlTWF0ZXJpYWwmJl9lLnNldFZhbHVlKGssImNlbnRlciIsWi5jZW50ZXIpLF9lLnNldFZhbHVlKGssIm1vZGVsVmlld01hdHJpeCIsWi5tb2RlbFZpZXdNYXRyaXgpLF9lLnNldFZhbHVlKGssIm5vcm1hbE1hdHJpeCIsWi5ub3JtYWxNYXRyaXgpLF9lLnNldFZhbHVlKGssIm1vZGVsTWF0cml4IixaLm1hdHJpeFdvcmxkKSxybn1mdW5jdGlvbiBPMChNLEkpe00uYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9SSxNLmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9SSxNLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPUksTS5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1JLE0ucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9SSxNLnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1JLE0uaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1JfWZ1bmN0aW9uIGswKE0pe3JldHVybiBNLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8TS5pc01lc2hUb29uTWF0ZXJpYWx8fE0uaXNNZXNoUGhvbmdNYXRlcmlhbHx8TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxNLmlzU2hhZG93TWF0ZXJpYWx8fE0uaXNTaGFkZXJNYXRlcmlhbCYmTS5saWdodHM9PT0hMH10aGlzLmdldEFjdGl2ZUN1YmVGYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG19LHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gcH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcz1mdW5jdGlvbihNLEksTyl7bnQuZ2V0KE0udGV4dHVyZSkuX193ZWJnbFRleHR1cmU9SSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPU87bGV0IFU9bnQuZ2V0KE0pO1UuX19oYXNFeHRlcm5hbFRleHR1cmVzPSEwLFUuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYoVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPU89PT12b2lkIDAsVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyfHxNLnVzZVJlbmRlclRvVGV4dHVyZSYmKGNvbnNvbGUud2FybigicmVuZGVyLXRvLXRleHR1cmUgZXh0ZW5zaW9uIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGFuIGV4dGVybmFsIHRleHR1cmUgd2FzIHByb3ZpZGVkIiksTS51c2VSZW5kZXJUb1RleHR1cmU9ITEsTS51c2VSZW5kZXJidWZmZXI9ITApKX0sdGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbihNLEkpe2xldCBPPW50LmdldChNKTtPLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1JLE8uX191c2VEZWZhdWx0RnJhbWVidWZmZXI9ST09PXZvaWQgMH0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oTSxJPTAsTz0wKXtiPU0sbT1JLHA9TztsZXQgVT0hMDtpZihNKXtsZXQgUnQ9bnQuZ2V0KE0pO1J0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyIT09dm9pZCAwPyhCLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxVPSExKTpSdC5fX3dlYmdsRnJhbWVidWZmZXI9PT12b2lkIDA/Qy5zZXR1cFJlbmRlclRhcmdldChNKTpSdC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJkMucmViaW5kVGV4dHVyZXMoTSxudC5nZXQoTS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlKX1sZXQgWj1udWxsLFR0PSExLEN0PSExO2lmKE0pe2xldCBSdD1NLnRleHR1cmU7KFJ0LmlzRGF0YVRleHR1cmUzRHx8UnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoQ3Q9ITApO2xldCBHdD1udC5nZXQoTSkuX193ZWJnbEZyYW1lYnVmZmVyO00uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KFo9R3RbSV0sVHQ9ITApOk0udXNlUmVuZGVyYnVmZmVyP1o9bnQuZ2V0KE0pLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpaPUd0LEwuY29weShNLnZpZXdwb3J0KSxBLmNvcHkoTS5zY2lzc29yKSxIPU0uc2Npc3NvclRlc3R9ZWxzZSBMLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxIPU47aWYoQi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsWikmJlN0LmRyYXdCdWZmZXJzJiZVJiZCLmRyYXdCdWZmZXJzKE0sWiksQi52aWV3cG9ydChMKSxCLnNjaXNzb3IoQSksQi5zZXRTY2lzc29yVGVzdChIKSxUdCl7bGV0IFJ0PW50LmdldChNLnRleHR1cmUpO2suZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrSSxSdC5fX3dlYmdsVGV4dHVyZSxPKX1lbHNlIGlmKEN0KXtsZXQgUnQ9bnQuZ2V0KE0udGV4dHVyZSksR3Q9SXx8MDtrLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LFJ0Ll9fd2ViZ2xUZXh0dXJlLE98fDAsR3QpfV89LTF9LHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihNLEksTyxVLFosVHQsQ3Qpe2lmKCEoTSYmTS5pc1dlYkdMUmVuZGVyVGFyZ2V0KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO3JldHVybn1sZXQgTHQ9bnQuZ2V0KE0pLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihNLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZDdCE9PXZvaWQgMCYmKEx0PUx0W0N0XSksTHQpe0IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEx0KTt0cnl7bGV0IFJ0PU0udGV4dHVyZSxHdD1SdC5mb3JtYXQsenQ9UnQudHlwZTtpZihHdCE9PVJlJiZfdC5jb252ZXJ0KEd0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBVdD16dD09PVVyJiYobXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8U3QuaXNXZWJHTDImJm10LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZih6dCE9PWVpJiZfdC5jb252ZXJ0KHp0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM4KSYmISh6dD09PVVpJiYoU3QuaXNXZWJHTDJ8fG10LmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKXx8bXQuaGFzKCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSkpJiYhVXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKTtyZXR1cm59ay5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT09PTM2MDUzP0k+PTAmJkk8PU0ud2lkdGgtVSYmTz49MCYmTzw9TS5oZWlnaHQtWiYmay5yZWFkUGl4ZWxzKEksTyxVLFosX3QuY29udmVydChHdCksX3QuY29udmVydCh6dCksVHQpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2xldCBSdD1iIT09bnVsbD9udC5nZXQoYikuX193ZWJnbEZyYW1lYnVmZmVyOm51bGw7Qi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsUnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPPTApe2lmKEkuaXNGcmFtZWJ1ZmZlclRleHR1cmUhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlKCkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIEZyYW1lYnVmZmVyVGV4dHVyZS4iKTtyZXR1cm59bGV0IFU9TWF0aC5wb3coMiwtTyksWj1NYXRoLmZsb29yKEkuaW1hZ2Uud2lkdGgqVSksVHQ9TWF0aC5mbG9vcihJLmltYWdlLmhlaWdodCpVKTtDLnNldFRleHR1cmUyRChJLDApLGsuY29weVRleFN1YkltYWdlMkQoMzU1MyxPLDAsMCxNLngsTS55LFosVHQpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPLFU9MCl7bGV0IFo9SS5pbWFnZS53aWR0aCxUdD1JLmltYWdlLmhlaWdodCxDdD1fdC5jb252ZXJ0KE8uZm9ybWF0KSxMdD1fdC5jb252ZXJ0KE8udHlwZSk7Qy5zZXRUZXh0dXJlMkQoTywwKSxrLnBpeGVsU3RvcmVpKDM3NDQwLE8uZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsTy5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsTy51bnBhY2tBbGlnbm1lbnQpLEkuaXNEYXRhVGV4dHVyZT9rLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksWixUdCxDdCxMdCxJLmltYWdlLmRhdGEpOkkuaXNDb21wcmVzc2VkVGV4dHVyZT9rLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsVSxNLngsTS55LEkubWlwbWFwc1swXS53aWR0aCxJLm1pcG1hcHNbMF0uaGVpZ2h0LEN0LEkubWlwbWFwc1swXS5kYXRhKTprLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksQ3QsTHQsSS5pbWFnZSksVT09PTAmJk8uZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKDM1NTMpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oTSxJLE8sVSxaPTApe2lmKHguaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBUdD1NLm1heC54LU0ubWluLngrMSxDdD1NLm1heC55LU0ubWluLnkrMSxMdD1NLm1heC56LU0ubWluLnorMSxSdD1fdC5jb252ZXJ0KFUuZm9ybWF0KSxHdD1fdC5jb252ZXJ0KFUudHlwZSksenQ7aWYoVS5pc0RhdGFUZXh0dXJlM0QpQy5zZXRUZXh0dXJlM0QoVSwwKSx6dD0zMjg3OTtlbHNlIGlmKFUuaXNEYXRhVGV4dHVyZTJEQXJyYXkpQy5zZXRUZXh0dXJlMkRBcnJheShVLDApLHp0PTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1rLnBpeGVsU3RvcmVpKDM3NDQwLFUuZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsVS5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsVS51bnBhY2tBbGlnbm1lbnQpO2xldCBVdD1rLmdldFBhcmFtZXRlcigzMzE0KSxpZT1rLmdldFBhcmFtZXRlcigzMjg3OCksZmk9ay5nZXRQYXJhbWV0ZXIoMzMxNiksWmk9ay5nZXRQYXJhbWV0ZXIoMzMxNSksT3Q9ay5nZXRQYXJhbWV0ZXIoMzI4NzcpLG5uPU8uaXNDb21wcmVzc2VkVGV4dHVyZT9PLm1pcG1hcHNbMF06Ty5pbWFnZTtrLnBpeGVsU3RvcmVpKDMzMTQsbm4ud2lkdGgpLGsucGl4ZWxTdG9yZWkoMzI4Nzgsbm4uaGVpZ2h0KSxrLnBpeGVsU3RvcmVpKDMzMTYsTS5taW4ueCksay5waXhlbFN0b3JlaSgzMzE1LE0ubWluLnkpLGsucGl4ZWxTdG9yZWkoMzI4NzcsTS5taW4ueiksTy5pc0RhdGFUZXh0dXJlfHxPLmlzRGF0YVRleHR1cmUzRD9rLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubi5kYXRhKTpPLmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksay5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCh6dCxaLEkueCxJLnksSS56LFR0LEN0LEx0LFJ0LG5uLmRhdGEpKTprLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubiksay5waXhlbFN0b3JlaSgzMzE0LFV0KSxrLnBpeGVsU3RvcmVpKDMyODc4LGllKSxrLnBpeGVsU3RvcmVpKDMzMTYsZmkpLGsucGl4ZWxTdG9yZWkoMzMxNSxaaSksay5waXhlbFN0b3JlaSgzMjg3NyxPdCksWj09PTAmJlUuZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKHp0KSxCLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihNKXtDLnNldFRleHR1cmUyRChNLDApLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXttPTAscD0wLGI9bnVsbCxCLnJlc2V0KCkseXQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfVZ0LnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIEp1PWNsYXNzIGV4dGVuZHMgVnR7fTtKdS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgaG89Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IGhvKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtoby5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBmbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGZ0KHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IGZvKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtmby5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIFlyPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07WXIucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIEdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9dG4oKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLHM9dGhpcy5zdHJpZGU7cjxzO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07R2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIHNlPW5ldyBULFdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9cj09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspc2UueD10aGlzLmdldFgoZSksc2UueT10aGlzLmdldFkoZSksc2Uuej10aGlzLmdldFooZSksc2UuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKXNlLng9dGhpcy5nZXRYKGUpLHNlLnk9dGhpcy5nZXRZKGUpLHNlLno9dGhpcy5nZXRaKGUpLHNlLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylzZS54PXRoaXMuZ2V0WChlKSxzZS55PXRoaXMuZ2V0WShlKSxzZS56PXRoaXMuZ2V0WihlKSxzZS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxzZS54LHNlLnksc2Uueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLHMpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1zLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJuIG5ldyBRdChuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IFdpKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6ZSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07V2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGZsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07ZmwucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIFJyLFdzPW5ldyBULExyPW5ldyBULFByPW5ldyBULERyPW5ldyBLLHFzPW5ldyBLLEEwPW5ldyB3dCxPYT1uZXcgVCxYcz1uZXcgVCxrYT1uZXcgVCxVZz1uZXcgSyxSdT1uZXcgSyxCZz1uZXcgSywkdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLFJyPT09dm9pZCAwKXtScj1uZXcgSHQ7bGV0IGU9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksaT1uZXcgR2koZSw1KTtSci5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxSci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgV2koaSwzLDAsITEpKSxSci5zZXRBdHRyaWJ1dGUoInV2IixuZXcgV2koaSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PVJyLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBmbCx0aGlzLmNlbnRlcj1uZXcgSyguNSwuNSl9cmF5Y2FzdCh0LGUpe3QuY2FtZXJhPT09bnVsbCYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLExyLnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxBMC5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxQci5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJnRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uPT09ITEmJkxyLm11bHRpcGx5U2NhbGFyKC1Qci56KTtsZXQgaT10aGlzLm1hdGVyaWFsLnJvdGF0aW9uLHIscztpIT09MCYmKHM9TWF0aC5jb3MoaSkscj1NYXRoLnNpbihpKSk7bGV0IG89dGhpcy5jZW50ZXI7SGEoT2Euc2V0KC0uNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKFhzLnNldCguNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKGthLnNldCguNSwuNSwwKSxQcixvLExyLHIscyksVWcuc2V0KDAsMCksUnUuc2V0KDEsMCksQmcuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoT2EsWHMsa2EsITEsV3MpO2lmKGE9PT1udWxsJiYoSGEoWHMuc2V0KC0uNSwuNSwwKSxQcixvLExyLHIscyksUnUuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShPYSxrYSxYcywhMSxXcyksYT09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhXcyk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpXcy5jbG9uZSgpLHV2OnJlLmdldFVWKFdzLE9hLFhzLGthLFVnLFJ1LEJnLG5ldyBLKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQuY2VudGVyIT09dm9pZCAwJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319OyR1LnByb3RvdHlwZS5pc1Nwcml0ZT0hMDtmdW5jdGlvbiBIYShuLHQsZSxpLHIscyl7RHIuc3ViVmVjdG9ycyhuLGUpLmFkZFNjYWxhciguNSkubXVsdGlwbHkoaSksciE9PXZvaWQgMD8ocXMueD1zKkRyLngtcipEci55LHFzLnk9cipEci54K3MqRHIueSk6cXMuY29weShEciksbi5jb3B5KHQpLG4ueCs9cXMueCxuLnkrPXFzLnksbi5hcHBseU1hdHJpeDQoQTApfXZhciBPZz1uZXcgVCxrZz1uZXcgV3QsSGc9bmV3IFd0LE5FPW5ldyBULFZnPW5ldyB3dCxkbD1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNraW5uZWRNZXNoIix0aGlzLmJpbmRNb2RlPSJhdHRhY2hlZCIsdGhpcy5iaW5kTWF0cml4PW5ldyB3dCx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyB3dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQsZSl7dGhpcy5za2VsZXRvbj10LGU9PT12b2lkIDAmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksZT10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShlKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoZSkuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7bGV0IHQ9bmV3IFd0LGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBpPTAscj1lLmNvdW50O2k8cjtpKyspe3QueD1lLmdldFgoaSksdC55PWUuZ2V0WShpKSx0Lno9ZS5nZXRaKGkpLHQudz1lLmdldFcoaSk7bGV0IHM9MS90Lm1hbmhhdHRhbkxlbmd0aCgpO3MhPT0xLzA/dC5tdWx0aXBseVNjYWxhcihzKTp0LnNldCgxLDAsMCwwKSxlLnNldFhZWlcoaSx0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmJpbmRNb2RlPT09ImF0dGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6dGhpcy5iaW5kTW9kZT09PSJkZXRhY2hlZCI/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxlKXtsZXQgaT10aGlzLnNrZWxldG9uLHI9dGhpcy5nZW9tZXRyeTtrZy5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luSW5kZXgsdCksSGcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxPZy5jb3B5KGUpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLGUuc2V0KDAsMCwwKTtmb3IobGV0IHM9MDtzPDQ7cysrKXtsZXQgbz1IZy5nZXRDb21wb25lbnQocyk7aWYobyE9PTApe2xldCBhPWtnLmdldENvbXBvbmVudChzKTtWZy5tdWx0aXBseU1hdHJpY2VzKGkuYm9uZXNbYV0ubWF0cml4V29ybGQsaS5ib25lSW52ZXJzZXNbYV0pLGUuYWRkU2NhbGVkVmVjdG9yKE5FLmNvcHkoT2cpLmFwcGx5TWF0cml4NChWZyksbyl9fXJldHVybiBlLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19O2RsLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwO3ZhciBLdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX07S3UucHJvdG90eXBlLmlzQm9uZT0hMDt2YXIgUXU9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyLHMsbyxhLGwsYz1mZSx1PWZlLGgsZil7c3VwZXIobnVsbCxvLGEsbCxjLHUscixzLGgsZiksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9dSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtRdS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgcG89Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSxyPTEpe3R5cGVvZiBpPT0ibnVtYmVyIiYmKHI9aSxpPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LGUsaSksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXJ9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cG8ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBHZz1uZXcgd3QsV2c9bmV3IHd0LFZhPVtdLFlzPW5ldyBvZSxqdT1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IHBvKG5ldyBGbG9hdDMyQXJyYXkoaSoxNiksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9aSx0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksdC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfWdldE1hdHJpeEF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX1yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5tYXRyaXhXb3JsZCxyPXRoaXMuY291bnQ7aWYoWXMuZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSxZcy5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLFlzLm1hdGVyaWFsIT09dm9pZCAwKWZvcihsZXQgcz0wO3M8cjtzKyspe3RoaXMuZ2V0TWF0cml4QXQocyxHZyksV2cubXVsdGlwbHlNYXRyaWNlcyhpLEdnKSxZcy5tYXRyaXhXb3JsZD1XZyxZcy5yYXljYXN0KHQsVmEpO2ZvcihsZXQgbz0wLGE9VmEubGVuZ3RoO288YTtvKyspe2xldCBsPVZhW29dO2wuaW5zdGFuY2VJZD1zLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfVZhLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcG8obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2p1LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIHpuPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O3puLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBxZz1uZXcgVCxYZz1uZXcgVCxZZz1uZXcgd3QsTHU9bmV3IG9pLEdhPW5ldyBzaSxtbz1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHpuKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVswXTtmb3IobGV0IHI9MSxzPWUuY291bnQ7cjxzO3IrKylxZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsci0xKSxYZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9cWcuZGlzdGFuY2VUbyhYZyk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGVlKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsbz1pLmRyYXdSYW5nZTtpZihpLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxHYS5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLEdhLmFwcGx5TWF0cml4NChyKSxHYS5yYWRpdXMrPXMsdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShHYSk9PT0hMSlyZXR1cm47WWcuY29weShyKS5pbnZlcnQoKSxMdS5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWWcpO2xldCBhPXMvKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmEsYz1uZXcgVCx1PW5ldyBULGg9bmV3IFQsZj1uZXcgVCxkPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGc9aS5pbmRleCx2PWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihnIT09bnVsbCl7bGV0IG09TWF0aC5tYXgoMCxvLnN0YXJ0KSxwPU1hdGgubWluKGcuY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGI9bSxfPXAtMTtiPF87Yis9ZCl7bGV0IFM9Zy5nZXRYKGIpLEw9Zy5nZXRYKGIrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKHYsUyksdS5mcm9tQnVmZmVyQXR0cmlidXRlKHYsTCksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBIPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0g8dC5uZWFyfHxIPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkgscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCBtPU1hdGgubWF4KDAsby5zdGFydCkscD1NYXRoLm1pbih2LmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBiPW0sXz1wLTE7YjxfO2IrPWQpe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIrMSksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBMPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0w8dC5uZWFyfHxMPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkwscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX19ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX07bW8ucHJvdG90eXBlLmlzTGluZT0hMDt2YXIgWmc9bmV3IFQsSmc9bmV3IFQsZ289Y2xhc3MgZXh0ZW5kcyBtb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVtdO2ZvcihsZXQgcj0wLHM9ZS5jb3VudDtyPHM7cis9MilaZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksSmcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT1yPT09MD8wOmlbci0xXSxpW3IrMV09aVtyXStaZy5kaXN0YW5jZVRvKEpnKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgZWUoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fTtnby5wcm90b3R5cGUuaXNMaW5lU2VnbWVudHM9ITA7dmFyIHRoPWNsYXNzIGV4dGVuZHMgbW97Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZUxvb3AifX07dGgucHJvdG90eXBlLmlzTGluZUxvb3A9ITA7dmFyIHBsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O3BsLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO3ZhciAkZz1uZXcgd3QsZWg9bmV3IG9pLFdhPW5ldyBzaSxxYT1uZXcgVCxuaD1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHBsKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxvPWkuZHJhd1JhbmdlO2lmKGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFdhLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksV2EuYXBwbHlNYXRyaXg0KHIpLFdhLnJhZGl1cys9cyx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKFdhKT09PSExKXJldHVybjskZy5jb3B5KHIpLmludmVydCgpLGVoLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NCgkZyk7bGV0IGE9cy8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPWEqYTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPWkuaW5kZXgsaD1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihjLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspe2xldCB2PWMuZ2V0WChnKTtxYS5mcm9tQnVmZmVyQXR0cmlidXRlKGgsdiksS2cocWEsdixsLHIsdCxlLHRoaXMpfX1lbHNle2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihoLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspcWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShoLGcpLEtnKHFhLGcsbCxyLHQsZSx0aGlzKX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtuaC5wcm90b3R5cGUuaXNQb2ludHM9ITA7ZnVuY3Rpb24gS2cobix0LGUsaSxyLHMsbyl7bGV0IGE9ZWguZGlzdGFuY2VTcVRvUG9pbnQobik7aWYoYTxlKXtsZXQgbD1uZXcgVDtlaC5jbG9zZXN0UG9pbnRUb1BvaW50KG4sbCksbC5hcHBseU1hdHJpeDQoaSk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxyLm5lYXJ8fGM+ci5mYXIpcmV0dXJuO3MucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChhKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDpvfSl9fXZhciBpaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjKXtzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyksdGhpcy5taW5GaWx0ZXI9byE9PXZvaWQgMD9vOmJlLHRoaXMubWFnRmlsdGVyPXMhPT12b2lkIDA/czpiZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzO2Z1bmN0aW9uIGgoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX0icmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soaCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtsZXQgdD10aGlzLmltYWdlOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQ9PT0hMSYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fTtpaC5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITA7dmFyIHJoPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHt3aWR0aDp0LGhlaWdodDplfSksdGhpcy5mb3JtYXQ9aSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07cmgucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlPSEwO3ZhciBzaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjLHUsaCxmKXtzdXBlcihudWxsLG8sYSxsLGMsdSxyLHMsaCxmKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07c2gucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7dmFyIG9oPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMpe3N1cGVyKHQsZSxpLHIscyxvLGEsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07b2gucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgWnI9Y2xhc3MgZXh0ZW5kcyBIdHtjb25zdHJ1Y3Rvcih0PTEsZT04LGk9MCxyPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDppLHRoZXRhTGVuZ3RoOnJ9LGU9TWF0aC5tYXgoMyxlKTtsZXQgcz1bXSxvPVtdLGE9W10sbD1bXSxjPW5ldyBULHU9bmV3IEs7by5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PWU7aCsrLGYrPTMpe2xldCBkPWkraC9lKnI7Yy54PXQqTWF0aC5jb3MoZCksYy55PXQqTWF0aC5zaW4oZCksby5wdXNoKGMueCxjLnksYy56KSxhLnB1c2goMCwwLDEpLHUueD0ob1tmXS90KzEpLzIsdS55PShvW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1lO2grKylzLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWnIodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fTt2YXIgU2s9bmV3IFQsRWs9bmV3IFQsVGs9bmV3IFQsQWs9bmV3IHJlO3ZhciBGZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChpLGUpfWdldFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiBlfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50QXQoaS90KSk7cmV0dXJuIGV9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgZT1bXSxpLHI9dGhpcy5nZXRQb2ludCgwKSxzPTA7ZS5wdXNoKDApO2ZvcihsZXQgbz0xO288PXQ7bysrKWk9dGhpcy5nZXRQb2ludChvL3QpLHMrPWkuZGlzdGFuY2VUbyhyKSxlLnB1c2gocykscj1pO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1lLGV9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxlKXtsZXQgaT10aGlzLmdldExlbmd0aHMoKSxyPTAscz1pLmxlbmd0aCxvO2U/bz1lOm89dCppW3MtMV07bGV0IGE9MCxsPXMtMSxjO2Zvcig7YTw9bDspaWYocj1NYXRoLmZsb29yKGErKGwtYSkvMiksYz1pW3JdLW8sYzwwKWE9cisxO2Vsc2UgaWYoYz4wKWw9ci0xO2Vsc2V7bD1yO2JyZWFrfWlmKHI9bCxpW3JdPT09bylyZXR1cm4gci8ocy0xKTtsZXQgdT1pW3JdLGY9aVtyKzFdLXUsZD0oby11KS9mO3JldHVybihyK2QpLyhzLTEpfWdldFRhbmdlbnQodCxlKXtsZXQgcj10LTFlLTQscz10KzFlLTQ7cjwwJiYocj0wKSxzPjEmJihzPTEpO2xldCBvPXRoaXMuZ2V0UG9pbnQociksYT10aGlzLmdldFBvaW50KHMpLGw9ZXx8KG8uaXNWZWN0b3IyP25ldyBLOm5ldyBUKTtyZXR1cm4gbC5jb3B5KGEpLnN1YihvKS5ub3JtYWxpemUoKSxsfWdldFRhbmdlbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChpLGUpfWNvbXB1dGVGcmVuZXRGcmFtZXModCxlKXtsZXQgaT1uZXcgVCxyPVtdLHM9W10sbz1bXSxhPW5ldyBULGw9bmV3IHd0O2ZvcihsZXQgZD0wO2Q8PXQ7ZCsrKXtsZXQgZz1kL3Q7cltkXT10aGlzLmdldFRhbmdlbnRBdChnLG5ldyBUKX1zWzBdPW5ldyBULG9bMF09bmV3IFQ7bGV0IGM9TnVtYmVyLk1BWF9WQUxVRSx1PU1hdGguYWJzKHJbMF0ueCksaD1NYXRoLmFicyhyWzBdLnkpLGY9TWF0aC5hYnMoclswXS56KTt1PD1jJiYoYz11LGkuc2V0KDEsMCwwKSksaDw9YyYmKGM9aCxpLnNldCgwLDEsMCkpLGY8PWMmJmkuc2V0KDAsMCwxKSxhLmNyb3NzVmVjdG9ycyhyWzBdLGkpLm5vcm1hbGl6ZSgpLHNbMF0uY3Jvc3NWZWN0b3JzKHJbMF0sYSksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxzWzBdKTtmb3IobGV0IGQ9MTtkPD10O2QrKyl7aWYoc1tkXT1zW2QtMV0uY2xvbmUoKSxvW2RdPW9bZC0xXS5jbG9uZSgpLGEuY3Jvc3NWZWN0b3JzKHJbZC0xXSxyW2RdKSxhLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXthLm5vcm1hbGl6ZSgpO2xldCBnPU1hdGguYWNvcyhJZShyW2QtMV0uZG90KHJbZF0pLC0xLDEpKTtzW2RdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoYSxnKSl9b1tkXS5jcm9zc1ZlY3RvcnMocltkXSxzW2RdKX1pZihlPT09ITApe2xldCBkPU1hdGguYWNvcyhJZShzWzBdLmRvdChzW3RdKSwtMSwxKSk7ZC89dCxyWzBdLmRvdChhLmNyb3NzVmVjdG9ycyhzWzBdLHNbdF0pKT4wJiYoZD0tZCk7Zm9yKGxldCBnPTE7Zzw9dDtnKyspc1tnXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHJbZ10sZCpnKSksb1tnXS5jcm9zc1ZlY3RvcnMocltnXSxzW2ddKX1yZXR1cm57dGFuZ2VudHM6cixub3JtYWxzOnMsYmlub3JtYWxzOm99fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O3JldHVybiB0LmFyY0xlbmd0aERpdmlzaW9ucz10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyx0LnR5cGU9dGhpcy50eXBlLHR9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSxKcj1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0xLHI9MSxzPTAsbz1NYXRoLlBJKjIsYT0hMSxsPTApe3N1cGVyKCksdGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiLHRoaXMuYVg9dCx0aGlzLmFZPWUsdGhpcy54UmFkaXVzPWksdGhpcy55UmFkaXVzPXIsdGhpcy5hU3RhcnRBbmdsZT1zLHRoaXMuYUVuZEFuZ2xlPW8sdGhpcy5hQ2xvY2t3aXNlPWEsdGhpcy5hUm90YXRpb249bH1nZXRQb2ludCh0LGUpe2xldCBpPWV8fG5ldyBLLHI9TWF0aC5QSSoyLHM9dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxvPU1hdGguYWJzKHMpPE51bWJlci5FUFNJTE9OO2Zvcig7czwwOylzKz1yO2Zvcig7cz5yOylzLT1yO3M8TnVtYmVyLkVQU0lMT04mJihvP3M9MDpzPXIpLHRoaXMuYUNsb2Nrd2lzZT09PSEwJiYhbyYmKHM9PT1yP3M9LXI6cz1zLXIpO2xldCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpzLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZih0aGlzLmFSb3RhdGlvbiE9PTApe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxoPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxmPWwtdGhpcy5hWCxkPWMtdGhpcy5hWTtsPWYqdS1kKmgrdGhpcy5hWCxjPWYqaCtkKnUrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtKci5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIG1sPWNsYXNzIGV4dGVuZHMgSnJ7Y29uc3RydWN0b3IodCxlLGkscixzLG8pe3N1cGVyKHQsZSxpLGkscixzLG8pLHRoaXMudHlwZT0iQXJjQ3VydmUifX07bWwucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7ZnVuY3Rpb24gdGYoKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIocyxvLGEsbCl7bj1zLHQ9YSxlPS0zKnMrMypvLTIqYS1sLGk9MipzLTIqbythK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyl7cihvLGEsYyooYS1zKSxjKihsLW8pKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyx1LGgpe2xldCBmPShvLXMpL2MtKGEtcykvKGMrdSkrKGEtbykvdSxkPShhLW8pL3UtKGwtbykvKHUraCkrKGwtYSkvaDtmKj11LGQqPXUscihvLGEsZixkKX0sY2FsYzpmdW5jdGlvbihzKXtsZXQgbz1zKnMsYT1vKnM7cmV0dXJuIG4rdCpzK2UqbytpKmF9fX12YXIgWGE9bmV3IFQsUHU9bmV3IHRmLER1PW5ldyB0ZixJdT1uZXcgdGYsZ2w9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PVtdLGU9ITEsaT0iY2VudHJpcGV0YWwiLHI9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPWUsdGhpcy5jdXJ2ZVR5cGU9aSx0aGlzLnRlbnNpb249cn1nZXRQb2ludCh0LGU9bmV3IFQpe2xldCBpPWUscj10aGlzLnBvaW50cyxzPXIubGVuZ3RoLG89KHMtKHRoaXMuY2xvc2VkPzA6MSkpKnQsYT1NYXRoLmZsb29yKG8pLGw9by1hO3RoaXMuY2xvc2VkP2ErPWE+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGEpL3MpKzEpKnM6bD09PTAmJmE9PT1zLTEmJihhPXMtMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fGE+MD9jPXJbKGEtMSklc106KFhhLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1YYSk7bGV0IGg9clthJXNdLGY9clsoYSsxKSVzXTtpZih0aGlzLmNsb3NlZHx8YSsyPHM/dT1yWyhhKzIpJXNdOihYYS5zdWJWZWN0b3JzKHJbcy0xXSxyW3MtMl0pLmFkZChyW3MtMV0pLHU9WGEpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBkPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxnPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCksZCkseD1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLGQpLHY9TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxkKTt4PDFlLTQmJih4PTEpLGc8MWUtNCYmKGc9eCksdjwxZS00JiYodj14KSxQdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LGgueCxmLngsdS54LGcseCx2KSxEdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGgueSxmLnksdS55LGcseCx2KSxJdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGcseCx2KX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoUHUuaW5pdENhdG11bGxSb20oYy54LGgueCxmLngsdS54LHRoaXMudGVuc2lvbiksRHUuaW5pdENhdG11bGxSb20oYy55LGgueSxmLnksdS55LHRoaXMudGVuc2lvbiksSXUuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBpLnNldChQdS5jYWxjKGwpLER1LmNhbGMobCksSXUuY2FsYyhsKSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChyLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBUKCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07Z2wucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiBRZyhuLHQsZSxpLHIpe2xldCBzPShpLXQpKi41LG89KHItZSkqLjUsYT1uKm4sbD1uKmE7cmV0dXJuKDIqZS0yKmkrcytvKSpsKygtMyplKzMqaS0yKnMtbykqYStzKm4rZX1mdW5jdGlvbiBGRShuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9ZnVuY3Rpb24gekUobix0KXtyZXR1cm4gMiooMS1uKSpuKnR9ZnVuY3Rpb24gVUUobix0KXtyZXR1cm4gbipuKnR9ZnVuY3Rpb24ganMobix0LGUsaSl7cmV0dXJuIEZFKG4sdCkrekUobixlKStVRShuLGkpfWZ1bmN0aW9uIEJFKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqZSp0fWZ1bmN0aW9uIE9FKG4sdCl7bGV0IGU9MS1uO3JldHVybiAzKmUqZSpuKnR9ZnVuY3Rpb24ga0Uobix0KXtyZXR1cm4gMyooMS1uKSpuKm4qdH1mdW5jdGlvbiBIRShuLHQpe3JldHVybiBuKm4qbip0fWZ1bmN0aW9uIHRvKG4sdCxlLGkscil7cmV0dXJuIEJFKG4sdCkrT0UobixlKStrRShuLGkpK0hFKG4scil9dmFyIHhvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEsscj1uZXcgSyl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IEspe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldCh0byh0LHIueCxzLngsby54LGEueCksdG8odCxyLnkscy55LG8ueSxhLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O3hvLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIHhsPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgVCxlPW5ldyBULGk9bmV3IFQscj1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aSx0aGlzLnYzPXJ9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gaS5zZXQodG8odCxyLngscy54LG8ueCxhLngpLHRvKHQsci55LHMueSxvLnksYS55KSx0byh0LHIueixzLnosby56LGEueikpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07eGwucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7dmFyICRyPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWdldFRhbmdlbnQodCxlKXtsZXQgaT1lfHxuZXcgSztyZXR1cm4gaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319OyRyLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYWg9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgVCl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHlvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEspe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5by5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDt2YXIgeWw9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQsaT1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSxqcyh0LHIueixzLnosby56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5bC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTM9ITA7dmFyIHZvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwbGluZUN1cnZlIix0aGlzLnBvaW50cz10fWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLHM9KHIubGVuZ3RoLTEpKnQsbz1NYXRoLmZsb29yKHMpLGE9cy1vLGw9cltvPT09MD9vOm8tMV0sYz1yW29dLHU9cltvPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTpvKzFdLGg9cltvPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTpvKzJdO3JldHVybiBpLnNldChRZyhhLGwueCxjLngsdS54LGgueCksUWcoYSxsLnksYy55LHUueSxoLnkpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChuZXcgSygpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTt2by5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgQzA9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bWwsQ2F0bXVsbFJvbUN1cnZlMzpnbCxDdWJpY0JlemllckN1cnZlOnhvLEN1YmljQmV6aWVyQ3VydmUzOnhsLEVsbGlwc2VDdXJ2ZTpKcixMaW5lQ3VydmU6JHIsTGluZUN1cnZlMzphaCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp5byxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6eWwsU3BsaW5lQ3VydmU6dm99KSxsaD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3ICRyKGUsdCkpfWdldFBvaW50KHQsZSl7bGV0IGk9dCp0aGlzLmdldExlbmd0aCgpLHI9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxzPTA7Zm9yKDtzPHIubGVuZ3RoOyl7aWYocltzXT49aSl7bGV0IG89cltzXS1pLGE9dGhpcy5jdXJ2ZXNbc10sbD1hLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLW8vbDtyZXR1cm4gYS5nZXRQb2ludEF0KGMsZSl9cysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLGU9MDtmb3IobGV0IGk9MCxyPXRoaXMuY3VydmVzLmxlbmd0aDtpPHI7aSsrKWUrPXRoaXMuY3VydmVzW2ldLmdldExlbmd0aCgpLHQucHVzaChlKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKSxlfWdldFBvaW50cyh0PTEyKXtsZXQgZT1bXSxpO2ZvcihsZXQgcj0wLHM9dGhpcy5jdXJ2ZXM7cjxzLmxlbmd0aDtyKyspe2xldCBvPXNbcl0sYT1vJiZvLmlzRWxsaXBzZUN1cnZlP3QqMjpvJiYoby5pc0xpbmVDdXJ2ZXx8by5pc0xpbmVDdXJ2ZTMpPzE6byYmby5pc1NwbGluZUN1cnZlP3Qqby5wb2ludHMubGVuZ3RoOnQsbD1vLmdldFBvaW50cyhhKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpJiZpLmVxdWFscyh1KXx8KGUucHVzaCh1KSxpPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goci5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLmN1cnZlc1tlXTt0LmN1cnZlcy5wdXNoKHIudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2gobmV3IEMwW3IudHlwZV0oKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxfbz1jbGFzcyBleHRlbmRzIGxoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgSyx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IGU9MSxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5saW5lVG8odFtlXS54LHRbZV0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9bGluZVRvKHQsZSl7bGV0IGk9bmV3ICRyKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEsodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBzPW5ldyB5byh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBLKHQsZSksbmV3IEsoaSxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gocyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KGksciksdGhpc31iZXppZXJDdXJ2ZVRvKHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgeG8odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSyh0LGUpLG5ldyBLKGksciksbmV3IEsocyxvKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goYSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHMsbyksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCBlPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksaT1uZXcgdm8oZSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5jdXJyZW50UG9pbnQueCxsPXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzYXJjKHQrYSxlK2wsaSxyLHMsbyksdGhpc31hYnNhcmModCxlLGkscixzLG8pe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxlLGksaSxyLHMsbyksdGhpc31lbGxpcHNlKHQsZSxpLHIscyxvLGEsbCl7bGV0IGM9dGhpcy5jdXJyZW50UG9pbnQueCx1PXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K2MsZSt1LGkscixzLG8sYSxsKSx0aGlzfWFic2VsbGlwc2UodCxlLGkscixzLG8sYSxsKXtsZXQgYz1uZXcgSnIodCxlLGkscixzLG8sYSxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IGg9Yy5nZXRQb2ludCgwKTtoLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGgueCxoLnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IHU9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weSh1KSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LFVuPWNsYXNzIGV4dGVuZHMgX297Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPXRuKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPXRoaXMuaG9sZXMubGVuZ3RoO2k8cjtpKyspZVtpXT10aGlzLmhvbGVzW2ldLmdldFBvaW50cyh0KTtyZXR1cm4gZX1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuaG9sZXNbZV07dGhpcy5ob2xlcy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5ob2xlc1tlXTt0LmhvbGVzLnB1c2goci50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2gobmV3IF9vKCkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sVkU9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKG4sdCxlPTIpe2xldCBpPXQmJnQubGVuZ3RoLHI9aT90WzBdKmU6bi5sZW5ndGgscz1SMChuLDAscixlLCEwKSxvPVtdO2lmKCFzfHxzLm5leHQ9PT1zLnByZXYpcmV0dXJuIG87bGV0IGEsbCxjLHUsaCxmLGQ7aWYoaSYmKHM9WUUobix0LHMsZSkpLG4ubGVuZ3RoPjgwKmUpe2E9Yz1uWzBdLGw9dT1uWzFdO2ZvcihsZXQgZz1lO2c8cjtnKz1lKWg9bltnXSxmPW5bZysxXSxoPGEmJihhPWgpLGY8bCYmKGw9ZiksaD5jJiYoYz1oKSxmPnUmJih1PWYpO2Q9TWF0aC5tYXgoYy1hLHUtbCksZD1kIT09MD8xL2Q6MH1yZXR1cm4gd28ocyxvLGUsYSxsLGQpLG99fTtmdW5jdGlvbiBSMChuLHQsZSxpLHIpe2xldCBzLG87aWYocj09PXJUKG4sdCxlLGkpPjApZm9yKHM9dDtzPGU7cys9aSlvPWpnKHMsbltzXSxuW3MrMV0sbyk7ZWxzZSBmb3Iocz1lLWk7cz49dDtzLT1pKW89amcocyxuW3NdLG5bcysxXSxvKTtyZXR1cm4gbyYmRGwobyxvLm5leHQpJiYoYm8obyksbz1vLm5leHQpLG99ZnVuY3Rpb24gbGkobix0KXtpZighbilyZXR1cm4gbjt0fHwodD1uKTtsZXQgZT1uLGk7ZG8gaWYoaT0hMSwhZS5zdGVpbmVyJiYoRGwoZSxlLm5leHQpfHx0ZShlLnByZXYsZSxlLm5leHQpPT09MCkpe2lmKGJvKGUpLGU9dD1lLnByZXYsZT09PWUubmV4dClicmVhaztpPSEwfWVsc2UgZT1lLm5leHQ7d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIHdvKG4sdCxlLGkscixzLG8pe2lmKCFuKXJldHVybjshbyYmcyYmUUUobixpLHIscyk7bGV0IGE9bixsLGM7Zm9yKDtuLnByZXYhPT1uLm5leHQ7KXtpZihsPW4ucHJldixjPW4ubmV4dCxzP1dFKG4saSxyLHMpOkdFKG4pKXt0LnB1c2gobC5pL2UpLHQucHVzaChuLmkvZSksdC5wdXNoKGMuaS9lKSxibyhuKSxuPWMubmV4dCxhPWMubmV4dDtjb250aW51ZX1pZihuPWMsbj09PWEpe28/bz09PTE/KG49cUUobGkobiksdCxlKSx3byhuLHQsZSxpLHIscywyKSk6bz09PTImJlhFKG4sdCxlLGkscixzKTp3byhsaShuKSx0LGUsaSxyLHMsMSk7YnJlYWt9fX1mdW5jdGlvbiBHRShuKXtsZXQgdD1uLnByZXYsZT1uLGk9bi5uZXh0O2lmKHRlKHQsZSxpKT49MClyZXR1cm4hMTtsZXQgcj1uLm5leHQubmV4dDtmb3IoO3IhPT1uLnByZXY7KXtpZih6cih0LngsdC55LGUueCxlLnksaS54LGkueSxyLngsci55KSYmdGUoci5wcmV2LHIsci5uZXh0KT49MClyZXR1cm4hMTtyPXIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBXRShuLHQsZSxpKXtsZXQgcj1uLnByZXYscz1uLG89bi5uZXh0O2lmKHRlKHIscyxvKT49MClyZXR1cm4hMTtsZXQgYT1yLng8cy54P3IueDxvLng/ci54Om8ueDpzLng8by54P3MueDpvLngsbD1yLnk8cy55P3IueTxvLnk/ci55Om8ueTpzLnk8by55P3MueTpvLnksYz1yLng+cy54P3IueD5vLng/ci54Om8ueDpzLng+by54P3MueDpvLngsdT1yLnk+cy55P3IueT5vLnk/ci55Om8ueTpzLnk+by55P3MueTpvLnksaD1jaChhLGwsdCxlLGkpLGY9Y2goYyx1LHQsZSxpKSxkPW4ucHJldlosZz1uLm5leHRaO2Zvcig7ZCYmZC56Pj1oJiZnJiZnLno8PWY7KXtpZihkIT09bi5wcmV2JiZkIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxkLngsZC55KSYmdGUoZC5wcmV2LGQsZC5uZXh0KT49MHx8KGQ9ZC5wcmV2WixnIT09bi5wcmV2JiZnIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxnLngsZy55KSYmdGUoZy5wcmV2LGcsZy5uZXh0KT49MCkpcmV0dXJuITE7Zz1nLm5leHRafWZvcig7ZCYmZC56Pj1oOyl7aWYoZCE9PW4ucHJldiYmZCE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZC54LGQueSkmJnRlKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLnByZXZafWZvcig7ZyYmZy56PD1mOyl7aWYoZyE9PW4ucHJldiYmZyE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZy54LGcueSkmJnRlKGcucHJldixnLGcubmV4dCk+PTApcmV0dXJuITE7Zz1nLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHFFKG4sdCxlKXtsZXQgaT1uO2Rve2xldCByPWkucHJldixzPWkubmV4dC5uZXh0OyFEbChyLHMpJiZMMChyLGksaS5uZXh0LHMpJiZNbyhyLHMpJiZNbyhzLHIpJiYodC5wdXNoKHIuaS9lKSx0LnB1c2goaS5pL2UpLHQucHVzaChzLmkvZSksYm8oaSksYm8oaS5uZXh0KSxpPW49cyksaT1pLm5leHR9d2hpbGUoaSE9PW4pO3JldHVybiBsaShpKX1mdW5jdGlvbiBYRShuLHQsZSxpLHIscyl7bGV0IG89bjtkb3tsZXQgYT1vLm5leHQubmV4dDtmb3IoO2EhPT1vLnByZXY7KXtpZihvLmkhPT1hLmkmJmVUKG8sYSkpe2xldCBsPVAwKG8sYSk7bz1saShvLG8ubmV4dCksbD1saShsLGwubmV4dCksd28obyx0LGUsaSxyLHMpLHdvKGwsdCxlLGkscixzKTtyZXR1cm59YT1hLm5leHR9bz1vLm5leHR9d2hpbGUobyE9PW4pfWZ1bmN0aW9uIFlFKG4sdCxlLGkpe2xldCByPVtdLHMsbyxhLGwsYztmb3Iocz0wLG89dC5sZW5ndGg7czxvO3MrKylhPXRbc10qaSxsPXM8by0xP3RbcysxXSppOm4ubGVuZ3RoLGM9UjAobixhLGwsaSwhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKHRUKGMpKTtmb3Ioci5zb3J0KFpFKSxzPTA7czxyLmxlbmd0aDtzKyspSkUocltzXSxlKSxlPWxpKGUsZS5uZXh0KTtyZXR1cm4gZX1mdW5jdGlvbiBaRShuLHQpe3JldHVybiBuLngtdC54fWZ1bmN0aW9uIEpFKG4sdCl7aWYodD0kRShuLHQpLHQpe2xldCBlPVAwKHQsbik7bGkodCx0Lm5leHQpLGxpKGUsZS5uZXh0KX19ZnVuY3Rpb24gJEUobix0KXtsZXQgZT10LGk9bi54LHI9bi55LHM9LTEvMCxvO2Rve2lmKHI8PWUueSYmcj49ZS5uZXh0LnkmJmUubmV4dC55IT09ZS55KXtsZXQgZj1lLngrKHItZS55KSooZS5uZXh0LngtZS54KS8oZS5uZXh0LnktZS55KTtpZihmPD1pJiZmPnMpe2lmKHM9ZixmPT09aSl7aWYocj09PWUueSlyZXR1cm4gZTtpZihyPT09ZS5uZXh0LnkpcmV0dXJuIGUubmV4dH1vPWUueDxlLm5leHQueD9lOmUubmV4dH19ZT1lLm5leHR9d2hpbGUoZSE9PXQpO2lmKCFvKXJldHVybiBudWxsO2lmKGk9PT1zKXJldHVybiBvO2xldCBhPW8sbD1vLngsYz1vLnksdT0xLzAsaDtlPW87ZG8gaT49ZS54JiZlLng+PWwmJmkhPT1lLngmJnpyKHI8Yz9pOnMscixsLGMscjxjP3M6aSxyLGUueCxlLnkpJiYoaD1NYXRoLmFicyhyLWUueSkvKGktZS54KSxNbyhlLG4pJiYoaDx1fHxoPT09dSYmKGUueD5vLnh8fGUueD09PW8ueCYmS0UobyxlKSkpJiYobz1lLHU9aCkpLGU9ZS5uZXh0O3doaWxlKGUhPT1hKTtyZXR1cm4gb31mdW5jdGlvbiBLRShuLHQpe3JldHVybiB0ZShuLnByZXYsbix0LnByZXYpPDAmJnRlKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiBRRShuLHQsZSxpKXtsZXQgcj1uO2RvIHIuej09PW51bGwmJihyLno9Y2goci54LHIueSx0LGUsaSkpLHIucHJldlo9ci5wcmV2LHIubmV4dFo9ci5uZXh0LHI9ci5uZXh0O3doaWxlKHIhPT1uKTtyLnByZXZaLm5leHRaPW51bGwsci5wcmV2Wj1udWxsLGpFKHIpfWZ1bmN0aW9uIGpFKG4pe2xldCB0LGUsaSxyLHMsbyxhLGwsYz0xO2Rve2ZvcihlPW4sbj1udWxsLHM9bnVsbCxvPTA7ZTspe2ZvcihvKyssaT1lLGE9MCx0PTA7dDxjJiYoYSsrLGk9aS5uZXh0WiwhIWkpO3QrKyk7Zm9yKGw9YzthPjB8fGw+MCYmaTspYSE9PTAmJihsPT09MHx8IWl8fGUuejw9aS56KT8ocj1lLGU9ZS5uZXh0WixhLS0pOihyPWksaT1pLm5leHRaLGwtLSkscz9zLm5leHRaPXI6bj1yLHIucHJldlo9cyxzPXI7ZT1pfXMubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSk7cmV0dXJuIG59ZnVuY3Rpb24gY2gobix0LGUsaSxyKXtyZXR1cm4gbj0zMjc2Nyoobi1lKSpyLHQ9MzI3NjcqKHQtaSkqcixuPShufG48PDgpJjE2NzExOTM1LG49KG58bjw8NCkmMjUyNjQ1MTM1LG49KG58bjw8MikmODU4OTkzNDU5LG49KG58bjw8MSkmMTQzMTY1NTc2NSx0PSh0fHQ8PDgpJjE2NzExOTM1LHQ9KHR8dDw8NCkmMjUyNjQ1MTM1LHQ9KHR8dDw8MikmODU4OTkzNDU5LHQ9KHR8dDw8MSkmMTQzMTY1NTc2NSxufHQ8PDF9ZnVuY3Rpb24gdFQobil7bGV0IHQ9bixlPW47ZG8odC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHQ7d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIHpyKG4sdCxlLGkscixzLG8sYSl7cmV0dXJuKHItbykqKHQtYSktKG4tbykqKHMtYSk+PTAmJihuLW8pKihpLWEpLShlLW8pKih0LWEpPj0wJiYoZS1vKSoocy1hKS0oci1vKSooaS1hKT49MH1mdW5jdGlvbiBlVChuLHQpe3JldHVybiBuLm5leHQuaSE9PXQuaSYmbi5wcmV2LmkhPT10LmkmJiFuVChuLHQpJiYoTW8obix0KSYmTW8odCxuKSYmaVQobix0KSYmKHRlKG4ucHJldixuLHQucHJldil8fHRlKG4sdC5wcmV2LHQpKXx8RGwobix0KSYmdGUobi5wcmV2LG4sbi5uZXh0KT4wJiZ0ZSh0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIHRlKG4sdCxlKXtyZXR1cm4odC55LW4ueSkqKGUueC10LngpLSh0Lngtbi54KSooZS55LXQueSl9ZnVuY3Rpb24gRGwobix0KXtyZXR1cm4gbi54PT09dC54JiZuLnk9PT10Lnl9ZnVuY3Rpb24gTDAobix0LGUsaSl7bGV0IHI9WmEodGUobix0LGUpKSxzPVphKHRlKG4sdCxpKSksbz1aYSh0ZShlLGksbikpLGE9WmEodGUoZSxpLHQpKTtyZXR1cm4hIShyIT09cyYmbyE9PWF8fHI9PT0wJiZZYShuLGUsdCl8fHM9PT0wJiZZYShuLGksdCl8fG89PT0wJiZZYShlLG4saSl8fGE9PT0wJiZZYShlLHQsaSkpfWZ1bmN0aW9uIFlhKG4sdCxlKXtyZXR1cm4gdC54PD1NYXRoLm1heChuLngsZS54KSYmdC54Pj1NYXRoLm1pbihuLngsZS54KSYmdC55PD1NYXRoLm1heChuLnksZS55KSYmdC55Pj1NYXRoLm1pbihuLnksZS55KX1mdW5jdGlvbiBaYShuKXtyZXR1cm4gbj4wPzE6bjwwPy0xOjB9ZnVuY3Rpb24gblQobix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJkwwKGUsZS5uZXh0LG4sdCkpcmV0dXJuITA7ZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiExfWZ1bmN0aW9uIE1vKG4sdCl7cmV0dXJuIHRlKG4ucHJldixuLG4ubmV4dCk8MD90ZShuLHQsbi5uZXh0KT49MCYmdGUobixuLnByZXYsdCk+PTA6dGUobix0LG4ucHJldik8MHx8dGUobixuLm5leHQsdCk8MH1mdW5jdGlvbiBpVChuLHQpe2xldCBlPW4saT0hMSxyPShuLngrdC54KS8yLHM9KG4ueSt0LnkpLzI7ZG8gZS55PnMhPWUubmV4dC55PnMmJmUubmV4dC55IT09ZS55JiZyPChlLm5leHQueC1lLngpKihzLWUueSkvKGUubmV4dC55LWUueSkrZS54JiYoaT0haSksZT1lLm5leHQ7d2hpbGUoZSE9PW4pO3JldHVybiBpfWZ1bmN0aW9uIFAwKG4sdCl7bGV0IGU9bmV3IHVoKG4uaSxuLngsbi55KSxpPW5ldyB1aCh0LmksdC54LHQueSkscj1uLm5leHQscz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLHMubmV4dD1pLGkucHJldj1zLGl9ZnVuY3Rpb24gamcobix0LGUsaSl7bGV0IHI9bmV3IHVoKG4sdCxlKTtyZXR1cm4gaT8oci5uZXh0PWkubmV4dCxyLnByZXY9aSxpLm5leHQucHJldj1yLGkubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gYm8obil7bi5uZXh0LnByZXY9bi5wcmV2LG4ucHJldi5uZXh0PW4ubmV4dCxuLnByZXZaJiYobi5wcmV2Wi5uZXh0Wj1uLm5leHRaKSxuLm5leHRaJiYobi5uZXh0Wi5wcmV2Wj1uLnByZXZaKX1mdW5jdGlvbiB1aChuLHQsZSl7dGhpcy5pPW4sdGhpcy54PXQsdGhpcy55PWUsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gclQobix0LGUsaSl7bGV0IHI9MDtmb3IobGV0IHM9dCxvPWUtaTtzPGU7cys9aSlyKz0obltvXS1uW3NdKSoobltzKzFdK25bbysxXSksbz1zO3JldHVybiByfXZhciBkbj1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxzPTA7czxlO3I9cysrKWkrPXRbcl0ueCp0W3NdLnktdFtzXS54KnRbcl0ueTtyZXR1cm4gaSouNX1zdGF0aWMgaXNDbG9ja1dpc2UodCl7cmV0dXJuIGRuLmFyZWEodCk8MH1zdGF0aWMgdHJpYW5ndWxhdGVTaGFwZSh0LGUpe2xldCBpPVtdLHI9W10scz1bXTt0MCh0KSxlMChpLHQpO2xldCBvPXQubGVuZ3RoO2UuZm9yRWFjaCh0MCk7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspci5wdXNoKG8pLG8rPWVbbF0ubGVuZ3RoLGUwKGksZVtsXSk7bGV0IGE9VkUudHJpYW5ndWxhdGUoaSxyKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTMpcy5wdXNoKGEuc2xpY2UobCxsKzMpKTtyZXR1cm4gc319O2Z1bmN0aW9uIHQwKG4pe2xldCB0PW4ubGVuZ3RoO3Q+MiYmblt0LTFdLmVxdWFscyhuWzBdKSYmbi5wb3AoKX1mdW5jdGlvbiBlMChuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW4ucHVzaCh0W2VdLngpLG4ucHVzaCh0W2VdLnkpfXZhciBjaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9bmV3IFVuKFtuZXcgSyguNSwuNSksbmV3IEsoLS41LC41KSxuZXcgSygtLjUsLS41KSxuZXcgSyguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10scz1bXTtmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspe2xldCBjPXRbYV07byhjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShzLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gbyhhKXtsZXQgbD1bXSxjPWUuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9lLmN1cnZlU2VnbWVudHM6MTIsdT1lLnN0ZXBzIT09dm9pZCAwP2Uuc3RlcHM6MSxoPWUuZGVwdGghPT12b2lkIDA/ZS5kZXB0aDoxLGY9ZS5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ZS5iZXZlbEVuYWJsZWQ6ITAsZD1lLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP2UuYmV2ZWxUaGlja25lc3M6LjIsZz1lLmJldmVsU2l6ZSE9PXZvaWQgMD9lLmJldmVsU2l6ZTpkLS4xLHg9ZS5iZXZlbE9mZnNldCE9PXZvaWQgMD9lLmJldmVsT2Zmc2V0OjAsdj1lLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ZS5iZXZlbFNlZ21lbnRzOjMsbT1lLmV4dHJ1ZGVQYXRoLHA9ZS5VVkdlbmVyYXRvciE9PXZvaWQgMD9lLlVWR2VuZXJhdG9yOnNUO2UuYW1vdW50IT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGg9ZS5hbW91bnQpO2xldCBiLF89ITEsUyxMLEEsSDttJiYoYj1tLmdldFNwYWNlZFBvaW50cyh1KSxfPSEwLGY9ITEsUz1tLmNvbXB1dGVGcmVuZXRGcmFtZXModSwhMSksTD1uZXcgVCxBPW5ldyBULEg9bmV3IFQpLGZ8fCh2PTAsZD0wLGc9MCx4PTApO2xldCB0dD1hLmV4dHJhY3RQb2ludHMoYyksWD10dC5zaGFwZSx5PXR0LmhvbGVzO2lmKCFkbi5pc0Nsb2NrV2lzZShYKSl7WD1YLnJldmVyc2UoKTtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107ZG4uaXNDbG9ja1dpc2UoSikmJih5W0NdPUoucmV2ZXJzZSgpKX19bGV0IEQ9ZG4udHJpYW5ndWxhdGVTaGFwZShYLHkpLEY9WDtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107WD1YLmNvbmNhdChKKX1mdW5jdGlvbiB6KEMsaixKKXtyZXR1cm4ganx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxqLmNsb25lKCkubXVsdGlwbHlTY2FsYXIoSikuYWRkKEMpfWxldCBOPVgubGVuZ3RoLFY9RC5sZW5ndGg7ZnVuY3Rpb24gUShDLGosSil7bGV0IGl0LGV0LHZ0LGJ0PUMueC1qLngsSXQ9Qy55LWoueSxadD1KLngtQy54LHF0PUoueS1DLnksRT1idCpidCtJdCpJdCx3PWJ0KnF0LUl0Klp0O2lmKE1hdGguYWJzKHcpPk51bWJlci5FUFNJTE9OKXtsZXQgcT1NYXRoLnNxcnQoRSkscnQ9TWF0aC5zcXJ0KFp0Klp0K3F0KnF0KSxndD1qLngtSXQvcSxXPWoueStidC9xLF90PUoueC1xdC9ydCx5dD1KLnkrWnQvcnQsdXQ9KChfdC1ndCkqcXQtKHl0LVcpKlp0KS8oYnQqcXQtSXQqWnQpO2l0PWd0K2J0KnV0LUMueCxldD1XK0l0KnV0LUMueTtsZXQgY3Q9aXQqaXQrZXQqZXQ7aWYoY3Q8PTIpcmV0dXJuIG5ldyBLKGl0LGV0KTt2dD1NYXRoLnNxcnQoY3QvMil9ZWxzZXtsZXQgcT0hMTtidD5OdW1iZXIuRVBTSUxPTj9adD5OdW1iZXIuRVBTSUxPTiYmKHE9ITApOmJ0PC1OdW1iZXIuRVBTSUxPTj9adDwtTnVtYmVyLkVQU0lMT04mJihxPSEwKTpNYXRoLnNpZ24oSXQpPT09TWF0aC5zaWduKHF0KSYmKHE9ITApLHE/KGl0PS1JdCxldD1idCx2dD1NYXRoLnNxcnQoRSkpOihpdD1idCxldD1JdCx2dD1NYXRoLnNxcnQoRS8yKSl9cmV0dXJuIG5ldyBLKGl0L3Z0LGV0L3Z0KX1sZXQgYXQ9W107Zm9yKGxldCBDPTAsaj1GLmxlbmd0aCxKPWotMSxpdD1DKzE7QzxqO0MrKyxKKyssaXQrKylKPT09aiYmKEo9MCksaXQ9PT1qJiYoaXQ9MCksYXRbQ109UShGW0NdLEZbSl0sRltpdF0pO2xldCBHPVtdLCQsbHQ9YXQuY29uY2F0KCk7Zm9yKGxldCBDPTAsaj15Lmxlbmd0aDtDPGo7QysrKXtsZXQgSj15W0NdOyQ9W107Zm9yKGxldCBpdD0wLGV0PUoubGVuZ3RoLHZ0PWV0LTEsYnQ9aXQrMTtpdDxldDtpdCsrLHZ0KyssYnQrKyl2dD09PWV0JiYodnQ9MCksYnQ9PT1ldCYmKGJ0PTApLCRbaXRdPVEoSltpdF0sSlt2dF0sSltidF0pO0cucHVzaCgkKSxsdD1sdC5jb25jYXQoJCl9Zm9yKGxldCBDPTA7Qzx2O0MrKyl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksLUopfWZvcihsZXQgZXQ9MCx2dD15Lmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eVtldF07JD1HW2V0XTtmb3IobGV0IEl0PTAsWnQ9YnQubGVuZ3RoO0l0PFp0O0l0Kyspe2xldCBxdD16KGJ0W0l0XSwkW0l0XSxpdCk7bXQocXQueCxxdC55LC1KKX19fWxldCBkdD1nK3g7Zm9yKGxldCBDPTA7QzxOO0MrKyl7bGV0IGo9Zj96KFhbQ10sbHRbQ10sZHQpOlhbQ107Xz8oQS5jb3B5KFMubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoai54KSxMLmNvcHkoUy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGoueSksSC5jb3B5KGJbMF0pLmFkZChBKS5hZGQoTCksbXQoSC54LEgueSxILnopKTptdChqLngsai55LDApfWZvcihsZXQgQz0xO0M8PXU7QysrKWZvcihsZXQgaj0wO2o8TjtqKyspe2xldCBKPWY/eihYW2pdLGx0W2pdLGR0KTpYW2pdO18/KEEuY29weShTLm5vcm1hbHNbQ10pLm11bHRpcGx5U2NhbGFyKEoueCksTC5jb3B5KFMuYmlub3JtYWxzW0NdKS5tdWx0aXBseVNjYWxhcihKLnkpLEguY29weShiW0NdKS5hZGQoQSkuYWRkKEwpLG10KEgueCxILnksSC56KSk6bXQoSi54LEoueSxoL3UqQyl9Zm9yKGxldCBDPXYtMTtDPj0wO0MtLSl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksaCtKKX1mb3IobGV0IGV0PTAsdnQ9eS5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXlbZXRdOyQ9R1tldF07Zm9yKGxldCBJdD0wLFp0PWJ0Lmxlbmd0aDtJdDxadDtJdCsrKXtsZXQgcXQ9eihidFtJdF0sJFtJdF0saXQpO18/bXQocXQueCxxdC55K2JbdS0xXS55LGJbdS0xXS54K0opOm10KHF0LngscXQueSxoK0opfX19eHQoKSxrKCk7ZnVuY3Rpb24geHQoKXtsZXQgQz1yLmxlbmd0aC8zO2lmKGYpe2xldCBqPTAsSj1OKmo7Zm9yKGxldCBpdD0wO2l0PFY7aXQrKyl7bGV0IGV0PURbaXRdO1N0KGV0WzJdK0osZXRbMV0rSixldFswXStKKX1qPXUrdioyLEo9TipqO2ZvcihsZXQgaXQ9MDtpdDxWO2l0Kyspe2xldCBldD1EW2l0XTtTdChldFswXStKLGV0WzFdK0osZXRbMl0rSil9fWVsc2V7Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzJdLEpbMV0sSlswXSl9Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzBdK04qdSxKWzFdK04qdSxKWzJdK04qdSl9fWkuYWRkR3JvdXAoQyxyLmxlbmd0aC8zLUMsMCl9ZnVuY3Rpb24gaygpe2xldCBDPXIubGVuZ3RoLzMsaj0wO0Z0KEYsaiksais9Ri5sZW5ndGg7Zm9yKGxldCBKPTAsaXQ9eS5sZW5ndGg7SjxpdDtKKyspe2xldCBldD15W0pdO0Z0KGV0LGopLGorPWV0Lmxlbmd0aH1pLmFkZEdyb3VwKEMsci5sZW5ndGgvMy1DLDEpfWZ1bmN0aW9uIEZ0KEMsail7bGV0IEo9Qy5sZW5ndGg7Zm9yKDstLUo+PTA7KXtsZXQgaXQ9SixldD1KLTE7ZXQ8MCYmKGV0PUMubGVuZ3RoLTEpO2ZvcihsZXQgdnQ9MCxidD11K3YqMjt2dDxidDt2dCsrKXtsZXQgSXQ9Tip2dCxadD1OKih2dCsxKSxxdD1qK2l0K0l0LEU9aitldCtJdCx3PWorZXQrWnQscT1qK2l0K1p0O0IocXQsRSx3LHEpfX19ZnVuY3Rpb24gbXQoQyxqLEope2wucHVzaChDKSxsLnB1c2goaiksbC5wdXNoKEopfWZ1bmN0aW9uIFN0KEMsaixKKXtzdChDKSxzdChqKSxzdChKKTtsZXQgaXQ9ci5sZW5ndGgvMyxldD1wLmdlbmVyYXRlVG9wVVYoaSxyLGl0LTMsaXQtMixpdC0xKTtudChldFswXSksbnQoZXRbMV0pLG50KGV0WzJdKX1mdW5jdGlvbiBCKEMsaixKLGl0KXtzdChDKSxzdChqKSxzdChpdCksc3Qoaiksc3QoSiksc3QoaXQpO2xldCBldD1yLmxlbmd0aC8zLHZ0PXAuZ2VuZXJhdGVTaWRlV2FsbFVWKGkscixldC02LGV0LTMsZXQtMixldC0xKTtudCh2dFswXSksbnQodnRbMV0pLG50KHZ0WzNdKSxudCh2dFsxXSksbnQodnRbMl0pLG50KHZ0WzNdKX1mdW5jdGlvbiBzdChDKXtyLnB1c2gobFtDKjMrMF0pLHIucHVzaChsW0MqMysxXSksci5wdXNoKGxbQyozKzJdKX1mdW5jdGlvbiBudChDKXtzLnB1c2goQy54KSxzLnB1c2goQy55KX19fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyxpPXRoaXMucGFyYW1ldGVycy5vcHRpb25zO3JldHVybiBvVChlLGksdCl9c3RhdGljIGZyb21KU09OKHQsZSl7bGV0IGk9W107Zm9yKGxldCBzPTAsbz10LnNoYXBlcy5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVt0LnNoYXBlc1tzXV07aS5wdXNoKGEpfWxldCByPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gciE9PXZvaWQgMCYmKHQub3B0aW9ucy5leHRydWRlUGF0aD1uZXcgQzBbci50eXBlXSgpLmZyb21KU09OKHIpKSxuZXcgY2koaSx0Lm9wdGlvbnMpfX0sc1Q9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgcz10W2UqM10sbz10W2UqMysxXSxhPXRbaSozXSxsPXRbaSozKzFdLGM9dFtyKjNdLHU9dFtyKjMrMV07cmV0dXJuW25ldyBLKHMsbyksbmV3IEsoYSxsKSxuZXcgSyhjLHUpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKG4sdCxlLGkscixzKXtsZXQgbz10W2UqM10sYT10W2UqMysxXSxsPXRbZSozKzJdLGM9dFtpKjNdLHU9dFtpKjMrMV0saD10W2kqMysyXSxmPXRbciozXSxkPXRbciozKzFdLGc9dFtyKjMrMl0seD10W3MqM10sdj10W3MqMysxXSxtPXRbcyozKzJdO3JldHVybiBNYXRoLmFicyhhLXUpPE1hdGguYWJzKG8tYyk/W25ldyBLKG8sMS1sKSxuZXcgSyhjLDEtaCksbmV3IEsoZiwxLWcpLG5ldyBLKHgsMS1tKV06W25ldyBLKGEsMS1sKSxuZXcgSyh1LDEtaCksbmV3IEsoZCwxLWcpLG5ldyBLKHYsMS1tKV19fTtmdW5jdGlvbiBvVChuLHQsZSl7aWYoZS5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspe2xldCBzPW5baV07ZS5zaGFwZXMucHVzaChzLnV1aWQpfWVsc2UgZS5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB0LmV4dHJ1ZGVQYXRoIT09dm9pZCAwJiYoZS5vcHRpb25zLmV4dHJ1ZGVQYXRoPXQuZXh0cnVkZVBhdGgudG9KU09OKCkpLGV9dmFyIHFpPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD1uZXcgVW4oW25ldyBLKDAsLjUpLG5ldyBLKC0uNSwtLjUpLG5ldyBLKC41LC0uNSldKSxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2xldCBpPVtdLHI9W10scz1bXSxvPVtdLGE9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAoYSxsLHUpLGErPWwsbD0wO3RoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZWUociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGVlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVlKG8sMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9ci5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhlKSxkPWYuc2hhcGUsZz1mLmhvbGVzO2RuLmlzQ2xvY2tXaXNlKGQpPT09ITEmJihkPWQucmV2ZXJzZSgpKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZG4uaXNDbG9ja1dpc2UocCk9PT0hMCYmKGdbdl09cC5yZXZlcnNlKCkpfWxldCB4PWRuLnRyaWFuZ3VsYXRlU2hhcGUoZCxnKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZD1kLmNvbmNhdChwKX1mb3IobGV0IHY9MCxtPWQubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWRbdl07ci5wdXNoKHAueCxwLnksMCkscy5wdXNoKDAsMCwxKSxvLnB1c2gocC54LHAueSl9Zm9yKGxldCB2PTAsbT14Lmxlbmd0aDt2PG07disrKXtsZXQgcD14W3ZdLGI9cFswXStoLF89cFsxXStoLFM9cFsyXStoO2kucHVzaChiLF8sUyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gYVQoZSx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxzPXQuc2hhcGVzLmxlbmd0aDtyPHM7cisrKXtsZXQgbz1lW3Quc2hhcGVzW3JdXTtpLnB1c2gobyl9cmV0dXJuIG5ldyBxaShpLHQuY3VydmVTZWdtZW50cyl9fTtmdW5jdGlvbiBhVChuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj1uW2VdO3Quc2hhcGVzLnB1c2goci51dWlkKX1lbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH12YXIgaGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O2hoLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciB2bD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBmdCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMucm91Z2huZXNzTWFwPW51bGwsdGhpcy5tZXRhbG5lc3NNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmVudk1hcEludGVuc2l0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzLHRoaXMubWV0YWxuZXNzPXQubWV0YWxuZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMucm91Z2huZXNzTWFwPXQucm91Z2huZXNzTWFwLHRoaXMubWV0YWxuZXNzTWFwPXQubWV0YWxuZXNzTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3ZsLnByb3RvdHlwZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPSEwO3ZhciBmaD1jbGFzcyBleHRlbmRzIHZse2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5pb3I9MS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyZWZsZWN0aXZpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSWUoMi41Kih0aGlzLmlvci0xKS8odGhpcy5pb3IrMSksMCwxKX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuaW9yPSgxKy40KmUpLygxLS40KmUpfX0pLHRoaXMuc2hlZW5Db2xvcj1uZXcgZnQoMCksdGhpcy5zaGVlbkNvbG9yTWFwPW51bGwsdGhpcy5zaGVlblJvdWdobmVzcz0xLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9bnVsbCx0aGlzLnRyYW5zbWlzc2lvbk1hcD1udWxsLHRoaXMudGhpY2tuZXNzPTAsdGhpcy50aGlja25lc3NNYXA9bnVsbCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9MCx0aGlzLmF0dGVudWF0aW9uQ29sb3I9bmV3IGZ0KDEsMSwxKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD1udWxsLHRoaXMuc3BlY3VsYXJDb2xvcj1uZXcgZnQoMSwxLDEpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD1udWxsLHRoaXMuX3NoZWVuPTAsdGhpcy5fY2xlYXJjb2F0PTAsdGhpcy5fdHJhbnNtaXNzaW9uPTAsdGhpcy5zZXRWYWx1ZXModCl9Z2V0IHNoZWVuKCl7cmV0dXJuIHRoaXMuX3NoZWVufXNldCBzaGVlbih0KXt0aGlzLl9zaGVlbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3NoZWVuPXR9Z2V0IGNsZWFyY29hdCgpe3JldHVybiB0aGlzLl9jbGVhcmNvYXR9c2V0IGNsZWFyY29hdCh0KXt0aGlzLl9jbGVhcmNvYXQ+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9jbGVhcmNvYXQ9dH1nZXQgdHJhbnNtaXNzaW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zbWlzc2lvbn1zZXQgdHJhbnNtaXNzaW9uKHQpe3RoaXMuX3RyYW5zbWlzc2lvbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3RyYW5zbWlzc2lvbj10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQsdGhpcy5jbGVhcmNvYXRNYXA9dC5jbGVhcmNvYXRNYXAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9dC5jbGVhcmNvYXROb3JtYWxNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHRoaXMuaW9yPXQuaW9yLHRoaXMuc2hlZW49dC5zaGVlbix0aGlzLnNoZWVuQ29sb3IuY29weSh0LnNoZWVuQ29sb3IpLHRoaXMuc2hlZW5Db2xvck1hcD10LnNoZWVuQ29sb3JNYXAsdGhpcy5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9dC5zaGVlblJvdWdobmVzc01hcCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzLnRoaWNrbmVzcz10LnRoaWNrbmVzcyx0aGlzLnRoaWNrbmVzc01hcD10LnRoaWNrbmVzc01hcCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlLHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KHQuYXR0ZW51YXRpb25Db2xvciksdGhpcy5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dC5zcGVjdWxhckludGVuc2l0eU1hcCx0aGlzLnNwZWN1bGFyQ29sb3IuY29weSh0LnNwZWN1bGFyQ29sb3IpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD10LnNwZWN1bGFyQ29sb3JNYXAsdGhpc319O2ZoLnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwO3ZhciBkaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGZ0KDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtkaC5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgcGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuZ3JhZGllbnRNYXA9dC5ncmFkaWVudE1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3BoLnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWw9ITA7dmFyIG1oPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O21oLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDt2YXIgZ2g9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtnaC5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwO3ZhciB4aD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3hoLnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgeWg9Y2xhc3MgZXh0ZW5kcyB6bntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt5aC5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIEt0PXthcnJheVNsaWNlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gS3QuaXNUeXBlZEFycmF5KG4pP25ldyBuLmNvbnN0cnVjdG9yKG4uc3ViYXJyYXkodCxlIT09dm9pZCAwP2U6bi5sZW5ndGgpKTpuLnNsaWNlKHQsZSl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIW58fCFlJiZuLmNvbnN0cnVjdG9yPT09dD9uOnR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UPT0ibnVtYmVyIj9uZXcgdChuKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihuKXtmdW5jdGlvbiB0KHIscyl7cmV0dXJuIG5bcl0tbltzXX1sZXQgZT1uLmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyIT09ZTsrK3IpaVtyXT1yO3JldHVybiBpLnNvcnQodCksaX0sc29ydGVkQXJyYXk6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4ubGVuZ3RoLHI9bmV3IG4uY29uc3RydWN0b3IoaSk7Zm9yKGxldCBzPTAsbz0wO28hPT1pOysrcyl7bGV0IGE9ZVtzXSp0O2ZvcihsZXQgbD0wO2whPT10OysrbClyW28rK109blthK2xdfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xLHM9blswXTtmb3IoO3MhPT12b2lkIDAmJnNbaV09PT12b2lkIDA7KXM9bltyKytdO2lmKHM9PT12b2lkIDApcmV0dXJuO2xldCBvPXNbaV07aWYobyE9PXZvaWQgMClpZihBcnJheS5pc0FycmF5KG8pKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoLmFwcGx5KGUsbykpLHM9bltyKytdO3doaWxlKHMhPT12b2lkIDApO2Vsc2UgaWYoby50b0FycmF5IT09dm9pZCAwKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksby50b0FycmF5KGUsZS5sZW5ndGgpKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKTtlbHNlIGRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoKG8pKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKX0sc3ViY2xpcDpmdW5jdGlvbihuLHQsZSxpLHI9MzApe2xldCBzPW4uY2xvbmUoKTtzLm5hbWU9dDtsZXQgbz1bXTtmb3IobGV0IGw9MDtsPHMudHJhY2tzLmxlbmd0aDsrK2wpe2xldCBjPXMudHJhY2tzW2xdLHU9Yy5nZXRWYWx1ZVNpemUoKSxoPVtdLGY9W107Zm9yKGxldCBkPTA7ZDxjLnRpbWVzLmxlbmd0aDsrK2Qpe2xldCBnPWMudGltZXNbZF0qcjtpZighKGc8ZXx8Zz49aSkpe2gucHVzaChjLnRpbWVzW2RdKTtmb3IobGV0IHg9MDt4PHU7Kyt4KWYucHVzaChjLnZhbHVlc1tkKnUreF0pfX1oLmxlbmd0aCE9PTAmJihjLnRpbWVzPUt0LmNvbnZlcnRBcnJheShoLGMudGltZXMuY29uc3RydWN0b3IpLGMudmFsdWVzPUt0LmNvbnZlcnRBcnJheShmLGMudmFsdWVzLmNvbnN0cnVjdG9yKSxvLnB1c2goYykpfXMudHJhY2tzPW87bGV0IGE9MS8wO2ZvcihsZXQgbD0wO2w8cy50cmFja3MubGVuZ3RoOysrbClhPnMudHJhY2tzW2xdLnRpbWVzWzBdJiYoYT1zLnRyYWNrc1tsXS50aW1lc1swXSk7Zm9yKGxldCBsPTA7bDxzLnRyYWNrcy5sZW5ndGg7KytsKXMudHJhY2tzW2xdLnNoaWZ0KC0xKmEpO3JldHVybiBzLnJlc2V0RHVyYXRpb24oKSxzfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKG4sdD0wLGU9bixpPTMwKXtpPD0wJiYoaT0zMCk7bGV0IHI9ZS50cmFja3MubGVuZ3RoLHM9dC9pO2ZvcihsZXQgbz0wO288cjsrK28pe2xldCBhPWUudHJhY2tzW29dLGw9YS5WYWx1ZVR5cGVOYW1lO2lmKGw9PT0iYm9vbCJ8fGw9PT0ic3RyaW5nIiljb250aW51ZTtsZXQgYz1uLnRyYWNrcy5maW5kKGZ1bmN0aW9uKG0pe3JldHVybiBtLm5hbWU9PT1hLm5hbWUmJm0uVmFsdWVUeXBlTmFtZT09PWx9KTtpZihjPT09dm9pZCAwKWNvbnRpbnVlO2xldCB1PTAsaD1hLmdldFZhbHVlU2l6ZSgpO2EuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJih1PWgvMyk7bGV0IGY9MCxkPWMuZ2V0VmFsdWVTaXplKCk7Yy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGY9ZC8zKTtsZXQgZz1hLnRpbWVzLmxlbmd0aC0xLHg7aWYoczw9YS50aW1lc1swXSl7bGV0IG09dSxwPWgtdTt4PUt0LmFycmF5U2xpY2UoYS52YWx1ZXMsbSxwKX1lbHNlIGlmKHM+PWEudGltZXNbZ10pe2xldCBtPWcqaCt1LHA9bStoLXU7eD1LdC5hcnJheVNsaWNlKGEudmFsdWVzLG0scCl9ZWxzZXtsZXQgbT1hLmNyZWF0ZUludGVycG9sYW50KCkscD11LGI9aC11O20uZXZhbHVhdGUocykseD1LdC5hcnJheVNsaWNlKG0ucmVzdWx0QnVmZmVyLHAsYil9bD09PSJxdWF0ZXJuaW9uIiYmbmV3IEVlKCkuZnJvbUFycmF5KHgpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoeCk7bGV0IHY9Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCBtPTA7bTx2OysrbSl7bGV0IHA9bSpkK2Y7aWYobD09PSJxdWF0ZXJuaW9uIilFZS5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyxwLHgsMCxjLnZhbHVlcyxwKTtlbHNle2xldCBiPWQtZioyO2ZvcihsZXQgXz0wO188YjsrK18pYy52YWx1ZXNbcCtfXS09eFtfXX19fXJldHVybiBuLmJsZW5kTW9kZT1kMCxufX0scG49Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXIhPT12b2lkIDA/cjpuZXcgZS5jb25zdHJ1Y3RvcihpKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPWksdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxpPXRoaXMuX2NhY2hlZEluZGV4LHI9ZVtpXSxzPWVbaS0xXTt0OntlOntsZXQgbztuOntpOmlmKCEodDxyKSl7Zm9yKGxldCBhPWkrMjs7KXtpZihyPT09dm9pZCAwKXtpZih0PHMpYnJlYWsgaTtyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSx0LHMpfWlmKGk9PT1hKWJyZWFrO2lmKHM9cixyPWVbKytpXSx0PHIpYnJlYWsgZX1vPWUubGVuZ3RoO2JyZWFrIG59aWYoISh0Pj1zKSl7bGV0IGE9ZVsxXTt0PGEmJihpPTIscz1hKTtmb3IobGV0IGw9aS0yOzspe2lmKHM9PT12b2lkIDApcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKGk9PT1sKWJyZWFrO2lmKHI9cyxzPWVbLS1pLTFdLHQ+PXMpYnJlYWsgZX1vPWksaT0wO2JyZWFrIG59YnJlYWsgdH1mb3IoO2k8bzspe2xldCBhPWkrbz4+PjE7dDxlW2FdP289YTppPWErMX1pZihyPWVbaV0scz1lW2ktMV0scz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYocj09PXZvaWQgMClyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSxzLHQpfXRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5pbnRlcnZhbENoYW5nZWRfKGkscyxyKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8oaSxzLHQscil9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2xldCBlPXRoaXMucmVzdWx0QnVmZmVyLGk9dGhpcy5zYW1wbGVWYWx1ZXMscj10aGlzLnZhbHVlU2l6ZSxzPXQqcjtmb3IobGV0IG89MDtvIT09cjsrK28pZVtvXT1pW3Mrb107cmV0dXJuIGV9aW50ZXJwb2xhdGVfKCl7dGhyb3cgbmV3IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpfWludGVydmFsQ2hhbmdlZF8oKXt9fTtwbi5wcm90b3R5cGUuYmVmb3JlU3RhcnRfPXBuLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3BuLnByb3RvdHlwZS5hZnRlckVuZF89cG4ucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87dmFyIHZoPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGksciksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0Ok5yLGVuZGluZ0VuZDpOcn19aW50ZXJ2YWxDaGFuZ2VkXyh0LGUsaSl7bGV0IHI9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMscz10LTIsbz10KzEsYT1yW3NdLGw9cltvXTtpZihhPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIEZyOnM9dCxhPTIqZS1pO2JyZWFrO2Nhc2UgZWw6cz1yLmxlbmd0aC0yLGE9ZStyW3NdLXJbcysxXTticmVhaztkZWZhdWx0OnM9dCxhPWl9aWYobD09PXZvaWQgMClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgRnI6bz10LGw9MippLWU7YnJlYWs7Y2FzZSBlbDpvPTEsbD1pK3JbMV0tclswXTticmVhaztkZWZhdWx0Om89dC0xLGw9ZX1sZXQgYz0oaS1lKSouNSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oZS1hKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtaSksdGhpcy5fb2Zmc2V0UHJldj1zKnUsdGhpcy5fb2Zmc2V0TmV4dD1vKnV9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBzPXRoaXMucmVzdWx0QnVmZmVyLG89dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PXRoaXMuX29mZnNldFByZXYsaD10aGlzLl9vZmZzZXROZXh0LGY9dGhpcy5fd2VpZ2h0UHJldixkPXRoaXMuX3dlaWdodE5leHQsZz0oaS1lKS8oci1lKSx4PWcqZyx2PXgqZyxtPS1mKnYrMipmKngtZipnLHA9KDErZikqdisoLTEuNS0yKmYpKngrKC0uNStmKSpnKzEsYj0oLTEtZCkqdisoMS41K2QpKngrLjUqZyxfPWQqdi1kKng7Zm9yKGxldCBTPTA7UyE9PWE7KytTKXNbU109bSpvW3UrU10rcCpvW2MrU10rYipvW2wrU10rXypvW2grU107cmV0dXJuIHN9fSxfbD1jbGFzcyBleHRlbmRzIHBue2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgcz10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD10KmEsYz1sLWEsdT0oaS1lKS8oci1lKSxoPTEtdTtmb3IobGV0IGY9MDtmIT09YTsrK2Ypc1tmXT1vW2MrZl0qaCtvW2wrZl0qdTtyZXR1cm4gc319LF9oPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LFhlPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKGU9PT12b2lkIDB8fGUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9S3QuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9S3QuY29udmVydEFycmF5KGksdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihyfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCBlPXQuY29uc3RydWN0b3IsaTtpZihlLnRvSlNPTiE9PXRoaXMudG9KU09OKWk9ZS50b0pTT04odCk7ZWxzZXtpPXtuYW1lOnQubmFtZSx0aW1lczpLdC5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOkt0LmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCByPXQuZ2V0SW50ZXJwb2xhdGlvbigpO3IhPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoaS5pbnRlcnBvbGF0aW9uPXIpfXJldHVybiBpLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLGl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBfaCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgX2wodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IHZoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIGphOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIHRsOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSBldTplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoO2JyZWFrfWlmKGU9PT12b2lkIDApe2xldCBpPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9PT12b2lkIDApaWYodCE9PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGkpO3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixpKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gamE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gdGw7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gZXV9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYodCE9PTApe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSs9dH1yZXR1cm4gdGhpc31zY2FsZSh0KXtpZih0IT09MSl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKj10fXJldHVybiB0aGlzfXRyaW0odCxlKXtsZXQgaT10aGlzLnRpbWVzLHI9aS5sZW5ndGgscz0wLG89ci0xO2Zvcig7cyE9PXImJmlbc108dDspKytzO2Zvcig7byE9PS0xJiZpW29dPmU7KS0tbztpZigrK28scyE9PTB8fG8hPT1yKXtzPj1vJiYobz1NYXRoLm1heChvLDEpLHM9by0xKTtsZXQgYT10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9S3QuYXJyYXlTbGljZShpLHMsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxzKmEsbyphKX1yZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwLGU9dGhpcy5nZXRWYWx1ZVNpemUoKTtlLU1hdGguZmxvb3IoZSkhPT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLHM9aS5sZW5ndGg7cz09PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBvPW51bGw7Zm9yKGxldCBhPTA7YSE9PXM7YSsrKXtsZXQgbD1pW2FdO2lmKHR5cGVvZiBsPT0ibnVtYmVyIiYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobyE9PW51bGwmJm8+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxvKSx0PSExO2JyZWFrfW89bH1pZihyIT09dm9pZCAwJiZLdC5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PUt0LmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1LdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj10aGlzLmdldEludGVycG9sYXRpb24oKT09PWV1LHM9dC5sZW5ndGgtMSxvPTE7Zm9yKGxldCBhPTE7YTxzOysrYSl7bGV0IGw9ITEsYz10W2FdLHU9dFthKzFdO2lmKGMhPT11JiYoYSE9PTF8fGMhPT10WzBdKSlpZihyKWw9ITA7ZWxzZXtsZXQgaD1hKmksZj1oLWksZD1oK2k7Zm9yKGxldCBnPTA7ZyE9PWk7KytnKXtsZXQgeD1lW2grZ107aWYoeCE9PWVbZitnXXx8eCE9PWVbZCtnXSl7bD0hMDticmVha319fWlmKGwpe2lmKGEhPT1vKXt0W29dPXRbYV07bGV0IGg9YSppLGY9byppO2ZvcihsZXQgZD0wO2QhPT1pOysrZCllW2YrZF09ZVtoK2RdfSsrb319aWYocz4wKXt0W29dPXRbc107Zm9yKGxldCBhPXMqaSxsPW8qaSxjPTA7YyE9PWk7KytjKWVbbCtjXT1lW2ErY107KytvfXJldHVybiBvIT09dC5sZW5ndGg/KHRoaXMudGltZXM9S3QuYXJyYXlTbGljZSh0LDAsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZShlLDAsbyppKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1lKSx0aGlzfWNsb25lKCl7bGV0IHQ9S3QuYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLGU9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxpPXRoaXMuY29uc3RydWN0b3Iscj1uZXcgaSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtYZS5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj10bDt2YXIgdWk9Y2xhc3MgZXh0ZW5kcyBYZXt9O3VpLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIjt1aS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3VpLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1qYTt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgd2w9Y2xhc3MgZXh0ZW5kcyBYZXt9O3dsLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJjb2xvciI7dmFyIEtyPWNsYXNzIGV4dGVuZHMgWGV7fTtLci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ibnVtYmVyIjt2YXIgd2g9Y2xhc3MgZXh0ZW5kcyBwbntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IHM9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9KGktZSkvKHItZSksYz10KmE7Zm9yKGxldCB1PWMrYTtjIT09dTtjKz00KUVlLnNsZXJwRmxhdChzLDAsbyxjLWEsbyxjLGwpO3JldHVybiBzfX0sWGk9Y2xhc3MgZXh0ZW5kcyBYZXtJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyB3aCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fTtYaS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiI7WGkucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPXRsO1hpLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBoaT1jbGFzcyBleHRlbmRzIFhle307aGkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyI7aGkucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheTtoaS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249amE7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDA7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIFFyPWNsYXNzIGV4dGVuZHMgWGV7fTtRci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgTWw9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xLGkscj1RaCl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9aSx0aGlzLmR1cmF0aW9uPWUsdGhpcy5ibGVuZE1vZGU9cix0aGlzLnV1aWQ9dG4oKSx0aGlzLmR1cmF0aW9uPDAmJnRoaXMucmVzZXREdXJhdGlvbigpfXN0YXRpYyBwYXJzZSh0KXtsZXQgZT1bXSxpPXQudHJhY2tzLHI9MS8odC5mcHN8fDEpO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7byE9PWE7KytvKWUucHVzaChjVChpW29dKS5zY2FsZShyKSk7bGV0IHM9bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIHMudXVpZD10LnV1aWQsc31zdGF0aWMgdG9KU09OKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgcz0wLG89aS5sZW5ndGg7cyE9PW87KytzKWUucHVzaChYZS50b0pTT04oaVtzXSkpO3JldHVybiByfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsaSxyKXtsZXQgcz1lLmxlbmd0aCxvPVtdO2ZvcihsZXQgYT0wO2E8czthKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChhK3MtMSklcyxhLChhKzEpJXMpLGMucHVzaCgwLDEsMCk7bGV0IHU9S3QuZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPUt0LnNvcnRlZEFycmF5KGwsMSx1KSxjPUt0LnNvcnRlZEFycmF5KGMsMSx1KSwhciYmbFswXT09PTAmJihsLnB1c2gocyksYy5wdXNoKGNbMF0pKSxvLnB1c2gobmV3IEtyKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVthXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvaSkpfXJldHVybiBuZXcgdGhpcyh0LC0xLG8pfXN0YXRpYyBmaW5kQnlOYW1lKHQsZSl7bGV0IGk9dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IHI9dDtpPXIuZ2VvbWV0cnkmJnIuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8ci5hbmltYXRpb25zfWZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlmKGlbcl0ubmFtZT09PWUpcmV0dXJuIGlbcl07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQsZSxpKXtsZXQgcj17fSxzPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9dFthXSx1PWMubmFtZS5tYXRjaChzKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9cltoXTtmfHwocltoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBvPVtdO2ZvcihsZXQgYSBpbiByKW8ucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKGEsclthXSxlLGkpKTtyZXR1cm4gb31zdGF0aWMgcGFyc2VBbmltYXRpb24odCxlKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBpPWZ1bmN0aW9uKGgsZixkLGcseCl7aWYoZC5sZW5ndGghPT0wKXtsZXQgdj1bXSxtPVtdO0t0LmZsYXR0ZW5KU09OKGQsdixtLGcpLHYubGVuZ3RoIT09MCYmeC5wdXNoKG5ldyBoKGYsdixtKSl9fSxyPVtdLHM9dC5uYW1lfHwiZGVmYXVsdCIsbz10LmZwc3x8MzAsYT10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBkPXt9LGc7Zm9yKGc9MDtnPGYubGVuZ3RoO2crKylpZihmW2ddLm1vcnBoVGFyZ2V0cylmb3IobGV0IHg9MDt4PGZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDt4KyspZFtmW2ddLm1vcnBoVGFyZ2V0c1t4XV09LTE7Zm9yKGxldCB4IGluIGQpe2xldCB2PVtdLG09W107Zm9yKGxldCBwPTA7cCE9PWZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3Ape2xldCBiPWZbZ107di5wdXNoKGIudGltZSksbS5wdXNoKGIubW9ycGhUYXJnZXQ9PT14PzE6MCl9ci5wdXNoKG5ldyBLcigiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIreCsiXSIsdixtKSl9bD1kLmxlbmd0aCoob3x8MSl9ZWxzZXtsZXQgZD0iLmJvbmVzWyIrZVtoXS5uYW1lKyJdIjtpKFFyLGQrIi5wb3NpdGlvbiIsZiwicG9zIixyKSxpKFhpLGQrIi5xdWF0ZXJuaW9uIixmLCJyb3QiLHIpLGkoUXIsZCsiLnNjYWxlIixmLCJzY2wiLHIpfX1yZXR1cm4gci5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMocyxsLHIsYSl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLGU9MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLHMudGltZXNbcy50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGxUKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIEtyO2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gUXI7Y2FzZSJjb2xvciI6cmV0dXJuIHdsO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIFhpO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdWk7Y2FzZSJzdHJpbmciOnJldHVybiBoaX10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfWZ1bmN0aW9uIGNUKG4pe2lmKG4udHlwZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9bFQobi50eXBlKTtpZihuLnRpbWVzPT09dm9pZCAwKXtsZXQgZT1bXSxpPVtdO0t0LmZsYXR0ZW5KU09OKG4ua2V5cyxlLGksInZhbHVlIiksbi50aW1lcz1lLG4udmFsdWVzPWl9cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShuKTpuZXcgdChuLm5hbWUsbi50aW1lcyxuLnZhbHVlcyxuLmludGVycG9sYXRpb24pfXZhciBqcj17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24obix0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbbl09dCl9LGdldDpmdW5jdGlvbihuKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tuXX0scmVtb3ZlOmZ1bmN0aW9uKG4pe2RlbGV0ZSB0aGlzLmZpbGVzW25dfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxNaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI9dGhpcyxzPSExLG89MCxhPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9aSx0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXthKysscz09PSExJiZyLm9uU3RhcnQhPT12b2lkIDAmJnIub25TdGFydCh1LG8sYSkscz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe28rKyxyLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJnIub25Qcm9ncmVzcyh1LG8sYSksbz09PWEmJihzPSExLHIub25Mb2FkIT09dm9pZCAwJiZyLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7ci5vbkVycm9yIT09dm9pZCAwJiZyLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgZD1jW2hdLGc9Y1toKzFdO2lmKGQuZ2xvYmFsJiYoZC5sYXN0SW5kZXg9MCksZC50ZXN0KHUpKXJldHVybiBnfXJldHVybiBudWxsfX19LHVUPW5ldyBNaCxtbj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm1hbmFnZXI9dCE9PXZvaWQgMD90OnVULHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIscyl7aS5sb2FkKHQscixlLHMpfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LERuPXt9LGJoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz1qci5nZXQodCk7aWYocyE9PXZvaWQgMClyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShzKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCkscztpZihEblt0XSE9PXZvaWQgMCl7RG5bdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO3JldHVybn1Eblt0XT1bXSxEblt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7bGV0IG89bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSksYT10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2gobykudGhlbihjPT57aWYoYy5zdGF0dXM9PT0yMDB8fGMuc3RhdHVzPT09MCl7aWYoYy5zdGF0dXM9PT0wJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0idW5kZWZpbmVkInx8Yy5ib2R5LmdldFJlYWRlcj09PXZvaWQgMClyZXR1cm4gYztsZXQgdT1Eblt0XSxoPWMuYm9keS5nZXRSZWFkZXIoKSxmPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiksZD1mP3BhcnNlSW50KGYpOjAsZz1kIT09MCx4PTAsdj1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KG0pe3AoKTtmdW5jdGlvbiBwKCl7aC5yZWFkKCkudGhlbigoe2RvbmU6Yix2YWx1ZTpffSk9PntpZihiKW0uY2xvc2UoKTtlbHNle3grPV8uYnl0ZUxlbmd0aDtsZXQgUz1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOmcsbG9hZGVkOngsdG90YWw6ZH0pO2ZvcihsZXQgTD0wLEE9dS5sZW5ndGg7TDxBO0wrKyl7bGV0IEg9dVtMXTtILm9uUHJvZ3Jlc3MmJkgub25Qcm9ncmVzcyhTKX1tLmVucXVldWUoXykscCgpfX0pfX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKHYpfWVsc2UgdGhyb3cgRXJyb3IoYGZldGNoIGZvciAiJHtjLnVybH0iIHJlc3BvbmRlZCB3aXRoICR7Yy5zdGF0dXN9OiAke2Muc3RhdHVzVGV4dH1gKX0pLnRoZW4oYz0+e3N3aXRjaChsKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYy5hcnJheUJ1ZmZlcigpO2Nhc2UiYmxvYiI6cmV0dXJuIGMuYmxvYigpO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBjLnRleHQoKS50aGVuKHU9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodSxhKSk7Y2FzZSJqc29uIjpyZXR1cm4gYy5qc29uKCk7ZGVmYXVsdDppZihhPT09dm9pZCAwKXJldHVybiBjLnRleHQoKTt7bGV0IGg9L2NoYXJzZXQ9Ij8oW147IlxzXSopIj8vaS5leGVjKGEpLGY9aCYmaFsxXT9oWzFdLnRvTG93ZXJDYXNlKCk6dm9pZCAwLGQ9bmV3IFRleHREZWNvZGVyKGYpO3JldHVybiBjLmFycmF5QnVmZmVyKCkudGhlbihnPT5kLmRlY29kZShnKSl9fX0pLnRoZW4oYz0+e2pyLmFkZCh0LGMpO2xldCB1PURuW3RdO2RlbGV0ZSBEblt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBkPXVbaF07ZC5vbkxvYWQmJmQub25Mb2FkKGMpfX0pLmNhdGNoKGM9PntsZXQgdT1Eblt0XTtpZih1PT09dm9pZCAwKXRocm93IHRoaXMubWFuYWdlci5pdGVtRXJyb3IodCksYztkZWxldGUgRG5bdF07Zm9yKGxldCBoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXtsZXQgZD11W2hdO2Qub25FcnJvciYmZC5vbkVycm9yKGMpfXRoaXMubWFuYWdlci5pdGVtRXJyb3IodCl9KS5maW5hbGx5KCgpPT57dGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9KSx0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfXNldFJlc3BvbnNlVHlwZSh0KXtyZXR1cm4gdGhpcy5yZXNwb25zZVR5cGU9dCx0aGlzfXNldE1pbWVUeXBlKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319O3ZhciBibD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7dGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9cm8oImltZyIpO2Z1bmN0aW9uIGwoKXt1KCksanIuYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxzLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKGgpe3UoKSxyJiZyKGgpLHMubWFuYWdlci5pdGVtRXJyb3IodCkscy5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gdSgpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksdC5zdWJzdHIoMCw1KSE9PSJkYXRhOiImJnRoaXMuY3Jvc3NPcmlnaW4hPT12b2lkIDAmJihhLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLHMubWFuYWdlci5pdGVtU3RhcnQodCksYS5zcmM9dCxhfX0sU2g9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBXcixvPW5ldyBibCh0aGlzLm1hbmFnZXIpO28uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksby5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IGE9MDtmdW5jdGlvbiBsKGMpe28ubG9hZCh0W2NdLGZ1bmN0aW9uKHUpe3MuaW1hZ2VzW2NdPXUsYSsrLGE9PT02JiYocy5uZWVkc1VwZGF0ZT0hMCxlJiZlKHMpKX0sdm9pZCAwLHIpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIHN9fTt2YXIgRWg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBhZSxvPW5ldyBibCh0aGlzLm1hbmFnZXIpO3JldHVybiBvLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLG8uc2V0UGF0aCh0aGlzLnBhdGgpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3MuaW1hZ2U9YSxzLm5lZWRzVXBkYXRlPSEwLGUhPT12b2lkIDAmJmUocyl9LGksciksc319LFllPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdGhpcy5ncm91bmRDb2xvciE9PXZvaWQgMCYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHRoaXMuZGlzdGFuY2UhPT12b2lkIDAmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx0aGlzLmFuZ2xlIT09dm9pZCAwJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdGhpcy5kZWNheSE9PXZvaWQgMCYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHRoaXMucGVudW1icmEhPT12b2lkIDAmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx0aGlzLnNoYWRvdyE9PXZvaWQgMCYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O1llLnByb3RvdHlwZS5pc0xpZ2h0PSEwO3ZhciBUaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGkpLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMuZ3JvdW5kQ29sb3I9bmV3IGZ0KGUpfWNvcHkodCl7cmV0dXJuIFllLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319O1RoLnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodD0hMDt2YXIgbjA9bmV3IHd0LGkwPW5ldyBULHIwPW5ldyBULFNvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLmJsdXJTYW1wbGVzPTgsdGhpcy5tYXBTaXplPW5ldyBLKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IHd0LHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IHFyLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSygxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBXdCgwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4O2kwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxlLnBvc2l0aW9uLmNvcHkoaTApLHIwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQocjApLGUudXBkYXRlTWF0cml4V29ybGQoKSxuMC5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuMCksaS5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksaS5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLGkubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfWdldFZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19Z2V0RnJhbWVFeHRlbnRzKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c31kaXNwb3NlKCl7dGhpcy5tYXAmJnRoaXMubWFwLmRpc3Bvc2UoKSx0aGlzLm1hcFBhc3MmJnRoaXMubWFwUGFzcy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gdGhpcy5jYW1lcmE9dC5jYW1lcmEuY2xvbmUoKSx0aGlzLmJpYXM9dC5iaWFzLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMubWFwU2l6ZS5jb3B5KHQubWFwU2l6ZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIHRoaXMuYmlhcyE9PTAmJih0LmJpYXM9dGhpcy5iaWFzKSx0aGlzLm5vcm1hbEJpYXMhPT0wJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksdGhpcy5yYWRpdXMhPT0xJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCh0aGlzLm1hcFNpemUueCE9PTUxMnx8dGhpcy5tYXBTaXplLnkhPT01MTIpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LFNsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT1WdSoyKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LHM9dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxzIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPXMsZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtTbC5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITA7dmFyIEFoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlLGk9MCxyPU1hdGguUEkvMyxzPTAsbz0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU3BvdExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBrdCx0aGlzLmRpc3RhbmNlPWksdGhpcy5hbmdsZT1yLHRoaXMucGVudW1icmE9cyx0aGlzLmRlY2F5PW8sdGhpcy5zaGFkb3c9bmV3IFNsfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10L01hdGguUEl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmFuZ2xlPXQuYW5nbGUsdGhpcy5wZW51bWJyYT10LnBlbnVtYnJhLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0FoLnByb3RvdHlwZS5pc1Nwb3RMaWdodD0hMDt2YXIgczA9bmV3IHd0LFpzPW5ldyBULE51PW5ldyBULEVsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEsoNCwyKSx0aGlzLl92aWV3cG9ydENvdW50PTYsdGhpcy5fdmlld3BvcnRzPVtuZXcgV3QoMiwxLDEsMSksbmV3IFd0KDAsMSwxLDEpLG5ldyBXdCgzLDEsMSwxKSxuZXcgV3QoMSwxLDEsMSksbmV3IFd0KDMsMCwxLDEpLG5ldyBXdCgxLDAsMSwxKV0sdGhpcy5fY3ViZURpcmVjdGlvbnM9W25ldyBUKDEsMCwwKSxuZXcgVCgtMSwwLDApLG5ldyBUKDAsMCwxKSxuZXcgVCgwLDAsLTEpLG5ldyBUKDAsMSwwKSxuZXcgVCgwLC0xLDApXSx0aGlzLl9jdWJlVXBzPVtuZXcgVCgwLDEsMCksbmV3IFQoMCwxLDApLG5ldyBUKDAsMSwwKSxuZXcgVCgwLDEsMCksbmV3IFQoMCwwLDEpLG5ldyBUKDAsMCwtMSldfXVwZGF0ZU1hdHJpY2VzKHQsZT0wKXtsZXQgaT10aGlzLmNhbWVyYSxyPXRoaXMubWF0cml4LHM9dC5kaXN0YW5jZXx8aS5mYXI7cyE9PWkuZmFyJiYoaS5mYXI9cyxpLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksWnMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGkucG9zaXRpb24uY29weShacyksTnUuY29weShpLnBvc2l0aW9uKSxOdS5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbZV0pLGkudXAuY29weSh0aGlzLl9jdWJlVXBzW2VdKSxpLmxvb2tBdChOdSksaS51cGRhdGVNYXRyaXhXb3JsZCgpLHIubWFrZVRyYW5zbGF0aW9uKC1acy54LC1acy55LC1acy56KSxzMC5tdWx0aXBseU1hdHJpY2VzKGkucHJvamVjdGlvbk1hdHJpeCxpLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzMCl9fTtFbC5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBDaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpPTAscj0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1pLHRoaXMuZGVjYXk9cix0aGlzLnNoYWRvdz1uZXcgRWx9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtDaC5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBUbD1jbGFzcyBleHRlbmRzIFNve2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFZpKC01LDUsNSwtNSwuNSw1MDApKX19O1RsLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIFJoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KGt0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcga3QsdGhpcy5zaGFkb3c9bmV3IFRsfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O1JoLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIExoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0xoLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgUGg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUsaT0xMCxyPTEwKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1pLHRoaXMuaGVpZ2h0PXJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsZS5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9fTtQaC5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBBbD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgVCl9c2V0KHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weSh0W2VdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQsZSl7bGV0IGk9dC54LHI9dC55LHM9dC56LG89dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShvWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxlLmFkZFNjYWxlZFZlY3RvcihvWzFdLC40ODg2MDMqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwuNDg4NjAzKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bM10sLjQ4ODYwMyppKSxlLmFkZFNjYWxlZFZlY3RvcihvWzRdLDEuMDkyNTQ4KihpKnIpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDEuMDkyNTQ4KihyKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzZdLC4zMTUzOTIqKDMqcypzLTEpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzddLDEuMDkyNTQ4KihpKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC41NDYyNzQqKGkqaS1yKnIpKSxlfWdldElycmFkaWFuY2VBdCh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiBlLmNvcHkob1swXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksZS5hZGRTY2FsZWRWZWN0b3Iob1sxXSwyKi41MTE2NjQqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwyKi41MTE2NjQqcyksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwyKi41MTE2NjQqaSksZS5hZGRTY2FsZWRWZWN0b3Iob1s0XSwyKi40MjkwNDMqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDIqLjQyOTA0MypyKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjc0MzEyNSpzKnMtLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Iob1s3XSwyKi40MjkwNDMqaSpzKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC40MjkwNDMqKGkqaS1yKnIpKSxlfWFkZCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmFkZCh0LmNvZWZmaWNpZW50c1tlXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmxlcnAodC5jb2VmZmljaWVudHNbaV0sZSk7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW2VdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tlXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS5mcm9tQXJyYXkodCxlK3IqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLnRvQXJyYXkodCxlK3IqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxlKXtsZXQgaT10Lngscj10Lnkscz10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypyLGVbMl09LjQ4ODYwMypzLGVbM109LjQ4ODYwMyppLGVbNF09MS4wOTI1NDgqaSpyLGVbNV09MS4wOTI1NDgqcipzLGVbNl09LjMxNTM5MiooMypzKnMtMSksZVs3XT0xLjA5MjU0OCppKnMsZVs4XT0uNTQ2Mjc0KihpKmktcipyKX19O0FsLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIEVvPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodD1uZXcgQWwsZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19O0VvLnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIERoPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoKGkpe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBlPT09LTE/Ii4vIjp0LnN1YnN0cigwLGUrMSl9c3RhdGljIHJlc29sdmVVUkwodCxlKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KGUpJiYvXlwvLy50ZXN0KHQpJiYoZT1lLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OmUrdCl9fSxJaD1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtJaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgTmg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9e307YS5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKHMub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXtqci5hZGQodCxsKSxlJiZlKGwpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7ciYmcihsKSxzLm1hbmFnZXIuaXRlbUVycm9yKHQpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkscy5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05oLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBKYSxoVD17Z2V0Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiBKYT09PXZvaWQgMCYmKEphPW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSksSmF9LHNldENvbnRleHQ6ZnVuY3Rpb24obil7SmE9bn19LEZoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgcz10aGlzLG89bmV3IGJoKHRoaXMubWFuYWdlcik7by5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksby5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3RyeXtsZXQgbD1hLnNsaWNlKDApO2hULmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtlKHUpfSl9Y2F0Y2gobCl7cj9yKGwpOmNvbnNvbGUuZXJyb3IobCkscy5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LGkscil9fSx6aD1jbGFzcyBleHRlbmRzIEVve2NvbnN0cnVjdG9yKHQsZSxpPTEpe3N1cGVyKHZvaWQgMCxpKTtsZXQgcj1uZXcgZnQoKS5zZXQodCkscz1uZXcgZnQoKS5zZXQoZSksbz1uZXcgVChyLnIsci5nLHIuYiksYT1uZXcgVChzLnIscy5nLHMuYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkobykuYWRkKGEpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkobykuc3ViKGEpLm11bHRpcGx5U2NhbGFyKGMpfX07emgucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITA7dmFyIFVoPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKHZvaWQgMCxlKTtsZXQgaT1uZXcgZnQoKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KGkucixpLmcsaS5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fTtVaC5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgQmg9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKHRoaXMuaXNQbGF5aW5nPT09ITApe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtyZXR1cm59aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2xldCBlPXRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtyZXR1cm4gZS5idWZmZXI9dGhpcy5idWZmZXIsZS5sb29wPXRoaXMubG9vcCxlLmxvb3BTdGFydD10aGlzLmxvb3BTdGFydCxlLmxvb3BFbmQ9dGhpcy5sb29wRW5kLGUub25lbmRlZD10aGlzLm9uRW5kZWQuYmluZCh0aGlzKSxlLnN0YXJ0KHRoaXMuX3N0YXJ0ZWRBdCx0aGlzLl9wcm9ncmVzcyt0aGlzLm9mZnNldCx0aGlzLmR1cmF0aW9uKSx0aGlzLmlzUGxheWluZz0hMCx0aGlzLnNvdXJjZT1lLHRoaXMuc2V0RGV0dW5lKHRoaXMuZGV0dW5lKSx0aGlzLnNldFBsYXliYWNrUmF0ZSh0aGlzLnBsYXliYWNrUmF0ZSksdGhpcy5jb25uZWN0KCl9cGF1c2UoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLHRoaXMubG9vcD09PSEwJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpc31zdG9wKCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSx0aGlzLl9jb25uZWN0ZWQ9PT0hMD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHRoaXMuc291cmNlLmRldHVuZSE9PXZvaWQgMClyZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmdGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSh0aGlzLmRldHVuZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfWdldERldHVuZSgpe3JldHVybiB0aGlzLmRldHVuZX1nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLnNldEZpbHRlcnModD9bdF06W10pfXNldFBsYXliYWNrUmF0ZSh0KXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCx0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITE/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksITEpOnRoaXMubG9vcH1zZXRMb29wKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmxvb3A9dCx0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXN9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX07dmFyIE9oPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1lLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLGU9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdCs9ZVtpXTtyZXR1cm4gdC9lLmxlbmd0aH19LGtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pO2xldCByLHMsbztzd2l0Y2goZSl7Y2FzZSJxdWF0ZXJuaW9uIjpyPXRoaXMuX3NsZXJwLHM9dGhpcy5fc2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjpyPXRoaXMuX3NlbGVjdCxzPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkoaSo1KTticmVhaztkZWZhdWx0OnI9dGhpcy5fbGVycCxzPXRoaXMuX2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo1KX10aGlzLl9taXhCdWZmZXJSZWdpb249cix0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1zLHRoaXMuX3NldElkZW50aXR5PW8sdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LGUpe2xldCBpPXRoaXMuYnVmZmVyLHI9dGhpcy52YWx1ZVNpemUscz10KnIrcixvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihvPT09MCl7Zm9yKGxldCBhPTA7YSE9PXI7KythKWlbcythXT1pW2FdO289ZX1lbHNle28rPWU7bGV0IGE9ZS9vO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihpLHMsMCxhLHIpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1vfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxyLDAsdCxpKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgZT10aGlzLnZhbHVlU2l6ZSxpPXRoaXMuYnVmZmVyLHI9dCplK2Uscz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsbz10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxhPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHM8MSl7bGV0IGw9ZSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKGkscixsLDEtcyxlKX1vPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe2Euc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcsZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShlLHIpO2ZvcihsZXQgcz1pLG89cjtzIT09bzsrK3MpZVtzXT1lW3IrcyVpXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixzKXtpZihyPj0uNSlmb3IobGV0IG89MDtvIT09czsrK28pdFtlK29dPXRbaStvXX1fc2xlcnAodCxlLGkscil7RWUuc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIscyl7bGV0IG89dGhpcy5fd29ya0luZGV4KnM7RWUubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxvLHQsZSx0LGkpLEVlLnNsZXJwRmxhdCh0LGUsdCxlLHQsbyxyKX1fbGVycCh0LGUsaSxyLHMpe2xldCBvPTEtcjtmb3IobGV0IGE9MDthIT09czsrK2Epe2xldCBsPWUrYTt0W2xdPXRbbF0qbyt0W2krYV0qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLHMpe2ZvcihsZXQgbz0wO28hPT1zOysrbyl7bGV0IGE9ZStvO3RbYV09dFthXSt0W2krb10qcn19fSxlZj0iXFxbXFxdXFwuOlxcLyIsZlQ9bmV3IFJlZ0V4cCgiWyIrZWYrIl0iLCJnIiksbmY9IlteIitlZisiXSIsZFQ9IlteIitlZi5yZXBsYWNlKCJcXC4iLCIiKSsiXSIscFQ9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixuZiksbVQ9LyhXQ09EKyk/Ly5zb3VyY2UucmVwbGFjZSgiV0NPRCIsZFQpLGdUPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLG5mKSx4VD0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsbmYpLHlUPW5ldyBSZWdFeHAoIl4iK3BUK21UK2dUK3hUKyIkIiksdlQ9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0sSGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCByPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpO3RoaXMuX3RhcmdldEdyb3VwPXQsdGhpcy5fYmluZGluZ3M9dC5zdWJzY3JpYmVfKGUscil9Z2V0VmFsdWUodCxlKXt0aGlzLmJpbmQoKTtsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scj10aGlzLl9iaW5kaW5nc1tpXTtyIT09dm9pZCAwJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxOdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wYXRoPWUsdGhpcy5wYXJzZWRQYXRoPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpLHRoaXMubm9kZT1OdC5maW5kTm9kZSh0LHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fHQsdGhpcy5yb290Tm9kZT10LHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIHQmJnQuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgTnQuQ29tcG9zaXRlKHQsZSxpKTpuZXcgTnQodCxlLGkpfXN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKGZULCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUodCl7bGV0IGU9eVQuZXhlYyh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgaT17bm9kZU5hbWU6ZVsyXSxvYmplY3ROYW1lOmVbM10sb2JqZWN0SW5kZXg6ZVs0XSxwcm9wZXJ0eU5hbWU6ZVs1XSxwcm9wZXJ0eUluZGV4OmVbNl19LHI9aS5ub2RlTmFtZSYmaS5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHIhPT12b2lkIDAmJnIhPT0tMSl7bGV0IHM9aS5ub2RlTmFtZS5zdWJzdHJpbmcocisxKTt2VC5pbmRleE9mKHMpIT09LTEmJihpLm5vZGVOYW1lPWkubm9kZU5hbWUuc3Vic3RyaW5nKDAsciksaS5vYmplY3ROYW1lPXMpfWlmKGkucHJvcGVydHlOYW1lPT09bnVsbHx8aS5wcm9wZXJ0eU5hbWUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrdCk7cmV0dXJuIGl9c3RhdGljIGZpbmROb2RlKHQsZSl7aWYoIWV8fGU9PT0iInx8ZT09PSIuInx8ZT09PS0xfHxlPT09dC5uYW1lfHxlPT09dC51dWlkKXJldHVybiB0O2lmKHQuc2tlbGV0b24pe2xldCBpPXQuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShlKTtpZihpIT09dm9pZCAwKXJldHVybiBpfWlmKHQuY2hpbGRyZW4pe2xldCBpPWZ1bmN0aW9uKHMpe2ZvcihsZXQgbz0wO288cy5sZW5ndGg7bysrKXtsZXQgYT1zW29dO2lmKGEubmFtZT09PWV8fGEudXVpZD09PWUpcmV0dXJuIGE7bGV0IGw9aShhLmNoaWxkcmVuKTtpZihsKXJldHVybiBsfXJldHVybiBudWxsfSxyPWkodC5jaGlsZHJlbik7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fZ2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X3NldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9nZXRWYWx1ZV9kaXJlY3QodCxlKXt0W2VdPXRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXX1fZ2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpdFtlKytdPWlbcl19X2dldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RbZV09dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF19X2dldFZhbHVlX3RvQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheSh0LGUpfV9zZXRWYWx1ZV9kaXJlY3QodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXX1fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXT10W2UrK119X3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV19X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSl9X3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSksdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fZ2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuZ2V0VmFsdWUodCxlKX1fc2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5ub2RlLGU9dGhpcy5wYXJzZWRQYXRoLGk9ZS5vYmplY3ROYW1lLHI9ZS5wcm9wZXJ0eU5hbWUscz1lLnByb3BlcnR5SW5kZXg7aWYodHx8KHQ9TnQuZmluZE5vZGUodGhpcy5yb290Tm9kZSxlLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9dCksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgbm9kZSBmb3IgdHJhY2s6ICIrdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKTtyZXR1cm59aWYoaSl7bGV0IGM9ZS5vYmplY3RJbmRleDtzd2l0Y2goaSl7Y2FzZSJtYXRlcmlhbHMiOmlmKCF0Lm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO3JldHVybn1pZighdC5tYXRlcmlhbC5tYXRlcmlhbHMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTtyZXR1cm59dD10Lm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighdC5za2VsZXRvbil7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uIix0aGlzKTtyZXR1cm59dD10LnNrZWxldG9uLmJvbmVzO2ZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKWlmKHRbdV0ubmFtZT09PWMpe2M9dTticmVha31icmVhaztkZWZhdWx0OmlmKHRbaV09PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtyZXR1cm59dD10W2ldfWlmKGMhPT12b2lkIDApe2lmKHRbY109PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4iLHRoaXMsdCk7cmV0dXJufXQ9dFtjXX19bGV0IG89dFtyXTtpZihvPT09dm9pZCAwKXtsZXQgYz1lLm5vZGVOYW1lO2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrYysiLiIrcisiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIix0KTtyZXR1cm59bGV0IGE9dGhpcy5WZXJzaW9uaW5nLk5vbmU7dGhpcy50YXJnZXRPYmplY3Q9dCx0Lm5lZWRzVXBkYXRlIT09dm9pZCAwP2E9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlOnQubWF0cml4V29ybGROZWVkc1VwZGF0ZSE9PXZvaWQgMCYmKGE9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUpO2xldCBsPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHMhPT12b2lkIDApe2lmKHI9PT0ibW9ycGhUYXJnZXRJbmZsdWVuY2VzIil7aWYoIXQuZ2VvbWV0cnkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7cmV0dXJufWlmKHQuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7aWYoIXQuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTtyZXR1cm59dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10hPT12b2lkIDAmJihzPXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdKX1lbHNle2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIix0aGlzKTtyZXR1cm59fWw9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8sdGhpcy5wcm9wZXJ0eUluZGV4PXN9ZWxzZSBvLmZyb21BcnJheSE9PXZvaWQgMCYmby50b0FycmF5IT09dm9pZCAwPyhsPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8pOkFycmF5LmlzQXJyYXkobyk/KGw9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9byk6dGhpcy5wcm9wZXJ0eU5hbWU9cjt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtsXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbbF1bYV19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19O050LkNvbXBvc2l0ZT1IaDtOdC5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M307TnQucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn07TnQucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W050LnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LE50LnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksTnQucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsTnQucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XTtOdC5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW050LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV07dmFyIFZoPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy51dWlkPXRuKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7bGV0IHQ9e307dGhpcy5faW5kaWNlc0J5VVVJRD10O2ZvcihsZXQgaT0wLHI9YXJndW1lbnRzLmxlbmd0aDtpIT09cjsrK2kpdFthcmd1bWVudHNbaV0udXVpZF09aTt0aGlzLl9wYXRocz1bXSx0aGlzLl9wYXJzZWRQYXRocz1bXSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307bGV0IGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fWFkZCgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fcGF0aHMscj10aGlzLl9wYXJzZWRQYXRocyxzPXRoaXMuX2JpbmRpbmdzLG89cy5sZW5ndGgsYSxsPXQubGVuZ3RoLGM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCB1PTAsaD1hcmd1bWVudHMubGVuZ3RoO3UhPT1oOysrdSl7bGV0IGY9YXJndW1lbnRzW3VdLGQ9Zi51dWlkLGc9ZVtkXTtpZihnPT09dm9pZCAwKXtnPWwrKyxlW2RdPWcsdC5wdXNoKGYpO2ZvcihsZXQgeD0wLHY9bzt4IT09djsrK3gpc1t4XS5wdXNoKG5ldyBOdChmLGlbeF0sclt4XSkpfWVsc2UgaWYoZzxjKXthPXRbZ107bGV0IHg9LS1jLHY9dFt4XTtlW3YudXVpZF09Zyx0W2ddPXYsZVtkXT14LHRbeF09Zjtmb3IobGV0IG09MCxwPW87bSE9PXA7KyttKXtsZXQgYj1zW21dLF89Ylt4XSxTPWJbZ107YltnXT1fLFM9PT12b2lkIDAmJihTPW5ldyBOdChmLGlbbV0sclttXSkpLGJbeF09U319ZWxzZSB0W2ddIT09YSYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1jfXJlbW92ZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgbz0wLGE9YXJndW1lbnRzLmxlbmd0aDtvIT09YTsrK28pe2xldCBsPWFyZ3VtZW50c1tvXSxjPWwudXVpZCx1PWVbY107aWYodSE9PXZvaWQgMCYmdT49cyl7bGV0IGg9cysrLGY9dFtoXTtlW2YudXVpZF09dSx0W3VdPWYsZVtjXT1oLHRbaF09bDtmb3IobGV0IGQ9MCxnPXI7ZCE9PWc7KytkKXtsZXQgeD1pW2RdLHY9eFtoXSxtPXhbdV07eFt1XT12LHhbaF09bX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9dW5jYWNoZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfLG89dC5sZW5ndGg7Zm9yKGxldCBhPTAsbD1hcmd1bWVudHMubGVuZ3RoO2EhPT1sOysrYSl7bGV0IGM9YXJndW1lbnRzW2FdLHU9Yy51dWlkLGg9ZVt1XTtpZihoIT09dm9pZCAwKWlmKGRlbGV0ZSBlW3VdLGg8cyl7bGV0IGY9LS1zLGQ9dFtmXSxnPS0tbyx4PXRbZ107ZVtkLnV1aWRdPWgsdFtoXT1kLGVbeC51dWlkXT1mLHRbZl09eCx0LnBvcCgpO2ZvcihsZXQgdj0wLG09cjt2IT09bTsrK3Ype2xldCBwPWlbdl0sYj1wW2ZdLF89cFtnXTtwW2hdPWIscFtmXT1fLHAucG9wKCl9fWVsc2V7bGV0IGY9LS1vLGQ9dFtmXTtmPjAmJihlW2QudXVpZF09aCksdFtoXT1kLHQucG9wKCk7Zm9yKGxldCBnPTAseD1yO2chPT14OysrZyl7bGV0IHY9aVtnXTt2W2hdPXZbZl0sdi5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9c3Vic2NyaWJlXyh0LGUpe2xldCBpPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxyPWlbdF0scz10aGlzLl9iaW5kaW5ncztpZihyIT09dm9pZCAwKXJldHVybiBzW3JdO2xldCBvPXRoaXMuX3BhdGhzLGE9dGhpcy5fcGFyc2VkUGF0aHMsbD10aGlzLl9vYmplY3RzLGM9bC5sZW5ndGgsdT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPW5ldyBBcnJheShjKTtyPXMubGVuZ3RoLGlbdF09cixvLnB1c2godCksYS5wdXNoKGUpLHMucHVzaChoKTtmb3IobGV0IGY9dSxkPWwubGVuZ3RoO2YhPT1kOysrZil7bGV0IGc9bFtmXTtoW2ZdPW5ldyBOdChnLHQsZSl9cmV0dXJuIGh9dW5zdWJzY3JpYmVfKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxpPWVbdF07aWYoaSE9PXZvaWQgMCl7bGV0IHI9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxvPXRoaXMuX2JpbmRpbmdzLGE9by5sZW5ndGgtMSxsPW9bYV0sYz10W2FdO2VbY109aSxvW2ldPWwsby5wb3AoKSxzW2ldPXNbYV0scy5wb3AoKSxyW2ldPXJbYV0sci5wb3AoKX19fTtWaC5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cD0hMDt2YXIgR2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBzPWUudHJhY2tzLG89cy5sZW5ndGgsYT1uZXcgQXJyYXkobyksbD17ZW5kaW5nU3RhcnQ6TnIsZW5kaW5nRW5kOk5yfTtmb3IobGV0IGM9MDtjIT09bzsrK2Mpe2xldCB1PXNbY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7YVtjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPWEsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkobyksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPVp3LHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiZ0aGlzLnRpbWVTY2FsZSE9PTAmJnRoaXMuX3N0YXJ0VGltZT09PW51bGwmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxpKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksaSl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixzPXQuX2NsaXAuZHVyYXRpb24sbz1zL3IsYT1yL3M7dC53YXJwKDEsbyxlKSx0aGlzLndhcnAoYSwxLGUpfXJldHVybiB0aGlzfWNyb3NzRmFkZVRvKHQsZSxpKXtyZXR1cm4gdC5jcm9zc0ZhZGVGcm9tKHRoaXMsZSxpKX1zdG9wRmFkaW5nKCl7bGV0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixzPXIudGltZSxvPXRoaXMudGltZVNjYWxlLGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7YT09PW51bGwmJihhPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1hKTtsZXQgbD1hLnBhcmFtZXRlclBvc2l0aW9ucyxjPWEuc2FtcGxlVmFsdWVzO3JldHVybiBsWzBdPXMsbFsxXT1zK2ksY1swXT10L28sY1sxXT1lL28sdGhpc31zdG9wV2FycGluZygpe2xldCB0PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfWdldE1peGVyKCl7cmV0dXJuIHRoaXMuX21peGVyfWdldENsaXAoKXtyZXR1cm4gdGhpcy5fY2xpcH1nZXRSb290KCl7cmV0dXJuIHRoaXMuX2xvY2FsUm9vdHx8dGhpcy5fbWl4ZXIuX3Jvb3R9X3VwZGF0ZSh0LGUsaSxyKXtpZighdGhpcy5lbmFibGVkKXt0aGlzLl91cGRhdGVXZWlnaHQodCk7cmV0dXJufWxldCBzPXRoaXMuX3N0YXJ0VGltZTtpZihzIT09bnVsbCl7bGV0IGw9KHQtcykqaTtpZihsPDB8fGk9PT0wKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPWkqbH1lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7bGV0IG89dGhpcy5fdXBkYXRlVGltZShlKSxhPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihhPjApe2xldCBsPXRoaXMuX2ludGVycG9sYW50cyxjPXRoaXMuX3Byb3BlcnR5QmluZGluZ3M7c3dpdGNoKHRoaXMuYmxlbmRNb2RlKXtjYXNlIGQwOmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUoYSk7YnJlYWs7Y2FzZSBRaDpkZWZhdWx0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlKHIsYSl9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCBlPTA7aWYodGhpcy5lbmFibGVkKXtlPXRoaXMud2VpZ2h0O2xldCBpPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKGkhPT1udWxsKXtsZXQgcj1pLmV2YWx1YXRlKHQpWzBdO2UqPXIsdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLHI9PT0wJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9ZSxlfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7bGV0IGk9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aSE9PW51bGwmJihlKj1pLmV2YWx1YXRlKHQpWzBdLHQ+aS5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksZT09PTA/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSkpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZSxlfV91cGRhdGVUaW1lKHQpe2xldCBlPXRoaXMuX2NsaXAuZHVyYXRpb24saT10aGlzLmxvb3Ascj10aGlzLnRpbWUrdCxzPXRoaXMuX2xvb3BDb3VudCxvPWk9PT1KdztpZih0PT09MClyZXR1cm4gcz09PS0xP3I6byYmKHMmMSk9PT0xP2UtcjpyO2lmKGk9PT1Zdyl7cz09PS0xJiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpO3Q6e2lmKHI+PWUpcj1lO2Vsc2UgaWYocjwwKXI9MDtlbHNle3RoaXMudGltZT1yO2JyZWFrIHR9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKHM9PT0tMSYmKHQ+PTA/KHM9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLHRoaXMucmVwZXRpdGlvbnM9PT0wLG8pKTp0aGlzLl9zZXRFbmRpbmdzKHRoaXMucmVwZXRpdGlvbnM9PT0wLCEwLG8pKSxyPj1lfHxyPDApe2xldCBhPU1hdGguZmxvb3Ioci9lKTtyLT1lKmEscys9TWF0aC5hYnMoYSk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1zO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKGw9PT0xKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLG8pfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxvKTt0aGlzLl9sb29wQ291bnQ9cyx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6YX0pfX1lbHNlIHRoaXMudGltZT1yO2lmKG8mJihzJjEpPT09MSlyZXR1cm4gZS1yfXJldHVybiByfV9zZXRFbmRpbmdzKHQsZSxpKXtsZXQgcj10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2k/KHIuZW5kaW5nU3RhcnQ9RnIsci5lbmRpbmdFbmQ9RnIpOih0P3IuZW5kaW5nU3RhcnQ9dGhpcy56ZXJvU2xvcGVBdFN0YXJ0P0ZyOk5yOnIuZW5kaW5nU3RhcnQ9ZWwsZT9yLmVuZGluZ0VuZD10aGlzLnplcm9TbG9wZUF0RW5kP0ZyOk5yOnIuZW5kaW5nRW5kPWVsKX1fc2NoZWR1bGVGYWRpbmcodCxlLGkpe2xldCByPXRoaXMuX21peGVyLHM9ci50aW1lLG89dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bz09PW51bGwmJihvPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1vKTtsZXQgYT1vLnBhcmFtZXRlclBvc2l0aW9ucyxsPW8uc2FtcGxlVmFsdWVzO3JldHVybiBhWzBdPXMsbFswXT1lLGFbMV09cyt0LGxbMV09aSx0aGlzfX0sV2g9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3Jvb3Q9dCx0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpLHRoaXMuX2FjY3VJbmRleD0wLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTF9X2JpbmRBY3Rpb24odCxlKXtsZXQgaT10Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qscj10Ll9jbGlwLnRyYWNrcyxzPXIubGVuZ3RoLG89dC5fcHJvcGVydHlCaW5kaW5ncyxhPXQuX2ludGVycG9sYW50cyxsPWkudXVpZCxjPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSx1PWNbbF07dT09PXZvaWQgMCYmKHU9e30sY1tsXT11KTtmb3IobGV0IGg9MDtoIT09czsrK2gpe2xldCBmPXJbaF0sZD1mLm5hbWUsZz11W2RdO2lmKGchPT12b2lkIDApKytnLnJlZmVyZW5jZUNvdW50LG9baF09ZztlbHNle2lmKGc9b1toXSxnIT09dm9pZCAwKXtnLl9jYWNoZUluZGV4PT09bnVsbCYmKCsrZy5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZyxsLGQpKTtjb250aW51ZX1sZXQgeD1lJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW2hdLmJpbmRpbmcucGFyc2VkUGF0aDtnPW5ldyBraChOdC5jcmVhdGUoaSxkLHgpLGYuVmFsdWVUeXBlTmFtZSxmLmdldFZhbHVlU2l6ZSgpKSwrK2cucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGcsbCxkKSxvW2hdPWd9YVtoXS5yZXN1bHRCdWZmZXI9Zy5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKHQuX2NhY2hlSW5kZXg9PT1udWxsKXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQscyYmcy5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldO3MudXNlQ291bnQrKz09PTAmJih0aGlzLl9sZW5kQmluZGluZyhzKSxzLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fV9kZWFjdGl2YXRlQWN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldOy0tcy51c2VDb3VudD09PTAmJihzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKHMpKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19X2luaXRNZW1vcnlNYW5hZ2VyKCl7dGhpcy5fYWN0aW9ucz1bXSx0aGlzLl9uQWN0aXZlQWN0aW9ucz0wLHRoaXMuX2FjdGlvbnNCeUNsaXA9e30sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTAsdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9LHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W10sdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDtsZXQgdD10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9iaW5kaW5ncy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQmluZGluZ3N9fSxjb250cm9sSW50ZXJwb2xhbnRzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fY29udHJvbEludGVycG9sYW50cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQ29udHJvbEludGVycG9sYW50c319fX1faXNBY3RpdmVBY3Rpb24odCl7bGV0IGU9dC5fY2FjaGVJbmRleDtyZXR1cm4gZSE9PW51bGwmJmU8dGhpcy5fbkFjdGl2ZUFjdGlvbnN9X2FkZEluYWN0aXZlQWN0aW9uKHQsZSxpKXtsZXQgcj10aGlzLl9hY3Rpb25zLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPXNbZV07aWYobz09PXZvaWQgMClvPXtrbm93bkFjdGlvbnM6W3RdLGFjdGlvbkJ5Um9vdDp7fX0sdC5fYnlDbGlwQ2FjaGVJbmRleD0wLHNbZV09bztlbHNle2xldCBhPW8ua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9YS5sZW5ndGgsYS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9ci5sZW5ndGgsci5wdXNoKHQpLG8uYWN0aW9uQnlSb290W2ldPXR9X3JlbW92ZUluYWN0aXZlQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT1lW2UubGVuZ3RoLTFdLHI9dC5fY2FjaGVJbmRleDtpLl9jYWNoZUluZGV4PXIsZVtyXT1pLGUucG9wKCksdC5fY2FjaGVJbmRleD1udWxsO2xldCBzPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3NdLGw9YS5rbm93bkFjdGlvbnMsYz1sW2wubGVuZ3RoLTFdLHU9dC5fYnlDbGlwQ2FjaGVJbmRleDtjLl9ieUNsaXBDYWNoZUluZGV4PXUsbFt1XT1jLGwucG9wKCksdC5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2xldCBoPWEuYWN0aW9uQnlSb290LGY9KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZDtkZWxldGUgaFtmXSxsLmxlbmd0aD09PTAmJmRlbGV0ZSBvW3NdLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl9X3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl7bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9ZVtpXTstLXMucmVmZXJlbmNlQ291bnQ9PT0wJiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcocyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMscz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQscy5fY2FjaGVJbmRleD1pLGVbaV09c31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz10aGlzLl9iaW5kaW5ncyxvPXJbZV07bz09PXZvaWQgMCYmKG89e30scltlXT1vKSxvW2ldPXQsdC5fY2FjaGVJbmRleD1zLmxlbmd0aCxzLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxzPWkucGF0aCxvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxhPW9bcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIGFbc10sT2JqZWN0LmtleXMoYSkubGVuZ3RoPT09MCYmZGVsZXRlIG9bcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLHM9ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LHMuX2NhY2hlSW5kZXg9aSxlW2ldPXN9X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiBpPT09dm9pZCAwJiYoaT1uZXcgX2wobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMscz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LHMuX19jYWNoZUluZGV4PWksZVtpXT1zfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qscz1yLnV1aWQsbz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShyLHQpOnQsYT1vIT09bnVsbD9vLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV0sYz1udWxsO2lmKGk9PT12b2lkIDAmJihvIT09bnVsbD9pPW8uYmxlbmRNb2RlOmk9UWgpLGwhPT12b2lkIDApe2xldCBoPWwuYWN0aW9uQnlSb290W3NdO2lmKGghPT12b2lkIDAmJmguYmxlbmRNb2RlPT09aSlyZXR1cm4gaDtjPWwua25vd25BY3Rpb25zWzBdLG89PT1udWxsJiYobz1jLl9jbGlwKX1pZihvPT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdT1uZXcgR2godGhpcyxvLGUsaSk7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24odSxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih1LGEscyksdX1leGlzdGluZ0FjdGlvbih0LGUpe2xldCBpPWV8fHRoaXMuX3Jvb3Qscj1pLnV1aWQscz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShpLHQpOnQsbz1zP3MudXVpZDp0LGE9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvXTtyZXR1cm4gYSE9PXZvaWQgMCYmYS5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnMsZT10aGlzLl9uQWN0aXZlQWN0aW9ucztmb3IobGV0IGk9ZS0xO2k+PTA7LS1pKXRbaV0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXt0Kj10aGlzLnRpbWVTY2FsZTtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMscj10aGlzLnRpbWUrPXQscz1NYXRoLnNpZ24odCksbz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQscyxvKTtsZXQgYT10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2MpYVtjXS5hcHBseShvKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAscz1yW2ldO2lmKHMhPT12b2lkIDApe2xldCBvPXMua25vd25BY3Rpb25zO2ZvcihsZXQgYT0wLGw9by5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1vW2FdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxoPWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxoLl9jYWNoZUluZGV4PXUsZVt1XT1oLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IG8gaW4gaSl7bGV0IGE9aVtvXS5hY3Rpb25CeVJvb3QsbD1hW2VdO2whPT12b2lkIDAmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1yW2VdO2lmKHMhPT12b2lkIDApZm9yKGxldCBvIGluIHMpe2xldCBhPXNbb107YS5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhhKX19dW5jYWNoZUFjdGlvbih0LGUpe2xldCBpPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtpIT09bnVsbCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaSksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaSkpfX07V2gucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIFRvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBUbyh0aGlzLnZhbHVlLmNsb25lPT09dm9pZCAwP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19LHFoPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodCxlKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9aX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgZT1zdXBlci5jbG9uZSh0KTtyZXR1cm4gZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fTtxaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgWGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixzKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1lLHRoaXMuaXRlbVNpemU9aSx0aGlzLmVsZW1lbnRTaXplPXIsdGhpcy5jb3VudD1zLHRoaXMudmVyc2lvbj0wfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfXNldFR5cGUodCxlKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1lLHRoaXN9c2V0SXRlbVNpemUodCl7cmV0dXJuIHRoaXMuaXRlbVNpemU9dCx0aGlzfXNldENvdW50KHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319O1hoLnByb3RvdHlwZS5pc0dMQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBvMD1uZXcgSyxZaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBLKDEvMCwxLzApLGU9bmV3IEsoLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPW8wLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gbzAuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O1lpLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIGEwPW5ldyBULCRhPW5ldyBULFloPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0KSx0aGlzLmVuZC5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQuc3RhcnQpLHRoaXMuZW5kLmNvcHkodC5lbmQpLHRoaXN9Z2V0Q2VudGVyKHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5zdGFydCx0aGlzLmVuZCkubXVsdGlwbHlTY2FsYXIoLjUpfWRlbHRhKHQpe3JldHVybiB0LnN1YlZlY3RvcnModGhpcy5lbmQsdGhpcy5zdGFydCl9ZGlzdGFuY2VTcSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX1kaXN0YW5jZSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfWF0KHQsZSl7cmV0dXJuIHRoaXMuZGVsdGEoZSkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMuc3RhcnQpfWNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIodCxlKXthMC5zdWJWZWN0b3JzKHQsdGhpcy5zdGFydCksJGEuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtsZXQgaT0kYS5kb3QoJGEpLHM9JGEuZG90KGEwKS9pO3JldHVybiBlJiYocz1JZShzLDAsMSkpLHN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUsaSl7bGV0IHI9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQsZSk7cmV0dXJuIHRoaXMuZGVsdGEoaSkubXVsdGlwbHlTY2FsYXIocikuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTt2YXIgUW49bmV3IFQsS2E9bmV3IHd0LEZ1PW5ldyB3dCxaaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQpe2xldCBlPUQwKHQpLGk9bmV3IEh0LHI9W10scz1bXSxvPW5ldyBmdCgwLDAsMSksYT1uZXcgZnQoMCwxLDApO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtsZXQgdT1lW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihyLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMCkscy5wdXNoKG8ucixvLmcsby5iKSxzLnB1c2goYS5yLGEuZyxhLmIpKX1pLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShzLDMpKTtsZXQgbD1uZXcgem4oe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIoaSxsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1lLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCBlPXRoaXMuYm9uZXMsaT10aGlzLmdlb21ldHJ5LHI9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7RnUuY29weSh0aGlzLnJvb3QubWF0cml4V29ybGQpLmludmVydCgpO2ZvcihsZXQgcz0wLG89MDtzPGUubGVuZ3RoO3MrKyl7bGV0IGE9ZVtzXTthLnBhcmVudCYmYS5wYXJlbnQuaXNCb25lJiYoS2EubXVsdGlwbHlNYXRyaWNlcyhGdSxhLm1hdHJpeFdvcmxkKSxRbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oS2EpLHIuc2V0WFlaKG8sUW4ueCxRbi55LFFuLnopLEthLm11bHRpcGx5TWF0cmljZXMoRnUsYS5wYXJlbnQubWF0cml4V29ybGQpLFFuLnNldEZyb21NYXRyaXhQb3NpdGlvbihLYSksci5zZXRYWVoobysxLFFuLngsUW4ueSxRbi56KSxvKz0yKX1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIEQwKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsRDAobi5jaGlsZHJlbltlXSkpO3JldHVybiB0fXZhciBKaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxpPTQ0NzM5MjQscj04OTQ3ODQ4KXtpPW5ldyBmdChpKSxyPW5ldyBmdChyKTtsZXQgcz1lLzIsbz10L2UsYT10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLGQ9MCxnPS1hO2Y8PWU7ZisrLGcrPW8pe2wucHVzaCgtYSwwLGcsYSwwLGcpLGwucHVzaChnLDAsLWEsZywwLGEpO2xldCB4PWY9PT1zP2k6cjt4LnRvQXJyYXkoYyxkKSxkKz0zLHgudG9BcnJheShjLGQpLGQrPTMseC50b0FycmF5KGMsZCksZCs9Myx4LnRvQXJyYXkoYyxkKSxkKz0zfWxldCB1PW5ldyBIdDt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShjLDMpKTtsZXQgaD1uZXcgem4oe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX07dmFyIF9UPW5ldyBGbG9hdDMyQXJyYXkoMSksQ2s9bmV3IEludDMyQXJyYXkoX1QuYnVmZmVyKTtGZS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59O19vLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX07SmgucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX07WmgucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfTttbi5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLERoLmV4dHJhY3RVcmxCYXNlKG4pfTttbi5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX07WWkucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O1lpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07WWkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O1lpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX07R2UucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O0dlLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07R2UucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O0dlLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtHZS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9O3NpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtxci5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX07WWgucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpLHRoaXMuZ2V0Q2VudGVyKG4pfTtkZS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTtkZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07ZGUucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2RlLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9O3d0LnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKG4pfTt3dC5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTt3dC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbmV3IFQoKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9O3d0LnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKG4pfTt3dC5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4udHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfTt3dC5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKG4sdCxlLGkscixzKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKG4sdCxpLGUscixzKX07d3QucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShuKS5pbnZlcnQoKX07amUucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShuKX07RWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxuLmFwcGx5UXVhdGVybmlvbih0aGlzKX07RWUucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKG4pfTtvaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtyZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX07cmUucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQobix0KX07cmUucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQobil9O3JlLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKG4pfTtyZS5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShuKX07cmUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxyZS5nZXRCYXJ5Y29vcmQobix0LGUsaSxyKX07cmUubm9ybWFsPWZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIikscmUuZ2V0Tm9ybWFsKG4sdCxlLGkpfTtVbi5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhuKX07VW4ucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGNpKHRoaXMsbil9O1VuLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IHFpKHRoaXMsbil9O0sucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9O0sucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfTtLLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihuKX07VC5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShuKX07VC5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LG4pfTtULnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX07VC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07VC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9O1QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtXdC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07V3QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtrdC5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKG4pfTtrdC5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX07a3QucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LG4pfTtrdC5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9O2t0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGt0LnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1ufX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSk7b2UucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2UucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLCR3fSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7ZGwucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtTZS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWWUucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUXQucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09bmx9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShubCl9fX0pO1F0LnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKG49PT0hMD9ubDppbyksdGhpc307UXQucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUXQucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07SHQucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX07SHQucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBRdChhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOm49PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpfTtIdC5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe2UhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfTtIdC5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtIdC5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtIdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9O0h0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEh0LnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7R2kucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShuPT09ITA/bmw6aW8pLHRoaXN9O0dpLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07Y2kucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2NpLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtjaS5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1lyLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VG8ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeGUucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBmdH19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PWMwfX0sc3RlbmNpbE1hc2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFzaz1ufX0sdmVydGV4VGFuZ2VudHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZuLnByb3RvdHlwZSx7ZGVyaXZhdGl2ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM9bn19fSk7VnQucHJvdG90eXBlLmNsZWFyVGFyZ2V0PWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKSx0aGlzLnNldFJlbmRlclRhcmdldChuKSx0aGlzLmNsZWFyKHQsZSxpKX07VnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYW5pbWF0ZSgpIGlzIG5vdyAuc2V0QW5pbWF0aW9uTG9vcCgpLiIpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcChuKX07VnQucHJvdG90eXBlLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0Q3VycmVudFJlbmRlclRhcmdldCgpIGlzIG5vdyAuZ2V0UmVuZGVyVGFyZ2V0KCkuIiksdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX07VnQucHJvdG90eXBlLmdldE1heEFuaXNvdHJvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0TWF4QW5pc290cm9weSgpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKS4iKSx0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9O1Z0LnByb3RvdHlwZS5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0UHJlY2lzaW9uKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMucHJlY2lzaW9uLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbn07VnQucHJvdG90eXBlLnJlc2V0R0xTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5yZXNldEdMU3RhdGUoKSBpcyBub3cgLnN0YXRlLnJlc2V0KCkuIiksdGhpcy5zdGF0ZS5yZXNldCgpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0JsZW5kTWluTWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMoKSBpcyBub3cgLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcy4iKSx0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc307VnQucHJvdG90eXBlLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfTtWdC5wcm90b3R5cGUuZW5hYmxlU2Npc3NvclRlc3Q9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZW5hYmxlU2Npc3NvclRlc3QoKSBpcyBub3cgLnNldFNjaXNzb3JUZXN0KCkuIiksdGhpcy5zZXRTY2lzc29yVGVzdChuKX07VnQucHJvdG90eXBlLmluaXRNYXRlcmlhbD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5hZGRQcmVQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWRkUG9zdFBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFBvc3RQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUudXBkYXRlU2hhZG93TWFwPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldEZhY2VDdWxsaW5nPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWxsb2NUZXh0dXJlVW5pdD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFsbG9jVGV4dHVyZVVuaXQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZTJEPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZUN1YmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuZ2V0QWN0aXZlTWlwTWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuIiksdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhWdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9bn19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9bn19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPW49PT0hMD8kdDpyaX19LHRvbmVNYXBwaW5nV2hpdGVQb2ludDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpLDF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sZ2FtbWFGYWN0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpLDJ9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQwLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhOZS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSk7QmgucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4gbmV3IEZoKCkubG9hZChuLGZ1bmN0aW9uKGkpe3Quc2V0QnVmZmVyKGkpfSksdGhpc307T2gucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpLHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpfTthby5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfTthby5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX07Tm4uY3Jvc3NPcmlnaW49dm9pZCAwO05uLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IEVoO3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IHM9ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihzLm1hcHBpbmc9dCksc307Tm4ubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgU2g7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgcz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKHMubWFwcGluZz10KSxzfTtObi5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O05uLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTt0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246JGh9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSRoKTtmdW5jdGlvbiByZihuLHQsZSl7aWYoZT09PTEpcmV0dXJuIG5ldyBmdCh0KTtsZXQgaT1waSh0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke3R9YCk7cmV0dXJuIG5ldyBmdChzYyhpLG4pKDEtZSkpfXZhciBnbjsoZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0pKGdufHwoZ249e30pKTtmdW5jdGlvbiBOMChuLHQpe2xldCBlPXQubGVuZ3RoLzIsaT1uLmF0dHJpYnV0ZXMucG9zaXRpb247KCFpfHxpLmNvdW50IT09ZSozKSYmKGk9bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoZSozKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLGkpKTtsZXQgcj1pLmFycmF5O2ZvcihsZXQgcz0wO3M8ZTtzKyspcltzKjNdPXRbcyoyXSxyW3MqMysxXT10W3MqMisxXTtpLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsZSozKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIEYwKG4sdCxlKXtsZXQgaT1NYXRoLm1heCh0Lmxlbmd0aC8yLTEsMCkscj1pKjIqMyxzPXIqMyxvPW4uYXR0cmlidXRlcy5wb3NpdGlvbjsoIW98fG8uY291bnQhPT1yKSYmKG89bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkocyksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixvKSk7bGV0IGE9by5hcnJheTtmb3IobGV0IGw9MDtsPGk7bCsrKXtsZXRbYyx1LGgsZl09W3RbMipsXSx0WzIqbCsxXSx0WzIqbCsyXSx0WzIqbCszXV0sZD1uZXcgSyhjLHUpLGc9bmV3IEsoaCxmKSx4PW5ldyBLKGgtYyxmLXUpLHY9bmV3IEsoLXgueSx4LngpLnNldExlbmd0aChlLzIpLG09ZC5jbG9uZSgpLmFkZCh2KSxwPWQuY2xvbmUoKS5zdWIodiksYj1nLmNsb25lKCkuYWRkKHYpLF89Zy5jbG9uZSgpLnN1Yih2KSxTPVttLngsbS55LDAscC54LHAueSwwLGIueCxiLnksMCxiLngsYi55LDAscC54LHAueSwwLF8ueCxfLnksMF07YS5zZXQoUyxsKlMubGVuZ3RoKX1vLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAscyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBJbChuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOnMsb3BhY2l0eTpvfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1yZihuLHMsbyE9bnVsbD9vOjEpLGM9ZSh0Lmdlb21ldHJ5KTtyZXR1cm4gdC5nZW9tZXRyeSE9PWMmJih0Lmdlb21ldHJ5PWMpLGEuY29sb3IuZXF1YWxzKGwpfHwoYS5jb2xvci5zZXQobCksYS5uZWVkc1VwZGF0ZT0hMCksITB9dmFyIHdUPXtjcmVhdGVTY2VuZTooKT0+bmV3IFlyfSxSbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT13VC5jcmVhdGVTY2VuZSgpLHRoaXMuYmFja2dyb3VuZENvbG9yPSIjZmZmIixEaS5pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpJiZ0IGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzJiYodC5zdHlsZT10LnN0eWxlfHx7fSksciYmdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixyKSx0aGlzLnJlbmRlcmVyPW5ldyBWdCh7Y2FudmFzOnQsYW50aWFsaWFzOiEwLGFscGhhOiEwfSksdGhpcy5yZW5kZXJlci5zZXRQaXhlbFJhdGlvKGkpfW9uUmVzaXplKHQpe3RoaXMucmVuZGVyZXIuc2V0U2l6ZSh0LndpZHRoLHQuaGVpZ2h0KX1kZXN0cm95T2JqZWN0KHQpe2xldCBlPXQub2JqM2Q7aWYodGhpcy5zY2VuZS5yZW1vdmUoZSksZSBpbnN0YW5jZW9mIG9lKXtlLmdlb21ldHJ5LmRpc3Bvc2UoKTtsZXQgaT1BcnJheS5pc0FycmF5KGUubWF0ZXJpYWwpP2UubWF0ZXJpYWw6W2UubWF0ZXJpYWxdO2ZvcihsZXQgciBvZiBpKXIuZGlzcG9zZSgpfX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLmJhY2tncm91bmRDb2xvcj10PyIjMzAzMDMwIjoiI2ZmZiJ9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXt2YXIgdTtpZighdCYmIWkudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTpyLHdpZHRoOnN9PWk7aWYoIXQpe2xldCBoPXJmKHRoaXMuYmFja2dyb3VuZENvbG9yLGkuY29sb3IsKHU9aS5vcGFjaXR5KSE9bnVsbD91OjEpLGY9bmV3IEh0LGQ9bmV3IHpuKHtjb2xvcjpofSksZz1uZXcgb2UoZixkKTtyZXR1cm4gZC52aXNpYmxlPXIsRjAoZixlLHMpLHRoaXMuc2NlbmUuYWRkKGcpLHt0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmcsd2lkdGg6c319bGV0e2RhdGE6byxvYmozZDphLHdpZHRoOmx9PXQ7cmV0dXJuIElsKHRoaXMuYmFja2dyb3VuZENvbG9yLGEsaD0+KChzIT09bHx8IW98fCFEaS5hcmVQb2x5bGluZXNFcXVhbChvLGUpKSYmRjAoaCxlLHMpLGgpLGkpP3t0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmEsd2lkdGg6c306dH1jcmVhdGVNZXNoKHQsZSl7aWYoIWUudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTppLGNvbG9yOnIsb3BhY2l0eTpzfT1lLG89cmYodGhpcy5iYWNrZ3JvdW5kQ29sb3IscixzIT1udWxsP3M6MSksYT1uZXcga2koe2NvbG9yOm8sdmlzaWJsZTppfSk7cmV0dXJuIG5ldyBvZSh0LGEpfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLGkpe2xldHtzaXplOnJ9PWkscz1yKk1hdGguc3FydCgzKS8yLG89bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnktcy8zLGUueCtyLzIsZS55LXMvMyxlLngsZS55K3MqMi8zXSk7aWYoIXQpe2xldCBsPW5ldyBIdDtOMChsLG8pO2xldCBjPXRoaXMuY3JlYXRlTWVzaChsLGkpO3JldHVybiBjPT09bnVsbD9udWxsOih0aGlzLnNjZW5lLmFkZChjKSx7dHlwZTpnbi5UUklBTkdMRSxkYXRhOmUsb2JqM2Q6Y30pfXJldHVybiBJbCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLGw9PihOMChsLG8pLGwpLGkpP3t0eXBlOmduLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWkscz1uZXcgWnIoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gocyxpKTtyZXR1cm4gYT09PW51bGw/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+cyxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnN9PXIsbz0yL01hdGguc3FydCgzKSpzLGE9bmV3IFVuKFtuZXcgSyhlLngtby8yLGUueS1zLzIpLG5ldyBLKGUueCxlLnkrcy8yKSxuZXcgSyhpLngsaS55K3MvMiksbmV3IEsoaS54K28vMixpLnktcy8yKV0pO2EuYXV0b0Nsb3NlPSEwO2xldCBsPW5ldyBxaShhKTtpZighdCl7bGV0IHU9dGhpcy5jcmVhdGVNZXNoKGwscik7cmV0dXJuIHU9PT1udWxsP251bGw6KHRoaXMuc2NlbmUuYWRkKHUpLHt0eXBlOmduLlRSQVBFWk9JRCxkYXRhOltlLGldLG9iajNkOnV9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+bCxyKT97dHlwZTpnbi5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp0Lm9iajNkfTp0fWZsdXNoKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNvb3JkaW5hdG9yLmdldENhbWVyYSgpKX1kaXNwb3NlKCl7dGhpcy5yZW5kZXJlci5kaXNwb3NlKCl9fTt2YXIgTmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJlbmRlckNhY2hlPXQsdGhpcy5yZW5kZXJlcj1lfXNldExpbmUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJpYW5nbGUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldENpcmNsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldFRyYXBlem9pZCh0LGUsaSxyKXtsZXQgcz10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpLHIpO3MmJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxzKX19O3ZhciBzZj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7bGV0IGU9dGhpcy5wcmV2RnJhbWVDYWNoZS5nZXQodCk7cmV0dXJuIGUhPW51bGw/ZTpudWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LEZsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucmF3U2VyaWVzRGF0YT1bXSx0aGlzLnNlcmllcz1bXSx0aGlzLnBhaW50RGlydHk9ITAsdGhpcy5yZW5kZXJDYWNoZT1uZXcgc2YsdGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj1udWxsLHRoaXMubGF5b3V0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsPXQuZ2V0TWV0YWRhdGFNYXAsdGhpcy5jb29yZGluYXRvcj10LmNvb3JkaW5hdG9yLHRoaXMucmVuZGVyZXI9dC5yZW5kZXJlcix0aGlzLnBhaW50QnJ1c2g9bmV3IE5sKHRoaXMucmVuZGVyQ2FjaGUsdGhpcy5yZW5kZXJlcil9c2V0TGF5b3V0UmVjdCh0KXsodGhpcy5sYXlvdXQueCE9PXQueHx8dGhpcy5sYXlvdXQud2lkdGghPT10LndpZHRofHx0aGlzLmxheW91dC55IT09dC55fHx0aGlzLmxheW91dC5oZWlnaHQhPT10LmhlaWdodCkmJih0aGlzLnBhaW50RGlydHk9ITApLHRoaXMubGF5b3V0PXR9Z2V0TGF5b3V0UmVjdCgpe3JldHVybiB0aGlzLmxheW91dH1nZXRNZXRhZGF0YU1hcCgpe3JldHVybiB0aGlzLmdldE1ldGFkYXRhTWFwSW1wbCgpfW1hcmtBc1BhaW50RGlydHkoKXt0aGlzLnBhaW50RGlydHk9ITB9cmVuZGVyKCl7aWYodGhpcy50cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKSwhIXRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheShpLnBvaW50cy5sZW5ndGgqMil9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W3Msb109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lW3IqMl09cyx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVtyKjIrMV09b319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19O3ZhciBMbzsoZnVuY3Rpb24obil7bltuLk5VTUJFUj0wXT0iTlVNQkVSIixuW24uTkFOPTFdPSJOQU4ifSkoTG98fChMbz17fSkpO3ZhciB6bD1jbGFzcyBleHRlbmRzIEZse3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6TG8uTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOkxvLk5BTixwb2x5bGluZTplLm1hcCgocixzKT0+aXNOYU4ocik/cyUyPT09MD9pLng6aS55OnIpfX1wYXJ0aXRpb25Qb2x5bGluZSh0KXtsZXQgZT1bXSxpPTAscj0hMSxzPXRoaXMuY29vcmRpbmF0b3IudHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0aGlzLmdldExheW91dFJlY3QoKSxbMCwwXSksbz17eDpzWzBdLHk6c1sxXX0sYT1udWxsO2ZvcihsZXQgbD0wO2w8dC5sZW5ndGg7bCs9Mil7bGV0IGM9dFtsXSx1PXRbbCsxXSxoPWlzTmFOKGMpfHxpc05hTih1KTtoIT09ciYmaSE9PWwmJihlLnB1c2godGhpcy5yZWNvcmRQYXJ0aXRpb24oIXIsdC5zbGljZShpLGwpLGE9PT1udWxsP3t4OmMseTp1fTphKSksaT1sKSxofHwoYT17eDpjLHk6dX0pLHI9aH1yZXR1cm4gaSE9PXQubGVuZ3RoLTEmJmUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksdC5sZW5ndGgpLGEhPW51bGw/YTpvKSksZX1yZWRyYXcoKXt2YXIgdCxlLGk7Zm9yKGxldCByIG9mIHRoaXMuc2VyaWVzKXtsZXQgbz10aGlzLmdldE1ldGFkYXRhTWFwKClbci5pZF07aWYoIW8pY29udGludWU7aWYoci5wb2x5bGluZS5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGF2ZSBvZGQgbGVuZ3RoLWVkIHBvbHlsaW5lOiAke3IucG9seWxpbmUubGVuZ3RofWApO2xldCBhPXRoaXMucGFydGl0aW9uUG9seWxpbmUoci5wb2x5bGluZSk7Zm9yKGxldFtsLHt0eXBlOmMscG9seWxpbmU6dX1db2YgYS5lbnRyaWVzKCkpaWYoYz09PUxvLk5VTUJFUil1Lmxlbmd0aD09PTI/dGhpcy5wYWludEJydXNoLnNldENpcmNsZShKU09OLnN0cmluZ2lmeShbImNpcmNsZSIsci5pZCxsXSkse3g6dVswXSx5OnVbMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KHQ9by5vcGFjaXR5KSE9bnVsbD90OjEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHIuaWQsbF0pLHUse2NvbG9yOm8uY29sb3IsdmlzaWJsZTpvLnZpc2libGUsb3BhY2l0eTooZT1vLm9wYWNpdHkpIT1udWxsP2U6MSx3aWR0aDoyfSk7ZWxzZSBpZighby5hdXgpZm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKz0yKXRoaXMucGFpbnRCcnVzaC5zZXRUcmlhbmdsZShKU09OLnN0cmluZ2lmeShbIk5hTiIsci5pZCx1W2hdLHVbaCsxXV0pLHt4OnVbaF0seTp1W2grMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KGk9by5vcGFjaXR5KSE9bnVsbD9pOjEsc2l6ZToxMn0pfX19O3ZhciBVbD1jbGFzcyBleHRlbmRzIGRye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNhbWVyYT1uZXcgVmkoMCwxZTMsMWUzLDAsMCwxMDApfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiExfXNldERvbUNvbnRhaW5lclJlY3QodCl7c3VwZXIuc2V0RG9tQ29udGFpbmVyUmVjdCh0KSx0aGlzLmNhbWVyYS5sZWZ0PXQueCx0aGlzLmNhbWVyYS5yaWdodD10LngrdC53aWR0aCx0aGlzLmNhbWVyYS50b3A9dC55K3QuaGVpZ2h0LHRoaXMuY2FtZXJhLmJvdHRvbT10LnksdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldENhbWVyYSgpe3JldHVybiB0aGlzLmNhbWVyYX19O3ZhciBNVD17cmVxdWVzdEFuaW1hdGlvbkZyYW1lOm49PnNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSxCbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIFRuLlNWRzp7dGhpcy5jb29yZGluYXRvcj1uZXcgZHIsdGhpcy5yZW5kZXJlcj1uZXcgT3ModC5jb250YWluZXIpO2JyZWFrfWNhc2UgVG4uV0VCR0w6e2xldCBlPW5ldyBVbDt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5yZW5kZXJlcj1uZXcgUm8odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgemwoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoZnIodCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShmcih0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KE5vKHt4OjAseTowfSx0KSksdGhpcy5yZW5kZXJlci5vblJlc2l6ZShObyh7eDowLHk6MH0sdCkpLHRoaXMuc2VyaWVzTGluZVZpZXcuc2V0TGF5b3V0UmVjdCh1ZihObyh7fSx0KSx7eDowLHk6MH0pKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldE1ldGFkYXRhKHQpe2xldCBlPSExO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtpLHJdKT0+e2xldCBzPXRoaXMubWV0YWRhdGFNYXBbaV07KCFzfHxyLmNvbG9yIT09cy5jb2xvcnx8ci52aXNpYmxlIT09cy52aXNpYmxlfHxyLm9wYWNpdHkhPT1zLm9wYWNpdHkpJiYoZT0hMCksdGhpcy5tZXRhZGF0YU1hcFtpXT1yfSksZSYmdGhpcy5zZXJpZXNMaW5lVmlldy5tYXJrQXNQYWludERpcnR5KCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRWaWV3Qm94KHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0Vmlld0JveFJlY3Qoe3g6dC54WzBdLHdpZHRoOnQueFsxXS10LnhbMF0seTp0LnlbMF0saGVpZ2h0OnQueVsxXS10LnlbMF19KSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldERhdGEodCl7dGhpcy5zZXJpZXNMaW5lVmlldy5zZXREYXRhKHQpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0VXNlRGFya01vZGUodCl7dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0KSx0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNjaGVkdWxlUmVwYWludCgpe3RoaXMuc2hvdWxkUmVwYWludHx8KHRoaXMuc2hvdWxkUmVwYWludD0hMCxNVC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnJlcGFpbnQoKSx0aGlzLnNob3VsZFJlcGFpbnQ9ITF9KSl9cmVwYWludCgpe3RoaXMuc2VyaWVzTGluZVZpZXcucmVuZGVyKCksdGhpcy5yZW5kZXJlci5mbHVzaCgpLHRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpfX07ZnVuY3Rpb24gejAobil7bGV0e2ZsYXR0ZW5lZFNlcmllczp0LGlkc0FuZExlbmd0aHM6ZX09bixpPW5ldyBGbG9hdDY0QXJyYXkodCkscj1bXTtpZihpLmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoImBmbGF0dGVuZWRTZXJpZXNgIG11c3QgaGF2ZSBldmVuIG51bWJlciBvZiBlbGVtZW50cyIpO2xldCBzPTA7Zm9yKGxldHtpZDpvLGxlbmd0aDphfW9mIGUpe2xldCBsPVtdO2ZvcihsZXQgYz0wO2M8YTtjKyspbC5wdXNoKHt4OmlbcysrXSx5OmlbcysrXX0pO3IucHVzaCh7aWQ6byxwb2ludHM6bH0pfXJldHVybiByfXZhciB4bjsoZnVuY3Rpb24obil7bltuLlNFUklFU19EQVRBX1VQREFURUQ9MF09IlNFUklFU19EQVRBX1VQREFURUQiLG5bbi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRD0xXT0iU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQiLG5bbi5TQ0FMRV9VUERBVEVEPTJdPSJTQ0FMRV9VUERBVEVEIixuW24uVklFV19CT1hfVVBEQVRFRD0zXT0iVklFV19CT1hfVVBEQVRFRCIsbltuLklOSVQ9NF09IklOSVQiLG5bbi5ET01fUkVTSVpFRD01XT0iRE9NX1JFU0laRUQiLG5bbi5EQVJLX01PREVfVVBEQVRFRD02XT0iREFSS19NT0RFX1VQREFURUQiLG5bbi5ESVNQT1NFRD03XT0iRElTUE9TRUQifSkoeG58fCh4bj17fSkpO3ZhciBQbzsoZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KShQb3x8KFBvPXt9KSk7c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57YlQobi5wb3J0c1swXSxuLmRhdGEpfSk7ZnVuY3Rpb24gYlQobix0KXtsZXR7Y2FudmFzOmUsZGV2aWNlUGl4ZWxSYXRpbzppLGRpbTpyLHJlbmRlcmVyVHlwZTpzLHVzZURhcmtNb2RlOm99PXQsYT17b25EcmF3RW5kOigpPT57bi5wb3N0TWVzc2FnZSh7dHlwZTpQby5PTl9SRURSQVdfRU5EfSl9LG9uQ29udGV4dExvc3Q6KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOlBvLk9OX0NPTlRFWFRfTE9TVH0pfX0sbDtzd2l0Y2gocyl7Y2FzZSBUbi5XRUJHTDpsPXt0eXBlOlRuLldFQkdMLGRvbURpbWVuc2lvbjpyLGNhbGxiYWNrczphLGNvbnRhaW5lcjplLGRldmljZVBpeGVsUmF0aW86aSx1c2VEYXJrTW9kZTpvfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGNhbm5vdCBoYXZlIE9mZnNjcmVlbiBjaGFydCBmb3IgcmVuZGVyZXIgdHlwZTogJHtzfWApfWxldCBjPW5ldyBCbChsKTtuLm9ubWVzc2FnZT1mdW5jdGlvbih1KXtsZXQgaD11LmRhdGE7c3dpdGNoKGgudHlwZSl7Y2FzZSB4bi5TRVJJRVNfREFUQV9VUERBVEVEOntsZXQgZj16MChoLmNvbXBhY3REYXRhU2VyaWVzKTtjLnNldERhdGEoZik7YnJlYWt9Y2FzZSB4bi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRDp7Yy5zZXRNZXRhZGF0YShoLm1ldGFkYXRhKTticmVha31jYXNlIHhuLlZJRVdfQk9YX1VQREFURUQ6e2Muc2V0Vmlld0JveChoLmV4dGVudCk7YnJlYWt9Y2FzZSB4bi5ET01fUkVTSVpFRDp7Yy5yZXNpemUoaC5kaW0pO2JyZWFrfWNhc2UgeG4uREFSS19NT0RFX1VQREFURUQ6e2Muc2V0VXNlRGFya01vZGUoaC51c2VEYXJrTW9kZSk7YnJlYWt9Y2FzZSB4bi5TQ0FMRV9VUERBVEVEOntzd2l0Y2goaC5heGlzKXtjYXNlIngiOmMuc2V0WFNjYWxlVHlwZShoLnNjYWxlVHlwZSk7YnJlYWs7Y2FzZSJ5IjpjLnNldFlTY2FsZVR5cGUoaC5zY2FsZVR5cGUpO2JyZWFrO2RlZmF1bHQ6bGV0IGY9aC5heGlzO3Rocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIGF4aXM6ICR7Zn1gKX1icmVha31jYXNlIHhuLkRJU1BPU0VEOntjLmRpc3Bvc2UoKTticmVha319fX19KSgpOwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTAtMjAyMiBUaHJlZS5qcyBBdXRob3JzCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICovCi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoYXJ0X3dvcmtlci5qcy5tYXAK", + "ok": true, + "headers": [ + [ + "content-type", + "text/javascript; charset=utf-8" + ] + ], + "status": 200, + "status_text": "" + } + }, + "base_uri": "https://localhost:8080/", + "height": 821 + }, + "id": "MD7xsURDMNS7", + "outputId": "7b8f2484-062e-47fa-da47-9de26a9e59dc" + }, + "execution_count": 74, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\n", + " (async () => {\n", + " const url = new URL(await google.colab.kernel.proxyPort(6006, {'cache': true}));\n", + " url.searchParams.set('tensorboardColab', 'true');\n", + " const iframe = document.createElement('iframe');\n", + " iframe.src = url;\n", + " iframe.setAttribute('width', '100%');\n", + " iframe.setAttribute('height', '800');\n", + " iframe.setAttribute('frameborder', 0);\n", + " document.body.appendChild(iframe);\n", + " })();\n", + " " + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "execution_count": 75, "metadata": { "id": "u_OCtijuI7gv" }, @@ -5736,7 +6030,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 76, "metadata": { "id": "dy4FuwhrLKzr" }, @@ -5760,7 +6054,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 77, "metadata": { "id": "a4zeQFbF9XLm" }, @@ -5804,10 +6098,7 @@ "colab": { "machine_shape": "hm", "provenance": [], - "gpuType": "V100", - "mount_file_id": "1alsWE48suOuUXaoAJQpo3-kuU2UJYXKR", - "authorship_tag": "ABX9TyObfpBhwmNpqCwlzBRknm+c", - "include_colab_link": true + "gpuType": "T4" }, "kernelspec": { "display_name": "Python 3", diff --git a/06_transfer_learning_in_tensorflow_part_3_scaling_up.ipynb b/06_transfer_learning_in_tensorflow_part_3_scaling_up.ipynb index 1137434..5a50d87 100644 --- a/06_transfer_learning_in_tensorflow_part_3_scaling_up.ipynb +++ b/06_transfer_learning_in_tensorflow_part_3_scaling_up.ipynb @@ -5,10 +5,7 @@ "colab": { "provenance": [], "machine_shape": "hm", - "gpuType": "A100", - "mount_file_id": "1WbPqk3XTXrHdu181_3KgdtU5EY3CteNM", - "authorship_tag": "ABX9TyNY6pm5bSDVhJC3Z1vQ1GUI", - "include_colab_link": true + "gpuType": "A100" }, "kernelspec": { "name": "python3", @@ -21,8 +18,7 @@ { "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "id": "view-in-github" }, "source": [ "\"Open" @@ -75,9 +71,9 @@ "\n", "Don't worry if you make mistakes, we all do. The way to get better and make less mistakes is to **write more code**.\n", "\n", - "> 📖 **Resources:** \n", + "> 📖 **Resources:**\n", "> * See the full set of course materials on GitHub: https://github.com/mrdbourke/tensorflow-deep-learning\n", - "> * See updates for this notebook here: https://github.com/mrdbourke/tensorflow-deep-learning/discussions/549 " + "> * See updates for this notebook here: https://github.com/mrdbourke/tensorflow-deep-learning/discussions/549" ] }, { @@ -90,11 +86,11 @@ "outputId": "9ac3e7c3-3eb7-4344-f8e9-af5583fd7da6" }, "source": [ - "# Are we using a GPU? \n", + "# Are we using a GPU?\n", "# If not, and you're in Google Colab, go to Runtime -> Change runtime type -> Hardware accelerator -> GPU\n", "!nvidia-smi" ], - "execution_count": 1, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -124,6 +120,32 @@ } ] }, + { + "cell_type": "code", + "source": [ + "# Settings Tensorboard\n", + "\n", + "# Load the TensorBoard notebook extension\n", + "%load_ext tensorboard" + ], + "metadata": { + "id": "KOeQi-H5MgdK" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Clear any logs from previous runs\n", + "!rm -rf ./logs/" + ], + "metadata": { + "id": "qT1CL83nMmHl" + }, + "execution_count": null, + "outputs": [] + }, { "cell_type": "code", "source": [ @@ -137,7 +159,7 @@ "id": "pCN9joRSpsbw", "outputId": "497639be-27cc-4540-821e-6f3db1908ed8" }, - "execution_count": 2, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -172,7 +194,7 @@ "# Get helper functions file\n", "!wget https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/helper_functions.py" ], - "execution_count": 3, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -193,6 +215,29 @@ } ] }, + { + "cell_type": "code", + "source": [ + "# New TensorBoard\n", + "\n", + "# Create tensorboard callback (functionized because need to create a new one for each model)\n", + "import datetime\n", + "import os\n", + "def create_tensorboard_callback(experiment_name):\n", + " logfit_dir = \"logs/fit/\"\n", + " path_experiment = os.path.join(logfit_dir, experiment_name, datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\"))\n", + " tensorboard_callback = tf.keras.callbacks.TensorBoard(\n", + " log_dir=path_experiment\n", + " )\n", + " print(f\"Saving TensorBoard log files to: {logfit_dir}\")\n", + " return tensorboard_callback" + ], + "metadata": { + "id": "UI7lWGINMbcT" + }, + "execution_count": null, + "outputs": [] + }, { "cell_type": "code", "metadata": { @@ -200,9 +245,9 @@ }, "source": [ "# Import series of helper functions for the notebook (we've created/used these in previous notebooks)\n", - "from helper_functions import create_tensorboard_callback, plot_loss_curves, unzip_data, compare_historys, walk_through_dir" + "from helper_functions import plot_loss_curves, unzip_data, compare_historys, walk_through_dir" ], - "execution_count": 4, + "execution_count": null, "outputs": [] }, { @@ -246,14 +291,14 @@ }, "source": [ "# Download data from Google Storage (already preformatted)\n", - "!wget https://storage.googleapis.com/ztm_tf_course/food_vision/101_food_classes_10_percent.zip \n", + "!wget https://storage.googleapis.com/ztm_tf_course/food_vision/101_food_classes_10_percent.zip\n", "\n", "unzip_data(\"101_food_classes_10_percent.zip\")\n", "\n", "train_dir = \"101_food_classes_10_percent/train/\"\n", "test_dir = \"101_food_classes_10_percent/test/\"" ], - "execution_count": 5, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -287,7 +332,7 @@ "# How many images/classes are there?\n", "walk_through_dir(\"101_food_classes_10_percent\")" ], - "execution_count": 6, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -556,13 +601,13 @@ "train_data_all_10_percent = tf.keras.preprocessing.image_dataset_from_directory(train_dir,\n", " label_mode=\"categorical\",\n", " image_size=IMG_SIZE)\n", - " \n", + "\n", "test_data = tf.keras.preprocessing.image_dataset_from_directory(test_dir,\n", " label_mode=\"categorical\",\n", " image_size=IMG_SIZE,\n", " shuffle=False) # don't shuffle test data for prediction analysis" ], - "execution_count": 7, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -580,7 +625,7 @@ "id": "GRWVadimqFeg" }, "source": [ - "Wonderful! It looks like our data has been imported as expected with 75 images per class in the training set (75 images * 101 classes = 7575 images) and 25250 images in the test set (250 images * 101 classes = 25250 images). \n", + "Wonderful! It looks like our data has been imported as expected with 75 images per class in the training set (75 images * 101 classes = 7575 images) and 25250 images in the test set (250 images * 101 classes = 25250 images).\n", "\n", "\n", "## Train a big dog model with transfer learning on 10% of 101 food classes\n", @@ -600,7 +645,7 @@ "\n", "It seems like a lot but these are all things we've covered before in the [Transfer Learning in TensorFlow Part 2: Fine-tuning notebook](https://github.com/mrdbourke/tensorflow-deep-learning/blob/main/05_transfer_learning_in_tensorflow_part_2_fine_tuning.ipynb).\n", "\n", - "Let's start by creating the `ModelCheckpoint` callback. \n", + "Let's start by creating the `ModelCheckpoint` callback.\n", "\n", "Since we want our model to perform well on unseen data we'll set it to monitor the validation accuracy metric and save the model weights which score the best on that." ] @@ -618,7 +663,7 @@ " monitor=\"val_accuracy\", # save the model weights which score the best validation accuracy\n", " save_best_only=True) # only keep the best model weights on file (delete the rest)" ], - "execution_count": 8, + "execution_count": null, "outputs": [] }, { @@ -662,7 +707,7 @@ "# # preprocessing.Rescaling(1./255) # keep for models like ResNet50V2, remove for EfficientNet\n", "# ], name=\"data_augmentation\")" ], - "execution_count": 9, + "execution_count": null, "outputs": [] }, { @@ -700,7 +745,7 @@ "outputs = layers.Dense(len(train_data_all_10_percent.class_names), activation=\"softmax\", name=\"output_layer\")(x) # same number of outputs as classes\n", "model = tf.keras.Model(inputs, outputs)" ], - "execution_count": 10, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -737,7 +782,7 @@ "# Get a summary of our model\n", "model.summary()" ], - "execution_count": 11, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -803,7 +848,7 @@ " validation_steps=int(0.15 * len(test_data)), # evaluate on smaller portion of test data\n", " callbacks=[checkpoint_callback]) # save best model weights to file" ], - "execution_count": 12, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -842,11 +887,11 @@ "outputId": "712e6988-1c0e-4cc9-d979-717eb1d2cf60" }, "source": [ - "# Evaluate model \n", + "# Evaluate model\n", "results_feature_extraction_model = model.evaluate(test_data)\n", "results_feature_extraction_model" ], - "execution_count": 13, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -891,7 +936,7 @@ "source": [ "plot_loss_curves(history_all_classes_10_percent)" ], - "execution_count": 14, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -954,7 +999,7 @@ "for layer in base_model.layers[:-5]:\n", " layer.trainable = False" ], - "execution_count": 15, + "execution_count": null, "outputs": [] }, { @@ -984,7 +1029,7 @@ " optimizer=tf.keras.optimizers.Adam(1e-4), # 10x lower learning rate than default\n", " metrics=['accuracy'])" ], - "execution_count": 16, + "execution_count": null, "outputs": [] }, { @@ -1010,7 +1055,7 @@ "for layer in model.layers:\n", " print(layer.name, layer.trainable)" ], - "execution_count": 17, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -1039,7 +1084,7 @@ "for layer_number, layer in enumerate(base_model.layers):\n", " print(layer_number, layer.name, layer.trainable)" ], - "execution_count": 18, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -1319,7 +1364,7 @@ " validation_steps=int(0.15 * len(test_data)), # validate on 15% of the test data\n", " initial_epoch=history_all_classes_10_percent.epoch[-1]) # start from previous last epoch" ], - "execution_count": 19, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -1364,7 +1409,7 @@ "results_all_classes_10_percent_fine_tune = model.evaluate(test_data)\n", "results_all_classes_10_percent_fine_tune" ], - "execution_count": 20, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -1391,7 +1436,7 @@ "id": "bMSF7Qfe9cJI" }, "source": [ - "Hmm... it seems like our model got a slight boost from fine-tuning. \n", + "Hmm... it seems like our model got a slight boost from fine-tuning.\n", "\n", "We might get a better picture by using our `compare_historys()` function and seeing what the training curves say." ] @@ -1411,7 +1456,7 @@ " new_history=history_all_classes_10_percent_fine_tune,\n", " initial_epochs=5)" ], - "execution_count": 21, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -1431,7 +1476,7 @@ "id": "qW03mqzx9z3R" }, "source": [ - "It seems that after fine-tuning, our model's training metrics improved significantly but validation, not so much. Looks like our model is starting to overfit. \n", + "It seems that after fine-tuning, our model's training metrics improved significantly but validation, not so much. Looks like our model is starting to overfit.\n", "\n", "This is okay though, its very often the case that fine-tuning leads to overfitting when the data a pre-trained model has been trained on is similar to your custom data.\n", "\n", @@ -1457,10 +1502,10 @@ "id": "b_n1TFbl_FPp" }, "source": [ - "# # Save model to drive so it can be used later \n", + "# # Save model to drive so it can be used later\n", "# model.save(\"drive/My Drive/tensorflow_course/101_food_class_10_percent_saved_big_dog_model\")" ], - "execution_count": 22, + "execution_count": null, "outputs": [] }, { @@ -1524,7 +1569,7 @@ "loaded_loss, loaded_accuracy = model.evaluate(test_data)\n", "loaded_loss, loaded_accuracy" ], - "execution_count": 24, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -1584,9 +1629,9 @@ }, "source": [ "# Make predictions with model\n", - "pred_probs = model.predict(test_data, verbose=1) # set verbosity to see how long it will take " + "pred_probs = model.predict(test_data, verbose=1) # set verbosity to see how long it will take" ], - "execution_count": 25, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -1621,7 +1666,7 @@ "# How many predictions are there?\n", "len(pred_probs)" ], - "execution_count": 26, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -1657,7 +1702,7 @@ "# What's the shape of our predictions?\n", "pred_probs.shape" ], - "execution_count": 27, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -1695,7 +1740,7 @@ "# How do they look?\n", "pred_probs[:10]" ], - "execution_count": 28, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -1745,7 +1790,7 @@ "print(f\"What prediction probability sample 0 looks like:\\n {pred_probs[0]}\")\n", "print(f\"The class with the highest predicted probability by the model for sample 0: {pred_probs[0].argmax()}\")" ], - "execution_count": 29, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -1815,7 +1860,7 @@ "# How do they look?\n", "pred_classes[:10]" ], - "execution_count": 30, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -1862,7 +1907,7 @@ " y_labels.append(labels.numpy().argmax()) # append the index which has the largest value (labels are one-hot)\n", "y_labels[:10] # check what they look like (unshuffled)" ], - "execution_count": 31, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -1900,7 +1945,7 @@ "# How many labels are there? (should be the same as how many prediction probabilities we have)\n", "len(y_labels)" ], - "execution_count": 32, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -1951,7 +1996,7 @@ "sklearn_accuracy = accuracy_score(y_labels, pred_classes)\n", "sklearn_accuracy" ], - "execution_count": 33, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -1979,7 +2024,7 @@ "import numpy as np\n", "print(f\"Close? {np.isclose(loaded_accuracy, sklearn_accuracy)} | Difference: {loaded_accuracy - sklearn_accuracy}\")" ], - "execution_count": 34, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -2009,12 +2054,12 @@ "id": "K6jZXmXUYUf_" }, "source": [ - "# We'll import our make_confusion_matrix function from https://github.com/mrdbourke/tensorflow-deep-learning/blob/main/extras/helper_functions.py \n", + "# We'll import our make_confusion_matrix function from https://github.com/mrdbourke/tensorflow-deep-learning/blob/main/extras/helper_functions.py\n", "# But if you run it out of the box, it doesn't really work for 101 classes...\n", "# the cell below adds a little functionality to make it readable.\n", "from helper_functions import make_confusion_matrix" ], - "execution_count": 35, + "execution_count": null, "outputs": [] }, { @@ -2023,7 +2068,7 @@ "id": "oMp8hlTZYXw-" }, "source": [ - "# Note: The following confusion matrix code is a remix of Scikit-Learn's \n", + "# Note: The following confusion matrix code is a remix of Scikit-Learn's\n", "# plot_confusion_matrix function - https://scikit-learn.org/stable/modules/generated/sklearn.metrics.plot_confusion_matrix.html\n", "import itertools\n", "import matplotlib.pyplot as plt\n", @@ -2031,7 +2076,7 @@ "from sklearn.metrics import confusion_matrix\n", "\n", "# Our function needs a different name to sklearn's plot_confusion_matrix\n", - "def make_confusion_matrix(y_true, y_pred, classes=None, figsize=(10, 10), text_size=15, norm=False, savefig=False): \n", + "def make_confusion_matrix(y_true, y_pred, classes=None, figsize=(10, 10), text_size=15, norm=False, savefig=False):\n", " \"\"\"Makes a labelled confusion matrix comparing predictions and ground truth labels.\n", "\n", " If classes is passed, confusion matrix will be labelled, if not, integer class values\n", @@ -2045,7 +2090,7 @@ " text_size: Size of output figure text (default=15).\n", " norm: normalize values or not (default=False).\n", " savefig: save confusion matrix to file (default=False).\n", - " \n", + "\n", " Returns:\n", " A labelled confusion matrix plot comparing y_true and y_pred.\n", "\n", @@ -2055,7 +2100,7 @@ " classes=class_names, # array of class label names\n", " figsize=(15, 15),\n", " text_size=10)\n", - " \"\"\" \n", + " \"\"\"\n", " # Create the confustion matrix\n", " cm = confusion_matrix(y_true, y_pred)\n", " cm_norm = cm.astype(\"float\") / cm.sum(axis=1)[:, np.newaxis] # normalize it\n", @@ -2071,16 +2116,16 @@ " labels = classes\n", " else:\n", " labels = np.arange(cm.shape[0])\n", - " \n", + "\n", " # Label the axes\n", " ax.set(title=\"Confusion Matrix\",\n", " xlabel=\"Predicted label\",\n", " ylabel=\"True label\",\n", " xticks=np.arange(n_classes), # create enough axis slots for each class\n", - " yticks=np.arange(n_classes), \n", + " yticks=np.arange(n_classes),\n", " xticklabels=labels, # axes will labeled with class names (if they exist) or ints\n", " yticklabels=labels)\n", - " \n", + "\n", " # Make x-axis labels appear on bottom\n", " ax.xaxis.set_label_position(\"bottom\")\n", " ax.xaxis.tick_bottom()\n", @@ -2109,7 +2154,7 @@ " if savefig:\n", " fig.savefig(\"confusion_matrix.png\")" ], - "execution_count": 36, + "execution_count": null, "outputs": [] }, { @@ -2135,7 +2180,7 @@ "class_names = test_data.class_names\n", "class_names[:10]" ], - "execution_count": 54, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -2187,7 +2232,7 @@ " norm=False,\n", " savefig=True)" ], - "execution_count": 38, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -2230,7 +2275,7 @@ "from sklearn.metrics import classification_report\n", "print(classification_report(y_labels, pred_classes))" ], - "execution_count": 39, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -2382,7 +2427,7 @@ "classification_report_dict = classification_report(y_labels, pred_classes, output_dict=True)\n", "classification_report_dict" ], - "execution_count": 58, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -2811,7 +2856,7 @@ "id": "ahHfjQmcVc5x" }, "source": [ - "Alright, there's still a fair few values here, how about we narrow down? \n", + "Alright, there's still a fair few values here, how about we narrow down?\n", "\n", "Since the f1-score combines precision and recall in one metric, let's focus on that.\n", "\n", @@ -2839,7 +2884,7 @@ " class_f1_scores[class_names[int(k)]] = v[\"f1-score\"]\n", "class_f1_scores" ], - "execution_count": 41, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -2983,7 +3028,7 @@ " \"f1-score\": list(class_f1_scores.values())}).sort_values(\"f1-score\", ascending=False)\n", "f1_scores.head()" ], - "execution_count": 59, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -3177,7 +3222,7 @@ "\n", "autolabel(scores)" ], - "execution_count": 43, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -3260,7 +3305,7 @@ " else:\n", " return img" ], - "execution_count": 44, + "execution_count": null, "outputs": [] }, { @@ -3271,7 +3316,7 @@ "source": [ "Image loading and preprocessing function ready.\n", "\n", - "Now let's write some code to: \n", + "Now let's write some code to:\n", "\n", "1. Load a few random images from the test dataset.\n", "2. Make predictions on them.\n", @@ -3295,7 +3340,7 @@ "\n", "plt.figure(figsize=(17, 10))\n", "for i in range(3):\n", - " # Choose a random image from a random class \n", + " # Choose a random image from a random class\n", " class_name = random.choice(class_names)\n", " filename = random.choice(os.listdir(test_dir + \"/\" + class_name))\n", " filepath = test_dir + class_name + \"/\" + filename\n", @@ -3303,7 +3348,7 @@ " # Load the image and make predictions\n", " img = load_and_prep_image(filepath, scale=False) # don't scale images for EfficientNet predictions\n", " pred_prob = model.predict(tf.expand_dims(img, axis=0)) # model accepts tensors of shape [None, 224, 224, 3]\n", - " pred_class = class_names[pred_prob.argmax()] # find the predicted class \n", + " pred_class = class_names[pred_prob.argmax()] # find the predicted class\n", "\n", " # Plot the image(s)\n", " plt.subplot(1, 3, i+1)\n", @@ -3315,7 +3360,7 @@ " plt.title(f\"actual: {class_name}, pred: {pred_class}, prob: {pred_prob.max():.2f}\", c=title_color)\n", " plt.axis(False);" ], - "execution_count": 45, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -3384,12 +3429,12 @@ "source": [ "# 1. Get the filenames of all of our test data\n", "filepaths = []\n", - "for filepath in test_data.list_files(\"101_food_classes_10_percent/test/*/*.jpg\", \n", + "for filepath in test_data.list_files(\"101_food_classes_10_percent/test/*/*.jpg\",\n", " shuffle=False):\n", " filepaths.append(filepath.numpy())\n", "filepaths[:10]" ], - "execution_count": 46, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -3423,7 +3468,7 @@ "* The class the model predicted (`pred_classes`).\n", "* The maximum prediction probabilitity value (`pred_probs.max(axis=1)`).\n", "* The ground truth class names.\n", - "* The predicted class names. " + "* The predicted class names." ] }, { @@ -3444,10 +3489,10 @@ " \"y_pred\": pred_classes,\n", " \"pred_conf\": pred_probs.max(axis=1), # get the maximum prediction probability value\n", " \"y_true_classname\": [class_names[i] for i in y_labels],\n", - " \"y_pred_classname\": [class_names[i] for i in pred_classes]}) \n", + " \"y_pred_classname\": [class_names[i] for i in pred_classes]})\n", "pred_df.head()" ], - "execution_count": 47, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -3653,7 +3698,7 @@ "pred_df[\"pred_correct\"] = pred_df[\"y_true\"] == pred_df[\"y_pred\"]\n", "pred_df.head()" ], - "execution_count": 48, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -3865,7 +3910,7 @@ "top_100_wrong = pred_df[pred_df[\"pred_correct\"] == False].sort_values(\"pred_conf\", ascending=False)[:100]\n", "top_100_wrong.head(20)" ], - "execution_count": 49, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -4259,7 +4304,7 @@ "images_to_view = 9\n", "start_index = 10 # change the start index to view more\n", "plt.figure(figsize=(15, 10))\n", - "for i, row in enumerate(top_100_wrong[start_index:start_index+images_to_view].itertuples()): \n", + "for i, row in enumerate(top_100_wrong[start_index:start_index+images_to_view].itertuples()):\n", " plt.subplot(3, 3, i+1)\n", " img = load_and_prep_image(row[1], scale=True)\n", " _, _, _, _, pred_prob, y_true, y_pred, _ = row # only interested in a few parameters of each row\n", @@ -4267,7 +4312,7 @@ " plt.title(f\"actual: {y_true}, pred: {y_pred} \\nprob: {pred_prob:.2f}\")\n", " plt.axis(False)" ], - "execution_count": 50, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -4298,7 +4343,7 @@ "id": "clDOL-NhDqfd" }, "source": [ - "## Test out the big dog model on test images as well as custom images of food \n", + "## Test out the big dog model on test images as well as custom images of food\n", "\n", "So far we've visualized some our model's predictions from the test dataset but it's time for the real test: using our model to make predictions on our own custom images of food.\n", "\n", @@ -4323,9 +4368,9 @@ "# Note: you can upload your own custom images to Google Colab using the \"upload\" button in the Files tab\n", "!wget https://storage.googleapis.com/ztm_tf_course/food_vision/custom_food_images.zip\n", "\n", - "unzip_data(\"custom_food_images.zip\") " + "unzip_data(\"custom_food_images.zip\")" ], - "execution_count": 51, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -4369,7 +4414,7 @@ "custom_food_images = [\"custom_food_images/\" + img_path for img_path in os.listdir(\"custom_food_images\")]\n", "custom_food_images" ], - "execution_count": 52, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -4419,7 +4464,7 @@ " plt.title(f\"pred: {pred_class}, prob: {pred_prob.max():.2f}\")\n", " plt.axis(False)" ], - "execution_count": 53, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -4520,9 +4565,9 @@ "\n", "1. Take 3 of your own photos of food and use the trained model to make predictions on them, share your predictions with the other students in Discord and show off your Food Vision model 🍔👁.\n", "2. Train a feature-extraction transfer learning model for 10 epochs on the same data and compare its performance versus a model which used feature extraction for 5 epochs and fine-tuning for 5 epochs (like we've used in this notebook). Which method is better?\n", - "3. Recreate our first model (the feature extraction model) with [`mixed_precision`](https://www.tensorflow.org/guide/mixed_precision) turned on. \n", - " * Does it make the model train faster? \n", - " * Does it effect the accuracy or performance of our model? \n", + "3. Recreate our first model (the feature extraction model) with [`mixed_precision`](https://www.tensorflow.org/guide/mixed_precision) turned on.\n", + " * Does it make the model train faster?\n", + " * Does it effect the accuracy or performance of our model?\n", " * What's the advatanges of using `mixed_precision` training?" ] }, diff --git a/extras/helper_functions.py b/extras/helper_functions.py index a5d604f..dd4b28a 100644 --- a/extras/helper_functions.py +++ b/extras/helper_functions.py @@ -2,6 +2,8 @@ ### Storing them here so they're easily accessible. import tensorflow as tf +import datetime +import os # Create a function to import an image and resize it to be able to be used with our model def load_and_prep_image(filename, img_shape=224, scale=True): @@ -131,27 +133,28 @@ def pred_and_plot(model, filename, class_names): plt.imshow(img) plt.title(f"Prediction: {pred_class}") plt.axis(False); - -import datetime -def create_tensorboard_callback(dir_name, experiment_name): + +def create_tensorboard_callback(experiment_name): """ - Creates a TensorBoard callback instand to store log files. + Creates a TensorBoard callback instand to store log files. - Stores log files with the filepath: - "dir_name/experiment_name/current_datetime/" + Stores log files with the filepath: + "dir_name/experiment_name/current_datetime/" - Args: - dir_name: target directory to store TensorBoard log files - experiment_name: name of experiment directory (e.g. efficientnet_model_1) + Args: + dir_name: target directory to store TensorBoard log files + experiment_name: name of experiment directory (e.g. efficientnet_model_1) """ - log_dir = dir_name + "/" + experiment_name + "/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S") + logfit_dir = "logs/fit/" + path_experiment = (os.path.join(logfit_dir, experiment_name, datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))) tensorboard_callback = tf.keras.callbacks.TensorBoard( - log_dir=log_dir + log_dir=path_experiment ) - print(f"Saving TensorBoard log files to: {log_dir}") + print(f"Saving TensorBoard log files to: {logfit_dir}") return tensorboard_callback + # Plot the validation and training data separately import matplotlib.pyplot as plt